GNU bug report logs - #50384
[PATCH] Optimise search-patch (reducing I/O)

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: guix-patches; Reported by: Maxime Devos <maximedevos@HIDDEN>; dated Sat, 4 Sep 2021 21:18:01 UTC; Maintainer for guix-patches is guix-patches@HIDDEN.

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


Received: (at 50384) by debbugs.gnu.org; 21 Sep 2021 16:55:49 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Tue Sep 21 12:55:49 2021
Received: from localhost ([127.0.0.1]:47731 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1mSj3W-00044n-62
	for submit <at> debbugs.gnu.org; Tue, 21 Sep 2021 12:55:48 -0400
Received: from eggs.gnu.org ([209.51.188.92]:36634)
 by debbugs.gnu.org with esmtp (Exim 4.84_2)
 (envelope-from <ludo@HIDDEN>) id 1mSj3T-00044U-9z
 for 50384 <at> debbugs.gnu.org; Tue, 21 Sep 2021 12:55:40 -0400
Received: from fencepost.gnu.org ([2001:470:142:3::e]:58740)
 by eggs.gnu.org with esmtp (Exim 4.90_1)
 (envelope-from <ludo@HIDDEN>)
 id 1mSj3L-0004PK-Dw; Tue, 21 Sep 2021 12:55:32 -0400
Received: from [2a01:e0a:1d:7270:af76:b9b:ca24:c465] (port=35942 helo=ribbon)
 by fencepost.gnu.org with esmtpsa
 (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1)
 (envelope-from <ludo@HIDDEN>)
 id 1mSj3J-0004Xq-Of; Tue, 21 Sep 2021 12:55:31 -0400
From: =?utf-8?Q?Ludovic_Court=C3=A8s?= <ludo@HIDDEN>
To: Maxime Devos <maximedevos@HIDDEN>
Subject: [PATCH v4] Optimise search-patch (reducing I/O)
References: <8900fa8c8eef7f72fc97adc2408be26c88de7803.camel@HIDDEN>
 <87tuj0xaja.fsf@HIDDEN>
 <0ec7f0270fcccec730808f9210f074cd5339961f.camel@HIDDEN>
 <87ee9xerac.fsf_-_@HIDDEN>
Date: Tue, 21 Sep 2021 18:55:27 +0200
In-Reply-To: <87ee9xerac.fsf_-_@HIDDEN> ("Ludovic =?utf-8?Q?Court=C3=A8s?=
 =?utf-8?Q?=22's?= message of "Thu, 09 Sep 2021 16:51:07 +0200")
Message-ID: <87r1dhj2bk.fsf_-_@HIDDEN>
User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/27.2 (gnu/linux)
MIME-Version: 1.0
Content-Type: multipart/mixed; boundary="=-=-="
X-Spam-Score: -2.3 (--)
X-Debbugs-Envelope-To: 50384
Cc: 50384 <at> debbugs.gnu.org
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -1.0 (-)

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

Hi!

I took the liberty to reopen this patch because there were good ideas
IMO.  I=E2=80=99m sorry if my many questions and lack of responsiveness cam=
e out
as a suggestion that this approach wasn=E2=80=99t good.

Ludovic Court=C3=A8s <ludo@HIDDEN> skribis:

>> +;; repeated 'stat' calls.  Allow computing the hash of the file in adva=
nce,
>> +;; to avoid having to send the file to the daemon when it is already in=
terned
>> +;; in the store.
>>  (define-record-type <local-file>
>> -  (%%local-file file absolute name recursive? select?)
>> +  (%%local-file file absolute name sha256 recursive? select?)
>>    local-file?
>>    (file       local-file-file)                    ;string
>>    (absolute   %local-file-absolute-file-name)     ;promise string
>>    (name       local-file-name)                    ;string
>> +  (sha256     local-file-sha256)                  ;sha256 bytevector | =
#f
>
> Could we store the result of =E2=80=98fixed-output-path=E2=80=99 rather t=
han the SHA256,
> while we=E2=80=99re at it?

I tried that with the patch below, roughly taking the same approach as
your patch series, but somewhat simplified, mostly so I could
experiment.

I changed just a few files to use the new =E2=80=98local-patches=E2=80=99 i=
nstead of
=E2=80=98search-patches=E2=80=99 (I thought it might make sense to introduc=
e a new
macro, to make it clear that =E2=80=98%package-module-path=E2=80=99 is not =
used at all).

The end result is that it works as intended :-), but it=E2=80=99s actually a
tiny bit slower: on a cache hit, we do 2 RPCs (add-temp-root +
valid-path?) instead of 1 (add-to-store).  The extra round-trip is more
expensive than the I/O we=E2=80=99re saving, at least on my laptop (with SS=
D; it
might be different with slower disk I/O and/or when talking to a remote
daemon, as on clusters.)

Now, this could be addressed by adding an =E2=80=98add-temp-root-if-valid=
=E2=80=99 RPC,
which would do both in one.

We can estimate the performance of that strategy by commenting out the
=E2=80=98add-temp-root*=E2=80=99 call (thus getting a single RPC) in
=E2=80=98local-file-compiler=E2=80=99: this time it=E2=80=99s slightly fast=
er, but we=E2=80=99re in the
1% range on the wall-clock time of =E2=80=98guix build pigx -d --no-grafts=
=E2=80=99:

--8<---------------cut here---------------start------------->8---
$ time GUIX_DISABLE_LOCAL_FILE_CACHE=3Dt ./pre-inst-env guix build pigx -d =
--no-grafts
/gnu/store/dqaknknlsw8a97xwjrhhd1g4jg71jqg7-pigx-0.0.3.drv

real	0m3.488s
user	0m3.718s
sys	0m0.132s
$ time GUIX_DISABLE_LOCAL_FILE_CACHE=3Dt ./pre-inst-env guix build pigx -d =
--no-grafts
/gnu/store/dqaknknlsw8a97xwjrhhd1g4jg71jqg7-pigx-0.0.3.drv

real	0m3.501s
user	0m3.722s
sys	0m0.138s
$ time ./pre-inst-env guix build pigx -d --no-grafts
/gnu/store/dqaknknlsw8a97xwjrhhd1g4jg71jqg7-pigx-0.0.3.drv

real	0m3.437s
user	0m3.622s
sys	0m0.174s
$ time ./pre-inst-env guix build pigx -d --no-grafts
/gnu/store/dqaknknlsw8a97xwjrhhd1g4jg71jqg7-pigx-0.0.3.drv

real	0m3.492s
user	0m3.708s
sys	0m0.151s
--8<---------------cut here---------------end--------------->8---

Perhaps the gains would be a bit higher if we change all the package
files to use =E2=80=98local-patches=E2=80=99, but we probably can=E2=80=99t=
 expect a lot more
anyway since that process is CPU-bound.

So I don=E2=80=99t know.  It feels like a worthy optimization, and one that=
=E2=80=99s
manageable from a maintenance viewpoint, but it buys us very little.

Thoughts?

Looking at the big picture, what I=E2=80=99d like to have is a package
derivation cache designed in such a way that =E2=80=9Cguix install foo=E2=
=80=9D wouldn=E2=80=99t
even need to load any package module on a cache hit.  That=E2=80=99d make a
noticeable difference performance-wise, that=E2=80=99s another level of
complexity=E2=80=A6  (I have a rough design in mind that we could discuss.)

Ludo=E2=80=99.


--=-=-=
Content-Type: text/x-patch; charset=utf-8
Content-Disposition: inline
Content-Transfer-Encoding: quoted-printable

diff --git a/gnu/packages.scm b/gnu/packages.scm
index ccfc83dd11..4e7045e605 100644
--- a/gnu/packages.scm
+++ b/gnu/packages.scm
@@ -1,5 +1,5 @@
 ;;; GNU Guix --- Functional package management for GNU
-;;; Copyright =C2=A9 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020 =
Ludovic Court=C3=A8s <ludo@HIDDEN>
+;;; Copyright =C2=A9 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020,=
 2021 Ludovic Court=C3=A8s <ludo@HIDDEN>
 ;;; Copyright =C2=A9 2013 Mark H Weaver <mhw@HIDDEN>
 ;;; Copyright =C2=A9 2014 Eric Bavier <bavier@HIDDEN>
 ;;; Copyright =C2=A9 2016, 2017 Alex Kost <alezost@HIDDEN>
@@ -34,6 +34,7 @@
   #:use-module (guix profiles)
   #:use-module (guix describe)
   #:use-module (guix deprecation)
+  #:use-module (guix gexp)
   #:use-module (ice-9 vlist)
   #:use-module (ice-9 match)
   #:use-module (ice-9 binary-ports)
@@ -46,6 +47,7 @@
   #:use-module (srfi srfi-39)
   #:export (search-patch
             search-patches
+            local-patches
             search-auxiliary-file
             %patch-path
             %auxiliary-files-path
@@ -101,6 +103,17 @@
 FILE-NAME found in %PATCH-PATH."
   (list (search-patch file-name) ...))
=20
+(define-syntax local-patches
+  (lambda (s)
+    (syntax-case s ()
+      ((_ files ...)
+       (let ((scoped (map (lambda (file)
+                            (string-append "patches/" file))
+                          (syntax->datum #'(files ...)))))
+         (with-syntax (((scoped ...) (datum->syntax #'x scoped)))
+           #`(list (local-file scoped #:recursive? #t)
+                   ...)))))))
+
 (define %distro-root-directory
   ;; Absolute file name of the module hierarchy.  Since (gnu packages =E2=
=80=A6) might
   ;; live in a directory different from (guix), try to get the best match.
diff --git a/gnu/packages/base.scm b/gnu/packages/base.scm
index ea2e102c15..b449b5c2b5 100644
--- a/gnu/packages/base.scm
+++ b/gnu/packages/base.scm
@@ -106,7 +106,7 @@ command-line arguments, multiple languages, and so on.")
             (sha256
              (base32
               "1yy33kiwrxrwj2nxa4fg15bvmwyghqbs8qwkdvy5phm784f7brjq"))
-            (patches (search-patches "grep-timing-sensitive-test.patch"))))
+            (patches (local-patches "grep-timing-sensitive-test.patch"))))
    (build-system gnu-build-system)
    (native-inputs `(("perl" ,perl)))             ;some of the tests requir=
e it
    (inputs `(("pcre" ,pcre)))
@@ -187,7 +187,7 @@ implementation offers several extensions over the stand=
ard utility.")
             (sha256
              (base32
               "1n7xy657ii0sa42zx6944v2m4v9qrh6sqgmw17l3nch3y43sxlyh"))
-            (patches (search-patches "tar-skip-unreliable-tests.patch"
+            (patches (local-patches "tar-skip-unreliable-tests.patch"
                                      "tar-remove-wholesparse-check.patch")=
)))
    (build-system gnu-build-system)
    ;; Note: test suite requires ~1GiB of disk space.
@@ -245,7 +245,7 @@ standard utility.")
               (sha256
                (base32
                 "1zfqy4rdcy279vwn2z1kbv19dcfw25d2aqy9nzvdkq5bjzd0nqdc"))
-              (patches (search-patches "patch-hurd-path-max.patch"))))
+              (patches (local-patches "patch-hurd-path-max.patch"))))
    (build-system gnu-build-system)
    (arguments
     ;; Work around a cross-compilation bug whereby libpatch.a would provide
@@ -298,7 +298,7 @@ interactive means to merge two files.")
             (sha256
              (base32
               "16kqz9yz98dasmj70jwf5py7jk558w96w0vgp3zf9xsqk3gzpzn5"))
-            (patches (search-patches "findutils-localstatedir.patch"
+            (patches (local-patches "findutils-localstatedir.patch"
                                      "findutils-test-rwlock-threads.patch"=
))))
    (build-system gnu-build-system)
    (arguments
@@ -335,7 +335,7 @@ used to apply commands with arbitrarily long arguments.=
")
             (sha256
              (base32
               "1yjcrh5hw70c0yn8zw55pd6j51dj90anpq8mmg649ps9g3gdhn24"))
-            (patches (search-patches "coreutils-ls.patch"))))
+            (patches (local-patches "coreutils-ls.patch"))))
    (build-system gnu-build-system)
    (inputs `(("acl"  ,acl)                        ; TODO: add SELinux
              ("gmp"  ,gmp)                        ;bignums in 'expr', yay!
@@ -450,7 +450,7 @@ standard.")
             (sha256
              (base32
               "06cfqzpqsvdnsxbysl5p2fgdgxgl9y4p7scpnrfa8z2zgkjdspz0"))
-            (patches (search-patches "make-impure-dirs.patch"))))
+            (patches (local-patches "make-impure-dirs.patch"))))
    (build-system gnu-build-system)
    (native-inputs `(("pkg-config" ,pkg-config)))  ; to detect Guile
    (inputs `(("guile" ,guile-3.0)))
@@ -518,7 +518,7 @@ change.  GNU make offers many powerful extensions over =
the standard utility.")
             (sha256
              (base32
               "1rin1f5c7wm4n3piky6xilcrpf2s0n3dd5vqq8irrxkcic3i1w49"))
-            (patches (search-patches "binutils-loongson-workaround.patch")=
)))
+            (patches (local-patches "binutils-loongson-workaround.patch"))=
))
    (build-system gnu-build-system)
=20
    ;; TODO: Add dependency on zlib + those for Gold.
@@ -722,7 +722,7 @@ the store.")
                    "use_ldconfig=3Dno"))
                 #t))
             (modules '((guix build utils)))
-            (patches (search-patches "glibc-ldd-x86_64.patch"
+            (patches (local-patches "glibc-ldd-x86_64.patch"
                                      "glibc-hidden-visibility-ldconfig.pat=
ch"
                                      "glibc-versioned-locpath.patch"
                                      "glibc-allow-kernel-2.6.32.patch"
@@ -938,7 +938,7 @@ the store.")
                     ("python" ,python-minimal)
=20
                     ,@(if (target-powerpc?)
-                        `(("powerpc64le-patch" ,@(search-patches
+                        `(("powerpc64le-patch" ,@(local-patches
                                                    "glibc-ldd-powerpc.patc=
h")))
                         '())
                     ,@(if (hurd-target?)
@@ -979,7 +979,7 @@ with the Linux kernel.")
               (sha256
                (base32
                 "1bxqpg91d02qnaz837a5kamm0f43pr1il4r9pknygywsar713i72"))
-              (patches (search-patches "glibc-ldd-x86_64.patch"
+              (patches (local-patches "glibc-ldd-x86_64.patch"
                                        "glibc-CVE-2019-19126.patch"
                                        "glibc-hidden-visibility-ldconfig.p=
atch"
                                        "glibc-versioned-locpath.patch"
@@ -997,7 +997,7 @@ with the Linux kernel.")
               (sha256
                (base32
                 "0jzh58728flfh939a8k9pi1zdyalfzlxmwra7k0rzji5gvavivpk"))
-              (patches (search-patches "glibc-ldd-x86_64.patch"
+              (patches (local-patches "glibc-ldd-x86_64.patch"
                                        "glibc-CVE-2019-7309.patch"
                                        "glibc-CVE-2019-9169.patch"
                                        "glibc-2.29-git-updates.patch"
@@ -1017,7 +1017,7 @@ with the Linux kernel.")
               (sha256
                (base32
                 "10iha5ynvdj5m62vgpgqbq4cwvc2yhyl2w9yyyjgfxmdmx8h145i"))
-              (patches (search-patches "glibc-ldd-x86_64.patch"
+              (patches (local-patches "glibc-ldd-x86_64.patch"
                                        "glibc-2.28-git-fixes.patch"
                                        "glibc-hidden-visibility-ldconfig.p=
atch"
                                        "glibc-versioned-locpath.patch"
@@ -1036,7 +1036,7 @@ with the Linux kernel.")
               (sha256
                (base32
                 "0wpwq7gsm7sd6ysidv0z575ckqdg13cr2njyfgrbgh4f65adwwji"))
-              (patches (search-patches "glibc-ldd-x86_64.patch"
+              (patches (local-patches "glibc-ldd-x86_64.patch"
                                        "glibc-2.27-git-fixes.patch"
                                        "glibc-hidden-visibility-ldconfig.p=
atch"
                                        "glibc-versioned-locpath.patch"
diff --git a/gnu/packages/bioinformatics.scm b/gnu/packages/bioinformatics.=
scm
index 2b67cab609..d35179f5bc 100644
--- a/gnu/packages/bioinformatics.scm
+++ b/gnu/packages/bioinformatics.scm
@@ -5108,7 +5108,7 @@ form of assemblies or reads.")
        (sha256
         (base32
          "0hyg2smw1nz69mfvjpk45xyyychmda92c80a0cv7baji84ri4iyn"))
-       (patches (search-patches "metabat-fix-compilation.patch"))))
+       (patches (local-patches "metabat-fix-compilation.patch"))))
     (build-system scons-build-system)
     (arguments
      `(#:scons ,scons-python2
@@ -6232,7 +6232,7 @@ Roche 454, Ion Torrent and Pacific BioSciences SMRT.")
               (sha256
                (base32
                 "1n2s5wvvj2y0vfgjkg1q11xahpbagxz7h2vf5q7qyy25s12kbzbd"))
-              (patches (search-patches "mosaicatcher-unbundle-htslib.patch=
"))))
+              (patches (local-patches "mosaicatcher-unbundle-htslib.patch"=
))))
     (build-system cmake-build-system)
     (arguments
      `(#:tests? #false ; there are no tests
@@ -6454,7 +6454,7 @@ accessed/downloaded on demand across HTTP.")
              version "-src.zip"))
        (sha256
         (base32 "0as8gxm4pjyc8dxmm1sl873rrd7wn5qs0l29nqfnl31x8i467xaa"))
-       (patches (search-patches "plink-1.07-unclobber-i.patch"
+       (patches (local-patches "plink-1.07-unclobber-i.patch"
                                 "plink-endian-detection.patch"))))
     (build-system gnu-build-system)
     (arguments
@@ -7705,7 +7705,7 @@ includes software to
        (sha256
         (base32
          "0vhrpjfdf75ba04b24xknp41790cvcgwl0vgpy7qbzj5xh2521ss"))
-       (patches (search-patches "vsearch-unbundle-cityhash.patch"))
+       (patches (local-patches "vsearch-unbundle-cityhash.patch"))
        (snippet
         '(begin
            ;; Remove bundled cityhash sources.  The vsearch source is adju=
sted
diff --git a/gnu/packages/commencement.scm b/gnu/packages/commencement.scm
index e7bd6cf002..237540d7e3 100644
--- a/gnu/packages/commencement.scm
+++ b/gnu/packages/commencement.scm
@@ -1,5 +1,5 @@
 ;;; GNU Guix --- Functional package management for GNU
-;;; Copyright =C2=A9 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020 =
Ludovic Court=C3=A8s <ludo@HIDDEN>
+;;; Copyright =C2=A9 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020,=
 2021 Ludovic Court=C3=A8s <ludo@HIDDEN>
 ;;; Copyright =C2=A9 2014 Andreas Enge <andreas@HIDDEN>
 ;;; Copyright =C2=A9 2012 Nikita Karetnikov <nikita@HIDDEN>
 ;;; Copyright =C2=A9 2014, 2015, 2017 Mark H Weaver <mhw@HIDDEN>
@@ -2115,7 +2115,7 @@ ac_cv_c_float_format=3D'IEEE (little-endian)'
                (method url-fetch)
                (uri (string-append "mirror://gnu/binutils/binutils-"
                                    version ".tar.bz2"))
-               (patches (search-patches "binutils-boot-2.20.1a.patch"))
+               (patches (local-patches "binutils-boot-2.20.1a.patch"))
                (sha256
                 (base32
                  "0r7dr0brfpchh5ic0z9r4yxqn4ybzmlh25sbp30cacqk8nb7rlvi")))=
))
@@ -2191,7 +2191,7 @@ ac_cv_c_float_format=3D'IEEE (little-endian)'
                (uri (string-append "mirror://gnu/glibc/glibc-"
                                    version
                                    ".tar.gz"))
-               (patches (search-patches "glibc-boot-2.16.0.patch"
+               (patches (local-patches "glibc-boot-2.16.0.patch"
                                         "glibc-bootstrap-system-2.16.0.pat=
ch"))
                (sha256
                 (base32
@@ -3317,7 +3317,7 @@ memoized as a function of '%current-system'."
        ("perl" ,perl-boot0)
        ("python" ,python-boot0)
        ,@(if (target-powerpc?)
-           `(("powerpc64le-patch" ,@(search-patches
+           `(("powerpc64le-patch" ,@(local-patches
                                       "glibc-ldd-powerpc.patch")))
            '())))
     (inputs
@@ -3471,7 +3471,7 @@ exec ~a/bin/~a-~a -B~a/lib -Wl,-dynamic-linker -Wl,~a=
/~a \"$@\"~%"
    ;; This time we need 'msgfmt' to install all the libc.mo files.
    (native-inputs `(,@(package-native-inputs glibc-final-with-bootstrap-ba=
sh)
                      ,@(if (target-powerpc?)
-                         `(("powerpc64le-patch" ,@(search-patches
+                         `(("powerpc64le-patch" ,@(local-patches
                                                     "glibc-ldd-powerpc.pat=
ch")))
                          '())
                     ("gettext" ,gettext-boot0)))
diff --git a/gnu/packages/gcc.scm b/gnu/packages/gcc.scm
index 493ff2659f..1576b90503 100644
--- a/gnu/packages/gcc.scm
+++ b/gnu/packages/gcc.scm
@@ -155,7 +155,7 @@ where the OS part is overloaded to denote a specific AB=
I---into GCC
                  (sha256
                   (base32
                    "10k2k71kxgay283ylbbhhs51cl55zn2q38vj5pk4k950qdnirrlj"))
-                 (patches (search-patches "gcc-4-compile-with-gcc-5.patch"
+                 (patches (local-patches "gcc-4-compile-with-gcc-5.patch"
                                           "gcc-fix-texi2pod.patch"))))
        (build-system gnu-build-system)
=20
@@ -380,7 +380,7 @@ Go.  It also includes runtime support libraries for the=
se languages.")
               (sha256
                (base32
                 "08yggr18v373a1ihj0rg2vd6psnic42b518xcgp3r9k81xz1xyr2"))
-              (patches (search-patches "gcc-arm-link-spec-fix.patch"
+              (patches (local-patches "gcc-arm-link-spec-fix.patch"
                                        "gcc-4.8-libsanitizer-fix.patch"
                                        "gcc-asan-missing-include.patch"
                                        "gcc-fix-texi2pod.patch"))
@@ -413,7 +413,7 @@ Go.  It also includes runtime support libraries for the=
se languages.")
               (sha256
                (base32
                 "14l06m7nvcvb0igkbip58x59w3nq6315k6jcz3wr9ch1rn9d44bc"))
-              (patches (search-patches "gcc-4.9-libsanitizer-fix.patch"
+              (patches (local-patches "gcc-4.9-libsanitizer-fix.patch"
                                        "gcc-4.9-libsanitizer-ustat.patch"
                                        "gcc-4.9-libsanitizer-mode-size.pat=
ch"
                                        "gcc-arm-bug-71399.patch"
@@ -475,7 +475,7 @@ Go.  It also includes runtime support libraries for the=
se languages.")
               (sha256
                (base32
                 "11zd1hgzkli3b2v70qsm2hyqppngd4616qc96lmm9zl2kl9yl32k"))
-              (patches (search-patches "gcc-arm-bug-71399.patch"
+              (patches (local-patches "gcc-arm-bug-71399.patch"
                                        "gcc-libsanitizer-ustat.patch"
                                        "gcc-strmov-store-file-names.patch"
                                        "gcc-5.0-libvtv-runpath.patch"
@@ -514,7 +514,7 @@ Go.  It also includes runtime support libraries for the=
se languages.")
               (sha256
                (base32
                 "0i89fksfp6wr1xg9l8296aslcymv2idn60ip31wr9s4pwin7kwby"))
-              (patches (search-patches "gcc-strmov-store-file-names.patch"
+              (patches (local-patches "gcc-strmov-store-file-names.patch"
                                        "gcc-6-libsanitizer-mode-size.patch"
                                        "gcc-6-source-date-epoch-1.patch"
                                        "gcc-6-source-date-epoch-2.patch"
@@ -544,7 +544,7 @@ Go.  It also includes runtime support libraries for the=
se languages.")
               (sha256
                (base32
                 "0qg6kqc5l72hpnj4vr6l0p69qav0rh4anlkk3y55540zy3klc6dq"))
-              (patches (search-patches "gcc-strmov-store-file-names.patch"
+              (patches (local-patches "gcc-strmov-store-file-names.patch"
                                        "gcc-7-libsanitizer-mode-size.patch"
                                        "gcc-5.0-libvtv-runpath.patch"))))
     (description
@@ -563,7 +563,7 @@ It also includes runtime support libraries for these la=
nguages.")))
               (sha256
                (base32
                 "0l7d4m9jx124xsk6xardchgy2k5j5l2b15q322k31f0va4d8826k"))
-              (patches (search-patches "gcc-8-strmov-store-file-names.patc=
h"
+              (patches (local-patches "gcc-8-strmov-store-file-names.patch"
                                        "gcc-5.0-libvtv-runpath.patch"
                                        "gcc-8-sort-libtool-find-output.pat=
ch"))))))
=20
@@ -578,7 +578,7 @@ It also includes runtime support libraries for these la=
nguages.")))
             (sha256
              (base32
               "13l3p6g2krilaawbapmn9zmmrh3zdwc36mfr3msxfy038hps6pf9"))
-            (patches (search-patches "gcc-9-strmov-store-file-names.patch"
+            (patches (local-patches "gcc-9-strmov-store-file-names.patch"
                                      "gcc-9-asan-fix-limits-include.patch"
                                      "gcc-5.0-libvtv-runpath.patch"))))))
=20
@@ -593,7 +593,7 @@ It also includes runtime support libraries for these la=
nguages.")))
             (sha256
              (base32
               "0i6378ig6h397zkhd7m4ccwjx5alvzrf2hm27p1pzwjhlv0h9x34"))
-            (patches (search-patches "gcc-9-strmov-store-file-names.patch"
+            (patches (local-patches "gcc-9-strmov-store-file-names.patch"
                                      "gcc-5.0-libvtv-runpath.patch"))))))
=20
 (define-public gcc-11
@@ -607,7 +607,7 @@ It also includes runtime support libraries for these la=
nguages.")))
             (sha256
              (base32
               "12zs6vd2rapp42x154m479hg3h3lsafn3xhg06hp5hsldd9xr3nh"))
-            (patches (search-patches "gcc-9-strmov-store-file-names.patch"
+            (patches (local-patches "gcc-9-strmov-store-file-names.patch"
                                      "gcc-5.0-libvtv-runpath.patch"))))))
=20
 ;; Note: When changing the default gcc version, update
@@ -1129,7 +1129,7 @@ dependence analysis and bounds on piecewise step-poly=
nomials.")
              (sha256
               (base32
                "13d9cqa5rzhbjq0xf0b2dyxag7pqa72xj9dhsa03m8ccr1a4npq9"))
-             (patches (search-patches "isl-0.11.1-aarch64-support.patch"))=
))))
+             (patches (local-patches "isl-0.11.1-aarch64-support.patch")))=
)))
=20
 (define-public cloog
   (package
diff --git a/gnu/packages/python.scm b/gnu/packages/python.scm
index 3bb57ee2bd..413c3cb01e 100644
--- a/gnu/packages/python.scm
+++ b/gnu/packages/python.scm
@@ -116,7 +116,7 @@
       (sha256
        (base32
         "0hds28cg226m8j8sr394nm9yc4gxhvlv109w0avsf2mxrlrz0hsd"))
-      (patches (search-patches "python-2.7-search-paths.patch"
+      (patches (local-patches "python-2.7-search-paths.patch"
                                "python-2-deterministic-build-info.patch"
                                "python-2.7-site-prefixes.patch"
                                "python-2.7-source-date-epoch.patch"
@@ -370,7 +370,7 @@ data types.")
               (method url-fetch)
               (uri (string-append "https://www.python.org/ftp/python/"
                                   version "/Python-" version ".tar.xz"))
-              (patches (search-patches
+              (patches (local-patches
                         "python-CVE-2020-26116.patch"
                         "python-3.8-CVE-2021-3177.patch"
                         "python-3-fix-tests.patch"
@@ -531,7 +531,7 @@ data types.")
               (method url-fetch)
               (uri (string-append "https://www.python.org/ftp/python/"
                                   version "/Python-" version ".tar.xz"))
-              (patches (search-patches
+              (patches (local-patches
                         "python-3.9-fix-tests.patch"
                         "python-3-deterministic-build-info.patch"
                         "python-3-search-paths.patch"))
diff --git a/guix/gexp.scm b/guix/gexp.scm
index f3d278b3e6..830fea6c1d 100644
--- a/guix/gexp.scm
+++ b/guix/gexp.scm
@@ -30,12 +30,15 @@
   #:use-module (guix diagnostics)
   #:use-module (guix i18n)
   #:use-module (rnrs bytevectors)
+  #:autoload   (gcrypt hash) (file-sha256 open-sha256-port)
+  #:autoload   (guix serialization) (write-file)
   #:use-module (srfi srfi-1)
   #:use-module (srfi srfi-9)
   #:use-module (srfi srfi-9 gnu)
   #:use-module (srfi srfi-26)
   #:use-module (srfi srfi-34)
   #:use-module (srfi srfi-35)
+  #:use-module (srfi srfi-71)
   #:use-module (ice-9 format)
   #:use-module (ice-9 match)
   #:export (gexp
@@ -59,6 +62,7 @@
             local-file-name
             local-file-recursive?
             local-file-select?
+            local-file-cache-authoritative?
=20
             plain-file
             plain-file?
@@ -421,27 +425,30 @@ Here TARGET is bound to the cross-compilation triplet=
 or #f."
 ;; absolute file name.  We keep it in a promise to compute it lazily and a=
void
 ;; repeated 'stat' calls.
 (define-record-type <local-file>
-  (%%local-file file absolute name recursive? select?)
+  (%%local-file file absolute name recursive? select?
+                store-file)
   local-file?
   (file       local-file-file)                    ;string
   (absolute   %local-file-absolute-file-name)     ;promise string
   (name       local-file-name)                    ;string
   (recursive? local-file-recursive?)              ;Boolean
-  (select?    local-file-select?))                ;string stat -> Boolean
+  (select?    local-file-select?)                 ;string stat -> Boolean
+  (store-file local-file-store-file))             ;string | #f
=20
 (define (true file stat) #t)
=20
 (define* (%local-file file promise #:optional (name (basename file))
                       #:key
                       (literal? #t) location
-                      recursive? (select? true))
+                      recursive? (select? true) store-file)
   ;; This intermediate procedure is part of our ABI, but the underlying
   ;; %%LOCAL-FILE is not.
   (when (and (not literal?) (not (string-prefix? "/" file)))
     (warning (and=3D> location source-properties->location)
              (G_ "resolving '~a' relative to current directory~%")
              file))
-  (%%local-file file promise name recursive? select?))
+  (%%local-file file promise name recursive? select?
+                store-file))
=20
 (define (absolute-file-name file directory)
   "Return the canonical absolute file name for FILE, which lives in the
@@ -451,7 +458,7 @@ vicinity of DIRECTORY."
          ((not directory) file)
          ((string-prefix? "/" directory)
           (string-append directory "/" file))
-         (else file))))
+         (else (string-append directory "/" file)))))
=20
 (define-syntax-rule (assume-valid-file-name file)
   "This is a syntactic keyword to tell 'local-file' that it can assume that
@@ -477,13 +484,43 @@ where FILE is the entry's absolute file name and STAT=
 is the result of
 This is the declarative counterpart of the 'interned-file' monadic procedu=
re.
 It is implemented as a macro to capture the current source directory where=
 it
 appears."
+    (define (store-file-name file recursive?)
+      (pk 'f-o-p file recursive?
+          (fixed-output-path (basename file)
+                             (if recursive?
+                                 (let ((port get-hash (open-sha256-port)))
+                                   (write-file file port)
+                                   (force-output port)
+                                   (get-hash))
+                                 (file-sha256 file))
+                          #:hash-algo 'sha256
+                          #:recursive? recursive?)))
+
     (syntax-case s (assume-valid-file-name)
       ((_ file rest ...)
        (string? (syntax->datum #'file))
        ;; FILE is a literal, so resolve it relative to the source director=
y.
-       #'(%local-file file
-                      (delay (absolute-file-name file (current-source-dire=
ctory)))
-                      rest ...))
+       (let* ((directory (and=3D> (syntax-source s)
+                                (lambda (properties)
+                                  (and=3D> (assq-ref properties 'filename)=
 dirname))))
+              (absolute  (and directory
+                              (absolute-file-name (syntax->datum #'file)
+                                                  directory)))
+              (recursive? (equal? '(#:recursive? #t)
+                                  (syntax->datum #'(rest ...))))
+              (store-file (and absolute
+                               (or recursive?
+                                   (null? (syntax->datum #'(rest ...))))
+                               (catch 'system-error
+                                 (lambda ()
+                                   (store-file-name absolute recursive?))
+                                 (const #f)))))
+         #`(%local-file file
+                        (delay (absolute-file-name file (current-source-di=
rectory)))
+                        #,@(if store-file
+                               #`(#:store-file #,store-file)
+                               #'())
+                        rest ...)))
       ((_ (assume-valid-file-name file) rest ...)
        ;; FILE is not a literal, so resolve it relative to the current
        ;; directory.  Since the user declared FILE is valid, do not pass
@@ -514,16 +551,34 @@ appears."
 'system-error' exception is raised if FILE could not be found."
   (force (%local-file-absolute-file-name file)))
=20
+(define valid-path?*
+  (store-lift valid-path?))
+(define add-temp-root*
+  (store-lift add-temp-root))
+
+(define local-file-cache-authoritative?
+  (make-parameter (and (not (getenv "GUIX_DISABLE_LOCAL_FILE_CACHE"))
+                       #;(not (getenv "GUIX_UNINSTALLED")))))
+
 (define-gexp-compiler (local-file-compiler (file <local-file>) system targ=
et)
   ;; "Compile" FILE by adding it to the store.
   (match file
-    (($ <local-file> file (=3D force absolute) name recursive? select?)
+    (($ <local-file> file absolute name recursive? select?
+                     store-file)
      ;; Canonicalize FILE so that if it's a symlink, it is resolved.  Fail=
ing
      ;; to do that, when RECURSIVE? is #t, we could end up creating a dang=
ling
      ;; symlink in the store, and when RECURSIVE? is #f 'add-to-store' wou=
ld
      ;; just throw an error, both of which are inconvenient.
-     (interned-file absolute name
-                    #:recursive? recursive? #:select? select?))))
+     (mlet %store-monad ((valid? (if (and store-file
+                                          (local-file-cache-authoritative?=
))
+                                     (mbegin %store-monad
+                                       ;; (add-temp-root* store-file)
+                                       (valid-path?* store-file))
+                                     (return #f))))
+       (if valid?
+           (return store-file)
+           (interned-file (force absolute) name
+                          #:recursive? recursive? #:select? select?))))))
=20
 (define-record-type <plain-file>
   (%plain-file name content references)

--=-=-=--




Information forwarded to guix-patches@HIDDEN:
bug#50384; Package guix-patches. Full text available.
Removed tag(s) patch. Request was from Ludovic Courtès <ludo@HIDDEN> to control <at> debbugs.gnu.org. Full text available.
Did not alter fixed versions and reopened. Request was from Debbugs Internal Request <help-debbugs@HIDDEN> to internal_control <at> debbugs.gnu.org. Full text available.

Message received at 50384-done <at> debbugs.gnu.org:


Received: (at 50384-done) by debbugs.gnu.org; 10 Sep 2021 09:54:47 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Fri Sep 10 05:54:47 2021
Received: from localhost ([127.0.0.1]:36902 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1mOdF9-0006ui-Dh
	for submit <at> debbugs.gnu.org; Fri, 10 Sep 2021 05:54:47 -0400
Received: from albert.telenet-ops.be ([195.130.137.90]:49368)
 by debbugs.gnu.org with esmtp (Exim 4.84_2)
 (envelope-from <maximedevos@HIDDEN>) id 1mOdF7-0006uY-Hr
 for 50384-done <at> debbugs.gnu.org; Fri, 10 Sep 2021 05:54:46 -0400
Received: from butterfly.local ([213.251.110.34])
 by albert.telenet-ops.be with bizsmtp
 id s9ui2500T0kaXst069ujJd; Fri, 10 Sep 2021 11:54:43 +0200
Message-ID: <d989362bf612f305891c30339d34bcd68196fe8a.camel@HIDDEN>
Subject: Re: [bug#50384] [PATCH v3] Optimise search-patch (reducing I/O)
From: Maxime Devos <maximedevos@HIDDEN>
To: 50384-done <at> debbugs.gnu.org
Date: Fri, 10 Sep 2021 11:54:36 +0200
In-Reply-To: <04603bca34f16b284a5e3052a4b0765b60952817.camel@HIDDEN>
References: <8900fa8c8eef7f72fc97adc2408be26c88de7803.camel@HIDDEN>
 <04603bca34f16b284a5e3052a4b0765b60952817.camel@HIDDEN>
Content-Type: multipart/signed; micalg="pgp-sha512";
 protocol="application/pgp-signature"; boundary="=-RiXDpsaPTryz6a7ncBUo"
User-Agent: Evolution 3.34.2 
MIME-Version: 1.0
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=telenet.be; s=r21;
 t=1631267683; bh=WQZPcVKJwuuEwNO+l3GsD1qWD/w+mvIkrryYoLyDuKg=;
 h=Subject:From:To:Cc:Date:In-Reply-To:References;
 b=VkAJ1j3KjG2wuObKzoEmVq9zHD0otngLlfKSo1q2j8C6qYUEh21OP3Nc00zY/Nj9t
 2KtAThk6+s4BbpMQurAPb+g+OF4vkh0GG78fbpppvgEmFdRMn6AfK10ViR2ATLll+S
 Kzo1FM4VEhXxt6fkCye5EudS62brNbUWxjHda09Ueu/8K2zejlHb0BqCN9PVwxeUqN
 T2Jd1uCsEbEj+M6gSQAVuvYMNps6QWQCLT5e80LrqrHwkvnsZQDgb0imiilRZ23Z0F
 gvNb9uE3O//Ob6OnZ5l0RhAOcd1rINfFqmXiq22gSbG5JgZPLZIb8yX4pJSp9NFDmo
 i+d+hxTyCqEIg==
X-Spam-Score: -0.7 (/)
X-Debbugs-Envelope-To: 50384-done
Cc: Ludovic =?ISO-8859-1?Q?Court=E8s?= <ludo@HIDDEN>,
 zimoun <zimon.toutoune@HIDDEN>
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -1.7 (-)


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

It doesn't seem like the patch series is going
to end up improving anything, so I'm closing it.

Greetings,
Maxime

--=-RiXDpsaPTryz6a7ncBUo
Content-Type: application/pgp-signature; name="signature.asc"
Content-Description: This is a digitally signed message part
Content-Transfer-Encoding: 7bit

-----BEGIN PGP SIGNATURE-----

iI0EABYKADUWIQTB8z7iDFKP233XAR9J4+4iGRcl7gUCYTsrXBccbWF4aW1lZGV2
b3NAdGVsZW5ldC5iZQAKCRBJ4+4iGRcl7sgFAQDRkDHAX5JIQv5D7szRQiFx8vxr
RnZ4TMHFCxdUfWB3jwD+LxyX6J51HBZkPvzRA7eQpnfx+9SNuqe4E4bTLjLX5ws=
=7nyo
-----END PGP SIGNATURE-----

--=-RiXDpsaPTryz6a7ncBUo--





Notification sent to Maxime Devos <maximedevos@HIDDEN>:
bug acknowledged by developer. Full text available.
Reply sent to Maxime Devos <maximedevos@HIDDEN>:
You have taken responsibility. Full text available.

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


Received: (at 50384) by debbugs.gnu.org; 9 Sep 2021 20:26:22 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Thu Sep 09 16:26:22 2021
Received: from localhost ([127.0.0.1]:36313 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1mOQce-0007H3-SS
	for submit <at> debbugs.gnu.org; Thu, 09 Sep 2021 16:26:22 -0400
Received: from albert.telenet-ops.be ([195.130.137.90]:56352)
 by debbugs.gnu.org with esmtp (Exim 4.84_2)
 (envelope-from <maximedevos@HIDDEN>) id 1mOQca-0007Gs-JA
 for 50384 <at> debbugs.gnu.org; Thu, 09 Sep 2021 16:26:11 -0400
Received: from [172.20.10.4] ([213.119.128.77])
 by albert.telenet-ops.be with bizsmtp
 id rwS52500M1gKkhx06wS6Ps; Thu, 09 Sep 2021 22:26:06 +0200
Message-ID: <04603bca34f16b284a5e3052a4b0765b60952817.camel@HIDDEN>
Subject: [PATCH v3] Optimise search-patch (reducing I/O)
From: Maxime Devos <maximedevos@HIDDEN>
To: 50384 <at> debbugs.gnu.org
Date: Thu, 09 Sep 2021 22:25:46 +0200
In-Reply-To: <8900fa8c8eef7f72fc97adc2408be26c88de7803.camel@HIDDEN>
References: <8900fa8c8eef7f72fc97adc2408be26c88de7803.camel@HIDDEN>
Content-Type: multipart/signed; micalg="pgp-sha512";
 protocol="application/pgp-signature"; boundary="=-dT8/QEIsPOYFhIUcHEMW"
User-Agent: Evolution 3.34.2 
MIME-Version: 1.0
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=telenet.be; s=r21;
 t=1631219166; bh=NeSWZ9++rmDMz2rlTfIoHLEwpHJGgCJEl8ZYXLxYMlI=;
 h=Subject:From:To:Cc:Date:In-Reply-To:References;
 b=b/tCOePDAsJ7fkeqhWgY+RI6XiuqClxqEW5nEPxfnMMyVQ4j6yv9whOKbOZpkNe+g
 UAL17Ez7pEc1/tCV08LQzksy6nQ8t1rpAP2ExAuYF0MpczsN+9265BLjB16nXzFhuo
 9PtAMEJqHJTMAqVHJFbHjzvDUecp5G/e8683GWzNv/2VcvzN36wl7jwetYjsArKuCb
 pg0YBBgL7Q9Y7mr5HLYPahDQa8hJ+4mxiwzZsdn+xHYqwDbryf7oLXkgE6AGPmGq75
 zYGB70vnDij5RTEtb4RWt+Van/EN0YwYbaOwUctUmd8jMoWJjltWxtyaI2kyCBO6VA
 4ylSZ0mWw3QmA==
X-Spam-Score: -0.7 (/)
X-Debbugs-Envelope-To: 50384
Cc: Ludovic =?ISO-8859-1?Q?Court=E8s?= <ludo@HIDDEN>,
 zimoun <zimon.toutoune@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 (-)


--=-dT8/QEIsPOYFhIUcHEMW
Content-Type: multipart/mixed; boundary="=-VRWJSoloRA3mhw8ZjuSt"


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

Hi guix,

This is a v3, without the base16 and base32 optimisations which
are split-off into <https://issues.guix.gnu.org/50456>.  It doesn't
seem this patch series will bring improvements, but feel free to test
(in particular, I wonder if this will help people using a remote daemon,
where transmitting data can take (relatively) long?).

(guix scripts hash) is broken, which would need to be fixed in the final
version, if any.  Ludovic has some concerns about dependency tracking in
search-patch which need to be adressed.

I think a more fruitful goal is to somehow parallelize the derivation
computation, with multiple separate connections to the store, such that
if one connection is blocking, the other one can be used for something
separate (threads aren't necessary if current-read-waiter,
current-write-waiter and non-blocking I/O are used).

Now, what improvements does this version of the patch series bring?
(Make sure to start the daemon with ./pre-inst-env guix daemon ...,
and set --localstatedir=3D/var!  Some changes to the daemon were made.)

1.  RPC count (tested in a local checkout)

    After the patch series:
make && GUIX_PROFILING=3Drpc ./pre-inst-env guix build -d pigx --no-grafts
accepted connection from pid 4917, user [USER]

/gnu/store/jfjfg7dnis7v6947a0rncxdn3y1nz0ad-pigx-0.0.3.drv
Remote procedure call summary: 5754 RPCs
  built-in-builders              ...     1
  add-to-store                   ...     3
  add-to-store/tree              ...    26
  add-temp-root-and-valid-path?  ...   195
  add-text-to-store              ...  5529

  After the patch series, with (if sha256 ...) replaced with (if #f ...)
  in (guix gexp), to simulate the situation before the patch series

/gnu/store/jfjfg7dnis7v6947a0rncxdn3y1nz0ad-pigx-0.0.3.drv
Remote procedure call summary: 5749 RPCs
  built-in-builders              ...     1
  add-to-store/tree              ...    26
  add-to-store                   ...   193
  add-text-to-store              ...  5529

(add-to-store RPCs are converted to add-temp-root-and-valid-path? RPCs)

2. Timing

   First do
   	 echo powersave | sudo tee /sys/devices/system/cpu/cpu{0,1,2,3}/cpufreq=
/scaling_governor
   to eliminate CPU frequency scaling effects.
   To automatically repeat the tests and compute the standard deviation,
   'hyperfine' is used:
   HYP=3D/gnu/store/3ya4iw6fzq1ns73bv1g3a96jvwhbv60c-hyperfine-1.11.0/bin/h=
yperfine

   To determine the effect of the change to 'local-file-compiler' and
   'search-patch' and nothing else, I will compare the performance of guix
   after the patch series with the performance of guix after the patch seri=
es
   and 'sha256' replaced by #false.

   With #f, --runs=3D60:
   make && ./pre-inst-env $HYP --runs=3D60 --warmup 1 -- 'guix build -d pig=
x --no-grafts'
   Time (mean =C2=B1 =CF=83):     15.428 s =C2=B1  0.385 s    [User: 15.925=
 s, System: 0.652 s]
   Range (min =E2=80=A6 max):   14.768 s =E2=80=A6 16.550 s    60 runs

   With sha256, --runs=3D60
   make && ./pre-inst-env $HYP --runs=3D60 --warmup 1 -- 'guix build -d pig=
x --no-grafts'
   Time (mean =C2=B1 =CF=83):     15.493 s =C2=B1  0.252 s    [User: 15.585=
 s, System: 0.680 s]
   Range (min =E2=80=A6 max):   14.981 s =E2=80=A6 16.294 s    60 runs

  These numbers don't have a clear difference.  Maybe statistics can help? =
  First,
  formulate a null-hypothesis.  As the total number of RPCs didn't change, =
the amount
  of data sent to the daemon is reduced and some "stats", "open" and "reads=
" are avoided,
  I would expect that the mean decreases.  Thus, as null-hypothesis, I choo=
se:

  H0: the (theoretical) mean for =E2=80=98with sha256=E2=80=99 is less than=
 the mean for =E2=80=98with #f=E2=80=99

  In the timing tests, the observed mean for 'with sha256=E2=80=99 is actua=
lly larger.
  But is this significant?

  guix environment --ad-hoc r
  before.mean   =3D 15.428
  before.stddev =3D 0.385
  after.mean    =3D 15.493
  after.stddev  =3D 0.252
  samples =3D 60

  # =E2=80=98statistical=E2=80=99 crate used by hyperfine
  # performs N/(N-1) correction XXX

  t =3D (before.mean - after.mean)/(sqrt(samples) * sqrt(before.stddev^2 + =
after.stddev^2))
  v =3D (samples - 1) * (before.stddev^2 + after.stddev^2)^2/(before.stddev=
^4 + after.stddev^4)

  q =3D dt(-t, v); q
  # p-value: 0.5072571
  # Null-hypothesis is not rejected

  It's not rejected, though that doesn't prove much since t is almost zero,
  so this test cannot reject the hypothesis =E2=80=98the means are equal=E2=
=80=99 or =E2=80=98the patch
  series makes things slower=E2=80=99 either.

  I don't think this patch series helps on my laptop (at least on a hot dis=
k cache, I'd have
  to check for a cold cache).  However, I wonder if this would help a littl=
e for people
  using a remote build daemon (with a nfs setup or something) (see GUIX_DAE=
MON_SOCKET)?

Greetings,
Maxime.

--=-VRWJSoloRA3mhw8ZjuSt
Content-Disposition: attachment;
	filename="0001-build-self-Implement-basic-hash-algorithm.patch"
Content-Type: text/x-patch; name="0001-build-self-Implement-basic-hash-algorithm.patch";
	charset="UTF-8"
Content-Transfer-Encoding: base64

RnJvbSBjZmZmZTYyZmZmNzE4ODVkYjlmZWIxYzQ2ZWU1ZDBiNmJiZTJmNGM3IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBNYXhpbWUgRGV2b3MgPG1heGltZWRldm9zQHRlbGVuZXQuYmU+
CkRhdGU6IFNhdCwgNCBTZXAgMjAyMSAyMDowOTowMyArMDIwMApTdWJqZWN0OiBbUEFUQ0ggMDEv
MTBdIGJ1aWxkLXNlbGY6IEltcGxlbWVudCBiYXNpYyAnaGFzaC1hbGdvcml0aG0nLgpNSU1FLVZl
cnNpb246IDEuMApDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9VVRGLTgKQ29udGVu
dC1UcmFuc2Zlci1FbmNvZGluZzogOGJpdAoKVGhlIG1vZHVsZSAoZ3VpeCBoYXNoKSB1c2VkIGZy
b20gJ3NlYXJjaC1wYXRjaCcgaW4gYSBmdXR1cmUKcGF0Y2ggbmVlZHMgaXQgdG8gYmUgcHJvcGVy
bHkgZGVmaW5lZCB3aGVuIChndWl4IGhhc2gpIGlzIGJlaW5nCmNvbXBpbGVkLiAgJ3NlYXJjaC1w
YXRjaCcgaXMgdXNlZCB3aGVuIHRoZSBkZXJpdmF0aW9uIG9mIEd1aXggaXMKYmVpbmcgY29tcHV0
ZWQsIHNvIGl0IGlzIGltcG9ydGFudCB0byBhdm9pZCB0aGUg4oCYd3JvbmcgdHlwZSB0bwphcHBs
eTogIzxzeW50YXgtdHJhbnNmb3JtZXIgaGFzaC1hbGdvcml0aG0+4oCZIGVycm9yLgoKKiBidWls
ZC1hdXgvYnVpbGQtc2VsZi5zY20KICAoYnVpbGQtcHJvZ3JhbSlbZmFrZS1nY3J5cHQtaGFzaF06
IERlZmluZSBoYXNoLWFsZ29yaXRobSBmb3Igc2hhMQogIGFuZCBzaGEyNTYuCi0tLQogYnVpbGQt
YXV4L2J1aWxkLXNlbGYuc2NtIHwgMTMgKysrKysrKysrKystLQogMSBmaWxlIGNoYW5nZWQsIDEx
IGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvYnVpbGQtYXV4L2J1
aWxkLXNlbGYuc2NtIGIvYnVpbGQtYXV4L2J1aWxkLXNlbGYuc2NtCmluZGV4IDNhMmQxM2NjMDku
LjJjMTNkOWQ1MzAgMTAwNjQ0Ci0tLSBhL2J1aWxkLWF1eC9idWlsZC1zZWxmLnNjbQorKysgYi9i
dWlsZC1hdXgvYnVpbGQtc2VsZi5zY20KQEAgLTI1OSw4ICsyNTksMTcgQEAgaW50ZXJmYWNlIChG
RkkpIG9mIEd1aWxlLiIpCiAgIChkZWZpbmUgZmFrZS1nY3J5cHQtaGFzaAogICAgIDs7IEZha2Ug
KGdjcnlwdCBoYXNoKSBtb2R1bGU7IHNlZSBiZWxvdy4KICAgICAoc2NoZW1lLWZpbGUgImhhc2gu
c2NtIgotICAgICAgICAgICAgICAgICAjfihkZWZpbmUtbW9kdWxlIChnY3J5cHQgaGFzaCkKLSAg
ICAgICAgICAgICAgICAgICAgICM6ZXhwb3J0IChzaGExIHNoYTI1NikpKSkKKyAgICAgICAgICAg
ICAgICAgI34oYmVnaW4KKyAgICAgICAgICAgICAgICAgICAgIChkZWZpbmUtbW9kdWxlIChnY3J5
cHQgaGFzaCkKKyAgICAgICAgICAgICAgICAgICAgICAgIzpleHBvcnQgKHNoYTEgc2hhMjU2IGhh
c2gtYWxnb3JpdGhtKSkKKyAgICAgICAgICAgICAgICAgICAgIDs7IEF2b2lkIOKAmFdyb25nIHR5
cGUgdG8gYXBwbHk6CisgICAgICAgICAgICAgICAgICAgICA7OyAjPHN5bnRheC10cmFuc2Zvcm1l
ciBoYXNoLWFsZ29yaXRobT7igJkgZXJyb3JzLgorICAgICAgICAgICAgICAgICAgICAgKGRlZmlu
ZSBzaGExKQorICAgICAgICAgICAgICAgICAgICAgKGRlZmluZSBzaGEyNTYpCisgICAgICAgICAg
ICAgICAgICAgICAoZGVmaW5lLXN5bnRheCBoYXNoLWFsZ29yaXRobQorICAgICAgICAgICAgICAg
ICAgICAgICAoc3ludGF4LXJ1bGVzIChzaGExIHNoYTI1NikKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAoKF8gc2hhMSkgMikKKyAgICAgICAgICAgICAgICAgICAgICAgICAoKF8gc2hhMjU2KSA4
KSkpKSkpCiAKICAgKGRlZmluZSBmYWtlLWdpdAogICAgIChzY2hlbWUtZmlsZSAiZ2l0LnNjbSIg
I34oZGVmaW5lLW1vZHVsZSAoZ2l0KSkpKQotLSAKMi4zMy4wCgo=


--=-VRWJSoloRA3mhw8ZjuSt
Content-Disposition: attachment;
	filename="0002-guix-hash-Extract-file-hashing-procedures.patch"
Content-Type: text/x-patch; name="0002-guix-hash-Extract-file-hashing-procedures.patch";
	charset="UTF-8"
Content-Transfer-Encoding: base64

RnJvbSBmYzUzNTI0MTMwZTU2YmJkYjUzYzk3ZTBlNDdlZjIwMjlkN2RiYWQ5IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBTYXJhaCBNb3JnZW5zZW4gPGlza2FyaWFuQG1nc24uZGV2PgpE
YXRlOiBTdW4sIDE1IEF1ZyAyMDIxIDE2OjI1OjI0IC0wNzAwClN1YmplY3Q6IFtQQVRDSCAwMi8x
MF0gZ3VpeCBoYXNoOiBFeHRyYWN0IGZpbGUgaGFzaGluZyBwcm9jZWR1cmVzLgoKKiBndWl4L3Nj
cmlwdHMvaGFzaC5zY20gKGd1aXgtaGFzaClbdmNzLWZpbGU/LCBmaWxlLWhhc2hdOiBFeHRyYWN0
IGxvZ2ljCnRvLi4uCiogZ3VpeC9oYXNoLnNjbTogLi4uaGVyZS4gTmV3IGZpbGUuCiogTWFrZWZp
bGUuYW0gKE1PRFVMRVMpOiBBZGQgbmV3IGZpbGUuCi0tLQogTWFrZWZpbGUuYW0gICAgICAgICAg
IHwgIDEgKwogZ3VpeC9oYXNoLnNjbSAgICAgICAgIHwgNTEgKysrKysrKysrKysrKysrKysrKysr
KysrKysrKysrKysrKysrKysrKysrKwogZ3VpeC9zY3JpcHRzL2hhc2guc2NtIHwgMjkgKysrKysr
LS0tLS0tLS0tLS0tLS0tLS0tCiAzIGZpbGVzIGNoYW5nZWQsIDU5IGluc2VydGlvbnMoKyksIDIy
IGRlbGV0aW9ucygtKQogY3JlYXRlIG1vZGUgMTAwNjQ0IGd1aXgvaGFzaC5zY20KCmRpZmYgLS1n
aXQgYS9NYWtlZmlsZS5hbSBiL01ha2VmaWxlLmFtCmluZGV4IDMyN2QzZjk5NjEuLjhmODA4OWMw
NWMgMTAwNjQ0Ci0tLSBhL01ha2VmaWxlLmFtCisrKyBiL01ha2VmaWxlLmFtCkBAIC0xMDcsNiAr
MTA3LDcgQEAgTU9EVUxFUyA9CQkJCQlcCiAgIGd1aXgvbmFyaW5mby5zY20JCQkJXAogICBndWl4
L2Rlcml2YXRpb25zLnNjbQkJCQlcCiAgIGd1aXgvZ3JhZnRzLnNjbQkJCQlcCisgIGd1aXgvaGFz
aC5zY20JCQkJCVwKICAgZ3VpeC9yZXBsLnNjbQkJCQkJXAogICBndWl4L3RyYW5zZm9ybWF0aW9u
cy5zY20JCQlcCiAgIGd1aXgvaW5mZXJpb3Iuc2NtCQkJCVwKZGlmZiAtLWdpdCBhL2d1aXgvaGFz
aC5zY20gYi9ndWl4L2hhc2guc2NtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAuLjhjMmFiODE4N2YKLS0tIC9kZXYvbnVsbAorKysgYi9ndWl4L2hhc2guc2NtCkBAIC0wLDAg
KzEsNTEgQEAKKzs7OyBHTlUgR3VpeCAtLS0gRnVuY3Rpb25hbCBwYWNrYWdlIG1hbmFnZW1lbnQg
Zm9yIEdOVQorOzs7IENvcHlyaWdodCDCqSAyMDIxIFNhcmFoIE1vcmdlbnNlbiA8aXNrYXJpYW5A
bWdzbi5kZXY+Cis7OzsKKzs7OyBUaGlzIGZpbGUgaXMgcGFydCBvZiBHTlUgR3VpeC4KKzs7Owor
Ozs7IEdOVSBHdWl4IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu
ZC9vciBtb2RpZnkgaXQKKzs7OyB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorOzs7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdAorOzs7IHlvdXIg
b3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKzs7OworOzs7IEdOVSBHdWl4IGlzIGRpc3RyaWJ1
dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorOzs7IFdJVEhPVVQg
QU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKzs7OyBN
RVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUg
dGhlCis7OzsgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKzs7
OworOzs7IFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlCis7OzsgYWxvbmcgd2l0aCBHTlUgR3VpeC4gIElmIG5vdCwgc2VlIDxo
dHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworKGRlZmluZS1tb2R1bGUgKGd1aXggaGFz
aCkKKyAgIzp1c2UtbW9kdWxlIChnY3J5cHQgaGFzaCkKKyAgIzp1c2UtbW9kdWxlIChndWl4IHNl
cmlhbGl6YXRpb24pCisgICM6dXNlLW1vZHVsZSAoc3JmaSBzcmZpLTEpCisgICM6dXNlLW1vZHVs
ZSAoc3JmaSBzcmZpLTExKQorICAjOmV4cG9ydCAodmNzLWZpbGU/CisgICAgICAgICAgICBmaWxl
LWhhc2gqKSkKKworKGRlZmluZSAodmNzLWZpbGU/IGZpbGUgc3RhdCkKKyAgIlJldHVybnMgdHJ1
ZSBpZiBGSUxFIGlzIGEgdmVyc2lvbiBjb250cm9sIHN5c3RlbSBmaWxlLiIKKyAgKGNhc2UgKHN0
YXQ6dHlwZSBzdGF0KQorICAgICgoZGlyZWN0b3J5KQorICAgICAobWVtYmVyIChiYXNlbmFtZSBm
aWxlKSAnKCIuYnpyIiAiLmdpdCIgIi5oZyIgIi5zdm4iICJDVlMiKSkpCisgICAgKChyZWd1bGFy
KQorICAgICA7OyBHaXQgc3ViLW1vZHVsZXMgaGF2ZSBhICcuZ2l0JyBmaWxlIHRoYXQgaXMgYSBy
ZWd1bGFyIHRleHQgZmlsZS4KKyAgICAgKHN0cmluZz0/IChiYXNlbmFtZSBmaWxlKSAiLmdpdCIp
KQorICAgIChlbHNlCisgICAgICNmKSkpCisKKyhkZWZpbmUqIChmaWxlLWhhc2gqIGZpbGUgIzpr
ZXkKKyAgICAgICAgICAgICAgICAgICAgIChhbGdvcml0aG0gKGhhc2gtYWxnb3JpdGhtIHNoYTI1
NikpCisgICAgICAgICAgICAgICAgICAgICAocmVjdXJzaXZlPyAjdCkKKyAgICAgICAgICAgICAg
ICAgICAgIChzZWxlY3Q/IChuZWdhdGUgdmNzLWZpbGU/KSkpCisgICJDb21wdXRlIHRoZSBoYXNo
IG9mIEZJTEUgd2l0aCBBTEdPUklUSE0uICBJZiBSRUNVUlNJVkU/IGlzIHRydWUsIHJlY3Vyc2UK
K2ludG8gc3ViZGlyZWN0b3JpZXMgb2YgRklMRSwgY29tcHV0aW5nIHRoZSBjb21iaW5lZCBoYXNo
IG9mIGFsbCBmaWxlcyBmb3IKK3doaWNoIChTRUxFQ1Q/ICBGSUxFIFNUQVQpIHJldHVybnMgdHJ1
ZS4iCisgIChpZiByZWN1cnNpdmU/CisgICAgICAobGV0LXZhbHVlcyAoKChwb3J0IGdldC1oYXNo
KQorICAgICAgICAgICAgICAgICAgICAob3Blbi1oYXNoLXBvcnQgYWxnb3JpdGhtKSkpCisgICAg
ICAgICh3cml0ZS1maWxlIGZpbGUgcG9ydCAjOnNlbGVjdD8gc2VsZWN0PykKKyAgICAgICAgKGZv
cmNlLW91dHB1dCBwb3J0KQorICAgICAgICAoZ2V0LWhhc2gpKQorICAgICAgKGZpbGUtaGFzaCBh
bGdvcml0aG0gZmlsZSkpKQpkaWZmIC0tZ2l0IGEvZ3VpeC9zY3JpcHRzL2hhc2guc2NtIGIvZ3Vp
eC9zY3JpcHRzL2hhc2guc2NtCmluZGV4IGI4NjIyMzczY2MuLjM1M2NhMzBjMmMgMTAwNjQ0Ci0t
LSBhL2d1aXgvc2NyaXB0cy9oYXNoLnNjbQorKysgYi9ndWl4L3NjcmlwdHMvaGFzaC5zY20KQEAg
LTMsNiArMyw3IEBACiA7OzsgQ29weXJpZ2h0IMKpIDIwMTMgTmlraXRhIEthcmV0bmlrb3YgPG5p
a2l0YUBrYXJldG5pa292Lm9yZz4KIDs7OyBDb3B5cmlnaHQgwqkgMjAxNiBKYW4gTmlldXdlbmh1
aXplbiA8amFubmVrZUBnbnUub3JnPgogOzs7IENvcHlyaWdodCDCqSAyMDE4IFRpbSBHZXN0aHVp
emVuIDx0aW0uZ2VzdGh1aXplbkB5YWhvby5kZT4KKzs7OyBDb3B5cmlnaHQgwqkgMjAyMSBTYXJh
aCBNb3JnZW5zZW4gPGlza2FyaWFuQG1nc24uZGV2PgogOzs7CiA7OzsgVGhpcyBmaWxlIGlzIHBh
cnQgb2YgR05VIEd1aXguCiA7OzsKQEAgLTIzLDYgKzI0LDcgQEAKICAgIzp1c2UtbW9kdWxlIChn
Y3J5cHQgaGFzaCkKICAgIzp1c2UtbW9kdWxlIChndWl4IHNlcmlhbGl6YXRpb24pCiAgICM6dXNl
LW1vZHVsZSAoZ3VpeCB1aSkKKyAgIzp1c2UtbW9kdWxlIChndWl4IGhhc2gpCiAgICM6dXNlLW1v
ZHVsZSAoZ3VpeCBzY3JpcHRzKQogICAjOnVzZS1tb2R1bGUgKGd1aXggYmFzZTE2KQogICAjOnVz
ZS1tb2R1bGUgKGd1aXggYmFzZTMyKQpAQCAtMTI1LDE2ICsxMjcsNiBAQCBhbmQgJ2Jhc2UxNicg
KCdoZXgnIGFuZCAnaGV4YWRlY2ltYWwnIGNhbiBiZSB1c2VkIGFzIHdlbGwpLlxuIikpCiAgICAg
KHBhcnNlLWNvbW1hbmQtbGluZSBhcmdzICVvcHRpb25zIChsaXN0ICVkZWZhdWx0LW9wdGlvbnMp
CiAgICAgICAgICAgICAgICAgICAgICAgICAjOmJ1aWxkLW9wdGlvbnM/ICNmKSkKIAotICAoZGVm
aW5lICh2Y3MtZmlsZT8gZmlsZSBzdGF0KQotICAgIChjYXNlIChzdGF0OnR5cGUgc3RhdCkKLSAg
ICAgICgoZGlyZWN0b3J5KQotICAgICAgIChtZW1iZXIgKGJhc2VuYW1lIGZpbGUpICcoIi5ienIi
ICIuZ2l0IiAiLmhnIiAiLnN2biIgIkNWUyIpKSkKLSAgICAgICgocmVndWxhcikKLSAgICAgICA7
OyBHaXQgc3ViLW1vZHVsZXMgaGF2ZSBhICcuZ2l0JyBmaWxlIHRoYXQgaXMgYSByZWd1bGFyIHRl
eHQgZmlsZS4KLSAgICAgICAoc3RyaW5nPT8gKGJhc2VuYW1lIGZpbGUpICIuZ2l0IikpCi0gICAg
ICAoZWxzZQotICAgICAgICNmKSkpCi0KICAgKGxldCogKChvcHRzIChwYXJzZS1vcHRpb25zKSkK
ICAgICAgICAgIChhcmdzIChmaWx0ZXItbWFwIChtYXRjaC1sYW1iZGEKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAoKCdhcmd1bWVudCAuIHZhbHVlKQpAQCAtMTUwLDE4ICsxNDIsMTEgQEAg
YW5kICdiYXNlMTYnICgnaGV4JyBhbmQgJ2hleGFkZWNpbWFsJyBjYW4gYmUgdXNlZCBhcyB3ZWxs
KS5cbiIpKQogICAgICAgOzsgQ29tcHV0ZSB0aGUgaGFzaCBvZiBGSUxFLgogICAgICAgOzsgQ2F0
Y2ggYW5kIGdyYWNlZnVsbHkgcmVwb3J0IHBvc3NpYmxlICcmbmFyLWVycm9yJyBjb25kaXRpb25z
LgogICAgICAgKHdpdGgtZXJyb3ItaGFuZGxpbmcKLSAgICAgICAgKGlmIChhc3NvYy1yZWYgb3B0
cyAncmVjdXJzaXZlPykKLSAgICAgICAgICAgIChsZXQtdmFsdWVzICgoKHBvcnQgZ2V0LWhhc2gp
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgIChvcGVuLWhhc2gtcG9ydCAoYXNzb2MtcmVmIG9w
dHMgJ2hhc2gtYWxnb3JpdGhtKSkpKQotICAgICAgICAgICAgICAod3JpdGUtZmlsZSBmaWxlIHBv
cnQgIzpzZWxlY3Q/IHNlbGVjdD8pCi0gICAgICAgICAgICAgIChmb3JjZS1vdXRwdXQgcG9ydCkK
LSAgICAgICAgICAgICAgKGdldC1oYXNoKSkKLSAgICAgICAgICAgIChtYXRjaCBmaWxlCi0gICAg
ICAgICAgICAgICgiLSIgKHBvcnQtaGFzaCAoYXNzb2MtcmVmIG9wdHMgJ2hhc2gtYWxnb3JpdGht
KQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGN1cnJlbnQtaW5wdXQtcG9ydCkpKQot
ICAgICAgICAgICAgICAoXyAgIChjYWxsLXdpdGgtaW5wdXQtZmlsZSBmaWxlCi0gICAgICAgICAg
ICAgICAgICAgICAoY3V0ZSBwb3J0LWhhc2ggKGFzc29jLXJlZiBvcHRzICdoYXNoLWFsZ29yaXRo
bSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIDw+KSkpKSkpKQorICAgICAgICAobWF0Y2gg
ZmlsZQorICAgICAgICAgICgiLSIgKHBvcnQtaGFzaCAoYXNzb2MtcmVmIG9wdHMgJ2hhc2gtYWxn
b3JpdGhtKQorICAgICAgICAgICAgICAgICAgICAgICAgICAoY3VycmVudC1pbnB1dC1wb3J0KSkp
CisgICAgICAgICAgKF8gICAoZmlsZS1oYXNoKiAjOmFsZ29yaXRobSAoYXNzb2MtcmVmIG9wdHMg
J2hhc2gtYWxnb3JpdGhtKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIzpyZWN1cnNpdmU/
IChhc3NvYy1yZWYgb3B0cyAncmVjdXJzaXZlPykpKSkpKQogCiAgICAgKG1hdGNoIGFyZ3MKICAg
ICAgICgoZmlsZSkKLS0gCjIuMzMuMAoK


--=-VRWJSoloRA3mhw8ZjuSt
Content-Disposition: attachment;
	filename*0=0003-store-Define-new-add-temp-root-and-valid-path-operat.pat;
	filename*1=ch
Content-Type: text/x-patch;
	name="0003-store-Define-new-add-temp-root-and-valid-path-operat.patch";
	charset="UTF-8"
Content-Transfer-Encoding: base64

RnJvbSA2MmFkOTczZmU0ODMxOWNhYWFkZWRlNWMzNjM3MGJjZDA4NTQyZmJmIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBNYXhpbWUgRGV2b3MgPG1heGltZWRldm9zQHRlbGVuZXQuYmU+
CkRhdGU6IFRodSwgOSBTZXAgMjAyMSAxNzo0Mjo0OSArMDIwMApTdWJqZWN0OiBbUEFUQ0ggMDMv
MTBdIHN0b3JlOiBEZWZpbmUgbmV3IGFkZC10ZW1wLXJvb3QtYW5kLXZhbGlkLXBhdGg/CiBvcGVy
YXRpb24uCgpUaGlzIHdpbGwgYWxsb3cgc3BlZWRpbmcgdXAgJ2xvY2FsLWZpbGUtY29tcGlsZXIn
IGEgbGl0dGxlLApzZWUgPGh0dHBzOi8vaXNzdWVzLmd1aXguZ251Lm9yZy81MDM4ND4uCgoqIG5p
eC9saWJzdG9yZS93b3JrZXItcHJvdG9jb2xzLmhoCiAgKFdvcmtlck9wKVt3b3BBZGRUZW1wUm9v
dEFuZElzVmFsaWRQYXRoKTogTmV3IG9wZXJhdGlvbi4KICAoUFJPVE9DT0xfVkVSU0lPTik6IEJ1
bXAgdmVyc2lvbi4KKiBuaXgvbml4LWRhZW1vbi9uaXgtZGFlbW9uLmNjCiAgKHBlcmZvcm1PcClb
d29wQWRkVGVtcFJvb3RBbmRJc1ZhbGlkUGF0aF06IEhhbmRsZSBuZXcgb3BlcmF0aW9uLgoqIGd1
aXgvc3RvcmUuc2NtCiAgKGFkZC10ZW1wLXJvb3QtYW5kLXZhbGlkLXBhdGg/KTogTmV3IG9wZXJh
dGlvbi4KICAob3BlcmF0aW9uLWlkKVthZGQtdGVtcC1yb290LWFuZC12YWxpZC1wYXRoPyk6IE5l
dyBvcGVyYXRpb24uCiAgKCVwcm90b2NvbC12ZXJzaW9uKTogQnVtcCB2ZXJzaW9uLgoqIHRlc3Rz
L3N0b3JlLnNjbQogICgiYWRkLXRlbXAtcm9vdC12YWxpZC1wYXRoPyBsaXZlIiwgImFkZC10ZW1w
LXJvb3QtYW5kLXZhbGlkLXBhdGg/IGZhbHNlIik6CiAgTmV3IHRlc3RzLgotLS0KIGd1aXgvc3Rv
cmUuc2NtICAgICAgICAgICAgICAgICAgfCAxMSArKysrKysrKystLQogbml4L2xpYnN0b3JlL3dv
cmtlci1wcm90b2NvbC5oaCB8ICA1ICsrKy0tCiBuaXgvbml4LWRhZW1vbi9uaXgtZGFlbW9uLmNj
ICAgIHwgMTIgKysrKysrKysrKysrCiB0ZXN0cy9zdG9yZS5zY20gICAgICAgICAgICAgICAgIHwg
MTAgKysrKysrKysrKwogNCBmaWxlcyBjaGFuZ2VkLCAzNCBpbnNlcnRpb25zKCspLCA0IGRlbGV0
aW9ucygtKQoKZGlmZiAtLWdpdCBhL2d1aXgvc3RvcmUuc2NtIGIvZ3VpeC9zdG9yZS5zY20KaW5k
ZXggMDQ2M2IwZThmYS4uYzlmN2I5MDViNyAxMDA2NDQKLS0tIGEvZ3VpeC9zdG9yZS5zY20KKysr
IGIvZ3VpeC9zdG9yZS5zY20KQEAgLTEyNCw2ICsxMjQsNyBAQAogICAgICAgICAgICAgZW5zdXJl
LXBhdGgKICAgICAgICAgICAgIGZpbmQtcm9vdHMKICAgICAgICAgICAgIGFkZC10ZW1wLXJvb3QK
KyAgICAgICAgICAgIGFkZC10ZW1wLXJvb3QtYW5kLXZhbGlkLXBhdGg/CiAgICAgICAgICAgICBh
ZGQtaW5kaXJlY3Qtcm9vdAogICAgICAgICAgICAgYWRkLXBlcm1hbmVudC1yb290CiAgICAgICAg
ICAgICByZW1vdmUtcGVybWFuZW50LXJvb3QKQEAgLTE5NSw3ICsxOTYsNyBAQAogICAgICAgICAg
ICAgZGVyaXZhdGlvbi1sb2ctZmlsZQogICAgICAgICAgICAgbG9nLWZpbGUpKQogCi0oZGVmaW5l
ICVwcm90b2NvbC12ZXJzaW9uICN4MTYzKQorKGRlZmluZSAlcHJvdG9jb2wtdmVyc2lvbiAjeDE2
NCkKIAogKGRlZmluZSAld29ya2VyLW1hZ2ljLTEgI3g2ZTY5Nzg2MykgICAgICAgICAgICAgICA7
ICJuaXhjIgogKGRlZmluZSAld29ya2VyLW1hZ2ljLTIgI3g2NDc4Njk2ZikgICAgICAgICAgICAg
ICA7ICJkeGlvIgpAQCAtMjQ5LDcgKzI1MCw4IEBACiAgIChxdWVyeS12YWxpZC1kZXJpdmVycyAz
MykKICAgKG9wdGltaXplLXN0b3JlIDM0KQogICAodmVyaWZ5LXN0b3JlIDM1KQotICAoYnVpbHQt
aW4tYnVpbGRlcnMgODApKQorICAoYnVpbHQtaW4tYnVpbGRlcnMgODApCisgIChhZGQtdGVtcC1y
b290LWFuZC12YWxpZC1wYXRoPyA4MSkpCiAKIChkZWZpbmUtZW51bWVyYXRlLXR5cGUgaGFzaC1h
bGdvCiAgIDs7IGhhc2guaGgKQEAgLTE0NTUsNiArMTQ1NywxMSBAQCBwb3RlbnRpYWwgcm9vdHMg
dGhhdCBkbyBub3QgcG9pbnQgdG8gc3RvcmUgaXRlbXMuIgogUmV0dXJuICN0LiIKICAgYm9vbGVh
bikKIAorKGRlZmluZS1vcGVyYXRpb24gKGFkZC10ZW1wLXJvb3QtYW5kLXZhbGlkLXBhdGg/IChz
dG9yZS1wYXRoIHBhdGgpKQorICAiTWFrZSBQQVRIIGEgdGVtcG9yYXJ5IHJvb3QgZm9yIHRoZSBk
dXJhdGlvbiBvZiB0aGUgY3VycmVudCBzZXNzaW9uLAorYW5kIHRlc3QgaWYgUEFUSCBpcyBhIHZh
bGlkIHN0b3JlIHBhdGggKHNlZSAndmFsaWQtcGF0aD8nKS4iCisgIGJvb2xlYW4pCisKIChkZWZp
bmUtb3BlcmF0aW9uIChhZGQtaW5kaXJlY3Qtcm9vdCAoc3RyaW5nIGZpbGUtbmFtZSkpCiAgICJN
YWtlIHRoZSBzeW1saW5rIEZJTEUtTkFNRSBhbiBpbmRpcmVjdCByb290IGZvciB0aGUgZ2FyYmFn
ZSBjb2xsZWN0b3I6CiB3aGF0ZXZlciBzdG9yZSBpdGVtIEZJTEUtTkFNRSBwb2ludHMgdG8gd2ls
bCBub3QgYmUgY29sbGVjdGVkLiAgUmV0dXJuICN0IG9uCmRpZmYgLS1naXQgYS9uaXgvbGlic3Rv
cmUvd29ya2VyLXByb3RvY29sLmhoIGIvbml4L2xpYnN0b3JlL3dvcmtlci1wcm90b2NvbC5oaApp
bmRleCBlYTY3YjEwYTViLi5iYjk5ZTYzMmNmIDEwMDY0NAotLS0gYS9uaXgvbGlic3RvcmUvd29y
a2VyLXByb3RvY29sLmhoCisrKyBiL25peC9saWJzdG9yZS93b3JrZXItcHJvdG9jb2wuaGgKQEAg
LTYsNyArNiw3IEBAIG5hbWVzcGFjZSBuaXggewogI2RlZmluZSBXT1JLRVJfTUFHSUNfMSAweDZl
Njk3ODYzCiAjZGVmaW5lIFdPUktFUl9NQUdJQ18yIDB4NjQ3ODY5NmYKIAotI2RlZmluZSBQUk9U
T0NPTF9WRVJTSU9OIDB4MTYzCisjZGVmaW5lIFBST1RPQ09MX1ZFUlNJT04gMHgxNjQKICNkZWZp
bmUgR0VUX1BST1RPQ09MX01BSk9SKHgpICgoeCkgJiAweGZmMDApCiAjZGVmaW5lIEdFVF9QUk9U
T0NPTF9NSU5PUih4KSAoKHgpICYgMHgwMGZmKQogCkBAIC00NCw3ICs0NCw4IEBAIHR5cGVkZWYg
ZW51bSB7CiAgICAgd29wUXVlcnlWYWxpZERlcml2ZXJzID0gMzMsCiAgICAgd29wT3B0aW1pc2VT
dG9yZSA9IDM0LAogICAgIHdvcFZlcmlmeVN0b3JlID0gMzUsCi0gICAgd29wQnVpbHRpbkJ1aWxk
ZXJzID0gODAKKyAgICB3b3BCdWlsdGluQnVpbGRlcnMgPSA4MCwKKyAgICB3b3BBZGRUZW1wUm9v
dEFuZElzVmFsaWRQYXRoID0gODEKIH0gV29ya2VyT3A7CiAKIApkaWZmIC0tZ2l0IGEvbml4L25p
eC1kYWVtb24vbml4LWRhZW1vbi5jYyBiL25peC9uaXgtZGFlbW9uL25peC1kYWVtb24uY2MKaW5k
ZXggNDk3ZGUxMWEwNC4uYjczYmIxNWE2NCAxMDA2NDQKLS0tIGEvbml4L25peC1kYWVtb24vbml4
LWRhZW1vbi5jYworKysgYi9uaXgvbml4LWRhZW1vbi9uaXgtZGFlbW9uLmNjCkBAIC0zMDYsNiAr
MzA2LDE4IEBAIHN0YXRpYyB2b2lkIHBlcmZvcm1PcChib29sIHRydXN0ZWQsIHVuc2lnbmVkIGlu
dCBjbGllbnRWZXJzaW9uLAogICAgICAgICBicmVhazsKICAgICB9CiAKKyAgICBjYXNlIHdvcEFk
ZFRlbXBSb290QW5kSXNWYWxpZFBhdGg6IHsKKyAgICAgIC8qIFRoaXMgaXMgYSBjb21iaW5hdGlv
biBvZiBBZGRUZW1wUm9vdCBhbmQgSXNWYWxpZFBhdGgsIHRvIHJlZHVjZQorICAgICAgICAgdGhl
IG51bWVyIG9mIFJQQyBjYWxscyBtYWRlIGJ5IOKAmGxvY2FsLWZpbGUtY29tcGlsZXLigJkgaW4g
KGd1aXggZ2V4cCkuICovCisgICAgICAgIFBhdGggcGF0aCA9IHJlYWRTdG9yZVBhdGgoZnJvbSk7
CisgICAgICAgIHN0YXJ0V29yaygpOworICAgICAgICBzdG9yZS0+YWRkVGVtcFJvb3QocGF0aCk7
CisgICAgICAgIGJvb2wgcmVzdWx0ID0gc3RvcmUtPmlzVmFsaWRQYXRoKHBhdGgpOworICAgICAg
ICBzdG9wV29yaygpOworICAgICAgICB3cml0ZUludChyZXN1bHQsIHRvKTsKKyAgICAgICAgYnJl
YWs7CisgICAgfQorCiAgICAgY2FzZSB3b3BRdWVyeVZhbGlkUGF0aHM6IHsKICAgICAgICAgUGF0
aFNldCBwYXRocyA9IHJlYWRTdG9yZVBhdGhzPFBhdGhTZXQ+KGZyb20pOwogICAgICAgICBzdGFy
dFdvcmsoKTsKZGlmZiAtLWdpdCBhL3Rlc3RzL3N0b3JlLnNjbSBiL3Rlc3RzL3N0b3JlLnNjbQpp
bmRleCAzMjY2ZmE3YTgyLi5kNzI0ZmYxOGIyIDEwMDY0NAotLS0gYS90ZXN0cy9zdG9yZS5zY20K
KysrIGIvdGVzdHMvc3RvcmUuc2NtCkBAIC0xLDUgKzEsNiBAQAogOzs7IEdOVSBHdWl4IC0tLSBG
dW5jdGlvbmFsIHBhY2thZ2UgbWFuYWdlbWVudCBmb3IgR05VCiA7OzsgQ29weXJpZ2h0IMKpIDIw
MTIsIDIwMTMsIDIwMTQsIDIwMTUsIDIwMTYsIDIwMTcsIDIwMTgsIDIwMTksIDIwMjAsIDIwMjEg
THVkb3ZpYyBDb3VydMOocyA8bHVkb0BnbnUub3JnPgorOzs7IENvcHlyaWdodCDCqSAyMDIxIE1h
eGltZSBEZXZvcyA8bWF4aW1lZGV2b3NAdGVsZW5ldC5iZT4KIDs7OwogOzs7IFRoaXMgZmlsZSBp
cyBwYXJ0IG9mIEdOVSBHdWl4LgogOzs7CkBAIC0xMzgsMTAgKzEzOSwxOSBAQAogICAobGV0ICgo
cCAoYWRkLXRleHQtdG8tc3RvcmUgJXN0b3JlICJoZWxsbyIgImhlbGxvLCB3b3JsZCIpKSkKICAg
ICAodmFsaWQtcGF0aD8gJXN0b3JlIHApKSkKIAorKHRlc3QtYXNzZXJ0ICJhZGQtdGVtcC1yb290
LXZhbGlkLXBhdGg/IGxpdmUiCisgIChsZXQgKChwIChhZGQtdGV4dC10by1zdG9yZSAlc3RvcmUg
ImhlbGxvIiAiaGVsbG8sIHdvcmxkIikpKQorICAgIChhZGQtdGVtcC1yb290LWFuZC12YWxpZC1w
YXRoPyAlc3RvcmUgcCkpKQorCiAodGVzdC1hc3NlcnQgInZhbGlkLXBhdGg/IGZhbHNlIgogICAo
bm90ICh2YWxpZC1wYXRoPyAlc3RvcmUKICAgICAgICAgICAgICAgICAgICAgKHN0cmluZy1hcHBl
bmQgKCVzdG9yZS1wcmVmaXgpICIvIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAobWFrZS1zdHJpbmcgMzIgI1xlKSAiLWZvb2JhciIpKSkpCisodGVzdC1hc3NlcnQgImFkZC10
ZW1wLXJvb3QtYW5kLXZhbGlkLXBhdGg/IGZhbHNlIgorICAobm90IChhZGQtdGVtcC1yb290LWFu
ZC12YWxpZC1wYXRoPworICAgICAgICAgJXN0b3JlCisgICAgICAgICAoc3RyaW5nLWFwcGVuZCAo
JXN0b3JlLXByZWZpeCkgIi8iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgKG1ha2Utc3RyaW5nIDMyICNcZSkgIi1mb29iYXIiKSkpKQogCiAodGVzdC1lcXVhbCAid2l0
aC1zdG9yZSwgbXVsdGlwbGUgdmFsdWVzIiAgICAgICAgOzxodHRwczovL2J1Z3MuZ251Lm9yZy80
MjkxMj4KICAgJygxIDIgMykKLS0gCjIuMzMuMAoK


--=-VRWJSoloRA3mhw8ZjuSt
Content-Disposition: attachment;
	filename*0=0004-store-Add-compatibility-fall-back-for-add-temp-root-.pat;
	filename*1=ch
Content-Type: text/x-patch;
	name="0004-store-Add-compatibility-fall-back-for-add-temp-root-.patch";
	charset="UTF-8"
Content-Transfer-Encoding: base64

RnJvbSA0MzU3OGYzZmJiN2YxODQ4ODFhZTRmMWNhNmI0Y2YzZGY4YjY3YzExIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBNYXhpbWUgRGV2b3MgPG1heGltZWRldm9zQHRlbGVuZXQuYmU+
CkRhdGU6IFRodSwgOSBTZXAgMjAyMSAxODo1OTo0MSArMDIwMApTdWJqZWN0OiBbUEFUQ0ggMDQv
MTBdIHN0b3JlOiBBZGQgY29tcGF0aWJpbGl0eSBmYWxsLWJhY2sgZm9yCiAnYWRkLXRlbXAtcm9v
dC1hbmQtdmFsaWQtcGF0aD8nLgoKKiBndWl4L3N0b3JlLnNjbSAoYWRkLXRlbXAtcm9vdC1hbmQt
dmFsaWQtcGF0aD8pOiBSZW5hbWUgdG8gLi4uCiAgKGFkZC10ZW1wLXJvb3QtYW5kLXZhbGlkLXBh
dGgqPyk6IC4uLiB0aGlzLgogIChhZGQtdGVtcC1yb290LWFuZC12YWxpZC1wYXRoPyk6IE5ldyBw
cm9jZWR1cmUuCi0tLQogZ3VpeC9zdG9yZS5zY20gfCAxNiArKysrKysrKysrKysrKy0tCiAxIGZp
bGUgY2hhbmdlZCwgMTQgaW5zZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQg
YS9ndWl4L3N0b3JlLnNjbSBiL2d1aXgvc3RvcmUuc2NtCmluZGV4IGM5ZjdiOTA1YjcuLmYyZmIy
NDZmY2EgMTAwNjQ0Ci0tLSBhL2d1aXgvc3RvcmUuc2NtCisrKyBiL2d1aXgvc3RvcmUuc2NtCkBA
IC00LDYgKzQsNyBAQAogOzs7IENvcHlyaWdodCDCqSAyMDE5LCAyMDIwIE1hdGhpZXUgT3RoYWNl
aGUgPG0ub3RoYWNlaGVAZ21haWwuY29tPgogOzs7IENvcHlyaWdodCDCqSAyMDIwIEZsb3JpYW4g
UGVseiA8cGVsemZsb3JpYW5AcGVsemZsb3JpYW4uZGU+CiA7OzsgQ29weXJpZ2h0IMKpIDIwMjAg
TGFycy1Eb21pbmlrIEJyYXVuIDxsZGJAbGVpYm5pei1wc3ljaG9sb2d5Lm9yZz4KKzs7OyBDb3B5
cmlnaHQgwqkgMjAyMSBNYXhpbWUgRGV2b3MgPG1heGltZWRldm9zQHRlbGVuZXQuYmU+CiA7OzsK
IDs7OyBUaGlzIGZpbGUgaXMgcGFydCBvZiBHTlUgR3VpeC4KIDs7OwpAQCAtMTI0LDcgKzEyNSw3
IEBACiAgICAgICAgICAgICBlbnN1cmUtcGF0aAogICAgICAgICAgICAgZmluZC1yb290cwogICAg
ICAgICAgICAgYWRkLXRlbXAtcm9vdAotICAgICAgICAgICAgYWRkLXRlbXAtcm9vdC1hbmQtdmFs
aWQtcGF0aD8KKyAgICAgICAgICAgIChhZGQtdGVtcC1yb290LWFuZC12YWxpZC1wYXRoKj8gLiBh
ZGQtdGVtcC1yb290LWFuZC12YWxpZC1wYXRoPykKICAgICAgICAgICAgIGFkZC1pbmRpcmVjdC1y
b290CiAgICAgICAgICAgICBhZGQtcGVybWFuZW50LXJvb3QKICAgICAgICAgICAgIHJlbW92ZS1w
ZXJtYW5lbnQtcm9vdApAQCAtMTQ1OSw5ICsxNDYwLDIwIEBAIFJldHVybiAjdC4iCiAKIChkZWZp
bmUtb3BlcmF0aW9uIChhZGQtdGVtcC1yb290LWFuZC12YWxpZC1wYXRoPyAoc3RvcmUtcGF0aCBw
YXRoKSkKICAgIk1ha2UgUEFUSCBhIHRlbXBvcmFyeSByb290IGZvciB0aGUgZHVyYXRpb24gb2Yg
dGhlIGN1cnJlbnQgc2Vzc2lvbiwKLWFuZCB0ZXN0IGlmIFBBVEggaXMgYSB2YWxpZCBzdG9yZSBw
YXRoIChzZWUgJ3ZhbGlkLXBhdGg/JykuIgorYW5kIHRlc3QgaWYgUEFUSCBpcyBhIHZhbGlkIHN0
b3JlIHBhdGggKHNlZSAndmFsaWQtcGF0aD8nKS4gIFRoaXMgcmVxdWlyZXMKK2EgcmVjZW50IGRh
ZW1vbiB2ZXJzaW9uICgjeDE2NCBvciBsYXRlcik7IHVzZSAnYWRkLXRlbXAtcm9vdC1hbmQtdmFs
aWQtcGF0aCo/JworZm9yIGNvbXBhdGliaWxpdHkuIgogICBib29sZWFuKQogCisoZGVmaW5lIChh
ZGQtdGVtcC1yb290LWFuZC12YWxpZC1wYXRoKj8gc3RvcmUgcGF0aCkKKyAgIk1ha2UgUEFUSCBh
IHRlbXBvcmFyeSByb290IGZvciB0aGUgZHVyYXRpb24gb2YgdGhlIGN1cnJlbnQgc2Vzc2lvbiwK
K2FuZCB0ZXN0IGlmIFBBVEggaXMgYSB2YWxpZCBzdG9yZSBwYXRoIChzZWUgJ3ZhbGlkLXBhdGg/
JykuIgorICAoaWYgKD49IChzdG9yZS1jb25uZWN0aW9uLW1pbm9yLXZlcnNpb24gc3RvcmUpICN4
NjQpCisgICAgICAoYWRkLXRlbXAtcm9vdC1hbmQtdmFsaWQtcGF0aD8gc3RvcmUgcGF0aCkKKyAg
ICAgIChiZWdpbgorICAgICAgICAoYWRkLXRlbXAtcm9vdCBzdG9yZSBwYXRoKQorICAgICAgICAo
dmFsaWQtcGF0aD8gc3RvcmUgcGF0aCkpKSkKKwogKGRlZmluZS1vcGVyYXRpb24gKGFkZC1pbmRp
cmVjdC1yb290IChzdHJpbmcgZmlsZS1uYW1lKSkKICAgIk1ha2UgdGhlIHN5bWxpbmsgRklMRS1O
QU1FIGFuIGluZGlyZWN0IHJvb3QgZm9yIHRoZSBnYXJiYWdlIGNvbGxlY3RvcjoKIHdoYXRldmVy
IHN0b3JlIGl0ZW0gRklMRS1OQU1FIHBvaW50cyB0byB3aWxsIG5vdCBiZSBjb2xsZWN0ZWQuICBS
ZXR1cm4gI3Qgb24KLS0gCjIuMzMuMAoK


--=-VRWJSoloRA3mhw8ZjuSt
Content-Disposition: attachment;
	filename*0=0005-gexp-Allow-computing-the-hash-of-the-local-file-in-a.pat;
	filename*1=ch
Content-Type: text/x-patch;
	name="0005-gexp-Allow-computing-the-hash-of-the-local-file-in-a.patch";
	charset="UTF-8"
Content-Transfer-Encoding: base64

RnJvbSA3NWNiM2ExZTdiMDBiOTViMmFhMDUzNzNiYzdjMGU4MzY3NjZjOGMwIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBNYXhpbWUgRGV2b3MgPG1heGltZWRldm9zQHRlbGVuZXQuYmU+
CkRhdGU6IFNhdCwgNCBTZXAgMjAyMSAxNTozNTo1MSArMDIwMApTdWJqZWN0OiBbUEFUQ0ggMDUv
MTBdIGdleHA6IEFsbG93IGNvbXB1dGluZyB0aGUgaGFzaCBvZiB0aGUgbG9jYWwgZmlsZSBpbgog
YWR2YW5jZS4KClRoZSBuZXcgZmllbGQgaXMgY3VycmVudGx5IHVudXNlZC4gIFRoZSBmb2xsb3dp
bmcgcGF0Y2hlcyB3aWxsCnBvcHVsYXRlIGFuZCB1c2UgdGhlIGZpZWxkIHRvIHJlZHVjZSB0aGUg
dGltZS10by1kZXJpdmF0aW9uCndoZW4gdGhlIGZpbGUgaXMgYWxyZWFkeSBpbnRlcm5lZCBpbiB0
aGUgc3RvcmUuCgoqIGd1aXgvZ2V4cC5zY20KICAoPGxvY2FsLWZpbGU+KTogQWRkIHNoYTI1NiBm
aWVsZC4KICAoJWxvY2FsLWZpbGUpOiBBZGQgc2hhMjU2IGFyZ3VtZW50IGZvciBwb3B1bGF0aW5n
IHRoZSBmaWVsZC4KICAobG9jYWwtZmlsZS1jb21waWxlcik6IEFkanVzdCAnbWF0Y2gnIGV4cHJl
c3Npb24uCi0tLQogZ3VpeC9nZXhwLnNjbSB8IDEyICsrKysrKysrLS0tLQogMSBmaWxlIGNoYW5n
ZWQsIDggaW5zZXJ0aW9ucygrKSwgNCBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9ndWl4L2dl
eHAuc2NtIGIvZ3VpeC9nZXhwLnNjbQppbmRleCBmM2QyNzhiM2U2Li5hNjMzOTg0Njg4IDEwMDY0
NAotLS0gYS9ndWl4L2dleHAuc2NtCisrKyBiL2d1aXgvZ2V4cC5zY20KQEAgLTQxOSwxMyArNDE5
LDE2IEBAIEhlcmUgVEFSR0VUIGlzIGJvdW5kIHRvIHRoZSBjcm9zcy1jb21waWxhdGlvbiB0cmlw
bGV0IG9yICNmLiIKIDs7IEEgbG9jYWwgZmlsZSBuYW1lLiAgRklMRSBpcyB0aGUgZmlsZSBuYW1l
IHRoZSB1c2VyIGVudGVyZWQsIHdoaWNoIGNhbiBiZSBhCiA7OyByZWxhdGl2ZSBmaWxlIG5hbWUs
IGFuZCBBQlNPTFVURSBpcyBhIHByb21pc2UgdGhhdCBjb21wdXRlcyBpdHMgY2Fub25pY2FsCiA7
OyBhYnNvbHV0ZSBmaWxlIG5hbWUuICBXZSBrZWVwIGl0IGluIGEgcHJvbWlzZSB0byBjb21wdXRl
IGl0IGxhemlseSBhbmQgYXZvaWQKLTs7IHJlcGVhdGVkICdzdGF0JyBjYWxscy4KKzs7IHJlcGVh
dGVkICdzdGF0JyBjYWxscy4gIEFsbG93IGNvbXB1dGluZyB0aGUgaGFzaCBvZiB0aGUgZmlsZSBp
biBhZHZhbmNlLAorOzsgdG8gYXZvaWQgaGF2aW5nIHRvIHNlbmQgdGhlIGZpbGUgdG8gdGhlIGRh
ZW1vbiB3aGVuIGl0IGlzIGFscmVhZHkgaW50ZXJuZWQKKzs7IGluIHRoZSBzdG9yZS4KIChkZWZp
bmUtcmVjb3JkLXR5cGUgPGxvY2FsLWZpbGU+Ci0gICglJWxvY2FsLWZpbGUgZmlsZSBhYnNvbHV0
ZSBuYW1lIHJlY3Vyc2l2ZT8gc2VsZWN0PykKKyAgKCUlbG9jYWwtZmlsZSBmaWxlIGFic29sdXRl
IG5hbWUgc2hhMjU2IHJlY3Vyc2l2ZT8gc2VsZWN0PykKICAgbG9jYWwtZmlsZT8KICAgKGZpbGUg
ICAgICAgbG9jYWwtZmlsZS1maWxlKSAgICAgICAgICAgICAgICAgICAgO3N0cmluZwogICAoYWJz
b2x1dGUgICAlbG9jYWwtZmlsZS1hYnNvbHV0ZS1maWxlLW5hbWUpICAgICA7cHJvbWlzZSBzdHJp
bmcKICAgKG5hbWUgICAgICAgbG9jYWwtZmlsZS1uYW1lKSAgICAgICAgICAgICAgICAgICAgO3N0
cmluZworICAoc2hhMjU2ICAgICBsb2NhbC1maWxlLXNoYTI1NikgICAgICAgICAgICAgICAgICA7
c2hhMjU2IGJ5dGV2ZWN0b3IgfCAjZgogICAocmVjdXJzaXZlPyBsb2NhbC1maWxlLXJlY3Vyc2l2
ZT8pICAgICAgICAgICAgICA7Qm9vbGVhbgogICAoc2VsZWN0PyAgICBsb2NhbC1maWxlLXNlbGVj
dD8pKSAgICAgICAgICAgICAgICA7c3RyaW5nIHN0YXQgLT4gQm9vbGVhbgogCkBAIC00MzQsNiAr
NDM3LDcgQEAgSGVyZSBUQVJHRVQgaXMgYm91bmQgdG8gdGhlIGNyb3NzLWNvbXBpbGF0aW9uIHRy
aXBsZXQgb3IgI2YuIgogKGRlZmluZSogKCVsb2NhbC1maWxlIGZpbGUgcHJvbWlzZSAjOm9wdGlv
bmFsIChuYW1lIChiYXNlbmFtZSBmaWxlKSkKICAgICAgICAgICAgICAgICAgICAgICAjOmtleQog
ICAgICAgICAgICAgICAgICAgICAgIChsaXRlcmFsPyAjdCkgbG9jYXRpb24KKyAgICAgICAgICAg
ICAgICAgICAgICBzaGEyNTYKICAgICAgICAgICAgICAgICAgICAgICByZWN1cnNpdmU/IChzZWxl
Y3Q/IHRydWUpKQogICA7OyBUaGlzIGludGVybWVkaWF0ZSBwcm9jZWR1cmUgaXMgcGFydCBvZiBv
dXIgQUJJLCBidXQgdGhlIHVuZGVybHlpbmcKICAgOzsgJSVMT0NBTC1GSUxFIGlzIG5vdC4KQEAg
LTQ0MSw3ICs0NDUsNyBAQCBIZXJlIFRBUkdFVCBpcyBib3VuZCB0byB0aGUgY3Jvc3MtY29tcGls
YXRpb24gdHJpcGxldCBvciAjZi4iCiAgICAgKHdhcm5pbmcgKGFuZD0+IGxvY2F0aW9uIHNvdXJj
ZS1wcm9wZXJ0aWVzLT5sb2NhdGlvbikKICAgICAgICAgICAgICAoR18gInJlc29sdmluZyAnfmEn
IHJlbGF0aXZlIHRvIGN1cnJlbnQgZGlyZWN0b3J5fiUiKQogICAgICAgICAgICAgIGZpbGUpKQot
ICAoJSVsb2NhbC1maWxlIGZpbGUgcHJvbWlzZSBuYW1lIHJlY3Vyc2l2ZT8gc2VsZWN0PykpCisg
ICglJWxvY2FsLWZpbGUgZmlsZSBwcm9taXNlIG5hbWUgc2hhMjU2IHJlY3Vyc2l2ZT8gc2VsZWN0
PykpCiAKIChkZWZpbmUgKGFic29sdXRlLWZpbGUtbmFtZSBmaWxlIGRpcmVjdG9yeSkKICAgIlJl
dHVybiB0aGUgY2Fub25pY2FsIGFic29sdXRlIGZpbGUgbmFtZSBmb3IgRklMRSwgd2hpY2ggbGl2
ZXMgaW4gdGhlCkBAIC01MTcsNyArNTIxLDcgQEAgYXBwZWFycy4iCiAoZGVmaW5lLWdleHAtY29t
cGlsZXIgKGxvY2FsLWZpbGUtY29tcGlsZXIgKGZpbGUgPGxvY2FsLWZpbGU+KSBzeXN0ZW0gdGFy
Z2V0KQogICA7OyAiQ29tcGlsZSIgRklMRSBieSBhZGRpbmcgaXQgdG8gdGhlIHN0b3JlLgogICAo
bWF0Y2ggZmlsZQotICAgICgoJCA8bG9jYWwtZmlsZT4gZmlsZSAoPSBmb3JjZSBhYnNvbHV0ZSkg
bmFtZSByZWN1cnNpdmU/IHNlbGVjdD8pCisgICAgKCgkIDxsb2NhbC1maWxlPiBmaWxlICg9IGZv
cmNlIGFic29sdXRlKSBuYW1lIHNoYTI1NiByZWN1cnNpdmU/IHNlbGVjdD8pCiAgICAgIDs7IENh
bm9uaWNhbGl6ZSBGSUxFIHNvIHRoYXQgaWYgaXQncyBhIHN5bWxpbmssIGl0IGlzIHJlc29sdmVk
LiAgRmFpbGluZwogICAgICA7OyB0byBkbyB0aGF0LCB3aGVuIFJFQ1VSU0lWRT8gaXMgI3QsIHdl
IGNvdWxkIGVuZCB1cCBjcmVhdGluZyBhIGRhbmdsaW5nCiAgICAgIDs7IHN5bWxpbmsgaW4gdGhl
IHN0b3JlLCBhbmQgd2hlbiBSRUNVUlNJVkU/IGlzICNmICdhZGQtdG8tc3RvcmUnIHdvdWxkCi0t
IAoyLjMzLjAKCg==


--=-VRWJSoloRA3mhw8ZjuSt
Content-Disposition: attachment;
	filename="0006-gexp-Allow-overriding-the-absolute-file-name.patch"
Content-Type: text/x-patch;
	name="0006-gexp-Allow-overriding-the-absolute-file-name.patch";
	charset="UTF-8"
Content-Transfer-Encoding: base64

RnJvbSBkNjQ3ZmQ3MTNiMGE5ZTJiMWIxYmNhY2ZhOTU0NmRhOWNlMjNjNjkwIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBNYXhpbWUgRGV2b3MgPG1heGltZWRldm9zQHRlbGVuZXQuYmU+
CkRhdGU6IFNhdCwgNCBTZXAgMjAyMSAxNjoyNToyMiArMDIwMApTdWJqZWN0OiBbUEFUQ0ggMDYv
MTBdIGdleHA6IEFsbG93IG92ZXJyaWRpbmcgdGhlIGFic29sdXRlIGZpbGUgbmFtZS4KClRoaXMg
d2lsbCBiZSB1c2VkIGJ5IHRoZSBuZXh0IHBhdGNoIHRvIGltcGxlbWVudCBzZWFyY2gtcGF0Y2gg
aW4KdGVybXMgb2YgbG9jYWwtZmlsZS4KCiogZ3VpeC9nZXhwLnNjbQogIChwcmVjYW5vbmljYWxp
emVkLWZpbGUtbmFtZSk6IE5ldyBtYWNyby4KICAobG9jYWwtZmlsZSk6IFVzZSB0aGUgYWJzb2x1
dGUgZmlsZSBuYW1lIGZyb20gcHJlY2Fub25pY2FsaXplZC1maWxlLW5hbWUKICB3aGVuIGF2YWls
YWJsZS4KLS0tCiBndWl4L2dleHAuc2NtIHwgMTIgKysrKysrKysrKystCiAxIGZpbGUgY2hhbmdl
ZCwgMTEgaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbigtKQoKZGlmZiAtLWdpdCBhL2d1aXgvZ2V4
cC5zY20gYi9ndWl4L2dleHAuc2NtCmluZGV4IGE2MzM5ODQ2ODguLmM2OWU0YWEyOTkgMTAwNjQ0
Ci0tLSBhL2d1aXgvZ2V4cC5zY20KKysrIGIvZ3VpeC9nZXhwLnNjbQpAQCAtNTEsNiArNTEsNyBA
QAogICAgICAgICAgICAgZ2V4cC1pbnB1dC1vdXRwdXQKICAgICAgICAgICAgIGdleHAtaW5wdXQt
bmF0aXZlPwogCisgICAgICAgICAgICBwcmVjYW5vbmljYWxpemVkLWZpbGUtbmFtZQogICAgICAg
ICAgICAgYXNzdW1lLXZhbGlkLWZpbGUtbmFtZQogICAgICAgICAgICAgbG9jYWwtZmlsZQogICAg
ICAgICAgICAgbG9jYWwtZmlsZT8KQEAgLTQ2Myw2ICs0NjQsMTIgQEAgdGhlIGdpdmVuIGZpbGUg
bmFtZSBpcyB2YWxpZCwgZXZlbiBpZiBpdCdzIG5vdCBhIHN0cmluZyBsaXRlcmFsLCBhbmQgdGh1
cyBub3QKIHdhcm4gYWJvdXQgaXQuIgogICBmaWxlKQogCisoZGVmaW5lLXN5bnRheC1ydWxlIChw
cmVjYW5vbmljYWxpemVkLWZpbGUtbmFtZSBmaWxlIGFic29sdXRlKQorICAiVGhpcyBpcyBhIHN5
bnRhY3RpYyBrZXl3b3JkIHRvIHRlbGwgJ2xvY2FsLWZpbGUnIHRoYXQgaXQgY2FuIGFzc3VtZSB0
aGF0Cit0aGUgZ2l2ZW4gZmlsZSBuYW1lIEZJTEUgaGFzIEFCU09MVVRFIGFzIGFic29sdXRlIGZp
bGUgbmFtZSBhbmQgJ2xvY2FsLWZpbGUnCitkb2VzIG5vdCBuZWVkIHRvIGNvbXB1dGUgdGhlIGFi
c29sdXRlIGZpbGUgbmFtZSBieSBpdHNlbGYuIgorICBhYnNvbHV0ZSkKKwogKGRlZmluZS1zeW50
YXggbG9jYWwtZmlsZQogICAobGFtYmRhIChzKQogICAgICJSZXR1cm4gYW4gb2JqZWN0IHJlcHJl
c2VudGluZyBsb2NhbCBmaWxlIEZJTEUgdG8gYWRkIHRvIHRoZSBzdG9yZTsgdGhpcwpAQCAtNDgx
LDcgKzQ4OCw3IEBAIHdoZXJlIEZJTEUgaXMgdGhlIGVudHJ5J3MgYWJzb2x1dGUgZmlsZSBuYW1l
IGFuZCBTVEFUIGlzIHRoZSByZXN1bHQgb2YKIFRoaXMgaXMgdGhlIGRlY2xhcmF0aXZlIGNvdW50
ZXJwYXJ0IG9mIHRoZSAnaW50ZXJuZWQtZmlsZScgbW9uYWRpYyBwcm9jZWR1cmUuCiBJdCBpcyBp
bXBsZW1lbnRlZCBhcyBhIG1hY3JvIHRvIGNhcHR1cmUgdGhlIGN1cnJlbnQgc291cmNlIGRpcmVj
dG9yeSB3aGVyZSBpdAogYXBwZWFycy4iCi0gICAgKHN5bnRheC1jYXNlIHMgKGFzc3VtZS12YWxp
ZC1maWxlLW5hbWUpCisgICAgKHN5bnRheC1jYXNlIHMgKGFzc3VtZS12YWxpZC1maWxlLW5hbWUg
cHJlY2Fub25pY2FsaXplZC1maWxlLW5hbWUpCiAgICAgICAoKF8gZmlsZSByZXN0IC4uLikKICAg
ICAgICAoc3RyaW5nPyAoc3ludGF4LT5kYXR1bSAjJ2ZpbGUpKQogICAgICAgIDs7IEZJTEUgaXMg
YSBsaXRlcmFsLCBzbyByZXNvbHZlIGl0IHJlbGF0aXZlIHRvIHRoZSBzb3VyY2UgZGlyZWN0b3J5
LgpAQCAtNDk1LDYgKzUwMiw5IEBAIGFwcGVhcnMuIgogICAgICAgICMnKCVsb2NhbC1maWxlIGZp
bGUKICAgICAgICAgICAgICAgICAgICAgICAoZGVsYXkgKGFic29sdXRlLWZpbGUtbmFtZSBmaWxl
IChnZXRjd2QpKSkKICAgICAgICAgICAgICAgICAgICAgICByZXN0IC4uLikpCisgICAgICAoKF8g
KHByZWNhbm9uaWNhbGl6ZWQtZmlsZS1uYW1lIGZpbGUgYWJzb2x1dGUpIHJlc3QgLi4uKQorICAg
ICAgIDs7IFVzZSB0aGUgZ2l2ZW4gZmlsZSBuYW1lIEFCU09MVVRFIGFzIGFic29sdXRlIGZpbGUg
bmFtZS4KKyAgICAgICAjJyglbG9jYWwtZmlsZSBmaWxlIChkZWxheSBhYnNvbHV0ZSkgcmVzdCAu
Li4pKQogICAgICAgKChfIGZpbGUgcmVzdCAuLi4pCiAgICAgICAgOzsgUmVzb2x2ZSBGSUxFIHJl
bGF0aXZlIHRvIHRoZSBjdXJyZW50IGRpcmVjdG9yeS4KICAgICAgICAod2l0aC1zeW50YXggKChs
b2NhdGlvbiAoZGF0dW0tPnN5bnRheCBzIChzeW50YXgtc291cmNlIHMpKSkpCi0tIAoyLjMzLjAK
Cg==


--=-VRWJSoloRA3mhw8ZjuSt
Content-Disposition: attachment;
	filename*0=0007-packages-Compute-the-hash-of-patches-in-advance-when.pat;
	filename*1=ch
Content-Type: text/x-patch;
	name="0007-packages-Compute-the-hash-of-patches-in-advance-when.patch";
	charset="UTF-8"
Content-Transfer-Encoding: base64

RnJvbSA2NjI4Y2NkYTM5NjI0MzQ2ZTdkZjdkNjYwZjgwNWI2OTA2YzNiMWQwIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBNYXhpbWUgRGV2b3MgPG1heGltZWRldm9zQHRlbGVuZXQuYmU+
CkRhdGU6IFNhdCwgNCBTZXAgMjAyMSAxNzoyNTo1OCArMDIwMApTdWJqZWN0OiBbUEFUQ0ggMDcv
MTBdIHBhY2thZ2VzOiBDb21wdXRlIHRoZSBoYXNoIG9mIHBhdGNoZXMgaW4gYWR2YW5jZSB3aGVu
CiBwb3NzaWJsZS4KCiogZ251L3BhY2thZ2VzLnNjbQogIChzZWFyY2gtcGF0Y2gpOiBSZW5hbWUg
dG8gLi4uCiAgKCVzZWFyY2gtcGF0Y2gpOiAuLi4gdGhpcy4KICAodHJ5LXNlYXJjaC1wYXRjaCk6
IE5ldyBwcm9jZWR1cmUsIGV4dHJhY3RlZCBmcm9tIC4uLgogICglc2VhcmNoLXBhdGNoKTogLi4u
IHRoaXMgcHJvY2VkdXJlLgogICglbG9jYWwtcGF0Y2gtZmlsZSk6IE5ldyBwcm9jZWR1cmUuCiAg
KHRydWUpOiBOZXcgcHJvY2VkdXJlLgogIChzZWFyY2gtcGF0Y2gpOiBOZXcgbWFjcm8sIGJlaGF2
aW5nIGxpa2UgJXNlYXJjaC1wYXRjaCwgYnV0IGNvbXB1dGluZyB0aGUKICBoYXNoIGF0IGV4cGFu
c2lvbiB0aW1lIHdoZW4gcG9zc2libGUuCiogZ251L3BhY2thZ2VzL2Nocm9taXVtLnNjbQogICgl
Z3VpeC1wYXRjaGVzKTogVXNlIHNlYXJjaC1wYXRjaGVzIGluc3RlYWQgb2YgbG9jYWwtZmlsZSAr
CiAgYXNzdW1lLXZhbGlkLWZpbGUtbmFtZSArIHNlYXJjaC1wYXRjaC4KKiBnbnUvcGFja2FnZXMv
Z251emlsbGEuc2NtCiAgKGljZWNhdC1zb3VyY2UpW2dudXppbGxhLWZpeGVzLXBhdGNoXTogVXNl
IHNlYXJjaC1wYXRjaCBpbnN0ZWFkIG9mCiAgbG9jYWwtZmlsZSArIGFzc3VsZS12YWxpZC1maWxl
LW5hbWUgKyBzZWFyY2gtcGF0Y2guCiAgKGljZWNhdC1zb3VyY2UpW21ha2VpY2VjYXQtcGF0Y2hd
OiBMaWtld2lzZS4KKiBnbnUvcGFja2FnZXMvZW1iZWRkZWQuc2NtCiAgKGdjYy1hcm0tbm9uZS1l
YWJpLTQuOSlbc291cmNlXXtwYXRjaGVzfTogRXhwZWN0IHBhdGNoZXMgdG8gYmUKICBsb2NhbC1m
aWxlIG9iamVjdHMgaW5zdGVhZCBvZiBzdHJpbmdzLgogIG9mIHN0cmluZ3MuCiogZ3VpeC9saW50
LnNjbSAoY2hlY2stcGF0Y2gtZmlsZS1uYW1lcyk6IEFsbG93IGxvY2FsLWZpbGUgb2JqZWN0cy4K
LS0tCiBnbnUvcGFja2FnZXMuc2NtICAgICAgICAgIHwgNDIgKysrKysrKysrKysrKysrKysrKysr
KysrKysrKysrKysrKysrKy0tCiBnbnUvcGFja2FnZXMvY2hyb21pdW0uc2NtIHwgIDQgKy0tLQog
Z251L3BhY2thZ2VzL2VtYmVkZGVkLnNjbSB8ICAzICsrLQogZ251L3BhY2thZ2VzL2dudXppbGxh
LnNjbSB8ICA4ICsrLS0tLS0tCiBndWl4L2xpbnQuc2NtICAgICAgICAgICAgIHwgMjggKysrKysr
KysrKysrKysrKy0tLS0tLS0tLS0KIDUgZmlsZXMgY2hhbmdlZCwgNjIgaW5zZXJ0aW9ucygrKSwg
MjMgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvZ251L3BhY2thZ2VzLnNjbSBiL2dudS9wYWNr
YWdlcy5zY20KaW5kZXggY2NmYzgzZGQxMS4uZjU1NTJlNWE5YiAxMDA2NDQKLS0tIGEvZ251L3Bh
Y2thZ2VzLnNjbQorKysgYi9nbnUvcGFja2FnZXMuc2NtCkBAIC00LDYgKzQsNyBAQAogOzs7IENv
cHlyaWdodCDCqSAyMDE0IEVyaWMgQmF2aWVyIDxiYXZpZXJAbWVtYmVyLmZzZi5vcmc+CiA7Ozsg
Q29weXJpZ2h0IMKpIDIwMTYsIDIwMTcgQWxleCBLb3N0IDxhbGV6b3N0QGdtYWlsLmNvbT4KIDs7
OyBDb3B5cmlnaHQgwqkgMjAxNiBNYXRoaWV1IExpcnppbiA8bXRobEBnbnUub3JnPgorOzs7IENv
cHlyaWdodCDCqSAyMDIxIE1heGltZSBEZXZvcyA8bWF4aW1lZGV2b3NAdGVsZW5ldC5iZT4KIDs7
OwogOzs7IFRoaXMgZmlsZSBpcyBwYXJ0IG9mIEdOVSBHdWl4LgogOzs7CkBAIC0yMSwxMSArMjIs
MTMgQEAKIDs7OyBhbG9uZyB3aXRoIEdOVSBHdWl4LiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cu
Z251Lm9yZy9saWNlbnNlcy8+LgogCiAoZGVmaW5lLW1vZHVsZSAoZ251IHBhY2thZ2VzKQorICAj
OnVzZS1tb2R1bGUgKGd1aXggZ2V4cCkKICAgIzp1c2UtbW9kdWxlIChndWl4IHBhY2thZ2VzKQog
ICAjOnVzZS1tb2R1bGUgKGd1aXggdWkpCiAgICM6dXNlLW1vZHVsZSAoZ3VpeCB1dGlscykKICAg
Izp1c2UtbW9kdWxlIChndWl4IGRpYWdub3N0aWNzKQogICAjOnVzZS1tb2R1bGUgKGd1aXggZGlz
Y292ZXJ5KQorICAjOnVzZS1tb2R1bGUgKGd1aXggaGFzaCkKICAgIzp1c2UtbW9kdWxlIChndWl4
IG1lbW9pemF0aW9uKQogICAjOnVzZS1tb2R1bGUgKChndWl4IGJ1aWxkIHV0aWxzKQogICAgICAg
ICAgICAgICAgICM6c2VsZWN0ICgocGFja2FnZS1uYW1lLT5uYW1lK3ZlcnNpb24KQEAgLTkwLDEy
ICs5Myw0NyBAQAogICAiU2VhcmNoIHRoZSBhdXhpbGlhcnkgRklMRS1OQU1FLiAgUmV0dXJuICNm
IGlmIG5vdCBmb3VuZC4iCiAgIChzZWFyY2gtcGF0aCAoJWF1eGlsaWFyeS1maWxlcy1wYXRoKSBm
aWxlLW5hbWUpKQogCi0oZGVmaW5lIChzZWFyY2gtcGF0Y2ggZmlsZS1uYW1lKQorKGRlZmluZSAo
dHJ5LXNlYXJjaC1wYXRjaCBmaWxlLW5hbWUpCisgICJTZWFyY2ggdGhlIHBhdGNoIEZJTEUtTkFN
RS4gIFJldHVybiAjZiBpZiBub3QgZm91bmQuIgorICAoc2VhcmNoLXBhdGggKCVwYXRjaC1wYXRo
KSBmaWxlLW5hbWUpKQorCisoZGVmaW5lICglc2VhcmNoLXBhdGNoIGZpbGUtbmFtZSkKICAgIlNl
YXJjaCB0aGUgcGF0Y2ggRklMRS1OQU1FLiAgUmFpc2UgYW4gZXJyb3IgaWYgbm90IGZvdW5kLiIK
LSAgKG9yIChzZWFyY2gtcGF0aCAoJXBhdGNoLXBhdGgpIGZpbGUtbmFtZSkKKyAgKG9yICh0cnkt
c2VhcmNoLXBhdGNoIGZpbGUtbmFtZSkKICAgICAgIChyYWlzZSAoZm9ybWF0dGVkLW1lc3NhZ2Ug
KEdfICJ+YTogcGF0Y2ggbm90IGZvdW5kIikKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZmlsZS1uYW1lKSkpKQogCisoZGVmaW5lICglbG9jYWwtcGF0Y2gtZmlsZSBmaWxlLW5hbWUg
aGFzaCkKKyAgIlNlYXJjaCB0aGUgcGF0Y2ggRklMRS1OQU1FLCB3aGljaCBpcyBrbm93biB0byBo
YXZlIEhBU0guIgorICAobG9jYWwtZmlsZSAocHJlY2Fub25pY2FsaXplZC1maWxlLW5hbWUgZmls
ZS1uYW1lICglc2VhcmNoLXBhdGNoIGZpbGUtbmFtZSkpCisgICAgICAgICAgICAgICM6c2hhMjU2
IGhhc2ggIzpyZWN1cnNpdmU/ICN0KSkKKworKGRlZmluZSB0cnVlIChjb25zdCAjdCkpCisKKyhk
ZWZpbmUtc3ludGF4IHNlYXJjaC1wYXRjaAorICAobGFtYmRhIChzKQorICAgICJTZWFyY2ggdGhl
IHBhdGNoIEZJTEUtTkFNRSBhbmQgY29tcHV0ZSBpdHMgaGFzaCBhdCBleHBhbnNpb24gdGltZQor
aWYgcG9zc2libGUuICBSZXR1cm4gI2YgaWYgbm90IGZvdW5kLiIKKyAgICAoc3ludGF4LWNhc2Ug
cyAoKQorICAgICAgKChfIGZpbGUtbmFtZSkKKyAgICAgICAoc3RyaW5nPyAoc3ludGF4LT5kYXR1
bSAjJ2ZpbGUtbmFtZSkpCisgICAgICAgOzsgRklMRS1OQU1FIGlzIGEgY29uc3RhbnQgc3RyaW5n
LCBzbyB0aGUgaGFzaCBjYW4gYmUgY29tcHV0ZWQKKyAgICAgICA7OyBpbiBhZHZhbmNlLgorICAg
ICAgIChsZXQgKChwYXRjaCAodHJ5LXNlYXJjaC1wYXRjaCAoc3ludGF4LT5kYXR1bSAjJ2ZpbGUt
bmFtZSkpKSkKKyAgICAgICAgIChpZiBwYXRjaAorICAgICAgICAgICAgICNgKCVsb2NhbC1wYXRj
aC1maWxlIGZpbGUtbmFtZSAjLChmaWxlLWhhc2gqIHBhdGNoICM6c2VsZWN0PyB0cnVlKSkKKyAg
ICAgICAgICAgICAoYmVnaW4KKyAgICAgICAgICAgICAgICh3YXJuaW5nIChzb3VyY2UtcHJvcGVy
dGllcy0+bG9jYXRpb24KKyAgICAgICAgICAgICAgICAgICAgICAgICAoc3ludGF4LXNvdXJjZSAj
J2ZpbGUtbmFtZSkpCisgICAgICAgICAgICAgICAgICAgICAgICAoR18gIn5hOiBwYXRjaCBub3Qg
Zm91bmQgYXQgZXhwYW5zaW9uIHRpbWUiKQorICAgICAgICAgICAgICAgICAgICAgICAgKHN5bnRh
eC0+ZGF0dW0gIydpbGUtbmFtZSkpCisgICAgICAgICAgICAgICAjJyglc2VhcmNoLXBhdGNoIGZp
bGUtbmFtZSkpKSkpCisgICAgICA7OyBGSUxFLU5BTUUgaXMgdmFyaWFibGUsIHNvIHRoZSBoYXNo
IGNhbm5vdCBiZSBwcmUtY29tcHV0ZWQuCisgICAgICAoKF8gZmlsZS1uYW1lKSAjJyglc2VhcmNo
LXBhdGNoIGZpbGUtbmFtZSkpCisgICAgICA7OyBzZWFyY2gtcGF0Y2ggaXMgYmVpbmcgdXNlZCB1
c2VkIGluIGEgY29uc3RydWN0IGxpa2UKKyAgICAgIDs7IChtYXAgc2VhcmNoLXBhdGNoIC4uLiku
CisgICAgICAoaWQgKGlkZW50aWZpZXI/ICMnaWQpICMnJXNlYXJjaC1wYXRjaCkpKSkKKwogKGRl
ZmluZS1zeW50YXgtcnVsZSAoc2VhcmNoLXBhdGNoZXMgZmlsZS1uYW1lIC4uLikKICAgIlJldHVy
biB0aGUgbGlzdCBvZiBhYnNvbHV0ZSBmaWxlIG5hbWVzIGNvcnJlc3BvbmRpbmcgdG8gZWFjaAog
RklMRS1OQU1FIGZvdW5kIGluICVQQVRDSC1QQVRILiIKZGlmZiAtLWdpdCBhL2dudS9wYWNrYWdl
cy9jaHJvbWl1bS5zY20gYi9nbnUvcGFja2FnZXMvY2hyb21pdW0uc2NtCmluZGV4IDI2YWUxZTI1
NTAuLmNmNDE5Y2Y0MWIgMTAwNjQ0Ci0tLSBhL2dudS9wYWNrYWdlcy9jaHJvbWl1bS5zY20KKysr
IGIvZ251L3BhY2thZ2VzL2Nocm9taXVtLnNjbQpAQCAtMzUxLDkgKzM1MSw3IEBACiAgICAgICAi
MHdiY2Jqemg1YWs0bmNpYWhxdzR5dnhjNHg4aWs0eDBpejloNGtmeTBtMDExc3h6eTE3NCIpKSkp
CiAKIChkZWZpbmUgJWd1aXgtcGF0Y2hlcwotICAobGlzdCAobG9jYWwtZmlsZQotICAgICAgICAg
KGFzc3VtZS12YWxpZC1maWxlLW5hbWUKLSAgICAgICAgICAoc2VhcmNoLXBhdGNoICJ1bmdvb2ds
ZWQtY2hyb21pdW0tZXh0ZW5zaW9uLXNlYXJjaC1wYXRoLnBhdGNoIikpKSkpCisgIChzZWFyY2gt
cGF0Y2hlcyAidW5nb29nbGVkLWNocm9taXVtLWV4dGVuc2lvbi1zZWFyY2gtcGF0aC5wYXRjaCIp
KQogCiA7OyBUaGlzIGlzIGEgc291cmNlICdzbmlwcGV0JyB0aGF0IGRvZXMgdGhlIGZvbGxvd2lu
ZzoKIDs7ICopIEFwcGxpZXMgdmFyaW91cyBwYXRjaGVzIGZvciB1bmJ1bmRsaW5nIHB1cnBvc2Vz
IGFuZCBsaWJzdGRjKysgY29tcGF0aWJpbGl0eS4KZGlmZiAtLWdpdCBhL2dudS9wYWNrYWdlcy9l
bWJlZGRlZC5zY20gYi9nbnUvcGFja2FnZXMvZW1iZWRkZWQuc2NtCmluZGV4IGYzODhjMTFjM2Qu
LjgyNmY1NjU1YzMgMTAwNjQ0Ci0tLSBhL2dudS9wYWNrYWdlcy9lbWJlZGRlZC5zY20KKysrIGIv
Z251L3BhY2thZ2VzL2VtYmVkZGVkLnNjbQpAQCAtMzAsNiArMzAsNyBAQAogICAjOnVzZS1tb2R1
bGUgKGd1aXggcGFja2FnZXMpCiAgICM6dXNlLW1vZHVsZSAoZ3VpeCBkb3dubG9hZCkKICAgIzp1
c2UtbW9kdWxlIChndWl4IHN2bi1kb3dubG9hZCkKKyAgIzp1c2UtbW9kdWxlIChndWl4IGdleHAp
CiAgICM6dXNlLW1vZHVsZSAoZ3VpeCBnaXQtZG93bmxvYWQpCiAgICM6dXNlLW1vZHVsZSAoKGd1
aXggbGljZW5zZXMpICM6cHJlZml4IGxpY2Vuc2U6KQogICAjOnVzZS1tb2R1bGUgKGd1aXggYnVp
bGQtc3lzdGVtIGNtYWtlKQpAQCAtOTEsNyArOTIsNyBAQAogICAgICAgICAgOzsgUmVtb3ZlIHRo
ZSBvbmUgcGF0Y2ggdGhhdCBkb2Vzbid0IGFwcGx5IHRvIHRoaXMgNC45IHNuYXBzaG90ICh0aGUK
ICAgICAgICAgIDs7IHBhdGNoIGlzIGZvciA0LjkuNCBhbmQgbGF0ZXIgYnV0IHRoaXMgc3ZuIHNu
YXBzaG90IGlzIG9sZGVyKS4KICAgICAgICAgIChwYXRjaGVzIChyZW1vdmUgKGxhbWJkYSAocGF0
Y2gpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgKHN0cmluZz0/IChiYXNlbmFtZSBwYXRj
aCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc3RyaW5nPT8gKGxvY2FsLWZpbGUtbmFt
ZSBwYXRjaCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImdjYy1hcm0t
YnVnLTcxMzk5LnBhdGNoIikpCiAgICAgICAgICAgICAgICAgICAgICAgICAgIChvcmlnaW4tcGF0
Y2hlcyAocGFja2FnZS1zb3VyY2UgeGdjYykpKSkpKQogICAgICAgKG5hdGl2ZS1pbnB1dHMKZGlm
ZiAtLWdpdCBhL2dudS9wYWNrYWdlcy9nbnV6aWxsYS5zY20gYi9nbnUvcGFja2FnZXMvZ251emls
bGEuc2NtCmluZGV4IDU3NmJjMjU4NmYuLmJlNjc0ZGNlOGYgMTAwNjQ0Ci0tLSBhL2dudS9wYWNr
YWdlcy9nbnV6aWxsYS5zY20KKysrIGIvZ251L3BhY2thZ2VzL2dudXppbGxhLnNjbQpAQCAtNzM2
LDE0ICs3MzYsMTAgQEAgZnJvbSBmb3JjaW5nIEdFWFAtUFJPTUlTRS4iCiAgICAgICAgICAgICAg
KGJhc2UzMgogICAgICAgICAgICAgICAiMDB3czM1NDB4NXdocGljYzVmeDRrOTQ5ZmY3M2NxdmFq
ejZqcDEzYWhuNDl3cWRhZHM0NyIpKSkpCiAKLSAgICAgICAgIDs7ICdzZWFyY2gtcGF0Y2gnIHJl
dHVybnMgZWl0aGVyIGEgdmFsaWQgZmlsZSBuYW1lIG9yICNmLCBzbyB3cmFwIGl0Ci0gICAgICAg
ICA7OyBpbiAnYXNzdW1lLXZhbGlkLWZpbGUtbmFtZScgdG8gYXZvaWQgJ2xvY2FsLWZpbGUnIHdh
cm5pbmdzLgogICAgICAgICAgKGdudXppbGxhLWZpeGVzLXBhdGNoCi0gICAgICAgICAgKGxvY2Fs
LWZpbGUgKGFzc3VtZS12YWxpZC1maWxlLW5hbWUKLSAgICAgICAgICAgICAgICAgICAgICAgKHNl
YXJjaC1wYXRjaCAiaWNlY2F0LXVzZS1vbGRlci1yZXZlYWwtaGlkZGVuLWh0bWwucGF0Y2giKSkp
KQorICAgICAgICAgIChzZWFyY2gtcGF0Y2ggImljZWNhdC11c2Utb2xkZXItcmV2ZWFsLWhpZGRl
bi1odG1sLnBhdGNoIikpCiAgICAgICAgICAobWFrZWljZWNhdC1wYXRjaAotICAgICAgICAgIChs
b2NhbC1maWxlIChhc3N1bWUtdmFsaWQtZmlsZS1uYW1lCi0gICAgICAgICAgICAgICAgICAgICAg
IChzZWFyY2gtcGF0Y2ggImljZWNhdC1tYWtlaWNlY2F0LnBhdGNoIikpKSkpCisgICAgICAgICAg
KHNlYXJjaC1wYXRjaCAiaWNlY2F0LW1ha2VpY2VjYXQucGF0Y2giKSkpCiAKICAgICAob3JpZ2lu
CiAgICAgICAobWV0aG9kIGNvbXB1dGVkLW9yaWdpbi1tZXRob2QpCmRpZmYgLS1naXQgYS9ndWl4
L2xpbnQuc2NtIGIvZ3VpeC9saW50LnNjbQppbmRleCA0MTNiMGI5OTA1Li5mNzA4NDY1ZWQ4IDEw
MDY0NAotLS0gYS9ndWl4L2xpbnQuc2NtCisrKyBiL2d1aXgvbGludC5zY20KQEAgLTQ2LDYgKzQ2
LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V4cC0+YXBwcm94aW1hdGUt
c2V4cCkpCiAgICM6dXNlLW1vZHVsZSAoZ3VpeCBsaWNlbnNlcykKICAgIzp1c2UtbW9kdWxlIChn
dWl4IHJlY29yZHMpCisgICM6dXNlLW1vZHVsZSAoZ3VpeCBnZXhwKQogICAjOnVzZS1tb2R1bGUg
KGd1aXggZ3JhZnRzKQogICAjOnVzZS1tb2R1bGUgKGd1aXggdXBzdHJlYW0pCiAgICM6dXNlLW1v
ZHVsZSAoZ3VpeCB1dGlscykKQEAgLTkzMiw2ICs5MzMsOCBAQCBwYXRjaCBjb3VsZCBub3QgYmUg
Zm91bmQuIgogICAgICAgICAgICAgICAgICAgIChzdGFydHMtd2l0aC1wYWNrYWdlLW5hbWU/IChi
YXNlbmFtZSBwYXRjaCkpKQogICAgICAgICAgICAgICAgICAgKCg/IG9yaWdpbj8gcGF0Y2gpCiAg
ICAgICAgICAgICAgICAgICAgKHN0YXJ0cy13aXRoLXBhY2thZ2UtbmFtZT8gKG9yaWdpbi1hY3R1
YWwtZmlsZS1uYW1lIHBhdGNoKSkpCisgICAgICAgICAgICAgICAgICAoKD8gbG9jYWwtZmlsZT8g
cGF0Y2gpCisgICAgICAgICAgICAgICAgICAgKHN0YXJ0cy13aXRoLXBhY2thZ2UtbmFtZT8gKGxv
Y2FsLWZpbGUtbmFtZSBwYXRjaCkpKQogICAgICAgICAgICAgICAgICAgKF8gICNmKSkgICAgIDtt
dXN0IGJlIHNvbWUgb3RoZXIgZmlsZS1saWtlIG9iamVjdAogICAgICAgICAgICAgICAgIHBhdGNo
ZXMpCiAgICAgICAgICAnKCkKQEAgLTk0NSwxOSArOTQ4LDIyIEBAIHBhdGNoIGNvdWxkIG5vdCBi
ZSBmb3VuZC4iCiAgICAgIChsZXQgKChwcmVmaXggKHN0cmluZy1sZW5ndGggKCVkaXN0cm8tZGly
ZWN0b3J5KSkpCiAgICAgICAgICAgIChtYXJnaW4gKHN0cmluZy1sZW5ndGggImd1aXgtMi4wLjBy
YzMtMTAwMDAtMTIzNDU2Nzg5MC8iKSkKICAgICAgICAgICAgKG1heCAgICA5OSkpCisgICAgICAg
KGRlZmluZSAodGVzdC1wYXRjaC1uYW1lIGZpbGUtbmFtZSkKKyAgICAgICAgIChpZiAoPiAoKyBt
YXJnaW4gKGlmIChzdHJpbmctcHJlZml4PyAoJWRpc3Ryby1kaXJlY3RvcnkpIGZpbGUtbmFtZSkK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgtIChzdHJpbmctbGVuZ3RoIGZpbGUtbmFt
ZSkgcHJlZml4KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHN0cmluZy1sZW5ndGgg
ZmlsZS1uYW1lKSkpCisgICAgICAgICAgICAgICAgbWF4KQorICAgICAgICAgICAgIChtYWtlLXdh
cm5pbmcKKyAgICAgICAgICAgICAgcGFja2FnZQorICAgICAgICAgICAgICAoR18gIn5hOiBmaWxl
IG5hbWUgaXMgdG9vIGxvbmciKQorICAgICAgICAgICAgICAobGlzdCAoYmFzZW5hbWUgZmlsZS1u
YW1lKSkKKyAgICAgICAgICAgICAgIzpmaWVsZCAncGF0Y2gtZmlsZS1uYW1lcykKKyAgICAgICAg
ICAgICAjZikpCiAgICAgICAgKGZpbHRlci1tYXAgKG1hdGNoLWxhbWJkYQogICAgICAgICAgICAg
ICAgICAgICAgKCg/IHN0cmluZz8gcGF0Y2gpCi0gICAgICAgICAgICAgICAgICAgICAgKGlmICg+
ICgrIG1hcmdpbiAoaWYgKHN0cmluZy1wcmVmaXg/ICglZGlzdHJvLWRpcmVjdG9yeSkKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF0
Y2gpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKC0gKHN0cmlu
Zy1sZW5ndGggcGF0Y2gpIHByZWZpeCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAoc3RyaW5nLWxlbmd0aCBwYXRjaCkpKQotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBtYXgpCi0gICAgICAgICAgICAgICAgICAgICAgICAgIChtYWtlLXdhcm5pbmcKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHBhY2thZ2UKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgIChHXyAifmE6IGZpbGUgbmFtZSBpcyB0b28gbG9uZyIpCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAobGlzdCAoYmFzZW5hbWUgcGF0Y2gpKQotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIzpmaWVsZCAncGF0Y2gtZmlsZS1uYW1lcykKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
I2YpKQorICAgICAgICAgICAgICAgICAgICAgICh0ZXN0LXBhdGNoLW5hbWUgcGF0Y2gpKQorICAg
ICAgICAgICAgICAgICAgICAgKCg/IGxvY2FsLWZpbGU/IHBhdGNoKQorICAgICAgICAgICAgICAg
ICAgICAgICh0ZXN0LXBhdGNoLW5hbWUgKGxvY2FsLWZpbGUtYWJzb2x1dGUtZmlsZS1uYW1lIHBh
dGNoKSkpCiAgICAgICAgICAgICAgICAgICAgICAoXyAjZikpCiAgICAgICAgICAgICAgICAgICAg
cGF0Y2hlcykpKSkpCiAKLS0gCjIuMzMuMAoK


--=-VRWJSoloRA3mhw8ZjuSt
Content-Disposition: attachment;
	filename*0=0008-compile-all-compile-Keep-track-of-dependencies-of-co.pat;
	filename*1=ch
Content-Type: text/x-patch;
	name="0008-compile-all-compile-Keep-track-of-dependencies-of-co.patch";
	charset="UTF-8"
Content-Transfer-Encoding: base64

RnJvbSA5M2E0NjVmMzc3OGFhZTAxNDlhODZjNGZjOGRlOTQ0MzVkOGRiY2E2IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBNYXhpbWUgRGV2b3MgPG1heGltZWRldm9zQHRlbGVuZXQuYmU+
CkRhdGU6IFN1biwgNSBTZXAgMjAyMSAxNDowMjozMCArMDIwMApTdWJqZWN0OiBbUEFUQ0ggMDgv
MTBdIGNvbXBpbGUtYWxsLGNvbXBpbGU6IEtlZXAgdHJhY2sgb2YgZGVwZW5kZW5jaWVzIG9mCiBj
b21waWxlZCBtb2R1bGVzLgoKVGhpcyBwYXRjaCBkZWZpbmVzIGEgJ25vdGljZS1kZXBlbmRlbmN5
JyBwcm9jZWR1cmUuCk1hY3JvcyBjYW4gdXNlIHRoaXMgcHJvY2VkdXJlIHRvIGluZm9ybSBidWls
ZC1hdXgvY29tcGlsZS1hbGwuc2NtCnRoYXQgYSBtb2R1bGUgbmVlZHMgdG8gYmUgcmVjb21waWxl
ZCB3aGVuIHNvbWUgZmlsZSBpcyB1cGRhdGVkLgoKKiBndWl4L2J1aWxkL2NvbXBpbGUuc2NtCiAg
KGN1cnJlbnQtZGVwZW5kZW5jeS1pbmZvLCBjdXJyZW50LW91dHB1dC1maWxlKTogTmV3IHBhcmFt
ZXRlcnMuCiAgKG5vdGljZS1kZXBlbmRlbmN5KTogTmV3IHByb2NlZHVyZS4KICAoY29tcGlsZS1m
aWxlcylbYnVpbGRdOiBTZXQgJ291dHB1dC1maWxlJy4gIERlbGV0ZSB0aGUgb2xkIGNvbXBpbGVk
IGZpbGUKICBpZiBuZWNlc3NhcnkuICBSZW1vdmUgb2xkIGRlcGVuZGVuY3kgaW5mb3JtYXRpb24u
CiogYnVpbGQtYXV4L2NvbXBpbGUtYWxsLnNjbTogUG9wdWxhdGUgY3VycmVudC1kZXBlbmRlbmN5
LWluZm8gZnJvbSBhIGZpbGUuCiAgUG9wdWxhdGUgdGhlIGZpbGUgZGVwZW5kZW5jeS1pbmZvLnNj
bSBmcm9tIHRoZSBoYXNoIHRhYmxlLgogIChidWlsZGRpcik6IE5ldyB2YXJpYWJsZS4KICAoZmls
ZS1uZWVkcy1jb21waWxhdGlvbj8pOiBDaGVjayBpZiB0aGUgLmdvIGZpbGUgaXMgb2xkZXIgdGhh
biB0aGUKICBkZXBlbmRlbmNpZXMuCiogLmdpdGlnbm9yZTogSWdub3JlIGRlcGVuZGVuY3ktaW5m
by5zY20uCi0tLQogLmdpdGlnbm9yZSAgICAgICAgICAgICAgICB8ICAxICsKIGJ1aWxkLWF1eC9j
b21waWxlLWFsbC5zY20gfCAzOSArKysrKysrKysrKysrKysrKysrKysrKysrKysrKy0tLS0KIGd1
aXgvYnVpbGQvY29tcGlsZS5zY20gICAgfCA0NSArKysrKysrKysrKysrKysrKysrKysrKysrKysr
KysrKy0tLS0tLS0KIDMgZmlsZXMgY2hhbmdlZCwgNzMgaW5zZXJ0aW9ucygrKSwgMTIgZGVsZXRp
b25zKC0pCgpkaWZmIC0tZ2l0IGEvLmdpdGlnbm9yZSBiLy5naXRpZ25vcmUKaW5kZXggODhmZTI0
NTg2ZC4uZjI0ZWE1ZmMzYiAxMDA2NDQKLS0tIGEvLmdpdGlnbm9yZQorKysgYi8uZ2l0aWdub3Jl
CkBAIC0xNTQsMyArMTU0LDQgQEAgdG1wCiAvZ251L3BhY2thZ2VzL2Jvb3RzdHJhcAogL2dudS9w
YWNrYWdlcy9hdXgtZmlsZXMvZ3VpbGUtZ3VpbGUtbGF1bmNoZXIubwogL2d1aWxlCisvZGVwZW5k
ZW5jeS1pbmZvLnNjbQpkaWZmIC0tZ2l0IGEvYnVpbGQtYXV4L2NvbXBpbGUtYWxsLnNjbSBiL2J1
aWxkLWF1eC9jb21waWxlLWFsbC5zY20KaW5kZXggOWZmYmNlNDNhZC4uOTAyNTI3YjA4MyAxMDA2
NDQKLS0tIGEvYnVpbGQtYXV4L2NvbXBpbGUtYWxsLnNjbQorKysgYi9idWlsZC1hdXgvY29tcGls
ZS1hbGwuc2NtCkBAIC0xLDYgKzEsNyBAQAogOzs7IEdOVSBHdWl4IC0tLSBGdW5jdGlvbmFsIHBh
Y2thZ2UgbWFuYWdlbWVudCBmb3IgR05VCiA7OzsgQ29weXJpZ2h0IMKpIDIwMTYgVGF5bGFuIFVs
cmljaCBCYXnEsXJsxLEvS2FtbWVyIDx0YXlsYW5iYXlpcmxpQGdtYWlsLmNvbT4KIDs7OyBDb3B5
cmlnaHQgwqkgMjAxNiwgMjAxNywgMjAxOSwgMjAyMCwgMjAyMSBMdWRvdmljIENvdXJ0w6hzIDxs
dWRvQGdudS5vcmc+Cis7OzsgQ29weXJpZ2h0IMKpIDIwMjEgTWF4aW1lIERldm9zIDxtYXhpbWVk
ZXZvc0B0ZWxlbmV0LmJlPgogOzs7CiA7OzsgVGhpcyBmaWxlIGlzIHBhcnQgb2YgR05VIEd1aXgu
CiA7OzsKQEAgLTIwLDEyICsyMSwxNSBAQAogKHVzZS1tb2R1bGVzIChpY2UtOSBmb3JtYXQpCiAg
ICAgICAgICAgICAgKGljZS05IG1hdGNoKQogICAgICAgICAgICAgIChpY2UtOSB0aHJlYWRzKQor
ICAgICAgICAgICAgIChpY2UtOSBoYXNoLXRhYmxlKQogICAgICAgICAgICAgIChzcmZpIHNyZmkt
MSkKKyAgICAgICAgICAgICAoc3JmaSBzcmZpLTI2KQogICAgICAgICAgICAgIChndWl4IGJ1aWxk
IGNvbXBpbGUpCiAgICAgICAgICAgICAgKGd1aXggYnVpbGQgdXRpbHMpKQogCiAoZGVmaW5lIGhv
c3QgKGdldGVudiAiaG9zdCIpKQogKGRlZmluZSBzcmNkaXIgKGdldGVudiAic3JjZGlyIikpCiso
ZGVmaW5lIGJ1aWxkZGlyIChnZXRjd2QpKQogCiAoZGVmaW5lIChyZWxhdGl2ZS1maWxlIGZpbGUp
CiAgIChpZiAoc3RyaW5nLXByZWZpeD8gKHN0cmluZy1hcHBlbmQgc3JjZGlyICIvIikgZmlsZSkK
QEAgLTQxLDEwICs0NSwzNSBAQAogICAgICAgICAgKHdpdGhvdXQtZXh0ZW5zaW9uIChzdHJpbmct
ZHJvcC1yaWdodCByZWxhdGl2ZSA0KSkpCiAgICAgKHN0cmluZy1hcHBlbmQgd2l0aG91dC1leHRl
bnNpb24gIi5nbyIpKSkKIAorOzsgUmVhZCBkZXBlbmRlbmN5IGluZm9ybWF0aW9uIGZyb20gcHJl
dmlvdXMgIm1ha2UiIHJ1bnMuCisoY3VycmVudC1kZXBlbmRlbmN5LWluZm8gKG1ha2UtaGFzaC10
YWJsZSkpCisoaWYgKGZpbGUtZXhpc3RzPyAiZGVwZW5kZW5jeS1pbmZvLnNjbSIpCisgICAgKGN1
cnJlbnQtZGVwZW5kZW5jeS1pbmZvCisgICAgIChhbGlzdC0+aGFzaC10YWJsZQorICAgICAgKGNh
bGwtd2l0aC1pbnB1dC1maWxlICJkZXBlbmRlbmN5LWluZm8uc2NtIiByZWFkICM6ZW5jb2Rpbmcg
IlVURi04IikpKQorICAgIChjdXJyZW50LWRlcGVuZGVuY3ktaW5mbyAobWFrZS1oYXNoLXRhYmxl
KSkpCisKKyhkZWZpbmUgKGR1bXAtZGVwZW5kZW5jeS1pbmZvKQorICAiRHVtcCB0aGUgY3VycmVu
dCBkZXBlbmRlbmN5IGluZm9ybWF0aW9uIGZvciB0aGUgbmV4dCBcIm1ha2VcIiBydW4uIgorICAo
Y2FsbC13aXRoLW91dHB1dC1maWxlICJkZXBlbmRlbmN5LWluZm8uc2NtLm5ldyIKKyAgICAobGFt
YmRhIChwb3J0KQorICAgICAgKGRpc3BsYXkgIjs7IFRoaXMgaXMgYXV0by1nZW5lcmF0ZWQgYnkg
YnVpbGQtYXV4L2NvbXBpbGUtYWxsLnNjbSwKKzs7IGRvIG5vdCBtb2RpZnkgbWFudWFsbHkhCisi
IHBvcnQpCisgICAgICAod3JpdGUgKGhhc2gtbWFwLT5saXN0IGNvbnMgKGN1cnJlbnQtZGVwZW5k
ZW5jeS1pbmZvKSkgcG9ydCkpCisgICAgIzplbmNvZGluZyAiVVRGLTgiKQorICAocmVuYW1lLWZp
bGUgImRlcGVuZGVuY3ktaW5mby5zY20ubmV3IiAiZGVwZW5kZW5jeS1pbmZvLnNjbSIpKQorCiAo
ZGVmaW5lIChmaWxlLW5lZWRzLWNvbXBpbGF0aW9uPyBmaWxlKQotICAobGV0ICgoZ28gKHNjbS0+
Z28gZmlsZSkpKQorICAobGV0KiAoKGdvIChzY20tPmdvIGZpbGUpKQorICAgICAgICAgKGV4dHJh
LWRlcGVuZGVuY2llcworICAgICAgICAgIChoYXNoLXJlZiAoY3VycmVudC1kZXBlbmRlbmN5LWlu
Zm8pIChpbi12aWNpbml0eSBidWlsZGRpciBnbykKKyAgICAgICAgICAgICAgICAgICAgJygpKSkp
CiAgICAgKG9yIChub3QgKGZpbGUtZXhpc3RzPyBnbykpCi0gICAgICAgIChmaWxlLW10aW1lPD8g
Z28gZmlsZSkpKSkKKyAgICAgICAgKGZpbGUtbXRpbWU8PyBnbyBmaWxlKQorICAgICAgICAoYW55
IChsYW1iZGEgKGRlcGVuZGVuY3kpCisgICAgICAgICAgICAgICAob3IgKG5vdCAoZmlsZS1leGlz
dHM/IGRlcGVuZGVuY3kpKQorICAgICAgICAgICAgICAgICAgIChmaWxlLW10aW1lPD8gZ28gZGVw
ZW5kZW5jeSkpKSBleHRyYS1kZXBlbmRlbmNpZXMpKSkpCiAKIChkZWZpbmUqIChwYXJhbGxlbC1q
b2ItY291bnQgIzpvcHRpb25hbCAoZmxhZ3MgKGdldGVudiAiTUFLRUZMQUdTIikpKQogICAiUmV0
dXJuIHRoZSBudW1iZXIgb2YgcGFyYWxsZWwgam9icyBhcyBkZXRlcm1pbmVkIGJ5IEZMQUdTLCB0
aGUgZmxhZ3MgcGFzc2VkCkBAIC0xMDksNyArMTM4LDcgQEAgdG8gJ21ha2UnLiIKICAgICAgICAo
bGV0KiAoKHRvLWJ1aWxkICAoZmlsdGVyIGZpbGUtbmVlZHMtY29tcGlsYXRpb24/IGZpbGVzKSkK
ICAgICAgICAgICAgICAgKHByb2Nlc3NlZCAoKyBwcm9jZXNzZWQKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAoLSAobGVuZ3RoIGZpbGVzKSAobGVuZ3RoIHRvLWJ1aWxkKSkpKSkKLSAgICAg
ICAgIChjb21waWxlLWZpbGVzIHNyY2RpciAoZ2V0Y3dkKSB0by1idWlsZAorICAgICAgICAgKGNv
bXBpbGUtZmlsZXMgc3JjZGlyIGJ1aWxkZGlyIHRvLWJ1aWxkCiAgICAgICAgICAgICAgICAgICAg
ICAgICAjOndvcmtlcnMgKHBhcmFsbGVsLWpvYi1jb3VudCopCiAgICAgICAgICAgICAgICAgICAg
ICAgICAjOmhvc3QgaG9zdAogICAgICAgICAgICAgICAgICAgICAgICAgIzpyZXBvcnQtbG9hZCAo
bGFtYmRhIChmaWxlIHRvdGFsIGNvbXBsZXRlZCkKQEAgLTEyNyw4ICsxNTYsMTAgQEAgdG8gJ21h
a2UnLiIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICgqIDIgcHJvY2Vzc2VkKSkKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqIDIgZ3JhbmQtdG90YWwp
KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgKHNjbS0+Z28gZmlsZSkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgKGZvcmNlLW91dHB1dCkpKSkpKQorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIChmb3JjZS1vdXRwdXQpKSkpKQorICAgICAgIChkdW1w
LWRlcGVuZGVuY3ktaW5mbykpCiAgICAgIChsYW1iZGEgXworICAgICAgIChkdW1wLWRlcGVuZGVu
Y3ktaW5mbykKICAgICAgICAocHJpbWl0aXZlLWV4aXQgMSkpCiAgICAgIChsYW1iZGEgYXJncwog
ICAgICAgIDs7IFRyeSB0byByZXBvcnQgdGhlIGVycm9yIGluIGFuIGludGVsbGlnaWJsZSB3YXku
CmRpZmYgLS1naXQgYS9ndWl4L2J1aWxkL2NvbXBpbGUuc2NtIGIvZ3VpeC9idWlsZC9jb21waWxl
LnNjbQppbmRleCBiODZlYzNiNzQzLi5jMjU5YjI3YWJmIDEwMDY0NAotLS0gYS9ndWl4L2J1aWxk
L2NvbXBpbGUuc2NtCisrKyBiL2d1aXgvYnVpbGQvY29tcGlsZS5zY20KQEAgLTEsNiArMSw3IEBA
CiA7OzsgR05VIEd1aXggLS0tIEZ1bmN0aW9uYWwgcGFja2FnZSBtYW5hZ2VtZW50IGZvciBHTlUK
IDs7OyBDb3B5cmlnaHQgwqkgMjAxMywgMjAxNCwgMjAxNiwgMjAxNywgMjAxOCwgMjAxOSwgMjAy
MCBMdWRvdmljIENvdXJ0w6hzIDxsdWRvQGdudS5vcmc+CiA7OzsgQ29weXJpZ2h0IMKpIDIwMTUg
VGF5bGFuIFVscmljaCBCYXnEsXJsxLEvS2FtbWVyIDx0YXlsYW5iYXlpcmxpQGdtYWlsLmNvbT4K
Kzs7OyBDb3B5cmlnaHQgwqkgMjAyMSBNYXhpbWUgRGV2b3MgPG1heGltZWRldm9zQHRlbGVuZXQu
YmU+CiA7OzsKIDs7OyBUaGlzIGZpbGUgaXMgcGFydCBvZiBHTlUgR3VpeC4KIDs7OwpAQCAtMjks
MTQgKzMwLDI3IEBACiAgICM6dXNlLW1vZHVsZSAoZ3VpeCBidWlsZCB1dGlscykKICAgIzp1c2Ut
bW9kdWxlIChsYW5ndWFnZSB0cmVlLWlsIG9wdGltaXplKQogICAjOnVzZS1tb2R1bGUgKGxhbmd1
YWdlIGNwcyBvcHRpbWl6ZSkKLSAgIzpleHBvcnQgKGNvbXBpbGUtZmlsZXMpKQorICAjOmV4cG9y
dCAoY29tcGlsZS1maWxlcyBub3RpY2UtZGVwZW5kZW5jeSBjdXJyZW50LWRlcGVuZGVuY3ktaW5m
bykpCiAKIDs7OyBDb21tZW50YXJ5OgogOzs7Ci07OzsgU3VwcG9ydCBjb2RlIHRvIGNvbXBpbGUg
R3VpbGUgY29kZSBhcyBlZmZpY2llbnRseSBhcyBwb3NzaWJsZSAod2l0aCAyLjIpLgorOzs7IFN1
cHBvcnQgY29kZSB0byBjb21waWxlIEd1aWxlIGNvZGUgYXMgZWZmaWNpZW50bHkgYXMgcG9zc2li
bGUgKHdpdGggMi4yKQorOzs7IGFuZCBrZWVwIHRyYWNrIG9mIHRoZSBkZXBlbmRlbmNpZXMgb2Yg
Y29tcGlsZWQgZmlsZXMuCiA7OzsKIDs7OyBDb2RlOgogCisoZGVmaW5lIGN1cnJlbnQtZGVwZW5k
ZW5jeS1pbmZvIChtYWtlLXBhcmFtZXRlciAjZikpCisoZGVmaW5lIGN1cnJlbnQtb3V0cHV0LWZp
bGUgKG1ha2UtcGFyYW1ldGVyICNmKSkKKworKGRlZmluZSAobm90aWNlLWRlcGVuZGVuY3kgZGVw
ZW5kZW5jeSkKKyAgIkFkZCB0aGUgZmlsZSBERVBFTkRFTkNZIHRvIHRoZSBsaXN0IG9mIGRlcGVu
ZGVuY2llcyBvZiB0aGUgY29tcGlsZWQgZmlsZQordGhhdCBpcyBiZWluZyBjb21wdXRlZCwgaWYg
YW55LiIKKyAgKGRlZmluZSBkZXBlbmRlbmN5LXRhYmxlIChjdXJyZW50LWRlcGVuZGVuY3ktaW5m
bykpCisgIChkZWZpbmUgb3V0cHV0IChjdXJyZW50LW91dHB1dC1maWxlKSkKKyAgKHdoZW4gKGFu
ZCBkZXBlbmRlbmN5LXRhYmxlIG91dHB1dCkKKyAgICAoaGFzaC1zZXQhIGRlcGVuZGVuY3ktdGFi
bGUgb3V0cHV0CisgICAgICAgICAgICAgICAoY29ucyBkZXBlbmRlbmN5IChoYXNoLXJlZiBkZXBl
bmRlbmN5LXRhYmxlIG91dHB1dCAnKCkpKSkpKQorCiAoZGVmaW5lIG9wdGltaXphdGlvbnMtZm9y
LWxldmVsCiAgIChvciAoYW5kPT4gKGZhbHNlLWlmLWV4Y2VwdGlvbgogICAgICAgICAgICAgICAo
cmVzb2x2ZS1pbnRlcmZhY2UgJyhzeXN0ZW0gYmFzZSBvcHRpbWl6ZSkpKQpAQCAtMjA3LDEyICsy
MjEsMjcgQEAgZmlsZXMgYXJlIGZvciBIT1NULCBhIEdOVSB0cmlwbGV0IHN1Y2ggYXMgXCJ4ODZf
NjQtbGludXgtZ251XCIuIgogICAgIDs7IEV4aXQgYXMgc29vbiBhcyBzb21ldGhpbmcgZ29lcyB3
cm9uZy4KICAgICAoZXhpdC1vbi1leGNlcHRpb24KICAgICAgZmlsZQotICAgICAobGV0ICgocmVs
YXRpdmUgKHJlbGF0aXZlLWZpbGUgc291cmNlLWRpcmVjdG9yeSBmaWxlKSkpCi0gICAgICAgKGNv
bXBpbGUtZmlsZSBmaWxlCi0gICAgICAgICAgICAgICAgICAgICAjOm91dHB1dC1maWxlIChzdHJp
bmctYXBwZW5kIGJ1aWxkLWRpcmVjdG9yeSAiLyIKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgKHNjbS0+Z28gcmVsYXRpdmUpKQotICAgICAgICAgICAg
ICAgICAgICAgIzpvcHRzIChhcHBlbmQgd2FybmluZy1vcHRpb25zCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAob3B0aW1pemF0aW9uLW9wdGlvbnMgcmVsYXRpdmUpKSkpKSkK
KyAgICAgKGxldCogKChyZWxhdGl2ZSAocmVsYXRpdmUtZmlsZSBzb3VyY2UtZGlyZWN0b3J5IGZp
bGUpKQorICAgICAgICAgICAgKG91dHB1dC1maWxlIChzdHJpbmctYXBwZW5kIGJ1aWxkLWRpcmVj
dG9yeSAiLyIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc2NtLT5n
byByZWxhdGl2ZSkpKSkKKyAgICAgICAocGFyYW1ldGVyaXplICgoY3VycmVudC1vdXRwdXQtZmls
ZSBvdXRwdXQtZmlsZSkpCisgICAgICAgICAod2hlbiAoY3VycmVudC1kZXBlbmRlbmN5LWluZm8p
CisgICAgICAgICAgIDs7IElmIGRlcGVuZGVuY3kgaW5mb3JtYXRpb24gaXMgYmVpbmcgdHJhY2tl
ZCwgcmVtb3ZlCisgICAgICAgICAgIDs7IHRoZSBvbGQgY29tcGlsZWQgZmlsZSBmaXJzdC4gIE90
aGVyd2lzZSwgaWYgcmVjb21waWxpbmcKKyAgICAgICAgICAgOzsgdGhlIGZpbGUgZHVlIHRvIGFu
IHVwZGF0ZWQgZGVwZW5kZW5jeSBjYXVzZXMgYW4gZXhjZXB0aW9uLAorICAgICAgICAgICA7OyB0
aGUgbmV3IGRlcGVuZGVuY3kgaW5mb3JtYXRpb24gd29uJ3QgaW5jbHVkZSB0aGUgY29tcGlsZWQK
KyAgICAgICAgICAgOzsgZmlsZSBhbmQgdGhlcmVmb3JlIHRoZSBvbGQgY29tcGlsZWQgZmlsZSB3
b3VsZCBiZSBjb25zaWRlcmVkCisgICAgICAgICAgIDs7IHVwLXRvLWRhdGUgb24gdGhlIGZvbGxv
d2luZyAibWFrZSIgcnVuLgorICAgICAgICAgICAod2hlbiAoZmlsZS1leGlzdHM/IG91dHB1dC1m
aWxlKQorICAgICAgICAgICAgIChkZWxldGUtZmlsZSBvdXRwdXQtZmlsZSkpCisgICAgICAgICAg
IDs7IFJlbW92ZSB0aGUgb2xkIGRlcGVuZGVuY3kgaW5mb3JtYXRpb24sIG90aGVyd2lzZQorICAg
ICAgICAgICA7OyB0aGUgZGVwZW5kZW5jeSBpbmZvcm1hdGlvbiB0YWJsZSB3aWxsIGtlZXAgZ3Jv
d2luZworICAgICAgICAgICA7OyBhZnRlciBlYWNoICJtYWtlIiBydW4uCisgICAgICAgICAgICho
YXNoLXJlbW92ZSEgKGN1cnJlbnQtZGVwZW5kZW5jeS1pbmZvKSBvdXRwdXQtZmlsZSkpCisgICAg
ICAgICAoY29tcGlsZS1maWxlIGZpbGUKKyAgICAgICAgICAgICAgICAgICAgICAgIzpvdXRwdXQt
ZmlsZSBvdXRwdXQtZmlsZQorICAgICAgICAgICAgICAgICAgICAgICAjOm9wdHMgKGFwcGVuZCB3
YXJuaW5nLW9wdGlvbnMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG9w
dGltaXphdGlvbi1vcHRpb25zIHJlbGF0aXZlKSkpKSkpKQogCiAgICh3aXRoLWF1Z21lbnRlZC1z
ZWFyY2gtcGF0aCAlbG9hZC1wYXRoIHNvdXJjZS1kaXJlY3RvcnkKICAgICAod2l0aC1hdWdtZW50
ZWQtc2VhcmNoLXBhdGggJWxvYWQtY29tcGlsZWQtcGF0aCBidWlsZC1kaXJlY3RvcnkKLS0gCjIu
MzMuMAoK


--=-VRWJSoloRA3mhw8ZjuSt
Content-Disposition: attachment;
	filename*0=0009-packages-Add-patches-to-the-dependency-list-of-packa.pat;
	filename*1=ch
Content-Type: text/x-patch;
	name="0009-packages-Add-patches-to-the-dependency-list-of-packa.patch";
	charset="UTF-8"
Content-Transfer-Encoding: base64

RnJvbSBkOWMzZmZjZTkyNzc4MmNlMmVmODk0Mzc4NGYwZTdiNWNkNDY2ZmVjIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBNYXhpbWUgRGV2b3MgPG1heGltZWRldm9zQHRlbGVuZXQuYmU+
CkRhdGU6IFN1biwgNSBTZXAgMjAyMSAxNzoxNTowOCArMDIwMApTdWJqZWN0OiBbUEFUQ0ggMDkv
MTBdIHBhY2thZ2VzOiBBZGQgcGF0Y2hlcyB0byB0aGUgZGVwZW5kZW5jeSBsaXN0IG9mIHBhY2th
Z2UKIG1vZHVsZXMuCgoqIGdudS9wYWNrYWdlcy5zY20gKHNlYXJjaC1wYXRjaCk6IENhbGwgJ25v
dGljZS1kZXBlbmRlbmN5JyBvbgogIHRoZSBwYXRjaCBmaWxlLgotLS0KIGdudS9wYWNrYWdlcy5z
Y20gfCA3ICsrKysrKy0KIDEgZmlsZSBjaGFuZ2VkLCA2IGluc2VydGlvbnMoKyksIDEgZGVsZXRp
b24oLSkKCmRpZmYgLS1naXQgYS9nbnUvcGFja2FnZXMuc2NtIGIvZ251L3BhY2thZ2VzLnNjbQpp
bmRleCBmNTU1MmU1YTliLi4zOTkyOWFlMDIyIDEwMDY0NAotLS0gYS9nbnUvcGFja2FnZXMuc2Nt
CisrKyBiL2dudS9wYWNrYWdlcy5zY20KQEAgLTM0LDYgKzM0LDggQEAKICAgICAgICAgICAgICAg
ICAjOnNlbGVjdCAoKHBhY2thZ2UtbmFtZS0+bmFtZSt2ZXJzaW9uCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAuIGh5cGhlbi1zZXBhcmF0ZWQtbmFtZS0+bmFtZSt2ZXJzaW9uKQogICAgICAg
ICAgICAgICAgICAgICAgICAgICBta2Rpci1wKSkKKyAgOzsgb25seSByZXF1aXJlZCBhdCBleHBh
bnNpb24gdGltZQorICAjOmF1dG9sb2FkICAgKGd1aXggYnVpbGQgY29tcGlsZSkgKG5vdGljZS1k
ZXBlbmRlbmN5KQogICAjOnVzZS1tb2R1bGUgKGd1aXggcHJvZmlsZXMpCiAgICM6dXNlLW1vZHVs
ZSAoZ3VpeCBkZXNjcmliZSkKICAgIzp1c2UtbW9kdWxlIChndWl4IGRlcHJlY2F0aW9uKQpAQCAt
MTIxLDcgKzEyMywxMCBAQCBpZiBwb3NzaWJsZS4gIFJldHVybiAjZiBpZiBub3QgZm91bmQuIgog
ICAgICAgIDs7IGluIGFkdmFuY2UuCiAgICAgICAgKGxldCAoKHBhdGNoICh0cnktc2VhcmNoLXBh
dGNoIChzeW50YXgtPmRhdHVtICMnZmlsZS1uYW1lKSkpKQogICAgICAgICAgKGlmIHBhdGNoCi0g
ICAgICAgICAgICAgI2AoJWxvY2FsLXBhdGNoLWZpbGUgZmlsZS1uYW1lICMsKGZpbGUtaGFzaCog
cGF0Y2ggIzpzZWxlY3Q/IHRydWUpKQorICAgICAgICAgICAgIChiZWdpbgorICAgICAgICAgICAg
ICAgKG5vdGljZS1kZXBlbmRlbmN5IHBhdGNoKQorICAgICAgICAgICAgICAgI2AoJWxvY2FsLXBh
dGNoLWZpbGUgZmlsZS1uYW1lCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAj
LChmaWxlLWhhc2gqIHBhdGNoICM6c2VsZWN0PyB0cnVlKSkpCiAgICAgICAgICAgICAgKGJlZ2lu
CiAgICAgICAgICAgICAgICAod2FybmluZyAoc291cmNlLXByb3BlcnRpZXMtPmxvY2F0aW9uCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgKHN5bnRheC1zb3VyY2UgIydmaWxlLW5hbWUpKQotLSAK
Mi4zMy4wCgo=


--=-VRWJSoloRA3mhw8ZjuSt
Content-Disposition: attachment;
	filename*0=0010-gexp-Do-not-intern-if-the-file-is-already-in-the-sto.pat;
	filename*1=ch
Content-Type: text/x-patch;
	name="0010-gexp-Do-not-intern-if-the-file-is-already-in-the-sto.patch";
	charset="UTF-8"
Content-Transfer-Encoding: base64

RnJvbSBkMzU5ZmVmYWJmMjgzMWU0MmFlYTZlZGY2NDZhOWUwMzczYmU1ZDBmIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBNYXhpbWUgRGV2b3MgPG1heGltZWRldm9zQHRlbGVuZXQuYmU+
CkRhdGU6IFNhdCwgNCBTZXAgMjAyMSAxODoxMDozMiArMDIwMApTdWJqZWN0OiBbUEFUQ0ggMTAv
MTBdIGdleHA6IERvIG5vdCBpbnRlcm4gaWYgdGhlIGZpbGUgaXMgYWxyZWFkeSBpbiB0aGUKIHN0
b3JlLgoKKiBndWl4L2dleHAuc2NtIChsb2NhbC1maWxlLWNvbXBpbGVyKTogV2hlbiB0aGUgZmls
ZSBpcyBhbHJlYWR5IGluIHRoZQogIHN0b3JlLCByZS11c2UgdGhlIGZpeGVkIG91dHB1dCBwYXRo
IGluc3RlYWQgb2YgaW50ZXJuaW5nIHRoZSBmaWxlCiAgYWdhaW4uCiogZ3VpeC9nZXhwLnNjbSAo
YWRkLXRlbXAtcm9vdC1hbmQtdmFsaWQtcGF0aD8qKTogTmV3IHByb2NlZHVyZS4KLS0tCiBndWl4
L2dleHAuc2NtIHwgMzIgKysrKysrKysrKysrKysrKysrKysrKysrKy0tLS0tLS0KIDEgZmlsZSBj
aGFuZ2VkLCAyNSBpbnNlcnRpb25zKCspLCA3IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL2d1
aXgvZ2V4cC5zY20gYi9ndWl4L2dleHAuc2NtCmluZGV4IGM2OWU0YWEyOTkuLjIwYzlkOTMxNzAg
MTAwNjQ0Ci0tLSBhL2d1aXgvZ2V4cC5zY20KKysrIGIvZ3VpeC9nZXhwLnNjbQpAQCAtNTI4LDE2
ICs1MjgsMzQgQEAgYXBwZWFycy4iCiAnc3lzdGVtLWVycm9yJyBleGNlcHRpb24gaXMgcmFpc2Vk
IGlmIEZJTEUgY291bGQgbm90IGJlIGZvdW5kLiIKICAgKGZvcmNlICglbG9jYWwtZmlsZS1hYnNv
bHV0ZS1maWxlLW5hbWUgZmlsZSkpKQogCisoZGVmaW5lIGFkZC10ZW1wLXJvb3QtYW5kLXZhbGlk
LXBhdGg/KiAoc3RvcmUtbGlmdCBhZGQtdGVtcC1yb290LWFuZC12YWxpZC1wYXRoPykpCisKIChk
ZWZpbmUtZ2V4cC1jb21waWxlciAobG9jYWwtZmlsZS1jb21waWxlciAoZmlsZSA8bG9jYWwtZmls
ZT4pIHN5c3RlbSB0YXJnZXQpCiAgIDs7ICJDb21waWxlIiBGSUxFIGJ5IGFkZGluZyBpdCB0byB0
aGUgc3RvcmUuCiAgIChtYXRjaCBmaWxlCi0gICAgKCgkIDxsb2NhbC1maWxlPiBmaWxlICg9IGZv
cmNlIGFic29sdXRlKSBuYW1lIHNoYTI1NiByZWN1cnNpdmU/IHNlbGVjdD8pCi0gICAgIDs7IENh
bm9uaWNhbGl6ZSBGSUxFIHNvIHRoYXQgaWYgaXQncyBhIHN5bWxpbmssIGl0IGlzIHJlc29sdmVk
LiAgRmFpbGluZwotICAgICA7OyB0byBkbyB0aGF0LCB3aGVuIFJFQ1VSU0lWRT8gaXMgI3QsIHdl
IGNvdWxkIGVuZCB1cCBjcmVhdGluZyBhIGRhbmdsaW5nCi0gICAgIDs7IHN5bWxpbmsgaW4gdGhl
IHN0b3JlLCBhbmQgd2hlbiBSRUNVUlNJVkU/IGlzICNmICdhZGQtdG8tc3RvcmUnIHdvdWxkCi0g
ICAgIDs7IGp1c3QgdGhyb3cgYW4gZXJyb3IsIGJvdGggb2Ygd2hpY2ggYXJlIGluY29udmVuaWVu
dC4KLSAgICAgKGludGVybmVkLWZpbGUgYWJzb2x1dGUgbmFtZQotICAgICAgICAgICAgICAgICAg
ICAjOnJlY3Vyc2l2ZT8gcmVjdXJzaXZlPyAjOnNlbGVjdD8gc2VsZWN0PykpKSkKKyAgICA7OyBE
ZWxheSBjb21wdXRpbmcgdGhlIGFic29sdXRlIGZpbGUgbmFtZSB1bnRpbCAnaW50ZXJuJywgYXMg
dGhpcworICAgIDs7IG1pZ2h0IGJlIGEgcmVsYXRpdmVseSBleHBlbnNpdmUgY29tcHV0YXRpb24g
KGUuZy4gaWYgc2VhcmNoLXBhdGNoCisgICAgOzsgaXMgdXNlZCksIGVzcGVjaWFsbHkgb24gYSBz
cGlubmluZyBkaXNrLgorICAgICgoJCA8bG9jYWwtZmlsZT4gZmlsZSBhYnNvbHV0ZS1wcm9taXNl
IG5hbWUgc2hhMjU2IHJlY3Vyc2l2ZT8gc2VsZWN0PykKKyAgICAgKGxldCAoKQorICAgICAgIChk
ZWZpbmUgKGludGVybikKKyAgICAgICAgIDs7IENhbm9uaWNhbGl6ZSBGSUxFIHNvIHRoYXQgaWYg
aXQncyBhIHN5bWxpbmssIGl0IGlzIHJlc29sdmVkLgorICAgICAgICAgOzsgRmFpbGluZyB0byBk
byB0aGF0LCB3aGVuIFJFQ1VSU0lWRT8gaXMgI3QsIHdlIGNvdWxkIGVuZCB1cCBjcmVhdGluZwor
ICAgICAgICAgOzsgYSBkYW5nbGluZyBzeW1saW5rIGluIHRoZSBzdG9yZSwgYW5kIHdoZW4gUkVD
VVJTSVZFPyBpcyAjZgorICAgICAgICAgOzsgJ2FkZC10by1zdG9yZScgd291bGQganVzdCB0aHJv
dyBhbiBlcnJvciwgYm90aCBvZiB3aGljaCBhcmUKKyAgICAgICAgIDs7IGluY29udmVuaWVudC4K
KyAgICAgICAgIChpbnRlcm5lZC1maWxlIChmb3JjZSBhYnNvbHV0ZS1wcm9taXNlKSBuYW1lCisg
ICAgICAgICAgICAgICAgICAgICAgICAjOnJlY3Vyc2l2ZT8gcmVjdXJzaXZlPyAjOnNlbGVjdD8g
c2VsZWN0PykpCisgICAgICAgOzsgSWYgdGhlIGhhc2ggaXMga25vd24gaW4gYWR2YW5jZSBhbmQg
dGhlIHN0b3JlIGFscmVhZHkgaGFzIHRoZQorICAgICAgIDs7IGl0ZW0sIHRoZXJlIGlzIG5vIG5l
ZWQgdG8gaW50ZXJuIHRoZSBmaWxlLgorICAgICAgIChpZiBzaGEyNTYKKyAgICAgICAgICAgKGxl
dCAoKHBhdGggKGZpeGVkLW91dHB1dC1wYXRoIG5hbWUgc2hhMjU2ICM6cmVjdXJzaXZlPyByZWN1
cnNpdmU/KSkpCisgICAgICAgICAgICAgKG1sZXQgJXN0b3JlLW1vbmFkICgodmFsaWQ/IChhZGQt
dGVtcC1yb290LWFuZC12YWxpZC1wYXRoPyogcGF0aCkpKQorICAgICAgICAgICAgICAgKGlmIHZh
bGlkPworICAgICAgICAgICAgICAgICAgIChyZXR1cm4gcGF0aCkKKyAgICAgICAgICAgICAgICAg
ICAoaW50ZXJuKSkpKQorICAgICAgICAgICA7OyBJZiBQQVRIIGRvZXMgbm90IHlldCBleGlzdCwg
ZmFsbCBiYWNrIHRvIGludGVybmluZy4KKyAgICAgICAgICAgKGludGVybikpKSkpKQogCiAoZGVm
aW5lLXJlY29yZC10eXBlIDxwbGFpbi1maWxlPgogICAoJXBsYWluLWZpbGUgbmFtZSBjb250ZW50
IHJlZmVyZW5jZXMpCi0tIAoyLjMzLjAKCg==


--=-VRWJSoloRA3mhw8ZjuSt--

--=-dT8/QEIsPOYFhIUcHEMW
Content-Type: application/pgp-signature; name="signature.asc"
Content-Description: This is a digitally signed message part
Content-Transfer-Encoding: 7bit

-----BEGIN PGP SIGNATURE-----

iI0EABYKADUWIQTB8z7iDFKP233XAR9J4+4iGRcl7gUCYTptyhccbWF4aW1lZGV2
b3NAdGVsZW5ldC5iZQAKCRBJ4+4iGRcl7g5MAQCYR/HigA+hNpUcnd/dyzE292kC
5+dDA2yZMO86lbwZkgD/SKntJUezYbdYRp1wspCfqNVsTfodQkufXNP1UnYMygA=
=+x9D
-----END PGP SIGNATURE-----

--=-dT8/QEIsPOYFhIUcHEMW--





Information forwarded to guix-patches@HIDDEN:
bug#50384; Package guix-patches. Full text available.

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


Received: (at 50384) by debbugs.gnu.org; 9 Sep 2021 14:51:17 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Thu Sep 09 10:51:17 2021
Received: from localhost ([127.0.0.1]:35974 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1mOLOX-0000MV-0L
	for submit <at> debbugs.gnu.org; Thu, 09 Sep 2021 10:51:17 -0400
Received: from eggs.gnu.org ([209.51.188.92]:50022)
 by debbugs.gnu.org with esmtp (Exim 4.84_2)
 (envelope-from <ludo@HIDDEN>) id 1mOLOV-0000MH-5n
 for 50384 <at> debbugs.gnu.org; Thu, 09 Sep 2021 10:51:15 -0400
Received: from fencepost.gnu.org ([2001:470:142:3::e]:34170)
 by eggs.gnu.org with esmtp (Exim 4.90_1)
 (envelope-from <ludo@HIDDEN>)
 id 1mOLOP-0001GS-9y; Thu, 09 Sep 2021 10:51:09 -0400
Received: from [2001:660:6102:320:e120:2c8f:8909:cdfe] (port=47216 helo=ribbon)
 by fencepost.gnu.org with esmtpsa (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.90_1) (envelope-from <ludo@HIDDEN>)
 id 1mOLOP-0003Xv-0d; Thu, 09 Sep 2021 10:51:09 -0400
From: =?utf-8?Q?Ludovic_Court=C3=A8s?= <ludo@HIDDEN>
To: Maxime Devos <maximedevos@HIDDEN>
Subject: Re: bug#50384: [PATCH] Optimise search-patch (reducing I/O)
References: <8900fa8c8eef7f72fc97adc2408be26c88de7803.camel@HIDDEN>
 <87tuj0xaja.fsf@HIDDEN>
 <0ec7f0270fcccec730808f9210f074cd5339961f.camel@HIDDEN>
Date: Thu, 09 Sep 2021 16:51:07 +0200
In-Reply-To: <0ec7f0270fcccec730808f9210f074cd5339961f.camel@HIDDEN>
 (Maxime Devos's message of "Sun, 05 Sep 2021 21:48:22 +0200")
Message-ID: <87ee9xerac.fsf_-_@HIDDEN>
User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/27.2 (gnu/linux)
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable
X-Spam-Score: -2.3 (--)
X-Debbugs-Envelope-To: 50384
Cc: 50384 <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 (---)

Hello,

Maxime Devos <maximedevos@HIDDEN> skribis:

>> To address this, =E2=80=98local-file=E2=80=99 could store the inode/mtim=
e + computed
>> store file name (rather than the SHA256).  =E2=80=98local-file-compiler=
=E2=80=99 would
>> check whether the actual file has matching inode/mtime before returning
>> the computed store file name.  Problem is that inode/mtime are
>> guaranteed to differ once you=E2=80=99ve run =E2=80=9Cmake install=E2=80=
=9D.  :-/
>
> An additional problem is that 'local-file-compiler' would have to 'stat'
> the file even if it is already in the store, undoing the (fairly limited?)
> performance gains of this patch series.
>
> The dependency tracking avoids this.

OK.

>> Intuitively, I=E2=80=99d have imagined a cache populated at run time; it=
 would
>> map, say, file name/inode/mtime to a store file name.  =E2=80=98add-to-s=
tore=E2=80=99
>> (or some wrapper above it) would check the cache and return the store
>> file name directly, unless =E2=80=98valid-path?=E2=80=99 says it no long=
er exists.
>> Downside is that this would be a per-user cache and you=E2=80=99d still =
pay the
>> cost until it=E2=80=99s warm.  Advantage is that you could easily tell w=
hether
>> it=E2=80=99s stale.
>>=20
>> Thoughts?
>
> Intuitively, I'd have imagined doing as much as possible at compilation t=
ime.

Of course, but it=E2=80=99s important for the caching model to match =E2=80=
=9Creality=E2=80=9D,
which is that patch files live independently of the source files that
refer to them.

I=E2=80=99d all be fine if =E2=80=98local-file=E2=80=99 were to inline file=
 contents at
macro-expansion time, because then we could be sure the hash and
contents match (but I=E2=80=99m not saying we should do this=E2=80=A6).

What we could do is have a boolean saying whether the cached value is
authoritative, similar to what=E2=80=99s in (gnu packages).  That way, when
using ./pre-inst-env or passing a -L flag or setting GUIX_PACKAGE_PATH,
the cached value would not be authoritative; we=E2=80=99d be safe, without
needing ad hoc dependency tracking.

Thoughts?

[...]

> Because fixed-output-path is now called more often, I've added a patch
> optimising (guix base32).

[...]

> From e5dc46800597023dfc1c9d53cc6e0db2f3999022 Mon Sep 17 00:00:00 2001
> From: Maxime Devos <maximedevos@HIDDEN>
> Date: Sat, 4 Sep 2021 15:35:51 +0200
> Subject: [PATCH v2 3/9] gexp: Allow computing the hash of the local file =
in
>  advance.
>
> The new field is currently unused.  The following patches will
> populate and use the field to reduce the time-to-derivation
> when the file is already interned in the store.
>
> * guix/gexp.scm
>   (<local-file>): Add sha256 field.
>   (%local-file): Add sha256 argument for populating the field.
>   (local-file-compiler): Adjust 'match' expression.

[...]

> +;; repeated 'stat' calls.  Allow computing the hash of the file in advan=
ce,
> +;; to avoid having to send the file to the daemon when it is already int=
erned
> +;; in the store.
>  (define-record-type <local-file>
> -  (%%local-file file absolute name recursive? select?)
> +  (%%local-file file absolute name sha256 recursive? select?)
>    local-file?
>    (file       local-file-file)                    ;string
>    (absolute   %local-file-absolute-file-name)     ;promise string
>    (name       local-file-name)                    ;string
> +  (sha256     local-file-sha256)                  ;sha256 bytevector | #f

Could we store the result of =E2=80=98fixed-output-path=E2=80=99 rather tha=
n the SHA256,
while we=E2=80=99re at it?

Again, care must be taken because it=E2=80=99s possible to set NIX_STORE_DI=
R at
run time, which may invalidate the pre-computed store file name.

Can we make hash/file name computation a feature of =E2=80=98local-file=E2=
=80=99 rather
than one of =E2=80=98search-patch=E2=80=99 as in these patches?  I=E2=80=99=
d rather not provide
a way to override this new field.

There are cases where we cannot know the value of =E2=80=98recursive?=E2=80=
=99 at
expansion time, for instance if the user wrote:

  (local-file "foo.txt" #:recursive? r)

In that case, we cannot compute the hash or file name.

Thanks,
Ludo=E2=80=99.




Information forwarded to guix-patches@HIDDEN:
bug#50384; Package guix-patches. Full text available.

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


Received: (at 50384) by debbugs.gnu.org; 7 Sep 2021 15:37:04 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Tue Sep 07 11:37:04 2021
Received: from localhost ([127.0.0.1]:57413 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1mNd9k-00010f-G6
	for submit <at> debbugs.gnu.org; Tue, 07 Sep 2021 11:37:04 -0400
Received: from albert.telenet-ops.be ([195.130.137.90]:41022)
 by debbugs.gnu.org with esmtp (Exim 4.84_2)
 (envelope-from <maximedevos@HIDDEN>) id 1mNd9h-000102-Un
 for 50384 <at> debbugs.gnu.org; Tue, 07 Sep 2021 11:37:02 -0400
Received: from butterfly.local ([188.188.3.227])
 by albert.telenet-ops.be with bizsmtp
 id r3cz2500M4tskic063d0Z9; Tue, 07 Sep 2021 17:37:00 +0200
Message-ID: <aefe08ead06d3054308fe6101bbf7b174bbc0c57.camel@HIDDEN>
Subject: Base16 and base32 optimisations split off
From: Maxime Devos <maximedevos@HIDDEN>
To: 50456 <at> debbugs.gnu.org, 50384 <at> debbugs.gnu.org
Date: Tue, 07 Sep 2021 17:36:58 +0200
Content-Type: multipart/signed; micalg="pgp-sha512";
 protocol="application/pgp-signature"; boundary="=-5970CM5+qaQR6f8qMTaV"
User-Agent: Evolution 3.34.2 
MIME-Version: 1.0
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=telenet.be; s=r21;
 t=1631029020; bh=SYaUpu/lFZTpRXEY7LqAPO6HFM2sjHphtfYeuhp7v+o=;
 h=Subject:From:To:Date;
 b=LZcgSR9h1Y4JAsYUEAHY2csbz2WjxM83tr+5SvjogffiLOiCYIIYzYLaDIGu2jWcN
 G1dwwyIVu4enj590Vwn8LlC3cP46tL6ej6ps4We/14fEQHUoiDj1jC6GxLze8HIUEC
 wKshx9GzwC94HDc1nxqdONCxEOJXr1gDyMYwdmuMvvbLTXROon19pdw4amoMRVwU1u
 1fHVtXz7XH1Y0QEMjysD1dyXoWW9icJhdAB7m2GXfk4N7YOAaSfeMRyHwz9e75hTLq
 RAeloSlN6PrwQpOebyuZ0X6lQe2DADefkX9fSaXZxwGBEool/vxj9CJWrIPxfO6zy6
 go609aWGssD8Q==
X-Spam-Score: -0.7 (/)
X-Debbugs-Envelope-To: 50384
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -1.7 (-)


--=-5970CM5+qaQR6f8qMTaV
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable

I split off the base16 and base32 optimisations
to a separate patch series: 50456 <at> debbugs.gnu.org.


--=-5970CM5+qaQR6f8qMTaV
Content-Type: application/pgp-signature; name="signature.asc"
Content-Description: This is a digitally signed message part
Content-Transfer-Encoding: 7bit

-----BEGIN PGP SIGNATURE-----

iI0EABYKADUWIQTB8z7iDFKP233XAR9J4+4iGRcl7gUCYTeHGxccbWF4aW1lZGV2
b3NAdGVsZW5ldC5iZQAKCRBJ4+4iGRcl7vHIAP9HaFsK5/PDqxGZIPrXymwN4QiZ
Q27xDLZCo9RSk4YQTAD/b/0b1jDshU+EVtF3PN/6lmo+F9DzTrwr/nxjqwZ6/Qg=
=ztev
-----END PGP SIGNATURE-----

--=-5970CM5+qaQR6f8qMTaV--





Information forwarded to guix-patches@HIDDEN:
bug#50384; Package guix-patches. Full text available.

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


Received: (at 50384) by debbugs.gnu.org; 6 Sep 2021 10:06:13 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Mon Sep 06 06:06:13 2021
Received: from localhost ([127.0.0.1]:51974 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1mNBW0-0005oZ-Tv
	for submit <at> debbugs.gnu.org; Mon, 06 Sep 2021 06:06:13 -0400
Received: from laurent.telenet-ops.be ([195.130.137.89]:49160)
 by debbugs.gnu.org with esmtp (Exim 4.84_2)
 (envelope-from <maximedevos@HIDDEN>) id 1mNBVy-0005oM-AC
 for 50384 <at> debbugs.gnu.org; Mon, 06 Sep 2021 06:06:11 -0400
Received: from butterfly.local ([213.132.129.254])
 by laurent.telenet-ops.be with bizsmtp
 id qa672500C5VU3ct01a68iy; Mon, 06 Sep 2021 12:06:08 +0200
Message-ID: <3491bccdaa15281fa254c2b788121cb42ea81adb.camel@HIDDEN>
Subject: Re: [bug#50384] [PATCH v2] Optimise search-patch (reducing I/O)
From: Maxime Devos <maximedevos@HIDDEN>
To: zimoun <zimon.toutoune@HIDDEN>, Ludovic =?ISO-8859-1?Q?Court=E8s?=
 <ludo@HIDDEN>
Date: Mon, 06 Sep 2021 12:06:00 +0200
In-Reply-To: <864kayjdwz.fsf@HIDDEN>
References: <8900fa8c8eef7f72fc97adc2408be26c88de7803.camel@HIDDEN>
 <87tuj0xaja.fsf@HIDDEN>
 <0ec7f0270fcccec730808f9210f074cd5339961f.camel@HIDDEN>
 <864kayjdwz.fsf@HIDDEN>
Content-Type: multipart/signed; micalg="pgp-sha512";
 protocol="application/pgp-signature"; boundary="=-UKv/eq1qQMChClGAB6nC"
User-Agent: Evolution 3.34.2 
MIME-Version: 1.0
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=telenet.be; s=r21;
 t=1630922768; bh=KdPIZOIIfP0vwU8cNjUKWuc75Um5mMgg23CO1Lt6ZAs=;
 h=Subject:From:To:Cc:Date:In-Reply-To:References;
 b=NMbf86vbfd3Wlu/ZD0yv8xYiMO5+XIOQsIEsS8iy0AeDPU9Pgbqa7wW8pHhyutkHU
 852I5+G+EJopKik5OQDfkeE+gbMbVWFWARKUlD9HdB7CkJhUQTkNB2DxGQr1Pe/vsd
 uj5ZTl1fqqep2ylt9zHZsbqVCJtUtZ5iC/+1nnNbKgMdniDdscK2Y6h3SxtGey0qlV
 kVOfLIC8t2dYz05epoiyjlt1kUOtL1CJ5YzsgPtVP0YviRC6N0ArBQmgbmpf5fvLqj
 d2Q5sfk0n3Z93Au2gwV8G4len76xKhbWZ0G52yLkU1xXT6yyAvSqKHQrq4hyGPxWuf
 sAqK9TBqvrHEA==
X-Spam-Score: -0.7 (/)
X-Debbugs-Envelope-To: 50384
Cc: 50384 <at> debbugs.gnu.org
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -1.7 (-)


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

zimoun schreef op ma 06-09-2021 om 10:39 [+0200]:
> Hi Maxime,
>=20
> Thanks for looking at optimising stuff. :-)
>=20
> On Sun, 05 Sep 2021 at 21:48, Maxime Devos <maximedevos@HIDDEN> wrote=
:
>=20
> > Let's compare the numbers again!  This time, I've run
> >=20
> > echo powersave |sudo tee /sys/devices/system/cpu/cpufreq/policy{0,1,2,3=
}/scaling_governor
> >=20
> > to make sure the CPU frequency doesn't change.  On a hot (disk) cache:
> >=20
> > # After the patch series
> > time GUIX_PROFILING=3D"rpc gc" ./the-optimised-guix/bin/guix build -d -=
-no-grafts pigx
>=20
> [...]
>=20
> > So on a hot disk cache, there doesn't appear to be any improvement
> > (except for =E2=80=98time spent in GC=E2=80=99 -- presumably that's due=
 to the optimisations
> > to guix/base32.scm).
>=20
> Which kind of disk do you have?  SSD, spinning HDD, other?

A spinning disk, presumably a HDD.  FWIW, it's a =E2=80=98TOSHIBA MQ01ABD10=
0 (AX1P2C)=E2=80=99
that has been =E2=80=98on=E2=80=99 for 10 months and 10 days, according to =
=E2=80=98SMART-data and selftests=E2=80=99
I just noticed it has =E2=80=982304 bad sectors=E2=80=99.  Maybe I should m=
ake backups and run file
system checks?

>=20
> > What about a cold cache?
> >=20
> > # After the patch series
> >=20
> > sync && echo 3 | sudo tee /proc/sys/vm/drop_caches
> > ./the-optimised-guix/bin/guix --help
> > time GUIX_PROFILING=3D"rpc gc" ./the-optimised-guix/bin/guix build -d -=
-no-grafts pigx
> > /gnu/store/fq6x8d2vcm6sbjkimg7g8kcgb4c5xv1b-pigx-0.0.3.drv
> > Remote procedure call summary: 5949 RPCs
> >   built-in-builders              ...     1
> >   add-to-store                   ...     3
> >   add-to-store/tree              ...    26
> >   add-temp-root                  ...   195
> >   valid-path?                    ...   195
> >   add-text-to-store              ...  5529
> > Garbage collection statistics:
> >   heap size:        93.85 MiB
> >   allocated:        312.03 MiB
> >   GC times:         17
> >   time spent in GC: 3.37 seconds (23% of user time)
> >=20
> > real	1m39,178s
> > user	0m14,557s
> > sys	0m0,990s
>=20
> How the average (against 3 examples) looks like?

I'll try to optimise more things and report the average for the v3.=20

> > It seems that if the disk cache is cold, the time-to-derivation decreas=
es
> > a little by this patch series.  Much less than I had hoped for though; =
I'll
> > have to look into other areas for interesting performance gains ...
>=20
> Please update the number using your diff showed in [1]. :-)
>=20
>=20
> 1: <http://issues.guix.gnu.org/50384#4>

Are you referring to:

> Oops, I forgot to include the following change to build-aux/compile-all.s=
cm:
>       (or (not (file-exists? go))
>           (file-mtime<? go file)
> -          (any (cut file-mtime<? go <>) extra-dependencies))))
> +          (any (lambda (dependency)
> +               (or (not (file-exists? dependency))
> +                   (file-mtime<? go dependency))) extra-dependencies))))

That's compilation-time only, so that cannot affect the timing of "guix bui=
ld -d ...".

Geetings,
Maxime.

--=-UKv/eq1qQMChClGAB6nC
Content-Type: application/pgp-signature; name="signature.asc"
Content-Description: This is a digitally signed message part
Content-Transfer-Encoding: 7bit

-----BEGIN PGP SIGNATURE-----

iI0EABYKADUWIQTB8z7iDFKP233XAR9J4+4iGRcl7gUCYTXoCBccbWF4aW1lZGV2
b3NAdGVsZW5ldC5iZQAKCRBJ4+4iGRcl7knUAPsFC+FnKuZi84gnBq8MxOI30aMh
oaD+uWxdH1s8I5b8ZAEAql84Fw0nw5HENSkMgpGhxMjdtFg2m8YfXq0rCupfrg0=
=ihV5
-----END PGP SIGNATURE-----

--=-UKv/eq1qQMChClGAB6nC--





Information forwarded to guix-patches@HIDDEN:
bug#50384; Package guix-patches. Full text available.

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


Received: (at 50384) by debbugs.gnu.org; 6 Sep 2021 09:00:37 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Mon Sep 06 05:00:37 2021
Received: from localhost ([127.0.0.1]:51738 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1mNAUW-0005mN-PM
	for submit <at> debbugs.gnu.org; Mon, 06 Sep 2021 05:00:37 -0400
Received: from mail-wm1-f46.google.com ([209.85.128.46]:56019)
 by debbugs.gnu.org with esmtp (Exim 4.84_2)
 (envelope-from <zimon.toutoune@HIDDEN>) id 1mNAUU-0005m8-Sg
 for 50384 <at> debbugs.gnu.org; Mon, 06 Sep 2021 05:00:35 -0400
Received: by mail-wm1-f46.google.com with SMTP id g135so4017334wme.5
 for <50384 <at> debbugs.gnu.org>; Mon, 06 Sep 2021 02:00:34 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112;
 h=from:to:cc:subject:in-reply-to:references:date:message-id
 :mime-version:content-transfer-encoding;
 bh=OR2HCCMMGVfuJiMIlzY60l1onkYa1ky8Q0yAGLWn+eQ=;
 b=n5ZojW2TEF5eguA6VwXjKOwJwrX+4w3MblYJHWC5yXEs2OGse0bo+Na3pfCGfWxGLO
 qOcKoWeK4jA6oAebPbrcatf6tWaXreJHpRBUslZtNK1ycZCb50mJ6G/pmCw3oMlXR4yG
 ojdM273dqVBh0IZFCiEv4/HdhM5HeAH4MEAQJ9acCXN3RvQIaSpFLEOGdaYNbx2Yr7TO
 K/hcDyJi/BcdlAqTlpKLtE8uc6h5elt1eKkBvcmZ9RyftvHukGN6aISobZmR8KbvdWtw
 AaHEfvegBxIGCgqoVnmEE8oPEJZUnNl+8WP9H4oxBva8sYFQcLHGP+0ty4T3PU+dZqPv
 F+hw==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=1e100.net; s=20161025;
 h=x-gm-message-state:from:to:cc:subject:in-reply-to:references:date
 :message-id:mime-version:content-transfer-encoding;
 bh=OR2HCCMMGVfuJiMIlzY60l1onkYa1ky8Q0yAGLWn+eQ=;
 b=NAhccR1HvEkYsJGBK4/sAy1B3oD753PZDTssPxZXvc0mCLptP0TkanRzO9vDMiUhUH
 juHJE67b9RiHpiMN9fzx5RsCMFrnDhfNvnouPkNmk8koD5FehDMiwQtFYA21GJcNnbEM
 3Ips4XVP8glWNDsp/EMgnqGdmHOvdx07HM/0zS1a2BMUoLGFunIx+54W4zD1cOWWFw6f
 +cn6E798JMk8Ta54UK+FwHCt+zea32i6yHGwDJLzjB132/DnM0oTrB3R0oGmgTj6e0G3
 uTdizhHBRmYTFHiGtxlB7acaYhQYWG9OiSn8RR+PAyJnDXP+BbWHs+LVrJ01boIRSPF/
 omcw==
X-Gm-Message-State: AOAM531DDKO82JO+BTwvcMKR2TtQkgZIjLKQpye6bEJQd0uuRd+Z9BQh
 dMi6HYOVVlQ3UHOCPBmYprUsN5i3RIc=
X-Google-Smtp-Source: ABdhPJw4/CO7bAbz358yCkuZe0xVOAG59rORxB8PpMNO1XKjcCwUN6OSoJzNd/+SXoD/H0KQD47UQg==
X-Received: by 2002:a05:600c:220f:: with SMTP id
 z15mr10103869wml.74.1630918828865; 
 Mon, 06 Sep 2021 02:00:28 -0700 (PDT)
Received: from lili ([2a01:e0a:59b:9120:65d2:2476:f637:db1e])
 by smtp.gmail.com with ESMTPSA id g1sm7554000wrc.65.2021.09.06.02.00.28
 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);
 Mon, 06 Sep 2021 02:00:28 -0700 (PDT)
From: zimoun <zimon.toutoune@HIDDEN>
To: Maxime Devos <maximedevos@HIDDEN>, Ludovic =?utf-8?Q?Court=C3=A8s?=
 <ludo@HIDDEN>
Subject: Re: [bug#50384] [PATCH v2] Optimise search-patch (reducing I/O)
In-Reply-To: <0ec7f0270fcccec730808f9210f074cd5339961f.camel@HIDDEN>
References: <8900fa8c8eef7f72fc97adc2408be26c88de7803.camel@HIDDEN>
 <87tuj0xaja.fsf@HIDDEN>
 <0ec7f0270fcccec730808f9210f074cd5339961f.camel@HIDDEN>
Date: Mon, 06 Sep 2021 10:39:40 +0200
Message-ID: <864kayjdwz.fsf@HIDDEN>
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable
X-Spam-Score: 0.0 (/)
X-Debbugs-Envelope-To: 50384
Cc: 50384 <at> debbugs.gnu.org
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -1.0 (-)

Hi Maxime,

Thanks for looking at optimising stuff. :-)

On Sun, 05 Sep 2021 at 21:48, Maxime Devos <maximedevos@HIDDEN> wrote:

> Let's compare the numbers again!  This time, I've run
>
> echo powersave |sudo tee /sys/devices/system/cpu/cpufreq/policy{0,1,2,3}/=
scaling_governor
>
> to make sure the CPU frequency doesn't change.  On a hot (disk) cache:
>
> # After the patch series
> time GUIX_PROFILING=3D"rpc gc" ./the-optimised-guix/bin/guix build -d --n=
o-grafts pigx

[...]

> So on a hot disk cache, there doesn't appear to be any improvement
> (except for =E2=80=98time spent in GC=E2=80=99 -- presumably that's due t=
o the optimisations
> to guix/base32.scm).

Which kind of disk do you have?  SSD, spinning HDD, other?


> What about a cold cache?
>
> # After the patch series
>
> sync && echo 3 | sudo tee /proc/sys/vm/drop_caches
> ./the-optimised-guix/bin/guix --help
> time GUIX_PROFILING=3D"rpc gc" ./the-optimised-guix/bin/guix build -d --n=
o-grafts pigx
> /gnu/store/fq6x8d2vcm6sbjkimg7g8kcgb4c5xv1b-pigx-0.0.3.drv
> Remote procedure call summary: 5949 RPCs
>   built-in-builders              ...     1
>   add-to-store                   ...     3
>   add-to-store/tree              ...    26
>   add-temp-root                  ...   195
>   valid-path?                    ...   195
>   add-text-to-store              ...  5529
> Garbage collection statistics:
>   heap size:        93.85 MiB
>   allocated:        312.03 MiB
>   GC times:         17
>   time spent in GC: 3.37 seconds (23% of user time)
>
> real	1m39,178s
> user	0m14,557s
> sys	0m0,990s

How the average (against 3 examples) looks like?

> It seems that if the disk cache is cold, the time-to-derivation decreases
> a little by this patch series.  Much less than I had hoped for though; I'=
ll
> have to look into other areas for interesting performance gains ...

Please update the number using your diff showed in [1]. :-)

1: <http://issues.guix.gnu.org/50384#4>

All the best,
simon




Information forwarded to guix-patches@HIDDEN:
bug#50384; Package guix-patches. Full text available.

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


Received: (at 50384) by debbugs.gnu.org; 5 Sep 2021 22:40:35 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Sun Sep 05 18:40:35 2021
Received: from localhost ([127.0.0.1]:51141 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1mN0oU-0000FA-Rm
	for submit <at> debbugs.gnu.org; Sun, 05 Sep 2021 18:40:35 -0400
Received: from laurent.telenet-ops.be ([195.130.137.89]:39526)
 by debbugs.gnu.org with esmtp (Exim 4.84_2)
 (envelope-from <maximedevos@HIDDEN>) id 1mN0oT-0000F1-Av
 for 50384 <at> debbugs.gnu.org; Sun, 05 Sep 2021 18:40:34 -0400
Received: from butterfly.local ([213.132.129.254])
 by laurent.telenet-ops.be with bizsmtp
 id qNgW2500Z5VU3ct01NgXsu; Mon, 06 Sep 2021 00:40:31 +0200
Message-ID: <f30b144e0cfaa6187f8df2074d4fa0913f16b512.camel@HIDDEN>
Subject: Re: [PATCH v2] Optimise search-patch (reducing I/O)
From: Maxime Devos <maximedevos@HIDDEN>
To: Ludovic =?ISO-8859-1?Q?Court=E8s?= <ludo@HIDDEN>
Date: Mon, 06 Sep 2021 00:40:25 +0200
In-Reply-To: <0ec7f0270fcccec730808f9210f074cd5339961f.camel@HIDDEN>
References: <8900fa8c8eef7f72fc97adc2408be26c88de7803.camel@HIDDEN>
 <87tuj0xaja.fsf@HIDDEN>
 <0ec7f0270fcccec730808f9210f074cd5339961f.camel@HIDDEN>
Content-Type: multipart/signed; micalg="pgp-sha512";
 protocol="application/pgp-signature"; boundary="=-8PFn3UvLuEaYOsrLL9hA"
User-Agent: Evolution 3.34.2 
MIME-Version: 1.0
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=telenet.be; s=r21;
 t=1630881631; bh=1zip/nzL0NaIuCwswkrlWoiSPVR8rXKY4cvR0IgwlC0=;
 h=Subject:From:To:Cc:Date:In-Reply-To:References;
 b=kGaorbEv2TlLV2teEtxGXeDYN3kMv8E1GAwjRwxe3fQ3+m8Mno9udligvOe9BFdB8
 dsXbJIgxlGWChrLkQS+IujgzwwvZoEkWvpbt8Vznab4yjtJssGImabAzAlyVCmYjPb
 EJ5lCy03cRG+wMJoXcW/lu3+u3H7vy8mW3ramdRuqBSw7NyZb3d72tPTdU0eLS+N+B
 T7Vk5kN8lesBnOPLeaodC9opMruo2guFXh/c097UbZZMSQK5OdEp9yr51fPYLCiqcD
 /4O3n73BciMXJnCi0e7qWh9SjtFBewnbsMpDEoOAncA59OBoB2vpwdPVD9drZaEDrR
 kX0EOkIurPz/g==
X-Spam-Score: -0.7 (/)
X-Debbugs-Envelope-To: 50384
Cc: 50384 <at> debbugs.gnu.org
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -1.7 (-)


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

Maxime Devos schreef op zo 05-09-2021 om 21:48 [+0200]:
> Ludovic Court=C3=A8s schreef op zo 05-09-2021 om 00:04 [+0200]:
> > Maxime Devos <maximedevos@HIDDEN> skribis:
> >=20
[..]
> I added two patches adding (limited) dependency tracking to compile-all.s=
cm.
> If a patch file is now modified or deleted, the corresponding package mod=
ules
> will be recompiled.  This should remove the =E2=80=98evilness=E2=80=99 I =
think.

Oops, I forgot to include the following change to build-aux/compile-all.scm=
:

     (or (not (file-exists? go))
         (file-mtime<? go file)
-        (any (cut file-mtime<? go <>) extra-dependencies))))
+        (any (lambda (dependency)
+               (or (not (file-exists? dependency))
+                   (file-mtime<? go dependency))) extra-dependencies))))

It will be included in the v3.

Greetings,
Maxime.

--=-8PFn3UvLuEaYOsrLL9hA
Content-Type: application/pgp-signature; name="signature.asc"
Content-Description: This is a digitally signed message part
Content-Transfer-Encoding: 7bit

-----BEGIN PGP SIGNATURE-----

iI0EABYKADUWIQTB8z7iDFKP233XAR9J4+4iGRcl7gUCYTVHWRccbWF4aW1lZGV2
b3NAdGVsZW5ldC5iZQAKCRBJ4+4iGRcl7s5eAQCrVq4u1QOuqRzGfQf4cQKUUvLS
ngcmVX0ASeWj0U7Y9wD/WvkYGdPHfNg586iuPHeHu3Vl1YzQSJN9pA4goPouXg0=
=RVuf
-----END PGP SIGNATURE-----

--=-8PFn3UvLuEaYOsrLL9hA--





Information forwarded to guix-patches@HIDDEN:
bug#50384; Package guix-patches. Full text available.

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


Received: (at 50384) by debbugs.gnu.org; 5 Sep 2021 19:48:52 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Sun Sep 05 15:48:52 2021
Received: from localhost ([127.0.0.1]:51105 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1mMy8D-0004PS-3c
	for submit <at> debbugs.gnu.org; Sun, 05 Sep 2021 15:48:52 -0400
Received: from michel.telenet-ops.be ([195.130.137.88]:49422)
 by debbugs.gnu.org with esmtp (Exim 4.84_2)
 (envelope-from <maximedevos@HIDDEN>) id 1mMy88-0004PI-Nl
 for 50384 <at> debbugs.gnu.org; Sun, 05 Sep 2021 15:48:43 -0400
Received: from butterfly.local ([213.132.129.254])
 by michel.telenet-ops.be with bizsmtp
 id qKoc250065VU3ct06KocgV; Sun, 05 Sep 2021 21:48:39 +0200
Message-ID: <0ec7f0270fcccec730808f9210f074cd5339961f.camel@HIDDEN>
Subject: [PATCH v2] Optimise search-patch (reducing I/O)
From: Maxime Devos <maximedevos@HIDDEN>
To: Ludovic =?ISO-8859-1?Q?Court=E8s?= <ludo@HIDDEN>
Date: Sun, 05 Sep 2021 21:48:22 +0200
In-Reply-To: <87tuj0xaja.fsf@HIDDEN>
References: <8900fa8c8eef7f72fc97adc2408be26c88de7803.camel@HIDDEN>
 <87tuj0xaja.fsf@HIDDEN>
Content-Type: multipart/signed; micalg="pgp-sha512";
 protocol="application/pgp-signature"; boundary="=-eExp0UHbbratciKFMMXn"
User-Agent: Evolution 3.34.2 
MIME-Version: 1.0
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=telenet.be; s=r21;
 t=1630871319; bh=LTK4Qm30Q4MEw0udAk8n2qwU0brmPO4phFU7bKKyIbw=;
 h=Subject:From:To:Cc:Date:In-Reply-To:References;
 b=ozXpCrEY/bJAKDKo8mitE0eRvlEpDG2jgLrQXYPT2yGA+tYPU+vQS9gfiUZkfTz7P
 CO1cngyVZ2GxLoBRylOchUdcYIwu+LOvIQpk+k7cvDmpmj1Q9l8oOgtOjuPFD5pVZ/
 jja7A03u5AVO2cR0bIeHx7FqENhb1c+lEqF/91uPmeXAMMADR4GOGxmHjhH0LQpQFF
 Pt51TytK6d521jUeUcgJQXAieOTKGE9qkUSlr4ydGM0Xqb54/jO+YFVD+6DYijpc/j
 EmiDTvc/+B4kVXtEqimDEdgxNN54TGp1VUdC856GCBV5fhC2yndILbPakfIMs9GjUJ
 V3FwXke+SSJAw==
X-Spam-Score: -0.7 (/)
X-Debbugs-Envelope-To: 50384
Cc: 50384 <at> debbugs.gnu.org
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -1.0 (-)


--=-eExp0UHbbratciKFMMXn
Content-Type: multipart/mixed; boundary="=-FFYmpQl4eyfmi+ZCpAS1"


--=-FFYmpQl4eyfmi+ZCpAS1
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable

Ludovic Court=C3=A8s schreef op zo 05-09-2021 om 00:04 [+0200]:
> Maxime Devos <maximedevos@HIDDEN> skribis:
>=20
> > +(define-syntax search-patch
> > +  (lambda (s)
> > +    "Search the patch FILE-NAME and compute its hash at expansion time
> > +if possible.  Return #f if not found."
> > +    (syntax-case s ()
> > +      ((_ file-name)
> > +       (string? (syntax->datum #'file-name))
> > +       ;; FILE-NAME is a constant string, so the hash can be computed
> > +       ;; in advance.
> > +       (let ((patch (try-search-patch (syntax->datum #'file-name))))
> > +         (if patch
> > +             #`(%local-patch-file file-name #,(file-hash* patch #:sele=
ct? true))
> > +             (begin
> > +               (warning (source-properties->location
> > +                         (syntax-source #'file-name))
> > +                        (G_ "~a: patch not found at expansion time")
> > +                        (syntax->datum #'ile-name))
> > +               #'(%search-patch file-name)))))
> > +      ;; FILE-NAME is variable, so the hash cannot be pre-computed.
> > +      ((_ file-name) #'(%search-patch file-name))
> > +      ;; search-patch is being used used in a construct like
> > +      ;; (map search-patch ...).
> > +      (id (identifier? #'id) #'%search-patch))))
>=20
> It=E2=80=99s clever=E2=80=A6 but also a bit evil, in that it changes the =
semantics of
> package files in a surprising way.  Modifying foo.patch without
> recompiling foo.scm would lead you to still use the old foo.patch, which
> can be rather off-putting and error-prone IMO.

I added two patches adding (limited) dependency tracking to compile-all.scm=
.
If a patch file is now modified or deleted, the corresponding package modul=
es
will be recompiled.  This should remove the =E2=80=98evilness=E2=80=99 I th=
ink.

> To address this, =E2=80=98local-file=E2=80=99 could store the inode/mtime=
 + computed
> store file name (rather than the SHA256).  =E2=80=98local-file-compiler=
=E2=80=99 would
> check whether the actual file has matching inode/mtime before returning
> the computed store file name.  Problem is that inode/mtime are
> guaranteed to differ once you=E2=80=99ve run =E2=80=9Cmake install=E2=80=
=9D.  :-/

An additional problem is that 'local-file-compiler' would have to 'stat'
the file even if it is already in the store, undoing the (fairly limited?)
performance gains of this patch series.

The dependency tracking avoids this.

> Intuitively, I=E2=80=99d have imagined a cache populated at run time; it =
would
> map, say, file name/inode/mtime to a store file name.  =E2=80=98add-to-st=
ore=E2=80=99
> (or some wrapper above it) would check the cache and return the store
> file name directly, unless =E2=80=98valid-path?=E2=80=99 says it no longe=
r exists.
> Downside is that this would be a per-user cache and you=E2=80=99d still p=
ay the
> cost until it=E2=80=99s warm.  Advantage is that you could easily tell wh=
ether
> it=E2=80=99s stale.
>=20
> Thoughts?

Intuitively, I'd have imagined doing as much as possible at compilation tim=
e.
The cost at compilation is only paid once (or, more correctly, at every
"guix pull"), while if you delay things until runtime, you need to check th=
e
caches.

With this patch series (+ the two patches mentioned previously), the =E2=80=
=98cache=E2=80=99
is always fresh (though possibly not warm: the patch might not yet be in th=
e
store).

Ludovic Court=C3=A8s schreef op za 04-09-2021 om 23:47 [+0200]:
> Hi!
>=20
> Some initial comments=E2=80=A6
>=20
> Maxime Devos <maximedevos@HIDDEN> skribis:
>=20
> > +++ b/guix/gexp.scm
> > @@ -531,13 +531,37 @@ appears."
> >  (define-gexp-compiler (local-file-compiler (file <local-file>) system =
target)
> >   [...]
> > +       (if sha256
> > +           (let ((path (fixed-output-path name sha256 #:recursive? rec=
ursive?)))
> > +             ;; If the hash is known in advance and the store already =
has the
> > +             ;; item, there is no need to intern the file.
> > +             (if (file-exists? path)
> > +                 (mbegin %store-monad
> > +                   ;; Tell the GC that PATH will be used, such that it=
 won't
> > +                   ;; be deleted.
> > +                   ((store-lift add-temp-root) path)
> > +                   ;; The GC could have deleted the item before add-te=
mp-root
> > +                   ;; completed, so check again if PATH exists.
> > +                   (if (file-exists? path)
> > +                       (return path)
> > +                       ;; If it has been removed, fall-back interning.
> > +                       (intern)))
> > +                 ;; If PATH does not yet exist, fall back to interning=
.
> > +                 (intern)))
> > +           (intern))))))
>=20
> =E2=80=98file-exists?=E2=80=99 won=E2=80=99t work when talking to a remot=
e store (e.g.,
> GUIX_DAEMON_SOCKET=3Dssh://=E2=80=A6).
>=20
> =E2=80=98add-temp-root=E2=80=99 doesn=E2=80=99t throw if the given store =
item does not exist.
> So it could be written like this:
>=20
>   (if sha256
>       (mbegin %store-monad
>         (add-temp-root* item)
>         (if (valid-path?* item)
>             (return item)
>             (intern)))
>       (intern))

Done in the v2.

> But then, we=E2=80=99d add one RPC for every =E2=80=98add-to-store=E2=80=
=99 RPC corresponding to
> a patch (you can set =E2=80=9CGUIX_PROFILING=3Drpc=E2=80=9D to see the nu=
mbers), which is
> not great.
>=20
> Ludo=E2=80=99.

Note that 'intern' is only called if the patch isn't yet in the store.
In practice, the patch is almost always already in the store.  For example,
suppose I have a few packages in my profile.  As the packages are in my
profile, they had to have their derivation computed at some point, so the
corresponding patches had to be interned.

If I now run "guix pull && guix package -u", when computing the derivation
of the updated profile, most required patches are already in the store,
because patches don't change often.

Likewise, if I run "guix environment guix" in one terminal, then in another=
,
then in yet another ... possibly for the first invocation, some patches nee=
d
to be interned, but for the other invocations, it's already in the store.

Because fixed-output-path is now called more often, I've added a patch
optimising (guix base32).

Let's compare the numbers again!  This time, I've run

echo powersave |sudo tee /sys/devices/system/cpu/cpufreq/policy{0,1,2,3}/sc=
aling_governor

to make sure the CPU frequency doesn't change.  On a hot (disk) cache:

# After the patch series
time GUIX_PROFILING=3D"rpc gc" ./the-optimised-guix/bin/guix build -d --no-=
grafts pigx

Remote procedure call summary: 5949 RPCs
  built-in-builders              ...     1
  add-to-store                   ...     3
  add-to-store/tree              ...    26
  add-temp-root                  ...   195
  valid-path?                    ...   195
  add-text-to-store              ...  5529
Garbage collection statistics:
  heap size:        93.85 MiB
  allocated:        312.04 MiB
  GC times:         17
  time spent in GC: 3.34 seconds (25% of user time)

# averaged over three runs
real	0m14,035s
user	0m14,138s
sys	0m0,650s

# Before the patch series
time GUIX_PROFILING=3D"rpc gc" ./the-unoptimised-guix/bin/guix build -d --n=
o-grafts pigx
/gnu/store/fq6x8d2vcm6sbjkimg7g8kcgb4c5xv1b-pigx-0.0.3.drv
Remote procedure call summary: 5749 RPCs
  built-in-builders              ...     1
  add-to-store/tree              ...    26
  add-to-store                   ...   193
  add-text-to-store              ...  5529
Garbage collection statistics:
  heap size:        93.85 MiB
  allocated:        325.24 MiB
  GC times:         18
  time spent in GC: 3.66 seconds (26% of user time)

real	0m13,700s
user	0m14,051s
sys	0m0,658s

So on a hot disk cache, there doesn't appear to be any improvement
(except for =E2=80=98time spent in GC=E2=80=99 -- presumably that's due to =
the optimisations
to guix/base32.scm).

What about a cold cache?

# After the patch series

sync && echo 3 | sudo tee /proc/sys/vm/drop_caches
./the-optimised-guix/bin/guix --help
time GUIX_PROFILING=3D"rpc gc" ./the-optimised-guix/bin/guix build -d --no-=
grafts pigx
/gnu/store/fq6x8d2vcm6sbjkimg7g8kcgb4c5xv1b-pigx-0.0.3.drv
Remote procedure call summary: 5949 RPCs
  built-in-builders              ...     1
  add-to-store                   ...     3
  add-to-store/tree              ...    26
  add-temp-root                  ...   195
  valid-path?                    ...   195
  add-text-to-store              ...  5529
Garbage collection statistics:
  heap size:        93.85 MiB
  allocated:        312.03 MiB
  GC times:         17
  time spent in GC: 3.37 seconds (23% of user time)

real	1m39,178s
user	0m14,557s
sys	0m0,990s

# Before the patch series
sync && echo 3 | sudo tee /proc/sys/vm/drop_caches
./the-unoptimised-guix/bin/guix --help
time GUIX_PROFILING=3D"rpc gc" ./the-unoptimised-guix/bin/guix build -d --n=
o-grafts pigx

Remote procedure call summary: 5749 RPCs
  built-in-builders              ...     1
  add-to-store/tree              ...    26
  add-to-store                   ...   193
  add-text-to-store              ...  5529
Garbage collection statistics:
  heap size:        93.85 MiB
  allocated:        325.25 MiB
  GC times:         18
  time spent in GC: 3.63 seconds (25% of user time)

real	1m42,100s
user	0m14,690s
sys	0m1,127s

It seems that if the disk cache is cold, the time-to-derivation decreases
a little by this patch series.  Much less than I had hoped for though; I'll
have to look into other areas for interesting performance gains ...

Greetings,
Maxime.

--=-FFYmpQl4eyfmi+ZCpAS1
Content-Disposition: attachment;
	filename="v2-0001-build-self-Implement-basic-hash-algorithm.patch"
Content-Type: text/x-patch;
	name="v2-0001-build-self-Implement-basic-hash-algorithm.patch";
	charset="UTF-8"
Content-Transfer-Encoding: base64

RnJvbSBhOGUyNGE1MjU4YWEwNTY4OWJjYWZhNzBhZjA3MWRhNTI5NmY2M2E0IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBNYXhpbWUgRGV2b3MgPG1heGltZWRldm9zQHRlbGVuZXQuYmU+
CkRhdGU6IFNhdCwgNCBTZXAgMjAyMSAyMDowOTowMyArMDIwMApTdWJqZWN0OiBbUEFUQ0ggdjIg
MS85XSBidWlsZC1zZWxmOiBJbXBsZW1lbnQgYmFzaWMgJ2hhc2gtYWxnb3JpdGhtJy4KTUlNRS1W
ZXJzaW9uOiAxLjAKQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PVVURi04CkNvbnRl
bnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXQKClRoZSBtb2R1bGUgKGd1aXggaGFzaCkgdXNlZCBm
cm9tICdzZWFyY2gtcGF0Y2gnIGluIGEgZnV0dXJlCnBhdGNoIG5lZWRzIGl0IHRvIGJlIHByb3Bl
cmx5IGRlZmluZWQgd2hlbiAoZ3VpeCBoYXNoKSBpcyBiZWluZwpjb21waWxlZC4gICdzZWFyY2gt
cGF0Y2gnIGlzIHVzZWQgd2hlbiB0aGUgZGVyaXZhdGlvbiBvZiBHdWl4IGlzCmJlaW5nIGNvbXB1
dGVkLCBzbyBpdCBpcyBpbXBvcnRhbnQgdG8gYXZvaWQgdGhlIOKAmHdyb25nIHR5cGUgdG8KYXBw
bHk6ICM8c3ludGF4LXRyYW5zZm9ybWVyIGhhc2gtYWxnb3JpdGhtPuKAmSBlcnJvci4KCiogYnVp
bGQtYXV4L2J1aWxkLXNlbGYuc2NtCiAgKGJ1aWxkLXByb2dyYW0pW2Zha2UtZ2NyeXB0LWhhc2hd
OiBEZWZpbmUgaGFzaC1hbGdvcml0aG0gZm9yIHNoYTEKICBhbmQgc2hhMjU2LgotLS0KIGJ1aWxk
LWF1eC9idWlsZC1zZWxmLnNjbSB8IDEzICsrKysrKysrKysrLS0KIDEgZmlsZSBjaGFuZ2VkLCAx
MSBpbnNlcnRpb25zKCspLCAyIGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL2J1aWxkLWF1eC9i
dWlsZC1zZWxmLnNjbSBiL2J1aWxkLWF1eC9idWlsZC1zZWxmLnNjbQppbmRleCAzYTJkMTNjYzA5
Li4yYzEzZDlkNTMwIDEwMDY0NAotLS0gYS9idWlsZC1hdXgvYnVpbGQtc2VsZi5zY20KKysrIGIv
YnVpbGQtYXV4L2J1aWxkLXNlbGYuc2NtCkBAIC0yNTksOCArMjU5LDE3IEBAIGludGVyZmFjZSAo
RkZJKSBvZiBHdWlsZS4iKQogICAoZGVmaW5lIGZha2UtZ2NyeXB0LWhhc2gKICAgICA7OyBGYWtl
IChnY3J5cHQgaGFzaCkgbW9kdWxlOyBzZWUgYmVsb3cuCiAgICAgKHNjaGVtZS1maWxlICJoYXNo
LnNjbSIKLSAgICAgICAgICAgICAgICAgI34oZGVmaW5lLW1vZHVsZSAoZ2NyeXB0IGhhc2gpCi0g
ICAgICAgICAgICAgICAgICAgICAjOmV4cG9ydCAoc2hhMSBzaGEyNTYpKSkpCisgICAgICAgICAg
ICAgICAgICN+KGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAoZGVmaW5lLW1vZHVsZSAoZ2Ny
eXB0IGhhc2gpCisgICAgICAgICAgICAgICAgICAgICAgICM6ZXhwb3J0IChzaGExIHNoYTI1NiBo
YXNoLWFsZ29yaXRobSkpCisgICAgICAgICAgICAgICAgICAgICA7OyBBdm9pZCDigJhXcm9uZyB0
eXBlIHRvIGFwcGx5OgorICAgICAgICAgICAgICAgICAgICAgOzsgIzxzeW50YXgtdHJhbnNmb3Jt
ZXIgaGFzaC1hbGdvcml0aG0+4oCZIGVycm9ycy4KKyAgICAgICAgICAgICAgICAgICAgIChkZWZp
bmUgc2hhMSkKKyAgICAgICAgICAgICAgICAgICAgIChkZWZpbmUgc2hhMjU2KQorICAgICAgICAg
ICAgICAgICAgICAgKGRlZmluZS1zeW50YXggaGFzaC1hbGdvcml0aG0KKyAgICAgICAgICAgICAg
ICAgICAgICAgKHN5bnRheC1ydWxlcyAoc2hhMSBzaGEyNTYpCisgICAgICAgICAgICAgICAgICAg
ICAgICAgKChfIHNoYTEpIDIpCisgICAgICAgICAgICAgICAgICAgICAgICAgKChfIHNoYTI1Nikg
OCkpKSkpKQogCiAgIChkZWZpbmUgZmFrZS1naXQKICAgICAoc2NoZW1lLWZpbGUgImdpdC5zY20i
ICN+KGRlZmluZS1tb2R1bGUgKGdpdCkpKSkKLS0gCjIuMzMuMAoK


--=-FFYmpQl4eyfmi+ZCpAS1
Content-Disposition: attachment;
	filename="v2-0002-guix-hash-Extract-file-hashing-procedures.patch"
Content-Type: text/x-patch;
	name="v2-0002-guix-hash-Extract-file-hashing-procedures.patch";
	charset="UTF-8"
Content-Transfer-Encoding: base64

RnJvbSBjMzhjYWUxMWRmMDhhNTdiNWEzZjQ4MzYwMWI2NDgyYzM3OWEwNzQ5IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBTYXJhaCBNb3JnZW5zZW4gPGlza2FyaWFuQG1nc24uZGV2PgpE
YXRlOiBTdW4sIDE1IEF1ZyAyMDIxIDE2OjI1OjI0IC0wNzAwClN1YmplY3Q6IFtQQVRDSCB2MiAy
LzldIGd1aXggaGFzaDogRXh0cmFjdCBmaWxlIGhhc2hpbmcgcHJvY2VkdXJlcy4KCiogZ3VpeC9z
Y3JpcHRzL2hhc2guc2NtIChndWl4LWhhc2gpW3Zjcy1maWxlPywgZmlsZS1oYXNoXTogRXh0cmFj
dCBsb2dpYwp0by4uLgoqIGd1aXgvaGFzaC5zY206IC4uLmhlcmUuIE5ldyBmaWxlLgoqIE1ha2Vm
aWxlLmFtIChNT0RVTEVTKTogQWRkIG5ldyBmaWxlLgotLS0KIE1ha2VmaWxlLmFtICAgICAgICAg
ICB8ICAxICsKIGd1aXgvaGFzaC5zY20gICAgICAgICB8IDUxICsrKysrKysrKysrKysrKysrKysr
KysrKysrKysrKysrKysrKysrKysrKysKIGd1aXgvc2NyaXB0cy9oYXNoLnNjbSB8IDI5ICsrKysr
Ky0tLS0tLS0tLS0tLS0tLS0tLQogMyBmaWxlcyBjaGFuZ2VkLCA1OSBpbnNlcnRpb25zKCspLCAy
MiBkZWxldGlvbnMoLSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBndWl4L2hhc2guc2NtCgpkaWZmIC0t
Z2l0IGEvTWFrZWZpbGUuYW0gYi9NYWtlZmlsZS5hbQppbmRleCAzMjdkM2Y5OTYxLi44ZjgwODlj
MDVjIDEwMDY0NAotLS0gYS9NYWtlZmlsZS5hbQorKysgYi9NYWtlZmlsZS5hbQpAQCAtMTA3LDYg
KzEwNyw3IEBAIE1PRFVMRVMgPQkJCQkJXAogICBndWl4L25hcmluZm8uc2NtCQkJCVwKICAgZ3Vp
eC9kZXJpdmF0aW9ucy5zY20JCQkJXAogICBndWl4L2dyYWZ0cy5zY20JCQkJXAorICBndWl4L2hh
c2guc2NtCQkJCQlcCiAgIGd1aXgvcmVwbC5zY20JCQkJCVwKICAgZ3VpeC90cmFuc2Zvcm1hdGlv
bnMuc2NtCQkJXAogICBndWl4L2luZmVyaW9yLnNjbQkJCQlcCmRpZmYgLS1naXQgYS9ndWl4L2hh
c2guc2NtIGIvZ3VpeC9oYXNoLnNjbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwLi44YzJhYjgxODdmCi0tLSAvZGV2L251bGwKKysrIGIvZ3VpeC9oYXNoLnNjbQpAQCAtMCww
ICsxLDUxIEBACis7OzsgR05VIEd1aXggLS0tIEZ1bmN0aW9uYWwgcGFja2FnZSBtYW5hZ2VtZW50
IGZvciBHTlUKKzs7OyBDb3B5cmlnaHQgwqkgMjAyMSBTYXJhaCBNb3JnZW5zZW4gPGlza2FyaWFu
QG1nc24uZGV2PgorOzs7Cis7OzsgVGhpcyBmaWxlIGlzIHBhcnQgb2YgR05VIEd1aXguCis7OzsK
Kzs7OyBHTlUgR3VpeCBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh
bmQvb3IgbW9kaWZ5IGl0Cis7OzsgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKzs7OyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQKKzs7OyB5b3Vy
IG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCis7OzsKKzs7OyBHTlUgR3VpeCBpcyBkaXN0cmli
dXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKzs7OyBXSVRIT1VU
IEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCis7Ozsg
TUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2Vl
IHRoZQorOzs7IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCis7
OzsKKzs7OyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZQorOzs7IGFsb25nIHdpdGggR05VIEd1aXguICBJZiBub3QsIHNlZSA8
aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKyhkZWZpbmUtbW9kdWxlIChndWl4IGhh
c2gpCisgICM6dXNlLW1vZHVsZSAoZ2NyeXB0IGhhc2gpCisgICM6dXNlLW1vZHVsZSAoZ3VpeCBz
ZXJpYWxpemF0aW9uKQorICAjOnVzZS1tb2R1bGUgKHNyZmkgc3JmaS0xKQorICAjOnVzZS1tb2R1
bGUgKHNyZmkgc3JmaS0xMSkKKyAgIzpleHBvcnQgKHZjcy1maWxlPworICAgICAgICAgICAgZmls
ZS1oYXNoKikpCisKKyhkZWZpbmUgKHZjcy1maWxlPyBmaWxlIHN0YXQpCisgICJSZXR1cm5zIHRy
dWUgaWYgRklMRSBpcyBhIHZlcnNpb24gY29udHJvbCBzeXN0ZW0gZmlsZS4iCisgIChjYXNlIChz
dGF0OnR5cGUgc3RhdCkKKyAgICAoKGRpcmVjdG9yeSkKKyAgICAgKG1lbWJlciAoYmFzZW5hbWUg
ZmlsZSkgJygiLmJ6ciIgIi5naXQiICIuaGciICIuc3ZuIiAiQ1ZTIikpKQorICAgICgocmVndWxh
cikKKyAgICAgOzsgR2l0IHN1Yi1tb2R1bGVzIGhhdmUgYSAnLmdpdCcgZmlsZSB0aGF0IGlzIGEg
cmVndWxhciB0ZXh0IGZpbGUuCisgICAgIChzdHJpbmc9PyAoYmFzZW5hbWUgZmlsZSkgIi5naXQi
KSkKKyAgICAoZWxzZQorICAgICAjZikpKQorCisoZGVmaW5lKiAoZmlsZS1oYXNoKiBmaWxlICM6
a2V5CisgICAgICAgICAgICAgICAgICAgICAoYWxnb3JpdGhtIChoYXNoLWFsZ29yaXRobSBzaGEy
NTYpKQorICAgICAgICAgICAgICAgICAgICAgKHJlY3Vyc2l2ZT8gI3QpCisgICAgICAgICAgICAg
ICAgICAgICAoc2VsZWN0PyAobmVnYXRlIHZjcy1maWxlPykpKQorICAiQ29tcHV0ZSB0aGUgaGFz
aCBvZiBGSUxFIHdpdGggQUxHT1JJVEhNLiAgSWYgUkVDVVJTSVZFPyBpcyB0cnVlLCByZWN1cnNl
CitpbnRvIHN1YmRpcmVjdG9yaWVzIG9mIEZJTEUsIGNvbXB1dGluZyB0aGUgY29tYmluZWQgaGFz
aCBvZiBhbGwgZmlsZXMgZm9yCit3aGljaCAoU0VMRUNUPyAgRklMRSBTVEFUKSByZXR1cm5zIHRy
dWUuIgorICAoaWYgcmVjdXJzaXZlPworICAgICAgKGxldC12YWx1ZXMgKCgocG9ydCBnZXQtaGFz
aCkKKyAgICAgICAgICAgICAgICAgICAgKG9wZW4taGFzaC1wb3J0IGFsZ29yaXRobSkpKQorICAg
ICAgICAod3JpdGUtZmlsZSBmaWxlIHBvcnQgIzpzZWxlY3Q/IHNlbGVjdD8pCisgICAgICAgIChm
b3JjZS1vdXRwdXQgcG9ydCkKKyAgICAgICAgKGdldC1oYXNoKSkKKyAgICAgIChmaWxlLWhhc2gg
YWxnb3JpdGhtIGZpbGUpKSkKZGlmZiAtLWdpdCBhL2d1aXgvc2NyaXB0cy9oYXNoLnNjbSBiL2d1
aXgvc2NyaXB0cy9oYXNoLnNjbQppbmRleCBiODYyMjM3M2NjLi4zNTNjYTMwYzJjIDEwMDY0NAot
LS0gYS9ndWl4L3NjcmlwdHMvaGFzaC5zY20KKysrIGIvZ3VpeC9zY3JpcHRzL2hhc2guc2NtCkBA
IC0zLDYgKzMsNyBAQAogOzs7IENvcHlyaWdodCDCqSAyMDEzIE5pa2l0YSBLYXJldG5pa292IDxu
aWtpdGFAa2FyZXRuaWtvdi5vcmc+CiA7OzsgQ29weXJpZ2h0IMKpIDIwMTYgSmFuIE5pZXV3ZW5o
dWl6ZW4gPGphbm5la2VAZ251Lm9yZz4KIDs7OyBDb3B5cmlnaHQgwqkgMjAxOCBUaW0gR2VzdGh1
aXplbiA8dGltLmdlc3RodWl6ZW5AeWFob28uZGU+Cis7OzsgQ29weXJpZ2h0IMKpIDIwMjEgU2Fy
YWggTW9yZ2Vuc2VuIDxpc2thcmlhbkBtZ3NuLmRldj4KIDs7OwogOzs7IFRoaXMgZmlsZSBpcyBw
YXJ0IG9mIEdOVSBHdWl4LgogOzs7CkBAIC0yMyw2ICsyNCw3IEBACiAgICM6dXNlLW1vZHVsZSAo
Z2NyeXB0IGhhc2gpCiAgICM6dXNlLW1vZHVsZSAoZ3VpeCBzZXJpYWxpemF0aW9uKQogICAjOnVz
ZS1tb2R1bGUgKGd1aXggdWkpCisgICM6dXNlLW1vZHVsZSAoZ3VpeCBoYXNoKQogICAjOnVzZS1t
b2R1bGUgKGd1aXggc2NyaXB0cykKICAgIzp1c2UtbW9kdWxlIChndWl4IGJhc2UxNikKICAgIzp1
c2UtbW9kdWxlIChndWl4IGJhc2UzMikKQEAgLTEyNSwxNiArMTI3LDYgQEAgYW5kICdiYXNlMTYn
ICgnaGV4JyBhbmQgJ2hleGFkZWNpbWFsJyBjYW4gYmUgdXNlZCBhcyB3ZWxsKS5cbiIpKQogICAg
IChwYXJzZS1jb21tYW5kLWxpbmUgYXJncyAlb3B0aW9ucyAobGlzdCAlZGVmYXVsdC1vcHRpb25z
KQogICAgICAgICAgICAgICAgICAgICAgICAgIzpidWlsZC1vcHRpb25zPyAjZikpCiAKLSAgKGRl
ZmluZSAodmNzLWZpbGU/IGZpbGUgc3RhdCkKLSAgICAoY2FzZSAoc3RhdDp0eXBlIHN0YXQpCi0g
ICAgICAoKGRpcmVjdG9yeSkKLSAgICAgICAobWVtYmVyIChiYXNlbmFtZSBmaWxlKSAnKCIuYnpy
IiAiLmdpdCIgIi5oZyIgIi5zdm4iICJDVlMiKSkpCi0gICAgICAoKHJlZ3VsYXIpCi0gICAgICAg
OzsgR2l0IHN1Yi1tb2R1bGVzIGhhdmUgYSAnLmdpdCcgZmlsZSB0aGF0IGlzIGEgcmVndWxhciB0
ZXh0IGZpbGUuCi0gICAgICAgKHN0cmluZz0/IChiYXNlbmFtZSBmaWxlKSAiLmdpdCIpKQotICAg
ICAgKGVsc2UKLSAgICAgICAjZikpKQotCiAgIChsZXQqICgob3B0cyAocGFyc2Utb3B0aW9ucykp
CiAgICAgICAgICAoYXJncyAoZmlsdGVyLW1hcCAobWF0Y2gtbGFtYmRhCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgKCgnYXJndW1lbnQgLiB2YWx1ZSkKQEAgLTE1MCwxOCArMTQyLDExIEBA
IGFuZCAnYmFzZTE2JyAoJ2hleCcgYW5kICdoZXhhZGVjaW1hbCcgY2FuIGJlIHVzZWQgYXMgd2Vs
bCkuXG4iKSkKICAgICAgIDs7IENvbXB1dGUgdGhlIGhhc2ggb2YgRklMRS4KICAgICAgIDs7IENh
dGNoIGFuZCBncmFjZWZ1bGx5IHJlcG9ydCBwb3NzaWJsZSAnJm5hci1lcnJvcicgY29uZGl0aW9u
cy4KICAgICAgICh3aXRoLWVycm9yLWhhbmRsaW5nCi0gICAgICAgIChpZiAoYXNzb2MtcmVmIG9w
dHMgJ3JlY3Vyc2l2ZT8pCi0gICAgICAgICAgICAobGV0LXZhbHVlcyAoKChwb3J0IGdldC1oYXNo
KQotICAgICAgICAgICAgICAgICAgICAgICAgICAob3Blbi1oYXNoLXBvcnQgKGFzc29jLXJlZiBv
cHRzICdoYXNoLWFsZ29yaXRobSkpKSkKLSAgICAgICAgICAgICAgKHdyaXRlLWZpbGUgZmlsZSBw
b3J0ICM6c2VsZWN0PyBzZWxlY3Q/KQotICAgICAgICAgICAgICAoZm9yY2Utb3V0cHV0IHBvcnQp
Ci0gICAgICAgICAgICAgIChnZXQtaGFzaCkpCi0gICAgICAgICAgICAobWF0Y2ggZmlsZQotICAg
ICAgICAgICAgICAoIi0iIChwb3J0LWhhc2ggKGFzc29jLXJlZiBvcHRzICdoYXNoLWFsZ29yaXRo
bSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjdXJyZW50LWlucHV0LXBvcnQpKSkK
LSAgICAgICAgICAgICAgKF8gICAoY2FsbC13aXRoLWlucHV0LWZpbGUgZmlsZQotICAgICAgICAg
ICAgICAgICAgICAgKGN1dGUgcG9ydC1oYXNoIChhc3NvYy1yZWYgb3B0cyAnaGFzaC1hbGdvcml0
aG0pCi0gICAgICAgICAgICAgICAgICAgICAgICAgICA8PikpKSkpKSkKKyAgICAgICAgKG1hdGNo
IGZpbGUKKyAgICAgICAgICAoIi0iIChwb3J0LWhhc2ggKGFzc29jLXJlZiBvcHRzICdoYXNoLWFs
Z29yaXRobSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgKGN1cnJlbnQtaW5wdXQtcG9ydCkp
KQorICAgICAgICAgIChfICAgKGZpbGUtaGFzaCogIzphbGdvcml0aG0gKGFzc29jLXJlZiBvcHRz
ICdoYXNoLWFsZ29yaXRobSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICM6cmVjdXJzaXZl
PyAoYXNzb2MtcmVmIG9wdHMgJ3JlY3Vyc2l2ZT8pKSkpKSkKIAogICAgIChtYXRjaCBhcmdzCiAg
ICAgICAoKGZpbGUpCi0tIAoyLjMzLjAKCg==


--=-FFYmpQl4eyfmi+ZCpAS1
Content-Disposition: attachment;
	filename*0=v2-0003-gexp-Allow-computing-the-hash-of-the-local-file-i.pat;
	filename*1=ch
Content-Type: text/x-patch;
	name="v2-0003-gexp-Allow-computing-the-hash-of-the-local-file-i.patch";
	charset="UTF-8"
Content-Transfer-Encoding: base64

RnJvbSBlNWRjNDY4MDA1OTcwMjNkZmMxYzlkNTNjYzZlMGRiMmYzOTk5MDIyIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBNYXhpbWUgRGV2b3MgPG1heGltZWRldm9zQHRlbGVuZXQuYmU+
CkRhdGU6IFNhdCwgNCBTZXAgMjAyMSAxNTozNTo1MSArMDIwMApTdWJqZWN0OiBbUEFUQ0ggdjIg
My85XSBnZXhwOiBBbGxvdyBjb21wdXRpbmcgdGhlIGhhc2ggb2YgdGhlIGxvY2FsIGZpbGUgaW4K
IGFkdmFuY2UuCgpUaGUgbmV3IGZpZWxkIGlzIGN1cnJlbnRseSB1bnVzZWQuICBUaGUgZm9sbG93
aW5nIHBhdGNoZXMgd2lsbApwb3B1bGF0ZSBhbmQgdXNlIHRoZSBmaWVsZCB0byByZWR1Y2UgdGhl
IHRpbWUtdG8tZGVyaXZhdGlvbgp3aGVuIHRoZSBmaWxlIGlzIGFscmVhZHkgaW50ZXJuZWQgaW4g
dGhlIHN0b3JlLgoKKiBndWl4L2dleHAuc2NtCiAgKDxsb2NhbC1maWxlPik6IEFkZCBzaGEyNTYg
ZmllbGQuCiAgKCVsb2NhbC1maWxlKTogQWRkIHNoYTI1NiBhcmd1bWVudCBmb3IgcG9wdWxhdGlu
ZyB0aGUgZmllbGQuCiAgKGxvY2FsLWZpbGUtY29tcGlsZXIpOiBBZGp1c3QgJ21hdGNoJyBleHBy
ZXNzaW9uLgotLS0KIGd1aXgvZ2V4cC5zY20gfCAxMiArKysrKysrKy0tLS0KIDEgZmlsZSBjaGFu
Z2VkLCA4IGluc2VydGlvbnMoKyksIDQgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvZ3VpeC9n
ZXhwLnNjbSBiL2d1aXgvZ2V4cC5zY20KaW5kZXggZjNkMjc4YjNlNi4uYTYzMzk4NDY4OCAxMDA2
NDQKLS0tIGEvZ3VpeC9nZXhwLnNjbQorKysgYi9ndWl4L2dleHAuc2NtCkBAIC00MTksMTMgKzQx
OSwxNiBAQCBIZXJlIFRBUkdFVCBpcyBib3VuZCB0byB0aGUgY3Jvc3MtY29tcGlsYXRpb24gdHJp
cGxldCBvciAjZi4iCiA7OyBBIGxvY2FsIGZpbGUgbmFtZS4gIEZJTEUgaXMgdGhlIGZpbGUgbmFt
ZSB0aGUgdXNlciBlbnRlcmVkLCB3aGljaCBjYW4gYmUgYQogOzsgcmVsYXRpdmUgZmlsZSBuYW1l
LCBhbmQgQUJTT0xVVEUgaXMgYSBwcm9taXNlIHRoYXQgY29tcHV0ZXMgaXRzIGNhbm9uaWNhbAog
OzsgYWJzb2x1dGUgZmlsZSBuYW1lLiAgV2Uga2VlcCBpdCBpbiBhIHByb21pc2UgdG8gY29tcHV0
ZSBpdCBsYXppbHkgYW5kIGF2b2lkCi07OyByZXBlYXRlZCAnc3RhdCcgY2FsbHMuCis7OyByZXBl
YXRlZCAnc3RhdCcgY2FsbHMuICBBbGxvdyBjb21wdXRpbmcgdGhlIGhhc2ggb2YgdGhlIGZpbGUg
aW4gYWR2YW5jZSwKKzs7IHRvIGF2b2lkIGhhdmluZyB0byBzZW5kIHRoZSBmaWxlIHRvIHRoZSBk
YWVtb24gd2hlbiBpdCBpcyBhbHJlYWR5IGludGVybmVkCis7OyBpbiB0aGUgc3RvcmUuCiAoZGVm
aW5lLXJlY29yZC10eXBlIDxsb2NhbC1maWxlPgotICAoJSVsb2NhbC1maWxlIGZpbGUgYWJzb2x1
dGUgbmFtZSByZWN1cnNpdmU/IHNlbGVjdD8pCisgICglJWxvY2FsLWZpbGUgZmlsZSBhYnNvbHV0
ZSBuYW1lIHNoYTI1NiByZWN1cnNpdmU/IHNlbGVjdD8pCiAgIGxvY2FsLWZpbGU/CiAgIChmaWxl
ICAgICAgIGxvY2FsLWZpbGUtZmlsZSkgICAgICAgICAgICAgICAgICAgIDtzdHJpbmcKICAgKGFi
c29sdXRlICAgJWxvY2FsLWZpbGUtYWJzb2x1dGUtZmlsZS1uYW1lKSAgICAgO3Byb21pc2Ugc3Ry
aW5nCiAgIChuYW1lICAgICAgIGxvY2FsLWZpbGUtbmFtZSkgICAgICAgICAgICAgICAgICAgIDtz
dHJpbmcKKyAgKHNoYTI1NiAgICAgbG9jYWwtZmlsZS1zaGEyNTYpICAgICAgICAgICAgICAgICAg
O3NoYTI1NiBieXRldmVjdG9yIHwgI2YKICAgKHJlY3Vyc2l2ZT8gbG9jYWwtZmlsZS1yZWN1cnNp
dmU/KSAgICAgICAgICAgICAgO0Jvb2xlYW4KICAgKHNlbGVjdD8gICAgbG9jYWwtZmlsZS1zZWxl
Y3Q/KSkgICAgICAgICAgICAgICAgO3N0cmluZyBzdGF0IC0+IEJvb2xlYW4KIApAQCAtNDM0LDYg
KzQzNyw3IEBAIEhlcmUgVEFSR0VUIGlzIGJvdW5kIHRvIHRoZSBjcm9zcy1jb21waWxhdGlvbiB0
cmlwbGV0IG9yICNmLiIKIChkZWZpbmUqICglbG9jYWwtZmlsZSBmaWxlIHByb21pc2UgIzpvcHRp
b25hbCAobmFtZSAoYmFzZW5hbWUgZmlsZSkpCiAgICAgICAgICAgICAgICAgICAgICAgIzprZXkK
ICAgICAgICAgICAgICAgICAgICAgICAobGl0ZXJhbD8gI3QpIGxvY2F0aW9uCisgICAgICAgICAg
ICAgICAgICAgICAgc2hhMjU2CiAgICAgICAgICAgICAgICAgICAgICAgcmVjdXJzaXZlPyAoc2Vs
ZWN0PyB0cnVlKSkKICAgOzsgVGhpcyBpbnRlcm1lZGlhdGUgcHJvY2VkdXJlIGlzIHBhcnQgb2Yg
b3VyIEFCSSwgYnV0IHRoZSB1bmRlcmx5aW5nCiAgIDs7ICUlTE9DQUwtRklMRSBpcyBub3QuCkBA
IC00NDEsNyArNDQ1LDcgQEAgSGVyZSBUQVJHRVQgaXMgYm91bmQgdG8gdGhlIGNyb3NzLWNvbXBp
bGF0aW9uIHRyaXBsZXQgb3IgI2YuIgogICAgICh3YXJuaW5nIChhbmQ9PiBsb2NhdGlvbiBzb3Vy
Y2UtcHJvcGVydGllcy0+bG9jYXRpb24pCiAgICAgICAgICAgICAgKEdfICJyZXNvbHZpbmcgJ35h
JyByZWxhdGl2ZSB0byBjdXJyZW50IGRpcmVjdG9yeX4lIikKICAgICAgICAgICAgICBmaWxlKSkK
LSAgKCUlbG9jYWwtZmlsZSBmaWxlIHByb21pc2UgbmFtZSByZWN1cnNpdmU/IHNlbGVjdD8pKQor
ICAoJSVsb2NhbC1maWxlIGZpbGUgcHJvbWlzZSBuYW1lIHNoYTI1NiByZWN1cnNpdmU/IHNlbGVj
dD8pKQogCiAoZGVmaW5lIChhYnNvbHV0ZS1maWxlLW5hbWUgZmlsZSBkaXJlY3RvcnkpCiAgICJS
ZXR1cm4gdGhlIGNhbm9uaWNhbCBhYnNvbHV0ZSBmaWxlIG5hbWUgZm9yIEZJTEUsIHdoaWNoIGxp
dmVzIGluIHRoZQpAQCAtNTE3LDcgKzUyMSw3IEBAIGFwcGVhcnMuIgogKGRlZmluZS1nZXhwLWNv
bXBpbGVyIChsb2NhbC1maWxlLWNvbXBpbGVyIChmaWxlIDxsb2NhbC1maWxlPikgc3lzdGVtIHRh
cmdldCkKICAgOzsgIkNvbXBpbGUiIEZJTEUgYnkgYWRkaW5nIGl0IHRvIHRoZSBzdG9yZS4KICAg
KG1hdGNoIGZpbGUKLSAgICAoKCQgPGxvY2FsLWZpbGU+IGZpbGUgKD0gZm9yY2UgYWJzb2x1dGUp
IG5hbWUgcmVjdXJzaXZlPyBzZWxlY3Q/KQorICAgICgoJCA8bG9jYWwtZmlsZT4gZmlsZSAoPSBm
b3JjZSBhYnNvbHV0ZSkgbmFtZSBzaGEyNTYgcmVjdXJzaXZlPyBzZWxlY3Q/KQogICAgICA7OyBD
YW5vbmljYWxpemUgRklMRSBzbyB0aGF0IGlmIGl0J3MgYSBzeW1saW5rLCBpdCBpcyByZXNvbHZl
ZC4gIEZhaWxpbmcKICAgICAgOzsgdG8gZG8gdGhhdCwgd2hlbiBSRUNVUlNJVkU/IGlzICN0LCB3
ZSBjb3VsZCBlbmQgdXAgY3JlYXRpbmcgYSBkYW5nbGluZwogICAgICA7OyBzeW1saW5rIGluIHRo
ZSBzdG9yZSwgYW5kIHdoZW4gUkVDVVJTSVZFPyBpcyAjZiAnYWRkLXRvLXN0b3JlJyB3b3VsZAot
LSAKMi4zMy4wCgo=


--=-FFYmpQl4eyfmi+ZCpAS1
Content-Disposition: attachment;
	filename="v2-0004-gexp-Allow-overriding-the-absolute-file-name.patch"
Content-Type: text/x-patch;
	name="v2-0004-gexp-Allow-overriding-the-absolute-file-name.patch";
	charset="UTF-8"
Content-Transfer-Encoding: base64

RnJvbSA4YTY0YWM3ODc2NzAxM2U4MmYyNmNmZGRhZTk1MWE4ZWYyZTJjYWY4IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBNYXhpbWUgRGV2b3MgPG1heGltZWRldm9zQHRlbGVuZXQuYmU+
CkRhdGU6IFNhdCwgNCBTZXAgMjAyMSAxNjoyNToyMiArMDIwMApTdWJqZWN0OiBbUEFUQ0ggdjIg
NC85XSBnZXhwOiBBbGxvdyBvdmVycmlkaW5nIHRoZSBhYnNvbHV0ZSBmaWxlIG5hbWUuCgpUaGlz
IHdpbGwgYmUgdXNlZCBieSB0aGUgbmV4dCBwYXRjaCB0byBpbXBsZW1lbnQgc2VhcmNoLXBhdGNo
IGluCnRlcm1zIG9mIGxvY2FsLWZpbGUuCgoqIGd1aXgvZ2V4cC5zY20KICAocHJlY2Fub25pY2Fs
aXplZC1maWxlLW5hbWUpOiBOZXcgbWFjcm8uCiAgKGxvY2FsLWZpbGUpOiBVc2UgdGhlIGFic29s
dXRlIGZpbGUgbmFtZSBmcm9tIHByZWNhbm9uaWNhbGl6ZWQtZmlsZS1uYW1lCiAgd2hlbiBhdmFp
bGFibGUuCi0tLQogZ3VpeC9nZXhwLnNjbSB8IDEyICsrKysrKysrKysrLQogMSBmaWxlIGNoYW5n
ZWQsIDExIGluc2VydGlvbnMoKyksIDEgZGVsZXRpb24oLSkKCmRpZmYgLS1naXQgYS9ndWl4L2dl
eHAuc2NtIGIvZ3VpeC9nZXhwLnNjbQppbmRleCBhNjMzOTg0Njg4Li5jNjllNGFhMjk5IDEwMDY0
NAotLS0gYS9ndWl4L2dleHAuc2NtCisrKyBiL2d1aXgvZ2V4cC5zY20KQEAgLTUxLDYgKzUxLDcg
QEAKICAgICAgICAgICAgIGdleHAtaW5wdXQtb3V0cHV0CiAgICAgICAgICAgICBnZXhwLWlucHV0
LW5hdGl2ZT8KIAorICAgICAgICAgICAgcHJlY2Fub25pY2FsaXplZC1maWxlLW5hbWUKICAgICAg
ICAgICAgIGFzc3VtZS12YWxpZC1maWxlLW5hbWUKICAgICAgICAgICAgIGxvY2FsLWZpbGUKICAg
ICAgICAgICAgIGxvY2FsLWZpbGU/CkBAIC00NjMsNiArNDY0LDEyIEBAIHRoZSBnaXZlbiBmaWxl
IG5hbWUgaXMgdmFsaWQsIGV2ZW4gaWYgaXQncyBub3QgYSBzdHJpbmcgbGl0ZXJhbCwgYW5kIHRo
dXMgbm90CiB3YXJuIGFib3V0IGl0LiIKICAgZmlsZSkKIAorKGRlZmluZS1zeW50YXgtcnVsZSAo
cHJlY2Fub25pY2FsaXplZC1maWxlLW5hbWUgZmlsZSBhYnNvbHV0ZSkKKyAgIlRoaXMgaXMgYSBz
eW50YWN0aWMga2V5d29yZCB0byB0ZWxsICdsb2NhbC1maWxlJyB0aGF0IGl0IGNhbiBhc3N1bWUg
dGhhdAordGhlIGdpdmVuIGZpbGUgbmFtZSBGSUxFIGhhcyBBQlNPTFVURSBhcyBhYnNvbHV0ZSBm
aWxlIG5hbWUgYW5kICdsb2NhbC1maWxlJworZG9lcyBub3QgbmVlZCB0byBjb21wdXRlIHRoZSBh
YnNvbHV0ZSBmaWxlIG5hbWUgYnkgaXRzZWxmLiIKKyAgYWJzb2x1dGUpCisKIChkZWZpbmUtc3lu
dGF4IGxvY2FsLWZpbGUKICAgKGxhbWJkYSAocykKICAgICAiUmV0dXJuIGFuIG9iamVjdCByZXBy
ZXNlbnRpbmcgbG9jYWwgZmlsZSBGSUxFIHRvIGFkZCB0byB0aGUgc3RvcmU7IHRoaXMKQEAgLTQ4
MSw3ICs0ODgsNyBAQCB3aGVyZSBGSUxFIGlzIHRoZSBlbnRyeSdzIGFic29sdXRlIGZpbGUgbmFt
ZSBhbmQgU1RBVCBpcyB0aGUgcmVzdWx0IG9mCiBUaGlzIGlzIHRoZSBkZWNsYXJhdGl2ZSBjb3Vu
dGVycGFydCBvZiB0aGUgJ2ludGVybmVkLWZpbGUnIG1vbmFkaWMgcHJvY2VkdXJlLgogSXQgaXMg
aW1wbGVtZW50ZWQgYXMgYSBtYWNybyB0byBjYXB0dXJlIHRoZSBjdXJyZW50IHNvdXJjZSBkaXJl
Y3Rvcnkgd2hlcmUgaXQKIGFwcGVhcnMuIgotICAgIChzeW50YXgtY2FzZSBzIChhc3N1bWUtdmFs
aWQtZmlsZS1uYW1lKQorICAgIChzeW50YXgtY2FzZSBzIChhc3N1bWUtdmFsaWQtZmlsZS1uYW1l
IHByZWNhbm9uaWNhbGl6ZWQtZmlsZS1uYW1lKQogICAgICAgKChfIGZpbGUgcmVzdCAuLi4pCiAg
ICAgICAgKHN0cmluZz8gKHN5bnRheC0+ZGF0dW0gIydmaWxlKSkKICAgICAgICA7OyBGSUxFIGlz
IGEgbGl0ZXJhbCwgc28gcmVzb2x2ZSBpdCByZWxhdGl2ZSB0byB0aGUgc291cmNlIGRpcmVjdG9y
eS4KQEAgLTQ5NSw2ICs1MDIsOSBAQCBhcHBlYXJzLiIKICAgICAgICAjJyglbG9jYWwtZmlsZSBm
aWxlCiAgICAgICAgICAgICAgICAgICAgICAgKGRlbGF5IChhYnNvbHV0ZS1maWxlLW5hbWUgZmls
ZSAoZ2V0Y3dkKSkpCiAgICAgICAgICAgICAgICAgICAgICAgcmVzdCAuLi4pKQorICAgICAgKChf
IChwcmVjYW5vbmljYWxpemVkLWZpbGUtbmFtZSBmaWxlIGFic29sdXRlKSByZXN0IC4uLikKKyAg
ICAgICA7OyBVc2UgdGhlIGdpdmVuIGZpbGUgbmFtZSBBQlNPTFVURSBhcyBhYnNvbHV0ZSBmaWxl
IG5hbWUuCisgICAgICAgIycoJWxvY2FsLWZpbGUgZmlsZSAoZGVsYXkgYWJzb2x1dGUpIHJlc3Qg
Li4uKSkKICAgICAgICgoXyBmaWxlIHJlc3QgLi4uKQogICAgICAgIDs7IFJlc29sdmUgRklMRSBy
ZWxhdGl2ZSB0byB0aGUgY3VycmVudCBkaXJlY3RvcnkuCiAgICAgICAgKHdpdGgtc3ludGF4ICgo
bG9jYXRpb24gKGRhdHVtLT5zeW50YXggcyAoc3ludGF4LXNvdXJjZSBzKSkpKQotLSAKMi4zMy4w
Cgo=


--=-FFYmpQl4eyfmi+ZCpAS1
Content-Disposition: attachment;
	filename*0=v2-0005-packages-Compute-the-hash-of-patches-in-advance-w.pat;
	filename*1=ch
Content-Type: text/x-patch;
	name="v2-0005-packages-Compute-the-hash-of-patches-in-advance-w.patch";
	charset="UTF-8"
Content-Transfer-Encoding: base64

RnJvbSA3MzdkN2ZiOGUxOGM0ZTZlNGRiMWQ4MjQ1NTIxMWVlNWJkZmFlMTRkIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBNYXhpbWUgRGV2b3MgPG1heGltZWRldm9zQHRlbGVuZXQuYmU+
CkRhdGU6IFNhdCwgNCBTZXAgMjAyMSAxNzoyNTo1OCArMDIwMApTdWJqZWN0OiBbUEFUQ0ggdjIg
NS85XSBwYWNrYWdlczogQ29tcHV0ZSB0aGUgaGFzaCBvZiBwYXRjaGVzIGluIGFkdmFuY2Ugd2hl
bgogcG9zc2libGUuCgoqIGdudS9wYWNrYWdlcy5zY20KICAoc2VhcmNoLXBhdGNoKTogUmVuYW1l
IHRvIC4uLgogICglc2VhcmNoLXBhdGNoKTogLi4uIHRoaXMuCiAgKHRyeS1zZWFyY2gtcGF0Y2gp
OiBOZXcgcHJvY2VkdXJlLCBleHRyYWN0ZWQgZnJvbSAuLi4KICAoJXNlYXJjaC1wYXRjaCk6IC4u
LiB0aGlzIHByb2NlZHVyZS4KICAoJWxvY2FsLXBhdGNoLWZpbGUpOiBOZXcgcHJvY2VkdXJlLgog
ICh0cnVlKTogTmV3IHByb2NlZHVyZS4KICAoc2VhcmNoLXBhdGNoKTogTmV3IG1hY3JvLCBiZWhh
dmluZyBsaWtlICVzZWFyY2gtcGF0Y2gsIGJ1dCBjb21wdXRpbmcgdGhlCiAgaGFzaCBhdCBleHBh
bnNpb24gdGltZSB3aGVuIHBvc3NpYmxlLgoqIGdudS9wYWNrYWdlcy9jaHJvbWl1bS5zY20KICAo
JWd1aXgtcGF0Y2hlcyk6IFVzZSBzZWFyY2gtcGF0Y2hlcyBpbnN0ZWFkIG9mIGxvY2FsLWZpbGUg
KwogIGFzc3VtZS12YWxpZC1maWxlLW5hbWUgKyBzZWFyY2gtcGF0Y2guCiogZ251L3BhY2thZ2Vz
L2dudXppbGxhLnNjbQogIChpY2VjYXQtc291cmNlKVtnbnV6aWxsYS1maXhlcy1wYXRjaF06IFVz
ZSBzZWFyY2gtcGF0Y2ggaW5zdGVhZCBvZgogIGxvY2FsLWZpbGUgKyBhc3N1bGUtdmFsaWQtZmls
ZS1uYW1lICsgc2VhcmNoLXBhdGNoLgogIChpY2VjYXQtc291cmNlKVttYWtlaWNlY2F0LXBhdGNo
XTogTGlrZXdpc2UuCiogZ251L3BhY2thZ2VzL2VtYmVkZGVkLnNjbQogIChnY2MtYXJtLW5vbmUt
ZWFiaS00LjkpW3NvdXJjZV17cGF0Y2hlc306IEV4cGVjdCBwYXRjaGVzIHRvIGJlCiAgbG9jYWwt
ZmlsZSBvYmplY3RzIGluc3RlYWQgb2Ygc3RyaW5ncy4KICBvZiBzdHJpbmdzLgoqIGd1aXgvbGlu
dC5zY20gKGNoZWNrLXBhdGNoLWZpbGUtbmFtZXMpOiBBbGxvdyBsb2NhbC1maWxlIG9iamVjdHMu
Ci0tLQogZ251L3BhY2thZ2VzLnNjbSAgICAgICAgICB8IDQyICsrKysrKysrKysrKysrKysrKysr
KysrKysrKysrKysrKysrKystLQogZ251L3BhY2thZ2VzL2Nocm9taXVtLnNjbSB8ICA0ICstLS0K
IGdudS9wYWNrYWdlcy9lbWJlZGRlZC5zY20gfCAgMyArKy0KIGdudS9wYWNrYWdlcy9nbnV6aWxs
YS5zY20gfCAgOCArKy0tLS0tLQogZ3VpeC9saW50LnNjbSAgICAgICAgICAgICB8IDI4ICsrKysr
KysrKysrKysrKystLS0tLS0tLS0tCiA1IGZpbGVzIGNoYW5nZWQsIDYyIGluc2VydGlvbnMoKyks
IDIzIGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL2dudS9wYWNrYWdlcy5zY20gYi9nbnUvcGFj
a2FnZXMuc2NtCmluZGV4IGNjZmM4M2RkMTEuLmY1NTUyZTVhOWIgMTAwNjQ0Ci0tLSBhL2dudS9w
YWNrYWdlcy5zY20KKysrIGIvZ251L3BhY2thZ2VzLnNjbQpAQCAtNCw2ICs0LDcgQEAKIDs7OyBD
b3B5cmlnaHQgwqkgMjAxNCBFcmljIEJhdmllciA8YmF2aWVyQG1lbWJlci5mc2Yub3JnPgogOzs7
IENvcHlyaWdodCDCqSAyMDE2LCAyMDE3IEFsZXggS29zdCA8YWxlem9zdEBnbWFpbC5jb20+CiA7
OzsgQ29weXJpZ2h0IMKpIDIwMTYgTWF0aGlldSBMaXJ6aW4gPG10aGxAZ251Lm9yZz4KKzs7OyBD
b3B5cmlnaHQgwqkgMjAyMSBNYXhpbWUgRGV2b3MgPG1heGltZWRldm9zQHRlbGVuZXQuYmU+CiA7
OzsKIDs7OyBUaGlzIGZpbGUgaXMgcGFydCBvZiBHTlUgR3VpeC4KIDs7OwpAQCAtMjEsMTEgKzIy
LDEzIEBACiA7OzsgYWxvbmcgd2l0aCBHTlUgR3VpeC4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3
LmdudS5vcmcvbGljZW5zZXMvPi4KIAogKGRlZmluZS1tb2R1bGUgKGdudSBwYWNrYWdlcykKKyAg
Izp1c2UtbW9kdWxlIChndWl4IGdleHApCiAgICM6dXNlLW1vZHVsZSAoZ3VpeCBwYWNrYWdlcykK
ICAgIzp1c2UtbW9kdWxlIChndWl4IHVpKQogICAjOnVzZS1tb2R1bGUgKGd1aXggdXRpbHMpCiAg
ICM6dXNlLW1vZHVsZSAoZ3VpeCBkaWFnbm9zdGljcykKICAgIzp1c2UtbW9kdWxlIChndWl4IGRp
c2NvdmVyeSkKKyAgIzp1c2UtbW9kdWxlIChndWl4IGhhc2gpCiAgICM6dXNlLW1vZHVsZSAoZ3Vp
eCBtZW1vaXphdGlvbikKICAgIzp1c2UtbW9kdWxlICgoZ3VpeCBidWlsZCB1dGlscykKICAgICAg
ICAgICAgICAgICAjOnNlbGVjdCAoKHBhY2thZ2UtbmFtZS0+bmFtZSt2ZXJzaW9uCkBAIC05MCwx
MiArOTMsNDcgQEAKICAgIlNlYXJjaCB0aGUgYXV4aWxpYXJ5IEZJTEUtTkFNRS4gIFJldHVybiAj
ZiBpZiBub3QgZm91bmQuIgogICAoc2VhcmNoLXBhdGggKCVhdXhpbGlhcnktZmlsZXMtcGF0aCkg
ZmlsZS1uYW1lKSkKIAotKGRlZmluZSAoc2VhcmNoLXBhdGNoIGZpbGUtbmFtZSkKKyhkZWZpbmUg
KHRyeS1zZWFyY2gtcGF0Y2ggZmlsZS1uYW1lKQorICAiU2VhcmNoIHRoZSBwYXRjaCBGSUxFLU5B
TUUuICBSZXR1cm4gI2YgaWYgbm90IGZvdW5kLiIKKyAgKHNlYXJjaC1wYXRoICglcGF0Y2gtcGF0
aCkgZmlsZS1uYW1lKSkKKworKGRlZmluZSAoJXNlYXJjaC1wYXRjaCBmaWxlLW5hbWUpCiAgICJT
ZWFyY2ggdGhlIHBhdGNoIEZJTEUtTkFNRS4gIFJhaXNlIGFuIGVycm9yIGlmIG5vdCBmb3VuZC4i
Ci0gIChvciAoc2VhcmNoLXBhdGggKCVwYXRjaC1wYXRoKSBmaWxlLW5hbWUpCisgIChvciAodHJ5
LXNlYXJjaC1wYXRjaCBmaWxlLW5hbWUpCiAgICAgICAocmFpc2UgKGZvcm1hdHRlZC1tZXNzYWdl
IChHXyAifmE6IHBhdGNoIG5vdCBmb3VuZCIpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGZpbGUtbmFtZSkpKSkKIAorKGRlZmluZSAoJWxvY2FsLXBhdGNoLWZpbGUgZmlsZS1uYW1l
IGhhc2gpCisgICJTZWFyY2ggdGhlIHBhdGNoIEZJTEUtTkFNRSwgd2hpY2ggaXMga25vd24gdG8g
aGF2ZSBIQVNILiIKKyAgKGxvY2FsLWZpbGUgKHByZWNhbm9uaWNhbGl6ZWQtZmlsZS1uYW1lIGZp
bGUtbmFtZSAoJXNlYXJjaC1wYXRjaCBmaWxlLW5hbWUpKQorICAgICAgICAgICAgICAjOnNoYTI1
NiBoYXNoICM6cmVjdXJzaXZlPyAjdCkpCisKKyhkZWZpbmUgdHJ1ZSAoY29uc3QgI3QpKQorCiso
ZGVmaW5lLXN5bnRheCBzZWFyY2gtcGF0Y2gKKyAgKGxhbWJkYSAocykKKyAgICAiU2VhcmNoIHRo
ZSBwYXRjaCBGSUxFLU5BTUUgYW5kIGNvbXB1dGUgaXRzIGhhc2ggYXQgZXhwYW5zaW9uIHRpbWUK
K2lmIHBvc3NpYmxlLiAgUmV0dXJuICNmIGlmIG5vdCBmb3VuZC4iCisgICAgKHN5bnRheC1jYXNl
IHMgKCkKKyAgICAgICgoXyBmaWxlLW5hbWUpCisgICAgICAgKHN0cmluZz8gKHN5bnRheC0+ZGF0
dW0gIydmaWxlLW5hbWUpKQorICAgICAgIDs7IEZJTEUtTkFNRSBpcyBhIGNvbnN0YW50IHN0cmlu
Zywgc28gdGhlIGhhc2ggY2FuIGJlIGNvbXB1dGVkCisgICAgICAgOzsgaW4gYWR2YW5jZS4KKyAg
ICAgICAobGV0ICgocGF0Y2ggKHRyeS1zZWFyY2gtcGF0Y2ggKHN5bnRheC0+ZGF0dW0gIydmaWxl
LW5hbWUpKSkpCisgICAgICAgICAoaWYgcGF0Y2gKKyAgICAgICAgICAgICAjYCglbG9jYWwtcGF0
Y2gtZmlsZSBmaWxlLW5hbWUgIywoZmlsZS1oYXNoKiBwYXRjaCAjOnNlbGVjdD8gdHJ1ZSkpCisg
ICAgICAgICAgICAgKGJlZ2luCisgICAgICAgICAgICAgICAod2FybmluZyAoc291cmNlLXByb3Bl
cnRpZXMtPmxvY2F0aW9uCisgICAgICAgICAgICAgICAgICAgICAgICAgKHN5bnRheC1zb3VyY2Ug
IydmaWxlLW5hbWUpKQorICAgICAgICAgICAgICAgICAgICAgICAgKEdfICJ+YTogcGF0Y2ggbm90
IGZvdW5kIGF0IGV4cGFuc2lvbiB0aW1lIikKKyAgICAgICAgICAgICAgICAgICAgICAgIChzeW50
YXgtPmRhdHVtICMnaWxlLW5hbWUpKQorICAgICAgICAgICAgICAgIycoJXNlYXJjaC1wYXRjaCBm
aWxlLW5hbWUpKSkpKQorICAgICAgOzsgRklMRS1OQU1FIGlzIHZhcmlhYmxlLCBzbyB0aGUgaGFz
aCBjYW5ub3QgYmUgcHJlLWNvbXB1dGVkLgorICAgICAgKChfIGZpbGUtbmFtZSkgIycoJXNlYXJj
aC1wYXRjaCBmaWxlLW5hbWUpKQorICAgICAgOzsgc2VhcmNoLXBhdGNoIGlzIGJlaW5nIHVzZWQg
dXNlZCBpbiBhIGNvbnN0cnVjdCBsaWtlCisgICAgICA7OyAobWFwIHNlYXJjaC1wYXRjaCAuLi4p
LgorICAgICAgKGlkIChpZGVudGlmaWVyPyAjJ2lkKSAjJyVzZWFyY2gtcGF0Y2gpKSkpCisKIChk
ZWZpbmUtc3ludGF4LXJ1bGUgKHNlYXJjaC1wYXRjaGVzIGZpbGUtbmFtZSAuLi4pCiAgICJSZXR1
cm4gdGhlIGxpc3Qgb2YgYWJzb2x1dGUgZmlsZSBuYW1lcyBjb3JyZXNwb25kaW5nIHRvIGVhY2gK
IEZJTEUtTkFNRSBmb3VuZCBpbiAlUEFUQ0gtUEFUSC4iCmRpZmYgLS1naXQgYS9nbnUvcGFja2Fn
ZXMvY2hyb21pdW0uc2NtIGIvZ251L3BhY2thZ2VzL2Nocm9taXVtLnNjbQppbmRleCAyNmFlMWUy
NTUwLi5jZjQxOWNmNDFiIDEwMDY0NAotLS0gYS9nbnUvcGFja2FnZXMvY2hyb21pdW0uc2NtCisr
KyBiL2dudS9wYWNrYWdlcy9jaHJvbWl1bS5zY20KQEAgLTM1MSw5ICszNTEsNyBAQAogICAgICAg
IjB3YmNianpoNWFrNG5jaWFocXc0eXZ4YzR4OGlrNHgwaXo5aDRrZnkwbTAxMXN4enkxNzQiKSkp
KQogCiAoZGVmaW5lICVndWl4LXBhdGNoZXMKLSAgKGxpc3QgKGxvY2FsLWZpbGUKLSAgICAgICAg
IChhc3N1bWUtdmFsaWQtZmlsZS1uYW1lCi0gICAgICAgICAgKHNlYXJjaC1wYXRjaCAidW5nb29n
bGVkLWNocm9taXVtLWV4dGVuc2lvbi1zZWFyY2gtcGF0aC5wYXRjaCIpKSkpKQorICAoc2VhcmNo
LXBhdGNoZXMgInVuZ29vZ2xlZC1jaHJvbWl1bS1leHRlbnNpb24tc2VhcmNoLXBhdGgucGF0Y2gi
KSkKIAogOzsgVGhpcyBpcyBhIHNvdXJjZSAnc25pcHBldCcgdGhhdCBkb2VzIHRoZSBmb2xsb3dp
bmc6CiA7OyAqKSBBcHBsaWVzIHZhcmlvdXMgcGF0Y2hlcyBmb3IgdW5idW5kbGluZyBwdXJwb3Nl
cyBhbmQgbGlic3RkYysrIGNvbXBhdGliaWxpdHkuCmRpZmYgLS1naXQgYS9nbnUvcGFja2FnZXMv
ZW1iZWRkZWQuc2NtIGIvZ251L3BhY2thZ2VzL2VtYmVkZGVkLnNjbQppbmRleCBmMzg4YzExYzNk
Li44MjZmNTY1NWMzIDEwMDY0NAotLS0gYS9nbnUvcGFja2FnZXMvZW1iZWRkZWQuc2NtCisrKyBi
L2dudS9wYWNrYWdlcy9lbWJlZGRlZC5zY20KQEAgLTMwLDYgKzMwLDcgQEAKICAgIzp1c2UtbW9k
dWxlIChndWl4IHBhY2thZ2VzKQogICAjOnVzZS1tb2R1bGUgKGd1aXggZG93bmxvYWQpCiAgICM6
dXNlLW1vZHVsZSAoZ3VpeCBzdm4tZG93bmxvYWQpCisgICM6dXNlLW1vZHVsZSAoZ3VpeCBnZXhw
KQogICAjOnVzZS1tb2R1bGUgKGd1aXggZ2l0LWRvd25sb2FkKQogICAjOnVzZS1tb2R1bGUgKChn
dWl4IGxpY2Vuc2VzKSAjOnByZWZpeCBsaWNlbnNlOikKICAgIzp1c2UtbW9kdWxlIChndWl4IGJ1
aWxkLXN5c3RlbSBjbWFrZSkKQEAgLTkxLDcgKzkyLDcgQEAKICAgICAgICAgIDs7IFJlbW92ZSB0
aGUgb25lIHBhdGNoIHRoYXQgZG9lc24ndCBhcHBseSB0byB0aGlzIDQuOSBzbmFwc2hvdCAodGhl
CiAgICAgICAgICA7OyBwYXRjaCBpcyBmb3IgNC45LjQgYW5kIGxhdGVyIGJ1dCB0aGlzIHN2biBz
bmFwc2hvdCBpcyBvbGRlcikuCiAgICAgICAgICAocGF0Y2hlcyAocmVtb3ZlIChsYW1iZGEgKHBh
dGNoKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzdHJpbmc9PyAoYmFzZW5hbWUgcGF0
Y2gpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHN0cmluZz0/IChsb2NhbC1maWxlLW5h
bWUgcGF0Y2gpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJnY2MtYXJt
LWJ1Zy03MTM5OS5wYXRjaCIpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAob3JpZ2luLXBh
dGNoZXMgKHBhY2thZ2Utc291cmNlIHhnY2MpKSkpKSkKICAgICAgIChuYXRpdmUtaW5wdXRzCmRp
ZmYgLS1naXQgYS9nbnUvcGFja2FnZXMvZ251emlsbGEuc2NtIGIvZ251L3BhY2thZ2VzL2dudXpp
bGxhLnNjbQppbmRleCA1NzZiYzI1ODZmLi5iZTY3NGRjZThmIDEwMDY0NAotLS0gYS9nbnUvcGFj
a2FnZXMvZ251emlsbGEuc2NtCisrKyBiL2dudS9wYWNrYWdlcy9nbnV6aWxsYS5zY20KQEAgLTcz
NiwxNCArNzM2LDEwIEBAIGZyb20gZm9yY2luZyBHRVhQLVBST01JU0UuIgogICAgICAgICAgICAg
IChiYXNlMzIKICAgICAgICAgICAgICAgIjAwd3MzNTQweDV3aHBpY2M1Zng0azk0OWZmNzNjcXZh
ano2anAxM2FobjQ5d3FkYWRzNDciKSkpKQogCi0gICAgICAgICA7OyAnc2VhcmNoLXBhdGNoJyBy
ZXR1cm5zIGVpdGhlciBhIHZhbGlkIGZpbGUgbmFtZSBvciAjZiwgc28gd3JhcCBpdAotICAgICAg
ICAgOzsgaW4gJ2Fzc3VtZS12YWxpZC1maWxlLW5hbWUnIHRvIGF2b2lkICdsb2NhbC1maWxlJyB3
YXJuaW5ncy4KICAgICAgICAgIChnbnV6aWxsYS1maXhlcy1wYXRjaAotICAgICAgICAgIChsb2Nh
bC1maWxlIChhc3N1bWUtdmFsaWQtZmlsZS1uYW1lCi0gICAgICAgICAgICAgICAgICAgICAgIChz
ZWFyY2gtcGF0Y2ggImljZWNhdC11c2Utb2xkZXItcmV2ZWFsLWhpZGRlbi1odG1sLnBhdGNoIikp
KSkKKyAgICAgICAgICAoc2VhcmNoLXBhdGNoICJpY2VjYXQtdXNlLW9sZGVyLXJldmVhbC1oaWRk
ZW4taHRtbC5wYXRjaCIpKQogICAgICAgICAgKG1ha2VpY2VjYXQtcGF0Y2gKLSAgICAgICAgICAo
bG9jYWwtZmlsZSAoYXNzdW1lLXZhbGlkLWZpbGUtbmFtZQotICAgICAgICAgICAgICAgICAgICAg
ICAoc2VhcmNoLXBhdGNoICJpY2VjYXQtbWFrZWljZWNhdC5wYXRjaCIpKSkpKQorICAgICAgICAg
IChzZWFyY2gtcGF0Y2ggImljZWNhdC1tYWtlaWNlY2F0LnBhdGNoIikpKQogCiAgICAgKG9yaWdp
bgogICAgICAgKG1ldGhvZCBjb21wdXRlZC1vcmlnaW4tbWV0aG9kKQpkaWZmIC0tZ2l0IGEvZ3Vp
eC9saW50LnNjbSBiL2d1aXgvbGludC5zY20KaW5kZXggM2E3ZjNiZTMyNy4uYjBhMmZiYzMyNyAx
MDA2NDQKLS0tIGEvZ3VpeC9saW50LnNjbQorKysgYi9ndWl4L2xpbnQuc2NtCkBAIC00Niw2ICs0
Niw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdleHAtPmFwcHJveGltYXRl
LXNleHApKQogICAjOnVzZS1tb2R1bGUgKGd1aXggbGljZW5zZXMpCiAgICM6dXNlLW1vZHVsZSAo
Z3VpeCByZWNvcmRzKQorICAjOnVzZS1tb2R1bGUgKGd1aXggZ2V4cCkKICAgIzp1c2UtbW9kdWxl
IChndWl4IGdyYWZ0cykKICAgIzp1c2UtbW9kdWxlIChndWl4IHVwc3RyZWFtKQogICAjOnVzZS1t
b2R1bGUgKGd1aXggdXRpbHMpCkBAIC05MjgsNiArOTI5LDggQEAgcGF0Y2ggY291bGQgbm90IGJl
IGZvdW5kLiIKICAgICAgICAgICAgICAgICAgICAoc3RhcnRzLXdpdGgtcGFja2FnZS1uYW1lPyAo
YmFzZW5hbWUgcGF0Y2gpKSkKICAgICAgICAgICAgICAgICAgICgoPyBvcmlnaW4/IHBhdGNoKQog
ICAgICAgICAgICAgICAgICAgIChzdGFydHMtd2l0aC1wYWNrYWdlLW5hbWU/IChvcmlnaW4tYWN0
dWFsLWZpbGUtbmFtZSBwYXRjaCkpKQorICAgICAgICAgICAgICAgICAgKCg/IGxvY2FsLWZpbGU/
IHBhdGNoKQorICAgICAgICAgICAgICAgICAgIChzdGFydHMtd2l0aC1wYWNrYWdlLW5hbWU/IChs
b2NhbC1maWxlLW5hbWUgcGF0Y2gpKSkKICAgICAgICAgICAgICAgICAgIChfICAjZikpICAgICA7
bXVzdCBiZSBzb21lIG90aGVyIGZpbGUtbGlrZSBvYmplY3QKICAgICAgICAgICAgICAgICBwYXRj
aGVzKQogICAgICAgICAgJygpCkBAIC05NDEsMTkgKzk0NCwyMiBAQCBwYXRjaCBjb3VsZCBub3Qg
YmUgZm91bmQuIgogICAgICAobGV0ICgocHJlZml4IChzdHJpbmctbGVuZ3RoICglZGlzdHJvLWRp
cmVjdG9yeSkpKQogICAgICAgICAgICAobWFyZ2luIChzdHJpbmctbGVuZ3RoICJndWl4LTIuMC4w
cmMzLTEwMDAwLTEyMzQ1Njc4OTAvIikpCiAgICAgICAgICAgIChtYXggICAgOTkpKQorICAgICAg
IChkZWZpbmUgKHRlc3QtcGF0Y2gtbmFtZSBmaWxlLW5hbWUpCisgICAgICAgICAoaWYgKD4gKCsg
bWFyZ2luIChpZiAoc3RyaW5nLXByZWZpeD8gKCVkaXN0cm8tZGlyZWN0b3J5KSBmaWxlLW5hbWUp
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoLSAoc3RyaW5nLWxlbmd0aCBmaWxlLW5h
bWUpIHByZWZpeCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzdHJpbmctbGVuZ3Ro
IGZpbGUtbmFtZSkpKQorICAgICAgICAgICAgICAgIG1heCkKKyAgICAgICAgICAgICAobWFrZS13
YXJuaW5nCisgICAgICAgICAgICAgIHBhY2thZ2UKKyAgICAgICAgICAgICAgKEdfICJ+YTogZmls
ZSBuYW1lIGlzIHRvbyBsb25nIikKKyAgICAgICAgICAgICAgKGxpc3QgKGJhc2VuYW1lIGZpbGUt
bmFtZSkpCisgICAgICAgICAgICAgICM6ZmllbGQgJ3BhdGNoLWZpbGUtbmFtZXMpCisgICAgICAg
ICAgICAgI2YpKQogICAgICAgIChmaWx0ZXItbWFwIChtYXRjaC1sYW1iZGEKICAgICAgICAgICAg
ICAgICAgICAgICgoPyBzdHJpbmc/IHBhdGNoKQotICAgICAgICAgICAgICAgICAgICAgIChpZiAo
PiAoKyBtYXJnaW4gKGlmIChzdHJpbmctcHJlZml4PyAoJWRpc3Ryby1kaXJlY3RvcnkpCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBh
dGNoKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgtIChzdHJp
bmctbGVuZ3RoIHBhdGNoKSBwcmVmaXgpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgKHN0cmluZy1sZW5ndGggcGF0Y2gpKSkKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgbWF4KQotICAgICAgICAgICAgICAgICAgICAgICAgICAobWFrZS13YXJuaW5nCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICBwYWNrYWdlCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAoR18gIn5hOiBmaWxlIG5hbWUgaXMgdG9vIGxvbmciKQotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgKGxpc3QgKGJhc2VuYW1lIHBhdGNoKSkKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICM6ZmllbGQgJ3BhdGNoLWZpbGUtbmFtZXMpCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICNmKSkKKyAgICAgICAgICAgICAgICAgICAgICAodGVzdC1wYXRjaC1uYW1lIHBhdGNoKSkKKyAg
ICAgICAgICAgICAgICAgICAgICgoPyBsb2NhbC1maWxlPyBwYXRjaCkKKyAgICAgICAgICAgICAg
ICAgICAgICAodGVzdC1wYXRjaC1uYW1lIChsb2NhbC1maWxlLWFic29sdXRlLWZpbGUtbmFtZSBw
YXRjaCkpKQogICAgICAgICAgICAgICAgICAgICAgKF8gI2YpKQogICAgICAgICAgICAgICAgICAg
IHBhdGNoZXMpKSkpKQogCi0tIAoyLjMzLjAKCg==


--=-FFYmpQl4eyfmi+ZCpAS1
Content-Disposition: attachment;
	filename*0=v2-0006-compile-all-compile-Keep-track-of-dependencies-of.pat;
	filename*1=ch
Content-Type: text/x-patch;
	name="v2-0006-compile-all-compile-Keep-track-of-dependencies-of.patch";
	charset="UTF-8"
Content-Transfer-Encoding: base64

RnJvbSA0MGRlYmM4OTEwNzk5ZGY2MGJjYTM0M2NhY2EwNWY4Yzc5ZjQ2NDIxIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBNYXhpbWUgRGV2b3MgPG1heGltZWRldm9zQHRlbGVuZXQuYmU+
CkRhdGU6IFN1biwgNSBTZXAgMjAyMSAxNDowMjozMCArMDIwMApTdWJqZWN0OiBbUEFUQ0ggdjIg
Ni85XSBjb21waWxlLWFsbCxjb21waWxlOiBLZWVwIHRyYWNrIG9mIGRlcGVuZGVuY2llcyBvZgog
Y29tcGlsZWQgbW9kdWxlcy4KClRoaXMgcGF0Y2ggZGVmaW5lcyBhICdub3RpY2UtZGVwZW5kZW5j
eScgcHJvY2VkdXJlLgpNYWNyb3MgY2FuIHVzZSB0aGlzIHByb2NlZHVyZSB0byBpbmZvcm0gYnVp
bGQtYXV4L2NvbXBpbGUtYWxsLnNjbQp0aGF0IGEgbW9kdWxlIG5lZWRzIHRvIGJlIHJlY29tcGls
ZWQgd2hlbiBzb21lIGZpbGUgaXMgdXBkYXRlZC4KCiogZ3VpeC9idWlsZC9jb21waWxlLnNjbQog
IChjdXJyZW50LWRlcGVuZGVuY3ktaW5mbywgY3VycmVudC1vdXRwdXQtZmlsZSk6IE5ldyBwYXJh
bWV0ZXJzLgogIChub3RpY2UtZGVwZW5kZW5jeSk6IE5ldyBwcm9jZWR1cmUuCiAgKGNvbXBpbGUt
ZmlsZXMpW2J1aWxkXTogU2V0ICdvdXRwdXQtZmlsZScuICBEZWxldGUgdGhlIG9sZCBjb21waWxl
ZCBmaWxlCiAgaWYgbmVjZXNzYXJ5LiAgUmVtb3ZlIG9sZCBkZXBlbmRlbmN5IGluZm9ybWF0aW9u
LgoqIGJ1aWxkLWF1eC9jb21waWxlLWFsbC5zY206IFBvcHVsYXRlIGN1cnJlbnQtZGVwZW5kZW5j
eS1pbmZvIGZyb20gYSBmaWxlLgogIFBvcHVsYXRlIHRoZSBmaWxlIGRlcGVuZGVuY3ktaW5mby5z
Y20gZnJvbSB0aGUgaGFzaCB0YWJsZS4KICAoYnVpbGRkaXIpOiBOZXcgdmFyaWFibGUuCiAgKGZp
bGUtbmVlZHMtY29tcGlsYXRpb24/KTogQ2hlY2sgaWYgdGhlIC5nbyBmaWxlIGlzIG9sZGVyIHRo
YW4gdGhlCiAgZGVwZW5kZW5jaWVzLgoqIC5naXRpZ25vcmU6IElnbm9yZSBkZXBlbmRlbmN5LWlu
Zm8uc2NtLgotLS0KIC5naXRpZ25vcmUgICAgICAgICAgICAgICAgfCAgMSArCiBidWlsZC1hdXgv
Y29tcGlsZS1hbGwuc2NtIHwgMzcgKysrKysrKysrKysrKysrKysrKysrKysrKysrKy0tLS0KIGd1
aXgvYnVpbGQvY29tcGlsZS5zY20gICAgfCA0NSArKysrKysrKysrKysrKysrKysrKysrKysrKysr
KysrKy0tLS0tLS0KIDMgZmlsZXMgY2hhbmdlZCwgNzEgaW5zZXJ0aW9ucygrKSwgMTIgZGVsZXRp
b25zKC0pCgpkaWZmIC0tZ2l0IGEvLmdpdGlnbm9yZSBiLy5naXRpZ25vcmUKaW5kZXggODhmZTI0
NTg2ZC4uZjI0ZWE1ZmMzYiAxMDA2NDQKLS0tIGEvLmdpdGlnbm9yZQorKysgYi8uZ2l0aWdub3Jl
CkBAIC0xNTQsMyArMTU0LDQgQEAgdG1wCiAvZ251L3BhY2thZ2VzL2Jvb3RzdHJhcAogL2dudS9w
YWNrYWdlcy9hdXgtZmlsZXMvZ3VpbGUtZ3VpbGUtbGF1bmNoZXIubwogL2d1aWxlCisvZGVwZW5k
ZW5jeS1pbmZvLnNjbQpkaWZmIC0tZ2l0IGEvYnVpbGQtYXV4L2NvbXBpbGUtYWxsLnNjbSBiL2J1
aWxkLWF1eC9jb21waWxlLWFsbC5zY20KaW5kZXggOWZmYmNlNDNhZC4uMDIyOTQwNzNlZCAxMDA2
NDQKLS0tIGEvYnVpbGQtYXV4L2NvbXBpbGUtYWxsLnNjbQorKysgYi9idWlsZC1hdXgvY29tcGls
ZS1hbGwuc2NtCkBAIC0xLDYgKzEsNyBAQAogOzs7IEdOVSBHdWl4IC0tLSBGdW5jdGlvbmFsIHBh
Y2thZ2UgbWFuYWdlbWVudCBmb3IgR05VCiA7OzsgQ29weXJpZ2h0IMKpIDIwMTYgVGF5bGFuIFVs
cmljaCBCYXnEsXJsxLEvS2FtbWVyIDx0YXlsYW5iYXlpcmxpQGdtYWlsLmNvbT4KIDs7OyBDb3B5
cmlnaHQgwqkgMjAxNiwgMjAxNywgMjAxOSwgMjAyMCwgMjAyMSBMdWRvdmljIENvdXJ0w6hzIDxs
dWRvQGdudS5vcmc+Cis7OzsgQ29weXJpZ2h0IMKpIDIwMjEgTWF4aW1lIERldm9zIDxtYXhpbWVk
ZXZvc0B0ZWxlbmV0LmJlPgogOzs7CiA7OzsgVGhpcyBmaWxlIGlzIHBhcnQgb2YgR05VIEd1aXgu
CiA7OzsKQEAgLTIwLDEyICsyMSwxNSBAQAogKHVzZS1tb2R1bGVzIChpY2UtOSBmb3JtYXQpCiAg
ICAgICAgICAgICAgKGljZS05IG1hdGNoKQogICAgICAgICAgICAgIChpY2UtOSB0aHJlYWRzKQor
ICAgICAgICAgICAgIChpY2UtOSBoYXNoLXRhYmxlKQogICAgICAgICAgICAgIChzcmZpIHNyZmkt
MSkKKyAgICAgICAgICAgICAoc3JmaSBzcmZpLTI2KQogICAgICAgICAgICAgIChndWl4IGJ1aWxk
IGNvbXBpbGUpCiAgICAgICAgICAgICAgKGd1aXggYnVpbGQgdXRpbHMpKQogCiAoZGVmaW5lIGhv
c3QgKGdldGVudiAiaG9zdCIpKQogKGRlZmluZSBzcmNkaXIgKGdldGVudiAic3JjZGlyIikpCiso
ZGVmaW5lIGJ1aWxkZGlyIChnZXRjd2QpKQogCiAoZGVmaW5lIChyZWxhdGl2ZS1maWxlIGZpbGUp
CiAgIChpZiAoc3RyaW5nLXByZWZpeD8gKHN0cmluZy1hcHBlbmQgc3JjZGlyICIvIikgZmlsZSkK
QEAgLTQxLDEwICs0NSwzMyBAQAogICAgICAgICAgKHdpdGhvdXQtZXh0ZW5zaW9uIChzdHJpbmct
ZHJvcC1yaWdodCByZWxhdGl2ZSA0KSkpCiAgICAgKHN0cmluZy1hcHBlbmQgd2l0aG91dC1leHRl
bnNpb24gIi5nbyIpKSkKIAorOzsgUmVhZCBkZXBlbmRlbmN5IGluZm9ybWF0aW9uIGZyb20gcHJl
dmlvdXMgIm1ha2UiIHJ1bnMuCisoY3VycmVudC1kZXBlbmRlbmN5LWluZm8gKG1ha2UtaGFzaC10
YWJsZSkpCisoaWYgKGZpbGUtZXhpc3RzPyAiZGVwZW5kZW5jeS1pbmZvLnNjbSIpCisgICAgKGN1
cnJlbnQtZGVwZW5kZW5jeS1pbmZvCisgICAgIChhbGlzdC0+aGFzaC10YWJsZQorICAgICAgKGNh
bGwtd2l0aC1pbnB1dC1maWxlICJkZXBlbmRlbmN5LWluZm8uc2NtIiByZWFkICM6ZW5jb2Rpbmcg
IlVURi04IikpKQorICAgIChjdXJyZW50LWRlcGVuZGVuY3ktaW5mbyAobWFrZS1oYXNoLXRhYmxl
KSkpCisKKyhkZWZpbmUgKGR1bXAtZGVwZW5kZW5jeS1pbmZvKQorICAiRHVtcCB0aGUgY3VycmVu
dCBkZXBlbmRlbmN5IGluZm9ybWF0aW9uIGZvciB0aGUgbmV4dCBcIm1ha2VcIiBydW4uIgorICAo
Y2FsbC13aXRoLW91dHB1dC1maWxlICJkZXBlbmRlbmN5LWluZm8uc2NtLm5ldyIKKyAgICAobGFt
YmRhIChwb3J0KQorICAgICAgKGRpc3BsYXkgIjs7IFRoaXMgaXMgYXV0by1nZW5lcmF0ZWQgYnkg
YnVpbGQtYXV4L2NvbXBpbGUtYWxsLnNjbSwKKzs7IGRvIG5vdCBtb2RpZnkgbWFudWFsbHkhCisi
IHBvcnQpCisgICAgICAod3JpdGUgKGhhc2gtbWFwLT5saXN0IGNvbnMgKGN1cnJlbnQtZGVwZW5k
ZW5jeS1pbmZvKSkgcG9ydCkpCisgICAgIzplbmNvZGluZyAiVVRGLTgiKQorICAocmVuYW1lLWZp
bGUgImRlcGVuZGVuY3ktaW5mby5zY20ubmV3IiAiZGVwZW5kZW5jeS1pbmZvLnNjbSIpKQorCiAo
ZGVmaW5lIChmaWxlLW5lZWRzLWNvbXBpbGF0aW9uPyBmaWxlKQotICAobGV0ICgoZ28gKHNjbS0+
Z28gZmlsZSkpKQorICAobGV0KiAoKGdvIChzY20tPmdvIGZpbGUpKQorICAgICAgICAgKGV4dHJh
LWRlcGVuZGVuY2llcworICAgICAgICAgIChoYXNoLXJlZiAoY3VycmVudC1kZXBlbmRlbmN5LWlu
Zm8pIChpbi12aWNpbml0eSBidWlsZGRpciBnbykKKyAgICAgICAgICAgICAgICAgICAgJygpKSkp
CiAgICAgKG9yIChub3QgKGZpbGUtZXhpc3RzPyBnbykpCi0gICAgICAgIChmaWxlLW10aW1lPD8g
Z28gZmlsZSkpKSkKKyAgICAgICAgKGZpbGUtbXRpbWU8PyBnbyBmaWxlKQorICAgICAgICAoYW55
IChjdXQgZmlsZS1tdGltZTw/IGdvIDw+KSBleHRyYS1kZXBlbmRlbmNpZXMpKSkpCiAKIChkZWZp
bmUqIChwYXJhbGxlbC1qb2ItY291bnQgIzpvcHRpb25hbCAoZmxhZ3MgKGdldGVudiAiTUFLRUZM
QUdTIikpKQogICAiUmV0dXJuIHRoZSBudW1iZXIgb2YgcGFyYWxsZWwgam9icyBhcyBkZXRlcm1p
bmVkIGJ5IEZMQUdTLCB0aGUgZmxhZ3MgcGFzc2VkCkBAIC0xMDksNyArMTM2LDcgQEAgdG8gJ21h
a2UnLiIKICAgICAgICAobGV0KiAoKHRvLWJ1aWxkICAoZmlsdGVyIGZpbGUtbmVlZHMtY29tcGls
YXRpb24/IGZpbGVzKSkKICAgICAgICAgICAgICAgKHByb2Nlc3NlZCAoKyBwcm9jZXNzZWQKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAoLSAobGVuZ3RoIGZpbGVzKSAobGVuZ3RoIHRvLWJ1
aWxkKSkpKSkKLSAgICAgICAgIChjb21waWxlLWZpbGVzIHNyY2RpciAoZ2V0Y3dkKSB0by1idWls
ZAorICAgICAgICAgKGNvbXBpbGUtZmlsZXMgc3JjZGlyIGJ1aWxkZGlyIHRvLWJ1aWxkCiAgICAg
ICAgICAgICAgICAgICAgICAgICAjOndvcmtlcnMgKHBhcmFsbGVsLWpvYi1jb3VudCopCiAgICAg
ICAgICAgICAgICAgICAgICAgICAjOmhvc3QgaG9zdAogICAgICAgICAgICAgICAgICAgICAgICAg
IzpyZXBvcnQtbG9hZCAobGFtYmRhIChmaWxlIHRvdGFsIGNvbXBsZXRlZCkKQEAgLTEyNyw4ICsx
NTQsMTAgQEAgdG8gJ21ha2UnLiIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqIDIgcHJvY2Vzc2VkKSkKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgq
IDIgZ3JhbmQtdG90YWwpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgKHNjbS0+Z28gZmlsZSkpCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgKGZvcmNlLW91dHB1dCkpKSkpKQorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChmb3JjZS1vdXRwdXQpKSkp
KQorICAgICAgIChkdW1wLWRlcGVuZGVuY3ktaW5mbykpCiAgICAgIChsYW1iZGEgXworICAgICAg
IChkdW1wLWRlcGVuZGVuY3ktaW5mbykKICAgICAgICAocHJpbWl0aXZlLWV4aXQgMSkpCiAgICAg
IChsYW1iZGEgYXJncwogICAgICAgIDs7IFRyeSB0byByZXBvcnQgdGhlIGVycm9yIGluIGFuIGlu
dGVsbGlnaWJsZSB3YXkuCmRpZmYgLS1naXQgYS9ndWl4L2J1aWxkL2NvbXBpbGUuc2NtIGIvZ3Vp
eC9idWlsZC9jb21waWxlLnNjbQppbmRleCBiODZlYzNiNzQzLi5jMjU5YjI3YWJmIDEwMDY0NAot
LS0gYS9ndWl4L2J1aWxkL2NvbXBpbGUuc2NtCisrKyBiL2d1aXgvYnVpbGQvY29tcGlsZS5zY20K
QEAgLTEsNiArMSw3IEBACiA7OzsgR05VIEd1aXggLS0tIEZ1bmN0aW9uYWwgcGFja2FnZSBtYW5h
Z2VtZW50IGZvciBHTlUKIDs7OyBDb3B5cmlnaHQgwqkgMjAxMywgMjAxNCwgMjAxNiwgMjAxNywg
MjAxOCwgMjAxOSwgMjAyMCBMdWRvdmljIENvdXJ0w6hzIDxsdWRvQGdudS5vcmc+CiA7OzsgQ29w
eXJpZ2h0IMKpIDIwMTUgVGF5bGFuIFVscmljaCBCYXnEsXJsxLEvS2FtbWVyIDx0YXlsYW5iYXlp
cmxpQGdtYWlsLmNvbT4KKzs7OyBDb3B5cmlnaHQgwqkgMjAyMSBNYXhpbWUgRGV2b3MgPG1heGlt
ZWRldm9zQHRlbGVuZXQuYmU+CiA7OzsKIDs7OyBUaGlzIGZpbGUgaXMgcGFydCBvZiBHTlUgR3Vp
eC4KIDs7OwpAQCAtMjksMTQgKzMwLDI3IEBACiAgICM6dXNlLW1vZHVsZSAoZ3VpeCBidWlsZCB1
dGlscykKICAgIzp1c2UtbW9kdWxlIChsYW5ndWFnZSB0cmVlLWlsIG9wdGltaXplKQogICAjOnVz
ZS1tb2R1bGUgKGxhbmd1YWdlIGNwcyBvcHRpbWl6ZSkKLSAgIzpleHBvcnQgKGNvbXBpbGUtZmls
ZXMpKQorICAjOmV4cG9ydCAoY29tcGlsZS1maWxlcyBub3RpY2UtZGVwZW5kZW5jeSBjdXJyZW50
LWRlcGVuZGVuY3ktaW5mbykpCiAKIDs7OyBDb21tZW50YXJ5OgogOzs7Ci07OzsgU3VwcG9ydCBj
b2RlIHRvIGNvbXBpbGUgR3VpbGUgY29kZSBhcyBlZmZpY2llbnRseSBhcyBwb3NzaWJsZSAod2l0
aCAyLjIpLgorOzs7IFN1cHBvcnQgY29kZSB0byBjb21waWxlIEd1aWxlIGNvZGUgYXMgZWZmaWNp
ZW50bHkgYXMgcG9zc2libGUgKHdpdGggMi4yKQorOzs7IGFuZCBrZWVwIHRyYWNrIG9mIHRoZSBk
ZXBlbmRlbmNpZXMgb2YgY29tcGlsZWQgZmlsZXMuCiA7OzsKIDs7OyBDb2RlOgogCisoZGVmaW5l
IGN1cnJlbnQtZGVwZW5kZW5jeS1pbmZvIChtYWtlLXBhcmFtZXRlciAjZikpCisoZGVmaW5lIGN1
cnJlbnQtb3V0cHV0LWZpbGUgKG1ha2UtcGFyYW1ldGVyICNmKSkKKworKGRlZmluZSAobm90aWNl
LWRlcGVuZGVuY3kgZGVwZW5kZW5jeSkKKyAgIkFkZCB0aGUgZmlsZSBERVBFTkRFTkNZIHRvIHRo
ZSBsaXN0IG9mIGRlcGVuZGVuY2llcyBvZiB0aGUgY29tcGlsZWQgZmlsZQordGhhdCBpcyBiZWlu
ZyBjb21wdXRlZCwgaWYgYW55LiIKKyAgKGRlZmluZSBkZXBlbmRlbmN5LXRhYmxlIChjdXJyZW50
LWRlcGVuZGVuY3ktaW5mbykpCisgIChkZWZpbmUgb3V0cHV0IChjdXJyZW50LW91dHB1dC1maWxl
KSkKKyAgKHdoZW4gKGFuZCBkZXBlbmRlbmN5LXRhYmxlIG91dHB1dCkKKyAgICAoaGFzaC1zZXQh
IGRlcGVuZGVuY3ktdGFibGUgb3V0cHV0CisgICAgICAgICAgICAgICAoY29ucyBkZXBlbmRlbmN5
IChoYXNoLXJlZiBkZXBlbmRlbmN5LXRhYmxlIG91dHB1dCAnKCkpKSkpKQorCiAoZGVmaW5lIG9w
dGltaXphdGlvbnMtZm9yLWxldmVsCiAgIChvciAoYW5kPT4gKGZhbHNlLWlmLWV4Y2VwdGlvbgog
ICAgICAgICAgICAgICAocmVzb2x2ZS1pbnRlcmZhY2UgJyhzeXN0ZW0gYmFzZSBvcHRpbWl6ZSkp
KQpAQCAtMjA3LDEyICsyMjEsMjcgQEAgZmlsZXMgYXJlIGZvciBIT1NULCBhIEdOVSB0cmlwbGV0
IHN1Y2ggYXMgXCJ4ODZfNjQtbGludXgtZ251XCIuIgogICAgIDs7IEV4aXQgYXMgc29vbiBhcyBz
b21ldGhpbmcgZ29lcyB3cm9uZy4KICAgICAoZXhpdC1vbi1leGNlcHRpb24KICAgICAgZmlsZQot
ICAgICAobGV0ICgocmVsYXRpdmUgKHJlbGF0aXZlLWZpbGUgc291cmNlLWRpcmVjdG9yeSBmaWxl
KSkpCi0gICAgICAgKGNvbXBpbGUtZmlsZSBmaWxlCi0gICAgICAgICAgICAgICAgICAgICAjOm91
dHB1dC1maWxlIChzdHJpbmctYXBwZW5kIGJ1aWxkLWRpcmVjdG9yeSAiLyIKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHNjbS0+Z28gcmVsYXRpdmUp
KQotICAgICAgICAgICAgICAgICAgICAgIzpvcHRzIChhcHBlbmQgd2FybmluZy1vcHRpb25zCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAob3B0aW1pemF0aW9uLW9wdGlvbnMg
cmVsYXRpdmUpKSkpKSkKKyAgICAgKGxldCogKChyZWxhdGl2ZSAocmVsYXRpdmUtZmlsZSBzb3Vy
Y2UtZGlyZWN0b3J5IGZpbGUpKQorICAgICAgICAgICAgKG91dHB1dC1maWxlIChzdHJpbmctYXBw
ZW5kIGJ1aWxkLWRpcmVjdG9yeSAiLyIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAoc2NtLT5nbyByZWxhdGl2ZSkpKSkKKyAgICAgICAocGFyYW1ldGVyaXplICgoY3Vy
cmVudC1vdXRwdXQtZmlsZSBvdXRwdXQtZmlsZSkpCisgICAgICAgICAod2hlbiAoY3VycmVudC1k
ZXBlbmRlbmN5LWluZm8pCisgICAgICAgICAgIDs7IElmIGRlcGVuZGVuY3kgaW5mb3JtYXRpb24g
aXMgYmVpbmcgdHJhY2tlZCwgcmVtb3ZlCisgICAgICAgICAgIDs7IHRoZSBvbGQgY29tcGlsZWQg
ZmlsZSBmaXJzdC4gIE90aGVyd2lzZSwgaWYgcmVjb21waWxpbmcKKyAgICAgICAgICAgOzsgdGhl
IGZpbGUgZHVlIHRvIGFuIHVwZGF0ZWQgZGVwZW5kZW5jeSBjYXVzZXMgYW4gZXhjZXB0aW9uLAor
ICAgICAgICAgICA7OyB0aGUgbmV3IGRlcGVuZGVuY3kgaW5mb3JtYXRpb24gd29uJ3QgaW5jbHVk
ZSB0aGUgY29tcGlsZWQKKyAgICAgICAgICAgOzsgZmlsZSBhbmQgdGhlcmVmb3JlIHRoZSBvbGQg
Y29tcGlsZWQgZmlsZSB3b3VsZCBiZSBjb25zaWRlcmVkCisgICAgICAgICAgIDs7IHVwLXRvLWRh
dGUgb24gdGhlIGZvbGxvd2luZyAibWFrZSIgcnVuLgorICAgICAgICAgICAod2hlbiAoZmlsZS1l
eGlzdHM/IG91dHB1dC1maWxlKQorICAgICAgICAgICAgIChkZWxldGUtZmlsZSBvdXRwdXQtZmls
ZSkpCisgICAgICAgICAgIDs7IFJlbW92ZSB0aGUgb2xkIGRlcGVuZGVuY3kgaW5mb3JtYXRpb24s
IG90aGVyd2lzZQorICAgICAgICAgICA7OyB0aGUgZGVwZW5kZW5jeSBpbmZvcm1hdGlvbiB0YWJs
ZSB3aWxsIGtlZXAgZ3Jvd2luZworICAgICAgICAgICA7OyBhZnRlciBlYWNoICJtYWtlIiBydW4u
CisgICAgICAgICAgIChoYXNoLXJlbW92ZSEgKGN1cnJlbnQtZGVwZW5kZW5jeS1pbmZvKSBvdXRw
dXQtZmlsZSkpCisgICAgICAgICAoY29tcGlsZS1maWxlIGZpbGUKKyAgICAgICAgICAgICAgICAg
ICAgICAgIzpvdXRwdXQtZmlsZSBvdXRwdXQtZmlsZQorICAgICAgICAgICAgICAgICAgICAgICAj
Om9wdHMgKGFwcGVuZCB3YXJuaW5nLW9wdGlvbnMKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgKG9wdGltaXphdGlvbi1vcHRpb25zIHJlbGF0aXZlKSkpKSkpKQogCiAgICh3
aXRoLWF1Z21lbnRlZC1zZWFyY2gtcGF0aCAlbG9hZC1wYXRoIHNvdXJjZS1kaXJlY3RvcnkKICAg
ICAod2l0aC1hdWdtZW50ZWQtc2VhcmNoLXBhdGggJWxvYWQtY29tcGlsZWQtcGF0aCBidWlsZC1k
aXJlY3RvcnkKLS0gCjIuMzMuMAoK


--=-FFYmpQl4eyfmi+ZCpAS1
Content-Disposition: attachment;
	filename*0=v2-0007-packages-Add-patches-to-the-dependency-list-of-pa.pat;
	filename*1=ch
Content-Type: text/x-patch;
	name="v2-0007-packages-Add-patches-to-the-dependency-list-of-pa.patch";
	charset="UTF-8"
Content-Transfer-Encoding: base64

RnJvbSAyYmMyOWQ0NDNkYzVkNjA5Njk2MmRhM2Q1YTEwMjg0NzM0NjJjNDMxIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBNYXhpbWUgRGV2b3MgPG1heGltZWRldm9zQHRlbGVuZXQuYmU+
CkRhdGU6IFN1biwgNSBTZXAgMjAyMSAxNzoxNTowOCArMDIwMApTdWJqZWN0OiBbUEFUQ0ggdjIg
Ny85XSBwYWNrYWdlczogQWRkIHBhdGNoZXMgdG8gdGhlIGRlcGVuZGVuY3kgbGlzdCBvZgogcGFj
a2FnZSBtb2R1bGVzLgoKKiBnbnUvcGFja2FnZXMuc2NtIChzZWFyY2gtcGF0Y2gpOiBDYWxsICdu
b3RpY2UtZGVwZW5kZW5jeScgb24KICB0aGUgcGF0Y2ggZmlsZS4KLS0tCiBnbnUvcGFja2FnZXMu
c2NtIHwgNyArKysrKystCiAxIGZpbGUgY2hhbmdlZCwgNiBpbnNlcnRpb25zKCspLCAxIGRlbGV0
aW9uKC0pCgpkaWZmIC0tZ2l0IGEvZ251L3BhY2thZ2VzLnNjbSBiL2dudS9wYWNrYWdlcy5zY20K
aW5kZXggZjU1NTJlNWE5Yi4uMzk5MjlhZTAyMiAxMDA2NDQKLS0tIGEvZ251L3BhY2thZ2VzLnNj
bQorKysgYi9nbnUvcGFja2FnZXMuc2NtCkBAIC0zNCw2ICszNCw4IEBACiAgICAgICAgICAgICAg
ICAgIzpzZWxlY3QgKChwYWNrYWdlLW5hbWUtPm5hbWUrdmVyc2lvbgogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgLiBoeXBoZW4tc2VwYXJhdGVkLW5hbWUtPm5hbWUrdmVyc2lvbikKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgbWtkaXItcCkpCisgIDs7IG9ubHkgcmVxdWlyZWQgYXQgZXhw
YW5zaW9uIHRpbWUKKyAgIzphdXRvbG9hZCAgIChndWl4IGJ1aWxkIGNvbXBpbGUpIChub3RpY2Ut
ZGVwZW5kZW5jeSkKICAgIzp1c2UtbW9kdWxlIChndWl4IHByb2ZpbGVzKQogICAjOnVzZS1tb2R1
bGUgKGd1aXggZGVzY3JpYmUpCiAgICM6dXNlLW1vZHVsZSAoZ3VpeCBkZXByZWNhdGlvbikKQEAg
LTEyMSw3ICsxMjMsMTAgQEAgaWYgcG9zc2libGUuICBSZXR1cm4gI2YgaWYgbm90IGZvdW5kLiIK
ICAgICAgICA7OyBpbiBhZHZhbmNlLgogICAgICAgIChsZXQgKChwYXRjaCAodHJ5LXNlYXJjaC1w
YXRjaCAoc3ludGF4LT5kYXR1bSAjJ2ZpbGUtbmFtZSkpKSkKICAgICAgICAgIChpZiBwYXRjaAot
ICAgICAgICAgICAgICNgKCVsb2NhbC1wYXRjaC1maWxlIGZpbGUtbmFtZSAjLChmaWxlLWhhc2gq
IHBhdGNoICM6c2VsZWN0PyB0cnVlKSkKKyAgICAgICAgICAgICAoYmVnaW4KKyAgICAgICAgICAg
ICAgIChub3RpY2UtZGVwZW5kZW5jeSBwYXRjaCkKKyAgICAgICAgICAgICAgICNgKCVsb2NhbC1w
YXRjaC1maWxlIGZpbGUtbmFtZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IywoZmlsZS1oYXNoKiBwYXRjaCAjOnNlbGVjdD8gdHJ1ZSkpKQogICAgICAgICAgICAgIChiZWdp
bgogICAgICAgICAgICAgICAgKHdhcm5pbmcgKHNvdXJjZS1wcm9wZXJ0aWVzLT5sb2NhdGlvbgog
ICAgICAgICAgICAgICAgICAgICAgICAgIChzeW50YXgtc291cmNlICMnZmlsZS1uYW1lKSkKLS0g
CjIuMzMuMAoK


--=-FFYmpQl4eyfmi+ZCpAS1
Content-Disposition: attachment;
	filename*0=v2-0008-gexp-Do-not-intern-if-the-file-is-already-in-the-.pat;
	filename*1=ch
Content-Type: text/x-patch;
	name="v2-0008-gexp-Do-not-intern-if-the-file-is-already-in-the-.patch";
	charset="UTF-8"
Content-Transfer-Encoding: base64

RnJvbSBiNjkwN2Y3NjA0MGZhNTI0MTEwYTUwMzg0OGVkOWI5ZDliMTlkZmFmIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBNYXhpbWUgRGV2b3MgPG1heGltZWRldm9zQHRlbGVuZXQuYmU+
CkRhdGU6IFNhdCwgNCBTZXAgMjAyMSAxODoxMDozMiArMDIwMApTdWJqZWN0OiBbUEFUQ0ggdjIg
OC85XSBnZXhwOiBEbyBub3QgaW50ZXJuIGlmIHRoZSBmaWxlIGlzIGFscmVhZHkgaW4gdGhlCiBz
dG9yZS4KCiogZ3VpeC9nZXhwLnNjbSAobG9jYWwtZmlsZS1jb21waWxlcik6IFdoZW4gdGhlIGZp
bGUgaXMgYWxyZWFkeSBpbiB0aGUKICBzdG9yZSwgcmUtdXNlIHRoZSBmaXhlZCBvdXRwdXQgcGF0
aCBpbnN0ZWFkIG9mIGludGVybmluZyB0aGUgZmlsZQogIGFnYWluLgoqIGd1aXgvZ2V4cC5zY20g
KGFkZC10ZW1wLXJvb3QqLCB2YWxpZC1wYXRoPyopOiBOZXcgcHJvY2VkdXJlcy4KLS0tCiBndWl4
L2dleHAuc2NtIHwgNDEgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKy0tLS0tLS0K
IDEgZmlsZSBjaGFuZ2VkLCAzNCBpbnNlcnRpb25zKCspLCA3IGRlbGV0aW9ucygtKQoKZGlmZiAt
LWdpdCBhL2d1aXgvZ2V4cC5zY20gYi9ndWl4L2dleHAuc2NtCmluZGV4IGM2OWU0YWEyOTkuLjZh
NmQxMzAxMTAgMTAwNjQ0Ci0tLSBhL2d1aXgvZ2V4cC5zY20KKysrIGIvZ3VpeC9nZXhwLnNjbQpA
QCAtNTI4LDE2ICs1MjgsNDMgQEAgYXBwZWFycy4iCiAnc3lzdGVtLWVycm9yJyBleGNlcHRpb24g
aXMgcmFpc2VkIGlmIEZJTEUgY291bGQgbm90IGJlIGZvdW5kLiIKICAgKGZvcmNlICglbG9jYWwt
ZmlsZS1hYnNvbHV0ZS1maWxlLW5hbWUgZmlsZSkpKQogCisoZGVmaW5lIGFkZC10ZW1wLXJvb3Qq
IChzdG9yZS1saWZ0IGFkZC10ZW1wLXJvb3QpKQorKGRlZmluZSB2YWxpZC1wYXRoPyogKHN0b3Jl
LWxpZnQgdmFsaWQtcGF0aD8pKQorCiAoZGVmaW5lLWdleHAtY29tcGlsZXIgKGxvY2FsLWZpbGUt
Y29tcGlsZXIgKGZpbGUgPGxvY2FsLWZpbGU+KSBzeXN0ZW0gdGFyZ2V0KQogICA7OyAiQ29tcGls
ZSIgRklMRSBieSBhZGRpbmcgaXQgdG8gdGhlIHN0b3JlLgogICAobWF0Y2ggZmlsZQotICAgICgo
JCA8bG9jYWwtZmlsZT4gZmlsZSAoPSBmb3JjZSBhYnNvbHV0ZSkgbmFtZSBzaGEyNTYgcmVjdXJz
aXZlPyBzZWxlY3Q/KQotICAgICA7OyBDYW5vbmljYWxpemUgRklMRSBzbyB0aGF0IGlmIGl0J3Mg
YSBzeW1saW5rLCBpdCBpcyByZXNvbHZlZC4gIEZhaWxpbmcKLSAgICAgOzsgdG8gZG8gdGhhdCwg
d2hlbiBSRUNVUlNJVkU/IGlzICN0LCB3ZSBjb3VsZCBlbmQgdXAgY3JlYXRpbmcgYSBkYW5nbGlu
ZwotICAgICA7OyBzeW1saW5rIGluIHRoZSBzdG9yZSwgYW5kIHdoZW4gUkVDVVJTSVZFPyBpcyAj
ZiAnYWRkLXRvLXN0b3JlJyB3b3VsZAotICAgICA7OyBqdXN0IHRocm93IGFuIGVycm9yLCBib3Ro
IG9mIHdoaWNoIGFyZSBpbmNvbnZlbmllbnQuCi0gICAgIChpbnRlcm5lZC1maWxlIGFic29sdXRl
IG5hbWUKLSAgICAgICAgICAgICAgICAgICAgIzpyZWN1cnNpdmU/IHJlY3Vyc2l2ZT8gIzpzZWxl
Y3Q/IHNlbGVjdD8pKSkpCisgICAgOzsgRGVsYXkgY29tcHV0aW5nIHRoZSBhYnNvbHV0ZSBmaWxl
IG5hbWUgdW50aWwgJ2ludGVybicsIGFzIHRoaXMKKyAgICA7OyBtaWdodCBiZSBhIHJlbGF0aXZl
bHkgZXhwZW5zaXZlIGNvbXB1dGF0aW9uIChlLmcuIGlmIHNlYXJjaC1wYXRjaAorICAgIDs7IGlz
IHVzZWQpLCBlc3BlY2lhbGx5IG9uIGEgc3Bpbm5pbmcgZGlzay4KKyAgICAoKCQgPGxvY2FsLWZp
bGU+IGZpbGUgYWJzb2x1dGUtcHJvbWlzZSBuYW1lIHNoYTI1NiByZWN1cnNpdmU/IHNlbGVjdD8p
CisgICAgIChsZXQgKCkKKyAgICAgICAoZGVmaW5lIChpbnRlcm4pCisgICAgICAgICA7OyBDYW5v
bmljYWxpemUgRklMRSBzbyB0aGF0IGlmIGl0J3MgYSBzeW1saW5rLCBpdCBpcyByZXNvbHZlZC4K
KyAgICAgICAgIDs7IEZhaWxpbmcgdG8gZG8gdGhhdCwgd2hlbiBSRUNVUlNJVkU/IGlzICN0LCB3
ZSBjb3VsZCBlbmQgdXAgY3JlYXRpbmcKKyAgICAgICAgIDs7IGEgZGFuZ2xpbmcgc3ltbGluayBp
biB0aGUgc3RvcmUsIGFuZCB3aGVuIFJFQ1VSU0lWRT8gaXMgI2YKKyAgICAgICAgIDs7ICdhZGQt
dG8tc3RvcmUnIHdvdWxkIGp1c3QgdGhyb3cgYW4gZXJyb3IsIGJvdGggb2Ygd2hpY2ggYXJlCisg
ICAgICAgICA7OyBpbmNvbnZlbmllbnQuCisgICAgICAgICAoaW50ZXJuZWQtZmlsZSAoZm9yY2Ug
YWJzb2x1dGUtcHJvbWlzZSkgbmFtZQorICAgICAgICAgICAgICAgICAgICAgICAgIzpyZWN1cnNp
dmU/IHJlY3Vyc2l2ZT8gIzpzZWxlY3Q/IHNlbGVjdD8pKQorICAgICAgIDs7IElmIHRoZSBoYXNo
IGlzIGtub3duIGluIGFkdmFuY2UgYW5kIHRoZSBzdG9yZSBhbHJlYWR5IGhhcyB0aGUKKyAgICAg
ICA7OyBpdGVtLCB0aGVyZSBpcyBubyBuZWVkIHRvIGludGVybiB0aGUgZmlsZS4KKyAgICAgICAo
aWYgc2hhMjU2CisgICAgICAgICAgIChsZXQgKChwYXRoIChmaXhlZC1vdXRwdXQtcGF0aCBuYW1l
IHNoYTI1NiAjOnJlY3Vyc2l2ZT8gcmVjdXJzaXZlPykpKQorICAgICAgICAgICAgIChtYmVnaW4g
JXN0b3JlLW1vbmFkCisgICAgICAgICAgICAgICA7OyBUZWxsIHRoZSBHQyB0aGF0IFBBVEggd2ls
bCBiZSB1c2VkLCBzdWNoIHRoYXQgaXQgd29uJ3QKKyAgICAgICAgICAgICAgIDs7IGJlIGRlbGV0
ZWQuCisgICAgICAgICAgICAgICAoYWRkLXRlbXAtcm9vdCogcGF0aCkKKyAgICAgICAgICAgICAg
IDs7ICdhZGQtdGVtcC1yb290KicgZG9lc24ndCB0aG93IGFuIGVycm9yIGlmIHRoZSBzdG9yZSBp
dGVtCisgICAgICAgICAgICAgICA7OyBkb2VzIG5vdCBleGlzdCwgc28gd2UgbmVlZCB0byBjaGVj
ayBpZiBQQVRIIGFjdHVhbGx5IGV4aXN0cy4KKyAgICAgICAgICAgICAgIChtbGV0ICVzdG9yZS1t
b25hZAorICAgICAgICAgICAgICAgICAoKHZhbGlkPyAodmFsaWQtcGF0aD8qIHBhdGgpKSkKKyAg
ICAgICAgICAgICAgICAgKGlmIHZhbGlkPworICAgICAgICAgICAgICAgICAgICAgKHJldHVybiBw
YXRoKQorICAgICAgICAgICAgICAgICAgICAgOzsgSWYgaXQgaGFzIGJlZW4gcmVtb3ZlZCwgZmFs
bC1iYWNrIGludGVybmluZy4KKyAgICAgICAgICAgICAgICAgICAgIChpbnRlcm4pKSkpKQorICAg
ICAgICAgICA7OyBJZiBQQVRIIGRvZXMgbm90IHlldCBleGlzdCwgZmFsbCBiYWNrIHRvIGludGVy
bmluZy4KKyAgICAgICAgICAgKGludGVybikpKSkpKQogCiAoZGVmaW5lLXJlY29yZC10eXBlIDxw
bGFpbi1maWxlPgogICAoJXBsYWluLWZpbGUgbmFtZSBjb250ZW50IHJlZmVyZW5jZXMpCi0tIAoy
LjMzLjAKCg==


--=-FFYmpQl4eyfmi+ZCpAS1
Content-Disposition: attachment;
	filename*0=v2-0009-base32-Reduce-GC-pressure-in-make-bytevector-base.pat;
	filename*1=ch
Content-Type: text/x-patch;
	name="v2-0009-base32-Reduce-GC-pressure-in-make-bytevector-base.patch";
	charset="UTF-8"
Content-Transfer-Encoding: base64

RnJvbSBjY2JhYTFhNGI0NDdjNjdmOTk3YTYzNDk0YTgyYzhlMmI5MDVkY2NkIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBNYXhpbWUgRGV2b3MgPG1heGltZWRldm9zQHRlbGVuZXQuYmU+
CkRhdGU6IFN1biwgNSBTZXAgMjAyMSAxNjoyODozMyArMDIwMApTdWJqZWN0OiBbUEFUQ0ggdjIg
OS85XSBiYXNlMzI6IFJlZHVjZSBHQyBwcmVzc3VyZSBpbgogbWFrZS1ieXRldmVjdG9yLT5iYXNl
MzItc3RyaW5nLgoKVGhlIGZvbGxvd2luZyBjb2RlIGhhcyBiZWVuIHVzZWQgdG8gY29tcGFyZSBw
ZXJmb3JtYW5jZToKCjs7IGZpcnN0IDIwIGJ5dGVzIG9mIHNoYTI1NiBvZiAjdnU4KCN4ZGUgI3hh
ZCAjeGJlICN4ZWYpCihkZWZpbmUgYnYgI3Z1OCg5NSAxMjAgMTk1IDUwIDExNiAyMjggNjMgMTY5
IDIyMiA4NiA4OSAzOCA5MiAyOSAxNDUgMTI2IDM3IDE5MiA1NSAzNCkpCixwcm9maWxlCihsZXQg
bG9vcCAoKG4gMCkpCiAgKHdoZW4gKDwgbiAjZTFlNikKICAgICAoKEAgKGd1aXggYmFzZTMyKSBi
eXRldmVjdG9yLT5uaXgtYmFzZTMyLXN0cmluZykgYnYpCiAgICAgKGxvb3AgKCsgbiAxKSkpKQoK
QmVmb3JlIHRoaXMgY2hhbmdlLCB0aGUgb3V0cHV0IHdhczoKClsuLi5dClNhbXBsZSBjb3VudDog
MTE0MApUb3RhbCB0aW1lOiAyNy40NjU1NjAwMTggc2Vjb25kcyAoMTAuNjU5MzMxNDMzIHNlY29u
ZHMgaW4gR0MpCgpBZnRlciB0aGlzIGNoYW5nZSwgdGhlIG91dHB1dCB3YXM6CgpbLi4uXQpTYW1w
bGUgY291bnQ6IDk1NwpUb3RhbCB0aW1lOiAyMC40Nzg4NDcxNDMgc2Vjb25kcyAoNi4xMzk3MjEx
ODkgc2Vjb25kcyBpbiBHQykKCiogZ3VpeC9iYXNlMzIuc2NtCiAgKG1ha2UtYnl0ZXZlY3Rvci0+
YmFzZTMyLXN0cmluZyk6IEVsaW1pbmF0ZSAncmV2ZXJzZScsIHVzZSBtdXRhdGlvbiBpbnN0ZWFk
LgotLS0KIGd1aXgvYmFzZTMyLnNjbSB8IDE4ICsrKysrKysrKysrKy0tLS0tLQogMSBmaWxlIGNo
YW5nZWQsIDEyIGluc2VydGlvbnMoKyksIDYgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvZ3Vp
eC9iYXNlMzIuc2NtIGIvZ3VpeC9iYXNlMzIuc2NtCmluZGV4IDQ5ZjE5MWJhMjYuLmU3NmJmMzVl
Y2MgMTAwNjQ0Ci0tLSBhL2d1aXgvYmFzZTMyLnNjbQorKysgYi9ndWl4L2Jhc2UzMi5zY20KQEAg
LTE0MSwxMiArMTQxLDE4IEBAIHRoZSBwcmV2aW91cyBhcHBsaWNhdGlvbiBvciBJTklULiIKIChk
ZWZpbmUgKG1ha2UtYnl0ZXZlY3Rvci0+YmFzZTMyLXN0cmluZyBxdWludGV0LWZvbGQgYmFzZTMy
LWNoYXJzKQogICAobGFtYmRhIChidikKICAgICAiUmV0dXJuIGEgYmFzZTMyIGVuY29kaW5nIG9m
IEJWIHVzaW5nIEJBU0UzMi1DSEFSUyBhcyB0aGUgYWxwaGFiZXQuIgotICAgIChsZXQgKChjaGFy
cyAocXVpbnRldC1mb2xkIChsYW1iZGEgKHEgcikKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIChjb25zICh2ZWN0b3ItcmVmIGJhc2UzMi1jaGFycyBxKQotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgcikpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgJygpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnYpKSkKLSAgICAgIChsaXN0
LT5zdHJpbmcgKHJldmVyc2UgY2hhcnMpKSkpKQorICAgIDs7IE11dGF0aW9uIGNhbiBiZSBhdm9p
ZGVkIHdpdGggJ3JldmVyc2UnLiAgSG93ZXZlciwgdGhhdCB3b3VsZAorICAgIDs7IG1ha2UgdGhp
cyBwcm9jZWR1cmUgYWJvdXQgMzAlIHNsb3dlciBkdWUgdG8gdGhlIGV4dHJhIEdDIHByZXNzdXJl
LgorICAgIChsZXQqICgoc3RhcnQgKGNvbnMgI2YgI2YpKQorICAgICAgICAgICAoZW5kIChxdWlu
dGV0LWZvbGQgKGxhbWJkYSAocSByKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAo
ZGVmaW5lIHBhaXIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY29ucyAodmVj
dG9yLXJlZiBiYXNlMzItY2hhcnMgcSkgI2YpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAoc2V0LWNkciEgciBwYWlyKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBw
YWlyKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnQKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGJ2KSkpCisgICAgICAoc2V0LWNkciEgZW5kICcoKSkKKyAgICAgIChs
aXN0LT5zdHJpbmcgKGNkciBzdGFydCkpKSkpCiAKIChkZWZpbmUgJW5peC1iYXNlMzItY2hhcnMK
ICAgOzsgU2VlIGBsaWJ1dGlsL2hhc2guY2MnLgotLSAKMi4zMy4wCgo=


--=-FFYmpQl4eyfmi+ZCpAS1--

--=-eExp0UHbbratciKFMMXn
Content-Type: application/pgp-signature; name="signature.asc"
Content-Description: This is a digitally signed message part
Content-Transfer-Encoding: 7bit

-----BEGIN PGP SIGNATURE-----

iI0EABYKADUWIQTB8z7iDFKP233XAR9J4+4iGRcl7gUCYTUfBhccbWF4aW1lZGV2
b3NAdGVsZW5ldC5iZQAKCRBJ4+4iGRcl7oPeAP9GUqwvLHvIKa8XYpazBkEbmcu7
QauxwC8cu3p0G1bjkwEAwCfKrddUJnIutjYFyTcMy+QPvcPsbaDsMEzMFODlnQY=
=v6yN
-----END PGP SIGNATURE-----

--=-eExp0UHbbratciKFMMXn--





Information forwarded to guix-patches@HIDDEN:
bug#50384; Package guix-patches. Full text available.

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


Received: (at 50384) by debbugs.gnu.org; 4 Sep 2021 22:04:34 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Sat Sep 04 18:04:34 2021
Received: from localhost ([127.0.0.1]:48822 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1mMdm5-0005Gk-RV
	for submit <at> debbugs.gnu.org; Sat, 04 Sep 2021 18:04:34 -0400
Received: from eggs.gnu.org ([209.51.188.92]:50420)
 by debbugs.gnu.org with esmtp (Exim 4.84_2)
 (envelope-from <ludo@HIDDEN>) id 1mMdm5-0005GZ-22
 for 50384 <at> debbugs.gnu.org; Sat, 04 Sep 2021 18:04:33 -0400
Received: from fencepost.gnu.org ([2001:470:142:3::e]:46516)
 by eggs.gnu.org with esmtp (Exim 4.90_1)
 (envelope-from <ludo@HIDDEN>)
 id 1mMdly-0001yV-SI; Sat, 04 Sep 2021 18:04:26 -0400
Received: from [2a01:e0a:1d:7270:af76:b9b:ca24:c465] (port=48868 helo=ribbon)
 by fencepost.gnu.org with esmtpsa
 (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1)
 (envelope-from <ludo@HIDDEN>)
 id 1mMdly-0002GU-H8; Sat, 04 Sep 2021 18:04:26 -0400
From: =?utf-8?Q?Ludovic_Court=C3=A8s?= <ludo@HIDDEN>
To: Maxime Devos <maximedevos@HIDDEN>
Subject: Re: bug#50384: [PATCH] Optimise search-patch (reducing I/O)
References: <8900fa8c8eef7f72fc97adc2408be26c88de7803.camel@HIDDEN>
Date: Sun, 05 Sep 2021 00:04:25 +0200
In-Reply-To: <8900fa8c8eef7f72fc97adc2408be26c88de7803.camel@HIDDEN>
 (Maxime Devos's message of "Sat, 04 Sep 2021 23:17:10 +0200")
Message-ID: <87tuj0xaja.fsf@HIDDEN>
User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/27.2 (gnu/linux)
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable
X-Spam-Score: -2.3 (--)
X-Debbugs-Envelope-To: 50384
Cc: 50384 <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 (---)

Maxime Devos <maximedevos@HIDDEN> skribis:

> +(define-syntax search-patch
> +  (lambda (s)
> +    "Search the patch FILE-NAME and compute its hash at expansion time
> +if possible.  Return #f if not found."
> +    (syntax-case s ()
> +      ((_ file-name)
> +       (string? (syntax->datum #'file-name))
> +       ;; FILE-NAME is a constant string, so the hash can be computed
> +       ;; in advance.
> +       (let ((patch (try-search-patch (syntax->datum #'file-name))))
> +         (if patch
> +             #`(%local-patch-file file-name #,(file-hash* patch #:select=
? true))
> +             (begin
> +               (warning (source-properties->location
> +                         (syntax-source #'file-name))
> +                        (G_ "~a: patch not found at expansion time")
> +                        (syntax->datum #'ile-name))
> +               #'(%search-patch file-name)))))
> +      ;; FILE-NAME is variable, so the hash cannot be pre-computed.
> +      ((_ file-name) #'(%search-patch file-name))
> +      ;; search-patch is being used used in a construct like
> +      ;; (map search-patch ...).
> +      (id (identifier? #'id) #'%search-patch))))

It=E2=80=99s clever=E2=80=A6 but also a bit evil, in that it changes the se=
mantics of
package files in a surprising way.  Modifying foo.patch without
recompiling foo.scm would lead you to still use the old foo.patch, which
can be rather off-putting and error-prone IMO.

To address this, =E2=80=98local-file=E2=80=99 could store the inode/mtime +=
 computed
store file name (rather than the SHA256).  =E2=80=98local-file-compiler=E2=
=80=99 would
check whether the actual file has matching inode/mtime before returning
the computed store file name.  Problem is that inode/mtime are
guaranteed to differ once you=E2=80=99ve run =E2=80=9Cmake install=E2=80=9D=
.  :-/


Intuitively, I=E2=80=99d have imagined a cache populated at run time; it wo=
uld
map, say, file name/inode/mtime to a store file name.  =E2=80=98add-to-stor=
e=E2=80=99
(or some wrapper above it) would check the cache and return the store
file name directly, unless =E2=80=98valid-path?=E2=80=99 says it no longer =
exists.
Downside is that this would be a per-user cache and you=E2=80=99d still pay=
 the
cost until it=E2=80=99s warm.  Advantage is that you could easily tell whet=
her
it=E2=80=99s stale.

Thoughts?

Ludo=E2=80=99.




Information forwarded to guix-patches@HIDDEN:
bug#50384; Package guix-patches. Full text available.

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


Received: (at 50384) by debbugs.gnu.org; 4 Sep 2021 21:47:50 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Sat Sep 04 17:47:50 2021
Received: from localhost ([127.0.0.1]:48817 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1mMdVu-0004s0-9W
	for submit <at> debbugs.gnu.org; Sat, 04 Sep 2021 17:47:50 -0400
Received: from eggs.gnu.org ([209.51.188.92]:48652)
 by debbugs.gnu.org with esmtp (Exim 4.84_2)
 (envelope-from <ludo@HIDDEN>) id 1mMdVs-0004rn-05
 for 50384 <at> debbugs.gnu.org; Sat, 04 Sep 2021 17:47:48 -0400
Received: from fencepost.gnu.org ([2001:470:142:3::e]:46162)
 by eggs.gnu.org with esmtp (Exim 4.90_1)
 (envelope-from <ludo@HIDDEN>)
 id 1mMdVl-00083Z-NY; Sat, 04 Sep 2021 17:47:41 -0400
Received: from [2a01:e0a:1d:7270:af76:b9b:ca24:c465] (port=48866 helo=ribbon)
 by fencepost.gnu.org with esmtpsa
 (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1)
 (envelope-from <ludo@HIDDEN>)
 id 1mMdVl-0001xp-Eo; Sat, 04 Sep 2021 17:47:41 -0400
From: =?utf-8?Q?Ludovic_Court=C3=A8s?= <ludo@HIDDEN>
To: Maxime Devos <maximedevos@HIDDEN>
Subject: Re: bug#50384: [PATCH] Optimise search-patch (reducing I/O)
References: <8900fa8c8eef7f72fc97adc2408be26c88de7803.camel@HIDDEN>
Date: Sat, 04 Sep 2021 23:47:39 +0200
In-Reply-To: <8900fa8c8eef7f72fc97adc2408be26c88de7803.camel@HIDDEN>
 (Maxime Devos's message of "Sat, 04 Sep 2021 23:17:10 +0200")
Message-ID: <877dfwypvo.fsf@HIDDEN>
User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/27.2 (gnu/linux)
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable
X-Spam-Score: -2.3 (--)
X-Debbugs-Envelope-To: 50384
Cc: 50384 <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 (---)

Hi!

Some initial comments=E2=80=A6

Maxime Devos <maximedevos@HIDDEN> skribis:

> +++ b/guix/gexp.scm
> @@ -531,13 +531,37 @@ appears."
>  (define-gexp-compiler (local-file-compiler (file <local-file>) system ta=
rget)
>    ;; "Compile" FILE by adding it to the store.
>    (match file
> -    (($ <local-file> file (=3D force absolute) name sha256 recursive? se=
lect?)
> -     ;; Canonicalize FILE so that if it's a symlink, it is resolved.  Fa=
iling
> -     ;; to do that, when RECURSIVE? is #t, we could end up creating a da=
ngling
> -     ;; symlink in the store, and when RECURSIVE? is #f 'add-to-store' w=
ould
> -     ;; just throw an error, both of which are inconvenient.
> -     (interned-file absolute name
> -                    #:recursive? recursive? #:select? select?))))
> +    ;; Delay computing the absolute file name until 'intern', as this
> +    ;; might be a relatively expensive computation (e.g. if search-patch
> +    ;; is used), especially on a spinning disk.
> +    (($ <local-file> file absolute-promise name sha256 recursive? select=
?)
> +     (let ()
> +       (define (intern)
> +         ;; Canonicalize FILE so that if it's a symlink, it is resolved.
> +         ;; Failing to do that, when RECURSIVE? is #t, we could end up c=
reating
> +         ;; a dangling symlink in the store, and when RECURSIVE? is #f
> +         ;; 'add-to-store' would just throw an error, both of which are
> +         ;; inconvenient.
> +         (interned-file (force absolute-promise) name
> +                        #:recursive? recursive? #:select? select?))
> +       (if sha256
> +           (let ((path (fixed-output-path name sha256 #:recursive? recur=
sive?)))
> +             ;; If the hash is known in advance and the store already ha=
s the
> +             ;; item, there is no need to intern the file.
> +             (if (file-exists? path)
> +                 (mbegin %store-monad
> +                   ;; Tell the GC that PATH will be used, such that it w=
on't
> +                   ;; be deleted.
> +                   ((store-lift add-temp-root) path)
> +                   ;; The GC could have deleted the item before add-temp=
-root
> +                   ;; completed, so check again if PATH exists.
> +                   (if (file-exists? path)
> +                       (return path)
> +                       ;; If it has been removed, fall-back interning.
> +                       (intern)))
> +                 ;; If PATH does not yet exist, fall back to interning.
> +                 (intern)))
> +           (intern))))))

=E2=80=98file-exists?=E2=80=99 won=E2=80=99t work when talking to a remote =
store (e.g.,
GUIX_DAEMON_SOCKET=3Dssh://=E2=80=A6).

=E2=80=98add-temp-root=E2=80=99 doesn=E2=80=99t throw if the given store it=
em does not exist.
So it could be written like this:

  (if sha256
      (mbegin %store-monad
        (add-temp-root* item)
        (if (valid-path?* item)
            (return item)
            (intern)))
      (intern))

But then, we=E2=80=99d add one RPC for every =E2=80=98add-to-store=E2=80=99=
 RPC corresponding to
a patch (you can set =E2=80=9CGUIX_PROFILING=3Drpc=E2=80=9D to see the numb=
ers), which is
not great.

Ludo=E2=80=99.




Information forwarded to guix-patches@HIDDEN:
bug#50384; Package guix-patches. Full text available.

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


Received: (at submit) by debbugs.gnu.org; 4 Sep 2021 21:17:41 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Sat Sep 04 17:17:41 2021
Received: from localhost ([127.0.0.1]:48799 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1mMd2d-0004A7-33
	for submit <at> debbugs.gnu.org; Sat, 04 Sep 2021 17:17:41 -0400
Received: from lists.gnu.org ([209.51.188.17]:58188)
 by debbugs.gnu.org with esmtp (Exim 4.84_2)
 (envelope-from <maximedevos@HIDDEN>) id 1mMd2a-00049z-E6
 for submit <at> debbugs.gnu.org; Sat, 04 Sep 2021 17:17:33 -0400
Received: from eggs.gnu.org ([2001:470:142:3::10]:33482)
 by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.90_1) (envelope-from <maximedevos@HIDDEN>)
 id 1mMd2Z-00083q-Pf
 for guix-patches@HIDDEN; Sat, 04 Sep 2021 17:17:31 -0400
Received: from michel.telenet-ops.be ([2a02:1800:110:4::f00:18]:54422)
 by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128)
 (Exim 4.90_1) (envelope-from <maximedevos@HIDDEN>)
 id 1mMd2V-00054j-Ch
 for guix-patches@HIDDEN; Sat, 04 Sep 2021 17:17:31 -0400
Received: from butterfly.local ([188.189.242.219])
 by michel.telenet-ops.be with bizsmtp
 id pxHK250094kjswU06xHLsQ; Sat, 04 Sep 2021 23:17:21 +0200
Message-ID: <8900fa8c8eef7f72fc97adc2408be26c88de7803.camel@HIDDEN>
Subject: [PATCH] Optimise search-patch (reducing I/O)
From: Maxime Devos <maximedevos@HIDDEN>
To: guix-patches@HIDDEN
Date: Sat, 04 Sep 2021 23:17:10 +0200
Content-Type: multipart/signed; micalg="pgp-sha512";
 protocol="application/pgp-signature"; boundary="=-ZXdwdSIZm75bAbTlaqKD"
User-Agent: Evolution 3.34.2 
MIME-Version: 1.0
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=telenet.be; s=r21;
 t=1630790241; bh=4FgmsEgZZw7uozIaHnfeIECoft4mn5joQfLTPGH+bqI=;
 h=Subject:From:To:Date;
 b=sS2gVWDMRuSWHb3TjAuaSmIbDSyMe9hX05oXgF0WwGuk7QdIoY1MXJ9MxtH5Lqa2R
 tJihf7VcDR3kSk6YG2Ejsst8MN0jHkJQWEVb66ClYBtmAdqHE//OPKbmXSgpTYs3Vq
 hw0TnCA/cGIOnXK+5btKXGmTVNeNlSq/XTBuPR7DWGTnFzNqaJ3Rk243eu1Jti7YGu
 0o3aMhVdC9Zcz8DCdKQEDSjCliDs7mCTLqWsfqe0TqUByM/Va87jPkoHye95E4O7Ed
 nYl5VMMw+bg4ENdy4mNaUsx2iY/WbPc6fK4wR6hUnfIBhwiz+PslUR4ttvGeDPQpK/
 FflKy32xl3xRw==
Received-SPF: pass client-ip=2a02:1800:110:4::f00:18;
 envelope-from=maximedevos@HIDDEN; helo=michel.telenet-ops.be
X-Spam_score_int: -27
X-Spam_score: -2.8
X-Spam_bar: --
X-Spam_report: (-2.8 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1,
 DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_FROM=0.001,
 RCVD_IN_DNSWL_LOW=-0.7, SPF_HELO_NONE=0.001,
 SPF_PASS=-0.001 autolearn=ham autolearn_force=no
X-Spam_action: no action
X-Spam-Score: -0.0 (/)
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.0 (/)


--=-ZXdwdSIZm75bAbTlaqKD
Content-Type: multipart/mixed; boundary="=-Ed3xbcWsGUAuseKcAI15"


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

Hi guix!

The attached patch series optimises the G-exp compiler for
local-file, by avoiding interning the file if it's already
in the store, but only if the hash is known in advance.
To take advantage of this, 'search-patch' has been modified
to compute the hash at expansion time.

The cost of this optimisation is a little additional
complexity, and computing derivations theoretically becomes
a little more expensive when the patch isn't already in
the store (1 call to 'stat' per non-yet-interned patch).

If you want to test this patch series for performance,
do _not_ run ./pre-inst-env guix, instead use
"guix pull --url=3D$PWD --branch=3D...", because the guix
from the checkout performs more 'lstat' calls than
an =E2=80=98user=E2=80=99 guix from "guix pull".

I'll show the patch series decreases the number of syscalls
below, using the 'strace' command.  Use 'strace -c' to gather
some statistics:

# Run it twice for a hot cache.  Ignore the output of the first run.
$ strace -c ./the-optimised-guix/bin/guix build -d pigx --no-grafts
$ strace -c ./the-optimised-guix/bin/guix build -d pigx --no-grafts
#
$ strace -c guix build -d pigx --no-grafts
$ strace -c guix build -d pigx --no-grafts

I've selected some syscalls from the output that seemed relevant
and formatted the call count in a table

              optimised         unoptimised     result of optimisation:
         stat  3865             3712            + 4.1%
         lstat 119              321             -62.9%
         fstat 59               59              unchanged
         read  17303            17688           - 2.2%
        write  6741             6767            - 1.9%
       openat  885              1076            -17.8%
       readlink 14              16              -12.5%
       -------
       total    28886           32539           -11.2%

Almost all syscalls are now called less (-11.2% in total),
which is good.  The exception is 'stat'.

Because 'search-path' is now being called less often
(only when the patch isn't in the store), the number
of 'stat' calls decreases.  However, 'local-file-compiler'
now calls 'stat' more (one or two times per patch).  I think
it's worth it though, because:

   (1) the second 'stat' is on the same file as the first 'stat',
       so presumably the kernel has cached the result, so no need
       to wait for I/O to complete the second time (there's a context
       switch though).  So ignoring the context switch cost,
       there are only =E2=80=98effectively=E2=80=99 +2.1% extra calls to 's=
tat'.

   (2) the total decrease of -11.2% syscalls

Now, what about the actual "time to derivation"?
First, let's time "guix build -d pigx --no-grafts" to get some raw numbers
on guix before the optimisation:

     time guix build -d pigx --no-grafts
     # repeated four times, first output is discarded
     # to eliminate hot/cold cache differences
     /gnu/store/03vmq94ckxfx6c4rc9zh745yy63n5i5m-pigx-0.0.3.drv
     real       0m13,470s
     user       0m13,526s
     sys        0m0,573s
     /gnu/store/03vmq94ckxfx6c4rc9zh745yy63n5i5m-pigx-0.0.3.drv
     real       0m13,582s
     user       0m13,639s
     sys        0m0,568s
     /gnu/store/03vmq94ckxfx6c4rc9zh745yy63n5i5m-pigx-0.0.3.drv
     real       0m13,834s
     user       0m13,901s
     sys        0m0,556s

Average numbers:
     real      0m13,629s
     user      0m13,689s
     sys       0m0,566s

After the optimisation:
      time ./the-optimised-guix/bin/guix build -d pigx --no-grafts
      /gnu/store/fq6x8d2vcm6sbjkimg7g8kcgb4c5xv1b-pigx-0.0.3.drv
      real      0m14,150s
      user      0m13,979s
      sys       0m0,685s
      /gnu/store/fq6x8d2vcm6sbjkimg7g8kcgb4c5xv1b-pigx-0.0.3.drv
      real      0m13,781s
      user      0m13,697s
      sys       0m0,580s
      /gnu/store/fq6x8d2vcm6sbjkimg7g8kcgb4c5xv1b-pigx-0.0.3.drv
      real      0m14,247s
      user      0m14,160s
      sys       0m0,548s

The numbers are higher somehow after the optimisations?
Even the 'sys' time is higher, even though there are less syscalls?
I re-ran the time commands, and got a decrease in 'real' time this time.

  /gnu/store/fq6x8d2vcm6sbjkimg7g8kcgb4c5xv1b-pigx-0.0.3.drv
  real  0m13,304s
  user  0m13,146s
  sys   0m0,609s
  /gnu/store/fq6x8d2vcm6sbjkimg7g8kcgb4c5xv1b-pigx-0.0.3.drv
  real  0m12,132s
  user  0m11,940s
  sys   0m0,589s
  /gnu/store/fq6x8d2vcm6sbjkimg7g8kcgb4c5xv1b-pigx-0.0.3.drv
  real  0m13,716s
  user  0m13,723s
  sys   0m0,529s

The output of "time ..." seems inconclusive
(can possibly be attributed to things like CPU frequency changing?),
but the decrease in syscall counts seems quite nice to me.

Feel free to run your own tests!

Greetings,
Maxime.

--=-Ed3xbcWsGUAuseKcAI15
Content-Disposition: inline; filename="0001-build-self-Implement-basic-hash-algorithm.patch"
Content-Type: text/x-patch; name="0001-build-self-Implement-basic-hash-algorithm.patch";
	charset="UTF-8"
Content-Transfer-Encoding: base64

RnJvbSBhOGUyNGE1MjU4YWEwNTY4OWJjYWZhNzBhZjA3MWRhNTI5NmY2M2E0IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBNYXhpbWUgRGV2b3MgPG1heGltZWRldm9zQHRlbGVuZXQuYmU+
CkRhdGU6IFNhdCwgNCBTZXAgMjAyMSAyMDowOTowMyArMDIwMApTdWJqZWN0OiBbUEFUQ0ggMS82
XSBidWlsZC1zZWxmOiBJbXBsZW1lbnQgYmFzaWMgJ2hhc2gtYWxnb3JpdGhtJy4KTUlNRS1WZXJz
aW9uOiAxLjAKQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PVVURi04CkNvbnRlbnQt
VHJhbnNmZXItRW5jb2Rpbmc6IDhiaXQKClRoZSBtb2R1bGUgKGd1aXggaGFzaCkgdXNlZCBmcm9t
ICdzZWFyY2gtcGF0Y2gnIGluIGEgZnV0dXJlCnBhdGNoIG5lZWRzIGl0IHRvIGJlIHByb3Blcmx5
IGRlZmluZWQgd2hlbiAoZ3VpeCBoYXNoKSBpcyBiZWluZwpjb21waWxlZC4gICdzZWFyY2gtcGF0
Y2gnIGlzIHVzZWQgd2hlbiB0aGUgZGVyaXZhdGlvbiBvZiBHdWl4IGlzCmJlaW5nIGNvbXB1dGVk
LCBzbyBpdCBpcyBpbXBvcnRhbnQgdG8gYXZvaWQgdGhlIOKAmHdyb25nIHR5cGUgdG8KYXBwbHk6
ICM8c3ludGF4LXRyYW5zZm9ybWVyIGhhc2gtYWxnb3JpdGhtPuKAmSBlcnJvci4KCiogYnVpbGQt
YXV4L2J1aWxkLXNlbGYuc2NtCiAgKGJ1aWxkLXByb2dyYW0pW2Zha2UtZ2NyeXB0LWhhc2hdOiBE
ZWZpbmUgaGFzaC1hbGdvcml0aG0gZm9yIHNoYTEKICBhbmQgc2hhMjU2LgotLS0KIGJ1aWxkLWF1
eC9idWlsZC1zZWxmLnNjbSB8IDEzICsrKysrKysrKysrLS0KIDEgZmlsZSBjaGFuZ2VkLCAxMSBp
bnNlcnRpb25zKCspLCAyIGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL2J1aWxkLWF1eC9idWls
ZC1zZWxmLnNjbSBiL2J1aWxkLWF1eC9idWlsZC1zZWxmLnNjbQppbmRleCAzYTJkMTNjYzA5Li4y
YzEzZDlkNTMwIDEwMDY0NAotLS0gYS9idWlsZC1hdXgvYnVpbGQtc2VsZi5zY20KKysrIGIvYnVp
bGQtYXV4L2J1aWxkLXNlbGYuc2NtCkBAIC0yNTksOCArMjU5LDE3IEBAIGludGVyZmFjZSAoRkZJ
KSBvZiBHdWlsZS4iKQogICAoZGVmaW5lIGZha2UtZ2NyeXB0LWhhc2gKICAgICA7OyBGYWtlIChn
Y3J5cHQgaGFzaCkgbW9kdWxlOyBzZWUgYmVsb3cuCiAgICAgKHNjaGVtZS1maWxlICJoYXNoLnNj
bSIKLSAgICAgICAgICAgICAgICAgI34oZGVmaW5lLW1vZHVsZSAoZ2NyeXB0IGhhc2gpCi0gICAg
ICAgICAgICAgICAgICAgICAjOmV4cG9ydCAoc2hhMSBzaGEyNTYpKSkpCisgICAgICAgICAgICAg
ICAgICN+KGJlZ2luCisgICAgICAgICAgICAgICAgICAgICAoZGVmaW5lLW1vZHVsZSAoZ2NyeXB0
IGhhc2gpCisgICAgICAgICAgICAgICAgICAgICAgICM6ZXhwb3J0IChzaGExIHNoYTI1NiBoYXNo
LWFsZ29yaXRobSkpCisgICAgICAgICAgICAgICAgICAgICA7OyBBdm9pZCDigJhXcm9uZyB0eXBl
IHRvIGFwcGx5OgorICAgICAgICAgICAgICAgICAgICAgOzsgIzxzeW50YXgtdHJhbnNmb3JtZXIg
aGFzaC1hbGdvcml0aG0+4oCZIGVycm9ycy4KKyAgICAgICAgICAgICAgICAgICAgIChkZWZpbmUg
c2hhMSkKKyAgICAgICAgICAgICAgICAgICAgIChkZWZpbmUgc2hhMjU2KQorICAgICAgICAgICAg
ICAgICAgICAgKGRlZmluZS1zeW50YXggaGFzaC1hbGdvcml0aG0KKyAgICAgICAgICAgICAgICAg
ICAgICAgKHN5bnRheC1ydWxlcyAoc2hhMSBzaGEyNTYpCisgICAgICAgICAgICAgICAgICAgICAg
ICAgKChfIHNoYTEpIDIpCisgICAgICAgICAgICAgICAgICAgICAgICAgKChfIHNoYTI1NikgOCkp
KSkpKQogCiAgIChkZWZpbmUgZmFrZS1naXQKICAgICAoc2NoZW1lLWZpbGUgImdpdC5zY20iICN+
KGRlZmluZS1tb2R1bGUgKGdpdCkpKSkKCmJhc2UtY29tbWl0OiBiNGQxMzJmOThlMDNmYWU1NTlk
YjgzMmU4ODg5N2YxZTE2NmM0ZDQ3CnByZXJlcXVpc2l0ZS1wYXRjaC1pZDogOTFhMjZiYTE5Mzcy
MTEyYTExYTBlZWEyYjA2NmQyZjYzNjQxZGViMQpwcmVyZXF1aXNpdGUtcGF0Y2gtaWQ6IGE1MzVj
MWFlMmExZmJmNzVkN2FjOWEzMTE4ZWQyM2JkNGZhMDNlY2MKcHJlcmVxdWlzaXRlLXBhdGNoLWlk
OiAyOWViYTBjZWRlMWMxZTcxNTNhN2M3YjlhNThiMzNiNjdmNjkzYTEzCnByZXJlcXVpc2l0ZS1w
YXRjaC1pZDogOGRkMjIzNGZhMGY4NjcwODFjNmNmNjE0YzdhMjJiMDAwMjI3MDJiNApwcmVyZXF1
aXNpdGUtcGF0Y2gtaWQ6IDJmZTBlNWM2N2EzN2VmM2YwZTIyODEzYzk4MDhlYWVlYzgzYmI1NTIK
cHJlcmVxdWlzaXRlLXBhdGNoLWlkOiA5MTUxNDU2OGYxZWY0ODcwYWQ3ZWQ3YjNmNjg1ZjA0NzAz
ZjljMDkwCi0tIAoyLjMzLjAKCg==


--=-Ed3xbcWsGUAuseKcAI15
Content-Disposition: inline; filename="0002-guix-hash-Extract-file-hashing-procedures.patch"
Content-Type: text/x-patch; name="0002-guix-hash-Extract-file-hashing-procedures.patch";
	charset="UTF-8"
Content-Transfer-Encoding: base64

RnJvbSA5MTlhMDM3NTc4MWZmMGZhYjllNzRkYmFmYzliMWY4OTg5ODA4YTNiIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBTYXJhaCBNb3JnZW5zZW4gPGlza2FyaWFuQG1nc24uZGV2PgpE
YXRlOiBTdW4sIDE1IEF1ZyAyMDIxIDE2OjI1OjI0IC0wNzAwClN1YmplY3Q6IFtQQVRDSCAyLzZd
IGd1aXggaGFzaDogRXh0cmFjdCBmaWxlIGhhc2hpbmcgcHJvY2VkdXJlcy4KCiogZ3VpeC9zY3Jp
cHRzL2hhc2guc2NtIChndWl4LWhhc2gpW3Zjcy1maWxlPywgZmlsZS1oYXNoXTogRXh0cmFjdCBs
b2dpYwp0by4uLgoqIGd1aXgvaGFzaC5zY206IC4uLmhlcmUuIE5ldyBmaWxlLgotLS0KIGd1aXgv
aGFzaC5zY20gICAgICAgICB8IDUxICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr
KysrKysrKysKIGd1aXgvc2NyaXB0cy9oYXNoLnNjbSB8IDI5ICsrKysrKy0tLS0tLS0tLS0tLS0t
LS0tLQogMiBmaWxlcyBjaGFuZ2VkLCA1OCBpbnNlcnRpb25zKCspLCAyMiBkZWxldGlvbnMoLSkK
IGNyZWF0ZSBtb2RlIDEwMDY0NCBndWl4L2hhc2guc2NtCgpkaWZmIC0tZ2l0IGEvZ3VpeC9oYXNo
LnNjbSBiL2d1aXgvaGFzaC5zY20KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MC4uOGMyYWI4MTg3ZgotLS0gL2Rldi9udWxsCisrKyBiL2d1aXgvaGFzaC5zY20KQEAgLTAsMCAr
MSw1MSBAQAorOzs7IEdOVSBHdWl4IC0tLSBGdW5jdGlvbmFsIHBhY2thZ2UgbWFuYWdlbWVudCBm
b3IgR05VCis7OzsgQ29weXJpZ2h0IMKpIDIwMjEgU2FyYWggTW9yZ2Vuc2VuIDxpc2thcmlhbkBt
Z3NuLmRldj4KKzs7OworOzs7IFRoaXMgZmlsZSBpcyBwYXJ0IG9mIEdOVSBHdWl4LgorOzs7Cis7
OzsgR05VIEd1aXggaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k
L29yIG1vZGlmeSBpdAorOzs7IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Cis7OzsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0Cis7OzsgeW91ciBv
cHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorOzs7Cis7OzsgR05VIEd1aXggaXMgZGlzdHJpYnV0
ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0Cis7OzsgV0lUSE9VVCBB
TlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorOzs7IE1F
UkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0
aGUKKzs7OyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorOzs7
Cis7OzsgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwg
UHVibGljIExpY2Vuc2UKKzs7OyBhbG9uZyB3aXRoIEdOVSBHdWl4LiAgSWYgbm90LCBzZWUgPGh0
dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisoZGVmaW5lLW1vZHVsZSAoZ3VpeCBoYXNo
KQorICAjOnVzZS1tb2R1bGUgKGdjcnlwdCBoYXNoKQorICAjOnVzZS1tb2R1bGUgKGd1aXggc2Vy
aWFsaXphdGlvbikKKyAgIzp1c2UtbW9kdWxlIChzcmZpIHNyZmktMSkKKyAgIzp1c2UtbW9kdWxl
IChzcmZpIHNyZmktMTEpCisgICM6ZXhwb3J0ICh2Y3MtZmlsZT8KKyAgICAgICAgICAgIGZpbGUt
aGFzaCopKQorCisoZGVmaW5lICh2Y3MtZmlsZT8gZmlsZSBzdGF0KQorICAiUmV0dXJucyB0cnVl
IGlmIEZJTEUgaXMgYSB2ZXJzaW9uIGNvbnRyb2wgc3lzdGVtIGZpbGUuIgorICAoY2FzZSAoc3Rh
dDp0eXBlIHN0YXQpCisgICAgKChkaXJlY3RvcnkpCisgICAgIChtZW1iZXIgKGJhc2VuYW1lIGZp
bGUpICcoIi5ienIiICIuZ2l0IiAiLmhnIiAiLnN2biIgIkNWUyIpKSkKKyAgICAoKHJlZ3VsYXIp
CisgICAgIDs7IEdpdCBzdWItbW9kdWxlcyBoYXZlIGEgJy5naXQnIGZpbGUgdGhhdCBpcyBhIHJl
Z3VsYXIgdGV4dCBmaWxlLgorICAgICAoc3RyaW5nPT8gKGJhc2VuYW1lIGZpbGUpICIuZ2l0Iikp
CisgICAgKGVsc2UKKyAgICAgI2YpKSkKKworKGRlZmluZSogKGZpbGUtaGFzaCogZmlsZSAjOmtl
eQorICAgICAgICAgICAgICAgICAgICAgKGFsZ29yaXRobSAoaGFzaC1hbGdvcml0aG0gc2hhMjU2
KSkKKyAgICAgICAgICAgICAgICAgICAgIChyZWN1cnNpdmU/ICN0KQorICAgICAgICAgICAgICAg
ICAgICAgKHNlbGVjdD8gKG5lZ2F0ZSB2Y3MtZmlsZT8pKSkKKyAgIkNvbXB1dGUgdGhlIGhhc2gg
b2YgRklMRSB3aXRoIEFMR09SSVRITS4gIElmIFJFQ1VSU0lWRT8gaXMgdHJ1ZSwgcmVjdXJzZQor
aW50byBzdWJkaXJlY3RvcmllcyBvZiBGSUxFLCBjb21wdXRpbmcgdGhlIGNvbWJpbmVkIGhhc2gg
b2YgYWxsIGZpbGVzIGZvcgord2hpY2ggKFNFTEVDVD8gIEZJTEUgU1RBVCkgcmV0dXJucyB0cnVl
LiIKKyAgKGlmIHJlY3Vyc2l2ZT8KKyAgICAgIChsZXQtdmFsdWVzICgoKHBvcnQgZ2V0LWhhc2gp
CisgICAgICAgICAgICAgICAgICAgIChvcGVuLWhhc2gtcG9ydCBhbGdvcml0aG0pKSkKKyAgICAg
ICAgKHdyaXRlLWZpbGUgZmlsZSBwb3J0ICM6c2VsZWN0PyBzZWxlY3Q/KQorICAgICAgICAoZm9y
Y2Utb3V0cHV0IHBvcnQpCisgICAgICAgIChnZXQtaGFzaCkpCisgICAgICAoZmlsZS1oYXNoIGFs
Z29yaXRobSBmaWxlKSkpCmRpZmYgLS1naXQgYS9ndWl4L3NjcmlwdHMvaGFzaC5zY20gYi9ndWl4
L3NjcmlwdHMvaGFzaC5zY20KaW5kZXggYjg2MjIzNzNjYy4uMzUzY2EzMGMyYyAxMDA2NDQKLS0t
IGEvZ3VpeC9zY3JpcHRzL2hhc2guc2NtCisrKyBiL2d1aXgvc2NyaXB0cy9oYXNoLnNjbQpAQCAt
Myw2ICszLDcgQEAKIDs7OyBDb3B5cmlnaHQgwqkgMjAxMyBOaWtpdGEgS2FyZXRuaWtvdiA8bmlr
aXRhQGthcmV0bmlrb3Yub3JnPgogOzs7IENvcHlyaWdodCDCqSAyMDE2IEphbiBOaWV1d2VuaHVp
emVuIDxqYW5uZWtlQGdudS5vcmc+CiA7OzsgQ29weXJpZ2h0IMKpIDIwMTggVGltIEdlc3RodWl6
ZW4gPHRpbS5nZXN0aHVpemVuQHlhaG9vLmRlPgorOzs7IENvcHlyaWdodCDCqSAyMDIxIFNhcmFo
IE1vcmdlbnNlbiA8aXNrYXJpYW5AbWdzbi5kZXY+CiA7OzsKIDs7OyBUaGlzIGZpbGUgaXMgcGFy
dCBvZiBHTlUgR3VpeC4KIDs7OwpAQCAtMjMsNiArMjQsNyBAQAogICAjOnVzZS1tb2R1bGUgKGdj
cnlwdCBoYXNoKQogICAjOnVzZS1tb2R1bGUgKGd1aXggc2VyaWFsaXphdGlvbikKICAgIzp1c2Ut
bW9kdWxlIChndWl4IHVpKQorICAjOnVzZS1tb2R1bGUgKGd1aXggaGFzaCkKICAgIzp1c2UtbW9k
dWxlIChndWl4IHNjcmlwdHMpCiAgICM6dXNlLW1vZHVsZSAoZ3VpeCBiYXNlMTYpCiAgICM6dXNl
LW1vZHVsZSAoZ3VpeCBiYXNlMzIpCkBAIC0xMjUsMTYgKzEyNyw2IEBAIGFuZCAnYmFzZTE2JyAo
J2hleCcgYW5kICdoZXhhZGVjaW1hbCcgY2FuIGJlIHVzZWQgYXMgd2VsbCkuXG4iKSkKICAgICAo
cGFyc2UtY29tbWFuZC1saW5lIGFyZ3MgJW9wdGlvbnMgKGxpc3QgJWRlZmF1bHQtb3B0aW9ucykK
ICAgICAgICAgICAgICAgICAgICAgICAgICM6YnVpbGQtb3B0aW9ucz8gI2YpKQogCi0gIChkZWZp
bmUgKHZjcy1maWxlPyBmaWxlIHN0YXQpCi0gICAgKGNhc2UgKHN0YXQ6dHlwZSBzdGF0KQotICAg
ICAgKChkaXJlY3RvcnkpCi0gICAgICAgKG1lbWJlciAoYmFzZW5hbWUgZmlsZSkgJygiLmJ6ciIg
Ii5naXQiICIuaGciICIuc3ZuIiAiQ1ZTIikpKQotICAgICAgKChyZWd1bGFyKQotICAgICAgIDs7
IEdpdCBzdWItbW9kdWxlcyBoYXZlIGEgJy5naXQnIGZpbGUgdGhhdCBpcyBhIHJlZ3VsYXIgdGV4
dCBmaWxlLgotICAgICAgIChzdHJpbmc9PyAoYmFzZW5hbWUgZmlsZSkgIi5naXQiKSkKLSAgICAg
IChlbHNlCi0gICAgICAgI2YpKSkKLQogICAobGV0KiAoKG9wdHMgKHBhcnNlLW9wdGlvbnMpKQog
ICAgICAgICAgKGFyZ3MgKGZpbHRlci1tYXAgKG1hdGNoLWxhbWJkYQogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICgoJ2FyZ3VtZW50IC4gdmFsdWUpCkBAIC0xNTAsMTggKzE0MiwxMSBAQCBh
bmQgJ2Jhc2UxNicgKCdoZXgnIGFuZCAnaGV4YWRlY2ltYWwnIGNhbiBiZSB1c2VkIGFzIHdlbGwp
LlxuIikpCiAgICAgICA7OyBDb21wdXRlIHRoZSBoYXNoIG9mIEZJTEUuCiAgICAgICA7OyBDYXRj
aCBhbmQgZ3JhY2VmdWxseSByZXBvcnQgcG9zc2libGUgJyZuYXItZXJyb3InIGNvbmRpdGlvbnMu
CiAgICAgICAod2l0aC1lcnJvci1oYW5kbGluZwotICAgICAgICAoaWYgKGFzc29jLXJlZiBvcHRz
ICdyZWN1cnNpdmU/KQotICAgICAgICAgICAgKGxldC12YWx1ZXMgKCgocG9ydCBnZXQtaGFzaCkK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgKG9wZW4taGFzaC1wb3J0IChhc3NvYy1yZWYgb3B0
cyAnaGFzaC1hbGdvcml0aG0pKSkpCi0gICAgICAgICAgICAgICh3cml0ZS1maWxlIGZpbGUgcG9y
dCAjOnNlbGVjdD8gc2VsZWN0PykKLSAgICAgICAgICAgICAgKGZvcmNlLW91dHB1dCBwb3J0KQot
ICAgICAgICAgICAgICAoZ2V0LWhhc2gpKQotICAgICAgICAgICAgKG1hdGNoIGZpbGUKLSAgICAg
ICAgICAgICAgKCItIiAocG9ydC1oYXNoIChhc3NvYy1yZWYgb3B0cyAnaGFzaC1hbGdvcml0aG0p
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY3VycmVudC1pbnB1dC1wb3J0KSkpCi0g
ICAgICAgICAgICAgIChfICAgKGNhbGwtd2l0aC1pbnB1dC1maWxlIGZpbGUKLSAgICAgICAgICAg
ICAgICAgICAgIChjdXRlIHBvcnQtaGFzaCAoYXNzb2MtcmVmIG9wdHMgJ2hhc2gtYWxnb3JpdGht
KQotICAgICAgICAgICAgICAgICAgICAgICAgICAgPD4pKSkpKSkpCisgICAgICAgIChtYXRjaCBm
aWxlCisgICAgICAgICAgKCItIiAocG9ydC1oYXNoIChhc3NvYy1yZWYgb3B0cyAnaGFzaC1hbGdv
cml0aG0pCisgICAgICAgICAgICAgICAgICAgICAgICAgIChjdXJyZW50LWlucHV0LXBvcnQpKSkK
KyAgICAgICAgICAoXyAgIChmaWxlLWhhc2gqICM6YWxnb3JpdGhtIChhc3NvYy1yZWYgb3B0cyAn
aGFzaC1hbGdvcml0aG0pCisgICAgICAgICAgICAgICAgICAgICAgICAgICAjOnJlY3Vyc2l2ZT8g
KGFzc29jLXJlZiBvcHRzICdyZWN1cnNpdmU/KSkpKSkpCiAKICAgICAobWF0Y2ggYXJncwogICAg
ICAgKChmaWxlKQotLSAKMi4zMy4wCgo=


--=-Ed3xbcWsGUAuseKcAI15
Content-Disposition: inline;
	filename*0=0003-gexp-Allow-computing-the-hash-of-the-local-file-in-a.pat;
	filename*1=ch
Content-Type: text/x-patch;
	name="0003-gexp-Allow-computing-the-hash-of-the-local-file-in-a.patch";
	charset="UTF-8"
Content-Transfer-Encoding: base64

RnJvbSBjYzU0ZTFjNTAyMTExOWJmYWJhMDc4NDllODNlYTMxZjcwOTk5NzBlIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBNYXhpbWUgRGV2b3MgPG1heGltZWRldm9zQHRlbGVuZXQuYmU+
CkRhdGU6IFNhdCwgNCBTZXAgMjAyMSAxNTozNTo1MSArMDIwMApTdWJqZWN0OiBbUEFUQ0ggMy82
XSBnZXhwOiBBbGxvdyBjb21wdXRpbmcgdGhlIGhhc2ggb2YgdGhlIGxvY2FsIGZpbGUgaW4KIGFk
dmFuY2UuCgpUaGUgbmV3IGZpZWxkIGlzIGN1cnJlbnRseSB1bnVzZWQuICBUaGUgZm9sbG93aW5n
IHBhdGNoZXMgd2lsbApwb3B1bGF0ZSBhbmQgdXNlIHRoZSBmaWVsZCB0byByZWR1Y2UgdGhlIHRp
bWUtdG8tZGVyaXZhdGlvbgp3aGVuIHRoZSBmaWxlIGlzIGFscmVhZHkgaW50ZXJuZWQgaW4gdGhl
IHN0b3JlLgoKKiBndWl4L2dleHAuc2NtCiAgKDxsb2NhbC1maWxlPik6IEFkZCBzaGEyNTYgZmll
bGQuCiAgKCVsb2NhbC1maWxlKTogQWRkIHNoYTI1NiBhcmd1bWVudCBmb3IgcG9wdWxhdGluZyB0
aGUgZmllbGQuCiAgKGxvY2FsLWZpbGUtY29tcGlsZXIpOiBBZGp1c3QgJ21hdGNoJyBleHByZXNz
aW9uLgotLS0KIGd1aXgvZ2V4cC5zY20gfCAxMiArKysrKysrKy0tLS0KIDEgZmlsZSBjaGFuZ2Vk
LCA4IGluc2VydGlvbnMoKyksIDQgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvZ3VpeC9nZXhw
LnNjbSBiL2d1aXgvZ2V4cC5zY20KaW5kZXggZjNkMjc4YjNlNi4uYTYzMzk4NDY4OCAxMDA2NDQK
LS0tIGEvZ3VpeC9nZXhwLnNjbQorKysgYi9ndWl4L2dleHAuc2NtCkBAIC00MTksMTMgKzQxOSwx
NiBAQCBIZXJlIFRBUkdFVCBpcyBib3VuZCB0byB0aGUgY3Jvc3MtY29tcGlsYXRpb24gdHJpcGxl
dCBvciAjZi4iCiA7OyBBIGxvY2FsIGZpbGUgbmFtZS4gIEZJTEUgaXMgdGhlIGZpbGUgbmFtZSB0
aGUgdXNlciBlbnRlcmVkLCB3aGljaCBjYW4gYmUgYQogOzsgcmVsYXRpdmUgZmlsZSBuYW1lLCBh
bmQgQUJTT0xVVEUgaXMgYSBwcm9taXNlIHRoYXQgY29tcHV0ZXMgaXRzIGNhbm9uaWNhbAogOzsg
YWJzb2x1dGUgZmlsZSBuYW1lLiAgV2Uga2VlcCBpdCBpbiBhIHByb21pc2UgdG8gY29tcHV0ZSBp
dCBsYXppbHkgYW5kIGF2b2lkCi07OyByZXBlYXRlZCAnc3RhdCcgY2FsbHMuCis7OyByZXBlYXRl
ZCAnc3RhdCcgY2FsbHMuICBBbGxvdyBjb21wdXRpbmcgdGhlIGhhc2ggb2YgdGhlIGZpbGUgaW4g
YWR2YW5jZSwKKzs7IHRvIGF2b2lkIGhhdmluZyB0byBzZW5kIHRoZSBmaWxlIHRvIHRoZSBkYWVt
b24gd2hlbiBpdCBpcyBhbHJlYWR5IGludGVybmVkCis7OyBpbiB0aGUgc3RvcmUuCiAoZGVmaW5l
LXJlY29yZC10eXBlIDxsb2NhbC1maWxlPgotICAoJSVsb2NhbC1maWxlIGZpbGUgYWJzb2x1dGUg
bmFtZSByZWN1cnNpdmU/IHNlbGVjdD8pCisgICglJWxvY2FsLWZpbGUgZmlsZSBhYnNvbHV0ZSBu
YW1lIHNoYTI1NiByZWN1cnNpdmU/IHNlbGVjdD8pCiAgIGxvY2FsLWZpbGU/CiAgIChmaWxlICAg
ICAgIGxvY2FsLWZpbGUtZmlsZSkgICAgICAgICAgICAgICAgICAgIDtzdHJpbmcKICAgKGFic29s
dXRlICAgJWxvY2FsLWZpbGUtYWJzb2x1dGUtZmlsZS1uYW1lKSAgICAgO3Byb21pc2Ugc3RyaW5n
CiAgIChuYW1lICAgICAgIGxvY2FsLWZpbGUtbmFtZSkgICAgICAgICAgICAgICAgICAgIDtzdHJp
bmcKKyAgKHNoYTI1NiAgICAgbG9jYWwtZmlsZS1zaGEyNTYpICAgICAgICAgICAgICAgICAgO3No
YTI1NiBieXRldmVjdG9yIHwgI2YKICAgKHJlY3Vyc2l2ZT8gbG9jYWwtZmlsZS1yZWN1cnNpdmU/
KSAgICAgICAgICAgICAgO0Jvb2xlYW4KICAgKHNlbGVjdD8gICAgbG9jYWwtZmlsZS1zZWxlY3Q/
KSkgICAgICAgICAgICAgICAgO3N0cmluZyBzdGF0IC0+IEJvb2xlYW4KIApAQCAtNDM0LDYgKzQz
Nyw3IEBAIEhlcmUgVEFSR0VUIGlzIGJvdW5kIHRvIHRoZSBjcm9zcy1jb21waWxhdGlvbiB0cmlw
bGV0IG9yICNmLiIKIChkZWZpbmUqICglbG9jYWwtZmlsZSBmaWxlIHByb21pc2UgIzpvcHRpb25h
bCAobmFtZSAoYmFzZW5hbWUgZmlsZSkpCiAgICAgICAgICAgICAgICAgICAgICAgIzprZXkKICAg
ICAgICAgICAgICAgICAgICAgICAobGl0ZXJhbD8gI3QpIGxvY2F0aW9uCisgICAgICAgICAgICAg
ICAgICAgICAgc2hhMjU2CiAgICAgICAgICAgICAgICAgICAgICAgcmVjdXJzaXZlPyAoc2VsZWN0
PyB0cnVlKSkKICAgOzsgVGhpcyBpbnRlcm1lZGlhdGUgcHJvY2VkdXJlIGlzIHBhcnQgb2Ygb3Vy
IEFCSSwgYnV0IHRoZSB1bmRlcmx5aW5nCiAgIDs7ICUlTE9DQUwtRklMRSBpcyBub3QuCkBAIC00
NDEsNyArNDQ1LDcgQEAgSGVyZSBUQVJHRVQgaXMgYm91bmQgdG8gdGhlIGNyb3NzLWNvbXBpbGF0
aW9uIHRyaXBsZXQgb3IgI2YuIgogICAgICh3YXJuaW5nIChhbmQ9PiBsb2NhdGlvbiBzb3VyY2Ut
cHJvcGVydGllcy0+bG9jYXRpb24pCiAgICAgICAgICAgICAgKEdfICJyZXNvbHZpbmcgJ35hJyBy
ZWxhdGl2ZSB0byBjdXJyZW50IGRpcmVjdG9yeX4lIikKICAgICAgICAgICAgICBmaWxlKSkKLSAg
KCUlbG9jYWwtZmlsZSBmaWxlIHByb21pc2UgbmFtZSByZWN1cnNpdmU/IHNlbGVjdD8pKQorICAo
JSVsb2NhbC1maWxlIGZpbGUgcHJvbWlzZSBuYW1lIHNoYTI1NiByZWN1cnNpdmU/IHNlbGVjdD8p
KQogCiAoZGVmaW5lIChhYnNvbHV0ZS1maWxlLW5hbWUgZmlsZSBkaXJlY3RvcnkpCiAgICJSZXR1
cm4gdGhlIGNhbm9uaWNhbCBhYnNvbHV0ZSBmaWxlIG5hbWUgZm9yIEZJTEUsIHdoaWNoIGxpdmVz
IGluIHRoZQpAQCAtNTE3LDcgKzUyMSw3IEBAIGFwcGVhcnMuIgogKGRlZmluZS1nZXhwLWNvbXBp
bGVyIChsb2NhbC1maWxlLWNvbXBpbGVyIChmaWxlIDxsb2NhbC1maWxlPikgc3lzdGVtIHRhcmdl
dCkKICAgOzsgIkNvbXBpbGUiIEZJTEUgYnkgYWRkaW5nIGl0IHRvIHRoZSBzdG9yZS4KICAgKG1h
dGNoIGZpbGUKLSAgICAoKCQgPGxvY2FsLWZpbGU+IGZpbGUgKD0gZm9yY2UgYWJzb2x1dGUpIG5h
bWUgcmVjdXJzaXZlPyBzZWxlY3Q/KQorICAgICgoJCA8bG9jYWwtZmlsZT4gZmlsZSAoPSBmb3Jj
ZSBhYnNvbHV0ZSkgbmFtZSBzaGEyNTYgcmVjdXJzaXZlPyBzZWxlY3Q/KQogICAgICA7OyBDYW5v
bmljYWxpemUgRklMRSBzbyB0aGF0IGlmIGl0J3MgYSBzeW1saW5rLCBpdCBpcyByZXNvbHZlZC4g
IEZhaWxpbmcKICAgICAgOzsgdG8gZG8gdGhhdCwgd2hlbiBSRUNVUlNJVkU/IGlzICN0LCB3ZSBj
b3VsZCBlbmQgdXAgY3JlYXRpbmcgYSBkYW5nbGluZwogICAgICA7OyBzeW1saW5rIGluIHRoZSBz
dG9yZSwgYW5kIHdoZW4gUkVDVVJTSVZFPyBpcyAjZiAnYWRkLXRvLXN0b3JlJyB3b3VsZAotLSAK
Mi4zMy4wCgo=


--=-Ed3xbcWsGUAuseKcAI15
Content-Disposition: inline; filename="0004-gexp-Allow-overriding-the-absolute-file-name.patch"
Content-Type: text/x-patch;
	name="0004-gexp-Allow-overriding-the-absolute-file-name.patch";
	charset="UTF-8"
Content-Transfer-Encoding: base64

RnJvbSAxOTM3ZWRkOTA2YjgxN2RkMTU2NDhmYTY4MmQ1NWQzYjNmNzc5ZTQ1IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBNYXhpbWUgRGV2b3MgPG1heGltZWRldm9zQHRlbGVuZXQuYmU+
CkRhdGU6IFNhdCwgNCBTZXAgMjAyMSAxNjoyNToyMiArMDIwMApTdWJqZWN0OiBbUEFUQ0ggNC82
XSBnZXhwOiBBbGxvdyBvdmVycmlkaW5nIHRoZSBhYnNvbHV0ZSBmaWxlIG5hbWUuCgpUaGlzIHdp
bGwgYmUgdXNlZCBieSB0aGUgbmV4dCBwYXRjaCB0byBpbXBsZW1lbnQgc2VhcmNoLXBhdGNoIGlu
CnRlcm1zIG9mIGxvY2FsLWZpbGUuCgoqIGd1aXgvZ2V4cC5zY20KICAocHJlY2Fub25pY2FsaXpl
ZC1maWxlLW5hbWUpOiBOZXcgbWFjcm8uCiAgKGxvY2FsLWZpbGUpOiBVc2UgdGhlIGFic29sdXRl
IGZpbGUgbmFtZSBmcm9tIHByZWNhbm9uaWNhbGl6ZWQtZmlsZS1uYW1lCiAgd2hlbiBhdmFpbGFi
bGUuCi0tLQogZ3VpeC9nZXhwLnNjbSB8IDEyICsrKysrKysrKysrLQogMSBmaWxlIGNoYW5nZWQs
IDExIGluc2VydGlvbnMoKyksIDEgZGVsZXRpb24oLSkKCmRpZmYgLS1naXQgYS9ndWl4L2dleHAu
c2NtIGIvZ3VpeC9nZXhwLnNjbQppbmRleCBhNjMzOTg0Njg4Li5jNjllNGFhMjk5IDEwMDY0NAot
LS0gYS9ndWl4L2dleHAuc2NtCisrKyBiL2d1aXgvZ2V4cC5zY20KQEAgLTUxLDYgKzUxLDcgQEAK
ICAgICAgICAgICAgIGdleHAtaW5wdXQtb3V0cHV0CiAgICAgICAgICAgICBnZXhwLWlucHV0LW5h
dGl2ZT8KIAorICAgICAgICAgICAgcHJlY2Fub25pY2FsaXplZC1maWxlLW5hbWUKICAgICAgICAg
ICAgIGFzc3VtZS12YWxpZC1maWxlLW5hbWUKICAgICAgICAgICAgIGxvY2FsLWZpbGUKICAgICAg
ICAgICAgIGxvY2FsLWZpbGU/CkBAIC00NjMsNiArNDY0LDEyIEBAIHRoZSBnaXZlbiBmaWxlIG5h
bWUgaXMgdmFsaWQsIGV2ZW4gaWYgaXQncyBub3QgYSBzdHJpbmcgbGl0ZXJhbCwgYW5kIHRodXMg
bm90CiB3YXJuIGFib3V0IGl0LiIKICAgZmlsZSkKIAorKGRlZmluZS1zeW50YXgtcnVsZSAocHJl
Y2Fub25pY2FsaXplZC1maWxlLW5hbWUgZmlsZSBhYnNvbHV0ZSkKKyAgIlRoaXMgaXMgYSBzeW50
YWN0aWMga2V5d29yZCB0byB0ZWxsICdsb2NhbC1maWxlJyB0aGF0IGl0IGNhbiBhc3N1bWUgdGhh
dAordGhlIGdpdmVuIGZpbGUgbmFtZSBGSUxFIGhhcyBBQlNPTFVURSBhcyBhYnNvbHV0ZSBmaWxl
IG5hbWUgYW5kICdsb2NhbC1maWxlJworZG9lcyBub3QgbmVlZCB0byBjb21wdXRlIHRoZSBhYnNv
bHV0ZSBmaWxlIG5hbWUgYnkgaXRzZWxmLiIKKyAgYWJzb2x1dGUpCisKIChkZWZpbmUtc3ludGF4
IGxvY2FsLWZpbGUKICAgKGxhbWJkYSAocykKICAgICAiUmV0dXJuIGFuIG9iamVjdCByZXByZXNl
bnRpbmcgbG9jYWwgZmlsZSBGSUxFIHRvIGFkZCB0byB0aGUgc3RvcmU7IHRoaXMKQEAgLTQ4MSw3
ICs0ODgsNyBAQCB3aGVyZSBGSUxFIGlzIHRoZSBlbnRyeSdzIGFic29sdXRlIGZpbGUgbmFtZSBh
bmQgU1RBVCBpcyB0aGUgcmVzdWx0IG9mCiBUaGlzIGlzIHRoZSBkZWNsYXJhdGl2ZSBjb3VudGVy
cGFydCBvZiB0aGUgJ2ludGVybmVkLWZpbGUnIG1vbmFkaWMgcHJvY2VkdXJlLgogSXQgaXMgaW1w
bGVtZW50ZWQgYXMgYSBtYWNybyB0byBjYXB0dXJlIHRoZSBjdXJyZW50IHNvdXJjZSBkaXJlY3Rv
cnkgd2hlcmUgaXQKIGFwcGVhcnMuIgotICAgIChzeW50YXgtY2FzZSBzIChhc3N1bWUtdmFsaWQt
ZmlsZS1uYW1lKQorICAgIChzeW50YXgtY2FzZSBzIChhc3N1bWUtdmFsaWQtZmlsZS1uYW1lIHBy
ZWNhbm9uaWNhbGl6ZWQtZmlsZS1uYW1lKQogICAgICAgKChfIGZpbGUgcmVzdCAuLi4pCiAgICAg
ICAgKHN0cmluZz8gKHN5bnRheC0+ZGF0dW0gIydmaWxlKSkKICAgICAgICA7OyBGSUxFIGlzIGEg
bGl0ZXJhbCwgc28gcmVzb2x2ZSBpdCByZWxhdGl2ZSB0byB0aGUgc291cmNlIGRpcmVjdG9yeS4K
QEAgLTQ5NSw2ICs1MDIsOSBAQCBhcHBlYXJzLiIKICAgICAgICAjJyglbG9jYWwtZmlsZSBmaWxl
CiAgICAgICAgICAgICAgICAgICAgICAgKGRlbGF5IChhYnNvbHV0ZS1maWxlLW5hbWUgZmlsZSAo
Z2V0Y3dkKSkpCiAgICAgICAgICAgICAgICAgICAgICAgcmVzdCAuLi4pKQorICAgICAgKChfIChw
cmVjYW5vbmljYWxpemVkLWZpbGUtbmFtZSBmaWxlIGFic29sdXRlKSByZXN0IC4uLikKKyAgICAg
ICA7OyBVc2UgdGhlIGdpdmVuIGZpbGUgbmFtZSBBQlNPTFVURSBhcyBhYnNvbHV0ZSBmaWxlIG5h
bWUuCisgICAgICAgIycoJWxvY2FsLWZpbGUgZmlsZSAoZGVsYXkgYWJzb2x1dGUpIHJlc3QgLi4u
KSkKICAgICAgICgoXyBmaWxlIHJlc3QgLi4uKQogICAgICAgIDs7IFJlc29sdmUgRklMRSByZWxh
dGl2ZSB0byB0aGUgY3VycmVudCBkaXJlY3RvcnkuCiAgICAgICAgKHdpdGgtc3ludGF4ICgobG9j
YXRpb24gKGRhdHVtLT5zeW50YXggcyAoc3ludGF4LXNvdXJjZSBzKSkpKQotLSAKMi4zMy4wCgo=


--=-Ed3xbcWsGUAuseKcAI15
Content-Disposition: inline;
	filename*0=0005-packages-Compute-the-hash-of-patches-in-advance-when.pat;
	filename*1=ch
Content-Type: text/x-patch;
	name="0005-packages-Compute-the-hash-of-patches-in-advance-when.patch";
	charset="UTF-8"
Content-Transfer-Encoding: base64

RnJvbSBlM2IxNGZkZjYzZTc4YTUwNGE0ZjZlOGE2ZWQ4NWQ1ZjhiMDhhY2I3IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBNYXhpbWUgRGV2b3MgPG1heGltZWRldm9zQHRlbGVuZXQuYmU+
CkRhdGU6IFNhdCwgNCBTZXAgMjAyMSAxNzoyNTo1OCArMDIwMApTdWJqZWN0OiBbUEFUQ0ggNS82
XSBwYWNrYWdlczogQ29tcHV0ZSB0aGUgaGFzaCBvZiBwYXRjaGVzIGluIGFkdmFuY2Ugd2hlbgog
cG9zc2libGUuCgoqIGdudS9wYWNrYWdlcy5zY20KICAoc2VhcmNoLXBhdGNoKTogUmVuYW1lIHRv
IC4uLgogICglc2VhcmNoLXBhdGNoKTogLi4uIHRoaXMuCiAgKHRyeS1zZWFyY2gtcGF0Y2gpOiBO
ZXcgcHJvY2VkdXJlLCBleHRyYWN0ZWQgZnJvbSAuLi4KICAoJXNlYXJjaC1wYXRjaCk6IC4uLiB0
aGlzIHByb2NlZHVyZS4KICAoJWxvY2FsLXBhdGNoLWZpbGUpOiBOZXcgcHJvY2VkdXJlLgogICh0
cnVlKTogTmV3IHByb2NlZHVyZS4KICAoc2VhcmNoLXBhdGNoKTogTmV3IG1hY3JvLCBiZWhhdmlu
ZyBsaWtlICVzZWFyY2gtcGF0Y2gsIGJ1dCBjb21wdXRpbmcgdGhlCiAgaGFzaCBhdCBleHBhbnNp
b24gdGltZSB3aGVuIHBvc3NpYmxlLgoqIGdudS9wYWNrYWdlcy9jaHJvbWl1bS5zY20KICAoJWd1
aXgtcGF0Y2hlcyk6IFVzZSBzZWFyY2gtcGF0Y2hlcyBpbnN0ZWFkIG9mIGxvY2FsLWZpbGUgKwog
IGFzc3VtZS12YWxpZC1maWxlLW5hbWUgKyBzZWFyY2gtcGF0Y2guCiogZ251L3BhY2thZ2VzL2du
dXppbGxhLnNjbQogIChpY2VjYXQtc291cmNlKVtnbnV6aWxsYS1maXhlcy1wYXRjaF06IFVzZSBz
ZWFyY2gtcGF0Y2ggaW5zdGVhZCBvZgogIGxvY2FsLWZpbGUgKyBhc3N1bGUtdmFsaWQtZmlsZS1u
YW1lICsgc2VhcmNoLXBhdGNoLgogIChpY2VjYXQtc291cmNlKVttYWtlaWNlY2F0LXBhdGNoXTog
TGlrZXdpc2UuCiogZ251L3BhY2thZ2VzL2VtYmVkZGVkLnNjbQogIChnY2MtYXJtLW5vbmUtZWFi
aS00LjkpW3NvdXJjZV17cGF0Y2hlc306IEV4cGVjdCBwYXRjaGVzIHRvIGJlCiAgbG9jYWwtZmls
ZSBvYmplY3RzIGluc3RlYWQgb2Ygc3RyaW5ncy4KICBvZiBzdHJpbmdzLgoqIGd1aXgvbGludC5z
Y20gKGNoZWNrLXBhdGNoLWZpbGUtbmFtZXMpOiBBbGxvdyBsb2NhbC1maWxlIG9iamVjdHMuCi0t
LQogZ251L3BhY2thZ2VzLnNjbSAgICAgICAgICB8IDQyICsrKysrKysrKysrKysrKysrKysrKysr
KysrKysrKysrKysrKystLQogZ251L3BhY2thZ2VzL2Nocm9taXVtLnNjbSB8ICA0ICstLS0KIGdu
dS9wYWNrYWdlcy9lbWJlZGRlZC5zY20gfCAgMyArKy0KIGdudS9wYWNrYWdlcy9nbnV6aWxsYS5z
Y20gfCAgOCArKy0tLS0tLQogZ3VpeC9saW50LnNjbSAgICAgICAgICAgICB8IDI4ICsrKysrKysr
KysrKysrKystLS0tLS0tLS0tCiA1IGZpbGVzIGNoYW5nZWQsIDYyIGluc2VydGlvbnMoKyksIDIz
IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL2dudS9wYWNrYWdlcy5zY20gYi9nbnUvcGFja2Fn
ZXMuc2NtCmluZGV4IGNjZmM4M2RkMTEuLmY1NTUyZTVhOWIgMTAwNjQ0Ci0tLSBhL2dudS9wYWNr
YWdlcy5zY20KKysrIGIvZ251L3BhY2thZ2VzLnNjbQpAQCAtNCw2ICs0LDcgQEAKIDs7OyBDb3B5
cmlnaHQgwqkgMjAxNCBFcmljIEJhdmllciA8YmF2aWVyQG1lbWJlci5mc2Yub3JnPgogOzs7IENv
cHlyaWdodCDCqSAyMDE2LCAyMDE3IEFsZXggS29zdCA8YWxlem9zdEBnbWFpbC5jb20+CiA7Ozsg
Q29weXJpZ2h0IMKpIDIwMTYgTWF0aGlldSBMaXJ6aW4gPG10aGxAZ251Lm9yZz4KKzs7OyBDb3B5
cmlnaHQgwqkgMjAyMSBNYXhpbWUgRGV2b3MgPG1heGltZWRldm9zQHRlbGVuZXQuYmU+CiA7OzsK
IDs7OyBUaGlzIGZpbGUgaXMgcGFydCBvZiBHTlUgR3VpeC4KIDs7OwpAQCAtMjEsMTEgKzIyLDEz
IEBACiA7OzsgYWxvbmcgd2l0aCBHTlUgR3VpeC4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3Lmdu
dS5vcmcvbGljZW5zZXMvPi4KIAogKGRlZmluZS1tb2R1bGUgKGdudSBwYWNrYWdlcykKKyAgIzp1
c2UtbW9kdWxlIChndWl4IGdleHApCiAgICM6dXNlLW1vZHVsZSAoZ3VpeCBwYWNrYWdlcykKICAg
Izp1c2UtbW9kdWxlIChndWl4IHVpKQogICAjOnVzZS1tb2R1bGUgKGd1aXggdXRpbHMpCiAgICM6
dXNlLW1vZHVsZSAoZ3VpeCBkaWFnbm9zdGljcykKICAgIzp1c2UtbW9kdWxlIChndWl4IGRpc2Nv
dmVyeSkKKyAgIzp1c2UtbW9kdWxlIChndWl4IGhhc2gpCiAgICM6dXNlLW1vZHVsZSAoZ3VpeCBt
ZW1vaXphdGlvbikKICAgIzp1c2UtbW9kdWxlICgoZ3VpeCBidWlsZCB1dGlscykKICAgICAgICAg
ICAgICAgICAjOnNlbGVjdCAoKHBhY2thZ2UtbmFtZS0+bmFtZSt2ZXJzaW9uCkBAIC05MCwxMiAr
OTMsNDcgQEAKICAgIlNlYXJjaCB0aGUgYXV4aWxpYXJ5IEZJTEUtTkFNRS4gIFJldHVybiAjZiBp
ZiBub3QgZm91bmQuIgogICAoc2VhcmNoLXBhdGggKCVhdXhpbGlhcnktZmlsZXMtcGF0aCkgZmls
ZS1uYW1lKSkKIAotKGRlZmluZSAoc2VhcmNoLXBhdGNoIGZpbGUtbmFtZSkKKyhkZWZpbmUgKHRy
eS1zZWFyY2gtcGF0Y2ggZmlsZS1uYW1lKQorICAiU2VhcmNoIHRoZSBwYXRjaCBGSUxFLU5BTUUu
ICBSZXR1cm4gI2YgaWYgbm90IGZvdW5kLiIKKyAgKHNlYXJjaC1wYXRoICglcGF0Y2gtcGF0aCkg
ZmlsZS1uYW1lKSkKKworKGRlZmluZSAoJXNlYXJjaC1wYXRjaCBmaWxlLW5hbWUpCiAgICJTZWFy
Y2ggdGhlIHBhdGNoIEZJTEUtTkFNRS4gIFJhaXNlIGFuIGVycm9yIGlmIG5vdCBmb3VuZC4iCi0g
IChvciAoc2VhcmNoLXBhdGggKCVwYXRjaC1wYXRoKSBmaWxlLW5hbWUpCisgIChvciAodHJ5LXNl
YXJjaC1wYXRjaCBmaWxlLW5hbWUpCiAgICAgICAocmFpc2UgKGZvcm1hdHRlZC1tZXNzYWdlIChH
XyAifmE6IHBhdGNoIG5vdCBmb3VuZCIpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGZpbGUtbmFtZSkpKSkKIAorKGRlZmluZSAoJWxvY2FsLXBhdGNoLWZpbGUgZmlsZS1uYW1lIGhh
c2gpCisgICJTZWFyY2ggdGhlIHBhdGNoIEZJTEUtTkFNRSwgd2hpY2ggaXMga25vd24gdG8gaGF2
ZSBIQVNILiIKKyAgKGxvY2FsLWZpbGUgKHByZWNhbm9uaWNhbGl6ZWQtZmlsZS1uYW1lIGZpbGUt
bmFtZSAoJXNlYXJjaC1wYXRjaCBmaWxlLW5hbWUpKQorICAgICAgICAgICAgICAjOnNoYTI1NiBo
YXNoICM6cmVjdXJzaXZlPyAjdCkpCisKKyhkZWZpbmUgdHJ1ZSAoY29uc3QgI3QpKQorCisoZGVm
aW5lLXN5bnRheCBzZWFyY2gtcGF0Y2gKKyAgKGxhbWJkYSAocykKKyAgICAiU2VhcmNoIHRoZSBw
YXRjaCBGSUxFLU5BTUUgYW5kIGNvbXB1dGUgaXRzIGhhc2ggYXQgZXhwYW5zaW9uIHRpbWUKK2lm
IHBvc3NpYmxlLiAgUmV0dXJuICNmIGlmIG5vdCBmb3VuZC4iCisgICAgKHN5bnRheC1jYXNlIHMg
KCkKKyAgICAgICgoXyBmaWxlLW5hbWUpCisgICAgICAgKHN0cmluZz8gKHN5bnRheC0+ZGF0dW0g
IydmaWxlLW5hbWUpKQorICAgICAgIDs7IEZJTEUtTkFNRSBpcyBhIGNvbnN0YW50IHN0cmluZywg
c28gdGhlIGhhc2ggY2FuIGJlIGNvbXB1dGVkCisgICAgICAgOzsgaW4gYWR2YW5jZS4KKyAgICAg
ICAobGV0ICgocGF0Y2ggKHRyeS1zZWFyY2gtcGF0Y2ggKHN5bnRheC0+ZGF0dW0gIydmaWxlLW5h
bWUpKSkpCisgICAgICAgICAoaWYgcGF0Y2gKKyAgICAgICAgICAgICAjYCglbG9jYWwtcGF0Y2gt
ZmlsZSBmaWxlLW5hbWUgIywoZmlsZS1oYXNoKiBwYXRjaCAjOnNlbGVjdD8gdHJ1ZSkpCisgICAg
ICAgICAgICAgKGJlZ2luCisgICAgICAgICAgICAgICAod2FybmluZyAoc291cmNlLXByb3BlcnRp
ZXMtPmxvY2F0aW9uCisgICAgICAgICAgICAgICAgICAgICAgICAgKHN5bnRheC1zb3VyY2UgIydm
aWxlLW5hbWUpKQorICAgICAgICAgICAgICAgICAgICAgICAgKEdfICJ+YTogcGF0Y2ggbm90IGZv
dW5kIGF0IGV4cGFuc2lvbiB0aW1lIikKKyAgICAgICAgICAgICAgICAgICAgICAgIChzeW50YXgt
PmRhdHVtICMnaWxlLW5hbWUpKQorICAgICAgICAgICAgICAgIycoJXNlYXJjaC1wYXRjaCBmaWxl
LW5hbWUpKSkpKQorICAgICAgOzsgRklMRS1OQU1FIGlzIHZhcmlhYmxlLCBzbyB0aGUgaGFzaCBj
YW5ub3QgYmUgcHJlLWNvbXB1dGVkLgorICAgICAgKChfIGZpbGUtbmFtZSkgIycoJXNlYXJjaC1w
YXRjaCBmaWxlLW5hbWUpKQorICAgICAgOzsgc2VhcmNoLXBhdGNoIGlzIGJlaW5nIHVzZWQgdXNl
ZCBpbiBhIGNvbnN0cnVjdCBsaWtlCisgICAgICA7OyAobWFwIHNlYXJjaC1wYXRjaCAuLi4pLgor
ICAgICAgKGlkIChpZGVudGlmaWVyPyAjJ2lkKSAjJyVzZWFyY2gtcGF0Y2gpKSkpCisKIChkZWZp
bmUtc3ludGF4LXJ1bGUgKHNlYXJjaC1wYXRjaGVzIGZpbGUtbmFtZSAuLi4pCiAgICJSZXR1cm4g
dGhlIGxpc3Qgb2YgYWJzb2x1dGUgZmlsZSBuYW1lcyBjb3JyZXNwb25kaW5nIHRvIGVhY2gKIEZJ
TEUtTkFNRSBmb3VuZCBpbiAlUEFUQ0gtUEFUSC4iCmRpZmYgLS1naXQgYS9nbnUvcGFja2FnZXMv
Y2hyb21pdW0uc2NtIGIvZ251L3BhY2thZ2VzL2Nocm9taXVtLnNjbQppbmRleCAyNmFlMWUyNTUw
Li5jZjQxOWNmNDFiIDEwMDY0NAotLS0gYS9nbnUvcGFja2FnZXMvY2hyb21pdW0uc2NtCisrKyBi
L2dudS9wYWNrYWdlcy9jaHJvbWl1bS5zY20KQEAgLTM1MSw5ICszNTEsNyBAQAogICAgICAgIjB3
YmNianpoNWFrNG5jaWFocXc0eXZ4YzR4OGlrNHgwaXo5aDRrZnkwbTAxMXN4enkxNzQiKSkpKQog
CiAoZGVmaW5lICVndWl4LXBhdGNoZXMKLSAgKGxpc3QgKGxvY2FsLWZpbGUKLSAgICAgICAgIChh
c3N1bWUtdmFsaWQtZmlsZS1uYW1lCi0gICAgICAgICAgKHNlYXJjaC1wYXRjaCAidW5nb29nbGVk
LWNocm9taXVtLWV4dGVuc2lvbi1zZWFyY2gtcGF0aC5wYXRjaCIpKSkpKQorICAoc2VhcmNoLXBh
dGNoZXMgInVuZ29vZ2xlZC1jaHJvbWl1bS1leHRlbnNpb24tc2VhcmNoLXBhdGgucGF0Y2giKSkK
IAogOzsgVGhpcyBpcyBhIHNvdXJjZSAnc25pcHBldCcgdGhhdCBkb2VzIHRoZSBmb2xsb3dpbmc6
CiA7OyAqKSBBcHBsaWVzIHZhcmlvdXMgcGF0Y2hlcyBmb3IgdW5idW5kbGluZyBwdXJwb3NlcyBh
bmQgbGlic3RkYysrIGNvbXBhdGliaWxpdHkuCmRpZmYgLS1naXQgYS9nbnUvcGFja2FnZXMvZW1i
ZWRkZWQuc2NtIGIvZ251L3BhY2thZ2VzL2VtYmVkZGVkLnNjbQppbmRleCBmMzg4YzExYzNkLi44
MjZmNTY1NWMzIDEwMDY0NAotLS0gYS9nbnUvcGFja2FnZXMvZW1iZWRkZWQuc2NtCisrKyBiL2du
dS9wYWNrYWdlcy9lbWJlZGRlZC5zY20KQEAgLTMwLDYgKzMwLDcgQEAKICAgIzp1c2UtbW9kdWxl
IChndWl4IHBhY2thZ2VzKQogICAjOnVzZS1tb2R1bGUgKGd1aXggZG93bmxvYWQpCiAgICM6dXNl
LW1vZHVsZSAoZ3VpeCBzdm4tZG93bmxvYWQpCisgICM6dXNlLW1vZHVsZSAoZ3VpeCBnZXhwKQog
ICAjOnVzZS1tb2R1bGUgKGd1aXggZ2l0LWRvd25sb2FkKQogICAjOnVzZS1tb2R1bGUgKChndWl4
IGxpY2Vuc2VzKSAjOnByZWZpeCBsaWNlbnNlOikKICAgIzp1c2UtbW9kdWxlIChndWl4IGJ1aWxk
LXN5c3RlbSBjbWFrZSkKQEAgLTkxLDcgKzkyLDcgQEAKICAgICAgICAgIDs7IFJlbW92ZSB0aGUg
b25lIHBhdGNoIHRoYXQgZG9lc24ndCBhcHBseSB0byB0aGlzIDQuOSBzbmFwc2hvdCAodGhlCiAg
ICAgICAgICA7OyBwYXRjaCBpcyBmb3IgNC45LjQgYW5kIGxhdGVyIGJ1dCB0aGlzIHN2biBzbmFw
c2hvdCBpcyBvbGRlcikuCiAgICAgICAgICAocGF0Y2hlcyAocmVtb3ZlIChsYW1iZGEgKHBhdGNo
KQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzdHJpbmc9PyAoYmFzZW5hbWUgcGF0Y2gp
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHN0cmluZz0/IChsb2NhbC1maWxlLW5hbWUg
cGF0Y2gpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJnY2MtYXJtLWJ1
Zy03MTM5OS5wYXRjaCIpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAob3JpZ2luLXBhdGNo
ZXMgKHBhY2thZ2Utc291cmNlIHhnY2MpKSkpKSkKICAgICAgIChuYXRpdmUtaW5wdXRzCmRpZmYg
LS1naXQgYS9nbnUvcGFja2FnZXMvZ251emlsbGEuc2NtIGIvZ251L3BhY2thZ2VzL2dudXppbGxh
LnNjbQppbmRleCA1NzZiYzI1ODZmLi5iZTY3NGRjZThmIDEwMDY0NAotLS0gYS9nbnUvcGFja2Fn
ZXMvZ251emlsbGEuc2NtCisrKyBiL2dudS9wYWNrYWdlcy9nbnV6aWxsYS5zY20KQEAgLTczNiwx
NCArNzM2LDEwIEBAIGZyb20gZm9yY2luZyBHRVhQLVBST01JU0UuIgogICAgICAgICAgICAgIChi
YXNlMzIKICAgICAgICAgICAgICAgIjAwd3MzNTQweDV3aHBpY2M1Zng0azk0OWZmNzNjcXZhano2
anAxM2FobjQ5d3FkYWRzNDciKSkpKQogCi0gICAgICAgICA7OyAnc2VhcmNoLXBhdGNoJyByZXR1
cm5zIGVpdGhlciBhIHZhbGlkIGZpbGUgbmFtZSBvciAjZiwgc28gd3JhcCBpdAotICAgICAgICAg
OzsgaW4gJ2Fzc3VtZS12YWxpZC1maWxlLW5hbWUnIHRvIGF2b2lkICdsb2NhbC1maWxlJyB3YXJu
aW5ncy4KICAgICAgICAgIChnbnV6aWxsYS1maXhlcy1wYXRjaAotICAgICAgICAgIChsb2NhbC1m
aWxlIChhc3N1bWUtdmFsaWQtZmlsZS1uYW1lCi0gICAgICAgICAgICAgICAgICAgICAgIChzZWFy
Y2gtcGF0Y2ggImljZWNhdC11c2Utb2xkZXItcmV2ZWFsLWhpZGRlbi1odG1sLnBhdGNoIikpKSkK
KyAgICAgICAgICAoc2VhcmNoLXBhdGNoICJpY2VjYXQtdXNlLW9sZGVyLXJldmVhbC1oaWRkZW4t
aHRtbC5wYXRjaCIpKQogICAgICAgICAgKG1ha2VpY2VjYXQtcGF0Y2gKLSAgICAgICAgICAobG9j
YWwtZmlsZSAoYXNzdW1lLXZhbGlkLWZpbGUtbmFtZQotICAgICAgICAgICAgICAgICAgICAgICAo
c2VhcmNoLXBhdGNoICJpY2VjYXQtbWFrZWljZWNhdC5wYXRjaCIpKSkpKQorICAgICAgICAgIChz
ZWFyY2gtcGF0Y2ggImljZWNhdC1tYWtlaWNlY2F0LnBhdGNoIikpKQogCiAgICAgKG9yaWdpbgog
ICAgICAgKG1ldGhvZCBjb21wdXRlZC1vcmlnaW4tbWV0aG9kKQpkaWZmIC0tZ2l0IGEvZ3VpeC9s
aW50LnNjbSBiL2d1aXgvbGludC5zY20KaW5kZXggM2E3ZjNiZTMyNy4uYjBhMmZiYzMyNyAxMDA2
NDQKLS0tIGEvZ3VpeC9saW50LnNjbQorKysgYi9ndWl4L2xpbnQuc2NtCkBAIC00Niw2ICs0Niw3
IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdleHAtPmFwcHJveGltYXRlLXNl
eHApKQogICAjOnVzZS1tb2R1bGUgKGd1aXggbGljZW5zZXMpCiAgICM6dXNlLW1vZHVsZSAoZ3Vp
eCByZWNvcmRzKQorICAjOnVzZS1tb2R1bGUgKGd1aXggZ2V4cCkKICAgIzp1c2UtbW9kdWxlIChn
dWl4IGdyYWZ0cykKICAgIzp1c2UtbW9kdWxlIChndWl4IHVwc3RyZWFtKQogICAjOnVzZS1tb2R1
bGUgKGd1aXggdXRpbHMpCkBAIC05MjgsNiArOTI5LDggQEAgcGF0Y2ggY291bGQgbm90IGJlIGZv
dW5kLiIKICAgICAgICAgICAgICAgICAgICAoc3RhcnRzLXdpdGgtcGFja2FnZS1uYW1lPyAoYmFz
ZW5hbWUgcGF0Y2gpKSkKICAgICAgICAgICAgICAgICAgICgoPyBvcmlnaW4/IHBhdGNoKQogICAg
ICAgICAgICAgICAgICAgIChzdGFydHMtd2l0aC1wYWNrYWdlLW5hbWU/IChvcmlnaW4tYWN0dWFs
LWZpbGUtbmFtZSBwYXRjaCkpKQorICAgICAgICAgICAgICAgICAgKCg/IGxvY2FsLWZpbGU/IHBh
dGNoKQorICAgICAgICAgICAgICAgICAgIChzdGFydHMtd2l0aC1wYWNrYWdlLW5hbWU/IChsb2Nh
bC1maWxlLW5hbWUgcGF0Y2gpKSkKICAgICAgICAgICAgICAgICAgIChfICAjZikpICAgICA7bXVz
dCBiZSBzb21lIG90aGVyIGZpbGUtbGlrZSBvYmplY3QKICAgICAgICAgICAgICAgICBwYXRjaGVz
KQogICAgICAgICAgJygpCkBAIC05NDEsMTkgKzk0NCwyMiBAQCBwYXRjaCBjb3VsZCBub3QgYmUg
Zm91bmQuIgogICAgICAobGV0ICgocHJlZml4IChzdHJpbmctbGVuZ3RoICglZGlzdHJvLWRpcmVj
dG9yeSkpKQogICAgICAgICAgICAobWFyZ2luIChzdHJpbmctbGVuZ3RoICJndWl4LTIuMC4wcmMz
LTEwMDAwLTEyMzQ1Njc4OTAvIikpCiAgICAgICAgICAgIChtYXggICAgOTkpKQorICAgICAgIChk
ZWZpbmUgKHRlc3QtcGF0Y2gtbmFtZSBmaWxlLW5hbWUpCisgICAgICAgICAoaWYgKD4gKCsgbWFy
Z2luIChpZiAoc3RyaW5nLXByZWZpeD8gKCVkaXN0cm8tZGlyZWN0b3J5KSBmaWxlLW5hbWUpCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoLSAoc3RyaW5nLWxlbmd0aCBmaWxlLW5hbWUp
IHByZWZpeCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzdHJpbmctbGVuZ3RoIGZp
bGUtbmFtZSkpKQorICAgICAgICAgICAgICAgIG1heCkKKyAgICAgICAgICAgICAobWFrZS13YXJu
aW5nCisgICAgICAgICAgICAgIHBhY2thZ2UKKyAgICAgICAgICAgICAgKEdfICJ+YTogZmlsZSBu
YW1lIGlzIHRvbyBsb25nIikKKyAgICAgICAgICAgICAgKGxpc3QgKGJhc2VuYW1lIGZpbGUtbmFt
ZSkpCisgICAgICAgICAgICAgICM6ZmllbGQgJ3BhdGNoLWZpbGUtbmFtZXMpCisgICAgICAgICAg
ICAgI2YpKQogICAgICAgIChmaWx0ZXItbWFwIChtYXRjaC1sYW1iZGEKICAgICAgICAgICAgICAg
ICAgICAgICgoPyBzdHJpbmc/IHBhdGNoKQotICAgICAgICAgICAgICAgICAgICAgIChpZiAoPiAo
KyBtYXJnaW4gKGlmIChzdHJpbmctcHJlZml4PyAoJWRpc3Ryby1kaXJlY3RvcnkpCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhdGNo
KQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgtIChzdHJpbmct
bGVuZ3RoIHBhdGNoKSBwcmVmaXgpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgKHN0cmluZy1sZW5ndGggcGF0Y2gpKSkKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgbWF4KQotICAgICAgICAgICAgICAgICAgICAgICAgICAobWFrZS13YXJuaW5nCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICBwYWNrYWdlCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAoR18gIn5hOiBmaWxlIG5hbWUgaXMgdG9vIGxvbmciKQotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgKGxpc3QgKGJhc2VuYW1lIHBhdGNoKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICM6ZmllbGQgJ3BhdGNoLWZpbGUtbmFtZXMpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICNm
KSkKKyAgICAgICAgICAgICAgICAgICAgICAodGVzdC1wYXRjaC1uYW1lIHBhdGNoKSkKKyAgICAg
ICAgICAgICAgICAgICAgICgoPyBsb2NhbC1maWxlPyBwYXRjaCkKKyAgICAgICAgICAgICAgICAg
ICAgICAodGVzdC1wYXRjaC1uYW1lIChsb2NhbC1maWxlLWFic29sdXRlLWZpbGUtbmFtZSBwYXRj
aCkpKQogICAgICAgICAgICAgICAgICAgICAgKF8gI2YpKQogICAgICAgICAgICAgICAgICAgIHBh
dGNoZXMpKSkpKQogCi0tIAoyLjMzLjAKCg==


--=-Ed3xbcWsGUAuseKcAI15
Content-Disposition: inline;
	filename*0=0006-gexp-Do-not-intern-if-the-file-is-already-in-the-sto.pat;
	filename*1=ch
Content-Type: text/x-patch;
	name="0006-gexp-Do-not-intern-if-the-file-is-already-in-the-sto.patch";
	charset="UTF-8"
Content-Transfer-Encoding: base64

RnJvbSAwZmM1NGJkZDljY2M5NzI5ZmZmNTRmNTkzNWE1NTJlNWU2MDhhMWQwIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBNYXhpbWUgRGV2b3MgPG1heGltZWRldm9zQHRlbGVuZXQuYmU+
CkRhdGU6IFNhdCwgNCBTZXAgMjAyMSAxODoxMDozMiArMDIwMApTdWJqZWN0OiBbUEFUQ0ggNi82
XSBnZXhwOiBEbyBub3QgaW50ZXJuIGlmIHRoZSBmaWxlIGlzIGFscmVhZHkgaW4gdGhlIHN0b3Jl
LgoKKiBndWl4L2dleHAuc2NtIChsb2NhbC1maWxlLWNvbXBpbGVyKTogV2hlbiB0aGUgZmlsZSBp
cyBhbHJlYWR5IGluIHRoZQogIHN0b3JlLCByZS11c2UgdGhlIGZpeGVkIG91dHB1dCBwYXRoIGlu
c3RlYWQgb2YgaW50ZXJuaW5nIHRoZSBmaWxlCiAgYWdhaW4uCi0tLQogZ3VpeC9nZXhwLnNjbSB8
IDM4ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKystLS0tLS0tCiAxIGZpbGUgY2hhbmdl
ZCwgMzEgaW5zZXJ0aW9ucygrKSwgNyBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9ndWl4L2dl
eHAuc2NtIGIvZ3VpeC9nZXhwLnNjbQppbmRleCBjNjllNGFhMjk5Li5kYTFlOTE4ODAxIDEwMDY0
NAotLS0gYS9ndWl4L2dleHAuc2NtCisrKyBiL2d1aXgvZ2V4cC5zY20KQEAgLTUzMSwxMyArNTMx
LDM3IEBAIGFwcGVhcnMuIgogKGRlZmluZS1nZXhwLWNvbXBpbGVyIChsb2NhbC1maWxlLWNvbXBp
bGVyIChmaWxlIDxsb2NhbC1maWxlPikgc3lzdGVtIHRhcmdldCkKICAgOzsgIkNvbXBpbGUiIEZJ
TEUgYnkgYWRkaW5nIGl0IHRvIHRoZSBzdG9yZS4KICAgKG1hdGNoIGZpbGUKLSAgICAoKCQgPGxv
Y2FsLWZpbGU+IGZpbGUgKD0gZm9yY2UgYWJzb2x1dGUpIG5hbWUgc2hhMjU2IHJlY3Vyc2l2ZT8g
c2VsZWN0PykKLSAgICAgOzsgQ2Fub25pY2FsaXplIEZJTEUgc28gdGhhdCBpZiBpdCdzIGEgc3lt
bGluaywgaXQgaXMgcmVzb2x2ZWQuICBGYWlsaW5nCi0gICAgIDs7IHRvIGRvIHRoYXQsIHdoZW4g
UkVDVVJTSVZFPyBpcyAjdCwgd2UgY291bGQgZW5kIHVwIGNyZWF0aW5nIGEgZGFuZ2xpbmcKLSAg
ICAgOzsgc3ltbGluayBpbiB0aGUgc3RvcmUsIGFuZCB3aGVuIFJFQ1VSU0lWRT8gaXMgI2YgJ2Fk
ZC10by1zdG9yZScgd291bGQKLSAgICAgOzsganVzdCB0aHJvdyBhbiBlcnJvciwgYm90aCBvZiB3
aGljaCBhcmUgaW5jb252ZW5pZW50LgotICAgICAoaW50ZXJuZWQtZmlsZSBhYnNvbHV0ZSBuYW1l
Ci0gICAgICAgICAgICAgICAgICAgICM6cmVjdXJzaXZlPyByZWN1cnNpdmU/ICM6c2VsZWN0PyBz
ZWxlY3Q/KSkpKQorICAgIDs7IERlbGF5IGNvbXB1dGluZyB0aGUgYWJzb2x1dGUgZmlsZSBuYW1l
IHVudGlsICdpbnRlcm4nLCBhcyB0aGlzCisgICAgOzsgbWlnaHQgYmUgYSByZWxhdGl2ZWx5IGV4
cGVuc2l2ZSBjb21wdXRhdGlvbiAoZS5nLiBpZiBzZWFyY2gtcGF0Y2gKKyAgICA7OyBpcyB1c2Vk
KSwgZXNwZWNpYWxseSBvbiBhIHNwaW5uaW5nIGRpc2suCisgICAgKCgkIDxsb2NhbC1maWxlPiBm
aWxlIGFic29sdXRlLXByb21pc2UgbmFtZSBzaGEyNTYgcmVjdXJzaXZlPyBzZWxlY3Q/KQorICAg
ICAobGV0ICgpCisgICAgICAgKGRlZmluZSAoaW50ZXJuKQorICAgICAgICAgOzsgQ2Fub25pY2Fs
aXplIEZJTEUgc28gdGhhdCBpZiBpdCdzIGEgc3ltbGluaywgaXQgaXMgcmVzb2x2ZWQuCisgICAg
ICAgICA7OyBGYWlsaW5nIHRvIGRvIHRoYXQsIHdoZW4gUkVDVVJTSVZFPyBpcyAjdCwgd2UgY291
bGQgZW5kIHVwIGNyZWF0aW5nCisgICAgICAgICA7OyBhIGRhbmdsaW5nIHN5bWxpbmsgaW4gdGhl
IHN0b3JlLCBhbmQgd2hlbiBSRUNVUlNJVkU/IGlzICNmCisgICAgICAgICA7OyAnYWRkLXRvLXN0
b3JlJyB3b3VsZCBqdXN0IHRocm93IGFuIGVycm9yLCBib3RoIG9mIHdoaWNoIGFyZQorICAgICAg
ICAgOzsgaW5jb252ZW5pZW50LgorICAgICAgICAgKGludGVybmVkLWZpbGUgKGZvcmNlIGFic29s
dXRlLXByb21pc2UpIG5hbWUKKyAgICAgICAgICAgICAgICAgICAgICAgICM6cmVjdXJzaXZlPyBy
ZWN1cnNpdmU/ICM6c2VsZWN0PyBzZWxlY3Q/KSkKKyAgICAgICAoaWYgc2hhMjU2CisgICAgICAg
ICAgIChsZXQgKChwYXRoIChmaXhlZC1vdXRwdXQtcGF0aCBuYW1lIHNoYTI1NiAjOnJlY3Vyc2l2
ZT8gcmVjdXJzaXZlPykpKQorICAgICAgICAgICAgIDs7IElmIHRoZSBoYXNoIGlzIGtub3duIGlu
IGFkdmFuY2UgYW5kIHRoZSBzdG9yZSBhbHJlYWR5IGhhcyB0aGUKKyAgICAgICAgICAgICA7OyBp
dGVtLCB0aGVyZSBpcyBubyBuZWVkIHRvIGludGVybiB0aGUgZmlsZS4KKyAgICAgICAgICAgICAo
aWYgKGZpbGUtZXhpc3RzPyBwYXRoKQorICAgICAgICAgICAgICAgICAobWJlZ2luICVzdG9yZS1t
b25hZAorICAgICAgICAgICAgICAgICAgIDs7IFRlbGwgdGhlIEdDIHRoYXQgUEFUSCB3aWxsIGJl
IHVzZWQsIHN1Y2ggdGhhdCBpdCB3b24ndAorICAgICAgICAgICAgICAgICAgIDs7IGJlIGRlbGV0
ZWQuCisgICAgICAgICAgICAgICAgICAgKChzdG9yZS1saWZ0IGFkZC10ZW1wLXJvb3QpIHBhdGgp
CisgICAgICAgICAgICAgICAgICAgOzsgVGhlIEdDIGNvdWxkIGhhdmUgZGVsZXRlZCB0aGUgaXRl
bSBiZWZvcmUgYWRkLXRlbXAtcm9vdAorICAgICAgICAgICAgICAgICAgIDs7IGNvbXBsZXRlZCwg
c28gY2hlY2sgYWdhaW4gaWYgUEFUSCBleGlzdHMuCisgICAgICAgICAgICAgICAgICAgKGlmIChm
aWxlLWV4aXN0cz8gcGF0aCkKKyAgICAgICAgICAgICAgICAgICAgICAgKHJldHVybiBwYXRoKQor
ICAgICAgICAgICAgICAgICAgICAgICA7OyBJZiBpdCBoYXMgYmVlbiByZW1vdmVkLCBmYWxsLWJh
Y2sgaW50ZXJuaW5nLgorICAgICAgICAgICAgICAgICAgICAgICAoaW50ZXJuKSkpCisgICAgICAg
ICAgICAgICAgIDs7IElmIFBBVEggZG9lcyBub3QgeWV0IGV4aXN0LCBmYWxsIGJhY2sgdG8gaW50
ZXJuaW5nLgorICAgICAgICAgICAgICAgICAoaW50ZXJuKSkpCisgICAgICAgICAgIChpbnRlcm4p
KSkpKSkKIAogKGRlZmluZS1yZWNvcmQtdHlwZSA8cGxhaW4tZmlsZT4KICAgKCVwbGFpbi1maWxl
IG5hbWUgY29udGVudCByZWZlcmVuY2VzKQotLSAKMi4zMy4wCgo=


--=-Ed3xbcWsGUAuseKcAI15--

--=-ZXdwdSIZm75bAbTlaqKD
Content-Type: application/pgp-signature; name="signature.asc"
Content-Description: This is a digitally signed message part
Content-Transfer-Encoding: 7bit

-----BEGIN PGP SIGNATURE-----

iI0EABYKADUWIQTB8z7iDFKP233XAR9J4+4iGRcl7gUCYTPiVhccbWF4aW1lZGV2
b3NAdGVsZW5ldC5iZQAKCRBJ4+4iGRcl7mUPAP9Tp6RrxYBG01bX5pGGZjhkUVxB
VlrLlALonb/bUSqfwgEA2ICKcwCwWq6gd7PZCTO2sGhtcgFlksT1MzyoNH+KHw0=
=D7ID
-----END PGP SIGNATURE-----

--=-ZXdwdSIZm75bAbTlaqKD--





Acknowledgement sent to Maxime Devos <maximedevos@HIDDEN>:
New bug report received and forwarded. Copy sent to guix-patches@HIDDEN. Full text available.
Report forwarded to guix-patches@HIDDEN:
bug#50384; Package guix-patches. Full text available.
Please note: This is a static page, with minimal formatting, updated once a day.
Click here to see this page with the latest information and nicer formatting.
Last modified: Tue, 21 Sep 2021 17:00:02 UTC

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