From mboxrd@z Thu Jan 1 00:00:00 1970 From: Federico Beffa Subject: Re: [PATCH 3/5] build: Add 'emacs-build-system' Date: Thu, 25 Jun 2015 20:36:39 +0200 Message-ID: References: <87twu06bhk.fsf@gmail.com> <87si9jsjyj.fsf@gmail.com> <87mvzqr623.fsf@gmail.com> <87mvzoge6x.fsf@gnu.org> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary=485b397dd23172a07805195be745 Return-path: Received: from eggs.gnu.org ([2001:4830:134:3::10]:58689) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Z8C0w-0006UK-Ie for guix-devel@gnu.org; Thu, 25 Jun 2015 14:36:45 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1Z8C0u-000738-02 for guix-devel@gnu.org; Thu, 25 Jun 2015 14:36:42 -0400 In-Reply-To: <87mvzoge6x.fsf@gnu.org> 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 , Alex Kost --485b397dd23172a07805195be745 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: quoted-printable Thanks for the review! I've done the suggested modifications apart from the comments below. On Thu, Jun 25, 2015 at 2:33 PM, Ludovic Court=C3=A8s wrote: > Federico Beffa skribis: >> +(define-syntax lambda*-with-emacs-env >> + (lambda (x) >> + "Creates a 'lambda*' expression where the following variables are b= ound to >> +the values expected by the 'emacs-build-system': 'emacs', 'out', 'name-= ver', >> +'name', 'elpa-name-ver', 'elpa-name', 'info-dir', 'el-dir'. The first >> +parameter of the syntax must be a list of symbols which become key para= meters >> +of the procedure. 'inputs' and 'outputs' are automatically added to th= em. >> +The remaining parameters become the body of the procedure." > > Interesting trick. > >> + (syntax-case x () >> + ((k (p ...) e1 e2 ...) >> + (with-syntax (((outputs inputs emacs out name-ver name elpa-name= -ver >> + elpa-name info-dir el-dir) >> + (map (cut datum->syntax #'k <>) >> + '(outputs inputs emacs out name-ver name >> + elpa-name-ver elpa-name >> + info-dir el-dir)))) >> + #'(lambda* (#:key outputs inputs p ... #:allow-other-keys) >> + (let* ((emacs (string-append (assoc-ref inputs "emacs") >> + "/bin/emacs")) >> + (out (assoc-ref outputs "out")) >> + (name-ver (store-dir->name-version out)) >> + (name (package-name->name+version name-ver)) >> + (elpa-name-ver (store-dir->elpa-name-version out)) >> + (elpa-name (package-name->name+version elpa-name-ve= r)) >> + (info-dir (string-append out "/share/info/" name-ve= r)) >> + (el-dir (string-append out %install-suffix >> + "/" elpa-name-ver))) >> + e1 e2 ...))))))) > > The problem is that this forcefully introduces bindings in an opaque way > (that is, regardless of whether the =E2=80=98outputs=E2=80=99 binding app= ears in the > source, there=E2=80=99s an =E2=80=98outputs=E2=80=99 binding that magical= ly appears; this is > =E2=80=9Cunhygienic=E2=80=9D or =E2=80=9Cnon referentially transparent,= =E2=80=9D or just =E2=80=9Cbad=E2=80=9D. ;-)) > > Ideally, the identifiers that appear in the macro expansion should > either be in the source, or be unique (compiler-generated.) I was so sure that you would say so, that I did a copy of the file before removing the 'let's and introducing the syntax. If this would be proposed as a general utility, then I would agree with you. But it's not. It is a module internal implementation detail aimed at reducing boilerplate in this particular place only (where all procedures need 'outputs' and most of the other variables) and every introduced binding is documented. The name tells what it does in such an obvious way that it makes the code shorter without degrading readability. In fact there are also popular general utilities promoted by highly regarded programmers, which introduce what you call "bad" macros: http://ep.yimg.com/ty/cdn/paulgraham/onlisp.pdf Chapter 14. In any case, I've reverted to the boilerplate version (correcting it according to the other comments). >> + (filter (lambda (p) >> + (and (pair? p) >> + (emacs-package? (package-name->name+version (first p))= ))) > > (match-lambda > ((label . directory) > (emacs-package? (package-name+version directory)))) > > (Which means the =E2=80=98first=E2=80=99 above should have been =E2=80=98= second=E2=80=99?) I'm not sure I understand your comment: 'package-name->name+version' takes a package name, therefore I pass it the 1st element of each input. 'emacs-package?' checks for the agreed prefix in the name. Prior to this check I discard the version suffix to make sure that, e.g., "emacs-123.456", is not confused for an emacs package. (By the way, 'match-lambda' appears not to be documented in Guile.) Thanks, Fede --485b397dd23172a07805195be745 Content-Type: text/x-diff; charset=UTF-8; name="0003-build-Add-emacs-build-system.patch" Content-Disposition: attachment; filename="0003-build-Add-emacs-build-system.patch" Content-Transfer-Encoding: base64 X-Attachment-Id: f_ibc9yb8m0 RnJvbSBlMjRkMGIxMTI4MGY0ZmNkMTA2ZjM3MWI5OGI3NDgxZjdjMDQ0ZWIwIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBGZWRlcmljbyBCZWZmYSA8YmVmZmFAZmJlbmdpbmVlcmluZy5j aD4KRGF0ZTogU3VuLCAyMSBKdW4gMjAxNSAxMDoxMDowNSArMDIwMApTdWJqZWN0OiBbUEFUQ0gg My81XSBidWlsZDogQWRkICdlbWFjcy1idWlsZC1zeXN0ZW0nLgoKKiBNYWtlZmlsZS5hbSAoTU9E VUxFUyk6IEFkZCAnZ3VpeC9idWlsZC1zeXN0ZW0vZW1hY3Muc2NtJyBhbmQKICAnZ3VpeC9idWls ZC9lbWFjcy1idWlsZC1zeXN0ZW0uc2NtJy4KKiBndWl4L2J1aWxkLXN5c3RlbS9lbWFjcy5zY206 IE5ldyBmaWxlLgoqIGd1aXgvYnVpbGQvZW1hY3MtYnVpbGQtc3lzdGVtLnNjbTogTmV3IGZpbGUu CiogZG9jL2d1aXgudGV4aSAoQnVpbGQgU3lzdGVtcyk6IERvY3VtZW50IGl0LgotLS0KIE1ha2Vm aWxlLmFtICAgICAgICAgICAgICAgICAgICAgICB8ICAgMiArCiBkb2MvZ3VpeC50ZXhpICAgICAg ICAgICAgICAgICAgICAgfCAgMTMgKysrCiBndWl4L2J1aWxkLXN5c3RlbS9lbWFjcy5zY20gICAg ICAgfCAxNDEgKysrKysrKysrKysrKysrKysrKysrKysrKysrCiBndWl4L2J1aWxkL2VtYWNzLWJ1 aWxkLXN5c3RlbS5zY20gfCAxOTcgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysKIDQgZmlsZXMgY2hhbmdlZCwgMzUzIGluc2VydGlvbnMoKykKIGNyZWF0ZSBtb2RlIDEwMDY0 NCBndWl4L2J1aWxkLXN5c3RlbS9lbWFjcy5zY20KIGNyZWF0ZSBtb2RlIDEwMDY0NCBndWl4L2J1 aWxkL2VtYWNzLWJ1aWxkLXN5c3RlbS5zY20KCmRpZmYgLS1naXQgYS9NYWtlZmlsZS5hbSBiL01h a2VmaWxlLmFtCmluZGV4IGMwMjdmYjMuLmEwMTNiN2EgMTAwNjQ0Ci0tLSBhL01ha2VmaWxlLmFt CisrKyBiL01ha2VmaWxlLmFtCkBAIC00OSw2ICs0OSw3IEBAIE1PRFVMRVMgPQkJCQkJXAogICBn dWl4L2xpY2Vuc2VzLnNjbQkJCQlcCiAgIGd1aXgvYnVpbGQtc3lzdGVtLnNjbQkJCQlcCiAgIGd1 aXgvYnVpbGQtc3lzdGVtL2NtYWtlLnNjbQkJCVwKKyAgZ3VpeC9idWlsZC1zeXN0ZW0vZW1hY3Mu c2NtCQkJXAogICBndWl4L2J1aWxkLXN5c3RlbS9nbGliLW9yLWd0ay5zY20JCVwKICAgZ3VpeC9i dWlsZC1zeXN0ZW0vZ251LnNjbQkJCVwKICAgZ3VpeC9idWlsZC1zeXN0ZW0vaGFza2VsbC5zY20J CQlcCkBAIC02Nyw2ICs2OCw3IEBAIE1PRFVMRVMgPQkJCQkJXAogICBndWl4L3VpLnNjbQkJCQkJ XAogICBndWl4L2J1aWxkL2Rvd25sb2FkLnNjbQkJCVwKICAgZ3VpeC9idWlsZC9jbWFrZS1idWls ZC1zeXN0ZW0uc2NtCQlcCisgIGd1aXgvYnVpbGQvZW1hY3MtYnVpbGQtc3lzdGVtLnNjbQkJXAog ICBndWl4L2J1aWxkL2dpdC5zY20JCQkJXAogICBndWl4L2J1aWxkL2dsaWItb3ItZ3RrLWJ1aWxk LXN5c3RlbS5zY20JXAogICBndWl4L2J1aWxkL2dudS1idWlsZC1zeXN0ZW0uc2NtCQlcCmRpZmYg LS1naXQgYS9kb2MvZ3VpeC50ZXhpIGIvZG9jL2d1aXgudGV4aQppbmRleCA5ZWY2MDIxLi4zZTQ3 OTAwIDEwMDY0NAotLS0gYS9kb2MvZ3VpeC50ZXhpCisrKyBiL2RvYy9ndWl4LnRleGkKQEAgLTI0 MDQsNiArMjQwNCwxOSBAQCBXaGljaCBIYXNrZWxsIGNvbXBpbGVyIGlzIHVzZWQgY2FuIGJlIHNw ZWNpZmllZCB3aXRoIHRoZSBAY29kZXsjOmhhc2tlbGx9CiBwYXJhbWV0ZXIgd2hpY2ggZGVmYXVs dHMgdG8gQGNvZGV7Z2hjfS4KIEBlbmQgZGVmdnIKIAorQGRlZnZyIHtTY2hlbWUgVmFyaWFibGV9 IGVtYWNzLWJ1aWxkLXN5c3RlbQorVGhpcyB2YXJpYWJsZSBpcyBleHBvcnRlZCBieSBAY29kZXso Z3VpeCBidWlsZC1zeXN0ZW0gZW1hY3MpfS4gIEl0CitpbXBsZW1lbnRzIGFuIGluc3RhbGxhdGlv biBwcm9jZWR1cmUgc2ltaWxhciB0byB0aGUgb25lIG9mIEVtYWNzJyBvd24KK3BhY2thZ2luZyBz eXN0ZW0gKEBweHJlZntQYWNrYWdlcywsLCBlbWFjcywgVGhlIEdOVSBFbWFjcyBNYW51YWx9KS4K KworSXQgZmlyc3QgY3JlYXRlcyB0aGUgQGNvZGV7QHZhcntwYWNrYWdlfS1hdXRvbG9hZHMuZWx9 IGZpbGUsIHRoZW4gaXQKK2J5dGUgY29tcGlsZXMgYWxsIEVtYWNzIExpc3AgZmlsZXMuICBEaWZm ZXJlbnRseSBmcm9tIHRoZSBFbWFjcworcGFja2FnaW5nIHN5c3RlbSwgdGhlIEluZm8gZG9jdW1l bnRhdGlvbiBmaWxlcyBhcmUgbW92ZWQgdG8gdGhlIHN0YW5kYXJkCitkb2N1bWVudGF0aW9uIGRp cmVjdG9yeSBhbmQgdGhlIEBmaWxle2Rpcn0gZmlsZSBpcyBkZWxldGVkLiAgRWFjaAorcGFja2Fn ZSBpcyBpbnN0YWxsZWQgaW4gaXRzIG93biBkaXJlY3RvcnkgdW5kZXIKK0BmaWxle3NoYXJlL2Vt YWNzL3NpdGUtbGlzcC9ndWl4LmR9LgorQGVuZCBkZWZ2cgorCiBMYXN0bHksIGZvciBwYWNrYWdl cyB0aGF0IGRvIG5vdCBuZWVkIGFueXRoaW5nIGFzIHNvcGhpc3RpY2F0ZWQsIGEKIGBgdHJpdmlh bCcnIGJ1aWxkIHN5c3RlbSBpcyBwcm92aWRlZC4gIEl0IGlzIHRyaXZpYWwgaW4gdGhlIHNlbnNl IHRoYXQKIGl0IHByb3ZpZGVzIGJhc2ljYWxseSBubyBzdXBwb3J0OiBpdCBkb2VzIG5vdCBwdWxs IGFueSBpbXBsaWNpdCBpbnB1dHMsCmRpZmYgLS1naXQgYS9ndWl4L2J1aWxkLXN5c3RlbS9lbWFj cy5zY20gYi9ndWl4L2J1aWxkLXN5c3RlbS9lbWFjcy5zY20KbmV3IGZpbGUgbW9kZSAxMDA2NDQK aW5kZXggMDAwMDAwMC4uMDNjMWViMgotLS0gL2Rldi9udWxsCisrKyBiL2d1aXgvYnVpbGQtc3lz dGVtL2VtYWNzLnNjbQpAQCAtMCwwICsxLDE0MSBAQAorOzs7IEdOVSBHdWl4IC0tLSBGdW5jdGlv bmFsIHBhY2thZ2UgbWFuYWdlbWVudCBmb3IgR05VCis7OzsgQ29weXJpZ2h0IMKpIDIwMTUgRmVk ZXJpY28gQmVmZmEgPGJlZmZhQGZiZW5naW5lZXJpbmcuY2g+Cis7OzsKKzs7OyBUaGlzIGZpbGUg aXMgcGFydCBvZiBHTlUgR3VpeC4KKzs7OworOzs7IEdOVSBHdWl4IGlzIGZyZWUgc29mdHdhcmU7 IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKzs7OyB1bmRlciB0aGUg dGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQor Ozs7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhl IExpY2Vuc2UsIG9yIChhdAorOzs7IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKzs7 OworOzs7IEdOVSBHdWl4IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBi ZSB1c2VmdWwsIGJ1dAorOzs7IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhl IGltcGxpZWQgd2FycmFudHkgb2YKKzs7OyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1Ig QSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCis7OzsgR05VIEdlbmVyYWwgUHVibGljIExp Y2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKzs7OworOzs7IFlvdSBzaG91bGQgaGF2ZSByZWNlaXZl ZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCis7OzsgYWxvbmcgd2l0 aCBHTlUgR3VpeC4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4K KworKGRlZmluZS1tb2R1bGUgKGd1aXggYnVpbGQtc3lzdGVtIGVtYWNzKQorICAjOnVzZS1tb2R1 bGUgKGd1aXggc3RvcmUpCisgICM6dXNlLW1vZHVsZSAoZ3VpeCB1dGlscykKKyAgIzp1c2UtbW9k dWxlIChndWl4IHBhY2thZ2VzKQorICAjOnVzZS1tb2R1bGUgKGd1aXggZGVyaXZhdGlvbnMpCisg ICM6dXNlLW1vZHVsZSAoZ3VpeCBzZWFyY2gtcGF0aHMpCisgICM6dXNlLW1vZHVsZSAoZ3VpeCBi dWlsZC1zeXN0ZW0pCisgICM6dXNlLW1vZHVsZSAoZ3VpeCBidWlsZC1zeXN0ZW0gZ251KQorICAj OnVzZS1tb2R1bGUgKGljZS05IG1hdGNoKQorICAjOnVzZS1tb2R1bGUgKHNyZmkgc3JmaS0yNikK KyAgIzpleHBvcnQgKCVlbWFjcy1idWlsZC1zeXN0ZW0tbW9kdWxlcworICAgICAgICAgICAgZW1h Y3MtYnVpbGQKKyAgICAgICAgICAgIGVtYWNzLWJ1aWxkLXN5c3RlbSkpCisKKzs7IENvbW1lbnRh cnk6Cis7OworOzsgU3RhbmRhcmQgYnVpbGQgcHJvY2VkdXJlIGZvciBFbWFjcyBwYWNrYWdlcy4g IFRoaXMgaXMgaW1wbGVtZW50ZWQgYXMgYW4KKzs7IGV4dGVuc2lvbiBvZiAnZ251LWJ1aWxkLXN5 c3RlbScuCis7OworOzsgQ29kZToKKworKGRlZmluZSAlZW1hY3MtYnVpbGQtc3lzdGVtLW1vZHVs ZXMKKyAgOzsgQnVpbGQtc2lkZSBtb2R1bGVzIGltcG9ydGVkIGJ5IGRlZmF1bHQuCisgIGAoKGd1 aXggYnVpbGQgZW1hY3MtYnVpbGQtc3lzdGVtKQorICAgIChndWl4IGJ1aWxkIGVtYWNzLXV0aWxz KQorICAgICxAJWdudS1idWlsZC1zeXN0ZW0tbW9kdWxlcykpCisKKyhkZWZpbmUgKGRlZmF1bHQt ZW1hY3MpCisgICJSZXR1cm4gdGhlIGRlZmF1bHQgRW1hY3MgcGFja2FnZS4iCisgIDs7IExhemls eSByZXNvbHZlIHRoZSBiaW5kaW5nIHRvIGF2b2lkIGEgY2lyY3VsYXIgZGVwZW5kZW5jeS4KKyAg KGxldCAoKGVtYWNzLW1vZCAocmVzb2x2ZS1pbnRlcmZhY2UgJyhnbnUgcGFja2FnZXMgZW1hY3Mp KSkpCisgICAgOzsgd2UgdXNlICdlbWFjcycgaW5zdGVhZCBvZiAnZW1hY3Mtbm8teCcgYmVjYXVz ZSB0aGUgbGF0dGVyIGFwcGVhcnMgbm90CisgICAgOzsgdG8gYmUgbG9hZGluZyBzb21lIG1hY3Jv cyBhbmQgY2F1c2VzIHByb2JsZW1zIHRvIHNvbWUgcGFja2FnZXMuICBGb3IKKyAgICA7OyBleGFt cGxlLCB3aXRoIHRoZSBsYXR0ZXIgQVVDVGVYIGdpdmVzIHRoZSBlcnJvciBtZXNzYWdlOgorICAg IDs7ICIoaW52YWxpZC1mdW5jdGlvbiBkYnVzLWlnbm9yZS1lcnJvcnMpIi4KKyAgICAobW9kdWxl LXJlZiBlbWFjcy1tb2QgJ2VtYWNzKSkpCisKKyhkZWZpbmUqIChsb3dlciBuYW1lCisgICAgICAg ICAgICAgICAgIzprZXkgc291cmNlIGlucHV0cyBuYXRpdmUtaW5wdXRzIG91dHB1dHMgc3lzdGVt IHRhcmdldAorICAgICAgICAgICAgICAgIChlbWFjcyAoZGVmYXVsdC1lbWFjcykpCisgICAgICAg ICAgICAgICAgIzphbGxvdy1vdGhlci1rZXlzCisgICAgICAgICAgICAgICAgIzpyZXN0IGFyZ3Vt ZW50cykKKyAgIlJldHVybiBhIGJhZyBmb3IgTkFNRS4iCisgIChkZWZpbmUgcHJpdmF0ZS1rZXl3 b3JkcworICAgICcoIzp0YXJnZXQgIzplbWFjcyAjOmlucHV0cyAjOm5hdGl2ZS1pbnB1dHMpKQor CisgIChhbmQgKG5vdCB0YXJnZXQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDtYWFg6 IG5vIGNyb3NzLWNvbXBpbGF0aW9uCisgICAgICAgKGJhZworICAgICAgICAgKG5hbWUgbmFtZSkK KyAgICAgICAgIChzeXN0ZW0gc3lzdGVtKQorICAgICAgICAgKGhvc3QtaW5wdXRzIGAoLEAoaWYg c291cmNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBgKCgic291cmNlIiAsc291cmNl KSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcoKSkKKyAgICAgICAgICAgICAgICAg ICAgICAgICxAaW5wdXRzCisKKyAgICAgICAgICAgICAgICAgICAgICAgIDs7IEtlZXAgdGhlIHN0 YW5kYXJkIGlucHV0cyBvZiAnZ251LWJ1aWxkLXN5c3RlbScuCisgICAgICAgICAgICAgICAgICAg ICAgICAsQChzdGFuZGFyZC1wYWNrYWdlcykpKQorICAgICAgICAgKGJ1aWxkLWlucHV0cyBgKCgi ZW1hY3MiICxlbWFjcykKKyAgICAgICAgICAgICAgICAgICAgICAgICAsQG5hdGl2ZS1pbnB1dHMp KQorICAgICAgICAgKG91dHB1dHMgb3V0cHV0cykKKyAgICAgICAgIChidWlsZCBlbWFjcy1idWls ZCkKKyAgICAgICAgIChhcmd1bWVudHMgKHN0cmlwLWtleXdvcmQtYXJndW1lbnRzIHByaXZhdGUt a2V5d29yZHMgYXJndW1lbnRzKSkpKSkKKworKGRlZmluZSogKGVtYWNzLWJ1aWxkIHN0b3JlIG5h bWUgaW5wdXRzCisgICAgICAgICAgICAgICAgICAgICAgIzprZXkgc291cmNlCisgICAgICAgICAg ICAgICAgICAgICAgKHRlc3RzPyAjdCkKKyAgICAgICAgICAgICAgICAgICAgICAodGVzdC10YXJn ZXQgInRlc3QiKQorICAgICAgICAgICAgICAgICAgICAgIChjb25maWd1cmUtZmxhZ3MgJycoKSkK KyAgICAgICAgICAgICAgICAgICAgICAocGhhc2VzICcoQCAoZ3VpeCBidWlsZCBlbWFjcy1idWls ZC1zeXN0ZW0pCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJXN0YW5kYXJkLXBo YXNlcykpCisgICAgICAgICAgICAgICAgICAgICAgKG91dHB1dHMgJygib3V0IikpCisgICAgICAg ICAgICAgICAgICAgICAgKHNlYXJjaC1wYXRocyAnKCkpCisgICAgICAgICAgICAgICAgICAgICAg KHN5c3RlbSAoJWN1cnJlbnQtc3lzdGVtKSkKKyAgICAgICAgICAgICAgICAgICAgICAoZ3VpbGUg I2YpCisgICAgICAgICAgICAgICAgICAgICAgKGltcG9ydGVkLW1vZHVsZXMgJWVtYWNzLWJ1aWxk LXN5c3RlbS1tb2R1bGVzKQorICAgICAgICAgICAgICAgICAgICAgIChtb2R1bGVzICcoKGd1aXgg YnVpbGQgZW1hY3MtYnVpbGQtc3lzdGVtKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgKGd1aXggYnVpbGQgdXRpbHMpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAo Z3VpeCBidWlsZCBlbWFjcy11dGlscykpKSkKKyAgIkJ1aWxkIFNPVVJDRSB1c2luZyBFTUFDUywg YW5kIHdpdGggSU5QVVRTLiIKKyAgKGRlZmluZSBidWlsZGVyCisgICAgYChiZWdpbgorICAgICAg ICh1c2UtbW9kdWxlcyAsQG1vZHVsZXMpCisgICAgICAgKGVtYWNzLWJ1aWxkICM6bmFtZSAsbmFt ZQorICAgICAgICAgICAgICAgICAgICAjOnNvdXJjZSAsKG1hdGNoIChhc3NvYy1yZWYgaW5wdXRz ICJzb3VyY2UiKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCg/IGRlcml2YXRp b24/IHNvdXJjZSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZGVyaXZhdGlv bi0+b3V0cHV0LXBhdGggc291cmNlKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg KChzb3VyY2UpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2UpCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzb3VyY2UKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHNvdXJjZSkpCisgICAgICAgICAgICAgICAgICAgICM6Y29uZmlndXJlLWZs YWdzICxjb25maWd1cmUtZmxhZ3MKKyAgICAgICAgICAgICAgICAgICAgIzpzeXN0ZW0gLHN5c3Rl bQorICAgICAgICAgICAgICAgICAgICAjOnRlc3QtdGFyZ2V0ICx0ZXN0LXRhcmdldAorICAgICAg ICAgICAgICAgICAgICAjOnRlc3RzPyAsdGVzdHM/CisgICAgICAgICAgICAgICAgICAgICM6cGhh c2VzICxwaGFzZXMKKyAgICAgICAgICAgICAgICAgICAgIzpvdXRwdXRzICVvdXRwdXRzCisgICAg ICAgICAgICAgICAgICAgICM6c2VhcmNoLXBhdGhzICcsKG1hcCBzZWFyY2gtcGF0aC1zcGVjaWZp Y2F0aW9uLT5zZXhwCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBz ZWFyY2gtcGF0aHMpCisgICAgICAgICAgICAgICAgICAgICM6aW5wdXRzICVidWlsZC1pbnB1dHMp KSkKKworICAoZGVmaW5lIGd1aWxlLWZvci1idWlsZAorICAgIChtYXRjaCBndWlsZQorICAgICAg KCg/IHBhY2thZ2U/KQorICAgICAgIChwYWNrYWdlLWRlcml2YXRpb24gc3RvcmUgZ3VpbGUgc3lz dGVtICM6Z3JhZnQ/ICNmKSkKKyAgICAgICgjZiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgOyB0aGUgZGVmYXVsdAorICAgICAgIChsZXQqICgoZGlzdHJvIChyZXNvbHZl LWludGVyZmFjZSAnKGdudSBwYWNrYWdlcyBjb21tZW5jZW1lbnQpKSkKKyAgICAgICAgICAgICAg KGd1aWxlICAobW9kdWxlLXJlZiBkaXN0cm8gJ2d1aWxlLWZpbmFsKSkpCisgICAgICAgICAocGFj a2FnZS1kZXJpdmF0aW9uIHN0b3JlIGd1aWxlIHN5c3RlbSAjOmdyYWZ0PyAjZikpKSkpCisKKyAg KGJ1aWxkLWV4cHJlc3Npb24tPmRlcml2YXRpb24gc3RvcmUgbmFtZSBidWlsZGVyCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICM6aW5wdXRzIGlucHV0cworICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAjOnN5c3RlbSBzeXN0ZW0KKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIzptb2R1bGVzIGltcG9ydGVkLW1vZHVsZXMKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIzpvdXRwdXRzIG91dHB1dHMKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIzpndWlsZS1mb3ItYnVpbGQgZ3VpbGUtZm9yLWJ1aWxkKSkKKworKGRlZmluZSBlbWFj cy1idWlsZC1zeXN0ZW0KKyAgKGJ1aWxkLXN5c3RlbQorICAgIChuYW1lICdlbWFjcykKKyAgICAo ZGVzY3JpcHRpb24gIlRoZSBidWlsZCBzeXN0ZW0gZm9yIEVtYWNzIHBhY2thZ2VzIikKKyAgICAo bG93ZXIgbG93ZXIpKSkKKworOzs7IGVtYWNzLnNjbSBlbmRzIGhlcmUKZGlmZiAtLWdpdCBhL2d1 aXgvYnVpbGQvZW1hY3MtYnVpbGQtc3lzdGVtLnNjbSBiL2d1aXgvYnVpbGQvZW1hY3MtYnVpbGQt c3lzdGVtLnNjbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNzBlMGY2Ci0t LSAvZGV2L251bGwKKysrIGIvZ3VpeC9idWlsZC9lbWFjcy1idWlsZC1zeXN0ZW0uc2NtCkBAIC0w LDAgKzEsMTk3IEBACis7OzsgR05VIEd1aXggLS0tIEZ1bmN0aW9uYWwgcGFja2FnZSBtYW5hZ2Vt ZW50IGZvciBHTlUKKzs7OyBDb3B5cmlnaHQgwqkgMjAxNSBGZWRlcmljbyBCZWZmYSA8YmVmZmFA ZmJlbmdpbmVlcmluZy5jaD4KKzs7OworOzs7IFRoaXMgZmlsZSBpcyBwYXJ0IG9mIEdOVSBHdWl4 LgorOzs7Cis7OzsgR05VIEd1aXggaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1 dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorOzs7IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdl bmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Cis7OzsgdGhlIEZyZWUgU29mdHdh cmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IgKGF0Cis7 OzsgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorOzs7Cis7OzsgR05VIEd1aXggaXMg ZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0Cis7Ozsg V0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBv ZgorOzs7IE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T RS4gIFNlZSB0aGUKKzs7OyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRh aWxzLgorOzs7Cis7OzsgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05V IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKzs7OyBhbG9uZyB3aXRoIEdOVSBHdWl4LiAgSWYgbm90 LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisoZGVmaW5lLW1vZHVsZSAo Z3VpeCBidWlsZCBlbWFjcy1idWlsZC1zeXN0ZW0pCisgICM6dXNlLW1vZHVsZSAoKGd1aXggYnVp bGQgZ251LWJ1aWxkLXN5c3RlbSkgIzpwcmVmaXggZ251OikKKyAgIzp1c2UtbW9kdWxlIChndWl4 IGJ1aWxkIHV0aWxzKQorICAjOnVzZS1tb2R1bGUgKGd1aXggYnVpbGQgZW1hY3MtdXRpbHMpCisg ICM6dXNlLW1vZHVsZSAoc3JmaSBzcmZpLTEpCisgICM6dXNlLW1vZHVsZSAoc3JmaSBzcmZpLTI2 KQorICAjOnVzZS1tb2R1bGUgKGljZS05IHJkZWxpbSkKKyAgIzp1c2UtbW9kdWxlIChpY2UtOSBy ZWdleCkKKyAgIzp1c2UtbW9kdWxlIChpY2UtOSBtYXRjaCkKKyAgIzpleHBvcnQgKCVzdGFuZGFy ZC1waGFzZXMKKyAgICAgICAgICAgIGVtYWNzLWJ1aWxkKSkKKworOzsgQ29tbWVudGFyeToKKzs7 Cis7OyBCdWlsZGVyLXNpZGUgY29kZSBvZiB0aGUgYnVpbGQgcHJvY2VkdXJlIGZvciBFTFBBIEVt YWNzIHBhY2thZ2VzLgorOzsKKzs7IENvZGU6CisKKzs7IERpcmVjdG9yeSBzdWZmaXggd2hlcmUg d2UgaW5zdGFsbCBFTFBBIHBhY2thZ2VzLiAgV2UgYXZvaWQgIi4uLi9lbHBhIiBhcworOzsgRW1h Y3MgZXhwZWN0cyB0byBmaW5kIHRoZSBFTFBBIHJlcG9zaXRvcnkgJ2FyY2hpdmUtY29udGVudHMn IGZpbGUgYW5kIHRoZQorOzsgYXJjaGl2ZSBzaWduYXR1cmUuCisoZGVmaW5lICVpbnN0YWxsLXN1 ZmZpeCAiL3NoYXJlL2VtYWNzL3NpdGUtbGlzcC9ndWl4LmQiKQorCisoZGVmaW5lKiAoYnVpbGQg IzprZXkgb3V0cHV0cyBpbnB1dHMgIzphbGxvdy1vdGhlci1rZXlzKQorICAiQ29tcGlsZSAuZWwg ZmlsZXMuIgorICAobGV0KiAoKGVtYWNzIChzdHJpbmctYXBwZW5kIChhc3NvYy1yZWYgaW5wdXRz ICJlbWFjcyIpICIvYmluL2VtYWNzIikpCisgICAgICAgICAob3V0IChhc3NvYy1yZWYgb3V0cHV0 cyAib3V0IikpCisgICAgICAgICAoZWxwYS1uYW1lLXZlciAoc3RvcmUtZGlyZWN0b3J5LT5lbHBh LW5hbWUtdmVyc2lvbiBvdXQpKQorICAgICAgICAgKGVsLWRpciAoc3RyaW5nLWFwcGVuZCBvdXQg JWluc3RhbGwtc3VmZml4ICIvIiBlbHBhLW5hbWUtdmVyKSkKKyAgICAgICAgIChkZXBzLWRpcnMg KGVtYWNzLWlucHV0cy1kaXJlY3RvcmllcyBpbnB1dHMpKSkKKyAgICAoc2V0ZW52ICJTSEVMTCIg InNoIikKKyAgICAocGFyYW1ldGVyaXplICgoJWVtYWNzIGVtYWNzKSkKKyAgICAgIChlbWFjcy1i eXRlLWNvbXBpbGUtZGlyZWN0b3J5IGVsLWRpcgorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgKGVtYWNzLWlucHV0cy1lbC1kaXJlY3RvcmllcyBkZXBzLWRpcnMpKSkpKQorCiso ZGVmaW5lKiAocGF0Y2gtZWwtZmlsZXMgIzprZXkgb3V0cHV0cyAjOmFsbG93LW90aGVyLWtleXMp CisgICJTdWJzdGl0dXRlIHRoZSBhYnNvbHV0ZSBcIi9iaW4vXCIgZGlyZWN0b3J5IHdpdGggdGhl IHJpZ2h0IGxvY2F0aW9uIGluIHRoZQorc3RvcmUgaW4gJy5lbCcgZmlsZXMuIgorICAobGV0KiAo KG91dCAoYXNzb2MtcmVmIG91dHB1dHMgIm91dCIpKQorICAgICAgICAgKGVscGEtbmFtZS12ZXIg KHN0b3JlLWRpcmVjdG9yeS0+ZWxwYS1uYW1lLXZlcnNpb24gb3V0KSkKKyAgICAgICAgIChlbC1k aXIgKHN0cmluZy1hcHBlbmQgb3V0ICVpbnN0YWxsLXN1ZmZpeCAiLyIgZWxwYS1uYW1lLXZlcikp CisgICAgICAgICAoc3Vic3RpdHV0ZS1jbWQgKGxhbWJkYSAoKQorICAgICAgICAgICAgICAgICAg ICAgICAgICAgKHN1YnN0aXR1dGUqIChmaW5kLWZpbGVzICIuIiAiXFwuZWwkIikKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgKCgiXCIvYmluLyguKilcIiIgXyBjbWQpCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAoc3RyaW5nLWFwcGVuZCAiXCIiICh3aGljaCBjbWQpICJcIiIp KSkpKSkKKyAgICAod2l0aC1kaXJlY3RvcnktZXhjdXJzaW9uIGVsLWRpcgorICAgICAgOzsgU29t ZSBvbGQgJy5lbCcgZmlsZXMgKGUuZy4sIHRleC1idWYuZWwgaW4gQVVDVGVYKSBhcmUgc3RpbGwg ZW5jb2RlZAorICAgICAgOzsgd2l0aCB0aGUgIklTTy04ODU5LTEiIGxvY2FsZS4KKyAgICAgICh1 bmxlc3MgKGZhbHNlLWlmLWV4Y2VwdGlvbiAoc3Vic3RpdHV0ZS1jbWQpKQorICAgICAgICAod2l0 aC1mbHVpZHMgKCglZGVmYXVsdC1wb3J0LWVuY29kaW5nICJJU08tODg1OS0xIikpCisgICAgICAg ICAgKHN1YnN0aXR1dGUtY21kKSkpKQorICAgICN0KSkKKworKGRlZmluZSogKGluc3RhbGwgIzpr ZXkgb3V0cHV0cyAjOmFsbG93LW90aGVyLWtleXMpCisgICJJbnN0YWxsIHRoZSBwYWNrYWdlIGNv bnRlbnRzLiIKKyAgKGxldCogKChvdXQgKGFzc29jLXJlZiBvdXRwdXRzICJvdXQiKSkKKyAgICAg ICAgIChlbHBhLW5hbWUtdmVyIChzdG9yZS1kaXJlY3RvcnktPmVscGEtbmFtZS12ZXJzaW9uIG91 dCkpCisgICAgICAgICAoc3JjLWRpciAoZ2V0Y3dkKSkKKyAgICAgICAgICh0Z3QtZGlyIChzdHJp bmctYXBwZW5kIG91dCAlaW5zdGFsbC1zdWZmaXggIi8iIGVscGEtbmFtZS12ZXIpKSkKKyAgICAo Y29weS1yZWN1cnNpdmVseSBzcmMtZGlyIHRndC1kaXIpCisgICAgI3QpKQorCisoZGVmaW5lKiAo bW92ZS1kb2MgIzprZXkgb3V0cHV0cyAjOmFsbG93LW90aGVyLWtleXMpCisgICJNb3ZlIGluZm8g ZmlsZXMgZnJvbSB0aGUgRUxQQSBwYWNrYWdlIGRpcmVjdG9yeSB0byB0aGUgaW5mbyBkaXJlY3Rv cnkuIgorICAobGV0KiAoKG91dCAoYXNzb2MtcmVmIG91dHB1dHMgIm91dCIpKQorICAgICAgICAg KGVscGEtbmFtZS12ZXIgKHN0b3JlLWRpcmVjdG9yeS0+ZWxwYS1uYW1lLXZlcnNpb24gb3V0KSkK KyAgICAgICAgIChlbC1kaXIgKHN0cmluZy1hcHBlbmQgb3V0ICVpbnN0YWxsLXN1ZmZpeCAiLyIg ZWxwYS1uYW1lLXZlcikpCisgICAgICAgICAobmFtZS12ZXIgKHN0b3JlLWRpcmVjdG9yeS0+bmFt ZS12ZXJzaW9uIG91dCkpCisgICAgICAgICAoaW5mby1kaXIgKHN0cmluZy1hcHBlbmQgb3V0ICIv c2hhcmUvaW5mby8iIG5hbWUtdmVyKSkKKyAgICAgICAgIChpbmZvLWZpbGVzIChmaW5kLWZpbGVz IGVsLWRpciAiXFwuaW5mbyQiKSkpCisgICAgKHVubGVzcyAobnVsbD8gaW5mby1maWxlcykKKyAg ICAgIChta2Rpci1wIGluZm8tZGlyKQorICAgICAgKHdpdGgtZGlyZWN0b3J5LWV4Y3Vyc2lvbiBl bC1kaXIKKyAgICAgICAgKHdoZW4gKGZpbGUtZXhpc3RzPyAiZGlyIikgKGRlbGV0ZS1maWxlICJk aXIiKSkKKyAgICAgICAgKGZvci1lYWNoIChsYW1iZGEgKGYpCisgICAgICAgICAgICAgICAgICAg IChjb3B5LWZpbGUgZiAoc3RyaW5nLWFwcGVuZCBpbmZvLWRpciAiLyIgKGJhc2VuYW1lIGYpKSkK KyAgICAgICAgICAgICAgICAgICAgKGRlbGV0ZS1maWxlIGYpKQorICAgICAgICAgICAgICAgICAg aW5mby1maWxlcykpKQorICAgICN0KSkKKworKGRlZmluZSogKG1ha2UtYXV0b2xvYWRzICM6a2V5 IG91dHB1dHMgaW5wdXRzICM6YWxsb3ctb3RoZXIta2V5cykKKyAgIkdlbmVyYXRlIHRoZSBhdXRv bG9hZHMgZmlsZS4iCisgIChsZXQqICgoZW1hY3MgKHN0cmluZy1hcHBlbmQgKGFzc29jLXJlZiBp bnB1dHMgImVtYWNzIikgIi9iaW4vZW1hY3MiKSkKKyAgICAgICAgIChvdXQgKGFzc29jLXJlZiBv dXRwdXRzICJvdXQiKSkKKyAgICAgICAgIChlbHBhLW5hbWUtdmVyIChzdG9yZS1kaXJlY3Rvcnkt PmVscGEtbmFtZS12ZXJzaW9uIG91dCkpCisgICAgICAgICAoZWxwYS1uYW1lIChwYWNrYWdlLW5h bWUtPm5hbWUrdmVyc2lvbiBlbHBhLW5hbWUtdmVyKSkKKyAgICAgICAgIChlbC1kaXIgKHN0cmlu Zy1hcHBlbmQgb3V0ICVpbnN0YWxsLXN1ZmZpeCAiLyIgZWxwYS1uYW1lLXZlcikpKQorICAgIChw YXJhbWV0ZXJpemUgKCglZW1hY3MgZW1hY3MpKQorICAgICAgKGVtYWNzLWdlbmVyYXRlLWF1dG9s b2FkcyBlbHBhLW5hbWUgZWwtZGlyKSkKKyAgICAjdCkpCisKKyhkZWZpbmUgKGVtYWNzLXBhY2th Z2U/IG5hbWUpCisgICJDaGVjayBpZiBOQU1FIGNvcnJlc3BvbmQgdG8gdGhlIG5hbWUgb2YgYW4g RW1hY3MgcGFja2FnZS4iCisgIChzdHJpbmctcHJlZml4PyAiZW1hY3MtIiBuYW1lKSkKKworKGRl ZmluZSAoZW1hY3MtaW5wdXRzIGlucHV0cykKKyAgIlJldHJpZXZlIHRoZSBsaXN0IG9mIEVtYWNz IHBhY2thZ2VzIGZyb20gSU5QVVRTLiIKKyAgKGZpbHRlciAobGFtYmRhIChwKQorICAgICAgICAg ICAgKGFuZCAocGFpcj8gcCkKKyAgICAgICAgICAgICAgICAgKGVtYWNzLXBhY2thZ2U/IChwYWNr YWdlLW5hbWUtPm5hbWUrdmVyc2lvbiAoZmlyc3QgcCkpKSkpCisgICAgICAgICAgaW5wdXRzKSkK KworKGRlZmluZSAoZW1hY3MtaW5wdXRzLWRpcmVjdG9yaWVzIGlucHV0cykKKyAgIkV4dHJhY3Qg dGhlIGxpc3Qgb2YgRW1hY3MgcGFja2FnZSBkaXJlY3RvcmllcyBmcm9tIElOUFVUUy4iCisgIChs ZXQgKChlbWFjcy1pbnMgKGVtYWNzLWlucHV0cyBpbnB1dHMpKSkKKyAgICAobWF0Y2ggZW1hY3Mt aW5zCisgICAgICAoKChuYW1lIC4gZGlyKSAuLi4pIGRpcikpKSkKKworKGRlZmluZSAoZW1hY3Mt aW5wdXRzLWVsLWRpcmVjdG9yaWVzIGRpcnMpCisgICJCdWlsZCB0aGUgbGlzdCBvZiBFbWFjcyBM aXNwIGRpcmVjdG9yaWVzIGZyb20gdGhlIEVtYWNzIHBhY2thZ2UgZGlyZWN0b3J5CitESVJTLiIK KyAgKG1hcCAobGFtYmRhIChkKQorICAgICAgICAgKHN0cmluZy1hcHBlbmQgZCAlaW5zdGFsbC1z dWZmaXggIi8iCisgICAgICAgICAgICAgICAgICAgICAgICAoc3RvcmUtZGlyZWN0b3J5LT5lbHBh LW5hbWUtdmVyc2lvbiBkKSkpCisgICAgICAgZGlycykpCisKKyhkZWZpbmUgKHBhY2thZ2UtbmFt ZS12ZXJzaW9uLT5lbHBhLW5hbWUtdmVyc2lvbiBuYW1lLXZlcikKKyAgIkNvbnZlcnQgdGhlIEd1 aXggcGFja2FnZSBOQU1FLVZFUiB0byB0aGUgY29ycmVzcG9uZGluZyBFTFBBIG5hbWUtdmVyc2lv bgorZm9ybWF0LiAgRXNzbmV0aWFsbHkgZHJvcCB0aGUgcHJlZml4IHVzZWQgaW4gR3VpeC4iCisg IChsZXQgKChuYW1lIChzdG9yZS1kaXJlY3RvcnktPm5hbWUtdmVyc2lvbiBuYW1lLXZlcikpKQor ICAgIChpZiAoZW1hY3MtcGFja2FnZT8gbmFtZS12ZXIpCisgICAgICAgIChzdG9yZS1kaXJlY3Rv cnktPm5hbWUtdmVyc2lvbiBuYW1lLXZlcikKKyAgICAgICAgbmFtZS12ZXIpKSkKKworKGRlZmlu ZSAoc3RvcmUtZGlyZWN0b3J5LT5lbHBhLW5hbWUtdmVyc2lvbiBzdG9yZS1kaXIpCisgICJHaXZl biBhIHN0b3JlIGRpcmVjdG9yeSBTVE9SRS1ESVIgcmV0dXJuIHRoZSBwYXJ0IG9mIHRoZSBiYXNl bmFtZSBhZnRlciB0aGUKK3NlY29uZCBoeXBoZW4uICBUaGlzIGNvcnJlc3BvbmRzIHRvICduYW1l LXZlcnNpb24nIGFzIHVzZWQgaW4gRUxQQSBwYWNrYWdlcy4iCisgICgoY29tcG9zZSBwYWNrYWdl LW5hbWUtdmVyc2lvbi0+ZWxwYS1uYW1lLXZlcnNpb24KKyAgICAgICAgICAgIHN0b3JlLWRpcmVj dG9yeS0+bmFtZS12ZXJzaW9uKQorICAgc3RvcmUtZGlyKSkKKworKGRlZmluZSAoc3RvcmUtZGly ZWN0b3J5LT5uYW1lLXZlcnNpb24gc3RvcmUtZGlyKQorICAiR2l2ZW4gYSBzdG9yZSBkaXJlY3Rv cnkgU1RPUkUtRElSIHJldHVybiB0aGUgcGFydCBvZiB0aGUgYmFzZW5hbWUKK2FmdGVyIHRoZSBm aXJzdCBoeXBoZW4uICBUaGlzIGNvcnJlc3BvbmRzIHRvICduYW1lLXZlcnNpb24nIG9mIHRoZSBw YWNrYWdlLiIKKyAgKGxldCogKChiYXNlIChiYXNlbmFtZSBzdG9yZS1kaXIpKSkKKyAgICAoc3Ry aW5nLWRyb3AgYmFzZQorICAgICAgICAgICAgICAgICAoKyAxIChzdHJpbmctaW5kZXggYmFzZSAj XC0pKSkpKQorCis7OyBmcm9tIChndWl4IHV0aWxzKS4gIFNob3VsZCB3ZSBwdXQgaXQgaW4gKGd1 aXggYnVpbGQgdXRpbHMpPworKGRlZmluZSAocGFja2FnZS1uYW1lLT5uYW1lK3ZlcnNpb24gbmFt ZSkKKyAgIkdpdmVuIE5BTUUsIGEgcGFja2FnZSBuYW1lIGxpa2UgXCJmb28tMC45LjFiXCIsIHJl dHVybiB0d28gdmFsdWVzOgorXCJmb29cIiBhbmQgXCIwLjkuMWJcIi4gIFdoZW4gdGhlIHZlcnNp b24gcGFydCBpcyB1bmF2YWlsYWJsZSwgTkFNRSBhbmQKKyNmIGFyZSByZXR1cm5lZC4gIFRoZSBm aXJzdCBoeXBoZW4gZm9sbG93ZWQgYnkgYSBkaWdpdCBpcyBjb25zaWRlcmVkIHRvCitpbnRyb2R1 Y2UgdGhlIHZlcnNpb24gcGFydC4iCisgIDs7IFNlZSBhbHNvIGBEcnZOYW1lJyBpbiBOaXguCisK KyAgKGRlZmluZSBudW1iZXI/CisgICAgKGN1dCBjaGFyLXNldC1jb250YWlucz8gY2hhci1zZXQ6 ZGlnaXQgPD4pKQorCisgIChsZXQgbG9vcCAoKGNoYXJzICAgKHN0cmluZy0+bGlzdCBuYW1lKSkK KyAgICAgICAgICAgICAocHJlZml4ICcoKSkpCisgICAgKG1hdGNoIGNoYXJzCisgICAgICAoKCkK KyAgICAgICAodmFsdWVzIG5hbWUgI2YpKQorICAgICAgKCgjXC0gKD8gbnVtYmVyPyBuKSByZXN0 IC4uLikKKyAgICAgICAodmFsdWVzIChsaXN0LT5zdHJpbmcgKHJldmVyc2UgcHJlZml4KSkKKyAg ICAgICAgICAgICAgIChsaXN0LT5zdHJpbmcgKGNvbnMgbiByZXN0KSkpKQorICAgICAgKChoZWFk IHRhaWwgLi4uKQorICAgICAgIChsb29wIHRhaWwgKGNvbnMgaGVhZCBwcmVmaXgpKSkpKSkKKwor KGRlZmluZSAlc3RhbmRhcmQtcGhhc2VzCisgIChtb2RpZnktcGhhc2VzIGdudTolc3RhbmRhcmQt cGhhc2VzCisgICAgKGRlbGV0ZSAnY29uZmlndXJlKQorICAgIChkZWxldGUgJ2NoZWNrKQorICAg IChkZWxldGUgJ2luc3RhbGwpCisgICAgKHJlcGxhY2UgJ2J1aWxkIGJ1aWxkKQorICAgIChhZGQt YmVmb3JlICdidWlsZCAnaW5zdGFsbCBpbnN0YWxsKQorICAgIChhZGQtYWZ0ZXIgJ2luc3RhbGwg J21ha2UtYXV0b2xvYWRzIG1ha2UtYXV0b2xvYWRzKQorICAgIChhZGQtYWZ0ZXIgJ21ha2UtYXV0 b2xvYWRzICdwYXRjaC1lbC1maWxlcyBwYXRjaC1lbC1maWxlcykKKyAgICAoYWRkLWFmdGVyICdt YWtlLWF1dG9sb2FkcyAnbW92ZS1kb2MgbW92ZS1kb2MpKSkKKworKGRlZmluZSogKGVtYWNzLWJ1 aWxkICM6a2V5IGlucHV0cyAocGhhc2VzICVzdGFuZGFyZC1waGFzZXMpCisgICAgICAgICAgICAg ICAgICAgICAgIzphbGxvdy1vdGhlci1rZXlzICM6cmVzdCBhcmdzKQorICAiQnVpbGQgdGhlIGdp dmVuIEVtYWNzIHBhY2thZ2UsIGFwcGx5aW5nIGFsbCBvZiBQSEFTRVMgaW4gb3JkZXIuIgorICAo YXBwbHkgZ251OmdudS1idWlsZAorICAgICAgICAgIzppbnB1dHMgaW5wdXRzICM6cGhhc2VzIHBo YXNlcworICAgICAgICAgYXJncykpCisKKzs7OyBlbWFjcy1idWlsZC1zeXN0ZW0uc2NtIGVuZHMg aGVyZQotLSAKMi4yLjEKCg== --485b397dd23172a07805195be745--