From mboxrd@z Thu Jan 1 00:00:00 1970 From: Federico Beffa Subject: Re: hackage importer Date: Fri, 5 Jun 2015 17:19:34 +0200 Message-ID: References: <87k2yiqqaw.fsf@gnu.org> <871tkbdhwc.fsf@gnu.org> <871tk7ykfj.fsf@gnu.org> <87zj6t9tq5.fsf@gnu.org> <87pp6j6t85.fsf@gnu.org> <87sia6pq6y.fsf@gnu.org> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary=001a11403fdecf6f780517c6d107 Return-path: Received: from eggs.gnu.org ([2001:4830:134:3::10]:60887) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Z0tPL-00084a-2Z for guix-devel@gnu.org; Fri, 05 Jun 2015 11:19:49 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1Z0tPD-0001KK-S2 for guix-devel@gnu.org; Fri, 05 Jun 2015 11:19:42 -0400 In-Reply-To: <87sia6pq6y.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 --001a11403fdecf6f780517c6d107 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: quoted-printable On Fri, Jun 5, 2015 at 9:30 AM, Ludovic Court=C3=A8s wrote: >> I've removed the test with TABs because the Cabal documentation says >> explicitly that they are not allowed. >> https://www.haskell.org/cabal/users-guide/developing-packages.html#packa= ge-descriptions > > But are they actually used in practice? When I prepared the very first version of the importer I did find one case among all the ones I tried. I believe that now that package has been update to a new version and doesn't include TABs anymore. > [...] > >> +(define (make-stack) >> + "Creates a simple stack closure. Actions on the generated stack are >> +requested by calling it with one of the following symbols as the first >> +argument: 'empty?, 'push!, 'top, 'pop! and 'clear!. The action 'push! = is the >> +only one requiring a second argument corresponding to the object to be = added >> +to the stack." >> + (let ((stack '())) >> + (lambda (msg . args) >> + (cond ((eqv? msg 'empty?) (null? stack)) >> + ((eqv? msg 'push!) (set! stack (cons (first args) stack))) >> + ((eqv? msg 'top) (if (null? stack) '() (first stack))) >> + ((eqv? msg 'pop!) (match stack >> + ((e r ...) (set! stack (cdr stack)) e) >> + (_ #f))) >> + ((eqv? msg 'clear!) (set! stack '())) >> + (else #f))))) > > Fair enough. :-) I wonder what happens exactly when trying to return > monadic values in the parser. Given that the parser repeatedly calls the tunk generated by 'make-lexer' without passing any state or knowing anything about to which monad it may belong to, I thought that it would not work. But, as you see, I'm new to Scheme, new to monads, and new to Lisp in general. > >> +;; Stack to track the structure of nested blocks >> +(define context-stack (make-stack)) > > What about making it either a SRFI-39 parameter, or a parameter to > =E2=80=98make-cabal-parser=E2=80=99? I made it a parameter. Thanks for suggesting it! It made me realize what they are really used for :-) Do you think it is correct to say that they serve the purpose of special variables in Lisp? (I'm looking a little bit into Common Lisp as well.) >> +(define* (hackage->guix-package package-name #:key >> + (include-test-dependencies? #t) >> + (read-from-stdin? #f) >> + (cabal-environment '())) > > Instead of #:read-from-stdin?, what about adding a #:port argument? > That way, it would either read from PORT, or fetch from Hackage. That > seems more idiomatic and more flexible. Absolutely! Changed. > > Also please mention it in the docstring. Done. > >> -(test-assert "hackage->guix-package test 3" >> - (eval-test-with-cabal test-cabal-3)) >> - >> -(test-assert "conditional->sexp-like" >> - (match >> - (eval-cabal-keywords >> - (conditional->sexp-like test-cond-1) >> - '(("debug" . "False"))) >> - (('and ('or ('string-match "darwin" ('%current-system)) ('not '#f))= '#t) >> - #t) >> - (x >> - (pk 'fail x #f)))) > > I=E2=80=99m a bit scared when we add new code *and* remove tests. ;-) > > Could you add a couple of representative tests? I=E2=80=99m sure you ran= tests > by hand at the REPL, so it should be a matter of adding them in the file. The reason for deleting the test is that that particular function doesn't exist anymore. The functionality that it did provide is now integrated in the parser. So, I've added one new test which exercises 'read-cabal' with a bunch of nested conditionals. Thanks for the review! Fede --001a11403fdecf6f780517c6d107 Content-Type: text/x-diff; charset=UTF-8; name="0001-import-hackage-Refactor-parsing-code-and-add-new-opt.patch" Content-Disposition: attachment; filename="0001-import-hackage-Refactor-parsing-code-and-add-new-opt.patch" Content-Transfer-Encoding: base64 X-Attachment-Id: f_iajqea920 RnJvbSA4YTI4ZWQwZjNjMzA3N2NlMTJkNDkyNGM1OWUzMTdjNTJhNjhhNzdlIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBGZWRlcmljbyBCZWZmYSA8YmVmZmFAZmJlbmdpbmVlcmluZy5j aD4KRGF0ZTogU3VuLCAyNiBBcHIgMjAxNSAxMToyMjoyOSArMDIwMApTdWJqZWN0OiBbUEFUQ0hd IGltcG9ydDogaGFja2FnZTogUmVmYWN0b3IgcGFyc2luZyBjb2RlIGFuZCBhZGQgbmV3IG9wdGlv bnMuCgoqIGd1aXgvaW1wb3J0L2NhYmFsLnNjbTogTmV3IGZpbGUuCiogZ3VpeC9pbXBvcnQvaGFj a2FnZS5zY206IFVwZGF0ZSB0byB1c2UgdGhlIG5ldyBDYWJhbCBwYXJzaW5nIG1vZHVsZS4KKiB0 ZXN0cy9oYWNrYWdlLnNjbTogVXBkYXRlIHRlc3RzLgoqIGd1aXgvc2NyaXB0cy9pbXBvcnQvaGFj a2FnZS5zY206IEFkZCBuZXcgJy0tY2FiYWwtZW52aXJvbm1lbnQnIGFuZCAnLS1zdGRpbicKICBv cHRpb25zLgoqIGRvYy9ndWl4LnRleGk6IC4uLiBhbmQgZG9jdW1lbnQgdGhlbS4KKiBNYWtlZmls ZS5hbSAoTU9EVUxFUyk6IEFkZCAnZ3VpeC9pbXBvcnQvY2FiYWwuc2NtJywKICAnZ3VpeC9pbXBv cnQvaGFja2FnZS5zY20nIGFuZCAnZ3VpeC9zY3JpcHRzL2ltcG9ydC9oYWNrYWdlLnNjbScuCiAg KFNDTV9URVNUUyk6IEFkZCAndGVzdHMvaGFja2FnZS5zY20nLgotLS0KIE1ha2VmaWxlLmFtICAg ICAgICAgICAgICAgICAgICAgfCAgIDQgKwogZG9jL2d1aXgudGV4aSAgICAgICAgICAgICAgICAg ICB8ICAyMiArLQogZ3VpeC9pbXBvcnQvY2FiYWwuc2NtICAgICAgICAgICB8IDgxNSArKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCiBndWl4L2ltcG9ydC9oYWNrYWdlLnNj bSAgICAgICAgIHwgNzAzICsrKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIGd1aXgv c2NyaXB0cy9pbXBvcnQvaGFja2FnZS5zY20gfCAgNjYgKysrLQogdGVzdHMvaGFja2FnZS5zY20g ICAgICAgICAgICAgICB8ICA4OCArKystLQogNiBmaWxlcyBjaGFuZ2VkLCAxMDE3IGluc2VydGlv bnMoKyksIDY4MSBkZWxldGlvbnMoLSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBndWl4L2ltcG9ydC9j YWJhbC5zY20KCmRpZmYgLS1naXQgYS9NYWtlZmlsZS5hbSBiL01ha2VmaWxlLmFtCmluZGV4IGQ1 NGUyODEuLmI0MmE3ZjUgMTAwNjQ0Ci0tLSBhL01ha2VmaWxlLmFtCisrKyBiL01ha2VmaWxlLmFt CkBAIC04OSw2ICs4OSw4IEBAIE1PRFVMRVMgPQkJCQkJXAogICBndWl4L2ltcG9ydC91dGlscy5z Y20JCQkJXAogICBndWl4L2ltcG9ydC9nbnUuc2NtCQkJCVwKICAgZ3VpeC9pbXBvcnQvc25peC5z Y20JCQkJXAorICBndWl4L2ltcG9ydC9jYWJhbC5zY20JCQkJXAorICBndWl4L2ltcG9ydC9oYWNr YWdlLnNjbQkJCVwKICAgZ3VpeC9zY3JpcHRzL2Rvd25sb2FkLnNjbQkJCVwKICAgZ3VpeC9zY3Jp cHRzL2J1aWxkLnNjbQkJCVwKICAgZ3VpeC9zY3JpcHRzL2FyY2hpdmUuc2NtCQkJXApAQCAtMTA0 LDYgKzEwNiw3IEBAIE1PRFVMRVMgPQkJCQkJXAogICBndWl4L3NjcmlwdHMvbGludC5zY20JCQkJ XAogICBndWl4L3NjcmlwdHMvaW1wb3J0L2dudS5zY20JCQlcCiAgIGd1aXgvc2NyaXB0cy9pbXBv cnQvbml4LnNjbQkJCVwKKyAgZ3VpeC9zY3JpcHRzL2ltcG9ydC9oYWNrYWdlLnNjbQkJXAogICBn dWl4L3NjcmlwdHMvZW52aXJvbm1lbnQuc2NtCQkJXAogICBndWl4L3NjcmlwdHMvcHVibGlzaC5z Y20JCQlcCiAgIGd1aXguc2NtCQkJCQlcCkBAIC0xNzMsNiArMTc2LDcgQEAgU0NNX1RFU1RTID0J CQkJCVwKICAgdGVzdHMvYnVpbGQtdXRpbHMuc2NtCQkJCVwKICAgdGVzdHMvcGFja2FnZXMuc2Nt CQkJCVwKICAgdGVzdHMvc25peC5zY20JCQkJXAorICB0ZXN0cy9oYWNrYWdlLnNjbQkJCQlcCiAg IHRlc3RzL3N0b3JlLnNjbQkJCQlcCiAgIHRlc3RzL21vbmFkcy5zY20JCQkJXAogICB0ZXN0cy9n ZXhwLnNjbQkJCQlcCmRpZmYgLS1naXQgYS9kb2MvZ3VpeC50ZXhpIGIvZG9jL2d1aXgudGV4aQpp bmRleCA3MDYwNGI3Li5jNzBmODMzIDEwMDY0NAotLS0gYS9kb2MvZ3VpeC50ZXhpCisrKyBiL2Rv Yy9ndWl4LnRleGkKQEAgLTMxOTksMTYgKzMxOTksMzAgQEAgZGVwZW5kZW5jaWVzLgogU3BlY2lm aWMgY29tbWFuZC1saW5lIG9wdGlvbnMgYXJlOgogCiBAdGFibGUgQGNvZGUKK0BpdGVtIC0tc3Rk aW4KK0BpdGVteCAtcworUmVhZCBhIENhYmFsIGZpbGUgZnJvbSB0aGUgc3RhbmRhcmQgaW5wdXQu CiBAaXRlbSAtLW5vLXRlc3QtZGVwZW5kZW5jaWVzCiBAaXRlbXggLXQKLURvIG5vdCBpbmNsdWRl IGRlcGVuZGVuY2llcyBvbmx5IHJlcXVpcmVkIHRvIHJ1biB0aGUgdGVzdCBzdWl0ZS4KK0RvIG5v dCBpbmNsdWRlIGRlcGVuZGVuY2llcyByZXF1aXJlZCBieSB0aGUgdGVzdCBzdWl0ZXMgb25seS4K K0BpdGVtIC0tY2FiYWwtZW52aXJvbm1lbnQ9QHZhcnthbGlzdH0KK0BpdGVteCAtZSBAdmFye2Fs aXN0fQorQHZhcnthbGlzdH0gaXMgYSBTY2hlbWUgYWxpc3QgZGVmaW5pbmcgdGhlIGVudmlyb25t ZW50IGluIHdoaWNoIHRoZQorQ2FiYWwgY29uZGl0aW9uYWxzIGFyZSBldmFsdWF0ZWQuICBUaGUg YWNjZXB0ZWQga2V5cyBhcmU6IEBjb2Rle29zfSwKK0Bjb2Rle2FyY2h9LCBAY29kZXtpbXBsfSBh bmQgYSBzdHJpbmcgcmVwcmVzZW50aW5nIHRoZSBuYW1lIG9mIGEgZmxhZy4KK1RoZSB2YWx1ZSBh c3NvY2lhdGVkIHdpdGggYSBmbGFnIGhhcyB0byBiZSBlaXRoZXIgdGhlIHN5bWJvbAorQGNvZGV7 dHJ1ZX0gb3IgQGNvZGV7ZmFsc2V9LiAgVGhlIHZhbHVlIGFzc29jaWF0ZWQgd2l0aCBvdGhlciBr ZXlzCitoYXMgdG8gY29uZm9ybSB0byB0aGUgQ2FiYWwgZmlsZSBmb3JtYXQgZGVmaW5pdGlvbi4g IFRoZSBkZWZhdWx0IHZhbHVlCithc3NvY2lhdGVkIHdpdGggdGhlIGtleXMgQGNvZGV7b3N9LCBA Y29kZXthcmNofSBhbmQgQGNvZGV7aW1wbH0gaXMKK0BzYW1we2xpbnV4fSwgQHNhbXB7eDg2XzY0 fSBhbmQgQHNhbXB7Z2hjfSByZXNwZWN0aXZlbHkuCiBAZW5kIHRhYmxlCiAKIFRoZSBjb21tYW5k IGJlbG93IGltcG9ydHMgbWV0YS1kYXRhIGZvciB0aGUgbGF0ZXN0IHZlcnNpb24gb2YgdGhlCi1A Y29kZXtIVFRQfSBIYXNrZWxsIHBhY2thZ2Ugd2l0aG91dCBpbmNsdWRpbmcgdGVzdCBkZXBlbmRl bmNpZXM6CitAY29kZXtIVFRQfSBIYXNrZWxsIHBhY2thZ2Ugd2l0aG91dCBpbmNsdWRpbmcgdGVz dCBkZXBlbmRlbmNpZXMgYW5kCitzcGVjaWZ5aW5nIHRoZSB2YWx1ZSBvZiB0aGUgZmxhZyBAc2Ft cHtuZXR3b3JrLXVyaX0gYXMgQGNvZGV7ZmFsc2V9OgogCiBAZXhhbXBsZQotZ3VpeCBpbXBvcnQg aGFja2FnZSAtdCBIVFRQCitndWl4IGltcG9ydCBoYWNrYWdlIC10IC1lICInKChcIm5ldHdvcmst dXJpXCIgLiBmYWxzZSkpIiBIVFRQCiBAZW5kIGV4YW1wbGUKIAogQSBzcGVjaWZpYyBwYWNrYWdl IHZlcnNpb24gbWF5IG9wdGlvbmFsbHkgYmUgc3BlY2lmaWVkIGJ5IGZvbGxvd2luZyB0aGUKQEAg LTMyMTcsOCArMzIzMSw2IEBAIHBhY2thZ2UgbmFtZSBieSBhIGh5cGhlbiBhbmQgYSB2ZXJzaW9u IG51bWJlciBhcyBpbiB0aGUgZm9sbG93aW5nIGV4YW1wbGU6CiBAZXhhbXBsZQogZ3VpeCBpbXBv cnQgaGFja2FnZSBtdGwtMi4xLjMuMQogQGVuZCBleGFtcGxlCi0KLUN1cnJlbnRseSBvbmx5IGlu ZGVudGF0aW9uIHN0cnVjdHVyZWQgQ2FiYWwgZmlsZXMgYXJlIHN1cHBvcnRlZC4KIEBlbmQgdGFi bGUKIAogVGhlIHN0cnVjdHVyZSBvZiB0aGUgQGNvbW1hbmR7Z3VpeCBpbXBvcnR9IGNvZGUgaXMg bW9kdWxhci4gIEl0IHdvdWxkIGJlCmRpZmYgLS1naXQgYS9ndWl4L2ltcG9ydC9jYWJhbC5zY20g Yi9ndWl4L2ltcG9ydC9jYWJhbC5zY20KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw MC4uZGZlYmE4OAotLS0gL2Rldi9udWxsCisrKyBiL2d1aXgvaW1wb3J0L2NhYmFsLnNjbQpAQCAt MCwwICsxLDgxNSBAQAorOzs7IEdOVSBHdWl4IC0tLSBGdW5jdGlvbmFsIHBhY2thZ2UgbWFuYWdl bWVudCBmb3IgR05VCis7OzsgQ29weXJpZ2h0IMKpIDIwMTUgRmVkZXJpY28gQmVmZmEgPGJlZmZh QGZiZW5naW5lZXJpbmcuY2g+Cis7OzsKKzs7OyBUaGlzIGZpbGUgaXMgcGFydCBvZiBHTlUgR3Vp eC4KKzs7OworOzs7IEdOVSBHdWl4IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli dXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKzs7OyB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBH ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorOzs7IHRoZSBGcmVlIFNvZnR3 YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdAor Ozs7IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKzs7OworOzs7IEdOVSBHdWl4IGlz IGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorOzs7 IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkg b2YKKzs7OyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP U0UuICBTZWUgdGhlCis7OzsgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0 YWlscy4KKzs7OworOzs7IFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdO VSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCis7OzsgYWxvbmcgd2l0aCBHTlUgR3VpeC4gIElmIG5v dCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworKGRlZmluZS1tb2R1bGUg KGd1aXggaW1wb3J0IGNhYmFsKQorICAjOnVzZS1tb2R1bGUgKGljZS05IG1hdGNoKQorICAjOnVz ZS1tb2R1bGUgKGljZS05IHJlZ2V4KQorICAjOnVzZS1tb2R1bGUgKGljZS05IHJkZWxpbSkKKyAg Izp1c2UtbW9kdWxlIChpY2UtOSByZWNlaXZlKQorICAjOnVzZS1tb2R1bGUgKHNyZmkgc3JmaS0y NikKKyAgIzp1c2UtbW9kdWxlIChzcmZpIHNyZmktMzQpCisgICM6dXNlLW1vZHVsZSAoc3JmaSBz cmZpLTM1KQorICAjOnVzZS1tb2R1bGUgKHNyZmkgc3JmaS0xMSkKKyAgIzp1c2UtbW9kdWxlIChz cmZpIHNyZmktMSkKKyAgIzp1c2UtbW9kdWxlIChzcmZpIHNyZmktOSkKKyAgIzp1c2UtbW9kdWxl IChzcmZpIHNyZmktOSBnbnUpCisgICM6dXNlLW1vZHVsZSAoc3lzdGVtIGJhc2UgbGFscikKKyAg Izp1c2UtbW9kdWxlIChybnJzIGVudW1zKQorICAjOmV4cG9ydCAocmVhZC1jYWJhbAorICAgICAg ICAgICAgZXZhbC1jYWJhbAorICAgICAgICAgICAgCisgICAgICAgICAgICBjYWJhbC1wYWNrYWdl PworICAgICAgICAgICAgY2FiYWwtcGFja2FnZS1uYW1lCisgICAgICAgICAgICBjYWJhbC1wYWNr YWdlLXZlcnNpb24KKyAgICAgICAgICAgIGNhYmFsLXBhY2thZ2UtbGljZW5zZQorICAgICAgICAg ICAgY2FiYWwtcGFja2FnZS1ob21lLXBhZ2UKKyAgICAgICAgICAgIGNhYmFsLXBhY2thZ2Utc291 cmNlLXJlcG9zaXRvcnkKKyAgICAgICAgICAgIGNhYmFsLXBhY2thZ2Utc3lub3BzaXMKKyAgICAg ICAgICAgIGNhYmFsLXBhY2thZ2UtZGVzY3JpcHRpb24KKyAgICAgICAgICAgIGNhYmFsLXBhY2th Z2UtZXhlY3V0YWJsZXMKKyAgICAgICAgICAgIGNhYmFsLXBhY2thZ2UtbGlicmFyeQorICAgICAg ICAgICAgY2FiYWwtcGFja2FnZS10ZXN0LXN1aXRlcworICAgICAgICAgICAgY2FiYWwtcGFja2Fn ZS1mbGFncworICAgICAgICAgICAgY2FiYWwtcGFja2FnZS1ldmFsLWVudmlyb25tZW50CisKKyAg ICAgICAgICAgIGNhYmFsLXNvdXJjZS1yZXBvc2l0b3J5PworICAgICAgICAgICAgY2FiYWwtc291 cmNlLXJlcG9zaXRvcnktdXNlLWNhc2UKKyAgICAgICAgICAgIGNhYmFsLXNvdXJjZS1yZXBvc2l0 b3J5LXR5cGUKKyAgICAgICAgICAgIGNhYmFsLXNvdXJjZS1yZXBvc2l0b3J5LWxvY2F0aW9uCisK KyAgICAgICAgICAgIGNhYmFsLWZsYWc/CisgICAgICAgICAgICBjYWJhbC1mbGFnLW5hbWUKKyAg ICAgICAgICAgIGNhYmFsLWZsYWctZGVzY3JpcHRpb24KKyAgICAgICAgICAgIGNhYmFsLWZsYWct ZGVmYXVsdAorICAgICAgICAgICAgY2FiYWwtZmxhZy1tYW51YWwKKworICAgICAgICAgICAgY2Fi YWwtZGVwZW5kZW5jeT8KKyAgICAgICAgICAgIGNhYmFsLWRlcGVuZGVuY3ktbmFtZQorICAgICAg ICAgICAgY2FiYWwtZGVwZW5kZW5jeS12ZXJzaW9uCisKKyAgICAgICAgICAgIGNhYmFsLWV4ZWN1 dGFibGU/CisgICAgICAgICAgICBjYWJhbC1leGVjdXRhYmxlLW5hbWUKKyAgICAgICAgICAgIGNh YmFsLWV4ZWN1dGFibGUtZGVwZW5kZW5jaWVzCisKKyAgICAgICAgICAgIGNhYmFsLWxpYnJhcnk/ CisgICAgICAgICAgICBjYWJhbC1saWJyYXJ5LWRlcGVuZGVuY2llcworCisgICAgICAgICAgICBj YWJhbC10ZXN0LXN1aXRlPworICAgICAgICAgICAgY2FiYWwtdGVzdC1zdWl0ZS1uYW1lCisgICAg ICAgICAgICBjYWJhbC10ZXN0LXN1aXRlLWRlcGVuZGVuY2llcykpCisKKzs7IFBhcnQgMToKKzs7 Cis7OyBGdW5jdGlvbnMgdXNlZCB0byByZWFkIGEgQ2FiYWwgZmlsZS4KKworOzsgQ29tbWVudDoK Kzs7Cis7OyBUaGUgdXNlIG9mIHZpcnR1YWwgY2xvc2luZyBicmFjZXMgVkNDVVJMWSBhbmQgc29t ZSBsZXhlciBmdW5jdGlvbnMgd2VyZQorOzsgaW5zcGlyZWQgZnJvbSBodHRwOi8vaGFja2FnZS5o YXNrZWxsLm9yZy9wYWNrYWdlL2hhc2tlbGwtc3JjCisKKzs7IE9iamVjdCBjb250YWluaW5nIGlu Zm9ybWF0aW9uIGFib3V0IHRoZSBzdHJ1Y3R1cmUgb2YgYSBibG9jazogKGkpIGRlbGltaXRlZAor OzsgYnkgYnJhY2VzIG9yIGJ5IGluZGVudGF0aW9uLCAoaWkpIG1pbmltdW0gaW5kZW50YXRpb24u CisoZGVmaW5lLXJlY29yZC10eXBlICA8cGFyc2UtY29udGV4dD4KKyAgKG1ha2UtcGFyc2UtY29u dGV4dCBtb2RlIGluZGVudGF0aW9uKQorICBwYXJzZS1jb250ZXh0PworICAobW9kZSBwYXJzZS1j b250ZXh0LW1vZGUpICAgICAgICAgICAgICAgIDsgJ2xheW91dCBvciAnbm8tbGF5b3V0CisgIChp bmRlbnRhdGlvbiBwYXJzZS1jb250ZXh0LWluZGVudGF0aW9uKSkgOyAjZiBmb3IgJ25vLWxheW91 dAorCis7OyA8cGFyc2UtY29udGV4dD4gbW9kZSBzZXQgdW5pdmVyc2UKKyhkZWZpbmUtZW51bWVy YXRpb24gY29udGV4dCAobGF5b3V0IG5vLWxheW91dCkgbWFrZS1jb250ZXh0KQorCisoZGVmaW5l IChtYWtlLXN0YWNrKQorICAiQ3JlYXRlcyBhIHNpbXBsZSBzdGFjayBjbG9zdXJlLiAgQWN0aW9u cyBvbiB0aGUgZ2VuZXJhdGVkIHN0YWNrIGFyZQorcmVxdWVzdGVkIGJ5IGNhbGxpbmcgaXQgd2l0 aCBvbmUgb2YgdGhlIGZvbGxvd2luZyBzeW1ib2xzIGFzIHRoZSBmaXJzdAorYXJndW1lbnQ6ICdl bXB0eT8sICdwdXNoISwgJ3RvcCwgJ3BvcCEgYW5kICdjbGVhciEuICBUaGUgYWN0aW9uICdwdXNo ISBpcyB0aGUKK29ubHkgb25lIHJlcXVpcmluZyBhIHNlY29uZCBhcmd1bWVudCBjb3JyZXNwb25k aW5nIHRvIHRoZSBvYmplY3QgdG8gYmUgYWRkZWQKK3RvIHRoZSBzdGFjay4iCisgIChsZXQgKChz dGFjayAnKCkpKQorICAgIChsYW1iZGEgKG1zZyAuIGFyZ3MpCisgICAgICAoY29uZCAoKGVxdj8g bXNnICdlbXB0eT8pIChudWxsPyBzdGFjaykpCisgICAgICAgICAgICAoKGVxdj8gbXNnICdwdXNo ISkgKHNldCEgc3RhY2sgKGNvbnMgKGZpcnN0IGFyZ3MpIHN0YWNrKSkpCisgICAgICAgICAgICAo KGVxdj8gbXNnICd0b3ApIChpZiAobnVsbD8gc3RhY2spICcoKSAoZmlyc3Qgc3RhY2spKSkKKyAg ICAgICAgICAgICgoZXF2PyBtc2cgJ3BvcCEpIChtYXRjaCBzdGFjaworICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAoKGUgciAuLi4pIChzZXQhIHN0YWNrIChjZHIgc3RhY2spKSBlKQor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoXyAjZikpKQorICAgICAgICAgICAgKChl cXY/IG1zZyAnY2xlYXIhKSAoc2V0ISBzdGFjayAnKCkpKQorICAgICAgICAgICAgKGVsc2UgI2Yp KSkpKQorCis7OyBTdGFjayB0byB0cmFjayB0aGUgc3RydWN0dXJlIG9mIG5lc3RlZCBibG9ja3Mg YW5kIHNpbXBsZSBpbnRlcmZhY2UKKyhkZWZpbmUgY29udGV4dC1zdGFjayAobWFrZS1wYXJhbWV0 ZXIgKG1ha2Utc3RhY2spKSkKKworKGRlZmluZSAoY29udGV4dC1zdGFjay1lbXB0eT8pICgoY29u dGV4dC1zdGFjaykgJ2VtcHR5PykpCisKKyhkZWZpbmUgKGNvbnRleHQtc3RhY2stcHVzaCEgZSkg KChjb250ZXh0LXN0YWNrKSAncHVzaCEgZSkpCisKKyhkZWZpbmUgKGNvbnRleHQtc3RhY2stdG9w KSAoKGNvbnRleHQtc3RhY2spICd0b3ApKQorCisoZGVmaW5lIChjb250ZXh0LXN0YWNrLXBvcCEp ICgoY29udGV4dC1zdGFjaykgJ3BvcCEpKQorCisoZGVmaW5lIChjb250ZXh0LXN0YWNrLWNsZWFy ISkgKChjb250ZXh0LXN0YWNrKSAnY2xlYXIhKSkKKworOzsgSW5kZW50YXRpb24gb2YgdGhlIGxp bmUgYmVpbmcgcGFyc2VkLgorKGRlZmluZSBjdXJyZW50LWluZGVudGF0aW9uIChtYWtlLXBhcmFt ZXRlciAwKSkKKworOzsgU2lnbmFsIHRvIHJlcHJvY2VzcyB0aGUgYmVnaW5uaW5nIG9mIGxpbmUs IGluIGNhc2Ugd2UgbmVlZCB0byBjbG9zZSBtb3JlCis7OyB0aGFuIG9uZSBpbmRlbnRhdGlvbiBs ZXZlbC4KKyhkZWZpbmUgY2hlY2stYm9sPyAobWFrZS1wYXJhbWV0ZXIgI2YpKQorCis7OyBOYW1l IG9mIHRoZSBmaWxlIGJlaW5nIHBhcnNlZC4gVXNlZCBpbiBlcnJvciBtZXNzYWdlcy4KKyhkZWZp bmUgY2FiYWwtZmlsZS1uYW1lIChtYWtlLXBhcmFtZXRlciAidW5rbm93ayIpKQorCis7OyBTcGVj aWZ5IHRoZSBncmFtbWFyIG9mIGEgQ2FiYWwgZmlsZSBhbmQgZ2VuZXJhdGUgYSBzdWl0YWJsZSBz eW50YXggYW5hbHlzZXIuCisoZGVmaW5lIChtYWtlLWNhYmFsLXBhcnNlcikKKyAgIkdlbmVyYXRl IGEgcGFyc2VyIGZvciBDYWJhbCBmaWxlcy4iCisgIChsYWxyLXBhcnNlcgorICAgOzsgLS0tIHRv a2VuIGRlZmluaXRpb25zCisgICAoQ0NVUkxZIFZDQ1VSTFkgT1BBUkVOIENQQVJFTiBURVNUIElE IFZFUlNJT04gUkVMQVRJT04KKyAgICAgICAgICAgKHJpZ2h0OiBJRiBGTEFHIEVYRUMgVEVTVC1T VUlURSBTT1VSQ0UtUkVQTyBCRU5DSE1BUksgTElCIE9DVVJMWSkKKyAgICAgICAgICAgKGxlZnQ6 IE9SKQorICAgICAgICAgICAobGVmdDogUFJPUEVSVFkgQU5EKQorICAgICAgICAgICAocmlnaHQ6 IEVMU0UgTk9UKSkKKyAgIDs7IC0tLSBydWxlcworICAgKGJvZHkgICAgICAgIChwcm9wZXJ0aWVz IHNlY3Rpb25zKSAgIDogKGFwcGVuZCAkMSAkMikpCisgICAoc2VjdGlvbnMgICAgKHNlY3Rpb25z IGZsYWdzKSAgICAgICAgOiAoYXBwZW5kICQxICQyKQorICAgICAgICAgICAgICAgIChzZWN0aW9u cyBzb3VyY2UtcmVwbykgIDogKGFwcGVuZCAkMSAobGlzdCAkMikpCisgICAgICAgICAgICAgICAg KHNlY3Rpb25zIGV4ZWN1dGFibGVzKSAgOiAoYXBwZW5kICQxICQyKQorICAgICAgICAgICAgICAg IChzZWN0aW9ucyB0ZXN0LXN1aXRlcykgIDogKGFwcGVuZCAkMSAkMikKKyAgICAgICAgICAgICAg ICAoc2VjdGlvbnMgYmVuY2htYXJrcykgICA6IChhcHBlbmQgJDEgJDIpCisgICAgICAgICAgICAg ICAgKHNlY3Rpb25zIGxpYi1zZWMpICAgICAgOiAoYXBwZW5kICQxIChsaXN0ICQyKSkKKyAgICAg ICAgICAgICAgICAoKSAgICAgICAgICAgICAgICAgICAgICA6ICcoKSkKKyAgIChmbGFncyAgICAg ICAoZmxhZ3MgZmxhZy1zZWMpICAgICAgICA6IChhcHBlbmQgJDEgKGxpc3QgJDIpKQorICAgICAg ICAgICAgICAgIChmbGFnLXNlYykgICAgICAgICAgICAgIDogKGxpc3QgJDEpKQorICAgKGZsYWct c2VjICAgIChGTEFHIE9DVVJMWSBwcm9wZXJ0aWVzIENDVVJMWSkgOiBgKHNlY3Rpb24gZmxhZyAs JDEgLCQzKQorICAgICAgICAgICAgICAgIChGTEFHIG9wZW4gcHJvcGVydGllcyBjbG9zZSkgICAg OiBgKHNlY3Rpb24gZmxhZyAsJDEgLCQzKQorICAgICAgICAgICAgICAgIChGTEFHKSAgICAgICAg ICAgICAgICAgICAgICAgICAgOiBgKHNlY3Rpb24gZmxhZyAsJDEgJygpKSkKKyAgIChzb3VyY2Ut cmVwbyAoU09VUkNFLVJFUE8gT0NVUkxZIHByb3BlcnRpZXMgQ0NVUkxZKQorICAgICAgICAgICAg ICAgIDogYChzZWN0aW9uIHNvdXJjZS1yZXBvc2l0b3J5ICwkMSAsJDMpCisgICAgICAgICAgICAg ICAgKFNPVVJDRS1SRVBPIG9wZW4gcHJvcGVydGllcyBjbG9zZSkKKyAgICAgICAgICAgICAgICA6 IGAoc2VjdGlvbiBzb3VyY2UtcmVwb3NpdG9yeSAsJDEgLCQzKSkKKyAgIChwcm9wZXJ0aWVzICAo cHJvcGVydGllcyBQUk9QRVJUWSkgICA6IChhcHBlbmQgJDEgKGxpc3QgJDIpKQorICAgICAgICAg ICAgICAgIChQUk9QRVJUWSkgICAgICAgICAgICAgIDogKGxpc3QgJDEpKQorICAgKGV4ZWN1dGFi bGVzIChleGVjdXRhYmxlcyBleGVjLXNlYykgIDogKGFwcGVuZCAkMSAobGlzdCAkMikpCisgICAg ICAgICAgICAgICAgKGV4ZWMtc2VjKSAgICAgICAgICAgICAgOiAobGlzdCAkMSkpCisgICAoZXhl Yy1zZWMgICAgKEVYRUMgT0NVUkxZIGV4cHJzIENDVVJMWSkgOiBgKHNlY3Rpb24gZXhlY3V0YWJs ZSAsJDEgLCQzKQorICAgICAgICAgICAgICAgIChFWEVDIG9wZW4gZXhwcnMgY2xvc2UpICAgIDog YChzZWN0aW9uIGV4ZWN1dGFibGUgLCQxICwkMykpCisgICAodGVzdC1zdWl0ZXMgKHRlc3Qtc3Vp dGVzIHRzLXNlYykgICAgOiAoYXBwZW5kICQxIChsaXN0ICQyKSkKKyAgICAgICAgICAgICAgICAo dHMtc2VjKSAgICAgICAgICAgICAgICA6IChsaXN0ICQxKSkKKyAgICh0cy1zZWMgICAgICAoVEVT VC1TVUlURSBPQ1VSTFkgZXhwcnMgQ0NVUkxZKSA6IGAoc2VjdGlvbiB0ZXN0LXN1aXRlICwkMSAs JDMpCisgICAgICAgICAgICAgICAgKFRFU1QtU1VJVEUgb3BlbiBleHBycyBjbG9zZSkgICAgOiBg KHNlY3Rpb24gdGVzdC1zdWl0ZSAsJDEgLCQzKSkKKyAgIChiZW5jaG1hcmtzICAoYmVuY2htYXJr cyBibS1zZWMpICAgICA6IChhcHBlbmQgJDEgKGxpc3QgJDIpKQorICAgICAgICAgICAgICAgIChi bS1zZWMpICAgICAgICAgICAgICAgIDogKGxpc3QgJDEpKQorICAgKGJtLXNlYyAgICAgIChCRU5D SE1BUksgT0NVUkxZIGV4cHJzIENDVVJMWSkgOiBgKHNlY3Rpb24gYmVuY2htYXJrICwkMSAsJDMp CisgICAgICAgICAgICAgICAgKEJFTkNITUFSSyBvcGVuIGV4cHJzIGNsb3NlKSAgICA6IGAoc2Vj dGlvbiBiZW5jaG1hcmsgLCQxICwkMykpCisgICAobGliLXNlYyAgICAgKExJQiBPQ1VSTFkgZXhw cnMgQ0NVUkxZKSA6IGAoc2VjdGlvbiBsaWJyYXJ5ICwkMykKKyAgICAgICAgICAgICAgICAoTElC IG9wZW4gZXhwcnMgY2xvc2UpICAgIDogYChzZWN0aW9uIGxpYnJhcnkgLCQzKSkKKyAgIChleHBy cyAgICAgICAoZXhwcnMgUFJPUEVSVFkpICAgICAgICAgOiAoYXBwZW5kICQxIChsaXN0ICQyKSkK KyAgICAgICAgICAgICAgICAoUFJPUEVSVFkpICAgICAgICAgICAgICAgOiAobGlzdCAkMSkKKyAg ICAgICAgICAgICAgICAoZXhwcnMgaWYtdGhlbi1lbHNlKSAgICAgOiAoYXBwZW5kICQxIChsaXN0 ICQyKSkKKyAgICAgICAgICAgICAgICAoaWYtdGhlbi1lbHNlKSAgICAgICAgICAgOiAobGlzdCAk MSkKKyAgICAgICAgICAgICAgICAoZXhwcnMgaWYtdGhlbikgICAgICAgICAgOiAoYXBwZW5kICQx IChsaXN0ICQyKSkKKyAgICAgICAgICAgICAgICAoaWYtdGhlbikgICAgICAgICAgICAgICAgOiAo bGlzdCAkMSkpCisgICAoaWYtdGhlbi1lbHNlIChJRiB0ZXN0cyBPQ1VSTFkgZXhwcnMgQ0NVUkxZ IEVMU0UgT0NVUkxZIGV4cHJzIENDVVJMWSkKKyAgICAgICAgICAgICAgICAgOiBgKGlmICwkMiAs JDQgLCQ4KQorICAgICAgICAgICAgICAgICAoSUYgdGVzdHMgb3BlbiBleHBycyBjbG9zZSBFTFNF IE9DVVJMWSBleHBycyBDQ1VSTFkpCisgICAgICAgICAgICAgICAgIDogYChpZiAsJDIgLCQ0ICwk OCkKKyAgICAgICAgICAgICAgICAgOzsgVGhlICdvcGVuJyB0b2tlbiBhZnRlciAndGVzdHMnIGlz IHNoaWZ0ZWQgYWZ0ZXIgYW4gJ2V4cHJzJworICAgICAgICAgICAgICAgICA7OyBpcyBmb3VuZC4g IFRoaXMgaXMgYmVjYXVzZSwgaW5zdGVhZCBvZiAnZXhwcnMnIGEgJ09DVVJMWScKKyAgICAgICAg ICAgICAgICAgOzsgdG9rZW4gaXMgYSB2YWxpZCBhbHRlcm5hdGl2ZS4gIEZvciB0aGlzIHJlYXNv biwgJ29wZW4nCisgICAgICAgICAgICAgICAgIDs7IHB1c2hlcyBhIDxwYXJzZS1jb250ZXh0PiB3 aXRoIGEgbGluZSBpbmRlbnRhdGlvbiBlcXVhbCB0bworICAgICAgICAgICAgICAgICA7OyB0aGUg aW5kZW50YXRpb24gb2YgJ2V4cHJzJy4KKyAgICAgICAgICAgICAgICAgOzsKKyAgICAgICAgICAg ICAgICAgOzsgRGlmZmVyZW50bHkgZnJvbSB0aGlzLCB3aXRob3V0IHRoZSBydWxlIGFib3ZlIHRo aXMKKyAgICAgICAgICAgICAgICAgOzsgY29tbWVudCwgd2hlbiBhbiAnRUxTRScgdG9rZW4gaXMg Zm91bmQsIHRoZSAnb3BlbicgdG9rZW4KKyAgICAgICAgICAgICAgICAgOzsgZm9sbG93aW5nIHRo ZSAnRUxTRScgd291bGQgYmUgc2hpZnRlZCBpbW1lZGlhdGVseSwgYmVmb3JlCisgICAgICAgICAg ICAgICAgIDs7IHRoZSAnZXhwcnMnIGlzIGZvdW5kIChiZWNhdXNlIHRoZXJlIGFyZSBubyBvdGhl ciB2YWxpZAorICAgICAgICAgICAgICAgICA7OyB0b2tlbnMpLiAgVGhlICdvcGVuJyB3b3VsZCB0 aGVyZWZvcmUgY3JlYXRlIGEKKyAgICAgICAgICAgICAgICAgOzsgPHBhcnNlLWNvbnRleHQ+IHdp dGggdGhlIGluZGVudGF0aW9uIG9mICdFTFNFJyBhbmQgbm90CisgICAgICAgICAgICAgICAgIDs7 ICdleHBycycsIGNyZWF0aW5nIGFuIGluY29uc2lzdGVuY3kuICBXZSB0aGVyZWZvcmUgYWxsb3cK KyAgICAgICAgICAgICAgICAgOzsgbWl4ZWQgc3R5bGUgY29uZGl0aW9uYWxzLgorICAgICAgICAg ICAgICAgICAoSUYgdGVzdHMgb3BlbiBleHBycyBjbG9zZSBFTFNFIG9wZW4gZXhwcnMgY2xvc2Up CisgICAgICAgICAgICAgICAgIDogYChpZiAsJDIgLCQ0ICwkOCkpCisgICAoaWYtdGhlbiAgICAg KElGIHRlc3RzIE9DVVJMWSBleHBycyBDQ1VSTFkpIDogYChpZiAsJDIgLCQ0ICgpKQorICAgICAg ICAgICAgICAgIChJRiB0ZXN0cyBvcGVuIGV4cHJzIGNsb3NlKSAgICA6IGAoaWYgLCQyICwkNCAo KSkpCisgICAodGVzdHMgICAgICAgKFRFU1QgT1BBUkVOIElEIENQQVJFTikgICAgICAgIDogYCgs JDEgLCQzKQorICAgICAgICAgICAgICAgIChURVNUIE9QQVJFTiBJRCBSRUxBVElPTiBWRVJTSU9O IENQQVJFTikKKyAgICAgICAgICAgICAgICA6IGAoLCQxICwoc3RyaW5nLWFwcGVuZCAkMyAiICIg JDQgIiAiICQ1KSkKKyAgICAgICAgICAgICAgICAoVEVTVCBPUEFSRU4gSUQgUkVMQVRJT04gVkVS U0lPTiBBTkQgUkVMQVRJT04gVkVSU0lPTiBDUEFSRU4pCisgICAgICAgICAgICAgICAgOiBgKGFu ZCAoLCQxICwoc3RyaW5nLWFwcGVuZCAkMyAiICIgJDQgIiAiICQ1KSkKKyAgICAgICAgICAgICAg ICAgICAgICAgICgsJDEgLChzdHJpbmctYXBwZW5kICQzICIgIiAkNyAiICIgJDgpKSkKKyAgICAg ICAgICAgICAgIChOT1QgdGVzdHMpICAgICAgICAgICAgICAgICAgICAgOiBgKG5vdCAsJDIpCisg ICAgICAgICAgICAgICAodGVzdHMgQU5EIHRlc3RzKSAgICAgICAgICAgICAgIDogYChhbmQgLCQx ICwkMykKKyAgICAgICAgICAgICAgICh0ZXN0cyBPUiB0ZXN0cykgICAgICAgICAgICAgICAgOiBg KG9yICwkMSAsJDMpCisgICAgICAgICAgICAgICAoT1BBUkVOIHRlc3RzIENQQVJFTikgICAgICAg ICAgIDogJDIpCisgICAob3BlbiAgICAgICAoKSA6IChjb250ZXh0LXN0YWNrLXB1c2ghCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChtYWtlLXBhcnNlLWNvbnRleHQgKGNvbnRl eHQgbGF5b3V0KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIChjdXJyZW50LWluZGVudGF0aW9uKSkpKQorICAgKGNsb3NlICAgICAgKFZDQ1VS TFkpKSkpCisKKyhkZWZpbmUgKHBlZWstbmV4dC1saW5lLWluZGVudCBwb3J0KQorICAiVGhpcyBm dW5jdGlvbiBjYW4gYmUgY2FsbGVkIHdoZW4gdGhlIG5leHQgY2hhcmFjdGVyIG9uIFBPUlQgaXMg I1xuZXdsaW5lCithbmQgcmV0dXJucyB0aGUgaW5kZW50YXRpb24gb2YgdGhlIGxpbmUgc3RhcnRp bmcgYWZ0ZXIgdGhlICNcbmV3bGluZQorY2hhcmFjdGVyLiAgRGlzY2FyZCAoYW5kIGNvbnN1bWUp IGVtcHR5IGFuZCBjb21tZW50IGxpbmVzLiIKKyAgKGxldCAoKGluaXRpYWwtbmV3bGluZSAoc3Ry aW5nIChyZWFkLWNoYXIgcG9ydCkpKSkKKyAgICAobGV0IGxvb3AgKChjaGFyIChwZWVrLWNoYXIg cG9ydCkpCisgICAgICAgICAgICAgICAod29yZCAiIikpCisgICAgICAoY29uZCAoKGVxdj8gY2hh ciAjXG5ld2xpbmUpIChyZWFkLWNoYXIgcG9ydCkKKyAgICAgICAgICAgICAobG9vcCAocGVlay1j aGFyIHBvcnQpICIiKSkKKyAgICAgICAgICAgICgob3IgKGVxdj8gY2hhciAjXHNwYWNlKSAoZXF2 PyBjaGFyICNcdGFiKSkKKyAgICAgICAgICAgICAobGV0ICgoYyAocmVhZC1jaGFyIHBvcnQpKSkK KyAgICAgICAgICAgICAgIChsb29wIChwZWVrLWNoYXIgcG9ydCkgKHN0cmluZy1hcHBlbmQgd29y ZCAoc3RyaW5nIGMpKSkpKQorICAgICAgICAgICAgKChjb21tZW50LWxpbmUgcG9ydCBjaGFyKSAo bG9vcCAocGVlay1jaGFyIHBvcnQpICIiKSkKKyAgICAgICAgICAgIChlbHNlCisgICAgICAgICAg ICAgKGxldCAoKGxlbiAoc3RyaW5nLWxlbmd0aCB3b3JkKSkpCisgICAgICAgICAgICAgICAodW5y ZWFkLXN0cmluZyAoc3RyaW5nLWFwcGVuZCBpbml0aWFsLW5ld2xpbmUgd29yZCkgcG9ydCkKKyAg ICAgICAgICAgICAgIGxlbikpKSkpKQorCisoZGVmaW5lKiAocmVhZC12YWx1ZSBwb3J0IHZhbHVl IG1pbi1pbmRlbnQgIzpvcHRpb25hbCAoc2VwYXJhdG9yICIgIikpCisgICJUaGUgbmV4dCBjaGFy YWN0ZXIgb24gUE9SVCBtdXN0IGJlICNcbmV3bGluZS4gIEFwcGVuZCB0byBWQUxVRSB0aGUKK2Zv bGxvd2luZyBsaW5lcyB3aXRoIGluZGVudGF0aW9uIGxhcmdlciB0aGFuIE1JTi1JTkRFTlQuIgor ICAobGV0IGxvb3AgKCh2YWwgKHN0cmluZy10cmltLWJvdGggdmFsdWUpKQorICAgICAgICAgICAg ICh4IChwZWVrLW5leHQtbGluZS1pbmRlbnQgcG9ydCkpKQorICAgIChpZiAoPiB4IG1pbi1pbmRl bnQpCisgICAgICAgIChiZWdpbgorICAgICAgICAgIChyZWFkLWNoYXIgcG9ydCkgOyBjb25zdW1l ICNcbmV3bGluZQorICAgICAgICAgIChsb29wIChzdHJpbmctYXBwZW5kCisgICAgICAgICAgICAg ICAgIHZhbCAoaWYgKHN0cmluZy1udWxsPyB2YWwpICIiIHNlcGFyYXRvcikKKyAgICAgICAgICAg ICAgICAgKHN0cmluZy10cmltLWJvdGggKHJlYWQtZGVsaW1pdGVkICJcbiIgcG9ydCAncGVlaykp KQorICAgICAgICAgICAgICAgIChwZWVrLW5leHQtbGluZS1pbmRlbnQgcG9ydCkpKQorICAgICAg ICB2YWwpKSkKKworKGRlZmluZSAobGV4LXdoaXRlLXNwYWNlIHBvcnQgYm9sKQorICAiQ29uc3Vt ZSB3aGl0ZSBzcGFjZXMgYW5kIGNvbW1lbnQgbGluZXMgb24gUE9SVC4gIElmIGEgbmV3IGxpbmUg aXMgc3RhcnRlZCByZXR1cm4gI3QsCitvdGhlcndpc2UgcmV0dXJuIEJPTCAoYmVnaW5uaW5nLW9m LWxpbmUpLiIKKyAgKGxldCBsb29wICgoYyAocGVlay1jaGFyIHBvcnQpKQorICAgICAgICAgICAg IChib2wgYm9sKSkKKyAgICAoY29uZAorICAgICAoKGFuZCAobm90IChlb2Ytb2JqZWN0PyBjKSkK KyAgICAgICAgICAgKG9yIChjaGFyPT8gYyAjXHNwYWNlKSAoY2hhcj0/IGMgI1x0YWIpKSkKKyAg ICAgIChyZWFkLWNoYXIgcG9ydCkKKyAgICAgIChsb29wIChwZWVrLWNoYXIgcG9ydCkgYm9sKSkK KyAgICAgKChhbmQgKG5vdCAoZW9mLW9iamVjdD8gYykpIChjaGFyPT8gYyAjXG5ld2xpbmUpKQor ICAgICAgKHJlYWQtY2hhciBwb3J0KQorICAgICAgKGxvb3AgKHBlZWstY2hhciBwb3J0KSAjdCkp CisgICAgICgoY29tbWVudC1saW5lIHBvcnQgYykKKyAgICAgIChsZXgtd2hpdGUtc3BhY2UgcG9y dCBib2wpKQorICAgICAoZWxzZQorICAgICAgYm9sKSkpKQorCisoZGVmaW5lIChsZXgtYm9sIHBv cnQpCisgICJQcm9jZXNzIHRoZSBiZWdpbm5pbmcgb2YgYSBsaW5lIG9uIFBPUlQ6IHVwZGF0ZSBj dXJyZW50LWluZGVudGF0aW9uIGFuZAorY2hlY2sgdGhlIGVuZCBvZiBhbiBpbmRlbnRhdGlvbiBi YXNlZCBjb250ZXh0LiIKKyAgKGxldCAoKGxvYyAobWFrZS1zb3VyY2UtbG9jYXRpb24gKGNhYmFs LWZpbGUtbmFtZSkgKHBvcnQtbGluZSBwb3J0KQorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAocG9ydC1jb2x1bW4gcG9ydCkgLTEgLTEpKSkKKyAgICAoY3VycmVudC1pbmRlbnRh dGlvbiAoc291cmNlLWxvY2F0aW9uLWNvbHVtbiBsb2MpKQorICAgIChjYXNlIChnZXQtb2Zmc2lk ZSBwb3J0KQorICAgICAgKChsZXNzLXRoYW4pCisgICAgICAgKGNoZWNrLWJvbD8gI3QpIDsgbmVl ZCB0byBjaGVjayBpZiBjbG9zaW5nIG1vcmUgdGhhbiAxIGluZGVudCBsZXZlbC4KKyAgICAgICAo dW5sZXNzIChjb250ZXh0LXN0YWNrLWVtcHR5PykgKGNvbnRleHQtc3RhY2stcG9wISkpCisgICAg ICAgKG1ha2UtbGV4aWNhbC10b2tlbiAnVkNDVVJMWSBsb2MgI2YpKQorICAgICAgKGVsc2UKKyAg ICAgICAobGV4LXRva2VuIHBvcnQpKSkpKQorCisoZGVmaW5lIChib2w/IHBvcnQpIChvciAoY2hl Y2stYm9sPykgKD0gKHBvcnQtY29sdW1uIHBvcnQpIDApKSkKKworKGRlZmluZSAoY29tbWVudC1s aW5lIHBvcnQgYykKKyAgIklmIFBPUlQgc3RhcnRzIHdpdGggYSBjb21tZW50IGxpbmUsIGNvbnN1 bWUgaXQgdXAgdG8sIGJ1dCBub3QgaW5jbHVkaW5nCisjXG5ld2xpbmUuICBDIGlzIHRoZSBuZXh0 IGNoYXJhY3RlciBvbiBQT1JULiIKKyAgKGNvbmQgKChhbmQgKG5vdCAoZW9mLW9iamVjdD8gYykp IChjaGFyPT8gYyAjXC0pKQorICAgICAgICAgKHJlYWQtY2hhciBwb3J0KQorICAgICAgICAgKGxl dCAoKGMyIChwZWVrLWNoYXIgcG9ydCkpKQorICAgICAgICAgICAoaWYgKGNoYXI9PyBjMiAjXC0p CisgICAgICAgICAgICAgICAocmVhZC1kZWxpbWl0ZWQgIlxuIiBwb3J0ICdwZWVrKQorICAgICAg ICAgICAgICAgKGJlZ2luICh1bnJlYWQtY2hhciBjIHBvcnQpICNmKSkpKQorICAgICAgICAoZWxz ZSAjZikpKQorCisoZGVmaW5lLWVudW1lcmF0aW9uIG9yZGVyaW5nIChsZXNzLXRoYW4gZXF1YWwg Z3JlYXRlci10aGFuKSBtYWtlLW9yZGVyaW5nKQorCisoZGVmaW5lIChnZXQtb2Zmc2lkZSBwb3J0 KQorICAiSW4gYW4gaW5kZW50YXRpb24gYmFzZWQgY29udGV4dCByZXR1cm4gdGhlIHN5bWJvbCAn Z3JlYXRlci10aGFuLCAnZXF1YWwgb3IKKydsZXNzLXRoYW4gdG8gc2lnbmFsIGlmIHRoZSBjdXJy ZW50IGNvbHVtbiBudW1iZXIgb24gUE9SVCBpcyBncmVhdGVyLSwgZXF1YWwtLAorb3IgbGVzcy10 aGFuIHRoZSBpbmRlbnRhdGlvbiBvZiB0aGUgY3VycmVudCBjb250ZXh0LiIKKyAgKGxldCAoKHgg KHBvcnQtY29sdW1uIHBvcnQpKSkKKyAgICAobWF0Y2ggKGNvbnRleHQtc3RhY2stdG9wKQorICAg ICAgKCgkIDxwYXJzZS1jb250ZXh0PiAnbGF5b3V0IGluZGVudGF0aW9uKQorICAgICAgIChjb25k CisgICAgICAgICgoPiB4IGluZGVudGF0aW9uKSAob3JkZXJpbmcgZ3JlYXRlci10aGFuKSkKKyAg ICAgICAgKCg9IHggaW5kZW50YXRpb24pIChvcmRlcmluZyBlcXVhbCkpCisgICAgICAgIChlbHNl IChvcmRlcmluZyBsZXNzLXRoYW4pKSkpCisgICAgICAoXyAob3JkZXJpbmcgZ3JlYXRlci10aGFu KSkpKSkKKyAKKzs7IChTZW1pLSlQcmVkaWNhdGVzIGZvciBpbmRpdmlkdWFsIHRva2Vucy4KKwor KGRlZmluZSAoaXMtcmVsYXRpb24/IGMpCisgIChhbmQgKGNoYXI/IGMpIChhbnkgKGN1dCBjaGFy PT8gYyA8PikgJygjXDwgI1w+ICNcPSkpKSkKKworKGRlZmluZSAobWFrZS1yeC1tYXRjaGVyIHBh dCkKKyAgIkNvbXBpbGUgUEFUIGludG8gYSByZWd1bGFyIGV4cHJlc3Npb24gYW5kIGNyZWF0ZXMg YSBmdW5jdGlvbiBtYXRjaGluZyBhCitzdHJpbmcgYWdhaW5zdCB0aGUgY3JlYXRlZCByZWdleHAu IgorICAobGV0ICgocnggKG1ha2UtcmVnZXhwIHBhdCkpKSAoY3V0IHJlZ2V4cC1leGVjIHJ4IDw+ KSkpCisKKyhkZWZpbmUgaXMtcHJvcGVydHkgKG1ha2UtcngtbWF0Y2hlciAiKFthLXpBLVowLTkt XSspOlsgXHRdKihcXHc/LiopJCIpKQorCisoZGVmaW5lIGlzLWZsYWcgKG1ha2UtcngtbWF0Y2hl ciAiXltGZl1sYWcgKyhbYS16QS1aMC05Xy1dKykiKSkKKworKGRlZmluZSBpcy1zcmMtcmVwbwor ICAobWFrZS1yeC1tYXRjaGVyICJeW1NzXW91cmNlLVtScl1lcG9zaXRvcnkgKyhbYS16QS1aMC05 Xy1dKykiKSkKKworKGRlZmluZSBpcy1leGVjIChtYWtlLXJ4LW1hdGNoZXIgIl5bRWVdeGVjdXRh YmxlICsoW2EtekEtWjAtOV8tXSspIikpCisKKyhkZWZpbmUgaXMtdGVzdC1zdWl0ZSAobWFrZS1y eC1tYXRjaGVyICJeW1R0XWVzdC1bU3NddWl0ZSArKFthLXpBLVowLTlfLV0rKSIpKQorCisoZGVm aW5lIGlzLWJlbmNobWFyayAobWFrZS1yeC1tYXRjaGVyICJeW0JiXWVuY2htYXJrICsoW2EtekEt WjAtOV8tXSspIikpCisKKyhkZWZpbmUgaXMtbGliIChtYWtlLXJ4LW1hdGNoZXIgIl5bTGxdaWJy YXJ5ICoiKSkKKworKGRlZmluZSBpcy1lbHNlIChtYWtlLXJ4LW1hdGNoZXIgIl5lbHNlIikpCisK KyhkZWZpbmUgKGlzLWlmIHMpIChzdHJpbmc9PyBzICJpZiIpKQorCisoZGVmaW5lIChpcy1hbmQg cykgKHN0cmluZz0/IHMgIiYmIikpCisKKyhkZWZpbmUgKGlzLW9yIHMpIChzdHJpbmc9PyBzICJ8 fCIpKQorCisoZGVmaW5lIChpcy1pZCBzKQorICAobGV0ICgoY2FiYWwtcmVzZXJ2ZWQtd29yZHMK KyAgICAgICAgICcoImlmIiAiZWxzZSIgImxpYnJhcnkiICJmbGFnIiAiZXhlY3V0YWJsZSIgInRl c3Qtc3VpdGUiCisgICAgICAgICAgICJzb3VyY2UtcmVwb3NpdG9yeSIgImJlbmNobWFyayIpKSkK KyAgICAoYW5kIChldmVyeSAoY3V0IHN0cmluZy1jaTw+IHMgPD4pIGNhYmFsLXJlc2VydmVkLXdv cmRzKQorICAgICAgICAgKG5vdCAoY2hhcj0/IChsYXN0IChzdHJpbmctPmxpc3QgcykpICNcOikp KSkpCisKKyhkZWZpbmUgKGlzLXRlc3QgcyBwb3J0KQorICAobGV0ICgodGVzdHMtcnggKG1ha2Ut cmVnZXhwICJvc3xhcmNofGZsYWd8aW1wbCIpKQorICAgICAgICAoYyAocGVlay1jaGFyIHBvcnQp KSkKKyAgICAoYW5kIChyZWdleHAtZXhlYyB0ZXN0cy1yeCBzKSAoY2hhcj0/ICNcKCBjKSkpKQor Cis7OyBMZXhlcnMgZm9yIGluZGl2aWR1YWwgdG9rZW5zLgorCisoZGVmaW5lIChsZXgtcmVsYXRp b24gbG9jIHBvcnQpCisgIChtYWtlLWxleGljYWwtdG9rZW4gJ1JFTEFUSU9OIGxvYyAocmVhZC13 aGlsZSBpcy1yZWxhdGlvbj8gcG9ydCkpKQorCisoZGVmaW5lIChsZXgtdmVyc2lvbiBsb2MgcG9y dCkKKyAgKG1ha2UtbGV4aWNhbC10b2tlbiAnVkVSU0lPTiBsb2MKKyAgICAgICAgICAgICAgICAg ICAgICAocmVhZC13aGlsZSBjaGFyLW51bWVyaWM/IHBvcnQKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAoY3V0IGNoYXI9PyAjXC4gPD4pIGNoYXItbnVtZXJpYz8pKSkKKworKGRl ZmluZSogKHJlYWQtd2hpbGUgaXM/IHBvcnQgIzpvcHRpb25hbAorICAgICAgICAgICAgICAgICAg ICAgKGlzLWlmLWZvbGxvd2VkLWJ5PyAobGFtYmRhIChjKSAjZikpCisgICAgICAgICAgICAgICAg ICAgICAoaXMtYWxsb3dlZC1mb2xsb3dlcj8gKGxhbWJkYSAoYykgI2YpKSkKKyAgIlJlYWQgZnJv bSBQT1JUIGFzIGxvbmcgYXM6IChpKSBlaXRoZXIgdGhlIHJlYWQgY2hhcmFjdGVyIHNhdGlzZmll cyB0aGUKK3ByZWRpY2F0ZSBJUz8sIG9yIChpaSkgaXQgc2F0aXNmaWVzIHRoZSBwcmVkaWNhdGUg SVMtSUYtRk9MTE9XRUQtQlk/IGFuZCB0aGUKK2NoYXJhY3RlciBpbW1lZGlhdGVseSBmb2xsb3dp bmcgaXQgc2F0aXNmaWVzIElTLUFMTE9XRUQtRk9MTE9XRVI/LiAgUmV0dXJucyBhCitzdHJpbmcg d2l0aCB0aGUgcmVhZCBjaGFyYWN0ZXJzLiIKKyAgKGxldCBsb29wICgoYyAocGVlay1jaGFyIHBv cnQpKQorICAgICAgICAgICAgIChyZXMgJygpKSkKKyAgICAoY29uZCAoKGFuZCAobm90IChlb2Yt b2JqZWN0PyBjKSkgKGlzPyBjKSkKKyAgICAgICAgICAgKGxldCAoKGMgKHJlYWQtY2hhciBwb3J0 KSkpCisgICAgICAgICAgICAgKGxvb3AgKHBlZWstY2hhciBwb3J0KSAoYXBwZW5kIHJlcyAobGlz dCBjKSkpKSkKKyAgICAgICAgICAoKGFuZCAobm90IChlb2Ytb2JqZWN0PyBjKSkgKGlzLWlmLWZv bGxvd2VkLWJ5PyBjKSkKKyAgICAgICAgICAgKGxldCAoKGMgKHJlYWQtY2hhciBwb3J0KSkKKyAg ICAgICAgICAgICAgICAgKGMyIChwZWVrLWNoYXIgcG9ydCkpKQorICAgICAgICAgICAgIChpZiAo YW5kIChub3QgKGVvZi1vYmplY3Q/IGMyKSkgKGlzLWFsbG93ZWQtZm9sbG93ZXI/IGMyKSkKKyAg ICAgICAgICAgICAgICAgKGxvb3AgYzIgKGFwcGVuZCByZXMgKGxpc3QgYykpKQorICAgICAgICAg ICAgICAgICAoYmVnaW4gKHVucmVhZC1jaGFyIGMpIChsaXN0LT5zdHJpbmcgcmVzKSkpKSkKKyAg ICAgICAgICAoZWxzZSAobGlzdC0+c3RyaW5nIHJlcykpKSkpCisKKyhkZWZpbmUgKGxleC1wcm9w ZXJ0eSBrLXYtcngtcmVzIGxvYyBwb3J0KQorICAobGV0ICgoa2V5IChzdHJpbmctZG93bmNhc2Ug KG1hdGNoOnN1YnN0cmluZyBrLXYtcngtcmVzIDEpKSkKKyAgICAgICAgKHZhbHVlIChtYXRjaDpz dWJzdHJpbmcgay12LXJ4LXJlcyAyKSkpCisgICAgKG1ha2UtbGV4aWNhbC10b2tlbgorICAgICAn UFJPUEVSVFkgbG9jCisgICAgIChsaXN0IGtleSBgKCwocmVhZC12YWx1ZSBwb3J0IHZhbHVlIChj dXJyZW50LWluZGVudGF0aW9uKSkpKSkpKQorCisoZGVmaW5lIChsZXgtcngtcmVzIHJ4LXJlcyB0 b2tlbiBsb2MpCisgIChsZXQgKChuYW1lIChzdHJpbmctZG93bmNhc2UgKG1hdGNoOnN1YnN0cmlu ZyByeC1yZXMgMSkpKSkKKyAgICAobWFrZS1sZXhpY2FsLXRva2VuIHRva2VuIGxvYyBuYW1lKSkp CisKKyhkZWZpbmUgKGxleC1mbGFnIGZsYWctcngtcmVzIGxvYykgKGxleC1yeC1yZXMgZmxhZy1y eC1yZXMgJ0ZMQUcgbG9jKSkKKworKGRlZmluZSAobGV4LXNyYy1yZXBvIHNyYy1yZXBvLXJ4LXJl cyBsb2MpCisgIChsZXgtcngtcmVzIHNyYy1yZXBvLXJ4LXJlcyAnU09VUkNFLVJFUE8gbG9jKSkK KworKGRlZmluZSAobGV4LWV4ZWMgZXhlYy1yeC1yZXMgbG9jKSAobGV4LXJ4LXJlcyBleGVjLXJ4 LXJlcyAnRVhFQyBsb2MpKQorCisoZGVmaW5lIChsZXgtdGVzdC1zdWl0ZSB0cy1yeC1yZXMgbG9j KSAobGV4LXJ4LXJlcyB0cy1yeC1yZXMgJ1RFU1QtU1VJVEUgbG9jKSkKKworKGRlZmluZSAobGV4 LWJlbmNobWFyayBibS1yeC1yZXMgbG9jKSAobGV4LXJ4LXJlcyBibS1yeC1yZXMgJ0JFTkNITUFS SyBsb2MpKQorCisoZGVmaW5lIChsZXgtbGliIGxvYykgKG1ha2UtbGV4aWNhbC10b2tlbiAnTElC IGxvYyAjZikpCisKKyhkZWZpbmUgKGxleC1lbHNlIGxvYykgKG1ha2UtbGV4aWNhbC10b2tlbiAn RUxTRSBsb2MgI2YpKQorCisoZGVmaW5lIChsZXgtaWYgbG9jKSAobWFrZS1sZXhpY2FsLXRva2Vu ICdJRiBsb2MgI2YpKQorCisoZGVmaW5lIChsZXgtYW5kIGxvYykgKG1ha2UtbGV4aWNhbC10b2tl biAnQU5EIGxvYyAjZikpCisKKyhkZWZpbmUgKGxleC1vciBsb2MpIChtYWtlLWxleGljYWwtdG9r ZW4gJ09SIGxvYyAjZikpCisKKyhkZWZpbmUgKGxleC1pZCB3IGxvYykgKG1ha2UtbGV4aWNhbC10 b2tlbiAnSUQgbG9jIHcpKQorCisoZGVmaW5lIChsZXgtdGVzdCB3IGxvYykgKG1ha2UtbGV4aWNh bC10b2tlbiAnVEVTVCBsb2MgKHN0cmluZy0+c3ltYm9sIHcpKSkKKworOzsgTGV4ZXIgZm9yIHRv a2VucyByZWNvZ25pemFibGUgYnkgc2luZ2xlIGNoYXIuCisKKyhkZWZpbmUqIChpcy1yZWYtY2hh ci0+dG9rZW4gcmVmLWNoYXIgbmV4dC1jaGFyIHRva2VuIGxvYyBwb3J0CisgICAgICAgICAgICAg ICAgICAgICAgICAgIzpvcHRpb25hbCAoaG9vay1mbiAjZikpCisgICJJZiB0aGUgbmV4dCBjaGFy YWN0ZXIgTkVYVC1DSEFSIG9uIFBPUlQgaXMgUkVGLUNIQVIsIHRoZW4gcmVhZCBpdCwKK2V4ZWN1 dGUgSE9PSy1GTiBpZiBpdCBpc24ndCAjZiBhbmQgcmV0dXJuIGEgbGV4aWNhbCB0b2tlbiBvZiB0 eXBlIFRPS0VOIHdpdGgKK2xvY2F0aW9uIGluZm9ybWF0aW9uIExPQy4iCisgIChjb25kICgoY2hh cj0/IG5leHQtY2hhciByZWYtY2hhcikKKyAgICAgICAgIChyZWFkLWNoYXIgcG9ydCkKKyAgICAg ICAgICh3aGVuIGhvb2stZm4gKGhvb2stZm4pKQorICAgICAgICAgKG1ha2UtbGV4aWNhbC10b2tl biB0b2tlbiBsb2MgKHN0cmluZyBuZXh0LWNoYXIpKSkKKyAgICAgICAgKGVsc2UgI2YpKSkKKwor KGRlZmluZSAoaXMtb2N1cmx5LT50b2tlbiBjIGxvYyBwb3J0KQorICAoaXMtcmVmLWNoYXItPnRv a2VuICNceyBjICdPQ1VSTFkgbG9jIHBvcnQKKyAgICAgICAgICAgICAgICAgIChsYW1iZGEgKCkK KyAgICAgICAgICAgICAgICAgICAgKGNvbnRleHQtc3RhY2stcHVzaCEgKG1ha2UtcGFyc2UtY29u dGV4dAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNvbnRleHQg bm8tbGF5b3V0KSAjZikpKSkpCisKKyhkZWZpbmUgKGlzLWNjdXJseS0+dG9rZW4gYyBsb2MgcG9y dCkKKyAgKGlzLXJlZi1jaGFyLT50b2tlbiAjXH0gYyAnQ0NVUkxZIGxvYyBwb3J0IChsYW1iZGEg KCkgKGNvbnRleHQtc3RhY2stcG9wISkpKSkKKworKGRlZmluZSAoaXMtb3BhcmVuLT50b2tlbiBj IGxvYyBwb3J0KQorICAoaXMtcmVmLWNoYXItPnRva2VuICNcKCBjICdPUEFSRU4gbG9jIHBvcnQp KQorCisoZGVmaW5lIChpcy1jcGFyZW4tPnRva2VuIGMgbG9jIHBvcnQpCisgIChpcy1yZWYtY2hh ci0+dG9rZW4gI1wpIGMgJ0NQQVJFTiBsb2MgcG9ydCkpCisKKyhkZWZpbmUgKGlzLW5vdC0+dG9r ZW4gYyBsb2MgcG9ydCkKKyAgKGlzLXJlZi1jaGFyLT50b2tlbiAjXCEgYyAnTk9UIGxvYyBwb3J0 KSkKKworKGRlZmluZSAoaXMtdmVyc2lvbj8gYykgKGNoYXItbnVtZXJpYz8gYykpCisKKzs7IE1h aW4gbGV4ZXIgZnVuY3Rpb25zCisKKyhkZWZpbmUgKGxleC1zaW5nbGUtY2hhciBwb3J0IGxvYykK KyAgIlByb2Nlc3MgdG9rZW5zIHdoaWNoIGNhbiBiZSByZWNvZ25pc2VkIGJ5IHBlZWtpbmcgdGhl IG5leHQgY2hhcmFjdGVyIG9uCitQT1JULiAgSWYgbm8gdG9rZW4gY2FuIGJlIHJlY29nbml6ZWQg cmV0dXJuICNmLiAgTE9DIGlzIHRoZSBjdXJyZW50IHBvcnQKK2xvY2F0aW9uLiIKKyAgKGxldCog KChjIChwZWVrLWNoYXIgcG9ydCkpKQorICAgIChjb25kICgoZW9mLW9iamVjdD8gYykgKHJlYWQt Y2hhciBwb3J0KSAnKmVvaSopCisgICAgICAgICAgKChpcy1vY3VybHktPnRva2VuIGMgbG9jIHBv cnQpKQorICAgICAgICAgICgoaXMtY2N1cmx5LT50b2tlbiBjIGxvYyBwb3J0KSkKKyAgICAgICAg ICAoKGlzLW9wYXJlbi0+dG9rZW4gYyBsb2MgcG9ydCkpCisgICAgICAgICAgKChpcy1jcGFyZW4t PnRva2VuIGMgbG9jIHBvcnQpKQorICAgICAgICAgICgoaXMtbm90LT50b2tlbiBjIGxvYyBwb3J0 KSkKKyAgICAgICAgICAoKGlzLXZlcnNpb24/IGMpIChsZXgtdmVyc2lvbiBsb2MgcG9ydCkpCisg ICAgICAgICAgKChpcy1yZWxhdGlvbj8gYykgKGxleC1yZWxhdGlvbiBsb2MgcG9ydCkpCisgICAg ICAgICAgKGVsc2UKKyAgICAgICAgICAgI2YpKSkpCisKKyhkZWZpbmUgKGxleC13b3JkIHBvcnQg bG9jKQorICAiUHJvY2VzcyB0b2tlbnMgd2hpY2ggY2FuIGJlIHJlY29nbml6ZWQgYnkgcmVhZGlu ZyB0aGUgbmV4dCB3b3JkIGZvcm0gUE9SVC4KK0xPQyBpcyB0aGUgY3VycmVudCBwb3J0IGxvY2F0 aW9uLiIKKyAgKGxldCogKCh3IChyZWFkLWRlbGltaXRlZCAiICgpXHRcbiIgcG9ydCAncGVlaykp KQorICAgIChjb25kICgoaXMtaWYgdykgKGxleC1pZiBsb2MpKQorICAgICAgICAgICgoaXMtdGVz dCB3IHBvcnQpIChsZXgtdGVzdCB3IGxvYykpCisgICAgICAgICAgKChpcy1hbmQgdykgKGxleC1h bmQgbG9jKSkKKyAgICAgICAgICAoKGlzLW9yIHcpIChsZXgtb3IgbG9jKSkKKyAgICAgICAgICAo KGlzLWlkIHcpIChsZXgtaWQgdyBsb2MpKQorICAgICAgICAgIChlbHNlICh1bnJlYWQtc3RyaW5n IHcgcG9ydCkgI2YpKSkpCisKKyhkZWZpbmUgKGxleC1saW5lIHBvcnQgbG9jKQorICAiUHJvY2Vz cyB0b2tlbnMgd2hpY2ggY2FuIGJlIHJlY29nbmlzZWQgYnkgcmVhZGluZyBhIGxpbmUgZnJvbSBQ T1JULiAgTE9DIGlzCit0aGUgY3VycmVudCBwb3J0IGxvY2F0aW9uLiIKKyAgKGxldCogKChzIChy ZWFkLWRlbGltaXRlZCAiXG57fSIgcG9ydCAncGVlaykpKQorICAgIChjb25kCisgICAgICgoaXMt cHJvcGVydHkgcykgPT4gKGN1dCBsZXgtcHJvcGVydHkgPD4gbG9jIHBvcnQpKQorICAgICAoKGlz LWZsYWcgcykgPT4gKGN1dCBsZXgtZmxhZyA8PiBsb2MpKQorICAgICAoKGlzLXNyYy1yZXBvIHMp ID0+IChjdXQgbGV4LXNyYy1yZXBvIDw+IGxvYykpCisgICAgICgoaXMtZXhlYyBzKSA9PiAoY3V0 IGxleC1leGVjIDw+IGxvYykpCisgICAgICgoaXMtdGVzdC1zdWl0ZSBzKSA9PiAoY3V0IGxleC10 ZXN0LXN1aXRlIDw+IGxvYykpCisgICAgICgoaXMtYmVuY2htYXJrIHMpID0+IChjdXQgbGV4LWJl bmNobWFyayA8PiBsb2MpKQorICAgICAoKGlzLWxpYiBzKSAobGV4LWxpYiBsb2MpKQorICAgICAo KGlzLWVsc2UgcykgKGxleC1lbHNlIGxvYykpCisgICAgIChlbHNlCisgICAgICAjZikpKSkKKwor KGRlZmluZSAobGV4LXRva2VuIHBvcnQpCisgIChsZXQqICgobG9jIChtYWtlLXNvdXJjZS1sb2Nh dGlvbiAoY2FiYWwtZmlsZS1uYW1lKSAocG9ydC1saW5lIHBvcnQpCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAocG9ydC1jb2x1bW4gcG9ydCkgLTEgLTEpKSkKKyAgICAob3Ig KGxleC1zaW5nbGUtY2hhciBwb3J0IGxvYykgKGxleC13b3JkIHBvcnQgbG9jKSAobGV4LWxpbmUg cG9ydCBsb2MpKSkpCisKKzs7IExleGVyLSBhbmQgZXJyb3ItZnVuY3Rpb24gZ2VuZXJhdG9ycwor CisoZGVmaW5lIChlcnJvcnApCisgICJHZW5lcmF0ZXMgdGhlIGxleGVyIGVycm9yIGZ1bmN0aW9u LiIKKyAgKGxldCAoKHAgKGN1cnJlbnQtZXJyb3ItcG9ydCkpKQorICAgIChsYW1iZGEgKG1lc3Nh Z2UgLiBhcmdzKQorICAgICAgKGZvcm1hdCBwICJ+YSIgbWVzc2FnZSkKKyAgICAgIChpZiAoYW5k IChwYWlyPyBhcmdzKSAobGV4aWNhbC10b2tlbj8gKGNhciBhcmdzKSkpCisgICAgICAgICAgKGxl dCogKCh0b2tlbiAoY2FyIGFyZ3MpKQorICAgICAgICAgICAgICAgICAoc291cmNlIChsZXhpY2Fs LXRva2VuLXNvdXJjZSB0b2tlbikpCisgICAgICAgICAgICAgICAgIChsaW5lIChzb3VyY2UtbG9j YXRpb24tbGluZSBzb3VyY2UpKQorICAgICAgICAgICAgICAgICAoY29sdW1uIChzb3VyY2UtbG9j YXRpb24tY29sdW1uIHNvdXJjZSkpKQorICAgICAgICAgICAgKGZvcm1hdCBwICJ+YSAiIChvciAo bGV4aWNhbC10b2tlbi12YWx1ZSB0b2tlbikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIChsZXhpY2FsLXRva2VuLWNhdGVnb3J5IHRva2VuKSkpCisgICAgICAgICAgICAod2hlbiAo YW5kIChudW1iZXI/IGxpbmUpIChudW1iZXI/IGNvbHVtbikpCisgICAgICAgICAgICAgIChmb3Jt YXQgcCAiKGF0IGxpbmUgfmEsIGNvbHVtbiB+YSkiICgxKyBsaW5lKSBjb2x1bW4pKSkKKyAgICAg ICAgICAoZm9yLWVhY2ggZGlzcGxheSBhcmdzKSkKKyAgICAgIChmb3JtYXQgcCAifiUiKSkpKQor CisoZGVmaW5lIChtYWtlLWxleGVyIHBvcnQpCisgICJHZW5lcmF0ZSB0aGUgQ2FiYWwgbGV4aWNh bCBhbmFseXNlciByZWFkaW5nIGZyb20gUE9SVC4iCisgIChsZXQgKChwIHBvcnQpKQorICAgIChs YW1iZGEgKCkKKyAgICAgIChsZXQgKChib2wgKGxleC13aGl0ZS1zcGFjZSBwIChib2w/IHApKSkp CisgICAgICAgIChjaGVjay1ib2w/ICNmKQorICAgICAgICAoaWYgYm9sIChsZXgtYm9sIHApIChs ZXgtdG9rZW4gcCkpKSkpKQorCisoZGVmaW5lKiAocmVhZC1jYWJhbCAjOm9wdGlvbmFsIChwb3J0 IChjdXJyZW50LWlucHV0LXBvcnQpKQorICAgICAgICAgICAgICAgICAgICAgKGZpbGUtbmFtZSAj ZikpCisgICJSZWFkIGEgQ2FiYWwgZmlsZSBmcm9tIFBPUlQuICBGSUxFLU5BTUUgaXMgYSBzdHJp bmcgdXNlZCBpbiBlcnJvciBtZXNzYWdlcy4KK0lmICNmIHVzZSB0aGUgZnVuY3Rpb24gJ3BvcnQt ZmlsZW5hbWUnIHRvIG9idGFpbiBpdC4iCisgIChsZXQgKChjYWJhbC1wYXJzZXIgKG1ha2UtY2Fi YWwtcGFyc2VyKSkpCisgICAgKHBhcmFtZXRlcml6ZSAoKGNhYmFsLWZpbGUtbmFtZQorICAgICAg ICAgICAgICAgICAgICAob3IgZmlsZS1uYW1lIChwb3J0LWZpbGVuYW1lIHBvcnQpICJzdGFuZGFy ZCBpbnB1dCIpKQorICAgICAgICAgICAgICAgICAgIChjdXJyZW50LWluZGVudGF0aW9uIDApCisg ICAgICAgICAgICAgICAgICAgKGNoZWNrLWJvbD8gI2YpCisgICAgICAgICAgICAgICAgICAgKGNv bnRleHQtc3RhY2sgKG1ha2Utc3RhY2spKSkKKyAgICAgIChjYWJhbC1wYXJzZXIgKG1ha2UtbGV4 ZXIgcG9ydCkgKGVycm9ycCkpKSkpCisKKzs7IFBhcnQgMjoKKzs7Cis7OyBFdmFsdWF0ZSB0aGUg Uy1leHByZXNzaW9uIHJldHVybmVkIGJ5ICdyZWFkLWNhYmFsJy4KKworOzsgVGhpcyBkZWZpbmVz IHRoZSBvYmplY3QgYW5kIGludGVyZmFjZSB0aGF0IHdlIHByb3ZpZGUgdG8gYWNjZXNzIHRoZSBD YWJhbAorOzsgZmlsZSBpbmZvcm1hdGlvbi4gIE5vdGUgdGhhdCB0aGlzIGRvZXMgbm90IGluY2x1 ZGUgYWxsIHRoZSBwaWVjZXMgb2YKKzs7IGluZm9ybWF0aW9uIG9mIHRoZSBDYWJhbCBmaWxlLCBi dXQgb25seSB0aGUgb25lcyB3ZSBjdXJyZW50bHkgYXJlCis7OyBpbnRlcmVzdGVkIGluLgorKGRl ZmluZS1yZWNvcmQtdHlwZSA8Y2FiYWwtcGFja2FnZT4KKyAgKG1ha2UtY2FiYWwtcGFja2FnZSBu YW1lIHZlcnNpb24gbGljZW5zZSBob21lLXBhZ2Ugc291cmNlLXJlcG9zaXRvcnkKKyAgICAgICAg ICAgICAgICAgICAgICBzeW5vcHNpcyBkZXNjcmlwdGlvbgorICAgICAgICAgICAgICAgICAgICAg IGV4ZWN1dGFibGVzIGxpYiB0ZXN0LXN1aXRlcworICAgICAgICAgICAgICAgICAgICAgIGZsYWdz IGV2YWwtZW52aXJvbm1lbnQpCisgIGNhYmFsLXBhY2thZ2U/CisgIChuYW1lICAgY2FiYWwtcGFj a2FnZS1uYW1lKQorICAodmVyc2lvbiBjYWJhbC1wYWNrYWdlLXZlcnNpb24pCisgIChsaWNlbnNl IGNhYmFsLXBhY2thZ2UtbGljZW5zZSkKKyAgKGhvbWUtcGFnZSBjYWJhbC1wYWNrYWdlLWhvbWUt cGFnZSkKKyAgKHNvdXJjZS1yZXBvc2l0b3J5IGNhYmFsLXBhY2thZ2Utc291cmNlLXJlcG9zaXRv cnkpCisgIChzeW5vcHNpcyBjYWJhbC1wYWNrYWdlLXN5bm9wc2lzKQorICAoZGVzY3JpcHRpb24g Y2FiYWwtcGFja2FnZS1kZXNjcmlwdGlvbikKKyAgKGV4ZWN1dGFibGVzIGNhYmFsLXBhY2thZ2Ut ZXhlY3V0YWJsZXMpCisgIChsaWIgY2FiYWwtcGFja2FnZS1saWJyYXJ5KSA7ICdsaWJyYXJ5JyBp cyBhIFNjaGVtZSBrZXl3b3JkCisgICh0ZXN0LXN1aXRlcyBjYWJhbC1wYWNrYWdlLXRlc3Qtc3Vp dGVzKQorICAoZmxhZ3MgY2FiYWwtcGFja2FnZS1mbGFncykKKyAgKGV2YWwtZW52aXJvbm1lbnQg Y2FiYWwtcGFja2FnZS1ldmFsLWVudmlyb25tZW50KSkgOyBhbGlzdAorCisoc2V0LXJlY29yZC10 eXBlLXByaW50ZXIhIDxjYWJhbC1wYWNrYWdlPgorICAgICAgICAgICAgICAgICAgICAgICAgICAo bGFtYmRhIChwYWNrYWdlIHBvcnQpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGZvcm1h dCBwb3J0ICIjPGNhYmFsLXBhY2thZ2UgfmEtfmE+IgorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAoY2FiYWwtcGFja2FnZS1uYW1lIHBhY2thZ2UpCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIChjYWJhbC1wYWNrYWdlLXZlcnNpb24gcGFja2FnZSkp KSkKKworKGRlZmluZS1yZWNvcmQtdHlwZSA8Y2FiYWwtc291cmNlLXJlcG9zaXRvcnk+CisgICht YWtlLWNhYmFsLXNvdXJjZS1yZXBvc2l0b3J5IHVzZS1jYXNlIHR5cGUgbG9jYXRpb24pCisgIGNh YmFsLXNvdXJjZS1yZXBvc2l0b3J5PworICAodXNlLWNhc2UgY2FiYWwtc291cmNlLXJlcG9zaXRv cnktdXNlLWNhc2UpCisgICh0eXBlIGNhYmFsLXNvdXJjZS1yZXBvc2l0b3J5LXR5cGUpCisgIChs b2NhdGlvbiBjYWJhbC1zb3VyY2UtcmVwb3NpdG9yeS1sb2NhdGlvbikpCisKKzs7IFdlIG5lZWQg dG8gYmUgYWJsZSB0byBkaXN0aW5ndWlzaCB0aGUgdmFsdWUgb2YgYSBmbGFnIGZyb20gdGhlIFNj aGVtZSAjdAorOzsgYW5kICNmIHZhbHVlcy4KKyhkZWZpbmUtcmVjb3JkLXR5cGUgPGNhYmFsLWZs YWc+CisgIChtYWtlLWNhYmFsLWZsYWcgbmFtZSBkZXNjcmlwdGlvbiBkZWZhdWx0IG1hbnVhbCkK KyAgY2FiYWwtZmxhZz8KKyAgKG5hbWUgY2FiYWwtZmxhZy1uYW1lKQorICAoZGVzY3JpcHRpb24g Y2FiYWwtZmxhZy1kZXNjcmlwdGlvbikKKyAgKGRlZmF1bHQgY2FiYWwtZmxhZy1kZWZhdWx0KSA7 ICd0cnVlIG9yICdmYWxzZQorICAobWFudWFsIGNhYmFsLWZsYWctbWFudWFsKSkgIDsgJ3RydWUg b3IgJ2ZhbHNlCisKKyhzZXQtcmVjb3JkLXR5cGUtcHJpbnRlciEgPGNhYmFsLWZsYWc+CisgICAg ICAgICAgICAgICAgICAgICAgICAgIChsYW1iZGEgKHBhY2thZ2UgcG9ydCkKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAoZm9ybWF0IHBvcnQgIiM8Y2FiYWwtZmxhZyB+YSBkZWZhdWx0On5h PiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNhYmFsLWZsYWctbmFt ZSBwYWNrYWdlKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2FiYWwt ZmxhZy1kZWZhdWx0IHBhY2thZ2UpKSkpCisKKyhkZWZpbmUtcmVjb3JkLXR5cGUgPGNhYmFsLWRl cGVuZGVuY3k+CisgIChtYWtlLWNhYmFsLWRlcGVuZGVuY3kgbmFtZSB2ZXJzaW9uKQorICBjYWJh bC1kZXBlbmRlbmN5PworICAobmFtZSBjYWJhbC1kZXBlbmRlbmN5LW5hbWUpCisgICh2ZXJzaW9u IGNhYmFsLWRlcGVuZGVuY3ktdmVyc2lvbikpCisKKyhkZWZpbmUtcmVjb3JkLXR5cGUgPGNhYmFs LWV4ZWN1dGFibGU+CisgIChtYWtlLWNhYmFsLWV4ZWN1dGFibGUgbmFtZSBkZXBlbmRlbmNpZXMp CisgIGNhYmFsLWV4ZWN1dGFibGU/CisgIChuYW1lIGNhYmFsLWV4ZWN1dGFibGUtbmFtZSkKKyAg KGRlcGVuZGVuY2llcyBjYWJhbC1leGVjdXRhYmxlLWRlcGVuZGVuY2llcykpIDsgbGlzdCBvZiA8 Y2FiYWwtZGVwZW5kZW5jeT4KKworKGRlZmluZS1yZWNvcmQtdHlwZSA8Y2FiYWwtbGlicmFyeT4K KyAgKG1ha2UtY2FiYWwtbGlicmFyeSBkZXBlbmRlbmNpZXMpCisgIGNhYmFsLWxpYnJhcnk/Cisg IChkZXBlbmRlbmNpZXMgY2FiYWwtbGlicmFyeS1kZXBlbmRlbmNpZXMpKSA7IGxpc3Qgb2YgPGNh YmFsLWRlcGVuZGVuY3k+CisKKyhkZWZpbmUtcmVjb3JkLXR5cGUgPGNhYmFsLXRlc3Qtc3VpdGU+ CisgIChtYWtlLWNhYmFsLXRlc3Qtc3VpdGUgbmFtZSBkZXBlbmRlbmNpZXMpCisgIGNhYmFsLXRl c3Qtc3VpdGU/CisgIChuYW1lIGNhYmFsLXRlc3Qtc3VpdGUtbmFtZSkKKyAgKGRlcGVuZGVuY2ll cyBjYWJhbC10ZXN0LXN1aXRlLWRlcGVuZGVuY2llcykpIDsgbGlzdCBvZiA8Y2FiYWwtZGVwZW5k ZW5jeT4KKworKGRlZmluZSAoY2FiYWwtZmxhZ3MtPmFsaXN0IGZsYWctbGlzdCkKKyAgICAiUmV0 cnVuIGFuIGFsaXN0IGFzc29jaWF0aW5nIHRoZSBmbGFnIG5hbWUgdG8gaXRzIGRlZmF1bHQgdmFs dWUgZnJvbSBhCitsaXN0IG9mIDxjYWJhbC1mbGFnPiBvYmplY3RzLiIKKyAgKG1hcCAobGFtYmRh IChmbGFnKSAoY29ucyAoY2FiYWwtZmxhZy1uYW1lIGZsYWcpIChjYWJhbC1mbGFnLWRlZmF1bHQg ZmxhZykpKQorICAgICAgIGZsYWctbGlzdCkpCisKKyhkZWZpbmUgKGV2YWwtY2FiYWwgY2FiYWwt c2V4cCBlbnYpCisgICJHaXZlbiB0aGUgQ0FCQUwtU0VYUCBwcm9kdWNlZCBieSAncmVhZC1jYWJh bCcsIGV2YWx1YXRlIGFsbCBjb25kaXRpb25hbHMKK2FuZCByZXR1cm4gYSAnY2FiYWwtcGFja2Fn ZScgb2JqZWN0LiAgVGhlIHZhbHVlcyBvZiBhbGwgdGVzdHMgY2FuIGJlCitvdmVyd3JpdHRlbiBi eSBzcGVjaWZ5aW5nIHRoZSBkZXNpcmVkIHZhbHVlIGluIEVOVi4gIEVOViBtdXN0IGJlIGFuIGFs aXN0LgorVGhlIGFjY2VwdGVkIGtleXMgYXJlOiBcIm9zXCIsIFwiYXJjaFwiLCBcImltcGxcIiBh bmQgYSBuYW1lIG9mIGEgZmxhZy4gIFRoZQordmFsdWUgYXNzb2NpYXRlZCB3aXRoIGEgZmxhZyBo YXMgdG8gYmUgZWl0aGVyIFwidHJ1ZVwiIG9yIFwiZmFsc2VcIi4gIFRoZQordmFsdWUgYXNzb2Np YXRlZCB3aXRoIG90aGVyIGtleXMgaGFzIHRvIGNvbmZvcm0gdG8gdGhlIENhYmFsIGZpbGUgZm9y bWF0CitkZWZpbml0aW9uLiIKKyAgKGRlZmluZSAob3MgbmFtZSkKKyAgICAobGV0ICgoZW52LW9z IChvciAoYXNzb2MtcmVmIGVudiAib3MiKSAibGludXgiKSkpCisgICAgICAoc3RyaW5nLW1hdGNo IGVudi1vcyBuYW1lKSkpCisgIAorICAoZGVmaW5lIChhcmNoIG5hbWUpCisgICAgKGxldCAoKGVu di1hcmNoIChvciAoYXNzb2MtcmVmIGVudiAiYXJjaCIpICJ4ODZfNjQiKSkpCisgICAgICAoc3Ry aW5nLW1hdGNoIGVudi1hcmNoIG5hbWUpKSkKKworICAoZGVmaW5lIChjb21wLW5hbWUrdmVyc2lv biBoYXNrZWxsKQorICAgICJFeHRyYWN0IHRoZSBjb21waWxlciBuYW1lIGFuZCB2ZXJzaW9uIGZy b20gdGhlIHN0cmluZyBIQVNLRUxMLiIKKyAgICAobGV0KiAoKG1hdGNoZXItZm4gKG1ha2Utcngt bWF0Y2hlciAiKFthLXpBLVowLTlfXSspLShbMC05Ll0rKSIpKQorICAgICAgICAgICAobmFtZSAo b3IgKGFuZD0+IChtYXRjaGVyLWZuIGhhc2tlbGwpIChjdXQgbWF0Y2g6c3Vic3RyaW5nIDw+IDEp KQorICAgICAgICAgICAgICAgICAgICAgaGFza2VsbCkpCisgICAgICAgICAgICh2ZXJzaW9uIChh bmQ9PiAobWF0Y2hlci1mbiBoYXNrZWxsKSAoY3V0IG1hdGNoOnN1YnN0cmluZyA8PiAyKSkpKQor ICAgICAgKHZhbHVlcyBuYW1lIHZlcnNpb24pKSkKKworICAoZGVmaW5lIChjb21wLXNwZWMtbmFt ZStvcCt2ZXJzaW9uIHNwZWMpCisgICAgIkV4dHJhY3QgdGhlIGNvbXBpbGVyIHNwZWNpZmljYXRp b24gZnJvbSBTUEVDLiAgUmV0dXJuIHRoZSBjb21waWxlciBuYW1lLAordGhlIG9yZGVyaW5nIG9w ZXJhdGlvbiBhbmQgdGhlIHZlcnNpb24uIgorICAgIChsZXQqICgod2l0aC12ZXItbWF0Y2hlci1m biAobWFrZS1yeC1tYXRjaGVyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiKFth LXpBLVowLTlfLV0rKSAqKFs8Pj1dKykgKihbMC05Ll0rKSAqIikpCisgICAgICAgICAgICh3aXRo b3V0LXZlci1tYXRjaGVyLWZuIChtYWtlLXJ4LW1hdGNoZXIgIihbYS16QS1aMC05Xy1dKykiKSkK KyAgICAgICAgICAgKG5hbWUgKG9yIChhbmQ9PiAod2l0aC12ZXItbWF0Y2hlci1mbiBzcGVjKQor ICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjdXQgbWF0Y2g6c3Vic3RyaW5nIDw+IDEpKQor ICAgICAgICAgICAgICAgICAgICAgKG1hdGNoOnN1YnN0cmluZyAod2l0aG91dC12ZXItbWF0Y2hl ci1mbiBzcGVjKSAxKSkpCisgICAgICAgICAgIChvcGVyYXRvciAoYW5kPT4gKHdpdGgtdmVyLW1h dGNoZXItZm4gc3BlYykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY3V0IG1hdGNoOnN1 YnN0cmluZyA8PiAyKSkpCisgICAgICAgICAgICh2ZXJzaW9uIChhbmQ9PiAod2l0aC12ZXItbWF0 Y2hlci1mbiBzcGVjKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgKGN1dCBtYXRjaDpzdWJz dHJpbmcgPD4gMykpKSkKKyAgICAgICh2YWx1ZXMgbmFtZSBvcGVyYXRvciB2ZXJzaW9uKSkpCisg IAorICAoZGVmaW5lIChpbXBsIGhhc2tlbGwpCisgICAgKGxldCotdmFsdWVzICgoKGNvbXAtbmFt ZSBjb21wLXZlcikKKyAgICAgICAgICAgICAgICAgICAoY29tcC1uYW1lK3ZlcnNpb24gKG9yIChh c3NvYy1yZWYgZW52ICJpbXBsIikgImdoYyIpKSkKKyAgICAgICAgICAgICAgICAgICgoc3BlYy1u YW1lIHNwZWMtb3Agc3BlYy12ZXIpCisgICAgICAgICAgICAgICAgICAgKGNvbXAtc3BlYy1uYW1l K29wK3ZlcnNpb24gaGFza2VsbCkpKQorICAgICAgKGlmIChhbmQgc3BlYy12ZXIgY29tcC12ZXIp CisgICAgICAgICAgKGV2YWwtc3RyaW5nCisgICAgICAgICAgIChzdHJpbmctYXBwZW5kICIoc3Ry aW5nIiBzcGVjLW9wICIgXCIiIGNvbXAtbmFtZSAiXCIiCisgICAgICAgICAgICAgICAgICAgICAg ICAgICIgXCIiIHNwZWMtbmFtZSAiLSIgc3BlYy12ZXIgIlwiKSIpKQorICAgICAgICAgIChzdHJp bmctbWF0Y2ggc3BlYy1uYW1lIGNvbXAtbmFtZSkpKSkKKyAgCisgIChkZWZpbmUgKGNhYmFsLWZs YWdzKQorICAgIChtYWtlLWNhYmFsLXNlY3Rpb24gY2FiYWwtc2V4cCAnZmxhZykpCisgIAorICAo ZGVmaW5lIChmbGFnIG5hbWUpCisgICAgKGxldCAoKHZhbHVlIChvciAoYXNzb2MtcmVmIGVudiBu YW1lKQorICAgICAgICAgICAgICAgICAgICAgKGFzc29jLXJlZiAoY2FiYWwtZmxhZ3MtPmFsaXN0 IChjYWJhbC1mbGFncykpIG5hbWUpKSkpCisgICAgICAoaWYgKGVxPyB2YWx1ZSAnZmFsc2UpICNm ICN0KSkpCisgIAorICAoZGVmaW5lIChldmFsIHNleHApCisgICAgKG1hdGNoIHNleHAKKyAgICAg ICgoKSAnKCkpCisgICAgICA7OyBuZXN0ZWQgJ2lmJworICAgICAgKCgoJ2lmIHByZWRpY2F0ZSB0 cnVlLWdyb3VwIGZhbHNlLWdyb3VwKSByZXN0IC4uLikKKyAgICAgICAoYXBwZW5kIChpZiAoZXZh bCBwcmVkaWNhdGUpCisgICAgICAgICAgICAgICAgICAgKGV2YWwgdHJ1ZS1ncm91cCkKKyAgICAg ICAgICAgICAgICAgICAoZXZhbCBmYWxzZS1ncm91cCkpCisgICAgICAgICAgICAgICAoZXZhbCBy ZXN0KSkpCisgICAgICAoKCdpZiBwcmVkaWNhdGUgdHJ1ZS1ncm91cCBmYWxzZS1ncm91cCkKKyAg ICAgICAoaWYgKGV2YWwgcHJlZGljYXRlKQorICAgICAgICAgICAoZXZhbCB0cnVlLWdyb3VwKQor ICAgICAgICAgICAoZXZhbCBmYWxzZS1ncm91cCkpKQorICAgICAgKCgnZmxhZyBuYW1lKSAoZmxh ZyBuYW1lKSkKKyAgICAgICgoJ29zIG5hbWUpIChvcyBuYW1lKSkKKyAgICAgICgoJ2FyY2ggbmFt ZSkgKGFyY2ggbmFtZSkpCisgICAgICAoKCdpbXBsIG5hbWUpIChpbXBsIG5hbWUpKQorICAgICAg KCgnbm90IG5hbWUpIChub3QgKGV2YWwgbmFtZSkpKQorICAgICAgOzsgJ2FuZCcgYW5kICdvcicg YXJlbid0IGZ1bmN0aW9ucywgdGh1cyB3ZSBjYW4ndCB1c2UgYXBwbHkKKyAgICAgICgoJ2FuZCBh cmdzIC4uLikgKGZvbGQgKGxhbWJkYSAoZSBzKSAoYW5kIGUgcykpICN0IChldmFsIGFyZ3MpKSkK KyAgICAgICgoJ29yIGFyZ3MgLi4uKSAoZm9sZCAobGFtYmRhIChlIHMpIChvciBlIHMpKSAjZiAo ZXZhbCBhcmdzKSkpCisgICAgICA7OyBubyBuZWVkIHRvIGV2YWx1YXRlIGZsYWcgcGFyYW1ldGVy cworICAgICAgKCgnc2VjdGlvbiAnZmxhZyBuYW1lIHBhcmFtZXRlcnMpCisgICAgICAgKGxpc3Qg J3NlY3Rpb24gJ2ZsYWcgbmFtZSBwYXJhbWV0ZXJzKSkKKyAgICAgIDs7IGxpYnJhcnkgZG9lcyBu b3QgaGF2ZSBhIG5hbWUgcGFyYW1ldGVyCisgICAgICAoKCdzZWN0aW9uICdsaWJyYXJ5IHBhcmFt ZXRlcnMpCisgICAgICAgKGxpc3QgJ3NlY3Rpb24gJ2xpYnJhcnkgKGV2YWwgcGFyYW1ldGVycykp KQorICAgICAgKCgnc2VjdGlvbiB0eXBlIG5hbWUgcGFyYW1ldGVycykKKyAgICAgICAobGlzdCAn c2VjdGlvbiB0eXBlIG5hbWUgKGV2YWwgcGFyYW1ldGVycykpKQorICAgICAgKCgoPyBzdHJpbmc/ IG5hbWUpIHZhbHVlcykKKyAgICAgICAobGlzdCBuYW1lIHZhbHVlcykpCisgICAgICAoKGVsZW1l bnQgcmVzdCAuLi4pCisgICAgICAgKGNvbnMgKGV2YWwgZWxlbWVudCkgKGV2YWwgcmVzdCkpKQor ICAgICAgKF8gKHJhaXNlIChjb25kaXRpb24KKyAgICAgICAgICAgICAgICAgKCZtZXNzYWdlICht ZXNzYWdlICJGYWlsZWQgdG8gZXZhbHVhdGUgQ2FiYWwgZmlsZS4gXAorU2VlIHRoZSBtYW51YWwg Zm9yIGxpbWl0YXRpb25zLiIpKSkpKSkpCisKKyAgKGRlZmluZSAoY2FiYWwtZXZhbHVhdGVkLXNl eHAtPnBhY2thZ2UgZXZhbHVhdGVkLXNleHApCisgICAgKGxldCogKChuYW1lIChsb29rdXAtam9p biBldmFsdWF0ZWQtc2V4cCAibmFtZSIpKQorICAgICAgICAgICAodmVyc2lvbiAobG9va3VwLWpv aW4gZXZhbHVhdGVkLXNleHAgInZlcnNpb24iKSkKKyAgICAgICAgICAgKGxpY2Vuc2UgKGxvb2t1 cC1qb2luIGV2YWx1YXRlZC1zZXhwICJsaWNlbnNlIikpCisgICAgICAgICAgIChob21lLXBhZ2Ug KGxvb2t1cC1qb2luIGV2YWx1YXRlZC1zZXhwICJob21lcGFnZSIpKQorICAgICAgICAgICAoaG9t ZS1wYWdlLW9yLWhhY2thZ2UKKyAgICAgICAgICAgIChpZiAoc3RyaW5nLW51bGw/IGhvbWUtcGFn ZSkKKyAgICAgICAgICAgICAgICAoc3RyaW5nLWFwcGVuZCAiaHR0cDovL2hhY2thZ2UuaGFza2Vs bC5vcmcvcGFja2FnZS8iIG5hbWUpCisgICAgICAgICAgICAgICAgaG9tZS1wYWdlKSkKKyAgICAg ICAgICAgKHNvdXJjZS1yZXBvc2l0b3J5IChtYWtlLWNhYmFsLXNlY3Rpb24gZXZhbHVhdGVkLXNl eHAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3Nv dXJjZS1yZXBvc2l0b3J5KSkKKyAgICAgICAgICAgKHN5bm9wc2lzIChsb29rdXAtam9pbiBldmFs dWF0ZWQtc2V4cCAic3lub3BzaXMiKSkKKyAgICAgICAgICAgKGRlc2NyaXB0aW9uIChsb29rdXAt am9pbiBldmFsdWF0ZWQtc2V4cCAiZGVzY3JpcHRpb24iKSkKKyAgICAgICAgICAgKGV4ZWN1dGFi bGVzIChtYWtlLWNhYmFsLXNlY3Rpb24gZXZhbHVhdGVkLXNleHAgJ2V4ZWN1dGFibGUpKQorICAg ICAgICAgICAobGliIChtYWtlLWNhYmFsLXNlY3Rpb24gZXZhbHVhdGVkLXNleHAgJ2xpYnJhcnkp KQorICAgICAgICAgICAodGVzdC1zdWl0ZXMgKG1ha2UtY2FiYWwtc2VjdGlvbiBldmFsdWF0ZWQt c2V4cCAndGVzdC1zdWl0ZSkpCisgICAgICAgICAgIChmbGFncyAobWFrZS1jYWJhbC1zZWN0aW9u IGV2YWx1YXRlZC1zZXhwICdmbGFnKSkKKyAgICAgICAgICAgKGV2YWwtZW52aXJvbm1lbnQgJygp KSkKKyAgICAgIChtYWtlLWNhYmFsLXBhY2thZ2UgbmFtZSB2ZXJzaW9uIGxpY2Vuc2UgaG9tZS1w YWdlLW9yLWhhY2thZ2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgc291cmNlLXJlcG9zaXRv cnkgc3lub3BzaXMgZGVzY3JpcHRpb24gZXhlY3V0YWJsZXMgbGliCisgICAgICAgICAgICAgICAg ICAgICAgICAgIHRlc3Qtc3VpdGVzIGZsYWdzIGV2YWwtZW52aXJvbm1lbnQpKSkKKworICAoKGNv bXBvc2UgY2FiYWwtZXZhbHVhdGVkLXNleHAtPnBhY2thZ2UgZXZhbCkgY2FiYWwtc2V4cCkpCisK KyhkZWZpbmUgKG1ha2UtY2FiYWwtc2VjdGlvbiBzZXhwIHNlY3Rpb24tdHlwZSkKKyAgIkdpdmVu IGFuIFNFWFAgYXMgcHJvZHVjZWQgYnkgJ3JlYWQtY2FiYWwnLCBwcm9kdWNlIGEgbGlzdCBvZiBv YmplY3RzCitwZXJ0YWluaW5nIHRvIFNFQ1RJT04tVFlQRSBzZWN0aW9ucy4gIFNFQ1RJT04tVFlQ RSBtdXN0IGJlIG9uZSBvZjoKKydleGVjdXRhYmxlLCAnZmxhZywgJ3Rlc3Qtc3VpdGUsICdzb3Vy Y2UtcmVwb3NpdG9yeSBvciAnbGlicmFyeS4iCisgIChmaWx0ZXItbWFwIChjdXQgbWF0Y2ggPD4K KyAgICAgICAgICAgICAgICAgICAoKCdzZWN0aW9uICg/IChjdXQgZXF1YWw/IDw+IHNlY3Rpb24t dHlwZSkpIG5hbWUgcGFyYW1ldGVycykKKyAgICAgICAgICAgICAgICAgICAgKGNhc2Ugc2VjdGlv bi10eXBlCisgICAgICAgICAgICAgICAgICAgICAgKCh0ZXN0LXN1aXRlKSAobWFrZS1jYWJhbC10 ZXN0LXN1aXRlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUgKGRl cGVuZGVuY2llcyBwYXJhbWV0ZXJzKSkpCisgICAgICAgICAgICAgICAgICAgICAgKChleGVjdXRh YmxlKSAobWFrZS1jYWJhbC1leGVjdXRhYmxlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIG5hbWUgKGRlcGVuZGVuY2llcyBwYXJhbWV0ZXJzKSkpCisgICAgICAgICAgICAg ICAgICAgICAgKChzb3VyY2UtcmVwb3NpdG9yeSkgKG1ha2UtY2FiYWwtc291cmNlLXJlcG9zaXRv cnkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZQorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9va3VwLWpvaW4gcGFy YW1ldGVycyAidHlwZSIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIChsb29rdXAtam9pbiBwYXJhbWV0ZXJzICJsb2NhdGlvbiIpKSkKKyAgICAgICAgICAgICAg ICAgICAgICAoKGZsYWcpCisgICAgICAgICAgICAgICAgICAgICAgIChsZXQqICgoZGVmYXVsdCAo bG9va3VwLWpvaW4gcGFyYW1ldGVycyAiZGVmYXVsdCIpKQorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgKGRlZmF1bHQtdHJ1ZS1vci1mYWxzZQorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAoaWYgKGFuZCBkZWZhdWx0IChzdHJpbmctY2k9PyAiZmFsc2UiIGRlZmF1bHQpKQor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2ZhbHNlCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAndHJ1ZSkpCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAoZGVzY3JpcHRpb24gKGxvb2t1cC1qb2luIHBhcmFtZXRlcnMgImRlc2NyaXB0aW9uIikp CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobWFudWFsIChsb29rdXAtam9pbiBwYXJh bWV0ZXJzICJtYW51YWwiKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChtYW51YWwt dHJ1ZS1vci1mYWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpZiAoYW5kIG1h bnVhbCAoc3RyaW5nLWNpPT8gInRydWUiIG1hbnVhbCkpCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICd0cnVlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdm YWxzZSkpKQorICAgICAgICAgICAgICAgICAgICAgICAgIChtYWtlLWNhYmFsLWZsYWcgbmFtZSBk ZXNjcmlwdGlvbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVm YXVsdC10cnVlLW9yLWZhbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBtYW51YWwtdHJ1ZS1vci1mYWxzZSkpKQorICAgICAgICAgICAgICAgICAgICAgIChlbHNl ICNmKSkpCisgICAgICAgICAgICAgICAgICAgKCgnc2VjdGlvbiAoPyAoY3V0IGVxdWFsPyA8PiBz ZWN0aW9uLXR5cGUpIGxpYikgcGFyYW1ldGVycykKKyAgICAgICAgICAgICAgICAgICAgKG1ha2Ut Y2FiYWwtbGlicmFyeSAoZGVwZW5kZW5jaWVzIHBhcmFtZXRlcnMpKSkKKyAgICAgICAgICAgICAg ICAgICAoXyAjZikpCisgICAgICAgICAgICAgIHNleHApKQorCisoZGVmaW5lKiAobG9va3VwLWpv aW4ga2V5LXZhbHVlcy1saXN0IGtleSAjOm9wdGlvbmFsIChkZWxpbWl0ZXIgIiAiKSkKKyAgIkxv b2t1cCBhbmQgam9pbnQgYWxsIHZhbHVlcyBwZXJ0YWluaW5nIHRvIGtleXMgb2YgdmFsdWUgS0VZ IGluCitLRVktVkFMVUVTLUxJU1QuICBUaGUgb3B0aW9uYWwgREVMSU1JVEVSIGlzIHVzZWQgdG8g c3BlY2lmeSBhIGRlbGltaXRlciBzdHJpbmcKK3RvIGJlIGFkZGVkIGJldHdlZW4gdGhlIHZhbHVl cyBmb3VuZCBpbiBkaWZmZXJlbnQga2V5L3ZhbHVlIHBhaXJzLiIKKyAgKHN0cmluZy1qb2luIAor ICAgKGZpbHRlci1tYXAgKGN1dCBtYXRjaCA8PiAKKyAgICAgICAgICAgICAgICAgICAgKCgoPyAo bGFtYmRhKHgpIChlcXVhbD8geCBrZXkpKSkgdmFsdWUpCisgICAgICAgICAgICAgICAgICAgICAo c3RyaW5nLWpvaW4gdmFsdWUgZGVsaW1pdGVyKSkKKyAgICAgICAgICAgICAgICAgICAgKF8gI2Yp KQorICAgICAgICAgICAgICAga2V5LXZhbHVlcy1saXN0KQorICAgZGVsaW1pdGVyKSkKKworKGRl ZmluZSBkZXBlbmRlbmN5LW5hbWUtdmVyc2lvbi1yeAorICAobWFrZS1yZWdleHAgIihbYS16QS1a MC05Xy1dKykgKiguKikiKSkKKworKGRlZmluZSAoZGVwZW5kZW5jaWVzIGtleS12YWx1ZXMtbGlz dCkKKyAgIlJldHVybiBhIGxpc3Qgb2YgJ2NhYmFsLWRlcGVuZGVuY3knIG9iamVjdHMgZm9yIHRo ZSBkZXBlbmRlbmNpZXMgZm91bmQgaW4KK0tFWS1WQUxVRVMtTElTVC4iCisgIChsZXQgKChkZXBz IChzdHJpbmctdG9rZW5pemUgKGxvb2t1cC1qb2luIGtleS12YWx1ZXMtbGlzdCAiYnVpbGQtZGVw ZW5kcyIgIiwiKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjaGFyLXNldC1jb21w bGVtZW50IChjaGFyLXNldCAjXCwpKSkpKQorICAgIChtYXAgKGxhbWJkYSAoZCkKKyAgICAgICAg ICAgKGxldCAoKHJ4LXJlc3VsdCAocmVnZXhwLWV4ZWMgZGVwZW5kZW5jeS1uYW1lLXZlcnNpb24t cnggZCkpKQorICAgICAgICAgICAgIChtYWtlLWNhYmFsLWRlcGVuZGVuY3kKKyAgICAgICAgICAg ICAgKG1hdGNoOnN1YnN0cmluZyByeC1yZXN1bHQgMSkKKyAgICAgICAgICAgICAgKG1hdGNoOnN1 YnN0cmluZyByeC1yZXN1bHQgMikpKSkKKyAgICAgICAgIGRlcHMpKSkKKworOzs7IGNhYmFsLnNj bSBlbmRzIGhlcmUKZGlmZiAtLWdpdCBhL2d1aXgvaW1wb3J0L2hhY2thZ2Uuc2NtIGIvZ3VpeC9p bXBvcnQvaGFja2FnZS5zY20KaW5kZXggMWIyNzgwMy4uYjU1NzRhOCAxMDA2NDQKLS0tIGEvZ3Vp eC9pbXBvcnQvaGFja2FnZS5zY20KKysrIGIvZ3VpeC9pbXBvcnQvaGFja2FnZS5zY20KQEAgLTE4 LDI4ICsxOCwxOSBAQAogCiAoZGVmaW5lLW1vZHVsZSAoZ3VpeCBpbXBvcnQgaGFja2FnZSkKICAg Izp1c2UtbW9kdWxlIChpY2UtOSBtYXRjaCkKLSAgIzp1c2UtbW9kdWxlIChpY2UtOSByZWdleCkK LSAgIzp1c2UtbW9kdWxlIChpY2UtOSByZGVsaW0pCi0gICM6dXNlLW1vZHVsZSAoaWNlLTkgcmVj ZWl2ZSkKLSAgIzp1c2UtbW9kdWxlIChpY2UtOSBwcmV0dHktcHJpbnQpCiAgICM6dXNlLW1vZHVs ZSAoc3JmaSBzcmZpLTI2KQotICAjOnVzZS1tb2R1bGUgKHNyZmkgc3JmaS0zNCkKLSAgIzp1c2Ut bW9kdWxlIChzcmZpIHNyZmktMzUpCiAgICM6dXNlLW1vZHVsZSAoc3JmaSBzcmZpLTExKQogICAj OnVzZS1tb2R1bGUgKHNyZmkgc3JmaS0xKQogICAjOnVzZS1tb2R1bGUgKChndWl4IGRvd25sb2Fk KSAjOnNlbGVjdCAoZG93bmxvYWQtdG8tc3RvcmUpKQogICAjOnVzZS1tb2R1bGUgKChndWl4IHV0 aWxzKSAjOnNlbGVjdCAocGFja2FnZS1uYW1lLT5uYW1lK3ZlcnNpb24pKQogICAjOnVzZS1tb2R1 bGUgKGd1aXggaW1wb3J0IHV0aWxzKQorICAjOnVzZS1tb2R1bGUgKGd1aXggaW1wb3J0IGNhYmFs KQogICAjOnVzZS1tb2R1bGUgKGd1aXggc3RvcmUpCiAgICM6dXNlLW1vZHVsZSAoZ3VpeCBoYXNo KQogICAjOnVzZS1tb2R1bGUgKGd1aXggYmFzZTMyKQogICAjOnVzZS1tb2R1bGUgKChndWl4IHV0 aWxzKSAjOnNlbGVjdCAoY2FsbC13aXRoLXRlbXBvcmFyeS1vdXRwdXQtZmlsZSkpCiAgICM6ZXhw b3J0IChoYWNrYWdlLT5ndWl4LXBhY2thZ2UpKQogCi07OyBQYXJ0IDE6Ci07OwotOzsgRnVuY3Rp b25zIHVzZWQgdG8gcmVhZCBhIENhYmFsIGZpbGUuCi0KIChkZWZpbmUgZ2hjLXN0YW5kYXJkLWxp YnJhcmllcwogICA7OyBMaXN0IG9mIGxpYnJhcmllcyBkaXN0cmlidXRlZCB3aXRoIGdoYyAoNy44 LjQpLiBXZSBpbmNsdWRlIEdIQyBpdHNlbGYgYXMKICAgOzsgc29tZSBwYWNrYWdlcyBsaXN0IGl0 LgpAQCAtNzUsNTg4ICs2NiwxMiBAQAogCiAoZGVmaW5lIHBhY2thZ2UtbmFtZS1wcmVmaXggImdo Yy0iKQogCi0oZGVmaW5lIGtleS12YWx1ZS1yeAotICA7OyBSZWd1bGFyIGV4cHJlc3Npb24gbWF0 Y2hpbmcgImtleTogdmFsdWUiCi0gIChtYWtlLXJlZ2V4cCAiKFthLXpBLVowLTktXSspOlsgXHRd KihcXHc/LiopJCIpKQotCi0oZGVmaW5lIHNlY3Rpb25zLXJ4Ci0gIDs7IFJlZ3VsYXIgZXhwcmVz c2lvbiBtYXRjaGluZyBhIHNlY3Rpb24gImhlYWQgc3ViLWhlYWQgLi4uIgotICAobWFrZS1yZWdl eHAgIihbYS16QS1aMC05XFwoXFwpLV0rKSIpKQotCi0oZGVmaW5lIGNvbW1lbnQtcngKLSAgOzsg UmVnZXhwIG1hdGNoaW5nIENhYmFsIGNvbW1lbnQgbGluZXMuCi0gIChtYWtlLXJlZ2V4cCAiXiAq LS0iKSkKLQotKGRlZmluZSAoaGFzLWtleT8gbGluZSkKLSAgIkNoZWNrIGlmIExJTkUgaW5jbHVk ZXMgYSBrZXkuIgotICAocmVnZXhwLWV4ZWMga2V5LXZhbHVlLXJ4IGxpbmUpKQotCi0oZGVmaW5l IChjb21tZW50LWxpbmU/IGxpbmUpCi0gICJDaGVjayBpZiBMSU5FIGlzIGEgY29tbWVudCBsaW5l LiIKLSAgKHJlZ2V4cC1leGVjIGNvbW1lbnQtcnggbGluZSkpCi0KLShkZWZpbmUgKGxpbmUtaW5k ZW50YXRpb24rcmVzdCBsaW5lKQotICAiUmV0dXJucyB0d28gcmVzdWx0czogVGhlIG51bWJlciBv ZiBpbmRlbnRhdGlvbiBzcGFjZXMgYW5kIHRoZSByZXN0IG9mIHRoZQotbGluZSAod2l0aG91dCBp bmRlbnRhdGlvbikuIgotICAobGV0IGxvb3AgKChsaW5lLWxzdCAoc3RyaW5nLT5saXN0IGxpbmUp KQotICAgICAgICAgICAgIChjb3VudCAwKSkKLSAgICA7OyBTb21ldGltZXMgdmFsdWVzIGFyZSBz cHJlYWQgb3ZlciBtdWx0aXBsZSBsaW5lcyBhbmQgbmV3IGxpbmVzIHN0YXJ0Ci0gICAgOzsgd2l0 aCBhIGNvbW1hICcsJyB3aXRoIHRoZSB3cm9uZyBpbmRlbnRhdGlvbi4gIFNlZSBlLmcuIGhhZGRv Y2stYXBpLgotICAgIChpZiAob3IgKG51bGw/IGxpbmUtbHN0KQotICAgICAgICAgICAgKG5vdCAo b3IKLSAgICAgICAgICAgICAgICAgIChlcXY/IChmaXJzdCBsaW5lLWxzdCkgI1xzcGFjZSkKLSAg ICAgICAgICAgICAgICAgIChlcXY/IChmaXJzdCBsaW5lLWxzdCkgI1wsKSA7IHNlZSwgZS5nLiwg aGFkZG9jay1hcGkuY2FiYWwKLSAgICAgICAgICAgICAgICAgIChlcXY/IChmaXJzdCBsaW5lLWxz dCkgI1x0YWIpKSkpCi0gICAgICAgICh2YWx1ZXMgY291bnQgKGxpc3QtPnN0cmluZyBsaW5lLWxz dCkpCi0gICAgICAgIChsb29wIChjZHIgbGluZS1sc3QpICgrIGNvdW50IDEpKSkpKQotCi0oZGVm aW5lIChtdWx0aS1saW5lLXZhbHVlIGxpbmVzIHNlZWQpCi0gICJGdW5jdGlvbiB0byByZWFkIGEg dmFsdWUgc3BsaXQgYWNyb3NzIG11bHRpcGxlIGxpbmVzLiBMSU5FUyBhcmUgdGhlCi1yZW1haW5p bmcgaW5wdXQgbGluZXMgdG8gYmUgcmVhZC4gU0VFRCBpcyB0aGUgdmFsdWUgcmVhZCBvbiB0aGUg c2FtZSBsaW5lIGFzCi10aGUga2V5LiAgUmV0dXJuIHR3byB2YWx1ZXM6IEEgbGlzdCB3aXRoIHZh bHVlcyBhbmQgdGhlIHJlbWFpbmluZyBsaW5lcyB0byBiZQotcHJvY2Vzc2VkLiIKLSAgKGRlZmlu ZSAobXVsdGktbGluZS12YWx1ZS13aXRoLW1pbi1pbmRlbnQgbGluZXMgc2VlZCBtaW4taW5kZW50 KQotICAgIChpZiAobnVsbD8gbGluZXMpCi0gICAgICAgICh2YWx1ZXMgJygpICcoKSkKLSAgICAg ICAgKGxldC12YWx1ZXMgKCgoY3VycmVudC1pbmRlbnQgdmFsdWUpIChsaW5lLWluZGVudGF0aW9u K3Jlc3QgKGZpcnN0IGxpbmVzKSkpCi0gICAgICAgICAgICAgICAgICAgICAoKG5leHQtbGluZS1p bmRlbnQgbmV4dC1saW5lLXZhbHVlKQotICAgICAgICAgICAgICAgICAgICAgIChpZiAobnVsbD8g KGNkciBsaW5lcykpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICh2YWx1ZXMgI2YgIiIpCi0g ICAgICAgICAgICAgICAgICAgICAgICAgIChsaW5lLWluZGVudGF0aW9uK3Jlc3QgKHNlY29uZCBs aW5lcykpKSkpCi0gICAgICAgICAgKGlmIChvciAobm90IG5leHQtbGluZS1pbmRlbnQpICg8IG5l eHQtbGluZS1pbmRlbnQgbWluLWluZGVudCkKLSAgICAgICAgICAgICAgICAgIChyZWdleHAtZXhl YyBjb25kaXRpb24tcnggbmV4dC1saW5lLXZhbHVlKSkKLSAgICAgICAgICAgICAgKHZhbHVlcyAo cmV2ZXJzZSAoY29ucyB2YWx1ZSBzZWVkKSkgKGNkciBsaW5lcykpCi0gICAgICAgICAgICAgICht dWx0aS1saW5lLXZhbHVlLXdpdGgtbWluLWluZGVudCAoY2RyIGxpbmVzKSAoY29ucyB2YWx1ZSBz ZWVkKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWlu LWluZGVudCkpKSkpCi0KLSAgKGxldC12YWx1ZXMgKCgoY3VycmVudC1pbmRlbnQgdmFsdWUpIChs aW5lLWluZGVudGF0aW9uK3Jlc3QgKGZpcnN0IGxpbmVzKSkpKQotICAgIChtdWx0aS1saW5lLXZh bHVlLXdpdGgtbWluLWluZGVudCBsaW5lcyBzZWVkIGN1cnJlbnQtaW5kZW50KSkpCi0KLShkZWZp bmUgKHJlYWQtY2FiYWwgcG9ydCkKLSAgIlBhcnNlcyBhIENhYmFsIGZpbGUgZnJvbSBQT1JULiAg UmV0dXJuIGEgbGlzdCBvZiBsaXN0IHBhaXJzOgotCi0oKChoZWFkMSBzdWItaGVhZDEgLi4uIGtl eTEpICh2YWx1ZSkpCi0gKChoZWFkMiBzdWItaGVhZDIgLi4uIGtleTIpICh2YWx1ZTIpKQotIC4u LikuCi0KLVdlIHRyeSBkbyBkZWR1Y2UgdGhlIENhYmFsIGZvcm1hdCBmcm9tIHRoZSBmb2xsb3dp bmcgZG9jdW1lbnQ6Ci1odHRwczovL3d3dy5oYXNrZWxsLm9yZy9jYWJhbC91c2Vycy1ndWlkZS9k ZXZlbG9waW5nLXBhY2thZ2VzLmh0bWwgCi0KLUtleXMgYXJlIGNhc2UtaW5zZW5zaXRpdmUuICBX ZSB0aGVyZWZvcmUgbG93ZXJjYXNlIHRoZW0uICBWYWx1ZXMgYXJlCi1jYXNlLXNlbnNpdGl2ZS4g IEN1cnJlbnRseSBvbmx5IGluZGVudGF0aW9uLXN0cnVjdHVyZWQgZmlsZXMgYXJlIHBhcnNlZC4K LUJyYWNlcyBzdHJ1Y3R1cmVkIGZpbGVzIGFyZSBub3QgaGFuZGxlZC4iIDsiIDwtIG1ha2UgZW1h Y3MgaGFwcHkuCi0gIChkZWZpbmUgKHJlYWQtYW5kLXRyaW0tbGluZSBwb3J0KQotICAgIChsZXQg KChsaW5lIChyZWFkLWxpbmUgcG9ydCkpKQotICAgICAgKGlmIChzdHJpbmc/IGxpbmUpCi0gICAg ICAgICAgKHN0cmluZy10cmltLWJvdGggbGluZSAjXHJldHVybikKLSAgICAgICAgICBsaW5lKSkp Ci0KLSAgKGRlZmluZSAoc3RyaXAtaW5zaWduaWZpY2FudC1saW5lcyBwb3J0KQotICAgIChsZXQg bG9vcCAoKGxpbmUgKHJlYWQtYW5kLXRyaW0tbGluZSBwb3J0KSkKLSAgICAgICAgICAgICAgIChy ZXN1bHQgJygpKSkKLSAgICAgIChjb25kCi0gICAgICAgKChlb2Ytb2JqZWN0PyBsaW5lKQotICAg ICAgICAocmV2ZXJzZSByZXN1bHQpKQotICAgICAgICgob3IgKHN0cmluZy1udWxsPyBsaW5lKSAo Y29tbWVudC1saW5lPyBsaW5lKSkKLSAgICAgICAgKGxvb3AgKHJlYWQtYW5kLXRyaW0tbGluZSBw b3J0KSByZXN1bHQpKQotICAgICAgIChlbHNlCi0gICAgICAgIChsb29wIChyZWFkLWFuZC10cmlt LWxpbmUgcG9ydCkgKGNvbnMgbGluZSByZXN1bHQpKSkpKSkKLQotICAobGV0IGxvb3AKLSAgICAg ICgobGluZXMgKHN0cmlwLWluc2lnbmlmaWNhbnQtbGluZXMgcG9ydCkpCi0gICAgICAgKGluZGVu dHMgICcoKSkgOyBvbmx5IGluY2x1ZGVzIGluZGVudHMgYXQgc3RhcnQgb2Ygc2VjdGlvbiBoZWFk cy4KLSAgICAgICAoc2VjdGlvbnMgJygpKQotICAgICAgIChyZXN1bHQgJygpKSkKLSAgICAobGV0 LXZhbHVlcwotICAgICAgICAoKChjdXJyZW50LWluZGVudCBsaW5lKQotICAgICAgICAgIChpZiAo bnVsbD8gbGluZXMpCi0gICAgICAgICAgICAgICh2YWx1ZXMgMCAiIikKLSAgICAgICAgICAgICAg KGxpbmUtaW5kZW50YXRpb24rcmVzdCAoZmlyc3QgbGluZXMpKSkpCi0gICAgICAgICAoKG5leHQt bGluZS1pbmRlbnQgbmV4dC1saW5lKQotICAgICAgICAgIChpZiAob3IgKG51bGw/IGxpbmVzKSAo bnVsbD8gKGNkciBsaW5lcykpKQotICAgICAgICAgICAgICAodmFsdWVzIDAgIiIpCi0gICAgICAg ICAgICAgIChsaW5lLWluZGVudGF0aW9uK3Jlc3QgKHNlY29uZCBsaW5lcykpKSkpCi0gICAgICAo aWYgKG51bGw/IGxpbmVzKQotICAgICAgICAgIChyZXZlcnNlIHJlc3VsdCkKLSAgICAgICAgICAo bGV0ICgocngtcmVzdWx0IChoYXMta2V5PyBsaW5lKSkpCi0gICAgICAgICAgICAoY29uZAotICAg ICAgICAgICAgIChyeC1yZXN1bHQKLSAgICAgICAgICAgICAgKGxldCAoKGtleSAoc3RyaW5nLWRv d25jYXNlIChtYXRjaDpzdWJzdHJpbmcgcngtcmVzdWx0IDEpKSkKLSAgICAgICAgICAgICAgICAg ICAgKHZhbHVlIChtYXRjaDpzdWJzdHJpbmcgcngtcmVzdWx0IDIpKSkKLSAgICAgICAgICAgICAg ICAoY29uZAotICAgICAgICAgICAgICAgICA7OyBTaW1wbGUgc2luZ2xlIGxpbmUgImtleTogdmFs dWUiLgotICAgICAgICAgICAgICAgICAoKD0gbmV4dC1saW5lLWluZGVudCBjdXJyZW50LWluZGVu dCkKLSAgICAgICAgICAgICAgICAgIChsb29wIChjZHIgbGluZXMpIGluZGVudHMgc2VjdGlvbnMK LSAgICAgICAgICAgICAgICAgICAgICAgIChjb25zCi0gICAgICAgICAgICAgICAgICAgICAgICAg KGxpc3QgKHJldmVyc2UgKGNvbnMga2V5IHNlY3Rpb25zKSkgKGxpc3QgdmFsdWUpKQotICAgICAg ICAgICAgICAgICAgICAgICAgIHJlc3VsdCkpKQotICAgICAgICAgICAgICAgICA7OyBNdWx0aSBs aW5lICJrZXk6IHZhbHVlXG4gdmFsdWUgY29udC4uLiIuCi0gICAgICAgICAgICAgICAgICgoPiBu ZXh0LWxpbmUtaW5kZW50IGN1cnJlbnQtaW5kZW50KQotICAgICAgICAgICAgICAgICAgKGxldCot dmFsdWVzICgoKHZhbHVlLWxzdCBsaW5lcykKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIChtdWx0aS1saW5lLXZhbHVlIChjZHIgbGluZXMpCi0gICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaWYgKHN0cmluZy1udWxsPyB2YWx1ZSkKLSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnKCkK LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBg KCx2YWx1ZSkpKSkpCi0gICAgICAgICAgICAgICAgICAgIDs7IG11bHRpLWxpbmUtdmFsdWUgcmV0 dXJucyB0byB0aGUgZmlyc3QgbGluZSBhZnRlciB0aGUKLSAgICAgICAgICAgICAgICAgICAgOzsg bXVsdGktdmFsdWUuCi0gICAgICAgICAgICAgICAgICAgIChsb29wIGxpbmVzIGluZGVudHMgc2Vj dGlvbnMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgKGNvbnMKLSAgICAgICAgICAgICAgICAg ICAgICAgICAgIChsaXN0IChyZXZlcnNlIChjb25zIGtleSBzZWN0aW9ucykpIHZhbHVlLWxzdCkK LSAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCkpKSkKLSAgICAgICAgICAgICAgICAg OzsgU2VjdGlvbiBlbmRlZC4KLSAgICAgICAgICAgICAgICAgKGVsc2UKLSAgICAgICAgICAgICAg ICAgIDs7IEluZGVudGF0aW9uIGlzIHJlZHVjZWQuIENoZWNrIGJ5IGhvdyBtYW55IGxldmVscy4K LSAgICAgICAgICAgICAgICAgIChsZXQqICgoaWR4IChhbmQ9PiAobGlzdC1pbmRleAotICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGFtYmRhICh4KSAoPSBuZXh0LWxpbmUt aW5kZW50IHgpKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmRlbnRz KQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjdXQgKyA8PgotICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaWYgKGhhcy1rZXk/IG5leHQt bGluZSkgMSAwKSkpKQotICAgICAgICAgICAgICAgICAgICAgICAgIChzZWMKLSAgICAgICAgICAg ICAgICAgICAgICAgICAgKGlmIGlkeAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGRy b3Agc2VjdGlvbnMgaWR4KQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHJhaXNlCi0g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNvbmRpdGlvbgotICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAoJm1lc3NhZ2UKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIChtZXNzYWdlICJ1bmFibGUgdG8gcGFyc2UgQ2FiYWwgZmlsZSIpKSkpKSkKLSAgICAgICAg ICAgICAgICAgICAgICAgICAoaW5kIChkcm9wIGluZGVudHMgaWR4KSkpCi0gICAgICAgICAgICAg ICAgICAgIChsb29wIChjZHIgbGluZXMpIGluZCBzZWMKLSAgICAgICAgICAgICAgICAgICAgICAg ICAgKGNvbnMgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAobGlzdCAocmV2ZXJzZSAoY29u cyBrZXkgc2VjdGlvbnMpKSAobGlzdCB2YWx1ZSkpCi0gICAgICAgICAgICAgICAgICAgICAgICAg ICByZXN1bHQpKSkpKSkpCi0gICAgICAgICAgICAgOzsgU3RhcnQgb2YgYSBuZXcgc2VjdGlvbi4K LSAgICAgICAgICAgICAoKG9yIChudWxsPyBpbmRlbnRzKQotICAgICAgICAgICAgICAgICAgKD4g Y3VycmVudC1pbmRlbnQgKGZpcnN0IGluZGVudHMpKSkKLSAgICAgICAgICAgICAgKGxvb3AgKGNk ciBsaW5lcykgKGNvbnMgY3VycmVudC1pbmRlbnQgaW5kZW50cykKLSAgICAgICAgICAgICAgICAg ICAgKGNvbnMgKHN0cmluZy1kb3duY2FzZSBsaW5lKSBzZWN0aW9ucykgcmVzdWx0KSkKLSAgICAg ICAgICAgICAoZWxzZQotICAgICAgICAgICAgICAobG9vcCAoY2RyIGxpbmVzKSBpbmRlbnRzCi0g ICAgICAgICAgICAgICAgICAgIChjb25zIChzdHJpbmctZG93bmNhc2UgbGluZSkgKGNkciBzZWN0 aW9ucykpCi0gICAgICAgICAgICAgICAgICAgIHJlc3VsdCkpKSkpKSkpCi0KLShkZWZpbmUgY29u ZGl0aW9uLXJ4Ci0gIDs7IFJlZ2V4cCBmb3IgY29uZGl0aW9uYWxzLgotICAobWFrZS1yZWdleHAg Il5pZiArKC4qKSQiKSkKLQotKGRlZmluZSAoc3BsaXQtc2VjdGlvbiBzZWN0aW9uKQotICAiU3Bs aXQgU0VDVElPTiBpbiBpbmRpdmlkdWFsIHdvcmRzIHdpdGggZXhjZXB0aW9uIGZvciB0aGUgcHJl ZGljYXRlIG9mIGFuCi0naWYnIGNvbmRpdGlvbmFsLiIKLSAgKGxldCAoKHJ4LXJlc3VsdCAocmVn ZXhwLWV4ZWMgY29uZGl0aW9uLXJ4IHNlY3Rpb24pKSkKLSAgICAoaWYgcngtcmVzdWx0Ci0gICAg ICAgIGAoImlmIiAsKG1hdGNoOnN1YnN0cmluZyByeC1yZXN1bHQgMSkpCi0gICAgICAgIChtYXAg bWF0Y2g6c3Vic3RyaW5nIChsaXN0LW1hdGNoZXMgc2VjdGlvbnMtcnggc2VjdGlvbikpKSkpCi0K LShkZWZpbmUgKGpvaW4tc2VjdGlvbnMgc2VjMSBzZWMyKQotICAoZm9sZC1yaWdodCBjb25zIHNl YzIgc2VjMSkpCi0KLShkZWZpbmUgKHByZS1wcm9jZXNzLWtleXMga2V5KQotICAobWF0Y2gga2V5 Ci0gICAgKCgpICcoKSkKLSAgICAoKHNlYzEgcmVzdCAuLi4pCi0gICAgIChqb2luLXNlY3Rpb25z IChzcGxpdC1zZWN0aW9uIHNlYzEpIChwcmUtcHJvY2Vzcy1rZXlzIHJlc3QpKSkpKQotCi0oZGVm aW5lIChwcmUtcHJvY2Vzcy1lbnRyeS1rZXlzIGVudHJ5KQotICAobWF0Y2ggZW50cnkKLSAgICAo KGtleSB2YWx1ZSkKLSAgICAgKGxpc3QgKHByZS1wcm9jZXNzLWtleXMga2V5KSB2YWx1ZSkpCi0g ICAgKCgpICcoKSkpKQotCi0oZGVmaW5lIChwcmUtcHJvY2Vzcy1lbnRyaWVzLWtleXMgZW50cmll cykKLSAgIkVOVFJJRVMgaXMgYSBsaXN0IG9mIGxpc3QgcGFpcnMsIGEga2V5cyBsaXN0IGFuZCBh IHZhbHVsZXMgbGlzdCwgYXMKLXByb2R1Y2VkIGJ5ICdyZWFkLWNhYmFsJy4gIFNwbGl0IGVhY2gg ZWxlbWVudCBvZiB0aGUga2V5cyBsaXN0IGludG8gaW5kaXZpZHVhbAotd29yZHMuICBUaGlzIHBy ZS1wcm9jZXNzaW5nIGlzIHVzZWQgdG8gcmVhZCBmbGFncy4iCi0gIChtYXRjaCBlbnRyaWVzCi0g ICAgKChlbnRyeSByZXN0IC4uLikKLSAgICAgKGNvbnMgKHByZS1wcm9jZXNzLWVudHJ5LWtleXMg ZW50cnkpCi0gICAgICAgICAgIChwcmUtcHJvY2Vzcy1lbnRyaWVzLWtleXMgcmVzdCkpKQotICAg ICgoKQotICAgICAnKCkpKSkKLQotKGRlZmluZSAoZ2V0LWZsYWdzIHByZS1wcm9jZXNzZWQtZW50 cmllcykKLSAgIlBSRS1QUk9DRVNTRUQtRU5UUklFUyBpcyBhIGxpc3Qgb2YgbGlzdCBwYWlycywg YSBrZXlzIGxpc3QgYW5kIGEgdmFsdWVzCi1saXN0LCBhcyBwcm9kdWNlZCBieSAncmVhZC1jYWJh bCcgYW5kIHByZS1wcm9jZXNzZWQgYnkKLSdwcmUtcHJvY2Vzcy1lbnRyaWVzLWtleXMnLiAgUmV0 dXJuIGEgbGlzdCBvZiBwYWlycyB3aXRoIHRoZSBuYW1lIG9mIGZsYWdzIGFuZAotdGhlaXIgZGVm YXVsdCB2YWx1ZSAob25lIG9mIFwiRmFsc2VcIiBvciBcIlRydWVcIikgYXMgc3BlY2lmaWVkIGlu IHRoZSBDYWJhbCBmaWxlOgotCi0oKFwiZmxhZzEtbmFtZVwiIC4gXCJGYWxzZS1vci1UcnVlXCIp IC4uLikuIiA7IiA8LSBtYWtlIGVtYWNzIGhhcHB5Ci0gIChtYXRjaCBwcmUtcHJvY2Vzc2VkLWVu dHJpZXMKLSAgICAoKCkgJygpKQotICAgICgoKCgiZmxhZyIgZmxhZy1uYW1lICJkZWZhdWx0Iikg KGZsYWctdmFsKSkgcmVzdCAuLi4pCi0gICAgIChjb25zIChjb25zIGZsYWctbmFtZSAgZmxhZy12 YWwpCi0gICAgICAgICAgIChnZXQtZmxhZ3MgcmVzdCkpKQotICAgICgoZW50cnkgcmVzdCAuLi4g KQotICAgICAoZ2V0LWZsYWdzIHJlc3QpKQotICAgIChfICNmKSkpCi0KLTs7IFBhcnQgMjoKLTs7 Ci07OyBGdW5jdGlvbnMgdG8gcmVhZCBpbmZvcm1hdGlvbiBmcm9tIHRoZSBDYWJhbCBvYmplY3Qg Y3JlYXRlZCBieSAncmVhZC1jYWJhbCcKLTs7IGFuZCBjb252ZXJ0IENhYmFsIGZvcm1hdCBkZXBl bmRlbmNpZXMgY29uZGl0aW9uYWxzIGludG8gZXF1aXZhbGVudAotOzsgUy1leHByZXNzaW9ucy4K LQotKGRlZmluZSB0ZXN0cy1yeAotICA7OyBDYWJhbCB0ZXN0IGtleXdvcmRzCi0gIChtYWtlLXJl Z2V4cCAiKG9zfGFyY2h8ZmxhZ3xpbXBsKSAqXFwoKFsgYS16QS1aMC05Xy48Pj0tXSspXFwpIikp Ci0KLShkZWZpbmUgcGFyZW5zLXJ4Ci0gIDs7IFBhcmVudGhlc2VzIHdpdGhpbiBjb25kaXRpb25z Ci0gIChtYWtlLXJlZ2V4cCAiXFwoKC4rKVxcKSIpKQotCi0oZGVmaW5lIG9yLXJ4Ci0gIDs7IE9S IG9wZXJhdG9yIGluIGNvbmRpdGlvbnMKLSAgKG1ha2UtcmVnZXhwICIgK1xcfFxcfCArIikpCi0K LShkZWZpbmUgYW5kLXJ4Ci0gIDs7IEFORCBvcGVyYXRvciBpbiBjb25kaXRpb25zCi0gIChtYWtl LXJlZ2V4cCAiICsmJiArIikpCi0KLShkZWZpbmUgbm90LXJ4Ci0gIDs7IE5PVCBvcGVyYXRvciBp biBjb25kaXRpb25zCi0gIChtYWtlLXJlZ2V4cCAiXiEuKyIpKQotCi0oZGVmaW5lIChiaS1vcC1h cmdzIHN0ciBtYXRjaC1sc3QpCi0gICJSZXR1cm4gYSBsaXN0IHdpdGggdGhlIGFyZ3VtZW50cyBv ZiAobG9naWMpIGJpYW5yeSBvcGVyYXRvcnMuICBNQVRDSC1MU1QKLWlzIHRoZSByZXN1bHQgb2Yg J2xpc3QtbWF0Y2gnIGFnYWluc3QgYSBiaW5hcnkgb3BlcmF0b3IgcmVnZXhwIG9uIFNUUi4iCi0g IChsZXQgKChvcGVyYXRvcnMgKGxlbmd0aCBtYXRjaC1sc3QpKSkKLSAgICAobWFwIChsYW1iZGEg KGZyb20gdG8pCi0gICAgICAgICAgIChzdWJzdHJpbmcgc3RyIGZyb20gdG8pKQotICAgICAgICAg KGNvbnMgMCAobWFwIG1hdGNoOmVuZCBtYXRjaC1sc3QpKQotICAgICAgICAgKGFwcGVuZCAobWFw IG1hdGNoOnN0YXJ0IG1hdGNoLWxzdCkgKGxpc3QgKHN0cmluZy1sZW5ndGggc3RyKSkpKSkpCi0K LShkZWZpbmUgKGJpLW9wLT5zZXhwLWxpa2UgYmktb3AgYXJncykKLSAgIkJJLU9QIGlzIGEgc3Ry aW5nIHdpdGggdGhlIG5hbWUgb2YgYSBTY2hlbWUgb3BlcmF0b3Igd2hpY2ggaW4gYSBDYWJhbCBm aWxlCi1pcyByZXByZXNlbnRlZCBieSBhIGJpbmFyeSBvcGVyYXRvci4gIEFSR1MgYXJlIHRoZSBh cmd1bWVudHMgb2Ygc2FpZCBvcGVyYXRvci4KLVJldHVybiBhIHN0cmluZyByZXByZXNlbnRpbmcg YW4gUy1leHByZXNzaW9uIG9mIHRoZSBvcGVyYXRvciBhcHBsaWVkIHRvIGl0cwotYXJndW1lbnRz LiIKLSAgKGlmICg9IChsZW5ndGggYXJncykgMSkKLSAgICAgIChmaXJzdCBhcmdzKQotICAgICAg KHN0cmluZy1hcHBlbmQgIigiIGJpLW9wCi0gICAgICAgICAgICAgICAgICAgICAoZm9sZCAobGFt YmRhIChhcmcgc2VlZCkgKHN0cmluZy1hcHBlbmQgc2VlZCAiICIgYXJnKSkKLSAgICAgICAgICAg ICAgICAgICAgICAgICAgICIiIGFyZ3MpICIpIikpKQotCi0oZGVmaW5lIChub3QtPnNleHAtbGlr ZSBhcmcpCi0gICJJZiB0aGUgc3RyaW5nIEFSRyBpcyBwcmVmaXhlZCBieSBhIENhYmFsIG5lZ2F0 aW9uIG9wZXJhdG9yLCBjb252ZXJ0IGl0IHRvCi1hbiBlcXVpdmFsZW50IFNjaGVtZSBTLWV4cHJl c3Npb24gc3RyaW5nLiIKLSAgKGlmIChyZWdleHAtZXhlYyBub3QtcnggYXJnKQotICAgICAgKHN0 cmluZy1hcHBlbmQgIihub3QgIgotICAgICAgICAgICAgICAgICAgICAgKHN1YnN0cmluZyBhcmcg MSAoc3RyaW5nLWxlbmd0aCBhcmcpKQotICAgICAgICAgICAgICAgICAgICAgIikiKQotICAgICAg YXJnKSkKLQotKGRlZmluZSAocGFyZW5zLWxlc3MtY29uZC0+c2V4cC1saWtlIGNvbmRpdGlvbmFs KQotICAiQ29udmVydCBhIENhYmFsIENPTkRJVElPTkFMIHN0cmluZyBpbnRvIGEgc3RyaW5nIHdp dGggZXF1aXZhbGVudCBTY2hlbWUKLXN5bnRheC4gIFRoaXMgcHJvY2VkdXJlIGFjY2VwdHMgb25s eSBzaW1wbGUgY29uZGl0aW9uYWxzIHdpdGhvdXQgcGFyZW50aGVzZXMuIgotICA7OyBUaGUgb3V0 aGVyIG9wZXJhdGlvbiBpcyB0aGUgb25lIHdpdGggdGhlIGxvd2VzdCBwcmlvcml0eTogT1IKLSAg KGJpLW9wLT5zZXhwLWxpa2UKLSAgICJvciIKLSAgIDs7IGVhY2ggT1IgYXJndW1lbnQgbWF5IGJl IGFuIEFORCBvcGVyYXRpb24KLSAgIChtYXAgKGxhbWJkYSAob3ItYXJnKQotICAgICAgICAgIChs ZXQgKChtLWxzdCAobGlzdC1tYXRjaGVzIGFuZC1yeCBvci1hcmcpKSkKLSAgICAgICAgICAgIDs7 IGlzIHRoZXJlIGFuIEFORCBvcGVyYXRpb24/Ci0gICAgICAgICAgICAoaWYgKD4gKGxlbmd0aCBt LWxzdCkgMCkKLSAgICAgICAgICAgICAgICAoYmktb3AtPnNleHAtbGlrZQotICAgICAgICAgICAg ICAgICAiYW5kIgotICAgICAgICAgICAgICAgICA7OyBleHBhbmQgTk9UIG9wZXJhdG9ycyB3aGVu IHRoZXJlIGFyZSBBTkRzCi0gICAgICAgICAgICAgICAgIChtYXAgbm90LT5zZXhwLWxpa2UgKGJp LW9wLWFyZ3Mgb3ItYXJnIG0tbHN0KSkpCi0gICAgICAgICAgICAgICAgOzsgLi4uIGFuZCB3aGVu IHRoZXJlIGFyZW4ndC4KLSAgICAgICAgICAgICAgICAobm90LT5zZXhwLWxpa2Ugb3ItYXJnKSkp KQotICAgICAgICA7OyBsaXN0IG9mIE9SIGFyZ3VtZW50cwotICAgICAgICAoYmktb3AtYXJncyBj b25kaXRpb25hbCAobGlzdC1tYXRjaGVzIG9yLXJ4IGNvbmRpdGlvbmFsKSkpKSkKLQotKGRlZmlu ZSB0ZXN0LWtleXdvcmQtb3JuYW1lbnQgIl9fIikKLQotKGRlZmluZSAoY29uZGl0aW9uYWwtPnNl eHAtbGlrZSBjb25kaXRpb25hbCkKLSAgIkNvbnZlcnQgYSBDYWJhbCBDT05ESVRJT05BTCBzdHJp bmcgaW50byBhIHN0cmluZyB3aXRoIGVxdWl2YWxlbnQgU2NoZW1lCi1zeW50YXguIgotICA7OyBG aXJzdCB3ZSBzdWJzdGl0dXRlIFRFU1QtS0VZV09SRC1PUk5BTUVOVCBmb3IgcGFyZW50aGVzZXMg YXJvdW5kIHRlc3RzCi0gIDs7IGtleXdvcmRzIHNvIHRoYXQgcGFyZW50aGVzZXMgYXJlIG9ubHkg dXNlZCB0byBzZXQgcHJlY2VkZW5jZXMuIFRoaXMKLSAgOzsgc3Vic3RhbnRpYWxseSBzaW1wbGlm eSBwYXJzaW5nLgotICAobGV0ICgoY29uZGl0aW9uYWwKLSAgICAgICAgIChyZWdleHAtc3Vic3Rp dHV0ZS9nbG9iYWwgI2YgdGVzdHMtcnggY29uZGl0aW9uYWwKLSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgJ3ByZSAxIHRlc3Qta2V5d29yZC1vcm5hbWVudCAyCi0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHRlc3Qta2V5d29yZC1vcm5hbWVudCAncG9zdCkpKQot ICAgIChsZXQgbG9vcCAoKHN1Yi1jb25kIGNvbmRpdGlvbmFsKSkKLSAgICAgIChsZXQgKChyeC1y ZXN1bHQgKHJlZ2V4cC1leGVjIHBhcmVucy1yeCBzdWItY29uZCkpKQotICAgICAgICAoY29uZAot ICAgICAgICAgKHJ4LXJlc3VsdAotICAgICAgICAgIChwYXJlbnMtbGVzcy1jb25kLT5zZXhwLWxp a2UKLSAgICAgICAgICAgKHN0cmluZy1hcHBlbmQKLSAgICAgICAgICAgIChtYXRjaDpwcmVmaXgg cngtcmVzdWx0KQotICAgICAgICAgICAgKGxvb3AgKG1hdGNoOnN1YnN0cmluZyByeC1yZXN1bHQg MSkpCi0gICAgICAgICAgICAobWF0Y2g6c3VmZml4IHJ4LXJlc3VsdCkpKSkKLSAgICAgICAgIChl bHNlCi0gICAgICAgICAgKHBhcmVucy1sZXNzLWNvbmQtPnNleHAtbGlrZSBzdWItY29uZCkpKSkp KSkKLQotKGRlZmluZSAoZXZhbC1mbGFncyBzZXhwLWxpa2UtY29uZCBmbGFncykKLSAgIlNFWFAt TElLRS1DT05EIGlzIGEgc3RyaW5nIHJlcHJlc2VudGluZyBhbiBTLWV4cHJlc3Npb24gY29uZGl0 aW9uYWwuICBGTEFHUwotaXMgYSBsaXN0IG9mIGZsYWcgbmFtZSBhbmQgdmFsdWUgcGFpcnMgYXMg cHJvZHVjZWQgYnkgJ2dldC1mbGFncycuICBTdWJzdGl0dXRlCi1cIiN0XCIgb3IgXCIjZlwiIGFj Y29yZGluZyB0byB0aGUgdmFsdWUgb2YgZmxhZ3MuIChEZWZhdWx0IHRvIFwiVHJ1ZVwiKS4iCi0g IChmb2xkLXJpZ2h0Ci0gICAobGFtYmRhIChmbGFnIHNleHApCi0gICAgIChtYXRjaCBmbGFnCi0g ICAgICAgKChuYW1lIC4gdmFsdWUpCi0gICAgICAgIChsZXQgKChyeCAobWFrZS1yZWdleHAKLSAg ICAgICAgICAgICAgICAgICAoc3RyaW5nLWFwcGVuZCAiZmxhZyIgdGVzdC1rZXl3b3JkLW9ybmFt ZW50IG5hbWUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXN0LWtleXdvcmQt b3JuYW1lbnQpKSkpCi0gICAgICAgICAgKHJlZ2V4cC1zdWJzdGl0dXRlL2dsb2JhbAotICAgICAg ICAgICAjZiByeCBzZXhwCi0gICAgICAgICAgICdwcmUgKGlmIChzdHJpbmctY2k9IHZhbHVlICJG YWxzZSIpICIjZiIgIiN0IikgJ3Bvc3QpKSkKLSAgICAgICAoXyBzZXhwKSkpCi0gICBzZXhwLWxp a2UtY29uZAotICAgKGNvbnMgJygiW2EtekEtWjAtOV8tXSsiIC4gIlRydWUiKSBmbGFncykpKQot Ci0oZGVmaW5lIChldmFsLXRlc3RzLT5zZXhwIHNleHAtbGlrZS1jb25kKQotICAiSW4gdGhlIHN0 cmluZyBTRVhQLUxJS0UtQ09ORCBzdWJzdGl0dXRlIHRlc3Qga2V5d29yZHMgXCJvcyguLi4pXCIg YW5kCi1cImFyY2goLi4uKVwiIHdpdGggZXF1aXZhbGVudCBTY2hlbWUgY2hlY2tzLiAgUmV0cnVu IGFuIFMtZXhwcmVzc2lvbi4iCi0gICh3aXRoLWlucHV0LWZyb20tc3RyaW5nIAotICAgICAgKGZv bGQtcmlnaHQKLSAgICAgICAobGFtYmRhICh0ZXN0IHNleHApCi0gICAgICAgICAobWF0Y2ggdGVz dAotICAgICAgICAgICAoKHR5cGUgcHJlLW1hdGNoIHBvc3QtbWF0Y2gpCi0gICAgICAgICAgICAo bGV0ICgocnggKG1ha2UtcmVnZXhwCi0gICAgICAgICAgICAgICAgICAgICAgIChzdHJpbmctYXBw ZW5kIHR5cGUgdGVzdC1rZXl3b3JkLW9ybmFtZW50ICIoXFx3KykiCi0gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHRlc3Qta2V5d29yZC1vcm5hbWVudCkpKSkKLSAgICAgICAg ICAgICAgKHJlZ2V4cC1zdWJzdGl0dXRlL2dsb2JhbAotICAgICAgICAgICAgICAgI2Ygcnggc2V4 cAotICAgICAgICAgICAgICAgJ3ByZSBwcmUtbWF0Y2ggMiBwb3N0LW1hdGNoICdwb3N0KSkpCi0g ICAgICAgICAgIChfIHNleHApKSkKLSAgICAgICBzZXhwLWxpa2UtY29uZAotICAgICAgIDs7ICgl Y3VycmVudC1zeXN0ZW0pIHJldHVybnMsIGUuZy4sICJ4ODZfNjQtbGludXgiIG9yICJpNjg2LWxp bnV4Ii4KLSAgICAgICAnKCgiKG9zfGFyY2gpIiAiKHN0cmluZy1tYXRjaCBcIiIgIlwiICglY3Vy cmVudC1zeXN0ZW0pKSIpKSkKLSAgICByZWFkKSkKLQotKGRlZmluZSAoZXZhbC1pbXBsIHNleHAt bGlrZS1jb25kKQotICAiQ2hlY2sgZm9yIHRoZSBDYWJhbCB0ZXN0IFwiaW1wbCguLi4pXCIgaW4g dGhlIHN0cmluZyBTRVhQLUxJS0UtQ09ORC4KLUFzc3VtZSB0aGUgbW9kdWxlIGRlY2xhcmluZyB0 aGUgZ2VuZXJhdGVkIHBhY2thZ2UgaW5jbHVkZXMgYSBsb2NhbCB2YXJpYWJsZQotY2FsbGVkIFwi aGFza2VsbC1pbXBsZW1lbnRhdGlvblwiIHdpdGggYSBzdHJpbmcgdmFsdWUgb2YgdGhlIGZvcm0g TkFNRS1WRVJTSU9OCi1hZ2FpbnN0IHdoaWNoIHdlIGNvbXBhcmUuIgotICAod2l0aC1vdXRwdXQt dG8tc3RyaW5nCi0gICAgKGxhbWJkYSAoKQotICAgICAgKHdyaXRlCi0gICAgICAgKHdpdGgtaW5w dXQtZnJvbS1zdHJpbmcgCi0gICAgICAgICAgIChmb2xkLXJpZ2h0Ci0gICAgICAgICAgICAobGFt YmRhICh0ZXN0IHNleHApCi0gICAgICAgICAgICAgIChtYXRjaCB0ZXN0Ci0gICAgICAgICAgICAg ICAgKChwcmUtbWF0Y2ggcG9zdC1tYXRjaCkKLSAgICAgICAgICAgICAgICAgKGxldCAoKHJ4LXdp dGgtdmVyc2lvbgotICAgICAgICAgICAgICAgICAgICAgICAgKG1ha2UtcmVnZXhwCi0gICAgICAg ICAgICAgICAgICAgICAgICAgKHN0cmluZy1hcHBlbmQKLSAgICAgICAgICAgICAgICAgICAgICAg ICAgImltcGwiIHRlc3Qta2V5d29yZC1vcm5hbWVudAotICAgICAgICAgICAgICAgICAgICAgICAg ICAiKFthLXpBLVowLTlfLV0rKSAqKFs8Pj1dKykgKihbMC05Ll0rKSAqIgotICAgICAgICAgICAg ICAgICAgICAgICAgICB0ZXN0LWtleXdvcmQtb3JuYW1lbnQpKSkKLSAgICAgICAgICAgICAgICAg ICAgICAgKHJ4LXdpdGhvdXQtdmVyc2lvbgotICAgICAgICAgICAgICAgICAgICAgICAgKG1ha2Ut cmVnZXhwCi0gICAgICAgICAgICAgICAgICAgICAgICAgKHN0cmluZy1hcHBlbmQgImltcGwiIHRl c3Qta2V5d29yZC1vcm5hbWVudCAiKFxcdyspIgotICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHRlc3Qta2V5d29yZC1vcm5hbWVudCkpKSkKLSAgICAgICAgICAgICAgICAg ICAoaWYgKHJlZ2V4cC1leGVjIHJ4LXdpdGgtdmVyc2lvbiBzZXhwKQotICAgICAgICAgICAgICAg ICAgICAgICAocmVnZXhwLXN1YnN0aXR1dGUvZ2xvYmFsCi0gICAgICAgICAgICAgICAgICAgICAg ICAjZiByeC13aXRoLXZlcnNpb24gc2V4cAotICAgICAgICAgICAgICAgICAgICAgICAgJ3ByZSBw cmUtbWF0Y2ggMiAiICIgcG9zdC1tYXRjaCAiIFwiIiAxICItIiAzICJcIikiICdwb3N0KQotICAg ICAgICAgICAgICAgICAgICAgICAocmVnZXhwLXN1YnN0aXR1dGUvZ2xvYmFsCi0gICAgICAgICAg ICAgICAgICAgICAgICAjZiByeC13aXRob3V0LXZlcnNpb24gc2V4cAotICAgICAgICAgICAgICAg ICAgICAgICAgJ3ByZSBwcmUtbWF0Y2ggIi1tYXRjaCBcIiIgMSAiXCIgIiBwb3N0LW1hdGNoICIp IiAncG9zdCkpKSkKLSAgICAgICAgICAgICAgICAoXyBzZXhwKSkpCi0gICAgICAgICAgICBzZXhw LWxpa2UtY29uZAotICAgICAgICAgICAgJygoIihzdHJpbmciICJoYXNrZWxsLWltcGxlbWVudGF0 aW9uIikpKQotICAgICAgICAgcmVhZCkpKSkpCi0KLShkZWZpbmUgKGV2YWwtY2FiYWwta2V5d29y ZHMgc2V4cC1saWtlLWNvbmQgZmxhZ3MpCi0gICgoY29tcG9zZSBldmFsLXRlc3RzLT5zZXhwIGV2 YWwtaW1wbCAoY3V0IGV2YWwtZmxhZ3MgPD4gZmxhZ3MpKQotICAgc2V4cC1saWtlLWNvbmQpKQot Ci0oZGVmaW5lIChrZXktPnZhbHVlcyBtZXRhIGtleSkKLSAgIk1FVEEgaXMgdGhlIHJlcHJlc2Vu dGF0aW9uIG9mIGEgQ2FiYWwgZmlsZSBhcyBwcm9kdWNlZCBieSAncmVhZC1jYWJhbCcuCi1SZXR1 cm4gdGhlIGxpc3Qgb2YgdmFsdWVzIGFzc29jaWF0ZWQgd2l0aCBhIHNwZWNpZmljIEtFWSAoYSBz dHJpbmcpLiIKLSAgKG1hdGNoIG1ldGEKLSAgICAoKCkgJygpKQotICAgICgoKCgoPyAobGFtYmRh KHgpIChlcXVhbD8geCBrZXkpKSkpIHYpIHIgLi4uKQotICAgICB2KQotICAgICgoKGsgdikgciAu Li4pCi0gICAgIChrZXktPnZhbHVlcyAoY2RyIG1ldGEpIGtleSkpCi0gICAgKF8gImtleSBOb3Qg Zm91bnQiKSkpCi0KLShkZWZpbmUgKGtleS1zdGFydC1lbmQtPmVudHJpZXMgbWV0YSBrZXktc3Rh cnQtcngga2V5LWVuZC1yeCkKLSAgIk1FVEEgaXMgdGhlIHJlcHJlc2VudGF0aW9uIG9mIGEgQ2Fi YWwgZmlsZSBhcyBwcm9kdWNlZCBieSAncmVhZC1jYWJhbCcuCi1SZXR1cm4gYWxsIGVudHJpZXMg d2hvc2Uga2V5cyBsaXN0IHN0YXJ0cyB3aXRoIEtFWS1TVEFSVCBhbmQgZW5kcyB3aXRoCi1LRVkt RU5ELiIKLSAgKGxldCAoKHByZWQKLSAgICAgICAgIChsYW1iZGEgKHgpCi0gICAgICAgICAgIChh bmQgKHJlZ2V4cC1leGVjIGtleS1zdGFydC1yeCAoZmlyc3QgeCkpCi0gICAgICAgICAgICAgICAg KHJlZ2V4cC1leGVjIGtleS1lbmQtcnggKGxhc3QgeCkpKSkpKQotICAgICAgICAgICA7OyAoZXF1 YWw/IChsaXN0IGtleS1zdGFydCBrZXktZW5kKSAobGlzdCAoZmlyc3QgeCkgKGxhc3QgeCkpKSkp KQotICAgIChtYXRjaCBtZXRhCi0gICAgICAoKCkgJygpKQotICAgICAgKCgoKD8gcHJlZCBrKSB2 KSByIC4uLikKLSAgICAgICAoY29ucyBgKCxrICx2KQotICAgICAgICAgICAgIChrZXktc3RhcnQt ZW5kLT5lbnRyaWVzIChjZHIgbWV0YSkga2V5LXN0YXJ0LXJ4IGtleS1lbmQtcngpKSkKLSAgICAg ICgoKGsgdikgciAuLi4pCi0gICAgICAgKGtleS1zdGFydC1lbmQtPmVudHJpZXMgKGNkciBtZXRh KSBrZXktc3RhcnQtcngga2V5LWVuZC1yeCkpCi0gICAgICAoXyAia2V5IE5vdCBmb3VudCIpKSkp Ci0KLShkZWZpbmUgZWxzZS1yeAotICAobWFrZS1yZWdleHAgIl5lbHNlJCIpKQotCi0oZGVmaW5l IChjb3VudC1pZi1lbHNlIHJ4LXJlc3VsdC1scykKLSAgKGFwcGx5ICsgKG1hcCAobGFtYmRhICht KSAoaWYgbSAxIDApKSByeC1yZXN1bHQtbHMpKSkKLQotKGRlZmluZSAoYW5hbHl6ZS1lbnRyeS1j b25kIGVudHJ5KQotICAobGV0KiAoKGtleXMgKGZpcnN0IGVudHJ5KSkKLSAgICAgICAgICh2YWxz IChzZWNvbmQgZW50cnkpKQotICAgICAgICAgKHJ4LWNvbmQtcmVzdWx0Ci0gICAgICAgICAgKG1h cCAoY3V0IHJlZ2V4cC1leGVjIGNvbmRpdGlvbi1yeCA8Pikga2V5cykpCi0gICAgICAgICAocngt ZWxzZS1yZXN1bHQKLSAgICAgICAgICAobWFwIChjdXQgcmVnZXhwLWV4ZWMgZWxzZS1yeCA8Pikg a2V5cykpCi0gICAgICAgICAoY29uZC1ubyAoY291bnQtaWYtZWxzZSByeC1jb25kLXJlc3VsdCkp Ci0gICAgICAgICAoZWxzZS1ubyAoY291bnQtaWYtZWxzZSByeC1lbHNlLXJlc3VsdCkpCi0gICAg ICAgICAoY29uZC1pZHggKGxpc3QtaW5kZXggKGxhbWJkYSAocngpIChpZiByeCAjdCAjZikpIHJ4 LWNvbmQtcmVzdWx0KSkKLSAgICAgICAgIChlbHNlLWlkeCAobGlzdC1pbmRleCAobGFtYmRhIChy eCkgKGlmIHJ4ICN0ICNmKSkgcngtZWxzZS1yZXN1bHQpKQotICAgICAgICAgKGtleS1jb25kCi0g ICAgICAgICAgICAgIChjb25kCi0gICAgICAgICAgICAgICAoKG9yIChhbmQgY29uZC1pZHggZWxz ZS1pZHggKDwgY29uZC1pZHggZWxzZS1pZHgpKQotICAgICAgICAgICAgICAgICAgICAoYW5kIGNv bmQtaWR4IChub3QgZWxzZS1pZHgpKSkKLSAgICAgICAgICAgICAgICAobWF0Y2g6c3Vic3RyaW5n Ci0gICAgICAgICAgICAgICAgIChyZWNlaXZlIChoZWFkIHRhaWwpCi0gICAgICAgICAgICAgICAg ICAgICAoc3BsaXQtYXQgcngtY29uZC1yZXN1bHQgY29uZC1pZHgpIChmaXJzdCB0YWlsKSkpKQot ICAgICAgICAgICAgICAgKChvciAoYW5kIGNvbmQtaWR4IGVsc2UtaWR4ICg+IGNvbmQtaWR4IGVs c2UtaWR4KSkKLSAgICAgICAgICAgICAgICAgICAgKGFuZCAobm90IGNvbmQtaWR4KSBlbHNlLWlk eCkpCi0gICAgICAgICAgICAgICAgKG1hdGNoOnN1YnN0cmluZwotICAgICAgICAgICAgICAgICAo cmVjZWl2ZSAoaGVhZCB0YWlsKQotICAgICAgICAgICAgICAgICAgICAgKHNwbGl0LWF0IHJ4LWVs c2UtcmVzdWx0IGVsc2UtaWR4KSAoZmlyc3QgdGFpbCkpKSkKLSAgICAgICAgICAgICAgIChlbHNl Ci0gICAgICAgICAgICAgICAgIiIpKSkpCi0gICAgKHZhbHVlcyBrZXlzIHZhbHMgcngtY29uZC1y ZXN1bHQKLSAgICAgICAgICAgIHJ4LWVsc2UtcmVzdWx0IGNvbmQtbm8gZWxzZS1ubyBrZXktY29u ZCkpKQotCi0oZGVmaW5lIChyZW1vdmUtY29uZCBlbnRyeSBjb25kKQotICAobWF0Y2ggZW50cnkK LSAgICAoKGsgdikKLSAgICAgKGxpc3QgKGNkciAobWVtYmVyIGNvbmQgaykpIHYpKSkpCi0KLShk ZWZpbmUgKGdyb3VwLWFuZC1yZWR1Y2UtbGV2ZWwgZW50cmllcyBncm91cCBncm91cC1jb25kKQot ICAobGV0IGxvb3AKLSAgICAgICgodHJ1ZS1ncm91cCBncm91cCkKLSAgICAgICAoZmFsc2UtZ3Jv dXAgJygpKQotICAgICAgIChlbnRyaWVzIGVudHJpZXMpKQotICAgIChpZiAobnVsbD8gZW50cmll cykKLSAgICAgICAgKHZhbHVlcyAocmV2ZXJzZSB0cnVlLWdyb3VwKSAocmV2ZXJzZSBmYWxzZS1n cm91cCkgZW50cmllcykKLSAgICAgICAgKGxldCotdmFsdWVzICgoKGVudHJ5KSAoZmlyc3QgZW50 cmllcykpCi0gICAgICAgICAgICAgICAgICAgICAgKChrZXlzIHZhbHMgcngtY29uZC1yZXN1bHQg cngtZWxzZS1yZXN1bHQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZC1ubyBlbHNl LW5vIGtleS1jb25kKQotICAgICAgICAgICAgICAgICAgICAgICAoYW5hbHl6ZS1lbnRyeS1jb25k IGVudHJ5KSkpCi0gICAgICAgICAgKGNvbmQKLSAgICAgICAgICAgKChhbmQgKD49ICgrIGNvbmQt bm8gZWxzZS1ubykgMSkgKHN0cmluZz0gZ3JvdXAtY29uZCBrZXktY29uZCkpCi0gICAgICAgICAg ICAobG9vcCAoY29ucyAocmVtb3ZlLWNvbmQgZW50cnkgZ3JvdXAtY29uZCkgdHJ1ZS1ncm91cCkg ZmFsc2UtZ3JvdXAKLSAgICAgICAgICAgICAgICAgIChjZHIgZW50cmllcykpKQotICAgICAgICAg ICAoKGFuZCAoPj0gKCsgY29uZC1ubyBlbHNlLW5vKSAxKSAoc3RyaW5nPSBrZXktY29uZCAiZWxz ZSIpKQotICAgICAgICAgICAgKGxvb3AgdHJ1ZS1ncm91cCAoY29ucyAocmVtb3ZlLWNvbmQgZW50 cnkgImVsc2UiKSBmYWxzZS1ncm91cCkKLSAgICAgICAgICAgICAgICAgIChjZHIgZW50cmllcykp KQotICAgICAgICAgICAoZWxzZQotICAgICAgICAgICAgKHZhbHVlcyAocmV2ZXJzZSB0cnVlLWdy b3VwKSAocmV2ZXJzZSBmYWxzZS1ncm91cCkgZW50cmllcykpKSkpKSkKLQotKGRlZmluZSBkZXBl bmRlbmNpZXMtcngKLSAgKG1ha2UtcmVnZXhwICIoW2EtekEtWjAtOV8tXSspICpbXixdKiw/Iikp Ci0KIChkZWZpbmUgKGhhY2thZ2UtbmFtZS0+cGFja2FnZS1uYW1lIG5hbWUpCisgICJHaXZlbiB0 aGUgTkFNRSBvZiBhIENhYmFsIHBhY2thZ2UsIHJldHVybiB0aGUgY29ycmVzcG9uZGluZyBHdWl4 IG5hbWUuIgogICAoaWYgKHN0cmluZy1wcmVmaXg/IHBhY2thZ2UtbmFtZS1wcmVmaXggbmFtZSkK ICAgICAgIChzdHJpbmctZG93bmNhc2UgbmFtZSkKICAgICAgIChzdHJpbmctYXBwZW5kIHBhY2th Z2UtbmFtZS1wcmVmaXggKHN0cmluZy1kb3duY2FzZSBuYW1lKSkpKQogCi0oZGVmaW5lIChzcGxp dC1hbmQtZmlsdGVyLWRlcGVuZGVuY2llcyBscyBuYW1lcy10by1maWx0ZXIpCi0gICJTcGxpdCB0 aGUgY29tbWEgc2VwYXJhdGVkIGxpc3Qgb2YgZGVwZW5kZW5jaWVzIExTIGNvbWluZyBmcm9tIHRo ZSBDYWJhbAotZmlsZSwgZmlsdGVyIHBhY2thZ2VzIGluY2x1ZGVkIGluIE5BTUVTLVRPLUZJTFRF UiBhbmQgcmV0dXJuIGEgbGlzdCB3aXRoCi1pbnB1dHMgc3VpdGFibGUgZm9yIHRoZSBHdWl4IHBh Y2thZ2UuICBDdXJyZW50bHkgdGhlIHZlcnNpb24gaW5mb3JtYXRpb24gaXMKLWRpc2NhcmRlZC4i Ci0gIChkZWZpbmUgKHNwbGl0LWF0LWNvbW1hLWFuZC1maWx0ZXIgZCkKLSAgICAoZm9sZAotICAg ICAobGFtYmRhIChtIHNlZWQpCi0gICAgICAgKGxldCogKChuYW1lIChzdHJpbmctZG93bmNhc2Ug KG1hdGNoOnN1YnN0cmluZyBtIDEpKSkKLSAgICAgICAgICAgICAgKHBrZy1uYW1lIChoYWNrYWdl LW5hbWUtPnBhY2thZ2UtbmFtZSBuYW1lKSkpCi0gICAgICAgICAoaWYgKG1lbWJlciBuYW1lIG5h bWVzLXRvLWZpbHRlcikKLSAgICAgICAgICAgICBzZWVkCi0gICAgICAgICAgICAgKGNvbnMgKGxp c3QgcGtnLW5hbWUgKGxpc3QgJ3VucXVvdGUgKHN0cmluZy0+c3ltYm9sIHBrZy1uYW1lKSkpCi0g ICAgICAgICAgICAgICAgICAgc2VlZCkpKSkKLSAgICAgJygpCi0gICAgIChsaXN0LW1hdGNoZXMg ZGVwZW5kZW5jaWVzLXJ4IGQpKSkKLSAgICAKLSAgKGZvbGQgKGxhbWJkYSAoZCBwKSAoYXBwZW5k IChzcGxpdC1hdC1jb21tYS1hbmQtZmlsdGVyIGQpIHApKSAnKCkgIGxzKSkKLQotKGRlZmluZSog KGRlcGVuZGVuY2llcy1jb25kLT5zZXhwIG1ldGEgIzprZXkgKGluY2x1ZGUtdGVzdC1kZXBlbmRl bmNpZXM/ICN0KSkKLSAgIk1FVEEgaXMgdGhlIHJlcHJlc2VudGF0aW9uIG9mIGEgQ2FiYWwgZmls ZSBhcyBwcm9kdWNlZCBieSAncmVhZC1jYWJhbCcuCi1SZXR1cm4gYW4gUy1leHByZXNzaW9uIGNv bnRhaW5pbmcgdGhlIGxpc3Qgb2YgZGVwZW5kZW5jaWVzIGFzIGV4cGVjdGVkIGJ5IHRoZQotJ2lu cHV0cycgZmllbGQgb2YgYSBwYWNrYWdlLiAgVGhlIGdlbmVyYXRlZCBTLWV4cHJlc3Npb25zIG1h eSBpbmNsdWRlCi1jb25kaXRpb25hbHMgYXMgZGVmaW5lZCBpbiB0aGUgY2FiYWwgZmlsZS4gIER1 cmluZyB0aGlzIHByb2Nlc3Mgd2UgZGlzY2FyZCB0aGUKLXZlcnNpb24gaW5mb3JtYXRpb24gb2Yg dGhlIHBhY2thZ2VzLiIKLSAgKGRlZmluZSAodGFrZS1kZXBlbmRlbmNpZXMgbWV0YSkKLSAgICAo bGV0ICgoa2V5LXN0YXJ0LWV4ZSAobWFrZS1yZWdleHAgImV4ZWN1dGFibGUiKSkKLSAgICAgICAg ICAoa2V5LXN0YXJ0LWxpYiAobWFrZS1yZWdleHAgImxpYnJhcnkiKSkKLSAgICAgICAgICAoa2V5 LXN0YXJ0LXRlc3RzIChtYWtlLXJlZ2V4cCAidGVzdC1zdWl0ZSIpKQotICAgICAgICAgIChrZXkt ZW5kIChtYWtlLXJlZ2V4cCAiYnVpbGQtZGVwZW5kcyIpKSkKLSAgICAgIChhcHBlbmQKLSAgICAg ICAoa2V5LXN0YXJ0LWVuZC0+ZW50cmllcyBtZXRhIGtleS1zdGFydC1leGUga2V5LWVuZCkKLSAg ICAgICAoa2V5LXN0YXJ0LWVuZC0+ZW50cmllcyBtZXRhIGtleS1zdGFydC1saWIga2V5LWVuZCkK LSAgICAgICAoaWYgaW5jbHVkZS10ZXN0LWRlcGVuZGVuY2llcz8KLSAgICAgICAgICAgKGtleS1z dGFydC1lbmQtPmVudHJpZXMgbWV0YSBrZXktc3RhcnQtdGVzdHMga2V5LWVuZCkKLSAgICAgICAg ICAgJygpKSkpKQotCi0gIChsZXQgKChmbGFncyAoZ2V0LWZsYWdzIChwcmUtcHJvY2Vzcy1lbnRy aWVzLWtleXMgbWV0YSkpKQotICAgICAgICAoYXVnbWVudGVkLWdoYy1zdGQtbGlicyAoYXBwZW5k IChrZXktPnZhbHVlcyBtZXRhICJuYW1lIikKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBnaGMtc3RhbmRhcmQtbGlicmFyaWVzKSkpCi0gICAgKGRlbGV0ZS1kdXBsaWNh dGVzCi0gICAgIChsZXQgbG9vcCAoKGVudHJpZXMgKHRha2UtZGVwZW5kZW5jaWVzIG1ldGEpKQot ICAgICAgICAgICAgICAgIChyZXN1bHQgJygpKSkKLSAgICAgICAoaWYgKG51bGw/IGVudHJpZXMp Ci0gICAgICAgICAgIChyZXZlcnNlIHJlc3VsdCkKLSAgICAgICAgICAgKGxldCotdmFsdWVzICgo KGVudHJ5KSAoZmlyc3QgZW50cmllcykpCi0gICAgICAgICAgICAgICAgICAgICAgICAgKChrZXlz IHZhbHMgcngtY29uZC1yZXN1bHQgcngtZWxzZS1yZXN1bHQKLSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgY29uZC1ubyBlbHNlLW5vIGtleS1jb25kKQotICAgICAgICAgICAgICAgICAg ICAgICAgICAoYW5hbHl6ZS1lbnRyeS1jb25kIGVudHJ5KSkpCi0gICAgICAgICAgICAgKGNvbmQK LSAgICAgICAgICAgICAgKCg9ICgrIGNvbmQtbm8gZWxzZS1ubykgMCkKLSAgICAgICAgICAgICAg IChsb29wIChjZHIgZW50cmllcykKLSAgICAgICAgICAgICAgICAgICAgIChhcHBlbmQKLSAgICAg ICAgICAgICAgICAgICAgICAoc3BsaXQtYW5kLWZpbHRlci1kZXBlbmRlbmNpZXMgdmFscwotICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdWdtZW50 ZWQtZ2hjLXN0ZC1saWJzKQotICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCkpKQotICAgICAg ICAgICAgICAoZWxzZQotICAgICAgICAgICAgICAgKGxldC12YWx1ZXMgKCgodHJ1ZS1ncm91cCBm YWxzZS1ncm91cCBlbnRyaWVzKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZ3JvdXAt YW5kLXJlZHVjZS1sZXZlbCBlbnRyaWVzICcoKQotICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBrZXktY29uZCkpCi0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgKChjb25kLWZpbmFsKSAoZXZhbC1jYWJhbC1rZXl3b3JkcwotICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjb25kaXRpb25hbC0+c2V4cC1saWtlCi0g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsYXN0IChzcGxpdC1z ZWN0aW9uIGtleS1jb25kKSkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgZmxhZ3MpKSkKLSAgICAgICAgICAgICAgICAgKGxvb3AgZW50cmllcwotICAgICAgICAg ICAgICAgICAgICAgICAoY29uZAotICAgICAgICAgICAgICAgICAgICAgICAgKChvciAoZXE/IGNv bmQtZmluYWwgI3QpIChlcXVhbD8gY29uZC1maW5hbCAnKG5vdCAjZikpKQotICAgICAgICAgICAg ICAgICAgICAgICAgIChhcHBlbmQgKGxvb3AgdHJ1ZS1ncm91cCAnKCkpIHJlc3VsdCkpCi0gICAg ICAgICAgICAgICAgICAgICAgICAoKG9yIChlcT8gY29uZC1maW5hbCAjZikgKGVxdWFsPyBjb25k LWZpbmFsICcobm90ICN0KSkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgKGFwcGVuZCAobG9v cCBmYWxzZS1ncm91cCAnKCkpIHJlc3VsdCkpCi0gICAgICAgICAgICAgICAgICAgICAgICAoZWxz ZQotICAgICAgICAgICAgICAgICAgICAgICAgIChsZXQgKCh0cnVlLWdyb3VwLXJlc3VsdCAobG9v cCB0cnVlLWdyb3VwICcoKSkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGZhbHNl LWdyb3VwLXJlc3VsdCAobG9vcCBmYWxzZS1ncm91cCAnKCkpKSkKLSAgICAgICAgICAgICAgICAg ICAgICAgICAgIChjb25kCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgKChhbmQgKG51bGw/ IHRydWUtZ3JvdXAtcmVzdWx0KQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChu dWxsPyBmYWxzZS1ncm91cC1yZXN1bHQpKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBy ZXN1bHQpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgKChudWxsPyBmYWxzZS1ncm91cC1y ZXN1bHQpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjb25zIGAodW5xdW90ZS1zcGxp Y2luZwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh3aGVuICxjb25kLWZp bmFsICx0cnVlLWdyb3VwLXJlc3VsdCkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHJlc3VsdCkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgKChudWxsPyB0cnVlLWdy b3VwLXJlc3VsdCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNvbnMgYCh1bnF1b3Rl LXNwbGljaW5nCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVubGVzcyAs Y29uZC1maW5hbCAsZmFsc2UtZ3JvdXAtcmVzdWx0KSkKLSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgcmVzdWx0KSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZWxzZQot ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY29ucyBgKHVucXVvdGUtc3BsaWNpbmcKLSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaWYgLGNvbmQtZmluYWwKLSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLHRydWUtZ3JvdXAtcmVzdWx0Ci0g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICxmYWxzZS1ncm91cC1yZXN1 bHQpKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQpKSkpKSkpKSkp KSkpKSkpCi0KLTs7IFBhcnQgMzoKLTs7Ci07OyBSZXRyaXZlIHRoZSBkZXNpcmVkIHBhY2thZ2Ug YW5kIGl0cyBDYWJhbCBmaWxlIGZyb20KLTs7IGh0dHA6Ly9oYWNrYWdlLmhhc2tlbGwub3JnIGFu ZCBjb25zdHJ1Y3QgdGhlIEd1aXggcGFja2FnZSBTLWV4cHJlc3Npb24uCi0KIChkZWZpbmUgKGhh Y2thZ2UtZmV0Y2ggbmFtZS12ZXJzaW9uKQogICAiUmV0dXJuIHRoZSBDYWJhbCBmaWxlIGZvciB0 aGUgcGFja2FnZSBOQU1FLVZFUlNJT04sIG9yICNmIG9uIGZhaWx1cmUuICBJZgogdGhlIHZlcnNp b24gcGFydCBpcyBvbWl0dGVkIGZyb20gdGhlIHBhY2thZ2UgbmFtZSwgdGhlbiByZXR1cm4gdGhl IGxhdGVzdApAQCAtNjk2LDMzICsxMTEsNjMgQEAgdmVyc2lvbi4iCiAgICAoKGxzdCAuLi4pIGAo bGlzdCAsQChtYXAgc3RyaW5nLT5saWNlbnNlIGxzdCkpKQogICAgKF8gI2YpKSkKIAotKGRlZmlu ZSogKGhhY2thZ2UtbW9kdWxlLT5zZXhwIG1ldGEgIzprZXkgKGluY2x1ZGUtdGVzdC1kZXBlbmRl bmNpZXM/ICN0KSkKLSAgIlJldHVybiB0aGUgYHBhY2thZ2UnIFMtZXhwcmVzc2lvbiBmb3IgYSBD YWJhbCBwYWNrYWdlLiAgTUVUQSBpcyB0aGUKKworKGRlZmluZSAoY2FiYWwtZGVwZW5kZW5jaWVz LT5uYW1lcyBjYWJhbCBpbmNsdWRlLXRlc3QtZGVwZW5kZW5jaWVzPykKKyAgIlJldHVybiB0aGUg bGlzdCBvZiBkZXBlbmRlbmNpZXMgbmFtZXMgZnJvbSB0aGUgQ0FCQUwgcGFja2FnZSBvYmplY3Qu ICBJZgorSU5DTFVERS1URVNULURFUEVOREVOQ0lFUz8gaXMgI2YsIGRvIG5vdCBpbmNsdWRlIGRl cGVuZGVuY2llcyByZXF1aXJlZCBieSB0ZXN0CitzdWl0ZXMuIgorICAobGV0KiAoKGxpYiAoY2Fi YWwtcGFja2FnZS1saWJyYXJ5IGNhYmFsKSkKKyAgICAgICAgIChsaWItZGVwcyAoaWYgKHBhaXI/ IGxpYikKKyAgICAgICAgICAgICAgICAgICAgICAgKG1hcCBjYWJhbC1kZXBlbmRlbmN5LW5hbWUK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoYXBwZW5kLW1hcCBjYWJhbC1saWJyYXJ5LWRl cGVuZGVuY2llcyBsaWIpKQorICAgICAgICAgICAgICAgICAgICAgICAnKCkpKQorICAgICAgICAg KGV4ZSAoY2FiYWwtcGFja2FnZS1leGVjdXRhYmxlcyBjYWJhbCkpCisgICAgICAgICAoZXhlLWRl cHMgKGlmIChwYWlyPyBleGUpCisgICAgICAgICAgICAgICAgICAgICAgIChtYXAgY2FiYWwtZGVw ZW5kZW5jeS1uYW1lCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGFwcGVuZC1tYXAgY2Fi YWwtZXhlY3V0YWJsZS1kZXBlbmRlbmNpZXMgZXhlKSkKKyAgICAgICAgICAgICAgICAgICAgICAg JygpKSkKKyAgICAgICAgICh0cyAoY2FiYWwtcGFja2FnZS10ZXN0LXN1aXRlcyBjYWJhbCkpCisg ICAgICAgICAodHMtZGVwcyAoaWYgKHBhaXI/IHRzKQorICAgICAgICAgICAgICAgICAgICAgICAo bWFwIGNhYmFsLWRlcGVuZGVuY3ktbmFtZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIChh cHBlbmQtbWFwIGNhYmFsLXRlc3Qtc3VpdGUtZGVwZW5kZW5jaWVzIHRzKSkKKyAgICAgICAgICAg ICAgICAgICAgICAgJygpKSkpCisgICAgKGlmIGluY2x1ZGUtdGVzdC1kZXBlbmRlbmNpZXM/Cisg ICAgICAgIChkZWxldGUtZHVwbGljYXRlcyAoYXBwZW5kIGxpYi1kZXBzIGV4ZS1kZXBzIHRzLWRl cHMpKQorICAgICAgICAoZGVsZXRlLWR1cGxpY2F0ZXMgKGFwcGVuZCBsaWItZGVwcyBleGUtZGVw cykpKSkpCisKKyhkZWZpbmUgKGZpbHRlci1kZXBlbmRlbmNpZXMgZGVwZW5kZW5jaWVzIG93bi1u YW1lKQorICAiRmlsdGVyIHRoZSBkZXBlbmRlbmNpZXMgaW5jbHVkZWQgd2l0aCB0aGUgR0hDIGNv bXBpbGVyIGZyb20gREVQRU5ERU5DSUVTLCBhCitsaXN0IHdpdGggdGhlIG5hbWVzIG9mIGRlcGVu ZGVuY2llcy4gIE9XTi1OQU1FIGlzIHRoZSBuYW1lIG9mIHRoZSBDYWJhbAorcGFja2FnZSBiZWlu ZyBwcm9jZXNzZWQgYW5kIGlzIHVzZWQgdG8gZmlsdGVyIHJlZmVyZW5jZXMgdG8gaXRzZWxmLiIK KyAgKGZpbHRlciAobGFtYmRhIChkKSAobm90IChtZW1iZXIgKHN0cmluZy1kb3duY2FzZSBkKQor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY29ucyBvd24tbmFtZSBnaGMtc3Rh bmRhcmQtbGlicmFyaWVzKSkpKQorICAgICAgICAgIGRlcGVuZGVuY2llcykpCisKKyhkZWZpbmUq IChoYWNrYWdlLW1vZHVsZS0+c2V4cCBjYWJhbCAjOmtleSAoaW5jbHVkZS10ZXN0LWRlcGVuZGVu Y2llcz8gI3QpKQorICAiUmV0dXJuIHRoZSBgcGFja2FnZScgUy1leHByZXNzaW9uIGZvciBhIENh YmFsIHBhY2thZ2UuICBDQUJBTCBpcyB0aGUKIHJlcHJlc2VudGF0aW9uIG9mIGEgQ2FiYWwgZmls ZSBhcyBwcm9kdWNlZCBieSAncmVhZC1jYWJhbCcuIgogCiAgIChkZWZpbmUgbmFtZQotICAgIChm aXJzdCAoa2V5LT52YWx1ZXMgbWV0YSAibmFtZSIpKSkKKyAgICAoY2FiYWwtcGFja2FnZS1uYW1l IGNhYmFsKSkKIAogICAoZGVmaW5lIHZlcnNpb24KLSAgICAoZmlyc3QgKGtleS0+dmFsdWVzIG1l dGEgInZlcnNpb24iKSkpCi0gIAotICAoZGVmaW5lIGRlc2NyaXB0aW9uCi0gICAgKGxldCotdmFs dWVzICgoKGRlc2NyaXB0aW9uKSAoa2V5LT52YWx1ZXMgbWV0YSAiZGVzY3JpcHRpb24iKSkKLSAg ICAgICAgICAgICAgICAgICgobGluZXMgbGFzdCkKLSAgICAgICAgICAgICAgICAgICAoc3BsaXQt YXQgZGVzY3JpcHRpb24gKC0gKGxlbmd0aCBkZXNjcmlwdGlvbikgMSkpKSkKLSAgICAgIChmb2xk LXJpZ2h0IChsYW1iZGEgKGxpbmUgc2VlZCkgKHN0cmluZy1hcHBlbmQgbGluZSAiXG4iIHNlZWQp KQotICAgICAgICAgICAgICAgICAgKGZpcnN0IGxhc3QpIGxpbmVzKSkpCisgICAgKGNhYmFsLXBh Y2thZ2UtdmVyc2lvbiBjYWJhbCkpCiAgIAogICAoZGVmaW5lIHNvdXJjZS11cmwKICAgICAoc3Ry aW5nLWFwcGVuZCAiaHR0cDovL2hhY2thZ2UuaGFza2VsbC5vcmcvcGFja2FnZS8iIG5hbWUKICAg ICAgICAgICAgICAgICAgICAiLyIgbmFtZSAiLSIgdmVyc2lvbiAiLnRhci5neiIpKQogCi0gIDs7 IFNldmVyYWwgcGFja2FnZXMgZG8gbm90IGhhdmUgYW4gb2ZmaWNpYWwgaG9tZS1wYWdlIG90aGVy IHRoYW4gb24gSGFja2FnZS4KLSAgKGRlZmluZSBob21lLXBhZ2UKLSAgICAobGV0ICgoaG9tZS1w YWdlLWVudHJ5IChrZXktPnZhbHVlcyBtZXRhICJob21lcGFnZSIpKSkKLSAgICAgIChpZiAobnVs bD8gaG9tZS1wYWdlLWVudHJ5KQotICAgICAgICAgIChzdHJpbmctYXBwZW5kICJodHRwOi8vaGFj a2FnZS5oYXNrZWxsLm9yZy9wYWNrYWdlLyIgbmFtZSkKLSAgICAgICAgICAoZmlyc3QgaG9tZS1w YWdlLWVudHJ5KSkpKQorICAoZGVmaW5lIGRlcGVuZGVuY2llcworICAgIChsZXQgKChuYW1lcwor ICAgICAgICAgICAobWFwIGhhY2thZ2UtbmFtZS0+cGFja2FnZS1uYW1lCisgICAgICAgICAgICAg ICAgKChjb21wb3NlIChjdXQgZmlsdGVyLWRlcGVuZGVuY2llcyA8PgorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIChjYWJhbC1wYWNrYWdlLW5hbWUgY2FiYWwpKQorICAgICAgICAgICAg ICAgICAgICAgICAgICAoY3V0IGNhYmFsLWRlcGVuZGVuY2llcy0+bmFtZXMgPD4KKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBpbmNsdWRlLXRlc3QtZGVwZW5kZW5jaWVzPykpCisgICAg ICAgICAgICAgICAgIGNhYmFsKSkpKQorICAgICAgKG1hcCAobGFtYmRhIChuYW1lKQorICAgICAg ICAgICAgIChsaXN0IG5hbWUgKGxpc3QgJ3VucXVvdGUgKHN0cmluZy0+c3ltYm9sIG5hbWUpKSkp CisgICAgICAgICAgIG5hbWVzKSkpCiAgIAogICAoZGVmaW5lIChtYXliZS1pbnB1dHMgaW5wdXQt dHlwZSBpbnB1dHMpCiAgICAgKG1hdGNoIGlucHV0cwpAQCAtNzMyLDYgKzE3NywxMSBAQCByZXBy ZXNlbnRhdGlvbiBvZiBhIENhYmFsIGZpbGUgYXMgcHJvZHVjZWQgYnkgJ3JlYWQtY2FiYWwnLiIK ICAgICAgICAobGlzdCAobGlzdCBpbnB1dC10eXBlCiAgICAgICAgICAgICAgICAgICAgKGxpc3Qg J3F1YXNpcXVvdGUgaW5wdXRzKSkpKSkpCiAgIAorICAoZGVmaW5lIChtYXliZS1hcmd1bWVudHMp CisgICAgKGlmIChub3QgaW5jbHVkZS10ZXN0LWRlcGVuZGVuY2llcz8pCisgICAgICAgICcoKGFy Z3VtZW50cyBgKCM6dGVzdHM/ICNmKSkpCisgICAgICAgICcoKSkpCisKICAgKGxldCAoKHRhcmJh bGwgKHdpdGgtc3RvcmUgc3RvcmUKICAgICAgICAgICAgICAgICAgICAoZG93bmxvYWQtdG8tc3Rv cmUgc3RvcmUgc291cmNlLXVybCkpKSkKICAgICBgKHBhY2thZ2UKQEAgLTc0NiwyMiArMTk2LDMz IEBAIHJlcHJlc2VudGF0aW9uIG9mIGEgQ2FiYWwgZmlsZSBhcyBwcm9kdWNlZCBieSAncmVhZC1j YWJhbCcuIgogICAgICAgICAgICAgICAgICAgICAgICAgKGJ5dGV2ZWN0b3ItPm5peC1iYXNlMzIt c3RyaW5nIChmaWxlLXNoYTI1NiB0YXJiYWxsKSkKICAgICAgICAgICAgICAgICAgICAgICAgICJm YWlsZWQgdG8gZG93bmxvYWQgdGFyIGFyY2hpdmUiKSkpKSkKICAgICAgICAoYnVpbGQtc3lzdGVt IGhhc2tlbGwtYnVpbGQtc3lzdGVtKQotICAgICAgICxAKG1heWJlLWlucHV0cyAnaW5wdXRzCi0g ICAgICAgICAgICAgICAgICAgICAgIChkZXBlbmRlbmNpZXMtY29uZC0+c2V4cCBtZXRhCi0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjOmluY2x1ZGUtdGVz dC1kZXBlbmRlbmNpZXM/Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBpbmNsdWRlLXRlc3QtZGVwZW5kZW5jaWVzPykpCi0gICAgICAgKGhvbWUtcGFnZSAs aG9tZS1wYWdlKQotICAgICAgIChzeW5vcHNpcyAsQChrZXktPnZhbHVlcyBtZXRhICJzeW5vcHNp cyIpKQotICAgICAgIChkZXNjcmlwdGlvbiAsZGVzY3JpcHRpb24pCi0gICAgICAgKGxpY2Vuc2Ug LChzdHJpbmctPmxpY2Vuc2UgKGtleS0+dmFsdWVzIG1ldGEgImxpY2Vuc2UiKSkpKSkpCi0KLShk ZWZpbmUqIChoYWNrYWdlLT5ndWl4LXBhY2thZ2UgbW9kdWxlLW5hbWUKLSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIzprZXkgKGluY2x1ZGUtdGVzdC1kZXBlbmRlbmNpZXM/ICN0KSkK LSAgIkZldGNoIHRoZSBDYWJhbCBmaWxlIGZvciBQQUNLQUdFLU5BTUUgZnJvbSBoYWNrYWdlLmhh c2tlbGwub3JnLCBhbmQgcmV0dXJuCi10aGUgYHBhY2thZ2UnIFMtZXhwcmVzc2lvbiBjb3JyZXNw b25kaW5nIHRvIHRoYXQgcGFja2FnZSwgb3IgI2Ygb24gZmFpbHVyZS4iCi0gIChsZXQgKChtb2R1 bGUtbWV0YSAoaGFja2FnZS1mZXRjaCBtb2R1bGUtbmFtZSkpKQotICAgIChhbmQ9PiBtb2R1bGUt bWV0YSAoY3V0IGhhY2thZ2UtbW9kdWxlLT5zZXhwIDw+Ci0gICAgICAgICAgICAgICAgICAgICAg ICAgICAgIzppbmNsdWRlLXRlc3QtZGVwZW5kZW5jaWVzPwotICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGluY2x1ZGUtdGVzdC1kZXBlbmRlbmNpZXM/KSkpKQorICAgICAgICxAKG1heWJlLWlu cHV0cyAnaW5wdXRzIGRlcGVuZGVuY2llcykKKyAgICAgICAsQChtYXliZS1hcmd1bWVudHMpCisg ICAgICAgKGhvbWUtcGFnZSAsKGNhYmFsLXBhY2thZ2UtaG9tZS1wYWdlIGNhYmFsKSkKKyAgICAg ICAoc3lub3BzaXMgLChjYWJhbC1wYWNrYWdlLXN5bm9wc2lzIGNhYmFsKSkKKyAgICAgICAoZGVz Y3JpcHRpb24gLChjYWJhbC1wYWNrYWdlLWRlc2NyaXB0aW9uIGNhYmFsKSkKKyAgICAgICAobGlj ZW5zZSAsKHN0cmluZy0+bGljZW5zZSAoY2FiYWwtcGFja2FnZS1saWNlbnNlIGNhYmFsKSkpKSkp CisKKyhkZWZpbmUqIChoYWNrYWdlLT5ndWl4LXBhY2thZ2UgcGFja2FnZS1uYW1lICM6a2V5Cisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpbmNsdWRlLXRlc3QtZGVwZW5kZW5jaWVz PyAjdCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHBvcnQgI2YpCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIChjYWJhbC1lbnZpcm9ubWVudCAnKCkpKQorICAiRmV0 Y2ggdGhlIENhYmFsIGZpbGUgZm9yIFBBQ0tBR0UtTkFNRSBmcm9tIGhhY2thZ2UuaGFza2VsbC5v cmcsIG9yLCBpZiB0aGUKK2NhbGxlZCB3aXRoIGtleXdvcmQgcGFyYW1ldGVyIFBPUlQsIGZyb20g UE9SVC4gIFJldHVybiB0aGUgYHBhY2thZ2UnCitTLWV4cHJlc3Npb24gY29ycmVzcG9uZGluZyB0 byB0aGF0IHBhY2thZ2UsIG9yICNmIG9uIGZhaWx1cmUuCitDQUJBTC1FTlZJUk9OTUVOVCBpcyBh biBhbGlzdCBkZWZpbmluZyB0aGUgZW52aXJvbm1lbnQgaW4gd2hpY2ggdGhlIENhYmFsCitjb25k aXRpb25hbHMgYXJlIGV2YWx1YXRlZC4gIFRoZSBhY2NlcHRlZCBrZXlzIGFyZTogXCJvc1wiLCBc ImFyY2hcIiwgXCJpbXBsXCIKK2FuZCB0aGUgbmFtZSBvZiBhIGZsYWcuICBUaGUgdmFsdWUgYXNz b2NpYXRlZCB3aXRoIGEgZmxhZyBoYXMgdG8gYmUgZWl0aGVyIHRoZQorc3ltYm9sICd0cnVlJyBv ciAnZmFsc2UnLiAgVGhlIHZhbHVlIGFzc29jaWF0ZWQgd2l0aCBvdGhlciBrZXlzIGhhcyB0byBj b25mb3JtCit0byB0aGUgQ2FiYWwgZmlsZSBmb3JtYXQgZGVmaW5pdGlvbi4gIFRoZSBkZWZhdWx0 IHZhbHVlIGFzc29jaWF0ZWQgd2l0aCB0aGUKK2tleXMgXCJvc1wiLCBcImFyY2hcIiBhbmQgXCJp bXBsXCIgaXMgXCJsaW51eFwiLCBcIng4Nl82NFwiIGFuZCBcImdoY1wiCityZXNwZWN0aXZlbHku IgorICAobGV0ICgoY2FiYWwtbWV0YSAoaWYgcG9ydAorICAgICAgICAgICAgICAgICAgICAgICAg KHJlYWQtY2FiYWwgcG9ydCkKKyAgICAgICAgICAgICAgICAgICAgICAgIChoYWNrYWdlLWZldGNo IHBhY2thZ2UtbmFtZSkpKSkKKyAgICAoYW5kPT4gY2FiYWwtbWV0YSAoY29tcG9zZSAoY3V0IGhh Y2thZ2UtbW9kdWxlLT5zZXhwIDw+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAjOmluY2x1ZGUtdGVzdC1kZXBlbmRlbmNpZXM/IAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgaW5jbHVkZS10ZXN0LWRlcGVuZGVuY2llcz8pCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgKGN1dCBldmFsLWNhYmFsIDw+IGNhYmFsLWVudmlyb25tZW50KSkpKSkK IAogOzs7IGNhYmFsLnNjbSBlbmRzIGhlcmUKZGlmZiAtLWdpdCBhL2d1aXgvc2NyaXB0cy9pbXBv cnQvaGFja2FnZS5zY20gYi9ndWl4L3NjcmlwdHMvaW1wb3J0L2hhY2thZ2Uuc2NtCmluZGV4IGY3 YzE4Y2QuLmU1ZTliMGUgMTAwNjQ0Ci0tLSBhL2d1aXgvc2NyaXB0cy9pbXBvcnQvaGFja2FnZS5z Y20KKysrIGIvZ3VpeC9zY3JpcHRzL2ltcG9ydC9oYWNrYWdlLnNjbQpAQCAtMzQsNyArMzQsOSBA QAogOzs7CiAKIChkZWZpbmUgJWRlZmF1bHQtb3B0aW9ucwotICAnKChpbmNsdWRlLXRlc3QtZGVw ZW5kZW5jaWVzPyAuICN0KSkpCisgICcoKGluY2x1ZGUtdGVzdC1kZXBlbmRlbmNpZXM/IC4gI3Qp CisgICAgKHJlYWQtZnJvbS1zdGRpbj8gLiAjZikKKyAgICAoJ2NhYmFsLWVudmlyb25tZW50IC4g JygpKSkpCiAKIChkZWZpbmUgKHNob3ctaGVscCkKICAgKGRpc3BsYXkgKF8gIlVzYWdlOiBndWl4 IGltcG9ydCBoYWNrYWdlIFBBQ0tBR0UtTkFNRQpAQCAtNDUsOCArNDcsMTMgQEAgcGFja2FnZSB3 aWxsIGJlIGdlbmVyYXRlZC4gIElmIG5vIHZlcnNpb24gc3VmZml4IGlzIHBlY2lmaWVkLCB0aGVu IHRoZQogZ2VuZXJhdGVkIHBhY2thZ2UgZGVmaW5pdGlvbiB3aWxsIGNvcnJlc3BvbmQgdG8gdGhl IGxhdGVzdCBhdmFpbGFibGUKIHZlcnNpb24uXG4iKSkKICAgKGRpc3BsYXkgKF8gIgorICAtZSBB TElTVCwgLS1jYWJhbC1lbnZpcm9ubWVudD1BTElTVCAgIAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHNwZWNpZnkgZW52aXJvbm1lbnQgZm9yIENhYmFsIGV2YWx1YXRpb24iKSkKKyAg KGRpc3BsYXkgKF8gIgogICAtaCwgLS1oZWxwICAgICAgICAgICAgICAgICAgIGRpc3BsYXkgdGhp cyBoZWxwIGFuZCBleGl0IikpCiAgIChkaXNwbGF5IChfICIKKyAgLXMsIC0tc3RkaW4gICAgICAg ICAgICAgICAgICByZWFkIGZyb20gc3RhbmRhcmQgaW5wdXQiKSkKKyAgKGRpc3BsYXkgKF8gIgog ICAtdCwgLS1uby10ZXN0LWRlcGVuZGVuY2llcyAgIGRvbid0IGluY2x1ZGUgdGVzdCBvbmx5IGRl cGVuZGVuY2llcyIpKQogICAoZGlzcGxheSAoXyAiCiAgIC1WLCAtLXZlcnNpb24gICAgICAgICAg ICAgICAgZGlzcGxheSB2ZXJzaW9uIGluZm9ybWF0aW9uIGFuZCBleGl0IikpCkBAIC02Nyw2ICs3 NCwxNiBAQCB2ZXJzaW9uLlxuIikpCiAgICAgICAgICAgICAgICAgICAgKGFsaXN0LWNvbnMgJ2lu Y2x1ZGUtdGVzdC1kZXBlbmRlbmNpZXM/ICNmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgKGFsaXN0LWRlbGV0ZSAnaW5jbHVkZS10ZXN0LWRlcGVuZGVuY2llcz8KICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCkpKSkKKyAgICAgICAgIChv cHRpb24gJygjXHMgInN0ZGluIikgI2YgI2YKKyAgICAgICAgICAgICAgICAgKGxhbWJkYSAob3B0 IG5hbWUgYXJnIHJlc3VsdCkKKyAgICAgICAgICAgICAgICAgICAoYWxpc3QtY29ucyAncmVhZC1m cm9tLXN0ZGluPyAjdAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChhbGlzdC1kZWxl dGUgJ3JlYWQtZnJvbS1zdGRpbj8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHJlc3VsdCkpKSkKKyAgICAgICAgIChvcHRpb24gJygjXGUgImNhYmFsLWVudmly b25tZW50IikgI3QgI2YKKyAgICAgICAgICAgICAgICAgKGxhbWJkYSAob3B0IG5hbWUgYXJnIHJl c3VsdCkKKyAgICAgICAgICAgICAgICAgICAoYWxpc3QtY29ucyAnY2FiYWwtZW52aXJvbm1lbnQg KHJlYWQvZXZhbCBhcmcpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGFsaXN0LWRl bGV0ZSAnY2FiYWwtZW52aXJvbm1lbnQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHJlc3VsdCkpKSkKICAgICAgICAgICVzdGFuZGFyZC1pbXBvcnQtb3B0aW9u cykpCiAKIAwKQEAgLTg0LDIzICsxMDEsNDIgQEAgdmVyc2lvbi5cbiIpKQogICAgICAgICAgICAg ICAgICAgKGFsaXN0LWNvbnMgJ2FyZ3VtZW50IGFyZyByZXN1bHQpKQogICAgICAgICAgICAgICAg ICVkZWZhdWx0LW9wdGlvbnMpKQogCisgIChkZWZpbmUgKHJ1bi1pbXBvcnRlciBwYWNrYWdlLW5h bWUgb3B0cyBlcnJvci1mbikKKyAgICAobGV0ICgoc2V4cCAoaGFja2FnZS0+Z3VpeC1wYWNrYWdl CisgICAgICAgICAgICAgICAgIHBhY2thZ2UtbmFtZQorICAgICAgICAgICAgICAgICAjOmluY2x1 ZGUtdGVzdC1kZXBlbmRlbmNpZXM/CisgICAgICAgICAgICAgICAgIChhc3NvYy1yZWYgb3B0cyAn aW5jbHVkZS10ZXN0LWRlcGVuZGVuY2llcz8pCisgICAgICAgICAgICAgICAgICM6cG9ydCAoaWYg KGFzc29jLXJlZiBvcHRzICdyZWFkLWZyb20tc3RkaW4/KQorICAgICAgICAgICAgICAgICAgICAg ICAgICAgIChjdXJyZW50LWlucHV0LXBvcnQpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg I2YpCisgICAgICAgICAgICAgICAgICM6Y2FiYWwtZW52aXJvbm1lbnQKKyAgICAgICAgICAgICAg ICAgKGFzc29jLXJlZiBvcHRzICdjYWJhbC1lbnZpcm9ubWVudCkpKSkKKyAgICAgICh1bmxlc3Mg c2V4cCAoZXJyb3ItZm4pKQorICAgICAgc2V4cCkpCisKICAgKGxldCogKChvcHRzIChwYXJzZS1v cHRpb25zKSkKICAgICAgICAgIChhcmdzIChmaWx0ZXItbWFwIChtYXRjaC1sYW1iZGEKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAoKCdhcmd1bWVudCAuIHZhbHVlKQogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICB2YWx1ZSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoXyAj ZikpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAocmV2ZXJzZSBvcHRzKSkpKQotICAgICht YXRjaCBhcmdzCi0gICAgICAoKHBhY2thZ2UtbmFtZSkKLSAgICAgICAobGV0ICgoc2V4cCAoaGFj a2FnZS0+Z3VpeC1wYWNrYWdlCi0gICAgICAgICAgICAgICAgICAgIHBhY2thZ2UtbmFtZQotICAg ICAgICAgICAgICAgICAgICAjOmluY2x1ZGUtdGVzdC1kZXBlbmRlbmNpZXM/Ci0gICAgICAgICAg ICAgICAgICAgIChhc3NvYy1yZWYgb3B0cyAnaW5jbHVkZS10ZXN0LWRlcGVuZGVuY2llcz8pKSkp Ci0gICAgICAgICAodW5sZXNzIHNleHAKLSAgICAgICAgICAgKGxlYXZlIChfICJmYWlsZWQgdG8g ZG93bmxvYWQgY2FiYWwgZmlsZSBmb3IgcGFja2FnZSAnfmEnfiUiKQotICAgICAgICAgICAgICAg ICAgcGFja2FnZS1uYW1lKSkKLSAgICAgICAgIHNleHApKQotICAgICAgKCgpCi0gICAgICAgKGxl YXZlIChfICJ0b28gZmV3IGFyZ3VtZW50c34lIikpKQotICAgICAgKChtYW55IC4uLikKLSAgICAg ICAobGVhdmUgKF8gInRvbyBtYW55IGFyZ3VtZW50c34lIikpKSkpKQorICAgIChpZiAoYXNzb2Mt cmVmIG9wdHMgJ3JlYWQtZnJvbS1zdGRpbj8pCisgICAgICAgIChtYXRjaCBhcmdzCisgICAgICAg ICAgKCgpCisgICAgICAgICAgIChydW4taW1wb3J0ZXIgInN0ZGluIiBvcHRzCisgICAgICAgICAg ICAgICAgICAgICAgICAgKGxhbWJkYSAoKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxl YXZlIChfICJmYWlsZWQgdG8gaW1wb3J0IGNhYmFsIGZpbGUgZnJvbSAnfmEnfiUiKSkKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgIHBhY2thZ2UtbmFtZSkpKQorICAgICAgICAgICgobWFueSAu Li4pCisgICAgICAgICAgIChsZWF2ZSAoXyAidG9vIG1hbnkgYXJndW1lbnRzfiUiKSkpKQorICAg ICAgICAobWF0Y2ggYXJncworICAgICAgICAgICgocGFja2FnZS1uYW1lKQorICAgICAgICAgICAo cnVuLWltcG9ydGVyIHBhY2thZ2UtbmFtZSBvcHRzCisgICAgICAgICAgICAgICAgICAgICAgICAg KGxhbWJkYSAoKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxlYXZlCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgKF8gImZhaWxlZCB0byBkb3dubG9hZCBjYWJhbCBmaWxlIGZvciBw YWNrYWdlICd+YSd+JSIpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFja2FnZS1uYW1l KSkpCisgICAgICAgICAgKCgpCisgICAgICAgICAgIChsZWF2ZSAoXyAidG9vIGZldyBhcmd1bWVu dHN+JSIpKSkKKyAgICAgICAgICAoKG1hbnkgLi4uKQorICAgICAgICAgICAobGVhdmUgKF8gInRv byBtYW55IGFyZ3VtZW50c34lIikpKSkpKSkKZGlmZiAtLWdpdCBhL3Rlc3RzL2hhY2thZ2Uuc2Nt IGIvdGVzdHMvaGFja2FnZS5zY20KaW5kZXggMjNiODU0Yy4uMjI5YmVlMyAxMDA2NDQKLS0tIGEv dGVzdHMvaGFja2FnZS5zY20KKysrIGIvdGVzdHMvaGFja2FnZS5zY20KQEAgLTE3LDYgKzE3LDcg QEAKIDs7OyBhbG9uZyB3aXRoIEdOVSBHdWl4LiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251 Lm9yZy9saWNlbnNlcy8+LgogCiAoZGVmaW5lLW1vZHVsZSAodGVzdC1oYWNrYWdlKQorICAjOnVz ZS1tb2R1bGUgKGd1aXggaW1wb3J0IGNhYmFsKQogICAjOnVzZS1tb2R1bGUgKGd1aXggaW1wb3J0 IGhhY2thZ2UpCiAgICM6dXNlLW1vZHVsZSAoZ3VpeCB0ZXN0cykKICAgIzp1c2UtbW9kdWxlIChz cmZpIHNyZmktNjQpCkBAIC0zNSw0NCArMzYsNDQgQEAgZXhlY3V0YWJsZSBjYWJhbAogICAgIG10 bCAgICAgICAgPj0gMi4wICAgICAgJiYgPCAzCiAiKQogCi07OyBVc2UgVEFCcyB0byBpbmRlbnQg bGluZXMgYW5kIHRvIHNlcGFyYXRlIGtleXMgZnJvbSB2YWx1ZS4KIChkZWZpbmUgdGVzdC1jYWJh bC0yCi0gICJuYW1lOglmb28KLXZlcnNpb246CTEuMC4wCi1ob21lcGFnZToJaHR0cDovL3Rlc3Qu b3JnCi1zeW5vcHNpczoJc3lub3BzaXMKLWRlc2NyaXB0aW9uOglkZXNjcmlwdGlvbgotbGljZW5z ZToJQlNEMwotZXhlY3V0YWJsZSBjYWJhbAotCWJ1aWxkLWRlcGVuZHM6CUhUVFAgICAgICAgPj0g NDAwMC4yLjUgJiYgPCA0MDAwLjMsCi0JCW10bCAgICAgICAgPj0gMi4wICAgICAgJiYgPCAzCi0i KQotCi07OyBVc2UgaW5kZW50YXRpb24gd2l0aCBjb21tYSBhcyBmb3VuZCwgZS5nLiwgaW4gJ2hh ZGRvY2stYXBpJy4KLShkZWZpbmUgdGVzdC1jYWJhbC0zCiAgICJuYW1lOiBmb28KIHZlcnNpb246 IDEuMC4wCiBob21lcGFnZTogaHR0cDovL3Rlc3Qub3JnCiBzeW5vcHNpczogc3lub3BzaXMKIGRl c2NyaXB0aW9uOiBkZXNjcmlwdGlvbgogbGljZW5zZTogQlNEMwotZXhlY3V0YWJsZSBjYWJhbAot ICAgIGJ1aWxkLWRlcGVuZHM6Ci0gICAgICAgIEhUVFAgICAgICAgPj0gNDAwMC4yLjUgJiYgPCA0 MDAwLjMKLSAgICAgICwgbXRsICAgICAgICA+PSAyLjAgICAgICAmJiA8IDMKK2V4ZWN1dGFibGUg Y2FiYWwgeworYnVpbGQtZGVwZW5kczoKKyAgSFRUUCAgICAgICA+PSA0MDAwLjIuNSAmJiA8IDQw MDAuMywKKyAgbXRsICAgICAgICA+PSAyLjAgICAgICAmJiA8IDMKK30KICIpCiAKLShkZWZpbmUg dGVzdC1jb25kLTEKLSAgIihvcyhkYXJ3aW4pIHx8ICEoZmxhZyhkZWJ1ZykpKSAmJiBmbGFnKGNp cHMpIikKLQotKGRlZmluZSByZWFkLWNhYmFsCi0gIChAQCAoZ3VpeCBpbXBvcnQgaGFja2FnZSkg cmVhZC1jYWJhbCkpCi0KLShkZWZpbmUgZXZhbC1jYWJhbC1rZXl3b3JkcwotICAoQEAgKGd1aXgg aW1wb3J0IGhhY2thZ2UpIGV2YWwtY2FiYWwta2V5d29yZHMpKQotCi0oZGVmaW5lIGNvbmRpdGlv bmFsLT5zZXhwLWxpa2UKLSAgKEBAIChndWl4IGltcG9ydCBoYWNrYWdlKSBjb25kaXRpb25hbC0+ c2V4cC1saWtlKSkKKzs7IEEgZnJhZ21lbnQgb2YgYSByZWFsIENhYmFsIGZpbGUgd2l0aCBtaW5v ciBtb2RpZmljYXRpb24gdG8gY2hlY2sgcHJlY2VkZW5jZQorOzsgb2YgJ2FuZCcgb3ZlciAnb3In LgorKGRlZmluZSB0ZXN0LXJlYWQtY2FiYWwtMQorICAibmFtZTogdGVzdC1tZQorbGlicmFyeQor ICAtLSBDaG9vc2Ugd2hpY2ggbGlicmFyeSB2ZXJzaW9ucyB0byB1c2UuCisgIGlmIGZsYWcoYmFz ZTRwb2ludDgpCisgICAgQnVpbGQtZGVwZW5kczogYmFzZSA+PSA0LjggJiYgPCA1CisgIGVsc2UK KyAgICBpZiBmbGFnKGJhc2U0KQorICAgICAgQnVpbGQtZGVwZW5kczogYmFzZSA+PSA0ICYmIDwg NC44CisgICAgZWxzZQorICAgICAgaWYgZmxhZyhiYXNlMykKKyAgICAgICAgQnVpbGQtZGVwZW5k czogYmFzZSA+PSAzICYmIDwgNAorICAgICAgZWxzZQorICAgICAgICBCdWlsZC1kZXBlbmRzOiBi YXNlIDwgMworICBpZiBmbGFnKGJhc2U0cG9pbnQ4KSB8fCBmbGFnKGJhc2U0KSAmJiBmbGFnKGJh c2UzKQorICAgIEJ1aWxkLWRlcGVuZHM6IHJhbmRvbQorICBCdWlsZC1kZXBlbmRzOiBjb250YWlu ZXJzCisKKyAgLS0gTW9kdWxlcyB0aGF0IGFyZSBhbHdheXMgYnVpbHQuCisgIEV4cG9zZWQtTW9k dWxlczoKKyAgICBUZXN0LlF1aWNrQ2hlY2suRXhjZXB0aW9uCisiKQogCiAodGVzdC1iZWdpbiAi aGFja2FnZSIpCiAKQEAgLTExNSwxOCArMTE2LDI1IEBAIGV4ZWN1dGFibGUgY2FiYWwKICh0ZXN0 LWFzc2VydCAiaGFja2FnZS0+Z3VpeC1wYWNrYWdlIHRlc3QgMiIKICAgKGV2YWwtdGVzdC13aXRo LWNhYmFsIHRlc3QtY2FiYWwtMikpCiAKLSh0ZXN0LWFzc2VydCAiaGFja2FnZS0+Z3VpeC1wYWNr YWdlIHRlc3QgMyIKLSAgKGV2YWwtdGVzdC13aXRoLWNhYmFsIHRlc3QtY2FiYWwtMykpCi0KLSh0 ZXN0LWFzc2VydCAiY29uZGl0aW9uYWwtPnNleHAtbGlrZSIKLSAgKG1hdGNoCi0gICAgKGV2YWwt Y2FiYWwta2V5d29yZHMKLSAgICAgKGNvbmRpdGlvbmFsLT5zZXhwLWxpa2UgdGVzdC1jb25kLTEp Ci0gICAgICcoKCJkZWJ1ZyIgLiAiRmFsc2UiKSkpCi0gICAgKCgnYW5kICgnb3IgKCdzdHJpbmct bWF0Y2ggImRhcndpbiIgKCclY3VycmVudC1zeXN0ZW0pKSAoJ25vdCAnI2YpKSAnI3QpCisodGVz dC1hc3NlcnQgInJlYWQtY2FiYWwgdGVzdCAxIgorICAobWF0Y2ggKGNhbGwtd2l0aC1pbnB1dC1z dHJpbmcgdGVzdC1yZWFkLWNhYmFsLTEgcmVhZC1jYWJhbCkKKyAgICAoKCgibmFtZSIgKCJ0ZXN0 LW1lIikpCisgICAgICAoJ3NlY3Rpb24gJ2xpYnJhcnkKKyAgICAgICAgICAgICAgICgoJ2lmICgn ZmxhZyAiYmFzZTRwb2ludDgiKQorICAgICAgICAgICAgICAgICAgICAoKCJidWlsZC1kZXBlbmRz IiAoImJhc2UgPj0gNC44ICYmIDwgNSIpKSkKKyAgICAgICAgICAgICAgICAgICAgKCgnaWYgKCdm bGFnICJiYXNlNCIpCisgICAgICAgICAgICAgICAgICAgICAgICAgKCgiYnVpbGQtZGVwZW5kcyIg KCJiYXNlID49IDQgJiYgPCA0LjgiKSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgKCgnaWYg KCdmbGFnICJiYXNlMyIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCJidWlsZC1k ZXBlbmRzIiAoImJhc2UgPj0gMyAmJiA8IDQiKSkpCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAoKCJidWlsZC1kZXBlbmRzIiAoImJhc2UgPCAzIikpKSkpKSkpCisgICAgICAgICAgICAg ICAgKCdpZiAoJ29yICgnZmxhZyAiYmFzZTRwb2ludDgiKQorICAgICAgICAgICAgICAgICAgICAg ICAgICAoJ2FuZCAoJ2ZsYWcgImJhc2U0IikgKCdmbGFnICJiYXNlMyIpKSkKKyAgICAgICAgICAg ICAgICAgICAgKCgiYnVpbGQtZGVwZW5kcyIgKCJyYW5kb20iKSkpCisgICAgICAgICAgICAgICAg ICAgICgpKQorICAgICAgICAgICAgICAgICgiYnVpbGQtZGVwZW5kcyIgKCJjb250YWluZXJzIikp CisgICAgICAgICAgICAgICAgKCJleHBvc2VkLW1vZHVsZXMiICgiVGVzdC5RdWlja0NoZWNrLkV4 Y2VwdGlvbiIpKSkpKQogICAgICAjdCkKLSAgICAoeAotICAgICAocGsgJ2ZhaWwgeCAjZikpKSkK KyAgICAoeCAocGsgJ2ZhaWwgeCAjZikpKSkKIAogKHRlc3QtZW5kICJoYWNrYWdlIikKIAotLSAK Mi4yLjEKCg== --001a11403fdecf6f780517c6d107--