From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.org!not-for-mail From: Luke Lee Newsgroups: gmane.emacs.devel Subject: Extensive update to hideif.el Date: Thu, 24 Oct 2013 17:48:12 +0800 Message-ID: NNTP-Posting-Host: plane.gmane.org Mime-Version: 1.0 Content-Type: multipart/mixed; boundary=047d7b15af69a1fb2c04e9798a0b X-Trace: ger.gmane.org 1382623162 13329 80.91.229.3 (24 Oct 2013 13:59:22 GMT) X-Complaints-To: usenet@ger.gmane.org NNTP-Posting-Date: Thu, 24 Oct 2013 13:59:22 +0000 (UTC) To: emacs-devel@gnu.org Original-X-From: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Thu Oct 24 15:59:28 2013 Return-path: Envelope-to: ged-emacs-devel@m.gmane.org Original-Received: from lists.gnu.org ([208.118.235.17]) by plane.gmane.org with esmtp (Exim 4.69) (envelope-from ) id 1VZLRe-0002vN-DK for ged-emacs-devel@m.gmane.org; Thu, 24 Oct 2013 15:59:27 +0200 Original-Received: from localhost ([::1]:54554 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1VZLRe-0004Ak-3C for ged-emacs-devel@m.gmane.org; Thu, 24 Oct 2013 09:59:26 -0400 Original-Received: from eggs.gnu.org ([2001:4830:134:3::10]:49242) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1VZHXF-0000Vg-Bj for emacs-devel@gnu.org; Thu, 24 Oct 2013 05:48:59 -0400 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1VZHXD-0006pD-G1 for emacs-devel@gnu.org; Thu, 24 Oct 2013 05:48:57 -0400 Original-Received: from mail-pd0-x22f.google.com ([2607:f8b0:400e:c02::22f]:57203) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1VZHXC-0006oz-Lx for emacs-devel@gnu.org; Thu, 24 Oct 2013 05:48:55 -0400 Original-Received: by mail-pd0-f175.google.com with SMTP id g10so2168625pdj.6 for ; Thu, 24 Oct 2013 02:48:53 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=mime-version:from:date:message-id:subject:to:content-type; bh=MF0v81qdW1hMP2ZxG3x6uheHybwzZi456ELM1udTsDQ=; b=uZj3542RI8cZTFEjag03VcWW4ZE8e0g0kfFMLW4JAs3pEYpqNlrh9nIWq+mPwzQv1l FcMo0ajhEbt1bdz/uxa+CuGlw0Es/X65DzEyQMQZNUSUm1Ht/oHHp3hBSk3GlxbynE3A vaW2FoTC77gJapJsxcJzONVvJYoEwhh1B1xrKg/E4c0pbQN3jNrg6gKTiye1jBSomltm wvwK0vAmwdIXb8USzxw5Dcxg3Jb/LozVVoUVvVPlztEfjgnz/PHZryFFBBG++VjxZ8a8 TgcnKUygo1cnx2LTeQ7WW6UNyrlEBQKHrgbqlhZqkm9jbt1MYlQa7x5EIaDhMfoBfqpQ NfkQ== X-Received: by 10.68.194.69 with SMTP id hu5mr1924890pbc.170.1382608132984; Thu, 24 Oct 2013 02:48:52 -0700 (PDT) Original-Received: by 10.70.17.226 with HTTP; Thu, 24 Oct 2013 02:48:12 -0700 (PDT) X-detected-operating-system: by eggs.gnu.org: Error: Malformed IPv6 address (bad octet value). X-Received-From: 2607:f8b0:400e:c02::22f X-Mailman-Approved-At: Thu, 24 Oct 2013 09:59:20 -0400 X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Original-Sender: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Xref: news.gmane.org gmane.emacs.devel:164510 Archived-At: --047d7b15af69a1fb2c04e9798a0b Content-Type: multipart/alternative; boundary=047d7b15af69a1fb2804e9798a09 --047d7b15af69a1fb2804e9798a09 Content-Type: text/plain; charset=ISO-8859-1 Hi Emacs developers, I've extensively modified hideif.el as attached and would like to contribute it back to Emacs. I've also posted it on EmacsWiki earlier http://www.emacswiki.org/emacs/HideIfDef. Here is the original posting: ---------- An extensively rewritten version is uploaded. Here I list some of the enhancements: * Automatically find and add #define macros when hiding * Complete C expression with operator precedence implemented * Hex/octal/decimal number supported * Bit shift operation supported * Stringification / string concatenation / token concatenation supported * Argumented macro expansion supported, even for complicated and rarely used token replacement syntax. #define TESTVAL1 0x123 #define TESTVAL2 291 // 0x123 #define CONCAT(x,y) x ## y #define CONCAT2(x,y) CONCAT(x,y) #if CONCAT( TESTVAL1=,=TESTVAL2 ) #error correct #else #error wrong #endif #if CONCAT( TESTVAL1!,=TESTVAL2 ) #error wrong #else #error correct #endif after hiding, it will become #define TESTVAL1 0x123 #define TESTVAL2 291 // 0x123 #define CONCAT(x,y) x ## y #define CONCAT2(x,y) CONCAT(x,y) #if CONCAT( TESTVAL1=,=TESTVAL2 ) #error correct #else... #endif #if CONCAT( TESTVAL1!,=TESTVAL2 )... #else #error correct #endif * GNU C compatibility, i.e. "..." in macro argument supported. Ex. #define macro(arg1, arg2...) arg1 + arg2 * hide/unhide a region * Evaluate a macro, just mark the region you want to evalute and press "C-c @ e" * When hiding #if..#endif themselves, consecutive "..." "..." will be merged as a single "..." Tips: * All C files share the same macro database (i.e. hide-ifdef-env). * Goto your "config.h" file and hide it, it will extract all #defines. * Goto each of your .h file in the order that C compiler compiles your C file, hide each .h file one by one. (TODO: project support, auto search for .h files) * To save your current macro database, you need to deploy "session" package and add the following into your init.el file: (unless (assoc 'hide-ifdef-env session-globals-include) (push '(hide-ifdef-env 100000 t) session-globals-include)) * To exclude some patterns (to reduce the size of macro database), for example, if you want to exclude all macros started with "DOC_", put the following into your init.el: (setf hide-ifdef-exclude-define-regexp-pattern "DOC_.*") Compatibility note: The original "semantic" hack no longer work. ---------- Thanks for all those nice Emacs experiences! -- Best regards, Luke Lee --047d7b15af69a1fb2804e9798a09 Content-Type: text/html; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable
Hi Emacs developers,

I've extensive= ly modified hideif.el as attached and would like to contribute it back to E= macs. I've also posted it on EmacsWiki earlier=A0http://www.emacswiki.org/emacs/HideIfDef= . Here is the original posting:

----------=A0
An e= xtensively rewritten version is uploaded. Here I list some of the enhanceme= nts:=A0
* Automatically find and add #define macros when hiding=A0
* Complete C expression with operator precedence implemented=A0<= /span>
* Hex/octal/decimal number supported=A0
* Bit shift operation supported=A0
* Stringification / string concatenation / token concatenation s= upported=A0
* Argumented macro expansion supported, even for complicated and= rarely used token replacement syntax.=A0

#define TESTVAL1 0x123=A0
#define TESTVAL2 291 // 0x123=A0

#define CONCAT(x,y) x ## y=A0
#define = CONCAT2(x,y) CONCAT(x,y)=A0

#if CONCAT( TESTVAL1=3D,=3DTESTVAL2 )=A0
#error correct=A0
#else=A0
#error wrong=A0
#endif=A0

#if CONCAT( TESTVAL1!,=3DTESTVAL2 )=A0
#error wrong=A0
#else=A0
#error correct=A0
#endif=A0

after hiding, it will become=A0

#define TESTVAL1 0x123=A0
#define TESTVAL2 291 // 0x123=A0

#define CONCAT(x,y) x ## y=A0
#define = CONCAT2(x,y) CONCAT(x,y)=A0

#if CONCAT( TESTVAL1=3D,=3DTESTVAL2 )=A0
#error correct=A0
#else...=A0 #endif=A0

#if CONCAT( TESTVAL1!,=3DTESTVAL2 )...=A0
#else=A0
#error correct=A0
#endif=A0

* GNU C compatibility, i.e. "..." in macro ar= gument supported.=A0
Ex. #define macro(arg1, arg2...) arg1 + arg2=A0
= * hide/unhide a region=A0
* Evaluate a macro, just mark the region you want to evalute and= press "C-c @ e"=A0
* When hiding #if..#endif themselves, consecutive "..."= ; "..." will be merged as a single "..."=A0

Tips:=A0
* All C files share the same macro database (i.e. hide-ifdef-env= ).=A0
* Goto your "config.h" file and hide it, it will extra= ct all #defines.=A0
* Goto each of your .h file in the order that C compiler compile= s your C file, hide each .h file one by one. (TODO: project support, auto s= earch for .h files)=A0
* To save your current macro database, you need to deploy "= session" package and add the following into your init.el file:=A0
(unless (assoc 'hide-ifdef-env session-globals-include)=A0
=A0 (push '(hide-ifdef-env 100000 t) session-globals-include= ))=A0
* To exclude some patterns (to reduce the size of macro database= ), for example, if you want to exclude all macros started with "DOC_&q= uot;, put the following into your init.el:=A0
(setf hide-ifdef-exclude-define-regexp-pattern= "DOC_.*")=A0

Compatibility note:=A0

The original "semantic" hack no longer work.= =A0
----------=A0

Thanks for all = those nice Emacs experiences!

--
Best regards,
Luke Lee

--047d7b15af69a1fb2804e9798a09-- --047d7b15af69a1fb2c04e9798a0b Content-Type: application/octet-stream; name="hideif.el" Content-Disposition: attachment; filename="hideif.el" Content-Transfer-Encoding: base64 X-Attachment-Id: f_hn5t1hpf0 Ozs7IGhpZGVpZi5lbCAtLS0gaGlkZXMgc2VsZWN0ZWQgY29kZSB3aXRoaW4gaWZkZWYKCjs7IENv cHlyaWdodCAoQykgMTk4OCwgMTk5NCwgMjAwMS0yMDEyLCAyMDEzICBGcmVlIFNvZnR3YXJlIEZv dW5kYXRpb24sIEluYy4KCjs7IEF1dGhvcjogQnJpYW4gTWFyaWNrCjs7ICAgICAgRGFuaWVsIExh TGliZXJ0ZSA8bGliZXJ0ZUBob2xvbmV4dXMub3JnPgo7OyBNYWludGFpbmVyOiBGU0YKOzsgS2V5 d29yZHM6IGMsIG91dGxpbmVzCgo7OyBUaGlzIGZpbGUgaXMgcGFydCBvZiBHTlUgRW1hY3MuCgo7 OyBHTlUgRW1hY3MgaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k L29yIG1vZGlmeQo7OyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1Ymxp YyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQo7OyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u LCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgo7OyAoYXQgeW91ciBvcHRpb24p IGFueSBsYXRlciB2ZXJzaW9uLgoKOzsgR05VIEVtYWNzIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBo b3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCjs7IGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsg d2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCjs7IE1FUkNIQU5UQUJJTElUWSBv ciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKOzsgR05VIEdlbmVy YWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KCjs7IFlvdSBzaG91bGQgaGF2ZSBy ZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCjs7IGFsb25n IHdpdGggR05VIEVtYWNzLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNl cy8+LgoKOzs7IENvbW1lbnRhcnk6Cgo7OyBUbyBpbml0aWFsaXplLCB0b2dnbGUgdGhlIGhpZGUt aWZkZWYgbWlub3IgbW9kZSB3aXRoCjs7Cjs7IE0teCBoaWRlLWlmZGVmLW1vZGUKOzsKOzsgVGhp cyB3aWxsIHNldCB1cCBrZXkgYmluZGluZ3MgYW5kIGNhbGwgaGlkZS1pZmRlZi1tb2RlLWhvb2sg aWYgaXQKOzsgaGFzIGEgdmFsdWUuICBUbyBleHBsaWNpdGx5IGhpZGUgaWZkZWZzIHVzaW5nIGEg YnVmZmVyLWxvY2FsCjs7IGRlZmluZSBsaXN0IChkZWZhdWx0IGVtcHR5KSwgdHlwZQo7Owo7OyBN LXggaGlkZS1pZmRlZnMgIG9yIEMtYyBAIGgKOzsKOzsgSGlkZS1pZmRlZiBzdXBwcmVzc2VzIHRo ZSBkaXNwbGF5IG9mIGNvZGUgdGhhdCB0aGUgcHJlcHJvY2Vzc29yIHdvdWxkbid0Cjs7IHBhc3Mg dGhyb3VnaC4gIFRoZSBzdXBwb3J0IG9mIGNvbnN0YW50IGV4cHJlc3Npb25zIGluICNpZiBsaW5l cyBpcwo7OyBsaW1pdGVkIHRvIGlkZW50aWZpZXJzLCBwYXJlbnMsIGFuZCB0aGUgb3BlcmF0b3Jz OiAmJiwgfHwsICEsIGFuZAo7OyAiZGVmaW5lZCIuICBQbGVhc2UgZXh0ZW5kIHRoaXMuCjs7Cjs7 IFRoZSBoaWRkZW4gY29kZSBpcyBtYXJrZWQgYnkgZWxsaXBzZXMgKC4uLikuICBCZQo7OyBjYXV0 aW91cyB3aGVuIGVkaXRpbmcgbmVhciBlbGxpcHNlcywgc2luY2UgdGhlIGhpZGRlbiB0ZXh0IGlz Cjs7IHN0aWxsIGluIHRoZSBidWZmZXIsIGFuZCB5b3UgY2FuIG1vdmUgdGhlIHBvaW50IGludG8g aXQgYW5kIG1vZGlmeQo7OyB0ZXh0IHVuYXdhcmVzLgo7OyBZb3UgY2FuIG1ha2UgeW91ciBidWZm ZXIgcmVhZC1vbmx5IHdoaWxlIGhpZGUtaWZkZWYtaGlkaW5nIGJ5IHNldHRpbmcKOzsgaGlkZS1p ZmRlZi1yZWFkLW9ubHkgdG8gYSBub24tbmlsIHZhbHVlLiAgWW91IGNhbiB0b2dnbGUgdGhpcwo7 OyB2YXJpYWJsZSB3aXRoIGhpZGUtaWZkZWYtdG9nZ2xlLXJlYWQtb25seSAoQy1jIEAgQy1xKS4K OzsKOzsgWW91IGNhbiB1bmRvIHRoZSBlZmZlY3Qgb2YgaGlkZS1pZmRlZnMgYnkgdHlwaW5nCjs7 Cjs7IE0teCBzaG93LWlmZGVmcyAgb3IgQy1jIEAgcwo7Owo7OyBVc2UgTS14IGhpZGUtaWZkZWYt ZGVmaW5lIChDLWMgQCBkKSB0byBkZWZpbmUgYSBzeW1ib2wuCjs7IFVzZSBNLXggaGlkZS1pZmRl Zi11bmRlZiAoQy1jIEAgdSkgdG8gdW5kZWZpbmUgYSBzeW1ib2wuCjs7Cjs7IElmIHlvdSBkZWZp bmUgb3IgdW5kZWZpbmUgYSBzeW1ib2wgd2hpbGUgaGlkZS1pZmRlZi1tb2RlIGlzIGluIGVmZmVj dCwKOzsgdGhlIGRpc3BsYXkgd2lsbCBiZSB1cGRhdGVkLiAgT25seSB0aGUgZGVmaW5lIGxpc3Qg Zm9yIHRoZSBjdXJyZW50Cjs7IGJ1ZmZlciB3aWxsIGJlIGFmZmVjdGVkLiAgWW91IGNhbiBzYXZl IGNoYW5nZXMgdG8gdGhlIGxvY2FsIGRlZmluZQo7OyBsaXN0IHdpdGggaGlkZS1pZmRlZi1zZXQt ZGVmaW5lLWFsaXN0LiAgVGhpcyBhZGRzIGVudHJpZXMKOzsgdG8gaGlkZS1pZmRlZi1kZWZpbmUt YWxpc3QuCjs7Cjs7IElmIHlvdSBoYXZlIGRlZmluZWQgYSBoaWRlLWlmZGVmLW1vZGUtaG9vaywg eW91IGNhbiBzZXQKOzsgdXAgYSBsaXN0IG9mIHN5bWJvbHMgdGhhdCBtYXkgYmUgdXNlZCBieSBo aWRlLWlmZGVmcyBhcyBpbiB0aGUKOzsgZm9sbG93aW5nIGV4YW1wbGU6Cjs7Cjs7IChhZGQtaG9v ayAnaGlkZS1pZmRlZi1tb2RlLWhvb2sKOzsgICAgICAobGFtYmRhICgpCjs7ICAgICAgICh1bmxl c3MgaGlkZS1pZmRlZi1kZWZpbmUtYWxpc3QKOzsgICAgICAgICAoc2V0cSBoaWRlLWlmZGVmLWRl ZmluZS1hbGlzdAo7OyAgICAgICAgICAgICAgJygobGlzdDEgT05FIFRXTykKOzsgICAgICAgICAg ICAgICAgKGxpc3QyIFRXTyBUSFJFRSkpKSkKOzsgICAgICAgKGhpZGUtaWZkZWYtdXNlLWRlZmlu ZS1hbGlzdCAnbGlzdDIpKSkgOyB1c2UgbGlzdDIgYnkgZGVmYXVsdAo7Owo7OyBZb3UgY2FuIGNh bGwgaGlkZS1pZmRlZi11c2UtZGVmaW5lLWFsaXN0IChDLWMgQCBVKSBhdCBhbnkgdGltZSB0byBz cGVjaWZ5Cjs7IGFub3RoZXIgbGlzdCB0byB1c2UuCjs7Cjs7IFRvIGNhdXNlIGlmZGVmcyB0byBi ZSBoaWRkZW4gYXMgc29vbiBhcyBoaWRlLWlmZGVmLW1vZGUgaXMgY2FsbGVkLAo7OyBzZXQgaGlk ZS1pZmRlZi1pbml0aWFsbHkgdG8gbm9uLW5pbC4KOzsKOzsgSWYgeW91IHNldCBoaWRlLWlmZGVm LWxpbmVzIHRvIHQsIGhpZGUtaWZkZWZzIGhpZGVzIGFsbCB0aGUgI2lmZGVmIGxpbmVzLgo7OyBJ biB0aGUgYWJzZW5jZSBvZiBoaWdobGlnaHRpbmcsIHRoYXQgbWlnaHQgYmUgYSBiYWQgaWRlYS4g IElmIHlvdSBzZXQKOzsgaGlkZS1pZmRlZi1saW5lcyB0byBuaWwgKHRoZSBkZWZhdWx0KSwgdGhl IHN1cnJvdW5kaW5nIHByZXByb2Nlc3Nvcgo7OyBsaW5lcyB3aWxsIGJlIGRpc3BsYXllZC4gIFRo YXQgY2FuIGJlIGNvbmZ1c2luZyBpbiBpdHMgb3duCjs7IHJpZ2h0LiAgT3RoZXIgdmFyaWF0aW9u cyBvbiBkaXNwbGF5IGFyZSBwb3NzaWJsZSwgYnV0IG5vdCBtdWNoCjs7IGJldHRlci4KOzsKOzsg WW91IGNhbiBleHBsaWNpdGx5IGhpZGUgb3Igc2hvdyBpbmRpdmlkdWFsIGlmZGVmIGJsb2NrcyBp cnJlc3BlY3RpdmUKOzsgb2YgdGhlIGRlZmluZSBsaXN0IGJ5IHVzaW5nIGhpZGUtaWZkZWYtYmxv Y2sgYW5kIHNob3ctaWZkZWYtYmxvY2suCjs7Cjs7IFlvdSBjYW4gbW92ZSB0aGUgcG9pbnQgYmV0 d2VlbiBpZmRlZnMgd2l0aCBmb3J3YXJkLWlmZGVmLCBiYWNrd2FyZC1pZmRlZiwKOzsgdXAtaWZk ZWYsIGRvd24taWZkZWYsIG5leHQtaWZkZWYsIGFuZCBwcmV2aW91cy1pZmRlZi4KOzsKOzsgSWYg eW91IGhhdmUgbWlub3ItbW9kZS1hbGlzdCBpbiB5b3VyIG1vZGUgbGluZSAodGhlIGRlZmF1bHQp IHR3byBsYWJlbHMKOzsgbWF5IGFwcGVhci4gICJJZmRlZiIgd2lsbCBhcHBlYXIgd2hlbiBoaWRl LWlmZGVmLW1vZGUgaXMgYWN0aXZlLiAgIkhpZGluZyIKOzsgd2lsbCBhcHBlYXIgd2hlbiB0ZXh0 IG1heSBiZSBoaWRkZW4gKCJoaWRlLWlmZGVmLWhpZGluZyIgaXMgbm9uLW5pbCkuCjs7Cjs7IFdy aXR0ZW4gYnkgQnJpYW4gTWFyaWNrLCBhdCBHb3VsZCwgQ29tcHV0ZXIgU3lzdGVtcyBEaXZpc2lv biwgVXJiYW5hIElMLgo7OyBFeHRlbnNpdmVseSBtb2RpZmllZCBieSBEYW5pZWwgTGFMaWJlcnRl ICh3aGlsZSBhdCBHb3VsZCkuCjs7Cjs7IEV4dGVuc2l2ZWx5IG1vZGlmaWVkIGJ5IEx1a2UgTGVl IGluIDIwMTMuCgo7OzsgQ29kZToKCihldmFsLXdoZW4tY29tcGlsZSAocmVxdWlyZSAnY2wpKQoK KGRlZmdyb3VwIGhpZGUtaWZkZWYgbmlsCiAgIkhpZGUgc2VsZWN0ZWQgY29kZSB3aXRoaW4gYGlm ZGVmJy4iCiAgOmdyb3VwICdjKQoKKGRlZmN1c3RvbSBoaWRlLWlmZGVmLWluaXRpYWxseSBuaWwK ICAiTm9uLW5pbCBtZWFucyBjYWxsIGBoaWRlLWlmZGVmcycgd2hlbiBIaWRlLUlmZGVmIG1vZGUg aXMgZmlyc3QgYWN0aXZhdGVkLiIKICA6dHlwZSAnYm9vbGVhbgogIDpncm91cCAnaGlkZS1pZmRl ZikKCihkZWZjdXN0b20gaGlkZS1pZmRlZi1yZWFkLW9ubHkgbmlsCiAgIlNldCB0byBub24tbmls IGlmIHlvdSB3YW50IGJ1ZmZlciB0byBiZSByZWFkLW9ubHkgd2hpbGUgaGlkaW5nIHRleHQuIgog IDp0eXBlICdib29sZWFuCiAgOmdyb3VwICdoaWRlLWlmZGVmKQoKKGRlZmN1c3RvbSBoaWRlLWlm ZGVmLWxpbmVzIG5pbAogICJOb24tbmlsIG1lYW5zIGhpZGUgdGhlICNpZlgsICNlbHNlLCBhbmQg I2VuZGlmIGxpbmVzLiIKICA6dHlwZSAnYm9vbGVhbgogIDpncm91cCAnaGlkZS1pZmRlZikKCihk ZWZjdXN0b20gaGlkZS1pZmRlZi1zaGFkb3cgbmlsCiAgIk5vbi1uaWwgbWVhbnMgc2hhZG93IHRl eHQgaW5zdGVhZCBvZiBoaWRpbmcgaXQuIgogIDp0eXBlICdib29sZWFuCiAgOmdyb3VwICdoaWRl LWlmZGVmCiAgOnZlcnNpb24gIjIzLjEiKQoKKGRlZmN1c3RvbSBoaWRlLWlmZGVmLWV4Y2x1ZGUt ZGVmaW5lLXJlZ2V4cC1wYXR0ZXJuIG5pbAogICJJZ25vcmUgI2RlZmluZSBuYW1lIGlmIHRoYXQg bmFtZSBtYXRjaCB0aGlzIGV4Y2x1c2lvbiBwYXR0ZXJuLiIKICA6Z3JvdXAgJ2hpZGUtaWZkZWYp CgooZGVmZmFjZSBoaWRlLWlmZGVmLXNoYWRvdyAnKCh0ICg6aW5oZXJpdCBzaGFkb3cpKSkKICAi RmFjZSBmb3Igc2hhZG93aW5nIGlmZGVmIGJsb2Nrcy4iCiAgOmdyb3VwICdoaWRlLWlmZGVmCiAg OnZlcnNpb24gIjIzLjEiKQoKCihkZWZ2YXIgaGlkZS1pZmRlZi1tb2RlLXN1Ym1hcAogIDs7IFNl dCB1cCB0aGUgc3VibWFwIHRoYXQgZ29lcyBhZnRlciB0aGUgcHJlZml4IGtleS4KICAobGV0ICgo bWFwIChtYWtlLXNwYXJzZS1rZXltYXApKSkKICAgIChkZWZpbmUta2V5IG1hcCAiZCIgJ2hpZGUt aWZkZWYtZGVmaW5lKQogICAgKGRlZmluZS1rZXkgbWFwICJ1IiAnaGlkZS1pZmRlZi11bmRlZikK ICAgIChkZWZpbmUta2V5IG1hcCAiRCIgJ2hpZGUtaWZkZWYtc2V0LWRlZmluZS1hbGlzdCkKICAg IChkZWZpbmUta2V5IG1hcCAiVSIgJ2hpZGUtaWZkZWYtdXNlLWRlZmluZS1hbGlzdCkKCiAgICAo ZGVmaW5lLWtleSBtYXAgImgiICdoaWRlLWlmZGVmcykKICAgIChkZWZpbmUta2V5IG1hcCAicyIg J3Nob3ctaWZkZWZzKQogICAgKGRlZmluZS1rZXkgbWFwICJcQy1kIiAnaGlkZS1pZmRlZi1ibG9j aykKICAgIChkZWZpbmUta2V5IG1hcCAiXEMtcyIgJ3Nob3ctaWZkZWYtYmxvY2spCgogICAgKGRl ZmluZS1rZXkgbWFwICJlIiAnaGlmLWV2YWx1YXRlLW1hY3JvKQoKICAgIChkZWZpbmUta2V5IG1h cCAiXEMtcSIgJ2hpZGUtaWZkZWYtdG9nZ2xlLXJlYWQtb25seSkKICAgIChkZWZpbmUta2V5IG1h cCAiXEMtdyIgJ2hpZGUtaWZkZWYtdG9nZ2xlLXNoYWRvd2luZykKICAgIChzdWJzdGl0dXRlLWtl eS1kZWZpbml0aW9uCiAgICAgJ3RvZ2dsZS1yZWFkLW9ubHkgJ2hpZGUtaWZkZWYtdG9nZ2xlLW91 dHNpZGUtcmVhZC1vbmx5IG1hcCkKICAgIG1hcCkKICAiS2V5bWFwIHVzZWQgYnkgYGhpZGUtaWZk ZWYtbW9kZScgdW5kZXIgYGhpZGUtaWZkZWYtbW9kZS1wcmVmaXgta2V5Jy4iKQoKKGRlZmNvbnN0 IGhpZGUtaWZkZWYtbW9kZS1wcmVmaXgta2V5ICJcQy1jQCIKICAiUHJlZml4IGtleSBmb3IgYWxs IEhpZGUtSWZkZWYgbW9kZSBjb21tYW5kcy4iKQoKKGRlZnZhciBoaWRlLWlmZGVmLW1vZGUtbWFw CiAgOzsgU2V0IHVwIHRoZSBtb2RlJ3MgbWFpbiBtYXAsIHdoaWNoIGxlYWRzIHZpYSB0aGUgcHJl Zml4IGtleSB0byB0aGUgc3VibWFwLgogIChsZXQgKChtYXAgKG1ha2Utc3BhcnNlLWtleW1hcCkp KQogICAgKGRlZmluZS1rZXkgbWFwIGhpZGUtaWZkZWYtbW9kZS1wcmVmaXgta2V5IGhpZGUtaWZk ZWYtbW9kZS1zdWJtYXApCiAgICBtYXApCiAgIktleW1hcCB1c2VkIHdpdGggYGhpZGUtaWZkZWYt bW9kZScuIikKCihlYXN5LW1lbnUtZGVmaW5lIGhpZGUtaWZkZWYtbW9kZS1tZW51IGhpZGUtaWZk ZWYtbW9kZS1tYXAKICAiTWVudSBmb3IgYGhpZGUtaWZkZWYtbW9kZScuIgogICcoIkhpZGUtSWZk ZWYiCiAgICBbIkhpZGUgc29tZSBpZmRlZnMiIGhpZGUtaWZkZWZzCiAgICAgOmhlbHAgIkhpZGUg dGhlIGNvbnRlbnRzIG9mIHNvbWUgI2lmZGVmcyJdCiAgICBbIlNob3cgYWxsIGlmZGVmcyIgc2hv dy1pZmRlZnMKICAgICA6aGVscCAiQ2FuY2VsIHRoZSBlZmZlY3RzIG9mIGBoaWRlLWlmZGVmJzog c2hvdyB0aGUgY29udGVudHMgb2YgYWxsICNpZmRlZnMiXQogICAgWyJIaWRlIGlmZGVmIGJsb2Nr IiBoaWRlLWlmZGVmLWJsb2NrCiAgICAgOmhlbHAgIkhpZGUgdGhlIGlmZGVmIGJsb2NrICh0cnVl IG9yIGZhbHNlIHBhcnQpIGVuY2xvc2luZyBvciBiZWZvcmUgdGhlIGN1cnNvciJdCiAgICBbIlNo b3cgaWZkZWYgYmxvY2siIHNob3ctaWZkZWYtYmxvY2sKICAgICA6aGVscCAiU2hvdyB0aGUgaWZk ZWYgYmxvY2sgKHRydWUgb3IgZmFsc2UgcGFydCkgZW5jbG9zaW5nIG9yIGJlZm9yZSB0aGUgY3Vy c29yIl0KICAgIFsiRGVmaW5lIGEgdmFyaWFibGUuLi4iIGhpZGUtaWZkZWYtZGVmaW5lCiAgICAg OmhlbHAgIkRlZmluZSBhIFZBUiBzbyB0aGF0ICNpZmRlZiBWQVIgd291bGQgYmUgaW5jbHVkZWQi XQogICAgWyJVbmRlZmluZSBhIHZhcmlhYmxlLi4uIiBoaWRlLWlmZGVmLXVuZGVmCiAgICAgOmhl bHAgIlVuZGVmaW5lIGEgVkFSIHNvIHRoYXQgI2lmZGVmIFZBUiB3b3VsZCBub3QgYmUgaW5jbHVk ZWQiXQogICAgWyJEZWZpbmUgYW4gYWxpc3QuLi4iIGhpZGUtaWZkZWYtc2V0LWRlZmluZS1hbGlz dAogICAgIDpoZWxwICJTZXQgdGhlIGFzc29jaWF0aW9uIGZvciBOQU1FIHRvIGBoaWRlLWlmZGVm LWVudiciXQogICAgWyJVc2UgYW4gYWxpc3QuLi4iIGhpZGUtaWZkZWYtdXNlLWRlZmluZS1hbGlz dAogICAgIDpoZWxwICJTZXQgYGhpZGUtaWZkZWYtZW52JyB0byB0aGUgZGVmaW5lIGxpc3Qgc3Bl Y2lmaWVkIGJ5IE5BTUUiXQogICAgWyJUb2dnbGUgcmVhZCBvbmx5IiBoaWRlLWlmZGVmLXRvZ2ds ZS1yZWFkLW9ubHkKICAgICA6c3R5bGUgdG9nZ2xlIDpzZWxlY3RlZCBoaWRlLWlmZGVmLXJlYWQt b25seQogICAgIDpoZWxwICJCdWZmZXIgc2hvdWxkIGJlIHJlYWQtb25seSB3aGlsZSBoaWRpbmcg dGV4dCJdCiAgICBbIlRvZ2dsZSBzaGFkb3dpbmciIGhpZGUtaWZkZWYtdG9nZ2xlLXNoYWRvd2lu ZwogICAgIDpzdHlsZSB0b2dnbGUgOnNlbGVjdGVkIGhpZGUtaWZkZWYtc2hhZG93CiAgICAgOmhl bHAgIlRleHQgc2hvdWxkIGJlIHNoYWRvd2VkIGluc3RlYWQgb2YgaGlkZGVuIl0pKQoKKGRlZnZh ciBoaWRlLWlmZGVmLWhpZGluZyBuaWwKICAiTm9uLW5pbCB3aGVuIHRleHQgbWF5IGJlIGhpZGRl bi4iKQoKKG9yIChhc3NxICdoaWRlLWlmZGVmLWhpZGluZyBtaW5vci1tb2RlLWFsaXN0KQogICAg KHNldHEgbWlub3ItbW9kZS1hbGlzdAogICAgICAgICAgKGNvbnMgJyhoaWRlLWlmZGVmLWhpZGlu ZyAiIEhpZGluZyIpCiAgICAgICAgICAgICAgICBtaW5vci1tb2RlLWFsaXN0KSkpCgo7OyBmaXgg Yy1tb2RlIHN5bnRheCB0YWJsZSBzbyB3ZSBjYW4gcmVjb2duaXplIHdob2xlIHN5bWJvbHMuCihk ZWZ2YXIgaGlkZS1pZmRlZi1zeW50YXgtdGFibGUKICAobGV0ICgoc3QgKGNvcHktc3ludGF4LXRh YmxlIGMtbW9kZS1zeW50YXgtdGFibGUpKSkKICAgIChtb2RpZnktc3ludGF4LWVudHJ5ID9fICJ3 IiBzdCkKICAgIChtb2RpZnktc3ludGF4LWVudHJ5ID8mICIuIiBzdCkKICAgIChtb2RpZnktc3lu dGF4LWVudHJ5ID9cfCAiLiIgc3QpCiAgICBzdCkKICAiU3ludGF4IHRhYmxlIHVzZWQgZm9yIHRv a2VuaXppbmcgI2lmIGV4cHJlc3Npb25zLiIpCgooZGVmdmFyIGhpZGUtaWZkZWYtZW52IG5pbAog ICJBbiBhbGlzdCBvZiBkZWZpbmVkIHN5bWJvbHMgYW5kIHRoZWlyIHZhbHVlcy4iKQoKKGRlZnZh ciBoaWYtb3V0c2lkZS1yZWFkLW9ubHkgbmlsCiAgIkludGVybmFsIHZhcmlhYmxlLiAgU2F2ZXMg dGhlIHZhbHVlIG9mIGBidWZmZXItcmVhZC1vbmx5JyB3aGlsZSBoaWRpbmcuIikKCjs7OyMjI2F1 dG9sb2FkCihkZWZpbmUtbWlub3ItbW9kZSBoaWRlLWlmZGVmLW1vZGUKICAiVG9nZ2xlIGZlYXR1 cmVzIHRvIGhpZGUvc2hvdyAjaWZkZWYgYmxvY2tzIChIaWRlLUlmZGVmIG1vZGUpLgpXaXRoIGEg cHJlZml4IGFyZ3VtZW50IEFSRywgZW5hYmxlIEhpZGUtSWZkZWYgbW9kZSBpZiBBUkcgaXMKcG9z aXRpdmUsIGFuZCBkaXNhYmxlIGl0IG90aGVyd2lzZS4gIElmIGNhbGxlZCBmcm9tIExpc3AsIGVu YWJsZQp0aGUgbW9kZSBpZiBBUkcgaXMgb21pdHRlZCBvciBuaWwuCgpIaWRlLUlmZGVmIG1vZGUg aXMgYSBidWZmZXItbG9jYWwgbWlub3IgbW9kZSBmb3IgdXNlIHdpdGggQyBhbmQKQy1saWtlIG1h am9yIG1vZGVzLiAgV2hlbiBlbmFibGVkLCBjb2RlIHdpdGhpbiAjaWZkZWYgY29uc3RydWN0cwp0 aGF0IHRoZSBDIHByZXByb2Nlc3NvciB3b3VsZCBlbGltaW5hdGUgbWF5IGJlIGhpZGRlbiBmcm9t IHZpZXcuClNldmVyYWwgdmFyaWFibGVzIGFmZmVjdCBob3cgdGhlIGhpZGluZyBpcyBkb25lOgoK YGhpZGUtaWZkZWYtZW52JwogICAgICAgIEFuIGFzc29jaWF0aW9uIGxpc3Qgb2YgZGVmaW5lZCBh bmQgdW5kZWZpbmVkIHN5bWJvbHMgZm9yIHRoZQogICAgICAgIGN1cnJlbnQgYnVmZmVyLiAgSW5p dGlhbGx5LCB0aGUgZ2xvYmFsIHZhbHVlIG9mIGBoaWRlLWlmZGVmLWVudicKICAgICAgICBpcyB1 c2VkLgoKYGhpZGUtaWZkZWYtZGVmaW5lLWFsaXN0JwogICAgICAgIEFuIGFzc29jaWF0aW9uIGxp c3Qgb2YgZGVmaW5lZCBzeW1ib2wgbGlzdHMuCiAgICAgICAgVXNlIGBoaWRlLWlmZGVmLXNldC1k ZWZpbmUtYWxpc3QnIHRvIHNhdmUgdGhlIGN1cnJlbnQgYGhpZGUtaWZkZWYtZW52JwogICAgICAg IGFuZCBgaGlkZS1pZmRlZi11c2UtZGVmaW5lLWFsaXN0JyB0byBzZXQgdGhlIGN1cnJlbnQgYGhp ZGUtaWZkZWYtZW52JwogICAgICAgIGZyb20gb25lIG9mIHRoZSBsaXN0cyBpbiBgaGlkZS1pZmRl Zi1kZWZpbmUtYWxpc3QnLgoKYGhpZGUtaWZkZWYtbGluZXMnCiAgICAgICAgU2V0IHRvIG5vbi1u aWwgdG8gbm90IHNob3cgI2lmLCAjaWZkZWYsICNpZm5kZWYsICNlbHNlLCBhbmQKICAgICAgICAj ZW5kaWYgbGluZXMgd2hlbiBoaWRpbmcuCgpgaGlkZS1pZmRlZi1pbml0aWFsbHknCiAgICAgICAg SW5kaWNhdGVzIHdoZXRoZXIgYGhpZGUtaWZkZWZzJyBzaG91bGQgYmUgY2FsbGVkIHdoZW4gSGlk ZS1JZmRlZiBtb2RlCiAgICAgICAgaXMgYWN0aXZhdGVkLgoKYGhpZGUtaWZkZWYtcmVhZC1vbmx5 JwogICAgICAgIFNldCB0byBub24tbmlsIGlmIHlvdSB3YW50IHRvIG1ha2UgYnVmZmVycyByZWFk IG9ubHkgd2hpbGUgaGlkaW5nLgogICAgICAgIEFmdGVyIGBzaG93LWlmZGVmcycsIHJlYWQtb25s eSBzdGF0dXMgaXMgcmVzdG9yZWQgdG8gcHJldmlvdXMgdmFsdWUuCgpcXHtoaWRlLWlmZGVmLW1v ZGUtbWFwfSIKICA6Z3JvdXAgJ2hpZGUtaWZkZWYgOmxpZ2h0ZXIgIiBJZmRlZiIKICAoaWYgaGlk ZS1pZmRlZi1tb2RlCiAgICAgIChwcm9nbgoJOzsgaW5oZXJpdCBnbG9iYWwgdmFsdWVzCjs7CShz ZXQgKG1ha2UtbG9jYWwtdmFyaWFibGUgJ2hpZGUtaWZkZWYtZW52KSA7OyBbMjAxMi0wOS0yNyAx MTowNToyNiArMDgwMF0gTHVrZSByZW0gMiBpbnMgMgo7OwkgICAgIChkZWZhdWx0LXZhbHVlICdo aWRlLWlmZGVmLWVudikpCgkoc2V0ICdoaWRlLWlmZGVmLWVudiAoZGVmYXVsdC12YWx1ZSAnaGlk ZS1pZmRlZi1lbnYpKQoJKHNldCAobWFrZS1sb2NhbC12YXJpYWJsZSAnaGlkZS1pZmRlZi1oaWRp bmcpCgkgICAgIChkZWZhdWx0LXZhbHVlICdoaWRlLWlmZGVmLWhpZGluZykpCgkoc2V0IChtYWtl LWxvY2FsLXZhcmlhYmxlICdoaWYtb3V0c2lkZS1yZWFkLW9ubHkpIGJ1ZmZlci1yZWFkLW9ubHkp Cgkoc2V0IChtYWtlLWxvY2FsLXZhcmlhYmxlICdsaW5lLW1vdmUtaWdub3JlLWludmlzaWJsZSkg dCkKCShhZGQtaG9vayAnY2hhbmdlLW1ham9yLW1vZGUtaG9vawoJCSAgKGxhbWJkYSAoKSAoaGlk ZS1pZmRlZi1tb2RlIC0xKSkgbmlsIHQpCgoJKGFkZC10by1pbnZpc2liaWxpdHktc3BlYyAnKGhp ZGUtaWZkZWYgLiB0KSkKCgkoaWYgaGlkZS1pZmRlZi1pbml0aWFsbHkKCSAgICAoaGlkZS1pZmRl ZnMpCgkgIChzaG93LWlmZGVmcykpKQogICAgOzsgZWxzZSBlbmQgaGlkZS1pZmRlZi1tb2RlCiAg ICAoa2lsbC1sb2NhbC12YXJpYWJsZSAnbGluZS1tb3ZlLWlnbm9yZS1pbnZpc2libGUpCiAgICAo cmVtb3ZlLWZyb20taW52aXNpYmlsaXR5LXNwZWMgJyhoaWRlLWlmZGVmIC4gdCkpCiAgICAod2hl biBoaWRlLWlmZGVmLWhpZGluZwogICAgICAoc2hvdy1pZmRlZnMpKSkpCgoKKGRlZnVuIGhpZi1z aG93LWFsbCAoKQogICJTaG93IGFsbCBvZiB0aGUgdGV4dCBpbiB0aGUgY3VycmVudCBidWZmZXIu IgogIChpbnRlcmFjdGl2ZSkKICAoaGlmLXNob3ctaWZkZWYtcmVnaW9uIChwb2ludC1taW4pIChw b2ludC1tYXgpKSkKCjs7IEJ5IHB1dHRpbmcgdGhpcyBvbiBhZnRlci1yZXZlcnQtaG9vaywgd2Ug YXJyYW5nZSB0aGF0IGl0IG9ubHkKOzsgZG9lcyBhbnl0aGluZyB3aGVuIHJldmVydC1idWZmZXIg YXZvaWRzIHR1cm5pbmcgb2ZmIHRoZSBtb2RlLgo7OyAoVGhhdCBjYW4gaGFwcGVuIGluIFZDLikK KGRlZnVuIGhpZi1hZnRlci1yZXZlcnQtZnVuY3Rpb24gKCkKICAoYW5kIGhpZGUtaWZkZWYtbW9k ZSBoaWRlLWlmZGVmLWhpZGluZwogICAgICAgKGhpZGUtaWZkZWZzIHQpKSkKKGFkZC1ob29rICdh ZnRlci1yZXZlcnQtaG9vayAnaGlmLWFmdGVyLXJldmVydC1mdW5jdGlvbikKCihkZWZ1biBoaWYt ZW5kLW9mLWxpbmUgKCkKICAoZW5kLW9mLWxpbmUpCiAgKHdoaWxlICg9IChsb2dhbmQgMSAoc2tp cC1jaGFycy1iYWNrd2FyZCAiXFxcXCIpKSAxKQogICAgKGVuZC1vZi1saW5lIDIpKSkKCihkZWZ1 biBtZXJnZS1pZmRlZi1yZWdpb24gKHN0YXJ0IGVuZCkKICA7OyBHZW5lcm5hbGx5IHRoZXJlIGlz IG5vIG5lZWQgdG8gY2FsbCBpdHNlbGYgcmVjdXJzaXZlbHkgc2luY2UgdGhlcmUgc2hvdWxkIG9y aWdpbmFsbHkKICA7OyBleGlzdHMgbm8gdW4tbWVyZ2VkIHJlZ2lvbnM7IGhvd2V2ZXIsIGlmIGEg cGFydCBvZiB0aGUgZmlsZSBpcyBoaWRkZW4gd2l0aCAnaGlkZS1pZmRlZi1saW5lcycKICA7OyBh cyBuaWwgd2hpbGUgYW5vdGhlciBwYXJ0IHdpdGggJ3QsIHRoaXMgY2FzZSBoYXBwZW5zLgogIDs7 IFRPRE86IHNob3VsZCB3ZSBtZXJnZT8gb3IganVzdCBjcmVhdGUgYSBjb250YWluZXIgb3Zlcmxh eT8gLS0gdGhpcyBjYW4gcHJldmVudCBoaWRlaWYtc2hvdy1pZmRlZgogIDs7IGV4cGFuZCB0b28g bWFueSBzaW5jZSB0aGVyZSBpcyBvbmx5IGEgYmlnIG92ZXJsYXkgZXhpc3RzIHRoZXJlIHdpdGhv dXQgYW55IHNtYWxsZXIgb3ZlcmxheXMuCiAgIk1lcmdlIG5lYXJieSBpZmRlZiByZWdpb25zIHRv IGZvcm0gYSBiaWdnZXIgb3ZlcmxheS4gVGhpcyB3aWxsIGRlY3JlYXNlIHRoZQp0b3RhbCBudW1i ZXIgb2Ygb3ZlcmxheXMgY3JlYXRlZC4iCiAgKHNhdmUtcmVzdHJpY3Rpb24KICAgICh3aWRlbikg Ozsgb3RoZXJ3aXNlIChwb2ludC1taW4pIGFuZCAocG9pbnQtbWF4KSB3aWxsIGJlCiAgICAgICAg ICAgIDs7IHJlc3RyaWN0ZWQgYW5kIHRodXMgZmFpbCB0byBmaW5kIG5laWdoYm9yIG92ZXJsYXlz CiAgICAobGV0ICgoYmVnb3ZycyAob3ZlcmxheXMtaW4KICAgICAgICAgICAgICAgICAgICAobWF4 ICgtIHN0YXJ0IDIpIChwb2ludC1taW4pKQogICAgICAgICAgICAgICAgICAgIChtYXggKC0gc3Rh cnQgMSkgKHBvaW50LW1pbikpKSkKICAgICAgICAgIChlbmRvdnJzIChvdmVybGF5cy1pbgogICAg ICAgICAgICAgICAgICAgIChtaW4gKCsgZW5kIDEpIChwb2ludC1tYXgpKQogICAgICAgICAgICAg ICAgICAgIChtaW4gKCsgZW5kIDIpIChwb2ludC1tYXgpKSkpCiAgICAgICAgICAob2IgbmlsKQog ICAgICAgICAgKG9lIG5pbCkKICAgICAgICAgIGIgZSkKICAgICAgOzsgbWVyZ2Ugb3ZlcmxheXMg YmVmb3JlICdzdGFydCcKICAgICAgKGRvbGlzdCAobyBiZWdvdnJzKQogICAgICAgICh3aGVuIChv dmVybGF5LWdldCBvICdoaWRlLWlmZGVmKQogICAgICAgICAgKHNldHEgYiAobWluIHN0YXJ0IChv dmVybGF5LXN0YXJ0IG8pKQogICAgICAgICAgICAgICAgZSAobWF4IGVuZCAob3ZlcmxheS1lbmQg bykpKQogICAgICAgICAgKG1vdmUtb3ZlcmxheSBvIGIgZSkKICAgICAgICAgIChtZXJnZS1pZmRl Zi1yZWdpb24gYiBlKQogICAgICAgICAgKHNldHEgb2IgbykpKQogICAgICA7OyBtZXJnZSBvdmVy bGF5cyBhZnRlciAnZW5kJwogICAgICAoZG9saXN0IChvIGVuZG92cnMpCiAgICAgICAgKHdoZW4g KG92ZXJsYXktZ2V0IG8gJ2hpZGUtaWZkZWYpCiAgICAgICAgICAoc2V0cSBiIChtaW4gc3RhcnQg KG92ZXJsYXktc3RhcnQgbykpCiAgICAgICAgICAgICAgICBlIChtYXggZW5kIChvdmVybGF5LWVu ZCBvKSkpCiAgICAgICAgICAobW92ZS1vdmVybGF5IG8gYiBlKQogICAgICAgICAgKG1lcmdlLWlm ZGVmLXJlZ2lvbiBiIGUpCiAgICAgICAgICAoc2V0ZiBvZSBvKSkpCiAgICAgIDs7IGlmIGJvdGgg J3N0YXJ0JyAnZW5kJyBtZXJnaW5nIGhhcHBlbnMsIG1lcmdlIGludG8gYmlnZ2VyIG9uZQogICAg ICAod2hlbiAoYW5kIG9iIG9lKQogICAgICAgIChsZXQgKChiIChtaW4gKG92ZXJsYXktc3RhcnQg b2IpIChvdmVybGF5LXN0YXJ0IG9lKSkpCiAgICAgICAgICAgICAgKGUgKG1heCAob3ZlcmxheS1l bmQgb2IpIChvdmVybGF5LWVuZCBvZSkpKSkKICAgICAgICAgIChkZWxldGUtb3ZlcmxheSBvZSkK ICAgICAgICAgIChtb3ZlLW92ZXJsYXkgb2IgYiBlKQogICAgICAgICAgKG1lcmdlLWlmZGVmLXJl Z2lvbiBiIGUpKSkKICAgICAgKG9yIG9iIG9lKSkpKQoKKGRlZnVuIGhpZGUtaWZkZWYtcmVnaW9u LWludGVybmFsIChzdGFydCBlbmQpCiAgKHVubGVzcyAobWVyZ2UtaWZkZWYtcmVnaW9uIHN0YXJ0 IGVuZCkKICAgIChsZXQgKChvIChtYWtlLW92ZXJsYXkgc3RhcnQgZW5kKSkpCiAgICAgIChvdmVy bGF5LXB1dCBvICdoaWRlLWlmZGVmIHQpCiAgICAgIChpZiBoaWRlLWlmZGVmLXNoYWRvdwogICAg ICAgICAgKG92ZXJsYXktcHV0IG8gJ2ZhY2UgJ2hpZGUtaWZkZWYtc2hhZG93KQogICAgICAgIChv dmVybGF5LXB1dCBvICdpbnZpc2libGUgJ2hpZGUtaWZkZWYpKSkpKQoKKGRlZnVuIGhpZGUtaWZk ZWYtcmVnaW9uIChzdGFydCBlbmQpCiAgIlNUQVJUIGlzIHRoZSBzdGFydCBvZiBhICNpZiwgI2Vs aWYsIG9yICNlbHNlIGZvcm0uICBFTkQgaXMgdGhlIGVuZGluZyBwYXJ0LgpFdmVyeXRoaW5nIGlu Y2x1ZGluZyB0aGVzZSBsaW5lcyBpcyBtYWRlIGludmlzaWJsZS4iCiAgKHNhdmUtZXhjdXJzaW9u CiAgICAoZ290by1jaGFyIHN0YXJ0KSAoaGlmLWVuZC1vZi1saW5lKSAoc2V0cSBzdGFydCAocG9p bnQpKQogICAgKGdvdG8tY2hhciBlbmQpIChoaWYtZW5kLW9mLWxpbmUpIChzZXRxIGVuZCAocG9p bnQpKQogICAgKGhpZGUtaWZkZWYtcmVnaW9uLWludGVybmFsIHN0YXJ0IGVuZCkpKQoKKGRlZnVu IGhpZi1zaG93LWlmZGVmLXJlZ2lvbiAoc3RhcnQgZW5kKQogICJFdmVyeXRoaW5nIGJldHdlZW4g U1RBUlQgYW5kIEVORCBpcyBtYWRlIHZpc2libGUuIgogIChsZXQgKChvbnVtIChsZW5ndGggKG92 ZXJsYXlzLWluIHN0YXJ0IGVuZCkpKSkKICAgIChyZW1vdmUtb3ZlcmxheXMgc3RhcnQgZW5kICdo aWRlLWlmZGVmIHQpCiAgICAoLz0gb251bSAobGVuZ3RoIChvdmVybGF5cy1pbiBzdGFydCBlbmQp KSkpKQoKOzs9PT0lJVNGJSUgZXZhbHVhdGlvbiAoU3RhcnQpICA9PT0KCjs7IEl0IGlzIG5vdCB1 c2VmdWwgdG8gc2V0IHRoaXMgdG8gYW55dGhpbmcgYnV0IGBldmFsJy4KOzsgSW4gZmFjdCwgdGhl IHZhcmlhYmxlIG1pZ2h0IGFzIHdlbGwgYmUgZWxpbWluYXRlZC4KKGRlZnZhciBoaWRlLWlmZGVm LWV2YWx1YXRvciAnZXZhbAogICJUaGUgZnVuY3Rpb24gdG8gdXNlIHRvIGV2YWx1YXRlIGEgZm9y bS4KVGhlIGV2YWx1YXRvciBpcyBnaXZlbiBhIGNhbm9uaWNhbCBmb3JtIGFuZCByZXR1cm5zIHQg aWYgdGV4dCB1bmRlcgp0aGF0IGZvcm0gc2hvdWxkIGJlIGRpc3BsYXllZC4iKQoKKGRlZnZhciBo aWYtdW5kZWZpbmVkLXN5bWJvbCBuaWwKICAiLi4uaXMgYnkgZGVmYXVsdCBjb25zaWRlcmVkIHRv IGJlIGZhbHNlLiIpCgoKKGRlZnVuIGhpZi1zZXQtdmFyICh2YXIgdmFsdWUpCiAgIlByZXBlbmQg KHZhciB2YWx1ZSkgcGFpciB0byBoaWRlLWlmZGVmLWVudi4iCiAgKHNldHEgaGlkZS1pZmRlZi1l bnYgKGNvbnMgKGNvbnMgdmFyIHZhbHVlKSBoaWRlLWlmZGVmLWVudikpKQoKKGRlZnVuIGhpZi10 YWJsZS1sb29rdXAgKHZhciB0YWJsZSkKICAobGV0KiAoKHNhIChhc3NvYyB2YXIgdGFibGUpKQog ICAgICAgICAodmFsIChjZHIgc2EpKSkKICAgIChpZiAobnVsbCBzYSkKICAgICAgICBoaWYtdW5k ZWZpbmVkLXN5bWJvbAogICAgICB2YWwpKSkKCihkZWZ1biBoaWYtbG9va3VwICh2YXIpCiAgOzsg KG1lc3NhZ2UgImhpZi1sb29rdXAgJXMiIHZhcikKICAoaGlmLXRhYmxlLWxvb2t1cCB2YXIgaGlk ZS1pZmRlZi1lbnYpKQoKKGRlZnVuIGhpZi1kZWZpbmVkICh2YXIpCiAgIChpZiAoYXNzb2MgdmFy IGhpZGUtaWZkZWYtZW52KSAxIDApKQoKOzs9PT0lJVNGJSUgZXZhbHVhdGlvbiAoRW5kKSAgPT09 CgoKCjs7PT09JSVTRiUlIHBhcnNpbmcgKFN0YXJ0KSAgPT09Cjs7OyAgVGhlIGNvZGUgdGhhdCB1 bmRlcnN0YW5kcyB3aGF0IGlmcyBhbmQgaWZkZWYgaW4gZmlsZXMgbG9vayBsaWtlLgoKKGRlZmNv bnN0IGhpZi1jcHAtcHJlZml4ICJcXCheXFx8XHJcXClbIFx0XSojWyBcdF0qIikKKGRlZmNvbnN0 IGhpZi1pZnhkZWYtcmVnZXhwIChjb25jYXQgaGlmLWNwcC1wcmVmaXggImlmXFwoblxcKT9kZWYi KSkKKGRlZmNvbnN0IGhpZi1pZm5kZWYtcmVnZXhwIChjb25jYXQgaGlmLWNwcC1wcmVmaXggImlm bmRlZiIpKQooZGVmY29uc3QgaGlmLWlmeC1yZWdleHAgKGNvbmNhdCBoaWYtY3BwLXByZWZpeCAi aWZcXChuP2RlZlxcKT9bIFx0XSsiKSkKKGRlZmNvbnN0IGhpZi1lbGlmLXJlZ2V4cCAoY29uY2F0 IGhpZi1jcHAtcHJlZml4ICJlbGlmIikpCihkZWZjb25zdCBoaWYtZWxzZS1yZWdleHAgKGNvbmNh dCBoaWYtY3BwLXByZWZpeCAiZWxzZSIpKQooZGVmY29uc3QgaGlmLWVuZGlmLXJlZ2V4cCAoY29u Y2F0IGhpZi1jcHAtcHJlZml4ICJlbmRpZiIpKQooZGVmY29uc3QgaGlmLWlmeC1lbHNlLWVuZGlm LXJlZ2V4cAogIChjb25jYXQgaGlmLWlmeC1yZWdleHAgIlxcfCIgaGlmLWVsaWYtcmVnZXhwICJc XHwiIGhpZi1lbHNlLXJlZ2V4cCAiXFx8IiBoaWYtZW5kaWYtcmVnZXhwKSkKKGRlZmNvbnN0IGhp Zi1tYWNyby1leHByLXByZWZpeC1yZWdleHAgKGNvbmNhdCBoaWYtY3BwLXByZWZpeCAiXFwoaWZc XChuP2RlZlxcKT9cXHxlbGlmXFx8ZGVmaW5lXFwpWyBcdF0rIikpCgooZGVmY29uc3QgaGlmLXdo aXRlICAgICAiWyBcdF0qIikKKGRlZmNvbnN0IGhpZi1kZWZpbmUgICAgKGNvbmNhdCBoaWYtY3Bw LXByZWZpeCAiXFwoZGVmaW5lXFx8dW5kZWZcXCkiKSkKKGRlZmNvbnN0IGhpZi1pZCAgICAgICAg KGNvbmNhdCAiW0EtWmEtel9dWzAtOUEtWmEtel9dKiIpKQooZGVmY29uc3QgaGlmLW1hY3JvbmFt ZSAoY29uY2F0IGhpZi13aGl0ZSAiXFwoIiBoaWYtaWQgIlxcKSIgaGlmLXdoaXRlCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIlxcKCIKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAiKCIgaGlmLXdoaXRlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiXFwo IiBoaWYtaWQgIlxcKT8iIGhpZi13aGl0ZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIlxcKCIgIiwiIGhpZi13aGl0ZSBoaWYtaWQgaGlmLXdoaXRlICJcXCkqIgogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIlxcKFxcLlxcLlxcLlxcKT8iIGhpZi13aGl0ZQogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICIpIgogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICJcXCk/IiApKQoKOzsgVXNlZCB0byBzdG9yZSB0aGUgY3VycmVudCB0b2tlbiBhbmQg dGhlIHdob2xlIHRva2VuIGxpc3QgZHVyaW5nIHBhcnNpbmcuCjs7IE9ubHkgYm91bmQgZHluYW1p Y2FsbHkuCihkZWZ2YXIgaGlmLXRva2VuKQooZGVmdmFyIGhpZi10b2tlbi1saXN0KQoKKGRlZmNv bnN0IGhpZi10b2tlbi1hbGlzdAogICcoKCJ8fCIgIC4gaGlmLW9yKQogICAgKCImJiIgIC4gaGlm LWFuZCkKICAgICgifCIgICAuIGhpZi1sb2dpb3IpCiAgICAoIl4iICAgLiBoaWYtbG9neG9yKQog ICAgKCImIiAgIC4gaGlmLWxvZ2FuZCkKICAgICgiPDwiICAuIGhpZi1zaGlmdGxlZnQpCiAgICAo Ij4+IiAgLiBoaWYtc2hpZnRyaWdodCkKICAgICgiPT0iICAuIGhpZi1lcXVhbCkKICAgICgiPSIg ICAuIGhpZi1hc3NpZ24pCiAgICAoIiE9IiAgLiBoaWYtbm90ZXF1YWwpCiAgICAoIiMjIiAgLiBo aWYtdG9rZW4tY29uY2F0KQogICAgKCIhIiAgIC4gaGlmLW5vdCkKICAgICgifiIgICAuIGhpZi1s b2dub3QpCiAgICAoIigiICAgLiBoaWYtbHBhcmVuKQogICAgKCIpIiAgIC4gaGlmLXJwYXJlbikK ICAgICgiPiIgICAuIGhpZi1ncmVhdGVyKQogICAgKCI8IiAgIC4gaGlmLWxlc3MpCiAgICAoIj49 IiAgLiBoaWYtZ3JlYXRlci1lcXVhbCkKICAgICgiPD0iICAuIGhpZi1sZXNzLWVxdWFsKQogICAg KCIrIiAgIC4gaGlmLXBsdXMpCiAgICAoIi0iICAgLiBoaWYtbWludXMpCiAgICAoIioiICAgLiBo aWYtbXVsdGlwbHkpCiAgICAoIi8iICAgLiBoaWYtZGl2aWRlKQogICAgKCIlIiAgIC4gaGlmLW1v ZHVsbykKICAgICgiPyIgICAuIGhpZi1jb25kaXRpb25hbCkKICAgICgiOiIgICAuIGhpZi1jb2xv bikKICAgICgiLCIgICAuIGhpZi1jb21tYSkKICAgICgiIyIgICAuIGhpZi1zdHJpbmdpZnkpCiAg ICAoIi4uLiIgLiBoaWYtZXRjKSkpCgooZGVmY29uc3QgaGlmLXZhbGlkLXRva2VuLWxpc3QgKG1h cGNhciAnY2RyIGhpZi10b2tlbi1hbGlzdCkpCgooZGVmY29uc3QgaGlmLXRva2VuLXJlZ2V4cAog IChjb25jYXQgKHJlZ2V4cC1vcHQgKG1hcGNhciAnY2FyIGhpZi10b2tlbi1hbGlzdCkpCiAgICAg ICAgICAiXFx8MHhbMC05YS1mQS1GXStcXC4/WzAtOWEtZkEtRl0qIiA7OyBMdWtlIGFkZGVkCiAg ICAgICAgICAiXFx8WzAtOV0rXFwuP1swLTldKiIgIDs7IEx1a2UgYWRkZWQsIGRlY2ltYWwvb2N0 YWwKICAgICAgICAgICJcXHxcXHcrIikpCgooZGVmY29uc3QgaGlmLXN0cmluZy1saXRlcmFsLXJl Z2V4cAogIChjb25jYXQgaGlmLXdoaXRlICJcXChcIlteXCJdKlwiXFwpIikpCgooZGVmdmFyIGhp Zi1zaW1wbGUtdG9rZW4tb25seSBuaWwpCgooZGVmdW4gaGlmLXRva2VuaXplIChzdGFydCBlbmQp CiAgIlNlcGFyYXRlIHN0cmluZyBiZXR3ZWVuIFNUQVJUIGFuZCBFTkQgaW50byBhIGxpc3Qgb2Yg dG9rZW5zLiIKICAobGV0ICgodG9rZW4tbGlzdCBuaWwpKQogICAgKHNldHEgaGlmLXNpbXBsZS10 b2tlbi1vbmx5IHQpCiAgICAod2l0aC1zeW50YXgtdGFibGUgaGlkZS1pZmRlZi1zeW50YXgtdGFi bGUKICAgICAgKHNhdmUtZXhjdXJzaW9uCiAgICAgICAgKGdvdG8tY2hhciBzdGFydCkKICAgICAg ICAod2hpbGUgKHByb2duIChmb3J3YXJkLWNvbW1lbnQgKHBvaW50LW1heCkpICg8IChwb2ludCkg ZW5kKSkKICAgICAgICAgIDs7IChtZXNzYWdlICJleHByLXN0YXJ0ID0gJWQiIGV4cHItc3RhcnQp IChzaXQtZm9yIDEpCiAgICAgICAgICAoY29uZAogICAgICAgICAgICgobG9va2luZy1hdCAiXFxc XFxuIikKICAgICAgICAgICAgKGZvcndhcmQtY2hhciAyKSkKCiAgICAgICAgICAgKChsb29raW5n LWF0IGhpZi1zdHJpbmctbGl0ZXJhbC1yZWdleHApCiAgICAgICAgICAgIChwdXNoIChzdWJzdHJp bmctbm8tcHJvcGVydGllcyAobWF0Y2gtc3RyaW5nIDEpKSB0b2tlbi1saXN0KQogICAgICAgICAg ICAoZ290by1jaGFyIChtYXRjaC1lbmQgMCkpKQoKICAgICAgICAgICAoKGxvb2tpbmctYXQgaGlm LXRva2VuLXJlZ2V4cCkKICAgICAgICAgICAgKGxldCAoKHRva2VuIChidWZmZXItc3Vic3RyaW5n LW5vLXByb3BlcnRpZXMgKHBvaW50KSAobWF0Y2gtZW5kIDApKSkpCiAgICAgICAgICAgICAgKGdv dG8tY2hhciAobWF0Y2gtZW5kIDApKQogICAgICAgICAgICAgIDs7IChtZXNzYWdlICJ0b2tlbjog JXMiIHRva2VuKSAoc2l0LWZvciAxKQogICAgICAgICAgICAgIChwdXNoIChvciAoY2RyIChhc3Nv YyB0b2tlbiBoaWYtdG9rZW4tYWxpc3QpKQogICAgICAgICAgICAgICAgICAgICAgICAoaWYgKHN0 cmluZy1lcXVhbCB0b2tlbiAiZGVmaW5lZCIpICdoaWYtZGVmaW5lZCkKICAgICAgICAgICAgICAg ICAgICAgICAgKGlmIChzdHJpbmctbWF0Y2ggIjB4XFwoW2EtZkEtRjAtOV0rXFwpIiB0b2tlbikK ICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzdHJpbmctdG8tbnVtYmVyIChtYXRjaC1zdHJp bmcgMSB0b2tlbikgMTYpKSA7OyBoZXhhZGVjaW1hbAogICAgICAgICAgICAgICAgICAgICAgICAo aWYgKHN0cmluZy1tYXRjaCAiXFxgMFswLTldKlxcKFxcLlswLTldK1xcKT9cXCciIHRva2VuKQog ICAgICAgICAgICAgICAgICAgICAgICAgICAgKHN0cmluZy10by1udW1iZXIgdG9rZW4gOCkpIDs7 IG9jdGFsCiAgICAgICAgICAgICAgICAgICAgICAgIChpZiAoc3RyaW5nLW1hdGNoICJcXGBbMS05 XVswLTldKlxcKFxcLlswLTldK1xcKT9cXCciIHRva2VuKQogICAgICAgICAgICAgICAgICAgICAg ICAgICAgKHN0cmluZy10by1udW1iZXIgdG9rZW4pKSA7OyBkZWNpbWFsCiAgICAgICAgICAgICAg ICAgICAgICAgIChwcm9nMSAoaW50ZXJuIHRva2VuKQogICAgICAgICAgICAgICAgICAgICAgICAg IChzZXRxIGhpZi1zaW1wbGUtdG9rZW4tb25seSBuaWwpKSkKICAgICAgICAgICAgICAgICAgICB0 b2tlbi1saXN0KSkpCgogICAgICAgICAgICgobG9va2luZy1hdCAiXHIiKQogICAgICAgICAgICAo Zm9yd2FyZC1jaGFyIDEpKQoKICAgICAgICAgICAodCAoZXJyb3IgIkJhZCAjaWYgZXhwcmVzc2lv bjogJXMiIChidWZmZXItc3RyaW5nKSkpKSkpKQogICAgKG5yZXZlcnNlIHRva2VuLWxpc3QpKSkK Cjs7Oy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tCjs7OyBUcmFuc2xhdGUgQyBwcmVwcm9jZXNzb3IgI2lmIGV4cHJlc3Npb25z IHVzaW5nIHJlY3Vyc2l2ZSBkZXNjZW50Lgo7OzsgVGhpcyBwYXJzZXIgaXMgbGltaXRlZCB0byB0 aGUgb3BlcmF0b3JzICYmLCB8fCwgISwgYW5kICJkZWZpbmVkIi4KOzs7IEFkZGVkID09LCAhPSwg KywgYW5kIC0uICBHYXJ5IE9iZXJicnVubmVyLCBnYXJ5b0BhdnMuY29tLCA4LzkvOTQKOzs7Cjs7 OyBJbXBsZW1lbnQgdGhlIEMgbGFuZ3VhZ2Ugb3BlcmF0b3IgcHJlY2VkZW5jZSB0YWJsZS4gQWRk IGFsbCB0aG9zZQo7OzsgbWlzc2luZyBvcGVyYXRvcnMgdGhhdCBjb3VsZCBiZSB1c2VkIGluIG1h Y3Jvcy4gTHVrZSBMZWUgMjAxMy0wOS0wNAoKOzs7ICB8IE9wZXJhdG9yIFR5cGUgICAgICAgIHwg T3BlcmF0b3IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEFzc29jaWF0aXZp dHkgfAo7OzsgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0rCjs7OyAgfCBQcmltYXJ5IEV4 cHJlc3Npb24gICB8ICgpIFtdIC4gLT4gZXhwcisrIGV4cHItLSAgICAgICAgICAgICAgICAgICAg fCBsZWZ0LXRvLXJpZ2h0IHwKOzs7ICB8IFVuYXJ5IE9wZXJhdG9ycyAgICAgIHwgKiAmICsgLSAh IH4gKytleHByIC0tZXhwciAodHlwZWNhc3QpIHNpemVvZiB8IHJpZ2h0LXRvLWxlZnQgfAo7Ozsg IHwgQmluYXJ5IE9wZXJhdG9ycyAgICAgfCAqIC8gJSAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHwgbGVmdC10by1yaWdodCB8Cjs7OyAgfCAgICAgICAgICAgICAgICAgICAg ICB8ICsgLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAg ICAgICAgIHwKOzs7ICB8ICAgICAgICAgICAgICAgICAgICAgIHwgPj4gPDwgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgfAo7OzsgIHwgICAgICAg ICAgICAgICAgICAgICAgfCA8ID4gPD0gPj0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHwgICAgICAgICAgICAgICB8Cjs7OyAgfCAgICAgICAgICAgICAgICAgICAgICB8ID09ICE9 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgIHwK Ozs7ICB8ICAgICAgICAgICAgICAgICAgICAgIHwgJiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgfAo7OzsgIHwgICAgICAgICAgICAgICAg ICAgICAgfCBeICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAg ICAgICAgICAgICB8Cjs7OyAgfCAgICAgICAgICAgICAgICAgICAgICB8IHwgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgIHwKOzs7ICB8ICAg ICAgICAgICAgICAgICAgICAgIHwgJiYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICB8ICAgICAgICAgICAgICAgfAo7OzsgIHwgICAgICAgICAgICAgICAgICAgICAgfCB8 fCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAg ICB8Cjs7OyAgfCBUZXJuYXJ5IE9wZXJhdG9yICAgICB8ID86ICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgfCByaWdodC10by1sZWZ0IHwKOzs7IHh8IEFzc2lnbm1lbnQg T3BlcmF0b3JzIHwgPSArPSAtPSAqPSAvPSAlPSA+Pj0gPDw9ICY9IF49ID0gICAgICAgICAgICB8 IHJpZ2h0LXRvLWxlZnQgfAo7OzsgIHwgQ29tbWEgICAgICAgICAgICAgICAgfCAsICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgbGVmdC10by1yaWdodCB8CgooZGVm c3Vic3QgaGlmLW5leHR0b2tlbiAoKQogICJQb3AgdGhlIG5leHQgdG9rZW4gZnJvbSB0b2tlbi1s aXN0IGludG8gdGhlIGxldCB2YXJpYWJsZSBcImhpZi10b2tlblwiLiIKICAoc2V0cSBoaWYtdG9r ZW4gKHBvcCBoaWYtdG9rZW4tbGlzdCkpKQoKKGRlZnN1YnN0IGlmLXZhbGlkLWlkZW50aWZpZXIg KGlkKQogIChub3QgKG9yIChudW1iZXJwIGlkKQogICAgICAgICAgIChzdHJpbmdwIGlkKSkpKQoK KGRlZnVuIGhpZi1kZWZpbmUtb3BlcmF0b3IgKHRva2VucykKICAiYFVwZ3JhZGUnIGhpZi1kZWZp bmUgeHh4IHRvICcoaGlmLWRlZmluZSB4eHgpJyBzbyB0aGF0IGl0IHdvbid0IGJlIHN1YnNpdGl0 dXRlZCIKICAobGV0ICgocmVzdWx0IG5pbCkKICAgICAgICAodG9rIG5pbCkpCiAgICAod2hpbGUg dG9rZW5zCiAgICAgIChzZXRxIHRvayAoY2FyIHRva2VucykKICAgICAgICAgICAgdG9rZW5zIChj ZHIgdG9rZW5zKSkKICAgICAgKHNldHEgcmVzdWx0CiAgICAgICAgICAgIChhcHBlbmQKICAgICAg ICAgICAgIHJlc3VsdAogICAgICAgICAgICAgKGxpc3QKICAgICAgICAgICAgICAoaWYgKGVxIHRv ayAnaGlmLWRlZmluZWQpCiAgICAgICAgICAgICAgICAgIChwcm9nbgogICAgICAgICAgICAgICAg ICAgIChzZXRxIHRvayAoY2FkciB0b2tlbnMpKQogICAgICAgICAgICAgICAgICAgIChpZiAoZXEg KGNhciB0b2tlbnMpICdoaWYtbHBhcmVuKQogICAgICAgICAgICAgICAgICAgICAgICAoaWYgKGFu ZCAoaWYtdmFsaWQtaWRlbnRpZmllciB0b2spCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIChlcSAoY2FkZHIgdG9rZW5zKSAnaGlmLXJwYXJlbikpCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAoc2V0cSB0b2tlbnMgKGNkZGRyIHRva2VucykpCiAgICAgICAgICAgICAgICAgICAg ICAgICAgKGVycm9yICJvcGVyYXRvciBcImRlZmluZWRcIiByZXF1aXJlcyBhbiBpZGVudGlmaWVy IikpCiAgICAgICAgICAgICAgICAgICAgICAoc2V0cSB0b2sgKGNhciB0b2tlbnMpCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICB0b2tlbnMgKGNkciB0b2tlbnMpKQogICAgICAgICAgICAgICAg ICAgICAgKHVubGVzcyAoaWYtdmFsaWQtaWRlbnRpZmllciB0b2spCiAgICAgICAgICAgICAgICAg ICAgICAgIChlcnJvciAib3BlcmF0b3IgXCJkZWZpbmVkXCIgcmVxdWlyZXMgYW4gaWRlbnRpZmll ciIpKSkKICAgICAgICAgICAgICAgICAgICAobGlzdCAnaGlmLWRlZmluZWQgJ2hpZi1scGFyZW4g dG9rICdoaWYtcnBhcmVuKSkKICAgICAgICAgICAgICAgIHRvaykpKSkpCiAgICByZXN1bHQpKQoK KGRlZnVuIGhpZi1leHBhbmQtdG9rZW4tbGlzdCAodG9rZW5zICZvcHRpb25hbCBtYWNyb25hbWUg cmVmbGlzdCkgOzsgcmVmZXJlbmNlIGxpc3QgdG8gcHJldmVudCBzZWxmLXJlZmVyZW5jaW5nCiAg IlBlcmZvcm0gZXhwYW5zaW9uIHRpbGwgZXZlcnl0aGluZyBleHBhbmRlZC4gTm8gc2VsZi1yZWZl cmVuY2UgZXhwYW5zaW9uLiIKICAoY2F0Y2ggJ3NlbGYtcmVmZXJlbmNpbmcKICAgIChsZXQgKChl eHBhbmRlZCBuaWwpCiAgICAgICAgICAocmVtYWlucyAoaGlmLWRlZmluZS1vcGVyYXRvcgogICAg ICAgICAgICAgICAgICAgIChoaWYtdG9rZW4tY29uY2F0ZW5hdGlvbiAoaGlmLXRva2VuLXN0cmlu Z2lmaWNhdGlvbiB0b2tlbnMpKSkpCiAgICAgICAgICB0b2sgcmVwKQogICAgICAoaWYgbWFjcm9u YW1lCiAgICAgICAgICAoc2V0cSByZWZsaXN0IChjb25zIG1hY3JvbmFtZSByZWZsaXN0KSkpCiAg ICAgIDs7IEV4cGFuZGluZyBhbGwgdG9rZW5zIHRpbGwgbGlzdCBleGhhdXN0ZWQKICAgICAgKHdo aWxlIHJlbWFpbnMKICAgICAgICAoc2V0cSB0b2sgKGNhciByZW1haW5zKQogICAgICAgICAgICAg IHJlbWFpbnMgKGNkciByZW1haW5zKSkKICAgICAgICAoaWYgKG1lbXEgdG9rIHJlZmxpc3QpIDs7 IGZvciBzZWxmLXJlZmVyZW5jaW5nIHRva2VucywgZG9uJ3QgZXhwYW5kIGl0CiAgICAgICAgICAg ICh0aHJvdyAnc2VsZi1yZWZlcmVuY2luZyB0b2tlbnMpKQogICAgICAgIChzZXRxIGV4cGFuZGVk CiAgICAgICAgICAgICAgKGFwcGVuZAogICAgICAgICAgICAgICBleHBhbmRlZAogICAgICAgICAg ICAgICAoY29uZAogICAgICAgICAgICAgICAgKChvciAobWVtcSB0b2sgaGlmLXZhbGlkLXRva2Vu LWxpc3QpCiAgICAgICAgICAgICAgICAgICAgIChudW1iZXJwIHRvaykKICAgICAgICAgICAgICAg ICAgICAgKHN0cmluZ3AgdG9rKSkKICAgICAgICAgICAgICAgICAobGlzdCB0b2spKQoKICAgICAg ICAgICAgICAgICgoc2V0cSByZXAgKGhpZi1sb29rdXAgdG9rKSkKICAgICAgICAgICAgICAgICAo aWYgKGFuZCAobGlzdHAgcmVwKQogICAgICAgICAgICAgICAgICAgICAgICAgIChlcSAoY2FyIHJl cCkgJ2hpZi1kZWZpbmUtbWFjcm8pKSA7OyBhIGRlZmluZWQgbWFjcm8KICAgICAgICAgICAgICAg ICAgICAgOzsgcmVjdXJzaXZlbHkgZXhwYW5kIGl0CiAgICAgICAgICAgICAgICAgICAgIChpZiAo Y2FkciByZXApIDs7IGFyZ2xpc3QgaXMgbm90IG5pbAogICAgICAgICAgICAgICAgICAgICAgICAg KGlmIChlcSAoY2FyIHJlbWFpbnMpICdoaWYtbHBhcmVuKQogICAgICAgICAgICAgICAgICAgICAg ICAgICAgIDs7IEFyZ3VtZW50ZWQgbWFjcm8sIGdldCBhcmd1bWVudHMgYW5kIGludm9rZSBpdAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsZXQqICgoaGlmLXRva2VuLWxpc3QgKGNkciBy ZW1haW5zKSkgOzsgZHluYW1pYyBiaW5kaW5nIGZvciBoaWYtbWFjcm8tc3VwcGx5LWFyZ3VtZW50 cwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaGlmLXRva2VuIG5pbCkgICAg ICAgICAgICAgICAgOzsgZHluYW1pYyBiaW5kaW5nIGZvciBoaWYtbWFjcm8tc3VwcGx5LWFyZ3Vt ZW50cwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocGFybWxpc3QgKG1hcGNh ciAnaGlmLWV4cGFuZC10b2tlbi1saXN0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIChoaWYtZ2V0LWFyZ3VtZW50LWxpc3QgdG9rKSkpCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChyZXN1bHQgKGhpZi1leHBhbmQtdG9rZW4t bGlzdCAoaGlmLW1hY3JvLXN1cHBseS1hcmd1bWVudHMgdG9rIHBhcm1saXN0KQogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg dG9rIHJlZmxpc3QpKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzZXRxIHJlbWFp bnMgKGNvbnMgaGlmLXRva2VuIGhpZi10b2tlbi1saXN0KSkKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHJlc3VsdCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgOzsgbm8gYXJndW1l bnQgc3VwcGxpZWQsIG5vIGludm9jYXRpb24gZm9yIHRoaXMgbWFjcm8KICAgICAgICAgICAgICAg ICAgICAgICAgICAgKGxpc3QgdG9rKSkKICAgICAgICAgICAgICAgICAgICAgICA7OyBhcmdsaXN0 IGlzIG5pbCwgZGlyZWN0IGV4cGFuc2lvbgogICAgICAgICAgICAgICAgICAgICAgIChzZXRxIHJl cCAoaGlmLWV4cGFuZC10b2tlbi1saXN0IChjYWRkciByZXApIDs7IG1hY3JvJ3MgdG9rZW4gbGlz dAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHRvayByZWZsaXN0KSkKICAgICAgICAgICAgICAgICAgICAgICAoc2V0cSByZW1haW5zIChzdWJz dGl0dXRlIHRvayByZXAgcmVtYWlucykpIDs7IHJlcGxhY2UgYWxsIHJlbWFpbmluZyByZWZlcmVu Y2VzIGltbWVkaWF0ZWx5CiAgICAgICAgICAgICAgICAgICAgICAgKGxpc3QgcmVwKSkKICAgICAg ICAgICAgICAgICAgIDs7IGxvb2t1cCB0b2sgcmV0dXJucyBhbiBhdG9tCiAgICAgICAgICAgICAg ICAgICAobGlzdCByZXApKSkKCiAgICAgICAgICAgICAgICA7O1syMDEzLTEwLTIyIDE2OjA2OjEy ICswODAwXSBNdXN0IGtlZXAgdGhlIHRva2VuLCByZW1vdmVpbmcgdGhpcyB0b2tlbiBtaWdodCBy ZXN1bHRzIGluIGEgaW5jb21wbGV0ZSBleHByZXNzaW9uIHdoaWNoIGNhbm5vdCBiZSBwYXJzZWQu CiAgICAgICAgICAgICAgICA7OygoPSAxIChoaWYtZGVmaW5lZCB0b2spKSA7OyBkZWZpbmVkICho aWYtZGVmaW5lZCB0b2spPTEsIGJ1dCBlbXB0eSAoaGlmLWxvb2t1cCB0b2spPW5pbCwgdGh1cyBy ZW1vdmUgdGhpcyB0b2tlbgogICAgICAgICAgICAgICAgOzsgKHNldHEgcmVtYWlucyAoZGVsZXRl IHRvayByZW1haW5zKSkKICAgICAgICAgICAgICAgIDs7IG5pbCkKCiAgICAgICAgICAgICAgICAo dCA7OyB1c3VhbCBJRHMKICAgICAgICAgICAgICAgICAobGlzdCB0b2spKSkpKSkKICAgICAgKGZs YXR0ZW4gZXhwYW5kZWQpKSkpCgooZGVmdW4gaGlmLXBhcnNlLWlmLWV4cCAodG9rZW4tbGlzdCAm b3B0aW9uYWwgbWFjcm9uYW1lKQogICJQYXJzZSB0aGUgVE9LRU4tTElTVC4gIFJldHVybiB0cmFu c2xhdGVkIGxpc3QgaW4gcHJlZml4IGZvcm0uIgogIChsZXQgKChoaWYtdG9rZW4tbGlzdCAoaGlm LWV4cGFuZC10b2tlbi1saXN0IHRva2VuLWxpc3QgbWFjcm9uYW1lKSkpCiAgICAoaGlmLW5leHR0 b2tlbikKICAgIChwcm9nMQogICAgICAgIChhbmQgaGlmLXRva2VuCiAgICAgICAgICAgICAoaGlm LWV4cHJsaXN0KSkKICAgICAgKGlmIGhpZi10b2tlbiA7IGlzIHRoZXJlIHN0aWxsIGEgdG9rZW4/ CiAgICAgICAgICAoZXJyb3IgIkVycm9yOiB1bmV4cGVjdGVkIHRva2VuOiAlcyIgaGlmLXRva2Vu KSkpKSkKCjs7Owo7OztUbyBtYW51YWxseSB0ZXN0IHRoZXNlIGZ1bmN0aW9ucywgdHJ5IHRoZSBm b2xsb3dpbmcgaW4gc2NyYXRjaCBidWZmZXI6Cjs7Owo7OzsoaGlmLWZpbmQtZGVmaW5lIChwb2lu dCkpIDs7IGZpbmQgb25seSBvbmUgI2RlZmluZQo7OzsoaGlmLWFkZC1uZXctZGVmaW5lcykgOzsg ZmluZCBhbGwgI2RlZmluZXMKOzs7Cjs7OyNkZWZpbmUgbWFjcm8gKCBhcmcxICwgYXJnMiAsIGFy ZzMgLi4uICkgYXJnMSArIGFyZzIgKiBhcmczCjs7Owo7OzsoYXNzb2MgJ21hY3JvIGhpZGUtaWZk ZWYtZW52KQo7OzsKOzs7KGhpZi1jYW5vbmljYWxpemUtdG9rZW5zIGhpZi1pZngtcmVnZXhwKQo7 OzsoaGlmLWV4cGFuZC10b2tlbi1saXN0IChoaWYtY2Fub25pY2FsaXplLXRva2VucyBoaWYtaWZ4 LXJlZ2V4cCkpCjs7OyhoaWYtY2Fub25pY2FsaXplIGhpZi1pZngtcmVnZXhwKQo7OzsKOzs7I2lm IG1hY3JvKCAoYSwyLDMpLCBiPDwxLCAoYyY3LGQpICkKOzs7CgooZGVmdW4gaGlmLWV4cHJsaXN0 ICgpCiAgIlBhcnNlIGFuIGV4cHJsaXN0OiBleHByIHsgJywnIGV4cHJ9IgogIChsZXQgKChyZXN1 bHQgKGhpZi1leHByKSkKICAgICAgICBjb21tYSkKICAgICh3aGlsZSAoZXEgaGlmLXRva2VuICdo aWYtY29tbWEpCiAgICAgICh1bmxlc3MgY29tbWEKICAgICAgICAoc2V0cSByZXN1bHQgKGxpc3Qg cmVzdWx0KSkpCiAgICAgIChzZXRxIGNvbW1hIHQpCiAgICAgIChoaWYtbmV4dHRva2VuKQogICAg ICAoc2V0cSByZXN1bHQgKGFwcGVuZCByZXN1bHQgKGxpc3QgKGhpZi1leHByKSkpKSkKICAgIChp ZiBjb21tYQogICAgICAgIChhcHBlbmQgKGxpc3QgJ2hpZi1jb21tYSkgcmVzdWx0KQogICAgICBy ZXN1bHQpKSkKCihkZWZ1biBoaWYtZXhwciAoKQogICJQYXJzZSBhbiBleHByZXNzaW9uIGFzIGZv dW5kIGluICNpZi4KICAgICAgIGV4cHIgOiBvci1leHByIHwgb3ItZXhwciAnPycgZXhwciAnOicg ZXhwci4iCiAgKGxldCAoKHJlc3VsdCAoaGlmLW9yLWV4cHIpKQogICAgICAgIG1pZGRsZSkKICAg ICh3aGlsZSAoZXEgaGlmLXRva2VuICdoaWYtY29uZGl0aW9uYWwpCiAgICAgIChoaWYtbmV4dHRv a2VuKQogICAgICAoc2V0cSBtaWRkbGUgKGhpZi1leHByKSkKICAgICAgKGlmIChlcSBoaWYtdG9r ZW4gJ2hpZi1jb2xvbikKICAgICAgICAgIChwcm9nbgogICAgICAgICAgICAoaGlmLW5leHR0b2tl bikKICAgICAgICAgICAgKHNldHEgcmVzdWx0IChsaXN0ICdoaWYtY29uZGl0aW9uYWwgcmVzdWx0 IG1pZGRsZSAoaGlmLWV4cHIpKSkpCiAgICAgICAgKGVycm9yICJFcnJvcjogdW5leHBlY3RlZCB0 b2tlbjogJXMiIGhpZi10b2tlbikpKQogICAgcmVzdWx0KSkKCihkZWZ1biBoaWYtb3ItZXhwciAo KQogICJQYXJzZSBhbiBvci1leHByIDogYW5kLWV4cHIgfCBvci1leHByICd8fCcgYW5kLWV4cHIu IgogIChsZXQgKChyZXN1bHQgKGhpZi1hbmQtZXhwcikpKQogICAgKHdoaWxlIChlcSBoaWYtdG9r ZW4gJ2hpZi1vcikKICAgICAgKGhpZi1uZXh0dG9rZW4pCiAgICAgIChzZXRxIHJlc3VsdCAobGlz dCAnaGlmLW9yIHJlc3VsdCAoaGlmLWFuZC1leHByKSkpKQogIHJlc3VsdCkpCgooZGVmdW4gaGlm LWFuZC1leHByICgpCiAgIlBhcnNlIGFuIGFuZC1leHByIDogbG9naW9yLWV4cHIgfCBhbmQtZXhw ciAnJiYnIGxvZ2lvci1leHByLiIKICAobGV0ICgocmVzdWx0IChoaWYtbG9naW9yLWV4cHIpKSkK ICAgICh3aGlsZSAoZXEgaGlmLXRva2VuICdoaWYtYW5kKQogICAgICAoaGlmLW5leHR0b2tlbikK ICAgICAgKHNldHEgcmVzdWx0IChsaXN0ICdoaWYtYW5kIHJlc3VsdCAoaGlmLWxvZ2lvci1leHBy KSkpKQogICAgcmVzdWx0KSkKCihkZWZ1biBoaWYtbG9naW9yLWV4cHIgKCkKICAiUGFyc2UgYSBs b2dvci1leHByIDogbG9neG9yLWV4cHIgfCBsb2dvci1leHByICd8JyBsb2d4b3ItZXhwci4iCiAg KGxldCAoKHJlc3VsdCAoaGlmLWxvZ3hvci1leHByKSkpCiAgICAod2hpbGUgKGVxIGhpZi10b2tl biAnaGlmLWxvZ2lvcikKICAgICAgKGhpZi1uZXh0dG9rZW4pCiAgICAgIChzZXRxIHJlc3VsdCAo bGlzdCAnaGlmLWxvZ2lvciByZXN1bHQgKGhpZi1sb2d4b3ItZXhwcikpKSkKICAgIHJlc3VsdCkp CgooZGVmdW4gaGlmLWxvZ3hvci1leHByICgpCiAgIlBhcnNlIGEgbG9neG9yLWV4cHIgOiBsb2dh bmQtZXhwciB8IGxvZ3hvci1leHByICdeJyBsb2dhbmQtZXhwci4iCiAgKGxldCAoKHJlc3VsdCAo aGlmLWxvZ2FuZC1leHByKSkpCiAgICAod2hpbGUgKGVxIGhpZi10b2tlbiAnaGlmLWxvZ3hvcikK ICAgICAgKGhpZi1uZXh0dG9rZW4pCiAgICAgIChzZXRxIHJlc3VsdCAobGlzdCAnaGlmLWxvZ3hv ciByZXN1bHQgKGhpZi1sb2dhbmQtZXhwcikpKSkKICAgIHJlc3VsdCkpCgooZGVmdW4gaGlmLWxv Z2FuZC1leHByICgpCiAgIlBhcnNlIGEgbG9nYW5kLWV4cHIgOiBlcS1leHByIHwgbG9nYW5kLWV4 cHIgJyYnIGVxLWV4cHIuIgogIChsZXQgKChyZXN1bHQgKGhpZi1lcS1leHByKSkpCiAgICAod2hp bGUgKGVxIGhpZi10b2tlbiAnaGlmLWxvZ2FuZCkKICAgICAgKGhpZi1uZXh0dG9rZW4pCiAgICAg IChzZXRxIHJlc3VsdCAobGlzdCAnaGlmLWxvZ2FuZCByZXN1bHQgKGhpZi1lcS1leHByKSkpKQog ICAgcmVzdWx0KSkKCihkZWZ1biBoaWYtZXEtZXhwciAoKQogICJQYXJzZSBhbiBlcS1leHByIDog Y29tcCB8IGVxLWV4cHIgYD09J3xgIT0nIGNvbXAuIgogIChsZXQgKChyZXN1bHQgKGhpZi1jb21w LWV4cHIpKQogICAgICAgIChlcS10b2tlbiBuaWwpKQogICAgKHdoaWxlIChtZW1xIGhpZi10b2tl biAnKGhpZi1lcXVhbCBoaWYtbm90ZXF1YWwpKQogICAgICAoc2V0cSBlcS10b2tlbiBoaWYtdG9r ZW4pCiAgICAgIChoaWYtbmV4dHRva2VuKQogICAgICAoc2V0cSByZXN1bHQgKGxpc3QgZXEtdG9r ZW4gcmVzdWx0IChoaWYtY29tcC1leHByKSkpKQogICAgcmVzdWx0KSkKCihkZWZ1biBoaWYtY29t cC1leHByICgpCiAgIlBhcnNlIGEgY29tcC1leHByIDogbG9nc2hpZnQgfCBjb21wLWV4cHIgYDwn fGA+J3xgPj0nfGA8PScgbG9nc2hpZnQuIgogIChsZXQgKChyZXN1bHQgKGhpZi1sb2dzaGlmdC1l eHByKSkKICAgICAgICAoY29tcC10b2tlbiBuaWwpKQogICAgKHdoaWxlIChtZW1xIGhpZi10b2tl biAnKGhpZi1ncmVhdGVyIGhpZi1sZXNzIGhpZi1ncmVhdGVyLWVxdWFsIGhpZi1sZXNzLWVxdWFs KSkKICAgICAgKHNldHEgY29tcC10b2tlbiBoaWYtdG9rZW4pCiAgICAgIChoaWYtbmV4dHRva2Vu KQogICAgICAoc2V0cSByZXN1bHQgKGxpc3QgY29tcC10b2tlbiByZXN1bHQgKGhpZi1sb2dzaGlm dC1leHByKSkpKQogICAgcmVzdWx0KSkKCihkZWZ1biBoaWYtbG9nc2hpZnQtZXhwciAoKQogICJQ YXJzZSBhIGxvZ3NoaWZ0IDogbWF0aCB8IGxvZ3NoaWZ0IGA8PCd8YD4+JyBtYXRoLiIKICAobGV0 ICgocmVzdWx0IChoaWYtbWF0aCkpCiAgICAgICAgKHNoaWZ0LXRva2VuIG5pbCkpCiAgICAod2hp bGUgKG1lbXEgaGlmLXRva2VuICcoaGlmLXNoaWZ0bGVmdCBoaWYtc2hpZnRyaWdodCkpCiAgICAg IChzZXRxIHNoaWZ0LXRva2VuIGhpZi10b2tlbikKICAgICAgKGhpZi1uZXh0dG9rZW4pCiAgICAg IChzZXRxIHJlc3VsdCAobGlzdCBzaGlmdC10b2tlbiByZXN1bHQgKGhpZi1tYXRoKSkpKQogICAg cmVzdWx0KSkKCihkZWZ1biBoaWYtbWF0aCAoKQogICJQYXJzZSBhbiBleHByZXNzaW9uIHdpdGgg KyBvciAtLgogICAgICAgbWF0aCA6IG11bGRpdiB8IG1hdGggJyt8LScgbXVsZGl2LiIKICAobGV0 ICgocmVzdWx0IChoaWYtbXVsZGl2LWV4cHIpKQogICAgICAgIChtYXRoLW9wIG5pbCkpCiAgICAo d2hpbGUgKG1lbXEgaGlmLXRva2VuICcoaGlmLXBsdXMgaGlmLW1pbnVzKSkKICAgICAgKHNldHEg bWF0aC1vcCBoaWYtdG9rZW4pCiAgICAgIChoaWYtbmV4dHRva2VuKQogICAgICAoc2V0cSByZXN1 bHQgKGxpc3QgbWF0aC1vcCByZXN1bHQgKGhpZi1tdWxkaXYtZXhwcikpKSkKICAgIHJlc3VsdCkp CgooZGVmdW4gaGlmLW11bGRpdi1leHByICgpCiAgIlBhcnNlIGFuIGV4cHJlc3Npb24gd2l0aCAq LC8sJS4KICAgICAgIG11bGRpdiA6IGZhY3RvciB8IG11bGRpdiAnKnwvfCUnIGZhY3Rvci4iCiAg KGxldCAoKHJlc3VsdCAoaGlmLWZhY3RvcikpCiAgICAgICAgKG1hdGgtb3AgbmlsKSkKICAgICh3 aGlsZSAobWVtcSBoaWYtdG9rZW4gJyhoaWYtbXVsdGlwbHkgaGlmLWRpdmlkZSBoaWYtbW9kdWxv KSkKICAgICAgKHNldHEgbWF0aC1vcCBoaWYtdG9rZW4pCiAgICAgIChoaWYtbmV4dHRva2VuKQog ICAgICAoc2V0cSByZXN1bHQgKGxpc3QgbWF0aC1vcCByZXN1bHQgKGhpZi1mYWN0b3IpKSkpCiAg ICByZXN1bHQpKQoKKGRlZnVuIGhpZi1mYWN0b3IgKCkKICAiUGFyc2UgYSBmYWN0b3I6ICchJyBm YWN0b3IgfCAnficgZmFjdG9yIHwgJygnIGV4cHIgJyknIHwgJ2RlZmluZWQoJyBpZCAnKScgfCAn aWQocGFybWxpc3QpJyB8IHN0cmluZ3MgfCBpZC4iCiAgKGNvbmQKICAgKChlcSBoaWYtdG9rZW4g J2hpZi1ub3QpCiAgICAoaGlmLW5leHR0b2tlbikKICAgIChsaXN0ICdoaWYtbm90IChoaWYtZmFj dG9yKSkpCgogICAoKGVxIGhpZi10b2tlbiAnaGlmLWxvZ25vdCkKICAgIChoaWYtbmV4dHRva2Vu KQogICAgKGxpc3QgJ2hpZi1sb2dub3QgKGhpZi1mYWN0b3IpKSkKCiAgICgoZXEgaGlmLXRva2Vu ICdoaWYtbHBhcmVuKQogICAgKGhpZi1uZXh0dG9rZW4pCiAgICAobGV0ICgocmVzdWx0IChoaWYt ZXhwcmxpc3QpKSkKICAgICAgKGlmIChub3QgKGVxIGhpZi10b2tlbiAnaGlmLXJwYXJlbikpCiAg ICAgICAgICAoZXJyb3IgIkJhZCB0b2tlbiBpbiBwYXJlbnRoZXNpemVkIGV4cHJlc3Npb246ICVz IiBoaWYtdG9rZW4pCiAgICAgICAgKGhpZi1uZXh0dG9rZW4pCiAgICAgICAgcmVzdWx0KSkpCgog ICAoKGVxIGhpZi10b2tlbiAnaGlmLWRlZmluZWQpCiAgICAoaGlmLW5leHR0b2tlbikKICAgIChs ZXQgKChwYXJlbiAod2hlbiAoZXEgaGlmLXRva2VuICdoaWYtbHBhcmVuKSAoaGlmLW5leHR0b2tl bikgdCkpCiAgICAgICAgICAoaWRlbnQgaGlmLXRva2VuKSkKICAgICAgKGlmIChtZW1xIGhpZi10 b2tlbiAnKG9yIGFuZCBub3QgaGlmLWRlZmluZWQgaGlmLWxwYXJlbiBoaWYtcnBhcmVuKSkKICAg ICAgICAgIChlcnJvciAiRXJyb3I6IHVuZXhwZWN0ZWQgdG9rZW46ICVzIiBoaWYtdG9rZW4pKQog ICAgICAod2hlbiBwYXJlbgogICAgICAgIChoaWYtbmV4dHRva2VuKQogICAgICAgICh1bmxlc3Mg KGVxIGhpZi10b2tlbiAnaGlmLXJwYXJlbikKICAgICAgICAgIChlcnJvciAiRXJyb3I6IGV4cGVj dGVkIFwiKVwiIGFmdGVyIGlkZW50aWZpZXIiKSkpCiAgICAgIChoaWYtbmV4dHRva2VuKQogICAg ICBgKGhpZi1kZWZpbmVkIChxdW90ZSAsaWRlbnQpKSkpCgogICAoKG51bWJlcnAgaGlmLXRva2Vu KQogICAgKHByb2cxIGhpZi10b2tlbiAoaGlmLW5leHR0b2tlbikpKQoKICAgKChzdHJpbmdwIGhp Zi10b2tlbikKICAgIChoaWYtc3RyaW5nLWNvbmNhdGVuYXRpb24pKQoKICAgOzsgVW5hcnkgcGx1 cy9taW51cy4KICAgKChtZW1xIGhpZi10b2tlbiAnKGhpZi1taW51cyBoaWYtcGx1cykpCiAgICAo bGlzdCAocHJvZzEgaGlmLXRva2VuIChoaWYtbmV4dHRva2VuKSkgMCAoaGlmLWZhY3RvcikpKQoK ICAgKHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsgaWRlbnRpZmllcgogICAg KGxldCAoKGlkZW50IGhpZi10b2tlbikpCiAgICAgIChoaWYtbmV4dHRva2VuKQogICAgICAoaWYg KGVxIGhpZi10b2tlbiAnaGlmLWxwYXJlbikKICAgICAgICAgIChoaWYtcGxhY2UtbWFjcm8taW52 b2NhdGlvbiBpZGVudCkKICAgICAgICBgKGhpZi1sb29rdXAgKHF1b3RlICxpZGVudCkpKSkpKSkK CihkZWZ1biBoaWYtZ2V0LWFyZ3VtZW50LWxpc3QgKGlkZW50KQogIChsZXQgKChuZXN0IDApCiAg ICAgICAgKHBhcm1saXN0IG5pbCkgOzsgYSAidG9rZW4iIGxpc3Qgb2YgcGFyYW1ldGVycywgd2ls bCBsYXRlciBiZSBwYXJzZWQKICAgICAgICAocGFybSBuaWwpKQogICAgKHdoaWxlIChvciAobm90 IChlcSAoaGlmLW5leHR0b2tlbikgJ2hpZi1ycGFyZW4pKQogICAgICAgICAgICAgICAoLz0gbmVz dCAwKSkKICAgICAgKGlmIChlcSAoY2FyIHBhcm0pICdoaWYtY29tbWEpCiAgICAgICAgICAoc2V0 cSBwYXJtIG5pbCkpCiAgICAgIChjb25kCiAgICAgICAoKGVxIGhpZi10b2tlbiAnaGlmLWxwYXJl bikKICAgICAgICAoc2V0cSBuZXN0ICgxKyBuZXN0KSkpCiAgICAgICAoKGVxIGhpZi10b2tlbiAn aGlmLXJwYXJlbikKICAgICAgICAoc2V0cSBuZXN0ICgxLSBuZXN0KSkKICAgICAgICAoaWYgKDwg bmVzdCAwKQogICAgICAgICAgICAoZXJyb3IgIlVuYmFsYW5jZWQgcGFyZW50aGVzaXMgd2hlbiBp bnZva2luZyBtYWNybyAlUyIgaWRlbnQpKSkKICAgICAgICgoYW5kIChlcSBoaWYtdG9rZW4gJ2hp Zi1jb21tYSkKICAgICAgICAgICAgICg9IG5lc3QgMCkpCiAgICAgICAgKHNldHEgcGFybWxpc3Qg KGFwcGVuZCBwYXJtbGlzdCAobGlzdCBwYXJtKSkKICAgICAgICAgICAgICBwYXJtIG5pbCkpKQog ICAgICAoc2V0cSBwYXJtIChhcHBlbmQgcGFybSAobGlzdCBoaWYtdG9rZW4pKSkpCiAgICAoc2V0 cSBwYXJtbGlzdCAoYXBwZW5kIHBhcm1saXN0IChsaXN0IHBhcm0pKSkgOyBva2F5IGV2ZW4gaWYg cGFybSBpcyBuaWwKICAgIChoaWYtbmV4dHRva2VuKSA7IGRyb3AgdGhlIGhpZi1ycGFyZW4sIGdl dCBuZXh0IHRva2VuCiAgICBwYXJtbGlzdCkpCgooZGVmdW4gaGlmLXBsYWNlLW1hY3JvLWludm9j YXRpb24gKGlkZW50KQogIChsZXQgKChwYXJtbGlzdCAoaGlmLWdldC1hcmd1bWVudC1saXN0IGlk ZW50KSkpCiAgICBgKGhpZi1pbnZva2UgKHF1b3RlICxpZGVudCkgKHF1b3RlICxwYXJtbGlzdCkp KSkKCihkZWZ1biBoaWYtc3RyaW5nLWNvbmNhdGVuYXRpb24gKCkKICAiUGFyc2UgY29uY2F0ZW5h dGVkIHN0cmluZ3M6IHN0cmluZyB8IHN0cmluZ3Mgc3RyaW5nIgogIChsZXQgKChyZXN1bHQgKHN1 YnN0cmluZy1uby1wcm9wZXJ0aWVzIGhpZi10b2tlbikpKQogICAgKHdoaWxlIChzdHJpbmdwICho aWYtbmV4dHRva2VuKSkKICAgICAgKHNldHEgcmVzdWx0IChjb25jYXQKICAgICAgICAgICAgICAg ICAgICAoc3Vic3RyaW5nIHJlc3VsdCAwIC0xKSAgICA7IHJlbW92ZSB0cmFpbGluZyAnIicKICAg ICAgICAgICAgICAgICAgICAoc3Vic3RyaW5nIGhpZi10b2tlbiAxKSkpKSA7IHJlbW92ZSBsZWFk aW5nICAnIicKICAgIHJlc3VsdCkpCgooZGVmdW4gaGlmLWRlZmluZS1tYWNybyAocGFybWxpc3Qg dG9rZW4tYm9keSkKICAiQSBtYXJrZXIgZm9yIGRlZmluZWQgbWFjcm8gd2l0aCBhcmd1bWVudHMs IGNhbm5vdCBiZSBldmFsdWF0ZWQgYWxvbmUgd2l0aCBubyBwYXJhbWV0ZXJzIGlucHV0ZWQuIgog IDs7IFRPRE86IGlucHV0IHBhcmFtZXRlcnMgYXQgcnVuIHRpbWUsIHVzZSBtaW5pYnVmZmVyIHRv IHF1ZXJ5IGFsbCBwYXJhbWV0ZXJzCiAgKGVycm9yICJBcmd1bWVudGVkIG1hY3JvIGNhbm5vdCBi ZSBldmFsdWF0ZWQgd2l0aG91dCBwYXNzaW5nIGFueSBwYXJhbWV0ZXIuIikpCgooZGVmdW4gaGlm LXN0cmluZ2lmeSAoYSkKICAiU3RyaW5naWZ5IGEgbnVtYmVyLCBzdHJpbmcgb3Igc3ltYm9sIgog IChjb25kCiAgICgobnVtYmVycCBhKQogICAgKG51bWJlci10by1zdHJpbmcgYSkpCiAgICgoYXRv bSBhKQogICAgKHN5bWJvbC1uYW1lIGEpKQogICAoKHN0cmluZ3AgYSkKICAgIChjb25jYXQgIlwi IiBhICJcIiIpKQogICAodAogICAgKGVycm9yICJJbnZhbGlkIHRva2VuIHRvIHN0cmluZ2lmeSIp KSkpCgooZGVmdW4gaW50ZXJuLXNhZmUgKHN0cikKICAoaWYgKHN0cmluZ3Agc3RyKQogICAgICAo aW50ZXJuIHN0cikpKQoKKGRlZnVuIGhpZi1tZXJnZS1vcGVyYXRvci10b2tlbiAoYSBiKQogICJT dXBwb3J0IHdlaXJkIChidXQgdmFsaWQpIHVzZSBvZiB0b2tlbiBjb25jYXRlbmF0aW9uLiBIZXJl IHdlIHRha2UgY2FyZSBvbmx5IHRob3NlIHRoYXQgY2FuIGJlIGV2YWx1YXRlZCBkdXJpbmcKcHJl cHJvY2Vzc2luZyB0aW1lLiBGb3IgdGhvc2UgY29tcHV0YWJsZSBzeW50YXggdGhhdCBjYW4gb25s eSBiZSBldmFsdWF0ZWQgZHVyaW5nIEMgcnVudGltZSAobGlrZSAnKysnLCctLScsJys9Jy4uLiks CndlIGlnbm9yZSB0aGVtIGFsbCBoZXJlLiIKICAoY29uZAogICAoKGFuZCAoZXEgYSAnaGlmLWxv Z2lvcikgKGVxIGIgJ2hpZi1sb2dpb3IpKSA7OyAnfCcnfCcgLT4gJ3x8JwogICAgJ2hpZi1vcikK ICAgKChhbmQgKGVxIGEgJ2hpZi1sb2dhbmQpIChlcSBiICdoaWYtbG9nYW5kKSkgOzsgJyYnJyYn IC0+ICcmJicKICAgICdoaWYtYW5kKQogICAoKGFuZCAoZXEgYSAnaGlmLWFzc2lnbikgKGVxIGIg J2hpZi1hc3NpZ24pKSA7OyAnPScnPScgLT4gJz09JwogICAgJ2hpZi1lcXVhbCkKICAgKChhbmQg KGVxIGEgJ2hpZi1ub3QpIChlcSBiICdoaWYtYXNzaWduKSkgOzsgJyEnJz0nIC0+ICchPScKICAg ICdoaWYtbm90ZXF1YWwpCiAgICgoZXEgYSAnaGlmLWxlc3MpCiAgICAoaWYgKGVxIGIgJ2hpZi1s ZXNzKSA7OyAnPCcnPCcgLT4gJzw8JwogICAgICAgICdoaWYtc2hpZnRsZWZ0CiAgICAgIChpZiAo ZXEgYiAnaGlmLWFzc2lnbikgOzsgJzwnJz0nIC0+ICc8PScKICAgICAgICAgICdoaWYtbGVzcy1l cXVhbCkpKQogICAoKGVxIGEgJ2hpZi1ncmVhdGVyKQogICAgKGlmIChlcSBiICdoaWYtZ3JlYXRl cikgOzsgJz4nJz4nIC0+ICc+PicKICAgICAgICAnaGlmLXNoaWZ0bGVmdAogICAgICAoaWYgKGVx IGIgJ2hpZi1hc3NpZ24pIDs7ICc+Jyc9JyAtPiAnPj0nCiAgICAgICAgICAnaGlmLWdyZWF0ZXIt ZXF1YWwpKSkpKQoKKGRlZnVuIGhpZi10b2tlbi1jb25jYXQgKGEgYikKICAiQ29uY2F0ZW5hdGlv biB0d28gc3ltYm9sIG5hbWUgaW50byBhIGxvbmdlciBzeW1ib2wsIGN1cnJlbnRseSBzdXBwb3J0 IG9ubHkgc2ltcGxlIHN5bWJvbCBjb25jYXRlbmF0aW9uLiIKICAoaWYgKG9yIChtZW1xIGEgaGlm LXZhbGlkLXRva2VuLWxpc3QpCiAgICAgICAgICAobWVtcSBiIGhpZi12YWxpZC10b2tlbi1saXN0 KSkKICAgICAgKGxldCAoKHJlc3VsdCAoaGlmLW1lcmdlLW9wZXJhdG9yLXRva2VuIGEgYikpKQog ICAgICAgIChvciByZXN1bHQKICAgICAgICAgICAgOzsoZXJyb3IgIkludmFsaWQgdG9rZW4gdG8g Y29uY2F0ZW5hdGUiKQogICAgICAgICAgICAoZXJyb3IgInBhc3RpbmcgXCIlc1wiIGFuZCBcIiVz XCIgZG9lcyBub3QgZ2l2ZSBhIHZhbGlkIHByZXByb2Nlc3NpbmcgdG9rZW4iCiAgICAgICAgICAg ICAgICAgICAoaWYgKG1lbXEgYSBoaWYtdmFsaWQtdG9rZW4tbGlzdCkgKGNhciAocmFzc29jIGEg aGlmLXRva2VuLWFsaXN0KSkgKHN5bWJvbC1uYW1lIGEpKQogICAgICAgICAgICAgICAgICAgKGlm IChtZW1xIGIgaGlmLXZhbGlkLXRva2VuLWxpc3QpIChjYXIgKHJhc3NvYyBiIGhpZi10b2tlbi1h bGlzdCkpIChzeW1ib2wtbmFtZSBiKSkpKSkKICAgIChpbnRlcm4tc2FmZSAoY29uY2F0IChoaWYt c3RyaW5naWZ5IGEpCiAgICAgICAgICAgICAgICAgICAgICAgICAoaGlmLXN0cmluZ2lmeSBiKSkp KSkKCihkZWZ1biBoaWYtbWF0aGlmeSAodmFsKQogICJUcmVhdCBWQUwgYXMgYSBudW1iZXI6IGlm IGl0J3MgdCBvciBuaWwsIHVzZSAxIG9yIDAuIgogIChjb25kICgoZXEgdmFsIHQpIDEpCiAgICAg ICAgKChudWxsIHZhbCkgMCkKICAgICAgICAodCB2YWwpKSkKCihkZWZ1biBoaWYtY29uZGl0aW9u YWwgKGEgYiBjKQogIChpZiAobm90ICh6ZXJvcCAoaGlmLW1hdGhpZnkgYSkpKSAoaGlmLW1hdGhp ZnkgYikgKGhpZi1tYXRoaWZ5IGMpKSkKCihkZWZ1biBoaWYtYW5kIChhIGIpCiAgKGFuZCAobm90 ICh6ZXJvcCAoaGlmLW1hdGhpZnkgYSkpKSAobm90ICh6ZXJvcCAoaGlmLW1hdGhpZnkgYikpKSkp CihkZWZ1biBoaWYtb3IgKGEgYikKICAob3IgKG5vdCAoemVyb3AgKGhpZi1tYXRoaWZ5IGEpKSkg KG5vdCAoemVyb3AgKGhpZi1tYXRoaWZ5IGIpKSkpKQooZGVmdW4gaGlmLW5vdCAoYSkKICAoemVy b3AgKGhpZi1tYXRoaWZ5IGEpKSkKKGRlZnVuIGhpZi1sb2dub3QgKGEpCiAgKGxvZ25vdCBhKSkK CihkZWZtYWNybyBoaWYtbWF0aGlmeS1iaW5vcCAoZnVuKQogIGAobGFtYmRhIChhIGIpCiAgICAg LChmb3JtYXQgIkxpa2UgYCVzJyBidXQgdHJlYXQgdCBhbmQgbmlsIGFzIDEgYW5kIDAuIiBmdW4p CiAgICAgKCxmdW4gKGhpZi1tYXRoaWZ5IGEpIChoaWYtbWF0aGlmeSBiKSkpKQoKKGRlZnVuIHNo aWZ0bGVmdCAoYSBiKQogIChpZiAoPCBhIDApCiAgICAgIChhc2ggYSBiKQogICAgKGxzaCBhIGIp KSkKCihkZWZ1biBzaGlmdHJpZ2h0IChhIGIpCiAgKGlmICg8IGEgMCkKICAgICAgKGFzaCBhICgt IDAgYikpCiAgICAobHNoIGEgKC0gMCBiKSkpKQoKCihkZWZhbGlhcyAnaGlmLW11bHRpcGx5ICAg ICAgKGhpZi1tYXRoaWZ5LWJpbm9wICopKQooZGVmYWxpYXMgJ2hpZi1kaXZpZGUgICAgICAgICho aWYtbWF0aGlmeS1iaW5vcCAvKSkKKGRlZmFsaWFzICdoaWYtbW9kdWxvICAgICAgICAoaGlmLW1h dGhpZnktYmlub3AgJSkpCihkZWZhbGlhcyAnaGlmLXBsdXMgICAgICAgICAgKGhpZi1tYXRoaWZ5 LWJpbm9wICspKQooZGVmYWxpYXMgJ2hpZi1taW51cyAgICAgICAgIChoaWYtbWF0aGlmeS1iaW5v cCAtKSkKKGRlZmFsaWFzICdoaWYtZXF1YWwgICAgICAgICAoaGlmLW1hdGhpZnktYmlub3AgPSkp CihkZWZhbGlhcyAnaGlmLW5vdGVxdWFsICAgICAgKGhpZi1tYXRoaWZ5LWJpbm9wIC89KSkKKGRl ZmFsaWFzICdoaWYtZ3JlYXRlciAgICAgICAoaGlmLW1hdGhpZnktYmlub3AgPikpCihkZWZhbGlh cyAnaGlmLWxlc3MgICAgICAgICAgKGhpZi1tYXRoaWZ5LWJpbm9wIDwpKQooZGVmYWxpYXMgJ2hp Zi1ncmVhdGVyLWVxdWFsIChoaWYtbWF0aGlmeS1iaW5vcCA+PSkpCihkZWZhbGlhcyAnaGlmLWxl c3MtZXF1YWwgICAgKGhpZi1tYXRoaWZ5LWJpbm9wIDw9KSkKKGRlZmFsaWFzICdoaWYtbG9naW9y ICAgICAgICAoaGlmLW1hdGhpZnktYmlub3AgbG9naW9yKSkKKGRlZmFsaWFzICdoaWYtbG9neG9y ICAgICAgICAoaGlmLW1hdGhpZnktYmlub3AgbG9neG9yKSkKKGRlZmFsaWFzICdoaWYtbG9nYW5k ICAgICAgICAoaGlmLW1hdGhpZnktYmlub3AgbG9nYW5kKSkKKGRlZmFsaWFzICdoaWYtc2hpZnRs ZWZ0ICAgICAoaGlmLW1hdGhpZnktYmlub3Agc2hpZnRsZWZ0KSkKKGRlZmFsaWFzICdoaWYtc2hp ZnRyaWdodCAgICAoaGlmLW1hdGhpZnktYmlub3Agc2hpZnRyaWdodCkpCgoKKGRlZnVuIGhpZi1j b21tYSAoJnJlc3QgZXhwcikKICAiRXZhbHVhdGUgYSBsaXN0IG9mIGV4cHIsIHJldHVybiB0aGUg cmVzdWx0IG9mIHRoZSBsYXN0IGl0ZW0iCiAgKGxldCAoKHJlc3VsdCBuaWwpKQogICAgKGRvbGlz dCAoZSBleHByKQogICAgICAoaWdub3JlLWVycm9ycwogICAgICAgIChzZXRxIHJlc3VsdCAoZnVu Y2FsbCBoaWRlLWlmZGVmLWV2YWx1YXRvciBlKSkpKQogICAgcmVzdWx0KSkKCihkZWZ1biBoaWYt dG9rZW4tc3RyaW5naWZpY2F0aW9uIChsKQogICJTY2FuIHRva2VuIGxpc3QgZm9yICdoaWYtc3Ry aW5naWZ5JyAoJyMnKSB0b2tlbiBhbmQgc3RyaW5naWZ5IHRoZSBuZXh0IHRva2VuIgogIChsZXQg KHJlc3VsdCkKICAgICh3aGlsZSBsCiAgICAgIChzZXRxIHJlc3VsdAogICAgICAgICAgICAoYXBw ZW5kIHJlc3VsdAogICAgICAgICAgICAgICAgICAgIChsaXN0CiAgICAgICAgICAgICAgICAgICAg IChpZiAoZXEgKGNhciBsKSAnaGlmLXN0cmluZ2lmeSkKICAgICAgICAgICAgICAgICAgICAgICAg IChwcm9nMQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpZiAoY2FkciBsKQogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAoaGlmLXN0cmluZ2lmeSAoY2FkciBsKSkKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIChlcnJvciAiTm8gdG9rZW4gdG8gc3RyaW5naWZ5Iikp CiAgICAgICAgICAgICAgICAgICAgICAgICAgIChzZXRxIGwgKGNkciBsKSkpCiAgICAgICAgICAg ICAgICAgICAgICAgKGNhciBsKSkpKSkKICAgICAgKHNldHEgbCAoY2RyIGwpKSkKICAgIHJlc3Vs dCkpCgooZGVmdW4gaGlmLXRva2VuLWNvbmNhdGVuYXRpb24gKGwpCiAgIlNjYW4gdG9rZW4gbGlz dCBmb3IgJ2hpZi10b2tlbi1jb25jYXQnICgnIyMnKSB0b2tlbiBhbmQgY29uY2F0ZW5hdGUgdHdv IHRva2VucyIKICAobGV0ICgocHJldiBuaWwpCiAgICAgICAgcmVzdWx0KQogICAgKHdoaWxlIGwK ICAgICAgKHdoaWxlIChlcSAoY2FyIGwpICdoaWYtdG9rZW4tY29uY2F0KQogICAgICAgICh1bmxl c3MgcHJldgogICAgICAgICAgKGVycm9yICJObyB0b2tlbiBiZWZvcmUgIyMgdG8gY29uY2F0ZW5h dGUiKSkKICAgICAgICAodW5sZXNzIChjZHIgbCkKICAgICAgICAgIChlcnJvciAiTm8gdG9rZW4g YWZ0ZXIgIyMgdG8gY29uY2F0ZW5hdGUiKSkKICAgICAgICAoc2V0cSBwcmV2IChoaWYtdG9rZW4t Y29uY2F0IHByZXYgKGNhZHIgbCkpKQogICAgICAgIChzZXRxIGwgKGNkZHIgbCkpKQogICAgICAo aWYgcHJldgogICAgICAgIChzZXRxIHJlc3VsdCAoYXBwZW5kIHJlc3VsdCAobGlzdCBwcmV2KSkp KQogICAgICAoc2V0cSBwcmV2IChjYXIgbCkKICAgICAgICAgICAgbCAoY2RyIGwpKSkKICAgIChp ZiBwcmV2CiAgICAgICAgKGFwcGVuZCByZXN1bHQgKGxpc3QgcHJldikpCiAgICAgIHJlc3VsdCkp KQoKKGRlZnVuIGZsYXR0ZW4gKGwpCiAgIkZsYXR0ZW4gYSB0cmVlIgogIChpZiAoYW5kIGwgKGF0 b20gbCkpCiAgICAgIChsaXN0IGwpCiAgICAoaWYgKGNvbnNwIGwpCiAgICAgICAgKG5jb25jIChm bGF0dGVuIChjYXIgbCkpIChmbGF0dGVuIChjZHIgbCkpKSkpKQoKKGRlZnVuIGRlbGltaXQgKGwg YSkKICAiRGVsbWl0IGEgbGlzdCAnbCcgd2l0aCBkZWxpbWl0ZXIgYXRvbSAnZCciCiAgKG5jb25j IChtYXBjYW4gKGxhbWJkYSAobCkKICAgICAgICAgICAgICAgICAgIChsaXN0IGwgYSkpICAoYnV0 bGFzdCBsKSkKICAgICAgICAgKGxhc3QgbCkpKQoKOzsgUGVyZm9ybSB0b2tlbiByZXBsYWNlbWVu dDoKKGRlZnVuIGhpZi1tYWNyby1zdXBwbHktYXJndW1lbnRzIChtYWNyby1uYW1lIGFjdHVhbC1w YXJtcykKICAiRXhwYW5kIGEgbWFjcm8gZnVuY3Rpb24sIHJlcGxhY2UgJ2FjdHVhbC1wYXJtcycg dG8gdGhlIGZ1bmN0aW9uIGJvZHkuIgogIChsZXQqICgoU0EgICAgICAgICAgICAgICAgICAgKGFz c29jIG1hY3JvLW5hbWUgaGlkZS1pZmRlZi1lbnYpKQogICAgICAgICAobWFjcm8gICAgICAgICAg ICAgICAgKGFuZCBTQQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2RyIFNB KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZXEgKGNhZHIgU0EpICdoaWYt ZGVmaW5lLW1hY3JvKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2RkciBT QSkpKQogICAgICAgICAoZm9ybWFsLXBhcm1zICAgICAgICAgKGFuZCBtYWNybyAoY2FyIG1hY3Jv KSkpCiAgICAgICAgIChtYWNyby1ib2R5ICAgICAgICAgICAoYW5kIG1hY3JvIChjYWRyIG1hY3Jv KSkpCiAgICAgICAgIChoaWRlLWlmZGVmLWxvY2FsLWVudiBuaWwpIDs7IGR5bmFtaWMgYmluZGlu ZyBsb2NhbCB0YWJsZQogICAgICAgICBhY3R1YWwtY291bnQKICAgICAgICAgZm9ybWFsLWNvdW50 CiAgICAgICAgIGFjdHVhbAogICAgICAgICBmb3JtYWwKICAgICAgICAgZXRjKQoKICAgICh3aGVu IChhbmQgYWN0dWFsLXBhcm1zIGZvcm1hbC1wYXJtcyBtYWNyby1ib2R5KQogICAgICA7OyBGb3Ig ZWFjaCBhY3R1YWwgcGFyYW1ldGVyLCBldmFsdWF0ZSBlYWNoIG9uZSBhbmQgYXNzb2NpYXRlIGl0 CiAgICAgIDs7IHdpdGggdGhlIGFzc29jaWF0ZWQgYWN0dWFsIHBhcmFtZXRlciwgcHV0IGl0IGlu dG8gbG9jYWwgdGFibGUgYW5kIGZpbmFsbHkKICAgICAgOzsgZXZhbHVhdGUgdGhlIG1hY3JvIGJv ZHkuCiAgICAgIChpZiAoc2V0cSBldGMgKGVxIChjYXIgZm9ybWFsLXBhcm1zKSAnaGlmLWV0Yykp IDs7IFRha2UgY2FyZSBvZiAnaGlmLWV0YyBmaXJzdC4gUHJlZml4ICdoaWYtY29tbWEgYmFjayBp ZiBuZWVkZWQuCiAgICAgICAgICAoc2V0cSBmb3JtYWwtcGFybXMgKGNkciBmb3JtYWwtcGFybXMp KSkKICAgICAgKHNldHEgZm9ybWFsLWNvdW50IChsZW5ndGggZm9ybWFsLXBhcm1zKQogICAgICAg ICAgICBhY3R1YWwtY291bnQgKGxlbmd0aCBhY3R1YWwtcGFybXMpKQoKICAgICAgKGlmICg+IGZv cm1hbC1jb3VudCBhY3R1YWwtY291bnQpCiAgICAgICAgICAoZXJyb3IgIlRvbyBmZXcgcGFybWFt ZXRlciBmb3IgbWFjcm8gJVMiIG1hY3JvLW5hbWUpCiAgICAgICAgKGlmICg8IGZvcm1hbC1jb3Vu dCBhY3R1YWwtY291bnQpCiAgICAgICAgICAgIChvciBldGMKICAgICAgICAgICAgICAgIChlcnJv ciAiVG9vIG1hbnkgcGFyYW1ldGVycyBmb3IgbWFjcm8gJVMiIG1hY3JvLW5hbWUpKSkpCgogICAg ICA7OyBQZXJmb3JtIHRva2VuIHJlcGxhY2VtZW50IG9uIHRoZSBtYWNyby1ib2R5IG9uIHRoZSBw YXJhbWV0ZXJzCiAgICAgICh3aGlsZSAoc2V0cSBmb3JtYWwgKGNhciBmb3JtYWwtcGFybXMpKQog ICAgICAgIChzZXRxIGZvcm1hbC1wYXJtcyAoY2RyIGZvcm1hbC1wYXJtcykpCiAgICAgICAgOzsg UHJldmVudCByZXBldHRhdGl2ZSBzdWJzdGl0dXRhdGlvbiwgdGh1cyBjYW5ub3QgdXNlICdzdWJz dCcKICAgICAgICA7OyBmb3IgZXhhbXBsZToKICAgICAgICA7OyAjZGVmaW5lIG1hYyhhLGIpIChh K2IpCiAgICAgICAgOzsgI2RlZmluZSB0ZXN0bWFjIG1hYyhiLHkpCiAgICAgICAgOzsgdGVzdG1h YyBzaG91bGQgZXhwYW5kIHRvIChiK3kpOiByZXBsYWNlIG9mIGFyZ3VtZW50IGEgYW5kIGIgb2Nj dXJzIHNpbXVsdGFuZW91c2x5CiAgICAgICAgOzsgbm90IHNlcXVlbnRpYWxseS4gSWYgdGhpcyBv Y2N1cnMgc2VxdWVudGlhbGx5IGFjY29yZGluZyB0byB0aGUgYXJndW1lbnQgb3JkZXIsCiAgICAg ICAgOzsgIGl0IHdpbGwgYmVjb21lOiAxLiBmb3JtYWwgcGFybSAjMSAnYScgcmVwbGFjZWQgYnkg YWN0dWFsIHBhcm0gJ2InLCB0aHVzIChhK2IpIGJlY29tZXMgKGIrYikKICAgICAgICA7OyAgMi4g Zm9ybWFsIHBhcm0gIzIgJ2InIHJlcGxhY2VkIGJ5IGFjdHVhbCBwYXJtICd5JywgdGh1cyAoYiti KSBiZWNvbWVzICh5K3kpLgogICAgICAgIChzZXRxIG1hY3JvLWJvZHkKICAgICAgICAgICAgICA7 OyBVbmxpa2UgJ3N1YnN0JywgJ3N1YnN0aXR1dGUnIHJlcGxhY2Ugb25seSB0aGUgdG9wIGxldmVs IGluc3RlYWQgb2YgdGhlIHdob2xlIHRyZWUsCiAgICAgICAgICAgICAgOzsgbW9yZSBpbXBvcnRh bnRseSwgaXQncyBub3QgZGVzdHJ1Y3RpdmUuCiAgICAgICAgICAgICAgKGlmIChhbmQgZXRjIChu dWxsIGZvcm1hbC1wYXJtcykpCiAgICAgICAgICAgICAgICAgIChzdWJzdGl0dXRlIChkZWxpbWl0 IGFjdHVhbC1wYXJtcyAnaGlmLWNvbW1hKSBmb3JtYWwgbWFjcm8tYm9keSkKICAgICAgICAgICAg ICAgIChzdWJzdGl0dXRlIChjYXIgYWN0dWFsLXBhcm1zKSBmb3JtYWwgbWFjcm8tYm9keSkpKQog ICAgICAgIChzZXRxIGFjdHVhbC1wYXJtcyAoY2RyIGFjdHVhbC1wYXJtcykpKQoKICAgICAgOzsg UmVwbGFjZW1lbnQgY29tcGxldGVkLCBmbGF0dGVybiB0aGUgd2hvbGUgdG9rZW4gbGlzdCwKICAg ICAgKHNldHEgbWFjcm8tYm9keSAoZmxhdHRlbiBtYWNyby1ib2R5KSkKCiAgICAgIDs7IFN0cmlu Z2lmaWNhdGlvbiBhbmQgdG9rZW4gY29uY2F0ZW5hdGlvbiBoYXBwZW5zIGhlcmUKICAgICAgKGhp Zi10b2tlbi1jb25jYXRlbmF0aW9uIChoaWYtdG9rZW4tc3RyaW5naWZpY2F0aW9uIG1hY3JvLWJv ZHkpKSkpKQoKKGRlZnVuIGhpZi1pbnZva2UgKG1hY3JvLW5hbWUgYWN0dWFsLXBhcm1zKQogICJJ bnZva2UgYSBtYWNybyBieSBmaXJzdCBleHBhbmRpbmcgaXQsIHRoZW4gcmVwYXJzZSB0aGUgbWFj cm8tYm9keSwgZmluYWxseSBpbnZva2UgdGhlIG1hY3JvLiIKICAgIDs7IFJlcGFyc2UgdGhlIG1h Y3JvIGJvZHkgYW5kIGV2YWx1YXRlIGl0CiAgICAoZnVuY2FsbCBoaWRlLWlmZGVmLWV2YWx1YXRv cgogICAgICAgICAgICAgKGhpZi1wYXJzZS1pZi1leHAKICAgICAgICAgICAgICAoaGlmLW1hY3Jv LXN1cHBseS1hcmd1bWVudHMgbWFjcm8tbmFtZSBhY3R1YWwtcGFybXMpCiAgICAgICAgICAgICAg bWFjcm8tbmFtZSkpKQoKOzs7LS0tLS0tLS0tLS0gZW5kIG9mIHBhcnNlciAtLS0tLS0tLS0tLS0t LS0tLS0tLS0tLQoKKGRlZnVuIGhpZi1jYW5vbmljYWxpemUtdG9rZW5zIChyZWdleHApIDs7IGZv ciBkZWJ1Z2dpbmcKICAiUmV0dXJuIHRoZSBleHBhbmRlZCByZXN1bHQgb2YgdGhlIHNjYW5uZWQg dG9rZW5zLiIKICAoc2F2ZS1leGN1cnNpb24KICAgIChyZS1zZWFyY2gtZm9yd2FyZCByZWdleHAp CiAgICAobGV0KiAoKGN1cnItcmVnZXhwIChtYXRjaC1zdHJpbmcgMCkpCiAgICAgICAgICAgKGRl ZmluZWQgKHN0cmluZy1tYXRjaCBoaWYtaWZ4ZGVmLXJlZ2V4cCBjdXJyLXJlZ2V4cCkpCiAgICAg ICAgICAgKG5lZ2F0ZSAoYW5kIGRlZmluZWQKICAgICAgICAgICAgICAgICAgICAgICAgKHN0cmlu Zz0gKG1hdGNoLXN0cmluZyAyIGN1cnItcmVnZXhwKSAibiIpKSkpCiAgICAgIChsZXQqICgodG9r ZW5zIChoaWYtdG9rZW5pemUgKHBvaW50KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIChwcm9nbiAoaGlmLWVuZC1vZi1saW5lKSAocG9pbnQpKSkpKQogICAgICAgIChpZiBkZWZp bmVkCiAgICAgICAgICAgIChzZXRxIHRva2VucyAobGlzdCAnaGlmLWRlZmluZWQgdG9rZW5zKSkp CiAgICAgICAgKGlmIG5lZ2F0ZQogICAgICAgICAgICAoc2V0cSB0b2tlbnMgKGxpc3QgJ2hpZi1u b3QgdG9rZW5zKSkpCiAgICAgICAgdG9rZW5zKSkpKQoKKGRlZnVuIGhpZi1jYW5vbmljYWxpemUg KHJlZ2V4cCkKICAiV2hlbiBhdCBiZWdpbm5pbmcgb2YgYHJlZ2V4cCcgKGkuZS4gI2lmWCksIHJl dHVybiBhIExpc3AgZXhwcmVzc2lvbiBmb3IgaXRzIGNvbmRpdGlvbi4iCiAgKGxldCAoKGNhc2Ut Zm9sZC1zZWFyY2ggbmlsKSkKICAgIChzYXZlLWV4Y3Vyc2lvbgogICAgICAocmUtc2VhcmNoLWZv cndhcmQgcmVnZXhwKQogICAgICAobGV0KiAoKGN1cnItcmVnZXhwIChtYXRjaC1zdHJpbmcgMCkp CiAgICAgICAgICAgICAoZGVmaW5lZCAoc3RyaW5nLW1hdGNoIGhpZi1pZnhkZWYtcmVnZXhwIGN1 cnItcmVnZXhwKSkKICAgICAgICAgICAgIChuZWdhdGUgKGFuZCBkZWZpbmVkCiAgICAgICAgICAg ICAgICAgICAgICAgICAgKHN0cmluZz0gKG1hdGNoLXN0cmluZyAyIGN1cnItcmVnZXhwKSAibiIp KSkKICAgICAgICAgICAgICh0b2tlbnMgKGhpZi10b2tlbml6ZSAocG9pbnQpCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgKHByb2duIChoaWYtZW5kLW9mLWxpbmUpIChwb2ludCkp KSkpCiAgICAgICAgKGlmIGRlZmluZWQKICAgICAgICAgICAgKHNldHEgdG9rZW5zIChsaXN0ICdo aWYtZGVmaW5lZCB0b2tlbnMpKSkKICAgICAgICAoaWYgbmVnYXRlCiAgICAgICAgICAgIChzZXRx IHRva2VucyAobGlzdCAnaGlmLW5vdCB0b2tlbnMpKSkKICAgICAgICAoaGlmLXBhcnNlLWlmLWV4 cCB0b2tlbnMpKSkpKQoKKGRlZnVuIGhpZi1maW5kLWFueS1pZlggKCkKICAiTW92ZSB0byBuZXh0 ICNpZi4uLiwgb3IgI2lmbmRlZiwgYXQgcG9pbnQgb3IgYWZ0ZXIuIgogIDs7IChtZXNzYWdlICJm aW5kIGlmWCBhdCAlZCIgKHBvaW50KSkKICAocHJvZzEKICAgICAgKHJlLXNlYXJjaC1mb3J3YXJk IGhpZi1pZngtcmVnZXhwIChwb2ludC1tYXgpIHQpCiAgICAoYmVnaW5uaW5nLW9mLWxpbmUpKSkK CihkZWZ1biBoaWYtZmluZC1uZXh0LXJlbGV2YW50ICgpCiAgIk1vdmUgdG8gbmV4dCAjaWYuLi4s ICNlbGlmLi4uLCAjZWxzZSwgb3IgI2VuZGlmLCBhZnRlciB0aGUgY3VycmVudCBsaW5lLiIKICA7 OyAobWVzc2FnZSAiaGlmLWZpbmQtbmV4dC1yZWxldmFudCBhdCAlZCIgKHBvaW50KSkKICAoZW5k LW9mLWxpbmUpCiAgOzsgYXZvaWQgaW5maW5pdGUgcmVjdXJzaW9uIGJ5IG9ubHkgZ29pbmcgdG8g YmVnaW5uaW5nIG9mIGxpbmUgaWYgbWF0Y2ggZm91bmQKICAoaWYgKHJlLXNlYXJjaC1mb3J3YXJk IGhpZi1pZngtZWxzZS1lbmRpZi1yZWdleHAgKHBvaW50LW1heCkgdCkKICAgICAgKGJlZ2lubmlu Zy1vZi1saW5lKSkpCgooZGVmdW4gaGlmLWZpbmQtcHJldmlvdXMtcmVsZXZhbnQgKCkKICAiTW92 ZSB0byBwcmV2aW91cyAjaWYuLi4sICNlbHNlLCBvciAjZW5kaWYsIGJlZm9yZSB0aGUgY3VycmVu dCBsaW5lLiIKICA7OyAobWVzc2FnZSAiaGlmLWZpbmQtcHJldmlvdXMtcmVsZXZhbnQgYXQgJWQi IChwb2ludCkpCiAgKGJlZ2lubmluZy1vZi1saW5lKQogIDs7IGF2b2lkIGluZmluaXRlIHJlY3Vy c2lvbiBieSBvbmx5IGdvaW5nIHRvIGJlZ2lubmluZyBvZiBsaW5lIGlmIG1hdGNoIGZvdW5kCiAg KGlmIChyZS1zZWFyY2gtYmFja3dhcmQgaGlmLWlmeC1lbHNlLWVuZGlmLXJlZ2V4cCAocG9pbnQt bWluKSB0KQogICAgIChiZWdpbm5pbmctb2YtbGluZSkpKQoKCihkZWZ1biBoaWYtbG9va2luZy1h dC1pZlggKCkgICAgICAgICAgICA7OyBTaG91bGQgZXZlbnR1YWxseSBzZWUgI2lmCiAgKGxvb2tp bmctYXQgaGlmLWlmeC1yZWdleHApKQooZGVmdW4gaGlmLWxvb2tpbmctYXQtZW5kaWYgKCkKICAo bG9va2luZy1hdCBoaWYtZW5kaWYtcmVnZXhwKSkKKGRlZnVuIGhpZi1sb29raW5nLWF0LWVsc2Ug KCkKICAobG9va2luZy1hdCBoaWYtZWxzZS1yZWdleHApKQooZGVmdW4gaGlmLWxvb2tpbmctYXQt ZWxpZiAoKQogIChsb29raW5nLWF0IGhpZi1lbGlmLXJlZ2V4cCkpCgoKKGRlZnVuIGhpZi1pZmRl Zi10by1lbmRpZiAoKQogICJJZiBwb3NpdGlvbmVkIGF0ICNpZlgsICNlbGlmLCBvciAjZWxzZSBm b3JtLCBza2lwIHRvIGNvcnJlc3BvbmRpbmcgI2VuZGlmLiIKICA7OyAobWVzc2FnZSAiaGlmLWlm ZGVmLXRvLWVuZGlmIGF0ICVkIiAocG9pbnQpKSAoc2l0LWZvciAxKQogIChoaWYtZmluZC1uZXh0 LXJlbGV2YW50KQogIChjb25kICgoaGlmLWxvb2tpbmctYXQtaWZYKQogICAgICAgICAoaGlmLWlm ZGVmLXRvLWVuZGlmKSA7IGZpbmQgZW5kaWYgb2YgbmVzdGVkIGlmCiAgICAgICAgIChoaWYtaWZk ZWYtdG8tZW5kaWYpKSA7IGZpbmQgb3V0ZXIgZW5kaWYgb3IgZWxzZQogICAgICAgICgoaGlmLWxv b2tpbmctYXQtZWxpZikKICAgICAgICAgKGhpZi1pZmRlZi10by1lbmRpZikpCiAgICAgICAgKCho aWYtbG9va2luZy1hdC1lbHNlKQogICAgICAgICAoaGlmLWlmZGVmLXRvLWVuZGlmKSkgOyBmaW5k IGVuZGlmIGZvbGxvd2luZyBlbHNlCiAgICAgICAgKChoaWYtbG9va2luZy1hdC1lbmRpZikKICAg ICAgICAgJ2RvbmUpCiAgICAgICAgKHQKICAgICAgICAgKGVycm9yICJNaXNtYXRjaGVkICNpZmRl ZiAjZW5kaWYgcGFpciIpKSkpCgoKKGRlZnVuIGhpZi1lbmRpZi10by1pZmRlZiAoKQogICJJZiBw b3NpdGlvbmVkIGF0ICNlbmRpZiBmb3JtLCBza2lwIGJhY2t3YXJkIHRvIGNvcnJlc3BvbmRpbmcg I2lmWC4iCiAgOzsgKG1lc3NhZ2UgImhpZi1lbmRpZi10by1pZmRlZiBhdCAlZCIgKHBvaW50KSkK ICAobGV0ICgoc3RhcnQgKHBvaW50KSkpCiAgICAoaGlmLWZpbmQtcHJldmlvdXMtcmVsZXZhbnQp CiAgICAoaWYgKD0gc3RhcnQgKHBvaW50KSkKICAgICAgICAoZXJyb3IgIk1pc21hdGNoZWQgI2lm ZGVmICNlbmRpZiBwYWlyIikpKQogIChjb25kICgoaGlmLWxvb2tpbmctYXQtZW5kaWYpCiAgICAg ICAgIChoaWYtZW5kaWYtdG8taWZkZWYpIDsgZmluZCBiZWdpbm5pbmcgb2YgbmVzdGVkIGlmCiAg ICAgICAgIChoaWYtZW5kaWYtdG8taWZkZWYpKSA7IGZpbmQgYmVnaW5uaW5nIG9mIG91dGVyIGlm IG9yIGVsc2UKICAgICAgICAoKGhpZi1sb29raW5nLWF0LWVsaWYpCiAgICAgICAgIChoaWYtZW5k aWYtdG8taWZkZWYpKQogICAgICAgICgoaGlmLWxvb2tpbmctYXQtZWxzZSkKICAgICAgICAgKGhp Zi1lbmRpZi10by1pZmRlZikpCiAgICAgICAgKChoaWYtbG9va2luZy1hdC1pZlgpCiAgICAgICAg ICdkb25lKQogICAgICAgICh0CiAgICAgICAgIChlcnJvciAiTWlzbWF0Y2hlZCAjZW5kaWYiKSkp KSAgICAgICAgICAgICAgICAgOyBuZXZlciBnZXRzIGhlcmUKCgooZGVmdW4gZm9yd2FyZC1pZmRl ZiAoJm9wdGlvbmFsIGFyZykKICAiTW92ZSBwb2ludCB0byBiZWdpbm5pbmcgb2YgbGluZSBvZiB0 aGUgbmV4dCBpZmRlZi1lbmRpZi4KV2l0aCBhcmd1bWVudCwgZG8gdGhpcyB0aGF0IG1hbnkgdGlt ZXMuIgogIChpbnRlcmFjdGl2ZSAicCIpCiAgKG9yIGFyZyAoc2V0cSBhcmcgMSkpCiAgKGlmICg8 IGFyZyAwKSAoYmFja3dhcmQtaWZkZWYgKC0gYXJnKSkKICAgICh3aGlsZSAoPCAwIGFyZykKICAg ICAgKHNldHEgYXJnICgtIGFyZykpCiAgICAgIChsZXQgKChzdGFydCAocG9pbnQpKSkKICAgICAg ICAodW5sZXNzIChoaWYtbG9va2luZy1hdC1pZlgpCiAgICAgICAgICAoaGlmLWZpbmQtbmV4dC1y ZWxldmFudCkpCiAgICAgICAgKGlmIChoaWYtbG9va2luZy1hdC1pZlgpCiAgICAgICAgICAgICho aWYtaWZkZWYtdG8tZW5kaWYpCiAgICAgICAgICAoZ290by1jaGFyIHN0YXJ0KQogICAgICAgICAg KGVycm9yICJObyBmb2xsb3dpbmcgI2lmZGVmIikpKSkpKQoKCihkZWZ1biBiYWNrd2FyZC1pZmRl ZiAoJm9wdGlvbmFsIGFyZykKICAiTW92ZSBwb2ludCB0byBiZWdpbm5pbmcgb2YgdGhlIHByZXZp b3VzIGlmZGVmLWVuZGlmLgpXaXRoIGFyZ3VtZW50LCBkbyB0aGlzIHRoYXQgbWFueSB0aW1lcy4i CiAgKGludGVyYWN0aXZlICJwIikKICAob3IgYXJnIChzZXRxIGFyZyAxKSkKICAoaWYgKDwgYXJn IDApIChmb3J3YXJkLWlmZGVmICgtIGFyZykpCiAgICAod2hpbGUgKDwgMCBhcmcpCiAgICAgIChz ZXRxIGFyZyAoMS0gYXJnKSkKICAgICAgKGJlZ2lubmluZy1vZi1saW5lKQogICAgICAobGV0ICgo c3RhcnQgKHBvaW50KSkpCiAgICAgICAgKHVubGVzcyAoaGlmLWxvb2tpbmctYXQtZW5kaWYpCiAg ICAgICAgICAoaGlmLWZpbmQtcHJldmlvdXMtcmVsZXZhbnQpKQogICAgICAgIChpZiAoaGlmLWxv b2tpbmctYXQtZW5kaWYpCiAgICAgICAgICAgIChoaWYtZW5kaWYtdG8taWZkZWYpCiAgICAgICAg ICAoZ290by1jaGFyIHN0YXJ0KQogICAgICAgICAgKGVycm9yICJObyBwcmV2aW91cyAjaWZkZWYi KSkpKSkpCgoKKGRlZnVuIGRvd24taWZkZWYgKCkKICAiTW92ZSBwb2ludCB0byBiZWdpbm5pbmcg b2YgbmVzdGVkIGlmZGVmIG9yIGVsc2UtcGFydC4iCiAgICAoaW50ZXJhY3RpdmUpCiAgICAobGV0 ICgoc3RhcnQgKHBvaW50KSkpCiAgICAgIChoaWYtZmluZC1uZXh0LXJlbGV2YW50KQogICAgICAo aWYgKG9yIChoaWYtbG9va2luZy1hdC1pZlgpIChoaWYtbG9va2luZy1hdC1lbHNlKSkKICAgICAg ICAgICgpCiAgICAgICAgKGdvdG8tY2hhciBzdGFydCkKICAgICAgICAoZXJyb3IgIk5vIGZvbGxv d2luZyAjaWZkZWYiKSkpKQoKCihkZWZ1biB1cC1pZmRlZiAoKQogICJNb3ZlIHBvaW50IHRvIGJl Z2lubmluZyBvZiBlbmNsb3NpbmcgaWZkZWYgb3IgZWxzZS1wYXJ0LiIKICAoaW50ZXJhY3RpdmUp CiAgKGJlZ2lubmluZy1vZi1saW5lKQogIChsZXQgKChzdGFydCAocG9pbnQpKSkKICAgICh1bmxl c3MgKGhpZi1sb29raW5nLWF0LWVuZGlmKQogICAgICAoaGlmLWZpbmQtcHJldmlvdXMtcmVsZXZh bnQpKQogICAgKGlmIChoaWYtbG9va2luZy1hdC1lbmRpZikKICAgICAgICAoaGlmLWVuZGlmLXRv LWlmZGVmKSkKICAgICAgKGlmICg9IHN0YXJ0IChwb2ludCkpCiAgICAgICAgICAoZXJyb3IgIk5v IHByZXZpb3VzICNpZmRlZiIpKSkpCgooZGVmdW4gbmV4dC1pZmRlZiAoJm9wdGlvbmFsIGFyZykK ICAiTW92ZSB0byB0aGUgYmVnaW5uaW5nIG9mIHRoZSBuZXh0ICNpZlgsICNlbHNlLCBvciAjZW5k aWYuCldpdGggYXJndW1lbnQsIGRvIHRoaXMgdGhhdCBtYW55IHRpbWVzLiIKICAoaW50ZXJhY3Rp dmUgInAiKQogIChvciBhcmcgKHNldHEgYXJnIDEpKQogIChpZiAoPCBhcmcgMCkgKHByZXZpb3Vz LWlmZGVmICgtIGFyZykpCiAgICAod2hpbGUgKDwgMCBhcmcpCiAgICAgIChzZXRxIGFyZyAoMS0g YXJnKSkKICAgICAgKGhpZi1maW5kLW5leHQtcmVsZXZhbnQpCiAgICAgICh3aGVuIChlb2xwKQog ICAgICAgIChiZWdpbm5pbmctb2YtbGluZSkKICAgICAgICAoZXJyb3IgIk5vIGZvbGxvd2luZyAj aWZkZWZzLCAjZWxzZXMsIG9yICNlbmRpZnMiKSkpKSkKCihkZWZ1biBwcmV2aW91cy1pZmRlZiAo Jm9wdGlvbmFsIGFyZykKICAiTW92ZSB0byB0aGUgYmVnaW5uaW5nIG9mIHRoZSBwcmV2aW91cyAj aWZYLCAjZWxzZSwgb3IgI2VuZGlmLgpXaXRoIGFyZ3VtZW50LCBkbyB0aGlzIHRoYXQgbWFueSB0 aW1lcy4iCiAgKGludGVyYWN0aXZlICJwIikKICAob3IgYXJnIChzZXRxIGFyZyAxKSkKICAoaWYg KDwgYXJnIDApIChuZXh0LWlmZGVmICgtIGFyZykpCiAgICAod2hpbGUgKDwgMCBhcmcpCiAgICAg IChzZXRxIGFyZyAoMS0gYXJnKSkKICAgICAgKGxldCAoKHN0YXJ0IChwb2ludCkpKQogICAgICAg IChoaWYtZmluZC1wcmV2aW91cy1yZWxldmFudCkKICAgICAgICAoaWYgKD0gc3RhcnQgKHBvaW50 KSkKICAgICAgICAgICAgKGVycm9yICJObyBwcmV2aW91cyAjaWZkZWZzLCAjZWxzZXMsIG9yICNl bmRpZnMiKSkpKSkpCgoKOzs9PT0lJVNGJSUgcGFyc2luZyAoRW5kKSAgPT09CgoKOzs9PT0lJVNG JSUgaGlkZS1pZmRlZi1oaWRpbmcgKFN0YXJ0KSAgPT09CgoKOzs7IEEgcmFuZ2UgaXMgYSBzdHJ1 Y3R1cmUgd2l0aCBmb3VyIGNvbXBvbmVudHM6Cjs7OyBTVEFSVCAgICAgICBUaGUgc3RhcnQgb2Yg dGhlIHJhbmdlLiAoYmVnaW5uaW5nIG9mIGxpbmUpCjs7OyBFTFNFICAgICAgICBUaGUgZWxzZSBt YXJrZXIgKGJlZ2lubmluZyBvZiBsaW5lKQo7OzsgRU5EICAgICAgICAgVGhlIGVuZCBvZiB0aGUg cmFuZ2UuICAoYmVnaW5uaW5nIG9mIGxpbmUpCjs7OyBFTElGICAgICAgICBBIHNlcXVlbmNlIG9m ICNlbGlmIG1hcmtlcnMgKGJlZ2lubmluZyBvZiBsaW5lKQoKKGRlZnN1YnN0IGhpZi1tYWtlLXJh bmdlIChzdGFydCBlbmQgJm9wdGlvbmFsIGVsc2UgZWxpZikKICAobGlzdCBzdGFydCBlbHNlIGVu ZCBlbGlmKSkKCihkZWZzdWJzdCBoaWYtcmFuZ2Utc3RhcnQgKHJhbmdlKSAoZWx0IHJhbmdlIDAp KQooZGVmc3Vic3QgaGlmLXJhbmdlLWVsc2UgKHJhbmdlKSAoZWx0IHJhbmdlIDEpKQooZGVmc3Vi c3QgaGlmLXJhbmdlLWVuZCAocmFuZ2UpIChlbHQgcmFuZ2UgMikpCihkZWZzdWJzdCBoaWYtcmFu Z2UtZWxpZiAocmFuZ2UpIChlbHQgcmFuZ2UgMykpCgoKOzs7IEZpbmQtUmFuZ2UKOzs7IFRoZSB3 b3JraG9yc2UsIGl0IGRlbGltaXRzIHRoZSAjaWYgcmVnaW9uLiAgUmVhc29uYWJseSBzaW1wbGU6 Cjs7OyBTa2lwIHVudGlsIGFuICNlbHNlIG9yICNlbmRpZiBpcyBmb3VuZCwgcmVtZW1iZXJpbmcg cG9zaXRpb25zLiAgSWYKOzs7IGFuICNlbHNlIHdhcyBmb3VuZCwgc2tpcCBzb21lIG1vcmUsIGxv b2tpbmcgZm9yIHRoZSB0cnVlICNlbmRpZi4KCihkZWZ1biBoaWYtZmluZC1yYW5nZSAoKQogICJS ZXR1cm4gYSBSYW5nZSBzdHJ1Y3R1cmUgZGVzY3JpYmluZyB0aGUgY3VycmVudCAjaWYgcmVnaW9u LgpQb2ludCBpcyBsZWZ0IHVuY2hhbmdlZC4iCiAgOzsgKG1lc3NhZ2UgImhpZi1maW5kLXJhbmdl IGF0ICVkIiAocG9pbnQpKQogIChzYXZlLWV4Y3Vyc2lvbgogICAgKGJlZ2lubmluZy1vZi1saW5l KQogICAgKGxldCAoKHN0YXJ0IChwb2ludCkpCiAgICAgICAgICAoZWxpZiBuaWwpCiAgICAgICAg ICAoZWxzZSBuaWwpCiAgICAgICAgICAoZW5kIG5pbCkpCiAgICAgIDs7IFBhcnQgb25lLiAgTG9v ayBmb3IgZWl0aGVyICNlbGlmLCAjZWxzZSBvciAjZW5kaWYuCiAgICAgIDs7IFRoaXMgbG9vcC1h bmQtYS1oYWxmIGRlZGljYXRlZCB0byBFLiBEaWprc3RyYS4KICAgICAgKHdoaWxlIChhbmQgKG5v dCBlbHNlKSAobm90IGVuZCkpCiAgICAgICAgKHdoaWxlIChwcm9nbgogICAgICAgICAgICAgICAg IChoaWYtZmluZC1uZXh0LXJlbGV2YW50KQogICAgICAgICAgICAgICAgIChoaWYtbG9va2luZy1h dC1pZlgpKSAgICAgICAgICA7IFNraXAgbmVzdGVkIGlmZGVmCiAgICAgICAgICAoaGlmLWlmZGVm LXRvLWVuZGlmKSkKICAgICAgICA7OyBGb3VuZCBlaXRoZXIgYSAjZWxzZSwgI2VsaWYsIG9yIGFu ICNlbmRpZi4KICAgICAgICAoY29uZCAoKGhpZi1sb29raW5nLWF0LWVsaWYpCiAgICAgICAgICAg ICAgIChzZXRxIGVsaWYgKG5jb25jIGVsaWYgKGxpc3QgKHBvaW50KSkpKSkKICAgICAgICAgICAg ICAoKGhpZi1sb29raW5nLWF0LWVsc2UpCiAgICAgICAgICAgICAgIChzZXRxIGVsc2UgKHBvaW50 KSkpCiAgICAgICAgICAgICAgKHQKICAgICAgICAgICAgICAgKHNldHEgZW5kIChwb2ludCkpKSkp CiAgICAgIDs7IElmIGZvdW5kICNlbHNlLCBsb29rIGZvciAjZW5kaWYuCiAgICAgICh3aGVuIGVs c2UKICAgICAgICAod2hpbGUgKHByb2duCiAgICAgICAgICAgICAgICAgKGhpZi1maW5kLW5leHQt cmVsZXZhbnQpCiAgICAgICAgICAgICAgICAgKGhpZi1sb29raW5nLWF0LWlmWCkpICA7IFNraXAg bmVzdGVkIGlmZGVmCiAgICAgICAgICAoaGlmLWlmZGVmLXRvLWVuZGlmKSkKICAgICAgICAoaWYg KGhpZi1sb29raW5nLWF0LWVsc2UpCiAgICAgICAgICAgIChlcnJvciAiRm91bmQgdHdvIGVsc2Vz IGluIGEgcm93PyAgQnJva2VuISIpKQogICAgICAgIChzZXRxIGVuZCAocG9pbnQpKSkgICAgICAg ICAgICA7IChsaW5lLWVuZC1wb3NpdGlvbikKICAgICAgKGhpZi1tYWtlLXJhbmdlIHN0YXJ0IGVu ZCBlbHNlIGVsaWYpKSkpCgoKOzs7IEEgYml0IHNsaW15LgoKKGRlZnVuIGhpZi1oaWRlLWxpbmUg KHBvaW50KQogICJIaWRlIHRoZSBsaW5lIGNvbnRhaW5pbmcgcG9pbnQuICBEb2VzIG5vdGhpbmcg aWYgYGhpZGUtaWZkZWYtbGluZXMnIGlzIG5pbC4iCiAgKHdoZW4gaGlkZS1pZmRlZi1saW5lcwog ICAgKHNhdmUtZXhjdXJzaW9uCiAgICAgIChnb3RvLWNoYXIgcG9pbnQpCiAgICAgIChoaWRlLWlm ZGVmLXJlZ2lvbi1pbnRlcm5hbAogICAgICAgKGxpbmUtYmVnaW5uaW5nLXBvc2l0aW9uKSAocHJv Z24gKGhpZi1lbmQtb2YtbGluZSkgKHBvaW50KSkpKSkpCgoKOzs7ICBIaWYtUG9zc2libHktSGlk ZQo7OzsgIFRoZXJlIGFyZSBmb3VyIGNhc2VzLiAgVGhlICNpZlggZXhwcmVzc2lvbiBpcyAidGFr ZW4iIGlmIGl0Cjs7OyAgdGhlIGhpZGUtaWZkZWYtZXZhbHVhdG9yIHJldHVybnMgVC4gIFByZXN1 bWFibHksIHRoaXMgbWVhbnMgdGhlIGNvZGUKOzs7ICBpbnNpZGUgdGhlICNpZmRlZiB3b3VsZCBi ZSBpbmNsdWRlZCB3aGVuIHRoZSBwcm9ncmFtIHdhcwo7OzsgIGNvbXBpbGVkLgo7OzsKOzs7ICBD YXNlIDE6ICAjaWZYIHRha2VuLCBhbmQgdGhlcmUncyBhbiAjZWxzZS4KOzs7ICAgICBUaGUgI2Vs c2UgcGFydCBtdXN0IGJlIGhpZGRlbi4gIFRoZSAjaWYgKHRoZW4pIHBhcnQgbXVzdCBiZQo7Ozsg ICAgIHByb2Nlc3NlZCBmb3IgbmVzdGVkICNpZlgncy4KOzs7ICBDYXNlIDI6ICAjaWZYIHRha2Vu LCBhbmQgdGhlcmUncyBubyAjZWxzZS4KOzs7ICAgICBUaGUgI2lmIHBhcnQgbXVzdCBiZSBwcm9j ZXNzZWQgZm9yIG5lc3RlZCAjaWZYJ3MuCjs7OyAgQ2FzZSAzOiAgI2lmWCBub3QgdGFrZW4sIGFu ZCB0aGVyZSdzIGFuICNlbGlmCjs7OyAgICAgVGhlICNpZiBwYXJ0IG11c3QgYmUgaGlkZGVuLCBh bmQgdGhlbiBldmFsdWF0ZQo7OzsgICAgIHRoZSAjZWxpZiBjb25kaXRpb24gbGlrZSBhIG5ldyAj aWZYLgo7OzsgIENhc2UgNDogICNpZlggbm90IHRha2VuLCBhbmQgdGhlcmUncyBqdXN0IGFuICNl bHNlLgo7OzsgICAgIFRoZSAjaWYgcGFydCBtdXN0IGJlIGhpZGRlbi4gIFRoZSAjZWxzZSBwYXJ0 IG11c3QgYmUgcHJvY2Vzc2VkCjs7OyAgICAgZm9yIG5lc3RlZCAjaWZzLgo7OzsgIENhc2UgNTog ICNpZlggbm90IHRha2VuLCBhbmQgdGhlcmUncyBubyAjZWxzZS4KOzs7ICAgICBUaGUgI2lmWCBw YXJ0IG11c3QgYmUgaGlkZGVuLgo7OzsKOzs7ICBGdXJ0aGVyIHByb2Nlc3NpbmcgaXMgZG9uZSBi eSBuYXJyb3dpbmcgdG8gdGhlIHJlbGV2YW50IHJlZ2lvbgo7OzsgIGFuZCBqdXN0IHJlY3Vyc2l2 ZWx5IGNhbGxpbmcgaGlkZS1pZmRlZi1ndXRzLgo7OzsKOzs7ICBXaGVuIGhpZi1wb3NzaWJseS1o aWRlIHJldHVybnMsIHBvaW50IGlzIGF0IHRoZSBlbmQgb2YgdGhlCjs7OyAgcG9zc2libHktaGlk ZGVuIHJhbmdlLgoKKGRlZnVuIGhpZi1yZWN1cnNlLW9uIChzdGFydCBlbmQgJm9wdGlvbmFsIGRv bnQtZ28tZW9sKQogICJDYWxsIGBoaWRlLWlmZGVmLWd1dHMnIGFmdGVyIG5hcnJvd2luZyB0byBl bmQgb2YgU1RBUlQgbGluZSBhbmQgRU5EIGxpbmUuIgogIChzYXZlLWV4Y3Vyc2lvbgogICAgKHNh dmUtcmVzdHJpY3Rpb24KICAgICAgKGdvdG8tY2hhciBzdGFydCkKICAgICAgKHVubGVzcyBkb250 LWdvLWVvbAogICAgICAgIChlbmQtb2YtbGluZSkpCiAgICAgIChuYXJyb3ctdG8tcmVnaW9uIChw b2ludCkgZW5kKQogICAgICAoaGlkZS1pZmRlZi1ndXRzKSkpKQoKKGRlZnVuIGhpZi1wb3NzaWJs eS1oaWRlICgpCiAgIkNhbGxlZCBhdCAjaWZYIGV4cHJlc3Npb24sIHRoaXMgaGlkZXMgdGhvc2Ug cGFydHMgdGhhdCBzaG91bGQgYmUgaGlkZGVuLgpJdCB1c2VzIHRoZSBqdWRnbWVudCBvZiBgaGlk ZS1pZmRlZi1ldmFsdWF0b3InLiIKICA7OyAobWVzc2FnZSAiaGlmLXBvc3NpYmx5LWhpZGUiKSAo c2l0LWZvciAxKQogIChsZXQqICgoY2FzZS1mb2xkLXNlYXJjaCBuaWwpCiAgICAgICAgICh0ZXN0 IChoaWYtY2Fub25pY2FsaXplIGhpZi1pZngtcmVnZXhwKSkKICAgICAgICAgKHJhbmdlIChoaWYt ZmluZC1yYW5nZSkpCiAgICAgICAgIChlbGlmcyAoaGlmLXJhbmdlLWVsaWYgcmFuZ2UpKQogICAg ICAgICAoY29tcGxldGUgbmlsKSkKICAgIDs7IChtZXNzYWdlICJ0ZXN0ID0gJXMiIHRlc3QpIChz aXQtZm9yIDEpCgogICAgKGhpZi1oaWRlLWxpbmUgKGhpZi1yYW5nZS1lbmQgcmFuZ2UpKQogICAg KHdoaWxlIChub3QgY29tcGxldGUpCiAgICAgIChpZiAoaGlmLW5vdCAoZnVuY2FsbCBoaWRlLWlm ZGVmLWV2YWx1YXRvciB0ZXN0KSkKICAgICAgICAgIDs7IGlmWC9lbGlmIGlzIEZBTFNFCiAgICAg ICAgICAoaWYgZWxpZnMKICAgICAgICAgICAgICA7OyBDYXNlIDMgLSBIaWRlIHRoZSAjaWZYIGFu ZCBldmFsICNlbGlmCiAgICAgICAgICAgICAgKGxldCAoKG5ld3N0YXJ0IChjYXIgZWxpZnMpKSkK ICAgICAgICAgICAgICAgIChoaWYtaGlkZS1saW5lIChoaWYtcmFuZ2Utc3RhcnQgcmFuZ2UpKQog ICAgICAgICAgICAgICAgKGhpZGUtaWZkZWYtcmVnaW9uIChoaWYtcmFuZ2Utc3RhcnQgcmFuZ2Up CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEtIG5ld3N0YXJ0KSkKICAgICAg ICAgICAgICAgIChzZXRjYXIgcmFuZ2UgbmV3c3RhcnQpCiAgICAgICAgICAgICAgICAoZ290by1j aGFyIG5ld3N0YXJ0KQogICAgICAgICAgICAgICAgKHNldHEgZWxpZnMgKGNkciBlbGlmcykpCiAg ICAgICAgICAgICAgICAoc2V0cSB0ZXN0IChoaWYtY2Fub25pY2FsaXplIGhpZi1lbGlmLXJlZ2V4 cCkpKQoKICAgICAgICAgICAgOzsgQ2hlY2sgZm9yICNlbHNlCiAgICAgICAgICAgIChjb25kICgo aGlmLXJhbmdlLWVsc2UgcmFuZ2UpCiAgICAgICAgICAgICAgICAgICA7OyBDYXNlIDQgLSAjZWxz ZSBibG9jayB2aXNpYmxlCiAgICAgICAgICAgICAgICAgICAoaGlmLWhpZGUtbGluZSAoaGlmLXJh bmdlLWVsc2UgcmFuZ2UpKQogICAgICAgICAgICAgICAgICAgKGhpZGUtaWZkZWYtcmVnaW9uICho aWYtcmFuZ2Utc3RhcnQgcmFuZ2UpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgKDEtIChoaWYtcmFuZ2UtZWxzZSByYW5nZSkpKQogICAgICAgICAgICAgICAgICAgKGhpZi1y ZWN1cnNlLW9uIChoaWYtcmFuZ2UtZWxzZSByYW5nZSkKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAoaGlmLXJhbmdlLWVuZCByYW5nZSkpKQogICAgICAgICAgICAgICAgICAodAog ICAgICAgICAgICAgICAgICAgOzsgQ2FzZSA1IC0gTm8gI2Vsc2UgYmxvY2ssIGhpZGUgI2lmWAog ICAgICAgICAgICAgICAgICAgKGhpZGUtaWZkZWYtcmVnaW9uIChwb2ludCkKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAoMS0gKGhpZi1yYW5nZS1lbmQgcmFuZ2UpKSkpKQog ICAgICAgICAgICAoc2V0cSBjb21wbGV0ZSB0KSkKCiAgICAgICAgOzsgaWZYL2VsaWYgaXMgVFJV RQogICAgICAgIChjb25kIChlbGlmcwogICAgICAgICAgICAgICA7OyBMdWtlIGZpeDogZGlzdGlu Z3Vpc2ggZnJvbSAjZWxpZi4uI2VsaWYgdG8gI2VsaWYuLiNlbHNlIFsyMDEzLTA4LTMwIDE0OjEw OjQwICswODAwXQogICAgICAgICAgICAgICAobGV0ICgoZWxpZiAoY2FyIGVsaWZzKSkpCiAgICAg ICAgICAgICAgICAgICA7OyBoaWRlIGFsbCBlbGlmcwogICAgICAgICAgICAgICAgICAgKGhpZi1o aWRlLWxpbmUgZWxpZikKICAgICAgICAgICAgICAgICAgIChoaWRlLWlmZGVmLXJlZ2lvbiBlbGlm ICgxLSAoaGlmLXJhbmdlLWVuZCByYW5nZSkpKQogICAgICAgICAgICAgICAgICAgKGhpZi1yZWN1 cnNlLW9uIChoaWYtcmFuZ2Utc3RhcnQgcmFuZ2UpCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgZWxpZikpKQogICAgICAgICAgICAgICgoaGlmLXJhbmdlLWVsc2UgcmFuZ2UpCiAg ICAgICAgICAgICAgIDs7IENhc2UgMSAtIEhpZGUgI2VsaWYgYW5kICNlbHNlIGJsb2NrcywgcmVj dXJzZSAjaWZYCiAgICAgICAgICAgICAgIChoaWYtaGlkZS1saW5lIChoaWYtcmFuZ2UtZWxzZSBy YW5nZSkpCiAgICAgICAgICAgICAgIChoaWRlLWlmZGVmLXJlZ2lvbiAoaGlmLXJhbmdlLWVsc2Ug cmFuZ2UpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMS0gKGhpZi1yYW5nZS1l bmQgcmFuZ2UpKSkKICAgICAgICAgICAgICAgKGhpZi1yZWN1cnNlLW9uIChoaWYtcmFuZ2Utc3Rh cnQgcmFuZ2UpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaGlmLXJhbmdlLWVsc2Ug cmFuZ2UpKSkKCiAgICAgICAgICAgICAgKHQKICAgICAgICAgICAgICAgOzsgQ2FzZSAyIC0gTm8g I2Vsc2UsIGp1c3QgcmVjdXJzZSAjaWZYCiAgICAgICAgICAgICAgIChoaWYtcmVjdXJzZS1vbiAo aGlmLXJhbmdlLXN0YXJ0IHJhbmdlKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGhp Zi1yYW5nZS1lbmQgcmFuZ2UpKSkpCiAgICAgICAgKHNldHEgY29tcGxldGUgdCkpKQoKICAgIDs7 IGNvbXBsZXRlID0gdAogICAgKGhpZi1oaWRlLWxpbmUgKGhpZi1yYW5nZS1zdGFydCByYW5nZSkp IDsgQWx3YXlzIGhpZGUgc3RhcnQuCiAgICAoZ290by1jaGFyIChoaWYtcmFuZ2UtZW5kIHJhbmdl KSkKICAgIChlbmQtb2YtbGluZSkpKQoKCihkZWZ1biBoaWYtZXZhbHVhdGUtcmVnaW9uIChzdGFy dCBlbmQpCiAgKGxldCogKCh0b2tlbnMgKGlnbm9yZS1lcnJvcnMgOzsgcHJldmVudCBDIHN0YXRl bWVudCB0aGluZ3MgbGlrZSAnZG8geyAuLi4gfSB3aGlsZSAoMCknCiAgICAgICAgICAgICAgICAg ICAoaGlmLXRva2VuaXplIHN0YXJ0IGVuZCkpKQogICAgICAgICAoZXhwciAoYW5kIHRva2Vucwog ICAgICAgICAgICAgICAgICAgIChjb25kaXRpb24tY2FzZSBuaWwKICAgICAgICAgICAgICAgICAg ICAgICAgKGhpZi1wYXJzZS1pZi1leHAgdG9rZW5zKQogICAgICAgICAgICAgICAgICAgICAgKGVy cm9yCiAgICAgICAgICAgICAgICAgICAgICAgdG9rZW5zKSkpKQogICAgICAgICAocmVzdWx0IChm dW5jYWxsIGhpZGUtaWZkZWYtZXZhbHVhdG9yIGV4cHIpKSkKICAgIHJlc3VsdCkpCgooZGVmdW4g aGlmLWV2YWx1YXRlLW1hY3JvIChyc3RhcnQgcmVuZCkKICAiRXZhbHVhdGUgdGhlIG1hY3JvIGV4 cGFuc2lvbiByZXN1bHQgZm9yIGEgcmVnaW9uLiBJZiBubyByZWdpb24gYWN0aXZlLApmaW5kIHRo ZSBjdXJyZW50ICNpZmRlZnMgYW5kIGV2YWx1YXRlIHRoZSByZXN1bHQuIEN1cnJlbnRseSBpdCBz dXBwb3J0IG9ubHkKbWF0aCBjYWxjdWxhdGlvbiwgbm8gc3RyaW5nIG9yIGFyZ3VtZW50ZWQgbWFj cm9zIGNhbiBiZSBleHBhbmRlZC4iCiAgKGludGVyYWN0aXZlICJyIikKICAobGV0ICgoY2FzZS1m b2xkLXNlYXJjaCBuaWwpKQogICAgKHNhdmUtZXhjdXJzaW9uCiAgICAgICh1bmxlc3MgbWFyay1h Y3RpdmUKICAgICAgICAoc2V0cSByc3RhcnQgbmlsIHJlbmQgbmlsKQogICAgICAgIChiZWdpbm5p bmctb2YtbGluZSkKICAgICAgICAod2hlbiAoYW5kIChyZS1zZWFyY2gtZm9yd2FyZCBoaWYtbWFj cm8tZXhwci1wcmVmaXgtcmVnZXhwIG5pbCB0KQogICAgICAgICAgICAgICAgICAgKHN0cmluZz0g ImRlZmluZSIgKG1hdGNoLXN0cmluZyAyKSkpCiAgICAgICAgICAocmUtc2VhcmNoLWZvcndhcmQg aGlmLW1hY3JvbmFtZSBuaWwgdCkpKQogICAgICAobGV0KiAoKHN0YXJ0IChvciByc3RhcnQgKHBv aW50KSkpCiAgICAgICAgICAgICAoZW5kICAgKG9yIHJlbmQgKHByb2duIChoaWYtZW5kLW9mLWxp bmUpIChwb2ludCkpKSkKICAgICAgICAgICAgIChkZWZpbmVkIG5pbCkKICAgICAgICAgICAgIChz aW1wbGUgJ3QpCiAgICAgICAgICAgICAodG9rZW5zIChpZ25vcmUtZXJyb3JzIDs7IHByZXZlbnQg QyBzdGF0ZW1lbnQgdGhpbmdzIGxpa2UgJ2RvIHsgLi4uIH0gd2hpbGUgKDApJwogICAgICAgICAg ICAgICAgICAgICAgIChoaWYtdG9rZW5pemUgc3RhcnQgZW5kKSkpCiAgICAgICAgICAgICAoZXhw ciAob3IgKGFuZCAoPD0gKGxlbmd0aCB0b2tlbnMpIDEpIDs7IHNpbXBsZSB0b2tlbgogICAgICAg ICAgICAgICAgICAgICAgICAgICAgKHNldHEgZGVmaW5lZCAoYXNzb2MgKGNhciB0b2tlbnMpIGhp ZGUtaWZkZWYtZW52KSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzZXRxIHNpbXBsZSAo YXRvbSAoaGlmLWxvb2t1cCAoY2FyIHRva2VucykpKSkKICAgICAgICAgICAgICAgICAgICAgICAg ICAgIChoaWYtbG9va3VwIChjYXIgdG9rZW5zKSkpCiAgICAgICAgICAgICAgICAgICAgICAgKGFu ZCB0b2tlbnMKICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjb25kaXRpb24tY2FzZSBuaWwK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaGlmLXBhcnNlLWlmLWV4cCB0b2tlbnMp CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChlcnJvcgogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgbmlsKSkpKSkKICAgICAgICAgICAgIChyZXN1bHQgKGZ1bmNhbGwgaGlkZS1p ZmRlZi1ldmFsdWF0b3IgZXhwcikpCiAgICAgICAgICAgICAoZXhwcnN0cmluZyAocmVwbGFjZS1y ZWdleHAtaW4tc3RyaW5nCiAgICAgICAgICAgICAgICAgICAgICAgICAgIl5bIFx0XSpcXChbXiBc dF0rXFwpWyBcdF0qIiAiXFwxIiAgOzsgdHJpbSBvZmYgbGVhZGluZy90cmFpbGluZyB3aGl0ZXMK ICAgICAgICAgICAgICAgICAgICAgICAgICAocmVwbGFjZS1yZWdleHAtaW4tc3RyaW5nCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICJcXCgvLy4qXFwpIiAiIiA7OyB0cmltIG9mZiBlbmQtb2Yt bGluZSBjb21tZW50cwogICAgICAgICAgICAgICAgICAgICAgICAgICAoYnVmZmVyLXN1YnN0cmlu Zy1uby1wcm9wZXJ0aWVzIHN0YXJ0IGVuZCkpKSkpCiAgICAgICAgKGNvbmQKICAgICAgICAgKChh bmQgKDw9IChsZW5ndGggdG9rZW5zKSAxKSBzaW1wbGUpIDs7IHNpbXBsZSB0b2tlbgogICAgICAg ICAgKGlmIGRlZmluZWQKICAgICAgICAgICAgICAobWVzc2FnZSAiJVMgPD0gYCVzJyIgcmVzdWx0 IGV4cHJzdHJpbmcpCiAgICAgICAgICAgIChtZXNzYWdlICJgJXMnIGlzIG5vdCBkZWZpbmVkIiBl eHByc3RyaW5nKSkpCiAgICAgICAgICgoaW50ZWdlcnAgcmVzdWx0KQogICAgICAgICAgKGlmIChv ciAoPSAwIHJlc3VsdCkgKD0gMSByZXN1bHQpKQogICAgICAgICAgICAgIChtZXNzYWdlICIlUyA8 PSBgJXMnIiByZXN1bHQgZXhwcnN0cmluZykKICAgICAgICAgICAgKG1lc3NhZ2UgIiVTICgweCV4 KSA8PSBgJXMnIiByZXN1bHQgcmVzdWx0IGV4cHJzdHJpbmcpKSkKICAgICAgICAgKChudWxsIHJl c3VsdCkgKG1lc3NhZ2UgIiVTIDw9IGAlcyciICdmYWxzZSBleHByc3RyaW5nKSkKICAgICAgICAg KChlcSB0IHJlc3VsdCkgKG1lc3NhZ2UgIiVTIDw9IGAlcyciICd0cnVlIGV4cHJzdHJpbmcpKQog ICAgICAgICAodCAobWVzc2FnZSAiJVMgPD0gYCVzJyIgcmVzdWx0IGV4cHJzdHJpbmcpKSkKICAg ICAgICByZXN1bHQpKSkpCgooZGVmdW4gaGlmLXBhcnNlLW1hY3JvLWFyZ2xpc3QgKHN0cikKICAi UGFyc2UgYXJndW1lbnQgbGlzdCBmb3JtYXR0ZWQgYXMgJyggYXJnMSBbICwgYXJnbl0gWy4uLl0g KScsIGluY2x1ZGVpbmcgdGhlICcuLi4nClJldHVybiBhIGxpc3Qgb2YgdGhlIGFyZ3VtZW50cywg aWYgJy4uLicgZXhpc3RzIHRoZSBmaXJzdCBhcmcgd2lsbCBiZSBoaWYtZXRjLiIKICAobGV0ICgo dG9rZW5saXN0IChjZHIgKGhpZi10b2tlbml6ZSAoLSAocG9pbnQpIChsZW5ndGggc3RyKSkgKHBv aW50KSkpKSA7IHJlbW92ZSBoaWYtbHBhcmVuCiAgICAgICAgcmVzdWx0IHRva2VuKQogICAgKHdo aWxlIChub3QgKGVxIChzZXRxIHRva2VuIChjYXIgdG9rZW5saXN0KSkgJ2hpZi1ycGFyZW4pKQog ICAgICAoc2V0cSB0b2tlbmxpc3QgKGNkciB0b2tlbmxpc3QpKQogICAgICAoY29uZAogICAgICAg KChlcSB0b2tlbiAnaGlmLWV0YykKICAgICAgICAoc2V0cSByZXN1bHQgKGNvbnMgJ2hpZi1ldGMg cmVzdWx0KSkpCiAgICAgICAoKGVxIHRva2VuICdoaWYtY29tbWEpCiAgICAgICAgdCkKICAgICAg ICh0CiAgICAgICAgKHNldHEgcmVzdWx0IChhcHBlbmQgcmVzdWx0IChjb25zIHRva2VuIG5pbCkp KSkpKQogICAgcmVzdWx0KSkKCihkZWZ1biBoaWYtZmluZC1kZWZpbmUgKCZvcHRpb25hbCBtaW4g bWF4KQogIChpbnRlcmFjdGl2ZSkKICAoYW5kIG1pbiAoZ290by1jaGFyIG1pbikpCiAgKGFuZCAo cmUtc2VhcmNoLWZvcndhcmQgaGlmLWRlZmluZSBtYXggdCkKICAgICAgIChvcgogICAgICAgIChs ZXQqICgoZGVmaW5pbmcgKHN0cmluZz0gImRlZmluZSIgKG1hdGNoLXN0cmluZyAyKSkpCiAgICAg ICAgICAgICAgIChuYW1lIChhbmQgKHJlLXNlYXJjaC1mb3J3YXJkIGhpZi1tYWNyb25hbWUgbWF4 IHQpCiAgICAgICAgICAgICAgICAgICAgICAgICAgKG1hdGNoLXN0cmluZyAxKSkpCiAgICAgICAg ICAgICAgIChwYXJzZWQgbmlsKQogICAgICAgICAgICAgICAocGFybWxpc3QgKGFuZCAobWF0Y2gt c3RyaW5nIDMpIDs7IGZpcnN0IGFyZyBpZCBmb3VuZAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAoaGlmLXBhcnNlLW1hY3JvLWFyZ2xpc3QgKG1hdGNoLXN0cmluZyAyKSkpKSkKICAgICAg ICAgIChpZiBkZWZpbmluZwogICAgICAgICAgICAgIDs7IGlnbm9yZSBuYW1lIChzdGlsbCBuZWVk IHRvIHJldHVybiAndCksIG9yIGRlZmluZSB0aGUgbmFtZQogICAgICAgICAgICAgIChvciAoYW5k IGhpZGUtaWZkZWYtZXhjbHVkZS1kZWZpbmUtcmVnZXhwLXBhdHRlcm4KICAgICAgICAgICAgICAg ICAgICAgICAoc3RyaW5nLW1hdGNoIGhpZGUtaWZkZWYtZXhjbHVkZS1kZWZpbmUtcmVnZXhwLXBh dHRlcm4gbmFtZSkpCgogICAgICAgICAgICAgICAgICAobGV0KiAoKHN0YXJ0IChwb2ludCkpCiAg ICAgICAgICAgICAgICAgICAgICAgICAoZW5kICAgKHByb2duIChoaWYtZW5kLW9mLWxpbmUpIChw b2ludCkpKQogICAgICAgICAgICAgICAgICAgICAgICAgKHRva2VucyAoYW5kIG5hbWUKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY29uZGl0aW9uLWNhc2UgbmlsIDs7IHBy ZXZlbnQgQyBzdGF0ZW1lbnQgdGhpbmdzIGxpa2UgJ2RvIHsgLi4uIH0gd2hpbGUgKDApJwogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaGlmLXRva2VuaXplIHN0YXJ0 IGVuZCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChlcnJvciA7OyB3 ZSBjYW4ndCBqdXN0IHJldHVybiBuaWwgc2luY2UgdGhpcyB3aWxsIHN0b3Agc2VhcmNoaW5nIGZv ciB0aGUgcmVtYWluaW5nICNkZWZpbmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIChzZXRxIGhpZi1zaW1wbGUtdG9rZW4tb25seSB0KQogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIChidWZmZXItc3Vic3RyaW5nLW5vLXByb3BlcnRpZXMg c3RhcnQgZW5kKSkpKSkKICAgICAgICAgICAgICAgICAgICAgICAgIDs7IEZvciBzaW1wbGUgdG9r ZW4gd2Ugc2F2ZSBvbmx5IHRoZSBwYXJzZWQgcmVzdWx0OwogICAgICAgICAgICAgICAgICAgICAg ICAgOzsgb3Igd2Ugc2F2ZSB0aGUgdG9rZW5zLCBwYXJzZSBpdCBhZnRlciBwYXJhbWV0ZXIgcmVw bGFjZW1lbnQKICAgICAgICAgICAgICAgICAgICAgICAgIChleHByIChhbmQgdG9rZW5zCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChvciAoYW5kIGhpZi1zaW1wbGUtdG9rZW4t b25seQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoPSAobGVu Z3RoIHRva2VucykgMSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgKGhpZi1wYXJzZS1pZi1leHAgdG9rZW5zKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGAoaGlmLWRlZmluZS1tYWNybyAscGFybWxpc3QgLHRva2VucykpKSkKICAg ICAgICAgICAgICAgICAgICAgICAgIChTQSAoYW5kIG5hbWUKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIChhc3NvYyAoaW50ZXJuIG5hbWUpIGhpZGUtaWZkZWYtZW52KSkpKQogICAg ICAgICAgICAgICAgICAgIChhbmQgbmFtZQogICAgICAgICAgICAgICAgICAgICAgICAgKGlmIFNB CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHNldGNkciBTQSBleHByKSA7OyBMYXp5IGV2 YWx1YXRpb24sIGV2YWwgb25seSBpZiBoaWYtbG9va3VwIGZpbmQgaXQKICAgICAgICAgICAgICAg ICAgICAgICAgICAgOzsgZGVmaW5lIGl0IGFueXdheSwgZXZlbiBpZiBuaWwgaXQncyBzdGlsbCBp biBsaXN0IGFuZCB0aGVyZWZvcmUgY29uc2lkZXJyZWQgZGVmaW5lZAogICAgICAgICAgICAgICAg ICAgICAgICAgICAocHVzaCAoY29ucyAoaW50ZXJuIG5hbWUpIGV4cHIpIGhpZGUtaWZkZWYtZW52 KSkpKSkKICAgICAgICAgICAgKGFuZCBuYW1lCiAgICAgICAgICAgICAgICAgKGhpZi11bmRlZmlu ZS1zeW1ib2wgKGludGVybiBuYW1lKSkpKSkpCiAgICAgICB0KSkKCihkZWZ1biBoaWYtYWRkLW5l dy1kZWZpbmVzICgmb3B0aW9uYWwgbWluIG1heCkKICAiU2NhbiBhbmQgYWRkIGFsbCAjZGVmaW5l IG1hY3JvcyBiZXR3ZWVuIG1pbiAuLiBtYXgiCiAgKGludGVyYWN0aXZlKQogICh3aGlsZSAoaGlm LWZpbmQtZGVmaW5lIG1pbiBtYXgpCiAgICAoc2V0ZiBtaW4gKHBvaW50KSkpCiAgKGlmIG1heCAo Z290by1jaGFyIG1heCkKICAgIChnb3RvLWNoYXIgKHBvaW50LW1heCkpKSkKCjs7KGRlZnVuIG1h cmstcmVnaW9uIChtaW4gbWF4KQo7OyAgKHNldC1tYXJrIChvciBtYXggKHBvaW50LW1heCkpKQo7 OyAgKGdvdG8tY2hhciBtaW4pKQoKKGRlZnVuIGhpZGUtaWZkZWYtZ3V0cyAoKQogICJEb2VzIG1v c3Qgb2YgdGhlIHdvcmsgb2YgYGhpZGUtaWZkZWZzJy4KSXQgZG9lcyBub3QgZG8gdGhlIHdvcmsg dGhhdCdzIHBvaW50bGVzcyB0byByZWRvIG9uIGEgcmVjdXJzaXZlIGVudHJ5LiIKICA7OyAobWVz c2FnZSAiaGlkZS1pZmRlZi1ndXRzIikKICAoc2F2ZS1leGN1cnNpb24KICAgIChsZXQgKChjYXNl LWZvbGQtc2VhcmNoIG5pbCkKICAgICAgICAgIG1pbiBtYXgpCiAgICAgIChnb3RvLWNoYXIgKHBv aW50LW1pbikpCiAgICAgIChzZXRmIG1pbiAocG9pbnQpKQogICAgICAobG9vcCBkbwogICAgICAg ICAgICAoc2V0ZiBtYXggKGhpZi1maW5kLWFueS1pZlgpKQogICAgICAgICAgICAoc2F2ZS1leGN1 cnNpb24KICAgICAgICAgICAgICAoc2F2ZS1yZXN0cmljdGlvbgogICAgICAgICAgICAgICAgOzsg KG1hcmstcmVnaW9uIG1pbiBtYXgpIDs7IGZvciBkZWJ1Z2dpbmcKICAgICAgICAgICAgICAgICho aWYtYWRkLW5ldy1kZWZpbmVzIG1pbiBtYXgpKSkKICAgICAgICAgICAgKGlmIG1heAogICAgICAg ICAgICAgICAgKGhpZi1wb3NzaWJseS1oaWRlKSkKICAgICAgICAgICAgKHNldGYgbWluIChwb2lu dCkpCiAgICAgICAgICAgIHdoaWxlIG1heCkpKSkKCjs7PT09JSVTRiUlIGhpZGUtaWZkZWYtaGlk aW5nIChFbmQpICA9PT0KCjs7PT09JSVTRiUlIGV4cG9ydHMgKFN0YXJ0KSAgPT09CgooZGVmdW4g aGlkZS1pZmRlZi10b2dnbGUtcmVhZC1vbmx5ICgpCiAgIlRvZ2dsZSBgaGlkZS1pZmRlZi1yZWFk LW9ubHknLiIKICAoaW50ZXJhY3RpdmUpCiAgKHNldHEgaGlkZS1pZmRlZi1yZWFkLW9ubHkgKG5v dCBoaWRlLWlmZGVmLXJlYWQtb25seSkpCiAgKG1lc3NhZ2UgIkhpZGUtUmVhZC1Pbmx5ICVzIgog ICAgICAgICAgIChpZiBoaWRlLWlmZGVmLXJlYWQtb25seSAiT04iICJPRkYiKSkKICAoaWYgaGlk ZS1pZmRlZi1oaWRpbmcKICAgICAgKHNldHEgYnVmZmVyLXJlYWQtb25seSAob3IgaGlkZS1pZmRl Zi1yZWFkLW9ubHkgaGlmLW91dHNpZGUtcmVhZC1vbmx5KSkpCiAgKGZvcmNlLW1vZGUtbGluZS11 cGRhdGUpKQoKKGRlZnVuIGhpZGUtaWZkZWYtdG9nZ2xlLW91dHNpZGUtcmVhZC1vbmx5ICgpCiAg IlJlcGxhY2VtZW50IGZvciBgdG9nZ2xlLXJlYWQtb25seScgd2l0aGluIEhpZGUtSWZkZWYgbW9k ZS4iCiAgKGludGVyYWN0aXZlKQogIChzZXRxIGhpZi1vdXRzaWRlLXJlYWQtb25seSAobm90IGhp Zi1vdXRzaWRlLXJlYWQtb25seSkpCiAgKG1lc3NhZ2UgIlJlYWQgb25seSAlcyIKICAgICAgICAg ICAoaWYgaGlmLW91dHNpZGUtcmVhZC1vbmx5ICJPTiIgIk9GRiIpKQogIChzZXRxIGJ1ZmZlci1y ZWFkLW9ubHkKICAgICAgICAob3IgKGFuZCBoaWRlLWlmZGVmLWhpZGluZyBoaWRlLWlmZGVmLXJl YWQtb25seSkKICAgICAgICAgICAgaGlmLW91dHNpZGUtcmVhZC1vbmx5KSkKICAoZm9yY2UtbW9k ZS1saW5lLXVwZGF0ZSkpCgooZGVmdW4gaGlkZS1pZmRlZi10b2dnbGUtc2hhZG93aW5nICgpCiAg IlRvZ2dsZSBzaGFkb3dpbmcuIgogIChpbnRlcmFjdGl2ZSkKICAoc2V0IChtYWtlLWxvY2FsLXZh cmlhYmxlICdoaWRlLWlmZGVmLXNoYWRvdykgKG5vdCBoaWRlLWlmZGVmLXNoYWRvdykpCiAgKG1l c3NhZ2UgIlNoYWRvd2luZyAlcyIgKGlmIGhpZGUtaWZkZWYtc2hhZG93ICJPTiIgIk9GRiIpKQog IChzYXZlLXJlc3RyaWN0aW9uCiAgICAod2lkZW4pCiAgICAoZG9saXN0IChvdmVybGF5IChvdmVy bGF5cy1pbiAocG9pbnQtbWluKSAocG9pbnQtbWF4KSkpCiAgICAgICh3aGVuIChvdmVybGF5LWdl dCBvdmVybGF5ICdoaWRlLWlmZGVmKQogICAgICAgIChpZiBoaWRlLWlmZGVmLXNoYWRvdwogICAg ICAgICAgICAocHJvZ24KICAgICAgICAgICAgICAob3ZlcmxheS1wdXQgb3ZlcmxheSAnaW52aXNp YmxlIG5pbCkKICAgICAgICAgICAgICAob3ZlcmxheS1wdXQgb3ZlcmxheSAnZmFjZSAnaGlkZS1p ZmRlZi1zaGFkb3cpKQogICAgICAgICAgKG92ZXJsYXktcHV0IG92ZXJsYXkgJ2ZhY2UgbmlsKQog ICAgICAgICAgKG92ZXJsYXktcHV0IG92ZXJsYXkgJ2ludmlzaWJsZSAnaGlkZS1pZmRlZikpKSkp KQoKKGRlZnVuIGhpZGUtaWZkZWYtZGVmaW5lICh2YXIgdmFsKQogICJEZWZpbmUgYSBWQVIsIG9w dGlvbmFsbHkgdG8gYSBzcGVjaWZpYyB2YWx1ZSwgc28gdGhhdCAjaWZkZWYgVkFSCndvdWxkIGJl IGluY2x1ZGVkLiIKICAoaW50ZXJhY3RpdmUKICAgKGxldCogKChkZWZhdWx0IChzYXZlLWV4Y3Vy c2lvbgogICAgICAgICAgICAgICAgICAgICAoYmVnaW5uaW5nLW9mLWxpbmUpCiAgICAgICAgICAg ICAgICAgICAgIChjb25kICgobG9va2luZy1hdCBoaWYtaWZ4LWVsc2UtZW5kaWYtcmVnZXhwKQog ICAgICAgICAgICAgICAgICAgICAgICAgICAgKGZvcndhcmQtd29yZCAyKQogICAgICAgICAgICAg ICAgICAgICAgICAgICAgKGN1cnJlbnQtd29yZCAnc3RyaWN0KSkKICAgICAgICAgICAgICAgICAg ICAgICAgICAgKHQKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5pbCkpKSkKICAgICAgICAg KHZhciAocmVhZC1taW5pYnVmZmVyICJEZWZpbmUgd2hhdD8gIiBkZWZhdWx0KSkKICAgICAgICAg KHZhbCAocmVhZC1mcm9tLW1pbmlidWZmZXIgKGZvcm1hdCAiU2V0ICVzIHRvPyAoZGVmYXVsdCAx KTogIiB2YXIpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5pbCBuaWwgdCBu aWwgIjEiKSkpCiAgICAgKGxpc3QgdmFyIHZhbCkpKQogICAoaGlmLXNldC12YXIgdmFyIChvciB2 YWwgMSkpCiAgIChtZXNzYWdlICIlcyBzZXQgdG8gJXMiIHZhciAob3IgdmFsIDEpKQogICAoc2xl ZXAtZm9yIDEpCiAgIChpZiBoaWRlLWlmZGVmLWhpZGluZyAoaGlkZS1pZmRlZnMpKSkKCihkZWZ1 biBoaWYtdW5kZWZpbmUtc3ltYm9sICh2YXIpCiAgKHNldHEgaGlkZS1pZmRlZi1lbnYKICAgICAg ICAoZGVsZXRlIChhc3NvYyB2YXIgaGlkZS1pZmRlZi1lbnYpIGhpZGUtaWZkZWYtZW52KSkpCgo7 OyhkZWZ1biBoaWRlLWlmZGVmLXVuZGVmICh2YXIpCjs7ICAiVW5kZWZpbmUgYSBWQVIgc28gdGhh dCAjaWZkZWYgVkFSIHdvdWxkIG5vdCBiZSBpbmNsdWRlZC4iCjs7ICAoaW50ZXJhY3RpdmUgIlNV bmRlZmluZSB3aGF0PyAiKQo7OyAgOzsoaGlmLXNldC12YXIgdmFyIG5pbCk7O0x1a2UgZml4ZWQ6 IHNldCBpdCBuaWwgaXMgc3RpbGwgY29uc2lkZXJlZCBkZWZpbmVkIHNvICNpZmRlZiBWQVIgaXMg c3RpbGwgdHJ1ZS4KOzsgIChoaWYtdW5kZWZpbmUtc3ltYm9sIHZhcikKOzsgIChpZiBoaWRlLWlm ZGVmLWhpZGluZyAoaGlkZS1pZmRlZnMpKSkKCihkZWZ1biBoaWRlLWlmZGVmLXVuZGVmIChzdGFy dCBlbmQpCiAgIlVuZGVmaW5lIGEgVkFSIHNvIHRoYXQgI2lmZGVmIFZBUiB3b3VsZCBub3QgYmUg aW5jbHVkZWQuIgogIChpbnRlcmFjdGl2ZSAiciIpCiAgKGxldCogKChzeW1zdHIKICAgICAgICAg IChvciAoYW5kIG1hcmstYWN0aXZlCiAgICAgICAgICAgICAgICAgICAoYnVmZmVyLXN1YnN0cmlu Zy1uby1wcm9wZXJ0aWVzIHN0YXJ0IGVuZCkpCiAgICAgICAgICAgICAgKHJlYWQtc3RyaW5nICJV bmRlZmluZSB3aGF0PyAiIChjdXJyZW50LXdvcmQpKSkpCiAgICAgICAgIChzeW0gKGFuZCBzeW1z dHIKICAgICAgICAgICAgICAgICAgIChpbnRlcm4gc3ltc3RyKSkpKQogICAgKGlmICh6ZXJvcCAo aGlmLWRlZmluZWQgc3ltKSkKICAgICAgICAobWVzc2FnZSAiYCVzJyBub3QgZGVmaW5lZCwgbm8g bmVlZCB0byB1bmRlZmluZSBpdCIgc3ltc3RyKQogICAgICAoaGlmLXVuZGVmaW5lLXN5bWJvbCBz eW0pCiAgICAgIChpZiBoaWRlLWlmZGVmLWhpZGluZyAoaGlkZS1pZmRlZnMpKQogICAgICAobWVz c2FnZSAiYCVTJyB1bmRlZmluZWQiIHN5bSkpKSkKCihkZWZ1biBoaWRlLWlmZGVmcyAoJm9wdGlv bmFsIG5vbXNnKQogICJIaWRlIHRoZSBjb250ZW50cyBvZiBzb21lICNpZmRlZnMuCkFzc3VtZSB0 aGF0IGRlZmluZWQgc3ltYm9scyBoYXZlIGJlZW4gYWRkZWQgdG8gYGhpZGUtaWZkZWYtZW52Jy4K VGhlIHRleHQgaGlkZGVuIGlzIHRoZSB0ZXh0IHRoYXQgd291bGQgbm90IGJlIGluY2x1ZGVkIGJ5 IHRoZSBDCnByZXByb2Nlc3NvciBpZiBpdCB3ZXJlIGdpdmVuIHRoZSBmaWxlIHdpdGggdGhvc2Ug c3ltYm9scyBkZWZpbmVkLgpJZiB0aGlzIGNvbW1hbmQgaXMgcHJlZml4ZWQsIGhpZGUgYWxzbyB0 aGUgI2lmZGVmcyB0aGVtc2VsdmVzLgoKVHVybiBvZmYgaGlkaW5nIGJ5IGNhbGxpbmcgYHNob3ct aWZkZWZzJy4iCgogIChpbnRlcmFjdGl2ZSkKICAobGV0ICgoaGlkZS1pZmRlZi1saW5lcyBjdXJy ZW50LXByZWZpeC1hcmcpKQogICAgKG9yIG5vbXNnCiAgICAgICAgKG1lc3NhZ2UgIkhpZGluZy4u LiIpKQogICAgKHNldHEgaGlmLW91dHNpZGUtcmVhZC1vbmx5IGJ1ZmZlci1yZWFkLW9ubHkpCiAg ICAodW5sZXNzIGhpZGUtaWZkZWYtbW9kZSAoaGlkZS1pZmRlZi1tb2RlIDEpKSA7IHR1cm4gb24g aGlkZS1pZmRlZi1tb2RlCiAgICAoaWYgaGlkZS1pZmRlZi1oaWRpbmcKICAgICAgICAoc2hvdy1p ZmRlZnMpKSAgICAgICAgICAgICAgICAgICAgOyBPdGhlcndpc2UsIGRlZXAgY29uZnVzaW9uLgog ICAgKHNldHEgaGlkZS1pZmRlZi1oaWRpbmcgdCkKICAgIChoaWRlLWlmZGVmLWd1dHMpCiAgICAo c2V0cSBidWZmZXItcmVhZC1vbmx5IChvciBoaWRlLWlmZGVmLXJlYWQtb25seSBoaWYtb3V0c2lk ZS1yZWFkLW9ubHkpKQogICAgKG9yIG5vbXNnCiAgICAgICAgKG1lc3NhZ2UgIkhpZGluZyBkb25l IikpKSkKCgooZGVmdW4gc2hvdy1pZmRlZnMgKCkKICAiQ2FuY2VsIHRoZSBlZmZlY3RzIG9mIGBo aWRlLWlmZGVmJzogc2hvdyB0aGUgY29udGVudHMgb2YgYWxsICNpZmRlZnMuIgogIChpbnRlcmFj dGl2ZSkKICAoc2V0cSBidWZmZXItcmVhZC1vbmx5IGhpZi1vdXRzaWRlLXJlYWQtb25seSkKICAo aGlmLXNob3ctYWxsKQogIChzZXRxIGhpZGUtaWZkZWYtaGlkaW5nIG5pbCkpCgoKKGRlZnVuIGhp Zi1maW5kLWlmZGVmLWJsb2NrICgpCiAgIlV0aWxpdHkgZm9yIGhpZGUgYW5kIHNob3cgYGlmZGVm LWJsb2NrJy4KUmV0dXJuIGFzIChUT1AgLiBCT1RUT00pIHRoZSBleHRlbnQgb2YgaWZkZWYgYmxv Y2suIgogIChpZiAoYW5kIChmYm91bmRwICdjLWJhY2t3YXJkLWNvbmRpdGlvbmFsLXdpdGgtZWxz ZSkKICAgICAgICAgICAoZmJvdW5kcCAnYy1mb3J3YXJkLWNvbmRpdGlvbmFsLXdpdGgtZWxzZSkp CiAgICAgIDs7VXNlIG15IG1vZGlmaWVkIGZ1bmN0aW9ucyBpbiBjYy1tb2RlLgogICAgICAoc2F2 ZS1leGN1cnNpb24KICAgICAgICAoY29ucwogICAgICAgICAocHJvZ24KICAgICAgICAgICAoaWYg KD0gKGxpbmUtbnVtYmVyLWF0LXBvcykKICAgICAgICAgICAgICAgICAgKHNhdmUtZXhjdXJzaW9u CiAgICAgICAgICAgICAgICAgICAgKGJlZ2lubmluZy1vZi1saW5lKQogICAgICAgICAgICAgICAg ICAgIChyZS1zZWFyY2gtZm9yd2FyZCBoaWYtaWZ4LWVsc2UtZW5kaWYtcmVnZXhwKQogICAgICAg ICAgICAgICAgICAgIChsaW5lLW51bWJlci1hdC1wb3MpKSkKICAgICAgICAgICAgICAgKGJlZ2lu bmluZy1vZi1saW5lKQogICAgICAgICAgICAgKGMtYmFja3dhcmQtY29uZGl0aW9uYWwtd2l0aC1l bHNlIDEpKQogICAgICAgICAgIChwb2ludCkpCiAgICAgICAgIChwcm9nbiAoYy1mb3J3YXJkLWNv bmRpdGlvbmFsLXdpdGgtZWxzZSAxKSAoMS0gKHBvaW50KSkpKSkKICAgIDs7IG9yaWdpbmFsIGlt cGxlbWVudGF0aW9uIGluIGhpZGVpZi5lbAogICAgKGxldCAobWF4LWJvdHRvbSkKICAgICAgKGNv bnMgKHNhdmUtZXhjdXJzaW9uCiAgICAgICAgICAgICAgKGJlZ2lubmluZy1vZi1saW5lKQogICAg ICAgICAgICAgICh1bmxlc3MgKG9yIChoaWYtbG9va2luZy1hdC1lbHNlKSAoaGlmLWxvb2tpbmct YXQtaWZYKSkKICAgICAgICAgICAgICAgICh1cC1pZmRlZikpCiAgICAgICAgICAgICAgKHByb2cx IChwb2ludCkKICAgICAgICAgICAgICAgIChoaWYtaWZkZWYtdG8tZW5kaWYpCiAgICAgICAgICAg ICAgICAoc2V0cSBtYXgtYm90dG9tICgxLSAocG9pbnQpKSkpKQogICAgICAgICAgICAoc2F2ZS1l eGN1cnNpb24KICAgICAgICAgICAgICAoYmVnaW5uaW5nLW9mLWxpbmUpCiAgICAgICAgICAgICAg KHVubGVzcyAoaGlmLWxvb2tpbmctYXQtZW5kaWYpCiAgICAgICAgICAgICAgICAoaGlmLWZpbmQt bmV4dC1yZWxldmFudCkpCiAgICAgICAgICAgICAgKHdoaWxlIChoaWYtbG9va2luZy1hdC1pZlgp CiAgICAgICAgICAgICAgICAoaGlmLWlmZGVmLXRvLWVuZGlmKQogICAgICAgICAgICAgICAgKGhp Zi1maW5kLW5leHQtcmVsZXZhbnQpKQogICAgICAgICAgICAgIChtaW4gbWF4LWJvdHRvbSAoMS0g KHBvaW50KSkpKSkpKSkKCihkZWZ1biBoaWRlLWlmZGVmLWJsb2NrICgmb3B0aW9uYWwgc3RhcnQg ZW5kKQogICJIaWRlIHRoZSBpZmRlZiBibG9jayAodHJ1ZSBvciBmYWxzZSBwYXJ0KSBlbmNsb3Np bmcgb3IgYmVmb3JlIHRoZSBjdXJzb3IuCklmIHByZWZpeGVkLCBpdCB3aWxsIGFsc28gaGlkZSAj aWZkZWZzIHRoZW1zZWx2ZXMuIgogIChpbnRlcmFjdGl2ZSAiciIpCiAgKGxldCAoKGhpZGUtaWZk ZWYtbGluZXMgY3VycmVudC1wcmVmaXgtYXJnKSkKICAgIChpZiBtYXJrLWFjdGl2ZQogICAgICAg IChwcm9nbgogICAgICAgICAgKGhpZi1yZWN1cnNlLW9uIHN0YXJ0IGVuZCB0KQogICAgICAgICAg KHNldHEgbWFyay1hY3RpdmUgbmlsKSkKICAgICAgKHVubGVzcyBoaWRlLWlmZGVmLW1vZGUgKGhp ZGUtaWZkZWYtbW9kZSAxKSkKICAgICAgKGxldCAoKHRvcC1ib3R0b20gKGhpZi1maW5kLWlmZGVm LWJsb2NrKSkpCiAgICAgICAgKGhpZGUtaWZkZWYtcmVnaW9uIChjYXIgdG9wLWJvdHRvbSkgKGNk ciB0b3AtYm90dG9tKSkKICAgICAgICAod2hlbiBoaWRlLWlmZGVmLWxpbmVzCiAgICAgICAgICAo aGlmLWhpZGUtbGluZSAoY2FyIHRvcC1ib3R0b20pKQogICAgICAgICAgKGhpZi1oaWRlLWxpbmUg KDErIChjZHIgdG9wLWJvdHRvbSkpKSkKICAgICAgICAoc2V0cSBoaWRlLWlmZGVmLWhpZGluZyB0 KSkKICAgICAgKHNldHEgYnVmZmVyLXJlYWQtb25seSAob3IgaGlkZS1pZmRlZi1yZWFkLW9ubHkg aGlmLW91dHNpZGUtcmVhZC1vbmx5KSkpKSkKCihkZWZ1biBzaG93LWlmZGVmLWJsb2NrICgmb3B0 aW9uYWwgc3RhcnQgZW5kKQogICJTaG93IHRoZSBpZmRlZiBibG9jayAodHJ1ZSBvciBmYWxzZSBw YXJ0KSBlbmNsb3Npbmcgb3IgYmVmb3JlIHRoZSBjdXJzb3IuIgogIChpbnRlcmFjdGl2ZSAiciIp CiAgKGlmIG1hcmstYWN0aXZlCiAgICAgIChwcm9nbgogICAgICAgIChkb2xpc3QgKG8gKG92ZXJs YXlzLWluIHN0YXJ0IGVuZCkpCiAgICAgICAgICAoaWYgKG92ZXJsYXktZ2V0IG8gJ2hpZGUtaWZk ZWYpCiAgICAgICAgICAgICAgKGRlbGV0ZS1vdmVybGF5IG8pKSkKICAgICAgICAoc2V0cSBtYXJr LWFjdGl2ZSBuaWwpKQogICAgKGxldCAoKHRvcC1ib3R0b20gKGNvbmRpdGlvbi1jYXNlIG5pbAog ICAgICAgICAgICAgICAgICAgICAgICAgIChoaWYtZmluZC1pZmRlZi1ibG9jaykKICAgICAgICAg ICAgICAgICAgICAgICAgKGVycm9yCiAgICAgICAgICAgICAgICAgICAgICAgICBuaWwpKSkKICAg ICAgICAgIChvdnJzIChvdmVybGF5cy1pbiAobWF4IChwb2ludC1taW4pICgxLSAocG9pbnQpKSkK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobWluIChwb2ludC1tYXgpICgxKyAocG9pbnQp KSkpKQogICAgICAgICAgKGRlbCBuaWwpKQogICAgICAoaWYgdG9wLWJvdHRvbQogICAgICAgICAg KGlmIGhpZGUtaWZkZWYtbGluZXMKICAgICAgICAgICAgICAoaGlmLXNob3ctaWZkZWYtcmVnaW9u CiAgICAgICAgICAgICAgIChzYXZlLWV4Y3Vyc2lvbgogICAgICAgICAgICAgICAgIChnb3RvLWNo YXIgKGNhciB0b3AtYm90dG9tKSkgKGxpbmUtYmVnaW5uaW5nLXBvc2l0aW9uKSkKICAgICAgICAg ICAgICAgKHNhdmUtZXhjdXJzaW9uCiAgICAgICAgICAgICAgICAgKGdvdG8tY2hhciAoMSsgKGNk ciB0b3AtYm90dG9tKSkpCiAgICAgICAgICAgICAgICAgKGhpZi1lbmQtb2YtbGluZSkgKHBvaW50 KSkpCiAgICAgICAgICAgIChzZXRmIGRlbCAoaGlmLXNob3ctaWZkZWYtcmVnaW9uICgxLSAoY2Fy IHRvcC1ib3R0b20pKSAoY2RyIHRvcC1ib3R0b20pKSkpKQogICAgICAoaWYgKG5vdCAoYW5kIHRv cC1ib3R0b20KICAgICAgICAgICAgICAgICAgICBkZWwpKQogICAgICAgICAgKGRvbGlzdCAobyBv dnJzKQogICAgICAgICAgICA7Oyhkb2xpc3QgKG8gKG92ZXJsYXlzLWluICgxLSAocG9pbnQpKSAo MSsgKHBvaW50KSkpKQogICAgICAgICAgICA7OyAgIChpZiAob3ZlcmxheS1nZXQgbyAnaGlkZS1p ZmRlZikgKG1lc3NhZ2UgIiVTIiBvKSkpCiAgICAgICAgICAgIChpZiAob3ZlcmxheS1nZXQgbyAn aGlkZS1pZmRlZikKICAgICAgICAgICAgICAgIChkZWxldGUtb3ZlcmxheSBvKSkpKSkpKQoKOzs7 ICBkZWZpbml0aW9uIGFsaXN0IHN1cHBvcnQKCihkZWZ2YXIgaGlkZS1pZmRlZi1kZWZpbmUtYWxp c3QgbmlsCiAgIkEgZ2xvYmFsIGFzc29jIGxpc3Qgb2YgcHJlLWRlZmluZWQgc3ltYm9sIGxpc3Rz LiIpCgooZGVmdW4gaGlmLWNvbXByZXNzLWRlZmluZS1saXN0IChlbnYpCiAgIkNvbXByZXNzIHRo ZSBkZWZpbmUgbGlzdCBFTlYgaW50byBhIGxpc3Qgb2YgZGVmaW5lZCBzeW1ib2xzIG9ubHkuIgog IChsZXQgKChuZXctZGVmcyBuaWwpKQogICAgKGRvbGlzdCAoZGVmIGVudiBuZXctZGVmcykKICAg ICAgKGlmIChoaWYtbG9va3VwIChjYXIgZGVmKSkgKHB1c2ggKGNhciBlbnYpIG5ldy1kZWZzKSkp KSkKCihkZWZ1biBoaWRlLWlmZGVmLXNldC1kZWZpbmUtYWxpc3QgKG5hbWUpCiAgIlNldCB0aGUg YXNzb2NpYXRpb24gZm9yIE5BTUUgdG8gYGhpZGUtaWZkZWYtZW52Jy4iCiAgKGludGVyYWN0aXZl ICJTU2V0IGRlZmluZSBsaXN0OiAiKQogIChwdXNoIChjb25zIG5hbWUgKGhpZi1jb21wcmVzcy1k ZWZpbmUtbGlzdCBoaWRlLWlmZGVmLWVudikpCiAgICAgICAgaGlkZS1pZmRlZi1kZWZpbmUtYWxp c3QpKQoKKGRlZnVuIGhpZGUtaWZkZWYtdXNlLWRlZmluZS1hbGlzdCAobmFtZSkKICAiU2V0IGBo aWRlLWlmZGVmLWVudicgdG8gdGhlIGRlZmluZSBsaXN0IHNwZWNpZmllZCBieSBOQU1FLiIKICAo aW50ZXJhY3RpdmUKICAgKGxpc3QgKGNvbXBsZXRpbmctcmVhZCAiVXNlIGRlZmluZSBsaXN0OiAi CiAgICAgICAgICAgICAgICAgICAgICAgICAgKG1hcGNhciAobGFtYmRhICh4KSAoc3ltYm9sLW5h bWUgKGNhciB4KSkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoaWRlLWlmZGVm LWRlZmluZS1hbGlzdCkKICAgICAgICAgICAgICAgICAgICAgICAgICBuaWwgdCkpKQogIChpZiAo c3RyaW5ncCBuYW1lKSAoc2V0cSBuYW1lIChpbnRlcm4gbmFtZSkpKQogIChsZXQgKChkZWZpbmUt bGlzdCAoYXNzb2MgbmFtZSBoaWRlLWlmZGVmLWRlZmluZS1hbGlzdCkpKQogICAgKGlmIGRlZmlu ZS1saXN0CiAgICAgICAgKHNldHEgaGlkZS1pZmRlZi1lbnYKICAgICAgICAgICAgICAobWFwY2Fy IChsYW1iZGEgKGFyZykgKGNvbnMgYXJnIHQpKQogICAgICAgICAgICAgICAgICAgICAgKGNkciBk ZWZpbmUtbGlzdCkpKQogICAgICAoZXJyb3IgIk5vIGRlZmluZSBsaXN0IGZvciAlcyIgbmFtZSkp CiAgICAoaWYgaGlkZS1pZmRlZi1oaWRpbmcgKGhpZGUtaWZkZWZzKSkpKQoKKHByb3ZpZGUgJ2hp ZGVpZikKCjs7IExvY2FsIHZhcmlhYmxlczoKOzsgYnl0ZS1jb21waWxlLXdhcm5pbmdzOiAobm90 IGNsLWZ1bmN0aW9ucykKOzsgRW5kOgoKOzs7IGhpZGVpZi5lbCBlbmRzIGhlcmUK --047d7b15af69a1fb2c04e9798a0b--