GNU bug report logs - #70036
30.0.50; Move file-truename to the C level

Please note: This is a static page, with minimal formatting, updated once a day.
Click here to see this page with the latest information and nicer formatting.

Package: emacs; Reported by: Theodor Thornhill <theo@HIDDEN>; dated Wed, 27 Mar 2024 19:10:02 UTC; Maintainer for emacs is bug-gnu-emacs@HIDDEN.

Message received at 70036 <at> debbugs.gnu.org:


Received: (at 70036) by debbugs.gnu.org; 30 Apr 2024 11:30:19 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Tue Apr 30 07:30:19 2024
Received: from localhost ([127.0.0.1]:59395 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1s1lgW-0005FU-F3
	for submit <at> debbugs.gnu.org; Tue, 30 Apr 2024 07:30:19 -0400
Received: from mout02.posteo.de ([185.67.36.66]:40471)
 by debbugs.gnu.org with esmtp (Exim 4.84_2)
 (envelope-from <yantar92@HIDDEN>) id 1s1lgT-0004sV-1b
 for 70036 <at> debbugs.gnu.org; Tue, 30 Apr 2024 07:30:06 -0400
Received: from submission (posteo.de [185.67.36.169]) 
 by mout02.posteo.de (Postfix) with ESMTPS id 89657240105
 for <70036 <at> debbugs.gnu.org>; Tue, 30 Apr 2024 13:29:38 +0200 (CEST)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=posteo.net; s=2017;
 t=1714476578; bh=G+WS+ELan3bp0iTqUR0ePThlmgfihv2wR5SpC+MfSNk=;
 h=From:To:Cc:Subject:Date:Message-ID:MIME-Version:Content-Type:
 From;
 b=as3SmemyELBcb5kwTuYMb3xjHo11TbsFIbfWuwZgUcD7R1CUCcRnzbSx89A00r+KU
 W2dOkhWGidk2tQLxkIgYzyLhfzi7WI3CF7fNd5YwEkZ48ggaO07AtAvXPjzjpdbem/
 Ttd8jkxbaTKG1tYRo/Wjr6ihaoV2YzJ58seHQXYWi7f0pweu9fk2YfaS2Qq9E6BROR
 2XgdrB62cSiaoOsEEhNMIOCvcAa6OURH7qIAg+Mlqf7Y5UEDOn1HFPWI9QKZJ1yKDA
 BovmYkUdfSmd47FiOGAiIZJikGDCxjjPBHPk6dnFAW1LV3l/PVrzxk2a13ySanHnQ9
 aUIYwrNqJDtNg==
Received: from customer (localhost [127.0.0.1])
 by submission (posteo.de) with ESMTPSA id 4VTHzP2Ckvz9rxB;
 Tue, 30 Apr 2024 13:29:36 +0200 (CEST)
From: Ihor Radchenko <yantar92@HIDDEN>
To: Eli Zaretskii <eliz@HIDDEN>
Subject: Re: bug#70036: a fix that
In-Reply-To: <86sezhbp7g.fsf@HIDDEN>
References: <CALDnm517N=DM+0tqBpHCGiHenPMirq2eFJF+Gk0ePO+W6WO-Ug@HIDDEN>
 <4e670617-6483-4159-a5cf-27a921764c38@HIDDEN>
 <CALDnm536w_khSks_rG-X-TH+hDiVddcmv=jaMHVQT_KgFh1xkA@HIDDEN>
 <864jbxden1.fsf@HIDDEN> <877cgt7ptk.fsf@localhost>
 <86sezhbp7g.fsf@HIDDEN>
Date: Tue, 30 Apr 2024 11:30:39 +0000
Message-ID: <87r0enozog.fsf@localhost>
MIME-Version: 1.0
Content-Type: multipart/mixed; boundary="=-=-="
X-Spam-Score: -2.3 (--)
X-Debbugs-Envelope-To: 70036
Cc: theo@HIDDEN, 70036 <at> debbugs.gnu.org, felician.nemeth@HIDDEN,
 joaotavora@HIDDEN
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -3.3 (---)

--=-=-=
Content-Type: text/plain

Eli Zaretskii <eliz@HIDDEN> writes:

>> There are some easy things that can be done to improve `file-truename'
>> performance somewhat. For example, the number of calls to
>> `file-name-nondirectory' can be trivially reduced in the `file-truename'
>> code - it is called up to three times in a row.
>> 
>> (see my earlier message in https://yhetil.org/emacs-bugs/87jzlmd831.fsf@localhost/)
>> 
>> Will it be of interest?
>
> Yes, of course.  Those kinds of changes are no-brainers, really.

See the attached patch.


--=-=-=
Content-Type: text/x-patch
Content-Disposition: inline;
 filename=0001-Improve-performance-of-file-truename-bug-70036.patch

From cde58b309588008707cc8b00919eb24801e42eb6 Mon Sep 17 00:00:00 2001
Message-ID: <cde58b309588008707cc8b00919eb24801e42eb6.1714476584.git.yantar92@HIDDEN>
From: Ihor Radchenko <yantar92@HIDDEN>
Date: Tue, 30 Apr 2024 14:27:04 +0300
Subject: [PATCH] Improve performance of `file-truename' (bug#70036)

* lisp/files.el (file-truename): Avoid repetitive calls to
`file-name-nondirectory'.  These calls contribute significantly to CPU
time.  See the benchmarks in
https://debbugs.gnu.org/cgi/bugreport.cgi?bug=70036#47
---
 lisp/files.el | 43 ++++++++++++++++++++++---------------------
 1 file changed, 22 insertions(+), 21 deletions(-)

diff --git a/lisp/files.el b/lisp/files.el
index 7dec67c5cf0..b7ebb727c72 100644
--- a/lisp/files.el
+++ b/lisp/files.el
@@ -1504,27 +1504,28 @@ file-truename
 			(new (file-name-as-directory (file-truename dirfile counter prev-dirs))))
 		    (setcar prev-dirs (cons (cons old new) (car prev-dirs)))
 		    (setq dir new))))
-	    (if (equal ".." (file-name-nondirectory filename))
-		(setq filename
-		      (directory-file-name (file-name-directory (directory-file-name dir)))
-		      done t)
-	      (if (equal "." (file-name-nondirectory filename))
-		  (setq filename (directory-file-name dir)
-			done t)
-		;; Put it back on the file name.
-		(setq filename (concat dir (file-name-nondirectory filename)))
-		;; Is the file name the name of a link?
-		(setq target (file-symlink-p filename))
-		(if target
-		    ;; Yes => chase that link, then start all over
-		    ;; since the link may point to a directory name that uses links.
-		    ;; We can't safely use expand-file-name here
-		    ;; since target might look like foo/../bar where foo
-		    ;; is itself a link.  Instead, we handle . and .. above.
-		    (setq filename (files--splice-dirname-file dir target)
-			  done nil)
-		  ;; No, we are done!
-		  (setq done t))))))))
+            (let ((filename-no-dir (file-name-nondirectory filename)))
+	      (if (equal ".." filename-no-dir)
+		  (setq filename
+		        (directory-file-name (file-name-directory (directory-file-name dir)))
+		        done t)
+	        (if (equal "." filename-no-dir)
+		    (setq filename (directory-file-name dir)
+			  done t)
+		  ;; Put it back on the file name.
+		  (setq filename (concat dir filename-no-dir))
+		  ;; Is the file name the name of a link?
+		  (setq target (file-symlink-p filename))
+		  (if target
+		      ;; Yes => chase that link, then start all over
+		      ;; since the link may point to a directory name that uses links.
+		      ;; We can't safely use expand-file-name here
+		      ;; since target might look like foo/../bar where foo
+		      ;; is itself a link.  Instead, we handle . and .. above.
+		      (setq filename (files--splice-dirname-file dir target)
+			    done nil)
+		    ;; No, we are done!
+		    (setq done t)))))))))
     filename))
 
 (defun file-chase-links (filename &optional limit)
-- 
2.44.0


--=-=-=
Content-Type: text/plain


-- 
Ihor Radchenko // yantar92,
Org mode contributor,
Learn more about Org mode at <https://orgmode.org/>.
Support Org development at <https://liberapay.com/org-mode>,
or support my work at <https://liberapay.com/yantar92>

--=-=-=--




Information forwarded to bug-gnu-emacs@HIDDEN:
bug#70036; Package emacs. Full text available.

Message received at 70036 <at> debbugs.gnu.org:


Received: (at 70036) by debbugs.gnu.org; 22 Apr 2024 22:12:05 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Mon Apr 22 18:12:05 2024
Received: from localhost ([127.0.0.1]:48152 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1rz1tN-0002Fy-7Y
	for submit <at> debbugs.gnu.org; Mon, 22 Apr 2024 18:12:05 -0400
Received: from wfout2-smtp.messagingengine.com ([64.147.123.145]:35809)
 by debbugs.gnu.org with esmtp (Exim 4.84_2)
 (envelope-from <dmitry@HIDDEN>) id 1rz1tK-0002FP-62
 for 70036 <at> debbugs.gnu.org; Mon, 22 Apr 2024 18:12:03 -0400
Received: from compute7.internal (compute7.nyi.internal [10.202.2.48])
 by mailfout.west.internal (Postfix) with ESMTP id 6C5851C000CD;
 Mon, 22 Apr 2024 18:11:39 -0400 (EDT)
Received: from mailfrontend2 ([10.202.2.163])
 by compute7.internal (MEProxy); Mon, 22 Apr 2024 18:11:39 -0400
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gutov.dev; h=cc
 :cc:content-transfer-encoding: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=fm1; t=1713823898;
 x=1713910298; bh=eGOwyStwAdgWX4TZW601tTG0wABHbn7S8dXLNGlLy34=; b=
 oWsdsmWsnczrOjyFJ9RZw84JAo7mMC12206+AkfIecZkKZgAtVhL7oWZWvvnQi+D
 yIFIz5+nPE17gILW4d0N9oiLlhIqqDlFBVJzwLZCcJPmUHHAH9KlJ/S61GXK+Vs4
 NDElU0QYbuFDB3yJ8Kw6jhhHKmDaLfK6jzlnNryuG7qkXYNAgjYTBFQ9Dod/exr9
 KYgyoyWR7jDehUun4Qp4pWQHNk3Z28behD8ZjZCIfz2himPhPeyAl5PKQiWs4Ebq
 GBjU1u+zrsGBDJ1CrZ0X46wvJRqTalEEVQ2u0siPmsPcBVVabHwVl18gUvV7NTF6
 KpORFK7ENrU05Vp7afOuwA==
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=
 messagingengine.com; h=cc:cc:content-transfer-encoding
 :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=fm3; t=1713823898; x=
 1713910298; bh=eGOwyStwAdgWX4TZW601tTG0wABHbn7S8dXLNGlLy34=; b=P
 bZwDZ8JWT+MKjyyU9lPG0ju9BJmUGniC8UFDB8izAPPc9heHEK8G2yzUruVaKm0t
 OlY1C+8u+heQBql5xrIEMw5B+2EckTZ/wcbxJ2vJOa1v13JQ+s+R2TFAIrbPuZir
 i85Cgn+3uRjJIPGWpACKlRRMZ5DZpmdj9zkDrU7SCbwmLpE9F/PKRCxk0aLIbGLN
 wHAuhud+gLQSabn89lf7v2MMCGCpJFcjuqoTkP1kXx0yaNhmIQAezMRj2NC8TVqH
 eMc/uGkq8kw8E7FupsoLai+aIJYITmrUE4axIWmGDX8Y6ae9FfK5JrPSJEkByGN4
 un0inuCar5shUUKaiPdqw==
X-ME-Sender: <xms:muAmZhhhCEtcyP4jMGLnSsoM9mMWPM2tc-FFpf6HBm1OpebV2_N_8g>
 <xme:muAmZmAD4xPpC_Mrk6n8jO_CxLtq9R4FREZRB3h9iC9L6wTxKs-b42XmuWD0AzRKL
 qkMTXc6quXLvcAzayE>
X-ME-Received: <xmr:muAmZhEIkcBOTMLr7Rgvg3700bQQMMwHEUNgRYdCqE1es_NkfsQqj0AwjL8I5rz8PhrV>
X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgedvledrudeltddgtdekucetufdoteggodetrfdotf
 fvucfrrhhofhhilhgvmecuhfgrshhtofgrihhlpdfqfgfvpdfurfetoffkrfgpnffqhgen
 uceurghilhhouhhtmecufedttdenucesvcftvggtihhpihgvnhhtshculddquddttddmne
 cujfgurhepkfffgggfuffvvehfhfgjtgfgsehtkeertddtvdejnecuhfhrohhmpeffmhhi
 thhrhicuifhuthhovhcuoegumhhithhrhiesghhuthhovhdruggvvheqnecuggftrfgrth
 htvghrnhepgeelfeetkefghfdvhfdtgeevveevteetgeetveegtedthefhudekteehffeu
 keeknecuvehluhhsthgvrhfuihiivgeptdenucfrrghrrghmpehmrghilhhfrhhomhepug
 hmihhtrhihsehguhhtohhvrdguvghv
X-ME-Proxy: <xmx:muAmZmQhj71jAOfHx4_3dbhWohBjM4Flx6MWk9mLPXTr-7SPU5drJw>
 <xmx:muAmZuzTZAo2MUPQxezHisun8maut1Nb9i1jQdXWaB8BZ8tyeO2nNw>
 <xmx:muAmZs7fyonq7NoneVORlrnc0fLxd1V8kkF42NzVoOzSBAjpf1dDhw>
 <xmx:muAmZjzw-Vi41268e4qY1RZ1fy4Mj0A0B46iBR9ggs3H6YV_KMIbxA>
 <xmx:muAmZloV_rrCDL7DnYik9ca757AkfdO7O_47VDzJgdF1l9vDuWa-QeZA>
Feedback-ID: i0e71465a:Fastmail
Received: by mail.messagingengine.com (Postfix) with ESMTPA; Mon,
 22 Apr 2024 18:11:36 -0400 (EDT)
Message-ID: <cee76ff8-64f3-4455-950d-764db7ace573@HIDDEN>
Date: Tue, 23 Apr 2024 01:11:34 +0300
MIME-Version: 1.0
User-Agent: Mozilla Thunderbird
Subject: Re: bug#70036: a fix that
To: =?UTF-8?B?Sm/Do28gVMOhdm9yYQ==?= <joaotavora@HIDDEN>,
 Eli Zaretskii <eliz@HIDDEN>
References: <86y19ad61t.fsf@HIDDEN>
 <43de4151-ab68-4214-8691-33f3554feba1@HIDDEN>
 <CALDnm53J14dj1he+d8VF=ZB--XymExDkKL45XXAdVTb5VcDryw@HIDDEN>
 <86r0f2d46x.fsf@HIDDEN>
 <CALDnm50xhhcsFYqvFFUAQqRhPmqHtzo3dB5uyqQAygkW-y4EHg@HIDDEN>
 <86jzkud0be.fsf@HIDDEN>
 <CALDnm517N=DM+0tqBpHCGiHenPMirq2eFJF+Gk0ePO+W6WO-Ug@HIDDEN>
Content-Language: en-US
From: Dmitry Gutov <dmitry@HIDDEN>
In-Reply-To: <CALDnm517N=DM+0tqBpHCGiHenPMirq2eFJF+Gk0ePO+W6WO-Ug@HIDDEN>
Content-Type: text/plain; charset=UTF-8; format=flowed
Content-Transfer-Encoding: 8bit
X-Spam-Score: 0.0 (/)
X-Debbugs-Envelope-To: 70036
Cc: theo@HIDDEN, 70036 <at> debbugs.gnu.org, felician.nemeth@HIDDEN
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -1.0 (-)

Hi Joao,

On 18/04/2024 23:21, João Távora wrote:
> * I had to take a long timeout from Eglot maintenance for personal
> reasons managed to get maintainers for Flymake and Jsonrpc, but I am
> still Eglot maintainer.

Would it make sense to update the "Maintainer:" headers for flymake and 
jsonrpc?




Information forwarded to bug-gnu-emacs@HIDDEN:
bug#70036; Package emacs. Full text available.

Message received at 70036 <at> debbugs.gnu.org:


Received: (at 70036) by debbugs.gnu.org; 19 Apr 2024 21:33:09 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Fri Apr 19 17:33:08 2024
Received: from localhost ([127.0.0.1]:60496 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1rxvqw-0007q9-Rk
	for submit <at> debbugs.gnu.org; Fri, 19 Apr 2024 17:33:07 -0400
Received: from mail-lf1-x12f.google.com ([2a00:1450:4864:20::12f]:50210)
 by debbugs.gnu.org with esmtp (Exim 4.84_2)
 (envelope-from <joaotavora@HIDDEN>) id 1rxvqn-0007o2-1N
 for 70036 <at> debbugs.gnu.org; Fri, 19 Apr 2024 17:32:57 -0400
Received: by mail-lf1-x12f.google.com with SMTP id
 2adb3069b0e04-5196c755e82so3374007e87.0
 for <70036 <at> debbugs.gnu.org>; Fri, 19 Apr 2024 14:32:38 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=gmail.com; s=20230601; t=1713562352; x=1714167152; darn=debbugs.gnu.org;
 h=content-transfer-encoding:cc:to:subject:message-id:date:from
 :in-reply-to:references:mime-version:from:to:cc:subject:date
 :message-id:reply-to;
 bh=bYUIVldT7Y4HETmG/zVf120qDbpt6U4LDbjzezyHI/s=;
 b=SBKH3AaHuxnj3t/OcDjFBUndE+1Uta8fyyRmrlosEpdV1p7rbDolFGreCaV2l1ZLZe
 qOumFB0anh7gN1K6wMSw9wrSTsSaaqh3yqkEkH0e5T4vt9KOS5tEYPWohcnOIEx+1T0a
 nidDXbtobggMIOPOrSpoh0+OAWWE0DKla3Agsm57DHZrzib1vyfB5pdC0UsdvqLRZ/rM
 Av/hE1+2CfQf/GDLa0uzCzzoQlhTmEVl8mW/U1ZRq3H9eSXUrVtC8Fj1jFxCfRCjrseC
 Ki4HxJypkagbbvzJFHpNQpUBY9ewiNmcZYfZNIgxzYNgnxkQh9uw0F9+v/O82fd43Wki
 +dwA==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=1e100.net; s=20230601; t=1713562352; x=1714167152;
 h=content-transfer-encoding:cc:to:subject:message-id:date:from
 :in-reply-to:references:mime-version:x-gm-message-state:from:to:cc
 :subject:date:message-id:reply-to;
 bh=bYUIVldT7Y4HETmG/zVf120qDbpt6U4LDbjzezyHI/s=;
 b=FGUY0/skXikN2zmxXe7bNeHaWxO/9Z6oUj0lDSkiyOJ0dgjK6aG/zXlUpZRtBevQNx
 KTJSdljensubwVHnEfNGW7A0fKJFYPNixvfLHJXPXKQowjDh3nqBMAnnfQt+IXCx2zWV
 OQaGWhWrYPJcZsaHTHMJbdwdRJVKGTrnQTj0juE1DGHDfr3gJrGrx6oxwSx4LrfKaP0f
 oWCdJnAC5KChT+erNi9OC+SoMeetHTmTggaZnaY7oA7rb34WakA7bHTfPj+B5C9DKPO7
 qxxTIw8UhWOAEmGTNXL22k9U/q8K+OHHvFySf5LAtFuRag6S5FPoeFm8ZrRB9BP55XLF
 nypw==
X-Forwarded-Encrypted: i=1;
 AJvYcCWNhKrITwXzGTsYW4V76GUueBZr2dAfBkDGZ4uQpIP/Rp++VN0p1b/cr1vOIWX0I8radRSdaRk5h6w7OFw+e3pDyiza0hU=
X-Gm-Message-State: AOJu0Yy6wuI8ORF1FguYU3i1rhVk1g0Jf/MhZ75qS/3UAwAxLRtxOlQ5
 b9FX2I4HgW1h/ICGYrrsmeBYLPAEvBPkDi5acTzTZjmZ1SH1Dbj4bOAHJKJ4eBdwvUW+lr8GdYe
 04Wsf8ZalHra5qLsKyXCJiFeU7WA=
X-Google-Smtp-Source: AGHT+IGsw+gz9EYVcAvRK+JCk4ryhx8F3HFjPVl0YSi4+1+AzD4skFRKB6yfj84z5nd3QhunAGKEpXbLCSK1WbLykt4=
X-Received: by 2002:a19:381a:0:b0:516:d47d:34b9 with SMTP id
 f26-20020a19381a000000b00516d47d34b9mr2136168lfa.22.1713562352040; Fri, 19
 Apr 2024 14:32:32 -0700 (PDT)
MIME-Version: 1.0
References: <CALDnm517N=DM+0tqBpHCGiHenPMirq2eFJF+Gk0ePO+W6WO-Ug@HIDDEN>
 <4e670617-6483-4159-a5cf-27a921764c38@HIDDEN>
 <CALDnm536w_khSks_rG-X-TH+hDiVddcmv=jaMHVQT_KgFh1xkA@HIDDEN>
 <864jbxden1.fsf@HIDDEN>
 <CALDnm50V6pqeXivS8ZoOh4LBMHX7_9=68Zi1im5U36Djmf9gQQ@HIDDEN>
 <86r0f1bopx.fsf@HIDDEN> <87r0f1mvtx.fsf@HIDDEN>
 <CALDnm51VaFz73kgOh_YyEryvGTrRuw7hmQXvLTY4DmZgPcKyPw@HIDDEN>
 <871q71kspk.fsf@HIDDEN>
In-Reply-To: <871q71kspk.fsf@HIDDEN>
From: =?UTF-8?B?Sm/Do28gVMOhdm9yYQ==?= <joaotavora@HIDDEN>
Date: Fri, 19 Apr 2024 22:32:20 +0100
Message-ID: <CALDnm51a4TUwNY7PbCAr2MamB7uehSmUyXc83=YgEM7KQe0bzQ@HIDDEN>
Subject: Re: bug#70036 a fix that
To: Theodor Thornhill <theo@HIDDEN>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable
X-Spam-Score: 0.0 (/)
X-Debbugs-Envelope-To: 70036
Cc: Eli Zaretskii <eliz@HIDDEN>, 70036 <at> debbugs.gnu.org,
 felician.nemeth@HIDDEN
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -1.0 (-)

On Fri, Apr 19, 2024 at 9:23=E2=80=AFPM Theodor Thornhill <theo@HIDDEN=
o> wrote:

> Please check out 49ef173b0287e17273e4476df16dca5f2196b11c. I just pushed
> the new version, with a test for the symlink scenario as a regression
> test.

Looks great.  I pushed some very minor tweaks (naming and comments)

Jo=C3=A3o




Information forwarded to bug-gnu-emacs@HIDDEN:
bug#70036; Package emacs. Full text available.

Message received at 70036 <at> debbugs.gnu.org:


Received: (at 70036) by debbugs.gnu.org; 19 Apr 2024 20:23:31 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Fri Apr 19 16:23:31 2024
Received: from localhost ([127.0.0.1]:60190 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1rxulf-00080e-0r
	for submit <at> debbugs.gnu.org; Fri, 19 Apr 2024 16:23:31 -0400
Received: from out-173.mta1.migadu.com ([95.215.58.173]:60228)
 by debbugs.gnu.org with esmtp (Exim 4.84_2)
 (envelope-from <theo@HIDDEN>) id 1rxulc-00080Y-VH
 for 70036 <at> debbugs.gnu.org; Fri, 19 Apr 2024 16:23:29 -0400
X-Report-Abuse: Please report any abuse attempt to abuse@HIDDEN and
 include these headers.
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=thornhill.no;
 s=key1; t=1713558188;
 h=from:from:reply-to:subject:subject:date:date:message-id:message-id:
 to:to:cc:cc:mime-version:mime-version:content-type:content-type:
 content-transfer-encoding:content-transfer-encoding:
 in-reply-to:in-reply-to:references:references;
 bh=FviIP0cnN6A99gqYA5bOPbr6vHfjbUpXlZ466lfQj/E=;
 b=qSglyhQZDRX+Vo0LiMMw0PhMHOjZFwohGbQRHHrVCfwXp4QYfhgVPSKVx3HGubaB//8NaH
 bYorG/w4IQ5bRNQKx1QjbLXqTjgHP8mpvNx1p6LRd4lVlF/VmligJHGAzn1q8WEUwWuLsV
 crCRKNvIbqrr1797vyH6U/RT78DUyHylJrtFFELk0NRork1Dr65//ZgdLzABYMSWR4YGUi
 rSy0fFAuchUNoKl60TDhEOy8SpxMzfhDjPm3mR2LSbDeSxW0ocCF2BG9Z71XvGfc7ZAfAi
 wzShm+kqQGw6IsQ/m2lAocLZzeAP/lrb5dVWbD+OSTDr7/ePMVeLzsnnyIbSjw==
From: Theodor Thornhill <theo@HIDDEN>
To: =?utf-8?B?Sm/Do28gVMOhdm9yYQ==?= <joaotavora@HIDDEN>
Subject: Re: bug#70036 a fix that
In-Reply-To: <CALDnm51VaFz73kgOh_YyEryvGTrRuw7hmQXvLTY4DmZgPcKyPw@HIDDEN>
References: <CALDnm517N=DM+0tqBpHCGiHenPMirq2eFJF+Gk0ePO+W6WO-Ug@HIDDEN>
 <4e670617-6483-4159-a5cf-27a921764c38@HIDDEN>
 <CALDnm536w_khSks_rG-X-TH+hDiVddcmv=jaMHVQT_KgFh1xkA@HIDDEN>
 <864jbxden1.fsf@HIDDEN>
 <CALDnm50V6pqeXivS8ZoOh4LBMHX7_9=68Zi1im5U36Djmf9gQQ@HIDDEN>
 <86r0f1bopx.fsf@HIDDEN> <87r0f1mvtx.fsf@HIDDEN>
 <CALDnm51VaFz73kgOh_YyEryvGTrRuw7hmQXvLTY4DmZgPcKyPw@HIDDEN>
Date: Fri, 19 Apr 2024 22:23:03 +0200
Message-ID: <871q71kspk.fsf@HIDDEN>
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable
X-Migadu-Flow: FLOW_OUT
X-Spam-Score: 0.0 (/)
X-Debbugs-Envelope-To: 70036
Cc: Eli Zaretskii <eliz@HIDDEN>, 70036 <at> debbugs.gnu.org,
 felician.nemeth@HIDDEN
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -1.0 (-)

Jo=C3=A3o T=C3=A1vora <joaotavora@HIDDEN> writes:

> On Fri, Apr 19, 2024 at 12:32=E2=80=AFPM Theodor Thornhill <theo@thornhil=
l.no> wrote:
>
>> I wonder - why can't we use just buffer-file-truename?
>>
>> In the below function, wouldn't buffer-file-truename let us avoid the
>> file-truename in eglot-path-to-uri?
>
> Never used, but try it out.  It seems it's already a built-in cache
> of whatever the buffer's truename is (and the docstring says
> it does call the slow `file-truename`).  But like in my patch, it's
> a one-time thing.  So yeah, if it's available in old Emacsen as well,
>  it could replace `eglot--cached-tdi`, but then the search in the
> publishDiagnostics
> handler would have to be adjusted accordingly to call uri-to-path again.
>
> Try it out, may be cleaner indeed.
>
> Beware though, Stefan has fixed the tests which is very good, but there
> still isn't a test for the symlink scenario, so you'd have to test it
> manually (or
> even better, craft that test yourself, with clangd).
>
> Jo=C3=A3o

Please check out 49ef173b0287e17273e4476df16dca5f2196b11c. I just pushed
the new version, with a test for the symlink scenario as a regression
test.

Thanks,
Theo




Information forwarded to bug-gnu-emacs@HIDDEN:
bug#70036; Package emacs. Full text available.

Message received at 70036 <at> debbugs.gnu.org:


Received: (at 70036) by debbugs.gnu.org; 19 Apr 2024 19:43:19 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Fri Apr 19 15:43:19 2024
Received: from localhost ([127.0.0.1]:60018 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1rxu8k-00030N-GN
	for submit <at> debbugs.gnu.org; Fri, 19 Apr 2024 15:43:19 -0400
Received: from out-170.mta0.migadu.com ([2001:41d0:1004:224b::aa]:58242)
 by debbugs.gnu.org with esmtp (Exim 4.84_2)
 (envelope-from <theo@HIDDEN>) id 1rxu8i-0002zO-I0
 for 70036 <at> debbugs.gnu.org; Fri, 19 Apr 2024 15:43:17 -0400
X-Report-Abuse: Please report any abuse attempt to abuse@HIDDEN and
 include these headers.
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=thornhill.no;
 s=key1; t=1713555775;
 h=from:from:reply-to:subject:subject:date:date:message-id:message-id:
 to:to:cc:cc:mime-version:mime-version:content-type:content-type:
 content-transfer-encoding:content-transfer-encoding:
 in-reply-to:in-reply-to:references:references;
 bh=d5rtgIqcUSbMQicNGXMIELuSm8Cjw4SyAS623CyAwyU=;
 b=TEtiLRCKQDCFQ+A7a1tgYu4h697XT/zT9DSdbr+Yqa6vKhmEAVBy0bjVnMDf2dT0j4wdAX
 AA6MudB6Hdp71b/o62nlz8t3L/nGfPcw4WowsiqakixVZ1KRYe/Qn6vDulpiHNeeEk1YJE
 uXaVFz7fLpQ+EBOcZpca9Whw69liC/GWIfuhdE+jQ+M+LAGYVmM40upWM4IOXUTk9eDmcZ
 cE7Cp9MdzDITPK89lPHYViUms2GIDumZrpiLEg8QqW9qDkaT7E0DBdXyYg8oz/PTSJWapU
 WNsXFmTm4hKubQID1o4ZwWJ1jKbC7NYgDvTGo/X8fJVBmChbsPNXluhEYRV1gQ==
From: Theodor Thornhill <theo@HIDDEN>
To: =?utf-8?B?Sm/Do28gVMOhdm9yYQ==?= <joaotavora@HIDDEN>
Subject: Re: bug#70036 a fix that
In-Reply-To: <CALDnm52YeOdfstCLTPzYo-Lw9a96a_zNhCK1w2dQz0Q3+mudGA@HIDDEN>
References: <CALDnm517N=DM+0tqBpHCGiHenPMirq2eFJF+Gk0ePO+W6WO-Ug@HIDDEN>
 <4e670617-6483-4159-a5cf-27a921764c38@HIDDEN>
 <CALDnm536w_khSks_rG-X-TH+hDiVddcmv=jaMHVQT_KgFh1xkA@HIDDEN>
 <864jbxden1.fsf@HIDDEN>
 <CALDnm50V6pqeXivS8ZoOh4LBMHX7_9=68Zi1im5U36Djmf9gQQ@HIDDEN>
 <CALDnm52rM4Q1UKoyhh8nekZuV4SYSX1=MKzuBoysSXHNvQBoRg@HIDDEN>
 <86le59bo7z.fsf@HIDDEN>
 <CALDnm52oOwD1cwmLt1wabh05gmh091vEycmKnUvrePmQaiGdQA@HIDDEN>
 <877cgtkyoq.fsf@HIDDEN>
 <CALDnm52YeOdfstCLTPzYo-Lw9a96a_zNhCK1w2dQz0Q3+mudGA@HIDDEN>
Date: Fri, 19 Apr 2024 21:42:50 +0200
Message-ID: <874jbxkukl.fsf@HIDDEN>
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable
X-Migadu-Flow: FLOW_OUT
X-Spam-Score: 0.0 (/)
X-Debbugs-Envelope-To: 70036
Cc: Eli Zaretskii <eliz@HIDDEN>, 70036 <at> debbugs.gnu.org,
 felician.nemeth@HIDDEN
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -1.0 (-)

Jo=C3=A3o T=C3=A1vora <joaotavora@HIDDEN> writes:

> On Fri, Apr 19, 2024 at 7:14=E2=80=AFPM Theodor Thornhill <theo@thornhill=
.no> wrote:
>>
>> Jo=C3=A3o T=C3=A1vora <joaotavora@HIDDEN> writes:
>>
>> Open main.go in emacs and M-x eglot. Observe error:
>> ```
>> compiler [DuplicateDecl]: main redeclared in this block (this error: oth=
er declaration of main)
>> ```
>
> Reproduced, but that's not Eglot's fault, couldn't be.  Eglot told
> gopls _nothing_  about mainlink.go.  Check your events buffer!  No
> didOpen for mainlink.go! In fact you probably don't even need to didOpen
> any file for that  problem to be reported as a project-wide diagnostic.
> A simple  initialize will do, I bet.  IOW, you barely need a client.
> Gopls decided to do some out-of-band  (meaning out-of-LSP) analysis
> of the code, bumped into its own  ignorance (or policy, who knows?)
> re. symlinks, and decided to  issue diagnostics.  Seems something a
> Go compiler would do.  Maybe it does?  Are symlinks even supported in
> Go projects?
>
> Bottom line is Eglot wasn't ever the hindrance for this to work and it
> should not suddenly become one. Not without a very good reason, which
> this performance matter clearly isn't (not least because there are lots
> of alternative solutions as we've seen)
>

Sure. I think it locates this file from the globbing in file
watchers. Because it matches a pattern it is allowed to read it. But
it's not important, mostly an example of how symlinks and lsps are
difficult.

As another point of reference, lsp-mode behaves the same as Eglot.

Theo




Information forwarded to bug-gnu-emacs@HIDDEN:
bug#70036; Package emacs. Full text available.

Message received at 70036 <at> debbugs.gnu.org:


Received: (at 70036) by debbugs.gnu.org; 19 Apr 2024 18:59:46 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Fri Apr 19 14:59:45 2024
Received: from localhost ([127.0.0.1]:59801 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1rxtSb-0006Ri-A7
	for submit <at> debbugs.gnu.org; Fri, 19 Apr 2024 14:59:45 -0400
Received: from mail-lf1-x130.google.com ([2a00:1450:4864:20::130]:45064)
 by debbugs.gnu.org with esmtp (Exim 4.84_2)
 (envelope-from <joaotavora@HIDDEN>) id 1rxtSY-0006Qo-Bi
 for 70036 <at> debbugs.gnu.org; Fri, 19 Apr 2024 14:59:43 -0400
Received: by mail-lf1-x130.google.com with SMTP id
 2adb3069b0e04-518f8a69f82so2904241e87.2
 for <70036 <at> debbugs.gnu.org>; Fri, 19 Apr 2024 11:59:27 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=gmail.com; s=20230601; t=1713553162; x=1714157962; darn=debbugs.gnu.org;
 h=content-transfer-encoding:cc:to:subject:message-id:date:from
 :in-reply-to:references:mime-version:from:to:cc:subject:date
 :message-id:reply-to;
 bh=lxrrwoe+DpljB+Hs1pXEMAr8f03U02QXV95tq/pQWE8=;
 b=TbNWO/Y8xvwZC6Y/f1cQC3/YqEiqcfWtJhz8yxMfifYqs2USaGpuDkXfbAVvbyKlxe
 +APLtyVLe5tgOCzEgb8RvVOygOn+TVyQ96w8wSB1UxPqo8vqJdduk9hSM/arddXz3WB4
 AIxpI7Elpwo3YyphKYvj5KqDIwuWb/W1mk5T3wVnyaKu4+RDdXT24MS+vYZLrft+LrSV
 46oxKWWraHl86+AJhsh8B1h17APmAVN4qPTrR4PDBuG4l/b2Tw4LOk9SypxSZW5ATewp
 ladIH6Mgdr1e6baTDGFsJPEk4SOpt31BW4Lg2TXrMSoyX/fg2rEH+DCc+Px+WSdH54S3
 Ib+w==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=1e100.net; s=20230601; t=1713553162; x=1714157962;
 h=content-transfer-encoding:cc:to:subject:message-id:date:from
 :in-reply-to:references:mime-version:x-gm-message-state:from:to:cc
 :subject:date:message-id:reply-to;
 bh=lxrrwoe+DpljB+Hs1pXEMAr8f03U02QXV95tq/pQWE8=;
 b=mae+KU5UAU7CVy1Inzf0f4UQbZ/JSmwu9ThGiGrLGfitREOllaBRtCLMf4PG36pAkL
 UJJ8+9KnEPqplmRvMSEtcpc65Foyjhmzo9Kz1MZQSTUFy44n3pat8gKmbDTfcxzaorAX
 C+jINbZ63U3fv9v1TfvCMi8kVJaTvpDAGvjDufEM7Bc+4/kuvMQIf0ZCOnAGwm2k6qcH
 ChGz5UayBu3jy1jH2QxTzDqENbqiF2Woox1FvPo30kYLICrUjmuAmGw8CFntmqSXa5a9
 uvy+M11EgqDpEaEow4MJEqx9Ne7T6C3V/3NhNy2QIiKFoEwPQPUw5cbNXWAZId9IDfdf
 +J/A==
X-Forwarded-Encrypted: i=1;
 AJvYcCXtohak2x8RhrBjcgBGCOosKrSXM+aAobgjSOHOZvz2k6VNvHoe5xCOkmOOrhZuo5ESCN2FFDe5OeEE31qoj4VJq8sbqP0=
X-Gm-Message-State: AOJu0YwYJSZRWh4wKAnqiw2+nUGMKHf72M/JIpCzyXN7WqmQ4Tg6/YZb
 oRhJQfWgdcsAdR92qwgvjeI2kqCBc681xA9L7sCY1LHilbdKDhJ2Vy3eXDLARrKl8j/TO/Mysam
 H4qLWqq5ggd5JQG8QKKBEKBPFZTQ=
X-Google-Smtp-Source: AGHT+IHkmmxRrXl0L5fEfdFh653/rRcrCTy2NDT5CeFqDTymL/wTs+mOYlwiAMCqM6p5npM8bB6Yo5UHLRSrbbWPzGg=
X-Received: by 2002:a05:6512:2ee:b0:51a:d1cb:ba0a with SMTP id
 m14-20020a05651202ee00b0051ad1cbba0amr1040799lfq.12.1713553161835; Fri, 19
 Apr 2024 11:59:21 -0700 (PDT)
MIME-Version: 1.0
References: <CALDnm517N=DM+0tqBpHCGiHenPMirq2eFJF+Gk0ePO+W6WO-Ug@HIDDEN>
 <4e670617-6483-4159-a5cf-27a921764c38@HIDDEN>
 <CALDnm536w_khSks_rG-X-TH+hDiVddcmv=jaMHVQT_KgFh1xkA@HIDDEN>
 <864jbxden1.fsf@HIDDEN>
 <CALDnm50V6pqeXivS8ZoOh4LBMHX7_9=68Zi1im5U36Djmf9gQQ@HIDDEN>
 <CALDnm52rM4Q1UKoyhh8nekZuV4SYSX1=MKzuBoysSXHNvQBoRg@HIDDEN>
 <86le59bo7z.fsf@HIDDEN>
 <CALDnm52oOwD1cwmLt1wabh05gmh091vEycmKnUvrePmQaiGdQA@HIDDEN>
 <877cgtkyoq.fsf@HIDDEN>
In-Reply-To: <877cgtkyoq.fsf@HIDDEN>
From: =?UTF-8?B?Sm/Do28gVMOhdm9yYQ==?= <joaotavora@HIDDEN>
Date: Fri, 19 Apr 2024 19:59:09 +0100
Message-ID: <CALDnm52YeOdfstCLTPzYo-Lw9a96a_zNhCK1w2dQz0Q3+mudGA@HIDDEN>
Subject: Re: bug#70036 a fix that
To: Theodor Thornhill <theo@HIDDEN>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable
X-Spam-Score: 0.0 (/)
X-Debbugs-Envelope-To: 70036
Cc: Eli Zaretskii <eliz@HIDDEN>, 70036 <at> debbugs.gnu.org,
 felician.nemeth@HIDDEN
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -1.0 (-)

On Fri, Apr 19, 2024 at 7:14=E2=80=AFPM Theodor Thornhill <theo@HIDDEN=
o> wrote:
>
> Jo=C3=A3o T=C3=A1vora <joaotavora@HIDDEN> writes:
>
> Open main.go in emacs and M-x eglot. Observe error:
> ```
> compiler [DuplicateDecl]: main redeclared in this block (this error: othe=
r declaration of main)
> ```

Reproduced, but that's not Eglot's fault, couldn't be.  Eglot told
gopls _nothing_  about mainlink.go.  Check your events buffer!  No
didOpen for mainlink.go! In fact you probably don't even need to didOpen
any file for that  problem to be reported as a project-wide diagnostic.
A simple  initialize will do, I bet.  IOW, you barely need a client.
Gopls decided to do some out-of-band  (meaning out-of-LSP) analysis
of the code, bumped into its own  ignorance (or policy, who knows?)
re. symlinks, and decided to  issue diagnostics.  Seems something a
Go compiler would do.  Maybe it does?  Are symlinks even supported in
Go projects?

Bottom line is Eglot wasn't ever the hindrance for this to work and it
should not suddenly become one. Not without a very good reason, which
this performance matter clearly isn't (not least because there are lots
of alternative solutions as we've seen)

Jo=C3=A3o




Information forwarded to bug-gnu-emacs@HIDDEN:
bug#70036; Package emacs. Full text available.

Message received at 70036 <at> debbugs.gnu.org:


Received: (at 70036) by debbugs.gnu.org; 19 Apr 2024 18:14:28 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Fri Apr 19 14:14:28 2024
Received: from localhost ([127.0.0.1]:59565 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1rxskl-00016A-Kr
	for submit <at> debbugs.gnu.org; Fri, 19 Apr 2024 14:14:28 -0400
Received: from out-172.mta0.migadu.com ([2001:41d0:1004:224b::ac]:45149)
 by debbugs.gnu.org with esmtp (Exim 4.84_2)
 (envelope-from <theo@HIDDEN>) id 1rxskg-00015H-NQ
 for 70036 <at> debbugs.gnu.org; Fri, 19 Apr 2024 14:14:26 -0400
X-Report-Abuse: Please report any abuse attempt to abuse@HIDDEN and
 include these headers.
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=thornhill.no;
 s=key1; t=1713550441;
 h=from:from:reply-to:subject:subject:date:date:message-id:message-id:
 to:to:cc:cc:mime-version:mime-version:content-type:content-type:
 content-transfer-encoding:content-transfer-encoding:
 in-reply-to:in-reply-to:references:references;
 bh=w+5ibz3QFRGMY5hb80+YAg43HLHtkkisrv9cVhc/cm8=;
 b=nDGHb9o3i7Hl8zL502lmZP3btO7hXHwM0oPicmIXyuU87JSaTnJlItuMY8h6wvISnCV5Bl
 NbCpTC2pkdvTlRwjgvxVC+IpwYS9Mn7MghIxFjq6qSNk5FnGYiBwYiNsaupmTG4aolp0eS
 OaQwAgEyuDXstJaFKf2fPpLZ31U3SuocfJGbKvKhTK3dlHgpR9TSlpdrTGb1QcUFaYS1H1
 G2fky5BDxpJ6VHoC2RF6GLR5IPGMHjcqx5gfPZRQcWQYoEsNpfHcum4rzEHYDKs8yDRmw+
 G4G2UHyut/kbLsrnYBGZVy+Ta0p5y/VUaSvzeZ5NbmNkaNGumn+h80mnjfhtiQ==
From: Theodor Thornhill <theo@HIDDEN>
To: =?utf-8?B?Sm/Do28gVMOhdm9yYQ==?= <joaotavora@HIDDEN>, Eli Zaretskii
 <eliz@HIDDEN>
Subject: Re: bug#70036 a fix that
In-Reply-To: <CALDnm52oOwD1cwmLt1wabh05gmh091vEycmKnUvrePmQaiGdQA@HIDDEN>
References: <CALDnm517N=DM+0tqBpHCGiHenPMirq2eFJF+Gk0ePO+W6WO-Ug@HIDDEN>
 <4e670617-6483-4159-a5cf-27a921764c38@HIDDEN>
 <CALDnm536w_khSks_rG-X-TH+hDiVddcmv=jaMHVQT_KgFh1xkA@HIDDEN>
 <864jbxden1.fsf@HIDDEN>
 <CALDnm50V6pqeXivS8ZoOh4LBMHX7_9=68Zi1im5U36Djmf9gQQ@HIDDEN>
 <CALDnm52rM4Q1UKoyhh8nekZuV4SYSX1=MKzuBoysSXHNvQBoRg@HIDDEN>
 <86le59bo7z.fsf@HIDDEN>
 <CALDnm52oOwD1cwmLt1wabh05gmh091vEycmKnUvrePmQaiGdQA@HIDDEN>
Date: Fri, 19 Apr 2024 20:13:57 +0200
Message-ID: <877cgtkyoq.fsf@HIDDEN>
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable
X-Migadu-Flow: FLOW_OUT
X-Spam-Score: 0.0 (/)
X-Debbugs-Envelope-To: 70036
Cc: 70036 <at> debbugs.gnu.org, felician.nemeth@HIDDEN
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -1.0 (-)

Jo=C3=A3o T=C3=A1vora <joaotavora@HIDDEN> writes:

> On Fri, Apr 19, 2024 at 12:12=E2=80=AFPM Eli Zaretskii <eliz@HIDDEN> wro=
te:
>
>> > > I _think_, but can't be 100% sure, that I explicitly decided that 6 =
years
>> > > ago, I just didn't document it  explicitly beyond typing in "file-tr=
uename".
>> > > Git archeology brings me to a commit in 2018 where I was reorganizing
>> > > code, and file-truename was already there.  I definitely knew about
>> > > expand-file-name in 2018 though.
>> >
>> > The fact that I chose find-buffer-visiting over get-file-buffer around
>> > the same time is another hint...
>>
>> Without proper commentary, this is a very weak hint.  It could, for
>> example, mean the problem you wanted to solve no longer exists, or
>> even that you were unsure about whether expand-file-name could do the
>> job.
>
> If I indeed _meant_ to solve the symlink problem, then it most definitely
> still exists.  I've demonstrated that.
>
> Intentional or not, the fact of the matter is that Eglot was usable
> from very early on projects with symlinks.   Not all clients can boast
> that, as seems to be evidenced some bug reports to the servers pertaining
> to some other clients.

FWIW this isn't true AFAICT.

Try this:

create foo.go:
```
package main

func foo () int {
	return 1
}
```

Then main.go
```
package main

func main () {
	foo()
}
```

now `ln -s main.go mainlink.go`

Open main.go in emacs and M-x eglot. Observe error:
```
compiler [DuplicateDecl]: main redeclared in this block (this error: other =
declaration of main)
```

This is from the revert commit. Same behavior from pre-my-fix, my-fix,
your first fix and the latest iteration. For now I'm guessing on the
register file watcher init for gopls not caring about symlinks.

>
> Regardless, foregoing this behaviour should be at a minimum documented
> and would need an extremely well-fundamented reason.  But there was not
> even sufficient awareness that the behaviour was being abandoned.  Which
> is, like, totally OK and common and normal, and doesn't bring into
> question the high  credentials of anyone  involved in this discussion.
>
> Jo=C3=A3o

Theo




Information forwarded to bug-gnu-emacs@HIDDEN:
bug#70036; Package emacs. Full text available.

Message received at 70036 <at> debbugs.gnu.org:


Received: (at 70036) by debbugs.gnu.org; 19 Apr 2024 14:32:59 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Fri Apr 19 10:32:59 2024
Received: from localhost ([127.0.0.1]:58509 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1rxpIQ-0000E9-SN
	for submit <at> debbugs.gnu.org; Fri, 19 Apr 2024 10:32:59 -0400
Received: from eggs.gnu.org ([2001:470:142:3::10]:50144)
 by debbugs.gnu.org with esmtp (Exim 4.84_2)
 (envelope-from <eliz@HIDDEN>) id 1rxpIN-0000D3-Kp
 for 70036 <at> debbugs.gnu.org; Fri, 19 Apr 2024 10:32:57 -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 <eliz@HIDDEN>)
 id 1rxpI2-0000hs-VU; Fri, 19 Apr 2024 10:32:35 -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=2D65E7IGJ9ZDVKUQznDHvZymis4xo95v5CaEFT2n9zo=; b=dyeOJDpwJ0Q531ZEk2ki
 2it7FGuQCv8+pYdiok2sWsKfKC+a4tHTyYZBVvQid2rANFC4HYrpfRJiPhZdkn/p++m/mftY2XgKr
 2nW9k/0fllOE4UooRIJ020sQkanbT0elbe5C6Eu+kxihryNv31/Dc26ptKWFES4ytI+lkUhIVb0gq
 7yilIvJG5eQerSN3rabnVWSDqADf/ELq3FmU2N3bDvuXd/2QQPfakS9d+FlKzJ6+BN9Y7UYfK11Rj
 rN/uzMiYwTpFpey8nMvCCks5RTq7D3CPW/pliwUkndFjkxMTnuGbMPx9Mvf9T69+59OR3rhhgnDB6
 bAxmB+tFS4JUQA==;
Date: Fri, 19 Apr 2024 17:32:24 +0300
Message-Id: <86a5lpbeyv.fsf@HIDDEN>
From: Eli Zaretskii <eliz@HIDDEN>
To: =?utf-8?B?Sm/Do28gVMOhdm9yYQ==?= <joaotavora@HIDDEN>
In-Reply-To: <CALDnm51c0sUM+piRqxgq_t4f5mE-8ws0pbsyLPV1acg-oWsHBQ@HIDDEN>
 (message from =?utf-8?B?Sm/Do28gVMOhdm9yYQ==?= on Fri, 19 Apr 2024 13:54:23
 +0100)
Subject: Re: bug#70036 a fix that
References: <4e670617-6483-4159-a5cf-27a921764c38@HIDDEN>
 <865xwddf5w.fsf@HIDDEN>
 <CALDnm51c0sUM+piRqxgq_t4f5mE-8ws0pbsyLPV1acg-oWsHBQ@HIDDEN>
MIME-version: 1.0
Content-type: text/plain; charset=utf-8
Content-Transfer-Encoding: 8bit
X-Spam-Score: -2.3 (--)
X-Debbugs-Envelope-To: 70036
Cc: felician.nemeth@HIDDEN, 70036 <at> debbugs.gnu.org, theo@HIDDEN
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -3.3 (---)

> From: João Távora <joaotavora@HIDDEN>
> Date: Fri, 19 Apr 2024 13:54:23 +0100
> Cc: Theodor Thornhill <theo@HIDDEN>, felician.nemeth@HIDDEN, 70036 <at> debbugs.gnu.org
> 
> On Fri, Apr 19, 2024 at 7:45 AM Eli Zaretskii <eliz@HIDDEN> wrote:
> 
> > Thanks, but that is not what I asked to provide, for us to make a
> > decision in this case.
> > Could you please show benchmark times of the old code (before your
> > changes), the code after your changes, and the current code in Git
> 
> I just noticed this and think a comment needs to be made about Eglot
> and performance measurements specifically.
> 
> If a good `benchmark-run` or invocation can be made to measure a specific
> problem, it is usually a very good tool.  But in Eglot, it's rare (*)
> 
> What some in this discussion may not understand is that Eglot works mostly
> asynchronously.  The user invokes commands that ask something of the
> server and that server will later respond with something that is hopefully
> still relevant somehow.  On-the-fly diagnostics work like this, and even
> startup can be asynchronous.  So any slowdowns are usually felt subjectively
> in input lag across a session where the user is doing some work.
> 
> More often than not, there isn't a
> 
>   (benchamark-run 10 (eglot-foo <some-spoofed-arguiments>))
> 
> that can tell us something useful.  It's more like "I feel diagnostics take
> longer to appear", "ElDoc spins my CPU fan", "completions feel laggy", and
> things like that.

benchamark-run can be unusable in this case, but primitives that
measure time are still useful, even if one needs to insert some
special calls into the code that measure time.

> So that's why the best way to communicate these problems is via a profile
> accompanied by the usual bullet-proof Emacs -Q recipe.  It should contain a
> clear description of when profiler-start and profiler-stop are invoked, and
> what the user did in between.   And that's _exactly_  what Theo did here,
> and was useful to me: I reproduced his results perfectly.  Those profiles
> easily tell us who the hotspots are at the Elisp level.

The profiler is not very useful in such cases because it doesn't
provide a clear picture of the time it took some code to execute.
Also because typically there's a large portion of it that points to
irrelevant functions line execute-extended-command etc.




Information forwarded to bug-gnu-emacs@HIDDEN:
bug#70036; Package emacs. Full text available.

Message received at 70036 <at> debbugs.gnu.org:


Received: (at 70036) by debbugs.gnu.org; 19 Apr 2024 12:54:59 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Fri Apr 19 08:54:59 2024
Received: from localhost ([127.0.0.1]:58273 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1rxnla-0005U0-Ol
	for submit <at> debbugs.gnu.org; Fri, 19 Apr 2024 08:54:59 -0400
Received: from mail-lj1-x230.google.com ([2a00:1450:4864:20::230]:53342)
 by debbugs.gnu.org with esmtp (Exim 4.84_2)
 (envelope-from <joaotavora@HIDDEN>) id 1rxnlY-0005Sj-9X
 for 70036 <at> debbugs.gnu.org; Fri, 19 Apr 2024 08:54:57 -0400
Received: by mail-lj1-x230.google.com with SMTP id
 38308e7fff4ca-2db2f6cb312so37097741fa.2
 for <70036 <at> debbugs.gnu.org>; Fri, 19 Apr 2024 05:54:42 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=gmail.com; s=20230601; t=1713531276; x=1714136076; darn=debbugs.gnu.org;
 h=content-transfer-encoding:cc:to:subject:message-id:date:from
 :in-reply-to:references:mime-version:from:to:cc:subject:date
 :message-id:reply-to;
 bh=OvT2EJQSp+R+oPdMFNZvuetqf3imcvvj3Ne/Gj8KT5U=;
 b=ZxHMiXBfzGdOOYOhpjoJf1osfG4A3VypUPpaaTRAbm3Ijc0C+1sTDNnHXd3oyzbxJn
 utNV1NYw2sEqKPVvt1jPnM7ZN9uaW6eShbrpprAPm0KsntV0qufNtmTAzkgOUqgi+Fgb
 LAbomZRj0kWI63VHFYuBt9vYfYNjlh2CxSuf6E94lGxNAXONUcROclFY+7+K4WrrkdNM
 OQimr+G8WWE0HsY0tOe6tepTPl+23mt26Y1n1f4IXBGVaQR1Uu4Ibf+NEhOGEGdenDpv
 vAMkrjv86HnhZiJct/kdPtFVWHwXEkVys+a8poLyOSp5ARnD0wJ519GCgGjXE6l7Yi57
 HkAA==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=1e100.net; s=20230601; t=1713531276; x=1714136076;
 h=content-transfer-encoding:cc:to:subject:message-id:date:from
 :in-reply-to:references:mime-version:x-gm-message-state:from:to:cc
 :subject:date:message-id:reply-to;
 bh=OvT2EJQSp+R+oPdMFNZvuetqf3imcvvj3Ne/Gj8KT5U=;
 b=ELYuJWkGm+x2haoe7S5b8sl3SCBpLuO0/vPh3SLlNwTmV8OC1oEdm8hW2x0IF5nPhX
 iXBWP6PkZ62ZJyoWzoS6pajIB0TiiLysWDU7eVjzdfGpqcXsXqVTcqQjCFAFGaETePXX
 zEovJjjzJT/s+hl7Jk2+H71Oq8lqbILN/+AKNozX8cigbmi3h78evAMmo47VX+mfksZQ
 zblS3dfnIPNd/1/jR/F++3hNK1t/JJPwvstZ0ZvrnRwnBss7m/qYc7vcFI/VfV1RY2EI
 3JhZhhJ081oHLca28BCt2ciHv7VOSS/k1rG/GLpy9/eA5LOntQzzRzFElK/DDxTwUDV3
 QE8g==
X-Forwarded-Encrypted: i=1;
 AJvYcCVebqF3OCfBZSMaUabQpHIr+6m3aFESFxqDMO66/5iE8YtsP/yjxhbgWvj2lb9whMKQTeeEi4IgcjTnNOV6s35mNLTwR7Y=
X-Gm-Message-State: AOJu0YyQ4JVCco7iBHVRcxpzCLB94BiAD6oVdP29CUTtV5d2mG3NOMrF
 4zVgY7WNESsMMGZOk/AP3fy5aKkGmYllSmuD0pDCIQWHGpcpDaxK+zfzK8xfJCXXAi0IdsxhZvJ
 Kd198ez02ZwEsM2LS1TMO3YatKCo=
X-Google-Smtp-Source: AGHT+IFVxPFGzNQRYIzrsKBidVSEZjtDlc8lx9nFnEe+T5fFvCAInCwxpbNII6qg43pn+JBnhVpMt39zA+96yzQT5SI=
X-Received: by 2002:a05:651c:2214:b0:2d8:5af9:90c5 with SMTP id
 y20-20020a05651c221400b002d85af990c5mr2040893ljq.39.1713531275955; Fri, 19
 Apr 2024 05:54:35 -0700 (PDT)
MIME-Version: 1.0
References: <4e670617-6483-4159-a5cf-27a921764c38@HIDDEN>
 <865xwddf5w.fsf@HIDDEN>
In-Reply-To: <865xwddf5w.fsf@HIDDEN>
From: =?UTF-8?B?Sm/Do28gVMOhdm9yYQ==?= <joaotavora@HIDDEN>
Date: Fri, 19 Apr 2024 13:54:23 +0100
Message-ID: <CALDnm51c0sUM+piRqxgq_t4f5mE-8ws0pbsyLPV1acg-oWsHBQ@HIDDEN>
Subject: Re: bug#70036 a fix that
To: Eli Zaretskii <eliz@HIDDEN>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable
X-Spam-Score: 0.0 (/)
X-Debbugs-Envelope-To: 70036
Cc: felician.nemeth@HIDDEN, 70036 <at> debbugs.gnu.org,
 Theodor Thornhill <theo@HIDDEN>
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -1.0 (-)

On Fri, Apr 19, 2024 at 7:45=E2=80=AFAM Eli Zaretskii <eliz@HIDDEN> wrote:

> Thanks, but that is not what I asked to provide, for us to make a
> decision in this case.
> Could you please show benchmark times of the old code (before your
> changes), the code after your changes, and the current code in Git

I just noticed this and think a comment needs to be made about Eglot
and performance measurements specifically.

If a good `benchmark-run` or invocation can be made to measure a specific
problem, it is usually a very good tool.  But in Eglot, it's rare (*)

What some in this discussion may not understand is that Eglot works mostly
asynchronously.  The user invokes commands that ask something of the
server and that server will later respond with something that is hopefully
still relevant somehow.  On-the-fly diagnostics work like this, and even
startup can be asynchronous.  So any slowdowns are usually felt subjectivel=
y
in input lag across a session where the user is doing some work.

More often than not, there isn't a

  (benchamark-run 10 (eglot-foo <some-spoofed-arguiments>))

that can tell us something useful.  It's more like "I feel diagnostics take
longer to appear", "ElDoc spins my CPU fan", "completions feel laggy", and
things like that.

Of course, special Elisp code can be crafted to simulate how a user
interacts with Eglot, but that's not always easy due to the need to
mock complex objects (the server object, notably) and the aforementioned
async nature.

So that's why the best way to communicate these problems is via a profile
accompanied by the usual bullet-proof Emacs -Q recipe.  It should contain a
clear description of when profiler-start and profiler-stop are invoked, and
what the user did in between.   And that's _exactly_  what Theo did here,
and was useful to me: I reproduced his results perfectly.  Those profiles
easily tell us who the hotspots are at the Elisp level.

That's IF the hotspots are even at the Elisp level, because often a
slow-responding server is all it takes.  In those cases Eglot/Elisp may
or may not be "off the hook", depending on whether the cause for server
slowness is some earlier misconfiguration that is ultimately Eglot's
fault.

Maybe some of this info should be added to the Eglot manual in its
troubleshooting section.

Jo=C3=A3o

(*) The eglot--glob section is a notable exception.  I used
benchmark-run to optimize back then.




Information forwarded to bug-gnu-emacs@HIDDEN:
bug#70036; Package emacs. Full text available.

Message received at 70036 <at> debbugs.gnu.org:


Received: (at 70036) by debbugs.gnu.org; 19 Apr 2024 12:21:03 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Fri Apr 19 08:21:02 2024
Received: from localhost ([127.0.0.1]:58249 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1rxnEj-0001Vz-6q
	for submit <at> debbugs.gnu.org; Fri, 19 Apr 2024 08:21:02 -0400
Received: from mail-lj1-x235.google.com ([2a00:1450:4864:20::235]:45303)
 by debbugs.gnu.org with esmtp (Exim 4.84_2)
 (envelope-from <joaotavora@HIDDEN>) id 1rxnEg-0001Um-9L
 for 70036 <at> debbugs.gnu.org; Fri, 19 Apr 2024 08:20:59 -0400
Received: by mail-lj1-x235.google.com with SMTP id
 38308e7fff4ca-2dcbcfe11f8so8859421fa.2
 for <70036 <at> debbugs.gnu.org>; Fri, 19 Apr 2024 05:20:44 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=gmail.com; s=20230601; t=1713529238; x=1714134038; darn=debbugs.gnu.org;
 h=content-transfer-encoding:cc:to:subject:message-id:date:from
 :in-reply-to:references:mime-version:from:to:cc:subject:date
 :message-id:reply-to;
 bh=VQXn+7Xc+YxaSQv0TKEihFPQgxqNZcckSYgGHmyMTRI=;
 b=W8s7C4sYjDoGdCkM2eLboGY073GMCirt8TkZ6LiXiCToiXiZ9KsQZoZMPv+qXzVPjT
 LIbzaVIhqC2TwHHcuN2NoV8uwSiviXGadAwA88ako4JJSG/axZsEgEkBCeXVWIpDjszA
 aSR7fk3LZeMlc7usmKe9raT9haBTEpXRmvEvhvm7G/wuuTB4W4AjjsLVmMGqHOJyzmcN
 5jFOwbL3SP0REdi26S0lZ0WxTU6csN8JwG5YdySSBkIA6xqE9ZHv0bsRhyRWGhtML8za
 nRvWqZVUslevrW5GP/XaFFdu5CiYhXpN1KGue4Mc4h3pL+S37oKfys/mFPe8CvQdqZCe
 9R6A==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=1e100.net; s=20230601; t=1713529238; x=1714134038;
 h=content-transfer-encoding:cc:to:subject:message-id:date:from
 :in-reply-to:references:mime-version:x-gm-message-state:from:to:cc
 :subject:date:message-id:reply-to;
 bh=VQXn+7Xc+YxaSQv0TKEihFPQgxqNZcckSYgGHmyMTRI=;
 b=J1xQqb8dabmDAy/LZxcwRpB2fHR0uWiMJelwIiMaQBmlwYdIU3w4VfAqh0pOfVDC9s
 6zZh+8Lammj9vFU4lq+DrNB91c1QJyfStEwShhDEFBDDrY2Y+de3gbQ4dB/bAf7uXeOB
 PbqgaX9+QOhIq39rXOZfK9VmsUkasuN/Mrdba3Ua1oQCgJHy9Scu85Ozj4DNQEicwTQg
 rd5HsDKXJLvXPyoiLCkinJqYBC1C7FRFCPa/Rg0HMfEoctPnJ1d/NfKXV+lknVHqi0AR
 KKXkwOnhfy6bjl1o/J2ax0pil1ACK/bzC+MsGYPnBG3sjW24BFW150XvN2k5n9hXKh4N
 eanQ==
X-Forwarded-Encrypted: i=1;
 AJvYcCUl8MWlYXfHLe7AiKKvIJ+BozMAhyc8sJENaAYwtPX86QEZj2CWKA+BRiD6oZZ43C13hbCXdRS46RkbgML3vK0R9vm5yDo=
X-Gm-Message-State: AOJu0YxYss6nk9EKRMGFM3h0JdmYBue6a8ZGkrK8iVxbvyJZM+TukuDw
 iSPvjRwOlteaaqTud/d8ef3LI5G26SR+OWL5B7xXjm27MJMmlMe+tTBE69g3LAbMdf71Y8kS+1g
 b2dbQdEeuGoKb7ZobGroE983LQuBKr6ul
X-Google-Smtp-Source: AGHT+IFp41S7xPyVQmmIBdLGZnBpD9JodrmS5d32nPHd7DcaxN576en/KVtQO90Vh5Lj+ov5OJv1zGb4J30ZiIDsw0s=
X-Received: by 2002:a05:6512:b90:b0:51a:b933:b297 with SMTP id
 b16-20020a0565120b9000b0051ab933b297mr1902124lfv.2.1713529237982; Fri, 19 Apr
 2024 05:20:37 -0700 (PDT)
MIME-Version: 1.0
References: <CALDnm517N=DM+0tqBpHCGiHenPMirq2eFJF+Gk0ePO+W6WO-Ug@HIDDEN>
 <4e670617-6483-4159-a5cf-27a921764c38@HIDDEN>
 <CALDnm536w_khSks_rG-X-TH+hDiVddcmv=jaMHVQT_KgFh1xkA@HIDDEN>
 <864jbxden1.fsf@HIDDEN>
 <CALDnm50V6pqeXivS8ZoOh4LBMHX7_9=68Zi1im5U36Djmf9gQQ@HIDDEN>
 <86r0f1bopx.fsf@HIDDEN>
 <CALDnm53Su0aBxQ2_7oJawdmBC=YTB7DejY9jGK_70MaxEorW5Q@HIDDEN>
 <86edb1blf6.fsf@HIDDEN>
In-Reply-To: <86edb1blf6.fsf@HIDDEN>
From: =?UTF-8?B?Sm/Do28gVMOhdm9yYQ==?= <joaotavora@HIDDEN>
Date: Fri, 19 Apr 2024 13:20:26 +0100
Message-ID: <CALDnm500W=jMaa0Z-jV48XN7-6+PRtp6Q5vBtm99RnbfwxMqug@HIDDEN>
Subject: Re: bug#70036 a fix that
To: Eli Zaretskii <eliz@HIDDEN>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable
X-Spam-Score: 0.0 (/)
X-Debbugs-Envelope-To: 70036
Cc: felician.nemeth@HIDDEN, 70036 <at> debbugs.gnu.org, theo@HIDDEN
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -1.0 (-)

On Fri, Apr 19, 2024 at 1:13=E2=80=AFPM Eli Zaretskii <eliz@HIDDEN> wrote:

> > Theo's latest measurements show that -- in context -- there is a 4%
> > time spent in find-buffer-visiting and all of that is due to its
> > delegation of work to file-truename.  Does that change your mind?
>
> No.  The original slow-down due to find-buffer-visiting (admittedly,
> not in Eglot) was much worse.

I understand, wouldn't change my mind, either.  But Theo says it's much
worse in some other cases, so I don't mind installing a that f-b-v
bypass  (with a sufficiently explicit comment about a desire to
return to it if file-truename is ever sped up).




Information forwarded to bug-gnu-emacs@HIDDEN:
bug#70036; Package emacs. Full text available.

Message received at 70036 <at> debbugs.gnu.org:


Received: (at 70036) by debbugs.gnu.org; 19 Apr 2024 12:13:32 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Fri Apr 19 08:13:32 2024
Received: from localhost ([127.0.0.1]:58239 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1rxn7T-0000fA-Im
	for submit <at> debbugs.gnu.org; Fri, 19 Apr 2024 08:13:31 -0400
Received: from eggs.gnu.org ([2001:470:142:3::10]:40172)
 by debbugs.gnu.org with esmtp (Exim 4.84_2)
 (envelope-from <eliz@HIDDEN>) id 1rxn7O-0000df-Hz
 for 70036 <at> debbugs.gnu.org; Fri, 19 Apr 2024 08:13:29 -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 <eliz@HIDDEN>)
 id 1rxn73-000630-3d; Fri, 19 Apr 2024 08:13:05 -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=pkQeJIFcQjLyv7utZJXBhtdFuaVx4w4uw4cd+LVupdg=; b=kVP/XDSxbycikMZzGoWj
 SUI2jcMuTaWcTga+5y8PpEOAL6K+DFjWbjFh1CXjXhJfGIjfSbjfSRn3wIEI7CsRz8TlYkv0I1L3/
 V7jOPEx/kx91eScSbSuTaO7CVfCn1KzrUS1zZxbdgpkut8u6HcFvkYSk6jYqMNkt1xs2g2kK2rxPD
 j2ZUfy/92fLpNXGtDiFLnNUxcboNlcVEhDyCGgRqtnX/I03EJiJXZ43d8dEWB24UihSuWi5c0EK3T
 CcsqloEaDJ0rx3+a0qImxvsU7QBL/csg7BriyuPwgo+IwBYy2E6ezdXx/8kKXqA4PJnKOtC/cV9+l
 7rXE5kcYtOcHUw==;
Date: Fri, 19 Apr 2024 15:13:01 +0300
Message-Id: <86edb1blf6.fsf@HIDDEN>
From: Eli Zaretskii <eliz@HIDDEN>
To: =?utf-8?B?Sm/Do28gVMOhdm9yYQ==?= <joaotavora@HIDDEN>
In-Reply-To: <CALDnm53Su0aBxQ2_7oJawdmBC=YTB7DejY9jGK_70MaxEorW5Q@HIDDEN>
 (message from =?utf-8?B?Sm/Do28gVMOhdm9yYQ==?= on Fri, 19 Apr 2024 13:00:54
 +0100)
Subject: Re: bug#70036 a fix that
References: <CALDnm517N=DM+0tqBpHCGiHenPMirq2eFJF+Gk0ePO+W6WO-Ug@HIDDEN>
 <4e670617-6483-4159-a5cf-27a921764c38@HIDDEN>
 <CALDnm536w_khSks_rG-X-TH+hDiVddcmv=jaMHVQT_KgFh1xkA@HIDDEN>
 <864jbxden1.fsf@HIDDEN>
 <CALDnm50V6pqeXivS8ZoOh4LBMHX7_9=68Zi1im5U36Djmf9gQQ@HIDDEN>
 <86r0f1bopx.fsf@HIDDEN>
 <CALDnm53Su0aBxQ2_7oJawdmBC=YTB7DejY9jGK_70MaxEorW5Q@HIDDEN>
MIME-version: 1.0
Content-type: text/plain; charset=utf-8
Content-Transfer-Encoding: 8bit
X-Spam-Score: -2.3 (--)
X-Debbugs-Envelope-To: 70036
Cc: felician.nemeth@HIDDEN, 70036 <at> debbugs.gnu.org, theo@HIDDEN
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -3.3 (---)

> From: João Távora <joaotavora@HIDDEN>
> Date: Fri, 19 Apr 2024 13:00:54 +0100
> Cc: theo@HIDDEN, felician.nemeth@HIDDEN, 70036 <at> debbugs.gnu.org
> 
> On Fri, Apr 19, 2024 at 12:01 PM Eli Zaretskii <eliz@HIDDEN> wrote:
> 
> > > Yes, that's what my latest patch does.  But ideally it would be cleaner
> > > (IMHO) to have a fast usable find-buffer-visiting by speeding
> > > up its underlying file-truename.
> >
> > We did that at least to some extent in the improvements submitted by
> > Ihor and now available on master.  From where I stand, we now have a
> > reasonably performant implementation of find-buffer-visiting; I would
> > need benchmarks showing otherwise to change my mind.
> 
> Theo's latest measurements show that -- in context -- there is a 4%
> time spent in find-buffer-visiting and all of that is due to its
> delegation of work to file-truename.  Does that change your mind?

No.  The original slow-down due to find-buffer-visiting (admittedly,
not in Eglot) was much worse.




Information forwarded to bug-gnu-emacs@HIDDEN:
bug#70036; Package emacs. Full text available.

Message received at 70036 <at> debbugs.gnu.org:


Received: (at 70036) by debbugs.gnu.org; 19 Apr 2024 12:04:32 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Fri Apr 19 08:04:32 2024
Received: from localhost ([127.0.0.1]:58210 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1rxmyl-00080n-NS
	for submit <at> debbugs.gnu.org; Fri, 19 Apr 2024 08:04:32 -0400
Received: from mail-lj1-x230.google.com ([2a00:1450:4864:20::230]:55513)
 by debbugs.gnu.org with esmtp (Exim 4.84_2)
 (envelope-from <joaotavora@HIDDEN>) id 1rxmyi-0007zf-Ow
 for 70036 <at> debbugs.gnu.org; Fri, 19 Apr 2024 08:04:29 -0400
Received: by mail-lj1-x230.google.com with SMTP id
 38308e7fff4ca-2d9fe2b37acso25519921fa.2
 for <70036 <at> debbugs.gnu.org>; Fri, 19 Apr 2024 05:04:14 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=gmail.com; s=20230601; t=1713528248; x=1714133048; darn=debbugs.gnu.org;
 h=content-transfer-encoding:cc:to:subject:message-id:date:from
 :in-reply-to:references:mime-version:from:to:cc:subject:date
 :message-id:reply-to;
 bh=OyDVPjiorQzzH6P5hD979iu5Vp3yY7lfB57IuYKO4D4=;
 b=Gf6Kk7N4i+TLuusQnDsTx7xNAnyeaEx/ONQNc+WWw9D4w2IaI7TY2uCb/R9t0boDf3
 Il1yt3u1V4GRaqZ2HP0pUogPSHWb6nKcpA3Oy1VvD1cQHhQ8eunoQzgVz0WSZay8DGfj
 jHEeMU528d6F47uch5xLt2X4NzU44aYnJK/DzOjm0ujXucQpSRBbdjMb5Zdl3fWf2umX
 zHUIGvJ/CwxrSLByn5/8mmoKNVIZaqmt6/oJPe6IFFo7GL9aMKPYgjMwPxIWFWAhtLMo
 Oq5vSfb6jkjXNZ39TIWSuER5eSeUibYiC+YVqt2ZpxL0AEUWr25wdpOF8hYOcMDjnyeH
 UCaw==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=1e100.net; s=20230601; t=1713528248; x=1714133048;
 h=content-transfer-encoding:cc:to:subject:message-id:date:from
 :in-reply-to:references:mime-version:x-gm-message-state:from:to:cc
 :subject:date:message-id:reply-to;
 bh=OyDVPjiorQzzH6P5hD979iu5Vp3yY7lfB57IuYKO4D4=;
 b=mYbttOrP/KkCbbWV+uWTj+sGpzXSwFvGy/BJea63wWFU3OfK322/xGp1XqV1SwJjWD
 mVS3/uKHMZ8xUOKrMEEcQke+P/Q+G4wqNlYPictixrHpksyAABOniNu+L+De6P9FlqFe
 CESXMYMZOU86SYYc51z40VW0ZYgn4MBGaLa484a8yZM9DlgIYcNmSSV21L38MmeG0yb6
 n+WCH51n70PNvscq2Cg58d+3Y/HkGXMsc6eR66UiNy1plxB0Dy/htksCbxj3tVWpQy5g
 K8SVCQNGeZzWu8pSufBAkhtKTfF4C8QD1u+TNFZ0wrR4HU/9FpGPUEHgkMdKn4JsuFM5
 ZaKQ==
X-Forwarded-Encrypted: i=1;
 AJvYcCW284cmdC8BJV3Mcj6XbAALH9DMWbpeqOkjeP1MIlw7cgUbg6H0ZL8yCIEuQcf8eZqsozZ7gdZPnXSg7ls8zk6NJzBr34g=
X-Gm-Message-State: AOJu0YytRKuRgZ9sdRti0kTEEPYiEMJz3e3LTQTmPs1YItNN4l12GQdT
 SIsgLgvwHHKeVttpO+gwWyYmB00VSgzBze/E5xcLQrFTgF/OpDkHxQAUoh80/3coiHaeWI1Fr4x
 wrq9pbTin2oK9JkDckrNzx4e7LHiiOg==
X-Google-Smtp-Source: AGHT+IGHadAIvyxgp+lIQPONrsqwT1eJK79I6QEZ0ynQXr51X6VHCQ15E5ZsdS1u23sr7NxymBoI6O1q+9gwvX/Zx7k=
X-Received: by 2002:a2e:97cf:0:b0:2d8:71d4:4bb3 with SMTP id
 m15-20020a2e97cf000000b002d871d44bb3mr1199143ljj.26.1713528248474; Fri, 19
 Apr 2024 05:04:08 -0700 (PDT)
MIME-Version: 1.0
References: <CALDnm517N=DM+0tqBpHCGiHenPMirq2eFJF+Gk0ePO+W6WO-Ug@HIDDEN>
 <4e670617-6483-4159-a5cf-27a921764c38@HIDDEN>
 <CALDnm536w_khSks_rG-X-TH+hDiVddcmv=jaMHVQT_KgFh1xkA@HIDDEN>
 <864jbxden1.fsf@HIDDEN>
 <CALDnm50V6pqeXivS8ZoOh4LBMHX7_9=68Zi1im5U36Djmf9gQQ@HIDDEN>
 <86r0f1bopx.fsf@HIDDEN> <87r0f1mvtx.fsf@HIDDEN>
 <86frvhbmax.fsf@HIDDEN>
In-Reply-To: <86frvhbmax.fsf@HIDDEN>
From: =?UTF-8?B?Sm/Do28gVMOhdm9yYQ==?= <joaotavora@HIDDEN>
Date: Fri, 19 Apr 2024 13:03:56 +0100
Message-ID: <CALDnm51cFYbs9772UrM230O9pxHN8NNZv18P=fVMBckXcv_iPQ@HIDDEN>
Subject: Re: bug#70036 a fix that
To: Eli Zaretskii <eliz@HIDDEN>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable
X-Spam-Score: 1.0 (+)
X-Debbugs-Envelope-To: 70036
Cc: felician.nemeth@HIDDEN, 70036 <at> debbugs.gnu.org,
 Theodor Thornhill <theo@HIDDEN>
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -1.0 (-)

On Fri, Apr 19, 2024 at 12:54=E2=80=AFPM Eli Zaretskii <eliz@HIDDEN> wrote=
:
>
> > From: Theodor Thornhill <theo@HIDDEN>
> > Cc: felician.nemeth@HIDDEN, 70036 <at> debbugs.gnu.org
> > Date: Fri, 19 Apr 2024 13:32:42 +0200
> >
> > I wonder - why can't we use just buffer-file-truename?
>
> buffer-file-truename records the _abbreviated_ file name, so it can
> depend on directory-abbrev-alist.  Whether this is important here, I
> don't know, but we must at least consider this caveat before we
> decide.

We definitely need a full, true, unabbreviated file name there.
That's what LSP servers like.




Information forwarded to bug-gnu-emacs@HIDDEN:
bug#70036; Package emacs. Full text available.

Message received at 70036 <at> debbugs.gnu.org:


Received: (at 70036) by debbugs.gnu.org; 19 Apr 2024 12:02:28 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Fri Apr 19 08:02:28 2024
Received: from localhost ([127.0.0.1]:58204 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1rxmwl-0007iX-Sf
	for submit <at> debbugs.gnu.org; Fri, 19 Apr 2024 08:02:28 -0400
Received: from mail-lj1-x229.google.com ([2a00:1450:4864:20::229]:60814)
 by debbugs.gnu.org with esmtp (Exim 4.84_2)
 (envelope-from <joaotavora@HIDDEN>) id 1rxmwj-0007h0-0i
 for 70036 <at> debbugs.gnu.org; Fri, 19 Apr 2024 08:02:26 -0400
Received: by mail-lj1-x229.google.com with SMTP id
 38308e7fff4ca-2d094bc2244so24835871fa.1
 for <70036 <at> debbugs.gnu.org>; Fri, 19 Apr 2024 05:02:10 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=gmail.com; s=20230601; t=1713528125; x=1714132925; darn=debbugs.gnu.org;
 h=content-transfer-encoding:cc:to:subject:message-id:date:from
 :in-reply-to:references:mime-version:from:to:cc:subject:date
 :message-id:reply-to;
 bh=hZhNLzO3eQKWLzdnygDyyBlaroFNytqTmeqIeos2cCM=;
 b=e8OCvcCqDttW47f8KVXXHlz6ecJvHv1wh+kNaRDQRw/lHjeUqh2LtYvr0C/HSu3rux
 LZdMZ3s7q8a1VgjLi/QYCDcp+ecEuQnWcqvjDLuOFbXDofNgyupN5QuH1LLQ7s5firfq
 Y8GcdmCpRBgRqSgaYgZtN77NrbxMjSsxOv9Q7ydojXfC+0l6zW8/riAHYp3jTMS31/i0
 d7RNASVGcsudDW/Dey5dye/DTSGcXFyfPnggyOZDqWOG8JuBjKsccfhDG1gRQHw4MpuA
 90DUQc/jGUyx/nugDtdcaKQuBghIitqQ0TF+U5m7sFYlo8xcoI+RBH99Lq5PMjDBvHcn
 PjeQ==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=1e100.net; s=20230601; t=1713528125; x=1714132925;
 h=content-transfer-encoding:cc:to:subject:message-id:date:from
 :in-reply-to:references:mime-version:x-gm-message-state:from:to:cc
 :subject:date:message-id:reply-to;
 bh=hZhNLzO3eQKWLzdnygDyyBlaroFNytqTmeqIeos2cCM=;
 b=VUYoJDK8hZ3pWy50hOxHmISM1A/l0OUYq+/lqAizHjaQ19IcWY6c/YmhUlPjp5fC2U
 UNW7jr39f+A3sW5IOcjh4HWOwaYOtKu/STQciRfN5o0aeph3MFg9RacIc1JzjBUHpYBb
 RA6Hapr+1hMBLsvSzTsn0WEDnFW8TzGgx95uExQuoc94a+z7fdBkdE8rDVGs1H1mlDX6
 WZiYwGrt8r/weHyMaL/J74Nu4AMABIbXJHBcava0KdHU8BU9hS63kFRs2058rtCXgRVl
 hCfEPKmLO8JthBiWJ3C5Jy3MP+eF1V2kxzrJ9sSr3OjL89kJL65WULnFXKceAfjOqq0P
 Sv0A==
X-Forwarded-Encrypted: i=1;
 AJvYcCXdrODxVk5bUocFKrQfz0UWS167sFGJes2bB6sCMuXHWz2V9SSfFWlAp2Zt0m4B4LnAhrUSeh1OelyJYb6AiqEnfxNkorA=
X-Gm-Message-State: AOJu0Yy26M7bZlEgDzVYUAihT4Kyu8qU/SC8m9Z6WHtUCB5caJOVrjgc
 lvp92PIib1hTZY9HxkFceFfTicFCeaWehqzMBQU6PwmlcGZkfMYAakCIkhSlzphzpkcbxMb82/M
 pK4EASOTAvw990/cZap6wm8mHgw4=
X-Google-Smtp-Source: AGHT+IE/y2bo3LroFCkLthXZ6z594uzvWnCwoY26g8uktNQiucAbKzkv4V0MD/JMCWK2gKYGltllOSqipB5vPFhGvLQ=
X-Received: by 2002:a05:651c:1039:b0:2dc:b04b:b3c0 with SMTP id
 w25-20020a05651c103900b002dcb04bb3c0mr1078838ljm.6.1713528124864; Fri, 19 Apr
 2024 05:02:04 -0700 (PDT)
MIME-Version: 1.0
References: <CALDnm517N=DM+0tqBpHCGiHenPMirq2eFJF+Gk0ePO+W6WO-Ug@HIDDEN>
 <4e670617-6483-4159-a5cf-27a921764c38@HIDDEN>
 <CALDnm536w_khSks_rG-X-TH+hDiVddcmv=jaMHVQT_KgFh1xkA@HIDDEN>
 <864jbxden1.fsf@HIDDEN>
 <CALDnm50V6pqeXivS8ZoOh4LBMHX7_9=68Zi1im5U36Djmf9gQQ@HIDDEN>
 <86r0f1bopx.fsf@HIDDEN> <87r0f1mvtx.fsf@HIDDEN>
 <CALDnm51VaFz73kgOh_YyEryvGTrRuw7hmQXvLTY4DmZgPcKyPw@HIDDEN>
 <87frvhlgl0.fsf@HIDDEN> <87cyqllgen.fsf@HIDDEN>
In-Reply-To: <87cyqllgen.fsf@HIDDEN>
From: =?UTF-8?B?Sm/Do28gVMOhdm9yYQ==?= <joaotavora@HIDDEN>
Date: Fri, 19 Apr 2024 13:01:53 +0100
Message-ID: <CALDnm52ixgWjJvfgXWzykPsOfgmY3mT_-UEnpizG=7oT1AO+Sw@HIDDEN>
Subject: Re: bug#70036 a fix that
To: Theodor Thornhill <theo@HIDDEN>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable
X-Spam-Score: 0.0 (/)
X-Debbugs-Envelope-To: 70036
Cc: Eli Zaretskii <eliz@HIDDEN>, 70036 <at> debbugs.gnu.org,
 felician.nemeth@HIDDEN
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -1.0 (-)

On Fri, Apr 19, 2024 at 12:51=E2=80=AFPM Theodor Thornhill <theo@thornhill.=
no> wrote:

> I guess this should be enough:
>
> commit f6ed2e848d23035748b621a86be74956c093823f
> Author: Richard M. Stallman <rms@HIDDEN>
> Date:   Tue Feb 14 16:33:19 1995 +0000

:-)




Information forwarded to bug-gnu-emacs@HIDDEN:
bug#70036; Package emacs. Full text available.

Message received at 70036 <at> debbugs.gnu.org:


Received: (at 70036) by debbugs.gnu.org; 19 Apr 2024 12:01:28 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Fri Apr 19 08:01:28 2024
Received: from localhost ([127.0.0.1]:58200 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1rxmvo-0007YW-Ae
	for submit <at> debbugs.gnu.org; Fri, 19 Apr 2024 08:01:28 -0400
Received: from mail-lj1-x236.google.com ([2a00:1450:4864:20::236]:42178)
 by debbugs.gnu.org with esmtp (Exim 4.84_2)
 (envelope-from <joaotavora@HIDDEN>) id 1rxmvm-0007XD-4g
 for 70036 <at> debbugs.gnu.org; Fri, 19 Apr 2024 08:01:27 -0400
Received: by mail-lj1-x236.google.com with SMTP id
 38308e7fff4ca-2db101c11feso13380761fa.0
 for <70036 <at> debbugs.gnu.org>; Fri, 19 Apr 2024 05:01:11 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=gmail.com; s=20230601; t=1713528066; x=1714132866; darn=debbugs.gnu.org;
 h=content-transfer-encoding:cc:to:subject:message-id:date:from
 :in-reply-to:references:mime-version:from:to:cc:subject:date
 :message-id:reply-to;
 bh=hwwnHLA3ZUR43zySo9CpuCTUOuoM5OsizwapW11ebYc=;
 b=gi4ovb0UAGMz4ZNzwUZHxQfdOA85MxdrjS6Ew6rbMjPp/MM8R9TCgvzDK6QlSRqB+K
 zaw3VfeSuIN8rrBx3D3PCLQvNf5RpiRVqyCkJ8uG/79p1ELcpeagilv/eNblT05sWlY6
 d+O8APuBlV6sDEReyXFwFrvl6/ralr60J8jleq2/Zb4hUWPIQ2+oWPpYgyfo1Qk5RvEF
 GRrFYCj2ZePelWn6BZxXRZHfHQooBJHgrYVUDsNrSD6Pv2Af/VxVnnnlh8JD333VZhJt
 F/fBTQ6t9Aa35Pp2kcvNI2TySrM0Cpx/oYn1biVbzl6+VoLBxUcgYz84Cz0IEG4zfcCT
 s68A==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=1e100.net; s=20230601; t=1713528066; x=1714132866;
 h=content-transfer-encoding:cc:to:subject:message-id:date:from
 :in-reply-to:references:mime-version:x-gm-message-state:from:to:cc
 :subject:date:message-id:reply-to;
 bh=hwwnHLA3ZUR43zySo9CpuCTUOuoM5OsizwapW11ebYc=;
 b=LK/vcGfoOnP5nfy8OgUrw9uhfypRtwFXPbCbf5gW3nZ494d8/7P3ZrHk4D4XUY6KZV
 KQo+auRkYEFC/nyH+Hy76MerAx1OFo1d72bNfxPESbSV6tHpVnEp7orO1o3NoiE3VGK/
 Wqi5eFzdIccx3FpqJKLs2AuMWlsB1C/hCd9CJnXIkyfFvxft/13pYXMttyh87r/rF7A+
 I4r0BQ7lNIeiR2c1MJlvvrg3fy/BUP7ozR7pSHJhIuBRqnNpCqxNCnWMsif9STPzchkT
 bX5y5OfDs+DWzzegzkQo/YcgBda3ncGhNQAxxCDYyoklA6MB7d8/rRpOWXxSdpad7jj2
 n7dg==
X-Forwarded-Encrypted: i=1;
 AJvYcCV2n8L+7iIxYVvXPWFrKEbLVAyYNBvmB6mW8SbUV4Rdc38QQ+z0GDmk6UKW7UZPQ28sSbJw4AynY1wujybICAvxlmFdCnY=
X-Gm-Message-State: AOJu0YymVBTiPE405hO1AV92pC8pDdfpCwped4SOYd+w1PwESvcYF3q+
 TY0DiXTMp2MJNtel/4EQIDte7ixWAp6W7pZwhP+Gez5QDSvqr6lCfuVA9dyolsAyadmOvSV2y0K
 bqYb/Gd56sMnA2aAr+dNqCNXJvF0=
X-Google-Smtp-Source: AGHT+IFv14pUrePhrVaj4ob7kv87oP+X5Yo9Skpaq+200yj+OjjfqXI/uXsB6h9m0FPof7iBsNekliXr8tpnH61rg+4=
X-Received: by 2002:a2e:8752:0:b0:2d8:49e8:3132 with SMTP id
 q18-20020a2e8752000000b002d849e83132mr698013ljj.0.1713528065608; Fri, 19 Apr
 2024 05:01:05 -0700 (PDT)
MIME-Version: 1.0
References: <CALDnm517N=DM+0tqBpHCGiHenPMirq2eFJF+Gk0ePO+W6WO-Ug@HIDDEN>
 <4e670617-6483-4159-a5cf-27a921764c38@HIDDEN>
 <CALDnm536w_khSks_rG-X-TH+hDiVddcmv=jaMHVQT_KgFh1xkA@HIDDEN>
 <864jbxden1.fsf@HIDDEN>
 <CALDnm50V6pqeXivS8ZoOh4LBMHX7_9=68Zi1im5U36Djmf9gQQ@HIDDEN>
 <86r0f1bopx.fsf@HIDDEN>
In-Reply-To: <86r0f1bopx.fsf@HIDDEN>
From: =?UTF-8?B?Sm/Do28gVMOhdm9yYQ==?= <joaotavora@HIDDEN>
Date: Fri, 19 Apr 2024 13:00:54 +0100
Message-ID: <CALDnm53Su0aBxQ2_7oJawdmBC=YTB7DejY9jGK_70MaxEorW5Q@HIDDEN>
Subject: Re: bug#70036 a fix that
To: Eli Zaretskii <eliz@HIDDEN>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable
X-Spam-Score: 0.0 (/)
X-Debbugs-Envelope-To: 70036
Cc: felician.nemeth@HIDDEN, 70036 <at> debbugs.gnu.org, theo@HIDDEN
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -1.0 (-)

On Fri, Apr 19, 2024 at 12:01=E2=80=AFPM Eli Zaretskii <eliz@HIDDEN> wrote=
:

> No, IMO we should try it in both "emacs -Q" and in a session with a
> lot of buffers, to have the performance in its true relevant context.
> Most real-life Emacs sessions have many more buffers than we have in
> "emacs -Q".  Worst-case testing is not always TRT, because it can skew
> the perspective and lead to wrong decisions.

The worst case here is relative.  It's also a very plausible case
in  the sense that starting Emacs, navigating to a file of a project
you're working on, and pressing M-x eglot is probably one of the most
common things you do with Eglot.  So IOW the worst case is also the
common one.

> > > But if calling
> > > find-buffer-visiting from Eglot can be avoided, that is of course eve=
n
> > > better.
> >
> > Yes, that's what my latest patch does.  But ideally it would be cleaner
> > (IMHO) to have a fast usable find-buffer-visiting by speeding
> > up its underlying file-truename.
>
> We did that at least to some extent in the improvements submitted by
> Ihor and now available on master.  From where I stand, we now have a
> reasonably performant implementation of find-buffer-visiting; I would
> need benchmarks showing otherwise to change my mind.

Theo's latest measurements show that -- in context -- there is a 4%
time spent in find-buffer-visiting and all of that is due to its
delegation of work to file-truename.  Does that change your mind?

I reproduced the measurements but personally didn't feel this in any way
problematic (in my machine) to the use of Eglot.  But Theo says there
are Java projects that run much, much worse and with much more friction,
but he can't share the data with us for other reasons.    So it didn't
really change _my_ mind.  For _me_ `f-b-v` was reasonably fast enough
when running Theo's recipe and definitely fast enough when trying
any other project.

But what changes my mind is the fact that:

* I believe Theo is telling the truth that it's a much bigger bottleneck
    in Java projects.

* the workaround isn't _that_ ugly.

In summary, I still think f-b-v use in Eglot's publishDiagnostics handler i=
s
cleanest conceptually,  but because I believe Theo that it's a serious
bottleneck,  I'm not opposed to skipping it with the alternative technique
already presented.

Jo=C3=A3o




Information forwarded to bug-gnu-emacs@HIDDEN:
bug#70036; Package emacs. Full text available.

Message received at 70036 <at> debbugs.gnu.org:


Received: (at 70036) by debbugs.gnu.org; 19 Apr 2024 11:59:33 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Fri Apr 19 07:59:33 2024
Received: from localhost ([127.0.0.1]:58180 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1rxmtx-0007G3-DA
	for submit <at> debbugs.gnu.org; Fri, 19 Apr 2024 07:59:33 -0400
Received: from out-179.mta1.migadu.com ([2001:41d0:203:375::b3]:46670)
 by debbugs.gnu.org with esmtp (Exim 4.84_2)
 (envelope-from <theo@HIDDEN>) id 1rxmtu-0007FD-TR
 for 70036 <at> debbugs.gnu.org; Fri, 19 Apr 2024 07:59:31 -0400
X-Report-Abuse: Please report any abuse attempt to abuse@HIDDEN and
 include these headers.
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=thornhill.no;
 s=key1; t=1713527949;
 h=from:from:reply-to:subject:subject:date:date:message-id:message-id:
 to:to:cc:cc:mime-version:mime-version:content-type:content-type:
 in-reply-to:in-reply-to:references:references;
 bh=X1ib8nJhOtXvqdVrvf7nTp+TyR1m3sUgbbkUlFL+DKc=;
 b=uk/1FtDTRg9mNL4ep0aVl0Y1/6s8XNQwzCs+vE2W+++ayyrWjz6abbQpJEsAhw4QRKeeaK
 6lRjCpvnphHR2oAbAU2DUvPdWB53eZZfKFw+s+sXmsa5Hmm9hmp48AO4BoLIYb4I/BySMy
 eNh52IyHmRtqHkP6R/n6TP/U4biHymJfdl6rvUPJeTeuK91yC5ed2BWXm7l0So2Du0S8V/
 inXxvq/JyP6J/z3x2/hVaP3O9X6dpx8RxwlOqYq3oXcG13xk5aFBvlchym9mlEb+5qO/uK
 n34uymOGd0LSj6kfA/dqrDRd5hv2dGoU6Zm3UTKWp3bjmfgTaw8S6le29y0bXw==
From: Theodor Thornhill <theo@HIDDEN>
To: Eli Zaretskii <eliz@HIDDEN>
Subject: Re: bug#70036 a fix that
In-Reply-To: <86frvhbmax.fsf@HIDDEN>
References: <CALDnm517N=DM+0tqBpHCGiHenPMirq2eFJF+Gk0ePO+W6WO-Ug@HIDDEN>
 <4e670617-6483-4159-a5cf-27a921764c38@HIDDEN>
 <CALDnm536w_khSks_rG-X-TH+hDiVddcmv=jaMHVQT_KgFh1xkA@HIDDEN>
 <864jbxden1.fsf@HIDDEN>
 <CALDnm50V6pqeXivS8ZoOh4LBMHX7_9=68Zi1im5U36Djmf9gQQ@HIDDEN>
 <86r0f1bopx.fsf@HIDDEN> <87r0f1mvtx.fsf@HIDDEN>
 <86frvhbmax.fsf@HIDDEN>
Date: Fri, 19 Apr 2024 13:59:06 +0200
Message-ID: <87a5lplg1h.fsf@HIDDEN>
MIME-Version: 1.0
Content-Type: text/plain
X-Migadu-Flow: FLOW_OUT
X-Spam-Score: 0.0 (/)
X-Debbugs-Envelope-To: 70036
Cc: 70036 <at> debbugs.gnu.org, felician.nemeth@HIDDEN, joaotavora@HIDDEN
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -1.0 (-)

Eli Zaretskii <eliz@HIDDEN> writes:

>> From: Theodor Thornhill <theo@HIDDEN>
>> Cc: felician.nemeth@HIDDEN, 70036 <at> debbugs.gnu.org
>> Date: Fri, 19 Apr 2024 13:32:42 +0200
>> 
>> I wonder - why can't we use just buffer-file-truename?
>
> buffer-file-truename records the _abbreviated_ file name, so it can
> depend on directory-abbrev-alist.  Whether this is important here, I
> don't know, but we must at least consider this caveat before we
> decide.

Yeah, it also seems some of functions in question don't need 'path' to
be an existing buffer. I'll look at it, but I think it may be a no-go.

Theo




Information forwarded to bug-gnu-emacs@HIDDEN:
bug#70036; Package emacs. Full text available.

Message received at 70036 <at> debbugs.gnu.org:


Received: (at 70036) by debbugs.gnu.org; 19 Apr 2024 11:54:52 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Fri Apr 19 07:54:52 2024
Received: from localhost ([127.0.0.1]:58169 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1rxmpP-0006d8-G0
	for submit <at> debbugs.gnu.org; Fri, 19 Apr 2024 07:54:52 -0400
Received: from eggs.gnu.org ([2001:470:142:3::10]:54798)
 by debbugs.gnu.org with esmtp (Exim 4.84_2)
 (envelope-from <eliz@HIDDEN>) id 1rxmpM-0006bY-Gc
 for 70036 <at> debbugs.gnu.org; Fri, 19 Apr 2024 07:54:50 -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 <eliz@HIDDEN>)
 id 1rxmp3-0001pj-3f; Fri, 19 Apr 2024 07:54:29 -0400
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=gnu.org;
 s=fencepost-gnu-org; h=References:Subject:In-Reply-To:To:From:Date:
 mime-version; bh=OS3g3TwrMljPbudfmeHS44C3mMJDfvx4VP2Je4fV3TM=; b=M6BnTSlJl3eR
 MGQ8759jMvdVCcl/fHUpsiu3DHnwlzi1/oB+/qKg7EBaiNpCOBN7unvXrFA6tft/7CsWREhJ+23mi
 ILMRoyie0ncdZgrgtO9T8f3uloiqO0zFZU1urCmOAtdF16bM2u1lW9ANQLBXq7RSoJADApQk8WlXU
 fTsUDNpHO6ECzE3ewuMM+ybEVy6jKUP8GSuU38H5puHC+rFhKMJme12Y7EbBYAvNekD0JjiyQOtGx
 OIsCIqZFXFBDr2gN/WRfL501zxHLvG8PYujKY6su8LU62I80u6jQJKsdbIEWhsyprz4mkA9K/ak8z
 0kKM6v0URUVyEj1gxV87aw==;
Date: Fri, 19 Apr 2024 14:53:58 +0300
Message-Id: <86frvhbmax.fsf@HIDDEN>
From: Eli Zaretskii <eliz@HIDDEN>
To: Theodor Thornhill <theo@HIDDEN>
In-Reply-To: <87r0f1mvtx.fsf@HIDDEN> (message from Theodor Thornhill on
 Fri, 19 Apr 2024 13:32:42 +0200)
Subject: Re: bug#70036 a fix that
References: <CALDnm517N=DM+0tqBpHCGiHenPMirq2eFJF+Gk0ePO+W6WO-Ug@HIDDEN>
 <4e670617-6483-4159-a5cf-27a921764c38@HIDDEN>
 <CALDnm536w_khSks_rG-X-TH+hDiVddcmv=jaMHVQT_KgFh1xkA@HIDDEN>
 <864jbxden1.fsf@HIDDEN>
 <CALDnm50V6pqeXivS8ZoOh4LBMHX7_9=68Zi1im5U36Djmf9gQQ@HIDDEN>
 <86r0f1bopx.fsf@HIDDEN> <87r0f1mvtx.fsf@HIDDEN>
X-Spam-Score: -2.3 (--)
X-Debbugs-Envelope-To: 70036
Cc: 70036 <at> debbugs.gnu.org, felician.nemeth@HIDDEN, joaotavora@HIDDEN
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -3.3 (---)

> From: Theodor Thornhill <theo@HIDDEN>
> Cc: felician.nemeth@HIDDEN, 70036 <at> debbugs.gnu.org
> Date: Fri, 19 Apr 2024 13:32:42 +0200
> 
> I wonder - why can't we use just buffer-file-truename?

buffer-file-truename records the _abbreviated_ file name, so it can
depend on directory-abbrev-alist.  Whether this is important here, I
don't know, but we must at least consider this caveat before we
decide.




Information forwarded to bug-gnu-emacs@HIDDEN:
bug#70036; Package emacs. Full text available.

Message received at 70036 <at> debbugs.gnu.org:


Received: (at 70036) by debbugs.gnu.org; 19 Apr 2024 11:52:16 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Fri Apr 19 07:52:15 2024
Received: from localhost ([127.0.0.1]:58146 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1rxmmt-0006GK-Jv
	for submit <at> debbugs.gnu.org; Fri, 19 Apr 2024 07:52:15 -0400
Received: from mail-lf1-x12c.google.com ([2a00:1450:4864:20::12c]:53546)
 by debbugs.gnu.org with esmtp (Exim 4.84_2)
 (envelope-from <joaotavora@HIDDEN>) id 1rxmmp-0006F8-Ut
 for 70036 <at> debbugs.gnu.org; Fri, 19 Apr 2024 07:52:13 -0400
Received: by mail-lf1-x12c.google.com with SMTP id
 2adb3069b0e04-518a3e0d2ecso3030378e87.3
 for <70036 <at> debbugs.gnu.org>; Fri, 19 Apr 2024 04:51:57 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=gmail.com; s=20230601; t=1713527511; x=1714132311; darn=debbugs.gnu.org;
 h=content-transfer-encoding:cc:to:subject:message-id:date:from
 :in-reply-to:references:mime-version:from:to:cc:subject:date
 :message-id:reply-to;
 bh=e207QKcfART6R1akRzsgtJZ34RrH/Lfx5M1UBhy3Fy4=;
 b=h/dvvwzUhvLuxiBCTHxrTfAK2nr6CJ5FHAFuY7mSik5zilyx/6WrAf0zbcSQiSvK2h
 jR0EWMDShhHZGEr7PCtdQXU8hVmML3tMtD77Ufa8jTbCYD3bECUp9CieUHWgpSjyfjE+
 E4iJyuhGpDu9StJO/NAU3LpnoSquL+uzmC+QXSEBX1TpE9NFRarazSmVjwTO5HAIT4ox
 Sg7l1r+mJdinrE7CXbWAHBbnmIcQY6s25jQig7KQ4fNvMq+tcouS+WYV2OvaA7DPvRFN
 m1F40FXKV9uAQVoW8cEV3qmBwmKUDPDfmdX7nHUqTjaCwW4VprAxdc6RJy/iW5o7QZrl
 4qLw==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=1e100.net; s=20230601; t=1713527511; x=1714132311;
 h=content-transfer-encoding:cc:to:subject:message-id:date:from
 :in-reply-to:references:mime-version:x-gm-message-state:from:to:cc
 :subject:date:message-id:reply-to;
 bh=e207QKcfART6R1akRzsgtJZ34RrH/Lfx5M1UBhy3Fy4=;
 b=p3xsy9E1RwP+eSEN85CMmy0uddC4BrwK6oq4lQYbeBCwCtE45xTw6+H1xrcWXjsUBB
 N5ds2es3Qy/qEFFVCB/kF+OP5lCHy2vjdR0QVc+sVYgidSFtHJldw1L+OVQdw9wN5G+T
 xnF6CNHo83dCLT8Q+qjRdfGjKdFzBgDjszCfuS20tcdnNOmVIzg54y6x+By26Dew6fxZ
 /p6AvfBpehkbgktAvctXuEufrC2D7+UErAnOfxu0/e2MMUYukOwoDmmYDTXYGxgI4Qfs
 Ocvk1UJDDmzF163BIiEs2e/FB9q9Vh0z/B6YQWX2N0qK7d9865Yq0oHeIiIbbEfu4qA4
 ZxLQ==
X-Forwarded-Encrypted: i=1;
 AJvYcCUNPbP+GcCOOD3/twST/hZ7swlek8KCRYEeSvgXWUxHR5h3QOzpEBs0wjkldrO+N2KzyNlK1MprXVini6/1a+47TOESFFU=
X-Gm-Message-State: AOJu0YxrombXDNXuABKbcPdoFRr62930HgpSb8qEF3tnL9Sn4t5p66Qj
 ljS9rE9xQ2GXh9nuivjIjv+KY6H0zb40ghwk0l42bEG7JDiepyN6DYF86jYIwNxLOkvvcK9IqEG
 dFTRhm1c7KGuR7beK4iftgmgh+TkGcA==
X-Google-Smtp-Source: AGHT+IFEvsWntFVz8erBT9EWOHSNMITdvpJd4dpK8ziCLUol+/TQX+F2YK639O2xVGrBTmdte5uLOlMAzd/HMnNzw+E=
X-Received: by 2002:a2e:a178:0:b0:2d7:121f:6b7 with SMTP id
 u24-20020a2ea178000000b002d7121f06b7mr1455037ljl.38.1713527511303; Fri, 19
 Apr 2024 04:51:51 -0700 (PDT)
MIME-Version: 1.0
References: <CALDnm517N=DM+0tqBpHCGiHenPMirq2eFJF+Gk0ePO+W6WO-Ug@HIDDEN>
 <4e670617-6483-4159-a5cf-27a921764c38@HIDDEN>
 <CALDnm536w_khSks_rG-X-TH+hDiVddcmv=jaMHVQT_KgFh1xkA@HIDDEN>
 <864jbxden1.fsf@HIDDEN>
 <CALDnm50V6pqeXivS8ZoOh4LBMHX7_9=68Zi1im5U36Djmf9gQQ@HIDDEN>
 <86r0f1bopx.fsf@HIDDEN> <87r0f1mvtx.fsf@HIDDEN>
 <CALDnm51VaFz73kgOh_YyEryvGTrRuw7hmQXvLTY4DmZgPcKyPw@HIDDEN>
 <87frvhlgl0.fsf@HIDDEN>
In-Reply-To: <87frvhlgl0.fsf@HIDDEN>
From: =?UTF-8?B?Sm/Do28gVMOhdm9yYQ==?= <joaotavora@HIDDEN>
Date: Fri, 19 Apr 2024 12:51:39 +0100
Message-ID: <CALDnm53Pf8zwMM+OTOC59U5th0M_oKnBrX=-u+2nNXYBfpKvNg@HIDDEN>
Subject: Re: bug#70036 a fix that
To: Theodor Thornhill <theo@HIDDEN>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable
X-Spam-Score: 0.0 (/)
X-Debbugs-Envelope-To: 70036
Cc: Eli Zaretskii <eliz@HIDDEN>, 70036 <at> debbugs.gnu.org,
 felician.nemeth@HIDDEN
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -1.0 (-)

On Fri, Apr 19, 2024 at 12:47=E2=80=AFPM Theodor Thornhill <theo@thornhill.=
no> wrote:

> What would you consider as a sufficiently old Emacs?

The first version supported by Eglot, the GNU ELPA Package.  I think it's 2=
6.3
if I'm not mistaken.




Information forwarded to bug-gnu-emacs@HIDDEN:
bug#70036; Package emacs. Full text available.

Message received at 70036 <at> debbugs.gnu.org:


Received: (at 70036) by debbugs.gnu.org; 19 Apr 2024 11:51:37 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Fri Apr 19 07:51:37 2024
Received: from localhost ([127.0.0.1]:58142 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1rxmmH-0006AY-7l
	for submit <at> debbugs.gnu.org; Fri, 19 Apr 2024 07:51:37 -0400
Received: from out-179.mta0.migadu.com ([2001:41d0:1004:224b::b3]:65500)
 by debbugs.gnu.org with esmtp (Exim 4.84_2)
 (envelope-from <theo@HIDDEN>) id 1rxmmF-0006AO-Oj
 for 70036 <at> debbugs.gnu.org; Fri, 19 Apr 2024 07:51:36 -0400
X-Report-Abuse: Please report any abuse attempt to abuse@HIDDEN and
 include these headers.
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=thornhill.no;
 s=key1; t=1713527475;
 h=from:from:reply-to:subject:subject:date:date:message-id:message-id:
 to:to:cc:cc:mime-version:mime-version:content-type:content-type:
 content-transfer-encoding:content-transfer-encoding:
 in-reply-to:in-reply-to:references:references;
 bh=l3XnPx6JijQLsIWycFmwCwTkpg1TJCnPqSXNNMR9cUI=;
 b=sitGlPQhYUVqQpdBixlGTtY4W2Ug4/7jRGYQoMh2L1C+oNl4e2b/f7raYnSkoJzCWo8Ut3
 wQQTEndjoiTmLItSX2nE5ZPrbnzDw+xBQQVtYOXJ3VxsOq2tCeNyAM8QW0RxqR9q8c/8V4
 6l1mcCu3mnUGCGENMgoRotHO8KVzUmcTvjbSL9l5BkrU4WfZfBbXDhslJlszqbKY17OwLh
 PQ3/TaqROkm3vncMfyl5xuwzhI45KX0ppFAoYMbz1jYADvzhod3EqgxuSQ41n9O6A/ffmJ
 WSLDHONaP6tFcwWS9hJjANmFFPP7spLllmKE+hk9wEGimUxEY/cnjdc4gjc4UQ==
From: Theodor Thornhill <theo@HIDDEN>
To: =?utf-8?B?Sm/Do28gVMOhdm9yYQ==?= <joaotavora@HIDDEN>
Subject: Re: bug#70036 a fix that
In-Reply-To: <87frvhlgl0.fsf@HIDDEN>
References: <CALDnm517N=DM+0tqBpHCGiHenPMirq2eFJF+Gk0ePO+W6WO-Ug@HIDDEN>
 <4e670617-6483-4159-a5cf-27a921764c38@HIDDEN>
 <CALDnm536w_khSks_rG-X-TH+hDiVddcmv=jaMHVQT_KgFh1xkA@HIDDEN>
 <864jbxden1.fsf@HIDDEN>
 <CALDnm50V6pqeXivS8ZoOh4LBMHX7_9=68Zi1im5U36Djmf9gQQ@HIDDEN>
 <86r0f1bopx.fsf@HIDDEN> <87r0f1mvtx.fsf@HIDDEN>
 <CALDnm51VaFz73kgOh_YyEryvGTrRuw7hmQXvLTY4DmZgPcKyPw@HIDDEN>
 <87frvhlgl0.fsf@HIDDEN>
Date: Fri, 19 Apr 2024 13:51:12 +0200
Message-ID: <87cyqllgen.fsf@HIDDEN>
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable
X-Migadu-Flow: FLOW_OUT
X-Spam-Score: 0.0 (/)
X-Debbugs-Envelope-To: 70036
Cc: Eli Zaretskii <eliz@HIDDEN>, 70036 <at> debbugs.gnu.org,
 felician.nemeth@HIDDEN
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -1.0 (-)

Theodor Thornhill <theo@HIDDEN> writes:

> Jo=C3=A3o T=C3=A1vora <joaotavora@HIDDEN> writes:
>
>> On Fri, Apr 19, 2024 at 12:32=E2=80=AFPM Theodor Thornhill <theo@thornhi=
ll.no> wrote:
>>
>>> I wonder - why can't we use just buffer-file-truename?
>>>
>>> In the below function, wouldn't buffer-file-truename let us avoid the
>>> file-truename in eglot-path-to-uri?
>>
>> Never used, but try it out.  It seems it's already a built-in cache
>> of whatever the buffer's truename is (and the docstring says
>> it does call the slow `file-truename`).  But like in my patch, it's
>> a one-time thing.  So yeah, if it's available in old Emacsen as well,
>>  it could replace `eglot--cached-tdi`, but then the search in the
>> publishDiagnostics
>> handler would have to be adjusted accordingly to call uri-to-path again.
>
> What would you consider as a sufficiently old Emacs?
>

I guess this should be enough:

commit f6ed2e848d23035748b621a86be74956c093823f
Author: Richard M. Stallman <rms@HIDDEN>
Date:   Tue Feb 14 16:33:19 1995 +0000

    (syms_of_buffer): Set up Lisp var buffer-file-truename.
    (init_buffer_once): Set up flag and default value for file_truename.
    (reset_buffer): Init file_truename slot.

diff --git a/src/buffer.c b/src/buffer.c
--- a/src/buffer.c
+++ b/src/buffer.c
@@ -3011,0 +3014,5 @@
+  DEFVAR_PER_BUFFER ("buffer-file-truename", &current_buffer->file_truenam=
e,
+		     make_number (Lisp_String),
+    "Truename of file visited in current buffer, or nil if not visiting a =
file.\n\
+The truename of a file is calculated by `file-truename'.\n\
+Each buffer has its own value of this variable.");

Theo




Information forwarded to bug-gnu-emacs@HIDDEN:
bug#70036; Package emacs. Full text available.

Message received at 70036 <at> debbugs.gnu.org:


Received: (at 70036) by debbugs.gnu.org; 19 Apr 2024 11:47:50 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Fri Apr 19 07:47:50 2024
Received: from localhost ([127.0.0.1]:58137 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1rxmib-0005a6-IK
	for submit <at> debbugs.gnu.org; Fri, 19 Apr 2024 07:47:49 -0400
Received: from out-171.mta0.migadu.com ([91.218.175.171]:43954)
 by debbugs.gnu.org with esmtp (Exim 4.84_2)
 (envelope-from <theo@HIDDEN>) id 1rxmiY-0005Ym-43
 for 70036 <at> debbugs.gnu.org; Fri, 19 Apr 2024 07:47:47 -0400
X-Report-Abuse: Please report any abuse attempt to abuse@HIDDEN and
 include these headers.
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=thornhill.no;
 s=key1; t=1713527246;
 h=from:from:reply-to:subject:subject:date:date:message-id:message-id:
 to:to:cc:cc:mime-version:mime-version:content-type:content-type:
 content-transfer-encoding:content-transfer-encoding:
 in-reply-to:in-reply-to:references:references;
 bh=QobIiwFRT+cSpfYvE+Jp/DpOTA7dqdBkmgKTLe+Fbjs=;
 b=jNh2ybkCM8u4b3TGoFqS6/v4aXKAzz2gK6DlO7dJcOmIuDbb+AXQt8pkzYEbhOXNzyIXlm
 y/zgwxv50DIvrZZg5DKCc4u+iqxHVMqbwRrO4RCAlprjBl4tL5ETPUo+RgscB8XW1anpMz
 J52SqkLvFv0mLUjaDLPslbR7x1VBug+eLXWoVt3OCXaj1KZ7iAU7YmnR94SOIbmmXsnoXZ
 Re1F/9TbKtuyooiEeByyQY2qguqPb1TFjaFs2LLEVbGbrJSJJyj1/MuLNF7Or3S7Tyzm+o
 sPYDQUqjS+0IBDtVLyGg2z/BJl9vF8ZaL3Zzs1gwipX3XMAQIBCtXsn9FauoOA==
From: Theodor Thornhill <theo@HIDDEN>
To: =?utf-8?B?Sm/Do28gVMOhdm9yYQ==?= <joaotavora@HIDDEN>
Subject: Re: bug#70036 a fix that
In-Reply-To: <CALDnm51VaFz73kgOh_YyEryvGTrRuw7hmQXvLTY4DmZgPcKyPw@HIDDEN>
References: <CALDnm517N=DM+0tqBpHCGiHenPMirq2eFJF+Gk0ePO+W6WO-Ug@HIDDEN>
 <4e670617-6483-4159-a5cf-27a921764c38@HIDDEN>
 <CALDnm536w_khSks_rG-X-TH+hDiVddcmv=jaMHVQT_KgFh1xkA@HIDDEN>
 <864jbxden1.fsf@HIDDEN>
 <CALDnm50V6pqeXivS8ZoOh4LBMHX7_9=68Zi1im5U36Djmf9gQQ@HIDDEN>
 <86r0f1bopx.fsf@HIDDEN> <87r0f1mvtx.fsf@HIDDEN>
 <CALDnm51VaFz73kgOh_YyEryvGTrRuw7hmQXvLTY4DmZgPcKyPw@HIDDEN>
Date: Fri, 19 Apr 2024 13:47:23 +0200
Message-ID: <87frvhlgl0.fsf@HIDDEN>
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable
X-Migadu-Flow: FLOW_OUT
X-Spam-Score: 0.0 (/)
X-Debbugs-Envelope-To: 70036
Cc: Eli Zaretskii <eliz@HIDDEN>, 70036 <at> debbugs.gnu.org,
 felician.nemeth@HIDDEN
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -1.0 (-)

Jo=C3=A3o T=C3=A1vora <joaotavora@HIDDEN> writes:

> On Fri, Apr 19, 2024 at 12:32=E2=80=AFPM Theodor Thornhill <theo@thornhil=
l.no> wrote:
>
>> I wonder - why can't we use just buffer-file-truename?
>>
>> In the below function, wouldn't buffer-file-truename let us avoid the
>> file-truename in eglot-path-to-uri?
>
> Never used, but try it out.  It seems it's already a built-in cache
> of whatever the buffer's truename is (and the docstring says
> it does call the slow `file-truename`).  But like in my patch, it's
> a one-time thing.  So yeah, if it's available in old Emacsen as well,
>  it could replace `eglot--cached-tdi`, but then the search in the
> publishDiagnostics
> handler would have to be adjusted accordingly to call uri-to-path again.

What would you consider as a sufficiently old Emacs?

>
> Try it out, may be cleaner indeed.
>
> Beware though, Stefan has fixed the tests which is very good, but there
> still isn't a test for the symlink scenario, so you'd have to test it
> manually (or
> even better, craft that test yourself, with clangd).
>
> Jo=C3=A3o

Sure

Theo




Information forwarded to bug-gnu-emacs@HIDDEN:
bug#70036; Package emacs. Full text available.

Message received at 70036 <at> debbugs.gnu.org:


Received: (at 70036) by debbugs.gnu.org; 19 Apr 2024 11:41:18 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Fri Apr 19 07:41:18 2024
Received: from localhost ([127.0.0.1]:58132 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1rxmcH-0004oE-Us
	for submit <at> debbugs.gnu.org; Fri, 19 Apr 2024 07:41:18 -0400
Received: from mail-lf1-x12f.google.com ([2a00:1450:4864:20::12f]:51657)
 by debbugs.gnu.org with esmtp (Exim 4.84_2)
 (envelope-from <joaotavora@HIDDEN>) id 1rxmbe-0004gn-Bq
 for 70036 <at> debbugs.gnu.org; Fri, 19 Apr 2024 07:40:40 -0400
Received: by mail-lf1-x12f.google.com with SMTP id
 2adb3069b0e04-51abf1a9332so731669e87.3
 for <70036 <at> debbugs.gnu.org>; Fri, 19 Apr 2024 04:40:24 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=gmail.com; s=20230601; t=1713526818; x=1714131618; darn=debbugs.gnu.org;
 h=content-transfer-encoding:cc:to:subject:message-id:date:from
 :in-reply-to:references:mime-version:from:to:cc:subject:date
 :message-id:reply-to;
 bh=0Ec5KsJHsnWYs6nTAiVBtlK9Bq7KYs+GFnOmcxqTm1A=;
 b=nm7DNGtKG6eZW2bJrgEAt/uFchRdxwmk2tytle+vEs2wNoLPL0WW01qZtVB61q9eYI
 sBuIJSbUqBZsnuj++8XspIVhtvXKtlmvmEDnk5itjtXBd08o6Wsvf0vEh1PoB9HyX5Sx
 ujI/Ps5NhdNeWMoERiHjLe3Y60LlUitdOEXIC9/B5goRGqyz/tSK042+0ZHK1u8Pk6mD
 AtHM5+KbT8d83uDGLIqSKM0XTEjnWy12k6WtMtbSHaAHf/l9vjrO5Ae1H+hbIMy4GtJI
 r2s3WgPPZQ5K+7bZJPGb0YKyYQSo8v7GE72ITF670El4EWbuxz2RKelvZ0M5Wx4Adiz2
 uZ+g==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=1e100.net; s=20230601; t=1713526818; x=1714131618;
 h=content-transfer-encoding:cc:to:subject:message-id:date:from
 :in-reply-to:references:mime-version:x-gm-message-state:from:to:cc
 :subject:date:message-id:reply-to;
 bh=0Ec5KsJHsnWYs6nTAiVBtlK9Bq7KYs+GFnOmcxqTm1A=;
 b=jasuiJ/4a0Y/g//vdnxeT32jA//2bMmAvWimOdLQZqSqM++KLuDpzxEKO+HaR9qg3n
 JttxKRpAk2u2ftlLLIyYm8Unu20kiOoVtScG3XhmdmRa0iIy4H2906vLZAv9mvQgn3mW
 wEWdc0Nfp5VTElfhyWys1Pukq6xYskV2wT+h85A0J3nFw7EJnoBOqXFuqBIv4qu4ciPs
 9jWWEGMY/fqIAA5mo4GKeubngGprp3TP4/92m2qQ5ylKGBMJR51eHjXs1i10TZt4YqBC
 BPyalkSy0XyLHLBtTlLGZLmVBHaUc+z7kycw9STymzOz/ZqcjcwhYCC70+tADUGWp+re
 ENRA==
X-Forwarded-Encrypted: i=1;
 AJvYcCXd6UNcO3agRTbUcvwqXW7oHp9dvTElov0c9jOYe0JCbUS3EUHZlrBfPSf8IrPqgODsF06rymPANUNHg8FLp75QE1nnaD8=
X-Gm-Message-State: AOJu0YyU7tHGrjO2qZmgtkFfbJ6bBg8Z2aqnTAvNfQ+RcKddwNuSShNz
 5LYb0ydJJ32TOgJCGimyBsIkMlCtsSg5QHFlC+fDU8HV1LGTOm9lQuPQ1o2EXIUzjW++SuDZ5fb
 cyQMpNusOLelSS43/WJ0urD8V/tJIxA==
X-Google-Smtp-Source: AGHT+IHgUHzBouBShBj1tmVCrI2r0VFEBuGdVq+7H5iW8vpwYKjMleYTQitG24/mbRkG7aVcUGknKIC+Vr+QJG5heQQ=
X-Received: by 2002:a05:6512:1595:b0:516:d692:5e0b with SMTP id
 bp21-20020a056512159500b00516d6925e0bmr1405906lfb.54.1713526818086; Fri, 19
 Apr 2024 04:40:18 -0700 (PDT)
MIME-Version: 1.0
References: <CALDnm517N=DM+0tqBpHCGiHenPMirq2eFJF+Gk0ePO+W6WO-Ug@HIDDEN>
 <4e670617-6483-4159-a5cf-27a921764c38@HIDDEN>
 <CALDnm536w_khSks_rG-X-TH+hDiVddcmv=jaMHVQT_KgFh1xkA@HIDDEN>
 <864jbxden1.fsf@HIDDEN>
 <CALDnm50V6pqeXivS8ZoOh4LBMHX7_9=68Zi1im5U36Djmf9gQQ@HIDDEN>
 <86r0f1bopx.fsf@HIDDEN> <87r0f1mvtx.fsf@HIDDEN>
In-Reply-To: <87r0f1mvtx.fsf@HIDDEN>
From: =?UTF-8?B?Sm/Do28gVMOhdm9yYQ==?= <joaotavora@HIDDEN>
Date: Fri, 19 Apr 2024 12:40:06 +0100
Message-ID: <CALDnm51VaFz73kgOh_YyEryvGTrRuw7hmQXvLTY4DmZgPcKyPw@HIDDEN>
Subject: Re: bug#70036 a fix that
To: Theodor Thornhill <theo@HIDDEN>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable
X-Spam-Score: 0.0 (/)
X-Debbugs-Envelope-To: 70036
Cc: Eli Zaretskii <eliz@HIDDEN>, 70036 <at> debbugs.gnu.org,
 felician.nemeth@HIDDEN
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -1.0 (-)

On Fri, Apr 19, 2024 at 12:32=E2=80=AFPM Theodor Thornhill <theo@thornhill.=
no> wrote:

> I wonder - why can't we use just buffer-file-truename?
>
> In the below function, wouldn't buffer-file-truename let us avoid the
> file-truename in eglot-path-to-uri?

Never used, but try it out.  It seems it's already a built-in cache
of whatever the buffer's truename is (and the docstring says
it does call the slow `file-truename`).  But like in my patch, it's
a one-time thing.  So yeah, if it's available in old Emacsen as well,
 it could replace `eglot--cached-tdi`, but then the search in the
publishDiagnostics
handler would have to be adjusted accordingly to call uri-to-path again.

Try it out, may be cleaner indeed.

Beware though, Stefan has fixed the tests which is very good, but there
still isn't a test for the symlink scenario, so you'd have to test it
manually (or
even better, craft that test yourself, with clangd).

Jo=C3=A3o




Information forwarded to bug-gnu-emacs@HIDDEN:
bug#70036; Package emacs. Full text available.

Message received at 70036 <at> debbugs.gnu.org:


Received: (at 70036) by debbugs.gnu.org; 19 Apr 2024 11:35:09 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Fri Apr 19 07:35:09 2024
Received: from localhost ([127.0.0.1]:58113 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1rxmWJ-00042v-Fe
	for submit <at> debbugs.gnu.org; Fri, 19 Apr 2024 07:35:09 -0400
Received: from mail-lj1-x230.google.com ([2a00:1450:4864:20::230]:43471)
 by debbugs.gnu.org with esmtp (Exim 4.84_2)
 (envelope-from <joaotavora@HIDDEN>) id 1rxmWG-00041N-Fw
 for 70036 <at> debbugs.gnu.org; Fri, 19 Apr 2024 07:35:05 -0400
Received: by mail-lj1-x230.google.com with SMTP id
 38308e7fff4ca-2dae975d0dcso30135781fa.1
 for <70036 <at> debbugs.gnu.org>; Fri, 19 Apr 2024 04:34:50 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=gmail.com; s=20230601; t=1713526484; x=1714131284; darn=debbugs.gnu.org;
 h=content-transfer-encoding:cc:to:subject:message-id:date:from
 :in-reply-to:references:mime-version:from:to:cc:subject:date
 :message-id:reply-to;
 bh=Ar8b395eaNQ5JmP5Ji6qUUaDRQuAwddKbzC0kIKNSCE=;
 b=XavJcdNm0fAQSv14SwWjnSPdJiTLNLecAupsN/YInMAWbVd5+dLmtUIpnTrZQsgL98
 6U8Qoa70hmAleoLW8LQwREhxOuBq6qVosP3HieijNFZMY7n3pY65sLbVAAMKVxUA7FqA
 N/pvzt2v95HIdx0MZqfEk9YmM/b43/4Geon+JkDOLohYglPXMIPnGog/0PuWwNhOnSts
 7KatYIpw9ylCy9gqDusqLSZtdbYED/x9h2nq/68hgZvj0BycyuaFXN74NJElklYHpmgS
 fhG5LEEtf69MgbGRzYsSmWzypMIusDTPdg2YZF0OUMBy1SP7XtnxTwv8+7DjSINXCkSg
 d4UQ==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=1e100.net; s=20230601; t=1713526484; x=1714131284;
 h=content-transfer-encoding:cc:to:subject:message-id:date:from
 :in-reply-to:references:mime-version:x-gm-message-state:from:to:cc
 :subject:date:message-id:reply-to;
 bh=Ar8b395eaNQ5JmP5Ji6qUUaDRQuAwddKbzC0kIKNSCE=;
 b=EIvQnMmRDSjsSFv6mze3IZIKCGnhXzCqmDk/9/Y1br0kjmV5jcsTGw6JRNIbdi2JfX
 k9eoqH4d7WUpFjEKudR0n+yLH3zjk9X5GqUD0xUcnelVp+CmYBo9xWqTskCFfCR1vS/N
 pWtQVNVrLXyojOTBTX4YRhZhcya+/AA95Q7rT5K0mGu7OmtG5NJtOKnibKaOzL6hL5a9
 nxbpcdfB67LHkYye7Atm6cJtyp2DMghW+MHrHqlI/MTcJ+wg713b0xh6lxKG3p5RReeP
 XbZS6becheBHXCbUD9aSUVZaxhWmHwfXRxnvJYFa/LSmOUG8L/UVPViODgmD24V7eJSd
 6xaw==
X-Forwarded-Encrypted: i=1;
 AJvYcCXlUG0NSKpLUAJ/iiBV0kDyGUBxaY4+MXmF5ggjhpAyMSPE0IaKYiel3xarwtv3i8yhCziv/ckdmAIBNiIST+QcjRD+Fi8=
X-Gm-Message-State: AOJu0YxjC634zt1xdruPqDO0AdADlQeGrBnxI3+6gptvD/ZDHqGSRF3T
 s2rYIxtM0YTRaNwDuBRvAevhiMEfrHaJt3yhOBWNKUvYHXNmW3l2e+cFdujIZIzujyDOHhBXz/k
 xfoOiXpKKEhI7gmWQ0wte4qOgRzM=
X-Google-Smtp-Source: AGHT+IEQgtWMpGHR7gDQmiXOoPYZUrLsZDLa9ElNv8fM/H7sq7eghaWWe1OjxpGpl0PDjcOIOatiG4kgw3+4jrJHJ0g=
X-Received: by 2002:a2e:a983:0:b0:2d8:4892:bee2 with SMTP id
 x3-20020a2ea983000000b002d84892bee2mr725885ljq.20.1713526483777; Fri, 19 Apr
 2024 04:34:43 -0700 (PDT)
MIME-Version: 1.0
References: <CALDnm517N=DM+0tqBpHCGiHenPMirq2eFJF+Gk0ePO+W6WO-Ug@HIDDEN>
 <4e670617-6483-4159-a5cf-27a921764c38@HIDDEN>
 <CALDnm536w_khSks_rG-X-TH+hDiVddcmv=jaMHVQT_KgFh1xkA@HIDDEN>
 <864jbxden1.fsf@HIDDEN>
 <CALDnm50V6pqeXivS8ZoOh4LBMHX7_9=68Zi1im5U36Djmf9gQQ@HIDDEN>
 <CALDnm52rM4Q1UKoyhh8nekZuV4SYSX1=MKzuBoysSXHNvQBoRg@HIDDEN>
 <86le59bo7z.fsf@HIDDEN>
In-Reply-To: <86le59bo7z.fsf@HIDDEN>
From: =?UTF-8?B?Sm/Do28gVMOhdm9yYQ==?= <joaotavora@HIDDEN>
Date: Fri, 19 Apr 2024 12:34:30 +0100
Message-ID: <CALDnm52oOwD1cwmLt1wabh05gmh091vEycmKnUvrePmQaiGdQA@HIDDEN>
Subject: Re: bug#70036 a fix that
To: Eli Zaretskii <eliz@HIDDEN>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable
X-Spam-Score: 0.0 (/)
X-Debbugs-Envelope-To: 70036
Cc: felician.nemeth@HIDDEN, 70036 <at> debbugs.gnu.org, theo@HIDDEN
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -1.0 (-)

On Fri, Apr 19, 2024 at 12:12=E2=80=AFPM Eli Zaretskii <eliz@HIDDEN> wrote=
:

> > > I _think_, but can't be 100% sure, that I explicitly decided that 6 y=
ears
> > > ago, I just didn't document it  explicitly beyond typing in "file-tru=
ename".
> > > Git archeology brings me to a commit in 2018 where I was reorganizing
> > > code, and file-truename was already there.  I definitely knew about
> > > expand-file-name in 2018 though.
> >
> > The fact that I chose find-buffer-visiting over get-file-buffer around
> > the same time is another hint...
>
> Without proper commentary, this is a very weak hint.  It could, for
> example, mean the problem you wanted to solve no longer exists, or
> even that you were unsure about whether expand-file-name could do the
> job.

If I indeed _meant_ to solve the symlink problem, then it most definitely
still exists.  I've demonstrated that.

Intentional or not, the fact of the matter is that Eglot was usable
from very early on projects with symlinks.   Not all clients can boast
that, as seems to be evidenced some bug reports to the servers pertaining
to some other clients.

Regardless, foregoing this behaviour should be at a minimum documented
and would need an extremely well-fundamented reason.  But there was not
even sufficient awareness that the behaviour was being abandoned.  Which
is, like, totally OK and common and normal, and doesn't bring into
question the high  credentials of anyone  involved in this discussion.

Jo=C3=A3o




Information forwarded to bug-gnu-emacs@HIDDEN:
bug#70036; Package emacs. Full text available.

Message received at 70036 <at> debbugs.gnu.org:


Received: (at 70036) by debbugs.gnu.org; 19 Apr 2024 11:33:11 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Fri Apr 19 07:33:10 2024
Received: from localhost ([127.0.0.1]:58104 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1rxmUQ-0003oT-H4
	for submit <at> debbugs.gnu.org; Fri, 19 Apr 2024 07:33:10 -0400
Received: from out-176.mta0.migadu.com ([2001:41d0:1004:224b::b0]:13155)
 by debbugs.gnu.org with esmtp (Exim 4.84_2)
 (envelope-from <theo@HIDDEN>) id 1rxmUM-0003mk-GN
 for 70036 <at> debbugs.gnu.org; Fri, 19 Apr 2024 07:33:08 -0400
X-Report-Abuse: Please report any abuse attempt to abuse@HIDDEN and
 include these headers.
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=thornhill.no;
 s=key1; t=1713526365;
 h=from:from:reply-to:subject:subject:date:date:message-id:message-id:
 to:to:cc:cc:mime-version:mime-version:content-type:content-type:
 content-transfer-encoding:content-transfer-encoding:
 in-reply-to:in-reply-to:references:references;
 bh=yACaqzWwkw35NNrQowyQy51TiM4MgCV9+YilJ3km1Hg=;
 b=UAPq2kmTeVEQA4ELrtyDl4Vjvm0Rq1d04YmoZeoNvqX6+mtPwn6zhmQz1qZ5mfHGWhvIy0
 YOsux+XpP0Gx5WXZ/I5APiPpRe0veZuyzoR0KbnVuAV2ryr6JZvQHxX1rghkmkAddgffc8
 2f869WuQ0xUE4Q9j0HcdKZD2nOl+cbF6VPcu+A0MyjxV1XbfIfH/CWaq/It79skEjKbZW2
 MW/g3W/t531AebsGPxlDjxhITBaOzT/rHQS5v1YJbznffRbfV01PwIUPnPnTpxRzsHjYDM
 eycHaAbsI4pM2CS7ZHFycUwQnFU89NDzm82Nn7c3MqX7k6uO7kmtYY3kz2lqNg==
From: Theodor Thornhill <theo@HIDDEN>
To: Eli Zaretskii <eliz@HIDDEN>, =?utf-8?B?Sm/Do28gVMOhdm9yYQ==?=
 <joaotavora@HIDDEN>
Subject: Re: bug#70036 a fix that
In-Reply-To: <86r0f1bopx.fsf@HIDDEN>
References: <CALDnm517N=DM+0tqBpHCGiHenPMirq2eFJF+Gk0ePO+W6WO-Ug@HIDDEN>
 <4e670617-6483-4159-a5cf-27a921764c38@HIDDEN>
 <CALDnm536w_khSks_rG-X-TH+hDiVddcmv=jaMHVQT_KgFh1xkA@HIDDEN>
 <864jbxden1.fsf@HIDDEN>
 <CALDnm50V6pqeXivS8ZoOh4LBMHX7_9=68Zi1im5U36Djmf9gQQ@HIDDEN>
 <86r0f1bopx.fsf@HIDDEN>
Date: Fri, 19 Apr 2024 13:32:42 +0200
Message-ID: <87r0f1mvtx.fsf@HIDDEN>
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable
X-Migadu-Flow: FLOW_OUT
X-Spam-Score: 0.0 (/)
X-Debbugs-Envelope-To: 70036
Cc: 70036 <at> debbugs.gnu.org, felician.nemeth@HIDDEN
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -1.0 (-)

Eli Zaretskii <eliz@HIDDEN> writes:

>> From: Jo=C3=A3o T=C3=A1vora <joaotavora@HIDDEN>
>> Date: Fri, 19 Apr 2024 09:27:31 +0100
>> Cc: theo@HIDDEN, felician.nemeth@HIDDEN, 70036 <at> debbugs.gnu.org
>>=20
>> > > I still think the cleanest solution is to write file-truename
>> > > in C.
>> >
>> > I explained in that past discussion why this is not simple.  So if
>> > simpler solutions exist, we should prefer them.
>>=20
>> Fair enough.  Shifting complexity around is what we do.  But
>> having a performant file-truename is a strategically investment, it's
>> a very common filesystem primitive that users expect to be as fast
>> as it can be made.  Common Lisp has TRUENAME, Python has 'realpath()',
>> etc.   We could compare (here benchmarks are definitely the best
>> method)
>
> file-truename does much more than just the equivalent of realpath.  If
> all we needed was a single call to realpath, we'd done that in C long
> ago.
>
> The problem with rewriting file-truename in C is that we must be 110%
> compatible to what the Lisp implementation does, since it's such a
> low-level API that is used so widely.
>
>> > find-buffer-visiting was made much faster lately, but that speedup
>> > AFAIR shows up only if the session has a lot of buffers, so trying
>> > these benchmarks in "emacs -Q" will not typically show the effect, and
>> > could even obscure the file-truename effect as well, because the
>> > number of calls to file-truename will be much smaller.
>>=20
>> I'm not sure what test you are suggesting.  If f-b-v performs _better_
>> in "lots of buffers" situation, then we should measure Eglot's performan=
ce
>> in the plausible _worse_ case of few buffers, no?
>
> No, IMO we should try it in both "emacs -Q" and in a session with a
> lot of buffers, to have the performance in its true relevant context.
> Most real-life Emacs sessions have many more buffers than we have in
> "emacs -Q".  Worst-case testing is not always TRT, because it can skew
> the perspective and lead to wrong decisions.
>
>> > But if calling
>> > find-buffer-visiting from Eglot can be avoided, that is of course even
>> > better.
>>=20
>> Yes, that's what my latest patch does.  But ideally it would be cleaner
>> (IMHO) to have a fast usable find-buffer-visiting by speeding
>> up its underlying file-truename.
>

I wonder - why can't we use just buffer-file-truename?

In the below function, wouldn't buffer-file-truename let us avoid the
file-truename in eglot-path-to-uri?


(defun eglot--TextDocumentIdentifier ()
  "Compute TextDocumentIdentifier object for current buffer."
  `(:uri ,(or eglot--cached-tdi
              (setq eglot--cached-tdi
                    (eglot-path-to-uri (or buffer-file-name
                                           (ignore-errors
                                             (buffer-file-name
                                              (buffer-base-buffer)))))))))


> We did that at least to some extent in the improvements submitted by
> Ihor and now available on master.  From where I stand, we now have a
> reasonably performant implementation of find-buffer-visiting; I would
> need benchmarks showing otherwise to change my mind.

Theo




Information forwarded to bug-gnu-emacs@HIDDEN:
bug#70036; Package emacs. Full text available.

Message received at 70036 <at> debbugs.gnu.org:


Received: (at 70036) by debbugs.gnu.org; 19 Apr 2024 11:12:59 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Fri Apr 19 07:12:59 2024
Received: from localhost ([127.0.0.1]:58087 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1rxmAt-00077a-3x
	for submit <at> debbugs.gnu.org; Fri, 19 Apr 2024 07:12:59 -0400
Received: from eggs.gnu.org ([2001:470:142:3::10]:54766)
 by debbugs.gnu.org with esmtp (Exim 4.84_2)
 (envelope-from <eliz@HIDDEN>) id 1rxmAq-00076H-AD
 for 70036 <at> debbugs.gnu.org; Fri, 19 Apr 2024 07:12:57 -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 <eliz@HIDDEN>)
 id 1rxmAW-0002d0-0n; Fri, 19 Apr 2024 07:12:36 -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=5GQ0rT5/gLDUiFK9ohoTbfJqE2Fm1K0GHe4I4eShuj0=; b=kq8Df9YA0OkXoCRsMIGa
 4FMhppe9X31TPA6O2qtrQtOkmO9YEOklU4x2b37wVH/+gKpYx+9l0gORT2eiykvKHa56k3uPFzk+v
 fyA7JgCXV4r8YkqoIHmVE0+oC80gwFltUSl8NLuraa+Y47E1DBsVl3U+1o5bP1EE0S51iOeDuBjwt
 8qxQ8PtgREtLoeJUa0FS/VhCZ5TlFTakJ2vqs4broYbMj3NiK+GK+JMKp5fA5npCZ1mg9X01ftszV
 t4BFnd/x1XAHLD41B9MMHhAiGBOdlnL/HVEPVnxirJLHi0TCqt6k6cqXoIpVl/qsBmDGvVOUe0Zc2
 P/91y1MGNVF60g==;
Date: Fri, 19 Apr 2024 14:12:32 +0300
Message-Id: <86le59bo7z.fsf@HIDDEN>
From: Eli Zaretskii <eliz@HIDDEN>
To: =?utf-8?B?Sm/Do28gVMOhdm9yYQ==?= <joaotavora@HIDDEN>
In-Reply-To: <CALDnm52rM4Q1UKoyhh8nekZuV4SYSX1=MKzuBoysSXHNvQBoRg@HIDDEN>
 (message from =?utf-8?B?Sm/Do28gVMOhdm9yYQ==?= on Fri, 19 Apr 2024 09:49:38
 +0100)
Subject: Re: bug#70036 a fix that
References: <CALDnm517N=DM+0tqBpHCGiHenPMirq2eFJF+Gk0ePO+W6WO-Ug@HIDDEN>
 <4e670617-6483-4159-a5cf-27a921764c38@HIDDEN>
 <CALDnm536w_khSks_rG-X-TH+hDiVddcmv=jaMHVQT_KgFh1xkA@HIDDEN>
 <864jbxden1.fsf@HIDDEN>
 <CALDnm50V6pqeXivS8ZoOh4LBMHX7_9=68Zi1im5U36Djmf9gQQ@HIDDEN>
 <CALDnm52rM4Q1UKoyhh8nekZuV4SYSX1=MKzuBoysSXHNvQBoRg@HIDDEN>
MIME-version: 1.0
Content-type: text/plain; charset=utf-8
Content-Transfer-Encoding: 8bit
X-Spam-Score: -2.3 (--)
X-Debbugs-Envelope-To: 70036
Cc: felician.nemeth@HIDDEN, 70036 <at> debbugs.gnu.org, theo@HIDDEN
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -3.3 (---)

> From: João Távora <joaotavora@HIDDEN>
> Date: Fri, 19 Apr 2024 09:49:38 +0100
> Cc: theo@HIDDEN, felician.nemeth@HIDDEN, 70036 <at> debbugs.gnu.org
> 
> On Fri, Apr 19, 2024 at 9:27 AM João Távora <joaotavora@HIDDEN> wrote:
> 
> > > It's only now, that we decided symlinks _should_ be resolved by Emacs,
> >
> > I _think_, but can't be 100% sure, that I explicitly decided that 6 years
> > ago, I just didn't document it  explicitly beyond typing in "file-truename".
> > Git archeology brings me to a commit in 2018 where I was reorganizing
> > code, and file-truename was already there.  I definitely knew about
> > expand-file-name in 2018 though.
> 
> The fact that I chose find-buffer-visiting over get-file-buffer around
> the same time is another hint...

Without proper commentary, this is a very weak hint.  It could, for
example, mean the problem you wanted to solve no longer exists, or
even that you were unsure about whether expand-file-name could do the
job.




Information forwarded to bug-gnu-emacs@HIDDEN:
bug#70036; Package emacs. Full text available.

Message received at 70036 <at> debbugs.gnu.org:


Received: (at 70036) by debbugs.gnu.org; 19 Apr 2024 11:02:21 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Fri Apr 19 07:02:20 2024
Received: from localhost ([127.0.0.1]:58074 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1rxm0Y-00064q-A2
	for submit <at> debbugs.gnu.org; Fri, 19 Apr 2024 07:02:20 -0400
Received: from eggs.gnu.org ([2001:470:142:3::10]:40998)
 by debbugs.gnu.org with esmtp (Exim 4.84_2)
 (envelope-from <eliz@HIDDEN>) id 1rxm0R-00063O-Vc
 for 70036 <at> debbugs.gnu.org; Fri, 19 Apr 2024 07:02:15 -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 <eliz@HIDDEN>)
 id 1rxm07-0000JZ-Dh; Fri, 19 Apr 2024 07:01:51 -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=eDTCHQZA2H3voe0RDHNckKHrP0Svf5M048pt27BB0kg=; b=GdAQi0lTk68Qfi1Z4aor
 4O9UnTmHrU1k2YCU//Jn5d7wYzhsWl71tm3Ub8UjCkFAhx0XF2fcIHPJiNHB55gtH9dbGoV5b6StT
 Nhd0LMKS4gnRLfI4NrCmQ1+PVsKGYzJ2H26rQJp7p/Yo1DJlz5WMqDwIAa8/fTAsxOC7dqZq/bQam
 49DFK6Ma1luiD50NBonK0Q44GN7M5qYCtumdn7y3vRqepNnDWVbgSmkYseOp6fGYDo/QWeSMNsfjs
 6SMOjg8Pc4XCfjbgS6K+p7pR/PXZwmYVMC4f5+3YFCN68H2swHGMK/QwLr5KQuuBPiBldJxPy0f5P
 7lWok6X6YdFW0g==;
Date: Fri, 19 Apr 2024 14:01:46 +0300
Message-Id: <86r0f1bopx.fsf@HIDDEN>
From: Eli Zaretskii <eliz@HIDDEN>
To: =?utf-8?B?Sm/Do28gVMOhdm9yYQ==?= <joaotavora@HIDDEN>
In-Reply-To: <CALDnm50V6pqeXivS8ZoOh4LBMHX7_9=68Zi1im5U36Djmf9gQQ@HIDDEN>
 (message from =?utf-8?B?Sm/Do28gVMOhdm9yYQ==?= on Fri, 19 Apr 2024 09:27:31
 +0100)
Subject: Re: bug#70036 a fix that
References: <CALDnm517N=DM+0tqBpHCGiHenPMirq2eFJF+Gk0ePO+W6WO-Ug@HIDDEN>
 <4e670617-6483-4159-a5cf-27a921764c38@HIDDEN>
 <CALDnm536w_khSks_rG-X-TH+hDiVddcmv=jaMHVQT_KgFh1xkA@HIDDEN>
 <864jbxden1.fsf@HIDDEN>
 <CALDnm50V6pqeXivS8ZoOh4LBMHX7_9=68Zi1im5U36Djmf9gQQ@HIDDEN>
MIME-version: 1.0
Content-type: text/plain; charset=utf-8
Content-Transfer-Encoding: 8bit
X-Spam-Score: -2.3 (--)
X-Debbugs-Envelope-To: 70036
Cc: felician.nemeth@HIDDEN, 70036 <at> debbugs.gnu.org, theo@HIDDEN
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -3.3 (---)

> From: João Távora <joaotavora@HIDDEN>
> Date: Fri, 19 Apr 2024 09:27:31 +0100
> Cc: theo@HIDDEN, felician.nemeth@HIDDEN, 70036 <at> debbugs.gnu.org
> 
> > > I still think the cleanest solution is to write file-truename
> > > in C.
> >
> > I explained in that past discussion why this is not simple.  So if
> > simpler solutions exist, we should prefer them.
> 
> Fair enough.  Shifting complexity around is what we do.  But
> having a performant file-truename is a strategically investment, it's
> a very common filesystem primitive that users expect to be as fast
> as it can be made.  Common Lisp has TRUENAME, Python has 'realpath()',
> etc.   We could compare (here benchmarks are definitely the best
> method)

file-truename does much more than just the equivalent of realpath.  If
all we needed was a single call to realpath, we'd done that in C long
ago.

The problem with rewriting file-truename in C is that we must be 110%
compatible to what the Lisp implementation does, since it's such a
low-level API that is used so widely.

> > find-buffer-visiting was made much faster lately, but that speedup
> > AFAIR shows up only if the session has a lot of buffers, so trying
> > these benchmarks in "emacs -Q" will not typically show the effect, and
> > could even obscure the file-truename effect as well, because the
> > number of calls to file-truename will be much smaller.
> 
> I'm not sure what test you are suggesting.  If f-b-v performs _better_
> in "lots of buffers" situation, then we should measure Eglot's performance
> in the plausible _worse_ case of few buffers, no?

No, IMO we should try it in both "emacs -Q" and in a session with a
lot of buffers, to have the performance in its true relevant context.
Most real-life Emacs sessions have many more buffers than we have in
"emacs -Q".  Worst-case testing is not always TRT, because it can skew
the perspective and lead to wrong decisions.

> > But if calling
> > find-buffer-visiting from Eglot can be avoided, that is of course even
> > better.
> 
> Yes, that's what my latest patch does.  But ideally it would be cleaner
> (IMHO) to have a fast usable find-buffer-visiting by speeding
> up its underlying file-truename.

We did that at least to some extent in the improvements submitted by
Ihor and now available on master.  From where I stand, we now have a
reasonably performant implementation of find-buffer-visiting; I would
need benchmarks showing otherwise to change my mind.




Information forwarded to bug-gnu-emacs@HIDDEN:
bug#70036; Package emacs. Full text available.

Message received at 70036 <at> debbugs.gnu.org:


Received: (at 70036) by debbugs.gnu.org; 19 Apr 2024 10:51:45 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Fri Apr 19 06:51:45 2024
Received: from localhost ([127.0.0.1]:58055 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1rxlqJ-0004lW-SY
	for submit <at> debbugs.gnu.org; Fri, 19 Apr 2024 06:51:45 -0400
Received: from eggs.gnu.org ([2001:470:142:3::10]:47020)
 by debbugs.gnu.org with esmtp (Exim 4.84_2)
 (envelope-from <eliz@HIDDEN>) id 1rxlqH-0004kR-69
 for 70036 <at> debbugs.gnu.org; Fri, 19 Apr 2024 06:51:42 -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 <eliz@HIDDEN>)
 id 1rxlpw-000697-KJ; Fri, 19 Apr 2024 06:51:20 -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=OtjZsJ8CFxiRWeZNV/FrOAdPQAd1NtxpVxdRWwaWBtE=; b=hgvnUz4eKO+ba5AncyUg
 uKZb2xvP8cAFQTVHqoUJpfGpHqkFARNdUtUcoj/TeuFymGk+oFPtGuzHi+pW+5WGbovsGwKgcaigr
 Jd1/NCuxQ5X7Jg9MbMfaW6wwV+c8e1RcogOPVf7RqaNjUeAsR7Ter4aWZGY+ouHd6YgtYilybfXcL
 aY5QHJ/4kYdFDGaqJtWV6milBhqkkf84ApWNJlNqE7WcfN6uf5p7G0dj0x296dogHzQ1bwTAyAlsx
 9ROHz9ix1MNMmD7LMgncMybtAAOJ9Kz9aKP/y/j4MteCtPmqZM+Z7XCkW+F01PPcei3NuB2ScINxS
 +tGEOTEb2zyHmA==;
Date: Fri, 19 Apr 2024 13:51:15 +0300
Message-Id: <86sezhbp7g.fsf@HIDDEN>
From: Eli Zaretskii <eliz@HIDDEN>
To: Ihor Radchenko <yantar92@HIDDEN>
In-Reply-To: <877cgt7ptk.fsf@localhost> (message from Ihor Radchenko on Fri,
 19 Apr 2024 07:51:35 +0000)
Subject: Re: bug#70036: a fix that
References: <CALDnm517N=DM+0tqBpHCGiHenPMirq2eFJF+Gk0ePO+W6WO-Ug@HIDDEN>
 <4e670617-6483-4159-a5cf-27a921764c38@HIDDEN>
 <CALDnm536w_khSks_rG-X-TH+hDiVddcmv=jaMHVQT_KgFh1xkA@HIDDEN>
 <864jbxden1.fsf@HIDDEN> <877cgt7ptk.fsf@localhost>
MIME-version: 1.0
Content-type: text/plain; charset=utf-8
Content-Transfer-Encoding: 8bit
X-Spam-Score: -2.3 (--)
X-Debbugs-Envelope-To: 70036
Cc: theo@HIDDEN, 70036 <at> debbugs.gnu.org, felician.nemeth@HIDDEN,
 joaotavora@HIDDEN
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -3.3 (---)

> From: Ihor Radchenko <yantar92@HIDDEN>
> Cc: João Távora <joaotavora@HIDDEN>,
>  felician.nemeth@HIDDEN,
>  70036 <at> debbugs.gnu.org, theo@HIDDEN
> Date: Fri, 19 Apr 2024 07:51:35 +0000
> 
> Eli Zaretskii <eliz@HIDDEN> writes:
> 
> >> I still think the cleanest solution is to write file-truename
> >> in C.
> >
> > I explained in that past discussion why this is not simple.  So if
> > simpler solutions exist, we should prefer them.
> 
> There are some easy things that can be done to improve `file-truename'
> performance somewhat. For example, the number of calls to
> `file-name-nondirectory' can be trivially reduced in the `file-truename'
> code - it is called up to three times in a row.
> 
> (see my earlier message in https://yhetil.org/emacs-bugs/87jzlmd831.fsf@localhost/)
> 
> Will it be of interest?

Yes, of course.  Those kinds of changes are no-brainers, really.




Information forwarded to bug-gnu-emacs@HIDDEN:
bug#70036; Package emacs. Full text available.

Message received at 70036 <at> debbugs.gnu.org:


Received: (at 70036) by debbugs.gnu.org; 19 Apr 2024 09:23:06 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Fri Apr 19 05:23:06 2024
Received: from localhost ([127.0.0.1]:57833 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1rxkSX-0004OY-PW
	for submit <at> debbugs.gnu.org; Fri, 19 Apr 2024 05:23:06 -0400
Received: from mail-lj1-x236.google.com ([2a00:1450:4864:20::236]:56807)
 by debbugs.gnu.org with esmtp (Exim 4.84_2)
 (envelope-from <joaotavora@HIDDEN>) id 1rxkSU-0004N1-KM
 for 70036 <at> debbugs.gnu.org; Fri, 19 Apr 2024 05:23:03 -0400
Received: by mail-lj1-x236.google.com with SMTP id
 38308e7fff4ca-2dcbcfe117dso8714081fa.1
 for <70036 <at> debbugs.gnu.org>; Fri, 19 Apr 2024 02:22:48 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=gmail.com; s=20230601; t=1713518562; x=1714123362; darn=debbugs.gnu.org;
 h=content-transfer-encoding:cc:to:subject:message-id:date:from
 :in-reply-to:references:mime-version:from:to:cc:subject:date
 :message-id:reply-to;
 bh=Fp3DhlpGn9x+G30FJEziRCDq3AYM2pvONZSCVA88pWE=;
 b=KLqWQILSYe0S6vwbwDKlMx7Y3+L2wQgx407Zd6cWbcQg588he3E4ApmIQMGbNe9dUD
 vubDqW4G0YZ/BX5BjL32k2hMDcvON7/MqVPFvbPzEENU4kBe1yH69Do7SJvSXjQPLfCX
 aWoZ32cOAGI09LL813+PlonT4g6NDdbcd2568vCHCTFHpQjGAoyyBG1Tnv3+bGoteAcF
 nISVBwt3TmbWwe7tPYqZzkgMK6WJ1dEZETsnrvYqYr/8CV8rxUKtcl6WeBuSn37UOjaH
 94rKufSHzKW/XrRDjEQt3Byq+tX+TEi7HRoTk7eDKL41PsobScny8L7PTelNPjn7bdMX
 +svQ==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=1e100.net; s=20230601; t=1713518562; x=1714123362;
 h=content-transfer-encoding:cc:to:subject:message-id:date:from
 :in-reply-to:references:mime-version:x-gm-message-state:from:to:cc
 :subject:date:message-id:reply-to;
 bh=Fp3DhlpGn9x+G30FJEziRCDq3AYM2pvONZSCVA88pWE=;
 b=SlB0aXnz8pWKg0WbYuXxPHEnabAmytnlDoH/ct1UGZZVwKljXy9uPkIB6BUhRLWLyJ
 Oux23ScgAbnOP1YdkRj1PAWnbALeVEzDjZZvWjJV8oMjM91GhboSDh3A541YKRbTnLsE
 XVDJDjqW0ZceYD+yRaGi1WRZC7CHpPKJmgRnYAaSa9V1JrKx9S4q891oGMXpU/Te87fC
 SfjJNti3K60zo7cT/w3b1QofO8BigQnbFHFM5HbUjmyPIQZmDrbkV6ATKr7Bh8hE/A5J
 soJ8bqyHvUcSO/9ZKv2eWk84UhnmcN66fAkRNkKeH+jn4NOjn2ekqByDS70zGEdBqld+
 GA2Q==
X-Forwarded-Encrypted: i=1;
 AJvYcCUfRNW/98g90OwbZIKh/zIjxMClethPB7iJ9rLxSNBriaHDXf5sSBnSe9CRQU9xA/MoPth1cUsye1zy2kaPfsC3r29YExc=
X-Gm-Message-State: AOJu0YyxXbZ+Sr3fIavvZE2N0fVOMvudS7HsLEAbcMm8LzJJWsEPBSL7
 HcMQGK0udsyju5J4KB6LV4Ldq7cNQSBH691sB6jXiWrUIFrA+AFXbajXUTmy4ytVOma1MhkfzTm
 Dp8wvLvPfMmA6KW0YzcOiI53QGZY=
X-Google-Smtp-Source: AGHT+IHmVvlfuRJFE70QTsQ1bImwYqpVwfFdb/Tg2bZdA/iaCTeuU1Muh7QefSJH8hJZeWLSENNtxsLywe8iQnMWhv8=
X-Received: by 2002:a2e:a313:0:b0:2dc:e69a:fdbc with SMTP id
 l19-20020a2ea313000000b002dce69afdbcmr493599lje.1.1713518562279; Fri, 19 Apr
 2024 02:22:42 -0700 (PDT)
MIME-Version: 1.0
References: <CALDnm517N=DM+0tqBpHCGiHenPMirq2eFJF+Gk0ePO+W6WO-Ug@HIDDEN>
 <4e670617-6483-4159-a5cf-27a921764c38@HIDDEN>
 <CALDnm536w_khSks_rG-X-TH+hDiVddcmv=jaMHVQT_KgFh1xkA@HIDDEN>
 <CALDnm50A9aA6Eitis-NXiPRS4vYEB0obaX5zaCfARKSe5ZDFRA@HIDDEN>
 <87wmot289d.fsf@HIDDEN>
 <CALDnm51qPPFGHDsCqwAQGk6Q20R4ZsRWkHdxTfVDLWWi7BHkHA@HIDDEN>
 <87zftpn2fb.fsf@HIDDEN>
In-Reply-To: <87zftpn2fb.fsf@HIDDEN>
From: =?UTF-8?B?Sm/Do28gVMOhdm9yYQ==?= <joaotavora@HIDDEN>
Date: Fri, 19 Apr 2024 10:22:30 +0100
Message-ID: <CALDnm52TWxUP5jb=vC_pdsKaLgxjc1-iPmnDYyryrkvc9=5QYQ@HIDDEN>
Subject: Re: bug#70036 a fix that
To: Theodor Thornhill <theo@HIDDEN>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable
X-Spam-Score: 0.0 (/)
X-Debbugs-Envelope-To: 70036
Cc: Eli Zaretskii <eliz@HIDDEN>, 70036 <at> debbugs.gnu.org,
 felician.nemeth@HIDDEN
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -1.0 (-)

On Fri, Apr 19, 2024 at 10:10=E2=80=AFAM Theodor Thornhill <theo@thornhill.=
no> wrote:
>
> Jo=C3=A3o T=C3=A1vora <joaotavora@HIDDEN> writes:
>
> > On Fri, Apr 19, 2024 at 7:09=E2=80=AFAM Theodor Thornhill <theo@thornhi=
ll.no> wrote:
> > But that could be down to other reasons Theodor.  We would need data
> > for that server too.  Last time I tried jdtls (on a docker-based TRAMP
> > setup, described somewhere in the mailing list), it was snappy.
> >
> > If you make a simple recipe like this one I can absolutely
> > try though.  The difficulty in that one was TRAMP.
> >
>
> I can try, but these repros are hard, because it is hard to find an open
> source java project where I easily can construct similar scenarios. And
> also time.

Yes, it's hard, indeed.  But it's very valuable.  IOW, we shouldn't make
design decisions without gathering hard data and reproducible experiments,
like we did here.  There are lots and lots of litte factors so at least
two people reproducing the same results in a plausible agreed-upon scenario
(again, like we did here), is important.

Jo=C3=A3o




Information forwarded to bug-gnu-emacs@HIDDEN:
bug#70036; Package emacs. Full text available.

Message received at 70036 <at> debbugs.gnu.org:


Received: (at 70036) by debbugs.gnu.org; 19 Apr 2024 09:18:09 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Fri Apr 19 05:18:09 2024
Received: from localhost ([127.0.0.1]:57819 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1rxkNk-00042u-Mv
	for submit <at> debbugs.gnu.org; Fri, 19 Apr 2024 05:18:08 -0400
Received: from mout.gmx.net ([212.227.17.22]:51527)
 by debbugs.gnu.org with esmtp (Exim 4.84_2)
 (envelope-from <michael.albinus@HIDDEN>) id 1rxkNi-00042Q-CM
 for 70036 <at> debbugs.gnu.org; Fri, 19 Apr 2024 05:18:07 -0400
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmx.de;
 s=s31663417; t=1713518263; x=1714123063; i=michael.albinus@HIDDEN;
 bh=J5oSo+C7g00JNXY/FbQYPNj9ogMbq9grTP5arZLhpXI=;
 h=X-UI-Sender-Class:From:To:Cc:Subject:In-Reply-To:References:Date:
 Message-ID:MIME-Version:Content-Type:Content-Transfer-Encoding:cc:
 content-transfer-encoding:content-type:date:from:message-id:
 mime-version:reply-to:subject:to;
 b=NiTUflEDSdMM+D9upXO11d6554qlhkY0R9d4pXaeypIr94PG6TuJozmhHcUdQDBF
 W+QYeIfeP81kHhNdnqSZs9Fu8PuW/3SSsff5Eml9LMs2I2ncQ06W1q4Fds0z66+0E
 z3hCkhZDEPaK3vmtbT0DMpg+wXVSjOuAiXFBlF1kTSDRejs1u9lJunvZoOTYWHRWd
 xeTDr20snkogmIQL0GZhEl1XBmPAmhp3jg1B2IFH10VDcpF4hr70cxf8cehIL+IDF
 LQKZOBHTEORKFXEYGUmZ9qsLWOhE42+ppf0U9qh7NH9krphMH0E8PaKmZ3/LJUcLl
 i4tKG8a8p+tAmC71YA==
X-UI-Sender-Class: 724b4f7f-cbec-4199-ad4e-598c01a50d3a
Received: from gandalf.gmx.de ([185.89.39.16]) by mail.gmx.net (mrgmx105
 [212.227.17.168]) with ESMTPSA (Nemesis) id 1MQ5vc-1sJnUt28si-00M6yk; Fri, 19
 Apr 2024 11:17:43 +0200
From: Michael Albinus <michael.albinus@HIDDEN>
To: =?utf-8?B?Sm/Do28gVMOhdm9yYQ==?= <joaotavora@HIDDEN>
Subject: Re: bug#70036: a fix that
In-Reply-To: <CALDnm50kR_6TxusPNPNO3+zvNVZK0HPFMVxoGcECB1T0OyR7fw@HIDDEN>
 (=?utf-8?Q?=22Jo=C3=A3o_T=C3=A1vora=22's?= message of "Thu, 18 Apr 2024
 22:37:05 +0100")
References: <86y19ad61t.fsf@HIDDEN>
 <43de4151-ab68-4214-8691-33f3554feba1@HIDDEN>
 <CALDnm53J14dj1he+d8VF=ZB--XymExDkKL45XXAdVTb5VcDryw@HIDDEN>
 <86r0f2d46x.fsf@HIDDEN>
 <CALDnm50xhhcsFYqvFFUAQqRhPmqHtzo3dB5uyqQAygkW-y4EHg@HIDDEN>
 <86jzkud0be.fsf@HIDDEN>
 <CALDnm517N=DM+0tqBpHCGiHenPMirq2eFJF+Gk0ePO+W6WO-Ug@HIDDEN>
 <874jbycrd7.fsf@dick>
 <CALDnm51HWzo2+8ujwRqg_D78Qf42_5S24EjGDenjG+Duu7n6pg@HIDDEN>
 <CALDnm50kR_6TxusPNPNO3+zvNVZK0HPFMVxoGcECB1T0OyR7fw@HIDDEN>
Date: Fri, 19 Apr 2024 11:17:42 +0200
Message-ID: <871q7190eh.fsf@HIDDEN>
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-Provags-ID: V03:K1:peB4gFrg0mshvV2FlWOLjUm9RGVkA73lsSN4Hlu2qb/n2Yyyrku
 AG0gQRcYKtIHThN6CzZ89RDFkgioIUk7m6PJelwZZMJ9xFJhtbw8QbOkyqEXsbbb8Ma9K7r
 3/WBC7kjr2Hb9XKp85C+OJRiobj1cRW/OWs688CSk1GgJV9S7xQPVdTYGjKJgdmHLiqxiqM
 ewfVAgTBSnTWcP/RUnN/Q==
X-Spam-Flag: NO
UI-OutboundReport: notjunk:1;M01:P0:vGhKUiPDl/Q=;vJeB+ECL+Y/ofvl3RjRb5f7Au62
 ivtlB+5IReYVSPOf8vT8Jo6BpUsNWFYBbyvjOP00n5HPTVvZiHEh03TOUzDE527xO8BRxoH69
 Q++5UjdQN/XbZG+QJzRolGm1ZMexOnmdcv87dZP8rR+b7GXz9nIsZmwYSE/XSwq9T7yoC1vxC
 gUDo7g2xeffZPlTD7SPoPyHbZoRS4jtNmSCRTOlhlX0QJQr14kx4vtw6iLIA10Rln+P9asYXx
 /s5hpNz43mhfTrZSeDNRZbESJ3Seo6/2luCJUC4xSrNZ2010FI4AiX0nlhWl9P0EMew6+kpvP
 z9OALQ+Ei785IjL95yufrHVUx/7SKe7JLJ5OAFp2k1mtSHrj6tIm/OtS33wPCxhBwaYlO3Hrp
 7PgKsXPsna2O+UE9NUx0yX/S4lQEM8fUqZjXogGIxkBBADUD8IpTxpBkzt0tsTDoSh/ByBCGB
 oEAoRtzwTlumWfHsz1FkH+UYR6CD3MQmY6xsCOgW523TEhjpX6YbcuSlKE+RVpIyayZ2sWrat
 LaUKMNJLDv+Lmfmcvcov2e7kHaaq4pL0qcq4p+AZ6sD83cIUNq00SMp68krCJJktcBBfVQJu+
 yYqUVwS4fNn8XzhLy7WF8Ez07LN3UFslf+pUsyMkmjWRc8+aOAxtQUiWp1PrqBI2CwFOzQRPT
 D6Pk5gkKupM30Uf0IJtr8HKNjAJtv8WukRLgvNHM2tbd8TO0DDECgY4hQNBa73Zo5GDiQp1vl
 l0iE1bluyfApTjnZa7g26I5hfZ9AFTFmjZSuXTm8RWgGGfLH3EoiO0UteK4JT5oMxNbSUXw2m
 DwKaWtTZhawo2Jh48NoVjxVItyFsJcbpwNXaw8ms/Rd2M=
X-Spam-Score: -0.7 (/)
X-Debbugs-Envelope-To: 70036
Cc: felician.nemeth@HIDDEN, Eli Zaretskii <eliz@HIDDEN>,
 70036 <at> debbugs.gnu.org, theo@HIDDEN, dick <dick.r.chiang@HIDDEN>
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -1.7 (-)

Jo=C3=A3o T=C3=A1vora <joaotavora@HIDDEN> writes:

>> > Speaking of dicks, you are one, and your code is always dogshit, so yo=
ur
>> > much heralded leavetaking of the emacs project can't come soon enough.
>>
>> My dear dick, you on the other hand, are such a lovely wonderful human b=
eing
>> who writes such great code and is so courageous..  Thank you for
>> gracing me with
>> your attention.  Means a lot to me.  Love xoxo
>
> And I say this even without having the faintest idea of who you are,
> imagine if I did :-)

Oh, that's the person who is blacklisted on debbugs.gnu.org because of
sending offending messages.

> Jo=C3=A3o

Best regards, Michael.




Information forwarded to bug-gnu-emacs@HIDDEN:
bug#70036; Package emacs. Full text available.

Message received at 70036 <at> debbugs.gnu.org:


Received: (at 70036) by debbugs.gnu.org; 19 Apr 2024 09:14:32 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Fri Apr 19 05:14:32 2024
Received: from localhost ([127.0.0.1]:57810 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1rxkKF-0003m8-Aw
	for submit <at> debbugs.gnu.org; Fri, 19 Apr 2024 05:14:32 -0400
Received: from out-175.mta1.migadu.com ([95.215.58.175]:62994)
 by debbugs.gnu.org with esmtp (Exim 4.84_2)
 (envelope-from <theo@HIDDEN>) id 1rxkKC-0003lD-QW
 for 70036 <at> debbugs.gnu.org; Fri, 19 Apr 2024 05:14:29 -0400
X-Report-Abuse: Please report any abuse attempt to abuse@HIDDEN and
 include these headers.
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=thornhill.no;
 s=key1; t=1713518048;
 h=from:from:reply-to:subject:subject:date:date:message-id:message-id:
 to:to:cc:cc:mime-version:mime-version:content-type:content-type:
 content-transfer-encoding:content-transfer-encoding:
 in-reply-to:in-reply-to:references:references;
 bh=TuGnHVgeS/PTo1RYEp5yZYZvYl+WdtOdj6lp2MPyn/s=;
 b=kmWP5jOZDrE9zkTbrsHV1AcJwDMr4PrffrmNjIZYCOZvan1gamTMKn9pBNLVlvYbrNDBhI
 ahsa8lyyKB5Tz2PMfVh1/GOKRtZXAFbiDoomNqJvL4c9TNmXgGJtwLJ75QabMN9TRQvbb1
 L+VMsVeUqNr5FVy3EokcDUT83QxnwllUlY9MvYeekPcQfykWOhc2huzE4swgT8z9W9ablu
 by1Q75qoNQ0V5LSk/3hOOZzwI1afxUtrm54YHO8saEvSTHA7jvXt3GfkBqN1e43PkvjmCP
 qzNguqacGnlCZ+Six+iENoKSNS+sogWUMIdJlvxv5xQ99/VWrTWHi6w4p94TCQ==
From: Theodor Thornhill <theo@HIDDEN>
To: =?utf-8?B?Sm/Do28gVMOhdm9yYQ==?= <joaotavora@HIDDEN>
Subject: Re: bug#70036 a fix that
In-Reply-To: <CALDnm52=4L4Bg7VNGwEa6V72MNBgUxwJDoe45LBdiPkO2Dz3mw@HIDDEN>
References: <CALDnm517N=DM+0tqBpHCGiHenPMirq2eFJF+Gk0ePO+W6WO-Ug@HIDDEN>
 <4e670617-6483-4159-a5cf-27a921764c38@HIDDEN>
 <CALDnm536w_khSks_rG-X-TH+hDiVddcmv=jaMHVQT_KgFh1xkA@HIDDEN>
 <87zftp28ri.fsf@HIDDEN>
 <CALDnm52=4L4Bg7VNGwEa6V72MNBgUxwJDoe45LBdiPkO2Dz3mw@HIDDEN>
Date: Fri, 19 Apr 2024 11:14:05 +0200
Message-ID: <87wmotn28y.fsf@HIDDEN>
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable
X-Migadu-Flow: FLOW_OUT
X-Spam-Score: 0.0 (/)
X-Debbugs-Envelope-To: 70036
Cc: Eli Zaretskii <eliz@HIDDEN>, 70036 <at> debbugs.gnu.org,
 felician.nemeth@HIDDEN
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -1.0 (-)

Jo=C3=A3o T=C3=A1vora <joaotavora@HIDDEN> writes:

> On Fri, Apr 19, 2024 at 6:59=E2=80=AFAM Theodor Thornhill <theo@thornhill=
.no> wrote:
>
>> I agree - that's why I want to focus on improving the code, same as
>> you. I just want you to understand that being mindful on how you come
>> across can't really hurt.
>
> You're right of course.  I do try to be mindful, but maybe I made a mista=
ke.
> IIUC it was the part where I said this was a "one-off and uncommon" report
> that you felt was unkind and harsh.  Because you wrote that.  I absolutely
> think we miscommunicated: I wasn't trying to say you have a bizarre proje=
ct
> setup, I was simply trying to make a statement about statistics and
> the relative importance.
>

No worries. Water under the bridge.

>> There are enough conflicts around these days,
>
> In Emacs or in the world?  If the former I'd rather not know about
> them.
>

In the world.

>> let's not make code be one.
>
> Right.  So reverting another person's code isn't that big of a deal.
> You "reverted" bits of my code when doing your commits, and that's
> fine.
>
>> Yeah, that's right. I assume that when json serde disappeared as a
>> bottleneck others emerge. This is the obvious one to me right now.
>
> When my hotspot for a given reasonable profile is 4%, I'm feeling
> fairly good about my code.  But yes, of course, it can be addressed.
>

Yes, Eglot is pretty fast. Doesn't mean it can't improve, though :)

>> Sure. That will make the change you make similar in spirit to mine, yet
>> with a different implementation. I'm fine with that.
>
> With the difference that my change also still ultimately uses truename,
> just very frugally.  So it still understands symlinks, doesn't
> mislead the server and doesn't expose the bug I demonstrated.

Yep, I think we agree and have for some time. I wasn't really arguing
from your first mail, either.

Theo




Information forwarded to bug-gnu-emacs@HIDDEN:
bug#70036; Package emacs. Full text available.

Message received at 70036 <at> debbugs.gnu.org:


Received: (at 70036) by debbugs.gnu.org; 19 Apr 2024 09:10:46 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Fri Apr 19 05:10:46 2024
Received: from localhost ([127.0.0.1]:57805 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1rxkGZ-0003OH-I4
	for submit <at> debbugs.gnu.org; Fri, 19 Apr 2024 05:10:45 -0400
Received: from out-179.mta1.migadu.com ([2001:41d0:203:375::b3]:27146)
 by debbugs.gnu.org with esmtp (Exim 4.84_2)
 (envelope-from <theo@HIDDEN>) id 1rxkGX-0003NI-PY
 for 70036 <at> debbugs.gnu.org; Fri, 19 Apr 2024 05:10:42 -0400
X-Report-Abuse: Please report any abuse attempt to abuse@HIDDEN and
 include these headers.
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=thornhill.no;
 s=key1; t=1713517820;
 h=from:from:reply-to:subject:subject:date:date:message-id:message-id:
 to:to:cc:cc:mime-version:mime-version:content-type:content-type:
 content-transfer-encoding:content-transfer-encoding:
 in-reply-to:in-reply-to:references:references;
 bh=DSdEk5U3dmn7ZoTOP61u6S3q318NCDXJAGuBIOAXZrc=;
 b=0k2KJgc8u+bdG1l7TRsIZMQZ/zJhMgo/sdw8wsKkWXdiC6HR+rUd4zW7AjKFGBa7vvFXGr
 kyigMT37lFwq86nRd/NrGjd4srgG4JcbKYY3QPR9mcr5pK0WHGwTJ+XjtvqVNt19WFvaEw
 gjsEYqp+vAJwhzT03iftIAWBHTjhhkeBQ5ReI/m8OQNPe7hlSsbUkczgWzHbVCEo33Qf4E
 JFVh+EZGvz/2uQax9R6FwdJO5ZlZU43xMf0/x98/jJvhZ+UNTkqKEIixISdTkfb6c9Cjfb
 ZOznvnHkIKFPtPeRwu8o55EyBcG7+MTm3uCxsfwb+3r1seLXKU9Clikxg/Dqmg==
From: Theodor Thornhill <theo@HIDDEN>
To: =?utf-8?B?Sm/Do28gVMOhdm9yYQ==?= <joaotavora@HIDDEN>
Subject: Re: bug#70036 a fix that
In-Reply-To: <CALDnm51qPPFGHDsCqwAQGk6Q20R4ZsRWkHdxTfVDLWWi7BHkHA@HIDDEN>
References: <CALDnm517N=DM+0tqBpHCGiHenPMirq2eFJF+Gk0ePO+W6WO-Ug@HIDDEN>
 <4e670617-6483-4159-a5cf-27a921764c38@HIDDEN>
 <CALDnm536w_khSks_rG-X-TH+hDiVddcmv=jaMHVQT_KgFh1xkA@HIDDEN>
 <CALDnm50A9aA6Eitis-NXiPRS4vYEB0obaX5zaCfARKSe5ZDFRA@HIDDEN>
 <87wmot289d.fsf@HIDDEN>
 <CALDnm51qPPFGHDsCqwAQGk6Q20R4ZsRWkHdxTfVDLWWi7BHkHA@HIDDEN>
Date: Fri, 19 Apr 2024 11:10:16 +0200
Message-ID: <87zftpn2fb.fsf@HIDDEN>
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable
X-Migadu-Flow: FLOW_OUT
X-Spam-Score: 0.0 (/)
X-Debbugs-Envelope-To: 70036
Cc: Eli Zaretskii <eliz@HIDDEN>, 70036 <at> debbugs.gnu.org,
 felician.nemeth@HIDDEN
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -1.0 (-)

Jo=C3=A3o T=C3=A1vora <joaotavora@HIDDEN> writes:

> On Fri, Apr 19, 2024 at 7:09=E2=80=AFAM Theodor Thornhill <theo@thornhill=
.no> wrote:
>
>> you've also noted earlier. I have an even stronger computer, a 2023 P1
>> gen 5, I believe, running ubuntu. Some servers send _all_ diagnostics on
>> every keystroke.
>
> That could be, but what servers are these?
>
> Thought it would never be "on every keystroke" though.  As you probably
> know, Eglot bunches them up in didChange notifications, and you can
> can even be the size of these bunches.
>

Absolutely, it could be. But with these latest changes the felt lag is
gone.

>> > So my perception is that it must have spent around 4% of 1 second in
>> > file-truename.
>> >
>> > Anyway the reason this shows in this profile is because this project
>> > with this particular server sends a lot of publishDiagnostics upfront.
>> > That's OK.  Gopls is a very good server.  I think I see a fix.  But can
>> > you qualitatively describe the Eglot experience.  Do you notice any
>> > input lag or something like that? With this project?  I didn't feel _a=
ny_
>> > lag.
>> > Super snappy.  Maybe the JSON serde kicking in?
>> >
>>
>> In this particular project I don't notice any input lag. But on every
>> java project at work I absolutely do.
>
> But that could be down to other reasons Theodor.  We would need data
> for that server too.  Last time I tried jdtls (on a docker-based TRAMP
> setup, described somewhere in the mailing list), it was snappy.
>
> If you make a simple recipe like this one I can absolutely
> try though.  The difficulty in that one was TRAMP.
>

I can try, but these repros are hard, because it is hard to find an open
source java project where I easily can construct similar scenarios. And
also time.

>
>> > Anyway, the idea I suggested earlier is in the patch after  my sig.
>> >
>> > Let's think:  LSP's publishDiagnostics coming from the server deals
>> > in URIs, right?  And we inform the LSP server about URIs, too, right?
>> > So the URI is always LSP's idea of the resource identifier (and it lik=
es
>> > to have truename URI).
>>
>> Sure, like in my key/value store. (apart from symlinking)
>
> The other difference is it uses buffer-local variables as the
> natural "per-buffer" storage method.
>

Yes, sure. Not arguing there. Just noticing that what we're doing here
isn't too different.

>> Could we rather use eglot--managed-buffers, like in my patch? there
>> shouldn't be a need to loop through say 200 buffers that are unrelated
>> to the project in question, right? Apart from this I agree, and will try
>> it.
>
> Of course, that's a good improvement.
>
> Jo=C3=A3o

:thumbsup:

Theo




Information forwarded to bug-gnu-emacs@HIDDEN:
bug#70036; Package emacs. Full text available.

Message received at 70036 <at> debbugs.gnu.org:


Received: (at 70036) by debbugs.gnu.org; 19 Apr 2024 09:06:13 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Fri Apr 19 05:06:13 2024
Received: from localhost ([127.0.0.1]:57794 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1rxkCB-0002s5-Ui
	for submit <at> debbugs.gnu.org; Fri, 19 Apr 2024 05:06:13 -0400
Received: from out-171.mta0.migadu.com ([91.218.175.171]:57459)
 by debbugs.gnu.org with esmtp (Exim 4.84_2)
 (envelope-from <theo@HIDDEN>) id 1rxkCA-0002qT-4o
 for 70036 <at> debbugs.gnu.org; Fri, 19 Apr 2024 05:06:10 -0400
X-Report-Abuse: Please report any abuse attempt to abuse@HIDDEN and
 include these headers.
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=thornhill.no;
 s=key1; t=1713517549;
 h=from:from:reply-to:subject:subject:date:date:message-id:message-id:
 to:to:cc:cc:mime-version:mime-version:content-type:content-type:
 content-transfer-encoding:content-transfer-encoding:
 in-reply-to:in-reply-to:references:references;
 bh=NvzKE+2vAlJ0lqHG7hIQprFKlTU4+z/ys7Rbm1fD3b0=;
 b=mvdc5s3KcpI2PZIjwFsdH2ntNEIT2nWGT5jo/DlUqO6nyIo4HJOyNSDovNhVFJ4yprDX0B
 gIDcbuc84MMixcsq40U2zNwbwXUxl9FuMcFmSwLOoYHPfedwVkSdefl0AlpqVDt7sI5xkX
 3/RvFpi0LC3eg6t7v7o23nIE5tTj2EqvIKTGvuJQhb/RXN2/tJ0ppCrYH84MH3FXVpij1h
 fUR/+pmYf1W1gL8aUno3IaKdXnE2bWNBmaeHKjoiQL+GQtCKQxbNrAAh0QM/ENNKcolcBJ
 zIjgkp3dgH8YJKJTEJc15LylGVrqY1hq+1gbgjOyd0DJMKQRkjeSOV0acGsptg==
From: Theodor Thornhill <theo@HIDDEN>
To: =?utf-8?B?Sm/Do28gVMOhdm9yYQ==?= <joaotavora@HIDDEN>
Subject: Re: bug#70036 a fix that
In-Reply-To: <CALDnm52Z+ijxSB8dBNXXsmpRCqHGPJMY2UROsOWA=_=OtoqJng@HIDDEN>
References: <CALDnm517N=DM+0tqBpHCGiHenPMirq2eFJF+Gk0ePO+W6WO-Ug@HIDDEN>
 <4e670617-6483-4159-a5cf-27a921764c38@HIDDEN>
 <CALDnm536w_khSks_rG-X-TH+hDiVddcmv=jaMHVQT_KgFh1xkA@HIDDEN>
 <CALDnm50A9aA6Eitis-NXiPRS4vYEB0obaX5zaCfARKSe5ZDFRA@HIDDEN>
 <87wmot289d.fsf@HIDDEN> <87sezh27gy.fsf@HIDDEN>
 <CALDnm52Z+ijxSB8dBNXXsmpRCqHGPJMY2UROsOWA=_=OtoqJng@HIDDEN>
Date: Fri, 19 Apr 2024 11:05:45 +0200
Message-ID: <8734rhoh7a.fsf@HIDDEN>
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable
X-Migadu-Flow: FLOW_OUT
X-Spam-Score: 0.0 (/)
X-Debbugs-Envelope-To: 70036
Cc: Eli Zaretskii <eliz@HIDDEN>, 70036 <at> debbugs.gnu.org,
 felician.nemeth@HIDDEN
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -1.0 (-)

Jo=C3=A3o T=C3=A1vora <joaotavora@HIDDEN> writes:

> On Fri, Apr 19, 2024 at 7:26=E2=80=AFAM Theodor Thornhill <theo@thornhill=
.no> wrote:
>
>> Like this?
>>
>> I can confirm with yours and this patch the latency is down again, so
>> thanks.
>
> I'm very happy it works!
>
>> I'll test a little the difference with/without eglot--managed-buffers.
>
> Yes, do that change, and if you want (_if_ you want) you can clean up
> the patch, add some in-code comments explaining the matter, replace
> cl-loop with your preferred thing, rename the slightly cryptic
> eglot--cached-tdi, maybe set it more explicitly on in eglot--signal-didOp=
en.
> And maybe write a test for the symlink situation, perhaps using my
> small experiment, so that it becomes less likely to be broken again
> in the future.
>
> Jo=C3=A3o

Sure, will do!




Information forwarded to bug-gnu-emacs@HIDDEN:
bug#70036; Package emacs. Full text available.

Message received at 70036 <at> debbugs.gnu.org:


Received: (at 70036) by debbugs.gnu.org; 19 Apr 2024 08:50:16 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Fri Apr 19 04:50:16 2024
Received: from localhost ([127.0.0.1]:57778 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1rxjwk-0001Rj-GA
	for submit <at> debbugs.gnu.org; Fri, 19 Apr 2024 04:50:15 -0400
Received: from mail-lj1-x22e.google.com ([2a00:1450:4864:20::22e]:46312)
 by debbugs.gnu.org with esmtp (Exim 4.84_2)
 (envelope-from <joaotavora@HIDDEN>) id 1rxjwg-0001Q9-7T
 for 70036 <at> debbugs.gnu.org; Fri, 19 Apr 2024 04:50:12 -0400
Received: by mail-lj1-x22e.google.com with SMTP id
 38308e7fff4ca-2d858501412so24012221fa.0
 for <70036 <at> debbugs.gnu.org>; Fri, 19 Apr 2024 01:49:56 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=gmail.com; s=20230601; t=1713516590; x=1714121390; darn=debbugs.gnu.org;
 h=content-transfer-encoding:cc:to:subject:message-id:date:from
 :in-reply-to:references:mime-version:from:to:cc:subject:date
 :message-id:reply-to;
 bh=aMWxcOnjgt19QX87oXHxPEaCZN+THrwa/93xN2gH2PY=;
 b=GVuzM9xubUjZagLlymFvxsff3JvTWSeZnsHFi21eUFp8cYIRf7LTYJaV1A3Zowk3/p
 6tPLpFKFuocRiupmIUwYtSPnf6P6d9BA2/KKuxpeE0VGs9DU5svIIcDRyQiHuj8wjI3i
 pz8lfHhoha5R+wYDeUp/C4bWmW47HZevjP9SKRWmtdQGf7U9wwDIETYa7jfJe774yn5D
 BVf/zTDF1HNqe2EdIT+JJjTYy2pKrQ2CUH9WkaJlEhmnZYhd7X2EipJnf79KFnO8bJF2
 8HaODa3URhTWWxvOE9qfxR1DvtyvEDMrUqUAkqNq232rx+Y5PSn5mXaDoEDDYswdr/aq
 /PuQ==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=1e100.net; s=20230601; t=1713516590; x=1714121390;
 h=content-transfer-encoding:cc:to:subject:message-id:date:from
 :in-reply-to:references:mime-version:x-gm-message-state:from:to:cc
 :subject:date:message-id:reply-to;
 bh=aMWxcOnjgt19QX87oXHxPEaCZN+THrwa/93xN2gH2PY=;
 b=ZPt2PjaNMHu56grgQ04drNh+zT4A5Mie8P3VZvezhI1hYUP22z+HpwPKl8WJtSaODq
 vv68KPWbSejtjNZIAalhJQfZnFDPyp0knlRxEtYEtREWv7SZbWXjCoyIebekf/DxTpBm
 3zjk483dqmVDW8YnmmcQS9jNj2Vc/FMXp9AjFp1ifwwtMZfxckxpV8OfH4detc2had7K
 2nKUlwr8uwwYYwfl21DtzYDE2H+tq0QHLgl9rEsYjuFnQgoRViqYgNR3B3YZPxFA69g5
 ztLH14fSW3naEo8dA3oMgw3L7LhnQhl+tjClwT2CfgR8EgnV9/w9NChaXUmkARmm2uWx
 LIUQ==
X-Forwarded-Encrypted: i=1;
 AJvYcCU5NCEWzQKwwsosoRPLVrVboA39yy02lTO9aNKxHGhADKvoKxAKgSB3eBJOsUByo27mwn3fRoDkORM8/K73muPQ9ciOC/s=
X-Gm-Message-State: AOJu0Yx9YixqvFzs1QU/FN8bm+pcjcRHYHBXrqhXS9cqTYcJxsRWvofh
 sKJ19iLtwhuiLyGsiqqZyhWZbj0gTOEX0S9gbrBMjkKebr1HxqCcLuIqvXHZzkuwknK8zkPtl9+
 jQ+B19abPbxSicHwpqkoMfFxPPo8=
X-Google-Smtp-Source: AGHT+IEkfG5tlMTChi3CTi7UZVBlJMR1jGcxEXi0bFtDJDWGyBPJJkZqHBKL9BQUyXpRaJKKkMthnbSdu6C3odf838s=
X-Received: by 2002:a2e:8015:0:b0:2d8:9d8c:9533 with SMTP id
 j21-20020a2e8015000000b002d89d8c9533mr776329ljg.53.1713516590155; Fri, 19 Apr
 2024 01:49:50 -0700 (PDT)
MIME-Version: 1.0
References: <CALDnm517N=DM+0tqBpHCGiHenPMirq2eFJF+Gk0ePO+W6WO-Ug@HIDDEN>
 <4e670617-6483-4159-a5cf-27a921764c38@HIDDEN>
 <CALDnm536w_khSks_rG-X-TH+hDiVddcmv=jaMHVQT_KgFh1xkA@HIDDEN>
 <864jbxden1.fsf@HIDDEN>
 <CALDnm50V6pqeXivS8ZoOh4LBMHX7_9=68Zi1im5U36Djmf9gQQ@HIDDEN>
In-Reply-To: <CALDnm50V6pqeXivS8ZoOh4LBMHX7_9=68Zi1im5U36Djmf9gQQ@HIDDEN>
From: =?UTF-8?B?Sm/Do28gVMOhdm9yYQ==?= <joaotavora@HIDDEN>
Date: Fri, 19 Apr 2024 09:49:38 +0100
Message-ID: <CALDnm52rM4Q1UKoyhh8nekZuV4SYSX1=MKzuBoysSXHNvQBoRg@HIDDEN>
Subject: Re: bug#70036 a fix that
To: Eli Zaretskii <eliz@HIDDEN>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable
X-Spam-Score: 0.0 (/)
X-Debbugs-Envelope-To: 70036
Cc: felician.nemeth@HIDDEN, 70036 <at> debbugs.gnu.org, theo@HIDDEN
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -1.0 (-)

On Fri, Apr 19, 2024 at 9:27=E2=80=AFAM Jo=C3=A3o T=C3=A1vora <joaotavora@g=
mail.com> wrote:

> > It's only now, that we decided symlinks _should_ be resolved by Emacs,
>
> I _think_, but can't be 100% sure, that I explicitly decided that 6 years
> ago, I just didn't document it  explicitly beyond typing in "file-truenam=
e".
> Git archeology brings me to a commit in 2018 where I was reorganizing
> code, and file-truename was already there.  I definitely knew about
> expand-file-name in 2018 though.

The fact that I chose find-buffer-visiting over get-file-buffer around
the same time is another hint...




Information forwarded to bug-gnu-emacs@HIDDEN:
bug#70036; Package emacs. Full text available.

Message received at 70036 <at> debbugs.gnu.org:


Received: (at 70036) by debbugs.gnu.org; 19 Apr 2024 08:28:10 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Fri Apr 19 04:28:09 2024
Received: from localhost ([127.0.0.1]:57697 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1rxjbM-0007Ya-CY
	for submit <at> debbugs.gnu.org; Fri, 19 Apr 2024 04:28:09 -0400
Received: from mail-lj1-x22e.google.com ([2a00:1450:4864:20::22e]:53468)
 by debbugs.gnu.org with esmtp (Exim 4.84_2)
 (envelope-from <joaotavora@HIDDEN>) id 1rxjbI-0007X5-4C
 for 70036 <at> debbugs.gnu.org; Fri, 19 Apr 2024 04:28:06 -0400
Received: by mail-lj1-x22e.google.com with SMTP id
 38308e7fff4ca-2db2f6cb312so32455361fa.2
 for <70036 <at> debbugs.gnu.org>; Fri, 19 Apr 2024 01:27:49 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=gmail.com; s=20230601; t=1713515264; x=1714120064; darn=debbugs.gnu.org;
 h=content-transfer-encoding:cc:to:subject:message-id:date:from
 :in-reply-to:references:mime-version:from:to:cc:subject:date
 :message-id:reply-to;
 bh=YINAPaYsBLlfJAgAO40o/47EmTZ6oVxA8eB/eelJt+s=;
 b=A+mLPz0G7ju890ExwRh6EEaAMtzcfZYzFo6Z6hHVBAgQ7xUrFuRRECotykF8hGF26p
 9znbPxxwnD+wDx1wS7iDzvxSxPR0KDsp1LuimnPSJNwcwnEJVllk+2BYQGEW6CmU1/aQ
 AwLVs4oRMdrtkbbGjfNn3Ya7KqUtgc2HF8hYiCmb392KZec5joAoIwi8DEDyv9esTi5a
 PxyRWeOFDkmjIghYtTDu7lDYmmcsTYftuE7zartpBSQS9aTwKarG7jL9p4Czsl71kJTD
 Q3vWydIaR5bbFj0XTx0Q/IQT5ScVNAiDc45eyxIE22wvv+Y7YqQnzsBjUPD8T7Wzonc9
 948g==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=1e100.net; s=20230601; t=1713515264; x=1714120064;
 h=content-transfer-encoding:cc:to:subject:message-id:date:from
 :in-reply-to:references:mime-version:x-gm-message-state:from:to:cc
 :subject:date:message-id:reply-to;
 bh=YINAPaYsBLlfJAgAO40o/47EmTZ6oVxA8eB/eelJt+s=;
 b=GpnNCJzqkOTN2BfvKDohJGVdGG4GcherYAeIXWOSxSTneTbMeWb0i20jqI52hnUio8
 edvrXyZAeVzzDz28rN7tVdxnWdQzDy795KsmOWoHe0OTlB3SrgoiMa6Kte3TNDKuQeMA
 E3AwLi2BBTf8/zVPeRwOgYhth1VsTahGI08DnVon7bh2FcbmHFSuf41egHiIYqsWRVsy
 nYgPJK9GKekeZVIxPKGyWRDelA9eROhM3zBozvw3tBMEPgvIi6wBB1/WTCR0p5OKIb4T
 XQUEYdwNJ4Xeo67V+y2GyhPUdxVnRpokyG3Dz19iqt9eiOlcLgAAcMldQsgGOLC6oJ6R
 0rsg==
X-Forwarded-Encrypted: i=1;
 AJvYcCX3m54idRqgTiyet79qnVgwLdyx+s2em2V8La7omJ1hJofSW1/lP/I2Q6DGGfYVexg8g7H3WOjsmyVTnhPPwq2kmOYQZP0=
X-Gm-Message-State: AOJu0YwjyY+M5GfoAqBLgBDOplkz7lOuoLYaPI72xz18LptZVd8vM5hh
 3sTKUHsb+Ule3Nz3RAugO7PfDw1xWhQHA4vKvqMKtX+74+qY0UCtQn7SAQTTB+IRJFrleH4HHk6
 buezA+mWK847SpKn3khpUvplppg0=
X-Google-Smtp-Source: AGHT+IFZaoxMKLHTGbnrSnJKktqXGMfilghP77jHARgv5lZuY1fnLvjV+iAOhCbUM9fIRuMD9Ui3Xoziy4C3+zHcLz4=
X-Received: by 2002:a2e:aa13:0:b0:2d8:bda5:c5f5 with SMTP id
 bf19-20020a2eaa13000000b002d8bda5c5f5mr1051450ljb.35.1713515263773; Fri, 19
 Apr 2024 01:27:43 -0700 (PDT)
MIME-Version: 1.0
References: <CALDnm517N=DM+0tqBpHCGiHenPMirq2eFJF+Gk0ePO+W6WO-Ug@HIDDEN>
 <4e670617-6483-4159-a5cf-27a921764c38@HIDDEN>
 <CALDnm536w_khSks_rG-X-TH+hDiVddcmv=jaMHVQT_KgFh1xkA@HIDDEN>
 <864jbxden1.fsf@HIDDEN>
In-Reply-To: <864jbxden1.fsf@HIDDEN>
From: =?UTF-8?B?Sm/Do28gVMOhdm9yYQ==?= <joaotavora@HIDDEN>
Date: Fri, 19 Apr 2024 09:27:31 +0100
Message-ID: <CALDnm50V6pqeXivS8ZoOh4LBMHX7_9=68Zi1im5U36Djmf9gQQ@HIDDEN>
Subject: Re: bug#70036 a fix that
To: Eli Zaretskii <eliz@HIDDEN>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable
X-Spam-Score: 0.0 (/)
X-Debbugs-Envelope-To: 70036
Cc: felician.nemeth@HIDDEN, 70036 <at> debbugs.gnu.org, theo@HIDDEN
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -1.0 (-)

On Fri, Apr 19, 2024 at 7:56=E2=80=AFAM Eli Zaretskii <eliz@HIDDEN> wrote:

> > Maybe _I_ missed something.  But I see you have now sent a perfect
> > reproduction, so it doesn't matter.
>
> There was no need to have any profiles to demonstrate that
> file-truename is significantly slower than expand-file-name.

Of course.  And there wasn't any need for profiles OR benchmark
to understand that file-truename and expand-file-name do different
things, so comparing one to the other when that difference in behavior
is crucial for the caller is very similar to comparing apple and
oranges.

> It's only now, that we decided symlinks _should_ be resolved by Emacs,

I _think_, but can't be 100% sure, that I explicitly decided that 6 years
ago, I just didn't document it  explicitly beyond typing in "file-truename"=
.
Git archeology brings me to a commit in 2018 where I was reorganizing
code, and file-truename was already there.  I definitely knew about
expand-file-name in 2018 though.

> > I still think the cleanest solution is to write file-truename
> > in C.
>
> I explained in that past discussion why this is not simple.  So if
> simpler solutions exist, we should prefer them.

Fair enough.  Shifting complexity around is what we do.  But
having a performant file-truename is a strategically investment, it's
a very common filesystem primitive that users expect to be as fast
as it can be made.  Common Lisp has TRUENAME, Python has 'realpath()',
etc.   We could compare (here benchmarks are definitely the best
method)

> > But if that can't be done, it doesn't seem terribly hard
> > to get rid of find-buffer-visiting in publishDiagnostics and
> > still remain symlink-correct.
>
> find-buffer-visiting was made much faster lately, but that speedup
> AFAIR shows up only if the session has a lot of buffers, so trying
> these benchmarks in "emacs -Q" will not typically show the effect, and
> could even obscure the file-truename effect as well, because the
> number of calls to file-truename will be much smaller.

I'm not sure what test you are suggesting.  If f-b-v performs _better_
in "lots of buffers" situation, then we should measure Eglot's performance
in the plausible _worse_ case of few buffers, no?  And that's what
Theo proposed.  And in the possible but not exactly super-common case
where  you have an extreme 15-long directory chain, find-buffer-visiting
was observed to weigh in at 4%, all because of its file-truename call.

> But if calling
> find-buffer-visiting from Eglot can be avoided, that is of course even
> better.

Yes, that's what my latest patch does.  But ideally it would be cleaner
(IMHO) to have a fast usable find-buffer-visiting by speeding
up its underlying file-truename.

Jo=C3=A3o




Information forwarded to bug-gnu-emacs@HIDDEN:
bug#70036; Package emacs. Full text available.

Message received at 70036 <at> debbugs.gnu.org:


Received: (at 70036) by debbugs.gnu.org; 19 Apr 2024 08:07:15 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Fri Apr 19 04:07:15 2024
Received: from localhost ([127.0.0.1]:57567 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1rxjH8-0005Ev-Pn
	for submit <at> debbugs.gnu.org; Fri, 19 Apr 2024 04:07:15 -0400
Received: from mail-lj1-x234.google.com ([2a00:1450:4864:20::234]:48420)
 by debbugs.gnu.org with esmtp (Exim 4.84_2)
 (envelope-from <joaotavora@HIDDEN>) id 1rxjH7-0005En-FM
 for 70036 <at> debbugs.gnu.org; Fri, 19 Apr 2024 04:07:14 -0400
Received: by mail-lj1-x234.google.com with SMTP id
 38308e7fff4ca-2d8a24f8a3cso20948311fa.1
 for <70036 <at> debbugs.gnu.org>; Fri, 19 Apr 2024 01:06:59 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=gmail.com; s=20230601; t=1713514013; x=1714118813; darn=debbugs.gnu.org;
 h=content-transfer-encoding:cc:to:subject:message-id:date:from
 :in-reply-to:references:mime-version:from:to:cc:subject:date
 :message-id:reply-to;
 bh=t/DrjgaORh/1ECvDIu5UiMrFpG2EXSxY/sBg0a7hzdo=;
 b=PA6sGmx/8q88/Mu3kQoX2oNIjXyDxVdI7SykM9XWB6zUjgHD473ZVFobmfNN0oo5l3
 goL/qQOQvy1RyW8mvlmykn6g78HpMyRRXDZ+3PapoGMvmy4PACWjBO5v6J3z4agXzLEF
 QOg42iSvAxXYbkBt3xU0aX9WMgCeyfTxcgaulUJnHqpnsAiPr2zXIpffiN9IirK49XbQ
 MEhor8wJhR4xIZzIQbgzwSYP2X9anm/TijwEUAMIJsUGWjUICVfLD0gsBSEMqo1UQcXD
 sXFMRVTJbJft2gK/Hf6qT+TW5V69WIyGfnvl2oMb4SonNCCF0t9UKn/comJz6gMkEwkE
 gatw==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=1e100.net; s=20230601; t=1713514013; x=1714118813;
 h=content-transfer-encoding:cc:to:subject:message-id:date:from
 :in-reply-to:references:mime-version:x-gm-message-state:from:to:cc
 :subject:date:message-id:reply-to;
 bh=t/DrjgaORh/1ECvDIu5UiMrFpG2EXSxY/sBg0a7hzdo=;
 b=ZbejF0GmL7GCQ9+Y5geHTRAtan8Lq24n9ddQoIvrgMtUNIw7YG+kE6bSZIzbbrIFBh
 cs7bUODOXQvexLGG6fYgtiidgcg9aOOZ0ZHtICCnSISGBXL+9us1ZIM1N73pqpkDzgD1
 Z0DWv9psiI1RWb+mtnSPa0bJjjC+W6n6KhFcVMsVieL13+V/7jmnyweVblxIJzacMRpk
 gfFvhx6YZM9w37Fd5FNnZzqTYctnYgnQfJJQ5qLlAttfQ3mZOXKcw/RRl4oaiBbFILs8
 9Ems3MW0+3dUUiMCriZ/4Emx0o2/osovOlJwmwj2zV+hY1y0UsLKA7y9hZQwKJxWgPVi
 n6Xw==
X-Forwarded-Encrypted: i=1;
 AJvYcCUS4qA2JKbioQGr56+7sXd13gjq1pCJVYI7Nef+ceQA4n9GfgqsqCFneLmXj5k1o5H5qL4TnWBGfPuLoPXohQLAF0Vwt1Q=
X-Gm-Message-State: AOJu0YyCPn7h4Cm7FuYBrROp4dwAXUGRsiNSQjsmQe8Fm0FuNyJyuu/C
 jdD/5juFYThExP4Mw8z674OMQZG+ROodHDe4xMbvruHYK+1rc7mc9KNaggOEYNpN5DQmf4aOqqG
 Wdjk9of2p8tOnWOhO/kOHMJz1N9Gjxw==
X-Google-Smtp-Source: AGHT+IE/HS/cq87Grp1R0DQTtEOWVBbF9g84T/oK/vAg8zeoKqORh94b6Obyn/JoajP3nPxWQaiJGmwP08w4k89xlMI=
X-Received: by 2002:a2e:a684:0:b0:2d8:5cc7:fa97 with SMTP id
 q4-20020a2ea684000000b002d85cc7fa97mr678932lje.26.1713514013351; Fri, 19 Apr
 2024 01:06:53 -0700 (PDT)
MIME-Version: 1.0
References: <CALDnm517N=DM+0tqBpHCGiHenPMirq2eFJF+Gk0ePO+W6WO-Ug@HIDDEN>
 <4e670617-6483-4159-a5cf-27a921764c38@HIDDEN>
 <CALDnm536w_khSks_rG-X-TH+hDiVddcmv=jaMHVQT_KgFh1xkA@HIDDEN>
 <CALDnm50A9aA6Eitis-NXiPRS4vYEB0obaX5zaCfARKSe5ZDFRA@HIDDEN>
 <87wmot289d.fsf@HIDDEN> <87sezh27gy.fsf@HIDDEN>
In-Reply-To: <87sezh27gy.fsf@HIDDEN>
From: =?UTF-8?B?Sm/Do28gVMOhdm9yYQ==?= <joaotavora@HIDDEN>
Date: Fri, 19 Apr 2024 09:06:41 +0100
Message-ID: <CALDnm52Z+ijxSB8dBNXXsmpRCqHGPJMY2UROsOWA=_=OtoqJng@HIDDEN>
Subject: Re: bug#70036 a fix that
To: Theodor Thornhill <theo@HIDDEN>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable
X-Spam-Score: 0.0 (/)
X-Debbugs-Envelope-To: 70036
Cc: Eli Zaretskii <eliz@HIDDEN>, 70036 <at> debbugs.gnu.org,
 felician.nemeth@HIDDEN
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -1.0 (-)

On Fri, Apr 19, 2024 at 7:26=E2=80=AFAM Theodor Thornhill <theo@HIDDEN=
o> wrote:

> Like this?
>
> I can confirm with yours and this patch the latency is down again, so
> thanks.

I'm very happy it works!

> I'll test a little the difference with/without eglot--managed-buffers.

Yes, do that change, and if you want (_if_ you want) you can clean up
the patch, add some in-code comments explaining the matter, replace
cl-loop with your preferred thing, rename the slightly cryptic
eglot--cached-tdi, maybe set it more explicitly on in eglot--signal-didOpen=
.
And maybe write a test for the symlink situation, perhaps using my
small experiment, so that it becomes less likely to be broken again
in the future.

Jo=C3=A3o




Information forwarded to bug-gnu-emacs@HIDDEN:
bug#70036; Package emacs. Full text available.

Message received at 70036 <at> debbugs.gnu.org:


Received: (at 70036) by debbugs.gnu.org; 19 Apr 2024 08:02:02 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Fri Apr 19 04:02:02 2024
Received: from localhost ([127.0.0.1]:57534 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1rxjC6-0004jj-6F
	for submit <at> debbugs.gnu.org; Fri, 19 Apr 2024 04:02:02 -0400
Received: from mail-lf1-x132.google.com ([2a00:1450:4864:20::132]:59438)
 by debbugs.gnu.org with esmtp (Exim 4.84_2)
 (envelope-from <joaotavora@HIDDEN>) id 1rxjC3-0004hy-24
 for 70036 <at> debbugs.gnu.org; Fri, 19 Apr 2024 04:02:00 -0400
Received: by mail-lf1-x132.google.com with SMTP id
 2adb3069b0e04-51acb95b892so146477e87.2
 for <70036 <at> debbugs.gnu.org>; Fri, 19 Apr 2024 01:01:44 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=gmail.com; s=20230601; t=1713513699; x=1714118499; darn=debbugs.gnu.org;
 h=content-transfer-encoding:cc:to:subject:message-id:date:from
 :in-reply-to:references:mime-version:from:to:cc:subject:date
 :message-id:reply-to;
 bh=bKEYVZrIzc6RGHnW5bqODhNkm3v/gDkKcqRl3NGQgKo=;
 b=QkXBeH2vTC89F/E7sguUY1JqgcpBNBOUHvH/Ddq9A5lv6N1+f3L5zLvVievrU3pxbm
 OXGVtCdZYljgfk0HGIfWScpQk4AW/2O8S6fPWv7OpjRgJhhmJpCBgFVOaIkNs8qQZv0f
 u2ydrxSxOe8DfhmLgr9ny7qhHBOpYz9Up46SW5ZxOqkpE2rOJenGTZAyCrJnUTc/w91D
 S85WtvRJB/IpVNNhhFiLhJTRhMi1KwZtqP/uWwh/tpw7XHWAc5ZaquMjd+vxRxNegnqt
 3Y0d3nCFWRyd985Fk1Ro6d5izjaoEmh9bZEu/IEQ0J2JZ9gzugvqWam+Y93oojDxfSXT
 061Q==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=1e100.net; s=20230601; t=1713513699; x=1714118499;
 h=content-transfer-encoding:cc:to:subject:message-id:date:from
 :in-reply-to:references:mime-version:x-gm-message-state:from:to:cc
 :subject:date:message-id:reply-to;
 bh=bKEYVZrIzc6RGHnW5bqODhNkm3v/gDkKcqRl3NGQgKo=;
 b=vwIMjdVV4gRKRfPauoFhMW1rA1amuhAqdFbGv6fdtSvtBpEeDQnh4FsIcb/mLDOvp7
 nustE5Z9+2HKmH28Ycl+HxTAIFrHYNvaqMRWWReuo2t2rHJfL4yP9rkaOKrg24lXi1ir
 0gG8VWnXVNuhnVwRrpZoiLSFwcnur/QCFm8ZyoFA4ZbM6JYmwm+8WiEEi9SNbgrFdifK
 DoHypARMtHvqVqOE9qFV1lic/wRoHaAMEA/ulr4TI50bpVF9nsg9pdl8iOJvS36k6hpG
 hG8ubVVGF3pIlTH9+F8TRca2gI27ysW5GOvfwUj1douY/vfmblGUEKdBlinXprrw0dHg
 1Uyw==
X-Forwarded-Encrypted: i=1;
 AJvYcCUC3uuBrj/1Skr6Uk9Vp9RjIH/U1LnzC/PC6jW9zNd57f4jNtaNzFBNfysWTyJ17n9mcMmjt+W9lLA6Tc7GqEXcceiilkk=
X-Gm-Message-State: AOJu0Yy55GExpPZNAaXNu/XOBpaTwJW62eOFkMSw+PHCq/MgLpGEq9v2
 CRbXvxQhzSArKrKCR6cuFKF43Z6dlD29h5DWiJXrlY6ukmb79CRt6+pFzLYJi69N4LDapNKjMgH
 UbYXreX3Zi1qK1x5PYvWDCS8WTsY=
X-Google-Smtp-Source: AGHT+IHxCgBn1Nf81bxqueslwDbniiI0rHGKlLzaphWUqOvkiUNVJDr+z42Hw07phT+s1TWCTDI/ILCENUpIIzgpz+s=
X-Received: by 2002:ac2:4428:0:b0:519:5c34:9652 with SMTP id
 w8-20020ac24428000000b005195c349652mr1004732lfl.31.1713513698412; Fri, 19 Apr
 2024 01:01:38 -0700 (PDT)
MIME-Version: 1.0
References: <CALDnm517N=DM+0tqBpHCGiHenPMirq2eFJF+Gk0ePO+W6WO-Ug@HIDDEN>
 <4e670617-6483-4159-a5cf-27a921764c38@HIDDEN>
 <CALDnm536w_khSks_rG-X-TH+hDiVddcmv=jaMHVQT_KgFh1xkA@HIDDEN>
 <CALDnm50A9aA6Eitis-NXiPRS4vYEB0obaX5zaCfARKSe5ZDFRA@HIDDEN>
 <87wmot289d.fsf@HIDDEN>
In-Reply-To: <87wmot289d.fsf@HIDDEN>
From: =?UTF-8?B?Sm/Do28gVMOhdm9yYQ==?= <joaotavora@HIDDEN>
Date: Fri, 19 Apr 2024 09:01:25 +0100
Message-ID: <CALDnm51qPPFGHDsCqwAQGk6Q20R4ZsRWkHdxTfVDLWWi7BHkHA@HIDDEN>
Subject: Re: bug#70036 a fix that
To: Theodor Thornhill <theo@HIDDEN>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable
X-Spam-Score: 0.0 (/)
X-Debbugs-Envelope-To: 70036
Cc: Eli Zaretskii <eliz@HIDDEN>, 70036 <at> debbugs.gnu.org,
 felician.nemeth@HIDDEN
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -1.0 (-)

On Fri, Apr 19, 2024 at 7:09=E2=80=AFAM Theodor Thornhill <theo@HIDDEN=
o> wrote:

> you've also noted earlier. I have an even stronger computer, a 2023 P1
> gen 5, I believe, running ubuntu. Some servers send _all_ diagnostics on
> every keystroke.

That could be, but what servers are these?

Thought it would never be "on every keystroke" though.  As you probably
know, Eglot bunches them up in didChange notifications, and you can
can even be the size of these bunches.

> > So my perception is that it must have spent around 4% of 1 second in
> > file-truename.
> >
> > Anyway the reason this shows in this profile is because this project
> > with this particular server sends a lot of publishDiagnostics upfront.
> > That's OK.  Gopls is a very good server.  I think I see a fix.  But can
> > you qualitatively describe the Eglot experience.  Do you notice any
> > input lag or something like that? With this project?  I didn't feel _an=
y_
> > lag.
> > Super snappy.  Maybe the JSON serde kicking in?
> >
>
> In this particular project I don't notice any input lag. But on every
> java project at work I absolutely do.

But that could be down to other reasons Theodor.  We would need data
for that server too.  Last time I tried jdtls (on a docker-based TRAMP
setup, described somewhere in the mailing list), it was snappy.

If you make a simple recipe like this one I can absolutely
try though.  The difficulty in that one was TRAMP.


> > Anyway, the idea I suggested earlier is in the patch after  my sig.
> >
> > Let's think:  LSP's publishDiagnostics coming from the server deals
> > in URIs, right?  And we inform the LSP server about URIs, too, right?
> > So the URI is always LSP's idea of the resource identifier (and it like=
s
> > to have truename URI).
>
> Sure, like in my key/value store. (apart from symlinking)

The other difference is it uses buffer-local variables as the
natural "per-buffer" storage method.

> Could we rather use eglot--managed-buffers, like in my patch? there
> shouldn't be a need to loop through say 200 buffers that are unrelated
> to the project in question, right? Apart from this I agree, and will try
> it.

Of course, that's a good improvement.

Jo=C3=A3o




Information forwarded to bug-gnu-emacs@HIDDEN:
bug#70036; Package emacs. Full text available.

Message received at 70036 <at> debbugs.gnu.org:


Received: (at 70036) by debbugs.gnu.org; 19 Apr 2024 07:53:18 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Fri Apr 19 03:53:18 2024
Received: from localhost ([127.0.0.1]:57494 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1rxj3d-0003h7-RG
	for submit <at> debbugs.gnu.org; Fri, 19 Apr 2024 03:53:18 -0400
Received: from mail-lj1-x22a.google.com ([2a00:1450:4864:20::22a]:51701)
 by debbugs.gnu.org with esmtp (Exim 4.84_2)
 (envelope-from <joaotavora@HIDDEN>) id 1rxj3b-0003gx-AH
 for 70036 <at> debbugs.gnu.org; Fri, 19 Apr 2024 03:53:15 -0400
Received: by mail-lj1-x22a.google.com with SMTP id
 38308e7fff4ca-2dcc8d10d39so5560931fa.3
 for <70036 <at> debbugs.gnu.org>; Fri, 19 Apr 2024 00:53:01 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=gmail.com; s=20230601; t=1713513175; x=1714117975; darn=debbugs.gnu.org;
 h=content-transfer-encoding:cc:to:subject:message-id:date:from
 :in-reply-to:references:mime-version:from:to:cc:subject:date
 :message-id:reply-to;
 bh=iC3ttA/9t+GG5lrffTrHBT7GmCppsKE7ZLKET8aGzQc=;
 b=Ney6xrQ0HCLTm4VMNIPP2A0vMjN2hzWyoD8wSZPryVE2Z+MJfx1WAGtXy3uC5zCpfM
 cLzMbSaGWCaaahAfFK94DN32rfJ6uz4W9lK7o3MUpMvc6cpV0a+mT7CYwVj8T5hyiYgd
 hQX949OtWP/OviRKMmpbrftLtmkTGrcTdgaOLWWvYQqrXN8M63p4GnWj6b94ApxzTY1X
 kUUERbrJg9TuIIMSbSyzDwT9VmVDvw3TrNj18UxYDk+Fl+Eirdva99GSLBTNkhl9zTHl
 p3DP/wPMTU6FsswkuypcVRuEE56SmnzNtYyJKb4cQZxEITVA8hjXOT8NNEj/ThGMUK3i
 wXAA==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=1e100.net; s=20230601; t=1713513175; x=1714117975;
 h=content-transfer-encoding:cc:to:subject:message-id:date:from
 :in-reply-to:references:mime-version:x-gm-message-state:from:to:cc
 :subject:date:message-id:reply-to;
 bh=iC3ttA/9t+GG5lrffTrHBT7GmCppsKE7ZLKET8aGzQc=;
 b=eiPh7xyQodCGkZ66Bc8pO79fivqgiAjoFiHTBkpMm+7nYUOHBdrNSJ9bctYlFDlKfO
 ckrXEgMjZQdhfw+f9WPP69XV5Ywb9d+BR5pE2RE+/7BdsLw+5w/bvhvlSshF2YIP+qIz
 nuxFTZTlQiB55jzP1Lj2ImImiVfomKedTfvAeRLc7cnwz4e0VoyJFqVZvRqlRd2h4PCp
 W+lu9rvyuqq1ip8M+au2JLZD5R5saSx4+X9+80PVMYlxcIS0oFjBH/4LSIU5hwz6OGDq
 B343v/l2kW86+mRTb2J3GZ8Buz6CRH4S+vtX4GZ9ziB6oEThNUAQGbxbmqKWQOiFOqJx
 j4Vg==
X-Forwarded-Encrypted: i=1;
 AJvYcCX8Ea11/JXN8UKHT5msGE0J3YO1L1KhRNTrqevuOSlMkU5DguoT/2aCpAp2D92VkpVvRr5eFndF6MeonWcP5t7gBk75pCE=
X-Gm-Message-State: AOJu0YwDD6Ljf44dBhvP1wvUp6JaOUlr6pShNf/NGiA0LsypQyA9/nlg
 +k42cjGVSPCHXjE0V2F1dF8iHKb9U13c2TewidQLELn7K1OncznJ0S9R93ui6LYxWVOTXwAqZuK
 wO/r8/dw423V5YPpNzrWq7sdXdm0=
X-Google-Smtp-Source: AGHT+IGIANdZQ0jcp8wgM7gopF0jebnAGWBiQNKhCKtVmjY1B1zgYF3qGsvVdbCHtgsvgrBJmMeckZEhLM8ZtYf8BR4=
X-Received: by 2002:a05:651c:4d4:b0:2d8:34ad:7f4e with SMTP id
 e20-20020a05651c04d400b002d834ad7f4emr922558lji.4.1713513175078; Fri, 19 Apr
 2024 00:52:55 -0700 (PDT)
MIME-Version: 1.0
References: <CALDnm517N=DM+0tqBpHCGiHenPMirq2eFJF+Gk0ePO+W6WO-Ug@HIDDEN>
 <4e670617-6483-4159-a5cf-27a921764c38@HIDDEN>
 <CALDnm536w_khSks_rG-X-TH+hDiVddcmv=jaMHVQT_KgFh1xkA@HIDDEN>
 <87zftp28ri.fsf@HIDDEN>
In-Reply-To: <87zftp28ri.fsf@HIDDEN>
From: =?UTF-8?B?Sm/Do28gVMOhdm9yYQ==?= <joaotavora@HIDDEN>
Date: Fri, 19 Apr 2024 08:52:42 +0100
Message-ID: <CALDnm52=4L4Bg7VNGwEa6V72MNBgUxwJDoe45LBdiPkO2Dz3mw@HIDDEN>
Subject: Re: bug#70036 a fix that
To: Theodor Thornhill <theo@HIDDEN>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable
X-Spam-Score: 0.0 (/)
X-Debbugs-Envelope-To: 70036
Cc: Eli Zaretskii <eliz@HIDDEN>, 70036 <at> debbugs.gnu.org,
 felician.nemeth@HIDDEN
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -1.0 (-)

On Fri, Apr 19, 2024 at 6:59=E2=80=AFAM Theodor Thornhill <theo@HIDDEN=
o> wrote:

> I agree - that's why I want to focus on improving the code, same as
> you. I just want you to understand that being mindful on how you come
> across can't really hurt.

You're right of course.  I do try to be mindful, but maybe I made a mistake=
.
IIUC it was the part where I said this was a "one-off and uncommon" report
that you felt was unkind and harsh.  Because you wrote that.  I absolutely
think we miscommunicated: I wasn't trying to say you have a bizarre project
setup, I was simply trying to make a statement about statistics and
the relative importance.

> There are enough conflicts around these days,

In Emacs or in the world?  If the former I'd rather not know about
them.

> let's not make code be one.

Right.  So reverting another person's code isn't that big of a deal.
You "reverted" bits of my code when doing your commits, and that's
fine.

> Yeah, that's right. I assume that when json serde disappeared as a
> bottleneck others emerge. This is the obvious one to me right now.

When my hotspot for a given reasonable profile is 4%, I'm feeling
fairly good about my code.  But yes, of course, it can be addressed.

> Sure. That will make the change you make similar in spirit to mine, yet
> with a different implementation. I'm fine with that.

With the difference that my change also still ultimately uses truename,
just very frugally.  So it still understands symlinks, doesn't
mislead the server and doesn't expose the bug I demonstrated.

Jo=C3=A3o




Information forwarded to bug-gnu-emacs@HIDDEN:
bug#70036; Package emacs. Full text available.

Message received at 70036 <at> debbugs.gnu.org:


Received: (at 70036) by debbugs.gnu.org; 19 Apr 2024 07:51:17 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Fri Apr 19 03:51:17 2024
Received: from localhost ([127.0.0.1]:57466 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1rxj1g-0003ST-S8
	for submit <at> debbugs.gnu.org; Fri, 19 Apr 2024 03:51:17 -0400
Received: from mout01.posteo.de ([185.67.36.65]:38625)
 by debbugs.gnu.org with esmtp (Exim 4.84_2)
 (envelope-from <yantar92@HIDDEN>) id 1rxj1f-0003SN-6D
 for 70036 <at> debbugs.gnu.org; Fri, 19 Apr 2024 03:51:15 -0400
Received: from submission (posteo.de [185.67.36.169]) 
 by mout01.posteo.de (Postfix) with ESMTPS id F1700240028
 for <70036 <at> debbugs.gnu.org>; Fri, 19 Apr 2024 09:50:54 +0200 (CEST)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=posteo.net; s=2017;
 t=1713513055; bh=7FrdMBryey9fy7BuNKnrzAHCA9bAlMgGhBjONw1zpA0=;
 h=From:To:Cc:Subject:Date:Message-ID:MIME-Version:Content-Type:
 From;
 b=Lvs4y43iJkCx8j0Ej1+smwaV0NrDnpBaLXd7Z2hWENA87+u6g+TucP8G+Y/poli4/
 0/WGPdzF95g0Mqm7M7q4CgVVMnxSYEalCDjx+l7Xjpcw1e9gYz2yD1xcIeOzC8W2+J
 DEVaFeB2dJlKSDB7xRDn9GPYUUc0AeGfeBgAz0Vy0Ga2fmsGRN6/m4QVUB7616EwYL
 94vY7wL7sPCEhj6a1U7KVyzoHjdhWwvwjjk7/BAn26qEAAQmMhS6OGBTZNxYYpfq/b
 zmrXBMQlCt5yZgJfD3dDfEzvj9pSoUiTotXbV5m286rnpC+7/rflqaPI25awdChtgC
 JZR+oeQ/V0q9A==
Received: from customer (localhost [127.0.0.1])
 by submission (posteo.de) with ESMTPSA id 4VLRf51vkzz9rxG;
 Fri, 19 Apr 2024 09:50:52 +0200 (CEST)
From: Ihor Radchenko <yantar92@HIDDEN>
To: Eli Zaretskii <eliz@HIDDEN>
Subject: Re: bug#70036: a fix that
In-Reply-To: <864jbxden1.fsf@HIDDEN>
References: <CALDnm517N=DM+0tqBpHCGiHenPMirq2eFJF+Gk0ePO+W6WO-Ug@HIDDEN>
 <4e670617-6483-4159-a5cf-27a921764c38@HIDDEN>
 <CALDnm536w_khSks_rG-X-TH+hDiVddcmv=jaMHVQT_KgFh1xkA@HIDDEN>
 <864jbxden1.fsf@HIDDEN>
Date: Fri, 19 Apr 2024 07:51:35 +0000
Message-ID: <877cgt7ptk.fsf@localhost>
MIME-Version: 1.0
Content-Type: text/plain
X-Spam-Score: -2.3 (--)
X-Debbugs-Envelope-To: 70036
Cc: theo@HIDDEN, 70036 <at> debbugs.gnu.org, felician.nemeth@HIDDEN,
 =?utf-8?B?Sm/Do28gVMOhdm9yYQ==?= <joaotavora@HIDDEN>
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -3.3 (---)

Eli Zaretskii <eliz@HIDDEN> writes:

>> I still think the cleanest solution is to write file-truename
>> in C.
>
> I explained in that past discussion why this is not simple.  So if
> simpler solutions exist, we should prefer them.

There are some easy things that can be done to improve `file-truename'
performance somewhat. For example, the number of calls to
`file-name-nondirectory' can be trivially reduced in the `file-truename'
code - it is called up to three times in a row.

(see my earlier message in https://yhetil.org/emacs-bugs/87jzlmd831.fsf@localhost/)

Will it be of interest?

-- 
Ihor Radchenko // yantar92,
Org mode contributor,
Learn more about Org mode at <https://orgmode.org/>.
Support Org development at <https://liberapay.com/org-mode>,
or support my work at <https://liberapay.com/yantar92>




Information forwarded to bug-gnu-emacs@HIDDEN:
bug#70036; Package emacs. Full text available.

Message received at 70036 <at> debbugs.gnu.org:


Received: (at 70036) by debbugs.gnu.org; 19 Apr 2024 07:39:09 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Fri Apr 19 03:39:09 2024
Received: from localhost ([127.0.0.1]:57375 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1rxipv-00026z-AU
	for submit <at> debbugs.gnu.org; Fri, 19 Apr 2024 03:39:09 -0400
Received: from out-184.mta0.migadu.com ([2001:41d0:1004:224b::b8]:24725)
 by debbugs.gnu.org with esmtp (Exim 4.84_2)
 (envelope-from <theo@HIDDEN>) id 1rxipt-00025c-6k
 for 70036 <at> debbugs.gnu.org; Fri, 19 Apr 2024 03:39:05 -0400
X-Report-Abuse: Please report any abuse attempt to abuse@HIDDEN and
 include these headers.
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=thornhill.no;
 s=key1; t=1713512324;
 h=from:from:reply-to:subject:subject:date:date:message-id:message-id:
 to:to:cc:cc:mime-version:mime-version:content-type:content-type:
 content-transfer-encoding:content-transfer-encoding:
 in-reply-to:in-reply-to:references:references;
 bh=Iaysf7rcU1dR1mfjDOdpRSo7/6IVbKJ2YXBqTS9FO/w=;
 b=kQTRbnuem78ViZJwf8OlIPLvI6V3hlJxtD8ZygPSisLkJU2ePAxkcq5wYkyQ/dmMnWdV8H
 LfrJC/n4Y/usSKkRO93CDMYiljJ4ViH4gXFqWcKDEvQMMopmcsJoYVJSIX7P6wv41qB/x7
 dZvhPQSPaB4bZ5+Z0B5wkl0cceOz6yY4p/+x68upMCkW+IsbVGsng8rInZdzqGybMSdx2w
 hbsy9XCB/f92RrK+d9/PrztV9zzpjg+N5wV/aeuOyXy5RXuluSiI7bqI7fIv0dIxPm6hSs
 B1CNWsPwUoJJkU6I9cE6f2LFJ/XJ/AIzAoGX5PvbZ1+bmihAc9aa7G7paqwdOQ==
From: Theodor Thornhill <theo@HIDDEN>
To: Eli Zaretskii <eliz@HIDDEN>
Subject: Re: bug#70036 a fix that
In-Reply-To: <865xwddf5w.fsf@HIDDEN>
References: <4e670617-6483-4159-a5cf-27a921764c38@HIDDEN>
 <865xwddf5w.fsf@HIDDEN>
Date: Fri, 19 Apr 2024 09:38:41 +0200
Message-ID: <87plul245a.fsf@HIDDEN>
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable
X-Migadu-Flow: FLOW_OUT
X-Spam-Score: 0.0 (/)
X-Debbugs-Envelope-To: 70036
Cc: 70036 <at> debbugs.gnu.org, felician.nemeth@HIDDEN, joaotavora@HIDDEN
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -1.0 (-)

Eli Zaretskii <eliz@HIDDEN> writes:

>> Date: Thu, 18 Apr 2024 23:32:00 +0200
>> From: Theodor Thornhill <theo@HIDDEN>
>> Cc: Eli Zaretskii <eliz@HIDDEN>, felician.nemeth@HIDDEN,
>>  70036 <at> debbugs.gnu.org
>>=20
>> I'll add two profiles, one is profile-fast and profile-slow. You can
>> guess which is which :)
>>=20
>> STEPS:
>> I've made an intentionally broken commit into a golang repo I just
>> forked, to get some publishDiagnostics quickly.
>>=20
>> (for good measure evaluate eglot.el before running profiles)
>>=20
>> 1. Install gopls
>> 2. Make some directory you can wipe out after the test and cd into it
>> 3. git clone git@HIDDEN:theothornhill/gin.git foo/bar/baz/foo/bar/ba=
z/foo/bar/baz/foo/bar/baz/gin
>> 4. cd foo/bar/baz/foo/bar/baz/foo/bar/baz/foo/bar/baz/gin
>> 5. open fs.go in emacs and make sure some go mode is available. Go-ts-mo=
de for example
>> 6. M-x profiler-start
>> 7. M-x eglot
>> 8. Wait 10-20 seconds. Do no actions other than let the lsp settle.
>> 9. M-x profiler-stop
>> 10. M-x profiler-report
>> 11. Rinse repeat with both or all variants of emacs with/without the
>> latest eglot changes.
>> I'll add my profiles, and let some metrics talk.
>
> Thanks, but that is not what I asked to provide, for us to make a
> decision in this case.  I asked to provide results of a benchmark-run
> or similar measure of the run time.  Profiles, by contrast, are much
> harder to interpret when the issue is the overall time it takes to
> perform some operations.
>
> Could you please show benchmark times of the old code (before your
> changes), the code after your changes, and the current code in Git
> (after Jo=C3=A3o reverted your change and installed his own improvements)?
> This will allow us to see the times (both processing and GC) of each
> variant, and will allow to compare their performance.
>
> Thanks.

I'll try.

Theo




Information forwarded to bug-gnu-emacs@HIDDEN:
bug#70036; Package emacs. Full text available.

Message received at 70036 <at> debbugs.gnu.org:


Received: (at 70036) by debbugs.gnu.org; 19 Apr 2024 06:57:02 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Fri Apr 19 02:57:01 2024
Received: from localhost ([127.0.0.1]:57162 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1rxiB9-0003HH-Qb
	for submit <at> debbugs.gnu.org; Fri, 19 Apr 2024 02:57:01 -0400
Received: from eggs.gnu.org ([2001:470:142:3::10]:43368)
 by debbugs.gnu.org with esmtp (Exim 4.84_2)
 (envelope-from <eliz@HIDDEN>) id 1rxiB5-0003GB-TS
 for 70036 <at> debbugs.gnu.org; Fri, 19 Apr 2024 02:56:57 -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 <eliz@HIDDEN>)
 id 1rxiAm-0003Tq-4T; Fri, 19 Apr 2024 02:56:36 -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=gW+cI2Ux5InfW/YOM+DISzl5FRvkogK8DJRT22Uc4uY=; b=Hs0rGd3vwYn9Kmr3TORT
 4QYARexYslpPtmg7hVfEamnUb/Pk4b55uil22oxSFS7Ksrb1puvdLSxsTSXgX+DgeKVL9s5cSP4AG
 vJ4v5ZsblctGrbnLg826WB6vxJhoy7d++SbZMRbWSEVccZtDjIUBbD/kAZbtW2ju/fni0jL9dIzRf
 sgf+f3xGlvls3D+c9dhDYoOzZxoInIRdPWev1WTVobKW3Cy+MNfppIV4h0EtZhrBykkZF5W4xuPZE
 P92oL8QMx6qRTRSxCxIbLokqOW5A0LvU9AtV/GcB5KZ9hPjH4T56j5MrZZ+g8bVN5mS8tX2Kdswr1
 eBV3EPra6vPViA==;
Date: Fri, 19 Apr 2024 09:56:34 +0300
Message-Id: <864jbxden1.fsf@HIDDEN>
From: Eli Zaretskii <eliz@HIDDEN>
To: =?utf-8?B?Sm/Do28gVMOhdm9yYQ==?= <joaotavora@HIDDEN>
In-Reply-To: <CALDnm536w_khSks_rG-X-TH+hDiVddcmv=jaMHVQT_KgFh1xkA@HIDDEN>
 (message from =?utf-8?B?Sm/Do28gVMOhdm9yYQ==?= on Thu, 18 Apr 2024 23:06:47
 +0100)
Subject: Re: bug#70036 a fix that
References: <CALDnm517N=DM+0tqBpHCGiHenPMirq2eFJF+Gk0ePO+W6WO-Ug@HIDDEN>
 <4e670617-6483-4159-a5cf-27a921764c38@HIDDEN>
 <CALDnm536w_khSks_rG-X-TH+hDiVddcmv=jaMHVQT_KgFh1xkA@HIDDEN>
MIME-version: 1.0
Content-type: text/plain; charset=utf-8
Content-Transfer-Encoding: 8bit
X-Spam-Score: -2.3 (--)
X-Debbugs-Envelope-To: 70036
Cc: felician.nemeth@HIDDEN, 70036 <at> debbugs.gnu.org, theo@HIDDEN
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -3.3 (---)

> From: João Távora <joaotavora@HIDDEN>
> Date: Thu, 18 Apr 2024 23:06:47 +0100
> Cc: Eli Zaretskii <eliz@HIDDEN>, felician.nemeth@HIDDEN, 70036 <at> debbugs.gnu.org
> 
> > > Still, for the very little data that there is available, I do take care
> > > to put in a much simpler fix that completely fixes the issue - as far as
> > > I or anyone reading the available data can see it.
> >
> > With this I disagree - but I guess I either have miscommunicated or have
> > provided unclear profiles or something inbetween.
> 
> I scanned the bug thread twice and couldn't find any other profiles.
> There are mentions of textDocument/publishDiagnostics, but no actual
> profile data or information of how to see the performance problem.
> 
> Maybe _I_ missed something.  But I see you have now sent a perfect
> reproduction, so it doesn't matter.

There was no need to have any profiles to demonstrate that
file-truename is significantly slower than expand-file-name.  It
should be clear just by looking at what file-truename does and how it
does that.  Therefore, once I was told that resolving symlinks in
Emacs is unnecessary, replacing file-truename with expand-file-name
became a no-brainer, regardless of how many or how few percents of CPU
time it takes: it's just a waste of CPU cycles.

It's only now, that we decided symlinks _should_ be resolved by Emacs,
that quantitative performance of the code and the fraction of it due
to file-truename becomes relevant, and must be measured and compared
with alternatives.

> I still think the cleanest solution is to write file-truename
> in C.

I explained in that past discussion why this is not simple.  So if
simpler solutions exist, we should prefer them.

> But if that can't be done, it doesn't seem terribly hard
> to get rid of find-buffer-visiting in publishDiagnostics and
> still remain symlink-correct.

find-buffer-visiting was made much faster lately, but that speedup
AFAIR shows up only if the session has a lot of buffers, so trying
these benchmarks in "emacs -Q" will not typically show the effect, and
could even obscure the file-truename effect as well, because the
number of calls to file-truename will be much smaller.  But if calling
find-buffer-visiting from Eglot can be avoided, that is of course even
better.

> That's because every interesting result of find-buffer-visiting
> is a buffer for which we've already issued a 'didOpen', which
> in turn means we've already called file-truename once for it.
> If we cache that result (the basic idea behind the "better fix")
> it should be possible to find the buffer quicker just by iterating
> the list.  That's what I will try to do, using your recipe as
> guide.

Thanks.




Information forwarded to bug-gnu-emacs@HIDDEN:
bug#70036; Package emacs. Full text available.

Message received at 70036 <at> debbugs.gnu.org:


Received: (at 70036) by debbugs.gnu.org; 19 Apr 2024 06:46:10 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Fri Apr 19 02:46:10 2024
Received: from localhost ([127.0.0.1]:57119 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1rxi0e-0000zG-K8
	for submit <at> debbugs.gnu.org; Fri, 19 Apr 2024 02:46:09 -0400
Received: from eggs.gnu.org ([2001:470:142:3::10]:36040)
 by debbugs.gnu.org with esmtp (Exim 4.84_2)
 (envelope-from <eliz@HIDDEN>) id 1rxi0a-0000ry-QA
 for 70036 <at> debbugs.gnu.org; Fri, 19 Apr 2024 02:46:06 -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 <eliz@HIDDEN>)
 id 1rxi0G-0001vV-AE; Fri, 19 Apr 2024 02:45:45 -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=uBl6jSLWhqIaySs/8FhnCM7kd/I5F2XNiuvI9X4mTeY=; b=aXq26zJIUm9ArFQoI7wJ
 tTbm3nQSowLpLz0KyyiL+bbeE0XtltBf15+HdlLhstsDz3DE1v9/z59BOog2oU2Ek1B3Z5Q4xT1vk
 mDEYBQk1gtFVMxW1Rxufz/FOh1frNtiASNNkbO3j/xD0RlHSlKdquCQqZaJbkSFLujCixSeXRWbSA
 x/EooBrsPuF/GCGVsgOnFy18RH5JMjGV9tYxudjCUXfFYvW+iWNwsdC4T4DNxh6UWRxxl0TR5MzK4
 WG+U06x93oTX4GJN+zSHdLPYcNxkpdQDBsbznm6g14j5TsDOY0aBSO51r3cN44CLNBZswJpofhACs
 51Lfi1X2w9ChcA==;
Date: Fri, 19 Apr 2024 09:45:15 +0300
Message-Id: <865xwddf5w.fsf@HIDDEN>
From: Eli Zaretskii <eliz@HIDDEN>
To: Theodor Thornhill <theo@HIDDEN>
In-Reply-To: <4e670617-6483-4159-a5cf-27a921764c38@HIDDEN> (message
 from Theodor Thornhill on Thu, 18 Apr 2024 23:32:00 +0200)
Subject: Re: bug#70036 a fix that
References: <4e670617-6483-4159-a5cf-27a921764c38@HIDDEN>
MIME-version: 1.0
Content-type: text/plain; charset=utf-8
Content-Transfer-Encoding: 8bit
X-Spam-Score: -2.3 (--)
X-Debbugs-Envelope-To: 70036
Cc: 70036 <at> debbugs.gnu.org, felician.nemeth@HIDDEN, joaotavora@HIDDEN
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -3.3 (---)

> Date: Thu, 18 Apr 2024 23:32:00 +0200
> From: Theodor Thornhill <theo@HIDDEN>
> Cc: Eli Zaretskii <eliz@HIDDEN>, felician.nemeth@HIDDEN,
>  70036 <at> debbugs.gnu.org
> 
> I'll add two profiles, one is profile-fast and profile-slow. You can
> guess which is which :)
> 
> STEPS:
> I've made an intentionally broken commit into a golang repo I just
> forked, to get some publishDiagnostics quickly.
> 
> (for good measure evaluate eglot.el before running profiles)
> 
> 1. Install gopls
> 2. Make some directory you can wipe out after the test and cd into it
> 3. git clone git@HIDDEN:theothornhill/gin.git foo/bar/baz/foo/bar/baz/foo/bar/baz/foo/bar/baz/gin
> 4. cd foo/bar/baz/foo/bar/baz/foo/bar/baz/foo/bar/baz/gin
> 5. open fs.go in emacs and make sure some go mode is available. Go-ts-mode for example
> 6. M-x profiler-start
> 7. M-x eglot
> 8. Wait 10-20 seconds. Do no actions other than let the lsp settle.
> 9. M-x profiler-stop
> 10. M-x profiler-report
> 11. Rinse repeat with both or all variants of emacs with/without the
> latest eglot changes.
> I'll add my profiles, and let some metrics talk.

Thanks, but that is not what I asked to provide, for us to make a
decision in this case.  I asked to provide results of a benchmark-run
or similar measure of the run time.  Profiles, by contrast, are much
harder to interpret when the issue is the overall time it takes to
perform some operations.

Could you please show benchmark times of the old code (before your
changes), the code after your changes, and the current code in Git
(after João reverted your change and installed his own improvements)?
This will allow us to see the times (both processing and GC) of each
variant, and will allow to compare their performance.

Thanks.




Information forwarded to bug-gnu-emacs@HIDDEN:
bug#70036; Package emacs. Full text available.

Message received at 70036 <at> debbugs.gnu.org:


Received: (at 70036) by debbugs.gnu.org; 19 Apr 2024 06:27:21 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Fri Apr 19 02:27:20 2024
Received: from localhost ([127.0.0.1]:57029 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1rxhiR-0005jv-1i
	for submit <at> debbugs.gnu.org; Fri, 19 Apr 2024 02:27:20 -0400
Received: from out-171.mta0.migadu.com ([2001:41d0:1004:224b::ab]:50979)
 by debbugs.gnu.org with esmtp (Exim 4.84_2)
 (envelope-from <theo@HIDDEN>) id 1rxhiP-0005io-A2
 for 70036 <at> debbugs.gnu.org; Fri, 19 Apr 2024 02:27:17 -0400
X-Report-Abuse: Please report any abuse attempt to abuse@HIDDEN and
 include these headers.
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=thornhill.no;
 s=key1; t=1713508016;
 h=from:from:reply-to:subject:subject:date:date:message-id:message-id:
 to:to:cc:cc:mime-version:mime-version:content-type:content-type:
 in-reply-to:in-reply-to:references:references;
 bh=RfrdPUU9wCJah/nAyBplofOasC4TkvR7WOMtu3yPsAs=;
 b=TFXARErT8ufWejwWYXK9VuGZpcgZ5Z+XrwH4ut1TJ/WGYds4butVxbQDHgBeoe3PnCyRGp
 tU1S7+i1cWAy2HzUHpfRpBP9UokBwzt8b9S2jeUxGlMDriVg9cIEFGNxnBvvYSPNAR7o8Y
 bZ6OfDfRpkABp7rKgAm2aqCJGgIxDYvIfhcYCWDmtj4Zsgq+EVadoBUp44LgmOYLU7jMLf
 VE7Oesx2zNNgbXQaqFrPndR1l30D652xaYwHi26cAl/OT5x/BnmkGarWf+rrw/SP779yOj
 m9vApCdQ8mNQ96ydAH/n10o01jbfmnGfW+REXUHNIYw0CC74r4rELvzlPsL9TA==
From: Theodor Thornhill <theo@HIDDEN>
To: =?utf-8?B?Sm/Do28gVMOhdm9yYQ==?= <joaotavora@HIDDEN>
Subject: Re: bug#70036 a fix that
In-Reply-To: <87wmot289d.fsf@HIDDEN>
References: <CALDnm517N=DM+0tqBpHCGiHenPMirq2eFJF+Gk0ePO+W6WO-Ug@HIDDEN>
 <4e670617-6483-4159-a5cf-27a921764c38@HIDDEN>
 <CALDnm536w_khSks_rG-X-TH+hDiVddcmv=jaMHVQT_KgFh1xkA@HIDDEN>
 <CALDnm50A9aA6Eitis-NXiPRS4vYEB0obaX5zaCfARKSe5ZDFRA@HIDDEN>
 <87wmot289d.fsf@HIDDEN>
Date: Fri, 19 Apr 2024 08:26:53 +0200
Message-ID: <87sezh27gy.fsf@HIDDEN>
MIME-Version: 1.0
Content-Type: text/plain
X-Migadu-Flow: FLOW_OUT
X-Spam-Score: 0.0 (/)
X-Debbugs-Envelope-To: 70036
Cc: Eli Zaretskii <eliz@HIDDEN>, 70036 <at> debbugs.gnu.org,
 felician.nemeth@HIDDEN
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -1.0 (-)

>
> Could we rather use eglot--managed-buffers, like in my patch? there
> shouldn't be a need to loop through say 200 buffers that are unrelated
> to the project in question, right? Apart from this I agree, and will try
> it.

Like this?

I can confirm with yours and this patch the latency is down again, so
thanks.

I'll test a little the difference with/without eglot--managed-buffers.

Theo

diff --git a/lisp/progmodes/eglot.el b/lisp/progmodes/eglot.el
index 90a607075d3..3578aed92b4 100644
--- a/lisp/progmodes/eglot.el
+++ b/lisp/progmodes/eglot.el
@@ -2381,8 +2381,11 @@ eglot-handle-notification
                         (lambda ()
                           (remhash token (eglot--progress-reporters server))))))))))
 
+(defvar-local eglot--cached-tdi nil
+  "A cached LSP TextDocumentIdentifier URI string.")
+
 (cl-defmethod eglot-handle-notification
-  (_server (_method (eql textDocument/publishDiagnostics)) &key uri diagnostics
+  (server (_method (eql textDocument/publishDiagnostics)) &key uri diagnostics
            &allow-other-keys) ; FIXME: doesn't respect `eglot-strict-mode'
   "Handle notification publishDiagnostics."
   (cl-flet ((eglot--diag-type (sev)
@@ -2391,9 +2394,14 @@ eglot-handle-notification
                     ((= sev 2)  'eglot-warning)
                     (t          'eglot-note)))
             (mess (source code message)
-              (concat source (and code (format " [%s]" code)) ": " message)))
+              (concat source (and code (format " [%s]" code)) ": " message))
+            (find-it (uri)
+              (cl-loop for b in (eglot--managed-buffers server)
+                       when (with-current-buffer b
+                              (equal eglot--cached-tdi uri))
+                       return b)))
     (if-let* ((path (expand-file-name (eglot-uri-to-path uri)))
-              (buffer (find-buffer-visiting path)))
+              (buffer (find-it uri)))
         (with-current-buffer buffer
           (cl-loop
            initially
@@ -2518,9 +2526,6 @@ eglot-handle-request
      (t (setq success :json-false)))
     `(:success ,success)))
 
-(defvar-local eglot--cached-tdi nil
-  "A cached LSP TextDocumentIdentifier URI string.")
-
 (defun eglot--TextDocumentIdentifier ()
   "Compute TextDocumentIdentifier object for current buffer."
   `(:uri ,(or eglot--cached-tdi



Thanks,
Theo




Information forwarded to bug-gnu-emacs@HIDDEN:
bug#70036; Package emacs. Full text available.

Message received at 70036 <at> debbugs.gnu.org:


Received: (at 70036) by debbugs.gnu.org; 19 Apr 2024 06:10:19 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Fri Apr 19 02:10:19 2024
Received: from localhost ([127.0.0.1]:56957 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1rxhRy-0004EJ-SB
	for submit <at> debbugs.gnu.org; Fri, 19 Apr 2024 02:10:19 -0400
Received: from out-176.mta1.migadu.com ([95.215.58.176]:12883)
 by debbugs.gnu.org with esmtp (Exim 4.84_2)
 (envelope-from <theo@HIDDEN>) id 1rxhRv-0004Cq-FR
 for 70036 <at> debbugs.gnu.org; Fri, 19 Apr 2024 02:10:17 -0400
X-Report-Abuse: Please report any abuse attempt to abuse@HIDDEN and
 include these headers.
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=thornhill.no;
 s=key1; t=1713506993;
 h=from:from:reply-to:subject:subject:date:date:message-id:message-id:
 to:to:cc:cc:mime-version:mime-version:content-type:content-type:
 content-transfer-encoding:content-transfer-encoding:
 in-reply-to:in-reply-to:references:references;
 bh=Qu846u6yOAf5RpzJz31PY4EDHfWmcpYSaUcDI3BmdGo=;
 b=GgfsoztOKNneNKlqFY4xIq7Ob/pbSlC/6Xq5ENCQ2yXDz/S0xZ3Yvi8NsujpGElUJ4GFXV
 1luafhRZtnngHQX5VX+9c8wAicWRmqLxEGGpxzWxCGAY+PT7PVeX5xEQBZPUJ6SCLspDLG
 lASyEI+altC6F30HBynwgY5AUSC9tQG3u+dEjm0JiFVLzdoyohMMRXzVMvp0VK7CHL6V9C
 lI21q2uYHWDt/BD2xQUsPZyUwiQbCYDBk00tvXxV8SbLaKqhCUdEX8r2lcmoIfC6zIY5PT
 0XYHv8XyIMVlUTKRl/+J+yKJzmzaNOB8eQbkgs0WgY/8aa6Pg98csBcd4h0odg==
From: Theodor Thornhill <theo@HIDDEN>
To: =?utf-8?B?Sm/Do28gVMOhdm9yYQ==?= <joaotavora@HIDDEN>
Subject: Re: bug#70036 a fix that
In-Reply-To: <CALDnm50A9aA6Eitis-NXiPRS4vYEB0obaX5zaCfARKSe5ZDFRA@HIDDEN>
References: <CALDnm517N=DM+0tqBpHCGiHenPMirq2eFJF+Gk0ePO+W6WO-Ug@HIDDEN>
 <4e670617-6483-4159-a5cf-27a921764c38@HIDDEN>
 <CALDnm536w_khSks_rG-X-TH+hDiVddcmv=jaMHVQT_KgFh1xkA@HIDDEN>
 <CALDnm50A9aA6Eitis-NXiPRS4vYEB0obaX5zaCfARKSe5ZDFRA@HIDDEN>
Date: Fri, 19 Apr 2024 08:09:50 +0200
Message-ID: <87wmot289d.fsf@HIDDEN>
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable
X-Migadu-Flow: FLOW_OUT
X-Spam-Score: 0.0 (/)
X-Debbugs-Envelope-To: 70036
Cc: Eli Zaretskii <eliz@HIDDEN>, 70036 <at> debbugs.gnu.org,
 felician.nemeth@HIDDEN
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -1.0 (-)

Jo=C3=A3o T=C3=A1vora <joaotavora@HIDDEN> writes:

> On Thu, Apr 18, 2024 at 11:06=E2=80=AFPM Jo=C3=A3o T=C3=A1vora <joaotavor=
a@HIDDEN> wrote:
>
>> Anyway is this the hotspot I should be trying to optimize?
>>
>> >            9   4%              - find-buffer-visiting
>
> Alright, i've reproduced this
>
>           33   5%       - eglot-handle-notification
>           33   5%        - apply
>           33   5%         - #<compiled-function B79>
>           29   4%          - find-buffer-visiting
>           29   4%           - file-truename
>           29   4%            - file-truename
>           25   4%             - file-truename
>           25   4%              - file-truename
>           25   4%               - file-truename
>           25   4%                - file-truename
>           25   4%                 + file-truename
>
> But I have to say, I wouldn't call this a severe performance penalty.
> I followed your instructions very closely and invoked Emacs like this:
>
> emacs -Q foo/bar/baz/foo/bar/baz/foo/bar/baz/foo/bar/baz/gin/fs.go  -f
> go-ts-mode
>
> The directory is ~/tmp/theo/foo/bar... so it's a pretty long path with
> many directories all in all.

Great!

>
> But I didn't have to wait 10 seconds for the LSP to settle down!  It was
> pretty snappy on my 2018 Lenovo T480 running Archlinux.  And if I
> profile anything other than the initial M-x eglot (which normally happens
> only once in a work session), I don't find any file-truename in the profi=
le.
>

This is true to some extent, but varies a lot from server to server, as
you've also noted earlier. I have an even stronger computer, a 2023 P1
gen 5, I believe, running ubuntu. Some servers send _all_ diagnostics on
every keystroke.

> So my perception is that it must have spent around 4% of 1 second in
> file-truename.
>
> Anyway the reason this shows in this profile is because this project
> with this particular server sends a lot of publishDiagnostics upfront.
> That's OK.  Gopls is a very good server.  I think I see a fix.  But can
> you qualitatively describe the Eglot experience.  Do you notice any
> input lag or something like that? With this project?  I didn't feel _any_
> lag.
> Super snappy.  Maybe the JSON serde kicking in?
>

In this particular project I don't notice any input lag. But on every
java project at work I absolutely do. With my fix I don't. So if we
solve this in any particular way that will be a huge benefit for
everyone using java and other either suboptimal lsp servers or languages
in general.

> Anyway, the idea I suggested earlier is in the patch after  my sig.
>
> Let's think:  LSP's publishDiagnostics coming from the server deals
> in URIs, right?  And we inform the LSP server about URIs, too, right?
> So the URI is always LSP's idea of the resource identifier (and it likes
> to have truename URI).

Sure, like in my key/value store. (apart from symlinking)

>
> My last "better fix" commit records this URI in the buffer as a buffer
> local variable eglot--cached-tdi and it has to do that for every didOpen.
>
> So, to find an open buffer pertaining to  a certain LSP's publishDiagnost=
ics
> it suffices in theory to go through all the buffers that have a non-nil
> cached
> URI and compare that.
>
> No need to convert from URI to file names, not for this job at least!
> I tried this and it worked fine.
>
> When I do that, the profile is completely free of those 4% that
> bothered you.
>
> I'm still testing this for edge cases and will sleep on it, but it seems
> promisingly simple at least.  I can't run unit tests right now, because
> a recent adventurous commit by Stefan Monnier broke them all :-)
> but I'm confident that will be fixed soon...
>
> I hope you can try this patch.

I will :)

>
> Jo=C3=A3o
>
> diff --git a/lisp/progmodes/eglot.el b/lisp/progmodes/eglot.el
> index 90a607075d3..38a16b15e4c 100644
> --- a/lisp/progmodes/eglot.el
> +++ b/lisp/progmodes/eglot.el
> @@ -2381,6 +2381,9 @@ eglot-handle-notification
>                          (lambda ()
>                            (remhash token (eglot--progress-reporters
> server))))))))))
>
> +(defvar-local eglot--cached-tdi nil
> +  "A cached LSP TextDocumentIdentifier URI string.")
> +
>  (cl-defmethod eglot-handle-notification
>    (_server (_method (eql textDocument/publishDiagnostics)) &key uri
> diagnostics
>             &allow-other-keys) ; FIXME: doesn't respect `eglot-strict-mod=
e'
> @@ -2391,9 +2394,14 @@ eglot-handle-notification
>                      ((=3D sev 2)  'eglot-warning)
>                      (t          'eglot-note)))
>              (mess (source code message)
> -              (concat source (and code (format " [%s]" code)) ": "
> message)))
> +              (concat source (and code (format " [%s]" code)) ": "
> message))
> +            (find-it (uri)
> +              (cl-loop for b in (buffer-list)

Could we rather use eglot--managed-buffers, like in my patch? there
shouldn't be a need to loop through say 200 buffers that are unrelated
to the project in question, right? Apart from this I agree, and will try
it.

Thanks,
Theo




Information forwarded to bug-gnu-emacs@HIDDEN:
bug#70036; Package emacs. Full text available.

Message received at 70036 <at> debbugs.gnu.org:


Received: (at 70036) by debbugs.gnu.org; 19 Apr 2024 05:59:25 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Fri Apr 19 01:59:24 2024
Received: from localhost ([127.0.0.1]:56903 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1rxhHP-0003Ae-0f
	for submit <at> debbugs.gnu.org; Fri, 19 Apr 2024 01:59:24 -0400
Received: from out-170.mta1.migadu.com ([2001:41d0:203:375::aa]:30418)
 by debbugs.gnu.org with esmtp (Exim 4.84_2)
 (envelope-from <theo@HIDDEN>) id 1rxhHM-00039T-SV
 for 70036 <at> debbugs.gnu.org; Fri, 19 Apr 2024 01:59:21 -0400
X-Report-Abuse: Please report any abuse attempt to abuse@HIDDEN and
 include these headers.
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=thornhill.no;
 s=key1; t=1713506340;
 h=from:from:reply-to:subject:subject:date:date:message-id:message-id:
 to:to:cc:cc:mime-version:mime-version:content-type:content-type:
 content-transfer-encoding:content-transfer-encoding:
 in-reply-to:in-reply-to:references:references;
 bh=5xbVuXdPwcMfulUUbtkRVonJ9QvPhoSnhA2QiVrho74=;
 b=WrKTrvb5Ko7URzKiZSNUITzYVHpuqw1Ol4DLBEvPItztjCQbx4qGsahMWpuNdfnZGiny4W
 HmCgiHfeU+ylkQG7x3RbWAhKNlr4EtisNHjHdSOCKX/ajY8kvlk/+4+2rM7OgLp5trr8MK
 zccDHJbeMi63M4hiMlgEob3m7GsMZyE8up3/NEgQxKRvgcIXHxqvehz4i1AU8fE/aNEfwg
 eGTMeDQ01KH6UGA3/3cieMuRyEPnEO5rgwJs9quob04RwtnG/hpJl9i2hTu/6BKFCbZt4V
 kAPq/+0/ONvCIwD6Kv/6K4F88s07kP5PKISDIqshOWWrzMp9jpKditv7TcyhZw==
From: Theodor Thornhill <theo@HIDDEN>
To: =?utf-8?B?Sm/Do28gVMOhdm9yYQ==?= <joaotavora@HIDDEN>
Subject: Re: bug#70036 a fix that
In-Reply-To: <CALDnm536w_khSks_rG-X-TH+hDiVddcmv=jaMHVQT_KgFh1xkA@HIDDEN>
References: <CALDnm517N=DM+0tqBpHCGiHenPMirq2eFJF+Gk0ePO+W6WO-Ug@HIDDEN>
 <4e670617-6483-4159-a5cf-27a921764c38@HIDDEN>
 <CALDnm536w_khSks_rG-X-TH+hDiVddcmv=jaMHVQT_KgFh1xkA@HIDDEN>
Date: Fri, 19 Apr 2024 07:58:57 +0200
Message-ID: <87zftp28ri.fsf@HIDDEN>
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable
X-Migadu-Flow: FLOW_OUT
X-Spam-Score: 0.0 (/)
X-Debbugs-Envelope-To: 70036
Cc: Eli Zaretskii <eliz@HIDDEN>, 70036 <at> debbugs.gnu.org,
 felician.nemeth@HIDDEN
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -1.0 (-)

>> I'm fine. I do think you do come off strongly though, and it is not
>> always easy to judge if it is of good faith.
>
> Just think: what reason do I have to be in "bad faith"?  I just invited
> you to collaborate in the GitHub repo and I want you to keep learning
> and improving Eglot.  I just think you did a commit -- in perfectly
> good faith -- that clashes directly with what is a tenet of Eglot:
> correctness and backward compatibility.  I also think there are other
> much better ways to fix the problem (the greatest of these ideas is
> yours!!! rewrite it is C).
>

I agree - that's why I want to focus on improving the code, same as
you. I just want you to understand that being mindful on how you come
across can't really hurt. There are enough conflicts around these days,
let's not make code be one.
>> 1. Install gopls
>> 2. Make some directory you can wipe out after the test and cd into it
>> 3. git clone git@HIDDEN:theothornhill/gin.git foo/bar/baz/foo/bar/ba=
z/foo/bar/baz/foo/bar/baz/gin
>> 4. cd foo/bar/baz/foo/bar/baz/foo/bar/baz/foo/bar/baz/gin
>> 5. open fs.go in emacs and make sure some go mode is available. Go-ts-mo=
de for example
>> 6. M-x profiler-start
>> 7. M-x eglot
>> 8. Wait 10-20 seconds. Do no actions other than let the lsp settle.
>> 9. M-x profiler-stop
>> 10. M-x profiler-report
>> 11. Rinse repeat with both or all variants of emacs with/without the
>> latest eglot changes.
>> I'll add my profiles, and let some metrics talk. This is from emacs -Q
>> from your "better fix" and the commit before your revert. Please try on
>> your systems and report back.
>
> Great recipe.
>

Good!

>> By the way. I have a hunch the reason this is so apparent now is because
>> of the faster json serde recently added to emacs. Not sure, but feels
>> like it. Json serde is almost gone from the profiles.
>
> What is Json serde?  Is it Json SERialization/DEserialization?

That's right

> That commit by Hermann made it in? That's great!!  So Eglot is probably
> faster overall. So I guess your bug report is about not missing
> a further optimization opportunity.  Fine.

Yeah, that's right. I assume that when json serde disappeared as a
bottleneck others emerge. This is the obvious one to me right now.

>
> Anyway is this the hotspot I should be trying to optimize?
>
>>            9   4%              - find-buffer-visiting
>
> I still think the cleanest solution is to write file-truename
> in C.  But if that can't be done, it doesn't seem terribly hard
> to get rid of find-buffer-visiting in publishDiagnostics and
> still remain symlink-correct.

I agree, and I'm still experimenting on that. But I need to make sure I
have good test coverage on the current behavior before I start making
the C one. The initial version, while fast, was just to prove that
file-truename should be improved.

>
> That's because every interesting result of find-buffer-visiting
> is a buffer for which we've already issued a 'didOpen', which
> in turn means we've already called file-truename once for it.
> If we cache that result (the basic idea behind the "better fix")
> it should be possible to find the buffer quicker just by iterating
> the list.  That's what I will try to do, using your recipe as
> guide.
>
> Jo=C3=A3o

Sure. That will make the change you make similar in spirit to mine, yet
with a different implementation. I'm fine with that.

Theo




Information forwarded to bug-gnu-emacs@HIDDEN:
bug#70036; Package emacs. Full text available.

Message received at 70036 <at> debbugs.gnu.org:


Received: (at 70036) by debbugs.gnu.org; 19 Apr 2024 01:20:41 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Thu Apr 18 21:20:41 2024
Received: from localhost ([127.0.0.1]:55727 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1rxcvg-0006EW-GG
	for submit <at> debbugs.gnu.org; Thu, 18 Apr 2024 21:20:40 -0400
Received: from mail-lf1-x12e.google.com ([2a00:1450:4864:20::12e]:57600)
 by debbugs.gnu.org with esmtp (Exim 4.84_2)
 (envelope-from <joaotavora@HIDDEN>) id 1rxcve-0006EO-7X
 for 70036 <at> debbugs.gnu.org; Thu, 18 Apr 2024 21:20:39 -0400
Received: by mail-lf1-x12e.google.com with SMTP id
 2adb3069b0e04-516d3a470d5so1813741e87.3
 for <70036 <at> debbugs.gnu.org>; Thu, 18 Apr 2024 18:20:24 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=gmail.com; s=20230601; t=1713489618; x=1714094418; darn=debbugs.gnu.org;
 h=cc:to:subject:message-id:date:from:in-reply-to:references
 :mime-version:from:to:cc:subject:date:message-id:reply-to;
 bh=358WUPzYa2E1+/zCdA2gIXwzQK0Z/UiFizPxkzj30JQ=;
 b=h525SW6wjKuDickF7csny1dYXeX8gn30GY9aXCbf95Wq+t4fd2SMI2kRU9yPl4sCes
 iqkZqQ5tjy0ba9h5xKAu0SLwpyO/yotlGbwCD240cHepgM/ue9DP8P6dNjDayIdcPYd+
 fHjphdVap8ezmzNz0imhXw6ZSArjAipOvLQFgUI+m8xLhlNMrU/IQplCPB0BCbhSZHIS
 wr/pDkn1gCWIlge7dbu2fvfGI4F36uupduvzBEqIfKSYI4lOZAaAk295vq154b5RBgY4
 DHJre4OC3QOBDYNsMo2bK6gbJoiL/lYwBOvQZUaXc/Fi9RftS7z9oP40GZeiujOADYo1
 ekmQ==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=1e100.net; s=20230601; t=1713489618; x=1714094418;
 h=cc:to:subject:message-id:date:from:in-reply-to:references
 :mime-version:x-gm-message-state:from:to:cc:subject:date:message-id
 :reply-to;
 bh=358WUPzYa2E1+/zCdA2gIXwzQK0Z/UiFizPxkzj30JQ=;
 b=oGGFd5ZXMOElAHAKMos8VoWxTeC1NOgJGGahLfRaga0UAkAVnnB++5G3QKGY9V9sXR
 +y1/hChukQLvmGK2MJtsKNYYgMI2jfAjG30LS7rNRMt9DYoUilNMJfURHY/RKeJ/ZUGp
 asX8blL0yvJXDhjwekXDE37bK8h7kpOL69dS6wJ71ntGM9IHdVGwsdDYLnsXHNUgxVQV
 I+ghI1NQK6hT0f4ee3ew6X9hPFGUlKzTx++LHEYmT0DTSvIOT084v+HfUlSV6+mexH0m
 yyAMyGL2P2T7wQM7z4IDBtf4BJc/tBveIvASL45mvcSxmwe0wGpFMNVazq0qweanF5O6
 oxCw==
X-Forwarded-Encrypted: i=1;
 AJvYcCVkWdQJT4zEf0z5S/kZdEf6ieV1iwwrrkmtT+3hlQ6B3JmasP95KcbahgmMiBnZRN9UXUj0Swyqwcv2uvlVsnnzH+rbhYQ=
X-Gm-Message-State: AOJu0YxHqsZDDvxFaZyHTZDkv/8+bno3muPne0aiBbIyVKq3iNxkfyAu
 yv6q4Zt0jMc8nCcY9l9egUsLhv+KJ+Wl8Gmt7C+LhMws4x3T8xSB1xkLcgS/aOJalmsV6/X35ge
 CLAKp4CRMqS2pxIlm6wIhZBeNoUA=
X-Google-Smtp-Source: AGHT+IH717rQPnEMmE2ZEU+AskIVPECOFf7RR+D5ybUbBVcNRRGacf/t94S4fXTRCy4n02qargdNRe/GlT63WzXOy5Q=
X-Received: by 2002:a05:6512:401:b0:519:6e94:9b4d with SMTP id
 u1-20020a056512040100b005196e949b4dmr410268lfk.48.1713489617962; Thu, 18 Apr
 2024 18:20:17 -0700 (PDT)
MIME-Version: 1.0
References: <86y19ad61t.fsf@HIDDEN>
 <43de4151-ab68-4214-8691-33f3554feba1@HIDDEN>
 <CALDnm53J14dj1he+d8VF=ZB--XymExDkKL45XXAdVTb5VcDryw@HIDDEN>
 <86r0f2d46x.fsf@HIDDEN>
 <CALDnm50xhhcsFYqvFFUAQqRhPmqHtzo3dB5uyqQAygkW-y4EHg@HIDDEN>
 <86jzkud0be.fsf@HIDDEN>
 <CALDnm517N=DM+0tqBpHCGiHenPMirq2eFJF+Gk0ePO+W6WO-Ug@HIDDEN>
 <3333E3B9-D81B-4C62-A8F5-A8841E7A66F7@HIDDEN>
In-Reply-To: <3333E3B9-D81B-4C62-A8F5-A8841E7A66F7@HIDDEN>
From: =?UTF-8?B?Sm/Do28gVMOhdm9yYQ==?= <joaotavora@HIDDEN>
Date: Fri, 19 Apr 2024 02:20:49 +0100
Message-ID: <CALDnm53MnmuFHv0QDRUAEN2oakB7M5TfrKkyKUw9yTxgRJyitA@HIDDEN>
Subject: Re: bug#70036: a fix that
To: Yuan Fu <casouri@HIDDEN>
Content-Type: multipart/alternative; boundary="000000000000014f7c061668e4b3"
X-Spam-Score: 0.0 (/)
X-Debbugs-Envelope-To: 70036
Cc: theo@HIDDEN, Eli Zaretskii <eliz@HIDDEN>, 70036 <at> debbugs.gnu.org,
 Felician Nemeth <felician.nemeth@HIDDEN>
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -1.0 (-)

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

> > On Apr 18, 2024, at 1:21 PM, Jo=C3=A3o T=C3=A1vora <joaotavora@HIDDEN=
m> wrote:
>
> And please don=E2=80=99t take this as a criticism


It's fine Yuan.  I don't. My relationship with Eli is past mending, and it
doesn't
need to be mended.

I'm in this thread since this afternoon to understand and fix the
performance
problem without introducing a functional regression and I'm well on my way
to doing all those three things together with the person who I so violated
by reverting one of their commits among many.
Then I will fix Eglot's unit tests, or Stefan will, and then I will be
gone, keep
a closer eye on these Eglot proposals since I notice that some would-be
maintainers don't (yet) have a good grasp on tests, server variability, etc=
.
I think not many Emacs old-timers are using Eglot yet and that's crucial.
But the situation is improving slowly so eventually that too will come
sooner or later and then I will leave you more definitely and wish
you lots of success.

Jo=C3=A3o

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

<div dir=3D"ltr"><br><div class=3D"gmail_quote"><blockquote class=3D"gmail_=
quote" style=3D"margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,=
204);padding-left:1ex">
&gt; On Apr 18, 2024, at 1:21 PM, Jo=C3=A3o T=C3=A1vora &lt;<a href=3D"mail=
to:joaotavora@HIDDEN" target=3D"_blank">joaotavora@HIDDEN</a>&gt; wro=
te:<br><br>
And please don=E2=80=99t take this as a criticism</blockquote><div><br></di=
v><div>It&#39;s fine Yuan.=C2=A0 I don&#39;t. My relationship with Eli is p=
ast mending, and it doesn&#39;t=C2=A0</div><div>need to be mended. <br></di=
v><div><br></div><div>I&#39;m in this thread since this afternoon to unders=
tand and fix the performance</div><div>problem without introducing a functi=
onal regression and I&#39;m well on my way=C2=A0</div><div>to doing all tho=
se three things together with the person who I so violated=C2=A0</div><div>=
by reverting one of their commits among many.=C2=A0</div><div>Then I will f=
ix Eglot&#39;s unit tests, or Stefan will, and then I will be gone, keep</d=
iv><div>a closer eye on these Eglot proposals since I notice that some woul=
d-be=C2=A0</div><div>maintainers don&#39;t (yet) have a good grasp on tests=
, server variability, etc.</div><div>I think not many Emacs old-timers are =
using Eglot yet and that&#39;s crucial.</div><div>But the situation is impr=
oving slowly so eventually that too will come</div><div>sooner or later and=
 then I will leave you more definitely and wish=C2=A0</div><div>you lots of=
 success.</div><div><br></div><div>Jo=C3=A3o<br></div></div></div>

--000000000000014f7c061668e4b3--




Information forwarded to bug-gnu-emacs@HIDDEN:
bug#70036; Package emacs. Full text available.

Message received at 70036 <at> debbugs.gnu.org:


Received: (at 70036) by debbugs.gnu.org; 19 Apr 2024 00:58:14 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Thu Apr 18 20:58:14 2024
Received: from localhost ([127.0.0.1]:55626 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1rxcZy-00045b-2e
	for submit <at> debbugs.gnu.org; Thu, 18 Apr 2024 20:58:14 -0400
Received: from mail-pf1-x435.google.com ([2607:f8b0:4864:20::435]:52317)
 by debbugs.gnu.org with esmtp (Exim 4.84_2)
 (envelope-from <casouri@HIDDEN>) id 1rxcZv-00044c-Pq
 for 70036 <at> debbugs.gnu.org; Thu, 18 Apr 2024 20:58:13 -0400
Received: by mail-pf1-x435.google.com with SMTP id
 d2e1a72fcca58-6ed054f282aso1309293b3a.0
 for <70036 <at> debbugs.gnu.org>; Thu, 18 Apr 2024 17:57:57 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=gmail.com; s=20230601; t=1713488272; x=1714093072; darn=debbugs.gnu.org;
 h=to:references:message-id:content-transfer-encoding:cc:date
 :in-reply-to:from:subject:mime-version:from:to:cc:subject:date
 :message-id:reply-to;
 bh=lKK2ECSN3E3OrD4sIYEnZ/KptVCfJN2jiXLNJ1nqI2g=;
 b=l314oQ/3HBwLcm2pb5DxlM39zhY2orrr8wjaZgmkb4s56MfLNchy+cHNZOliKFNnCE
 Oql0ex8kLpJw54FsGYfudwGVtOQoOm+pQ5s0eLlsB0WTtOohhGJMbzjTmhNrQuXAACfo
 gkIBBgK5XrfjIhC1ak6N5A/npX52LnrI/h4VqIFPPkqUUSPhfM+exJbnNenXOOyi/ftj
 +azPddwhyC3RyG0xl09GLK6s6KvQhXTLVzcBoLN6EIAf0ULCAjkgCH/bAVEF0TW1xNpU
 FtrEzbwF/IIVHhvIf4O4kUxaJi6CsXgtEZgabzbVxzNnJXSImn/DZLoqnZBorgP/r/W+
 NpdQ==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=1e100.net; s=20230601; t=1713488272; x=1714093072;
 h=to:references:message-id:content-transfer-encoding:cc:date
 :in-reply-to:from:subject:mime-version:x-gm-message-state:from:to:cc
 :subject:date:message-id:reply-to;
 bh=lKK2ECSN3E3OrD4sIYEnZ/KptVCfJN2jiXLNJ1nqI2g=;
 b=wShOP8VRdiipG9vCwosBAho1anEuwwkGAtMFJKY1k+up1bALYzEz08mXYX3nGMcmeo
 QS4nEwXe+nB76h4/v+7+ast9Sdyk4247qvBlKPTixJbxPZ0NEb50RdJnYzDDl+y+JM6n
 iq4SM4AIrmyVG4XUfUQNm1ukoo/4jDF9Iln9UTp6RT6w8jqNxK/+hgJTa5jgnMeJQ4Je
 vdMoBH9xqb7uFXKejy+RuOu4tpk7aurAY0QqJ08enbRhmNzpooY3NYcweCkDqOiGbMYN
 8vxK0mCVuhcB8I6i94mqMKnUTGPyASz8aVANpUuZKMPdHiMjR9TajwbjMSU2nFd5YexN
 eGVg==
X-Forwarded-Encrypted: i=1;
 AJvYcCXa5NhzE+BZUXhQAlZUDhzFolBq/qUGa5iKpcJ+twNrmW9kPxsyyxvB/wPPhr9WOmpmC0pyY1W8Cb9f/aopRiJwBmMUuSQ=
X-Gm-Message-State: AOJu0YzoMBGDgRw/TjNBYd0BaQE5TqumIKIdRm7PQE76O8wxvlq9TeSA
 briszaxl2nTq8o2VHwIyZqH5U+1s+jTiBNXjSwuzrtAOIdqvs2FG
X-Google-Smtp-Source: AGHT+IHMrFa1qKyVtqF7vavEe9P9YJArVLgrloxh+pJNVBJRa9qX1u5RqARIffnmRnkN7Yd0gx7HOg==
X-Received: by 2002:a05:6a20:918f:b0:1a7:5184:8d14 with SMTP id
 v15-20020a056a20918f00b001a751848d14mr1046496pzd.46.1713488271813; 
 Thu, 18 Apr 2024 17:57:51 -0700 (PDT)
Received: from smtpclient.apple ([2601:641:300:4910:7d73:e45c:650a:d52f])
 by smtp.gmail.com with ESMTPSA id
 h3-20020a056a00218300b006ed4aa9d48esm2084207pfi.212.2024.04.18.17.57.50
 (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128);
 Thu, 18 Apr 2024 17:57:51 -0700 (PDT)
Content-Type: text/plain;
	charset=utf-8
Mime-Version: 1.0 (Mac OS X Mail 16.0 \(3731.700.6\))
Subject: Re: bug#70036: a fix that
From: Yuan Fu <casouri@HIDDEN>
In-Reply-To: <CALDnm517N=DM+0tqBpHCGiHenPMirq2eFJF+Gk0ePO+W6WO-Ug@HIDDEN>
Date: Thu, 18 Apr 2024 17:57:39 -0700
Content-Transfer-Encoding: quoted-printable
Message-Id: <3333E3B9-D81B-4C62-A8F5-A8841E7A66F7@HIDDEN>
References: <86y19ad61t.fsf@HIDDEN>
 <43de4151-ab68-4214-8691-33f3554feba1@HIDDEN>
 <CALDnm53J14dj1he+d8VF=ZB--XymExDkKL45XXAdVTb5VcDryw@HIDDEN>
 <86r0f2d46x.fsf@HIDDEN>
 <CALDnm50xhhcsFYqvFFUAQqRhPmqHtzo3dB5uyqQAygkW-y4EHg@HIDDEN>
 <86jzkud0be.fsf@HIDDEN>
 <CALDnm517N=DM+0tqBpHCGiHenPMirq2eFJF+Gk0ePO+W6WO-Ug@HIDDEN>
To: =?utf-8?B?Sm/Do28gVMOhdm9yYQ==?= <joaotavora@HIDDEN>
X-Mailer: Apple Mail (2.3731.700.6)
X-Spam-Score: 0.0 (/)
X-Debbugs-Envelope-To: 70036
Cc: theo@HIDDEN, Eli Zaretskii <eliz@HIDDEN>, 70036 <at> debbugs.gnu.org,
 Felician Nemeth <felician.nemeth@HIDDEN>
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -1.0 (-)



> On Apr 18, 2024, at 1:21 PM, Jo=C3=A3o T=C3=A1vora =
<joaotavora@HIDDEN> wrote:
>=20
> On Thu, Apr 18, 2024 at 6:53=E2=80=AFPM Eli Zaretskii <eliz@HIDDEN> =
wrote:
>=20
>> I suggest to get an objective opinion of that from an uninvolved
>> party.
>=20
> I suggest you drop your sarcasm not because it hurts me or anything
> but just because you're not very good at it.

I wouldn=E2=80=99t consider it sarcasm, I=E2=80=99m sure Eli does mean =
that he=E2=80=99s an uninvolved party, in the sense that he=E2=80=99s =
neither Theo nor you.

>=20
>>> So let's skip the morals.
>>=20
>> No, let's not.
>=20
> Really, you want to go at it again?  Well let me just add a pinch of
> salt to your typical condescension lecture, getting some facts =
straight
> about what happened here.

I=E2=80=99m absolutely sure that you don=E2=80=99t want to hurt anyone =
on this list, and I=E2=80=99m sure you have way too many Emacs work to =
take care of in the limited personal time you got. But, I can see that =
to an average person in the English-speaking culture, your words can =
sound a bit harsh. Theo is an adult, yes, but why not be extra nice to =
each other when we can? To me, taking some extra care for our fellow =
Emacs developers in this cold world is definitely well worth it, even if =
it means writing longer sentences :-)

I hope you don=E2=80=99t take Eli=E2=80=99s reply as sarcasm plus =
lecture, because I can see that he definitely doesn=E2=80=99t mean it. =
He=E2=80=99s trying to maintain a nice, friendly environment for Emacs =
developers, which is part of the job of a maintainer. He=E2=80=99s =
succinctness in phrasing probably didn=E2=80=99t help here, but given =
the amount of messages he needs to reply everyday, I can=E2=80=99t =
really blame him ;-)

And please don=E2=80=99t take this as a criticism, it=E2=80=99s =
understandable to feel what you felt in the conversation. I just want to =
share a more benefit-of-the-doubt-y view from a third-party. I=E2=80=99ll =
be very sad if you, Eli, and any fellow developers ends up in heated =
arguments and bad mood because of misunderstandings and =
miscommunication.


Yuan=




Information forwarded to bug-gnu-emacs@HIDDEN:
bug#70036; Package emacs. Full text available.

Message received at 70036 <at> debbugs.gnu.org:


Received: (at 70036) by debbugs.gnu.org; 18 Apr 2024 23:59:44 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Thu Apr 18 19:59:43 2024
Received: from localhost ([127.0.0.1]:55402 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1rxbfI-0006HY-Ik
	for submit <at> debbugs.gnu.org; Thu, 18 Apr 2024 19:59:43 -0400
Received: from mail-lj1-x22b.google.com ([2a00:1450:4864:20::22b]:43504)
 by debbugs.gnu.org with esmtp (Exim 4.84_2)
 (envelope-from <joaotavora@HIDDEN>) id 1rxbfG-0006GN-83
 for 70036 <at> debbugs.gnu.org; Thu, 18 Apr 2024 19:59:39 -0400
Received: by mail-lj1-x22b.google.com with SMTP id
 38308e7fff4ca-2dae975d0dcso25581181fa.1
 for <70036 <at> debbugs.gnu.org>; Thu, 18 Apr 2024 16:59:24 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=gmail.com; s=20230601; t=1713484758; x=1714089558; darn=debbugs.gnu.org;
 h=cc:to:subject:message-id:date:from:in-reply-to:references
 :mime-version:from:to:cc:subject:date:message-id:reply-to;
 bh=V9+W8dCveVR2yaZtCWdaxb+sNDspj5ia5ArMQ4W97mc=;
 b=DZBo70YCt/+M8MVFQxgY7qnehtSR1aA7rEpISd+D70fbmviqpQn//QOhKR03J5aLC8
 pHigLOAT0mfEPrAAc1uY7xvQsrBKydJZhZG7NLCAACHjUPTwCJFfLY3r8u971Mnla8c4
 lrrfkkWhklN4Y/JAwCSpDIsVIVI6mxPZAvJhYsAFwk6uexKZs0J1KYFyWEqQurnlRqG3
 +8NJ8ViQkADDaXYCGFIZcKuYxBpmDoHlQgn6Vk7RTeXX/m6o1N0zClg9xWbHldUrM4D+
 3p60484Y14CCpmX3zXttiTNHY599vhCRCTRXt3iAz+0LWnLCJHZmBMpVTO0jw3cwk6Gd
 KQ+g==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=1e100.net; s=20230601; t=1713484758; x=1714089558;
 h=cc:to:subject:message-id:date:from:in-reply-to:references
 :mime-version:x-gm-message-state:from:to:cc:subject:date:message-id
 :reply-to;
 bh=V9+W8dCveVR2yaZtCWdaxb+sNDspj5ia5ArMQ4W97mc=;
 b=OJQt8IbwzIcXW3O+ikWHN04QGUr2bXTWPutKT2bKaVASrrPzqNmjtlgOaxLGLY7qva
 qG9/FAr9IlLY9tXrxwhJMHCfQC80EmFJTkY2BQO+e9givTBNpjdDiu6lSXP496g9gigy
 KNEPPLaQUfJas8x572hZHP3TZfg990wgZKGvemU+DsTMwnl4a7uawnRn5Ix0xF1nyenc
 3PzfgSJ4+nyzsELaoKaDHpsMzJ+XD5zV6XdMAwdHic+Ve6I3r06oxVzYR0on03M/YU0h
 gPlxFoj3nQ5Aq1xcoDgo3oEM7ZXyAiqUghXxOily9VWdgz+coNnpekfNaTKHsfo3NPzr
 fhFg==
X-Forwarded-Encrypted: i=1;
 AJvYcCVqwDcBmv6Nz01plmI4llvV071v2KTHuw5VoGML5OxoPAncaQGIWJcL/HmuldxYnxm9MrXtmh3GUBp+v7Q/+RiuhsxSLgg=
X-Gm-Message-State: AOJu0YwSnFJgwflgW3xDxpwRw8HZYxKfgppOYMttLPGbGuXJyHNrXmxy
 ulilS7bguSel9jYnTOoeqNLzT4feNJx2tVpF3vvU86eZPM3uJBMD806yE9ZAiolp1TIwsS2yYAm
 cqd+X+G/QIAqawUYpTYjVxn1S0cM=
X-Google-Smtp-Source: AGHT+IHS+wfr2nViYy7gKSBRNNii08ESXfo1r67VTerXgZsqQmPYsbCuUB2HyWft3I/Av22c4Z03xx++fBwUvcWITKs=
X-Received: by 2002:a2e:b94d:0:b0:2d8:606d:c797 with SMTP id
 13-20020a2eb94d000000b002d8606dc797mr172314ljs.10.1713484758122; Thu, 18 Apr
 2024 16:59:18 -0700 (PDT)
MIME-Version: 1.0
References: <CALDnm517N=DM+0tqBpHCGiHenPMirq2eFJF+Gk0ePO+W6WO-Ug@HIDDEN>
 <4e670617-6483-4159-a5cf-27a921764c38@HIDDEN>
 <CALDnm536w_khSks_rG-X-TH+hDiVddcmv=jaMHVQT_KgFh1xkA@HIDDEN>
In-Reply-To: <CALDnm536w_khSks_rG-X-TH+hDiVddcmv=jaMHVQT_KgFh1xkA@HIDDEN>
From: =?UTF-8?B?Sm/Do28gVMOhdm9yYQ==?= <joaotavora@HIDDEN>
Date: Fri, 19 Apr 2024 00:59:49 +0100
Message-ID: <CALDnm50A9aA6Eitis-NXiPRS4vYEB0obaX5zaCfARKSe5ZDFRA@HIDDEN>
Subject: Re: bug#70036 a fix that
To: Theodor Thornhill <theo@HIDDEN>
Content-Type: multipart/alternative; boundary="000000000000560951061667c2ac"
X-Spam-Score: 0.0 (/)
X-Debbugs-Envelope-To: 70036
Cc: Eli Zaretskii <eliz@HIDDEN>, 70036 <at> debbugs.gnu.org,
 felician.nemeth@HIDDEN
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -1.0 (-)

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

On Thu, Apr 18, 2024 at 11:06=E2=80=AFPM Jo=C3=A3o T=C3=A1vora <joaotavora@=
gmail.com> wrote:

> Anyway is this the hotspot I should be trying to optimize?
>
> >            9   4%              - find-buffer-visiting

Alright, i've reproduced this

          33   5%       - eglot-handle-notification
          33   5%        - apply
          33   5%         - #<compiled-function B79>
          29   4%          - find-buffer-visiting
          29   4%           - file-truename
          29   4%            - file-truename
          25   4%             - file-truename
          25   4%              - file-truename
          25   4%               - file-truename
          25   4%                - file-truename
          25   4%                 + file-truename

But I have to say, I wouldn't call this a severe performance penalty.
I followed your instructions very closely and invoked Emacs like this:

emacs -Q foo/bar/baz/foo/bar/baz/foo/bar/baz/foo/bar/baz/gin/fs.go  -f
go-ts-mode

The directory is ~/tmp/theo/foo/bar... so it's a pretty long path with
many directories all in all.

But I didn't have to wait 10 seconds for the LSP to settle down!  It was
pretty snappy on my 2018 Lenovo T480 running Archlinux.  And if I
profile anything other than the initial M-x eglot (which normally happens
only once in a work session), I don't find any file-truename in the profile=
.

So my perception is that it must have spent around 4% of 1 second in
file-truename.

Anyway the reason this shows in this profile is because this project
with this particular server sends a lot of publishDiagnostics upfront.
That's OK.  Gopls is a very good server.  I think I see a fix.  But can
you qualitatively describe the Eglot experience.  Do you notice any
input lag or something like that? With this project?  I didn't feel _any_
lag.
Super snappy.  Maybe the JSON serde kicking in?

Anyway, the idea I suggested earlier is in the patch after  my sig.

Let's think:  LSP's publishDiagnostics coming from the server deals
in URIs, right?  And we inform the LSP server about URIs, too, right?
So the URI is always LSP's idea of the resource identifier (and it likes
to have truename URI).

My last "better fix" commit records this URI in the buffer as a buffer
local variable eglot--cached-tdi and it has to do that for every didOpen.

So, to find an open buffer pertaining to  a certain LSP's publishDiagnostic=
s
it suffices in theory to go through all the buffers that have a non-nil
cached
URI and compare that.

No need to convert from URI to file names, not for this job at least!
I tried this and it worked fine.

When I do that, the profile is completely free of those 4% that
bothered you.

I'm still testing this for edge cases and will sleep on it, but it seems
promisingly simple at least.  I can't run unit tests right now, because
a recent adventurous commit by Stefan Monnier broke them all :-)
but I'm confident that will be fixed soon...

I hope you can try this patch.

Jo=C3=A3o

diff --git a/lisp/progmodes/eglot.el b/lisp/progmodes/eglot.el
index 90a607075d3..38a16b15e4c 100644
--- a/lisp/progmodes/eglot.el
+++ b/lisp/progmodes/eglot.el
@@ -2381,6 +2381,9 @@ eglot-handle-notification
                         (lambda ()
                           (remhash token (eglot--progress-reporters
server))))))))))

+(defvar-local eglot--cached-tdi nil
+  "A cached LSP TextDocumentIdentifier URI string.")
+
 (cl-defmethod eglot-handle-notification
   (_server (_method (eql textDocument/publishDiagnostics)) &key uri
diagnostics
            &allow-other-keys) ; FIXME: doesn't respect `eglot-strict-mode'
@@ -2391,9 +2394,14 @@ eglot-handle-notification
                     ((=3D sev 2)  'eglot-warning)
                     (t          'eglot-note)))
             (mess (source code message)
-              (concat source (and code (format " [%s]" code)) ": "
message)))
+              (concat source (and code (format " [%s]" code)) ": "
message))
+            (find-it (uri)
+              (cl-loop for b in (buffer-list)
+                       when (with-current-buffer b
+                              (equal eglot--cached-tdi uri))
+                       return b)))
     (if-let* ((path (expand-file-name (eglot-uri-to-path uri)))
-              (buffer (find-buffer-visiting path)))
+              (buffer (find-it uri)))
         (with-current-buffer buffer
           (cl-loop
            initially
@@ -2518,9 +2526,6 @@ eglot-handle-request
      (t (setq success :json-false)))
     `(:success ,success)))

-(defvar-local eglot--cached-tdi nil
-  "A cached LSP TextDocumentIdentifier URI string.")
-
 (defun eglot--TextDocumentIdentifier ()
   "Compute TextDocumentIdentifier object for current buffer."
   `(:uri ,(or eglot--cached-tdi

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

<div dir=3D"ltr">On Thu, Apr 18, 2024 at 11:06=E2=80=AFPM Jo=C3=A3o T=C3=A1=
vora &lt;<a href=3D"mailto:joaotavora@HIDDEN">joaotavora@HIDDEN</a>&g=
t; wrote:<br><br>&gt; Anyway is this the hotspot I should be trying to opti=
mize?<br>&gt;<br>&gt; &gt; =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A09 =C2=
=A0 4% =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0- find-buffer-visiti=
ng<br><br>Alright, i&#39;ve reproduced this<br><br>=C2=A0 =C2=A0 =C2=A0 =C2=
=A0 =C2=A0 33 =C2=A0 5% =C2=A0 =C2=A0 =C2=A0 - eglot-handle-notification<br=
>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 33 =C2=A0 5% =C2=A0 =C2=A0 =C2=A0 =C2=
=A0- apply<br>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 33 =C2=A0 5% =C2=A0 =C2=A0=
 =C2=A0 =C2=A0 - #&lt;compiled-function B79&gt;<br>=C2=A0 =C2=A0 =C2=A0 =C2=
=A0 =C2=A0 29 =C2=A0 4% =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0- find-buffer-vis=
iting<br>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 29 =C2=A0 4% =C2=A0 =C2=A0 =C2=
=A0 =C2=A0 =C2=A0 - file-truename<br>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 29 =
=C2=A0 4% =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0- file-truename<br>=C2=
=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 25 =C2=A0 4% =C2=A0 =C2=A0 =C2=A0 =C2=A0 =
=C2=A0 =C2=A0 - file-truename<br>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 25 =C2=
=A0 4% =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0- file-truename<br>=
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 25 =C2=A0 4% =C2=A0 =C2=A0 =C2=A0 =C2=A0=
 =C2=A0 =C2=A0 =C2=A0 - file-truename<br>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0=
 25 =C2=A0 4% =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0- file=
-truename<br>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 25 =C2=A0 4% =C2=A0 =C2=A0 =
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 + file-truename<br><br>But I have=
 to say, I wouldn&#39;t call this a severe performance penalty.<br>I follow=
ed your instructions very closely and invoked Emacs like this:<br><br>emacs=
 -Q foo/bar/baz/foo/bar/baz/foo/bar/baz/foo/bar/baz/gin/fs.go =C2=A0-f go-t=
s-mode<br><br><div>The directory is ~/tmp/theo/foo/bar... so it&#39;s a pre=
tty long path with</div><div>many directories all in all.</div><br>But I di=
dn&#39;t have to wait 10 seconds for the LSP to settle down!=C2=A0 It was<b=
r>pretty snappy on my 2018 Lenovo T480 running Archlinux.=C2=A0 And if I <b=
r>profile anything other than the initial M-x eglot (which normally happens=
<br><div>only once in a work session), I don&#39;t find any file-truename i=
n the profile.</div><div><br></div><div>So my perception is that it must ha=
ve spent around 4% of 1 second in <br></div><div>file-truename.<br></div><b=
r><div>Anyway the reason this shows in this profile is because this project=
=C2=A0</div><div>with this particular server sends a lot of publishDiagnost=
ics upfront. =C2=A0</div><div>That&#39;s OK.=C2=A0 Gopls is a very good ser=
ver.=C2=A0 I think I see a fix.=C2=A0 But can=C2=A0</div><div>you qualitati=
vely describe the Eglot experience.=C2=A0 Do you notice any=C2=A0</div><div=
>input lag or something like that? With this project?=C2=A0 I didn&#39;t fe=
el _any_ lag.</div><div>Super snappy.=C2=A0 Maybe the JSON serde kicking in=
?<br></div><br><div>Anyway, the idea I suggested earlier is in the patch af=
ter=C2=A0 my sig.</div><div><br></div><div>Let&#39;s think:=C2=A0 LSP&#39;s=
 publishDiagnostics coming from the server deals=C2=A0</div><div>in URIs, r=
ight?=C2=A0 And we inform the LSP server about URIs, too, right?</div><div>=
So the URI is always LSP&#39;s idea of the resource identifier (and it like=
s</div><div>to have truename URI).<br></div><div><br></div><div>My last &qu=
ot;better fix&quot; commit records this URI in the buffer as a buffer</div>=
<div>local variable eglot--cached-tdi and it has to do that for every didOp=
en.<br></div><div><br></div><div>So, to find an open buffer pertaining to=
=C2=A0 a certain LSP&#39;s publishDiagnostics</div><div>it suffices in theo=
ry to go through all the buffers that have a non-nil cached</div><div>URI a=
nd compare that. =C2=A0</div><div><br></div><div>No need to convert from UR=
I to file names, not for this job at least!</div><div>I tried this and it w=
orked fine.<br></div><br>When I do that, the profile is completely free of =
those 4% that <br><div>bothered you.</div><div><br></div><div>I&#39;m still=
 testing this for edge cases and will sleep on it, but it seems=C2=A0</div>=
<div>promisingly simple at least.=C2=A0 I can&#39;t run unit tests right no=
w, because</div><div>a recent adventurous commit by Stefan Monnier broke th=
em all :-)=C2=A0</div><div>but I&#39;m confident that will be fixed soon...=
<br></div><div><br></div><div>I hope you can try this patch.<br></div><br><=
div>Jo=C3=A3o</div><div><br></div>diff --git a/lisp/progmodes/eglot.el b/li=
sp/progmodes/eglot.el<br>index 90a607075d3..38a16b15e4c 100644<br>--- a/lis=
p/progmodes/eglot.el<br>+++ b/lisp/progmodes/eglot.el<br>@@ -2381,6 +2381,9=
 @@ eglot-handle-notification<br>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0(lambda ()<br>=C2=A0 =C2=A0=
 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=
=A0 =C2=A0(remhash token (eglot--progress-reporters server))))))))))<br>=C2=
=A0<br>+(defvar-local eglot--cached-tdi nil<br>+ =C2=A0&quot;A cached LSP T=
extDocumentIdentifier URI string.&quot;)<br>+<br>=C2=A0(cl-defmethod eglot-=
handle-notification<br>=C2=A0 =C2=A0(_server (_method (eql textDocument/pub=
lishDiagnostics)) &amp;key uri diagnostics<br>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =
=C2=A0 =C2=A0 &amp;allow-other-keys) ; FIXME: doesn&#39;t respect `eglot-st=
rict-mode&#39;<br>@@ -2391,9 +2394,14 @@ eglot-handle-notification<br>=C2=
=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0((=
=3D sev 2) =C2=A0&#39;eglot-warning)<br>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0(t =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=
=A0&#39;eglot-note)))<br>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0(m=
ess (source code message)<br>- =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =
=C2=A0(concat source (and code (format &quot; [%s]&quot; code)) &quot;: &qu=
ot; message)))<br>+ =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0(concat=
 source (and code (format &quot; [%s]&quot; code)) &quot;: &quot; message))=
<br>+ =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0(find-it (uri)<br>+ =C2=A0 =
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0(cl-loop for b in (buffer-list)<br=
>+ =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =
=C2=A0 when (with-current-buffer b<br>+ =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0(equal=
 eglot--cached-tdi uri))<br>+ =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=
=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 return b)))<br>=C2=A0 =C2=A0 =C2=A0(if-let*=
 ((path (expand-file-name (eglot-uri-to-path uri)))<br>- =C2=A0 =C2=A0 =C2=
=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0(buffer (find-buffer-visiting path)))<br>+ =
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0(buffer (find-it uri)))<br>=
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0(with-current-buffer buffer<br>=C2=A0 =C2=
=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0(cl-loop<br>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=
=A0 =C2=A0 initially<br>@@ -2518,9 +2526,6 @@ eglot-handle-request<br>=C2=
=A0 =C2=A0 =C2=A0 (t (setq success :json-false)))<br>=C2=A0 =C2=A0 =C2=A0`(=
:success ,success)))<br>=C2=A0<br>-(defvar-local eglot--cached-tdi nil<br>-=
 =C2=A0&quot;A cached LSP TextDocumentIdentifier URI string.&quot;)<br>-<br=
>=C2=A0(defun eglot--TextDocumentIdentifier ()<br>=C2=A0 =C2=A0&quot;Comput=
e TextDocumentIdentifier object for current buffer.&quot;<br>=C2=A0 =C2=A0`=
(:uri ,(or eglot--cached-tdi<br></div>

--000000000000560951061667c2ac--




Information forwarded to bug-gnu-emacs@HIDDEN:
bug#70036; Package emacs. Full text available.

Message received at 70036 <at> debbugs.gnu.org:


Received: (at 70036) by debbugs.gnu.org; 18 Apr 2024 22:07:23 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Thu Apr 18 18:07:23 2024
Received: from localhost ([127.0.0.1]:54962 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1rxZub-0001of-Uh
	for submit <at> debbugs.gnu.org; Thu, 18 Apr 2024 18:07:22 -0400
Received: from mail-lj1-x22a.google.com ([2a00:1450:4864:20::22a]:59597)
 by debbugs.gnu.org with esmtp (Exim 4.84_2)
 (envelope-from <joaotavora@HIDDEN>) id 1rxZua-0001nn-5J
 for 70036 <at> debbugs.gnu.org; Thu, 18 Apr 2024 18:07:21 -0400
Received: by mail-lj1-x22a.google.com with SMTP id
 38308e7fff4ca-2d87660d5c9so14704131fa.2
 for <70036 <at> debbugs.gnu.org>; Thu, 18 Apr 2024 15:07:06 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=gmail.com; s=20230601; t=1713478020; x=1714082820; darn=debbugs.gnu.org;
 h=content-transfer-encoding:cc:to:subject:message-id:date:from
 :in-reply-to:references:mime-version:from:to:cc:subject:date
 :message-id:reply-to;
 bh=cnDehmav1rOAZ70VpWy44L6AG18BzzAO0eNSpTci/QM=;
 b=AezBtUzcEDbSO3T4DRqqOolEh2i5xiGMz+GMn2MOJ7kjFeuK35lBbJC2/7DZ9wtEo8
 2EBORALOydPSYIpUjexdwxCwmmU4gR7SneRiDCht6BulubtFLKxjQ/80Q2FgFH5dq5vY
 qNxXekTmE6DbJxnll4hBZl0lfjUjuIi7KoRmvCe8wDDU2VoyF8nT5wOUH+eQU7rLC2im
 LTWAo1ievD+htTENvfULlfhZiAELSiVZWDHAThyZzo0SJKKnNhDQBtjhG9bEK5aNUdK4
 u6t28XHXMY4EbsjKtT5X9d6VNa+lJnnUaWLhuneIxCUiuTC8SJ733KIjNGzqD7Gm21ud
 PZKQ==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=1e100.net; s=20230601; t=1713478020; x=1714082820;
 h=content-transfer-encoding:cc:to:subject:message-id:date:from
 :in-reply-to:references:mime-version:x-gm-message-state:from:to:cc
 :subject:date:message-id:reply-to;
 bh=cnDehmav1rOAZ70VpWy44L6AG18BzzAO0eNSpTci/QM=;
 b=j3mbHquE1iicsIf725GQjPW0LeMPTm2rkez16NWF9NjjD+e+yb3vFpg5CdvNhhSe7k
 EyoWaQUFaJdAENJgDfENH4mtCU7NllUi5D1QGRDW9Kr7V9M2QsPfdvFSuI6RaS7Fo7SE
 EiF0SfsQIgbD9Y7WEPnurLSy/JOvaUwjNe7ibmWhceb4e9Hm/KagOFoC7lwq6fTQBkVW
 T82kQpDFaghtZT+P1UTzhUi6+5qiMRrcyZMf25ZFR8BrcRf7w0gY7jAFRc1Wt880aiWP
 6WJFKI+BkJVvZsVB0e8V3uY5zmYK19RlNEpZ6jUNy2ZPk6C1+Gqrz7QkYflWmxGDDJOi
 wRGQ==
X-Forwarded-Encrypted: i=1;
 AJvYcCUiwcHN85TtO7Lj1i+9qRfnCHCUgdH9XEaYws+LIrLYFVtfupCIBAngGP8WesuMrFv48UrjllST0YbPfnCOduXz4o2RE0Y=
X-Gm-Message-State: AOJu0Yx4KPUdd5JPvS/LtlNw7+Wt/J4VvAGvQNgcASrN00ZGtD7RpGD5
 2CP8h6nNmRIxOhGon/RXkRrV9pvJEqVFBvN1MqSenK49Tleir5LPqmpl1/d2Eu+g05oz4EbpPVu
 TbvApy3g+lGZpNinqKnRAjg9rrN8=
X-Google-Smtp-Source: AGHT+IGjjlSXcNqhQ/Slx5HfD8ItoBW5hdLJeNoKirjdKPjBTX8QW1YrFVdLXKcnFDiFyJl2XuS5fNj/ZIwNjnTc8vI=
X-Received: by 2002:a2e:938d:0:b0:2d9:fa96:1620 with SMTP id
 g13-20020a2e938d000000b002d9fa961620mr160991ljh.29.1713478020011; Thu, 18 Apr
 2024 15:07:00 -0700 (PDT)
MIME-Version: 1.0
References: <CALDnm517N=DM+0tqBpHCGiHenPMirq2eFJF+Gk0ePO+W6WO-Ug@HIDDEN>
 <4e670617-6483-4159-a5cf-27a921764c38@HIDDEN>
In-Reply-To: <4e670617-6483-4159-a5cf-27a921764c38@HIDDEN>
From: =?UTF-8?B?Sm/Do28gVMOhdm9yYQ==?= <joaotavora@HIDDEN>
Date: Thu, 18 Apr 2024 23:06:47 +0100
Message-ID: <CALDnm536w_khSks_rG-X-TH+hDiVddcmv=jaMHVQT_KgFh1xkA@HIDDEN>
Subject: Re: bug#70036 a fix that
To: Theodor Thornhill <theo@HIDDEN>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable
X-Spam-Score: 0.0 (/)
X-Debbugs-Envelope-To: 70036
Cc: Eli Zaretskii <eliz@HIDDEN>, 70036 <at> debbugs.gnu.org,
 felician.nemeth@HIDDEN
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -1.0 (-)

On Thu, Apr 18, 2024 at 10:32=E2=80=AFPM Theodor Thornhill <theo@thornhill.=
no> wrote:
>
> Im having some email client issues. I hope this mail renders readable.

> > It doesn't suggest anything other than it, nothing about
> > textDocument/publishDiagnostics.  There's 0 data about that
> > and it never showed up in my profile.
>
> I don't remember exactly right now, but I believe I mentioned many times
> the performance of file-truename directly, and find-buffer-visiting
> which uses file-truename indirectly.

Yes, but that's not the same as saying there's data about it.  Your
profiles don't show find-buffer-visiting as a hotspot.  Or did I miss
any?

> Did I decline? I've lost track, but I believe I said something in the
> lines of "let's discuss it first", but nevermind.

Well, that's declining.  Politely, but declining :)

> > Still, for the very little data that there is available, I do take care
> > to put in a much simpler fix that completely fixes the issue - as far a=
s
> > I or anyone reading the available data can see it.
>
> With this I disagree - but I guess I either have miscommunicated or have
> provided unclear profiles or something inbetween.

I scanned the bug thread twice and couldn't find any other profiles.
There are mentions of textDocument/publishDiagnostics, but no actual
profile data or information of how to see the performance problem.

Maybe _I_ missed something.  But I see you have now sent a perfect
reproduction, so it doesn't matter.

> > And nothing serious will happen after I reverted it, will there?
>
> Not serious, but now we have a performance regression ;-)

As far as we can tell, *you* have one.  Noone else has -- as far as I
can tell from the 7 years that code has been there.  So I wouldn't
really call this a "regression", but that doesn't mean I won't try
to solve it.  I'm confident it can be done. Incidentally I work on
deep repos *with* symlinks, so I'm personally interested in the solution
too.

> I'm fine. I do think you do come off strongly though, and it is not
> always easy to judge if it is of good faith.

Just think: what reason do I have to be in "bad faith"?  I just invited
you to collaborate in the GitHub repo and I want you to keep learning
and improving Eglot.  I just think you did a commit -- in perfectly
good faith -- that clashes directly with what is a tenet of Eglot:
correctness and backward compatibility.  I also think there are other
much better ways to fix the problem (the greatest of these ideas is
yours!!! rewrite it is C).

> And I don't think Eli moralizes on my behalf.

I don't know why it's done and I don't care, but I think it helps noone.

> 1. Install gopls
> 2. Make some directory you can wipe out after the test and cd into it
> 3. git clone git@HIDDEN:theothornhill/gin.git foo/bar/baz/foo/bar/baz=
/foo/bar/baz/foo/bar/baz/gin
> 4. cd foo/bar/baz/foo/bar/baz/foo/bar/baz/foo/bar/baz/gin
> 5. open fs.go in emacs and make sure some go mode is available. Go-ts-mod=
e for example
> 6. M-x profiler-start
> 7. M-x eglot
> 8. Wait 10-20 seconds. Do no actions other than let the lsp settle.
> 9. M-x profiler-stop
> 10. M-x profiler-report
> 11. Rinse repeat with both or all variants of emacs with/without the
> latest eglot changes.
> I'll add my profiles, and let some metrics talk. This is from emacs -Q
> from your "better fix" and the commit before your revert. Please try on
> your systems and report back.

Great recipe.

> By the way. I have a hunch the reason this is so apparent now is because
> of the faster json serde recently added to emacs. Not sure, but feels
> like it. Json serde is almost gone from the profiles.

What is Json serde?  Is it Json SERialization/DEserialization?
That commit by Hermann made it in? That's great!!  So Eglot is probably
faster overall. So I guess your bug report is about not missing
a further optimization opportunity.  Fine.

Anyway is this the hotspot I should be trying to optimize?

>            9   4%              - find-buffer-visiting

I still think the cleanest solution is to write file-truename
in C.  But if that can't be done, it doesn't seem terribly hard
to get rid of find-buffer-visiting in publishDiagnostics and
still remain symlink-correct.

That's because every interesting result of find-buffer-visiting
is a buffer for which we've already issued a 'didOpen', which
in turn means we've already called file-truename once for it.
If we cache that result (the basic idea behind the "better fix")
it should be possible to find the buffer quicker just by iterating
the list.  That's what I will try to do, using your recipe as
guide.

Jo=C3=A3o




Information forwarded to bug-gnu-emacs@HIDDEN:
bug#70036; Package emacs. Full text available.

Message received at 70036 <at> debbugs.gnu.org:


Received: (at 70036) by debbugs.gnu.org; 18 Apr 2024 21:37:40 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Thu Apr 18 17:37:40 2024
Received: from localhost ([127.0.0.1]:54830 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1rxZRs-0006bO-Bl
	for submit <at> debbugs.gnu.org; Thu, 18 Apr 2024 17:37:40 -0400
Received: from mail-lf1-x130.google.com ([2a00:1450:4864:20::130]:56445)
 by debbugs.gnu.org with esmtp (Exim 4.84_2)
 (envelope-from <joaotavora@HIDDEN>) id 1rxZRq-0006aU-Gg
 for 70036 <at> debbugs.gnu.org; Thu, 18 Apr 2024 17:37:39 -0400
Received: by mail-lf1-x130.google.com with SMTP id
 2adb3069b0e04-516d4d80d00so1743820e87.0
 for <70036 <at> debbugs.gnu.org>; Thu, 18 Apr 2024 14:37:24 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=gmail.com; s=20230601; t=1713476239; x=1714081039; darn=debbugs.gnu.org;
 h=content-transfer-encoding:cc:to:subject:message-id:date:from
 :in-reply-to:references:mime-version:from:to:cc:subject:date
 :message-id:reply-to;
 bh=qHGU+aUI68ZSWKC5zRMltg3ElbRi+IAiy5ml/M6/R1c=;
 b=K+ajAD5MZB1fx9ewEvlXhoZ3YDvApoCKFnQl5rCpdRi2LoNm2tuVrC53E2h+y5RvlN
 4ycjlXSHWztmgpZu1kSzlqy2tqDMGEDcmSVE0YsqRIYBY5GAXIzGvIQfk+BhUCeJs6Ug
 C+SEBH4rA/AYIf0XmuIOqM/zSSAqAO60KuU5fy/I8w1yf1v8p/om4EnIAjTFGiyOxa1b
 1616CRR9wzJJvM1wy+26PFPISR7P0bEamU22xyB6XNaCqY+pIkxKI19vW8WBKf0cyZNd
 nTp0cpjqAB/kCqyws9SlIpwWX3Hs/VFnABQ6zoaxsjWPsf6MBYj/pELosw9jIC8JirHg
 deCw==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=1e100.net; s=20230601; t=1713476239; x=1714081039;
 h=content-transfer-encoding:cc:to:subject:message-id:date:from
 :in-reply-to:references:mime-version:x-gm-message-state:from:to:cc
 :subject:date:message-id:reply-to;
 bh=qHGU+aUI68ZSWKC5zRMltg3ElbRi+IAiy5ml/M6/R1c=;
 b=rfGsrPtso0GEZ4RpTZy9T8prVJp40xxCnps/5ZpvrRCczeRS5/xgMT6Bm+UN0MXuaT
 3iOEfuPab8qmPf5BJqB19q2VuT3IWHeluwuAfMdGNR6k2q4S9NTE/N/JNf+B5ikGKE26
 K38FQuiqeNsTlb9888gXhubh6cm3+/0hKTPDdqabHr1wawdSFGq6iuFqXRtK6WAM8b8f
 QWLTW7VlhNjsF7nJE8dACQOCfx6/tnGl4eEkv1Ft2jv0YyjejitgTmIYCTUlVCpn8QuA
 +83itdCrCyVlDIVz9VggGxFI0tjhOImhYkKh1aEBjYLlg0LmNvbVHQwiiGeo3TyjDGsZ
 SuJg==
X-Forwarded-Encrypted: i=1;
 AJvYcCWSluGLUOo99/LsRB+R08z8ox7jyaAZeVcBOSypYVJ8s/pLBDNt5A1OCjyXYiYLBVFtj47fS4ZrOuVN9laOFO0X02BROKQ=
X-Gm-Message-State: AOJu0YxbVTGkptCk7QS1oUQLGxfbCQWGav2w1lJRRbHQ+deMiPaDW1uq
 1f6KB73cbTywob0mrH8t3MRRyZg4HolzlnpHzsHnb+n4MXM/k0TUHD5mWV7vajT3E3o0iEVEBRC
 VzeduBiNKk080NpE2pKYJxB/TXRk=
X-Google-Smtp-Source: AGHT+IGhDNSlgqReiu/TbX8mE13EqfbY5w4Gl3DEnAPK5uwxBiDOVaio2cVmb+UNWTTfPrBich0I1Lns0+r9RAfbD64=
X-Received: by 2002:a05:6512:1322:b0:519:5b13:4739 with SMTP id
 x34-20020a056512132200b005195b134739mr215173lfu.30.1713476236585; Thu, 18 Apr
 2024 14:37:16 -0700 (PDT)
MIME-Version: 1.0
References: <86y19ad61t.fsf@HIDDEN>
 <43de4151-ab68-4214-8691-33f3554feba1@HIDDEN>
 <CALDnm53J14dj1he+d8VF=ZB--XymExDkKL45XXAdVTb5VcDryw@HIDDEN>
 <86r0f2d46x.fsf@HIDDEN>
 <CALDnm50xhhcsFYqvFFUAQqRhPmqHtzo3dB5uyqQAygkW-y4EHg@HIDDEN>
 <86jzkud0be.fsf@HIDDEN>
 <CALDnm517N=DM+0tqBpHCGiHenPMirq2eFJF+Gk0ePO+W6WO-Ug@HIDDEN>
 <874jbycrd7.fsf@dick>
 <CALDnm51HWzo2+8ujwRqg_D78Qf42_5S24EjGDenjG+Duu7n6pg@HIDDEN>
In-Reply-To: <CALDnm51HWzo2+8ujwRqg_D78Qf42_5S24EjGDenjG+Duu7n6pg@HIDDEN>
From: =?UTF-8?B?Sm/Do28gVMOhdm9yYQ==?= <joaotavora@HIDDEN>
Date: Thu, 18 Apr 2024 22:37:05 +0100
Message-ID: <CALDnm50kR_6TxusPNPNO3+zvNVZK0HPFMVxoGcECB1T0OyR7fw@HIDDEN>
Subject: Re: bug#70036: a fix that
To: dick <dick.r.chiang@HIDDEN>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable
X-Spam-Score: 0.0 (/)
X-Debbugs-Envelope-To: 70036
Cc: theo@HIDDEN, Eli Zaretskii <eliz@HIDDEN>, 70036 <at> debbugs.gnu.org,
 felician.nemeth@HIDDEN
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -1.0 (-)

On Thu, Apr 18, 2024 at 10:26=E2=80=AFPM Jo=C3=A3o T=C3=A1vora <joaotavora@=
gmail.com> wrote:
>
> On Thu, Apr 18, 2024 at 10:07=E2=80=AFPM dick <dick.r.chiang@HIDDEN> w=
rote:
>
> > Speaking of dicks, you are one, and your code is always dogshit, so you=
r
> > much heralded leavetaking of the emacs project can't come soon enough.
>
> My dear dick, you on the other hand, are such a lovely wonderful human be=
ing
> who writes such great code and is so courageous..  Thank you for
> gracing me with
> your attention.  Means a lot to me.  Love xoxo

And I say this even without having the faintest idea of who you are,
imagine if I did :-)

Jo=C3=A3o




Information forwarded to bug-gnu-emacs@HIDDEN:
bug#70036; Package emacs. Full text available.

Message received at 70036 <at> debbugs.gnu.org:


Received: (at 70036) by debbugs.gnu.org; 18 Apr 2024 21:32:28 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Thu Apr 18 17:32:28 2024
Received: from localhost ([127.0.0.1]:54805 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1rxZMq-000613-Ex
	for submit <at> debbugs.gnu.org; Thu, 18 Apr 2024 17:32:28 -0400
Received: from out-187.mta0.migadu.com ([91.218.175.187]:29932)
 by debbugs.gnu.org with esmtp (Exim 4.84_2)
 (envelope-from <theo@HIDDEN>) id 1rxZMo-00060t-Mw
 for 70036 <at> debbugs.gnu.org; Thu, 18 Apr 2024 17:32:27 -0400
Date: Thu, 18 Apr 2024 23:32:00 +0200
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=thornhill.no;
 s=key1; t=1713475926;
 h=from:from:reply-to:subject:subject:date:date:message-id:message-id:
 to:to:cc:cc:mime-version:mime-version:content-type:content-type:
 content-transfer-encoding:content-transfer-encoding:  in-reply-to:in-reply-to; 
 bh=HW6KeS0/oUmdeT+TrCxaebMV01fqLc5c+4dWPwfxy7Q=;
 b=Bljo7L4hA4gfkO2kQmS+0W+58aMZ/QM6l3DgXKWPHAIwZ/n1NFMvgGJ93saDOw2hFfhOKf
 pmC4uIfbTIKhTilXc4d/WaaZ9yqQ79XBz4F/7dySo5k33u8t/3z9ra7/H3Hzu+hKjMVPc7
 kxEfnt9ic4QnIXUMlgZHSkzGHsmGdZwsE7FfTk0rnpGBsvMzQsPZsmykprNZW+81EgORw8
 gs3O3FrDfNxwfpnSWwZrbDAo/8VJdvkSuhxzsTv4hFmhhSmHeT0grv15EY+Ugu706KqtYH
 jlE0u8nEZZvFZHOpZ1b/l1AtlMjHc3Irjb7Gm+StSYz15SCR0roHA8guN8Rx5A==
Subject: Re: bug#70036 a fix that
Message-ID: <4e670617-6483-4159-a5cf-27a921764c38@HIDDEN>
X-Android-Message-ID: <4e670617-6483-4159-a5cf-27a921764c38@HIDDEN>
In-Reply-To: <CALDnm517N=DM+0tqBpHCGiHenPMirq2eFJF+Gk0ePO+W6WO-Ug@HIDDEN>
X-Report-Abuse: Please report any abuse attempt to abuse@HIDDEN and
 include these headers.
From: Theodor Thornhill <theo@HIDDEN>
To: =?ISO-8859-1?Q?Jo=E3o_T=E1vora?= <joaotavora@HIDDEN>
Importance: Normal
X-Priority: 3
X-MSMail-Priority: Normal
MIME-Version: 1.0
Content-Type: text/html; charset=utf-8
Content-Transfer-Encoding: base64
X-Migadu-Flow: FLOW_OUT
X-Debbugs-Envelope-To: 70036
Cc: Eli Zaretskii <eliz@HIDDEN>, 70036 <at> debbugs.gnu.org,
 felician.nemeth@HIDDEN
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>

PGRpdiBkaXI9J2F1dG8nPjxkaXY+PGRpdiBjbGFzcz0iZ21haWxfZXh0cmEiPjxkaXYgY2xhc3M9
ImdtYWlsX2V4dHJhIiBkaXI9ImF1dG8iPkltIGhhdmluZyBzb21lIGVtYWlsIGNsaWVudCBpc3N1
ZXMuIEkgaG9wZSB0aGlzIG1haWwgcmVuZGVycyByZWFkYWJsZS48L2Rpdj48ZGl2IGNsYXNzPSJn
bWFpbF9leHRyYSIgZGlyPSJhdXRvIj48YnI+PC9kaXY+PGRpdiBjbGFzcz0iZ21haWxfZXh0cmEi
IGRpcj0iYXV0byI+Sm/Do28gVMOhdm9yYSAmbHQ7am9hb3Rhdm9yYUBnbWFpbC5jb20mZ3Q7IHdy
aXRlczo8L2Rpdj48ZGl2IGNsYXNzPSJnbWFpbF9leHRyYSIgZGlyPSJhdXRvIj4mZ3Q7IE9uIFRo
dSwgQXByIDE4LCAyMDI0IGF0IDY6NTPigK9QTSBFbGkgWmFyZXRza2lpICZsdDtlbGl6QGdudS5v
cmcmZ3Q7IHdyb3RlOjwvZGl2PjxkaXYgY2xhc3M9ImdtYWlsX2V4dHJhIiBkaXI9ImF1dG8iPiZn
dDs8L2Rpdj48ZGl2IGNsYXNzPSJnbWFpbF9leHRyYSIgZGlyPSJhdXRvIj4mZ3Q7Jmd0OyBJIHN1
Z2dlc3QgdG8gZ2V0IGFuIG9iamVjdGl2ZSBvcGluaW9uIG9mIHRoYXQgZnJvbSBhbiB1bmludm9s
dmVkPC9kaXY+PGRpdiBjbGFzcz0iZ21haWxfZXh0cmEiIGRpcj0iYXV0byI+Jmd0OyZndDsgcGFy
dHkuPC9kaXY+PGRpdiBjbGFzcz0iZ21haWxfZXh0cmEiIGRpcj0iYXV0byI+Jmd0OzwvZGl2Pjxk
aXYgY2xhc3M9ImdtYWlsX2V4dHJhIiBkaXI9ImF1dG8iPiZndDsgSSBzdWdnZXN0IHlvdSBkcm9w
IHlvdXIgc2FyY2FzbSBub3QgYmVjYXVzZSBpdCBodXJ0cyBtZSBvciBhbnl0aGluZzwvZGl2Pjxk
aXYgY2xhc3M9ImdtYWlsX2V4dHJhIiBkaXI9ImF1dG8iPiZndDsgYnV0IGp1c3QgYmVjYXVzZSB5
b3UncmUgbm90IHZlcnkgZ29vZCBhdCBpdC48L2Rpdj48ZGl2IGNsYXNzPSJnbWFpbF9leHRyYSIg
ZGlyPSJhdXRvIj4mZ3Q7PC9kaXY+PGRpdiBjbGFzcz0iZ21haWxfZXh0cmEiIGRpcj0iYXV0byI+
Jmd0OyZndDsgJmd0OyBTbyBsZXQncyBza2lwIHRoZSBtb3JhbHMuPC9kaXY+PGRpdiBjbGFzcz0i
Z21haWxfZXh0cmEiIGRpcj0iYXV0byI+Jmd0OyZndDs8L2Rpdj48ZGl2IGNsYXNzPSJnbWFpbF9l
eHRyYSIgZGlyPSJhdXRvIj4mZ3Q7Jmd0OyBObywgbGV0J3Mgbm90LjwvZGl2PjxkaXYgY2xhc3M9
ImdtYWlsX2V4dHJhIiBkaXI9ImF1dG8iPjxicj48L2Rpdj48ZGl2IGNsYXNzPSJnbWFpbF9leHRy
YSIgZGlyPSJhdXRvIj5bLi4uXTwvZGl2PjxkaXYgY2xhc3M9ImdtYWlsX2V4dHJhIiBkaXI9ImF1
dG8iPkknbGwgbGV0IG1vc3Qgb2YgdGhpcyBwYXNzLCBidXQgeWlrZXMuIExldCdzIGp1c3QgcmVs
YXggYSBsaXR0bGUuPC9kaXY+PGRpdiBjbGFzcz0iZ21haWxfZXh0cmEiIGRpcj0iYXV0byI+PGJy
PjwvZGl2PjxkaXYgY2xhc3M9ImdtYWlsX2V4dHJhIiBkaXI9ImF1dG8iPiZndDs8L2Rpdj48ZGl2
IGNsYXNzPSJnbWFpbF9leHRyYSIgZGlyPSJhdXRvIj4mZ3Q7IEl0IGRvZXNuJ3Qgc3VnZ2VzdCBh
bnl0aGluZyBvdGhlciB0aGFuIGl0LCBub3RoaW5nIGFib3V0PC9kaXY+PGRpdiBjbGFzcz0iZ21h
aWxfZXh0cmEiIGRpcj0iYXV0byI+Jmd0OyB0ZXh0RG9jdW1lbnQvcHVibGlzaERpYWdub3N0aWNz
LiZuYnNwOyBUaGVyZSdzIDAgZGF0YSBhYm91dCB0aGF0PC9kaXY+PGRpdiBjbGFzcz0iZ21haWxf
ZXh0cmEiIGRpcj0iYXV0byI+Jmd0OyBhbmQgaXQgbmV2ZXIgc2hvd2VkIHVwIGluIG15IHByb2Zp
bGUuPC9kaXY+PGRpdiBjbGFzcz0iZ21haWxfZXh0cmEiIGRpcj0iYXV0byI+PGJyPjwvZGl2Pjxk
aXYgY2xhc3M9ImdtYWlsX2V4dHJhIiBkaXI9ImF1dG8iPkkgZG9uJ3QgcmVtZW1iZXIgZXhhY3Rs
eSByaWdodCBub3csIGJ1dCBJIGJlbGlldmUgSSBtZW50aW9uZWQgbWFueSB0aW1lczwvZGl2Pjxk
aXYgY2xhc3M9ImdtYWlsX2V4dHJhIiBkaXI9ImF1dG8iPnRoZSBwZXJmb3JtYW5jZSBvZiBmaWxl
LXRydWVuYW1lIGRpcmVjdGx5LCBhbmQgZmluZC1idWZmZXItdmlzaXRpbmc8L2Rpdj48ZGl2IGNs
YXNzPSJnbWFpbF9leHRyYSIgZGlyPSJhdXRvIj53aGljaCB1c2VzIGZpbGUtdHJ1ZW5hbWUgaW5k
aXJlY3RseS48L2Rpdj48ZGl2IGNsYXNzPSJnbWFpbF9leHRyYSIgZGlyPSJhdXRvIj48YnI+PC9k
aXY+PGRpdiBjbGFzcz0iZ21haWxfZXh0cmEiIGRpcj0iYXV0byI+Jmd0OzwvZGl2PjxkaXYgY2xh
c3M9ImdtYWlsX2V4dHJhIiBkaXI9ImF1dG8iPiZndDsgKiBUaGVvZG9yIHN1Z2dlc3RzIHJld3Jp
dGluZyBmaWxlLXRydW5lYW1lIGluIEMsIHlvdSBkZWNsaW5lIG9yIHJhaXNlPC9kaXY+PGRpdiBj
bGFzcz0iZ21haWxfZXh0cmEiIGRpcj0iYXV0byI+Jmd0OyBkb3VidHMuJm5ic3A7IEkgZG9uJ3Qg
Zm9sbG93IHRoZSByZWFzb25zLCBidXQgZmFpciBlbm91Z2gsIHRoZSBkaXNjdXNzaW9uPC9kaXY+
PGRpdiBjbGFzcz0iZ21haWxfZXh0cmEiIGRpcj0iYXV0byI+Jmd0OyBwaXZvdHMgdG8gY2hhbmdp
bmcgRWdsb3QuPC9kaXY+PGRpdiBjbGFzcz0iZ21haWxfZXh0cmEiIGRpcj0iYXV0byI+Jmd0Ozwv
ZGl2PjxkaXYgY2xhc3M9ImdtYWlsX2V4dHJhIiBkaXI9ImF1dG8iPiZndDsgKiBJIHJlcHJvZHVj
ZSBUaGVvZG9yJ3MgZXhwZXJpbWVudGFsIGZpbmRpbmdzLjwvZGl2PjxkaXYgY2xhc3M9ImdtYWls
X2V4dHJhIiBkaXI9ImF1dG8iPiZndDs8L2Rpdj48ZGl2IGNsYXNzPSJnbWFpbF9leHRyYSIgZGly
PSJhdXRvIj4mZ3Q7ICogSSBmaW5kIGEgcGF0Y2ggdG8gYWRkcmVzcyB0aGF0IGhvdHNwb3QgdGhh
dCBpcyBzZXZlcmFsIHRpbWVzPC9kaXY+PGRpdiBjbGFzcz0iZ21haWxfZXh0cmEiIGRpcj0iYXV0
byI+Jmd0OyBmYXN0ZXIgdGhhbiBUaGVvZG9yJ3Mgc29sdXRpb24gKGRvZXNuJ3QgcmVhbGx5IG1h
dHRlciB0aG91Z2gpLjwvZGl2PjxkaXYgY2xhc3M9ImdtYWlsX2V4dHJhIiBkaXI9ImF1dG8iPiZn
dDs8L2Rpdj48ZGl2IGNsYXNzPSJnbWFpbF9leHRyYSIgZGlyPSJhdXRvIj4mZ3Q7ICogSSBhc2sg
VGhlb2RvciB0byByZXZlcnQgdGhlIHBhdGNoIGFuZCBzdGFydCBhZnJlc2guIEhlIHVuZGVyc3Rh
bmRzPC9kaXY+PGRpdiBjbGFzcz0iZ21haWxfZXh0cmEiIGRpcj0iYXV0byI+Jmd0OyBidXQgZGVj
bGluZXMuPC9kaXY+PGRpdiBjbGFzcz0iZ21haWxfZXh0cmEiIGRpcj0iYXV0byI+PGJyPjwvZGl2
PjxkaXYgY2xhc3M9ImdtYWlsX2V4dHJhIiBkaXI9ImF1dG8iPkRpZCBJIGRlY2xpbmU/IEkndmUg
bG9zdCB0cmFjaywgYnV0IEkgYmVsaWV2ZSBJIHNhaWQgc29tZXRoaW5nIGluIHRoZTwvZGl2Pjxk
aXYgY2xhc3M9ImdtYWlsX2V4dHJhIiBkaXI9ImF1dG8iPmxpbmVzIG9mICJsZXQncyBkaXNjdXNz
IGl0IGZpcnN0IiwgYnV0IG5ldmVybWluZC48L2Rpdj48ZGl2IGNsYXNzPSJnbWFpbF9leHRyYSIg
ZGlyPSJhdXRvIj5bLi4uXTwvZGl2PjxkaXYgY2xhc3M9ImdtYWlsX2V4dHJhIiBkaXI9ImF1dG8i
Pjxicj48L2Rpdj48ZGl2IGNsYXNzPSJnbWFpbF9leHRyYSIgZGlyPSJhdXRvIj4mZ3Q7PC9kaXY+
PGRpdiBjbGFzcz0iZ21haWxfZXh0cmEiIGRpcj0iYXV0byI+Jmd0OyBTdGlsbCwgZm9yIHRoZSB2
ZXJ5IGxpdHRsZSBkYXRhIHRoYXQgdGhlcmUgaXMgYXZhaWxhYmxlLCBJIGRvIHRha2UgY2FyZTwv
ZGl2PjxkaXYgY2xhc3M9ImdtYWlsX2V4dHJhIiBkaXI9ImF1dG8iPiZndDsgdG8gcHV0IGluIGEg
bXVjaCBzaW1wbGVyIGZpeCB0aGF0IGNvbXBsZXRlbHkgZml4ZXMgdGhlIGlzc3VlIC0gYXMgZmFy
IGFzPC9kaXY+PGRpdiBjbGFzcz0iZ21haWxfZXh0cmEiIGRpcj0iYXV0byI+Jmd0OyBJIG9yIGFu
eW9uZSByZWFkaW5nIHRoZSBhdmFpbGFibGUgZGF0YSBjYW4gc2VlIGl0LjwvZGl2PjxkaXYgY2xh
c3M9ImdtYWlsX2V4dHJhIiBkaXI9ImF1dG8iPjxicj48L2Rpdj48ZGl2IGNsYXNzPSJnbWFpbF9l
eHRyYSIgZGlyPSJhdXRvIj5XaXRoIHRoaXMgSSBkaXNhZ3JlZSAtIGJ1dCBJIGd1ZXNzIEkgZWl0
aGVyIGhhdmUgbWlzY29tbXVuaWNhdGVkIG9yIGhhdmU8L2Rpdj48ZGl2IGNsYXNzPSJnbWFpbF9l
eHRyYSIgZGlyPSJhdXRvIj5wcm92aWRlZCB1bmNsZWFyIHByb2ZpbGVzIG9yIHNvbWV0aGluZyBp
bmJldHdlZW4uPC9kaXY+PGRpdiBjbGFzcz0iZ21haWxfZXh0cmEiIGRpcj0iYXV0byI+PGJyPjwv
ZGl2PjxkaXYgY2xhc3M9ImdtYWlsX2V4dHJhIiBkaXI9ImF1dG8iPiZndDs8L2Rpdj48ZGl2IGNs
YXNzPSJnbWFpbF9leHRyYSIgZGlyPSJhdXRvIj4mZ3Q7IEFuZCBub3RoaW5nIHNlcmlvdXMgd2ls
bCBoYXBwZW4gYWZ0ZXIgSSByZXZlcnRlZCBpdCwgd2lsbCB0aGVyZT88L2Rpdj48ZGl2IGNsYXNz
PSJnbWFpbF9leHRyYSIgZGlyPSJhdXRvIj48YnI+PC9kaXY+PGRpdiBjbGFzcz0iZ21haWxfZXh0
cmEiIGRpcj0iYXV0byI+Tm90IHNlcmlvdXMsIGJ1dCBub3cgd2UgaGF2ZSBhIHBlcmZvcm1hbmNl
IHJlZ3Jlc3Npb24gOy0pPC9kaXY+PGRpdiBjbGFzcz0iZ21haWxfZXh0cmEiIGRpcj0iYXV0byI+
PGJyPjwvZGl2PjxkaXYgY2xhc3M9ImdtYWlsX2V4dHJhIiBkaXI9ImF1dG8iPiZndDs8L2Rpdj48
ZGl2IGNsYXNzPSJnbWFpbF9leHRyYSIgZGlyPSJhdXRvIj4mZ3Q7IEkgaGF2ZSBubyBpbnRlcmVz
dCBpbiBkZWxheWluZyBhIHJlc3BvbnNpYmxlIGRlY2lzaW9uIGp1c3QgZm9yIHRoZTwvZGl2Pjxk
aXYgY2xhc3M9ImdtYWlsX2V4dHJhIiBkaXI9ImF1dG8iPiZndDsgc2FrZSBvZiBhcHBlYXNpbmcg
ZmVlbGluZ3MgdGhhdCBzb21lb25lIGVsc2Ugc2F5cyBhcmUgdGhlcmUuJm5ic3A7IElmPC9kaXY+
PGRpdiBjbGFzcz0iZ21haWxfZXh0cmEiIGRpcj0iYXV0byI+Jmd0OyBUaGVvZG9yIGlzIHdvcnJp
ZWQgYWJvdXQgYSBzcGVjaWZpYyBwZXJmb3JtYW5jZSBwcm9ibGVtIEkgaGF2ZSBzb21lPC9kaXY+
PGRpdiBjbGFzcz0iZ21haWxfZXh0cmEiIGRpcj0iYXV0byI+Jmd0OyB0aW1lIHRoaXMgd2VlayBh
bmQgdGhlIG5leHQgb25lIHRvIGhlbHAgZml4IGl0LCBhbmQgSSdtIGNvbmZpZGVudCBJIHdpbGwu
PC9kaXY+PGRpdiBjbGFzcz0iZ21haWxfZXh0cmEiIGRpcj0iYXV0byI+Jmd0OzwvZGl2PjxkaXYg
Y2xhc3M9ImdtYWlsX2V4dHJhIiBkaXI9ImF1dG8iPiZndDsgRm9yIHRoZSByZWNvcmQgbXkgcmVw
b3NpdG9yaWVzIGF0ICREQVlKT0Igd2l0aCB2ZXJ5IGxvbmcgcGF0aCBuYW1lczwvZGl2PjxkaXYg
Y2xhc3M9ImdtYWlsX2V4dHJhIiBkaXI9ImF1dG8iPiZndDsgX2FuZF8gdmVyeSBzeW1saW5rcy4m
bmJzcDsgU28gSSdtIHBlcnNvbmFsbHkgaW50ZXJlc3RlZCBpbiBmaXhpbmcgYW55PC9kaXY+PGRp
diBjbGFzcz0iZ21haWxfZXh0cmEiIGRpcj0iYXV0byI+Jmd0OyBwZXJmb3JtYW5jZSBwcm9ibGVt
cyBhbmQgbm90IG9wZW5pbmcgbmV3IG9uZXMuPC9kaXY+PGRpdiBjbGFzcz0iZ21haWxfZXh0cmEi
IGRpcj0iYXV0byI+Jmd0OzwvZGl2PjxkaXYgY2xhc3M9ImdtYWlsX2V4dHJhIiBkaXI9ImF1dG8i
PiZndDsmZ3Q7ICZndDsgSSdtIHN1cmUgVGhlbyBjYW4gdW5kZXJzdGFuZCB0aGF0LjwvZGl2Pjxk
aXYgY2xhc3M9ImdtYWlsX2V4dHJhIiBkaXI9ImF1dG8iPiZndDsmZ3Q7PC9kaXY+PGRpdiBjbGFz
cz0iZ21haWxfZXh0cmEiIGRpcj0iYXV0byI+Jmd0OyZndDsgSGUgb2J2aW91c2x5IGZlbHQgaHVy
dCwgc28gInVuZGVyc3RhbmQiIGlzIG5vdCBhbiBhcHByb3ByaWF0ZSB3b3JkPC9kaXY+PGRpdiBj
bGFzcz0iZ21haWxfZXh0cmEiIGRpcj0iYXV0byI+Jmd0OyZndDsgaGVyZS48L2Rpdj48ZGl2IGNs
YXNzPSJnbWFpbF9leHRyYSIgZGlyPSJhdXRvIj4mZ3Q7PC9kaXY+PGRpdiBjbGFzcz0iZ21haWxf
ZXh0cmEiIGRpcj0iYXV0byI+Jmd0OyBJJ20gY29uZmlkZW50IGhlIHdpbGwgdW5kZXJzdGFuZCB0
aGlzLCBJIGNhbid0IGJlIHN1cmUgb2YgY291cnNlLjwvZGl2PjxkaXYgY2xhc3M9ImdtYWlsX2V4
dHJhIiBkaXI9ImF1dG8iPiZndDsgQnV0IEkga25vdyBoZSB3cm90ZSAiY291bGQgYWJzb2x1dGVs
eSBkbyB0aGF0IFtyZXZlcnRdIiB0aG91Z2ggaGUgcHJlZmVycmVkPC9kaXY+PGRpdiBjbGFzcz0i
Z21haWxfZXh0cmEiIGRpcj0iYXV0byI+Jmd0OyBub3QgdG8gZG8gaXQuJm5ic3A7IFRoYXQgYXQg
bGVhc3Qgc2hvd3MgdGhhdCBpdCdzIG5vdCBhbiBhYnN1cmQgcHJvcG9zaXRpb24uPC9kaXY+PGRp
diBjbGFzcz0iZ21haWxfZXh0cmEiIGRpcj0iYXV0byI+Jmd0OyBBbmQgX0lfIHVuZGVyc3RhbmQg
dGhhdCBoZSBkb2Vzbid0IHdhbnQgdG8sIG9mIGNvdXJzZS48L2Rpdj48ZGl2IGNsYXNzPSJnbWFp
bF9leHRyYSIgZGlyPSJhdXRvIj4mZ3Q7PC9kaXY+PGRpdiBjbGFzcz0iZ21haWxfZXh0cmEiIGRp
cj0iYXV0byI+Jmd0OyBJIGRvbid0IGtub3cgaWYgVGhlb2RvciBmZWx0IGh1cnQsJm5ic3A7IGFu
ZCBldmVuIGlmIEkgc3VzcGVjdGVkIHNvbWV0aGluZywmbmJzcDsgSTwvZGl2PjxkaXYgY2xhc3M9
ImdtYWlsX2V4dHJhIiBkaXI9ImF1dG8iPiZndDsgd291bGRuJ3Qgd3JpdGUgYWJvdXQgaXQgaW4g
cHVibGljIHNpbXBseSBiZWNhdXNlJm5ic3A7IEkgcGVyc29uYWxseSBmaW5kIGl0PC9kaXY+PGRp
diBjbGFzcz0iZ21haWxfZXh0cmEiIGRpcj0iYXV0byI+Jmd0OyBpbiBwb29yIHRhc3RlIHRvIHNw
ZWN1bGF0ZSBvciBtb3JhbGl6ZSBhYm91dCBvdGhlcnMgcGVvcGxlJ3MgZmVlbGluZ3M8L2Rpdj48
ZGl2IGNsYXNzPSJnbWFpbF9leHRyYSIgZGlyPSJhdXRvIj4mZ3Q7IHNlY29uZGhhbmQuPC9kaXY+
PGRpdiBjbGFzcz0iZ21haWxfZXh0cmEiIGRpcj0iYXV0byI+PGJyPjwvZGl2PjxkaXYgY2xhc3M9
ImdtYWlsX2V4dHJhIiBkaXI9ImF1dG8iPkknbSBmaW5lLiBJIGRvIHRoaW5rIHlvdSBkbyBjb21l
IG9mZiBzdHJvbmdseSB0aG91Z2gsIGFuZCBpdCBpcyBub3Q8L2Rpdj48ZGl2IGNsYXNzPSJnbWFp
bF9leHRyYSIgZGlyPSJhdXRvIj5hbHdheXMgZWFzeSB0byBqdWRnZSBpZiBpdCBpcyBvZiBnb29k
IGZhaXRoLiBBbmQgSSBkb24ndCB0aGluayBFbGk8L2Rpdj48ZGl2IGNsYXNzPSJnbWFpbF9leHRy
YSIgZGlyPSJhdXRvIj5tb3JhbGl6ZXMgb24gbXkgYmVoYWxmLiBCdXQgSSBkb24ndCBoYXZlIHRp
bWUgdG8gbGluZ2VyIG9uIHRoYXQuPC9kaXY+PGRpdiBjbGFzcz0iZ21haWxfZXh0cmEiIGRpcj0i
YXV0byI+PGJyPjwvZGl2PjxkaXYgY2xhc3M9ImdtYWlsX2V4dHJhIiBkaXI9ImF1dG8iPiZndDs8
L2Rpdj48ZGl2IGNsYXNzPSJnbWFpbF9leHRyYSIgZGlyPSJhdXRvIj4mZ3Q7IEkgYXdhaXQgVGhl
bydzIHJlcHJvZHVjaWJsZSBleHBlcmltZW50IHNvIHRoYXQgd2UgY2FuIHdvcmsgb24gd2hhdCdz
PC9kaXY+PGRpdiBjbGFzcz0iZ21haWxfZXh0cmEiIGRpcj0iYXV0byI+Jmd0OyByZWFsbHkgaW1w
b3J0YW50LjwvZGl2PjxkaXYgY2xhc3M9ImdtYWlsX2V4dHJhIiBkaXI9ImF1dG8iPjxicj48L2Rp
dj48ZGl2IGNsYXNzPSJnbWFpbF9leHRyYSIgZGlyPSJhdXRvIj5ZZXMsIG5vdyBvdmVyIHRvIG15
IGV4YW1wbGUuPC9kaXY+PGRpdiBjbGFzcz0iZ21haWxfZXh0cmEiIGRpcj0iYXV0byI+PGJyPjwv
ZGl2PjxkaXYgY2xhc3M9ImdtYWlsX2V4dHJhIiBkaXI9ImF1dG8iPkknbGwgYWRkIHR3byBwcm9m
aWxlcywgb25lIGlzIHByb2ZpbGUtZmFzdCBhbmQgcHJvZmlsZS1zbG93LiBZb3UgY2FuPC9kaXY+
PGRpdiBjbGFzcz0iZ21haWxfZXh0cmEiIGRpcj0iYXV0byI+Z3Vlc3Mgd2hpY2ggaXMgd2hpY2gg
Oik8L2Rpdj48ZGl2IGNsYXNzPSJnbWFpbF9leHRyYSIgZGlyPSJhdXRvIj48YnI+PC9kaXY+PGRp
diBjbGFzcz0iZ21haWxfZXh0cmEiIGRpcj0iYXV0byI+U1RFUFM6PC9kaXY+PGRpdiBjbGFzcz0i
Z21haWxfZXh0cmEiIGRpcj0iYXV0byI+SSd2ZSBtYWRlIGFuIGludGVudGlvbmFsbHkgYnJva2Vu
IGNvbW1pdCBpbnRvIGEgZ29sYW5nIHJlcG8gSSBqdXN0PC9kaXY+PGRpdiBjbGFzcz0iZ21haWxf
ZXh0cmEiIGRpcj0iYXV0byI+Zm9ya2VkLCB0byBnZXQgc29tZSBwdWJsaXNoRGlhZ25vc3RpY3Mg
cXVpY2tseS48L2Rpdj48ZGl2IGNsYXNzPSJnbWFpbF9leHRyYSIgZGlyPSJhdXRvIj48YnI+PC9k
aXY+PGRpdiBjbGFzcz0iZ21haWxfZXh0cmEiIGRpcj0iYXV0byI+KGZvciBnb29kIG1lYXN1cmUg
ZXZhbHVhdGUgZWdsb3QuZWwgYmVmb3JlIHJ1bm5pbmcgcHJvZmlsZXMpPC9kaXY+PGRpdiBjbGFz
cz0iZ21haWxfZXh0cmEiIGRpcj0iYXV0byI+PGJyPjwvZGl2PjxkaXYgY2xhc3M9ImdtYWlsX2V4
dHJhIiBkaXI9ImF1dG8iPjEuIEluc3RhbGwgZ29wbHM8L2Rpdj48ZGl2IGNsYXNzPSJnbWFpbF9l
eHRyYSIgZGlyPSJhdXRvIj4yLiBNYWtlIHNvbWUgZGlyZWN0b3J5IHlvdSBjYW4gd2lwZSBvdXQg
YWZ0ZXIgdGhlIHRlc3QgYW5kIGNkIGludG8gaXQ8L2Rpdj48ZGl2IGNsYXNzPSJnbWFpbF9leHRy
YSIgZGlyPSJhdXRvIj4zLiBnaXQgY2xvbmUgZ2l0QGdpdGh1Yi5jb206dGhlb3Rob3JuaGlsbC9n
aW4uZ2l0IGZvby9iYXIvYmF6L2Zvby9iYXIvYmF6L2Zvby9iYXIvYmF6L2Zvby9iYXIvYmF6L2dp
bjwvZGl2PjxkaXYgY2xhc3M9ImdtYWlsX2V4dHJhIiBkaXI9ImF1dG8iPjQuIGNkIGZvby9iYXIv
YmF6L2Zvby9iYXIvYmF6L2Zvby9iYXIvYmF6L2Zvby9iYXIvYmF6L2dpbjwvZGl2PjxkaXYgY2xh
c3M9ImdtYWlsX2V4dHJhIiBkaXI9ImF1dG8iPjUuIG9wZW4gZnMuZ28gaW4gZW1hY3MgYW5kIG1h
a2Ugc3VyZSBzb21lIGdvIG1vZGUgaXMgYXZhaWxhYmxlLiBHby10cy1tb2RlIGZvciBleGFtcGxl
PC9kaXY+PGRpdiBjbGFzcz0iZ21haWxfZXh0cmEiIGRpcj0iYXV0byI+Ni4gTS14IHByb2ZpbGVy
LXN0YXJ0PC9kaXY+PGRpdiBjbGFzcz0iZ21haWxfZXh0cmEiIGRpcj0iYXV0byI+Ny4gTS14IGVn
bG90PC9kaXY+PGRpdiBjbGFzcz0iZ21haWxfZXh0cmEiIGRpcj0iYXV0byI+OC4gV2FpdCAxMC0y
MCBzZWNvbmRzLiBEbyBubyBhY3Rpb25zIG90aGVyIHRoYW4gbGV0IHRoZSBsc3Agc2V0dGxlLjwv
ZGl2PjxkaXYgY2xhc3M9ImdtYWlsX2V4dHJhIiBkaXI9ImF1dG8iPjkuIE0teCBwcm9maWxlci1z
dG9wPC9kaXY+PGRpdiBjbGFzcz0iZ21haWxfZXh0cmEiIGRpcj0iYXV0byI+MTAuIE0teCBwcm9m
aWxlci1yZXBvcnQ8L2Rpdj48ZGl2IGNsYXNzPSJnbWFpbF9leHRyYSIgZGlyPSJhdXRvIj4xMS4g
Umluc2UgcmVwZWF0IHdpdGggYm90aCBvciBhbGwgdmFyaWFudHMgb2YgZW1hY3Mgd2l0aC93aXRo
b3V0IHRoZTwvZGl2PjxkaXYgY2xhc3M9ImdtYWlsX2V4dHJhIiBkaXI9ImF1dG8iPmxhdGVzdCBl
Z2xvdCBjaGFuZ2VzLjwvZGl2PjxkaXYgY2xhc3M9ImdtYWlsX2V4dHJhIiBkaXI9ImF1dG8iPkkn
bGwgYWRkIG15IHByb2ZpbGVzLCBhbmQgbGV0IHNvbWUgbWV0cmljcyB0YWxrLiBUaGlzIGlzIGZy
b20gZW1hY3MgLVE8L2Rpdj48ZGl2IGNsYXNzPSJnbWFpbF9leHRyYSIgZGlyPSJhdXRvIj5mcm9t
IHlvdXIgImJldHRlciBmaXgiIGFuZCB0aGUgY29tbWl0IGJlZm9yZSB5b3VyIHJldmVydC4gUGxl
YXNlIHRyeSBvbjwvZGl2PjxkaXYgY2xhc3M9ImdtYWlsX2V4dHJhIiBkaXI9ImF1dG8iPnlvdXIg
c3lzdGVtcyBhbmQgcmVwb3J0IGJhY2suPC9kaXY+PGRpdiBjbGFzcz0iZ21haWxfZXh0cmEiIGRp
cj0iYXV0byI+QnkgdGhlIHdheS4gSSBoYXZlIGEgaHVuY2ggdGhlIHJlYXNvbiB0aGlzIGlzIHNv
IGFwcGFyZW50IG5vdyBpcyBiZWNhdXNlPC9kaXY+PGRpdiBjbGFzcz0iZ21haWxfZXh0cmEiIGRp
cj0iYXV0byI+b2YgdGhlIGZhc3RlciBqc29uIHNlcmRlIHJlY2VudGx5IGFkZGVkIHRvIGVtYWNz
LiBOb3Qgc3VyZSwgYnV0IGZlZWxzPC9kaXY+PGRpdiBjbGFzcz0iZ21haWxfZXh0cmEiIGRpcj0i
YXV0byI+bGlrZSBpdC4gSnNvbiBzZXJkZSBpcyBhbG1vc3QgZ29uZSBmcm9tIHRoZSBwcm9maWxl
cy48L2Rpdj48ZGl2IGNsYXNzPSJnbWFpbF9leHRyYSIgZGlyPSJhdXRvIj5Ob3cgbGV0J3Mgc3Rv
cCBmaWdodGluZy48L2Rpdj48ZGl2IGNsYXNzPSJnbWFpbF9leHRyYSIgZGlyPSJhdXRvIj48YnI+
PC9kaXY+PGRpdiBjbGFzcz0iZ21haWxfZXh0cmEiIGRpcj0iYXV0byI+PGJyPjwvZGl2PjxkaXYg
Y2xhc3M9ImdtYWlsX2V4dHJhIiBkaXI9ImF1dG8iPlRoZW88L2Rpdj48ZGl2IGNsYXNzPSJnbWFp
bF9leHRyYSIgZGlyPSJhdXRvIj48YnI+PC9kaXY+PGRpdiBjbGFzcz0iZ21haWxfZXh0cmEiIGRp
cj0iYXV0byI+UHJvZmlsZS1mYXN0OjwvZGl2PjxkaXYgY2xhc3M9ImdtYWlsX2V4dHJhIiBkaXI9
ImF1dG8iPiZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgNjcmbmJzcDsgMzklIC0g
Y29tbWFuZC1leGVjdXRlPC9kaXY+PGRpdiBjbGFzcz0iZ21haWxfZXh0cmEiIGRpcj0iYXV0byI+
Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyA2MyZuYnNwOyAzNyUmbmJzcDsgLSBi
eXRlLWNvZGU8L2Rpdj48ZGl2IGNsYXNzPSJnbWFpbF9leHRyYSIgZGlyPSJhdXRvIj4mbmJzcDsg
Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7IDYzJm5ic3A7IDM3JSZuYnNwOyAmbmJzcDstIHJl
YWQtZXh0ZW5kZWQtY29tbWFuZDwvZGl2PjxkaXYgY2xhc3M9ImdtYWlsX2V4dHJhIiBkaXI9ImF1
dG8iPiZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgNjMmbmJzcDsgMzclJm5ic3A7
ICZuYnNwOyAtIHJlYWQtZXh0ZW5kZWQtY29tbWFuZC0xPC9kaXY+PGRpdiBjbGFzcz0iZ21haWxf
ZXh0cmEiIGRpcj0iYXV0byI+Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyA2MyZu
YnNwOyAzNyUmbmJzcDsgJm5ic3A7ICZuYnNwOy0gY29tcGxldGluZy1yZWFkLWRlZmF1bHQ8L2Rp
dj48ZGl2IGNsYXNzPSJnbWFpbF9leHRyYSIgZGlyPSJhdXRvIj4mbmJzcDsgJm5ic3A7ICZuYnNw
OyAmbmJzcDsgJm5ic3A7IDIxJm5ic3A7IDEyJSZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyBy
ZWRpc3BsYXlfaW50ZXJuYWwgKEMgZnVuY3Rpb24pPC9kaXY+PGRpdiBjbGFzcz0iZ21haWxfZXh0
cmEiIGRpcj0iYXV0byI+Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsz
Jm5ic3A7ICZuYnNwOzElJm5ic3A7ICZuYnNwOyAmbmJzcDsgLSBjb21tYW5kLWV4ZWN1dGU8L2Rp
dj48ZGl2IGNsYXNzPSJnbWFpbF9leHRyYSIgZGlyPSJhdXRvIj4mbmJzcDsgJm5ic3A7ICZuYnNw
OyAmbmJzcDsgJm5ic3A7ICZuYnNwOzImbmJzcDsgJm5ic3A7MSUmbmJzcDsgJm5ic3A7ICZuYnNw
OyAmbmJzcDsgJm5ic3A7bGlzdDwvZGl2PjxkaXYgY2xhc3M9ImdtYWlsX2V4dHJhIiBkaXI9ImF1
dG8iPiZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7MiZuYnNwOyAmbmJz
cDsxJSZuYnNwOyAmbmJzcDsgJm5ic3A7IC0gZnJhbWUtd2luZG93cy1taW4tc2l6ZTwvZGl2Pjxk
aXYgY2xhc3M9ImdtYWlsX2V4dHJhIiBkaXI9ImF1dG8iPiZuYnNwOyAmbmJzcDsgJm5ic3A7ICZu
YnNwOyAmbmJzcDsgJm5ic3A7MiZuYnNwOyAmbmJzcDsxJSZuYnNwOyAmbmJzcDsgJm5ic3A7ICZu
YnNwOyAmbmJzcDt3aW5kb3ctbm9ybWFsaXplLWZyYW1lPC9kaXY+PGRpdiBjbGFzcz0iZ21haWxf
ZXh0cmEiIGRpcj0iYXV0byI+Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJz
cDsyJm5ic3A7ICZuYnNwOzElJm5ic3A7ICZuYnNwOyAmbmJzcDsgLSBpbnRlcm5hbC10aW1lci1z
dGFydC1pZGxlPC9kaXY+PGRpdiBjbGFzcz0iZ21haWxfZXh0cmEiIGRpcj0iYXV0byI+Jm5ic3A7
ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsyJm5ic3A7ICZuYnNwOzElJm5ic3A7
ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwO3RpbWVycDwvZGl2PjxkaXYgY2xhc3M9ImdtYWls
X2V4dHJhIiBkaXI9ImF1dG8iPiZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5i
c3A7MSZuYnNwOyAmbmJzcDswJSZuYnNwOyAmbmJzcDsgJm5ic3A7IC0gdGltZXItZXZlbnQtaGFu
ZGxlcjwvZGl2PjxkaXYgY2xhc3M9ImdtYWlsX2V4dHJhIiBkaXI9ImF1dG8iPiZuYnNwOyAmbmJz
cDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7MSZuYnNwOyAmbmJzcDswJSZuYnNwOyAmbmJz
cDsgJm5ic3A7ICZuYnNwOy0gYXBwbHk8L2Rpdj48ZGl2IGNsYXNzPSJnbWFpbF9leHRyYSIgZGly
PSJhdXRvIj4mbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOzEmbmJzcDsg
Jm5ic3A7MCUmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgLSBzaG93LXBhcmVuLWZ1bmN0aW9u
PC9kaXY+PGRpdiBjbGFzcz0iZ21haWxfZXh0cmEiIGRpcj0iYXV0byI+Jm5ic3A7ICZuYnNwOyAm
bmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsxJm5ic3A7ICZuYnNwOzAlJm5ic3A7ICZuYnNwOyAm
bmJzcDsgJm5ic3A7ICZuYnNwOy0gc2hvdy1wYXJlbi0tZGVmYXVsdDwvZGl2PjxkaXYgY2xhc3M9
ImdtYWlsX2V4dHJhIiBkaXI9ImF1dG8iPiZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJz
cDsgJm5ic3A7MSZuYnNwOyAmbmJzcDswJSZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJz
cDsgLSBzaG93LXBhcmVuLS1sb2NhdGUtbmVhci1wYXJlbjwvZGl2PjxkaXYgY2xhc3M9ImdtYWls
X2V4dHJhIiBkaXI9ImF1dG8iPiZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5i
c3A7MSZuYnNwOyAmbmJzcDswJSZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5i
c3A7ICZuYnNwO2JhY2stdG8taW5kZW50YXRpb248L2Rpdj48ZGl2IGNsYXNzPSJnbWFpbF9leHRy
YSIgZGlyPSJhdXRvIj4mbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOzEm
bmJzcDsgJm5ic3A7MCUmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgIzptaW5pYnVmZmVyLXNl
dHVwPC9kaXY+PGRpdiBjbGFzcz0iZ21haWxfZXh0cmEiIGRpcj0iYXV0byI+Jm5ic3A7ICZuYnNw
OyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsxJm5ic3A7ICZuYnNwOzAlJm5ic3A7ICZuYnNw
OyAmbmJzcDsgLSB1bmRvLWF1dG8tLWFkZC1ib3VuZGFyeTwvZGl2PjxkaXYgY2xhc3M9ImdtYWls
X2V4dHJhIiBkaXI9ImF1dG8iPiZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5i
c3A7MSZuYnNwOyAmbmJzcDswJSZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOy0gdW5kby1hdXRv
LS1ib3VuZGFyaWVzPC9kaXY+PGRpdiBjbGFzcz0iZ21haWxfZXh0cmEiIGRpcj0iYXV0byI+Jm5i
c3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsxJm5ic3A7ICZuYnNwOzAlJm5i
c3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7IC0gdW5kby1hdXRvLS1lbnN1cmUtYm91bmRhcnk8L2Rp
dj48ZGl2IGNsYXNzPSJnbWFpbF9leHRyYSIgZGlyPSJhdXRvIj4mbmJzcDsgJm5ic3A7ICZuYnNw
OyAmbmJzcDsgJm5ic3A7ICZuYnNwOzEmbmJzcDsgJm5ic3A7MCUmbmJzcDsgJm5ic3A7ICZuYnNw
OyAmbmJzcDsgJm5ic3A7ICZuYnNwO3VuZG8tYXV0by0tbmVlZHMtYm91bmRhcnktcDwvZGl2Pjxk
aXYgY2xhc3M9ImdtYWlsX2V4dHJhIiBkaXI9ImF1dG8iPiZuYnNwOyAmbmJzcDsgJm5ic3A7ICZu
YnNwOyAmbmJzcDsgJm5ic3A7NCZuYnNwOyAmbmJzcDsyJSZuYnNwOyAtIGZ1bmNhbGwtaW50ZXJh
Y3RpdmVseTwvZGl2PjxkaXYgY2xhc3M9ImdtYWlsX2V4dHJhIiBkaXI9ImF1dG8iPiZuYnNwOyAm
bmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7NCZuYnNwOyAmbmJzcDsyJSZuYnNwOyAm
bmJzcDstIGV4ZWN1dGUtZXh0ZW5kZWQtY29tbWFuZDwvZGl2PjxkaXYgY2xhc3M9ImdtYWlsX2V4
dHJhIiBkaXI9ImF1dG8iPiZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7
MyZuYnNwOyAmbmJzcDsxJSZuYnNwOyAmbmJzcDsgLSBjb21tYW5kLWV4ZWN1dGU8L2Rpdj48ZGl2
IGNsYXNzPSJnbWFpbF9leHRyYSIgZGlyPSJhdXRvIj4mbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJz
cDsgJm5ic3A7ICZuYnNwOzMmbmJzcDsgJm5ic3A7MSUmbmJzcDsgJm5ic3A7ICZuYnNwOy0gZnVu
Y2FsbC1pbnRlcmFjdGl2ZWx5PC9kaXY+PGRpdiBjbGFzcz0iZ21haWxfZXh0cmEiIGRpcj0iYXV0
byI+Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDszJm5ic3A7ICZuYnNw
OzElJm5ic3A7ICZuYnNwOyAmbmJzcDsgLSBlZ2xvdDwvZGl2PjxkaXYgY2xhc3M9ImdtYWlsX2V4
dHJhIiBkaXI9ImF1dG8iPiZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7
MyZuYnNwOyAmbmJzcDsxJSZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOy0gZWdsb3QtLWNvbm5l
Y3Q8L2Rpdj48ZGl2IGNsYXNzPSJnbWFpbF9leHRyYSIgZGlyPSJhdXRvIj4mbmJzcDsgJm5ic3A7
ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOzMmbmJzcDsgJm5ic3A7MSUmbmJzcDsgJm5ic3A7
ICZuYnNwOyAmbmJzcDsgLSBsZXQqPC9kaXY+PGRpdiBjbGFzcz0iZ21haWxfZXh0cmEiIGRpcj0i
YXV0byI+Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsyJm5ic3A7ICZu
YnNwOzElJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOy0gcHJvamVjdC1uYW1lPC9k
aXY+PGRpdiBjbGFzcz0iZ21haWxfZXh0cmEiIGRpcj0iYXV0byI+Jm5ic3A7ICZuYnNwOyAmbmJz
cDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsyJm5ic3A7ICZuYnNwOzElJm5ic3A7ICZuYnNwOyAmbmJz
cDsgJm5ic3A7ICZuYnNwOyAtIGFwcGx5PC9kaXY+PGRpdiBjbGFzcz0iZ21haWxfZXh0cmEiIGRp
cj0iYXV0byI+Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsyJm5ic3A7
ICZuYnNwOzElJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDstICMmbHQ7
Y29tcGlsZWQtZnVuY3Rpb24gNkVBJmd0OzwvZGl2PjxkaXYgY2xhc3M9ImdtYWlsX2V4dHJhIiBk
aXI9ImF1dG8iPiZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7MiZuYnNw
OyAmbmJzcDsxJSZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7IC0gYXBw
bHk8L2Rpdj48ZGl2IGNsYXNzPSJnbWFpbF9leHRyYSIgZGlyPSJhdXRvIj4mbmJzcDsgJm5ic3A7
ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOzImbmJzcDsgJm5ic3A7MSUmbmJzcDsgJm5ic3A7
ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDstICMmbHQ7Y29tcGlsZWQtZnVuY3Rp
b24gMkM1Jmd0OzwvZGl2PjxkaXYgY2xhc3M9ImdtYWlsX2V4dHJhIiBkaXI9ImF1dG8iPiZuYnNw
OyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7MiZuYnNwOyAmbmJzcDsxJSZuYnNw
OyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAtIHByb2plY3QtLXZh
bHVlLWluLWRpcjwvZGl2PjxkaXYgY2xhc3M9ImdtYWlsX2V4dHJhIiBkaXI9ImF1dG8iPiZuYnNw
OyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7MiZuYnNwOyAmbmJzcDsxJSZuYnNw
OyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDstIGhhY2st
ZGlyLWxvY2FsLXZhcmlhYmxlczwvZGl2PjxkaXYgY2xhc3M9ImdtYWlsX2V4dHJhIiBkaXI9ImF1
dG8iPiZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7MiZuYnNwOyAmbmJz
cDsxJSZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJz
cDsgLSBoYWNrLWRpci1sb2NhbC0tZ2V0LXZhcmlhYmxlczwvZGl2PjxkaXYgY2xhc3M9ImdtYWls
X2V4dHJhIiBkaXI9ImF1dG8iPiZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5i
c3A7MSZuYnNwOyAmbmJzcDswJSZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5i
c3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7LSBkaXItbG9jYWxzLWZpbmQtZmlsZTwvZGl2PjxkaXYg
Y2xhc3M9ImdtYWlsX2V4dHJhIiBkaXI9ImF1dG8iPiZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNw
OyAmbmJzcDsgJm5ic3A7MSZuYnNwOyAmbmJzcDswJSZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNw
OyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7IC0gbG9jYXRlLWRvbWluYXRpbmct
ZmlsZTwvZGl2PjxkaXYgY2xhc3M9ImdtYWlsX2V4dHJhIiBkaXI9ImF1dG8iPiZuYnNwOyAmbmJz
cDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7MSZuYnNwOyAmbmJzcDswJSZuYnNwOyAmbmJz
cDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNw
OyAmbmJzcDtkaXItbG9jYWxzLS1hbGwtZmlsZXM8L2Rpdj48ZGl2IGNsYXNzPSJnbWFpbF9leHRy
YSIgZGlyPSJhdXRvIj4mbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOzEm
bmJzcDsgJm5ic3A7MCUmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7LSBhcHBseTwv
ZGl2PjxkaXYgY2xhc3M9ImdtYWlsX2V4dHJhIiBkaXI9ImF1dG8iPiZuYnNwOyAmbmJzcDsgJm5i
c3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7MSZuYnNwOyAmbmJzcDswJSZuYnNwOyAmbmJzcDsgJm5i
c3A7ICZuYnNwOyAmbmJzcDsgLSBtYWtlLWluc3RhbmNlPC9kaXY+PGRpdiBjbGFzcz0iZ21haWxf
ZXh0cmEiIGRpcj0iYXV0byI+Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJz
cDsxJm5ic3A7ICZuYnNwOzAlJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJz
cDsgJm5ic3A7cHV0aGFzaDwvZGl2PjxkaXYgY2xhc3M9ImdtYWlsX2V4dHJhIiBkaXI9ImF1dG8i
PiZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgNDEmbmJzcDsgMjQlJm5ic3A7ICZu
YnNwO0F1dG9tYXRpYyBHQzwvZGl2PjxkaXYgY2xhc3M9ImdtYWlsX2V4dHJhIiBkaXI9ImF1dG8i
PiZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgMzMmbmJzcDsgMTklIC0gcmVkaXNw
bGF5X2ludGVybmFsIChDIGZ1bmN0aW9uKTwvZGl2PjxkaXYgY2xhc3M9ImdtYWlsX2V4dHJhIiBk
aXI9ImF1dG8iPiZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7MyZuYnNw
OyAmbmJzcDsxJSZuYnNwOyAtIHJlZGlzcGxheS0tcHJlLXJlZGlzcGxheS1mdW5jdGlvbnM8L2Rp
dj48ZGl2IGNsYXNzPSJnbWFpbF9leHRyYSIgZGlyPSJhdXRvIj4mbmJzcDsgJm5ic3A7ICZuYnNw
OyAmbmJzcDsgJm5ic3A7ICZuYnNwOzImbmJzcDsgJm5ic3A7MSUmbmJzcDsgJm5ic3A7ICZuYnNw
O3J1bi1ob29rLXdpdGgtYXJnczwvZGl2PjxkaXYgY2xhc3M9ImdtYWlsX2V4dHJhIiBkaXI9ImF1
dG8iPiZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgMTgmbmJzcDsgMTAlIC0gLi4u
PC9kaXY+PGRpdiBjbGFzcz0iZ21haWxfZXh0cmEiIGRpcj0iYXV0byI+Jm5ic3A7ICZuYnNwOyAm
bmJzcDsgJm5ic3A7ICZuYnNwOyAxMCZuYnNwOyAmbmJzcDs1JSZuYnNwOyAtIGVnbG90LS1nbG9i
LXBhcnNlPC9kaXY+PGRpdiBjbGFzcz0iZ21haWxfZXh0cmEiIGRpcj0iYXV0byI+Jm5ic3A7ICZu
YnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAxMCZuYnNwOyAmbmJzcDs1JSZuYnNwOyAmbmJzcDst
IGxldDwvZGl2PjxkaXYgY2xhc3M9ImdtYWlsX2V4dHJhIiBkaXI9ImF1dG8iPiZuYnNwOyAmbmJz
cDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgMTAmbmJzcDsgJm5ic3A7NSUmbmJzcDsgJm5ic3A7IC0g
c2F2ZS1jdXJyZW50LWJ1ZmZlcjwvZGl2PjxkaXYgY2xhc3M9ImdtYWlsX2V4dHJhIiBkaXI9ImF1
dG8iPiZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgMTAmbmJzcDsgJm5ic3A7NSUm
bmJzcDsgJm5ic3A7ICZuYnNwOy0gdW53aW5kLXByb3RlY3Q8L2Rpdj48ZGl2IGNsYXNzPSJnbWFp
bF9leHRyYSIgZGlyPSJhdXRvIj4mbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7IDEw
Jm5ic3A7ICZuYnNwOzUlJm5ic3A7ICZuYnNwOyAmbmJzcDsgLSBwcm9nbjwvZGl2PjxkaXYgY2xh
c3M9ImdtYWlsX2V4dHJhIiBkaXI9ImF1dG8iPiZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAm
bmJzcDsgMTAmbmJzcDsgJm5ic3A7NSUmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDstIGxldCo8
L2Rpdj48ZGl2IGNsYXNzPSJnbWFpbF9leHRyYSIgZGlyPSJhdXRvIj4mbmJzcDsgJm5ic3A7ICZu
YnNwOyAmbmJzcDsgJm5ic3A7IDEwJm5ic3A7ICZuYnNwOzUlJm5ic3A7ICZuYnNwOyAmbmJzcDsg
Jm5ic3A7IC0gd2hpbGU8L2Rpdj48ZGl2IGNsYXNzPSJnbWFpbF9leHRyYSIgZGlyPSJhdXRvIj4m
bmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOzkmbmJzcDsgJm5ic3A7NSUm
bmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7LSBsZXQ8L2Rpdj48ZGl2IGNsYXNzPSJn
bWFpbF9leHRyYSIgZGlyPSJhdXRvIj4mbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7
ICZuYnNwOzkmbmJzcDsgJm5ic3A7NSUmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7
IC0gbGV0KjwvZGl2PjxkaXYgY2xhc3M9ImdtYWlsX2V4dHJhIiBkaXI9ImF1dG8iPiZuYnNwOyAm
bmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7OSZuYnNwOyAmbmJzcDs1JSZuYnNwOyAm
bmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7LSBwcm9nbjwvZGl2PjxkaXYgY2xhc3M9
ImdtYWlsX2V4dHJhIiBkaXI9ImF1dG8iPiZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJz
cDsgJm5ic3A7OCZuYnNwOyAmbmJzcDs0JSZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJz
cDsgJm5ic3A7IC0gYXBwbHk8L2Rpdj48ZGl2IGNsYXNzPSJnbWFpbF9leHRyYSIgZGlyPSJhdXRv
Ij4mbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOzgmbmJzcDsgJm5ic3A7
NCUmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDstIGVnbG90
LXJlZ2lzdGVyLWNhcGFiaWxpdHk8L2Rpdj48ZGl2IGNsYXNzPSJnbWFpbF9leHRyYSIgZGlyPSJh
dXRvIj4mbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOzgmbmJzcDsgJm5i
c3A7NCUmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgLSBh
cHBseTwvZGl2PjxkaXYgY2xhc3M9ImdtYWlsX2V4dHJhIiBkaXI9ImF1dG8iPiZuYnNwOyAmbmJz
cDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7OCZuYnNwOyAmbmJzcDs0JSZuYnNwOyAmbmJz
cDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDstICMmbHQ7Y2xvc3Vy
ZSBFOTUmZ3Q7PC9kaXY+PGRpdiBjbGFzcz0iZ21haWxfZXh0cmEiIGRpcj0iYXV0byI+Jm5ic3A7
ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDs4Jm5ic3A7ICZuYnNwOzQlJm5ic3A7
ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAtIHByb2du
PC9kaXY+PGRpdiBjbGFzcz0iZ21haWxfZXh0cmEiIGRpcj0iYXV0byI+Jm5ic3A7ICZuYnNwOyAm
bmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDs4Jm5ic3A7ICZuYnNwOzQlJm5ic3A7ICZuYnNwOyAm
bmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDstIGxldCo8L2Rp
dj48ZGl2IGNsYXNzPSJnbWFpbF9leHRyYSIgZGlyPSJhdXRvIj4mbmJzcDsgJm5ic3A7ICZuYnNw
OyAmbmJzcDsgJm5ic3A7ICZuYnNwOzgmbmJzcDsgJm5ic3A7NCUmbmJzcDsgJm5ic3A7ICZuYnNw
OyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAtIHByb2duPC9kaXY+
PGRpdiBjbGFzcz0iZ21haWxfZXh0cmEiIGRpcj0iYXV0byI+Jm5ic3A7ICZuYnNwOyAmbmJzcDsg
Jm5ic3A7ICZuYnNwOyAmbmJzcDs4Jm5ic3A7ICZuYnNwOzQlJm5ic3A7ICZuYnNwOyAmbmJzcDsg
Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7LSBsZXQqPC9k
aXY+PGRpdiBjbGFzcz0iZ21haWxfZXh0cmEiIGRpcj0iYXV0byI+Jm5ic3A7ICZuYnNwOyAmbmJz
cDsgJm5ic3A7ICZuYnNwOyAmbmJzcDs3Jm5ic3A7ICZuYnNwOzQlJm5ic3A7ICZuYnNwOyAmbmJz
cDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7IC0gZGVs
ZXRlLWR1cHM8L2Rpdj48ZGl2IGNsYXNzPSJnbWFpbF9leHRyYSIgZGlyPSJhdXRvIj4mbmJzcDsg
Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOzcmbmJzcDsgJm5ic3A7NCUmbmJzcDsg
Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAm
bmJzcDsgJm5ic3A7LSBtYXBjYXI8L2Rpdj48ZGl2IGNsYXNzPSJnbWFpbF9leHRyYSIgZGlyPSJh
dXRvIj4mbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOzYmbmJzcDsgJm5i
c3A7MyUmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5i
c3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7IC0gcHJvamVjdC1maWxlczwvZGl2PjxkaXYgY2xhc3M9
ImdtYWlsX2V4dHJhIiBkaXI9ImF1dG8iPiZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJz
cDsgJm5ic3A7NiZuYnNwOyAmbmJzcDszJSZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJz
cDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7LSBhcHBs
eTwvZGl2PjxkaXYgY2xhc3M9ImdtYWlsX2V4dHJhIiBkaXI9ImF1dG8iPiZuYnNwOyAmbmJzcDsg
Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7NiZuYnNwOyAmbmJzcDszJSZuYnNwOyAmbmJzcDsg
Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAm
bmJzcDsgJm5ic3A7IC0gIyZsdDtjb21waWxlZC1mdW5jdGlvbiA4MUMmZ3Q7PC9kaXY+PGRpdiBj
bGFzcz0iZ21haWxfZXh0cmEiIGRpcj0iYXV0byI+Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7
ICZuYnNwOyAmbmJzcDs2Jm5ic3A7ICZuYnNwOzMlJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7
ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsg
Jm5ic3A7LSBtYXBjYW48L2Rpdj48ZGl2IGNsYXNzPSJnbWFpbF9leHRyYSIgZGlyPSJhdXRvIj4m
bmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOzYmbmJzcDsgJm5ic3A7MyUm
bmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZu
YnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgLSAjJmx0O2NvbXBpbGVkLWZ1bmN0aW9u
IDhBRSZndDs8L2Rpdj48ZGl2IGNsYXNzPSJnbWFpbF9leHRyYSIgZGlyPSJhdXRvIj4mbmJzcDsg
Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOzMmbmJzcDsgJm5ic3A7MSUmbmJzcDsg
Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAm
bmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7LSBwcm9qZWN0LS12Yy1saXN0LWZpbGVz
PC9kaXY+PGRpdiBjbGFzcz0iZ21haWxfZXh0cmEiIGRpcj0iYXV0byI+Jm5ic3A7ICZuYnNwOyAm
bmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsyJm5ic3A7ICZuYnNwOzElJm5ic3A7ICZuYnNwOyAm
bmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZu
YnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAtIHByb2plY3QtLXZhbHVlLWluLWRpcjwvZGl2Pjxk
aXYgY2xhc3M9ImdtYWlsX2V4dHJhIiBkaXI9ImF1dG8iPiZuYnNwOyAmbmJzcDsgJm5ic3A7ICZu
YnNwOyAmbmJzcDsgJm5ic3A7MiZuYnNwOyAmbmJzcDsxJSZuYnNwOyAmbmJzcDsgJm5ic3A7ICZu
YnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5i
c3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7LSBoYWNrLWRpci1sb2NhbC12YXJpYWJsZXM8L2Rpdj48
ZGl2IGNsYXNzPSJnbWFpbF9leHRyYSIgZGlyPSJhdXRvIj4mbmJzcDsgJm5ic3A7ICZuYnNwOyAm
bmJzcDsgJm5ic3A7ICZuYnNwOzImbmJzcDsgJm5ic3A7MSUmbmJzcDsgJm5ic3A7ICZuYnNwOyAm
bmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZu
YnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAtIGhhY2stZGlyLWxvY2FsLS1nZXQtdmFyaWFibGVz
PC9kaXY+PGRpdiBjbGFzcz0iZ21haWxfZXh0cmEiIGRpcj0iYXV0byI+Jm5ic3A7ICZuYnNwOyAm
bmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsyJm5ic3A7ICZuYnNwOzElJm5ic3A7ICZuYnNwOyAm
bmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZu
YnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7LSBkaXItbG9jYWxzLWZpbmQt
ZmlsZTwvZGl2PjxkaXYgY2xhc3M9ImdtYWlsX2V4dHJhIiBkaXI9ImF1dG8iPiZuYnNwOyAmbmJz
cDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7MiZuYnNwOyAmbmJzcDsxJSZuYnNwOyAmbmJz
cDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNw
OyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAtIGxvY2F0ZS1kb21p
bmF0aW5nLWZpbGU8L2Rpdj48ZGl2IGNsYXNzPSJnbWFpbF9leHRyYSIgZGlyPSJhdXRvIj4mbmJz
cDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOzImbmJzcDsgJm5ic3A7MSUmbmJz
cDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNw
OyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7
ICZuYnNwO2Rpci1sb2NhbHMtLWFsbC1maWxlczwvZGl2PjxkaXYgY2xhc3M9ImdtYWlsX2V4dHJh
IiBkaXI9ImF1dG8iPiZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7MSZu
YnNwOyAmbmJzcDswJSZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZu
YnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgLSBw
cm9qZWN0LS12Yy1tZXJnZS1zdWJtb2R1bGVzLXA8L2Rpdj48ZGl2IGNsYXNzPSJnbWFpbF9leHRy
YSIgZGlyPSJhdXRvIj4mbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOzEm
bmJzcDsgJm5ic3A7MCUmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAm
bmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZu
YnNwOy0gcHJvamVjdC0tdmFsdWUtaW4tZGlyPC9kaXY+PGRpdiBjbGFzcz0iZ21haWxfZXh0cmEi
IGRpcj0iYXV0byI+Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsxJm5i
c3A7ICZuYnNwOzAlJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5i
c3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJz
cDsgLSBoYWNrLWRpci1sb2NhbC12YXJpYWJsZXM8L2Rpdj48ZGl2IGNsYXNzPSJnbWFpbF9leHRy
YSIgZGlyPSJhdXRvIj4mbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOzEm
bmJzcDsgJm5ic3A7MCUmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAm
bmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZu
YnNwOyAmbmJzcDstIGhhY2stZGlyLWxvY2FsLS1nZXQtdmFyaWFibGVzPC9kaXY+PGRpdiBjbGFz
cz0iZ21haWxfZXh0cmEiIGRpcj0iYXV0byI+Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZu
YnNwOyAmbmJzcDsxJm5ic3A7ICZuYnNwOzAlJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZu
YnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5i
c3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7IC0gZGlyLWxvY2Fscy1maW5kLWZpbGU8L2Rpdj48ZGl2
IGNsYXNzPSJnbWFpbF9leHRyYSIgZGlyPSJhdXRvIj4mbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJz
cDsgJm5ic3A7ICZuYnNwOzEmbmJzcDsgJm5ic3A7MCUmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJz
cDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNw
OyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7LSBsb2NhdGUtZG9taW5hdGluZy1m
aWxlPC9kaXY+PGRpdiBjbGFzcz0iZ21haWxfZXh0cmEiIGRpcj0iYXV0byI+Jm5ic3A7ICZuYnNw
OyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsxJm5ic3A7ICZuYnNwOzAlJm5ic3A7ICZuYnNw
OyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7
ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsg
ZGlyLWxvY2Fscy0tYWxsLWZpbGVzPC9kaXY+PGRpdiBjbGFzcz0iZ21haWxfZXh0cmEiIGRpcj0i
YXV0byI+Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsyJm5ic3A7ICZu
YnNwOzElJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZu
YnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOy0gZmlsZS1lcXVh
bC1wPC9kaXY+PGRpdiBjbGFzcz0iZ21haWxfZXh0cmEiIGRpcj0iYXV0byI+Jm5ic3A7ICZuYnNw
OyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsyJm5ic3A7ICZuYnNwOzElJm5ic3A7ICZuYnNw
OyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7
ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAtIGZpbGUtdHJ1ZW5hbWU8L2Rpdj48ZGl2IGNs
YXNzPSJnbWFpbF9leHRyYSIgZGlyPSJhdXRvIj4mbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsg
Jm5ic3A7ICZuYnNwOzImbmJzcDsgJm5ic3A7MSUmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsg
Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAm
bmJzcDsgJm5ic3A7ICZuYnNwOy0gZmlsZS10cnVlbmFtZTwvZGl2PjxkaXYgY2xhc3M9ImdtYWls
X2V4dHJhIiBkaXI9ImF1dG8iPiZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5i
c3A7MiZuYnNwOyAmbmJzcDsxJSZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5i
c3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJz
cDsgJm5ic3A7IC0gZmlsZS10cnVlbmFtZTwvZGl2PjxkaXYgY2xhc3M9ImdtYWlsX2V4dHJhIiBk
aXI9ImF1dG8iPiZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7MiZuYnNw
OyAmbmJzcDsxJSZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNw
OyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7
ICZuYnNwOy0gZmlsZS10cnVlbmFtZTwvZGl2PjxkaXYgY2xhc3M9ImdtYWlsX2V4dHJhIiBkaXI9
ImF1dG8iPiZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7MSZuYnNwOyAm
bmJzcDswJSZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAm
bmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZu
YnNwOyAtIGZpbGUtdHJ1ZW5hbWU8L2Rpdj48ZGl2IGNsYXNzPSJnbWFpbF9leHRyYSIgZGlyPSJh
dXRvIj4mbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOzEmbmJzcDsgJm5i
c3A7MCUmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5i
c3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJz
cDsgJm5ic3A7LSBmaWxlLXRydWVuYW1lPC9kaXY+PGRpdiBjbGFzcz0iZ21haWxfZXh0cmEiIGRp
cj0iYXV0byI+Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsxJm5ic3A7
ICZuYnNwOzAlJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7
ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsg
Jm5ic3A7ICZuYnNwOyAtIGZpbGUtdHJ1ZW5hbWU8L2Rpdj48ZGl2IGNsYXNzPSJnbWFpbF9leHRy
YSIgZGlyPSJhdXRvIj4mbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOzEm
bmJzcDsgJm5ic3A7MCUmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAm
bmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZu
YnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOy0gZmlsZS10cnVlbmFtZTwvZGl2PjxkaXYgY2xhc3M9
ImdtYWlsX2V4dHJhIiBkaXI9ImF1dG8iPiZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJz
cDsgJm5ic3A7MSZuYnNwOyAmbmJzcDswJSZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJz
cDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNw
OyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7IC0gZmlsZS10cnVlbmFtZTwvZGl2
PjxkaXYgY2xhc3M9ImdtYWlsX2V4dHJhIiBkaXI9ImF1dG8iPiZuYnNwOyAmbmJzcDsgJm5ic3A7
ICZuYnNwOyAmbmJzcDsgJm5ic3A7MSZuYnNwOyAmbmJzcDswJSZuYnNwOyAmbmJzcDsgJm5ic3A7
ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsg
Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOy0g
ZmlsZS10cnVlbmFtZTwvZGl2PjxkaXYgY2xhc3M9ImdtYWlsX2V4dHJhIiBkaXI9ImF1dG8iPiZu
YnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7MSZuYnNwOyAmbmJzcDswJSZu
YnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5i
c3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJz
cDsgJm5ic3A7ICZuYnNwOyAtIGZpbGUtdHJ1ZW5hbWU8L2Rpdj48ZGl2IGNsYXNzPSJnbWFpbF9l
eHRyYSIgZGlyPSJhdXRvIj4mbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNw
OzEmbmJzcDsgJm5ic3A7MCUmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNw
OyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7
ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7LSBmaWxlLXRydWVuYW1l
PC9kaXY+PGRpdiBjbGFzcz0iZ21haWxfZXh0cmEiIGRpcj0iYXV0byI+Jm5ic3A7ICZuYnNwOyAm
bmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsxJm5ic3A7ICZuYnNwOzAlJm5ic3A7ICZuYnNwOyAm
bmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZu
YnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5i
c3A7ICZuYnNwOyAtIGZpbGUtdHJ1ZW5hbWU8L2Rpdj48ZGl2IGNsYXNzPSJnbWFpbF9leHRyYSIg
ZGlyPSJhdXRvIj4mbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOzEmbmJz
cDsgJm5ic3A7MCUmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJz
cDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNw
OyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDtmaWxlLXRy
dWVuYW1lPC9kaXY+PGRpdiBjbGFzcz0iZ21haWxfZXh0cmEiIGRpcj0iYXV0byI+Jm5ic3A7ICZu
YnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsxJm5ic3A7ICZuYnNwOzAlJm5ic3A7ICZu
YnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5i
c3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOy0gcHJvamVjdC0tdmFsdWUtaW4tZGlyPC9k
aXY+PGRpdiBjbGFzcz0iZ21haWxfZXh0cmEiIGRpcj0iYXV0byI+Jm5ic3A7ICZuYnNwOyAmbmJz
cDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsxJm5ic3A7ICZuYnNwOzAlJm5ic3A7ICZuYnNwOyAmbmJz
cDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNw
OyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAtIGhhY2stZGlyLWxvY2FsLXZhcmlhYmxlczwvZGl2Pjxk
aXYgY2xhc3M9ImdtYWlsX2V4dHJhIiBkaXI9ImF1dG8iPiZuYnNwOyAmbmJzcDsgJm5ic3A7ICZu
YnNwOyAmbmJzcDsgJm5ic3A7MSZuYnNwOyAmbmJzcDswJSZuYnNwOyAmbmJzcDsgJm5ic3A7ICZu
YnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5i
c3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7LSBoYWNrLWRpci1sb2NhbC0tZ2V0LXZhcmlhYmxlczwv
ZGl2PjxkaXYgY2xhc3M9ImdtYWlsX2V4dHJhIiBkaXI9ImF1dG8iPiZuYnNwOyAmbmJzcDsgJm5i
c3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7MSZuYnNwOyAmbmJzcDswJSZuYnNwOyAmbmJzcDsgJm5i
c3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJz
cDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7IC0gZGlyLWxvY2Fscy1maW5kLWZpbGU8L2Rp
dj48ZGl2IGNsYXNzPSJnbWFpbF9leHRyYSIgZGlyPSJhdXRvIj4mbmJzcDsgJm5ic3A7ICZuYnNw
OyAmbmJzcDsgJm5ic3A7ICZuYnNwOzEmbmJzcDsgJm5ic3A7MCUmbmJzcDsgJm5ic3A7ICZuYnNw
OyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7
ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDstIGxvY2F0ZS1kb21pbmF0aW5nLWZp
bGU8L2Rpdj48ZGl2IGNsYXNzPSJnbWFpbF9leHRyYSIgZGlyPSJhdXRvIj4mbmJzcDsgJm5ic3A7
ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOzEmbmJzcDsgJm5ic3A7MCUmbmJzcDsgJm5ic3A7
ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsg
Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7IGRpci1sb2Nh
bHMtLWFsbC1maWxlczwvZGl2PjxkaXYgY2xhc3M9ImdtYWlsX2V4dHJhIiBkaXI9ImF1dG8iPiZu
YnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7MSZuYnNwOyAmbmJzcDswJSZu
YnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5i
c3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7IGZpbGUtbmFtZS1kaXJlY3Rvcnk8L2Rpdj48ZGl2IGNs
YXNzPSJnbWFpbF9leHRyYSIgZGlyPSJhdXRvIj4mbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsg
Jm5ic3A7ICZuYnNwOzEmbmJzcDsgJm5ic3A7MCUmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsg
Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgLSBsZXQ8L2Rpdj48ZGl2
IGNsYXNzPSJnbWFpbF9leHRyYSIgZGlyPSJhdXRvIj4mbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJz
cDsgJm5ic3A7ICZuYnNwOzEmbmJzcDsgJm5ic3A7MCUmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJz
cDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7LSB1bndp
bmQtcHJvdGVjdDwvZGl2PjxkaXYgY2xhc3M9ImdtYWlsX2V4dHJhIiBkaXI9ImF1dG8iPiZuYnNw
OyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7MSZuYnNwOyAmbmJzcDswJSZuYnNw
OyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7
ICZuYnNwOyAmbmJzcDsgLSBwcm9nbjwvZGl2PjxkaXYgY2xhc3M9ImdtYWlsX2V4dHJhIiBkaXI9
ImF1dG8iPiZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7MSZuYnNwOyAm
bmJzcDswJSZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAm
bmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7LSBtYXBjPC9kaXY+PGRpdiBjbGFzcz0i
Z21haWxfZXh0cmEiIGRpcj0iYXV0byI+Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNw
OyAmbmJzcDsxJm5ic3A7ICZuYnNwOzAlJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNw
OyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgLSAjJmx0
O2Nsb3N1cmUgRDMxJmd0OzwvZGl2PjxkaXYgY2xhc3M9ImdtYWlsX2V4dHJhIiBkaXI9ImF1dG8i
PiZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7MSZuYnNwOyAmbmJzcDsw
JSZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsg
Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOy0gbGV0KjwvZGl2PjxkaXYgY2xhc3M9
ImdtYWlsX2V4dHJhIiBkaXI9ImF1dG8iPiZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJz
cDsgJm5ic3A7MSZuYnNwOyAmbmJzcDswJSZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJz
cDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNw
OyAtIGFuZDwvZGl2PjxkaXYgY2xhc3M9ImdtYWlsX2V4dHJhIiBkaXI9ImF1dG8iPiZuYnNwOyAm
bmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7MSZuYnNwOyAmbmJzcDswJSZuYnNwOyAm
bmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZu
YnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDstIGFuZDwvZGl2PjxkaXYgY2xhc3M9Imdt
YWlsX2V4dHJhIiBkaXI9ImF1dG8iPiZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsg
Jm5ic3A7MSZuYnNwOyAmbmJzcDswJSZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsg
Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAm
bmJzcDsgLSBvcjwvZGl2PjxkaXYgY2xhc3M9ImdtYWlsX2V4dHJhIiBkaXI9ImF1dG8iPiZuYnNw
OyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7MSZuYnNwOyAmbmJzcDswJSZuYnNw
OyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7
ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7LSBwdXRoYXNoPC9kaXY+
PGRpdiBjbGFzcz0iZ21haWxfZXh0cmEiIGRpcj0iYXV0byI+Jm5ic3A7ICZuYnNwOyAmbmJzcDsg
Jm5ic3A7ICZuYnNwOyAmbmJzcDsxJm5ic3A7ICZuYnNwOzAlJm5ic3A7ICZuYnNwOyAmbmJzcDsg
Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAm
bmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgLSBsaXN0PC9kaXY+PGRpdiBjbGFzcz0iZ21haWxf
ZXh0cmEiIGRpcj0iYXV0byI+Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJz
cDsxJm5ic3A7ICZuYnNwOzAlJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJz
cDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNw
OyAmbmJzcDsgJm5ic3A7ICZuYnNwO2ZpbGUtbm90aWZ5LWFkZC13YXRjaDwvZGl2PjxkaXYgY2xh
c3M9ImdtYWlsX2V4dHJhIiBkaXI9ImF1dG8iPiZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAm
bmJzcDsgJm5ic3A7MSZuYnNwOyAmbmJzcDswJSZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAm
bmJzcDsgJm5ic3A7IC0gbGV0KjwvZGl2PjxkaXYgY2xhc3M9ImdtYWlsX2V4dHJhIiBkaXI9ImF1
dG8iPiZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7MSZuYnNwOyAmbmJz
cDswJSZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOy0gZWds
b3QtLXdvcmtzcGFjZS1jb25maWd1cmF0aW9uLXBsaXN0PC9kaXY+PGRpdiBjbGFzcz0iZ21haWxf
ZXh0cmEiIGRpcj0iYXV0byI+Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJz
cDsxJm5ic3A7ICZuYnNwOzAlJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJz
cDsgJm5ic3A7IC0gbGV0PC9kaXY+PGRpdiBjbGFzcz0iZ21haWxfZXh0cmEiIGRpcj0iYXV0byI+
Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsxJm5ic3A7ICZuYnNwOzAl
Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOy0g
bGV0PC9kaXY+PGRpdiBjbGFzcz0iZ21haWxfZXh0cmEiIGRpcj0iYXV0byI+Jm5ic3A7ICZuYnNw
OyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsxJm5ic3A7ICZuYnNwOzAlJm5ic3A7ICZuYnNw
OyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAtIHNhdmUtY3VycmVu
dC1idWZmZXI8L2Rpdj48ZGl2IGNsYXNzPSJnbWFpbF9leHRyYSIgZGlyPSJhdXRvIj4mbmJzcDsg
Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOzEmbmJzcDsgJm5ic3A7MCUmbmJzcDsg
Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOy0g
dW53aW5kLXByb3RlY3Q8L2Rpdj48ZGl2IGNsYXNzPSJnbWFpbF9leHRyYSIgZGlyPSJhdXRvIj4m
bmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOzEmbmJzcDsgJm5ic3A7MCUm
bmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZu
YnNwOyAtIHByb2duPC9kaXY+PGRpdiBjbGFzcz0iZ21haWxfZXh0cmEiIGRpcj0iYXV0byI+Jm5i
c3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsxJm5ic3A7ICZuYnNwOzAlJm5i
c3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJz
cDsgJm5ic3A7LSBoYWNrLWRpci1sb2NhbC12YXJpYWJsZXMtbm9uLWZpbGUtYnVmZmVyPC9kaXY+
PGRpdiBjbGFzcz0iZ21haWxfZXh0cmEiIGRpcj0iYXV0byI+Jm5ic3A7ICZuYnNwOyAmbmJzcDsg
Jm5ic3A7ICZuYnNwOyAmbmJzcDsxJm5ic3A7ICZuYnNwOzAlJm5ic3A7ICZuYnNwOyAmbmJzcDsg
Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7IC0gaGFjay1k
aXItbG9jYWwtdmFyaWFibGVzPC9kaXY+PGRpdiBjbGFzcz0iZ21haWxfZXh0cmEiIGRpcj0iYXV0
byI+Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsxJm5ic3A7ICZuYnNw
OzAlJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNw
OyAmbmJzcDsgJm5ic3A7ICZuYnNwOy0gaGFjay1kaXItbG9jYWwtLWdldC12YXJpYWJsZXM8L2Rp
dj48ZGl2IGNsYXNzPSJnbWFpbF9leHRyYSIgZGlyPSJhdXRvIj4mbmJzcDsgJm5ic3A7ICZuYnNw
OyAmbmJzcDsgJm5ic3A7ICZuYnNwOzEmbmJzcDsgJm5ic3A7MCUmbmJzcDsgJm5ic3A7ICZuYnNw
OyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7
IC0gZGlyLWxvY2Fscy1maW5kLWZpbGU8L2Rpdj48ZGl2IGNsYXNzPSJnbWFpbF9leHRyYSIgZGly
PSJhdXRvIj4mbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOzEmbmJzcDsg
Jm5ic3A7MCUmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsg
Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOy0gbG9jYXRlLWRvbWluYXRpbmctZmls
ZTwvZGl2PjxkaXYgY2xhc3M9ImdtYWlsX2V4dHJhIiBkaXI9ImF1dG8iPiZuYnNwOyAmbmJzcDsg
Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7MSZuYnNwOyAmbmJzcDswJSZuYnNwOyAmbmJzcDsg
Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAm
bmJzcDsgJm5ic3A7ICZuYnNwOyBkaXItbG9jYWxzLS1hbGwtZmlsZXM8L2Rpdj48ZGl2IGNsYXNz
PSJnbWFpbF9leHRyYSIgZGlyPSJhdXRvIj4mbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5i
c3A7ICZuYnNwOzEmbmJzcDsgJm5ic3A7MCUmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5i
c3A7LSBzZXRxPC9kaXY+PGRpdiBjbGFzcz0iZ21haWxfZXh0cmEiIGRpcj0iYXV0byI+Jm5ic3A7
ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsxJm5ic3A7ICZuYnNwOzAlJm5ic3A7
ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAtIGNvbnM8L2Rpdj48ZGl2IGNsYXNzPSJnbWFp
bF9leHRyYSIgZGlyPSJhdXRvIj4mbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZu
YnNwOzEmbmJzcDsgJm5ic3A7MCUmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZu
YnNwOy0gbGV0KjwvZGl2PjxkaXYgY2xhc3M9ImdtYWlsX2V4dHJhIiBkaXI9ImF1dG8iPiZuYnNw
OyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7MSZuYnNwOyAmbmJzcDswJSZuYnNw
OyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7IC0gd2hpbGU8L2Rpdj48ZGl2IGNs
YXNzPSJnbWFpbF9leHRyYSIgZGlyPSJhdXRvIj4mbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsg
Jm5ic3A7ICZuYnNwOzEmbmJzcDsgJm5ic3A7MCUmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsg
Jm5ic3A7ICZuYnNwOyAmbmJzcDstIGFuZDwvZGl2PjxkaXYgY2xhc3M9ImdtYWlsX2V4dHJhIiBk
aXI9ImF1dG8iPiZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7MSZuYnNw
OyAmbmJzcDswJSZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNw
OyAtIHByb2duPC9kaXY+PGRpdiBjbGFzcz0iZ21haWxfZXh0cmEiIGRpcj0iYXV0byI+Jm5ic3A7
ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsxJm5ic3A7ICZuYnNwOzAlJm5ic3A7
ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOy0gc2V0cTwv
ZGl2PjxkaXYgY2xhc3M9ImdtYWlsX2V4dHJhIiBkaXI9ImF1dG8iPiZuYnNwOyAmbmJzcDsgJm5i
c3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7MSZuYnNwOyAmbmJzcDswJSZuYnNwOyAmbmJzcDsgJm5i
c3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgLSBub3Q8L2Rpdj48ZGl2IGNs
YXNzPSJnbWFpbF9leHRyYSIgZGlyPSJhdXRvIj4mbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsg
Jm5ic3A7ICZuYnNwOzEmbmJzcDsgJm5ic3A7MCUmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsg
Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDtzZXRxPC9kaXY+PGRpdiBj
bGFzcz0iZ21haWxfZXh0cmEiIGRpcj0iYXV0byI+Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7
ICZuYnNwOyAmbmJzcDs0Jm5ic3A7ICZuYnNwOzIlJm5ic3A7IC0gIyZsdDtjbG9zdXJlIDY3RCZn
dDs8L2Rpdj48ZGl2IGNsYXNzPSJnbWFpbF9leHRyYSIgZGlyPSJhdXRvIj4mbmJzcDsgJm5ic3A7
ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOzQmbmJzcDsgJm5ic3A7MiUmbmJzcDsgJm5ic3A7
LSBsZXQ8L2Rpdj48ZGl2IGNsYXNzPSJnbWFpbF9leHRyYSIgZGlyPSJhdXRvIj4mbmJzcDsgJm5i
c3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOzQmbmJzcDsgJm5ic3A7MiUmbmJzcDsgJm5i
c3A7IC0gYXBwbHk8L2Rpdj48ZGl2IGNsYXNzPSJnbWFpbF9leHRyYSIgZGlyPSJhdXRvIj4mbmJz
cDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOzQmbmJzcDsgJm5ic3A7MiUmbmJz
cDsgJm5ic3A7ICZuYnNwOy0gZWdsb3QtaGFuZGxlLW5vdGlmaWNhdGlvbjwvZGl2PjxkaXYgY2xh
c3M9ImdtYWlsX2V4dHJhIiBkaXI9ImF1dG8iPiZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAm
bmJzcDsgJm5ic3A7NCZuYnNwOyAmbmJzcDsyJSZuYnNwOyAmbmJzcDsgJm5ic3A7IC0gYXBwbHk8
L2Rpdj48ZGl2IGNsYXNzPSJnbWFpbF9leHRyYSIgZGlyPSJhdXRvIj4mbmJzcDsgJm5ic3A7ICZu
YnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOzQmbmJzcDsgJm5ic3A7MiUmbmJzcDsgJm5ic3A7ICZu
YnNwOyAmbmJzcDstICMmbHQ7Y2xvc3VyZSBBOEQmZ3Q7PC9kaXY+PGRpdiBjbGFzcz0iZ21haWxf
ZXh0cmEiIGRpcj0iYXV0byI+Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJz
cDs0Jm5ic3A7ICZuYnNwOzIlJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7IC0gcHJvZ248L2Rp
dj48ZGl2IGNsYXNzPSJnbWFpbF9leHRyYSIgZGlyPSJhdXRvIj4mbmJzcDsgJm5ic3A7ICZuYnNw
OyAmbmJzcDsgJm5ic3A7ICZuYnNwOzMmbmJzcDsgJm5ic3A7MSUmbmJzcDsgJm5ic3A7ICZuYnNw
OyAmbmJzcDsgJm5ic3A7LSBlZ2xvdC0tc2lnbmFsLXRleHREb2N1bWVudC9kaWRPcGVuPC9kaXY+
PGRpdiBjbGFzcz0iZ21haWxfZXh0cmEiIGRpcj0iYXV0byI+Jm5ic3A7ICZuYnNwOyAmbmJzcDsg
Jm5ic3A7ICZuYnNwOyAmbmJzcDszJm5ic3A7ICZuYnNwOzElJm5ic3A7ICZuYnNwOyAmbmJzcDsg
Jm5ic3A7ICZuYnNwOyAtIGpzb25ycGMtbm90aWZ5PC9kaXY+PGRpdiBjbGFzcz0iZ21haWxfZXh0
cmEiIGRpcj0iYXV0byI+Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsz
Jm5ic3A7ICZuYnNwOzElJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDst
IGxpc3Q8L2Rpdj48ZGl2IGNsYXNzPSJnbWFpbF9leHRyYSIgZGlyPSJhdXRvIj4mbmJzcDsgJm5i
c3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOzMmbmJzcDsgJm5ic3A7MSUmbmJzcDsgJm5i
c3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAtIGVnbG90LS1UZXh0RG9jdW1lbnRJdGVt
PC9kaXY+PGRpdiBjbGFzcz0iZ21haWxfZXh0cmEiIGRpcj0iYXV0byI+Jm5ic3A7ICZuYnNwOyAm
bmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDszJm5ic3A7ICZuYnNwOzElJm5ic3A7ICZuYnNwOyAm
bmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7LSBhcHBlbmQ8L2Rpdj48ZGl2IGNsYXNz
PSJnbWFpbF9leHRyYSIgZGlyPSJhdXRvIj4mbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5i
c3A7ICZuYnNwOzImbmJzcDsgJm5ic3A7MSUmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5i
c3A7ICZuYnNwOyAmbmJzcDsgLSBlZ2xvdC0tVmVyc2lvbmVkVGV4dERvY3VtZW50SWRlbnRpZmll
cjwvZGl2PjxkaXYgY2xhc3M9ImdtYWlsX2V4dHJhIiBkaXI9ImF1dG8iPiZuYnNwOyAmbmJzcDsg
Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7MiZuYnNwOyAmbmJzcDsxJSZuYnNwOyAmbmJzcDsg
Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDstIGFwcGVuZDwvZGl2Pjxk
aXYgY2xhc3M9ImdtYWlsX2V4dHJhIiBkaXI9ImF1dG8iPiZuYnNwOyAmbmJzcDsgJm5ic3A7ICZu
YnNwOyAmbmJzcDsgJm5ic3A7MiZuYnNwOyAmbmJzcDsxJSZuYnNwOyAmbmJzcDsgJm5ic3A7ICZu
YnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgLSBlZ2xvdC0tVGV4dERvY3VtZW50SWRl
bnRpZmllcjwvZGl2PjxkaXYgY2xhc3M9ImdtYWlsX2V4dHJhIiBkaXI9ImF1dG8iPiZuYnNwOyAm
bmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7MiZuYnNwOyAmbmJzcDsxJSZuYnNwOyAm
bmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7LSBs
aXN0PC9kaXY+PGRpdiBjbGFzcz0iZ21haWxfZXh0cmEiIGRpcj0iYXV0byI+Jm5ic3A7ICZuYnNw
OyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsyJm5ic3A7ICZuYnNwOzElJm5ic3A7ICZuYnNw
OyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgLSBlZ2xv
dC1wYXRoLXRvLXVyaTwvZGl2PjxkaXYgY2xhc3M9ImdtYWlsX2V4dHJhIiBkaXI9ImF1dG8iPiZu
YnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7MiZuYnNwOyAmbmJzcDsxJSZu
YnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5i
c3A7ICZuYnNwOy0gbGV0PC9kaXY+PGRpdiBjbGFzcz0iZ21haWxfZXh0cmEiIGRpcj0iYXV0byI+
Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsyJm5ic3A7ICZuYnNwOzEl
Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAm
bmJzcDsgJm5ic3A7IC0gaWY8L2Rpdj48ZGl2IGNsYXNzPSJnbWFpbF9leHRyYSIgZGlyPSJhdXRv
Ij4mbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOzImbmJzcDsgJm5ic3A7
MSUmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7
ICZuYnNwOyAmbmJzcDsgJm5ic3A7LSBhbmQ8L2Rpdj48ZGl2IGNsYXNzPSJnbWFpbF9leHRyYSIg
ZGlyPSJhdXRvIj4mbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOzImbmJz
cDsgJm5ic3A7MSUmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJz
cDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7IC0gbGV0KjwvZGl2PjxkaXYgY2xhc3M9Imdt
YWlsX2V4dHJhIiBkaXI9ImF1dG8iPiZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsg
Jm5ic3A7MiZuYnNwOyAmbmJzcDsxJSZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsg
Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwO3Vy
bC1nZW5lcmljLXBhcnNlLXVybDwvZGl2PjxkaXYgY2xhc3M9ImdtYWlsX2V4dHJhIiBkaXI9ImF1
dG8iPiZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7MSZuYnNwOyAmbmJz
cDswJSZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAtIGVn
bG90LS1ndWVzcy1jb250YWN0PC9kaXY+PGRpdiBjbGFzcz0iZ21haWxfZXh0cmEiIGRpcj0iYXV0
byI+Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsxJm5ic3A7ICZuYnNw
OzAlJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNw
Oy0gbGV0KjwvZGl2PjxkaXYgY2xhc3M9ImdtYWlsX2V4dHJhIiBkaXI9ImF1dG8iPiZuYnNwOyAm
bmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7MSZuYnNwOyAmbmJzcDswJSZuYnNwOyAm
bmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgLSBlZ2xvdC0t
bG9va3VwLW1vZGU8L2Rpdj48ZGl2IGNsYXNzPSJnbWFpbF9leHRyYSIgZGlyPSJhdXRvIj4mbmJz
cDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOzEmbmJzcDsgJm5ic3A7MCUmbmJz
cDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNw
Oy0gbGV0KjwvZGl2PjxkaXYgY2xhc3M9ImdtYWlsX2V4dHJhIiBkaXI9ImF1dG8iPiZuYnNwOyAm
bmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7MSZuYnNwOyAmbmJzcDswJSZuYnNwOyAm
bmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7IC0g
cHJvZ248L2Rpdj48ZGl2IGNsYXNzPSJnbWFpbF9leHRyYSIgZGlyPSJhdXRvIj4mbmJzcDsgJm5i
c3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOzEmbmJzcDsgJm5ic3A7MCUmbmJzcDsgJm5i
c3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJz
cDstIGxldCo8L2Rpdj48ZGl2IGNsYXNzPSJnbWFpbF9leHRyYSIgZGlyPSJhdXRvIj4mbmJzcDsg
Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOzEmbmJzcDsgJm5ic3A7MCUmbmJzcDsg
Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAm
bmJzcDsgLSB3aGlsZTwvZGl2PjxkaXYgY2xhc3M9ImdtYWlsX2V4dHJhIiBkaXI9ImF1dG8iPiZu
YnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7MSZuYnNwOyAmbmJzcDswJSZu
YnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5i
c3A7ICZuYnNwOyAmbmJzcDstIGFuZDwvZGl2PjxkaXYgY2xhc3M9ImdtYWlsX2V4dHJhIiBkaXI9
ImF1dG8iPiZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7MSZuYnNwOyAm
bmJzcDswJSZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAm
bmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgLSBwcm9nbjwvZGl2PjxkaXYgY2xhc3M9ImdtYWls
X2V4dHJhIiBkaXI9ImF1dG8iPiZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5i
c3A7MSZuYnNwOyAmbmJzcDswJSZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5i
c3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7LSBzZXRxPC9kaXY+
PGRpdiBjbGFzcz0iZ21haWxfZXh0cmEiIGRpcj0iYXV0byI+Jm5ic3A7ICZuYnNwOyAmbmJzcDsg
Jm5ic3A7ICZuYnNwOyAmbmJzcDsxJm5ic3A7ICZuYnNwOzAlJm5ic3A7ICZuYnNwOyAmbmJzcDsg
Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAm
bmJzcDsgLSBub3Q8L2Rpdj48ZGl2IGNsYXNzPSJnbWFpbF9leHRyYSIgZGlyPSJhdXRvIj4mbmJz
cDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOzEmbmJzcDsgJm5ic3A7MCUmbmJz
cDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNw
OyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDstIHNldHE8L2Rpdj48ZGl2IGNsYXNzPSJnbWFp
bF9leHRyYSIgZGlyPSJhdXRvIj4mbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZu
YnNwOzEmbmJzcDsgJm5ic3A7MCUmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZu
YnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgLSBj
bC1zb21lPC9kaXY+PGRpdiBjbGFzcz0iZ21haWxfZXh0cmEiIGRpcj0iYXV0byI+Jm5ic3A7ICZu
YnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsxJm5ic3A7ICZuYnNwOzAlJm5ic3A7ICZu
YnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5i
c3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOy0gZnVuY3Rpb248L2Rpdj48ZGl2IGNsYXNz
PSJnbWFpbF9leHRyYSIgZGlyPSJhdXRvIj4mbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5i
c3A7ICZuYnNwOzEmbmJzcDsgJm5ic3A7MCUmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5i
c3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJz
cDsgJm5ic3A7ICZuYnNwOyBjY29udi1tYWtlLWludGVycHJldGVkLWNsb3N1cmU8L2Rpdj48ZGl2
IGNsYXNzPSJnbWFpbF9leHRyYSIgZGlyPSJhdXRvIj4mbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJz
cDsgJm5ic3A7ICZuYnNwOzEmbmJzcDsgJm5ic3A7MCUmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJz
cDsgJm5ic3A7LSBsZXQqPC9kaXY+PGRpdiBjbGFzcz0iZ21haWxfZXh0cmEiIGRpcj0iYXV0byI+
Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsxJm5ic3A7ICZuYnNwOzAl
Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAtIGxldCo8L2Rpdj48ZGl2IGNsYXNz
PSJnbWFpbF9leHRyYSIgZGlyPSJhdXRvIj4mbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5i
c3A7ICZuYnNwOzEmbmJzcDsgJm5ic3A7MCUmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5i
c3A7ICZuYnNwOy0gcHJvZ248L2Rpdj48ZGl2IGNsYXNzPSJnbWFpbF9leHRyYSIgZGlyPSJhdXRv
Ij4mbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOzEmbmJzcDsgJm5ic3A7
MCUmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAtIGxldCo8L2Rpdj48
ZGl2IGNsYXNzPSJnbWFpbF9leHRyYSIgZGlyPSJhdXRvIj4mbmJzcDsgJm5ic3A7ICZuYnNwOyAm
bmJzcDsgJm5ic3A7ICZuYnNwOzEmbmJzcDsgJm5ic3A7MCUmbmJzcDsgJm5ic3A7ICZuYnNwOyAm
bmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDstIGFuZDwvZGl2PjxkaXYgY2xhc3M9ImdtYWlsX2V4
dHJhIiBkaXI9ImF1dG8iPiZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7
MSZuYnNwOyAmbmJzcDswJSZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7
ICZuYnNwOyAtIGV4cGFuZC1maWxlLW5hbWU8L2Rpdj48ZGl2IGNsYXNzPSJnbWFpbF9leHRyYSIg
ZGlyPSJhdXRvIj4mbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOzEmbmJz
cDsgJm5ic3A7MCUmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJz
cDsgJm5ic3A7LSBlZ2xvdC11cmktdG8tcGF0aDwvZGl2PjxkaXYgY2xhc3M9ImdtYWlsX2V4dHJh
IiBkaXI9ImF1dG8iPiZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7MSZu
YnNwOyAmbmJzcDswJSZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZu
YnNwOyAmbmJzcDsgLSBsZXQqPC9kaXY+PGRpdiBjbGFzcz0iZ21haWxfZXh0cmEiIGRpcj0iYXV0
byI+Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsxJm5ic3A7ICZuYnNw
OzAlJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNw
OyAmbmJzcDsgJm5ic3A7dXJsLWdlbmVyaWMtcGFyc2UtdXJsPC9kaXY+PGRpdiBjbGFzcz0iZ21h
aWxfZXh0cmEiIGRpcj0iYXV0byI+Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAm
bmJzcDsyJm5ic3A7ICZuYnNwOzElJm5ic3A7IC0gbWFjcm9leHAtLWV4cGFuZC1hbGw8L2Rpdj48
ZGl2IGNsYXNzPSJnbWFpbF9leHRyYSIgZGlyPSJhdXRvIj4mbmJzcDsgJm5ic3A7ICZuYnNwOyAm
bmJzcDsgJm5ic3A7ICZuYnNwOzImbmJzcDsgJm5ic3A7MSUmbmJzcDsgJm5ic3A7LSBtYWNyb2V4
cC0tYWxsLWZvcm1zPC9kaXY+PGRpdiBjbGFzcz0iZ21haWxfZXh0cmEiIGRpcj0iYXV0byI+Jm5i
c3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsyJm5ic3A7ICZuYnNwOzElJm5i
c3A7ICZuYnNwOyAtIG1hY3JvZXhwLS1leHBhbmQtYWxsPC9kaXY+PGRpdiBjbGFzcz0iZ21haWxf
ZXh0cmEiIGRpcj0iYXV0byI+Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJz
cDsyJm5ic3A7ICZuYnNwOzElJm5ic3A7ICZuYnNwOyAmbmJzcDstIG1hY3JvZXhwLS1hbGwtZm9y
bXM8L2Rpdj48ZGl2IGNsYXNzPSJnbWFpbF9leHRyYSIgZGlyPSJhdXRvIj4mbmJzcDsgJm5ic3A7
ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOzImbmJzcDsgJm5ic3A7MSUmbmJzcDsgJm5ic3A7
ICZuYnNwOyAtIG1hY3JvZXhwLS1leHBhbmQtYWxsPC9kaXY+PGRpdiBjbGFzcz0iZ21haWxfZXh0
cmEiIGRpcj0iYXV0byI+Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsy
Jm5ic3A7ICZuYnNwOzElJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7LSBtYWNyb2V4cC0tYWxs
LWZvcm1zPC9kaXY+PGRpdiBjbGFzcz0iZ21haWxfZXh0cmEiIGRpcj0iYXV0byI+Jm5ic3A7ICZu
YnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsyJm5ic3A7ICZuYnNwOzElJm5ic3A7ICZu
YnNwOyAmbmJzcDsgJm5ic3A7IC0gbWFjcm9leHAtLWV4cGFuZC1hbGw8L2Rpdj48ZGl2IGNsYXNz
PSJnbWFpbF9leHRyYSIgZGlyPSJhdXRvIj4mbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5i
c3A7ICZuYnNwOzImbmJzcDsgJm5ic3A7MSUmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5i
c3A7LSBtYWNyb2V4cC0tYWxsLWZvcm1zPC9kaXY+PGRpdiBjbGFzcz0iZ21haWxfZXh0cmEiIGRp
cj0iYXV0byI+Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsyJm5ic3A7
ICZuYnNwOzElJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAtIG1hY3JvZXhwLS1l
eHBhbmQtYWxsPC9kaXY+PGRpdiBjbGFzcz0iZ21haWxfZXh0cmEiIGRpcj0iYXV0byI+Jm5ic3A7
ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsyJm5ic3A7ICZuYnNwOzElJm5ic3A7
ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDstIG1hY3JvZXhwLS1hbGwtZm9ybXM8
L2Rpdj48ZGl2IGNsYXNzPSJnbWFpbF9leHRyYSIgZGlyPSJhdXRvIj4mbmJzcDsgJm5ic3A7ICZu
YnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOzImbmJzcDsgJm5ic3A7MSUmbmJzcDsgJm5ic3A7ICZu
YnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAtIG1hY3JvZXhwLS1leHBhbmQtYWxsPC9kaXY+PGRp
diBjbGFzcz0iZ21haWxfZXh0cmEiIGRpcj0iYXV0byI+Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5i
c3A7ICZuYnNwOyAmbmJzcDsyJm5ic3A7ICZuYnNwOzElJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5i
c3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7LSBtYWNyb2V4cC0tYWxsLWZvcm1zPC9kaXY+PGRpdiBj
bGFzcz0iZ21haWxfZXh0cmEiIGRpcj0iYXV0byI+Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7
ICZuYnNwOyAmbmJzcDsyJm5ic3A7ICZuYnNwOzElJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7
ICZuYnNwOyAmbmJzcDsgJm5ic3A7IC0gbWFjcm9leHAtLWV4cGFuZC1hbGw8L2Rpdj48ZGl2IGNs
YXNzPSJnbWFpbF9leHRyYSIgZGlyPSJhdXRvIj4mbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsg
Jm5ic3A7ICZuYnNwOzImbmJzcDsgJm5ic3A7MSUmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsg
Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7LSBtYWNyb2V4cC0tYWxsLWZvcm1zPC9kaXY+PGRp
diBjbGFzcz0iZ21haWxfZXh0cmEiIGRpcj0iYXV0byI+Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5i
c3A7ICZuYnNwOyAmbmJzcDsyJm5ic3A7ICZuYnNwOzElJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5i
c3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAtIG1hY3JvZXhwLS1leHBhbmQtYWxsPC9k
aXY+PGRpdiBjbGFzcz0iZ21haWxfZXh0cmEiIGRpcj0iYXV0byI+Jm5ic3A7ICZuYnNwOyAmbmJz
cDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsyJm5ic3A7ICZuYnNwOzElJm5ic3A7ICZuYnNwOyAmbmJz
cDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7bWFjcm9l
eHAtLWFsbC1mb3JtczwvZGl2PjxkaXYgY2xhc3M9ImdtYWlsX2V4dHJhIiBkaXI9ImF1dG8iPiZu
YnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7MSZuYnNwOyAmbmJzcDswJSZu
YnNwOyAtIGVnbG90LXNpZ25hbC1kaWRDaGFuZ2VDb25maWd1cmF0aW9uPC9kaXY+PGRpdiBjbGFz
cz0iZ21haWxfZXh0cmEiIGRpcj0iYXV0byI+Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZu
YnNwOyAmbmJzcDsxJm5ic3A7ICZuYnNwOzAlJm5ic3A7ICZuYnNwOy0ganNvbnJwYy1ub3RpZnk8
L2Rpdj48ZGl2IGNsYXNzPSJnbWFpbF9leHRyYSIgZGlyPSJhdXRvIj4mbmJzcDsgJm5ic3A7ICZu
YnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOzEmbmJzcDsgJm5ic3A7MCUmbmJzcDsgJm5ic3A7IC0g
bGlzdDwvZGl2PjxkaXYgY2xhc3M9ImdtYWlsX2V4dHJhIiBkaXI9ImF1dG8iPiZuYnNwOyAmbmJz
cDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7MSZuYnNwOyAmbmJzcDswJSZuYnNwOyAmbmJz
cDsgJm5ic3A7LSBvcjwvZGl2PjxkaXYgY2xhc3M9ImdtYWlsX2V4dHJhIiBkaXI9ImF1dG8iPiZu
YnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7MSZuYnNwOyAmbmJzcDswJSZu
YnNwOyAmbmJzcDsgJm5ic3A7IC0gZWdsb3QtLXdvcmtzcGFjZS1jb25maWd1cmF0aW9uLXBsaXN0
PC9kaXY+PGRpdiBjbGFzcz0iZ21haWxfZXh0cmEiIGRpcj0iYXV0byI+Jm5ic3A7ICZuYnNwOyAm
bmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsxJm5ic3A7ICZuYnNwOzAlJm5ic3A7ICZuYnNwOyAm
bmJzcDsgJm5ic3A7LSBsZXQ8L2Rpdj48ZGl2IGNsYXNzPSJnbWFpbF9leHRyYSIgZGlyPSJhdXRv
Ij4mbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOzEmbmJzcDsgJm5ic3A7
MCUmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgLSBsZXQ8L2Rpdj48ZGl2IGNsYXNzPSJnbWFp
bF9leHRyYSIgZGlyPSJhdXRvIj4mbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZu
YnNwOzEmbmJzcDsgJm5ic3A7MCUmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7LSBz
YXZlLWN1cnJlbnQtYnVmZmVyPC9kaXY+PGRpdiBjbGFzcz0iZ21haWxfZXh0cmEiIGRpcj0iYXV0
byI+Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsxJm5ic3A7ICZuYnNw
OzAlJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAtIHVud2luZC1wcm90ZWN0PC9k
aXY+PGRpdiBjbGFzcz0iZ21haWxfZXh0cmEiIGRpcj0iYXV0byI+Jm5ic3A7ICZuYnNwOyAmbmJz
cDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsxJm5ic3A7ICZuYnNwOzAlJm5ic3A7ICZuYnNwOyAmbmJz
cDsgJm5ic3A7ICZuYnNwOyAmbmJzcDstIHByb2duPC9kaXY+PGRpdiBjbGFzcz0iZ21haWxfZXh0
cmEiIGRpcj0iYXV0byI+Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsx
Jm5ic3A7ICZuYnNwOzAlJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsg
LSBoYWNrLWRpci1sb2NhbC12YXJpYWJsZXMtbm9uLWZpbGUtYnVmZmVyPC9kaXY+PGRpdiBjbGFz
cz0iZ21haWxfZXh0cmEiIGRpcj0iYXV0byI+Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZu
YnNwOyAmbmJzcDsxJm5ic3A7ICZuYnNwOzAlJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZu
YnNwOyAmbmJzcDsgJm5ic3A7LSBoYWNrLWRpci1sb2NhbC12YXJpYWJsZXM8L2Rpdj48ZGl2IGNs
YXNzPSJnbWFpbF9leHRyYSIgZGlyPSJhdXRvIj4mbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsg
Jm5ic3A7ICZuYnNwOzEmbmJzcDsgJm5ic3A7MCUmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsg
Jm5ic3A7ICZuYnNwOyAmbmJzcDsgLSBoYWNrLWRpci1sb2NhbC0tZ2V0LXZhcmlhYmxlczwvZGl2
PjxkaXYgY2xhc3M9ImdtYWlsX2V4dHJhIiBkaXI9ImF1dG8iPiZuYnNwOyAmbmJzcDsgJm5ic3A7
ICZuYnNwOyAmbmJzcDsgJm5ic3A7MSZuYnNwOyAmbmJzcDswJSZuYnNwOyAmbmJzcDsgJm5ic3A7
ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDstIGRpci1sb2NhbHMtZmluZC1maWxl
PC9kaXY+PGRpdiBjbGFzcz0iZ21haWxfZXh0cmEiIGRpcj0iYXV0byI+Jm5ic3A7ICZuYnNwOyAm
bmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsxJm5ic3A7ICZuYnNwOzAlJm5ic3A7ICZuYnNwOyAm
bmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAtIGxvY2F0ZS1kb21pbmF0
aW5nLWZpbGU8L2Rpdj48ZGl2IGNsYXNzPSJnbWFpbF9leHRyYSIgZGlyPSJhdXRvIj4mbmJzcDsg
Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOzEmbmJzcDsgJm5ic3A7MCUmbmJzcDsg
Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAm
bmJzcDtkaXItbG9jYWxzLS1hbGwtZmlsZXM8L2Rpdj48ZGl2IGNsYXNzPSJnbWFpbF9leHRyYSIg
ZGlyPSJhdXRvIj4mbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOzEmbmJz
cDsgJm5ic3A7MCUmbmJzcDsgLSBlbGRvYy1wcmludC1jdXJyZW50LXN5bWJvbC1pbmZvPC9kaXY+
PGRpdiBjbGFzcz0iZ21haWxfZXh0cmEiIGRpcj0iYXV0byI+Jm5ic3A7ICZuYnNwOyAmbmJzcDsg
Jm5ic3A7ICZuYnNwOyAmbmJzcDsxJm5ic3A7ICZuYnNwOzAlJm5ic3A7ICZuYnNwOy0gZWxkb2Mt
LWludm9rZS1zdHJhdGVneTwvZGl2PjxkaXYgY2xhc3M9ImdtYWlsX2V4dHJhIiBkaXI9ImF1dG8i
PiZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7MSZuYnNwOyAmbmJzcDsw
JSZuYnNwOyAmbmJzcDsgLSBlbGRvYy1kb2N1bWVudGF0aW9uLWNvbXBvc2U8L2Rpdj48ZGl2IGNs
YXNzPSJnbWFpbF9leHRyYSIgZGlyPSJhdXRvIj4mbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsg
Jm5ic3A7ICZuYnNwOzEmbmJzcDsgJm5ic3A7MCUmbmJzcDsgJm5ic3A7ICZuYnNwOy0gZWdsb3Qt
c2lnbmF0dXJlLWVsZG9jLWZ1bmN0aW9uPC9kaXY+PGRpdiBjbGFzcz0iZ21haWxfZXh0cmEiIGRp
cj0iYXV0byI+Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsxJm5ic3A7
ICZuYnNwOzAlJm5ic3A7ICZuYnNwOyAmbmJzcDsgLSBpZjwvZGl2PjxkaXYgY2xhc3M9ImdtYWls
X2V4dHJhIiBkaXI9ImF1dG8iPiZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5i
c3A7MSZuYnNwOyAmbmJzcDswJSZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOy0gcHJvZ248L2Rp
dj48ZGl2IGNsYXNzPSJnbWFpbF9leHRyYSIgZGlyPSJhdXRvIj4mbmJzcDsgJm5ic3A7ICZuYnNw
OyAmbmJzcDsgJm5ic3A7ICZuYnNwOzEmbmJzcDsgJm5ic3A7MCUmbmJzcDsgJm5ic3A7ICZuYnNw
OyAmbmJzcDsgLSBsZXQ8L2Rpdj48ZGl2IGNsYXNzPSJnbWFpbF9leHRyYSIgZGlyPSJhdXRvIj4m
bmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOzEmbmJzcDsgJm5ic3A7MCUm
bmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7LSBqc29ucnBjLWFzeW5jLXJlcXVlc3Q8
L2Rpdj48ZGl2IGNsYXNzPSJnbWFpbF9leHRyYSIgZGlyPSJhdXRvIj4mbmJzcDsgJm5ic3A7ICZu
YnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOzEmbmJzcDsgJm5ic3A7MCUmbmJzcDsgJm5ic3A7ICZu
YnNwOyAmbmJzcDsgJm5ic3A7IC0ganNvbnJwYy0tYXN5bmMtcmVxdWVzdC0xPC9kaXY+PGRpdiBj
bGFzcz0iZ21haWxfZXh0cmEiIGRpcj0iYXV0byI+Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7
ICZuYnNwOyAmbmJzcDsxJm5ic3A7ICZuYnNwOzAlJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7
ICZuYnNwOyAmbmJzcDstIGpzb25ycGMtY29ubmVjdGlvbi1zZW5kPC9kaXY+PGRpdiBjbGFzcz0i
Z21haWxfZXh0cmEiIGRpcj0iYXV0byI+Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNw
OyAmbmJzcDsxJm5ic3A7ICZuYnNwOzAlJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNw
OyAmbmJzcDsgLSBhcHBseTwvZGl2PjxkaXYgY2xhc3M9ImdtYWlsX2V4dHJhIiBkaXI9ImF1dG8i
PiZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7MSZuYnNwOyAmbmJzcDsw
JSZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOy0gIyZsdDtj
b21waWxlZC1mdW5jdGlvbiBGMDgmZ3Q7PC9kaXY+PGRpdiBjbGFzcz0iZ21haWxfZXh0cmEiIGRp
cj0iYXV0byI+Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsxJm5ic3A7
ICZuYnNwOzAlJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7
IC0ganNvbnJwYy0tZXZlbnQ8L2Rpdj48ZGl2IGNsYXNzPSJnbWFpbF9leHRyYSIgZGlyPSJhdXRv
Ij4mbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOzEmbmJzcDsgJm5ic3A7
MCUmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7
LSAjJmx0O2NvbXBpbGVkLWZ1bmN0aW9uIERFRSZndDs8L2Rpdj48ZGl2IGNsYXNzPSJnbWFpbF9l
eHRyYSIgZGlyPSJhdXRvIj4mbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNw
OzEmbmJzcDsgJm5ic3A7MCUmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNw
OyAmbmJzcDsgJm5ic3A7IC0gYXBwbHk8L2Rpdj48ZGl2IGNsYXNzPSJnbWFpbF9leHRyYSIgZGly
PSJhdXRvIj4mbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOzEmbmJzcDsg
Jm5ic3A7MCUmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsg
Jm5ic3A7ICZuYnNwOyAmbmJzcDtqc29ucnBjLS1sb2ctZXZlbnQ8L2Rpdj48ZGl2IGNsYXNzPSJn
bWFpbF9leHRyYSIgZGlyPSJhdXRvIj4mbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7
IDExJm5ic3A7ICZuYnNwOzYlIC0gdGltZXItZXZlbnQtaGFuZGxlcjwvZGl2PjxkaXYgY2xhc3M9
ImdtYWlsX2V4dHJhIiBkaXI9ImF1dG8iPiZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJz
cDsgJm5ic3A7OCZuYnNwOyAmbmJzcDs0JSZuYnNwOyAtIGFwcGx5PC9kaXY+PGRpdiBjbGFzcz0i
Z21haWxfZXh0cmEiIGRpcj0iYXV0byI+Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNw
OyAmbmJzcDs3Jm5ic3A7ICZuYnNwOzQlJm5ic3A7ICZuYnNwOy0gIyZsdDtjb21waWxlZC1mdW5j
dGlvbiBBQ0UmZ3Q7PC9kaXY+PGRpdiBjbGFzcz0iZ21haWxfZXh0cmEiIGRpcj0iYXV0byI+Jm5i
c3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDs3Jm5ic3A7ICZuYnNwOzQlJm5i
c3A7ICZuYnNwOyAtIGV4ZWN1dGUtZXh0ZW5kZWQtY29tbWFuZC0tc2hvcnRlcjwvZGl2PjxkaXYg
Y2xhc3M9ImdtYWlsX2V4dHJhIiBkaXI9ImF1dG8iPiZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNw
OyAmbmJzcDsgJm5ic3A7NyZuYnNwOyAmbmJzcDs0JSZuYnNwOyAmbmJzcDsgJm5ic3A7LSAjJmx0
O2NvbXBpbGVkLWZ1bmN0aW9uIDBGOCZndDs8L2Rpdj48ZGl2IGNsYXNzPSJnbWFpbF9leHRyYSIg
ZGlyPSJhdXRvIj4mbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOzQmbmJz
cDsgJm5ic3A7MiUmbmJzcDsgJm5ic3A7ICZuYnNwOyAtIGNvbW1hbmRwPC9kaXY+PGRpdiBjbGFz
cz0iZ21haWxfZXh0cmEiIGRpcj0iYXV0byI+Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZu
YnNwOyAmbmJzcDsxJm5ic3A7ICZuYnNwOzAlJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7LSBp
bnRlcmFjdGl2ZS1mb3JtPC9kaXY+PGRpdiBjbGFzcz0iZ21haWxfZXh0cmEiIGRpcj0iYXV0byI+
Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsxJm5ic3A7ICZuYnNwOzAl
Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7IC0gb2Nsb3N1cmUtaW50ZXJhY3RpdmUtZm9ybTwv
ZGl2PjxkaXYgY2xhc3M9ImdtYWlsX2V4dHJhIiBkaXI9ImF1dG8iPiZuYnNwOyAmbmJzcDsgJm5i
c3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7MSZuYnNwOyAmbmJzcDswJSZuYnNwOyAmbmJzcDsgJm5i
c3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7Z2V0aGFzaDwvZGl2PjxkaXYgY2xhc3M9ImdtYWlsX2V4
dHJhIiBkaXI9ImF1dG8iPiZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7
MSZuYnNwOyAmbmJzcDswJSZuYnNwOyAmbmJzcDstICMmbHQ7Y29tcGlsZWQtZnVuY3Rpb24gQUU2
Jmd0OzwvZGl2PjxkaXYgY2xhc3M9ImdtYWlsX2V4dHJhIiBkaXI9ImF1dG8iPiZuYnNwOyAmbmJz
cDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7MSZuYnNwOyAmbmJzcDswJSZuYnNwOyAmbmJz
cDsgLSBqc29ucnBjLWNvbm5lY3Rpb24tcmVjZWl2ZTwvZGl2PjxkaXYgY2xhc3M9ImdtYWlsX2V4
dHJhIiBkaXI9ImF1dG8iPiZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7
MSZuYnNwOyAmbmJzcDswJSZuYnNwOyAmbmJzcDsgJm5ic3A7LSBhcHBseTwvZGl2PjxkaXYgY2xh
c3M9ImdtYWlsX2V4dHJhIiBkaXI9ImF1dG8iPiZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAm
bmJzcDsgJm5ic3A7MSZuYnNwOyAmbmJzcDswJSZuYnNwOyAmbmJzcDsgJm5ic3A7IC0ganNvbnJw
Yy0tZXZlbnQ8L2Rpdj48ZGl2IGNsYXNzPSJnbWFpbF9leHRyYSIgZGlyPSJhdXRvIj4mbmJzcDsg
Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOzEmbmJzcDsgJm5ic3A7MCUmbmJzcDsg
Jm5ic3A7ICZuYnNwOyAmbmJzcDstICMmbHQ7Y29tcGlsZWQtZnVuY3Rpb24gRDkzJmd0OzwvZGl2
PjxkaXYgY2xhc3M9ImdtYWlsX2V4dHJhIiBkaXI9ImF1dG8iPiZuYnNwOyAmbmJzcDsgJm5ic3A7
ICZuYnNwOyAmbmJzcDsgJm5ic3A7MSZuYnNwOyAmbmJzcDswJSZuYnNwOyAmbmJzcDsgJm5ic3A7
ICZuYnNwOyAtIGFwcGx5PC9kaXY+PGRpdiBjbGFzcz0iZ21haWxfZXh0cmEiIGRpcj0iYXV0byI+
Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsxJm5ic3A7ICZuYnNwOzAl
Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDtqc29ucnBjLS1sb2ctZXZl
bnQ8L2Rpdj48ZGl2IGNsYXNzPSJnbWFpbF9leHRyYSIgZGlyPSJhdXRvIj4mbmJzcDsgJm5ic3A7
ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOzImbmJzcDsgJm5ic3A7MSUmbmJzcDsgKyB0aW1l
ci1hY3RpdmF0ZTwvZGl2PjxkaXYgY2xhc3M9ImdtYWlsX2V4dHJhIiBkaXI9ImF1dG8iPiZuYnNw
OyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7MSZuYnNwOyAmbmJzcDswJSZuYnNw
OyArIHRpbWVyLWluYy10aW1lPC9kaXY+PGRpdiBjbGFzcz0iZ21haWxfZXh0cmEiIGRpcj0iYXV0
byI+UHJvZmlsZS1zbG93PC9kaXY+PGRpdiBjbGFzcz0iZ21haWxfZXh0cmEiIGRpcj0iYXV0byI+
Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyA3OCZuYnNwOyAzNiUgLSBjb21tYW5k
LWV4ZWN1dGU8L2Rpdj48ZGl2IGNsYXNzPSJnbWFpbF9leHRyYSIgZGlyPSJhdXRvIj4mbmJzcDsg
Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7IDc2Jm5ic3A7IDM1JSZuYnNwOyAtIGJ5dGUtY29k
ZTwvZGl2PjxkaXYgY2xhc3M9ImdtYWlsX2V4dHJhIiBkaXI9ImF1dG8iPiZuYnNwOyAmbmJzcDsg
Jm5ic3A7ICZuYnNwOyAmbmJzcDsgNzYmbmJzcDsgMzUlJm5ic3A7ICZuYnNwOy0gcmVhZC1leHRl
bmRlZC1jb21tYW5kPC9kaXY+PGRpdiBjbGFzcz0iZ21haWxfZXh0cmEiIGRpcj0iYXV0byI+Jm5i
c3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyA3NiZuYnNwOyAzNSUmbmJzcDsgJm5ic3A7
IC0gcmVhZC1leHRlbmRlZC1jb21tYW5kLTE8L2Rpdj48ZGl2IGNsYXNzPSJnbWFpbF9leHRyYSIg
ZGlyPSJhdXRvIj4mbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7IDc2Jm5ic3A7IDM1
JSZuYnNwOyAmbmJzcDsgJm5ic3A7LSBjb21wbGV0aW5nLXJlYWQtZGVmYXVsdDwvZGl2PjxkaXYg
Y2xhc3M9ImdtYWlsX2V4dHJhIiBkaXI9ImF1dG8iPiZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNw
OyAmbmJzcDsgMjEmbmJzcDsgJm5ic3A7OSUmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgcmVk
aXNwbGF5X2ludGVybmFsIChDIGZ1bmN0aW9uKTwvZGl2PjxkaXYgY2xhc3M9ImdtYWlsX2V4dHJh
IiBkaXI9ImF1dG8iPiZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgMTImbmJzcDsg
Jm5ic3A7NSUmbmJzcDsgJm5ic3A7ICZuYnNwOyAtIGNvbW1hbmQtZXhlY3V0ZTwvZGl2PjxkaXYg
Y2xhc3M9ImdtYWlsX2V4dHJhIiBkaXI9ImF1dG8iPiZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNw
OyAmbmJzcDsgMTEmbmJzcDsgJm5ic3A7NSUmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDstIGZ1
bmNhbGwtaW50ZXJhY3RpdmVseTwvZGl2PjxkaXYgY2xhc3M9ImdtYWlsX2V4dHJhIiBkaXI9ImF1
dG8iPiZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7NyZuYnNwOyAmbmJz
cDszJSZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAtIHNlbGYtaW5zZXJ0LWNvbW1hbmQ8L2Rp
dj48ZGl2IGNsYXNzPSJnbWFpbF9leHRyYSIgZGlyPSJhdXRvIj4mbmJzcDsgJm5ic3A7ICZuYnNw
OyAmbmJzcDsgJm5ic3A7ICZuYnNwOzImbmJzcDsgJm5ic3A7MCUmbmJzcDsgJm5ic3A7ICZuYnNw
OyAmbmJzcDsgJm5ic3A7LSBlbGVjdHJpYy1pbmRlbnQtcG9zdC1zZWxmLWluc2VydC1mdW5jdGlv
bjwvZGl2PjxkaXYgY2xhc3M9ImdtYWlsX2V4dHJhIiBkaXI9ImF1dG8iPiZuYnNwOyAmbmJzcDsg
Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7MiZuYnNwOyAmbmJzcDswJSZuYnNwOyAmbmJzcDsg
Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7IGVsZWN0cmljLS1hZnRlci1jaGFyLXBvczwvZGl2
PjxkaXYgY2xhc3M9ImdtYWlsX2V4dHJhIiBkaXI9ImF1dG8iPiZuYnNwOyAmbmJzcDsgJm5ic3A7
ICZuYnNwOyAmbmJzcDsgJm5ic3A7MSZuYnNwOyAmbmJzcDswJSZuYnNwOyAmbmJzcDsgJm5ic3A7
ICZuYnNwOyAmbmJzcDsgJm5ic3A7dW5kby1hdXRvLWFtYWxnYW1hdGU8L2Rpdj48ZGl2IGNsYXNz
PSJnbWFpbF9leHRyYSIgZGlyPSJhdXRvIj4mbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5i
c3A7ICZuYnNwOzQmbmJzcDsgJm5ic3A7MSUmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgLSBl
eGVjdXRlLWV4dGVuZGVkLWNvbW1hbmQ8L2Rpdj48ZGl2IGNsYXNzPSJnbWFpbF9leHRyYSIgZGly
PSJhdXRvIj4mbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOzQmbmJzcDsg
Jm5ic3A7MSUmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7LSBjb21tYW5kLWV4ZWN1
dGU8L2Rpdj48ZGl2IGNsYXNzPSJnbWFpbF9leHRyYSIgZGlyPSJhdXRvIj4mbmJzcDsgJm5ic3A7
ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOzQmbmJzcDsgJm5ic3A7MSUmbmJzcDsgJm5ic3A7
ICZuYnNwOyAmbmJzcDsgJm5ic3A7IC0gZnVuY2FsbC1pbnRlcmFjdGl2ZWx5PC9kaXY+PGRpdiBj
bGFzcz0iZ21haWxfZXh0cmEiIGRpcj0iYXV0byI+Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7
ICZuYnNwOyAmbmJzcDs0Jm5ic3A7ICZuYnNwOzElJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7
ICZuYnNwOyAmbmJzcDstIGVnbG90PC9kaXY+PGRpdiBjbGFzcz0iZ21haWxfZXh0cmEiIGRpcj0i
YXV0byI+Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDs0Jm5ic3A7ICZu
YnNwOzElJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgLSBlZ2xvdC0t
Y29ubmVjdDwvZGl2PjxkaXYgY2xhc3M9ImdtYWlsX2V4dHJhIiBkaXI9ImF1dG8iPiZuYnNwOyAm
bmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7NCZuYnNwOyAmbmJzcDsxJSZuYnNwOyAm
bmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOy0gbGV0KjwvZGl2PjxkaXYg
Y2xhc3M9ImdtYWlsX2V4dHJhIiBkaXI9ImF1dG8iPiZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNw
OyAmbmJzcDsgJm5ic3A7MiZuYnNwOyAmbmJzcDswJSZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNw
OyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAtIHByb2plY3QtbmFtZTwvZGl2PjxkaXYgY2xhc3M9Imdt
YWlsX2V4dHJhIiBkaXI9ImF1dG8iPiZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsg
Jm5ic3A7MiZuYnNwOyAmbmJzcDswJSZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsg
Jm5ic3A7ICZuYnNwOyAmbmJzcDstIGFwcGx5PC9kaXY+PGRpdiBjbGFzcz0iZ21haWxfZXh0cmEi
IGRpcj0iYXV0byI+Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsyJm5i
c3A7ICZuYnNwOzAlJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5i
c3A7ICZuYnNwOyAtICMmbHQ7Y29tcGlsZWQtZnVuY3Rpb24gRDRBJmd0OzwvZGl2PjxkaXYgY2xh
c3M9ImdtYWlsX2V4dHJhIiBkaXI9ImF1dG8iPiZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAm
bmJzcDsgJm5ic3A7MiZuYnNwOyAmbmJzcDswJSZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAm
bmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7LSBhcHBseTwvZGl2PjxkaXYgY2xhc3M9
ImdtYWlsX2V4dHJhIiBkaXI9ImF1dG8iPiZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJz
cDsgJm5ic3A7MiZuYnNwOyAmbmJzcDswJSZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJz
cDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7IC0gIyZsdDtjb21waWxlZC1mdW5jdGlvbiBE
OEMmZ3Q7PC9kaXY+PGRpdiBjbGFzcz0iZ21haWxfZXh0cmEiIGRpcj0iYXV0byI+Jm5ic3A7ICZu
YnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsyJm5ic3A7ICZuYnNwOzAlJm5ic3A7ICZu
YnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5i
c3A7LSBwcm9qZWN0LS12YWx1ZS1pbi1kaXI8L2Rpdj48ZGl2IGNsYXNzPSJnbWFpbF9leHRyYSIg
ZGlyPSJhdXRvIj4mbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOzImbmJz
cDsgJm5ic3A7MCUmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJz
cDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgLSBoYWNrLWRpci1sb2NhbC12YXJpYWJsZXM8L2Rpdj48
ZGl2IGNsYXNzPSJnbWFpbF9leHRyYSIgZGlyPSJhdXRvIj4mbmJzcDsgJm5ic3A7ICZuYnNwOyAm
bmJzcDsgJm5ic3A7ICZuYnNwOzImbmJzcDsgJm5ic3A7MCUmbmJzcDsgJm5ic3A7ICZuYnNwOyAm
bmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7LSBo
YWNrLWRpci1sb2NhbC0tZ2V0LXZhcmlhYmxlczwvZGl2PjxkaXYgY2xhc3M9ImdtYWlsX2V4dHJh
IiBkaXI9ImF1dG8iPiZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7MiZu
YnNwOyAmbmJzcDswJSZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZu
YnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgLSBkaXItbG9jYWxzLWZpbmQtZmlsZTwv
ZGl2PjxkaXYgY2xhc3M9ImdtYWlsX2V4dHJhIiBkaXI9ImF1dG8iPiZuYnNwOyAmbmJzcDsgJm5i
c3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7MiZuYnNwOyAmbmJzcDswJSZuYnNwOyAmbmJzcDsgJm5i
c3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJz
cDsgJm5ic3A7LSBsb2NhdGUtZG9taW5hdGluZy1maWxlPC9kaXY+PGRpdiBjbGFzcz0iZ21haWxf
ZXh0cmEiIGRpcj0iYXV0byI+Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJz
cDsyJm5ic3A7ICZuYnNwOzAlJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJz
cDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7IGRpci1s
b2NhbHMtLWFsbC1maWxlczwvZGl2PjxkaXYgY2xhc3M9ImdtYWlsX2V4dHJhIiBkaXI9ImF1dG8i
PiZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7MSZuYnNwOyAmbmJzcDsw
JSZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAtIGFwcGx5
PC9kaXY+PGRpdiBjbGFzcz0iZ21haWxfZXh0cmEiIGRpcj0iYXV0byI+Jm5ic3A7ICZuYnNwOyAm
bmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsxJm5ic3A7ICZuYnNwOzAlJm5ic3A7ICZuYnNwOyAm
bmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOy0gbWFrZS1pbnN0YW5jZTwv
ZGl2PjxkaXYgY2xhc3M9ImdtYWlsX2V4dHJhIiBkaXI9ImF1dG8iPiZuYnNwOyAmbmJzcDsgJm5i
c3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7MSZuYnNwOyAmbmJzcDswJSZuYnNwOyAmbmJzcDsgJm5i
c3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgLSBhcHBseTwvZGl2PjxkaXYg
Y2xhc3M9ImdtYWlsX2V4dHJhIiBkaXI9ImF1dG8iPiZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNw
OyAmbmJzcDsgJm5ic3A7MSZuYnNwOyAmbmJzcDswJSZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNw
OyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7LSAjJmx0O2NvbXBpbGVkLWZ1bmN0
aW9uIDI5RiZndDs8L2Rpdj48ZGl2IGNsYXNzPSJnbWFpbF9leHRyYSIgZGlyPSJhdXRvIj4mbmJz
cDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOzEmbmJzcDsgJm5ic3A7MCUmbmJz
cDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNw
OyAtIGluaXRpYWxpemUtaW5zdGFuY2U8L2Rpdj48ZGl2IGNsYXNzPSJnbWFpbF9leHRyYSIgZGly
PSJhdXRvIj4mbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOzEmbmJzcDsg
Jm5ic3A7MCUmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsg
Jm5ic3A7ICZuYnNwOyAmbmJzcDstIGFwcGx5PC9kaXY+PGRpdiBjbGFzcz0iZ21haWxfZXh0cmEi
IGRpcj0iYXV0byI+Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsxJm5i
c3A7ICZuYnNwOzAlJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5i
c3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7IC0gIyZsdDtjb21waWxlZC1mdW5jdGlvbiA5MjEmZ3Q7
PC9kaXY+PGRpdiBjbGFzcz0iZ21haWxfZXh0cmEiIGRpcj0iYXV0byI+Jm5ic3A7ICZuYnNwOyAm
bmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsxJm5ic3A7ICZuYnNwOzAlJm5ic3A7ICZuYnNwOyAm
bmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZu
YnNwOy0gYXBwbHk8L2Rpdj48ZGl2IGNsYXNzPSJnbWFpbF9leHRyYSIgZGlyPSJhdXRvIj4mbmJz
cDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOzEmbmJzcDsgJm5ic3A7MCUmbmJz
cDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNw
OyAmbmJzcDsgJm5ic3A7IC0gIyZsdDtjb21waWxlZC1mdW5jdGlvbiBFMEMmZ3Q7PC9kaXY+PGRp
diBjbGFzcz0iZ21haWxfZXh0cmEiIGRpcj0iYXV0byI+Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5i
c3A7ICZuYnNwOyAmbmJzcDsxJm5ic3A7ICZuYnNwOzAlJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5i
c3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJz
cDstICMmbHQ7Y2xvc3VyZSBGMzQmZ3Q7PC9kaXY+PGRpdiBjbGFzcz0iZ21haWxfZXh0cmEiIGRp
cj0iYXV0byI+Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsxJm5ic3A7
ICZuYnNwOzAlJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7
ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgLSBsZXQ8L2Rpdj48ZGl2IGNsYXNz
PSJnbWFpbF9leHRyYSIgZGlyPSJhdXRvIj4mbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5i
c3A7ICZuYnNwOzEmbmJzcDsgJm5ic3A7MCUmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5i
c3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJz
cDsgJm5ic3A7bWFrZS1wcm9jZXNzPC9kaXY+PGRpdiBjbGFzcz0iZ21haWxfZXh0cmEiIGRpcj0i
YXV0byI+Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsxJm5ic3A7ICZu
YnNwOzAlJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7IC0g
dW53aW5kLXByb3RlY3Q8L2Rpdj48ZGl2IGNsYXNzPSJnbWFpbF9leHRyYSIgZGlyPSJhdXRvIj4m
bmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOzEmbmJzcDsgJm5ic3A7MCUm
bmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7LSBj
b25kaXRpb24tY2FzZTwvZGl2PjxkaXYgY2xhc3M9ImdtYWlsX2V4dHJhIiBkaXI9ImF1dG8iPiZu
YnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7MSZuYnNwOyAmbmJzcDswJSZu
YnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgLSBs
ZXQ8L2Rpdj48ZGl2IGNsYXNzPSJnbWFpbF9leHRyYSIgZGlyPSJhdXRvIj4mbmJzcDsgJm5ic3A7
ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOzEmbmJzcDsgJm5ic3A7MCUmbmJzcDsgJm5ic3A7
ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOy0gY2F0Y2g8
L2Rpdj48ZGl2IGNsYXNzPSJnbWFpbF9leHRyYSIgZGlyPSJhdXRvIj4mbmJzcDsgJm5ic3A7ICZu
YnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOzEmbmJzcDsgJm5ic3A7MCUmbmJzcDsgJm5ic3A7ICZu
YnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAtIGpzb25ycGMt
YXN5bmMtcmVxdWVzdDwvZGl2PjxkaXYgY2xhc3M9ImdtYWlsX2V4dHJhIiBkaXI9ImF1dG8iPiZu
YnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7MSZuYnNwOyAmbmJzcDswJSZu
YnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5i
c3A7ICZuYnNwOy0gbGlzdDwvZGl2PjxkaXYgY2xhc3M9ImdtYWlsX2V4dHJhIiBkaXI9ImF1dG8i
PiZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7MSZuYnNwOyAmbmJzcDsw
JSZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsg
Jm5ic3A7ICZuYnNwOyAtIGZpbGUtbG9jYWwtbmFtZTwvZGl2PjxkaXYgY2xhc3M9ImdtYWlsX2V4
dHJhIiBkaXI9ImF1dG8iPiZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7
MSZuYnNwOyAmbmJzcDswJSZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7
ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ZmlsZS1yZW1vdGUtcDwv
ZGl2PjxkaXYgY2xhc3M9ImdtYWlsX2V4dHJhIiBkaXI9ImF1dG8iPiZuYnNwOyAmbmJzcDsgJm5i
c3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7MiZuYnNwOyAmbmJzcDswJSZuYnNwOyAmbmJzcDsgJm5i
c3A7IC0gdGltZXItZXZlbnQtaGFuZGxlcjwvZGl2PjxkaXYgY2xhc3M9ImdtYWlsX2V4dHJhIiBk
aXI9ImF1dG8iPiZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7MSZuYnNw
OyAmbmJzcDswJSZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOy0gYXBwbHk8L2Rpdj48ZGl2IGNs
YXNzPSJnbWFpbF9leHRyYSIgZGlyPSJhdXRvIj4mbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsg
Jm5ic3A7ICZuYnNwOzEmbmJzcDsgJm5ic3A7MCUmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsg
LSBibGluay1jdXJzb3Itc3RhcnQ8L2Rpdj48ZGl2IGNsYXNzPSJnbWFpbF9leHRyYSIgZGlyPSJh
dXRvIj4mbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOzEmbmJzcDsgJm5i
c3A7MCUmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7LSBibGluay1jdXJzb3ItLXN0
YXJ0LXRpbWVyPC9kaXY+PGRpdiBjbGFzcz0iZ21haWxfZXh0cmEiIGRpcj0iYXV0byI+Jm5ic3A7
ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsxJm5ic3A7ICZuYnNwOzAlJm5ic3A7
ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAtIHJ1bi13aXRoLXRpbWVyPC9kaXY+PGRpdiBj
bGFzcz0iZ21haWxfZXh0cmEiIGRpcj0iYXV0byI+Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7
ICZuYnNwOyAmbmJzcDsxJm5ic3A7ICZuYnNwOzAlJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7
ICZuYnNwOyAmbmJzcDstIHJ1bi1hdC10aW1lPC9kaXY+PGRpdiBjbGFzcz0iZ21haWxfZXh0cmEi
IGRpcj0iYXV0byI+Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsxJm5i
c3A7ICZuYnNwOzAlJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5i
c3A7IHRpbWVyLXJlbGF0aXZlLXRpbWU8L2Rpdj48ZGl2IGNsYXNzPSJnbWFpbF9leHRyYSIgZGly
PSJhdXRvIj4mbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOzEmbmJzcDsg
Jm5ic3A7MCUmbmJzcDsgJm5ic3A7ICZuYnNwOyAtIG1pbmlidWZmZXItc2V0dXAtb24tc2NyZWVu
LWtleWJvYXJkPC9kaXY+PGRpdiBjbGFzcz0iZ21haWxfZXh0cmEiIGRpcj0iYXV0byI+Jm5ic3A7
ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsxJm5ic3A7ICZuYnNwOzAlJm5ic3A7
ICZuYnNwOyAmbmJzcDsgJm5ic3A7LSBkZXZpY2UtY2xhc3M8L2Rpdj48ZGl2IGNsYXNzPSJnbWFp
bF9leHRyYSIgZGlyPSJhdXRvIj4mbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZu
YnNwOzEmbmJzcDsgJm5ic3A7MCUmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7IHgt
ZGV2aWNlLWNsYXNzPC9kaXY+PGRpdiBjbGFzcz0iZ21haWxfZXh0cmEiIGRpcj0iYXV0byI+Jm5i
c3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsyJm5ic3A7ICZuYnNwOzAlJm5i
c3A7IC0gZnVuY2FsbC1pbnRlcmFjdGl2ZWx5PC9kaXY+PGRpdiBjbGFzcz0iZ21haWxfZXh0cmEi
IGRpcj0iYXV0byI+Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsyJm5i
c3A7ICZuYnNwOzAlJm5ic3A7ICZuYnNwOyAmbmJzcDtleGVjdXRlLWV4dGVuZGVkLWNvbW1hbmQ8
L2Rpdj48ZGl2IGNsYXNzPSJnbWFpbF9leHRyYSIgZGlyPSJhdXRvIj4mbmJzcDsgJm5ic3A7ICZu
YnNwOyAmbmJzcDsgJm5ic3A7IDY0Jm5ic3A7IDMwJSZuYnNwOyAmbmJzcDtBdXRvbWF0aWMgR0M8
L2Rpdj48ZGl2IGNsYXNzPSJnbWFpbF9leHRyYSIgZGlyPSJhdXRvIj4mbmJzcDsgJm5ic3A7ICZu
YnNwOyAmbmJzcDsgJm5ic3A7IDMzJm5ic3A7IDE1JSZuYnNwOyAmbmJzcDtyZWRpc3BsYXlfaW50
ZXJuYWwgKEMgZnVuY3Rpb24pPC9kaXY+PGRpdiBjbGFzcz0iZ21haWxfZXh0cmEiIGRpcj0iYXV0
byI+Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAyMyZuYnNwOyAxMCUgLSAuLi48
L2Rpdj48ZGl2IGNsYXNzPSJnbWFpbF9leHRyYSIgZGlyPSJhdXRvIj4mbmJzcDsgJm5ic3A7ICZu
YnNwOyAmbmJzcDsgJm5ic3A7IDE2Jm5ic3A7ICZuYnNwOzclJm5ic3A7IC0gIyZsdDtjbG9zdXJl
IERFRiZndDs8L2Rpdj48ZGl2IGNsYXNzPSJnbWFpbF9leHRyYSIgZGlyPSJhdXRvIj4mbmJzcDsg
Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7IDE2Jm5ic3A7ICZuYnNwOzclJm5ic3A7ICZuYnNw
Oy0gbGV0PC9kaXY+PGRpdiBjbGFzcz0iZ21haWxfZXh0cmEiIGRpcj0iYXV0byI+Jm5ic3A7ICZu
YnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAxNiZuYnNwOyAmbmJzcDs3JSZuYnNwOyAmbmJzcDsg
LSBhcHBseTwvZGl2PjxkaXYgY2xhc3M9ImdtYWlsX2V4dHJhIiBkaXI9ImF1dG8iPiZuYnNwOyAm
bmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgMTYmbmJzcDsgJm5ic3A7NyUmbmJzcDsgJm5ic3A7
ICZuYnNwOy0gZWdsb3QtaGFuZGxlLW5vdGlmaWNhdGlvbjwvZGl2PjxkaXYgY2xhc3M9ImdtYWls
X2V4dHJhIiBkaXI9ImF1dG8iPiZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgMTYm
bmJzcDsgJm5ic3A7NyUmbmJzcDsgJm5ic3A7ICZuYnNwOyAtIGFwcGx5PC9kaXY+PGRpdiBjbGFz
cz0iZ21haWxfZXh0cmEiIGRpcj0iYXV0byI+Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZu
YnNwOyAxNiZuYnNwOyAmbmJzcDs3JSZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOy0gIyZsdDtj
bG9zdXJlIDJDQiZndDs8L2Rpdj48ZGl2IGNsYXNzPSJnbWFpbF9leHRyYSIgZGlyPSJhdXRvIj4m
bmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7IDE2Jm5ic3A7ICZuYnNwOzclJm5ic3A7
ICZuYnNwOyAmbmJzcDsgJm5ic3A7IC0gcHJvZ248L2Rpdj48ZGl2IGNsYXNzPSJnbWFpbF9leHRy
YSIgZGlyPSJhdXRvIj4mbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7IDE2Jm5ic3A7
ICZuYnNwOzclJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOy0gbGV0KjwvZGl2Pjxk
aXYgY2xhc3M9ImdtYWlsX2V4dHJhIiBkaXI9ImF1dG8iPiZuYnNwOyAmbmJzcDsgJm5ic3A7ICZu
YnNwOyAmbmJzcDsgMTYmbmJzcDsgJm5ic3A7NyUmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsg
Jm5ic3A7IC0gbGV0KjwvZGl2PjxkaXYgY2xhc3M9ImdtYWlsX2V4dHJhIiBkaXI9ImF1dG8iPiZu
YnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgMTYmbmJzcDsgJm5ic3A7NyUmbmJzcDsg
Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOy0gcHJvZ248L2Rpdj48ZGl2IGNsYXNz
PSJnbWFpbF9leHRyYSIgZGlyPSJhdXRvIj4mbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5i
c3A7IDE1Jm5ic3A7ICZuYnNwOzclJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAm
bmJzcDsgLSBsZXQqPC9kaXY+PGRpdiBjbGFzcz0iZ21haWxfZXh0cmEiIGRpcj0iYXV0byI+Jm5i
c3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAxMCZuYnNwOyAmbmJzcDs0JSZuYnNwOyAm
bmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOy0gYW5kPC9kaXY+PGRpdiBj
bGFzcz0iZ21haWxfZXh0cmEiIGRpcj0iYXV0byI+Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7
ICZuYnNwOyAmbmJzcDs5Jm5ic3A7ICZuYnNwOzQlJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7
ICZuYnNwOyAmbmJzcDsgJm5ic3A7IC0gZmluZC1idWZmZXItdmlzaXRpbmc8L2Rpdj48ZGl2IGNs
YXNzPSJnbWFpbF9leHRyYSIgZGlyPSJhdXRvIj4mbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsg
Jm5ic3A7ICZuYnNwOzkmbmJzcDsgJm5ic3A7NCUmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsg
Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7LSBmaWxlLXRydWVuYW1lPC9kaXY+PGRpdiBjbGFz
cz0iZ21haWxfZXh0cmEiIGRpcj0iYXV0byI+Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZu
YnNwOyAmbmJzcDs5Jm5ic3A7ICZuYnNwOzQlJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZu
YnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAtIGZpbGUtdHJ1ZW5hbWU8L2Rpdj48ZGl2IGNsYXNz
PSJnbWFpbF9leHRyYSIgZGlyPSJhdXRvIj4mbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5i
c3A7ICZuYnNwOzkmbmJzcDsgJm5ic3A7NCUmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5i
c3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOy0gZmlsZS10cnVlbmFtZTwvZGl2PjxkaXYg
Y2xhc3M9ImdtYWlsX2V4dHJhIiBkaXI9ImF1dG8iPiZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNw
OyAmbmJzcDsgJm5ic3A7OSZuYnNwOyAmbmJzcDs0JSZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNw
OyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7IC0gZmlsZS10cnVlbmFtZTwvZGl2
PjxkaXYgY2xhc3M9ImdtYWlsX2V4dHJhIiBkaXI9ImF1dG8iPiZuYnNwOyAmbmJzcDsgJm5ic3A7
ICZuYnNwOyAmbmJzcDsgJm5ic3A7OCZuYnNwOyAmbmJzcDszJSZuYnNwOyAmbmJzcDsgJm5ic3A7
ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOy0gZmlsZS10
cnVlbmFtZTwvZGl2PjxkaXYgY2xhc3M9ImdtYWlsX2V4dHJhIiBkaXI9ImF1dG8iPiZuYnNwOyAm
bmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7NiZuYnNwOyAmbmJzcDsyJSZuYnNwOyAm
bmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZu
YnNwOyAtIGZpbGUtdHJ1ZW5hbWU8L2Rpdj48ZGl2IGNsYXNzPSJnbWFpbF9leHRyYSIgZGlyPSJh
dXRvIj4mbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOzQmbmJzcDsgJm5i
c3A7MSUmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5i
c3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7LSBmaWxlLXRydWVuYW1lPC9kaXY+PGRpdiBjbGFzcz0i
Z21haWxfZXh0cmEiIGRpcj0iYXV0byI+Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNw
OyAmbmJzcDsyJm5ic3A7ICZuYnNwOzAlJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNw
OyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAtIGZpbGUtdHJ1ZW5h
bWU8L2Rpdj48ZGl2IGNsYXNzPSJnbWFpbF9leHRyYSIgZGlyPSJhdXRvIj4mbmJzcDsgJm5ic3A7
ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOzImbmJzcDsgJm5ic3A7MCUmbmJzcDsgJm5ic3A7
ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsg
Jm5ic3A7ICZuYnNwOy0gZmlsZS10cnVlbmFtZTwvZGl2PjxkaXYgY2xhc3M9ImdtYWlsX2V4dHJh
IiBkaXI9ImF1dG8iPiZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7MiZu
YnNwOyAmbmJzcDswJSZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZu
YnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7IC0gZmlsZS10cnVlbmFtZTwv
ZGl2PjxkaXYgY2xhc3M9ImdtYWlsX2V4dHJhIiBkaXI9ImF1dG8iPiZuYnNwOyAmbmJzcDsgJm5i
c3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7MiZuYnNwOyAmbmJzcDswJSZuYnNwOyAmbmJzcDsgJm5i
c3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJz
cDsgJm5ic3A7ICZuYnNwOy0gZmlsZS10cnVlbmFtZTwvZGl2PjxkaXYgY2xhc3M9ImdtYWlsX2V4
dHJhIiBkaXI9ImF1dG8iPiZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7
MiZuYnNwOyAmbmJzcDswJSZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7
ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAtIGZpbGUt
dHJ1ZW5hbWU8L2Rpdj48ZGl2IGNsYXNzPSJnbWFpbF9leHRyYSIgZGlyPSJhdXRvIj4mbmJzcDsg
Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOzImbmJzcDsgJm5ic3A7MCUmbmJzcDsg
Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAm
bmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwO2ZpbGUtdHJ1ZW5hbWU8L2Rp
dj48ZGl2IGNsYXNzPSJnbWFpbF9leHRyYSIgZGlyPSJhdXRvIj4mbmJzcDsgJm5ic3A7ICZuYnNw
OyAmbmJzcDsgJm5ic3A7ICZuYnNwOzEmbmJzcDsgJm5ic3A7MCUmbmJzcDsgJm5ic3A7ICZuYnNw
OyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgLSBleHBhbmQtZmlsZS1uYW1lPC9kaXY+PGRp
diBjbGFzcz0iZ21haWxfZXh0cmEiIGRpcj0iYXV0byI+Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5i
c3A7ICZuYnNwOyAmbmJzcDsxJm5ic3A7ICZuYnNwOzAlJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5i
c3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOy0gZWdsb3QtdXJpLXRvLXBhdGg8L2Rpdj48
ZGl2IGNsYXNzPSJnbWFpbF9leHRyYSIgZGlyPSJhdXRvIj4mbmJzcDsgJm5ic3A7ICZuYnNwOyAm
bmJzcDsgJm5ic3A7ICZuYnNwOzEmbmJzcDsgJm5ic3A7MCUmbmJzcDsgJm5ic3A7ICZuYnNwOyAm
bmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7IC0gbGV0KjwvZGl2PjxkaXYgY2xhc3M9
ImdtYWlsX2V4dHJhIiBkaXI9ImF1dG8iPiZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJz
cDsgJm5ic3A7MSZuYnNwOyAmbmJzcDswJSZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJz
cDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwO3VybC1nZW5lcmljLXBhcnNlLXVy
bDwvZGl2PjxkaXYgY2xhc3M9ImdtYWlsX2V4dHJhIiBkaXI9ImF1dG8iPiZuYnNwOyAmbmJzcDsg
Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7NSZuYnNwOyAmbmJzcDsyJSZuYnNwOyAmbmJzcDsg
Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOy0gZGVsZXRlLWR1cHM8L2Rpdj48ZGl2
IGNsYXNzPSJnbWFpbF9leHRyYSIgZGlyPSJhdXRvIj4mbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJz
cDsgJm5ic3A7ICZuYnNwOzUmbmJzcDsgJm5ic3A7MiUmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJz
cDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgLSBtYXBjYXI8L2Rpdj48ZGl2IGNsYXNzPSJnbWFpbF9l
eHRyYSIgZGlyPSJhdXRvIj4mbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNw
OzMmbmJzcDsgJm5ic3A7MSUmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNw
OyAmbmJzcDsgJm5ic3A7LSBwcm9qZWN0LWZpbGVzPC9kaXY+PGRpdiBjbGFzcz0iZ21haWxfZXh0
cmEiIGRpcj0iYXV0byI+Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsz
Jm5ic3A7ICZuYnNwOzElJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsg
Jm5ic3A7ICZuYnNwOyAtIGFwcGx5PC9kaXY+PGRpdiBjbGFzcz0iZ21haWxfZXh0cmEiIGRpcj0i
YXV0byI+Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDszJm5ic3A7ICZu
YnNwOzElJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZu
YnNwOyAmbmJzcDstICMmbHQ7Y29tcGlsZWQtZnVuY3Rpb24gQ0UxJmd0OzwvZGl2PjxkaXYgY2xh
c3M9ImdtYWlsX2V4dHJhIiBkaXI9ImF1dG8iPiZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAm
bmJzcDsgJm5ic3A7MyZuYnNwOyAmbmJzcDsxJSZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAm
bmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7IC0gbWFwY2FuPC9kaXY+PGRpdiBjbGFz
cz0iZ21haWxfZXh0cmEiIGRpcj0iYXV0byI+Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZu
YnNwOyAmbmJzcDszJm5ic3A7ICZuYnNwOzElJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZu
YnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7LSAjJmx0O2NvbXBpbGVkLWZ1
bmN0aW9uIDhDRSZndDs8L2Rpdj48ZGl2IGNsYXNzPSJnbWFpbF9leHRyYSIgZGlyPSJhdXRvIj4m
bmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOzImbmJzcDsgJm5ic3A7MCUm
bmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZu
YnNwOyAmbmJzcDsgLSBwcm9qZWN0LS12Yy1saXN0LWZpbGVzPC9kaXY+PGRpdiBjbGFzcz0iZ21h
aWxfZXh0cmEiIGRpcj0iYXV0byI+Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAm
bmJzcDsxJm5ic3A7ICZuYnNwOzAlJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAm
bmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOy0gdmMtZ2l0LS1ydW4tY29t
bWFuZC1zdHJpbmc8L2Rpdj48ZGl2IGNsYXNzPSJnbWFpbF9leHRyYSIgZGlyPSJhdXRvIj4mbmJz
cDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOzEmbmJzcDsgJm5ic3A7MCUmbmJz
cDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNw
OyAmbmJzcDsgJm5ic3A7IC0gdmMtZ2l0LS1vdXQtb2s8L2Rpdj48ZGl2IGNsYXNzPSJnbWFpbF9l
eHRyYSIgZGlyPSJhdXRvIj4mbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNw
OzEmbmJzcDsgJm5ic3A7MCUmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNw
OyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOy0gdmMtZ2l0LS1jYWxs
PC9kaXY+PGRpdiBjbGFzcz0iZ21haWxfZXh0cmEiIGRpcj0iYXV0byI+Jm5ic3A7ICZuYnNwOyAm
bmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsxJm5ic3A7ICZuYnNwOzAlJm5ic3A7ICZuYnNwOyAm
bmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZu
YnNwOyAmbmJzcDsgLSBwcm9jZXNzLWZpbGU8L2Rpdj48ZGl2IGNsYXNzPSJnbWFpbF9leHRyYSIg
ZGlyPSJhdXRvIj4mbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOzEmbmJz
cDsgJm5ic3A7MCUmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJz
cDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7Y2FsbC1w
cm9jZXNzPC9kaXY+PGRpdiBjbGFzcz0iZ21haWxfZXh0cmEiIGRpcj0iYXV0byI+Jm5ic3A7ICZu
YnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsxJm5ic3A7ICZuYnNwOzAlJm5ic3A7ICZu
YnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5i
c3A7ICZuYnNwOy0gcHJvamVjdC0tdmMtbWVyZ2Utc3VibW9kdWxlcy1wPC9kaXY+PGRpdiBjbGFz
cz0iZ21haWxfZXh0cmEiIGRpcj0iYXV0byI+Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZu
YnNwOyAmbmJzcDsxJm5ic3A7ICZuYnNwOzAlJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZu
YnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAtIHByb2plY3Qt
LXZhbHVlLWluLWRpcjwvZGl2PjxkaXYgY2xhc3M9ImdtYWlsX2V4dHJhIiBkaXI9ImF1dG8iPiZu
YnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7MSZuYnNwOyAmbmJzcDswJSZu
YnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5i
c3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7LSBoYWNrLWRpci1sb2NhbC12YXJpYWJsZXM8L2Rpdj48
ZGl2IGNsYXNzPSJnbWFpbF9leHRyYSIgZGlyPSJhdXRvIj4mbmJzcDsgJm5ic3A7ICZuYnNwOyAm
bmJzcDsgJm5ic3A7ICZuYnNwOzEmbmJzcDsgJm5ic3A7MCUmbmJzcDsgJm5ic3A7ICZuYnNwOyAm
bmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZu
YnNwOyAtIGhhY2stZGlyLWxvY2FsLS1nZXQtdmFyaWFibGVzPC9kaXY+PGRpdiBjbGFzcz0iZ21h
aWxfZXh0cmEiIGRpcj0iYXV0byI+Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAm
bmJzcDsxJm5ic3A7ICZuYnNwOzAlJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAm
bmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7LSBk
aXItbG9jYWxzLWZpbmQtZmlsZTwvZGl2PjxkaXYgY2xhc3M9ImdtYWlsX2V4dHJhIiBkaXI9ImF1
dG8iPiZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7MSZuYnNwOyAmbmJz
cDswJSZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJz
cDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAtIGxvY2F0ZS1kb21pbmF0aW5n
LWZpbGU8L2Rpdj48ZGl2IGNsYXNzPSJnbWFpbF9leHRyYSIgZGlyPSJhdXRvIj4mbmJzcDsgJm5i
c3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOzEmbmJzcDsgJm5ic3A7MCUmbmJzcDsgJm5i
c3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJz
cDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwO2Rpci1sb2NhbHMtLWFsbC1maWxl
czwvZGl2PjxkaXYgY2xhc3M9ImdtYWlsX2V4dHJhIiBkaXI9ImF1dG8iPiZuYnNwOyAmbmJzcDsg
Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7MSZuYnNwOyAmbmJzcDswJSZuYnNwOyAmbmJzcDsg
Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAt
IGZpbGUtZXF1YWwtcDwvZGl2PjxkaXYgY2xhc3M9ImdtYWlsX2V4dHJhIiBkaXI9ImF1dG8iPiZu
YnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7MSZuYnNwOyAmbmJzcDswJSZu
YnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5i
c3A7ICZuYnNwOyAmbmJzcDstIGZpbGUtdHJ1ZW5hbWU8L2Rpdj48ZGl2IGNsYXNzPSJnbWFpbF9l
eHRyYSIgZGlyPSJhdXRvIj4mbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNw
OzEmbmJzcDsgJm5ic3A7MCUmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNw
OyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7IC0gZmlsZS10cnVlbmFtZTwvZGl2
PjxkaXYgY2xhc3M9ImdtYWlsX2V4dHJhIiBkaXI9ImF1dG8iPiZuYnNwOyAmbmJzcDsgJm5ic3A7
ICZuYnNwOyAmbmJzcDsgJm5ic3A7MSZuYnNwOyAmbmJzcDswJSZuYnNwOyAmbmJzcDsgJm5ic3A7
ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsg
Jm5ic3A7LSBmaWxlLXRydWVuYW1lPC9kaXY+PGRpdiBjbGFzcz0iZ21haWxfZXh0cmEiIGRpcj0i
YXV0byI+Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsxJm5ic3A7ICZu
YnNwOzAlJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZu
YnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgLSBmaWxlLXRydWVuYW1lPC9kaXY+PGRp
diBjbGFzcz0iZ21haWxfZXh0cmEiIGRpcj0iYXV0byI+Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5i
c3A7ICZuYnNwOyAmbmJzcDsxJm5ic3A7ICZuYnNwOzAlJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5i
c3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJz
cDsgJm5ic3A7LSBmaWxlLXRydWVuYW1lPC9kaXY+PGRpdiBjbGFzcz0iZ21haWxfZXh0cmEiIGRp
cj0iYXV0byI+Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsxJm5ic3A7
ICZuYnNwOzAlJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7
ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7IC0gZmlsZS10cnVlbmFt
ZTwvZGl2PjxkaXYgY2xhc3M9ImdtYWlsX2V4dHJhIiBkaXI9ImF1dG8iPiZuYnNwOyAmbmJzcDsg
Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7MSZuYnNwOyAmbmJzcDswJSZuYnNwOyAmbmJzcDsg
Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAm
bmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDstIGZpbGUtdHJ1ZW5hbWU8L2Rpdj48ZGl2IGNsYXNz
PSJnbWFpbF9leHRyYSIgZGlyPSJhdXRvIj4mbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5i
c3A7ICZuYnNwOzEmbmJzcDsgJm5ic3A7MCUmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5i
c3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJz
cDsgJm5ic3A7IC0gZmlsZS10cnVlbmFtZTwvZGl2PjxkaXYgY2xhc3M9ImdtYWlsX2V4dHJhIiBk
aXI9ImF1dG8iPiZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7MSZuYnNw
OyAmbmJzcDswJSZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNw
OyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7
LSBmaWxlLXRydWVuYW1lPC9kaXY+PGRpdiBjbGFzcz0iZ21haWxfZXh0cmEiIGRpcj0iYXV0byI+
Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsxJm5ic3A7ICZuYnNwOzAl
Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAm
bmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgLSBmaWxlLXRy
dWVuYW1lPC9kaXY+PGRpdiBjbGFzcz0iZ21haWxfZXh0cmEiIGRpcj0iYXV0byI+Jm5ic3A7ICZu
YnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsxJm5ic3A7ICZuYnNwOzAlJm5ic3A7ICZu
YnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5i
c3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwO2ZpbGUt
dHJ1ZW5hbWU8L2Rpdj48ZGl2IGNsYXNzPSJnbWFpbF9leHRyYSIgZGlyPSJhdXRvIj4mbmJzcDsg
Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOzImbmJzcDsgJm5ic3A7MCUmbmJzcDsg
Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7LSBmdW5jdGlv
bjwvZGl2PjxkaXYgY2xhc3M9ImdtYWlsX2V4dHJhIiBkaXI9ImF1dG8iPiZuYnNwOyAmbmJzcDsg
Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7MiZuYnNwOyAmbmJzcDswJSZuYnNwOyAmbmJzcDsg
Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgLSBjY29udi1tYWtlLWlu
dGVycHJldGVkLWNsb3N1cmU8L2Rpdj48ZGl2IGNsYXNzPSJnbWFpbF9leHRyYSIgZGlyPSJhdXRv
Ij4mbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOzImbmJzcDsgJm5ic3A7
MCUmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7
ICZuYnNwOy0gbWFjcm9leHBhbmQtYWxsPC9kaXY+PGRpdiBjbGFzcz0iZ21haWxfZXh0cmEiIGRp
cj0iYXV0byI+Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsyJm5ic3A7
ICZuYnNwOzAlJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7
ICZuYnNwOyAmbmJzcDsgLSBtYWNyb2V4cC0tZXhwYW5kLWFsbDwvZGl2PjxkaXYgY2xhc3M9Imdt
YWlsX2V4dHJhIiBkaXI9ImF1dG8iPiZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsg
Jm5ic3A7MiZuYnNwOyAmbmJzcDswJSZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsg
Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOy0gbWFjcm9leHAtLWFsbC1mb3Jtczwv
ZGl2PjxkaXYgY2xhc3M9ImdtYWlsX2V4dHJhIiBkaXI9ImF1dG8iPiZuYnNwOyAmbmJzcDsgJm5i
c3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7MiZuYnNwOyAmbmJzcDswJSZuYnNwOyAmbmJzcDsgJm5i
c3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAtIG1h
Y3JvZXhwLS1leHBhbmQtYWxsPC9kaXY+PGRpdiBjbGFzcz0iZ21haWxfZXh0cmEiIGRpcj0iYXV0
byI+Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsyJm5ic3A7ICZuYnNw
OzAlJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNw
OyAmbmJzcDsgJm5ic3A7ICZuYnNwOy0gbWFjcm9leHAtLWFsbC1mb3JtczwvZGl2PjxkaXYgY2xh
c3M9ImdtYWlsX2V4dHJhIiBkaXI9ImF1dG8iPiZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAm
bmJzcDsgJm5ic3A7MiZuYnNwOyAmbmJzcDswJSZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAm
bmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgLSBtYWNyb2V4
cC0tZXhwYW5kLWFsbDwvZGl2PjxkaXYgY2xhc3M9ImdtYWlsX2V4dHJhIiBkaXI9ImF1dG8iPiZu
YnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7MiZuYnNwOyAmbmJzcDswJSZu
YnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5i
c3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7LSBtYWNyb2V4cC0tYWxsLWZvcm1zPC9kaXY+PGRpdiBj
bGFzcz0iZ21haWxfZXh0cmEiIGRpcj0iYXV0byI+Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7
ICZuYnNwOyAmbmJzcDsyJm5ic3A7ICZuYnNwOzAlJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7
ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsg
LSBtYWNyb2V4cC0tZXhwYW5kLWFsbDwvZGl2PjxkaXYgY2xhc3M9ImdtYWlsX2V4dHJhIiBkaXI9
ImF1dG8iPiZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7MiZuYnNwOyAm
bmJzcDswJSZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAm
bmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOy0gbWFjcm9leHAtLWFsbC1m
b3JtczwvZGl2PjxkaXYgY2xhc3M9ImdtYWlsX2V4dHJhIiBkaXI9ImF1dG8iPiZuYnNwOyAmbmJz
cDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7MiZuYnNwOyAmbmJzcDswJSZuYnNwOyAmbmJz
cDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNw
OyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAtIG1hY3JvZXhwLS1leHBhbmQtYWxsPC9kaXY+PGRpdiBj
bGFzcz0iZ21haWxfZXh0cmEiIGRpcj0iYXV0byI+Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7
ICZuYnNwOyAmbmJzcDsyJm5ic3A7ICZuYnNwOzAlJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7
ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsg
Jm5ic3A7ICZuYnNwOy0gbWFjcm9leHAtLWFsbC1mb3JtczwvZGl2PjxkaXYgY2xhc3M9ImdtYWls
X2V4dHJhIiBkaXI9ImF1dG8iPiZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5i
c3A7MiZuYnNwOyAmbmJzcDswJSZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5i
c3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJz
cDsgLSBtYWNyb2V4cC0tZXhwYW5kLWFsbDwvZGl2PjxkaXYgY2xhc3M9ImdtYWlsX2V4dHJhIiBk
aXI9ImF1dG8iPiZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7MSZuYnNw
OyAmbmJzcDswJSZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNw
OyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7
ICZuYnNwO2Z1bmN0aW9uLWdldDwvZGl2PjxkaXYgY2xhc3M9ImdtYWlsX2V4dHJhIiBkaXI9ImF1
dG8iPiZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7MSZuYnNwOyAmbmJz
cDswJSZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJz
cDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7LSBtYWNy
b2V4cC0tYWxsLWZvcm1zPC9kaXY+PGRpdiBjbGFzcz0iZ21haWxfZXh0cmEiIGRpcj0iYXV0byI+
Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsxJm5ic3A7ICZuYnNwOzAl
Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAm
bmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgLSBtYWNyb2V4
cC0tZXhwYW5kLWFsbDwvZGl2PjxkaXYgY2xhc3M9ImdtYWlsX2V4dHJhIiBkaXI9ImF1dG8iPiZu
YnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7MSZuYnNwOyAmbmJzcDswJSZu
YnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5i
c3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOy0gbWFj
cm9leHAtLWFsbC1jbGF1c2VzPC9kaXY+PGRpdiBjbGFzcz0iZ21haWxfZXh0cmEiIGRpcj0iYXV0
byI+Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsxJm5ic3A7ICZuYnNw
OzAlJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNw
OyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7
IC0gbWFjcm9leHAtLWFsbC1mb3JtczwvZGl2PjxkaXYgY2xhc3M9ImdtYWlsX2V4dHJhIiBkaXI9
ImF1dG8iPiZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7MSZuYnNwOyAm
bmJzcDswJSZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAm
bmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZu
YnNwOyAmbmJzcDstIG1hY3JvZXhwLS1leHBhbmQtYWxsPC9kaXY+PGRpdiBjbGFzcz0iZ21haWxf
ZXh0cmEiIGRpcj0iYXV0byI+Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJz
cDsxJm5ic3A7ICZuYnNwOzAlJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJz
cDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNw
OyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgZnVuY3Rpb24tZ2V0PC9kaXY+PGRpdiBjbGFz
cz0iZ21haWxfZXh0cmEiIGRpcj0iYXV0byI+Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZu
YnNwOyAmbmJzcDsxJm5ic3A7ICZuYnNwOzAlJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZu
YnNwOyAmbmJzcDsgLSBpZjwvZGl2PjxkaXYgY2xhc3M9ImdtYWlsX2V4dHJhIiBkaXI9ImF1dG8i
PiZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7MSZuYnNwOyAmbmJzcDsw
JSZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOy0gbGV0PC9k
aXY+PGRpdiBjbGFzcz0iZ21haWxfZXh0cmEiIGRpcj0iYXV0byI+Jm5ic3A7ICZuYnNwOyAmbmJz
cDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsxJm5ic3A7ICZuYnNwOzAlJm5ic3A7ICZuYnNwOyAmbmJz
cDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7IC0gd2hpbGU8L2Rpdj48ZGl2IGNsYXNzPSJn
bWFpbF9leHRyYSIgZGlyPSJhdXRvIj4mbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7
ICZuYnNwOzEmbmJzcDsgJm5ic3A7MCUmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7
ICZuYnNwOyAmbmJzcDsgJm5ic3A7LSBsZXQ8L2Rpdj48ZGl2IGNsYXNzPSJnbWFpbF9leHRyYSIg
ZGlyPSJhdXRvIj4mbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOzEmbmJz
cDsgJm5ic3A7MCUmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJz
cDsgJm5ic3A7IC0gc2F2ZS1jdXJyZW50LWJ1ZmZlcjwvZGl2PjxkaXYgY2xhc3M9ImdtYWlsX2V4
dHJhIiBkaXI9ImF1dG8iPiZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7
MSZuYnNwOyAmbmJzcDswJSZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7
ICZuYnNwOyAmbmJzcDsgJm5ic3A7LSBlZ2xvdC0tbWF5YmUtYWN0aXZhdGUtZWRpdGluZy1tb2Rl
PC9kaXY+PGRpdiBjbGFzcz0iZ21haWxfZXh0cmEiIGRpcj0iYXV0byI+Jm5ic3A7ICZuYnNwOyAm
bmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsxJm5ic3A7ICZuYnNwOzAlJm5ic3A7ICZuYnNwOyAm
bmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgLSBpZjwvZGl2
PjxkaXYgY2xhc3M9ImdtYWlsX2V4dHJhIiBkaXI9ImF1dG8iPiZuYnNwOyAmbmJzcDsgJm5ic3A7
ICZuYnNwOyAmbmJzcDsgJm5ic3A7MSZuYnNwOyAmbmJzcDswJSZuYnNwOyAmbmJzcDsgJm5ic3A7
ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOy0gaWY8L2Rp
dj48ZGl2IGNsYXNzPSJnbWFpbF9leHRyYSIgZGlyPSJhdXRvIj4mbmJzcDsgJm5ic3A7ICZuYnNw
OyAmbmJzcDsgJm5ic3A7ICZuYnNwOzEmbmJzcDsgJm5ic3A7MCUmbmJzcDsgJm5ic3A7ICZuYnNw
OyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgLSBwcm9n
bjwvZGl2PjxkaXYgY2xhc3M9ImdtYWlsX2V4dHJhIiBkaXI9ImF1dG8iPiZuYnNwOyAmbmJzcDsg
Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7MSZuYnNwOyAmbmJzcDswJSZuYnNwOyAmbmJzcDsg
Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAm
bmJzcDstIGVnbG90LS1tYW5hZ2VkLW1vZGU8L2Rpdj48ZGl2IGNsYXNzPSJnbWFpbF9leHRyYSIg
ZGlyPSJhdXRvIj4mbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOzEmbmJz
cDsgJm5ic3A7MCUmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJz
cDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7IC0gbGV0PC9kaXY+PGRpdiBjbGFzcz0iZ21h
aWxfZXh0cmEiIGRpcj0iYXV0byI+Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAm
bmJzcDsxJm5ic3A7ICZuYnNwOzAlJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAm
bmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDstIGNvbmQ8L2Rp
dj48ZGl2IGNsYXNzPSJnbWFpbF9leHRyYSIgZGlyPSJhdXRvIj4mbmJzcDsgJm5ic3A7ICZuYnNw
OyAmbmJzcDsgJm5ic3A7ICZuYnNwOzEmbmJzcDsgJm5ic3A7MCUmbmJzcDsgJm5ic3A7ICZuYnNw
OyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7
ICZuYnNwOyAtIGlmPC9kaXY+PGRpdiBjbGFzcz0iZ21haWxfZXh0cmEiIGRpcj0iYXV0byI+Jm5i
c3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsxJm5ic3A7ICZuYnNwOzAlJm5i
c3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJz
cDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwO2FkZC1ob29rPC9kaXY+PGRpdiBj
bGFzcz0iZ21haWxfZXh0cmEiIGRpcj0iYXV0byI+Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7
ICZuYnNwOyAmbmJzcDs2Jm5ic3A7ICZuYnNwOzIlJm5ic3A7IC0gIyZsdDtjbG9zdXJlIDc2QyZn
dDs8L2Rpdj48ZGl2IGNsYXNzPSJnbWFpbF9leHRyYSIgZGlyPSJhdXRvIj4mbmJzcDsgJm5ic3A7
ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOzYmbmJzcDsgJm5ic3A7MiUmbmJzcDsgJm5ic3A7
LSBwcm9nbjwvZGl2PjxkaXYgY2xhc3M9ImdtYWlsX2V4dHJhIiBkaXI9ImF1dG8iPiZuYnNwOyAm
bmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7NiZuYnNwOyAmbmJzcDsyJSZuYnNwOyAm
bmJzcDsgLSBsZXQqPC9kaXY+PGRpdiBjbGFzcz0iZ21haWxfZXh0cmEiIGRpcj0iYXV0byI+Jm5i
c3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDs2Jm5ic3A7ICZuYnNwOzIlJm5i
c3A7ICZuYnNwOyAmbmJzcDstIHByb2duPC9kaXY+PGRpdiBjbGFzcz0iZ21haWxfZXh0cmEiIGRp
cj0iYXV0byI+Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDs2Jm5ic3A7
ICZuYnNwOzIlJm5ic3A7ICZuYnNwOyAmbmJzcDsgLSBsZXQqPC9kaXY+PGRpdiBjbGFzcz0iZ21h
aWxfZXh0cmEiIGRpcj0iYXV0byI+Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAm
bmJzcDs1Jm5ic3A7ICZuYnNwOzIlJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7LSBtYXBjYXI8
L2Rpdj48ZGl2IGNsYXNzPSJnbWFpbF9leHRyYSIgZGlyPSJhdXRvIj4mbmJzcDsgJm5ic3A7ICZu
YnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOzUmbmJzcDsgJm5ic3A7MiUmbmJzcDsgJm5ic3A7ICZu
YnNwOyAmbmJzcDsgLSAjJmx0O2Nsb3N1cmUgMDYyJmd0OzwvZGl2PjxkaXYgY2xhc3M9ImdtYWls
X2V4dHJhIiBkaXI9ImF1dG8iPiZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5i
c3A7NSZuYnNwOyAmbmJzcDsyJSZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDstIGxl
dDwvZGl2PjxkaXYgY2xhc3M9ImdtYWlsX2V4dHJhIiBkaXI9ImF1dG8iPiZuYnNwOyAmbmJzcDsg
Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7NSZuYnNwOyAmbmJzcDsyJSZuYnNwOyAmbmJzcDsg
Jm5ic3A7ICZuYnNwOyAmbmJzcDsgLSBsZXQqPC9kaXY+PGRpdiBjbGFzcz0iZ21haWxfZXh0cmEi
IGRpcj0iYXV0byI+Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDs1Jm5i
c3A7ICZuYnNwOzIlJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDstIHBy
b2duPC9kaXY+PGRpdiBjbGFzcz0iZ21haWxfZXh0cmEiIGRpcj0iYXV0byI+Jm5ic3A7ICZuYnNw
OyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDszJm5ic3A7ICZuYnNwOzElJm5ic3A7ICZuYnNw
OyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgLSBsZXQqPC9kaXY+PGRpdiBjbGFzcz0iZ21h
aWxfZXh0cmEiIGRpcj0iYXV0byI+Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAm
bmJzcDszJm5ic3A7ICZuYnNwOzElJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAm
bmJzcDsgJm5ic3A7LSBlZ2xvdC0td29ya3NwYWNlLWNvbmZpZ3VyYXRpb24tcGxpc3Q8L2Rpdj48
ZGl2IGNsYXNzPSJnbWFpbF9leHRyYSIgZGlyPSJhdXRvIj4mbmJzcDsgJm5ic3A7ICZuYnNwOyAm
bmJzcDsgJm5ic3A7ICZuYnNwOzMmbmJzcDsgJm5ic3A7MSUmbmJzcDsgJm5ic3A7ICZuYnNwOyAm
bmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgLSBsZXQ8L2Rpdj48ZGl2IGNsYXNzPSJnbWFpbF9l
eHRyYSIgZGlyPSJhdXRvIj4mbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNw
OzMmbmJzcDsgJm5ic3A7MSUmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNw
OyAmbmJzcDsgJm5ic3A7LSBsZXQ8L2Rpdj48ZGl2IGNsYXNzPSJnbWFpbF9leHRyYSIgZGlyPSJh
dXRvIj4mbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOzMmbmJzcDsgJm5i
c3A7MSUmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5i
c3A7IC0gc2F2ZS1jdXJyZW50LWJ1ZmZlcjwvZGl2PjxkaXYgY2xhc3M9ImdtYWlsX2V4dHJhIiBk
aXI9ImF1dG8iPiZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7MyZuYnNw
OyAmbmJzcDsxJSZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNw
OyAmbmJzcDsgJm5ic3A7LSB1bndpbmQtcHJvdGVjdDwvZGl2PjxkaXYgY2xhc3M9ImdtYWlsX2V4
dHJhIiBkaXI9ImF1dG8iPiZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7
MyZuYnNwOyAmbmJzcDsxJSZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7
ICZuYnNwOyAmbmJzcDsgJm5ic3A7IC0gcHJvZ248L2Rpdj48ZGl2IGNsYXNzPSJnbWFpbF9leHRy
YSIgZGlyPSJhdXRvIj4mbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOzMm
bmJzcDsgJm5ic3A7MSUmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAm
bmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDstIGhhY2stZGlyLWxvY2FsLXZhcmlhYmxlcy1ub24t
ZmlsZS1idWZmZXI8L2Rpdj48ZGl2IGNsYXNzPSJnbWFpbF9leHRyYSIgZGlyPSJhdXRvIj4mbmJz
cDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOzMmbmJzcDsgJm5ic3A7MSUmbmJz
cDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNw
OyAmbmJzcDsgLSBoYWNrLWRpci1sb2NhbC12YXJpYWJsZXM8L2Rpdj48ZGl2IGNsYXNzPSJnbWFp
bF9leHRyYSIgZGlyPSJhdXRvIj4mbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZu
YnNwOzMmbmJzcDsgJm5ic3A7MSUmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZu
YnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7LSBoYWNrLWRpci1sb2NhbC0t
Z2V0LXZhcmlhYmxlczwvZGl2PjxkaXYgY2xhc3M9ImdtYWlsX2V4dHJhIiBkaXI9ImF1dG8iPiZu
YnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7MyZuYnNwOyAmbmJzcDsxJSZu
YnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5i
c3A7ICZuYnNwOyAmbmJzcDsgLSBkaXItbG9jYWxzLWZpbmQtZmlsZTwvZGl2PjxkaXYgY2xhc3M9
ImdtYWlsX2V4dHJhIiBkaXI9ImF1dG8iPiZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJz
cDsgJm5ic3A7MyZuYnNwOyAmbmJzcDsxJSZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJz
cDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7LSBsb2Nh
dGUtZG9taW5hdGluZy1maWxlPC9kaXY+PGRpdiBjbGFzcz0iZ21haWxfZXh0cmEiIGRpcj0iYXV0
byI+Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDszJm5ic3A7ICZuYnNw
OzElJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNw
OyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7IGRpci1sb2NhbHMtLWFsbC1maWxl
czwvZGl2PjxkaXYgY2xhc3M9ImdtYWlsX2V4dHJhIiBkaXI9ImF1dG8iPiZuYnNwOyAmbmJzcDsg
Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7MiZuYnNwOyAmbmJzcDswJSZuYnNwOyAmbmJzcDsg
Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7IC0gY29uczwvZGl2PjxkaXYgY2xhc3M9ImdtYWls
X2V4dHJhIiBkaXI9ImF1dG8iPiZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5i
c3A7MiZuYnNwOyAmbmJzcDswJSZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5i
c3A7ICZuYnNwOy0gZWdsb3QtLWdsb2ItY29tcGlsZTwvZGl2PjxkaXYgY2xhc3M9ImdtYWlsX2V4
dHJhIiBkaXI9ImF1dG8iPiZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7
MiZuYnNwOyAmbmJzcDswJSZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7
ICZuYnNwOyAtIGxldCo8L2Rpdj48ZGl2IGNsYXNzPSJnbWFpbF9leHRyYSIgZGlyPSJhdXRvIj4m
bmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOzImbmJzcDsgJm5ic3A7MCUm
bmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7LSBl
Z2xvdC0tZ2xvYi1wYXJzZTwvZGl2PjxkaXYgY2xhc3M9ImdtYWlsX2V4dHJhIiBkaXI9ImF1dG8i
PiZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7MiZuYnNwOyAmbmJzcDsw
JSZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsg
LSBsZXQ8L2Rpdj48ZGl2IGNsYXNzPSJnbWFpbF9leHRyYSIgZGlyPSJhdXRvIj4mbmJzcDsgJm5i
c3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOzImbmJzcDsgJm5ic3A7MCUmbmJzcDsgJm5i
c3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJz
cDtzYXZlLWN1cnJlbnQtYnVmZmVyPC9kaXY+PGRpdiBjbGFzcz0iZ21haWxfZXh0cmEiIGRpcj0i
YXV0byI+Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsxJm5ic3A7ICZu
YnNwOzAlJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7LSBsZXQ8L2Rpdj48ZGl2IGNsYXNzPSJn
bWFpbF9leHRyYSIgZGlyPSJhdXRvIj4mbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7
ICZuYnNwOzEmbmJzcDsgJm5ic3A7MCUmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgLSB1bndp
bmQtcHJvdGVjdDwvZGl2PjxkaXYgY2xhc3M9ImdtYWlsX2V4dHJhIiBkaXI9ImF1dG8iPiZuYnNw
OyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7MSZuYnNwOyAmbmJzcDswJSZuYnNw
OyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDstIHByb2duPC9kaXY+PGRpdiBjbGFzcz0iZ21h
aWxfZXh0cmEiIGRpcj0iYXV0byI+Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAm
bmJzcDsxJm5ic3A7ICZuYnNwOzAlJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAt
IG1hcGM8L2Rpdj48ZGl2IGNsYXNzPSJnbWFpbF9leHRyYSIgZGlyPSJhdXRvIj4mbmJzcDsgJm5i
c3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOzEmbmJzcDsgJm5ic3A7MCUmbmJzcDsgJm5i
c3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOy0gIyZsdDtjbG9zdXJlIEVFMCZndDs8L2Rp
dj48ZGl2IGNsYXNzPSJnbWFpbF9leHRyYSIgZGlyPSJhdXRvIj4mbmJzcDsgJm5ic3A7ICZuYnNw
OyAmbmJzcDsgJm5ic3A7ICZuYnNwOzEmbmJzcDsgJm5ic3A7MCUmbmJzcDsgJm5ic3A7ICZuYnNw
OyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAtIGxldCo8L2Rpdj48ZGl2IGNsYXNzPSJnbWFpbF9leHRy
YSIgZGlyPSJhdXRvIj4mbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOzEm
bmJzcDsgJm5ic3A7MCUmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAm
bmJzcDstIGFuZDwvZGl2PjxkaXYgY2xhc3M9ImdtYWlsX2V4dHJhIiBkaXI9ImF1dG8iPiZuYnNw
OyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7MSZuYnNwOyAmbmJzcDswJSZuYnNw
OyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAtIGFuZDwvZGl2Pjxk
aXYgY2xhc3M9ImdtYWlsX2V4dHJhIiBkaXI9ImF1dG8iPiZuYnNwOyAmbmJzcDsgJm5ic3A7ICZu
YnNwOyAmbmJzcDsgJm5ic3A7MSZuYnNwOyAmbmJzcDswJSZuYnNwOyAmbmJzcDsgJm5ic3A7ICZu
YnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDstIG9yPC9kaXY+PGRpdiBjbGFzcz0iZ21h
aWxfZXh0cmEiIGRpcj0iYXV0byI+Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAm
bmJzcDsxJm5ic3A7ICZuYnNwOzAlJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAm
bmJzcDsgJm5ic3A7ICZuYnNwOyAtIHB1dGhhc2g8L2Rpdj48ZGl2IGNsYXNzPSJnbWFpbF9leHRy
YSIgZGlyPSJhdXRvIj4mbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOzEm
bmJzcDsgJm5ic3A7MCUmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAm
bmJzcDsgJm5ic3A7ICZuYnNwOy0gbGlzdDwvZGl2PjxkaXYgY2xhc3M9ImdtYWlsX2V4dHJhIiBk
aXI9ImF1dG8iPiZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7MSZuYnNw
OyAmbmJzcDswJSZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNw
OyAmbmJzcDsgJm5ic3A7ICZuYnNwOyBmaWxlLW5vdGlmeS1hZGQtd2F0Y2g8L2Rpdj48ZGl2IGNs
YXNzPSJnbWFpbF9leHRyYSIgZGlyPSJhdXRvIj4mbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsg
Jm5ic3A7ICZuYnNwOzEmbmJzcDsgJm5ic3A7MCUmbmJzcDsgLSBlZ2xvdC1zaWduYWwtZGlkQ2hh
bmdlQ29uZmlndXJhdGlvbjwvZGl2PjxkaXYgY2xhc3M9ImdtYWlsX2V4dHJhIiBkaXI9ImF1dG8i
PiZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7MSZuYnNwOyAmbmJzcDsw
JSZuYnNwOyAmbmJzcDstIGpzb25ycGMtbm90aWZ5PC9kaXY+PGRpdiBjbGFzcz0iZ21haWxfZXh0
cmEiIGRpcj0iYXV0byI+Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsx
Jm5ic3A7ICZuYnNwOzAlJm5ic3A7ICZuYnNwOyAtIGxpc3Q8L2Rpdj48ZGl2IGNsYXNzPSJnbWFp
bF9leHRyYSIgZGlyPSJhdXRvIj4mbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZu
YnNwOzEmbmJzcDsgJm5ic3A7MCUmbmJzcDsgJm5ic3A7ICZuYnNwOy0gb3I8L2Rpdj48ZGl2IGNs
YXNzPSJnbWFpbF9leHRyYSIgZGlyPSJhdXRvIj4mbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsg
Jm5ic3A7ICZuYnNwOzEmbmJzcDsgJm5ic3A7MCUmbmJzcDsgJm5ic3A7ICZuYnNwOyAtIGVnbG90
LS13b3Jrc3BhY2UtY29uZmlndXJhdGlvbi1wbGlzdDwvZGl2PjxkaXYgY2xhc3M9ImdtYWlsX2V4
dHJhIiBkaXI9ImF1dG8iPiZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7
MSZuYnNwOyAmbmJzcDswJSZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOy0gbGV0PC9kaXY+PGRp
diBjbGFzcz0iZ21haWxfZXh0cmEiIGRpcj0iYXV0byI+Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5i
c3A7ICZuYnNwOyAmbmJzcDsxJm5ic3A7ICZuYnNwOzAlJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5i
c3A7IC0gbGV0PC9kaXY+PGRpdiBjbGFzcz0iZ21haWxfZXh0cmEiIGRpcj0iYXV0byI+Jm5ic3A7
ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsxJm5ic3A7ICZuYnNwOzAlJm5ic3A7
ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOy0gc2F2ZS1jdXJyZW50LWJ1ZmZlcjwvZGl2Pjxk
aXYgY2xhc3M9ImdtYWlsX2V4dHJhIiBkaXI9ImF1dG8iPiZuYnNwOyAmbmJzcDsgJm5ic3A7ICZu
YnNwOyAmbmJzcDsgJm5ic3A7MSZuYnNwOyAmbmJzcDswJSZuYnNwOyAmbmJzcDsgJm5ic3A7ICZu
YnNwOyAmbmJzcDsgLSB1bndpbmQtcHJvdGVjdDwvZGl2PjxkaXYgY2xhc3M9ImdtYWlsX2V4dHJh
IiBkaXI9ImF1dG8iPiZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7MSZu
YnNwOyAmbmJzcDswJSZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7LSBw
cm9nbjwvZGl2PjxkaXYgY2xhc3M9ImdtYWlsX2V4dHJhIiBkaXI9ImF1dG8iPiZuYnNwOyAmbmJz
cDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7MSZuYnNwOyAmbmJzcDswJSZuYnNwOyAmbmJz
cDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7IC0gaGFjay1kaXItbG9jYWwtdmFyaWFibGVz
LW5vbi1maWxlLWJ1ZmZlcjwvZGl2PjxkaXYgY2xhc3M9ImdtYWlsX2V4dHJhIiBkaXI9ImF1dG8i
PiZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7MSZuYnNwOyAmbmJzcDsw
JSZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOy0gaGFjay1k
aXItbG9jYWwtdmFyaWFibGVzPC9kaXY+PGRpdiBjbGFzcz0iZ21haWxfZXh0cmEiIGRpcj0iYXV0
byI+Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsxJm5ic3A7ICZuYnNw
OzAlJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7IC0gaGFj
ay1kaXItbG9jYWwtLWdldC12YXJpYWJsZXM8L2Rpdj48ZGl2IGNsYXNzPSJnbWFpbF9leHRyYSIg
ZGlyPSJhdXRvIj4mbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOzEmbmJz
cDsgJm5ic3A7MCUmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJz
cDsgJm5ic3A7LSBkaXItbG9jYWxzLWZpbmQtZmlsZTwvZGl2PjxkaXYgY2xhc3M9ImdtYWlsX2V4
dHJhIiBkaXI9ImF1dG8iPiZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7
MSZuYnNwOyAmbmJzcDswJSZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7
ICZuYnNwOyAmbmJzcDsgLSBsb2NhdGUtZG9taW5hdGluZy1maWxlPC9kaXY+PGRpdiBjbGFzcz0i
Z21haWxfZXh0cmEiIGRpcj0iYXV0byI+Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNw
OyAmbmJzcDsxJm5ic3A7ICZuYnNwOzAlJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNw
OyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ZGlyLWxvY2Fscy0tYWxsLWZpbGVz
PC9kaXY+PGRpdiBjbGFzcz0iZ21haWxfZXh0cmEiIGRpcj0iYXV0byI+Jm5ic3A7ICZuYnNwOyAm
bmJzcDsgJm5ic3A7ICZuYnNwOyAxMiZuYnNwOyAmbmJzcDs1JSAtIHRpbWVyLWV2ZW50LWhhbmRs
ZXI8L2Rpdj48ZGl2IGNsYXNzPSJnbWFpbF9leHRyYSIgZGlyPSJhdXRvIj4mbmJzcDsgJm5ic3A7
ICZuYnNwOyAmbmJzcDsgJm5ic3A7IDEyJm5ic3A7ICZuYnNwOzUlJm5ic3A7IC0gYXBwbHk8L2Rp
dj48ZGl2IGNsYXNzPSJnbWFpbF9leHRyYSIgZGlyPSJhdXRvIj4mbmJzcDsgJm5ic3A7ICZuYnNw
OyAmbmJzcDsgJm5ic3A7ICZuYnNwOzcmbmJzcDsgJm5ic3A7MyUmbmJzcDsgJm5ic3A7LSAjJmx0
O2NvbXBpbGVkLWZ1bmN0aW9uIEI0RSZndDs8L2Rpdj48ZGl2IGNsYXNzPSJnbWFpbF9leHRyYSIg
ZGlyPSJhdXRvIj4mbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOzcmbmJz
cDsgJm5ic3A7MyUmbmJzcDsgJm5ic3A7IC0gZXhlY3V0ZS1leHRlbmRlZC1jb21tYW5kLS1zaG9y
dGVyPC9kaXY+PGRpdiBjbGFzcz0iZ21haWxfZXh0cmEiIGRpcj0iYXV0byI+Jm5ic3A7ICZuYnNw
OyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDs2Jm5ic3A7ICZuYnNwOzIlJm5ic3A7ICZuYnNw
OyAmbmJzcDstICMmbHQ7Y29tcGlsZWQtZnVuY3Rpb24gNUVEJmd0OzwvZGl2PjxkaXYgY2xhc3M9
ImdtYWlsX2V4dHJhIiBkaXI9ImF1dG8iPiZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJz
cDsgJm5ic3A7NCZuYnNwOyAmbmJzcDsxJSZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyBjb21t
YW5kcDwvZGl2PjxkaXYgY2xhc3M9ImdtYWlsX2V4dHJhIiBkaXI9ImF1dG8iPiZuYnNwOyAmbmJz
cDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7NSZuYnNwOyAmbmJzcDsyJSZuYnNwOyAmbmJz
cDstICMmbHQ7Y29tcGlsZWQtZnVuY3Rpb24gMDQyJmd0OzwvZGl2PjxkaXYgY2xhc3M9ImdtYWls
X2V4dHJhIiBkaXI9ImF1dG8iPiZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5i
c3A7NCZuYnNwOyAmbmJzcDsxJSZuYnNwOyAmbmJzcDsgLSBqc29ucnBjLWNvbm5lY3Rpb24tcmVj
ZWl2ZTwvZGl2PjxkaXYgY2xhc3M9ImdtYWlsX2V4dHJhIiBkaXI9ImF1dG8iPiZuYnNwOyAmbmJz
cDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7MyZuYnNwOyAmbmJzcDsxJSZuYnNwOyAmbmJz
cDsgJm5ic3A7LSBhcHBseTwvZGl2PjxkaXYgY2xhc3M9ImdtYWlsX2V4dHJhIiBkaXI9ImF1dG8i
PiZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7MiZuYnNwOyAmbmJzcDsw
JSZuYnNwOyAmbmJzcDsgJm5ic3A7IC0ganNvbnJwYy0tZXZlbnQ8L2Rpdj48ZGl2IGNsYXNzPSJn
bWFpbF9leHRyYSIgZGlyPSJhdXRvIj4mbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7
ICZuYnNwOzImbmJzcDsgJm5ic3A7MCUmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDstICMmbHQ7
Y29tcGlsZWQtZnVuY3Rpb24gN0NDJmd0OzwvZGl2PjxkaXYgY2xhc3M9ImdtYWlsX2V4dHJhIiBk
aXI9ImF1dG8iPiZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7MiZuYnNw
OyAmbmJzcDswJSZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAtIGFwcGx5PC9kaXY+PGRpdiBj
bGFzcz0iZ21haWxfZXh0cmEiIGRpcj0iYXV0byI+Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7
ICZuYnNwOyAmbmJzcDsyJm5ic3A7ICZuYnNwOzAlJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7
ICZuYnNwOyAmbmJzcDtqc29ucnBjLS1sb2ctZXZlbnQ8L2Rpdj48ZGl2IGNsYXNzPSJnbWFpbF9l
eHRyYSIgZGlyPSJhdXRvIj4mbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNw
OzEmbmJzcDsgJm5ic3A7MCUmbmJzcDsgJm5ic3A7ICZuYnNwOyAtIGpzb25ycGMtLXJlcGx5PC9k
aXY+PGRpdiBjbGFzcz0iZ21haWxfZXh0cmEiIGRpcj0iYXV0byI+Jm5ic3A7ICZuYnNwOyAmbmJz
cDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsxJm5ic3A7ICZuYnNwOzAlJm5ic3A7ICZuYnNwOyAmbmJz
cDsgJm5ic3A7LSBqc29ucnBjLWNvbm5lY3Rpb24tc2VuZDwvZGl2PjxkaXYgY2xhc3M9ImdtYWls
X2V4dHJhIiBkaXI9ImF1dG8iPiZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5i
c3A7MSZuYnNwOyAmbmJzcDswJSZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAtIGFwcGx5PC9k
aXY+PGRpdiBjbGFzcz0iZ21haWxfZXh0cmEiIGRpcj0iYXV0byI+Jm5ic3A7ICZuYnNwOyAmbmJz
cDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsxJm5ic3A7ICZuYnNwOzAlJm5ic3A7ICZuYnNwOyAmbmJz
cDsgJm5ic3A7ICZuYnNwOy0gIyZsdDtjb21waWxlZC1mdW5jdGlvbiBFRDYmZ3Q7PC9kaXY+PGRp
diBjbGFzcz0iZ21haWxfZXh0cmEiIGRpcj0iYXV0byI+Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5i
c3A7ICZuYnNwOyAmbmJzcDsxJm5ic3A7ICZuYnNwOzAlJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5i
c3A7ICZuYnNwOyAtIGpzb25ycGMtLWV2ZW50PC9kaXY+PGRpdiBjbGFzcz0iZ21haWxfZXh0cmEi
IGRpcj0iYXV0byI+Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsxJm5i
c3A7ICZuYnNwOzAlJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDstICMm
bHQ7Y29tcGlsZWQtZnVuY3Rpb24gMDIyJmd0OzwvZGl2PjxkaXYgY2xhc3M9ImdtYWlsX2V4dHJh
IiBkaXI9ImF1dG8iPiZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7MSZu
YnNwOyAmbmJzcDswJSZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7IC0g
YXBwbHk8L2Rpdj48ZGl2IGNsYXNzPSJnbWFpbF9leHRyYSIgZGlyPSJhdXRvIj4mbmJzcDsgJm5i
c3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOzEmbmJzcDsgJm5ic3A7MCUmbmJzcDsgJm5i
c3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7anNvbnJwYy0tbG9n
LWV2ZW50PC9kaXY+PGRpdiBjbGFzcz0iZ21haWxfZXh0cmEiIGRpcj0iYXV0byI+Jm5ic3A7ICZu
YnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsxJm5ic3A7ICZuYnNwOzAlJm5ic3A7ICZu
YnNwOyAmbmJzcDstIGpzb25ycGMtLWNvbnRpbnVlPC9kaXY+PGRpdiBjbGFzcz0iZ21haWxfZXh0
cmEiIGRpcj0iYXV0byI+Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsx
Jm5ic3A7ICZuYnNwOzAlJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICMmbHQ7Y2xvc3VyZSA4
QzYmZ3Q7PC9kaXY+PGRpdiBjbGFzcz0iZ21haWxfZXh0cmEiIGRpcj0iYXV0byI+Jm5ic3A7ICZu
YnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsyJm5ic3A7ICZuYnNwOzAlIC0ganNvbnJw
Yy0tcHJvY2Vzcy1maWx0ZXI8L2Rpdj48ZGl2IGNsYXNzPSJnbWFpbF9leHRyYSIgZGlyPSJhdXRv
Ij4mbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOzEmbmJzcDsgJm5ic3A7
MCUmbmJzcDsgJm5ic3A7IGJ1ZmZlci1zdHJpbmc8L2Rpdj48ZGl2IGNsYXNzPSJnbWFpbF9leHRy
YSIgZGlyPSJhdXRvIj4mbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOzEm
bmJzcDsgJm5ic3A7MCUmbmJzcDsgLSAjJmx0O2NvbXBpbGVkLWZ1bmN0aW9uIDMyRCZndDs8L2Rp
dj48ZGl2IGNsYXNzPSJnbWFpbF9leHRyYSIgZGlyPSJhdXRvIj4mbmJzcDsgJm5ic3A7ICZuYnNw
OyAmbmJzcDsgJm5ic3A7ICZuYnNwOzEmbmJzcDsgJm5ic3A7MCUmbmJzcDsgJm5ic3A7LSB0aW1l
ci1hY3RpdmF0ZTwvZGl2PjxkaXYgY2xhc3M9ImdtYWlsX2V4dHJhIiBkaXI9ImF1dG8iPiZuYnNw
OyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7MSZuYnNwOyAmbmJzcDswJSZuYnNw
OyAmbmJzcDsgLSB0aW1lci0tYWN0aXZhdGU8L2Rpdj48ZGl2IGNsYXNzPSJnbWFpbF9leHRyYSIg
ZGlyPSJhdXRvIj4mbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOzEmbmJz
cDsgJm5ic3A7MCUmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDt0aW1lci0tdGltZS1sZXNzLXA8
L2Rpdj48ZGl2IGRpcj0iYXV0byI+PGJyPjwvZGl2PjwvZGl2PjwvZGl2PjwvZGl2Pg==





Information forwarded to bug-gnu-emacs@HIDDEN:
bug#70036; Package emacs. Full text available.

Message received at 70036 <at> debbugs.gnu.org:


Received: (at 70036) by debbugs.gnu.org; 18 Apr 2024 21:27:03 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Thu Apr 18 17:27:03 2024
Received: from localhost ([127.0.0.1]:54780 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1rxZHa-0005OO-JN
	for submit <at> debbugs.gnu.org; Thu, 18 Apr 2024 17:27:03 -0400
Received: from mail-lf1-x12e.google.com ([2a00:1450:4864:20::12e]:50585)
 by debbugs.gnu.org with esmtp (Exim 4.84_2)
 (envelope-from <joaotavora@HIDDEN>) id 1rxZHY-0005N1-2U
 for 70036 <at> debbugs.gnu.org; Thu, 18 Apr 2024 17:27:00 -0400
Received: by mail-lf1-x12e.google.com with SMTP id
 2adb3069b0e04-518a56cdc03so1545916e87.1
 for <70036 <at> debbugs.gnu.org>; Thu, 18 Apr 2024 14:26:46 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=gmail.com; s=20230601; t=1713475600; x=1714080400; darn=debbugs.gnu.org;
 h=content-transfer-encoding:cc:to:subject:message-id:date:from
 :in-reply-to:references:mime-version:from:to:cc:subject:date
 :message-id:reply-to;
 bh=KUUf6zljsVLjPyxMtxrjUJcUqxZzXo7/WHZ0lHdXD6s=;
 b=SHrHWq7MTzLEkgXOD2GLgvYh7Veb1A6MazPB+BRqKAAyuJcQG7FnQZYpUy/whC/l4O
 w3eI8+p3os1V8ulTu2ol/PHVQuRb05TNXwTYuEMm6JDRnTZgavlhYdeV2mrigg8GyMzu
 cACrsKmV79I3B8e2or61YMLZTiO4tOVdd5SMvXGNRAmJ3KW80voHQvHJqGHbeYNNhzen
 qUPko6/eEMLnGQ0mazyxX6EIvoasuEkiTI6VdecvnJe3lNB5IG8hYqek2WSSNsMa4pCM
 elSacnhi2vJehcwUhpHbnAukmU5FCUjG7bR+aeJZr7yjXDgIOLaomsDhvNuuL59QMuuX
 59Ng==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=1e100.net; s=20230601; t=1713475600; x=1714080400;
 h=content-transfer-encoding:cc:to:subject:message-id:date:from
 :in-reply-to:references:mime-version:x-gm-message-state:from:to:cc
 :subject:date:message-id:reply-to;
 bh=KUUf6zljsVLjPyxMtxrjUJcUqxZzXo7/WHZ0lHdXD6s=;
 b=sPb98egmZAtPiIsies3L8hms4wbSqLSaxKgIIaqIQ4XT67O/UHPZgfOqutFoLnhSE9
 lTvgq2dR7pya7LHcZrgmpI05SWOIJh1qT0AMJyCPNPxXeoXqbiCvZE5kyq8f6nU91/hv
 oCh0jpmmcJPFY5lvko0b8q+TlJM/0tOOqQlXc9h1NtSwWKIZuiQrk8i4oRn6Jr705sA0
 slbo90kUFplwaTDh6OqlzJ3zdYj8RLBzPuFvyk8G0ZaMLqSz5UwdZAtHdbrfV7SSo8lN
 lFtlyDIa5P0alk177vKyMyKeQFZQDC8MWkOwZHb3qCwNs0b9V8n6mWob7z0bCo+vU37F
 qOcQ==
X-Forwarded-Encrypted: i=1;
 AJvYcCVuEYgoa91pGSfgKoFHkCmejksLcetb5gyK7rFP1Bn4xXrv54h1VnGY6ayuNTqP9Dfes5ylWfZxbiuEVDhWE9jnr19V8TA=
X-Gm-Message-State: AOJu0YxL6o7dBiOPsKcNmkj33f9BTReMIAbnEWPdqljNdxIdoOXv2BxO
 +E6vEQ2OE7ivIKobNM2A3Vk+Yc7iWrP3PDJZjCnpFYz6QM0oQNQlqfZE/gY0J0FqigD37HlPtEn
 ArwhTt+PwTZsATZpMWtZjk+c5CTM=
X-Google-Smtp-Source: AGHT+IGt37A5se0HasuVpjksO5/lqOhmUWw5ncpfMQIlJHwIHX8J1TirKalIC0f3ndHZxB5oATUKzrbijGW1x+k+ZBQ=
X-Received: by 2002:a05:6512:31c8:b0:513:5fb0:c5ad with SMTP id
 j8-20020a05651231c800b005135fb0c5admr169674lfe.17.1713475600030; Thu, 18 Apr
 2024 14:26:40 -0700 (PDT)
MIME-Version: 1.0
References: <86y19ad61t.fsf@HIDDEN>
 <43de4151-ab68-4214-8691-33f3554feba1@HIDDEN>
 <CALDnm53J14dj1he+d8VF=ZB--XymExDkKL45XXAdVTb5VcDryw@HIDDEN>
 <86r0f2d46x.fsf@HIDDEN>
 <CALDnm50xhhcsFYqvFFUAQqRhPmqHtzo3dB5uyqQAygkW-y4EHg@HIDDEN>
 <86jzkud0be.fsf@HIDDEN>
 <CALDnm517N=DM+0tqBpHCGiHenPMirq2eFJF+Gk0ePO+W6WO-Ug@HIDDEN>
 <874jbycrd7.fsf@dick>
In-Reply-To: <874jbycrd7.fsf@dick>
From: =?UTF-8?B?Sm/Do28gVMOhdm9yYQ==?= <joaotavora@HIDDEN>
Date: Thu, 18 Apr 2024 22:26:28 +0100
Message-ID: <CALDnm51HWzo2+8ujwRqg_D78Qf42_5S24EjGDenjG+Duu7n6pg@HIDDEN>
Subject: Re: bug#70036: a fix that
To: dick <dick.r.chiang@HIDDEN>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable
X-Spam-Score: 0.0 (/)
X-Debbugs-Envelope-To: 70036
Cc: theo@HIDDEN, Eli Zaretskii <eliz@HIDDEN>, 70036 <at> debbugs.gnu.org,
 felician.nemeth@HIDDEN
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -1.0 (-)

On Thu, Apr 18, 2024 at 10:07=E2=80=AFPM dick <dick.r.chiang@HIDDEN> wro=
te:

> Speaking of dicks, you are one, and your code is always dogshit, so your
> much heralded leavetaking of the emacs project can't come soon enough.

My dear dick, you on the other hand, are such a lovely wonderful human bein=
g
who writes such great code and is so courageous..  Thank you for
gracing me with
your attention.  Means a lot to me.  Love xoxo




Information forwarded to bug-gnu-emacs@HIDDEN:
bug#70036; Package emacs. Full text available.

Message received at 70036 <at> debbugs.gnu.org:


Received: (at 70036) by debbugs.gnu.org; 18 Apr 2024 20:22:03 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Thu Apr 18 16:22:02 2024
Received: from localhost ([127.0.0.1]:54429 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1rxYGe-00066r-7g
	for submit <at> debbugs.gnu.org; Thu, 18 Apr 2024 16:22:02 -0400
Received: from mail-lf1-x12b.google.com ([2a00:1450:4864:20::12b]:46507)
 by debbugs.gnu.org with esmtp (Exim 4.84_2)
 (envelope-from <joaotavora@HIDDEN>) id 1rxYGb-00065c-HP
 for 70036 <at> debbugs.gnu.org; Thu, 18 Apr 2024 16:21:58 -0400
Received: by mail-lf1-x12b.google.com with SMTP id
 2adb3069b0e04-516db2214e6so1719774e87.1
 for <70036 <at> debbugs.gnu.org>; Thu, 18 Apr 2024 13:21:43 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=gmail.com; s=20230601; t=1713471698; x=1714076498; darn=debbugs.gnu.org;
 h=content-transfer-encoding:cc:to:subject:message-id:date:from
 :in-reply-to:references:mime-version:from:to:cc:subject:date
 :message-id:reply-to;
 bh=bSb1r13+rIbUFqbDfC7peYuBWJPojkWlb1/fSe1UqzQ=;
 b=jgGQszrAv/4Ubbcwy8gmibcXSBFCqJVxw5ipPA5PxAgvPRThmWAZi0WzMPeUUclw9l
 VTDRgRhdz3neaWbj9Kqj3TCjZc0R6GYG1Q4gg9jiOtxIYJAeYc2PaTD3iVPVEo4tuULe
 3HtlrYIZUb7HI5AKqQhNwVxGmWGiNEer1Xnlcl7R/lTtzD7Qj9aUvm8Q2Rj8mwkzNrta
 nDERw2nr2GQ8f9kPzSMEw2VbDk4l7Y745OZecxTEQ1FKYXIak/sszJs95s5NftP5qSmK
 zmDd1yFi815hGx0cje8INPmlEBz/BaOnZO3CI74fYsADoH//U4U6cD4DtcLA/WrtsoxP
 +VYQ==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=1e100.net; s=20230601; t=1713471698; x=1714076498;
 h=content-transfer-encoding:cc:to:subject:message-id:date:from
 :in-reply-to:references:mime-version:x-gm-message-state:from:to:cc
 :subject:date:message-id:reply-to;
 bh=bSb1r13+rIbUFqbDfC7peYuBWJPojkWlb1/fSe1UqzQ=;
 b=dXlQv1CAUAS+A7s3MuYO6qt+mEOhYZ4rwEnRj3rk+5t5Jy6EoMm3EjEc1xbgYUlc6b
 x/JhBAJOPWwF+sa3N/Lex0pZ0eiJjjWHUk2bpecIsT4qRD6IahP/8ebUatd0NsYBTU5x
 DTMNRrNZYQ8db8oCCtIsb+CLAFFJaRXM5eZtE9+2k2h2/KC+AP73PBbcraBxD2/YWd6B
 2MRygThq8yKW4sP/q2EEVEM2Ts2Bu5JXnzwqy5UBHpQzCvftnA+Gyj7dFg7monwJ2b4W
 nfnbfQ75SBtv3z8ShrsZWvSFbf+vj4k3GGYrH1aQe767Q/sDiatxFhRx+emqyU8Ckykm
 ARzw==
X-Forwarded-Encrypted: i=1;
 AJvYcCWKU9EoBiv4o4Ogrn8TSUa1qZdaysf99pd8FBvfXORHXXRyTbeMieZUYAcgbcmfDZAeDhCFwiXd618LDrpxpZhXIqefvXs=
X-Gm-Message-State: AOJu0YxCSMdNnst4oh8gvG9XV8WKZxCs/ZY9WEpxJyMA6cB69rhsUMqh
 YrBwtuzj6pT9YFZHUFnv9emTlU63QLm6t4jNEH75vR0Nd5qAKxOTjHb2X46hino2CMBbTQ08Dgb
 nsamfebpXdSf9UqxBMcQOiLQAJPg=
X-Google-Smtp-Source: AGHT+IHbUgt73TQ3LXj/jADwgRbU1gn7H1jisD7tDlkhgdPCUNXTLH0tCatw2f+86mOnB3k3SjwvJSaaPY1PFwc1yIg=
X-Received: by 2002:ac2:5b8d:0:b0:516:c099:e798 with SMTP id
 o13-20020ac25b8d000000b00516c099e798mr59845lfn.31.1713471697480; Thu, 18 Apr
 2024 13:21:37 -0700 (PDT)
MIME-Version: 1.0
References: <86y19ad61t.fsf@HIDDEN>
 <43de4151-ab68-4214-8691-33f3554feba1@HIDDEN>
 <CALDnm53J14dj1he+d8VF=ZB--XymExDkKL45XXAdVTb5VcDryw@HIDDEN>
 <86r0f2d46x.fsf@HIDDEN>
 <CALDnm50xhhcsFYqvFFUAQqRhPmqHtzo3dB5uyqQAygkW-y4EHg@HIDDEN>
 <86jzkud0be.fsf@HIDDEN>
In-Reply-To: <86jzkud0be.fsf@HIDDEN>
From: =?UTF-8?B?Sm/Do28gVMOhdm9yYQ==?= <joaotavora@HIDDEN>
Date: Thu, 18 Apr 2024 21:21:25 +0100
Message-ID: <CALDnm517N=DM+0tqBpHCGiHenPMirq2eFJF+Gk0ePO+W6WO-Ug@HIDDEN>
Subject: Re: bug#70036 a fix that
To: Eli Zaretskii <eliz@HIDDEN>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable
X-Spam-Score: 0.0 (/)
X-Debbugs-Envelope-To: 70036
Cc: felician.nemeth@HIDDEN, 70036 <at> debbugs.gnu.org, theo@HIDDEN
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -1.0 (-)

On Thu, Apr 18, 2024 at 6:53=E2=80=AFPM Eli Zaretskii <eliz@HIDDEN> wrote:

> I suggest to get an objective opinion of that from an uninvolved
> party.

I suggest you drop your sarcasm not because it hurts me or anything
but just because you're not very good at it.

> > So let's skip the morals.
>
> No, let's not.

Really, you want to go at it again?  Well let me just add a pinch of
salt to your typical condescension lecture, getting some facts straight
about what happened here.

* I had to take a long timeout from Eglot maintenance for personal
reasons managed to get maintainers for Flymake and Jsonrpc, but I am
still Eglot maintainer.

* I notice some discussions going on and I let them proceed with
little input.

* I regain some capacity some months later, notice a user report
on GitHub alerts that there are some very new things in Eglot that
didn't ask for explicit greenlighting as was usual during the last 7
years I'm maintaining Eglot.  Fair enough, life went on without me.

* I post to Emacs-devel about these.  I take care to thank everyone
for their efforts.

* One of the changes is Stefan Monnier's.  It's broken, he fixes it
immediately in the usual good spirits.

* Another one of the changes is Theodor's.  It's a good change and
I highlight it as such, merely request a change to the doc.

* The other change is also Theodor's.  I commend it for its clarity
and implementation, but ultimately notice a serious bug that affects
me and anyone else working a super-common C/C++ servers and symlinks.

* I go and read the full bug report and notice that Theodor has been
"studying Eglots performance" and has come to the conclusion that
there is a hotspot of performance problems.  He posts in that email
what to this time is the only actual hard data we have.  That
data suggests that file-truename is slow, and that Eglot uses it
a lot in eglot--TextDocumentIdentifier.

It doesn't suggest anything other than it, nothing about
textDocument/publishDiagnostics.  There's 0 data about that
and it never showed up in my profile.

* Theodor suggests rewriting file-truneame in C, you decline or raise
doubts.  I don't follow the reasons, but fair enough, the discussion
pivots to changing Eglot.

* I reproduce Theodor's experimental findings.

* I find a patch to address that hotspot that is several times
faster than Theodor's solution (doesn't really matter though).

* I ask Theodor to revert the patch and start afresh. He understands
but declines.

* I weigh the pros and cons, especially the time I have to address this
and other Eglot recent problems (tests are borked, have to see what happene=
d)
Since I am Eglot maintainer and revert it myself, just like I've
reverted my and others own perfectly well-intentioned and laboriously
crafted  commits  many times and it hurts a bit to do it, but not that much=
.

It's a no-brainer to revert something like this to me. There is so far
very little hard evidence of the effect this is having on the general
population, it's a very uncommon report.  This code has been there
for 7 years and while there have been performance bugs, this was never
one of it.  This is why I write "one-off" and "uncommon".  Absolutely
accurate.  Ultimately, I see that very little testing has been done around =
some
rather obvious use cases of removing symlink-smarts from Eglot.  The "my
servers happen not to have this" just isn't an acceptable argument to me.

Sure if Eglot had behaved like this all along from the beginning, displayin=
g
duplicated references in some servers, maybe it would be different, but
that's a different world.  Bottom line, Eglot worked correctly three weeks
ago and now has a new bug introduced by a performance fix based on very
little hard data, and a single very scarse report.  It's a no brainer
to revert.

Still, for the very little data that there is available, I do take care
to put in a much simpler fix that completely fixes the issue - as far as
I or anyone reading the available data can see it.

Your last question to Theodor on this thread before the change was merge
good but the answer was completely misinterpreted.   You ask if the servers
resolve symlinks and Theodor answers this:

  > The LSP specification does not talk about symlinks.  The
  > servers I used let the operating system resolve symlinks for them.

Well, maybe at that point if one would have noticed that there are
hundreds of servers arounds, this could have taken a different turn.

> > I've told you I'm invested in fixing Theo's performance problems,
> > but I must learn more about them obviously.  But I'm not going to
> > keep a regression in just to be nice to people.
>
> If -- and it's stil an "if" -- it was a regression,

Did you not read my experiment with the three-file project and the
clangd server?

https://lists.gnu.org/archive/html/emacs-devel/2024-04/msg00350.html

Is anything unclear?  If you've seen it but don't believe my results
maybe you should try Eglot yourself: seeing is believing, they say.

> it was there for quite some time

So was the supposed relevant performance problem.  Only that time is
measured in years and this is measured in weeks.

> , so nothing serious would have happened if we'd leave
> it there for a few more hours or days.

And nothing serious will happen after I reverted it, will there?

I have no interest in delaying a responsible decision just for the
sake of appeasing feelings that someone else says are there.  If
Theodor is worried about a specific performance problem I have some
time this week and the next one to help fix it, and I'm confident I will.

For the record my repositories at $DAYJOB with very long path names
_and_ very symlinks.  So I'm personally interested in fixing any
performance problems and not opening new ones.

> > I'm sure Theo can understand that.
>
> He obviously felt hurt, so "understand" is not an appropriate word
> here.

I'm confident he will understand this, I can't be sure of course.
But I know he wrote "could absolutely do that [revert]" though he preferred
not to do it.  That at least shows that it's not an absurd proposition.
And _I_ understand that he doesn't want to, of course.

I don't know if Theodor felt hurt,  and even if I suspected something,  I
wouldn't write about it in public simply because  I personally find it
in poor taste to speculate or moralize about others people's feelings
secondhand.

I await Theo's reproducible experiment so that we can work on what's
really important.

Jo=C3=A3o




Information forwarded to bug-gnu-emacs@HIDDEN:
bug#70036; Package emacs. Full text available.

Message received at 70036 <at> debbugs.gnu.org:


Received: (at 70036) by debbugs.gnu.org; 18 Apr 2024 17:54:10 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Thu Apr 18 13:54:09 2024
Received: from localhost ([127.0.0.1]:53729 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1rxVxZ-0008K1-2a
	for submit <at> debbugs.gnu.org; Thu, 18 Apr 2024 13:54:09 -0400
Received: from eggs.gnu.org ([2001:470:142:3::10]:56484)
 by debbugs.gnu.org with esmtp (Exim 4.84_2)
 (envelope-from <eliz@HIDDEN>) id 1rxVxT-0008Hw-6V
 for 70036 <at> debbugs.gnu.org; Thu, 18 Apr 2024 13:54:07 -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 <eliz@HIDDEN>)
 id 1rxVx9-0007xa-PA; Thu, 18 Apr 2024 13:53:43 -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=eh74/ZRCiOVG+XQzBXLJYrlzWNwyTXVWwpf9xnXfK20=; b=Rg4AkjD12aCZM6j9JIRr
 HZQv4eFM/LZEj02PEeiE0NjI2ka+k2sQx3dhd1OKZ3IjJd/f5EUjQ0tIRuVLjv6RlYGMDePxvYzFi
 Y0y32ANd7UxHBvNrJYfxfEtwgxuzwRaeoG57xVQ1eA6srlklDpVsFRkI1D1yYIEdCRoGheCxVOUqb
 y/WXwHndyGx1wWvyqkCmUmZn9I3O4BT5lafmjt0WoKIQkF57VRZ/So7X0CJrsuUDGE08iFucDg2ul
 obSJw+i+iYGSxV2R1OPNLWCuraWB+taTHnZxACLq1bbyQgM4C9nLmdkHGONWd6vUaeBSC0RwwtU1x
 iWdFHT81cQkrCg==;
Date: Thu, 18 Apr 2024 20:53:41 +0300
Message-Id: <86jzkud0be.fsf@HIDDEN>
From: Eli Zaretskii <eliz@HIDDEN>
To: =?utf-8?B?Sm/Do28gVMOhdm9yYQ==?= <joaotavora@HIDDEN>
In-Reply-To: <CALDnm50xhhcsFYqvFFUAQqRhPmqHtzo3dB5uyqQAygkW-y4EHg@HIDDEN>
 (message from =?utf-8?B?Sm/Do28gVMOhdm9yYQ==?= on Thu, 18 Apr 2024 18:22:09
 +0100)
Subject: Re: bug#70036 a fix that
References: <86y19ad61t.fsf@HIDDEN>
 <43de4151-ab68-4214-8691-33f3554feba1@HIDDEN>
 <CALDnm53J14dj1he+d8VF=ZB--XymExDkKL45XXAdVTb5VcDryw@HIDDEN>
 <86r0f2d46x.fsf@HIDDEN>
 <CALDnm50xhhcsFYqvFFUAQqRhPmqHtzo3dB5uyqQAygkW-y4EHg@HIDDEN>
MIME-version: 1.0
Content-type: text/plain; charset=utf-8
Content-Transfer-Encoding: 8bit
X-Spam-Score: -2.3 (--)
X-Debbugs-Envelope-To: 70036
Cc: felician.nemeth@HIDDEN, 70036 <at> debbugs.gnu.org, theo@HIDDEN
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -3.3 (---)

> From: João Távora <joaotavora@HIDDEN>
> Date: Thu, 18 Apr 2024 18:22:09 +0100
> Cc: theo@HIDDEN, felician.nemeth@HIDDEN, 70036 <at> debbugs.gnu.org
> 
> On Thu, Apr 18, 2024 at 5:30 PM Eli Zaretskii <eliz@HIDDEN> wrote:
> 
> > > >  That's unfortunate.
> > >
> > > For you maybe.
> >
> > For me also.
> >
> > And please try to be kinder.  Theo might have made a mistake (or not),
> > but he is still a valued contributor, so please treat him with respect
> > he deserves.
> 
> I'm not being unkind at all.

I suggest to get an objective opinion of that from an uninvolved
party.

> So let's skip the morals.

No, let's not.  Let's try being kind and cooperative and respectful to
the work of others, exactly like you expect us to respect you and
yours.

> I've told you I'm invested in fixing Theo's performance problems,
> but I must learn more about them obviously.  But I'm not going to
> keep a regression in just to be nice to people.

If -- and it's stil an "if" -- it was a regression, it was there for
quite some time, so nothing serious would have happened if we'd leave
it there for a few more hours or days.

> I'm sure Theo can understand that.

He obviously felt hurt, so "understand" is not an appropriate word
here.

> He's done lots of useful contributions and will do more, but this
> one was a mistake.

We shall see.  For now, I reserve my judgment until we see
measurements.




Information forwarded to bug-gnu-emacs@HIDDEN:
bug#70036; Package emacs. Full text available.

Message received at 70036 <at> debbugs.gnu.org:


Received: (at 70036) by debbugs.gnu.org; 18 Apr 2024 17:28:13 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Thu Apr 18 13:28:13 2024
Received: from localhost ([127.0.0.1]:53614 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1rxVYR-00054n-O3
	for submit <at> debbugs.gnu.org; Thu, 18 Apr 2024 13:28:13 -0400
Received: from mail-lj1-x22d.google.com ([2a00:1450:4864:20::22d]:57847)
 by debbugs.gnu.org with esmtp (Exim 4.84_2)
 (envelope-from <joaotavora@HIDDEN>) id 1rxVYQ-00053j-8Z
 for 70036 <at> debbugs.gnu.org; Thu, 18 Apr 2024 13:28:10 -0400
Received: by mail-lj1-x22d.google.com with SMTP id
 38308e7fff4ca-2d8b4778f5fso11151581fa.3
 for <70036 <at> debbugs.gnu.org>; Thu, 18 Apr 2024 10:27:56 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=gmail.com; s=20230601; t=1713461270; x=1714066070; darn=debbugs.gnu.org;
 h=content-transfer-encoding:cc:to:subject:message-id:date:from
 :in-reply-to:references:mime-version:from:to:cc:subject:date
 :message-id:reply-to;
 bh=CCP659ObvLw+FZEw5SXI4JJyr7brnTgJCjjPrdR7Dg0=;
 b=EtOXD7CmUzB9ElrZFsWJVdusBxXRcxU3Ku3shXYTPMj/Z6MUQYWnHeCKyQQYrzZ0qc
 rkqVlJyxOJ1tav4G2LT7gYclxC8QoeD70Dx7Ks97OnigNWpjo4Iy4v1SbMB4qnJyHW3M
 ZwhEqF+fbmWpDCE5NXfrMqt/CmMIet5xMUic3N+RLPXuiw4JE7IziOien5iOGm2943LU
 j9iQFT8TsvFri1O4/SvKglaZIv/iugmSTPY3zQL2n3U4FGiCeedKNpECLNs9j9TwmI7p
 YkMX6J3vqnOSIs9TzlzIbABQbTYD5iZXM+TRJWp9s5/7P0M0eo8d5MPwN/gH2g9LUcZY
 c1Gg==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=1e100.net; s=20230601; t=1713461270; x=1714066070;
 h=content-transfer-encoding:cc:to:subject:message-id:date:from
 :in-reply-to:references:mime-version:x-gm-message-state:from:to:cc
 :subject:date:message-id:reply-to;
 bh=CCP659ObvLw+FZEw5SXI4JJyr7brnTgJCjjPrdR7Dg0=;
 b=ZzsHSwjb4sW3u5gcd6Tue62Os3sDWnp/KJQQK7kj7vRibif4USMVEGGMfhU9O8+wfU
 W53TBzMqhkBScjy5Go3jCwUIcTiYtQAJAjuyT3sHkmQz9ylkBrFTx2waaxaeaYl03wra
 KyreQxXE+sdAfIgvOzmvkhnfZL8Wr4uTazZGSu6pB/e/XfnbRQwtcpgjy9Dnlfq1v6Eh
 ZHI0IWfM9KQlVS/4TpbStLPXzsU6uhsLuRXqJyOUYPtX7YzJObHpdTkqAgLW+lDS1JRd
 lfjgiZeip5+LjHQXoH52sFPQdubc4iv+2R0UCcWKt8KSarE88Vr7WVl+Fr7fNJotZvzV
 0mfQ==
X-Forwarded-Encrypted: i=1;
 AJvYcCUC6l4SafKn6g5/wGhYdAdii3WNBxv87tgCom0O4yFNg+amnfbuF4yKiTu5QheseARDDkNepd9sq+m0XsKMZYUUytua1uc=
X-Gm-Message-State: AOJu0Ywpf15TbXodWFe3mFN/9n8+8AzhHJYB0jyC4lqVS+3V+8aD9WqL
 Vr/B0VX0xKRENKes0wYYaUdCGlp+I2QbMx7DCw4Xsng93W8zm187Yotq3y8H5As1kt9FdjN46Hn
 bIcyX3OFAM//VpYPh84YoBzHOVbgcIdBl
X-Google-Smtp-Source: AGHT+IEH2adtBSe6PzfYu/ZOF5BdrBwB4USAExiW2G16sYDTLg5jETM+C8V7C3B9Oi3Rhe4mfZP6msdsbcBHSOrIfxM=
X-Received: by 2002:a05:651c:2203:b0:2da:562b:7aa6 with SMTP id
 y3-20020a05651c220300b002da562b7aa6mr2615418ljq.43.1713461270342; Thu, 18 Apr
 2024 10:27:50 -0700 (PDT)
MIME-Version: 1.0
References: <CALDnm53enki1g6Gqpg1X3SziGC3dZ78RuXPEZAfU6Ze006Vq2A@HIDDEN>
 <86y19ad61t.fsf@HIDDEN>
 <CALDnm51TSR-_MhUyBTPgmfVGVbzBpQxkaC0weF1YG22fHAYyJQ@HIDDEN>
 <86sezid4gp.fsf@HIDDEN>
In-Reply-To: <86sezid4gp.fsf@HIDDEN>
From: =?UTF-8?B?Sm/Do28gVMOhdm9yYQ==?= <joaotavora@HIDDEN>
Date: Thu, 18 Apr 2024 18:27:39 +0100
Message-ID: <CALDnm501k+BCut84dLQQiPpSUeYKuPuDHdhaOUYtvgrFkKg0DA@HIDDEN>
Subject: Re: bug#70036 a fix that
To: Eli Zaretskii <eliz@HIDDEN>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable
X-Spam-Score: 0.0 (/)
X-Debbugs-Envelope-To: 70036
Cc: felician.nemeth@HIDDEN, 70036 <at> debbugs.gnu.org, theo@HIDDEN
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -1.0 (-)

On Thu, Apr 18, 2024 at 5:24=E2=80=AFPM Eli Zaretskii <eliz@HIDDEN> wrote:

> If you timed this code with the likes of benchmark-run, please show
> the timings.  Profiles are not the best instrument for this kind of
> decisions.

I disagree completely, but whatever.  It's microbenchmarks that are
useless, because they don't have any context.  But if you want
some of these, here you go.  I benchmarked eglot--TextDocumentIdentifier
because that's the only reasonable thing I could gather from the
profile.

;; before Theodor's patch
(benchmark-run 10000 (eglot--TextDocumentIdentifier)) ;; (1.716975213
21 0.8623904230000008)
;; after Theodor's patch
(benchmark-run 10000 (eglot--TextDocumentIdentifier)) ;; (0.651663934
11 0.46295383499999687)
;; after I reverted Theodor's patch and added my patch
(benchmark-run 10000 (eglot--TextDocumentIdentifier)) ;; (0.000280462
0 0.0) yes, this is just reading a cached variable.

Jo=C3=A3o




Information forwarded to bug-gnu-emacs@HIDDEN:
bug#70036; Package emacs. Full text available.

Message received at 70036 <at> debbugs.gnu.org:


Received: (at 70036) by debbugs.gnu.org; 18 Apr 2024 17:27:21 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Thu Apr 18 13:27:21 2024
Received: from localhost ([127.0.0.1]:53607 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1rxVXb-0004y1-O7
	for submit <at> debbugs.gnu.org; Thu, 18 Apr 2024 13:27:21 -0400
Received: from mail-lj1-x230.google.com ([2a00:1450:4864:20::230]:54410)
 by debbugs.gnu.org with esmtp (Exim 4.84_2)
 (envelope-from <joaotavora@HIDDEN>) id 1rxVXX-0004wl-6Y
 for 70036 <at> debbugs.gnu.org; Thu, 18 Apr 2024 13:27:17 -0400
Received: by mail-lj1-x230.google.com with SMTP id
 38308e7fff4ca-2d895138ce6so16998221fa.0
 for <70036 <at> debbugs.gnu.org>; Thu, 18 Apr 2024 10:27:01 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=gmail.com; s=20230601; t=1713461216; x=1714066016; darn=debbugs.gnu.org;
 h=content-transfer-encoding:cc:to:subject:message-id:date:from
 :in-reply-to:references:mime-version:from:to:cc:subject:date
 :message-id:reply-to;
 bh=9tQYFsgoXqRD5GHPUty2RsSEiSpRoorTmolt7y2Kxxs=;
 b=PDXMeh5aOhPcKfXN0VgKaArsslpz0qh4eNB3ZvHMtxMjQb7yMEzadsilmRpA0U8pyT
 io+0ViDvX1z6HSrdW2S7B73Q72bZG5gFX5oNdrsm23nLRF/MJSf2eVsxKPN/GQXtg7Dk
 3iWv0Z6DX2cGIdWcWBIQfWfPk1kA+sMn0qFq7aytR0OFIw+hoxgVozKuhQ4V4Oq/8JuZ
 d93LnHtcTVa0AQL0Jb7aCaBwemVQIRDM9Ph9V2KyHUDdnW/yMrfvzOTIP714w0urErDX
 1mZoWfDpOq24YpoGpOYiuDCOan+KqGMic1dOHJSRFDbjSlP/VdQH2JBO03ZKBMAGuiu8
 uaYQ==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=1e100.net; s=20230601; t=1713461216; x=1714066016;
 h=content-transfer-encoding:cc:to:subject:message-id:date:from
 :in-reply-to:references:mime-version:x-gm-message-state:from:to:cc
 :subject:date:message-id:reply-to;
 bh=9tQYFsgoXqRD5GHPUty2RsSEiSpRoorTmolt7y2Kxxs=;
 b=tr9THopdp4k+TtkbXq2NTAgZUuyRlSYiJK1JZIN9k05b3Aymdi2IuvdVYna98H+QMj
 O7gG4WfnjMOdAJD2g3o7vpUBD13FcK+B0O2SjlM01uqD8g3GySoWZ4ahH1vtypTmVKX1
 EcCYVSpHcoZdaMDSna3+wx5kTvpLUr7KxKoOEYv+m1Vq6g2zahIrDGejTO+Ila4Iri3m
 CiHjNFmBMdPogD5mXs3SARZjftlA4ZN36eKOUpQVNxS4L7i4hmuayjMaH33zTvixYwnk
 KSFfS8pnwZ1+qvD86t/NxO+L29lnNM+Vo35ZFQ+diCtcuRkPmMq5KcltkvAC2ajZXwz2
 mJpg==
X-Forwarded-Encrypted: i=1;
 AJvYcCWz1hs6IeHMTdzOqTVzSob50MpB/2lJuYNRbRadXRS2iFoH3AGzjbh+uF0jOPo/ZE4JK/RUaieuAyimxef6Fjc1YjFFMI8=
X-Gm-Message-State: AOJu0YyXePrBlBRpKBBHErrbz1VbZzssvO2MWYmsLRHW/dYOEO/EusFd
 11Vx8BuqjowU5Ki/Um912Za63JiV7esWkvG0gUavr5y01PJGaH/0uO1MVL3DVttTN0pEuHjMRJO
 mPt6JaFzA1cDtf+UZd/OSIZZoD3Y=
X-Google-Smtp-Source: AGHT+IErtWKxdESRoyp5cAm93pqR9x0BmCoLJQJmpjm01Q6cna8B0t8Mn65MTTbWb/Yi0vnwKM7j8By5ZQmUaZEC2s8=
X-Received: by 2002:a2e:868b:0:b0:2d8:9487:7588 with SMTP id
 l11-20020a2e868b000000b002d894877588mr1953209lji.38.1713461215465; Thu, 18
 Apr 2024 10:26:55 -0700 (PDT)
MIME-Version: 1.0
References: <86sezid4gp.fsf@HIDDEN>
 <ea3b88b6-8b1e-4e61-9da5-7a7160603b84@HIDDEN>
In-Reply-To: <ea3b88b6-8b1e-4e61-9da5-7a7160603b84@HIDDEN>
From: =?UTF-8?B?Sm/Do28gVMOhdm9yYQ==?= <joaotavora@HIDDEN>
Date: Thu, 18 Apr 2024 18:26:44 +0100
Message-ID: <CALDnm51g18vj=UAmN+=7y-mZGAx-+zn33Q=2wy_rxrndwhcRPw@HIDDEN>
Subject: Re: bug#70036 a fix that
To: Theodor Thornhill <theo@HIDDEN>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable
X-Spam-Score: 0.0 (/)
X-Debbugs-Envelope-To: 70036
Cc: Eli Zaretskii <eliz@HIDDEN>, 70036 <at> debbugs.gnu.org,
 felician.nemeth@HIDDEN
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -1.0 (-)

On Thu, Apr 18, 2024 at 5:33=E2=80=AFPM Theodor Thornhill <theo@HIDDEN=
o> wrote:

> I'll make a simple recipe this evening. It will require an lsp server ins=
tall, likely, but I'll do my best to keep it contained.

OK, but it would be preferable if this performance situation could
be reproduced with any language server in a project of certain
characteristics.

So if you say this happens with a project with a very deep directory hierar=
chy,
it's ideal if you could describe a generic project so I can reproduce
results with
clangd, basedpyright, gopls, rust-analyzer or any easy-to-get server.  jdtl=
s
is notoriously hard to install and get running, so I hope that's not the on=
e
you'll pick.

Jo=C3=A3o




Information forwarded to bug-gnu-emacs@HIDDEN:
bug#70036; Package emacs. Full text available.

Message received at 70036 <at> debbugs.gnu.org:


Received: (at 70036) by debbugs.gnu.org; 18 Apr 2024 17:22:44 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Thu Apr 18 13:22:44 2024
Received: from localhost ([127.0.0.1]:53581 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1rxVT9-0004P7-6z
	for submit <at> debbugs.gnu.org; Thu, 18 Apr 2024 13:22:44 -0400
Received: from mail-lf1-x129.google.com ([2a00:1450:4864:20::129]:55694)
 by debbugs.gnu.org with esmtp (Exim 4.84_2)
 (envelope-from <joaotavora@HIDDEN>) id 1rxVT6-0004O0-SR
 for 70036 <at> debbugs.gnu.org; Thu, 18 Apr 2024 13:22:41 -0400
Received: by mail-lf1-x129.google.com with SMTP id
 2adb3069b0e04-51aa6a8e49aso533746e87.3
 for <70036 <at> debbugs.gnu.org>; Thu, 18 Apr 2024 10:22:27 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=gmail.com; s=20230601; t=1713460941; x=1714065741; darn=debbugs.gnu.org;
 h=content-transfer-encoding:cc:to:subject:message-id:date:from
 :in-reply-to:references:mime-version:from:to:cc:subject:date
 :message-id:reply-to;
 bh=N8yMp6K71SJ9nH9rjo1U5aaV1KRMiwb0oWJmUA14un8=;
 b=itRTHJcY2ZiZN2deAJAm4omy/Ccob5uY8PYRNxvF3pun6hSUspvLETIS7HQJB+JBx2
 8Fqu6PWL+bt/KUQArEabbn98JFq02+3EerncxyrDVud8MdodbAuaVeXE8K745KiWg0s0
 cSMu/KdXzGpIJ6YYeZylTMu6fie2XnAkyplXoKIbPSnUWIufLBdlXNnbPLhnfuHh2Qnq
 lSC5ZNkvlHLlpRc0YJFbc34xR3+Aj8vX/ZdtAD/g2xzPH1YpscmBT7n38EuUih+2nGtr
 mXO/r1bVq7g6dgWVS5pqe5imtB079OmNBS4iyVQ5CZvblq7tj2EHvLOA7BJXM9OFTDSt
 P+VQ==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=1e100.net; s=20230601; t=1713460941; x=1714065741;
 h=content-transfer-encoding:cc:to:subject:message-id:date:from
 :in-reply-to:references:mime-version:x-gm-message-state:from:to:cc
 :subject:date:message-id:reply-to;
 bh=N8yMp6K71SJ9nH9rjo1U5aaV1KRMiwb0oWJmUA14un8=;
 b=AXwUhHpB2SlMLBa5gngy19ai7LQxKmYopz7D+obTerH7PwPHYveJeDxV/L6lTvVdl0
 EYHYbrxYDppKTvlUz0mN9E1OBAtqXZOf75TfVeccCnryY/XeA3dkIf/LIeMFjlCHM6sp
 sd2Cn+QtohU3G0EnmuVoGn/Hs0u8LYyfG2SmKjkbO1tX99t9WvmTRAd3kTqAZSFlpa+P
 cHmv3X3QGVRXm73SlaM6lDruP09xt5sLEuusfCa9t1Lo3PI5j2nBTyD0sbytA3si49dV
 KkS8AL0DyYR4l46hbgFuxCm0usdudZJJJVkmQSO4o32qO8anK4BlawN6C90jzD9enqhv
 aHVw==
X-Forwarded-Encrypted: i=1;
 AJvYcCVo7yuBFKuzWMT40pFUGQ7MM103b2wdXl6efO33T6BqLl2sZl5XVLKtl0ranircogkY7QVzsvcQOBvHH++j8SXeGepo6cY=
X-Gm-Message-State: AOJu0YzE2tS0P/oqElKLVqC1Xkopj9fgX8+S66KXi2BsdHhddeuySaYH
 8YFBKTNCODCITV0Vf7hRfemts9myIyhpvBy4OYLy2XECkrXH3pRBcYy10tAQV4FfAtbtqDITOrN
 61CdZ0wVblS4+XJjeCy5By7aBgMw=
X-Google-Smtp-Source: AGHT+IE/nKBidnPTpGJjaCO3ATm/19RMDe2a4iJkkwi4S+UbTL+sMjUVFjP7Oh1zDYIywTTandZRp2j/zUX1MjgRaGE=
X-Received: by 2002:a05:6512:51b:b0:519:33a5:973e with SMTP id
 o27-20020a056512051b00b0051933a5973emr1897658lfb.6.1713460940966; Thu, 18 Apr
 2024 10:22:20 -0700 (PDT)
MIME-Version: 1.0
References: <86y19ad61t.fsf@HIDDEN>
 <43de4151-ab68-4214-8691-33f3554feba1@HIDDEN>
 <CALDnm53J14dj1he+d8VF=ZB--XymExDkKL45XXAdVTb5VcDryw@HIDDEN>
 <86r0f2d46x.fsf@HIDDEN>
In-Reply-To: <86r0f2d46x.fsf@HIDDEN>
From: =?UTF-8?B?Sm/Do28gVMOhdm9yYQ==?= <joaotavora@HIDDEN>
Date: Thu, 18 Apr 2024 18:22:09 +0100
Message-ID: <CALDnm50xhhcsFYqvFFUAQqRhPmqHtzo3dB5uyqQAygkW-y4EHg@HIDDEN>
Subject: Re: bug#70036 a fix that
To: Eli Zaretskii <eliz@HIDDEN>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable
X-Spam-Score: 0.0 (/)
X-Debbugs-Envelope-To: 70036
Cc: felician.nemeth@HIDDEN, 70036 <at> debbugs.gnu.org, theo@HIDDEN
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -1.0 (-)

On Thu, Apr 18, 2024 at 5:30=E2=80=AFPM Eli Zaretskii <eliz@HIDDEN> wrote:

> > >  That's unfortunate.
> >
> > For you maybe.
>
> For me also.
>
> And please try to be kinder.  Theo might have made a mistake (or not),
> but he is still a valued contributor, so please treat him with respect
> he deserves.

I'm not being unkind at all.

So let's skip the morals.  I've told you I'm invested in fixing Theo's
performance problems, but I must learn more about them obviously.
But I'm not going to keep a regression in just to be nice to
people.  I'm sure Theo can understand that.  He's done lots of
useful contributions and will do more, but this one was a mistake.

Jo=C3=A3o




Information forwarded to bug-gnu-emacs@HIDDEN:
bug#70036; Package emacs. Full text available.

Message received at 70036 <at> debbugs.gnu.org:


Received: (at 70036) by debbugs.gnu.org; 18 Apr 2024 16:37:15 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Thu Apr 18 12:37:14 2024
Received: from localhost ([127.0.0.1]:53392 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1rxUl7-0007Xw-1q
	for submit <at> debbugs.gnu.org; Thu, 18 Apr 2024 12:37:14 -0400
Received: from eggs.gnu.org ([2001:470:142:3::10]:58012)
 by debbugs.gnu.org with esmtp (Exim 4.84_2)
 (envelope-from <eliz@HIDDEN>) id 1rxUl4-0007Wu-P7
 for 70036 <at> debbugs.gnu.org; Thu, 18 Apr 2024 12:37:11 -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 <eliz@HIDDEN>)
 id 1rxUkl-00031R-Pr; Thu, 18 Apr 2024 12:36:51 -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=NydLgpo7JYoLx/wkQ0hm72+c8YLqd1rEmVf53YBAtBM=; b=e9I4WSw1uttWf6LvACL9
 syu3zecFiexOozXH1Y8xcGnka+Eu3JOxi/j2VnPtXH2QzWuew47Hl2MICpNzwXb11qaBchwbyQ0vb
 6E05kousysgHE44qeQpkO4cFjoVBDqjmwAuS5IZnTgbp3OBv06f3HH8OlPHMjJtZkJjhBDd+RYVx1
 Ozck7VNOJxQvWZF4Z3FPJ+CTwyUObf9v9VRzW9lS0tbgwGd77vtX3YpN6EBS/Yc96KVAfiLlXRpng
 wwnk2sse5yxB7c8r1VjANIfZBIOxr3mWBeLW5M0mLgCFGbmXCSi5iQOd9tXrh0R7ksyVcJTslPWeJ
 WaplWcLBqty+NQ==;
Date: Thu, 18 Apr 2024 19:36:49 +0300
Message-Id: <86o7a6d3vi.fsf@HIDDEN>
From: Eli Zaretskii <eliz@HIDDEN>
To: Theodor Thornhill <theo@HIDDEN>
In-Reply-To: <ea3b88b6-8b1e-4e61-9da5-7a7160603b84@HIDDEN> (message
 from Theodor Thornhill on Thu, 18 Apr 2024 18:33:36 +0200)
Subject: Re: bug#70036 a fix that
References: <ea3b88b6-8b1e-4e61-9da5-7a7160603b84@HIDDEN>
MIME-version: 1.0
Content-type: text/plain; charset=utf-8
Content-Transfer-Encoding: 8bit
X-Spam-Score: -2.3 (--)
X-Debbugs-Envelope-To: 70036
Cc: 70036 <at> debbugs.gnu.org, felician.nemeth@HIDDEN, joaotavora@HIDDEN
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -3.3 (---)

> Date: Thu, 18 Apr 2024 18:33:36 +0200
> From: Theodor Thornhill <theo@HIDDEN>
> Cc: João Távora <joaotavora@HIDDEN>,
>  felician.nemeth@HIDDEN, 70036 <at> debbugs.gnu.org
> 
> I'll make a simple recipe this evening. It will require an lsp server install, likely, but I'll do my best to keep it
> contained.

Thanks, comparative timings are the best means to judging our
possibilities.




Information forwarded to bug-gnu-emacs@HIDDEN:
bug#70036; Package emacs. Full text available.

Message received at 70036 <at> debbugs.gnu.org:


Received: (at 70036) by debbugs.gnu.org; 18 Apr 2024 16:34:04 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Thu Apr 18 12:34:04 2024
Received: from localhost ([127.0.0.1]:53374 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1rxUi2-0007BQ-Qk
	for submit <at> debbugs.gnu.org; Thu, 18 Apr 2024 12:34:04 -0400
Received: from out-182.mta0.migadu.com ([2001:41d0:1004:224b::b6]:32366)
 by debbugs.gnu.org with esmtp (Exim 4.84_2)
 (envelope-from <theo@HIDDEN>) id 1rxUhz-0007AD-5U
 for 70036 <at> debbugs.gnu.org; Thu, 18 Apr 2024 12:34:00 -0400
Date: Thu, 18 Apr 2024 18:33:36 +0200
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=thornhill.no;
 s=key1; t=1713458018;
 h=from:from:reply-to:subject:subject:date:date:message-id:message-id:
 to:to:cc:cc:mime-version:mime-version:content-type:content-type:
 content-transfer-encoding:content-transfer-encoding:  in-reply-to:in-reply-to; 
 bh=PPyvb5IfdyMSoqdYDhffc3F3ZQa9W6F1MquIHGVuiSg=;
 b=Aw8qxAziP204VvsF3oWE6uy/RHhIPoa08lyWH5ATdkcfMatHVcvZg3b/XUQLUWH4PjYX06
 ji8vdB6vssikHIx9OGy/GppQLo3frWEEFa9/ozwCc+5WPnRXIQyWZAsCQxQuj/drbYy4EG
 vi7BSNlXpVjPZbd4QvU2gnhDOHhbLzc77FIxssboooAVUr5eEef8Mo13dl44f/Zx4O4BAe
 EKIadDz+ToHROdn6GyxgLF5KBK/mk+7FmzFPj+VNF0v4JSwClAMisILKzpjppgfU765L2t
 mrpO0bqwUwjR6gMwv8EuVlKbmKDsmLnDL6HX9uOPiGJSG4On1MAWyGguuPgTMg==
Subject: Re: bug#70036 a fix that
Message-ID: <ea3b88b6-8b1e-4e61-9da5-7a7160603b84@HIDDEN>
X-Android-Message-ID: <ea3b88b6-8b1e-4e61-9da5-7a7160603b84@HIDDEN>
In-Reply-To: <86sezid4gp.fsf@HIDDEN>
X-Report-Abuse: Please report any abuse attempt to abuse@HIDDEN and
 include these headers.
From: Theodor Thornhill <theo@HIDDEN>
To: Eli Zaretskii <eliz@HIDDEN>
Importance: Normal
X-Priority: 3
X-MSMail-Priority: Normal
MIME-Version: 1.0
Content-Type: text/html; charset=utf-8
Content-Transfer-Encoding: base64
X-Migadu-Flow: FLOW_OUT
X-Spam-Score: 0.7 (/)
X-Debbugs-Envelope-To: 70036
Cc: 70036 <at> debbugs.gnu.org, felician.nemeth@HIDDEN,
 =?ISO-8859-1?Q?Jo=E3o_T=E1vora?= <joaotavora@HIDDEN>
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -0.3 (/)

PGRpdiBkaXI9J2F1dG8nPjxkaXY+PGJyPjxkaXYgY2xhc3M9ImdtYWlsX2V4dHJhIj48YnI+PGRp
diBjbGFzcz0iZ21haWxfcXVvdGUiPk9uIEFwciAxOCwgMjAyNCAxODoyNCwgRWxpIFphcmV0c2tp
aSAmbHQ7ZWxpekBnbnUub3JnJmd0OyB3cm90ZTo8YnIgdHlwZT0iYXR0cmlidXRpb24iPjxibG9j
a3F1b3RlIGNsYXNzPSJxdW90ZSIgc3R5bGU9Im1hcmdpbjowIDAgMCAuOGV4O2JvcmRlci1sZWZ0
OjFweCAjY2NjIHNvbGlkO3BhZGRpbmctbGVmdDoxZXgiPjxwIGRpcj0ibHRyIj4mZ3Q7IEZyb206
IEpvw6NvIFTDoXZvcmEgJmx0O2pvYW90YXZvcmFAZ21haWwuY29tJmd0Owo8YnI+CiZndDsgRGF0
ZTogVGh1LCAxOCBBcHIgMjAyNCAxNzoxMjozNCArMDEwMAo8YnI+CiZndDsgQ2M6IHRoZW9AdGhv
cm5oaWxsLm5vLCBmZWxpY2lhbi5uZW1ldGhAZ21haWwuY29tLCA3MDAzNkBkZWJidWdzLmdudS5v
cmcKPGJyPgomZ3Q7IAo8YnI+CiZndDsgJmd0OyBQcm9maWxlcyBjYW4gbWlzbGVhZCBhbmQgdGhl
eSBjYW4gbGllLgo8YnI+CiZndDsgCjxicj4KJmd0OyBUaGVvJ3MgcHJvZmlsZXMgYXR0YWNoZWQg
dG8gdGhpcyBpc3N1ZSB3ZXJlIHRoZSBiZXN0IEkgY291bGQgZmluZC4KPGJyPgomZ3Q7IElmIHRo
ZSBtYW5uZXIgaW4gd2hpY2ggdGhleSB3ZXJlIGNvbGxlY3RlZCB3YXMgZW5vdWdoIHRvIG1ha2Ug
YQo8YnI+CiZndDsgZGVjaXNpb24gaW4gYSBjZXJ0YWlud2F5LCB0aGV5IHNob3VsZCBiZSBnb29k
IGVub3VnaCB0byBtYWtlIGEgZGVjaXNpb24KPGJyPgomZ3Q7IGluIGFub3RoZXIgd2F5Lgo8YnI+
CiZndDsgCjxicj4KJmd0OyBCdXQgSSBmdWxseSBhZ3JlZSB3ZSBzaG91bGQgaGF2ZSBhIG1vcmUg
Y29uc3RyYWluZWQgdGVzdCBjYXNlLgo8YnI+CiZndDsgCjxicj4KJmd0OyAmZ3Q7IEl0IGlzIG11
Y2ggZWFzaWVyIHRvIHRpbWUgdGhlCjxicj4KJmd0OyAmZ3Q7IG9sZCBhbmQgdGhlIG5ldyBjb2Rl
IGRvaW5nIHRoZSBzYW1lIGpvYnMsIGFuZCBjb21wYXJlIHRoZSB0aW1lcy4KPGJyPgomZ3Q7IAo8
YnI+CiZndDsgU28uLi4gdGhhdCdzIHdoYXQgSSBkaWQuCjxicj4KCjxicj4KSWYgeW91IHRpbWVk
IHRoaXMgY29kZSB3aXRoIHRoZSBsaWtlcyBvZiBiZW5jaG1hcmstcnVuLCBwbGVhc2Ugc2hvdwo8
YnI+CnRoZSB0aW1pbmdzLiZuYnNwOyBQcm9maWxlcyBhcmUgbm90IHRoZSBiZXN0IGluc3RydW1l
bnQgZm9yIHRoaXMga2luZCBvZgo8YnI+CmRlY2lzaW9ucy4KPGJyPgoKPGJyPgomZ3Q7IERvIHlv
dSBoYXZlIGEgY29uY3JldGUgaWRlYSBvZiB3aGF0IHRoaXMgImpvYiIgaXM/Cjxicj4KCjxicj4K
Tm8sIHNvcnJ5LiZuYnNwOyBJZiBub3RoaW5nIGVsc2UgY29tZXMgdG8gbWluZCwgSSB0aGluayBU
aGVvIGhhZCBzdWNoIGEKPGJyPgpzY2VuYXJpby4KPGJyPgoKPGJyPgomZ3Q7IE9mIGNvdXJzZS4m
bmJzcDsgTGV0J3MgaGF2ZSBUaGVvIGRvIHRoaXMgY29tcGFyaXNvbiBhbmQgcGVyaGFwcyBkZXNj
cmliZQo8YnI+CiZndDsgaW4gbW9yZSBkZXRhaWwgdGhlIGNvbmRpdGlvbnMgaW4gd2hpY2ggaGUg
Y29sbGVjdGVkIGhpcyBwcm9maWxlcwo8YnI+Cgo8YnI+ClN1cmUsIGl0IGRvZXNuJ3QgbWF0dGVy
IHdobyBkb2VzIHRoZSBtZWFzdXJlbWVudHMsIGFzIGxvbmcgYXMgd2UgaGF2ZQo8YnI+CnRoZW0u
Cjxicj4KPC9wPgo8L2Jsb2NrcXVvdGU+PC9kaXY+PGJyPjwvZGl2PjwvZGl2PjxkaXYgY2xhc3M9
ImdtYWlsX2V4dHJhIiBkaXI9ImF1dG8iPkknbGwgbWFrZSBhIHNpbXBsZSByZWNpcGUgdGhpcyBl
dmVuaW5nLiBJdCB3aWxsIHJlcXVpcmUgYW4gbHNwIHNlcnZlciBpbnN0YWxsLCBsaWtlbHksIGJ1
dCBJJ2xsIGRvIG15IGJlc3QgdG8ga2VlcCBpdCBjb250YWluZWQuPC9kaXY+PGRpdiBjbGFzcz0i
Z21haWxfZXh0cmEiIGRpcj0iYXV0byI+PGJyPjwvZGl2PjxkaXYgY2xhc3M9ImdtYWlsX2V4dHJh
IiBkaXI9ImF1dG8iPlRoZW88L2Rpdj48L2Rpdj4=





Information forwarded to bug-gnu-emacs@HIDDEN:
bug#70036; Package emacs. Full text available.

Message received at 70036 <at> debbugs.gnu.org:


Received: (at 70036) by debbugs.gnu.org; 18 Apr 2024 16:30:23 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Thu Apr 18 12:30:23 2024
Received: from localhost ([127.0.0.1]:53356 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1rxUeV-0006lQ-3k
	for submit <at> debbugs.gnu.org; Thu, 18 Apr 2024 12:30:23 -0400
Received: from eggs.gnu.org ([2001:470:142:3::10]:34978)
 by debbugs.gnu.org with esmtp (Exim 4.84_2)
 (envelope-from <eliz@HIDDEN>) id 1rxUeR-0006kP-Vn
 for 70036 <at> debbugs.gnu.org; Thu, 18 Apr 2024 12:30:21 -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 <eliz@HIDDEN>)
 id 1rxUe8-0001Sh-G4; Thu, 18 Apr 2024 12:30:00 -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=jN3h4KprQRAVrB3lTs4xPWc749ju68cY3dM1rh1odEo=; b=n87z5tzREcxANBSFMLlZ
 JIlvx4UkFwI1vLXuX3Z+0SkonAhrNQMpm+FoTxRfXhz66v3CGDkJpQ0qyeY4qcXwhmu/0z4oxZQVu
 JSO581MTKq3PUD6NFkV23pKvMQf7JTE2mqI65ILTQB5okLOaHE5KstyzFU5LD4CrW3dL70k7Vw0u4
 3MJDcLRkBFhLSVqD76D9XzcOiB1rGViSOO3+JBaTCdBv6qmC5MWoW18YzlQ5RQ8ZRId6yNrd+3DmX
 aBNKE7ZjCXAUggshZ4ft+SdGetmFCSDCtvUt5KJp6UrHQo9/qLm8gI4g2zbjOCbStxCtBuUb8Z90g
 AQqcVwKOVzFMGQ==;
Date: Thu, 18 Apr 2024 19:29:58 +0300
Message-Id: <86r0f2d46x.fsf@HIDDEN>
From: Eli Zaretskii <eliz@HIDDEN>
To: =?utf-8?B?Sm/Do28gVMOhdm9yYQ==?= <joaotavora@HIDDEN>
In-Reply-To: <CALDnm53J14dj1he+d8VF=ZB--XymExDkKL45XXAdVTb5VcDryw@HIDDEN>
 (message from =?utf-8?B?Sm/Do28gVMOhdm9yYQ==?= on Thu, 18 Apr 2024 17:15:52
 +0100)
Subject: Re: bug#70036 a fix that
References: <86y19ad61t.fsf@HIDDEN>
 <43de4151-ab68-4214-8691-33f3554feba1@HIDDEN>
 <CALDnm53J14dj1he+d8VF=ZB--XymExDkKL45XXAdVTb5VcDryw@HIDDEN>
MIME-version: 1.0
Content-type: text/plain; charset=utf-8
Content-Transfer-Encoding: 8bit
X-Spam-Score: -2.3 (--)
X-Debbugs-Envelope-To: 70036
Cc: felician.nemeth@HIDDEN, 70036 <at> debbugs.gnu.org, theo@HIDDEN
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -3.3 (---)

> From: João Távora <joaotavora@HIDDEN>
> Date: Thu, 18 Apr 2024 17:15:52 +0100
> Cc: Eli Zaretskii <eliz@HIDDEN>, felician.nemeth@HIDDEN, 70036 <at> debbugs.gnu.org
> 
> On Thu, Apr 18, 2024 at 5:11 PM Theodor Thornhill <theo@HIDDEN> wrote:
> 
> >  > Profiles can mislead and they can lie.  It is much easier to time the
> >  > old and the new code doing the same jobs, and compare the times.
> >  >
> >  >> If so, I think this simpler patch after my sig is all we need, as it
> >  >> completely clears the profile of any "file-truename".  I have reverted
> >  >> the earlier patch and pushed a patch very similar to the one after my sig.
> >
> >  That's unfortunate.
> 
> For you maybe.

For me also.

And please try to be kinder.  Theo might have made a mistake (or not),
but he is still a valued contributor, so please treat him with respect
he deserves.

> From my standpoint noone else besides you has complained about these
> problems, and I am still Eglot maintainer and must protect against
> regressions.

Yes, but that doesn't mean you should rush to revert others' changes
while the discussion is still on-going and the conclusions are not yet
in sight.  Please don't, it hurts people and makes them less willing
to contribute.  No catastrophe would have happened if you waited for a
while before making the changes.




Information forwarded to bug-gnu-emacs@HIDDEN:
bug#70036; Package emacs. Full text available.

Message received at 70036 <at> debbugs.gnu.org:


Received: (at 70036) by debbugs.gnu.org; 18 Apr 2024 16:25:04 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Thu Apr 18 12:25:04 2024
Received: from localhost ([127.0.0.1]:53331 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1rxUZL-0006A3-8H
	for submit <at> debbugs.gnu.org; Thu, 18 Apr 2024 12:25:04 -0400
Received: from eggs.gnu.org ([2001:470:142:3::10]:49478)
 by debbugs.gnu.org with esmtp (Exim 4.84_2)
 (envelope-from <eliz@HIDDEN>) id 1rxUZI-000695-AC
 for 70036 <at> debbugs.gnu.org; Thu, 18 Apr 2024 12:25:01 -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 <eliz@HIDDEN>)
 id 1rxUYx-0000kn-Kx; Thu, 18 Apr 2024 12:24:40 -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=LJoZY2gJBoFzVR05QuK7Wu+ZARh0QumHtX1xTLDgDv0=; b=j63JScZX4X90/P7rWV/f
 zdYvtKSSB/UBEll0IWbC14orgzlQ5edWuFfUdOXknbvFpy86aiOZa0D+KHa5RjyyUQ5fTbOTmGAHL
 FZtDpSww4lb9SlcVw3xbvbRQyW4GN0rqdA15VSlGfn1ykFIQsUvQblnXgrDdTs8V8tM58Irsim971
 i3Atnm01YusZEhuBPW2aQoGad7Wx7zmdn2ftwSXpOKGuDZo75wde0l7Jf1j4SgJPN9GYxtiPk3xJM
 Jm1KrKTNWVYa4dQtdnfRIXdH5mcqclLQQT4tpBmGT4t7Ne7mpmJc1uMXCy/ATC5UhYMm7C+AIpVqF
 gszS16ksL4OTGQ==;
Date: Thu, 18 Apr 2024 19:24:06 +0300
Message-Id: <86sezid4gp.fsf@HIDDEN>
From: Eli Zaretskii <eliz@HIDDEN>
To: =?utf-8?B?Sm/Do28gVMOhdm9yYQ==?= <joaotavora@HIDDEN>
In-Reply-To: <CALDnm51TSR-_MhUyBTPgmfVGVbzBpQxkaC0weF1YG22fHAYyJQ@HIDDEN>
 (message from =?utf-8?B?Sm/Do28gVMOhdm9yYQ==?= on Thu, 18 Apr 2024 17:12:34
 +0100)
Subject: Re: bug#70036 a fix that
References: <CALDnm53enki1g6Gqpg1X3SziGC3dZ78RuXPEZAfU6Ze006Vq2A@HIDDEN>
 <86y19ad61t.fsf@HIDDEN>
 <CALDnm51TSR-_MhUyBTPgmfVGVbzBpQxkaC0weF1YG22fHAYyJQ@HIDDEN>
MIME-version: 1.0
Content-type: text/plain; charset=utf-8
Content-Transfer-Encoding: 8bit
X-Spam-Score: -2.3 (--)
X-Debbugs-Envelope-To: 70036
Cc: felician.nemeth@HIDDEN, 70036 <at> debbugs.gnu.org, theo@HIDDEN
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -3.3 (---)

> From: João Távora <joaotavora@HIDDEN>
> Date: Thu, 18 Apr 2024 17:12:34 +0100
> Cc: theo@HIDDEN, felician.nemeth@HIDDEN, 70036 <at> debbugs.gnu.org
> 
> > Profiles can mislead and they can lie.
> 
> Theo's profiles attached to this issue were the best I could find.
> If the manner in which they were collected was enough to make a
> decision in a certainway, they should be good enough to make a decision
> in another way.
> 
> But I fully agree we should have a more constrained test case.
> 
> > It is much easier to time the
> > old and the new code doing the same jobs, and compare the times.
> 
> So... that's what I did.

If you timed this code with the likes of benchmark-run, please show
the timings.  Profiles are not the best instrument for this kind of
decisions.

> Do you have a concrete idea of what this "job" is?

No, sorry.  If nothing else comes to mind, I think Theo had such a
scenario.

> Of course.  Let's have Theo do this comparison and perhaps describe
> in more detail the conditions in which he collected his profiles

Sure, it doesn't matter who does the measurements, as long as we have
them.




Information forwarded to bug-gnu-emacs@HIDDEN:
bug#70036; Package emacs. Full text available.

Message received at 70036 <at> debbugs.gnu.org:


Received: (at 70036) by debbugs.gnu.org; 18 Apr 2024 16:22:05 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Thu Apr 18 12:22:04 2024
Received: from localhost ([127.0.0.1]:53307 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1rxUWS-0005oq-IO
	for submit <at> debbugs.gnu.org; Thu, 18 Apr 2024 12:22:04 -0400
Received: from eggs.gnu.org ([2001:470:142:3::10]:54970)
 by debbugs.gnu.org with esmtp (Exim 4.84_2)
 (envelope-from <eliz@HIDDEN>) id 1rxUWP-0005nh-D3
 for 70036 <at> debbugs.gnu.org; Thu, 18 Apr 2024 12:22:02 -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 <eliz@HIDDEN>)
 id 1rxUW6-0000Nr-2c; Thu, 18 Apr 2024 12:21:42 -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=kASUMv4ukYP0onJxhImYdKwW4hZXi4/PfidvmZuJcK0=; b=aEhUfRvF9FHvKeHStX7i
 e13TE5UiqDIGl0heg+gfVHzcgPVIyhqUh567OpfPLFJ/nEmM1Ox1slrFU8ZXZXjlfhoWe6Yq85RhL
 +NDbtXjL+9KOVbZFJIPxJHw0Cj2te9YSgyZVgHlzxB8H7JDhrJVyf+v/Ygj+lTGIR9UPmk/7YkL37
 FhagGdHd3IR/QsLogeSFBdV0vkAdWKFydQfhYdPIxaxZCwsNCUHZEidnVAb/zDMdzLw0bCmgbzHo4
 7mGFGIieDsi0KDGCo/J4MK0SnYxyDdYE7TWKEd2VszXROo5bOsqo00qzVL4qWdpjPFBE/p4VhXrUs
 2rEIE0NN8TMtXQ==;
Date: Thu, 18 Apr 2024 19:21:39 +0300
Message-Id: <86ttjyd4ks.fsf@HIDDEN>
From: Eli Zaretskii <eliz@HIDDEN>
To: Theodor Thornhill <theo@HIDDEN>
In-Reply-To: <43de4151-ab68-4214-8691-33f3554feba1@HIDDEN> (message
 from Theodor Thornhill on Thu, 18 Apr 2024 18:11:36 +0200)
Subject: Re: bug#70036 a fix that
References: <43de4151-ab68-4214-8691-33f3554feba1@HIDDEN>
MIME-version: 1.0
Content-type: text/plain; charset=utf-8
Content-Transfer-Encoding: 8bit
X-Spam-Score: -2.3 (--)
X-Debbugs-Envelope-To: 70036
Cc: 70036 <at> debbugs.gnu.org, felician.nemeth@HIDDEN, joaotavora@HIDDEN
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -3.3 (---)

> Date: Thu, 18 Apr 2024 18:11:36 +0200
> From: Theodor Thornhill <theo@HIDDEN>
> Cc: João Távora <joaotavora@HIDDEN>,
>  felician.nemeth@HIDDEN, 70036 <at> debbugs.gnu.org
> 
>  >> If so, I think this simpler patch after my sig is all we need, as it
>  >> completely clears the profile of any "file-truename".  I have reverted
>  >> the earlier patch and pushed a patch very similar to the one after my sig.
>  
>  That's unfortunate.
>  
>  >
>  > This new code should also be timed and compared to the other two
>  > versions, before we make the final decision on this.
>  
>  
>  This is a very unfortunate change. This completely misses the point and
>  reverts any perf gains from my previous patch... I think your
>  conclusions are too quick, and actions likewise.
>  
>  I'd argue that long paths are a way more common occurrence than
>  symlinking, and the places you touched in your "better way" ignores the
>  performance critical parts.

Please show timing data which compares the possible variants.  We must
have quantitative data to have a firm basis for this discussion.  I
don't yet have an opinion what we should do about this issue, and I
cannot form an opinion unless I see some real-life measurements.  I
asked João to present such measurements as well.




Information forwarded to bug-gnu-emacs@HIDDEN:
bug#70036; Package emacs. Full text available.

Message received at 70036 <at> debbugs.gnu.org:


Received: (at 70036) by debbugs.gnu.org; 18 Apr 2024 16:16:28 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Thu Apr 18 12:16:28 2024
Received: from localhost ([127.0.0.1]:53281 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1rxUR0-0005CS-Mj
	for submit <at> debbugs.gnu.org; Thu, 18 Apr 2024 12:16:28 -0400
Received: from mail-lj1-x22a.google.com ([2a00:1450:4864:20::22a]:42246)
 by debbugs.gnu.org with esmtp (Exim 4.84_2)
 (envelope-from <joaotavora@HIDDEN>) id 1rxUQx-0005BC-H4
 for 70036 <at> debbugs.gnu.org; Thu, 18 Apr 2024 12:16:25 -0400
Received: by mail-lj1-x22a.google.com with SMTP id
 38308e7fff4ca-2da0f8f7b24so12655901fa.1
 for <70036 <at> debbugs.gnu.org>; Thu, 18 Apr 2024 09:16:09 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=gmail.com; s=20230601; t=1713456964; x=1714061764; darn=debbugs.gnu.org;
 h=content-transfer-encoding:cc:to:subject:message-id:date:from
 :in-reply-to:references:mime-version:from:to:cc:subject:date
 :message-id:reply-to;
 bh=yOGwPyChjevDXlISv2VPiy2juIj6ZB7GJnB0csU1E6Y=;
 b=i+VY8VXTubCTjV6vSysUXkJf/+MZi5ur0s2ox09PUfxrK0AAbmK7J2k2SFdn1Uwk8r
 4N8ibd7vo3R6t2N7Bd/vDPGF5nrrEzBb2emGo4aKli3/2cmwwULO16+gvpomfg1kcPlB
 eIK4MSXgpyIvppOImbYmyjnU69AdUDiTxFMaWtxU1Xu3Wl7xf/WMFkEiMkOPWLMkY1Dz
 FiW2aMlRJ1Z3jXhKyuja4WCH0Yj9Gf/3fFFyLgchNgB2etYA4f+D/RnN5Ii+Bxjg9r8f
 T7C58u9OfQ2M5JaMZb/hFyuNJ1/AfV47UYEY3YN1JLedJBHhd9zkv3xFRB2jgo/lAfNm
 OCrw==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=1e100.net; s=20230601; t=1713456964; x=1714061764;
 h=content-transfer-encoding:cc:to:subject:message-id:date:from
 :in-reply-to:references:mime-version:x-gm-message-state:from:to:cc
 :subject:date:message-id:reply-to;
 bh=yOGwPyChjevDXlISv2VPiy2juIj6ZB7GJnB0csU1E6Y=;
 b=WbuhDYNq1bJ6JI8FxZfi4yCexm80g5xl8shJY7CoeWNV42Vda3ET4jxHMOmcaKmaYp
 us4RXQ/Eo8pUMrehYDosoRT8grnJXcCVYy/9O2vJXlfHatT7wwrVWNmM0JjHhu8x72FG
 fqCzwYrkhVTZYny1MKFM1CUIWWmbblgbgNjhT67bup8/Vn2rvc6Nt+k5M0sY9GrQHyYk
 XbPB54+9g4EcmUopkd7tf74jyHIQIes5hpMJXCxgNj3iuN9PCiHSXENonWPFB5zK+qkZ
 C+tkAvXtAk9B/ybgG/KLnMFoHyfVSHwccKIf4qVhOb/MGjuU2Ja3iQRHV0futGvo7oII
 MZ1A==
X-Forwarded-Encrypted: i=1;
 AJvYcCV7ySZM8um3eb8+Kqbeq1vH8hPItRS16AN2m8AFFwNXOEnZJZOYiKpBuYTToagCF96fXnMj6k+wK9eGHKbNnkUtDjbLLtQ=
X-Gm-Message-State: AOJu0Yxz9PXFwLknPZzBiBX/8pWNVOgHoxZLebfYEYBpsdUkirEZwVGI
 6IVTZ0gBWQM5kafuIcCnDVaHPxqtBrljywQaz1YeBL73tn75/BIsErbSeZJesV4FKevpTuJMsr8
 QGDRpzEkx/YrxFPBgy4cbWC3zHUc=
X-Google-Smtp-Source: AGHT+IEBOOTbd7lnzSb8KBRCh6CKcxZTZ8bq8UlXFyg7jmOgw18d5eqmHaznxYHkCrP9zDv2IatZDx502Zrjg4NOXbA=
X-Received: by 2002:a2e:b0d0:0:b0:2d6:f8d7:ab95 with SMTP id
 g16-20020a2eb0d0000000b002d6f8d7ab95mr773666ljl.21.1713456963735; Thu, 18 Apr
 2024 09:16:03 -0700 (PDT)
MIME-Version: 1.0
References: <86y19ad61t.fsf@HIDDEN>
 <43de4151-ab68-4214-8691-33f3554feba1@HIDDEN>
In-Reply-To: <43de4151-ab68-4214-8691-33f3554feba1@HIDDEN>
From: =?UTF-8?B?Sm/Do28gVMOhdm9yYQ==?= <joaotavora@HIDDEN>
Date: Thu, 18 Apr 2024 17:15:52 +0100
Message-ID: <CALDnm53J14dj1he+d8VF=ZB--XymExDkKL45XXAdVTb5VcDryw@HIDDEN>
Subject: Re: bug#70036 a fix that
To: Theodor Thornhill <theo@HIDDEN>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable
X-Spam-Score: 0.0 (/)
X-Debbugs-Envelope-To: 70036
Cc: Eli Zaretskii <eliz@HIDDEN>, 70036 <at> debbugs.gnu.org,
 felician.nemeth@HIDDEN
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -1.0 (-)

On Thu, Apr 18, 2024 at 5:11=E2=80=AFPM Theodor Thornhill <theo@HIDDEN=
o> wrote:

>  > Profiles can mislead and they can lie.  It is much easier to time the
>  > old and the new code doing the same jobs, and compare the times.
>  >
>  >> If so, I think this simpler patch after my sig is all we need, as it
>  >> completely clears the profile of any "file-truename".  I have reverte=
d
>  >> the earlier patch and pushed a patch very similar to the one after my=
 sig.
>
>  That's unfortunate.

For you maybe.  From my standpoint noone else besides you has complained
about these problems, and I am still Eglot maintainer and must protect
against regressions.

>  > This new code should also be timed and compared to the other two
>  > versions, before we make the final decision on this.
>
>  This is a very unfortunate change. This completely misses the point and
>  reverts any perf gains from my previous patch... I think your
>  conclusions are too quick, and actions likewise.
>
>  I'd argue that long paths are a way more common occurrence than
>  symlinking, and the places you touched in your "better way" ignores the
>  performance critical parts.
>
>  The function you are suggesting isn't the hotspot. Most notable
>  publishDiagnostics is, which now is killed again.

Then you should publish details for a reproducible experiment
and we can take it from there.

The experiments I ran were the ones I could gather from a reading
of your profiles.  The patch I used was very effective in solving
the performance effects.

Jo=C3=A3o




Information forwarded to bug-gnu-emacs@HIDDEN:
bug#70036; Package emacs. Full text available.

Message received at 70036 <at> debbugs.gnu.org:


Received: (at 70036) by debbugs.gnu.org; 18 Apr 2024 16:13:11 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Thu Apr 18 12:13:11 2024
Received: from localhost ([127.0.0.1]:53260 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1rxUNp-0004oa-DF
	for submit <at> debbugs.gnu.org; Thu, 18 Apr 2024 12:13:10 -0400
Received: from mail-lf1-x12d.google.com ([2a00:1450:4864:20::12d]:44364)
 by debbugs.gnu.org with esmtp (Exim 4.84_2)
 (envelope-from <joaotavora@HIDDEN>) id 1rxUNm-0004nI-GD
 for 70036 <at> debbugs.gnu.org; Thu, 18 Apr 2024 12:13:07 -0400
Received: by mail-lf1-x12d.google.com with SMTP id
 2adb3069b0e04-516d3776334so1247079e87.1
 for <70036 <at> debbugs.gnu.org>; Thu, 18 Apr 2024 09:12:52 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=gmail.com; s=20230601; t=1713456767; x=1714061567; darn=debbugs.gnu.org;
 h=content-transfer-encoding:cc:to:subject:message-id:date:from
 :in-reply-to:references:mime-version:from:to:cc:subject:date
 :message-id:reply-to;
 bh=lnHSRGSxl0tTNixux9stkcM18PxshHbVbs8DfZzPUy0=;
 b=aAJP91O09gATWVltBUBoU62z0+OZES/Q6IaqGbeXnnF9JekqrFmKdWrxtY2V5xaFfn
 SNXPLbFGjdxq5JDEhfO3aG4znDy9T3wmo6LlDEAfeqkdGIS7mxvcM7qD9XofEYIO9sTF
 1bUNLg+kAUulvL9IUozOiiKsIlievUlGrx5bkDz15agDL6kX++oJiiYx7UuKIdrRe2Du
 56ofhGLC7BzoB46Qm+i74tdeWtRNWP9UpSiUcefkd6tbZPnbIDuRuoAnWpUpUAvh6PE7
 u0HUpJwRNe5qdw7gXD7CRkY43dMUltf8GjJ7izjHMISia8Nn55Vjj9+PmG6K8Hf8bnNO
 vG6w==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=1e100.net; s=20230601; t=1713456767; x=1714061567;
 h=content-transfer-encoding:cc:to:subject:message-id:date:from
 :in-reply-to:references:mime-version:x-gm-message-state:from:to:cc
 :subject:date:message-id:reply-to;
 bh=lnHSRGSxl0tTNixux9stkcM18PxshHbVbs8DfZzPUy0=;
 b=ZVmQlF+/w63JP8SMV+rVdaeJBGEtdZggEoQzGntps9BuKIbGJywJbiZir25LVgY0KL
 QaVK2g238y6sERLd8SN6HLMQMdqgiQEdaQ2eD3fpLE3H1eIvynEkbui1nC7gfRJ6AplL
 Gky6gqpiEDOyOxSb+HqARLnn/k+LP4rC4neF3/EbF23MUtpps+WqQuD+sVx8kct6ZWRy
 RFsDK7fgV7ucL0Y9Zuz1O5A16wLDkWqmEykyrJIapx8ewqTqGXpspMNk7gi6nAq+UIqG
 6A+x2VJjIiHjGBCNJzeFfZGxtSdVzowLMO969sall0OjMOBgVjbuHlP9XirsYycISALJ
 Ml6w==
X-Forwarded-Encrypted: i=1;
 AJvYcCUg/ElPpna5FNWgONRtkviH72Fs0c9Vn2wy7EF553Ep2Bs3DQ0Jdc8Vuk3CUtzqg9KylNL1+/1GGYOxi53amNnTQusJpxk=
X-Gm-Message-State: AOJu0YzuMOeDGD6i6FJ28nhZznSWXSL/uAktYt5gIyBxmcV/aCcs2iHT
 uIoCByue/1sC2td6yBg8l46G63igCbomHl1NypKuRBIYzEasoFpahpuD4j1LRRocKGq/lByb4av
 ngy05TUGEhGB53zkeANNwJ8ngfcw=
X-Google-Smtp-Source: AGHT+IEFh5dmE/Z4TE7trARY8FQVXS9wZEY0Kqltse8Tmfxk6vkmgmQwoeiwpv3cgTumPC+IOGJdE7QHVp1+GQ8nDMI=
X-Received: by 2002:ac2:4256:0:b0:51a:62ad:461f with SMTP id
 m22-20020ac24256000000b0051a62ad461fmr822588lfl.12.1713456766556; Thu, 18 Apr
 2024 09:12:46 -0700 (PDT)
MIME-Version: 1.0
References: <CALDnm53enki1g6Gqpg1X3SziGC3dZ78RuXPEZAfU6Ze006Vq2A@HIDDEN>
 <86y19ad61t.fsf@HIDDEN>
In-Reply-To: <86y19ad61t.fsf@HIDDEN>
From: =?UTF-8?B?Sm/Do28gVMOhdm9yYQ==?= <joaotavora@HIDDEN>
Date: Thu, 18 Apr 2024 17:12:34 +0100
Message-ID: <CALDnm51TSR-_MhUyBTPgmfVGVbzBpQxkaC0weF1YG22fHAYyJQ@HIDDEN>
Subject: Re: bug#70036 a fix that
To: Eli Zaretskii <eliz@HIDDEN>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable
X-Spam-Score: 0.0 (/)
X-Debbugs-Envelope-To: 70036
Cc: felician.nemeth@HIDDEN, 70036 <at> debbugs.gnu.org, theo@HIDDEN
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -1.0 (-)

On Thu, Apr 18, 2024 at 4:49=E2=80=AFPM Eli Zaretskii <eliz@HIDDEN> wrote:
>
> > From: Jo=C3=A3o T=C3=A1vora <joaotavora@HIDDEN>
> > Date: Thu, 18 Apr 2024 16:32:33 +0100
> > Cc: Eli Zaretskii <eliz@HIDDEN>, 70036 <at> debbugs.gnu.org
> >
> > So I've read up on the bug report and I had a close look at the Eglot
> > usage profiles (not the micro-benchmarks, those are reasonably
> > irrelevant in what concerns Eglot).  I see these kinds of things in
> > Theodor's profiles
> >
> >           18   8%           - eglot--TextDocumentPositionParams
> >           18   8%            - eglot--TextDocumentIdentifier
> >           18   8%             - eglot--path-to-uri
> >           15   7%              - file-truename
> >           14   6%               - file-truename
> >           14   6%                - file-truename
> >           11   5%                 - file-truename
> >           11   5%                  - file-truename
> >           11   5%                   - file-truename
> >           10   4%                    - file-truename
> >           10   4%                     - file-truename
> >            8   3%                      - file-truename
> >            8   3%                       - file-truename
> >            8   3%                        - file-truename
> >            5   2%                         - file-truename
> >            3   1%                          - file-truename
> >            2   0%                           - file-truename
> >            1   0%                              file-truename
> >
> >
> > I could reproduce this, but never even close to the amount of ~7-8%.
> > Best I could get was 1% and I had to work pretty hard for it.  If I
> > invoke completion or something heavier like that, it completely
> > dominates the profile.
> >
> >           25   1%         - eglot--TextDocumentPositionParams
> >           23   1%          - eglot--TextDocumentIdentifier
> >           23   1%           - eglot-path-to-uri
> >           13   0%            - file-truename
> >           13   0%             - file-truename
> >           13   0%              - file-truename
> >           13   0%                 file-truename
> >
> > Maybe that's because file-truename is a recursive function that becomes
> > slower as the path it's asked to analyse becomes longer (obviously,
> > there can be a symlink at every junction).
>
> Profiles can mislead and they can lie.

Theo's profiles attached to this issue were the best I could find.
If the manner in which they were collected was enough to make a
decision in a certainway, they should be good enough to make a decision
in another way.

But I fully agree we should have a more constrained test case.

> It is much easier to time the
> old and the new code doing the same jobs, and compare the times.

So... that's what I did. As I wrote, I first reproduced (a fraction of)
Theo's findings with the old code (before his patch). Then in the latest
master his patch, added my new patch, and  verified that the newest code
no longer reproduces those findings.

Do you have a concrete idea of what this "job" is?   I could only gather
a moderately useful idea from Theo's profiles, but it wasn't vague
by any means.  It seems his "timer-event-handler" which is usually
doing the work for Eglot's at-point documentation job, is spending
about a quarter of its time in file-truename.  That's typical
when just browsing code with the cursor and reading documentation.

> > If so, I think this simpler patch after my sig is all we need, as it
> > completely clears the profile of any "file-truename".  I have reverted
> > the earlier patch and pushed a patch very similar to the one after my s=
ig.
>
> This new code should also be timed and compared to the other two
> versions, before we make the final decision on this.

Of course.  Let's have Theo do this comparison and perhaps describe
in more detail the conditions in which he collected his profiles




Information forwarded to bug-gnu-emacs@HIDDEN:
bug#70036; Package emacs. Full text available.

Message received at 70036 <at> debbugs.gnu.org:


Received: (at 70036) by debbugs.gnu.org; 18 Apr 2024 16:12:06 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Thu Apr 18 12:12:06 2024
Received: from localhost ([127.0.0.1]:53253 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1rxUMm-0004gs-9H
	for submit <at> debbugs.gnu.org; Thu, 18 Apr 2024 12:12:06 -0400
Received: from out-184.mta0.migadu.com ([2001:41d0:1004:224b::b8]:35550)
 by debbugs.gnu.org with esmtp (Exim 4.84_2)
 (envelope-from <theo@HIDDEN>) id 1rxUMj-0004fe-VY
 for 70036 <at> debbugs.gnu.org; Thu, 18 Apr 2024 12:12:02 -0400
Date: Thu, 18 Apr 2024 18:11:36 +0200
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=thornhill.no;
 s=key1; t=1713456701;
 h=from:from:reply-to:subject:subject:date:date:message-id:message-id:
 to:to:cc:cc:mime-version:mime-version:content-type:content-type:
 content-transfer-encoding:content-transfer-encoding:  in-reply-to:in-reply-to; 
 bh=h+lPC5xsVRxQvADEODA7MGGCnCKkD45OLT5khrq8T2w=;
 b=t24P2wbHPnkuuHPvTVSdyYrHllxGyz38jDHTtEboS0aQmxyxt5n23LYV5ifHO5fehmx5K4
 WSXj/taO3jM7XjzHNsfePEeatojX8Jfbp1PpEywYkGtU54+fnd9cIEkdZUk0bwbi7o6Q00
 NXFhz2mXNHHsMa5zmcarTGGQBooMgToTKTK+A9+YbPhveisI2TaoOlA5qZjYDjTducw+xG
 cgYKXXRX+XhGx8bH2X5/zbTM0wLh8wFZKS2OhfYhI1Wo2WQsskX5FE3J+9uFcC5EreOpsm
 ozDuKEkAKTncs0uHCvGeN9wcLEL7KEdXTO/NsVdI2wCXS2hrTL5+hbQlKDp0Og==
Subject: Re: bug#70036 a fix that
Message-ID: <43de4151-ab68-4214-8691-33f3554feba1@HIDDEN>
X-Android-Message-ID: <43de4151-ab68-4214-8691-33f3554feba1@HIDDEN>
In-Reply-To: <86y19ad61t.fsf@HIDDEN>
X-Report-Abuse: Please report any abuse attempt to abuse@HIDDEN and
 include these headers.
From: Theodor Thornhill <theo@HIDDEN>
To: Eli Zaretskii <eliz@HIDDEN>
Importance: Normal
X-Priority: 3
X-MSMail-Priority: Normal
MIME-Version: 1.0
Content-Type: text/html; charset=utf-8
Content-Transfer-Encoding: base64
X-Migadu-Flow: FLOW_OUT
X-Spam-Score: 0.7 (/)
X-Debbugs-Envelope-To: 70036
Cc: 70036 <at> debbugs.gnu.org, felician.nemeth@HIDDEN,
 =?ISO-8859-1?Q?Jo=E3o_T=E1vora?= <joaotavora@HIDDEN>
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -0.3 (/)

PGRpdiBkaXI9J2F1dG8nPjxkaXY+PGRpdiBjbGFzcz0iZ21haWxfZXh0cmEiPjxkaXYgY2xhc3M9
ImdtYWlsX2V4dHJhIiBkaXI9ImF1dG8iPiZuYnNwO0VsaSBaYXJldHNraWkgJmx0O2VsaXpAZ251
Lm9yZyZndDsgd3JpdGVzOjwvZGl2PjxkaXYgY2xhc3M9ImdtYWlsX2V4dHJhIiBkaXI9ImF1dG8i
PiZuYnNwOzwvZGl2PjxkaXYgY2xhc3M9ImdtYWlsX2V4dHJhIiBkaXI9ImF1dG8iPiZuYnNwOyZn
dDsmZ3Q7IEZyb206IEpvw6NvIFTDoXZvcmEgJmx0O2pvYW90YXZvcmFAZ21haWwuY29tJmd0Ozwv
ZGl2PjxkaXYgY2xhc3M9ImdtYWlsX2V4dHJhIiBkaXI9ImF1dG8iPiZuYnNwOyZndDsmZ3Q7IERh
dGU6IFRodSwgMTggQXByIDIwMjQgMTY6MzI6MzMgKzAxMDA8L2Rpdj48ZGl2IGNsYXNzPSJnbWFp
bF9leHRyYSIgZGlyPSJhdXRvIj4mbmJzcDsmZ3Q7Jmd0OyBDYzogRWxpIFphcmV0c2tpaSAmbHQ7
ZWxpekBnbnUub3JnJmd0OywgNzAwMzZAZGViYnVncy5nbnUub3JnPC9kaXY+PGRpdiBjbGFzcz0i
Z21haWxfZXh0cmEiIGRpcj0iYXV0byI+Jm5ic3A7Jmd0OyZndDsmbmJzcDs8L2Rpdj48ZGl2IGNs
YXNzPSJnbWFpbF9leHRyYSIgZGlyPSJhdXRvIj4mbmJzcDsmZ3Q7Jmd0OyBTbyBJJ3ZlIHJlYWQg
dXAgb24gdGhlIGJ1ZyByZXBvcnQgYW5kIEkgaGFkIGEgY2xvc2UgbG9vayBhdCB0aGUgRWdsb3Q8
L2Rpdj48ZGl2IGNsYXNzPSJnbWFpbF9leHRyYSIgZGlyPSJhdXRvIj4mbmJzcDsmZ3Q7Jmd0OyB1
c2FnZSBwcm9maWxlcyAobm90IHRoZSBtaWNyby1iZW5jaG1hcmtzLCB0aG9zZSBhcmUgcmVhc29u
YWJseTwvZGl2PjxkaXYgY2xhc3M9ImdtYWlsX2V4dHJhIiBkaXI9ImF1dG8iPiZuYnNwOyZndDsm
Z3Q7IGlycmVsZXZhbnQgaW4gd2hhdCBjb25jZXJucyBFZ2xvdCkuJm5ic3A7IEkgc2VlIHRoZXNl
IGtpbmRzIG9mIHRoaW5ncyBpbjwvZGl2PjxkaXYgY2xhc3M9ImdtYWlsX2V4dHJhIiBkaXI9ImF1
dG8iPiZuYnNwOyZndDsmZ3Q7IFRoZW9kb3IncyBwcm9maWxlczwvZGl2PjxkaXYgY2xhc3M9Imdt
YWlsX2V4dHJhIiBkaXI9ImF1dG8iPiZuYnNwOyZndDsmZ3Q7Jm5ic3A7PC9kaXY+PGRpdiBjbGFz
cz0iZ21haWxfZXh0cmEiIGRpcj0iYXV0byI+Jm5ic3A7Jmd0OyZndDsmbmJzcDsgJm5ic3A7ICZu
YnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOzE4Jm5ic3A7ICZuYnNwOzglJm5ic3A7ICZuYnNwOyAm
bmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDstIGVnbG90LS1UZXh0RG9jdW1lbnRQb3NpdGlvblBh
cmFtczwvZGl2PjxkaXYgY2xhc3M9ImdtYWlsX2V4dHJhIiBkaXI9ImF1dG8iPiZuYnNwOyZndDsm
Z3Q7Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsxOCZuYnNwOyAmbmJz
cDs4JSZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7IC0gZWdsb3QtLVRl
eHREb2N1bWVudElkZW50aWZpZXI8L2Rpdj48ZGl2IGNsYXNzPSJnbWFpbF9leHRyYSIgZGlyPSJh
dXRvIj4mbmJzcDsmZ3Q7Jmd0OyZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5i
c3A7MTgmbmJzcDsgJm5ic3A7OCUmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZu
YnNwOyAmbmJzcDstIGVnbG90LS1wYXRoLXRvLXVyaTwvZGl2PjxkaXYgY2xhc3M9ImdtYWlsX2V4
dHJhIiBkaXI9ImF1dG8iPiZuYnNwOyZndDsmZ3Q7Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7
ICZuYnNwOyAmbmJzcDsxNSZuYnNwOyAmbmJzcDs3JSZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNw
OyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAtIGZpbGUtdHJ1ZW5hbWU8L2Rpdj48ZGl2IGNsYXNzPSJn
bWFpbF9leHRyYSIgZGlyPSJhdXRvIj4mbmJzcDsmZ3Q7Jmd0OyZuYnNwOyAmbmJzcDsgJm5ic3A7
ICZuYnNwOyAmbmJzcDsgJm5ic3A7MTQmbmJzcDsgJm5ic3A7NiUmbmJzcDsgJm5ic3A7ICZuYnNw
OyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7LSBmaWxlLXRydWVuYW1lPC9kaXY+
PGRpdiBjbGFzcz0iZ21haWxfZXh0cmEiIGRpcj0iYXV0byI+Jm5ic3A7Jmd0OyZndDsmbmJzcDsg
Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOzE0Jm5ic3A7ICZuYnNwOzYlJm5ic3A7
ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAtIGZpbGUt
dHJ1ZW5hbWU8L2Rpdj48ZGl2IGNsYXNzPSJnbWFpbF9leHRyYSIgZGlyPSJhdXRvIj4mbmJzcDsm
Z3Q7Jmd0OyZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7MTEmbmJzcDsg
Jm5ic3A7NSUmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsg
Jm5ic3A7ICZuYnNwOy0gZmlsZS10cnVlbmFtZTwvZGl2PjxkaXYgY2xhc3M9ImdtYWlsX2V4dHJh
IiBkaXI9ImF1dG8iPiZuYnNwOyZndDsmZ3Q7Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZu
YnNwOyAmbmJzcDsxMSZuYnNwOyAmbmJzcDs1JSZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAm
bmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7IC0gZmlsZS10cnVlbmFtZTwvZGl2Pjxk
aXYgY2xhc3M9ImdtYWlsX2V4dHJhIiBkaXI9ImF1dG8iPiZuYnNwOyZndDsmZ3Q7Jm5ic3A7ICZu
YnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsxMSZuYnNwOyAmbmJzcDs1JSZuYnNwOyAm
bmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZu
YnNwOy0gZmlsZS10cnVlbmFtZTwvZGl2PjxkaXYgY2xhc3M9ImdtYWlsX2V4dHJhIiBkaXI9ImF1
dG8iPiZuYnNwOyZndDsmZ3Q7Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJz
cDsxMCZuYnNwOyAmbmJzcDs0JSZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5i
c3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAtIGZpbGUtdHJ1ZW5hbWU8L2Rpdj48ZGl2
IGNsYXNzPSJnbWFpbF9leHRyYSIgZGlyPSJhdXRvIj4mbmJzcDsmZ3Q7Jmd0OyZuYnNwOyAmbmJz
cDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7MTAmbmJzcDsgJm5ic3A7NCUmbmJzcDsgJm5i
c3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJz
cDsgJm5ic3A7LSBmaWxlLXRydWVuYW1lPC9kaXY+PGRpdiBjbGFzcz0iZ21haWxfZXh0cmEiIGRp
cj0iYXV0byI+Jm5ic3A7Jmd0OyZndDsmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7
ICZuYnNwOyA4Jm5ic3A7ICZuYnNwOzMlJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNw
OyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAtIGZpbGUtdHJ1ZW5h
bWU8L2Rpdj48ZGl2IGNsYXNzPSJnbWFpbF9leHRyYSIgZGlyPSJhdXRvIj4mbmJzcDsmZ3Q7Jmd0
OyZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7IDgmbmJzcDsgJm5ic3A7
MyUmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7
ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOy0gZmlsZS10cnVlbmFtZTwvZGl2PjxkaXYgY2xh
c3M9ImdtYWlsX2V4dHJhIiBkaXI9ImF1dG8iPiZuYnNwOyZndDsmZ3Q7Jm5ic3A7ICZuYnNwOyAm
bmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgOCZuYnNwOyAmbmJzcDszJSZuYnNwOyAmbmJzcDsg
Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAm
bmJzcDsgJm5ic3A7IC0gZmlsZS10cnVlbmFtZTwvZGl2PjxkaXYgY2xhc3M9ImdtYWlsX2V4dHJh
IiBkaXI9ImF1dG8iPiZuYnNwOyZndDsmZ3Q7Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZu
YnNwOyAmbmJzcDsgNSZuYnNwOyAmbmJzcDsyJSZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAm
bmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZu
YnNwOy0gZmlsZS10cnVlbmFtZTwvZGl2PjxkaXYgY2xhc3M9ImdtYWlsX2V4dHJhIiBkaXI9ImF1
dG8iPiZuYnNwOyZndDsmZ3Q7Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJz
cDsgMyZuYnNwOyAmbmJzcDsxJSZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5i
c3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAtIGZp
bGUtdHJ1ZW5hbWU8L2Rpdj48ZGl2IGNsYXNzPSJnbWFpbF9leHRyYSIgZGlyPSJhdXRvIj4mbmJz
cDsmZ3Q7Jmd0OyZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7IDImbmJz
cDsgJm5ic3A7MCUmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJz
cDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7LSBmaWxl
LXRydWVuYW1lPC9kaXY+PGRpdiBjbGFzcz0iZ21haWxfZXh0cmEiIGRpcj0iYXV0byI+Jm5ic3A7
Jmd0OyZndDsmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAxJm5ic3A7
ICZuYnNwOzAlJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7
ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsg
ZmlsZS10cnVlbmFtZTwvZGl2PjxkaXYgY2xhc3M9ImdtYWlsX2V4dHJhIiBkaXI9ImF1dG8iPiZu
YnNwOyZndDsmZ3Q7Jm5ic3A7PC9kaXY+PGRpdiBjbGFzcz0iZ21haWxfZXh0cmEiIGRpcj0iYXV0
byI+Jm5ic3A7Jmd0OyZndDsmbmJzcDs8L2Rpdj48ZGl2IGNsYXNzPSJnbWFpbF9leHRyYSIgZGly
PSJhdXRvIj4mbmJzcDsmZ3Q7Jmd0OyBJIGNvdWxkIHJlcHJvZHVjZSB0aGlzLCBidXQgbmV2ZXIg
ZXZlbiBjbG9zZSB0byB0aGUgYW1vdW50IG9mIH43LTglLjwvZGl2PjxkaXYgY2xhc3M9ImdtYWls
X2V4dHJhIiBkaXI9ImF1dG8iPiZuYnNwOyZndDsmZ3Q7IEJlc3QgSSBjb3VsZCBnZXQgd2FzIDEl
IGFuZCBJIGhhZCB0byB3b3JrIHByZXR0eSBoYXJkIGZvciBpdC4mbmJzcDsgSWYgSTwvZGl2Pjxk
aXYgY2xhc3M9ImdtYWlsX2V4dHJhIiBkaXI9ImF1dG8iPiZuYnNwOyZndDsmZ3Q7IGludm9rZSBj
b21wbGV0aW9uIG9yIHNvbWV0aGluZyBoZWF2aWVyIGxpa2UgdGhhdCwgaXQgY29tcGxldGVseTwv
ZGl2PjxkaXYgY2xhc3M9ImdtYWlsX2V4dHJhIiBkaXI9ImF1dG8iPiZuYnNwOyZndDsmZ3Q7IGRv
bWluYXRlcyB0aGUgcHJvZmlsZS48L2Rpdj48ZGl2IGNsYXNzPSJnbWFpbF9leHRyYSIgZGlyPSJh
dXRvIj4mbmJzcDsmZ3Q7Jmd0OyZuYnNwOzwvZGl2PjxkaXYgY2xhc3M9ImdtYWlsX2V4dHJhIiBk
aXI9ImF1dG8iPiZuYnNwOyZndDsmZ3Q7Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNw
OyAmbmJzcDsyNSZuYnNwOyAmbmJzcDsxJSZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJz
cDstIGVnbG90LS1UZXh0RG9jdW1lbnRQb3NpdGlvblBhcmFtczwvZGl2PjxkaXYgY2xhc3M9Imdt
YWlsX2V4dHJhIiBkaXI9ImF1dG8iPiZuYnNwOyZndDsmZ3Q7Jm5ic3A7ICZuYnNwOyAmbmJzcDsg
Jm5ic3A7ICZuYnNwOyAmbmJzcDsyMyZuYnNwOyAmbmJzcDsxJSZuYnNwOyAmbmJzcDsgJm5ic3A7
ICZuYnNwOyAmbmJzcDsgLSBlZ2xvdC0tVGV4dERvY3VtZW50SWRlbnRpZmllcjwvZGl2PjxkaXYg
Y2xhc3M9ImdtYWlsX2V4dHJhIiBkaXI9ImF1dG8iPiZuYnNwOyZndDsmZ3Q7Jm5ic3A7ICZuYnNw
OyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsyMyZuYnNwOyAmbmJzcDsxJSZuYnNwOyAmbmJz
cDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7LSBlZ2xvdC1wYXRoLXRvLXVyaTwvZGl2Pjxk
aXYgY2xhc3M9ImdtYWlsX2V4dHJhIiBkaXI9ImF1dG8iPiZuYnNwOyZndDsmZ3Q7Jm5ic3A7ICZu
YnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsxMyZuYnNwOyAmbmJzcDswJSZuYnNwOyAm
bmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7IC0gZmlsZS10cnVlbmFtZTwvZGl2Pjxk
aXYgY2xhc3M9ImdtYWlsX2V4dHJhIiBkaXI9ImF1dG8iPiZuYnNwOyZndDsmZ3Q7Jm5ic3A7ICZu
YnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsxMyZuYnNwOyAmbmJzcDswJSZuYnNwOyAm
bmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOy0gZmlsZS10cnVlbmFtZTwv
ZGl2PjxkaXYgY2xhc3M9ImdtYWlsX2V4dHJhIiBkaXI9ImF1dG8iPiZuYnNwOyZndDsmZ3Q7Jm5i
c3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsxMyZuYnNwOyAmbmJzcDswJSZu
YnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAtIGZpbGUtdHJ1
ZW5hbWU8L2Rpdj48ZGl2IGNsYXNzPSJnbWFpbF9leHRyYSIgZGlyPSJhdXRvIj4mbmJzcDsmZ3Q7
Jmd0OyZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7MTMmbmJzcDsgJm5i
c3A7MCUmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5i
c3A7ICZuYnNwO2ZpbGUtdHJ1ZW5hbWU8L2Rpdj48ZGl2IGNsYXNzPSJnbWFpbF9leHRyYSIgZGly
PSJhdXRvIj4mbmJzcDsmZ3Q7Jmd0OyZuYnNwOzwvZGl2PjxkaXYgY2xhc3M9ImdtYWlsX2V4dHJh
IiBkaXI9ImF1dG8iPiZuYnNwOyZndDsmZ3Q7IE1heWJlIHRoYXQncyBiZWNhdXNlIGZpbGUtdHJ1
ZW5hbWUgaXMgYSByZWN1cnNpdmUgZnVuY3Rpb24gdGhhdCBiZWNvbWVzPC9kaXY+PGRpdiBjbGFz
cz0iZ21haWxfZXh0cmEiIGRpcj0iYXV0byI+Jm5ic3A7Jmd0OyZndDsgc2xvd2VyIGFzIHRoZSBw
YXRoIGl0J3MgYXNrZWQgdG8gYW5hbHlzZSBiZWNvbWVzIGxvbmdlciAob2J2aW91c2x5LDwvZGl2
PjxkaXYgY2xhc3M9ImdtYWlsX2V4dHJhIiBkaXI9ImF1dG8iPiZuYnNwOyZndDsmZ3Q7IHRoZXJl
IGNhbiBiZSBhIHN5bWxpbmsgYXQgZXZlcnkganVuY3Rpb24pLjwvZGl2PjxkaXYgY2xhc3M9Imdt
YWlsX2V4dHJhIiBkaXI9ImF1dG8iPiZuYnNwOyZndDs8L2Rpdj48ZGl2IGNsYXNzPSJnbWFpbF9l
eHRyYSIgZGlyPSJhdXRvIj4mbmJzcDsmZ3Q7IFByb2ZpbGVzIGNhbiBtaXNsZWFkIGFuZCB0aGV5
IGNhbiBsaWUuJm5ic3A7IEl0IGlzIG11Y2ggZWFzaWVyIHRvIHRpbWUgdGhlPC9kaXY+PGRpdiBj
bGFzcz0iZ21haWxfZXh0cmEiIGRpcj0iYXV0byI+Jm5ic3A7Jmd0OyBvbGQgYW5kIHRoZSBuZXcg
Y29kZSBkb2luZyB0aGUgc2FtZSBqb2JzLCBhbmQgY29tcGFyZSB0aGUgdGltZXMuPC9kaXY+PGRp
diBjbGFzcz0iZ21haWxfZXh0cmEiIGRpcj0iYXV0byI+Jm5ic3A7Jmd0OzwvZGl2PjxkaXYgY2xh
c3M9ImdtYWlsX2V4dHJhIiBkaXI9ImF1dG8iPiZuYnNwOyZndDsmZ3Q7IElmIHNvLCBJIHRoaW5r
IHRoaXMgc2ltcGxlciBwYXRjaCBhZnRlciBteSBzaWcgaXMgYWxsIHdlIG5lZWQsIGFzIGl0PC9k
aXY+PGRpdiBjbGFzcz0iZ21haWxfZXh0cmEiIGRpcj0iYXV0byI+Jm5ic3A7Jmd0OyZndDsgY29t
cGxldGVseSBjbGVhcnMgdGhlIHByb2ZpbGUgb2YgYW55ICJmaWxlLXRydWVuYW1lIi4mbmJzcDsg
SSBoYXZlIHJldmVydGVkPC9kaXY+PGRpdiBjbGFzcz0iZ21haWxfZXh0cmEiIGRpcj0iYXV0byI+
Jm5ic3A7Jmd0OyZndDsgdGhlIGVhcmxpZXIgcGF0Y2ggYW5kIHB1c2hlZCBhIHBhdGNoIHZlcnkg
c2ltaWxhciB0byB0aGUgb25lIGFmdGVyIG15IHNpZy48L2Rpdj48ZGl2IGNsYXNzPSJnbWFpbF9l
eHRyYSIgZGlyPSJhdXRvIj4mbmJzcDs8L2Rpdj48ZGl2IGNsYXNzPSJnbWFpbF9leHRyYSIgZGly
PSJhdXRvIj4mbmJzcDtUaGF0J3MgdW5mb3J0dW5hdGUuPC9kaXY+PGRpdiBjbGFzcz0iZ21haWxf
ZXh0cmEiIGRpcj0iYXV0byI+Jm5ic3A7PC9kaXY+PGRpdiBjbGFzcz0iZ21haWxfZXh0cmEiIGRp
cj0iYXV0byI+Jm5ic3A7Jmd0OzwvZGl2PjxkaXYgY2xhc3M9ImdtYWlsX2V4dHJhIiBkaXI9ImF1
dG8iPiZuYnNwOyZndDsgVGhpcyBuZXcgY29kZSBzaG91bGQgYWxzbyBiZSB0aW1lZCBhbmQgY29t
cGFyZWQgdG8gdGhlIG90aGVyIHR3bzwvZGl2PjxkaXYgY2xhc3M9ImdtYWlsX2V4dHJhIiBkaXI9
ImF1dG8iPiZuYnNwOyZndDsgdmVyc2lvbnMsIGJlZm9yZSB3ZSBtYWtlIHRoZSBmaW5hbCBkZWNp
c2lvbiBvbiB0aGlzLjwvZGl2PjxkaXYgY2xhc3M9ImdtYWlsX2V4dHJhIiBkaXI9ImF1dG8iPiZu
YnNwOzwvZGl2PjxkaXYgY2xhc3M9ImdtYWlsX2V4dHJhIiBkaXI9ImF1dG8iPiZuYnNwOzwvZGl2
PjxkaXYgY2xhc3M9ImdtYWlsX2V4dHJhIiBkaXI9ImF1dG8iPiZuYnNwO1RoaXMgaXMgYSB2ZXJ5
IHVuZm9ydHVuYXRlIGNoYW5nZS4gVGhpcyBjb21wbGV0ZWx5IG1pc3NlcyB0aGUgcG9pbnQgYW5k
PC9kaXY+PGRpdiBjbGFzcz0iZ21haWxfZXh0cmEiIGRpcj0iYXV0byI+Jm5ic3A7cmV2ZXJ0cyBh
bnkgcGVyZiBnYWlucyBmcm9tIG15IHByZXZpb3VzIHBhdGNoLi4uIEkgdGhpbmsgeW91cjwvZGl2
PjxkaXYgY2xhc3M9ImdtYWlsX2V4dHJhIiBkaXI9ImF1dG8iPiZuYnNwO2NvbmNsdXNpb25zIGFy
ZSB0b28gcXVpY2ssIGFuZCBhY3Rpb25zIGxpa2V3aXNlLjwvZGl2PjxkaXYgY2xhc3M9ImdtYWls
X2V4dHJhIiBkaXI9ImF1dG8iPiZuYnNwOzwvZGl2PjxkaXYgY2xhc3M9ImdtYWlsX2V4dHJhIiBk
aXI9ImF1dG8iPiZuYnNwO0knZCBhcmd1ZSB0aGF0IGxvbmcgcGF0aHMgYXJlIGEgd2F5IG1vcmUg
Y29tbW9uIG9jY3VycmVuY2UgdGhhbjwvZGl2PjxkaXYgY2xhc3M9ImdtYWlsX2V4dHJhIiBkaXI9
ImF1dG8iPiZuYnNwO3N5bWxpbmtpbmcsIGFuZCB0aGUgcGxhY2VzIHlvdSB0b3VjaGVkIGluIHlv
dXIgImJldHRlciB3YXkiIGlnbm9yZXMgdGhlPC9kaXY+PGRpdiBjbGFzcz0iZ21haWxfZXh0cmEi
IGRpcj0iYXV0byI+Jm5ic3A7cGVyZm9ybWFuY2UgY3JpdGljYWwgcGFydHMuPC9kaXY+PGRpdiBj
bGFzcz0iZ21haWxfZXh0cmEiIGRpcj0iYXV0byI+Jm5ic3A7PC9kaXY+PGRpdiBjbGFzcz0iZ21h
aWxfZXh0cmEiIGRpcj0iYXV0byI+Jm5ic3A7VGhlIGZ1bmN0aW9uIHlvdSBhcmUgc3VnZ2VzdGlu
ZyBpc24ndCB0aGUgaG90c3BvdC4gTW9zdCBub3RhYmxlPC9kaXY+PGRpdiBjbGFzcz0iZ21haWxf
ZXh0cmEiIGRpcj0iYXV0byI+Jm5ic3A7cHVibGlzaERpYWdub3N0aWNzIGlzLCB3aGljaCBub3cg
aXMga2lsbGVkIGFnYWluLjwvZGl2PjxkaXYgY2xhc3M9ImdtYWlsX2V4dHJhIiBkaXI9ImF1dG8i
PiZuYnNwOzwvZGl2PjxkaXYgY2xhc3M9ImdtYWlsX2V4dHJhIiBkaXI9ImF1dG8iPiZuYnNwO1Ro
ZW88L2Rpdj48L2Rpdj48L2Rpdj48L2Rpdj4=





Information forwarded to bug-gnu-emacs@HIDDEN:
bug#70036; Package emacs. Full text available.

Message received at 70036 <at> debbugs.gnu.org:


Received: (at 70036) by debbugs.gnu.org; 18 Apr 2024 15:50:18 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Thu Apr 18 11:50:18 2024
Received: from localhost ([127.0.0.1]:53155 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1rxU1g-00022n-7l
	for submit <at> debbugs.gnu.org; Thu, 18 Apr 2024 11:50:18 -0400
Received: from eggs.gnu.org ([2001:470:142:3::10]:48974)
 by debbugs.gnu.org with esmtp (Exim 4.84_2)
 (envelope-from <eliz@HIDDEN>) id 1rxU1d-000215-CD
 for 70036 <at> debbugs.gnu.org; Thu, 18 Apr 2024 11:50:14 -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 <eliz@HIDDEN>)
 id 1rxU1K-0002WM-4g; Thu, 18 Apr 2024 11:49:54 -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=+iG++8JR90pwTuukiBDYtteyQtuSoEo77Q6v1ufh5Fg=; b=UF9at7gBZBiT2tfwdCKt
 b24ZMBK8u2saS2rwJ+kFINecfIdhdqx4ju3kmKVQfiQVXJ2lz8za9N8NK833VNc/Zi3nF7U3yVNG5
 qX4dj4qzFuWdifa9OTi3i5TXsI2sNT1CVcHF46/tqEdT5v0EnTc6bXCaNSgE/GZbYXrq4SzBL4Flf
 HO6IexAv/wn1lrebpzR+lSQDMNicWaOqyVAlrqXILDvhWNALNP+Zdam9yjnnXPI4HcQUZ81kKOvIU
 cF2SUj47/3woqmQWEaEscfgPTVhx+9T2wKl6YQb53iHw+4VJlDMlHsDPW/QMgSrOZPiOlbnEfUbHP
 dEyZpBAe9yqzGw==;
Date: Thu, 18 Apr 2024 18:49:50 +0300
Message-Id: <86y19ad61t.fsf@HIDDEN>
From: Eli Zaretskii <eliz@HIDDEN>
To: =?utf-8?B?Sm/Do28gVMOhdm9yYQ==?= <joaotavora@HIDDEN>
In-Reply-To: <CALDnm53enki1g6Gqpg1X3SziGC3dZ78RuXPEZAfU6Ze006Vq2A@HIDDEN>
 (message from =?utf-8?B?Sm/Do28gVMOhdm9yYQ==?= on Thu, 18 Apr 2024 16:32:33
 +0100)
Subject: Re: bug#70036 a fix that
References: <CALDnm53enki1g6Gqpg1X3SziGC3dZ78RuXPEZAfU6Ze006Vq2A@HIDDEN>
MIME-version: 1.0
Content-type: text/plain; charset=utf-8
Content-Transfer-Encoding: 8bit
X-Spam-Score: -2.3 (--)
X-Debbugs-Envelope-To: 70036
Cc: felician.nemeth@HIDDEN, 70036 <at> debbugs.gnu.org, theo@HIDDEN
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -3.3 (---)

> From: João Távora <joaotavora@HIDDEN>
> Date: Thu, 18 Apr 2024 16:32:33 +0100
> Cc: Eli Zaretskii <eliz@HIDDEN>, 70036 <at> debbugs.gnu.org
> 
> So I've read up on the bug report and I had a close look at the Eglot
> usage profiles (not the micro-benchmarks, those are reasonably
> irrelevant in what concerns Eglot).  I see these kinds of things in
> Theodor's profiles
> 
>           18   8%           - eglot--TextDocumentPositionParams
>           18   8%            - eglot--TextDocumentIdentifier
>           18   8%             - eglot--path-to-uri
>           15   7%              - file-truename
>           14   6%               - file-truename
>           14   6%                - file-truename
>           11   5%                 - file-truename
>           11   5%                  - file-truename
>           11   5%                   - file-truename
>           10   4%                    - file-truename
>           10   4%                     - file-truename
>            8   3%                      - file-truename
>            8   3%                       - file-truename
>            8   3%                        - file-truename
>            5   2%                         - file-truename
>            3   1%                          - file-truename
>            2   0%                           - file-truename
>            1   0%                              file-truename
> 
> 
> I could reproduce this, but never even close to the amount of ~7-8%.
> Best I could get was 1% and I had to work pretty hard for it.  If I
> invoke completion or something heavier like that, it completely
> dominates the profile.
> 
>           25   1%         - eglot--TextDocumentPositionParams
>           23   1%          - eglot--TextDocumentIdentifier
>           23   1%           - eglot-path-to-uri
>           13   0%            - file-truename
>           13   0%             - file-truename
>           13   0%              - file-truename
>           13   0%                 file-truename
> 
> Maybe that's because file-truename is a recursive function that becomes
> slower as the path it's asked to analyse becomes longer (obviously,
> there can be a symlink at every junction).

Profiles can mislead and they can lie.  It is much easier to time the
old and the new code doing the same jobs, and compare the times.

> If so, I think this simpler patch after my sig is all we need, as it
> completely clears the profile of any "file-truename".  I have reverted
> the earlier patch and pushed a patch very similar to the one after my sig.

This new code should also be timed and compared to the other two
versions, before we make the final decision on this.




Information forwarded to bug-gnu-emacs@HIDDEN:
bug#70036; Package emacs. Full text available.

Message received at 70036 <at> debbugs.gnu.org:


Received: (at 70036) by debbugs.gnu.org; 18 Apr 2024 15:46:12 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Thu Apr 18 11:46:11 2024
Received: from localhost ([127.0.0.1]:53134 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1rxTxi-0001Tv-HB
	for submit <at> debbugs.gnu.org; Thu, 18 Apr 2024 11:46:11 -0400
Received: from mail-lj1-x234.google.com ([2a00:1450:4864:20::234]:54341)
 by debbugs.gnu.org with esmtp (Exim 4.84_2)
 (envelope-from <joaotavora@HIDDEN>) id 1rxTxg-0001St-DU
 for 70036 <at> debbugs.gnu.org; Thu, 18 Apr 2024 11:46:09 -0400
Received: by mail-lj1-x234.google.com with SMTP id
 38308e7fff4ca-2d895138ce6so15371251fa.0
 for <70036 <at> debbugs.gnu.org>; Thu, 18 Apr 2024 08:45:54 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=gmail.com; s=20230601; t=1713455148; x=1714059948; darn=debbugs.gnu.org;
 h=content-transfer-encoding:cc:to:subject:message-id:date:from
 :in-reply-to:references:mime-version:from:to:cc:subject:date
 :message-id:reply-to;
 bh=hxrgJNb835lwtGWuQpuJWhcT2Ob68O7ydGIg7meJqVw=;
 b=Rw2bOA5eh5Q5gVY48ksN52wkXLHiMB6umE5WUs/PCa0WpHNpiOji3BPKlRbFqrnqb9
 gBTEw61yWX31btMXr6DyCuYCBxB7Fb8t0+q414DO2upIDU5TeYrwHMM/FJZ3G6d8xQq1
 HHjdMapKN/yEUKU43IeqMp1CnhmZ0R0mqOts/EEnRiRv45uPf2uVDH6ia6LU7SsqOreX
 X9Lhrm/0ZMh4j0s1qnaIYD00hqVD/qfBZmbnVUet7lqVlH8SzX6OplVWb35Tb5Po1iLa
 2K9PaddM5fehWd24BKmHAfkOtZMtPG4rbqQjn0rDn8K0vEU6MH/3GLBwXULje2dnSDkk
 vUEA==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=1e100.net; s=20230601; t=1713455148; x=1714059948;
 h=content-transfer-encoding:cc:to:subject:message-id:date:from
 :in-reply-to:references:mime-version:x-gm-message-state:from:to:cc
 :subject:date:message-id:reply-to;
 bh=hxrgJNb835lwtGWuQpuJWhcT2Ob68O7ydGIg7meJqVw=;
 b=QZrqb5wD51dcsNuPyohCifRLDsEIO9cc3yLTtL1RsEP+EnM6xfPJVOLkyB8xzUomrn
 iu6qkyyNKnbvirYLByoB0C2jK5Vyx87BnL10D2/wEt6w9NxC9Ec/hrK9OqkCLIif+6Ke
 W+r1NoaQb1cYUSd8Bo39giVBpTY7Fy0kHSQQEgRZDNkHbsXiR6+GrlmD31vzCBnndG/R
 3+CPKv/HqnpINuKKQY3+VxyxBY4rqqm0XBhymYtXgwq2X1pl8Z6o1Wtay/2atmUbhxHf
 BoVBrrSTqH6leGaoyR5EuR6D/RGERWVoJphimBM0HQEYqmdUV4Me8z3RGcReCwBFVG7x
 /djg==
X-Forwarded-Encrypted: i=1;
 AJvYcCVanjJEp0KCwkVfhPDirfxgvpSuHxPCQvV6AYf4e73BjRLyQqw8AJS/YDFl1xuFp6kDhF3NoLi3dhZa/M7ZrsYGYpJShw4=
X-Gm-Message-State: AOJu0YxE13v7NoOEmKUiBfvwp5lHsxS2PiWc8/5KfiBF6TybwDsEeM7u
 FrFuYBv6UwW655ylvCwF58GqjOvXjhLdwIOF8KMmVqj4LhTmw08rUL1FPrshSryyqYWzRGeQi49
 K5aYedNSlohhQ1wqtf3pU4EW0AjTgKw==
X-Google-Smtp-Source: AGHT+IEVUJyZWJPSXZM2tPUZjrbK28QCTf9GB4ZnHD8RAQ1SYR+jr2950OKzUfyaG44915dkM/muvoJyPvqjjk6Qg5U=
X-Received: by 2002:a2e:720d:0:b0:2d8:f3b:d026 with SMTP id
 n13-20020a2e720d000000b002d80f3bd026mr2105937ljc.14.1713455148260; Thu, 18
 Apr 2024 08:45:48 -0700 (PDT)
MIME-Version: 1.0
References: <87le63xzjt.fsf@HIDDEN>
 <CALDnm53enki1g6Gqpg1X3SziGC3dZ78RuXPEZAfU6Ze006Vq2A@HIDDEN>
 <87zftq65n5.fsf@localhost>
In-Reply-To: <87zftq65n5.fsf@localhost>
From: =?UTF-8?B?Sm/Do28gVMOhdm9yYQ==?= <joaotavora@HIDDEN>
Date: Thu, 18 Apr 2024 16:45:37 +0100
Message-ID: <CALDnm50cqP9SO1RxRk3g4A2B-PPmFPyoi4QeQi5r9hHkPY4zDw@HIDDEN>
Subject: Re: bug#70036: a fix that
To: Ihor Radchenko <yantar92@HIDDEN>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable
X-Spam-Score: 0.0 (/)
X-Debbugs-Envelope-To: 70036
Cc: Felician Nemeth <felician.nemeth@HIDDEN>, Eli Zaretskii <eliz@HIDDEN>,
 70036 <at> debbugs.gnu.org, Theodor Thornhill <theo@HIDDEN>
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -1.0 (-)

On Thu, Apr 18, 2024 at 4:39=E2=80=AFPM Ihor Radchenko <yantar92@HIDDEN=
> wrote:
>
> Jo=C3=A3o T=C3=A1vora <joaotavora@HIDDEN> writes:
>
> >           18   8%           - eglot--TextDocumentPositionParams
> > ...
> >           25   1%         - eglot--TextDocumentPositionParams
> >           23   1%          - eglot--TextDocumentIdentifier
> >           23   1%           - eglot-path-to-uri
> >           13   0%            - file-truename
>
> Be aware that 13 is roughly in milliseconds (with the default value of
> `profiler-sampling-interval').  The numbers you are seeing in this
> profile are close to the "noise" levels.

Correct, and that was precisely my point.  I had to work hard just
to get  these numbers to show on the profile with average-length
pathnames. But it was enough to verify that I apply my caching
patch, they go away completely.

Jo=C3=A3o




Information forwarded to bug-gnu-emacs@HIDDEN:
bug#70036; Package emacs. Full text available.

Message received at 70036 <at> debbugs.gnu.org:


Received: (at 70036) by debbugs.gnu.org; 18 Apr 2024 15:40:18 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Thu Apr 18 11:40:17 2024
Received: from localhost ([127.0.0.1]:53091 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1rxTrz-0000nr-QC
	for submit <at> debbugs.gnu.org; Thu, 18 Apr 2024 11:40:17 -0400
Received: from mout01.posteo.de ([185.67.36.65]:44679)
 by debbugs.gnu.org with esmtp (Exim 4.84_2)
 (envelope-from <yantar92@HIDDEN>) id 1rxTru-0000m7-7C
 for 70036 <at> debbugs.gnu.org; Thu, 18 Apr 2024 11:40:11 -0400
Received: from submission (posteo.de [185.67.36.169]) 
 by mout01.posteo.de (Postfix) with ESMTPS id 7DFD924002B
 for <70036 <at> debbugs.gnu.org>; Thu, 18 Apr 2024 17:39:50 +0200 (CEST)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=posteo.net; s=2017;
 t=1713454790; bh=IdPpCU2UOs8PhVyUIzN8vEoisqsHSXFAdgvEX7y9KGU=;
 h=From:To:Cc:Subject:Date:Message-ID:MIME-Version:Content-Type:
 Content-Transfer-Encoding:From;
 b=pGuO2p4n8kNFlGz4P4ClmJVQ86x08N+EO3rMsgH8aF2g5IacmCdPX+/GJzb3CjjKP
 2QNplRFStLykVBebWkhKXYo+sq8qYucB5ZEamGpP6rinFkGj7XuTW33brejV9K2j+p
 WFtAP4kDFLTcYHnZe3R4MkXLIHSBTSj49jRusYh7uii0oDwFdN+h4K+zY8i7PJwoLE
 Au5Z+Ciir9TUN1wIAKJyvCH8hScP/d09YhIKtT0pqIKkx0t220EDuNJqT/QeDsYUb2
 OKnycaWC7GCOvz/Z3eOdtvWBFaNa2bvB8DAjclLbLpVnkf8vwSLTLvu8Rne/f92WNN
 CqF2f7N3GiHjg==
Received: from customer (localhost [127.0.0.1])
 by submission (posteo.de) with ESMTPSA id 4VL25b5LXzz9rxP;
 Thu, 18 Apr 2024 17:39:47 +0200 (CEST)
From: Ihor Radchenko <yantar92@HIDDEN>
To: =?utf-8?B?Sm/Do28gVMOhdm9yYQ==?= <joaotavora@HIDDEN>
Subject: Re: bug#70036: a fix that
In-Reply-To: <CALDnm53enki1g6Gqpg1X3SziGC3dZ78RuXPEZAfU6Ze006Vq2A@HIDDEN>
References: <87le63xzjt.fsf@HIDDEN>
 <CALDnm53enki1g6Gqpg1X3SziGC3dZ78RuXPEZAfU6Ze006Vq2A@HIDDEN>
Date: Thu, 18 Apr 2024 15:40:30 +0000
Message-ID: <87zftq65n5.fsf@localhost>
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable
X-Spam-Score: -2.3 (--)
X-Debbugs-Envelope-To: 70036
Cc: Felician Nemeth <felician.nemeth@HIDDEN>, Eli Zaretskii <eliz@HIDDEN>,
 70036 <at> debbugs.gnu.org, Theodor Thornhill <theo@HIDDEN>
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -3.3 (---)

Jo=C3=A3o T=C3=A1vora <joaotavora@HIDDEN> writes:

>           18   8%           - eglot--TextDocumentPositionParams
> ...
>           25   1%         - eglot--TextDocumentPositionParams
>           23   1%          - eglot--TextDocumentIdentifier
>           23   1%           - eglot-path-to-uri
>           13   0%            - file-truename

Be aware that 13 is roughly in milliseconds (with the default value of
`profiler-sampling-interval').  The numbers you are seeing in this
profile are close to the "noise" levels.

--=20
Ihor Radchenko // yantar92,
Org mode contributor,
Learn more about Org mode at <https://orgmode.org/>.
Support Org development at <https://liberapay.com/org-mode>,
or support my work at <https://liberapay.com/yantar92>




Information forwarded to bug-gnu-emacs@HIDDEN:
bug#70036; Package emacs. Full text available.

Message received at 70036 <at> debbugs.gnu.org:


Received: (at 70036) by debbugs.gnu.org; 18 Apr 2024 15:40:08 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Thu Apr 18 11:40:08 2024
Received: from localhost ([127.0.0.1]:53087 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1rxTrs-0000mf-9M
	for submit <at> debbugs.gnu.org; Thu, 18 Apr 2024 11:40:08 -0400
Received: from mail-lj1-x230.google.com ([2a00:1450:4864:20::230]:60485)
 by debbugs.gnu.org with esmtp (Exim 4.84_2)
 (envelope-from <joaotavora@HIDDEN>) id 1rxTrp-0000lM-H3
 for 70036 <at> debbugs.gnu.org; Thu, 18 Apr 2024 11:40:06 -0400
Received: by mail-lj1-x230.google.com with SMTP id
 38308e7fff4ca-2d895e2c6efso13566771fa.0
 for <70036 <at> debbugs.gnu.org>; Thu, 18 Apr 2024 08:39:51 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=gmail.com; s=20230601; t=1713454786; x=1714059586; darn=debbugs.gnu.org;
 h=cc:to:subject:message-id:date:from:in-reply-to:references
 :mime-version:from:to:cc:subject:date:message-id:reply-to;
 bh=sJMtDi2js2fTHoGUEGl1rlaSlPfBw9XmWIp5kDzMoxY=;
 b=P9C23X9uMRittzrcQiFDpu1Vsa3OG/TRG5HvcTy+dlQxF6JcebitzWUXhrMsf2WAEq
 LmBW9Ap7Qc2TTtV/nPjtQ8vgL7FvuWjT6gknnPRAO7ZkM6e3id8InAIQSXRYQ/rnkhdx
 ecA06AFuX/1qgGkXzowyKyNStywDbATXfcCXF4Tc3VJD9InmZD8KRRsHwjVVffy/AjX1
 XV5a6vtieIT0Eu4NSrPFcifSwNMe9Qp0WhpzHnhOXqbRdX889euLEDtP3sPwr6T2FMS8
 +a3jklR0l9P/8mggBpOM2pUcGpmR7UvKZKdy9GRHU9RKw+U8KviVon9AHYnsPIvNDRM9
 dofg==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=1e100.net; s=20230601; t=1713454786; x=1714059586;
 h=cc:to:subject:message-id:date:from:in-reply-to:references
 :mime-version:x-gm-message-state:from:to:cc:subject:date:message-id
 :reply-to;
 bh=sJMtDi2js2fTHoGUEGl1rlaSlPfBw9XmWIp5kDzMoxY=;
 b=LPybIbolJXVgonnfF4KDRg++kiuS2BVBDLcRmxypQBIE/HYubstIXmFwSNOO9Hdjem
 fdU4sMZQdnIvLyDono7Mc+WpPOMExukNPVNq+BQw+CE2yAURyDbj3acG1WajxK5U3Bi7
 mjWGL5380Lac9lR8IhMRnMRMaj3s5ckyMk12Q3wPZ1d/HpV9GVTl0fUSS4exLQy57OJB
 iqE/5dvxIc+h61Ml8FRAogro2bKa/jydx02su2dN44ZePdAViUdXIKOw0lzrUIim3JZm
 FISaDphJsP3mn0+6M5c9brFegHxsjogSG5dNkiW+uYO+XVxX3/AaavfoMN4Gltym7wGQ
 Y4Rw==
X-Forwarded-Encrypted: i=1;
 AJvYcCULYMqEwzxpG0RxuuGoyPiPR5nTrg2j9U9omts40e9BLG/HpA1cqigyScbqJAC5BQ7Je3jCB9J78WXBRFHQqg3fdB3llOA=
X-Gm-Message-State: AOJu0YwceXI9/XDiNQ+OsGSlWCL92aR/fnNzF3/aokEPofu5x+UV/6M2
 eD8qmYuZEhDDFGC/qnYLCD/EvziiMAEjOPFoHWEwhsAeSgq+pUrQR5vdURNXVkIq8i5bMIhYPxv
 GGQTGUJtOAsdAtcxfDdKWXObHfX4=
X-Google-Smtp-Source: AGHT+IGn2vzC0U72NZvCNHBybAigPF5XOIxdRYhzN5S7n5baDPuC+qAv1uNysTwMM51l3t/C2BOw2gmEbzDJhCXwMUQ=
X-Received: by 2002:a2e:9346:0:b0:2da:78e:f766 with SMTP id
 m6-20020a2e9346000000b002da078ef766mr1779660ljh.38.1713454785691; Thu, 18 Apr
 2024 08:39:45 -0700 (PDT)
MIME-Version: 1.0
References: <CALDnm53enki1g6Gqpg1X3SziGC3dZ78RuXPEZAfU6Ze006Vq2A@HIDDEN>
In-Reply-To: <CALDnm53enki1g6Gqpg1X3SziGC3dZ78RuXPEZAfU6Ze006Vq2A@HIDDEN>
From: =?UTF-8?B?Sm/Do28gVMOhdm9yYQ==?= <joaotavora@HIDDEN>
Date: Thu, 18 Apr 2024 16:39:34 +0100
Message-ID: <CALDnm53WGGhudxtk7HRFoZ_Gm5EvVtAfZoLjtfH3crV+nYxDFA@HIDDEN>
Subject: Re: bug#70036 a fix that
To: Theodor Thornhill <theo@HIDDEN>,
 Felician Nemeth <felician.nemeth@HIDDEN>
Content-Type: text/plain; charset="UTF-8"
X-Spam-Score: 0.0 (/)
X-Debbugs-Envelope-To: 70036
Cc: Eli Zaretskii <eliz@HIDDEN>, 70036 <at> debbugs.gnu.org
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -1.0 (-)

[Sorry I botched the subject line in my last mail, this is what I
get for multitasking million things.  I meant to call it:

  "a fix that doesn't break existing use cases"]




Information forwarded to bug-gnu-emacs@HIDDEN:
bug#70036; Package emacs. Full text available.

Message received at 70036 <at> debbugs.gnu.org:


Received: (at 70036) by debbugs.gnu.org; 18 Apr 2024 15:33:09 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Thu Apr 18 11:33:08 2024
Received: from localhost ([127.0.0.1]:53057 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1rxTl6-0008Ro-CV
	for submit <at> debbugs.gnu.org; Thu, 18 Apr 2024 11:33:08 -0400
Received: from mail-lj1-x233.google.com ([2a00:1450:4864:20::233]:60736)
 by debbugs.gnu.org with esmtp (Exim 4.84_2)
 (envelope-from <joaotavora@HIDDEN>) id 1rxTl4-0008Qf-8B
 for 70036 <at> debbugs.gnu.org; Thu, 18 Apr 2024 11:33:07 -0400
Received: by mail-lj1-x233.google.com with SMTP id
 38308e7fff4ca-2d094bc2244so15779341fa.1
 for <70036 <at> debbugs.gnu.org>; Thu, 18 Apr 2024 08:32:52 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=gmail.com; s=20230601; t=1713454366; x=1714059166; darn=debbugs.gnu.org;
 h=content-transfer-encoding:cc:to:subject:message-id:date:from
 :mime-version:from:to:cc:subject:date:message-id:reply-to;
 bh=4/QDhALe5ZENiON9OTNnMEj1KPhuZKBcwVJcY+xHJFU=;
 b=cjux4CgaBeTYKBiIM6NGfzZyBRkX4admUJEuleuh7vpxtmPh8GsxuVax3hX6ljMtXu
 Om8U2hkVvgZ9L4ACYWLDj5G8Y2FfKzh+IuflIOPDuTjmhlKB2i8kUmPUF3QaajwvSdiQ
 4N8JOgqAZKsm0SOGzYzzOjRaTelsPdjSaKn8Al36+PvUY48v7CEGtS7S0obN2iS+we2i
 tOxR1Yr/N98sAywmUc7acGmhkazYb2mbmauTX8oxgKBOFjy4hEIk6bgVSom7tChnGA82
 /w+3rO8uszFoGxLdKFnymB3xkAoDuNC8Ue3xO+NgpRRN652LuQy3/mFjYTXEZF6Yd26H
 aCdQ==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=1e100.net; s=20230601; t=1713454366; x=1714059166;
 h=content-transfer-encoding:cc:to:subject:message-id:date:from
 :mime-version:x-gm-message-state:from:to:cc:subject:date:message-id
 :reply-to;
 bh=4/QDhALe5ZENiON9OTNnMEj1KPhuZKBcwVJcY+xHJFU=;
 b=apYwSE5gKHOypTalDHA84K1DKWCGF314wBIeZSfBVwD80kP5JoptoY+vBhRCDNCdPN
 V8CADWwyXC5mPWbfgKjrDHgHEdcTzegeQaV0af9xleIFO1whwluTqFw1Xol0Y3sRebqb
 i0VomBahtRU8AgaT0ojYUyyUXGmr7YpsS86QcNXfogl+yZxzkTDgdkNtPmtPzfPGNQcF
 0Wg8aABPrGwXAWItaCmxI+KewhstQM+XX1wJr/Ah7kwOlZS2z5uwdWVD1Pl5XlCfftMI
 0VJBb7VJh89GrfA0HRpfFpPrLdn7hRMYumIj9XgQoFYKQDTr5AjtoJtudpd57c6J2XyU
 oemQ==
X-Forwarded-Encrypted: i=1;
 AJvYcCWuY4le2iKEGVxQiSVorSj52Hw53BK6nuBTn714O6S7AV7LuyUU6jh3h2yRSgmwaHzN+liu2dKuXVw2bieJm0R2khdUwts=
X-Gm-Message-State: AOJu0YzMBSF1HNpQzUSQsoPdQkg8a4Gi5VNXzW4/Ja7lZM7s63ccg+Ar
 TgG6BB4pYsm/Z/LKWVhLupFb45FDHXbeWWJ3aJsZOlHu9hfYAC20UhWxheGvY0/AmcDM2KPhn6u
 MqBSz60KYQ+WJUtE7/riK9tjEsos=
X-Google-Smtp-Source: AGHT+IFb47EnrRjs7DwM8ssqQud1eUFhmsXogT0wGxRU1m9nh/HPw6+zUYuhfm6Wll61zgO1axOh3cN5avzEtEsUe1U=
X-Received: by 2002:a05:651c:622:b0:2d8:729f:cf3a with SMTP id
 k34-20020a05651c062200b002d8729fcf3amr1579998lje.32.1713454365697; Thu, 18
 Apr 2024 08:32:45 -0700 (PDT)
MIME-Version: 1.0
From: =?UTF-8?B?Sm/Do28gVMOhdm9yYQ==?= <joaotavora@HIDDEN>
Date: Thu, 18 Apr 2024 16:32:33 +0100
Message-ID: <CALDnm53enki1g6Gqpg1X3SziGC3dZ78RuXPEZAfU6Ze006Vq2A@HIDDEN>
Subject: bug#70036 a fix that
To: Theodor Thornhill <theo@HIDDEN>,
 Felician Nemeth <felician.nemeth@HIDDEN>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable
X-Spam-Score: 0.0 (/)
X-Debbugs-Envelope-To: 70036
Cc: Eli Zaretskii <eliz@HIDDEN>, 70036 <at> debbugs.gnu.org
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -1.0 (-)

So I've read up on the bug report and I had a close look at the Eglot
usage profiles (not the micro-benchmarks, those are reasonably
irrelevant in what concerns Eglot).  I see these kinds of things in
Theodor's profiles

          18   8%           - eglot--TextDocumentPositionParams
          18   8%            - eglot--TextDocumentIdentifier
          18   8%             - eglot--path-to-uri
          15   7%              - file-truename
          14   6%               - file-truename
          14   6%                - file-truename
          11   5%                 - file-truename
          11   5%                  - file-truename
          11   5%                   - file-truename
          10   4%                    - file-truename
          10   4%                     - file-truename
           8   3%                      - file-truename
           8   3%                       - file-truename
           8   3%                        - file-truename
           5   2%                         - file-truename
           3   1%                          - file-truename
           2   0%                           - file-truename
           1   0%                              file-truename


I could reproduce this, but never even close to the amount of ~7-8%.
Best I could get was 1% and I had to work pretty hard for it.  If I
invoke completion or something heavier like that, it completely
dominates the profile.

          25   1%         - eglot--TextDocumentPositionParams
          23   1%          - eglot--TextDocumentIdentifier
          23   1%           - eglot-path-to-uri
          13   0%            - file-truename
          13   0%             - file-truename
          13   0%              - file-truename
          13   0%                 file-truename

Maybe that's because file-truename is a recursive function that becomes
slower as the path it's asked to analyse becomes longer (obviously,
there can be a symlink at every junction).

So let's assume for the sake of argument that it's frequent for
users to have very long file names with very many components
or that the 1% overhead on the average path length is a real
performance problem for people.

If so, I think this simpler patch after my sig is all we need, as it
completely clears the profile of any "file-truename".  I have reverted
the earlier patch and pushed a patch very similar to the one after my sig.

I'm interested in more details of exactly what constitutes actual
usage, i.e. what did you do while recording a cpu or mem profile.

As to the symlink-outside-the-project issue that Felici=C3=A1n raised,
I was not aware of that bug.  It seems a separate bug at any rate.

I've also noticed that the Eglot automated tests are failing.
That too is unexpected.  I will have a look at that, too.

Jo=C3=A3o


commit 23d6517b2499089f775640b88958774ac2c91049
Author: Jo=C3=A3o T=C3=A1vora <joaotavora@HIDDEN>
Date:   Thu Apr 18 08:03:10 2024 -0500

    Better way to fix bug#70036

    Cache eglot--cached-tdi per buffer, like we do with some many
    other variables already, to avoid frequent expensive
    recomputation of a value that requires potentially many
    'file-truename' calls.

diff --git a/lisp/progmodes/eglot.el b/lisp/progmodes/eglot.el
index 806265544d6..6196aaff7a3 100644
--- a/lisp/progmodes/eglot.el
+++ b/lisp/progmodes/eglot.el
@@ -2517,12 +2517,17 @@ eglot-handle-request
      (t (setq success :json-false)))
     `(:success ,success)))

+(defvar-local eglot--cached-tdi nil
+  "A cached LSP TextDocumentIdentifier URI string.")
+
 (defun eglot--TextDocumentIdentifier ()
   "Compute TextDocumentIdentifier object for current buffer."
-  `(:uri ,(eglot-path-to-uri (or buffer-file-name
-                                  (ignore-errors
-                                    (buffer-file-name
-                                     (buffer-base-buffer)))))))
+  `(:uri ,(or eglot--cached-tdi
+              (setq eglot--cached-tdi
+                    (eglot-path-to-uri (or buffer-file-name
+                                           (ignore-errors
+                                             (buffer-file-name
+                                              (buffer-base-buffer)))))))))

 (defvar-local eglot--versioned-identifier 0)

--=20
Jo=C3=A3o T=C3=A1vora




Information forwarded to bug-gnu-emacs@HIDDEN:
bug#70036; Package emacs. Full text available.

Message received at 70036 <at> debbugs.gnu.org:


Received: (at 70036) by debbugs.gnu.org; 31 Mar 2024 13:33:04 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Sun Mar 31 09:33:04 2024
Received: from localhost ([127.0.0.1]:46801 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1rqvJ1-0007Pn-Ak
	for submit <at> debbugs.gnu.org; Sun, 31 Mar 2024 09:33:04 -0400
Received: from out-179.mta1.migadu.com ([95.215.58.179]:57584)
 by debbugs.gnu.org with esmtp (Exim 4.84_2)
 (envelope-from <theo@HIDDEN>) id 1rqvIy-0007Ox-96
 for 70036 <at> debbugs.gnu.org; Sun, 31 Mar 2024 09:33:01 -0400
Date: Sun, 31 Mar 2024 15:32:46 +0200
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=thornhill.no;
 s=key1; t=1711891971;
 h=from:from:reply-to:subject:subject:date:date:message-id:message-id:
 to:to:cc:cc:mime-version:mime-version:content-type:content-type:
 content-transfer-encoding:content-transfer-encoding:  in-reply-to:in-reply-to; 
 bh=aZzDzXVg0rckmhNcsNQXp633KkkX9xzyL8qSW9OkQUg=;
 b=ISZaxnRJTvD5iCPV1cDAUT63eV9zUZyFtPcCHWLc2qft71ser4+J8BWTMbt6SgvOfVpsS8
 Z0VHD8LkAxkYSkSY3gBuOb3hHs5/+fDJmUw5c7ZD9IVH72MLh9mvR8FJtioWhPyxy9vO8P
 lBc/kk/LW+ya/KtzyvyPgBRBHj1TEt9Qih2PaPeMHi2ztmXx2V+fuiRDJGRkY2vI4xFSGh
 pOHQnAIbvThYLdwPVFwM0tZOJwNtz6+tS6wyBLPH/JpHrRoc2V3kJ8PUIHMVkaWCcj/svh
 ca0vmjTZqJI62A95LXsfj+Hk7uUeRqxZOdaDvK7OwjAZSpZ4/o/DTBWOx++BaQ==
Subject: Re: bug#70036: 30.0.50; Move file-truename to the C level
Message-ID: <804c3c2f-d537-423d-b82b-4f6bcc2d867f@HIDDEN>
X-Android-Message-ID: <804c3c2f-d537-423d-b82b-4f6bcc2d867f@HIDDEN>
In-Reply-To: <87v852o8yc.fsf@HIDDEN>
X-Report-Abuse: Please report any abuse attempt to abuse@HIDDEN and
 include these headers.
From: Theodor Thornhill <theo@HIDDEN>
To: Felician Nemeth <felician.nemeth@HIDDEN>
Importance: Normal
X-Priority: 3
X-MSMail-Priority: Normal
MIME-Version: 1.0
Content-Type: text/html; charset=utf-8
Content-Transfer-Encoding: base64
X-Migadu-Flow: FLOW_OUT
X-Spam-Score: 0.7 (/)
X-Debbugs-Envelope-To: 70036
Cc: Eli Zaretskii <eliz@HIDDEN>, 70036 <at> debbugs.gnu.org
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -0.3 (/)

PGRpdiBkaXI9J2F1dG8nPjxkaXY+PGJyPjxkaXYgY2xhc3M9ImdtYWlsX2V4dHJhIj48YnI+PGRp
diBjbGFzcz0iZ21haWxfcXVvdGUiPk9uIE1hciAzMSwgMjAyNCAxNDo1NywgRmVsaWNpYW4gTmVt
ZXRoICZsdDtmZWxpY2lhbi5uZW1ldGhAZ21haWwuY29tJmd0OyB3cm90ZTo8YnIgdHlwZT0iYXR0
cmlidXRpb24iPjxibG9ja3F1b3RlIGNsYXNzPSJxdW90ZSIgc3R5bGU9Im1hcmdpbjowIDAgMCAu
OGV4O2JvcmRlci1sZWZ0OjFweCAjY2NjIHNvbGlkO3BhZGRpbmctbGVmdDoxZXgiPjxwIGRpcj0i
bHRyIj5FbGkgWmFyZXRza2lpICZsdDtlbGl6QGdudS5vcmcmZ3Q7IHdyaXRlczoKPGJyPgoKPGJy
PgomZ3Q7Jmd0OyBGcm9tOiBGZWxpY2lhbiBOZW1ldGggJmx0O2ZlbGljaWFuLm5lbWV0aEBnbWFp
bC5jb20mZ3Q7Cjxicj4KJmd0OyZndDsgQ2M6IEVsaSBaYXJldHNraWkgJmx0O2VsaXpAZ251Lm9y
ZyZndDssJm5ic3A7IDcwMDM2QGRlYmJ1Z3MuZ251Lm9yZwo8YnI+CiZndDsmZ3Q7IERhdGU6IFNh
dCwgMzAgTWFyIDIwMjQgMTA6NDY6MDAgKzAxMDAKPGJyPgomZ3Q7Jmd0OyAKPGJyPgomZ3Q7Jmd0
OyBJIHRoaW5rIHVzaW5nIGZpbmQtYnVmZmVyLXZpc2l0aW5nIGluc3RlYWQgb2YgZ2V0LWZpbGUt
YnVmZmVyIGFuZAo8YnI+CiZndDsmZ3Q7IGZpbGUtdHJ1ZW5hbWUgaW5zdGVhZCBvZiBleHBhbmQt
ZmlsZS1uYW1lIGluIEVnbG90IGlzIHByb2JsZW1hdGljLgo8YnI+CiZndDsmZ3Q7IExldCdzIHNh
eSB3ZSBoYXZlIHRoZXNlIGZpbGVzOgo8YnI+CiZndDsmZ3Q7IAo8YnI+CiZndDsmZ3Q7IC9wcm9q
ZWN0L2EuYwo8YnI+CiZndDsmZ3Q7IC9wcm9qZWN0L2EuaCAtJmd0OyAvb3RoZXIvYS5oCjxicj4K
Jmd0OyZndDsgCjxicj4KJmd0OyZndDsgRWdsb3Qgd2lsbCBjb21tdW5pY2F0ZSB0aGVzZSBmaWxl
IG5hbWVzIHRvIHRoZSBMU1Agc2VydmVyOiAvcHJvamVjdC9hLmMKPGJyPgomZ3Q7Jmd0OyBhbmQg
L290aGVyL2EuaC4mbmJzcDsgVGhlbiB0aGUgc2VydmVyIGNhbm5vdCAiYXNzb2NpYXRlIiBhLmgg
d2l0aCBhLmMuCjxicj4KJmd0OyZndDsgQWRkaXRpb25hbGx5LCBhLmggd2lsbCBiZSBvdXRzaWRl
IG9mIHRoZSBMU1Agd29ya3NwYWNlLgo8YnI+CiZndDsmZ3Q7IAo8YnI+CiZndDsmZ3Q7IFRoaXMg
aW5kZWVkIGNvbmZ1c2VzIGNsYW5nZCBhIGJpdDogaXQgb25seSB0YWtlcyBpbnRvIGFjY291bnQg
dGhlCjxicj4KJmd0OyZndDsgY2hhbmdlcyBvZiBidWZmZXIgYS5oIHdoZW4gaXQgaXMgc2F2ZWQu
Jm5ic3A7IChCZWNhdXNlIGl0IGFzc3VtZXMKPGJyPgomZ3Q7Jmd0OyAvcHJvamVjdC9hLmggaXMg
bm90IG9wZW5lZCBpbiB0aGUgZWRpdG9yLikKPGJyPgomZ3Q7Cjxicj4KJmd0OyBDYW4gTFNQIHNl
cnZlcnMgcmVzb2x2ZSBzeW1saW5rcz8mbmJzcDsgSWYgdGhleSBjYW4sIHRoZW4gZXhwYW5kLWZp
bGUtbmFtZQo8YnI+CiZndDsgaXMgVFJULCBBRkFJVS4KPGJyPgoKPGJyPgpUaGUgTFNQIHNwZWNp
ZmljYXRpb24gZG9lcyBub3QgdGFsayBhYm91dCBzeW1saW5rcy4mbmJzcDsgVGhlIHNlcnZlcnMg
SSB1c2VkCjxicj4KbGV0IHRoZSBvcGVyYXRpbmcgc3lzdGVtIHJlc29sdmUgc3ltbGlua3MgZm9y
IHRoZW0uCjxicj4KCjxicj4KQWxsIGluIGFsbCwgSSB0aGluayBFZ2xvdCBzaG91bGQgc3dpdGNo
IHRvIHVzZSBleHBhbmQtZmlsZS1uYW1lIGFzIHdlbGwuCjxicj4KSXQgc2hvdWxkIGFsc28gdXNl
IGdldC1maWxlLWJ1ZmZlciBpbnN0ZWFkIG9mIHRoZSBtb3JlIGNvbXBsaWNhdGVkCjxicj4KY2Fj
aGluZyBtZWNoYW5pc20gcHJvcG9zZWQgcHJldmlvdXNseS4mbmJzcDsgVGhlbz8KPGJyPgoKPC9w
PjwvYmxvY2txdW90ZT48L2Rpdj48L2Rpdj48L2Rpdj48ZGl2IGRpcj0iYXV0byI+PGJyPjwvZGl2
PjxkaXYgZGlyPSJhdXRvIj5JIGNhbiBsb29rIGludG8gZ2V0LWZpbGUtYnVmZmVyLCBzdXJlLiBC
dXQgcmVtZW1iZXIgdGhhdCBteSBuZXcgY2FjaGluZyBpcyBtZXJlbHkgYSBkYXRhIHN0cnVjdHVy
ZSBjaGFuZ2UgZnJvbSBsaXN0IHRvIG1hcC4gVGhlIG1hbmFnZWQgYnVmZmVyIGxpc3QgaXMgc3Rp
bGwgdGhlcmU8L2Rpdj48ZGl2IGRpcj0iYXV0byI+PGJyPjwvZGl2PjxkaXYgZGlyPSJhdXRvIj48
ZGl2IGNsYXNzPSJnbWFpbF9leHRyYSI+PGRpdiBjbGFzcz0iZ21haWxfcXVvdGUiPjxibG9ja3F1
b3RlIGNsYXNzPSJxdW90ZSIgc3R5bGU9Im1hcmdpbjowIDAgMCAuOGV4O2JvcmRlci1sZWZ0OjFw
eCAjY2NjIHNvbGlkO3BhZGRpbmctbGVmdDoxZXgiPjxwIGRpcj0ibHRyIj48YnI+Ck5ldmVydGhl
bGVzcywgRWdsb3Qgd2lsbCBjb250aW51ZSB0byBoYW5kbGUgcG9vcmx5IHRoZSBjYXNlIHdoZW4g
dGhlcmUKPGJyPgppcyBhIHN5bWxpbmsgaW4gYSBwcm9qZWN0IHRoYXQgcG9pbnRzIG91dHNpZGUg
b2YgdGhlIHByb2plY3QuCjxicj4KSG9wZWZ1bGx5LCB0aGlzIGNhbiBiZSBwb3RlbnRpYWxseSBz
b2x2ZWQgbGF0ZXIgd2l0aCB0aGUgaWRlYSBiZWhpbmQKPGJyPgplZ2xvdC0tc2VydmVycy1ieS14
cmVmZWQtZmlsZS4KPGJyPgo8L3A+CjwvYmxvY2txdW90ZT48L2Rpdj48YnI+PC9kaXY+PC9kaXY+
PC9kaXY+





Information forwarded to bug-gnu-emacs@HIDDEN:
bug#70036; Package emacs. Full text available.

Message received at 70036 <at> debbugs.gnu.org:


Received: (at 70036) by debbugs.gnu.org; 31 Mar 2024 12:57:29 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Sun Mar 31 08:57:29 2024
Received: from localhost ([127.0.0.1]:46763 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1rqukb-0005X9-3O
	for submit <at> debbugs.gnu.org; Sun, 31 Mar 2024 08:57:29 -0400
Received: from mail-ej1-x633.google.com ([2a00:1450:4864:20::633]:47547)
 by debbugs.gnu.org with esmtp (Exim 4.84_2)
 (envelope-from <felician.nemeth@HIDDEN>) id 1rqukZ-0005Wg-4T
 for 70036 <at> debbugs.gnu.org; Sun, 31 Mar 2024 08:57:27 -0400
Received: by mail-ej1-x633.google.com with SMTP id
 a640c23a62f3a-a450bedffdfso356200266b.3
 for <70036 <at> debbugs.gnu.org>; Sun, 31 Mar 2024 05:57:24 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=gmail.com; s=20230601; t=1711889838; x=1712494638; darn=debbugs.gnu.org;
 h=mime-version:face:user-agent:message-id:in-reply-to:date:references
 :subject:cc:to:from:from:to:cc:subject:date:message-id:reply-to;
 bh=vMXCRTsZvPwJSLZfOj/CE1g92WkNwJUP8zrxYA1SryM=;
 b=P6Ar78BQYMl6HjwMccQGLixpWMbRoMeVj1RJ/NLVJYL7Rdn3rURr47RdAmcnYVh7f+
 HhDZbFPQ4p4Ubbb+xgPRE+2l4A7cCDBUzQGiXDLlByCEEFXfskIHhszN0ChAS4w+toyU
 OLofRc7M7IBIyyA9bSlKax+SCIvdIyREz0Ml7QE+iKcI09hzz27gCXG2kGFfoMhQqZys
 mX/nLEkaL7th+JbU+TUyCMA+TlxgjFlS8rzSmrkroFY546IrH3ddMyX9JU2EH0/KgWC3
 Ah+IVHZtSvFvsR8fgA+V+uFR3LP1Fo96Xz0Vms39iIHes1enBCsje7NUALvPvlYgCkYO
 jpNQ==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=1e100.net; s=20230601; t=1711889838; x=1712494638;
 h=mime-version:face:user-agent:message-id:in-reply-to:date:references
 :subject:cc:to:from:x-gm-message-state:from:to:cc:subject:date
 :message-id:reply-to;
 bh=vMXCRTsZvPwJSLZfOj/CE1g92WkNwJUP8zrxYA1SryM=;
 b=NoPY0pqW5gFqtVhQRNSjeYsvto6TSte+ofOJwTCPHN8Gj2RREnYRn8nUY4WerPIqFl
 u4k55fbmulstE6nih3KUTtNo9ILGh+ik7yxLDQi0Q9ZSqssUwZ5oQ64Y+/Zbrlpfys7v
 FGtIBuiO/rgTYX0S8pcP9fglY/3mtfEjoGjMvdZ9x5EaRmmv4T5OO5rD2dMM/WtDQyoE
 bA4B/AKJ0H0C8NAQe0P6jyYt3rOhu8XafkeVCMEvy/ZRprrxXeJXg50S232rEypl5aDL
 DZDZtQiJf+b0mFrAqnw01X10aKl1CisE0cW7XE+aqF/MVGyrzBDkFb/RXHDGBqWfDoA7
 Laug==
X-Forwarded-Encrypted: i=1;
 AJvYcCUZjeChaSHzUx1DjbC30EpD004sKm/gNDPk3+OccLuemEhxTkdl4GH78qgzT+LVARLEME95lLhX5PEEjHHGZ9oEnUfn6kA=
X-Gm-Message-State: AOJu0Yxx7CKd2ObTcrGbr+lvUF9fueI+gNrExmJFv5h93GDh3ICyHqsr
 f2tDK7aqLau6eu3CMEGnV+IsIviMSkQ8z4FmNzTiwwdtAXqLPMEDl9XHLyvH
X-Google-Smtp-Source: AGHT+IGoySoOaQVnK2/itQg++at1SzC1co8euSR4ySE3ojmcoQai1DLwmMnflPt8kKzJY+J9azenOQ==
X-Received: by 2002:a17:907:3181:b0:a4e:663a:3cf4 with SMTP id
 xe1-20020a170907318100b00a4e663a3cf4mr754818ejb.6.1711889837589; 
 Sun, 31 Mar 2024 05:57:17 -0700 (PDT)
Received: from betli.gmail.com (catv-213-222-160-137.catv.fixed.vodafone.hu.
 [213.222.160.137]) by smtp.gmail.com with ESMTPSA id
 h8-20020a1709060f4800b00a46d049ff63sm4118192ejj.21.2024.03.31.05.57.16
 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);
 Sun, 31 Mar 2024 05:57:17 -0700 (PDT)
From: Felician Nemeth <felician.nemeth@HIDDEN>
To: Eli Zaretskii <eliz@HIDDEN>
Subject: Re: bug#70036: 30.0.50; Move file-truename to the C level
References: <87le63xzjt.fsf@HIDDEN> <87ttkrqvru.fsf@HIDDEN>
 <87il17xsea.fsf@HIDDEN> <86wmpmhp0a.fsf@HIDDEN>
 <874jcqygpn.fsf@HIDDEN> <875xx6muzt.fsf@HIDDEN>
 <8734say2wi.fsf@HIDDEN> <87zfugoxwn.fsf@HIDDEN>
 <86wmpjdh1o.fsf@HIDDEN>
Date: Sun, 31 Mar 2024 14:57:15 +0200
In-Reply-To: <86wmpjdh1o.fsf@HIDDEN> (Eli Zaretskii's message of "Sat, 30 Mar
 2024 15:45:39 +0300")
Message-ID: <87v852o8yc.fsf@HIDDEN>
User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/28.2 (gnu/linux)
Face: iVBORw0KGgoAAAANSUhEUgAAADAAAAAwAgMAAAAqbBEUAAAABGdBTUEAALGPC/xhBQAAACBj
 SFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAADFBMVEX5+fmhoaEwMDD/
 ///TMNVWAAAAAWJLR0QDEQxM8gAAAAlwSFlzAAAPEgAADxIBIZvyMwAAAAd0SU1FB+AICBUfHgLs
 gGoAAAGXSURBVCjPRdK/b5tAFAfw753gBEwM2ApMbuVIqf+Ko0qiyhOu4sj2xJBYMn/FUdX7UUUZ
 OjHgyvf+yj6IcW6Bjx53934ADEvs8bmEr8UVoTYTOyJO9KoYsVofN8kILdbeJ8Li6YpZWop4xOK0
 VdfIoXmkHn5/5D7/Ts/8THacSqnkKTcMTxgUkVzFnEIRTKwwYYSCvzfg16f0i8YApW/XG/Pm8R49
 dXjxKmRnxv3OwooQWcv4RUYem1fsNe/WU63uk7AmYxk78y32/ee2tZB4fO+WcZ7lnIGEolXW1EGw
 LfkSuQ0XTgRefgNlfNwRNV6QhBxJ8JNxTMUPyBqTd0bjaAP5G7NJRU39z80hLOZTjqB7K3tEEFSj
 aEsuQew6qBxxyhHjVUR7H7NpC9iHJZGLMCEuweqAqE1BHbfK2oRIz9EHYA/+wiFWru9smeVfuWNZ
 2+NFtX80UA1TvJNdytM4DwO4kY7bJz8Qcd0G0ceslZGkkeoBsjUHwF1+jjM3XHaXEZ7mGLfwPFO+
 RV9QLY2iEdmDo78D/gNPaXVYqd+pyQAAACV0RVh0ZGF0ZTpjcmVhdGUAMjAxNi0wOC0wOFQyMzoz
 MDoyOCswMjowMGy/yHYAAAAldEVYdGRhdGU6bW9kaWZ5ADIwMTYtMDgtMDhUMjM6MzA6MjgrMDI6
 MDAd4nDKAAAAAElFTkSuQmCC
MIME-Version: 1.0
Content-Type: text/plain
X-Spam-Score: 0.0 (/)
X-Debbugs-Envelope-To: 70036
Cc: 70036 <at> debbugs.gnu.org, theo@HIDDEN
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -1.0 (-)

Eli Zaretskii <eliz@HIDDEN> writes:

>> From: Felician Nemeth <felician.nemeth@HIDDEN>
>> Cc: Eli Zaretskii <eliz@HIDDEN>,  70036 <at> debbugs.gnu.org
>> Date: Sat, 30 Mar 2024 10:46:00 +0100
>> 
>> I think using find-buffer-visiting instead of get-file-buffer and
>> file-truename instead of expand-file-name in Eglot is problematic.
>> Let's say we have these files:
>> 
>> /project/a.c
>> /project/a.h -> /other/a.h
>> 
>> Eglot will communicate these file names to the LSP server: /project/a.c
>> and /other/a.h.  Then the server cannot "associate" a.h with a.c.
>> Additionally, a.h will be outside of the LSP workspace.
>> 
>> This indeed confuses clangd a bit: it only takes into account the
>> changes of buffer a.h when it is saved.  (Because it assumes
>> /project/a.h is not opened in the editor.)
>
> Can LSP servers resolve symlinks?  If they can, then expand-file-name
> is TRT, AFAIU.

The LSP specification does not talk about symlinks.  The servers I used
let the operating system resolve symlinks for them.

All in all, I think Eglot should switch to use expand-file-name as well.
It should also use get-file-buffer instead of the more complicated
caching mechanism proposed previously.  Theo?

Nevertheless, Eglot will continue to handle poorly the case when there
is a symlink in a project that points outside of the project.
Hopefully, this can be potentially solved later with the idea behind
eglot--servers-by-xrefed-file.




Information forwarded to bug-gnu-emacs@HIDDEN:
bug#70036; Package emacs. Full text available.

Message received at 70036 <at> debbugs.gnu.org:


Received: (at 70036) by debbugs.gnu.org; 30 Mar 2024 12:45:58 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Sat Mar 30 08:45:57 2024
Received: from localhost ([127.0.0.1]:44162 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1rqY5t-0005ws-60
	for submit <at> debbugs.gnu.org; Sat, 30 Mar 2024 08:45:57 -0400
Received: from eggs.gnu.org ([2001:470:142:3::10]:58482)
 by debbugs.gnu.org with esmtp (Exim 4.84_2)
 (envelope-from <eliz@HIDDEN>) id 1rqY5o-0005wd-30
 for 70036 <at> debbugs.gnu.org; Sat, 30 Mar 2024 08:45:55 -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 <eliz@HIDDEN>)
 id 1rqY5g-0001dS-1D; Sat, 30 Mar 2024 08:45:44 -0400
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=gnu.org;
 s=fencepost-gnu-org; h=References:Subject:In-Reply-To:To:From:Date:
 mime-version; bh=NJn2g1/a824OEDRr9fnTur4Djx5HAZv8JncUeKJxsww=; b=qUfvwD1YFwC5
 fvpL8Mp6Q/o7t5HTI7SjLaoZLNtBD1IteY1RTo71VDCvAc+0cd7+RGnDdjW0CeMlpoaseEvRWjRCh
 P3zoLZH+Z6K/M+HqihhFNp9jIX3dhBFBOdLD3eHi7xSQwfRxbooSIEG/HXKpkL/FADbW/lXnqQ13S
 h0WQxZSyc5zLzSF/3559yCLXnOj62kvIIJ1MRmlArIxZbqtR3FXQ+2W02Jr/5oMMSeom4sRhUd0Bf
 FJc0F0COzZzq7uM3eZlh9nzMGzNjOgZBvzK9RwGzWuY/NYIYku6t+ta6rjRouuWBR3jMY0sqnDtoi
 Fx1y22ms2URY/3oVsjoOUw==;
Date: Sat, 30 Mar 2024 15:45:39 +0300
Message-Id: <86wmpjdh1o.fsf@HIDDEN>
From: Eli Zaretskii <eliz@HIDDEN>
To: Felician Nemeth <felician.nemeth@HIDDEN>
In-Reply-To: <87zfugoxwn.fsf@HIDDEN> (message from Felician Nemeth
 on Sat, 30 Mar 2024 10:46:00 +0100)
Subject: Re: bug#70036: 30.0.50; Move file-truename to the C level
References: <87le63xzjt.fsf@HIDDEN> <87ttkrqvru.fsf@HIDDEN>
 <87il17xsea.fsf@HIDDEN> <86wmpmhp0a.fsf@HIDDEN>
 <874jcqygpn.fsf@HIDDEN> <875xx6muzt.fsf@HIDDEN>
 <8734say2wi.fsf@HIDDEN> <87zfugoxwn.fsf@HIDDEN>
X-Spam-Score: -2.3 (--)
X-Debbugs-Envelope-To: 70036
Cc: 70036 <at> debbugs.gnu.org, theo@HIDDEN
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -3.3 (---)

> From: Felician Nemeth <felician.nemeth@HIDDEN>
> Cc: Eli Zaretskii <eliz@HIDDEN>,  70036 <at> debbugs.gnu.org
> Date: Sat, 30 Mar 2024 10:46:00 +0100
> 
> I think using find-buffer-visiting instead of get-file-buffer and
> file-truename instead of expand-file-name in Eglot is problematic.
> Let's say we have these files:
> 
> /project/a.c
> /project/a.h -> /other/a.h
> 
> Eglot will communicate these file names to the LSP server: /project/a.c
> and /other/a.h.  Then the server cannot "associate" a.h with a.c.
> Additionally, a.h will be outside of the LSP workspace.
> 
> This indeed confuses clangd a bit: it only takes into account the
> changes of buffer a.h when it is saved.  (Because it assumes
> /project/a.h is not opened in the editor.)

Can LSP servers resolve symlinks?  If they can, then expand-file-name
is TRT, AFAIU.




Information forwarded to bug-gnu-emacs@HIDDEN:
bug#70036; Package emacs. Full text available.

Message received at 70036 <at> debbugs.gnu.org:


Received: (at 70036) by debbugs.gnu.org; 30 Mar 2024 11:18:36 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Sat Mar 30 07:18:36 2024
Received: from localhost ([127.0.0.1]:44075 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1rqWjK-0006sR-ER
	for submit <at> debbugs.gnu.org; Sat, 30 Mar 2024 07:18:36 -0400
Received: from out-171.mta1.migadu.com ([95.215.58.171]:62773)
 by debbugs.gnu.org with esmtp (Exim 4.84_2)
 (envelope-from <theo@HIDDEN>) id 1rqWjF-0006rq-HZ
 for 70036 <at> debbugs.gnu.org; Sat, 30 Mar 2024 07:18:33 -0400
X-Report-Abuse: Please report any abuse attempt to abuse@HIDDEN and
 include these headers.
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=thornhill.no;
 s=key1; t=1711797501;
 h=from:from:reply-to:subject:subject:date:date:message-id:message-id:
 to:to:cc:cc:mime-version:mime-version:content-type:content-type:
 in-reply-to:in-reply-to:references:references;
 bh=gsvLo7fAxKVbHN9ZmYzSseK0okgzRIMPdyXy2G3fDeo=;
 b=sfO7KvYjLgnSOst58fzqcNxg0x/c42BTg1huTOlg67AmBWzzOVc2nHg7/ruKdACsFDfhlD
 uPs2fINI9Ch8IP6YhIW/A3Xj88ZjJl6DfnABuC+XoxY8nFcGzjPFrcDj2jI7PnAsly/TnZ
 YFDQs4RjOnlnuCnY+rbXmTJMgqVv4gecEgwIoy4x1Tj4JzbPozRgS57zaIsZwLeUKOmSqe
 FUDSKtWqfi/lCPQAXTPyZACWS+IdkFyLkYvw4+bJLuH94xz3g7raghAFHMQuptTVMAAhIo
 lDAIki26cfVWxSnb4CBbZvX4vd7na/sAkZ1NQwY3KqfRHWL6O2nJIodPeV+rBg==
From: Theodor Thornhill <theo@HIDDEN>
To: Felician Nemeth <felician.nemeth@HIDDEN>
Subject: Re: bug#70036: 30.0.50; Move file-truename to the C level
In-Reply-To: <87zfugoxwn.fsf@HIDDEN>
References: <87le63xzjt.fsf@HIDDEN> <87ttkrqvru.fsf@HIDDEN>
 <87il17xsea.fsf@HIDDEN> <86wmpmhp0a.fsf@HIDDEN>
 <874jcqygpn.fsf@HIDDEN> <875xx6muzt.fsf@HIDDEN>
 <8734say2wi.fsf@HIDDEN> <87zfugoxwn.fsf@HIDDEN>
Date: Sat, 30 Mar 2024 12:18:14 +0100
Message-ID: <874jcoeznt.fsf@HIDDEN>
MIME-Version: 1.0
Content-Type: multipart/mixed; boundary="=-=-="
X-Migadu-Flow: FLOW_OUT
X-Spam-Score: 0.0 (/)
X-Debbugs-Envelope-To: 70036
Cc: Eli Zaretskii <eliz@HIDDEN>, 70036 <at> debbugs.gnu.org
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -1.0 (-)

--=-=-=
Content-Type: text/plain

Felician Nemeth <felician.nemeth@HIDDEN> writes:

> Theodor Thornhill <theo@HIDDEN> writes:
>> Felician Nemeth <felician.nemeth@HIDDEN> writes:
>
>>> Theo, can you email me the relevant messages that your server sends
>>> to Emacs?  Does the server send lots of similar diagnostics messages
>>> frequently?
>
>> I'll try to include such a report a little later today. 
>
> Thanks, that would be helpful.
>

It's a little hard scraping the logs for company related data, so I
haven't done this yet, but the profiles should be pretty expanatory if
you do some edits after applying the below patch.

>> [2. text/x-diff; 0001-Don-t-use-file-truepath-in-Eglot-bug-70036.patch]...
>
> I think using find-buffer-visiting instead of get-file-buffer and
> file-truename instead of expand-file-name in Eglot is problematic.
> Let's say we have these files:
>
> /project/a.c
> /project/a.h -> /other/a.h
>
> Eglot will communicate these file names to the LSP server: /project/a.c
> and /other/a.h.  Then the server cannot "associate" a.h with a.c.
> Additionally, a.h will be outside of the LSP workspace.
>
> This indeed confuses clangd a bit: it only takes into account the
> changes of buffer a.h when it is saved.  (Because it assumes
> /project/a.h is not opened in the editor.)

So in other words this is already a bug in eglot? 

>
> ------
>
> Regarding the patch itself, cache invalidation is missing from it.  The
> user might kill a buffer or save it under a different name with
> write-file.  Changing (PATH -> BUFFER) to (PATH -> (BUFFER, FILENAME))
> would probably work.  Eglot should save the current buffer-file-name
> when it inserts a new item into the hash of managed-buffers.  And when
> it retrieves an item, it should verify whether the buffer-file-name is
> the same as the saved file-name.
>
> Can file-truepath change while buffer-file-name remains the same?  Yes,
> but I think Eglot could ignore those rare cases, or handle it elsewhere.
> (For example, it could update the cache entry after a buffer is saved.)

Actually, cache invalidation is there, at least for killing a
buffer. Major modes are disabled on killing buffer, and it is removed as
a part of the teardown. Saving to a new buffer isn't handled properly
yet, but this looks like something not really supported by Eglot yet
anyway. If I resave a buffer with C-x C-w its content will be placed in
a new buffer, but old one will not be deleted, and the new one will not
be registered with the eglot server before running M-x revert-buffer
anyways. So that seems like a different issue, really.

Please check out the new patch. I find no issues diverging from the
current behavior using this one. It seems to solve all the performance
issues I stated, and now completely new stuff shows up in the profile,
which to me sounds like the bottlenecks have moved, suggesting we get a
nice performance upgrade.

What do you think? I'll test this for a while and install to master in a
few days if nothing comes up :-)

Theo


--=-=-=
Content-Type: text/x-diff
Content-Disposition: attachment;
 filename=0001-Don-t-use-file-truepath-in-Eglot-bug-70036.patch

From 26e5f3cc8e767215f7c50800a6d713702b8fa144 Mon Sep 17 00:00:00 2001
From: Theodor Thornhill <theo@HIDDEN>
Date: Thu, 28 Mar 2024 12:56:23 +0100
Subject: [PATCH] Don't use file-truepath in Eglot (bug#70036)

`file-truepath' is slow because of recursive calls and being implemented
in lisp.  It seems to not be needed in eglot, but it is used behind the
scenes in `find-buffer-visiting', thus appearing in profiles.  Moving
the implementation to a hash map will yield similar performance
benefits, but wouldn't require us to rewrite `file-truename' in C.

* lisp/progmodes/eglot.el (eglot-lsp-server): Convert 'managed-buffers'
to a hashmap.
(eglot-uri-to-path): Don't use file-truepath, as it is too slow to be
included in the hot path.
(eglot--on-shutdown): Use buffers from buffer map.
(eglot--managed-mode): Add buffer to map, rather than list. Also remove
it from the map on deactivation.
(eglot-handle-notification): Expose server and get buffer from the
buffer map.
---
 lisp/progmodes/eglot.el | 42 +++++++++++++++++++++++------------------
 1 file changed, 24 insertions(+), 18 deletions(-)

diff --git a/lisp/progmodes/eglot.el b/lisp/progmodes/eglot.el
index f247c43203c..7f4284bf09d 100644
--- a/lisp/progmodes/eglot.el
+++ b/lisp/progmodes/eglot.el
@@ -1053,8 +1053,8 @@ eglot-lsp-server
     :documentation "Map (DIR -> (WATCH ID1 ID2...)) for `didChangeWatchedFiles'."
     :initform (make-hash-table :test #'equal) :accessor eglot--file-watches)
    (managed-buffers
-    :initform nil
-    :documentation "List of buffers managed by server."
+    :documentation "Map (PATH -> BUFFER) for buffers managed by server."
+    :initform (make-hash-table :test #'equal)
     :accessor eglot--managed-buffers)
    (saved-initargs
     :documentation "Saved initargs for reconnection purposes."
@@ -1085,12 +1085,12 @@ eglot-uri-to-path
 
 (defun eglot-path-to-uri (path)
   "Convert PATH, a file name, to LSP URI string and return it."
-  (let ((truepath (file-truename path)))
+  (let ((expanded-path (expand-file-name path)))
     (if (and (url-type (url-generic-parse-url path))
              ;; It might be MS Windows path which includes a drive
              ;; letter that looks like a URL scheme (bug#59338)
              (not (and (eq system-type 'windows-nt)
-                       (file-name-absolute-p truepath))))
+                       (file-name-absolute-p expanded-path))))
         ;; Path is already a URI, so forward it to the LSP server
         ;; untouched.  The server should be able to handle it, since
         ;; it provided this URI to clients in the first place.
@@ -1098,11 +1098,11 @@ eglot-path-to-uri
       (concat "file://"
               ;; Add a leading "/" for local MS Windows-style paths.
               (if (and (eq system-type 'windows-nt)
-                       (not (file-remote-p truepath)))
+                       (not (file-remote-p expanded-path)))
                   "/")
               (url-hexify-string
                ;; Again watch out for trampy paths.
-               (directory-file-name (file-local-name truepath))
+               (directory-file-name (file-local-name expanded-path))
                eglot--uri-path-allowed-chars)))))
 
 (defun eglot-range-region (range &optional markers)
@@ -1187,7 +1187,7 @@ eglot--servers-by-xrefed-file
 (defun eglot--on-shutdown (server)
   "Called by jsonrpc.el when SERVER is already dead."
   ;; Turn off `eglot--managed-mode' where appropriate.
-  (dolist (buffer (eglot--managed-buffers server))
+  (dolist (buffer (map-values (eglot--managed-buffers server)))
     (let (;; Avoid duplicate shutdowns (github#389)
           (eglot-autoshutdown nil))
       (eglot--when-live-buffer buffer (eglot--managed-mode-off))))
@@ -1992,7 +1992,11 @@ eglot--managed-mode
       (add-hook 'eldoc-documentation-functions #'eglot-signature-eldoc-function
                 nil t)
       (eldoc-mode 1))
-    (cl-pushnew (current-buffer) (eglot--managed-buffers (eglot-current-server))))
+
+    (let ((buffer (current-buffer)))
+      (puthash (expand-file-name (buffer-file-name buffer))
+               buffer
+               (eglot--managed-buffers (eglot-current-server)))))
    (t
     (remove-hook 'after-change-functions #'eglot--after-change t)
     (remove-hook 'before-change-functions #'eglot--before-change t)
@@ -2020,10 +2024,10 @@ eglot--managed-mode
     (let ((server eglot--cached-server))
       (setq eglot--cached-server nil)
       (when server
-        (setf (eglot--managed-buffers server)
-              (delq (current-buffer) (eglot--managed-buffers server)))
+        (remhash (expand-file-name (buffer-file-name (current-buffer)))
+                 (eglot--managed-buffers server))
         (when (and eglot-autoshutdown
-                   (null (eglot--managed-buffers server)))
+                   (null (map-values (eglot--managed-buffers server))))
           (eglot-shutdown server)))))))
 
 (defun eglot--managed-mode-off ()
@@ -2346,7 +2350,7 @@ eglot-handle-notification
                           (remhash token (eglot--progress-reporters server))))))))))
 
 (cl-defmethod eglot-handle-notification
-  (_server (_method (eql textDocument/publishDiagnostics)) &key uri diagnostics
+  (server (_method (eql textDocument/publishDiagnostics)) &key uri diagnostics
            &allow-other-keys) ; FIXME: doesn't respect `eglot-strict-mode'
   "Handle notification publishDiagnostics."
   (cl-flet ((eglot--diag-type (sev)
@@ -2357,7 +2361,7 @@ eglot-handle-notification
             (mess (source code message)
               (concat source (and code (format " [%s]" code)) ": " message)))
     (if-let* ((path (expand-file-name (eglot-uri-to-path uri)))
-              (buffer (find-buffer-visiting path)))
+              (buffer (gethash path (eglot--managed-buffers server))))
         (with-current-buffer buffer
           (cl-loop
            initially
@@ -2842,7 +2846,7 @@ eglot--xref-make-match
 Try to visit the target file for a richer summary line."
   (pcase-let*
       ((file (eglot-uri-to-path uri))
-       (visiting (or (find-buffer-visiting file)
+       (visiting (or (gethash file (eglot--managed-buffers (eglot-current-server)))
                      (gethash uri eglot--temp-location-buffers)))
        (collect (lambda ()
                   (eglot--widening
@@ -3542,13 +3546,14 @@ eglot--propose-changes-as-diff
   (with-current-buffer (get-buffer-create "*EGLOT proposed server changes*")
     (buffer-disable-undo (current-buffer))
     (let ((inhibit-read-only t)
-          (target (current-buffer)))
+          (target (current-buffer))
+          (managed-buffers (eglot--managed-buffers (eglot-current-server))))
       (diff-mode)
       (erase-buffer)
       (pcase-dolist (`(,path ,edits ,_) prepared)
         (with-temp-buffer
           (let* ((diff (current-buffer))
-                 (existing-buf (find-buffer-visiting path))
+                 (existing-buf (gethash path (gethash path managed-buffers)))
                  (existing-buf-label (prin1-to-string existing-buf)))
             (with-temp-buffer
               (if existing-buf
@@ -3583,7 +3588,8 @@ eglot--apply-workspace-edit
                      (eglot--dbind ((VersionedTextDocumentIdentifier) uri version)
                          textDocument
                        (list (eglot-uri-to-path uri) edits version)))
-                   documentChanges)))
+                   documentChanges))
+          (managed-buffers (eglot--managed-buffers (eglot-current-server))))
       (unless (and changes documentChanges)
         ;; We don't want double edits, and some servers send both
         ;; changes and documentChanges.  This unless ensures that we
@@ -3591,7 +3597,7 @@ eglot--apply-workspace-edit
         (cl-loop for (uri edits) on changes by #'cddr
                  do (push (list (eglot-uri-to-path uri) edits) prepared)))
       (cl-flet ((notevery-visited-p ()
-                  (cl-notevery #'find-buffer-visiting
+                  (cl-notevery (lambda (p) (gethash p managed-buffers))
                                (mapcar #'car prepared)))
                 (accept-p ()
                   (y-or-n-p
-- 
2.40.1


--=-=-=--




Information forwarded to bug-gnu-emacs@HIDDEN:
bug#70036; Package emacs. Full text available.

Message received at 70036 <at> debbugs.gnu.org:


Received: (at 70036) by debbugs.gnu.org; 30 Mar 2024 09:46:15 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Sat Mar 30 05:46:15 2024
Received: from localhost ([127.0.0.1]:44009 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1rqVHy-0002MS-U3
	for submit <at> debbugs.gnu.org; Sat, 30 Mar 2024 05:46:15 -0400
Received: from mail-ej1-x634.google.com ([2a00:1450:4864:20::634]:53427)
 by debbugs.gnu.org with esmtp (Exim 4.84_2)
 (envelope-from <felician.nemeth@HIDDEN>) id 1rqVHv-0002MD-7H
 for 70036 <at> debbugs.gnu.org; Sat, 30 Mar 2024 05:46:13 -0400
Received: by mail-ej1-x634.google.com with SMTP id
 a640c23a62f3a-a465ddc2c09so149018366b.2
 for <70036 <at> debbugs.gnu.org>; Sat, 30 Mar 2024 02:46:09 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=gmail.com; s=20230601; t=1711791963; x=1712396763; darn=debbugs.gnu.org;
 h=mime-version:face:user-agent:message-id:in-reply-to:date:references
 :subject:cc:to:from:from:to:cc:subject:date:message-id:reply-to;
 bh=fS5ZHG0AA6HvG/9ndxZby5pbzO7Rll+MbCy4dYEyXG0=;
 b=jH1NZoElJhwb7ytALWcfdTddwlk9zdyqw5wsgu2j33W6acbjADsU7r97a/J66JTRK1
 mtIbUcsuL8Bp4JPG9TVLOvWReZk7yD80cyCzQeVR0esbbdjnMiM794pcHhXlsjI+1GxC
 NqhpZHn3CP06xavX6xULN1BV1UjdP9aqymaMjphZfLoZThBIy0AMvqDLopzp9POjxdYy
 pmkHWPfays80AmaL9MFfhG4vnostX9IgGRvqWQg0oYdTBCFTFLjomcCthb+Iocb2mPQw
 uNnkFURO9lHea+fFUHEQ9dvwjUMwO+JTfD4ULfNl4zk++kaT1fvt2eEstpp3Uzxp2x/S
 gbbA==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=1e100.net; s=20230601; t=1711791963; x=1712396763;
 h=mime-version:face:user-agent:message-id:in-reply-to:date:references
 :subject:cc:to:from:x-gm-message-state:from:to:cc:subject:date
 :message-id:reply-to;
 bh=fS5ZHG0AA6HvG/9ndxZby5pbzO7Rll+MbCy4dYEyXG0=;
 b=KxyyivxRlpWCHtIAtb8gJh3xf2zoRq+GIlSQdcjfb5yecRqeIxgEr/IpuciexKH0mg
 BLE+YeZloNjVHpDG99tpU8TC4U546tMMX9eVmuo0V0yn2UfuELxtGfAQ9LsJOpo17D8K
 hrYC17yGng9uu7Dc63HnEclO0EeQ5unZ01RBIHgqOgvH3hOYgWoJ1tiwxen8oPMdD4CV
 zCSq7OOXyLLoN4dmp6OUPbsfGVmqOIiibG6FR7JcWLK0DTdkFJJbONQGrHZDJEn+YfBW
 pgHG2MDac9GibEgU887h20xpZKu5Ec4Hm90KmTYxW2X0VG9gIlHsDK2YY9/yhBla6FKI
 5Y0Q==
X-Forwarded-Encrypted: i=1;
 AJvYcCUcmHFj1mAFXE39xYc+6lrtXbGmCjhdt1xzxlNQDAV3pgXrMIm/lUwjQXwmSySb56QUcvuZ+xMdRS2CvAeId2tQQjJNNHM=
X-Gm-Message-State: AOJu0Ywu++rH+DB/FSfKGoxQhJqttieGflqt5Ywlap4ejPxGIq/mJCtT
 WiRq7fDK2rdjlajDZ2O/Lcps/nO4xWJwwi4FP8VK0YR+U+7KGu9yfmqQSM4y
X-Google-Smtp-Source: AGHT+IEDOm3mIbAbHZvJfWUNynJXHBT36jFT5lCEu4kq3rm1KfS7MigdI/LWIQIf3UgvL0WJ0WQymQ==
X-Received: by 2002:a05:6402:5202:b0:56d:b5ce:9e04 with SMTP id
 s2-20020a056402520200b0056db5ce9e04mr3368473edd.30.1711791962455; 
 Sat, 30 Mar 2024 02:46:02 -0700 (PDT)
Received: from betli.gmail.com (catv-213-222-160-137.catv.fixed.vodafone.hu.
 [213.222.160.137]) by smtp.gmail.com with ESMTPSA id
 fe8-20020a056402390800b0056c522d014esm2931729edb.57.2024.03.30.02.46.01
 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);
 Sat, 30 Mar 2024 02:46:02 -0700 (PDT)
From: Felician Nemeth <felician.nemeth@HIDDEN>
To: Theodor Thornhill <theo@HIDDEN>
Subject: Re: bug#70036: 30.0.50; Move file-truename to the C level
References: <87le63xzjt.fsf@HIDDEN> <87ttkrqvru.fsf@HIDDEN>
 <87il17xsea.fsf@HIDDEN> <86wmpmhp0a.fsf@HIDDEN>
 <874jcqygpn.fsf@HIDDEN> <875xx6muzt.fsf@HIDDEN>
 <8734say2wi.fsf@HIDDEN>
Date: Sat, 30 Mar 2024 10:46:00 +0100
In-Reply-To: <8734say2wi.fsf@HIDDEN> (Theodor Thornhill via's message of
 "Thu, 28 Mar 2024 13:08:45 +0100")
Message-ID: <87zfugoxwn.fsf@HIDDEN>
User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/28.2 (gnu/linux)
Face: iVBORw0KGgoAAAANSUhEUgAAADAAAAAwAgMAAAAqbBEUAAAABGdBTUEAALGPC/xhBQAAACBj
 SFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAADFBMVEX5+fmhoaEwMDD/
 ///TMNVWAAAAAWJLR0QDEQxM8gAAAAlwSFlzAAAPEgAADxIBIZvyMwAAAAd0SU1FB+AICBUfHgLs
 gGoAAAGXSURBVCjPRdK/b5tAFAfw753gBEwM2ApMbuVIqf+Ko0qiyhOu4sj2xJBYMn/FUdX7UUUZ
 OjHgyvf+yj6IcW6Bjx53934ADEvs8bmEr8UVoTYTOyJO9KoYsVofN8kILdbeJ8Li6YpZWop4xOK0
 VdfIoXmkHn5/5D7/Ts/8THacSqnkKTcMTxgUkVzFnEIRTKwwYYSCvzfg16f0i8YApW/XG/Pm8R49
 dXjxKmRnxv3OwooQWcv4RUYem1fsNe/WU63uk7AmYxk78y32/ee2tZB4fO+WcZ7lnIGEolXW1EGw
 LfkSuQ0XTgRefgNlfNwRNV6QhBxJ8JNxTMUPyBqTd0bjaAP5G7NJRU39z80hLOZTjqB7K3tEEFSj
 aEsuQew6qBxxyhHjVUR7H7NpC9iHJZGLMCEuweqAqE1BHbfK2oRIz9EHYA/+wiFWru9smeVfuWNZ
 2+NFtX80UA1TvJNdytM4DwO4kY7bJz8Qcd0G0ceslZGkkeoBsjUHwF1+jjM3XHaXEZ7mGLfwPFO+
 RV9QLY2iEdmDo78D/gNPaXVYqd+pyQAAACV0RVh0ZGF0ZTpjcmVhdGUAMjAxNi0wOC0wOFQyMzoz
 MDoyOCswMjowMGy/yHYAAAAldEVYdGRhdGU6bW9kaWZ5ADIwMTYtMDgtMDhUMjM6MzA6MjgrMDI6
 MDAd4nDKAAAAAElFTkSuQmCC
MIME-Version: 1.0
Content-Type: text/plain
X-Spam-Score: 0.0 (/)
X-Debbugs-Envelope-To: 70036
Cc: Eli Zaretskii <eliz@HIDDEN>, 70036 <at> debbugs.gnu.org
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -1.0 (-)

Theodor Thornhill <theo@HIDDEN> writes:
> Felician Nemeth <felician.nemeth@HIDDEN> writes:

>> Theo, can you email me the relevant messages that your server sends
>> to Emacs?  Does the server send lots of similar diagnostics messages
>> frequently?

> I'll try to include such a report a little later today. 

Thanks, that would be helpful.

> [2. text/x-diff; 0001-Don-t-use-file-truepath-in-Eglot-bug-70036.patch]...

I think using find-buffer-visiting instead of get-file-buffer and
file-truename instead of expand-file-name in Eglot is problematic.
Let's say we have these files:

/project/a.c
/project/a.h -> /other/a.h

Eglot will communicate these file names to the LSP server: /project/a.c
and /other/a.h.  Then the server cannot "associate" a.h with a.c.
Additionally, a.h will be outside of the LSP workspace.

This indeed confuses clangd a bit: it only takes into account the
changes of buffer a.h when it is saved.  (Because it assumes
/project/a.h is not opened in the editor.)

------

Regarding the patch itself, cache invalidation is missing from it.  The
user might kill a buffer or save it under a different name with
write-file.  Changing (PATH -> BUFFER) to (PATH -> (BUFFER, FILENAME))
would probably work.  Eglot should save the current buffer-file-name
when it inserts a new item into the hash of managed-buffers.  And when
it retrieves an item, it should verify whether the buffer-file-name is
the same as the saved file-name.

Can file-truepath change while buffer-file-name remains the same?  Yes,
but I think Eglot could ignore those rare cases, or handle it elsewhere.
(For example, it could update the cache entry after a buffer is saved.)




Information forwarded to bug-gnu-emacs@HIDDEN:
bug#70036; Package emacs. Full text available.

Message received at 70036 <at> debbugs.gnu.org:


Received: (at 70036) by debbugs.gnu.org; 28 Mar 2024 13:52:44 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Thu Mar 28 09:52:44 2024
Received: from localhost ([127.0.0.1]:39602 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1rpqBP-0002nP-N2
	for submit <at> debbugs.gnu.org; Thu, 28 Mar 2024 09:52:43 -0400
Received: from eggs.gnu.org ([2001:470:142:3::10]:59798)
 by debbugs.gnu.org with esmtp (Exim 4.84_2)
 (envelope-from <eliz@HIDDEN>) id 1rpqBL-0002ma-SM
 for 70036 <at> debbugs.gnu.org; Thu, 28 Mar 2024 09:52:41 -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 <eliz@HIDDEN>)
 id 1rpqBE-0001Bk-Mj; Thu, 28 Mar 2024 09:52:32 -0400
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=gnu.org;
 s=fencepost-gnu-org; h=References:Subject:In-Reply-To:To:From:Date:
 mime-version; bh=VX/nW8TTq7LQ58CdOHzHjsWauydzcOm9Yejf72dIo88=; b=TdYZTfFe7MwT
 haBSmQMw46Tcgkt/KrqrSKUbcLCrcrTCjveeipCrm3M2rw++gO9CUvDDwAQp2yrc+w8e59fwJhKJS
 IjK0fYCZlLUDUxxwF3jxzsf0HHR4CLHkChjENQY9PT/WctKLdJY8xpXQ7PpipFjMcQ5Q4ORswFost
 rwPW3knvsmAShcdIJE7o8G4VWEjG+juxjtpNgK/+p3lmmsBqVIQIwT8O6sl5AO/3RHI3MVDHBATcj
 pDJSTRPMooMgLRngm+KQiulYyFGBGsHzqYchyvQD7L1kngb/kxnKurhf+ex8Q8+NNr1H2ZE6B+40B
 yORMmhQWk2pe2NnU/rFqiw==;
Date: Thu, 28 Mar 2024 15:52:23 +0200
Message-Id: <86zfuifoq0.fsf@HIDDEN>
From: Eli Zaretskii <eliz@HIDDEN>
To: Ihor Radchenko <yantar92@HIDDEN>
In-Reply-To: <87il16tw0l.fsf@localhost> (message from Ihor Radchenko on Thu,
 28 Mar 2024 11:51:06 +0000)
Subject: Re: bug#70036: 30.0.50; Move file-truename to the C level
References: <87le63xzjt.fsf@HIDDEN> <87jzlmd831.fsf@localhost>
 <87v856wrj1.fsf@HIDDEN> <87r0futxj4.fsf@localhost>
 <875xx6y46j.fsf@HIDDEN> <87il16tw0l.fsf@localhost>
X-Spam-Score: -2.3 (--)
X-Debbugs-Envelope-To: 70036
Cc: 70036 <at> debbugs.gnu.org, theo@HIDDEN
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -3.3 (---)

> Cc: 70036 <at> debbugs.gnu.org
> From: Ihor Radchenko <yantar92@HIDDEN>
> Date: Thu, 28 Mar 2024 11:51:06 +0000
> 
> If the slow parts of `file-truename' are the calls to C subroutines,
> rewriting `file-truename' in C will not help much with the performance.

That is only true if the C implementation uses the same C subroutines,
or their bodies.  If, instead, the C implementation uses something
like 'realpath', which produces the fully resolved file name ion one
go, then the profile from the Lisp implementation is not really
relevant.




Information forwarded to bug-gnu-emacs@HIDDEN:
bug#70036; Package emacs. Full text available.

Message received at 70036 <at> debbugs.gnu.org:


Received: (at 70036) by debbugs.gnu.org; 28 Mar 2024 12:47:42 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Thu Mar 28 08:47:42 2024
Received: from localhost ([127.0.0.1]:39529 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1rppAT-0005oV-Hh
	for submit <at> debbugs.gnu.org; Thu, 28 Mar 2024 08:47:42 -0400
Received: from out-184.mta0.migadu.com ([91.218.175.184]:13907)
 by debbugs.gnu.org with esmtp (Exim 4.84_2)
 (envelope-from <theo@HIDDEN>) id 1rppAQ-0005n1-2X
 for 70036 <at> debbugs.gnu.org; Thu, 28 Mar 2024 08:47:40 -0400
X-Report-Abuse: Please report any abuse attempt to abuse@HIDDEN and
 include these headers.
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=thornhill.no;
 s=key1; t=1711630050;
 h=from:from:reply-to:subject:subject:date:date:message-id:message-id:
 to:to:cc:cc:mime-version:mime-version:content-type:content-type:
 in-reply-to:in-reply-to:references:references;
 bh=NRnFQsmLBcEvYyzyQR4l6EzsfBnWWz+sjIt3girwMFc=;
 b=ybJyiSZupupU5wrsk8IUx+1iItFGO2HQTNchO0sjU9nSJVwndUxN5Wb6O2J2/fmiL9pq57
 1m5YjxDwykI1zUbKoO3hZ9ae5dtZBcoN4VJBs8mAfy/ThGTAaz6T74638zaqbvY7+qfg4U
 VxwLOeL+kfDbt+wcLHFZjJh6rXYGIMvT10KxniQJd28/W/3DxSQVRfRKIXIBDThp+bh9wU
 P/lXOh2h5YCMtf65DtKdaoOdsLRBNLhZOgtMVGmrxGSBhIP0eLye1lMJxEYkWyY+13LFtg
 TToHITTQOHZxZzLqMlJEuYC7yyxX56HsRWsWZiBi9liGfP2DJxVqniDjFvjupQ==
From: Theodor Thornhill <theo@HIDDEN>
To: Ihor Radchenko <yantar92@HIDDEN>
Subject: Re: bug#70036: 30.0.50; Move file-truename to the C level
In-Reply-To: <87il16tw0l.fsf@localhost>
References: <87le63xzjt.fsf@HIDDEN> <87jzlmd831.fsf@localhost>
 <87v856wrj1.fsf@HIDDEN> <87r0futxj4.fsf@localhost>
 <875xx6y46j.fsf@HIDDEN> <87il16tw0l.fsf@localhost>
Date: Thu, 28 Mar 2024 13:47:27 +0100
Message-ID: <87zfuiwmjk.fsf@HIDDEN>
MIME-Version: 1.0
Content-Type: text/plain
X-Migadu-Flow: FLOW_OUT
X-Spam-Score: 0.0 (/)
X-Debbugs-Envelope-To: 70036
Cc: 70036 <at> debbugs.gnu.org
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -1.0 (-)

Ihor Radchenko <yantar92@HIDDEN> writes:

> Theodor Thornhill <theo@HIDDEN> writes:
>
>> I'm sorry, but I don't see the real difference here. Yes, the profile is
>> more detailed this way, but it doesn't change the fact that
>> file-truename is slow, does it?
>
> It does not, but it is important for your suggestion to move
> `file-truename' to the C level.
>
> If the slow parts of `file-truename' are the calls to C subroutines,
> rewriting `file-truename' in C will not help much with the performance.
> (Unless you try hard and move parts of the used subroutines into the C
> implementation of `file-truename', but that will involve copy-pasting
> parts of the existing code and cannot be a good idea without very strong
> justification)
>

Yeah, I agree with this.

>> The question to me is whether or not this is an acceptable performance
>> hit to take for eglot given what it's trying to do, and my opinion is
>> no. Whether or not it should be moved to C is open to suggestion. I'm
>> preparing a patch that only targets Eglot by removing reliance on this
>> function.
>
> If your aim is improving eglot performance specifically, sure.
> If your aim is improving `file-truename' performance in general, a more
> detailed analysis can be helpful.
>

And this.

Wrt eglot specifically or not - I'm not sure whether or not this affects
other parts of emacs. My guess is that it will, but I haven't
investigated that yet.

>>        17839  63% - command-execute
>>        17794  63%  - funcall-interactively
>>        17793  63%   - eval-last-sexp
>>        17793  63%    - #<compiled-function EF0>
>>        17793  63%     - elisp--eval-last-sexp
>>        17791  63%      - eval
>>        17791  63%       - benchmark-call
>>        17788  63%        - #<lambda 219>
>>        17783  63%         - file-truename
>>        17576  62%          - let
>> ...
>
> When you have recursive calls, it is generally more useful to view
> reversed calltree (B) in the profiler report. It will accumulate calls
> to the same function together, regardless on how deep in the call stack
> these calls are made.
>

TIL - thanks :)





Information forwarded to bug-gnu-emacs@HIDDEN:
bug#70036; Package emacs. Full text available.

Message received at 70036 <at> debbugs.gnu.org:


Received: (at 70036) by debbugs.gnu.org; 28 Mar 2024 12:09:01 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Thu Mar 28 08:09:01 2024
Received: from localhost ([127.0.0.1]:39288 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1rpoZ2-000288-Hi
	for submit <at> debbugs.gnu.org; Thu, 28 Mar 2024 08:09:01 -0400
Received: from out-174.mta0.migadu.com ([2001:41d0:1004:224b::ae]:10778)
 by debbugs.gnu.org with esmtp (Exim 4.84_2)
 (envelope-from <theo@HIDDEN>) id 1rpoYz-000279-HI
 for 70036 <at> debbugs.gnu.org; Thu, 28 Mar 2024 08:08:58 -0400
X-Report-Abuse: Please report any abuse attempt to abuse@HIDDEN and
 include these headers.
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=thornhill.no;
 s=key1; t=1711627729;
 h=from:from:reply-to:subject:subject:date:date:message-id:message-id:
 to:to:cc:cc:mime-version:mime-version:content-type:content-type:
 in-reply-to:in-reply-to:references:references;
 bh=WBpMWIZMnBvAJnOO1U8kMO0eLPAy3YaQQaKpYcyJKFQ=;
 b=x3IljinKolVusJWjgcVxfvv3C2DtsNuBtCe7aDghIwP32VDPnacUsryQO05eSGGKjEwjQy
 NxcenBW3VckGuyLgapeX/D+QqiConWJhg3ZJYzC7MCKARl0OpdBn6/cYdxn/ckL7mEP6LR
 rXYbQRhz4Uas3PXCb4WaDciMLo8EPCJKoQZavLQap5DrvpHbkaF3mYNRiWvCw9BHuOpMwJ
 VZd5nQHBhrJpTXoffMkbVDQ1mLc3SM5eH2y6eeDVuhAm7zp/oGlpC8aXCfLJlQslWwrNeV
 /WmjrS2lUYew8qWDFpyfeWF3BNLU1XqhR1uYai5myQWwW3BCtvDSaFspeAmmKQ==
From: Theodor Thornhill <theo@HIDDEN>
To: Felician Nemeth <felician.nemeth@HIDDEN>
Subject: Re: bug#70036: 30.0.50; Move file-truename to the C level
In-Reply-To: <875xx6muzt.fsf@HIDDEN>
References: <87le63xzjt.fsf@HIDDEN> <87ttkrqvru.fsf@HIDDEN>
 <87il17xsea.fsf@HIDDEN> <86wmpmhp0a.fsf@HIDDEN>
 <874jcqygpn.fsf@HIDDEN> <875xx6muzt.fsf@HIDDEN>
Date: Thu, 28 Mar 2024 13:08:45 +0100
Message-ID: <8734say2wi.fsf@HIDDEN>
MIME-Version: 1.0
Content-Type: multipart/mixed; boundary="=-=-="
X-Migadu-Flow: FLOW_OUT
X-Spam-Score: 0.0 (/)
X-Debbugs-Envelope-To: 70036
Cc: Eli Zaretskii <eliz@HIDDEN>, 70036 <at> debbugs.gnu.org
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -1.0 (-)

--=-=-=
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable

Felician Nemeth <felician.nemeth@HIDDEN> writes:

> Theodor Thornhill <theo@HIDDEN> writes:
>
>> This wouldn't help for the usage in find-buffer-visiting, though. But
>> this one could more easily be replaced by reworking the diagnostics
>> handler. We could store the last received diagnostics in the server
>> object, and do a quick lookup from known buffers there.
>
> eglot-handle-notification:textDocument/publishDiagnostics,
> eglot--xref-make-match, and eglot--apply-workspace-edit call
> find-buffer-visiting.  It seems to me only the first case might be
> really time sensitive.  Theo, can you email me the relevant messages
> that your server sends to Emacs?  Does the server send lots of similar
> diagnostics messages frequently?
>
> Thanks,
> Felici=C3=A1n

I'll try to include such a report a little later today. But yes, it
happens a lot. Consider the following patch, though. It eliminates the
issues for publishDiagnostics. It can easily be extended to the other
places where find-buffer-visiting is used.

The publishDiagnostics is sent on change from the server, so that isn't
directly initiated by Eglot.

What do you think?

Theo


--=-=-=
Content-Type: text/x-diff
Content-Disposition: attachment;
 filename=0001-Don-t-use-file-truepath-in-Eglot-bug-70036.patch

From d43fe85eae05baa07dd4c3e873a1b94542d97ea9 Mon Sep 17 00:00:00 2001
From: Theodor Thornhill <theo@HIDDEN>
Date: Thu, 28 Mar 2024 12:56:23 +0100
Subject: [PATCH] Don't use file-truepath in Eglot (bug#70036)

`file-truepath' is slow because of recursive calls and being implemented
in lisp.  It seems to not be needed in eglot, but it is used behind the
scenes in `find-buffer-visiting', thus appearing in profiles.  Moving
the implementation to a hash map will yield similar performance
benefits, but wouldn't require us to rewrite `file-truename' in C.

* lisp/progmodes/eglot.el (eglot-lsp-server): Convert 'managed-buffers'
to a hashmap.
(eglot-uri-to-path): Don't use file-truepath, as it is too slow to be
included in the hot path.
(eglot--on-shutdown): Use buffers from buffer map.
(eglot--managed-mode): Add buffer to map, rather than list. Also remove
it from the map on deactivation.
(eglot-handle-notification): Expose server and get buffer from the
buffer map.
---
 lisp/progmodes/eglot.el | 30 +++++++++++++++++-------------
 1 file changed, 17 insertions(+), 13 deletions(-)

diff --git a/lisp/progmodes/eglot.el b/lisp/progmodes/eglot.el
index 7d2f1a55165..c6dbca6fc6a 100644
--- a/lisp/progmodes/eglot.el
+++ b/lisp/progmodes/eglot.el
@@ -1053,8 +1053,8 @@ eglot-lsp-server
     :documentation "Map (DIR -> (WATCH ID1 ID2...)) for `didChangeWatchedFiles'."
     :initform (make-hash-table :test #'equal) :accessor eglot--file-watches)
    (managed-buffers
-    :initform nil
-    :documentation "List of buffers managed by server."
+    :documentation "Map (PATH -> BUFFER) for buffers managed by server."
+    :initform (make-hash-table :test #'equal)
     :accessor eglot--managed-buffers)
    (saved-initargs
     :documentation "Saved initargs for reconnection purposes."
@@ -1085,12 +1085,12 @@ eglot-uri-to-path
 
 (defun eglot-path-to-uri (path)
   "Convert PATH, a file name, to LSP URI string and return it."
-  (let ((truepath (file-truename path)))
+  (let ((expanded-path (expand-file-name path)))
     (if (and (url-type (url-generic-parse-url path))
              ;; It might be MS Windows path which includes a drive
              ;; letter that looks like a URL scheme (bug#59338)
              (not (and (eq system-type 'windows-nt)
-                       (file-name-absolute-p truepath))))
+                       (file-name-absolute-p expanded-path))))
         ;; Path is already a URI, so forward it to the LSP server
         ;; untouched.  The server should be able to handle it, since
         ;; it provided this URI to clients in the first place.
@@ -1098,11 +1098,11 @@ eglot-path-to-uri
       (concat "file://"
               ;; Add a leading "/" for local MS Windows-style paths.
               (if (and (eq system-type 'windows-nt)
-                       (not (file-remote-p truepath)))
+                       (not (file-remote-p expanded-path)))
                   "/")
               (url-hexify-string
                ;; Again watch out for trampy paths.
-               (directory-file-name (file-local-name truepath))
+               (directory-file-name (file-local-name expanded-path))
                eglot--uri-path-allowed-chars)))))
 
 (defun eglot-range-region (range &optional markers)
@@ -1187,7 +1187,7 @@ eglot--servers-by-xrefed-file
 (defun eglot--on-shutdown (server)
   "Called by jsonrpc.el when SERVER is already dead."
   ;; Turn off `eglot--managed-mode' where appropriate.
-  (dolist (buffer (eglot--managed-buffers server))
+  (dolist (buffer (map-values (eglot--managed-buffers server)))
     (let (;; Avoid duplicate shutdowns (github#389)
           (eglot-autoshutdown nil))
       (eglot--when-live-buffer buffer (eglot--managed-mode-off))))
@@ -1992,7 +1992,11 @@ eglot--managed-mode
       (add-hook 'eldoc-documentation-functions #'eglot-signature-eldoc-function
                 nil t)
       (eldoc-mode 1))
-    (cl-pushnew (current-buffer) (eglot--managed-buffers (eglot-current-server))))
+
+    (let ((buffer (current-buffer)))
+      (puthash (expand-file-name (buffer-file-name buffer))
+               buffer
+               (eglot--managed-buffers (eglot-current-server)))))
    (t
     (remove-hook 'after-change-functions #'eglot--after-change t)
     (remove-hook 'before-change-functions #'eglot--before-change t)
@@ -2020,10 +2024,10 @@ eglot--managed-mode
     (let ((server eglot--cached-server))
       (setq eglot--cached-server nil)
       (when server
-        (setf (eglot--managed-buffers server)
-              (delq (current-buffer) (eglot--managed-buffers server)))
+        (remhash (expand-file-name (buffer-file-name (current-buffer)))
+                 (eglot--managed-buffers server))
         (when (and eglot-autoshutdown
-                   (null (eglot--managed-buffers server)))
+                   (null (map-values (eglot--managed-buffers server))))
           (eglot-shutdown server)))))))
 
 (defun eglot--managed-mode-off ()
@@ -2346,7 +2350,7 @@ eglot-handle-notification
                           (remhash token (eglot--progress-reporters server))))))))))
 
 (cl-defmethod eglot-handle-notification
-  (_server (_method (eql textDocument/publishDiagnostics)) &key uri diagnostics
+  (server (_method (eql textDocument/publishDiagnostics)) &key uri diagnostics
            &allow-other-keys) ; FIXME: doesn't respect `eglot-strict-mode'
   "Handle notification publishDiagnostics."
   (cl-flet ((eglot--diag-type (sev)
@@ -2357,7 +2361,7 @@ eglot-handle-notification
             (mess (source code message)
               (concat source (and code (format " [%s]" code)) ": " message)))
     (if-let* ((path (expand-file-name (eglot-uri-to-path uri)))
-              (buffer (find-buffer-visiting path)))
+              (buffer (gethash path (eglot--managed-buffers server))))
         (with-current-buffer buffer
           (cl-loop
            initially
-- 
2.40.1


--=-=-=--




Information forwarded to bug-gnu-emacs@HIDDEN:
bug#70036; Package emacs. Full text available.

Message received at 70036 <at> debbugs.gnu.org:


Received: (at 70036) by debbugs.gnu.org; 28 Mar 2024 11:55:14 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Thu Mar 28 07:55:14 2024
Received: from localhost ([127.0.0.1]:39258 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1rpoLh-0000uc-Tc
	for submit <at> debbugs.gnu.org; Thu, 28 Mar 2024 07:55:14 -0400
Received: from mail-wm1-x32b.google.com ([2a00:1450:4864:20::32b]:61919)
 by debbugs.gnu.org with esmtp (Exim 4.84_2)
 (envelope-from <felician.nemeth@HIDDEN>) id 1rpoLf-0000tq-1A
 for 70036 <at> debbugs.gnu.org; Thu, 28 Mar 2024 07:55:12 -0400
Received: by mail-wm1-x32b.google.com with SMTP id
 5b1f17b1804b1-414970d4185so6407555e9.3
 for <70036 <at> debbugs.gnu.org>; Thu, 28 Mar 2024 04:55:10 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=gmail.com; s=20230601; t=1711626904; x=1712231704; darn=debbugs.gnu.org;
 h=content-transfer-encoding:mime-version:face:user-agent:message-id
 :in-reply-to:date:references:subject:cc:to:from:from:to:cc:subject
 :date:message-id:reply-to;
 bh=QDv4JkwEgB/2C2DOPBdiVMvC4pBds1CZfUP2YYX8nmY=;
 b=As6hoItS0+xENAHOaSkScUTmmlVCvpqTOfC/Ez0CYEkz6W3KYE2BSA2tpCo+BiIfbN
 dnvPC4WNSe3QmQOXmkCzIE1EWjfvMxdZXz8epW8g90L6SBaT/2yuqUWMr+J0a3/2r1IH
 NyMfSbQNSt2jg/0RjNwfK4ntIkeX7wxBObXAuMfEb9TkIR1CIVrb7SnueEz8MJi6MIjq
 v+sXRgzjKQI0gOro4r7129fNeJ3luqIXzszTbj1wLPDBdp3/TBoxfz7tIGV22qnJm1PK
 zRjs/DS+IM2qcOR/NyTi9RBpFwOTvt4aVBe6nwg6ADX3fIKWFhpRP7iKr4fNVFfdInaS
 jeTw==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=1e100.net; s=20230601; t=1711626904; x=1712231704;
 h=content-transfer-encoding:mime-version:face:user-agent:message-id
 :in-reply-to:date:references:subject:cc:to:from:x-gm-message-state
 :from:to:cc:subject:date:message-id:reply-to;
 bh=QDv4JkwEgB/2C2DOPBdiVMvC4pBds1CZfUP2YYX8nmY=;
 b=U9K/iuFMFivv4iGGypWmTcevQ5cl0P1zD6i9kTXVM4Gf9hDBHFQFHn4TONUj5v6Yrb
 uzT65LGQC3jEsd++36eKCJkvfPXmiDE1LUv842MMlR27P3TCFOH6Dgq3GNNqrE5B2Bv0
 VA+5w9Hup9cDr5rRFraalL8BID+yreVGACK7x/v5wjKCMwojEdCTTfB71wl5YdR+liwB
 lO8KE7hia7vNacxoW9ei0DRGhzqCriqvG7080vCl0DYuO2yjIrx8H5/U6ks5l+K+vpfc
 N+2igxfZG09j8MmnKLQ3qqM9S2MB/5+KjXYYXqufajKHGUA2VPue9d9NDQOteFifevEp
 pd0Q==
X-Forwarded-Encrypted: i=1;
 AJvYcCW2NOcUu/4KZul/lS7EuOeWHjSCoXgVWW8VBmCgzm5uvvONAs/CvEEMZWcFU0bq7LYIekVDAJFRMakDn55V4F02G5HV68Y=
X-Gm-Message-State: AOJu0Yygoa0IJgxZmwNp2i8UOrAVIGAryLQ1Oi7Vid2HiggJtz2DOjWf
 rSdwvDWqtRawDVK7k4fO0vo4YJPlcYJjvSeOf4h5fIoRzpZEFKAX4cJJ0kAr
X-Google-Smtp-Source: AGHT+IFRx+BZzVoUffJg9pBvUYZUTN5bbriaWLHSKAbRq9gnBE4NVrA8pYFC+PY+gCOjGYAUip4UjA==
X-Received: by 2002:a05:600c:4f4e:b0:413:fff2:a7d1 with SMTP id
 m14-20020a05600c4f4e00b00413fff2a7d1mr2259235wmq.29.1711626903985; 
 Thu, 28 Mar 2024 04:55:03 -0700 (PDT)
Received: from ulti.gmail.com ([2001:738:2001:407f:d329:3c92:fe6f:14c3])
 by smtp.gmail.com with ESMTPSA id
 bg3-20020a05600c3c8300b0041481207b23sm2118266wmb.8.2024.03.28.04.55.03
 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);
 Thu, 28 Mar 2024 04:55:03 -0700 (PDT)
From: Felician Nemeth <felician.nemeth@HIDDEN>
To: Theodor Thornhill <theo@HIDDEN>
Subject: Re: bug#70036: 30.0.50; Move file-truename to the C level
References: <87le63xzjt.fsf@HIDDEN> <87ttkrqvru.fsf@HIDDEN>
 <87il17xsea.fsf@HIDDEN> <86wmpmhp0a.fsf@HIDDEN>
 <874jcqygpn.fsf@HIDDEN>
Date: Thu, 28 Mar 2024 12:55:02 +0100
In-Reply-To: <874jcqygpn.fsf@HIDDEN> (Theodor Thornhill's message of
 "Thu, 28 Mar 2024 08:10:28 +0100")
Message-ID: <875xx6muzt.fsf@HIDDEN>
User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/28.2 (gnu/linux)
Face: iVBORw0KGgoAAAANSUhEUgAAADAAAAAwAgMAAAAqbBEUAAAABGdBTUEAALGPC/xhBQAAACBj
 SFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAADFBMVEX5+fmhoaEwMDD/
 ///TMNVWAAAAAWJLR0QDEQxM8gAAAAlwSFlzAAAPEgAADxIBIZvyMwAAAAd0SU1FB+AICBUfHgLs
 gGoAAAGXSURBVCjPRdK/b5tAFAfw753gBEwM2ApMbuVIqf+Ko0qiyhOu4sj2xJBYMn/FUdX7UUUZ
 OjHgyvf+yj6IcW6Bjx53934ADEvs8bmEr8UVoTYTOyJO9KoYsVofN8kILdbeJ8Li6YpZWop4xOK0
 VdfIoXmkHn5/5D7/Ts/8THacSqnkKTcMTxgUkVzFnEIRTKwwYYSCvzfg16f0i8YApW/XG/Pm8R49
 dXjxKmRnxv3OwooQWcv4RUYem1fsNe/WU63uk7AmYxk78y32/ee2tZB4fO+WcZ7lnIGEolXW1EGw
 LfkSuQ0XTgRefgNlfNwRNV6QhBxJ8JNxTMUPyBqTd0bjaAP5G7NJRU39z80hLOZTjqB7K3tEEFSj
 aEsuQew6qBxxyhHjVUR7H7NpC9iHJZGLMCEuweqAqE1BHbfK2oRIz9EHYA/+wiFWru9smeVfuWNZ
 2+NFtX80UA1TvJNdytM4DwO4kY7bJz8Qcd0G0ceslZGkkeoBsjUHwF1+jjM3XHaXEZ7mGLfwPFO+
 RV9QLY2iEdmDo78D/gNPaXVYqd+pyQAAACV0RVh0ZGF0ZTpjcmVhdGUAMjAxNi0wOC0wOFQyMzoz
 MDoyOCswMjowMGy/yHYAAAAldEVYdGRhdGU6bW9kaWZ5ADIwMTYtMDgtMDhUMjM6MzA6MjgrMDI6
 MDAd4nDKAAAAAElFTkSuQmCC
MIME-Version: 1.0
Content-Type: text/plain; charset=iso-8859-2
Content-Transfer-Encoding: quoted-printable
X-Spam-Score: 0.0 (/)
X-Debbugs-Envelope-To: 70036
Cc: Eli Zaretskii <eliz@HIDDEN>, 70036 <at> debbugs.gnu.org
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -1.0 (-)

Theodor Thornhill <theo@HIDDEN> writes:

> This wouldn't help for the usage in find-buffer-visiting, though. But
> this one could more easily be replaced by reworking the diagnostics
> handler. We could store the last received diagnostics in the server
> object, and do a quick lookup from known buffers there.

eglot-handle-notification:textDocument/publishDiagnostics,
eglot--xref-make-match, and eglot--apply-workspace-edit call
find-buffer-visiting.  It seems to me only the first case might be
really time sensitive.  Theo, can you email me the relevant messages
that your server sends to Emacs?  Does the server send lots of similar
diagnostics messages frequently?

Thanks,
Felici=E1n




Information forwarded to bug-gnu-emacs@HIDDEN:
bug#70036; Package emacs. Full text available.

Message received at 70036 <at> debbugs.gnu.org:


Received: (at 70036) by debbugs.gnu.org; 28 Mar 2024 11:51:11 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Thu Mar 28 07:51:11 2024
Received: from localhost ([127.0.0.1]:39243 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1rpoHm-0000Z2-Nu
	for submit <at> debbugs.gnu.org; Thu, 28 Mar 2024 07:51:11 -0400
Received: from mout02.posteo.de ([185.67.36.66]:59195)
 by debbugs.gnu.org with esmtp (Exim 4.84_2)
 (envelope-from <yantar92@HIDDEN>) id 1rpoHi-0000Xx-Mi
 for 70036 <at> debbugs.gnu.org; Thu, 28 Mar 2024 07:51:10 -0400
Received: from submission (posteo.de [185.67.36.169]) 
 by mout02.posteo.de (Postfix) with ESMTPS id B130E240103
 for <70036 <at> debbugs.gnu.org>; Thu, 28 Mar 2024 12:50:59 +0100 (CET)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=posteo.net; s=2017;
 t=1711626659; bh=pDFDrS4FYhDwIx7dH/CojKH818PJG2gZ4/1YK2ur4Cc=;
 h=From:To:Cc:Subject:Date:Message-ID:MIME-Version:Content-Type:
 From;
 b=B4AayFEJOq9dED5fjgyqaPLiMIfy+MkwoZU8ijjsBkhirop/6Ofgggnh7a6s8K9jF
 7IQyL5jqZAQadLv/KZKpijBFyEg9Y/N4tqNEkq5wvHTaa8KkipDqeeRCsjZSGTy0qZ
 eVtzDYAOfx2750C/5IcdfbFW9uE/tVacmlbBw+dCcAUZtoj9t91L/A8z7C0gj2TGmR
 5zpuKuPAp65f8lcupVRw3oKiU8bX1LvQ3vdTp6/6P799gC/GJQa/Nx1//wFpx0b51e
 3w1BbzqIFiUPnCwyUFqkWITtupFmseEA4qWBkZUlOdO7ZPs9RNTm+LWWO1mxbpS6Xu
 14uUpwzBRv5mw==
Received: from customer (localhost [127.0.0.1])
 by submission (posteo.de) with ESMTPSA id 4V521G6ccjz9rxB;
 Thu, 28 Mar 2024 12:50:58 +0100 (CET)
From: Ihor Radchenko <yantar92@HIDDEN>
To: Theodor Thornhill <theo@HIDDEN>
Subject: Re: bug#70036: 30.0.50; Move file-truename to the C level
In-Reply-To: <875xx6y46j.fsf@HIDDEN>
References: <87le63xzjt.fsf@HIDDEN> <87jzlmd831.fsf@localhost>
 <87v856wrj1.fsf@HIDDEN> <87r0futxj4.fsf@localhost>
 <875xx6y46j.fsf@HIDDEN>
Date: Thu, 28 Mar 2024 11:51:06 +0000
Message-ID: <87il16tw0l.fsf@localhost>
MIME-Version: 1.0
Content-Type: text/plain
X-Spam-Score: -2.3 (--)
X-Debbugs-Envelope-To: 70036
Cc: 70036 <at> debbugs.gnu.org
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -3.3 (---)

Theodor Thornhill <theo@HIDDEN> writes:

> I'm sorry, but I don't see the real difference here. Yes, the profile is
> more detailed this way, but it doesn't change the fact that
> file-truename is slow, does it?

It does not, but it is important for your suggestion to move
`file-truename' to the C level.

If the slow parts of `file-truename' are the calls to C subroutines,
rewriting `file-truename' in C will not help much with the performance.
(Unless you try hard and move parts of the used subroutines into the C
implementation of `file-truename', but that will involve copy-pasting
parts of the existing code and cannot be a good idea without very strong
justification)

> The question to me is whether or not this is an acceptable performance
> hit to take for eglot given what it's trying to do, and my opinion is
> no. Whether or not it should be moved to C is open to suggestion. I'm
> preparing a patch that only targets Eglot by removing reliance on this
> function.

If your aim is improving eglot performance specifically, sure.
If your aim is improving `file-truename' performance in general, a more
detailed analysis can be helpful.

>        17839  63% - command-execute
>        17794  63%  - funcall-interactively
>        17793  63%   - eval-last-sexp
>        17793  63%    - #<compiled-function EF0>
>        17793  63%     - elisp--eval-last-sexp
>        17791  63%      - eval
>        17791  63%       - benchmark-call
>        17788  63%        - #<lambda 219>
>        17783  63%         - file-truename
>        17576  62%          - let
> ...

When you have recursive calls, it is generally more useful to view
reversed calltree (B) in the profiler report. It will accumulate calls
to the same function together, regardless on how deep in the call stack
these calls are made.

-- 
Ihor Radchenko // yantar92,
Org mode contributor,
Learn more about Org mode at <https://orgmode.org/>.
Support Org development at <https://liberapay.com/org-mode>,
or support my work at <https://liberapay.com/yantar92>




Information forwarded to bug-gnu-emacs@HIDDEN:
bug#70036; Package emacs. Full text available.

Message received at 70036 <at> debbugs.gnu.org:


Received: (at 70036) by debbugs.gnu.org; 28 Mar 2024 11:41:25 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Thu Mar 28 07:41:25 2024
Received: from localhost ([127.0.0.1]:39223 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1rpo8K-0008Bg-IR
	for submit <at> debbugs.gnu.org; Thu, 28 Mar 2024 07:41:24 -0400
Received: from out-184.mta1.migadu.com ([95.215.58.184]:26337)
 by debbugs.gnu.org with esmtp (Exim 4.84_2)
 (envelope-from <theo@HIDDEN>) id 1rpo8G-0008Aj-Ny
 for 70036 <at> debbugs.gnu.org; Thu, 28 Mar 2024 07:41:22 -0400
X-Report-Abuse: Please report any abuse attempt to abuse@HIDDEN and
 include these headers.
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=thornhill.no;
 s=key1; t=1711626073;
 h=from:from:reply-to:subject:subject:date:date:message-id:message-id:
 to:to:cc:cc:mime-version:mime-version:content-type:content-type:
 in-reply-to:in-reply-to:references:references;
 bh=3b0JR+VrbMtbW4J14nJrHwQeZgm1Yx807o4y4k0m4ok=;
 b=BEqt0xVVdvTxL7AM6KOeFtvIYOGRvVuQX5H1TZvMfxmqclM9BPlGx1YsqCqHJYaiUoaYYs
 syv7aCWCZZQxwY47+mmh2Ob23eEr70pduu0eRlzhqPPLXBIxde60tZJEE23yyB7HkzSONC
 7/eg8C4WINFEIp/48GYGRB6GbJqHfBuzcfFZD84TexQjAXKczOw3vmRu4MPGwHeWenbqZE
 QNq5Z/67mMMeqjEPSwSkACVvRf/TCsXkKqMoE/MamEzNJbAiryZ8KWRiMezEnXvPc4QJqL
 a73mEFX0wKUS0vkNuzriGhoUCWOS3rrW/wq7qQuT+INDZsuHihk71tx+KeJM5Q==
From: Theodor Thornhill <theo@HIDDEN>
To: Ihor Radchenko <yantar92@HIDDEN>
Subject: Re: bug#70036: 30.0.50; Move file-truename to the C level
In-Reply-To: <87r0futxj4.fsf@localhost>
References: <87le63xzjt.fsf@HIDDEN> <87jzlmd831.fsf@localhost>
 <87v856wrj1.fsf@HIDDEN> <87r0futxj4.fsf@localhost>
Date: Thu, 28 Mar 2024 12:41:08 +0100
Message-ID: <875xx6y46j.fsf@HIDDEN>
MIME-Version: 1.0
Content-Type: text/plain
X-Migadu-Flow: FLOW_OUT
X-Spam-Score: 0.0 (/)
X-Debbugs-Envelope-To: 70036
Cc: 70036 <at> debbugs.gnu.org
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -1.0 (-)

Ihor Radchenko <yantar92@HIDDEN> writes:

> Theodor Thornhill <theo@HIDDEN> writes:
>
>> Not sure I understand what you mean. I tried it again, but this time the
>> call is 100000 times and in an existing file on my system which is
>> deeply nested. I run emacs with `emacs -Q` from a build on
>> `30b1b0d7cd8e4d46a601e9737350cda970f6bab0`.
>>
>> the relevant part from the profile this time:
>> ```
>>        15478  72% - command-execute
>>        15440  72%  - funcall-interactively
>>        15439  72%   - eval-last-sexp
>>        15439  72%    - #<compiled-function 0C4>
>>        15439  72%     - elisp--eval-last-sexp
>>        15436  71%      - eval
>>        15436  71%       - benchmark-call
>>        15434  71%        - #<lambda E8B>
>>        15434  71%         - file-truename
>>        13536  63%          - file-truename
>>        12224  57%           - file-truename
>> ...
>> To me this looks like it spends a lot of time in recursive calls
>
> No. It is just that your `file-truename' is native-compiled and the
> profiler is unable to get the details from inside native subr code.
>
> You can re-evaluate the defun to reveal the details in the profiler
> output. Or use Emacs compiled without native-compilation support.
>
> -- 
> Ihor Radchenko // yantar92,
> Org mode contributor,
> Learn more about Org mode at <https://orgmode.org/>.
> Support Org development at <https://liberapay.com/org-mode>,
> or support my work at <https://liberapay.com/yantar92>

I'm sorry, but I don't see the real difference here. Yes, the profile is
more detailed this way, but it doesn't change the fact that
file-truename is slow, does it?

The question to me is whether or not this is an acceptable performance
hit to take for eglot given what it's trying to do, and my opinion is
no. Whether or not it should be moved to C is open to suggestion. I'm
preparing a patch that only targets Eglot by removing reliance on this
function.

Theo

```
       17839  63% - command-execute
       17794  63%  - funcall-interactively
       17793  63%   - eval-last-sexp
       17793  63%    - #<compiled-function EF0>
       17793  63%     - elisp--eval-last-sexp
       17791  63%      - eval
       17791  63%       - benchmark-call
       17788  63%        - #<lambda 219>
       17783  63%         - file-truename
       17576  62%          - let
       17546  62%           - while
       17529  62%            - let
       17358  61%             - if
       17356  61%              - let
       16365  58%               - or
       15969  56%                - if
       15964  56%                 - let
       15951  56%                  - file-name-as-directory
       15824  56%                   - file-truename
       15788  56%                    - let
       15768  56%                     - while
       15712  55%                      - let
       15579  55%                       - if
       15577  55%                        - let
        7224  25%                         - or
        3429  12%                          - if
        3325  11%                           - let
        3059  10%                            - file-name-as-directory
        1866   6%                             - file-truename
        1501   5%                              - let
        1276   4%                               - while
        1121   3%                                - let
        1004   3%                                   find-file-name-handler
          18   0%                                   if
          49   0%                                - setcar
          26   0%                                   1-
          37   0%                                - if
          23   0%                                   <
          36   0%                                  not
          97   0%                               - if
          46   0%                                - eq
           8   0%                                   quote
           7   0%                                 or
         218   0%                              - cond
         112   0%                               - and
          95   0%                                - string=
          73   0%                                   substring
          82   0%                               - or
          57   0%                                  string=
          17   0%                                or
         123   0%                            - setcar
          83   0%                             - cons
```




Information forwarded to bug-gnu-emacs@HIDDEN:
bug#70036; Package emacs. Full text available.

Message received at 70036 <at> debbugs.gnu.org:


Received: (at 70036) by debbugs.gnu.org; 28 Mar 2024 11:18:30 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Thu Mar 28 07:18:30 2024
Received: from localhost ([127.0.0.1]:39200 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1rpnm8-0003Ro-RM
	for submit <at> debbugs.gnu.org; Thu, 28 Mar 2024 07:18:29 -0400
Received: from mout02.posteo.de ([185.67.36.66]:41829)
 by debbugs.gnu.org with esmtp (Exim 4.84_2)
 (envelope-from <yantar92@HIDDEN>) id 1rpnm4-0003Qu-Px
 for 70036 <at> debbugs.gnu.org; Thu, 28 Mar 2024 07:18:27 -0400
Received: from submission (posteo.de [185.67.36.169]) 
 by mout02.posteo.de (Postfix) with ESMTPS id 346BF240104
 for <70036 <at> debbugs.gnu.org>; Thu, 28 Mar 2024 12:18:17 +0100 (CET)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=posteo.net; s=2017;
 t=1711624697; bh=td7t6LEN0/qZXYt6Mzs8Ys2JeEOZBjVO8zajkH00fqM=;
 h=From:To:Cc:Subject:Date:Message-ID:MIME-Version:Content-Type:
 From;
 b=JecxYgESTMQFJFOqsNYo5vJv3N1AimrGBqf3JlKZafOOlF/LJff+MrkX7z7yfL90G
 ydqI9+uePMulyiEYTayM6sI/wZD4eFDOj67zNuE2rhmZRjXAstvUOspmmZxdXs1fcK
 ljqmnBP9T6ZcAdx0pbMf4FIr8AtGbd/ZzBcOeyAD8pcMF+omzr7UEvjFLMgWINGL0/
 5FUsKetkq3e+4/Z1lTHU/EAEeoQQuTQXLoMHScPVJ3ZCdlOoCERBdkt+QmqiYZNsMV
 8RWH64HRIt5DfqpUrpt/5r5iTsKNRpN6b8vcdH+6AxRUWERPiAnKa8J3GLUxw3djBA
 l19EiPecx1aYw==
Received: from customer (localhost [127.0.0.1])
 by submission (posteo.de) with ESMTPSA id 4V51HX0pXkz9rxB;
 Thu, 28 Mar 2024 12:18:15 +0100 (CET)
From: Ihor Radchenko <yantar92@HIDDEN>
To: Theodor Thornhill <theo@HIDDEN>
Subject: Re: bug#70036: 30.0.50; Move file-truename to the C level
In-Reply-To: <87v856wrj1.fsf@HIDDEN>
References: <87le63xzjt.fsf@HIDDEN> <87jzlmd831.fsf@localhost>
 <87v856wrj1.fsf@HIDDEN>
Date: Thu, 28 Mar 2024 11:18:23 +0000
Message-ID: <87r0futxj4.fsf@localhost>
MIME-Version: 1.0
Content-Type: text/plain
X-Spam-Score: -2.3 (--)
X-Debbugs-Envelope-To: 70036
Cc: 70036 <at> debbugs.gnu.org
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -3.3 (---)

Theodor Thornhill <theo@HIDDEN> writes:

> Not sure I understand what you mean. I tried it again, but this time the
> call is 100000 times and in an existing file on my system which is
> deeply nested. I run emacs with `emacs -Q` from a build on
> `30b1b0d7cd8e4d46a601e9737350cda970f6bab0`.
>
> the relevant part from the profile this time:
> ```
>        15478  72% - command-execute
>        15440  72%  - funcall-interactively
>        15439  72%   - eval-last-sexp
>        15439  72%    - #<compiled-function 0C4>
>        15439  72%     - elisp--eval-last-sexp
>        15436  71%      - eval
>        15436  71%       - benchmark-call
>        15434  71%        - #<lambda E8B>
>        15434  71%         - file-truename
>        13536  63%          - file-truename
>        12224  57%           - file-truename
> ...
> To me this looks like it spends a lot of time in recursive calls

No. It is just that your `file-truename' is native-compiled and the
profiler is unable to get the details from inside native subr code.

You can re-evaluate the defun to reveal the details in the profiler
output. Or use Emacs compiled without native-compilation support.

-- 
Ihor Radchenko // yantar92,
Org mode contributor,
Learn more about Org mode at <https://orgmode.org/>.
Support Org development at <https://liberapay.com/org-mode>,
or support my work at <https://liberapay.com/yantar92>




Information forwarded to bug-gnu-emacs@HIDDEN:
bug#70036; Package emacs. Full text available.

Message received at 70036 <at> debbugs.gnu.org:


Received: (at 70036) by debbugs.gnu.org; 28 Mar 2024 11:00:02 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Thu Mar 28 07:00:02 2024
Received: from localhost ([127.0.0.1]:39184 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1rpnUG-0001ps-HY
	for submit <at> debbugs.gnu.org; Thu, 28 Mar 2024 07:00:01 -0400
Received: from out-175.mta0.migadu.com ([2001:41d0:1004:224b::af]:55273)
 by debbugs.gnu.org with esmtp (Exim 4.84_2)
 (envelope-from <theo@HIDDEN>) id 1rpnUD-0001ox-Kw
 for 70036 <at> debbugs.gnu.org; Thu, 28 Mar 2024 06:59:59 -0400
X-Report-Abuse: Please report any abuse attempt to abuse@HIDDEN and
 include these headers.
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=thornhill.no;
 s=key1; t=1711623590;
 h=from:from:reply-to:subject:subject:date:date:message-id:message-id:
 to:to:cc:cc:mime-version:mime-version:content-type:content-type:
 in-reply-to:in-reply-to:references:references;
 bh=zch7rFV8HCf+VNhzYWcqY5WKqV7oAXOYHpMMUreB8pg=;
 b=ZXmm7iPhSQ/USZPana6jrNNid6YYfuIF4juD+Yr+1QbZ0jJaMCqcRPXuq10RV67f8aGqe7
 nZuXJbIqCNJhlzFdlkIt/KX788uq3D0uMY+tXrGtI0kUbLcUiY0wPheiU0KQmsYZ7O2Gwa
 eE2Cr5bZqOVxWB5sqqBBLaUGwMqOtQ7HZklaMgkTvpv95RuXBY8KPbCVoqgIA0TejrpEfp
 iRlCdfl+YGKzxTITGSnMA98fIY4ASIagfHToyBrcdBYpzcjtIU2hpXDR8F/Hf9VKc+FWIs
 38QJUaKCiN0wQLmwqP4qx6ZNnjIybnyc+ReHkgyZrfKkC6jSxUEARSqt0Zue4Q==
From: Theodor Thornhill <theo@HIDDEN>
To: Ihor Radchenko <yantar92@HIDDEN>
Subject: Re: bug#70036: 30.0.50; Move file-truename to the C level
In-Reply-To: <87jzlmd831.fsf@localhost>
References: <87le63xzjt.fsf@HIDDEN> <87jzlmd831.fsf@localhost>
Date: Thu, 28 Mar 2024 11:59:46 +0100
Message-ID: <87v856wrj1.fsf@HIDDEN>
MIME-Version: 1.0
Content-Type: text/plain
X-Migadu-Flow: FLOW_OUT
X-Spam-Score: 0.0 (/)
X-Debbugs-Envelope-To: 70036
Cc: 70036 <at> debbugs.gnu.org
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -1.0 (-)

Ihor Radchenko <yantar92@HIDDEN> writes:

> Theodor Thornhill via "Bug reports for GNU Emacs, the Swiss army knife
> of text editors" <bug-gnu-emacs@HIDDEN> writes:
>
>> Firstly, I'll show some benchmarks
>>
>> ```
>> ;; Emacs 29 branch
>>
>> (benchmark-run 10000
>>   (file-truename "~/Work/some/long/path/to/parse/that/is/very/deep/deep/deep/super/duper/deep/deep.el"))
>> ;; (1.810892642 1 0.051070616)
>> ...
>> Below are the profiles and the patch. On my system I needed to `ln -s
>> lisp/loadup.el .` to make it compile. Not sure if that is due to
>> differences between old and new `file-truename`, or something else.
>
> The profiles look fishy. For example, in emacs-30-before
>

Not sure I understand what you mean. I tried it again, but this time the
call is 100000 times and in an existing file on my system which is
deeply nested. I run emacs with `emacs -Q` from a build on
`30b1b0d7cd8e4d46a601e9737350cda970f6bab0`.

the relevant part from the profile this time:
```
       15478  72% - command-execute
       15440  72%  - funcall-interactively
       15439  72%   - eval-last-sexp
       15439  72%    - #<compiled-function 0C4>
       15439  72%     - elisp--eval-last-sexp
       15436  71%      - eval
       15436  71%       - benchmark-call
       15434  71%        - #<lambda E8B>
       15434  71%         - file-truename
       13536  63%          - file-truename
       12224  57%           - file-truename
       10970  51%            - file-truename
        9673  45%             - file-truename
        8468  39%              - file-truename
        7420  34%               - file-truename
        6374  29%                - file-truename
        5286  24%                 - file-truename
        4275  19%                  - file-truename
        3313  15%                   - file-truename
        2454  11%                    - file-truename
        1652   7%                     - file-truename
         984   4%                      - file-truename
         376   1%                         file-truename
           1   0%          time-since
           1   0%     execute-extended-command
```

To me this looks like it spends a lot of time in recursive calls

Theo




Information forwarded to bug-gnu-emacs@HIDDEN:
bug#70036; Package emacs. Full text available.

Message received at 70036 <at> debbugs.gnu.org:


Received: (at 70036) by debbugs.gnu.org; 28 Mar 2024 09:22:31 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Thu Mar 28 05:22:31 2024
Received: from localhost ([127.0.0.1]:39056 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1rplxu-0002mf-Rp
	for submit <at> debbugs.gnu.org; Thu, 28 Mar 2024 05:22:30 -0400
Received: from mout02.posteo.de ([185.67.36.66]:41263)
 by debbugs.gnu.org with esmtp (Exim 4.84_2)
 (envelope-from <yantar92@HIDDEN>) id 1rplxs-0002lw-1L
 for 70036 <at> debbugs.gnu.org; Thu, 28 Mar 2024 05:22:28 -0400
Received: from submission (posteo.de [185.67.36.169]) 
 by mout02.posteo.de (Postfix) with ESMTPS id 0EF61240101
 for <70036 <at> debbugs.gnu.org>; Thu, 28 Mar 2024 10:22:20 +0100 (CET)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=posteo.net; s=2017;
 t=1711617741; bh=CQxQxrYYSQz5C5oja1BEDF67crzNOJ/4OtY8Tmxs/a0=;
 h=From:To:Cc:Subject:Date:Message-ID:MIME-Version:Content-Type:
 From;
 b=TiCzphK2zW/+Upcg27LORp+hlFxfF7zUaIV9Gye6a4gjWVtGUTrVr1YZ8qVe+g7Ck
 kPcZXdfBKI5FzdZSMOxEP1bc6EjId0ynwKYNXvGwJkgRb+e7RY5uQ4iK/DXHEvWEt2
 BF80AV3/AL0kg0KuGFsnbwXJfTLYnl533RN64bcQc8AIRjwDwGNZ2zsmNqxxFV4xK1
 kGJJzc+1v2wgv5LwXAv34tgfk2HETNYTkgm3+JaeV8Ylt6dSJXsJCxSeTyzViVVCW9
 lyncKzvyJqU73q6L6jtuKyodQ45ZKWJZNYYlAiIPonPHHk9JU2CuSF30DpEe+XIf79
 j5H3JzNZaOmHA==
Received: from customer (localhost [127.0.0.1])
 by submission (posteo.de) with ESMTPSA id 4V4yjk71Lpz9rxB;
 Thu, 28 Mar 2024 10:22:18 +0100 (CET)
From: Ihor Radchenko <yantar92@HIDDEN>
To: Theodor Thornhill <theo@HIDDEN>
Subject: Re: bug#70036: 30.0.50; Move file-truename to the C level
In-Reply-To: <87le63xzjt.fsf@HIDDEN>
References: <87le63xzjt.fsf@HIDDEN>
Date: Thu, 28 Mar 2024 09:22:26 +0000
Message-ID: <87jzlmd831.fsf@localhost>
MIME-Version: 1.0
Content-Type: multipart/mixed; boundary="=-=-="
X-Debbugs-Envelope-To: 70036
Cc: 70036 <at> debbugs.gnu.org
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>

--=-=-=
Content-Type: text/plain

Theodor Thornhill via "Bug reports for GNU Emacs, the Swiss army knife
of text editors" <bug-gnu-emacs@HIDDEN> writes:

> Firstly, I'll show some benchmarks
>
> ```
> ;; Emacs 29 branch
>
> (benchmark-run 10000
>   (file-truename "~/Work/some/long/path/to/parse/that/is/very/deep/deep/deep/super/duper/deep/deep.el"))
> ;; (1.810892642 1 0.051070616)
> ...
> Below are the profiles and the patch. On my system I needed to `ln -s
> lisp/loadup.el .` to make it compile. Not sure if that is due to
> differences between old and new `file-truename`, or something else.

The profiles look fishy. For example, in emacs-30-before

          73  15%           - file-truename

73 is ~0.073 seconds, which cannot be right if you profiled the above
`benchmark-run'.

I tried to record the profiles on my side, using the above
`benchmark-run' call, and what I am seeing is that most of the CPU time
is already spend in C subrs:

        1285  17% + file-name-nondirectory
        1250  16%   Automatic GC
        1182  15% + file-symlink-p
        1060  14% + file-name-case-insensitive-p
         495   6% + find-file-name-handler
         451   6% + file-name-as-directory
         425   5% + file-name-directory
         401   5% - directory-file-name
         398   5%  + setq

I am attaching my profile, as saved via M-x
profiler-report-write-profile. You can view it via M-x
profile-report-find-profile

At least, the number of calls to `file-name-nondirectory' can be
trivially reduced in the `file-truename' code - it is called up to three
times in a row.


--=-=-=
Content-Type: application/octet-stream
Content-Disposition: attachment; filename=profile-emacs-master.eld
Content-Transfer-Encoding: base64

Cltwcm9maWxlci1wcm9maWxlICIyOC4xIiBjcHUgI3MoaGFzaC10YWJsZSB0ZXN0IGVxdWFsIGRh
dGEgKFsicmVkaXNwbGF5X2ludGVybmFsIChDIGZ1bmN0aW9uKSIgIygicmVkaXNwbGF5IiAwIDkg
KGhlbHAtYXJncyAocmVkaXNwbGF5KSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0
b24gKHQpKSkgIygibm90bXVjaC1zaG93LWNvbW1hbmQtaG9vayIgMCAyNSAoaGVscC1hcmdzIChu
b3RtdWNoLXNob3ctY29tbWFuZC1ob29rKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBi
dXR0b24gKHQpKSkgIm5pbCIgIm5pbCIgIm5pbCIgIm5pbCIgIm5pbCIgIm5pbCIgIm5pbCIgIm5p
bCIgIm5pbCIgIm5pbCIgIm5pbCIgIm5pbCIgIm5pbCJdIDcgWyJyZWRpc3BsYXlfaW50ZXJuYWwg
KEMgZnVuY3Rpb24pIiAibmlsIiAibmlsIiAibmlsIiAibmlsIiAibmlsIiAibmlsIiAibmlsIiAi
bmlsIiAibmlsIiAibmlsIiAibmlsIiAibmlsIiAibmlsIiAibmlsIiAibmlsIl0gMTEgWyMoImZp
bGUtbmFtZS1jYXNlLWluc2Vuc2l0aXZlLXAiIDAgMjggKGhlbHAtYXJncyAoZmlsZS1uYW1lLWNh
c2UtaW5zZW5zaXRpdmUtcCkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0
KSkpICMoImFuZCIgMCAzIChoZWxwLWFyZ3MgKGFuZCkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1i
dXR0b24gYnV0dG9uICh0KSkpICMoIm9yIiAwIDIgKGhlbHAtYXJncyAob3IpIGNhdGVnb3J5IGhl
bHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJsZXQiIDAgMyAoaGVscC1hcmdzIChs
ZXQpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJpZiIgMCAy
IChoZWxwLWFyZ3MgKGlmKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQp
KSkgIygibGV0IiAwIDMgKGhlbHAtYXJncyAobGV0KSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1
dHRvbiBidXR0b24gKHQpKSkgIygid2hpbGUiIDAgNSAoaGVscC1hcmdzICh3aGlsZSkgY2F0ZWdv
cnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImxldCIgMCAzIChoZWxwLWFy
Z3MgKGxldCkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImZp
bGUtdHJ1ZW5hbWUiIDAgMTMgKGhlbHAtYXJncyAoZmlsZS10cnVlbmFtZSkgY2F0ZWdvcnkgaGVs
cC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImZpbGUtbmFtZS1hcy1kaXJlY3Rvcnki
IDAgMjIgKGhlbHAtYXJncyAoZmlsZS1uYW1lLWFzLWRpcmVjdG9yeSkgY2F0ZWdvcnkgaGVscC1m
dW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImxldCIgMCAzIChoZWxwLWFyZ3MgKGxldCkg
Y2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImlmIiAwIDIgKGhl
bHAtYXJncyAoaWYpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAj
KCJvciIgMCAyIChoZWxwLWFyZ3MgKG9yKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBi
dXR0b24gKHQpKSkgIygibGV0IiAwIDMgKGhlbHAtYXJncyAobGV0KSBjYXRlZ29yeSBoZWxwLWZ1
bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygiaWYiIDAgMiAoaGVscC1hcmdzIChpZikgY2F0
ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImxldCIgMCAzIChoZWxw
LWFyZ3MgKGxldCkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpXSA5
NzMgWyMoImZpbGUtc3ltbGluay1wIiAwIDE0IChoZWxwLWFyZ3MgKGZpbGUtc3ltbGluay1wKSBj
YXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygic2V0cSIgMCA0ICho
ZWxwLWFyZ3MgKHNldHEpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkp
KSAjKCJpZiIgMCAyIChoZWxwLWFyZ3MgKGlmKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRv
biBidXR0b24gKHQpKSkgIygiaWYiIDAgMiAoaGVscC1hcmdzIChpZikgY2F0ZWdvcnkgaGVscC1m
dW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImxldCIgMCAzIChoZWxwLWFyZ3MgKGxldCkg
Y2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImlmIiAwIDIgKGhl
bHAtYXJncyAoaWYpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAj
KCJsZXQiIDAgMyAoaGVscC1hcmdzIChsZXQpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9u
IGJ1dHRvbiAodCkpKSAjKCJ3aGlsZSIgMCA1IChoZWxwLWFyZ3MgKHdoaWxlKSBjYXRlZ29yeSBo
ZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygibGV0IiAwIDMgKGhlbHAtYXJncyAo
bGV0KSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygiZmlsZS10
cnVlbmFtZSIgMCAxMyAoaGVscC1hcmdzIChmaWxlLXRydWVuYW1lKSBjYXRlZ29yeSBoZWxwLWZ1
bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygiIzxsYW1iZGEgMzdGPiIgOSAxMiAoYWN0aW9u
IGhlbHAtZm5zLS1kaXNwbGF5LWZ1bmN0aW9uIGtleW1hcCAoa2V5bWFwICh0b3VjaHNjcmVlbi1k
b3duIC4gcHVzaC1idXR0b24pIChoZWFkZXItbGluZSBrZXltYXAgKHRvdWNoc2NyZWVuLWRvd24g
LiBwdXNoLWJ1dHRvbikgKG1vdXNlLTIgLiBwdXNoLWJ1dHRvbikpIChtb2RlLWxpbmUga2V5bWFw
ICh0b3VjaHNjcmVlbi1kb3duIC4gcHVzaC1idXR0b24pIChtb3VzZS0yIC4gcHVzaC1idXR0b24p
KSAoZm9sbG93LWxpbmsgLiBtb3VzZS1mYWNlKSAobW91c2UtMiAuIHB1c2gtYnV0dG9uKSAoMTMg
LiBwdXNoLWJ1dHRvbikga2V5bWFwIChiYWNrdGFiIC4gYmFja3dhcmQtYnV0dG9uKSAoMjcga2V5
bWFwICg5IC4gYmFja3dhcmQtYnV0dG9uKSkgKDkgLiBmb3J3YXJkLWJ1dHRvbikpIGJ1dHRvbi1k
YXRhIChsYW1iZGEgbmlsIChmaWxlLXRydWVuYW1lICJ+L1dvcmsvc29tZS9sb25nL3BhdGgvdG8v
cGFyc2UvdGhhdC9pcy92ZXJ5L2RlZXAvZGVlcC9kZWVwL3N1cGVyL2R1cGVyL2RlZXAvZGVlcC5l
bCIpKSBjYXRlZ29yeSB0IGZvbGxvdy1saW5rIHQgYnV0dG9uIHQgaGVscC1lY2hvICJtb3VzZS0y
LCBSRVQ6IERpc3BsYXkgdGhlIGZ1bmN0aW9uJ3MgYm9keSIgbW91c2UtZmFjZSBoaWdobGlnaHQg
Zm9udC1sb2NrLWZhY2UgYnV0dG9uIGZhY2UgYnV0dG9uKSkgIygiYmVuY2htYXJrLWNhbGwiIDAg
MTQgKGhlbHAtYXJncyAoYmVuY2htYXJrLWNhbGwpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0
dG9uIGJ1dHRvbiAodCkpKSAjKCJldmFsIiAwIDQgKGhlbHAtYXJncyAoZXZhbCkgY2F0ZWdvcnkg
aGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImVsaXNwLS1ldmFsLWxhc3Qtc2V4
cCIgMCAyMSAoaGVscC1hcmdzIChlbGlzcC0tZXZhbC1sYXN0LXNleHApIGNhdGVnb3J5IGhlbHAt
ZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCIjPGNvbXBpbGVkLWZ1bmN0aW9uIENCOD4i
IDIwIDIzIChhY3Rpb24gaGVscC1mbnMtLWRpc3BsYXktZnVuY3Rpb24ga2V5bWFwIChrZXltYXAg
KHRvdWNoc2NyZWVuLWRvd24gLiBwdXNoLWJ1dHRvbikgKGhlYWRlci1saW5lIGtleW1hcCAodG91
Y2hzY3JlZW4tZG93biAuIHB1c2gtYnV0dG9uKSAobW91c2UtMiAuIHB1c2gtYnV0dG9uKSkgKG1v
ZGUtbGluZSBrZXltYXAgKHRvdWNoc2NyZWVuLWRvd24gLiBwdXNoLWJ1dHRvbikgKG1vdXNlLTIg
LiBwdXNoLWJ1dHRvbikpIChmb2xsb3ctbGluayAuIG1vdXNlLWZhY2UpIChtb3VzZS0yIC4gcHVz
aC1idXR0b24pICgxMyAuIHB1c2gtYnV0dG9uKSBrZXltYXAgKGJhY2t0YWIgLiBiYWNrd2FyZC1i
dXR0b24pICgyNyBrZXltYXAgKDkgLiBiYWNrd2FyZC1idXR0b24pKSAoOSAuIGZvcndhcmQtYnV0
dG9uKSkgYnV0dG9uLWRhdGEgI1swICJcMzAxXDMwMCFcMjA3IiBbbmlsIGVsaXNwLS1ldmFsLWxh
c3Qtc2V4cF0gMl0gY2F0ZWdvcnkgdCBmb2xsb3ctbGluayB0IGJ1dHRvbiB0IGhlbHAtZWNobyAi
bW91c2UtMiwgUkVUOiBEaXNwbGF5IHRoZSBmdW5jdGlvbidzIGJvZHkiIG1vdXNlLWZhY2UgaGln
aGxpZ2h0IGZvbnQtbG9jay1mYWNlIGJ1dHRvbiBmYWNlIGJ1dHRvbikpICMoIiM8c3Vici1uYXRp
dmUtZWxpc3AgZXZhbC1sYXN0LXNleHA+IiAyMCAzNCAoYnV0dG9uICh0KSBjYXRlZ29yeSBoZWxw
LWZ1bmN0aW9uLWJ1dHRvbiBoZWxwLWFyZ3MgKGV2YWwtbGFzdC1zZXhwKSkpXSA2OCBbIygiZmls
ZS1uYW1lLW5vbmRpcmVjdG9yeSIgMCAyMiAoaGVscC1hcmdzIChmaWxlLW5hbWUtbm9uZGlyZWN0
b3J5KSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygiZXF1YWwi
IDAgNSAoaGVscC1hcmdzIChlcXVhbCkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0
dG9uICh0KSkpICMoImlmIiAwIDIgKGhlbHAtYXJncyAoaWYpIGNhdGVnb3J5IGhlbHAtZnVuY3Rp
b24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJsZXQiIDAgMyAoaGVscC1hcmdzIChsZXQpIGNhdGVn
b3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJpZiIgMCAyIChoZWxwLWFy
Z3MgKGlmKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygibGV0
IiAwIDMgKGhlbHAtYXJncyAobGV0KSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0
b24gKHQpKSkgIygid2hpbGUiIDAgNSAoaGVscC1hcmdzICh3aGlsZSkgY2F0ZWdvcnkgaGVscC1m
dW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImxldCIgMCAzIChoZWxwLWFyZ3MgKGxldCkg
Y2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImZpbGUtdHJ1ZW5h
bWUiIDAgMTMgKGhlbHAtYXJncyAoZmlsZS10cnVlbmFtZSkgY2F0ZWdvcnkgaGVscC1mdW5jdGlv
bi1idXR0b24gYnV0dG9uICh0KSkpICMoImZpbGUtbmFtZS1hcy1kaXJlY3RvcnkiIDAgMjIgKGhl
bHAtYXJncyAoZmlsZS1uYW1lLWFzLWRpcmVjdG9yeSkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1i
dXR0b24gYnV0dG9uICh0KSkpICMoImxldCIgMCAzIChoZWxwLWFyZ3MgKGxldCkgY2F0ZWdvcnkg
aGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImlmIiAwIDIgKGhlbHAtYXJncyAo
aWYpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJvciIgMCAy
IChoZWxwLWFyZ3MgKG9yKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQp
KSkgIygibGV0IiAwIDMgKGhlbHAtYXJncyAobGV0KSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1
dHRvbiBidXR0b24gKHQpKSkgIygiaWYiIDAgMiAoaGVscC1hcmdzIChpZikgY2F0ZWdvcnkgaGVs
cC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImxldCIgMCAzIChoZWxwLWFyZ3MgKGxl
dCkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpXSAzNjEgWyMoImZp
bGUtbmFtZS1ub25kaXJlY3RvcnkiIDAgMjIgKGhlbHAtYXJncyAoZmlsZS1uYW1lLW5vbmRpcmVj
dG9yeSkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImFwcGx5
IiAwIDUgKGhlbHAtYXJncyAoYXBwbHkpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1
dHRvbiAodCkpKSAjKCJ0cmFtcC1ydW4tcmVhbC1oYW5kbGVyIiAwIDIyIChoZWxwLWFyZ3MgKHRy
YW1wLXJ1bi1yZWFsLWhhbmRsZXIpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRv
biAodCkpKSAjKCJ0cmFtcC1jb21wbGV0aW9uLWZpbGUtbmFtZS1oYW5kbGVyIiAwIDM0IChoZWxw
LWFyZ3MgKHRyYW1wLWNvbXBsZXRpb24tZmlsZS1uYW1lLWhhbmRsZXIpIGNhdGVnb3J5IGhlbHAt
ZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJmaWxlLW5hbWUtbm9uZGlyZWN0b3J5IiAw
IDIyIChoZWxwLWFyZ3MgKGZpbGUtbmFtZS1ub25kaXJlY3RvcnkpIGNhdGVnb3J5IGhlbHAtZnVu
Y3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJlcXVhbCIgMCA1IChoZWxwLWFyZ3MgKGVxdWFs
KSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygiaWYiIDAgMiAo
aGVscC1hcmdzIChpZikgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkp
ICMoImlmIiAwIDIgKGhlbHAtYXJncyAoaWYpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9u
IGJ1dHRvbiAodCkpKSAjKCJsZXQiIDAgMyAoaGVscC1hcmdzIChsZXQpIGNhdGVnb3J5IGhlbHAt
ZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJpZiIgMCAyIChoZWxwLWFyZ3MgKGlmKSBj
YXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygibGV0IiAwIDMgKGhl
bHAtYXJncyAobGV0KSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkg
Iygid2hpbGUiIDAgNSAoaGVscC1hcmdzICh3aGlsZSkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1i
dXR0b24gYnV0dG9uICh0KSkpICMoImxldCIgMCAzIChoZWxwLWFyZ3MgKGxldCkgY2F0ZWdvcnkg
aGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImZpbGUtdHJ1ZW5hbWUiIDAgMTMg
KGhlbHAtYXJncyAoZmlsZS10cnVlbmFtZSkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24g
YnV0dG9uICh0KSkpICMoImZpbGUtbmFtZS1hcy1kaXJlY3RvcnkiIDAgMjIgKGhlbHAtYXJncyAo
ZmlsZS1uYW1lLWFzLWRpcmVjdG9yeSkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0
dG9uICh0KSkpICMoImxldCIgMCAzIChoZWxwLWFyZ3MgKGxldCkgY2F0ZWdvcnkgaGVscC1mdW5j
dGlvbi1idXR0b24gYnV0dG9uICh0KSkpXSAxNiBbIygiZmluZC1maWxlLW5hbWUtaGFuZGxlciIg
MCAyMiAoaGVscC1hcmdzIChmaW5kLWZpbGUtbmFtZS1oYW5kbGVyKSBjYXRlZ29yeSBoZWxwLWZ1
bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygibGV0IiAwIDMgKGhlbHAtYXJncyAobGV0KSBj
YXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygid2hpbGUiIDAgNSAo
aGVscC1hcmdzICh3aGlsZSkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0
KSkpICMoImxldCIgMCAzIChoZWxwLWFyZ3MgKGxldCkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1i
dXR0b24gYnV0dG9uICh0KSkpICMoImZpbGUtdHJ1ZW5hbWUiIDAgMTMgKGhlbHAtYXJncyAoZmls
ZS10cnVlbmFtZSkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMo
ImZpbGUtbmFtZS1hcy1kaXJlY3RvcnkiIDAgMjIgKGhlbHAtYXJncyAoZmlsZS1uYW1lLWFzLWRp
cmVjdG9yeSkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImxl
dCIgMCAzIChoZWxwLWFyZ3MgKGxldCkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0
dG9uICh0KSkpICMoImlmIiAwIDIgKGhlbHAtYXJncyAoaWYpIGNhdGVnb3J5IGhlbHAtZnVuY3Rp
b24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJvciIgMCAyIChoZWxwLWFyZ3MgKG9yKSBjYXRlZ29y
eSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygibGV0IiAwIDMgKGhlbHAtYXJn
cyAobGV0KSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygiaWYi
IDAgMiAoaGVscC1hcmdzIChpZikgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9u
ICh0KSkpICMoImxldCIgMCAzIChoZWxwLWFyZ3MgKGxldCkgY2F0ZWdvcnkgaGVscC1mdW5jdGlv
bi1idXR0b24gYnV0dG9uICh0KSkpICMoIndoaWxlIiAwIDUgKGhlbHAtYXJncyAod2hpbGUpIGNh
dGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJsZXQiIDAgMyAoaGVs
cC1hcmdzIChsZXQpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAj
KCJmaWxlLXRydWVuYW1lIiAwIDEzIChoZWxwLWFyZ3MgKGZpbGUtdHJ1ZW5hbWUpIGNhdGVnb3J5
IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJmaWxlLW5hbWUtYXMtZGlyZWN0
b3J5IiAwIDIyIChoZWxwLWFyZ3MgKGZpbGUtbmFtZS1hcy1kaXJlY3RvcnkpIGNhdGVnb3J5IGhl
bHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKV0gMzg1IFsjKCJmaWxlLXN5bWxpbmstcCIg
MCAxNCAoaGVscC1hcmdzIChmaWxlLXN5bWxpbmstcCkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1i
dXR0b24gYnV0dG9uICh0KSkpICMoInNldHEiIDAgNCAoaGVscC1hcmdzIChzZXRxKSBjYXRlZ29y
eSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygiaWYiIDAgMiAoaGVscC1hcmdz
IChpZikgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImlmIiAw
IDIgKGhlbHAtYXJncyAoaWYpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAo
dCkpKSAjKCJsZXQiIDAgMyAoaGVscC1hcmdzIChsZXQpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24t
YnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJpZiIgMCAyIChoZWxwLWFyZ3MgKGlmKSBjYXRlZ29yeSBo
ZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygibGV0IiAwIDMgKGhlbHAtYXJncyAo
bGV0KSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygid2hpbGUi
IDAgNSAoaGVscC1hcmdzICh3aGlsZSkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0
dG9uICh0KSkpICMoImxldCIgMCAzIChoZWxwLWFyZ3MgKGxldCkgY2F0ZWdvcnkgaGVscC1mdW5j
dGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImZpbGUtdHJ1ZW5hbWUiIDAgMTMgKGhlbHAtYXJn
cyAoZmlsZS10cnVlbmFtZSkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0
KSkpICMoImZpbGUtbmFtZS1hcy1kaXJlY3RvcnkiIDAgMjIgKGhlbHAtYXJncyAoZmlsZS1uYW1l
LWFzLWRpcmVjdG9yeSkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkp
ICMoImxldCIgMCAzIChoZWxwLWFyZ3MgKGxldCkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0
b24gYnV0dG9uICh0KSkpICMoImlmIiAwIDIgKGhlbHAtYXJncyAoaWYpIGNhdGVnb3J5IGhlbHAt
ZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJvciIgMCAyIChoZWxwLWFyZ3MgKG9yKSBj
YXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygibGV0IiAwIDMgKGhl
bHAtYXJncyAobGV0KSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkg
IygiaWYiIDAgMiAoaGVscC1hcmdzIChpZikgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24g
YnV0dG9uICh0KSkpXSAxMTE0IFsjKCJmaWxlLW5hbWUtZGlyZWN0b3J5IiAwIDE5IChoZWxwLWFy
Z3MgKGZpbGUtbmFtZS1kaXJlY3RvcnkpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1
dHRvbiAodCkpKSAjKCJvciIgMCAyIChoZWxwLWFyZ3MgKG9yKSBjYXRlZ29yeSBoZWxwLWZ1bmN0
aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygibGV0IiAwIDMgKGhlbHAtYXJncyAobGV0KSBjYXRl
Z29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygiaWYiIDAgMiAoaGVscC1h
cmdzIChpZikgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImxl
dCIgMCAzIChoZWxwLWFyZ3MgKGxldCkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0
dG9uICh0KSkpICMoIndoaWxlIiAwIDUgKGhlbHAtYXJncyAod2hpbGUpIGNhdGVnb3J5IGhlbHAt
ZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJsZXQiIDAgMyAoaGVscC1hcmdzIChsZXQp
IGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJmaWxlLXRydWVu
YW1lIiAwIDEzIChoZWxwLWFyZ3MgKGZpbGUtdHJ1ZW5hbWUpIGNhdGVnb3J5IGhlbHAtZnVuY3Rp
b24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJmaWxlLW5hbWUtYXMtZGlyZWN0b3J5IiAwIDIyICho
ZWxwLWFyZ3MgKGZpbGUtbmFtZS1hcy1kaXJlY3RvcnkpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24t
YnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJsZXQiIDAgMyAoaGVscC1hcmdzIChsZXQpIGNhdGVnb3J5
IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJpZiIgMCAyIChoZWxwLWFyZ3Mg
KGlmKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygib3IiIDAg
MiAoaGVscC1hcmdzIChvcikgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0
KSkpICMoImxldCIgMCAzIChoZWxwLWFyZ3MgKGxldCkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1i
dXR0b24gYnV0dG9uICh0KSkpICMoImlmIiAwIDIgKGhlbHAtYXJncyAoaWYpIGNhdGVnb3J5IGhl
bHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJsZXQiIDAgMyAoaGVscC1hcmdzIChs
ZXQpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJ3aGlsZSIg
MCA1IChoZWxwLWFyZ3MgKHdoaWxlKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0
b24gKHQpKSldIDM1MyBbIygiZmlsZS1uYW1lLW5vbmRpcmVjdG9yeSIgMCAyMiAoaGVscC1hcmdz
IChmaWxlLW5hbWUtbm9uZGlyZWN0b3J5KSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBi
dXR0b24gKHQpKSkgIygiZXF1YWwiIDAgNSAoaGVscC1hcmdzIChlcXVhbCkgY2F0ZWdvcnkgaGVs
cC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImlmIiAwIDIgKGhlbHAtYXJncyAoaWYp
IGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJpZiIgMCAyICho
ZWxwLWFyZ3MgKGlmKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkg
IygibGV0IiAwIDMgKGhlbHAtYXJncyAobGV0KSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRv
biBidXR0b24gKHQpKSkgIygiaWYiIDAgMiAoaGVscC1hcmdzIChpZikgY2F0ZWdvcnkgaGVscC1m
dW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImxldCIgMCAzIChoZWxwLWFyZ3MgKGxldCkg
Y2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoIndoaWxlIiAwIDUg
KGhlbHAtYXJncyAod2hpbGUpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAo
dCkpKSAjKCJsZXQiIDAgMyAoaGVscC1hcmdzIChsZXQpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24t
YnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJmaWxlLXRydWVuYW1lIiAwIDEzIChoZWxwLWFyZ3MgKGZp
bGUtdHJ1ZW5hbWUpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAj
KCJmaWxlLW5hbWUtYXMtZGlyZWN0b3J5IiAwIDIyIChoZWxwLWFyZ3MgKGZpbGUtbmFtZS1hcy1k
aXJlY3RvcnkpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJs
ZXQiIDAgMyAoaGVscC1hcmdzIChsZXQpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1
dHRvbiAodCkpKSAjKCJpZiIgMCAyIChoZWxwLWFyZ3MgKGlmKSBjYXRlZ29yeSBoZWxwLWZ1bmN0
aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygib3IiIDAgMiAoaGVscC1hcmdzIChvcikgY2F0ZWdv
cnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImxldCIgMCAzIChoZWxwLWFy
Z3MgKGxldCkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImlm
IiAwIDIgKGhlbHAtYXJncyAoaWYpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRv
biAodCkpKV0gMzg5IFsjKCJmaWxlLXRydWVuYW1lIiAwIDEzIChoZWxwLWFyZ3MgKGZpbGUtdHJ1
ZW5hbWUpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJmaWxl
LW5hbWUtYXMtZGlyZWN0b3J5IiAwIDIyIChoZWxwLWFyZ3MgKGZpbGUtbmFtZS1hcy1kaXJlY3Rv
cnkpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJsZXQiIDAg
MyAoaGVscC1hcmdzIChsZXQpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAo
dCkpKSAjKCJpZiIgMCAyIChoZWxwLWFyZ3MgKGlmKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1
dHRvbiBidXR0b24gKHQpKSkgIygib3IiIDAgMiAoaGVscC1hcmdzIChvcikgY2F0ZWdvcnkgaGVs
cC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImxldCIgMCAzIChoZWxwLWFyZ3MgKGxl
dCkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImlmIiAwIDIg
KGhlbHAtYXJncyAoaWYpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkp
KSAjKCJsZXQiIDAgMyAoaGVscC1hcmdzIChsZXQpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0
dG9uIGJ1dHRvbiAodCkpKSAjKCJ3aGlsZSIgMCA1IChoZWxwLWFyZ3MgKHdoaWxlKSBjYXRlZ29y
eSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygibGV0IiAwIDMgKGhlbHAtYXJn
cyAobGV0KSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygiZmls
ZS10cnVlbmFtZSIgMCAxMyAoaGVscC1hcmdzIChmaWxlLXRydWVuYW1lKSBjYXRlZ29yeSBoZWxw
LWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygiZmlsZS1uYW1lLWFzLWRpcmVjdG9yeSIg
MCAyMiAoaGVscC1hcmdzIChmaWxlLW5hbWUtYXMtZGlyZWN0b3J5KSBjYXRlZ29yeSBoZWxwLWZ1
bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygibGV0IiAwIDMgKGhlbHAtYXJncyAobGV0KSBj
YXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygiaWYiIDAgMiAoaGVs
cC1hcmdzIChpZikgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMo
Im9yIiAwIDIgKGhlbHAtYXJncyAob3IpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1
dHRvbiAodCkpKSAjKCJsZXQiIDAgMyAoaGVscC1hcmdzIChsZXQpIGNhdGVnb3J5IGhlbHAtZnVu
Y3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKV0gMjQgWyMoImZpbGUtbmFtZS1hcy1kaXJlY3Rvcnki
IDAgMjIgKGhlbHAtYXJncyAoZmlsZS1uYW1lLWFzLWRpcmVjdG9yeSkgY2F0ZWdvcnkgaGVscC1m
dW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImxldCIgMCAzIChoZWxwLWFyZ3MgKGxldCkg
Y2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImlmIiAwIDIgKGhl
bHAtYXJncyAoaWYpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAj
KCJvciIgMCAyIChoZWxwLWFyZ3MgKG9yKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBi
dXR0b24gKHQpKSkgIygibGV0IiAwIDMgKGhlbHAtYXJncyAobGV0KSBjYXRlZ29yeSBoZWxwLWZ1
bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygiaWYiIDAgMiAoaGVscC1hcmdzIChpZikgY2F0
ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImxldCIgMCAzIChoZWxw
LWFyZ3MgKGxldCkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMo
IndoaWxlIiAwIDUgKGhlbHAtYXJncyAod2hpbGUpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0
dG9uIGJ1dHRvbiAodCkpKSAjKCJsZXQiIDAgMyAoaGVscC1hcmdzIChsZXQpIGNhdGVnb3J5IGhl
bHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJmaWxlLXRydWVuYW1lIiAwIDEzICho
ZWxwLWFyZ3MgKGZpbGUtdHJ1ZW5hbWUpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1
dHRvbiAodCkpKSAjKCJmaWxlLW5hbWUtYXMtZGlyZWN0b3J5IiAwIDIyIChoZWxwLWFyZ3MgKGZp
bGUtbmFtZS1hcy1kaXJlY3RvcnkpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRv
biAodCkpKSAjKCJsZXQiIDAgMyAoaGVscC1hcmdzIChsZXQpIGNhdGVnb3J5IGhlbHAtZnVuY3Rp
b24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJpZiIgMCAyIChoZWxwLWFyZ3MgKGlmKSBjYXRlZ29y
eSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygib3IiIDAgMiAoaGVscC1hcmdz
IChvcikgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImxldCIg
MCAzIChoZWxwLWFyZ3MgKGxldCkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9u
ICh0KSkpICMoImlmIiAwIDIgKGhlbHAtYXJncyAoaWYpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24t
YnV0dG9uIGJ1dHRvbiAodCkpKV0gNDIzIFsjKCJjb25jYXQiIDAgNiAoaGVscC1hcmdzIChjb25j
YXQpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJzZXRxIiAw
IDQgKGhlbHAtYXJncyAoc2V0cSkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9u
ICh0KSkpICMoImxldCIgMCAzIChoZWxwLWFyZ3MgKGxldCkgY2F0ZWdvcnkgaGVscC1mdW5jdGlv
bi1idXR0b24gYnV0dG9uICh0KSkpICMoImNvbmQiIDAgNCAoaGVscC1hcmdzIChjb25kKSBjYXRl
Z29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygiZmlsZS10cnVlbmFtZSIg
MCAxMyAoaGVscC1hcmdzIChmaWxlLXRydWVuYW1lKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1
dHRvbiBidXR0b24gKHQpKSkgIygiIzxsYW1iZGEgMzdGPiIgOSAxMiAoYWN0aW9uIGhlbHAtZm5z
LS1kaXNwbGF5LWZ1bmN0aW9uIGtleW1hcCAoa2V5bWFwICh0b3VjaHNjcmVlbi1kb3duIC4gcHVz
aC1idXR0b24pIChoZWFkZXItbGluZSBrZXltYXAgKHRvdWNoc2NyZWVuLWRvd24gLiBwdXNoLWJ1
dHRvbikgKG1vdXNlLTIgLiBwdXNoLWJ1dHRvbikpIChtb2RlLWxpbmUga2V5bWFwICh0b3VjaHNj
cmVlbi1kb3duIC4gcHVzaC1idXR0b24pIChtb3VzZS0yIC4gcHVzaC1idXR0b24pKSAoZm9sbG93
LWxpbmsgLiBtb3VzZS1mYWNlKSAobW91c2UtMiAuIHB1c2gtYnV0dG9uKSAoMTMgLiBwdXNoLWJ1
dHRvbikga2V5bWFwIChiYWNrdGFiIC4gYmFja3dhcmQtYnV0dG9uKSAoMjcga2V5bWFwICg5IC4g
YmFja3dhcmQtYnV0dG9uKSkgKDkgLiBmb3J3YXJkLWJ1dHRvbikpIGJ1dHRvbi1kYXRhIChsYW1i
ZGEgbmlsIChmaWxlLXRydWVuYW1lICJ+L1dvcmsvc29tZS9sb25nL3BhdGgvdG8vcGFyc2UvdGhh
dC9pcy92ZXJ5L2RlZXAvZGVlcC9kZWVwL3N1cGVyL2R1cGVyL2RlZXAvZGVlcC5lbCIpKSBjYXRl
Z29yeSB0IGZvbGxvdy1saW5rIHQgYnV0dG9uIHQgaGVscC1lY2hvICJtb3VzZS0yLCBSRVQ6IERp
c3BsYXkgdGhlIGZ1bmN0aW9uJ3MgYm9keSIgbW91c2UtZmFjZSBoaWdobGlnaHQgZm9udC1sb2Nr
LWZhY2UgYnV0dG9uIGZhY2UgYnV0dG9uKSkgIygiYmVuY2htYXJrLWNhbGwiIDAgMTQgKGhlbHAt
YXJncyAoYmVuY2htYXJrLWNhbGwpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRv
biAodCkpKSAjKCJldmFsIiAwIDQgKGhlbHAtYXJncyAoZXZhbCkgY2F0ZWdvcnkgaGVscC1mdW5j
dGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImVsaXNwLS1ldmFsLWxhc3Qtc2V4cCIgMCAyMSAo
aGVscC1hcmdzIChlbGlzcC0tZXZhbC1sYXN0LXNleHApIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24t
YnV0dG9uIGJ1dHRvbiAodCkpKSAjKCIjPGNvbXBpbGVkLWZ1bmN0aW9uIENCOD4iIDIwIDIzIChh
Y3Rpb24gaGVscC1mbnMtLWRpc3BsYXktZnVuY3Rpb24ga2V5bWFwIChrZXltYXAgKHRvdWNoc2Ny
ZWVuLWRvd24gLiBwdXNoLWJ1dHRvbikgKGhlYWRlci1saW5lIGtleW1hcCAodG91Y2hzY3JlZW4t
ZG93biAuIHB1c2gtYnV0dG9uKSAobW91c2UtMiAuIHB1c2gtYnV0dG9uKSkgKG1vZGUtbGluZSBr
ZXltYXAgKHRvdWNoc2NyZWVuLWRvd24gLiBwdXNoLWJ1dHRvbikgKG1vdXNlLTIgLiBwdXNoLWJ1
dHRvbikpIChmb2xsb3ctbGluayAuIG1vdXNlLWZhY2UpIChtb3VzZS0yIC4gcHVzaC1idXR0b24p
ICgxMyAuIHB1c2gtYnV0dG9uKSBrZXltYXAgKGJhY2t0YWIgLiBiYWNrd2FyZC1idXR0b24pICgy
NyBrZXltYXAgKDkgLiBiYWNrd2FyZC1idXR0b24pKSAoOSAuIGZvcndhcmQtYnV0dG9uKSkgYnV0
dG9uLWRhdGEgI1swICJcMzAxXDMwMCFcMjA3IiBbbmlsIGVsaXNwLS1ldmFsLWxhc3Qtc2V4cF0g
Ml0gY2F0ZWdvcnkgdCBmb2xsb3ctbGluayB0IGJ1dHRvbiB0IGhlbHAtZWNobyAibW91c2UtMiwg
UkVUOiBEaXNwbGF5IHRoZSBmdW5jdGlvbidzIGJvZHkiIG1vdXNlLWZhY2UgaGlnaGxpZ2h0IGZv
bnQtbG9jay1mYWNlIGJ1dHRvbiBmYWNlIGJ1dHRvbikpICMoIiM8c3Vici1uYXRpdmUtZWxpc3Ag
ZXZhbC1sYXN0LXNleHA+IiAyMCAzNCAoYnV0dG9uICh0KSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9u
LWJ1dHRvbiBoZWxwLWFyZ3MgKGV2YWwtbGFzdC1zZXhwKSkpICMoIiM8Y29tcGlsZWQtZnVuY3Rp
b24gRDg1PiIgMjAgMjMgKGFjdGlvbiBoZWxwLWZucy0tZGlzcGxheS1mdW5jdGlvbiBrZXltYXAg
KGtleW1hcCAodG91Y2hzY3JlZW4tZG93biAuIHB1c2gtYnV0dG9uKSAoaGVhZGVyLWxpbmUga2V5
bWFwICh0b3VjaHNjcmVlbi1kb3duIC4gcHVzaC1idXR0b24pIChtb3VzZS0yIC4gcHVzaC1idXR0
b24pKSAobW9kZS1saW5lIGtleW1hcCAodG91Y2hzY3JlZW4tZG93biAuIHB1c2gtYnV0dG9uKSAo
bW91c2UtMiAuIHB1c2gtYnV0dG9uKSkgKGZvbGxvdy1saW5rIC4gbW91c2UtZmFjZSkgKG1vdXNl
LTIgLiBwdXNoLWJ1dHRvbikgKDEzIC4gcHVzaC1idXR0b24pIGtleW1hcCAoYmFja3RhYiAuIGJh
Y2t3YXJkLWJ1dHRvbikgKDI3IGtleW1hcCAoOSAuIGJhY2t3YXJkLWJ1dHRvbikpICg5IC4gZm9y
d2FyZC1idXR0b24pKSBidXR0b24tZGF0YSAjWygmcmVzdCBfaXQpICIICSFcMjExElwyMDciIFth
ZC0tYWRkb2l0LWZ1bmN0aW9uIGV2YWwtbGFzdC1zZXhwLWFyZy1pbnRlcm5hbCBhZC1yZXR1cm4t
dmFsdWVdIDJdIGNhdGVnb3J5IHQgZm9sbG93LWxpbmsgdCBidXR0b24gdCBoZWxwLWVjaG8gIm1v
dXNlLTIsIFJFVDogRGlzcGxheSB0aGUgZnVuY3Rpb24ncyBib2R5IiBtb3VzZS1mYWNlIGhpZ2hs
aWdodCBmb250LWxvY2stZmFjZSBidXR0b24gZmFjZSBidXR0b24pKSAjKCJldmFsLXNleHAtZnUt
Zmxhc2gtZG9pdC1zaW1wbGUiIDAgMzAgKGhlbHAtYXJncyAoZXZhbC1zZXhwLWZ1LWZsYXNoLWRv
aXQtc2ltcGxlKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygi
ZXZhbC1zZXhwLWZ1LWZsYXNoLWRvaXQiIDAgMjMgKGhlbHAtYXJncyAoZXZhbC1zZXhwLWZ1LWZs
YXNoLWRvaXQpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJl
c2YtZmxhc2gtZG9pdCIgMCAxNCAoaGVscC1hcmdzIChlc2YtZmxhc2gtZG9pdCkgY2F0ZWdvcnkg
aGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImFkLUFkdmljZS1ldmFsLWxhc3Qt
c2V4cCIgMCAyNCAoaGVscC1hcmdzIChhZC1BZHZpY2UtZXZhbC1sYXN0LXNleHApIGNhdGVnb3J5
IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKV0gMTAgWyMoImZpbGUtbmFtZS1kaXJl
Y3RvcnkiIDAgMTkgKGhlbHAtYXJncyAoZmlsZS1uYW1lLWRpcmVjdG9yeSkgY2F0ZWdvcnkgaGVs
cC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoIm9yIiAwIDIgKGhlbHAtYXJncyAob3Ip
IGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJsZXQiIDAgMyAo
aGVscC1hcmdzIChsZXQpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkp
KSAjKCJpZiIgMCAyIChoZWxwLWFyZ3MgKGlmKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRv
biBidXR0b24gKHQpKSkgIygibGV0IiAwIDMgKGhlbHAtYXJncyAobGV0KSBjYXRlZ29yeSBoZWxw
LWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygid2hpbGUiIDAgNSAoaGVscC1hcmdzICh3
aGlsZSkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImxldCIg
MCAzIChoZWxwLWFyZ3MgKGxldCkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9u
ICh0KSkpICMoImZpbGUtdHJ1ZW5hbWUiIDAgMTMgKGhlbHAtYXJncyAoZmlsZS10cnVlbmFtZSkg
Y2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoIiM8bGFtYmRhIDM3
Rj4iIDkgMTIgKGFjdGlvbiBoZWxwLWZucy0tZGlzcGxheS1mdW5jdGlvbiBrZXltYXAgKGtleW1h
cCAodG91Y2hzY3JlZW4tZG93biAuIHB1c2gtYnV0dG9uKSAoaGVhZGVyLWxpbmUga2V5bWFwICh0
b3VjaHNjcmVlbi1kb3duIC4gcHVzaC1idXR0b24pIChtb3VzZS0yIC4gcHVzaC1idXR0b24pKSAo
bW9kZS1saW5lIGtleW1hcCAodG91Y2hzY3JlZW4tZG93biAuIHB1c2gtYnV0dG9uKSAobW91c2Ut
MiAuIHB1c2gtYnV0dG9uKSkgKGZvbGxvdy1saW5rIC4gbW91c2UtZmFjZSkgKG1vdXNlLTIgLiBw
dXNoLWJ1dHRvbikgKDEzIC4gcHVzaC1idXR0b24pIGtleW1hcCAoYmFja3RhYiAuIGJhY2t3YXJk
LWJ1dHRvbikgKDI3IGtleW1hcCAoOSAuIGJhY2t3YXJkLWJ1dHRvbikpICg5IC4gZm9yd2FyZC1i
dXR0b24pKSBidXR0b24tZGF0YSAobGFtYmRhIG5pbCAoZmlsZS10cnVlbmFtZSAifi9Xb3JrL3Nv
bWUvbG9uZy9wYXRoL3RvL3BhcnNlL3RoYXQvaXMvdmVyeS9kZWVwL2RlZXAvZGVlcC9zdXBlci9k
dXBlci9kZWVwL2RlZXAuZWwiKSkgY2F0ZWdvcnkgdCBmb2xsb3ctbGluayB0IGJ1dHRvbiB0IGhl
bHAtZWNobyAibW91c2UtMiwgUkVUOiBEaXNwbGF5IHRoZSBmdW5jdGlvbidzIGJvZHkiIG1vdXNl
LWZhY2UgaGlnaGxpZ2h0IGZvbnQtbG9jay1mYWNlIGJ1dHRvbiBmYWNlIGJ1dHRvbikpICMoImJl
bmNobWFyay1jYWxsIiAwIDE0IChoZWxwLWFyZ3MgKGJlbmNobWFyay1jYWxsKSBjYXRlZ29yeSBo
ZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygiZXZhbCIgMCA0IChoZWxwLWFyZ3Mg
KGV2YWwpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJlbGlz
cC0tZXZhbC1sYXN0LXNleHAiIDAgMjEgKGhlbHAtYXJncyAoZWxpc3AtLWV2YWwtbGFzdC1zZXhw
KSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygiIzxjb21waWxl
ZC1mdW5jdGlvbiBDQjg+IiAyMCAyMyAoYWN0aW9uIGhlbHAtZm5zLS1kaXNwbGF5LWZ1bmN0aW9u
IGtleW1hcCAoa2V5bWFwICh0b3VjaHNjcmVlbi1kb3duIC4gcHVzaC1idXR0b24pIChoZWFkZXIt
bGluZSBrZXltYXAgKHRvdWNoc2NyZWVuLWRvd24gLiBwdXNoLWJ1dHRvbikgKG1vdXNlLTIgLiBw
dXNoLWJ1dHRvbikpIChtb2RlLWxpbmUga2V5bWFwICh0b3VjaHNjcmVlbi1kb3duIC4gcHVzaC1i
dXR0b24pIChtb3VzZS0yIC4gcHVzaC1idXR0b24pKSAoZm9sbG93LWxpbmsgLiBtb3VzZS1mYWNl
KSAobW91c2UtMiAuIHB1c2gtYnV0dG9uKSAoMTMgLiBwdXNoLWJ1dHRvbikga2V5bWFwIChiYWNr
dGFiIC4gYmFja3dhcmQtYnV0dG9uKSAoMjcga2V5bWFwICg5IC4gYmFja3dhcmQtYnV0dG9uKSkg
KDkgLiBmb3J3YXJkLWJ1dHRvbikpIGJ1dHRvbi1kYXRhICNbMCAiXDMwMVwzMDAhXDIwNyIgW25p
bCBlbGlzcC0tZXZhbC1sYXN0LXNleHBdIDJdIGNhdGVnb3J5IHQgZm9sbG93LWxpbmsgdCBidXR0
b24gdCBoZWxwLWVjaG8gIm1vdXNlLTIsIFJFVDogRGlzcGxheSB0aGUgZnVuY3Rpb24ncyBib2R5
IiBtb3VzZS1mYWNlIGhpZ2hsaWdodCBmb250LWxvY2stZmFjZSBidXR0b24gZmFjZSBidXR0b24p
KSAjKCIjPHN1YnItbmF0aXZlLWVsaXNwIGV2YWwtbGFzdC1zZXhwPiIgMjAgMzQgKGJ1dHRvbiAo
dCkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gaGVscC1hcmdzIChldmFsLWxhc3Qtc2V4
cCkpKSAjKCIjPGNvbXBpbGVkLWZ1bmN0aW9uIEQ4NT4iIDIwIDIzIChhY3Rpb24gaGVscC1mbnMt
LWRpc3BsYXktZnVuY3Rpb24ga2V5bWFwIChrZXltYXAgKHRvdWNoc2NyZWVuLWRvd24gLiBwdXNo
LWJ1dHRvbikgKGhlYWRlci1saW5lIGtleW1hcCAodG91Y2hzY3JlZW4tZG93biAuIHB1c2gtYnV0
dG9uKSAobW91c2UtMiAuIHB1c2gtYnV0dG9uKSkgKG1vZGUtbGluZSBrZXltYXAgKHRvdWNoc2Ny
ZWVuLWRvd24gLiBwdXNoLWJ1dHRvbikgKG1vdXNlLTIgLiBwdXNoLWJ1dHRvbikpIChmb2xsb3ct
bGluayAuIG1vdXNlLWZhY2UpIChtb3VzZS0yIC4gcHVzaC1idXR0b24pICgxMyAuIHB1c2gtYnV0
dG9uKSBrZXltYXAgKGJhY2t0YWIgLiBiYWNrd2FyZC1idXR0b24pICgyNyBrZXltYXAgKDkgLiBi
YWNrd2FyZC1idXR0b24pKSAoOSAuIGZvcndhcmQtYnV0dG9uKSkgYnV0dG9uLWRhdGEgI1soJnJl
c3QgX2l0KSAiCAkhXDIxMRJcMjA3IiBbYWQtLWFkZG9pdC1mdW5jdGlvbiBldmFsLWxhc3Qtc2V4
cC1hcmctaW50ZXJuYWwgYWQtcmV0dXJuLXZhbHVlXSAyXSBjYXRlZ29yeSB0IGZvbGxvdy1saW5r
IHQgYnV0dG9uIHQgaGVscC1lY2hvICJtb3VzZS0yLCBSRVQ6IERpc3BsYXkgdGhlIGZ1bmN0aW9u
J3MgYm9keSIgbW91c2UtZmFjZSBoaWdobGlnaHQgZm9udC1sb2NrLWZhY2UgYnV0dG9uIGZhY2Ug
YnV0dG9uKSkgIygiZXZhbC1zZXhwLWZ1LWZsYXNoLWRvaXQtc2ltcGxlIiAwIDMwIChoZWxwLWFy
Z3MgKGV2YWwtc2V4cC1mdS1mbGFzaC1kb2l0LXNpbXBsZSkgY2F0ZWdvcnkgaGVscC1mdW5jdGlv
bi1idXR0b24gYnV0dG9uICh0KSkpXSA1MSBbIygiZGlyZWN0b3J5LWZpbGUtbmFtZSIgMCAxOSAo
aGVscC1hcmdzIChkaXJlY3RvcnktZmlsZS1uYW1lKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1
dHRvbiBidXR0b24gKHQpKSkgIygic2V0cSIgMCA0IChoZWxwLWFyZ3MgKHNldHEpIGNhdGVnb3J5
IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJsZXQiIDAgMyAoaGVscC1hcmdz
IChsZXQpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJpZiIg
MCAyIChoZWxwLWFyZ3MgKGlmKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24g
KHQpKSkgIygibGV0IiAwIDMgKGhlbHAtYXJncyAobGV0KSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9u
LWJ1dHRvbiBidXR0b24gKHQpKSkgIygid2hpbGUiIDAgNSAoaGVscC1hcmdzICh3aGlsZSkgY2F0
ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImxldCIgMCAzIChoZWxw
LWFyZ3MgKGxldCkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMo
ImZpbGUtdHJ1ZW5hbWUiIDAgMTMgKGhlbHAtYXJncyAoZmlsZS10cnVlbmFtZSkgY2F0ZWdvcnkg
aGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImZpbGUtbmFtZS1hcy1kaXJlY3Rv
cnkiIDAgMjIgKGhlbHAtYXJncyAoZmlsZS1uYW1lLWFzLWRpcmVjdG9yeSkgY2F0ZWdvcnkgaGVs
cC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImxldCIgMCAzIChoZWxwLWFyZ3MgKGxl
dCkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImlmIiAwIDIg
KGhlbHAtYXJncyAoaWYpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkp
KSAjKCJvciIgMCAyIChoZWxwLWFyZ3MgKG9yKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRv
biBidXR0b24gKHQpKSkgIygibGV0IiAwIDMgKGhlbHAtYXJncyAobGV0KSBjYXRlZ29yeSBoZWxw
LWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygiaWYiIDAgMiAoaGVscC1hcmdzIChpZikg
Y2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImxldCIgMCAzICho
ZWxwLWFyZ3MgKGxldCkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkp
ICMoIndoaWxlIiAwIDUgKGhlbHAtYXJncyAod2hpbGUpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24t
YnV0dG9uIGJ1dHRvbiAodCkpKV0gMzcyIFsjKCJsZXQiIDAgMyAoaGVscC1hcmdzIChsZXQpIGNh
dGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJmaWxlLXRydWVuYW1l
IiAwIDEzIChoZWxwLWFyZ3MgKGZpbGUtdHJ1ZW5hbWUpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24t
YnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJmaWxlLW5hbWUtYXMtZGlyZWN0b3J5IiAwIDIyIChoZWxw
LWFyZ3MgKGZpbGUtbmFtZS1hcy1kaXJlY3RvcnkpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0
dG9uIGJ1dHRvbiAodCkpKSAjKCJsZXQiIDAgMyAoaGVscC1hcmdzIChsZXQpIGNhdGVnb3J5IGhl
bHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJpZiIgMCAyIChoZWxwLWFyZ3MgKGlm
KSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygib3IiIDAgMiAo
aGVscC1hcmdzIChvcikgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkp
ICMoImxldCIgMCAzIChoZWxwLWFyZ3MgKGxldCkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0
b24gYnV0dG9uICh0KSkpICMoImlmIiAwIDIgKGhlbHAtYXJncyAoaWYpIGNhdGVnb3J5IGhlbHAt
ZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJsZXQiIDAgMyAoaGVscC1hcmdzIChsZXQp
IGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJ3aGlsZSIgMCA1
IChoZWxwLWFyZ3MgKHdoaWxlKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24g
KHQpKSkgIygibGV0IiAwIDMgKGhlbHAtYXJncyAobGV0KSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9u
LWJ1dHRvbiBidXR0b24gKHQpKSkgIygiZmlsZS10cnVlbmFtZSIgMCAxMyAoaGVscC1hcmdzIChm
aWxlLXRydWVuYW1lKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkg
IygiZmlsZS1uYW1lLWFzLWRpcmVjdG9yeSIgMCAyMiAoaGVscC1hcmdzIChmaWxlLW5hbWUtYXMt
ZGlyZWN0b3J5KSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygi
bGV0IiAwIDMgKGhlbHAtYXJncyAobGV0KSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBi
dXR0b24gKHQpKSkgIygiaWYiIDAgMiAoaGVscC1hcmdzIChpZikgY2F0ZWdvcnkgaGVscC1mdW5j
dGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoIm9yIiAwIDIgKGhlbHAtYXJncyAob3IpIGNhdGVn
b3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKV0gMjUgWyMoImZpbmQtZmlsZS1u
YW1lLWhhbmRsZXIiIDAgMjIgKGhlbHAtYXJncyAoZmluZC1maWxlLW5hbWUtaGFuZGxlcikgY2F0
ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImxldCIgMCAzIChoZWxw
LWFyZ3MgKGxldCkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMo
IndoaWxlIiAwIDUgKGhlbHAtYXJncyAod2hpbGUpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0
dG9uIGJ1dHRvbiAodCkpKSAjKCJsZXQiIDAgMyAoaGVscC1hcmdzIChsZXQpIGNhdGVnb3J5IGhl
bHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJmaWxlLXRydWVuYW1lIiAwIDEzICho
ZWxwLWFyZ3MgKGZpbGUtdHJ1ZW5hbWUpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1
dHRvbiAodCkpKSAjKCJmaWxlLW5hbWUtYXMtZGlyZWN0b3J5IiAwIDIyIChoZWxwLWFyZ3MgKGZp
bGUtbmFtZS1hcy1kaXJlY3RvcnkpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRv
biAodCkpKSAjKCJsZXQiIDAgMyAoaGVscC1hcmdzIChsZXQpIGNhdGVnb3J5IGhlbHAtZnVuY3Rp
b24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJpZiIgMCAyIChoZWxwLWFyZ3MgKGlmKSBjYXRlZ29y
eSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygib3IiIDAgMiAoaGVscC1hcmdz
IChvcikgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImxldCIg
MCAzIChoZWxwLWFyZ3MgKGxldCkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9u
ICh0KSkpICMoImlmIiAwIDIgKGhlbHAtYXJncyAoaWYpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24t
YnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJsZXQiIDAgMyAoaGVscC1hcmdzIChsZXQpIGNhdGVnb3J5
IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJ3aGlsZSIgMCA1IChoZWxwLWFy
Z3MgKHdoaWxlKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygi
bGV0IiAwIDMgKGhlbHAtYXJncyAobGV0KSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBi
dXR0b24gKHQpKSkgIygiZmlsZS10cnVlbmFtZSIgMCAxMyAoaGVscC1hcmdzIChmaWxlLXRydWVu
YW1lKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygiIzxsYW1i
ZGEgMzdGPiIgOSAxMiAoYWN0aW9uIGhlbHAtZm5zLS1kaXNwbGF5LWZ1bmN0aW9uIGtleW1hcCAo
a2V5bWFwICh0b3VjaHNjcmVlbi1kb3duIC4gcHVzaC1idXR0b24pIChoZWFkZXItbGluZSBrZXlt
YXAgKHRvdWNoc2NyZWVuLWRvd24gLiBwdXNoLWJ1dHRvbikgKG1vdXNlLTIgLiBwdXNoLWJ1dHRv
bikpIChtb2RlLWxpbmUga2V5bWFwICh0b3VjaHNjcmVlbi1kb3duIC4gcHVzaC1idXR0b24pICht
b3VzZS0yIC4gcHVzaC1idXR0b24pKSAoZm9sbG93LWxpbmsgLiBtb3VzZS1mYWNlKSAobW91c2Ut
MiAuIHB1c2gtYnV0dG9uKSAoMTMgLiBwdXNoLWJ1dHRvbikga2V5bWFwIChiYWNrdGFiIC4gYmFj
a3dhcmQtYnV0dG9uKSAoMjcga2V5bWFwICg5IC4gYmFja3dhcmQtYnV0dG9uKSkgKDkgLiBmb3J3
YXJkLWJ1dHRvbikpIGJ1dHRvbi1kYXRhIChsYW1iZGEgbmlsIChmaWxlLXRydWVuYW1lICJ+L1dv
cmsvc29tZS9sb25nL3BhdGgvdG8vcGFyc2UvdGhhdC9pcy92ZXJ5L2RlZXAvZGVlcC9kZWVwL3N1
cGVyL2R1cGVyL2RlZXAvZGVlcC5lbCIpKSBjYXRlZ29yeSB0IGZvbGxvdy1saW5rIHQgYnV0dG9u
IHQgaGVscC1lY2hvICJtb3VzZS0yLCBSRVQ6IERpc3BsYXkgdGhlIGZ1bmN0aW9uJ3MgYm9keSIg
bW91c2UtZmFjZSBoaWdobGlnaHQgZm9udC1sb2NrLWZhY2UgYnV0dG9uIGZhY2UgYnV0dG9uKSld
IDQ2IFsjKCJmaWxlLW5hbWUtbm9uZGlyZWN0b3J5IiAwIDIyIChoZWxwLWFyZ3MgKGZpbGUtbmFt
ZS1ub25kaXJlY3RvcnkpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkp
KSAjKCJjb25jYXQiIDAgNiAoaGVscC1hcmdzIChjb25jYXQpIGNhdGVnb3J5IGhlbHAtZnVuY3Rp
b24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJzZXRxIiAwIDQgKGhlbHAtYXJncyAoc2V0cSkgY2F0
ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImlmIiAwIDIgKGhlbHAt
YXJncyAoaWYpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJp
ZiIgMCAyIChoZWxwLWFyZ3MgKGlmKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0
b24gKHQpKSkgIygibGV0IiAwIDMgKGhlbHAtYXJncyAobGV0KSBjYXRlZ29yeSBoZWxwLWZ1bmN0
aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygiaWYiIDAgMiAoaGVscC1hcmdzIChpZikgY2F0ZWdv
cnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImxldCIgMCAzIChoZWxwLWFy
Z3MgKGxldCkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoIndo
aWxlIiAwIDUgKGhlbHAtYXJncyAod2hpbGUpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9u
IGJ1dHRvbiAodCkpKSAjKCJsZXQiIDAgMyAoaGVscC1hcmdzIChsZXQpIGNhdGVnb3J5IGhlbHAt
ZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJmaWxlLXRydWVuYW1lIiAwIDEzIChoZWxw
LWFyZ3MgKGZpbGUtdHJ1ZW5hbWUpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRv
biAodCkpKSAjKCJmaWxlLW5hbWUtYXMtZGlyZWN0b3J5IiAwIDIyIChoZWxwLWFyZ3MgKGZpbGUt
bmFtZS1hcy1kaXJlY3RvcnkpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAo
dCkpKSAjKCJsZXQiIDAgMyAoaGVscC1hcmdzIChsZXQpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24t
YnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJpZiIgMCAyIChoZWxwLWFyZ3MgKGlmKSBjYXRlZ29yeSBo
ZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygib3IiIDAgMiAoaGVscC1hcmdzIChv
cikgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImxldCIgMCAz
IChoZWxwLWFyZ3MgKGxldCkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0
KSkpXSAzODMgWyMoImZpbGUtbmFtZS1jYXNlLWluc2Vuc2l0aXZlLXAiIDAgMjggKGhlbHAtYXJn
cyAoZmlsZS1uYW1lLWNhc2UtaW5zZW5zaXRpdmUtcCkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1i
dXR0b24gYnV0dG9uICh0KSkpICMoImFuZCIgMCAzIChoZWxwLWFyZ3MgKGFuZCkgY2F0ZWdvcnkg
aGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoIm9yIiAwIDIgKGhlbHAtYXJncyAo
b3IpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJsZXQiIDAg
MyAoaGVscC1hcmdzIChsZXQpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAo
dCkpKSAjKCJpZiIgMCAyIChoZWxwLWFyZ3MgKGlmKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1
dHRvbiBidXR0b24gKHQpKSkgIygibGV0IiAwIDMgKGhlbHAtYXJncyAobGV0KSBjYXRlZ29yeSBo
ZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygid2hpbGUiIDAgNSAoaGVscC1hcmdz
ICh3aGlsZSkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImxl
dCIgMCAzIChoZWxwLWFyZ3MgKGxldCkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0
dG9uICh0KSkpICMoImZpbGUtdHJ1ZW5hbWUiIDAgMTMgKGhlbHAtYXJncyAoZmlsZS10cnVlbmFt
ZSkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoIiM8bGFtYmRh
IDM3Rj4iIDkgMTIgKGFjdGlvbiBoZWxwLWZucy0tZGlzcGxheS1mdW5jdGlvbiBrZXltYXAgKGtl
eW1hcCAodG91Y2hzY3JlZW4tZG93biAuIHB1c2gtYnV0dG9uKSAoaGVhZGVyLWxpbmUga2V5bWFw
ICh0b3VjaHNjcmVlbi1kb3duIC4gcHVzaC1idXR0b24pIChtb3VzZS0yIC4gcHVzaC1idXR0b24p
KSAobW9kZS1saW5lIGtleW1hcCAodG91Y2hzY3JlZW4tZG93biAuIHB1c2gtYnV0dG9uKSAobW91
c2UtMiAuIHB1c2gtYnV0dG9uKSkgKGZvbGxvdy1saW5rIC4gbW91c2UtZmFjZSkgKG1vdXNlLTIg
LiBwdXNoLWJ1dHRvbikgKDEzIC4gcHVzaC1idXR0b24pIGtleW1hcCAoYmFja3RhYiAuIGJhY2t3
YXJkLWJ1dHRvbikgKDI3IGtleW1hcCAoOSAuIGJhY2t3YXJkLWJ1dHRvbikpICg5IC4gZm9yd2Fy
ZC1idXR0b24pKSBidXR0b24tZGF0YSAobGFtYmRhIG5pbCAoZmlsZS10cnVlbmFtZSAifi9Xb3Jr
L3NvbWUvbG9uZy9wYXRoL3RvL3BhcnNlL3RoYXQvaXMvdmVyeS9kZWVwL2RlZXAvZGVlcC9zdXBl
ci9kdXBlci9kZWVwL2RlZXAuZWwiKSkgY2F0ZWdvcnkgdCBmb2xsb3ctbGluayB0IGJ1dHRvbiB0
IGhlbHAtZWNobyAibW91c2UtMiwgUkVUOiBEaXNwbGF5IHRoZSBmdW5jdGlvbidzIGJvZHkiIG1v
dXNlLWZhY2UgaGlnaGxpZ2h0IGZvbnQtbG9jay1mYWNlIGJ1dHRvbiBmYWNlIGJ1dHRvbikpICMo
ImJlbmNobWFyay1jYWxsIiAwIDE0IChoZWxwLWFyZ3MgKGJlbmNobWFyay1jYWxsKSBjYXRlZ29y
eSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygiZXZhbCIgMCA0IChoZWxwLWFy
Z3MgKGV2YWwpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJl
bGlzcC0tZXZhbC1sYXN0LXNleHAiIDAgMjEgKGhlbHAtYXJncyAoZWxpc3AtLWV2YWwtbGFzdC1z
ZXhwKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygiIzxjb21w
aWxlZC1mdW5jdGlvbiBDQjg+IiAyMCAyMyAoYWN0aW9uIGhlbHAtZm5zLS1kaXNwbGF5LWZ1bmN0
aW9uIGtleW1hcCAoa2V5bWFwICh0b3VjaHNjcmVlbi1kb3duIC4gcHVzaC1idXR0b24pIChoZWFk
ZXItbGluZSBrZXltYXAgKHRvdWNoc2NyZWVuLWRvd24gLiBwdXNoLWJ1dHRvbikgKG1vdXNlLTIg
LiBwdXNoLWJ1dHRvbikpIChtb2RlLWxpbmUga2V5bWFwICh0b3VjaHNjcmVlbi1kb3duIC4gcHVz
aC1idXR0b24pIChtb3VzZS0yIC4gcHVzaC1idXR0b24pKSAoZm9sbG93LWxpbmsgLiBtb3VzZS1m
YWNlKSAobW91c2UtMiAuIHB1c2gtYnV0dG9uKSAoMTMgLiBwdXNoLWJ1dHRvbikga2V5bWFwIChi
YWNrdGFiIC4gYmFja3dhcmQtYnV0dG9uKSAoMjcga2V5bWFwICg5IC4gYmFja3dhcmQtYnV0dG9u
KSkgKDkgLiBmb3J3YXJkLWJ1dHRvbikpIGJ1dHRvbi1kYXRhICNbMCAiXDMwMVwzMDAhXDIwNyIg
W25pbCBlbGlzcC0tZXZhbC1sYXN0LXNleHBdIDJdIGNhdGVnb3J5IHQgZm9sbG93LWxpbmsgdCBi
dXR0b24gdCBoZWxwLWVjaG8gIm1vdXNlLTIsIFJFVDogRGlzcGxheSB0aGUgZnVuY3Rpb24ncyBi
b2R5IiBtb3VzZS1mYWNlIGhpZ2hsaWdodCBmb250LWxvY2stZmFjZSBidXR0b24gZmFjZSBidXR0
b24pKSAjKCIjPHN1YnItbmF0aXZlLWVsaXNwIGV2YWwtbGFzdC1zZXhwPiIgMjAgMzQgKGJ1dHRv
biAodCkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gaGVscC1hcmdzIChldmFsLWxhc3Qt
c2V4cCkpKSAjKCIjPGNvbXBpbGVkLWZ1bmN0aW9uIEQ4NT4iIDIwIDIzIChhY3Rpb24gaGVscC1m
bnMtLWRpc3BsYXktZnVuY3Rpb24ga2V5bWFwIChrZXltYXAgKHRvdWNoc2NyZWVuLWRvd24gLiBw
dXNoLWJ1dHRvbikgKGhlYWRlci1saW5lIGtleW1hcCAodG91Y2hzY3JlZW4tZG93biAuIHB1c2gt
YnV0dG9uKSAobW91c2UtMiAuIHB1c2gtYnV0dG9uKSkgKG1vZGUtbGluZSBrZXltYXAgKHRvdWNo
c2NyZWVuLWRvd24gLiBwdXNoLWJ1dHRvbikgKG1vdXNlLTIgLiBwdXNoLWJ1dHRvbikpIChmb2xs
b3ctbGluayAuIG1vdXNlLWZhY2UpIChtb3VzZS0yIC4gcHVzaC1idXR0b24pICgxMyAuIHB1c2gt
YnV0dG9uKSBrZXltYXAgKGJhY2t0YWIgLiBiYWNrd2FyZC1idXR0b24pICgyNyBrZXltYXAgKDkg
LiBiYWNrd2FyZC1idXR0b24pKSAoOSAuIGZvcndhcmQtYnV0dG9uKSkgYnV0dG9uLWRhdGEgI1so
JnJlc3QgX2l0KSAiCAkhXDIxMRJcMjA3IiBbYWQtLWFkZG9pdC1mdW5jdGlvbiBldmFsLWxhc3Qt
c2V4cC1hcmctaW50ZXJuYWwgYWQtcmV0dXJuLXZhbHVlXSAyXSBjYXRlZ29yeSB0IGZvbGxvdy1s
aW5rIHQgYnV0dG9uIHQgaGVscC1lY2hvICJtb3VzZS0yLCBSRVQ6IERpc3BsYXkgdGhlIGZ1bmN0
aW9uJ3MgYm9keSIgbW91c2UtZmFjZSBoaWdobGlnaHQgZm9udC1sb2NrLWZhY2UgYnV0dG9uIGZh
Y2UgYnV0dG9uKSldIDg3IFsjKCJ0cmFtcC1ydW4tcmVhbC1oYW5kbGVyIiAwIDIyIChoZWxwLWFy
Z3MgKHRyYW1wLXJ1bi1yZWFsLWhhbmRsZXIpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9u
IGJ1dHRvbiAodCkpKSAjKCJ0cmFtcC1jb21wbGV0aW9uLWZpbGUtbmFtZS1oYW5kbGVyIiAwIDM0
IChoZWxwLWFyZ3MgKHRyYW1wLWNvbXBsZXRpb24tZmlsZS1uYW1lLWhhbmRsZXIpIGNhdGVnb3J5
IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJmaWxlLW5hbWUtbm9uZGlyZWN0
b3J5IiAwIDIyIChoZWxwLWFyZ3MgKGZpbGUtbmFtZS1ub25kaXJlY3RvcnkpIGNhdGVnb3J5IGhl
bHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJjb25jYXQiIDAgNiAoaGVscC1hcmdz
IChjb25jYXQpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJz
ZXRxIiAwIDQgKGhlbHAtYXJncyAoc2V0cSkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24g
YnV0dG9uICh0KSkpICMoImlmIiAwIDIgKGhlbHAtYXJncyAoaWYpIGNhdGVnb3J5IGhlbHAtZnVu
Y3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJpZiIgMCAyIChoZWxwLWFyZ3MgKGlmKSBjYXRl
Z29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygibGV0IiAwIDMgKGhlbHAt
YXJncyAobGV0KSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygi
aWYiIDAgMiAoaGVscC1hcmdzIChpZikgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0
dG9uICh0KSkpICMoImxldCIgMCAzIChoZWxwLWFyZ3MgKGxldCkgY2F0ZWdvcnkgaGVscC1mdW5j
dGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoIndoaWxlIiAwIDUgKGhlbHAtYXJncyAod2hpbGUp
IGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJsZXQiIDAgMyAo
aGVscC1hcmdzIChsZXQpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkp
KSAjKCJmaWxlLXRydWVuYW1lIiAwIDEzIChoZWxwLWFyZ3MgKGZpbGUtdHJ1ZW5hbWUpIGNhdGVn
b3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJmaWxlLW5hbWUtYXMtZGly
ZWN0b3J5IiAwIDIyIChoZWxwLWFyZ3MgKGZpbGUtbmFtZS1hcy1kaXJlY3RvcnkpIGNhdGVnb3J5
IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJsZXQiIDAgMyAoaGVscC1hcmdz
IChsZXQpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJpZiIg
MCAyIChoZWxwLWFyZ3MgKGlmKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24g
KHQpKSldIDQgWyMoImV4cGFuZC1maWxlLW5hbWUiIDAgMTYgKGhlbHAtYXJncyAoZXhwYW5kLWZp
bGUtbmFtZSkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImNv
bmNhdCIgMCA2IChoZWxwLWFyZ3MgKGNvbmNhdCkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0
b24gYnV0dG9uICh0KSkpICMoInNldHEiIDAgNCAoaGVscC1hcmdzIChzZXRxKSBjYXRlZ29yeSBo
ZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygibGV0IiAwIDMgKGhlbHAtYXJncyAo
bGV0KSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygiY29uZCIg
MCA0IChoZWxwLWFyZ3MgKGNvbmQpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRv
biAodCkpKSAjKCJmaWxlLXRydWVuYW1lIiAwIDEzIChoZWxwLWFyZ3MgKGZpbGUtdHJ1ZW5hbWUp
IGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCIjPGxhbWJkYSAz
N0Y+IiA5IDEyIChhY3Rpb24gaGVscC1mbnMtLWRpc3BsYXktZnVuY3Rpb24ga2V5bWFwIChrZXlt
YXAgKHRvdWNoc2NyZWVuLWRvd24gLiBwdXNoLWJ1dHRvbikgKGhlYWRlci1saW5lIGtleW1hcCAo
dG91Y2hzY3JlZW4tZG93biAuIHB1c2gtYnV0dG9uKSAobW91c2UtMiAuIHB1c2gtYnV0dG9uKSkg
KG1vZGUtbGluZSBrZXltYXAgKHRvdWNoc2NyZWVuLWRvd24gLiBwdXNoLWJ1dHRvbikgKG1vdXNl
LTIgLiBwdXNoLWJ1dHRvbikpIChmb2xsb3ctbGluayAuIG1vdXNlLWZhY2UpIChtb3VzZS0yIC4g
cHVzaC1idXR0b24pICgxMyAuIHB1c2gtYnV0dG9uKSBrZXltYXAgKGJhY2t0YWIgLiBiYWNrd2Fy
ZC1idXR0b24pICgyNyBrZXltYXAgKDkgLiBiYWNrd2FyZC1idXR0b24pKSAoOSAuIGZvcndhcmQt
YnV0dG9uKSkgYnV0dG9uLWRhdGEgKGxhbWJkYSBuaWwgKGZpbGUtdHJ1ZW5hbWUgIn4vV29yay9z
b21lL2xvbmcvcGF0aC90by9wYXJzZS90aGF0L2lzL3ZlcnkvZGVlcC9kZWVwL2RlZXAvc3VwZXIv
ZHVwZXIvZGVlcC9kZWVwLmVsIikpIGNhdGVnb3J5IHQgZm9sbG93LWxpbmsgdCBidXR0b24gdCBo
ZWxwLWVjaG8gIm1vdXNlLTIsIFJFVDogRGlzcGxheSB0aGUgZnVuY3Rpb24ncyBib2R5IiBtb3Vz
ZS1mYWNlIGhpZ2hsaWdodCBmb250LWxvY2stZmFjZSBidXR0b24gZmFjZSBidXR0b24pKSAjKCJi
ZW5jaG1hcmstY2FsbCIgMCAxNCAoaGVscC1hcmdzIChiZW5jaG1hcmstY2FsbCkgY2F0ZWdvcnkg
aGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImV2YWwiIDAgNCAoaGVscC1hcmdz
IChldmFsKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygiZWxp
c3AtLWV2YWwtbGFzdC1zZXhwIiAwIDIxIChoZWxwLWFyZ3MgKGVsaXNwLS1ldmFsLWxhc3Qtc2V4
cCkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoIiM8Y29tcGls
ZWQtZnVuY3Rpb24gQ0I4PiIgMjAgMjMgKGFjdGlvbiBoZWxwLWZucy0tZGlzcGxheS1mdW5jdGlv
biBrZXltYXAgKGtleW1hcCAodG91Y2hzY3JlZW4tZG93biAuIHB1c2gtYnV0dG9uKSAoaGVhZGVy
LWxpbmUga2V5bWFwICh0b3VjaHNjcmVlbi1kb3duIC4gcHVzaC1idXR0b24pIChtb3VzZS0yIC4g
cHVzaC1idXR0b24pKSAobW9kZS1saW5lIGtleW1hcCAodG91Y2hzY3JlZW4tZG93biAuIHB1c2gt
YnV0dG9uKSAobW91c2UtMiAuIHB1c2gtYnV0dG9uKSkgKGZvbGxvdy1saW5rIC4gbW91c2UtZmFj
ZSkgKG1vdXNlLTIgLiBwdXNoLWJ1dHRvbikgKDEzIC4gcHVzaC1idXR0b24pIGtleW1hcCAoYmFj
a3RhYiAuIGJhY2t3YXJkLWJ1dHRvbikgKDI3IGtleW1hcCAoOSAuIGJhY2t3YXJkLWJ1dHRvbikp
ICg5IC4gZm9yd2FyZC1idXR0b24pKSBidXR0b24tZGF0YSAjWzAgIlwzMDFcMzAwIVwyMDciIFtu
aWwgZWxpc3AtLWV2YWwtbGFzdC1zZXhwXSAyXSBjYXRlZ29yeSB0IGZvbGxvdy1saW5rIHQgYnV0
dG9uIHQgaGVscC1lY2hvICJtb3VzZS0yLCBSRVQ6IERpc3BsYXkgdGhlIGZ1bmN0aW9uJ3MgYm9k
eSIgbW91c2UtZmFjZSBoaWdobGlnaHQgZm9udC1sb2NrLWZhY2UgYnV0dG9uIGZhY2UgYnV0dG9u
KSkgIygiIzxzdWJyLW5hdGl2ZS1lbGlzcCBldmFsLWxhc3Qtc2V4cD4iIDIwIDM0IChidXR0b24g
KHQpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGhlbHAtYXJncyAoZXZhbC1sYXN0LXNl
eHApKSkgIygiIzxjb21waWxlZC1mdW5jdGlvbiBEODU+IiAyMCAyMyAoYWN0aW9uIGhlbHAtZm5z
LS1kaXNwbGF5LWZ1bmN0aW9uIGtleW1hcCAoa2V5bWFwICh0b3VjaHNjcmVlbi1kb3duIC4gcHVz
aC1idXR0b24pIChoZWFkZXItbGluZSBrZXltYXAgKHRvdWNoc2NyZWVuLWRvd24gLiBwdXNoLWJ1
dHRvbikgKG1vdXNlLTIgLiBwdXNoLWJ1dHRvbikpIChtb2RlLWxpbmUga2V5bWFwICh0b3VjaHNj
cmVlbi1kb3duIC4gcHVzaC1idXR0b24pIChtb3VzZS0yIC4gcHVzaC1idXR0b24pKSAoZm9sbG93
LWxpbmsgLiBtb3VzZS1mYWNlKSAobW91c2UtMiAuIHB1c2gtYnV0dG9uKSAoMTMgLiBwdXNoLWJ1
dHRvbikga2V5bWFwIChiYWNrdGFiIC4gYmFja3dhcmQtYnV0dG9uKSAoMjcga2V5bWFwICg5IC4g
YmFja3dhcmQtYnV0dG9uKSkgKDkgLiBmb3J3YXJkLWJ1dHRvbikpIGJ1dHRvbi1kYXRhICNbKCZy
ZXN0IF9pdCkgIggJIVwyMTESXDIwNyIgW2FkLS1hZGRvaXQtZnVuY3Rpb24gZXZhbC1sYXN0LXNl
eHAtYXJnLWludGVybmFsIGFkLXJldHVybi12YWx1ZV0gMl0gY2F0ZWdvcnkgdCBmb2xsb3ctbGlu
ayB0IGJ1dHRvbiB0IGhlbHAtZWNobyAibW91c2UtMiwgUkVUOiBEaXNwbGF5IHRoZSBmdW5jdGlv
bidzIGJvZHkiIG1vdXNlLWZhY2UgaGlnaGxpZ2h0IGZvbnQtbG9jay1mYWNlIGJ1dHRvbiBmYWNl
IGJ1dHRvbikpICMoImV2YWwtc2V4cC1mdS1mbGFzaC1kb2l0LXNpbXBsZSIgMCAzMCAoaGVscC1h
cmdzIChldmFsLXNleHAtZnUtZmxhc2gtZG9pdC1zaW1wbGUpIGNhdGVnb3J5IGhlbHAtZnVuY3Rp
b24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJldmFsLXNleHAtZnUtZmxhc2gtZG9pdCIgMCAyMyAo
aGVscC1hcmdzIChldmFsLXNleHAtZnUtZmxhc2gtZG9pdCkgY2F0ZWdvcnkgaGVscC1mdW5jdGlv
bi1idXR0b24gYnV0dG9uICh0KSkpICMoImVzZi1mbGFzaC1kb2l0IiAwIDE0IChoZWxwLWFyZ3Mg
KGVzZi1mbGFzaC1kb2l0KSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQp
KSldIDQzIFsjKCJsZXQiIDAgMyAoaGVscC1hcmdzIChsZXQpIGNhdGVnb3J5IGhlbHAtZnVuY3Rp
b24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJpZiIgMCAyIChoZWxwLWFyZ3MgKGlmKSBjYXRlZ29y
eSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygib3IiIDAgMiAoaGVscC1hcmdz
IChvcikgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImxldCIg
MCAzIChoZWxwLWFyZ3MgKGxldCkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9u
ICh0KSkpICMoImlmIiAwIDIgKGhlbHAtYXJncyAoaWYpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24t
YnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJsZXQiIDAgMyAoaGVscC1hcmdzIChsZXQpIGNhdGVnb3J5
IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJ3aGlsZSIgMCA1IChoZWxwLWFy
Z3MgKHdoaWxlKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygi
bGV0IiAwIDMgKGhlbHAtYXJncyAobGV0KSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBi
dXR0b24gKHQpKSkgIygiZmlsZS10cnVlbmFtZSIgMCAxMyAoaGVscC1hcmdzIChmaWxlLXRydWVu
YW1lKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygiZmlsZS1u
YW1lLWFzLWRpcmVjdG9yeSIgMCAyMiAoaGVscC1hcmdzIChmaWxlLW5hbWUtYXMtZGlyZWN0b3J5
KSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygibGV0IiAwIDMg
KGhlbHAtYXJncyAobGV0KSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQp
KSkgIygiaWYiIDAgMiAoaGVscC1hcmdzIChpZikgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0
b24gYnV0dG9uICh0KSkpICMoIm9yIiAwIDIgKGhlbHAtYXJncyAob3IpIGNhdGVnb3J5IGhlbHAt
ZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJsZXQiIDAgMyAoaGVscC1hcmdzIChsZXQp
IGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJpZiIgMCAyICho
ZWxwLWFyZ3MgKGlmKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkg
IygibGV0IiAwIDMgKGhlbHAtYXJncyAobGV0KSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRv
biBidXR0b24gKHQpKSldIDMyIFsjKCJvciIgMCAyIChoZWxwLWFyZ3MgKG9yKSBjYXRlZ29yeSBo
ZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygiZmlsZS10cnVlbmFtZSIgMCAxMyAo
aGVscC1hcmdzIChmaWxlLXRydWVuYW1lKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBi
dXR0b24gKHQpKSkgIygiIzxsYW1iZGEgMzdGPiIgOSAxMiAoYWN0aW9uIGhlbHAtZm5zLS1kaXNw
bGF5LWZ1bmN0aW9uIGtleW1hcCAoa2V5bWFwICh0b3VjaHNjcmVlbi1kb3duIC4gcHVzaC1idXR0
b24pIChoZWFkZXItbGluZSBrZXltYXAgKHRvdWNoc2NyZWVuLWRvd24gLiBwdXNoLWJ1dHRvbikg
KG1vdXNlLTIgLiBwdXNoLWJ1dHRvbikpIChtb2RlLWxpbmUga2V5bWFwICh0b3VjaHNjcmVlbi1k
b3duIC4gcHVzaC1idXR0b24pIChtb3VzZS0yIC4gcHVzaC1idXR0b24pKSAoZm9sbG93LWxpbmsg
LiBtb3VzZS1mYWNlKSAobW91c2UtMiAuIHB1c2gtYnV0dG9uKSAoMTMgLiBwdXNoLWJ1dHRvbikg
a2V5bWFwIChiYWNrdGFiIC4gYmFja3dhcmQtYnV0dG9uKSAoMjcga2V5bWFwICg5IC4gYmFja3dh
cmQtYnV0dG9uKSkgKDkgLiBmb3J3YXJkLWJ1dHRvbikpIGJ1dHRvbi1kYXRhIChsYW1iZGEgbmls
IChmaWxlLXRydWVuYW1lICJ+L1dvcmsvc29tZS9sb25nL3BhdGgvdG8vcGFyc2UvdGhhdC9pcy92
ZXJ5L2RlZXAvZGVlcC9kZWVwL3N1cGVyL2R1cGVyL2RlZXAvZGVlcC5lbCIpKSBjYXRlZ29yeSB0
IGZvbGxvdy1saW5rIHQgYnV0dG9uIHQgaGVscC1lY2hvICJtb3VzZS0yLCBSRVQ6IERpc3BsYXkg
dGhlIGZ1bmN0aW9uJ3MgYm9keSIgbW91c2UtZmFjZSBoaWdobGlnaHQgZm9udC1sb2NrLWZhY2Ug
YnV0dG9uIGZhY2UgYnV0dG9uKSkgIygiYmVuY2htYXJrLWNhbGwiIDAgMTQgKGhlbHAtYXJncyAo
YmVuY2htYXJrLWNhbGwpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkp
KSAjKCJldmFsIiAwIDQgKGhlbHAtYXJncyAoZXZhbCkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1i
dXR0b24gYnV0dG9uICh0KSkpICMoImVsaXNwLS1ldmFsLWxhc3Qtc2V4cCIgMCAyMSAoaGVscC1h
cmdzIChlbGlzcC0tZXZhbC1sYXN0LXNleHApIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9u
IGJ1dHRvbiAodCkpKSAjKCIjPGNvbXBpbGVkLWZ1bmN0aW9uIENCOD4iIDIwIDIzIChhY3Rpb24g
aGVscC1mbnMtLWRpc3BsYXktZnVuY3Rpb24ga2V5bWFwIChrZXltYXAgKHRvdWNoc2NyZWVuLWRv
d24gLiBwdXNoLWJ1dHRvbikgKGhlYWRlci1saW5lIGtleW1hcCAodG91Y2hzY3JlZW4tZG93biAu
IHB1c2gtYnV0dG9uKSAobW91c2UtMiAuIHB1c2gtYnV0dG9uKSkgKG1vZGUtbGluZSBrZXltYXAg
KHRvdWNoc2NyZWVuLWRvd24gLiBwdXNoLWJ1dHRvbikgKG1vdXNlLTIgLiBwdXNoLWJ1dHRvbikp
IChmb2xsb3ctbGluayAuIG1vdXNlLWZhY2UpIChtb3VzZS0yIC4gcHVzaC1idXR0b24pICgxMyAu
IHB1c2gtYnV0dG9uKSBrZXltYXAgKGJhY2t0YWIgLiBiYWNrd2FyZC1idXR0b24pICgyNyBrZXlt
YXAgKDkgLiBiYWNrd2FyZC1idXR0b24pKSAoOSAuIGZvcndhcmQtYnV0dG9uKSkgYnV0dG9uLWRh
dGEgI1swICJcMzAxXDMwMCFcMjA3IiBbbmlsIGVsaXNwLS1ldmFsLWxhc3Qtc2V4cF0gMl0gY2F0
ZWdvcnkgdCBmb2xsb3ctbGluayB0IGJ1dHRvbiB0IGhlbHAtZWNobyAibW91c2UtMiwgUkVUOiBE
aXNwbGF5IHRoZSBmdW5jdGlvbidzIGJvZHkiIG1vdXNlLWZhY2UgaGlnaGxpZ2h0IGZvbnQtbG9j
ay1mYWNlIGJ1dHRvbiBmYWNlIGJ1dHRvbikpICMoIiM8c3Vici1uYXRpdmUtZWxpc3AgZXZhbC1s
YXN0LXNleHA+IiAyMCAzNCAoYnV0dG9uICh0KSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRv
biBoZWxwLWFyZ3MgKGV2YWwtbGFzdC1zZXhwKSkpICMoIiM8Y29tcGlsZWQtZnVuY3Rpb24gRDg1
PiIgMjAgMjMgKGFjdGlvbiBoZWxwLWZucy0tZGlzcGxheS1mdW5jdGlvbiBrZXltYXAgKGtleW1h
cCAodG91Y2hzY3JlZW4tZG93biAuIHB1c2gtYnV0dG9uKSAoaGVhZGVyLWxpbmUga2V5bWFwICh0
b3VjaHNjcmVlbi1kb3duIC4gcHVzaC1idXR0b24pIChtb3VzZS0yIC4gcHVzaC1idXR0b24pKSAo
bW9kZS1saW5lIGtleW1hcCAodG91Y2hzY3JlZW4tZG93biAuIHB1c2gtYnV0dG9uKSAobW91c2Ut
MiAuIHB1c2gtYnV0dG9uKSkgKGZvbGxvdy1saW5rIC4gbW91c2UtZmFjZSkgKG1vdXNlLTIgLiBw
dXNoLWJ1dHRvbikgKDEzIC4gcHVzaC1idXR0b24pIGtleW1hcCAoYmFja3RhYiAuIGJhY2t3YXJk
LWJ1dHRvbikgKDI3IGtleW1hcCAoOSAuIGJhY2t3YXJkLWJ1dHRvbikpICg5IC4gZm9yd2FyZC1i
dXR0b24pKSBidXR0b24tZGF0YSAjWygmcmVzdCBfaXQpICIICSFcMjExElwyMDciIFthZC0tYWRk
b2l0LWZ1bmN0aW9uIGV2YWwtbGFzdC1zZXhwLWFyZy1pbnRlcm5hbCBhZC1yZXR1cm4tdmFsdWVd
IDJdIGNhdGVnb3J5IHQgZm9sbG93LWxpbmsgdCBidXR0b24gdCBoZWxwLWVjaG8gIm1vdXNlLTIs
IFJFVDogRGlzcGxheSB0aGUgZnVuY3Rpb24ncyBib2R5IiBtb3VzZS1mYWNlIGhpZ2hsaWdodCBm
b250LWxvY2stZmFjZSBidXR0b24gZmFjZSBidXR0b24pKSAjKCJldmFsLXNleHAtZnUtZmxhc2gt
ZG9pdC1zaW1wbGUiIDAgMzAgKGhlbHAtYXJncyAoZXZhbC1zZXhwLWZ1LWZsYXNoLWRvaXQtc2lt
cGxlKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygiZXZhbC1z
ZXhwLWZ1LWZsYXNoLWRvaXQiIDAgMjMgKGhlbHAtYXJncyAoZXZhbC1zZXhwLWZ1LWZsYXNoLWRv
aXQpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJlc2YtZmxh
c2gtZG9pdCIgMCAxNCAoaGVscC1hcmdzIChlc2YtZmxhc2gtZG9pdCkgY2F0ZWdvcnkgaGVscC1m
dW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImFkLUFkdmljZS1ldmFsLWxhc3Qtc2V4cCIg
MCAyNCAoaGVscC1hcmdzIChhZC1BZHZpY2UtZXZhbC1sYXN0LXNleHApIGNhdGVnb3J5IGhlbHAt
ZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJhcHBseSIgMCA1IChoZWxwLWFyZ3MgKGFw
cGx5KSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygiZXZhbC1s
YXN0LXNleHAiIDAgMTQgKGhlbHAtYXJncyAoZXZhbC1sYXN0LXNleHApIGNhdGVnb3J5IGhlbHAt
ZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCIjPGNvbXBpbGVkLWZ1bmN0aW9uIDUwOT4i
IDIwIDIzIChhY3Rpb24gaGVscC1mbnMtLWRpc3BsYXktZnVuY3Rpb24ga2V5bWFwIChrZXltYXAg
KHRvdWNoc2NyZWVuLWRvd24gLiBwdXNoLWJ1dHRvbikgKGhlYWRlci1saW5lIGtleW1hcCAodG91
Y2hzY3JlZW4tZG93biAuIHB1c2gtYnV0dG9uKSAobW91c2UtMiAuIHB1c2gtYnV0dG9uKSkgKG1v
ZGUtbGluZSBrZXltYXAgKHRvdWNoc2NyZWVuLWRvd24gLiBwdXNoLWJ1dHRvbikgKG1vdXNlLTIg
LiBwdXNoLWJ1dHRvbikpIChmb2xsb3ctbGluayAuIG1vdXNlLWZhY2UpIChtb3VzZS0yIC4gcHVz
aC1idXR0b24pICgxMyAuIHB1c2gtYnV0dG9uKSBrZXltYXAgKGJhY2t0YWIgLiBiYWNrd2FyZC1i
dXR0b24pICgyNyBrZXltYXAgKDkgLiBiYWNrd2FyZC1idXR0b24pKSAoOSAuIGZvcndhcmQtYnV0
dG9uKSkgYnV0dG9uLWRhdGEgI1syNTcgIlwzMDIBIVwyMTEQXDMwMwkhXDIwMw4AXDMwNCBcMjEw
XDMwNQFgXCJcMjA3IiBbZXJvcy0tbGFzdC1yZXN1bHQgZXJvcy0taW5zcGVjdC1idWZmZXItbmFt
ZSBldmFsLWxhc3Qtc2V4cCBnZXQtYnVmZmVyIGVyb3MtaW5zcGVjdC1sYXN0LXJlc3VsdCBlcm9z
LS1ldmFsLW92ZXJsYXldIDUgKCIvaG9tZS95YW50YXI5Mi8uZW1hY3MuZC9zdHJhaWdodC9idWls
ZC9lcm9zL2Vyb3MuZWxjIiAuIDY0MzEpICJQIl0gY2F0ZWdvcnkgdCBmb2xsb3ctbGluayB0IGJ1
dHRvbiB0IGhlbHAtZWNobyAibW91c2UtMiwgUkVUOiBEaXNwbGF5IHRoZSBmdW5jdGlvbidzIGJv
ZHkiIG1vdXNlLWZhY2UgaGlnaGxpZ2h0IGZvbnQtbG9jay1mYWNlIGJ1dHRvbiBmYWNlIGJ1dHRv
bikpXSA0IFsjKCJmaW5kLWZpbGUtbmFtZS1oYW5kbGVyIiAwIDIyIChoZWxwLWFyZ3MgKGZpbmQt
ZmlsZS1uYW1lLWhhbmRsZXIpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAo
dCkpKSAjKCJsZXQiIDAgMyAoaGVscC1hcmdzIChsZXQpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24t
YnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJ3aGlsZSIgMCA1IChoZWxwLWFyZ3MgKHdoaWxlKSBjYXRl
Z29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygibGV0IiAwIDMgKGhlbHAt
YXJncyAobGV0KSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygi
ZmlsZS10cnVlbmFtZSIgMCAxMyAoaGVscC1hcmdzIChmaWxlLXRydWVuYW1lKSBjYXRlZ29yeSBo
ZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygiIzxsYW1iZGEgMzdGPiIgOSAxMiAo
YWN0aW9uIGhlbHAtZm5zLS1kaXNwbGF5LWZ1bmN0aW9uIGtleW1hcCAoa2V5bWFwICh0b3VjaHNj
cmVlbi1kb3duIC4gcHVzaC1idXR0b24pIChoZWFkZXItbGluZSBrZXltYXAgKHRvdWNoc2NyZWVu
LWRvd24gLiBwdXNoLWJ1dHRvbikgKG1vdXNlLTIgLiBwdXNoLWJ1dHRvbikpIChtb2RlLWxpbmUg
a2V5bWFwICh0b3VjaHNjcmVlbi1kb3duIC4gcHVzaC1idXR0b24pIChtb3VzZS0yIC4gcHVzaC1i
dXR0b24pKSAoZm9sbG93LWxpbmsgLiBtb3VzZS1mYWNlKSAobW91c2UtMiAuIHB1c2gtYnV0dG9u
KSAoMTMgLiBwdXNoLWJ1dHRvbikga2V5bWFwIChiYWNrdGFiIC4gYmFja3dhcmQtYnV0dG9uKSAo
Mjcga2V5bWFwICg5IC4gYmFja3dhcmQtYnV0dG9uKSkgKDkgLiBmb3J3YXJkLWJ1dHRvbikpIGJ1
dHRvbi1kYXRhIChsYW1iZGEgbmlsIChmaWxlLXRydWVuYW1lICJ+L1dvcmsvc29tZS9sb25nL3Bh
dGgvdG8vcGFyc2UvdGhhdC9pcy92ZXJ5L2RlZXAvZGVlcC9kZWVwL3N1cGVyL2R1cGVyL2RlZXAv
ZGVlcC5lbCIpKSBjYXRlZ29yeSB0IGZvbGxvdy1saW5rIHQgYnV0dG9uIHQgaGVscC1lY2hvICJt
b3VzZS0yLCBSRVQ6IERpc3BsYXkgdGhlIGZ1bmN0aW9uJ3MgYm9keSIgbW91c2UtZmFjZSBoaWdo
bGlnaHQgZm9udC1sb2NrLWZhY2UgYnV0dG9uIGZhY2UgYnV0dG9uKSkgIygiYmVuY2htYXJrLWNh
bGwiIDAgMTQgKGhlbHAtYXJncyAoYmVuY2htYXJrLWNhbGwpIGNhdGVnb3J5IGhlbHAtZnVuY3Rp
b24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJldmFsIiAwIDQgKGhlbHAtYXJncyAoZXZhbCkgY2F0
ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImVsaXNwLS1ldmFsLWxh
c3Qtc2V4cCIgMCAyMSAoaGVscC1hcmdzIChlbGlzcC0tZXZhbC1sYXN0LXNleHApIGNhdGVnb3J5
IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCIjPGNvbXBpbGVkLWZ1bmN0aW9u
IENCOD4iIDIwIDIzIChhY3Rpb24gaGVscC1mbnMtLWRpc3BsYXktZnVuY3Rpb24ga2V5bWFwIChr
ZXltYXAgKHRvdWNoc2NyZWVuLWRvd24gLiBwdXNoLWJ1dHRvbikgKGhlYWRlci1saW5lIGtleW1h
cCAodG91Y2hzY3JlZW4tZG93biAuIHB1c2gtYnV0dG9uKSAobW91c2UtMiAuIHB1c2gtYnV0dG9u
KSkgKG1vZGUtbGluZSBrZXltYXAgKHRvdWNoc2NyZWVuLWRvd24gLiBwdXNoLWJ1dHRvbikgKG1v
dXNlLTIgLiBwdXNoLWJ1dHRvbikpIChmb2xsb3ctbGluayAuIG1vdXNlLWZhY2UpIChtb3VzZS0y
IC4gcHVzaC1idXR0b24pICgxMyAuIHB1c2gtYnV0dG9uKSBrZXltYXAgKGJhY2t0YWIgLiBiYWNr
d2FyZC1idXR0b24pICgyNyBrZXltYXAgKDkgLiBiYWNrd2FyZC1idXR0b24pKSAoOSAuIGZvcndh
cmQtYnV0dG9uKSkgYnV0dG9uLWRhdGEgI1swICJcMzAxXDMwMCFcMjA3IiBbbmlsIGVsaXNwLS1l
dmFsLWxhc3Qtc2V4cF0gMl0gY2F0ZWdvcnkgdCBmb2xsb3ctbGluayB0IGJ1dHRvbiB0IGhlbHAt
ZWNobyAibW91c2UtMiwgUkVUOiBEaXNwbGF5IHRoZSBmdW5jdGlvbidzIGJvZHkiIG1vdXNlLWZh
Y2UgaGlnaGxpZ2h0IGZvbnQtbG9jay1mYWNlIGJ1dHRvbiBmYWNlIGJ1dHRvbikpICMoIiM8c3Vi
ci1uYXRpdmUtZWxpc3AgZXZhbC1sYXN0LXNleHA+IiAyMCAzNCAoYnV0dG9uICh0KSBjYXRlZ29y
eSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBoZWxwLWFyZ3MgKGV2YWwtbGFzdC1zZXhwKSkpICMoIiM8
Y29tcGlsZWQtZnVuY3Rpb24gRDg1PiIgMjAgMjMgKGFjdGlvbiBoZWxwLWZucy0tZGlzcGxheS1m
dW5jdGlvbiBrZXltYXAgKGtleW1hcCAodG91Y2hzY3JlZW4tZG93biAuIHB1c2gtYnV0dG9uKSAo
aGVhZGVyLWxpbmUga2V5bWFwICh0b3VjaHNjcmVlbi1kb3duIC4gcHVzaC1idXR0b24pIChtb3Vz
ZS0yIC4gcHVzaC1idXR0b24pKSAobW9kZS1saW5lIGtleW1hcCAodG91Y2hzY3JlZW4tZG93biAu
IHB1c2gtYnV0dG9uKSAobW91c2UtMiAuIHB1c2gtYnV0dG9uKSkgKGZvbGxvdy1saW5rIC4gbW91
c2UtZmFjZSkgKG1vdXNlLTIgLiBwdXNoLWJ1dHRvbikgKDEzIC4gcHVzaC1idXR0b24pIGtleW1h
cCAoYmFja3RhYiAuIGJhY2t3YXJkLWJ1dHRvbikgKDI3IGtleW1hcCAoOSAuIGJhY2t3YXJkLWJ1
dHRvbikpICg5IC4gZm9yd2FyZC1idXR0b24pKSBidXR0b24tZGF0YSAjWygmcmVzdCBfaXQpICII
CSFcMjExElwyMDciIFthZC0tYWRkb2l0LWZ1bmN0aW9uIGV2YWwtbGFzdC1zZXhwLWFyZy1pbnRl
cm5hbCBhZC1yZXR1cm4tdmFsdWVdIDJdIGNhdGVnb3J5IHQgZm9sbG93LWxpbmsgdCBidXR0b24g
dCBoZWxwLWVjaG8gIm1vdXNlLTIsIFJFVDogRGlzcGxheSB0aGUgZnVuY3Rpb24ncyBib2R5IiBt
b3VzZS1mYWNlIGhpZ2hsaWdodCBmb250LWxvY2stZmFjZSBidXR0b24gZmFjZSBidXR0b24pKSAj
KCJldmFsLXNleHAtZnUtZmxhc2gtZG9pdC1zaW1wbGUiIDAgMzAgKGhlbHAtYXJncyAoZXZhbC1z
ZXhwLWZ1LWZsYXNoLWRvaXQtc2ltcGxlKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBi
dXR0b24gKHQpKSkgIygiZXZhbC1zZXhwLWZ1LWZsYXNoLWRvaXQiIDAgMjMgKGhlbHAtYXJncyAo
ZXZhbC1zZXhwLWZ1LWZsYXNoLWRvaXQpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1
dHRvbiAodCkpKSAjKCJlc2YtZmxhc2gtZG9pdCIgMCAxNCAoaGVscC1hcmdzIChlc2YtZmxhc2gt
ZG9pdCkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImFkLUFk
dmljZS1ldmFsLWxhc3Qtc2V4cCIgMCAyNCAoaGVscC1hcmdzIChhZC1BZHZpY2UtZXZhbC1sYXN0
LXNleHApIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKV0gNjQgWyMo
InNldGNhciIgMCA2IChoZWxwLWFyZ3MgKHNldGNhcikgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1i
dXR0b24gYnV0dG9uICh0KSkpICMoIndoaWxlIiAwIDUgKGhlbHAtYXJncyAod2hpbGUpIGNhdGVn
b3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJsZXQiIDAgMyAoaGVscC1h
cmdzIChsZXQpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJm
aWxlLXRydWVuYW1lIiAwIDEzIChoZWxwLWFyZ3MgKGZpbGUtdHJ1ZW5hbWUpIGNhdGVnb3J5IGhl
bHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJmaWxlLW5hbWUtYXMtZGlyZWN0b3J5
IiAwIDIyIChoZWxwLWFyZ3MgKGZpbGUtbmFtZS1hcy1kaXJlY3RvcnkpIGNhdGVnb3J5IGhlbHAt
ZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJsZXQiIDAgMyAoaGVscC1hcmdzIChsZXQp
IGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJpZiIgMCAyICho
ZWxwLWFyZ3MgKGlmKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkg
Iygib3IiIDAgMiAoaGVscC1hcmdzIChvcikgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24g
YnV0dG9uICh0KSkpICMoImxldCIgMCAzIChoZWxwLWFyZ3MgKGxldCkgY2F0ZWdvcnkgaGVscC1m
dW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImlmIiAwIDIgKGhlbHAtYXJncyAoaWYpIGNh
dGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJsZXQiIDAgMyAoaGVs
cC1hcmdzIChsZXQpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAj
KCJ3aGlsZSIgMCA1IChoZWxwLWFyZ3MgKHdoaWxlKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1
dHRvbiBidXR0b24gKHQpKSkgIygibGV0IiAwIDMgKGhlbHAtYXJncyAobGV0KSBjYXRlZ29yeSBo
ZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygiZmlsZS10cnVlbmFtZSIgMCAxMyAo
aGVscC1hcmdzIChmaWxlLXRydWVuYW1lKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBi
dXR0b24gKHQpKSkgIygiZmlsZS1uYW1lLWFzLWRpcmVjdG9yeSIgMCAyMiAoaGVscC1hcmdzIChm
aWxlLW5hbWUtYXMtZGlyZWN0b3J5KSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0
b24gKHQpKSkgIygibGV0IiAwIDMgKGhlbHAtYXJncyAobGV0KSBjYXRlZ29yeSBoZWxwLWZ1bmN0
aW9uLWJ1dHRvbiBidXR0b24gKHQpKSldIDE4IFsjKCJmaWxlLW5hbWUtYXMtZGlyZWN0b3J5IiAw
IDIyIChoZWxwLWFyZ3MgKGZpbGUtbmFtZS1hcy1kaXJlY3RvcnkpIGNhdGVnb3J5IGhlbHAtZnVu
Y3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJsZXQiIDAgMyAoaGVscC1hcmdzIChsZXQpIGNh
dGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJpZiIgMCAyIChoZWxw
LWFyZ3MgKGlmKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygi
b3IiIDAgMiAoaGVscC1hcmdzIChvcikgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0
dG9uICh0KSkpICMoImxldCIgMCAzIChoZWxwLWFyZ3MgKGxldCkgY2F0ZWdvcnkgaGVscC1mdW5j
dGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImlmIiAwIDIgKGhlbHAtYXJncyAoaWYpIGNhdGVn
b3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJsZXQiIDAgMyAoaGVscC1h
cmdzIChsZXQpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJ3
aGlsZSIgMCA1IChoZWxwLWFyZ3MgKHdoaWxlKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRv
biBidXR0b24gKHQpKSkgIygibGV0IiAwIDMgKGhlbHAtYXJncyAobGV0KSBjYXRlZ29yeSBoZWxw
LWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygiZmlsZS10cnVlbmFtZSIgMCAxMyAoaGVs
cC1hcmdzIChmaWxlLXRydWVuYW1lKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0
b24gKHQpKSkgIygiIzxsYW1iZGEgMzdGPiIgOSAxMiAoYWN0aW9uIGhlbHAtZm5zLS1kaXNwbGF5
LWZ1bmN0aW9uIGtleW1hcCAoa2V5bWFwICh0b3VjaHNjcmVlbi1kb3duIC4gcHVzaC1idXR0b24p
IChoZWFkZXItbGluZSBrZXltYXAgKHRvdWNoc2NyZWVuLWRvd24gLiBwdXNoLWJ1dHRvbikgKG1v
dXNlLTIgLiBwdXNoLWJ1dHRvbikpIChtb2RlLWxpbmUga2V5bWFwICh0b3VjaHNjcmVlbi1kb3du
IC4gcHVzaC1idXR0b24pIChtb3VzZS0yIC4gcHVzaC1idXR0b24pKSAoZm9sbG93LWxpbmsgLiBt
b3VzZS1mYWNlKSAobW91c2UtMiAuIHB1c2gtYnV0dG9uKSAoMTMgLiBwdXNoLWJ1dHRvbikga2V5
bWFwIChiYWNrdGFiIC4gYmFja3dhcmQtYnV0dG9uKSAoMjcga2V5bWFwICg5IC4gYmFja3dhcmQt
YnV0dG9uKSkgKDkgLiBmb3J3YXJkLWJ1dHRvbikpIGJ1dHRvbi1kYXRhIChsYW1iZGEgbmlsIChm
aWxlLXRydWVuYW1lICJ+L1dvcmsvc29tZS9sb25nL3BhdGgvdG8vcGFyc2UvdGhhdC9pcy92ZXJ5
L2RlZXAvZGVlcC9kZWVwL3N1cGVyL2R1cGVyL2RlZXAvZGVlcC5lbCIpKSBjYXRlZ29yeSB0IGZv
bGxvdy1saW5rIHQgYnV0dG9uIHQgaGVscC1lY2hvICJtb3VzZS0yLCBSRVQ6IERpc3BsYXkgdGhl
IGZ1bmN0aW9uJ3MgYm9keSIgbW91c2UtZmFjZSBoaWdobGlnaHQgZm9udC1sb2NrLWZhY2UgYnV0
dG9uIGZhY2UgYnV0dG9uKSkgIygiYmVuY2htYXJrLWNhbGwiIDAgMTQgKGhlbHAtYXJncyAoYmVu
Y2htYXJrLWNhbGwpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAj
KCJldmFsIiAwIDQgKGhlbHAtYXJncyAoZXZhbCkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0
b24gYnV0dG9uICh0KSkpICMoImVsaXNwLS1ldmFsLWxhc3Qtc2V4cCIgMCAyMSAoaGVscC1hcmdz
IChlbGlzcC0tZXZhbC1sYXN0LXNleHApIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1
dHRvbiAodCkpKSAjKCIjPGNvbXBpbGVkLWZ1bmN0aW9uIENCOD4iIDIwIDIzIChhY3Rpb24gaGVs
cC1mbnMtLWRpc3BsYXktZnVuY3Rpb24ga2V5bWFwIChrZXltYXAgKHRvdWNoc2NyZWVuLWRvd24g
LiBwdXNoLWJ1dHRvbikgKGhlYWRlci1saW5lIGtleW1hcCAodG91Y2hzY3JlZW4tZG93biAuIHB1
c2gtYnV0dG9uKSAobW91c2UtMiAuIHB1c2gtYnV0dG9uKSkgKG1vZGUtbGluZSBrZXltYXAgKHRv
dWNoc2NyZWVuLWRvd24gLiBwdXNoLWJ1dHRvbikgKG1vdXNlLTIgLiBwdXNoLWJ1dHRvbikpIChm
b2xsb3ctbGluayAuIG1vdXNlLWZhY2UpIChtb3VzZS0yIC4gcHVzaC1idXR0b24pICgxMyAuIHB1
c2gtYnV0dG9uKSBrZXltYXAgKGJhY2t0YWIgLiBiYWNrd2FyZC1idXR0b24pICgyNyBrZXltYXAg
KDkgLiBiYWNrd2FyZC1idXR0b24pKSAoOSAuIGZvcndhcmQtYnV0dG9uKSkgYnV0dG9uLWRhdGEg
I1swICJcMzAxXDMwMCFcMjA3IiBbbmlsIGVsaXNwLS1ldmFsLWxhc3Qtc2V4cF0gMl0gY2F0ZWdv
cnkgdCBmb2xsb3ctbGluayB0IGJ1dHRvbiB0IGhlbHAtZWNobyAibW91c2UtMiwgUkVUOiBEaXNw
bGF5IHRoZSBmdW5jdGlvbidzIGJvZHkiIG1vdXNlLWZhY2UgaGlnaGxpZ2h0IGZvbnQtbG9jay1m
YWNlIGJ1dHRvbiBmYWNlIGJ1dHRvbikpICMoIiM8c3Vici1uYXRpdmUtZWxpc3AgZXZhbC1sYXN0
LXNleHA+IiAyMCAzNCAoYnV0dG9uICh0KSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBo
ZWxwLWFyZ3MgKGV2YWwtbGFzdC1zZXhwKSkpXSAyOCBbIygibGV0IiAwIDMgKGhlbHAtYXJncyAo
bGV0KSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygid2hpbGUi
IDAgNSAoaGVscC1hcmdzICh3aGlsZSkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0
dG9uICh0KSkpICMoImxldCIgMCAzIChoZWxwLWFyZ3MgKGxldCkgY2F0ZWdvcnkgaGVscC1mdW5j
dGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImZpbGUtdHJ1ZW5hbWUiIDAgMTMgKGhlbHAtYXJn
cyAoZmlsZS10cnVlbmFtZSkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0
KSkpICMoImZpbGUtbmFtZS1hcy1kaXJlY3RvcnkiIDAgMjIgKGhlbHAtYXJncyAoZmlsZS1uYW1l
LWFzLWRpcmVjdG9yeSkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkp
ICMoImxldCIgMCAzIChoZWxwLWFyZ3MgKGxldCkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0
b24gYnV0dG9uICh0KSkpICMoImlmIiAwIDIgKGhlbHAtYXJncyAoaWYpIGNhdGVnb3J5IGhlbHAt
ZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJvciIgMCAyIChoZWxwLWFyZ3MgKG9yKSBj
YXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygibGV0IiAwIDMgKGhl
bHAtYXJncyAobGV0KSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkg
IygiaWYiIDAgMiAoaGVscC1hcmdzIChpZikgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24g
YnV0dG9uICh0KSkpICMoImxldCIgMCAzIChoZWxwLWFyZ3MgKGxldCkgY2F0ZWdvcnkgaGVscC1m
dW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoIndoaWxlIiAwIDUgKGhlbHAtYXJncyAod2hp
bGUpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJsZXQiIDAg
MyAoaGVscC1hcmdzIChsZXQpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAo
dCkpKSAjKCJmaWxlLXRydWVuYW1lIiAwIDEzIChoZWxwLWFyZ3MgKGZpbGUtdHJ1ZW5hbWUpIGNh
dGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJmaWxlLW5hbWUtYXMt
ZGlyZWN0b3J5IiAwIDIyIChoZWxwLWFyZ3MgKGZpbGUtbmFtZS1hcy1kaXJlY3RvcnkpIGNhdGVn
b3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJsZXQiIDAgMyAoaGVscC1h
cmdzIChsZXQpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKV0gMjQg
WyMoImNvbnMiIDAgNCAoaGVscC1hcmdzIChjb25zKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1
dHRvbiBidXR0b24gKHQpKSkgIygiY29ucyIgMCA0IChoZWxwLWFyZ3MgKGNvbnMpIGNhdGVnb3J5
IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJzZXRjYXIiIDAgNiAoaGVscC1h
cmdzIChzZXRjYXIpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAj
KCJsZXQiIDAgMyAoaGVscC1hcmdzIChsZXQpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9u
IGJ1dHRvbiAodCkpKSAjKCJpZiIgMCAyIChoZWxwLWFyZ3MgKGlmKSBjYXRlZ29yeSBoZWxwLWZ1
bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygib3IiIDAgMiAoaGVscC1hcmdzIChvcikgY2F0
ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImxldCIgMCAzIChoZWxw
LWFyZ3MgKGxldCkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMo
ImlmIiAwIDIgKGhlbHAtYXJncyAoaWYpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1
dHRvbiAodCkpKSAjKCJsZXQiIDAgMyAoaGVscC1hcmdzIChsZXQpIGNhdGVnb3J5IGhlbHAtZnVu
Y3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJ3aGlsZSIgMCA1IChoZWxwLWFyZ3MgKHdoaWxl
KSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygibGV0IiAwIDMg
KGhlbHAtYXJncyAobGV0KSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQp
KSkgIygiZmlsZS10cnVlbmFtZSIgMCAxMyAoaGVscC1hcmdzIChmaWxlLXRydWVuYW1lKSBjYXRl
Z29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygiZmlsZS1uYW1lLWFzLWRp
cmVjdG9yeSIgMCAyMiAoaGVscC1hcmdzIChmaWxlLW5hbWUtYXMtZGlyZWN0b3J5KSBjYXRlZ29y
eSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygibGV0IiAwIDMgKGhlbHAtYXJn
cyAobGV0KSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygiaWYi
IDAgMiAoaGVscC1hcmdzIChpZikgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9u
ICh0KSkpICMoIm9yIiAwIDIgKGhlbHAtYXJncyAob3IpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24t
YnV0dG9uIGJ1dHRvbiAodCkpKV0gNiBbIygiZXEiIDAgMiAoaGVscC1hcmdzIChlcSkgY2F0ZWdv
cnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImlmIiAwIDIgKGhlbHAtYXJn
cyAoaWYpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJsZXQi
IDAgMyAoaGVscC1hcmdzIChsZXQpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRv
biAodCkpKSAjKCJmaWxlLXRydWVuYW1lIiAwIDEzIChoZWxwLWFyZ3MgKGZpbGUtdHJ1ZW5hbWUp
IGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJmaWxlLW5hbWUt
YXMtZGlyZWN0b3J5IiAwIDIyIChoZWxwLWFyZ3MgKGZpbGUtbmFtZS1hcy1kaXJlY3RvcnkpIGNh
dGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJsZXQiIDAgMyAoaGVs
cC1hcmdzIChsZXQpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAj
KCJpZiIgMCAyIChoZWxwLWFyZ3MgKGlmKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBi
dXR0b24gKHQpKSkgIygib3IiIDAgMiAoaGVscC1hcmdzIChvcikgY2F0ZWdvcnkgaGVscC1mdW5j
dGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImxldCIgMCAzIChoZWxwLWFyZ3MgKGxldCkgY2F0
ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImlmIiAwIDIgKGhlbHAt
YXJncyAoaWYpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJs
ZXQiIDAgMyAoaGVscC1hcmdzIChsZXQpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1
dHRvbiAodCkpKSAjKCJ3aGlsZSIgMCA1IChoZWxwLWFyZ3MgKHdoaWxlKSBjYXRlZ29yeSBoZWxw
LWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygibGV0IiAwIDMgKGhlbHAtYXJncyAobGV0
KSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygiZmlsZS10cnVl
bmFtZSIgMCAxMyAoaGVscC1hcmdzIChmaWxlLXRydWVuYW1lKSBjYXRlZ29yeSBoZWxwLWZ1bmN0
aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygiZmlsZS1uYW1lLWFzLWRpcmVjdG9yeSIgMCAyMiAo
aGVscC1hcmdzIChmaWxlLW5hbWUtYXMtZGlyZWN0b3J5KSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9u
LWJ1dHRvbiBidXR0b24gKHQpKSkgIygibGV0IiAwIDMgKGhlbHAtYXJncyAobGV0KSBjYXRlZ29y
eSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSldIDExIFsjKCJvciIgMCAyIChoZWxw
LWFyZ3MgKG9yKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygi
bGV0IiAwIDMgKGhlbHAtYXJncyAobGV0KSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBi
dXR0b24gKHQpKSkgIygiaWYiIDAgMiAoaGVscC1hcmdzIChpZikgY2F0ZWdvcnkgaGVscC1mdW5j
dGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImxldCIgMCAzIChoZWxwLWFyZ3MgKGxldCkgY2F0
ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoIndoaWxlIiAwIDUgKGhl
bHAtYXJncyAod2hpbGUpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkp
KSAjKCJsZXQiIDAgMyAoaGVscC1hcmdzIChsZXQpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0
dG9uIGJ1dHRvbiAodCkpKSAjKCJmaWxlLXRydWVuYW1lIiAwIDEzIChoZWxwLWFyZ3MgKGZpbGUt
dHJ1ZW5hbWUpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCIj
PGxhbWJkYSAzN0Y+IiA5IDEyIChhY3Rpb24gaGVscC1mbnMtLWRpc3BsYXktZnVuY3Rpb24ga2V5
bWFwIChrZXltYXAgKHRvdWNoc2NyZWVuLWRvd24gLiBwdXNoLWJ1dHRvbikgKGhlYWRlci1saW5l
IGtleW1hcCAodG91Y2hzY3JlZW4tZG93biAuIHB1c2gtYnV0dG9uKSAobW91c2UtMiAuIHB1c2gt
YnV0dG9uKSkgKG1vZGUtbGluZSBrZXltYXAgKHRvdWNoc2NyZWVuLWRvd24gLiBwdXNoLWJ1dHRv
bikgKG1vdXNlLTIgLiBwdXNoLWJ1dHRvbikpIChmb2xsb3ctbGluayAuIG1vdXNlLWZhY2UpICht
b3VzZS0yIC4gcHVzaC1idXR0b24pICgxMyAuIHB1c2gtYnV0dG9uKSBrZXltYXAgKGJhY2t0YWIg
LiBiYWNrd2FyZC1idXR0b24pICgyNyBrZXltYXAgKDkgLiBiYWNrd2FyZC1idXR0b24pKSAoOSAu
IGZvcndhcmQtYnV0dG9uKSkgYnV0dG9uLWRhdGEgKGxhbWJkYSBuaWwgKGZpbGUtdHJ1ZW5hbWUg
In4vV29yay9zb21lL2xvbmcvcGF0aC90by9wYXJzZS90aGF0L2lzL3ZlcnkvZGVlcC9kZWVwL2Rl
ZXAvc3VwZXIvZHVwZXIvZGVlcC9kZWVwLmVsIikpIGNhdGVnb3J5IHQgZm9sbG93LWxpbmsgdCBi
dXR0b24gdCBoZWxwLWVjaG8gIm1vdXNlLTIsIFJFVDogRGlzcGxheSB0aGUgZnVuY3Rpb24ncyBi
b2R5IiBtb3VzZS1mYWNlIGhpZ2hsaWdodCBmb250LWxvY2stZmFjZSBidXR0b24gZmFjZSBidXR0
b24pKSAjKCJiZW5jaG1hcmstY2FsbCIgMCAxNCAoaGVscC1hcmdzIChiZW5jaG1hcmstY2FsbCkg
Y2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImV2YWwiIDAgNCAo
aGVscC1hcmdzIChldmFsKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQp
KSkgIygiZWxpc3AtLWV2YWwtbGFzdC1zZXhwIiAwIDIxIChoZWxwLWFyZ3MgKGVsaXNwLS1ldmFs
LWxhc3Qtc2V4cCkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMo
IiM8Y29tcGlsZWQtZnVuY3Rpb24gQ0I4PiIgMjAgMjMgKGFjdGlvbiBoZWxwLWZucy0tZGlzcGxh
eS1mdW5jdGlvbiBrZXltYXAgKGtleW1hcCAodG91Y2hzY3JlZW4tZG93biAuIHB1c2gtYnV0dG9u
KSAoaGVhZGVyLWxpbmUga2V5bWFwICh0b3VjaHNjcmVlbi1kb3duIC4gcHVzaC1idXR0b24pICht
b3VzZS0yIC4gcHVzaC1idXR0b24pKSAobW9kZS1saW5lIGtleW1hcCAodG91Y2hzY3JlZW4tZG93
biAuIHB1c2gtYnV0dG9uKSAobW91c2UtMiAuIHB1c2gtYnV0dG9uKSkgKGZvbGxvdy1saW5rIC4g
bW91c2UtZmFjZSkgKG1vdXNlLTIgLiBwdXNoLWJ1dHRvbikgKDEzIC4gcHVzaC1idXR0b24pIGtl
eW1hcCAoYmFja3RhYiAuIGJhY2t3YXJkLWJ1dHRvbikgKDI3IGtleW1hcCAoOSAuIGJhY2t3YXJk
LWJ1dHRvbikpICg5IC4gZm9yd2FyZC1idXR0b24pKSBidXR0b24tZGF0YSAjWzAgIlwzMDFcMzAw
IVwyMDciIFtuaWwgZWxpc3AtLWV2YWwtbGFzdC1zZXhwXSAyXSBjYXRlZ29yeSB0IGZvbGxvdy1s
aW5rIHQgYnV0dG9uIHQgaGVscC1lY2hvICJtb3VzZS0yLCBSRVQ6IERpc3BsYXkgdGhlIGZ1bmN0
aW9uJ3MgYm9keSIgbW91c2UtZmFjZSBoaWdobGlnaHQgZm9udC1sb2NrLWZhY2UgYnV0dG9uIGZh
Y2UgYnV0dG9uKSkgIygiIzxzdWJyLW5hdGl2ZS1lbGlzcCBldmFsLWxhc3Qtc2V4cD4iIDIwIDM0
IChidXR0b24gKHQpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGhlbHAtYXJncyAoZXZh
bC1sYXN0LXNleHApKSkgIygiIzxjb21waWxlZC1mdW5jdGlvbiBEODU+IiAyMCAyMyAoYWN0aW9u
IGhlbHAtZm5zLS1kaXNwbGF5LWZ1bmN0aW9uIGtleW1hcCAoa2V5bWFwICh0b3VjaHNjcmVlbi1k
b3duIC4gcHVzaC1idXR0b24pIChoZWFkZXItbGluZSBrZXltYXAgKHRvdWNoc2NyZWVuLWRvd24g
LiBwdXNoLWJ1dHRvbikgKG1vdXNlLTIgLiBwdXNoLWJ1dHRvbikpIChtb2RlLWxpbmUga2V5bWFw
ICh0b3VjaHNjcmVlbi1kb3duIC4gcHVzaC1idXR0b24pIChtb3VzZS0yIC4gcHVzaC1idXR0b24p
KSAoZm9sbG93LWxpbmsgLiBtb3VzZS1mYWNlKSAobW91c2UtMiAuIHB1c2gtYnV0dG9uKSAoMTMg
LiBwdXNoLWJ1dHRvbikga2V5bWFwIChiYWNrdGFiIC4gYmFja3dhcmQtYnV0dG9uKSAoMjcga2V5
bWFwICg5IC4gYmFja3dhcmQtYnV0dG9uKSkgKDkgLiBmb3J3YXJkLWJ1dHRvbikpIGJ1dHRvbi1k
YXRhICNbKCZyZXN0IF9pdCkgIggJIVwyMTESXDIwNyIgW2FkLS1hZGRvaXQtZnVuY3Rpb24gZXZh
bC1sYXN0LXNleHAtYXJnLWludGVybmFsIGFkLXJldHVybi12YWx1ZV0gMl0gY2F0ZWdvcnkgdCBm
b2xsb3ctbGluayB0IGJ1dHRvbiB0IGhlbHAtZWNobyAibW91c2UtMiwgUkVUOiBEaXNwbGF5IHRo
ZSBmdW5jdGlvbidzIGJvZHkiIG1vdXNlLWZhY2UgaGlnaGxpZ2h0IGZvbnQtbG9jay1mYWNlIGJ1
dHRvbiBmYWNlIGJ1dHRvbikpICMoImV2YWwtc2V4cC1mdS1mbGFzaC1kb2l0LXNpbXBsZSIgMCAz
MCAoaGVscC1hcmdzIChldmFsLXNleHAtZnUtZmxhc2gtZG9pdC1zaW1wbGUpIGNhdGVnb3J5IGhl
bHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJldmFsLXNleHAtZnUtZmxhc2gtZG9p
dCIgMCAyMyAoaGVscC1hcmdzIChldmFsLXNleHAtZnUtZmxhc2gtZG9pdCkgY2F0ZWdvcnkgaGVs
cC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpXSA3IFsjKCJhcHBseSIgMCA1IChoZWxwLWFy
Z3MgKGFwcGx5KSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygi
dHJhbXAtcnVuLXJlYWwtaGFuZGxlciIgMCAyMiAoaGVscC1hcmdzICh0cmFtcC1ydW4tcmVhbC1o
YW5kbGVyKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygidHJh
bXAtY29tcGxldGlvbi1maWxlLW5hbWUtaGFuZGxlciIgMCAzNCAoaGVscC1hcmdzICh0cmFtcC1j
b21wbGV0aW9uLWZpbGUtbmFtZS1oYW5kbGVyKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRv
biBidXR0b24gKHQpKSkgIygiZmlsZS1zeW1saW5rLXAiIDAgMTQgKGhlbHAtYXJncyAoZmlsZS1z
eW1saW5rLXApIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJz
ZXRxIiAwIDQgKGhlbHAtYXJncyAoc2V0cSkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24g
YnV0dG9uICh0KSkpICMoImlmIiAwIDIgKGhlbHAtYXJncyAoaWYpIGNhdGVnb3J5IGhlbHAtZnVu
Y3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJpZiIgMCAyIChoZWxwLWFyZ3MgKGlmKSBjYXRl
Z29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygibGV0IiAwIDMgKGhlbHAt
YXJncyAobGV0KSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygi
aWYiIDAgMiAoaGVscC1hcmdzIChpZikgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0
dG9uICh0KSkpICMoImxldCIgMCAzIChoZWxwLWFyZ3MgKGxldCkgY2F0ZWdvcnkgaGVscC1mdW5j
dGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoIndoaWxlIiAwIDUgKGhlbHAtYXJncyAod2hpbGUp
IGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJsZXQiIDAgMyAo
aGVscC1hcmdzIChsZXQpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkp
KSAjKCJmaWxlLXRydWVuYW1lIiAwIDEzIChoZWxwLWFyZ3MgKGZpbGUtdHJ1ZW5hbWUpIGNhdGVn
b3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJmaWxlLW5hbWUtYXMtZGly
ZWN0b3J5IiAwIDIyIChoZWxwLWFyZ3MgKGZpbGUtbmFtZS1hcy1kaXJlY3RvcnkpIGNhdGVnb3J5
IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJsZXQiIDAgMyAoaGVscC1hcmdz
IChsZXQpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJpZiIg
MCAyIChoZWxwLWFyZ3MgKGlmKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24g
KHQpKSldIDMgWyMoIjEtIiAwIDIgKGhlbHAtYXJncyAoMS0pIGNhdGVnb3J5IGhlbHAtZnVuY3Rp
b24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJzZXRjYXIiIDAgNiAoaGVscC1hcmdzIChzZXRjYXIp
IGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJ3aGlsZSIgMCA1
IChoZWxwLWFyZ3MgKHdoaWxlKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24g
KHQpKSkgIygibGV0IiAwIDMgKGhlbHAtYXJncyAobGV0KSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9u
LWJ1dHRvbiBidXR0b24gKHQpKSkgIygiZmlsZS10cnVlbmFtZSIgMCAxMyAoaGVscC1hcmdzIChm
aWxlLXRydWVuYW1lKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkg
IygiIzxsYW1iZGEgMzdGPiIgOSAxMiAoYWN0aW9uIGhlbHAtZm5zLS1kaXNwbGF5LWZ1bmN0aW9u
IGtleW1hcCAoa2V5bWFwICh0b3VjaHNjcmVlbi1kb3duIC4gcHVzaC1idXR0b24pIChoZWFkZXIt
bGluZSBrZXltYXAgKHRvdWNoc2NyZWVuLWRvd24gLiBwdXNoLWJ1dHRvbikgKG1vdXNlLTIgLiBw
dXNoLWJ1dHRvbikpIChtb2RlLWxpbmUga2V5bWFwICh0b3VjaHNjcmVlbi1kb3duIC4gcHVzaC1i
dXR0b24pIChtb3VzZS0yIC4gcHVzaC1idXR0b24pKSAoZm9sbG93LWxpbmsgLiBtb3VzZS1mYWNl
KSAobW91c2UtMiAuIHB1c2gtYnV0dG9uKSAoMTMgLiBwdXNoLWJ1dHRvbikga2V5bWFwIChiYWNr
dGFiIC4gYmFja3dhcmQtYnV0dG9uKSAoMjcga2V5bWFwICg5IC4gYmFja3dhcmQtYnV0dG9uKSkg
KDkgLiBmb3J3YXJkLWJ1dHRvbikpIGJ1dHRvbi1kYXRhIChsYW1iZGEgbmlsIChmaWxlLXRydWVu
YW1lICJ+L1dvcmsvc29tZS9sb25nL3BhdGgvdG8vcGFyc2UvdGhhdC9pcy92ZXJ5L2RlZXAvZGVl
cC9kZWVwL3N1cGVyL2R1cGVyL2RlZXAvZGVlcC5lbCIpKSBjYXRlZ29yeSB0IGZvbGxvdy1saW5r
IHQgYnV0dG9uIHQgaGVscC1lY2hvICJtb3VzZS0yLCBSRVQ6IERpc3BsYXkgdGhlIGZ1bmN0aW9u
J3MgYm9keSIgbW91c2UtZmFjZSBoaWdobGlnaHQgZm9udC1sb2NrLWZhY2UgYnV0dG9uIGZhY2Ug
YnV0dG9uKSkgIygiYmVuY2htYXJrLWNhbGwiIDAgMTQgKGhlbHAtYXJncyAoYmVuY2htYXJrLWNh
bGwpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJldmFsIiAw
IDQgKGhlbHAtYXJncyAoZXZhbCkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9u
ICh0KSkpICMoImVsaXNwLS1ldmFsLWxhc3Qtc2V4cCIgMCAyMSAoaGVscC1hcmdzIChlbGlzcC0t
ZXZhbC1sYXN0LXNleHApIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkp
KSAjKCIjPGNvbXBpbGVkLWZ1bmN0aW9uIENCOD4iIDIwIDIzIChhY3Rpb24gaGVscC1mbnMtLWRp
c3BsYXktZnVuY3Rpb24ga2V5bWFwIChrZXltYXAgKHRvdWNoc2NyZWVuLWRvd24gLiBwdXNoLWJ1
dHRvbikgKGhlYWRlci1saW5lIGtleW1hcCAodG91Y2hzY3JlZW4tZG93biAuIHB1c2gtYnV0dG9u
KSAobW91c2UtMiAuIHB1c2gtYnV0dG9uKSkgKG1vZGUtbGluZSBrZXltYXAgKHRvdWNoc2NyZWVu
LWRvd24gLiBwdXNoLWJ1dHRvbikgKG1vdXNlLTIgLiBwdXNoLWJ1dHRvbikpIChmb2xsb3ctbGlu
ayAuIG1vdXNlLWZhY2UpIChtb3VzZS0yIC4gcHVzaC1idXR0b24pICgxMyAuIHB1c2gtYnV0dG9u
KSBrZXltYXAgKGJhY2t0YWIgLiBiYWNrd2FyZC1idXR0b24pICgyNyBrZXltYXAgKDkgLiBiYWNr
d2FyZC1idXR0b24pKSAoOSAuIGZvcndhcmQtYnV0dG9uKSkgYnV0dG9uLWRhdGEgI1swICJcMzAx
XDMwMCFcMjA3IiBbbmlsIGVsaXNwLS1ldmFsLWxhc3Qtc2V4cF0gMl0gY2F0ZWdvcnkgdCBmb2xs
b3ctbGluayB0IGJ1dHRvbiB0IGhlbHAtZWNobyAibW91c2UtMiwgUkVUOiBEaXNwbGF5IHRoZSBm
dW5jdGlvbidzIGJvZHkiIG1vdXNlLWZhY2UgaGlnaGxpZ2h0IGZvbnQtbG9jay1mYWNlIGJ1dHRv
biBmYWNlIGJ1dHRvbikpICMoIiM8c3Vici1uYXRpdmUtZWxpc3AgZXZhbC1sYXN0LXNleHA+IiAy
MCAzNCAoYnV0dG9uICh0KSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBoZWxwLWFyZ3Mg
KGV2YWwtbGFzdC1zZXhwKSkpICMoIiM8Y29tcGlsZWQtZnVuY3Rpb24gRDg1PiIgMjAgMjMgKGFj
dGlvbiBoZWxwLWZucy0tZGlzcGxheS1mdW5jdGlvbiBrZXltYXAgKGtleW1hcCAodG91Y2hzY3Jl
ZW4tZG93biAuIHB1c2gtYnV0dG9uKSAoaGVhZGVyLWxpbmUga2V5bWFwICh0b3VjaHNjcmVlbi1k
b3duIC4gcHVzaC1idXR0b24pIChtb3VzZS0yIC4gcHVzaC1idXR0b24pKSAobW9kZS1saW5lIGtl
eW1hcCAodG91Y2hzY3JlZW4tZG93biAuIHB1c2gtYnV0dG9uKSAobW91c2UtMiAuIHB1c2gtYnV0
dG9uKSkgKGZvbGxvdy1saW5rIC4gbW91c2UtZmFjZSkgKG1vdXNlLTIgLiBwdXNoLWJ1dHRvbikg
KDEzIC4gcHVzaC1idXR0b24pIGtleW1hcCAoYmFja3RhYiAuIGJhY2t3YXJkLWJ1dHRvbikgKDI3
IGtleW1hcCAoOSAuIGJhY2t3YXJkLWJ1dHRvbikpICg5IC4gZm9yd2FyZC1idXR0b24pKSBidXR0
b24tZGF0YSAjWygmcmVzdCBfaXQpICIICSFcMjExElwyMDciIFthZC0tYWRkb2l0LWZ1bmN0aW9u
IGV2YWwtbGFzdC1zZXhwLWFyZy1pbnRlcm5hbCBhZC1yZXR1cm4tdmFsdWVdIDJdIGNhdGVnb3J5
IHQgZm9sbG93LWxpbmsgdCBidXR0b24gdCBoZWxwLWVjaG8gIm1vdXNlLTIsIFJFVDogRGlzcGxh
eSB0aGUgZnVuY3Rpb24ncyBib2R5IiBtb3VzZS1mYWNlIGhpZ2hsaWdodCBmb250LWxvY2stZmFj
ZSBidXR0b24gZmFjZSBidXR0b24pKSAjKCJldmFsLXNleHAtZnUtZmxhc2gtZG9pdC1zaW1wbGUi
IDAgMzAgKGhlbHAtYXJncyAoZXZhbC1zZXhwLWZ1LWZsYXNoLWRvaXQtc2ltcGxlKSBjYXRlZ29y
eSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygiZXZhbC1zZXhwLWZ1LWZsYXNo
LWRvaXQiIDAgMjMgKGhlbHAtYXJncyAoZXZhbC1zZXhwLWZ1LWZsYXNoLWRvaXQpIGNhdGVnb3J5
IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJlc2YtZmxhc2gtZG9pdCIgMCAx
NCAoaGVscC1hcmdzIChlc2YtZmxhc2gtZG9pdCkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0
b24gYnV0dG9uICh0KSkpICMoImFkLUFkdmljZS1ldmFsLWxhc3Qtc2V4cCIgMCAyNCAoaGVscC1h
cmdzIChhZC1BZHZpY2UtZXZhbC1sYXN0LXNleHApIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0
dG9uIGJ1dHRvbiAodCkpKV0gMyBbIygidHJhbXAtcnVuLXJlYWwtaGFuZGxlciIgMCAyMiAoaGVs
cC1hcmdzICh0cmFtcC1ydW4tcmVhbC1oYW5kbGVyKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1
dHRvbiBidXR0b24gKHQpKSkgIygidHJhbXAtY29tcGxldGlvbi1maWxlLW5hbWUtaGFuZGxlciIg
MCAzNCAoaGVscC1hcmdzICh0cmFtcC1jb21wbGV0aW9uLWZpbGUtbmFtZS1oYW5kbGVyKSBjYXRl
Z29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygiZmlsZS1uYW1lLWRpcmVj
dG9yeSIgMCAxOSAoaGVscC1hcmdzIChmaWxlLW5hbWUtZGlyZWN0b3J5KSBjYXRlZ29yeSBoZWxw
LWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygib3IiIDAgMiAoaGVscC1hcmdzIChvcikg
Y2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImxldCIgMCAzICho
ZWxwLWFyZ3MgKGxldCkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkp
ICMoImlmIiAwIDIgKGhlbHAtYXJncyAoaWYpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9u
IGJ1dHRvbiAodCkpKSAjKCJsZXQiIDAgMyAoaGVscC1hcmdzIChsZXQpIGNhdGVnb3J5IGhlbHAt
ZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJ3aGlsZSIgMCA1IChoZWxwLWFyZ3MgKHdo
aWxlKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygibGV0IiAw
IDMgKGhlbHAtYXJncyAobGV0KSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24g
KHQpKSkgIygiZmlsZS10cnVlbmFtZSIgMCAxMyAoaGVscC1hcmdzIChmaWxlLXRydWVuYW1lKSBj
YXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygiZmlsZS1uYW1lLWFz
LWRpcmVjdG9yeSIgMCAyMiAoaGVscC1hcmdzIChmaWxlLW5hbWUtYXMtZGlyZWN0b3J5KSBjYXRl
Z29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygibGV0IiAwIDMgKGhlbHAt
YXJncyAobGV0KSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygi
aWYiIDAgMiAoaGVscC1hcmdzIChpZikgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0
dG9uICh0KSkpICMoIm9yIiAwIDIgKGhlbHAtYXJncyAob3IpIGNhdGVnb3J5IGhlbHAtZnVuY3Rp
b24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJsZXQiIDAgMyAoaGVscC1hcmdzIChsZXQpIGNhdGVn
b3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJpZiIgMCAyIChoZWxwLWFy
Z3MgKGlmKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSldIDEwIFsj
KCJlcXVhbCIgMCA1IChoZWxwLWFyZ3MgKGVxdWFsKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1
dHRvbiBidXR0b24gKHQpKSkgIygiaWYiIDAgMiAoaGVscC1hcmdzIChpZikgY2F0ZWdvcnkgaGVs
cC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImlmIiAwIDIgKGhlbHAtYXJncyAoaWYp
IGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJsZXQiIDAgMyAo
aGVscC1hcmdzIChsZXQpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkp
KSAjKCJpZiIgMCAyIChoZWxwLWFyZ3MgKGlmKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRv
biBidXR0b24gKHQpKSkgIygibGV0IiAwIDMgKGhlbHAtYXJncyAobGV0KSBjYXRlZ29yeSBoZWxw
LWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygid2hpbGUiIDAgNSAoaGVscC1hcmdzICh3
aGlsZSkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImxldCIg
MCAzIChoZWxwLWFyZ3MgKGxldCkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9u
ICh0KSkpICMoImZpbGUtdHJ1ZW5hbWUiIDAgMTMgKGhlbHAtYXJncyAoZmlsZS10cnVlbmFtZSkg
Y2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImZpbGUtbmFtZS1h
cy1kaXJlY3RvcnkiIDAgMjIgKGhlbHAtYXJncyAoZmlsZS1uYW1lLWFzLWRpcmVjdG9yeSkgY2F0
ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImxldCIgMCAzIChoZWxw
LWFyZ3MgKGxldCkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMo
ImlmIiAwIDIgKGhlbHAtYXJncyAoaWYpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1
dHRvbiAodCkpKSAjKCJvciIgMCAyIChoZWxwLWFyZ3MgKG9yKSBjYXRlZ29yeSBoZWxwLWZ1bmN0
aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygibGV0IiAwIDMgKGhlbHAtYXJncyAobGV0KSBjYXRl
Z29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygiaWYiIDAgMiAoaGVscC1h
cmdzIChpZikgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImxl
dCIgMCAzIChoZWxwLWFyZ3MgKGxldCkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0
dG9uICh0KSkpXSAxMyBbIygiZmlsZS1uYW1lLW5vbmRpcmVjdG9yeSIgMCAyMiAoaGVscC1hcmdz
IChmaWxlLW5hbWUtbm9uZGlyZWN0b3J5KSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBi
dXR0b24gKHQpKSkgIygiYXBwbHkiIDAgNSAoaGVscC1hcmdzIChhcHBseSkgY2F0ZWdvcnkgaGVs
cC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoInRyYW1wLXJ1bi1yZWFsLWhhbmRsZXIi
IDAgMjIgKGhlbHAtYXJncyAodHJhbXAtcnVuLXJlYWwtaGFuZGxlcikgY2F0ZWdvcnkgaGVscC1m
dW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoInRyYW1wLWNvbXBsZXRpb24tZmlsZS1uYW1l
LWhhbmRsZXIiIDAgMzQgKGhlbHAtYXJncyAodHJhbXAtY29tcGxldGlvbi1maWxlLW5hbWUtaGFu
ZGxlcikgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImZpbGUt
bmFtZS1ub25kaXJlY3RvcnkiIDAgMjIgKGhlbHAtYXJncyAoZmlsZS1uYW1lLW5vbmRpcmVjdG9y
eSkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImNvbmNhdCIg
MCA2IChoZWxwLWFyZ3MgKGNvbmNhdCkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0
dG9uICh0KSkpICMoInNldHEiIDAgNCAoaGVscC1hcmdzIChzZXRxKSBjYXRlZ29yeSBoZWxwLWZ1
bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygiaWYiIDAgMiAoaGVscC1hcmdzIChpZikgY2F0
ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImlmIiAwIDIgKGhlbHAt
YXJncyAoaWYpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJs
ZXQiIDAgMyAoaGVscC1hcmdzIChsZXQpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1
dHRvbiAodCkpKSAjKCJpZiIgMCAyIChoZWxwLWFyZ3MgKGlmKSBjYXRlZ29yeSBoZWxwLWZ1bmN0
aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygibGV0IiAwIDMgKGhlbHAtYXJncyAobGV0KSBjYXRl
Z29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygid2hpbGUiIDAgNSAoaGVs
cC1hcmdzICh3aGlsZSkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkp
ICMoImxldCIgMCAzIChoZWxwLWFyZ3MgKGxldCkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0
b24gYnV0dG9uICh0KSkpICMoImZpbGUtdHJ1ZW5hbWUiIDAgMTMgKGhlbHAtYXJncyAoZmlsZS10
cnVlbmFtZSkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImZp
bGUtbmFtZS1hcy1kaXJlY3RvcnkiIDAgMjIgKGhlbHAtYXJncyAoZmlsZS1uYW1lLWFzLWRpcmVj
dG9yeSkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpXSAzMSBbIygi
Y29uY2F0IiAwIDYgKGhlbHAtYXJncyAoY29uY2F0KSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1
dHRvbiBidXR0b24gKHQpKSkgIygic2V0cSIgMCA0IChoZWxwLWFyZ3MgKHNldHEpIGNhdGVnb3J5
IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJpZiIgMCAyIChoZWxwLWFyZ3Mg
KGlmKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygiaWYiIDAg
MiAoaGVscC1hcmdzIChpZikgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0
KSkpICMoImxldCIgMCAzIChoZWxwLWFyZ3MgKGxldCkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1i
dXR0b24gYnV0dG9uICh0KSkpICMoImlmIiAwIDIgKGhlbHAtYXJncyAoaWYpIGNhdGVnb3J5IGhl
bHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJsZXQiIDAgMyAoaGVscC1hcmdzIChs
ZXQpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJ3aGlsZSIg
MCA1IChoZWxwLWFyZ3MgKHdoaWxlKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0
b24gKHQpKSkgIygibGV0IiAwIDMgKGhlbHAtYXJncyAobGV0KSBjYXRlZ29yeSBoZWxwLWZ1bmN0
aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygiZmlsZS10cnVlbmFtZSIgMCAxMyAoaGVscC1hcmdz
IChmaWxlLXRydWVuYW1lKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQp
KSkgIygiZmlsZS1uYW1lLWFzLWRpcmVjdG9yeSIgMCAyMiAoaGVscC1hcmdzIChmaWxlLW5hbWUt
YXMtZGlyZWN0b3J5KSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkg
IygibGV0IiAwIDMgKGhlbHAtYXJncyAobGV0KSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRv
biBidXR0b24gKHQpKSkgIygiaWYiIDAgMiAoaGVscC1hcmdzIChpZikgY2F0ZWdvcnkgaGVscC1m
dW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoIm9yIiAwIDIgKGhlbHAtYXJncyAob3IpIGNh
dGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJsZXQiIDAgMyAoaGVs
cC1hcmdzIChsZXQpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAj
KCJpZiIgMCAyIChoZWxwLWFyZ3MgKGlmKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBi
dXR0b24gKHQpKSldIDEzIFsjKCJpZiIgMCAyIChoZWxwLWFyZ3MgKGlmKSBjYXRlZ29yeSBoZWxw
LWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygibGV0IiAwIDMgKGhlbHAtYXJncyAobGV0
KSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygiaWYiIDAgMiAo
aGVscC1hcmdzIChpZikgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkp
ICMoImxldCIgMCAzIChoZWxwLWFyZ3MgKGxldCkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0
b24gYnV0dG9uICh0KSkpICMoIndoaWxlIiAwIDUgKGhlbHAtYXJncyAod2hpbGUpIGNhdGVnb3J5
IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJsZXQiIDAgMyAoaGVscC1hcmdz
IChsZXQpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJmaWxl
LXRydWVuYW1lIiAwIDEzIChoZWxwLWFyZ3MgKGZpbGUtdHJ1ZW5hbWUpIGNhdGVnb3J5IGhlbHAt
ZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJmaWxlLW5hbWUtYXMtZGlyZWN0b3J5IiAw
IDIyIChoZWxwLWFyZ3MgKGZpbGUtbmFtZS1hcy1kaXJlY3RvcnkpIGNhdGVnb3J5IGhlbHAtZnVu
Y3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJsZXQiIDAgMyAoaGVscC1hcmdzIChsZXQpIGNh
dGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJpZiIgMCAyIChoZWxw
LWFyZ3MgKGlmKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygi
b3IiIDAgMiAoaGVscC1hcmdzIChvcikgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0
dG9uICh0KSkpICMoImxldCIgMCAzIChoZWxwLWFyZ3MgKGxldCkgY2F0ZWdvcnkgaGVscC1mdW5j
dGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImlmIiAwIDIgKGhlbHAtYXJncyAoaWYpIGNhdGVn
b3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJsZXQiIDAgMyAoaGVscC1h
cmdzIChsZXQpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJ3
aGlsZSIgMCA1IChoZWxwLWFyZ3MgKHdoaWxlKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRv
biBidXR0b24gKHQpKSkgIygibGV0IiAwIDMgKGhlbHAtYXJncyAobGV0KSBjYXRlZ29yeSBoZWxw
LWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSldIDEwIFsjKCJpZiIgMCAyIChoZWxwLWFyZ3Mg
KGlmKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygibGV0IiAw
IDMgKGhlbHAtYXJncyAobGV0KSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24g
KHQpKSkgIygiZmlsZS10cnVlbmFtZSIgMCAxMyAoaGVscC1hcmdzIChmaWxlLXRydWVuYW1lKSBj
YXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygiZmlsZS1uYW1lLWFz
LWRpcmVjdG9yeSIgMCAyMiAoaGVscC1hcmdzIChmaWxlLW5hbWUtYXMtZGlyZWN0b3J5KSBjYXRl
Z29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygibGV0IiAwIDMgKGhlbHAt
YXJncyAobGV0KSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygi
aWYiIDAgMiAoaGVscC1hcmdzIChpZikgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0
dG9uICh0KSkpICMoIm9yIiAwIDIgKGhlbHAtYXJncyAob3IpIGNhdGVnb3J5IGhlbHAtZnVuY3Rp
b24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJsZXQiIDAgMyAoaGVscC1hcmdzIChsZXQpIGNhdGVn
b3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJpZiIgMCAyIChoZWxwLWFy
Z3MgKGlmKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygibGV0
IiAwIDMgKGhlbHAtYXJncyAobGV0KSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0
b24gKHQpKSkgIygid2hpbGUiIDAgNSAoaGVscC1hcmdzICh3aGlsZSkgY2F0ZWdvcnkgaGVscC1m
dW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImxldCIgMCAzIChoZWxwLWFyZ3MgKGxldCkg
Y2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImZpbGUtdHJ1ZW5h
bWUiIDAgMTMgKGhlbHAtYXJncyAoZmlsZS10cnVlbmFtZSkgY2F0ZWdvcnkgaGVscC1mdW5jdGlv
bi1idXR0b24gYnV0dG9uICh0KSkpICMoImZpbGUtbmFtZS1hcy1kaXJlY3RvcnkiIDAgMjIgKGhl
bHAtYXJncyAoZmlsZS1uYW1lLWFzLWRpcmVjdG9yeSkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1i
dXR0b24gYnV0dG9uICh0KSkpICMoImxldCIgMCAzIChoZWxwLWFyZ3MgKGxldCkgY2F0ZWdvcnkg
aGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImlmIiAwIDIgKGhlbHAtYXJncyAo
aWYpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKV0gMTAgWyMoImV4
cGFuZC1maWxlLW5hbWUiIDAgMTYgKGhlbHAtYXJncyAoZXhwYW5kLWZpbGUtbmFtZSkgY2F0ZWdv
cnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImFwcGx5IiAwIDUgKGhlbHAt
YXJncyAoYXBwbHkpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAj
KCJ0cmFtcC1ydW4tcmVhbC1oYW5kbGVyIiAwIDIyIChoZWxwLWFyZ3MgKHRyYW1wLXJ1bi1yZWFs
LWhhbmRsZXIpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJ0
cmFtcC1jb21wbGV0aW9uLWZpbGUtbmFtZS1oYW5kbGVyIiAwIDM0IChoZWxwLWFyZ3MgKHRyYW1w
LWNvbXBsZXRpb24tZmlsZS1uYW1lLWhhbmRsZXIpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0
dG9uIGJ1dHRvbiAodCkpKSAjKCJmaWxlLXN5bWxpbmstcCIgMCAxNCAoaGVscC1hcmdzIChmaWxl
LXN5bWxpbmstcCkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMo
InNldHEiIDAgNCAoaGVscC1hcmdzIChzZXRxKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRv
biBidXR0b24gKHQpKSkgIygiaWYiIDAgMiAoaGVscC1hcmdzIChpZikgY2F0ZWdvcnkgaGVscC1m
dW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImlmIiAwIDIgKGhlbHAtYXJncyAoaWYpIGNh
dGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJsZXQiIDAgMyAoaGVs
cC1hcmdzIChsZXQpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAj
KCJpZiIgMCAyIChoZWxwLWFyZ3MgKGlmKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBi
dXR0b24gKHQpKSkgIygibGV0IiAwIDMgKGhlbHAtYXJncyAobGV0KSBjYXRlZ29yeSBoZWxwLWZ1
bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygid2hpbGUiIDAgNSAoaGVscC1hcmdzICh3aGls
ZSkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImxldCIgMCAz
IChoZWxwLWFyZ3MgKGxldCkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0
KSkpICMoImZpbGUtdHJ1ZW5hbWUiIDAgMTMgKGhlbHAtYXJncyAoZmlsZS10cnVlbmFtZSkgY2F0
ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImZpbGUtbmFtZS1hcy1k
aXJlY3RvcnkiIDAgMjIgKGhlbHAtYXJncyAoZmlsZS1uYW1lLWFzLWRpcmVjdG9yeSkgY2F0ZWdv
cnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImxldCIgMCAzIChoZWxwLWFy
Z3MgKGxldCkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpXSAzMSBb
IygiZGlyZWN0b3J5LWZpbGUtbmFtZSIgMCAxOSAoaGVscC1hcmdzIChkaXJlY3RvcnktZmlsZS1u
YW1lKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygic2V0cSIg
MCA0IChoZWxwLWFyZ3MgKHNldHEpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRv
biAodCkpKSAjKCJsZXQiIDAgMyAoaGVscC1hcmdzIChsZXQpIGNhdGVnb3J5IGhlbHAtZnVuY3Rp
b24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJpZiIgMCAyIChoZWxwLWFyZ3MgKGlmKSBjYXRlZ29y
eSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygibGV0IiAwIDMgKGhlbHAtYXJn
cyAobGV0KSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygid2hp
bGUiIDAgNSAoaGVscC1hcmdzICh3aGlsZSkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24g
YnV0dG9uICh0KSkpICMoImxldCIgMCAzIChoZWxwLWFyZ3MgKGxldCkgY2F0ZWdvcnkgaGVscC1m
dW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImZpbGUtdHJ1ZW5hbWUiIDAgMTMgKGhlbHAt
YXJncyAoZmlsZS10cnVlbmFtZSkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9u
ICh0KSkpICMoIiM8bGFtYmRhIDM3Rj4iIDkgMTIgKGFjdGlvbiBoZWxwLWZucy0tZGlzcGxheS1m
dW5jdGlvbiBrZXltYXAgKGtleW1hcCAodG91Y2hzY3JlZW4tZG93biAuIHB1c2gtYnV0dG9uKSAo
aGVhZGVyLWxpbmUga2V5bWFwICh0b3VjaHNjcmVlbi1kb3duIC4gcHVzaC1idXR0b24pIChtb3Vz
ZS0yIC4gcHVzaC1idXR0b24pKSAobW9kZS1saW5lIGtleW1hcCAodG91Y2hzY3JlZW4tZG93biAu
IHB1c2gtYnV0dG9uKSAobW91c2UtMiAuIHB1c2gtYnV0dG9uKSkgKGZvbGxvdy1saW5rIC4gbW91
c2UtZmFjZSkgKG1vdXNlLTIgLiBwdXNoLWJ1dHRvbikgKDEzIC4gcHVzaC1idXR0b24pIGtleW1h
cCAoYmFja3RhYiAuIGJhY2t3YXJkLWJ1dHRvbikgKDI3IGtleW1hcCAoOSAuIGJhY2t3YXJkLWJ1
dHRvbikpICg5IC4gZm9yd2FyZC1idXR0b24pKSBidXR0b24tZGF0YSAobGFtYmRhIG5pbCAoZmls
ZS10cnVlbmFtZSAifi9Xb3JrL3NvbWUvbG9uZy9wYXRoL3RvL3BhcnNlL3RoYXQvaXMvdmVyeS9k
ZWVwL2RlZXAvZGVlcC9zdXBlci9kdXBlci9kZWVwL2RlZXAuZWwiKSkgY2F0ZWdvcnkgdCBmb2xs
b3ctbGluayB0IGJ1dHRvbiB0IGhlbHAtZWNobyAibW91c2UtMiwgUkVUOiBEaXNwbGF5IHRoZSBm
dW5jdGlvbidzIGJvZHkiIG1vdXNlLWZhY2UgaGlnaGxpZ2h0IGZvbnQtbG9jay1mYWNlIGJ1dHRv
biBmYWNlIGJ1dHRvbikpICMoImJlbmNobWFyay1jYWxsIiAwIDE0IChoZWxwLWFyZ3MgKGJlbmNo
bWFyay1jYWxsKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygi
ZXZhbCIgMCA0IChoZWxwLWFyZ3MgKGV2YWwpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9u
IGJ1dHRvbiAodCkpKSAjKCJlbGlzcC0tZXZhbC1sYXN0LXNleHAiIDAgMjEgKGhlbHAtYXJncyAo
ZWxpc3AtLWV2YWwtbGFzdC1zZXhwKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0
b24gKHQpKSkgIygiIzxjb21waWxlZC1mdW5jdGlvbiBDQjg+IiAyMCAyMyAoYWN0aW9uIGhlbHAt
Zm5zLS1kaXNwbGF5LWZ1bmN0aW9uIGtleW1hcCAoa2V5bWFwICh0b3VjaHNjcmVlbi1kb3duIC4g
cHVzaC1idXR0b24pIChoZWFkZXItbGluZSBrZXltYXAgKHRvdWNoc2NyZWVuLWRvd24gLiBwdXNo
LWJ1dHRvbikgKG1vdXNlLTIgLiBwdXNoLWJ1dHRvbikpIChtb2RlLWxpbmUga2V5bWFwICh0b3Vj
aHNjcmVlbi1kb3duIC4gcHVzaC1idXR0b24pIChtb3VzZS0yIC4gcHVzaC1idXR0b24pKSAoZm9s
bG93LWxpbmsgLiBtb3VzZS1mYWNlKSAobW91c2UtMiAuIHB1c2gtYnV0dG9uKSAoMTMgLiBwdXNo
LWJ1dHRvbikga2V5bWFwIChiYWNrdGFiIC4gYmFja3dhcmQtYnV0dG9uKSAoMjcga2V5bWFwICg5
IC4gYmFja3dhcmQtYnV0dG9uKSkgKDkgLiBmb3J3YXJkLWJ1dHRvbikpIGJ1dHRvbi1kYXRhICNb
MCAiXDMwMVwzMDAhXDIwNyIgW25pbCBlbGlzcC0tZXZhbC1sYXN0LXNleHBdIDJdIGNhdGVnb3J5
IHQgZm9sbG93LWxpbmsgdCBidXR0b24gdCBoZWxwLWVjaG8gIm1vdXNlLTIsIFJFVDogRGlzcGxh
eSB0aGUgZnVuY3Rpb24ncyBib2R5IiBtb3VzZS1mYWNlIGhpZ2hsaWdodCBmb250LWxvY2stZmFj
ZSBidXR0b24gZmFjZSBidXR0b24pKSAjKCIjPHN1YnItbmF0aXZlLWVsaXNwIGV2YWwtbGFzdC1z
ZXhwPiIgMjAgMzQgKGJ1dHRvbiAodCkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gaGVs
cC1hcmdzIChldmFsLWxhc3Qtc2V4cCkpKSAjKCIjPGNvbXBpbGVkLWZ1bmN0aW9uIEQ4NT4iIDIw
IDIzIChhY3Rpb24gaGVscC1mbnMtLWRpc3BsYXktZnVuY3Rpb24ga2V5bWFwIChrZXltYXAgKHRv
dWNoc2NyZWVuLWRvd24gLiBwdXNoLWJ1dHRvbikgKGhlYWRlci1saW5lIGtleW1hcCAodG91Y2hz
Y3JlZW4tZG93biAuIHB1c2gtYnV0dG9uKSAobW91c2UtMiAuIHB1c2gtYnV0dG9uKSkgKG1vZGUt
bGluZSBrZXltYXAgKHRvdWNoc2NyZWVuLWRvd24gLiBwdXNoLWJ1dHRvbikgKG1vdXNlLTIgLiBw
dXNoLWJ1dHRvbikpIChmb2xsb3ctbGluayAuIG1vdXNlLWZhY2UpIChtb3VzZS0yIC4gcHVzaC1i
dXR0b24pICgxMyAuIHB1c2gtYnV0dG9uKSBrZXltYXAgKGJhY2t0YWIgLiBiYWNrd2FyZC1idXR0
b24pICgyNyBrZXltYXAgKDkgLiBiYWNrd2FyZC1idXR0b24pKSAoOSAuIGZvcndhcmQtYnV0dG9u
KSkgYnV0dG9uLWRhdGEgI1soJnJlc3QgX2l0KSAiCAkhXDIxMRJcMjA3IiBbYWQtLWFkZG9pdC1m
dW5jdGlvbiBldmFsLWxhc3Qtc2V4cC1hcmctaW50ZXJuYWwgYWQtcmV0dXJuLXZhbHVlXSAyXSBj
YXRlZ29yeSB0IGZvbGxvdy1saW5rIHQgYnV0dG9uIHQgaGVscC1lY2hvICJtb3VzZS0yLCBSRVQ6
IERpc3BsYXkgdGhlIGZ1bmN0aW9uJ3MgYm9keSIgbW91c2UtZmFjZSBoaWdobGlnaHQgZm9udC1s
b2NrLWZhY2UgYnV0dG9uIGZhY2UgYnV0dG9uKSkgIygiZXZhbC1zZXhwLWZ1LWZsYXNoLWRvaXQt
c2ltcGxlIiAwIDMwIChoZWxwLWFyZ3MgKGV2YWwtc2V4cC1mdS1mbGFzaC1kb2l0LXNpbXBsZSkg
Y2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpXSAyNiBbIygib3IiIDAg
MiAoaGVscC1hcmdzIChvcikgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0
KSkpICMoImZpbGUtdHJ1ZW5hbWUiIDAgMTMgKGhlbHAtYXJncyAoZmlsZS10cnVlbmFtZSkgY2F0
ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImZpbGUtbmFtZS1hcy1k
aXJlY3RvcnkiIDAgMjIgKGhlbHAtYXJncyAoZmlsZS1uYW1lLWFzLWRpcmVjdG9yeSkgY2F0ZWdv
cnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImxldCIgMCAzIChoZWxwLWFy
Z3MgKGxldCkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImlm
IiAwIDIgKGhlbHAtYXJncyAoaWYpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRv
biAodCkpKSAjKCJvciIgMCAyIChoZWxwLWFyZ3MgKG9yKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9u
LWJ1dHRvbiBidXR0b24gKHQpKSkgIygibGV0IiAwIDMgKGhlbHAtYXJncyAobGV0KSBjYXRlZ29y
eSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygiaWYiIDAgMiAoaGVscC1hcmdz
IChpZikgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImxldCIg
MCAzIChoZWxwLWFyZ3MgKGxldCkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9u
ICh0KSkpICMoIndoaWxlIiAwIDUgKGhlbHAtYXJncyAod2hpbGUpIGNhdGVnb3J5IGhlbHAtZnVu
Y3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJsZXQiIDAgMyAoaGVscC1hcmdzIChsZXQpIGNh
dGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJmaWxlLXRydWVuYW1l
IiAwIDEzIChoZWxwLWFyZ3MgKGZpbGUtdHJ1ZW5hbWUpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24t
YnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJmaWxlLW5hbWUtYXMtZGlyZWN0b3J5IiAwIDIyIChoZWxw
LWFyZ3MgKGZpbGUtbmFtZS1hcy1kaXJlY3RvcnkpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0
dG9uIGJ1dHRvbiAodCkpKSAjKCJsZXQiIDAgMyAoaGVscC1hcmdzIChsZXQpIGNhdGVnb3J5IGhl
bHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJpZiIgMCAyIChoZWxwLWFyZ3MgKGlm
KSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygib3IiIDAgMiAo
aGVscC1hcmdzIChvcikgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkp
XSAzIFsjKCJzdHJpbmc9IiAwIDcgKGhlbHAtYXJncyAoc3RyaW5nPSkgY2F0ZWdvcnkgaGVscC1m
dW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoIm9yIiAwIDIgKGhlbHAtYXJncyAob3IpIGNh
dGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJsZXQiIDAgMyAoaGVs
cC1hcmdzIChsZXQpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAj
KCJpZiIgMCAyIChoZWxwLWFyZ3MgKGlmKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBi
dXR0b24gKHQpKSkgIygibGV0IiAwIDMgKGhlbHAtYXJncyAobGV0KSBjYXRlZ29yeSBoZWxwLWZ1
bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygid2hpbGUiIDAgNSAoaGVscC1hcmdzICh3aGls
ZSkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImxldCIgMCAz
IChoZWxwLWFyZ3MgKGxldCkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0
KSkpICMoImZpbGUtdHJ1ZW5hbWUiIDAgMTMgKGhlbHAtYXJncyAoZmlsZS10cnVlbmFtZSkgY2F0
ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImZpbGUtbmFtZS1hcy1k
aXJlY3RvcnkiIDAgMjIgKGhlbHAtYXJncyAoZmlsZS1uYW1lLWFzLWRpcmVjdG9yeSkgY2F0ZWdv
cnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImxldCIgMCAzIChoZWxwLWFy
Z3MgKGxldCkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImlm
IiAwIDIgKGhlbHAtYXJncyAoaWYpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRv
biAodCkpKSAjKCJvciIgMCAyIChoZWxwLWFyZ3MgKG9yKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9u
LWJ1dHRvbiBidXR0b24gKHQpKSkgIygibGV0IiAwIDMgKGhlbHAtYXJncyAobGV0KSBjYXRlZ29y
eSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygiaWYiIDAgMiAoaGVscC1hcmdz
IChpZikgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImxldCIg
MCAzIChoZWxwLWFyZ3MgKGxldCkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9u
ICh0KSkpICMoIndoaWxlIiAwIDUgKGhlbHAtYXJncyAod2hpbGUpIGNhdGVnb3J5IGhlbHAtZnVu
Y3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKV0gMTEgWyMoImlmIiAwIDIgKGhlbHAtYXJncyAoaWYp
IGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJvciIgMCAyICho
ZWxwLWFyZ3MgKG9yKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkg
IygibGV0IiAwIDMgKGhlbHAtYXJncyAobGV0KSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRv
biBidXR0b24gKHQpKSkgIygiaWYiIDAgMiAoaGVscC1hcmdzIChpZikgY2F0ZWdvcnkgaGVscC1m
dW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImxldCIgMCAzIChoZWxwLWFyZ3MgKGxldCkg
Y2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoIndoaWxlIiAwIDUg
KGhlbHAtYXJncyAod2hpbGUpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAo
dCkpKSAjKCJsZXQiIDAgMyAoaGVscC1hcmdzIChsZXQpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24t
YnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJmaWxlLXRydWVuYW1lIiAwIDEzIChoZWxwLWFyZ3MgKGZp
bGUtdHJ1ZW5hbWUpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAj
KCJmaWxlLW5hbWUtYXMtZGlyZWN0b3J5IiAwIDIyIChoZWxwLWFyZ3MgKGZpbGUtbmFtZS1hcy1k
aXJlY3RvcnkpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJs
ZXQiIDAgMyAoaGVscC1hcmdzIChsZXQpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1
dHRvbiAodCkpKSAjKCJpZiIgMCAyIChoZWxwLWFyZ3MgKGlmKSBjYXRlZ29yeSBoZWxwLWZ1bmN0
aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygib3IiIDAgMiAoaGVscC1hcmdzIChvcikgY2F0ZWdv
cnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImxldCIgMCAzIChoZWxwLWFy
Z3MgKGxldCkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImlm
IiAwIDIgKGhlbHAtYXJncyAoaWYpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRv
biAodCkpKSAjKCJsZXQiIDAgMyAoaGVscC1hcmdzIChsZXQpIGNhdGVnb3J5IGhlbHAtZnVuY3Rp
b24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJ3aGlsZSIgMCA1IChoZWxwLWFyZ3MgKHdoaWxlKSBj
YXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSldIDIzIFsjKCJsZXQiIDAg
MyAoaGVscC1hcmdzIChsZXQpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAo
dCkpKSAjKCJmaWxlLXRydWVuYW1lIiAwIDEzIChoZWxwLWFyZ3MgKGZpbGUtdHJ1ZW5hbWUpIGNh
dGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJmaWxlLW5hbWUtYXMt
ZGlyZWN0b3J5IiAwIDIyIChoZWxwLWFyZ3MgKGZpbGUtbmFtZS1hcy1kaXJlY3RvcnkpIGNhdGVn
b3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJsZXQiIDAgMyAoaGVscC1h
cmdzIChsZXQpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJp
ZiIgMCAyIChoZWxwLWFyZ3MgKGlmKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0
b24gKHQpKSkgIygib3IiIDAgMiAoaGVscC1hcmdzIChvcikgY2F0ZWdvcnkgaGVscC1mdW5jdGlv
bi1idXR0b24gYnV0dG9uICh0KSkpICMoImxldCIgMCAzIChoZWxwLWFyZ3MgKGxldCkgY2F0ZWdv
cnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImlmIiAwIDIgKGhlbHAtYXJn
cyAoaWYpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJsZXQi
IDAgMyAoaGVscC1hcmdzIChsZXQpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRv
biAodCkpKSAjKCJ3aGlsZSIgMCA1IChoZWxwLWFyZ3MgKHdoaWxlKSBjYXRlZ29yeSBoZWxwLWZ1
bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygibGV0IiAwIDMgKGhlbHAtYXJncyAobGV0KSBj
YXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygiZmlsZS10cnVlbmFt
ZSIgMCAxMyAoaGVscC1hcmdzIChmaWxlLXRydWVuYW1lKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9u
LWJ1dHRvbiBidXR0b24gKHQpKSkgIygiIzxsYW1iZGEgMzdGPiIgOSAxMiAoYWN0aW9uIGhlbHAt
Zm5zLS1kaXNwbGF5LWZ1bmN0aW9uIGtleW1hcCAoa2V5bWFwICh0b3VjaHNjcmVlbi1kb3duIC4g
cHVzaC1idXR0b24pIChoZWFkZXItbGluZSBrZXltYXAgKHRvdWNoc2NyZWVuLWRvd24gLiBwdXNo
LWJ1dHRvbikgKG1vdXNlLTIgLiBwdXNoLWJ1dHRvbikpIChtb2RlLWxpbmUga2V5bWFwICh0b3Vj
aHNjcmVlbi1kb3duIC4gcHVzaC1idXR0b24pIChtb3VzZS0yIC4gcHVzaC1idXR0b24pKSAoZm9s
bG93LWxpbmsgLiBtb3VzZS1mYWNlKSAobW91c2UtMiAuIHB1c2gtYnV0dG9uKSAoMTMgLiBwdXNo
LWJ1dHRvbikga2V5bWFwIChiYWNrdGFiIC4gYmFja3dhcmQtYnV0dG9uKSAoMjcga2V5bWFwICg5
IC4gYmFja3dhcmQtYnV0dG9uKSkgKDkgLiBmb3J3YXJkLWJ1dHRvbikpIGJ1dHRvbi1kYXRhIChs
YW1iZGEgbmlsIChmaWxlLXRydWVuYW1lICJ+L1dvcmsvc29tZS9sb25nL3BhdGgvdG8vcGFyc2Uv
dGhhdC9pcy92ZXJ5L2RlZXAvZGVlcC9kZWVwL3N1cGVyL2R1cGVyL2RlZXAvZGVlcC5lbCIpKSBj
YXRlZ29yeSB0IGZvbGxvdy1saW5rIHQgYnV0dG9uIHQgaGVscC1lY2hvICJtb3VzZS0yLCBSRVQ6
IERpc3BsYXkgdGhlIGZ1bmN0aW9uJ3MgYm9keSIgbW91c2UtZmFjZSBoaWdobGlnaHQgZm9udC1s
b2NrLWZhY2UgYnV0dG9uIGZhY2UgYnV0dG9uKSkgIygiYmVuY2htYXJrLWNhbGwiIDAgMTQgKGhl
bHAtYXJncyAoYmVuY2htYXJrLWNhbGwpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1
dHRvbiAodCkpKSAjKCJldmFsIiAwIDQgKGhlbHAtYXJncyAoZXZhbCkgY2F0ZWdvcnkgaGVscC1m
dW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImVsaXNwLS1ldmFsLWxhc3Qtc2V4cCIgMCAy
MSAoaGVscC1hcmdzIChlbGlzcC0tZXZhbC1sYXN0LXNleHApIGNhdGVnb3J5IGhlbHAtZnVuY3Rp
b24tYnV0dG9uIGJ1dHRvbiAodCkpKV0gMyBbIygidHJhbXAtcnVuLXJlYWwtaGFuZGxlciIgMCAy
MiAoaGVscC1hcmdzICh0cmFtcC1ydW4tcmVhbC1oYW5kbGVyKSBjYXRlZ29yeSBoZWxwLWZ1bmN0
aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygidHJhbXAtY29tcGxldGlvbi1maWxlLW5hbWUtaGFu
ZGxlciIgMCAzNCAoaGVscC1hcmdzICh0cmFtcC1jb21wbGV0aW9uLWZpbGUtbmFtZS1oYW5kbGVy
KSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygiZmlsZS1zeW1s
aW5rLXAiIDAgMTQgKGhlbHAtYXJncyAoZmlsZS1zeW1saW5rLXApIGNhdGVnb3J5IGhlbHAtZnVu
Y3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJzZXRxIiAwIDQgKGhlbHAtYXJncyAoc2V0cSkg
Y2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImlmIiAwIDIgKGhl
bHAtYXJncyAoaWYpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAj
KCJpZiIgMCAyIChoZWxwLWFyZ3MgKGlmKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBi
dXR0b24gKHQpKSkgIygibGV0IiAwIDMgKGhlbHAtYXJncyAobGV0KSBjYXRlZ29yeSBoZWxwLWZ1
bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygiaWYiIDAgMiAoaGVscC1hcmdzIChpZikgY2F0
ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImxldCIgMCAzIChoZWxw
LWFyZ3MgKGxldCkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMo
IndoaWxlIiAwIDUgKGhlbHAtYXJncyAod2hpbGUpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0
dG9uIGJ1dHRvbiAodCkpKSAjKCJsZXQiIDAgMyAoaGVscC1hcmdzIChsZXQpIGNhdGVnb3J5IGhl
bHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJmaWxlLXRydWVuYW1lIiAwIDEzICho
ZWxwLWFyZ3MgKGZpbGUtdHJ1ZW5hbWUpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1
dHRvbiAodCkpKSAjKCJmaWxlLW5hbWUtYXMtZGlyZWN0b3J5IiAwIDIyIChoZWxwLWFyZ3MgKGZp
bGUtbmFtZS1hcy1kaXJlY3RvcnkpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRv
biAodCkpKSAjKCJsZXQiIDAgMyAoaGVscC1hcmdzIChsZXQpIGNhdGVnb3J5IGhlbHAtZnVuY3Rp
b24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJpZiIgMCAyIChoZWxwLWFyZ3MgKGlmKSBjYXRlZ29y
eSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygib3IiIDAgMiAoaGVscC1hcmdz
IChvcikgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpXSAzIFsjKCJs
ZXQiIDAgMyAoaGVscC1hcmdzIChsZXQpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1
dHRvbiAodCkpKSAjKCJpZiIgMCAyIChoZWxwLWFyZ3MgKGlmKSBjYXRlZ29yeSBoZWxwLWZ1bmN0
aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygibGV0IiAwIDMgKGhlbHAtYXJncyAobGV0KSBjYXRl
Z29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygid2hpbGUiIDAgNSAoaGVs
cC1hcmdzICh3aGlsZSkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkp
ICMoImxldCIgMCAzIChoZWxwLWFyZ3MgKGxldCkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0
b24gYnV0dG9uICh0KSkpICMoImZpbGUtdHJ1ZW5hbWUiIDAgMTMgKGhlbHAtYXJncyAoZmlsZS10
cnVlbmFtZSkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImZp
bGUtbmFtZS1hcy1kaXJlY3RvcnkiIDAgMjIgKGhlbHAtYXJncyAoZmlsZS1uYW1lLWFzLWRpcmVj
dG9yeSkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImxldCIg
MCAzIChoZWxwLWFyZ3MgKGxldCkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9u
ICh0KSkpICMoImlmIiAwIDIgKGhlbHAtYXJncyAoaWYpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24t
YnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJvciIgMCAyIChoZWxwLWFyZ3MgKG9yKSBjYXRlZ29yeSBo
ZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygibGV0IiAwIDMgKGhlbHAtYXJncyAo
bGV0KSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygiaWYiIDAg
MiAoaGVscC1hcmdzIChpZikgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0
KSkpICMoImxldCIgMCAzIChoZWxwLWFyZ3MgKGxldCkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1i
dXR0b24gYnV0dG9uICh0KSkpICMoIndoaWxlIiAwIDUgKGhlbHAtYXJncyAod2hpbGUpIGNhdGVn
b3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJsZXQiIDAgMyAoaGVscC1h
cmdzIChsZXQpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJm
aWxlLXRydWVuYW1lIiAwIDEzIChoZWxwLWFyZ3MgKGZpbGUtdHJ1ZW5hbWUpIGNhdGVnb3J5IGhl
bHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKV0gMzAgWyMoImxldCIgMCAzIChoZWxwLWFy
Z3MgKGxldCkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImZp
bGUtdHJ1ZW5hbWUiIDAgMTMgKGhlbHAtYXJncyAoZmlsZS10cnVlbmFtZSkgY2F0ZWdvcnkgaGVs
cC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoIiM8bGFtYmRhIDM3Rj4iIDkgMTIgKGFj
dGlvbiBoZWxwLWZucy0tZGlzcGxheS1mdW5jdGlvbiBrZXltYXAgKGtleW1hcCAodG91Y2hzY3Jl
ZW4tZG93biAuIHB1c2gtYnV0dG9uKSAoaGVhZGVyLWxpbmUga2V5bWFwICh0b3VjaHNjcmVlbi1k
b3duIC4gcHVzaC1idXR0b24pIChtb3VzZS0yIC4gcHVzaC1idXR0b24pKSAobW9kZS1saW5lIGtl
eW1hcCAodG91Y2hzY3JlZW4tZG93biAuIHB1c2gtYnV0dG9uKSAobW91c2UtMiAuIHB1c2gtYnV0
dG9uKSkgKGZvbGxvdy1saW5rIC4gbW91c2UtZmFjZSkgKG1vdXNlLTIgLiBwdXNoLWJ1dHRvbikg
KDEzIC4gcHVzaC1idXR0b24pIGtleW1hcCAoYmFja3RhYiAuIGJhY2t3YXJkLWJ1dHRvbikgKDI3
IGtleW1hcCAoOSAuIGJhY2t3YXJkLWJ1dHRvbikpICg5IC4gZm9yd2FyZC1idXR0b24pKSBidXR0
b24tZGF0YSAobGFtYmRhIG5pbCAoZmlsZS10cnVlbmFtZSAifi9Xb3JrL3NvbWUvbG9uZy9wYXRo
L3RvL3BhcnNlL3RoYXQvaXMvdmVyeS9kZWVwL2RlZXAvZGVlcC9zdXBlci9kdXBlci9kZWVwL2Rl
ZXAuZWwiKSkgY2F0ZWdvcnkgdCBmb2xsb3ctbGluayB0IGJ1dHRvbiB0IGhlbHAtZWNobyAibW91
c2UtMiwgUkVUOiBEaXNwbGF5IHRoZSBmdW5jdGlvbidzIGJvZHkiIG1vdXNlLWZhY2UgaGlnaGxp
Z2h0IGZvbnQtbG9jay1mYWNlIGJ1dHRvbiBmYWNlIGJ1dHRvbikpICMoImJlbmNobWFyay1jYWxs
IiAwIDE0IChoZWxwLWFyZ3MgKGJlbmNobWFyay1jYWxsKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9u
LWJ1dHRvbiBidXR0b24gKHQpKSkgIygiZXZhbCIgMCA0IChoZWxwLWFyZ3MgKGV2YWwpIGNhdGVn
b3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJlbGlzcC0tZXZhbC1sYXN0
LXNleHAiIDAgMjEgKGhlbHAtYXJncyAoZWxpc3AtLWV2YWwtbGFzdC1zZXhwKSBjYXRlZ29yeSBo
ZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygiIzxjb21waWxlZC1mdW5jdGlvbiBD
Qjg+IiAyMCAyMyAoYWN0aW9uIGhlbHAtZm5zLS1kaXNwbGF5LWZ1bmN0aW9uIGtleW1hcCAoa2V5
bWFwICh0b3VjaHNjcmVlbi1kb3duIC4gcHVzaC1idXR0b24pIChoZWFkZXItbGluZSBrZXltYXAg
KHRvdWNoc2NyZWVuLWRvd24gLiBwdXNoLWJ1dHRvbikgKG1vdXNlLTIgLiBwdXNoLWJ1dHRvbikp
IChtb2RlLWxpbmUga2V5bWFwICh0b3VjaHNjcmVlbi1kb3duIC4gcHVzaC1idXR0b24pIChtb3Vz
ZS0yIC4gcHVzaC1idXR0b24pKSAoZm9sbG93LWxpbmsgLiBtb3VzZS1mYWNlKSAobW91c2UtMiAu
IHB1c2gtYnV0dG9uKSAoMTMgLiBwdXNoLWJ1dHRvbikga2V5bWFwIChiYWNrdGFiIC4gYmFja3dh
cmQtYnV0dG9uKSAoMjcga2V5bWFwICg5IC4gYmFja3dhcmQtYnV0dG9uKSkgKDkgLiBmb3J3YXJk
LWJ1dHRvbikpIGJ1dHRvbi1kYXRhICNbMCAiXDMwMVwzMDAhXDIwNyIgW25pbCBlbGlzcC0tZXZh
bC1sYXN0LXNleHBdIDJdIGNhdGVnb3J5IHQgZm9sbG93LWxpbmsgdCBidXR0b24gdCBoZWxwLWVj
aG8gIm1vdXNlLTIsIFJFVDogRGlzcGxheSB0aGUgZnVuY3Rpb24ncyBib2R5IiBtb3VzZS1mYWNl
IGhpZ2hsaWdodCBmb250LWxvY2stZmFjZSBidXR0b24gZmFjZSBidXR0b24pKSAjKCIjPHN1YnIt
bmF0aXZlLWVsaXNwIGV2YWwtbGFzdC1zZXhwPiIgMjAgMzQgKGJ1dHRvbiAodCkgY2F0ZWdvcnkg
aGVscC1mdW5jdGlvbi1idXR0b24gaGVscC1hcmdzIChldmFsLWxhc3Qtc2V4cCkpKSAjKCIjPGNv
bXBpbGVkLWZ1bmN0aW9uIEQ4NT4iIDIwIDIzIChhY3Rpb24gaGVscC1mbnMtLWRpc3BsYXktZnVu
Y3Rpb24ga2V5bWFwIChrZXltYXAgKHRvdWNoc2NyZWVuLWRvd24gLiBwdXNoLWJ1dHRvbikgKGhl
YWRlci1saW5lIGtleW1hcCAodG91Y2hzY3JlZW4tZG93biAuIHB1c2gtYnV0dG9uKSAobW91c2Ut
MiAuIHB1c2gtYnV0dG9uKSkgKG1vZGUtbGluZSBrZXltYXAgKHRvdWNoc2NyZWVuLWRvd24gLiBw
dXNoLWJ1dHRvbikgKG1vdXNlLTIgLiBwdXNoLWJ1dHRvbikpIChmb2xsb3ctbGluayAuIG1vdXNl
LWZhY2UpIChtb3VzZS0yIC4gcHVzaC1idXR0b24pICgxMyAuIHB1c2gtYnV0dG9uKSBrZXltYXAg
KGJhY2t0YWIgLiBiYWNrd2FyZC1idXR0b24pICgyNyBrZXltYXAgKDkgLiBiYWNrd2FyZC1idXR0
b24pKSAoOSAuIGZvcndhcmQtYnV0dG9uKSkgYnV0dG9uLWRhdGEgI1soJnJlc3QgX2l0KSAiCAkh
XDIxMRJcMjA3IiBbYWQtLWFkZG9pdC1mdW5jdGlvbiBldmFsLWxhc3Qtc2V4cC1hcmctaW50ZXJu
YWwgYWQtcmV0dXJuLXZhbHVlXSAyXSBjYXRlZ29yeSB0IGZvbGxvdy1saW5rIHQgYnV0dG9uIHQg
aGVscC1lY2hvICJtb3VzZS0yLCBSRVQ6IERpc3BsYXkgdGhlIGZ1bmN0aW9uJ3MgYm9keSIgbW91
c2UtZmFjZSBoaWdobGlnaHQgZm9udC1sb2NrLWZhY2UgYnV0dG9uIGZhY2UgYnV0dG9uKSkgIygi
ZXZhbC1zZXhwLWZ1LWZsYXNoLWRvaXQtc2ltcGxlIiAwIDMwIChoZWxwLWFyZ3MgKGV2YWwtc2V4
cC1mdS1mbGFzaC1kb2l0LXNpbXBsZSkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0
dG9uICh0KSkpICMoImV2YWwtc2V4cC1mdS1mbGFzaC1kb2l0IiAwIDIzIChoZWxwLWFyZ3MgKGV2
YWwtc2V4cC1mdS1mbGFzaC1kb2l0KSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0
b24gKHQpKSkgIygiZXNmLWZsYXNoLWRvaXQiIDAgMTQgKGhlbHAtYXJncyAoZXNmLWZsYXNoLWRv
aXQpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJhZC1BZHZp
Y2UtZXZhbC1sYXN0LXNleHAiIDAgMjQgKGhlbHAtYXJncyAoYWQtQWR2aWNlLWV2YWwtbGFzdC1z
ZXhwKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygiYXBwbHki
IDAgNSAoaGVscC1hcmdzIChhcHBseSkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0
dG9uICh0KSkpICMoImV2YWwtbGFzdC1zZXhwIiAwIDE0IChoZWxwLWFyZ3MgKGV2YWwtbGFzdC1z
ZXhwKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygiIzxjb21w
aWxlZC1mdW5jdGlvbiA1MDk+IiAyMCAyMyAoYWN0aW9uIGhlbHAtZm5zLS1kaXNwbGF5LWZ1bmN0
aW9uIGtleW1hcCAoa2V5bWFwICh0b3VjaHNjcmVlbi1kb3duIC4gcHVzaC1idXR0b24pIChoZWFk
ZXItbGluZSBrZXltYXAgKHRvdWNoc2NyZWVuLWRvd24gLiBwdXNoLWJ1dHRvbikgKG1vdXNlLTIg
LiBwdXNoLWJ1dHRvbikpIChtb2RlLWxpbmUga2V5bWFwICh0b3VjaHNjcmVlbi1kb3duIC4gcHVz
aC1idXR0b24pIChtb3VzZS0yIC4gcHVzaC1idXR0b24pKSAoZm9sbG93LWxpbmsgLiBtb3VzZS1m
YWNlKSAobW91c2UtMiAuIHB1c2gtYnV0dG9uKSAoMTMgLiBwdXNoLWJ1dHRvbikga2V5bWFwIChi
YWNrdGFiIC4gYmFja3dhcmQtYnV0dG9uKSAoMjcga2V5bWFwICg5IC4gYmFja3dhcmQtYnV0dG9u
KSkgKDkgLiBmb3J3YXJkLWJ1dHRvbikpIGJ1dHRvbi1kYXRhICNbMjU3ICJcMzAyASFcMjExEFwz
MDMJIVwyMDMOAFwzMDQgXDIxMFwzMDUBYFwiXDIwNyIgW2Vyb3MtLWxhc3QtcmVzdWx0IGVyb3Mt
LWluc3BlY3QtYnVmZmVyLW5hbWUgZXZhbC1sYXN0LXNleHAgZ2V0LWJ1ZmZlciBlcm9zLWluc3Bl
Y3QtbGFzdC1yZXN1bHQgZXJvcy0tZXZhbC1vdmVybGF5XSA1ICgiL2hvbWUveWFudGFyOTIvLmVt
YWNzLmQvc3RyYWlnaHQvYnVpbGQvZXJvcy9lcm9zLmVsYyIgLiA2NDMxKSAiUCJdIGNhdGVnb3J5
IHQgZm9sbG93LWxpbmsgdCBidXR0b24gdCBoZWxwLWVjaG8gIm1vdXNlLTIsIFJFVDogRGlzcGxh
eSB0aGUgZnVuY3Rpb24ncyBib2R5IiBtb3VzZS1mYWNlIGhpZ2hsaWdodCBmb250LWxvY2stZmFj
ZSBidXR0b24gZmFjZSBidXR0b24pKV0gNiBbIygiZmlsZS1uYW1lLW5vbmRpcmVjdG9yeSIgMCAy
MiAoaGVscC1hcmdzIChmaWxlLW5hbWUtbm9uZGlyZWN0b3J5KSBjYXRlZ29yeSBoZWxwLWZ1bmN0
aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygiZXF1YWwiIDAgNSAoaGVscC1hcmdzIChlcXVhbCkg
Y2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImlmIiAwIDIgKGhl
bHAtYXJncyAoaWYpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAj
KCJsZXQiIDAgMyAoaGVscC1hcmdzIChsZXQpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9u
IGJ1dHRvbiAodCkpKSAjKCJpZiIgMCAyIChoZWxwLWFyZ3MgKGlmKSBjYXRlZ29yeSBoZWxwLWZ1
bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygibGV0IiAwIDMgKGhlbHAtYXJncyAobGV0KSBj
YXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygid2hpbGUiIDAgNSAo
aGVscC1hcmdzICh3aGlsZSkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0
KSkpICMoImxldCIgMCAzIChoZWxwLWFyZ3MgKGxldCkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1i
dXR0b24gYnV0dG9uICh0KSkpICMoImZpbGUtdHJ1ZW5hbWUiIDAgMTMgKGhlbHAtYXJncyAoZmls
ZS10cnVlbmFtZSkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMo
IiM8bGFtYmRhIDM3Rj4iIDkgMTIgKGFjdGlvbiBoZWxwLWZucy0tZGlzcGxheS1mdW5jdGlvbiBr
ZXltYXAgKGtleW1hcCAodG91Y2hzY3JlZW4tZG93biAuIHB1c2gtYnV0dG9uKSAoaGVhZGVyLWxp
bmUga2V5bWFwICh0b3VjaHNjcmVlbi1kb3duIC4gcHVzaC1idXR0b24pIChtb3VzZS0yIC4gcHVz
aC1idXR0b24pKSAobW9kZS1saW5lIGtleW1hcCAodG91Y2hzY3JlZW4tZG93biAuIHB1c2gtYnV0
dG9uKSAobW91c2UtMiAuIHB1c2gtYnV0dG9uKSkgKGZvbGxvdy1saW5rIC4gbW91c2UtZmFjZSkg
KG1vdXNlLTIgLiBwdXNoLWJ1dHRvbikgKDEzIC4gcHVzaC1idXR0b24pIGtleW1hcCAoYmFja3Rh
YiAuIGJhY2t3YXJkLWJ1dHRvbikgKDI3IGtleW1hcCAoOSAuIGJhY2t3YXJkLWJ1dHRvbikpICg5
IC4gZm9yd2FyZC1idXR0b24pKSBidXR0b24tZGF0YSAobGFtYmRhIG5pbCAoZmlsZS10cnVlbmFt
ZSAifi9Xb3JrL3NvbWUvbG9uZy9wYXRoL3RvL3BhcnNlL3RoYXQvaXMvdmVyeS9kZWVwL2RlZXAv
ZGVlcC9zdXBlci9kdXBlci9kZWVwL2RlZXAuZWwiKSkgY2F0ZWdvcnkgdCBmb2xsb3ctbGluayB0
IGJ1dHRvbiB0IGhlbHAtZWNobyAibW91c2UtMiwgUkVUOiBEaXNwbGF5IHRoZSBmdW5jdGlvbidz
IGJvZHkiIG1vdXNlLWZhY2UgaGlnaGxpZ2h0IGZvbnQtbG9jay1mYWNlIGJ1dHRvbiBmYWNlIGJ1
dHRvbikpICMoImJlbmNobWFyay1jYWxsIiAwIDE0IChoZWxwLWFyZ3MgKGJlbmNobWFyay1jYWxs
KSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygiZXZhbCIgMCA0
IChoZWxwLWFyZ3MgKGV2YWwpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAo
dCkpKSAjKCJlbGlzcC0tZXZhbC1sYXN0LXNleHAiIDAgMjEgKGhlbHAtYXJncyAoZWxpc3AtLWV2
YWwtbGFzdC1zZXhwKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkg
IygiIzxjb21waWxlZC1mdW5jdGlvbiBDQjg+IiAyMCAyMyAoYWN0aW9uIGhlbHAtZm5zLS1kaXNw
bGF5LWZ1bmN0aW9uIGtleW1hcCAoa2V5bWFwICh0b3VjaHNjcmVlbi1kb3duIC4gcHVzaC1idXR0
b24pIChoZWFkZXItbGluZSBrZXltYXAgKHRvdWNoc2NyZWVuLWRvd24gLiBwdXNoLWJ1dHRvbikg
KG1vdXNlLTIgLiBwdXNoLWJ1dHRvbikpIChtb2RlLWxpbmUga2V5bWFwICh0b3VjaHNjcmVlbi1k
b3duIC4gcHVzaC1idXR0b24pIChtb3VzZS0yIC4gcHVzaC1idXR0b24pKSAoZm9sbG93LWxpbmsg
LiBtb3VzZS1mYWNlKSAobW91c2UtMiAuIHB1c2gtYnV0dG9uKSAoMTMgLiBwdXNoLWJ1dHRvbikg
a2V5bWFwIChiYWNrdGFiIC4gYmFja3dhcmQtYnV0dG9uKSAoMjcga2V5bWFwICg5IC4gYmFja3dh
cmQtYnV0dG9uKSkgKDkgLiBmb3J3YXJkLWJ1dHRvbikpIGJ1dHRvbi1kYXRhICNbMCAiXDMwMVwz
MDAhXDIwNyIgW25pbCBlbGlzcC0tZXZhbC1sYXN0LXNleHBdIDJdIGNhdGVnb3J5IHQgZm9sbG93
LWxpbmsgdCBidXR0b24gdCBoZWxwLWVjaG8gIm1vdXNlLTIsIFJFVDogRGlzcGxheSB0aGUgZnVu
Y3Rpb24ncyBib2R5IiBtb3VzZS1mYWNlIGhpZ2hsaWdodCBmb250LWxvY2stZmFjZSBidXR0b24g
ZmFjZSBidXR0b24pKSAjKCIjPHN1YnItbmF0aXZlLWVsaXNwIGV2YWwtbGFzdC1zZXhwPiIgMjAg
MzQgKGJ1dHRvbiAodCkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gaGVscC1hcmdzIChl
dmFsLWxhc3Qtc2V4cCkpKSAjKCIjPGNvbXBpbGVkLWZ1bmN0aW9uIEQ4NT4iIDIwIDIzIChhY3Rp
b24gaGVscC1mbnMtLWRpc3BsYXktZnVuY3Rpb24ga2V5bWFwIChrZXltYXAgKHRvdWNoc2NyZWVu
LWRvd24gLiBwdXNoLWJ1dHRvbikgKGhlYWRlci1saW5lIGtleW1hcCAodG91Y2hzY3JlZW4tZG93
biAuIHB1c2gtYnV0dG9uKSAobW91c2UtMiAuIHB1c2gtYnV0dG9uKSkgKG1vZGUtbGluZSBrZXlt
YXAgKHRvdWNoc2NyZWVuLWRvd24gLiBwdXNoLWJ1dHRvbikgKG1vdXNlLTIgLiBwdXNoLWJ1dHRv
bikpIChmb2xsb3ctbGluayAuIG1vdXNlLWZhY2UpIChtb3VzZS0yIC4gcHVzaC1idXR0b24pICgx
MyAuIHB1c2gtYnV0dG9uKSBrZXltYXAgKGJhY2t0YWIgLiBiYWNrd2FyZC1idXR0b24pICgyNyBr
ZXltYXAgKDkgLiBiYWNrd2FyZC1idXR0b24pKSAoOSAuIGZvcndhcmQtYnV0dG9uKSkgYnV0dG9u
LWRhdGEgI1soJnJlc3QgX2l0KSAiCAkhXDIxMRJcMjA3IiBbYWQtLWFkZG9pdC1mdW5jdGlvbiBl
dmFsLWxhc3Qtc2V4cC1hcmctaW50ZXJuYWwgYWQtcmV0dXJuLXZhbHVlXSAyXSBjYXRlZ29yeSB0
IGZvbGxvdy1saW5rIHQgYnV0dG9uIHQgaGVscC1lY2hvICJtb3VzZS0yLCBSRVQ6IERpc3BsYXkg
dGhlIGZ1bmN0aW9uJ3MgYm9keSIgbW91c2UtZmFjZSBoaWdobGlnaHQgZm9udC1sb2NrLWZhY2Ug
YnV0dG9uIGZhY2UgYnV0dG9uKSldIDM0IFsjKCJzdHJpbmc9IiAwIDcgKGhlbHAtYXJncyAoc3Ry
aW5nPSkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoIm9yIiAw
IDIgKGhlbHAtYXJncyAob3IpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAo
dCkpKSAjKCJjb25kIiAwIDQgKGhlbHAtYXJncyAoY29uZCkgY2F0ZWdvcnkgaGVscC1mdW5jdGlv
bi1idXR0b24gYnV0dG9uICh0KSkpICMoImZpbGUtdHJ1ZW5hbWUiIDAgMTMgKGhlbHAtYXJncyAo
ZmlsZS10cnVlbmFtZSkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkp
ICMoImZpbGUtbmFtZS1hcy1kaXJlY3RvcnkiIDAgMjIgKGhlbHAtYXJncyAoZmlsZS1uYW1lLWFz
LWRpcmVjdG9yeSkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMo
ImxldCIgMCAzIChoZWxwLWFyZ3MgKGxldCkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24g
YnV0dG9uICh0KSkpICMoImlmIiAwIDIgKGhlbHAtYXJncyAoaWYpIGNhdGVnb3J5IGhlbHAtZnVu
Y3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJvciIgMCAyIChoZWxwLWFyZ3MgKG9yKSBjYXRl
Z29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygibGV0IiAwIDMgKGhlbHAt
YXJncyAobGV0KSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygi
aWYiIDAgMiAoaGVscC1hcmdzIChpZikgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0
dG9uICh0KSkpICMoImxldCIgMCAzIChoZWxwLWFyZ3MgKGxldCkgY2F0ZWdvcnkgaGVscC1mdW5j
dGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoIndoaWxlIiAwIDUgKGhlbHAtYXJncyAod2hpbGUp
IGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJsZXQiIDAgMyAo
aGVscC1hcmdzIChsZXQpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkp
KSAjKCJmaWxlLXRydWVuYW1lIiAwIDEzIChoZWxwLWFyZ3MgKGZpbGUtdHJ1ZW5hbWUpIGNhdGVn
b3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJmaWxlLW5hbWUtYXMtZGly
ZWN0b3J5IiAwIDIyIChoZWxwLWFyZ3MgKGZpbGUtbmFtZS1hcy1kaXJlY3RvcnkpIGNhdGVnb3J5
IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJsZXQiIDAgMyAoaGVscC1hcmdz
IChsZXQpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKV0gMTAgWyMo
ImxldCIgMCAzIChoZWxwLWFyZ3MgKGxldCkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24g
YnV0dG9uICh0KSkpICMoImNvbmQiIDAgNCAoaGVscC1hcmdzIChjb25kKSBjYXRlZ29yeSBoZWxw
LWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygiZmlsZS10cnVlbmFtZSIgMCAxMyAoaGVs
cC1hcmdzIChmaWxlLXRydWVuYW1lKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0
b24gKHQpKSkgIygiIzxsYW1iZGEgMzdGPiIgOSAxMiAoYWN0aW9uIGhlbHAtZm5zLS1kaXNwbGF5
LWZ1bmN0aW9uIGtleW1hcCAoa2V5bWFwICh0b3VjaHNjcmVlbi1kb3duIC4gcHVzaC1idXR0b24p
IChoZWFkZXItbGluZSBrZXltYXAgKHRvdWNoc2NyZWVuLWRvd24gLiBwdXNoLWJ1dHRvbikgKG1v
dXNlLTIgLiBwdXNoLWJ1dHRvbikpIChtb2RlLWxpbmUga2V5bWFwICh0b3VjaHNjcmVlbi1kb3du
IC4gcHVzaC1idXR0b24pIChtb3VzZS0yIC4gcHVzaC1idXR0b24pKSAoZm9sbG93LWxpbmsgLiBt
b3VzZS1mYWNlKSAobW91c2UtMiAuIHB1c2gtYnV0dG9uKSAoMTMgLiBwdXNoLWJ1dHRvbikga2V5
bWFwIChiYWNrdGFiIC4gYmFja3dhcmQtYnV0dG9uKSAoMjcga2V5bWFwICg5IC4gYmFja3dhcmQt
YnV0dG9uKSkgKDkgLiBmb3J3YXJkLWJ1dHRvbikpIGJ1dHRvbi1kYXRhIChsYW1iZGEgbmlsIChm
aWxlLXRydWVuYW1lICJ+L1dvcmsvc29tZS9sb25nL3BhdGgvdG8vcGFyc2UvdGhhdC9pcy92ZXJ5
L2RlZXAvZGVlcC9kZWVwL3N1cGVyL2R1cGVyL2RlZXAvZGVlcC5lbCIpKSBjYXRlZ29yeSB0IGZv
bGxvdy1saW5rIHQgYnV0dG9uIHQgaGVscC1lY2hvICJtb3VzZS0yLCBSRVQ6IERpc3BsYXkgdGhl
IGZ1bmN0aW9uJ3MgYm9keSIgbW91c2UtZmFjZSBoaWdobGlnaHQgZm9udC1sb2NrLWZhY2UgYnV0
dG9uIGZhY2UgYnV0dG9uKSkgIygiYmVuY2htYXJrLWNhbGwiIDAgMTQgKGhlbHAtYXJncyAoYmVu
Y2htYXJrLWNhbGwpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAj
KCJldmFsIiAwIDQgKGhlbHAtYXJncyAoZXZhbCkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0
b24gYnV0dG9uICh0KSkpICMoImVsaXNwLS1ldmFsLWxhc3Qtc2V4cCIgMCAyMSAoaGVscC1hcmdz
IChlbGlzcC0tZXZhbC1sYXN0LXNleHApIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1
dHRvbiAodCkpKSAjKCIjPGNvbXBpbGVkLWZ1bmN0aW9uIENCOD4iIDIwIDIzIChhY3Rpb24gaGVs
cC1mbnMtLWRpc3BsYXktZnVuY3Rpb24ga2V5bWFwIChrZXltYXAgKHRvdWNoc2NyZWVuLWRvd24g
LiBwdXNoLWJ1dHRvbikgKGhlYWRlci1saW5lIGtleW1hcCAodG91Y2hzY3JlZW4tZG93biAuIHB1
c2gtYnV0dG9uKSAobW91c2UtMiAuIHB1c2gtYnV0dG9uKSkgKG1vZGUtbGluZSBrZXltYXAgKHRv
dWNoc2NyZWVuLWRvd24gLiBwdXNoLWJ1dHRvbikgKG1vdXNlLTIgLiBwdXNoLWJ1dHRvbikpIChm
b2xsb3ctbGluayAuIG1vdXNlLWZhY2UpIChtb3VzZS0yIC4gcHVzaC1idXR0b24pICgxMyAuIHB1
c2gtYnV0dG9uKSBrZXltYXAgKGJhY2t0YWIgLiBiYWNrd2FyZC1idXR0b24pICgyNyBrZXltYXAg
KDkgLiBiYWNrd2FyZC1idXR0b24pKSAoOSAuIGZvcndhcmQtYnV0dG9uKSkgYnV0dG9uLWRhdGEg
I1swICJcMzAxXDMwMCFcMjA3IiBbbmlsIGVsaXNwLS1ldmFsLWxhc3Qtc2V4cF0gMl0gY2F0ZWdv
cnkgdCBmb2xsb3ctbGluayB0IGJ1dHRvbiB0IGhlbHAtZWNobyAibW91c2UtMiwgUkVUOiBEaXNw
bGF5IHRoZSBmdW5jdGlvbidzIGJvZHkiIG1vdXNlLWZhY2UgaGlnaGxpZ2h0IGZvbnQtbG9jay1m
YWNlIGJ1dHRvbiBmYWNlIGJ1dHRvbikpICMoIiM8c3Vici1uYXRpdmUtZWxpc3AgZXZhbC1sYXN0
LXNleHA+IiAyMCAzNCAoYnV0dG9uICh0KSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBo
ZWxwLWFyZ3MgKGV2YWwtbGFzdC1zZXhwKSkpICMoIiM8Y29tcGlsZWQtZnVuY3Rpb24gRDg1PiIg
MjAgMjMgKGFjdGlvbiBoZWxwLWZucy0tZGlzcGxheS1mdW5jdGlvbiBrZXltYXAgKGtleW1hcCAo
dG91Y2hzY3JlZW4tZG93biAuIHB1c2gtYnV0dG9uKSAoaGVhZGVyLWxpbmUga2V5bWFwICh0b3Vj
aHNjcmVlbi1kb3duIC4gcHVzaC1idXR0b24pIChtb3VzZS0yIC4gcHVzaC1idXR0b24pKSAobW9k
ZS1saW5lIGtleW1hcCAodG91Y2hzY3JlZW4tZG93biAuIHB1c2gtYnV0dG9uKSAobW91c2UtMiAu
IHB1c2gtYnV0dG9uKSkgKGZvbGxvdy1saW5rIC4gbW91c2UtZmFjZSkgKG1vdXNlLTIgLiBwdXNo
LWJ1dHRvbikgKDEzIC4gcHVzaC1idXR0b24pIGtleW1hcCAoYmFja3RhYiAuIGJhY2t3YXJkLWJ1
dHRvbikgKDI3IGtleW1hcCAoOSAuIGJhY2t3YXJkLWJ1dHRvbikpICg5IC4gZm9yd2FyZC1idXR0
b24pKSBidXR0b24tZGF0YSAjWygmcmVzdCBfaXQpICIICSFcMjExElwyMDciIFthZC0tYWRkb2l0
LWZ1bmN0aW9uIGV2YWwtbGFzdC1zZXhwLWFyZy1pbnRlcm5hbCBhZC1yZXR1cm4tdmFsdWVdIDJd
IGNhdGVnb3J5IHQgZm9sbG93LWxpbmsgdCBidXR0b24gdCBoZWxwLWVjaG8gIm1vdXNlLTIsIFJF
VDogRGlzcGxheSB0aGUgZnVuY3Rpb24ncyBib2R5IiBtb3VzZS1mYWNlIGhpZ2hsaWdodCBmb250
LWxvY2stZmFjZSBidXR0b24gZmFjZSBidXR0b24pKSAjKCJldmFsLXNleHAtZnUtZmxhc2gtZG9p
dC1zaW1wbGUiIDAgMzAgKGhlbHAtYXJncyAoZXZhbC1zZXhwLWZ1LWZsYXNoLWRvaXQtc2ltcGxl
KSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygiZXZhbC1zZXhw
LWZ1LWZsYXNoLWRvaXQiIDAgMjMgKGhlbHAtYXJncyAoZXZhbC1zZXhwLWZ1LWZsYXNoLWRvaXQp
IGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJlc2YtZmxhc2gt
ZG9pdCIgMCAxNCAoaGVscC1hcmdzIChlc2YtZmxhc2gtZG9pdCkgY2F0ZWdvcnkgaGVscC1mdW5j
dGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImFkLUFkdmljZS1ldmFsLWxhc3Qtc2V4cCIgMCAy
NCAoaGVscC1hcmdzIChhZC1BZHZpY2UtZXZhbC1sYXN0LXNleHApIGNhdGVnb3J5IGhlbHAtZnVu
Y3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJhcHBseSIgMCA1IChoZWxwLWFyZ3MgKGFwcGx5
KSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygiZXZhbC1sYXN0
LXNleHAiIDAgMTQgKGhlbHAtYXJncyAoZXZhbC1sYXN0LXNleHApIGNhdGVnb3J5IGhlbHAtZnVu
Y3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKV0gMTAgWyMoImZpbGUtbmFtZS1ub25kaXJlY3Rvcnki
IDAgMjIgKGhlbHAtYXJncyAoZmlsZS1uYW1lLW5vbmRpcmVjdG9yeSkgY2F0ZWdvcnkgaGVscC1m
dW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImNvbmNhdCIgMCA2IChoZWxwLWFyZ3MgKGNv
bmNhdCkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoInNldHEi
IDAgNCAoaGVscC1hcmdzIChzZXRxKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0
b24gKHQpKSkgIygiaWYiIDAgMiAoaGVscC1hcmdzIChpZikgY2F0ZWdvcnkgaGVscC1mdW5jdGlv
bi1idXR0b24gYnV0dG9uICh0KSkpICMoImlmIiAwIDIgKGhlbHAtYXJncyAoaWYpIGNhdGVnb3J5
IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJsZXQiIDAgMyAoaGVscC1hcmdz
IChsZXQpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJpZiIg
MCAyIChoZWxwLWFyZ3MgKGlmKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24g
KHQpKSkgIygibGV0IiAwIDMgKGhlbHAtYXJncyAobGV0KSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9u
LWJ1dHRvbiBidXR0b24gKHQpKSkgIygid2hpbGUiIDAgNSAoaGVscC1hcmdzICh3aGlsZSkgY2F0
ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImxldCIgMCAzIChoZWxw
LWFyZ3MgKGxldCkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMo
ImZpbGUtdHJ1ZW5hbWUiIDAgMTMgKGhlbHAtYXJncyAoZmlsZS10cnVlbmFtZSkgY2F0ZWdvcnkg
aGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoIiM8bGFtYmRhIDM3Rj4iIDkgMTIg
KGFjdGlvbiBoZWxwLWZucy0tZGlzcGxheS1mdW5jdGlvbiBrZXltYXAgKGtleW1hcCAodG91Y2hz
Y3JlZW4tZG93biAuIHB1c2gtYnV0dG9uKSAoaGVhZGVyLWxpbmUga2V5bWFwICh0b3VjaHNjcmVl
bi1kb3duIC4gcHVzaC1idXR0b24pIChtb3VzZS0yIC4gcHVzaC1idXR0b24pKSAobW9kZS1saW5l
IGtleW1hcCAodG91Y2hzY3JlZW4tZG93biAuIHB1c2gtYnV0dG9uKSAobW91c2UtMiAuIHB1c2gt
YnV0dG9uKSkgKGZvbGxvdy1saW5rIC4gbW91c2UtZmFjZSkgKG1vdXNlLTIgLiBwdXNoLWJ1dHRv
bikgKDEzIC4gcHVzaC1idXR0b24pIGtleW1hcCAoYmFja3RhYiAuIGJhY2t3YXJkLWJ1dHRvbikg
KDI3IGtleW1hcCAoOSAuIGJhY2t3YXJkLWJ1dHRvbikpICg5IC4gZm9yd2FyZC1idXR0b24pKSBi
dXR0b24tZGF0YSAobGFtYmRhIG5pbCAoZmlsZS10cnVlbmFtZSAifi9Xb3JrL3NvbWUvbG9uZy9w
YXRoL3RvL3BhcnNlL3RoYXQvaXMvdmVyeS9kZWVwL2RlZXAvZGVlcC9zdXBlci9kdXBlci9kZWVw
L2RlZXAuZWwiKSkgY2F0ZWdvcnkgdCBmb2xsb3ctbGluayB0IGJ1dHRvbiB0IGhlbHAtZWNobyAi
bW91c2UtMiwgUkVUOiBEaXNwbGF5IHRoZSBmdW5jdGlvbidzIGJvZHkiIG1vdXNlLWZhY2UgaGln
aGxpZ2h0IGZvbnQtbG9jay1mYWNlIGJ1dHRvbiBmYWNlIGJ1dHRvbikpICMoImJlbmNobWFyay1j
YWxsIiAwIDE0IChoZWxwLWFyZ3MgKGJlbmNobWFyay1jYWxsKSBjYXRlZ29yeSBoZWxwLWZ1bmN0
aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygiZXZhbCIgMCA0IChoZWxwLWFyZ3MgKGV2YWwpIGNh
dGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJlbGlzcC0tZXZhbC1s
YXN0LXNleHAiIDAgMjEgKGhlbHAtYXJncyAoZWxpc3AtLWV2YWwtbGFzdC1zZXhwKSBjYXRlZ29y
eSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygiIzxjb21waWxlZC1mdW5jdGlv
biBDQjg+IiAyMCAyMyAoYWN0aW9uIGhlbHAtZm5zLS1kaXNwbGF5LWZ1bmN0aW9uIGtleW1hcCAo
a2V5bWFwICh0b3VjaHNjcmVlbi1kb3duIC4gcHVzaC1idXR0b24pIChoZWFkZXItbGluZSBrZXlt
YXAgKHRvdWNoc2NyZWVuLWRvd24gLiBwdXNoLWJ1dHRvbikgKG1vdXNlLTIgLiBwdXNoLWJ1dHRv
bikpIChtb2RlLWxpbmUga2V5bWFwICh0b3VjaHNjcmVlbi1kb3duIC4gcHVzaC1idXR0b24pICht
b3VzZS0yIC4gcHVzaC1idXR0b24pKSAoZm9sbG93LWxpbmsgLiBtb3VzZS1mYWNlKSAobW91c2Ut
MiAuIHB1c2gtYnV0dG9uKSAoMTMgLiBwdXNoLWJ1dHRvbikga2V5bWFwIChiYWNrdGFiIC4gYmFj
a3dhcmQtYnV0dG9uKSAoMjcga2V5bWFwICg5IC4gYmFja3dhcmQtYnV0dG9uKSkgKDkgLiBmb3J3
YXJkLWJ1dHRvbikpIGJ1dHRvbi1kYXRhICNbMCAiXDMwMVwzMDAhXDIwNyIgW25pbCBlbGlzcC0t
ZXZhbC1sYXN0LXNleHBdIDJdIGNhdGVnb3J5IHQgZm9sbG93LWxpbmsgdCBidXR0b24gdCBoZWxw
LWVjaG8gIm1vdXNlLTIsIFJFVDogRGlzcGxheSB0aGUgZnVuY3Rpb24ncyBib2R5IiBtb3VzZS1m
YWNlIGhpZ2hsaWdodCBmb250LWxvY2stZmFjZSBidXR0b24gZmFjZSBidXR0b24pKV0gMzQgWyMo
ImlmIiAwIDIgKGhlbHAtYXJncyAoaWYpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1
dHRvbiAodCkpKSAjKCJsZXQiIDAgMyAoaGVscC1hcmdzIChsZXQpIGNhdGVnb3J5IGhlbHAtZnVu
Y3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJ3aGlsZSIgMCA1IChoZWxwLWFyZ3MgKHdoaWxl
KSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygibGV0IiAwIDMg
KGhlbHAtYXJncyAobGV0KSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQp
KSkgIygiZmlsZS10cnVlbmFtZSIgMCAxMyAoaGVscC1hcmdzIChmaWxlLXRydWVuYW1lKSBjYXRl
Z29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygiZmlsZS1uYW1lLWFzLWRp
cmVjdG9yeSIgMCAyMiAoaGVscC1hcmdzIChmaWxlLW5hbWUtYXMtZGlyZWN0b3J5KSBjYXRlZ29y
eSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygibGV0IiAwIDMgKGhlbHAtYXJn
cyAobGV0KSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygiaWYi
IDAgMiAoaGVscC1hcmdzIChpZikgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9u
ICh0KSkpICMoIm9yIiAwIDIgKGhlbHAtYXJncyAob3IpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24t
YnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJsZXQiIDAgMyAoaGVscC1hcmdzIChsZXQpIGNhdGVnb3J5
IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJpZiIgMCAyIChoZWxwLWFyZ3Mg
KGlmKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygibGV0IiAw
IDMgKGhlbHAtYXJncyAobGV0KSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24g
KHQpKSkgIygid2hpbGUiIDAgNSAoaGVscC1hcmdzICh3aGlsZSkgY2F0ZWdvcnkgaGVscC1mdW5j
dGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImxldCIgMCAzIChoZWxwLWFyZ3MgKGxldCkgY2F0
ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImZpbGUtdHJ1ZW5hbWUi
IDAgMTMgKGhlbHAtYXJncyAoZmlsZS10cnVlbmFtZSkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1i
dXR0b24gYnV0dG9uICh0KSkpICMoImZpbGUtbmFtZS1hcy1kaXJlY3RvcnkiIDAgMjIgKGhlbHAt
YXJncyAoZmlsZS1uYW1lLWFzLWRpcmVjdG9yeSkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0
b24gYnV0dG9uICh0KSkpXSA3IFsjKCJmaWxlLW5hbWUtZGlyZWN0b3J5IiAwIDE5IChoZWxwLWFy
Z3MgKGZpbGUtbmFtZS1kaXJlY3RvcnkpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1
dHRvbiAodCkpKSAjKCJhcHBseSIgMCA1IChoZWxwLWFyZ3MgKGFwcGx5KSBjYXRlZ29yeSBoZWxw
LWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygidHJhbXAtcnVuLXJlYWwtaGFuZGxlciIg
MCAyMiAoaGVscC1hcmdzICh0cmFtcC1ydW4tcmVhbC1oYW5kbGVyKSBjYXRlZ29yeSBoZWxwLWZ1
bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygidHJhbXAtY29tcGxldGlvbi1maWxlLW5hbWUt
aGFuZGxlciIgMCAzNCAoaGVscC1hcmdzICh0cmFtcC1jb21wbGV0aW9uLWZpbGUtbmFtZS1oYW5k
bGVyKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygiZmlsZS1u
YW1lLWRpcmVjdG9yeSIgMCAxOSAoaGVscC1hcmdzIChmaWxlLW5hbWUtZGlyZWN0b3J5KSBjYXRl
Z29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygib3IiIDAgMiAoaGVscC1h
cmdzIChvcikgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImxl
dCIgMCAzIChoZWxwLWFyZ3MgKGxldCkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0
dG9uICh0KSkpICMoImlmIiAwIDIgKGhlbHAtYXJncyAoaWYpIGNhdGVnb3J5IGhlbHAtZnVuY3Rp
b24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJsZXQiIDAgMyAoaGVscC1hcmdzIChsZXQpIGNhdGVn
b3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJ3aGlsZSIgMCA1IChoZWxw
LWFyZ3MgKHdoaWxlKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkg
IygibGV0IiAwIDMgKGhlbHAtYXJncyAobGV0KSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRv
biBidXR0b24gKHQpKSkgIygiZmlsZS10cnVlbmFtZSIgMCAxMyAoaGVscC1hcmdzIChmaWxlLXRy
dWVuYW1lKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygiZmls
ZS1uYW1lLWFzLWRpcmVjdG9yeSIgMCAyMiAoaGVscC1hcmdzIChmaWxlLW5hbWUtYXMtZGlyZWN0
b3J5KSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygibGV0IiAw
IDMgKGhlbHAtYXJncyAobGV0KSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24g
KHQpKSkgIygiaWYiIDAgMiAoaGVscC1hcmdzIChpZikgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1i
dXR0b24gYnV0dG9uICh0KSkpICMoIm9yIiAwIDIgKGhlbHAtYXJncyAob3IpIGNhdGVnb3J5IGhl
bHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKV0gMjEgWyMoImZpbGUtbmFtZS1ub25kaXJl
Y3RvcnkiIDAgMjIgKGhlbHAtYXJncyAoZmlsZS1uYW1lLW5vbmRpcmVjdG9yeSkgY2F0ZWdvcnkg
aGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImFwcGx5IiAwIDUgKGhlbHAtYXJn
cyAoYXBwbHkpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJ0
cmFtcC1ydW4tcmVhbC1oYW5kbGVyIiAwIDIyIChoZWxwLWFyZ3MgKHRyYW1wLXJ1bi1yZWFsLWhh
bmRsZXIpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJ0cmFt
cC1jb21wbGV0aW9uLWZpbGUtbmFtZS1oYW5kbGVyIiAwIDM0IChoZWxwLWFyZ3MgKHRyYW1wLWNv
bXBsZXRpb24tZmlsZS1uYW1lLWhhbmRsZXIpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9u
IGJ1dHRvbiAodCkpKSAjKCJmaWxlLW5hbWUtbm9uZGlyZWN0b3J5IiAwIDIyIChoZWxwLWFyZ3Mg
KGZpbGUtbmFtZS1ub25kaXJlY3RvcnkpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1
dHRvbiAodCkpKSAjKCJlcXVhbCIgMCA1IChoZWxwLWFyZ3MgKGVxdWFsKSBjYXRlZ29yeSBoZWxw
LWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygiaWYiIDAgMiAoaGVscC1hcmdzIChpZikg
Y2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImxldCIgMCAzICho
ZWxwLWFyZ3MgKGxldCkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkp
ICMoImlmIiAwIDIgKGhlbHAtYXJncyAoaWYpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9u
IGJ1dHRvbiAodCkpKSAjKCJsZXQiIDAgMyAoaGVscC1hcmdzIChsZXQpIGNhdGVnb3J5IGhlbHAt
ZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJ3aGlsZSIgMCA1IChoZWxwLWFyZ3MgKHdo
aWxlKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygibGV0IiAw
IDMgKGhlbHAtYXJncyAobGV0KSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24g
KHQpKSkgIygiZmlsZS10cnVlbmFtZSIgMCAxMyAoaGVscC1hcmdzIChmaWxlLXRydWVuYW1lKSBj
YXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygiZmlsZS1uYW1lLWFz
LWRpcmVjdG9yeSIgMCAyMiAoaGVscC1hcmdzIChmaWxlLW5hbWUtYXMtZGlyZWN0b3J5KSBjYXRl
Z29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygibGV0IiAwIDMgKGhlbHAt
YXJncyAobGV0KSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygi
aWYiIDAgMiAoaGVscC1hcmdzIChpZikgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0
dG9uICh0KSkpXSAxMyBbIygibm90IiAwIDMgKGhlbHAtYXJncyAobm90KSBjYXRlZ29yeSBoZWxw
LWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygid2hpbGUiIDAgNSAoaGVscC1hcmdzICh3
aGlsZSkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImxldCIg
MCAzIChoZWxwLWFyZ3MgKGxldCkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9u
ICh0KSkpICMoImZpbGUtdHJ1ZW5hbWUiIDAgMTMgKGhlbHAtYXJncyAoZmlsZS10cnVlbmFtZSkg
Y2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImZpbGUtbmFtZS1h
cy1kaXJlY3RvcnkiIDAgMjIgKGhlbHAtYXJncyAoZmlsZS1uYW1lLWFzLWRpcmVjdG9yeSkgY2F0
ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImxldCIgMCAzIChoZWxw
LWFyZ3MgKGxldCkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMo
ImlmIiAwIDIgKGhlbHAtYXJncyAoaWYpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1
dHRvbiAodCkpKSAjKCJvciIgMCAyIChoZWxwLWFyZ3MgKG9yKSBjYXRlZ29yeSBoZWxwLWZ1bmN0
aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygibGV0IiAwIDMgKGhlbHAtYXJncyAobGV0KSBjYXRl
Z29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygiaWYiIDAgMiAoaGVscC1h
cmdzIChpZikgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImxl
dCIgMCAzIChoZWxwLWFyZ3MgKGxldCkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0
dG9uICh0KSkpICMoIndoaWxlIiAwIDUgKGhlbHAtYXJncyAod2hpbGUpIGNhdGVnb3J5IGhlbHAt
ZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJsZXQiIDAgMyAoaGVscC1hcmdzIChsZXQp
IGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJmaWxlLXRydWVu
YW1lIiAwIDEzIChoZWxwLWFyZ3MgKGZpbGUtdHJ1ZW5hbWUpIGNhdGVnb3J5IGhlbHAtZnVuY3Rp
b24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJmaWxlLW5hbWUtYXMtZGlyZWN0b3J5IiAwIDIyICho
ZWxwLWFyZ3MgKGZpbGUtbmFtZS1hcy1kaXJlY3RvcnkpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24t
YnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJsZXQiIDAgMyAoaGVscC1hcmdzIChsZXQpIGNhdGVnb3J5
IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKV0gNiBbIygic2V0cSIgMCA0IChoZWxw
LWFyZ3MgKHNldHEpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAj
KCJsZXQiIDAgMyAoaGVscC1hcmdzIChsZXQpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9u
IGJ1dHRvbiAodCkpKSAjKCJpZiIgMCAyIChoZWxwLWFyZ3MgKGlmKSBjYXRlZ29yeSBoZWxwLWZ1
bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygib3IiIDAgMiAoaGVscC1hcmdzIChvcikgY2F0
ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImxldCIgMCAzIChoZWxw
LWFyZ3MgKGxldCkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMo
ImlmIiAwIDIgKGhlbHAtYXJncyAoaWYpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1
dHRvbiAodCkpKSAjKCJsZXQiIDAgMyAoaGVscC1hcmdzIChsZXQpIGNhdGVnb3J5IGhlbHAtZnVu
Y3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJ3aGlsZSIgMCA1IChoZWxwLWFyZ3MgKHdoaWxl
KSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygibGV0IiAwIDMg
KGhlbHAtYXJncyAobGV0KSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQp
KSkgIygiZmlsZS10cnVlbmFtZSIgMCAxMyAoaGVscC1hcmdzIChmaWxlLXRydWVuYW1lKSBjYXRl
Z29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygiZmlsZS1uYW1lLWFzLWRp
cmVjdG9yeSIgMCAyMiAoaGVscC1hcmdzIChmaWxlLW5hbWUtYXMtZGlyZWN0b3J5KSBjYXRlZ29y
eSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygibGV0IiAwIDMgKGhlbHAtYXJn
cyAobGV0KSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygiaWYi
IDAgMiAoaGVscC1hcmdzIChpZikgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9u
ICh0KSkpICMoIm9yIiAwIDIgKGhlbHAtYXJncyAob3IpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24t
YnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJsZXQiIDAgMyAoaGVscC1hcmdzIChsZXQpIGNhdGVnb3J5
IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJpZiIgMCAyIChoZWxwLWFyZ3Mg
KGlmKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSldIDQgWyMoImlm
IiAwIDIgKGhlbHAtYXJncyAoaWYpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRv
biAodCkpKSAjKCJpZiIgMCAyIChoZWxwLWFyZ3MgKGlmKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9u
LWJ1dHRvbiBidXR0b24gKHQpKSkgIygibGV0IiAwIDMgKGhlbHAtYXJncyAobGV0KSBjYXRlZ29y
eSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygiaWYiIDAgMiAoaGVscC1hcmdz
IChpZikgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImxldCIg
MCAzIChoZWxwLWFyZ3MgKGxldCkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9u
ICh0KSkpICMoIndoaWxlIiAwIDUgKGhlbHAtYXJncyAod2hpbGUpIGNhdGVnb3J5IGhlbHAtZnVu
Y3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJsZXQiIDAgMyAoaGVscC1hcmdzIChsZXQpIGNh
dGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJmaWxlLXRydWVuYW1l
IiAwIDEzIChoZWxwLWFyZ3MgKGZpbGUtdHJ1ZW5hbWUpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24t
YnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJmaWxlLW5hbWUtYXMtZGlyZWN0b3J5IiAwIDIyIChoZWxw
LWFyZ3MgKGZpbGUtbmFtZS1hcy1kaXJlY3RvcnkpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0
dG9uIGJ1dHRvbiAodCkpKSAjKCJsZXQiIDAgMyAoaGVscC1hcmdzIChsZXQpIGNhdGVnb3J5IGhl
bHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJpZiIgMCAyIChoZWxwLWFyZ3MgKGlm
KSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygib3IiIDAgMiAo
aGVscC1hcmdzIChvcikgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkp
ICMoImxldCIgMCAzIChoZWxwLWFyZ3MgKGxldCkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0
b24gYnV0dG9uICh0KSkpICMoImlmIiAwIDIgKGhlbHAtYXJncyAoaWYpIGNhdGVnb3J5IGhlbHAt
ZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJsZXQiIDAgMyAoaGVscC1hcmdzIChsZXQp
IGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJ3aGlsZSIgMCA1
IChoZWxwLWFyZ3MgKHdoaWxlKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24g
KHQpKSldIDE1IFsjKCJjb25zIiAwIDQgKGhlbHAtYXJncyAoY29ucykgY2F0ZWdvcnkgaGVscC1m
dW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoInNldGNhciIgMCA2IChoZWxwLWFyZ3MgKHNl
dGNhcikgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImxldCIg
MCAzIChoZWxwLWFyZ3MgKGxldCkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9u
ICh0KSkpICMoImlmIiAwIDIgKGhlbHAtYXJncyAoaWYpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24t
YnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJvciIgMCAyIChoZWxwLWFyZ3MgKG9yKSBjYXRlZ29yeSBo
ZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygibGV0IiAwIDMgKGhlbHAtYXJncyAo
bGV0KSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygiaWYiIDAg
MiAoaGVscC1hcmdzIChpZikgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0
KSkpICMoImxldCIgMCAzIChoZWxwLWFyZ3MgKGxldCkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1i
dXR0b24gYnV0dG9uICh0KSkpICMoIndoaWxlIiAwIDUgKGhlbHAtYXJncyAod2hpbGUpIGNhdGVn
b3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJsZXQiIDAgMyAoaGVscC1h
cmdzIChsZXQpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJm
aWxlLXRydWVuYW1lIiAwIDEzIChoZWxwLWFyZ3MgKGZpbGUtdHJ1ZW5hbWUpIGNhdGVnb3J5IGhl
bHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJmaWxlLW5hbWUtYXMtZGlyZWN0b3J5
IiAwIDIyIChoZWxwLWFyZ3MgKGZpbGUtbmFtZS1hcy1kaXJlY3RvcnkpIGNhdGVnb3J5IGhlbHAt
ZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJsZXQiIDAgMyAoaGVscC1hcmdzIChsZXQp
IGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJpZiIgMCAyICho
ZWxwLWFyZ3MgKGlmKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkg
Iygib3IiIDAgMiAoaGVscC1hcmdzIChvcikgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24g
YnV0dG9uICh0KSkpICMoImxldCIgMCAzIChoZWxwLWFyZ3MgKGxldCkgY2F0ZWdvcnkgaGVscC1m
dW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpXSAxMCBbIygiZmlsZS1uYW1lLW5vbmRpcmVjdG9y
eSIgMCAyMiAoaGVscC1hcmdzIChmaWxlLW5hbWUtbm9uZGlyZWN0b3J5KSBjYXRlZ29yeSBoZWxw
LWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygiZXF1YWwiIDAgNSAoaGVscC1hcmdzIChl
cXVhbCkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImlmIiAw
IDIgKGhlbHAtYXJncyAoaWYpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAo
dCkpKSAjKCJpZiIgMCAyIChoZWxwLWFyZ3MgKGlmKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1
dHRvbiBidXR0b24gKHQpKSkgIygibGV0IiAwIDMgKGhlbHAtYXJncyAobGV0KSBjYXRlZ29yeSBo
ZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygiaWYiIDAgMiAoaGVscC1hcmdzIChp
ZikgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImxldCIgMCAz
IChoZWxwLWFyZ3MgKGxldCkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0
KSkpICMoIndoaWxlIiAwIDUgKGhlbHAtYXJncyAod2hpbGUpIGNhdGVnb3J5IGhlbHAtZnVuY3Rp
b24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJsZXQiIDAgMyAoaGVscC1hcmdzIChsZXQpIGNhdGVn
b3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJmaWxlLXRydWVuYW1lIiAw
IDEzIChoZWxwLWFyZ3MgKGZpbGUtdHJ1ZW5hbWUpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0
dG9uIGJ1dHRvbiAodCkpKSAjKCIjPGxhbWJkYSAzN0Y+IiA5IDEyIChhY3Rpb24gaGVscC1mbnMt
LWRpc3BsYXktZnVuY3Rpb24ga2V5bWFwIChrZXltYXAgKHRvdWNoc2NyZWVuLWRvd24gLiBwdXNo
LWJ1dHRvbikgKGhlYWRlci1saW5lIGtleW1hcCAodG91Y2hzY3JlZW4tZG93biAuIHB1c2gtYnV0
dG9uKSAobW91c2UtMiAuIHB1c2gtYnV0dG9uKSkgKG1vZGUtbGluZSBrZXltYXAgKHRvdWNoc2Ny
ZWVuLWRvd24gLiBwdXNoLWJ1dHRvbikgKG1vdXNlLTIgLiBwdXNoLWJ1dHRvbikpIChmb2xsb3ct
bGluayAuIG1vdXNlLWZhY2UpIChtb3VzZS0yIC4gcHVzaC1idXR0b24pICgxMyAuIHB1c2gtYnV0
dG9uKSBrZXltYXAgKGJhY2t0YWIgLiBiYWNrd2FyZC1idXR0b24pICgyNyBrZXltYXAgKDkgLiBi
YWNrd2FyZC1idXR0b24pKSAoOSAuIGZvcndhcmQtYnV0dG9uKSkgYnV0dG9uLWRhdGEgKGxhbWJk
YSBuaWwgKGZpbGUtdHJ1ZW5hbWUgIn4vV29yay9zb21lL2xvbmcvcGF0aC90by9wYXJzZS90aGF0
L2lzL3ZlcnkvZGVlcC9kZWVwL2RlZXAvc3VwZXIvZHVwZXIvZGVlcC9kZWVwLmVsIikpIGNhdGVn
b3J5IHQgZm9sbG93LWxpbmsgdCBidXR0b24gdCBoZWxwLWVjaG8gIm1vdXNlLTIsIFJFVDogRGlz
cGxheSB0aGUgZnVuY3Rpb24ncyBib2R5IiBtb3VzZS1mYWNlIGhpZ2hsaWdodCBmb250LWxvY2st
ZmFjZSBidXR0b24gZmFjZSBidXR0b24pKSAjKCJiZW5jaG1hcmstY2FsbCIgMCAxNCAoaGVscC1h
cmdzIChiZW5jaG1hcmstY2FsbCkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9u
ICh0KSkpICMoImV2YWwiIDAgNCAoaGVscC1hcmdzIChldmFsKSBjYXRlZ29yeSBoZWxwLWZ1bmN0
aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygiZWxpc3AtLWV2YWwtbGFzdC1zZXhwIiAwIDIxICho
ZWxwLWFyZ3MgKGVsaXNwLS1ldmFsLWxhc3Qtc2V4cCkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1i
dXR0b24gYnV0dG9uICh0KSkpICMoIiM8Y29tcGlsZWQtZnVuY3Rpb24gQ0I4PiIgMjAgMjMgKGFj
dGlvbiBoZWxwLWZucy0tZGlzcGxheS1mdW5jdGlvbiBrZXltYXAgKGtleW1hcCAodG91Y2hzY3Jl
ZW4tZG93biAuIHB1c2gtYnV0dG9uKSAoaGVhZGVyLWxpbmUga2V5bWFwICh0b3VjaHNjcmVlbi1k
b3duIC4gcHVzaC1idXR0b24pIChtb3VzZS0yIC4gcHVzaC1idXR0b24pKSAobW9kZS1saW5lIGtl
eW1hcCAodG91Y2hzY3JlZW4tZG93biAuIHB1c2gtYnV0dG9uKSAobW91c2UtMiAuIHB1c2gtYnV0
dG9uKSkgKGZvbGxvdy1saW5rIC4gbW91c2UtZmFjZSkgKG1vdXNlLTIgLiBwdXNoLWJ1dHRvbikg
KDEzIC4gcHVzaC1idXR0b24pIGtleW1hcCAoYmFja3RhYiAuIGJhY2t3YXJkLWJ1dHRvbikgKDI3
IGtleW1hcCAoOSAuIGJhY2t3YXJkLWJ1dHRvbikpICg5IC4gZm9yd2FyZC1idXR0b24pKSBidXR0
b24tZGF0YSAjWzAgIlwzMDFcMzAwIVwyMDciIFtuaWwgZWxpc3AtLWV2YWwtbGFzdC1zZXhwXSAy
XSBjYXRlZ29yeSB0IGZvbGxvdy1saW5rIHQgYnV0dG9uIHQgaGVscC1lY2hvICJtb3VzZS0yLCBS
RVQ6IERpc3BsYXkgdGhlIGZ1bmN0aW9uJ3MgYm9keSIgbW91c2UtZmFjZSBoaWdobGlnaHQgZm9u
dC1sb2NrLWZhY2UgYnV0dG9uIGZhY2UgYnV0dG9uKSkgIygiIzxzdWJyLW5hdGl2ZS1lbGlzcCBl
dmFsLWxhc3Qtc2V4cD4iIDIwIDM0IChidXR0b24gKHQpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24t
YnV0dG9uIGhlbHAtYXJncyAoZXZhbC1sYXN0LXNleHApKSldIDI0IFsjKCJzdHJpbmc9IiAwIDcg
KGhlbHAtYXJncyAoc3RyaW5nPSkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9u
ICh0KSkpICMoImFuZCIgMCAzIChoZWxwLWFyZ3MgKGFuZCkgY2F0ZWdvcnkgaGVscC1mdW5jdGlv
bi1idXR0b24gYnV0dG9uICh0KSkpICMoImNvbmQiIDAgNCAoaGVscC1hcmdzIChjb25kKSBjYXRl
Z29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygiZmlsZS10cnVlbmFtZSIg
MCAxMyAoaGVscC1hcmdzIChmaWxlLXRydWVuYW1lKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1
dHRvbiBidXR0b24gKHQpKSkgIygiZmlsZS1uYW1lLWFzLWRpcmVjdG9yeSIgMCAyMiAoaGVscC1h
cmdzIChmaWxlLW5hbWUtYXMtZGlyZWN0b3J5KSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRv
biBidXR0b24gKHQpKSkgIygibGV0IiAwIDMgKGhlbHAtYXJncyAobGV0KSBjYXRlZ29yeSBoZWxw
LWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygiaWYiIDAgMiAoaGVscC1hcmdzIChpZikg
Y2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoIm9yIiAwIDIgKGhl
bHAtYXJncyAob3IpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAj
KCJsZXQiIDAgMyAoaGVscC1hcmdzIChsZXQpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9u
IGJ1dHRvbiAodCkpKSAjKCJpZiIgMCAyIChoZWxwLWFyZ3MgKGlmKSBjYXRlZ29yeSBoZWxwLWZ1
bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygibGV0IiAwIDMgKGhlbHAtYXJncyAobGV0KSBj
YXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygid2hpbGUiIDAgNSAo
aGVscC1hcmdzICh3aGlsZSkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0
KSkpICMoImxldCIgMCAzIChoZWxwLWFyZ3MgKGxldCkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1i
dXR0b24gYnV0dG9uICh0KSkpICMoImZpbGUtdHJ1ZW5hbWUiIDAgMTMgKGhlbHAtYXJncyAoZmls
ZS10cnVlbmFtZSkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMo
ImZpbGUtbmFtZS1hcy1kaXJlY3RvcnkiIDAgMjIgKGhlbHAtYXJncyAoZmlsZS1uYW1lLWFzLWRp
cmVjdG9yeSkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImxl
dCIgMCAzIChoZWxwLWFyZ3MgKGxldCkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0
dG9uICh0KSkpXSA3IFsjKCJzZXRjYXIiIDAgNiAoaGVscC1hcmdzIChzZXRjYXIpIGNhdGVnb3J5
IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJsZXQiIDAgMyAoaGVscC1hcmdz
IChsZXQpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJpZiIg
MCAyIChoZWxwLWFyZ3MgKGlmKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24g
KHQpKSkgIygib3IiIDAgMiAoaGVscC1hcmdzIChvcikgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1i
dXR0b24gYnV0dG9uICh0KSkpICMoImxldCIgMCAzIChoZWxwLWFyZ3MgKGxldCkgY2F0ZWdvcnkg
aGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImlmIiAwIDIgKGhlbHAtYXJncyAo
aWYpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJsZXQiIDAg
MyAoaGVscC1hcmdzIChsZXQpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAo
dCkpKSAjKCJ3aGlsZSIgMCA1IChoZWxwLWFyZ3MgKHdoaWxlKSBjYXRlZ29yeSBoZWxwLWZ1bmN0
aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygibGV0IiAwIDMgKGhlbHAtYXJncyAobGV0KSBjYXRl
Z29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygiZmlsZS10cnVlbmFtZSIg
MCAxMyAoaGVscC1hcmdzIChmaWxlLXRydWVuYW1lKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1
dHRvbiBidXR0b24gKHQpKSkgIygiZmlsZS1uYW1lLWFzLWRpcmVjdG9yeSIgMCAyMiAoaGVscC1h
cmdzIChmaWxlLW5hbWUtYXMtZGlyZWN0b3J5KSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRv
biBidXR0b24gKHQpKSkgIygibGV0IiAwIDMgKGhlbHAtYXJncyAobGV0KSBjYXRlZ29yeSBoZWxw
LWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygiaWYiIDAgMiAoaGVscC1hcmdzIChpZikg
Y2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoIm9yIiAwIDIgKGhl
bHAtYXJncyAob3IpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAj
KCJsZXQiIDAgMyAoaGVscC1hcmdzIChsZXQpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9u
IGJ1dHRvbiAodCkpKSAjKCJpZiIgMCAyIChoZWxwLWFyZ3MgKGlmKSBjYXRlZ29yeSBoZWxwLWZ1
bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSldIDQgWyMoImZpbGUtdHJ1ZW5hbWUiIDAgMTMgKGhl
bHAtYXJncyAoZmlsZS10cnVlbmFtZSkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0
dG9uICh0KSkpICMoImZpbGUtbmFtZS1hcy1kaXJlY3RvcnkiIDAgMjIgKGhlbHAtYXJncyAoZmls
ZS1uYW1lLWFzLWRpcmVjdG9yeSkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9u
ICh0KSkpICMoImxldCIgMCAzIChoZWxwLWFyZ3MgKGxldCkgY2F0ZWdvcnkgaGVscC1mdW5jdGlv
bi1idXR0b24gYnV0dG9uICh0KSkpICMoImlmIiAwIDIgKGhlbHAtYXJncyAoaWYpIGNhdGVnb3J5
IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJvciIgMCAyIChoZWxwLWFyZ3Mg
KG9yKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygibGV0IiAw
IDMgKGhlbHAtYXJncyAobGV0KSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24g
KHQpKSkgIygiaWYiIDAgMiAoaGVscC1hcmdzIChpZikgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1i
dXR0b24gYnV0dG9uICh0KSkpICMoImxldCIgMCAzIChoZWxwLWFyZ3MgKGxldCkgY2F0ZWdvcnkg
aGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoIndoaWxlIiAwIDUgKGhlbHAtYXJn
cyAod2hpbGUpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJs
ZXQiIDAgMyAoaGVscC1hcmdzIChsZXQpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1
dHRvbiAodCkpKSAjKCJmaWxlLXRydWVuYW1lIiAwIDEzIChoZWxwLWFyZ3MgKGZpbGUtdHJ1ZW5h
bWUpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCIjPGxhbWJk
YSAzN0Y+IiA5IDEyIChhY3Rpb24gaGVscC1mbnMtLWRpc3BsYXktZnVuY3Rpb24ga2V5bWFwIChr
ZXltYXAgKHRvdWNoc2NyZWVuLWRvd24gLiBwdXNoLWJ1dHRvbikgKGhlYWRlci1saW5lIGtleW1h
cCAodG91Y2hzY3JlZW4tZG93biAuIHB1c2gtYnV0dG9uKSAobW91c2UtMiAuIHB1c2gtYnV0dG9u
KSkgKG1vZGUtbGluZSBrZXltYXAgKHRvdWNoc2NyZWVuLWRvd24gLiBwdXNoLWJ1dHRvbikgKG1v
dXNlLTIgLiBwdXNoLWJ1dHRvbikpIChmb2xsb3ctbGluayAuIG1vdXNlLWZhY2UpIChtb3VzZS0y
IC4gcHVzaC1idXR0b24pICgxMyAuIHB1c2gtYnV0dG9uKSBrZXltYXAgKGJhY2t0YWIgLiBiYWNr
d2FyZC1idXR0b24pICgyNyBrZXltYXAgKDkgLiBiYWNrd2FyZC1idXR0b24pKSAoOSAuIGZvcndh
cmQtYnV0dG9uKSkgYnV0dG9uLWRhdGEgKGxhbWJkYSBuaWwgKGZpbGUtdHJ1ZW5hbWUgIn4vV29y
ay9zb21lL2xvbmcvcGF0aC90by9wYXJzZS90aGF0L2lzL3ZlcnkvZGVlcC9kZWVwL2RlZXAvc3Vw
ZXIvZHVwZXIvZGVlcC9kZWVwLmVsIikpIGNhdGVnb3J5IHQgZm9sbG93LWxpbmsgdCBidXR0b24g
dCBoZWxwLWVjaG8gIm1vdXNlLTIsIFJFVDogRGlzcGxheSB0aGUgZnVuY3Rpb24ncyBib2R5IiBt
b3VzZS1mYWNlIGhpZ2hsaWdodCBmb250LWxvY2stZmFjZSBidXR0b24gZmFjZSBidXR0b24pKSAj
KCJiZW5jaG1hcmstY2FsbCIgMCAxNCAoaGVscC1hcmdzIChiZW5jaG1hcmstY2FsbCkgY2F0ZWdv
cnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImV2YWwiIDAgNCAoaGVscC1h
cmdzIChldmFsKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygi
ZWxpc3AtLWV2YWwtbGFzdC1zZXhwIiAwIDIxIChoZWxwLWFyZ3MgKGVsaXNwLS1ldmFsLWxhc3Qt
c2V4cCkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoIiM8Y29t
cGlsZWQtZnVuY3Rpb24gQ0I4PiIgMjAgMjMgKGFjdGlvbiBoZWxwLWZucy0tZGlzcGxheS1mdW5j
dGlvbiBrZXltYXAgKGtleW1hcCAodG91Y2hzY3JlZW4tZG93biAuIHB1c2gtYnV0dG9uKSAoaGVh
ZGVyLWxpbmUga2V5bWFwICh0b3VjaHNjcmVlbi1kb3duIC4gcHVzaC1idXR0b24pIChtb3VzZS0y
IC4gcHVzaC1idXR0b24pKSAobW9kZS1saW5lIGtleW1hcCAodG91Y2hzY3JlZW4tZG93biAuIHB1
c2gtYnV0dG9uKSAobW91c2UtMiAuIHB1c2gtYnV0dG9uKSkgKGZvbGxvdy1saW5rIC4gbW91c2Ut
ZmFjZSkgKG1vdXNlLTIgLiBwdXNoLWJ1dHRvbikgKDEzIC4gcHVzaC1idXR0b24pIGtleW1hcCAo
YmFja3RhYiAuIGJhY2t3YXJkLWJ1dHRvbikgKDI3IGtleW1hcCAoOSAuIGJhY2t3YXJkLWJ1dHRv
bikpICg5IC4gZm9yd2FyZC1idXR0b24pKSBidXR0b24tZGF0YSAjWzAgIlwzMDFcMzAwIVwyMDci
IFtuaWwgZWxpc3AtLWV2YWwtbGFzdC1zZXhwXSAyXSBjYXRlZ29yeSB0IGZvbGxvdy1saW5rIHQg
YnV0dG9uIHQgaGVscC1lY2hvICJtb3VzZS0yLCBSRVQ6IERpc3BsYXkgdGhlIGZ1bmN0aW9uJ3Mg
Ym9keSIgbW91c2UtZmFjZSBoaWdobGlnaHQgZm9udC1sb2NrLWZhY2UgYnV0dG9uIGZhY2UgYnV0
dG9uKSldIDMgWyMoInNldHEiIDAgNCAoaGVscC1hcmdzIChzZXRxKSBjYXRlZ29yeSBoZWxwLWZ1
bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygiaWYiIDAgMiAoaGVscC1hcmdzIChpZikgY2F0
ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImlmIiAwIDIgKGhlbHAt
YXJncyAoaWYpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJp
ZiIgMCAyIChoZWxwLWFyZ3MgKGlmKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0
b24gKHQpKSkgIygibGV0IiAwIDMgKGhlbHAtYXJncyAobGV0KSBjYXRlZ29yeSBoZWxwLWZ1bmN0
aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygiaWYiIDAgMiAoaGVscC1hcmdzIChpZikgY2F0ZWdv
cnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImxldCIgMCAzIChoZWxwLWFy
Z3MgKGxldCkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoIndo
aWxlIiAwIDUgKGhlbHAtYXJncyAod2hpbGUpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9u
IGJ1dHRvbiAodCkpKSAjKCJsZXQiIDAgMyAoaGVscC1hcmdzIChsZXQpIGNhdGVnb3J5IGhlbHAt
ZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJmaWxlLXRydWVuYW1lIiAwIDEzIChoZWxw
LWFyZ3MgKGZpbGUtdHJ1ZW5hbWUpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRv
biAodCkpKSAjKCJmaWxlLW5hbWUtYXMtZGlyZWN0b3J5IiAwIDIyIChoZWxwLWFyZ3MgKGZpbGUt
bmFtZS1hcy1kaXJlY3RvcnkpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAo
dCkpKSAjKCJsZXQiIDAgMyAoaGVscC1hcmdzIChsZXQpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24t
YnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJpZiIgMCAyIChoZWxwLWFyZ3MgKGlmKSBjYXRlZ29yeSBo
ZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygib3IiIDAgMiAoaGVscC1hcmdzIChv
cikgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImxldCIgMCAz
IChoZWxwLWFyZ3MgKGxldCkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0
KSkpICMoImlmIiAwIDIgKGhlbHAtYXJncyAoaWYpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0
dG9uIGJ1dHRvbiAodCkpKV0gOCBbIygic2V0cSIgMCA0IChoZWxwLWFyZ3MgKHNldHEpIGNhdGVn
b3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJpZiIgMCAyIChoZWxwLWFy
Z3MgKGlmKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygiaWYi
IDAgMiAoaGVscC1hcmdzIChpZikgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9u
ICh0KSkpICMoImxldCIgMCAzIChoZWxwLWFyZ3MgKGxldCkgY2F0ZWdvcnkgaGVscC1mdW5jdGlv
bi1idXR0b24gYnV0dG9uICh0KSkpICMoImlmIiAwIDIgKGhlbHAtYXJncyAoaWYpIGNhdGVnb3J5
IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJsZXQiIDAgMyAoaGVscC1hcmdz
IChsZXQpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJ3aGls
ZSIgMCA1IChoZWxwLWFyZ3MgKHdoaWxlKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBi
dXR0b24gKHQpKSkgIygibGV0IiAwIDMgKGhlbHAtYXJncyAobGV0KSBjYXRlZ29yeSBoZWxwLWZ1
bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygiZmlsZS10cnVlbmFtZSIgMCAxMyAoaGVscC1h
cmdzIChmaWxlLXRydWVuYW1lKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24g
KHQpKSkgIygiZmlsZS1uYW1lLWFzLWRpcmVjdG9yeSIgMCAyMiAoaGVscC1hcmdzIChmaWxlLW5h
bWUtYXMtZGlyZWN0b3J5KSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQp
KSkgIygibGV0IiAwIDMgKGhlbHAtYXJncyAobGV0KSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1
dHRvbiBidXR0b24gKHQpKSkgIygiaWYiIDAgMiAoaGVscC1hcmdzIChpZikgY2F0ZWdvcnkgaGVs
cC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoIm9yIiAwIDIgKGhlbHAtYXJncyAob3Ip
IGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJsZXQiIDAgMyAo
aGVscC1hcmdzIChsZXQpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkp
KSAjKCJpZiIgMCAyIChoZWxwLWFyZ3MgKGlmKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRv
biBidXR0b24gKHQpKSkgIygibGV0IiAwIDMgKGhlbHAtYXJncyAobGV0KSBjYXRlZ29yeSBoZWxw
LWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSldIDcgWyMoImZpbGUtdHJ1ZW5hbWUiIDAgMTMg
KGhlbHAtYXJncyAoZmlsZS10cnVlbmFtZSkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24g
YnV0dG9uICh0KSkpICMoIiM8bGFtYmRhIDM3Rj4iIDkgMTIgKGFjdGlvbiBoZWxwLWZucy0tZGlz
cGxheS1mdW5jdGlvbiBrZXltYXAgKGtleW1hcCAodG91Y2hzY3JlZW4tZG93biAuIHB1c2gtYnV0
dG9uKSAoaGVhZGVyLWxpbmUga2V5bWFwICh0b3VjaHNjcmVlbi1kb3duIC4gcHVzaC1idXR0b24p
IChtb3VzZS0yIC4gcHVzaC1idXR0b24pKSAobW9kZS1saW5lIGtleW1hcCAodG91Y2hzY3JlZW4t
ZG93biAuIHB1c2gtYnV0dG9uKSAobW91c2UtMiAuIHB1c2gtYnV0dG9uKSkgKGZvbGxvdy1saW5r
IC4gbW91c2UtZmFjZSkgKG1vdXNlLTIgLiBwdXNoLWJ1dHRvbikgKDEzIC4gcHVzaC1idXR0b24p
IGtleW1hcCAoYmFja3RhYiAuIGJhY2t3YXJkLWJ1dHRvbikgKDI3IGtleW1hcCAoOSAuIGJhY2t3
YXJkLWJ1dHRvbikpICg5IC4gZm9yd2FyZC1idXR0b24pKSBidXR0b24tZGF0YSAobGFtYmRhIG5p
bCAoZmlsZS10cnVlbmFtZSAifi9Xb3JrL3NvbWUvbG9uZy9wYXRoL3RvL3BhcnNlL3RoYXQvaXMv
dmVyeS9kZWVwL2RlZXAvZGVlcC9zdXBlci9kdXBlci9kZWVwL2RlZXAuZWwiKSkgY2F0ZWdvcnkg
dCBmb2xsb3ctbGluayB0IGJ1dHRvbiB0IGhlbHAtZWNobyAibW91c2UtMiwgUkVUOiBEaXNwbGF5
IHRoZSBmdW5jdGlvbidzIGJvZHkiIG1vdXNlLWZhY2UgaGlnaGxpZ2h0IGZvbnQtbG9jay1mYWNl
IGJ1dHRvbiBmYWNlIGJ1dHRvbikpICMoImJlbmNobWFyay1jYWxsIiAwIDE0IChoZWxwLWFyZ3Mg
KGJlbmNobWFyay1jYWxsKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQp
KSkgIygiZXZhbCIgMCA0IChoZWxwLWFyZ3MgKGV2YWwpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24t
YnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJlbGlzcC0tZXZhbC1sYXN0LXNleHAiIDAgMjEgKGhlbHAt
YXJncyAoZWxpc3AtLWV2YWwtbGFzdC1zZXhwKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRv
biBidXR0b24gKHQpKSkgIygiIzxjb21waWxlZC1mdW5jdGlvbiBDQjg+IiAyMCAyMyAoYWN0aW9u
IGhlbHAtZm5zLS1kaXNwbGF5LWZ1bmN0aW9uIGtleW1hcCAoa2V5bWFwICh0b3VjaHNjcmVlbi1k
b3duIC4gcHVzaC1idXR0b24pIChoZWFkZXItbGluZSBrZXltYXAgKHRvdWNoc2NyZWVuLWRvd24g
LiBwdXNoLWJ1dHRvbikgKG1vdXNlLTIgLiBwdXNoLWJ1dHRvbikpIChtb2RlLWxpbmUga2V5bWFw
ICh0b3VjaHNjcmVlbi1kb3duIC4gcHVzaC1idXR0b24pIChtb3VzZS0yIC4gcHVzaC1idXR0b24p
KSAoZm9sbG93LWxpbmsgLiBtb3VzZS1mYWNlKSAobW91c2UtMiAuIHB1c2gtYnV0dG9uKSAoMTMg
LiBwdXNoLWJ1dHRvbikga2V5bWFwIChiYWNrdGFiIC4gYmFja3dhcmQtYnV0dG9uKSAoMjcga2V5
bWFwICg5IC4gYmFja3dhcmQtYnV0dG9uKSkgKDkgLiBmb3J3YXJkLWJ1dHRvbikpIGJ1dHRvbi1k
YXRhICNbMCAiXDMwMVwzMDAhXDIwNyIgW25pbCBlbGlzcC0tZXZhbC1sYXN0LXNleHBdIDJdIGNh
dGVnb3J5IHQgZm9sbG93LWxpbmsgdCBidXR0b24gdCBoZWxwLWVjaG8gIm1vdXNlLTIsIFJFVDog
RGlzcGxheSB0aGUgZnVuY3Rpb24ncyBib2R5IiBtb3VzZS1mYWNlIGhpZ2hsaWdodCBmb250LWxv
Y2stZmFjZSBidXR0b24gZmFjZSBidXR0b24pKSAjKCIjPHN1YnItbmF0aXZlLWVsaXNwIGV2YWwt
bGFzdC1zZXhwPiIgMjAgMzQgKGJ1dHRvbiAodCkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0
b24gaGVscC1hcmdzIChldmFsLWxhc3Qtc2V4cCkpKSAjKCIjPGNvbXBpbGVkLWZ1bmN0aW9uIEQ4
NT4iIDIwIDIzIChhY3Rpb24gaGVscC1mbnMtLWRpc3BsYXktZnVuY3Rpb24ga2V5bWFwIChrZXlt
YXAgKHRvdWNoc2NyZWVuLWRvd24gLiBwdXNoLWJ1dHRvbikgKGhlYWRlci1saW5lIGtleW1hcCAo
dG91Y2hzY3JlZW4tZG93biAuIHB1c2gtYnV0dG9uKSAobW91c2UtMiAuIHB1c2gtYnV0dG9uKSkg
KG1vZGUtbGluZSBrZXltYXAgKHRvdWNoc2NyZWVuLWRvd24gLiBwdXNoLWJ1dHRvbikgKG1vdXNl
LTIgLiBwdXNoLWJ1dHRvbikpIChmb2xsb3ctbGluayAuIG1vdXNlLWZhY2UpIChtb3VzZS0yIC4g
cHVzaC1idXR0b24pICgxMyAuIHB1c2gtYnV0dG9uKSBrZXltYXAgKGJhY2t0YWIgLiBiYWNrd2Fy
ZC1idXR0b24pICgyNyBrZXltYXAgKDkgLiBiYWNrd2FyZC1idXR0b24pKSAoOSAuIGZvcndhcmQt
YnV0dG9uKSkgYnV0dG9uLWRhdGEgI1soJnJlc3QgX2l0KSAiCAkhXDIxMRJcMjA3IiBbYWQtLWFk
ZG9pdC1mdW5jdGlvbiBldmFsLWxhc3Qtc2V4cC1hcmctaW50ZXJuYWwgYWQtcmV0dXJuLXZhbHVl
XSAyXSBjYXRlZ29yeSB0IGZvbGxvdy1saW5rIHQgYnV0dG9uIHQgaGVscC1lY2hvICJtb3VzZS0y
LCBSRVQ6IERpc3BsYXkgdGhlIGZ1bmN0aW9uJ3MgYm9keSIgbW91c2UtZmFjZSBoaWdobGlnaHQg
Zm9udC1sb2NrLWZhY2UgYnV0dG9uIGZhY2UgYnV0dG9uKSkgIygiZXZhbC1zZXhwLWZ1LWZsYXNo
LWRvaXQtc2ltcGxlIiAwIDMwIChoZWxwLWFyZ3MgKGV2YWwtc2V4cC1mdS1mbGFzaC1kb2l0LXNp
bXBsZSkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImV2YWwt
c2V4cC1mdS1mbGFzaC1kb2l0IiAwIDIzIChoZWxwLWFyZ3MgKGV2YWwtc2V4cC1mdS1mbGFzaC1k
b2l0KSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygiZXNmLWZs
YXNoLWRvaXQiIDAgMTQgKGhlbHAtYXJncyAoZXNmLWZsYXNoLWRvaXQpIGNhdGVnb3J5IGhlbHAt
ZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJhZC1BZHZpY2UtZXZhbC1sYXN0LXNleHAi
IDAgMjQgKGhlbHAtYXJncyAoYWQtQWR2aWNlLWV2YWwtbGFzdC1zZXhwKSBjYXRlZ29yeSBoZWxw
LWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygiYXBwbHkiIDAgNSAoaGVscC1hcmdzIChh
cHBseSkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImV2YWwt
bGFzdC1zZXhwIiAwIDE0IChoZWxwLWFyZ3MgKGV2YWwtbGFzdC1zZXhwKSBjYXRlZ29yeSBoZWxw
LWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygiIzxjb21waWxlZC1mdW5jdGlvbiA1MDk+
IiAyMCAyMyAoYWN0aW9uIGhlbHAtZm5zLS1kaXNwbGF5LWZ1bmN0aW9uIGtleW1hcCAoa2V5bWFw
ICh0b3VjaHNjcmVlbi1kb3duIC4gcHVzaC1idXR0b24pIChoZWFkZXItbGluZSBrZXltYXAgKHRv
dWNoc2NyZWVuLWRvd24gLiBwdXNoLWJ1dHRvbikgKG1vdXNlLTIgLiBwdXNoLWJ1dHRvbikpICht
b2RlLWxpbmUga2V5bWFwICh0b3VjaHNjcmVlbi1kb3duIC4gcHVzaC1idXR0b24pIChtb3VzZS0y
IC4gcHVzaC1idXR0b24pKSAoZm9sbG93LWxpbmsgLiBtb3VzZS1mYWNlKSAobW91c2UtMiAuIHB1
c2gtYnV0dG9uKSAoMTMgLiBwdXNoLWJ1dHRvbikga2V5bWFwIChiYWNrdGFiIC4gYmFja3dhcmQt
YnV0dG9uKSAoMjcga2V5bWFwICg5IC4gYmFja3dhcmQtYnV0dG9uKSkgKDkgLiBmb3J3YXJkLWJ1
dHRvbikpIGJ1dHRvbi1kYXRhICNbMjU3ICJcMzAyASFcMjExEFwzMDMJIVwyMDMOAFwzMDQgXDIx
MFwzMDUBYFwiXDIwNyIgW2Vyb3MtLWxhc3QtcmVzdWx0IGVyb3MtLWluc3BlY3QtYnVmZmVyLW5h
bWUgZXZhbC1sYXN0LXNleHAgZ2V0LWJ1ZmZlciBlcm9zLWluc3BlY3QtbGFzdC1yZXN1bHQgZXJv
cy0tZXZhbC1vdmVybGF5XSA1ICgiL2hvbWUveWFudGFyOTIvLmVtYWNzLmQvc3RyYWlnaHQvYnVp
bGQvZXJvcy9lcm9zLmVsYyIgLiA2NDMxKSAiUCJdIGNhdGVnb3J5IHQgZm9sbG93LWxpbmsgdCBi
dXR0b24gdCBoZWxwLWVjaG8gIm1vdXNlLTIsIFJFVDogRGlzcGxheSB0aGUgZnVuY3Rpb24ncyBi
b2R5IiBtb3VzZS1mYWNlIGhpZ2hsaWdodCBmb250LWxvY2stZmFjZSBidXR0b24gZmFjZSBidXR0
b24pKSAjKCJmdW5jYWxsLWludGVyYWN0aXZlbHkiIDAgMjEgKGhlbHAtYXJncyAoZnVuY2FsbC1p
bnRlcmFjdGl2ZWx5KSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSld
IDcgWyMoInN1YnN0cmluZyIgMCA5IChoZWxwLWFyZ3MgKHN1YnN0cmluZykgY2F0ZWdvcnkgaGVs
cC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoInN0cmluZz0iIDAgNyAoaGVscC1hcmdz
IChzdHJpbmc9KSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygi
YW5kIiAwIDMgKGhlbHAtYXJncyAoYW5kKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBi
dXR0b24gKHQpKSkgIygiY29uZCIgMCA0IChoZWxwLWFyZ3MgKGNvbmQpIGNhdGVnb3J5IGhlbHAt
ZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJmaWxlLXRydWVuYW1lIiAwIDEzIChoZWxw
LWFyZ3MgKGZpbGUtdHJ1ZW5hbWUpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRv
biAodCkpKSAjKCJmaWxlLW5hbWUtYXMtZGlyZWN0b3J5IiAwIDIyIChoZWxwLWFyZ3MgKGZpbGUt
bmFtZS1hcy1kaXJlY3RvcnkpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAo
dCkpKSAjKCJsZXQiIDAgMyAoaGVscC1hcmdzIChsZXQpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24t
YnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJpZiIgMCAyIChoZWxwLWFyZ3MgKGlmKSBjYXRlZ29yeSBo
ZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygib3IiIDAgMiAoaGVscC1hcmdzIChv
cikgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImxldCIgMCAz
IChoZWxwLWFyZ3MgKGxldCkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0
KSkpICMoImlmIiAwIDIgKGhlbHAtYXJncyAoaWYpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0
dG9uIGJ1dHRvbiAodCkpKSAjKCJsZXQiIDAgMyAoaGVscC1hcmdzIChsZXQpIGNhdGVnb3J5IGhl
bHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJ3aGlsZSIgMCA1IChoZWxwLWFyZ3Mg
KHdoaWxlKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygibGV0
IiAwIDMgKGhlbHAtYXJncyAobGV0KSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0
b24gKHQpKSkgIygiZmlsZS10cnVlbmFtZSIgMCAxMyAoaGVscC1hcmdzIChmaWxlLXRydWVuYW1l
KSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygiZmlsZS1uYW1l
LWFzLWRpcmVjdG9yeSIgMCAyMiAoaGVscC1hcmdzIChmaWxlLW5hbWUtYXMtZGlyZWN0b3J5KSBj
YXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSldIDMgWyMoImNhciIgMCAz
IChoZWxwLWFyZ3MgKGNhcikgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0
KSkpICMoImNvbnMiIDAgNCAoaGVscC1hcmdzIChjb25zKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9u
LWJ1dHRvbiBidXR0b24gKHQpKSkgIygic2V0Y2FyIiAwIDYgKGhlbHAtYXJncyAoc2V0Y2FyKSBj
YXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygibGV0IiAwIDMgKGhl
bHAtYXJncyAobGV0KSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkg
IygiaWYiIDAgMiAoaGVscC1hcmdzIChpZikgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24g
YnV0dG9uICh0KSkpICMoIm9yIiAwIDIgKGhlbHAtYXJncyAob3IpIGNhdGVnb3J5IGhlbHAtZnVu
Y3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJsZXQiIDAgMyAoaGVscC1hcmdzIChsZXQpIGNh
dGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJpZiIgMCAyIChoZWxw
LWFyZ3MgKGlmKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygi
bGV0IiAwIDMgKGhlbHAtYXJncyAobGV0KSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBi
dXR0b24gKHQpKSkgIygid2hpbGUiIDAgNSAoaGVscC1hcmdzICh3aGlsZSkgY2F0ZWdvcnkgaGVs
cC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImxldCIgMCAzIChoZWxwLWFyZ3MgKGxl
dCkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImZpbGUtdHJ1
ZW5hbWUiIDAgMTMgKGhlbHAtYXJncyAoZmlsZS10cnVlbmFtZSkgY2F0ZWdvcnkgaGVscC1mdW5j
dGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImZpbGUtbmFtZS1hcy1kaXJlY3RvcnkiIDAgMjIg
KGhlbHAtYXJncyAoZmlsZS1uYW1lLWFzLWRpcmVjdG9yeSkgY2F0ZWdvcnkgaGVscC1mdW5jdGlv
bi1idXR0b24gYnV0dG9uICh0KSkpICMoImxldCIgMCAzIChoZWxwLWFyZ3MgKGxldCkgY2F0ZWdv
cnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImlmIiAwIDIgKGhlbHAtYXJn
cyAoaWYpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJvciIg
MCAyIChoZWxwLWFyZ3MgKG9yKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24g
KHQpKSldIDMgWyMoInRyYW1wLXJ1bi1yZWFsLWhhbmRsZXIiIDAgMjIgKGhlbHAtYXJncyAodHJh
bXAtcnVuLXJlYWwtaGFuZGxlcikgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9u
ICh0KSkpICMoInRyYW1wLWNvbXBsZXRpb24tZmlsZS1uYW1lLWhhbmRsZXIiIDAgMzQgKGhlbHAt
YXJncyAodHJhbXAtY29tcGxldGlvbi1maWxlLW5hbWUtaGFuZGxlcikgY2F0ZWdvcnkgaGVscC1m
dW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImZpbGUtbmFtZS1ub25kaXJlY3RvcnkiIDAg
MjIgKGhlbHAtYXJncyAoZmlsZS1uYW1lLW5vbmRpcmVjdG9yeSkgY2F0ZWdvcnkgaGVscC1mdW5j
dGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImVxdWFsIiAwIDUgKGhlbHAtYXJncyAoZXF1YWwp
IGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJpZiIgMCAyICho
ZWxwLWFyZ3MgKGlmKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkg
IygibGV0IiAwIDMgKGhlbHAtYXJncyAobGV0KSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRv
biBidXR0b24gKHQpKSkgIygiaWYiIDAgMiAoaGVscC1hcmdzIChpZikgY2F0ZWdvcnkgaGVscC1m
dW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImxldCIgMCAzIChoZWxwLWFyZ3MgKGxldCkg
Y2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoIndoaWxlIiAwIDUg
KGhlbHAtYXJncyAod2hpbGUpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAo
dCkpKSAjKCJsZXQiIDAgMyAoaGVscC1hcmdzIChsZXQpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24t
YnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJmaWxlLXRydWVuYW1lIiAwIDEzIChoZWxwLWFyZ3MgKGZp
bGUtdHJ1ZW5hbWUpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAj
KCJmaWxlLW5hbWUtYXMtZGlyZWN0b3J5IiAwIDIyIChoZWxwLWFyZ3MgKGZpbGUtbmFtZS1hcy1k
aXJlY3RvcnkpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJs
ZXQiIDAgMyAoaGVscC1hcmdzIChsZXQpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1
dHRvbiAodCkpKSAjKCJpZiIgMCAyIChoZWxwLWFyZ3MgKGlmKSBjYXRlZ29yeSBoZWxwLWZ1bmN0
aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygib3IiIDAgMiAoaGVscC1hcmdzIChvcikgY2F0ZWdv
cnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImxldCIgMCAzIChoZWxwLWFy
Z3MgKGxldCkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpXSA3IFsj
KCJjb25kIiAwIDQgKGhlbHAtYXJncyAoY29uZCkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0
b24gYnV0dG9uICh0KSkpICMoImZpbGUtdHJ1ZW5hbWUiIDAgMTMgKGhlbHAtYXJncyAoZmlsZS10
cnVlbmFtZSkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImZp
bGUtbmFtZS1hcy1kaXJlY3RvcnkiIDAgMjIgKGhlbHAtYXJncyAoZmlsZS1uYW1lLWFzLWRpcmVj
dG9yeSkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImxldCIg
MCAzIChoZWxwLWFyZ3MgKGxldCkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9u
ICh0KSkpICMoImlmIiAwIDIgKGhlbHAtYXJncyAoaWYpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24t
YnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJvciIgMCAyIChoZWxwLWFyZ3MgKG9yKSBjYXRlZ29yeSBo
ZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygibGV0IiAwIDMgKGhlbHAtYXJncyAo
bGV0KSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygiaWYiIDAg
MiAoaGVscC1hcmdzIChpZikgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0
KSkpICMoImxldCIgMCAzIChoZWxwLWFyZ3MgKGxldCkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1i
dXR0b24gYnV0dG9uICh0KSkpICMoIndoaWxlIiAwIDUgKGhlbHAtYXJncyAod2hpbGUpIGNhdGVn
b3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJsZXQiIDAgMyAoaGVscC1h
cmdzIChsZXQpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJm
aWxlLXRydWVuYW1lIiAwIDEzIChoZWxwLWFyZ3MgKGZpbGUtdHJ1ZW5hbWUpIGNhdGVnb3J5IGhl
bHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJmaWxlLW5hbWUtYXMtZGlyZWN0b3J5
IiAwIDIyIChoZWxwLWFyZ3MgKGZpbGUtbmFtZS1hcy1kaXJlY3RvcnkpIGNhdGVnb3J5IGhlbHAt
ZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJsZXQiIDAgMyAoaGVscC1hcmdzIChsZXQp
IGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJpZiIgMCAyICho
ZWxwLWFyZ3MgKGlmKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkg
Iygib3IiIDAgMiAoaGVscC1hcmdzIChvcikgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24g
YnV0dG9uICh0KSkpXSA5IFsjKCIxLSIgMCAyIChoZWxwLWFyZ3MgKDEtKSBjYXRlZ29yeSBoZWxw
LWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygic2V0Y2FyIiAwIDYgKGhlbHAtYXJncyAo
c2V0Y2FyKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygid2hp
bGUiIDAgNSAoaGVscC1hcmdzICh3aGlsZSkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24g
YnV0dG9uICh0KSkpICMoImxldCIgMCAzIChoZWxwLWFyZ3MgKGxldCkgY2F0ZWdvcnkgaGVscC1m
dW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImZpbGUtdHJ1ZW5hbWUiIDAgMTMgKGhlbHAt
YXJncyAoZmlsZS10cnVlbmFtZSkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9u
ICh0KSkpICMoImZpbGUtbmFtZS1hcy1kaXJlY3RvcnkiIDAgMjIgKGhlbHAtYXJncyAoZmlsZS1u
YW1lLWFzLWRpcmVjdG9yeSkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0
KSkpICMoImxldCIgMCAzIChoZWxwLWFyZ3MgKGxldCkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1i
dXR0b24gYnV0dG9uICh0KSkpICMoImlmIiAwIDIgKGhlbHAtYXJncyAoaWYpIGNhdGVnb3J5IGhl
bHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJvciIgMCAyIChoZWxwLWFyZ3MgKG9y
KSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygibGV0IiAwIDMg
KGhlbHAtYXJncyAobGV0KSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQp
KSkgIygiaWYiIDAgMiAoaGVscC1hcmdzIChpZikgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0
b24gYnV0dG9uICh0KSkpICMoImxldCIgMCAzIChoZWxwLWFyZ3MgKGxldCkgY2F0ZWdvcnkgaGVs
cC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoIndoaWxlIiAwIDUgKGhlbHAtYXJncyAo
d2hpbGUpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJsZXQi
IDAgMyAoaGVscC1hcmdzIChsZXQpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRv
biAodCkpKSAjKCJmaWxlLXRydWVuYW1lIiAwIDEzIChoZWxwLWFyZ3MgKGZpbGUtdHJ1ZW5hbWUp
IGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJmaWxlLW5hbWUt
YXMtZGlyZWN0b3J5IiAwIDIyIChoZWxwLWFyZ3MgKGZpbGUtbmFtZS1hcy1kaXJlY3RvcnkpIGNh
dGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKV0gMyBbIygiY29weS1zZXF1
ZW5jZSIgMCAxMyAoaGVscC1hcmdzIChjb3B5LXNlcXVlbmNlKSBjYXRlZ29yeSBoZWxwLWZ1bmN0
aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygibGV0IiAwIDMgKGhlbHAtYXJncyAobGV0KSBjYXRl
Z29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygiaWYiIDAgMiAoaGVscC1h
cmdzIChpZikgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImxl
dCIgMCAzIChoZWxwLWFyZ3MgKGxldCkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0
dG9uICh0KSkpICMoImZpbGUtdHJ1ZW5hbWUiIDAgMTMgKGhlbHAtYXJncyAoZmlsZS10cnVlbmFt
ZSkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoIiM8bGFtYmRh
IDM3Rj4iIDkgMTIgKGFjdGlvbiBoZWxwLWZucy0tZGlzcGxheS1mdW5jdGlvbiBrZXltYXAgKGtl
eW1hcCAodG91Y2hzY3JlZW4tZG93biAuIHB1c2gtYnV0dG9uKSAoaGVhZGVyLWxpbmUga2V5bWFw
ICh0b3VjaHNjcmVlbi1kb3duIC4gcHVzaC1idXR0b24pIChtb3VzZS0yIC4gcHVzaC1idXR0b24p
KSAobW9kZS1saW5lIGtleW1hcCAodG91Y2hzY3JlZW4tZG93biAuIHB1c2gtYnV0dG9uKSAobW91
c2UtMiAuIHB1c2gtYnV0dG9uKSkgKGZvbGxvdy1saW5rIC4gbW91c2UtZmFjZSkgKG1vdXNlLTIg
LiBwdXNoLWJ1dHRvbikgKDEzIC4gcHVzaC1idXR0b24pIGtleW1hcCAoYmFja3RhYiAuIGJhY2t3
YXJkLWJ1dHRvbikgKDI3IGtleW1hcCAoOSAuIGJhY2t3YXJkLWJ1dHRvbikpICg5IC4gZm9yd2Fy
ZC1idXR0b24pKSBidXR0b24tZGF0YSAobGFtYmRhIG5pbCAoZmlsZS10cnVlbmFtZSAifi9Xb3Jr
L3NvbWUvbG9uZy9wYXRoL3RvL3BhcnNlL3RoYXQvaXMvdmVyeS9kZWVwL2RlZXAvZGVlcC9zdXBl
ci9kdXBlci9kZWVwL2RlZXAuZWwiKSkgY2F0ZWdvcnkgdCBmb2xsb3ctbGluayB0IGJ1dHRvbiB0
IGhlbHAtZWNobyAibW91c2UtMiwgUkVUOiBEaXNwbGF5IHRoZSBmdW5jdGlvbidzIGJvZHkiIG1v
dXNlLWZhY2UgaGlnaGxpZ2h0IGZvbnQtbG9jay1mYWNlIGJ1dHRvbiBmYWNlIGJ1dHRvbikpICMo
ImJlbmNobWFyay1jYWxsIiAwIDE0IChoZWxwLWFyZ3MgKGJlbmNobWFyay1jYWxsKSBjYXRlZ29y
eSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygiZXZhbCIgMCA0IChoZWxwLWFy
Z3MgKGV2YWwpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJl
bGlzcC0tZXZhbC1sYXN0LXNleHAiIDAgMjEgKGhlbHAtYXJncyAoZWxpc3AtLWV2YWwtbGFzdC1z
ZXhwKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygiIzxjb21w
aWxlZC1mdW5jdGlvbiBDQjg+IiAyMCAyMyAoYWN0aW9uIGhlbHAtZm5zLS1kaXNwbGF5LWZ1bmN0
aW9uIGtleW1hcCAoa2V5bWFwICh0b3VjaHNjcmVlbi1kb3duIC4gcHVzaC1idXR0b24pIChoZWFk
ZXItbGluZSBrZXltYXAgKHRvdWNoc2NyZWVuLWRvd24gLiBwdXNoLWJ1dHRvbikgKG1vdXNlLTIg
LiBwdXNoLWJ1dHRvbikpIChtb2RlLWxpbmUga2V5bWFwICh0b3VjaHNjcmVlbi1kb3duIC4gcHVz
aC1idXR0b24pIChtb3VzZS0yIC4gcHVzaC1idXR0b24pKSAoZm9sbG93LWxpbmsgLiBtb3VzZS1m
YWNlKSAobW91c2UtMiAuIHB1c2gtYnV0dG9uKSAoMTMgLiBwdXNoLWJ1dHRvbikga2V5bWFwIChi
YWNrdGFiIC4gYmFja3dhcmQtYnV0dG9uKSAoMjcga2V5bWFwICg5IC4gYmFja3dhcmQtYnV0dG9u
KSkgKDkgLiBmb3J3YXJkLWJ1dHRvbikpIGJ1dHRvbi1kYXRhICNbMCAiXDMwMVwzMDAhXDIwNyIg
W25pbCBlbGlzcC0tZXZhbC1sYXN0LXNleHBdIDJdIGNhdGVnb3J5IHQgZm9sbG93LWxpbmsgdCBi
dXR0b24gdCBoZWxwLWVjaG8gIm1vdXNlLTIsIFJFVDogRGlzcGxheSB0aGUgZnVuY3Rpb24ncyBi
b2R5IiBtb3VzZS1mYWNlIGhpZ2hsaWdodCBmb250LWxvY2stZmFjZSBidXR0b24gZmFjZSBidXR0
b24pKSAjKCIjPHN1YnItbmF0aXZlLWVsaXNwIGV2YWwtbGFzdC1zZXhwPiIgMjAgMzQgKGJ1dHRv
biAodCkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gaGVscC1hcmdzIChldmFsLWxhc3Qt
c2V4cCkpKSAjKCIjPGNvbXBpbGVkLWZ1bmN0aW9uIEQ4NT4iIDIwIDIzIChhY3Rpb24gaGVscC1m
bnMtLWRpc3BsYXktZnVuY3Rpb24ga2V5bWFwIChrZXltYXAgKHRvdWNoc2NyZWVuLWRvd24gLiBw
dXNoLWJ1dHRvbikgKGhlYWRlci1saW5lIGtleW1hcCAodG91Y2hzY3JlZW4tZG93biAuIHB1c2gt
YnV0dG9uKSAobW91c2UtMiAuIHB1c2gtYnV0dG9uKSkgKG1vZGUtbGluZSBrZXltYXAgKHRvdWNo
c2NyZWVuLWRvd24gLiBwdXNoLWJ1dHRvbikgKG1vdXNlLTIgLiBwdXNoLWJ1dHRvbikpIChmb2xs
b3ctbGluayAuIG1vdXNlLWZhY2UpIChtb3VzZS0yIC4gcHVzaC1idXR0b24pICgxMyAuIHB1c2gt
YnV0dG9uKSBrZXltYXAgKGJhY2t0YWIgLiBiYWNrd2FyZC1idXR0b24pICgyNyBrZXltYXAgKDkg
LiBiYWNrd2FyZC1idXR0b24pKSAoOSAuIGZvcndhcmQtYnV0dG9uKSkgYnV0dG9uLWRhdGEgI1so
JnJlc3QgX2l0KSAiCAkhXDIxMRJcMjA3IiBbYWQtLWFkZG9pdC1mdW5jdGlvbiBldmFsLWxhc3Qt
c2V4cC1hcmctaW50ZXJuYWwgYWQtcmV0dXJuLXZhbHVlXSAyXSBjYXRlZ29yeSB0IGZvbGxvdy1s
aW5rIHQgYnV0dG9uIHQgaGVscC1lY2hvICJtb3VzZS0yLCBSRVQ6IERpc3BsYXkgdGhlIGZ1bmN0
aW9uJ3MgYm9keSIgbW91c2UtZmFjZSBoaWdobGlnaHQgZm9udC1sb2NrLWZhY2UgYnV0dG9uIGZh
Y2UgYnV0dG9uKSkgIygiZXZhbC1zZXhwLWZ1LWZsYXNoLWRvaXQtc2ltcGxlIiAwIDMwIChoZWxw
LWFyZ3MgKGV2YWwtc2V4cC1mdS1mbGFzaC1kb2l0LXNpbXBsZSkgY2F0ZWdvcnkgaGVscC1mdW5j
dGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImV2YWwtc2V4cC1mdS1mbGFzaC1kb2l0IiAwIDIz
IChoZWxwLWFyZ3MgKGV2YWwtc2V4cC1mdS1mbGFzaC1kb2l0KSBjYXRlZ29yeSBoZWxwLWZ1bmN0
aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygiZXNmLWZsYXNoLWRvaXQiIDAgMTQgKGhlbHAtYXJn
cyAoZXNmLWZsYXNoLWRvaXQpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAo
dCkpKSAjKCJhZC1BZHZpY2UtZXZhbC1sYXN0LXNleHAiIDAgMjQgKGhlbHAtYXJncyAoYWQtQWR2
aWNlLWV2YWwtbGFzdC1zZXhwKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24g
KHQpKSldIDQgWyMoInNldGNhciIgMCA2IChoZWxwLWFyZ3MgKHNldGNhcikgY2F0ZWdvcnkgaGVs
cC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImxldCIgMCAzIChoZWxwLWFyZ3MgKGxl
dCkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImlmIiAwIDIg
KGhlbHAtYXJncyAoaWYpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkp
KSAjKCJvciIgMCAyIChoZWxwLWFyZ3MgKG9yKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRv
biBidXR0b24gKHQpKSkgIygibGV0IiAwIDMgKGhlbHAtYXJncyAobGV0KSBjYXRlZ29yeSBoZWxw
LWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygiaWYiIDAgMiAoaGVscC1hcmdzIChpZikg
Y2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImxldCIgMCAzICho
ZWxwLWFyZ3MgKGxldCkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkp
ICMoIndoaWxlIiAwIDUgKGhlbHAtYXJncyAod2hpbGUpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24t
YnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJsZXQiIDAgMyAoaGVscC1hcmdzIChsZXQpIGNhdGVnb3J5
IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJmaWxlLXRydWVuYW1lIiAwIDEz
IChoZWxwLWFyZ3MgKGZpbGUtdHJ1ZW5hbWUpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9u
IGJ1dHRvbiAodCkpKSAjKCIjPGxhbWJkYSAzN0Y+IiA5IDEyIChhY3Rpb24gaGVscC1mbnMtLWRp
c3BsYXktZnVuY3Rpb24ga2V5bWFwIChrZXltYXAgKHRvdWNoc2NyZWVuLWRvd24gLiBwdXNoLWJ1
dHRvbikgKGhlYWRlci1saW5lIGtleW1hcCAodG91Y2hzY3JlZW4tZG93biAuIHB1c2gtYnV0dG9u
KSAobW91c2UtMiAuIHB1c2gtYnV0dG9uKSkgKG1vZGUtbGluZSBrZXltYXAgKHRvdWNoc2NyZWVu
LWRvd24gLiBwdXNoLWJ1dHRvbikgKG1vdXNlLTIgLiBwdXNoLWJ1dHRvbikpIChmb2xsb3ctbGlu
ayAuIG1vdXNlLWZhY2UpIChtb3VzZS0yIC4gcHVzaC1idXR0b24pICgxMyAuIHB1c2gtYnV0dG9u
KSBrZXltYXAgKGJhY2t0YWIgLiBiYWNrd2FyZC1idXR0b24pICgyNyBrZXltYXAgKDkgLiBiYWNr
d2FyZC1idXR0b24pKSAoOSAuIGZvcndhcmQtYnV0dG9uKSkgYnV0dG9uLWRhdGEgKGxhbWJkYSBu
aWwgKGZpbGUtdHJ1ZW5hbWUgIn4vV29yay9zb21lL2xvbmcvcGF0aC90by9wYXJzZS90aGF0L2lz
L3ZlcnkvZGVlcC9kZWVwL2RlZXAvc3VwZXIvZHVwZXIvZGVlcC9kZWVwLmVsIikpIGNhdGVnb3J5
IHQgZm9sbG93LWxpbmsgdCBidXR0b24gdCBoZWxwLWVjaG8gIm1vdXNlLTIsIFJFVDogRGlzcGxh
eSB0aGUgZnVuY3Rpb24ncyBib2R5IiBtb3VzZS1mYWNlIGhpZ2hsaWdodCBmb250LWxvY2stZmFj
ZSBidXR0b24gZmFjZSBidXR0b24pKSAjKCJiZW5jaG1hcmstY2FsbCIgMCAxNCAoaGVscC1hcmdz
IChiZW5jaG1hcmstY2FsbCkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0
KSkpICMoImV2YWwiIDAgNCAoaGVscC1hcmdzIChldmFsKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9u
LWJ1dHRvbiBidXR0b24gKHQpKSkgIygiZWxpc3AtLWV2YWwtbGFzdC1zZXhwIiAwIDIxIChoZWxw
LWFyZ3MgKGVsaXNwLS1ldmFsLWxhc3Qtc2V4cCkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0
b24gYnV0dG9uICh0KSkpICMoIiM8Y29tcGlsZWQtZnVuY3Rpb24gQ0I4PiIgMjAgMjMgKGFjdGlv
biBoZWxwLWZucy0tZGlzcGxheS1mdW5jdGlvbiBrZXltYXAgKGtleW1hcCAodG91Y2hzY3JlZW4t
ZG93biAuIHB1c2gtYnV0dG9uKSAoaGVhZGVyLWxpbmUga2V5bWFwICh0b3VjaHNjcmVlbi1kb3du
IC4gcHVzaC1idXR0b24pIChtb3VzZS0yIC4gcHVzaC1idXR0b24pKSAobW9kZS1saW5lIGtleW1h
cCAodG91Y2hzY3JlZW4tZG93biAuIHB1c2gtYnV0dG9uKSAobW91c2UtMiAuIHB1c2gtYnV0dG9u
KSkgKGZvbGxvdy1saW5rIC4gbW91c2UtZmFjZSkgKG1vdXNlLTIgLiBwdXNoLWJ1dHRvbikgKDEz
IC4gcHVzaC1idXR0b24pIGtleW1hcCAoYmFja3RhYiAuIGJhY2t3YXJkLWJ1dHRvbikgKDI3IGtl
eW1hcCAoOSAuIGJhY2t3YXJkLWJ1dHRvbikpICg5IC4gZm9yd2FyZC1idXR0b24pKSBidXR0b24t
ZGF0YSAjWzAgIlwzMDFcMzAwIVwyMDciIFtuaWwgZWxpc3AtLWV2YWwtbGFzdC1zZXhwXSAyXSBj
YXRlZ29yeSB0IGZvbGxvdy1saW5rIHQgYnV0dG9uIHQgaGVscC1lY2hvICJtb3VzZS0yLCBSRVQ6
IERpc3BsYXkgdGhlIGZ1bmN0aW9uJ3MgYm9keSIgbW91c2UtZmFjZSBoaWdobGlnaHQgZm9udC1s
b2NrLWZhY2UgYnV0dG9uIGZhY2UgYnV0dG9uKSkgIygiIzxzdWJyLW5hdGl2ZS1lbGlzcCBldmFs
LWxhc3Qtc2V4cD4iIDIwIDM0IChidXR0b24gKHQpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0
dG9uIGhlbHAtYXJncyAoZXZhbC1sYXN0LXNleHApKSldIDMgWyMoImFzc29jIiAwIDUgKGhlbHAt
YXJncyAoYXNzb2MpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAj
KCJpZiIgMCAyIChoZWxwLWFyZ3MgKGlmKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBi
dXR0b24gKHQpKSkgIygib3IiIDAgMiAoaGVscC1hcmdzIChvcikgY2F0ZWdvcnkgaGVscC1mdW5j
dGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImxldCIgMCAzIChoZWxwLWFyZ3MgKGxldCkgY2F0
ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImlmIiAwIDIgKGhlbHAt
YXJncyAoaWYpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJs
ZXQiIDAgMyAoaGVscC1hcmdzIChsZXQpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1
dHRvbiAodCkpKSAjKCJ3aGlsZSIgMCA1IChoZWxwLWFyZ3MgKHdoaWxlKSBjYXRlZ29yeSBoZWxw
LWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygibGV0IiAwIDMgKGhlbHAtYXJncyAobGV0
KSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygiZmlsZS10cnVl
bmFtZSIgMCAxMyAoaGVscC1hcmdzIChmaWxlLXRydWVuYW1lKSBjYXRlZ29yeSBoZWxwLWZ1bmN0
aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygiZmlsZS1uYW1lLWFzLWRpcmVjdG9yeSIgMCAyMiAo
aGVscC1hcmdzIChmaWxlLW5hbWUtYXMtZGlyZWN0b3J5KSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9u
LWJ1dHRvbiBidXR0b24gKHQpKSkgIygibGV0IiAwIDMgKGhlbHAtYXJncyAobGV0KSBjYXRlZ29y
eSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygiaWYiIDAgMiAoaGVscC1hcmdz
IChpZikgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoIm9yIiAw
IDIgKGhlbHAtYXJncyAob3IpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAo
dCkpKSAjKCJsZXQiIDAgMyAoaGVscC1hcmdzIChsZXQpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24t
YnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJpZiIgMCAyIChoZWxwLWFyZ3MgKGlmKSBjYXRlZ29yeSBo
ZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygibGV0IiAwIDMgKGhlbHAtYXJncyAo
bGV0KSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSldIDcgWyMoImlm
IiAwIDIgKGhlbHAtYXJncyAoaWYpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRv
biAodCkpKSAjKCJ3aGlsZSIgMCA1IChoZWxwLWFyZ3MgKHdoaWxlKSBjYXRlZ29yeSBoZWxwLWZ1
bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygibGV0IiAwIDMgKGhlbHAtYXJncyAobGV0KSBj
YXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygiZmlsZS10cnVlbmFt
ZSIgMCAxMyAoaGVscC1hcmdzIChmaWxlLXRydWVuYW1lKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9u
LWJ1dHRvbiBidXR0b24gKHQpKSkgIygiZmlsZS1uYW1lLWFzLWRpcmVjdG9yeSIgMCAyMiAoaGVs
cC1hcmdzIChmaWxlLW5hbWUtYXMtZGlyZWN0b3J5KSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1
dHRvbiBidXR0b24gKHQpKSkgIygibGV0IiAwIDMgKGhlbHAtYXJncyAobGV0KSBjYXRlZ29yeSBo
ZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygiaWYiIDAgMiAoaGVscC1hcmdzIChp
ZikgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoIm9yIiAwIDIg
KGhlbHAtYXJncyAob3IpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkp
KSAjKCJsZXQiIDAgMyAoaGVscC1hcmdzIChsZXQpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0
dG9uIGJ1dHRvbiAodCkpKSAjKCJpZiIgMCAyIChoZWxwLWFyZ3MgKGlmKSBjYXRlZ29yeSBoZWxw
LWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygibGV0IiAwIDMgKGhlbHAtYXJncyAobGV0
KSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygid2hpbGUiIDAg
NSAoaGVscC1hcmdzICh3aGlsZSkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9u
ICh0KSkpICMoImxldCIgMCAzIChoZWxwLWFyZ3MgKGxldCkgY2F0ZWdvcnkgaGVscC1mdW5jdGlv
bi1idXR0b24gYnV0dG9uICh0KSkpICMoImZpbGUtdHJ1ZW5hbWUiIDAgMTMgKGhlbHAtYXJncyAo
ZmlsZS10cnVlbmFtZSkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkp
ICMoImZpbGUtbmFtZS1hcy1kaXJlY3RvcnkiIDAgMjIgKGhlbHAtYXJncyAoZmlsZS1uYW1lLWFz
LWRpcmVjdG9yeSkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMo
ImxldCIgMCAzIChoZWxwLWFyZ3MgKGxldCkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24g
YnV0dG9uICh0KSkpXSAzIFsjKCJ3aGlsZSIgMCA1IChoZWxwLWFyZ3MgKHdoaWxlKSBjYXRlZ29y
eSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygibGV0IiAwIDMgKGhlbHAtYXJn
cyAobGV0KSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygiZmls
ZS10cnVlbmFtZSIgMCAxMyAoaGVscC1hcmdzIChmaWxlLXRydWVuYW1lKSBjYXRlZ29yeSBoZWxw
LWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygiZmlsZS1uYW1lLWFzLWRpcmVjdG9yeSIg
MCAyMiAoaGVscC1hcmdzIChmaWxlLW5hbWUtYXMtZGlyZWN0b3J5KSBjYXRlZ29yeSBoZWxwLWZ1
bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygibGV0IiAwIDMgKGhlbHAtYXJncyAobGV0KSBj
YXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygiaWYiIDAgMiAoaGVs
cC1hcmdzIChpZikgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMo
Im9yIiAwIDIgKGhlbHAtYXJncyAob3IpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1
dHRvbiAodCkpKSAjKCJsZXQiIDAgMyAoaGVscC1hcmdzIChsZXQpIGNhdGVnb3J5IGhlbHAtZnVu
Y3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJpZiIgMCAyIChoZWxwLWFyZ3MgKGlmKSBjYXRl
Z29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygibGV0IiAwIDMgKGhlbHAt
YXJncyAobGV0KSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygi
d2hpbGUiIDAgNSAoaGVscC1hcmdzICh3aGlsZSkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0
b24gYnV0dG9uICh0KSkpICMoImxldCIgMCAzIChoZWxwLWFyZ3MgKGxldCkgY2F0ZWdvcnkgaGVs
cC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImZpbGUtdHJ1ZW5hbWUiIDAgMTMgKGhl
bHAtYXJncyAoZmlsZS10cnVlbmFtZSkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0
dG9uICh0KSkpICMoImZpbGUtbmFtZS1hcy1kaXJlY3RvcnkiIDAgMjIgKGhlbHAtYXJncyAoZmls
ZS1uYW1lLWFzLWRpcmVjdG9yeSkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9u
ICh0KSkpICMoImxldCIgMCAzIChoZWxwLWFyZ3MgKGxldCkgY2F0ZWdvcnkgaGVscC1mdW5jdGlv
bi1idXR0b24gYnV0dG9uICh0KSkpICMoImlmIiAwIDIgKGhlbHAtYXJncyAoaWYpIGNhdGVnb3J5
IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKV0gMTQgWyMoImNhciIgMCAzIChoZWxw
LWFyZ3MgKGNhcikgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMo
IjEtIiAwIDIgKGhlbHAtYXJncyAoMS0pIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1
dHRvbiAodCkpKSAjKCJzZXRjYXIiIDAgNiAoaGVscC1hcmdzIChzZXRjYXIpIGNhdGVnb3J5IGhl
bHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJ3aGlsZSIgMCA1IChoZWxwLWFyZ3Mg
KHdoaWxlKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygibGV0
IiAwIDMgKGhlbHAtYXJncyAobGV0KSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0
b24gKHQpKSkgIygiZmlsZS10cnVlbmFtZSIgMCAxMyAoaGVscC1hcmdzIChmaWxlLXRydWVuYW1l
KSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygiZmlsZS1uYW1l
LWFzLWRpcmVjdG9yeSIgMCAyMiAoaGVscC1hcmdzIChmaWxlLW5hbWUtYXMtZGlyZWN0b3J5KSBj
YXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygibGV0IiAwIDMgKGhl
bHAtYXJncyAobGV0KSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkg
IygiaWYiIDAgMiAoaGVscC1hcmdzIChpZikgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24g
YnV0dG9uICh0KSkpICMoIm9yIiAwIDIgKGhlbHAtYXJncyAob3IpIGNhdGVnb3J5IGhlbHAtZnVu
Y3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJsZXQiIDAgMyAoaGVscC1hcmdzIChsZXQpIGNh
dGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJpZiIgMCAyIChoZWxw
LWFyZ3MgKGlmKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygi
bGV0IiAwIDMgKGhlbHAtYXJncyAobGV0KSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBi
dXR0b24gKHQpKSkgIygid2hpbGUiIDAgNSAoaGVscC1hcmdzICh3aGlsZSkgY2F0ZWdvcnkgaGVs
cC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImxldCIgMCAzIChoZWxwLWFyZ3MgKGxl
dCkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImZpbGUtdHJ1
ZW5hbWUiIDAgMTMgKGhlbHAtYXJncyAoZmlsZS10cnVlbmFtZSkgY2F0ZWdvcnkgaGVscC1mdW5j
dGlvbi1idXR0b24gYnV0dG9uICh0KSkpXSA2IFsjKCJzZXRxIiAwIDQgKGhlbHAtYXJncyAoc2V0
cSkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImxldCIgMCAz
IChoZWxwLWFyZ3MgKGxldCkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0
KSkpICMoImlmIiAwIDIgKGhlbHAtYXJncyAoaWYpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0
dG9uIGJ1dHRvbiAodCkpKSAjKCJsZXQiIDAgMyAoaGVscC1hcmdzIChsZXQpIGNhdGVnb3J5IGhl
bHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJ3aGlsZSIgMCA1IChoZWxwLWFyZ3Mg
KHdoaWxlKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygibGV0
IiAwIDMgKGhlbHAtYXJncyAobGV0KSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0
b24gKHQpKSkgIygiZmlsZS10cnVlbmFtZSIgMCAxMyAoaGVscC1hcmdzIChmaWxlLXRydWVuYW1l
KSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygiZmlsZS1uYW1l
LWFzLWRpcmVjdG9yeSIgMCAyMiAoaGVscC1hcmdzIChmaWxlLW5hbWUtYXMtZGlyZWN0b3J5KSBj
YXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygibGV0IiAwIDMgKGhl
bHAtYXJncyAobGV0KSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkg
IygiaWYiIDAgMiAoaGVscC1hcmdzIChpZikgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24g
YnV0dG9uICh0KSkpICMoIm9yIiAwIDIgKGhlbHAtYXJncyAob3IpIGNhdGVnb3J5IGhlbHAtZnVu
Y3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJsZXQiIDAgMyAoaGVscC1hcmdzIChsZXQpIGNh
dGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJpZiIgMCAyIChoZWxw
LWFyZ3MgKGlmKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygi
bGV0IiAwIDMgKGhlbHAtYXJncyAobGV0KSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBi
dXR0b24gKHQpKSkgIygid2hpbGUiIDAgNSAoaGVscC1hcmdzICh3aGlsZSkgY2F0ZWdvcnkgaGVs
cC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImxldCIgMCAzIChoZWxwLWFyZ3MgKGxl
dCkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpXSAzIFsjKCJvciIg
MCAyIChoZWxwLWFyZ3MgKG9yKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24g
KHQpKSkgIygibGV0IiAwIDMgKGhlbHAtYXJncyAobGV0KSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9u
LWJ1dHRvbiBidXR0b24gKHQpKSkgIygiaWYiIDAgMiAoaGVscC1hcmdzIChpZikgY2F0ZWdvcnkg
aGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImxldCIgMCAzIChoZWxwLWFyZ3Mg
KGxldCkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoIndoaWxl
IiAwIDUgKGhlbHAtYXJncyAod2hpbGUpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1
dHRvbiAodCkpKSAjKCJsZXQiIDAgMyAoaGVscC1hcmdzIChsZXQpIGNhdGVnb3J5IGhlbHAtZnVu
Y3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJmaWxlLXRydWVuYW1lIiAwIDEzIChoZWxwLWFy
Z3MgKGZpbGUtdHJ1ZW5hbWUpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAo
dCkpKSAjKCJmaWxlLW5hbWUtYXMtZGlyZWN0b3J5IiAwIDIyIChoZWxwLWFyZ3MgKGZpbGUtbmFt
ZS1hcy1kaXJlY3RvcnkpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkp
KSAjKCJsZXQiIDAgMyAoaGVscC1hcmdzIChsZXQpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0
dG9uIGJ1dHRvbiAodCkpKSAjKCJpZiIgMCAyIChoZWxwLWFyZ3MgKGlmKSBjYXRlZ29yeSBoZWxw
LWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygib3IiIDAgMiAoaGVscC1hcmdzIChvcikg
Y2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImxldCIgMCAzICho
ZWxwLWFyZ3MgKGxldCkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkp
ICMoImlmIiAwIDIgKGhlbHAtYXJncyAoaWYpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9u
IGJ1dHRvbiAodCkpKSAjKCJsZXQiIDAgMyAoaGVscC1hcmdzIChsZXQpIGNhdGVnb3J5IGhlbHAt
ZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJ3aGlsZSIgMCA1IChoZWxwLWFyZ3MgKHdo
aWxlKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygibGV0IiAw
IDMgKGhlbHAtYXJncyAobGV0KSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24g
KHQpKSldIDMgWyMoImNhciIgMCAzIChoZWxwLWFyZ3MgKGNhcikgY2F0ZWdvcnkgaGVscC1mdW5j
dGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImFzc29jIiAwIDUgKGhlbHAtYXJncyAoYXNzb2Mp
IGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJpZiIgMCAyICho
ZWxwLWFyZ3MgKGlmKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkg
Iygib3IiIDAgMiAoaGVscC1hcmdzIChvcikgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24g
YnV0dG9uICh0KSkpICMoImxldCIgMCAzIChoZWxwLWFyZ3MgKGxldCkgY2F0ZWdvcnkgaGVscC1m
dW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImlmIiAwIDIgKGhlbHAtYXJncyAoaWYpIGNh
dGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJsZXQiIDAgMyAoaGVs
cC1hcmdzIChsZXQpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAj
KCJ3aGlsZSIgMCA1IChoZWxwLWFyZ3MgKHdoaWxlKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1
dHRvbiBidXR0b24gKHQpKSkgIygibGV0IiAwIDMgKGhlbHAtYXJncyAobGV0KSBjYXRlZ29yeSBo
ZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygiZmlsZS10cnVlbmFtZSIgMCAxMyAo
aGVscC1hcmdzIChmaWxlLXRydWVuYW1lKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBi
dXR0b24gKHQpKSkgIygiZmlsZS1uYW1lLWFzLWRpcmVjdG9yeSIgMCAyMiAoaGVscC1hcmdzIChm
aWxlLW5hbWUtYXMtZGlyZWN0b3J5KSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0
b24gKHQpKSkgIygibGV0IiAwIDMgKGhlbHAtYXJncyAobGV0KSBjYXRlZ29yeSBoZWxwLWZ1bmN0
aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygiaWYiIDAgMiAoaGVscC1hcmdzIChpZikgY2F0ZWdv
cnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoIm9yIiAwIDIgKGhlbHAtYXJn
cyAob3IpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJsZXQi
IDAgMyAoaGVscC1hcmdzIChsZXQpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRv
biAodCkpKSAjKCJpZiIgMCAyIChoZWxwLWFyZ3MgKGlmKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9u
LWJ1dHRvbiBidXR0b24gKHQpKSldIDQgWyMoIm9yIiAwIDIgKGhlbHAtYXJncyAob3IpIGNhdGVn
b3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJsZXQiIDAgMyAoaGVscC1h
cmdzIChsZXQpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJm
aWxlLXRydWVuYW1lIiAwIDEzIChoZWxwLWFyZ3MgKGZpbGUtdHJ1ZW5hbWUpIGNhdGVnb3J5IGhl
bHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJmaWxlLW5hbWUtYXMtZGlyZWN0b3J5
IiAwIDIyIChoZWxwLWFyZ3MgKGZpbGUtbmFtZS1hcy1kaXJlY3RvcnkpIGNhdGVnb3J5IGhlbHAt
ZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJsZXQiIDAgMyAoaGVscC1hcmdzIChsZXQp
IGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJpZiIgMCAyICho
ZWxwLWFyZ3MgKGlmKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkg
Iygib3IiIDAgMiAoaGVscC1hcmdzIChvcikgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24g
YnV0dG9uICh0KSkpICMoImxldCIgMCAzIChoZWxwLWFyZ3MgKGxldCkgY2F0ZWdvcnkgaGVscC1m
dW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImlmIiAwIDIgKGhlbHAtYXJncyAoaWYpIGNh
dGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJsZXQiIDAgMyAoaGVs
cC1hcmdzIChsZXQpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAj
KCJ3aGlsZSIgMCA1IChoZWxwLWFyZ3MgKHdoaWxlKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1
dHRvbiBidXR0b24gKHQpKSkgIygibGV0IiAwIDMgKGhlbHAtYXJncyAobGV0KSBjYXRlZ29yeSBo
ZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygiZmlsZS10cnVlbmFtZSIgMCAxMyAo
aGVscC1hcmdzIChmaWxlLXRydWVuYW1lKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBi
dXR0b24gKHQpKSkgIygiZmlsZS1uYW1lLWFzLWRpcmVjdG9yeSIgMCAyMiAoaGVscC1hcmdzIChm
aWxlLW5hbWUtYXMtZGlyZWN0b3J5KSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0
b24gKHQpKSkgIygibGV0IiAwIDMgKGhlbHAtYXJncyAobGV0KSBjYXRlZ29yeSBoZWxwLWZ1bmN0
aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygiaWYiIDAgMiAoaGVscC1hcmdzIChpZikgY2F0ZWdv
cnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpXSAzIFsjKCJ0aW1lci1ldmVudC1o
YW5kbGVyIiAwIDE5IChoZWxwLWFyZ3MgKHRpbWVyLWV2ZW50LWhhbmRsZXIpIGNhdGVnb3J5IGhl
bHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJyZWRpc3BsYXkiIDAgOSAoaGVscC1h
cmdzIChyZWRpc3BsYXkpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkp
KSAjKCJub3RtdWNoLXNob3ctY29tbWFuZC1ob29rIiAwIDI1IChoZWxwLWFyZ3MgKG5vdG11Y2gt
c2hvdy1jb21tYW5kLWhvb2spIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAo
dCkpKSAibmlsIiAibmlsIiAibmlsIiAibmlsIiAibmlsIiAibmlsIiAibmlsIiAibmlsIiAibmls
IiAibmlsIiAibmlsIiAibmlsIiAibmlsIl0gNCBbIygibmF0aXZlLWVsaXNwLWxvYWQiIDAgMTcg
KGhlbHAtYXJncyAobmF0aXZlLWVsaXNwLWxvYWQpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0
dG9uIGJ1dHRvbiAodCkpKSAjKCIjPGNvbXBpbGVkLWZ1bmN0aW9uIDI2Qj4iIDIwIDIzIChhY3Rp
b24gaGVscC1mbnMtLWRpc3BsYXktZnVuY3Rpb24ga2V5bWFwIChrZXltYXAgKHRvdWNoc2NyZWVu
LWRvd24gLiBwdXNoLWJ1dHRvbikgKGhlYWRlci1saW5lIGtleW1hcCAodG91Y2hzY3JlZW4tZG93
biAuIHB1c2gtYnV0dG9uKSAobW91c2UtMiAuIHB1c2gtYnV0dG9uKSkgKG1vZGUtbGluZSBrZXlt
YXAgKHRvdWNoc2NyZWVuLWRvd24gLiBwdXNoLWJ1dHRvbikgKG1vdXNlLTIgLiBwdXNoLWJ1dHRv
bikpIChmb2xsb3ctbGluayAuIG1vdXNlLWZhY2UpIChtb3VzZS0yIC4gcHVzaC1idXR0b24pICgx
MyAuIHB1c2gtYnV0dG9uKSBrZXltYXAgKGJhY2t0YWIgLiBiYWNrd2FyZC1idXR0b24pICgyNyBr
ZXltYXAgKDkgLiBiYWNrd2FyZC1idXR0b24pKSAoOSAuIGZvcndhcmQtYnV0dG9uKSkgYnV0dG9u
LWRhdGEgI1s1MTQgIlwzMDRcMzA1XDMwM1wyNDJcIlwyMTBcMzA2AiFcMjEwXDMwNzESAFwzMTBc
MzAxITBcMjEwXDMxMVwzMDIhXDMwMFwyMDMvAFwzMTIDIVwzMTNVXDIwMy8AXDMxNAEhXDIwMy8A
XDMxNQFcMzAwXDMxNj1cIlwyMTBcMjEwXDMxNyBcMjA3IiBbbGF0ZSAiL3RtcC9lbWFjcy1hc3lu
Yy1jb21wLXByb2ZpbGVyLVlzaWtKNC5lbCIgIi9ob21lL3lhbnRhcjkyL0dpdC9lbWFjcy9saXNw
L3Byb2ZpbGVyLmVsIiAobmlsKSBydW4taG9vay13aXRoLWFyZ3MgbmF0aXZlLWNvbXAtYXN5bmMt
Y3UtZG9uZS1mdW5jdGlvbnMgY29tcC1hY2NlcHQtYW5kLXByb2Nlc3MtYXN5bmMtb3V0cHV0IChl
cnJvcikgZGVsZXRlLWZpbGUgY29tcC1lbC10by1lbG4tZmlsZW5hbWUgcHJvY2Vzcy1leGl0LXN0
YXR1cyAwIGZpbGUtZXhpc3RzLXAgbmF0aXZlLWVsaXNwLWxvYWQgbGF0ZSBjb21wLXJ1bi1hc3lu
Yy13b3JrZXJzXSA3ICIKCihmbiBQUk9DRVNTIEVWRU5UKSJdIGNhdGVnb3J5IHQgZm9sbG93LWxp
bmsgdCBidXR0b24gdCBoZWxwLWVjaG8gIm1vdXNlLTIsIFJFVDogRGlzcGxheSB0aGUgZnVuY3Rp
b24ncyBib2R5IiBtb3VzZS1mYWNlIGhpZ2hsaWdodCBmb250LWxvY2stZmFjZSBidXR0b24gZmFj
ZSBidXR0b24pKSAibmlsIiAibmlsIiAibmlsIiAibmlsIiAibmlsIiAibmlsIiAibmlsIiAibmls
IiAibmlsIiAibmlsIiAibmlsIiAibmlsIiAibmlsIiAibmlsIl0gNDMgWyMoIm9iamVjdC1vZi1j
bGFzcy1wIiAwIDE3IChoZWxwLWFyZ3MgKG9iamVjdC1vZi1jbGFzcy1wKSBjYXRlZ29yeSBoZWxw
LWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygiY2xvc3FsLW9iamVjdC0tZWllaW8tY2hp
bGRwIiAwIDI3IChoZWxwLWFyZ3MgKGNsb3NxbC1vYmplY3QtLWVpZWlvLWNoaWxkcCkgY2F0ZWdv
cnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImNsb3NxbC0tY2xvc3FsLW9i
amVjdC1wIiAwIDIzIChoZWxwLWFyZ3MgKGNsb3NxbC0tY2xvc3FsLW9iamVjdC1wKSBjYXRlZ29y
eSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygiZWllaW8tb3JlZi0tY2xvc3Fs
LW9yZWYiIDAgMjMgKGhlbHAtYXJncyAoZWllaW8tb3JlZi0tY2xvc3FsLW9yZWYpIGNhdGVnb3J5
IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJhcHBseSIgMCA1IChoZWxwLWFy
Z3MgKGFwcGx5KSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygi
c2xvdC12YWx1ZSIgMCAxMCAoaGVscC1hcmdzIChzbG90LXZhbHVlKSBjYXRlZ29yeSBoZWxwLWZ1
bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygiaGVsbS1zb3VyY2UtbW0tZ2V0LXNlYXJjaC1v
ci1tYXRjaC1mbnMiIDAgMzggKGhlbHAtYXJncyAoaGVsbS1zb3VyY2UtbW0tZ2V0LXNlYXJjaC1v
ci1tYXRjaC1mbnMpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAj
KCIjPGNvbXBpbGVkLWZ1bmN0aW9uIEE1Rj4iIDIwIDIzIChhY3Rpb24gaGVscC1mbnMtLWRpc3Bs
YXktZnVuY3Rpb24ga2V5bWFwIChrZXltYXAgKHRvdWNoc2NyZWVuLWRvd24gLiBwdXNoLWJ1dHRv
bikgKGhlYWRlci1saW5lIGtleW1hcCAodG91Y2hzY3JlZW4tZG93biAuIHB1c2gtYnV0dG9uKSAo
bW91c2UtMiAuIHB1c2gtYnV0dG9uKSkgKG1vZGUtbGluZSBrZXltYXAgKHRvdWNoc2NyZWVuLWRv
d24gLiBwdXNoLWJ1dHRvbikgKG1vdXNlLTIgLiBwdXNoLWJ1dHRvbikpIChmb2xsb3ctbGluayAu
IG1vdXNlLWZhY2UpIChtb3VzZS0yIC4gcHVzaC1idXR0b24pICgxMyAuIHB1c2gtYnV0dG9uKSBr
ZXltYXAgKGJhY2t0YWIgLiBiYWNrd2FyZC1idXR0b24pICgyNyBrZXltYXAgKDkgLiBiYWNrd2Fy
ZC1idXR0b24pKSAoOSAuIGZvcndhcmQtYnV0dG9uKSkgYnV0dG9uLWRhdGEgI1syNTcgIlwzMDEB
XDMwMlwiXDMwMz1cMjA0FgBcMzA0XDMwNVwzMDZcMzA3XDMwMQVcMzEwXCJcIlwzMTFcMjExJFwy
MTBcMzAxAVwzMTJcIlwzMDECXDMxM1wiXDIxMVwyMDM6AFwzMTQDXDMxMlwzMTVcMzExBgZcMzE2
PT9cMjA1MQAGBlwzMTdcMzIwBghcIkRcIiNcMjEwXDI2NgJcMzAxAVwzMjFcIlwyMDNjAFwzMDEB
XDMyMlwiXDIxMVwyMDNbAFwzMTQCXDMyMlwzMjNcMzI0BSEIQ1wiI1wyNjYCXDIwMmMAXDMxNAJc
MzIyCEMjXDI2NgJcMzAxAVwzMjVcIlwyMDNzAFwzMTQBXDMyMlwzMjYEXDMyMlwiI1wyMTBcMzAx
AVwzMjVcIj9cMjA1fwBcMzAxAVwzMjdcIlwyMTFcMjAzXDIzMABcMjExXDMzMD1cMjA0XDIzMABc
MzE0AlwzMjJcMzIzXDMyNFwzMDEGB1wzMjJcIiFcMzMxXCIjXDIxMFwyMTBcMzAxAVwzMzJcIlwy
MTFcMzMzXDIzMlwyMDRcMjYwAFwyMTFcMzM0PVwyMDRcMjYwAFwzMDRcMzM1XDMzNlwzMTFcMjEx
JFwyMTBcMzAxAlwzMzdcIlwzNDA9XDIwNFwzMDAAXDMwNFwzNDFcMzQyXDMxMVwyMTEkXDIxMFwz
MTFcMjA3IiBbaGVsbS1mdXp6eS1zZWFyY2gtZm4gc2xvdC12YWx1ZSBjYW5kaWRhdGVzIGhlbG0t
Y2FuZGlkYXRlcy1pbi1idWZmZXIgY2wtLWFzc2VydGlvbi1mYWlsZWQgKGVxIChzbG90LXZhbHVl
IHNvdXJjZSAnY2FuZGlkYXRlcykgJ2hlbG0tY2FuZGlkYXRlcy1pbi1idWZmZXIpIGZvcm1hdCAi
V3JvbmcgdXNhZ2Ugb2YgYGNhbmRpZGF0ZXMnIGF0dHIgaW4gYCVzJyB1c2UgYGRhdGEnIG9yIGBp
bml0JyBpbnN0ZWFkIiBuYW1lIG5pbCBpbml0IGRhdGEgZWllaW8tb3NldCBkZWxxIGhlbG0tZGVm
YXVsdC1pbml0LXNvdXJjZS1pbi1idWZmZXItZnVuY3Rpb24gbWFrZS1jbG9zdXJlICNbMCAiXDMw
MVwzMDJcMzAzXDMwMCFcMjAzDQBcMzAwIFwyMDIkAFwzMDRcMzAwIVwyMDMjAFwzMDVcMzAwIVwy
MDMjAHJcMzAwcVwyMTBcMzA2IClcMjAyJABcMzAwXCJcMjA3IiBbVjAgaGVsbS1pbml0LWNhbmRp
ZGF0ZXMtaW4tYnVmZmVyIGdsb2JhbCBmdW5jdGlvbnAgYnVmZmVycCBidWZmZXItbGl2ZS1wIGJ1
ZmZlci1zdHJpbmddIDRdIGZ1enp5LW1hdGNoIHNlYXJjaCBhcHBlbmQgaGVsbS1ta2xpc3QgbXVs
dGltYXRjaCBoZWxtLXNvdXJjZS1tbS1nZXQtc2VhcmNoLW9yLW1hdGNoLWZucyBtaWdlbW8gbm9t
dWx0aW1hdGNoIChoZWxtLW1tLTMtbWlnZW1vLXNlYXJjaCkgbWF0Y2ggKGlkZW50aXR5KSBpZGVu
dGl0eSAob3IgKGVxdWFsICcoaWRlbnRpdHkpIG10YykgKGVxICdpZGVudGl0eSBtdGMpKSAiSW52
YWxpZCBzbG90IHZhbHVlIGZvciBgbWF0Y2gnIiB2b2xhdGlsZSB0IChlcSAoc2xvdC12YWx1ZSBz
b3VyY2UgJ3ZvbGF0aWxlKSB0KSAiSW52YWxpZCBzbG90IHZhbHVlIGZvciBgdm9sYXRpbGUnIl0g
MTIgKCIvaG9tZS95YW50YXI5Mi8uZW1hY3MuZC9zdHJhaWdodC9idWlsZC9oZWxtLWNvcmUvaGVs
bS1zb3VyY2UuZWxjIiAuIDQxNzI0KV0gY2F0ZWdvcnkgdCBmb2xsb3ctbGluayB0IGJ1dHRvbiB0
IGhlbHAtZWNobyAibW91c2UtMiwgUkVUOiBEaXNwbGF5IHRoZSBmdW5jdGlvbidzIGJvZHkiIG1v
dXNlLWZhY2UgaGlnaGxpZ2h0IGZvbnQtbG9jay1mYWNlIGJ1dHRvbiBmYWNlIGJ1dHRvbikpICMo
ImFwcGx5IiAwIDUgKGhlbHAtYXJncyAoYXBwbHkpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0
dG9uIGJ1dHRvbiAodCkpKSAjKCIjPGNvbXBpbGVkLWZ1bmN0aW9uIDE4MD4iIDIwIDIzIChhY3Rp
b24gaGVscC1mbnMtLWRpc3BsYXktZnVuY3Rpb24ga2V5bWFwIChrZXltYXAgKHRvdWNoc2NyZWVu
LWRvd24gLiBwdXNoLWJ1dHRvbikgKGhlYWRlci1saW5lIGtleW1hcCAodG91Y2hzY3JlZW4tZG93
biAuIHB1c2gtYnV0dG9uKSAobW91c2UtMiAuIHB1c2gtYnV0dG9uKSkgKG1vZGUtbGluZSBrZXlt
YXAgKHRvdWNoc2NyZWVuLWRvd24gLiBwdXNoLWJ1dHRvbikgKG1vdXNlLTIgLiBwdXNoLWJ1dHRv
bikpIChmb2xsb3ctbGluayAuIG1vdXNlLWZhY2UpIChtb3VzZS0yIC4gcHVzaC1idXR0b24pICgx
MyAuIHB1c2gtYnV0dG9uKSBrZXltYXAgKGJhY2t0YWIgLiBiYWNrd2FyZC1idXR0b24pICgyNyBr
ZXltYXAgKDkgLiBiYWNrd2FyZC1idXR0b24pKSAoOSAuIGZvcndhcmQtYnV0dG9uKSkgYnV0dG9u
LWRhdGEgI1sxMjggIlwzMDJcMjExXDIwMxEAXDIxMUBcMzAzAQRcIlwyNjYCQVwyMDIBAFwyMTBc
MzAzXDMwMAJcIlwzMDFcMjExXDIwMycAXDIxMUBcMzAzAQVcIlwyNjYCQVwyMDIXAFwyMTBcMjA3
IiBbI1syNTcgIlwzMDEBXDMwMlwiXDMwMz1cMjA0FgBcMzA0XDMwNVwzMDZcMzA3XDMwMQVcMzEw
XCJcIlwzMTFcMjExJFwyMTBcMzAxAVwzMTJcIlwzMDECXDMxM1wiXDIxMVwyMDM6AFwzMTQDXDMx
MlwzMTVcMzExBgZcMzE2PT9cMjA1MQAGBlwzMTdcMzIwBghcIkRcIiNcMjEwXDI2NgJcMzAxAVwz
MjFcIlwyMDNjAFwzMDEBXDMyMlwiXDIxMVwyMDNbAFwzMTQCXDMyMlwzMjNcMzI0BSEIQ1wiI1wy
NjYCXDIwMmMAXDMxNAJcMzIyCEMjXDI2NgJcMzAxAVwzMjVcIlwyMDNzAFwzMTQBXDMyMlwzMjYE
XDMyMlwiI1wyMTBcMzAxAVwzMjVcIj9cMjA1fwBcMzAxAVwzMjdcIlwyMTFcMjAzXDIzMABcMjEx
XDMzMD1cMjA0XDIzMABcMzE0AlwzMjJcMzIzXDMyNFwzMDEGB1wzMjJcIiFcMzMxXCIjXDIxMFwy
MTBcMzAxAVwzMzJcIlwyMTFcMzMzXDIzMlwyMDRcMjYwAFwyMTFcMzM0PVwyMDRcMjYwAFwzMDRc
MzM1XDMzNlwzMTFcMjExJFwyMTBcMzAxAlwzMzdcIlwzNDA9XDIwNFwzMDAAXDMwNFwzNDFcMzQy
XDMxMVwyMTEkXDIxMFwzMTFcMjA3IiBbaGVsbS1mdXp6eS1zZWFyY2gtZm4gc2xvdC12YWx1ZSBj
YW5kaWRhdGVzIGhlbG0tY2FuZGlkYXRlcy1pbi1idWZmZXIgY2wtLWFzc2VydGlvbi1mYWlsZWQg
KGVxIChzbG90LXZhbHVlIHNvdXJjZSAnY2FuZGlkYXRlcykgJ2hlbG0tY2FuZGlkYXRlcy1pbi1i
dWZmZXIpIGZvcm1hdCAiV3JvbmcgdXNhZ2Ugb2YgYGNhbmRpZGF0ZXMnIGF0dHIgaW4gYCVzJyB1
c2UgYGRhdGEnIG9yIGBpbml0JyBpbnN0ZWFkIiBuYW1lIG5pbCBpbml0IGRhdGEgZWllaW8tb3Nl
dCBkZWxxIGhlbG0tZGVmYXVsdC1pbml0LXNvdXJjZS1pbi1idWZmZXItZnVuY3Rpb24gbWFrZS1j
bG9zdXJlICNbMCAiXDMwMVwzMDJcMzAzXDMwMCFcMjAzDQBcMzAwIFwyMDIkAFwzMDRcMzAwIVwy
MDMjAFwzMDVcMzAwIVwyMDMjAHJcMzAwcVwyMTBcMzA2IClcMjAyJABcMzAwXCJcMjA3IiBbVjAg
aGVsbS1pbml0LWNhbmRpZGF0ZXMtaW4tYnVmZmVyIGdsb2JhbCBmdW5jdGlvbnAgYnVmZmVycCBi
dWZmZXItbGl2ZS1wIGJ1ZmZlci1zdHJpbmddIDRdIGZ1enp5LW1hdGNoIHNlYXJjaCBhcHBlbmQg
aGVsbS1ta2xpc3QgbXVsdGltYXRjaCBoZWxtLXNvdXJjZS1tbS1nZXQtc2VhcmNoLW9yLW1hdGNo
LWZucyBtaWdlbW8gbm9tdWx0aW1hdGNoIChoZWxtLW1tLTMtbWlnZW1vLXNlYXJjaCkgbWF0Y2gg
KGlkZW50aXR5KSBpZGVudGl0eSAob3IgKGVxdWFsICcoaWRlbnRpdHkpIG10YykgKGVxICdpZGVu
dGl0eSBtdGMpKSAiSW52YWxpZCBzbG90IHZhbHVlIGZvciBgbWF0Y2gnIiB2b2xhdGlsZSB0IChl
cSAoc2xvdC12YWx1ZSBzb3VyY2UgJ3ZvbGF0aWxlKSB0KSAiSW52YWxpZCBzbG90IHZhbHVlIGZv
ciBgdm9sYXRpbGUnIl0gMTIgKCIvaG9tZS95YW50YXI5Mi8uZW1hY3MuZC9zdHJhaWdodC9idWls
ZC9oZWxtLWNvcmUvaGVsbS1zb3VyY2UuZWxjIiAuIDQxNzI0KV0gbmlsICgjWzI1NyAiXDMwMAFc
MzAxXDMwMiNcMjEwXDMwMAFcMzAzXDMwNCNcMjEwXDMwMAFcMzA1XDMwNiNcMjEwXDMwMAFcMzA3
XDMxMCNcMjEwXDMwMAFcMzExXDMxMiNcMjA3IiBbZWllaW8tb3NldCBhY3Rpb24gaGVsbS10eXBl
LWNvbW1hbmQtYWN0aW9ucyBjb2VyY2UgaGVsbS1zeW1ib2xpZnkgcGVyc2lzdGVudC1hY3Rpb24g
aGVsbS1NLXgtcGVyc2lzdGVudC1hY3Rpb24gcGVyc2lzdGVudC1oZWxwICJEZXNjcmliZSB0aGlz
IGNvbW1hbmQiIGdyb3VwIGhlbG0tY29tbWFuZF0gNSAoIi9ob21lL3lhbnRhcjkyLy5lbWFjcy5k
L3N0cmFpZ2h0L2J1aWxkL2hlbG0vaGVsbS10eXBlcy5lbGMiIC4gMjkzMildICNbMjU3ICJcMzAx
AVwzMDJcIlwyMDQNAFwzMDMBXDMwMlwzMDQjXDIxMFwzMDEBXDMwNVwiXDIwMxwAXDMwNlwzMDdc
MzAxA1wzMTBcIlwiXDIxMFwzMDEBXDMxMVwiXDIxMVwyMDNRAFwyMTE5XDIwMy4AXDIxMUpcMjAy
LwBcMjExXDMwMQNcMzEyXCJcMjA1PgBcMzEzIFwzMTQBXDMxNVwzMTYjXDIxMFwyMTFcMjAzSQBc
MzE3AQNcIlwyMDJKAAFcMzAzBVwzMTEDI1wyNjYEXDIxMFwzMDEBXDMyMFwiXDIxMVwyMDNoAFwz
MDMCXDMyMVwzMjIEBgZcIiNcMjY2AlwyMDJxAFwzMDMCXDMyMVwzMjMFISNcMjY2AlwzMDEBXDMy
NFwiXDIwM1wyMzcACFwyMDRcMjAzAFwzMjVcMzAwXDMyNlwzMjdcMjExJFwyMTBcMzAzAVwzMzBc
MzAxBFwzMzBcIlwyMTFcMjAzXDIzMgBcMzMxXDMzMgIhCENcIlwyNjIBXDIwMlwyMzUAXDIxMAhD
I1wyMTBcMzAxAVwzMzNcIlwyMDRcMzAyAFwzMDMBXDMzMFwzMDEEXDMzMFwiXDIxMVwyMDNcMjc1
AFwzMzFcMzMyAiFcMzM0Q1wiXDI2MgFcMjAyXDMwMABcMjEwXDMzNEMjXDIxMFwzMzVcMzAxAlwz
MzZcIiFcMjQ3XDIwM1wzNTAAXDMwMwFcMzMwXDMwMQRcMzMwXCJcMjExXDIwM1wzNDMAXDMzMVwz
MzICIVwzMzdDXCJcMjYyAVwyMDJcMzQ2AFwyMTBcMzM3QyNcMjEwXDMwMQFcMzQwXCJcMjExXDIw
MwIBXDIxMTlcMjAzXDM3MgBcMjExSlwyMDJcMzczAFwyMTFcMzAzA1wzNDADI1wyNjYCXDIxMFwz
MDEBXDMxMFwiXDMwMQJcMzQxXCJcMjExXDIwMyQBXDM0MgEhXDIwMxoBXDIxMTlcMjAzHwFcMjEx
OlwyMDMkAVwzMDZcMzQzA1wiXDIxMFwyMTBcMzAxAlwzNDRcIlwyMTFcMjA1QQFcMzQyASFcMjAz
OAFcMjExOVwyMDM9AVwyMTE6XDIwNUEBXDMwNlwzNDUDXCJcMjA3IiBbaGVsbS1mdXp6eS1zb3J0
LWZuIHNsb3QtdmFsdWUgZ3JvdXAgZWllaW8tb3NldCBoZWxtIGRlbGF5ZWQgd2FybiAiRGVwcmVj
YXRlZCB1c2FnZSBvZiBoZWxtIGBkZWxheWVkJyBzbG90IGluIGAlcyciIG5hbWUga2V5bWFwIG11
c3QtbWF0Y2ggbWFrZS1zcGFyc2Uta2V5bWFwIGRlZmluZS1rZXkgIg0iIGhlbG0tY29uZmlybS1h
bmQtZXhpdC1taW5pYnVmZmVyIG1ha2UtY29tcG9zZWQta2V5bWFwIHBlcnNpc3RlbnQtaGVscCBo
ZWFkZXItbGluZSBoZWxtLXNvdXJjZS0tcGVyc2lzdGVudC1oZWxwLXN0cmluZyBoZWxtLXNvdXJj
ZS0taGVhZGVyLWxpbmUgZnV6enktbWF0Y2ggY2wtLWFzc2VydGlvbi1mYWlsZWQgIldyb25nIHR5
cGUgYXJndW1lbnQgZnVuY3Rpb25wOiBuaWwiIG5pbCBmaWx0ZXJlZC1jYW5kaWRhdGUtdHJhbnNm
b3JtZXIgYXBwZW5kIGhlbG0tbWtsaXN0IG5vaGlnaGxpZ2h0IGhlbG0tZnV6enktaGlnaGxpZ2h0
LW1hdGNoZXMgaGVsbS1pbnRlcnByZXQtdmFsdWUgbXVsdGlsaW5lIGhlbG0tbXVsdGlsaW5lLXRy
YW5zZm9ybWVyIHJlcXVpcmVzLXBhdHRlcm4gYmVmb3JlLWluaXQtaG9vayBmdW5jdGlvbnAgIkhl
bG0gc291cmNlIGAlcyc6IGJlZm9yZS1pbml0LWhvb2sgU2hvdWxkIGJlIGRlZmluZWQgYXMgYSBz
eW1ib2wiIGFmdGVyLWluaXQtaG9vayAiSGVsbSBzb3VyY2UgYCVzJzogYWZ0ZXItaW5pdC1ob29r
IFNob3VsZCBiZSBkZWZpbmVkIGFzIGEgc3ltYm9sIl0gOSAoIi9ob21lL3lhbnRhcjkyLy5lbWFj
cy5kL3N0cmFpZ2h0L2J1aWxkL2hlbG0tY29yZS9oZWxtLXNvdXJjZS5lbGMiIC4gNDE3MjQpXSkg
YXBwbHldIDcgIgoKKGZuICZyZXN0IEFSR1MpIl0gY2F0ZWdvcnkgdCBmb2xsb3ctbGluayB0IGJ1
dHRvbiB0IGhlbHAtZWNobyAibW91c2UtMiwgUkVUOiBEaXNwbGF5IHRoZSBmdW5jdGlvbidzIGJv
ZHkiIG1vdXNlLWZhY2UgaGlnaGxpZ2h0IGZvbnQtbG9jay1mYWNlIGJ1dHRvbiBmYWNlIGJ1dHRv
bikpICMoImFwcGx5IiAwIDUgKGhlbHAtYXJncyAoYXBwbHkpIGNhdGVnb3J5IGhlbHAtZnVuY3Rp
b24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJoZWxtLS1zZXR1cC1zb3VyY2UiIDAgMTggKGhlbHAt
YXJncyAoaGVsbS0tc2V0dXAtc291cmNlKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBi
dXR0b24gKHQpKSkgIygiaGVsbS1tYWtlLXNvdXJjZSIgMCAxNiAoaGVscC1hcmdzIChoZWxtLW1h
a2Utc291cmNlKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygi
aGVsbS1NLXgtcmVhZC1leHRlbmRlZC1jb21tYW5kIiAwIDMwIChoZWxwLWFyZ3MgKGhlbG0tTS14
LXJlYWQtZXh0ZW5kZWQtY29tbWFuZCkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0
dG9uICh0KSkpICMoImhlbG0tTS14IiAwIDggKGhlbHAtYXJncyAoaGVsbS1NLXgpIGNhdGVnb3J5
IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJmdW5jYWxsLWludGVyYWN0aXZl
bHkiIDAgMjEgKGhlbHAtYXJncyAoZnVuY2FsbC1pbnRlcmFjdGl2ZWx5KSBjYXRlZ29yeSBoZWxw
LWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSldIDcgWyMoImhlbG0tY29tcC1yZWFkLWdldC1j
YW5kaWRhdGVzIiAwIDI5IChoZWxwLWFyZ3MgKGhlbG0tY29tcC1yZWFkLWdldC1jYW5kaWRhdGVz
KSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygiIzxjb21waWxl
ZC1mdW5jdGlvbiBDMEE+IiAyMCAyMyAoYWN0aW9uIGhlbHAtZm5zLS1kaXNwbGF5LWZ1bmN0aW9u
IGtleW1hcCAoa2V5bWFwICh0b3VjaHNjcmVlbi1kb3duIC4gcHVzaC1idXR0b24pIChoZWFkZXIt
bGluZSBrZXltYXAgKHRvdWNoc2NyZWVuLWRvd24gLiBwdXNoLWJ1dHRvbikgKG1vdXNlLTIgLiBw
dXNoLWJ1dHRvbikpIChtb2RlLWxpbmUga2V5bWFwICh0b3VjaHNjcmVlbi1kb3duIC4gcHVzaC1i
dXR0b24pIChtb3VzZS0yIC4gcHVzaC1idXR0b24pKSAoZm9sbG93LWxpbmsgLiBtb3VzZS1mYWNl
KSAobW91c2UtMiAuIHB1c2gtYnV0dG9uKSAoMTMgLiBwdXNoLWJ1dHRvbikga2V5bWFwIChiYWNr
dGFiIC4gYmFja3dhcmQtYnV0dG9uKSAoMjcga2V5bWFwICg5IC4gYmFja3dhcmQtYnV0dG9uKSkg
KDkgLiBmb3J3YXJkLWJ1dHRvbikpIGJ1dHRvbi1kYXRhICNbMCAiXDMwMlwzMDFcMzAwXDMwM1wy
MTFcMzA0JVwyMDciIFtjb21tYW5kcCAjPG9iYXJyYXkgbj05ODkxOT4gaGVsbS1jb21wLXJlYWQt
Z2V0LWNhbmRpZGF0ZXMgbmlsICIiXSA2XSBjYXRlZ29yeSB0IGZvbGxvdy1saW5rIHQgYnV0dG9u
IHQgaGVscC1lY2hvICJtb3VzZS0yLCBSRVQ6IERpc3BsYXkgdGhlIGZ1bmN0aW9uJ3MgYm9keSIg
bW91c2UtZmFjZSBoaWdobGlnaHQgZm9udC1sb2NrLWZhY2UgYnV0dG9uIGZhY2UgYnV0dG9uKSkg
IygiIzxjb21waWxlZC1mdW5jdGlvbiAzMDU+IiAyMCAyMyAoYWN0aW9uIGhlbHAtZm5zLS1kaXNw
bGF5LWZ1bmN0aW9uIGtleW1hcCAoa2V5bWFwICh0b3VjaHNjcmVlbi1kb3duIC4gcHVzaC1idXR0
b24pIChoZWFkZXItbGluZSBrZXltYXAgKHRvdWNoc2NyZWVuLWRvd24gLiBwdXNoLWJ1dHRvbikg
KG1vdXNlLTIgLiBwdXNoLWJ1dHRvbikpIChtb2RlLWxpbmUga2V5bWFwICh0b3VjaHNjcmVlbi1k
b3duIC4gcHVzaC1idXR0b24pIChtb3VzZS0yIC4gcHVzaC1idXR0b24pKSAoZm9sbG93LWxpbmsg
LiBtb3VzZS1mYWNlKSAobW91c2UtMiAuIHB1c2gtYnV0dG9uKSAoMTMgLiBwdXNoLWJ1dHRvbikg
a2V5bWFwIChiYWNrdGFiIC4gYmFja3dhcmQtYnV0dG9uKSAoMjcga2V5bWFwICg5IC4gYmFja3dh
cmQtYnV0dG9uKSkgKDkgLiBmb3J3YXJkLWJ1dHRvbikpIGJ1dHRvbi1kYXRhICNbMCAiXDMwMVwz
MDJcMzAzXDMwMCFcMjAzDQBcMzAwIFwyMDIkAFwzMDRcMzAwIVwyMDMjAFwzMDVcMzAwIVwyMDMj
AHJcMzAwcVwyMTBcMzA2IClcMjAyJABcMzAwXCJcMjA3IiBbI1swICJcMzAyXDMwMVwzMDBcMzAz
XDIxMVwzMDQlXDIwNyIgW2NvbW1hbmRwICM8b2JhcnJheSBuPTk4OTE5PiBoZWxtLWNvbXAtcmVh
ZC1nZXQtY2FuZGlkYXRlcyBuaWwgIiJdIDZdIGhlbG0taW5pdC1jYW5kaWRhdGVzLWluLWJ1ZmZl
ciBnbG9iYWwgZnVuY3Rpb25wIGJ1ZmZlcnAgYnVmZmVyLWxpdmUtcCBidWZmZXItc3RyaW5nXSA0
XSBjYXRlZ29yeSB0IGZvbGxvdy1saW5rIHQgYnV0dG9uIHQgaGVscC1lY2hvICJtb3VzZS0yLCBS
RVQ6IERpc3BsYXkgdGhlIGZ1bmN0aW9uJ3MgYm9keSIgbW91c2UtZmFjZSBoaWdobGlnaHQgZm9u
dC1sb2NrLWZhY2UgYnV0dG9uIGZhY2UgYnV0dG9uKSkgIygiaGVsbS1hcHBseS1mdW5jdGlvbnMt
ZnJvbS1zb3VyY2UiIDAgMzIgKGhlbHAtYXJncyAoaGVsbS1hcHBseS1mdW5jdGlvbnMtZnJvbS1z
b3VyY2UpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJoZWxt
LWNvbXB1dGUtYXR0ci1pbi1zb3VyY2VzIiAwIDI4IChoZWxwLWFyZ3MgKGhlbG0tY29tcHV0ZS1h
dHRyLWluLXNvdXJjZXMpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkp
KSAjKCJoZWxtLWluaXRpYWwtc2V0dXAiIDAgMTggKGhlbHAtYXJncyAoaGVsbS1pbml0aWFsLXNl
dHVwKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygiaGVsbS1p
bml0aWFsaXplIiAwIDE1IChoZWxwLWFyZ3MgKGhlbG0taW5pdGlhbGl6ZSkgY2F0ZWdvcnkgaGVs
cC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImhlbG0taW50ZXJuYWwiIDAgMTMgKGhl
bHAtYXJncyAoaGVsbS1pbnRlcm5hbCkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0
dG9uICh0KSkpICMoImhlbG0iIDAgNCAoaGVscC1hcmdzIChoZWxtKSBjYXRlZ29yeSBoZWxwLWZ1
bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygiaGVsbSIgMCA0IChoZWxwLWFyZ3MgKGhlbG0p
IGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJoZWxtLU0teC1y
ZWFkLWV4dGVuZGVkLWNvbW1hbmQiIDAgMzAgKGhlbHAtYXJncyAoaGVsbS1NLXgtcmVhZC1leHRl
bmRlZC1jb21tYW5kKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkg
IygiaGVsbS1NLXgiIDAgOCAoaGVscC1hcmdzIChoZWxtLU0teCkgY2F0ZWdvcnkgaGVscC1mdW5j
dGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImZ1bmNhbGwtaW50ZXJhY3RpdmVseSIgMCAyMSAo
aGVscC1hcmdzIChmdW5jYWxsLWludGVyYWN0aXZlbHkpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24t
YnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJjb21tYW5kLWV4ZWN1dGUiIDAgMTUgKGhlbHAtYXJncyAo
Y29tbWFuZC1leGVjdXRlKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQp
KSkgIm5pbCIgIm5pbCJdIDI2IFsjKCJoZWxtLWluaXQtY2FuZGlkYXRlcy1pbi1idWZmZXIiIDAg
MzAgKGhlbHAtYXJncyAoaGVsbS1pbml0LWNhbmRpZGF0ZXMtaW4tYnVmZmVyKSBjYXRlZ29yeSBo
ZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygiIzxjb21waWxlZC1mdW5jdGlvbiAz
MDU+IiAyMCAyMyAoYWN0aW9uIGhlbHAtZm5zLS1kaXNwbGF5LWZ1bmN0aW9uIGtleW1hcCAoa2V5
bWFwICh0b3VjaHNjcmVlbi1kb3duIC4gcHVzaC1idXR0b24pIChoZWFkZXItbGluZSBrZXltYXAg
KHRvdWNoc2NyZWVuLWRvd24gLiBwdXNoLWJ1dHRvbikgKG1vdXNlLTIgLiBwdXNoLWJ1dHRvbikp
IChtb2RlLWxpbmUga2V5bWFwICh0b3VjaHNjcmVlbi1kb3duIC4gcHVzaC1idXR0b24pIChtb3Vz
ZS0yIC4gcHVzaC1idXR0b24pKSAoZm9sbG93LWxpbmsgLiBtb3VzZS1mYWNlKSAobW91c2UtMiAu
IHB1c2gtYnV0dG9uKSAoMTMgLiBwdXNoLWJ1dHRvbikga2V5bWFwIChiYWNrdGFiIC4gYmFja3dh
cmQtYnV0dG9uKSAoMjcga2V5bWFwICg5IC4gYmFja3dhcmQtYnV0dG9uKSkgKDkgLiBmb3J3YXJk
LWJ1dHRvbikpIGJ1dHRvbi1kYXRhICNbMCAiXDMwMVwzMDJcMzAzXDMwMCFcMjAzDQBcMzAwIFwy
MDIkAFwzMDRcMzAwIVwyMDMjAFwzMDVcMzAwIVwyMDMjAHJcMzAwcVwyMTBcMzA2IClcMjAyJABc
MzAwXCJcMjA3IiBbI1swICJcMzAyXDMwMVwzMDBcMzAzXDIxMVwzMDQlXDIwNyIgW2NvbW1hbmRw
ICM8b2JhcnJheSBuPTk4OTE5PiBoZWxtLWNvbXAtcmVhZC1nZXQtY2FuZGlkYXRlcyBuaWwgIiJd
IDZdIGhlbG0taW5pdC1jYW5kaWRhdGVzLWluLWJ1ZmZlciBnbG9iYWwgZnVuY3Rpb25wIGJ1ZmZl
cnAgYnVmZmVyLWxpdmUtcCBidWZmZXItc3RyaW5nXSA0XSBjYXRlZ29yeSB0IGZvbGxvdy1saW5r
IHQgYnV0dG9uIHQgaGVscC1lY2hvICJtb3VzZS0yLCBSRVQ6IERpc3BsYXkgdGhlIGZ1bmN0aW9u
J3MgYm9keSIgbW91c2UtZmFjZSBoaWdobGlnaHQgZm9udC1sb2NrLWZhY2UgYnV0dG9uIGZhY2Ug
YnV0dG9uKSkgIygiaGVsbS1hcHBseS1mdW5jdGlvbnMtZnJvbS1zb3VyY2UiIDAgMzIgKGhlbHAt
YXJncyAoaGVsbS1hcHBseS1mdW5jdGlvbnMtZnJvbS1zb3VyY2UpIGNhdGVnb3J5IGhlbHAtZnVu
Y3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJoZWxtLWNvbXB1dGUtYXR0ci1pbi1zb3VyY2Vz
IiAwIDI4IChoZWxwLWFyZ3MgKGhlbG0tY29tcHV0ZS1hdHRyLWluLXNvdXJjZXMpIGNhdGVnb3J5
IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJoZWxtLWluaXRpYWwtc2V0dXAi
IDAgMTggKGhlbHAtYXJncyAoaGVsbS1pbml0aWFsLXNldHVwKSBjYXRlZ29yeSBoZWxwLWZ1bmN0
aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygiaGVsbS1pbml0aWFsaXplIiAwIDE1IChoZWxwLWFy
Z3MgKGhlbG0taW5pdGlhbGl6ZSkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9u
ICh0KSkpICMoImhlbG0taW50ZXJuYWwiIDAgMTMgKGhlbHAtYXJncyAoaGVsbS1pbnRlcm5hbCkg
Y2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImhlbG0iIDAgNCAo
aGVscC1hcmdzIChoZWxtKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQp
KSkgIygiaGVsbSIgMCA0IChoZWxwLWFyZ3MgKGhlbG0pIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24t
YnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJoZWxtLU0teC1yZWFkLWV4dGVuZGVkLWNvbW1hbmQiIDAg
MzAgKGhlbHAtYXJncyAoaGVsbS1NLXgtcmVhZC1leHRlbmRlZC1jb21tYW5kKSBjYXRlZ29yeSBo
ZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygiaGVsbS1NLXgiIDAgOCAoaGVscC1h
cmdzIChoZWxtLU0teCkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkp
ICMoImZ1bmNhbGwtaW50ZXJhY3RpdmVseSIgMCAyMSAoaGVscC1hcmdzIChmdW5jYWxsLWludGVy
YWN0aXZlbHkpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJj
b21tYW5kLWV4ZWN1dGUiIDAgMTUgKGhlbHAtYXJncyAoY29tbWFuZC1leGVjdXRlKSBjYXRlZ29y
eSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIm5pbCIgIm5pbCIgIm5pbCJdIDQg
WyMoIndpbmRvdy0tbWF5YmUtcmFpc2UtZnJhbWUiIDAgMjUgKGhlbHAtYXJncyAod2luZG93LS1t
YXliZS1yYWlzZS1mcmFtZSkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0
KSkpICMoImRpc3BsYXktYnVmZmVyLXBvcC11cC13aW5kb3ciIDAgMjggKGhlbHAtYXJncyAoZGlz
cGxheS1idWZmZXItcG9wLXVwLXdpbmRvdykgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24g
YnV0dG9uICh0KSkpICMoImRpc3BsYXktYnVmZmVyLS1tYXliZS1wb3AtdXAtd2luZG93IiAwIDM1
IChoZWxwLWFyZ3MgKGRpc3BsYXktYnVmZmVyLS1tYXliZS1wb3AtdXAtd2luZG93KSBjYXRlZ29y
eSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygiZGlzcGxheS1idWZmZXItLW1h
eWJlLXBvcC11cC1mcmFtZS1vci13aW5kb3ciIDAgNDQgKGhlbHAtYXJncyAoZGlzcGxheS1idWZm
ZXItLW1heWJlLXBvcC11cC1mcmFtZS1vci13aW5kb3cpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24t
YnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJkaXNwbGF5LWJ1ZmZlciIgMCAxNCAoaGVscC1hcmdzIChk
aXNwbGF5LWJ1ZmZlcikgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkp
ICMoImhlbG0tZGVmYXVsdC1kaXNwbGF5LWJ1ZmZlciIgMCAyNyAoaGVscC1hcmdzIChoZWxtLWRl
ZmF1bHQtZGlzcGxheS1idWZmZXIpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRv
biAodCkpKSAjKCJoZWxtLWRpc3BsYXktYnVmZmVyIiAwIDE5IChoZWxwLWFyZ3MgKGhlbG0tZGlz
cGxheS1idWZmZXIpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAj
KCJoZWxtLWludGVybmFsIiAwIDEzIChoZWxwLWFyZ3MgKGhlbG0taW50ZXJuYWwpIGNhdGVnb3J5
IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJoZWxtIiAwIDQgKGhlbHAtYXJn
cyAoaGVsbSkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImhl
bG0iIDAgNCAoaGVscC1hcmdzIChoZWxtKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBi
dXR0b24gKHQpKSkgIygiaGVsbS1NLXgtcmVhZC1leHRlbmRlZC1jb21tYW5kIiAwIDMwIChoZWxw
LWFyZ3MgKGhlbG0tTS14LXJlYWQtZXh0ZW5kZWQtY29tbWFuZCkgY2F0ZWdvcnkgaGVscC1mdW5j
dGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImhlbG0tTS14IiAwIDggKGhlbHAtYXJncyAoaGVs
bS1NLXgpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJmdW5j
YWxsLWludGVyYWN0aXZlbHkiIDAgMjEgKGhlbHAtYXJncyAoZnVuY2FsbC1pbnRlcmFjdGl2ZWx5
KSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygiY29tbWFuZC1l
eGVjdXRlIiAwIDE1IChoZWxwLWFyZ3MgKGNvbW1hbmQtZXhlY3V0ZSkgY2F0ZWdvcnkgaGVscC1m
dW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICJuaWwiICJuaWwiXSAzIFsjKCJoZWxtLWNhbmRp
ZGF0ZS1idWZmZXIiIDAgMjEgKGhlbHAtYXJncyAoaGVsbS1jYW5kaWRhdGUtYnVmZmVyKSBjYXRl
Z29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygiaGVsbS1tYWtlLXNlcGFy
YXRvciIgMCAxOSAoaGVscC1hcmdzIChoZWxtLW1ha2Utc2VwYXJhdG9yKSBjYXRlZ29yeSBoZWxw
LWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygiaGVsbS1NLXgtdHJhbnNmb3JtZXItMSIg
MCAyMiAoaGVscC1hcmdzIChoZWxtLU0teC10cmFuc2Zvcm1lci0xKSBjYXRlZ29yeSBoZWxwLWZ1
bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygiaGVsbS1NLXgtdHJhbnNmb3JtZXIiIDAgMjAg
KGhlbHAtYXJncyAoaGVsbS1NLXgtdHJhbnNmb3JtZXIpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24t
YnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJoZWxtLWFwcGx5LWZ1bmN0aW9ucy1mcm9tLXNvdXJjZSIg
MCAzMiAoaGVscC1hcmdzIChoZWxtLWFwcGx5LWZ1bmN0aW9ucy1mcm9tLXNvdXJjZSkgY2F0ZWdv
cnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImhlbG0tcHJvY2Vzcy1maWx0
ZXJlZC1jYW5kaWRhdGUtdHJhbnNmb3JtZXIiIDAgNDMgKGhlbHAtYXJncyAoaGVsbS1wcm9jZXNz
LWZpbHRlcmVkLWNhbmRpZGF0ZS10cmFuc2Zvcm1lcikgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1i
dXR0b24gYnV0dG9uICh0KSkpICMoImhlbG0tY29tcHV0ZS1tYXRjaGVzIiAwIDIwIChoZWxwLWFy
Z3MgKGhlbG0tY29tcHV0ZS1tYXRjaGVzKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBi
dXR0b24gKHQpKSkgIygiaGVsbS0tY29sbGVjdC1tYXRjaGVzIiAwIDIxIChoZWxwLWFyZ3MgKGhl
bG0tLWNvbGxlY3QtbWF0Y2hlcykgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9u
ICh0KSkpICMoImhlbG0tdXBkYXRlIiAwIDExIChoZWxwLWFyZ3MgKGhlbG0tdXBkYXRlKSBjYXRl
Z29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygiaGVsbS1yZWFkLWZyb20t
bWluaWJ1ZmZlciIgMCAyNSAoaGVscC1hcmdzIChoZWxtLXJlYWQtZnJvbS1taW5pYnVmZmVyKSBj
YXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygiaGVsbS1pbnRlcm5h
bCIgMCAxMyAoaGVscC1hcmdzIChoZWxtLWludGVybmFsKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9u
LWJ1dHRvbiBidXR0b24gKHQpKSkgIygiaGVsbSIgMCA0IChoZWxwLWFyZ3MgKGhlbG0pIGNhdGVn
b3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJoZWxtIiAwIDQgKGhlbHAt
YXJncyAoaGVsbSkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMo
ImhlbG0tTS14LXJlYWQtZXh0ZW5kZWQtY29tbWFuZCIgMCAzMCAoaGVscC1hcmdzIChoZWxtLU0t
eC1yZWFkLWV4dGVuZGVkLWNvbW1hbmQpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1
dHRvbiAodCkpKSAjKCJoZWxtLU0teCIgMCA4IChoZWxwLWFyZ3MgKGhlbG0tTS14KSBjYXRlZ29y
eSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygiZnVuY2FsbC1pbnRlcmFjdGl2
ZWx5IiAwIDIxIChoZWxwLWFyZ3MgKGZ1bmNhbGwtaW50ZXJhY3RpdmVseSkgY2F0ZWdvcnkgaGVs
cC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpXSAzIFsjKCIjPGNvbXBpbGVkLWZ1bmN0aW9u
IEUzNT4iIDIwIDIzIChhY3Rpb24gaGVscC1mbnMtLWRpc3BsYXktZnVuY3Rpb24ga2V5bWFwIChr
ZXltYXAgKHRvdWNoc2NyZWVuLWRvd24gLiBwdXNoLWJ1dHRvbikgKGhlYWRlci1saW5lIGtleW1h
cCAodG91Y2hzY3JlZW4tZG93biAuIHB1c2gtYnV0dG9uKSAobW91c2UtMiAuIHB1c2gtYnV0dG9u
KSkgKG1vZGUtbGluZSBrZXltYXAgKHRvdWNoc2NyZWVuLWRvd24gLiBwdXNoLWJ1dHRvbikgKG1v
dXNlLTIgLiBwdXNoLWJ1dHRvbikpIChmb2xsb3ctbGluayAuIG1vdXNlLWZhY2UpIChtb3VzZS0y
IC4gcHVzaC1idXR0b24pICgxMyAuIHB1c2gtYnV0dG9uKSBrZXltYXAgKGJhY2t0YWIgLiBiYWNr
d2FyZC1idXR0b24pICgyNyBrZXltYXAgKDkgLiBiYWNrd2FyZC1idXR0b24pKSAoOSAuIGZvcndh
cmQtYnV0dG9uKSkgYnV0dG9uLWRhdGEgI1swICJcMzAxXDMwMCFcMjA1CQBcMzAyXDMwMCFcMjA3
IiBbIzxraWxsZWQgYnVmZmVyPiBidWZmZXItbmFtZSBraWxsLWJ1ZmZlcl0gMl0gY2F0ZWdvcnkg
dCBmb2xsb3ctbGluayB0IGJ1dHRvbiB0IGhlbHAtZWNobyAibW91c2UtMiwgUkVUOiBEaXNwbGF5
IHRoZSBmdW5jdGlvbidzIGJvZHkiIG1vdXNlLWZhY2UgaGlnaGxpZ2h0IGZvbnQtbG9jay1mYWNl
IGJ1dHRvbiBmYWNlIGJ1dHRvbikpICMoInN1YnN0aXR1dGUtY29tbWFuZC1rZXlzIiAwIDIzICho
ZWxwLWFyZ3MgKHN1YnN0aXR1dGUtY29tbWFuZC1rZXlzKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9u
LWJ1dHRvbiBidXR0b24gKHQpKSkgIygiaGVsbS1NLXgtdHJhbnNmb3JtZXItMSIgMCAyMiAoaGVs
cC1hcmdzIChoZWxtLU0teC10cmFuc2Zvcm1lci0xKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1
dHRvbiBidXR0b24gKHQpKSkgIygiaGVsbS1NLXgtdHJhbnNmb3JtZXIiIDAgMjAgKGhlbHAtYXJn
cyAoaGVsbS1NLXgtdHJhbnNmb3JtZXIpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1
dHRvbiAodCkpKSAjKCJoZWxtLWFwcGx5LWZ1bmN0aW9ucy1mcm9tLXNvdXJjZSIgMCAzMiAoaGVs
cC1hcmdzIChoZWxtLWFwcGx5LWZ1bmN0aW9ucy1mcm9tLXNvdXJjZSkgY2F0ZWdvcnkgaGVscC1m
dW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImhlbG0tcHJvY2Vzcy1maWx0ZXJlZC1jYW5k
aWRhdGUtdHJhbnNmb3JtZXIiIDAgNDMgKGhlbHAtYXJncyAoaGVsbS1wcm9jZXNzLWZpbHRlcmVk
LWNhbmRpZGF0ZS10cmFuc2Zvcm1lcikgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0
dG9uICh0KSkpICMoImhlbG0tY29tcHV0ZS1tYXRjaGVzIiAwIDIwIChoZWxwLWFyZ3MgKGhlbG0t
Y29tcHV0ZS1tYXRjaGVzKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQp
KSkgIygiaGVsbS0tY29sbGVjdC1tYXRjaGVzIiAwIDIxIChoZWxwLWFyZ3MgKGhlbG0tLWNvbGxl
Y3QtbWF0Y2hlcykgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMo
ImhlbG0tdXBkYXRlIiAwIDExIChoZWxwLWFyZ3MgKGhlbG0tdXBkYXRlKSBjYXRlZ29yeSBoZWxw
LWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygiaGVsbS1yZWFkLWZyb20tbWluaWJ1ZmZl
ciIgMCAyNSAoaGVscC1hcmdzIChoZWxtLXJlYWQtZnJvbS1taW5pYnVmZmVyKSBjYXRlZ29yeSBo
ZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygiaGVsbS1pbnRlcm5hbCIgMCAxMyAo
aGVscC1hcmdzIChoZWxtLWludGVybmFsKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBi
dXR0b24gKHQpKSkgIygiaGVsbSIgMCA0IChoZWxwLWFyZ3MgKGhlbG0pIGNhdGVnb3J5IGhlbHAt
ZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJoZWxtIiAwIDQgKGhlbHAtYXJncyAoaGVs
bSkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImhlbG0tTS14
LXJlYWQtZXh0ZW5kZWQtY29tbWFuZCIgMCAzMCAoaGVscC1hcmdzIChoZWxtLU0teC1yZWFkLWV4
dGVuZGVkLWNvbW1hbmQpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkp
KSAjKCJoZWxtLU0teCIgMCA4IChoZWxwLWFyZ3MgKGhlbG0tTS14KSBjYXRlZ29yeSBoZWxwLWZ1
bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygiZnVuY2FsbC1pbnRlcmFjdGl2ZWx5IiAwIDIx
IChoZWxwLWFyZ3MgKGZ1bmNhbGwtaW50ZXJhY3RpdmVseSkgY2F0ZWdvcnkgaGVscC1mdW5jdGlv
bi1idXR0b24gYnV0dG9uICh0KSkpXSA0IFsjKCJ3aGVyZS1pcy1pbnRlcm5hbCIgMCAxNyAoaGVs
cC1hcmdzICh3aGVyZS1pcy1pbnRlcm5hbCkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24g
YnV0dG9uICh0KSkpICMoInN1YnN0aXR1dGUtY29tbWFuZC1rZXlzIiAwIDIzIChoZWxwLWFyZ3Mg
KHN1YnN0aXR1dGUtY29tbWFuZC1rZXlzKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBi
dXR0b24gKHQpKSkgIygiaGVsbS1NLXgtdHJhbnNmb3JtZXItMSIgMCAyMiAoaGVscC1hcmdzICho
ZWxtLU0teC10cmFuc2Zvcm1lci0xKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0
b24gKHQpKSkgIygiaGVsbS1NLXgtdHJhbnNmb3JtZXIiIDAgMjAgKGhlbHAtYXJncyAoaGVsbS1N
LXgtdHJhbnNmb3JtZXIpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkp
KSAjKCJoZWxtLWFwcGx5LWZ1bmN0aW9ucy1mcm9tLXNvdXJjZSIgMCAzMiAoaGVscC1hcmdzICho
ZWxtLWFwcGx5LWZ1bmN0aW9ucy1mcm9tLXNvdXJjZSkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1i
dXR0b24gYnV0dG9uICh0KSkpICMoImhlbG0tcHJvY2Vzcy1maWx0ZXJlZC1jYW5kaWRhdGUtdHJh
bnNmb3JtZXIiIDAgNDMgKGhlbHAtYXJncyAoaGVsbS1wcm9jZXNzLWZpbHRlcmVkLWNhbmRpZGF0
ZS10cmFuc2Zvcm1lcikgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkp
ICMoImhlbG0tY29tcHV0ZS1tYXRjaGVzIiAwIDIwIChoZWxwLWFyZ3MgKGhlbG0tY29tcHV0ZS1t
YXRjaGVzKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygiaGVs
bS0tY29sbGVjdC1tYXRjaGVzIiAwIDIxIChoZWxwLWFyZ3MgKGhlbG0tLWNvbGxlY3QtbWF0Y2hl
cykgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImhlbG0tdXBk
YXRlIiAwIDExIChoZWxwLWFyZ3MgKGhlbG0tdXBkYXRlKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9u
LWJ1dHRvbiBidXR0b24gKHQpKSkgIygiaGVsbS1yZWFkLWZyb20tbWluaWJ1ZmZlciIgMCAyNSAo
aGVscC1hcmdzIChoZWxtLXJlYWQtZnJvbS1taW5pYnVmZmVyKSBjYXRlZ29yeSBoZWxwLWZ1bmN0
aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygiaGVsbS1pbnRlcm5hbCIgMCAxMyAoaGVscC1hcmdz
IChoZWxtLWludGVybmFsKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQp
KSkgIygiaGVsbSIgMCA0IChoZWxwLWFyZ3MgKGhlbG0pIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24t
YnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJoZWxtIiAwIDQgKGhlbHAtYXJncyAoaGVsbSkgY2F0ZWdv
cnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImhlbG0tTS14LXJlYWQtZXh0
ZW5kZWQtY29tbWFuZCIgMCAzMCAoaGVscC1hcmdzIChoZWxtLU0teC1yZWFkLWV4dGVuZGVkLWNv
bW1hbmQpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJoZWxt
LU0teCIgMCA4IChoZWxwLWFyZ3MgKGhlbG0tTS14KSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1
dHRvbiBidXR0b24gKHQpKSkgIygiZnVuY2FsbC1pbnRlcmFjdGl2ZWx5IiAwIDIxIChoZWxwLWFy
Z3MgKGZ1bmNhbGwtaW50ZXJhY3RpdmVseSkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24g
YnV0dG9uICh0KSkpXSA3IFsjKCJpbnRlcm4iIDAgNiAoaGVscC1hcmdzIChpbnRlcm4pIGNhdGVn
b3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJzdWJzdGl0dXRlLWNvbW1h
bmQta2V5cyIgMCAyMyAoaGVscC1hcmdzIChzdWJzdGl0dXRlLWNvbW1hbmQta2V5cykgY2F0ZWdv
cnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImhlbG0tTS14LXRyYW5zZm9y
bWVyLTEiIDAgMjIgKGhlbHAtYXJncyAoaGVsbS1NLXgtdHJhbnNmb3JtZXItMSkgY2F0ZWdvcnkg
aGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImhlbG0tTS14LXRyYW5zZm9ybWVy
IiAwIDIwIChoZWxwLWFyZ3MgKGhlbG0tTS14LXRyYW5zZm9ybWVyKSBjYXRlZ29yeSBoZWxwLWZ1
bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygiaGVsbS1hcHBseS1mdW5jdGlvbnMtZnJvbS1z
b3VyY2UiIDAgMzIgKGhlbHAtYXJncyAoaGVsbS1hcHBseS1mdW5jdGlvbnMtZnJvbS1zb3VyY2Up
IGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJoZWxtLXByb2Nl
c3MtZmlsdGVyZWQtY2FuZGlkYXRlLXRyYW5zZm9ybWVyIiAwIDQzIChoZWxwLWFyZ3MgKGhlbG0t
cHJvY2Vzcy1maWx0ZXJlZC1jYW5kaWRhdGUtdHJhbnNmb3JtZXIpIGNhdGVnb3J5IGhlbHAtZnVu
Y3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJoZWxtLWNvbXB1dGUtbWF0Y2hlcyIgMCAyMCAo
aGVscC1hcmdzIChoZWxtLWNvbXB1dGUtbWF0Y2hlcykgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1i
dXR0b24gYnV0dG9uICh0KSkpICMoImhlbG0tLWNvbGxlY3QtbWF0Y2hlcyIgMCAyMSAoaGVscC1h
cmdzIChoZWxtLS1jb2xsZWN0LW1hdGNoZXMpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9u
IGJ1dHRvbiAodCkpKSAjKCJoZWxtLXVwZGF0ZSIgMCAxMSAoaGVscC1hcmdzIChoZWxtLXVwZGF0
ZSkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImhlbG0tcmVh
ZC1mcm9tLW1pbmlidWZmZXIiIDAgMjUgKGhlbHAtYXJncyAoaGVsbS1yZWFkLWZyb20tbWluaWJ1
ZmZlcikgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImhlbG0t
aW50ZXJuYWwiIDAgMTMgKGhlbHAtYXJncyAoaGVsbS1pbnRlcm5hbCkgY2F0ZWdvcnkgaGVscC1m
dW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImhlbG0iIDAgNCAoaGVscC1hcmdzIChoZWxt
KSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygiaGVsbSIgMCA0
IChoZWxwLWFyZ3MgKGhlbG0pIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAo
dCkpKSAjKCJoZWxtLU0teC1yZWFkLWV4dGVuZGVkLWNvbW1hbmQiIDAgMzAgKGhlbHAtYXJncyAo
aGVsbS1NLXgtcmVhZC1leHRlbmRlZC1jb21tYW5kKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1
dHRvbiBidXR0b24gKHQpKSkgIygiaGVsbS1NLXgiIDAgOCAoaGVscC1hcmdzIChoZWxtLU0teCkg
Y2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImZ1bmNhbGwtaW50
ZXJhY3RpdmVseSIgMCAyMSAoaGVscC1hcmdzIChmdW5jYWxsLWludGVyYWN0aXZlbHkpIGNhdGVn
b3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKV0gMyBbIygic3Vic3RpdHV0ZS1j
b21tYW5kLWtleXMiIDAgMjMgKGhlbHAtYXJncyAoc3Vic3RpdHV0ZS1jb21tYW5kLWtleXMpIGNh
dGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJoZWxtLU0teC10cmFu
c2Zvcm1lci0xIiAwIDIyIChoZWxwLWFyZ3MgKGhlbG0tTS14LXRyYW5zZm9ybWVyLTEpIGNhdGVn
b3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJoZWxtLU0teC10cmFuc2Zv
cm1lciIgMCAyMCAoaGVscC1hcmdzIChoZWxtLU0teC10cmFuc2Zvcm1lcikgY2F0ZWdvcnkgaGVs
cC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImhlbG0tYXBwbHktZnVuY3Rpb25zLWZy
b20tc291cmNlIiAwIDMyIChoZWxwLWFyZ3MgKGhlbG0tYXBwbHktZnVuY3Rpb25zLWZyb20tc291
cmNlKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygiaGVsbS1w
cm9jZXNzLWZpbHRlcmVkLWNhbmRpZGF0ZS10cmFuc2Zvcm1lciIgMCA0MyAoaGVscC1hcmdzICho
ZWxtLXByb2Nlc3MtZmlsdGVyZWQtY2FuZGlkYXRlLXRyYW5zZm9ybWVyKSBjYXRlZ29yeSBoZWxw
LWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygiaGVsbS1jb21wdXRlLW1hdGNoZXMiIDAg
MjAgKGhlbHAtYXJncyAoaGVsbS1jb21wdXRlLW1hdGNoZXMpIGNhdGVnb3J5IGhlbHAtZnVuY3Rp
b24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJoZWxtLS1jb2xsZWN0LW1hdGNoZXMiIDAgMjEgKGhl
bHAtYXJncyAoaGVsbS0tY29sbGVjdC1tYXRjaGVzKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1
dHRvbiBidXR0b24gKHQpKSkgIygiaGVsbS11cGRhdGUiIDAgMTEgKGhlbHAtYXJncyAoaGVsbS11
cGRhdGUpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJoZWxt
LXJlYWQtZnJvbS1taW5pYnVmZmVyIiAwIDI1IChoZWxwLWFyZ3MgKGhlbG0tcmVhZC1mcm9tLW1p
bmlidWZmZXIpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJo
ZWxtLWludGVybmFsIiAwIDEzIChoZWxwLWFyZ3MgKGhlbG0taW50ZXJuYWwpIGNhdGVnb3J5IGhl
bHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJoZWxtIiAwIDQgKGhlbHAtYXJncyAo
aGVsbSkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImhlbG0i
IDAgNCAoaGVscC1hcmdzIChoZWxtKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0
b24gKHQpKSkgIygiaGVsbS1NLXgtcmVhZC1leHRlbmRlZC1jb21tYW5kIiAwIDMwIChoZWxwLWFy
Z3MgKGhlbG0tTS14LXJlYWQtZXh0ZW5kZWQtY29tbWFuZCkgY2F0ZWdvcnkgaGVscC1mdW5jdGlv
bi1idXR0b24gYnV0dG9uICh0KSkpICMoImhlbG0tTS14IiAwIDggKGhlbHAtYXJncyAoaGVsbS1N
LXgpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJmdW5jYWxs
LWludGVyYWN0aXZlbHkiIDAgMjEgKGhlbHAtYXJncyAoZnVuY2FsbC1pbnRlcmFjdGl2ZWx5KSBj
YXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygiY29tbWFuZC1leGVj
dXRlIiAwIDE1IChoZWxwLWFyZ3MgKGNvbW1hbmQtZXhlY3V0ZSkgY2F0ZWdvcnkgaGVscC1mdW5j
dGlvbi1idXR0b24gYnV0dG9uICh0KSkpXSAzIFsjKCJzdHJpbmctd2lkdGgiIDAgMTIgKGhlbHAt
YXJncyAoc3RyaW5nLXdpZHRoKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24g
KHQpKSkgIygidHJ1bmNhdGUtc3RyaW5nLXRvLXdpZHRoIiAwIDI0IChoZWxwLWFyZ3MgKHRydW5j
YXRlLXN0cmluZy10by13aWR0aCkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9u
ICh0KSkpICMoImhlbG0tZ2V0LWZpcnN0LWxpbmUtZG9jdW1lbnRhdGlvbiIgMCAzMyAoaGVscC1h
cmdzIChoZWxtLWdldC1maXJzdC1saW5lLWRvY3VtZW50YXRpb24pIGNhdGVnb3J5IGhlbHAtZnVu
Y3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJoZWxtLU0teC10cmFuc2Zvcm1lci0xIiAwIDIy
IChoZWxwLWFyZ3MgKGhlbG0tTS14LXRyYW5zZm9ybWVyLTEpIGNhdGVnb3J5IGhlbHAtZnVuY3Rp
b24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJoZWxtLU0teC10cmFuc2Zvcm1lciIgMCAyMCAoaGVs
cC1hcmdzIChoZWxtLU0teC10cmFuc2Zvcm1lcikgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0
b24gYnV0dG9uICh0KSkpICMoImhlbG0tYXBwbHktZnVuY3Rpb25zLWZyb20tc291cmNlIiAwIDMy
IChoZWxwLWFyZ3MgKGhlbG0tYXBwbHktZnVuY3Rpb25zLWZyb20tc291cmNlKSBjYXRlZ29yeSBo
ZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygiaGVsbS1wcm9jZXNzLWZpbHRlcmVk
LWNhbmRpZGF0ZS10cmFuc2Zvcm1lciIgMCA0MyAoaGVscC1hcmdzIChoZWxtLXByb2Nlc3MtZmls
dGVyZWQtY2FuZGlkYXRlLXRyYW5zZm9ybWVyKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRv
biBidXR0b24gKHQpKSkgIygiaGVsbS1jb21wdXRlLW1hdGNoZXMiIDAgMjAgKGhlbHAtYXJncyAo
aGVsbS1jb21wdXRlLW1hdGNoZXMpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRv
biAodCkpKSAjKCJoZWxtLS1jb2xsZWN0LW1hdGNoZXMiIDAgMjEgKGhlbHAtYXJncyAoaGVsbS0t
Y29sbGVjdC1tYXRjaGVzKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQp
KSkgIygiaGVsbS11cGRhdGUiIDAgMTEgKGhlbHAtYXJncyAoaGVsbS11cGRhdGUpIGNhdGVnb3J5
IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJoZWxtLXJlYWQtZnJvbS1taW5p
YnVmZmVyIiAwIDI1IChoZWxwLWFyZ3MgKGhlbG0tcmVhZC1mcm9tLW1pbmlidWZmZXIpIGNhdGVn
b3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJoZWxtLWludGVybmFsIiAw
IDEzIChoZWxwLWFyZ3MgKGhlbG0taW50ZXJuYWwpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0
dG9uIGJ1dHRvbiAodCkpKSAjKCJoZWxtIiAwIDQgKGhlbHAtYXJncyAoaGVsbSkgY2F0ZWdvcnkg
aGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImhlbG0iIDAgNCAoaGVscC1hcmdz
IChoZWxtKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygiaGVs
bS1NLXgtcmVhZC1leHRlbmRlZC1jb21tYW5kIiAwIDMwIChoZWxwLWFyZ3MgKGhlbG0tTS14LXJl
YWQtZXh0ZW5kZWQtY29tbWFuZCkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9u
ICh0KSkpICMoImhlbG0tTS14IiAwIDggKGhlbHAtYXJncyAoaGVsbS1NLXgpIGNhdGVnb3J5IGhl
bHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKV0gMyBbIygicmVwbGFjZS1idWZmZXItaW4t
d2luZG93cyIgMCAyNSAoaGVscC1hcmdzIChyZXBsYWNlLWJ1ZmZlci1pbi13aW5kb3dzKSBjYXRl
Z29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygia2lsbC1idWZmZXIiIDAg
MTEgKGhlbHAtYXJncyAoa2lsbC1idWZmZXIpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9u
IGJ1dHRvbiAodCkpKSAjKCIjPGNvbXBpbGVkLWZ1bmN0aW9uIDA5ND4iIDIwIDIzIChhY3Rpb24g
aGVscC1mbnMtLWRpc3BsYXktZnVuY3Rpb24ga2V5bWFwIChrZXltYXAgKHRvdWNoc2NyZWVuLWRv
d24gLiBwdXNoLWJ1dHRvbikgKGhlYWRlci1saW5lIGtleW1hcCAodG91Y2hzY3JlZW4tZG93biAu
IHB1c2gtYnV0dG9uKSAobW91c2UtMiAuIHB1c2gtYnV0dG9uKSkgKG1vZGUtbGluZSBrZXltYXAg
KHRvdWNoc2NyZWVuLWRvd24gLiBwdXNoLWJ1dHRvbikgKG1vdXNlLTIgLiBwdXNoLWJ1dHRvbikp
IChmb2xsb3ctbGluayAuIG1vdXNlLWZhY2UpIChtb3VzZS0yIC4gcHVzaC1idXR0b24pICgxMyAu
IHB1c2gtYnV0dG9uKSBrZXltYXAgKGJhY2t0YWIgLiBiYWNrd2FyZC1idXR0b24pICgyNyBrZXlt
YXAgKDkgLiBiYWNrd2FyZC1idXR0b24pKSAoOSAuIGZvcndhcmQtYnV0dG9uKSkgYnV0dG9uLWRh
dGEgI1swICJcMzAxXDMwMCFcMjA1CQBcMzAyXDMwMCFcMjA3IiBbIzxraWxsZWQgYnVmZmVyPiBi
dWZmZXItbmFtZSBraWxsLWJ1ZmZlcl0gMl0gY2F0ZWdvcnkgdCBmb2xsb3ctbGluayB0IGJ1dHRv
biB0IGhlbHAtZWNobyAibW91c2UtMiwgUkVUOiBEaXNwbGF5IHRoZSBmdW5jdGlvbidzIGJvZHki
IG1vdXNlLWZhY2UgaGlnaGxpZ2h0IGZvbnQtbG9jay1mYWNlIGJ1dHRvbiBmYWNlIGJ1dHRvbikp
ICMoInN1YnN0aXR1dGUtY29tbWFuZC1rZXlzIiAwIDIzIChoZWxwLWFyZ3MgKHN1YnN0aXR1dGUt
Y29tbWFuZC1rZXlzKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkg
IygiaGVsbS1NLXgtdHJhbnNmb3JtZXItMSIgMCAyMiAoaGVscC1hcmdzIChoZWxtLU0teC10cmFu
c2Zvcm1lci0xKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygi
aGVsbS1NLXgtdHJhbnNmb3JtZXIiIDAgMjAgKGhlbHAtYXJncyAoaGVsbS1NLXgtdHJhbnNmb3Jt
ZXIpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJoZWxtLWFw
cGx5LWZ1bmN0aW9ucy1mcm9tLXNvdXJjZSIgMCAzMiAoaGVscC1hcmdzIChoZWxtLWFwcGx5LWZ1
bmN0aW9ucy1mcm9tLXNvdXJjZSkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9u
ICh0KSkpICMoImhlbG0tcHJvY2Vzcy1maWx0ZXJlZC1jYW5kaWRhdGUtdHJhbnNmb3JtZXIiIDAg
NDMgKGhlbHAtYXJncyAoaGVsbS1wcm9jZXNzLWZpbHRlcmVkLWNhbmRpZGF0ZS10cmFuc2Zvcm1l
cikgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImhlbG0tY29t
cHV0ZS1tYXRjaGVzIiAwIDIwIChoZWxwLWFyZ3MgKGhlbG0tY29tcHV0ZS1tYXRjaGVzKSBjYXRl
Z29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygiaGVsbS0tY29sbGVjdC1t
YXRjaGVzIiAwIDIxIChoZWxwLWFyZ3MgKGhlbG0tLWNvbGxlY3QtbWF0Y2hlcykgY2F0ZWdvcnkg
aGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImhlbG0tdXBkYXRlIiAwIDExICho
ZWxwLWFyZ3MgKGhlbG0tdXBkYXRlKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0
b24gKHQpKSkgIygiaGVsbS1yZWFkLWZyb20tbWluaWJ1ZmZlciIgMCAyNSAoaGVscC1hcmdzICho
ZWxtLXJlYWQtZnJvbS1taW5pYnVmZmVyKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBi
dXR0b24gKHQpKSkgIygiaGVsbS1pbnRlcm5hbCIgMCAxMyAoaGVscC1hcmdzIChoZWxtLWludGVy
bmFsKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygiaGVsbSIg
MCA0IChoZWxwLWFyZ3MgKGhlbG0pIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRv
biAodCkpKSAjKCJoZWxtIiAwIDQgKGhlbHAtYXJncyAoaGVsbSkgY2F0ZWdvcnkgaGVscC1mdW5j
dGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImhlbG0tTS14LXJlYWQtZXh0ZW5kZWQtY29tbWFu
ZCIgMCAzMCAoaGVscC1hcmdzIChoZWxtLU0teC1yZWFkLWV4dGVuZGVkLWNvbW1hbmQpIGNhdGVn
b3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKV0gNCBbIygiaW5zZXJ0IiAwIDYg
KGhlbHAtYXJncyAoaW5zZXJ0KSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24g
KHQpKSkgIygiaGVsbS1pbnNlcnQtbWF0Y2giIDAgMTcgKGhlbHAtYXJncyAoaGVsbS1pbnNlcnQt
bWF0Y2gpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJoZWxt
LXJlbmRlci1zb3VyY2UiIDAgMTggKGhlbHAtYXJncyAoaGVsbS1yZW5kZXItc291cmNlKSBjYXRl
Z29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygiaGVsbS11cGRhdGUiIDAg
MTEgKGhlbHAtYXJncyAoaGVsbS11cGRhdGUpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9u
IGJ1dHRvbiAodCkpKSAjKCJoZWxtLXJlYWQtZnJvbS1taW5pYnVmZmVyIiAwIDI1IChoZWxwLWFy
Z3MgKGhlbG0tcmVhZC1mcm9tLW1pbmlidWZmZXIpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0
dG9uIGJ1dHRvbiAodCkpKSAjKCJoZWxtLWludGVybmFsIiAwIDEzIChoZWxwLWFyZ3MgKGhlbG0t
aW50ZXJuYWwpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJo
ZWxtIiAwIDQgKGhlbHAtYXJncyAoaGVsbSkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24g
YnV0dG9uICh0KSkpICMoImhlbG0iIDAgNCAoaGVscC1hcmdzIChoZWxtKSBjYXRlZ29yeSBoZWxw
LWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygiaGVsbS1NLXgtcmVhZC1leHRlbmRlZC1j
b21tYW5kIiAwIDMwIChoZWxwLWFyZ3MgKGhlbG0tTS14LXJlYWQtZXh0ZW5kZWQtY29tbWFuZCkg
Y2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImhlbG0tTS14IiAw
IDggKGhlbHAtYXJncyAoaGVsbS1NLXgpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1
dHRvbiAodCkpKSAjKCJmdW5jYWxsLWludGVyYWN0aXZlbHkiIDAgMjEgKGhlbHAtYXJncyAoZnVu
Y2FsbC1pbnRlcmFjdGl2ZWx5KSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24g
KHQpKSkgIygiY29tbWFuZC1leGVjdXRlIiAwIDE1IChoZWxwLWFyZ3MgKGNvbW1hbmQtZXhlY3V0
ZSkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICJuaWwiICJuaWwi
ICJuaWwiICJuaWwiXSAzIFsjKCJoZWxtLXJlYWQtZnJvbS1taW5pYnVmZmVyIiAwIDI1IChoZWxw
LWFyZ3MgKGhlbG0tcmVhZC1mcm9tLW1pbmlidWZmZXIpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24t
YnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJoZWxtLWludGVybmFsIiAwIDEzIChoZWxwLWFyZ3MgKGhl
bG0taW50ZXJuYWwpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAj
KCJoZWxtIiAwIDQgKGhlbHAtYXJncyAoaGVsbSkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0
b24gYnV0dG9uICh0KSkpICMoImhlbG0iIDAgNCAoaGVscC1hcmdzIChoZWxtKSBjYXRlZ29yeSBo
ZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygiaGVsbS1NLXgtcmVhZC1leHRlbmRl
ZC1jb21tYW5kIiAwIDMwIChoZWxwLWFyZ3MgKGhlbG0tTS14LXJlYWQtZXh0ZW5kZWQtY29tbWFu
ZCkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImhlbG0tTS14
IiAwIDggKGhlbHAtYXJncyAoaGVsbS1NLXgpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9u
IGJ1dHRvbiAodCkpKSAjKCJmdW5jYWxsLWludGVyYWN0aXZlbHkiIDAgMjEgKGhlbHAtYXJncyAo
ZnVuY2FsbC1pbnRlcmFjdGl2ZWx5KSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0
b24gKHQpKSkgIygiY29tbWFuZC1leGVjdXRlIiAwIDE1IChoZWxwLWFyZ3MgKGNvbW1hbmQtZXhl
Y3V0ZSkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICJuaWwiICJu
aWwiICJuaWwiICJuaWwiICJuaWwiICJuaWwiICJuaWwiICJuaWwiXSAxMyBbInJlZGlzcGxheV9p
bnRlcm5hbCAoQyBmdW5jdGlvbikiICMoImhlbG0tcmVhZC1mcm9tLW1pbmlidWZmZXIiIDAgMjUg
KGhlbHAtYXJncyAoaGVsbS1yZWFkLWZyb20tbWluaWJ1ZmZlcikgY2F0ZWdvcnkgaGVscC1mdW5j
dGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImhlbG0taW50ZXJuYWwiIDAgMTMgKGhlbHAtYXJn
cyAoaGVsbS1pbnRlcm5hbCkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0
KSkpICMoImhlbG0iIDAgNCAoaGVscC1hcmdzIChoZWxtKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9u
LWJ1dHRvbiBidXR0b24gKHQpKSkgIygiaGVsbSIgMCA0IChoZWxwLWFyZ3MgKGhlbG0pIGNhdGVn
b3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJoZWxtLU0teC1yZWFkLWV4
dGVuZGVkLWNvbW1hbmQiIDAgMzAgKGhlbHAtYXJncyAoaGVsbS1NLXgtcmVhZC1leHRlbmRlZC1j
b21tYW5kKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygiaGVs
bS1NLXgiIDAgOCAoaGVscC1hcmdzIChoZWxtLU0teCkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1i
dXR0b24gYnV0dG9uICh0KSkpICMoImZ1bmNhbGwtaW50ZXJhY3RpdmVseSIgMCAyMSAoaGVscC1h
cmdzIChmdW5jYWxsLWludGVyYWN0aXZlbHkpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9u
IGJ1dHRvbiAodCkpKSAjKCJjb21tYW5kLWV4ZWN1dGUiIDAgMTUgKGhlbHAtYXJncyAoY29tbWFu
ZC1leGVjdXRlKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIm5p
bCIgIm5pbCIgIm5pbCIgIm5pbCIgIm5pbCIgIm5pbCIgIm5pbCJdIDg2IFsjKCJyZS1zZWFyY2gt
Zm9yd2FyZCIgMCAxNyAoaGVscC1hcmdzIChyZS1zZWFyY2gtZm9yd2FyZCkgY2F0ZWdvcnkgaGVs
cC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImhlbG0tY2FuZGlkYXRlcy1pbi1idWZm
ZXItc2VhcmNoLWRlZmF1bHQtZm4iIDAgNDMgKGhlbHAtYXJncyAoaGVsbS1jYW5kaWRhdGVzLWlu
LWJ1ZmZlci1zZWFyY2gtZGVmYXVsdC1mbikgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24g
YnV0dG9uICh0KSkpICMoIiM8Y29tcGlsZWQtZnVuY3Rpb24gRERFPiIgMjAgMjMgKGFjdGlvbiBo
ZWxwLWZucy0tZGlzcGxheS1mdW5jdGlvbiBrZXltYXAgKGtleW1hcCAodG91Y2hzY3JlZW4tZG93
biAuIHB1c2gtYnV0dG9uKSAoaGVhZGVyLWxpbmUga2V5bWFwICh0b3VjaHNjcmVlbi1kb3duIC4g
cHVzaC1idXR0b24pIChtb3VzZS0yIC4gcHVzaC1idXR0b24pKSAobW9kZS1saW5lIGtleW1hcCAo
dG91Y2hzY3JlZW4tZG93biAuIHB1c2gtYnV0dG9uKSAobW91c2UtMiAuIHB1c2gtYnV0dG9uKSkg
KGZvbGxvdy1saW5rIC4gbW91c2UtZmFjZSkgKG1vdXNlLTIgLiBwdXNoLWJ1dHRvbikgKDEzIC4g
cHVzaC1idXR0b24pIGtleW1hcCAoYmFja3RhYiAuIGJhY2t3YXJkLWJ1dHRvbikgKDI3IGtleW1h
cCAoOSAuIGJhY2t3YXJkLWJ1dHRvbikpICg5IC4gZm9yd2FyZC1idXR0b24pKSBidXR0b24tZGF0
YSAjWzAgIlwzMTBcMzExXDMxMlwiXDMxM1wzMDFcMjM2XDMxNCAeH1wzMTVcMzE2XDMwNVwzMTdc
MjExAjpcMjAzJgECQFwyNjICXDMwM2JcMjEwXDMyMDEnAFwzMjFcMzA3ITBcMjAyKwBcMjEwXDIw
MjEAXDIwMzEAXDMxNnlcMjEwXDMxN1wyMTFcMjExXDIxMVwyMTEGBlwzMDchXDIxMVwyNjIGXDIw
MxIBBDpcMjAzTABcMzE2eVwzMTVVXDIwMk4AbT9cMjAzEgEGCVwzMDRXXDIwMxIBXDMyMlwzMDYG
BlwyMDNqAAYGPFwyMDNqAAYGXDIwMm8AXDMyMyBcMzI0IERcIlwyNjIEXDMwMlwyMDNcMjExAFwz
MjVcMzE1XDMyNgYGI1wyMDRcMjExAFwzMjcEXDMyNlwzMDIGByEjXDI2MgRcMzMwBAYNXCJcMjYy
AwYKXDIwM1wyNDAAAlwyMDNcMjQwAAIGCVVcMjA0XDI0NAACXDIwNA0BA1wzMzFcMjMwXDIwNA0B
XDMwMlwyMDRcMjYzAAQ6XDIwM1wyNzMAXDMzMgRcMzA3XDMwMCNcMjAzDQFcMzMzBAYKBg4jXDIx
MFwzMzRcMzM1XDMwMVwiXDIxMVwyMDMCAQQ6XDIwM1wzMjUABEFcMjAyXDMyNgAEATxcMjAzXDM3
NABcMzM2AiFcMjA0XDM3NAABXDMxNwE6XDIwM1wzNjcAXDIxMFwyMTFAXDIxMQMhXDI2MggBQVwy
NjICXDIwMlwzNDMAXDI2NgRcMjAyAwEBASFcMjYyBlwyMTBcMjEwBglUXDI2MgoDAkJcMjYyAlwy
MTBcMzE3XDIwMjYAXDIxMFwyNjZcMjAzXDIzN1wyMzcBXDI0NFwyNjIBA1RcMjYyBAJBXDI2MgNc
MjAyEABcMjExXDIzNylcMjA3IiBbbmlsICgobmFtZSAuICJFbWFjcyBDb21tYW5kcyBoaXN0b3J5
IikgKGluaXQgI1swICJcMzAxXDMwMlwzMDNcMzAwIVwyMDMNAFwzMDAgXDIwMiQAXDMwNFwzMDAh
XDIwMyMAXDMwNVwzMDAhXDIwMyMAclwzMDBxXDIxMFwzMDYgKVwyMDIkAFwzMDBcIlwyMDciIFsj
WzAgIlwzMDJcMzAxXDIwNgYAXDMwM1wzMDBcMzA0XDIxMVwzMDUlXDIwNyIgW2NvbW1hbmRwIG5p
bCBoZWxtLWNvbXAtcmVhZC1nZXQtY2FuZGlkYXRlcyBleHRlbmRlZC1jb21tYW5kLWhpc3Rvcnkg
bmlsICIiXSA2XSBoZWxtLWluaXQtY2FuZGlkYXRlcy1pbi1idWZmZXIgZ2xvYmFsIGZ1bmN0aW9u
cCBidWZmZXJwIGJ1ZmZlci1saXZlLXAgYnVmZmVyLXN0cmluZ10gNF0pIChjYW5kaWRhdGVzIC4g
aGVsbS1jYW5kaWRhdGVzLWluLWJ1ZmZlcikgKGNsZWFudXAgLiBoZWxtLU0teC0tdW53aW5kLWZv
cm1zKSAoa2V5bWFwIGtleW1hcCAoa2V5bWFwICgxMyAuIGhlbG0tY29uZmlybS1hbmQtZXhpdC1t
aW5pYnVmZmVyKSkga2V5bWFwICgyOSAuIGhlbG0tTS14LXRvZ2dsZS1zaG9ydC1kb2MpICgyMSAu
IGhlbG0tTS14LXVuaXZlcnNhbC1hcmd1bWVudCkga2V5bWFwICgyNyBrZXltYXAgKDEzIC4gaGVs
bS1jci1lbXB0eS1zdHJpbmcpKSAoQy1yZXR1cm4gLiBoZWxtLWNyLWVtcHR5LXN0cmluZykga2V5
bWFwICgyMSAuIGhlbG0tZXhlY3V0ZS1wZXJzaXN0ZW50LWFjdGlvbikgKGYxMiAuICNbMCAiXDMw
MVwzMDAhXDIwNyIgWzExIGhlbG0tc2VsZWN0LW50aC1hY3Rpb25dIDIgbmlsIG5pbF0pIChmMTEg
LiAjWzAgIlwzMDFcMzAwIVwyMDciIFsxMCBoZWxtLXNlbGVjdC1udGgtYWN0aW9uXSAyIG5pbCBu
aWxdKSAoZjEwIC4gI1swICJcMzAxXDMwMCFcMjA3IiBbOSBoZWxtLXNlbGVjdC1udGgtYWN0aW9u
XSAyIG5pbCBuaWxdKSAoZjkgLiAjWzAgIlwzMDFcMzAwIVwyMDciIFs4IGhlbG0tc2VsZWN0LW50
aC1hY3Rpb25dIDIgbmlsIG5pbF0pIChmOCAuICNbMCAiXDMwMVwzMDAhXDIwNyIgWzcgaGVsbS1z
ZWxlY3QtbnRoLWFjdGlvbl0gMiBuaWwgbmlsXSkgKGY3IC4gI1swICJcMzAxXDMwMCFcMjA3IiBb
NiBoZWxtLXNlbGVjdC1udGgtYWN0aW9uXSAyIG5pbCBuaWxdKSAoZjYgLiAjWzAgIlwzMDFcMzAw
IVwyMDciIFs1IGhlbG0tc2VsZWN0LW50aC1hY3Rpb25dIDIgbmlsIG5pbF0pIChmNSAuICNbMCAi
XDMwMVwzMDAhXDIwNyIgWzQgaGVsbS1zZWxlY3QtbnRoLWFjdGlvbl0gMiBuaWwgbmlsXSkgKGY0
IC4gI1swICJcMzAxXDMwMCFcMjA3IiBbMyBoZWxtLXNlbGVjdC1udGgtYWN0aW9uXSAyIG5pbCBu
aWxdKSAoZjMgLiAjWzAgIlwzMDFcMzAwIVwyMDciIFsyIGhlbG0tc2VsZWN0LW50aC1hY3Rpb25d
IDIgbmlsIG5pbF0pIChmMiAuICNbMCAiXDMwMVwzMDAhXDIwNyIgWzEgaGVsbS1zZWxlY3QtbnRo
LWFjdGlvbl0gMiBuaWwgbmlsXSkgKG1lbnUtYmFyIGtleW1hcCAoaGVscC1tZW51IGtleW1hcCAo
ZGVzY3JpYmUga2V5bWFwIChkZXNjcmliZS1tb2RlIC4gaGVsbS1oZWxwKSkpKSAoaGVscCBrZXlt
YXAgKDEwOSAuIGhlbG0taGVscCkpICgyMyAuIGhlbG0taGVsbS15YW5rLXRleHQtYXQtcG9pbnQt
d2l0aC1zdWJrZXlzKSAoZjEgLiAjWzAgIlwzMDFcMzAwIVwyMDciIFswIGhlbG0tc2VsZWN0LW50
aC1hY3Rpb25dIDIgbmlsIG5pbF0pICg4IC4gYmFja3dhcmQtZGVsZXRlLWNoYXItdW50YWJpZnkp
ICgyMCAuIGhlbG0tdG9nZ2xlLXJlc3BsaXQtYW5kLXN3YXAtd2luZG93cykgKEMtdGFiIC4gdW5k
ZWZpbmVkKSAoNjcxMDg4OTcgLiBoZWxtLXRvZ2dsZS1zdXNwZW5kLXVwZGF0ZSkgKDI2IC4gaGVs
bS10b2dnbGUtZnVsbC1mcmFtZSkgKDMga2V5bWFwICgzMzU1NDQ1NSAuIHlhbnQvdG9nZ2xlLXJl
ZmlsZS10by10YXNrcykgKDU3IC4gI1swICJcMzAyXDMwMVwyMDMLAFwzMDBUW1wyMDINAFwzMDBU
IVwyMDciIFs4IG5pbCBoZWxtLWV4ZWN1dGUtc2VsZWN0aW9uLWFjdGlvbi1hdC1udGhdIDIgbmls
IG5pbF0pICg1NiAuICNbMCAiXDMwMlwzMDFcMjAzCwBcMzAwVFtcMjAyDQBcMzAwVCFcMjA3IiBb
NyBuaWwgaGVsbS1leGVjdXRlLXNlbGVjdGlvbi1hY3Rpb24tYXQtbnRoXSAyIG5pbCBuaWxdKSAo
NTUgLiAjWzAgIlwzMDJcMzAxXDIwMwsAXDMwMFRbXDIwMg0AXDMwMFQhXDIwNyIgWzYgbmlsIGhl
bG0tZXhlY3V0ZS1zZWxlY3Rpb24tYWN0aW9uLWF0LW50aF0gMiBuaWwgbmlsXSkgKDU0IC4gI1sw
ICJcMzAyXDMwMVwyMDMLAFwzMDBUW1wyMDINAFwzMDBUIVwyMDciIFs1IG5pbCBoZWxtLWV4ZWN1
dGUtc2VsZWN0aW9uLWFjdGlvbi1hdC1udGhdIDIgbmlsIG5pbF0pICg1MyAuICNbMCAiXDMwMlwz
MDFcMjAzCwBcMzAwVFtcMjAyDQBcMzAwVCFcMjA3IiBbNCBuaWwgaGVsbS1leGVjdXRlLXNlbGVj
dGlvbi1hY3Rpb24tYXQtbnRoXSAyIG5pbCBuaWxdKSAoNTIgLiAjWzAgIlwzMDJcMzAxXDIwMwsA
XDMwMFRbXDIwMg0AXDMwMFQhXDIwNyIgWzMgbmlsIGhlbG0tZXhlY3V0ZS1zZWxlY3Rpb24tYWN0
aW9uLWF0LW50aF0gMiBuaWwgbmlsXSkgKDUxIC4gI1swICJcMzAyXDMwMVwyMDMLAFwzMDBUW1wy
MDINAFwzMDBUIVwyMDciIFsyIG5pbCBoZWxtLWV4ZWN1dGUtc2VsZWN0aW9uLWFjdGlvbi1hdC1u
dGhdIDIgbmlsIG5pbF0pICg1MCAuICNbMCAiXDMwMlwzMDFcMjAzCwBcMzAwVFtcMjAyDQBcMzAw
VCFcMjA3IiBbMSBuaWwgaGVsbS1leGVjdXRlLXNlbGVjdGlvbi1hY3Rpb24tYXQtbnRoXSAyIG5p
bCBuaWxdKSAoNDkgLiAjWzAgIlwzMDJcMzAxXDIwMwsAXDMwMFRbXDIwMg0AXDMwMFQhXDIwNyIg
WzAgbmlsIGhlbG0tZXhlY3V0ZS1zZWxlY3Rpb24tYWN0aW9uLWF0LW50aF0gMiBuaWwgbmlsXSkg
KDExMCAuIGhlbG0taGVsbS1ydW4tY3ljbGUtcmVzdW1lLXdpdGgtc3Via2V5cykgKDEwOCAuIGhl
bG0tZGlzcGxheS1saW5lLW51bWJlcnMtbW9kZSkgKDYyIC4gaGVsbS10b2dnbGUtdHJ1bmNhdGUt
bGluZSkgKDIxIC4gaGVsbS1yZWZyZXNoKSAoNiAuIGhlbG0tZm9sbG93LW1vZGUpICg5IC4gaGVs
bS1pbnNlcnQtb3ItY29weSkgKDExIC4gaGVsbS1raWxsLXNlbGVjdGlvbi1hbmQtcXVpdCkgKDI1
IC4gaGVsbS15YW5rLXNlbGVjdGlvbikgKDM3IC4gaGVsbS1leGNoYW5nZS1taW5pYnVmZmVyLWFu
ZC1oZWFkZXItbGluZSkgKDk1IC4gaGVsbS10b2dnbGUtZnVsbC1mcmFtZSkgKDQ1IC4gaGVsbS1z
d2FwLXdpbmRvd3MpKSAoNjcxMDg5ODcgLiBoZWxtLWVubGFyZ2Utd2luZG93KSAoNjcxMDg5ODkg
LiBoZWxtLW5hcnJvdy13aW5kb3cpICgxOCAuIHVuZGVmaW5lZCkgKDE5IC4gdW5kZWZpbmVkKSAo
MjQga2V5bWFwICg1NyAuICNbMCAiXDMwMlwzMDFcMjAzCwBcMzAwVFtcMjAyDQBcMzAwVCFcMjA3
IiBbOCBuZWdhdGl2ZSBoZWxtLWV4ZWN1dGUtc2VsZWN0aW9uLWFjdGlvbi1hdC1udGhdIDIgbmls
IG5pbF0pICg1NiAuICNbMCAiXDMwMlwzMDFcMjAzCwBcMzAwVFtcMjAyDQBcMzAwVCFcMjA3IiBb
NyBuZWdhdGl2ZSBoZWxtLWV4ZWN1dGUtc2VsZWN0aW9uLWFjdGlvbi1hdC1udGhdIDIgbmlsIG5p
bF0pICg1NSAuICNbMCAiXDMwMlwzMDFcMjAzCwBcMzAwVFtcMjAyDQBcMzAwVCFcMjA3IiBbNiBu
ZWdhdGl2ZSBoZWxtLWV4ZWN1dGUtc2VsZWN0aW9uLWFjdGlvbi1hdC1udGhdIDIgbmlsIG5pbF0p
ICg1NCAuICNbMCAiXDMwMlwzMDFcMjAzCwBcMzAwVFtcMjAyDQBcMzAwVCFcMjA3IiBbNSBuZWdh
dGl2ZSBoZWxtLWV4ZWN1dGUtc2VsZWN0aW9uLWFjdGlvbi1hdC1udGhdIDIgbmlsIG5pbF0pICg1
MyAuICNbMCAiXDMwMlwzMDFcMjAzCwBcMzAwVFtcMjAyDQBcMzAwVCFcMjA3IiBbNCBuZWdhdGl2
ZSBoZWxtLWV4ZWN1dGUtc2VsZWN0aW9uLWFjdGlvbi1hdC1udGhdIDIgbmlsIG5pbF0pICg1MiAu
ICNbMCAiXDMwMlwzMDFcMjAzCwBcMzAwVFtcMjAyDQBcMzAwVCFcMjA3IiBbMyBuZWdhdGl2ZSBo
ZWxtLWV4ZWN1dGUtc2VsZWN0aW9uLWFjdGlvbi1hdC1udGhdIDIgbmlsIG5pbF0pICg1MSAuICNb
MCAiXDMwMlwzMDFcMjAzCwBcMzAwVFtcMjAyDQBcMzAwVCFcMjA3IiBbMiBuZWdhdGl2ZSBoZWxt
LWV4ZWN1dGUtc2VsZWN0aW9uLWFjdGlvbi1hdC1udGhdIDIgbmlsIG5pbF0pICg1MCAuICNbMCAi
XDMwMlwzMDFcMjAzCwBcMzAwVFtcMjAyDQBcMzAwVCFcMjA3IiBbMSBuZWdhdGl2ZSBoZWxtLWV4
ZWN1dGUtc2VsZWN0aW9uLWFjdGlvbi1hdC1udGhdIDIgbmlsIG5pbF0pICg0OSAuICNbMCAiXDMw
MlwzMDFcMjAzCwBcMzAwVFtcMjAyDQBcMzAwVCFcMjA3IiBbMCBuZWdhdGl2ZSBoZWxtLWV4ZWN1
dGUtc2VsZWN0aW9uLWFjdGlvbi1hdC1udGhdIDIgbmlsIG5pbF0pICgyIC4gaGVsbS1yZXN1bWUt
bGlzdC1idWZmZXJzLWFmdGVyLXF1aXQpICg5OCAuIGhlbG0tcmVzdW1lLXByZXZpb3VzLXNlc3Np
b24tYWZ0ZXItcXVpdCkgKDYgLiBoZWxtLXF1aXQtYW5kLWZpbmQtZmlsZSkpICgxMjcgLiBoZWxt
LWRlbGV0ZS1jaGFyLWJhY2t3YXJkKSAoMTEgLiBoZWxtLWRlbGV0ZS1taW5pYnVmZmVyLWNvbnRl
bnRzKSAoNjcxMDg4OTYgLiBoZWxtLXRvZ2dsZS12aXNpYmxlLW1hcmstZm9yd2FyZCkgKDAgLiBo
ZWxtLXRvZ2dsZS12aXNpYmxlLW1hcmspIChDLU0tdXAgLiBoZWxtLXNjcm9sbC1vdGhlci13aW5k
b3ctZG93bikgKEMtTS1kb3duIC4gaGVsbS1zY3JvbGwtb3RoZXItd2luZG93KSAoTS1wcmlvciAu
IGhlbG0tc2Nyb2xsLW90aGVyLXdpbmRvdy1kb3duKSAoTS1uZXh0IC4gaGVsbS1zY3JvbGwtb3Ro
ZXItd2luZG93KSAoMTIgLiBoZWxtLXJlY2VudGVyLXRvcC1ib3R0b20tb3RoZXItd2luZG93KSAo
bGVmdCAuIGhlbG0tcHJldmlvdXMtc291cmNlKSAocmlnaHQgLiBoZWxtLW5leHQtc291cmNlKSAo
MTUgLiBoZWxtLW5leHQtc291cmNlKSAoMTAgLiBoZWxtLWV4ZWN1dGUtcGVyc2lzdGVudC1hY3Rp
b24pICg5IC4gaGVsbS1zZWxlY3QtYWN0aW9uKSAoMTMgLiBoZWxtLW1heWJlLWV4aXQtbWluaWJ1
ZmZlcikgKDcgLiBoZWxtLWtleWJvYXJkLXF1aXQpICgyMiAuIGhlbG0tc2Nyb2xsLWRvd24pICgy
NyBrZXltYXAgKDEwNCAuIGJhY2t3YXJkLWtpbGwtd29yZCkgKDggLiBiYWNrd2FyZC1raWxsLXdv
cmQpICgxMDggLiB5YW50L2hlbG0teWFuay1zZWxlY3Rpb24tb3ItZXhlY3V0ZS1wZXJzaXN0ZW50
LWFjdGlvbikgKDEwNSAuIGhlbG0tcHJldmlvdXMtc291cmNlKSAoMTA3IC4gaGVsbS1wcmV2aW91
cy1saW5lKSAoMTA2IC4gaGVsbS1uZXh0LWxpbmUpICgxMTQgLiB1bmRlZmluZWQpICgxMTAgLiBu
ZXh0LWhpc3RvcnktZWxlbWVudCkgKDExMiAuIHByZXZpb3VzLWhpc3RvcnktZWxlbWVudCkgKDE5
IC4gdW5kZWZpbmVkKSAoMTggLiB1bmRlZmluZWQpICgxMTUgLiB1bmRlZmluZWQpICg1IC4gaGVs
bS1kaXNwbGF5LWFsbC1zb3VyY2VzKSAoMSAuIGhlbG0tc2hvdy1hbGwtY2FuZGlkYXRlcy1pbi1z
b3VyY2UpICg4NSAuIGhlbG0tdW5tYXJrLWFsbCkgKDk3IC4gaGVsbS1tYXJrLWFsbCkgKDEwOSAu
IGhlbG0tdG9nZ2xlLWFsbC1tYXJrcykgKDQxIC4gaGVsbS1uZXh0LXZpc2libGUtbWFyaykgKDQw
IC4gaGVsbS1wcmV2LXZpc2libGUtbWFyaykgKDkxKSAoMzIgLiBoZWxtLXRvZ2dsZS12aXNpYmxl
LW1hcmstYmFja3dhcmQpICgzMzU1NDQ1NCAuIGhlbG0tc2Nyb2xsLW90aGVyLXdpbmRvdy1kb3du
KSAoMjUgLiBoZWxtLXNjcm9sbC1vdGhlci13aW5kb3ctZG93bikgKDIyIC4gaGVsbS1zY3JvbGwt
b3RoZXItd2luZG93KSAoMTIgLiBoZWxtLXJlcG9zaXRpb24td2luZG93LW90aGVyLXdpbmRvdykg
KDExMSAuIGhlbG0tbmV4dC1zb3VyY2UpICg2MiAuIGhlbG0tZW5kLW9mLWJ1ZmZlcikgKDYwIC4g
aGVsbS1iZWdpbm5pbmctb2YtYnVmZmVyKSAoMTE4IC4gaGVsbS1zY3JvbGwtdXApKSAobmV4dCAu
IGhlbG0tbmV4dC1wYWdlKSAocHJpb3IgLiBoZWxtLXByZXZpb3VzLXBhZ2UpIChDLXVwIC4gaGVs
bS1mb2xsb3ctYWN0aW9uLWJhY2t3YXJkKSAoQy1kb3duIC4gaGVsbS1mb2xsb3ctYWN0aW9uLWZv
cndhcmQpICgxNiAuIGhlbG0tcHJldmlvdXMtbGluZSkgKDE0IC4gaGVsbS1uZXh0LWxpbmUpICh1
cCAuIGhlbG0tcHJldmlvdXMtbGluZSkgKGRvd24gLiBoZWxtLW5leHQtbGluZSkga2V5bWFwICgx
OCAuIGhlbG0tbWluaWJ1ZmZlci1oaXN0b3J5KSAoZXNjYXBlIC4ga2V5Ym9hcmQtcXVpdCkgKG1l
bnUtYmFyIGtleW1hcCAobWluaWJ1ZiAiTWluaWJ1ZiIga2V5bWFwIChwcmV2aW91cyBtZW51LWl0
ZW0gIlByZXZpb3VzIEhpc3RvcnkgSXRlbSIgcHJldmlvdXMtaGlzdG9yeS1lbGVtZW50IDpoZWxw
ICJQdXQgcHJldmlvdXMgbWluaWJ1ZmZlciBoaXN0b3J5IGVsZW1lbnQgaW4gdGhlIG1pbmlidWZm
ZXIiKSAobmV4dCBtZW51LWl0ZW0gIk5leHQgSGlzdG9yeSBJdGVtIiBuZXh0LWhpc3RvcnktZWxl
bWVudCA6aGVscCAiUHV0IG5leHQgbWluaWJ1ZmZlciBoaXN0b3J5IGVsZW1lbnQgaW4gdGhlIG1p
bmlidWZmZXIiKSAoaXNlYXJjaC1iYWNrd2FyZCBtZW51LWl0ZW0gIklzZWFyY2ggSGlzdG9yeSBC
YWNrd2FyZCIgaXNlYXJjaC1iYWNrd2FyZCA6aGVscCAiSW5jcmVtZW50YWxseSBzZWFyY2ggbWlu
aWJ1ZmZlciBoaXN0b3J5IGJhY2t3YXJkIikgKGlzZWFyY2gtZm9yd2FyZCBtZW51LWl0ZW0gIklz
ZWFyY2ggSGlzdG9yeSBGb3J3YXJkIiBpc2VhcmNoLWZvcndhcmQgOmhlbHAgIkluY3JlbWVudGFs
bHkgc2VhcmNoIG1pbmlidWZmZXIgaGlzdG9yeSBmb3J3YXJkIikgKHJldHVybiBtZW51LWl0ZW0g
IkVudGVyIiBleGl0LW1pbmlidWZmZXIgOmtleS1zZXF1ZW5jZSAiDSIgOmhlbHAgIlRlcm1pbmF0
ZSBpbnB1dCBhbmQgZXhpdCBtaW5pYnVmZmVyIikgKHF1aXQgbWVudS1pdGVtICJRdWl0IiBhYm9y
dC1yZWN1cnNpdmUtZWRpdCA6aGVscCAiQWJvcnQgaW5wdXQgYW5kIGV4aXQgbWluaWJ1ZmZlciIp
ICJNaW5pYnVmIikpICgyNCBrZXltYXAgKGRvd24gLiBtaW5pYnVmZmVyLWNvbXBsZXRlLWRlZmF1
bHRzKSAodXAgLiBtaW5pYnVmZmVyLWNvbXBsZXRlLWhpc3RvcnkpKSAoMTMgLiBleGl0LW1pbmli
dWZmZXIpICgxMCAuIGV4aXQtbWluaWJ1ZmZlcikgKDcgLiBhYm9ydC1taW5pYnVmZmVycykgKEMt
dGFiIC4gZmlsZS1jYWNoZS1taW5pYnVmZmVyLWNvbXBsZXRlKSAoOSAuIHNlbGYtaW5zZXJ0LWNv
bW1hbmQpIChYRjg2QmFjayAuIHByZXZpb3VzLWhpc3RvcnktZWxlbWVudCkgKHVwIC4gcHJldmlv
dXMtbGluZS1vci1oaXN0b3J5LWVsZW1lbnQpIChwcmlvciAuIHByZXZpb3VzLWhpc3RvcnktZWxl
bWVudCkgKFhGODZGb3J3YXJkIC4gbmV4dC1oaXN0b3J5LWVsZW1lbnQpIChkb3duIC4gbmV4dC1s
aW5lLW9yLWhpc3RvcnktZWxlbWVudCkgKG5leHQgLiBuZXh0LWhpc3RvcnktZWxlbWVudCkgKDI3
IGtleW1hcCAoMTA1IC4gcGFyZWRpdC1jb252b2x1dGUtc2V4cCkgKDExMSAuIHBhcmVkaXQtZm9y
d2FyZC1zbHVycC1zZXhwKSAoNjAgLiBtaW5pYnVmZmVyLWJlZ2lubmluZy1vZi1idWZmZXIpICgx
MTQgLiBwcmV2aW91cy1tYXRjaGluZy1oaXN0b3J5LWVsZW1lbnQpICgxMTUgLiBuZXh0LW1hdGNo
aW5nLWhpc3RvcnktZWxlbWVudCkgKDExMiAuIHByZXZpb3VzLWhpc3RvcnktZWxlbWVudCkgKDEx
MCAuIG5leHQtaGlzdG9yeS1lbGVtZW50KSkpIChhY3Rpb24gLiBoZWxtLXR5cGUtY29tbWFuZC1h
Y3Rpb25zKSAocGVyc2lzdGVudC1hY3Rpb24gLiBoZWxtLU0teC1wZXJzaXN0ZW50LWFjdGlvbikg
KHBlcnNpc3RlbnQtaGVscCAuICJEZXNjcmliZSB0aGlzIGNvbW1hbmQiKSAoaGVscC1tZXNzYWdl
IC4gaGVsbS1NLXgtaGVscC1tZXNzYWdlKSAocmVxdWlyZXMtcGF0dGVybiAuIDApIChmaWx0ZXJl
ZC1jYW5kaWRhdGUtdHJhbnNmb3JtZXIgaGVsbS1NLXgtdHJhbnNmb3JtZXIgIzxzdWJyIEY2MTZl
NmY2ZTc5NmQ2Zjc1NzMyZDZjNjE2ZDYyNjQ2MV9hbm9ueW1vdXNfbGFtYmRhXzIwPiBoZWxtLWZ1
enp5LWhpZ2hsaWdodC1tYXRjaGVzKSAodm9sYXRpbGUgLiB0KSAobWF0Y2ggaWRlbnRpdHkpIChm
dXp6eS1tYXRjaCAuIHQpIChyZWRpc3BsYXkgLiBpZGVudGl0eSkgKG5vbWFyayAuIHQpIChjb2Vy
Y2UgLiBoZWxtLXN5bWJvbGlmeSkgKGhlYWRlci1saW5lIC4gIygiQy11OiBEZXNjcmliZSB0aGlz
IGNvbW1hbmQgKGtlZXBpbmcgc2Vzc2lvbikiIDAgMyAoZm9udC1sb2NrLWZhY2UgaGVscC1rZXkt
YmluZGluZyBmYWNlIGhlbHAta2V5LWJpbmRpbmcpKSkgKHJlc3VtZSAuIGhlbG0tTS14LXJlc3Vt
ZS1mbikgKG11bHRpbWF0Y2ggLiB0KSAobXVzdC1tYXRjaCAuIHQpIChncm91cCAuIGhlbG0tY29t
bWFuZCkgKGRhdGEgLiAjWzAgIlwzMDJcMzAxXDIwNgYAXDMwM1wzMDBcMzA0XDIxMVwzMDUlXDIw
NyIgW2NvbW1hbmRwIG5pbCBoZWxtLWNvbXAtcmVhZC1nZXQtY2FuZGlkYXRlcyBleHRlbmRlZC1j
b21tYW5kLWhpc3RvcnkgbmlsICIiXSA2XSkgKGdldC1saW5lIC4gYnVmZmVyLXN1YnN0cmluZy1u
by1wcm9wZXJ0aWVzKSAoc2VhcmNoIGhlbG0tbW0tZXhhY3Qtc2VhcmNoIGhlbG0tbW0tc2VhcmNo
IGhlbG0tY2FuZGlkYXRlcy1pbi1idWZmZXItc2VhcmNoLWRlZmF1bHQtZm4gaGVsbS1mdXp6eS1z
ZWFyY2gpKSBuaWwgMCAxNTAgKGhlbG0tbW0tZXhhY3Qtc2VhcmNoIGhlbG0tbW0tc2VhcmNoIGhl
bG0tY2FuZGlkYXRlcy1pbi1idWZmZXItc2VhcmNoLWRlZmF1bHQtZm4gaGVsbS1mdXp6eS1zZWFy
Y2gpIGJ1ZmZlci1zdWJzdHJpbmctbm8tcHJvcGVydGllcyAicCIgbWFrZS1oYXNoLXRhYmxlIDp0
ZXN0IGVxdWFsIGFsbG93LWR1cHMgaGVsbS1zZXQtY2FzZS1mb2xkLXNlYXJjaCAwIDEgbmlsIChp
bnZhbGlkLXJlZ2V4cCkgbG9va2luZy1hdCBhcHBseSBwb3MtYm9sIHBvcy1lb2wgZ2V0LXRleHQt
cHJvcGVydHkgbWF0Y2gtcGFydCBwcm9wZXJ0aXplIGdldGhhc2ggIiIgaGVsbS1zZWFyY2gtbWF0
Y2gtcGFydCBwdXRoYXNoIGFzc29jLWRlZmF1bHQgZmlsdGVyLW9uZS1ieS1vbmUgZnVuY3Rpb25w
IGNhc2UtZm9sZC1zZWFyY2hdIDE4XSBjYXRlZ29yeSB0IGZvbGxvdy1saW5rIHQgYnV0dG9uIHQg
aGVscC1lY2hvICJtb3VzZS0yLCBSRVQ6IERpc3BsYXkgdGhlIGZ1bmN0aW9uJ3MgYm9keSIgbW91
c2UtZmFjZSBoaWdobGlnaHQgZm9udC1sb2NrLWZhY2UgYnV0dG9uIGZhY2UgYnV0dG9uKSkgIygi
aGVsbS0tc2VhcmNoLWZyb20tY2FuZGlkYXRlLWJ1ZmZlci0xIiAwIDM2IChoZWxwLWFyZ3MgKGhl
bG0tLXNlYXJjaC1mcm9tLWNhbmRpZGF0ZS1idWZmZXItMSkgY2F0ZWdvcnkgaGVscC1mdW5jdGlv
bi1idXR0b24gYnV0dG9uICh0KSkpICMoImhlbG0tc2VhcmNoLWZyb20tY2FuZGlkYXRlLWJ1ZmZl
ciIgMCAzMyAoaGVscC1hcmdzIChoZWxtLXNlYXJjaC1mcm9tLWNhbmRpZGF0ZS1idWZmZXIpIGNh
dGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJoZWxtLWNhbmRpZGF0
ZXMtaW4tYnVmZmVyLTEiIDAgMjcgKGhlbHAtYXJncyAoaGVsbS1jYW5kaWRhdGVzLWluLWJ1ZmZl
ci0xKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygiaGVsbS1j
YW5kaWRhdGVzLWluLWJ1ZmZlciIgMCAyNSAoaGVscC1hcmdzIChoZWxtLWNhbmRpZGF0ZXMtaW4t
YnVmZmVyKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygiaGVs
bS1hcHBseS1mdW5jdGlvbnMtZnJvbS1zb3VyY2UiIDAgMzIgKGhlbHAtYXJncyAoaGVsbS1hcHBs
eS1mdW5jdGlvbnMtZnJvbS1zb3VyY2UpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1
dHRvbiAodCkpKSAjKCJoZWxtLWludGVycHJldC12YWx1ZSIgMCAyMCAoaGVscC1hcmdzIChoZWxt
LWludGVycHJldC12YWx1ZSkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0
KSkpICMoImhlbG0tZ2V0LWNhbmRpZGF0ZXMiIDAgMTkgKGhlbHAtYXJncyAoaGVsbS1nZXQtY2Fu
ZGlkYXRlcykgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImhl
bG0tZ2V0LWNhY2hlZC1jYW5kaWRhdGVzIiAwIDI2IChoZWxwLWFyZ3MgKGhlbG0tZ2V0LWNhY2hl
ZC1jYW5kaWRhdGVzKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkg
IygiaGVsbS1jb21wdXRlLW1hdGNoZXMiIDAgMjAgKGhlbHAtYXJncyAoaGVsbS1jb21wdXRlLW1h
dGNoZXMpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJoZWxt
LS1jb2xsZWN0LW1hdGNoZXMiIDAgMjEgKGhlbHAtYXJncyAoaGVsbS0tY29sbGVjdC1tYXRjaGVz
KSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygiaGVsbS11cGRh
dGUiIDAgMTEgKGhlbHAtYXJncyAoaGVsbS11cGRhdGUpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24t
YnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJoZWxtLWNoZWNrLW5ldy1pbnB1dCIgMCAyMCAoaGVscC1h
cmdzIChoZWxtLWNoZWNrLW5ldy1pbnB1dCkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24g
YnV0dG9uICh0KSkpICMoImhlbG0tY2hlY2stbWluaWJ1ZmZlci1pbnB1dCIgMCAyNyAoaGVscC1h
cmdzIChoZWxtLWNoZWNrLW1pbmlidWZmZXItaW5wdXQpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24t
YnV0dG9uIGJ1dHRvbiAodCkpKV0gMyBbIygid2hlcmUtaXMtaW50ZXJuYWwiIDAgMTcgKGhlbHAt
YXJncyAod2hlcmUtaXMtaW50ZXJuYWwpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1
dHRvbiAodCkpKSAjKCJzdWJzdGl0dXRlLWNvbW1hbmQta2V5cyIgMCAyMyAoaGVscC1hcmdzIChz
dWJzdGl0dXRlLWNvbW1hbmQta2V5cykgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0
dG9uICh0KSkpICMoImhlbG0tTS14LXRyYW5zZm9ybWVyLTEiIDAgMjIgKGhlbHAtYXJncyAoaGVs
bS1NLXgtdHJhbnNmb3JtZXItMSkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9u
ICh0KSkpICMoImhlbG0tTS14LXRyYW5zZm9ybWVyIiAwIDIwIChoZWxwLWFyZ3MgKGhlbG0tTS14
LXRyYW5zZm9ybWVyKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkg
IygiaGVsbS1hcHBseS1mdW5jdGlvbnMtZnJvbS1zb3VyY2UiIDAgMzIgKGhlbHAtYXJncyAoaGVs
bS1hcHBseS1mdW5jdGlvbnMtZnJvbS1zb3VyY2UpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0
dG9uIGJ1dHRvbiAodCkpKSAjKCJoZWxtLXByb2Nlc3MtZmlsdGVyZWQtY2FuZGlkYXRlLXRyYW5z
Zm9ybWVyIiAwIDQzIChoZWxwLWFyZ3MgKGhlbG0tcHJvY2Vzcy1maWx0ZXJlZC1jYW5kaWRhdGUt
dHJhbnNmb3JtZXIpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAj
KCJoZWxtLWNvbXB1dGUtbWF0Y2hlcyIgMCAyMCAoaGVscC1hcmdzIChoZWxtLWNvbXB1dGUtbWF0
Y2hlcykgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImhlbG0t
LWNvbGxlY3QtbWF0Y2hlcyIgMCAyMSAoaGVscC1hcmdzIChoZWxtLS1jb2xsZWN0LW1hdGNoZXMp
IGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJoZWxtLXVwZGF0
ZSIgMCAxMSAoaGVscC1hcmdzIChoZWxtLXVwZGF0ZSkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1i
dXR0b24gYnV0dG9uICh0KSkpICMoImhlbG0tY2hlY2stbmV3LWlucHV0IiAwIDIwIChoZWxwLWFy
Z3MgKGhlbG0tY2hlY2stbmV3LWlucHV0KSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBi
dXR0b24gKHQpKSkgIygiaGVsbS1jaGVjay1taW5pYnVmZmVyLWlucHV0IiAwIDI3IChoZWxwLWFy
Z3MgKGhlbG0tY2hlY2stbWluaWJ1ZmZlci1pbnB1dCkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1i
dXR0b24gYnV0dG9uICh0KSkpICMoIiM8Y29tcGlsZWQtZnVuY3Rpb24gNDJGPiIgMjAgMjMgKGFj
dGlvbiBoZWxwLWZucy0tZGlzcGxheS1mdW5jdGlvbiBrZXltYXAgKGtleW1hcCAodG91Y2hzY3Jl
ZW4tZG93biAuIHB1c2gtYnV0dG9uKSAoaGVhZGVyLWxpbmUga2V5bWFwICh0b3VjaHNjcmVlbi1k
b3duIC4gcHVzaC1idXR0b24pIChtb3VzZS0yIC4gcHVzaC1idXR0b24pKSAobW9kZS1saW5lIGtl
eW1hcCAodG91Y2hzY3JlZW4tZG93biAuIHB1c2gtYnV0dG9uKSAobW91c2UtMiAuIHB1c2gtYnV0
dG9uKSkgKGZvbGxvdy1saW5rIC4gbW91c2UtZmFjZSkgKG1vdXNlLTIgLiBwdXNoLWJ1dHRvbikg
KDEzIC4gcHVzaC1idXR0b24pIGtleW1hcCAoYmFja3RhYiAuIGJhY2t3YXJkLWJ1dHRvbikgKDI3
IGtleW1hcCAoOSAuIGJhY2t3YXJkLWJ1dHRvbikpICg5IC4gZm9yd2FyZC1idXR0b24pKSBidXR0
b24tZGF0YSAjWzAgIghcMjA2BQAJP1wyMDUZAFwzMDIgclwzMDNcMzA0AlwiXDIxNlwzMDUgXDIx
MFwzMDYgKlwyNjIBXDIwNyIgW2hlbG0taW4tcGVyc2lzdGVudC1hY3Rpb24gaGVsbS1zdXNwZW5k
LXVwZGF0ZS1mbGFnIGludGVybmFsLS1iZWZvcmUtc2F2ZS1zZWxlY3RlZC13aW5kb3cgbWFrZS1j
bG9zdXJlICNbMCAiXDMwMVwzMDAhXDIwNyIgW1YwIGludGVybmFsLS1hZnRlci1zYXZlLXNlbGVj
dGVkLXdpbmRvd10gMl0gaGVsbS1jaGVjay1taW5pYnVmZmVyLWlucHV0IGhlbG0tcHJpbnQtZXJy
b3ItbWVzc2FnZXNdIDRdIGNhdGVnb3J5IHQgZm9sbG93LWxpbmsgdCBidXR0b24gdCBoZWxwLWVj
aG8gIm1vdXNlLTIsIFJFVDogRGlzcGxheSB0aGUgZnVuY3Rpb24ncyBib2R5IiBtb3VzZS1mYWNl
IGhpZ2hsaWdodCBmb250LWxvY2stZmFjZSBidXR0b24gZmFjZSBidXR0b24pKSAjKCJhcHBseSIg
MCA1IChoZWxwLWFyZ3MgKGFwcGx5KSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0
b24gKHQpKSkgIygidGltZXItZXZlbnQtaGFuZGxlciIgMCAxOSAoaGVscC1hcmdzICh0aW1lci1l
dmVudC1oYW5kbGVyKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkg
IygiaGVsbS1yZWFkLWZyb20tbWluaWJ1ZmZlciIgMCAyNSAoaGVscC1hcmdzIChoZWxtLXJlYWQt
ZnJvbS1taW5pYnVmZmVyKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQp
KSkgIygiaGVsbS1pbnRlcm5hbCIgMCAxMyAoaGVscC1hcmdzIChoZWxtLWludGVybmFsKSBjYXRl
Z29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSldIDE0IFsjKCJjb21wbGV0aW9u
LXBjbS0tcGF0dGVybi0+cmVnZXgiIDAgMzAgKGhlbHAtYXJncyAoY29tcGxldGlvbi1wY20tLXBh
dHRlcm4tPnJlZ2V4KSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkg
IygiaGVsbS0tZnV6enktZmxleC1wYXR0ZXJuLXRvLXJlZ2V4cCIgMCAzNCAoaGVscC1hcmdzICho
ZWxtLS1mdXp6eS1mbGV4LXBhdHRlcm4tdG8tcmVnZXhwKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9u
LWJ1dHRvbiBidXR0b24gKHQpKSkgIygiaGVsbS1mdXp6eS1mbGV4LXN0eWxlLXNjb3JlIiAwIDI3
IChoZWxwLWFyZ3MgKGhlbG0tZnV6enktZmxleC1zdHlsZS1zY29yZSkgY2F0ZWdvcnkgaGVscC1m
dW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImhlbG0tc2NvcmUtY2FuZGlkYXRlLWZvci1w
YXR0ZXJuIiAwIDMyIChoZWxwLWFyZ3MgKGhlbG0tc2NvcmUtY2FuZGlkYXRlLWZvci1wYXR0ZXJu
KSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygiIzxjb21waWxl
ZC1mdW5jdGlvbiAyMEI+IiAyMCAyMyAoYWN0aW9uIGhlbHAtZm5zLS1kaXNwbGF5LWZ1bmN0aW9u
IGtleW1hcCAoa2V5bWFwICh0b3VjaHNjcmVlbi1kb3duIC4gcHVzaC1idXR0b24pIChoZWFkZXIt
bGluZSBrZXltYXAgKHRvdWNoc2NyZWVuLWRvd24gLiBwdXNoLWJ1dHRvbikgKG1vdXNlLTIgLiBw
dXNoLWJ1dHRvbikpIChtb2RlLWxpbmUga2V5bWFwICh0b3VjaHNjcmVlbi1kb3duIC4gcHVzaC1i
dXR0b24pIChtb3VzZS0yIC4gcHVzaC1idXR0b24pKSAoZm9sbG93LWxpbmsgLiBtb3VzZS1mYWNl
KSAobW91c2UtMiAuIHB1c2gtYnV0dG9uKSAoMTMgLiBwdXNoLWJ1dHRvbikga2V5bWFwIChiYWNr
dGFiIC4gYmFja3dhcmQtYnV0dG9uKSAoMjcga2V5bWFwICg5IC4gYmFja3dhcmQtYnV0dG9uKSkg
KDkgLiBmb3J3YXJkLWJ1dHRvbikpIGJ1dHRvbi1kYXRhICNbNTE0ICJcMzAzXDIwMwgAXDMwNVwy
MDIJAFwzMDZcMzAyXDIwMxoAAjpcMjAzGgBcMzA3AQQhIVwyMDIwAAI6XDIwMyUAXDIxMQMhXDIw
MjAAXDMwMlwyMDMvAFwzMDcDIVwyMDIwAAJcMzAyXDIwM0EAAjpcMjAzQQBcMzA3AgQhIVwyMDJX
AAI6XDIwM0wAAQMhXDIwMlcAXDMwMlwyMDNWAFwzMDcDIVwyMDJXAAJcMzEwAlwzMDBcIlwyMDZr
AFwzMTECXDMxMgQMXCJcMzEzBSFHRFwzMDAjXDMxMAJcMzAwXCJcMjA2fwBcMzExAlwzMTIEDFwi
XDMxMwUhR0RcMzAwIwFBQAFBQANAA0ABAVVcMjAzXDIzMABcMzAxP1wyMDVcMjMzAAMDV1wyMDcB
AVZcMjA3IiBbI3MoaGFzaC10YWJsZSB0ZXN0IGVxdWFsIGRhdGEgKCJwaWVtLWFtIiAoMC4xNDI4
NTcxNDI4NTcxNDI4NSA3KSAicHJvZmlsZXItc3RhcnQiICgwLjA3MTQyODU3MTQyODU3MTQyIDE0
KSAib3JnLWNhcHR1cmUtcmVmLWNhcHR1cmUtZG9pIiAoMC4wIDI3KSAicHJvZmlsZXItcmVwb3J0
IiAoMC4wNjY2NjY2NjY2NjY2NjY2NyAxNSkgInByb2ZpbGVyLXN0b3AiICgwLjA3NjkyMzA3Njky
MzA3NjkzIDEzKSAib3JnLWNhcHR1cmUtcmVmLWNhcHR1cmUtYXQtcG9pbnQiICgwLjAgMzIpICJi
eXRlLWNvbXBpbGUtZmlsZSIgKDAuMCAxNykgInBhcmVkaXQtbW9kZSIgKDAuMDgzMzMzMzMzMzMz
MzMzMzMgMTIpICJvcmctc3VibWl0LWJ1Zy1yZXBvcnQiICgwLjAgMjEpICJjb21wYW55LW1vZGUi
ICgwLjAgMTIpICJhcHJvcG9zLWZ1bmN0aW9uIiAoMC4wIDE2KSAic3RyYWlnaHQtdXNlLXBhY2th
Z2UiICgwLjAgMjApICJvcmctdGltZXN0YW1wIiAoMC4wIDEzKSAicGRmLXZpZXctbW9kZSIgKDAu
MDc2OTIzMDc2OTIzMDc2OTMgMTMpICJzdHJhaWdodC1yZWJ1aWxkLXBhY2thZ2UiICgwLjAgMjQp
ICJlbWFjcy1saXNwLW1vZGUiICgwLjAgMTUpKSkgbmlsIG5pbCB0IGhlbG0tcGF0dGVybiBjZHIg
Y2FyIGhlbG0tYmFzZW5hbWUgZ2V0aGFzaCBwdXRoYXNoIGhlbG0tc2NvcmUtY2FuZGlkYXRlLWZv
ci1wYXR0ZXJuIGhlbG0tc3RyaW5naWZ5XSAxMyAiCgooZm4gUzEgUzIpIl0gY2F0ZWdvcnkgdCBm
b2xsb3ctbGluayB0IGJ1dHRvbiB0IGhlbHAtZWNobyAibW91c2UtMiwgUkVUOiBEaXNwbGF5IHRo
ZSBmdW5jdGlvbidzIGJvZHkiIG1vdXNlLWZhY2UgaGlnaGxpZ2h0IGZvbnQtbG9jay1mYWNlIGJ1
dHRvbiBmYWNlIGJ1dHRvbikpICMoImhlbG0tZnV6enktbWF0Y2hpbmctZGVmYXVsdC1zb3J0LWZu
LTEiIDAgMzcgKGhlbHAtYXJncyAoaGVsbS1mdXp6eS1tYXRjaGluZy1kZWZhdWx0LXNvcnQtZm4t
MSkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoIiM8c3Vici1u
YXRpdmUtZWxpc3AgRjYxNmU2ZjZlNzk2ZDZmNzU3MzJkNmM2MTZkNjI2NDYxX2Fub255bW91c19s
YW1iZGFfMjA+IiAyMCA3MyAoYnV0dG9uICh0KSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRv
biBoZWxwLWFyZ3MgKEY2MTZlNmY2ZTc5NmQ2Zjc1NzMyZDZjNjE2ZDYyNjQ2MV9hbm9ueW1vdXNf
bGFtYmRhXzIwKSkpICMoImhlbG0tYXBwbHktZnVuY3Rpb25zLWZyb20tc291cmNlIiAwIDMyICho
ZWxwLWFyZ3MgKGhlbG0tYXBwbHktZnVuY3Rpb25zLWZyb20tc291cmNlKSBjYXRlZ29yeSBoZWxw
LWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygiaGVsbS1wcm9jZXNzLWZpbHRlcmVkLWNh
bmRpZGF0ZS10cmFuc2Zvcm1lciIgMCA0MyAoaGVscC1hcmdzIChoZWxtLXByb2Nlc3MtZmlsdGVy
ZWQtY2FuZGlkYXRlLXRyYW5zZm9ybWVyKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBi
dXR0b24gKHQpKSkgIygiaGVsbS1jb21wdXRlLW1hdGNoZXMiIDAgMjAgKGhlbHAtYXJncyAoaGVs
bS1jb21wdXRlLW1hdGNoZXMpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAo
dCkpKSAjKCJoZWxtLS1jb2xsZWN0LW1hdGNoZXMiIDAgMjEgKGhlbHAtYXJncyAoaGVsbS0tY29s
bGVjdC1tYXRjaGVzKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkg
IygiaGVsbS11cGRhdGUiIDAgMTEgKGhlbHAtYXJncyAoaGVsbS11cGRhdGUpIGNhdGVnb3J5IGhl
bHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJoZWxtLWNoZWNrLW5ldy1pbnB1dCIg
MCAyMCAoaGVscC1hcmdzIChoZWxtLWNoZWNrLW5ldy1pbnB1dCkgY2F0ZWdvcnkgaGVscC1mdW5j
dGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImhlbG0tY2hlY2stbWluaWJ1ZmZlci1pbnB1dCIg
MCAyNyAoaGVscC1hcmdzIChoZWxtLWNoZWNrLW1pbmlidWZmZXItaW5wdXQpIGNhdGVnb3J5IGhl
bHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCIjPGNvbXBpbGVkLWZ1bmN0aW9uIDQy
Rj4iIDIwIDIzIChhY3Rpb24gaGVscC1mbnMtLWRpc3BsYXktZnVuY3Rpb24ga2V5bWFwIChrZXlt
YXAgKHRvdWNoc2NyZWVuLWRvd24gLiBwdXNoLWJ1dHRvbikgKGhlYWRlci1saW5lIGtleW1hcCAo
dG91Y2hzY3JlZW4tZG93biAuIHB1c2gtYnV0dG9uKSAobW91c2UtMiAuIHB1c2gtYnV0dG9uKSkg
KG1vZGUtbGluZSBrZXltYXAgKHRvdWNoc2NyZWVuLWRvd24gLiBwdXNoLWJ1dHRvbikgKG1vdXNl
LTIgLiBwdXNoLWJ1dHRvbikpIChmb2xsb3ctbGluayAuIG1vdXNlLWZhY2UpIChtb3VzZS0yIC4g
cHVzaC1idXR0b24pICgxMyAuIHB1c2gtYnV0dG9uKSBrZXltYXAgKGJhY2t0YWIgLiBiYWNrd2Fy
ZC1idXR0b24pICgyNyBrZXltYXAgKDkgLiBiYWNrd2FyZC1idXR0b24pKSAoOSAuIGZvcndhcmQt
YnV0dG9uKSkgYnV0dG9uLWRhdGEgI1swICIIXDIwNgUACT9cMjA1GQBcMzAyIHJcMzAzXDMwNAJc
IlwyMTZcMzA1IFwyMTBcMzA2ICpcMjYyAVwyMDciIFtoZWxtLWluLXBlcnNpc3RlbnQtYWN0aW9u
IGhlbG0tc3VzcGVuZC11cGRhdGUtZmxhZyBpbnRlcm5hbC0tYmVmb3JlLXNhdmUtc2VsZWN0ZWQt
d2luZG93IG1ha2UtY2xvc3VyZSAjWzAgIlwzMDFcMzAwIVwyMDciIFtWMCBpbnRlcm5hbC0tYWZ0
ZXItc2F2ZS1zZWxlY3RlZC13aW5kb3ddIDJdIGhlbG0tY2hlY2stbWluaWJ1ZmZlci1pbnB1dCBo
ZWxtLXByaW50LWVycm9yLW1lc3NhZ2VzXSA0XSBjYXRlZ29yeSB0IGZvbGxvdy1saW5rIHQgYnV0
dG9uIHQgaGVscC1lY2hvICJtb3VzZS0yLCBSRVQ6IERpc3BsYXkgdGhlIGZ1bmN0aW9uJ3MgYm9k
eSIgbW91c2UtZmFjZSBoaWdobGlnaHQgZm9udC1sb2NrLWZhY2UgYnV0dG9uIGZhY2UgYnV0dG9u
KSkgIygiYXBwbHkiIDAgNSAoaGVscC1hcmdzIChhcHBseSkgY2F0ZWdvcnkgaGVscC1mdW5jdGlv
bi1idXR0b24gYnV0dG9uICh0KSkpXSAzIFsjKCJoZWxtLW1tLWV4YWN0LXNlYXJjaCIgMCAyMCAo
aGVscC1hcmdzIChoZWxtLW1tLWV4YWN0LXNlYXJjaCkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1i
dXR0b24gYnV0dG9uICh0KSkpICMoIiM8Y29tcGlsZWQtZnVuY3Rpb24gNzA5PiIgMjAgMjMgKGFj
dGlvbiBoZWxwLWZucy0tZGlzcGxheS1mdW5jdGlvbiBrZXltYXAgKGtleW1hcCAodG91Y2hzY3Jl
ZW4tZG93biAuIHB1c2gtYnV0dG9uKSAoaGVhZGVyLWxpbmUga2V5bWFwICh0b3VjaHNjcmVlbi1k
b3duIC4gcHVzaC1idXR0b24pIChtb3VzZS0yIC4gcHVzaC1idXR0b24pKSAobW9kZS1saW5lIGtl
eW1hcCAodG91Y2hzY3JlZW4tZG93biAuIHB1c2gtYnV0dG9uKSAobW91c2UtMiAuIHB1c2gtYnV0
dG9uKSkgKGZvbGxvdy1saW5rIC4gbW91c2UtZmFjZSkgKG1vdXNlLTIgLiBwdXNoLWJ1dHRvbikg
KDEzIC4gcHVzaC1idXR0b24pIGtleW1hcCAoYmFja3RhYiAuIGJhY2t3YXJkLWJ1dHRvbikgKDI3
IGtleW1hcCAoOSAuIGJhY2t3YXJkLWJ1dHRvbikpICg5IC4gZm9yd2FyZC1idXR0b24pKSBidXR0
b24tZGF0YSAjWzAgIlwzMTBcMzExXDMxMlwiXDMxM1wzMDFcMjM2XDMxNCAeH1wzMTVcMzE2XDMw
NVwzMTdcMjExAjpcMjAzJgECQFwyNjICXDMwM2JcMjEwXDMyMDEnAFwzMjFcMzA3ITBcMjAyKwBc
MjEwXDIwMjEAXDIwMzEAXDMxNnlcMjEwXDMxN1wyMTFcMjExXDIxMVwyMTEGBlwzMDchXDIxMVwy
NjIGXDIwMxIBBDpcMjAzTABcMzE2eVwzMTVVXDIwMk4AbT9cMjAzEgEGCVwzMDRXXDIwMxIBXDMy
MlwzMDYGBlwyMDNqAAYGPFwyMDNqAAYGXDIwMm8AXDMyMyBcMzI0IERcIlwyNjIEXDMwMlwyMDNc
MjExAFwzMjVcMzE1XDMyNgYGI1wyMDRcMjExAFwzMjcEXDMyNlwzMDIGByEjXDI2MgRcMzMwBAYN
XCJcMjYyAwYKXDIwM1wyNDAAAlwyMDNcMjQwAAIGCVVcMjA0XDI0NAACXDIwNA0BA1wzMzFcMjMw
XDIwNA0BXDMwMlwyMDRcMjYzAAQ6XDIwM1wyNzMAXDMzMgRcMzA3XDMwMCNcMjAzDQFcMzMzBAYK
Bg4jXDIxMFwzMzRcMzM1XDMwMVwiXDIxMVwyMDMCAQQ6XDIwM1wzMjUABEFcMjAyXDMyNgAEATxc
MjAzXDM3NABcMzM2AiFcMjA0XDM3NAABXDMxNwE6XDIwM1wzNjcAXDIxMFwyMTFAXDIxMQMhXDI2
MggBQVwyNjICXDIwMlwzNDMAXDI2NgRcMjAyAwEBASFcMjYyBlwyMTBcMjEwBglUXDI2MgoDAkJc
MjYyAlwyMTBcMzE3XDIwMjYAXDIxMFwyNjZcMjAzXDIzN1wyMzcBXDI0NFwyNjIBA1RcMjYyBAJB
XDI2MgNcMjAyEABcMjExXDIzNylcMjA3IiBbbmlsICgobmFtZSAuICJFbWFjcyBDb21tYW5kcyIp
IChpbml0ICNbMCAiXDMwMVwzMDJcMzAzXDMwMCFcMjAzDQBcMzAwIFwyMDIkAFwzMDRcMzAwIVwy
MDMjAFwzMDVcMzAwIVwyMDMjAHJcMzAwcVwyMTBcMzA2IClcMjAyJABcMzAwXCJcMjA3IiBbI1sw
ICJcMzAyXDMwMVwzMDBcMzAzXDIxMVwzMDQlXDIwNyIgW2NvbW1hbmRwICM8b2JhcnJheSBuPTk4
OTE5PiBoZWxtLWNvbXAtcmVhZC1nZXQtY2FuZGlkYXRlcyBuaWwgIiJdIDZdIGhlbG0taW5pdC1j
YW5kaWRhdGVzLWluLWJ1ZmZlciBnbG9iYWwgZnVuY3Rpb25wIGJ1ZmZlcnAgYnVmZmVyLWxpdmUt
cCBidWZmZXItc3RyaW5nXSA0XSkgKGNhbmRpZGF0ZXMgLiBoZWxtLWNhbmRpZGF0ZXMtaW4tYnVm
ZmVyKSAoY2xlYW51cCAuIGhlbG0tTS14LS11bndpbmQtZm9ybXMpIChrZXltYXAga2V5bWFwIChr
ZXltYXAgKDEzIC4gaGVsbS1jb25maXJtLWFuZC1leGl0LW1pbmlidWZmZXIpKSBrZXltYXAgKDI5
IC4gaGVsbS1NLXgtdG9nZ2xlLXNob3J0LWRvYykgKDIxIC4gaGVsbS1NLXgtdW5pdmVyc2FsLWFy
Z3VtZW50KSBrZXltYXAgKDI3IGtleW1hcCAoMTMgLiBoZWxtLWNyLWVtcHR5LXN0cmluZykpIChD
LXJldHVybiAuIGhlbG0tY3ItZW1wdHktc3RyaW5nKSBrZXltYXAgKDIxIC4gaGVsbS1leGVjdXRl
LXBlcnNpc3RlbnQtYWN0aW9uKSAoZjEyIC4gI1swICJcMzAxXDMwMCFcMjA3IiBbMTEgaGVsbS1z
ZWxlY3QtbnRoLWFjdGlvbl0gMiBuaWwgbmlsXSkgKGYxMSAuICNbMCAiXDMwMVwzMDAhXDIwNyIg
WzEwIGhlbG0tc2VsZWN0LW50aC1hY3Rpb25dIDIgbmlsIG5pbF0pIChmMTAgLiAjWzAgIlwzMDFc
MzAwIVwyMDciIFs5IGhlbG0tc2VsZWN0LW50aC1hY3Rpb25dIDIgbmlsIG5pbF0pIChmOSAuICNb
MCAiXDMwMVwzMDAhXDIwNyIgWzggaGVsbS1zZWxlY3QtbnRoLWFjdGlvbl0gMiBuaWwgbmlsXSkg
KGY4IC4gI1swICJcMzAxXDMwMCFcMjA3IiBbNyBoZWxtLXNlbGVjdC1udGgtYWN0aW9uXSAyIG5p
bCBuaWxdKSAoZjcgLiAjWzAgIlwzMDFcMzAwIVwyMDciIFs2IGhlbG0tc2VsZWN0LW50aC1hY3Rp
b25dIDIgbmlsIG5pbF0pIChmNiAuICNbMCAiXDMwMVwzMDAhXDIwNyIgWzUgaGVsbS1zZWxlY3Qt
bnRoLWFjdGlvbl0gMiBuaWwgbmlsXSkgKGY1IC4gI1swICJcMzAxXDMwMCFcMjA3IiBbNCBoZWxt
LXNlbGVjdC1udGgtYWN0aW9uXSAyIG5pbCBuaWxdKSAoZjQgLiAjWzAgIlwzMDFcMzAwIVwyMDci
IFszIGhlbG0tc2VsZWN0LW50aC1hY3Rpb25dIDIgbmlsIG5pbF0pIChmMyAuICNbMCAiXDMwMVwz
MDAhXDIwNyIgWzIgaGVsbS1zZWxlY3QtbnRoLWFjdGlvbl0gMiBuaWwgbmlsXSkgKGYyIC4gI1sw
ICJcMzAxXDMwMCFcMjA3IiBbMSBoZWxtLXNlbGVjdC1udGgtYWN0aW9uXSAyIG5pbCBuaWxdKSAo
bWVudS1iYXIga2V5bWFwIChoZWxwLW1lbnUga2V5bWFwIChkZXNjcmliZSBrZXltYXAgKGRlc2Ny
aWJlLW1vZGUgLiBoZWxtLWhlbHApKSkpIChoZWxwIGtleW1hcCAoMTA5IC4gaGVsbS1oZWxwKSkg
KDIzIC4gaGVsbS1oZWxtLXlhbmstdGV4dC1hdC1wb2ludC13aXRoLXN1YmtleXMpIChmMSAuICNb
MCAiXDMwMVwzMDAhXDIwNyIgWzAgaGVsbS1zZWxlY3QtbnRoLWFjdGlvbl0gMiBuaWwgbmlsXSkg
KDggLiBiYWNrd2FyZC1kZWxldGUtY2hhci11bnRhYmlmeSkgKDIwIC4gaGVsbS10b2dnbGUtcmVz
cGxpdC1hbmQtc3dhcC13aW5kb3dzKSAoQy10YWIgLiB1bmRlZmluZWQpICg2NzEwODg5NyAuIGhl
bG0tdG9nZ2xlLXN1c3BlbmQtdXBkYXRlKSAoMjYgLiBoZWxtLXRvZ2dsZS1mdWxsLWZyYW1lKSAo
MyBrZXltYXAgKDMzNTU0NDU1IC4geWFudC90b2dnbGUtcmVmaWxlLXRvLXRhc2tzKSAoNTcgLiAj
WzAgIlwzMDJcMzAxXDIwMwsAXDMwMFRbXDIwMg0AXDMwMFQhXDIwNyIgWzggbmlsIGhlbG0tZXhl
Y3V0ZS1zZWxlY3Rpb24tYWN0aW9uLWF0LW50aF0gMiBuaWwgbmlsXSkgKDU2IC4gI1swICJcMzAy
XDMwMVwyMDMLAFwzMDBUW1wyMDINAFwzMDBUIVwyMDciIFs3IG5pbCBoZWxtLWV4ZWN1dGUtc2Vs
ZWN0aW9uLWFjdGlvbi1hdC1udGhdIDIgbmlsIG5pbF0pICg1NSAuICNbMCAiXDMwMlwzMDFcMjAz
CwBcMzAwVFtcMjAyDQBcMzAwVCFcMjA3IiBbNiBuaWwgaGVsbS1leGVjdXRlLXNlbGVjdGlvbi1h
Y3Rpb24tYXQtbnRoXSAyIG5pbCBuaWxdKSAoNTQgLiAjWzAgIlwzMDJcMzAxXDIwMwsAXDMwMFRb
XDIwMg0AXDMwMFQhXDIwNyIgWzUgbmlsIGhlbG0tZXhlY3V0ZS1zZWxlY3Rpb24tYWN0aW9uLWF0
LW50aF0gMiBuaWwgbmlsXSkgKDUzIC4gI1swICJcMzAyXDMwMVwyMDMLAFwzMDBUW1wyMDINAFwz
MDBUIVwyMDciIFs0IG5pbCBoZWxtLWV4ZWN1dGUtc2VsZWN0aW9uLWFjdGlvbi1hdC1udGhdIDIg
bmlsIG5pbF0pICg1MiAuICNbMCAiXDMwMlwzMDFcMjAzCwBcMzAwVFtcMjAyDQBcMzAwVCFcMjA3
IiBbMyBuaWwgaGVsbS1leGVjdXRlLXNlbGVjdGlvbi1hY3Rpb24tYXQtbnRoXSAyIG5pbCBuaWxd
KSAoNTEgLiAjWzAgIlwzMDJcMzAxXDIwMwsAXDMwMFRbXDIwMg0AXDMwMFQhXDIwNyIgWzIgbmls
IGhlbG0tZXhlY3V0ZS1zZWxlY3Rpb24tYWN0aW9uLWF0LW50aF0gMiBuaWwgbmlsXSkgKDUwIC4g
I1swICJcMzAyXDMwMVwyMDMLAFwzMDBUW1wyMDINAFwzMDBUIVwyMDciIFsxIG5pbCBoZWxtLWV4
ZWN1dGUtc2VsZWN0aW9uLWFjdGlvbi1hdC1udGhdIDIgbmlsIG5pbF0pICg0OSAuICNbMCAiXDMw
MlwzMDFcMjAzCwBcMzAwVFtcMjAyDQBcMzAwVCFcMjA3IiBbMCBuaWwgaGVsbS1leGVjdXRlLXNl
bGVjdGlvbi1hY3Rpb24tYXQtbnRoXSAyIG5pbCBuaWxdKSAoMTEwIC4gaGVsbS1oZWxtLXJ1bi1j
eWNsZS1yZXN1bWUtd2l0aC1zdWJrZXlzKSAoMTA4IC4gaGVsbS1kaXNwbGF5LWxpbmUtbnVtYmVy
cy1tb2RlKSAoNjIgLiBoZWxtLXRvZ2dsZS10cnVuY2F0ZS1saW5lKSAoMjEgLiBoZWxtLXJlZnJl
c2gpICg2IC4gaGVsbS1mb2xsb3ctbW9kZSkgKDkgLiBoZWxtLWluc2VydC1vci1jb3B5KSAoMTEg
LiBoZWxtLWtpbGwtc2VsZWN0aW9uLWFuZC1xdWl0KSAoMjUgLiBoZWxtLXlhbmstc2VsZWN0aW9u
KSAoMzcgLiBoZWxtLWV4Y2hhbmdlLW1pbmlidWZmZXItYW5kLWhlYWRlci1saW5lKSAoOTUgLiBo
ZWxtLXRvZ2dsZS1mdWxsLWZyYW1lKSAoNDUgLiBoZWxtLXN3YXAtd2luZG93cykpICg2NzEwODk4
NyAuIGhlbG0tZW5sYXJnZS13aW5kb3cpICg2NzEwODk4OSAuIGhlbG0tbmFycm93LXdpbmRvdykg
KDE4IC4gdW5kZWZpbmVkKSAoMTkgLiB1bmRlZmluZWQpICgyNCBrZXltYXAgKDU3IC4gI1swICJc
MzAyXDMwMVwyMDMLAFwzMDBUW1wyMDINAFwzMDBUIVwyMDciIFs4IG5lZ2F0aXZlIGhlbG0tZXhl
Y3V0ZS1zZWxlY3Rpb24tYWN0aW9uLWF0LW50aF0gMiBuaWwgbmlsXSkgKDU2IC4gI1swICJcMzAy
XDMwMVwyMDMLAFwzMDBUW1wyMDINAFwzMDBUIVwyMDciIFs3IG5lZ2F0aXZlIGhlbG0tZXhlY3V0
ZS1zZWxlY3Rpb24tYWN0aW9uLWF0LW50aF0gMiBuaWwgbmlsXSkgKDU1IC4gI1swICJcMzAyXDMw
MVwyMDMLAFwzMDBUW1wyMDINAFwzMDBUIVwyMDciIFs2IG5lZ2F0aXZlIGhlbG0tZXhlY3V0ZS1z
ZWxlY3Rpb24tYWN0aW9uLWF0LW50aF0gMiBuaWwgbmlsXSkgKDU0IC4gI1swICJcMzAyXDMwMVwy
MDMLAFwzMDBUW1wyMDINAFwzMDBUIVwyMDciIFs1IG5lZ2F0aXZlIGhlbG0tZXhlY3V0ZS1zZWxl
Y3Rpb24tYWN0aW9uLWF0LW50aF0gMiBuaWwgbmlsXSkgKDUzIC4gI1swICJcMzAyXDMwMVwyMDML
AFwzMDBUW1wyMDINAFwzMDBUIVwyMDciIFs0IG5lZ2F0aXZlIGhlbG0tZXhlY3V0ZS1zZWxlY3Rp
b24tYWN0aW9uLWF0LW50aF0gMiBuaWwgbmlsXSkgKDUyIC4gI1swICJcMzAyXDMwMVwyMDMLAFwz
MDBUW1wyMDINAFwzMDBUIVwyMDciIFszIG5lZ2F0aXZlIGhlbG0tZXhlY3V0ZS1zZWxlY3Rpb24t
YWN0aW9uLWF0LW50aF0gMiBuaWwgbmlsXSkgKDUxIC4gI1swICJcMzAyXDMwMVwyMDMLAFwzMDBU
W1wyMDINAFwzMDBUIVwyMDciIFsyIG5lZ2F0aXZlIGhlbG0tZXhlY3V0ZS1zZWxlY3Rpb24tYWN0
aW9uLWF0LW50aF0gMiBuaWwgbmlsXSkgKDUwIC4gI1swICJcMzAyXDMwMVwyMDMLAFwzMDBUW1wy
MDINAFwzMDBUIVwyMDciIFsxIG5lZ2F0aXZlIGhlbG0tZXhlY3V0ZS1zZWxlY3Rpb24tYWN0aW9u
LWF0LW50aF0gMiBuaWwgbmlsXSkgKDQ5IC4gI1swICJcMzAyXDMwMVwyMDMLAFwzMDBUW1wyMDIN
AFwzMDBUIVwyMDciIFswIG5lZ2F0aXZlIGhlbG0tZXhlY3V0ZS1zZWxlY3Rpb24tYWN0aW9uLWF0
LW50aF0gMiBuaWwgbmlsXSkgKDIgLiBoZWxtLXJlc3VtZS1saXN0LWJ1ZmZlcnMtYWZ0ZXItcXVp
dCkgKDk4IC4gaGVsbS1yZXN1bWUtcHJldmlvdXMtc2Vzc2lvbi1hZnRlci1xdWl0KSAoNiAuIGhl
bG0tcXVpdC1hbmQtZmluZC1maWxlKSkgKDEyNyAuIGhlbG0tZGVsZXRlLWNoYXItYmFja3dhcmQp
ICgxMSAuIGhlbG0tZGVsZXRlLW1pbmlidWZmZXItY29udGVudHMpICg2NzEwODg5NiAuIGhlbG0t
dG9nZ2xlLXZpc2libGUtbWFyay1mb3J3YXJkKSAoMCAuIGhlbG0tdG9nZ2xlLXZpc2libGUtbWFy
aykgKEMtTS11cCAuIGhlbG0tc2Nyb2xsLW90aGVyLXdpbmRvdy1kb3duKSAoQy1NLWRvd24gLiBo
ZWxtLXNjcm9sbC1vdGhlci13aW5kb3cpIChNLXByaW9yIC4gaGVsbS1zY3JvbGwtb3RoZXItd2lu
ZG93LWRvd24pIChNLW5leHQgLiBoZWxtLXNjcm9sbC1vdGhlci13aW5kb3cpICgxMiAuIGhlbG0t
cmVjZW50ZXItdG9wLWJvdHRvbS1vdGhlci13aW5kb3cpIChsZWZ0IC4gaGVsbS1wcmV2aW91cy1z
b3VyY2UpIChyaWdodCAuIGhlbG0tbmV4dC1zb3VyY2UpICgxNSAuIGhlbG0tbmV4dC1zb3VyY2Up
ICgxMCAuIGhlbG0tZXhlY3V0ZS1wZXJzaXN0ZW50LWFjdGlvbikgKDkgLiBoZWxtLXNlbGVjdC1h
Y3Rpb24pICgxMyAuIGhlbG0tbWF5YmUtZXhpdC1taW5pYnVmZmVyKSAoNyAuIGhlbG0ta2V5Ym9h
cmQtcXVpdCkgKDIyIC4gaGVsbS1zY3JvbGwtZG93bikgKDI3IGtleW1hcCAoMTA0IC4gYmFja3dh
cmQta2lsbC13b3JkKSAoOCAuIGJhY2t3YXJkLWtpbGwtd29yZCkgKDEwOCAuIHlhbnQvaGVsbS15
YW5rLXNlbGVjdGlvbi1vci1leGVjdXRlLXBlcnNpc3RlbnQtYWN0aW9uKSAoMTA1IC4gaGVsbS1w
cmV2aW91cy1zb3VyY2UpICgxMDcgLiBoZWxtLXByZXZpb3VzLWxpbmUpICgxMDYgLiBoZWxtLW5l
eHQtbGluZSkgKDExNCAuIHVuZGVmaW5lZCkgKDExMCAuIG5leHQtaGlzdG9yeS1lbGVtZW50KSAo
MTEyIC4gcHJldmlvdXMtaGlzdG9yeS1lbGVtZW50KSAoMTkgLiB1bmRlZmluZWQpICgxOCAuIHVu
ZGVmaW5lZCkgKDExNSAuIHVuZGVmaW5lZCkgKDUgLiBoZWxtLWRpc3BsYXktYWxsLXNvdXJjZXMp
ICgxIC4gaGVsbS1zaG93LWFsbC1jYW5kaWRhdGVzLWluLXNvdXJjZSkgKDg1IC4gaGVsbS11bm1h
cmstYWxsKSAoOTcgLiBoZWxtLW1hcmstYWxsKSAoMTA5IC4gaGVsbS10b2dnbGUtYWxsLW1hcmtz
KSAoNDEgLiBoZWxtLW5leHQtdmlzaWJsZS1tYXJrKSAoNDAgLiBoZWxtLXByZXYtdmlzaWJsZS1t
YXJrKSAoOTEpICgzMiAuIGhlbG0tdG9nZ2xlLXZpc2libGUtbWFyay1iYWNrd2FyZCkgKDMzNTU0
NDU0IC4gaGVsbS1zY3JvbGwtb3RoZXItd2luZG93LWRvd24pICgyNSAuIGhlbG0tc2Nyb2xsLW90
aGVyLXdpbmRvdy1kb3duKSAoMjIgLiBoZWxtLXNjcm9sbC1vdGhlci13aW5kb3cpICgxMiAuIGhl
bG0tcmVwb3NpdGlvbi13aW5kb3ctb3RoZXItd2luZG93KSAoMTExIC4gaGVsbS1uZXh0LXNvdXJj
ZSkgKDYyIC4gaGVsbS1lbmQtb2YtYnVmZmVyKSAoNjAgLiBoZWxtLWJlZ2lubmluZy1vZi1idWZm
ZXIpICgxMTggLiBoZWxtLXNjcm9sbC11cCkpIChuZXh0IC4gaGVsbS1uZXh0LXBhZ2UpIChwcmlv
ciAuIGhlbG0tcHJldmlvdXMtcGFnZSkgKEMtdXAgLiBoZWxtLWZvbGxvdy1hY3Rpb24tYmFja3dh
cmQpIChDLWRvd24gLiBoZWxtLWZvbGxvdy1hY3Rpb24tZm9yd2FyZCkgKDE2IC4gaGVsbS1wcmV2
aW91cy1saW5lKSAoMTQgLiBoZWxtLW5leHQtbGluZSkgKHVwIC4gaGVsbS1wcmV2aW91cy1saW5l
KSAoZG93biAuIGhlbG0tbmV4dC1saW5lKSBrZXltYXAgKDE4IC4gaGVsbS1taW5pYnVmZmVyLWhp
c3RvcnkpIChlc2NhcGUgLiBrZXlib2FyZC1xdWl0KSAobWVudS1iYXIga2V5bWFwIChtaW5pYnVm
ICJNaW5pYnVmIiBrZXltYXAgKHByZXZpb3VzIG1lbnUtaXRlbSAiUHJldmlvdXMgSGlzdG9yeSBJ
dGVtIiBwcmV2aW91cy1oaXN0b3J5LWVsZW1lbnQgOmhlbHAgIlB1dCBwcmV2aW91cyBtaW5pYnVm
ZmVyIGhpc3RvcnkgZWxlbWVudCBpbiB0aGUgbWluaWJ1ZmZlciIpIChuZXh0IG1lbnUtaXRlbSAi
TmV4dCBIaXN0b3J5IEl0ZW0iIG5leHQtaGlzdG9yeS1lbGVtZW50IDpoZWxwICJQdXQgbmV4dCBt
aW5pYnVmZmVyIGhpc3RvcnkgZWxlbWVudCBpbiB0aGUgbWluaWJ1ZmZlciIpIChpc2VhcmNoLWJh
Y2t3YXJkIG1lbnUtaXRlbSAiSXNlYXJjaCBIaXN0b3J5IEJhY2t3YXJkIiBpc2VhcmNoLWJhY2t3
YXJkIDpoZWxwICJJbmNyZW1lbnRhbGx5IHNlYXJjaCBtaW5pYnVmZmVyIGhpc3RvcnkgYmFja3dh
cmQiKSAoaXNlYXJjaC1mb3J3YXJkIG1lbnUtaXRlbSAiSXNlYXJjaCBIaXN0b3J5IEZvcndhcmQi
IGlzZWFyY2gtZm9yd2FyZCA6aGVscCAiSW5jcmVtZW50YWxseSBzZWFyY2ggbWluaWJ1ZmZlciBo
aXN0b3J5IGZvcndhcmQiKSAocmV0dXJuIG1lbnUtaXRlbSAiRW50ZXIiIGV4aXQtbWluaWJ1ZmZl
ciA6a2V5LXNlcXVlbmNlICINIiA6aGVscCAiVGVybWluYXRlIGlucHV0IGFuZCBleGl0IG1pbmli
dWZmZXIiKSAocXVpdCBtZW51LWl0ZW0gIlF1aXQiIGFib3J0LXJlY3Vyc2l2ZS1lZGl0IDpoZWxw
ICJBYm9ydCBpbnB1dCBhbmQgZXhpdCBtaW5pYnVmZmVyIikgIk1pbmlidWYiKSkgKDI0IGtleW1h
cCAoZG93biAuIG1pbmlidWZmZXItY29tcGxldGUtZGVmYXVsdHMpICh1cCAuIG1pbmlidWZmZXIt
Y29tcGxldGUtaGlzdG9yeSkpICgxMyAuIGV4aXQtbWluaWJ1ZmZlcikgKDEwIC4gZXhpdC1taW5p
YnVmZmVyKSAoNyAuIGFib3J0LW1pbmlidWZmZXJzKSAoQy10YWIgLiBmaWxlLWNhY2hlLW1pbmli
dWZmZXItY29tcGxldGUpICg5IC4gc2VsZi1pbnNlcnQtY29tbWFuZCkgKFhGODZCYWNrIC4gcHJl
dmlvdXMtaGlzdG9yeS1lbGVtZW50KSAodXAgLiBwcmV2aW91cy1saW5lLW9yLWhpc3RvcnktZWxl
bWVudCkgKHByaW9yIC4gcHJldmlvdXMtaGlzdG9yeS1lbGVtZW50KSAoWEY4NkZvcndhcmQgLiBu
ZXh0LWhpc3RvcnktZWxlbWVudCkgKGRvd24gLiBuZXh0LWxpbmUtb3ItaGlzdG9yeS1lbGVtZW50
KSAobmV4dCAuIG5leHQtaGlzdG9yeS1lbGVtZW50KSAoMjcga2V5bWFwICgxMDUgLiBwYXJlZGl0
LWNvbnZvbHV0ZS1zZXhwKSAoMTExIC4gcGFyZWRpdC1mb3J3YXJkLXNsdXJwLXNleHApICg2MCAu
IG1pbmlidWZmZXItYmVnaW5uaW5nLW9mLWJ1ZmZlcikgKDExNCAuIHByZXZpb3VzLW1hdGNoaW5n
LWhpc3RvcnktZWxlbWVudCkgKDExNSAuIG5leHQtbWF0Y2hpbmctaGlzdG9yeS1lbGVtZW50KSAo
MTEyIC4gcHJldmlvdXMtaGlzdG9yeS1lbGVtZW50KSAoMTEwIC4gbmV4dC1oaXN0b3J5LWVsZW1l
bnQpKSkgKGFjdGlvbiAuIGhlbG0tdHlwZS1jb21tYW5kLWFjdGlvbnMpIChwZXJzaXN0ZW50LWFj
dGlvbiAuIGhlbG0tTS14LXBlcnNpc3RlbnQtYWN0aW9uKSAocGVyc2lzdGVudC1oZWxwIC4gIkRl
c2NyaWJlIHRoaXMgY29tbWFuZCIpIChoZWxwLW1lc3NhZ2UgLiBoZWxtLU0teC1oZWxwLW1lc3Nh
Z2UpIChyZXF1aXJlcy1wYXR0ZXJuIC4gMCkgKGZpbHRlcmVkLWNhbmRpZGF0ZS10cmFuc2Zvcm1l
ciBoZWxtLU0teC10cmFuc2Zvcm1lciAjPHN1YnIgRjYxNmU2ZjZlNzk2ZDZmNzU3MzJkNmM2MTZk
NjI2NDYxX2Fub255bW91c19sYW1iZGFfMjA+IGhlbG0tZnV6enktaGlnaGxpZ2h0LW1hdGNoZXMp
ICh2b2xhdGlsZSAuIHQpIChtYXRjaCBpZGVudGl0eSkgKGZ1enp5LW1hdGNoIC4gdCkgKHJlZGlz
cGxheSAuIGlkZW50aXR5KSAobm9tYXJrIC4gdCkgKGNvZXJjZSAuIGhlbG0tc3ltYm9saWZ5KSAo
aGVhZGVyLWxpbmUgLiAjKCJDLXU6IERlc2NyaWJlIHRoaXMgY29tbWFuZCAoa2VlcGluZyBzZXNz
aW9uKSIgMCAzIChmb250LWxvY2stZmFjZSBoZWxwLWtleS1iaW5kaW5nIGZhY2UgaGVscC1rZXkt
YmluZGluZykpKSAocmVzdW1lIC4gaGVsbS1NLXgtcmVzdW1lLWZuKSAobXVsdGltYXRjaCAuIHQp
IChtdXN0LW1hdGNoIC4gdCkgKGdyb3VwIC4gaGVsbS1jb21tYW5kKSAoZGF0YSAuICNbMCAiXDMw
MlwzMDFcMzAwXDMwM1wyMTFcMzA0JVwyMDciIFtjb21tYW5kcCAjPG9iYXJyYXkgbj05ODkxOT4g
aGVsbS1jb21wLXJlYWQtZ2V0LWNhbmRpZGF0ZXMgbmlsICIiXSA2XSkgKGdldC1saW5lIC4gYnVm
ZmVyLXN1YnN0cmluZy1uby1wcm9wZXJ0aWVzKSAoc2VhcmNoIGhlbG0tbW0tZXhhY3Qtc2VhcmNo
IGhlbG0tbW0tc2VhcmNoIGhlbG0tY2FuZGlkYXRlcy1pbi1idWZmZXItc2VhcmNoLWRlZmF1bHQt
Zm4gaGVsbS1mdXp6eS1zZWFyY2gpKSBuaWwgMCAxNTAgKGhlbG0tbW0tZXhhY3Qtc2VhcmNoIGhl
bG0tbW0tc2VhcmNoIGhlbG0tY2FuZGlkYXRlcy1pbi1idWZmZXItc2VhcmNoLWRlZmF1bHQtZm4g
aGVsbS1mdXp6eS1zZWFyY2gpIGJ1ZmZlci1zdWJzdHJpbmctbm8tcHJvcGVydGllcyAicCIgbWFr
ZS1oYXNoLXRhYmxlIDp0ZXN0IGVxdWFsIGFsbG93LWR1cHMgaGVsbS1zZXQtY2FzZS1mb2xkLXNl
YXJjaCAwIDEgbmlsIChpbnZhbGlkLXJlZ2V4cCkgbG9va2luZy1hdCBhcHBseSBwb3MtYm9sIHBv
cy1lb2wgZ2V0LXRleHQtcHJvcGVydHkgbWF0Y2gtcGFydCBwcm9wZXJ0aXplIGdldGhhc2ggIiIg
aGVsbS1zZWFyY2gtbWF0Y2gtcGFydCBwdXRoYXNoIGFzc29jLWRlZmF1bHQgZmlsdGVyLW9uZS1i
eS1vbmUgZnVuY3Rpb25wIGNhc2UtZm9sZC1zZWFyY2hdIDE4XSBjYXRlZ29yeSB0IGZvbGxvdy1s
aW5rIHQgYnV0dG9uIHQgaGVscC1lY2hvICJtb3VzZS0yLCBSRVQ6IERpc3BsYXkgdGhlIGZ1bmN0
aW9uJ3MgYm9keSIgbW91c2UtZmFjZSBoaWdobGlnaHQgZm9udC1sb2NrLWZhY2UgYnV0dG9uIGZh
Y2UgYnV0dG9uKSkgIygiaGVsbS0tc2VhcmNoLWZyb20tY2FuZGlkYXRlLWJ1ZmZlci0xIiAwIDM2
IChoZWxwLWFyZ3MgKGhlbG0tLXNlYXJjaC1mcm9tLWNhbmRpZGF0ZS1idWZmZXItMSkgY2F0ZWdv
cnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImhlbG0tc2VhcmNoLWZyb20t
Y2FuZGlkYXRlLWJ1ZmZlciIgMCAzMyAoaGVscC1hcmdzIChoZWxtLXNlYXJjaC1mcm9tLWNhbmRp
ZGF0ZS1idWZmZXIpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAj
KCJoZWxtLWNhbmRpZGF0ZXMtaW4tYnVmZmVyLTEiIDAgMjcgKGhlbHAtYXJncyAoaGVsbS1jYW5k
aWRhdGVzLWluLWJ1ZmZlci0xKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24g
KHQpKSkgIygiaGVsbS1jYW5kaWRhdGVzLWluLWJ1ZmZlciIgMCAyNSAoaGVscC1hcmdzIChoZWxt
LWNhbmRpZGF0ZXMtaW4tYnVmZmVyKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0
b24gKHQpKSkgIygiaGVsbS1hcHBseS1mdW5jdGlvbnMtZnJvbS1zb3VyY2UiIDAgMzIgKGhlbHAt
YXJncyAoaGVsbS1hcHBseS1mdW5jdGlvbnMtZnJvbS1zb3VyY2UpIGNhdGVnb3J5IGhlbHAtZnVu
Y3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJoZWxtLWludGVycHJldC12YWx1ZSIgMCAyMCAo
aGVscC1hcmdzIChoZWxtLWludGVycHJldC12YWx1ZSkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1i
dXR0b24gYnV0dG9uICh0KSkpICMoImhlbG0tZ2V0LWNhbmRpZGF0ZXMiIDAgMTkgKGhlbHAtYXJn
cyAoaGVsbS1nZXQtY2FuZGlkYXRlcykgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0
dG9uICh0KSkpICMoImhlbG0tZ2V0LWNhY2hlZC1jYW5kaWRhdGVzIiAwIDI2IChoZWxwLWFyZ3Mg
KGhlbG0tZ2V0LWNhY2hlZC1jYW5kaWRhdGVzKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRv
biBidXR0b24gKHQpKSkgIygiaGVsbS1jb21wdXRlLW1hdGNoZXMiIDAgMjAgKGhlbHAtYXJncyAo
aGVsbS1jb21wdXRlLW1hdGNoZXMpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRv
biAodCkpKSAjKCJoZWxtLS1jb2xsZWN0LW1hdGNoZXMiIDAgMjEgKGhlbHAtYXJncyAoaGVsbS0t
Y29sbGVjdC1tYXRjaGVzKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQp
KSkgIygiaGVsbS11cGRhdGUiIDAgMTEgKGhlbHAtYXJncyAoaGVsbS11cGRhdGUpIGNhdGVnb3J5
IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJoZWxtLWNoZWNrLW5ldy1pbnB1
dCIgMCAyMCAoaGVscC1hcmdzIChoZWxtLWNoZWNrLW5ldy1pbnB1dCkgY2F0ZWdvcnkgaGVscC1m
dW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImhlbG0tY2hlY2stbWluaWJ1ZmZlci1pbnB1
dCIgMCAyNyAoaGVscC1hcmdzIChoZWxtLWNoZWNrLW1pbmlidWZmZXItaW5wdXQpIGNhdGVnb3J5
IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCIjPGNvbXBpbGVkLWZ1bmN0aW9u
IDQyRj4iIDIwIDIzIChhY3Rpb24gaGVscC1mbnMtLWRpc3BsYXktZnVuY3Rpb24ga2V5bWFwIChr
ZXltYXAgKHRvdWNoc2NyZWVuLWRvd24gLiBwdXNoLWJ1dHRvbikgKGhlYWRlci1saW5lIGtleW1h
cCAodG91Y2hzY3JlZW4tZG93biAuIHB1c2gtYnV0dG9uKSAobW91c2UtMiAuIHB1c2gtYnV0dG9u
KSkgKG1vZGUtbGluZSBrZXltYXAgKHRvdWNoc2NyZWVuLWRvd24gLiBwdXNoLWJ1dHRvbikgKG1v
dXNlLTIgLiBwdXNoLWJ1dHRvbikpIChmb2xsb3ctbGluayAuIG1vdXNlLWZhY2UpIChtb3VzZS0y
IC4gcHVzaC1idXR0b24pICgxMyAuIHB1c2gtYnV0dG9uKSBrZXltYXAgKGJhY2t0YWIgLiBiYWNr
d2FyZC1idXR0b24pICgyNyBrZXltYXAgKDkgLiBiYWNrd2FyZC1idXR0b24pKSAoOSAuIGZvcndh
cmQtYnV0dG9uKSkgYnV0dG9uLWRhdGEgI1swICIIXDIwNgUACT9cMjA1GQBcMzAyIHJcMzAzXDMw
NAJcIlwyMTZcMzA1IFwyMTBcMzA2ICpcMjYyAVwyMDciIFtoZWxtLWluLXBlcnNpc3RlbnQtYWN0
aW9uIGhlbG0tc3VzcGVuZC11cGRhdGUtZmxhZyBpbnRlcm5hbC0tYmVmb3JlLXNhdmUtc2VsZWN0
ZWQtd2luZG93IG1ha2UtY2xvc3VyZSAjWzAgIlwzMDFcMzAwIVwyMDciIFtWMCBpbnRlcm5hbC0t
YWZ0ZXItc2F2ZS1zZWxlY3RlZC13aW5kb3ddIDJdIGhlbG0tY2hlY2stbWluaWJ1ZmZlci1pbnB1
dCBoZWxtLXByaW50LWVycm9yLW1lc3NhZ2VzXSA0XSBjYXRlZ29yeSB0IGZvbGxvdy1saW5rIHQg
YnV0dG9uIHQgaGVscC1lY2hvICJtb3VzZS0yLCBSRVQ6IERpc3BsYXkgdGhlIGZ1bmN0aW9uJ3Mg
Ym9keSIgbW91c2UtZmFjZSBoaWdobGlnaHQgZm9udC1sb2NrLWZhY2UgYnV0dG9uIGZhY2UgYnV0
dG9uKSldIDE3IFsjKCJzcGxpdC1zdHJpbmciIDAgMTIgKGhlbHAtYXJncyAoc3BsaXQtc3RyaW5n
KSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygiaGVsbS1nZXQt
Zmlyc3QtbGluZS1kb2N1bWVudGF0aW9uIiAwIDMzIChoZWxwLWFyZ3MgKGhlbG0tZ2V0LWZpcnN0
LWxpbmUtZG9jdW1lbnRhdGlvbikgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9u
ICh0KSkpICMoImhlbG0tTS14LXRyYW5zZm9ybWVyLTEiIDAgMjIgKGhlbHAtYXJncyAoaGVsbS1N
LXgtdHJhbnNmb3JtZXItMSkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0
KSkpICMoImhlbG0tTS14LXRyYW5zZm9ybWVyIiAwIDIwIChoZWxwLWFyZ3MgKGhlbG0tTS14LXRy
YW5zZm9ybWVyKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygi
aGVsbS1hcHBseS1mdW5jdGlvbnMtZnJvbS1zb3VyY2UiIDAgMzIgKGhlbHAtYXJncyAoaGVsbS1h
cHBseS1mdW5jdGlvbnMtZnJvbS1zb3VyY2UpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9u
IGJ1dHRvbiAodCkpKSAjKCJoZWxtLXByb2Nlc3MtZmlsdGVyZWQtY2FuZGlkYXRlLXRyYW5zZm9y
bWVyIiAwIDQzIChoZWxwLWFyZ3MgKGhlbG0tcHJvY2Vzcy1maWx0ZXJlZC1jYW5kaWRhdGUtdHJh
bnNmb3JtZXIpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJo
ZWxtLWNvbXB1dGUtbWF0Y2hlcyIgMCAyMCAoaGVscC1hcmdzIChoZWxtLWNvbXB1dGUtbWF0Y2hl
cykgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImhlbG0tLWNv
bGxlY3QtbWF0Y2hlcyIgMCAyMSAoaGVscC1hcmdzIChoZWxtLS1jb2xsZWN0LW1hdGNoZXMpIGNh
dGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJoZWxtLXVwZGF0ZSIg
MCAxMSAoaGVscC1hcmdzIChoZWxtLXVwZGF0ZSkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0
b24gYnV0dG9uICh0KSkpICMoImhlbG0tY2hlY2stbmV3LWlucHV0IiAwIDIwIChoZWxwLWFyZ3Mg
KGhlbG0tY2hlY2stbmV3LWlucHV0KSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0
b24gKHQpKSkgIygiaGVsbS1jaGVjay1taW5pYnVmZmVyLWlucHV0IiAwIDI3IChoZWxwLWFyZ3Mg
KGhlbG0tY2hlY2stbWluaWJ1ZmZlci1pbnB1dCkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0
b24gYnV0dG9uICh0KSkpICMoIiM8Y29tcGlsZWQtZnVuY3Rpb24gNDJGPiIgMjAgMjMgKGFjdGlv
biBoZWxwLWZucy0tZGlzcGxheS1mdW5jdGlvbiBrZXltYXAgKGtleW1hcCAodG91Y2hzY3JlZW4t
ZG93biAuIHB1c2gtYnV0dG9uKSAoaGVhZGVyLWxpbmUga2V5bWFwICh0b3VjaHNjcmVlbi1kb3du
IC4gcHVzaC1idXR0b24pIChtb3VzZS0yIC4gcHVzaC1idXR0b24pKSAobW9kZS1saW5lIGtleW1h
cCAodG91Y2hzY3JlZW4tZG93biAuIHB1c2gtYnV0dG9uKSAobW91c2UtMiAuIHB1c2gtYnV0dG9u
KSkgKGZvbGxvdy1saW5rIC4gbW91c2UtZmFjZSkgKG1vdXNlLTIgLiBwdXNoLWJ1dHRvbikgKDEz
IC4gcHVzaC1idXR0b24pIGtleW1hcCAoYmFja3RhYiAuIGJhY2t3YXJkLWJ1dHRvbikgKDI3IGtl
eW1hcCAoOSAuIGJhY2t3YXJkLWJ1dHRvbikpICg5IC4gZm9yd2FyZC1idXR0b24pKSBidXR0b24t
ZGF0YSAjWzAgIghcMjA2BQAJP1wyMDUZAFwzMDIgclwzMDNcMzA0AlwiXDIxNlwzMDUgXDIxMFwz
MDYgKlwyNjIBXDIwNyIgW2hlbG0taW4tcGVyc2lzdGVudC1hY3Rpb24gaGVsbS1zdXNwZW5kLXVw
ZGF0ZS1mbGFnIGludGVybmFsLS1iZWZvcmUtc2F2ZS1zZWxlY3RlZC13aW5kb3cgbWFrZS1jbG9z
dXJlICNbMCAiXDMwMVwzMDAhXDIwNyIgW1YwIGludGVybmFsLS1hZnRlci1zYXZlLXNlbGVjdGVk
LXdpbmRvd10gMl0gaGVsbS1jaGVjay1taW5pYnVmZmVyLWlucHV0IGhlbG0tcHJpbnQtZXJyb3It
bWVzc2FnZXNdIDRdIGNhdGVnb3J5IHQgZm9sbG93LWxpbmsgdCBidXR0b24gdCBoZWxwLWVjaG8g
Im1vdXNlLTIsIFJFVDogRGlzcGxheSB0aGUgZnVuY3Rpb24ncyBib2R5IiBtb3VzZS1mYWNlIGhp
Z2hsaWdodCBmb250LWxvY2stZmFjZSBidXR0b24gZmFjZSBidXR0b24pKSAjKCJhcHBseSIgMCA1
IChoZWxwLWFyZ3MgKGFwcGx5KSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24g
KHQpKSkgIygidGltZXItZXZlbnQtaGFuZGxlciIgMCAxOSAoaGVscC1hcmdzICh0aW1lci1ldmVu
dC1oYW5kbGVyKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygi
aGVsbS1yZWFkLWZyb20tbWluaWJ1ZmZlciIgMCAyNSAoaGVscC1hcmdzIChoZWxtLXJlYWQtZnJv
bS1taW5pYnVmZmVyKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkg
IygiaGVsbS1pbnRlcm5hbCIgMCAxMyAoaGVscC1hcmdzIChoZWxtLWludGVybmFsKSBjYXRlZ29y
eSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSldIDcgWyMoImhlbG0tY2FuZGlkYXRl
LWJ1ZmZlciIgMCAyMSAoaGVscC1hcmdzIChoZWxtLWNhbmRpZGF0ZS1idWZmZXIpIGNhdGVnb3J5
IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJoZWxtLW1ha2Utc2VwYXJhdG9y
IiAwIDE5IChoZWxwLWFyZ3MgKGhlbG0tbWFrZS1zZXBhcmF0b3IpIGNhdGVnb3J5IGhlbHAtZnVu
Y3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJoZWxtLU0teC10cmFuc2Zvcm1lci0xIiAwIDIy
IChoZWxwLWFyZ3MgKGhlbG0tTS14LXRyYW5zZm9ybWVyLTEpIGNhdGVnb3J5IGhlbHAtZnVuY3Rp
b24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJoZWxtLU0teC10cmFuc2Zvcm1lciIgMCAyMCAoaGVs
cC1hcmdzIChoZWxtLU0teC10cmFuc2Zvcm1lcikgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0
b24gYnV0dG9uICh0KSkpICMoImhlbG0tYXBwbHktZnVuY3Rpb25zLWZyb20tc291cmNlIiAwIDMy
IChoZWxwLWFyZ3MgKGhlbG0tYXBwbHktZnVuY3Rpb25zLWZyb20tc291cmNlKSBjYXRlZ29yeSBo
ZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygiaGVsbS1wcm9jZXNzLWZpbHRlcmVk
LWNhbmRpZGF0ZS10cmFuc2Zvcm1lciIgMCA0MyAoaGVscC1hcmdzIChoZWxtLXByb2Nlc3MtZmls
dGVyZWQtY2FuZGlkYXRlLXRyYW5zZm9ybWVyKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRv
biBidXR0b24gKHQpKSkgIygiaGVsbS1jb21wdXRlLW1hdGNoZXMiIDAgMjAgKGhlbHAtYXJncyAo
aGVsbS1jb21wdXRlLW1hdGNoZXMpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRv
biAodCkpKSAjKCJoZWxtLS1jb2xsZWN0LW1hdGNoZXMiIDAgMjEgKGhlbHAtYXJncyAoaGVsbS0t
Y29sbGVjdC1tYXRjaGVzKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQp
KSkgIygiaGVsbS11cGRhdGUiIDAgMTEgKGhlbHAtYXJncyAoaGVsbS11cGRhdGUpIGNhdGVnb3J5
IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJoZWxtLWNoZWNrLW5ldy1pbnB1
dCIgMCAyMCAoaGVscC1hcmdzIChoZWxtLWNoZWNrLW5ldy1pbnB1dCkgY2F0ZWdvcnkgaGVscC1m
dW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImhlbG0tY2hlY2stbWluaWJ1ZmZlci1pbnB1
dCIgMCAyNyAoaGVscC1hcmdzIChoZWxtLWNoZWNrLW1pbmlidWZmZXItaW5wdXQpIGNhdGVnb3J5
IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCIjPGNvbXBpbGVkLWZ1bmN0aW9u
IDQyRj4iIDIwIDIzIChhY3Rpb24gaGVscC1mbnMtLWRpc3BsYXktZnVuY3Rpb24ga2V5bWFwIChr
ZXltYXAgKHRvdWNoc2NyZWVuLWRvd24gLiBwdXNoLWJ1dHRvbikgKGhlYWRlci1saW5lIGtleW1h
cCAodG91Y2hzY3JlZW4tZG93biAuIHB1c2gtYnV0dG9uKSAobW91c2UtMiAuIHB1c2gtYnV0dG9u
KSkgKG1vZGUtbGluZSBrZXltYXAgKHRvdWNoc2NyZWVuLWRvd24gLiBwdXNoLWJ1dHRvbikgKG1v
dXNlLTIgLiBwdXNoLWJ1dHRvbikpIChmb2xsb3ctbGluayAuIG1vdXNlLWZhY2UpIChtb3VzZS0y
IC4gcHVzaC1idXR0b24pICgxMyAuIHB1c2gtYnV0dG9uKSBrZXltYXAgKGJhY2t0YWIgLiBiYWNr
d2FyZC1idXR0b24pICgyNyBrZXltYXAgKDkgLiBiYWNrd2FyZC1idXR0b24pKSAoOSAuIGZvcndh
cmQtYnV0dG9uKSkgYnV0dG9uLWRhdGEgI1swICIIXDIwNgUACT9cMjA1GQBcMzAyIHJcMzAzXDMw
NAJcIlwyMTZcMzA1IFwyMTBcMzA2ICpcMjYyAVwyMDciIFtoZWxtLWluLXBlcnNpc3RlbnQtYWN0
aW9uIGhlbG0tc3VzcGVuZC11cGRhdGUtZmxhZyBpbnRlcm5hbC0tYmVmb3JlLXNhdmUtc2VsZWN0
ZWQtd2luZG93IG1ha2UtY2xvc3VyZSAjWzAgIlwzMDFcMzAwIVwyMDciIFtWMCBpbnRlcm5hbC0t
YWZ0ZXItc2F2ZS1zZWxlY3RlZC13aW5kb3ddIDJdIGhlbG0tY2hlY2stbWluaWJ1ZmZlci1pbnB1
dCBoZWxtLXByaW50LWVycm9yLW1lc3NhZ2VzXSA0XSBjYXRlZ29yeSB0IGZvbGxvdy1saW5rIHQg
YnV0dG9uIHQgaGVscC1lY2hvICJtb3VzZS0yLCBSRVQ6IERpc3BsYXkgdGhlIGZ1bmN0aW9uJ3Mg
Ym9keSIgbW91c2UtZmFjZSBoaWdobGlnaHQgZm9udC1sb2NrLWZhY2UgYnV0dG9uIGZhY2UgYnV0
dG9uKSkgIygiYXBwbHkiIDAgNSAoaGVscC1hcmdzIChhcHBseSkgY2F0ZWdvcnkgaGVscC1mdW5j
dGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoInRpbWVyLWV2ZW50LWhhbmRsZXIiIDAgMTkgKGhl
bHAtYXJncyAodGltZXItZXZlbnQtaGFuZGxlcikgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0
b24gYnV0dG9uICh0KSkpICMoImhlbG0tcmVhZC1mcm9tLW1pbmlidWZmZXIiIDAgMjUgKGhlbHAt
YXJncyAoaGVsbS1yZWFkLWZyb20tbWluaWJ1ZmZlcikgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1i
dXR0b24gYnV0dG9uICh0KSkpICMoImhlbG0taW50ZXJuYWwiIDAgMTMgKGhlbHAtYXJncyAoaGVs
bS1pbnRlcm5hbCkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpXSA2
IFsjKCJzdWJzdGl0dXRlLWNvbW1hbmQta2V5cyIgMCAyMyAoaGVscC1hcmdzIChzdWJzdGl0dXRl
LWNvbW1hbmQta2V5cykgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkp
ICMoImhlbG0tTS14LXRyYW5zZm9ybWVyLTEiIDAgMjIgKGhlbHAtYXJncyAoaGVsbS1NLXgtdHJh
bnNmb3JtZXItMSkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMo
ImhlbG0tTS14LXRyYW5zZm9ybWVyIiAwIDIwIChoZWxwLWFyZ3MgKGhlbG0tTS14LXRyYW5zZm9y
bWVyKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygiaGVsbS1h
cHBseS1mdW5jdGlvbnMtZnJvbS1zb3VyY2UiIDAgMzIgKGhlbHAtYXJncyAoaGVsbS1hcHBseS1m
dW5jdGlvbnMtZnJvbS1zb3VyY2UpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRv
biAodCkpKSAjKCJoZWxtLXByb2Nlc3MtZmlsdGVyZWQtY2FuZGlkYXRlLXRyYW5zZm9ybWVyIiAw
IDQzIChoZWxwLWFyZ3MgKGhlbG0tcHJvY2Vzcy1maWx0ZXJlZC1jYW5kaWRhdGUtdHJhbnNmb3Jt
ZXIpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJoZWxtLWNv
bXB1dGUtbWF0Y2hlcyIgMCAyMCAoaGVscC1hcmdzIChoZWxtLWNvbXB1dGUtbWF0Y2hlcykgY2F0
ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImhlbG0tLWNvbGxlY3Qt
bWF0Y2hlcyIgMCAyMSAoaGVscC1hcmdzIChoZWxtLS1jb2xsZWN0LW1hdGNoZXMpIGNhdGVnb3J5
IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJoZWxtLXVwZGF0ZSIgMCAxMSAo
aGVscC1hcmdzIChoZWxtLXVwZGF0ZSkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0
dG9uICh0KSkpICMoImhlbG0tY2hlY2stbmV3LWlucHV0IiAwIDIwIChoZWxwLWFyZ3MgKGhlbG0t
Y2hlY2stbmV3LWlucHV0KSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQp
KSkgIygiaGVsbS1jaGVjay1taW5pYnVmZmVyLWlucHV0IiAwIDI3IChoZWxwLWFyZ3MgKGhlbG0t
Y2hlY2stbWluaWJ1ZmZlci1pbnB1dCkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0
dG9uICh0KSkpICMoIiM8Y29tcGlsZWQtZnVuY3Rpb24gNDJGPiIgMjAgMjMgKGFjdGlvbiBoZWxw
LWZucy0tZGlzcGxheS1mdW5jdGlvbiBrZXltYXAgKGtleW1hcCAodG91Y2hzY3JlZW4tZG93biAu
IHB1c2gtYnV0dG9uKSAoaGVhZGVyLWxpbmUga2V5bWFwICh0b3VjaHNjcmVlbi1kb3duIC4gcHVz
aC1idXR0b24pIChtb3VzZS0yIC4gcHVzaC1idXR0b24pKSAobW9kZS1saW5lIGtleW1hcCAodG91
Y2hzY3JlZW4tZG93biAuIHB1c2gtYnV0dG9uKSAobW91c2UtMiAuIHB1c2gtYnV0dG9uKSkgKGZv
bGxvdy1saW5rIC4gbW91c2UtZmFjZSkgKG1vdXNlLTIgLiBwdXNoLWJ1dHRvbikgKDEzIC4gcHVz
aC1idXR0b24pIGtleW1hcCAoYmFja3RhYiAuIGJhY2t3YXJkLWJ1dHRvbikgKDI3IGtleW1hcCAo
OSAuIGJhY2t3YXJkLWJ1dHRvbikpICg5IC4gZm9yd2FyZC1idXR0b24pKSBidXR0b24tZGF0YSAj
WzAgIghcMjA2BQAJP1wyMDUZAFwzMDIgclwzMDNcMzA0AlwiXDIxNlwzMDUgXDIxMFwzMDYgKlwy
NjIBXDIwNyIgW2hlbG0taW4tcGVyc2lzdGVudC1hY3Rpb24gaGVsbS1zdXNwZW5kLXVwZGF0ZS1m
bGFnIGludGVybmFsLS1iZWZvcmUtc2F2ZS1zZWxlY3RlZC13aW5kb3cgbWFrZS1jbG9zdXJlICNb
MCAiXDMwMVwzMDAhXDIwNyIgW1YwIGludGVybmFsLS1hZnRlci1zYXZlLXNlbGVjdGVkLXdpbmRv
d10gMl0gaGVsbS1jaGVjay1taW5pYnVmZmVyLWlucHV0IGhlbG0tcHJpbnQtZXJyb3ItbWVzc2Fn
ZXNdIDRdIGNhdGVnb3J5IHQgZm9sbG93LWxpbmsgdCBidXR0b24gdCBoZWxwLWVjaG8gIm1vdXNl
LTIsIFJFVDogRGlzcGxheSB0aGUgZnVuY3Rpb24ncyBib2R5IiBtb3VzZS1mYWNlIGhpZ2hsaWdo
dCBmb250LWxvY2stZmFjZSBidXR0b24gZmFjZSBidXR0b24pKSAjKCJhcHBseSIgMCA1IChoZWxw
LWFyZ3MgKGFwcGx5KSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkg
IygidGltZXItZXZlbnQtaGFuZGxlciIgMCAxOSAoaGVscC1hcmdzICh0aW1lci1ldmVudC1oYW5k
bGVyKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygiaGVsbS1y
ZWFkLWZyb20tbWluaWJ1ZmZlciIgMCAyNSAoaGVscC1hcmdzIChoZWxtLXJlYWQtZnJvbS1taW5p
YnVmZmVyKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygiaGVs
bS1pbnRlcm5hbCIgMCAxMyAoaGVscC1hcmdzIChoZWxtLWludGVybmFsKSBjYXRlZ29yeSBoZWxw
LWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygiaGVsbSIgMCA0IChoZWxwLWFyZ3MgKGhl
bG0pIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKV0gNyBbIygia2ls
bC1idWZmZXIiIDAgMTEgKGhlbHAtYXJncyAoa2lsbC1idWZmZXIpIGNhdGVnb3J5IGhlbHAtZnVu
Y3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCIjPGNvbXBpbGVkLWZ1bmN0aW9uIDMyOT4iIDIw
IDIzIChhY3Rpb24gaGVscC1mbnMtLWRpc3BsYXktZnVuY3Rpb24ga2V5bWFwIChrZXltYXAgKHRv
dWNoc2NyZWVuLWRvd24gLiBwdXNoLWJ1dHRvbikgKGhlYWRlci1saW5lIGtleW1hcCAodG91Y2hz
Y3JlZW4tZG93biAuIHB1c2gtYnV0dG9uKSAobW91c2UtMiAuIHB1c2gtYnV0dG9uKSkgKG1vZGUt
bGluZSBrZXltYXAgKHRvdWNoc2NyZWVuLWRvd24gLiBwdXNoLWJ1dHRvbikgKG1vdXNlLTIgLiBw
dXNoLWJ1dHRvbikpIChmb2xsb3ctbGluayAuIG1vdXNlLWZhY2UpIChtb3VzZS0yIC4gcHVzaC1i
dXR0b24pICgxMyAuIHB1c2gtYnV0dG9uKSBrZXltYXAgKGJhY2t0YWIgLiBiYWNrd2FyZC1idXR0
b24pICgyNyBrZXltYXAgKDkgLiBiYWNrd2FyZC1idXR0b24pKSAoOSAuIGZvcndhcmQtYnV0dG9u
KSkgYnV0dG9uLWRhdGEgI1swICJcMzAxXDMwMCFcMjA1CQBcMzAyXDMwMCFcMjA3IiBbIzxraWxs
ZWQgYnVmZmVyPiBidWZmZXItbmFtZSBraWxsLWJ1ZmZlcl0gMl0gY2F0ZWdvcnkgdCBmb2xsb3ct
bGluayB0IGJ1dHRvbiB0IGhlbHAtZWNobyAibW91c2UtMiwgUkVUOiBEaXNwbGF5IHRoZSBmdW5j
dGlvbidzIGJvZHkiIG1vdXNlLWZhY2UgaGlnaGxpZ2h0IGZvbnQtbG9jay1mYWNlIGJ1dHRvbiBm
YWNlIGJ1dHRvbikpICMoInN1YnN0aXR1dGUtY29tbWFuZC1rZXlzIiAwIDIzIChoZWxwLWFyZ3Mg
KHN1YnN0aXR1dGUtY29tbWFuZC1rZXlzKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBi
dXR0b24gKHQpKSkgIygiaGVsbS1nZXQtZmlyc3QtbGluZS1kb2N1bWVudGF0aW9uIiAwIDMzICho
ZWxwLWFyZ3MgKGhlbG0tZ2V0LWZpcnN0LWxpbmUtZG9jdW1lbnRhdGlvbikgY2F0ZWdvcnkgaGVs
cC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImhlbG0tTS14LXRyYW5zZm9ybWVyLTEi
IDAgMjIgKGhlbHAtYXJncyAoaGVsbS1NLXgtdHJhbnNmb3JtZXItMSkgY2F0ZWdvcnkgaGVscC1m
dW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImhlbG0tTS14LXRyYW5zZm9ybWVyIiAwIDIw
IChoZWxwLWFyZ3MgKGhlbG0tTS14LXRyYW5zZm9ybWVyKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9u
LWJ1dHRvbiBidXR0b24gKHQpKSkgIygiaGVsbS1hcHBseS1mdW5jdGlvbnMtZnJvbS1zb3VyY2Ui
IDAgMzIgKGhlbHAtYXJncyAoaGVsbS1hcHBseS1mdW5jdGlvbnMtZnJvbS1zb3VyY2UpIGNhdGVn
b3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJoZWxtLXByb2Nlc3MtZmls
dGVyZWQtY2FuZGlkYXRlLXRyYW5zZm9ybWVyIiAwIDQzIChoZWxwLWFyZ3MgKGhlbG0tcHJvY2Vz
cy1maWx0ZXJlZC1jYW5kaWRhdGUtdHJhbnNmb3JtZXIpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24t
YnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJoZWxtLWNvbXB1dGUtbWF0Y2hlcyIgMCAyMCAoaGVscC1h
cmdzIChoZWxtLWNvbXB1dGUtbWF0Y2hlcykgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24g
YnV0dG9uICh0KSkpICMoImhlbG0tLWNvbGxlY3QtbWF0Y2hlcyIgMCAyMSAoaGVscC1hcmdzICho
ZWxtLS1jb2xsZWN0LW1hdGNoZXMpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRv
biAodCkpKSAjKCJoZWxtLXVwZGF0ZSIgMCAxMSAoaGVscC1hcmdzIChoZWxtLXVwZGF0ZSkgY2F0
ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImhlbG0tY2hlY2stbmV3
LWlucHV0IiAwIDIwIChoZWxwLWFyZ3MgKGhlbG0tY2hlY2stbmV3LWlucHV0KSBjYXRlZ29yeSBo
ZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygiaGVsbS1jaGVjay1taW5pYnVmZmVy
LWlucHV0IiAwIDI3IChoZWxwLWFyZ3MgKGhlbG0tY2hlY2stbWluaWJ1ZmZlci1pbnB1dCkgY2F0
ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoIiM8Y29tcGlsZWQtZnVu
Y3Rpb24gNDJGPiIgMjAgMjMgKGFjdGlvbiBoZWxwLWZucy0tZGlzcGxheS1mdW5jdGlvbiBrZXlt
YXAgKGtleW1hcCAodG91Y2hzY3JlZW4tZG93biAuIHB1c2gtYnV0dG9uKSAoaGVhZGVyLWxpbmUg
a2V5bWFwICh0b3VjaHNjcmVlbi1kb3duIC4gcHVzaC1idXR0b24pIChtb3VzZS0yIC4gcHVzaC1i
dXR0b24pKSAobW9kZS1saW5lIGtleW1hcCAodG91Y2hzY3JlZW4tZG93biAuIHB1c2gtYnV0dG9u
KSAobW91c2UtMiAuIHB1c2gtYnV0dG9uKSkgKGZvbGxvdy1saW5rIC4gbW91c2UtZmFjZSkgKG1v
dXNlLTIgLiBwdXNoLWJ1dHRvbikgKDEzIC4gcHVzaC1idXR0b24pIGtleW1hcCAoYmFja3RhYiAu
IGJhY2t3YXJkLWJ1dHRvbikgKDI3IGtleW1hcCAoOSAuIGJhY2t3YXJkLWJ1dHRvbikpICg5IC4g
Zm9yd2FyZC1idXR0b24pKSBidXR0b24tZGF0YSAjWzAgIghcMjA2BQAJP1wyMDUZAFwzMDIgclwz
MDNcMzA0AlwiXDIxNlwzMDUgXDIxMFwzMDYgKlwyNjIBXDIwNyIgW2hlbG0taW4tcGVyc2lzdGVu
dC1hY3Rpb24gaGVsbS1zdXNwZW5kLXVwZGF0ZS1mbGFnIGludGVybmFsLS1iZWZvcmUtc2F2ZS1z
ZWxlY3RlZC13aW5kb3cgbWFrZS1jbG9zdXJlICNbMCAiXDMwMVwzMDAhXDIwNyIgW1YwIGludGVy
bmFsLS1hZnRlci1zYXZlLXNlbGVjdGVkLXdpbmRvd10gMl0gaGVsbS1jaGVjay1taW5pYnVmZmVy
LWlucHV0IGhlbG0tcHJpbnQtZXJyb3ItbWVzc2FnZXNdIDRdIGNhdGVnb3J5IHQgZm9sbG93LWxp
bmsgdCBidXR0b24gdCBoZWxwLWVjaG8gIm1vdXNlLTIsIFJFVDogRGlzcGxheSB0aGUgZnVuY3Rp
b24ncyBib2R5IiBtb3VzZS1mYWNlIGhpZ2hsaWdodCBmb250LWxvY2stZmFjZSBidXR0b24gZmFj
ZSBidXR0b24pKSAjKCJhcHBseSIgMCA1IChoZWxwLWFyZ3MgKGFwcGx5KSBjYXRlZ29yeSBoZWxw
LWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygidGltZXItZXZlbnQtaGFuZGxlciIgMCAx
OSAoaGVscC1hcmdzICh0aW1lci1ldmVudC1oYW5kbGVyKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9u
LWJ1dHRvbiBidXR0b24gKHQpKSldIDYgWyMoInN0cmluZy13aWR0aCIgMCAxMiAoaGVscC1hcmdz
IChzdHJpbmctd2lkdGgpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkp
KSAjKCJ0cnVuY2F0ZS1zdHJpbmctdG8td2lkdGgiIDAgMjQgKGhlbHAtYXJncyAodHJ1bmNhdGUt
c3RyaW5nLXRvLXdpZHRoKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQp
KSkgIygiaGVsbS1nZXQtZmlyc3QtbGluZS1kb2N1bWVudGF0aW9uIiAwIDMzIChoZWxwLWFyZ3Mg
KGhlbG0tZ2V0LWZpcnN0LWxpbmUtZG9jdW1lbnRhdGlvbikgY2F0ZWdvcnkgaGVscC1mdW5jdGlv
bi1idXR0b24gYnV0dG9uICh0KSkpICMoImhlbG0tTS14LXRyYW5zZm9ybWVyLTEiIDAgMjIgKGhl
bHAtYXJncyAoaGVsbS1NLXgtdHJhbnNmb3JtZXItMSkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1i
dXR0b24gYnV0dG9uICh0KSkpICMoImhlbG0tTS14LXRyYW5zZm9ybWVyIiAwIDIwIChoZWxwLWFy
Z3MgKGhlbG0tTS14LXRyYW5zZm9ybWVyKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBi
dXR0b24gKHQpKSkgIygiaGVsbS1hcHBseS1mdW5jdGlvbnMtZnJvbS1zb3VyY2UiIDAgMzIgKGhl
bHAtYXJncyAoaGVsbS1hcHBseS1mdW5jdGlvbnMtZnJvbS1zb3VyY2UpIGNhdGVnb3J5IGhlbHAt
ZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJoZWxtLXByb2Nlc3MtZmlsdGVyZWQtY2Fu
ZGlkYXRlLXRyYW5zZm9ybWVyIiAwIDQzIChoZWxwLWFyZ3MgKGhlbG0tcHJvY2Vzcy1maWx0ZXJl
ZC1jYW5kaWRhdGUtdHJhbnNmb3JtZXIpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1
dHRvbiAodCkpKSAjKCJoZWxtLWNvbXB1dGUtbWF0Y2hlcyIgMCAyMCAoaGVscC1hcmdzIChoZWxt
LWNvbXB1dGUtbWF0Y2hlcykgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0
KSkpICMoImhlbG0tLWNvbGxlY3QtbWF0Y2hlcyIgMCAyMSAoaGVscC1hcmdzIChoZWxtLS1jb2xs
ZWN0LW1hdGNoZXMpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAj
KCJoZWxtLXVwZGF0ZSIgMCAxMSAoaGVscC1hcmdzIChoZWxtLXVwZGF0ZSkgY2F0ZWdvcnkgaGVs
cC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImhlbG0tY2hlY2stbmV3LWlucHV0IiAw
IDIwIChoZWxwLWFyZ3MgKGhlbG0tY2hlY2stbmV3LWlucHV0KSBjYXRlZ29yeSBoZWxwLWZ1bmN0
aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygiaGVsbS1jaGVjay1taW5pYnVmZmVyLWlucHV0IiAw
IDI3IChoZWxwLWFyZ3MgKGhlbG0tY2hlY2stbWluaWJ1ZmZlci1pbnB1dCkgY2F0ZWdvcnkgaGVs
cC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoIiM8Y29tcGlsZWQtZnVuY3Rpb24gNDJG
PiIgMjAgMjMgKGFjdGlvbiBoZWxwLWZucy0tZGlzcGxheS1mdW5jdGlvbiBrZXltYXAgKGtleW1h
cCAodG91Y2hzY3JlZW4tZG93biAuIHB1c2gtYnV0dG9uKSAoaGVhZGVyLWxpbmUga2V5bWFwICh0
b3VjaHNjcmVlbi1kb3duIC4gcHVzaC1idXR0b24pIChtb3VzZS0yIC4gcHVzaC1idXR0b24pKSAo
bW9kZS1saW5lIGtleW1hcCAodG91Y2hzY3JlZW4tZG93biAuIHB1c2gtYnV0dG9uKSAobW91c2Ut
MiAuIHB1c2gtYnV0dG9uKSkgKGZvbGxvdy1saW5rIC4gbW91c2UtZmFjZSkgKG1vdXNlLTIgLiBw
dXNoLWJ1dHRvbikgKDEzIC4gcHVzaC1idXR0b24pIGtleW1hcCAoYmFja3RhYiAuIGJhY2t3YXJk
LWJ1dHRvbikgKDI3IGtleW1hcCAoOSAuIGJhY2t3YXJkLWJ1dHRvbikpICg5IC4gZm9yd2FyZC1i
dXR0b24pKSBidXR0b24tZGF0YSAjWzAgIghcMjA2BQAJP1wyMDUZAFwzMDIgclwzMDNcMzA0Alwi
XDIxNlwzMDUgXDIxMFwzMDYgKlwyNjIBXDIwNyIgW2hlbG0taW4tcGVyc2lzdGVudC1hY3Rpb24g
aGVsbS1zdXNwZW5kLXVwZGF0ZS1mbGFnIGludGVybmFsLS1iZWZvcmUtc2F2ZS1zZWxlY3RlZC13
aW5kb3cgbWFrZS1jbG9zdXJlICNbMCAiXDMwMVwzMDAhXDIwNyIgW1YwIGludGVybmFsLS1hZnRl
ci1zYXZlLXNlbGVjdGVkLXdpbmRvd10gMl0gaGVsbS1jaGVjay1taW5pYnVmZmVyLWlucHV0IGhl
bG0tcHJpbnQtZXJyb3ItbWVzc2FnZXNdIDRdIGNhdGVnb3J5IHQgZm9sbG93LWxpbmsgdCBidXR0
b24gdCBoZWxwLWVjaG8gIm1vdXNlLTIsIFJFVDogRGlzcGxheSB0aGUgZnVuY3Rpb24ncyBib2R5
IiBtb3VzZS1mYWNlIGhpZ2hsaWdodCBmb250LWxvY2stZmFjZSBidXR0b24gZmFjZSBidXR0b24p
KSAjKCJhcHBseSIgMCA1IChoZWxwLWFyZ3MgKGFwcGx5KSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9u
LWJ1dHRvbiBidXR0b24gKHQpKSkgIygidGltZXItZXZlbnQtaGFuZGxlciIgMCAxOSAoaGVscC1h
cmdzICh0aW1lci1ldmVudC1oYW5kbGVyKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBi
dXR0b24gKHQpKSkgIygiaGVsbS1yZWFkLWZyb20tbWluaWJ1ZmZlciIgMCAyNSAoaGVscC1hcmdz
IChoZWxtLXJlYWQtZnJvbS1taW5pYnVmZmVyKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRv
biBidXR0b24gKHQpKSldIDYgWyMoInN1YnN0aXR1dGUtY29tbWFuZC1rZXlzIiAwIDIzIChoZWxw
LWFyZ3MgKHN1YnN0aXR1dGUtY29tbWFuZC1rZXlzKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1
dHRvbiBidXR0b24gKHQpKSkgIygiaGVsbS1nZXQtZmlyc3QtbGluZS1kb2N1bWVudGF0aW9uIiAw
IDMzIChoZWxwLWFyZ3MgKGhlbG0tZ2V0LWZpcnN0LWxpbmUtZG9jdW1lbnRhdGlvbikgY2F0ZWdv
cnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImhlbG0tTS14LXRyYW5zZm9y
bWVyLTEiIDAgMjIgKGhlbHAtYXJncyAoaGVsbS1NLXgtdHJhbnNmb3JtZXItMSkgY2F0ZWdvcnkg
aGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImhlbG0tTS14LXRyYW5zZm9ybWVy
IiAwIDIwIChoZWxwLWFyZ3MgKGhlbG0tTS14LXRyYW5zZm9ybWVyKSBjYXRlZ29yeSBoZWxwLWZ1
bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygiaGVsbS1hcHBseS1mdW5jdGlvbnMtZnJvbS1z
b3VyY2UiIDAgMzIgKGhlbHAtYXJncyAoaGVsbS1hcHBseS1mdW5jdGlvbnMtZnJvbS1zb3VyY2Up
IGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJoZWxtLXByb2Nl
c3MtZmlsdGVyZWQtY2FuZGlkYXRlLXRyYW5zZm9ybWVyIiAwIDQzIChoZWxwLWFyZ3MgKGhlbG0t
cHJvY2Vzcy1maWx0ZXJlZC1jYW5kaWRhdGUtdHJhbnNmb3JtZXIpIGNhdGVnb3J5IGhlbHAtZnVu
Y3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJoZWxtLWNvbXB1dGUtbWF0Y2hlcyIgMCAyMCAo
aGVscC1hcmdzIChoZWxtLWNvbXB1dGUtbWF0Y2hlcykgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1i
dXR0b24gYnV0dG9uICh0KSkpICMoImhlbG0tLWNvbGxlY3QtbWF0Y2hlcyIgMCAyMSAoaGVscC1h
cmdzIChoZWxtLS1jb2xsZWN0LW1hdGNoZXMpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9u
IGJ1dHRvbiAodCkpKSAjKCJoZWxtLXVwZGF0ZSIgMCAxMSAoaGVscC1hcmdzIChoZWxtLXVwZGF0
ZSkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImhlbG0tY2hl
Y2stbmV3LWlucHV0IiAwIDIwIChoZWxwLWFyZ3MgKGhlbG0tY2hlY2stbmV3LWlucHV0KSBjYXRl
Z29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygiaGVsbS1jaGVjay1taW5p
YnVmZmVyLWlucHV0IiAwIDI3IChoZWxwLWFyZ3MgKGhlbG0tY2hlY2stbWluaWJ1ZmZlci1pbnB1
dCkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoIiM8Y29tcGls
ZWQtZnVuY3Rpb24gNDJGPiIgMjAgMjMgKGFjdGlvbiBoZWxwLWZucy0tZGlzcGxheS1mdW5jdGlv
biBrZXltYXAgKGtleW1hcCAodG91Y2hzY3JlZW4tZG93biAuIHB1c2gtYnV0dG9uKSAoaGVhZGVy
LWxpbmUga2V5bWFwICh0b3VjaHNjcmVlbi1kb3duIC4gcHVzaC1idXR0b24pIChtb3VzZS0yIC4g
cHVzaC1idXR0b24pKSAobW9kZS1saW5lIGtleW1hcCAodG91Y2hzY3JlZW4tZG93biAuIHB1c2gt
YnV0dG9uKSAobW91c2UtMiAuIHB1c2gtYnV0dG9uKSkgKGZvbGxvdy1saW5rIC4gbW91c2UtZmFj
ZSkgKG1vdXNlLTIgLiBwdXNoLWJ1dHRvbikgKDEzIC4gcHVzaC1idXR0b24pIGtleW1hcCAoYmFj
a3RhYiAuIGJhY2t3YXJkLWJ1dHRvbikgKDI3IGtleW1hcCAoOSAuIGJhY2t3YXJkLWJ1dHRvbikp
ICg5IC4gZm9yd2FyZC1idXR0b24pKSBidXR0b24tZGF0YSAjWzAgIghcMjA2BQAJP1wyMDUZAFwz
MDIgclwzMDNcMzA0AlwiXDIxNlwzMDUgXDIxMFwzMDYgKlwyNjIBXDIwNyIgW2hlbG0taW4tcGVy
c2lzdGVudC1hY3Rpb24gaGVsbS1zdXNwZW5kLXVwZGF0ZS1mbGFnIGludGVybmFsLS1iZWZvcmUt
c2F2ZS1zZWxlY3RlZC13aW5kb3cgbWFrZS1jbG9zdXJlICNbMCAiXDMwMVwzMDAhXDIwNyIgW1Yw
IGludGVybmFsLS1hZnRlci1zYXZlLXNlbGVjdGVkLXdpbmRvd10gMl0gaGVsbS1jaGVjay1taW5p
YnVmZmVyLWlucHV0IGhlbG0tcHJpbnQtZXJyb3ItbWVzc2FnZXNdIDRdIGNhdGVnb3J5IHQgZm9s
bG93LWxpbmsgdCBidXR0b24gdCBoZWxwLWVjaG8gIm1vdXNlLTIsIFJFVDogRGlzcGxheSB0aGUg
ZnVuY3Rpb24ncyBib2R5IiBtb3VzZS1mYWNlIGhpZ2hsaWdodCBmb250LWxvY2stZmFjZSBidXR0
b24gZmFjZSBidXR0b24pKSAjKCJhcHBseSIgMCA1IChoZWxwLWFyZ3MgKGFwcGx5KSBjYXRlZ29y
eSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygidGltZXItZXZlbnQtaGFuZGxl
ciIgMCAxOSAoaGVscC1hcmdzICh0aW1lci1ldmVudC1oYW5kbGVyKSBjYXRlZ29yeSBoZWxwLWZ1
bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygiaGVsbS1yZWFkLWZyb20tbWluaWJ1ZmZlciIg
MCAyNSAoaGVscC1hcmdzIChoZWxtLXJlYWQtZnJvbS1taW5pYnVmZmVyKSBjYXRlZ29yeSBoZWxw
LWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygiaGVsbS1pbnRlcm5hbCIgMCAxMyAoaGVs
cC1hcmdzIChoZWxtLWludGVybmFsKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0
b24gKHQpKSldIDExIFsjKCJoZWxtLU0teC10cmFuc2Zvcm1lci0xIiAwIDIyIChoZWxwLWFyZ3Mg
KGhlbG0tTS14LXRyYW5zZm9ybWVyLTEpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1
dHRvbiAodCkpKSAjKCJoZWxtLU0teC10cmFuc2Zvcm1lciIgMCAyMCAoaGVscC1hcmdzIChoZWxt
LU0teC10cmFuc2Zvcm1lcikgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0
KSkpICMoImhlbG0tYXBwbHktZnVuY3Rpb25zLWZyb20tc291cmNlIiAwIDMyIChoZWxwLWFyZ3Mg
KGhlbG0tYXBwbHktZnVuY3Rpb25zLWZyb20tc291cmNlKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9u
LWJ1dHRvbiBidXR0b24gKHQpKSkgIygiaGVsbS1wcm9jZXNzLWZpbHRlcmVkLWNhbmRpZGF0ZS10
cmFuc2Zvcm1lciIgMCA0MyAoaGVscC1hcmdzIChoZWxtLXByb2Nlc3MtZmlsdGVyZWQtY2FuZGlk
YXRlLXRyYW5zZm9ybWVyKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQp
KSkgIygiaGVsbS1jb21wdXRlLW1hdGNoZXMiIDAgMjAgKGhlbHAtYXJncyAoaGVsbS1jb21wdXRl
LW1hdGNoZXMpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJo
ZWxtLS1jb2xsZWN0LW1hdGNoZXMiIDAgMjEgKGhlbHAtYXJncyAoaGVsbS0tY29sbGVjdC1tYXRj
aGVzKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygiaGVsbS11
cGRhdGUiIDAgMTEgKGhlbHAtYXJncyAoaGVsbS11cGRhdGUpIGNhdGVnb3J5IGhlbHAtZnVuY3Rp
b24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJoZWxtLWNoZWNrLW5ldy1pbnB1dCIgMCAyMCAoaGVs
cC1hcmdzIChoZWxtLWNoZWNrLW5ldy1pbnB1dCkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0
b24gYnV0dG9uICh0KSkpICMoImhlbG0tY2hlY2stbWluaWJ1ZmZlci1pbnB1dCIgMCAyNyAoaGVs
cC1hcmdzIChoZWxtLWNoZWNrLW1pbmlidWZmZXItaW5wdXQpIGNhdGVnb3J5IGhlbHAtZnVuY3Rp
b24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCIjPGNvbXBpbGVkLWZ1bmN0aW9uIDQyRj4iIDIwIDIz
IChhY3Rpb24gaGVscC1mbnMtLWRpc3BsYXktZnVuY3Rpb24ga2V5bWFwIChrZXltYXAgKHRvdWNo
c2NyZWVuLWRvd24gLiBwdXNoLWJ1dHRvbikgKGhlYWRlci1saW5lIGtleW1hcCAodG91Y2hzY3Jl
ZW4tZG93biAuIHB1c2gtYnV0dG9uKSAobW91c2UtMiAuIHB1c2gtYnV0dG9uKSkgKG1vZGUtbGlu
ZSBrZXltYXAgKHRvdWNoc2NyZWVuLWRvd24gLiBwdXNoLWJ1dHRvbikgKG1vdXNlLTIgLiBwdXNo
LWJ1dHRvbikpIChmb2xsb3ctbGluayAuIG1vdXNlLWZhY2UpIChtb3VzZS0yIC4gcHVzaC1idXR0
b24pICgxMyAuIHB1c2gtYnV0dG9uKSBrZXltYXAgKGJhY2t0YWIgLiBiYWNrd2FyZC1idXR0b24p
ICgyNyBrZXltYXAgKDkgLiBiYWNrd2FyZC1idXR0b24pKSAoOSAuIGZvcndhcmQtYnV0dG9uKSkg
YnV0dG9uLWRhdGEgI1swICIIXDIwNgUACT9cMjA1GQBcMzAyIHJcMzAzXDMwNAJcIlwyMTZcMzA1
IFwyMTBcMzA2ICpcMjYyAVwyMDciIFtoZWxtLWluLXBlcnNpc3RlbnQtYWN0aW9uIGhlbG0tc3Vz
cGVuZC11cGRhdGUtZmxhZyBpbnRlcm5hbC0tYmVmb3JlLXNhdmUtc2VsZWN0ZWQtd2luZG93IG1h
a2UtY2xvc3VyZSAjWzAgIlwzMDFcMzAwIVwyMDciIFtWMCBpbnRlcm5hbC0tYWZ0ZXItc2F2ZS1z
ZWxlY3RlZC13aW5kb3ddIDJdIGhlbG0tY2hlY2stbWluaWJ1ZmZlci1pbnB1dCBoZWxtLXByaW50
LWVycm9yLW1lc3NhZ2VzXSA0XSBjYXRlZ29yeSB0IGZvbGxvdy1saW5rIHQgYnV0dG9uIHQgaGVs
cC1lY2hvICJtb3VzZS0yLCBSRVQ6IERpc3BsYXkgdGhlIGZ1bmN0aW9uJ3MgYm9keSIgbW91c2Ut
ZmFjZSBoaWdobGlnaHQgZm9udC1sb2NrLWZhY2UgYnV0dG9uIGZhY2UgYnV0dG9uKSkgIygiYXBw
bHkiIDAgNSAoaGVscC1hcmdzIChhcHBseSkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24g
YnV0dG9uICh0KSkpICMoInRpbWVyLWV2ZW50LWhhbmRsZXIiIDAgMTkgKGhlbHAtYXJncyAodGlt
ZXItZXZlbnQtaGFuZGxlcikgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0
KSkpICMoImhlbG0tcmVhZC1mcm9tLW1pbmlidWZmZXIiIDAgMjUgKGhlbHAtYXJncyAoaGVsbS1y
ZWFkLWZyb20tbWluaWJ1ZmZlcikgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9u
ICh0KSkpICMoImhlbG0taW50ZXJuYWwiIDAgMTMgKGhlbHAtYXJncyAoaGVsbS1pbnRlcm5hbCkg
Y2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImhlbG0iIDAgNCAo
aGVscC1hcmdzIChoZWxtKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQp
KSkgIygiaGVsbSIgMCA0IChoZWxwLWFyZ3MgKGhlbG0pIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24t
YnV0dG9uIGJ1dHRvbiAodCkpKV0gMTEgWyMoIm1ha2UtY2xvc3VyZSIgMCAxMiAoaGVscC1hcmdz
IChtYWtlLWNsb3N1cmUpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkp
KSAjKCJoZWxtLWZ1enp5LWRlZmF1bHQtaGlnaGxpZ2h0LW1hdGNoLTEiIDAgMzYgKGhlbHAtYXJn
cyAoaGVsbS1mdXp6eS1kZWZhdWx0LWhpZ2hsaWdodC1tYXRjaC0xKSBjYXRlZ29yeSBoZWxwLWZ1
bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygiaGVsbS1mdXp6eS1kZWZhdWx0LWhpZ2hsaWdo
dC1tYXRjaCIgMCAzNCAoaGVscC1hcmdzIChoZWxtLWZ1enp5LWRlZmF1bHQtaGlnaGxpZ2h0LW1h
dGNoKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygiaGVsbS1m
dXp6eS1oaWdobGlnaHQtbWF0Y2hlcyIgMCAyOCAoaGVscC1hcmdzIChoZWxtLWZ1enp5LWhpZ2hs
aWdodC1tYXRjaGVzKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkg
IygiaGVsbS1hcHBseS1mdW5jdGlvbnMtZnJvbS1zb3VyY2UiIDAgMzIgKGhlbHAtYXJncyAoaGVs
bS1hcHBseS1mdW5jdGlvbnMtZnJvbS1zb3VyY2UpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0
dG9uIGJ1dHRvbiAodCkpKSAjKCJoZWxtLXByb2Nlc3MtZmlsdGVyZWQtY2FuZGlkYXRlLXRyYW5z
Zm9ybWVyIiAwIDQzIChoZWxwLWFyZ3MgKGhlbG0tcHJvY2Vzcy1maWx0ZXJlZC1jYW5kaWRhdGUt
dHJhbnNmb3JtZXIpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAj
KCJoZWxtLWNvbXB1dGUtbWF0Y2hlcyIgMCAyMCAoaGVscC1hcmdzIChoZWxtLWNvbXB1dGUtbWF0
Y2hlcykgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImhlbG0t
LWNvbGxlY3QtbWF0Y2hlcyIgMCAyMSAoaGVscC1hcmdzIChoZWxtLS1jb2xsZWN0LW1hdGNoZXMp
IGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJoZWxtLXVwZGF0
ZSIgMCAxMSAoaGVscC1hcmdzIChoZWxtLXVwZGF0ZSkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1i
dXR0b24gYnV0dG9uICh0KSkpICMoImhlbG0tY2hlY2stbmV3LWlucHV0IiAwIDIwIChoZWxwLWFy
Z3MgKGhlbG0tY2hlY2stbmV3LWlucHV0KSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBi
dXR0b24gKHQpKSkgIygiaGVsbS1jaGVjay1taW5pYnVmZmVyLWlucHV0IiAwIDI3IChoZWxwLWFy
Z3MgKGhlbG0tY2hlY2stbWluaWJ1ZmZlci1pbnB1dCkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1i
dXR0b24gYnV0dG9uICh0KSkpICMoIiM8Y29tcGlsZWQtZnVuY3Rpb24gNDJGPiIgMjAgMjMgKGFj
dGlvbiBoZWxwLWZucy0tZGlzcGxheS1mdW5jdGlvbiBrZXltYXAgKGtleW1hcCAodG91Y2hzY3Jl
ZW4tZG93biAuIHB1c2gtYnV0dG9uKSAoaGVhZGVyLWxpbmUga2V5bWFwICh0b3VjaHNjcmVlbi1k
b3duIC4gcHVzaC1idXR0b24pIChtb3VzZS0yIC4gcHVzaC1idXR0b24pKSAobW9kZS1saW5lIGtl
eW1hcCAodG91Y2hzY3JlZW4tZG93biAuIHB1c2gtYnV0dG9uKSAobW91c2UtMiAuIHB1c2gtYnV0
dG9uKSkgKGZvbGxvdy1saW5rIC4gbW91c2UtZmFjZSkgKG1vdXNlLTIgLiBwdXNoLWJ1dHRvbikg
KDEzIC4gcHVzaC1idXR0b24pIGtleW1hcCAoYmFja3RhYiAuIGJhY2t3YXJkLWJ1dHRvbikgKDI3
IGtleW1hcCAoOSAuIGJhY2t3YXJkLWJ1dHRvbikpICg5IC4gZm9yd2FyZC1idXR0b24pKSBidXR0
b24tZGF0YSAjWzAgIghcMjA2BQAJP1wyMDUZAFwzMDIgclwzMDNcMzA0AlwiXDIxNlwzMDUgXDIx
MFwzMDYgKlwyNjIBXDIwNyIgW2hlbG0taW4tcGVyc2lzdGVudC1hY3Rpb24gaGVsbS1zdXNwZW5k
LXVwZGF0ZS1mbGFnIGludGVybmFsLS1iZWZvcmUtc2F2ZS1zZWxlY3RlZC13aW5kb3cgbWFrZS1j
bG9zdXJlICNbMCAiXDMwMVwzMDAhXDIwNyIgW1YwIGludGVybmFsLS1hZnRlci1zYXZlLXNlbGVj
dGVkLXdpbmRvd10gMl0gaGVsbS1jaGVjay1taW5pYnVmZmVyLWlucHV0IGhlbG0tcHJpbnQtZXJy
b3ItbWVzc2FnZXNdIDRdIGNhdGVnb3J5IHQgZm9sbG93LWxpbmsgdCBidXR0b24gdCBoZWxwLWVj
aG8gIm1vdXNlLTIsIFJFVDogRGlzcGxheSB0aGUgZnVuY3Rpb24ncyBib2R5IiBtb3VzZS1mYWNl
IGhpZ2hsaWdodCBmb250LWxvY2stZmFjZSBidXR0b24gZmFjZSBidXR0b24pKSAjKCJhcHBseSIg
MCA1IChoZWxwLWFyZ3MgKGFwcGx5KSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0
b24gKHQpKSkgIygidGltZXItZXZlbnQtaGFuZGxlciIgMCAxOSAoaGVscC1hcmdzICh0aW1lci1l
dmVudC1oYW5kbGVyKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkg
IygiaGVsbS1yZWFkLWZyb20tbWluaWJ1ZmZlciIgMCAyNSAoaGVscC1hcmdzIChoZWxtLXJlYWQt
ZnJvbS1taW5pYnVmZmVyKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQp
KSkgIygiaGVsbS1pbnRlcm5hbCIgMCAxMyAoaGVscC1hcmdzIChoZWxtLWludGVybmFsKSBjYXRl
Z29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSldIDMgWyMoImhlbG0taW5zZXJ0
LW1hdGNoIiAwIDE3IChoZWxwLWFyZ3MgKGhlbG0taW5zZXJ0LW1hdGNoKSBjYXRlZ29yeSBoZWxw
LWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygiaGVsbS1yZW5kZXItc291cmNlIiAwIDE4
IChoZWxwLWFyZ3MgKGhlbG0tcmVuZGVyLXNvdXJjZSkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1i
dXR0b24gYnV0dG9uICh0KSkpICMoImhlbG0tdXBkYXRlIiAwIDExIChoZWxwLWFyZ3MgKGhlbG0t
dXBkYXRlKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygiaGVs
bS1jaGVjay1uZXctaW5wdXQiIDAgMjAgKGhlbHAtYXJncyAoaGVsbS1jaGVjay1uZXctaW5wdXQp
IGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJoZWxtLWNoZWNr
LW1pbmlidWZmZXItaW5wdXQiIDAgMjcgKGhlbHAtYXJncyAoaGVsbS1jaGVjay1taW5pYnVmZmVy
LWlucHV0KSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygiIzxj
b21waWxlZC1mdW5jdGlvbiA0MkY+IiAyMCAyMyAoYWN0aW9uIGhlbHAtZm5zLS1kaXNwbGF5LWZ1
bmN0aW9uIGtleW1hcCAoa2V5bWFwICh0b3VjaHNjcmVlbi1kb3duIC4gcHVzaC1idXR0b24pICho
ZWFkZXItbGluZSBrZXltYXAgKHRvdWNoc2NyZWVuLWRvd24gLiBwdXNoLWJ1dHRvbikgKG1vdXNl
LTIgLiBwdXNoLWJ1dHRvbikpIChtb2RlLWxpbmUga2V5bWFwICh0b3VjaHNjcmVlbi1kb3duIC4g
cHVzaC1idXR0b24pIChtb3VzZS0yIC4gcHVzaC1idXR0b24pKSAoZm9sbG93LWxpbmsgLiBtb3Vz
ZS1mYWNlKSAobW91c2UtMiAuIHB1c2gtYnV0dG9uKSAoMTMgLiBwdXNoLWJ1dHRvbikga2V5bWFw
IChiYWNrdGFiIC4gYmFja3dhcmQtYnV0dG9uKSAoMjcga2V5bWFwICg5IC4gYmFja3dhcmQtYnV0
dG9uKSkgKDkgLiBmb3J3YXJkLWJ1dHRvbikpIGJ1dHRvbi1kYXRhICNbMCAiCFwyMDYFAAk/XDIw
NRkAXDMwMiByXDMwM1wzMDQCXCJcMjE2XDMwNSBcMjEwXDMwNiAqXDI2MgFcMjA3IiBbaGVsbS1p
bi1wZXJzaXN0ZW50LWFjdGlvbiBoZWxtLXN1c3BlbmQtdXBkYXRlLWZsYWcgaW50ZXJuYWwtLWJl
Zm9yZS1zYXZlLXNlbGVjdGVkLXdpbmRvdyBtYWtlLWNsb3N1cmUgI1swICJcMzAxXDMwMCFcMjA3
IiBbVjAgaW50ZXJuYWwtLWFmdGVyLXNhdmUtc2VsZWN0ZWQtd2luZG93XSAyXSBoZWxtLWNoZWNr
LW1pbmlidWZmZXItaW5wdXQgaGVsbS1wcmludC1lcnJvci1tZXNzYWdlc10gNF0gY2F0ZWdvcnkg
dCBmb2xsb3ctbGluayB0IGJ1dHRvbiB0IGhlbHAtZWNobyAibW91c2UtMiwgUkVUOiBEaXNwbGF5
IHRoZSBmdW5jdGlvbidzIGJvZHkiIG1vdXNlLWZhY2UgaGlnaGxpZ2h0IGZvbnQtbG9jay1mYWNl
IGJ1dHRvbiBmYWNlIGJ1dHRvbikpICMoImFwcGx5IiAwIDUgKGhlbHAtYXJncyAoYXBwbHkpIGNh
dGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJ0aW1lci1ldmVudC1o
YW5kbGVyIiAwIDE5IChoZWxwLWFyZ3MgKHRpbWVyLWV2ZW50LWhhbmRsZXIpIGNhdGVnb3J5IGhl
bHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJoZWxtLXJlYWQtZnJvbS1taW5pYnVm
ZmVyIiAwIDI1IChoZWxwLWFyZ3MgKGhlbG0tcmVhZC1mcm9tLW1pbmlidWZmZXIpIGNhdGVnb3J5
IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJoZWxtLWludGVybmFsIiAwIDEz
IChoZWxwLWFyZ3MgKGhlbG0taW50ZXJuYWwpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9u
IGJ1dHRvbiAodCkpKSAjKCJoZWxtIiAwIDQgKGhlbHAtYXJncyAoaGVsbSkgY2F0ZWdvcnkgaGVs
cC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImhlbG0iIDAgNCAoaGVscC1hcmdzICho
ZWxtKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygiaGVsbS1N
LXgtcmVhZC1leHRlbmRlZC1jb21tYW5kIiAwIDMwIChoZWxwLWFyZ3MgKGhlbG0tTS14LXJlYWQt
ZXh0ZW5kZWQtY29tbWFuZCkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0
KSkpICMoImhlbG0tTS14IiAwIDggKGhlbHAtYXJncyAoaGVsbS1NLXgpIGNhdGVnb3J5IGhlbHAt
ZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJmdW5jYWxsLWludGVyYWN0aXZlbHkiIDAg
MjEgKGhlbHAtYXJncyAoZnVuY2FsbC1pbnRlcmFjdGl2ZWx5KSBjYXRlZ29yeSBoZWxwLWZ1bmN0
aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygiY29tbWFuZC1leGVjdXRlIiAwIDE1IChoZWxwLWFy
Z3MgKGNvbW1hbmQtZXhlY3V0ZSkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9u
ICh0KSkpXSAzIFsjKCJraWxsLWJ1ZmZlciIgMCAxMSAoaGVscC1hcmdzIChraWxsLWJ1ZmZlcikg
Y2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoIiM8Y29tcGlsZWQt
ZnVuY3Rpb24gMjY0PiIgMjAgMjMgKGFjdGlvbiBoZWxwLWZucy0tZGlzcGxheS1mdW5jdGlvbiBr
ZXltYXAgKGtleW1hcCAodG91Y2hzY3JlZW4tZG93biAuIHB1c2gtYnV0dG9uKSAoaGVhZGVyLWxp
bmUga2V5bWFwICh0b3VjaHNjcmVlbi1kb3duIC4gcHVzaC1idXR0b24pIChtb3VzZS0yIC4gcHVz
aC1idXR0b24pKSAobW9kZS1saW5lIGtleW1hcCAodG91Y2hzY3JlZW4tZG93biAuIHB1c2gtYnV0
dG9uKSAobW91c2UtMiAuIHB1c2gtYnV0dG9uKSkgKGZvbGxvdy1saW5rIC4gbW91c2UtZmFjZSkg
KG1vdXNlLTIgLiBwdXNoLWJ1dHRvbikgKDEzIC4gcHVzaC1idXR0b24pIGtleW1hcCAoYmFja3Rh
YiAuIGJhY2t3YXJkLWJ1dHRvbikgKDI3IGtleW1hcCAoOSAuIGJhY2t3YXJkLWJ1dHRvbikpICg5
IC4gZm9yd2FyZC1idXR0b24pKSBidXR0b24tZGF0YSAjWzAgIlwzMDFcMzAwIVwyMDUJAFwzMDJc
MzAwIVwyMDciIFsjPGtpbGxlZCBidWZmZXI+IGJ1ZmZlci1uYW1lIGtpbGwtYnVmZmVyXSAyXSBj
YXRlZ29yeSB0IGZvbGxvdy1saW5rIHQgYnV0dG9uIHQgaGVscC1lY2hvICJtb3VzZS0yLCBSRVQ6
IERpc3BsYXkgdGhlIGZ1bmN0aW9uJ3MgYm9keSIgbW91c2UtZmFjZSBoaWdobGlnaHQgZm9udC1s
b2NrLWZhY2UgYnV0dG9uIGZhY2UgYnV0dG9uKSkgIygic3Vic3RpdHV0ZS1jb21tYW5kLWtleXMi
IDAgMjMgKGhlbHAtYXJncyAoc3Vic3RpdHV0ZS1jb21tYW5kLWtleXMpIGNhdGVnb3J5IGhlbHAt
ZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJoZWxtLU0teC10cmFuc2Zvcm1lci0xIiAw
IDIyIChoZWxwLWFyZ3MgKGhlbG0tTS14LXRyYW5zZm9ybWVyLTEpIGNhdGVnb3J5IGhlbHAtZnVu
Y3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJoZWxtLU0teC10cmFuc2Zvcm1lciIgMCAyMCAo
aGVscC1hcmdzIChoZWxtLU0teC10cmFuc2Zvcm1lcikgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1i
dXR0b24gYnV0dG9uICh0KSkpICMoImhlbG0tYXBwbHktZnVuY3Rpb25zLWZyb20tc291cmNlIiAw
IDMyIChoZWxwLWFyZ3MgKGhlbG0tYXBwbHktZnVuY3Rpb25zLWZyb20tc291cmNlKSBjYXRlZ29y
eSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygiaGVsbS1wcm9jZXNzLWZpbHRl
cmVkLWNhbmRpZGF0ZS10cmFuc2Zvcm1lciIgMCA0MyAoaGVscC1hcmdzIChoZWxtLXByb2Nlc3Mt
ZmlsdGVyZWQtY2FuZGlkYXRlLXRyYW5zZm9ybWVyKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1
dHRvbiBidXR0b24gKHQpKSkgIygiaGVsbS1jb21wdXRlLW1hdGNoZXMiIDAgMjAgKGhlbHAtYXJn
cyAoaGVsbS1jb21wdXRlLW1hdGNoZXMpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1
dHRvbiAodCkpKSAjKCJoZWxtLS1jb2xsZWN0LW1hdGNoZXMiIDAgMjEgKGhlbHAtYXJncyAoaGVs
bS0tY29sbGVjdC1tYXRjaGVzKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24g
KHQpKSkgIygiaGVsbS11cGRhdGUiIDAgMTEgKGhlbHAtYXJncyAoaGVsbS11cGRhdGUpIGNhdGVn
b3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJoZWxtLWNoZWNrLW5ldy1p
bnB1dCIgMCAyMCAoaGVscC1hcmdzIChoZWxtLWNoZWNrLW5ldy1pbnB1dCkgY2F0ZWdvcnkgaGVs
cC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImhlbG0tY2hlY2stbWluaWJ1ZmZlci1p
bnB1dCIgMCAyNyAoaGVscC1hcmdzIChoZWxtLWNoZWNrLW1pbmlidWZmZXItaW5wdXQpIGNhdGVn
b3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCIjPGNvbXBpbGVkLWZ1bmN0
aW9uIDQyRj4iIDIwIDIzIChhY3Rpb24gaGVscC1mbnMtLWRpc3BsYXktZnVuY3Rpb24ga2V5bWFw
IChrZXltYXAgKHRvdWNoc2NyZWVuLWRvd24gLiBwdXNoLWJ1dHRvbikgKGhlYWRlci1saW5lIGtl
eW1hcCAodG91Y2hzY3JlZW4tZG93biAuIHB1c2gtYnV0dG9uKSAobW91c2UtMiAuIHB1c2gtYnV0
dG9uKSkgKG1vZGUtbGluZSBrZXltYXAgKHRvdWNoc2NyZWVuLWRvd24gLiBwdXNoLWJ1dHRvbikg
KG1vdXNlLTIgLiBwdXNoLWJ1dHRvbikpIChmb2xsb3ctbGluayAuIG1vdXNlLWZhY2UpIChtb3Vz
ZS0yIC4gcHVzaC1idXR0b24pICgxMyAuIHB1c2gtYnV0dG9uKSBrZXltYXAgKGJhY2t0YWIgLiBi
YWNrd2FyZC1idXR0b24pICgyNyBrZXltYXAgKDkgLiBiYWNrd2FyZC1idXR0b24pKSAoOSAuIGZv
cndhcmQtYnV0dG9uKSkgYnV0dG9uLWRhdGEgI1swICIIXDIwNgUACT9cMjA1GQBcMzAyIHJcMzAz
XDMwNAJcIlwyMTZcMzA1IFwyMTBcMzA2ICpcMjYyAVwyMDciIFtoZWxtLWluLXBlcnNpc3RlbnQt
YWN0aW9uIGhlbG0tc3VzcGVuZC11cGRhdGUtZmxhZyBpbnRlcm5hbC0tYmVmb3JlLXNhdmUtc2Vs
ZWN0ZWQtd2luZG93IG1ha2UtY2xvc3VyZSAjWzAgIlwzMDFcMzAwIVwyMDciIFtWMCBpbnRlcm5h
bC0tYWZ0ZXItc2F2ZS1zZWxlY3RlZC13aW5kb3ddIDJdIGhlbG0tY2hlY2stbWluaWJ1ZmZlci1p
bnB1dCBoZWxtLXByaW50LWVycm9yLW1lc3NhZ2VzXSA0XSBjYXRlZ29yeSB0IGZvbGxvdy1saW5r
IHQgYnV0dG9uIHQgaGVscC1lY2hvICJtb3VzZS0yLCBSRVQ6IERpc3BsYXkgdGhlIGZ1bmN0aW9u
J3MgYm9keSIgbW91c2UtZmFjZSBoaWdobGlnaHQgZm9udC1sb2NrLWZhY2UgYnV0dG9uIGZhY2Ug
YnV0dG9uKSkgIygiYXBwbHkiIDAgNSAoaGVscC1hcmdzIChhcHBseSkgY2F0ZWdvcnkgaGVscC1m
dW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoInRpbWVyLWV2ZW50LWhhbmRsZXIiIDAgMTkg
KGhlbHAtYXJncyAodGltZXItZXZlbnQtaGFuZGxlcikgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1i
dXR0b24gYnV0dG9uICh0KSkpICMoImhlbG0tcmVhZC1mcm9tLW1pbmlidWZmZXIiIDAgMjUgKGhl
bHAtYXJncyAoaGVsbS1yZWFkLWZyb20tbWluaWJ1ZmZlcikgY2F0ZWdvcnkgaGVscC1mdW5jdGlv
bi1idXR0b24gYnV0dG9uICh0KSkpXSAzIFsjKCJidWZmZXItc3RyaW5nIiAwIDEzIChoZWxwLWFy
Z3MgKGJ1ZmZlci1zdHJpbmcpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAo
dCkpKSAjKCJoZWxtLWZ1enp5LWRlZmF1bHQtaGlnaGxpZ2h0LW1hdGNoLTEiIDAgMzYgKGhlbHAt
YXJncyAoaGVsbS1mdXp6eS1kZWZhdWx0LWhpZ2hsaWdodC1tYXRjaC0xKSBjYXRlZ29yeSBoZWxw
LWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygiaGVsbS1mdXp6eS1kZWZhdWx0LWhpZ2hs
aWdodC1tYXRjaCIgMCAzNCAoaGVscC1hcmdzIChoZWxtLWZ1enp5LWRlZmF1bHQtaGlnaGxpZ2h0
LW1hdGNoKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygiaGVs
bS1mdXp6eS1oaWdobGlnaHQtbWF0Y2hlcyIgMCAyOCAoaGVscC1hcmdzIChoZWxtLWZ1enp5LWhp
Z2hsaWdodC1tYXRjaGVzKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQp
KSkgIygiaGVsbS1hcHBseS1mdW5jdGlvbnMtZnJvbS1zb3VyY2UiIDAgMzIgKGhlbHAtYXJncyAo
aGVsbS1hcHBseS1mdW5jdGlvbnMtZnJvbS1zb3VyY2UpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24t
YnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJoZWxtLXByb2Nlc3MtZmlsdGVyZWQtY2FuZGlkYXRlLXRy
YW5zZm9ybWVyIiAwIDQzIChoZWxwLWFyZ3MgKGhlbG0tcHJvY2Vzcy1maWx0ZXJlZC1jYW5kaWRh
dGUtdHJhbnNmb3JtZXIpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkp
KSAjKCJoZWxtLWNvbXB1dGUtbWF0Y2hlcyIgMCAyMCAoaGVscC1hcmdzIChoZWxtLWNvbXB1dGUt
bWF0Y2hlcykgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImhl
bG0tLWNvbGxlY3QtbWF0Y2hlcyIgMCAyMSAoaGVscC1hcmdzIChoZWxtLS1jb2xsZWN0LW1hdGNo
ZXMpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJoZWxtLXVw
ZGF0ZSIgMCAxMSAoaGVscC1hcmdzIChoZWxtLXVwZGF0ZSkgY2F0ZWdvcnkgaGVscC1mdW5jdGlv
bi1idXR0b24gYnV0dG9uICh0KSkpICMoImhlbG0tY2hlY2stbmV3LWlucHV0IiAwIDIwIChoZWxw
LWFyZ3MgKGhlbG0tY2hlY2stbmV3LWlucHV0KSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRv
biBidXR0b24gKHQpKSkgIygiaGVsbS1jaGVjay1taW5pYnVmZmVyLWlucHV0IiAwIDI3IChoZWxw
LWFyZ3MgKGhlbG0tY2hlY2stbWluaWJ1ZmZlci1pbnB1dCkgY2F0ZWdvcnkgaGVscC1mdW5jdGlv
bi1idXR0b24gYnV0dG9uICh0KSkpICMoIiM8Y29tcGlsZWQtZnVuY3Rpb24gNDJGPiIgMjAgMjMg
KGFjdGlvbiBoZWxwLWZucy0tZGlzcGxheS1mdW5jdGlvbiBrZXltYXAgKGtleW1hcCAodG91Y2hz
Y3JlZW4tZG93biAuIHB1c2gtYnV0dG9uKSAoaGVhZGVyLWxpbmUga2V5bWFwICh0b3VjaHNjcmVl
bi1kb3duIC4gcHVzaC1idXR0b24pIChtb3VzZS0yIC4gcHVzaC1idXR0b24pKSAobW9kZS1saW5l
IGtleW1hcCAodG91Y2hzY3JlZW4tZG93biAuIHB1c2gtYnV0dG9uKSAobW91c2UtMiAuIHB1c2gt
YnV0dG9uKSkgKGZvbGxvdy1saW5rIC4gbW91c2UtZmFjZSkgKG1vdXNlLTIgLiBwdXNoLWJ1dHRv
bikgKDEzIC4gcHVzaC1idXR0b24pIGtleW1hcCAoYmFja3RhYiAuIGJhY2t3YXJkLWJ1dHRvbikg
KDI3IGtleW1hcCAoOSAuIGJhY2t3YXJkLWJ1dHRvbikpICg5IC4gZm9yd2FyZC1idXR0b24pKSBi
dXR0b24tZGF0YSAjWzAgIghcMjA2BQAJP1wyMDUZAFwzMDIgclwzMDNcMzA0AlwiXDIxNlwzMDUg
XDIxMFwzMDYgKlwyNjIBXDIwNyIgW2hlbG0taW4tcGVyc2lzdGVudC1hY3Rpb24gaGVsbS1zdXNw
ZW5kLXVwZGF0ZS1mbGFnIGludGVybmFsLS1iZWZvcmUtc2F2ZS1zZWxlY3RlZC13aW5kb3cgbWFr
ZS1jbG9zdXJlICNbMCAiXDMwMVwzMDAhXDIwNyIgW1YwIGludGVybmFsLS1hZnRlci1zYXZlLXNl
bGVjdGVkLXdpbmRvd10gMl0gaGVsbS1jaGVjay1taW5pYnVmZmVyLWlucHV0IGhlbG0tcHJpbnQt
ZXJyb3ItbWVzc2FnZXNdIDRdIGNhdGVnb3J5IHQgZm9sbG93LWxpbmsgdCBidXR0b24gdCBoZWxw
LWVjaG8gIm1vdXNlLTIsIFJFVDogRGlzcGxheSB0aGUgZnVuY3Rpb24ncyBib2R5IiBtb3VzZS1m
YWNlIGhpZ2hsaWdodCBmb250LWxvY2stZmFjZSBidXR0b24gZmFjZSBidXR0b24pKSAjKCJhcHBs
eSIgMCA1IChoZWxwLWFyZ3MgKGFwcGx5KSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBi
dXR0b24gKHQpKSkgIygidGltZXItZXZlbnQtaGFuZGxlciIgMCAxOSAoaGVscC1hcmdzICh0aW1l
ci1ldmVudC1oYW5kbGVyKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQp
KSkgIygiaGVsbS1yZWFkLWZyb20tbWluaWJ1ZmZlciIgMCAyNSAoaGVscC1hcmdzIChoZWxtLXJl
YWQtZnJvbS1taW5pYnVmZmVyKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24g
KHQpKSkgIygiaGVsbS1pbnRlcm5hbCIgMCAxMyAoaGVscC1hcmdzIChoZWxtLWludGVybmFsKSBj
YXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSldIDQgWyMoImluc2VydCIg
MCA2IChoZWxwLWFyZ3MgKGluc2VydCkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0
dG9uICh0KSkpICMoImhlbG0taW5zZXJ0LW1hdGNoIiAwIDE3IChoZWxwLWFyZ3MgKGhlbG0taW5z
ZXJ0LW1hdGNoKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygi
aGVsbS1yZW5kZXItc291cmNlIiAwIDE4IChoZWxwLWFyZ3MgKGhlbG0tcmVuZGVyLXNvdXJjZSkg
Y2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImhlbG0tdXBkYXRl
IiAwIDExIChoZWxwLWFyZ3MgKGhlbG0tdXBkYXRlKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1
dHRvbiBidXR0b24gKHQpKSkgIygiaGVsbS1jaGVjay1uZXctaW5wdXQiIDAgMjAgKGhlbHAtYXJn
cyAoaGVsbS1jaGVjay1uZXctaW5wdXQpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1
dHRvbiAodCkpKSAjKCJoZWxtLWNoZWNrLW1pbmlidWZmZXItaW5wdXQiIDAgMjcgKGhlbHAtYXJn
cyAoaGVsbS1jaGVjay1taW5pYnVmZmVyLWlucHV0KSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1
dHRvbiBidXR0b24gKHQpKSkgIygiIzxjb21waWxlZC1mdW5jdGlvbiA0MkY+IiAyMCAyMyAoYWN0
aW9uIGhlbHAtZm5zLS1kaXNwbGF5LWZ1bmN0aW9uIGtleW1hcCAoa2V5bWFwICh0b3VjaHNjcmVl
bi1kb3duIC4gcHVzaC1idXR0b24pIChoZWFkZXItbGluZSBrZXltYXAgKHRvdWNoc2NyZWVuLWRv
d24gLiBwdXNoLWJ1dHRvbikgKG1vdXNlLTIgLiBwdXNoLWJ1dHRvbikpIChtb2RlLWxpbmUga2V5
bWFwICh0b3VjaHNjcmVlbi1kb3duIC4gcHVzaC1idXR0b24pIChtb3VzZS0yIC4gcHVzaC1idXR0
b24pKSAoZm9sbG93LWxpbmsgLiBtb3VzZS1mYWNlKSAobW91c2UtMiAuIHB1c2gtYnV0dG9uKSAo
MTMgLiBwdXNoLWJ1dHRvbikga2V5bWFwIChiYWNrdGFiIC4gYmFja3dhcmQtYnV0dG9uKSAoMjcg
a2V5bWFwICg5IC4gYmFja3dhcmQtYnV0dG9uKSkgKDkgLiBmb3J3YXJkLWJ1dHRvbikpIGJ1dHRv
bi1kYXRhICNbMCAiCFwyMDYFAAk/XDIwNRkAXDMwMiByXDMwM1wzMDQCXCJcMjE2XDMwNSBcMjEw
XDMwNiAqXDI2MgFcMjA3IiBbaGVsbS1pbi1wZXJzaXN0ZW50LWFjdGlvbiBoZWxtLXN1c3BlbmQt
dXBkYXRlLWZsYWcgaW50ZXJuYWwtLWJlZm9yZS1zYXZlLXNlbGVjdGVkLXdpbmRvdyBtYWtlLWNs
b3N1cmUgI1swICJcMzAxXDMwMCFcMjA3IiBbVjAgaW50ZXJuYWwtLWFmdGVyLXNhdmUtc2VsZWN0
ZWQtd2luZG93XSAyXSBoZWxtLWNoZWNrLW1pbmlidWZmZXItaW5wdXQgaGVsbS1wcmludC1lcnJv
ci1tZXNzYWdlc10gNF0gY2F0ZWdvcnkgdCBmb2xsb3ctbGluayB0IGJ1dHRvbiB0IGhlbHAtZWNo
byAibW91c2UtMiwgUkVUOiBEaXNwbGF5IHRoZSBmdW5jdGlvbidzIGJvZHkiIG1vdXNlLWZhY2Ug
aGlnaGxpZ2h0IGZvbnQtbG9jay1mYWNlIGJ1dHRvbiBmYWNlIGJ1dHRvbikpICMoImFwcGx5IiAw
IDUgKGhlbHAtYXJncyAoYXBwbHkpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRv
biAodCkpKSAjKCJ0aW1lci1ldmVudC1oYW5kbGVyIiAwIDE5IChoZWxwLWFyZ3MgKHRpbWVyLWV2
ZW50LWhhbmRsZXIpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAj
KCJoZWxtLXJlYWQtZnJvbS1taW5pYnVmZmVyIiAwIDI1IChoZWxwLWFyZ3MgKGhlbG0tcmVhZC1m
cm9tLW1pbmlidWZmZXIpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkp
KSAjKCJoZWxtLWludGVybmFsIiAwIDEzIChoZWxwLWFyZ3MgKGhlbG0taW50ZXJuYWwpIGNhdGVn
b3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJoZWxtIiAwIDQgKGhlbHAt
YXJncyAoaGVsbSkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMo
ImhlbG0iIDAgNCAoaGVscC1hcmdzIChoZWxtKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRv
biBidXR0b24gKHQpKSkgIygiaGVsbS1NLXgtcmVhZC1leHRlbmRlZC1jb21tYW5kIiAwIDMwICho
ZWxwLWFyZ3MgKGhlbG0tTS14LXJlYWQtZXh0ZW5kZWQtY29tbWFuZCkgY2F0ZWdvcnkgaGVscC1m
dW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImhlbG0tTS14IiAwIDggKGhlbHAtYXJncyAo
aGVsbS1NLXgpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJm
dW5jYWxsLWludGVyYWN0aXZlbHkiIDAgMjEgKGhlbHAtYXJncyAoZnVuY2FsbC1pbnRlcmFjdGl2
ZWx5KSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSldIDMgWyMoImNs
YXNzLXAiIDAgNyAoaGVscC1hcmdzIChjbGFzcy1wKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1
dHRvbiBidXR0b24gKHQpKSkgIygiaGVsbS1nZXQtZmlyc3QtbGluZS1kb2N1bWVudGF0aW9uIiAw
IDMzIChoZWxwLWFyZ3MgKGhlbG0tZ2V0LWZpcnN0LWxpbmUtZG9jdW1lbnRhdGlvbikgY2F0ZWdv
cnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImhlbG0tTS14LXRyYW5zZm9y
bWVyLTEiIDAgMjIgKGhlbHAtYXJncyAoaGVsbS1NLXgtdHJhbnNmb3JtZXItMSkgY2F0ZWdvcnkg
aGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImhlbG0tTS14LXRyYW5zZm9ybWVy
IiAwIDIwIChoZWxwLWFyZ3MgKGhlbG0tTS14LXRyYW5zZm9ybWVyKSBjYXRlZ29yeSBoZWxwLWZ1
bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygiaGVsbS1hcHBseS1mdW5jdGlvbnMtZnJvbS1z
b3VyY2UiIDAgMzIgKGhlbHAtYXJncyAoaGVsbS1hcHBseS1mdW5jdGlvbnMtZnJvbS1zb3VyY2Up
IGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJoZWxtLXByb2Nl
c3MtZmlsdGVyZWQtY2FuZGlkYXRlLXRyYW5zZm9ybWVyIiAwIDQzIChoZWxwLWFyZ3MgKGhlbG0t
cHJvY2Vzcy1maWx0ZXJlZC1jYW5kaWRhdGUtdHJhbnNmb3JtZXIpIGNhdGVnb3J5IGhlbHAtZnVu
Y3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJoZWxtLWNvbXB1dGUtbWF0Y2hlcyIgMCAyMCAo
aGVscC1hcmdzIChoZWxtLWNvbXB1dGUtbWF0Y2hlcykgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1i
dXR0b24gYnV0dG9uICh0KSkpICMoImhlbG0tLWNvbGxlY3QtbWF0Y2hlcyIgMCAyMSAoaGVscC1h
cmdzIChoZWxtLS1jb2xsZWN0LW1hdGNoZXMpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9u
IGJ1dHRvbiAodCkpKSAjKCJoZWxtLXVwZGF0ZSIgMCAxMSAoaGVscC1hcmdzIChoZWxtLXVwZGF0
ZSkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImhlbG0tY2hl
Y2stbmV3LWlucHV0IiAwIDIwIChoZWxwLWFyZ3MgKGhlbG0tY2hlY2stbmV3LWlucHV0KSBjYXRl
Z29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygiaGVsbS1jaGVjay1taW5p
YnVmZmVyLWlucHV0IiAwIDI3IChoZWxwLWFyZ3MgKGhlbG0tY2hlY2stbWluaWJ1ZmZlci1pbnB1
dCkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoIiM8Y29tcGls
ZWQtZnVuY3Rpb24gNDJGPiIgMjAgMjMgKGFjdGlvbiBoZWxwLWZucy0tZGlzcGxheS1mdW5jdGlv
biBrZXltYXAgKGtleW1hcCAodG91Y2hzY3JlZW4tZG93biAuIHB1c2gtYnV0dG9uKSAoaGVhZGVy
LWxpbmUga2V5bWFwICh0b3VjaHNjcmVlbi1kb3duIC4gcHVzaC1idXR0b24pIChtb3VzZS0yIC4g
cHVzaC1idXR0b24pKSAobW9kZS1saW5lIGtleW1hcCAodG91Y2hzY3JlZW4tZG93biAuIHB1c2gt
YnV0dG9uKSAobW91c2UtMiAuIHB1c2gtYnV0dG9uKSkgKGZvbGxvdy1saW5rIC4gbW91c2UtZmFj
ZSkgKG1vdXNlLTIgLiBwdXNoLWJ1dHRvbikgKDEzIC4gcHVzaC1idXR0b24pIGtleW1hcCAoYmFj
a3RhYiAuIGJhY2t3YXJkLWJ1dHRvbikgKDI3IGtleW1hcCAoOSAuIGJhY2t3YXJkLWJ1dHRvbikp
ICg5IC4gZm9yd2FyZC1idXR0b24pKSBidXR0b24tZGF0YSAjWzAgIghcMjA2BQAJP1wyMDUZAFwz
MDIgclwzMDNcMzA0AlwiXDIxNlwzMDUgXDIxMFwzMDYgKlwyNjIBXDIwNyIgW2hlbG0taW4tcGVy
c2lzdGVudC1hY3Rpb24gaGVsbS1zdXNwZW5kLXVwZGF0ZS1mbGFnIGludGVybmFsLS1iZWZvcmUt
c2F2ZS1zZWxlY3RlZC13aW5kb3cgbWFrZS1jbG9zdXJlICNbMCAiXDMwMVwzMDAhXDIwNyIgW1Yw
IGludGVybmFsLS1hZnRlci1zYXZlLXNlbGVjdGVkLXdpbmRvd10gMl0gaGVsbS1jaGVjay1taW5p
YnVmZmVyLWlucHV0IGhlbG0tcHJpbnQtZXJyb3ItbWVzc2FnZXNdIDRdIGNhdGVnb3J5IHQgZm9s
bG93LWxpbmsgdCBidXR0b24gdCBoZWxwLWVjaG8gIm1vdXNlLTIsIFJFVDogRGlzcGxheSB0aGUg
ZnVuY3Rpb24ncyBib2R5IiBtb3VzZS1mYWNlIGhpZ2hsaWdodCBmb250LWxvY2stZmFjZSBidXR0
b24gZmFjZSBidXR0b24pKSAjKCJhcHBseSIgMCA1IChoZWxwLWFyZ3MgKGFwcGx5KSBjYXRlZ29y
eSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygidGltZXItZXZlbnQtaGFuZGxl
ciIgMCAxOSAoaGVscC1hcmdzICh0aW1lci1ldmVudC1oYW5kbGVyKSBjYXRlZ29yeSBoZWxwLWZ1
bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygiaGVsbS1yZWFkLWZyb20tbWluaWJ1ZmZlciIg
MCAyNSAoaGVscC1hcmdzIChoZWxtLXJlYWQtZnJvbS1taW5pYnVmZmVyKSBjYXRlZ29yeSBoZWxw
LWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygiaGVsbS1pbnRlcm5hbCIgMCAxMyAoaGVs
cC1hcmdzIChoZWxtLWludGVybmFsKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0
b24gKHQpKSldIDMgWyMoImNkciIgMCAzIChoZWxwLWFyZ3MgKGNkcikgY2F0ZWdvcnkgaGVscC1m
dW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoIiM8Y29tcGlsZWQtZnVuY3Rpb24gMzU3PiIg
MjAgMjMgKGFjdGlvbiBoZWxwLWZucy0tZGlzcGxheS1mdW5jdGlvbiBrZXltYXAgKGtleW1hcCAo
dG91Y2hzY3JlZW4tZG93biAuIHB1c2gtYnV0dG9uKSAoaGVhZGVyLWxpbmUga2V5bWFwICh0b3Vj
aHNjcmVlbi1kb3duIC4gcHVzaC1idXR0b24pIChtb3VzZS0yIC4gcHVzaC1idXR0b24pKSAobW9k
ZS1saW5lIGtleW1hcCAodG91Y2hzY3JlZW4tZG93biAuIHB1c2gtYnV0dG9uKSAobW91c2UtMiAu
IHB1c2gtYnV0dG9uKSkgKGZvbGxvdy1saW5rIC4gbW91c2UtZmFjZSkgKG1vdXNlLTIgLiBwdXNo
LWJ1dHRvbikgKDEzIC4gcHVzaC1idXR0b24pIGtleW1hcCAoYmFja3RhYiAuIGJhY2t3YXJkLWJ1
dHRvbikgKDI3IGtleW1hcCAoOSAuIGJhY2t3YXJkLWJ1dHRvbikpICg5IC4gZm9yd2FyZC1idXR0
b24pKSBidXR0b24tZGF0YSAjWzUxNCAiXDMwM1wyMDMIAFwzMDVcMjAyCQBcMzA2XDMwMlwyMDMa
AAI6XDIwMxoAXDMwNwEEISFcMjAyMAACOlwyMDMlAFwyMTEDIVwyMDIwAFwzMDJcMjAzLwBcMzA3
AyFcMjAyMAACXDMwMlwyMDNBAAI6XDIwM0EAXDMwNwIEISFcMjAyVwACOlwyMDNMAAEDIVwyMDJX
AFwzMDJcMjAzVgBcMzA3AyFcMjAyVwACXDMxMAJcMzAwXCJcMjA2awBcMzExAlwzMTIEDFwiXDMx
MwUhR0RcMzAwI1wzMTACXDMwMFwiXDIwNn8AXDMxMQJcMzEyBAxcIlwzMTMFIUdEXDMwMCMBQUAB
QUADQANAAQFVXDIwM1wyMzAAXDMwMT9cMjA1XDIzMwADA1dcMjA3AQFWXDIwNyIgWyNzKGhhc2gt
dGFibGUgdGVzdCBlcXVhbCBkYXRhICgicHJvZmlsZXItcmVwb3J0LXByZXZpb3VzLWVudHJ5IiAo
MC4wIDMwKSAicHJvZmlsZXItcmVwb3J0LWRlc2NyaWJlLWVudHJ5IiAoMC4wIDMwKSAicHJvZmls
ZXItcmVwb3J0LXJlbmRlci1jYWxsdHJlZSIgKDAuMCAzMSkgImZvbnQtbG9jay1wcm9maWxlci1z
dG9wLWFuZC1yZXBvcnQiICgwLjAgMzQpICJlZGlmZi1wcm9maWxlIiAoMC4wIDEzKSAiZm9udC1s
b2NrLXByb2ZpbGVyLXNvcnQiICgwLjAgMjMpICJwcm9maWxlci1yZXBvcnQiICgwLjAgMTUpICJw
cm9maWxlci1yZXBvcnQtd3JpdGUtcHJvZmlsZSIgKDAuMCAyOSkgInByb2ZpbGVyLXN0b3AiICgw
LjAgMTMpICJwcm9maWxlci1yZXBvcnQtY29sbGFwc2UtZW50cnkiICgwLjAgMzApICJmb250LWxv
Y2stcHJvZmlsZXItcmVwb3J0LW1vZGUiICgwLjAgMzApICJwcm9maWxlci1yZXBvcnQtdG9nZ2xl
LWVudHJ5IiAoMC4wIDI4KSAicHJvZmlsZXItcmVwb3J0LWNvbXBhcmUtcHJvZmlsZSIgKDAuMCAz
MSkgInByb2ZpbGVyLXJlc2V0IiAoMC4wIDE0KSAiZm9udC1sb2NrLXByb2ZpbGVyLWJ1ZmZlciIg
KDAuMCAyNSkgImZvbnQtbG9jay1wcm9maWxlci1zdGFydCIgKDAuMCAyNCkgInByb2ZpbGVyLXJl
cG9ydC1maW5kLWVudHJ5IiAoMC4wIDI2KSAicHJvZmlsZXItZmluZC1wcm9maWxlLW90aGVyLWZy
YW1lIiAoMC4wIDMzKSAiZm9udC1sb2NrLXByb2ZpbGVyLXJlZ2lvbiIgKDAuMCAyNSkgImZvbnQt
bG9jay1wcm9maWxlci1yZXBvcnQiICgwLjAgMjUpICJwcm9maWxlci1yZXBvcnQtYXNjZW5kaW5n
LXNvcnQiICgwLjAgMzApICJwcm9maWxlci1yZXBvcnQtZXhwYW5kLWVudHJ5IiAoMC4wIDI4KSAi
Zm9udC1sb2NrLXByb2ZpbGVyLXRvZ2dsZS10aW1lLWluLXBlcmNlbnQiICgwLjAgNDEpICJwcm9m
aWxlci1yZXBvcnQtcmVuZGVyLXJldmVyc2VkLWNhbGx0cmVlIiAoMC4wIDQwKSAicHJvZmlsZXIt
cmVwb3J0LWRlc2NlbmRpbmctc29ydCIgKDAuMCAzMSkgInByb2ZpbGVyLWZpbmQtcHJvZmlsZS1v
dGhlci13aW5kb3ciICgwLjAgMzQpICJwcm9maWxlci1yZXBvcnQtbmV4dC1lbnRyeSIgKDAuMCAy
NikgImhlbG0taW5mby1ncHJvZiIgKDAuMCAxNSkgInByb2ZpbGVyLXJlcG9ydC1tb2RlIiAoMC4w
IDIwKSAicHJvZmlsZXItc3RhcnQiICgwLjAgMTQpICJwcm9maWxlci1maW5kLXByb2ZpbGUiICgw
LjAgMjEpICJmb250LWxvY2stcHJvZmlsZXItdG9nZ2xlLWV4cGFuZCIgKDAuMCAzMikpKSBuaWwg
bmlsIHQgaGVsbS1wYXR0ZXJuIGNkciBjYXIgaGVsbS1iYXNlbmFtZSBnZXRoYXNoIHB1dGhhc2gg
aGVsbS1zY29yZS1jYW5kaWRhdGUtZm9yLXBhdHRlcm4gaGVsbS1zdHJpbmdpZnldIDEzICIKCihm
biBTMSBTMikiXSBjYXRlZ29yeSB0IGZvbGxvdy1saW5rIHQgYnV0dG9uIHQgaGVscC1lY2hvICJt
b3VzZS0yLCBSRVQ6IERpc3BsYXkgdGhlIGZ1bmN0aW9uJ3MgYm9keSIgbW91c2UtZmFjZSBoaWdo
bGlnaHQgZm9udC1sb2NrLWZhY2UgYnV0dG9uIGZhY2UgYnV0dG9uKSkgIygiaGVsbS1mdXp6eS1t
YXRjaGluZy1kZWZhdWx0LXNvcnQtZm4tMSIgMCAzNyAoaGVscC1hcmdzIChoZWxtLWZ1enp5LW1h
dGNoaW5nLWRlZmF1bHQtc29ydC1mbi0xKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBi
dXR0b24gKHQpKSkgIygiIzxzdWJyLW5hdGl2ZS1lbGlzcCBGNjE2ZTZmNmU3OTZkNmY3NTczMmQ2
YzYxNmQ2MjY0NjFfYW5vbnltb3VzX2xhbWJkYV8yMD4iIDIwIDczIChidXR0b24gKHQpIGNhdGVn
b3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGhlbHAtYXJncyAoRjYxNmU2ZjZlNzk2ZDZmNzU3MzJk
NmM2MTZkNjI2NDYxX2Fub255bW91c19sYW1iZGFfMjApKSkgIygiaGVsbS1hcHBseS1mdW5jdGlv
bnMtZnJvbS1zb3VyY2UiIDAgMzIgKGhlbHAtYXJncyAoaGVsbS1hcHBseS1mdW5jdGlvbnMtZnJv
bS1zb3VyY2UpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJo
ZWxtLXByb2Nlc3MtZmlsdGVyZWQtY2FuZGlkYXRlLXRyYW5zZm9ybWVyIiAwIDQzIChoZWxwLWFy
Z3MgKGhlbG0tcHJvY2Vzcy1maWx0ZXJlZC1jYW5kaWRhdGUtdHJhbnNmb3JtZXIpIGNhdGVnb3J5
IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJoZWxtLWNvbXB1dGUtbWF0Y2hl
cyIgMCAyMCAoaGVscC1hcmdzIChoZWxtLWNvbXB1dGUtbWF0Y2hlcykgY2F0ZWdvcnkgaGVscC1m
dW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImhlbG0tLWNvbGxlY3QtbWF0Y2hlcyIgMCAy
MSAoaGVscC1hcmdzIChoZWxtLS1jb2xsZWN0LW1hdGNoZXMpIGNhdGVnb3J5IGhlbHAtZnVuY3Rp
b24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJoZWxtLXVwZGF0ZSIgMCAxMSAoaGVscC1hcmdzICho
ZWxtLXVwZGF0ZSkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMo
ImhlbG0tY2hlY2stbmV3LWlucHV0IiAwIDIwIChoZWxwLWFyZ3MgKGhlbG0tY2hlY2stbmV3LWlu
cHV0KSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygiaGVsbS1j
aGVjay1taW5pYnVmZmVyLWlucHV0IiAwIDI3IChoZWxwLWFyZ3MgKGhlbG0tY2hlY2stbWluaWJ1
ZmZlci1pbnB1dCkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMo
IiM8Y29tcGlsZWQtZnVuY3Rpb24gNDJGPiIgMjAgMjMgKGFjdGlvbiBoZWxwLWZucy0tZGlzcGxh
eS1mdW5jdGlvbiBrZXltYXAgKGtleW1hcCAodG91Y2hzY3JlZW4tZG93biAuIHB1c2gtYnV0dG9u
KSAoaGVhZGVyLWxpbmUga2V5bWFwICh0b3VjaHNjcmVlbi1kb3duIC4gcHVzaC1idXR0b24pICht
b3VzZS0yIC4gcHVzaC1idXR0b24pKSAobW9kZS1saW5lIGtleW1hcCAodG91Y2hzY3JlZW4tZG93
biAuIHB1c2gtYnV0dG9uKSAobW91c2UtMiAuIHB1c2gtYnV0dG9uKSkgKGZvbGxvdy1saW5rIC4g
bW91c2UtZmFjZSkgKG1vdXNlLTIgLiBwdXNoLWJ1dHRvbikgKDEzIC4gcHVzaC1idXR0b24pIGtl
eW1hcCAoYmFja3RhYiAuIGJhY2t3YXJkLWJ1dHRvbikgKDI3IGtleW1hcCAoOSAuIGJhY2t3YXJk
LWJ1dHRvbikpICg5IC4gZm9yd2FyZC1idXR0b24pKSBidXR0b24tZGF0YSAjWzAgIghcMjA2BQAJ
P1wyMDUZAFwzMDIgclwzMDNcMzA0AlwiXDIxNlwzMDUgXDIxMFwzMDYgKlwyNjIBXDIwNyIgW2hl
bG0taW4tcGVyc2lzdGVudC1hY3Rpb24gaGVsbS1zdXNwZW5kLXVwZGF0ZS1mbGFnIGludGVybmFs
LS1iZWZvcmUtc2F2ZS1zZWxlY3RlZC13aW5kb3cgbWFrZS1jbG9zdXJlICNbMCAiXDMwMVwzMDAh
XDIwNyIgW1YwIGludGVybmFsLS1hZnRlci1zYXZlLXNlbGVjdGVkLXdpbmRvd10gMl0gaGVsbS1j
aGVjay1taW5pYnVmZmVyLWlucHV0IGhlbG0tcHJpbnQtZXJyb3ItbWVzc2FnZXNdIDRdIGNhdGVn
b3J5IHQgZm9sbG93LWxpbmsgdCBidXR0b24gdCBoZWxwLWVjaG8gIm1vdXNlLTIsIFJFVDogRGlz
cGxheSB0aGUgZnVuY3Rpb24ncyBib2R5IiBtb3VzZS1mYWNlIGhpZ2hsaWdodCBmb250LWxvY2st
ZmFjZSBidXR0b24gZmFjZSBidXR0b24pKSAjKCJhcHBseSIgMCA1IChoZWxwLWFyZ3MgKGFwcGx5
KSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygidGltZXItZXZl
bnQtaGFuZGxlciIgMCAxOSAoaGVscC1hcmdzICh0aW1lci1ldmVudC1oYW5kbGVyKSBjYXRlZ29y
eSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygiaGVsbS1yZWFkLWZyb20tbWlu
aWJ1ZmZlciIgMCAyNSAoaGVscC1hcmdzIChoZWxtLXJlYWQtZnJvbS1taW5pYnVmZmVyKSBjYXRl
Z29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygiaGVsbS1pbnRlcm5hbCIg
MCAxMyAoaGVscC1hcmdzIChoZWxtLWludGVybmFsKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1
dHRvbiBidXR0b24gKHQpKSldIDMgWyMoImRpcmVjdG9yeS1maWxlLW5hbWUiIDAgMTkgKGhlbHAt
YXJncyAoZGlyZWN0b3J5LWZpbGUtbmFtZSkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24g
YnV0dG9uICh0KSkpICMoImhlbG0tYmFzZW5hbWUiIDAgMTMgKGhlbHAtYXJncyAoaGVsbS1iYXNl
bmFtZSkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImhlbG0t
c2V0LWNhc2UtZm9sZC1zZWFyY2giIDAgMjUgKGhlbHAtYXJncyAoaGVsbS1zZXQtY2FzZS1mb2xk
LXNlYXJjaCkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoIiM8
Y29tcGlsZWQtZnVuY3Rpb24gOUQ0PiIgMjAgMjMgKGFjdGlvbiBoZWxwLWZucy0tZGlzcGxheS1m
dW5jdGlvbiBrZXltYXAgKGtleW1hcCAodG91Y2hzY3JlZW4tZG93biAuIHB1c2gtYnV0dG9uKSAo
aGVhZGVyLWxpbmUga2V5bWFwICh0b3VjaHNjcmVlbi1kb3duIC4gcHVzaC1idXR0b24pIChtb3Vz
ZS0yIC4gcHVzaC1idXR0b24pKSAobW9kZS1saW5lIGtleW1hcCAodG91Y2hzY3JlZW4tZG93biAu
IHB1c2gtYnV0dG9uKSAobW91c2UtMiAuIHB1c2gtYnV0dG9uKSkgKGZvbGxvdy1saW5rIC4gbW91
c2UtZmFjZSkgKG1vdXNlLTIgLiBwdXNoLWJ1dHRvbikgKDEzIC4gcHVzaC1idXR0b24pIGtleW1h
cCAoYmFja3RhYiAuIGJhY2t3YXJkLWJ1dHRvbikgKDI3IGtleW1hcCAoOSAuIGJhY2t3YXJkLWJ1
dHRvbikpICg5IC4gZm9yd2FyZC1idXR0b24pKSBidXR0b24tZGF0YSAjWzAgIlwzMTBcMzExXDMx
MlwiXDMxM1wzMDFcMjM2XDMxNCAeH1wzMTVcMzE2XDMwNVwzMTdcMjExAjpcMjAzJgECQFwyNjIC
XDMwM2JcMjEwXDMyMDEnAFwzMjFcMzA3ITBcMjAyKwBcMjEwXDIwMjEAXDIwMzEAXDMxNnlcMjEw
XDMxN1wyMTFcMjExXDIxMVwyMTEGBlwzMDchXDIxMVwyNjIGXDIwMxIBBDpcMjAzTABcMzE2eVwz
MTVVXDIwMk4AbT9cMjAzEgEGCVwzMDRXXDIwMxIBXDMyMlwzMDYGBlwyMDNqAAYGPFwyMDNqAAYG
XDIwMm8AXDMyMyBcMzI0IERcIlwyNjIEXDMwMlwyMDNcMjExAFwzMjVcMzE1XDMyNgYGI1wyMDRc
MjExAFwzMjcEXDMyNlwzMDIGByEjXDI2MgRcMzMwBAYNXCJcMjYyAwYKXDIwM1wyNDAAAlwyMDNc
MjQwAAIGCVVcMjA0XDI0NAACXDIwNA0BA1wzMzFcMjMwXDIwNA0BXDMwMlwyMDRcMjYzAAQ6XDIw
M1wyNzMAXDMzMgRcMzA3XDMwMCNcMjAzDQFcMzMzBAYKBg4jXDIxMFwzMzRcMzM1XDMwMVwiXDIx
MVwyMDMCAQQ6XDIwM1wzMjUABEFcMjAyXDMyNgAEATxcMjAzXDM3NABcMzM2AiFcMjA0XDM3NAAB
XDMxNwE6XDIwM1wzNjcAXDIxMFwyMTFAXDIxMQMhXDI2MggBQVwyNjICXDIwMlwzNDMAXDI2NgRc
MjAyAwEBASFcMjYyBlwyMTBcMjEwBglUXDI2MgoDAkJcMjYyAlwyMTBcMzE3XDIwMjYAXDIxMFwy
NjZcMjAzXDIzN1wyMzcBXDI0NFwyNjIBA1RcMjYyBAJBXDI2MgNcMjAyEABcMjExXDIzNylcMjA3
IiBbbmlsICgobmFtZSAuICJFbWFjcyBDb21tYW5kcyIpIChpbml0ICNbMCAiXDMwMVwzMDJcMzAz
XDMwMCFcMjAzDQBcMzAwIFwyMDIkAFwzMDRcMzAwIVwyMDMjAFwzMDVcMzAwIVwyMDMjAHJcMzAw
cVwyMTBcMzA2IClcMjAyJABcMzAwXCJcMjA3IiBbI1swICJcMzAyXDMwMVwzMDBcMzAzXDIxMVwz
MDQlXDIwNyIgW2NvbW1hbmRwICM8b2JhcnJheSBuPTk4OTE5PiBoZWxtLWNvbXAtcmVhZC1nZXQt
Y2FuZGlkYXRlcyBuaWwgIiJdIDZdIGhlbG0taW5pdC1jYW5kaWRhdGVzLWluLWJ1ZmZlciBnbG9i
YWwgZnVuY3Rpb25wIGJ1ZmZlcnAgYnVmZmVyLWxpdmUtcCBidWZmZXItc3RyaW5nXSA0XSkgKGNh
bmRpZGF0ZXMgLiBoZWxtLWNhbmRpZGF0ZXMtaW4tYnVmZmVyKSAoY2xlYW51cCAuIGhlbG0tTS14
LS11bndpbmQtZm9ybXMpIChrZXltYXAga2V5bWFwIChrZXltYXAgKDEzIC4gaGVsbS1jb25maXJt
LWFuZC1leGl0LW1pbmlidWZmZXIpKSBrZXltYXAgKDI5IC4gaGVsbS1NLXgtdG9nZ2xlLXNob3J0
LWRvYykgKDIxIC4gaGVsbS1NLXgtdW5pdmVyc2FsLWFyZ3VtZW50KSBrZXltYXAgKDI3IGtleW1h
cCAoMTMgLiBoZWxtLWNyLWVtcHR5LXN0cmluZykpIChDLXJldHVybiAuIGhlbG0tY3ItZW1wdHkt
c3RyaW5nKSBrZXltYXAgKDIxIC4gaGVsbS1leGVjdXRlLXBlcnNpc3RlbnQtYWN0aW9uKSAoZjEy
IC4gI1swICJcMzAxXDMwMCFcMjA3IiBbMTEgaGVsbS1zZWxlY3QtbnRoLWFjdGlvbl0gMiBuaWwg
bmlsXSkgKGYxMSAuICNbMCAiXDMwMVwzMDAhXDIwNyIgWzEwIGhlbG0tc2VsZWN0LW50aC1hY3Rp
b25dIDIgbmlsIG5pbF0pIChmMTAgLiAjWzAgIlwzMDFcMzAwIVwyMDciIFs5IGhlbG0tc2VsZWN0
LW50aC1hY3Rpb25dIDIgbmlsIG5pbF0pIChmOSAuICNbMCAiXDMwMVwzMDAhXDIwNyIgWzggaGVs
bS1zZWxlY3QtbnRoLWFjdGlvbl0gMiBuaWwgbmlsXSkgKGY4IC4gI1swICJcMzAxXDMwMCFcMjA3
IiBbNyBoZWxtLXNlbGVjdC1udGgtYWN0aW9uXSAyIG5pbCBuaWxdKSAoZjcgLiAjWzAgIlwzMDFc
MzAwIVwyMDciIFs2IGhlbG0tc2VsZWN0LW50aC1hY3Rpb25dIDIgbmlsIG5pbF0pIChmNiAuICNb
MCAiXDMwMVwzMDAhXDIwNyIgWzUgaGVsbS1zZWxlY3QtbnRoLWFjdGlvbl0gMiBuaWwgbmlsXSkg
KGY1IC4gI1swICJcMzAxXDMwMCFcMjA3IiBbNCBoZWxtLXNlbGVjdC1udGgtYWN0aW9uXSAyIG5p
bCBuaWxdKSAoZjQgLiAjWzAgIlwzMDFcMzAwIVwyMDciIFszIGhlbG0tc2VsZWN0LW50aC1hY3Rp
b25dIDIgbmlsIG5pbF0pIChmMyAuICNbMCAiXDMwMVwzMDAhXDIwNyIgWzIgaGVsbS1zZWxlY3Qt
bnRoLWFjdGlvbl0gMiBuaWwgbmlsXSkgKGYyIC4gI1swICJcMzAxXDMwMCFcMjA3IiBbMSBoZWxt
LXNlbGVjdC1udGgtYWN0aW9uXSAyIG5pbCBuaWxdKSAobWVudS1iYXIga2V5bWFwIChoZWxwLW1l
bnUga2V5bWFwIChkZXNjcmliZSBrZXltYXAgKGRlc2NyaWJlLW1vZGUgLiBoZWxtLWhlbHApKSkp
IChoZWxwIGtleW1hcCAoMTA5IC4gaGVsbS1oZWxwKSkgKDIzIC4gaGVsbS1oZWxtLXlhbmstdGV4
dC1hdC1wb2ludC13aXRoLXN1YmtleXMpIChmMSAuICNbMCAiXDMwMVwzMDAhXDIwNyIgWzAgaGVs
bS1zZWxlY3QtbnRoLWFjdGlvbl0gMiBuaWwgbmlsXSkgKDggLiBiYWNrd2FyZC1kZWxldGUtY2hh
ci11bnRhYmlmeSkgKDIwIC4gaGVsbS10b2dnbGUtcmVzcGxpdC1hbmQtc3dhcC13aW5kb3dzKSAo
Qy10YWIgLiB1bmRlZmluZWQpICg2NzEwODg5NyAuIGhlbG0tdG9nZ2xlLXN1c3BlbmQtdXBkYXRl
KSAoMjYgLiBoZWxtLXRvZ2dsZS1mdWxsLWZyYW1lKSAoMyBrZXltYXAgKDMzNTU0NDU1IC4geWFu
dC90b2dnbGUtcmVmaWxlLXRvLXRhc2tzKSAoNTcgLiAjWzAgIlwzMDJcMzAxXDIwMwsAXDMwMFRb
XDIwMg0AXDMwMFQhXDIwNyIgWzggbmlsIGhlbG0tZXhlY3V0ZS1zZWxlY3Rpb24tYWN0aW9uLWF0
LW50aF0gMiBuaWwgbmlsXSkgKDU2IC4gI1swICJcMzAyXDMwMVwyMDMLAFwzMDBUW1wyMDINAFwz
MDBUIVwyMDciIFs3IG5pbCBoZWxtLWV4ZWN1dGUtc2VsZWN0aW9uLWFjdGlvbi1hdC1udGhdIDIg
bmlsIG5pbF0pICg1NSAuICNbMCAiXDMwMlwzMDFcMjAzCwBcMzAwVFtcMjAyDQBcMzAwVCFcMjA3
IiBbNiBuaWwgaGVsbS1leGVjdXRlLXNlbGVjdGlvbi1hY3Rpb24tYXQtbnRoXSAyIG5pbCBuaWxd
KSAoNTQgLiAjWzAgIlwzMDJcMzAxXDIwMwsAXDMwMFRbXDIwMg0AXDMwMFQhXDIwNyIgWzUgbmls
IGhlbG0tZXhlY3V0ZS1zZWxlY3Rpb24tYWN0aW9uLWF0LW50aF0gMiBuaWwgbmlsXSkgKDUzIC4g
I1swICJcMzAyXDMwMVwyMDMLAFwzMDBUW1wyMDINAFwzMDBUIVwyMDciIFs0IG5pbCBoZWxtLWV4
ZWN1dGUtc2VsZWN0aW9uLWFjdGlvbi1hdC1udGhdIDIgbmlsIG5pbF0pICg1MiAuICNbMCAiXDMw
MlwzMDFcMjAzCwBcMzAwVFtcMjAyDQBcMzAwVCFcMjA3IiBbMyBuaWwgaGVsbS1leGVjdXRlLXNl
bGVjdGlvbi1hY3Rpb24tYXQtbnRoXSAyIG5pbCBuaWxdKSAoNTEgLiAjWzAgIlwzMDJcMzAxXDIw
MwsAXDMwMFRbXDIwMg0AXDMwMFQhXDIwNyIgWzIgbmlsIGhlbG0tZXhlY3V0ZS1zZWxlY3Rpb24t
YWN0aW9uLWF0LW50aF0gMiBuaWwgbmlsXSkgKDUwIC4gI1swICJcMzAyXDMwMVwyMDMLAFwzMDBU
W1wyMDINAFwzMDBUIVwyMDciIFsxIG5pbCBoZWxtLWV4ZWN1dGUtc2VsZWN0aW9uLWFjdGlvbi1h
dC1udGhdIDIgbmlsIG5pbF0pICg0OSAuICNbMCAiXDMwMlwzMDFcMjAzCwBcMzAwVFtcMjAyDQBc
MzAwVCFcMjA3IiBbMCBuaWwgaGVsbS1leGVjdXRlLXNlbGVjdGlvbi1hY3Rpb24tYXQtbnRoXSAy
IG5pbCBuaWxdKSAoMTEwIC4gaGVsbS1oZWxtLXJ1bi1jeWNsZS1yZXN1bWUtd2l0aC1zdWJrZXlz
KSAoMTA4IC4gaGVsbS1kaXNwbGF5LWxpbmUtbnVtYmVycy1tb2RlKSAoNjIgLiBoZWxtLXRvZ2ds
ZS10cnVuY2F0ZS1saW5lKSAoMjEgLiBoZWxtLXJlZnJlc2gpICg2IC4gaGVsbS1mb2xsb3ctbW9k
ZSkgKDkgLiBoZWxtLWluc2VydC1vci1jb3B5KSAoMTEgLiBoZWxtLWtpbGwtc2VsZWN0aW9uLWFu
ZC1xdWl0KSAoMjUgLiBoZWxtLXlhbmstc2VsZWN0aW9uKSAoMzcgLiBoZWxtLWV4Y2hhbmdlLW1p
bmlidWZmZXItYW5kLWhlYWRlci1saW5lKSAoOTUgLiBoZWxtLXRvZ2dsZS1mdWxsLWZyYW1lKSAo
NDUgLiBoZWxtLXN3YXAtd2luZG93cykpICg2NzEwODk4NyAuIGhlbG0tZW5sYXJnZS13aW5kb3cp
ICg2NzEwODk4OSAuIGhlbG0tbmFycm93LXdpbmRvdykgKDE4IC4gdW5kZWZpbmVkKSAoMTkgLiB1
bmRlZmluZWQpICgyNCBrZXltYXAgKDU3IC4gI1swICJcMzAyXDMwMVwyMDMLAFwzMDBUW1wyMDIN
AFwzMDBUIVwyMDciIFs4IG5lZ2F0aXZlIGhlbG0tZXhlY3V0ZS1zZWxlY3Rpb24tYWN0aW9uLWF0
LW50aF0gMiBuaWwgbmlsXSkgKDU2IC4gI1swICJcMzAyXDMwMVwyMDMLAFwzMDBUW1wyMDINAFwz
MDBUIVwyMDciIFs3IG5lZ2F0aXZlIGhlbG0tZXhlY3V0ZS1zZWxlY3Rpb24tYWN0aW9uLWF0LW50
aF0gMiBuaWwgbmlsXSkgKDU1IC4gI1swICJcMzAyXDMwMVwyMDMLAFwzMDBUW1wyMDINAFwzMDBU
IVwyMDciIFs2IG5lZ2F0aXZlIGhlbG0tZXhlY3V0ZS1zZWxlY3Rpb24tYWN0aW9uLWF0LW50aF0g
MiBuaWwgbmlsXSkgKDU0IC4gI1swICJcMzAyXDMwMVwyMDMLAFwzMDBUW1wyMDINAFwzMDBUIVwy
MDciIFs1IG5lZ2F0aXZlIGhlbG0tZXhlY3V0ZS1zZWxlY3Rpb24tYWN0aW9uLWF0LW50aF0gMiBu
aWwgbmlsXSkgKDUzIC4gI1swICJcMzAyXDMwMVwyMDMLAFwzMDBUW1wyMDINAFwzMDBUIVwyMDci
IFs0IG5lZ2F0aXZlIGhlbG0tZXhlY3V0ZS1zZWxlY3Rpb24tYWN0aW9uLWF0LW50aF0gMiBuaWwg
bmlsXSkgKDUyIC4gI1swICJcMzAyXDMwMVwyMDMLAFwzMDBUW1wyMDINAFwzMDBUIVwyMDciIFsz
IG5lZ2F0aXZlIGhlbG0tZXhlY3V0ZS1zZWxlY3Rpb24tYWN0aW9uLWF0LW50aF0gMiBuaWwgbmls
XSkgKDUxIC4gI1swICJcMzAyXDMwMVwyMDMLAFwzMDBUW1wyMDINAFwzMDBUIVwyMDciIFsyIG5l
Z2F0aXZlIGhlbG0tZXhlY3V0ZS1zZWxlY3Rpb24tYWN0aW9uLWF0LW50aF0gMiBuaWwgbmlsXSkg
KDUwIC4gI1swICJcMzAyXDMwMVwyMDMLAFwzMDBUW1wyMDINAFwzMDBUIVwyMDciIFsxIG5lZ2F0
aXZlIGhlbG0tZXhlY3V0ZS1zZWxlY3Rpb24tYWN0aW9uLWF0LW50aF0gMiBuaWwgbmlsXSkgKDQ5
IC4gI1swICJcMzAyXDMwMVwyMDMLAFwzMDBUW1wyMDINAFwzMDBUIVwyMDciIFswIG5lZ2F0aXZl
IGhlbG0tZXhlY3V0ZS1zZWxlY3Rpb24tYWN0aW9uLWF0LW50aF0gMiBuaWwgbmlsXSkgKDIgLiBo
ZWxtLXJlc3VtZS1saXN0LWJ1ZmZlcnMtYWZ0ZXItcXVpdCkgKDk4IC4gaGVsbS1yZXN1bWUtcHJl
dmlvdXMtc2Vzc2lvbi1hZnRlci1xdWl0KSAoNiAuIGhlbG0tcXVpdC1hbmQtZmluZC1maWxlKSkg
KDEyNyAuIGhlbG0tZGVsZXRlLWNoYXItYmFja3dhcmQpICgxMSAuIGhlbG0tZGVsZXRlLW1pbmli
dWZmZXItY29udGVudHMpICg2NzEwODg5NiAuIGhlbG0tdG9nZ2xlLXZpc2libGUtbWFyay1mb3J3
YXJkKSAoMCAuIGhlbG0tdG9nZ2xlLXZpc2libGUtbWFyaykgKEMtTS11cCAuIGhlbG0tc2Nyb2xs
LW90aGVyLXdpbmRvdy1kb3duKSAoQy1NLWRvd24gLiBoZWxtLXNjcm9sbC1vdGhlci13aW5kb3cp
IChNLXByaW9yIC4gaGVsbS1zY3JvbGwtb3RoZXItd2luZG93LWRvd24pIChNLW5leHQgLiBoZWxt
LXNjcm9sbC1vdGhlci13aW5kb3cpICgxMiAuIGhlbG0tcmVjZW50ZXItdG9wLWJvdHRvbS1vdGhl
ci13aW5kb3cpIChsZWZ0IC4gaGVsbS1wcmV2aW91cy1zb3VyY2UpIChyaWdodCAuIGhlbG0tbmV4
dC1zb3VyY2UpICgxNSAuIGhlbG0tbmV4dC1zb3VyY2UpICgxMCAuIGhlbG0tZXhlY3V0ZS1wZXJz
aXN0ZW50LWFjdGlvbikgKDkgLiBoZWxtLXNlbGVjdC1hY3Rpb24pICgxMyAuIGhlbG0tbWF5YmUt
ZXhpdC1taW5pYnVmZmVyKSAoNyAuIGhlbG0ta2V5Ym9hcmQtcXVpdCkgKDIyIC4gaGVsbS1zY3Jv
bGwtZG93bikgKDI3IGtleW1hcCAoMTA0IC4gYmFja3dhcmQta2lsbC13b3JkKSAoOCAuIGJhY2t3
YXJkLWtpbGwtd29yZCkgKDEwOCAuIHlhbnQvaGVsbS15YW5rLXNlbGVjdGlvbi1vci1leGVjdXRl
LXBlcnNpc3RlbnQtYWN0aW9uKSAoMTA1IC4gaGVsbS1wcmV2aW91cy1zb3VyY2UpICgxMDcgLiBo
ZWxtLXByZXZpb3VzLWxpbmUpICgxMDYgLiBoZWxtLW5leHQtbGluZSkgKDExNCAuIHVuZGVmaW5l
ZCkgKDExMCAuIG5leHQtaGlzdG9yeS1lbGVtZW50KSAoMTEyIC4gcHJldmlvdXMtaGlzdG9yeS1l
bGVtZW50KSAoMTkgLiB1bmRlZmluZWQpICgxOCAuIHVuZGVmaW5lZCkgKDExNSAuIHVuZGVmaW5l
ZCkgKDUgLiBoZWxtLWRpc3BsYXktYWxsLXNvdXJjZXMpICgxIC4gaGVsbS1zaG93LWFsbC1jYW5k
aWRhdGVzLWluLXNvdXJjZSkgKDg1IC4gaGVsbS11bm1hcmstYWxsKSAoOTcgLiBoZWxtLW1hcmst
YWxsKSAoMTA5IC4gaGVsbS10b2dnbGUtYWxsLW1hcmtzKSAoNDEgLiBoZWxtLW5leHQtdmlzaWJs
ZS1tYXJrKSAoNDAgLiBoZWxtLXByZXYtdmlzaWJsZS1tYXJrKSAoOTEpICgzMiAuIGhlbG0tdG9n
Z2xlLXZpc2libGUtbWFyay1iYWNrd2FyZCkgKDMzNTU0NDU0IC4gaGVsbS1zY3JvbGwtb3RoZXIt
d2luZG93LWRvd24pICgyNSAuIGhlbG0tc2Nyb2xsLW90aGVyLXdpbmRvdy1kb3duKSAoMjIgLiBo
ZWxtLXNjcm9sbC1vdGhlci13aW5kb3cpICgxMiAuIGhlbG0tcmVwb3NpdGlvbi13aW5kb3ctb3Ro
ZXItd2luZG93KSAoMTExIC4gaGVsbS1uZXh0LXNvdXJjZSkgKDYyIC4gaGVsbS1lbmQtb2YtYnVm
ZmVyKSAoNjAgLiBoZWxtLWJlZ2lubmluZy1vZi1idWZmZXIpICgxMTggLiBoZWxtLXNjcm9sbC11
cCkpIChuZXh0IC4gaGVsbS1uZXh0LXBhZ2UpIChwcmlvciAuIGhlbG0tcHJldmlvdXMtcGFnZSkg
KEMtdXAgLiBoZWxtLWZvbGxvdy1hY3Rpb24tYmFja3dhcmQpIChDLWRvd24gLiBoZWxtLWZvbGxv
dy1hY3Rpb24tZm9yd2FyZCkgKDE2IC4gaGVsbS1wcmV2aW91cy1saW5lKSAoMTQgLiBoZWxtLW5l
eHQtbGluZSkgKHVwIC4gaGVsbS1wcmV2aW91cy1saW5lKSAoZG93biAuIGhlbG0tbmV4dC1saW5l
KSBrZXltYXAgKDE4IC4gaGVsbS1taW5pYnVmZmVyLWhpc3RvcnkpIChlc2NhcGUgLiBrZXlib2Fy
ZC1xdWl0KSAobWVudS1iYXIga2V5bWFwIChtaW5pYnVmICJNaW5pYnVmIiBrZXltYXAgKHByZXZp
b3VzIG1lbnUtaXRlbSAiUHJldmlvdXMgSGlzdG9yeSBJdGVtIiBwcmV2aW91cy1oaXN0b3J5LWVs
ZW1lbnQgOmhlbHAgIlB1dCBwcmV2aW91cyBtaW5pYnVmZmVyIGhpc3RvcnkgZWxlbWVudCBpbiB0
aGUgbWluaWJ1ZmZlciIpIChuZXh0IG1lbnUtaXRlbSAiTmV4dCBIaXN0b3J5IEl0ZW0iIG5leHQt
aGlzdG9yeS1lbGVtZW50IDpoZWxwICJQdXQgbmV4dCBtaW5pYnVmZmVyIGhpc3RvcnkgZWxlbWVu
dCBpbiB0aGUgbWluaWJ1ZmZlciIpIChpc2VhcmNoLWJhY2t3YXJkIG1lbnUtaXRlbSAiSXNlYXJj
aCBIaXN0b3J5IEJhY2t3YXJkIiBpc2VhcmNoLWJhY2t3YXJkIDpoZWxwICJJbmNyZW1lbnRhbGx5
IHNlYXJjaCBtaW5pYnVmZmVyIGhpc3RvcnkgYmFja3dhcmQiKSAoaXNlYXJjaC1mb3J3YXJkIG1l
bnUtaXRlbSAiSXNlYXJjaCBIaXN0b3J5IEZvcndhcmQiIGlzZWFyY2gtZm9yd2FyZCA6aGVscCAi
SW5jcmVtZW50YWxseSBzZWFyY2ggbWluaWJ1ZmZlciBoaXN0b3J5IGZvcndhcmQiKSAocmV0dXJu
IG1lbnUtaXRlbSAiRW50ZXIiIGV4aXQtbWluaWJ1ZmZlciA6a2V5LXNlcXVlbmNlICINIiA6aGVs
cCAiVGVybWluYXRlIGlucHV0IGFuZCBleGl0IG1pbmlidWZmZXIiKSAocXVpdCBtZW51LWl0ZW0g
IlF1aXQiIGFib3J0LXJlY3Vyc2l2ZS1lZGl0IDpoZWxwICJBYm9ydCBpbnB1dCBhbmQgZXhpdCBt
aW5pYnVmZmVyIikgIk1pbmlidWYiKSkgKDI0IGtleW1hcCAoZG93biAuIG1pbmlidWZmZXItY29t
cGxldGUtZGVmYXVsdHMpICh1cCAuIG1pbmlidWZmZXItY29tcGxldGUtaGlzdG9yeSkpICgxMyAu
IGV4aXQtbWluaWJ1ZmZlcikgKDEwIC4gZXhpdC1taW5pYnVmZmVyKSAoNyAuIGFib3J0LW1pbmli
dWZmZXJzKSAoQy10YWIgLiBmaWxlLWNhY2hlLW1pbmlidWZmZXItY29tcGxldGUpICg5IC4gc2Vs
Zi1pbnNlcnQtY29tbWFuZCkgKFhGODZCYWNrIC4gcHJldmlvdXMtaGlzdG9yeS1lbGVtZW50KSAo
dXAgLiBwcmV2aW91cy1saW5lLW9yLWhpc3RvcnktZWxlbWVudCkgKHByaW9yIC4gcHJldmlvdXMt
aGlzdG9yeS1lbGVtZW50KSAoWEY4NkZvcndhcmQgLiBuZXh0LWhpc3RvcnktZWxlbWVudCkgKGRv
d24gLiBuZXh0LWxpbmUtb3ItaGlzdG9yeS1lbGVtZW50KSAobmV4dCAuIG5leHQtaGlzdG9yeS1l
bGVtZW50KSAoMjcga2V5bWFwICgxMDUgLiBwYXJlZGl0LWNvbnZvbHV0ZS1zZXhwKSAoMTExIC4g
cGFyZWRpdC1mb3J3YXJkLXNsdXJwLXNleHApICg2MCAuIG1pbmlidWZmZXItYmVnaW5uaW5nLW9m
LWJ1ZmZlcikgKDExNCAuIHByZXZpb3VzLW1hdGNoaW5nLWhpc3RvcnktZWxlbWVudCkgKDExNSAu
IG5leHQtbWF0Y2hpbmctaGlzdG9yeS1lbGVtZW50KSAoMTEyIC4gcHJldmlvdXMtaGlzdG9yeS1l
bGVtZW50KSAoMTEwIC4gbmV4dC1oaXN0b3J5LWVsZW1lbnQpKSkgKGFjdGlvbiAuIGhlbG0tdHlw
ZS1jb21tYW5kLWFjdGlvbnMpIChwZXJzaXN0ZW50LWFjdGlvbiAuIGhlbG0tTS14LXBlcnNpc3Rl
bnQtYWN0aW9uKSAocGVyc2lzdGVudC1oZWxwIC4gIkRlc2NyaWJlIHRoaXMgY29tbWFuZCIpICho
ZWxwLW1lc3NhZ2UgLiBoZWxtLU0teC1oZWxwLW1lc3NhZ2UpIChyZXF1aXJlcy1wYXR0ZXJuIC4g
MCkgKGZpbHRlcmVkLWNhbmRpZGF0ZS10cmFuc2Zvcm1lciBoZWxtLU0teC10cmFuc2Zvcm1lciAj
PHN1YnIgRjYxNmU2ZjZlNzk2ZDZmNzU3MzJkNmM2MTZkNjI2NDYxX2Fub255bW91c19sYW1iZGFf
MjA+IGhlbG0tZnV6enktaGlnaGxpZ2h0LW1hdGNoZXMpICh2b2xhdGlsZSAuIHQpIChtYXRjaCBp
ZGVudGl0eSkgKGZ1enp5LW1hdGNoIC4gdCkgKHJlZGlzcGxheSAuIGlkZW50aXR5KSAobm9tYXJr
IC4gdCkgKGNvZXJjZSAuIGhlbG0tc3ltYm9saWZ5KSAoaGVhZGVyLWxpbmUgLiAjKCJDLXU6IERl
c2NyaWJlIHRoaXMgY29tbWFuZCAoa2VlcGluZyBzZXNzaW9uKSIgMCAzIChmb250LWxvY2stZmFj
ZSBoZWxwLWtleS1iaW5kaW5nIGZhY2UgaGVscC1rZXktYmluZGluZykpKSAocmVzdW1lIC4gaGVs
bS1NLXgtcmVzdW1lLWZuKSAobXVsdGltYXRjaCAuIHQpIChtdXN0LW1hdGNoIC4gdCkgKGdyb3Vw
IC4gaGVsbS1jb21tYW5kKSAoZGF0YSAuICNbMCAiXDMwMlwzMDFcMzAwXDMwM1wyMTFcMzA0JVwy
MDciIFtjb21tYW5kcCAjPG9iYXJyYXkgbj05ODkxOT4gaGVsbS1jb21wLXJlYWQtZ2V0LWNhbmRp
ZGF0ZXMgbmlsICIiXSA2XSkgKGdldC1saW5lIC4gYnVmZmVyLXN1YnN0cmluZy1uby1wcm9wZXJ0
aWVzKSAoc2VhcmNoIGhlbG0tbW0tZXhhY3Qtc2VhcmNoIGhlbG0tbW0tc2VhcmNoIGhlbG0tY2Fu
ZGlkYXRlcy1pbi1idWZmZXItc2VhcmNoLWRlZmF1bHQtZm4gaGVsbS1mdXp6eS1zZWFyY2gpKSBu
aWwgMCAxNTAgKGhlbG0tbW0tZXhhY3Qtc2VhcmNoIGhlbG0tbW0tc2VhcmNoIGhlbG0tY2FuZGlk
YXRlcy1pbi1idWZmZXItc2VhcmNoLWRlZmF1bHQtZm4gaGVsbS1mdXp6eS1zZWFyY2gpIGJ1ZmZl
ci1zdWJzdHJpbmctbm8tcHJvcGVydGllcyAicHJvZiByZXAiIG1ha2UtaGFzaC10YWJsZSA6dGVz
dCBlcXVhbCBhbGxvdy1kdXBzIGhlbG0tc2V0LWNhc2UtZm9sZC1zZWFyY2ggMCAxIG5pbCAoaW52
YWxpZC1yZWdleHApIGxvb2tpbmctYXQgYXBwbHkgcG9zLWJvbCBwb3MtZW9sIGdldC10ZXh0LXBy
b3BlcnR5IG1hdGNoLXBhcnQgcHJvcGVydGl6ZSBnZXRoYXNoICIiIGhlbG0tc2VhcmNoLW1hdGNo
LXBhcnQgcHV0aGFzaCBhc3NvYy1kZWZhdWx0IGZpbHRlci1vbmUtYnktb25lIGZ1bmN0aW9ucCBj
YXNlLWZvbGQtc2VhcmNoXSAxOF0gY2F0ZWdvcnkgdCBmb2xsb3ctbGluayB0IGJ1dHRvbiB0IGhl
bHAtZWNobyAibW91c2UtMiwgUkVUOiBEaXNwbGF5IHRoZSBmdW5jdGlvbidzIGJvZHkiIG1vdXNl
LWZhY2UgaGlnaGxpZ2h0IGZvbnQtbG9jay1mYWNlIGJ1dHRvbiBmYWNlIGJ1dHRvbikpICMoImhl
bG0tLXNlYXJjaC1mcm9tLWNhbmRpZGF0ZS1idWZmZXItMSIgMCAzNiAoaGVscC1hcmdzIChoZWxt
LS1zZWFyY2gtZnJvbS1jYW5kaWRhdGUtYnVmZmVyLTEpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24t
YnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJoZWxtLXNlYXJjaC1mcm9tLWNhbmRpZGF0ZS1idWZmZXIi
IDAgMzMgKGhlbHAtYXJncyAoaGVsbS1zZWFyY2gtZnJvbS1jYW5kaWRhdGUtYnVmZmVyKSBjYXRl
Z29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygiaGVsbS1jYW5kaWRhdGVz
LWluLWJ1ZmZlci0xIiAwIDI3IChoZWxwLWFyZ3MgKGhlbG0tY2FuZGlkYXRlcy1pbi1idWZmZXIt
MSkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImhlbG0tY2Fu
ZGlkYXRlcy1pbi1idWZmZXIiIDAgMjUgKGhlbHAtYXJncyAoaGVsbS1jYW5kaWRhdGVzLWluLWJ1
ZmZlcikgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImhlbG0t
YXBwbHktZnVuY3Rpb25zLWZyb20tc291cmNlIiAwIDMyIChoZWxwLWFyZ3MgKGhlbG0tYXBwbHkt
ZnVuY3Rpb25zLWZyb20tc291cmNlKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0
b24gKHQpKSkgIygiaGVsbS1pbnRlcnByZXQtdmFsdWUiIDAgMjAgKGhlbHAtYXJncyAoaGVsbS1p
bnRlcnByZXQtdmFsdWUpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkp
KSAjKCJoZWxtLWdldC1jYW5kaWRhdGVzIiAwIDE5IChoZWxwLWFyZ3MgKGhlbG0tZ2V0LWNhbmRp
ZGF0ZXMpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJoZWxt
LWdldC1jYWNoZWQtY2FuZGlkYXRlcyIgMCAyNiAoaGVscC1hcmdzIChoZWxtLWdldC1jYWNoZWQt
Y2FuZGlkYXRlcykgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMo
ImhlbG0tY29tcHV0ZS1tYXRjaGVzIiAwIDIwIChoZWxwLWFyZ3MgKGhlbG0tY29tcHV0ZS1tYXRj
aGVzKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygiaGVsbS0t
Y29sbGVjdC1tYXRjaGVzIiAwIDIxIChoZWxwLWFyZ3MgKGhlbG0tLWNvbGxlY3QtbWF0Y2hlcykg
Y2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImhlbG0tdXBkYXRl
IiAwIDExIChoZWxwLWFyZ3MgKGhlbG0tdXBkYXRlKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1
dHRvbiBidXR0b24gKHQpKSkgIygiaGVsbS1jaGVjay1uZXctaW5wdXQiIDAgMjAgKGhlbHAtYXJn
cyAoaGVsbS1jaGVjay1uZXctaW5wdXQpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1
dHRvbiAodCkpKV0gMyBbIygiaGVsbS1mbGV4LS1zdHlsZS1zY29yZSIgMCAyMiAoaGVscC1hcmdz
IChoZWxtLWZsZXgtLXN0eWxlLXNjb3JlKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBi
dXR0b24gKHQpKSkgIygiaGVsbS1mdXp6eS1mbGV4LXN0eWxlLXNjb3JlIiAwIDI3IChoZWxwLWFy
Z3MgKGhlbG0tZnV6enktZmxleC1zdHlsZS1zY29yZSkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1i
dXR0b24gYnV0dG9uICh0KSkpICMoImhlbG0tc2NvcmUtY2FuZGlkYXRlLWZvci1wYXR0ZXJuIiAw
IDMyIChoZWxwLWFyZ3MgKGhlbG0tc2NvcmUtY2FuZGlkYXRlLWZvci1wYXR0ZXJuKSBjYXRlZ29y
eSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygiIzxjb21waWxlZC1mdW5jdGlv
biAxMTA+IiAyMCAyMyAoYWN0aW9uIGhlbHAtZm5zLS1kaXNwbGF5LWZ1bmN0aW9uIGtleW1hcCAo
a2V5bWFwICh0b3VjaHNjcmVlbi1kb3duIC4gcHVzaC1idXR0b24pIChoZWFkZXItbGluZSBrZXlt
YXAgKHRvdWNoc2NyZWVuLWRvd24gLiBwdXNoLWJ1dHRvbikgKG1vdXNlLTIgLiBwdXNoLWJ1dHRv
bikpIChtb2RlLWxpbmUga2V5bWFwICh0b3VjaHNjcmVlbi1kb3duIC4gcHVzaC1idXR0b24pICht
b3VzZS0yIC4gcHVzaC1idXR0b24pKSAoZm9sbG93LWxpbmsgLiBtb3VzZS1mYWNlKSAobW91c2Ut
MiAuIHB1c2gtYnV0dG9uKSAoMTMgLiBwdXNoLWJ1dHRvbikga2V5bWFwIChiYWNrdGFiIC4gYmFj
a3dhcmQtYnV0dG9uKSAoMjcga2V5bWFwICg5IC4gYmFja3dhcmQtYnV0dG9uKSkgKDkgLiBmb3J3
YXJkLWJ1dHRvbikpIGJ1dHRvbi1kYXRhICNbNTE0ICJcMzAzXDIwMwgAXDMwNVwyMDIJAFwzMDZc
MzAyXDIwMxoAAjpcMjAzGgBcMzA3AQQhIVwyMDIwAAI6XDIwMyUAXDIxMQMhXDIwMjAAXDMwMlwy
MDMvAFwzMDcDIVwyMDIwAAJcMzAyXDIwM0EAAjpcMjAzQQBcMzA3AgQhIVwyMDJXAAI6XDIwM0wA
AQMhXDIwMlcAXDMwMlwyMDNWAFwzMDcDIVwyMDJXAAJcMzEwAlwzMDBcIlwyMDZrAFwzMTECXDMx
MgQMXCJcMzEzBSFHRFwzMDAjXDMxMAJcMzAwXCJcMjA2fwBcMzExAlwzMTIEDFwiXDMxMwUhR0Rc
MzAwIwFBQAFBQANAA0ABAVVcMjAzXDIzMABcMzAxP1wyMDVcMjMzAAMDV1wyMDcBAVZcMjA3IiBb
I3MoaGFzaC10YWJsZSB0ZXN0IGVxdWFsIGRhdGEgKCJwcm9maWxlci1yZXBvcnQtcHJldmlvdXMt
ZW50cnkiICgwLjAgMzApICJwcm9maWxlci1yZXBvcnQtZGVzY3JpYmUtZW50cnkiICgwLjAgMzAp
ICJwcm9maWxlci1yZXBvcnQtcmVuZGVyLWNhbGx0cmVlIiAoMC4wIDMxKSAiZm9udC1sb2NrLXBy
b2ZpbGVyLXN0b3AtYW5kLXJlcG9ydCIgKDAuMCAzNCkgInByb2ZpbGVyLXJlcG9ydCIgKDAuMCAx
NSkgInByb2ZpbGVyLXJlcG9ydC13cml0ZS1wcm9maWxlIiAoMC4wIDI5KSAicHJvZmlsZXItcmVw
b3J0LWNvbGxhcHNlLWVudHJ5IiAoMC4wIDMwKSAiZm9udC1sb2NrLXByb2ZpbGVyLXJlcG9ydC1t
b2RlIiAoMC4wIDMwKSAicHJvZmlsZXItcmVwb3J0LXRvZ2dsZS1lbnRyeSIgKDAuMCAyOCkgInBy
b2ZpbGVyLXJlcG9ydC1jb21wYXJlLXByb2ZpbGUiICgwLjAgMzEpICJwcm9maWxlci1yZXBvcnQt
ZmluZC1lbnRyeSIgKDAuMCAyNikgImZvbnQtbG9jay1wcm9maWxlci1yZXBvcnQiICgwLjAgMjUp
ICJwcm9maWxlci1yZXBvcnQtYXNjZW5kaW5nLXNvcnQiICgwLjAgMzApICJwcm9maWxlci1yZXBv
cnQtZXhwYW5kLWVudHJ5IiAoMC4wIDI4KSAicHJvZmlsZXItcmVwb3J0LXJlbmRlci1yZXZlcnNl
ZC1jYWxsdHJlZSIgKDAuMCA0MCkgInByb2ZpbGVyLXJlcG9ydC1kZXNjZW5kaW5nLXNvcnQiICgw
LjAgMzEpICJwcm9maWxlci1yZXBvcnQtbmV4dC1lbnRyeSIgKDAuMCAyNikgInByb2ZpbGVyLXJl
cG9ydC1tb2RlIiAoMC4wIDIwKSkpIG5pbCBuaWwgdCBoZWxtLXBhdHRlcm4gY2RyIGNhciBoZWxt
LWJhc2VuYW1lIGdldGhhc2ggcHV0aGFzaCBoZWxtLXNjb3JlLWNhbmRpZGF0ZS1mb3ItcGF0dGVy
biBoZWxtLXN0cmluZ2lmeV0gMTMgIgoKKGZuIFMxIFMyKSJdIGNhdGVnb3J5IHQgZm9sbG93LWxp
bmsgdCBidXR0b24gdCBoZWxwLWVjaG8gIm1vdXNlLTIsIFJFVDogRGlzcGxheSB0aGUgZnVuY3Rp
b24ncyBib2R5IiBtb3VzZS1mYWNlIGhpZ2hsaWdodCBmb250LWxvY2stZmFjZSBidXR0b24gZmFj
ZSBidXR0b24pKSAjKCJoZWxtLWZ1enp5LW1hdGNoaW5nLWRlZmF1bHQtc29ydC1mbi0xIiAwIDM3
IChoZWxwLWFyZ3MgKGhlbG0tZnV6enktbWF0Y2hpbmctZGVmYXVsdC1zb3J0LWZuLTEpIGNhdGVn
b3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCIjPHN1YnItbmF0aXZlLWVs
aXNwIEY2MTZlNmY2ZTc5NmQ2Zjc1NzMyZDZjNjE2ZDYyNjQ2MV9hbm9ueW1vdXNfbGFtYmRhXzIw
PiIgMjAgNzMgKGJ1dHRvbiAodCkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gaGVscC1h
cmdzIChGNjE2ZTZmNmU3OTZkNmY3NTczMmQ2YzYxNmQ2MjY0NjFfYW5vbnltb3VzX2xhbWJkYV8y
MCkpKSAjKCJoZWxtLWFwcGx5LWZ1bmN0aW9ucy1mcm9tLXNvdXJjZSIgMCAzMiAoaGVscC1hcmdz
IChoZWxtLWFwcGx5LWZ1bmN0aW9ucy1mcm9tLXNvdXJjZSkgY2F0ZWdvcnkgaGVscC1mdW5jdGlv
bi1idXR0b24gYnV0dG9uICh0KSkpICMoImhlbG0tcHJvY2Vzcy1maWx0ZXJlZC1jYW5kaWRhdGUt
dHJhbnNmb3JtZXIiIDAgNDMgKGhlbHAtYXJncyAoaGVsbS1wcm9jZXNzLWZpbHRlcmVkLWNhbmRp
ZGF0ZS10cmFuc2Zvcm1lcikgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0
KSkpICMoImhlbG0tY29tcHV0ZS1tYXRjaGVzIiAwIDIwIChoZWxwLWFyZ3MgKGhlbG0tY29tcHV0
ZS1tYXRjaGVzKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygi
aGVsbS0tY29sbGVjdC1tYXRjaGVzIiAwIDIxIChoZWxwLWFyZ3MgKGhlbG0tLWNvbGxlY3QtbWF0
Y2hlcykgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImhlbG0t
dXBkYXRlIiAwIDExIChoZWxwLWFyZ3MgKGhlbG0tdXBkYXRlKSBjYXRlZ29yeSBoZWxwLWZ1bmN0
aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygiaGVsbS1jaGVjay1uZXctaW5wdXQiIDAgMjAgKGhl
bHAtYXJncyAoaGVsbS1jaGVjay1uZXctaW5wdXQpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0
dG9uIGJ1dHRvbiAodCkpKSAjKCJoZWxtLWNoZWNrLW1pbmlidWZmZXItaW5wdXQiIDAgMjcgKGhl
bHAtYXJncyAoaGVsbS1jaGVjay1taW5pYnVmZmVyLWlucHV0KSBjYXRlZ29yeSBoZWxwLWZ1bmN0
aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygiIzxjb21waWxlZC1mdW5jdGlvbiA0MkY+IiAyMCAy
MyAoYWN0aW9uIGhlbHAtZm5zLS1kaXNwbGF5LWZ1bmN0aW9uIGtleW1hcCAoa2V5bWFwICh0b3Vj
aHNjcmVlbi1kb3duIC4gcHVzaC1idXR0b24pIChoZWFkZXItbGluZSBrZXltYXAgKHRvdWNoc2Ny
ZWVuLWRvd24gLiBwdXNoLWJ1dHRvbikgKG1vdXNlLTIgLiBwdXNoLWJ1dHRvbikpIChtb2RlLWxp
bmUga2V5bWFwICh0b3VjaHNjcmVlbi1kb3duIC4gcHVzaC1idXR0b24pIChtb3VzZS0yIC4gcHVz
aC1idXR0b24pKSAoZm9sbG93LWxpbmsgLiBtb3VzZS1mYWNlKSAobW91c2UtMiAuIHB1c2gtYnV0
dG9uKSAoMTMgLiBwdXNoLWJ1dHRvbikga2V5bWFwIChiYWNrdGFiIC4gYmFja3dhcmQtYnV0dG9u
KSAoMjcga2V5bWFwICg5IC4gYmFja3dhcmQtYnV0dG9uKSkgKDkgLiBmb3J3YXJkLWJ1dHRvbikp
IGJ1dHRvbi1kYXRhICNbMCAiCFwyMDYFAAk/XDIwNRkAXDMwMiByXDMwM1wzMDQCXCJcMjE2XDMw
NSBcMjEwXDMwNiAqXDI2MgFcMjA3IiBbaGVsbS1pbi1wZXJzaXN0ZW50LWFjdGlvbiBoZWxtLXN1
c3BlbmQtdXBkYXRlLWZsYWcgaW50ZXJuYWwtLWJlZm9yZS1zYXZlLXNlbGVjdGVkLXdpbmRvdyBt
YWtlLWNsb3N1cmUgI1swICJcMzAxXDMwMCFcMjA3IiBbVjAgaW50ZXJuYWwtLWFmdGVyLXNhdmUt
c2VsZWN0ZWQtd2luZG93XSAyXSBoZWxtLWNoZWNrLW1pbmlidWZmZXItaW5wdXQgaGVsbS1wcmlu
dC1lcnJvci1tZXNzYWdlc10gNF0gY2F0ZWdvcnkgdCBmb2xsb3ctbGluayB0IGJ1dHRvbiB0IGhl
bHAtZWNobyAibW91c2UtMiwgUkVUOiBEaXNwbGF5IHRoZSBmdW5jdGlvbidzIGJvZHkiIG1vdXNl
LWZhY2UgaGlnaGxpZ2h0IGZvbnQtbG9jay1mYWNlIGJ1dHRvbiBmYWNlIGJ1dHRvbikpICMoImFw
cGx5IiAwIDUgKGhlbHAtYXJncyAoYXBwbHkpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9u
IGJ1dHRvbiAodCkpKSAjKCJ0aW1lci1ldmVudC1oYW5kbGVyIiAwIDE5IChoZWxwLWFyZ3MgKHRp
bWVyLWV2ZW50LWhhbmRsZXIpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAo
dCkpKV0gMyBbIygid2hlcmUtaXMtaW50ZXJuYWwiIDAgMTcgKGhlbHAtYXJncyAod2hlcmUtaXMt
aW50ZXJuYWwpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJz
dWJzdGl0dXRlLWNvbW1hbmQta2V5cyIgMCAyMyAoaGVscC1hcmdzIChzdWJzdGl0dXRlLWNvbW1h
bmQta2V5cykgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImhl
bG0tZGlzcGxheS1tb2RlLWxpbmUiIDAgMjIgKGhlbHAtYXJncyAoaGVsbS1kaXNwbGF5LW1vZGUt
bGluZSkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImhlbG0t
bW92ZS1zZWxlY3Rpb24tY29tbW9uIiAwIDI2IChoZWxwLWFyZ3MgKGhlbG0tbW92ZS1zZWxlY3Rp
b24tY29tbW9uKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygi
aGVsbS0tdXBkYXRlLW1vdmUtZmlyc3QtbGluZSIgMCAyOCAoaGVscC1hcmdzIChoZWxtLS11cGRh
dGUtbW92ZS1maXJzdC1saW5lKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24g
KHQpKSkgIygiaGVsbS11cGRhdGUiIDAgMTEgKGhlbHAtYXJncyAoaGVsbS11cGRhdGUpIGNhdGVn
b3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJoZWxtLWNoZWNrLW5ldy1p
bnB1dCIgMCAyMCAoaGVscC1hcmdzIChoZWxtLWNoZWNrLW5ldy1pbnB1dCkgY2F0ZWdvcnkgaGVs
cC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImhlbG0tY2hlY2stbWluaWJ1ZmZlci1p
bnB1dCIgMCAyNyAoaGVscC1hcmdzIChoZWxtLWNoZWNrLW1pbmlidWZmZXItaW5wdXQpIGNhdGVn
b3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCIjPGNvbXBpbGVkLWZ1bmN0
aW9uIDQyRj4iIDIwIDIzIChhY3Rpb24gaGVscC1mbnMtLWRpc3BsYXktZnVuY3Rpb24ga2V5bWFw
IChrZXltYXAgKHRvdWNoc2NyZWVuLWRvd24gLiBwdXNoLWJ1dHRvbikgKGhlYWRlci1saW5lIGtl
eW1hcCAodG91Y2hzY3JlZW4tZG93biAuIHB1c2gtYnV0dG9uKSAobW91c2UtMiAuIHB1c2gtYnV0
dG9uKSkgKG1vZGUtbGluZSBrZXltYXAgKHRvdWNoc2NyZWVuLWRvd24gLiBwdXNoLWJ1dHRvbikg
KG1vdXNlLTIgLiBwdXNoLWJ1dHRvbikpIChmb2xsb3ctbGluayAuIG1vdXNlLWZhY2UpIChtb3Vz
ZS0yIC4gcHVzaC1idXR0b24pICgxMyAuIHB1c2gtYnV0dG9uKSBrZXltYXAgKGJhY2t0YWIgLiBi
YWNrd2FyZC1idXR0b24pICgyNyBrZXltYXAgKDkgLiBiYWNrd2FyZC1idXR0b24pKSAoOSAuIGZv
cndhcmQtYnV0dG9uKSkgYnV0dG9uLWRhdGEgI1swICIIXDIwNgUACT9cMjA1GQBcMzAyIHJcMzAz
XDMwNAJcIlwyMTZcMzA1IFwyMTBcMzA2ICpcMjYyAVwyMDciIFtoZWxtLWluLXBlcnNpc3RlbnQt
YWN0aW9uIGhlbG0tc3VzcGVuZC11cGRhdGUtZmxhZyBpbnRlcm5hbC0tYmVmb3JlLXNhdmUtc2Vs
ZWN0ZWQtd2luZG93IG1ha2UtY2xvc3VyZSAjWzAgIlwzMDFcMzAwIVwyMDciIFtWMCBpbnRlcm5h
bC0tYWZ0ZXItc2F2ZS1zZWxlY3RlZC13aW5kb3ddIDJdIGhlbG0tY2hlY2stbWluaWJ1ZmZlci1p
bnB1dCBoZWxtLXByaW50LWVycm9yLW1lc3NhZ2VzXSA0XSBjYXRlZ29yeSB0IGZvbGxvdy1saW5r
IHQgYnV0dG9uIHQgaGVscC1lY2hvICJtb3VzZS0yLCBSRVQ6IERpc3BsYXkgdGhlIGZ1bmN0aW9u
J3MgYm9keSIgbW91c2UtZmFjZSBoaWdobGlnaHQgZm9udC1sb2NrLWZhY2UgYnV0dG9uIGZhY2Ug
YnV0dG9uKSkgIygiYXBwbHkiIDAgNSAoaGVscC1hcmdzIChhcHBseSkgY2F0ZWdvcnkgaGVscC1m
dW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoInRpbWVyLWV2ZW50LWhhbmRsZXIiIDAgMTkg
KGhlbHAtYXJncyAodGltZXItZXZlbnQtaGFuZGxlcikgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1i
dXR0b24gYnV0dG9uICh0KSkpICMoImhlbG0tcmVhZC1mcm9tLW1pbmlidWZmZXIiIDAgMjUgKGhl
bHAtYXJncyAoaGVsbS1yZWFkLWZyb20tbWluaWJ1ZmZlcikgY2F0ZWdvcnkgaGVscC1mdW5jdGlv
bi1idXR0b24gYnV0dG9uICh0KSkpICMoImhlbG0taW50ZXJuYWwiIDAgMTMgKGhlbHAtYXJncyAo
aGVsbS1pbnRlcm5hbCkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkp
ICMoImhlbG0iIDAgNCAoaGVscC1hcmdzIChoZWxtKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1
dHRvbiBidXR0b24gKHQpKSkgIygiaGVsbSIgMCA0IChoZWxwLWFyZ3MgKGhlbG0pIGNhdGVnb3J5
IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJoZWxtLU0teC1yZWFkLWV4dGVu
ZGVkLWNvbW1hbmQiIDAgMzAgKGhlbHAtYXJncyAoaGVsbS1NLXgtcmVhZC1leHRlbmRlZC1jb21t
YW5kKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSldIDQgWyMoImhl
bG0taGFuZGxlLXdpbm5lci1ib3JpbmctYnVmZmVycyIgMCAzMyAoaGVscC1hcmdzIChoZWxtLWhh
bmRsZS13aW5uZXItYm9yaW5nLWJ1ZmZlcnMpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9u
IGJ1dHRvbiAodCkpKSAjKCJoZWxtLWxvZy1ydW4taG9vayIgMCAxNyAoaGVscC1hcmdzIChoZWxt
LWxvZy1ydW4taG9vaykgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkp
ICMoImhlbG0tY2xlYW51cCIgMCAxMiAoaGVscC1hcmdzIChoZWxtLWNsZWFudXApIGNhdGVnb3J5
IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCIjPHN1YnItbmF0aXZlLWVsaXNw
IEY2MTZlNmY2ZTc5NmQ2Zjc1NzMyZDZjNjE2ZDYyNjQ2MV9hbm9ueW1vdXNfbGFtYmRhXzkxPiIg
MjAgNzMgKGJ1dHRvbiAodCkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gaGVscC1hcmdz
IChGNjE2ZTZmNmU3OTZkNmY3NTczMmQ2YzYxNmQ2MjY0NjFfYW5vbnltb3VzX2xhbWJkYV85MSkp
KSAjKCJoZWxtLWludGVybmFsIiAwIDEzIChoZWxwLWFyZ3MgKGhlbG0taW50ZXJuYWwpIGNhdGVn
b3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJoZWxtIiAwIDQgKGhlbHAt
YXJncyAoaGVsbSkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMo
ImhlbG0iIDAgNCAoaGVscC1hcmdzIChoZWxtKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRv
biBidXR0b24gKHQpKSkgIygiaGVsbS1NLXgtcmVhZC1leHRlbmRlZC1jb21tYW5kIiAwIDMwICho
ZWxwLWFyZ3MgKGhlbG0tTS14LXJlYWQtZXh0ZW5kZWQtY29tbWFuZCkgY2F0ZWdvcnkgaGVscC1m
dW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImhlbG0tTS14IiAwIDggKGhlbHAtYXJncyAo
aGVsbS1NLXgpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJm
dW5jYWxsLWludGVyYWN0aXZlbHkiIDAgMjEgKGhlbHAtYXJncyAoZnVuY2FsbC1pbnRlcmFjdGl2
ZWx5KSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygiY29tbWFu
ZC1leGVjdXRlIiAwIDE1IChoZWxwLWFyZ3MgKGNvbW1hbmQtZXhlY3V0ZSkgY2F0ZWdvcnkgaGVs
cC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICJuaWwiICJuaWwiICJuaWwiICJuaWwiICJu
aWwiXSA3IFsjKCJzZWxlY3QtZnJhbWUtc2V0LWlucHV0LWZvY3VzIiAwIDI4IChoZWxwLWFyZ3Mg
KHNlbGVjdC1mcmFtZS1zZXQtaW5wdXQtZm9jdXMpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0
dG9uIGJ1dHRvbiAodCkpKSAjKCJoZWxtLWZyYW1lLW9yLXdpbmRvdy1jb25maWd1cmF0aW9uIiAw
IDM0IChoZWxwLWFyZ3MgKGhlbG0tZnJhbWUtb3Itd2luZG93LWNvbmZpZ3VyYXRpb24pIGNhdGVn
b3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJoZWxtLWNsZWFudXAiIDAg
MTIgKGhlbHAtYXJncyAoaGVsbS1jbGVhbnVwKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1dHRv
biBidXR0b24gKHQpKSkgIygiIzxzdWJyLW5hdGl2ZS1lbGlzcCBGNjE2ZTZmNmU3OTZkNmY3NTcz
MmQ2YzYxNmQ2MjY0NjFfYW5vbnltb3VzX2xhbWJkYV85MT4iIDIwIDczIChidXR0b24gKHQpIGNh
dGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGhlbHAtYXJncyAoRjYxNmU2ZjZlNzk2ZDZmNzU3
MzJkNmM2MTZkNjI2NDYxX2Fub255bW91c19sYW1iZGFfOTEpKSkgIygiaGVsbS1pbnRlcm5hbCIg
MCAxMyAoaGVscC1hcmdzIChoZWxtLWludGVybmFsKSBjYXRlZ29yeSBoZWxwLWZ1bmN0aW9uLWJ1
dHRvbiBidXR0b24gKHQpKSkgIygiaGVsbSIgMCA0IChoZWxwLWFyZ3MgKGhlbG0pIGNhdGVnb3J5
IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRvbiAodCkpKSAjKCJoZWxtIiAwIDQgKGhlbHAtYXJn
cyAoaGVsbSkgY2F0ZWdvcnkgaGVscC1mdW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImhl
bG0tTS14LXJlYWQtZXh0ZW5kZWQtY29tbWFuZCIgMCAzMCAoaGVscC1hcmdzIChoZWxtLU0teC1y
ZWFkLWV4dGVuZGVkLWNvbW1hbmQpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1dHRv
biAodCkpKSAjKCJoZWxtLU0teCIgMCA4IChoZWxwLWFyZ3MgKGhlbG0tTS14KSBjYXRlZ29yeSBo
ZWxwLWZ1bmN0aW9uLWJ1dHRvbiBidXR0b24gKHQpKSkgIygiZnVuY2FsbC1pbnRlcmFjdGl2ZWx5
IiAwIDIxIChoZWxwLWFyZ3MgKGZ1bmNhbGwtaW50ZXJhY3RpdmVseSkgY2F0ZWdvcnkgaGVscC1m
dW5jdGlvbi1idXR0b24gYnV0dG9uICh0KSkpICMoImNvbW1hbmQtZXhlY3V0ZSIgMCAxNSAoaGVs
cC1hcmdzIChjb21tYW5kLWV4ZWN1dGUpIGNhdGVnb3J5IGhlbHAtZnVuY3Rpb24tYnV0dG9uIGJ1
dHRvbiAodCkpKSAibmlsIiAibmlsIiAibmlsIiAibmlsIiAibmlsIl0gNiBbIkF1dG9tYXRpYyBH
QyIgIm5pbCJdIDEyNTApKSAoMjYxMTcgMTI1NzcgNzkwMzczIDcxNTAwMCkgbmlsXQo=
--=-=-=
Content-Type: text/plain


-- 
Ihor Radchenko // yantar92,
Org mode contributor,
Learn more about Org mode at <https://orgmode.org/>.
Support Org development at <https://liberapay.com/org-mode>,
or support my work at <https://liberapay.com/yantar92>

--=-=-=--




Information forwarded to bug-gnu-emacs@HIDDEN:
bug#70036; Package emacs. Full text available.

Message received at 70036 <at> debbugs.gnu.org:


Received: (at 70036) by debbugs.gnu.org; 28 Mar 2024 08:53:09 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Thu Mar 28 04:53:09 2024
Received: from localhost ([127.0.0.1]:39014 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1rplVV-0000Z7-BS
	for submit <at> debbugs.gnu.org; Thu, 28 Mar 2024 04:53:09 -0400
Received: from out-172.mta0.migadu.com ([2001:41d0:1004:224b::ac]:16600)
 by debbugs.gnu.org with esmtp (Exim 4.84_2)
 (envelope-from <theo@HIDDEN>) id 1rplVR-0000Y4-Ct
 for 70036 <at> debbugs.gnu.org; Thu, 28 Mar 2024 04:53:07 -0400
X-Report-Abuse: Please report any abuse attempt to abuse@HIDDEN and
 include these headers.
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=thornhill.no;
 s=key1; t=1711615978;
 h=from:from:reply-to:subject:subject:date:date:message-id:message-id:
 to:to:cc:cc:mime-version:mime-version:content-type:content-type:
 in-reply-to:in-reply-to:references:references;
 bh=Hgr01q93yqfEv9BNDIRIzqFx7smpbyKimILzF099i1Y=;
 b=aumW62MSbpNbNusZ1vq5XIMLg0xbtuHxjn3pfC49mtkVENLkzc4bDFVa0yDwRjxZBshpHV
 6QGsxBIVYWi2X4XhEox9n9Q6FMgAbPA8TyfNO8c2z0aovZDWlaw4tvhu5mDIrAFSKz3rYm
 FzpM1r5RxrEURFgHUhEsy7oBSiUX77bYfOcW1FuR2eg+9wqWisSmBh3ktEVbl3pqM/g6Hv
 nFqDHOGC2WuLjhXx3wQhTZ7S/IPr99c0SoMDRW+HUNFwokeHSmLWJ/bPMK32ZxDUQerqgv
 WqE6GVActW80dm/6kQQVUR2XlUDSnP49yKtapNCPbB/IeP0E93A4uT67eqogxw==
From: Theodor Thornhill <theo@HIDDEN>
To: Eli Zaretskii <eliz@HIDDEN>
Subject: Re: bug#70036: 30.0.50; Move file-truename to the C level
In-Reply-To: <874jcqygpn.fsf@HIDDEN>
References: <87le63xzjt.fsf@HIDDEN> <87ttkrqvru.fsf@HIDDEN>
 <87il17xsea.fsf@HIDDEN> <86wmpmhp0a.fsf@HIDDEN>
 <874jcqygpn.fsf@HIDDEN>
Date: Thu, 28 Mar 2024 09:52:53 +0100
Message-ID: <87y1a2wxei.fsf@HIDDEN>
MIME-Version: 1.0
Content-Type: text/plain
X-Migadu-Flow: FLOW_OUT
X-Spam-Score: 0.0 (/)
X-Debbugs-Envelope-To: 70036
Cc: 70036 <at> debbugs.gnu.org, felician.nemeth@HIDDEN,
 =?utf-8?B?Sm/Do28g?= =?utf-8?B?VMOhdm9yYQ==?= <joaotavora@HIDDEN>
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -1.0 (-)

Theodor Thornhill <theo@HIDDEN> writes:

> Eli Zaretskii <eliz@HIDDEN> writes:
>
>>> Cc: 70036 <at> debbugs.gnu.org
>>> Date: Wed, 27 Mar 2024 22:43:25 +0100
>>> From:  Theodor Thornhill via "Bug reports for GNU Emacs,
>>>  the Swiss army knife of text editors" <bug-gnu-emacs@HIDDEN>
>>> 
>>> Felician Nemeth <felician.nemeth@HIDDEN> writes:
>>> 
>>> >> I've been studying Eglots performance and have been noticing a couple
>>> >> of things that I find very interesting. It seems like `file-truename`
>>> >> is in the hot path
>>> >
>>> > I think Eglot repeatedly calls file-truename with the same argument (or
>>> > with an argument from a small set of filenames.)
>>> 
>>> This is true, to some extent.
>>
>> Can someone explain why Eglot needs to call file-truename in the first
>> place?
>

[...]

> handler. We could store the last received diagnostics in the server
> object, and do a quick lookup from known buffers there.
>
> Theo


It seems to be there from the very early days, like in 2018. My guess is
that we simply never noticed the performance issues here due to other
stuff like json parsing etc.

CC'd Joao to get some perspective whether or not it is intentional or
needed at all.

Theo




Information forwarded to bug-gnu-emacs@HIDDEN:
bug#70036; Package emacs. Full text available.

Message received at 70036 <at> debbugs.gnu.org:


Received: (at 70036) by debbugs.gnu.org; 28 Mar 2024 07:10:48 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Thu Mar 28 03:10:48 2024
Received: from localhost ([127.0.0.1]:38911 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1rpjuQ-0000KX-2O
	for submit <at> debbugs.gnu.org; Thu, 28 Mar 2024 03:10:48 -0400
Received: from out-175.mta0.migadu.com ([91.218.175.175]:57343)
 by debbugs.gnu.org with esmtp (Exim 4.84_2)
 (envelope-from <theo@HIDDEN>) id 1rpjuL-0000JU-9Z
 for 70036 <at> debbugs.gnu.org; Thu, 28 Mar 2024 03:10:43 -0400
X-Report-Abuse: Please report any abuse attempt to abuse@HIDDEN and
 include these headers.
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=thornhill.no;
 s=key1; t=1711609834;
 h=from:from:reply-to:subject:subject:date:date:message-id:message-id:
 to:to:cc:cc:mime-version:mime-version:content-type:content-type:
 in-reply-to:in-reply-to:references:references;
 bh=abEmjJWFPetvcclYMyYRISoFipxOfAjtUlb0dxNIXa4=;
 b=xoSsxs0fT+IakAHvuyuL3xfPd9/ZSRyL3PFjGciYy/cyuEGCDVZL1to78696qsDAE1B8eQ
 4OkVnyOepzCRSBssxQPAlRRwv1KaTJaon7qDkfHHojURWKVo9GExkkY1iWxL1tHNhlVgjz
 3W9O7RJczgZaQjhmHdw9Llx6VyuN22SklBD/Rs1fdNj1SkPhdCLRbyn8OhzhcMHaBpWLvx
 89IYhRy+bhIgyFtCg0qgURQ0kVkEgTochxqkaFxFb/urBtqXe/EhNk5vZ4FoNPbKDbp2Wk
 HGzKzq85tjIdmpotR7tkGMiqDmIV1Rbm6bCroYbUKpNnCtOphXxYpjYdTeuN2g==
From: Theodor Thornhill <theo@HIDDEN>
To: Eli Zaretskii <eliz@HIDDEN>
Subject: Re: bug#70036: 30.0.50; Move file-truename to the C level
In-Reply-To: <86wmpmhp0a.fsf@HIDDEN>
References: <87le63xzjt.fsf@HIDDEN> <87ttkrqvru.fsf@HIDDEN>
 <87il17xsea.fsf@HIDDEN> <86wmpmhp0a.fsf@HIDDEN>
Date: Thu, 28 Mar 2024 08:10:28 +0100
Message-ID: <874jcqygpn.fsf@HIDDEN>
MIME-Version: 1.0
Content-Type: text/plain
X-Migadu-Flow: FLOW_OUT
X-Spam-Score: 0.0 (/)
X-Debbugs-Envelope-To: 70036
Cc: 70036 <at> debbugs.gnu.org, felician.nemeth@HIDDEN
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -1.0 (-)

Eli Zaretskii <eliz@HIDDEN> writes:

>> Cc: 70036 <at> debbugs.gnu.org
>> Date: Wed, 27 Mar 2024 22:43:25 +0100
>> From:  Theodor Thornhill via "Bug reports for GNU Emacs,
>>  the Swiss army knife of text editors" <bug-gnu-emacs@HIDDEN>
>> 
>> Felician Nemeth <felician.nemeth@HIDDEN> writes:
>> 
>> >> I've been studying Eglots performance and have been noticing a couple
>> >> of things that I find very interesting. It seems like `file-truename`
>> >> is in the hot path
>> >
>> > I think Eglot repeatedly calls file-truename with the same argument (or
>> > with an argument from a small set of filenames.)
>> 
>> This is true, to some extent.
>
> Can someone explain why Eglot needs to call file-truename in the first
> place?

I tried quickly just replacing file-truename with expand-file-name, and
from some quick testing, it seems to work, and of course remove
file-truenames slow performance in the profiles:

```
@@ -1085,7 +1089,7 @@ eglot-uri-to-path
 
 (defun eglot-path-to-uri (path)
   "Convert PATH, a file name, to LSP URI string and return it."
-  (let ((truepath (file-truename path)))
+  (let ((truepath (expand-file-name path)))
     (if (and (url-type (url-generic-parse-url path))
              ;; It might be MS Windows path which includes a drive
              ;; letter that looks like a URL scheme (bug#59338)
```

This wouldn't help for the usage in find-buffer-visiting, though. But
this one could more easily be replaced by reworking the diagnostics
handler. We could store the last received diagnostics in the server
object, and do a quick lookup from known buffers there.

Theo




Information forwarded to bug-gnu-emacs@HIDDEN:
bug#70036; Package emacs. Full text available.

Message received at 70036 <at> debbugs.gnu.org:


Received: (at 70036) by debbugs.gnu.org; 28 Mar 2024 07:04:36 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Thu Mar 28 03:04:35 2024
Received: from localhost ([127.0.0.1]:38897 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1rpjoQ-0008Iz-A1
	for submit <at> debbugs.gnu.org; Thu, 28 Mar 2024 03:04:35 -0400
Received: from out-176.mta1.migadu.com ([95.215.58.176]:56291)
 by debbugs.gnu.org with esmtp (Exim 4.84_2)
 (envelope-from <theo@HIDDEN>) id 1rpjoO-0008I3-4c
 for 70036 <at> debbugs.gnu.org; Thu, 28 Mar 2024 03:04:33 -0400
X-Report-Abuse: Please report any abuse attempt to abuse@HIDDEN and
 include these headers.
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=thornhill.no;
 s=key1; t=1711609466;
 h=from:from:reply-to:subject:subject:date:date:message-id:message-id:
 to:to:cc:cc:mime-version:mime-version:content-type:content-type:
 in-reply-to:in-reply-to:references:references;
 bh=lCB9PQCPWazdIAUEQnqTKHme6QPE0eACk3hSnqfstzE=;
 b=me2+Ea5y6jAUvc8iTyQa6B4uiT7KEEDSq+LDThZQWed1v6CVKQ0v4xhDjemViask/Qg8Lz
 vJa+9rz1S3FFtP9n3x5Lxi32lukaJSQ1yAVh7lwK9oqc3kqGDXPdWwy0VJwYAmpsd4wQ2L
 ZaOlWNif1a6FuwxsxMIpkxls/ty05/Csn63zB0zevCaXRUmrKvBMgHUDzzFwxGELgRtkbS
 J95ct7FCMjnkR6TzKCBsoKnv44HcOQmDqIcrXOvpgYekC8lt+W1pyEw786p82+1B/qKPYa
 SrVdmBhKnNTpZNGQDOZJq1XjiAoviPb3VySLBe8TSZtDVE2Yl0rwyeCyMqLh8A==
From: Theodor Thornhill <theo@HIDDEN>
To: Po Lu <luangruo@HIDDEN>
Subject: Re: bug#70036: 30.0.50; Move file-truename to the C level
In-Reply-To: <87ttkr3vku.fsf@HIDDEN>
References: <87le63xzjt.fsf@HIDDEN> <861q7vihnm.fsf@HIDDEN>
 <87frwbxrs6.fsf@HIDDEN> <87zfuj40pz.fsf@HIDDEN>
 <87ttkr3vku.fsf@HIDDEN>
Date: Thu, 28 Mar 2024 08:04:22 +0100
Message-ID: <877chmygzt.fsf@HIDDEN>
MIME-Version: 1.0
Content-Type: text/plain
X-Migadu-Flow: FLOW_OUT
X-Spam-Score: 0.0 (/)
X-Debbugs-Envelope-To: 70036
Cc: Eli Zaretskii <eliz@HIDDEN>, 70036 <at> debbugs.gnu.org
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -1.0 (-)

Po Lu <luangruo@HIDDEN> writes:

> Po Lu <luangruo@HIDDEN> writes:
>
>> Haiku supports realpath, but not wordexp.  We must reimplement virtually
>> all POSIX functions of this nature on Windows, as the versions provided
>> by system C libraries, if they exist at all, are inadequate for some
>> reason or another.  Furthermore, these functions are absent from a
>> number of other operating systems, such as OpenBSD and Android 14.0, and
>> on others (Alpine, I believe) wordexp is severely inefficient for being
>> implemented as a wrapper around /bin/sh.
>
> BTW, after reading the subject of this bug report, I don't believe there
> is a place for wordexp at all.  wordexp is no replacement for
> Fexpand_file_name, but rather a means of expanding input in the manner
> of a shell, which input might include arithmetic expressions, shell
> command substitutions, and other expressions valid as shell input.  If
> Fexpand_file_name alone will not suffice, TRT is to replicate the
> mechanics of file-truename in whole, not cutting corners with these
> admittedly tempting functions.

I agree, and believe you are right. I think Fexpand_file_name should be
enough. I'll look into it!

Thanks!




Information forwarded to bug-gnu-emacs@HIDDEN:
bug#70036; Package emacs. Full text available.

Message received at 70036 <at> debbugs.gnu.org:


Received: (at 70036) by debbugs.gnu.org; 28 Mar 2024 07:03:58 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Thu Mar 28 03:03:58 2024
Received: from localhost ([127.0.0.1]:38891 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1rpjno-0008EU-KP
	for submit <at> debbugs.gnu.org; Thu, 28 Mar 2024 03:03:58 -0400
Received: from out-176.mta1.migadu.com ([95.215.58.176]:51364)
 by debbugs.gnu.org with esmtp (Exim 4.84_2)
 (envelope-from <theo@HIDDEN>) id 1rpjnl-0008DO-5S
 for 70036 <at> debbugs.gnu.org; Thu, 28 Mar 2024 03:03:55 -0400
X-Report-Abuse: Please report any abuse attempt to abuse@HIDDEN and
 include these headers.
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=thornhill.no;
 s=key1; t=1711609426;
 h=from:from:reply-to:subject:subject:date:date:message-id:message-id:
 to:to:cc:cc:mime-version:mime-version:content-type:content-type:
 in-reply-to:in-reply-to:references:references;
 bh=hVrUWW2gJT6abc/q+zGDPCZsIGQQvm2njGpdFx38rjw=;
 b=W7Hh5Kfi6tyD2jK/+WWBXfsVWzkfwFiKfbcLEjZaDhCN2dmPEvQ8hxtGJnsrjHa7VBWT3w
 ULYR0kqnGHqyM6scQcT7+DXU+JdwKfPzxwg9GR7gYvKnWFXDVu1tRyisLcJWHVzFDXOxET
 bXugLnI4pmxSiizAw94HTYYRmiOj/DgOWsOWOGlb0krUiN5iBh09mrmXWX1QbbLE71cEQT
 4cgU7+qQntmmdjpqmGOstSCYHYSG81mRy1ea88+aWPb3EZtIAl6iBkHYKCYZURp7aHS5sY
 l4yEXKfjLPBeiPG85Y/YFargRh7dQ/K9eZgwXIFsxZgDj5yNfTC4gVjkHFA93w==
From: Theodor Thornhill <theo@HIDDEN>
To: Po Lu <luangruo@HIDDEN>
Subject: Re: bug#70036: 30.0.50; Move file-truename to the C level
In-Reply-To: <87zfuj40pz.fsf@HIDDEN>
References: <87le63xzjt.fsf@HIDDEN> <861q7vihnm.fsf@HIDDEN>
 <87frwbxrs6.fsf@HIDDEN> <87zfuj40pz.fsf@HIDDEN>
Date: Thu, 28 Mar 2024 08:03:43 +0100
Message-ID: <87a5miyh0w.fsf@HIDDEN>
MIME-Version: 1.0
Content-Type: text/plain
X-Migadu-Flow: FLOW_OUT
X-Spam-Score: 0.0 (/)
X-Debbugs-Envelope-To: 70036
Cc: Eli Zaretskii <eliz@HIDDEN>, 70036 <at> debbugs.gnu.org
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -1.0 (-)

Po Lu <luangruo@HIDDEN> writes:

> Theodor Thornhill <theo@HIDDEN> writes:
>
>> OK - for my education on the portability argument. Is that because of
>> Emacs support targets like haiku and old versions of windows, or
>> something else inherent in these functions?
>
> Haiku supports realpath, but not wordexp.  We must reimplement virtually
> all POSIX functions of this nature on Windows, as the versions provided
> by system C libraries, if they exist at all, are inadequate for some
> reason or another.  Furthermore, these functions are absent from a
> number of other operating systems, such as OpenBSD and Android 14.0, and
> on others (Alpine, I believe) wordexp is severely inefficient for being
> implemented as a wrapper around /bin/sh.

Thanks for the input!

Theo




Information forwarded to bug-gnu-emacs@HIDDEN:
bug#70036; Package emacs. Full text available.

Message received at 70036 <at> debbugs.gnu.org:


Received: (at 70036) by debbugs.gnu.org; 28 Mar 2024 07:03:44 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Thu Mar 28 03:03:44 2024
Received: from localhost ([127.0.0.1]:38887 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1rpjna-0008Cv-Mz
	for submit <at> debbugs.gnu.org; Thu, 28 Mar 2024 03:03:44 -0400
Received: from out-178.mta1.migadu.com ([2001:41d0:203:375::b2]:28873)
 by debbugs.gnu.org with esmtp (Exim 4.84_2)
 (envelope-from <theo@HIDDEN>) id 1rpjnV-0008C0-U9
 for 70036 <at> debbugs.gnu.org; Thu, 28 Mar 2024 03:03:40 -0400
X-Report-Abuse: Please report any abuse attempt to abuse@HIDDEN and
 include these headers.
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=thornhill.no;
 s=key1; t=1711609410;
 h=from:from:reply-to:subject:subject:date:date:message-id:message-id:
 to:to:cc:cc:mime-version:mime-version:content-type:content-type:
 in-reply-to:in-reply-to:references:references;
 bh=y6dwAIoc9FD82X3mPQJuOFejtBgFIUXEoWJoBxtIVI4=;
 b=gJIQIJFFkqxHrInQ8vq6vC9o5Dr+TXw5VksrUSvtoWPQ0Mke6a/M7QbBEX5AYV604EeQrX
 M4lvEvcrtH+h9BTzIp2JvbVwM4qNpzBfWx5WojobWYBoSrsvdEruugNIIDXPB+GqRtD89q
 5wEDMGbdQVMoXH8v2TFl4+eD8HWc1j4jXUvYAim//iq9ahsIcHjgGunoSNKGrPQpOSScUb
 7aZJYnKLhOYnWBhmB+B3MJDlJyDt+AoV+iTaxZkHU+j4L2MlqNdcIUoEo6rUsb1ksxEmZs
 RQEqFv8q4ScsxaeKsUka7kufegZf/MkW8J7VolK8cIjVVv0MVYcBSI9NOQ8GPw==
From: Theodor Thornhill <theo@HIDDEN>
To: Eli Zaretskii <eliz@HIDDEN>
Subject: Re: bug#70036: 30.0.50; Move file-truename to the C level
In-Reply-To: <86ttkqho52.fsf@HIDDEN>
References: <87le63xzjt.fsf@HIDDEN> <861q7vihnm.fsf@HIDDEN>
 <87frwbxrs6.fsf@HIDDEN> <86ttkqho52.fsf@HIDDEN>
Date: Thu, 28 Mar 2024 08:03:25 +0100
Message-ID: <87cyreyh1e.fsf@HIDDEN>
MIME-Version: 1.0
Content-Type: text/plain
X-Migadu-Flow: FLOW_OUT
X-Spam-Score: 0.0 (/)
X-Debbugs-Envelope-To: 70036
Cc: 70036 <at> debbugs.gnu.org
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -1.0 (-)

Eli Zaretskii <eliz@HIDDEN> writes:

>> From: Theodor Thornhill <theo@HIDDEN>
>> Cc: 70036 <at> debbugs.gnu.org
>> Date: Wed, 27 Mar 2024 22:56:41 +0100
>> 
>> Eli Zaretskii <eliz@HIDDEN> writes:
>> 
>> >> As for the patch - it now relies on wordexp to resolve the paths, and I
>> >> believe there is no real feature parity with the old variant as for now,
>> >> but I haven't seen any issues thus far. If this approach is accepted I
>> >> will of course make sure we have feature parity, unless that isn't
>> >> wanted.
>> >
>> > We cannot rely on wordexp and we cannot rely on realpath: both are not
>> > portable enough.
>> 
>> OK - for my education on the portability argument. Is that because of
>> Emacs support targets like haiku and old versions of windows, or
>> something else inherent in these functions?
>
> Platforms other than GNU/Linux are the main concern, yes.  Another
> aspect to consider is whether the function is available in Gnulib --
> if it is, we can import the Gnulib implementation and use it on
> platforms which don't provide it natively; in that case, using such a
> function is okay (but the MS-Windows port will likely need to provide
> its own implementation, because Emacs uses Unicode APIs to access and
> process file names, something Gnulib doesn't do on Windows).
>
> In this case, realpath is available in Gnulib, but wordexp isn't,
> AFAICT.  And I'm not even sure we want to use wordexp here, because
> (reading its docs) it does stuff we don't want to do in file-truename.
> Why did you need to call it here?
>

Thanks! I'll admit Fexpand-file-name likely does what we want in this
case, so I'll look into this.

>> Another much simpler way to improve Eglot performance her could be to
>> allow for the relevant functions to execute through handlers, to not
>> break other parts of Emacs. For example `find-buffer-visiting` could
>> allow to run through a simpler function that merely expands and looks up
>> the current file, considering that the LSP server likely reports on
>> files that are already existing, and likely most symlink shenanigans
>> aren't an issue here. Just thinking out loudly on this.
>
> AFAIR, find-buffer-visiting was significantly sped up recently (see
> bug#66117), so if you did your benchmarks with Emacs before commit
> b7a737ef49 on master, perhaps do it again with the latest master
> branch.

These reports are made using some commit from yesterday, so these
speedups should be included. `find-buffer-visiting` is used inside of
the `publishDiagnostics` handler, which sometimes receives file paths
for the whole project, so this really becomes a bottleneck for servers
that provide project wide diags.




Information forwarded to bug-gnu-emacs@HIDDEN:
bug#70036; Package emacs. Full text available.

Message received at 70036 <at> debbugs.gnu.org:


Received: (at 70036) by debbugs.gnu.org; 28 Mar 2024 06:22:13 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Thu Mar 28 02:22:13 2024
Received: from localhost ([127.0.0.1]:38844 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1rpj9R-0004Y3-BL
	for submit <at> debbugs.gnu.org; Thu, 28 Mar 2024 02:22:13 -0400
Received: from eggs.gnu.org ([2001:470:142:3::10]:36884)
 by debbugs.gnu.org with esmtp (Exim 4.84_2)
 (envelope-from <eliz@HIDDEN>) id 1rpj9P-0004XK-Da
 for 70036 <at> debbugs.gnu.org; Thu, 28 Mar 2024 02:22:12 -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 <eliz@HIDDEN>)
 id 1rpj9I-000152-HX; Thu, 28 Mar 2024 02:22:04 -0400
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=gnu.org;
 s=fencepost-gnu-org; h=References:Subject:In-Reply-To:To:From:Date:
 mime-version; bh=UhZXiJZWBlG+OvvBG2MmwQUR3+cI2M9HbdyQdZO2sAY=; b=A8xGDVixr/f7
 pve1gXRDX0MJ0Jv2sd50W+R6Mf7ec5i9bBQVDtXSQxo0z6QIhZ5F6BSbsN7TnXPaY+TDHG8qG+mcb
 62Ls+RzJvhjpug1FWhTkNpwpLUNStuWjkGR63ug0YtdSF9Nlhj9J6QIhgt2gOn/FtSXUlqzgL8r73
 4s0o6Nrt1RZhDonlLWHk3DKEENR0BtCGofsO2dtd2W3lell9Hi7oNFrqTZtibHvSZYTjmKMp8cTov
 CzYgQJurbF1v0rq9nylo9FXiI0eiY9Ri5lKhscFKhVeXUyCaW/qKyzAiiZa7uLK0JNJ6P58Oln89J
 OI1w0L5P4G3/rU9hvfjROA==;
Date: Thu, 28 Mar 2024 08:22:01 +0200
Message-Id: <86ttkqho52.fsf@HIDDEN>
From: Eli Zaretskii <eliz@HIDDEN>
To: Theodor Thornhill <theo@HIDDEN>
In-Reply-To: <87frwbxrs6.fsf@HIDDEN> (message from Theodor Thornhill on
 Wed, 27 Mar 2024 22:56:41 +0100)
Subject: Re: bug#70036: 30.0.50; Move file-truename to the C level
References: <87le63xzjt.fsf@HIDDEN> <861q7vihnm.fsf@HIDDEN>
 <87frwbxrs6.fsf@HIDDEN>
X-Spam-Score: -2.3 (--)
X-Debbugs-Envelope-To: 70036
Cc: 70036 <at> debbugs.gnu.org
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -3.3 (---)

> From: Theodor Thornhill <theo@HIDDEN>
> Cc: 70036 <at> debbugs.gnu.org
> Date: Wed, 27 Mar 2024 22:56:41 +0100
> 
> Eli Zaretskii <eliz@HIDDEN> writes:
> 
> >> As for the patch - it now relies on wordexp to resolve the paths, and I
> >> believe there is no real feature parity with the old variant as for now,
> >> but I haven't seen any issues thus far. If this approach is accepted I
> >> will of course make sure we have feature parity, unless that isn't
> >> wanted.
> >
> > We cannot rely on wordexp and we cannot rely on realpath: both are not
> > portable enough.
> 
> OK - for my education on the portability argument. Is that because of
> Emacs support targets like haiku and old versions of windows, or
> something else inherent in these functions?

Platforms other than GNU/Linux are the main concern, yes.  Another
aspect to consider is whether the function is available in Gnulib --
if it is, we can import the Gnulib implementation and use it on
platforms which don't provide it natively; in that case, using such a
function is okay (but the MS-Windows port will likely need to provide
its own implementation, because Emacs uses Unicode APIs to access and
process file names, something Gnulib doesn't do on Windows).

In this case, realpath is available in Gnulib, but wordexp isn't,
AFAICT.  And I'm not even sure we want to use wordexp here, because
(reading its docs) it does stuff we don't want to do in file-truename.
Why did you need to call it here?

> Another much simpler way to improve Eglot performance her could be to
> allow for the relevant functions to execute through handlers, to not
> break other parts of Emacs. For example `find-buffer-visiting` could
> allow to run through a simpler function that merely expands and looks up
> the current file, considering that the LSP server likely reports on
> files that are already existing, and likely most symlink shenanigans
> aren't an issue here. Just thinking out loudly on this.

AFAIR, find-buffer-visiting was significantly sped up recently (see
bug#66117), so if you did your benchmarks with Emacs before commit
b7a737ef49 on master, perhaps do it again with the latest master
branch.




Information forwarded to bug-gnu-emacs@HIDDEN:
bug#70036; Package emacs. Full text available.

Message received at 70036 <at> debbugs.gnu.org:


Received: (at 70036) by debbugs.gnu.org; 28 Mar 2024 06:03:29 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Thu Mar 28 02:03:29 2024
Received: from localhost ([127.0.0.1]:38795 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1rpirI-00035C-2b
	for submit <at> debbugs.gnu.org; Thu, 28 Mar 2024 02:03:29 -0400
Received: from eggs.gnu.org ([2001:470:142:3::10]:52610)
 by debbugs.gnu.org with esmtp (Exim 4.84_2)
 (envelope-from <eliz@HIDDEN>) id 1rpirF-00034g-GQ
 for 70036 <at> debbugs.gnu.org; Thu, 28 Mar 2024 02:03:26 -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 <eliz@HIDDEN>)
 id 1rpir9-0006BW-IQ; Thu, 28 Mar 2024 02:03:19 -0400
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=gnu.org;
 s=fencepost-gnu-org; h=References:Subject:In-Reply-To:To:From:Date:
 mime-version; bh=uGuIhyyC/pUs/UfYIe/ekutSEFajoYLD/C9qnVhzuVU=; b=sNyvBqGSLqCI
 yTetdOORc4wXbrll2yzd1+bJBfquSduLEfWWQK0OPvfu9UjjshJoEngVP0658vbajicvszIgxau60
 cKGYGl4qbN4KMHtjPp1m9EaMyEXXWNOkX/qkIBoOS81PXq9VORIixzfpfI03YDA8vid/rgpSdxDFC
 KRGos8la56G//G6gKL6Naddbk89xTn9PminMfcLm0wL5n7QgCQLsvpCEYH6K0ja30Fgzf9Ge5Utg/
 q9+fcZ9Q533Jdcb11h5PqGcCvy+Sh4Fh/o37G49H3OstoBxF8hf8vZBMHjuHn10gaPnxY18tP4uEC
 bgq/MPEmrom6yjlumc1ebQ==;
Date: Thu, 28 Mar 2024 08:03:17 +0200
Message-Id: <86wmpmhp0a.fsf@HIDDEN>
From: Eli Zaretskii <eliz@HIDDEN>
To: Theodor Thornhill <theo@HIDDEN>
In-Reply-To: <87il17xsea.fsf@HIDDEN> (bug-gnu-emacs@HIDDEN)
Subject: Re: bug#70036: 30.0.50; Move file-truename to the C level
References: <87le63xzjt.fsf@HIDDEN> <87ttkrqvru.fsf@HIDDEN>
 <87il17xsea.fsf@HIDDEN>
X-Spam-Score: -2.3 (--)
X-Debbugs-Envelope-To: 70036
Cc: 70036 <at> debbugs.gnu.org, felician.nemeth@HIDDEN
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -3.3 (---)

> Cc: 70036 <at> debbugs.gnu.org
> Date: Wed, 27 Mar 2024 22:43:25 +0100
> From:  Theodor Thornhill via "Bug reports for GNU Emacs,
>  the Swiss army knife of text editors" <bug-gnu-emacs@HIDDEN>
> 
> Felician Nemeth <felician.nemeth@HIDDEN> writes:
> 
> >> I've been studying Eglots performance and have been noticing a couple
> >> of things that I find very interesting. It seems like `file-truename`
> >> is in the hot path
> >
> > I think Eglot repeatedly calls file-truename with the same argument (or
> > with an argument from a small set of filenames.)
> 
> This is true, to some extent.

Can someone explain why Eglot needs to call file-truename in the first
place?




Information forwarded to bug-gnu-emacs@HIDDEN:
bug#70036; Package emacs. Full text available.

Message received at 70036 <at> debbugs.gnu.org:


Received: (at 70036) by debbugs.gnu.org; 28 Mar 2024 03:05:44 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Wed Mar 27 23:05:44 2024
Received: from localhost ([127.0.0.1]:38643 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1rpg5H-0005LW-NI
	for submit <at> debbugs.gnu.org; Wed, 27 Mar 2024 23:05:44 -0400
Received: from sonic304-20.consmr.mail.ne1.yahoo.com ([66.163.191.146]:33429)
 by debbugs.gnu.org with esmtp (Exim 4.84_2)
 (envelope-from <luangruo@HIDDEN>) id 1rpg5E-0005L6-6t
 for 70036 <at> debbugs.gnu.org; Wed, 27 Mar 2024 23:05:42 -0400
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yahoo.com; s=s2048;
 t=1711595134; bh=rI9gYyBr04PbCYXFCkcyra1mYXu508Zg0qGaTmGL+OE=;
 h=From:To:Cc:Subject:In-Reply-To:References:Date:From:Subject:Reply-To;
 b=kIihFtrJoyN9BBbhX4ObeQdMo0WGDDhDWGPXe932t79TuMi8f5eazMlaujM+ufDfzZGuwzanqsp6wllihl/OEPQRMr206QjvYmmGxfFpkxjben9TpZFvS61TT4+yyYnf7hPbSW552R8jST7K2X3MxW2P+TQH/khwPX2evpZRreg0IFEFwT8DnNKDxOY7Ru5l8VwWDFO4tx3eixH9qqDDlXlVH4jaaNSNDfog+JdXbB/pcO1ArKokf4z1ifAN9YmHvXPWLkvPYV8LGv+lLyfph15KnOyitP2a0o8I+kpeEWrOQ4cbV4hJJcdI3c3lHZdLZiZQrJrCWz6PeV0SrriEVg==
X-SONIC-DKIM-SIGN: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yahoo.com; s=s2048;
 t=1711595134; bh=dH24HNJAch7CF2iCLQxykF0nocyAZG0NsrfbYBdK5oV=;
 h=X-Sonic-MF:From:To:Subject:Date:From:Subject;
 b=NeAnV/xB2Gg8ZZlrv9//OQSuZ0ccmUJKebc2AXuHpUcJTz/GQ9N/rgJzd7n+ckbfEO8GqilNsuymyYxtaEGS0q08earKOpzZrFq76YeYs5iZd5Tnp+Hgb3vb45AJ4j6OhfUXpH0iaJApRe7OrXwO0Vn6fuG+VqY7BVitmH5wnmw2XFzZpIXuUZYmK5iEday6edYtefqxT/RMRIA8/uFOXhycBBvh68+xA7bXOpNAIWjf1CAleJbZC57eIr9g+RUhq17eB0oXJo3DwIvNIThS9F0m5waD5CijRCi/4/GA19Z0FMnHHzScmrcCRMcP34b6B5wXsPRjAoomAkPHh0Bolg==
X-YMail-OSG: N5QuSpgVM1kxkuIiCZGFWbuE_wqdpcbVgbfGLW9WJzJDoAcuVyMUsKQD0gr1Yyg
 DEQ25FU9F0jG4S_QWWzPDZ4t1AdR0c78AKZ19buD_dvvWZnjo4I3GXuARerIc1bgAUwojrlRNBOf
 Vc.muU4aVtNUzZxRXzQlukDdydVr_nXPxGpG5Nfy5vtqrC3rhhQadyQC9ugtXlhwYQCBk_HfkEpa
 YwBlezpnorjPCSNAjAkF9AimUI9xhLk72fOL9QRhmnh0FXIAv8gB31XXVkSlTZQJk88Z1usd4Mym
 wlowQc2NlJ0D6fcyD7xEH9TqzDQ_0Jlzqos46vYUhCcwqEcvYAzmzYhYPNNJeef9EUoOJqvOxbEz
 msdjzOoF38dIcwXTLamEYwpGoWriRhOisX3WnFSyWDcCEDxfGrF68c4oUVwzby7owa5dGtKEMT7w
 BqmCQD5h3fCgY9OTBcJZQhaM6Eod3dgs2L34K2AdnzMF_ii1VTE0jKwPXajt0DDaM2LvujaCD2OY
 ROAJ8B_6YSYDYOlGBmuTmgV4wAN.94pigW12A2RpTKUrvu3_ollte32SILMSVryRTTFISm.nA8fp
 td2BX6KVee4yUahriNzD_EHd0noqEoUngYfCL6BLpy5h5Pk28xBcCb1DmryM5Zo2begbgVFt0YXa
 kniP_rUEQI7jRuUo95IBWxHkvTfiZ_3jfevl44N97DibSWVDW_ht3tgIyQRDulJ3h3xVFgire58X
 SZC2GtrBorF6DJJ5SzFQK06q2YLXBz4m.omcmuE1YuyN.cIw83Ztf1szetl.KQ72xkzMVtBYrEPb
 CZJyrsMqVtHh_RwkNagqWRMka2x8fnZLFkPmCr9J0dK289tqpfSACgCVrm2EYyn8NEAKL1sdOwOk
 Ev.E273ZVPOFiO17iegZy1LewDH9kkYSgOgUGPZ2xG_23sQCA9lez7pP7nchmBzrUq8N0lw.ot5B
 vRW.wtMf1EmPokQXX5gWOuNcREuYYgVeWpGRvS4O1g2UXeKFtA55AH_raAtZwVzATf.AGfQrXRP8
 5NKUKzfavA0EFWn6A4LeojxV4gGHiKmE_KWAp5uh6mC9cBLAcsCXtVtj_w5NudSKCjeCeNxsMOEM
 Yr3pR3w2HHyxXEdqY9xG92dU5OYGCHfvDeylFKtO8DLiNV6KstS9S_C9ZtWFjcWrqpxvAmw1eCAd
 gtHMNknPf9EAADwXMu1dZw8sFF_1FI5NPV6VFJbCKuwoeuocue8BkRxCek_AIb9t1cOc6mxKUj2T
 D5gbWkZujjj8A9rDkpYfKh4XeEL.SSjvoeB5j02gzX9ZmR6bKQHapnODtegGrGaE.RjMirnd2XZf
 mhzZ0OBC6s94U76t0fn8kC22uEX7doO370oO9arUqQ6kE4ofvbmpvugL8Kw4eYfoUQdTfpr0M.ZX
 o9ee44LK6a3IHpSBRQKehTU6Rp3z8cM.6j4GELlQv856jQ1AypJLH98dhUNT4eRmdkh.LD3CUC1X
 YQS_TWQx9ZXxHre0u9qGtc9bnFuhIu5Lfnw7sgyyAPFl1QfiA3uFUE4gXQ8EA6kPIYq1qBA36qz9
 _O_jnivftEnTRv9pJ6WRR8CF2ZYDc28jwyT4HVdjGOpTM0SMZeA_bNAntQV9Sm_3WkcT4UWr8MAS
 I8JOtzudMnDJrAFnmSSCTvWW1yPUYvg16exr5x8Ii2Ux6upDwyLv_yKaciK4KPuLJlUwGJZNCGkH
 ImoyqB7jNSuZnVG9S2IRV_PENdDrNVw4aPWIIYLSN9eJ0.37Meo1zj590ozvH83gNCVT8QOh2uV7
 piB0qAX.ML2qdOD2N5VnNhSz1Q1MXrLnMi45biIEh1Qa9h8cMKC7EkJUwJ9L_uTAALxS_7JvBFkR
 VB6BEmrLjlf5v9CpCLY0fO2qFrTpjUWJCCPF0jg4I.L5n0i9K8Ifhsg8aInc7hw.5YRxzqRatyGs
 QbSlQGkwubWVZt4ty0m9DcnstrrviHbIDvn8CxKqc1.Q_dQ.mf.W5pLXEPWHKoqN9dwT.m5N0V_r
 LpAX29243GpMJSn3dzFyvoRQ43g1YTqm4ITjC_VtXw8Sp2OW_9eW6YmtaHGI9SnDqbOXNwi1Q14K
 tukU5HSwdVBmR9AB4SpgiV9ivze2uSxaww1m4mL2Vkc1nGIRFvys5KOcW2hmn.W8rKhbR9fM1i6O
 zB_GrwHkzvzgW85HKvUYGNnBnv9Dtp4qKGc.Fm57.gvGzi0E8YB8cVHrNJKoet_fUANhuR6mUnSO
 nhgWTd3.F2.tH.M06aKT5_gyK5zkTOPt0DxiO6LQn5uKzSv08nXzsEy3yj5MWo_Q-
X-Sonic-MF: <luangruo@HIDDEN>
X-Sonic-ID: 9bba92af-7873-4922-be94-0066d3b981f8
Received: from sonic.gate.mail.ne1.yahoo.com by
 sonic304.consmr.mail.ne1.yahoo.com with HTTP; Thu, 28 Mar 2024 03:05:34 +0000
Received: by hermes--production-sg3-6dc75bc8fb-6dxcw (Yahoo Inc. Hermes SMTP
 Server) with ESMTPA ID 308f0bd10d46464ea9d5455e48927266; 
 Thu, 28 Mar 2024 03:05:30 +0000 (UTC)
From: Po Lu <luangruo@HIDDEN>
To: Theodor Thornhill <theo@HIDDEN>
Subject: Re: bug#70036: 30.0.50; Move file-truename to the C level
In-Reply-To: <87zfuj40pz.fsf@HIDDEN> (Po Lu's message of "Thu, 28 Mar 2024
 09:14:00 +0800")
References: <87le63xzjt.fsf@HIDDEN> <861q7vihnm.fsf@HIDDEN>
 <87frwbxrs6.fsf@HIDDEN> <87zfuj40pz.fsf@HIDDEN>
User-Agent: Gnus/5.13 (Gnus v5.13)
Date: Thu, 28 Mar 2024 11:05:05 +0800
Message-ID: <87ttkr3vku.fsf@HIDDEN>
MIME-Version: 1.0
Content-Type: text/plain
X-Mailer: WebService/1.1.22205
 mail.backend.jedi.jws.acl:role.jedi.acl.token.atz.jws.hermes.yahoo
Content-Length: 1028
X-Spam-Score: 0.0 (/)
X-Debbugs-Envelope-To: 70036
Cc: Eli Zaretskii <eliz@HIDDEN>, 70036 <at> debbugs.gnu.org
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -1.0 (-)

Po Lu <luangruo@HIDDEN> writes:

> Haiku supports realpath, but not wordexp.  We must reimplement virtually
> all POSIX functions of this nature on Windows, as the versions provided
> by system C libraries, if they exist at all, are inadequate for some
> reason or another.  Furthermore, these functions are absent from a
> number of other operating systems, such as OpenBSD and Android 14.0, and
> on others (Alpine, I believe) wordexp is severely inefficient for being
> implemented as a wrapper around /bin/sh.

BTW, after reading the subject of this bug report, I don't believe there
is a place for wordexp at all.  wordexp is no replacement for
Fexpand_file_name, but rather a means of expanding input in the manner
of a shell, which input might include arithmetic expressions, shell
command substitutions, and other expressions valid as shell input.  If
Fexpand_file_name alone will not suffice, TRT is to replicate the
mechanics of file-truename in whole, not cutting corners with these
admittedly tempting functions.




Information forwarded to bug-gnu-emacs@HIDDEN:
bug#70036; Package emacs. Full text available.

Message received at 70036 <at> debbugs.gnu.org:


Received: (at 70036) by debbugs.gnu.org; 28 Mar 2024 01:14:46 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Wed Mar 27 21:14:45 2024
Received: from localhost ([127.0.0.1]:38596 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1rpeLs-0003lJ-ES
	for submit <at> debbugs.gnu.org; Wed, 27 Mar 2024 21:14:45 -0400
Received: from sonic316-21.consmr.mail.ne1.yahoo.com ([66.163.187.147]:32922)
 by debbugs.gnu.org with esmtp (Exim 4.84_2)
 (envelope-from <luangruo@HIDDEN>) id 1rpeLm-0003kL-8g
 for 70036 <at> debbugs.gnu.org; Wed, 27 Mar 2024 21:14:42 -0400
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yahoo.com; s=s2048;
 t=1711588472; bh=z/CY5bCwxbTjNm/iSViwcKxJlNb8iGeon4u8sBERP8M=;
 h=From:To:Cc:Subject:In-Reply-To:References:Date:From:Subject:Reply-To;
 b=OaOlUfhY1XIK4y9V+D2RuNPLmVW7IiOVaYdLWsWsphrs/6/MiAa/LbtY6vty9ta8VzNU0q1E8xAWEINJfnfp48g3keoCx3DV/XPBU//phu9o/QA1UrFbPweGm44iRKty6jVxjGWaQeUuXcXMZ9cL05TJi8hoj3uGQy7XaFmF1qxDAlxfXw8hG3TlpWzXVcjmApYvg+bJKPzU4s6qPmQV1saJB3rxhtqi5ZrkKk7dXUxkrk2vPvmMIXa7KovVM4xyrk5S98dGXRxcr2uDwChUpLYYTiiskE/9J0uYvLRtcMVE/35bPAiXzoFDIzC6ypUxsGJC4iglXMif1Z+3kaGppw==
X-SONIC-DKIM-SIGN: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yahoo.com; s=s2048;
 t=1711588472; bh=vyfatMqo+XoKvOAp2OmYnURD+TiT7393nFFO17t6jcy=;
 h=X-Sonic-MF:From:To:Subject:Date:From:Subject;
 b=LehGx/t5IFbdrH4lWxQ7fDqrBumxgdRjRYl67m9qm90pxpdwrGh6d8/x9ANWWE8E/Iz91u19tVbKXQ96oXmiALdSs5r7WpaluRjtMxSnTQ0l1VYBg+AZFxEJ7tERwhb19tZaFrCeLRX4pmtSs/cRgoFQEI9p20V9XkjGqTBI1UO9BC+FHmz/XRsy4E+dvYHYP8EGaiukDgzq7RWy/g50p72VWSY2jBL1mUznfs/gZt9umLMqd5MgFnWBcEhIMflJ38hGdvPOu5vHrrZ/MWkjzomNBa21ANzFQ4JkOSe01G3Cnyf2gUcvKubIZTnwzKCAooPSqhmGUH6cU8zCxfGtDA==
X-YMail-OSG: CBVzzgAVM1kGs0NR7F9RT0Mk1dmNR_X3p4uEDO5DjNDJwIyLwwaVn.newBRKdqu
 fH2mdx0wvdR1CMgeWw9svd0bc.HAE1CRTKLSpp4NNUzekSYXy0Zd.Ag2UKma33iLVYqWruApPDQi
 XvxTzDITZMBjs2JRU84r.Aer3uXVPxpZW2Dk0ECoFjLCeC4sa_UgJaKzlvlXzZAlw8IINve82Vdc
 XxULrmzTX5lTuHc662burTp_bCCNI9ii2SOUcs1wqlrsyIiGZfycu3OGSLaMzZxxCUEodgvYa3Sp
 vHnsYEFFaZFCgzIvbuQjdrMaDwXuS5ma3waBym.scnHavYmC7LIdhdW.zSlM9keLUhkcS5Z28IFI
 Z.JGT8jDRqw.kuQCDpdRpxMjSAe1Fuuol9VIFO9NO9TPRXwVKuu63rjr77AJK8D2YF_IsZdW9Y_l
 yuC5Vqrr0CrEPjFkBulrBrgdfW5rU7X1fi0c1V4zFrIgRZn4osCo06ZTNStgY2IFRbN_bTxxggf8
 V92CpHtgiLr.KJRI6TSkqqJ4wlwFvSiQKEQKWRDNDqPWjRyBaXu9lINQC8LK1eDmY9KhVjul7Qth
 KNwF506JB7lUUjfKuId7l0kguJkN.wwGasPYXUBI4WPx4Xs2uCUkKA.ZWRyn69.4a6SA2cBUC1CT
 xwfPMBXJ1tRsW8Y0Xie7Ct8EYLaFYEaY8E98PDe3HRH3c9ekutLU8wPh3dm2cSjtFf1wM_ZzaUo_
 i3_emqb4nWRUBkEhrL0HjEOoXymzqrp4QcL0vPrQXYlHc8BN7YIMS6poDX0TdIrtiy51oK.T0CUf
 3gfAU.gUI4_5j4lB404rLPUcqHYni.1x.nRYcaHm_dK_E23iPMbyzmGQR7pwUOi.Y7cPFjWpmtGz
 pXRp7a8xzq8n0KKPcUDZTZ_8N6ZjMJJIs4rDX1eqCR5UQJ.C9C_umLS3s_yK827hvVkVzo8dVz.F
 hyQeH62TqoOvxRoZyuyQRdavAmf4XMZTNLqRXZgdBHDzMtGdsp3t4SmuGlLD3wEKDi_vwHOpHBfi
 sE8HQ8zcKwdyMiGuRaZ1DX6f.19Pst2KVsn5nJgkVKMPqkZDp028E0bFJithPaco0vFHHzY7B6mE
 meOEhZKiAog2m5xv2.eof4sFHjnvIy2EWQniUSOJUhzfL.t.M_2nEDxCZUWDaC..0XbMmbEre0sa
 t8EUyxhJloyzgQZcg6dRJ_UvDfYE6OvvjJEWGLmiOt1U2GQzEZqjRfiPARG017LkEXPg4j78qq_Q
 G4aRdpx.r1DNVkc.fVXsUkMtm_zwHJkZLDCeDFeEKP7hLN0pEXqClxBVE72mfMVU8t9gb1iRUrfd
 xuuy5oMuXjqPqOjj2pocOW1MpQPHlOvMpcwSVScNt6_HgXtPvVnCYicPW1aWz4VllTzsARBF70QE
 CSLVL6O3T3fJF_wYr22lo4ppuys1NVCObF7N0NqoxlJpD6OU_fO6zAH7MS6_89GWUr5L1kiCusHw
 _ea8yvLTMLKKUIZn06vb7huvX0_ZHmXJvc8ce0plMwf5hrPJ5eF4SoPpJbnKqPCO8X7BeHw8qfxG
 QmytEW.VS.BdrpbONlk_BJk7vpSp7Zzv6jGRfSGwzGoixgIVr3.W6jJYGNrs13yZZunwnQstzdVb
 6ID50Q2puZ8eDCeUvx9.DhSroIt7fDa7_.XMr2f2FPgX15zBFKpeztxoJ1fHb26hgJKMQp1kpzBj
 foj0kDQbjP6HDgIKnnSyhC.DtrhCHSipe_3nNVbItN50wCoY.b85FU8e03UCNhdGEQFTfrwUG63g
 h03bR1Irgl7._gq8aKFeFoOgP_Xqt2S.zj3teee_ST6TwS6rsKwRdt8O7R_mOqwbXu0atSidX_9u
 vNNBH3PuFrSDbkWjLl16zNbYXNyReTAH8AcoF1Y3_0RaGuWsVYUrsgTcuuPBfRvDJENrY8.S6yZJ
 Ju2gPzSGJRmeeDOqoEgraTbbLXoaCnLigNYLNyFdCQA6PgonmGInLxkgs0182vPRokBljjGcIttW
 zcEzmvQ6PHc9PmkfEscMqMUYv1caKzABb4exdH0yU2L1JCEMPhwBbWPPXtB23CJT.01a5viwHAfB
 dBt6ViyA2pwbk.DIvvcsl0VNQDcNtOdLdmwYA0UyTBVrQcP1l8UbonCc4OXCTxGHp5jdx_ddMXxk
 Tn_WhMZmqDKVXXO0T4E30Pv.WdGbVyNNdNnq5hLUP.H1nb23y6wCzeLV2TIhOEFqTcqvEw3qSjLY
 gPId2YOtgUvJfGs1OZygbnSnTtGUb9kke3DwRC0LHlgE_Usxd358O5GndlZ_E3zw-
X-Sonic-MF: <luangruo@HIDDEN>
X-Sonic-ID: 6790214f-feee-45c7-921b-dfb3e912a7f5
Received: from sonic.gate.mail.ne1.yahoo.com by
 sonic316.consmr.mail.ne1.yahoo.com with HTTP; Thu, 28 Mar 2024 01:14:32 +0000
Received: by hermes--production-sg3-6dc75bc8fb-pl74c (Yahoo Inc. Hermes SMTP
 Server) with ESMTPA ID 089139d690e4c49945154efcaf8257a1; 
 Thu, 28 Mar 2024 01:14:26 +0000 (UTC)
From: Po Lu <luangruo@HIDDEN>
To: Theodor Thornhill <theo@HIDDEN>
Subject: Re: bug#70036: 30.0.50; Move file-truename to the C level
In-Reply-To: <87frwbxrs6.fsf@HIDDEN> (Theodor Thornhill's message of
 "Wed, 27 Mar 2024 22:56:41 +0100")
References: <87le63xzjt.fsf@HIDDEN> <861q7vihnm.fsf@HIDDEN>
 <87frwbxrs6.fsf@HIDDEN>
Date: Thu, 28 Mar 2024 09:14:00 +0800
Message-ID: <87zfuj40pz.fsf@HIDDEN>
User-Agent: Gnus/5.13 (Gnus v5.13)
MIME-Version: 1.0
Content-Type: text/plain
X-Mailer: WebService/1.1.22205
 mail.backend.jedi.jws.acl:role.jedi.acl.token.atz.jws.hermes.yahoo
Content-Length: 700
X-Spam-Score: 0.0 (/)
X-Debbugs-Envelope-To: 70036
Cc: Eli Zaretskii <eliz@HIDDEN>, 70036 <at> debbugs.gnu.org
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -1.0 (-)

Theodor Thornhill <theo@HIDDEN> writes:

> OK - for my education on the portability argument. Is that because of
> Emacs support targets like haiku and old versions of windows, or
> something else inherent in these functions?

Haiku supports realpath, but not wordexp.  We must reimplement virtually
all POSIX functions of this nature on Windows, as the versions provided
by system C libraries, if they exist at all, are inadequate for some
reason or another.  Furthermore, these functions are absent from a
number of other operating systems, such as OpenBSD and Android 14.0, and
on others (Alpine, I believe) wordexp is severely inefficient for being
implemented as a wrapper around /bin/sh.




Information forwarded to bug-gnu-emacs@HIDDEN:
bug#70036; Package emacs. Full text available.

Message received at 70036 <at> debbugs.gnu.org:


Received: (at 70036) by debbugs.gnu.org; 27 Mar 2024 21:56:55 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Wed Mar 27 17:56:55 2024
Received: from localhost ([127.0.0.1]:38473 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1rpbGQ-0000E5-TB
	for submit <at> debbugs.gnu.org; Wed, 27 Mar 2024 17:56:55 -0400
Received: from out-186.mta0.migadu.com ([2001:41d0:1004:224b::ba]:30095)
 by debbugs.gnu.org with esmtp (Exim 4.84_2)
 (envelope-from <theo@HIDDEN>) id 1rpbGM-0000Dq-EV
 for 70036 <at> debbugs.gnu.org; Wed, 27 Mar 2024 17:56:53 -0400
X-Report-Abuse: Please report any abuse attempt to abuse@HIDDEN and
 include these headers.
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=thornhill.no;
 s=key1; t=1711576603;
 h=from:from:reply-to:subject:subject:date:date:message-id:message-id:
 to:to:cc:cc:mime-version:mime-version:content-type:content-type:
 in-reply-to:in-reply-to:references:references;
 bh=DmY8VxKtKGZycLFpBXkz2Lyt0CbxZrzKHlNH1rr9XwM=;
 b=ulHb5tHwxMXBKk8hYQ1XHYLLSAr2+VGz0GOP9lVCqLSuFHkA1eLxYYqNf5k4cKy5y46U+a
 h6MsbsmurX6fGgdBW6w21hpNtwfHdA7Z/EwxjA16ddvHCotoJ0Nxb/rwrlT3aBs/6i6bVd
 +Xxqw9WrZ1cx2000NecGli43U7MNO1gUC9B6aWZ8zIEd0A48RV9xnCHaqKrkaySyTANpp2
 0T5iCT8/Fttms8wJjwkKVwIhi4d7nH06IniokZ0qWyLkmSDCnVqZckch4QfFQhcD37o8zI
 9ZBTwpG27l0/ZqCuNIJhJU+5Q7EoQHGJljJVz2AKub9VfApFV16So5JWrD41pQ==
From: Theodor Thornhill <theo@HIDDEN>
To: Eli Zaretskii <eliz@HIDDEN>
Subject: Re: bug#70036: 30.0.50; Move file-truename to the C level
In-Reply-To: <861q7vihnm.fsf@HIDDEN>
References: <87le63xzjt.fsf@HIDDEN> <861q7vihnm.fsf@HIDDEN>
Date: Wed, 27 Mar 2024 22:56:41 +0100
Message-ID: <87frwbxrs6.fsf@HIDDEN>
MIME-Version: 1.0
Content-Type: text/plain
X-Migadu-Flow: FLOW_OUT
X-Spam-Score: 0.0 (/)
X-Debbugs-Envelope-To: 70036
Cc: 70036 <at> debbugs.gnu.org
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -1.0 (-)

Eli Zaretskii <eliz@HIDDEN> writes:

>> Date: Wed, 27 Mar 2024 20:08:54 +0100
>> From:  Theodor Thornhill via "Bug reports for GNU Emacs,
>>  the Swiss army knife of text editors" <bug-gnu-emacs@HIDDEN>
>> 
>> During the last couple of weeks I've been studying Eglots performance
>> and have been noticing a couple of things that I find very
>> interesting. It seems like `file-truename` is in the hot path due to the
>> fact that every request to the lsp server has to create the source file
>> location, and in every response we have to parse the location the
>> relevant file. `file-truename` is used for this, and its performance
>> isn't really up to snuff for what it provides, afaict.
>> 
>> Below I've supplied some benchmarks and profile reports along with the
>> actual patch. Before we discuss the patch itself, I want to get some
>> answers to the following:
>> 
>>  - Is there a reason that this function should be supplied at the lisp
>>    level?
>
> No, we could have it implemented in C.  It just never was needed,
> until now, and the processing there is not trivial, to say the least.

Yeah, the source is complicated, but it seems most of it is to gradually
chop the path shorter and shorter.


>
>>  - Does it have to be recursive?
>
> No, it doesn't.
>

I guess making it iterable is something worth checking out anyway, so
I'll look into that a little further.

>> Firstly, I'll show some benchmarks
>> 

[...]

>> 
>> As you can see, the C implementation, though naive for now is two orders
>> of magnitude faster, and makes a noticeable difference when running an
>> lsp server in emacs.
>
> Yes, but comparing a partial implementation is not very useful, since
> the complete one could be much more expensive.
>

No doubt. The most interesting part of that benchmark is maybe to see
that the current version is very slow, not that my function is very
fast. I'd guess that even if I'd lose an order of magnitude keeping
feature parity we're better off.

>> As for the patch - it now relies on wordexp to resolve the paths, and I
>> believe there is no real feature parity with the old variant as for now,
>> but I haven't seen any issues thus far. If this approach is accepted I
>> will of course make sure we have feature parity, unless that isn't
>> wanted.
>
> We cannot rely on wordexp and we cannot rely on realpath: both are not
> portable enough.
>

OK - for my education on the portability argument. Is that because of
Emacs support targets like haiku and old versions of windows, or
something else inherent in these functions?

>> +  CHECK_STRING (filename);
>> +  char *c_filename = SSDATA (filename);
>> +
>> +  wordexp_t we;
>> +  wordexp(c_filename, &we, 0);
>> +
>> +  char *truename = realpath(we.we_wordv[0], NULL);
>> +  wordfree(&we);
>> +
>> +  if (!truename)
>> +    return result;
>> +
>> +  result = build_string(truename);
>
> You cannot pass Lisp strings to libc functions like that: you need to
> do 2 things first:
>
>   . call expand-file-name
>   . encode the file name with ENCODE_FILE
>
> This is needed because relative file names in Emacs are relative to
> the current buffer's directory, not relative to the current directory
> of the Emacs process, and because file names with non-ASCII characters
> need to be encoded to match the encoding expected by file-related APIs
> in libc.  Likewise, when you get a file name from a libc function, you
> need to decode it with DECODE_FILE, before you create a Lisp string
> from it
>
>> +  free(truename);
>
> IMO, this should be xfree, not free.  And for that to work, we need to
> call realpath with 2nd argument non-NULL, but pointing to a buffer we
> allocated with xmalloc, or maybe a stack-based buffer.  (But since we
> cannot rely on realpath, this could be a moot point.)
>
> Thanks.

Thanks for the pointers here. I'll take note of them and investigate
further.


Another much simpler way to improve Eglot performance her could be to
allow for the relevant functions to execute through handlers, to not
break other parts of Emacs. For example `find-buffer-visiting` could
allow to run through a simpler function that merely expands and looks up
the current file, considering that the LSP server likely reports on
files that are already existing, and likely most symlink shenanigans
aren't an issue here. Just thinking out loudly on this.

Theo




Information forwarded to bug-gnu-emacs@HIDDEN:
bug#70036; Package emacs. Full text available.

Message received at 70036 <at> debbugs.gnu.org:


Received: (at 70036) by debbugs.gnu.org; 27 Mar 2024 21:43:39 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Wed Mar 27 17:43:39 2024
Received: from localhost ([127.0.0.1]:38459 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1rpb3b-0007Mf-6i
	for submit <at> debbugs.gnu.org; Wed, 27 Mar 2024 17:43:39 -0400
Received: from out-170.mta0.migadu.com ([2001:41d0:1004:224b::aa]:37413)
 by debbugs.gnu.org with esmtp (Exim 4.84_2)
 (envelope-from <theo@HIDDEN>) id 1rpb3X-0007M7-Vq
 for 70036 <at> debbugs.gnu.org; Wed, 27 Mar 2024 17:43:37 -0400
X-Report-Abuse: Please report any abuse attempt to abuse@HIDDEN and
 include these headers.
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=thornhill.no;
 s=key1; t=1711575809;
 h=from:from:reply-to:subject:subject:date:date:message-id:message-id:
 to:to:cc:cc:mime-version:mime-version:content-type:content-type:
 in-reply-to:in-reply-to:references:references;
 bh=zZVzUW60J7luxWcrfDfeCGv95/DR3QBLZVCWlNqGtRY=;
 b=JYFMtXtKbneFAm6nG0SZ9AvrhFzaFD7HO18wzU1fefrGVpytQWxfyInfuWGV0ecpzWOuH9
 vZOn7YlF6kX3QSGy2YfuQzURj287+UAY/+5sRI5z8+HueCELSUnTiP0p6UHMEo9/69LQUU
 5bZhSfGofYGmT/byelQQp4hsB1Ywp+QTkQ45F1SuAtmFzYxpnMKgLO0L7FDRhDYspsWpVy
 TDnjL0YKNSmckHFjR5Qqo136+w+mqeByTU0VvepriAzj/6MdmbtpvcDSVduW1r4GwegAt+
 Xo60PgDrCLpE/mMZ5F2hOzQKZgZVVXgfjl+OgiEn8fidfAsbn3+0cF3w3BL52A==
From: Theodor Thornhill <theo@HIDDEN>
To: Felician Nemeth <felician.nemeth@HIDDEN>
Subject: Re: bug#70036: 30.0.50; Move file-truename to the C level
In-Reply-To: <87ttkrqvru.fsf@HIDDEN>
References: <87le63xzjt.fsf@HIDDEN> <87ttkrqvru.fsf@HIDDEN>
Date: Wed, 27 Mar 2024 22:43:25 +0100
Message-ID: <87il17xsea.fsf@HIDDEN>
MIME-Version: 1.0
Content-Type: text/plain
X-Migadu-Flow: FLOW_OUT
X-Spam-Score: 0.0 (/)
X-Debbugs-Envelope-To: 70036
Cc: 70036 <at> debbugs.gnu.org
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -1.0 (-)

Felician Nemeth <felician.nemeth@HIDDEN> writes:

>> I've been studying Eglots performance and have been noticing a couple
>> of things that I find very interesting. It seems like `file-truename`
>> is in the hot path
>
> I think Eglot repeatedly calls file-truename with the same argument (or
> with an argument from a small set of filenames.)

This is true, to some extent. For the requests, eglot calls it
directly. For some handlers it is called through the function
`find-buffer-visiting`, so I'd say it's advisable to keep the function
itself fast.

>
> I wonder whether it would make sense for Eglot to cache the result of
> file-truename.  Do you think caching would make Eglot faster than it
> currently is?  (Would it still be worth moving file-truename to the C
> level?)

I think it would be faster, yes. This was my first thought as well, but
I quickly threw the first attempts on that away due to the fact that the
processing almost solely lies in that function, and I'd suppose it would
make other parts of emacs faster too. Adding complications to eglot
would likely make the source more complicated rather than better on the
whole. But that's only my opinion. I'd like to try to replicate the
function 1 to 1 in C.

What do you think?

Theo




Information forwarded to bug-gnu-emacs@HIDDEN:
bug#70036; Package emacs. Full text available.

Message received at 70036 <at> debbugs.gnu.org:


Received: (at 70036) by debbugs.gnu.org; 27 Mar 2024 20:12:32 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Wed Mar 27 16:12:32 2024
Received: from localhost ([127.0.0.1]:38417 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1rpZdP-0008CJ-Rj
	for submit <at> debbugs.gnu.org; Wed, 27 Mar 2024 16:12:32 -0400
Received: from mail-ej1-x62c.google.com ([2a00:1450:4864:20::62c]:44398)
 by debbugs.gnu.org with esmtp (Exim 4.84_2)
 (envelope-from <felician.nemeth@HIDDEN>) id 1rpZdN-0008BO-Ki
 for 70036 <at> debbugs.gnu.org; Wed, 27 Mar 2024 16:12:30 -0400
Received: by mail-ej1-x62c.google.com with SMTP id
 a640c23a62f3a-a44f2d894b7so24636966b.1
 for <70036 <at> debbugs.gnu.org>; Wed, 27 Mar 2024 13:12:29 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=gmail.com; s=20230601; t=1711570343; x=1712175143; darn=debbugs.gnu.org;
 h=mime-version:face:user-agent:message-id:in-reply-to:date:references
 :subject:cc:to:from:from:to:cc:subject:date:message-id:reply-to;
 bh=wQddov7wCjSXNAKfS9h6lF5gdYaHRkDSnD+VfB6BiAI=;
 b=fb35BOkDchcxumuMRjPXcbJ3kJpFSjRNABOpCRfMdtOXGKmvUHCWSw19uX2Sk3V78f
 HZOOkVft0nly/ulI5yb9FvIWTQl48tcIw9EXDjK+aD7R92jFRlc1/AYxOOkE8V5To/NX
 1OdT1dCvNK/ufC3KA7+XusXpukl9iC8Csl6dphVbPy50fQ/IHD7JK4q7jQMGxqm4xqpv
 CvN7jCqKh3y1PyfXX4poo8LIQaVA1bIXlLKsQy5m5jPyI+cEuBcU6+EVjxNmwhdD/yx2
 /His8Koq6/3EE/jffwr0GpRae/kjyHW56qsie2pJjCVlk09IlwSdC3H4yD/tXP6S4yke
 Tcvg==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=1e100.net; s=20230601; t=1711570343; x=1712175143;
 h=mime-version:face:user-agent:message-id:in-reply-to:date:references
 :subject:cc:to:from:x-gm-message-state:from:to:cc:subject:date
 :message-id:reply-to;
 bh=wQddov7wCjSXNAKfS9h6lF5gdYaHRkDSnD+VfB6BiAI=;
 b=quYhhRzgK7sxTdUWNbEI97jo7b8X/TOOvR4XpHn03kP5pOmyrEmcoqFM1VyP8rqUKZ
 kJhsesY8GvmJCTj38OmLtYSfP6ZrUf+FIoQfxGRTDDPTTYtrSJmGLK0X+AGkKUOVbzUE
 GvSaf/vrhnACzLP8RcSTFeOszCrczldudC/vAPOvL1E8HVH1CPxXKr37s4rVs0xdN1QT
 b2RsqL2PhyRWJJYAlB4kG3+bxQEY4/xQwjsE4Hwv+kMlLXOStQ9SyVWRn6WbWoRKJCpn
 RKtGs3+q/GfjKicJSvuc+aNjcaO9eXSrMI45oao3SoB124ZrxJJJ+Jj+MImAgytR7inC
 ovsQ==
X-Gm-Message-State: AOJu0YxEp5Uwe4O/m6ulT372r8bpk9moQ2AZb00Hjl/1ZszNf6/sBTRF
 Cytw88J1VgEsorMJte/7REVyz5m3sowir5slmii6Mnzr4EDTppWM3wBppLO1
X-Google-Smtp-Source: AGHT+IHoi1qAzH04UxdC2mE2aHfGGE2+AxLfsH9qbRXh6hgfvfgLhE2G3SJSFiRXdOPFCxxjVQmGaA==
X-Received: by 2002:a17:906:cf85:b0:a4d:edbd:a3fb with SMTP id
 um5-20020a170906cf8500b00a4dedbda3fbmr342997ejb.44.1711570342551; 
 Wed, 27 Mar 2024 13:12:22 -0700 (PDT)
Received: from betli.gmail.com (catv-213-222-160-137.catv.fixed.vodafone.hu.
 [213.222.160.137]) by smtp.gmail.com with ESMTPSA id
 x18-20020a170906b09200b00a47df55cf5esm4341798ejy.13.2024.03.27.13.12.21
 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);
 Wed, 27 Mar 2024 13:12:22 -0700 (PDT)
From: Felician Nemeth <felician.nemeth@HIDDEN>
To: Theodor Thornhill <theo@HIDDEN>
Subject: Re: bug#70036: 30.0.50; Move file-truename to the C level
References: <87le63xzjt.fsf@HIDDEN>
Date: Wed, 27 Mar 2024 21:12:21 +0100
In-Reply-To: <87le63xzjt.fsf@HIDDEN> (Theodor Thornhill via's message of
 "Wed, 27 Mar 2024 20:08:54 +0100")
Message-ID: <87ttkrqvru.fsf@HIDDEN>
User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/28.2 (gnu/linux)
Face: iVBORw0KGgoAAAANSUhEUgAAADAAAAAwAgMAAAAqbBEUAAAABGdBTUEAALGPC/xhBQAAACBj
 SFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAADFBMVEX5+fmhoaEwMDD/
 ///TMNVWAAAAAWJLR0QDEQxM8gAAAAlwSFlzAAAPEgAADxIBIZvyMwAAAAd0SU1FB+AICBUfHgLs
 gGoAAAGXSURBVCjPRdK/b5tAFAfw753gBEwM2ApMbuVIqf+Ko0qiyhOu4sj2xJBYMn/FUdX7UUUZ
 OjHgyvf+yj6IcW6Bjx53934ADEvs8bmEr8UVoTYTOyJO9KoYsVofN8kILdbeJ8Li6YpZWop4xOK0
 VdfIoXmkHn5/5D7/Ts/8THacSqnkKTcMTxgUkVzFnEIRTKwwYYSCvzfg16f0i8YApW/XG/Pm8R49
 dXjxKmRnxv3OwooQWcv4RUYem1fsNe/WU63uk7AmYxk78y32/ee2tZB4fO+WcZ7lnIGEolXW1EGw
 LfkSuQ0XTgRefgNlfNwRNV6QhBxJ8JNxTMUPyBqTd0bjaAP5G7NJRU39z80hLOZTjqB7K3tEEFSj
 aEsuQew6qBxxyhHjVUR7H7NpC9iHJZGLMCEuweqAqE1BHbfK2oRIz9EHYA/+wiFWru9smeVfuWNZ
 2+NFtX80UA1TvJNdytM4DwO4kY7bJz8Qcd0G0ceslZGkkeoBsjUHwF1+jjM3XHaXEZ7mGLfwPFO+
 RV9QLY2iEdmDo78D/gNPaXVYqd+pyQAAACV0RVh0ZGF0ZTpjcmVhdGUAMjAxNi0wOC0wOFQyMzoz
 MDoyOCswMjowMGy/yHYAAAAldEVYdGRhdGU6bW9kaWZ5ADIwMTYtMDgtMDhUMjM6MzA6MjgrMDI6
 MDAd4nDKAAAAAElFTkSuQmCC
MIME-Version: 1.0
Content-Type: text/plain
X-Spam-Score: 0.0 (/)
X-Debbugs-Envelope-To: 70036
Cc: 70036 <at> debbugs.gnu.org
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -1.0 (-)

> I've been studying Eglots performance and have been noticing a couple
> of things that I find very interesting. It seems like `file-truename`
> is in the hot path

I think Eglot repeatedly calls file-truename with the same argument (or
with an argument from a small set of filenames.)

I wonder whether it would make sense for Eglot to cache the result of
file-truename.  Do you think caching would make Eglot faster than it
currently is?  (Would it still be worth moving file-truename to the C
level?)




Information forwarded to bug-gnu-emacs@HIDDEN:
bug#70036; Package emacs. Full text available.

Message received at 70036 <at> debbugs.gnu.org:


Received: (at 70036) by debbugs.gnu.org; 27 Mar 2024 19:45:02 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Wed Mar 27 15:45:01 2024
Received: from localhost ([127.0.0.1]:38406 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1rpZCm-0006NS-Is
	for submit <at> debbugs.gnu.org; Wed, 27 Mar 2024 15:45:01 -0400
Received: from eggs.gnu.org ([2001:470:142:3::10]:55284)
 by debbugs.gnu.org with esmtp (Exim 4.84_2)
 (envelope-from <eliz@HIDDEN>) id 1rpZCj-0006Mf-BL
 for 70036 <at> debbugs.gnu.org; Wed, 27 Mar 2024 15:44:59 -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 <eliz@HIDDEN>)
 id 1rpZCd-0007ju-DL; Wed, 27 Mar 2024 15:44:51 -0400
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=gnu.org;
 s=fencepost-gnu-org; h=References:Subject:In-Reply-To:To:From:Date:
 mime-version; bh=qfTSGXNSrLrC8PkVZltd/1o/6TQCz+gybDRqAXiTDZU=; b=D4G5275VWdKw
 v08TmAUXEYn8JRaIZrOkDG4o/RjVqo+XrmFGesLwcDPTIBZic3GmTN2/ek+U4C3VkEQhjmtujklQP
 UCYoSUsdxM9X4LafDTLM4vQatZ6KAwTDBD0wOLxbTkfHSvvxwkU+VAQVDYQR0W/gcMcRmsL2p2i3I
 LNrPrJDFCptd0Sy3le8v5m5hp2ooEvCpH7bIkq8M1+XloU7nObV5zMWakYOR1tRWrGJiwCzjynhjR
 0iFGr1qO11p71+XVC82M2d+vdYRcQyYPssu+sJrpdPV8a7Fmgvy2BucptP4OS6Qs46hgkDID0mKue
 ipUWIL/d4xYUjQ6wtLW70Q==;
Date: Wed, 27 Mar 2024 21:44:29 +0200
Message-Id: <861q7vihnm.fsf@HIDDEN>
From: Eli Zaretskii <eliz@HIDDEN>
To: Theodor Thornhill <theo@HIDDEN>
In-Reply-To: <87le63xzjt.fsf@HIDDEN> (bug-gnu-emacs@HIDDEN)
Subject: Re: bug#70036: 30.0.50; Move file-truename to the C level
References: <87le63xzjt.fsf@HIDDEN>
X-Spam-Score: -2.3 (--)
X-Debbugs-Envelope-To: 70036
Cc: 70036 <at> debbugs.gnu.org
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -3.3 (---)

> Date: Wed, 27 Mar 2024 20:08:54 +0100
> From:  Theodor Thornhill via "Bug reports for GNU Emacs,
>  the Swiss army knife of text editors" <bug-gnu-emacs@HIDDEN>
> 
> During the last couple of weeks I've been studying Eglots performance
> and have been noticing a couple of things that I find very
> interesting. It seems like `file-truename` is in the hot path due to the
> fact that every request to the lsp server has to create the source file
> location, and in every response we have to parse the location the
> relevant file. `file-truename` is used for this, and its performance
> isn't really up to snuff for what it provides, afaict.
> 
> Below I've supplied some benchmarks and profile reports along with the
> actual patch. Before we discuss the patch itself, I want to get some
> answers to the following:
> 
>  - Is there a reason that this function should be supplied at the lisp
>    level?

No, we could have it implemented in C.  It just never was needed,
until now, and the processing there is not trivial, to say the least.

>  - Does it have to be recursive?

No, it doesn't.

> Firstly, I'll show some benchmarks
> 
> ```
> ;; Emacs 29 branch
> 
> (benchmark-run 10000
>   (file-truename "~/Work/some/long/path/to/parse/that/is/very/deep/deep/deep/super/duper/deep/deep.el"))
> ;; (1.810892642 1 0.051070616)
> 
> 
> ;; With new C implementation
> 
> (benchmark-run 10000
>   (file-truename "~/Work/some/long/path/to/parse/that/is/very/deep/deep/deep/super/duper/deep/deep.el"))
> ;; (0.018811035 0 0.0)
> ```
> 
> As you can see, the C implementation, though naive for now is two orders
> of magnitude faster, and makes a noticeable difference when running an
> lsp server in emacs.

Yes, but comparing a partial implementation is not very useful, since
the complete one could be much more expensive.

> As for the patch - it now relies on wordexp to resolve the paths, and I
> believe there is no real feature parity with the old variant as for now,
> but I haven't seen any issues thus far. If this approach is accepted I
> will of course make sure we have feature parity, unless that isn't
> wanted.

We cannot rely on wordexp and we cannot rely on realpath: both are not
portable enough.

> +  CHECK_STRING (filename);
> +  char *c_filename = SSDATA (filename);
> +
> +  wordexp_t we;
> +  wordexp(c_filename, &we, 0);
> +
> +  char *truename = realpath(we.we_wordv[0], NULL);
> +  wordfree(&we);
> +
> +  if (!truename)
> +    return result;
> +
> +  result = build_string(truename);

You cannot pass Lisp strings to libc functions like that: you need to
do 2 things first:

  . call expand-file-name
  . encode the file name with ENCODE_FILE

This is needed because relative file names in Emacs are relative to
the current buffer's directory, not relative to the current directory
of the Emacs process, and because file names with non-ASCII characters
need to be encoded to match the encoding expected by file-related APIs
in libc.  Likewise, when you get a file name from a libc function, you
need to decode it with DECODE_FILE, before you create a Lisp string
from it

> +  free(truename);

IMO, this should be xfree, not free.  And for that to work, we need to
call realpath with 2nd argument non-NULL, but pointing to a buffer we
allocated with xmalloc, or maybe a stack-based buffer.  (But since we
cannot rely on realpath, this could be a moot point.)

Thanks.




Information forwarded to bug-gnu-emacs@HIDDEN:
bug#70036; Package emacs. Full text available.

Message received at submit <at> debbugs.gnu.org:


Received: (at submit) by debbugs.gnu.org; 27 Mar 2024 19:09:23 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Wed Mar 27 15:09:23 2024
Received: from localhost ([127.0.0.1]:38370 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1rpYeH-0003mY-TH
	for submit <at> debbugs.gnu.org; Wed, 27 Mar 2024 15:09:22 -0400
Received: from lists.gnu.org ([2001:470:142::17]:58026)
 by debbugs.gnu.org with esmtp (Exim 4.84_2)
 (envelope-from <theo@HIDDEN>) id 1rpYeE-0003ll-TJ
 for submit <at> debbugs.gnu.org; Wed, 27 Mar 2024 15:09:20 -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 <theo@HIDDEN>) id 1rpYe8-0007A3-Fj
 for bug-gnu-emacs@HIDDEN; Wed, 27 Mar 2024 15:09:12 -0400
Received: from out-186.mta0.migadu.com ([2001:41d0:1004:224b::ba])
 by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.90_1) (envelope-from <theo@HIDDEN>) id 1rpYe4-0007W0-Kh
 for bug-gnu-emacs@HIDDEN; Wed, 27 Mar 2024 15:09:12 -0400
X-Report-Abuse: Please report any abuse attempt to abuse@HIDDEN and
 include these headers.
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=thornhill.no;
 s=key1; t=1711566539;
 h=from:from:reply-to:subject:subject:date:date:message-id:message-id:
 to:to:cc:mime-version:mime-version:content-type:content-type;
 bh=aL2wtkRSIyKTcCZcJs7NI2R2zyipYA9+d+sDm40vk14=;
 b=itoYunPCk/0j6ZwGaNKLmoXxOeTLShtBVXYrIWn/JmSzJ+iKGKf85e2CDdJbRt4+QWGfAJ
 +Bf9HjTBQ4KVPCFYJylRelfnQ3IxR98zk2zVAFKudgplT9vpax9T7a6KXoYljDy2GhqnOZ
 nJyeBrkPP7G76/RhEVmudwgxHRCdv7w34FDSQGna+uoAibAXwuz+kOkgfyff4c7NnFaZ/6
 aykX9PPZQ9Q6utW11G3yDcnQLnhQpNCGsiiqx3lGfHG4xnd7HjQZcMhTj77XxCOwsOI2Zz
 Je0IfDGAQv4+UI21vr8wD64LiK7kTu6vUU8GtQ8Trtg0zBN5LjzwvjVtPl5rKg==
From: Theodor Thornhill <theo@HIDDEN>
To: bug-gnu-emacs@HIDDEN
Subject: 30.0.50; Move file-truename to the C level
X-Debbugs-Cc: 
Date: Wed, 27 Mar 2024 20:08:54 +0100
Message-ID: <87le63xzjt.fsf@HIDDEN>
MIME-Version: 1.0
Content-Type: multipart/mixed; boundary="=-=-="
X-Migadu-Flow: FLOW_OUT
Received-SPF: pass client-ip=2001:41d0:1004:224b::ba;
 envelope-from=theo@HIDDEN; helo=out-186.mta0.migadu.com
X-Spam_score_int: -16
X-Spam_score: -1.7
X-Spam_bar: -
X-Spam_report: (-1.7 / 5.0 requ) BAYES_00=-1.9, DKIM_INVALID=0.1,
 DKIM_SIGNED=0.1, SPF_HELO_NONE=0.001,
 SPF_PASS=-0.001 autolearn=no autolearn_force=no
X-Spam_action: no action
X-Spam-Score: 0.9 (/)
X-Debbugs-Envelope-To: submit
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -0.1 (/)

--=-=-=
Content-Type: text/plain



Hi, all!

During the last couple of weeks I've been studying Eglots performance
and have been noticing a couple of things that I find very
interesting. It seems like `file-truename` is in the hot path due to the
fact that every request to the lsp server has to create the source file
location, and in every response we have to parse the location the
relevant file. `file-truename` is used for this, and its performance
isn't really up to snuff for what it provides, afaict.

Below I've supplied some benchmarks and profile reports along with the
actual patch. Before we discuss the patch itself, I want to get some
answers to the following:

 - Is there a reason that this function should be supplied at the lisp
   level?
 - Does it have to be recursive? It seems to eat up a lot of stack, and
   the comments in the file suggest that has been an issue before.

Firstly, I'll show some benchmarks

```
;; Emacs 29 branch

(benchmark-run 10000
  (file-truename "~/Work/some/long/path/to/parse/that/is/very/deep/deep/deep/super/duper/deep/deep.el"))
;; (1.810892642 1 0.051070616)


;; With new C implementation

(benchmark-run 10000
  (file-truename "~/Work/some/long/path/to/parse/that/is/very/deep/deep/deep/super/duper/deep/deep.el"))
;; (0.018811035 0 0.0)
```

As you can see, the C implementation, though naive for now is two orders
of magnitude faster, and makes a noticeable difference when running an
lsp server in emacs.

As for the patch - it now relies on wordexp to resolve the paths, and I
believe there is no real feature parity with the old variant as for now,
but I haven't seen any issues thus far. If this approach is accepted I
will of course make sure we have feature parity, unless that isn't
wanted.

As for the profiles - it is very clear the performance is better with my
version, as it doesn't really show up in the profiles, but in the
current state `file-truename` seems to eat up around 10-20% of the total
samplings.

And lastly - I've noticed that `redisplay_internal (C function)` shows
up as a _huge_ chunk in emacs 30, but not in emacs 29. Is this a known
issue, or something to look out for? I could open a different bug report
for this if needed.

Below are the profiles and the patch. On my system I needed to `ln -s
lisp/loadup.el .` to make it compile. Not sure if that is due to
differences between old and new `file-truename`, or something else.

Thanks,

Theo


--=-=-=
Content-Type: application/octet-stream
Content-Disposition: attachment; filename=emacs-29-before-everything
Content-Transfer-Encoding: base64

ICAgICAgICAgIDY1ICAzMSUgLSBqc29ucnBjLS1wcm9jZXNzLWZpbHRlcgogICAgICAgICAgNjEg
IDI5JSAgLSBqc29ucnBjLWNvbm5lY3Rpb24tcmVjZWl2ZQogICAgICAgICAgNDkgIDI0JSAgIC0g
Izxjb21waWxlZCAtMHhiZjUwZDA0YmNmZDRmNGI+CiAgICAgICAgICAyOSAgMTQlICAgIC0gZWds
b3QtLWhvdmVyLWluZm8KICAgICAgICAgIDI5ICAxNCUgICAgIC0gbWFwY29uY2F0CiAgICAgICAg
ICAyOSAgMTQlICAgICAgLSBlZ2xvdC0tZm9ybWF0LW1hcmt1cAogICAgICAgICAgMTQgICA2JSAg
ICAgICAtIGdmbS12aWV3LW1vZGUKICAgICAgICAgIDEwICAgNCUgICAgICAgIC0gYnl0ZS1jb2Rl
CiAgICAgICAgICAgNCAgIDElICAgICAgICAgLSByZXF1aXJlCiAgICAgICAgICAgMSAgIDAlICAg
ICAgICAgIC0gZGVmdmFyCiAgICAgICAgICAgMSAgIDAlICAgICAgICAgICAtIGRlZmluZS1rZXlt
YXAKICAgICAgICAgICAxICAgMCUgICAgICAgICAgICAtIGtleW1hcC1zZXQKICAgICAgICAgICAx
ICAgMCUgICAgICAgICAgICAgLSBrZXltYXAtLWNoZWNrCiAgICAgICAgICAgMSAgIDAlICAgICAg
ICAgICAgICAgIGtleS12YWxpZC1wCiAgICAgICAgICAgNiAgIDIlICAgICAgIC0gZm9udC1sb2Nr
LWVuc3VyZQogICAgICAgICAgIDMgICAxJSAgICAgICAgLSAjPGNvbXBpbGVkIC0weDE5ZTJkMTBh
OTU1ZGFkODc+CiAgICAgICAgICAgMyAgIDElICAgICAgICAgLSBmb250LWxvY2stZm9udGlmeS1y
ZWdpb24KICAgICAgICAgICAzICAgMSUgICAgICAgICAgLSBjLWZvbnQtbG9jay1mb250aWZ5LXJl
Z2lvbgogICAgICAgICAgIDMgICAxJSAgICAgICAgICAgLSBmb250LWxvY2stZGVmYXVsdC1mb250
aWZ5LXJlZ2lvbgogICAgICAgICAgIDMgICAxJSAgICAgICAgICAgIC0gZm9udC1sb2NrLWZvbnRp
Znkta2V5d29yZHMtcmVnaW9uCiAgICAgICAgICAgMiAgIDAlICAgICAgICAgICAgIC0gYy1mb250
LWxvY2stZGVjbGFyYXRpb25zCiAgICAgICAgICAgMiAgIDAlICAgICAgICAgICAgICAtIGMtZmlu
ZC1kZWNsLXNwb3RzCiAgICAgICAgICAgMiAgIDAlICAgICAgICAgICAgICAgLSAjPGNvbXBpbGVk
IC0weGU5YzljNTM2MDMzY2Y5MD4KICAgICAgICAgICAyICAgMCUgICAgICAgICAgICAgICAgLSBj
LWZvcndhcmQtZGVjbC1vci1jYXN0LTEKICAgICAgICAgICAyICAgMCUgICAgICAgICAgICAgICAg
IC0gYy1mb3J3YXJkLXR5cGUKICAgICAgICAgICAyICAgMCUgICAgICAgICAgICAgICAgICAtIGMt
Zm9yd2FyZC1uYW1lCiAgICAgICAgICAgMSAgIDAlICAgICAgICAgICAgICAgICAgIC0gYy1mb3J3
YXJkLTw+LWFyZ2xpc3QKICAgICAgICAgICAxICAgMCUgICAgICAgICAgICAgICAgICAgIC0gYy1m
b3J3YXJkLTw+LWFyZ2xpc3QtcmVjdXIKICAgICAgICAgICAxICAgMCUgICAgICAgICAgICAgICAg
ICAgICAtIGMtZm9yd2FyZC10eXBlCiAgICAgICAgICAgMSAgIDAlICAgICAgICAgICAgICAgICAg
ICAgICAgYy1mb3J3YXJkLWtleXdvcmQtY2xhdXNlCiAgICAgICAgICAgMSAgIDAlICAgICAgICAg
ICAgIC0gIzxjb21waWxlZCAweGZlNzliZmNkYjcwMTRkZj4KICAgICAgICAgICAxICAgMCUgICAg
ICAgICAgICAgICAgYy1iZWdpbm5pbmctb2YtZGVjbC0xCiAgICAgICAgICAgMyAgIDElICAgICAg
ICAtIGZvbnQtbG9jay1zZXQtZGVmYXVsdHMKICAgICAgICAgICAzICAgMSUgICAgICAgICAtIGZv
bnQtbG9jay1jb21waWxlLWtleXdvcmRzCiAgICAgICAgICAgMyAgIDElICAgICAgICAgIC0gbWFw
Y2FyCiAgICAgICAgICAgMyAgIDElICAgICAgICAgICAtIGZvbnQtbG9jay1jb21waWxlLWtleXdv
cmQKICAgICAgICAgICAzICAgMSUgICAgICAgICAgICAtIGV2YWwKICAgICAgICAgICAzICAgMSUg
ICAgICAgICAgICAgLSBsaXN0CiAgICAgICAgICAgMyAgIDElICAgICAgICAgICAgICAtIHByb2du
CiAgICAgICAgICAgMiAgIDAlICAgICAgICAgICAgICAgLSB1bmxlc3MKICAgICAgICAgICAyICAg
MCUgICAgICAgICAgICAgICAgLSBpZgogICAgICAgICAgIDIgICAwJSAgICAgICAgICAgICAgICAg
LSBjLWZhY2UtbmFtZS1wCiAgICAgICAgICAgMiAgIDAlICAgICAgICAgICAgICAgICAgLSBmYWNl
LWxpc3QKICAgICAgICAgICAyICAgMCUgICAgICAgICAgICAgICAgICAgICBtYXBoYXNoCiAgICAg
ICAgICAgNCAgIDElICAgICAgIC0gamF2YS1tb2RlCiAgICAgICAgICAgMyAgIDElICAgICAgICAt
IGMtY29tbW9uLWluaXQKICAgICAgICAgICAyICAgMCUgICAgICAgICAtIGMtYmFzaWMtY29tbW9u
LWluaXQKICAgICAgICAgICAyICAgMCUgICAgICAgICAgLSBjLXNldC1zdHlsZQogICAgICAgICAg
IDIgICAwJSAgICAgICAgICAgLSBtYXBjCiAgICAgICAgICAgMiAgIDAlICAgICAgICAgICAgLSAj
PGNvbXBpbGVkIDB4MTE3MGMzOTBhNjY1MzJlMT4KICAgICAgICAgICAyICAgMCUgICAgICAgICAg
ICAgLSBjLXNldC1zdHlsZS0xCiAgICAgICAgICAgMiAgIDAlICAgICAgICAgICAgICAtIG1hcGNh
cgogICAgICAgICAgIDIgICAwJSAgICAgICAgICAgICAgICAgIzxjb21waWxlZCAweDE4OTJhMGM4
ZGEzOTdjYzg+CiAgICAgICAgICAgMSAgIDAlICAgICAgICAgLSBjLWZvbnQtbG9jay1pbml0CiAg
ICAgICAgICAgMSAgIDAlICAgICAgICAgIC0gbWFwY2FyCiAgICAgICAgICAgMSAgIDAlICAgICAg
ICAgICAgIGMtbW9kZS1zeW1ib2wKICAgICAgICAgICAxICAgMCUgICAgICAgIC0gYy1pbml0LWxh
bmd1YWdlLXZhcnMtZm9yCiAgICAgICAgICAgMSAgIDAlICAgICAgICAgLSBjLW1ha2Uta2V5d29y
ZHMtcmUKICAgICAgICAgICAxICAgMCUgICAgICAgICAgICByZWdleHAtb3B0CiAgICAgICAgICAy
MCAgIDklICAgIC0gIzxjb21waWxlZCAweDEzODUwOGQ5YjExNjQ5YTY+CiAgICAgICAgICAyMCAg
IDklICAgICAtICM8Y29tcGlsZWQgMHgzNTMyZmRkODM1MDE4OWE+CiAgICAgICAgICAyMCAgIDkl
ICAgICAgLSBydW4taG9vay13aXRoLWFyZ3MKICAgICAgICAgIDIwICAgOSUgICAgICAgLSBlbGRv
Yy1kaXNwbGF5LWluLWVjaG8tYXJlYQogICAgICAgICAgMTggICA4JSAgICAgICAgLSBlbGRvYy0t
bWVzc2FnZQogICAgICAgICAgMTggICA4JSAgICAgICAgIC0gZWxkb2MtbWluaWJ1ZmZlci1tZXNz
YWdlCiAgICAgICAgICAxOCAgIDglICAgICAgICAgIC0gYXBwbHkKICAgICAgICAgIDEzICAgNiUg
ICAgICAgICAgICAgbWVzc2FnZQogICAgICAgICAgIDIgICAwJSAgICAgICAgLSBlbGRvYy0tZWNo
by1hcmVhLXN1YnN0cmluZwogICAgICAgICAgIDIgICAwJSAgICAgICAgICAgc3Vic3RpdHV0ZS1j
b21tYW5kLWtleXMKICAgICAgICAgIDEwICAgNCUgICAtIGpzb25ycGMtLWxvZy1ldmVudAogICAg
ICAgICAgIDggICAzJSAgICAtIHBwLXRvLXN0cmluZwogICAgICAgICAgIDggICAzJSAgICAgLSBw
cC1idWZmZXIKICAgICAgICAgICA1ICAgMiUgICAgICAtIGRvd24tbGlzdAogICAgICAgICAgIDUg
ICAyJSAgICAgICAgIHN5bnRheC1wcHNzCiAgICAgICAgICAgMiAgIDAlICAgICAgLSBpbmRlbnQt
c2V4cAogICAgICAgICAgIDIgICAwJSAgICAgICAtIGxpc3AtaW5kZW50LWNhbGMtbmV4dAogICAg
ICAgICAgIDEgICAwJSAgICAgICAgICBjYWxjdWxhdGUtbGlzcC1pbmRlbnQKICAgICAgICAgICAx
ICAgMCUgICAgICAgIHVwLWxpc3QKICAgICAgICAgICAxICAgMCUgICAgLSBqc29ucnBjLS1ldmVu
dHMtYnVmZmVyLXNjcm9sbGJhY2stc2l6ZQogICAgICAgICAgIDEgICAwJSAgICAgLSBhcHBseQog
ICAgICAgICAgIDEgICAwJSAgICAgICAgIzxjb21waWxlZCAtMHg0NTVlYzZlMmM2OGQ0MDc+CiAg
ICAgICAgICAgMSAgIDAlICAgLSAjPGNvbXBpbGVkIC0weDIyY2E5MjUwOGEwZTFkYz4KICAgICAg
ICAgICAxICAgMCUgICAgLSBtYXBjYXIKICAgICAgICAgICAxICAgMCUgICAgIC0gIzxjb21waWxl
ZCAweGRhNmM3OTY2MjlkYjdmNz4KICAgICAgICAgICAxICAgMCUgICAgICAtIGVnbG90LS1yYW5n
ZS1yZWdpb24KICAgICAgICAgICAxICAgMCUgICAgICAgICBlZ2xvdC0tbHNwLXBvc2l0aW9uLXRv
LXBvaW50CiAgICAgICAgICAgMiAgIDAlICAtICM8Y29tcGlsZWQgLTB4MWM3NGFmNzY0MTY4MWRl
Zj4KICAgICAgICAgICAyICAgMCUgICAtIGtpbGwtYnVmZmVyCiAgICAgICAgICAgMiAgIDAlICAg
ICAgcmVwbGFjZS1idWZmZXItaW4td2luZG93cwogICAgICAgICAgIDEgICAwJSAgICBnZW5lcmF0
ZS1uZXctYnVmZmVyCiAgICAgICAgICA2MCAgMjklIC0gY29tbWFuZC1leGVjdXRlCiAgICAgICAg
ICA2MCAgMjklICAtIGNhbGwtaW50ZXJhY3RpdmVseQogICAgICAgICAgNTkgIDI4JSAgIC0gYnl0
ZS1jb2RlCiAgICAgICAgICA1OSAgMjglICAgIC0gcmVhZC1leHRlbmRlZC1jb21tYW5kCiAgICAg
ICAgICA1OSAgMjglICAgICAtIHJlYWQtZXh0ZW5kZWQtY29tbWFuZC0xCiAgICAgICAgICA1OSAg
MjglICAgICAgLSBjb21wbGV0aW5nLXJlYWQKICAgICAgICAgIDU5ICAyOCUgICAgICAgLSBjb21w
bGV0aW5nLXJlYWQtZGVmYXVsdAogICAgICAgICAgMzggIDE4JSAgICAgICAgLSByZWFkLWZyb20t
bWluaWJ1ZmZlcgogICAgICAgICAgMTMgICA2JSAgICAgICAgIC0gY29tbWFuZC1leGVjdXRlCiAg
ICAgICAgICAgOSAgIDQlICAgICAgICAgIC0gY2FsbC1pbnRlcmFjdGl2ZWx5CiAgICAgICAgICAg
OSAgIDQlICAgICAgICAgICAtIGZ1bmNhbGwtaW50ZXJhY3RpdmVseQogICAgICAgICAgIDkgICA0
JSAgICAgICAgICAgIC0gbWluaWJ1ZmZlci1jb21wbGV0ZS1hbmQtZXhpdAogICAgICAgICAgIDkg
ICA0JSAgICAgICAgICAgICAtIGNvbXBsZXRpb24tY29tcGxldGUtYW5kLWV4aXQKICAgICAgICAg
ICA5ICAgNCUgICAgICAgICAgICAgIC0gY29tcGxldGlvbi0tY29tcGxldGUtYW5kLWV4aXQKICAg
ICAgICAgICA4ICAgMyUgICAgICAgICAgICAgICAtIHRyeS1jb21wbGV0aW9uCiAgICAgICAgICAg
OCAgIDMlICAgICAgICAgICAgICAgIC0gIzxjb21waWxlZCAweDFiZjNlM2E5NTFlODY1ZDk+CiAg
ICAgICAgICAgOCAgIDMlICAgICAgICAgICAgICAgICAgIGNvbXBsZXRlLXdpdGgtYWN0aW9uCiAg
ICAgICAgICAgMSAgIDAlICAgICAgICAgICAgICAgICB0ZXN0LWNvbXBsZXRpb24KICAgICAgICAg
ICAxICAgMCUgICAgICAgICAtIHJlZGlzcGxheV9pbnRlcm5hbCAoQyBmdW5jdGlvbikKICAgICAg
ICAgICAxICAgMCUgICAgICAgICAgLSBldmFsCiAgICAgICAgICAgMSAgIDAlICAgICAgICAgICAg
IGZseW1ha2UtLW1vZGUtbGluZS1jb3VudGVyCiAgICAgICAgICAgMSAgIDAlICAgLSBmdW5jYWxs
LWludGVyYWN0aXZlbHkKICAgICAgICAgICAxICAgMCUgICAgLSBleGVjdXRlLWV4dGVuZGVkLWNv
bW1hbmQKICAgICAgICAgICAxICAgMCUgICAgIC0gY29tbWFuZC1leGVjdXRlCiAgICAgICAgICAg
MSAgIDAlICAgICAgLSBjYWxsLWludGVyYWN0aXZlbHkKICAgICAgICAgICAxICAgMCUgICAgICAg
LSBmdW5jYWxsLWludGVyYWN0aXZlbHkKICAgICAgICAgICAxICAgMCUgICAgICAgICAgcHJvZmls
ZXItc3RvcAogICAgICAgICAgNTUgIDI2JSAtIHRpbWVyLWV2ZW50LWhhbmRsZXIKICAgICAgICAg
IDU1ICAyNiUgIC0gYXBwbHkKICAgICAgICAgIDUxICAyNSUgICAtICM8Y29tcGlsZWQgLTB4ZGFm
ZGZlYmVlZGU3YjYyPgogICAgICAgICAgNTEgIDI1JSAgICAtIGVsZG9jLXByaW50LWN1cnJlbnQt
c3ltYm9sLWluZm8KICAgICAgICAgIDUxICAyNSUgICAgIC0gZWxkb2MtLWludm9rZS1zdHJhdGVn
eQogICAgICAgICAgNTEgIDI1JSAgICAgIC0gZWxkb2MtZG9jdW1lbnRhdGlvbi1jb21wb3NlCiAg
ICAgICAgICA1MCAgMjQlICAgICAgIC0gZWxkb2MtLWRvY3VtZW50YXRpb24tY29tcG9zZS0xCiAg
ICAgICAgICA1MCAgMjQlICAgICAgICAtIHJ1bi1ob29rLXdyYXBwZWQKICAgICAgICAgIDUwICAy
NCUgICAgICAgICAtICM8Y29tcGlsZWQgMHhmNTVhMTcwZmY4MGRmYzk+CiAgICAgICAgICAyNSAg
MTIlICAgICAgICAgIC0gZWdsb3Qtc2lnbmF0dXJlLWVsZG9jLWZ1bmN0aW9uCiAgICAgICAgICAx
OCAgIDglICAgICAgICAgICAtIGVnbG90LS1UZXh0RG9jdW1lbnRQb3NpdGlvblBhcmFtcwogICAg
ICAgICAgMTggICA4JSAgICAgICAgICAgIC0gZWdsb3QtLVRleHREb2N1bWVudElkZW50aWZpZXIK
ICAgICAgICAgIDE4ICAgOCUgICAgICAgICAgICAgLSBlZ2xvdC0tcGF0aC10by11cmkKICAgICAg
ICAgIDE1ICAgNyUgICAgICAgICAgICAgIC0gZmlsZS10cnVlbmFtZQogICAgICAgICAgMTQgICA2
JSAgICAgICAgICAgICAgIC0gZmlsZS10cnVlbmFtZQogICAgICAgICAgMTQgICA2JSAgICAgICAg
ICAgICAgICAtIGZpbGUtdHJ1ZW5hbWUKICAgICAgICAgIDExICAgNSUgICAgICAgICAgICAgICAg
IC0gZmlsZS10cnVlbmFtZQogICAgICAgICAgMTEgICA1JSAgICAgICAgICAgICAgICAgIC0gZmls
ZS10cnVlbmFtZQogICAgICAgICAgMTEgICA1JSAgICAgICAgICAgICAgICAgICAtIGZpbGUtdHJ1
ZW5hbWUKICAgICAgICAgIDEwICAgNCUgICAgICAgICAgICAgICAgICAgIC0gZmlsZS10cnVlbmFt
ZQogICAgICAgICAgMTAgICA0JSAgICAgICAgICAgICAgICAgICAgIC0gZmlsZS10cnVlbmFtZQog
ICAgICAgICAgIDggICAzJSAgICAgICAgICAgICAgICAgICAgICAtIGZpbGUtdHJ1ZW5hbWUKICAg
ICAgICAgICA4ICAgMyUgICAgICAgICAgICAgICAgICAgICAgIC0gZmlsZS10cnVlbmFtZQogICAg
ICAgICAgIDggICAzJSAgICAgICAgICAgICAgICAgICAgICAgIC0gZmlsZS10cnVlbmFtZQogICAg
ICAgICAgIDUgICAyJSAgICAgICAgICAgICAgICAgICAgICAgICAtIGZpbGUtdHJ1ZW5hbWUKICAg
ICAgICAgICAzICAgMSUgICAgICAgICAgICAgICAgICAgICAgICAgIC0gZmlsZS10cnVlbmFtZQog
ICAgICAgICAgIDIgICAwJSAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gZmlsZS10cnVlbmFt
ZQogICAgICAgICAgIDEgICAwJSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGUtdHJ1
ZW5hbWUKICAgICAgICAgICAxICAgMCUgICAgICAgICAgICAgICAgdXJsLWhleGlmeS1zdHJpbmcK
ICAgICAgICAgICAxICAgMCUgICAgICAgICAgICAgIC0gZmlsZS1sb2NhbC1uYW1lCiAgICAgICAg
ICAgMSAgIDAlICAgICAgICAgICAgICAgICBmaWxlLXJlbW90ZS1wCiAgICAgICAgICAgNyAgIDMl
ICAgICAgICAgICAtIGpzb25ycGMtYXN5bmMtcmVxdWVzdAogICAgICAgICAgIDcgICAzJSAgICAg
ICAgICAgIC0gYXBwbHkKICAgICAgICAgICA3ICAgMyUgICAgICAgICAgICAgLSBqc29ucnBjLS1h
c3luYy1yZXF1ZXN0LTEKICAgICAgICAgICA3ICAgMyUgICAgICAgICAgICAgIC0ganNvbnJwYy1j
b25uZWN0aW9uLXNlbmQKICAgICAgICAgICA3ICAgMyUgICAgICAgICAgICAgICAtIGFwcGx5CiAg
ICAgICAgICAgNyAgIDMlICAgICAgICAgICAgICAgIC0gIzxjb21waWxlZCAtMHg0YWJjOWI4NGZh
N2MyYTQ+CiAgICAgICAgICAgNiAgIDIlICAgICAgICAgICAgICAgICAtIGpzb25ycGMtLWxvZy1l
dmVudAogICAgICAgICAgIDYgICAyJSAgICAgICAgICAgICAgICAgIC0gcHAtdG8tc3RyaW5nCiAg
ICAgICAgICAgNCAgIDElICAgICAgICAgICAgICAgICAgIC0gcHAtYnVmZmVyCiAgICAgICAgICAg
MyAgIDElICAgICAgICAgICAgICAgICAgICAtIGRvd24tbGlzdAogICAgICAgICAgIDIgICAwJSAg
ICAgICAgICAgICAgICAgICAgICAgc3ludGF4LXBwc3MKICAgICAgICAgICAxICAgMCUgICAgICAg
ICAgICAgICAgICAgIC0gaW5kZW50LXNleHAKICAgICAgICAgICAxICAgMCUgICAgICAgICAgICAg
ICAgICAgICAgIGxpc3AtaW5kZW50LWNhbGMtbmV4dAogICAgICAgICAgMjUgIDEyJSAgICAgICAg
ICAtIGVnbG90LWhvdmVyLWVsZG9jLWZ1bmN0aW9uCiAgICAgICAgICAxMSAgIDUlICAgICAgICAg
ICAtIGVnbG90LS1oaWdobGlnaHQtcGlnZ3liYWNrCiAgICAgICAgICAgNyAgIDMlICAgICAgICAg
ICAgLSBlZ2xvdC0tVGV4dERvY3VtZW50UG9zaXRpb25QYXJhbXMKICAgICAgICAgICA3ICAgMyUg
ICAgICAgICAgICAgLSBlZ2xvdC0tVGV4dERvY3VtZW50SWRlbnRpZmllcgogICAgICAgICAgIDcg
ICAzJSAgICAgICAgICAgICAgLSBlZ2xvdC0tcGF0aC10by11cmkKICAgICAgICAgICA2ICAgMiUg
ICAgICAgICAgICAgICAtIGZpbGUtdHJ1ZW5hbWUKICAgICAgICAgICA1ICAgMiUgICAgICAgICAg
ICAgICAgLSBmaWxlLXRydWVuYW1lCiAgICAgICAgICAgNCAgIDElICAgICAgICAgICAgICAgICAt
IGZpbGUtdHJ1ZW5hbWUKICAgICAgICAgICA0ICAgMSUgICAgICAgICAgICAgICAgICAtIGZpbGUt
dHJ1ZW5hbWUKICAgICAgICAgICA0ICAgMSUgICAgICAgICAgICAgICAgICAgLSBmaWxlLXRydWVu
YW1lCiAgICAgICAgICAgMyAgIDElICAgICAgICAgICAgICAgICAgICAtIGZpbGUtdHJ1ZW5hbWUK
ICAgICAgICAgICAzICAgMSUgICAgICAgICAgICAgICAgICAgICAtIGZpbGUtdHJ1ZW5hbWUKICAg
ICAgICAgICAzICAgMSUgICAgICAgICAgICAgICAgICAgICAgLSBmaWxlLXRydWVuYW1lCiAgICAg
ICAgICAgMiAgIDAlICAgICAgICAgICAgICAgICAgICAgICAtIGZpbGUtdHJ1ZW5hbWUKICAgICAg
ICAgICAyICAgMCUgICAgICAgICAgICAgICAgICAgICAgICAtIGZpbGUtdHJ1ZW5hbWUKICAgICAg
ICAgICAxICAgMCUgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlLXRydWVuYW1lCiAgICAg
ICAgICAgNCAgIDElICAgICAgICAgICAgLSBqc29ucnBjLWFzeW5jLXJlcXVlc3QKICAgICAgICAg
ICA0ICAgMSUgICAgICAgICAgICAgLSBhcHBseQogICAgICAgICAgIDQgICAxJSAgICAgICAgICAg
ICAgLSBqc29ucnBjLS1hc3luYy1yZXF1ZXN0LTEKICAgICAgICAgICAyICAgMCUgICAgICAgICAg
ICAgICAtIGpzb25ycGMtY29ubmVjdGlvbi1zZW5kCiAgICAgICAgICAgMiAgIDAlICAgICAgICAg
ICAgICAgIC0gYXBwbHkKICAgICAgICAgICAyICAgMCUgICAgICAgICAgICAgICAgIC0gIzxjb21w
aWxlZCAtMHg0YWJjOWI4NGZhN2MyYTQ+CiAgICAgICAgICAgMiAgIDAlICAgICAgICAgICAgICAg
ICAgLSBqc29ucnBjLS1sb2ctZXZlbnQKICAgICAgICAgICAyICAgMCUgICAgICAgICAgICAgICAg
ICAgLSBwcC10by1zdHJpbmcKICAgICAgICAgICAxICAgMCUgICAgICAgICAgICAgICAgICAgICAg
cHAtYnVmZmVyCiAgICAgICAgICAgMSAgIDAlICAgICAgICAgICAgICAgLSAjPGNvbXBpbGVkIDB4
MTU0N2YzNzNjZThlNTFiMj4KICAgICAgICAgICAxICAgMCUgICAgICAgICAgICAgICAgLSBydW4t
d2l0aC10aW1lcgogICAgICAgICAgIDEgICAwJSAgICAgICAgICAgICAgICAgLSBhcHBseQogICAg
ICAgICAgIDEgICAwJSAgICAgICAgICAgICAgICAgIC0gcnVuLWF0LXRpbWUKICAgICAgICAgICAx
ICAgMCUgICAgICAgICAgICAgICAgICAgICB0aW1lci1yZWxhdGl2ZS10aW1lCiAgICAgICAgICAg
MSAgIDAlICAgICAgICAgICAgICAgLSBqc29ucnBjLS1uZXh0LXJlcXVlc3QtaWQKICAgICAgICAg
ICAxICAgMCUgICAgICAgICAgICAgICAgLSBhcHBseQogICAgICAgICAgIDEgICAwJSAgICAgICAg
ICAgICAgICAgICAjPGNvbXBpbGVkIC0weGRmZjgwM2JhNDZjMDJlNT4KICAgICAgICAgIDEwICAg
NCUgICAgICAgICAgIC0gZWdsb3QtLVRleHREb2N1bWVudFBvc2l0aW9uUGFyYW1zCiAgICAgICAg
ICAxMCAgIDQlICAgICAgICAgICAgLSBlZ2xvdC0tVGV4dERvY3VtZW50SWRlbnRpZmllcgogICAg
ICAgICAgMTAgICA0JSAgICAgICAgICAgICAtIGVnbG90LS1wYXRoLXRvLXVyaQogICAgICAgICAg
IDggICAzJSAgICAgICAgICAgICAgLSBmaWxlLXRydWVuYW1lCiAgICAgICAgICAgOCAgIDMlICAg
ICAgICAgICAgICAgLSBmaWxlLXRydWVuYW1lCiAgICAgICAgICAgOCAgIDMlICAgICAgICAgICAg
ICAgIC0gZmlsZS10cnVlbmFtZQogICAgICAgICAgIDggICAzJSAgICAgICAgICAgICAgICAgLSBm
aWxlLXRydWVuYW1lCiAgICAgICAgICAgNyAgIDMlICAgICAgICAgICAgICAgICAgLSBmaWxlLXRy
dWVuYW1lCiAgICAgICAgICAgNyAgIDMlICAgICAgICAgICAgICAgICAgIC0gZmlsZS10cnVlbmFt
ZQogICAgICAgICAgIDYgICAyJSAgICAgICAgICAgICAgICAgICAgLSBmaWxlLXRydWVuYW1lCiAg
ICAgICAgICAgNCAgIDElICAgICAgICAgICAgICAgICAgICAgLSBmaWxlLXRydWVuYW1lCiAgICAg
ICAgICAgMyAgIDElICAgICAgICAgICAgICAgICAgICAgIC0gZmlsZS10cnVlbmFtZQogICAgICAg
ICAgIDEgICAwJSAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlLXRydWVuYW1lCiAgICAgICAg
ICAgMiAgIDAlICAgICAgICAgICAgICAtIHVybC1oZXhpZnktc3RyaW5nCiAgICAgICAgICAgMiAg
IDAlICAgICAgICAgICAgICAgLSBtYXBjb25jYXQKICAgICAgICAgICAxICAgMCUgICAgICAgICAg
ICAgICAgICAjPGNvbXBpbGVkIDB4MWU2Y2EwY2I4NWE0NThiYz4KICAgICAgICAgICA0ICAgMSUg
ICAgICAgICAgIC0ganNvbnJwYy1hc3luYy1yZXF1ZXN0CiAgICAgICAgICAgNCAgIDElICAgICAg
ICAgICAgLSBhcHBseQogICAgICAgICAgIDQgICAxJSAgICAgICAgICAgICAtIGpzb25ycGMtLWFz
eW5jLXJlcXVlc3QtMQogICAgICAgICAgIDQgICAxJSAgICAgICAgICAgICAgLSBqc29ucnBjLWNv
bm5lY3Rpb24tc2VuZAogICAgICAgICAgIDQgICAxJSAgICAgICAgICAgICAgIC0gYXBwbHkKICAg
ICAgICAgICA0ICAgMSUgICAgICAgICAgICAgICAgLSAjPGNvbXBpbGVkIC0weDRhYmM5Yjg0ZmE3
YzJhND4KICAgICAgICAgICAzICAgMSUgICAgICAgICAgICAgICAgIC0ganNvbnJwYy0tbG9nLWV2
ZW50CiAgICAgICAgICAgMyAgIDElICAgICAgICAgICAgICAgICAgLSBwcC10by1zdHJpbmcKICAg
ICAgICAgICAyICAgMCUgICAgICAgICAgICAgICAgICAgLSBwcC1idWZmZXIKICAgICAgICAgICAy
ICAgMCUgICAgICAgICAgICAgICAgICAgIC0gaW5kZW50LXNleHAKICAgICAgICAgICAxICAgMCUg
ICAgICAgICAgICAgICAgICAgICAgIGluZGVudC1saW5lLXRvCiAgICAgICAgICAgMSAgIDAlICAg
ICAgICAgICAgICAgICAgICAgICBsaXNwLWluZGVudC1jYWxjLW5leHQKICAgICAgICAgICAxICAg
MCUgICAgICAgICAgICAgICAgICAganNvbnJwYy0tanNvbi1lbmNvZGUKICAgICAgICAgICAzICAg
MSUgICAgICM8Y29tcGlsZWQgMHgxMmM2ZDdiNTRhMWQ2ZDI2PgogICAgICAgICAgIDEgICAwJSAg
IC0gc2hvdy1wYXJlbi1mdW5jdGlvbgogICAgICAgICAgIDEgICAwJSAgICAtIHNob3ctcGFyZW4t
LWRlZmF1bHQKICAgICAgICAgICAxICAgMCUgICAgICAgc3ludGF4LXBwc3MKICAgICAgICAgIDIx
ICAxMCUgLSBlbGRvYy1wcmUtY29tbWFuZC1yZWZyZXNoLWVjaG8tYXJlYQogICAgICAgICAgMjEg
IDEwJSAgLSBlbGRvYy0tbWVzc2FnZQogICAgICAgICAgMjEgIDEwJSAgIC0gZWxkb2MtbWluaWJ1
ZmZlci1tZXNzYWdlCiAgICAgICAgICAyMSAgMTAlICAgICAgYXBwbHkKICAgICAgICAgICAzICAg
MSUgLSByZWRpc3BsYXlfaW50ZXJuYWwgKEMgZnVuY3Rpb24pCiAgICAgICAgICAgMyAgIDElICAt
IGV2YWwKICAgICAgICAgICAxICAgMCUgICAgIGZseW1ha2UtLW1vZGUtbGluZS1jb3VudGVyCiAg
ICAgICAgICAgMCAgIDAlICsgLi4uCg==
--=-=-=
Content-Type: application/octet-stream
Content-Disposition: attachment; filename=emacs-30-before
Content-Transfer-Encoding: base64

ICAgICAgICAgMjA5ICA0MyUgLSB0aW1lci1ldmVudC1oYW5kbGVyCiAgICAgICAgIDIwOSAgNDMl
ICAtIGFwcGx5CiAgICAgICAgIDE4NyAgMzklICAgLSAjPGNvbXBpbGVkLWZ1bmN0aW9uIDk3OD4K
ICAgICAgICAgMTc5ICAzNyUgICAgLSBqc29ucnBjLWNvbm5lY3Rpb24tcmVjZWl2ZQogICAgICAg
ICAxMDQgIDIxJSAgICAgLSAjPGNvbXBpbGVkLWZ1bmN0aW9uIEY3Qj4KICAgICAgICAgMTA0ICAy
MSUgICAgICAtIGFwcGx5CiAgICAgICAgIDEwNCAgMjElICAgICAgIC0gZWdsb3QtaGFuZGxlLW5v
dGlmaWNhdGlvbgogICAgICAgICAxMDQgIDIxJSAgICAgICAgLSBhcHBseQogICAgICAgICAxMDQg
IDIxJSAgICAgICAgIC0gIzxjb21waWxlZC1mdW5jdGlvbiA2MDQ+CiAgICAgICAgICA5MCAgMTgl
ICAgICAgICAgIC0gZmluZC1idWZmZXItdmlzaXRpbmcKICAgICAgICAgIDczICAxNSUgICAgICAg
ICAgIC0gZmlsZS10cnVlbmFtZQogICAgICAgICAgNjEgIDEyJSAgICAgICAgICAgIC0gZmlsZS10
cnVlbmFtZQogICAgICAgICAgNTggIDEyJSAgICAgICAgICAgICAtIGZpbGUtdHJ1ZW5hbWUKICAg
ICAgICAgIDUxICAxMCUgICAgICAgICAgICAgIC0gZmlsZS10cnVlbmFtZQogICAgICAgICAgNDYg
ICA5JSAgICAgICAgICAgICAgIC0gZmlsZS10cnVlbmFtZQogICAgICAgICAgNDMgICA5JSAgICAg
ICAgICAgICAgICAtIGZpbGUtdHJ1ZW5hbWUKICAgICAgICAgIDQxICAgOCUgICAgICAgICAgICAg
ICAgIC0gZmlsZS10cnVlbmFtZQogICAgICAgICAgMzYgICA3JSAgICAgICAgICAgICAgICAgIC0g
ZmlsZS10cnVlbmFtZQogICAgICAgICAgMzQgICA3JSAgICAgICAgICAgICAgICAgICAtIGZpbGUt
dHJ1ZW5hbWUKICAgICAgICAgIDI4ICAgNSUgICAgICAgICAgICAgICAgICAgIC0gZmlsZS10cnVl
bmFtZQogICAgICAgICAgMjIgICA0JSAgICAgICAgICAgICAgICAgICAgIC0gZmlsZS10cnVlbmFt
ZQogICAgICAgICAgMTUgICAzJSAgICAgICAgICAgICAgICAgICAgICAtIGZpbGUtdHJ1ZW5hbWUK
ICAgICAgICAgIDEwICAgMiUgICAgICAgICAgICAgICAgICAgICAgIC0gZmlsZS10cnVlbmFtZQog
ICAgICAgICAgIDUgICAxJSAgICAgICAgICAgICAgICAgICAgICAgIC0gZmlsZS10cnVlbmFtZQog
ICAgICAgICAgIDEgICAwJSAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGUtdHJ1ZW5hbWUK
ICAgICAgICAgICA1ICAgMSUgICAgICAgICAgICAgYWJicmV2aWF0ZS1maWxlLW5hbWUKICAgICAg
ICAgICA4ICAgMSUgICAgICAgICAgLSBlZ2xvdC11cmktdG8tcGF0aAogICAgICAgICAgIDcgICAx
JSAgICAgICAgICAgLSB1cmwtZ2VuZXJpYy1wYXJzZS11cmwKICAgICAgICAgICAyICAgMCUgICAg
ICAgICAgICAtICM8Y29tcGlsZWQtZnVuY3Rpb24gNTQ4PgogICAgICAgICAgIDIgICAwJSAgICAg
ICAgICAgICAgIGtpbGwtYnVmZmVyCiAgICAgICAgICAgMSAgIDAlICAgICAgICAgICAgICBtYXRj
aC1zdHJpbmcKICAgICAgICAgICAxICAgMCUgICAgICAgICAgIC0gZWdsb3QtLXRyYW1waXNoLXAK
ICAgICAgICAgICAxICAgMCUgICAgICAgICAgICAtIHByb2plY3Qtcm9vdAogICAgICAgICAgIDEg
ICAwJSAgICAgICAgICAgICAtIGFwcGx5CiAgICAgICAgICAgMSAgIDAlICAgICAgICAgICAgICAt
ICM8Y29tcGlsZWQtZnVuY3Rpb24gNUQ4PgogICAgICAgICAgIDEgICAwJSAgICAgICAgICAgICAg
ICAgZ2V0aGFzaAogICAgICAgICAgIDUgICAxJSAgICAgICAgICAgIGVnbG90LS1tYWtlLWRpYWcK
ICAgICAgICAgICAxICAgMCUgICAgICAgICAgICBleHBhbmQtZmlsZS1uYW1lCiAgICAgICAgICA2
NSAgMTMlICAgICAtIGpzb25ycGMtLWNvbnRpbnVlCiAgICAgICAgICA2MyAgMTMlICAgICAgLSAj
PGNvbXBpbGVkLWZ1bmN0aW9uIEE3MD4KICAgICAgICAgIDU2ICAxMSUgICAgICAgLSBlZ2xvdC0t
aG92ZXItaW5mbwogICAgICAgICAgNTYgIDExJSAgICAgICAgLSBlZ2xvdC0tZm9ybWF0LW1hcmt1
cAogICAgICAgICAgNDAgICA4JSAgICAgICAgIC0gZ2ZtLXZpZXctbW9kZQogICAgICAgICAgMTMg
ICAyJSAgICAgICAgICAtIGRlZmFsaWFzCiAgICAgICAgICAgOCAgIDElICAgICAgICAgICAtIGZp
bGUtbmFtZS1zYW5zLWV4dGVuc2lvbgogICAgICAgICAgIDEgICAwJSAgICAgICAgICAgICAgZmls
ZS1uYW1lLXNhbnMtdmVyc2lvbnMKICAgICAgICAgICA5ICAgMSUgICAgICAgICAgLSBieXRlLWNv
ZGUKICAgICAgICAgICA4ICAgMSUgICAgICAgICAgIC0gcmVxdWlyZQogICAgICAgICAgIDIgICAw
JSAgICAgICAgICAgIC0gZGVmYWxpYXMKICAgICAgICAgICAyICAgMCUgICAgICAgICAgICAgICBm
aWxlLW5hbWUtc2Fucy1leHRlbnNpb24KICAgICAgICAgICAxICAgMCUgICAgICAgICAgICAtIGN1
c3RvbS1kZWNsYXJlLWZhY2UKICAgICAgICAgICAxICAgMCUgICAgICAgICAgICAgLSBmYWNlLXNw
ZWMtc2V0CiAgICAgICAgICAgMSAgIDAlICAgICAgICAgICAgICAtIGZhY2Utc3BlYy1yZWNhbGMK
ICAgICAgICAgICAxICAgMCUgICAgICAgICAgICAgICAtIGZhY2UtYXR0cmlidXRlCiAgICAgICAg
ICAgMSAgIDAlICAgICAgICAgICAgICAgICAgZmFjZS1hdHRyaWJ1dGUtcmVsYXRpdmUtcAogICAg
ICAgICAgIDEgICAwJSAgICAgICAgICAgLSBjdXN0b20tZGVjbGFyZS12YXJpYWJsZQogICAgICAg
ICAgIDEgICAwJSAgICAgICAgICAgIC0gY3VzdG9tLWluaXRpYWxpemUtcmVzZXQKICAgICAgICAg
ICAxICAgMCUgICAgICAgICAgICAgLSBldmFsCiAgICAgICAgICAgMSAgIDAlICAgICAgICAgICAg
ICAtIGZ1bmNhbGwKICAgICAgICAgICAxICAgMCUgICAgICAgICAgICAgICAtICM8Y29tcGlsZWQt
ZnVuY3Rpb24gREYzPgogICAgICAgICAgIDEgICAwJSAgICAgICAgICAgICAgICAtIGV4ZWN1dGFi
bGUtZmluZAogICAgICAgICAgIDEgICAwJSAgICAgICAgICAgICAgICAgICBsb2NhdGUtZmlsZQog
ICAgICAgICAgIDQgICAwJSAgICAgICAgICAgIHJlcXVpcmUKICAgICAgICAgICA0ICAgMCUgICAg
ICAgICAgLSByZWFkLW9ubHktbW9kZQogICAgICAgICAgIDQgICAwJSAgICAgICAgICAgLSB2aWV3
LW1vZGUtZW50ZXIKICAgICAgICAgICAxICAgMCUgICAgICAgICAgICAtIGRlZmFsaWFzCiAgICAg
ICAgICAgMSAgIDAlICAgICAgICAgICAgICAgZmlsZS1uYW1lLXNhbnMtZXh0ZW5zaW9uCiAgICAg
ICAgICAgMyAgIDAlICAgICAgICAgICAgcmVhZAogICAgICAgICAgIDMgICAwJSAgICAgICAgICAt
IGdmbS1tb2RlCiAgICAgICAgICAgMyAgIDAlICAgICAgICAgICAtIG1hcmtkb3duLW1vZGUKICAg
ICAgICAgICAyICAgMCUgICAgICAgICAgICAtIHN5bnRheC1wcm9wZXJ0aXplCiAgICAgICAgICAg
MiAgIDAlICAgICAgICAgICAgIC0gbWFya2Rvd24tc3ludGF4LXByb3BlcnRpemUKICAgICAgICAg
ICAxICAgMCUgICAgICAgICAgICAgIC0gbWFya2Rvd24tc3ludGF4LXByb3BlcnRpemUtbGlzdC1p
dGVtcwogICAgICAgICAgIDEgICAwJSAgICAgICAgICAgICAgIC0gbWFya2Rvd24tLWN1ci1saXN0
LWl0ZW0tYm91bmRzCiAgICAgICAgICAgMSAgIDAlICAgICAgICAgICAgICAgIC0gbWFya2Rvd24t
Y3VyLWxpc3QtaXRlbS1lbmQKICAgICAgICAgICAxICAgMCUgICAgICAgICAgICAgICAgIC0gbWFy
a2Rvd24tcHJldi1saW5lLWJsYW5rCiAgICAgICAgICAgMSAgIDAlICAgICAgICAgICAgICAgICAg
ICBsb29raW5nLWF0CiAgICAgICAgICAgMSAgIDAlICAgICAgICAgICAgICAtIG1hcmtkb3duLXN5
bnRheC1wcm9wZXJ0aXplLXByZS1ibG9ja3MKICAgICAgICAgICAxICAgMCUgICAgICAgICAgICAg
ICAgIGZvcm1hdAogICAgICAgICAgIDEgICAwJSAgICAgICAgICAgICAgYWRkLWhvb2sKICAgICAg
ICAgICAxICAgMCUgICAgICAgICAgLSBjdXN0b20tZGVjbGFyZS1mYWNlCiAgICAgICAgICAgMSAg
IDAlICAgICAgICAgICAtIGZhY2Utc3BlYy1zZXQKICAgICAgICAgICAxICAgMCUgICAgICAgICAg
ICAtIG1ha2UtZW1wdHktZmFjZQogICAgICAgICAgIDEgICAwJSAgICAgICAgICAgICAgIG1ha2Ut
ZmFjZQogICAgICAgICAgMTMgICAyJSAgICAgICAgIC0gZm9udC1sb2NrLWVuc3VyZQogICAgICAg
ICAgMTMgICAyJSAgICAgICAgICAtICM8Y29tcGlsZWQtZnVuY3Rpb24gNDZEPgogICAgICAgICAg
MTMgICAyJSAgICAgICAgICAgLSBmb250LWxvY2stZm9udGlmeS1yZWdpb24KICAgICAgICAgIDEz
ICAgMiUgICAgICAgICAgICAtIGZvbnQtbG9jay1kZWZhdWx0LWZvbnRpZnktcmVnaW9uCiAgICAg
ICAgICAgOCAgIDElICAgICAgICAgICAgIC0gZm9udC1sb2NrLWZvbnRpZnkta2V5d29yZHMtcmVn
aW9uCiAgICAgICAgICAgMiAgIDAlICAgICAgICAgICAgICAtIG1hcmtkb3duLWZvbnRpZnktaW5s
aW5lLWxpbmtzCiAgICAgICAgICAgMiAgIDAlICAgICAgICAgICAgICAgLSBtYXJrZG93bi1tYXRj
aC1nZW5lcmljLWxpbmtzCiAgICAgICAgICAgMSAgIDAlICAgICAgICAgICAgICAgIC0gbWFya2Rv
d24tcmFuZ2UtcHJvcGVydHktYW55CiAgICAgICAgICAgMSAgIDAlICAgICAgICAgICAgICAgICAg
IG51bWJlci1zZXF1ZW5jZQogICAgICAgICAgIDEgICAwJSAgICAgICAgICAgICAgICAgIHJlLXNl
YXJjaC1mb3J3YXJkCiAgICAgICAgICAgMSAgIDAlICAgICAgICAgICAgICAtIG1hcmtkb3duLW1h
dGNoLXBhbmRvYy1tZXRhZGF0YQogICAgICAgICAgIDEgICAwJSAgICAgICAgICAgICAgIC0gbWFy
a2Rvd24tbWF0Y2gtZ2VuZXJpYy1tZXRhZGF0YQogICAgICAgICAgIDEgICAwJSAgICAgICAgICAg
ICAgICAgIHJlLXNlYXJjaC1mb3J3YXJkCiAgICAgICAgICAgMSAgIDAlICAgICAgICAgICAgICAt
IG1hcmtkb3duLW1hdGNoLWJvbGQKICAgICAgICAgICAxICAgMCUgICAgICAgICAgICAgICAtIG1h
cmtkb3duLW1hdGNoLWlubGluZS1nZW5lcmljCiAgICAgICAgICAgMSAgIDAlICAgICAgICAgICAg
ICAgICAgcmUtc2VhcmNoLWZvcndhcmQKICAgICAgICAgICAxICAgMCUgICAgICAgICAgICAgIC0g
bWFya2Rvd24tZm9udGlmeS1zdWItc3VwZXJzY3JpcHRzCiAgICAgICAgICAgMSAgIDAlICAgICAg
ICAgICAgICAgLSBtYXJrZG93bi1zZWFyY2gtdW50aWwtY29uZGl0aW9uCiAgICAgICAgICAgMSAg
IDAlICAgICAgICAgICAgICAgIC0gYXBwbHkKICAgICAgICAgICAxICAgMCUgICAgICAgICAgICAg
ICAgICAgcmUtc2VhcmNoLWZvcndhcmQKICAgICAgICAgICAxICAgMCUgICAgICAgICAgICAgIC0g
bWFya2Rvd24tZm9udGlmeS1wbGFpbi11cmlzCiAgICAgICAgICAgMSAgIDAlICAgICAgICAgICAg
ICAgLSBtYXJrZG93bi1tYXRjaC1wbGFpbi11cmlzCiAgICAgICAgICAgMSAgIDAlICAgICAgICAg
ICAgICAgIC0gbWFya2Rvd24tbWF0Y2gtaW5saW5lLWdlbmVyaWMKICAgICAgICAgICAxICAgMCUg
ICAgICAgICAgICAgICAgIC0gbWFya2Rvd24tY29kZS1ibG9jay1hdC1wb3MKICAgICAgICAgICAx
ICAgMCUgICAgICAgICAgICAgICAgICAtIG1hcmtkb3duLWdldC1lbmNsb3NpbmctZmVuY2VkLWJs
b2NrLWNvbnN0cnVjdAogICAgICAgICAgIDEgICAwJSAgICAgICAgICAgICAgICAgICAgIGNsLWZp
bmQtaWYKICAgICAgICAgICAxICAgMCUgICAgICAgICAgICAgIC0gbWFya2Rvd24tbWF0Y2gtY29k
ZQogICAgICAgICAgIDEgICAwJSAgICAgICAgICAgICAgIC0gbWFya2Rvd24tc2VhcmNoLXVudGls
LWNvbmRpdGlvbgogICAgICAgICAgIDEgICAwJSAgICAgICAgICAgICAgICAtIGFwcGx5CiAgICAg
ICAgICAgMSAgIDAlICAgICAgICAgICAgICAgICAgIHJlLXNlYXJjaC1mb3J3YXJkCiAgICAgICAg
ICAgNSAgIDElICAgICAgICAgICAgIC0gZm9udC1sb2NrLWZvbnRpZnktc3ludGFjdGljYWxseS1y
ZWdpb24KICAgICAgICAgICA1ICAgMSUgICAgICAgICAgICAgIC0gdHJlZXNpdC1mb250LWxvY2st
Zm9udGlmeS1yZWdpb24KICAgICAgICAgICA0ICAgMCUgICAgICAgICAgICAgICAgIHRyZWVzaXQt
cGFyc2VyLXJvb3Qtbm9kZQogICAgICAgICAgIDEgICAwJSAgICAgICAgICAgICAgICAgdHJlZXNp
dC0tZm9udC1sb2NrLWZvbnRpZnktcmVnaW9uLTEKICAgICAgICAgICAzICAgMCUgICAgICAgICAt
IGphdmEtdHMtbW9kZQogICAgICAgICAgIDIgICAwJSAgICAgICAgICAtIHRyZWVzaXQtbWFqb3It
bW9kZS1zZXR1cAogICAgICAgICAgIDIgICAwJSAgICAgICAgICAgLSBrZXltYXAtc2V0CiAgICAg
ICAgICAgMiAgIDAlICAgICAgICAgICAgLSBrZXltYXAtLWNoZWNrCiAgICAgICAgICAgMiAgIDAl
ICAgICAgICAgICAgIC0ga2V5LXZhbGlkLXAKICAgICAgICAgICAyICAgMCUgICAgICAgICAgICAg
ICAgc3RyaW5nLW1hdGNoCiAgICAgICAgICAgMSAgIDAlICAgICAgICAgIC0gdHJlZXNpdC1yZWFk
eS1wCiAgICAgICAgICAgMSAgIDAlICAgICAgICAgICAgIHRyZWVzaXQtbGFuZ3VhZ2UtYXZhaWxh
YmxlLXAKICAgICAgICAgICA3ICAgMSUgICAgICAgLSAjPGNvbXBpbGVkLWZ1bmN0aW9uIDI2MD4K
ICAgICAgICAgICA2ICAgMSUgICAgICAgIC0gIzxjb21waWxlZC1mdW5jdGlvbiBBRjA+CiAgICAg
ICAgICAgNiAgIDElICAgICAgICAgLSBydW4taG9vay13aXRoLWFyZ3MKICAgICAgICAgICA1ICAg
MSUgICAgICAgICAgLSBlbGRvYy1kaXNwbGF5LWluLWVjaG8tYXJlYQogICAgICAgICAgIDMgICAw
JSAgICAgICAgICAgLSBlbGRvYy0tbWVzc2FnZQogICAgICAgICAgIDMgICAwJSAgICAgICAgICAg
IC0gZWxkb2MtbWluaWJ1ZmZlci1tZXNzYWdlCiAgICAgICAgICAgMyAgIDAlICAgICAgICAgICAg
IC0gbWVzc2FnZQogICAgICAgICAgIDMgICAwJSAgICAgICAgICAgICAgICByZWRpc3BsYXlfaW50
ZXJuYWwgKEMgZnVuY3Rpb24pCiAgICAgICAgICAgMSAgIDAlICAgICAgICAgIC0gZWxkb2MtZGlz
cGxheS1pbi1idWZmZXIKICAgICAgICAgICAxICAgMCUgICAgICAgICAgICAgZWxkb2MtLWZvcm1h
dC1kb2MtYnVmZmVyCiAgICAgICAgICAgMSAgIDAlICAgICAgLSAjPGNvbXBpbGVkLWZ1bmN0aW9u
IEMzQz4KICAgICAgICAgICAxICAgMCUgICAgICAgLSBlZ2xvdC0tY2hlY2stb2JqZWN0CiAgICAg
ICAgICAgMSAgIDAlICAgICAgICAgIGVnbG90LS1pbnRlcmZhY2UKICAgICAgICAgICAxICAgMCUg
ICAgICAtIChzZXRmIGpzb25ycGMtLXN5bmMtcmVxdWVzdC1hbGlzdCkKICAgICAgICAgICAxICAg
MCUgICAgICAgICBnZXRoYXNoCiAgICAgICAgICAgOCAgIDElICAgICAtIGFwcGx5CiAgICAgICAg
ICAgNiAgIDElICAgICAgLSBqc29ucnBjLS1ldmVudAogICAgICAgICAgIDYgICAxJSAgICAgICAt
ICM8Y29tcGlsZWQtZnVuY3Rpb24gRkJEPgogICAgICAgICAgIDYgICAxJSAgICAgICAgLSBhcHBs
eQogICAgICAgICAgIDYgICAxJSAgICAgICAgIC0ganNvbnJwYy0tbG9nLWV2ZW50CiAgICAgICAg
ICAgMSAgIDAlICAgICAgICAgIC0ganNvbnJwYy0tc3luYy1yZXF1ZXN0LWFsaXN0CiAgICAgICAg
ICAgMSAgIDAlICAgICAgICAgICAgIGFwcGx5CiAgICAgICAgICAgMSAgIDAlICAgICAgLSBqc29u
cnBjLS1yZXBseQogICAgICAgICAgIDEgICAwJSAgICAgICAtIGpzb25ycGMtY29ubmVjdGlvbi1z
ZW5kCiAgICAgICAgICAgMSAgIDAlICAgICAgICAtIGFwcGx5CiAgICAgICAgICAgMSAgIDAlICAg
ICAgICAgLSAjPGNvbXBpbGVkLWZ1bmN0aW9uIDIwMT4KICAgICAgICAgICAxICAgMCUgICAgICAg
ICAgLSBqc29ucnBjLS1qc29uLWVuY29kZQogICAgICAgICAgIDEgICAwJSAgICAgICAgICAgICBq
c29uLXNlcmlhbGl6ZQogICAgICAgICAgIDEgICAwJSAgICAgLSBqc29ucnBjLWNvbnZlcnQtZnJv
bS1lbmRwb2ludAogICAgICAgICAgIDEgICAwJSAgICAgICAgY2wtdHlwZS1vZgogICAgICAgICAg
IDEgICAwJSAgICAgICBjbC0tZG8tcmVtZgogICAgICAgICAgIDQgICAwJSAgICAtICM8Y29tcGls
ZWQtZnVuY3Rpb24gMTU3PgogICAgICAgICAgIDQgICAwJSAgICAgLSBraWxsLWJ1ZmZlcgogICAg
ICAgICAgIDIgICAwJSAgICAgIC0gcmVwbGFjZS1idWZmZXItaW4td2luZG93cwogICAgICAgICAg
IDEgICAwJSAgICAgICAgIHVucmVjb3JkLXdpbmRvdy1idWZmZXIKICAgICAgICAgICAxICAgMCUg
ICAgICBnZW5lcmF0ZS1uZXctYnVmZmVyCiAgICAgICAgICAyMSAgIDQlICAgLSAjPHN1YnItbmF0
aXZlLWVsaXNwIEY2MTZlNmY2ZTc5NmQ2Zjc1NzMyZDZjNjE2ZDYyNjQ2MV9hbm9ueW1vdXNfbGFt
YmRhXzEyPgogICAgICAgICAgMjEgICA0JSAgICAtIGVsZG9jLXByaW50LWN1cnJlbnQtc3ltYm9s
LWluZm8KICAgICAgICAgIDIxICAgNCUgICAgIC0gZWxkb2MtLWludm9rZS1zdHJhdGVneQogICAg
ICAgICAgMjEgICA0JSAgICAgIC0gZWxkb2MtZG9jdW1lbnRhdGlvbi1jb21wb3NlCiAgICAgICAg
ICAxMSAgIDIlICAgICAgIC0gZWdsb3QtaG92ZXItZWxkb2MtZnVuY3Rpb24KICAgICAgICAgICA1
ICAgMSUgICAgICAgIC0gZWdsb3QtLVRleHREb2N1bWVudFBvc2l0aW9uUGFyYW1zCiAgICAgICAg
ICAgNSAgIDElICAgICAgICAgLSBlZ2xvdC0tVGV4dERvY3VtZW50SWRlbnRpZmllcgogICAgICAg
ICAgIDUgICAxJSAgICAgICAgICAtIGVnbG90LXBhdGgtdG8tdXJpCiAgICAgICAgICAgNSAgIDEl
ICAgICAgICAgICAtIGZpbGUtdHJ1ZW5hbWUKICAgICAgICAgICA1ICAgMSUgICAgICAgICAgICAt
IGZpbGUtdHJ1ZW5hbWUKICAgICAgICAgICA1ICAgMSUgICAgICAgICAgICAgLSBmaWxlLXRydWVu
YW1lCiAgICAgICAgICAgNCAgIDAlICAgICAgICAgICAgICAtIGZpbGUtdHJ1ZW5hbWUKICAgICAg
ICAgICAzICAgMCUgICAgICAgICAgICAgICAtIGZpbGUtdHJ1ZW5hbWUKICAgICAgICAgICAzICAg
MCUgICAgICAgICAgICAgICAgLSBmaWxlLXRydWVuYW1lCiAgICAgICAgICAgMyAgIDAlICAgICAg
ICAgICAgICAgICAtIGZpbGUtdHJ1ZW5hbWUKICAgICAgICAgICAxICAgMCUgICAgICAgICAgICAg
ICAgICAtIGZpbGUtdHJ1ZW5hbWUKICAgICAgICAgICAxICAgMCUgICAgICAgICAgICAgICAgICAg
LSBmaWxlLXRydWVuYW1lCiAgICAgICAgICAgMSAgIDAlICAgICAgICAgICAgICAgICAgICAtIGZp
bGUtdHJ1ZW5hbWUKICAgICAgICAgICAxICAgMCUgICAgICAgICAgICAgICAgICAgICAtIGZpbGUt
dHJ1ZW5hbWUKICAgICAgICAgICAxICAgMCUgICAgICAgICAgICAgICAgICAgICAgICBmaWxlLXRy
dWVuYW1lCiAgICAgICAgICAgNSAgIDElICAgICAgICAtIGVnbG90LS1oaWdobGlnaHQtcGlnZ3li
YWNrCiAgICAgICAgICAgNSAgIDElICAgICAgICAgLSBlZ2xvdC0tVGV4dERvY3VtZW50UG9zaXRp
b25QYXJhbXMKICAgICAgICAgICA1ICAgMSUgICAgICAgICAgLSBlZ2xvdC0tVGV4dERvY3VtZW50
SWRlbnRpZmllcgogICAgICAgICAgIDUgICAxJSAgICAgICAgICAgLSBlZ2xvdC1wYXRoLXRvLXVy
aQogICAgICAgICAgIDUgICAxJSAgICAgICAgICAgIC0gZmlsZS10cnVlbmFtZQogICAgICAgICAg
IDUgICAxJSAgICAgICAgICAgICAtIGZpbGUtdHJ1ZW5hbWUKICAgICAgICAgICA0ICAgMCUgICAg
ICAgICAgICAgIC0gZmlsZS10cnVlbmFtZQogICAgICAgICAgIDQgICAwJSAgICAgICAgICAgICAg
IC0gZmlsZS10cnVlbmFtZQogICAgICAgICAgIDMgICAwJSAgICAgICAgICAgICAgICAtIGZpbGUt
dHJ1ZW5hbWUKICAgICAgICAgICAyICAgMCUgICAgICAgICAgICAgICAgIC0gZmlsZS10cnVlbmFt
ZQogICAgICAgICAgIDIgICAwJSAgICAgICAgICAgICAgICAgIC0gZmlsZS10cnVlbmFtZQogICAg
ICAgICAgIDIgICAwJSAgICAgICAgICAgICAgICAgICAtIGZpbGUtdHJ1ZW5hbWUKICAgICAgICAg
ICAxICAgMCUgICAgICAgICAgICAgICAgICAgICAgZmlsZS10cnVlbmFtZQogICAgICAgICAgIDEg
ICAwJSAgICAgICAgLSBqc29ucnBjLWFzeW5jLXJlcXVlc3QKICAgICAgICAgICAxICAgMCUgICAg
ICAgICAtIGpzb25ycGMtLWFzeW5jLXJlcXVlc3QtMQogICAgICAgICAgIDEgICAwJSAgICAgICAg
ICAtIGpzb25ycGMtY29ubmVjdGlvbi1zZW5kCiAgICAgICAgICAgMSAgIDAlICAgICAgICAgICAt
IGFwcGx5CiAgICAgICAgICAgMSAgIDAlICAgICAgICAgICAgLSAjPGNvbXBpbGVkLWZ1bmN0aW9u
IDIwMT4KICAgICAgICAgICAxICAgMCUgICAgICAgICAgICAgICBmb3JtYXQKICAgICAgICAgIDEw
ICAgMiUgICAgICAgLSBlZ2xvdC1zaWduYXR1cmUtZWxkb2MtZnVuY3Rpb24KICAgICAgICAgIDEw
ICAgMiUgICAgICAgIC0gZWdsb3QtLVRleHREb2N1bWVudFBvc2l0aW9uUGFyYW1zCiAgICAgICAg
ICAxMCAgIDIlICAgICAgICAgLSBlZ2xvdC0tVGV4dERvY3VtZW50SWRlbnRpZmllcgogICAgICAg
ICAgMTAgICAyJSAgICAgICAgICAtIGVnbG90LXBhdGgtdG8tdXJpCiAgICAgICAgICAxMCAgIDIl
ICAgICAgICAgICAtIGZpbGUtdHJ1ZW5hbWUKICAgICAgICAgIDEwICAgMiUgICAgICAgICAgICAt
IGZpbGUtdHJ1ZW5hbWUKICAgICAgICAgICA4ICAgMSUgICAgICAgICAgICAgLSBmaWxlLXRydWVu
YW1lCiAgICAgICAgICAgNyAgIDElICAgICAgICAgICAgICAtIGZpbGUtdHJ1ZW5hbWUKICAgICAg
ICAgICA3ICAgMSUgICAgICAgICAgICAgICAtIGZpbGUtdHJ1ZW5hbWUKICAgICAgICAgICA3ICAg
MSUgICAgICAgICAgICAgICAgLSBmaWxlLXRydWVuYW1lCiAgICAgICAgICAgNyAgIDElICAgICAg
ICAgICAgICAgICAtIGZpbGUtdHJ1ZW5hbWUKICAgICAgICAgICA3ICAgMSUgICAgICAgICAgICAg
ICAgICAtIGZpbGUtdHJ1ZW5hbWUKICAgICAgICAgICA2ICAgMSUgICAgICAgICAgICAgICAgICAg
LSBmaWxlLXRydWVuYW1lCiAgICAgICAgICAgNiAgIDElICAgICAgICAgICAgICAgICAgICAtIGZp
bGUtdHJ1ZW5hbWUKICAgICAgICAgICA2ICAgMSUgICAgICAgICAgICAgICAgICAgICAtIGZpbGUt
dHJ1ZW5hbWUKICAgICAgICAgICA1ICAgMSUgICAgICAgICAgICAgICAgICAgICAgLSBmaWxlLXRy
dWVuYW1lCiAgICAgICAgICAgNCAgIDAlICAgICAgICAgICAgICAgICAgICAgICAtIGZpbGUtdHJ1
ZW5hbWUKICAgICAgICAgICAzICAgMCUgICAgICAgICAgICAgICAgICAgICAgICAtIGZpbGUtdHJ1
ZW5hbWUKICAgICAgICAgICAyICAgMCUgICAgICAgICAgICAgICAgICAgICAgICAgLSBmaWxlLXRy
dWVuYW1lCiAgICAgICAgICAgMSAgIDAlICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYW1w
LWNvbXBsZXRpb24tZmlsZS1uYW1lLWhhbmRsZXIKICAgICAgICAgICAxICAgMCUgICAgICAgICAg
ICAgICAgICAgICAgICAgLSB0cmFtcC1jb21wbGV0aW9uLWZpbGUtbmFtZS1oYW5kbGVyCiAgICAg
ICAgICAgMSAgIDAlICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYW1wLXJ1bi1yZWFsLWhh
bmRsZXIKICAgICAgICAgICAxICAgMCUgICAtICM8c3Vici1uYXRpdmUtZWxpc3AgRjYxNmU2ZjZl
Nzk2ZDZmNzU3MzJkNmM2MTZkNjI2NDYxX2Fub255bW91c19sYW1iZGFfOT4KICAgICAgICAgICAx
ICAgMCUgICAgICBqaXQtbG9jay1jb250ZXh0LWZvbnRpZnkKICAgICAgICAgIDk0ICAxOSUgLSBy
ZWRpc3BsYXlfaW50ZXJuYWwgKEMgZnVuY3Rpb24pCiAgICAgICAgICAgOCAgIDElICAtIGV2YWwK
ICAgICAgICAgICA1ICAgMSUgICAtIGVnbG90LS1tb2RlLWxpbmUtZm9ybWF0CiAgICAgICAgICAg
MyAgIDAlICAgIC0gZWdsb3QtcHJvamVjdC1uaWNrbmFtZQogICAgICAgICAgIDEgICAwJSAgICAg
ICBnZXRoYXNoCiAgICAgICAgICAgMSAgIDAlICAgICAgIGNsLXR5cGUtb2YKICAgICAgICAgICAx
ICAgMCUgICAgICAgYXBwbHkKICAgICAgICAgICAxICAgMCUgICAgLSBlZ2xvdC0tcHJvZ3Jlc3Mt
cmVwb3J0ZXJzCiAgICAgICAgICAgMSAgIDAlICAgICAtIGFwcGx5CiAgICAgICAgICAgMSAgIDAl
ICAgICAgICAjPGNvbXBpbGVkLWZ1bmN0aW9uIENDMz4KICAgICAgICAgICAyICAgMCUgICAtIGlm
CiAgICAgICAgICAgMiAgIDAlICAgICAgZnJhbWUtcGFyYW1ldGVyCiAgICAgICAgICAgMSAgIDAl
ICAgLSBmbHltYWtlLS1tb2RlLWxpbmUtZXhjZXB0aW9uCiAgICAgICAgICAgMSAgIDAlICAgIC0g
Zmx5bWFrZS1yZXBvcnRpbmctYmFja2VuZHMKICAgICAgICAgICAxICAgMCUgICAgICAgY2FsbGVk
LWludGVyYWN0aXZlbHktcAogICAgICAgICAgODUgIDE3JSAtICM8Y29tcGlsZWQtZnVuY3Rpb24g
RkI4PgogICAgICAgICAgNzQgIDE1JSAgICBuYXRpdmUtZWxpc3AtbG9hZAogICAgICAgICAgIDcg
ICAxJSAgLSBjb21wLXJ1bi1hc3luYy13b3JrZXJzCiAgICAgICAgICAgMyAgIDAlICAgLSBtYXBj
YXIKICAgICAgICAgICAzICAgMCUgICAgICBwcmluMS10by1zdHJpbmcKICAgICAgICAgICAyICAg
MCUgICAtIGZpbGUtbmFtZS1iYXNlCiAgICAgICAgICAgMSAgIDAlICAgICAgZmlsZS1uYW1lLXNh
bnMtZXh0ZW5zaW9uCiAgICAgICAgICAgMSAgIDAlICAgLSB3cml0ZS1yZWdpb24KICAgICAgICAg
ICAxICAgMCUgICAgLSBzZWxlY3Qtc2FmZS1jb2Rpbmctc3lzdGVtCiAgICAgICAgICAgMSAgIDAl
ICAgICAtIGZpbmQtYXV0by1jb2RpbmcKICAgICAgICAgICAxICAgMCUgICAgICAgIGF1dG8tY29k
aW5nLWFsaXN0LWxvb2t1cAogICAgICAgICAgIDEgICAwJSAgICAgbWFrZS1wcm9jZXNzCiAgICAg
ICAgICAgMiAgIDAlICAgIGNvbXAtZWwtdG8tZWxuLWZpbGVuYW1lCiAgICAgICAgICAgMSAgIDAl
ICAgIGRlbGV0ZS1maWxlCiAgICAgICAgICAgMSAgIDAlICAgIGNvbXAtYWNjZXB0LWFuZC1wcm9j
ZXNzLWFzeW5jLW91dHB1dAogICAgICAgICAgNjcgIDE0JSAtIGNvbW1hbmQtZXhlY3V0ZQogICAg
ICAgICAgNjUgIDEzJSAgLSBieXRlLWNvZGUKICAgICAgICAgIDY1ICAxMyUgICAtIHJlYWQtZXh0
ZW5kZWQtY29tbWFuZAogICAgICAgICAgNjUgIDEzJSAgICAtIHJlYWQtZXh0ZW5kZWQtY29tbWFu
ZC0xCiAgICAgICAgICA2NSAgMTMlICAgICAtIGNvbXBsZXRpbmctcmVhZC1kZWZhdWx0CiAgICAg
ICAgICA2NSAgMTMlICAgICAgLSBhcHBseQogICAgICAgICAgNjUgIDEzJSAgICAgICAtIHZlcnRp
Y28tLWFkdmljZQogICAgICAgICAgNjUgIDEzJSAgICAgICAgLSBhcHBseQogICAgICAgICAgNjUg
IDEzJSAgICAgICAgIC0gIzxzdWJyLW5hdGl2ZS1lbGlzcCBjb21wbGV0aW5nLXJlYWQtZGVmYXVs
dD4KICAgICAgICAgIDE5ICAgMyUgICAgICAgICAgLSB2ZXJ0aWNvLS1leGhpYml0CiAgICAgICAg
ICAxMyAgIDIlICAgICAgICAgICAtIHZlcnRpY28tLXVwZGF0ZQogICAgICAgICAgMTMgICAyJSAg
ICAgICAgICAgIC0gdmVydGljby0tcmVjb21wdXRlCiAgICAgICAgICAxMSAgIDIlICAgICAgICAg
ICAgIC0gdmVydGljby0tZmlsdGVyLWNvbXBsZXRpb25zCiAgICAgICAgICAxMSAgIDIlICAgICAg
ICAgICAgICAtIGNvbXBsZXRpb24tYWxsLWNvbXBsZXRpb25zCiAgICAgICAgICAxMSAgIDIlICAg
ICAgICAgICAgICAgLSBjb21wbGV0aW9uLS1udGgtY29tcGxldGlvbgogICAgICAgICAgMTEgICAy
JSAgICAgICAgICAgICAgICAtIHNlcS1zb21lCiAgICAgICAgICAxMSAgIDIlICAgICAgICAgICAg
ICAgICAtIHNlcS1kbwogICAgICAgICAgMTEgICAyJSAgICAgICAgICAgICAgICAgIC0gbWFwYwog
ICAgICAgICAgMTEgICAyJSAgICAgICAgICAgICAgICAgICAtICM8Y29tcGlsZWQtZnVuY3Rpb24g
RDg4PgogICAgICAgICAgMTEgICAyJSAgICAgICAgICAgICAgICAgICAgLSAjPGNvbXBpbGVkLWZ1
bmN0aW9uIERCQj4KICAgICAgICAgIDExICAgMiUgICAgICAgICAgICAgICAgICAgICAtIG9yZGVy
bGVzcy1hbGwtY29tcGxldGlvbnMKICAgICAgICAgIDExICAgMiUgICAgICAgICAgICAgICAgICAg
ICAgLSBvcmRlcmxlc3MtLWZpbHRlcgogICAgICAgICAgMTEgICAyJSAgICAgICAgICAgICAgICAg
ICAgICAgLSAjPHN1YnItbmF0aXZlLWVsaXNwIEY2MTZlNmY2ZTc5NmQ2Zjc1NzMyZDZjNjE2ZDYy
NjQ2MV9hbm9ueW1vdXNfbGFtYmRhXzU2PgogICAgICAgICAgMTEgICAyJSAgICAgICAgICAgICAg
ICAgICAgICAgIC0gY29tcGxldGUtd2l0aC1hY3Rpb24KICAgICAgICAgIDExICAgMiUgICAgICAg
ICAgICAgICAgICAgICAgICAgLSBhbGwtY29tcGxldGlvbnMKICAgICAgICAgICA0ICAgMCUgICAg
ICAgICAgICAgICAgICAgICAgICAgIC0gIzxjb21waWxlZC1mdW5jdGlvbiBERTY+CiAgICAgICAg
ICAgMiAgIDAlICAgICAgICAgICAgICAgICAgICAgICAgICAgLSAjPGNvbXBpbGVkLWZ1bmN0aW9u
IDg0RT4KICAgICAgICAgICAxICAgMCUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21t
YW5kcAogICAgICAgICAgIDIgICAwJSAgICAgICAgICAgICAtIHZlcnRpY28tc29ydC1oaXN0b3J5
LWxlbmd0aC1hbHBoYQogICAgICAgICAgIDEgICAwJSAgICAgICAgICAgICAgLSAjPHN1YnItbmF0
aXZlLWVsaXNwIEY2MTZlNmY2ZTc5NmQ2Zjc1NzMyZDZjNjE2ZDYyNjQ2MV9hbm9ueW1vdXNfbGFt
YmRhXzE0PgogICAgICAgICAgIDEgICAwJSAgICAgICAgICAgICAgICAgIzxwcmltaXRpdmUtZnVu
Y3Rpb24gc3RyaW5nLWxlc3NwPgogICAgICAgICAgIDMgICAwJSAgICAgICAgICAgLSB2ZXJ0aWNv
LS1hcnJhbmdlLWNhbmRpZGF0ZXMKICAgICAgICAgICAzICAgMCUgICAgICAgICAgICAtIHZlcnRp
Y28tLWFmZml4YXRlCiAgICAgICAgICAgMyAgIDAlICAgICAgICAgICAgIC0gcmVhZC1leHRlbmRl
ZC1jb21tYW5kLS1hZmZpeGF0aW9uCiAgICAgICAgICAgMSAgIDAlICAgICAgICAgICAgICAgICM8
c3Vici1uYXRpdmUtZWxpc3AgRjYxNmU2ZjZlNzk2ZDZmNzU3MzJkNmM2MTZkNjI2NDYxX2Fub255
bW91c19sYW1iZGFfNjE+CiAgICAgICAgICAgMyAgIDAlICAgICAgICAgICAtIHZlcnRpY28tLWRp
c3BsYXktY2FuZGlkYXRlcwogICAgICAgICAgIDIgICAwJSAgICAgICAgICAgIC0gdmVydGljby0t
cmVzaXplLXdpbmRvdwogICAgICAgICAgIDIgICAwJSAgICAgICAgICAgICAgIHdpbmRvdy10ZXh0
LXBpeGVsLXNpemUKICAgICAgICAgICAxICAgMCUgICAgICAgICAgICAgIG1vdmUtb3ZlcmxheQog
ICAgICAgICAgMTkgICAzJSAgICAgICAgICAtICM8Y29tcGlsZWQtZnVuY3Rpb24gMTJBPgogICAg
ICAgICAgMTkgICAzJSAgICAgICAgICAgICBuYXRpdmUtZWxpc3AtbG9hZAogICAgICAgICAgMTgg
ICAzJSAgICAgICAgICAgIHJlZGlzcGxheV9pbnRlcm5hbCAoQyBmdW5jdGlvbikKICAgICAgICAg
ICAyICAgMCUgIC0gZnVuY2FsbC1pbnRlcmFjdGl2ZWx5CiAgICAgICAgICAgMiAgIDAlICAgLSBm
aWxlLW5vdGlmeS1oYW5kbGUtZXZlbnQKICAgICAgICAgICAyICAgMCUgICAgLSBmaWxlLW5vdGlm
eS0tY2FsbGJhY2staW5vdGlmeQogICAgICAgICAgIDIgICAwJSAgICAgLSBmaWxlLW5vdGlmeS0t
aGFuZGxlLWV2ZW50CiAgICAgICAgICAgMiAgIDAlICAgICAgLSBmaWxlLW5vdGlmeS0tY2FsbC1o
YW5kbGVyCiAgICAgICAgICAgMiAgIDAlICAgICAgIC0gIzxjb21waWxlZC1mdW5jdGlvbiA3OUY+
CiAgICAgICAgICAgMSAgIDAlICAgICAgICAtICM8Y29tcGlsZWQtZnVuY3Rpb24gMjY2PgogICAg
ICAgICAgIDEgICAwJSAgICAgICAgIC0gIzxjb21waWxlZC1mdW5jdGlvbiAwOEY+CiAgICAgICAg
ICAgMSAgIDAlICAgICAgICAgICAgcmUtc2VhcmNoLWZvcndhcmQKICAgICAgICAgICAxICAgMCUg
ICAgICAgIC0gZWdsb3QtcGF0aC10by11cmkKICAgICAgICAgICAxICAgMCUgICAgICAgICAtIGZp
bGUtdHJ1ZW5hbWUKICAgICAgICAgICAxICAgMCUgICAgICAgICAgLSBmaWxlLXRydWVuYW1lCiAg
ICAgICAgICAgMSAgIDAlICAgICAgICAgICAtIGZpbGUtdHJ1ZW5hbWUKICAgICAgICAgICAxICAg
MCUgICAgICAgICAgICAgIGZpbGUtdHJ1ZW5hbWUKICAgICAgICAgIDExICAgMiUgLSBhcHBseQog
ICAgICAgICAgMTEgICAyJSAgICBuYXRpdmUtLWNvbXBpbGUtYXN5bmMKICAgICAgICAgICA2ICAg
MSUgLSBqc29ucnBjLS1wcm9jZXNzLWZpbHRlcgogICAgICAgICAgIDQgICAwJSAgLSBqc29ucnBj
LS1qc29uLXJlYWQKICAgICAgICAgICA0ICAgMCUgICAgIGpzb24tcGFyc2UtYnVmZmVyCiAgICAg
ICAgICAgMSAgIDAlICAtICM8Y29tcGlsZWQtZnVuY3Rpb24gNEQ2PgogICAgICAgICAgIDEgICAw
JSAgIC0gdGltZXItc2V0LXRpbWUKICAgICAgICAgICAxICAgMCUgICAgLSB0aW1lci0tdGltZS1z
ZXR0ZXIKICAgICAgICAgICAxICAgMCUgICAgICAgdGltZXJwCiAgICAgICAgICAgMSAgIDAlICAt
IGpzb25ycGMtLWV4cGVjdGVkLWJ5dGVzCiAgICAgICAgICAgMSAgIDAlICAgICBnZXRoYXNoCiAg
ICAgICAgICAgMiAgIDAlICAgaW50ZXJuYWwtZGVmYXVsdC1wcm9jZXNzLWZpbHRlcgogICAgICAg
ICAgIDEgICAwJSArIC4uLgogICAgICAgICAgIDEgICAwJSArIGVsZG9jLXByZS1jb21tYW5kLXJl
ZnJlc2gtZWNoby1hcmVhCg==
--=-=-=
Content-Type: application/octet-stream
Content-Disposition: attachment; filename=emacs-30-new-file-truename
Content-Transfer-Encoding: base64

ICAgICAgICAgMTA1ICA0NyUgLSByZWRpc3BsYXlfaW50ZXJuYWwgKEMgZnVuY3Rpb24pCiAgICAg
ICAgICAgMiAgIDAlICAtIHJlZGlzcGxheS0tcHJlLXJlZGlzcGxheS1mdW5jdGlvbnMKICAgICAg
ICAgICAxICAgMCUgICAgIHJ1bi1ob29rLXdpdGgtYXJncwogICAgICAgICAgIDEgICAwJSAgLSBl
dmFsCiAgICAgICAgICAgMSAgIDAlICAgLSBpZgogICAgICAgICAgIDEgICAwJSAgICAgIGZyYW1l
LXBhcmFtZXRlcgogICAgICAgICAgNTUgIDI1JSAtIGNvbW1hbmQtZXhlY3V0ZQogICAgICAgICAg
NTQgIDI0JSAgLSBieXRlLWNvZGUKICAgICAgICAgIDU0ICAyNCUgICAtIHJlYWQtZXh0ZW5kZWQt
Y29tbWFuZAogICAgICAgICAgNTQgIDI0JSAgICAtIHJlYWQtZXh0ZW5kZWQtY29tbWFuZC0xCiAg
ICAgICAgICA1NCAgMjQlICAgICAtIGNvbXBsZXRpbmctcmVhZC1kZWZhdWx0CiAgICAgICAgICA1
NCAgMjQlICAgICAgLSBhcHBseQogICAgICAgICAgNTQgIDI0JSAgICAgICAtIHZlcnRpY28tLWFk
dmljZQogICAgICAgICAgNTQgIDI0JSAgICAgICAgLSBhcHBseQogICAgICAgICAgNTQgIDI0JSAg
ICAgICAgIC0gIzxzdWJyLW5hdGl2ZS1lbGlzcCBjb21wbGV0aW5nLXJlYWQtZGVmYXVsdD4KICAg
ICAgICAgIDE5ICAgOCUgICAgICAgICAgLSB2ZXJ0aWNvLS1leGhpYml0CiAgICAgICAgICAxMiAg
IDUlICAgICAgICAgICAtIHZlcnRpY28tLXVwZGF0ZQogICAgICAgICAgMTIgICA1JSAgICAgICAg
ICAgIC0gdmVydGljby0tcmVjb21wdXRlCiAgICAgICAgICAxMSAgIDUlICAgICAgICAgICAgIC0g
dmVydGljby0tZmlsdGVyLWNvbXBsZXRpb25zCiAgICAgICAgICAxMSAgIDUlICAgICAgICAgICAg
ICAtIGNvbXBsZXRpb24tYWxsLWNvbXBsZXRpb25zCiAgICAgICAgICAxMSAgIDUlICAgICAgICAg
ICAgICAgLSBjb21wbGV0aW9uLS1udGgtY29tcGxldGlvbgogICAgICAgICAgMTEgICA1JSAgICAg
ICAgICAgICAgICAtIHNlcS1zb21lCiAgICAgICAgICAxMSAgIDUlICAgICAgICAgICAgICAgICAt
IHNlcS1kbwogICAgICAgICAgMTEgICA1JSAgICAgICAgICAgICAgICAgIC0gbWFwYwogICAgICAg
ICAgMTEgICA1JSAgICAgICAgICAgICAgICAgICAtICM8Y29tcGlsZWQtZnVuY3Rpb24gMjEwPgog
ICAgICAgICAgMTEgICA1JSAgICAgICAgICAgICAgICAgICAgLSAjPGNvbXBpbGVkLWZ1bmN0aW9u
IDI3OT4KICAgICAgICAgIDExICAgNSUgICAgICAgICAgICAgICAgICAgICAtIG9yZGVybGVzcy1h
bGwtY29tcGxldGlvbnMKICAgICAgICAgIDExICAgNSUgICAgICAgICAgICAgICAgICAgICAgLSBv
cmRlcmxlc3MtLWZpbHRlcgogICAgICAgICAgMTEgICA1JSAgICAgICAgICAgICAgICAgICAgICAg
LSAjPHN1YnItbmF0aXZlLWVsaXNwIEY2MTZlNmY2ZTc5NmQ2Zjc1NzMyZDZjNjE2ZDYyNjQ2MV9h
bm9ueW1vdXNfbGFtYmRhXzU2PgogICAgICAgICAgMTEgICA1JSAgICAgICAgICAgICAgICAgICAg
ICAgIC0gY29tcGxldGUtd2l0aC1hY3Rpb24KICAgICAgICAgIDExICAgNSUgICAgICAgICAgICAg
ICAgICAgICAgICAgLSBhbGwtY29tcGxldGlvbnMKICAgICAgICAgICA4ICAgMyUgICAgICAgICAg
ICAgICAgICAgICAgICAgIC0gIzxjb21waWxlZC1mdW5jdGlvbiA5Q0I+CiAgICAgICAgICAgNCAg
IDElICAgICAgICAgICAgICAgICAgICAgICAgICAgLSAjPGNvbXBpbGVkLWZ1bmN0aW9uIDVDMD4K
ICAgICAgICAgICAzICAgMSUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21tYW5kcAog
ICAgICAgICAgIDEgICAwJSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVyc2lvbi10by1s
aXN0CiAgICAgICAgICAgMSAgIDAlICAgICAgICAgICAgIC0gdmVydGljby1zb3J0LWhpc3Rvcnkt
bGVuZ3RoLWFscGhhCiAgICAgICAgICAgMSAgIDAlICAgICAgICAgICAgICAtICM8c3Vici1uYXRp
dmUtZWxpc3AgRjYxNmU2ZjZlNzk2ZDZmNzU3MzJkNmM2MTZkNjI2NDYxX2Fub255bW91c19sYW1i
ZGFfMTQ+CiAgICAgICAgICAgMSAgIDAlICAgICAgICAgICAgICAgICAjPHByaW1pdGl2ZS1mdW5j
dGlvbiBzdHJpbmctbGVzc3A+CiAgICAgICAgICAgNSAgIDIlICAgICAgICAgICAtIHZlcnRpY28t
LWFycmFuZ2UtY2FuZGlkYXRlcwogICAgICAgICAgIDQgICAxJSAgICAgICAgICAgIC0gdmVydGlj
by0tYWZmaXhhdGUKICAgICAgICAgICA0ICAgMSUgICAgICAgICAgICAgLSByZWFkLWV4dGVuZGVk
LWNvbW1hbmQtLWFmZml4YXRpb24KICAgICAgICAgICAzICAgMSUgICAgICAgICAgICAgICAgIzxz
dWJyLW5hdGl2ZS1lbGlzcCBGNjE2ZTZmNmU3OTZkNmY3NTczMmQ2YzYxNmQ2MjY0NjFfYW5vbnlt
b3VzX2xhbWJkYV82MT4KICAgICAgICAgICAxICAgMCUgICAgICAgICAgICAtIHZlcnRpY28tLXdp
bmRvdy13aWR0aAogICAgICAgICAgIDEgICAwJSAgICAgICAgICAgICAgIGdldC1idWZmZXItd2lu
ZG93LWxpc3QKICAgICAgICAgICAxICAgMCUgICAgICAgICAgIC0gdmVydGljby0tZGlzcGxheS1j
b3VudAogICAgICAgICAgIDEgICAwJSAgICAgICAgICAgICAgdmVydGljby0tZm9ybWF0LWNvdW50
CiAgICAgICAgICAgMSAgIDAlICAgICAgICAgICAtIHZlcnRpY28tLWRpc3BsYXktY2FuZGlkYXRl
cwogICAgICAgICAgIDEgICAwJSAgICAgICAgICAgIC0gdmVydGljby0tcmVzaXplLXdpbmRvdwog
ICAgICAgICAgIDEgICAwJSAgICAgICAgICAgICAgIHdpbmRvdy10ZXh0LXBpeGVsLXNpemUKICAg
ICAgICAgIDE4ICAgOCUgICAgICAgICAgLSByZWRpc3BsYXlfaW50ZXJuYWwgKEMgZnVuY3Rpb24p
CiAgICAgICAgICAgMSAgIDAlICAgICAgICAgICAgIHJlZGlzcGxheS0tcHJlLXJlZGlzcGxheS1m
dW5jdGlvbnMKICAgICAgICAgICAxICAgMCUgICAgICAgICAgLSB0aW1lci1ldmVudC1oYW5kbGVy
CiAgICAgICAgICAgMSAgIDAlICAgICAgICAgICAtIGFwcGx5CiAgICAgICAgICAgMSAgIDAlICAg
ICAgICAgICAgLSBzaG93LXBhcmVuLWZ1bmN0aW9uCiAgICAgICAgICAgMSAgIDAlICAgICAgICAg
ICAgIC0gc2hvdy1wYXJlbi0tZGVmYXVsdAogICAgICAgICAgIDEgICAwJSAgICAgICAgICAgICAg
ICBzaG93LXBhcmVuLS1sb2NhdGUtbmVhci1wYXJlbgogICAgICAgICAgIDEgICAwJSAgLSBmdW5j
YWxsLWludGVyYWN0aXZlbHkKICAgICAgICAgICAxICAgMCUgICAgIGV4ZWN1dGUtZXh0ZW5kZWQt
Y29tbWFuZAogICAgICAgICAgNTMgIDI0JSAtIHRpbWVyLWV2ZW50LWhhbmRsZXIKICAgICAgICAg
IDUzICAyNCUgIC0gYXBwbHkKICAgICAgICAgIDM3ICAxNiUgICAtICM8Y29tcGlsZWQtZnVuY3Rp
b24gQTM0PgogICAgICAgICAgMzYgIDE2JSAgICAtIGpzb25ycGMtY29ubmVjdGlvbi1yZWNlaXZl
CiAgICAgICAgICAzNiAgMTYlICAgICAtIGpzb25ycGMtLWNvbnRpbnVlCiAgICAgICAgICAzNCAg
MTUlICAgICAgLSAjPGNvbXBpbGVkLWZ1bmN0aW9uIDFBNj4KICAgICAgICAgIDMxICAxNCUgICAg
ICAgLSBlZ2xvdC0taG92ZXItaW5mbwogICAgICAgICAgMzEgIDE0JSAgICAgICAgLSBlZ2xvdC0t
Zm9ybWF0LW1hcmt1cAogICAgICAgICAgMjAgICA5JSAgICAgICAgIC0gZ2ZtLXZpZXctbW9kZQog
ICAgICAgICAgIDUgICAyJSAgICAgICAgICAtIGJ5dGUtY29kZQogICAgICAgICAgIDQgICAxJSAg
ICAgICAgICAgICByZXF1aXJlCiAgICAgICAgICAgMSAgIDAlICAgICAgICAgICAtIGN1c3RvbS1k
ZWNsYXJlLXZhcmlhYmxlCiAgICAgICAgICAgMSAgIDAlICAgICAgICAgICAgLSBjdXN0b20taGFu
ZGxlLWtleXdvcmQKICAgICAgICAgICAxICAgMCUgICAgICAgICAgICAgICBjdXN0b20tYWRkLXRv
LWdyb3VwCiAgICAgICAgICAgNCAgIDElICAgICAgICAgIC0gZ2ZtLW1vZGUKICAgICAgICAgICA0
ICAgMSUgICAgICAgICAgIC0gbWFya2Rvd24tbW9kZQogICAgICAgICAgIDQgICAxJSAgICAgICAg
ICAgIC0gc3ludGF4LXByb3BlcnRpemUKICAgICAgICAgICAyICAgMCUgICAgICAgICAgICAgLSBt
YXJrZG93bi1zeW50YXgtcHJvcGVydGl6ZQogICAgICAgICAgIDEgICAwJSAgICAgICAgICAgICAg
LSBtYXJrZG93bi1zeW50YXgtcHJvcGVydGl6ZS1saXN0LWl0ZW1zCiAgICAgICAgICAgMSAgIDAl
ICAgICAgICAgICAgICAgLSBtYXJrZG93bi0tY3VyLWxpc3QtaXRlbS1ib3VuZHMKICAgICAgICAg
ICAxICAgMCUgICAgICAgICAgICAgICAgICBtYXJrZG93bi1jdXItbGlzdC1pdGVtLWVuZAogICAg
ICAgICAgIDEgICAwJSAgICAgICAgICAgICAgLSBtYXJrZG93bi1zeW50YXgtcHJvcGVydGl6ZS1w
cmUtYmxvY2tzCiAgICAgICAgICAgMSAgIDAlICAgICAgICAgICAgICAgLSBtYXJrZG93bi1jYWxj
dWxhdGUtbGlzdC1sZXZlbHMKICAgICAgICAgICAxICAgMCUgICAgICAgICAgICAgICAgICBtYXJr
ZG93bi1zZWFyY2gtYmFja3dhcmQtYmFzZWxpbmUKICAgICAgICAgICAyICAgMCUgICAgICAgICAg
ICAgICAjPGNvbXBpbGVkLWZ1bmN0aW9uIEJBMj4KICAgICAgICAgICAzICAgMSUgICAgICAgICAg
ICByZXF1aXJlCiAgICAgICAgICAgMyAgIDElICAgICAgICAgIC0gcmVhZC1vbmx5LW1vZGUKICAg
ICAgICAgICAzICAgMSUgICAgICAgICAgICAgdmlldy1tb2RlLWVudGVyCiAgICAgICAgICAgMSAg
IDAlICAgICAgICAgIC0gY3VzdG9tLWRlY2xhcmUtZmFjZQogICAgICAgICAgIDEgICAwJSAgICAg
ICAgICAgLSBmYWNlLXNwZWMtc2V0CiAgICAgICAgICAgMSAgIDAlICAgICAgICAgICAgLSBtYWtl
LWVtcHR5LWZhY2UKICAgICAgICAgICAxICAgMCUgICAgICAgICAgICAgLSBtYWtlLWZhY2UKICAg
ICAgICAgICAxICAgMCUgICAgICAgICAgICAgIC0gbWFrZS1mYWNlLXgtcmVzb3VyY2UtaW50ZXJu
YWwKICAgICAgICAgICAxICAgMCUgICAgICAgICAgICAgICAtIHNldC1mYWNlLWF0dHJpYnV0ZXMt
ZnJvbS1yZXNvdXJjZXMKICAgICAgICAgICAxICAgMCUgICAgICAgICAgICAgICAgLSBzZXQtZmFj
ZS1hdHRyaWJ1dGUtZnJvbS1yZXNvdXJjZQogICAgICAgICAgIDEgICAwJSAgICAgICAgICAgICAg
ICAgICBpbnRlcm5hbC1mYWNlLXgtZ2V0LXJlc291cmNlCiAgICAgICAgICAgNiAgIDIlICAgICAg
ICAgLSBmb250LWxvY2stZW5zdXJlCiAgICAgICAgICAgNiAgIDIlICAgICAgICAgIC0gIzxjb21w
aWxlZC1mdW5jdGlvbiBDNUU+CiAgICAgICAgICAgNiAgIDIlICAgICAgICAgICAtIGZvbnQtbG9j
ay1mb250aWZ5LXJlZ2lvbgogICAgICAgICAgIDYgICAyJSAgICAgICAgICAgIC0gZm9udC1sb2Nr
LWRlZmF1bHQtZm9udGlmeS1yZWdpb24KICAgICAgICAgICA1ICAgMiUgICAgICAgICAgICAgLSBm
b250LWxvY2stZm9udGlmeS1rZXl3b3Jkcy1yZWdpb24KICAgICAgICAgICAxICAgMCUgICAgICAg
ICAgICAgIC0gbWFya2Rvd24tbWF0Y2gtY29kZQogICAgICAgICAgIDEgICAwJSAgICAgICAgICAg
ICAgIC0gbWFya2Rvd24tc2VhcmNoLXVudGlsLWNvbmRpdGlvbgogICAgICAgICAgIDEgICAwJSAg
ICAgICAgICAgICAgICAtICM8Y29tcGlsZWQtZnVuY3Rpb24gRUNBPgogICAgICAgICAgIDEgICAw
JSAgICAgICAgICAgICAgICAgLSBtYXJrZG93bi1jb2RlLWJsb2NrLWF0LXBvcwogICAgICAgICAg
IDEgICAwJSAgICAgICAgICAgICAgICAgICAgbWFya2Rvd24tZ2V0LWVuY2xvc2luZy1mZW5jZWQt
YmxvY2stY29uc3RydWN0CiAgICAgICAgICAgMSAgIDAlICAgICAgICAgICAgICAtIG1hcmtkb3du
LWZvbnRpZnktcGxhaW4tdXJpcwogICAgICAgICAgIDEgICAwJSAgICAgICAgICAgICAgIC0gbWFy
a2Rvd24tbWF0Y2gtcGxhaW4tdXJpcwogICAgICAgICAgIDEgICAwJSAgICAgICAgICAgICAgICAt
IG1hcmtkb3duLW1hdGNoLWlubGluZS1nZW5lcmljCiAgICAgICAgICAgMSAgIDAlICAgICAgICAg
ICAgICAgICAgIG1hcmtkb3duLW1hdGNoLWlubGluZS1nZW5lcmljCiAgICAgICAgICAgMSAgIDAl
ICAgICAgICAgICAgICAtIG1hcmtkb3duLWZvbnRpZnktaW5saW5lLWxpbmtzCiAgICAgICAgICAg
MSAgIDAlICAgICAgICAgICAgICAgLSBtYXJrZG93bi1tYXRjaC1nZW5lcmljLWxpbmtzCiAgICAg
ICAgICAgMSAgIDAlICAgICAgICAgICAgICAgICAgbWFya2Rvd24tZW5kLW9mLXRleHQtYmxvY2sK
ICAgICAgICAgICAxICAgMCUgICAgICAgICAgICAgIC0gbWFya2Rvd24tbWF0Y2gtYm9sZAogICAg
ICAgICAgIDEgICAwJSAgICAgICAgICAgICAgICAgbWFya2Rvd24tbWF0Y2gtaW5saW5lLWdlbmVy
aWMKICAgICAgICAgICAxICAgMCUgICAgICAgICAgICAgLSBmb250LWxvY2stZm9udGlmeS1zeW50
YWN0aWNhbGx5LXJlZ2lvbgogICAgICAgICAgIDEgICAwJSAgICAgICAgICAgICAgLSB0cmVlc2l0
LWZvbnQtbG9jay1mb250aWZ5LXJlZ2lvbgogICAgICAgICAgIDEgICAwJSAgICAgICAgICAgICAg
ICAgdHJlZXNpdC0tZm9udC1sb2NrLWZvbnRpZnktcmVnaW9uLTEKICAgICAgICAgICAyICAgMCUg
ICAgICAgICAtIGphdmEtdHMtbW9kZQogICAgICAgICAgIDEgICAwJSAgICAgICAgICAtIHByb2ct
bW9kZQogICAgICAgICAgIDEgICAwJSAgICAgICAgICAgLSBtYWdpdC1hdXRvLXJldmVydC1tb2Rl
LWNtaGgKICAgICAgICAgICAxICAgMCUgICAgICAgICAgICAgIGFkZC1ob29rCiAgICAgICAgICAg
MSAgIDAlICAgICAgICAgLSAjPGNvbXBpbGVkLWZ1bmN0aW9uIDg2Nz4KICAgICAgICAgICAxICAg
MCUgICAgICAgICAgICBraWxsLWJ1ZmZlcgogICAgICAgICAgIDEgICAwJSAgICAgICAgIC0gc3Ry
aW5nLXRyaW0KICAgICAgICAgICAxICAgMCUgICAgICAgICAgICBzdHJpbmctdHJpbS1yaWdodAog
ICAgICAgICAgIDMgICAxJSAgICAgICAtICM8Y29tcGlsZWQtZnVuY3Rpb24gMTUwPgogICAgICAg
ICAgIDMgICAxJSAgICAgICAgLSAjPGNvbXBpbGVkLWZ1bmN0aW9uIEIwQz4KICAgICAgICAgICAz
ICAgMSUgICAgICAgICAtIHJ1bi1ob29rLXdpdGgtYXJncwogICAgICAgICAgIDIgICAwJSAgICAg
ICAgICAtIGVsZG9jLWRpc3BsYXktaW4tZWNoby1hcmVhCiAgICAgICAgICAgMiAgIDAlICAgICAg
ICAgICAtIGVsZG9jLS1tZXNzYWdlCiAgICAgICAgICAgMiAgIDAlICAgICAgICAgICAgLSBlbGRv
Yy1taW5pYnVmZmVyLW1lc3NhZ2UKICAgICAgICAgICAyICAgMCUgICAgICAgICAgICAgLSBhcHBs
eQogICAgICAgICAgIDIgICAwJSAgICAgICAgICAgICAgLSBtZXNzYWdlCiAgICAgICAgICAgMiAg
IDAlICAgICAgICAgICAgICAgICByZWRpc3BsYXlfaW50ZXJuYWwgKEMgZnVuY3Rpb24pCiAgICAg
ICAgICAgMSAgIDAlICAgICAgICAgIC0gZWxkb2MtZGlzcGxheS1pbi1idWZmZXIKICAgICAgICAg
ICAxICAgMCUgICAgICAgICAgIC0gZWxkb2MtLWZvcm1hdC1kb2MtYnVmZmVyCiAgICAgICAgICAg
MSAgIDAlICAgICAgICAgICAgLSBzcGVjaWFsLW1vZGUKICAgICAgICAgICAxICAgMCUgICAgICAg
ICAgICAgLSBnbG9iYWwtcHJldHRpZnktc3ltYm9scy1tb2RlLWNtaGgKICAgICAgICAgICAxICAg
MCUgICAgICAgICAgICAgICAgYWRkLWhvb2sKICAgICAgICAgICAyICAgMCUgICAgICAtICM8Y29t
cGlsZWQtZnVuY3Rpb24gNzUyPgogICAgICAgICAgIDEgICAwJSAgICAgICAgIG1hcGMKICAgICAg
ICAgICAxICAgMCUgICAgICAgLSBtYXBjYXIKICAgICAgICAgICAxICAgMCUgICAgICAgIC0gIzxj
b21waWxlZC1mdW5jdGlvbiA1MDU+CiAgICAgICAgICAgMSAgIDAlICAgICAgICAgLSBlZ2xvdC1y
YW5nZS1yZWdpb24KICAgICAgICAgICAxICAgMCUgICAgICAgICAgLSBlZ2xvdC0tbHNwLXBvc2l0
aW9uLXRvLXBvaW50CiAgICAgICAgICAgMSAgIDAlICAgICAgICAgICAgIGVnbG90LW1vdmUtdG8t
dXRmLTE2LWxpbmVwb3MKICAgICAgICAgICAxICAgMCUgICAgICBnZW5lcmF0ZS1uZXctYnVmZmVy
CiAgICAgICAgICAxNiAgIDclICAgLSAjPGNvbXBpbGVkLWZ1bmN0aW9uIEYxRD4KICAgICAgICAg
IDE2ICAgNyUgICAgLSBlbGRvYy1wcmludC1jdXJyZW50LXN5bWJvbC1pbmZvCiAgICAgICAgICAx
NiAgIDclICAgICAtIGVsZG9jLS1pbnZva2Utc3RyYXRlZ3kKICAgICAgICAgIDE2ICAgNyUgICAg
ICAtIGVsZG9jLWRvY3VtZW50YXRpb24tY29tcG9zZQogICAgICAgICAgMTMgICA1JSAgICAgICAt
IGVnbG90LWhvdmVyLWVsZG9jLWZ1bmN0aW9uCiAgICAgICAgICAgNSAgIDIlICAgICAgICAtIGVn
bG90LS1oaWdobGlnaHQtcGlnZ3liYWNrCiAgICAgICAgICAgNCAgIDElICAgICAgICAgLSBqc29u
cnBjLWFzeW5jLXJlcXVlc3QKICAgICAgICAgICA0ICAgMSUgICAgICAgICAgLSBqc29ucnBjLS1h
c3luYy1yZXF1ZXN0LTEKICAgICAgICAgICA0ICAgMSUgICAgICAgICAgIC0ganNvbnJwYy1jb25u
ZWN0aW9uLXNlbmQKICAgICAgICAgICA0ICAgMSUgICAgICAgICAgICAtIGFwcGx5CiAgICAgICAg
ICAgNCAgIDElICAgICAgICAgICAgIC0gIzxjb21waWxlZC1mdW5jdGlvbiA4MzU+CiAgICAgICAg
ICAgMiAgIDAlICAgICAgICAgICAgICAtIGpzb25ycGMtLWV2ZW50CiAgICAgICAgICAgMiAgIDAl
ICAgICAgICAgICAgICAgLSAjPGNvbXBpbGVkLWZ1bmN0aW9uIDFFMz4KICAgICAgICAgICAyICAg
MCUgICAgICAgICAgICAgICAgLSBhcHBseQogICAgICAgICAgIDIgICAwJSAgICAgICAgICAgICAg
ICAgICBqc29ucnBjLS1sb2ctZXZlbnQKICAgICAgICAgICAxICAgMCUgICAgICAgICAgICAgICAg
cHJvY2Vzcy1zZW5kLXN0cmluZwogICAgICAgICAgIDEgICAwJSAgICAgICAgIC0gZWdsb3QtLVRl
eHREb2N1bWVudFBvc2l0aW9uUGFyYW1zCiAgICAgICAgICAgMSAgIDAlICAgICAgICAgIC0gZWds
b3QtLVRleHREb2N1bWVudElkZW50aWZpZXIKICAgICAgICAgICAxICAgMCUgICAgICAgICAgICAg
ZWdsb3QtcGF0aC10by11cmkKICAgICAgICAgICA0ICAgMSUgICAgICAgIC0ganNvbnJwYy1hc3lu
Yy1yZXF1ZXN0CiAgICAgICAgICAgNCAgIDElICAgICAgICAgLSBqc29ucnBjLS1hc3luYy1yZXF1
ZXN0LTEKICAgICAgICAgICAyICAgMCUgICAgICAgICAgLSBqc29ucnBjLWNvbm5lY3Rpb24tc2Vu
ZAogICAgICAgICAgIDIgICAwJSAgICAgICAgICAgLSBhcHBseQogICAgICAgICAgIDIgICAwJSAg
ICAgICAgICAgIC0gIzxjb21waWxlZC1mdW5jdGlvbiA4MzU+CiAgICAgICAgICAgMiAgIDAlICAg
ICAgICAgICAgIC0ganNvbnJwYy0tZXZlbnQKICAgICAgICAgICAyICAgMCUgICAgICAgICAgICAg
IC0gIzxjb21waWxlZC1mdW5jdGlvbiAyQTA+CiAgICAgICAgICAgMiAgIDAlICAgICAgICAgICAg
ICAgLSBhcHBseQogICAgICAgICAgIDIgICAwJSAgICAgICAgICAgICAgICAgIGpzb25ycGMtLWxv
Zy1ldmVudAogICAgICAgICAgIDQgICAxJSAgICAgICAgLSBlZ2xvdC0tVGV4dERvY3VtZW50UG9z
aXRpb25QYXJhbXMKICAgICAgICAgICA0ICAgMSUgICAgICAgICAtIGVnbG90LS1UZXh0RG9jdW1l
bnRJZGVudGlmaWVyCiAgICAgICAgICAgNCAgIDElICAgICAgICAgIC0gZWdsb3QtcGF0aC10by11
cmkKICAgICAgICAgICAzICAgMSUgICAgICAgICAgICAgdXJsLWdlbmVyaWMtcGFyc2UtdXJsCiAg
ICAgICAgICAgMyAgIDElICAgICAgIC0gZWdsb3Qtc2lnbmF0dXJlLWVsZG9jLWZ1bmN0aW9uCiAg
ICAgICAgICAgMiAgIDAlICAgICAgICAtIGpzb25ycGMtYXN5bmMtcmVxdWVzdAogICAgICAgICAg
IDIgICAwJSAgICAgICAgIC0ganNvbnJwYy0tYXN5bmMtcmVxdWVzdC0xCiAgICAgICAgICAgMSAg
IDAlICAgICAgICAgIC0ganNvbnJwYy1jb25uZWN0aW9uLXNlbmQKICAgICAgICAgICAxICAgMCUg
ICAgICAgICAgIC0gYXBwbHkKICAgICAgICAgICAxICAgMCUgICAgICAgICAgICAtICM8Y29tcGls
ZWQtZnVuY3Rpb24gODM1PgogICAgICAgICAgIDEgICAwJSAgICAgICAgICAgICAtIGpzb25ycGMt
LWpzb24tZW5jb2RlCiAgICAgICAgICAgMSAgIDAlICAgICAgICAgICAgICAgIGpzb24tc2VyaWFs
aXplCiAgICAgICAgICAgMSAgIDAlICAgICAgICAgIC0gIzxjb21waWxlZC1mdW5jdGlvbiBGRTg+
CiAgICAgICAgICAgMSAgIDAlICAgICAgICAgICAtIHJ1bi13aXRoLXRpbWVyCiAgICAgICAgICAg
MSAgIDAlICAgICAgICAgICAgLSBydW4tYXQtdGltZQogICAgICAgICAgIDEgICAwJSAgICAgICAg
ICAgICAtIHRpbWVyLWFjdGl2YXRlCiAgICAgICAgICAgMSAgIDAlICAgICAgICAgICAgICAgIHRp
bWVyLS1hY3RpdmF0ZQogICAgICAgICAgIDEgICAwJSAgICAgICAgLSBlZ2xvdC0tVGV4dERvY3Vt
ZW50UG9zaXRpb25QYXJhbXMKICAgICAgICAgICAxICAgMCUgICAgICAgICAtIGVnbG90LS1UZXh0
RG9jdW1lbnRJZGVudGlmaWVyCiAgICAgICAgICAgMSAgIDAlICAgICAgICAgICAgZWdsb3QtcGF0
aC10by11cmkKICAgICAgICAgICA2ICAgMiUgLSBlbGRvYy1wcmUtY29tbWFuZC1yZWZyZXNoLWVj
aG8tYXJlYQogICAgICAgICAgIDYgICAyJSAgLSBlbGRvYy0tbWVzc2FnZQogICAgICAgICAgIDYg
ICAyJSAgIC0gZWxkb2MtbWluaWJ1ZmZlci1tZXNzYWdlCiAgICAgICAgICAgNiAgIDIlICAgIC0g
YXBwbHkKICAgICAgICAgICA2ICAgMiUgICAgICAgbWVzc2FnZQogICAgICAgICAgIDEgICAwJSAg
IGNvcmZ1LS1hdXRvLXBvc3QtY29tbWFuZAogICAgICAgICAgIDAgICAwJSAgIC4uLgo=
--=-=-=
Content-Type: application/octet-stream
Content-Disposition: attachment; filename=emacs-Q-30-after-everything
Content-Transfer-Encoding: base64

ICAgICAgICAgMTIyICAzOSUgLSByZWRpc3BsYXlfaW50ZXJuYWwgKEMgZnVuY3Rpb24pCiAgICAg
ICAgICAgMSAgIDAlICAgIGZpbGUtcmVtb3RlLXAKICAgICAgICAgIDk3ICAzMSUgLSBjb21tYW5k
LWV4ZWN1dGUKICAgICAgICAgIDk2ICAzMCUgIC0gYnl0ZS1jb2RlCiAgICAgICAgICA5NiAgMzAl
ICAgLSByZWFkLWV4dGVuZGVkLWNvbW1hbmQKICAgICAgICAgIDk2ICAzMCUgICAgLSByZWFkLWV4
dGVuZGVkLWNvbW1hbmQtMQogICAgICAgICAgOTYgIDMwJSAgICAgLSBjb21wbGV0aW5nLXJlYWQt
ZGVmYXVsdAogICAgICAgICAgNDYgIDE0JSAgICAgICAgcmVkaXNwbGF5X2ludGVybmFsIChDIGZ1
bmN0aW9uKQogICAgICAgICAgMTYgICA1JSAgICAgIC0gY29tbWFuZC1leGVjdXRlCiAgICAgICAg
ICAxNiAgIDUlICAgICAgIC0gZnVuY2FsbC1pbnRlcmFjdGl2ZWx5CiAgICAgICAgICAxNiAgIDUl
ICAgICAgICAtIG1pbmlidWZmZXItY29tcGxldGUKICAgICAgICAgIDE1ICAgNCUgICAgICAgICAt
IGNvbXBsZXRpb24taW4tcmVnaW9uCiAgICAgICAgICAxNSAgIDQlICAgICAgICAgIC0gY29tcGxl
dGlvbi0taW4tcmVnaW9uCiAgICAgICAgICAxNSAgIDQlICAgICAgICAgICAtICM8Y29tcGlsZWQt
ZnVuY3Rpb24gRTMxPgogICAgICAgICAgMTUgICA0JSAgICAgICAgICAgIC0gYXBwbHkKICAgICAg
ICAgIDE1ICAgNCUgICAgICAgICAgICAgLSAjPGNvbXBpbGVkLWZ1bmN0aW9uIDk4Mj4KICAgICAg
ICAgIDE1ICAgNCUgICAgICAgICAgICAgIC0gY29tcGxldGlvbi0taW4tcmVnaW9uLTEKICAgICAg
ICAgIDE1ICAgNCUgICAgICAgICAgICAgICAtIGNvbXBsZXRpb24tLWRvLWNvbXBsZXRpb24KICAg
ICAgICAgIDEwICAgMyUgICAgICAgICAgICAgICAgLSBjb21wbGV0aW9uLXRyeS1jb21wbGV0aW9u
CiAgICAgICAgICAxMCAgIDMlICAgICAgICAgICAgICAgICAtIGNvbXBsZXRpb24tLW50aC1jb21w
bGV0aW9uCiAgICAgICAgICAxMCAgIDMlICAgICAgICAgICAgICAgICAgLSBzZXEtc29tZQogICAg
ICAgICAgMTAgICAzJSAgICAgICAgICAgICAgICAgICAtIHNlcS1kbwogICAgICAgICAgMTAgICAz
JSAgICAgICAgICAgICAgICAgICAgLSBtYXBjCiAgICAgICAgICAxMCAgIDMlICAgICAgICAgICAg
ICAgICAgICAgLSAjPGNvbXBpbGVkLWZ1bmN0aW9uIDM3Mz4KICAgICAgICAgIDEwICAgMyUgICAg
ICAgICAgICAgICAgICAgICAgLSAjPGNvbXBpbGVkLWZ1bmN0aW9uIDFCOT4KICAgICAgICAgIDEw
ICAgMyUgICAgICAgICAgICAgICAgICAgICAgIC0gY29tcGxldGlvbi1iYXNpYy10cnktY29tcGxl
dGlvbgogICAgICAgICAgMTAgICAzJSAgICAgICAgICAgICAgICAgICAgICAgIC0gIzxzdWJyLW5h
dGl2ZS1lbGlzcCBGNjE2ZTZmNmU3OTZkNmY3NTczMmQ2YzYxNmQ2MjY0NjFfYW5vbnltb3VzX2xh
bWJkYV81Nj4KICAgICAgICAgIDEwICAgMyUgICAgICAgICAgICAgICAgICAgICAgICAgLSBjb21w
bGV0ZS13aXRoLWFjdGlvbgogICAgICAgICAgMTAgICAzJSAgICAgICAgICAgICAgICAgICAgICAg
ICAgLSB0cnktY29tcGxldGlvbgogICAgICAgICAgIDEgICAwJSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIzxjb21waWxlZC1mdW5jdGlvbiAzMTc+CiAgICAgICAgICAgNCAgIDElICAgICAg
ICAgICAgICAgIC0gbWluaWJ1ZmZlci1jb21wbGV0aW9uLWhlbHAKICAgICAgICAgICAyICAgMCUg
ICAgICAgICAgICAgICAgIC0gY29tcGxldGlvbi1hbGwtY29tcGxldGlvbnMKICAgICAgICAgICAy
ICAgMCUgICAgICAgICAgICAgICAgICAtIGNvbXBsZXRpb24tLW50aC1jb21wbGV0aW9uCiAgICAg
ICAgICAgMiAgIDAlICAgICAgICAgICAgICAgICAgIC0gc2VxLXNvbWUKICAgICAgICAgICAyICAg
MCUgICAgICAgICAgICAgICAgICAgIC0gc2VxLWRvCiAgICAgICAgICAgMiAgIDAlICAgICAgICAg
ICAgICAgICAgICAgLSBtYXBjCiAgICAgICAgICAgMiAgIDAlICAgICAgICAgICAgICAgICAgICAg
IC0gIzxjb21waWxlZC1mdW5jdGlvbiA3RkQ+CiAgICAgICAgICAgMiAgIDAlICAgICAgICAgICAg
ICAgICAgICAgICAtICM8Y29tcGlsZWQtZnVuY3Rpb24gNzlFPgogICAgICAgICAgIDIgICAwJSAg
ICAgICAgICAgICAgICAgICAgICAgIC0gY29tcGxldGlvbi1iYXNpYy1hbGwtY29tcGxldGlvbnMK
ICAgICAgICAgICAyICAgMCUgICAgICAgICAgICAgICAgICAgICAgICAgLSBjb21wbGV0aW9uLXBj
bS0tYWxsLWNvbXBsZXRpb25zCiAgICAgICAgICAgMiAgIDAlICAgICAgICAgICAgICAgICAgICAg
ICAgICAtICM8c3Vici1uYXRpdmUtZWxpc3AgRjYxNmU2ZjZlNzk2ZDZmNzU3MzJkNmM2MTZkNjI2
NDYxX2Fub255bW91c19sYW1iZGFfNTY+CiAgICAgICAgICAgMiAgIDAlICAgICAgICAgICAgICAg
ICAgICAgICAgICAgLSBjb21wbGV0ZS13aXRoLWFjdGlvbgogICAgICAgICAgIDIgICAwJSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGFsbC1jb21wbGV0aW9ucwogICAgICAgICAgIDIgICAw
JSAgICAgICAgICAgICAgICAgLSB0ZW1wLWJ1ZmZlci13aW5kb3ctc2hvdwogICAgICAgICAgIDIg
ICAwJSAgICAgICAgICAgICAgICAgIC0gZGlzcGxheS1idWZmZXIKICAgICAgICAgICAyICAgMCUg
ICAgICAgICAgICAgICAgICAgLSBkaXNwbGF5LWJ1ZmZlci1hdC1ib3R0b20KICAgICAgICAgICAx
ICAgMCUgICAgICAgICAgICAgICAgICAgIC0gd2Fsay13aW5kb3ctdHJlZQogICAgICAgICAgIDEg
ICAwJSAgICAgICAgICAgICAgICAgICAgIC0gd2Fsay13aW5kb3ctdHJlZS0xCiAgICAgICAgICAg
MSAgIDAlICAgICAgICAgICAgICAgICAgICAgIC0gIzxjb21waWxlZC1mdW5jdGlvbiAzNjU+CiAg
ICAgICAgICAgMSAgIDAlICAgICAgICAgICAgICAgICAgICAgICAgIHdpbmRvdy1pbi1kaXJlY3Rp
b24KICAgICAgICAgICAxICAgMCUgICAgICAgICAgICAgICAgICAgIC0gd2luZG93LS1kaXNwbGF5
LWJ1ZmZlcgogICAgICAgICAgIDEgICAwJSAgICAgICAgICAgICAgICAgICAgIC0gIzxjb21waWxl
ZC1mdW5jdGlvbiAzOEI+CiAgICAgICAgICAgMSAgIDAlICAgICAgICAgICAgICAgICAgICAgIC0g
cmVhZC1leHRlbmRlZC1jb21tYW5kLS1hZmZpeGF0aW9uCiAgICAgICAgICAgMSAgIDAlICAgICAg
ICAgICAgICAgICAgICAgICAgICM8c3Vici1uYXRpdmUtZWxpc3AgRjYxNmU2ZjZlNzk2ZDZmNzU3
MzJkNmM2MTZkNjI2NDYxX2Fub255bW91c19sYW1iZGFfNjE+CiAgICAgICAgICAgMSAgIDAlICAg
ICAgICAgICAgICAgIC0gbWluaWJ1ZmZlci1oaWRlLWNvbXBsZXRpb25zCiAgICAgICAgICAgMSAg
IDAlICAgICAgICAgICAgICAgICAtIGJ1cnktYnVmZmVyCiAgICAgICAgICAgMSAgIDAlICAgICAg
ICAgICAgICAgICAgLSB3aW5kb3ctLWRlbGV0ZQogICAgICAgICAgIDEgICAwJSAgICAgICAgICAg
ICAgICAgICAtIGRlbGV0ZS13aW5kb3cKICAgICAgICAgICAxICAgMCUgICAgICAgICAgICAgICAg
ICAgIC0gd2luZG93LXNpemFibGUtcAogICAgICAgICAgIDEgICAwJSAgICAgICAgICAgICAgICAg
ICAgIC0gd2luZG93LXNpemFibGUKICAgICAgICAgICAxICAgMCUgICAgICAgICAgICAgICAgICAg
ICAgLSB3aW5kb3ctc2l6ZS1maXhlZC1wCiAgICAgICAgICAgMSAgIDAlICAgICAgICAgICAgICAg
ICAgICAgICAgIHdpbmRvdy0tc2l6ZS1maXhlZC0xCiAgICAgICAgICAgMSAgIDAlICAgICAgICAg
ICBtaW5pYnVmZmVyLS1jb21wbGV0aW9uLXByb21wdC1lbmQKICAgICAgICAgICAxICAgMCUgICAg
ICAtIHRpbWVyLWV2ZW50LWhhbmRsZXIKICAgICAgICAgICAxICAgMCUgICAgICAgLSBhcHBseQog
ICAgICAgICAgIDEgICAwJSAgICAgICAgLSBzaG93LXBhcmVuLWZ1bmN0aW9uCiAgICAgICAgICAg
MSAgIDAlICAgICAgICAgLSBzaG93LXBhcmVuLS1kZWZhdWx0CiAgICAgICAgICAgMSAgIDAlICAg
ICAgICAgIC0gc2hvdy1wYXJlbi0tbG9jYXRlLW5lYXItcGFyZW4KICAgICAgICAgICAxICAgMCUg
ICAgICAgICAgICAgYmFjay10by1pbmRlbnRhdGlvbgogICAgICAgICAgIDEgICAwJSAgLSBmdW5j
YWxsLWludGVyYWN0aXZlbHkKICAgICAgICAgICAxICAgMCUgICAgIGV4ZWN1dGUtZXh0ZW5kZWQt
Y29tbWFuZAogICAgICAgICAgNDMgIDEzJSAtIHRpbWVyLWV2ZW50LWhhbmRsZXIKICAgICAgICAg
IDQzICAxMyUgIC0gYXBwbHkKICAgICAgICAgIDIxICAgNiUgICAtICM8Y29tcGlsZWQtZnVuY3Rp
b24gRTc4PgogICAgICAgICAgMjEgICA2JSAgICAtIGpzb25ycGMtY29ubmVjdGlvbi1yZWNlaXZl
CiAgICAgICAgICAxOSAgIDYlICAgICAtIGpzb25ycGMtLWNvbnRpbnVlCiAgICAgICAgICAxNyAg
IDUlICAgICAgLSAjPGNvbXBpbGVkLWZ1bmN0aW9uIEEzNz4KICAgICAgICAgIDEwICAgMyUgICAg
ICAgLSAjPGNvbXBpbGVkLWZ1bmN0aW9uIEQ1Nj4KICAgICAgICAgIDEwICAgMyUgICAgICAgIC0g
Izxjb21waWxlZC1mdW5jdGlvbiBEOTI+CiAgICAgICAgICAxMCAgIDMlICAgICAgICAgLSBydW4t
aG9vay13aXRoLWFyZ3MKICAgICAgICAgICA5ICAgMiUgICAgICAgICAgLSBlbGRvYy1kaXNwbGF5
LWluLWVjaG8tYXJlYQogICAgICAgICAgIDkgICAyJSAgICAgICAgICAgLSBlbGRvYy0tbWVzc2Fn
ZQogICAgICAgICAgIDkgICAyJSAgICAgICAgICAgIC0gZWxkb2MtbWluaWJ1ZmZlci1tZXNzYWdl
CiAgICAgICAgICAgOSAgIDIlICAgICAgICAgICAgIC0gYXBwbHkKICAgICAgICAgICA5ICAgMiUg
ICAgICAgICAgICAgIC0gbWVzc2FnZQogICAgICAgICAgIDcgICAyJSAgICAgICAgICAgICAgICAg
cmVkaXNwbGF5X2ludGVybmFsIChDIGZ1bmN0aW9uKQogICAgICAgICAgIDEgICAwJSAgICAgICAg
ICAtIGVsZG9jLWRpc3BsYXktaW4tYnVmZmVyCiAgICAgICAgICAgMSAgIDAlICAgICAgICAgICAt
IGVsZG9jLS1mb3JtYXQtZG9jLWJ1ZmZlcgogICAgICAgICAgIDEgICAwJSAgICAgICAgICAgIC0g
c3BlY2lhbC1tb2RlCiAgICAgICAgICAgMSAgIDAlICAgICAgICAgICAgICAgYy1sZWF2ZS1jYy1t
b2RlLW1vZGUKICAgICAgICAgICA3ICAgMiUgICAgICAgLSBlZ2xvdC0taG92ZXItaW5mbwogICAg
ICAgICAgIDcgICAyJSAgICAgICAgLSBlZ2xvdC0tZm9ybWF0LW1hcmt1cAogICAgICAgICAgIDUg
ICAxJSAgICAgICAgIC0gZm9udC1sb2NrLWVuc3VyZQogICAgICAgICAgIDUgICAxJSAgICAgICAg
ICAtICM8Y29tcGlsZWQtZnVuY3Rpb24gQzVFPgogICAgICAgICAgIDUgICAxJSAgICAgICAgICAg
LSBmb250LWxvY2stZm9udGlmeS1yZWdpb24KICAgICAgICAgICA1ICAgMSUgICAgICAgICAgICAt
IGMtZm9udC1sb2NrLWZvbnRpZnktcmVnaW9uCiAgICAgICAgICAgNSAgIDElICAgICAgICAgICAg
IC0gZm9udC1sb2NrLWRlZmF1bHQtZm9udGlmeS1yZWdpb24KICAgICAgICAgICA0ICAgMSUgICAg
ICAgICAgICAgIC0gZm9udC1sb2NrLWZvbnRpZnkta2V5d29yZHMtcmVnaW9uCiAgICAgICAgICAg
MyAgIDAlICAgICAgICAgICAgICAgLSBjLWZvbnQtbG9jay1kZWNsYXJhdGlvbnMKICAgICAgICAg
ICAzICAgMCUgICAgICAgICAgICAgICAgLSBjLWZpbmQtZGVjbC1zcG90cwogICAgICAgICAgIDMg
ICAwJSAgICAgICAgICAgICAgICAgLSAjPGNvbXBpbGVkLWZ1bmN0aW9uIEYxQj4KICAgICAgICAg
ICAzICAgMCUgICAgICAgICAgICAgICAgICAtIGMtZm9yd2FyZC1kZWNsLW9yLWNhc3QtMQogICAg
ICAgICAgIDIgICAwJSAgICAgICAgICAgICAgICAgICAtIGMtZm9yd2FyZC10eXBlCiAgICAgICAg
ICAgMSAgIDAlICAgICAgICAgICAgICAgICAgICAtIGMtY2hlY2stcXVhbGlmaWVkLXR5cGUKICAg
ICAgICAgICAxICAgMCUgICAgICAgICAgICAgICAgICAgICAtIGMtZm9yd2FyZC1vdmVyLWNvbXBv
dW5kLWlkZW50aWZpZXIKICAgICAgICAgICAxICAgMCUgICAgICAgICAgICAgICAgICAgICAgICBj
LWZvcndhcmQtc3dzCiAgICAgICAgICAgMSAgIDAlICAgICAgICAgICAgICAgICAgICAtIGMtZm9y
d2FyZC1uYW1lCiAgICAgICAgICAgMSAgIDAlICAgICAgICAgICAgICAgICAgICAgLSBjLWZvcndh
cmQtPD4tYXJnbGlzdAogICAgICAgICAgIDEgICAwJSAgICAgICAgICAgICAgICAgICAgICAtIGMt
Zm9yd2FyZC08Pi1hcmdsaXN0LXJlY3VyCiAgICAgICAgICAgMSAgIDAlICAgICAgICAgICAgICAg
ICAgICAgICAtIGMtZm9yd2FyZC1zd3MKICAgICAgICAgICAxICAgMCUgICAgICAgICAgICAgICAg
ICAgICAgICAgIGxvb2tpbmctYXQKICAgICAgICAgICAxICAgMCUgICAgICAgICAgICAgICAgICAg
ICBsb29raW5nLWF0CiAgICAgICAgICAgMSAgIDAlICAgICAgICAgICAgICAgLSBjLWZvbnQtbG9j
ay1lbmNsb3NpbmctZGVjbHMKICAgICAgICAgICAxICAgMCUgICAgICAgICAgICAgICAgLSBjLXBh
cnNlLXN0YXRlCiAgICAgICAgICAgMSAgIDAlICAgICAgICAgICAgICAgICAgIGMtYmVnaW5uaW5n
LW9mLW1hY3JvCiAgICAgICAgICAgMSAgIDAlICAgICAgICAgICAgICAtIGZvbnQtbG9jay1mb250
aWZ5LXN5bnRhY3RpY2FsbHktcmVnaW9uCiAgICAgICAgICAgMSAgIDAlICAgICAgICAgICAgICAg
LSBmb250LWxvY2stZGVmYXVsdC1mb250aWZ5LXN5bnRhY3RpY2FsbHkKICAgICAgICAgICAxICAg
MCUgICAgICAgICAgICAgICAgLSBjb21tZW50LW5vcm1hbGl6ZS12YXJzCiAgICAgICAgICAgMSAg
IDAlICAgICAgICAgICAgICAgICAtICM8Y29tcGlsZWQtZnVuY3Rpb24gQTg3PgogICAgICAgICAg
IDEgICAwJSAgICAgICAgICAgICAgICAgIC0ga2lsbC1idWZmZXIKICAgICAgICAgICAxICAgMCUg
ICAgICAgICAgICAgICAgICAgICByZXBsYWNlLWJ1ZmZlci1pbi13aW5kb3dzCiAgICAgICAgICAg
MiAgIDAlICAgICAgICAgLSBqYXZhLW1vZGUKICAgICAgICAgICAxICAgMCUgICAgICAgICAgICBj
LWluaXQtbGFuZ3VhZ2UtdmFycy1mb3IKICAgICAgICAgICAxICAgMCUgICAgICAgICAgLSBjLWNv
bW1vbi1pbml0CiAgICAgICAgICAgMSAgIDAlICAgICAgICAgICAtICM8c3Vici1uYXRpdmUtZWxp
c3AgRjYxNmU2ZjZlNzk2ZDZmNzU3MzJkNmM2MTZkNjI2NDYxX2Fub255bW91c19sYW1iZGFfMzU+
CiAgICAgICAgICAgMSAgIDAlICAgICAgICAgICAgLSBjLXVubWFyay08Pi1hcm91bmQtcmVnaW9u
CiAgICAgICAgICAgMSAgIDAlICAgICAgICAgICAgICAgIzxjb21waWxlZC1mdW5jdGlvbiBENkU+
CiAgICAgICAgICAgMiAgIDAlICAgICAgICAjPGNvbXBpbGVkLWZ1bmN0aW9uIDNDNj4KICAgICAg
ICAgICAxICAgMCUgICAgIC0ganNvbnJwYy0tcmVtb3ZlCiAgICAgICAgICAgMSAgIDAlICAgICAg
ICBzbG90LXZhbHVlCiAgICAgICAgICAgMSAgIDAlICAgICAtIGFwcGx5CiAgICAgICAgICAgMSAg
IDAlICAgICAgLSBqc29ucnBjLS1ldmVudAogICAgICAgICAgIDEgICAwJSAgICAgICAtICM8Y29t
cGlsZWQtZnVuY3Rpb24gMEEzPgogICAgICAgICAgIDEgICAwJSAgICAgICAgLSBhcHBseQogICAg
ICAgICAgIDEgICAwJSAgICAgICAgICAganNvbnJwYy0tbG9nLWV2ZW50CiAgICAgICAgICAxMiAg
IDMlICAgLSAjPGNvbXBpbGVkLWZ1bmN0aW9uIDRCQj4KICAgICAgICAgIDEyICAgMyUgICAgLSBl
bGRvYy1wcmludC1jdXJyZW50LXN5bWJvbC1pbmZvCiAgICAgICAgICAxMiAgIDMlICAgICAtIGVs
ZG9jLS1pbnZva2Utc3RyYXRlZ3kKICAgICAgICAgIDEyICAgMyUgICAgICAtIGVsZG9jLWRvY3Vt
ZW50YXRpb24tY29tcG9zZQogICAgICAgICAgMTIgICAzJSAgICAgICAtIGVnbG90LWhvdmVyLWVs
ZG9jLWZ1bmN0aW9uCiAgICAgICAgICAgNiAgIDElICAgICAgICAtIGVnbG90LS1UZXh0RG9jdW1l
bnRQb3NpdGlvblBhcmFtcwogICAgICAgICAgIDUgICAxJSAgICAgICAgIC0gZWdsb3QtLVRleHRE
b2N1bWVudElkZW50aWZpZXIKICAgICAgICAgICA1ICAgMSUgICAgICAgICAgLSBlZ2xvdC1wYXRo
LXRvLXVyaQogICAgICAgICAgIDMgICAwJSAgICAgICAgICAgICB1cmwtZ2VuZXJpYy1wYXJzZS11
cmwKICAgICAgICAgICAxICAgMCUgICAgICAgICAtIGVnbG90LS1wb3MtdG8tbHNwLXBvc2l0aW9u
CiAgICAgICAgICAgMSAgIDAlICAgICAgICAgIC0gZWdsb3QtdXRmLTE2LWxpbmVwb3MKICAgICAg
ICAgICAxICAgMCUgICAgICAgICAgICAgZWdsb3QtLWJvbAogICAgICAgICAgIDQgICAxJSAgICAg
ICAgLSBlZ2xvdC0taGlnaGxpZ2h0LXBpZ2d5YmFjawogICAgICAgICAgIDIgICAwJSAgICAgICAg
IC0gZWdsb3QtLVRleHREb2N1bWVudFBvc2l0aW9uUGFyYW1zCiAgICAgICAgICAgMiAgIDAlICAg
ICAgICAgIC0gZWdsb3QtLVRleHREb2N1bWVudElkZW50aWZpZXIKICAgICAgICAgICAyICAgMCUg
ICAgICAgICAgIC0gZWdsb3QtcGF0aC10by11cmkKICAgICAgICAgICAyICAgMCUgICAgICAgICAg
ICAtIHVybC1nZW5lcmljLXBhcnNlLXVybAogICAgICAgICAgIDEgICAwJSAgICAgICAgICAgICAt
ICM8Y29tcGlsZWQtZnVuY3Rpb24gRDQ2PgogICAgICAgICAgIDEgICAwJSAgICAgICAgICAgICAg
ICBraWxsLWJ1ZmZlcgogICAgICAgICAgIDIgICAwJSAgICAgICAgIC0ganNvbnJwYy1hc3luYy1y
ZXF1ZXN0CiAgICAgICAgICAgMiAgIDAlICAgICAgICAgIC0ganNvbnJwYy0tYXN5bmMtcmVxdWVz
dC0xCiAgICAgICAgICAgMSAgIDAlICAgICAgICAgICAtIGpzb25ycGMtY29ubmVjdGlvbi1zZW5k
CiAgICAgICAgICAgMSAgIDAlICAgICAgICAgICAgLSBhcHBseQogICAgICAgICAgIDEgICAwJSAg
ICAgICAgICAgICAtICM8Y29tcGlsZWQtZnVuY3Rpb24gNTEwPgogICAgICAgICAgIDEgICAwJSAg
ICAgICAgICAgICAgICBqc29ucnBjLS1ldmVudAogICAgICAgICAgIDIgICAwJSAgICAgICAgLSBq
c29ucnBjLWFzeW5jLXJlcXVlc3QKICAgICAgICAgICAyICAgMCUgICAgICAgICAtIGpzb25ycGMt
LWFzeW5jLXJlcXVlc3QtMQogICAgICAgICAgIDIgICAwJSAgICAgICAgICAtIGpzb25ycGMtY29u
bmVjdGlvbi1zZW5kCiAgICAgICAgICAgMiAgIDAlICAgICAgICAgICAtIGFwcGx5CiAgICAgICAg
ICAgMiAgIDAlICAgICAgICAgICAgLSAjPGNvbXBpbGVkLWZ1bmN0aW9uIDUxMD4KICAgICAgICAg
ICAxICAgMCUgICAgICAgICAgICAgLSBqc29ucnBjLS1ldmVudAogICAgICAgICAgIDEgICAwJSAg
ICAgICAgICAgICAgLSAjPGNvbXBpbGVkLWZ1bmN0aW9uIDgyQT4KICAgICAgICAgICAxICAgMCUg
ICAgICAgICAgICAgICAtIGFwcGx5CiAgICAgICAgICAgMSAgIDAlICAgICAgICAgICAgICAgICAg
anNvbnJwYy0tbG9nLWV2ZW50CiAgICAgICAgICAgMSAgIDAlICAgICAgICAgICAgIC0ganNvbnJw
Yy0tanNvbi1lbmNvZGUKICAgICAgICAgICAxICAgMCUgICAgICAgICAgICAgICAganNvbi1zZXJp
YWxpemUKICAgICAgICAgICA2ICAgMSUgICAtICM8c3Vici1uYXRpdmUtZWxpc3AgRjYxNmU2ZjZl
Nzk2ZDZmNzU3MzJkNmM2MTZkNjI2NDYxX2Fub255bW91c19sYW1iZGFfOT4KICAgICAgICAgICA2
ICAgMSUgICAgICBqaXQtbG9jay1jb250ZXh0LWZvbnRpZnkKICAgICAgICAgICAzICAgMCUgICAt
IHNob3ctcGFyZW4tZnVuY3Rpb24KICAgICAgICAgICAzICAgMCUgICAgLSBzaG93LXBhcmVuLS1k
ZWZhdWx0CiAgICAgICAgICAgMiAgIDAlICAgICAtIHN5bnRheC1wcHNzCiAgICAgICAgICAgMSAg
IDAlICAgICAgICBwYXJzZS1wYXJ0aWFsLXNleHAKICAgICAgICAgICAxICAgMCUgICAgICAgIHN5
bnRheC1wcm9wZXJ0aXplCiAgICAgICAgICAgMSAgIDAlICAgICAgIHNob3ctcGFyZW4tLWxvY2F0
ZS1uZWFyLXBhcmVuCiAgICAgICAgICAgMSAgIDAlICAgLSBibGluay1jdXJzb3Itc3RhcnQKICAg
ICAgICAgICAxICAgMCUgICAgICBibGluay1jdXJzb3ItLXN0YXJ0LXRpbWVyCiAgICAgICAgICA0
MCAgMTIlICAgQXV0b21hdGljIEdDCiAgICAgICAgICAgNCAgIDElIC0gZWxkb2MtcHJlLWNvbW1h
bmQtcmVmcmVzaC1lY2hvLWFyZWEKICAgICAgICAgICA0ICAgMSUgIC0gZWxkb2MtLW1lc3NhZ2UK
ICAgICAgICAgICA0ICAgMSUgICAtIGVsZG9jLW1pbmlidWZmZXItbWVzc2FnZQogICAgICAgICAg
IDQgICAxJSAgICAtIGFwcGx5CiAgICAgICAgICAgNCAgIDElICAgICAgIG1lc3NhZ2UKICAgICAg
ICAgICAyICAgMCUgLSBqc29ucnBjLS1wcm9jZXNzLWZpbHRlcgogICAgICAgICAgIDEgICAwJSAg
ICBzZWFyY2gtZm9yd2FyZC1yZWdleHAKICAgICAgICAgICAxICAgMCUgIC0gIzxjb21waWxlZC1m
dW5jdGlvbiA3OUE+CiAgICAgICAgICAgMSAgIDAlICAgICB0aW1lci1zZXQtdGltZQogICAgICAg
ICAgIDEgICAwJSAtIGppdC1sb2NrLS1hbnRpYmxpbmstcG9zdC1jb21tYW5kCiAgICAgICAgICAg
MSAgIDAlICAgIHN5bnRheC0tbGJwCiAgICAgICAgICAgMSAgIDAlIC0gdW5kby1hdXRvLS1hZGQt
Ym91bmRhcnkKICAgICAgICAgICAxICAgMCUgIC0gdW5kby1hdXRvLS1ib3VuZGFyaWVzCiAgICAg
ICAgICAgMSAgIDAlICAgICBhZGQtdG8tbGlzdAogICAgICAgICAgIDAgICAwJSAgIC4uLgo=
--=-=-=
Content-Type: text/x-diff
Content-Disposition: attachment;
 filename=0001-Move-file-truename-to-the-C-level.patch

From 183e636eebd9f1653d0cfdacdeba77d2043954af Mon Sep 17 00:00:00 2001
From: Theodor Thornhill <theo@HIDDEN>
Date: Wed, 27 Mar 2024 19:42:56 +0100
Subject: [PATCH] Move file-truename to the C level

---
 lisp/files.el | 116 +++++---------------------------------------------
 src/fileio.c  |  27 ++++++++++++
 2 files changed, 38 insertions(+), 105 deletions(-)

diff --git a/lisp/files.el b/lisp/files.el
index 766ed573392..6b9846c2ef4 100644
--- a/lisp/files.el
+++ b/lisp/files.el
@@ -32,6 +32,8 @@
   (require 'pcase)
   (require 'easy-mmode)) ; For `define-minor-mode'.
 
+(declare-function file-truename "fileio.c")
+
 (defvar font-lock-keywords)
 
 (defgroup backup nil
@@ -1413,111 +1415,15 @@ files--splice-dirname-file
 	unquoted
       (let (file-name-handler-alist) (file-name-quote unquoted)))))
 
-(defun file-truename (filename &optional counter prev-dirs)
-  "Return the truename of FILENAME.
-If FILENAME is not absolute, first expands it against `default-directory'.
-The truename of a file name is found by chasing symbolic links
-both at the level of the file and at the level of the directories
-containing it, until no links are left at any level.
-
-\(fn FILENAME)"  ;; Don't document the optional arguments.
-  ;; COUNTER and PREV-DIRS are used only in recursive calls.
-  ;; COUNTER can be a cons cell whose car is the count of how many
-  ;; more links to chase before getting an error.
-  ;; PREV-DIRS can be a cons cell whose car is an alist
-  ;; of truenames we've just recently computed.
-  (cond ((or (string= filename "") (string= filename "~"))
-	 (setq filename (expand-file-name filename))
-	 (if (string= filename "")
-	     (setq filename "/")))
-	((and (string= (substring filename 0 1) "~")
-	      (string-match "~[^/]*/?" filename))
-	 (let ((first-part
-		(substring filename 0 (match-end 0)))
-	       (rest (substring filename (match-end 0))))
-	   (setq filename (concat (expand-file-name first-part) rest)))))
-
-  (or counter (setq counter (list 100)))
-  (let (done
-	;; For speed, remove the ange-ftp completion handler from the list.
-	;; We know it's not needed here.
-	;; For even more speed, do this only on the outermost call.
-	(file-name-handler-alist
-	 (if prev-dirs file-name-handler-alist
-	   (let ((tem (copy-sequence file-name-handler-alist)))
-	     (delq (rassq 'ange-ftp-completion-hook-function tem) tem)))))
-    (or prev-dirs (setq prev-dirs (list nil)))
-
-    ;; andrewi@HIDDEN - on Windows, there is an issue with
-    ;; case differences being ignored by the OS, and short "8.3 DOS"
-    ;; name aliases existing for all files.  (The short names are not
-    ;; reported by directory-files, but can be used to refer to files.)
-    ;; It seems appropriate for file-truename to resolve these issues in
-    ;; the most natural way, which on Windows is to call the function
-    ;; `w32-long-file-name' - this returns the exact name of a file as
-    ;; it is stored on disk (expanding short name aliases with the full
-    ;; name in the process).
-    (if (eq system-type 'windows-nt)
-	(unless (string-match "[[*?]" filename)
-	  ;; If filename exists, use its long name.  If it doesn't
-	  ;; exist, the recursion below on the directory of filename
-	  ;; will drill down until we find a directory that exists,
-	  ;; and use the long name of that, with the extra
-	  ;; non-existent path components concatenated.
-	  (let ((longname (w32-long-file-name filename)))
-	    (if longname
-		(setq filename longname)))))
-
-    ;; If this file directly leads to a link, process that iteratively
-    ;; so that we don't use lots of stack.
-    (while (not done)
-      (setcar counter (1- (car counter)))
-      (if (< (car counter) 0)
-	  (error "Apparent cycle of symbolic links for %s" filename))
-      (let ((handler (find-file-name-handler filename 'file-truename)))
-	;; For file name that has a special handler, call handler.
-	;; This is so that ange-ftp can save time by doing a no-op.
-	(if handler
-	    (setq filename (funcall handler 'file-truename filename)
-		  done t)
-	  (let ((dir (or (file-name-directory filename) default-directory))
-		target dirfile)
-	    ;; Get the truename of the directory.
-	    (setq dirfile (directory-file-name dir))
-	    ;; If these are equal, we have the (or a) root directory.
-	    (or (string= dir dirfile)
-		(and (file-name-case-insensitive-p dir)
-		     (string-equal-ignore-case dir dirfile))
-		;; If this is the same dir we last got the truename for,
-		;; save time--don't recalculate.
-		(if (assoc dir (car prev-dirs))
-		    (setq dir (cdr (assoc dir (car prev-dirs))))
-		  (let ((old dir)
-			(new (file-name-as-directory (file-truename dirfile counter prev-dirs))))
-		    (setcar prev-dirs (cons (cons old new) (car prev-dirs)))
-		    (setq dir new))))
-	    (if (equal ".." (file-name-nondirectory filename))
-		(setq filename
-		      (directory-file-name (file-name-directory (directory-file-name dir)))
-		      done t)
-	      (if (equal "." (file-name-nondirectory filename))
-		  (setq filename (directory-file-name dir)
-			done t)
-		;; Put it back on the file name.
-		(setq filename (concat dir (file-name-nondirectory filename)))
-		;; Is the file name the name of a link?
-		(setq target (file-symlink-p filename))
-		(if target
-		    ;; Yes => chase that link, then start all over
-		    ;; since the link may point to a directory name that uses links.
-		    ;; We can't safely use expand-file-name here
-		    ;; since target might look like foo/../bar where foo
-		    ;; is itself a link.  Instead, we handle . and .. above.
-		    (setq filename (files--splice-dirname-file dir target)
-			  done nil)
-		  ;; No, we are done!
-		  (setq done t))))))))
-    filename))
+;; (defun file-truename (filename &optional _x _y)
+;;   "Return the truename of FILENAME.
+;; If FILENAME is not absolute, first expands it against `default-directory'.
+;; The truename of a file name is found by chasing symbolic links
+;; both at the level of the file and at the level of the directories
+;; containing it, until no links are left at any level.
+
+;; \(fn FILENAME)"
+;;   (file-truename-c filename))
 
 (defun file-chase-links (filename &optional limit)
   "Chase links in FILENAME until a name that is not a link.
diff --git a/src/fileio.c b/src/fileio.c
index 12da7a9ed3a..05deedead55 100644
--- a/src/fileio.c
+++ b/src/fileio.c
@@ -24,6 +24,8 @@ Copyright (C) 1985-1988, 1993-2024 Free Software Foundation, Inc.
 #include <sys/types.h>
 #include <sys/stat.h>
 #include <unistd.h>
+#include <stdlib.h>
+#include <wordexp.h>
 
 #ifdef DARWIN_OS
 #include <sys/attr.h>
@@ -367,6 +369,30 @@ restore_point_unwind (Lisp_Object location)
   unchain_marker (XMARKER (location));
 }
 
+DEFUN ("file-truename", Ffile_truename, Sfile_truename,
+       1, 3, 0,
+       doc: /* Return the truename of FILENAME.  */)
+  (Lisp_Object filename, Lisp_Object x, Lisp_Object y)
+{
+  Lisp_Object result = filename;
+
+  CHECK_STRING (filename);
+  char *c_filename = SSDATA (filename);
+
+  wordexp_t we;
+  wordexp(c_filename, &we, 0);
+
+  char *truename = realpath(we.we_wordv[0], NULL);
+  wordfree(&we);
+
+  if (!truename)
+    return result;
+
+  result = build_string(truename);
+  free(truename);
+
+  return result;
+}
 
 DEFUN ("find-file-name-handler", Ffind_file_name_handler,
        Sfind_file_name_handler, 2, 2, 0,
@@ -6850,6 +6876,7 @@ do (file-exists-p FILENAME) and FILENAME is handled by HANDLER, then
   DEFSYM (Qstdout, "stdout");
   DEFSYM (Qstderr, "stderr");
 
+  defsubr (&Sfile_truename);
   defsubr (&Sfind_file_name_handler);
   defsubr (&Sfile_name_directory);
   defsubr (&Sfile_name_nondirectory);
-- 
2.40.1


--=-=-=--




Acknowledgement sent to Theodor Thornhill <theo@HIDDEN>:
New bug report received and forwarded. Copy sent to bug-gnu-emacs@HIDDEN. Full text available.
Report forwarded to bug-gnu-emacs@HIDDEN:
bug#70036; Package emacs. Full text available.
Please note: This is a static page, with minimal formatting, updated once a day.
Click here to see this page with the latest information and nicer formatting.
Last modified: Tue, 30 Apr 2024 11:45:02 UTC

GNU bug tracking system
Copyright (C) 1999 Darren O. Benham, 1997 nCipher Corporation Ltd, 1994-97 Ian Jackson.