From mboxrd@z Thu Jan 1 00:00:00 1970 From: Deck Pickard Subject: Re: [PATCH] Core sanity and taking build options from environment. Date: Sun, 30 Nov 2014 18:17:36 +0100 Message-ID: References: <87vblzyoun.fsf@inria.fr> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary=001a11c266d69d7cf5050916aba0 Return-path: Received: from eggs.gnu.org ([2001:4830:134:3::10]:41918) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Xv87v-0001as-Se for guix-devel@gnu.org; Sun, 30 Nov 2014 12:17:41 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1Xv87u-00067K-Cu for guix-devel@gnu.org; Sun, 30 Nov 2014 12:17:39 -0500 In-Reply-To: <87vblzyoun.fsf@inria.fr> List-Id: "Development of GNU Guix and the GNU System distribution." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: guix-devel-bounces+gcggd-guix-devel=m.gmane.org@gnu.org Sender: guix-devel-bounces+gcggd-guix-devel=m.gmane.org@gnu.org To: =?UTF-8?Q?Ludovic_Court=C3=A8s?= Cc: guix-devel@gnu.org --001a11c266d69d7cf5050916aba0 Content-Type: multipart/alternative; boundary=001a11c266d69d7cf0050916ab9e --001a11c266d69d7cf0050916ab9e Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: quoted-printable On 28 Nov 2014 22:52, "Ludovic Court=C3=A8s" wrote: > > Deck Pickard skribis: > > > From 3693753aefc27b5a68a2b762feeebc41320e79ef Mon Sep 17 00:00:00 2001 > > From: nebuli > > Date: Wed, 26 Nov 2014 19:51:37 +0100 > > Subject: [PATCH 1/2] guix: Default to daemon's default --cores setting of 1. > > I think most of the time one would prefer to use all the available cores > when building. WDYT? > Perhaps for one-off 15 minutes worth of compiles it's a OK, but not for hours of work. And you are creating more confusion by having different defaults from guix-daemon. Lastly, some unsuspecting newb may still stumble into N^2 trap with '-M '... ouch, 36 threads competing for silicon on a 6 core box... > > From fa8738ff2cf48886c9ef8fbacfa806f547f3c3c8 Mon Sep 17 00:00:00 2001 > > From: nebuli > > Date: Thu, 27 Nov 2014 23:36:29 +0100 > > Subject: [PATCH 2/2] guix: scripts: Add handling of options from GUIX_BUILD > > environmental variable. > > [...] > > > --- a/guix/scripts/build.scm > > +++ b/guix/scripts/build.scm > > @@ -401,7 +401,13 @@ arguments with packages that use the specified source." > > (define (guix-build . args) > > (define (parse-options) > > ;; Return the alist of option values. > > - (args-fold* args %options > > + (args-fold* (append args > > + (args-from-env "GUIX_BUILD" > > + (lambda (var opts) > > + (format (current-error-port) > > + (_ "guix build: ~a: ~a~%") > > + var opts)))) > > + %options > > This sounds like a good idea. > > Some suggestions that come to mind: > > =E2=80=A2 What about $GUIX_BUILD_OPTIONS? (grep uses $GREP_OPTIONS, fo= r > reference.) > > =E2=80=A2 What about factorizing the above =E2=80=98args-from-env=E2=80= =99 call like this: > > (define (environment-build-options) > "Return additional build options passed as environment variables." > (args-from-env "GUIX_BUILD_OPTIONS")) > > This procedure would go in (guix ui). > > =E2=80=A2 I would leave out the second argument to =E2=80=98args-from-e= nv=E2=80=99. I don=E2=80=99t > think it would be convenient to have that extra line printed every > time. > > > +(define (args-from-env var . rest) > > + "Retrieve value of environment variable denoted by string VAR in the form > > +of a list of strings ('char-set:graphic' tokens) suitable for consumption by > > +the fold-arg family of functions. If VAR is defined, call car of a non-null > > s/fold-arg family of functions/'args-fold'/ > > > +REST on the VAR and result, otherwise return an empty list." > > + (let ((env-opts (getenv variable))) > > + (if env-opts > > + (let ((opts (string-tokenize env-opts char-set:graphic))) > > + (and (not (null? rest)) > > + (apply (car rest) > > + (list variable opts))) > > + opts) > > + '()))) > > Please write it like this: > > (define (arguments-from-environment-variable variable) > (let ((env (getenv variable))) > ...)) > > Could you also update guix.texi, near the end of =E2=80=9CInvoking guix b= uild=E2=80=9D? > > WDYT? Could you send an updated patch? > DONE, Drp --=20 (or ((,\ (x) `(,x x)) '(,\ (x) `(,x x))) (smth (that 'like))) --001a11c266d69d7cf0050916ab9e Content-Type: text/html; charset=UTF-8 Content-Transfer-Encoding: quoted-printable

On 28 Nov 2014 22:52, "Ludovic Court=C3=A8s" <<= a href=3D"mailto:ludo@gnu.org">ludo@gnu.org> wrote:
>
> Deck Pickard <deck.r.pi= ckard@gmail.com> skribis:
>
> > From 3693753aefc27b5a68a2b762feeebc41320e79ef Mon Sep 17 00:00:00= 2001
> > From: nebuli <nebu@kipple>
> > Date: Wed, 26 Nov 2014 19:51:37 +0100
> > Subject: [PATCH 1/2] guix: Default to daemon's default --core= s setting of 1.
>
> I think most of the time one would prefer to use all the available cor= es
> when building.=C2=A0 WDYT?
>

Perhaps for one-off 15 minutes worth of compiles it's a = OK, but not for hours of work. And you are creating more confusion by havin= g different defaults from guix-daemon. Lastly, some unsuspecting newb=C2=A0= =C2=A0 may still stumble into N^2 trap with '-M <my number of shiny = cores>'...=C2=A0 ouch, 36 threads competing for silicon on a 6 core = box...

> > From fa8738ff2cf48886c9ef8fbacfa806f547f3c3c8 Mon = Sep 17 00:00:00 2001
> > From: nebuli <nebu@kipple>
> > Date: Thu, 27 Nov 2014 23:36:29 +0100
> > Subject: [PATCH 2/2] guix: scripts: Add handling of options from = GUIX_BUILD
> >=C2=A0 environmental variable.
>
> [...]
>
> > --- a/guix/scripts/build.scm
> > +++ b/guix/scripts/build.scm
> > @@ -401,7 +401,13 @@ arguments with packages that use the specifi= ed source."
> >=C2=A0 (define (guix-build . args)
> >=C2=A0 =C2=A0 (define (parse-options)
> >=C2=A0 =C2=A0 =C2=A0 ;; Return the alist of option values.
> > -=C2=A0 =C2=A0 (args-fold* args %options
> > +=C2=A0 =C2=A0 (args-fold* (append args
> > +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0 (args-from-env "GUIX_BUILD"
> > +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0(lambda (var opts)
> > +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0(format (current-error-port)
> > +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0(_ "guix build: ~a: ~a~%")<= br> > > +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0var opts))))
> > +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 %options=
>
> This sounds like a good idea.
>
> Some suggestions that come to mind:
>
> =C2=A0 =E2=80=A2 What about $GUIX_BUILD_OPTIONS?=C2=A0 (grep uses $GRE= P_OPTIONS, for
> =C2=A0 =C2=A0 reference.)
>
> =C2=A0 =E2=80=A2 What about factorizing the above =E2=80=98args-from-e= nv=E2=80=99 call like this:
>
> =C2=A0 =C2=A0 (define (environment-build-options)
> =C2=A0 =C2=A0 =C2=A0 "Return additional build options passed as e= nvironment variables."
> =C2=A0 =C2=A0 =C2=A0 (args-from-env "GUIX_BUILD_OPTIONS")) >
> =C2=A0 =C2=A0 This procedure would go in (guix ui).
>
> =C2=A0 =E2=80=A2 I would leave out the second argument to =E2=80=98arg= s-from-env=E2=80=99.=C2=A0 I don=E2=80=99t
> =C2=A0 =C2=A0 think it would be convenient to have that extra line pri= nted every
> =C2=A0 =C2=A0 time.
>
> > +(define (args-from-env var . rest)
> > +=C2=A0 "Retrieve value of environment variable denoted by s= tring VAR in the form
> > +of a list of strings ('char-set:graphic' tokens) suitabl= e for consumption by
> > +the fold-arg family of functions.=C2=A0 If VAR is defined, call = car of a non-null
>
> s/fold-arg family of functions/'args-fold'/
>
> > +REST on the VAR and result, otherwise return an empty list."= ;
> > +=C2=A0 (let ((env-opts (getenv variable)))
> > +=C2=A0 =C2=A0 (if env-opts
> > +=C2=A0 =C2=A0 =C2=A0 =C2=A0 (let ((opts (string-tokenize env-opt= s char-set:graphic)))
> > +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 (and (not (null? rest))
> > +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0(apply (c= ar rest)
> > +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 (list variable opts)))
> > +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 opts)
> > +=C2=A0 =C2=A0 =C2=A0 =C2=A0 '())))
>
> Please write it like this:
>
> =C2=A0 (define (arguments-from-environment-variable variable)
> =C2=A0 =C2=A0 (let ((env (getenv variable)))
> =C2=A0 =C2=A0 =C2=A0 ...))
>
> Could you also update guix.texi, near the end of =E2=80=9CInvoking gui= x build=E2=80=9D?
>
> WDYT?=C2=A0 Could you send an updated patch?
>

DONE,
Drp
--
(or ((,\ (x) `(,x x)) '(,\ (x) `(,x x))) (smth (that 'like)))

--001a11c266d69d7cf0050916ab9e-- --001a11c266d69d7cf5050916aba0 Content-Type: application/octet-stream; name="0001-guix-scripts-Add-GUIX_BUILD_OPTIONS-environment-hand.patch" Content-Disposition: attachment; filename="0001-guix-scripts-Add-GUIX_BUILD_OPTIONS-environment-hand.patch" Content-Transfer-Encoding: base64 X-Attachment-Id: 1486217897703374848-local0 RnJvbSBhNGVjMDJlMDlmMmJjMWQ0YWQzM2U4MmFjOTA1MjQzOWJkZWNlNmQwIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBuZWJ1bGkgPG5lYnVAa2lwcGxlPgpEYXRlOiBTdW4sIDMwIE5v diAyMDE0IDE3OjQ3OjIyICswMTAwClN1YmplY3Q6IFtQQVRDSF0gZ3VpeDogc2NyaXB0czogQWRk IEdVSVhfQlVJTERfT1BUSU9OUyBlbnZpcm9ubWVudCBoYW5kbGluZy4KCiogZG9jL2d1aXgudGV4 aTogTWVudGlvbiBpbiB0aGUgJ0ludm9raW5nIGd1aXggYnVpbGQnIHNlY3Rpb24uCiogZ3VpeC9z Y3JpcHRzL2FyY2hpdmUuc2NtOiAoYXBwZW5kIGFyZ3MgKGVudmlyb25tZW50LWJ1aWxkLW9wdGlv bnMpCiogZ3VpeC9zY3JpcHRzL2J1aWxkLnNjbTogRGl0dG8uCiogZ3VpeC9zY3JpcHRzL2Vudmly b25tZW50LnNjbTogRGl0dG8uCiogZ3VpeC9zY3JpcHRzL3BhY2thZ2Uuc2NtOiBEaXR0by4KKiBn dWl4L3NjcmlwdHMvc3lzdGVtLnNjbTogRGl0dG8uCiogZ3VpeC91aS5zY20gKGVudmlyb25tZW50 LWJ1aWxkLW9wdGlvbnMpOiBOZXcgZnVuY3Rpb24uCiogZ3VpeC91dGlscy5zY20gKGFyZ3VtZW50 cy1mcm9tLWVudmlyb25tZW50LXZhcmlhYmxlKTogTmV3IGZ1bmN0aW9uLgotLS0KIGRvYy9ndWl4 LnRleGkgICAgICAgICAgICAgICAgfCAxMiArKysrKysrKysrKysKIGd1aXgvc2NyaXB0cy9hcmNo aXZlLnNjbSAgICAgfCAgMyArKy0KIGd1aXgvc2NyaXB0cy9idWlsZC5zY20gICAgICAgfCAgMyAr Ky0KIGd1aXgvc2NyaXB0cy9lbnZpcm9ubWVudC5zY20gfCAgMyArKy0KIGd1aXgvc2NyaXB0cy9w YWNrYWdlLnNjbSAgICAgfCAgMyArKy0KIGd1aXgvc2NyaXB0cy9zeXN0ZW0uc2NtICAgICAgfCAg MyArKy0KIGd1aXgvdWkuc2NtICAgICAgICAgICAgICAgICAgfCAgNSArKysrKwogZ3VpeC91dGls cy5zY20gICAgICAgICAgICAgICB8IDEwICsrKysrKysrKysKIDggZmlsZXMgY2hhbmdlZCwgMzcg aW5zZXJ0aW9ucygrKSwgNSBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9kb2MvZ3VpeC50ZXhp IGIvZG9jL2d1aXgudGV4aQppbmRleCA1M2JmYjI5Li5hYmZkYzYxIDEwMDY0NAotLS0gYS9kb2Mv Z3VpeC50ZXhpCisrKyBiL2RvYy9ndWl4LnRleGkKQEAgLTI3ODEsNiArMjc4MSwxOCBAQCB0aGUg QGNvZGV7cGFja2FnZS1kZXJpdmF0aW9ufSBwcm9jZWR1cmUgb2YgdGhlIEBjb2RleyhndWl4IHBh Y2thZ2VzKX0KIG1vZHVsZSwgYW5kIHRvIHRoZSBAY29kZXtidWlsZC1kZXJpdmF0aW9uc30gcHJv Y2VkdXJlIG9mIHRoZSBAY29kZXsoZ3VpeAogc3RvcmUpfSBtb2R1bGUuCiAKK0JlY2F1c2UgQGNv bW1hbmR7Z3VpeH0sIGFzIGFuIFJQQyBjbGllbnQgdG8gQGNvbW1hbmR7Z3VpeC1kYWVtb259Ciso QHB4cmVme0ludm9raW5nIGd1aXgtZGFlbW9ufSksIHVzZXMgaXRzIG93biBzZXQgb2YgZGVmYXVs dCBidWlsZCBvcHRpb25zCitvbiBlYWNoIGludm9jYXRpb24sIGl0IGlzIHVzZWZ1bCB0byBleHBv cnQgQGNvZGV7R1VJWF9CVUlMRF9PUFRJT05TfQorZW52aXJvbm1lbnRhbCB2YXJpYWJsZSwgaW4g dGhlIGZvcm0gb2YgdXN1YWwgY29tbWFuZC1saW5lIGFyZ3VtZW50cyBzeW50YXg6CisKK0BleGFt cGxlCiskIGV4cG9ydCBHVUlYX0JVSUxEX09QVElPTlM9Ii0tbm8tc3Vic3RpdHV0ZXMgLWMgMiAt TCAvZm9vL2JhciIKK0BlbmQgZXhhbXBsZQorCitUaG9zZSBhcmd1bWVudHMgd2lsbCBiZSBhcHBl bmRlZCB0byB0aGUgb25lcyBwYXNzZWQgdmlhIGNvbW1hbmQtbGluZSB0byBhbnkKK2d1aXggY29t bWFuZCBjYXBhYmxlIG9mIGhhbmRsaW5nIGJ1aWxkIG9wdGlvbnMuCisKIEBub2RlIEludm9raW5n IGd1aXggZG93bmxvYWQKIEBzZWN0aW9uIEludm9raW5nIEBjb21tYW5ke2d1aXggZG93bmxvYWR9 CiAKZGlmZiAtLWdpdCBhL2d1aXgvc2NyaXB0cy9hcmNoaXZlLnNjbSBiL2d1aXgvc2NyaXB0cy9h cmNoaXZlLnNjbQppbmRleCA4NDkwNGUyLi4yOWEzYWQxIDEwMDY0NAotLS0gYS9ndWl4L3Njcmlw dHMvYXJjaGl2ZS5zY20KKysrIGIvZ3VpeC9zY3JpcHRzL2FyY2hpdmUuc2NtCkBAIC0yOTMsNyAr MjkzLDggQEAgdGhlIGlucHV0IHBvcnQuIgogKGRlZmluZSAoZ3VpeC1hcmNoaXZlIC4gYXJncykK ICAgKGRlZmluZSAocGFyc2Utb3B0aW9ucykKICAgICA7OyBSZXR1cm4gdGhlIGFsaXN0IG9mIG9w dGlvbiB2YWx1ZXMuCi0gICAgKGFyZ3MtZm9sZCogYXJncyAlb3B0aW9ucworICAgIChhcmdzLWZv bGQqIChhcHBlbmQgYXJncyAoZW52aXJvbm1lbnQtYnVpbGQtb3B0aW9ucykpCisgICAgICAgICAg ICAgICAgJW9wdGlvbnMKICAgICAgICAgICAgICAgICAobGFtYmRhIChvcHQgbmFtZSBhcmcgcmVz dWx0KQogICAgICAgICAgICAgICAgICAgKGxlYXZlIChfICJ+QTogdW5yZWNvZ25pemVkIG9wdGlv bn4lIikgbmFtZSkpCiAgICAgICAgICAgICAgICAgKGxhbWJkYSAoYXJnIHJlc3VsdCkKZGlmZiAt LWdpdCBhL2d1aXgvc2NyaXB0cy9idWlsZC5zY20gYi9ndWl4L3NjcmlwdHMvYnVpbGQuc2NtCmlu ZGV4IGI0YWEzM2IuLjc2YTc0M2YgMTAwNjQ0Ci0tLSBhL2d1aXgvc2NyaXB0cy9idWlsZC5zY20K KysrIGIvZ3VpeC9zY3JpcHRzL2J1aWxkLnNjbQpAQCAtNDAxLDcgKzQwMSw4IEBAIGFyZ3VtZW50 cyB3aXRoIHBhY2thZ2VzIHRoYXQgdXNlIHRoZSBzcGVjaWZpZWQgc291cmNlLiIKIChkZWZpbmUg KGd1aXgtYnVpbGQgLiBhcmdzKQogICAoZGVmaW5lIChwYXJzZS1vcHRpb25zKQogICAgIDs7IFJl dHVybiB0aGUgYWxpc3Qgb2Ygb3B0aW9uIHZhbHVlcy4KLSAgICAoYXJncy1mb2xkKiBhcmdzICVv cHRpb25zCisgICAgKGFyZ3MtZm9sZCogKGFwcGVuZCBhcmdzIChlbnZpcm9ubWVudC1idWlsZC1v cHRpb25zKSkKKyAgICAgICAgICAgICAgICAlb3B0aW9ucwogICAgICAgICAgICAgICAgIChsYW1i ZGEgKG9wdCBuYW1lIGFyZyByZXN1bHQpCiAgICAgICAgICAgICAgICAgICAobGVhdmUgKF8gIn5B OiB1bnJlY29nbml6ZWQgb3B0aW9ufiUiKSBuYW1lKSkKICAgICAgICAgICAgICAgICAobGFtYmRh IChhcmcgcmVzdWx0KQpkaWZmIC0tZ2l0IGEvZ3VpeC9zY3JpcHRzL2Vudmlyb25tZW50LnNjbSBi L2d1aXgvc2NyaXB0cy9lbnZpcm9ubWVudC5zY20KaW5kZXggODFiYWQ5Ni4uYTMwOWRmYSAxMDA2 NDQKLS0tIGEvZ3VpeC9zY3JpcHRzL2Vudmlyb25tZW50LnNjbQorKysgYi9ndWl4L3NjcmlwdHMv ZW52aXJvbm1lbnQuc2NtCkBAIC0yMTMsNyArMjEzLDggQEAgcGFja2FnZXMuIgogOzsgRW50cnkg cG9pbnQuCiAoZGVmaW5lIChndWl4LWVudmlyb25tZW50IC4gYXJncykKICAgKGRlZmluZSAocGFy c2Utb3B0aW9ucykKLSAgICAoYXJncy1mb2xkKiBhcmdzICVvcHRpb25zCisgICAgKGFyZ3MtZm9s ZCogKGFwcGVuZCBhcmdzIChlbnZpcm9ubWVudC1idWlsZC1vcHRpb25zKSkKKyAgICAgICAgICAg ICAgICAlb3B0aW9ucwogICAgICAgICAgICAgICAgIChsYW1iZGEgKG9wdCBuYW1lIGFyZyByZXN1 bHQpCiAgICAgICAgICAgICAgICAgICAobGVhdmUgKF8gIn5BOiB1bnJlY29nbml6ZWQgb3B0aW9u fiUiKSBuYW1lKSkKICAgICAgICAgICAgICAgICAobGFtYmRhIChhcmcgcmVzdWx0KQpkaWZmIC0t Z2l0IGEvZ3VpeC9zY3JpcHRzL3BhY2thZ2Uuc2NtIGIvZ3VpeC9zY3JpcHRzL3BhY2thZ2Uuc2Nt CmluZGV4IDNhNzIwNTMuLjlmZjRkMTcgMTAwNjQ0Ci0tLSBhL2d1aXgvc2NyaXB0cy9wYWNrYWdl LnNjbQorKysgYi9ndWl4L3NjcmlwdHMvcGFja2FnZS5zY20KQEAgLTY2OCw3ICs2NjgsOCBAQCBy ZW1vdmVkIGZyb20gTUFOSUZFU1QuIgogKGRlZmluZSAoZ3VpeC1wYWNrYWdlIC4gYXJncykKICAg KGRlZmluZSAocGFyc2Utb3B0aW9ucykKICAgICA7OyBSZXR1cm4gdGhlIGFsaXN0IG9mIG9wdGlv biB2YWx1ZXMuCi0gICAgKGFyZ3MtZm9sZCogYXJncyAlb3B0aW9ucworICAgIChhcmdzLWZvbGQq IChhcHBlbmQgYXJncyAoZW52aXJvbm1lbnQtYnVpbGQtb3B0aW9ucykpCisgICAgICAgICAgICAg ICAgJW9wdGlvbnMKICAgICAgICAgICAgICAgICAobGFtYmRhIChvcHQgbmFtZSBhcmcgcmVzdWx0 IGFyZy1oYW5kbGVyKQogICAgICAgICAgICAgICAgICAgKGxlYXZlIChfICJ+QTogdW5yZWNvZ25p emVkIG9wdGlvbn4lIikgbmFtZSkpCiAgICAgICAgICAgICAgICAgKGxhbWJkYSAoYXJnIHJlc3Vs dCBhcmctaGFuZGxlcikKZGlmZiAtLWdpdCBhL2d1aXgvc2NyaXB0cy9zeXN0ZW0uc2NtIGIvZ3Vp eC9zY3JpcHRzL3N5c3RlbS5zY20KaW5kZXggMzk4YTVhMy4uOGVhNzdlNCAxMDA2NDQKLS0tIGEv Z3VpeC9zY3JpcHRzL3N5c3RlbS5zY20KKysrIGIvZ3VpeC9zY3JpcHRzL3N5c3RlbS5zY20KQEAg LTQ2Nyw3ICs0NjcsOCBAQCBCdWlsZCB0aGUgb3BlcmF0aW5nIHN5c3RlbSBkZWNsYXJlZCBpbiBG SUxFIGFjY29yZGluZyB0byBBQ1RJT04uXG4iKSkKIChkZWZpbmUgKGd1aXgtc3lzdGVtIC4gYXJn cykKICAgKGRlZmluZSAocGFyc2Utb3B0aW9ucykKICAgICA7OyBSZXR1cm4gdGhlIGFsaXN0IG9m IG9wdGlvbiB2YWx1ZXMuCi0gICAgKGFyZ3MtZm9sZCogYXJncyAlb3B0aW9ucworICAgIChhcmdz LWZvbGQqIChhcHBlbmQgYXJncyAoZW52aXJvbm1lbnQtYnVpbGQtb3B0aW9ucykpCisgICAgICAg ICAgICAgICAgJW9wdGlvbnMKICAgICAgICAgICAgICAgICAobGFtYmRhIChvcHQgbmFtZSBhcmcg cmVzdWx0KQogICAgICAgICAgICAgICAgICAgKGxlYXZlIChfICJ+QTogdW5yZWNvZ25pemVkIG9w dGlvbn4lIikgbmFtZSkpCiAgICAgICAgICAgICAgICAgKGxhbWJkYSAoYXJnIHJlc3VsdCkKZGlm ZiAtLWdpdCBhL2d1aXgvdWkuc2NtIGIvZ3VpeC91aS5zY20KaW5kZXggNjliMDczZC4uYzc3ZTA0 MSAxMDA2NDQKLS0tIGEvZ3VpeC91aS5zY20KKysrIGIvZ3VpeC91aS5zY20KQEAgLTY0LDYgKzY0 LDcgQEAKICAgICAgICAgICAgIHN0cmluZy0+Z2VuZXJhdGlvbnMKICAgICAgICAgICAgIHN0cmlu Zy0+ZHVyYXRpb24KICAgICAgICAgICAgIGFyZ3MtZm9sZCoKKyAgICAgICAgICAgIGVudmlyb25t ZW50LWJ1aWxkLW9wdGlvbnMKICAgICAgICAgICAgIHJ1bi1ndWl4LWNvbW1hbmQKICAgICAgICAg ICAgIHByb2dyYW0tbmFtZQogICAgICAgICAgICAgZ3VpeC13YXJuaW5nLXBvcnQKQEAgLTcxMiw2 ICs3MTMsMTAgQEAgcmVwb3J0aW5nLiIKICAgICAgIChsZWF2ZSAoXyAiaW52YWxpZCBhcmd1bWVu dDogfmF+JSIpCiAgICAgICAgICAgICAgKGFwcGx5IGZvcm1hdCAjZiBtc2cgYXJncykpKSkpCiAK KyhkZWZpbmUgKGVudmlyb25tZW50LWJ1aWxkLW9wdGlvbnMpCisgICJSZXR1cm4gYWRkaXRpb25h bCBidWlsZCBvcHRpb25zIHBhc3NlZCBhcyBlbnZpcm9ubWVudCB2YXJpYWJsZXMuIgorICAoYXJn dW1lbnRzLWZyb20tZW52aXJvbm1lbnQtdmFyaWFibGUgIkdVSVhfQlVJTERfT1BUSU9OUyIpKQor CiAoZGVmaW5lIChzaG93LWd1aXgtdXNhZ2UpCiAgIChmb3JtYXQgKGN1cnJlbnQtZXJyb3ItcG9y dCkKICAgICAgICAgICAoXyAiVHJ5IGBndWl4IC0taGVscCcgZm9yIG1vcmUgaW5mb3JtYXRpb24u fiUiKSkKZGlmZiAtLWdpdCBhL2d1aXgvdXRpbHMuc2NtIGIvZ3VpeC91dGlscy5zY20KaW5kZXgg OWI4MDJiNi4uZDBkMmU4YSAxMDA2NDQKLS0tIGEvZ3VpeC91dGlscy5zY20KKysrIGIvZ3VpeC91 dGlscy5zY20KQEAgLTcyLDYgKzcyLDcgQEAKICAgICAgICAgICAgIHBhY2thZ2UtbmFtZS0+bmFt ZSt2ZXJzaW9uCiAgICAgICAgICAgICBzdHJpbmctdG9rZW5pemUqCiAgICAgICAgICAgICBzdHJp bmctcmVwbGFjZS1zdWJzdHJpbmcKKyAgICAgICAgICAgIGFyZ3VtZW50cy1mcm9tLWVudmlyb25t ZW50LXZhcmlhYmxlCiAgICAgICAgICAgICBmaWxlLWV4dGVuc2lvbgogICAgICAgICAgICAgZmls ZS1zYW5zLWV4dGVuc2lvbgogICAgICAgICAgICAgY2FsbC13aXRoLXRlbXBvcmFyeS1vdXRwdXQt ZmlsZQpAQCAtNjI3LDYgKzYyOCwxNSBAQCBSRVBMQUNFTUVOVC4iCiAgICAgICAgICAgICAgICAg ICAgICAgIChzdWJzdHJpbmcgc3RyIHN0YXJ0IGluZGV4KQogICAgICAgICAgICAgICAgICAgICAg ICBwaWVjZXMpKSkpKSkpKQogCisoZGVmaW5lIChhcmd1bWVudHMtZnJvbS1lbnZpcm9ubWVudC12 YXJpYWJsZSB2YXJpYWJsZSkKKyAgIlJldHJpZXZlIHZhbHVlIG9mIGVudmlyb25tZW50IHZhcmlh YmxlIGRlbm90ZWQgYnkgc3RyaW5nIFZBUklBQkxFIGluIHRoZQorZm9ybSBvZiBhIGxpc3Qgb2Yg c3RyaW5ncyAoYGNoYXItc2V0OmdyYXBoaWMnIHRva2Vucykgc3VpdGFibGUgZm9yIGNvbnN1bXB0 aW9uCitieSBgYXJncy1mb2xkJywgaWYgVkFSSUFCTEUgaXMgZGVmaW5lZCwgb3RoZXJ3aXNlIHJl dHVybiBhbiBlbXB0eSBsaXN0LiIKKyAgKGxldCAoKGVudiAoZ2V0ZW52IHZhcmlhYmxlKSkpCisg ICAgKGlmIGVudgorICAgICAgICAoc3RyaW5nLXRva2VuaXplIGVudiBjaGFyLXNldDpncmFwaGlj KQorICAgICAgICAnKCkpKSkKKwogKGRlZmluZSAoY2FsbC13aXRoLXRlbXBvcmFyeS1vdXRwdXQt ZmlsZSBwcm9jKQogICAiQ2FsbCBQUk9DIHdpdGggYSBuYW1lIG9mIGEgdGVtcG9yYXJ5IGZpbGUg YW5kIG9wZW4gb3V0cHV0IHBvcnQgdG8gdGhhdAogZmlsZTsgY2xvc2UgdGhlIGZpbGUgYW5kIGRl bGV0ZSBpdCB3aGVuIGxlYXZpbmcgdGhlIGR5bmFtaWMgZXh0ZW50IG9mIHRoaXMKLS0gCjIuMS4y Cgo= --001a11c266d69d7cf5050916aba0--