GNU bug report logs - #61071
New features: VC timemachine and BackupOnSave to RCS

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; Severity: wishlist; Reported by: John Yates <john@HIDDEN>; Keywords: patch; dated Thu, 26 Jan 2023 03:25:02 UTC; Maintainer for emacs is bug-gnu-emacs@HIDDEN.

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


Received: (at 61071) by debbugs.gnu.org; 11 Jan 2024 03:44:40 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Wed Jan 10 22:44:40 2024
Received: from localhost ([127.0.0.1]:43653 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1rNlzk-00054z-CH
	for submit <at> debbugs.gnu.org; Wed, 10 Jan 2024 22:44:40 -0500
Received: from mailscanner.iro.umontreal.ca ([132.204.25.50]:3520)
 by debbugs.gnu.org with esmtp (Exim 4.84_2)
 (envelope-from <monnier@HIDDEN>) id 1rNlzi-00054j-Ib
 for 61071 <at> debbugs.gnu.org; Wed, 10 Jan 2024 22:44:38 -0500
Received: from pmg3.iro.umontreal.ca (localhost [127.0.0.1])
 by pmg3.iro.umontreal.ca (Proxmox) with ESMTP id 09B6B443056;
 Wed, 10 Jan 2024 22:44:34 -0500 (EST)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=iro.umontreal.ca;
 s=mail; t=1704944672;
 bh=Mz9eE3x/vJSnXEm3k7J+LX43ozU1EYYeFtEjOSArX78=;
 h=From:To:Cc:Subject:In-Reply-To:References:Date:From;
 b=DfCUoOEQjKVKxW2AfslyQWgfsqv5p8dFc8VG4epyxRO4pm6TfP7pq7yTcIR8LWD2G
 h1KMry+yvlO69n5xvFglPISTEc9ZD70gFq0oAAO2xIxfLoCNJp1MlqiEDdinBsQYuf
 N6IOo+Wcp/Ls/3KA6A7bNwjPbyZhg6eVktxNn8urPJFzKTCEgQsF2N7dxhniG88GuI
 frXtYmrZ6bNHHaAf3UNlYTXg09ZIYGQDbuzrRzTFSBG91UHRcXkwSOn8IXjeMbbUVT
 6MBPIaJBL2dql0fppl4eEo9V2gUoCIYxbBD+ePavNusckYdhtyYt+qRZGpWr9dBUeN
 pXWaVIsTE4o1w==
Received: from mail01.iro.umontreal.ca (unknown [172.31.2.1])
 by pmg3.iro.umontreal.ca (Proxmox) with ESMTP id 9F61F443046;
 Wed, 10 Jan 2024 22:44:32 -0500 (EST)
Received: from pastel (65-110-221-238.cpe.pppoe.ca [65.110.221.238])
 by mail01.iro.umontreal.ca (Postfix) with ESMTPSA id 6E3C812046C;
 Wed, 10 Jan 2024 22:44:32 -0500 (EST)
From: Stefan Monnier <monnier@HIDDEN>
To: Stefan Kangas <stefankangas@HIDDEN>
Subject: Re: bug#61071: New features: VC timemachine and BackupOnSave to RCS
In-Reply-To: <CADwFkmmnAn3kuCS+RbwWE0KOff6rO2xdrODnD_nZybw_RoKnvA@HIDDEN>
 (Stefan Kangas's message of "Wed, 10 Jan 2024 14:42:11 -0800")
Message-ID: <jwv4jfksfep.fsf-monnier+emacs@HIDDEN>
References: <CAJnXXoiJA971Qx4dfERLG9fjdVxWZAo7PdFRm0qhMO7rbsYZEg@HIDDEN>
 <jwvmt5j7v04.fsf-monnier+emacs@HIDDEN>
 <CAJnXXognW+mb-8q_TxHr-UUaroUnQjXhikW0nX6N6pPi_sTU7Q@HIDDEN>
 <CADwFkmmnAn3kuCS+RbwWE0KOff6rO2xdrODnD_nZybw_RoKnvA@HIDDEN>
Date: Wed, 10 Jan 2024 22:44:31 -0500
User-Agent: Gnus/5.13 (Gnus v5.13)
MIME-Version: 1.0
Content-Type: text/plain
X-SPAM-INFO: Spam detection results:  0
 ALL_TRUSTED                -1 Passed through trusted hosts only via SMTP
 AWL -0.074 Adjusted score from AWL reputation of From: address
 BAYES_00                 -1.9 Bayes spam probability is 0 to 1%
 DKIM_SIGNED               0.1 Message has a DKIM or DK signature,
 not necessarily valid
 DKIM_VALID -0.1 Message has at least one valid DKIM or DK signature
 DKIM_VALID_AU -0.1 Message has a valid DKIM or DK signature from author's
 domain
 DKIM_VALID_EF -0.1 Message has a valid DKIM or DK signature from envelope-from
 domain T_SCC_BODY_TEXT_LINE    -0.01 -
X-SPAM-LEVEL: 
X-Spam-Score: -2.3 (--)
X-Debbugs-Envelope-To: 61071
Cc: 61071 <at> debbugs.gnu.org, John Yates <john@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 (---)

> You need commit access to push a scratch branch.  Do you have that?
> Perhaps you could send it as a patch if you can't get pushing to work?

You can also push it to some other public repository.


        Stefan





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

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


Received: (at 61071) by debbugs.gnu.org; 10 Jan 2024 22:42:19 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Wed Jan 10 17:42:19 2024
Received: from localhost ([127.0.0.1]:43504 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1rNhH8-0002cA-P7
	for submit <at> debbugs.gnu.org; Wed, 10 Jan 2024 17:42:19 -0500
Received: from mail-lf1-x133.google.com ([2a00:1450:4864:20::133]:44515)
 by debbugs.gnu.org with esmtp (Exim 4.84_2)
 (envelope-from <stefankangas@HIDDEN>) id 1rNhH6-0002bw-NC
 for 61071 <at> debbugs.gnu.org; Wed, 10 Jan 2024 17:42:17 -0500
Received: by mail-lf1-x133.google.com with SMTP id
 2adb3069b0e04-50e7b273352so4901881e87.1
 for <61071 <at> debbugs.gnu.org>; Wed, 10 Jan 2024 14:42:17 -0800 (PST)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=gmail.com; s=20230601; t=1704926532; x=1705531332; darn=debbugs.gnu.org;
 h=cc:to:subject:message-id:date:mime-version:references:in-reply-to
 :from:from:to:cc:subject:date:message-id:reply-to;
 bh=cyMiOW7yW9W0noYJldisT4DtoIwm6jS5bnyVfIi9DIs=;
 b=jRMWfUH1q8NdRjEMjrX+TIFp3MvqU/X3uM7ypPgebUr23BEURvctjKiS+6wStt/DRM
 tzT4z5iGuPsk2SmKs29Qm1MwUGlXBB/TJrpIu0Q3pe18EUv6SFUG8D+OCD2ehQZ1+6vE
 VvDRqhnWYCftjZzrNa8LqX0X89oaTcssWiwkJwmYKlmfwVFWzQgiQj87H1ltzACKaExu
 hLTNBzX+5SnOYKO/Zyo82qCb4lH1UCcOkSIh63lHlTsou8cw1V3EybbFw6ElRcLSdEEn
 D9GfU6B56bhOPS89I8PNnqY4zVjkid19Gbun65M9+uxeOM5ZVZwKFM/CgeyGINerZ4Dg
 9Kqg==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=1e100.net; s=20230601; t=1704926532; x=1705531332;
 h=cc:to:subject:message-id:date:mime-version:references:in-reply-to
 :from:x-gm-message-state:from:to:cc:subject:date:message-id:reply-to;
 bh=cyMiOW7yW9W0noYJldisT4DtoIwm6jS5bnyVfIi9DIs=;
 b=poDo2tM+c2YvrH8v65Ws+iF6h2a7E0KhX/7TxRXP7lk6mEXGD6Rd6zidhwYk4j05vC
 ZfrX9xwpS1FSSVyrFglxPYwPQ7MnJ54yKjR/wuAUztrqetaVGUFt1j0TVcw9sp6knf7y
 3zt9R4nh6QnKWvNnXFhMJZdvQC//KDGY3/qWAM5dP24mUwwme3fQeC3aQ45sJqCosX/i
 cc6a5SpY12FJrK/EeOFStiY6bEcTR0gQ+1V6UQwX0uIjCWW0erJlskCTRp3pWCr0kKhh
 ZSrTT4wwZpkC9EXnUISr1ead1xnbgKsK+mSyzCBBK5G+ZKypoBY4Q9Gf31gbV+GNyIoj
 xTpw==
X-Gm-Message-State: AOJu0YwmJAFPw9uM0rr5TerPllwfVuZov2Q+EoBruPAVRESOvCno5+RR
 QqOw/y/+aGCjInf94unGSm6kowZrUaZ8R16XCl7bQgdPhRRSBQ==
X-Google-Smtp-Source: AGHT+IGop3jP9qt78ajZpMEOwIK92498GJ68xlaGe2vgspl7QPouzFOiRKZVfOTZaXGmf0jKxmhkNVV5ENxOapED0VE=
X-Received: by 2002:ac2:42c4:0:b0:50e:769b:7165 with SMTP id
 n4-20020ac242c4000000b0050e769b7165mr61138lfl.57.1704926531643; Wed, 10 Jan
 2024 14:42:11 -0800 (PST)
Received: from 753933720722 named unknown by gmailapi.google.com with
 HTTPREST; Wed, 10 Jan 2024 14:42:11 -0800
From: Stefan Kangas <stefankangas@HIDDEN>
In-Reply-To: <CAJnXXognW+mb-8q_TxHr-UUaroUnQjXhikW0nX6N6pPi_sTU7Q@HIDDEN>
 (John Yates's message of "Mon, 11 Sep 2023 09:04:34 -0400")
References: <CAJnXXoiJA971Qx4dfERLG9fjdVxWZAo7PdFRm0qhMO7rbsYZEg@HIDDEN>
 <jwvmt5j7v04.fsf-monnier+emacs@HIDDEN>
 <CAJnXXognW+mb-8q_TxHr-UUaroUnQjXhikW0nX6N6pPi_sTU7Q@HIDDEN>
MIME-Version: 1.0
Date: Wed, 10 Jan 2024 14:42:11 -0800
Message-ID: <CADwFkmmnAn3kuCS+RbwWE0KOff6rO2xdrODnD_nZybw_RoKnvA@HIDDEN>
Subject: Re: bug#61071: New features: VC timemachine and BackupOnSave to RCS
To: John Yates <john@HIDDEN>
Content-Type: text/plain; charset="UTF-8"
X-Spam-Score: -0.0 (/)
X-Debbugs-Envelope-To: 61071
Cc: 61071 <at> debbugs.gnu.org, Stefan Monnier <monnier@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 (-)

John Yates <john@HIDDEN> writes:

> Stefan Kangas,
>
> Personal and family issues have arisen that make me quite unsure of
> when I will be able to return to this activity.
>
> I did address just about all of Stefan Monnier's feedback (see
> appended, never sent reply below).
>
> Currently the code is on a scratch/backup-on-save-to-rcs branch in my
> local repository.  I tried unsuccessfully to push it to Savannah:
>
> |   jyates@envy:~/repos/emacs.sv
> |   $ git push -u origin scratch/backup-on-save-to-rcs
> |   fatal: remote error: access denied or repository not exported: /emacs.git
>
> I was under the impression that no special permissions are needed to
> push a scratch branch.  Am I doing something wrong?

Apologies for the late reply here.

You need commit access to push a scratch branch.  Do you have that?

Perhaps you could send it as a patch if you can't get pushing to work?

> In my testing, the code works nicely.  My current sense of things that
> could be improved are:
> - Finding the proper commit in a series whose only metadata is the
> commit timestamp is sub-optimal.
> - It might be nice to have some kind of cron-based clean-up or commit squashing




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

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


Received: (at 61071) by debbugs.gnu.org; 11 Sep 2023 13:05:02 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Mon Sep 11 09:05:02 2023
Received: from localhost ([127.0.0.1]:52335 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1qfgb6-0004B8-Sz
	for submit <at> debbugs.gnu.org; Mon, 11 Sep 2023 09:05:01 -0400
Received: from mail-ej1-f47.google.com ([209.85.218.47]:42460)
 by debbugs.gnu.org with esmtp (Exim 4.84_2)
 (envelope-from <john.yates.sheets@HIDDEN>) id 1qfgb3-0004At-H8
 for 61071 <at> debbugs.gnu.org; Mon, 11 Sep 2023 09:04:59 -0400
Received: by mail-ej1-f47.google.com with SMTP id
 a640c23a62f3a-99c93638322so946949966b.1
 for <61071 <at> debbugs.gnu.org>; Mon, 11 Sep 2023 06:04:53 -0700 (PDT)
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=1e100.net; s=20230601; t=1694437487; x=1695042287;
 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=rL5UXoZBXy1awwagyV0gJxR0IvBQPzaEYx9uV+Ri8ts=;
 b=LLgJsXgbbQ3imR4ZGUv7riAaNWrxH6F8DvTfBaTCMCH/AzLQQ8RRwTlYmrvm124vfE
 3a1GEp3KJb+LD+9CT0GvZX2i/hPKBzdtSoFEsAqdXwWdq7hsR/6FqYzzaWzj5emsBR/l
 UxvwDTE3Fvx9RT+n7AZ4gzqWxI6cw0NF6e/cuFQDbCQkqRT4W/6vKEGVck0fV8txFmPh
 bptc8UpFaTCmEokdM06ZtyDusoBhj0SPBc5EvwcWLCVsBI6t79CAYFGZ6ot3lO4u5wF5
 pTDoXRmxgden+LWfcn3VJypd1+Z6cmSg1xyjT9vV5/ZzfjVe85qkN0a6Y9Syz0Ejhpuc
 D9Wg==
X-Gm-Message-State: AOJu0YwxtFMOevxS8hGAoarmblgp9dlnPzz5DlmYi2+A5/1Pl6hFojEp
 wg7C9Xd2AfpMJu3T1IfF03Oi/obY1E/Q/JFn9s4B8NlUALQ=
X-Google-Smtp-Source: AGHT+IF3D5OlG/JuEd7JgbFPSs83SkH93n8KZlDP04WYxzsEqFn16dHikS/Cj1tqK/Du4RZ9EbLNFYwE0QvEVm63S2Q=
X-Received: by 2002:a17:906:5a63:b0:9a5:f038:a4c1 with SMTP id
 my35-20020a1709065a6300b009a5f038a4c1mr11935331ejc.26.1694437487011; Mon, 11
 Sep 2023 06:04:47 -0700 (PDT)
MIME-Version: 1.0
References: <CAJnXXoiJA971Qx4dfERLG9fjdVxWZAo7PdFRm0qhMO7rbsYZEg@HIDDEN>
 <jwvmt5j7v04.fsf-monnier+emacs@HIDDEN>
In-Reply-To: <jwvmt5j7v04.fsf-monnier+emacs@HIDDEN>
From: John Yates <john@HIDDEN>
Date: Mon, 11 Sep 2023 09:04:34 -0400
Message-ID: <CAJnXXognW+mb-8q_TxHr-UUaroUnQjXhikW0nX6N6pPi_sTU7Q@HIDDEN>
Subject: Re: bug#61071: New features: VC timemachine and BackupOnSave to RCS
To: Stefan Kangas <stefankangas@HIDDEN>,
 Stefan Monnier <monnier@HIDDEN>
Content-Type: text/plain; charset="UTF-8"
X-Spam-Score: 0.5 (/)
X-Debbugs-Envelope-To: 61071
Cc: 61071 <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.5 (/)

Stefan Kangas,

Personal and family issues have arisen that make me quite unsure of
when I will be able to return to this activity.

I did address just about all of Stefan Monnier's feedback (see
appended, never sent reply below).

Currently the code is on a scratch/backup-on-save-to-rcs branch in my
local repository.  I tried unsuccessfully to push it to Savannah:

|   jyates@envy:~/repos/emacs.sv
|   $ git push -u origin scratch/backup-on-save-to-rcs
|   fatal: remote error: access denied or repository not exported: /emacs.git

I was under the impression that no special permissions are needed to
push a scratch branch.  Am I doing something wrong?

In my testing, the code works nicely.  My current sense of things that
could be improved are:
- Finding the proper commit in a series whose only metadata is the
commit timestamp is sub-optimal.
- It might be nice to have some kind of cron-based clean-up or commit squashing

/john

=============================

Hi Stefan,

Thank you so much for this clearly deep review.  Responses inline.

If nothing else, please see the places labeled 'QUESTION:'.

Still TODO:
- vc-find-revision: sort out whether PRETEND is really needed
- vc-find-revision: try to reduce ignore-errors to ignore-error
- vc-tm-revision-next: support prefix arg for count
- vc-tm-revision-previous: support prefix arg for count
- once vc-timemachine.el is available on master request an
  enh-ruby-mode enhancement is still needed (MELPA)

/john

On Sat, Feb 11, 2023 at 6:02 PM Stefan Monnier <monnier@HIDDEN> wrote:
>
> Sorry about the ridiculous delay.

No harm.  I too am regularly slow to follow up.  To whit, look how long
it has taken me to act fully on your review.  (Life has a way of intervening,
but that is only a partial excuse.)

> > -(defcustom vc-find-revision-no-save nil
> > -  "If non-nil, `vc-find-revision' doesn't write the created buffer to file."
> > +(defcustom vc-find-revision-cache nil
> > +  "When non-nil, `vc-find-revision' caches a local copy of returned revision."
> >    :type 'boolean
> > -  :version "27.1")
> > +  :version "30.1")
>
> This throws away `vc-find-revision-no-save` without first marking it
> obsolete.  I suggest you keep `vc-find-revision-no-save` (and maybe
> provide an alias like `vc-find-revision-no-cache`).  It shouldn't affect
> the rest of your code much, and it will preserve compatibility with
> users's settings.
>
> Whether the default value should stay nil or become t is a separate
> question and in this respect I agree with your patch that the default
> should be changed.

It turned out easiest just to revert to the original -no-save option.
So nothing to obsolete.  But, I did change the default.

> > +(defcustom vc-cache-root nil
> > +  "If non-nil, the root of a tree of cached revisions (no trailing '/').
> > +
> > +When `vc-find-revision-cache' is non-nil, if `vc-cache-root' is nil then the
> > +cached revision will be a sibling of its working file, otherwise the cached
> > +revision will be saved to a mirror path beneath `vc-cache-root.'
> > +
> > +To use `vc-bos-mode', `vc-cache-root' must include a /RCS component."
> > +  :type 'string
> > +  :version "30.1")
>
> At this point in the patch sequence, `vc-bos-mode` doesn't exist yet.

That last documentation line now gets added in the vc-bos patch.

> > +(defvar-local vc-tm--revision nil
> > +  "Convey a revision buffer's VCS specific unique revision id to VC-TM." )
> > +(put 'vc-tm--revision 'permanent-local t)
>
> What's "VC-TM"?  The `vc-tm` prefix is not used anywhere else, so it'd
> be better not to use it.  How 'bout `vc--revbuf-revision` and just
> document the info it holds rather than the intended use of that info
> when the code was written?
> Or otherwise, wait until the next patch to introduce this var.

|    (defvar-local vc--revbuf-revision nil
|      "Remember a revision buffer's VCS-specific unique revision." )
|    (put 'vc--revbuf-revision 'permanent-local t)

> > +         (parent (or buffer (get-file-buffer file) (current-buffer)))
> > +         (revd-file (vc-version-backup-file-name file revision 'manual))
> > +         (true-dir (file-name-directory file))
> > +         (true-name (file-name-nondirectory file))
> > +         (save-dir (concat vc-cache-root true-dir))
>
> Please add a comment explaining why `expand-file-name` would not
> be right.

|         ;; Use concat because true-dir and revd-file are already absolute.
|         ;; Here each is being mirrored beneath vc-mirror-root.
|         (save-dir (concat vc-mirror-root true-dir))
|         (save-file (concat vc-mirror-root revd-file))

> > +         (revd-name (file-name-nondirectory revd-file))
> > +         (save-file (concat vc-cache-root revd-file))
> > +         ;; Some hooks assume that buffer-file-name associates a buffer with
> > +         ;; a true file.  This mapping is widely assumed to be one-to-one.
> > +         ;; To avoid running afoul of that assumption this fictitious path
> > +         ;; is expected to be unique (bug#39190).  This path also has the
>
> The GNU convention is to call those things "file names" rather than
> "paths", because "path" is only used to mean a list of directories, as
> in `load-path`.

Done.

QUESTION:
In code I see the identifier 'filename', but in documentation I see the
phrase 'file name'.  Is that a correct statement of the convention?

> > +         ;; virtue that it exhibits the same file type (extension) as FILE.
> > +         ;; This improves setting the buffers modes.
> > +         (pretend (concat true-dir "PRETEND/" true-name))
>
> The old code just used `file` for `buffer-file-name` during
> `set-auto-mode`.  I believe it was safer.
> Why do you need this "PRETEND/", it seems to be a change unrelated to
> the rest of the patch.

TODO: provide an answer

> > +            ;; Prep revbuf in case it is being reused.
> > +            (setq buffer-file-name nil) ; Cancel any prior file visitation
> > +            (setq vc-parent-buffer nil)
> > +            (setq vc-tm--revision nil)
> > +            (setq buffer-read-only nil)
>
> Why not set them directly to their intended value?

Done.

> > +             ;; A cached file is viable IFF it is not writable.
> > +             ((and (file-exists-p save-file) (not (file-writable-p save-file)))
> > +              (insert-file-contents save-file t))
>
> Rather than repeat what the code tests, the comment should explain why
> (you think) it needs to be "not writable" to be viable.

|            ;; Do not trust an existing file to be an intact cached copy
|            ;; of the desired revision unless it is read-only.  This is
|            ;; because, in spite of having the desired filename, it may
|            ;; have been corrupted subsequent to its creation.  Since this
|            ;; function creates cached copies as read-only, some other agent
|            ;; would have had to have change the permissions and, most
|            ;; likely, changed the file's contents as well.

> > +              ;; Backend's output was read with 'no-conversions; do the same for write
> > +              (setq buffer-file-coding-system 'no-conversion)
> > +              (write-region nil nil save-file)
>
> Why `setq` rather than let-binding?

Fixed.

> Also, I can't see where in the new code you do the decoding which the
> old code does with (decode-coding-inserted-region (point-min)
> (point-max) file)?

Thank you for pointing out this omission.

My vc-find-revision function attempts to unify the behavior of the
earlier vc-find-revision-no-save and vc-find-revision-save functions.
Investigating the omission you identified has helped me to better
understand the relationship between those two functions and the
version that I have attempted to craft.  Based on your many bits of
feedback my function is now shorter and better commented.
I hope that it is clearer, more idiomatic, and more nearly correct.

> > +              (set-file-modes save-file (logand (file-modes save-file) #o7555)))
>
> There can be circumstances where a file is always writable, no
> matter how hard we try to use `set-file-modes`.

Indeed.  Now mentioned in a comment.

> > diff --git a/lisp/vc/vc-git.el b/lisp/vc/vc-git.el
> > index 7689d5f879..1f45aa7e96 100644
> > --- a/lisp/vc/vc-git.el
> > +++ b/lisp/vc/vc-git.el
> > @@ -82,6 +82,9 @@
> >  ;; - annotate-time ()                              OK
> >  ;; - annotate-current-time ()                      NOT NEEDED
> >  ;; - annotate-extract-revision-at-line ()          OK
> > +;; TIMEMACHINE
> > +;; * tm-revisions (file)
> > +;; * tm-map-line (file from-revision from-line to-revision from-is-older)
> >  ;; TAG/BRANCH SYSTEM
> >  ;; - create-tag (dir name branchp)                 OK
> >  ;; - retrieve-tag (dir name update)                OK
>
> Any specific reason you used `*` rather than `-`?
> [ I have no objection to this choice, just curious.  ]

From vc.el's front matter:

|    ;; In the list of functions below, each identifier needs to be prepended
|    ;; with `vc-sys-'.  Some of the functions are mandatory (marked with a
|    ;; `*'), others are optional (`-').

> > @@ -101,6 +104,8 @@
> >
> >  (require 'cl-lib)
> >  (require 'vc-dispatcher)
> > +(require 'transient)
> > +(require 'vc-timemachine)
> >  (eval-when-compile
> >    (require 'subr-x) ; for string-trim-right
> >    (require 'vc)
>
> Are these really indispensable here?
>
> `vc-git` will be loaded into many more sessions than those where
> `transient` and `vc-timemachine` will be used, so it would be *much*
> better if those packages could be loaded more lazily here.

The unnecessary requires came in as part of refactoring git-timemachine.
Both are now gone.  Here are vc-git's current requires:

|    (require 'cl-lib)
|    (require 'vc-dispatcher)
|    (eval-when-compile
|      (require 'subr-x) ; for string-trim-right
|      (require 'vc)
|      (require 'vc-dir))

> > @@ -166,6 +171,12 @@ vc-git-program
> >    :version "24.1"
> >    :type 'string)
> >
> > +(defcustom vc-git-global-git-arguments
> > +  '("-c" "log.showSignature=false" "--no-pager")
> > +  "Common arguments for all git commands."
> > +  :type 'list
> > +  :group 'vc-timemachine)
>
> Why is this in the `vc-timemachine` group?
> Why do we need to add those args to all the Git commands?

This came from moving the renamed function vc-git-process-file and
the renamed option vc-git-global-git-arguments out of git-timemachine
and into vc-git.  The vc-timemachine group was a vestige of that same
refactoring.  I have improved the naming and documentation:

|    (defcustom vc-git-global-git-process-file-arguments
|      '("-c" "log.showSignature=false" "--no-pager")
|      "Common arguments for all invocations of `vc-git--process-file'."
|      :type 'list)

|    (defun vc-git--process-file (&rest args)
|      "Run `process-file' with ARGS and
`vc-git-global-git-process-file-arguments'."
|      (apply #'process-file vc-git-program nil t nil
|             (append vc-git-global-git-process-file-arguments args)))

> > -    (vc-git-command
> > -     buffer 0
> > -     nil
> > -     "cat-file" "blob" (concat (if rev rev "HEAD") ":" fullname))))
> > +    (ignore-errors
> > +      (vc-git-command
> > +       buffer 0
> > +       nil
> > +       "cat-file" "blob" (concat (if rev rev "HEAD") ":" fullname)))))
>
> Please add a comment here explaining why we need `ignore-errors` (you
> can probably just move the text you currently have in the commit
> message: in many cases it's better to put those comments in the code
> rather than in the commit message).

Done.

> Also, if you can use `ignore-error` instead, it would be better.

TODO: determine actual error and switch to ignore-error

> > +        (setq new-date (vc-tm-format-date (match-string 2 line)))
>
> How important is it to use the `vc-tm-date-format`?
> I'm not super happy about the current design in this regard.  I think it
> would make more sense to define `tm-revisions` as returning dates in the
> "cheapest" format possible (the one that takes least effort), e.g.
> as an ELisp time value (e.g. as returned by `date-to-time`) or as
> "any format that `date-to-time` understands"?
> Then the call to `vc-tm-date-format` can be moved to
> `vc-timemachine.el`.

Done, exactly as you suggested.  Thanks.

> > -(eval-when-compile (require 'cl-lib))
> > +(eval-when-compile
> > +  (require 'cl-lib))
>
> Why?
> [ It's likely a question of taste, so I' recommend not to touch it.
>   Of course, I noticed it because my taste prefers the current format
>   (because in `outline-minor-mode` the `require` is otherwise hidden
>   for no benefit).  ]
>
> > @@ -41,6 +45,7 @@
> >    (require 'cl-lib)
> >    (require 'vc))
> >  (require 'log-view)
> > +(require 'vc-timemachine)
>
> Same comment as for `vc-git`.

These are now gone.  Further, I have attempted to eliminate unnecessary
requires in all files that I have touched.

> > +        (setq line (buffer-substring-no-properties (line-beginning-position) (line-end-position)))
>
> Please try very hard to always stay within 80 columns.

Got it.  Corrected all violations that I could find.

> > +(defgroup vc-timemachine nil
> > +  "Time-machine functionality for VC backends."
> > +  :group 'vc
> > +  :version "30.1")
> > +
> > +(defcustom vc-tm-date-format
> > +  "%a %I:%M %p %Y-%m-%d"
> > +  "Revision creation date format (emphasis on easy date comparison)."
> > +  :type 'string
> > +  :group 'vc-timemachine
> > +  :version "30.1")
>
> The `:group` arg here is redundant (`defcustom` would use that group by
> default here anyway).  Same for the subsequent `defcustom`s and `defface`s.

Fixed

> > +(defvar-local vc--time-machine nil
> > +  "Cache a TM hint on various buffers.")
> > +(put 'vc--time-machine 'permanent-local t)
>
> The docstring seems of very little as it stands.  You could just as well
> remove it (tho it'd be better to actually describe what this var should
> hold, of course :-).

Updated:

|    (defvar-local vc--tmbuf nil
|      "Bind a non-timemachine buffer to its tmbuf.")
|    (put 'vc--tmbuf 'permanent-local t)

> > +(defvar-local tmbuf--abs-file nil
> > +  "Absolute path to file being traversed by this time-machine.")
>
> "path" => "file name".
>
> Also, please use the "vc-" prefix.  Same for the other "tmbuf-" vars.

Updated:

|    (defvar-local vc--tmbuf-file nil
|      "Version controlled file being traversed by this tmbuf.")
|    (put 'vc--tmbuf-file 'permanent-local t)
|    (defvar-local vc--tmbuf-backend nil
|      "The VC backend being used by this tmbuf")
|    (put 'vc--tmbuf-backend 'permanent-local t)
|    (defvar-local vc--tmbuf-branch-index nil
|      "Zero-base index into vc--tmbuf-branch-revisions.")
|    (put 'vc--tmbuf-branch-index 'permanent-local t)
|    (defvar-local vc--tmbuf-branch-revisions nil
|      "When non-nil, a vector of revision-info lists.")
|    (put 'vc--tmbuf-branch-revisions 'permanent-local t)

> > +(defvar-local tmbuf--branch-index nil
> > +  "Zero-base index into tmbuf--branch-revisions.")
> > +(put 'tmbuf--branch-revisions 'permanent-local t)
> > +(defvar-local tmbuf--branch-revisions nil
> > +  "When non-nil, a vector of revision-info lists.")
> > +(put 'tmbuf--branch-revisions 'permanent-local t)
>
> You make `tmbuf--branch-revisions` permanent twice (the other should
> probably be for `tmbuf--branch-index`, right?).

Fixed.  See immediately preceding quoted source.

> > +(defvar-local tmbuf--source-buffer nil
> > +  "A non-time-machine buffer for which this time-machine was created.")
> > +(put 'tmbuf--source-buffer 'permanent-local t)
>
> Any reason we can't use `vc-parent-buffer`?

Ultimately, tmbuf--source-buffer was unused.  Now gone.

> > +(defun vc-tm--time-machine ()
> > +  "Return a valid time-machine for the current buffer."
>
> Indicate how it's returned.  I.e. either by changing current-buffer, or
> by returning a buffer object (in which case it should *not* change
> current-buffer).

Done.

|      "Return a valid tmbuf for the current buffer.
|
|    A tmbuf (timemachine buffer) has a properly filled-out set of vc--tmbuf*
|    local variables.  If the current buffer is already a valid tmbuf then
|    just return that buffer.  Otherwise create a revbuf for the
current buffer's
|    file (or, if the current buffer is an indirect buffer, then for the base
|    buffer's file) and set its vc--tmbuf* data.  Most importantly, set
|    vc--tmbuf-branch-revisions  to an ordered vector of revision information
|    lists for the revisions on the work file's branch."

> > +        (when vc-tm-echo-area
> > +          (vc-tm--show-echo-area-details new-revision-info))))
> > +      (vc-tm--erm-workaround))))
>
> Please avoid this `vc-tm--erm-workaround` here.  Better add a "generic
> hook"

Done.

> i.e. a hook whose meaning makes sense independently from this ERM
> problem), and then arrange for some code somewhere (probably best if
> it's in `enh-ruby-mode`) to add a function to this hook.
>
> > +(declare-function erm-reset-buffer "ext:enh-ruby-mode")
> > +
> > +(defun vc-tm--erm-workaround ()
> > +  "Workaround for enhanced ruby mode not detecting revision change."
> > +  (when (eq major-mode 'enh-ruby-mode)
> > +    (ignore-errors (erm-reset-buffer))))
>
> Prefer `derived-mode-p`.  Add a comment explaining the problem or
> pointing to info about it.
> Arrange to try and make this unnecessary in the future (i.e. open a bug
> report with the enh-ruby-mode guys?  Or fix the source of the bug if
> it's elsewhere in Emacs itself?).

This is a bit hard to do.  enh-ruby-mode is only available from
MELPA.  And opening a bug mentioning an available hook in
a package that is not yet available feels strange.

TODO: Once vc-timemachine is available on master post
an enhancement request to enh-ruby-mode.

> > +;; - tm-map-line (rel-file from-revision from-line to-revision from-is-older)
> > +;;
> > +;;   Return TO-REVISION's line corresponding to FROM-REVISION's FROM-LINE.
> > +;;   FROM-REVISION and TO-REVISION are guaranteed distinct.  FROM-IS-OLDER
> > +;;   indicates relative temporal ordering of FROM-REVISION and TO-REVISION
> > +;;   on the branch.
>
> Please clarify that you're talking about line *numbers* (I thought at
> first you were talking about some completely different notion of lines,
> such as "product line" or "history line").

How is this?

|    ;;   Return a TO-REVISION line number corresponding to FROM-REVISION's
|    ;;   FROM-LINE.  FROM-REVISION and TO-REVISION are guaranteed distinct.
|    ;;   FROM-IS-OLDER indicates relative temporal ordering of FROM-REVISION
|    ;;   and TO-REVISION on the branch.

> OK, I'll stop here for now.

That was a great review!  I know that it took concentration and
effort.  Thank you!



/john




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

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


Received: (at 61071) by debbugs.gnu.org; 4 Sep 2023 19:48:08 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Mon Sep 04 15:48:08 2023
Received: from localhost ([127.0.0.1]:52656 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1qdFYN-0006sR-Sy
	for submit <at> debbugs.gnu.org; Mon, 04 Sep 2023 15:48:08 -0400
Received: from mail-lj1-x233.google.com ([2a00:1450:4864:20::233]:61523)
 by debbugs.gnu.org with esmtp (Exim 4.84_2)
 (envelope-from <stefankangas@HIDDEN>) id 1qdFYL-0006r8-1T
 for 61071 <at> debbugs.gnu.org; Mon, 04 Sep 2023 15:48:06 -0400
Received: by mail-lj1-x233.google.com with SMTP id
 38308e7fff4ca-2b9c907bc68so27150651fa.2
 for <61071 <at> debbugs.gnu.org>; Mon, 04 Sep 2023 12:48:04 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=gmail.com; s=20221208; t=1693856879; x=1694461679; darn=debbugs.gnu.org;
 h=cc:to:subject:message-id:date:mime-version:references:in-reply-to
 :from:from:to:cc:subject:date:message-id:reply-to;
 bh=afm+c8GYH3jjrNutsgaPjb2RkTJxBngGF9m7sbUNqxc=;
 b=DRMANifopK3fIEl3M2k/qhQDAqjDsxNsD/EsMgRmt0mepnf7o65rwbT1SayYIK+4VR
 4OpKXRjcyAPtB56mkAEvFYYeW2McD4mox89Z3vp576n+znIzdn4V/Dp/+3OliE1d6/0L
 r/HEbJ0QtV53xLnrAslNgwzMZUeM2tESW25vkfyks1eT1JBA6GyjF/JByFgmdfWyT5DT
 9gw2LqMMwRCnfs+G/0gptbo4YcwuRczgboa7cblYhDL6neJaoXD4HIAqrgoJNrJY3VwZ
 tYLDYx+l+JfMYHKULGwFMMwAzq3Br2jgfwtsrHO7cbpRkQBfxCHue6lhkVX10v1MVVH/
 ZRvQ==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=1e100.net; s=20221208; t=1693856879; x=1694461679;
 h=cc:to:subject:message-id:date:mime-version:references:in-reply-to
 :from:x-gm-message-state:from:to:cc:subject:date:message-id:reply-to;
 bh=afm+c8GYH3jjrNutsgaPjb2RkTJxBngGF9m7sbUNqxc=;
 b=CwEdKt2JmXuTULgnHhyX28IO+2spAMpc4yL7S6y/al7swCIqIzklSAMgbZX63hxbj3
 tgW/87gmg0vTrMedwIuoNR6/HDAXqKUwNrewymJYKvdeJ0FVZ+YmWsjTdMfOYjVlQhVM
 5o+qbTXZHnG29QCGBATFKqMEI3P/ym9a84rtnQBuMf/N0tL4hPv5vnu8IdPBMEh1PT3E
 cb/uVsunrjagQ9RyURakxbNVYY/iEzPTIIg+Mh5pQTfUcKbGoA13YcnyVksqNhwggz7a
 Z3WLPvqrWV0Di5/aEqIYZ9mpnDKXr3aTphzHsf1HFD8w/CwyIliXOnEj77fsutVAMYtp
 w0Lw==
X-Gm-Message-State: AOJu0YzR6xxr2Y1HgQ5yF98eoK1+EdDhaGPS0/xb8wv7PGhatr/IL+Oq
 vfy6wG74Lx1sGJEkKiWep7MTCnaJ27oS8mSTw34=
X-Google-Smtp-Source: AGHT+IH0NIvrw884/OCuj9twBhcv/QDYBf4NpsBd3YwNnoyBhnTzxWGnzTs2n6ypMeqYylg7utQ+vR0b87WcNK8HTOg=
X-Received: by 2002:a2e:9d10:0:b0:2b9:4413:864e with SMTP id
 t16-20020a2e9d10000000b002b94413864emr7444868lji.53.1693856878982; Mon, 04
 Sep 2023 12:47:58 -0700 (PDT)
Received: from 753933720722 named unknown by gmailapi.google.com with
 HTTPREST; Mon, 4 Sep 2023 12:47:58 -0700
From: stefankangas@HIDDEN
In-Reply-To: <jwvmt5j7v04.fsf-monnier+emacs@HIDDEN> (Stefan Monnier's message
 of "Sat, 11 Feb 2023 18:02:22 -0500")
References: <CAJnXXoiJA971Qx4dfERLG9fjdVxWZAo7PdFRm0qhMO7rbsYZEg@HIDDEN>
 <jwvmt5j7v04.fsf-monnier+emacs@HIDDEN>
MIME-Version: 1.0
Date: Mon, 4 Sep 2023 12:47:58 -0700
Message-ID: <CADwFkm=jnZrkV43xRug1q7H3V+MFVPHzqu8=UP+er1XV4XbKZw@HIDDEN>
Subject: Re: bug#61071: New features: VC timemachine and BackupOnSave to RCS
To: Stefan Monnier <monnier@HIDDEN>
Content-Type: text/plain; charset="UTF-8"
X-Spam-Score: 0.0 (/)
X-Debbugs-Envelope-To: 61071
Cc: 61071 <at> debbugs.gnu.org, John Yates <john@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 (-)

Stefan Monnier <monnier@HIDDEN> writes:

> Sorry about the ridiculous delay.
>
> The general functionality sounds great to me.
> Some comments below:

John, did you make any progress with this patch?

Thanks in advance.




Information forwarded to bug-gnu-emacs@HIDDEN:
bug#61071; Package emacs. Full text available.
Severity set to 'wishlist' from 'normal' Request was from Stefan Kangas <stefankangas@HIDDEN> to control <at> debbugs.gnu.org. Full text available.

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


Received: (at 61071) by debbugs.gnu.org; 11 Feb 2023 23:02:38 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Sat Feb 11 18:02:38 2023
Received: from localhost ([127.0.0.1]:43510 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1pQytC-0006tM-1J
	for submit <at> debbugs.gnu.org; Sat, 11 Feb 2023 18:02:38 -0500
Received: from mailscanner.iro.umontreal.ca ([132.204.25.50]:21265)
 by debbugs.gnu.org with esmtp (Exim 4.84_2)
 (envelope-from <monnier@HIDDEN>) id 1pQyt8-0006t8-0L
 for 61071 <at> debbugs.gnu.org; Sat, 11 Feb 2023 18:02:36 -0500
Received: from pmg3.iro.umontreal.ca (localhost [127.0.0.1])
 by pmg3.iro.umontreal.ca (Proxmox) with ESMTP id 5437F44215C;
 Sat, 11 Feb 2023 18:02:28 -0500 (EST)
Received: from mail01.iro.umontreal.ca (unknown [172.31.2.1])
 by pmg3.iro.umontreal.ca (Proxmox) with ESMTP id 362A6442160;
 Sat, 11 Feb 2023 18:02:25 -0500 (EST)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=iro.umontreal.ca;
 s=mail; t=1676156545;
 bh=j6qP0qk1jXmCNezHcdJLPLz8gQewd8iI45YVz4ZAoJ0=;
 h=From:To:Cc:Subject:In-Reply-To:References:Date:From;
 b=odrA8ZFY+u0Dvf9mHC1L0VXaZBdOWWucilsLfpNP9uGbBoXTwurpgFa7G07Zw+YB6
 qM5AsV3je0FfuxmAKICsbdzwuZUb7jheesCiYYecShPOQrdeeqNoef574VNBHdIFB2
 cZ7AnJ0dNBQRiPgmIiHcyjhOT42kuVfvLt+xF3CmJEeZJTMYn3B4Z4iFPwk9wvwbnn
 VEDVWuN1WMDr82egdlI9F8NjtqPpIERPh/nTeKRWBUvMT4hKL1ZERE8S0lzNxaIxAT
 ogCctqhxtKEtSWcefLcLsDoV9g5sakreKqJTFmALhwKYBdAUYyQEAdEjw05f6bgBmx
 T/frDVeixAcDQ==
Received: from ceviche (unknown [45.44.229.252])
 by mail01.iro.umontreal.ca (Postfix) with ESMTPSA id 05BF0123190;
 Sat, 11 Feb 2023 18:02:24 -0500 (EST)
From: Stefan Monnier <monnier@HIDDEN>
To: John Yates <john@HIDDEN>
Subject: Re: bug#61071: New features: VC timemachine and BackupOnSave to RCS
In-Reply-To: <CAJnXXoiJA971Qx4dfERLG9fjdVxWZAo7PdFRm0qhMO7rbsYZEg@HIDDEN>
 (John Yates's message of "Wed, 25 Jan 2023 22:24:30 -0500")
Message-ID: <jwvmt5j7v04.fsf-monnier+emacs@HIDDEN>
References: <CAJnXXoiJA971Qx4dfERLG9fjdVxWZAo7PdFRm0qhMO7rbsYZEg@HIDDEN>
Date: Sat, 11 Feb 2023 18:02:22 -0500
User-Agent: Gnus/5.13 (Gnus v5.13)
MIME-Version: 1.0
Content-Type: text/plain
X-SPAM-INFO: Spam detection results:  0
 ALL_TRUSTED                -1 Passed through trusted hosts only via SMTP
 AWL 0.500 Adjusted score from AWL reputation of From: address
 BAYES_00                 -1.9 Bayes spam probability is 0 to 1%
 DKIM_SIGNED               0.1 Message has a DKIM or DK signature,
 not necessarily valid
 DKIM_VALID -0.1 Message has at least one valid DKIM or DK signature
 DKIM_VALID_AU -0.1 Message has a valid DKIM or DK signature from author's
 domain
X-SPAM-LEVEL: 
X-Spam-Score: -2.3 (--)
X-Debbugs-Envelope-To: 61071
Cc: 61071 <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 (---)

Sorry about the ridiculous delay.

The general functionality sounds great to me.
Some comments below:

> -(defcustom vc-find-revision-no-save nil
> -  "If non-nil, `vc-find-revision' doesn't write the created buffer to file."
> +(defcustom vc-find-revision-cache nil
> +  "When non-nil, `vc-find-revision' caches a local copy of returned revision."
>    :type 'boolean
> -  :version "27.1")
> +  :version "30.1")

This throws away `vc-find-revision-no-save` without first marking it
obsolete.  I suggest you keep `vc-find-revision-no-save` (and maybe
provide an alias like `vc-find-revision-no-cache`).  It shouldn't affect
the rest of your code much, and it will preserve compatibility with
users's settings.

Whether the default value should stay nil or become t is a separate
question and in this respect I agree with your patch that the default
should be changed.

> +(defcustom vc-cache-root nil
> +  "If non-nil, the root of a tree of cached revisions (no trailing '/').
> +
> +When `vc-find-revision-cache' is non-nil, if `vc-cache-root' is nil then the
> +cached revision will be a sibling of its working file, otherwise the cached
> +revision will be saved to a mirror path beneath `vc-cache-root.'
> +
> +To use `vc-bos-mode', `vc-cache-root' must include a /RCS component."
> +  :type 'string
> +  :version "30.1")

At this point in the patch sequence, `vc-bos-mode` doesn't exist yet.

> +(defvar-local vc-tm--revision nil
> +  "Convey a revision buffer's VCS specific unique revision id to VC-TM." )
> +(put 'vc-tm--revision 'permanent-local t)

What's "VC-TM"?  The `vc-tm` prefix is not used anywhere else, so it'd
be better not to use it.  How 'bout `vc--revbuf-revision` and just
document the info it holds rather than the intended use of that info
when the code was written?
Or otherwise, wait until the next patch to introduce this var.

> +         (parent (or buffer (get-file-buffer file) (current-buffer)))
> +         (revd-file (vc-version-backup-file-name file revision 'manual))
> +         (true-dir (file-name-directory file))
> +         (true-name (file-name-nondirectory file))
> +         (save-dir (concat vc-cache-root true-dir))

Please add a comment explaining why `expand-file-name` would not
be right.

> +         (revd-name (file-name-nondirectory revd-file))
> +         (save-file (concat vc-cache-root revd-file))
> +         ;; Some hooks assume that buffer-file-name associates a buffer with
> +         ;; a true file.  This mapping is widely assumed to be one-to-one.
> +         ;; To avoid running afoul of that assumption this fictitious path
> +         ;; is expected to be unique (bug#39190).  This path also has the

The GNU convention is to call those things "file names" rather than
"paths", because "path" is only used to mean a list of directories, as
in `load-path`.

> +         ;; virtue that it exhibits the same file type (extension) as FILE.
> +         ;; This improves setting the buffers modes.
> +         (pretend (concat true-dir "PRETNED/" true-name))

The old code just used `file` for `buffer-file-name` during
`set-auto-mode`.  I believe it was safer.
Why do you need this "PRETNED/", it seems to be a change unrelated to
the rest of the patch.

> +            ;; Prep revbuf in case it is being reused.
> +            (setq buffer-file-name nil) ; Cancel any prior file visitation
> +            (setq vc-parent-buffer nil)
> +            (setq vc-tm--revision nil)
> +            (setq buffer-read-only nil)

Why not set them directly to their intended value?

> +             ;; A cached file is viable IFF it is not writable.
> +             ((and (file-exists-p save-file) (not (file-writable-p save-file)))
> +              (insert-file-contents save-file t))

Rather than repeat what the code tests, the comment should explain why
(you think) it needs to be "not writable" to be viable.

> +              ;; Backend's output was read with 'no-conversions; do the same for write
> +              (setq buffer-file-coding-system 'no-conversion)
> +              (write-region nil nil save-file)

Why `setq` rather than let-binding?

Also, I can't see where in the new code you do the decoding which the
old code does with (decode-coding-inserted-region (point-min)
(point-max) file)?

> +              (set-file-modes save-file (logand (file-modes save-file) #o7555)))

There can be circumstances where a file is always writable, no
matter how hard we try to use `set-file-modes`.

> diff --git a/lisp/vc/vc-git.el b/lisp/vc/vc-git.el
> index 7689d5f879..1f45aa7e96 100644
> --- a/lisp/vc/vc-git.el
> +++ b/lisp/vc/vc-git.el
> @@ -82,6 +82,9 @@
>  ;; - annotate-time ()                              OK
>  ;; - annotate-current-time ()                      NOT NEEDED
>  ;; - annotate-extract-revision-at-line ()          OK
> +;; TIMEMACHINE
> +;; * tm-revisions (file)
> +;; * tm-map-line (file from-revision from-line to-revision from-is-older)
>  ;; TAG/BRANCH SYSTEM
>  ;; - create-tag (dir name branchp)                 OK
>  ;; - retrieve-tag (dir name update)                OK

Any specific reason you used `*` rather than `-`?
[ I have no objection to this choice, just curious.  ]

> @@ -101,6 +104,8 @@
>  
>  (require 'cl-lib)
>  (require 'vc-dispatcher)
> +(require 'transient)
> +(require 'vc-timemachine)
>  (eval-when-compile
>    (require 'subr-x) ; for string-trim-right
>    (require 'vc)

Are these really indispensable here?

`vc-git` will be loaded into many more sessions than those where
`transient` and `vc-timemachine` will be used, so it would be *much*
better if those packages could be loaded more lazily here.

> @@ -166,6 +171,12 @@ vc-git-program
>    :version "24.1"
>    :type 'string)
>  
> +(defcustom vc-git-global-git-arguments
> +  '("-c" "log.showSignature=false" "--no-pager")
> +  "Common arguments for all git commands."
> +  :type 'list
> +  :group 'vc-timemachine)

Why is this in the `vc-timemachine` group?
Why do we need to add those args to all the Git commands?

> -    (vc-git-command
> -     buffer 0
> -     nil
> -     "cat-file" "blob" (concat (if rev rev "HEAD") ":" fullname))))
> +    (ignore-errors
> +      (vc-git-command
> +       buffer 0
> +       nil
> +       "cat-file" "blob" (concat (if rev rev "HEAD") ":" fullname)))))

Please add a comment here explaining why we need `ignore-errors` (you
can probably just move the text you currently have in the commit
message: in many cases it's better to put those comments in the code
rather than in the commit message).

Also, if you can use `ignore-error` instead, it would be better.

> +        (setq new-date (vc-tm-format-date (match-string 2 line)))

How important is it to use the `vc-tm-date-format`?
I'm not super happy about the current design in this regard.  I think it
would make more sense to define `tm-revisions` as returning dates in the
"cheapest" format possible (the one that takes least effort), e.g.
as an ELisp time value (e.g. as returned by `date-to-time`) or as
"any format that `date-to-time` understands"?
Then the call to `vc-tm-date-format` can be moved to
`vc-timemachine.el`.

> -(eval-when-compile (require 'cl-lib))
> +(eval-when-compile
> +  (require 'cl-lib))

Why?
[ It's likely a question of taste, so I' recommend not to touch it.
  Of course, I noticed it because my taste prefers the current format
  (because in `outline-minor-mode` the `require` is otherwise hidden
  for no benefit).  ]

> @@ -41,6 +45,7 @@
>    (require 'cl-lib)
>    (require 'vc))
>  (require 'log-view)
> +(require 'vc-timemachine)

Same comment as for `vc-git`.

> +        (setq line (buffer-substring-no-properties (line-beginning-position) (line-end-position)))

Please try very hard to always stay within 80 columns.

> +(defgroup vc-timemachine nil
> +  "Time-machine functionality for VC backends."
> +  :group 'vc
> +  :version "30.1")
> +
> +(defcustom vc-tm-date-format
> +  "%a %I:%M %p %Y-%m-%d"
> +  "Revision creation date format (emphasis on easy date comparison)."
> +  :type 'string
> +  :group 'vc-timemachine
> +  :version "30.1")

The `:group` arg here is redundant (`defcustom` would use that group by
default here anyway).  Same for the subsequent `defcustom`s and `defface`s.

> +(defvar-local vc--time-machine nil
> +  "Cache a TM hint on various buffers.")
> +(put 'vc--time-machine 'permanent-local t)

The docstring seems of very little as it stands.  You could just as well
remove it (tho it'd be better to actually describe what this var should
hold, of course :-).

> +(defvar-local tmbuf--abs-file nil
> +  "Absolute path to file being traversed by this time-machine.")

"path" => "file name".

Also, please use the "vc-" prefix.  Same for the other "tmbuf-" vars.

> +(defvar-local tmbuf--branch-index nil
> +  "Zero-base index into tmbuf--branch-revisions.")
> +(put 'tmbuf--branch-revisions 'permanent-local t)
> +(defvar-local tmbuf--branch-revisions nil
> +  "When non-nil, a vector of revision-info lists.")
> +(put 'tmbuf--branch-revisions 'permanent-local t)

You make `tmbuf--branch-revisions` permanent twice (the other should
probably be for `tmbuf--branch-index`, right?).

> +(defvar-local tmbuf--source-buffer nil
> +  "A non-time-machine buffer for which this time-machine was created.")
> +(put 'tmbuf--source-buffer 'permanent-local t)

Any reason we can't use `vc-parent-buffer`?

> +(defun vc-tm--time-machine ()
> +  "Return a valid time-machine for the current buffer."

Indicate how it's returned.  I.e. either by changing current-buffer, or
by returning a buffer object (in which case it should *not* change
current-buffer).

> +        (when vc-tm-echo-area
> +          (vc-tm--show-echo-area-details new-revision-info))))
> +      (vc-tm--erm-workaround))))

Please avoid this `vc-tm--erm-workaround` here.  Better add a "generic
hook" (i.e. a hook whose meaning makes sense independently from this ERM
problem), and then arrange for some code somewhere (probably best if
it's in `enh-ruby-mode`) to add a function to this hook.

> +(declare-function erm-reset-buffer "ext:enh-ruby-mode")
> +
> +(defun vc-tm--erm-workaround ()
> +  "Workaround for enhanced ruby mode not detecting revision change."
> +  (when (eq major-mode 'enh-ruby-mode)
> +    (ignore-errors (erm-reset-buffer))))

Prefer `derived-mode-p`.  Add a comment explaining the problem or
pointing to info about it.
Arrange to try and make this unnecessary in the future (i.e. open a bug
report with the enh-ruby-mode guys?  Or fix the source of the bug if
it's elsewhere in Emacs itself?).

> +;; - tm-map-line (rel-file from-revision from-line to-revision from-is-older)
> +;;
> +;;   Return TO-REVISION's line corresponding to FROM-REVISION's FROM-LINE.
> +;;   FROM-REVISION and TO-REVISION are guaranteed distinct.  FROM-IS-OLDER
> +;;   indicates relative temporal ordering of FROM-REVISION and TO-REVISION
> +;;   on the branch.

Please clarify that you're talking about line *numbers* (I thought at
first you were talking about some completely different notion of lines,
such as "product line" or "history line").

OK, I'll stop here for now.


        Stefan





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

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


Received: (at submit) by debbugs.gnu.org; 26 Jan 2023 03:24:56 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Wed Jan 25 22:24:56 2023
Received: from localhost ([127.0.0.1]:60335 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1pKsse-0006pv-Tj
	for submit <at> debbugs.gnu.org; Wed, 25 Jan 2023 22:24:56 -0500
Received: from mail-ej1-f43.google.com ([209.85.218.43]:42835)
 by debbugs.gnu.org with esmtp (Exim 4.84_2)
 (envelope-from <john.yates.sheets@HIDDEN>) id 1pKssa-0006pe-SR
 for submit <at> debbugs.gnu.org; Wed, 25 Jan 2023 22:24:52 -0500
Received: by mail-ej1-f43.google.com with SMTP id bk15so1824263ejb.9
 for <submit <at> debbugs.gnu.org>; Wed, 25 Jan 2023 19:24:48 -0800 (PST)
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=1e100.net; s=20210112;
 h=to:subject:message-id:date:from:mime-version:x-gm-message-state
 :from:to:cc:subject:date:message-id:reply-to;
 bh=TzziemSvsoD5HAEOtIB15zjj+Phh1rlig+yu4oASx0c=;
 b=FVD1zY5Y0LwuoWr8FOfRoYsXBCnbDO9Ygjfzd2mqS2dbNFukxt4wDx0VEw/SuVFHjC
 th0oDXDK5CL7G7MkNAU+ZA5sXTM1Kf56TsuVZbzJwzYz9vR5ZlyJSY9AIxqWIhhb14h0
 nw5Xq6kgKyFpTMx7NNqEzBqtKgXNUes+jxXZUucBv84/sbDt+EIFAAM8gjr21yhbRpZD
 5hhrzpy2UGlu/025YOMfB/0JhmEyltkzIFokDSAXadBaV6EWFmNSHdbjoFxYvhjWY8Ge
 Zf5XcIilTSVYVznEOnX6QCP/rZYs3mxhU6g7nhrWvodw8eFnIFhGpqy07kK1Vqu0HZe3
 8/Zg==
X-Gm-Message-State: AFqh2kr5LI19tM4V7f6a47Ktfq5YWai9PsXSxwHG3jBtFazBOoE/xEoa
 Go+l5DHs5eEaSSG/7etwcvyvvue0yl/O1f3WdjYFvMPoVBM=
X-Google-Smtp-Source: AMrXdXsEWgskCiiPcgMHNzAauiRvEN+PUPSRKyIDZLA/qP19nb9DiXxlrG4qCSMV2cN6bmJQ0avrAS5nnznm8lzR1Ls=
X-Received: by 2002:a17:906:1cc9:b0:85d:3987:fa88 with SMTP id
 i9-20020a1709061cc900b0085d3987fa88mr4180761ejh.51.1674703482481; Wed, 25 Jan
 2023 19:24:42 -0800 (PST)
MIME-Version: 1.0
From: John Yates <john@HIDDEN>
Date: Wed, 25 Jan 2023 22:24:30 -0500
Message-ID: <CAJnXXoiJA971Qx4dfERLG9fjdVxWZAo7PdFRm0qhMO7rbsYZEg@HIDDEN>
Subject: New features: VC timemachine and BackupOnSave to RCS
To: submit <at> debbugs.gnu.org
Content-Type: multipart/mixed; boundary="0000000000002ddb5005f3224a44"
X-Spam-Score: 2.7 (++)
X-Spam-Report: Spam detection software, running on the system "debbugs.gnu.org",
 has NOT identified this incoming email as spam.  The original
 message has been attached to this so you can view it or label
 similar future email.  If you have any questions, see
 the administrator of that system for details.
 Content preview:  Package: emacs Version: 30.0.50 Tags: patch Please see the
 cover letter. From ac181d9662e6fd2fd5215c8427c164ce412b550e Mon Sep 17
 00:00:00
 2001 From: "John S. Yates, Jr" <john@HIDDEN> Date: Sun, 15 Jan
 2023 15:04:28 -0500 Subject: [PATCH 2/3] Introduce VC timemac [...] 
 Content analysis details:   (2.7 points, 10.0 required)
 pts rule name              description
 ---- ---------------------- --------------------------------------------------
 0.0 FREEMAIL_FROM          Sender email is commonly abused enduser mail
 provider (john.yates.sheets[at]gmail.com)
 0.0 SPF_HELO_NONE          SPF: HELO does not publish an SPF Record
 -0.0 SPF_PASS               SPF: sender matches SPF record
 0.2 HEADER_FROM_DIFFERENT_DOMAINS From and EnvelopeFrom 2nd level
 mail domains are different
 -0.0 RCVD_IN_MSPIKE_H2      RBL: Average reputation (+2)
 [209.85.218.43 listed in wl.mailspike.net]
 -0.0 RCVD_IN_DNSWL_NONE     RBL: Sender listed at https://www.dnswl.org/,
 no trust [209.85.218.43 listed in list.dnswl.org]
 0.0 FREEMAIL_FORGED_FROMDOMAIN 2nd level domains in From and
 EnvelopeFrom freemail headers are different
 2.5 TO_NO_BRKTS_PCNT       To: lacks brackets + percentage
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.8 (/)

--0000000000002ddb5005f3224a44
Content-Type: text/plain; charset="UTF-8"

Package: emacs
Version: 30.0.50
Tags: patch

Please see the cover letter.

--0000000000002ddb5005f3224a44
Content-Type: text/x-patch; charset="UTF-8"; 
	name="0002-Introduce-VC-timemachine-capability.patch"
Content-Disposition: attachment; 
	filename="0002-Introduce-VC-timemachine-capability.patch"
Content-Transfer-Encoding: base64
Content-ID: <f_ldciswcm1>
X-Attachment-Id: f_ldciswcm1

RnJvbSBhYzE4MWQ5NjYyZTZmZDJmZDUyMTVjODQyN2MxNjRjZTQxMmI1NTBlIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiAiSm9obiBTLiBZYXRlcywgSnIiIDxqb2huQHlhdGVzLXNoZWV0
cy5vcmc+CkRhdGU6IFN1biwgMTUgSmFuIDIwMjMgMTU6MDQ6MjggLTA1MDAKU3ViamVjdDogW1BB
VENIIDIvM10gSW50cm9kdWNlIFZDIHRpbWVtYWNoaW5lIGNhcGFiaWxpdHkKTUlNRS1WZXJzaW9u
OiAxLjAKQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PVVURi04CkNvbnRlbnQtVHJh
bnNmZXItRW5jb2Rpbmc6IDhiaXQKCkludHJvZHVjaW5nIHRpbWVtYWNoaW5lIGZ1bmN0aW9uYWxp
dHkgaW50byB2YyB3YXMgZGlzY3Vzc2VkIGluIHRoaXMgdGhyZWFkOgoKICBodHRwczovL2xpc3Rz
LmdudS5vcmcvYXJjaGl2ZS9odG1sL2VtYWNzLWRldmVsLzIwMjItMTAvbXNnMDEyNzIuaHRtbAoK
V2hlcmUgdGhlIHByZXZpb3VzIGNvbW1pdCBpbnRyb2R1Y2VkIHRoZSBjb25jZXB0IG9mIGEgcmV2
aXNpb24gYnVmZmVyIGJvdW5kCnRvIGEgdW5pcXVlIHJldmlzaW9uLCB0aGlzIGNvbW1pdCBpbnRy
b2R1Y2VzIHRoZSBjb25jZXB0IG9mIGEgdGltZW1hY2hpbmUKYnVmZmVyLCBib3VuZCB0byB0aGUg
bGluZWFyIHNlcXVlbmNlIG9mIHJldmlzaW9ucyBvbiB0aGUgYnJhbmNoIGZyb20gd2hpY2gKYSB3
b3JrIGZpbGUgd2FzIGNoZWNrZWQgb3V0LgoKYHZjLXRtLXJldmlzaW9uLWhlYWQgY3JlYXRlcycg
YSB0aW1lbWFjaGluZSBidWZmZXIsIHdoaWNoIHRoZW4gYmVoYXZlcyBhcwphIGN1cnNvciBvdmVy
IHRoZSBsaW5lYXIgc2VxdWVuY2Ugb2YgcmV2aXNpb25zIG9uIGEgYnJhbmNoLiAgVGhlIGJ1ZmZl
ciBjYW4KYmUgcmVwb3NpdGlvbmVkIGFsb25nIHRoYXQgYnJhbmNoIHZpYToKCi0gYHZjLXRtLXJl
dmlzaW9uLW5leHQnCiAgIlNob3cgd29yayBmaWxlJ3MgbmV4dCByZXZpc2lvbiBvbiBjaGVja2Vk
LW91dCBicmFuY2guIgoKLSBgdmMtdG0tcmV2aXNpb24tcHJldmlvdXMnCiAgIlNob3cgd29yayBm
aWxlJ3MgcHJldmlvdXMgcmV2aXNpb24gb24gY2hlY2tlZC1vdXQgYnJhbmNoLiIKCi0gYHZjLXRt
LXJldmlzaW9uLW50aCcKICAiU2hvdyB3b3JrIGZpbGUncyBOJ3RoIG1vc3QgcmVjZW50IHJldmlz
aW9uIG9uIGNoZWNrZWQtb3V0IGJyYW5jaAogICgxIGJlaW5nIEhFQUQpLiIKCi0gYHZjLXRtLXJl
dmlzaW9uLWNvbXBsZXRlLXN1YmplY3QnCiAgIlNob3cgd29yayBmaWxlJ3MgcmV2aXNpb24gdmlh
IHN1YmplY3QgY29tcGxldGlvbiBvbiBjaGVja2VkLW91dCBicmFuY2guIgoKQSB0aW1lbWFjaGlu
ZSBidWZmZXIgaXMgcmVhZC1vbmx5IGFuZCBoYXMgYSBuaWwgYnVmZmVyLWZpbGUtbmFtZSAobWVh
bmluZwp0aGF0IGl0IGlzIG5vdCB2aXNpdGluZyBhbnkgZmlsZSkuICBUaGUgcmF0aW9uYWxlIGlz
IGV4YWN0bHkgdGhlIHNhbWUgYXMKZm9yIGEgcmV2aXNpb24gYnVmZmVyOiBhIHRpbWVtYWNoaW5l
IGJ1ZmZlciBkaXNwbGF5cyBpbW11dGFibGUgaGlzdG9yeS4KClRvIHN1cHBvcnQgdGltZW1hY2hp
bmUgZnVuY3Rpb25hbGl0eSBhIGJhY2tlbmQgbmVlZHMgdG8gc3VwcG9ydCB0aGUgbmV3CnRtLXJl
dmlzaW9ucyB2YyBvcGVyYXRpb24uICBPcHRpb25hbGx5LCBpdCBtYXkgc3VwcG9ydCB0aGUgdG0t
bWFwLWxpbmUKb3BlcmF0aW9uLiAgSW4gdGhpcyBjb21taXQgdmMtcmNzIHN1cHBvcnRzIG9ubHkg
dG0tcmV2aXNpb25zIHdoaWxlIHZjLWdpdApzdXBwb3J0cyBib3RoIG9wZXJhdGlvbnMuCgpNeSBp
bXBsZW1lbnRhdGlvbiBib3Jyb3dzIGRlc2lnbiBpZGVhcyBhbmQgY29kZSBmcm9tIFBldGVyIFN0
aWVybnN0csO2bSdzCm9yaWdpbmFsIGdpdC10aW1lbWFjaGluZS5lbC4gIEluIHJlYWxpdHksIG15
IGVmZm9ydCB3YXMgbGl0dGxlIG1vcmUgdGhhbiBhbgpleHRlbmRlZCByZWZhY3RvcmluZyBlZmZv
cnQgdG8gZml0IGdpdC10aW1lbWFjaGluZSBpbnRvIHRoZSB2YyBmcmFtZXdvcmsuCgo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09CgoqIGxpc3AvdmMvdmMtdGltZW1hY2hpbmUuZWwgKG5ldyBmaWxlKToKRGVy
aXZlIGNvcmUgVkMgdGltZW1hY2hpbmUgZnVuY3Rpb25hbGl0eSBmcm9tIFBldGVyIFN0aWVybnN0
csO2bSdzIG9yaWdpbmFsCmdpdC10aW1lbWFjaGluZS5lbC4KKiBsaXNwL3ZjL3ZjLWhvb2tzLmVs
ICh2Yy1wcmVmaXgtbWFwKToKQmluZCAiLCIgdG8gYHZjLXRtLXJldmlzaW9uLWhlYWQnLgoodmMt
bWVudS1tYXApOgpBZGQgIlRpbWUgbWFjaGluZSBhdCBIRUFEIiBpbiBhIG5ldyBtZW51IHNlY3Rp
b24uCiogbGlzcC92Yy92Yy1naXQuZWwgKHZjLWdpdC0tcHJvY2Vzcy1maWxlLCB2Yy1naXQtZ2xv
YmFsLWdpdC1hcmd1bWVudHMpOgpBZGQgaGVscGVyIGZ1bmN0aW9uIGFuZCBpdHMgc3VwcG9ydGlu
ZyBkZWZjdXN0b20uCih2Yy1naXQtZmluZC1yZXZpc2lvbik6CldyYXAgImdpdCBjYXQtZmlsZSBi
bG9iIiBpbiBhbiBpZ25vcmUtZXJyb3JzIHRvIGltcHJvdmUgcm9idXN0bmVzcy4KQW4gZW5jb3Vu
dGVyZWQgZmFpbHVyZSBtb2RlIGlzIGNob29zaW5nIGEgY29tbWl0IG9sZGVyIHRoYW4gdGhlIGZp
bGUuCih2Yy1naXQtdG0tcmV2aXNpb25zLCB2Yy1naXQtdG0tbWFwLWxpbmUpOgpBZGQgZ2l0LXNw
ZWNpZmljIGltcGxlbWVudGF0aW9ucyBvZiB2Yy10bSBiYWNrZW5kIGZ1bmN0aW9ucywgaGV3aW5n
IGNsb3NlbHkKdG8gUGV0ZXIgU3RpZXJuc3Ryw7ZtJ3Mgb3JpZ2luYWwgY29kZS4KbGlzcC92Yy92
Yy1yY3MuZWwgKHZjLXJjcy10bS1yZXZpc2lvbnMpOgpBZGQgcmNzLXNwZWNpZmljIGltcGxlbWVu
dGF0aW9ucyB2Yy10bSBiYWNrZW5kIGZ1bmN0aW9ucywgZm9sbG93aW5nIHRoZQp2Yy1naXQuZWwg
cHJlY2VkZW50LiAgRm9yIG5vdyB2Yy1yY3MgbGFja3MgYSB0bS1tYXAtbGluZSBmdW5jdGlvbiBh
bmQKdGhlcmVmb3JlIGxldmVyYWdlcyB2Yy10aW1lbWFjaGluZS5lbCdzIGRlZmF1bHQgaW1wbGVt
ZW50YXRpb24uCi0tLQogbGlzcC92Yy92Yy1naXQuZWwgICAgICAgICB8ICA5MSArKysrKysrLQog
bGlzcC92Yy92Yy1ob29rcy5lbCAgICAgICB8ICAxMCArLQogbGlzcC92Yy92Yy1yY3MuZWwgICAg
ICAgICB8ICA1MCArKysrKwogbGlzcC92Yy92Yy10aW1lbWFjaGluZS5lbCB8IDQyNiArKysrKysr
KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwogbGlzcC92Yy92Yy5lbCAgICAgICAgICAg
ICB8ICA0NyArKysrLQogNSBmaWxlcyBjaGFuZ2VkLCA2MTQgaW5zZXJ0aW9ucygrKSwgMTAgZGVs
ZXRpb25zKC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQgbGlzcC92Yy92Yy10aW1lbWFjaGluZS5lbAoK
ZGlmZiAtLWdpdCBhL2xpc3AvdmMvdmMtZ2l0LmVsIGIvbGlzcC92Yy92Yy1naXQuZWwKaW5kZXgg
NzY4OWQ1Zjg3OS4uMWY0NWFhN2U5NiAxMDA2NDQKLS0tIGEvbGlzcC92Yy92Yy1naXQuZWwKKysr
IGIvbGlzcC92Yy92Yy1naXQuZWwKQEAgLTgyLDYgKzgyLDkgQEAKIDs7IC0gYW5ub3RhdGUtdGlt
ZSAoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9LCiA7OyAtIGFubm90YXRlLWN1cnJl
bnQtdGltZSAoKSAgICAgICAgICAgICAgICAgICAgICBOT1QgTkVFREVECiA7OyAtIGFubm90YXRl
LWV4dHJhY3QtcmV2aXNpb24tYXQtbGluZSAoKSAgICAgICAgICBPSworOzsgVElNRU1BQ0hJTkUK
Kzs7ICogdG0tcmV2aXNpb25zIChmaWxlKQorOzsgKiB0bS1tYXAtbGluZSAoZmlsZSBmcm9tLXJl
dmlzaW9uIGZyb20tbGluZSB0by1yZXZpc2lvbiBmcm9tLWlzLW9sZGVyKQogOzsgVEFHL0JSQU5D
SCBTWVNURU0KIDs7IC0gY3JlYXRlLXRhZyAoZGlyIG5hbWUgYnJhbmNocCkgICAgICAgICAgICAg
ICAgIE9LCiA7OyAtIHJldHJpZXZlLXRhZyAoZGlyIG5hbWUgdXBkYXRlKSAgICAgICAgICAgICAg
ICBPSwpAQCAtMTAxLDYgKzEwNCw4IEBACiAKIChyZXF1aXJlICdjbC1saWIpCiAocmVxdWlyZSAn
dmMtZGlzcGF0Y2hlcikKKyhyZXF1aXJlICd0cmFuc2llbnQpCisocmVxdWlyZSAndmMtdGltZW1h
Y2hpbmUpCiAoZXZhbC13aGVuLWNvbXBpbGUKICAgKHJlcXVpcmUgJ3N1YnIteCkgOyBmb3Igc3Ry
aW5nLXRyaW0tcmlnaHQKICAgKHJlcXVpcmUgJ3ZjKQpAQCAtMTY2LDYgKzE3MSwxMiBAQCB2Yy1n
aXQtcHJvZ3JhbQogICA6dmVyc2lvbiAiMjQuMSIKICAgOnR5cGUgJ3N0cmluZykKIAorKGRlZmN1
c3RvbSB2Yy1naXQtZ2xvYmFsLWdpdC1hcmd1bWVudHMKKyAgJygiLWMiICJsb2cuc2hvd1NpZ25h
dHVyZT1mYWxzZSIgIi0tbm8tcGFnZXIiKQorICAiQ29tbW9uIGFyZ3VtZW50cyBmb3IgYWxsIGdp
dCBjb21tYW5kcy4iCisgIDp0eXBlICdsaXN0CisgIDpncm91cCAndmMtdGltZW1hY2hpbmUpCisK
IChkZWZjdXN0b20gdmMtZ2l0LXJvb3QtbG9nLWZvcm1hdAogICAnKCIlZCVoLi46ICVhbiAlYWQg
JXMiCiAgICAgOzsgVGhlIGZpcnN0IHNoeSBncm91cCBtYXRjaGVzIHRoZSBjaGFyYWN0ZXJzIGRy
YXduIGJ5IC0tZ3JhcGguCkBAIC0xMjE3LDEwICsxMjI4LDExIEBAIHZjLWdpdC1maW5kLXJldmlz
aW9uCiAJICAgIChpZiAoc3RyaW5nPSBmbiAiIikKIAkJKGZpbGUtcmVsYXRpdmUtbmFtZSBmaWxl
ICh2Yy1naXQtcm9vdCBkZWZhdWx0LWRpcmVjdG9yeSkpCiAJICAgICAgKHN1YnN0cmluZyBmbiAw
IC0xKSkpKSkKLSAgICAodmMtZ2l0LWNvbW1hbmQKLSAgICAgYnVmZmVyIDAKLSAgICAgbmlsCi0g
ICAgICJjYXQtZmlsZSIgImJsb2IiIChjb25jYXQgKGlmIHJldiByZXYgIkhFQUQiKSAiOiIgZnVs
bG5hbWUpKSkpCisgICAgKGlnbm9yZS1lcnJvcnMKKyAgICAgICh2Yy1naXQtY29tbWFuZAorICAg
ICAgIGJ1ZmZlciAwCisgICAgICAgbmlsCisgICAgICAgImNhdC1maWxlIiAiYmxvYiIgKGNvbmNh
dCAoaWYgcmV2IHJldiAiSEVBRCIpICI6IiBmdWxsbmFtZSkpKSkpCiAKIChkZWZ1biB2Yy1naXQt
ZmluZC1pZ25vcmUtZmlsZSAoZmlsZSkKICAgIlJldHVybiB0aGUgZ2l0IGlnbm9yZSBmaWxlIHRo
YXQgY29udHJvbHMgRklMRS4iCkBAIC0xODA0LDYgKzE4MTYsNzcgQEAgdmMtZ2l0LXJldHJpZXZl
LXRhZwogICAgICh2Yy1naXQtY29tbWFuZCBuaWwgMCBuaWwgImNoZWNrb3V0IiBuYW1lKSkpCiAK
IAorOzs7IFRJTUVNQUNISU5FCisKKyhkZWZ1biB2Yy1naXQtdG0tcmV2aXNpb25zIChmaWxlKQor
ICAiUmV0dXJuIGRhdGEgYWJvdXQgcmV2aXNpb25zIG1vZGlmeWluZyBGSUxFIG9uIGNoZWNrZWQt
b3V0IGJyYW5jaC4iCisgIChsZXQqICgoZGVmYXVsdC1kaXJlY3RvcnkgKHZjLWdpdC1yb290IGZp
bGUpKQorICAgICAgICAgKHJlbC1maWxlIChmaWxlLXJlbGF0aXZlLW5hbWUgZmlsZSkpCisgICAg
ICAgICAocmV2aXNpb24taW5mb3MpKQorICAgICh1bmxlc3MgKHplcm9wICh2Yy1naXQtLXByb2Nl
c3MtZmlsZQorICAgICAgICAgICAgICAgICAgICAibG9nIiAiLS1wcmV0dHk9Zm9ybWF0OiVIJXgw
MCVhZCV4MDAlcyV4MDAlYW4iCisgICAgICAgICAgICAgICAgICAgICItLW5hbWUtb25seSIgIi0t
Zm9sbG93IiAiLS0iIHJlbC1maWxlKSkKKyAgICAgIChlcnJvciAiR2l0IGxvZyBlcnJvcjogLmdp
dD0gJyVzJywgZmlsZT0gJyVzJyIgZGVmYXVsdC1kaXJlY3RvcnkgcmVsLWZpbGUpKQorICAgIChn
b3RvLWNoYXIgKHBvaW50LW1pbikpCisgICAgKGxldCAoKGxpbmUpCisgICAgICAgICAgKGNvbW1p
dCkKKyAgICAgICAgICAoc3ViamVjdCkgKG5ldy1zdWJqZWN0KQorICAgICAgICAgIChhdXRob3Ip
ICAobmV3LWF1dGhvcikKKyAgICAgICAgICAoZGF0ZSkgICAgKG5ldy1kYXRlKQorICAgICAgICAg
IChmaWxlKSAgICAobmV3LWZpbGUpKQorICAgICAgKHdoaWxlIChub3QgKGVvYnApKQorICAgICAg
ICAoc2V0cSBsaW5lIChidWZmZXItc3Vic3RyaW5nLW5vLXByb3BlcnRpZXMgKGxpbmUtYmVnaW5u
aW5nLXBvc2l0aW9uKSAobGluZS1lbmQtcG9zaXRpb24pKSkKKwkoc3RyaW5nLW1hdGNoICJcXChb
XlwwXSpcXClcMFxcKFteXDBdKlxcKVwwXFwoW15cMF0qXFwpXDBcXChbXlwwXSpcXCkiIGxpbmUp
CisgICAgICAgIChzZXRxIGNvbW1pdCAobWF0Y2gtc3RyaW5nIDEgbGluZSkpCisgICAgICAgIChz
ZXRxIG5ldy1zdWJqZWN0IChtYXRjaC1zdHJpbmcgMyBsaW5lKSkKKyAgICAgICAgKHNldHEgbmV3
LWF1dGhvciAobWF0Y2gtc3RyaW5nIDQgbGluZSkpCisgICAgICAgIChzZXRxIG5ldy1kYXRlICh2
Yy10bS1mb3JtYXQtZGF0ZSAobWF0Y2gtc3RyaW5nIDIgbGluZSkpKQorICAgICAgICAodW5sZXNz
IChlcXVhbCBzdWJqZWN0IG5ldy1zdWJqZWN0KQorICAgICAgICAgIChzZXRxIHN1YmplY3QgbmV3
LXN1YmplY3QpKQorICAgICAgICAodW5sZXNzIChlcXVhbCBhdXRob3IgbmV3LWF1dGhvcikKKyAg
ICAgICAgICAoc2V0cSBhdXRob3IgbmV3LWF1dGhvcikpCisgICAgICAgICh1bmxlc3MgKGVxdWFs
IGRhdGUgbmV3LWRhdGUpCisgICAgICAgICAgKHNldHEgZGF0ZSBuZXctZGF0ZSkpCisgICAgICAg
IChmb3J3YXJkLWxpbmUgMSkKKwkoc2V0cSBuZXctZmlsZSAoYnVmZmVyLXN1YnN0cmluZy1uby1w
cm9wZXJ0aWVzIChsaW5lLWJlZ2lubmluZy1wb3NpdGlvbikgKGxpbmUtZW5kLXBvc2l0aW9uKSkp
CisgICAgICAgICh1bmxlc3MgKGVxdWFsIGZpbGUgbmV3LWZpbGUpCisgICAgICAgICAgKHNldHEg
ZmlsZSBuZXctZmlsZSkpCisJKHB1c2ggKGxpc3QgY29tbWl0IGRhdGUgc3ViamVjdCBhdXRob3Ig
ZmlsZSkgcmV2aXNpb24taW5mb3MpCisgICAgICAgIChmb3J3YXJkLWxpbmUgMikpCisgICAgICBy
ZXZpc2lvbi1pbmZvcykpKQorCisoZGVmdW4gdmMtZ2l0LXRtLW1hcC1saW5lIChmaWxlIGZyb20t
Y29tbWl0IGZyb20tbGluZSB0by1jb21taXQgZnJvbS1pcy1vbGRlcikKKyAgIlJldHVybiBUTy1D
T01NSVQncyBsaW5lIGNvcnJlc3BvbmRpbmcgdG8gRlJPTS1DT01NSVQncyBGUk9NLUxJTkUuCitP
biBlbnRyeSB0aGUgY3VycmVudC1idWZmZXIgaXMgYW4gZW1wdHkgdGVtcG9yYXJ5IGJ1ZmZlci4K
KworRWxzZXdoZXJlIHRoZSBmb3JtYWxzIEZST00tQ09NTUlUIGFuZCBUTy1DT01NSVQgYXJlIG5h
bWVkIEZST00tUkVWSVNJT04KK2FuZCBUTy1SRVZJU0lPTi4gIFRoaXMgY2hhbmdlIG9mIG5hbWUg
aXMgdG8gY2xhcmlmeSB0aGUgZ2l0IG1lYW5pbmcuIgorICAobGV0ICgobGluZSAoZm9ybWF0ICIt
TCAlcywlcyIgZnJvbS1saW5lIGZyb20tbGluZSkpCisgICAgICAgIChyZXZlcnNlLWZsYWcgKGlm
IGZyb20taXMtb2xkZXIgIi0tcmV2ZXJzZSIgIiIpKQorICAgICAgICAocmFuZ2UgKGlmIGZyb20t
aXMtb2xkZXIKKyAgICAgICAgICAgICAgICAgICAoZm9ybWF0ICIlcy4uJXMiIHRvLWNvbW1pdCBm
cm9tLWNvbW1pdCkKKyAgICAgICAgICAgICAgICAgKGZvcm1hdCAiJXMuLiVzIiBmcm9tLWNvbW1p
dCB0by1jb21taXQpKSkKKyAgICAgICAgKHRvLWxpbmUpKQorICAgICh2Yy1naXQtLXByb2Nlc3Mt
ZmlsZSAiYmxhbWUiIHJldmVyc2UtZmxhZyAiLW4iIGxpbmUgZmlsZSByYW5nZSkKKyAgICAoZ290
by1jaGFyIChwb2ludC1taW4pKQorICAgIDs7IEZvciBhbiBlbmQtb2YtYnVmZmVyIHByb2JsZW0g
dHJ5IGZsaXBwaW5nIHRoZSBibGFtZSBhcm91bmQuCisgICAgKHdoZW4gKHNlYXJjaC1mb3J3YXJk
LXJlZ2V4cCAiXmZhdGFsOiBmaWxlIC4rIGhhcyBvbmx5IC4rIGxpbmVzIiBuaWwgdCkKKyAgICAg
IChlcmFzZS1idWZmZXIpCisgICAgICAoc2V0cSBmcm9tLWxpbmUgKDEtIGZyb20tbGluZSkpCisg
ICAgICAoc2V0cSBsaW5lIChmb3JtYXQgIi1MICVzLCVzIiBmcm9tLWxpbmUgZnJvbS1saW5lKSkK
KyAgICAgICh2Yy1naXQtLXByb2Nlc3MtZmlsZSAiYmxhbWUiIHJldmVyc2UtZmxhZyAiLW4iIGxp
bmUgZmlsZSByYW5nZSkpCisgICAgKGdvdG8tY2hhciAocG9pbnQtbWluKSkKKyAgICAoc2VhcmNo
LWZvcndhcmQtcmVnZXhwICJeW14gXSsgXFwoW14gXStcXCkiKQorICAgIChzZXRxIHRvLWxpbmUg
KHN0cmluZy10by1udW1iZXIgKG1hdGNoLXN0cmluZyAxKSkpCisgICAgOzsgSnVzdCByZXVzZSBm
cm9tLWxpbmUgaWYgZ2l0IGJsYW1lIGZhaWxzIHRvIGdpdmUgdXMgd2hhdCB3ZSBleHBlY3QuCisg
ICAgKHdoZW4gKD0gdG8tbGluZSAwKQorICAgICAgKHNldHEgdG8tbGluZSBmcm9tLWxpbmUpKQor
ICAgIHRvLWxpbmUpKQorCisoZGVmdW4gdmMtZ2l0LS1wcm9jZXNzLWZpbGUgKCZyZXN0IGFyZ3Mp
CisgICJSdW4gYHByb2Nlc3MtZmlsZScgd2l0aCBBUkdTIGFuZCBgdmMtZ2l0LWdsb2JhbC1naXQt
YXJndW1lbnRzJyBhcHBsaWVkLiIKKyAgKGFwcGx5ICMncHJvY2Vzcy1maWxlIHZjLWdpdC1wcm9n
cmFtIG5pbCB0IG5pbCAoYXBwZW5kIHZjLWdpdC1nbG9iYWwtZ2l0LWFyZ3VtZW50cyBhcmdzKSkp
CisKIDs7OyBNSVNDRUxMQU5FT1VTCiAKIChkZWZ1biB2Yy1naXQtcHJldmlvdXMtcmV2aXNpb24g
KGZpbGUgcmV2KQpkaWZmIC0tZ2l0IGEvbGlzcC92Yy92Yy1ob29rcy5lbCBiL2xpc3AvdmMvdmMt
aG9va3MuZWwKaW5kZXggZTI0MmQxZTQ4ZS4uOWJkYjk0YWUxYSAxMDA2NDQKLS0tIGEvbGlzcC92
Yy92Yy1ob29rcy5lbAorKysgYi9saXNwL3ZjL3ZjLWhvb2tzLmVsCkBAIC0zMCw3ICszMCw4IEBA
CiAKIDs7OyBDb2RlOgogCi0oZXZhbC13aGVuLWNvbXBpbGUgKHJlcXVpcmUgJ2NsLWxpYikpCiso
ZXZhbC13aGVuLWNvbXBpbGUKKyAgKHJlcXVpcmUgJ2NsLWxpYikpCiAKIDs7IEZhY2VzCiAKQEAg
LTg4Myw3ICs4ODQsOSBAQCB2Yy1wcmVmaXgtbWFwCiAgICJEIiAgICMndmMtcm9vdC1kaWZmCiAg
ICJ+IiAgICMndmMtcmV2aXNpb24tb3RoZXItd2luZG93CiAgICJ4IiAgICMndmMtZGVsZXRlLWZp
bGUKLSAgIiEiICAgIyd2Yy1lZGl0LW5leHQtY29tbWFuZCkKKyAgIiEiICAgIyd2Yy1lZGl0LW5l
eHQtY29tbWFuZAorICAiLCIgICAjJ3ZjLXRtLXJldmlzaW9uLWhlYWQpCisKIChmc2V0ICd2Yy1w
cmVmaXgtbWFwIHZjLXByZWZpeC1tYXApCiAoZGVmaW5lLWtleSBjdGwteC1tYXAgInYiICd2Yy1w
cmVmaXgtbWFwKQogCkBAIC05MDQsNiArOTA3LDkgQEAgdmMtbWVudS1tYXAKICAgICAoYmluZGlu
Z3MtLWRlZmluZS1rZXkgbWFwIFt2Yy1yZW5hbWUtZmlsZV0KICAgICAgICcobWVudS1pdGVtICJS
ZW5hbWUgRmlsZSIgdmMtcmVuYW1lLWZpbGUKIAkJICA6aGVscCAiUmVuYW1lIGZpbGUiKSkKKyAg
ICAoYmluZGluZ3MtLWRlZmluZS1rZXkgbWFwIFt2Yy10bS1yZXZpc2lvbi1oZWFkXQorICAgICAg
JyhtZW51LWl0ZW0gIlRpbWUgbWFjaGluZSBhdCBIRUFEIiB2Yy10bS1yZXZpc2lvbi1oZWFkCisJ
CSAgOmhlbHAgIkxhdW5jaCBhIHRpbWUgbWFjaGluZSBmb3IgdGhlIEhFQUQgcmV2aXNpb24iKSkK
ICAgICAoYmluZGluZ3MtLWRlZmluZS1rZXkgbWFwIFt2Yy1yZXZpc2lvbi1vdGhlci13aW5kb3dd
CiAgICAgICAnKG1lbnUtaXRlbSAiU2hvdyBPdGhlciBWZXJzaW9uIiB2Yy1yZXZpc2lvbi1vdGhl
ci13aW5kb3cKIAkJICA6aGVscCAiVmlzaXQgYW5vdGhlciB2ZXJzaW9uIG9mIHRoZSBjdXJyZW50
IGZpbGUgaW4gYW5vdGhlciB3aW5kb3ciKSkKZGlmZiAtLWdpdCBhL2xpc3AvdmMvdmMtcmNzLmVs
IGIvbGlzcC92Yy92Yy1yY3MuZWwKaW5kZXggYzIxMTJiNzZhZC4uOWY1MjU4N2Y2ZiAxMDA2NDQK
LS0tIGEvbGlzcC92Yy92Yy1yY3MuZWwKKysrIGIvbGlzcC92Yy92Yy1yY3MuZWwKQEAgLTMxLDYg
KzMxLDEwIEBACiAKIDs7IFlvdSBjYW4gc3VwcG9ydCB0aGUgUkNTIC14IG9wdGlvbiBieSBjdXN0
b21pemluZyB2Yy1yY3MtbWFzdGVyLXRlbXBsYXRlcy4KIAorOzs7IFRvZG86Cis7OworOzsgKiBU
ZWFjaCB2Yy1yY3MtdG0tcmV2aXNpb25zIGFib3V0IFJDUyBicmFuY2hpbmcKKwogOzs7IENvZGU6
CiAKIDs7OwpAQCAtNDEsNiArNDUsNyBAQAogICAocmVxdWlyZSAnY2wtbGliKQogICAocmVxdWly
ZSAndmMpKQogKHJlcXVpcmUgJ2xvZy12aWV3KQorKHJlcXVpcmUgJ3ZjLXRpbWVtYWNoaW5lKQog
CiAoZGVjbGFyZS1mdW5jdGlvbiB2Yy1yZWFkLXJldmlzaW9uICJ2YyIKICAgICAgICAgICAgICAg
ICAgIChwcm9tcHQgJm9wdGlvbmFsIGZpbGVzIGJhY2tlbmQgZGVmYXVsdCBpbml0aWFsLWlucHV0
KSkKQEAgLTgxNSw2ICs4MjAsNTEgQEAgdmMtcmNzLWNyZWF0ZS10YWcKICAgICAgICAobGFtYmRh
IChmKQogCSAodmMtZG8tY29tbWFuZCAiKnZjKiIgMCAicmNzIiAodmMtbWFzdGVyLW5hbWUgZikg
KGNvbmNhdCAiLW4iIG5hbWUgIjoiKSkpKSkpKQogCisMCis7OzsKKzs7OyBUaW1lbWFjaGluZQor
Ozs7CisKKzs7IFRoaXMgaW1wbGVtZW50YXRpb24gZG9lcyBub3QgaGFuZGxlIFJDUyBicmFuY2hl
cy4KKyhkZWZ1biB2Yy1yY3MtdG0tcmV2aXNpb25zIChmaWxlKQorICAiUmV0dXJuIGRhdGEgYWJv
dXQgcmV2aXNpb25zIG1vZGlmeWluZyBGSUxFIG9uIGNoZWNrZWQtb3V0IGJyYW5jaC4iCisgICh2
Yy1kby1jb21tYW5kIHQgMCAicmNzIiAoY29uY2F0IHZjLWNhY2hlLXJvb3QgZmlsZSkgImxvZyIp
CisgICh2Yy1yY3MtdG0tcmV2aXNpb25zLXBhcnNlLWxvZyBmaWxlKSkKKworOzsgQ29udmVydCBh
biBSQ1MgbG9nIGludG8gcmV2aXNpb25zIGluZm8gcGVyIHZjLXRpbWVtYWNoaW5lJ3MgZXhwZWN0
YXRpb25zLgorKGRlZnVuIHZjLXJjcy10bS1yZXZpc2lvbnMtcGFyc2UtbG9nIChmaWxlKQorICAi
RXh0cmFjdCByZXZpc2lvbnMgaW5mbyBmcm9tIGNvbnRlbnRzIG9mIGN1cnJlbnQgYnVmZmVyLiIK
KyAgKGdvdG8tY2hhciAocG9pbnQtbWluKSkKKyAgKGxldCAoKHJldmlzaW9uLWluZm9zKQorICAg
ICAgICAobGluZSkKKyAgICAgICAgKHJldmlzaW9uKQorICAgICAgICAoc3ViamVjdCkgKG5ldy1z
dWJqZWN0KQorICAgICAgICAoYXV0aG9yKSAgKG5ldy1hdXRob3IpCisgICAgICAgIChkYXRlKSAg
ICAobmV3LWRhdGUpKQorICAgICh3aGlsZSAoc2VhcmNoLWZvcndhcmQtcmVnZXhwICJeLVstXSpc
biIgbmlsIHQpCisgICAgICAoc2V0cSBsaW5lIChjb25jYXQgKGJ1ZmZlci1zdWJzdHJpbmctbm8t
cHJvcGVydGllcyAobGluZS1iZWdpbm5pbmctcG9zaXRpb24pIChsaW5lLWVuZC1wb3NpdGlvbikp
ICJcdCIpKQorICAgICAgKHdoZW4gKHN0cmluZy1tYXRjaCAiXnJldmlzaW9uIFxcKDFbLl1bMC05
XStcXClcdCIgbGluZSkKKyAgICAgICAgKHNldHEgcmV2aXNpb24gKG1hdGNoLXN0cmluZyAxIGxp
bmUpKQorICAgICAgICAoZm9yd2FyZC1saW5lIDEpCisgICAgICAgIChzZXRxIGxpbmUgKGJ1ZmZl
ci1zdWJzdHJpbmctbm8tcHJvcGVydGllcyAobGluZS1iZWdpbm5pbmctcG9zaXRpb24pIChsaW5l
LWVuZC1wb3NpdGlvbikpKQorICAgICAgICAoc3RyaW5nLW1hdGNoICJeZGF0ZTogXFwoW147XSpc
XCk7ICBhdXRob3I6IFxcKFteO10qXFwpOyIgbGluZSkKKwkoc2V0cSBuZXctYXV0aG9yIChtYXRj
aC1zdHJpbmcgMiBsaW5lKSkKKyAgICAgICAgKHVubGVzcyAoZXF1YWwgYXV0aG9yIG5ldy1hdXRo
b3IpCisgICAgICAgICAgKHNldHEgYXV0aG9yIG5ldy1hdXRob3IpKQorICAgICAgICAoc2V0cSBu
ZXctZGF0ZSAodmMtdG0tZm9ybWF0LWRhdGUgKG1hdGNoLXN0cmluZyAxIGxpbmUpKSkKKyAgICAg
ICAgKHVubGVzcyAoZXF1YWwgZGF0ZSBuZXctZGF0ZSkKKyAgICAgICAgICAoc2V0cSBkYXRlIG5l
dy1kYXRlKSkKKyAgICAgICAgKGZvcndhcmQtbGluZSAxKQorICAgICAgICAod2hlbiAobG9va2lu
Zy1hdC1wICJicmFuY2hlczogLio7IikKKyAgICAgICAgICAoZm9yd2FyZC1saW5lIDEpKQorICAg
ICAgICAoc2V0cSBuZXctc3ViamVjdCAoYnVmZmVyLXN1YnN0cmluZy1uby1wcm9wZXJ0aWVzIChs
aW5lLWJlZ2lubmluZy1wb3NpdGlvbikgKGxpbmUtZW5kLXBvc2l0aW9uKSkpCisgICAgICAgICh3
aGVuIChlcXVhbCBuZXctc3ViamVjdCAiKioqIGVtcHR5IGxvZyBtZXNzYWdlICoqKiIpCisgICAg
ICAgICAgKHNldHEgbmV3LXN1YmplY3QgIiIpKQorICAgICAgICAodW5sZXNzIChlcXVhbCBzdWJq
ZWN0IG5ldy1zdWJqZWN0KQorICAgICAgICAgIChzZXRxIHN1YmplY3QgbmV3LXN1YmplY3QpKQor
CShwdXNoIChsaXN0IHJldmlzaW9uIGRhdGUgc3ViamVjdCBhdXRob3IgZmlsZSkgcmV2aXNpb24t
aW5mb3MpKSkKKyAgICByZXZpc2lvbi1pbmZvcykpCisKIAwKIDs7OwogOzs7IE1pc2NlbGxhbmVv
dXMKZGlmZiAtLWdpdCBhL2xpc3AvdmMvdmMtdGltZW1hY2hpbmUuZWwgYi9saXNwL3ZjL3ZjLXRp
bWVtYWNoaW5lLmVsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAuLmFjM2I5
MzYzMzQKLS0tIC9kZXYvbnVsbAorKysgYi9saXNwL3ZjL3ZjLXRpbWVtYWNoaW5lLmVsCkBAIC0w
LDAgKzEsNDI2IEBACis7OzsgdmMtdGltZW1hY2hpbmUuZWwgLS0tIFdhbGsgdGhyb3VnaCByZXZp
c2lvbnMgb2YgYSBmaWxlICAtKi0gbGV4aWNhbC1iaW5kaW5nOnQgLSotCisKKzs7IENvcHlyaWdo
dCAoQykgMjAyMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworOzsgVGhpcyBwcm9n
cmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2Rp
ZnkKKzs7IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vu
c2UgYXMgcHVibGlzaGVkIGJ5Cis7OyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRo
ZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgorOzsgKGF0IHlvdXIgb3B0aW9uKSBhbnkg
bGF0ZXIgdmVyc2lvbi4KKworOzsgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBo
b3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCis7OyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7
IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorOzsgTUVSQ0hBTlRBQklMSVRZ
IG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorOzsgR05VIEdl
bmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworOzsgWW91IHNob3VsZCBo
YXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKzs7
IGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9y
Zy9saWNlbnNlcy8+LgorCis7OzsgQ3JlZGl0czoKKzs7Cis7OyAgUGV0ZXIgU3RpZXJuc3Ryw7Zt
IC0gd3JvdGUgdGhlIG9yaWdpbmFsLCBnaXQtb25seSB2ZXJzaW9uCis7OyAgSm9obiBZYXRlcyAg
ICAgICAgLSByZWZhY3RvcmVkIFBldGVyJ3MgY29kZSBmb3IgdGhlIFZDIGVudmlyb25tZW50CisK
Kzs7OyBDb21tZW50YXJ5OgorOzsKKzs7IEEgdGltZW1hY2hpbmUgYnVmZmVyIGlzIGEgc2xpZGlu
ZyByZWFkLW9ubHkgd2luZG93IG92ZXIgdGhlIGRpc3RpbmN0Cis7OyByZXZpc2lvbnMgb2YgYSBz
aW5nbGUgZmlsZSBvbiBhIFZDUyBicmFuY2guICBUbyBjcmVhdGUgYSB0aW1lbWFjaGluZToKKzs7
Cis7OyAgICAodmMtcHJlZml4LW1hcCAiLCIpICAgdmMtdG0tcmV2aXNpb24taGVhZAorOzsKKzs7
IFRpbWVtYWNoaW5lIGltcGxlbWVudHMgcHJlZml4LWZyZWUgbWlub3IgbW9kZSB2Yy10bS1tb2Rl
OgorOzsKKzs7ICAgICIsIiAuIHZjLXRtLXJldmlzaW9uLWhlYWQKKzs7ICAgICJ+IiAuIHZjLXRt
LXJldmlzaW9uLXNlbGVjdAorOzsgICAgImciIC4gdmMtdG0tcmV2aXNpb24taQorOzsgICAgIm4i
IC4gdmMtdG0tcmV2aXNpb24tbmV4dAorOzsgICAgInAiIC4gdmMtdG0tcmV2aXNpb24tcHJldmlv
dXMKKzs7ICAgICJxIiAuIHZjLXRtLXF1aXQKKzs7ICAgICJzIiAuIHZjLXRtLXJldmlzaW9uLWNv
bXBsZXRlLXN1YmplY3QKKzs7ICAgICJ3IiAuIHZjLXRtLWFiYnJldmlhdGVkLXJldmlzaW9uLXRv
LWtpbGwtcmluZworOzsgICAgIlciIC4gdmMtdG0tcmV2aXNpb24tdG8ta2lsbC1yaW5nCis7Owor
OzsgVG8gc3VwcG9ydCB0aW1lbWFjaGluZSBmdW5jdGlvbmFsaXR5IGEgVkNTIGJhY2tlbmQgbmVl
ZHMgdG8gaW1wbGVtZW50OgorOzsKKzs7ICAgLSB0bS1yZXZpc2lvbnMgKGZpbGUpCis7OworOzsg
QW5kIGlkZWFsbHk6Cis7OworOzsgICAtIHRtLW1hcC1saW5lIChmaWxlIGZyb20tcmV2aXNpb24g
ZnJvbS1saW5lIHRvLXJldmlzaW9uIGZyb20taXMtb2xkZXIpCis7OworOzsgRm9yIG1vcmUgZGV0
YWlscyBzZWUgdGhlIGxhcmdlIGNvbW1lbnQgYXQgdGhlIGZyb250IG9mIHZjLmVsLgorCis7Ozsg
VG9kbzoKKzs7Cis7OyAqIGltcGxlbWVudCBtaXNzaW5nIGJsYW1lCis7OyAqIGltcGxlbWVudCBt
aXNzaW5nIHNob3ctY29tbWl0Cis7OyAqIHZjLXRtLWNyZWF0ZTogd2hlbiBjYWxsZWQgZnJvbSBh
IHJldmlzaW9uIGJ1ZmZlciwgc2hvdWxkIGp1bXAgdG8gdGhhdCByZXZpc2lvbgorOzsgKiB2Yy10
bS0tdGltZS1tYWNoaW5lOiBjb25maXJtIHJldmlzaW9uIGlzIHByZXNlbnQgaW4gdG1idWYtLWJy
YW5jaC1yZXZpc2lvbnMKKworOzs7IENvZGU6CisKKyhyZXF1aXJlICd2YykKKworKGRlZmdyb3Vw
IHZjLXRpbWVtYWNoaW5lIG5pbAorICAiVGltZS1tYWNoaW5lIGZ1bmN0aW9uYWxpdHkgZm9yIFZD
IGJhY2tlbmRzLiIKKyAgOmdyb3VwICd2YworICA6dmVyc2lvbiAiMzAuMSIpCisKKyhkZWZjdXN0
b20gdmMtdG0tZGF0ZS1mb3JtYXQKKyAgIiVhICVJOiVNICVwICVZLSVtLSVkIgorICAiUmV2aXNp
b24gY3JlYXRpb24gZGF0ZSBmb3JtYXQgKGVtcGhhc2lzIG9uIGVhc3kgZGF0ZSBjb21wYXJpc29u
KS4iCisgIDp0eXBlICdzdHJpbmcKKyAgOmdyb3VwICd2Yy10aW1lbWFjaGluZQorICA6dmVyc2lv
biAiMzAuMSIpCisKKyhkZWZjdXN0b20gdmMtdG0tZWNoby1hcmVhIHQKKyAgIldoZW4gbm9uLW5p
bCBzaG93IHJldmlzaW9uIGRldGFpbHMgaW4gdGhlIGVjaG8tYXJlYSB3aGlsZSBuYXZpZ2F0aW5n
IGNvbW1pdHMuIgorICA6dHlwZSAnYm9vbGVhbgorICA6Z3JvdXAgJ3ZjLXRpbWVtYWNoaW5lCisg
IDp2ZXJzaW9uICIzMC4xIikKKworKGRlZmN1c3RvbSB2Yy10bS1lY2hvLWFyZWEtZGV0YWlsICdz
dWJqZWN0CisgICJXaGF0IHRvIGRpc3BsYXkgd2hlbiBgdmMtdG0tZWNoby1hcmVhYCBpcyB0Lgor
QXZhaWxhYmxlIHZhbHVlcyBhcmU6CitgSURgICAgICAgOiBUaGUgcmV2aXNpb24ncyBJRCAoY29t
bWl0IGhhc2gpCitgc3ViamVjdGAgOiBUaGUgcmV2aXNpb24ncyBjb21taXQgbWVzc2FnZSBzdWJq
ZWN0IGxpbmUiCisgIDp0eXBlICcocmFkaW8gKGNvbnN0IDp0YWcgIlJldmlzaW9uIElEIChjb21t
aXQgaGFzaCkiIGNvbW1pdCkKKyAgICAgICAgICAgICAgICAoY29uc3QgOnRhZyAiUmV2aXNpb24g
bWVzc2FnZSBzdWJqZWN0IGxpbmUiIHN1YmplY3QpKQorICA6Z3JvdXAgJ3ZjLXRpbWVtYWNoaW5l
CisgIDp2ZXJzaW9uICIzMC4xIikKKworKGRlZmZhY2UgdmMtdG0tZWNoby1hcmVhLWRldGFpbC1m
YWNlCisgICcoKCgoY2xhc3MgY29sb3IpIChiYWNrZ3JvdW5kIGRhcmspKQorICAgICA6Zm9yZWdy
b3VuZCAieWVsbG93IikKKyAgICAoKChjbGFzcyBjb2xvcikgKGJhY2tncm91bmQgbGlnaHQpKQor
ICAgICA6Zm9yZWdyb3VuZCAieWVsbG93NCIpKQorICAiRmFjZSB0byB1c2Ugd2hlbiBkaXNwbGF5
aW5nIGRldGFpbHMgaW4gdGhlIGVjaG8tYXJlYS4iCisgIDpncm91cCAndmMtdGltZW1hY2hpbmUK
KyAgOnZlcnNpb24gIjMwLjEiKQorCisoZGVmY3VzdG9tIHZjLXRtLWVjaG8tYXJlYS1hdXRob3Ig
dAorICAiUHJlcGVuZCBhdXRob3IgdG8gZWNoby1hcmVhIGRldGFpbHMuIgorICA6dHlwZSAnYm9v
bGVhbgorICA6Z3JvdXAgJ3ZjLXRpbWVtYWNoaW5lCisgIDp2ZXJzaW9uICIzMC4xIikKKworKGRl
ZmZhY2UgdmMtdG0tZWNoby1hcmVhLWF1dGhvci1mYWNlCisgICcoKCgoY2xhc3MgY29sb3IpIChi
YWNrZ3JvdW5kIGRhcmspKQorICAgICA6Zm9yZWdyb3VuZCAib3JhbmdlIikKKyAgICAoKChjbGFz
cyBjb2xvcikgKGJhY2tncm91bmQgbGlnaHQpKQorICAgICA6Zm9yZWdyb3VuZCAiRGFya09yYW5n
ZTQiKSkKKyAgIkZhY2UgdG8gdXNlIHdoZW4gZGlzcGxheWluZyBhdXRob3IgYXMgcGFydCBvZiBk
ZXRhaWxzIGluIHRoZSBlY2hvLWFyZWEuIgorICA6Z3JvdXAgJ3ZjLXRpbWVtYWNoaW5lCisgIDp2
ZXJzaW9uICIzMC4xIikKKworKGRlZmN1c3RvbSB2Yy10bS1hYmJyZXZpYXRpb24tbGVuZ3RoIDEy
CisgICJOdW1iZXIgb2YgY2hhcnMgZnJvbSBmdWxsIHJldmlzaW9uIGlkIHRvIHVzZSBmb3IgYWJi
cmV2aWF0aW9uLiIKKyAgOnR5cGUgJ2ludGVnZXIKKyAgOmdyb3VwICd2Yy10aW1lbWFjaGluZQor
ICA6dmVyc2lvbiAiMzAuMSIpCisKKyhkZWZjdXN0b20gdmMtdG0tcXVpdC10by1pbnZva2luZy1i
dWZmZXIgdAorICAiU3dpdGNoIHRvIGludm9raW5nIGJ1ZmZlciBvbiDigJh2Yy10bS1xdWl04oCZ
LiIKKyAgOnR5cGUgJ2Jvb2xlYW4KKyAgOmdyb3VwICd2Yy10aW1lbWFjaGluZQorICA6dmVyc2lv
biAiMzAuMSIpCisKKyhkZWZ2YXItbG9jYWwgdmMtLXRpbWUtbWFjaGluZSBuaWwKKyAgIkNhY2hl
IGEgVE0gaGludCBvbiB2YXJpb3VzIGJ1ZmZlcnMuIikKKyhwdXQgJ3ZjLS10aW1lLW1hY2hpbmUg
J3Blcm1hbmVudC1sb2NhbCB0KQorCisoZGVmdmFyLWxvY2FsIHRtYnVmLS1hYnMtZmlsZSBuaWwK
KyAgIkFic29sdXRlIHBhdGggdG8gZmlsZSBiZWluZyB0cmF2ZXJzZWQgYnkgdGhpcyB0aW1lLW1h
Y2hpbmUuIikKKyhwdXQgJ3RtYnVmLS1hYnMtZmlsZSAncGVybWFuZW50LWxvY2FsIHQpCisoZGVm
dmFyLWxvY2FsIHRtYnVmLS1iYWNrZW5kIG5pbAorICAiVGhlIFZDIGJhY2tlbmQgYmVpbmcgdXNl
ZCBieSB0aGlzIHRpbWUtbWFjaGluZSIpCisocHV0ICd0bWJ1Zi0tYmFja2VuZCAncGVybWFuZW50
LWxvY2FsIHQpCisoZGVmdmFyLWxvY2FsIHRtYnVmLS1icmFuY2gtaW5kZXggbmlsCisgICJaZXJv
LWJhc2UgaW5kZXggaW50byB0bWJ1Zi0tYnJhbmNoLXJldmlzaW9ucy4iKQorKHB1dCAndG1idWYt
LWJyYW5jaC1yZXZpc2lvbnMgJ3Blcm1hbmVudC1sb2NhbCB0KQorKGRlZnZhci1sb2NhbCB0bWJ1
Zi0tYnJhbmNoLXJldmlzaW9ucyBuaWwKKyAgIldoZW4gbm9uLW5pbCwgYSB2ZWN0b3Igb2YgcmV2
aXNpb24taW5mbyBsaXN0cy4iKQorKHB1dCAndG1idWYtLWJyYW5jaC1yZXZpc2lvbnMgJ3Blcm1h
bmVudC1sb2NhbCB0KQorKGRlZnZhci1sb2NhbCB0bWJ1Zi0tc291cmNlLWJ1ZmZlciBuaWwKKyAg
IkEgbm9uLXRpbWUtbWFjaGluZSBidWZmZXIgZm9yIHdoaWNoIHRoaXMgdGltZS1tYWNoaW5lIHdh
cyBjcmVhdGVkLiIpCisocHV0ICd0bWJ1Zi0tc291cmNlLWJ1ZmZlciAncGVybWFuZW50LWxvY2Fs
IHQpCisKKyhkZWZ1biB2Yy10bS0tdGltZS1tYWNoaW5lICgpCisgICJSZXR1cm4gYSB2YWxpZCB0
aW1lLW1hY2hpbmUgZm9yIHRoZSBjdXJyZW50IGJ1ZmZlci4iCisgIChpZiB0bWJ1Zi0tYmFja2Vu
ZAorICAgICAgKGN1cnJlbnQtYnVmZmVyKQorICAgIChsZXQgKChyZXZpc2lvbiB2Yy10bS0tcmV2
aXNpb24pIDs7IGNhbGxlciBjb3VsZCBiZSBhIHJldmlzaW9uIGJ1ZmZlcgorICAgICAgICAgIChz
b3VyY2UgKGN1cnJlbnQtYnVmZmVyKSkpCisgICAgICAoc2V0LWJ1ZmZlciAob3IgKGJ1ZmZlci1i
YXNlLWJ1ZmZlcikgc291cmNlKSkKKyAgICAgICh2Yy1lbnN1cmUtdmMtYnVmZmVyKQorCisgICAg
ICAobGV0KiAoKHBhcmVudCB2Yy1wYXJlbnQtYnVmZmVyKQorICAgICAgICAgICAgIChhYnMtZmls
ZSAoYnVmZmVyLWZpbGUtbmFtZSkpCisgICAgICAgICAgICAgKGJhY2tlbmQgICh2Yy1iYWNrZW5k
IGFicy1maWxlKSkKKyAgICAgICAgICAgICAod29yay1yZXYgKHZjLXdvcmtpbmctcmV2aXNpb24g
YWJzLWZpbGUpKQorICAgICAgICAgICAgICh0bWJ1ZiB2Yy0tdGltZS1tYWNoaW5lKSkKKworICAg
ICAgICA7OyBlbnN1cmUgdGhhdCB0aGVyZSBpcyBhIHJldmlzaW9uIHdpdGggd2hpY2ggdG8gd29y
ay4KKyAgICAgICAgKHVubGVzcyByZXZpc2lvbgorICAgICAgICAgIChzZXRxIHJldmlzaW9uIHdv
cmstcmV2KQorICAgICAgICAgIChzZXRxIHNvdXJjZSAoY3VycmVudC1idWZmZXIpKSkKKworICAg
ICAgICA7OyBWYWxpZGF0ZSBhbnkgY3VycmVudCB0aW1lLW1hY2hpbmUgYnVmZmVyLgorICAgICAg
ICAod2hlbiB0bWJ1ZgorICAgICAgICAgICh3aXRoLWN1cnJlbnQtYnVmZmVyIHRtYnVmCisgICAg
ICAgICAgICAodW5sZXNzIChhbmQgKGVxdWFsIGFicy1maWxlIHRtYnVmLS1hYnMtZmlsZSkKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAoZXF1YWwgYmFja2VuZCAgdG1idWYtLWJhY2tlbmQpCisg
ICAgICAgICAgICAgICAgICAgICAgICAgOzsgVE9ETzogY29uZmlybSB0aGF0IHJldmlzaW9uIGlz
IGluIHRtYnVmLS1icmFuY2gtcmV2aXNpb25zLgorICAgICAgICAgICAgICAgICAgICAgICAgICkK
KyAgICAgICAgICAgICAgOzsgRGlzY2FyZCBhbiB1bnZhbGlkYXRlIFRNIGJ1ZmZlci4KKyAgICAg
ICAgICAgICAgKHNldHEgdG1idWYgbmlsKSkpKQorCisgICAgICAgIDs7IENyZWF0ZSBhIGZyZXNo
IFRNIGJ1ZmZlciBpZiBuZWVkZWQuCisgICAgICAgICh1bmxlc3MgdG1idWYKKyAgICAgICAgICAo
d2l0aC1jdXJyZW50LWJ1ZmZlciAoc2V0cSB0bWJ1ZiAoZ2V0LWJ1ZmZlci1jcmVhdGUgIipuYXNj
ZW50IFRNKiIpKQorICAgICAgICAgICAgKHNldHEgdmMtcGFyZW50LWJ1ZmZlciBwYXJlbnQpCisg
ICAgICAgICAgICAoc2V0cSB2Yy0tdGltZS1tYWNoaW5lIHRtYnVmKQorICAgICAgICAgICAgKHNl
dHEgdmMtdG0tLXJldmlzaW9uIHJldmlzaW9uKQorICAgICAgICAgICAgKHNldHEgdG1idWYtLWFi
cy1maWxlIGFicy1maWxlKQorICAgICAgICAgICAgKHNldHEgdG1idWYtLWJhY2tlbmQgYmFja2Vu
ZCkKKyAgICAgICAgICAgIChzZXRxIHRtYnVmLS1zb3VyY2UtYnVmZmVyIHNvdXJjZSkKKyAgICAg
ICAgICAgIChzZXRxIHRtYnVmLS1icmFuY2gtaW5kZXggMCkKKyAgICAgICAgICAgIChzZXRxIHRt
YnVmLS1icmFuY2gtcmV2aXNpb25zCisgICAgICAgICAgICAgICAgICAod2l0aC10ZW1wLWJ1ZmZl
cgorICAgICAgICAgICAgICAgICAgICAocHJvZzIKKyAgICAgICAgICAgICAgICAgICAgICAgICht
ZXNzYWdlICJFbnVtZXJhdGluZyByZXZpc2lvbnMuLi4iKQorICAgICAgICAgICAgICAgICAgICAg
ICAgKGxldCogKCh2ZWMgKGNsLWNvZXJjZSAodmMtY2FsbC1iYWNrZW5kIGJhY2tlbmQgJ3RtLXJl
dmlzaW9ucyBhYnMtZmlsZSkgJ3ZlY3RvcikpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgKGJyYW5jaCAobnJldmVyc2UgdmVjKSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgIGJy
YW5jaCkKKyAgICAgICAgICAgICAgICAgICAgICAobWVzc2FnZSAiRW51bWVyYXRpbmcgcmV2aXNp
b25zLi4uZG9uZSIpKSkpKSkKKworICAgICAgICAoc2V0LWJ1ZmZlciB0bWJ1ZikKKyAgICAgICAg
dG1idWYpKSkpCisKKzs7OyMjI2F1dG9sb2FkCisoZGVmdW4gdmMtdG0tcmV2aXNpb24taGVhZCAo
KQorICAiU2hvdyB3b3JrIGZpbGUncyBjdXJyZW50IHJldmlzaW9uIG9uIGNoZWNrZWQtb3V0IGJy
YW5jaC4iCisgIChpbnRlcmFjdGl2ZSkKKyAgKHdpdGgtY3VycmVudC1idWZmZXIgKHZjLXRtLS10
aW1lLW1hY2hpbmUpCisgICAgKHZjLXRtLS1zd2l0Y2gtdG8tcmV2aXNpb24gMSkpKQorCisoZGVm
dW4gdmMtdG0tcmV2aXNpb24tbmV4dCAoKQorICAiU2hvdyB3b3JrIGZpbGUncyBuZXh0IHJldmlz
aW9uIG9uIGNoZWNrZWQtb3V0IGJyYW5jaC4iCisgIChpbnRlcmFjdGl2ZSkKKyAgKHdpdGgtY3Vy
cmVudC1idWZmZXIgKHZjLXRtLS10aW1lLW1hY2hpbmUpCisgICAgKHZjLXRtLS1zd2l0Y2gtdG8t
cmV2aXNpb24gdG1idWYtLWJyYW5jaC1pbmRleCkpKQorCisoZGVmdW4gdmMtdG0tcmV2aXNpb24t
cHJldmlvdXMgKCkKKyAgIlNob3cgd29yayBmaWxlJ3MgcHJldmlvdXMgcmV2aXNpb24gb24gY2hl
Y2tlZC1vdXQgYnJhbmNoLiIKKyAgKGludGVyYWN0aXZlKQorICAod2l0aC1jdXJyZW50LWJ1ZmZl
ciAodmMtdG0tLXRpbWUtbWFjaGluZSkKKyAgICAodmMtdG0tLXN3aXRjaC10by1yZXZpc2lvbiAo
KyB0bWJ1Zi0tYnJhbmNoLWluZGV4IDIpKSkpCisKKyhkZWZ1biB2Yy10bS1yZXZpc2lvbi1pIChu
dW1iZXIpCisgICJTaG93IHdvcmsgZmlsZSdzIE4ndGggbW9zdCByZWNlbnQgcmV2aXNpb24gb24g
Y2hlY2tlZC1vdXQgYnJhbmNoICgxIGJlaW5nIEhFQUQpLiIKKyAgKGludGVyYWN0aXZlICJuRW50
ZXIgcmV2aXNpb24gcG9zaXRpb246ICIpCisgICh3aXRoLWN1cnJlbnQtYnVmZmVyICh2Yy10bS0t
dGltZS1tYWNoaW5lKQorICAgICh2Yy10bS0tc3dpdGNoLXRvLXJldmlzaW9uIG51bWJlcikpKQor
CisoZGVmdW4gdmMtdG0tcmV2aXNpb24tY29tcGxldGUtc3ViamVjdCAoKQorICAiU2hvdyB3b3Jr
IGZpbGUncyByZXZpc2lvbiB2aWEgc3ViamVjdCBjb21wbGV0aW9uIG9uIGNoZWNrZWQtb3V0IGJy
YW5jaC4iCisgIChpbnRlcmFjdGl2ZSkKKyAgKGxldCogKChzIChjb21wbGV0aW5nLXJlYWQKKyAg
ICAgICAgICAgICAiQ29tbWl0IHN1YmplY3Q6ICIKKyAgICAgICAgICAgICAobWFwY2FyIChhcHBs
eS1wYXJ0aWFsbHkgIydudGggMikgdG1idWYtLWJyYW5jaC1yZXZpc2lvbnMpKSkpCisgICAgKHZj
LXRtLS1zd2l0Y2gtdG8tcmV2aXNpb24KKyAgICAgKGNsLWxvb3AgZm9yIHJldmlzaW9uLW51bWJl
ciBmcm9tIDEKKyAgICAgICAgICAgICAgZm9yIGluZm8gYWNyb3NzIHRtYnVmLS1icmFuY2gtcmV2
aXNpb25zCisgICAgICAgICAgICAgIGlmIChlcXVhbCBzIChudGggMiBpbmZvKSkgcmV0dXJuIHJl
dmlzaW9uLW51bWJlcgorICAgICAgICAgICAgICBmaW5hbGx5IChlcnJvciAiU3ViamVjdCBub3Qg
Zm91bmQiKSkpKSkKKworKGRlZnVuIHZjLXRtLS1zd2l0Y2gtdG8tcmV2aXNpb24gKHRvLW51bWJl
cikKKyAgIlNob3cgd29yayBmaWxlJ3MgcmV2aXNpb24gYXQgcG9zaXRpb24gVE8tTlVNQkVSIG9u
IGNoZWNrZWQtb3V0IGJyYW5jaC4iCisgIChsZXQgKChicmFuY2gtbGVuZ3RoIChsZW5ndGggdG1i
dWYtLWJyYW5jaC1yZXZpc2lvbnMpKQorICAgICAgICAodG8taW5kZXggKDEtIHRvLW51bWJlcikp
CisgICAgICAgIChjYWxsaW5nLXdpbmRvdy1idWZmZXIgKHdpbmRvdy1idWZmZXIpKQorICAgICAg
ICAoY3Vyc29yLXdpbi1wb3MpKQorICAgICh3aXRoLWN1cnJlbnQtYnVmZmVyIGNhbGxpbmctd2lu
ZG93LWJ1ZmZlcgorICAgICAgKHNldHEgY3Vyc29yLXdpbi1wb3MgKHZjLXRtLS1nZXQtY3Vyc29y
LXdpbi1wb3NpdGlvbikpKQorICAgIChjb25kCisgICAgICgoPCB0by1udW1iZXIgMSkKKyAgICAg
IChlcnJvciAiJXMiICJUaGlzIGlzIHRoZSBIRUFEIHJldmlzaW9uOyB0aGVyZSBhcmUgbm9uZSBu
ZXdlciIpKQorICAgICAoKD49IHRvLWluZGV4IGJyYW5jaC1sZW5ndGgpCisgICAgICAoZXJyb3Ig
IlRoZXJlIGlzIG5vIHJldmlzaW9uICVkICh0aGUgb2xkZXN0IHJldmlzaW9uIGlzICVkKSIKKyAg
ICAgICAgICAgICB0by1udW1iZXIgYnJhbmNoLWxlbmd0aCkpCisgICAgICh0CisgICAgICAobGV0
KiAoKG5ldy1yZXZpc2lvbi1pbmZvICh2Yy10bS0tdG1idWYtcmV2aXNpb24taW5mbyB0by1pbmRl
eCkpCisgICAgICAgICAgICAgKG5ldy1yZXZpc2lvbiAoY2FyIG5ldy1yZXZpc2lvbi1pbmZvKSkK
KyAgICAgICAgICAgICAoYWJicmV2LXJldiAodmMtdG0tLWFiYnJldmlhdGUgbmV3LXJldmlzaW9u
KSkKKyAgICAgICAgICAgICAoZGF0ZSAobnRoIDEgbmV3LXJldmlzaW9uLWluZm8pKQorICAgICAg
ICAgICAgIChuLW9mLW0gKGZvcm1hdCAiIFslZC8lZCAlc10iIHRvLW51bWJlciBicmFuY2gtbGVu
Z3RoIGRhdGUpKQorICAgICAgICAgICAgIDs7IFVzZSB0aGUgZmlsZS1uYW1lIGZyb20gbmV3LXJl
dmlzaW9uLWluZm8gdG8gcmV2ZWFsIHJlbmFtZXMuCisgICAgICAgICAgICAgKGZpbGUtbmFtZSAo
ZmlsZS1uYW1lLW5vbmRpcmVjdG9yeSAobnRoIDQgbmV3LXJldmlzaW9uLWluZm8pKSkKKyAgICAg
ICAgICAgICAodG1idWYgKGN1cnJlbnQtYnVmZmVyKSkKKyAgICAgICAgICAgICAoZnJvbS1saW5l
IChsaW5lLW51bWJlci1hdC1wb3MpKQorICAgICAgICAgICAgICh0by1saW5lIGZyb20tbGluZSkp
CisgICAgICAgICh3aGVuIHZjLXRtLS1yZXZpc2lvbgorICAgICAgICAgICh1bmxlc3MgKD0gdG1i
dWYtLWJyYW5jaC1pbmRleCB0by1pbmRleCkKKyAgICAgICAgICAgIChzZXRxIHRvLWxpbmUgKHZj
LXRtLS1tYXAtbGluZSBmcm9tLWxpbmUgdG8taW5kZXgpKSkpCisgICAgICAgICh2Yy1maW5kLXJl
dmlzaW9uIHRtYnVmLS1hYnMtZmlsZSBuZXctcmV2aXNpb24gdG1idWYtLWJhY2tlbmQgdG1idWYp
CisgICAgICAgIDs7IFJldXNlIHRpbWVtYWNoaW5lIHdpbmRvd3MsIG90aGVyd2lzZSBjcmVhdGUg
dGhlbSBpbiBzb21lIG90aGVyLXdpbmRvdy4KKyAgICAgICAgKGlmIChlcSBjYWxsaW5nLXdpbmRv
dy1idWZmZXIgdG1idWYpCisgICAgICAgICAgICAoc3dpdGNoLXRvLWJ1ZmZlciB0bWJ1ZikKKyAg
ICAgICAgICAoc3dpdGNoLXRvLWJ1ZmZlci1vdGhlci13aW5kb3cgdG1idWYpKQorICAgICAgICAo
dmMtdG0tbW9kZSArMSkKKyAgICAgICAgKGZvcndhcmQtbGluZSAoLSB0by1saW5lIChsaW5lLW51
bWJlci1hdC1wb3MpKSkKKyAgICAgICAgKHZjLXRtLS1zZXQtY3Vyc29yLXdpbi1wb3NpdGlvbiBj
dXJzb3Itd2luLXBvcykKKyAgICAgICAgKHNldHEgdG1idWYtLWJyYW5jaC1pbmRleCB0by1pbmRl
eCkKKworICAgICAgICAocmVuYW1lLWJ1ZmZlciAoY29uY2F0IGZpbGUtbmFtZSAiICIgYWJicmV2
LXJldikgdCkKKyAgICAgICAgKHNldHEgbW9kZS1saW5lLWJ1ZmZlci1pZGVudGlmaWNhdGlvbgor
ICAgICAgICAgICAgICAobGlzdCAocHJvcGVydGl6ZWQtYnVmZmVyLWlkZW50aWZpY2F0aW9uICIl
MTJiIikgbi1vZi1tKSkKKworICAgICAgICAod2hlbiB2Yy10bS1lY2hvLWFyZWEKKyAgICAgICAg
ICAodmMtdG0tLXNob3ctZWNoby1hcmVhLWRldGFpbHMgbmV3LXJldmlzaW9uLWluZm8pKSkpCisg
ICAgICAodmMtdG0tLWVybS13b3JrYXJvdW5kKSkpKQorCisKKyhkZWZ1biB2Yy10bS0tbWFwLWxp
bmUgKGZyb20tbGluZSB0by1pbmRleCkKKyAgIlJldHVybiBhIHN1Z2dlc3RlZCBuZXcgY3VycmVu
dC1saW5lIGFmdGVyIGEgcmV2aXNpb24ganVtcC4iCisgIDs7IE5ld2VyIGFuZCBvbGRlciBhcmUg
Zmlyc3QgZ3Vlc3Nlczsgc3Vic2VxdWVudGx5IHRoZXkgbWF5IGdldCBzd2FwcGVkLgorICAobGV0
KiAoKHRvLWluZm8gKHZjLXRtLS10bWJ1Zi1yZXZpc2lvbi1pbmZvIHRvLWluZGV4KSkKKyAgICAg
ICAgICh0by1yZXZpc2lvbiAoY2FyIHRvLWluZm8pKQorICAgICAgICAgKGZyb20tcmV2aXNpb24g
dmMtdG0tLXJldmlzaW9uKQorICAgICAgICAgKGZyb20taXMtb2xkZXIgKDwgdG1idWYtLWJyYW5j
aC1pbmRleCB0by1pbmRleCkpCisgICAgICAgICAoYmFja2VuZCB0bWJ1Zi0tYmFja2VuZCkKKyAg
ICAgICAgIChhYnMtZmlsZSB0bWJ1Zi0tYWJzLWZpbGUpKQorICAgICh3aXRoLXRlbXAtYnVmZmVy
CisgICAgICAodmMtY2FsbC1iYWNrZW5kIGJhY2tlbmQgJ3RtLW1hcC1saW5lIGFicy1maWxlCisg
ICAgICAgICAgICAgICAgICAgICAgIGZyb20tcmV2aXNpb24gZnJvbS1saW5lIHRvLXJldmlzaW9u
IGZyb20taXMtb2xkZXIpKSkpCisKKyhkZWZ1biB2Yy1kZWZhdWx0LXRtLW1hcC1saW5lIChfYmFj
a2VuZCBfcmVsLWZpbGUgX2Zyb20tcmV2aXNpb24gZnJvbS1saW5lCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgX3RvLXJldmlzaW9uIF9mcm9tLWlzLW9sZGVyKQorICAiRGVm
YXVsdCBgbWFwLWxpbmUnIGltcGxlbWVudGF0aW9uLgorSXQgbWVyZWx5IHJldHVybnMgRlJPTS1M
SU5FLiIKKyAgZnJvbS1saW5lKQorCisoZGVmdW4gdmMtdG0tLXNob3ctZWNoby1hcmVhLWRldGFp
bHMgKHJldmlzaW9uLWluZm8pCisgICJTaG93IGRldGFpbHMgZm9yIFJFVklTSU9OLUlORk8gaW4g
ZWNoby1hcmVhLiIKKyAgKGxldCogKChkYXRlIChudGggMSByZXZpc2lvbi1pbmZvKSkKKyAgICAg
ICAgIChhdXRob3IgKGlmIHZjLXRtLXNob3ctYXV0aG9yIChjb25jYXQgIiB8ICIgKG50aCAzIHJl
dmlzaW9uLWluZm8pKSAiIikpCisgICAgICAgICAoc2hhLW9yLXN1YmplY3QgKGlmIChlcSB2Yy10
bS1lY2hvLWFyZWEtZGV0YWlsICdjb21taXQpIChjYXIgcmV2aXNpb24taW5mbykgKG50aCAyIHJl
dmlzaW9uLWluZm8pKSkpCisgICAgKG1lc3NhZ2UgIiVzJXM6ICVzIgorICAgICAgICAgICAgIGRh
dGUKKyAgICAgICAgICAgICAocHJvcGVydGl6ZSBhdXRob3IgJ2ZhY2UgJ3ZjLXRtLWVjaG8tYXJl
YS1hdXRob3ItZmFjZSkKKyAgICAgICAgICAgICAocHJvcGVydGl6ZSBzaGEtb3Itc3ViamVjdCAn
ZmFjZSAndmMtdG0tZWNoby1hcmVhLWRldGFpbC1mYWNlKSkpKQorCisoZGVmdW4gdmMtdG0tZm9y
bWF0LWRhdGUgKGRhdGUpCisgICJSZXR1cm4gZGF0ZSBmb3JtYXR0ZWQgcGVyIHRoZSB1c2VyJ3Mg
dmMtdG0tZGF0ZS1mb3JtYXQuIgorICAoZm9ybWF0LXRpbWUtc3RyaW5nIHZjLXRtLWRhdGUtZm9y
bWF0IChkYXRlLXRvLXRpbWUgZGF0ZSkpKQorCisoZGVjbGFyZS1mdW5jdGlvbiBlcm0tcmVzZXQt
YnVmZmVyICJleHQ6ZW5oLXJ1YnktbW9kZSIpCisKKyhkZWZ1biB2Yy10bS0tZXJtLXdvcmthcm91
bmQgKCkKKyAgIldvcmthcm91bmQgZm9yIGVuaGFuY2VkIHJ1YnkgbW9kZSBub3QgZGV0ZWN0aW5n
IHJldmlzaW9uIGNoYW5nZS4iCisgICh3aGVuIChlcSBtYWpvci1tb2RlICdlbmgtcnVieS1tb2Rl
KQorICAgIChpZ25vcmUtZXJyb3JzIChlcm0tcmVzZXQtYnVmZmVyKSkpKQorCisoZGVmdW4gdmMt
dG0tLWdldC1jdXJzb3Itd2luLXBvc2l0aW9uICgpCisgICJSZXR1cm4gdGhlIGN1cnNvciB2aXN1
YWwgbGluZSBudW1iZXIgdy5yLnQuIHRoZSBjdXJyZW50IHdpbmRvdyBmaXJzdCBsaW5lLiIKKyAg
KGxldCogKCh3aW4tcG9pbnQtbWluIChzYXZlLWV4Y3Vyc2lvbiAobW92ZS10by13aW5kb3ctbGlu
ZSAwKSAocG9pbnQpKSkKKyAgICAgICAgIChjdXItcG9zIChjb3VudC1zY3JlZW4tbGluZXMgd2lu
LXBvaW50LW1pbiAocG9pbnQpKSkpCisgICAgY3VyLXBvcykpCisKKyhkZWZ1biB2Yy10bS0tc2V0
LWN1cnNvci13aW4tcG9zaXRpb24gKFBPUykKKyAgIlNldCB0aGUgY3Vyc29yIHBvc2l0aW9uIHRv
IHRoZSBQT1MgdmlzdWFsIGxpbmUgdy5yLnQuIHRoZSB3aW5kb3cgZmlyc3QgbGluZS4iCisgIChy
ZWNlbnRlciBQT1MpKQorCisoZGVmdW4gdmMtdG0tLWFiYnJldmlhdGUgKHJldmlzaW9uKQorICAi
UmV0dXJuIFJFVklTSU9OIGFiYnJldmlhdGVkIHRvIGB2Yy10bS1hYmJyZXZpYXRpb24tbGVuZ3Ro
JyBjaGFycy4iCisgIChpZiAobGVuZ3RoPCByZXZpc2lvbiB2Yy10bS1hYmJyZXZpYXRpb24tbGVu
Z3RoKQorICAgICAgcmV2aXNpb24KKyAgICAoc3Vic3RyaW5nIHJldmlzaW9uIDAgdmMtdG0tYWJi
cmV2aWF0aW9uLWxlbmd0aCkpKQorCisoZGVmdW4gdmMtdG0tcmV2aXNpb24tdG8ta2lsbC1yaW5n
ICgpCisgICJLaWxsIHRoZSBjdXJyZW50IHJldmlzaW9ucyBhYmJyZXZpYXRlZCBjb21taXQgaGFz
aC4iCisgIChpbnRlcmFjdGl2ZSkKKyAgKGxldCAoKHJldmlzaW9uICh2Yy10bS0tdG1idWYtcmV2
aXNpb24pKSkKKyAgICAobWVzc2FnZSByZXZpc2lvbikKKyAgICAoa2lsbC1uZXcgcmV2aXNpb24p
KSkKKworKGRlZnVuIHZjLXRtLWFiYnJldmlhdGVkLXJldmlzaW9uLXRvLWtpbGwtcmluZyAoKQor
ICAiS2lsbCB0aGUgY3VycmVudCByZXZpc2lvbnMgZnVsbCBjb21taXQgaGFzaC4iCisgIChpbnRl
cmFjdGl2ZSkKKyAgKGxldCAoKHJldmlzaW9uICh2Yy10bS0tYWJicmV2aWF0ZSAodmMtdG0tLXRt
YnVmLXJldmlzaW9uKSkpKQorICAgIChtZXNzYWdlIHJldmlzaW9uKQorICAgIChraWxsLW5ldyBy
ZXZpc2lvbikpKQorCis7OyAoZGVmdW4gdmMtdG0tc2hvdy1jb21taXQgKCkKKzs7ICAgIlNob3cg
Y29tbWl0IGZvciBjdXJyZW50IHJldmlzaW9uLiIKKzs7ICAgKGludGVyYWN0aXZlKQorOzsgICAo
bGV0ICgocmV2ICh2Yy10bS0tdG1idWYtcmV2aXNpb24pKSkKKzs7ICAgICAoaWYgKGZib3VuZHAg
J21hZ2l0LXNob3ctY29tbWl0KQorOzsgICAgICAgICAobWFnaXQtc2hvdy1jb21taXQgcmV2KQor
OzsgICAgICAgKG1lc3NhZ2UgIllvdSBuZWVkIHRvIGluc3RhbGwgbWFnaXQgdG8gc2hvdyBjb21t
aXQiKSkpKQorCis7OyAoZGVmdW4gdmMtdG0tYmxhbWUgKCkKKzs7ICAgIkNhbGwg4oCYbWFnaXQt
YmxhbWXigJkgb24gY3VycmVudCByZXZpc2lvbi4iCis7OyAgIChpbnRlcmFjdGl2ZSkKKzs7ICAg
KGlmIChmYm91bmRwICdtYWdpdC1ibGFtZSkKKzs7ICAgICAgIChsZXQgKChtYWdpdC1idWZmZXIt
cmV2aXNpb24gKGNhciB0bS0tcmV2aXNpb24taW5mbykpKQorOzsgICAgICAobWFnaXQtYmxhbWUp
KQorOzsgICAgIChtZXNzYWdlICJZb3UgbmVlZCB0byBpbnN0YWxsIG1hZ2l0IGZvciBibGFtZSBj
YXBhYmlsaXRpZXMiKSkpCisKKyhkZWZ1biB2Yy10bS0tdG1idWYtcmV2aXNpb24gKCZvcHRpb25h
bCBpbmRleCkKKyAgIlJldHVybiB0aGUgdW5pcXVlIHJldmlzaW9uIGlkIGZvciB0aGlzIHRtYnVm
J3MgY3VycmVudCByZXZpc2lvbi4iCisgIChjYXIgKHZjLXRtLS10bWJ1Zi1yZXZpc2lvbi1pbmZv
IGluZGV4KSkpCisKKyhkZWZ1biB2Yy10bS0tdG1idWYtcmV2aXNpb24taW5mbyAoJm9wdGlvbmFs
IGluZGV4KQorICAiUmV0dXJuIHRoZSByZXZpc2lvbi1pbmZvIGxpc3QgZm9yIHRoaXMgdG1idWYn
cyBjdXJyZW50IHJldmlzaW9uLiIKKyAgKGFyZWYgdG1idWYtLWJyYW5jaC1yZXZpc2lvbnMgKG9y
IGluZGV4IHRtYnVmLS1icmFuY2gtaW5kZXgpKSkKKworKGRlZnVuIHZjLXRtLXF1aXQgKCkKKyAg
IkV4aXQgdGhlIHRpbWVtYWNoaW5lLiIKKyAgKGludGVyYWN0aXZlKQorICAobGV0ICgocGFyZW50
LWJ1ZmZlci1uYW1lIGJ1ZmZlci1maWxlLW5hbWUpKQorICAgIChraWxsLWJ1ZmZlcikKKyAgICAo
bGV0ICgocGFyZW50LWJ1ZmZlciAoZmluZC1idWZmZXItdmlzaXRpbmcgcGFyZW50LWJ1ZmZlci1u
YW1lKSkpCisgICAgICAod2hlbiAoYW5kIHBhcmVudC1idWZmZXIgdmMtdG0tcXVpdC10by1pbnZv
a2luZy1idWZmZXIpCisgICAgICAgIChzd2l0Y2gtdG8tYnVmZmVyIHBhcmVudC1idWZmZXIgbmls
IHQpKSkpKQorCisodHJhbnNpZW50LWRlZmluZS1wcmVmaXggdmMtdG0taGVscCAoKQorICAiU2hv
dyBvbmxpbmUgaGVscC4iCisgIFsiTmF2aWdhdGUiCisgICBbKCIsIiAic3dpdGNoIHRvIEhFQUQg
cmV2aXNpb24iIHZjLXRtLXJldmlzaW9uLWhlYWQpCisgICAgKCJ+IiAic3dpdGNoIHRvIHNlbGVj
dGVkIHJldmlzaW9uIGlkIiB2Yy10bS1yZXZpc2lvbi1zZWxlY3QpCisgICAgKCJuIiAic3dpdGNo
IHRvIG5leHQgcmV2aXNpb24iIHZjLXRtLXJldmlzaW9uLW5leHQpCisgICAgKCJwIiAic3dpdGNo
IHRvIHByZXZpb3VzIHJldmlzaW9uIiB2Yy10bS1yZXZpc2lvbi1wcmV2aW91cykKKyAgICAoImoi
ICJzd2l0Y2ggdG8gaSd0aCByZXZpc2lvbiIgdmMtdG0tcmV2aXNpb24tbnRoKQorICAgICgicyIg
InN3aXRjaCB0byBzdWJqZWN0IHJldmlzaW9uIiB2Yy10bS1yZXZpc2lvbi1jb21wbGV0ZS1zdWJq
ZWN0KV1dCisgIFsiUmV2aXNpb24gSUQgdG8ga2lsbCByaW5nIgorICAgWygidyIgImFiYnJldmlh
dGVkIHJldmlzaW9uIGlkIiB2Yy10bS1hYmJyZXZpYXRlZC1yZXZpc2lvbi10by1raWxsLXJpbmcp
CisgICAgKCJXIiAiZnVsbCByZXZpc2lvbiBpZCIgdmMtdG0tcmV2aXNpb24tdG8ta2lsbC1yaW5n
KV1dCisgIFsiTWlzYyIKKyAgIFsgOzsgKCJCIiAiYmxhbWUgY3VycmVudCByZXZpc2lvbiIgdmMt
dG0tYmxhbWUpCis7OyAgKCJDIiAidmlldyBjb21taXQiIHZjLXRtLXNob3ctY29tbWl0KQorICAg
ICgiPyIgInNob3cgaGVscCIgdmMtdG0taGVscCkKKyAgICAoInEiICJxdWl0IiB2Yy10bS1xdWl0
KV1dKQorCisoZGVmaW5lLW1pbm9yLW1vZGUgdmMtdG0tbW9kZQorICAiVkMgVGltZW1hY2hpbmUs
IGZlZWwgdGhlIHdpbmdzIG9mIGhpc3RvcnkuIgorICA6aW5pdC12YWx1ZSBuaWwKKyAgOmxpZ2h0
ZXIgIiBUTSIKKyAgOmtleW1hcAorICAnKCgiLCIgLiB2Yy10bS1yZXZpc2lvbi1oZWFkKQorICAg
ICgifiIgLiB2Yy10bS1yZXZpc2lvbi1zZWxlY3QpCis7OyAgKCJCIiAuIHZjLXRtLWJsYW1lKQor
OzsgICgiQyIgLiB2Yy10bS1zaG93LWNvbW1pdCkKKyAgICAoImoiIC4gdmMtdG0tcmV2aXNpb24t
bnRoKQorICAgICgibiIgLiB2Yy10bS1yZXZpc2lvbi1uZXh0KQorICAgICgicCIgLiB2Yy10bS1y
ZXZpc2lvbi1wcmV2aW91cykKKyAgICAoInEiIC4gdmMtdG0tcXVpdCkKKyAgICAoInMiIC4gdmMt
dG0tcmV2aXNpb24tY29tcGxldGUtc3ViamVjdCkKKyAgICAoIlMiIC4gdmMtdG0tcmV2aXNpb24t
Y29tcGxldGUtc3ViamVjdCkgOyBpbiB2Yy1tb2RlICJzIiBpcyB2Yy1jcmVhdGUtdGFnCisgICAg
KCJ3IiAuIHZjLXRtLWFiYnJldmlhdGVkLXJldmlzaW9uLXRvLWtpbGwtcmluZykKKyAgICAoIlci
IC4gdmMtdG0tcmV2aXNpb24tdG8ta2lsbC1yaW5nKQorICAgICgiPyIgLiB2Yy10bS1oZWxwKSkK
KyAgOmdyb3VwICd2Yy10aW1lbWFjaGluZSkKKworKHByb3ZpZGUgJ3ZjLXRpbWVtYWNoaW5lKQor
Cis7OzsgdmMtdGltZW1hY2hpbmUuZWwgZW5kcyBoZXJlCmRpZmYgLS1naXQgYS9saXNwL3ZjL3Zj
LmVsIGIvbGlzcC92Yy92Yy5lbAppbmRleCA1Njk3N2NiZTE2Li44OGVjMzM3NmM0IDEwMDY0NAot
LS0gYS9saXNwL3ZjL3ZjLmVsCisrKyBiL2xpc3AvdmMvdmMuZWwKQEAgLTQ1NCw2ICs0NTQsNDQg
QEAKIDs7ICAgUmV0dXJuIHRoZSBtb3N0IHJlY2VudCByZXZpc2lvbiBvZiBGSUxFIHRoYXQgbWFk
ZSBhIGNoYW5nZQogOzsgICBvbiBMSU5FLgogCis7OyBUSU1FTUFDSElORQorOzsKKzs7IFRvIHN1
cHBvcnQgVE0gYSBiYWNrZW5kIG11c3QgaW1wbGVtZW50OgorOzsKKzs7IC0gdG0tcmV2aXNpb25z
IChmaWxlICZvcHRpb25hbCBicmFuY2gpCis7OworOzsgICBSZXR1cm4gYSBsaXN0IG9mIHJldmlz
aW9uLWluZm9zIGNvcnJlc3BvbmRpbmcgdG8gdGhlIHJldmlzaW9ucyBtb2RpZnlpbmcKKzs7ICAg
RklMRSBvbiBCUkFOQ0ggd2l0aGluIFRIRSBWQ1MnUyByb290LWRpci4gIFdoZW4gQlJBTkNIIGlz
IHByZXNlbnQgaXQKKzs7ICAgd2lsbCBtYXRjaCB0aGF0IG9mIHdvcmtpbmcgRklMRS4KKzs7Cis7
OyAgIEEgcmV2aXNpb24taW5mbyBpcyBhIGxpc3QgKFJFVklTSU9OLUlEIERBVEUgU1VCSkVDVCBB
VVRIT1IgUkVMLUZJTEUpOgorOzsKKzs7ICAgLSBSRVZJU0lPTi1JRDogIHRoZSBWQ1MncyB1bmlx
dWUgaWRlbnRpZmljYXRpb24gb2YgYSByZXZpc2lvbgorOzsgICAtIERBVEU6ICAgICAgICAgcmV2
aXNpb24gY3JlYXRpb24gZGF0ZSBmb3JtYXR0ZWQgYnkgdmMtdG0tZm9ybWF0LWRhdGUKKzs7ICAg
LSBTVUJKRUNUOiAgICAgIGZpcnN0IGxpbmUgb2YgbWVzc2FnZSBzdXBwbGllZCBhdCByZXZpc2lv
bidzIGNyZWF0aW9uCis7OyAgIC0gQVVUSE9SOiAgICAgICBzb21lIGluZGljYXRpb24gb2YgdGhl
IHJldmlzaW9uJ3MgYXV0aG9yCis7OyAgIC0gUkVMLUZJTEU6ICAgICBWQ1Mgcm9vdC1yZWxhdGl2
ZSBwYXRoIHRvIGZpbGUKKzs7Cis7OyAgIFRoZSBoZWFkIG9mIHRoZSBsaXN0IHNob3VsZCBkZXNj
cmliZSB0aGUgb2xkZXN0IHJldmlzaW9uLiAgVGhlIHRhaWwgb2YKKzs7ICAgdGhlIGxpc3Qgc2hv
dWxkIGRlc2NyaWJlIHRoZSBuZXdlc3QgcmV2aXNpb24uCis7OworOzsgLSB0bS1tYXAtbGluZSAo
cmVsLWZpbGUgZnJvbS1yZXZpc2lvbiBmcm9tLWxpbmUgdG8tcmV2aXNpb24gZnJvbS1pcy1vbGRl
cikKKzs7Cis7OyAgIFJldHVybiBUTy1SRVZJU0lPTidzIGxpbmUgY29ycmVzcG9uZGluZyB0byBG
Uk9NLVJFVklTSU9OJ3MgRlJPTS1MSU5FLgorOzsgICBGUk9NLVJFVklTSU9OIGFuZCBUTy1SRVZJ
U0lPTiBhcmUgZ3VhcmFudGVlZCBkaXN0aW5jdC4gIEZST00tSVMtT0xERVIKKzs7ICAgaW5kaWNh
dGVzIHJlbGF0aXZlIHRlbXBvcmFsIG9yZGVyaW5nIG9mIEZST00tUkVWSVNJT04gYW5kIFRPLVJF
VklTSU9OCis7OyAgIG9uIHRoZSBicmFuY2guCis7OworOzsgICBPbiBlbnRyeSBkZWZhdWx0LWRp
cmVjdG9yeSBpcyB0aGUgVkNTJ3MgYWJzLXJvb3QsIFJFTC1GSUxFIGlzIHRoZSBwYXRoCis7OyAg
IHJlbGF0aXZlIHRvIHRoZSBmaWxlIGJlaW5nIGRpc3BsYXllZCBhbmQgdGhlIGN1cnJlbnQtYnVm
ZmVyIGlzIGFuIGVtcHR5Cis7OyAgIHRlbXBvcmFyeSBidWZmZXIuCis7OworOzsgICBWQyBzdXBw
bGllcyBhIHRyaXZpYWwgdmMtZGVmYXVsdC10bS1tYXAtbGluZS4gIEl0IHJldHVybnMgRlJPTS1M
SU5FLAorOzsgICBlZmZlY3RpdmVseSBhc3NlcnRpbmcgdGhhdCB0aGUgY29ycmVzcG9uZGluZyBs
aW5lIGluIHRoZSBUTy1SRVZJU0lPTgorOzsgICBvY2N1cnMgYXQgZXhhY3RseSB0aGUgc2FtZSBs
aW5lIG51bWJlci4gIHZjLWdpdC5lbCdzIGltcGxlbWVudGF0aW9uCis7OyAgIGlzIGNvbXBsZXRl
IGFuZCByZWFzb25hYmx5IHVuZGVyc3RhbmRhYmxlLiAgKFVuZm9ydHVuYXRlbHksIGl0IHVzZXMK
Kzs7ICAgbWFueSB1bmlxdWUgZmVhdHVyZXMgb2YgZ2l0IGJsYW1lIHRoYXQgbWF5IG5vdCBleGlz
dCBpbiBvdGhlciBWQ1NzLikKKwogOzsgVEFHL0JSQU5DSCBTWVNURU0KIDs7CiA7OyAtIGNyZWF0
ZS10YWcgKGRpciBuYW1lIGJyYW5jaHApCkBAIC0xMTk2LDEwICsxMjM0LDExIEBAIHZjLWVuc3Vy
ZS12Yy1idWZmZXIKIAkJOzsgY3VycmVudCBidWZmZXIgYXJlIHRoZSBzYW1lIGJ1ZmZlci4KICAJ
CShub3QgKGVxIHZjLXBhcmVudC1idWZmZXIgKGN1cnJlbnQtYnVmZmVyKSkpKQogICAgICAgKHNl
dC1idWZmZXIgdmMtcGFyZW50LWJ1ZmZlcikpKSkKLSAgKGlmIChub3QgYnVmZmVyLWZpbGUtbmFt
ZSkKLSAgICAgIChlcnJvciAiQnVmZmVyICVzIGlzIG5vdCBhc3NvY2lhdGVkIHdpdGggYSBmaWxl
IiAoYnVmZmVyLW5hbWUpKQotICAgICh1bmxlc3MgKHZjLWJhY2tlbmQgYnVmZmVyLWZpbGUtbmFt
ZSkKLSAgICAgIChlcnJvciAiRmlsZSAlcyBpcyBub3QgdW5kZXIgdmVyc2lvbiBjb250cm9sIiBi
dWZmZXItZmlsZS1uYW1lKSkpKQorICAoY29uZAorICAgKChub3QgYnVmZmVyLWZpbGUtbmFtZSkK
KyAgICAoZXJyb3IgIkJ1ZmZlciAnJXMnIGlzIG5vdCBhc3NvY2lhdGVkIHdpdGggYSBmaWxlIiAo
YnVmZmVyLW5hbWUpKSkKKyAgICgodW5sZXNzICh2Yy1iYWNrZW5kIGJ1ZmZlci1maWxlLW5hbWUp
CisgICAgICAoZXJyb3IgIkZpbGUgJyVzJyBpcyBub3QgdW5kZXIgdmVyc2lvbiBjb250cm9sIiBi
dWZmZXItZmlsZS1uYW1lKSkpKSkKIAogOzs7IFN1cHBvcnQgZm9yIHRoZSBDLXggdiB2IGNvbW1h
bmQuCiA7OyBUaGlzIGlzIHdoZXJlIGFsbCB0aGUgc2luZ2xlLWZpbGUtb3JpZW50ZWQgY29kZSBm
cm9tIGJlZm9yZSB0aGUgZmlsZXNldAotLSAKMi4zNy4yCgo=
--0000000000002ddb5005f3224a44
Content-Type: text/x-patch; charset="US-ASCII"; 
	name="0003-Introduce-vc-bos-backup-on-save-to-an-RCS-file.patch"
Content-Disposition: attachment; 
	filename="0003-Introduce-vc-bos-backup-on-save-to-an-RCS-file.patch"
Content-Transfer-Encoding: base64
Content-ID: <f_ldciswc30>
X-Attachment-Id: f_ldciswc30

RnJvbSA3N2FiMDZjZjllMmJkM2RiZTg3OGRmNWJiMDdlYWRiYTVkYWRkYzQ3IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiAiSm9obiBTLiBZYXRlcywgSnIiIDxqb2huQHlhdGVzLXNoZWV0
cy5vcmc+CkRhdGU6IFdlZCwgMjUgSmFuIDIwMjMgMjA6NTg6NTkgLTA1MDAKU3ViamVjdDogW1BB
VENIIDMvM10gSW50cm9kdWNlIHZjLWJvczogYmFja3VwIG9uIHNhdmUgKHRvIGFuIFJDUyBmaWxl
KQoKVGhlIGRyZWFtIG9mIHRoaXMgdmMtYm9zIGNhcGFiaWxpdHkgd2FzIHdoYXQgZmlyc3QgZ290
IG1lIHdvcmtpbmcgb24KdmMtdGltZW1hY2hpbmUuICBGcm9tIHZjLWJvcy5lbCdzIGZyb250LW1h
dHRlcjoKCiAgICA7OyBNb2Rlcm4gdmVyc2lvbiBjb250cm9sIHN5c3RlbXMsIHN1Y2ggYXMgZ2l0
LCBhcmUgd29uZGVyZnVsLiAgQnV0IHRoZXkKICAgIDs7IGhhdmUgZHJhd2JhY2tzIHdoZW4gZGVh
bGluZyB3aXRoIGxpZ2h0d2VpZ2h0IHNhdmUgb3BlcmF0aW9uczoKICAgIDs7CiAgICA7OyAqIFRv
byBpbnZhc2l2ZTogbmV3IHJldmlzaW9ucyBhcmUgY3JlYXRlZCBvbmx5IGJ5IGV4cGxpY2l0bHkg
YWN0aW9uOwogICAgOzsgICB0aGlzIGluY2x1ZGVzIHN1cHBseWluZyBhIGNvbW1pdCBtZXNzYWdl
IChldmVuIGlmIGVtcHR5KQogICAgOzsgKiBUb28gY29hcnNlOiBhIHJldmlzaW9uIGNhcHR1cmVz
IGFuIGVudGlyZSAicHJvamVjdCIKICAgIDs7ICogVG9vIHNtYXJ0OiBldmVuIGZpbGVzIGxpc3Rl
ZCBpbiAuZ2l0aWdub3JlIChvciBlcXVpdmFsZW50KSByZW1haW4KICAgIDs7ICAgZWxpZ2libGUg
Zm9yIGVkdGluZyBhbmQgaGVuY2UgZGVzZXJ2ZSB0byBnZXQgYmFja2VkLXVwCiAgICA7OyAqIFJl
cXVpcmVzIHNldHVwOiB3aGF0IGFib3V0IGZpbGVzIHRoYXQgaGF2ZSBubyBwcm9qZWN0PwogICAg
OzsKICAgIDs7IEVudGVyIHZjLWJvcy4uLgogICAgOzsKICAgIDs7IHZjLWJvcyBwcm92aWRlcyBl
YXN5IGFjY2VzcyB0byBwYXN0IHJldmlzaW9ucyBvZiBlZGl0ZWQgZmlsZXMgYnkKICAgIDs7IGlu
dGVncmF0aW5nIHdpdGggVkMncyB0aW1lbWFjaGluZSBmdW5jdGlvbmFsaXR5LiAgVG8gZG8gdGhp
cyBpdAogICAgOzsgcmVxdWlyZXMgdGhhdCBWQydzIHZjLWNhY2hlLXJvb3QgYmUgc2V0IGFuZCB0
aGF0IGl0IGhhdmUgJy9SQ1MnIGFzCiAgICA7OyBvbmUgb2YgaXRzIGRpcmVjdG9yeSBjb21wb25l
bnRzICh0eXBpY2FsbHkgdGhlIGxhc3QpLgogICAgOzsKICAgIDs7IEdpdmVuIHN1Y2ggYSBjb25m
aWd1cmF0aW9uLCB2Yy1ib3MgbWFpbnRhaW5zIGEgbWlycm9yIHRyZWUgb2YgUkNTCiAgICA7OyBj
b250cm9sIGZpbGVzIGJlbG93IHZjLWNhY2hlLXJvb3QuICBBIGNvbnRyb2wgZmlsZSBhcHBlYXJz
IGF0IHRoZQogICAgOzsgc2FtZSBwb3NpdGlvbiBhbmQgaGFzIGV4YWN0bHkgdGhlIHNhbWUgbmFt
ZSBhcyB0aGUgZmlsZSB0aGF0IGl0CiAgICA7OyB0cmFja3MgKG1lYW5pbmcgbm8gJyx2JyBzdWZm
aXgpLiAgVGhpcyB3b3JrcyBiZWNhdXNlIFJDUyB0cmVhdHMKICAgIDs7ICphbnkqIGZpbGUgKmFu
eXdoZXJlKiBiZW5lYXRoIGFuIFJDUyBkaXJlY3RvcnkgYXMgYSBjb250cm9sIGZpbGUuCiAgICA7
OwogICAgOzsgT24gRklSU1QgY2hhbmdlIGFuZCBFVkVSWSBzdWJzZXF1ZW50IHNhdmUgY3gtYm9z
OgogICAgOzsKICAgIDs7ICogUXVhbGlmaWVzIHRoZSBidWZmZXIncyBwYXRoCiAgICA7OyAqIEVu
c3VyZXMgZXhpc3RlbmNlIG9mIGEgbWlycm9yIGRpcmVjdG9yeSBiZW5lYXRoIHZjLWNhY2hlLXJv
b3QKICAgIDs7ICogUmVjb3JkcyB0aGUgbmV3bHkgc2F2ZWQgZmlsZSBhcyB0aGUgbGF0ZXN0IFJD
UyByZXZpc2lvbiB3aXRoCiAgICA7OyAgIGFuIGVtcHR5IGNvbW1pdCBtZXNzYWdlCiAgICA7Owog
ICAgOzsgdmMtYm9zJ3MgdHJhY2tpbmcgaXMgaW5kZXBlbmRlbnQgb2Ygd2hldGhlciBhIGZpbGUg
aXMgdHJhY2sgYnkKICAgIDs7IGFueSBvdGhlciBWQ1MuCgpUaHVzLCB2Yy1ib3MgaXMgYm90aCBh
IG1pbmltYWxseSBpbnZhc2l2ZSB3YXkgdG8gY2FwdHVyZSBzYXZlIGhpc3RvcnkgZm9yCmFyYml0
cmFyeSBmaWxlcyBhbmQgYSBjb252ZW5pZW50IHdheSBvZiBhY2Nlc3MgdGhhdCBoaXN0b3J5LgoK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQoKdmMtYm9zIGxldmVyYWdlcyB2Yy10aW1lbWFjaGluZSB0byBw
cm92aWRlIGVhc3kgYWNjZXNzIHRvIHJldmlzaW9ucwpyZWNvcmRlZCBhdCB0aGUgcG9pbnQgb2Yg
c2F2aW5nIGEgZmlsZS4gIEl0IGlzIGltcGxlbWVudGVkIGFzIGEgbmV3Cm1pbm9yIG1vZGUuCgoq
IHZjLWJvcy5lbDogbmV3IGZpbGU7IGltcGxlbWVudHMgYW4gZXh0cmVtZWx5IG1pbmltYWwgdmMg
YmFja2VuZAoqIHZjLXJjcy5lbCAodmMtcmNzLXRtLXJldmlzaW9ucyk6IHNwbGl0IG91dCB2Yy1y
Y3MtdG0tcmV2aXNpb25zLXBhcnNlLWxvZwogIHNvIHRoYXQgaXQgY2FuIGJlIHNoYXJlZCB3aXRo
IHZjLWJvcy10bS1yZXZpc2lvbnMuCiAgKHZjLXJjcy10bS1yZXZpc2lvbnMtcGFyc2UtbG9nKTog
cmVjb3JkIGVtcHR5IHN1YmplY3QgYXMgbmlsIGluc3RlYWQgb2YgIiIKKiB2Yy10aW1lbWFjaGlu
ZSAodmMtdG0tcmV2aXNpb24taGVhZCk6IHdoZW4gcHJlZml4IGFyZyBpcyBwcmVzZW50IGJpbmQg
bmV3CiAgdmMtZm9yY2UtYm9zIHRvIHRyaWdnZXIgdXNlIG9mIHZjLWJvcyBiYWNrZW5kIChldmVu
IHdoZW4gZmlsZSBpcyByZWdpc3RlcmVkCiAgd2l0aCBzb21lIG90aGVyIHZjIGJhY2tlbmQpCiAg
KHZjLXRtLS1zd2l0Y2gtdG8tcmV2aXNpb24pOiBwYXNzIHRtYnVmLS1iYWNrZW5kIHZjLWZpbmQt
cmV2aXNpb24gc28gYXMgdG8KICBwcm9wYWdhdGUgYm9zIGhhbmRsaW5nCiAgKHZjLXRtLS1zaG93
LWVjaG8tYXJlYS1kZXRhaWxzKTogaWYgYmFja2VuZCBpcyAnYm9zIHRoZW4gc3VwcHJlc3Mgd29y
dGhsZXNzCiAgYXV0aG9yIGFuZCBzdWJqZWN0CiAgKiB2Yy5lbCAodmMtZW5zdXJlLXZjLWJ1ZmZl
cik6IGltcHJvdmUgZGlhZ25vc3RpYyB3aGVuIHVzZXIgYXR0ZW1wdCB0bwogIGluaXRpYXRlIGEg
dGltZW1hY2hpbmUgb24gYSBmaWxlIHRoYXQgaXMgbm90IHJlZ2lzdGVyIHdpdGggYW55IHZjIGJh
Y2tlbmQKICAodmMtZmluZC1yZXZpc2lvbik6IGNhbGwgdmMtYm9zLWZpbmQtcmV2aXNpb24gd2hl
biBiYWNrZW5kIGlzICdib3MKLS0tCiBsaXNwL3ZjL3ZjLWJvcy5lbCAgICAgICAgIHwgMjA3ICsr
KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCiBsaXNwL3ZjL3ZjLWdpdC5lbCAg
ICAgICAgIHwgICAyIC0KIGxpc3AvdmMvdmMtcmNzLmVsICAgICAgICAgfCAgIDIgKy0KIGxpc3Av
dmMvdmMtdGltZW1hY2hpbmUuZWwgfCAgNDAgKysrKystLS0KIGxpc3AvdmMvdmMuZWwgICAgICAg
ICAgICAgfCAgMjggKysrKystCiA1IGZpbGVzIGNoYW5nZWQsIDI1NyBpbnNlcnRpb25zKCspLCAy
MiBkZWxldGlvbnMoLSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBsaXNwL3ZjL3ZjLWJvcy5lbAoKZGlm
ZiAtLWdpdCBhL2xpc3AvdmMvdmMtYm9zLmVsIGIvbGlzcC92Yy92Yy1ib3MuZWwKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMC4uZTY4OWEyY2RhMwotLS0gL2Rldi9udWxsCisr
KyBiL2xpc3AvdmMvdmMtYm9zLmVsCkBAIC0wLDAgKzEsMjA3IEBACis7OzsgdmMtYm9zLmVsIC0t
LSBWQyBCYWNrdXAgT24gU2F2ZSAodG8gUkNTKQorCis7OyBDb3B5cmlnaHQgKEMpIDIwMjMgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKKzs7IEF1dGhvcjogQmVuamFtaW4gUnV0dCA8
YnJ1dHRAYmxvb21pbmd0b24uaW4udXM+Cis7OyBNYWludGFpbmVyOiBDb25vciBOYXNoIDxjb25v
ckBuYXNoY29idXNpbmVzc3NlcnZpY2VzbGxjLmNvbT4KKzs7IE1haW50YWluZXI6IEpvaG4gUy4g
WWF0ZXMsIEpyLiA8am9obkB5YXRlcy1zaGVldHMub3JnPgorOzsgVmVyc2lvbjogMC44CisKKzs7
IFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv
b3IgbW9kaWZ5Cis7OyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorOzsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
bjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorOzsgYW55IGxhdGVyIHZl
cnNpb24uCisKKzs7IFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0
IHdpbGwgYmUgdXNlZnVsLAorOzsgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2
ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKzs7IE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKzs7IEdOVSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKzs7IFlvdSBzaG91bGQgaGF2ZSByZWNlaXZl
ZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCis7OyBhbG9uZyB3aXRo
IEdOVSBFbWFjczsgc2VlIHRoZSBmaWxlIENPUFlJTkcuICBJZiBub3QsIHdyaXRlIHRvCis7OyB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0
ZSAzMzAsCis7OyBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKworOzs7IENyZWRpdHM6Cis7
OworOzsgQXV0aG9yOiAgICAgQmVuamFtaW4gUnV0dCAgICAgIDxicnV0dEBibG9vbWluZ3Rvbi5p
bi51cz4KKzs7IE1haW50YWluZXI6IEpvaG4gUy4gWWF0ZXMsIEpyLiA8am9obkB5YXRlcy1zaGVl
dHMub3JnPgorCis7OzsgQ29tbWVudGFyeToKKworOzsgRGVyaXZlZCBmcm9tIGFuZCB0aGVuIGhl
YXZpbHkgbW9kaWZpZWQ6Cis7OyAgIGh0dHBzOi8vd3d3LmVtYWNzd2lraS5vcmcvZW1hY3MvYmFj
a3VwLWVhY2gtc2F2ZS5lbAorOzsKKzs7IE1vZGVybiB2ZXJzaW9uIGNvbnRyb2wgc3lzdGVtLCBz
dWNoIGFzIGdpdCwgYXJlIHdvbmRlcmZ1bC4gIEJ1dCB0aGV5Cis7OyBoYXZlIGRyYXdiYWNrcyB3
aGVuIGRlYWxpbmcgd2l0aCBsaWdodHdlaWdodCBzYXZlIG9wZXJhdGlvbnM6Cis7OworOzsgKiBU
b28gaW52YXNpdmU6IG5ldyByZXZpc2lvbnMgYXJlIGNyZWF0ZWQgb25seSBieSBleHBsaWNpdGx5
IGFjdGlvbjsKKzs7ICAgdGhpcyBpbmNsdWRlcyBzdXBwbHlpbmcgYSBjb21taXQgbWVzc2FnZSAo
ZXZlbiBpZiBlbXB0eSkKKzs7ICogVG9vIGNvYXJzZTogYSByZXZpc2lvbiBjYXB0dXJlcyBhbiBl
bnRpcmUgInByb2plY3QiCis7OyAqIFRvbyBzbWFydDogZXZlbiBmaWxlcyBsaXN0ZWQgaW4gLmdp
dGlnbm9yZSAob3IgZXF1aXZhbGVudCkgcmVtYWluCis7OyAgIGVsaWdpYmxlIGZvciBlZHRpbmcg
YW5kIGhlbmNlIGRlc2VydmUgdG8gZ2V0IGJhY2tlZC11cAorOzsgKiBSZXF1aXJlcyBzZXR1cDog
d2hhdCBhYm91dCBmaWxlcyB0aGF0IGhhdmUgbm8gcHJvamVjdD8KKzs7Cis7OyBFbnRlciB2Yy1i
b3MuLi4KKzs7Cis7OyB2Yy1ib3MgcHJvdmlkZXMgZWFzeSBhY2Nlc3MgdG8gcGFzdCByZXZpc2lv
bnMgb2YgZWRpdGVkIGZpbGVzIGJ5Cis7OyBpbnRlZ3JhdGluZyB3aXRoIFZDJ3MgdGltZW1hY2hp
bmUgZnVuY3Rpb25hbGl0eS4gIFRvIGRvIHRoaXMgaXQKKzs7IHJlcXVpcmVzIHRoYXQgVkMncyB2
Yy1jYWNoZS1yb290IGJlIHNldCBhbmQgdGhhdCBpdCBoYXZlICcvUkNTJyBhcworOzsgb25lIG9m
IGl0cyBkaXJlY3RvcnkgY29tcG9uZW50cyAodHlwaWNhbGx5IHRoZSBsYXN0KS4KKzs7Cis7OyBH
aXZlbiBzdWNoIGEgY29uZmlndXJhdGlvbiwgdmMtYm9zIG1haW50YWlucyBhIG1pcnJvciB0cmVl
IG9mIFJDUworOzsgY29udHJvbCBmaWxlcyBiZWxvdyB2Yy1jYWNoZS1yb290LiAgQSBjb250cm9s
IGZpbGUgYXBwZWFycyBhdCB0aGUKKzs7IHNhbWUgcG9zaXRpb24gYW5kIGhhcyBleGFjdGx5IHRo
ZSBzYW1lIG5hbWUgYXMgdGhlIGZpbGUgdGhhdCBpdAorOzsgdHJhY2tzIChtZWFuaW5nIG5vICcs
dicgc3VmZml4KS4gIFRoaXMgd29ya3MgYmVjYXVzZSBSQ1MgdHJlYXRzCis7OyAqYW55KiBmaWxl
ICphbnl3aGVyZSogYmVuZWF0aCBhbiBSQ1MgZGlyZWN0b3J5IGFzIGEgY29udHJvbCBmaWxlLgor
OzsKKzs7IE9uIEZJUlNUIGNoYW5nZSBhbmQgRVZFUlkgc3Vic2VxdWVudCBzYXZlIGN4LWJvczoK
Kzs7Cis7OyAqIFF1YWxpZmllcyB0aGUgYnVmZmVyJ3MgcGF0aAorOzsgKiBFbnN1cmVzIGV4aXN0
ZW5jZSBvZiBhIG1pcnJvciBkaXJlY3RvcnkgYmVuZWF0aCB2Yy1jYWNoZS1yb290Cis7OyAqIFJl
Y29yZHMgdGhlIG5ld2x5IHNhdmVkIGZpbGUgYXMgdGhlIGxhdGVzdCBSQ1MgcmV2aXNpb24gd2l0
aAorOzsgICBhbiBlbXB0eSBjb21taXQgbWVzc2FnZQorOzsKKzs7IHZjLWJvcydzIHRyYWNraW5n
IGlzIGluZGVwZW5kZW50IG9mIHdoZXRoZXIgYSBmaWxlIGlzIHRyYWNrIGJ5Cis7OyBhbnkgb3Ro
ZXIgVkNTLgorOzsKKzs7IHZjLWJvcyByZXF1aXJlcyB0aGF0IHRoZSByY3MgZXhlY3V0YWJsZSBi
ZSBhdmFpbGFibGUgKHR5cGljYWxseQorOzsgaW5zdGFsbGVkIGF0IC91c3IvYmluL3JjcykuCis7
OworOzsgVG8gYWN0aXZhdGUgZ2xvYmFsbHksIHBsYWNlIHRoaXMgZmlsZSBpbiB5b3VyIGBsb2Fk
LXBhdGgnLCBlbnN1cmUKKzs7IHRoYXQgdmMtY2FjaGUtcm9vdCBpcyBzZXQsIHRoZW4gYWRkIHRo
ZSBmb2xsb3dpbmcgdG8geW91ciBpbml0LmVsOgorOzsKKzs7ICAgICAodmMtYm9zLW1vZGUgdCkK
Kzs7Cis7OyBUbyBmaWx0ZXIgd2hpY2ggZmlsZXMgdmMtYm9zIGJhY2tzIHVwLCBzZXR1cCBhIGN1
c3RvbSBmdW5jdGlvbiBmb3IKKzs7IGB2Yy1ib3MtZmlsdGVyLWZ1bmN0aW9uJy4gIEZvciBleGFt
cGxlLCB0byBmaWx0ZXIgb3V0IHRoZSBzYXZpbmcgb2YKKzs7IGdudXMgLm5ld3NyYy5lbGQgZmls
ZXMsIGRvOgorOzsKKzs7ICAgICAoZGVmdW4gdmMtYm9zLW5vLW5ld3NyYy1lbGQgKGZpbGVuYW1l
KQorOzsgICAgICAgKGNvbmQKKzs7ICAgICAgICAoKHN0cmluZz0gKGZpbGUtbmFtZS1ub25kaXJl
Y3RvcnkgZmlsZW5hbWUpICIubmV3c3JjLmVsZCIpIG5pbCkKKzs7ICAgICAgICAodCB0KSkpCis7
OyAgICAgKHNldHEgdmMtYm9zLWZpbHRlci1mdW5jdGlvbiAnYm9zLW5vLW5ld3NyYy1lbGQpCisK
Kzs7OyBUb2RvOgorOzsKKzs7ICogZ2FyYmFnZSBjb2xsZWN0aW9uOiBpdCB3b3VsZCBiZSBuaWNl
IHRvIGhhdmUgYSBjcm9uIHNjcmlwdCB0byBwdXJnZQorOzsgICBhbmNpZW50IHJldmlzaW9ucwor
Cis7OzsgTm90ZXM6CisKKzs7OyBDb2RlOgorCisocmVxdWlyZSAndmMtaG9va3MpCisocmVxdWly
ZSAndmMtcmNzKQorCisKKyhkZWZncm91cCB2Yy1ib3MgbmlsCisgICJCYWNrdXAgT24gU2F2ZSAo
dG8gYW4gUkNTIGZpbGUpLiIKKyAgOmdyb3VwICd2Yy10aW1lbWFjaGluZQorICA6Z3JvdXAgJ2Jh
Y2t1cAorICA6dmVyc2lvbiAiMzAuMSIpCisKKyhkZWZjdXN0b20gdmMtYm9zLXJlbW90ZS1maWxl
cyBuaWwKKyAgIldoZXRoZXIgdG8gYmFja3VwIHJlbW90ZSBmaWxlcyBhdCBlYWNoIHNhdmUgKG9m
ZiBieSBkZWZhdWx0KS4iCisgIDp0eXBlICdib29sZWFuCisgIDpncm91cCAndmMtYm9zCisgIDp2
ZXJzaW9uICIzMC4xIikKKworKGRlZmN1c3RvbSB2Yy1ib3MtZmlsdGVyLWZ1bmN0aW9uICMnaWRl
bnRpdHkKKyAgIkZ1bmN0aW9uIHdoaWNoIHNob3VsZCByZXR1cm4gbm9uLW5pbCBpZiB0aGUgZmls
ZSBzaG91bGQgYmUgYmFja2VkIHVwLiIKKyAgOnR5cGUgJ2Z1bmN0aW9uCisgIDpncm91cCAndmMt
Ym9zCisgIDp2ZXJzaW9uICIzMC4xIikKKworKGRlZmN1c3RvbSB2Yy1ib3Mtc2l6ZS1saW1pdCA1
MDAwMAorICAiTWF4aW11bSBzaXplIChpbiBieXRlKSBiZXlvbmQgd2hpY2ggYSBmaWxlIHdpbGwg
bm90IGdldCBiYWNrZWQtdXAuCitTZXR0aW5nIHRoaXMgdmFyaWFibGUgdG8gbmlsIGRpc2FibGVz
IHRoZSBzaXplIGNoZWNrLiIKKyAgOnR5cGUgJ25hdG51bQorICA6Z3JvdXAgJ3ZjLWJvcworICA6
dmVyc2lvbiAiMzAuMSIpCisKKyhkZWZjdXN0b20gdmMtYm9zLXJjcyAiL3Vzci9iaW4vcmNzIgor
ICAiUGF0aCB0byB0aGUgcmNzIGV4ZWN1dGFibGUgKHJlcXVpcmVkIGZvciB2Yy1ib3MgZnVuY3Rp
b25hbGl0eSkuIgorICA6dHlwZSAnKGZpbGUgOm11c3QtbWF0Y2ggdCkKKyAgOmdyb3VwICd2Yy1i
b3MKKyAgOnZlcnNpb24gIjMwLjEiKQorCisoZGVmY29uc3QgdmMtYm9zLXdpdG5lc3Nlcy1yZWdl
eAorICAiL1xcKFNDQ1NcXHxSQ1NcXHxDVlNcXHxNQ1ZTXFx8Wy5dc3JjXFx8Wy5dc3ZuXFx8Wy5d
Z2l0XFx8Wy5daGdcXHxbLl1ienJcXHxfTVROXFx8X2RhcmNzXFx8W3tdYXJjaFt9XVxcKS8iCisg
ICJXcml0ZXMgdG8gYW55IHBvaW50IGJlbG93IG9uZSBvZiB0aGVzZSB3aXRuZXNzZXMgc2hvdWxk
IGJlIGlnbm9yZWQuCisKK0ZJWE1FOiBUaGlzIGlzIGEgcmVnZXgtaWZpZWQgY29weSBvZiB2Yy1o
b29rcydzIHZjLWRpcmVjdG9yeS1leGNsdXNpb24tbGlzdC4iKQorCisKKzs7IFRoaXMgaW1wbGVt
ZW50YXRpb24gZG9lcyBub3QgaGFuZGxlIFJDUyBicmFuY2hlcy4KKzs7OyMjI2F1dG9sb2FkCiso
ZGVmdW4gdmMtYm9zLXRtLXJldmlzaW9ucyAoZmlsZSkKKyAgIlJldHVybiBkYXRhIGFib3V0IGJh
Y2t1cC1vbi1zYXZlIHJldmlzaW9ucyBvZiBGSUxFLiIKKyAgKGxldCAoKG1hc3Rlci1maWxlIChj
b25jYXQgdmMtY2FjaGUtcm9vdCBmaWxlKSkpCisgICAgKHZjLWRvLWNvbW1hbmQgdCAwIHZjLWJv
cy1yY3MgbWFzdGVyLWZpbGUgImxvZyIpKQorICAodmMtcmNzLXRtLXJldmlzaW9ucy1wYXJzZS1s
b2cgZmlsZSkpCisKKzs7OyMjI2F1dG9sb2FkCisoZGVmdW4gdmMtYm9zLWZpbmQtcmV2aXNpb24g
KGZpbGUgcmV2IGJ1ZmZlcikKKyAgIlJldHVybiBpbiBCVUZGRVIgRklMRSdzIGJhY2t1cC1vbi1z
YXZlIHJldmlzaW9uIFJFVi4iCisgIChsZXQgKChtYXN0ZXItZmlsZSAoY29uY2F0IHZjLWNhY2hl
LXJvb3QgZmlsZSkpKQorICAgICh2Yy1kby1jb21tYW5kIChvciBidWZmZXIgIip2YyoiKSAwIHZj
LWJvcy1yY3MgbWFzdGVyLWZpbGUgImNvIiAiLXEiIChjb25jYXQgIi1wIiByZXYpKSkpCisKKzs7
IDs7OyMjI2F1dG9sb2FkCis7OyAoZGVmdW4gdmMtYm9zLXRtLW1hcC1saW5lIChmaWxlIGZyb20t
cmV2aXNpb24gZnJvbS1saW5lIHRvLXJldmlzaW9uIGZyb20taXMtb2xkZXIpCis7OyAgICJSZXR1
cm4gVE8tUkVWSVNJT04ncyBsaW5lIGNvcnJlc3BvbmRpbmcgdG8gRlJPTS1SRVZJU0lPTidzIEZS
T00tTElORS4KKzs7IE9uIGVudHJ5IHRoZSBjdXJyZW50LWJ1ZmZlciBpcyBhbiBlbXB0eSB0ZW1w
b3JhcnkgYnVmZmVyLiIKKzs7Cis7OyAgIChtZXNzYWdlICJcbiA9PSB2Yy1ib3MtdG0tbWFwLWxp
bmUgPT1cbiIpCis7OyAgIGZyb20tbGluZSkKKworKGRlZnVuIHZjLWJvcy1hZGQtcmV2aXNpb24g
KCkKKyAgIlJlY29yZCBhIG5ldyBSQ1MgJ2JhY2t1cCBvbiBzYXZlJyByZXZpc2lvbiBvZiBidWZm
ZXIncyBmaWxlLiIKKyAgKHNldHEgdmMtY29uc3VsdC1oZWFkZXJzIG5pbCkKKyAgKGxldCAoKGJm
biBidWZmZXItZmlsZS1uYW1lKSkKKyAgICAod2hlbiAoYW5kIGJmbgorICAgICAgICAgICAgICAg
KG5vdCAoc3RyaW5nLW1hdGNoLXAgdmMtYm9zLXdpdG5lc3Nlcy1yZWdleCBiZm4pKQorICAgICAg
ICAgICAgICAgKG9yIHZjLWJvcy1yZW1vdGUtZmlsZXMKKwkJICAgKG5vdCAoZmlsZS1yZW1vdGUt
cCBiZm4pKSkKKwkgICAgICAgKG9yIChub3QgdmMtYm9zLXNpemUtbGltaXQpCisJCSAgICg8PSAo
YnVmZmVyLXNpemUpIHZjLWJvcy1zaXplLWxpbWl0KSkKKyAgICAgICAgICAgICAgIChmdW5jYWxs
IHZjLWJvcy1maWx0ZXItZnVuY3Rpb24gYmZuKSkKKyAgICAgIChsZXQqICgobWlycm9yLWZpbGUg
KHZjLWJvcy0tbWlycm9yLWZpbGUgYmZuKSkpCisgICAgICAgIChjYWxsLXByb2Nlc3MgdmMtYm9z
LXJjcworICAgICAgICAgICAgICAgICAgICAgIG5pbCAoZ2V0LWJ1ZmZlci1jcmVhdGUgIip2Yy1i
b3MtbG9nKiIpIG5pbAorICAgICAgICAgICAgICAgICAgICAgICJjaSIgIi1sIiAiLW0nJyIgIi10
LScnIiBiZm4gbWlycm9yLWZpbGUpKSkpKQorCisoZGVmdW4gdmMtYm9zLS1taXJyb3ItZmlsZSAo
ZmlsZSkKKyAgIlJldHVybiBwYXRoIHRvIEZJTEUncyBSQ1MgY29udHJvbCBmaWxlIHdpdGhpbiB2
Yy1jYWNoZS1yb290LiIKKyAgKGxldCogKChkaXIgKGZpbGUtbmFtZS1kaXJlY3RvcnkgZmlsZSkp
CisJIChmaWxlIChmaWxlLW5hbWUtbm9uZGlyZWN0b3J5IGZpbGUpKQorCSAobWlycm9yLWRpciAo
Y29uY2F0IChleHBhbmQtZmlsZS1uYW1lIHZjLWNhY2hlLXJvb3QpIGRpcikpCisgICAgICAgICAo
bWlycm9yLWZpbGUgKGNvbmNhdCBtaXJyb3ItZGlyIGZpbGUpKSkKKyAgICAodW5sZXNzIChmaWxl
LWV4aXN0cy1wIG1pcnJvci1kaXIpCisgICAgICAobWFrZS1kaXJlY3RvcnkgbWlycm9yLWRpciB0
KSkKKyAgICBtaXJyb3ItZmlsZSkpCisKKyhkZWZpbmUtbWlub3ItbW9kZSB2Yy1ib3MtbW9kZQor
ICAiU2lsZW50bHkgYmFja3VwIHNhdmVkIGZpbGVzIGFzIG5ldyBSQ1MgcmV2aXNpb25zIGJlbmVh
dGggdmMtY2FjaGUtcm9vdC4KKworVmlzaXQgc2F2ZWQgcmV2aXNpb25zIHVzaW5nIHZjLXRtLXJl
dmlzaW9uLWhlYWQ6IChDLXUgQy14IHYgLCkuIgorICA6Z2xvYmFsIHQKKyAgOmdyb3VwICdiYWNr
dXAKKyAgOmdyb3VwICd2Yy1ib3MKKyAgOnZlcnNpb24gIjMwLjEiCisgIDpsaWdodGVyICIgQm9T
IgorICAod2hlbiB2Yy1ib3MtbW9kZQorICAgICh1bmxlc3MgKGFuZCAoc3RyaW5ncCB2Yy1jYWNo
ZS1yb290KQorICAgICAgICAgICAgICAgICAoc3RyaW5nLW1hdGNoLXAgIi9SQ1MkIiB2Yy1jYWNo
ZS1yb290KSkKKyAgICAgIChzZXRxIHZjLWJvcy1tb2RlIG5pbCkKKyAgICAgIChlcnJvciAidmMt
Ym9zLW1vZGUgcmVxdWlyZXMgdmMtY2FjaGUtcm9vdCAoJXMpIHRvIGNvbnRhaW5zIGEgJy9SQ1Mn
IGNvbXBvbmVudCIgdmMtY2FjaGUtcm9vdCkpCisgICAgKGFkZC1ob29rICdmaXJzdC1jaGFuZ2Ut
aG9vayAjJ3ZjLWJvcy1hZGQtcmV2aXNpb24pCisgICAgKGFkZC1ob29rICdhZnRlci1zYXZlLWhv
b2sgICAjJ3ZjLWJvcy1hZGQtcmV2aXNpb24pKQorICAodW5sZXNzIHZjLWJvcy1tb2RlCisgICAg
KHJlbW92ZS1ob29rICdmaXJzdC1jaGFuZ2UtaG9vayAjJ3ZjLWJvcy1hZGQtcmV2aXNpb24pCisg
ICAgKHJlbW92ZS1ob29rICdhZnRlci1zYXZlLWhvb2sgICAjJ3ZjLWJvcy1hZGQtcmV2aXNpb24p
KSkKKworKHByb3ZpZGUgJ3ZjLWJvcykKKworOzs7IHZjLWJvcy5lbCBlbmRzIGhlcmUKZGlmZiAt
LWdpdCBhL2xpc3AvdmMvdmMtZ2l0LmVsIGIvbGlzcC92Yy92Yy1naXQuZWwKaW5kZXggMWY0NWFh
N2U5Ni4uNzQ1YTI3NTI5NCAxMDA2NDQKLS0tIGEvbGlzcC92Yy92Yy1naXQuZWwKKysrIGIvbGlz
cC92Yy92Yy1naXQuZWwKQEAgLTEwNCw4ICsxMDQsNiBAQAogCiAocmVxdWlyZSAnY2wtbGliKQog
KHJlcXVpcmUgJ3ZjLWRpc3BhdGNoZXIpCi0ocmVxdWlyZSAndHJhbnNpZW50KQotKHJlcXVpcmUg
J3ZjLXRpbWVtYWNoaW5lKQogKGV2YWwtd2hlbi1jb21waWxlCiAgIChyZXF1aXJlICdzdWJyLXgp
IDsgZm9yIHN0cmluZy10cmltLXJpZ2h0CiAgIChyZXF1aXJlICd2YykKZGlmZiAtLWdpdCBhL2xp
c3AvdmMvdmMtcmNzLmVsIGIvbGlzcC92Yy92Yy1yY3MuZWwKaW5kZXggOWY1MjU4N2Y2Zi4uOTIy
NDZjM2NlNyAxMDA2NDQKLS0tIGEvbGlzcC92Yy92Yy1yY3MuZWwKKysrIGIvbGlzcC92Yy92Yy1y
Y3MuZWwKQEAgLTg1OSw3ICs4NTksNyBAQCB2Yy1yY3MtdG0tcmV2aXNpb25zLXBhcnNlLWxvZwog
ICAgICAgICAgIChmb3J3YXJkLWxpbmUgMSkpCiAgICAgICAgIChzZXRxIG5ldy1zdWJqZWN0IChi
dWZmZXItc3Vic3RyaW5nLW5vLXByb3BlcnRpZXMgKGxpbmUtYmVnaW5uaW5nLXBvc2l0aW9uKSAo
bGluZS1lbmQtcG9zaXRpb24pKSkKICAgICAgICAgKHdoZW4gKGVxdWFsIG5ldy1zdWJqZWN0ICIq
KiogZW1wdHkgbG9nIG1lc3NhZ2UgKioqIikKLSAgICAgICAgICAoc2V0cSBuZXctc3ViamVjdCAi
IikpCisgICAgICAgICAgKHNldHEgbmV3LXN1YmplY3QgbmlsKSkKICAgICAgICAgKHVubGVzcyAo
ZXF1YWwgc3ViamVjdCBuZXctc3ViamVjdCkKICAgICAgICAgICAoc2V0cSBzdWJqZWN0IG5ldy1z
dWJqZWN0KSkKIAkocHVzaCAobGlzdCByZXZpc2lvbiBkYXRlIHN1YmplY3QgYXV0aG9yIGZpbGUp
IHJldmlzaW9uLWluZm9zKSkpCmRpZmYgLS1naXQgYS9saXNwL3ZjL3ZjLXRpbWVtYWNoaW5lLmVs
IGIvbGlzcC92Yy92Yy10aW1lbWFjaGluZS5lbAppbmRleCBhYzNiOTM2MzM0Li40ZWQ3YTJiOGIz
IDEwMDY0NAotLS0gYS9saXNwL3ZjL3ZjLXRpbWVtYWNoaW5lLmVsCisrKyBiL2xpc3AvdmMvdmMt
dGltZW1hY2hpbmUuZWwKQEAgLTU4LDYgKzU4LDggQEAKIAogOzs7IENvZGU6CiAKKyhkZWNsYXJl
LWZ1bmN0aW9uIHZjLWJvcy10bS1yZXZpc2lvbnMgICJ2Yy1ib3MiIChhYnMtZmlsZSkpCisKIChy
ZXF1aXJlICd2YykKIAogKGRlZmdyb3VwIHZjLXRpbWVtYWNoaW5lIG5pbApAQCAtMTU1LDcgKzE1
Nyw3IEBAIHZjLXRtLS10aW1lLW1hY2hpbmUKIAogICAgICAgKGxldCogKChwYXJlbnQgdmMtcGFy
ZW50LWJ1ZmZlcikKICAgICAgICAgICAgICAoYWJzLWZpbGUgKGJ1ZmZlci1maWxlLW5hbWUpKQot
ICAgICAgICAgICAgIChiYWNrZW5kICAodmMtYmFja2VuZCBhYnMtZmlsZSkpCisgICAgICAgICAg
ICAgKGJhY2tlbmQgIChpZiB2Yy1mb3JjZS1ib3MgJ2JvcyAodmMtYmFja2VuZCBhYnMtZmlsZSkp
KQogICAgICAgICAgICAgICh3b3JrLXJldiAodmMtd29ya2luZy1yZXZpc2lvbiBhYnMtZmlsZSkp
CiAgICAgICAgICAgICAgKHRtYnVmIHZjLS10aW1lLW1hY2hpbmUpKQogCkBAIC0xODgsNyArMTkw
LDEwIEBAIHZjLXRtLS10aW1lLW1hY2hpbmUKICAgICAgICAgICAgICAgICAgICh3aXRoLXRlbXAt
YnVmZmVyCiAgICAgICAgICAgICAgICAgICAgIChwcm9nMgogICAgICAgICAgICAgICAgICAgICAg
ICAgKG1lc3NhZ2UgIkVudW1lcmF0aW5nIHJldmlzaW9ucy4uLiIpCi0gICAgICAgICAgICAgICAg
ICAgICAgICAobGV0KiAoKHZlYyAoY2wtY29lcmNlICh2Yy1jYWxsLWJhY2tlbmQgYmFja2VuZCAn
dG0tcmV2aXNpb25zIGFicy1maWxlKSAndmVjdG9yKSkKKyAgICAgICAgICAgICAgICAgICAgICAg
IChsZXQqICgodmVjIChjbC1jb2VyY2UgKGlmIChlcSBiYWNrZW5kICdib3MpCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2Yy1ib3MtdG0tcmV2aXNpb25zIGFicy1m
aWxlKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZjLWNhbGwtYmFj
a2VuZCBiYWNrZW5kICd0bS1yZXZpc2lvbnMgYWJzLWZpbGUpKQorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICd2ZWN0b3IpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIChicmFuY2ggKG5yZXZlcnNlIHZlYykpKQogICAgICAgICAgICAgICAgICAgICAgICAgICBi
cmFuY2gpCiAgICAgICAgICAgICAgICAgICAgICAgKG1lc3NhZ2UgIkVudW1lcmF0aW5nIHJldmlz
aW9ucy4uLmRvbmUiKSkpKSkpCkBAIC0xOTcsMTEgKzIwMiwxNCBAQCB2Yy10bS0tdGltZS1tYWNo
aW5lCiAgICAgICAgIHRtYnVmKSkpKQogCiA7OzsjIyNhdXRvbG9hZAotKGRlZnVuIHZjLXRtLXJl
dmlzaW9uLWhlYWQgKCkKLSAgIlNob3cgd29yayBmaWxlJ3MgY3VycmVudCByZXZpc2lvbiBvbiBj
aGVja2VkLW91dCBicmFuY2guIgotICAoaW50ZXJhY3RpdmUpCi0gICh3aXRoLWN1cnJlbnQtYnVm
ZmVyICh2Yy10bS0tdGltZS1tYWNoaW5lKQotICAgICh2Yy10bS0tc3dpdGNoLXRvLXJldmlzaW9u
IDEpKSkKKyhkZWZ1biB2Yy10bS1yZXZpc2lvbi1oZWFkICgmb3B0aW9uYWwgYm9zKQorICAiU2hv
dyB3b3JrIGZpbGUncyBjdXJyZW50IHJldmlzaW9uIG9uIGNoZWNrZWQtb3V0IGJyYW5jaC4KK1dp
dGggYSBwcmVmaXggYXJndW1lbnQsIGRpc3JlZ2FyZCBhbnkgcmVnaXN0cmF0aW9uIHVuZGVyIGFu
eQorb3RoZXIgVkNTIGFuZCBzaG93IHZjLWJvcyBiYWNrdXAtb24tc2F2ZSByZXZpc2lvbnMuIgor
ICAoaW50ZXJhY3RpdmUgIlAiKQorICAobGV0ICgodmMtZm9yY2UtYm9zIGJvcykpCisgICAgKHdp
dGgtY3VycmVudC1idWZmZXIgKHZjLXRtLS10aW1lLW1hY2hpbmUpCisgICAgICAodmMtdG0tLXN3
aXRjaC10by1yZXZpc2lvbiAxKSkpKQogCiAoZGVmdW4gdmMtdG0tcmV2aXNpb24tbmV4dCAoKQog
ICAiU2hvdyB3b3JrIGZpbGUncyBuZXh0IHJldmlzaW9uIG9uIGNoZWNrZWQtb3V0IGJyYW5jaC4i
CkBAIC0zMDEsMTMgKzMwOSwxNyBAQCB2Yy1kZWZhdWx0LXRtLW1hcC1saW5lCiAKIChkZWZ1biB2
Yy10bS0tc2hvdy1lY2hvLWFyZWEtZGV0YWlscyAocmV2aXNpb24taW5mbykKICAgIlNob3cgZGV0
YWlscyBmb3IgUkVWSVNJT04tSU5GTyBpbiBlY2hvLWFyZWEuIgotICAobGV0KiAoKGRhdGUgKG50
aCAxIHJldmlzaW9uLWluZm8pKQotICAgICAgICAgKGF1dGhvciAoaWYgdmMtdG0tc2hvdy1hdXRo
b3IgKGNvbmNhdCAiIHwgIiAobnRoIDMgcmV2aXNpb24taW5mbykpICIiKSkKLSAgICAgICAgIChz
aGEtb3Itc3ViamVjdCAoaWYgKGVxIHZjLXRtLWVjaG8tYXJlYS1kZXRhaWwgJ2NvbW1pdCkgKGNh
ciByZXZpc2lvbi1pbmZvKSAobnRoIDIgcmV2aXNpb24taW5mbykpKSkKLSAgICAobWVzc2FnZSAi
JXMlczogJXMiCi0gICAgICAgICAgICAgZGF0ZQotICAgICAgICAgICAgIChwcm9wZXJ0aXplIGF1
dGhvciAnZmFjZSAndmMtdG0tZWNoby1hcmVhLWF1dGhvci1mYWNlKQotICAgICAgICAgICAgIChw
cm9wZXJ0aXplIHNoYS1vci1zdWJqZWN0ICdmYWNlICd2Yy10bS1lY2hvLWFyZWEtZGV0YWlsLWZh
Y2UpKSkpCisgIChsZXQgKChkYXRlICAobnRoIDEgcmV2aXNpb24taW5mbykpKQorICAgIChpZiAo
ZXEgdG1idWYtLWJhY2tlbmQgJ2JvcykKKyAgICAgICAgKG1lc3NhZ2UgIiVzIiBkYXRlKQorICAg
ICAgKGxldCogKChhdXRob3IgKGlmIHZjLXRtLWVjaG8tYXJlYS1hdXRob3IgKGNvbmNhdCAiIHwg
IiAobnRoIDMgcmV2aXNpb24taW5mbykpICIiKSkKKyAgICAgICAgICAgICAoc2hhLW9yLXN1Ympl
Y3QgKGlmIChlcSB2Yy10bS1lY2hvLWFyZWEtZGV0YWlsICdjb21taXQpCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAoY2FyIHJldmlzaW9uLWluZm8pCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgKG50aCAyIHJldmlzaW9uLWluZm8pKSkpCisgICAgICAgIChtZXNzYWdl
ICIlcyVzOiAlcyIKKyAgICAgICAgICAgICAgICAgZGF0ZQorICAgICAgICAgICAgICAgICAocHJv
cGVydGl6ZSBhdXRob3IgJ2ZhY2UgJ3ZjLXRtLWVjaG8tYXJlYS1hdXRob3ItZmFjZSkKKyAgICAg
ICAgICAgICAgICAgKHByb3BlcnRpemUgc2hhLW9yLXN1YmplY3QgJ2ZhY2UgJ3ZjLXRtLWVjaG8t
YXJlYS1kZXRhaWwtZmFjZSkpKSkpKQogCiAoZGVmdW4gdmMtdG0tZm9ybWF0LWRhdGUgKGRhdGUp
CiAgICJSZXR1cm4gZGF0ZSBmb3JtYXR0ZWQgcGVyIHRoZSB1c2VyJ3MgdmMtdG0tZGF0ZS1mb3Jt
YXQuIgpkaWZmIC0tZ2l0IGEvbGlzcC92Yy92Yy5lbCBiL2xpc3AvdmMvdmMuZWwKaW5kZXggODhl
YzMzNzZjNC4uN2U5ODUyMzEyZiAxMDA2NDQKLS0tIGEvbGlzcC92Yy92Yy5lbAorKysgYi9saXNw
L3ZjL3ZjLmVsCkBAIC04MDksNiArODA5LDcgQEAKIAogKGRlY2xhcmUtZnVuY3Rpb24gZGlmZi1z
ZXR1cC13aGl0ZXNwYWNlICJkaWZmLW1vZGUiICgpKQogKGRlY2xhcmUtZnVuY3Rpb24gZGlmZi1z
ZXR1cC1idWZmZXItdHlwZSAiZGlmZi1tb2RlIiAoKSkKKyhkZWNsYXJlLWZ1bmN0aW9uIHZjLWJv
cy1maW5kLXJldmlzaW9uICJ2Yy1ib3MiIChhYnMtZmlsZSByZXYgYnVmZmVyKSkKIAogKGV2YWwt
d2hlbi1jb21waWxlCiAgIChyZXF1aXJlICdkaXJlZCkpCkBAIC05NjEsNiArOTYyLDkgQEAgdmMt
Y29tbWVudC1hbGlzdAogKGRlZmN1c3RvbSB2Yy1maW5kLXJldmlzaW9uLWNhY2hlIG5pbAogICAi
V2hlbiBub24tbmlsLCBgdmMtZmluZC1yZXZpc2lvbicgY2FjaGVzIGEgbG9jYWwgY29weSBvZiBy
ZXR1cm5lZCByZXZpc2lvbi4iCiAgIDp0eXBlICdib29sZWFuCisgIDpncm91cCAnYmFja3VwCisg
IDpncm91cCAndmMtYm9zCisgIDpncm91cCAndmMtdGltZW1hY2hpbmUKICAgOnZlcnNpb24gIjMw
LjEiKQogCiAoZGVmY3VzdG9tIHZjLWNhY2hlLXJvb3QgbmlsCkBAIC05NzIsOCArOTc2LDEzIEBA
IHZjLWNhY2hlLXJvb3QKIAogVG8gdXNlIGB2Yy1ib3MtbW9kZScsIGB2Yy1jYWNoZS1yb290JyBt
dXN0IGluY2x1ZGUgYSAvUkNTIGNvbXBvbmVudC4iCiAgIDp0eXBlICdzdHJpbmcKKyAgOmdyb3Vw
ICdiYWNrdXAKKyAgOmdyb3VwICd2Yy1ib3MKKyAgOmdyb3VwICd2Yy10aW1lbWFjaGluZQogICA6
dmVyc2lvbiAiMzAuMSIpCiAKKyhkZWZ2YXIgdmMtZm9yY2UtYm9zIG5pbAorICAiTm9uLW5pbCBp
bmRpY2F0ZXMgcmV0cmlldmluZyB2Yy1ib3MgcmV2aXNpb25zLiIpCiAMCiA7OyBGaWxlIHByb3Bl
cnR5IGNhY2hpbmcKIApAQCAtMTIzNCwxMSArMTI0MywxOCBAQCB2Yy1lbnN1cmUtdmMtYnVmZmVy
CiAJCTs7IGN1cnJlbnQgYnVmZmVyIGFyZSB0aGUgc2FtZSBidWZmZXIuCiAgCQkobm90IChlcSB2
Yy1wYXJlbnQtYnVmZmVyIChjdXJyZW50LWJ1ZmZlcikpKSkKICAgICAgIChzZXQtYnVmZmVyIHZj
LXBhcmVudC1idWZmZXIpKSkpCi0gIChjb25kCi0gICAoKG5vdCBidWZmZXItZmlsZS1uYW1lKQot
ICAgIChlcnJvciAiQnVmZmVyICclcycgaXMgbm90IGFzc29jaWF0ZWQgd2l0aCBhIGZpbGUiIChi
dWZmZXItbmFtZSkpKQotICAgKCh1bmxlc3MgKHZjLWJhY2tlbmQgYnVmZmVyLWZpbGUtbmFtZSkK
LSAgICAgIChlcnJvciAiRmlsZSAnJXMnIGlzIG5vdCB1bmRlciB2ZXJzaW9uIGNvbnRyb2wiIGJ1
ZmZlci1maWxlLW5hbWUpKSkpKQorICAobGV0ICgoYm9zLWZpbGUgKGNvbmNhdCB2Yy1jYWNoZS1y
b290IGJ1ZmZlci1maWxlLW5hbWUpKSkKKyAgICAoY29uZAorICAgICAoKG5vdCBidWZmZXItZmls
ZS1uYW1lKQorICAgICAgKGVycm9yICJCdWZmZXIgJyVzJyBpcyBub3QgYXNzb2NpYXRlZCB3aXRo
IGEgZmlsZSIgKGJ1ZmZlci1uYW1lKSkpCisgICAgICh2Yy1mb3JjZS1ib3MKKyAgICAgICh1bmxl
c3MgKGZpbGUtZXhpc3RzLXAgYm9zLWZpbGUpCisgICAgICAgIChlcnJvciAiRmlsZSAnJXMnIGhh
cyBubyBiYWNrdXAtb24tc2F2ZSByZXZpc2lvbnMiIGJ1ZmZlci1maWxlLW5hbWUpKSkKKyAgICAg
KCh1bmxlc3MgKHZjLWJhY2tlbmQgYnVmZmVyLWZpbGUtbmFtZSkKKyAgICAgICAgKGVycm9yICJG
aWxlICclcycgaXMgbm90IHVuZGVyIHZlcnNpb24gY29udHJvbCVzIgorICAgICAgICAgICAgICAg
YnVmZmVyLWZpbGUtbmFtZQorICAgICAgICAgICAgICAgKHdoZW4gKGZpbGUtZXhpc3RzLXAgYm9z
LWZpbGUpCisgICAgICAgICAgICAgICAgICIgYnV0IGJhY2t1cHMgZnJvbSBzYXZlcyBhcmUgYXZh
aWxhYmxlIikpKSkpKSkKIAogOzs7IFN1cHBvcnQgZm9yIHRoZSBDLXggdiB2IGNvbW1hbmQuCiA7
OyBUaGlzIGlzIHdoZXJlIGFsbCB0aGUgc2luZ2xlLWZpbGUtb3JpZW50ZWQgY29kZSBmcm9tIGJl
Zm9yZSB0aGUgZmlsZXNldApAQCAtMjM4OSw2ICsyNDA1LDggQEAgdmMtZmluZC1yZXZpc2lvbgog
ICAgICAgICAgICAgIDs7IEEgY2FjaGVkIGZpbGUgaXMgdmlhYmxlIElGRiBpdCBpcyBub3Qgd3Jp
dGFibGUuCiAgICAgICAgICAgICAgKChhbmQgKGZpbGUtZXhpc3RzLXAgc2F2ZS1maWxlKSAobm90
IChmaWxlLXdyaXRhYmxlLXAgc2F2ZS1maWxlKSkpCiAgICAgICAgICAgICAgIChpbnNlcnQtZmls
ZS1jb250ZW50cyBzYXZlLWZpbGUgdCkpCisgICAgICAgICAgICAgKChlcSBiYWNrZW5kICdib3Mp
CisgICAgICAgICAgICAgICh2Yy1ib3MtZmluZC1yZXZpc2lvbiBmaWxlIHJldmlzaW9uIHJldmJ1
ZikpCiAgICAgICAgICAgICAgKGJhY2tlbmQKICAgICAgICAgICAgICAgKHZjLWNhbGwtYmFja2Vu
ZCBiYWNrZW5kICdmaW5kLXJldmlzaW9uIGZpbGUgcmV2aXNpb24gcmV2YnVmKSkKICAgICAgICAg
ICAgICAodAotLSAKMi4zNy4yCgo=
--0000000000002ddb5005f3224a44
Content-Type: text/x-patch; charset="UTF-8"; name="0000-cover-letter.patch"
Content-Disposition: attachment; filename="0000-cover-letter.patch"
Content-Transfer-Encoding: base64
Content-ID: <f_ldciswd33>
X-Attachment-Id: f_ldciswd33

RnJvbSA3N2FiMDZjZjllMmJkM2RiZTg3OGRmNWJiMDdlYWRiYTVkYWRkYzQ3IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiAiSm9obiBTLiBZYXRlcywgSnIiIDxqb2huQHlhdGVzLXNoZWV0
cy5vcmc+CkRhdGU6IFdlZCwgMjUgSmFuIDIwMjMgMjE6MTQ6MjcgLTA1MDAKU3ViamVjdDogW1BB
VENIIDAvM10gKioqIFNVQkpFQ1QgSEVSRSAqKioKTUlNRS1WZXJzaW9uOiAxLjAKQ29udGVudC1U
eXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PVVURi04CkNvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6
IDhiaXQKClRoaXMgaXMgYSBzZXJpZXMgb2YgdGhyZWUgYmlzZWN0YWJsZSAoSSBob3BlIDotKSBw
YXRjaGVzIHRoYXQgY3VsbWluYXRlCmluIHN1cHBvcnQgb2YgYSBuZXcgRW1hY3MgYmFja3VwIHNj
aGVtZToKCiogW1BBVENIIDEvM10gUmVmYWN0b3IgYW5kIGRvY3VtZW50IHZjLWZpbmQtcmV2aXNp
b24gY2FjaGluZwoqIFtQQVRDSCAyLzNdIEludHJvZHVjZSBWQyB0aW1lbWFjaGluZSBjYXBhYmls
aXR5CiogW1BBVENIIDMvM10gSW50cm9kdWNlIHZjLWJvczogYmFja3VwIG9uIHNhdmUgKHRvIGFu
IFJDUyBmaWxlKQoKVGhpcyBCYWNrdXAtT24tU2F2ZSBzY2hlbWUgZXhwbG9pdHMgYSBmaWxlIHN5
c3RlbSBtaXJyb3Igc2NoZW1lCmludHJvZHVjZWQgaW4gdGhlIGZpcnN0IHBhdGNoLiAgQnkgZXhw
bG9pdGluZyBhIGxpdHRsZSBrbm93biBhc3BlY3QKb2YgUkNTJ3MgYWxnb3JpdGhtIGZvciBsb2Nh
dGluZyBhIG1hc3RlciBmaWxlLCBiYWNrdXBzIGFyZSBzdG9yZWQKY29tcGxldGVseSByZW1vdmVk
IGZyb20gdGhlIHdvcmsgZmlsZSAoaS5lLiBubyBsb2NhbCBSQ1MgZGlyZWN0b3JpZXMpCmFuZCB1
bmRlciBleGFjdGx5IHRoZSBzYW1lIGZpbGVuYW1lIChpLmUuIG5vICcsdicgc3VmZml4IG9yIHNp
bWlsYXIpLgoKQWNjZXNzaW5nIGJhY2tlZC11cHMgZXhwbG9pdHMgYSBuZXcgdmMtdGltZW1hY2hp
bmUgY2FwYWJpbGl0eSwKaW50cm9kdWNlZCBpbiB0aGUgc2Vjb25kIHBhdGNoLiAgQm90aCB0aGUg
ZGVzaWduIGFuZCBjb2RlIG93ZSBtdWNoCnRvIFBldGVyIFN0aWVybnN0csO2bSdzIG9yaWdpbmFs
IGdpdC10aW1lbWFjaGluZS5lbC4gIFRvIHNpZGVzdGVwIGFueQpjb3B5cmlnaHQgaXNzdWVzLCBQ
ZXRlciBoYXMgZ3JhY2lvdXNseSBhc3NpZ25lZCBnaXQtdGltZW1hY2hpbmUuZWwncwpjb3B5cmln
aHQgdG8gdGhlIEZTRi4gIFdpdGggdGhlIHN1Ym1pc3Npb24gdGltZW1hY2hpbmUgZnVuY3Rpb25h
bGl0eQppcyBhdmFpbGFibGUgaW4gYm90aCB2Yy1naXQgYW5kIHZjLXJjcy4KClRoaXMgYmFja3Vw
IHNjaGVtZSB3b3JrcyBlcXVhbHkgd2VsbCB3aXRoIGZpbGVzIGFscmVhZHkgdW5kZXIgc29tZQpW
Q1MgYXMgd2VsbCBhcyB3aXRoIGZpbGVzIHRoYXQgYXJlIG5vdCBjdXJyZW50bHkgdmVyc2lvbiBj
b250cm9sbGVkLgoKRm9yIG1lIChwcmltYXJpbHkgYSBDKysgcHJvZ3JhbW1lcikgdGhpcyBpczoK
ICAqIE15IGZpcnN0IHNpZ25pZmljYW50IGJpdCBvZiBlbGlzcAogICogTXkgZmlyc3QgZXhwb3N1
cmUgdG8gdGhlIFZDIGNvZGViYXNlCiAgKiBNeSBmaXJzdCBFbWFjcyAvIEZTRiBzdWJtaXNzaW9u
CgpJIHdlbGNvbWUgYWxsIG5hdHVyZSBvZiBmZWVkYmFjazoKICAqIENvZGUgY3JpdGljaXNtCiAg
KiBWaW9sYXRpb25zIG9mIHBlcnRpbmVudCBzdGFuZGFyZHMKICAqIEJ1ZyByZXBvcnRzCiAgKiBT
dWdnZXN0ZWQgaW1wcm92ZW1lbnQKICAqIC4gLiAuCgovam9obgoKSm9obiBTLiBZYXRlcywgSnIg
KDMpOgogIFJlZmFjdG9yIGFuZCBkb2N1bWVudCB2Yy1maW5kLXJldmlzaW9uIGNhY2hpbmcKICBJ
bnRyb2R1Y2UgVkMgdGltZW1hY2hpbmUgY2FwYWJpbGl0eQogIEludHJvZHVjZSB2Yy1ib3M6IGJh
Y2t1cCBvbiBzYXZlICh0byBhbiBSQ1MgZmlsZSkKCiBsaXNwL3ZjL3ZjLWJvcy5lbCAgICAgICAg
IHwgMjA3ICsrKysrKysrKysrKysrKysrKwogbGlzcC92Yy92Yy1naXQuZWwgICAgICAgICB8ICA4
OSArKysrKysrLQogbGlzcC92Yy92Yy1ob29rcy5lbCAgICAgICB8ICAxMCArLQogbGlzcC92Yy92
Yy1yY3MuZWwgICAgICAgICB8ICA1MCArKysrKwogbGlzcC92Yy92Yy10aW1lbWFjaGluZS5lbCB8
IDQzOCArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwogbGlzcC92Yy92Yy5l
bCAgICAgICAgICAgICB8IDI5MiArKysrKysrKysrKysrKysrLS0tLS0tLS0tCiA2IGZpbGVzIGNo
YW5nZWQsIDk4NSBpbnNlcnRpb25zKCspLCAxMDEgZGVsZXRpb25zKC0pCiBjcmVhdGUgbW9kZSAx
MDA2NDQgbGlzcC92Yy92Yy1ib3MuZWwKIGNyZWF0ZSBtb2RlIDEwMDY0NCBsaXNwL3ZjL3ZjLXRp
bWVtYWNoaW5lLmVsCgotLSAKMi4zNy4yCgo=
--0000000000002ddb5005f3224a44
Content-Type: text/x-patch; charset="US-ASCII"; 
	name="0001-Refactor-and-document-vc-find-revision-caching.patch"
Content-Disposition: attachment; 
	filename="0001-Refactor-and-document-vc-find-revision-caching.patch"
Content-Transfer-Encoding: base64
Content-ID: <f_ldciswcw2>
X-Attachment-Id: f_ldciswcw2

RnJvbSA3OGNlZmIzY2I3OGZhZjhiZTM4N2Q0MzE5OTQyMDc4Njk5ZWJjM2U5IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiAiSm9obiBTLiBZYXRlcywgSnIiIDxqb2huQHlhdGVzLXNoZWV0
cy5vcmc+CkRhdGU6IE1vbiwgMjYgRGVjIDIwMjIgMTU6NTE6MDMgLTA1MDAKU3ViamVjdDogW1BB
VENIIDEvM10gUmVmYWN0b3IgYW5kIGRvY3VtZW50IHZjLWZpbmQtcmV2aXNpb24gY2FjaGluZwoK
UHJldmlvdXNseSB0aGVyZSBleGlzdGVkIHR3byBoZWxwZXIgZnVuY3Rpb25zIGZvciB2Yy0tcmV2
aXNpb24tb3RoZXItd2luZG93OgoKKiB2Yy0tcmV2aXNpb24tb3RoZXItd2luZG93LXNhdmUKKiB2
Yy0tcmV2aXNpb24tb3RoZXItd2luZG93LW5vLXNhdmUKClRoZSBleHBlY3RhdGlvbiBzZWVtcyB0
byBoYXZlIGJlZW4gdGhhdCB3aGVuIG1hdGVyaWFsaXppbmcgYSByZXZpc2lvbiBpcwpkZWVtZWQg
Y29zdGx5IChzbG93IGJhY2tlbmQ/IHJlbW90ZT8gLi4uKSBpdCBzaG91bGQgYmUgc2F2ZWQuICBJ
IGJlbGlldmUKdGhhdCwgZXZlbiB0aG91Z2ggdGhlIHdvcmQgJ2NhY2hlJyBpcyBuZXZlciB1c2Vk
LCB0aGlzIHdhcyBpbnRlbmRlZCB0bwpiZSBhIGNhY2hpbmcgbWVjaGFuaXNtLiAgVGhhdCBzYWlk
LCB0aGUgbG9naWMgcHJvdmlkZWQgb25seSBhIHNpbmdsZQpzYXZlL25vLXNhdmUgZ2xvYmFsIHRv
Z2dsZS4gIEFzcGVjdHMgb2YgdGhpcyBtZWNoYW5pc20gd2VyZSBkaXNjdXNzZWQKaW4gdGhpcyBl
bWFpbCB0aHJlYWQ6CgogIGh0dHBzOi8vbGlzdHMuZ251Lm9yZy9hcmNoaXZlL2h0bWwvZW1hY3Mt
ZGV2ZWwvMjAyMi0xMC9tc2cwMTc5NC5odG1sCgpJIGhhdmUgdHJpZWQgdG8gYWRkcmVzcyBzb21l
IG9mIHRoZSBjb25jZXJucyByYWlzZWQgdGhlcmVpbiBhbmQgdG8KcHJvdmlkZSBzb21lIGNsZWFy
ZXIgYWJzdHJhY3Rpb25zOgoKKiBXaGVuIGEgcmV2aXNpb24gZ2V0cyBzYXZlZCBpdCBpcyBkZWVt
ZWQgYSBjYWNoZS4gIFRodXMgaXQgaXMgaW1wZXJhdGl2ZQogIHRoYXQgdGhlIGNhY2hlZCByZXZp
c2lvbiBiZSBwcm90ZWN0ZWQgYW5kIGFkZXF1YXRlbHkgdmFsaWRhdGVkIGJlZm9yZQogIGJlaW5n
IHJldXNlZC4KCiogQSBjYWNoZWQgcmV2aXNpb24gbWF5IGJlIHNhdmVkIGFzIGEgc2libGluZyBv
ZiB0aGUgZmlsZSB0aGF0IHRyaWdnZXJlZCBpdHMKICBtYXRlcmlhbGl6YXRpb24gb3IgaW4gbWF5
IGJlIHNhdmVkIGluIGEgbWlycm9yIGRpcmVjdG9yeSB0cmVlIHJvb3RlZCBhdAogIGB2Yy1jYWNo
ZS1yb290Jy4gIFRoZSBsYXR0ZXIgY2hvaWNlIGF2b2lkcyBjbHV0dGVyaW5nIHdvcmsgdHJlZXMg
d2l0aCB3aXRoCiAgaGlzdG9yaWMgcmV2aXNpb25zIGFuZCBlbmFibGVzIGNhY2hpbmcgYWNyb3Nz
IHdvcmsgdHJlZXMuICBgdmMtY2FjaGUtcm9vdCcKICB3aWxsIGFsc28gcHJvdmlkZSBhIGxvY2F0
aW9uIGZvciB0aGUgZm9ydGhjb21pbmcgdmMtYm9zJ3MgYmFja3Vwcy4KCiogSSBoYXZlIGRlZmlu
ZWQgdGhlIGNvbmNlcHQgb2YgYSByZXZpc2lvbiBidWZmZXIuICBUaGlzIGlzIHRoZSBmb3JtCiAg
b2YgYnVmZmVyIHJldHVybmVkIGJ5IHZjJ3MgZmluZC1yZXZpc2lvbiBvcGVyYXRpb24uICBJdCBp
cyBib3VuZCB0bwogIGEgc3BlY2lmaWMgcmV2aXNpb24sIGl0IGlzIHJlYWQtb25seSBhbmQgaXQg
aGFzIGEgbmlsIGJ1ZmZlci1maWxlLW5hbWUuCiAgVGh1cyBpdCB2aXNpdHMgbm8gc2F2ZWQgbm9y
IGNhY2hlZCBmaWxlLiAgVGhlIHJhdGlvbmFsZSBpcyB0d29mb2xkOgoKICAtIEEgcmV2aXNpb24g
aXMgYSBtYXRlcmlhbGl6YXRpb24gb2YgaW1tdXRhYmxlIGhpc3RvcnkKCiAgLSBUaGUgb25seSBw
b3RlbnRpYWwgdmFsdWUgZm9yIGEgcmV2aXNpb24gYnVmZmVyJ3MgYnVmZmVyLWZpbGUtbmFtZSBp
cyBhCiAgICBjYWNoZSBmaWxlIHdoaWNoIHNob3VsZCBsaWtld2lzZSBiZSByZWdhcmRlZCBhcyBp
bW11dGFibGUuICBGdXRoZXIsIGlmCiAgICBtYXRlcmlhbGl6aW5nIHJldmlzaW9ucyBpcyBub3Qg
ZGVlbWVkIGNvc3RseSwgZXZlbiB0aGF0IGZpbGUgbWF5IG5vdAogICAgZXhpc3QuICBTbywgaW4g
dGhlIGludGVyZXN0IG9mIGNvbnNpc3RlbmN5LCByZXZpc2lvbiBidWZmZXJzIGRvIG5vdAogICAg
dmlzaXQgZmlsZXMuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CgoqIGxpc3AvdmMvdmMuZWwgKHZjLWZp
bmQtcmV2aXNpb24tbm8tc2F2ZSwgdmMtZmluZC1yZXZpc2lvbi1jYWNoZSk6ClJlbmFtZSBkZWZj
dXN0b21zIHRvIGJlIG1vcmUgZGVzY3JpcHRpdmUuCih2Yy1maW5kLXJldmlzaW9uLCB2Yy1maW5k
LXJldmlzaW9uLXNhdmUsIHZjLWZpbmQtcmV2aXNpb24tbm8tc2F2ZSk6ClJlaW1wbGVtZW50IHRo
ZSBlbnNzZW5jZSBvZiB0aGVzZSB0aHJlZSBmdW5jdGlvbiBhcyBhIHNpbmdsZQpgdmMtZmluZC1y
ZXZpc2lvbicgZnVuY3Rpb24uICBDbGFyaWZ5IHRoYXQgdGhlIHJlc3VsdCBpcyBhIHJldmlzaW9u
CmJ1ZmZlciwgdW5hdHRhY2hlZCB0byBhbnkgZmlsZS4gIFN1cHBvcnQgb3B0aW9uYWwgY2FjaGlu
ZywgZWl0aGVyCmFsb25nc2lkZSB0aGUgb3JpZ2luYWwgZmlsZSBvciB3aXRoaW4gYSBtaXJyb3Ig
ZGlyZWN0b3J5IHN0cnVjdHVyZQpiZW5lYXRoIGB2Yy1jYWNoZS1yb290Jy4KLS0tCiBsaXNwL3Zj
L3ZjLmVsIHwgMjI3ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKy0tLS0tLS0tLS0tLS0t
LS0tLS0tCiAxIGZpbGUgY2hhbmdlZCwgMTM2IGluc2VydGlvbnMoKyksIDkxIGRlbGV0aW9ucygt
KQoKZGlmZiAtLWdpdCBhL2xpc3AvdmMvdmMuZWwgYi9saXNwL3ZjL3ZjLmVsCmluZGV4IDEzMTI0
NTA5YzIuLjU2OTc3Y2JlMTYgMTAwNjQ0Ci0tLSBhL2xpc3AvdmMvdmMuZWwKKysrIGIvbGlzcC92
Yy92Yy5lbApAQCAtNjY0LDYgKzY2NCw5IEBACiAKIAogOzs7IFRvZG86Cis7OworOzsgLSBvdGhl
ciBjYWNoaW5nIGNvbnNpZGVyYXRpb25zOiBiYWNrZW5kPyByZW1vdGU/CisKIAogOzs7OyBOZXcg
UHJpbWl0aXZlczoKIDs7CkBAIC05MTcsMTAgKzkyMCwyMSBAQCB2Yy1jb21tZW50LWFsaXN0CiAJ
CSAgICAgICAoc3RyaW5nIDp0YWcgIkNvbW1lbnQgU3RhcnQiKQogCQkgICAgICAgKHN0cmluZyA6
dGFnICJDb21tZW50IEVuZCIpKSkpCiAKLShkZWZjdXN0b20gdmMtZmluZC1yZXZpc2lvbi1uby1z
YXZlIG5pbAotICAiSWYgbm9uLW5pbCwgYHZjLWZpbmQtcmV2aXNpb24nIGRvZXNuJ3Qgd3JpdGUg
dGhlIGNyZWF0ZWQgYnVmZmVyIHRvIGZpbGUuIgorKGRlZmN1c3RvbSB2Yy1maW5kLXJldmlzaW9u
LWNhY2hlIG5pbAorICAiV2hlbiBub24tbmlsLCBgdmMtZmluZC1yZXZpc2lvbicgY2FjaGVzIGEg
bG9jYWwgY29weSBvZiByZXR1cm5lZCByZXZpc2lvbi4iCiAgIDp0eXBlICdib29sZWFuCi0gIDp2
ZXJzaW9uICIyNy4xIikKKyAgOnZlcnNpb24gIjMwLjEiKQorCisoZGVmY3VzdG9tIHZjLWNhY2hl
LXJvb3QgbmlsCisgICJJZiBub24tbmlsLCB0aGUgcm9vdCBvZiBhIHRyZWUgb2YgY2FjaGVkIHJl
dmlzaW9ucyAobm8gdHJhaWxpbmcgJy8nKS4KKworV2hlbiBgdmMtZmluZC1yZXZpc2lvbi1jYWNo
ZScgaXMgbm9uLW5pbCwgaWYgYHZjLWNhY2hlLXJvb3QnIGlzIG5pbCB0aGVuIHRoZQorY2FjaGVk
IHJldmlzaW9uIHdpbGwgYmUgYSBzaWJsaW5nIG9mIGl0cyB3b3JraW5nIGZpbGUsIG90aGVyd2lz
ZSB0aGUgY2FjaGVkCityZXZpc2lvbiB3aWxsIGJlIHNhdmVkIHRvIGEgbWlycm9yIHBhdGggYmVu
ZWF0aCBgdmMtY2FjaGUtcm9vdC4nCisKK1RvIHVzZSBgdmMtYm9zLW1vZGUnLCBgdmMtY2FjaGUt
cm9vdCcgbXVzdCBpbmNsdWRlIGEgL1JDUyBjb21wb25lbnQuIgorICA6dHlwZSAnc3RyaW5nCisg
IDp2ZXJzaW9uICIzMC4xIikKIAogDAogOzsgRmlsZSBwcm9wZXJ0eSBjYWNoaW5nCkBAIC0yMjYz
LDk3ICsyMjc3LDEyOCBAQCB2Yy1yZXZpc2lvbi1vdGhlci13aW5kb3cKIAkJICAgICByZXYpKSkK
ICAgICAoc3dpdGNoLXRvLWJ1ZmZlci1vdGhlci13aW5kb3cgKHZjLWZpbmQtcmV2aXNpb24gZmls
ZSByZXZpc2lvbikpKSkKIAotKGRlZnVuIHZjLWZpbmQtcmV2aXNpb24gKGZpbGUgcmV2aXNpb24g
Jm9wdGlvbmFsIGJhY2tlbmQpCi0gICJSZWFkIFJFVklTSU9OIG9mIEZJTEUgaW50byBhIGJ1ZmZl
ciBhbmQgcmV0dXJuIHRoZSBidWZmZXIuCi1Vc2UgQkFDS0VORCBhcyB0aGUgVkMgYmFja2VuZCBp
ZiBzcGVjaWZpZWQuIgotICAoaWYgdmMtZmluZC1yZXZpc2lvbi1uby1zYXZlCi0gICAgICAodmMt
ZmluZC1yZXZpc2lvbi1uby1zYXZlIGZpbGUgcmV2aXNpb24gYmFja2VuZCkKLSAgICAodmMtZmlu
ZC1yZXZpc2lvbi1zYXZlIGZpbGUgcmV2aXNpb24gYmFja2VuZCkpKQogCi0oZGVmdW4gdmMtZmlu
ZC1yZXZpc2lvbi1zYXZlIChmaWxlIHJldmlzaW9uICZvcHRpb25hbCBiYWNrZW5kKQotICAiUmVh
ZCBSRVZJU0lPTiBvZiBGSUxFIGludG8gYSBidWZmZXIgYW5kIHJldHVybiB0aGUgYnVmZmVyLgot
U2F2ZXMgdGhlIGJ1ZmZlciB0byB0aGUgZmlsZS4iCi0gIChsZXQgKChhdXRvbWF0aWMtYmFja3Vw
ICh2Yy12ZXJzaW9uLWJhY2t1cC1maWxlLW5hbWUgZmlsZSByZXZpc2lvbikpCi0JKGZpbGVidWYg
KG9yIChnZXQtZmlsZS1idWZmZXIgZmlsZSkgKGN1cnJlbnQtYnVmZmVyKSkpCi0gICAgICAgIChm
aWxlbmFtZSAodmMtdmVyc2lvbi1iYWNrdXAtZmlsZS1uYW1lIGZpbGUgcmV2aXNpb24gJ21hbnVh
bCkpKQotICAgICh1bmxlc3MgKGZpbGUtZXhpc3RzLXAgZmlsZW5hbWUpCi0gICAgICAoaWYgKGZp
bGUtZXhpc3RzLXAgYXV0b21hdGljLWJhY2t1cCkKLSAgICAgICAgICAocmVuYW1lLWZpbGUgYXV0
b21hdGljLWJhY2t1cCBmaWxlbmFtZSBuaWwpCi0JKG1lc3NhZ2UgIkNoZWNraW5nIG91dCAlcy4u
LiIgZmlsZW5hbWUpCi0JKHdpdGgtY3VycmVudC1idWZmZXIgZmlsZWJ1ZgotCSAgKGxldCAoKGZh
aWxlZCB0KSkKLQkgICAgKHVud2luZC1wcm90ZWN0Ci0JCShsZXQgKChjb2Rpbmctc3lzdGVtLWZv
ci1yZWFkICduby1jb252ZXJzaW9uKSkKLQkJICAod2l0aC10ZW1wLWZpbGUgZmlsZW5hbWUKLQkJ
ICAgIChsZXQgKChvdXRidWYgKGN1cnJlbnQtYnVmZmVyKSkpCi0gICAgICAgICAgICAgICAgICAg
ICAgOzsgV2Ugd2lsbCByZWFkIHRoZSBiYWNrZW5kJ3Mgb3V0cHV0IHdpdGggbm8KLSAgICAgICAg
ICAgICAgICAgICAgICA7OyBjb252ZXJzaW9ucywgc28gd2Ugc2hvdWxkIGFsc28gc2F2ZSB0aGUK
LSAgICAgICAgICAgICAgICAgICAgICA7OyB0ZW1wb3JhcnkgZmlsZSB3aXRoIG5vIGVuY29kaW5n
IGNvbnZlcnNpb25zLgotICAgICAgICAgICAgICAgICAgICAgIChzZXRxIGJ1ZmZlci1maWxlLWNv
ZGluZy1zeXN0ZW0gJ25vLWNvbnZlcnNpb24pCi0JCSAgICAgIDs7IENoYW5nZSBidWZmZXIgdG8g
Z2V0IGxvY2FsIHZhbHVlIG9mCi0JCSAgICAgIDs7IHZjLWNoZWNrb3V0LXN3aXRjaGVzLgotCQkg
ICAgICAod2l0aC1jdXJyZW50LWJ1ZmZlciBmaWxlYnVmCi0JCQkoaWYgYmFja2VuZAotCQkJICAg
ICh2Yy1jYWxsLWJhY2tlbmQgYmFja2VuZCAnZmluZC1yZXZpc2lvbiBmaWxlIHJldmlzaW9uIG91
dGJ1ZikKLQkJCSAgKHZjLWNhbGwgZmluZC1yZXZpc2lvbiBmaWxlIHJldmlzaW9uIG91dGJ1Zikp
KSkpCi0JCSAgKHNldHEgZmFpbGVkIG5pbCkpCi0JICAgICAgKHdoZW4gKGFuZCBmYWlsZWQgKGZp
bGUtZXhpc3RzLXAgZmlsZW5hbWUpKQotCQkoZGVsZXRlLWZpbGUgZmlsZW5hbWUpKSkpCi0JICAo
dmMtbW9kZS1saW5lIGZpbGUpKQotCShtZXNzYWdlICJDaGVja2luZyBvdXQgJXMuLi5kb25lIiBm
aWxlbmFtZSkpKQotICAgIChsZXQgKChyZXN1bHQtYnVmIChmaW5kLWZpbGUtbm9zZWxlY3QgZmls
ZW5hbWUpKSkKLSAgICAgICh3aXRoLWN1cnJlbnQtYnVmZmVyIHJlc3VsdC1idWYKLQk7OyBTZXQg
dGhlIHBhcmVudCBidWZmZXIgc28gdGhhdCB0aGluZ3MgbGlrZQotCTs7IEMteCB2IGcsIEMteCB2
IGwsIC4uLiBldGMgd29yay4KLSAgICAgICAgKHNldHEtbG9jYWwgdmMtcGFyZW50LWJ1ZmZlciBm
aWxlYnVmKSkKLSAgICAgIHJlc3VsdC1idWYpKSkKKyhkZWZ2YXItbG9jYWwgdmMtdG0tLXJldmlz
aW9uIG5pbAorICAiQ29udmV5IGEgcmV2aXNpb24gYnVmZmVyJ3MgVkNTIHNwZWNpZmljIHVuaXF1
ZSByZXZpc2lvbiBpZCB0byBWQy1UTS4iICkKKyhwdXQgJ3ZjLXRtLS1yZXZpc2lvbiAncGVybWFu
ZW50LWxvY2FsIHQpCiAKLShkZWZ1biB2Yy1maW5kLXJldmlzaW9uLW5vLXNhdmUgKGZpbGUgcmV2
aXNpb24gJm9wdGlvbmFsIGJhY2tlbmQgYnVmZmVyKQotICAiUmVhZCBSRVZJU0lPTiBvZiBGSUxF
IGludG8gQlVGRkVSIGFuZCByZXR1cm4gdGhlIGJ1ZmZlci4KLUlmIEJVRkZFUiBvbWl0dGVkIG9y
IG5pbCwgdGhpcyBmdW5jdGlvbiBjcmVhdGVzIGEgbmV3IGJ1ZmZlciBhbmQgc2V0cwotYGJ1ZmZl
ci1maWxlLW5hbWUnIHRvIHRoZSBuYW1lIGNvbnN0cnVjdGVkIGZyb20gdGhlIGZpbGUgbmFtZSBh
bmQgdGhlCi1yZXZpc2lvbiBudW1iZXIuCi1Vbmxpa2UgYHZjLWZpbmQtcmV2aXNpb24tc2F2ZScs
IGRvZXNuJ3Qgc2F2ZSB0aGUgYnVmZmVyIHRvIHRoZSBmaWxlLiIKKzs7IEJlZm9yZSB0aGUgYWR2
ZW50IG9mIHZjLXRpbWVtYWNoaW5lLCB0aGUgYmVoYXZpb3Igb2YgYHZjLWZpbmQtcmV2aXNpb24n
Cis7OyB3YXMgaW1wbGllZCBpbmRpcmVjdGx5IGluIHRoZSBlbWFjcyBtYW51YWwgYXMgYWx3YXlz
IGNhY2hpbmcgYSBjb3B5Cis7OyBvZiB0aGUgcmV0dXJuZWQgcmV2aXNpb24uICBgdmMtcmV2aXNp
b24tb3RoZXItd2luZG93J3Mgd3JpdGUtdXAgd2FzOgorOzsKKzs7ICAgVGhpcyByZXRyaWV2ZXMg
dGhlIGZpbGUgdmVyc2lvbiBjb3JyZXNwb25kaW5nIHRvIHJldmlzaW9uLCBzYXZlcyBpdAorOzsg
ICB0byBmaWxlbmFtZS5+cmV2aXNpb25+LCBhbmQgdmlzaXRzIGl0IGluIGEgc2VwYXJhdGUgd2lu
ZG93LgorOzsKKzs7IEJ1dCBpZiByZXZpc2lvbnMgYXJlIGltbXV0YWJsZSBoaXN0b3J5LCB0aGVu
IHRoZXJlIGlzIG5vIHJlYXNvbiBmb3IKKzs7IGEgcmV2aXNpb24gYnVmZmVyIHRvIHZpc2l0IGEg
bXV0YWJsZSBmaWxlLiAgU2F2aW5nIGEgZmlsZSBjb3VsZCBiZQorOzsganVzdGlmaWVkIGFzIGEg
Zm9ybSBvZiBjYWNoaW5nLiAgQnV0LCBpZiBhIGNhY2hlIGlzIHRvIGJlIHRydXN0ZWQsCis7OyBp
dCBtdXN0IG5vdCBiZSBwb3NzaWJsZSBmb3IgYSB1c2VyIHRvIGNvcnJ1cHQgaXRzIGNvbnRlbnRz
LgorOzsKKzs7IEFzIG9mIHJlbGVhc2UgMzAuMSByZXZpc2lvbiBidWZmZXIgYXJlIHJldHVybmVk
IHdpdGggYnVmZmVyLWZpbGUtbmFtZQorOzsgc2V0IHRvIG5pbCwgc2lnbmlmeWluZyB0aGF0IHJl
dmlzaW9uIGJ1ZmZlcnMgZG8gbm90IHZpc2l0IGZpbGVzLgorOzsKKzs7IFdoZXRoZXIgdG8gY2Fj
aGUgb3Igbm90IGlzIGNvbnRyb2xsZWQgYnkgYHZjLWZpbmQtcmV2aXNpb24tY2FjaGUnLgorOzsK
Kzs7IENhY2hpbmcgcmV2aXNpb25zIGFzIHNpYmxpbmdzIG9mIGEgd29ya2luZyBmaWxlIGlzIG9m
dGVuIHNlZW4gYXMKKzs7ICJjbHV0dGVyaW5nIiB0aGUgd29ya3NwYWNlLiAgYHZjLWNhY2hlLXJv
b3QnIHByb3ZpZGVzIGEgYWx0ZXJuYXRpdmUsCis7OyBhIG1pcnJvciBkaXJlY3Rvcnkgc3RydWN0
dXJlIHdoZXJlIHJldmlzaW9ucyBhcmUgY2FjaGVkLgorCisoZGVmdW4gdmMtZmluZC1yZXZpc2lv
biAoZmlsZSByZXZpc2lvbiAmb3B0aW9uYWwgYmFja2VuZCBidWZmZXIpCisgICJSZWFkIFJFVklT
SU9OIG9mIEZJTEUgaW50byBhIHJlYWQtb25seSBidWZmZXIgYW5kIHJldHVybiB0aGF0IGJ1ZmZl
ci4KK0NvbnRydWN0IHRoZSBwYXRoIHRvIGEgcG90ZW50aWFsIGNhY2hlZCBjb3B5IGZyb20gYHZj
LWZpbmQtcmV2aXNpb24tY2FjaGUnLAorRklMRSBhbmQgUkVWSVNJT04uICBJZiB0aGF0IGZpbGUg
ZXhpc3RzIGFuZCBpcyB3cml0YWJsZSB0aGVuIHJld3JpdGUgaXQKK3RvIGVuc3VyZSB0aGF0IGlm
IGFjY3VyYXRlbHkgcmVmbGVjdHMgdGhlIHJldHJpZXZlZCByZXZpc2lvbi4gIE90aGVyd2lzZSwK
K2lmIGB2Yy1maW5kLXJldmlzaW9uLWNhY2hlJyBpcyBub24tbmlsLCBzYXZlIGJ1ZmZlciB0byBp
dHMgY2FjaGUgbG9jYXRpb24uCitXaGVuIEJVRkZFUiBpcyBhYnNlbnQgb3IgZGVhZCwgY3JlYXRl
IGEgbmV3IGJ1ZmZlcjsgb3RoZXJ3aXNlIHJlcHVycG9zZQordGhlIHN1cHBsaWVkIEJVRkZFUiBi
eSBlcmFzaW5nIGl0cyBjb250ZW50cywgc2V0dGluZyBpdHMgbmFtZSBhbmQgdXBkYXRpbmcKK2l0
cyBtb2RlLiAgSW4gYWxsIGNhc2VzIGJ1ZmZlci1maWxlLW5hbWUgaXMgc2V0IHRvIG5pbCwgZW5z
dXJpbmcgdGhhdCB0aGUKK3JldHVybmVkIGJ1ZmZlciBkb2VzIG5vdCBhcHBlYXIgdG8gYmUgdmlz
aXRpbmcgYW55IGZpbGUgKGluIHBhcnRpY3VsYXIgdGhlCitmaWxlIGluIHRoZSBjYWNoZSkuIgog
ICAobGV0KiAoKGJ1ZmZlciAod2hlbiAoYnVmZmVyLWxpdmUtcCBidWZmZXIpIGJ1ZmZlcikpCi0g
ICAgICAgICAoZmlsZWJ1ZiAob3IgYnVmZmVyIChnZXQtZmlsZS1idWZmZXIgZmlsZSkgKGN1cnJl
bnQtYnVmZmVyKSkpCi0gICAgICAgICAoZmlsZW5hbWUgKHVubGVzcyBidWZmZXIgKHZjLXZlcnNp
b24tYmFja3VwLWZpbGUtbmFtZSBmaWxlIHJldmlzaW9uICdtYW51YWwpKSkpCi0gICAgKHVubGVz
cyAoYW5kIChub3QgYnVmZmVyKQotICAgICAgICAgICAgICAgICAob3IgKGdldC1maWxlLWJ1ZmZl
ciBmaWxlbmFtZSkKLSAgICAgICAgICAgICAgICAgICAgIChmaWxlLWV4aXN0cy1wIGZpbGVuYW1l
KSkpCi0gICAgICAod2l0aC1jdXJyZW50LWJ1ZmZlciBmaWxlYnVmCi0JKGxldCAoKGZhaWxlZCB0
KSkKLQkgICh1bndpbmQtcHJvdGVjdAotCSAgICAgICh3aXRoLWN1cnJlbnQtYnVmZmVyIChvciBi
dWZmZXIgKGNyZWF0ZS1maWxlLWJ1ZmZlciBmaWxlbmFtZSkpCi0gICAgICAgICAgICAgICAgKHVu
bGVzcyBidWZmZXIgKHNldHEgYnVmZmVyLWZpbGUtbmFtZSBmaWxlbmFtZSkpCi0JCShsZXQgKChv
dXRidWYgKGN1cnJlbnQtYnVmZmVyKSkpCi0JCSAgKHdpdGgtY3VycmVudC1idWZmZXIgZmlsZWJ1
ZgotCQkgICAgKGlmIGJhY2tlbmQKLQkJCSh2Yy1jYWxsLWJhY2tlbmQgYmFja2VuZCAnZmluZC1y
ZXZpc2lvbiBmaWxlIHJldmlzaW9uIG91dGJ1ZikKLQkJICAgICAgKHZjLWNhbGwgZmluZC1yZXZp
c2lvbiBmaWxlIHJldmlzaW9uIG91dGJ1ZikpKSkKLSAgICAgICAgICAgICAgICAoZGVjb2RlLWNv
ZGluZy1pbnNlcnRlZC1yZWdpb24gKHBvaW50LW1pbikgKHBvaW50LW1heCkgZmlsZSkKLSAgICAg
ICAgICAgICAgICAoYWZ0ZXItaW5zZXJ0LWZpbGUtc2V0LWNvZGluZyAoLSAocG9pbnQtbWF4KSAo
cG9pbnQtbWluKSkpCi0gICAgICAgICAgICAgICAgKGdvdG8tY2hhciAocG9pbnQtbWluKSkKLSAg
ICAgICAgICAgICAgICAoaWYgYnVmZmVyCi0gICAgICAgICAgICAgICAgICAgIDs7IEZvciBub24t
aW50ZXJhY3RpdmUsIHNraXAgYW55IHF1ZXN0aW9ucwotICAgICAgICAgICAgICAgICAgICAobGV0
ICgoZW5hYmxlLWxvY2FsLXZhcmlhYmxlcyA6c2FmZSkgOzsgdG8gZmluZCBgbW9kZTonCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgIChidWZmZXItZmlsZS1uYW1lIGZpbGUpKQotICAgICAgICAg
ICAgICAgICAgICAgIDs7IERvbid0IHJ1biBob29rcyB0aGF0IG1pZ2h0IGFzc3VtZSBidWZmZXIt
ZmlsZS1uYW1lCi0gICAgICAgICAgICAgICAgICAgICAgOzsgcmVhbGx5IGFzc29jaWF0ZXMgYnVm
ZmVyIHdpdGggYSBmaWxlIChidWcjMzkxOTApLgotICAgICAgICAgICAgICAgICAgICAgIChpZ25v
cmUtZXJyb3JzIChkZWxheS1tb2RlLWhvb2tzIChzZXQtYXV0by1tb2RlKSkpKQotICAgICAgICAg
ICAgICAgICAgKG5vcm1hbC1tb2RlKSkKLQkgICAgICAgIChzZXQtYnVmZmVyLW1vZGlmaWVkLXAg
bmlsKQotICAgICAgICAgICAgICAgIChzZXRxIGJ1ZmZlci1yZWFkLW9ubHkgdCkpCi0JCShzZXRx
IGZhaWxlZCBuaWwpCi0JICAgICh3aGVuIChhbmQgZmFpbGVkICh1bmxlc3MgYnVmZmVyIChnZXQt
ZmlsZS1idWZmZXIgZmlsZW5hbWUpKSkKLQkgICAgICAod2l0aC1jdXJyZW50LWJ1ZmZlciAoZ2V0
LWZpbGUtYnVmZmVyIGZpbGVuYW1lKQotCQkoc2V0LWJ1ZmZlci1tb2RpZmllZC1wIG5pbCkpCi0J
ICAgICAgKGtpbGwtYnVmZmVyIChnZXQtZmlsZS1idWZmZXIgZmlsZW5hbWUpKSkpKSkpCi0gICAg
KGxldCAoKHJlc3VsdC1idWYgKG9yIGJ1ZmZlcgotICAgICAgICAgICAgICAgICAgICAgICAgICAo
Z2V0LWZpbGUtYnVmZmVyIGZpbGVuYW1lKQotICAgICAgICAgICAgICAgICAgICAgICAgICAoZmlu
ZC1maWxlLW5vc2VsZWN0IGZpbGVuYW1lKSkpKQotICAgICAgKHdpdGgtY3VycmVudC1idWZmZXIg
cmVzdWx0LWJ1ZgotICAgICAgICAoc2V0cS1sb2NhbCB2Yy1wYXJlbnQtYnVmZmVyIGZpbGVidWYp
KQotICAgICAgcmVzdWx0LWJ1ZikpKQorICAgICAgICAgKHBhcmVudCAob3IgYnVmZmVyIChnZXQt
ZmlsZS1idWZmZXIgZmlsZSkgKGN1cnJlbnQtYnVmZmVyKSkpCisgICAgICAgICAocmV2ZC1maWxl
ICh2Yy12ZXJzaW9uLWJhY2t1cC1maWxlLW5hbWUgZmlsZSByZXZpc2lvbiAnbWFudWFsKSkKKyAg
ICAgICAgICh0cnVlLWRpciAoZmlsZS1uYW1lLWRpcmVjdG9yeSBmaWxlKSkKKyAgICAgICAgICh0
cnVlLW5hbWUgKGZpbGUtbmFtZS1ub25kaXJlY3RvcnkgZmlsZSkpCisgICAgICAgICAoc2F2ZS1k
aXIgKGNvbmNhdCB2Yy1jYWNoZS1yb290IHRydWUtZGlyKSkKKyAgICAgICAgIChyZXZkLW5hbWUg
KGZpbGUtbmFtZS1ub25kaXJlY3RvcnkgcmV2ZC1maWxlKSkKKyAgICAgICAgIChzYXZlLWZpbGUg
KGNvbmNhdCB2Yy1jYWNoZS1yb290IHJldmQtZmlsZSkpCisgICAgICAgICA7OyBTb21lIGhvb2tz
IGFzc3VtZSB0aGF0IGJ1ZmZlci1maWxlLW5hbWUgYXNzb2NpYXRlcyBhIGJ1ZmZlciB3aXRoCisg
ICAgICAgICA7OyBhIHRydWUgZmlsZS4gIFRoaXMgbWFwcGluZyBpcyB3aWRlbHkgYXNzdW1lZCB0
byBiZSBvbmUtdG8tb25lLgorICAgICAgICAgOzsgVG8gYXZvaWQgcnVubmluZyBhZm91bCBvZiB0
aGF0IGFzc3VtcHRpb24gdGhpcyBmaWN0aXRpb3VzIHBhdGgKKyAgICAgICAgIDs7IGlzIGV4cGVj
dGVkIHRvIGJlIHVuaXF1ZSAoYnVnIzM5MTkwKS4gIFRoaXMgcGF0aCBhbHNvIGhhcyB0aGUKKyAg
ICAgICAgIDs7IHZpcnR1ZSB0aGF0IGl0IGV4aGliaXRzIHRoZSBzYW1lIGZpbGUgdHlwZSAoZXh0
ZW5zaW9uKSBhcyBGSUxFLgorICAgICAgICAgOzsgVGhpcyBpbXByb3ZlcyBzZXR0aW5nIHRoZSBi
dWZmZXJzIG1vZGVzLgorICAgICAgICAgKHByZXRlbmQgKGNvbmNhdCB0cnVlLWRpciAiUFJFVE5F
RC8iIHRydWUtbmFtZSkpCisgICAgICAgICAocmV2YnVmIChvciBidWZmZXIgKGdldC1maWxlLWJ1
ZmZlciBzYXZlLWZpbGUpIChnZXQtYnVmZmVyLWNyZWF0ZSByZXZkLW5hbWUpKSkKKyAgICAgICAg
IChjb2Rpbmctc3lzdGVtLWZvci1yZWFkICduby1jb252ZXJzaW9uKQorICAgICAgICAgKGZhaWxl
ZCB0KSkKKworICAgICh3aXRoLWN1cnJlbnQtYnVmZmVyIHJldmJ1ZgorICAgICAgKHVud2luZC1w
cm90ZWN0CisgICAgICAgICAgKHByb2duCisgICAgICAgICAgICA7OyBQcmVwIHJldmJ1ZiBpbiBj
YXNlIGl0IGlzIGJlaW5nIHJldXNlZC4KKyAgICAgICAgICAgIChzZXRxIGJ1ZmZlci1maWxlLW5h
bWUgbmlsKSA7IENhbmNlbCBhbnkgcHJpb3IgZmlsZSB2aXNpdGF0aW9uCisgICAgICAgICAgICAo
c2V0cSB2Yy1wYXJlbnQtYnVmZmVyIG5pbCkKKyAgICAgICAgICAgIChzZXRxIHZjLXRtLS1yZXZp
c2lvbiBuaWwpCisgICAgICAgICAgICAoc2V0cSBidWZmZXItcmVhZC1vbmx5IG5pbCkKKyAgICAg
ICAgICAgIChidWZmZXItZGlzYWJsZS11bmRvKQorICAgICAgICAgICAgKGVyYXNlLWJ1ZmZlcikK
KworICAgICAgICAgICAgOzsgRmV0Y2ggdGhlIHJlcXVlc3RlZCByZXZpc2lvbi4KKyAgICAgICAg
ICAgIChtZXNzYWdlICJGZXRjaGluZyAlcy4uLiIgcmV2ZC1maWxlKQorICAgICAgICAgICAgKGNv
bmQKKyAgICAgICAgICAgICA7OyBBIGNhY2hlZCBmaWxlIGlzIHZpYWJsZSBJRkYgaXQgaXMgbm90
IHdyaXRhYmxlLgorICAgICAgICAgICAgICgoYW5kIChmaWxlLWV4aXN0cy1wIHNhdmUtZmlsZSkg
KG5vdCAoZmlsZS13cml0YWJsZS1wIHNhdmUtZmlsZSkpKQorICAgICAgICAgICAgICAoaW5zZXJ0
LWZpbGUtY29udGVudHMgc2F2ZS1maWxlIHQpKQorICAgICAgICAgICAgIChiYWNrZW5kCisgICAg
ICAgICAgICAgICh2Yy1jYWxsLWJhY2tlbmQgYmFja2VuZCAnZmluZC1yZXZpc2lvbiBmaWxlIHJl
dmlzaW9uIHJldmJ1ZikpCisgICAgICAgICAgICAgKHQKKyAgICAgICAgICAgICAgKHZjLWNhbGwg
ZmluZC1yZXZpc2lvbiBmaWxlIHJldmlzaW9uIHJldmJ1ZikpKQorICAgICAgICAgICAgKHNldHEg
YnVmZmVyLWZpbGUtbmFtZSBuaWwpCisgICAgICAgICAgICAobWVzc2FnZSAiRmV0Y2hpbmcgJXMu
Li5kb25lIiByZXZkLWZpbGUpCisKKyAgICAgICAgICAgIDs7IENhY2hlIHJldmlzaW9uIHBlciB0
aGUgdXNlcidzIChUT0RPOiBvciB0aGUgYmFja2VuZCdzKSBkZXNpcmUuCisgICAgICAgICAgICAo
d2hlbiAob3IgKGlmIChmaWxlLWV4aXN0cy1wIHNhdmUtZmlsZSkKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgKGZpbGUtd3JpdGFibGUtcCBzYXZlLWZpbGUpCisgICAgICAgICAgICAgICAgICAg
ICAgICB2Yy1maW5kLXJldmlzaW9uLWNhY2hlKSkKKyAgICAgICAgICAgICAgKG1ha2UtZGlyZWN0
b3J5IHNhdmUtZGlyIHQpCisgICAgICAgICAgICAgICh2Yy0tc2FmZS1kZWxldGUtZmlsZSBzYXZl
LWZpbGUpCisgICAgICAgICAgICAgIDs7IEJhY2tlbmQncyBvdXRwdXQgd2FzIHJlYWQgd2l0aCAn
bm8tY29udmVyc2lvbnM7IGRvIHRoZSBzYW1lIGZvciB3cml0ZQorICAgICAgICAgICAgICAoc2V0
cSBidWZmZXItZmlsZS1jb2Rpbmctc3lzdGVtICduby1jb252ZXJzaW9uKQorICAgICAgICAgICAg
ICAod3JpdGUtcmVnaW9uIG5pbCBuaWwgc2F2ZS1maWxlKQorICAgICAgICAgICAgICAoc2V0LWZp
bGUtbW9kZXMgc2F2ZS1maWxlIChsb2dhbmQgKGZpbGUtbW9kZXMgc2F2ZS1maWxlKSAjbzc1NTUp
KSkKKworICAgICAgICAgICAgOzsgU2V0dXAgcmV2YnVmJ3MgbW9kZXMgYmFzZWQgb24gaXQgY29u
dGVudHMgYW5kIHByZXRlbmQgZmlsZSBuYW1lLgorICAgICAgICAgICAgKGxldCAoKGVuYWJsZS1s
b2NhbC12YXJpYWJsZXMgOnNhZmUpCisgICAgICAgICAgICAgICAgICAoYnVmZmVyLWZpbGUtbmFt
ZSBwcmV0ZW5kKSkgOzsgdG8gZmluZCBgbW9kZTonCisgICAgICAgICAgICAgICh3aGVuIChmaWxl
LWV4aXN0cy1wIHByZXRlbmQpCisgICAgICAgICAgICAgICAgKGVycm9yICJQUkVURU5EIGZpbGUg
YWN0dWFsbHkgZXhpc3RzIikpCisgICAgICAgICAgICAgIChpZ25vcmUtZXJyb3JzIChzZXQtYXV0
by1tb2RlKSkKKyAgICAgICAgICAgICAgKHZjLS1zYWZlLWRlbGV0ZS1maWxlIHByZXRlbmQpCisg
ICAgICAgICAgICAgIDs7IHZjLXBhcmVudC1idWZmZXIgZW5hYmxlcyBDLXggdiBnLCBDLXggdiBs
LCAuLi4gZXRjLgorICAgICAgICAgICAgICAoc2V0cSB2Yy1wYXJlbnQtYnVmZmVyIHBhcmVudCkK
KyAgICAgICAgICAgICAgKHNldHEgdmMtdG0tLXJldmlzaW9uIHJldmlzaW9uKSkKKworICAgICAg
ICAgICAgOzsgSW5kaWNhdGUgc3VjY2VzZnVsIG5lZ290aWF0aW9uIG9mIHRoZSBvYnN0YWNsZSBj
b3Vyc2UuCisgICAgICAgICAgICAoc2V0cSBmYWlsZWQgbmlsKSkKKworICAgICAgICAod2hlbiBm
YWlsZWQKKyAgICAgICAgICAodmMtLXNhZmUtZGVsZXRlLWZpbGUgc2F2ZS1maWxlKQorICAgICAg
ICAgICh2Yy0tc2FmZS1kZWxldGUtZmlsZSBwcmV0ZW5kKQorICAgICAgICAgIChlcmFzZS1idWZm
ZXIpKSkKKworICAgICAgOzsgU2V0dXAgZmluYWwgcmV2YnVmIGNvbmZpZ3VyYXRpb24uCisgICAg
ICAoc2V0cSBidWZmZXItZmlsZS1uYW1lIG5pbCkKKyAgICAgIChzZXQtYnVmZmVyLW1vZGlmaWVk
LXAgbmlsKQorICAgICAgKHNldHEgYnVmZmVyLXJlYWQtb25seSB0KQorICAgICAgKGdvdG8tY2hh
ciAocG9pbnQtbWluKSkKKyAgICAgIHJldmJ1ZikpKQorCisoZGVmdW4gdmMtLXNhZmUtZGVsZXRl
LWZpbGUgKGZpbGUpCisgICJJZiBGSUxFIGV4aXN0cyBkZWxldGUgaXQsIGV2ZW4gaWYgaXRzIHBl
cm1pc3Npb25zIHNheSBpdCBpcyByZWFkb25seS4iCisgICh3aGVuIChmaWxlLWV4aXN0cy1wIGZp
bGUpCisgICAgKHNldC1maWxlLW1vZGVzIGZpbGUgKGxvZ2lvciAoZmlsZS1tb2RlcyBmaWxlKSAj
bzIyMikpCisgICAgKGRlbGV0ZS1maWxlIGZpbGUpKSkKIAogOzsgSGVhZGVyLWluc2VydGlvbiBj
b2RlCiAKLS0gCjIuMzcuMgoK
--0000000000002ddb5005f3224a44--




Acknowledgement sent to John Yates <john@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#61071; 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: Sat, 20 Jan 2024 12:30:02 UTC

GNU bug tracking system
Copyright (C) 1999 Darren O. Benham, 1997 nCipher Corporation Ltd, 1994-97 Ian Jackson.