From mboxrd@z Thu Jan 1 00:00:00 1970 From: Federico Beffa Subject: Re: [PATCH 1/5] import: Add 'elpa' importer Date: Wed, 24 Jun 2015 18:15:12 +0200 Message-ID: References: <87wpyw6bjl.fsf@gmail.com> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary=485b397dd231c9b296051945cf2a Return-path: Received: from eggs.gnu.org ([2001:4830:134:3::10]:51002) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Z7nKf-0003Qn-BW for guix-devel@gnu.org; Wed, 24 Jun 2015 12:15:28 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1Z7nKT-0006h8-Mb for guix-devel@gnu.org; Wed, 24 Jun 2015 12:15:25 -0400 Received: from mail-ig0-x236.google.com ([2607:f8b0:4001:c05::236]:35317) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Z7nKT-0006h4-ET for guix-devel@gnu.org; Wed, 24 Jun 2015 12:15:13 -0400 Received: by igblr2 with SMTP id lr2so78873728igb.0 for ; Wed, 24 Jun 2015 09:15:13 -0700 (PDT) In-Reply-To: <87wpyw6bjl.fsf@gmail.com> 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: Alex Kost Cc: Guix-devel --485b397dd231c9b296051945cf2a Content-Type: text/plain; charset=UTF-8 Thanks. On Sun, Jun 21, 2015 at 10:39 PM, Alex Kost wrote: > Hi, I've tried this elpa importer and it is great!! > > I don't have real comments on code, just some nitpicks. > > Federico Beffa (2015-06-21 11:28 +0300) wrote: > >> From 8796b32a1ff8d565c3eb9874cde6a4a14d0b4f3b Mon Sep 17 00:00:00 2001 >> From: Federico Beffa >> Date: Tue, 16 Jun 2015 10:50:06 +0200 >> Subject: [PATCH 1/5] import: Add 'elpa' importer. >> >> * guix/import/elpa.scm: New file. >> * guix/scripts/import.scm: Add "elpa" to 'importers'. >> * guix/scripts/import/elpa.scm: New file. >> * Makefile.am (MODULES): Add 'guix/import/elpa.scm' and >> 'guix/scripts/import/elpa.scm'. (SCM_TESTS): Add 'tests/elpa.scm'. > > AFAIK the convention is to put "(...): ..." on a separate line: > > * Makefile.am (MODULES): Add 'guix/import/elpa.scm' and > 'guix/scripts/import/elpa.scm'. > (SCM_TESTS): Add 'tests/elpa.scm'. > > [...] >> diff --git a/doc/guix.texi b/doc/guix.texi >> index 46dccb8..3ca105a 100644 >> --- a/doc/guix.texi >> +++ b/doc/guix.texi >> @@ -3770,6 +3770,33 @@ package name by a hyphen and a version number as in the following example: >> @example >> guix import hackage mtl-2.1.3.1 >> @end example >> + >> +@item elpa >> +@cindex elpa >> +Import meta-data from an Emacs ELPA package repository. >> + >> +Specific command-line options are: >> + >> +@table @code >> +@item --archive=@var{repo} >> +@itemx -a @var{repo} >> +@var{repo} identifies the archive repository to from which to retrive > > Redundant "to" (before "from")? And a typo in "retrieve". > > [...] >> +(define* (elpa-package->sexp pkg) > > There are some trailing spaces in this procedure: > >> + "Return the `package' S-expression for the Emacs package PKG, a record of >> +type ''." >> + > here^ > >> + (define name (elpa-package-name pkg)) >> + > here^ > >> + (define version (elpa-package-version pkg)) >> + > here^ > >> + (define source-url (elpa-package-source-url pkg)) >> + > here^ > >> + (define dependencies >> + (let* ((deps (elpa-package-inputs pkg)) >> + (names (filter-dependencies (elpa-dependencies->names deps)))) >> + (map (lambda (n) >> + (let ((new-n (elpa-name->package-name n))) >> + (list new-n (list 'unquote (string->symbol new-n))))) >> + names))) >> + > here^ > >> + (define (maybe-inputs input-type inputs) >> + (match inputs >> + (() >> + '()) >> + ((inputs ...) >> + (list (list input-type >> + (list 'quasiquote inputs)))))) >> + > here^ > > [...] >> +;;; Command-line options. >> +;;; >> + >> +(define %default-options >> + '((repo . "gnu"))) >> + >> +(define (show-help) >> + (display (_ "Usage: guix import elpa PACKAGE-NAME >> +Import the latest package named PACKAGE-NAME from an ELPA repository.\n")) >> + (display (_ " >> + -a ARCHIVE, --archive=ARCHIVE specify the archive repository")) > > I think we don't duplicate an option argument (see "guix package --help" > for example): > > -a, --archive=ARCHIVE specify the archive repository > > -- > Alex --485b397dd231c9b296051945cf2a Content-Type: text/x-diff; charset=UTF-8; name="0001-import-Add-elpa-importer.patch" Content-Disposition: attachment; filename="0001-import-Add-elpa-importer.patch" Content-Transfer-Encoding: base64 X-Attachment-Id: f_ibayo3ir0 RnJvbSA1OTViZWZkMGZiODhhZTAwZDQwNWE3MjdlZmI1NWI5ZmE0NTZlNTQ5IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBGZWRlcmljbyBCZWZmYSA8YmVmZmFAZmJlbmdpbmVlcmluZy5j aD4KRGF0ZTogVHVlLCAxNiBKdW4gMjAxNSAxMDo1MDowNiArMDIwMApTdWJqZWN0OiBbUEFUQ0gg MS81XSBpbXBvcnQ6IEFkZCAnZWxwYScgaW1wb3J0ZXIuCgoqIGd1aXgvaW1wb3J0L2VscGEuc2Nt OiBOZXcgZmlsZS4KKiBndWl4L3NjcmlwdHMvaW1wb3J0LnNjbTogQWRkICJlbHBhIiB0byAnaW1w b3J0ZXJzJy4KKiBndWl4L3NjcmlwdHMvaW1wb3J0L2VscGEuc2NtOiBOZXcgZmlsZS4KKiBNYWtl ZmlsZS5hbSAoTU9EVUxFUyk6IEFkZCAnZ3VpeC9pbXBvcnQvZWxwYS5zY20nIGFuZAogICdndWl4 L3NjcmlwdHMvaW1wb3J0L2VscGEuc2NtJy4KICAoU0NNX1RFU1RTKTogQWRkICd0ZXN0cy9lbHBh LnNjbScuCiogZG9jL2d1aXgudGV4aSAoSW52b2tpbmcgZ3VpeCBpbXBvcnQpOiBEb2N1bWVudCBp dC4KKiB0ZXN0cy9lbHBhLnNjbTogTmV3IGZpbGUuCi0tLQogTWFrZWZpbGUuYW0gICAgICAgICAg ICAgICAgICB8ICAgMyArCiBkb2MvZ3VpeC50ZXhpICAgICAgICAgICAgICAgIHwgIDI3ICsrKysr KwogZ3VpeC9pbXBvcnQvZWxwYS5zY20gICAgICAgICB8IDIxOCArKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrCiBndWl4L3NjcmlwdHMvaW1wb3J0LnNjbSAgICAgIHwg ICAyICstCiBndWl4L3NjcmlwdHMvaW1wb3J0L2VscGEuc2NtIHwgIDk3ICsrKysrKysrKysrKysr KysrKysKIHRlc3RzL2VscGEuc2NtICAgICAgICAgICAgICAgfCAxMDkgKysrKysrKysrKysrKysr KysrKysrKwogNiBmaWxlcyBjaGFuZ2VkLCA0NTUgaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbigt KQogY3JlYXRlIG1vZGUgMTAwNjQ0IGd1aXgvaW1wb3J0L2VscGEuc2NtCiBjcmVhdGUgbW9kZSAx MDA2NDQgZ3VpeC9zY3JpcHRzL2ltcG9ydC9lbHBhLnNjbQogY3JlYXRlIG1vZGUgMTAwNjQ0IHRl c3RzL2VscGEuc2NtCgpkaWZmIC0tZ2l0IGEvTWFrZWZpbGUuYW0gYi9NYWtlZmlsZS5hbQppbmRl eCAyYjg0NDY3Li5jMDI3ZmIzIDEwMDY0NAotLS0gYS9NYWtlZmlsZS5hbQorKysgYi9NYWtlZmls ZS5hbQpAQCAtOTUsNiArOTUsNyBAQCBNT0RVTEVTID0JCQkJCVwKICAgZ3VpeC9pbXBvcnQvc25p eC5zY20JCQkJXAogICBndWl4L2ltcG9ydC9jYWJhbC5zY20JCQkJXAogICBndWl4L2ltcG9ydC9o YWNrYWdlLnNjbQkJCVwKKyAgZ3VpeC9pbXBvcnQvZWxwYS5zY20gICAJCQlcCiAgIGd1aXgvc2Ny aXB0cy9kb3dubG9hZC5zY20JCQlcCiAgIGd1aXgvc2NyaXB0cy9idWlsZC5zY20JCQlcCiAgIGd1 aXgvc2NyaXB0cy9hcmNoaXZlLnNjbQkJCVwKQEAgLTExMSw2ICsxMTIsNyBAQCBNT0RVTEVTID0J CQkJCVwKICAgZ3VpeC9zY3JpcHRzL2ltcG9ydC9nbnUuc2NtCQkJXAogICBndWl4L3NjcmlwdHMv aW1wb3J0L25peC5zY20JCQlcCiAgIGd1aXgvc2NyaXB0cy9pbXBvcnQvaGFja2FnZS5zY20JCVwK KyAgZ3VpeC9zY3JpcHRzL2ltcG9ydC9lbHBhLnNjbSAgCQlcCiAgIGd1aXgvc2NyaXB0cy9lbnZp cm9ubWVudC5zY20JCQlcCiAgIGd1aXgvc2NyaXB0cy9wdWJsaXNoLnNjbQkJCVwKICAgZ3VpeC5z Y20JCQkJCVwKQEAgLTE4Miw2ICsxODQsNyBAQCBTQ01fVEVTVFMgPQkJCQkJXAogICB0ZXN0cy9w YWNrYWdlcy5zY20JCQkJXAogICB0ZXN0cy9zbml4LnNjbQkJCQlcCiAgIHRlc3RzL2hhY2thZ2Uu c2NtCQkJCVwKKyAgdGVzdHMvZWxwYS5zY20JCQkJXAogICB0ZXN0cy9zdG9yZS5zY20JCQkJXAog ICB0ZXN0cy9tb25hZHMuc2NtCQkJCVwKICAgdGVzdHMvZ2V4cC5zY20JCQkJXApkaWZmIC0tZ2l0 IGEvZG9jL2d1aXgudGV4aSBiL2RvYy9ndWl4LnRleGkKaW5kZXggNDZkY2NiOC4uZjg3NTZlZCAx MDA2NDQKLS0tIGEvZG9jL2d1aXgudGV4aQorKysgYi9kb2MvZ3VpeC50ZXhpCkBAIC0zNzcwLDYg KzM3NzAsMzMgQEAgcGFja2FnZSBuYW1lIGJ5IGEgaHlwaGVuIGFuZCBhIHZlcnNpb24gbnVtYmVy IGFzIGluIHRoZSBmb2xsb3dpbmcgZXhhbXBsZToKIEBleGFtcGxlCiBndWl4IGltcG9ydCBoYWNr YWdlIG10bC0yLjEuMy4xCiBAZW5kIGV4YW1wbGUKKworQGl0ZW0gZWxwYQorQGNpbmRleCBlbHBh CitJbXBvcnQgbWV0YS1kYXRhIGZyb20gYW4gRW1hY3MgRUxQQSBwYWNrYWdlIHJlcG9zaXRvcnku CisKK1NwZWNpZmljIGNvbW1hbmQtbGluZSBvcHRpb25zIGFyZToKKworQHRhYmxlIEBjb2RlCitA aXRlbSAtLWFyY2hpdmU9QHZhcntyZXBvfQorQGl0ZW14IC1hIEB2YXJ7cmVwb30KK0B2YXJ7cmVw b30gaWRlbnRpZmllcyB0aGUgYXJjaGl2ZSByZXBvc2l0b3J5IGZyb20gd2hpY2ggdG8gcmV0cmll dmUgdGhlCitpbmZvcm1hdGlvbi4gIEN1cnJlbnRseSB0aGUgc3VwcG9ydGVkIHJlcG9zaXRvcmll cyBhbmQgdGhlaXIgaWRlbnRpZmllcnMKK2FyZToKK0BpdGVtaXplIC0KK0BpdGVtCitAdXJlZnsi aHR0cDovL2VscGEuZ251Lm9yZy9wYWNrYWdlcyIsIEdOVX0sIHNlbGVjdGVkIGJ5IHRoZSBAY29k ZXtnbnV9CitpZGVudGlmaWVyLiAgVGhpcyBpcyB0aGUgZGVmYXVsdC4KKworQGl0ZW0KK0B1cmVm eyJodHRwOi8vc3RhYmxlLm1lbHBhLm9yZy9wYWNrYWdlcyIsIE1FTFBBLVN0YWJsZX0sIHNlbGVj dGVkIGJ5IHRoZQorQGNvZGV7bWVscGEtc3RhYmxlfSBpZGVudGlmaWVyLgorCitAaXRlbQorQHVy ZWZ7Imh0dHA6Ly9tZWxwYS5vcmcvcGFja2FnZXMiLCBNRUxQQX0sIHNlbGVjdGVkIGJ5IHRoZSBA Y29kZXttZWxwYX0KK2lkZW50aWZpZXIuCitAZW5kIGl0ZW1pemUKK0BlbmQgdGFibGUKIEBlbmQg dGFibGUKIAogVGhlIHN0cnVjdHVyZSBvZiB0aGUgQGNvbW1hbmR7Z3VpeCBpbXBvcnR9IGNvZGUg aXMgbW9kdWxhci4gIEl0IHdvdWxkIGJlCmRpZmYgLS1naXQgYS9ndWl4L2ltcG9ydC9lbHBhLnNj bSBiL2d1aXgvaW1wb3J0L2VscGEuc2NtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw MDAuLmZlMWY2ZWIKLS0tIC9kZXYvbnVsbAorKysgYi9ndWl4L2ltcG9ydC9lbHBhLnNjbQpAQCAt MCwwICsxLDIxOCBAQAorOzs7IEdOVSBHdWl4IC0tLSBGdW5jdGlvbmFsIHBhY2thZ2UgbWFuYWdl bWVudCBmb3IgR05VCis7OzsgQ29weXJpZ2h0IMKpIDIwMTUgRmVkZXJpY28gQmVmZmEgPGJlZmZh QGZiZW5naW5lZXJpbmcuY2g+Cis7OzsKKzs7OyBUaGlzIGZpbGUgaXMgcGFydCBvZiBHTlUgR3Vp eC4KKzs7OworOzs7IEdOVSBHdWl4IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli dXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKzs7OyB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBH ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorOzs7IHRoZSBGcmVlIFNvZnR3 YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdAor Ozs7IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKzs7OworOzs7IEdOVSBHdWl4IGlz IGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorOzs7 IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkg b2YKKzs7OyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP U0UuICBTZWUgdGhlCis7OzsgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0 YWlscy4KKzs7OworOzs7IFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdO VSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCis7OzsgYWxvbmcgd2l0aCBHTlUgR3VpeC4gIElmIG5v dCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworKGRlZmluZS1tb2R1bGUg KGd1aXggaW1wb3J0IGVscGEpCisgICM6dXNlLW1vZHVsZSAoaWNlLTkgbWF0Y2gpCisgICM6dXNl LW1vZHVsZSAoaWNlLTkgcmRlbGltKQorICAjOnVzZS1tb2R1bGUgKHNyZmkgc3JmaS0xKQorICAj OnVzZS1tb2R1bGUgKHNyZmkgc3JmaS05KQorICAjOnVzZS1tb2R1bGUgKHNyZmkgc3JmaS05IGdu dSkKKyAgIzp1c2UtbW9kdWxlIChzcmZpIHNyZmktMTEpCisgICM6dXNlLW1vZHVsZSAoKGd1aXgg ZG93bmxvYWQpICM6c2VsZWN0IChkb3dubG9hZC10by1zdG9yZSkpCisgICM6dXNlLW1vZHVsZSAo Z3VpeCBpbXBvcnQgdXRpbHMpCisgICM6dXNlLW1vZHVsZSAoZ3VpeCBzdG9yZSkKKyAgIzp1c2Ut bW9kdWxlIChndWl4IGhhc2gpCisgICM6dXNlLW1vZHVsZSAoZ3VpeCBiYXNlMzIpCisgICM6dXNl LW1vZHVsZSAoKGd1aXggdXRpbHMpICM6c2VsZWN0IChjYWxsLXdpdGgtdGVtcG9yYXJ5LW91dHB1 dC1maWxlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZW1vaXplKSkK KyAgIzpleHBvcnQgKGVscGEtPmd1aXgtcGFja2FnZSkpCisKKyhkZWZpbmUgKGVscGEtZGVwZW5k ZW5jaWVzLT5uYW1lcyBkZXBzKQorICAiQ29udmVydCB0aGUgbGlzdCBvZiBkZXBlbmRlbmNpZXMg ZnJvbSB0aGUgRUxQQSBmb3JtYXQsIHRvIGEgbGlzdCBvZiBzdHJpbmcKK25hbWVzLiIKKyAgKG1h cCAobGFtYmRhIChkKSAoc3ltYm9sLT5zdHJpbmcgKGZpcnN0IGQpKSkgZGVwcykpCisKKyhkZWZp bmUgKGZpbHRlci1kZXBlbmRlbmNpZXMgbmFtZXMpCisgICJSZW1vdmUgdGhlIHBhY2thZ2UgbmFt ZXMgaW5jbHVkZWQgd2l0aCBFbWFjcyBmcm9tIHRoZSBsaXN0IG9mCitOQU1FUyAoc3RyaW5ncyku IgorICAobGV0ICgoZW1hY3Mtc3RhbmRhcmQtbGlicmFyaWVzCisgICAgICAgICAnKCJlbWFjcyIg ImNsLWxpYiIpKSkKKyAgICAoZmlsdGVyIChsYW1iZGEgKGQpIChub3QgKG1lbWJlciBkIGVtYWNz LXN0YW5kYXJkLWxpYnJhcmllcykpKQorICAgICAgICAgICAgbmFtZXMpKSkKKworKGRlZmluZSAo ZWxwYS1uYW1lLT5wYWNrYWdlLW5hbWUgbmFtZSkKKyAgIkdpdmVuIHRoZSBOQU1FIG9mIGFuIEVt YWNzIHBhY2thZ2UsIHJldHVybiB0aGUgY29ycmVzcG9uZGluZyBHdWl4IG5hbWUuIgorICAobGV0 ICgocGFja2FnZS1uYW1lLXByZWZpeCAiZW1hY3MtIikpCisgICAgKGlmIChzdHJpbmctcHJlZml4 PyBwYWNrYWdlLW5hbWUtcHJlZml4IG5hbWUpCisgICAgICAgIChzdHJpbmctZG93bmNhc2UgbmFt ZSkKKyAgICAgICAgKHN0cmluZy1hcHBlbmQgcGFja2FnZS1uYW1lLXByZWZpeCAoc3RyaW5nLWRv d25jYXNlIG5hbWUpKSkpKQorCisoZGVmaW5lKiAoZWxwYS11cmwgIzpvcHRpb25hbCAocmVwbyAi Z251IikpCisgICJSZXRydW4gdGhlIFVSTCBvZiBSRVBPLiIKKyAgKGxldCAoKGVscGEtYXJjaGl2 ZXMKKyAgICAgICAgICcoKCJnbnUiIC4gImh0dHA6Ly9lbHBhLmdudS5vcmcvcGFja2FnZXMiKQor ICAgICAgICAgICAoIm1lbHBhLXN0YWJsZSIgLiAiaHR0cDovL3N0YWJsZS5tZWxwYS5vcmcvcGFj a2FnZXMiKQorICAgICAgICAgICAoIm1lbHBhIiAuICJodHRwOi8vbWVscGEub3JnL3BhY2thZ2Vz IikpKSkKKyAgICAoYXNzb2MtcmVmIGVscGEtYXJjaGl2ZXMgcmVwbykpKQorCisoZGVmaW5lKiAo ZWxwYS1mZXRjaC1hcmNoaXZlICM6b3B0aW9uYWwgKHJlcG8gImdudSIpKQorICAiUmV0cml2ZSB0 aGUgYXJjaGl2ZSB3aXRoIHRoZSBsaXN0IG9mIHBhY2thZ2VzIGF2YWlsYWJsZSBmcm9tIFJFUE8u IgorICAobGV0ICgodXJsIChzdHJpbmctYXBwZW5kIChlbHBhLXVybCByZXBvKSAiL2FyY2hpdmUt Y29udGVudHMiKSkpCisgICAgKGZldGNoLWFuZC1jYWxsLXdpdGgtaW5wdXQtZmlsZSB1cmwgcmVh ZCkpKQorCis7OyBGZXRjaCBVUkwsIHN0b3JlIHRoZSBjb250ZW50IGluIGEgdGVtcG9yYXJ5IGZp bGUgYW5kIGNhbGwgUFJPQyB3aXRoIHRoYXQKKzs7IGZpbGUuCisoZGVmaW5lIGZldGNoLWFuZC1j YWxsLXdpdGgtaW5wdXQtZmlsZQorICAobWVtb2l6ZQorICAgKGxhbWJkYSogKHVybCBwcm9jICM6 b3B0aW9uYWwgKGVyci1tc2cgInVuYXZhaWxhYmxlIikpCisgICAgIChjYWxsLXdpdGgtdGVtcG9y YXJ5LW91dHB1dC1maWxlCisgICAgICAobGFtYmRhICh0ZW1wIHBvcnQpCisgICAgICAgIChvciAo YW5kICh1cmwtZmV0Y2ggdXJsIHRlbXApCisgICAgICAgICAgICAgICAgIChjYWxsLXdpdGgtaW5w dXQtZmlsZSB0ZW1wIHByb2MpKQorICAgICAgICAgICAgZXJyLW1zZykpKSkpKQorCisoZGVmaW5l KiAoZWxwYS1wYWNrYWdlLWluZm8gbmFtZSAjOm9wdGlvbmFsIChyZXBvICJnbnUiKSkKKyAgIkV4 dHJhY3QgdGhlIGluZm9ybWF0aW9uIGFib3V0IHRoZSBwYWNrYWdlIE5BTUUgZnJvbSB0aGUgcGFj a2FnZSBhcmNoaWV2ZSBvZgorUkVQTy4iCisgIChsZXQqICgoYXJjaGl2ZSAoZWxwYS1mZXRjaC1h cmNoaXZlIHJlcG8pKQorICAgICAgICAgKGluZm8gKGZpbHRlciAobGFtYmRhIChwKSAoZXE/IChm aXJzdCBwKSAoc3RyaW5nLT5zeW1ib2wgbmFtZSkpKQorICAgICAgICAgICAgICAgICAgICAgICAo Y2RyIGFyY2hpdmUpKSkpCisgICAgKGlmIChwYWlyPyBpbmZvKSAoZmlyc3QgaW5mbykgI2YpKSkK KworOzsgT2JqZWN0IHRvIHN0b3JlIGluZm9ybWF0aW9uIGFib3V0IGFuIEVMUEEgcGFja2FnZS4K KyhkZWZpbmUtcmVjb3JkLXR5cGUgPGVscGEtcGFja2FnZT4KKyAgKG1ha2UtZWxwYS1wYWNrYWdl IG5hbWUgdmVyc2lvbiBpbnB1dHMgc3lub3BzaXMga2luZCBob21lLXBhZ2UgZGVzY3JpcHRpb24K KyAgICAgICAgICAgICAgICAgICAgIHNvdXJjZS11cmwpCisgIGVscGEtcGFja2FnZT8KKyAgKG5h bWUgZWxwYS1wYWNrYWdlLW5hbWUpCisgICh2ZXJzaW9uIGVscGEtcGFja2FnZS12ZXJzaW9uKQor ICAoaW5wdXRzIGVscGEtcGFja2FnZS1pbnB1dHMpCisgIChzeW5vcHNpcyBlbHBhLXBhY2thZ2Ut c3lub3BzaXMpCisgIChraW5kIGVscGEtcGFja2FnZS1raW5kKQorICAoaG9tZS1wYWdlIGVscGEt cGFja2FnZS1ob21lLXBhZ2UpCisgIChkZXNjcmlwdGlvbiBlbHBhLXBhY2thZ2UtZGVzY3JpcHRp b24pCisgIChzb3VyY2UtdXJsIGVscGEtcGFja2FnZS1zb3VyY2UtdXJsKSkKKworKHNldC1yZWNv cmQtdHlwZS1wcmludGVyISA8ZWxwYS1wYWNrYWdlPgorICAgICAgICAgICAgICAgICAgICAgICAg ICAobGFtYmRhIChwYWNrYWdlIHBvcnQpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGZv cm1hdCBwb3J0ICIjPGVscGEtcGFja2FnZSB+YS1+YT4iCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIChlbHBhLXBhY2thZ2UtbmFtZSBwYWNrYWdlKQorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAoZWxwYS1wYWNrYWdlLXZlcnNpb24gcGFja2FnZSkp KSkKKworKGRlZmluZSAoZWxwYS12ZXJzaW9uLT5zdHJpbmcgZWxwYS12ZXJzaW9uKQorICAiQ29u dmVydCB0aGUgcGFja2FnZSB2ZXJzaW9uIGFzIHVzZWQgaW4gRW1hY3MgcGFja2FnZSBmaWxlcyBp bnRvIGEgc3RyaW5nLiIKKyAgKGlmIChwYWlyPyBlbHBhLXZlcnNpb24pCisgICAgICAobGV0LXZh bHVlcyAoKChtcyByZXN0KSAobWF0Y2ggZWxwYS12ZXJzaW9uCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICgobXMgLiByZXN0KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgKHZhbHVlcyBtcyByZXN0KSkpKSkKKyAgICAgICAgKGZvbGQgKGxhbWJkYSAobiBzKSAoc3Ry aW5nLWFwcGVuZCBzICIuIiAobnVtYmVyLT5zdHJpbmcgbikpKQorICAgICAgICAgICAgICAobnVt YmVyLT5zdHJpbmcgbXMpIHJlc3QpKQorICAgICAgI2YpKQorCisoZGVmaW5lIChsb29rdXAtZXh0 cmEgYWxpc3Qga2V5KQorICAiTG9va3VwIEtFWSBmcm9tIHRoZSBBTElTVCBleHRyYSBwYWNrYWdl IGluZm9ybWF0aW9uLiIKKyAgKGFzc3EtcmVmIGFsaXN0IGtleSkpCisKKyhkZWZpbmUgKHBhY2th Z2UtaG9tZS1wYWdlIGFsaXN0KQorICAiRXh0cmFjdCB0aGUgcGFja2FnZSBob21lLXBhZ2UgZnJv bSBBTElTVC4iCisgIChvciAobG9va3VwLWV4dHJhIGFsaXN0ICc6dXJsKSAidW5zcGVjaWZpZWQi KSkKKworKGRlZmluZSAobmlsLT5lbXB0eSBhbGlzdCkKKyAgIklmIEFMSVNUIGlzIHRoZSBzeW1i b2wgJ25pbCByZXR1cm4gdGhlIGVtcHR5IGxpc3QuICBPdGhlcndpc2UsIHJldHVybiBBTElTVC4i CisgIChpZiAoZXE/IGFsaXN0ICduaWwpCisgICAgICAnKCkKKyAgICAgIGFsaXN0KSkKKworKGRl ZmluZSAocGFja2FnZS1zb3VyY2UtdXJsIGtpbmQgbmFtZSB2ZXJzaW9uIHJlcG8pCisgICJSZXR1 cm4gdGhlIHNvdXJjZSBVUkwgb2YgdGhlIHBhY2thZ2UgZGVzY3JpYmVkIHRoZSB0aGUgc3RyaW5n cyBOQU1FIGFuZAorVkVSU0lPTiBhdCBSRVBPLiAgS0lORCBpcyBlaXRoZXIgdGhlIHN5bWJvbCAn c2luZ2xlIG9yICd0YXIuIgorICAoY2FzZSBraW5kCisgICAgKChzaW5nbGUpIChmdWxsLXVybCBy ZXBvIG5hbWUgIi5lbCIgdmVyc2lvbikpCisgICAgKCh0YXIpIChmdWxsLXVybCByZXBvIG5hbWUg Ii50YXIiIHZlcnNpb24pKQorICAgIChlbHNlCisgICAgICNmKSkpCisKKyhkZWZpbmUqIChmdWxs LXVybCByZXBvIG5hbWUgc3VmZml4ICM6b3B0aW9uYWwgKHZlcnNpb24gI2YpKQorICAiUmV0dXJu IHRoZSBmdWxsIFVSTCBvZiB0aGUgcGFja2FnZSBOQU1FIGF0IFJFUE8gYW5kIHRoZSBTVUZGSVgu ICBNYXliZQoraW5jbHVkZSBWRVJTSU9OLiIKKyAgKGlmIHZlcnNpb24KKyAgICAgIChzdHJpbmct YXBwZW5kIChlbHBhLXVybCByZXBvKSAiLyIgbmFtZSAiLSIgdmVyc2lvbiBzdWZmaXgpCisgICAg ICAoc3RyaW5nLWFwcGVuZCAoZWxwYS11cmwgcmVwbykgIi8iIG5hbWUgc3VmZml4KSkpCisKKyhk ZWZpbmUgKGZldGNoLXBhY2thZ2UtZGVzY3JpcHRpb24ga2luZCBuYW1lIHJlcG8pCisgICJGZXRj aCB0aGUgZGVzY3JpcHRpb24gb2YgcGFja2FnZSBOQU1FIG9mIHR5cGUgS0lORCBmcm9tIFJFUE8u IgorICAobGV0ICgodXJsIChmdWxsLXVybCByZXBvIG5hbWUgIi1yZWFkbWUudHh0IikpKQorICAg IChmZXRjaC1hbmQtY2FsbC13aXRoLWlucHV0LWZpbGUgdXJsIHJlYWQtc3RyaW5nKSkpCisKKyhk ZWZpbmUqIChmZXRjaC1lbHBhLXBhY2thZ2UgbmFtZSAjOm9wdGlvbmFsIChyZXBvICJnbnUiKSkK KyAgIkZldGNoIHBhY2thZ2UgTkFNRSBmcm9tIFJFUE8uIgorICAobGV0ICgocGtnIChlbHBhLXBh Y2thZ2UtaW5mbyBuYW1lIHJlcG8pKSkKKyAgICAobWF0Y2ggcGtnCisgICAgICAoKG5hbWUgdmVy c2lvbiByZXFzIHN5bm9wc2lzIGtpbmQgLiByZXN0KQorICAgICAgIChsZXQqICgobmFtZSAoc3lt Ym9sLT5zdHJpbmcgbmFtZSkpCisgICAgICAgICAgICAgKHZlciAoZWxwYS12ZXJzaW9uLT5zdHJp bmcgdmVyc2lvbikpCisgICAgICAgICAgICAgKHVybCAocGFja2FnZS1zb3VyY2UtdXJsIGtpbmQg bmFtZSB2ZXIgcmVwbykpKQorICAgICAgICAgKG1ha2UtZWxwYS1wYWNrYWdlIG5hbWUgdmVyCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgKG5pbC0+ZW1wdHkgcmVxcykgc3lub3BzaXMga2lu ZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIChwYWNrYWdlLWhvbWUtcGFnZSAoZmlyc3Qg cmVzdCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGZldGNoLXBhY2thZ2UtZGVzY3Jp cHRpb24ga2luZCBuYW1lIHJlcG8pCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJsKSkp CisgICAgICAoXyAjZikpKSkKKworKGRlZmluZSogKGVscGEtcGFja2FnZS0+c2V4cCBwa2cpCisg ICJSZXR1cm4gdGhlIGBwYWNrYWdlJyBTLWV4cHJlc3Npb24gZm9yIHRoZSBFbWFjcyBwYWNrYWdl IFBLRywgYSByZWNvcmQgb2YKK3R5cGUgJzxlbHBhLXBhY2thZ2U+Jy4iCisKKyAgKGRlZmluZSBu YW1lIChlbHBhLXBhY2thZ2UtbmFtZSBwa2cpKQorCisgIChkZWZpbmUgdmVyc2lvbiAoZWxwYS1w YWNrYWdlLXZlcnNpb24gcGtnKSkKKworICAoZGVmaW5lIHNvdXJjZS11cmwgKGVscGEtcGFja2Fn ZS1zb3VyY2UtdXJsIHBrZykpCisKKyAgKGRlZmluZSBkZXBlbmRlbmNpZXMKKyAgICAobGV0KiAo KGRlcHMgKGVscGEtcGFja2FnZS1pbnB1dHMgcGtnKSkKKyAgICAgICAgICAgKG5hbWVzIChmaWx0 ZXItZGVwZW5kZW5jaWVzIChlbHBhLWRlcGVuZGVuY2llcy0+bmFtZXMgZGVwcykpKSkKKyAgICAg IChtYXAgKGxhbWJkYSAobikKKyAgICAgICAgICAgICAobGV0ICgobmV3LW4gKGVscGEtbmFtZS0+ cGFja2FnZS1uYW1lIG4pKSkKKyAgICAgICAgICAgICAgIChsaXN0IG5ldy1uIChsaXN0ICd1bnF1 b3RlIChzdHJpbmctPnN5bWJvbCBuZXctbikpKSkpCisgICAgICAgICAgIG5hbWVzKSkpCisKKyAg KGRlZmluZSAobWF5YmUtaW5wdXRzIGlucHV0LXR5cGUgaW5wdXRzKQorICAgIChtYXRjaCBpbnB1 dHMKKyAgICAgICgoKQorICAgICAgICcoKSkKKyAgICAgICgoaW5wdXRzIC4uLikKKyAgICAgICAo bGlzdCAobGlzdCBpbnB1dC10eXBlCisgICAgICAgICAgICAgICAgICAgKGxpc3QgJ3F1YXNpcXVv dGUgaW5wdXRzKSkpKSkpCisKKyAgKGxldCAoKHRhcmJhbGwgKHdpdGgtc3RvcmUgc3RvcmUKKyAg ICAgICAgICAgICAgICAgICAoZG93bmxvYWQtdG8tc3RvcmUgc3RvcmUgc291cmNlLXVybCkpKSkK KyAgICBgKHBhY2thZ2UKKyAgICAgICAobmFtZSAsKGVscGEtbmFtZS0+cGFja2FnZS1uYW1lIG5h bWUpKQorICAgICAgICh2ZXJzaW9uICx2ZXJzaW9uKQorICAgICAgIChzb3VyY2UgKG9yaWdpbgor ICAgICAgICAgICAgICAgICAobWV0aG9kIHVybC1mZXRjaCkKKyAgICAgICAgICAgICAgICAgKHVy aSAoc3RyaW5nLWFwcGVuZCAsQChmYWN0b3JpemUtdXJpIHNvdXJjZS11cmwgdmVyc2lvbikpKQor ICAgICAgICAgICAgICAgICAoc2hhMjU2CisgICAgICAgICAgICAgICAgICAoYmFzZTMyCisgICAg ICAgICAgICAgICAgICAgLChpZiB0YXJiYWxsCisgICAgICAgICAgICAgICAgICAgICAgICAoYnl0 ZXZlY3Rvci0+bml4LWJhc2UzMi1zdHJpbmcgKGZpbGUtc2hhMjU2IHRhcmJhbGwpKQorICAgICAg ICAgICAgICAgICAgICAgICAgImZhaWxlZCB0byBkb3dubG9hZCBwYWNrYWdlIikpKSkpCisgICAg ICAgKGJ1aWxkLXN5c3RlbSBlbWFjcy1idWlsZC1zeXN0ZW0pCisgICAgICAgLEAobWF5YmUtaW5w dXRzICdpbnB1dHMgZGVwZW5kZW5jaWVzKQorICAgICAgIChob21lLXBhZ2UgLChlbHBhLXBhY2th Z2UtaG9tZS1wYWdlIHBrZykpCisgICAgICAgKHN5bm9wc2lzICwoZWxwYS1wYWNrYWdlLXN5bm9w c2lzIHBrZykpCisgICAgICAgKGRlc2NyaXB0aW9uICwoZWxwYS1wYWNrYWdlLWRlc2NyaXB0aW9u IHBrZykpCisgICAgICAgKGxpY2Vuc2UgbGljZW5zZTpncGwzKykpKSkKKworKGRlZmluZSogKGVs cGEtPmd1aXgtcGFja2FnZSBuYW1lICM6b3B0aW9uYWwgKHJlcG8gImdudSIpKQorICAiRmV0Y2gg dGhlIHBhY2thZ2UgTkFNRSBmcm9tIFJFUE8gYW5kIHByb2R1Y2UgYSBHdWl4IHBhY2thZ2UgUy1l eHByZXNzaW9uLiIKKyAgKGxldCAoKHBrZyAoZmV0Y2gtZWxwYS1wYWNrYWdlIG5hbWUgcmVwbykp KQorICAgIChhbmQ9PiBwa2cgZWxwYS1wYWNrYWdlLT5zZXhwKSkpCisKKzs7OyBlbHBhLnNjbSBl bmRzIGhlcmUKZGlmZiAtLWdpdCBhL2d1aXgvc2NyaXB0cy9pbXBvcnQuc2NtIGIvZ3VpeC9zY3Jp cHRzL2ltcG9ydC5zY20KaW5kZXggNDVjZTA5Mi4uZDBiZGVjMSAxMDA2NDQKLS0tIGEvZ3VpeC9z Y3JpcHRzL2ltcG9ydC5zY20KKysrIGIvZ3VpeC9zY3JpcHRzL2ltcG9ydC5zY20KQEAgLTczLDcg KzczLDcgQEAgcmF0aGVyIHRoYW4gXFxuLiIKIDs7OyBFbnRyeSBwb2ludC4KIDs7OwogCi0oZGVm aW5lIGltcG9ydGVycyAnKCJnbnUiICJuaXgiICJweXBpIiAiY3BhbiIgImhhY2thZ2UiKSkKKyhk ZWZpbmUgaW1wb3J0ZXJzICcoImdudSIgIm5peCIgInB5cGkiICJjcGFuIiAiaGFja2FnZSIgImVs cGEiKSkKIAogKGRlZmluZSAocmVzb2x2ZS1pbXBvcnRlciBuYW1lKQogICAobGV0ICgobW9kdWxl IChyZXNvbHZlLWludGVyZmFjZQpkaWZmIC0tZ2l0IGEvZ3VpeC9zY3JpcHRzL2ltcG9ydC9lbHBh LnNjbSBiL2d1aXgvc2NyaXB0cy9pbXBvcnQvZWxwYS5zY20KbmV3IGZpbGUgbW9kZSAxMDA2NDQK aW5kZXggMDAwMDAwMC4uZDZmMWJhYwotLS0gL2Rldi9udWxsCisrKyBiL2d1aXgvc2NyaXB0cy9p bXBvcnQvZWxwYS5zY20KQEAgLTAsMCArMSw5NyBAQAorOzs7IEdOVSBHdWl4IC0tLSBGdW5jdGlv bmFsIHBhY2thZ2UgbWFuYWdlbWVudCBmb3IgR05VCis7OzsgQ29weXJpZ2h0IMKpIDIwMTUgRmVk ZXJpY28gQmVmZmEgPGJlZmZhQGZiZW5naW5lZXJpbmcuY2g+Cis7OzsKKzs7OyBUaGlzIGZpbGUg aXMgcGFydCBvZiBHTlUgR3VpeC4KKzs7OworOzs7IEdOVSBHdWl4IGlzIGZyZWUgc29mdHdhcmU7 IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKzs7OyB1bmRlciB0aGUg dGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQor Ozs7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhl IExpY2Vuc2UsIG9yIChhdAorOzs7IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKzs7 OworOzs7IEdOVSBHdWl4IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBi ZSB1c2VmdWwsIGJ1dAorOzs7IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhl IGltcGxpZWQgd2FycmFudHkgb2YKKzs7OyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1Ig QSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCis7OzsgR05VIEdlbmVyYWwgUHVibGljIExp Y2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKzs7OworOzs7IFlvdSBzaG91bGQgaGF2ZSByZWNlaXZl ZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCis7OzsgYWxvbmcgd2l0 aCBHTlUgR3VpeC4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4K KworKGRlZmluZS1tb2R1bGUgKGd1aXggc2NyaXB0cyBpbXBvcnQgZWxwYSkKKyAgIzp1c2UtbW9k dWxlIChndWl4IHVpKQorICAjOnVzZS1tb2R1bGUgKGd1aXggdXRpbHMpCisgICM6dXNlLW1vZHVs ZSAoZ3VpeCBpbXBvcnQgZWxwYSkKKyAgIzp1c2UtbW9kdWxlIChndWl4IHNjcmlwdHMgaW1wb3J0 KQorICAjOnVzZS1tb2R1bGUgKHNyZmkgc3JmaS0xKQorICAjOnVzZS1tb2R1bGUgKHNyZmkgc3Jm aS0xMSkKKyAgIzp1c2UtbW9kdWxlIChzcmZpIHNyZmktMzcpCisgICM6dXNlLW1vZHVsZSAoaWNl LTkgbWF0Y2gpCisgICM6dXNlLW1vZHVsZSAoaWNlLTkgZm9ybWF0KQorICAjOmV4cG9ydCAoZ3Vp eC1pbXBvcnQtZWxwYSkpCisKKwwKKzs7OworOzs7IENvbW1hbmQtbGluZSBvcHRpb25zLgorOzs7 CisKKyhkZWZpbmUgJWRlZmF1bHQtb3B0aW9ucworICAnKChyZXBvIC4gImdudSIpKSkKKworKGRl ZmluZSAoc2hvdy1oZWxwKQorICAoZGlzcGxheSAoXyAiVXNhZ2U6IGd1aXggaW1wb3J0IGVscGEg UEFDS0FHRS1OQU1FCitJbXBvcnQgdGhlIGxhdGVzdCBwYWNrYWdlIG5hbWVkIFBBQ0tBR0UtTkFN RSBmcm9tIGFuIEVMUEEgcmVwb3NpdG9yeS5cbiIpKQorICAoZGlzcGxheSAoXyAiCisgIC1hLCAt LWFyY2hpdmU9QVJDSElWRSAgICAgICAgICBzcGVjaWZ5IHRoZSBhcmNoaXZlIHJlcG9zaXRvcnki KSkKKyAgKGRpc3BsYXkgKF8gIgorICAtaCwgLS1oZWxwICAgICAgICAgICAgICAgICAgICAgZGlz cGxheSB0aGlzIGhlbHAgYW5kIGV4aXQiKSkKKyAgKGRpc3BsYXkgKF8gIgorICAtViwgLS12ZXJz aW9uICAgICAgICAgICAgICAgICAgZGlzcGxheSB2ZXJzaW9uIGluZm9ybWF0aW9uIGFuZCBleGl0 IikpCisgIChuZXdsaW5lKQorICAoc2hvdy1idWctcmVwb3J0LWluZm9ybWF0aW9uKSkKKworKGRl ZmluZSAlb3B0aW9ucworICA7OyBTcGVjaWZpY2F0aW9uIG9mIHRoZSBjb21tYW5kLWxpbmUgb3B0 aW9ucy4KKyAgKGNvbnMqIChvcHRpb24gJygjXGggImhlbHAiKSAjZiAjZgorICAgICAgICAgICAg ICAgICAobGFtYmRhIGFyZ3MKKyAgICAgICAgICAgICAgICAgICAoc2hvdy1oZWxwKQorICAgICAg ICAgICAgICAgICAgIChleGl0IDApKSkKKyAgICAgICAgIChvcHRpb24gJygjXFYgInZlcnNpb24i KSAjZiAjZgorICAgICAgICAgICAgICAgICAobGFtYmRhIGFyZ3MKKyAgICAgICAgICAgICAgICAg ICAoc2hvdy12ZXJzaW9uLWFuZC1leGl0ICJndWl4IGltcG9ydCBlbHBhIikpKQorICAgICAgICAg KG9wdGlvbiAnKCNcYSAiYXJjaGl2ZSIpICN0ICNmCisgICAgICAgICAgICAgICAgIChsYW1iZGEg KG9wdCBuYW1lIGFyZyByZXN1bHQpCisgICAgICAgICAgICAgICAgICAgKGFsaXN0LWNvbnMgJ3Jl cG8gYXJnIChhbGlzdC1kZWxldGUgJ3JlcG8gcmVzdWx0KSkpKQorICAgICAgICAgJXN0YW5kYXJk LWltcG9ydC1vcHRpb25zKSkKKworDAorOzs7Cis7OzsgRW50cnkgcG9pbnQuCis7OzsKKworKGRl ZmluZSAoZ3VpeC1pbXBvcnQtZWxwYSAuIGFyZ3MpCisgIChkZWZpbmUgKHBhcnNlLW9wdGlvbnMp CisgICAgOzsgUmV0dXJuIHRoZSBhbGlzdCBvZiBvcHRpb24gdmFsdWVzLgorICAgIChhcmdzLWZv bGQqIGFyZ3MgJW9wdGlvbnMKKyAgICAgICAgICAgICAgICAobGFtYmRhIChvcHQgbmFtZSBhcmcg cmVzdWx0KQorICAgICAgICAgICAgICAgICAgKGxlYXZlIChfICJ+QTogdW5yZWNvZ25pemVkIG9w dGlvbn4lIikgbmFtZSkpCisgICAgICAgICAgICAgICAgKGxhbWJkYSAoYXJnIHJlc3VsdCkKKyAg ICAgICAgICAgICAgICAgIChhbGlzdC1jb25zICdhcmd1bWVudCBhcmcgcmVzdWx0KSkKKyAgICAg ICAgICAgICAgICAlZGVmYXVsdC1vcHRpb25zKSkKKworICAobGV0KiAoKG9wdHMgKHBhcnNlLW9w dGlvbnMpKQorICAgICAgICAgKGFyZ3MgKGZpbHRlci1tYXAgKG1hdGNoLWxhbWJkYQorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICgoJ2FyZ3VtZW50IC4gdmFsdWUpCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHZhbHVlKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfICNm KSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIChyZXZlcnNlIG9wdHMpKSkpCisgICAgKG1h dGNoIGFyZ3MKKyAgICAgICgocGFja2FnZS1uYW1lKQorICAgICAgIChsZXQgKChzZXhwIChlbHBh LT5ndWl4LXBhY2thZ2UgcGFja2FnZS1uYW1lIChhc3NvYy1yZWYgb3B0cyAncmVwbykpKSkKKyAg ICAgICAgICh1bmxlc3Mgc2V4cAorICAgICAgICAgICAobGVhdmUgKF8gImZhaWxlZCB0byBkb3du bG9hZCBwYWNrYWdlICd+YSd+JSIpIHBhY2thZ2UtbmFtZSkpCisgICAgICAgICBzZXhwKSkKKyAg ICAgICgoKQorICAgICAgIChsZWF2ZSAoXyAidG9vIGZldyBhcmd1bWVudHN+JSIpKSkKKyAgICAg ICgobWFueSAuLi4pCisgICAgICAgKGxlYXZlIChfICJ0b28gbWFueSBhcmd1bWVudHN+JSIpKSkp KSkKKworOzs7IGVscGEuc2NtIGVuZHMgaGVyZQpkaWZmIC0tZ2l0IGEvdGVzdHMvZWxwYS5zY20g Yi90ZXN0cy9lbHBhLnNjbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZDI5 MTRiCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvZWxwYS5zY20KQEAgLTAsMCArMSwxMDkgQEAK Kzs7OyBHTlUgR3VpeCAtLS0gRnVuY3Rpb25hbCBwYWNrYWdlIG1hbmFnZW1lbnQgZm9yIEdOVQor Ozs7IENvcHlyaWdodCDCqSAyMDE1IEZlZGVyaWNvIEJlZmZhIDxiZWZmYUBmYmVuZ2luZWVyaW5n LmNoPgorOzs7Cis7OzsgVGhpcyBmaWxlIGlzIHBhcnQgb2YgR05VIEd1aXguCis7OzsKKzs7OyBH TlUgR3VpeCBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3Ig bW9kaWZ5IGl0Cis7OzsgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMg TGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKzs7OyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u OyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQKKzs7OyB5b3VyIG9wdGlv bikgYW55IGxhdGVyIHZlcnNpb24uCis7OzsKKzs7OyBHTlUgR3VpeCBpcyBkaXN0cmlidXRlZCBp biB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKzs7OyBXSVRIT1VUIEFOWSBX QVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCis7OzsgTUVSQ0hB TlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQor Ozs7IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCis7OzsKKzs7 OyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJs aWMgTGljZW5zZQorOzs7IGFsb25nIHdpdGggR05VIEd1aXguICBJZiBub3QsIHNlZSA8aHR0cDov L3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKyhkZWZpbmUtbW9kdWxlICh0ZXN0LWVscGEpCisg ICM6dXNlLW1vZHVsZSAoZ3VpeCBpbXBvcnQgZWxwYSkKKyAgIzp1c2UtbW9kdWxlIChndWl4IHRl c3RzKQorICAjOnVzZS1tb2R1bGUgKHNyZmkgc3JmaS0xKQorICAjOnVzZS1tb2R1bGUgKHNyZmkg c3JmaS02NCkKKyAgIzp1c2UtbW9kdWxlIChpY2UtOSBtYXRjaCkpCisKKyhkZWZpbmUgZWxwYS1t b2NrLWFyY2hpdmUKKyAgJygxCisgICAgKGFjZS13aW5kb3cgLgorICAgICAgICAgICAgICAgIFso MCA5IDApCisgICAgICAgICAgICAgICAgICgoYXZ5CisgICAgICAgICAgICAgICAgICAgKDAgMiAw KSkpCisgICAgICAgICAgICAgICAgICJRdWlja2x5IHN3aXRjaCB3aW5kb3dzLiIgc2luZ2xlCisg ICAgICAgICAgICAgICAgICgoOnVybCAuICJodHRwczovL2dpdGh1Yi5jb20vYWJvLWFiby9hY2Ut d2luZG93IikKKyAgICAgICAgICAgICAgICAgICg6a2V5d29yZHMgIndpbmRvdyIgImxvY2F0aW9u IikpXSkKKyAgICAoYXVjdGV4IC4KKyAgICAgICAgICAgIFsoMTEgODggNikKKyAgICAgICAgICAg ICBuaWwgIkludGVncmF0ZWQgZW52aXJvbm1lbnQgZm9yICpUZVgqIiB0YXIKKyAgICAgICAgICAg ICAoKDp1cmwgLiAiaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL2F1Y3RleC8iKSldKSkpCisK KyhkZWZpbmUgYXVjdGV4LXJlYWRtZS1tb2NrICJUaGlzIGlzIHRoZSBBVUNUZVggZGVzY3JpcHRp b24uIikKKworKGRlZmluZSogKGVscGEtcGFja2FnZS1pbmZvLW1vY2sgbmFtZSAjOm9wdGlvbmFs IChyZXBvICJnbnUiKSkKKyAgIlNpbXVsYXRlIHJldHJpZXZhbCBvZiAnYXJjaGl2ZS1jb250ZW50 cycgZmlsZSBmcm9tIFJFUE8gYW5kIGV4dHJhY3Rpb24gb2YKK2luZm9ybWF0aW9uIGFib3V0IHBh Y2thZ2UgTkFNRS4gKEZ1bmN0aW9uICdlbHBhLXBhY2thZ2UtaW5mbycuKSIKKyAgKGxldCogKChh cmNoaXZlIGVscGEtbW9jay1hcmNoaXZlKQorICAgICAgICAgKGluZm8gKGZpbHRlciAobGFtYmRh IChwKSAoZXE/IChmaXJzdCBwKSAoc3RyaW5nLT5zeW1ib2wgbmFtZSkpKQorICAgICAgICAgICAg ICAgICAgICAgICAoY2RyIGFyY2hpdmUpKSkpCisgICAgKGlmIChwYWlyPyBpbmZvKSAoZmlyc3Qg aW5mbykgI2YpKSkKKworKGRlZmluZSBlbHBhLXZlcnNpb24tPnN0cmluZworICAoQEAgKGd1aXgg aW1wb3J0IGVscGEpIGVscGEtdmVyc2lvbi0+c3RyaW5nKSkKKworKGRlZmluZSBwYWNrYWdlLXNv dXJjZS11cmwKKyAgKEBAIChndWl4IGltcG9ydCBlbHBhKSBwYWNrYWdlLXNvdXJjZS11cmwpKQor CisoZGVmaW5lIG5pbC0+ZW1wdHkKKyAgKEBAIChndWl4IGltcG9ydCBlbHBhKSBuaWwtPmVtcHR5 KSkKKworKGRlZmluZSBwYWNrYWdlLWhvbWUtcGFnZQorICAoQEAgKGd1aXggaW1wb3J0IGVscGEp IHBhY2thZ2UtaG9tZS1wYWdlKSkKKworKGRlZmluZSBtYWtlLWVscGEtcGFja2FnZQorICAoQEAg KGd1aXggaW1wb3J0IGVscGEpIG1ha2UtZWxwYS1wYWNrYWdlKSkKKworKHRlc3QtYmVnaW4gImVs cGEiKQorCisoZGVmaW5lIChldmFsLXRlc3Qtd2l0aC1lbHBhIHBrZykKKyAgKG1vY2sKKyAgIDs7 IHJlcGxhY2UgdGhlIHR3byBmZXRjaGluZyBmdW5jdGlvbnMKKyAgICgoZ3VpeCBpbXBvcnQgZWxw YSkgZmV0Y2gtZWxwYS1wYWNrYWdlCisgICAgKGxhbWJkYSogKG5hbWUgIzpvcHRpb25hbCAocmVw byAiZ251IikpCisgICAgICAobGV0ICgocGtnIChlbHBhLXBhY2thZ2UtaW5mby1tb2NrIG5hbWUg cmVwbykpKQorICAgICAgICAobWF0Y2ggcGtnCisgICAgICAgICAgKChuYW1lIHZlcnNpb24gcmVx cyBzeW5vcHNpcyBraW5kIC4gcmVzdCkKKyAgICAgICAgICAgKGxldCogKChuYW1lIChzeW1ib2wt PnN0cmluZyBuYW1lKSkKKyAgICAgICAgICAgICAgICAgICh2ZXIgKGVscGEtdmVyc2lvbi0+c3Ry aW5nIHZlcnNpb24pKQorICAgICAgICAgICAgICAgICAgKHVybCAocGFja2FnZS1zb3VyY2UtdXJs IGtpbmQgbmFtZSB2ZXIgcmVwbykpKQorICAgICAgICAgICAgIChtYWtlLWVscGEtcGFja2FnZSBu YW1lIHZlcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobmlsLT5lbXB0eSByZXFz KSBzeW5vcHNpcyBraW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChwYWNrYWdl LWhvbWUtcGFnZSAoZmlyc3QgcmVzdCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGF1Y3RleC1yZWFkbWUtbW9jaworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cmwp KSkKKyAgICAgICAgICAoXyAjZikpKSkpCisgICAobWF0Y2ggKGVscGEtPmd1aXgtcGFja2FnZSBw a2cpCisgICAgICgoJ3BhY2thZ2UKKyAgICAgICAgKCduYW1lICJlbWFjcy1hdWN0ZXgiKQorICAg ICAgICAoJ3ZlcnNpb24gIjExLjg4LjYiKQorICAgICAgICAoJ3NvdXJjZQorICAgICAgICAgKCdv cmlnaW4KKyAgICAgICAgICAgKCdtZXRob2QgJ3VybC1mZXRjaCkKKyAgICAgICAgICAgKCd1cmkg KCdzdHJpbmctYXBwZW5kCisgICAgICAgICAgICAgICAgICAiaHR0cDovL2VscGEuZ251Lm9yZy9w YWNrYWdlcy9hdWN0ZXgtIiAndmVyc2lvbiAiLnRhciIpKQorICAgICAgICAgICAoJ3NoYTI1NiAo J2Jhc2UzMiAoPyBzdHJpbmc/IGhhc2gpKSkpKQorICAgICAgICAoJ2J1aWxkLXN5c3RlbSAnZW1h Y3MtYnVpbGQtc3lzdGVtKQorICAgICAgICAoJ2hvbWUtcGFnZSAiaHR0cDovL3d3dy5nbnUub3Jn L3NvZnR3YXJlL2F1Y3RleC8iKQorICAgICAgICAoJ3N5bm9wc2lzICJJbnRlZ3JhdGVkIGVudmly b25tZW50IGZvciAqVGVYKiIpCisgICAgICAgICgnZGVzY3JpcHRpb24gKD8gc3RyaW5nPykpCisg ICAgICAgICgnbGljZW5zZSAnbGljZW5zZTpncGwzKykpCisgICAgICAjdCkKKyAgICAgKHgKKyAg ICAgIChwayAnZmFpbCB4ICNmKSkpKSkKKworKHRlc3QtYXNzZXJ0ICJlbHBhLT5ndWl4LXBhY2th Z2UgdGVzdCAxIgorICAoZXZhbC10ZXN0LXdpdGgtZWxwYSAiYXVjdGV4IikpCisKKyh0ZXN0LWVu ZCAiZWxwYSIpCisKKwwKKyhleGl0ICg9ICh0ZXN0LXJ1bm5lci1mYWlsLWNvdW50ICh0ZXN0LXJ1 bm5lci1jdXJyZW50KSkgMCkpCi0tIAoyLjIuMQoK --485b397dd231c9b296051945cf2a--