From unknown Sun Jun 15 08:24:10 2025 X-Loop: help-debbugs@gnu.org Subject: bug#9715: Error while compiling coreutils-8.12 Resent-From: basavaraj b Original-Sender: debbugs-submit-bounces@debbugs.gnu.org Resent-CC: bug-coreutils@gnu.org Resent-Date: Mon, 10 Oct 2011 16:12:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: report 9715 X-GNU-PR-Package: coreutils X-GNU-PR-Keywords: To: 9715@debbugs.gnu.org X-Debbugs-Original-To: bug-coreutils@gnu.org Received: via spool by submit@debbugs.gnu.org id=B.131826306522629 (code B ref -1); Mon, 10 Oct 2011 16:12:02 +0000 Received: (at submit) by debbugs.gnu.org; 10 Oct 2011 16:11:05 +0000 Received: from localhost ([127.0.0.1] helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.69) (envelope-from ) id 1RDIRT-0005sv-RD for submit@debbugs.gnu.org; Mon, 10 Oct 2011 12:11:05 -0400 Received: from eggs.gnu.org ([140.186.70.92]) by debbugs.gnu.org with esmtp (Exim 4.69) (envelope-from ) id 1RDGO0-0002p9-V2 for submit@debbugs.gnu.org; Mon, 10 Oct 2011 09:59:22 -0400 Received: from lists.gnu.org ([140.186.70.17]:59966) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1RDGNk-0003sd-2w for submit@debbugs.gnu.org; Mon, 10 Oct 2011 09:59:04 -0400 Received: from eggs.gnu.org ([140.186.70.92]:41609) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1RDGNh-0008N9-IW for bug-coreutils@gnu.org; Mon, 10 Oct 2011 09:59:04 -0400 X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on eggs.gnu.org X-Spam-Level: X-Spam-Status: No, score=-2.6 required=5.0 tests=BAYES_00,FREEMAIL_FROM, HTML_MESSAGE,RCVD_IN_DNSWL_LOW,T_DKIM_INVALID,T_TO_NO_BRKTS_FREEMAIL autolearn=ham version=3.3.1 Received: from mail-ww0-f49.google.com ([74.125.82.49]:61471) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1RDGNe-0003s4-N2 for bug-coreutils@gnu.org; Mon, 10 Oct 2011 09:59:01 -0400 Received: by wwp14 with SMTP id 14so7605242wwp.30 for ; Mon, 10 Oct 2011 06:58:57 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=mime-version:in-reply-to:references:date:message-id:subject:from:to :content-type; bh=p+PW4eNUk/JQzpw8ay4FQCwI6TSn0C16Vy1ILn/1JbM=; b=Mgo9vETb8pEEt+1D5bXIK9c0O1npC5734Of3Xdz/Ei1mjx4E8P8kJ93oe014SljDdL tXJlNJpkXFMIhEOQIQzzIrSodefSccdy5TjRyqAEmtieWZyMlt8TugaKfoGcmtUrNl43 48E/La79AzdeSj+owciNSo/3qUztxjzq7FbvA= MIME-Version: 1.0 Received: by 10.216.156.204 with SMTP id m54mr2739579wek.27.1318255137418; Mon, 10 Oct 2011 06:58:57 -0700 (PDT) Received: by 10.216.161.77 with HTTP; Mon, 10 Oct 2011 06:58:56 -0700 (PDT) In-Reply-To: References: Date: Mon, 10 Oct 2011 19:28:56 +0530 Message-ID: From: basavaraj b Content-Type: multipart/mixed; boundary=0016e65b4b8a30741204aef23131 X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.6 (newer, 2) X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.6 (newer, 3) X-Mailman-Approved-At: Mon, 10 Oct 2011 12:11:01 -0400 X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.11 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: debbugs-submit-bounces@debbugs.gnu.org Errors-To: debbugs-submit-bounces@debbugs.gnu.org --0016e65b4b8a30741204aef23131 Content-Type: multipart/alternative; boundary=0016e65b4b8a30740904aef2312f --0016e65b4b8a30740904aef2312f Content-Type: text/plain; charset=ISO-8859-1 Hi, > > I am facing the below problem repeatedly while running the make of > coreutils-8.12: > make[2]: Entering directory `/home/basav/coreutils-8.12/man' > GEN chroot.1 > sed: can't read chroot.td/chroot.1: No such file or directory > > I am running the package on 'NONSTOP_KERNEL' platform. > Attached is the configure file I have used. > > Please resolve my problem. > > > Thanks, > Basavaraj B > --0016e65b4b8a30740904aef2312f Content-Type: text/html; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable =A0 =A0Hi,

I am facing the below problem repeatedly while running the= make of coreutils-8.12:
make[2]: Entering directory `/home/basav/coreutils-8.12/man'<= /div>
=A0 GEN =A0 =A0 =A0chroot.1
sed: can't read chroot.td/chroot.1: No such file or directory

I am running the package on 'NONSTOP_KERNEL' platform.
Attached is the configure file I have used.

Please resolve my problem.

Thanks,
Basavaraj B

--0016e65b4b8a30740904aef2312f-- --0016e65b4b8a30741204aef23131 Content-Type: application/octet-stream; name=configure Content-Disposition: attachment; filename=configure Content-Transfer-Encoding: base64 X-Attachment-Id: f_gtlh2y141 IyEgL2Jpbi9zaA0KIyBHdWVzcyB2YWx1ZXMgZm9yIHN5c3RlbS1kZXBlbmRlbnQgdmFyaWFibGVz IGFuZCBjcmVhdGUgTWFrZWZpbGVzLg0KIyBHZW5lcmF0ZWQgYnkgR05VIEF1dG9jb25mIDIuNjgu NzEtYWYzMDAgZm9yIEdOVSBjb3JldXRpbHMgOC4xMi4NCiMNCiMgUmVwb3J0IGJ1Z3MgdG8gPGJ1 Zy1jb3JldXRpbHNAZ251Lm9yZz4uDQojDQojDQojIENvcHlyaWdodCAoQykgMTk5Mi0xOTk2LCAx OTk4LTIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuDQojDQojDQojIFRoaXMgY29u ZmlndXJlIHNjcmlwdCBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0 aW9uDQojIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5k IG1vZGlmeSBpdC4NCiMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tICMjDQojIyBNNHNoIEluaXRpYWxp emF0aW9uLiAjIw0KIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMNCg0KIyBCZSBtb3JlIEJvdXJu ZSBjb21wYXRpYmxlDQpEVUFMQ0FTRT0xOyBleHBvcnQgRFVBTENBU0UgIyBmb3IgTUtTIHNoDQpp ZiB0ZXN0IC1uICIke1pTSF9WRVJTSU9OK3NldH0iICYmIChlbXVsYXRlIHNoKSA+L2Rldi9udWxs IDI+JjE7IHRoZW4gOg0KICBlbXVsYXRlIHNoDQogIE5VTExDTUQ9Og0KICAjIFByZS00LjIgdmVy c2lvbnMgb2YgWnNoIGRvIHdvcmQgc3BsaXR0aW5nIG9uICR7MSsiJEAifSwgd2hpY2gNCiAgIyBp cyBjb250cmFyeSB0byBvdXIgdXNhZ2UuICBEaXNhYmxlIHRoaXMgZmVhdHVyZS4NCiAgYWxpYXMg LWcgJyR7MSsiJEAifSc9JyIkQCInDQogIHNldG9wdCBOT19HTE9CX1NVQlNUDQplbHNlDQogIGNh c2UgYChzZXQgLW8pIDI+L2Rldi9udWxsYCBpbiAjKA0KICAqcG9zaXgqKSA6DQogICAgc2V0IC1v IHBvc2l4IDs7ICMoDQogICopIDoNCiAgICAgOzsNCmVzYWMNCmZpDQoNCg0KYXNfbmw9Jw0KJw0K ZXhwb3J0IGFzX25sDQojIFByaW50aW5nIGEgbG9uZyBzdHJpbmcgY3Jhc2hlcyBTb2xhcmlzIDcg L3Vzci9iaW4vcHJpbnRmLg0KYXNfZWNobz0nXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxc XFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxc XFxcXFxcXFxcXFxcXFxcXCcNCmFzX2VjaG89JGFzX2VjaG8kYXNfZWNobyRhc19lY2hvJGFzX2Vj aG8kYXNfZWNobw0KYXNfZWNobz0kYXNfZWNobyRhc19lY2hvJGFzX2VjaG8kYXNfZWNobyRhc19l Y2hvJGFzX2VjaG8NCiMgUHJlZmVyIGEga3NoIHNoZWxsIGJ1aWx0aW4gb3ZlciBhbiBleHRlcm5h bCBwcmludGYgcHJvZ3JhbSBvbiBTb2xhcmlzLA0KIyBidXQgd2l0aG91dCB3YXN0aW5nIGZvcmtz IGZvciBiYXNoIG9yIHpzaC4NCmlmIHRlc3QgLXogIiRCQVNIX1ZFUlNJT04kWlNIX1ZFUlNJT04i IFwNCiAgICAmJiAodGVzdCAiWGBwcmludCAtciAtLSAkYXNfZWNob2AiID0gIlgkYXNfZWNobyIp IDI+L2Rldi9udWxsOyB0aGVuDQogIGFzX2VjaG89J3ByaW50IC1yIC0tJw0KICBhc19lY2hvX249 J3ByaW50IC1ybiAtLScNCmVsaWYgKHRlc3QgIlhgcHJpbnRmICVzICRhc19lY2hvYCIgPSAiWCRh c19lY2hvIikgMj4vZGV2L251bGw7IHRoZW4NCiAgYXNfZWNobz0ncHJpbnRmICVzXG4nDQogIGFz X2VjaG9fbj0ncHJpbnRmICVzJw0KZWxzZQ0KICBpZiB0ZXN0ICJYYCgvdXNyL3VjYi9lY2hvIC1u IC1uICRhc19lY2hvKSAyPi9kZXYvbnVsbGAiID0gIlgtbiAkYXNfZWNobyI7IHRoZW4NCiAgICBh c19lY2hvX2JvZHk9J2V2YWwgL3Vzci91Y2IvZWNobyAtbiAiJDEkYXNfbmwiJw0KICAgIGFzX2Vj aG9fbj0nL3Vzci91Y2IvZWNobyAtbicNCiAgZWxzZQ0KICAgIGFzX2VjaG9fYm9keT0nZXZhbCBl eHByICJYJDEiIDogIlhcXCguKlxcKSInDQogICAgYXNfZWNob19uX2JvZHk9J2V2YWwNCiAgICAg IGFyZz0kMTsNCiAgICAgIGNhc2UgJGFyZyBpbiAjKA0KICAgICAgKiIkYXNfbmwiKikNCglleHBy ICJYJGFyZyIgOiAiWFxcKC4qXFwpJGFzX25sIjsNCglhcmc9YGV4cHIgIlgkYXJnIiA6ICIuKiRh c19ubFxcKC4qXFwpImA7Ow0KICAgICAgZXNhYzsNCiAgICAgIGV4cHIgIlgkYXJnIiA6ICJYXFwo LipcXCkiIHwgdHIgLWQgIiRhc19ubCINCiAgICAnDQogICAgZXhwb3J0IGFzX2VjaG9fbl9ib2R5 DQogICAgYXNfZWNob19uPSdzaCAtYyAkYXNfZWNob19uX2JvZHkgYXNfZWNobycNCiAgZmkNCiAg ZXhwb3J0IGFzX2VjaG9fYm9keQ0KICBhc19lY2hvPSdzaCAtYyAkYXNfZWNob19ib2R5IGFzX2Vj aG8nDQpmaQ0KDQojIFRoZSB1c2VyIGlzIGFsd2F5cyByaWdodC4NCmlmIHRlc3QgIiR7UEFUSF9T RVBBUkFUT1Irc2V0fSIgIT0gc2V0OyB0aGVuDQogIFBBVEhfU0VQQVJBVE9SPToNCiAgKFBBVEg9 Jy9iaW47L2Jpbic7IEZQQVRIPSRQQVRIOyBzaCAtYyA6KSA+L2Rldi9udWxsIDI+JjEgJiYgew0K ICAgIChQQVRIPScvYmluOi9iaW4nOyBGUEFUSD0kUEFUSDsgc2ggLWMgOikgPi9kZXYvbnVsbCAy PiYxIHx8DQogICAgICBQQVRIX1NFUEFSQVRPUj0nOycNCiAgfQ0KZmkNCg0KDQojIElGUw0KIyBX ZSBuZWVkIHNwYWNlLCB0YWIgYW5kIG5ldyBsaW5lLCBpbiBwcmVjaXNlbHkgdGhhdCBvcmRlci4g IFF1b3RpbmcgaXMNCiMgdGhlcmUgdG8gcHJldmVudCBlZGl0b3JzIGZyb20gY29tcGxhaW5pbmcg YWJvdXQgc3BhY2UtdGFiLg0KIyAoSWYgX0FTX1BBVEhfV0FMSyB3ZXJlIGNhbGxlZCB3aXRoIElG UyB1bnNldCwgaXQgd291bGQgZGlzYWJsZSB3b3JkDQojIHNwbGl0dGluZyBieSBzZXR0aW5nIElG UyB0byBlbXB0eSB2YWx1ZS4pDQpJRlM9IiAiIgkkYXNfbmwiDQoNCiMgRmluZCB3aG8gd2UgYXJl LiAgTG9vayBpbiB0aGUgcGF0aCBpZiB3ZSBjb250YWluIG5vIGRpcmVjdG9yeSBzZXBhcmF0b3Iu DQphc19teXNlbGY9DQpjYXNlICQwIGluICMoKA0KICAqW1xcL10qICkgYXNfbXlzZWxmPSQwIDs7 DQogICopIGFzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1INCmZvciBhc19kaXIg aW4gJFBBVEgNCmRvDQogIElGUz0kYXNfc2F2ZV9JRlMNCiAgdGVzdCAteiAiJGFzX2RpciIgJiYg YXNfZGlyPS4NCiAgICB0ZXN0IC1yICIkYXNfZGlyLyQwIiAmJiBhc19teXNlbGY9JGFzX2Rpci8k MCAmJiBicmVhaw0KICBkb25lDQpJRlM9JGFzX3NhdmVfSUZTDQoNCiAgICAgOzsNCmVzYWMNCiMg V2UgZGlkIG5vdCBmaW5kIG91cnNlbHZlcywgbW9zdCBwcm9iYWJseSB3ZSB3ZXJlIHJ1biBhcyBg c2ggQ09NTUFORCcNCiMgaW4gd2hpY2ggY2FzZSB3ZSBhcmUgbm90IHRvIGJlIGZvdW5kIGluIHRo ZSBwYXRoLg0KaWYgdGVzdCAieCRhc19teXNlbGYiID0geDsgdGhlbg0KICBhc19teXNlbGY9JDAN CmZpDQppZiB0ZXN0ICEgLWYgIiRhc19teXNlbGYiOyB0aGVuDQogICRhc19lY2hvICIkYXNfbXlz ZWxmOiBlcnJvcjogY2Fubm90IGZpbmQgbXlzZWxmOyByZXJ1biB3aXRoIGFuIGFic29sdXRlIGZp bGUgbmFtZSIgPiYyDQogIGV4aXQgMQ0KZmkNCg0KIyBVbnNldCB2YXJpYWJsZXMgdGhhdCB3ZSBk byBub3QgbmVlZCBhbmQgd2hpY2ggY2F1c2UgYnVncyAoZS5nLiBpbg0KIyBwcmUtMy4wIFVXSU4g a3NoKS4gIEJ1dCBkbyBub3QgY2F1c2UgYnVncyBpbiBiYXNoIDIuMDE7IHRoZSAifHwgZXhpdCAx Ig0KIyBzdXBwcmVzc2VzIGFueSAiU2VnbWVudGF0aW9uIGZhdWx0IiBtZXNzYWdlIHRoZXJlLiAg JygoJyBjb3VsZA0KIyB0cmlnZ2VyIGEgYnVnIGluIHBka3NoIDUuMi4xNC4NCmZvciBhc192YXIg aW4gQkFTSF9FTlYgRU5WIE1BSUwgTUFJTFBBVEgNCmRvIGV2YWwgdGVzdCB4XCR7JGFzX3Zhcitz ZXR9ID0geHNldCBcDQogICYmICggKHVuc2V0ICRhc192YXIpIHx8IGV4aXQgMSkgPi9kZXYvbnVs bCAyPiYxICYmIHVuc2V0ICRhc192YXIgfHwgOg0KZG9uZQ0KUFMxPSckICcNClBTMj0nPiAnDQpQ UzQ9JysgJw0KDQojIE5MUyBudWlzYW5jZXMuDQpMQ19BTEw9Qw0KZXhwb3J0IExDX0FMTA0KTEFO R1VBR0U9Qw0KZXhwb3J0IExBTkdVQUdFDQoNCiMgQ0RQQVRILg0KKHVuc2V0IENEUEFUSCkgPi9k ZXYvbnVsbCAyPiYxICYmIHVuc2V0IENEUEFUSA0KDQppZiB0ZXN0ICJ4JENPTkZJR19TSEVMTCIg PSB4OyB0aGVuDQogIGFzX2JvdXJuZV9jb21wYXRpYmxlPSJpZiB0ZXN0IC1uIFwiXCR7WlNIX1ZF UlNJT04rc2V0fVwiICYmIChlbXVsYXRlIHNoKSA+L2Rldi9udWxsIDI+JjE7IHRoZW4gOg0KICBl bXVsYXRlIHNoDQogIE5VTExDTUQ9Og0KICAjIFByZS00LjIgdmVyc2lvbnMgb2YgWnNoIGRvIHdv cmQgc3BsaXR0aW5nIG9uIFwkezErXCJcJEBcIn0sIHdoaWNoDQogICMgaXMgY29udHJhcnkgdG8g b3VyIHVzYWdlLiAgRGlzYWJsZSB0aGlzIGZlYXR1cmUuDQogIGFsaWFzIC1nICdcJHsxK1wiXCRA XCJ9Jz0nXCJcJEBcIicNCiAgc2V0b3B0IE5PX0dMT0JfU1VCU1QNCmVsc2UNCiAgY2FzZSBcYChz ZXQgLW8pIDI+L2Rldi9udWxsXGAgaW4gIygNCiAgKnBvc2l4KikgOg0KICAgIHNldCAtbyBwb3Np eCA7OyAjKA0KICAqKSA6DQogICAgIDs7DQplc2FjDQpmaQ0KIg0KICBhc19yZXF1aXJlZD0iYXNf Zm5fcmV0dXJuICgpIHsgKGV4aXQgXCQxKTsgfQ0KYXNfZm5fc3VjY2VzcyAoKSB7IGFzX2ZuX3Jl dHVybiAwOyB9DQphc19mbl9mYWlsdXJlICgpIHsgYXNfZm5fcmV0dXJuIDE7IH0NCmFzX2ZuX3Jl dF9zdWNjZXNzICgpIHsgcmV0dXJuIDA7IH0NCmFzX2ZuX3JldF9mYWlsdXJlICgpIHsgcmV0dXJu IDE7IH0NCg0KZXhpdGNvZGU9MA0KYXNfZm5fc3VjY2VzcyB8fCB7IGV4aXRjb2RlPTE7IGVjaG8g YXNfZm5fc3VjY2VzcyBmYWlsZWQuOyB9DQphc19mbl9mYWlsdXJlICYmIHsgZXhpdGNvZGU9MTsg ZWNobyBhc19mbl9mYWlsdXJlIHN1Y2NlZWRlZC47IH0NCmFzX2ZuX3JldF9zdWNjZXNzIHx8IHsg ZXhpdGNvZGU9MTsgZWNobyBhc19mbl9yZXRfc3VjY2VzcyBmYWlsZWQuOyB9DQphc19mbl9yZXRf ZmFpbHVyZSAmJiB7IGV4aXRjb2RlPTE7IGVjaG8gYXNfZm5fcmV0X2ZhaWx1cmUgc3VjY2VlZGVk LjsgfQ0KaWYgKCBzZXQgeDsgYXNfZm5fcmV0X3N1Y2Nlc3MgeSAmJiB0ZXN0IHggPSBcIlwkMVwi ICk7IHRoZW4gOg0KDQplbHNlDQogIGV4aXRjb2RlPTE7IGVjaG8gcG9zaXRpb25hbCBwYXJhbWV0 ZXJzIHdlcmUgbm90IHNhdmVkLg0KZmkNCnRlc3QgeFwkZXhpdGNvZGUgPSB4MCB8fCBleGl0IDEi DQogIGFzX3N1Z2dlc3RlZD0iICBhc19saW5lbm9fMT0iO2FzX3N1Z2dlc3RlZD0kYXNfc3VnZ2Vz dGVkJExJTkVOTzthc19zdWdnZXN0ZWQ9JGFzX3N1Z2dlc3RlZCIgYXNfbGluZW5vXzFhPVwkTElO RU5PDQogIGFzX2xpbmVub18yPSI7YXNfc3VnZ2VzdGVkPSRhc19zdWdnZXN0ZWQkTElORU5PO2Fz X3N1Z2dlc3RlZD0kYXNfc3VnZ2VzdGVkIiBhc19saW5lbm9fMmE9XCRMSU5FTk8NCiAgZXZhbCAn dGVzdCBcInhcJGFzX2xpbmVub18xJ1wkYXNfcnVuJ1wiICE9IFwieFwkYXNfbGluZW5vXzInXCRh c19ydW4nXCIgJiYNCiAgdGVzdCBcInhcYGV4cHIgXCRhc19saW5lbm9fMSdcJGFzX3J1bicgKyAx XGBcIiA9IFwieFwkYXNfbGluZW5vXzInXCRhc19ydW4nXCInIHx8IGV4aXQgMQ0KdGVzdCBcJCgo IDEgKyAxICkpID0gMiB8fCBleGl0IDEiDQogIGlmIChldmFsICIkYXNfcmVxdWlyZWQiKSAyPi9k ZXYvbnVsbDsgdGhlbiA6DQogIGFzX2hhdmVfcmVxdWlyZWQ9eWVzDQplbHNlDQogIGFzX2hhdmVf cmVxdWlyZWQ9bm8NCmZpDQogIGlmIHRlc3QgeCRhc19oYXZlX3JlcXVpcmVkID0geHllcyAmJiAo ZXZhbCAiJGFzX3N1Z2dlc3RlZCIpIDI+L2Rldi9udWxsOyB0aGVuIDoNCg0KZWxzZQ0KICBhc19z YXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SDQphc19mb3VuZD1mYWxzZQ0KZm9yIGFz X2RpciBpbiAvYmluJFBBVEhfU0VQQVJBVE9SL3Vzci9iaW4kUEFUSF9TRVBBUkFUT1IkUEFUSA0K ZG8NCiAgSUZTPSRhc19zYXZlX0lGUw0KICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9Lg0K ICBhc19mb3VuZD06DQogIGNhc2UgJGFzX2RpciBpbiAjKA0KCSAvKikNCgkgICBmb3IgYXNfYmFz ZSBpbiBzaCBiYXNoIGtzaCBzaDU7IGRvDQoJICAgICAjIFRyeSBvbmx5IHNoZWxscyB0aGF0IGV4 aXN0LCB0byBzYXZlIHNldmVyYWwgZm9ya3MuDQoJICAgICBhc19zaGVsbD0kYXNfZGlyLyRhc19i YXNlDQoJICAgICBpZiB7IHRlc3QgLWYgIiRhc19zaGVsbCIgfHwgdGVzdCAtZiAiJGFzX3NoZWxs LmV4ZSI7IH0gJiYNCgkJICAgIHsgJGFzX2VjaG8gIiRhc19ib3VybmVfY29tcGF0aWJsZSIiJGFz X3JlcXVpcmVkIiB8IGFzX3J1bj1hICIkYXNfc2hlbGwiOyB9IDI+L2Rldi9udWxsOyB0aGVuIDoN CiAgQ09ORklHX1NIRUxMPSRhc19zaGVsbCBhc19oYXZlX3JlcXVpcmVkPXllcw0KCQkgICBpZiB7 ICRhc19lY2hvICIkYXNfYm91cm5lX2NvbXBhdGlibGUiIiRhc19zdWdnZXN0ZWQiIHwgYXNfcnVu PWEgIiRhc19zaGVsbCI7IH0gMj4vZGV2L251bGw7IHRoZW4gOg0KICBicmVhayAyDQpmaQ0KZmkN CgkgICBkb25lOzsNCiAgICAgICBlc2FjDQogIGFzX2ZvdW5kPWZhbHNlDQpkb25lDQokYXNfZm91 bmQgfHwgeyBpZiB7IHRlc3QgLWYgIiRTSEVMTCIgfHwgdGVzdCAtZiAiJFNIRUxMLmV4ZSI7IH0g JiYNCgkgICAgICB7ICRhc19lY2hvICIkYXNfYm91cm5lX2NvbXBhdGlibGUiIiRhc19yZXF1aXJl ZCIgfCBhc19ydW49YSAiJFNIRUxMIjsgfSAyPi9kZXYvbnVsbDsgdGhlbiA6DQogIENPTkZJR19T SEVMTD0kU0hFTEwgYXNfaGF2ZV9yZXF1aXJlZD15ZXMNCmZpOyB9DQpJRlM9JGFzX3NhdmVfSUZT DQoNCg0KICAgICAgaWYgdGVzdCAieCRDT05GSUdfU0hFTEwiICE9IHg7IHRoZW4gOg0KICAjIFdl IGNhbm5vdCB5ZXQgYXNzdW1lIGEgZGVjZW50IHNoZWxsLCBzbyB3ZSBoYXZlIHRvIHByb3ZpZGUg YQ0KCSMgbmV1dHJhbGl6YXRpb24gdmFsdWUgZm9yIHNoZWxscyB3aXRob3V0IHVuc2V0OyBhbmQg dGhpcyBhbHNvDQoJIyB3b3JrcyBhcm91bmQgc2hlbGxzIHRoYXQgY2Fubm90IHVuc2V0IG5vbmV4 aXN0ZW50IHZhcmlhYmxlcy4NCgkjIFByZXNlcnZlIC12IGFuZCAteCB0byB0aGUgcmVwbGFjZW1l bnQgc2hlbGwuDQoJQkFTSF9FTlY9L2Rldi9udWxsDQoJRU5WPS9kZXYvbnVsbA0KCSh1bnNldCBC QVNIX0VOVikgPi9kZXYvbnVsbCAyPiYxICYmIHVuc2V0IEJBU0hfRU5WIEVOVg0KCWV4cG9ydCBD T05GSUdfU0hFTEwNCgljYXNlICQtIGluICMgKCgoKA0KCSAgKnYqeCogfCAqeCp2KiApIGFzX29w dHM9LXZ4IDs7DQoJICAqdiogKSBhc19vcHRzPS12IDs7DQoJICAqeCogKSBhc19vcHRzPS14IDs7 DQoJICAqICkgYXNfb3B0cz0gOzsNCgllc2FjDQoJZXhlYyAiJENPTkZJR19TSEVMTCIgJGFzX29w dHMgIiRhc19teXNlbGYiICR7MSsiJEAifQ0KZmkNCg0KICAgIGlmIHRlc3QgeCRhc19oYXZlX3Jl cXVpcmVkID0geG5vOyB0aGVuIDoNCiAgJGFzX2VjaG8gIiQwOiBUaGlzIHNjcmlwdCByZXF1aXJl cyBhIHNoZWxsIG1vcmUgbW9kZXJuIHRoYW4gYWxsIg0KICAkYXNfZWNobyAiJDA6IHRoZSBzaGVs bHMgdGhhdCBJIGZvdW5kIG9uIHlvdXIgc3lzdGVtLiINCiAgaWYgdGVzdCB4JHtaU0hfVkVSU0lP TitzZXR9ID0geHNldCA7IHRoZW4NCiAgICAkYXNfZWNobyAiJDA6IEluIHBhcnRpY3VsYXIsIHpz aCAkWlNIX1ZFUlNJT04gaGFzIGJ1Z3MgYW5kIHNob3VsZCINCiAgICAkYXNfZWNobyAiJDA6IGJl IHVwZ3JhZGVkIHRvIHpzaCA0LjMuNCBvciBsYXRlci4iDQogIGVsc2UNCiAgICAkYXNfZWNobyAi JDA6IFBsZWFzZSB0ZWxsIGJ1Zy1hdXRvY29uZkBnbnUub3JnIGFuZA0KJDA6IGJ1Zy1jb3JldXRp bHNAZ251Lm9yZyBhYm91dCB5b3VyIHN5c3RlbSwgaW5jbHVkaW5nIGFueQ0KJDA6IGVycm9yIHBv c3NpYmx5IG91dHB1dCBiZWZvcmUgdGhpcyBtZXNzYWdlLiBUaGVuIGluc3RhbGwNCiQwOiBhIG1v ZGVybiBzaGVsbCwgb3IgbWFudWFsbHkgcnVuIHRoZSBzY3JpcHQgdW5kZXIgc3VjaCBhDQokMDog c2hlbGwgaWYgeW91IGRvIGhhdmUgb25lLiINCiAgZmkNCiAgZXhpdCAxDQpmaQ0KZmkNCmZpDQpT SEVMTD0ke0NPTkZJR19TSEVMTC0vYmluL3NofQ0KZXhwb3J0IFNIRUxMDQojIFVuc2V0IG1vcmUg dmFyaWFibGVzIGtub3duIHRvIGludGVyZmVyZSB3aXRoIGJlaGF2aW9yIG9mIGNvbW1vbiB0b29s cy4NCkNMSUNPTE9SX0ZPUkNFPSBHUkVQX09QVElPTlM9DQp1bnNldCBDTElDT0xPUl9GT1JDRSBH UkVQX09QVElPTlMNCg0KIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjDQojIyBNNHNoIFNoZWxs IEZ1bmN0aW9ucy4gIyMNCiMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIw0KIyBhc19mbl91bnNl dCBWQVINCiMgLS0tLS0tLS0tLS0tLS0tDQojIFBvcnRhYmx5IHVuc2V0IFZBUi4NCmFzX2ZuX3Vu c2V0ICgpDQp7DQogIHsgZXZhbCAkMT07IHVuc2V0ICQxO30NCn0NCmFzX3Vuc2V0PWFzX2ZuX3Vu c2V0DQoNCiMgYXNfZm5fc2V0X3N0YXR1cyBTVEFUVVMNCiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0NCiMgU2V0ICQ/IHRvIFNUQVRVUywgd2l0aG91dCBmb3JraW5nLg0KYXNfZm5fc2V0X3N0YXR1 cyAoKQ0Kew0KICByZXR1cm4gJDENCn0gIyBhc19mbl9zZXRfc3RhdHVzDQoNCiMgYXNfZm5fZXhp dCBTVEFUVVMNCiMgLS0tLS0tLS0tLS0tLS0tLS0NCiMgRXhpdCB0aGUgc2hlbGwgd2l0aCBTVEFU VVMsIGV2ZW4gaW4gYSAidHJhcCAwIiBvciAic2V0IC1lIiBjb250ZXh0Lg0KYXNfZm5fZXhpdCAo KQ0Kew0KICBzZXQgK2UNCiAgYXNfZm5fc2V0X3N0YXR1cyAkMQ0KICBleGl0ICQxDQp9ICMgYXNf Zm5fZXhpdA0KDQojIGFzX2ZuX21rZGlyX3ANCiMgLS0tLS0tLS0tLS0tLQ0KIyBDcmVhdGUgIiRh c19kaXIiIGFzIGEgZGlyZWN0b3J5LCBpbmNsdWRpbmcgcGFyZW50cyBpZiBuZWNlc3NhcnkuDQph c19mbl9ta2Rpcl9wICgpDQp7DQoNCiAgY2FzZSAkYXNfZGlyIGluICMoDQogIC0qKSBhc19kaXI9 Li8kYXNfZGlyOzsNCiAgZXNhYw0KICB0ZXN0IC1kICIkYXNfZGlyIiB8fCBldmFsICRhc19ta2Rp cl9wIHx8IHsNCiAgICBhc19kaXJzPQ0KICAgIHdoaWxlIDo7IGRvDQogICAgICBjYXNlICRhc19k aXIgaW4gIygNCiAgICAgICpcJyopIGFzX3FkaXI9YCRhc19lY2hvICIkYXNfZGlyIiB8IHNlZCAi cy8nLydcXFxcXFxcXCcnL2ciYDs7ICMnKA0KICAgICAgKikgYXNfcWRpcj0kYXNfZGlyOzsNCiAg ICAgIGVzYWMNCiAgICAgIGFzX2RpcnM9IickYXNfcWRpcicgJGFzX2RpcnMiDQogICAgICBhc19k aXI9YCRhc19kaXJuYW1lIC0tICIkYXNfZGlyIiB8fA0KJGFzX2V4cHIgWCIkYXNfZGlyIiA6ICdY XCguKlteL11cKS8vKlteL11bXi9dKi8qJCcgXHwgXA0KCSBYIiRhc19kaXIiIDogJ1hcKC8vXClb Xi9dJyBcfCBcDQoJIFgiJGFzX2RpciIgOiAnWFwoLy9cKSQnIFx8IFwNCgkgWCIkYXNfZGlyIiA6 ICdYXCgvXCknIFx8IC4gMj4vZGV2L251bGwgfHwNCiRhc19lY2hvIFgiJGFzX2RpciIgfA0KICAg IHNlZCAnL15YXCguKlteL11cKVwvXC8qW14vXVteL10qXC8qJC97DQoJICAgIHMvL1wxLw0KCSAg ICBxDQoJICB9DQoJICAvXlhcKFwvXC9cKVteL10uKi97DQoJICAgIHMvL1wxLw0KCSAgICBxDQoJ ICB9DQoJICAvXlhcKFwvXC9cKSQvew0KCSAgICBzLy9cMS8NCgkgICAgcQ0KCSAgfQ0KCSAgL15Y XChcL1wpLiovew0KCSAgICBzLy9cMS8NCgkgICAgcQ0KCSAgfQ0KCSAgcy8uKi8uLzsgcSdgDQog ICAgICB0ZXN0IC1kICIkYXNfZGlyIiAmJiBicmVhaw0KICAgIGRvbmUNCiAgICB0ZXN0IC16ICIk YXNfZGlycyIgfHwgZXZhbCAibWtkaXIgJGFzX2RpcnMiDQogIH0gfHwgdGVzdCAtZCAiJGFzX2Rp ciIgfHwgYXNfZm5fZXJyb3IgJD8gImNhbm5vdCBjcmVhdGUgZGlyZWN0b3J5ICRhc19kaXIiDQoN Cg0KfSAjIGFzX2ZuX21rZGlyX3ANCiMgYXNfZm5fYXBwZW5kIFZBUiBWQUxVRQ0KIyAtLS0tLS0t LS0tLS0tLS0tLS0tLS0tDQojIEFwcGVuZCB0aGUgdGV4dCBpbiBWQUxVRSB0byB0aGUgZW5kIG9m IHRoZSBkZWZpbml0aW9uIGNvbnRhaW5lZCBpbiBWQVIuIFRha2UNCiMgYWR2YW50YWdlIG9mIGFu eSBzaGVsbCBvcHRpbWl6YXRpb25zIHRoYXQgYWxsb3cgYW1vcnRpemVkIGxpbmVhciBncm93dGgg b3Zlcg0KIyByZXBlYXRlZCBhcHBlbmRzLCBpbnN0ZWFkIG9mIHRoZSB0eXBpY2FsIHF1YWRyYXRp YyBncm93dGggcHJlc2VudCBpbiBuYWl2ZQ0KIyBpbXBsZW1lbnRhdGlvbnMuDQppZiAoZXZhbCAi YXNfdmFyPTE7IGFzX3Zhcis9MjsgdGVzdCB4XCRhc192YXIgPSB4MTIiKSAyPi9kZXYvbnVsbDsg dGhlbiA6DQogIGV2YWwgJ2FzX2ZuX2FwcGVuZCAoKQ0KICB7DQogICAgZXZhbCAkMSs9XCQyDQog IH0nDQplbHNlDQogIGFzX2ZuX2FwcGVuZCAoKQ0KICB7DQogICAgZXZhbCAkMT1cJCQxXCQyDQog IH0NCmZpICMgYXNfZm5fYXBwZW5kDQoNCiMgYXNfZm5fYXJpdGggQVJHLi4uDQojIC0tLS0tLS0t LS0tLS0tLS0tLQ0KIyBQZXJmb3JtIGFyaXRobWV0aWMgZXZhbHVhdGlvbiBvbiB0aGUgQVJHcywg YW5kIHN0b3JlIHRoZSByZXN1bHQgaW4gdGhlDQojIGdsb2JhbCAkYXNfdmFsLiBUYWtlIGFkdmFu dGFnZSBvZiBzaGVsbHMgdGhhdCBjYW4gYXZvaWQgZm9ya3MuIFRoZSBhcmd1bWVudHMNCiMgbXVz dCBiZSBwb3J0YWJsZSBhY3Jvc3MgJCgoKSkgYW5kIGV4cHIuDQppZiAoZXZhbCAidGVzdCBcJCgo IDEgKyAxICkpID0gMiIpIDI+L2Rldi9udWxsOyB0aGVuIDoNCiAgZXZhbCAnYXNfZm5fYXJpdGgg KCkNCiAgew0KICAgIGFzX3ZhbD0kKCggJCogKSkNCiAgfScNCmVsc2UNCiAgYXNfZm5fYXJpdGgg KCkNCiAgew0KICAgIGFzX3ZhbD1gZXhwciAiJEAiIHx8IHRlc3QgJD8gLWVxIDFgDQogIH0NCmZp ICMgYXNfZm5fYXJpdGgNCg0KDQojIGFzX2ZuX2Vycm9yIFNUQVRVUyBFUlJPUiBbTElORU5PIExP R19GRF0NCiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KIyBPdXRw dXQgImBiYXNlbmFtZSAkMGA6IGVycm9yOiBFUlJPUiIgdG8gc3RkZXJyLiBJZiBMSU5FTk8gYW5k IExPR19GRCBhcmUNCiMgcHJvdmlkZWQsIGFsc28gb3V0cHV0IHRoZSBlcnJvciB0byBMT0dfRkQs IHJlZmVyZW5jaW5nIExJTkVOTy4gVGhlbiBleGl0IHRoZQ0KIyBzY3JpcHQgd2l0aCBTVEFUVVMs IHVzaW5nIDEgaWYgdGhhdCB3YXMgMC4NCmFzX2ZuX2Vycm9yICgpDQp7DQogIGFzX3N0YXR1cz0k MTsgdGVzdCAkYXNfc3RhdHVzIC1lcSAwICYmIGFzX3N0YXR1cz0xDQogIGlmIHRlc3QgIiQ0Ijsg dGhlbg0KICAgIGFzX2xpbmVubz0ke2FzX2xpbmVuby0iJDMifSBhc19saW5lbm9fc3RhY2s9YXNf bGluZW5vX3N0YWNrPSRhc19saW5lbm9fc3RhY2sNCiAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNf bGluZW5vLSRMSU5FTk99OiBlcnJvcjogJDIiID4mJDQNCiAgZmkNCiAgJGFzX2VjaG8gIiRhc19t ZTogZXJyb3I6ICQyIiA+JjINCiAgYXNfZm5fZXhpdCAkYXNfc3RhdHVzDQp9ICMgYXNfZm5fZXJy b3INCg0KaWYgZXhwciBhIDogJ1woYVwpJyA+L2Rldi9udWxsIDI+JjEgJiYNCiAgIHRlc3QgIlhg ZXhwciAwMDAwMSA6ICcuKlwoLi4uXCknYCIgPSBYMDAxOyB0aGVuDQogIGFzX2V4cHI9ZXhwcg0K ZWxzZQ0KICBhc19leHByPWZhbHNlDQpmaQ0KDQppZiAoYmFzZW5hbWUgLS0gLykgPi9kZXYvbnVs bCAyPiYxICYmIHRlc3QgIlhgYmFzZW5hbWUgLS0gLyAyPiYxYCIgPSAiWC8iOyB0aGVuDQogIGFz X2Jhc2VuYW1lPWJhc2VuYW1lDQplbHNlDQogIGFzX2Jhc2VuYW1lPWZhbHNlDQpmaQ0KDQppZiAo YXNfZGlyPWBkaXJuYW1lIC0tIC9gICYmIHRlc3QgIlgkYXNfZGlyIiA9IFgvKSA+L2Rldi9udWxs IDI+JjE7IHRoZW4NCiAgYXNfZGlybmFtZT1kaXJuYW1lDQplbHNlDQogIGFzX2Rpcm5hbWU9ZmFs c2UNCmZpDQoNCmFzX21lPWAkYXNfYmFzZW5hbWUgLS0gIiQwIiB8fA0KJGFzX2V4cHIgWC8iJDAi IDogJy4qL1woW14vXVteL10qXCkvKiQnIFx8IFwNCgkgWCIkMCIgOiAnWFwoLy9cKSQnIFx8IFwN CgkgWCIkMCIgOiAnWFwoL1wpJyBcfCAuIDI+L2Rldi9udWxsIHx8DQokYXNfZWNobyBYLyIkMCIg fA0KICAgIHNlZCAnL14uKlwvXChbXi9dW14vXSpcKVwvKiQvew0KCSAgICBzLy9cMS8NCgkgICAg cQ0KCSAgfQ0KCSAgL15YXC9cKFwvXC9cKSQvew0KCSAgICBzLy9cMS8NCgkgICAgcQ0KCSAgfQ0K CSAgL15YXC9cKFwvXCkuKi97DQoJICAgIHMvL1wxLw0KCSAgICBxDQoJICB9DQoJICBzLy4qLy4v OyBxJ2ANCg0KIyBBdm9pZCBkZXBlbmRpbmcgdXBvbiBDaGFyYWN0ZXIgUmFuZ2VzLg0KYXNfY3Jf bGV0dGVycz0nYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXonDQphc19jcl9MRVRURVJTPSdBQkNE RUZHSElKS0xNTk9QUVJTVFVWV1hZWicNCmFzX2NyX0xldHRlcnM9JGFzX2NyX2xldHRlcnMkYXNf Y3JfTEVUVEVSUw0KYXNfY3JfZGlnaXRzPScwMTIzNDU2Nzg5Jw0KYXNfY3JfYWxudW09JGFzX2Ny X0xldHRlcnMkYXNfY3JfZGlnaXRzDQoNCg0KICBhc19saW5lbm9fMT0kTElORU5PIGFzX2xpbmVu b18xYT0kTElORU5PDQogIGFzX2xpbmVub18yPSRMSU5FTk8gYXNfbGluZW5vXzJhPSRMSU5FTk8N CiAgZXZhbCAndGVzdCAieCRhc19saW5lbm9fMSckYXNfcnVuJyIgIT0gIngkYXNfbGluZW5vXzIn JGFzX3J1biciICYmDQogIHRlc3QgInhgZXhwciAkYXNfbGluZW5vXzEnJGFzX3J1bicgKyAxYCIg PSAieCRhc19saW5lbm9fMickYXNfcnVuJyInIHx8IHsNCiAgIyBCbGFtZSBMZWUgRS4gTWNNYWhv biAoMTkzMS0xOTg5KSBmb3Igc2VkJ3Mgc3ludGF4LiAgOi0pDQogIHNlZCAtbiAnDQogICAgcA0K ICAgIC9bJF1MSU5FTk8vPQ0KICAnIDwkYXNfbXlzZWxmIHwNCiAgICBzZWQgJw0KICAgICAgcy9b JF1MSU5FTk8uKi8mLS8NCiAgICAgIHQgbGluZW5vDQogICAgICBiDQogICAgICA6bGluZW5vDQog ICAgICBODQogICAgICA6bG9vcA0KICAgICAgcy9bJF1MSU5FTk9cKFteJyRhc19jcl9hbG51bSdf XS4qXG5cKVwoLipcKS9cMlwxXDIvDQogICAgICB0IGxvb3ANCiAgICAgIHMvLVxuLiovLw0KICAg ICcgPiRhc19tZS5saW5lbm8gJiYNCiAgY2htb2QgK3ggIiRhc19tZS5saW5lbm8iIHx8DQogICAg eyAkYXNfZWNobyAiJGFzX21lOiBlcnJvcjogY2Fubm90IGNyZWF0ZSAkYXNfbWUubGluZW5vOyBy ZXJ1biB3aXRoIGEgUE9TSVggc2hlbGwiID4mMjsgYXNfZm5fZXhpdCAxOyB9DQoNCiAgIyBEb24n dCB0cnkgdG8gZXhlYyBhcyBpdCBjaGFuZ2VzICRbMF0sIGNhdXNpbmcgYWxsIHNvcnQgb2YgcHJv YmxlbXMNCiAgIyAodGhlIGRpcm5hbWUgb2YgJFswXSBpcyBub3QgdGhlIHBsYWNlIHdoZXJlIHdl IG1pZ2h0IGZpbmQgdGhlDQogICMgb3JpZ2luYWwgYW5kIHNvIG9uLiAgQXV0b2NvbmYgaXMgZXNw ZWNpYWxseSBzZW5zaXRpdmUgdG8gdGhpcykuDQogIC4gIi4vJGFzX21lLmxpbmVubyINCiAgIyBF eGl0IHN0YXR1cyBpcyB0aGF0IG9mIHRoZSBsYXN0IGNvbW1hbmQuDQogIGV4aXQNCn0NCg0KRUNI T19DPSBFQ0hPX049IEVDSE9fVD0NCmNhc2UgYGVjaG8gLW4geGAgaW4gIygoKCgoDQotbiopDQog IGNhc2UgYGVjaG8gJ3h5XGMnYCBpbg0KICAqYyopIEVDSE9fVD0nCSc7OwkjIEVDSE9fVCBpcyBz aW5nbGUgdGFiIGNoYXJhY3Rlci4NCiAgeHkpICBFQ0hPX0M9J1xjJzs7DQogICopICAgZWNobyBg ZWNobyBrc2g4OCBidWcgb24gQUlYIDYuMWAgPiAvZGV2L251bGwNCiAgICAgICBFQ0hPX1Q9Jwkn OzsNCiAgZXNhYzs7DQoqKQ0KICBFQ0hPX049Jy1uJzs7DQplc2FjDQoNCnJtIC1mIGNvbmYkJCBj b25mJCQuZXhlIGNvbmYkJC5maWxlDQppZiB0ZXN0IC1kIGNvbmYkJC5kaXI7IHRoZW4NCiAgcm0g LWYgY29uZiQkLmRpci9jb25mJCQuZmlsZQ0KZWxzZQ0KICBybSAtZiBjb25mJCQuZGlyDQogIG1r ZGlyIGNvbmYkJC5kaXIgMj4vZGV2L251bGwNCmZpDQppZiAoZWNobyA+Y29uZiQkLmZpbGUpIDI+ L2Rldi9udWxsOyB0aGVuDQogIGlmIGxuIC1zIGNvbmYkJC5maWxlIGNvbmYkJCAyPi9kZXYvbnVs bDsgdGhlbg0KICAgIGFzX2xuX3M9J2xuIC1zJw0KICAgICMgLi4uIGJ1dCB0aGVyZSBhcmUgdHdv IGdvdGNoYXM6DQogICAgIyAxKSBPbiBNU1lTLCBib3RoIGBsbiAtcyBmaWxlIGRpcicgYW5kIGBs biBmaWxlIGRpcicgZmFpbC4NCiAgICAjIDIpIERKR1BQIDwgMi4wNCBoYXMgbm8gc3ltbGlua3M7 IGBsbiAtcycgY3JlYXRlcyBhIHdyYXBwZXIgZXhlY3V0YWJsZS4NCiAgICAjIEluIGJvdGggY2Fz ZXMsIHdlIGhhdmUgdG8gZGVmYXVsdCB0byBgY3AgLXAnLg0KICAgIGxuIC1zIGNvbmYkJC5maWxl IGNvbmYkJC5kaXIgMj4vZGV2L251bGwgJiYgdGVzdCAhIC1mIGNvbmYkJC5leGUgfHwNCiAgICAg IGFzX2xuX3M9J2NwIC1wJw0KICBlbGlmIGxuIGNvbmYkJC5maWxlIGNvbmYkJCAyPi9kZXYvbnVs bDsgdGhlbg0KICAgIGFzX2xuX3M9bG4NCiAgZWxzZQ0KICAgIGFzX2xuX3M9J2NwIC1wJw0KICBm aQ0KZWxzZQ0KICBhc19sbl9zPSdjcCAtcCcNCmZpDQpybSAtZiBjb25mJCQgY29uZiQkLmV4ZSBj b25mJCQuZGlyL2NvbmYkJC5maWxlIGNvbmYkJC5maWxlDQpybWRpciBjb25mJCQuZGlyIDI+L2Rl di9udWxsDQoNCmlmIG1rZGlyIC1wIC4gMj4vZGV2L251bGw7IHRoZW4NCiAgYXNfbWtkaXJfcD0n bWtkaXIgLXAgIiRhc19kaXIiJw0KZWxzZQ0KICB0ZXN0IC1kIC4vLXAgJiYgcm1kaXIgLi8tcA0K ICBhc19ta2Rpcl9wPWZhbHNlDQpmaQ0KDQppZiB0ZXN0IC14IC8gPi9kZXYvbnVsbCAyPiYxOyB0 aGVuDQogIGFzX3Rlc3RfeD0ndGVzdCAteCcNCmVsc2UNCiAgaWYgbHMgLWRMIC8gPi9kZXYvbnVs bCAyPiYxOyB0aGVuDQogICAgYXNfbHNfTF9vcHRpb249TA0KICBlbHNlDQogICAgYXNfbHNfTF9v cHRpb249DQogIGZpDQogIGFzX3Rlc3RfeD0nDQogICAgZXZhbCBzaCAtYyAnXCcnDQogICAgICBp ZiB0ZXN0IC1kICIkMSI7IHRoZW4NCgl0ZXN0IC1kICIkMS8uIjsNCiAgICAgIGVsc2UNCgljYXNl ICQxIGluICMoDQoJLSopc2V0ICIuLyQxIjs7DQoJZXNhYzsNCgljYXNlIGBscyAtbGQnJGFzX2xz X0xfb3B0aW9uJyAiJDEiIDI+L2Rldi9udWxsYCBpbiAjKCgNCgk/Pz9bc3hdKik6OzsqKWZhbHNl Oztlc2FjO2ZpDQogICAgJ1wnJyBzaA0KICAnDQpmaQ0KYXNfZXhlY3V0YWJsZV9wPSRhc190ZXN0 X3gNCg0KIyBTZWQgZXhwcmVzc2lvbiB0byBtYXAgYSBzdHJpbmcgb250byBhIHZhbGlkIENQUCBu YW1lLg0KYXNfdHJfY3BwPSJldmFsIHNlZCAneSUqJGFzX2NyX2xldHRlcnMlUCRhc19jcl9MRVRU RVJTJTtzJVteXyRhc19jcl9hbG51bV0lXyVnJyINCg0KIyBTZWQgZXhwcmVzc2lvbiB0byBtYXAg YSBzdHJpbmcgb250byBhIHZhbGlkIHZhcmlhYmxlIG5hbWUuDQphc190cl9zaD0iZXZhbCBzZWQg J3klKislcHAlO3MlW15fJGFzX2NyX2FsbnVtXSVfJWcnIg0KDQoNCnRlc3QgLW4gIiRESkRJUiIg fHwgZXhlYyA3PCYwIDwvZGV2L251bGwNCmV4ZWMgNj4mMQ0KDQojIE5hbWUgb2YgdGhlIGhvc3Qu DQojIGhvc3RuYW1lIG9uIHNvbWUgc3lzdGVtcyAoU1ZSMy4yLCBvbGQgR05VL0xpbnV4KSByZXR1 cm5zIGEgYm9ndXMgZXhpdCBzdGF0dXMsDQojIHNvIHVuYW1lIGdldHMgcnVuIHRvby4NCmFjX2hv c3RuYW1lPWAoaG9zdG5hbWUgfHwgdW5hbWUgLW4pIDI+L2Rldi9udWxsIHwgc2VkIDFxYA0KDQoj DQojIEluaXRpYWxpemF0aW9ucy4NCiMNCmFjX2RlZmF1bHRfcHJlZml4PS91c3IvbG9jYWwNCmFj X2NsZWFuX2ZpbGVzPQ0KYWNfY29uZmlnX2xpYm9ial9kaXI9Lg0KTElCT0JKUz0NCmNyb3NzX2Nv bXBpbGluZz1ubw0Kc3ViZGlycz0NCk1GTEFHUz0NCk1BS0VGTEFHUz0NCg0KIyBJZGVudGl0eSBv ZiB0aGlzIHBhY2thZ2UuDQpQQUNLQUdFX05BTUU9J0dOVSBjb3JldXRpbHMnDQpQQUNLQUdFX1RB Uk5BTUU9J2NvcmV1dGlscycNClBBQ0tBR0VfVkVSU0lPTj0nOC4xMicNClBBQ0tBR0VfU1RSSU5H PSdHTlUgY29yZXV0aWxzIDguMTInDQpQQUNLQUdFX0JVR1JFUE9SVD0nYnVnLWNvcmV1dGlsc0Bn bnUub3JnJw0KUEFDS0FHRV9VUkw9J2h0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS9jb3JldXRp bHMvJw0KDQphY191bmlxdWVfZmlsZT0ic3JjL2xzLmMiDQojIEZhY3RvcmluZyBkZWZhdWx0IGhl YWRlcnMgZm9yIG1vc3QgdGVzdHMuDQphY19pbmNsdWRlc19kZWZhdWx0PSJcDQojaW5jbHVkZSA8 c3RkaW8uaD4NCiNpZmRlZiBIQVZFX1NZU19UWVBFU19IDQojIGluY2x1ZGUgPHN5cy90eXBlcy5o Pg0KI2VuZGlmDQojaWZkZWYgSEFWRV9TWVNfU1RBVF9IDQojIGluY2x1ZGUgPHN5cy9zdGF0Lmg+ DQojZW5kaWYNCiNpZmRlZiBTVERDX0hFQURFUlMNCiMgaW5jbHVkZSA8c3RkbGliLmg+DQojIGlu Y2x1ZGUgPHN0ZGRlZi5oPg0KI2Vsc2UNCiMgaWZkZWYgSEFWRV9TVERMSUJfSA0KIyAgaW5jbHVk ZSA8c3RkbGliLmg+DQojIGVuZGlmDQojZW5kaWYNCiNpZmRlZiBIQVZFX1NUUklOR19IDQojIGlm ICFkZWZpbmVkIFNURENfSEVBREVSUyAmJiBkZWZpbmVkIEhBVkVfTUVNT1JZX0gNCiMgIGluY2x1 ZGUgPG1lbW9yeS5oPg0KIyBlbmRpZg0KIyBpbmNsdWRlIDxzdHJpbmcuaD4NCiNlbmRpZg0KI2lm ZGVmIEhBVkVfU1RSSU5HU19IDQojIGluY2x1ZGUgPHN0cmluZ3MuaD4NCiNlbmRpZg0KI2lmZGVm IEhBVkVfSU5UVFlQRVNfSA0KIyBpbmNsdWRlIDxpbnR0eXBlcy5oPg0KI2VuZGlmDQojaWZkZWYg SEFWRV9TVERJTlRfSA0KIyBpbmNsdWRlIDxzdGRpbnQuaD4NCiNlbmRpZg0KI2lmZGVmIEhBVkVf VU5JU1REX0gNCiMgaW5jbHVkZSA8dW5pc3RkLmg+DQojZW5kaWYiDQoNCmdsX3VzZV90aHJlYWRz X2RlZmF1bHQ9DQphY19oZWFkZXJfbGlzdD0NCmFjX2Z1bmNfbGlzdD0NCmdsX2ZubWF0Y2hfcmVx dWlyZWQ9UE9TSVgNCmdsX2dldG9wdF9yZXF1aXJlZD1QT1NJWA0KZ2xfZ2V0b3B0X3JlcXVpcmVk PVBPU0lYDQpndF9uZWVkcz0NCmFjX3N1YnN0X3ZhcnM9J2dsdGVzdHNfTFRMSUJPQkpTDQpnbHRl c3RzX0xJQk9CSlMNCmdsX0xUTElCT0JKUw0KZ2xfTElCT0JKUw0KQ09ORklHX0lOQ0xVREUNCmFt X19FWEVFWFRfRkFMU0UNCmFtX19FWEVFWFRfVFJVRQ0KTFRMSUJPQkpTDQpQT1NVQg0KSU5UTExJ QlMNClhHRVRURVhUX0VYVFJBX09QVElPTlMNCk1TR01FUkdFDQpYR0VUVEVYVF8wMTUNClhHRVRU RVhUDQpHTVNHRk1UXzAxNQ0KTVNHRk1UXzAxNQ0KR01TR0ZNVA0KTVNHRk1UDQpHRVRURVhUX01B Q1JPX1ZFUlNJT04NClVTRV9OTFMNCkNPTkZJR19TVEFUVVNfREVQRU5ERU5DSUVTDQpDUk9TU19D T01QSUxJTkdfRkFMU0UNCkNST1NTX0NPTVBJTElOR19UUlVFDQpOT19JTlNUQUxMX1BST0dTX0RF RkFVTFQNCk9QVElPTkFMX1BLR0xJQl9QUk9HUw0KT1BUSU9OQUxfQklOX1BST0dTDQpJTlNUQUxM X1NVDQpMSUJfR01QDQpMSUJfQ1JZUFQNCkdOVUxJQl9URVNUX1dBUk5fQ0ZMQUdTDQpHTlVMSUJf V0FSTl9DRkxBR1MNCldFUlJPUl9DRkxBR1MNClNFUV9MSUJNDQpMSUJfQ0FQDQpMSUJfRkRBVEFT WU5DDQpMSUJfWEFUVFINCkxJQk9CSlMNCkFOU0kyS05SDQpVDQpNQU4NCkhFTFAyTUFODQpMSUJU RVNUU19MSUJERVBTDQpMSUJDT1JFVVRJTFNfTFRMSUJERVBTDQpMSUJDT1JFVVRJTFNfTElCREVQ Uw0KWUlFTERfTElCDQphYnNfYXV4X2Rpcg0KSU5UTF9NQUNPU1hfTElCUw0KSU5FVF9QVE9OX0xJ Qg0KTE9DQUxFX1RSX1VURjgNCmdsdGVzdHNfV0lUTkVTUw0KTkVYVF9BU19GSVJTVF9ESVJFQ1RJ VkVfV0NIQVJfSA0KTkVYVF9XQ0hBUl9IDQpXQVJOX0NGTEFHUw0KTElCVU5JU1RSSU5HX0NPTVBJ TEVfVU5JV0lEVEhfV0lEVEhfRkFMU0UNCkxJQlVOSVNUUklOR19DT01QSUxFX1VOSVdJRFRIX1dJ RFRIX1RSVUUNCkxJQlVOSVNUUklOR19VTklXSURUSF9IDQpMSUJVTklTVFJJTkdfVU5JVFlQRVNf SA0KTElCVU5JU1RSSU5HX0NPTVBJTEVfVU5JU1RSX1U4X1VDVE9NQl9GQUxTRQ0KTElCVU5JU1RS SU5HX0NPTVBJTEVfVU5JU1RSX1U4X1VDVE9NQl9UUlVFDQpMSUJVTklTVFJJTkdfVU5JU1RSX0gN CkhBVkVfVU5JU1REX0gNCk5FWFRfQVNfRklSU1RfRElSRUNUSVZFX1VOSVNURF9IDQpORVhUX1VO SVNURF9IDQpQVEhSRUFEX0hfREVGSU5FU19TVFJVQ1RfVElNRVNQRUMNClNZU19USU1FX0hfREVG SU5FU19TVFJVQ1RfVElNRVNQRUMNClRJTUVfSF9ERUZJTkVTX1NUUlVDVF9USU1FU1BFQw0KTkVY VF9BU19GSVJTVF9ESVJFQ1RJVkVfVElNRV9IDQpORVhUX1RJTUVfSA0KTkVYVF9BU19GSVJTVF9E SVJFQ1RJVkVfVEVSTUlPU19IDQpORVhUX1RFUk1JT1NfSA0KSEFWRV9URVJNSU9TX0gNCkhBVkVf REVDTF9UQ0dFVFNJRA0KR05VTElCX1RDR0VUU0lEDQpORVhUX0FTX0ZJUlNUX0RJUkVDVElWRV9T WVNfV0FJVF9IDQpORVhUX1NZU19XQUlUX0gNCkdOVUxJQl9XQUlUUElEDQpIQVZFX1NZU19VVFNO QU1FX0gNCk5FWFRfQVNfRklSU1RfRElSRUNUSVZFX1NZU19VVFNOQU1FX0gNCk5FWFRfU1lTX1VU U05BTUVfSA0KSEFWRV9TVFJVQ1RfVVRTTkFNRQ0KSEFWRV9VTkFNRQ0KR05VTElCX1VOQU1FDQpO RVhUX0FTX0ZJUlNUX0RJUkVDVElWRV9TWVNfU1RBVF9IDQpORVhUX1NZU19TVEFUX0gNCk5FWFRf QVNfRklSU1RfRElSRUNUSVZFX1NZU19JT0NUTF9IDQpORVhUX1NZU19JT0NUTF9IDQpIQVZFX1NZ U19JT0NUTF9IDQpORVhUX0FTX0ZJUlNUX0RJUkVDVElWRV9TVFJJTkdfSA0KTkVYVF9TVFJJTkdf SA0KTkVYVF9BU19GSVJTVF9ESVJFQ1RJVkVfU1RETElCX0gNCk5FWFRfU1RETElCX0gNCk5FWFRf QVNfRklSU1RfRElSRUNUSVZFX1NURElPX0gNCk5FWFRfU1RESU9fSA0KR0xfR0VORVJBVEVfU1RE QVJHX0hfRkFMU0UNCkdMX0dFTkVSQVRFX1NUREFSR19IX1RSVUUNClNUREFSR19IDQpORVhUX0FT X0ZJUlNUX0RJUkVDVElWRV9TVERBUkdfSA0KTkVYVF9TVERBUkdfSA0KTkVYVF9BU19GSVJTVF9E SVJFQ1RJVkVfU0lHTkFMX0gNCk5FWFRfU0lHTkFMX0gNCkhBVkVfVFlQRV9WT0xBVElMRV9TSUdf QVRPTUlDX1QNCkhBVkVfU1RSVUNUX1NJR0FDVElPTl9TQV9TSUdBQ1RJT04NCkhBVkVfU0lHQUNU SU9ODQpIQVZFX1NJR0lORk9fVA0KSEFWRV9TSUdTRVRfVA0KSEFWRV9QT1NJWF9TSUdOQUxCTE9D S0lORw0KR05VTElCX1NJR0FDVElPTg0KR05VTElCX1NJR1BST0NNQVNLDQpHTlVMSUJfU0lHTkFM X0hfU0lHUElQRQ0KR0xfR0VORVJBVEVfU0VMSU5VWF9DT05URVhUX0hfRkFMU0UNCkdMX0dFTkVS QVRFX1NFTElOVVhfQ09OVEVYVF9IX1RSVUUNClNFTElOVVhfQ09OVEVYVF9IDQpORVhUX0FTX0ZJ UlNUX0RJUkVDVElWRV9TRUxJTlVYX1NFTElOVVhfSA0KTkVYVF9TRUxJTlVYX1NFTElOVVhfSA0K TElCX1NFTElOVVgNCkdMX0dFTkVSQVRFX1NDSEVEX0hfRkFMU0UNCkdMX0dFTkVSQVRFX1NDSEVE X0hfVFJVRQ0KU0NIRURfSA0KSEFWRV9TVFJVQ1RfU0NIRURfUEFSQU0NCkhBVkVfU0NIRURfSA0K TkVYVF9BU19GSVJTVF9ESVJFQ1RJVkVfU0NIRURfSA0KTkVYVF9TQ0hFRF9IDQpMSUJfUFRIUkVB RA0KR0xfR0VORVJBVEVfUFRIUkVBRF9IX0ZBTFNFDQpHTF9HRU5FUkFURV9QVEhSRUFEX0hfVFJV RQ0KUFRIUkVBRF9IDQpORVhUX0FTX0ZJUlNUX0RJUkVDVElWRV9QVEhSRUFEX0gNCk5FWFRfUFRI UkVBRF9IDQpIQVZFX1BUSFJFQURfU1BJTkxPQ0tfVA0KSEFWRV9QVEhSRUFEX1QNCkhBVkVfUFRI UkVBRF9IDQpERUZBVUxUX1BPU0lYMl9WRVJTSU9ODQpQUkVGRVJBQkxZX1BPU0lYX1NIRUxMDQpQ T1NJWF9TSEVMTA0KUEVSTA0KWUZMQUdTDQpZQUNDDQpHTF9HRU5FUkFURV9ORVRJTkVUX0lOX0hf RkFMU0UNCkdMX0dFTkVSQVRFX05FVElORVRfSU5fSF9UUlVFDQpORVRJTkVUX0lOX0gNCkhBVkVf TkVUSU5FVF9JTl9IDQpORVhUX0FTX0ZJUlNUX0RJUkVDVElWRV9ORVRJTkVUX0lOX0gNCk5FWFRf TkVUSU5FVF9JTl9IDQpMSUJfTkFOT1NMRUVQDQpMSUJTT0NLRVQNCkhBVkVfU1lTX1NFTEVDVF9I DQpORVhUX0FTX0ZJUlNUX0RJUkVDVElWRV9TWVNfU0VMRUNUX0gNCk5FWFRfU1lTX1NFTEVDVF9I DQpSRVBMQUNFX1NFTEVDVA0KR05VTElCX1NFTEVDVA0KUkVQTEFDRV9USU1FR00NClJFUExBQ0Vf TkFOT1NMRUVQDQpSRVBMQUNFX01LVElNRQ0KUkVQTEFDRV9MT0NBTFRJTUVfUg0KSEFWRV9USU1F R00NCkhBVkVfU1RSUFRJTUUNCkhBVkVfTkFOT1NMRUVQDQpIQVZFX0RFQ0xfTE9DQUxUSU1FX1IN CkdOVUxJQl9USU1FX1INCkdOVUxJQl9USU1FR00NCkdOVUxJQl9TVFJQVElNRQ0KR05VTElCX05B Tk9TTEVFUA0KR05VTElCX01LVElNRQ0KVU5ERUZJTkVfU1RSVE9LX1INClJFUExBQ0VfU1RSVE9L X1INClJFUExBQ0VfU1RSU0lHTkFMDQpSRVBMQUNFX1NUUk5MRU4NClJFUExBQ0VfU1RSTkRVUA0K UkVQTEFDRV9TVFJOQ0FUDQpSRVBMQUNFX1NUUkVSUk9SX1INClJFUExBQ0VfU1RSRVJST1INClJF UExBQ0VfU1RSQ0FTRVNUUg0KUkVQTEFDRV9TVFJTVFINClJFUExBQ0VfU1RSRFVQDQpSRVBMQUNF X1NUUE5DUFkNClJFUExBQ0VfTUVNTUVNDQpSRVBMQUNFX01FTUNIUg0KSEFWRV9TVFJWRVJTQ01Q DQpIQVZFX0RFQ0xfU1RSU0lHTkFMDQpIQVZFX0RFQ0xfU1RSRVJST1JfUg0KSEFWRV9ERUNMX1NU UlRPS19SDQpIQVZFX1NUUkNBU0VTVFINCkhBVkVfU1RSU0VQDQpIQVZFX1NUUlBCUksNCkhBVkVf REVDTF9TVFJOTEVODQpIQVZFX0RFQ0xfU1RSTkRVUA0KSEFWRV9ERUNMX1NUUkRVUA0KSEFWRV9T VFJDSFJOVUwNCkhBVkVfU1RQTkNQWQ0KSEFWRV9TVFBDUFkNCkhBVkVfUkFXTUVNQ0hSDQpIQVZF X0RFQ0xfTUVNUkNIUg0KSEFWRV9NRU1QQ1BZDQpIQVZFX0RFQ0xfTUVNTUVNDQpIQVZFX01FTUNI Ug0KSEFWRV9NQlNMRU4NCkdOVUxJQl9TVFJWRVJTQ01QDQpHTlVMSUJfU1RSU0lHTkFMDQpHTlVM SUJfU1RSRVJST1JfUg0KR05VTElCX1NUUkVSUk9SDQpHTlVMSUJfTUJTVE9LX1INCkdOVUxJQl9N QlNTRVANCkdOVUxJQl9NQlNTUE4NCkdOVUxJQl9NQlNQQlJLDQpHTlVMSUJfTUJTQ1NQTg0KR05V TElCX01CU0NBU0VTVFINCkdOVUxJQl9NQlNQQ0FTRUNNUA0KR05VTElCX01CU05DQVNFQ01QDQpH TlVMSUJfTUJTQ0FTRUNNUA0KR05VTElCX01CU1NUUg0KR05VTElCX01CU1JDSFINCkdOVUxJQl9N QlNDSFINCkdOVUxJQl9NQlNOTEVODQpHTlVMSUJfTUJTTEVODQpHTlVMSUJfU1RSVE9LX1INCkdO VUxJQl9TVFJDQVNFU1RSDQpHTlVMSUJfU1RSU1RSDQpHTlVMSUJfU1RSU0VQDQpHTlVMSUJfU1RS UEJSSw0KR05VTElCX1NUUk5MRU4NCkdOVUxJQl9TVFJORFVQDQpHTlVMSUJfU1RSTkNBVA0KR05V TElCX1NUUkRVUA0KR05VTElCX1NUUkNIUk5VTA0KR05VTElCX1NUUE5DUFkNCkdOVUxJQl9TVFBD UFkNCkdOVUxJQl9SQVdNRU1DSFINCkdOVUxJQl9NRU1SQ0hSDQpHTlVMSUJfTUVNUENQWQ0KR05V TElCX01FTU1FTQ0KR05VTElCX01FTUNIUg0KTE9DQUxFX0ZSX1VURjgNCkxPQ0FMRV9aSF9DTg0K TE9DQUxFX0pBDQpORVhUX0FTX0ZJUlNUX0RJUkVDVElWRV9NQVRIX0gNCk5FWFRfTUFUSF9IDQpM VExJQk1VTFRJVEhSRUFEDQpMSUJNVUxUSVRIUkVBRA0KTFRMSUJUSFJFQUQNCkxJQlRIUkVBRA0K TElCUFRIX1BSRUZJWA0KTFRMSUJQVEgNCkxJQlBUSA0KTkVYVF9BU19GSVJTVF9ESVJFQ1RJVkVf TE9DQUxFX0gNCk5FWFRfTE9DQUxFX0gNCkhBVkVfWExPQ0FMRV9IDQpORVhUX0FTX0ZJUlNUX0RJ UkVDVElWRV9TVERERUZfSA0KTkVYVF9TVERERUZfSA0KR0xfR0VORVJBVEVfU1REREVGX0hfRkFM U0UNCkdMX0dFTkVSQVRFX1NURERFRl9IX1RSVUUNClNURERFRl9IDQpIQVZFX1dDSEFSX1QNClJF UExBQ0VfTlVMTA0KUkVQTEFDRV9EVVBMT0NBTEUNClJFUExBQ0VfU0VUTE9DQUxFDQpIQVZFX0RV UExPQ0FMRQ0KR05VTElCX0RVUExPQ0FMRQ0KR05VTElCX1NFVExPQ0FMRQ0KTE9DQUxDSEFSU0VU X1RFU1RTX0VOVklST05NRU5UDQpHTElCQzIxDQpJR05PUkVfVU5VU0VEX0xJQlJBUklFU19DRkxB R1MNCkhBVkVfTEFOR0lORk9fWUVTRVhQUg0KSEFWRV9MQU5HSU5GT19FUkENCkhBVkVfTEFOR0lO Rk9fVF9GTVRfQU1QTQ0KSEFWRV9MQU5HSU5GT19DT0RFU0VUDQpIQVZFX0xBTkdJTkZPX0gNCk5F WFRfQVNfRklSU1RfRElSRUNUSVZFX0xBTkdJTkZPX0gNCk5FWFRfTEFOR0lORk9fSA0KUkVQTEFD RV9OTF9MQU5HSU5GTw0KSEFWRV9OTF9MQU5HSU5GTw0KR05VTElCX05MX0xBTkdJTkZPDQpSRVBM QUNFX0lTV0NOVFJMDQpIQVZFX1dDVFlQRV9IDQpORVhUX0FTX0ZJUlNUX0RJUkVDVElWRV9XQ1RZ UEVfSA0KTkVYVF9XQ1RZUEVfSA0KSEFWRV9XSU5UX1QNCkhBVkVfSVNXQ05UUkwNClJFUExBQ0Vf SVNXQkxBTksNCkhBVkVfV0NUUkFOU19UDQpIQVZFX1dDVFlQRV9UDQpIQVZFX0lTV0JMQU5LDQpH TlVMSUJfVE9XQ1RSQU5TDQpHTlVMSUJfV0NUUkFOUw0KR05VTElCX0lTV0NUWVBFDQpHTlVMSUJf V0NUWVBFDQpHTlVMSUJfSVNXQkxBTksNClVJTlQ2NF9NQVhfRVFfVUxPTkdfTUFYDQpVSU5UMzJf TUFYX0xUX1VJTlRNQVhfTUFYDQpJTlQ2NF9NQVhfRVFfTE9OR19NQVgNCklOVDMyX01BWF9MVF9J TlRNQVhfTUFYDQpQUklQVFJfUFJFRklYDQpORVhUX0FTX0ZJUlNUX0RJUkVDVElWRV9JTlRUWVBF U19IDQpORVhUX0lOVFRZUEVTX0gNCkhBVkVfREVDTF9TVFJUT1VNQVgNCkhBVkVfREVDTF9TVFJU T0lNQVgNCkhBVkVfREVDTF9JTUFYRElWDQpIQVZFX0RFQ0xfSU1BWEFCUw0KR05VTElCX1NUUlRP VU1BWA0KR05VTElCX1NUUlRPSU1BWA0KR05VTElCX0lNQVhESVYNCkdOVUxJQl9JTUFYQUJTDQpQ UklfTUFDUk9TX0JST0tFTg0KR0xfR0VORVJBVEVfU1RESU5UX0hfRkFMU0UNCkdMX0dFTkVSQVRF X1NURElOVF9IX1RSVUUNClNURElOVF9IDQpXSU5UX1RfU1VGRklYDQpXQ0hBUl9UX1NVRkZJWA0K U0lHX0FUT01JQ19UX1NVRkZJWA0KU0laRV9UX1NVRkZJWA0KUFRSRElGRl9UX1NVRkZJWA0KSEFW RV9TSUdORURfV0lOVF9UDQpIQVZFX1NJR05FRF9XQ0hBUl9UDQpIQVZFX1NJR05FRF9TSUdfQVRP TUlDX1QNCkJJVFNJWkVPRl9XSU5UX1QNCkJJVFNJWkVPRl9XQ0hBUl9UDQpCSVRTSVpFT0ZfU0lH X0FUT01JQ19UDQpCSVRTSVpFT0ZfU0laRV9UDQpCSVRTSVpFT0ZfUFRSRElGRl9UDQpBUFBMRV9V TklWRVJTQUxfQlVJTEQNCkhBVkVfU1lTX0JJVFlQRVNfSA0KSEFWRV9TWVNfSU5UVFlQRVNfSA0K SEFWRV9TVERJTlRfSA0KTkVYVF9BU19GSVJTVF9ESVJFQ1RJVkVfU1RESU5UX0gNCk5FWFRfU1RE SU5UX0gNCkhBVkVfU1lTX1RZUEVTX0gNCkhBVkVfSU5UVFlQRVNfSA0KSEFWRV9XQ0hBUl9IDQpI QVZFX1VOU0lHTkVEX0xPTkdfTE9OR19JTlQNCkhBVkVfTE9OR19MT05HX0lOVA0KTkVYVF9BU19G SVJTVF9ESVJFQ1RJVkVfSUNPTlZfSA0KTkVYVF9JQ09OVl9IDQpHTF9HRU5FUkFURV9JQ09OVl9I X0ZBTFNFDQpHTF9HRU5FUkFURV9JQ09OVl9IX1RSVUUNCklDT05WX0gNClJFUExBQ0VfSUNPTlZf VVRGDQpSRVBMQUNFX0lDT05WX09QRU4NClJFUExBQ0VfSUNPTlYNCklDT05WX0NPTlNUDQpHTlVM SUJfSUNPTlYNCkxUTElCSUNPTlYNCkxJQklDT05WDQpIQVZFX19CT09MDQpHTF9HRU5FUkFURV9T VERCT09MX0hfRkFMU0UNCkdMX0dFTkVSQVRFX1NUREJPT0xfSF9UUlVFDQpTVERCT09MX0gNCkdO VV9NQUtFX0ZBTFNFDQpHTlVfTUFLRV9UUlVFDQpORVhUX0FTX0ZJUlNUX0RJUkVDVElWRV9TWVNf VElNRV9IDQpORVhUX1NZU19USU1FX0gNClJFUExBQ0VfR0VUVElNRU9GREFZDQpIQVZFX1NZU19U SU1FX0gNCkhBVkVfU1RSVUNUX1RJTUVWQUwNCkhBVkVfR0VUVElNRU9GREFZDQpHTlVMSUJfR0VU VElNRU9GREFZDQpMVExJQklOVEwNCkxJQklOVEwNCkdFVE9QVF9IDQpIQVZFX0dFVE9QVF9IDQpO RVhUX0FTX0ZJUlNUX0RJUkVDVElWRV9HRVRPUFRfSA0KTkVYVF9HRVRPUFRfSA0KR0VUTE9BREFW R19MSUJTDQpMSUJfR0VUSFJYVElNRQ0KR0VUSE9TVE5BTUVfTElCDQpHRVRBRERSSU5GT19MSUIN CklORVRfTlRPUF9MSUINClNFUlZFTlRfTElCDQpIT1NURU5UX0xJQg0KSEFWRV9ORVREQl9IDQpO RVhUX0FTX0ZJUlNUX0RJUkVDVElWRV9ORVREQl9IDQpORVhUX05FVERCX0gNCkhBVkVfREVDTF9H RVROQU1FSU5GTw0KSEFWRV9ERUNMX0dFVEFERFJJTkZPDQpIQVZFX0RFQ0xfR0FJX1NUUkVSUk9S DQpIQVZFX0RFQ0xfRlJFRUFERFJJTkZPDQpIQVZFX1NUUlVDVF9BRERSSU5GTw0KR05VTElCX0dF VEFERFJJTkZPDQpIQVZFX1dTMlRDUElQX0gNCkhBVkVfU1lTX1NPQ0tFVF9IDQpORVhUX0FTX0ZJ UlNUX0RJUkVDVElWRV9TWVNfU09DS0VUX0gNCk5FWFRfU1lTX1NPQ0tFVF9IDQpIQVZFX0FDQ0VQ VDQNCkhBVkVfU0FfRkFNSUxZX1QNCkhBVkVfU1RSVUNUX1NPQ0tBRERSX1NUT1JBR0VfU1NfRkFN SUxZDQpIQVZFX1NUUlVDVF9TT0NLQUREUl9TVE9SQUdFDQpHTlVMSUJfQUNDRVBUNA0KR05VTElC X1NIVVRET1dODQpHTlVMSUJfU0VUU09DS09QVA0KR05VTElCX1NFTkRUTw0KR05VTElCX1JFQ1ZG Uk9NDQpHTlVMSUJfU0VORA0KR05VTElCX1JFQ1YNCkdOVUxJQl9MSVNURU4NCkdOVUxJQl9HRVRT T0NLT1BUDQpHTlVMSUJfR0VUU09DS05BTUUNCkdOVUxJQl9HRVRQRUVSTkFNRQ0KR05VTElCX0JJ TkQNCkdOVUxJQl9BQ0NFUFQNCkdOVUxJQl9DT05ORUNUDQpHTlVMSUJfU09DS0VUDQpSRVBMQUNF X1RSVU5DTA0KUkVQTEFDRV9UUlVOQ0YNClJFUExBQ0VfVFJVTkMNClJFUExBQ0VfU0lHTkJJVF9V U0lOR19HQ0MNClJFUExBQ0VfU0lHTkJJVA0KUkVQTEFDRV9ST1VOREwNClJFUExBQ0VfUk9VTkRG DQpSRVBMQUNFX1JPVU5EDQpSRVBMQUNFX05BTg0KUkVQTEFDRV9MREVYUEwNClJFUExBQ0VfSVNO QU4NClJFUExBQ0VfSVNJTkYNClJFUExBQ0VfSVNGSU5JVEUNClJFUExBQ0VfSFVHRV9WQUwNClJF UExBQ0VfRlJFWFBMDQpSRVBMQUNFX0ZSRVhQDQpSRVBMQUNFX0ZMT09STA0KUkVQTEFDRV9GTE9P UkYNClJFUExBQ0VfRkxPT1INClJFUExBQ0VfQ0VJTEwNClJFUExBQ0VfQ0VJTEYNClJFUExBQ0Vf Q0VJTA0KSEFWRV9ERUNMX1RSVU5DTA0KSEFWRV9ERUNMX1RSVU5DRg0KSEFWRV9ERUNMX1RSVU5D DQpIQVZFX0RFQ0xfVEFOTA0KSEFWRV9ERUNMX1NRUlRMDQpIQVZFX0RFQ0xfU0lOTA0KSEFWRV9E RUNMX1JPVU5ETA0KSEFWRV9ERUNMX1JPVU5ERg0KSEFWRV9ERUNMX1JPVU5EDQpIQVZFX0RFQ0xf TE9HTA0KSEFWRV9ERUNMX0xPR0INCkhBVkVfREVDTF9MREVYUEwNCkhBVkVfREVDTF9GUkVYUEwN CkhBVkVfREVDTF9GTE9PUkwNCkhBVkVfREVDTF9GTE9PUkYNCkhBVkVfREVDTF9FWFBMDQpIQVZF X0RFQ0xfQ09TTA0KSEFWRV9ERUNMX0NFSUxMDQpIQVZFX0RFQ0xfQ0VJTEYNCkhBVkVfREVDTF9B VEFOTA0KSEFWRV9ERUNMX0FTSU5MDQpIQVZFX0RFQ0xfQUNPU0wNCkhBVkVfVEFOTA0KSEFWRV9T UVJUTA0KSEFWRV9TSU5MDQpIQVZFX0xPR0wNCkhBVkVfSVNOQU5MDQpIQVZFX0lTTkFORA0KSEFW RV9JU05BTkYNCkhBVkVfRVhQTA0KSEFWRV9DT1NMDQpIQVZFX0FUQU5MDQpIQVZFX0FTSU5MDQpI QVZFX0FDT1NMDQpHTlVMSUJfVFJVTkNMDQpHTlVMSUJfVFJVTkNGDQpHTlVMSUJfVFJVTkMNCkdO VUxJQl9UQU5MDQpHTlVMSUJfU1FSVEwNCkdOVUxJQl9TSU5MDQpHTlVMSUJfU0lHTkJJVA0KR05V TElCX1JPVU5ETA0KR05VTElCX1JPVU5ERg0KR05VTElCX1JPVU5EDQpHTlVMSUJfTE9HTA0KR05V TElCX0xPR0INCkdOVUxJQl9MREVYUEwNCkdOVUxJQl9JU05BTkwNCkdOVUxJQl9JU05BTkQNCkdO VUxJQl9JU05BTkYNCkdOVUxJQl9JU05BTg0KR05VTElCX0lTSU5GDQpHTlVMSUJfSVNGSU5JVEUN CkdOVUxJQl9GUkVYUEwNCkdOVUxJQl9GUkVYUA0KR05VTElCX0ZMT09STA0KR05VTElCX0ZMT09S Rg0KR05VTElCX0ZMT09SDQpHTlVMSUJfRVhQTA0KR05VTElCX0NPU0wNCkdOVUxJQl9DRUlMTA0K R05VTElCX0NFSUxGDQpHTlVMSUJfQ0VJTA0KR05VTElCX0FUQU5MDQpHTlVMSUJfQVNJTkwNCkdO VUxJQl9BQ09TTA0KR0xfR0VORVJBVEVfRk5NQVRDSF9IX0ZBTFNFDQpHTF9HRU5FUkFURV9GTk1B VENIX0hfVFJVRQ0KRk5NQVRDSF9IDQpHTF9HRU5FUkFURV9GTE9BVF9IX0ZBTFNFDQpHTF9HRU5F UkFURV9GTE9BVF9IX1RSVUUNCkZMT0FUX0gNCk5FWFRfQVNfRklSU1RfRElSRUNUSVZFX0ZMT0FU X0gNCk5FWFRfRkxPQVRfSA0KTkVYVF9BU19GSVJTVF9ESVJFQ1RJVkVfRkNOVExfSA0KTkVYVF9G Q05UTF9IDQpSRVBMQUNFX1VUSU1FTlNBVA0KUkVQTEFDRV9TVEFUDQpSRVBMQUNFX01LTk9EDQpS RVBMQUNFX01LRklGTw0KUkVQTEFDRV9NS0RJUg0KUkVQTEFDRV9MU1RBVA0KUkVQTEFDRV9GVVRJ TUVOUw0KUkVQTEFDRV9GU1RBVEFUDQpSRVBMQUNFX0ZTVEFUDQpIQVZFX1VUSU1FTlNBVA0KSEFW RV9NS05PREFUDQpIQVZFX01LTk9EDQpIQVZFX01LRklGT0FUDQpIQVZFX01LRklGTw0KSEFWRV9N S0RJUkFUDQpIQVZFX0xTVEFUDQpIQVZFX0xDSE1PRA0KSEFWRV9GVVRJTUVOUw0KSEFWRV9GU1RB VEFUDQpIQVZFX0ZDSE1PREFUDQpHTlVMSUJfVVRJTUVOU0FUDQpHTlVMSUJfU1RBVA0KR05VTElC X01LTk9EQVQNCkdOVUxJQl9NS05PRA0KR05VTElCX01LRklGT0FUDQpHTlVMSUJfTUtGSUZPDQpH TlVMSUJfTUtESVJBVA0KR05VTElCX0xTVEFUDQpHTlVMSUJfTENITU9EDQpHTlVMSUJfRlVUSU1F TlMNCkdOVUxJQl9GU1RBVEFUDQpHTlVMSUJfRkNITU9EQVQNClJFUExBQ0VfT1BFTkFUDQpSRVBM QUNFX09QRU4NClJFUExBQ0VfRkNOVEwNCkhBVkVfT1BFTkFUDQpIQVZFX0ZDTlRMDQpHTlVMSUJf T1BFTkFUDQpHTlVMSUJfT1BFTg0KR05VTElCX05PTkJMT0NLSU5HDQpHTlVMSUJfRkNOVEwNCkxJ Ql9FQUNDRVNTDQpFT1ZFUkZMT1dfVkFMVUUNCkVPVkVSRkxPV19ISURERU4NCkVOT0xJTktfVkFM VUUNCkVOT0xJTktfSElEREVODQpFTVVMVElIT1BfVkFMVUUNCkVNVUxUSUhPUF9ISURERU4NCkdM X0dFTkVSQVRFX0VSUk5PX0hfRkFMU0UNCkdMX0dFTkVSQVRFX0VSUk5PX0hfVFJVRQ0KRVJSTk9f SA0KTkVYVF9BU19GSVJTVF9ESVJFQ1RJVkVfRVJSTk9fSA0KTkVYVF9FUlJOT19IDQpORVhUX0FT X0ZJUlNUX0RJUkVDVElWRV9ESVJFTlRfSA0KTkVYVF9ESVJFTlRfSA0KUkVQTEFDRV9PUEVORElS DQpSRVBMQUNFX0ZET1BFTkRJUg0KUkVQTEFDRV9ESVJGRA0KUkVQTEFDRV9DTE9TRURJUg0KSEFW RV9BTFBIQVNPUlQNCkhBVkVfU0NBTkRJUg0KSEFWRV9GRE9QRU5ESVINCkhBVkVfREVDTF9GRE9Q RU5ESVINCkhBVkVfREVDTF9ESVJGRA0KR05VTElCX0FMUEhBU09SVA0KR05VTElCX1NDQU5ESVIN CkdOVUxJQl9GRE9QRU5ESVINCkdOVUxJQl9ESVJGRA0KTkVYVF9BU19GSVJTVF9ESVJFQ1RJVkVf Q1RZUEVfSA0KTkVYVF9DVFlQRV9IDQpIQVZFX0lTQkxBTksNCkdOVUxJQl9JU0JMQU5LDQpwa2ds aWJleGVjZGlyDQpsaXNwZGlyDQpSRVBMQUNFX1ZTUFJJTlRGDQpSRVBMQUNFX1ZTTlBSSU5URg0K UkVQTEFDRV9WUFJJTlRGDQpSRVBMQUNFX1ZGUFJJTlRGDQpSRVBMQUNFX1ZEUFJJTlRGDQpSRVBM QUNFX1ZBU1BSSU5URg0KUkVQTEFDRV9UTVBGSUxFDQpSRVBMQUNFX1NURElPX1dSSVRFX0ZVTkNT DQpSRVBMQUNFX1NQUklOVEYNClJFUExBQ0VfU05QUklOVEYNClJFUExBQ0VfUkVOQU1FQVQNClJF UExBQ0VfUkVOQU1FDQpSRVBMQUNFX1JFTU9WRQ0KUkVQTEFDRV9QUklOVEYNClJFUExBQ0VfUE9Q RU4NClJFUExBQ0VfUEVSUk9SDQpSRVBMQUNFX09CU1RBQ0tfUFJJTlRGDQpSRVBMQUNFX0dFVExJ TkUNClJFUExBQ0VfR0VUREVMSU0NClJFUExBQ0VfRlRFTExPDQpSRVBMQUNFX0ZURUxMDQpSRVBM QUNFX0ZTRUVLTw0KUkVQTEFDRV9GU0VFSw0KUkVQTEFDRV9GUkVPUEVODQpSRVBMQUNFX0ZQVVJH RQ0KUkVQTEFDRV9GUFJJTlRGDQpSRVBMQUNFX0ZPUEVODQpSRVBMQUNFX0ZGTFVTSA0KUkVQTEFD RV9GQ0xPU0UNClJFUExBQ0VfRFBSSU5URg0KSEFWRV9WRFBSSU5URg0KSEFWRV9WQVNQUklOVEYN CkhBVkVfUkVOQU1FQVQNCkhBVkVfRlRFTExPDQpIQVZFX0ZTRUVLTw0KSEFWRV9EUFJJTlRGDQpI QVZFX0RFQ0xfVlNOUFJJTlRGDQpIQVZFX0RFQ0xfU05QUklOVEYNCkhBVkVfREVDTF9PQlNUQUNL X1BSSU5URg0KSEFWRV9ERUNMX0dFVExJTkUNCkhBVkVfREVDTF9HRVRERUxJTQ0KSEFWRV9ERUNM X0ZURUxMTw0KSEFWRV9ERUNMX0ZTRUVLTw0KSEFWRV9ERUNMX0ZQVVJHRQ0KR05VTElCX1ZTUFJJ TlRGX1BPU0lYDQpHTlVMSUJfVlNOUFJJTlRGDQpHTlVMSUJfVlBSSU5URl9QT1NJWA0KR05VTElC X1ZQUklOVEYNCkdOVUxJQl9WRlBSSU5URl9QT1NJWA0KR05VTElCX1ZGUFJJTlRGDQpHTlVMSUJf VkRQUklOVEYNCkdOVUxJQl9WQVNQUklOVEYNCkdOVUxJQl9UTVBGSUxFDQpHTlVMSUJfU1RESU9f SF9TSUdQSVBFDQpHTlVMSUJfU1BSSU5URl9QT1NJWA0KR05VTElCX1NOUFJJTlRGDQpHTlVMSUJf UkVOQU1FQVQNCkdOVUxJQl9SRU5BTUUNCkdOVUxJQl9SRU1PVkUNCkdOVUxJQl9QVVRTDQpHTlVM SUJfUFVUQ0hBUg0KR05VTElCX1BVVEMNCkdOVUxJQl9QUklOVEZfUE9TSVgNCkdOVUxJQl9QUklO VEYNCkdOVUxJQl9QT1BFTg0KR05VTElCX1BFUlJPUg0KR05VTElCX09CU1RBQ0tfUFJJTlRGX1BP U0lYDQpHTlVMSUJfT0JTVEFDS19QUklOVEYNCkdOVUxJQl9HRVRMSU5FDQpHTlVMSUJfR0VUREVM SU0NCkdOVUxJQl9GV1JJVEUNCkdOVUxJQl9GVEVMTE8NCkdOVUxJQl9GVEVMTA0KR05VTElCX0ZT RUVLTw0KR05VTElCX0ZTRUVLDQpHTlVMSUJfRlJFT1BFTg0KR05VTElCX0ZQVVRTDQpHTlVMSUJf RlBVVEMNCkdOVUxJQl9GUFVSR0UNCkdOVUxJQl9GUFJJTlRGX1BPU0lYDQpHTlVMSUJfRlBSSU5U Rg0KR05VTElCX0ZPUEVODQpHTlVMSUJfRkZMVVNIDQpHTlVMSUJfRkNMT1NFDQpHTlVMSUJfRFBS SU5URg0KSEFWRV9XSU5TT0NLMl9IDQpSRVBMQUNFX0lPQ1RMDQpTWVNfSU9DVExfSF9IQVZFX1dJ TlNPQ0syX0hfQU5EX1VTRV9TT0NLRVRTDQpTWVNfSU9DVExfSF9IQVZFX1dJTlNPQ0syX0gNCkdO VUxJQl9JT0NUTA0KTElCX0NMT0NLX0dFVFRJTUUNClVOSVNURF9IX0hBVkVfV0lOU09DSzJfSF9B TkRfVVNFX1NPQ0tFVFMNClVOSVNURF9IX0hBVkVfV0lOU09DSzJfSA0KUkVQTEFDRV9XUklURQ0K UkVQTEFDRV9VU0xFRVANClJFUExBQ0VfVU5MSU5LQVQNClJFUExBQ0VfVU5MSU5LDQpSRVBMQUNF X1RUWU5BTUVfUg0KUkVQTEFDRV9TWU1MSU5LDQpSRVBMQUNFX1NMRUVQDQpSRVBMQUNFX1JNRElS DQpSRVBMQUNFX1JFQURMSU5LDQpSRVBMQUNFX1BXUklURQ0KUkVQTEFDRV9QUkVBRA0KUkVQTEFD RV9MU0VFSw0KUkVQTEFDRV9MSU5LQVQNClJFUExBQ0VfTElOSw0KUkVQTEFDRV9MQ0hPV04NClJF UExBQ0VfR0VUUEFHRVNJWkUNClJFUExBQ0VfR0VUR1JPVVBTDQpSRVBMQUNFX0dFVExPR0lOX1IN ClJFUExBQ0VfR0VURE9NQUlOTkFNRQ0KUkVQTEFDRV9HRVRDV0QNClJFUExBQ0VfRkNIT1dOQVQN ClJFUExBQ0VfRFVQMg0KUkVQTEFDRV9EVVANClJFUExBQ0VfQ0xPU0UNClJFUExBQ0VfQ0hPV04N CkhBVkVfU1lTX1BBUkFNX0gNCkhBVkVfT1NfSA0KSEFWRV9ERUNMX1RUWU5BTUVfUg0KSEFWRV9E RUNMX0dFVFVTRVJTSEVMTA0KSEFWRV9ERUNMX0dFVFBBR0VTSVpFDQpIQVZFX0RFQ0xfR0VUTE9H SU5fUg0KSEFWRV9ERUNMX0dFVERPTUFJTk5BTUUNCkhBVkVfREVDTF9GQ0hESVINCkhBVkVfREVD TF9FTlZJUk9ODQpIQVZFX1VTTEVFUA0KSEFWRV9VTkxJTktBVA0KSEFWRV9TWU1MSU5LQVQNCkhB VkVfU1lNTElOSw0KSEFWRV9TTEVFUA0KSEFWRV9SRUFETElOS0FUDQpIQVZFX1JFQURMSU5LDQpI QVZFX1BXUklURQ0KSEFWRV9QUkVBRA0KSEFWRV9QSVBFMg0KSEFWRV9QSVBFDQpIQVZFX0xJTktB VA0KSEFWRV9MSU5LDQpIQVZFX0xDSE9XTg0KSEFWRV9HRVRQQUdFU0laRQ0KSEFWRV9HRVRMT0dJ Tg0KSEFWRV9HRVRIT1NUTkFNRQ0KSEFWRV9HRVRHUk9VUFMNCkhBVkVfR0VURFRBQkxFU0laRQ0K SEFWRV9GVFJVTkNBVEUNCkhBVkVfRlNZTkMNCkhBVkVfRkNIT1dOQVQNCkhBVkVfRkNIRElSDQpI QVZFX0ZBQ0NFU1NBVA0KSEFWRV9FVUlEQUNDRVNTDQpIQVZFX0RVUDMNCkhBVkVfRFVQMg0KSEFW RV9DSE9XTg0KR05VTElCX1dSSVRFDQpHTlVMSUJfVVNMRUVQDQpHTlVMSUJfVU5MSU5LQVQNCkdO VUxJQl9VTkxJTksNCkdOVUxJQl9VTklTVERfSF9TSUdQSVBFDQpHTlVMSUJfVU5JU1REX0hfR0VU T1BUDQpHTlVMSUJfVFRZTkFNRV9SDQpHTlVMSUJfU1lNTElOS0FUDQpHTlVMSUJfU1lNTElOSw0K R05VTElCX1NMRUVQDQpHTlVMSUJfUk1ESVINCkdOVUxJQl9SRUFETElOS0FUDQpHTlVMSUJfUkVB RExJTksNCkdOVUxJQl9QV1JJVEUNCkdOVUxJQl9QUkVBRA0KR05VTElCX1BJUEUyDQpHTlVMSUJf UElQRQ0KR05VTElCX0xTRUVLDQpHTlVMSUJfTElOS0FUDQpHTlVMSUJfTElOSw0KR05VTElCX0xD SE9XTg0KR05VTElCX0dFVFVTRVJTSEVMTA0KR05VTElCX0dFVFBBR0VTSVpFDQpHTlVMSUJfR0VU TE9HSU5fUg0KR05VTElCX0dFVExPR0lODQpHTlVMSUJfR0VUSE9TVE5BTUUNCkdOVUxJQl9HRVRH Uk9VUFMNCkdOVUxJQl9HRVREVEFCTEVTSVpFDQpHTlVMSUJfR0VURE9NQUlOTkFNRQ0KR05VTElC X0dFVENXRA0KR05VTElCX0ZUUlVOQ0FURQ0KR05VTElCX0ZTWU5DDQpHTlVMSUJfRkNIT1dOQVQN CkdOVUxJQl9GQ0hESVINCkdOVUxJQl9GQUNDRVNTQVQNCkdOVUxJQl9FVUlEQUNDRVNTDQpHTlVM SUJfRU5WSVJPTg0KR05VTElCX0RVUDMNCkdOVUxJQl9EVVAyDQpHTlVMSUJfQ0xPU0UNCkdOVUxJ Ql9DSE9XTg0KUkVQTEFDRV9XQ1RPTUINClJFUExBQ0VfVU5TRVRFTlYNClJFUExBQ0VfU1RSVE9E DQpSRVBMQUNFX1NFVEVOVg0KUkVQTEFDRV9SRUFMUEFUSA0KUkVQTEFDRV9SRUFMTE9DDQpSRVBM QUNFX1BVVEVOVg0KUkVQTEFDRV9NS1NURU1QDQpSRVBMQUNFX01CVE9XQw0KUkVQTEFDRV9NQUxM T0MNClJFUExBQ0VfQ0FOT05JQ0FMSVpFX0ZJTEVfTkFNRQ0KUkVQTEFDRV9DQUxMT0MNCkhBVkVf REVDTF9VTlNFVEVOVg0KSEFWRV9VTkxPQ0tQVA0KSEFWRV9TWVNfTE9BREFWR19IDQpIQVZFX1NU UlVDVF9SQU5ET01fREFUQQ0KSEFWRV9TVFJUT1VMTA0KSEFWRV9TVFJUT0xMDQpIQVZFX1NUUlRP RA0KSEFWRV9ERUNMX1NFVEVOVg0KSEFWRV9TRVRFTlYNCkhBVkVfUlBNQVRDSA0KSEFWRV9SRUFM UEFUSA0KSEFWRV9SQU5ET01fUg0KSEFWRV9SQU5ET01fSA0KSEFWRV9QVFNOQU1FDQpIQVZFX01L U1RFTVBTDQpIQVZFX01LU1RFTVANCkhBVkVfTUtPU1RFTVBTDQpIQVZFX01LT1NURU1QDQpIQVZF X01LRFRFTVANCkhBVkVfR1JBTlRQVA0KSEFWRV9HRVRTVUJPUFQNCkhBVkVfREVDTF9HRVRMT0FE QVZHDQpIQVZFX0NBTk9OSUNBTElaRV9GSUxFX05BTUUNCkhBVkVfQVRPTEwNCkhBVkVfX0VYSVQN CkdOVUxJQl9XQ1RPTUINCkdOVUxJQl9VTlNFVEVOVg0KR05VTElCX1VOTE9DS1BUDQpHTlVMSUJf U1lTVEVNX1BPU0lYDQpHTlVMSUJfU1RSVE9VTEwNCkdOVUxJQl9TVFJUT0xMDQpHTlVMSUJfU1RS VE9EDQpHTlVMSUJfU0VURU5WDQpHTlVMSUJfUlBNQVRDSA0KR05VTElCX1JFQUxQQVRIDQpHTlVM SUJfUkVBTExPQ19QT1NJWA0KR05VTElCX1JBTkRPTV9SDQpHTlVMSUJfUFVURU5WDQpHTlVMSUJf UFRTTkFNRQ0KR05VTElCX01LU1RFTVBTDQpHTlVMSUJfTUtTVEVNUA0KR05VTElCX01LT1NURU1Q Uw0KR05VTElCX01LT1NURU1QDQpHTlVMSUJfTUtEVEVNUA0KR05VTElCX01CVE9XQw0KR05VTElC X01BTExPQ19QT1NJWA0KR05VTElCX0dSQU5UUFQNCkdOVUxJQl9HRVRTVUJPUFQNCkdOVUxJQl9H RVRMT0FEQVZHDQpHTlVMSUJfQ0FOT05JQ0FMSVpFX0ZJTEVfTkFNRQ0KR05VTElCX0NBTExPQ19Q T1NJWA0KR05VTElCX0FUT0xMDQpHTlVMSUJfX0VYSVQNCkxPQ0FMRV9GUg0KUkVQTEFDRV9XQ1NX SURUSA0KUkVQTEFDRV9XQ1dJRFRIDQpSRVBMQUNFX1dDU05SVE9NQlMNClJFUExBQ0VfV0NTUlRP TUJTDQpSRVBMQUNFX1dDUlRPTUINClJFUExBQ0VfTUJTTlJUT1dDUw0KUkVQTEFDRV9NQlNSVE9X Q1MNClJFUExBQ0VfTUJSTEVODQpSRVBMQUNFX01CUlRPV0MNClJFUExBQ0VfTUJTSU5JVA0KUkVQ TEFDRV9XQ1RPQg0KUkVQTEFDRV9CVE9XQw0KUkVQTEFDRV9NQlNUQVRFX1QNCkhBVkVfREVDTF9X Q1dJRFRIDQpIQVZFX0RFQ0xfV0NUT0INCkhBVkVfV0NTV0lEVEgNCkhBVkVfV0NTVE9LDQpIQVZF X1dDU1NUUg0KSEFWRV9XQ1NQQlJLDQpIQVZFX1dDU1NQTg0KSEFWRV9XQ1NDU1BODQpIQVZFX1dD U1JDSFINCkhBVkVfV0NTQ0hSDQpIQVZFX1dDU0RVUA0KSEFWRV9XQ1NYRlJNDQpIQVZFX1dDU0NP TEwNCkhBVkVfV0NTTkNBU0VDTVANCkhBVkVfV0NTQ0FTRUNNUA0KSEFWRV9XQ1NOQ01QDQpIQVZF X1dDU0NNUA0KSEFWRV9XQ1NOQ0FUDQpIQVZFX1dDU0NBVA0KSEFWRV9XQ1BOQ1BZDQpIQVZFX1dD U05DUFkNCkhBVkVfV0NQQ1BZDQpIQVZFX1dDU0NQWQ0KSEFWRV9XQ1NOTEVODQpIQVZFX1dDU0xF Tg0KSEFWRV9XTUVNU0VUDQpIQVZFX1dNRU1NT1ZFDQpIQVZFX1dNRU1DUFkNCkhBVkVfV01FTUNN UA0KSEFWRV9XTUVNQ0hSDQpIQVZFX1dDU05SVE9NQlMNCkhBVkVfV0NTUlRPTUJTDQpIQVZFX1dD UlRPTUINCkhBVkVfTUJTTlJUT1dDUw0KSEFWRV9NQlNSVE9XQ1MNCkhBVkVfTUJSTEVODQpIQVZF X01CUlRPV0MNCkhBVkVfTUJTSU5JVA0KSEFWRV9CVE9XQw0KR05VTElCX1dDU1dJRFRIDQpHTlVM SUJfV0NTVE9LDQpHTlVMSUJfV0NTU1RSDQpHTlVMSUJfV0NTUEJSSw0KR05VTElCX1dDU1NQTg0K R05VTElCX1dDU0NTUE4NCkdOVUxJQl9XQ1NSQ0hSDQpHTlVMSUJfV0NTQ0hSDQpHTlVMSUJfV0NT RFVQDQpHTlVMSUJfV0NTWEZSTQ0KR05VTElCX1dDU0NPTEwNCkdOVUxJQl9XQ1NOQ0FTRUNNUA0K R05VTElCX1dDU0NBU0VDTVANCkdOVUxJQl9XQ1NOQ01QDQpHTlVMSUJfV0NTQ01QDQpHTlVMSUJf V0NTTkNBVA0KR05VTElCX1dDU0NBVA0KR05VTElCX1dDUE5DUFkNCkdOVUxJQl9XQ1NOQ1BZDQpH TlVMSUJfV0NQQ1BZDQpHTlVMSUJfV0NTQ1BZDQpHTlVMSUJfV0NTTkxFTg0KR05VTElCX1dDU0xF Tg0KR05VTElCX1dNRU1TRVQNCkdOVUxJQl9XTUVNTU9WRQ0KR05VTElCX1dNRU1DUFkNCkdOVUxJ Ql9XTUVNQ01QDQpHTlVMSUJfV01FTUNIUg0KR05VTElCX1dDV0lEVEgNCkdOVUxJQl9XQ1NOUlRP TUJTDQpHTlVMSUJfV0NTUlRPTUJTDQpHTlVMSUJfV0NSVE9NQg0KR05VTElCX01CU05SVE9XQ1MN CkdOVUxJQl9NQlNSVE9XQ1MNCkdOVUxJQl9NQlJMRU4NCkdOVUxJQl9NQlJUT1dDDQpHTlVMSUJf TUJTSU5JVA0KR05VTElCX1dDVE9CDQpHTlVMSUJfQlRPV0MNCkhBVkVfRkVBVFVSRVNfSA0KTkVY VF9BU19GSVJTVF9ESVJFQ1RJVkVfQVJQQV9JTkVUX0gNCk5FWFRfQVJQQV9JTkVUX0gNClBSQUdN QV9DT0xVTU5TDQpQUkFHTUFfU1lTVEVNX0hFQURFUg0KSU5DTFVERV9ORVhUX0FTX0ZJUlNUX0RJ UkVDVElWRQ0KSU5DTFVERV9ORVhUDQpIQVZFX0FSUEFfSU5FVF9IDQpIQVZFX0RFQ0xfSU5FVF9Q VE9ODQpIQVZFX0RFQ0xfSU5FVF9OVE9QDQpHTlVMSUJfSU5FVF9QVE9ODQpHTlVMSUJfSU5FVF9O VE9QDQpHTF9HRU5FUkFURV9BTExPQ0FfSF9GQUxTRQ0KR0xfR0VORVJBVEVfQUxMT0NBX0hfVFJV RQ0KQUxMT0NBX0gNCkFMTE9DQQ0KVVNFX0FDTA0KTElCX0FDTA0KR0xfQ09ORF9MSUJUT09MX0ZB TFNFDQpHTF9DT05EX0xJQlRPT0xfVFJVRQ0KaG9zdF9vcw0KaG9zdF92ZW5kb3INCmhvc3RfY3B1 DQpob3N0DQpidWlsZF9vcw0KYnVpbGRfdmVuZG9yDQpidWlsZF9jcHUNCmJ1aWxkDQpMTl9TDQpS QU5MSUINCkVHUkVQDQpHUkVQDQpDUFANCmFtX19mYXN0ZGVwQ0NfRkFMU0UNCmFtX19mYXN0ZGVw Q0NfVFJVRQ0KQ0NERVBNT0RFDQphbV9fbm9kZXANCkFNREVQQkFDS1NMQVNIDQpBTURFUF9GQUxT RQ0KQU1ERVBfVFJVRQ0KYW1fX3F1b3RlDQphbV9faW5jbHVkZQ0KREVQRElSDQpPQkpFWFQNCkVY RUVYVA0KYWNfY3RfQ0MNCkNQUEZMQUdTDQpMREZMQUdTDQpDRkxBR1MNCkNDDQpBTV9CQUNLU0xB U0gNCkFNX0RFRkFVTFRfVkVSQk9TSVRZDQphbV9fdW50YXINCmFtX190YXINCkFNVEFSDQphbV9f bGVhZGluZ19kb3QNClNFVF9NQUtFDQpBV0sNCm1rZGlyX3ANCk1LRElSX1ANCklOU1RBTExfU1RS SVBfUFJPR1JBTQ0KU1RSSVANCmluc3RhbGxfc2gNCk1BS0VJTkZPDQpBVVRPSEVBREVSDQpBVVRP TUFLRQ0KQVVUT0NPTkYNCkFDTE9DQUwNClZFUlNJT04NClBBQ0tBR0UNCkNZR1BBVEhfVw0KYW1f X2lzcmMNCklOU1RBTExfREFUQQ0KSU5TVEFMTF9TQ1JJUFQNCklOU1RBTExfUFJPR1JBTQ0KdGFy Z2V0X2FsaWFzDQpob3N0X2FsaWFzDQpidWlsZF9hbGlhcw0KTElCUw0KRUNIT19UDQpFQ0hPX04N CkVDSE9fQw0KREVGUw0KbWFuZGlyDQpsb2NhbGVkaXINCmxpYmRpcg0KcHNkaXINCnBkZmRpcg0K ZHZpZGlyDQpodG1sZGlyDQppbmZvZGlyDQpkb2NkaXINCm9sZGluY2x1ZGVkaXINCmluY2x1ZGVk aXINCmxvY2Fsc3RhdGVkaXINCnNoYXJlZHN0YXRlZGlyDQpzeXNjb25mZGlyDQpkYXRhZGlyDQpk YXRhcm9vdGRpcg0KbGliZXhlY2Rpcg0Kc2JpbmRpcg0KYmluZGlyDQpwcm9ncmFtX3RyYW5zZm9y bV9uYW1lDQpwcmVmaXgNCmV4ZWNfcHJlZml4DQpQQUNLQUdFX1VSTA0KUEFDS0FHRV9CVUdSRVBP UlQNClBBQ0tBR0VfU1RSSU5HDQpQQUNLQUdFX1ZFUlNJT04NClBBQ0tBR0VfVEFSTkFNRQ0KUEFD S0FHRV9OQU1FDQpQQVRIX1NFUEFSQVRPUg0KU0hFTEwnDQphY19zdWJzdF9maWxlcz0nJw0KYWNf dXNlcl9vcHRzPScNCmVuYWJsZV9vcHRpb25fY2hlY2tpbmcNCmVuYWJsZV9zaWxlbnRfcnVsZXMN CmVuYWJsZV9kZXBlbmRlbmN5X3RyYWNraW5nDQplbmFibGVfdGhyZWFkcw0KZW5hYmxlX2FjbA0K ZW5hYmxlX2Fzc2VydA0Kd2l0aF9nbnVfbGQNCmVuYWJsZV9ycGF0aA0Kd2l0aF9saWJpY29udl9w cmVmaXgNCndpdGhfbGlicHRoX3ByZWZpeA0KZW5hYmxlX2xhcmdlZmlsZQ0Kd2l0aF9pbmNsdWRl ZF9yZWdleA0Kd2l0aF9zZWxpbnV4DQp3aXRoX3BhY2thZ2VyDQp3aXRoX3BhY2thZ2VyX3ZlcnNp b24NCndpdGhfcGFja2FnZXJfYnVnX3JlcG9ydHMNCmVuYWJsZV94YXR0cg0KZW5hYmxlX2xpYmNh cA0Kd2l0aF90dHlfZ3JvdXANCmVuYWJsZV9nY2Nfd2FybmluZ3MNCndpdGhfZ21wDQplbmFibGVf aW5zdGFsbF9wcm9ncmFtDQplbmFibGVfbm9faW5zdGFsbF9wcm9ncmFtDQplbmFibGVfbmxzDQp3 aXRoX2xpYmludGxfcHJlZml4DQonDQogICAgICBhY19wcmVjaW91c192YXJzPSdidWlsZF9hbGlh cw0KaG9zdF9hbGlhcw0KdGFyZ2V0X2FsaWFzDQpDQw0KQ0ZMQUdTDQpMREZMQUdTDQpMSUJTDQpD UFBGTEFHUw0KQ1BQDQpZQUNDDQpZRkxBR1MNCkRFRkFVTFRfUE9TSVgyX1ZFUlNJT04nDQoNCg0K IyBJbml0aWFsaXplIHNvbWUgdmFyaWFibGVzIHNldCBieSBvcHRpb25zLg0KYWNfaW5pdF9oZWxw PQ0KYWNfaW5pdF92ZXJzaW9uPWZhbHNlDQphY191bnJlY29nbml6ZWRfb3B0cz0NCmFjX3VucmVj b2duaXplZF9zZXA9DQojIFRoZSB2YXJpYWJsZXMgaGF2ZSB0aGUgc2FtZSBuYW1lcyBhcyB0aGUg b3B0aW9ucywgd2l0aA0KIyBkYXNoZXMgY2hhbmdlZCB0byB1bmRlcmxpbmVzLg0KY2FjaGVfZmls ZT0vZGV2L251bGwNCmV4ZWNfcHJlZml4PU5PTkUNCm5vX2NyZWF0ZT0NCm5vX3JlY3Vyc2lvbj0N CnByZWZpeD1OT05FDQpwcm9ncmFtX3ByZWZpeD1OT05FDQpwcm9ncmFtX3N1ZmZpeD1OT05FDQpw cm9ncmFtX3RyYW5zZm9ybV9uYW1lPXMseCx4LA0Kc2lsZW50PQ0Kc2l0ZT0NCnNyY2Rpcj0NCnZl cmJvc2U9DQp4X2luY2x1ZGVzPU5PTkUNCnhfbGlicmFyaWVzPU5PTkUNCg0KIyBJbnN0YWxsYXRp b24gZGlyZWN0b3J5IG9wdGlvbnMuDQojIFRoZXNlIGFyZSBsZWZ0IHVuZXhwYW5kZWQgc28gdXNl cnMgY2FuICJtYWtlIGluc3RhbGwgZXhlY19wcmVmaXg9L2ZvbyINCiMgYW5kIGFsbCB0aGUgdmFy aWFibGVzIHRoYXQgYXJlIHN1cHBvc2VkIHRvIGJlIGJhc2VkIG9uIGV4ZWNfcHJlZml4DQojIGJ5 IGRlZmF1bHQgd2lsbCBhY3R1YWxseSBjaGFuZ2UuDQojIFVzZSBicmFjZXMgaW5zdGVhZCBvZiBw YXJlbnMgYmVjYXVzZSBzaCwgcGVybCwgZXRjLiBhbHNvIGFjY2VwdCB0aGVtLg0KIyAoVGhlIGxp c3QgZm9sbG93cyB0aGUgc2FtZSBvcmRlciBhcyB0aGUgR05VIENvZGluZyBTdGFuZGFyZHMuKQ0K YmluZGlyPScke2V4ZWNfcHJlZml4fS9iaW4nDQpzYmluZGlyPScke2V4ZWNfcHJlZml4fS9zYmlu Jw0KbGliZXhlY2Rpcj0nJHtleGVjX3ByZWZpeH0vbGliZXhlYycNCmRhdGFyb290ZGlyPScke3By ZWZpeH0vc2hhcmUnDQpkYXRhZGlyPScke2RhdGFyb290ZGlyfScNCnN5c2NvbmZkaXI9JyR7cHJl Zml4fS9ldGMnDQpzaGFyZWRzdGF0ZWRpcj0nJHtwcmVmaXh9L2NvbScNCmxvY2Fsc3RhdGVkaXI9 JyR7cHJlZml4fS92YXInDQppbmNsdWRlZGlyPScke3ByZWZpeH0vaW5jbHVkZScNCm9sZGluY2x1 ZGVkaXI9Jy91c3IvaW5jbHVkZScNCmRvY2Rpcj0nJHtkYXRhcm9vdGRpcn0vZG9jLyR7UEFDS0FH RV9UQVJOQU1FfScNCmluZm9kaXI9JyR7ZGF0YXJvb3RkaXJ9L2luZm8nDQpodG1sZGlyPScke2Rv Y2Rpcn0nDQpkdmlkaXI9JyR7ZG9jZGlyfScNCnBkZmRpcj0nJHtkb2NkaXJ9Jw0KcHNkaXI9JyR7 ZG9jZGlyfScNCmxpYmRpcj0nJHtleGVjX3ByZWZpeH0vbGliJw0KbG9jYWxlZGlyPScke2RhdGFy b290ZGlyfS9sb2NhbGUnDQptYW5kaXI9JyR7ZGF0YXJvb3RkaXJ9L21hbicNCg0KYWNfcHJldj0N CmFjX2Rhc2hkYXNoPQ0KZm9yIGFjX29wdGlvbg0KZG8NCiAgIyBJZiB0aGUgcHJldmlvdXMgb3B0 aW9uIG5lZWRzIGFuIGFyZ3VtZW50LCBhc3NpZ24gaXQuDQogIGlmIHRlc3QgLW4gIiRhY19wcmV2 IjsgdGhlbg0KICAgIGV2YWwgJGFjX3ByZXY9XCRhY19vcHRpb24NCiAgICBhY19wcmV2PQ0KICAg IGNvbnRpbnVlDQogIGZpDQoNCiAgY2FzZSAkYWNfb3B0aW9uIGluDQogICo9PyopIGFjX29wdGFy Zz1gZXhwciAiWCRhY19vcHRpb24iIDogJ1tePV0qPVwoLipcKSdgIDs7DQogICo9KSAgIGFjX29w dGFyZz0gOzsNCiAgKikgICAgYWNfb3B0YXJnPXllcyA7Ow0KICBlc2FjDQoNCiAgIyBBY2NlcHQg dGhlIGltcG9ydGFudCBDeWdudXMgY29uZmlndXJlIG9wdGlvbnMsIHNvIHdlIGNhbiBkaWFnbm9z ZSB0eXBvcy4NCg0KICBjYXNlICRhY19kYXNoZGFzaCRhY19vcHRpb24gaW4NCiAgLS0pDQogICAg YWNfZGFzaGRhc2g9eWVzIDs7DQoNCiAgLWJpbmRpciB8IC0tYmluZGlyIHwgLS1iaW5kaSB8IC0t YmluZCB8IC0tYmluIHwgLS1iaSkNCiAgICBhY19wcmV2PWJpbmRpciA7Ow0KICAtYmluZGlyPSog fCAtLWJpbmRpcj0qIHwgLS1iaW5kaT0qIHwgLS1iaW5kPSogfCAtLWJpbj0qIHwgLS1iaT0qKQ0K ICAgIGJpbmRpcj0kYWNfb3B0YXJnIDs7DQoNCiAgLWJ1aWxkIHwgLS1idWlsZCB8IC0tYnVpbCB8 IC0tYnVpIHwgLS1idSkNCiAgICBhY19wcmV2PWJ1aWxkX2FsaWFzIDs7DQogIC1idWlsZD0qIHwg LS1idWlsZD0qIHwgLS1idWlsPSogfCAtLWJ1aT0qIHwgLS1idT0qKQ0KICAgIGJ1aWxkX2FsaWFz PSRhY19vcHRhcmcgOzsNCg0KICAtY2FjaGUtZmlsZSB8IC0tY2FjaGUtZmlsZSB8IC0tY2FjaGUt ZmlsIHwgLS1jYWNoZS1maSBcDQogIHwgLS1jYWNoZS1mIHwgLS1jYWNoZS0gfCAtLWNhY2hlIHwg LS1jYWNoIHwgLS1jYWMgfCAtLWNhIHwgLS1jKQ0KICAgIGFjX3ByZXY9Y2FjaGVfZmlsZSA7Ow0K ICAtY2FjaGUtZmlsZT0qIHwgLS1jYWNoZS1maWxlPSogfCAtLWNhY2hlLWZpbD0qIHwgLS1jYWNo ZS1maT0qIFwNCiAgfCAtLWNhY2hlLWY9KiB8IC0tY2FjaGUtPSogfCAtLWNhY2hlPSogfCAtLWNh Y2g9KiB8IC0tY2FjPSogfCAtLWNhPSogfCAtLWM9KikNCiAgICBjYWNoZV9maWxlPSRhY19vcHRh cmcgOzsNCg0KICAtLWNvbmZpZy1jYWNoZSB8IC1DKQ0KICAgIGNhY2hlX2ZpbGU9Y29uZmlnLmNh Y2hlIDs7DQoNCiAgLWRhdGFkaXIgfCAtLWRhdGFkaXIgfCAtLWRhdGFkaSB8IC0tZGF0YWQpDQog ICAgYWNfcHJldj1kYXRhZGlyIDs7DQogIC1kYXRhZGlyPSogfCAtLWRhdGFkaXI9KiB8IC0tZGF0 YWRpPSogfCAtLWRhdGFkPSopDQogICAgZGF0YWRpcj0kYWNfb3B0YXJnIDs7DQoNCiAgLWRhdGFy b290ZGlyIHwgLS1kYXRhcm9vdGRpciB8IC0tZGF0YXJvb3RkaSB8IC0tZGF0YXJvb3RkIHwgLS1k YXRhcm9vdCBcDQogIHwgLS1kYXRhcm9vIHwgLS1kYXRhcm8gfCAtLWRhdGFyKQ0KICAgIGFjX3By ZXY9ZGF0YXJvb3RkaXIgOzsNCiAgLWRhdGFyb290ZGlyPSogfCAtLWRhdGFyb290ZGlyPSogfCAt LWRhdGFyb290ZGk9KiB8IC0tZGF0YXJvb3RkPSogXA0KICB8IC0tZGF0YXJvb3Q9KiB8IC0tZGF0 YXJvbz0qIHwgLS1kYXRhcm89KiB8IC0tZGF0YXI9KikNCiAgICBkYXRhcm9vdGRpcj0kYWNfb3B0 YXJnIDs7DQoNCiAgLWRpc2FibGUtKiB8IC0tZGlzYWJsZS0qKQ0KICAgIGFjX3VzZXJvcHQ9YGV4 cHIgIngkYWNfb3B0aW9uIiA6ICd4LSpkaXNhYmxlLVwoLipcKSdgDQogICAgIyBSZWplY3QgbmFt ZXMgdGhhdCBhcmUgbm90IHZhbGlkIHNoZWxsIHZhcmlhYmxlIG5hbWVzLg0KICAgIGV4cHIgIngk YWNfdXNlcm9wdCIgOiAiLipbXi0rLl8kYXNfY3JfYWxudW1dIiA+L2Rldi9udWxsICYmDQogICAg ICBhc19mbl9lcnJvciAkPyAiaW52YWxpZCBmZWF0dXJlIG5hbWU6ICRhY191c2Vyb3B0Ig0KICAg IGFjX3VzZXJvcHRfb3JpZz0kYWNfdXNlcm9wdA0KICAgIGFjX3VzZXJvcHQ9YCRhc19lY2hvICIk YWNfdXNlcm9wdCIgfCBzZWQgJ3MvWy0rLl0vXy9nJ2ANCiAgICBjYXNlICRhY191c2VyX29wdHMg aW4NCiAgICAgICoiDQoiZW5hYmxlXyRhY191c2Vyb3B0Ig0KIiopIDs7DQogICAgICAqKSBhY191 bnJlY29nbml6ZWRfb3B0cz0iJGFjX3VucmVjb2duaXplZF9vcHRzJGFjX3VucmVjb2duaXplZF9z ZXAtLWRpc2FibGUtJGFjX3VzZXJvcHRfb3JpZyINCgkgYWNfdW5yZWNvZ25pemVkX3NlcD0nLCAn OzsNCiAgICBlc2FjDQogICAgZXZhbCBlbmFibGVfJGFjX3VzZXJvcHQ9bm8gOzsNCg0KICAtZG9j ZGlyIHwgLS1kb2NkaXIgfCAtLWRvY2RpIHwgLS1kb2MgfCAtLWRvKQ0KICAgIGFjX3ByZXY9ZG9j ZGlyIDs7DQogIC1kb2NkaXI9KiB8IC0tZG9jZGlyPSogfCAtLWRvY2RpPSogfCAtLWRvYz0qIHwg LS1kbz0qKQ0KICAgIGRvY2Rpcj0kYWNfb3B0YXJnIDs7DQoNCiAgLWR2aWRpciB8IC0tZHZpZGly IHwgLS1kdmlkaSB8IC0tZHZpZCB8IC0tZHZpIHwgLS1kdikNCiAgICBhY19wcmV2PWR2aWRpciA7 Ow0KICAtZHZpZGlyPSogfCAtLWR2aWRpcj0qIHwgLS1kdmlkaT0qIHwgLS1kdmlkPSogfCAtLWR2 aT0qIHwgLS1kdj0qKQ0KICAgIGR2aWRpcj0kYWNfb3B0YXJnIDs7DQoNCiAgLWVuYWJsZS0qIHwg LS1lbmFibGUtKikNCiAgICBhY191c2Vyb3B0PWBleHByICJ4JGFjX29wdGlvbiIgOiAneC0qZW5h YmxlLVwoW149XSpcKSdgDQogICAgIyBSZWplY3QgbmFtZXMgdGhhdCBhcmUgbm90IHZhbGlkIHNo ZWxsIHZhcmlhYmxlIG5hbWVzLg0KICAgIGV4cHIgIngkYWNfdXNlcm9wdCIgOiAiLipbXi0rLl8k YXNfY3JfYWxudW1dIiA+L2Rldi9udWxsICYmDQogICAgICBhc19mbl9lcnJvciAkPyAiaW52YWxp ZCBmZWF0dXJlIG5hbWU6ICRhY191c2Vyb3B0Ig0KICAgIGFjX3VzZXJvcHRfb3JpZz0kYWNfdXNl cm9wdA0KICAgIGFjX3VzZXJvcHQ9YCRhc19lY2hvICIkYWNfdXNlcm9wdCIgfCBzZWQgJ3MvWy0r Ll0vXy9nJ2ANCiAgICBjYXNlICRhY191c2VyX29wdHMgaW4NCiAgICAgICoiDQoiZW5hYmxlXyRh Y191c2Vyb3B0Ig0KIiopIDs7DQogICAgICAqKSBhY191bnJlY29nbml6ZWRfb3B0cz0iJGFjX3Vu cmVjb2duaXplZF9vcHRzJGFjX3VucmVjb2duaXplZF9zZXAtLWVuYWJsZS0kYWNfdXNlcm9wdF9v cmlnIg0KCSBhY191bnJlY29nbml6ZWRfc2VwPScsICc7Ow0KICAgIGVzYWMNCiAgICBldmFsIGVu YWJsZV8kYWNfdXNlcm9wdD1cJGFjX29wdGFyZyA7Ow0KDQogIC1leGVjLXByZWZpeCB8IC0tZXhl Y19wcmVmaXggfCAtLWV4ZWMtcHJlZml4IHwgLS1leGVjLXByZWZpIFwNCiAgfCAtLWV4ZWMtcHJl ZiB8IC0tZXhlYy1wcmUgfCAtLWV4ZWMtcHIgfCAtLWV4ZWMtcCB8IC0tZXhlYy0gXA0KICB8IC0t ZXhlYyB8IC0tZXhlIHwgLS1leCkNCiAgICBhY19wcmV2PWV4ZWNfcHJlZml4IDs7DQogIC1leGVj LXByZWZpeD0qIHwgLS1leGVjX3ByZWZpeD0qIHwgLS1leGVjLXByZWZpeD0qIHwgLS1leGVjLXBy ZWZpPSogXA0KICB8IC0tZXhlYy1wcmVmPSogfCAtLWV4ZWMtcHJlPSogfCAtLWV4ZWMtcHI9KiB8 IC0tZXhlYy1wPSogfCAtLWV4ZWMtPSogXA0KICB8IC0tZXhlYz0qIHwgLS1leGU9KiB8IC0tZXg9 KikNCiAgICBleGVjX3ByZWZpeD0kYWNfb3B0YXJnIDs7DQoNCiAgLWdhcyB8IC0tZ2FzIHwgLS1n YSB8IC0tZykNCiAgICAjIE9ic29sZXRlOyB1c2UgLS13aXRoLWdhcy4NCiAgICB3aXRoX2dhcz15 ZXMgOzsNCg0KICAtaGVscCB8IC0taGVscCB8IC0taGVsIHwgLS1oZSB8IC1oKQ0KICAgIGFjX2lu aXRfaGVscD1sb25nIDs7DQogIC1oZWxwPXIqIHwgLS1oZWxwPXIqIHwgLS1oZWw9ciogfCAtLWhl PXIqIHwgLWhyKikNCiAgICBhY19pbml0X2hlbHA9cmVjdXJzaXZlIDs7DQogIC1oZWxwPXMqIHwg LS1oZWxwPXMqIHwgLS1oZWw9cyogfCAtLWhlPXMqIHwgLWhzKikNCiAgICBhY19pbml0X2hlbHA9 c2hvcnQgOzsNCg0KICAtaG9zdCB8IC0taG9zdCB8IC0taG9zIHwgLS1obykNCiAgICBhY19wcmV2 PWhvc3RfYWxpYXMgOzsNCiAgLWhvc3Q9KiB8IC0taG9zdD0qIHwgLS1ob3M9KiB8IC0taG89KikN CiAgICBob3N0X2FsaWFzPSRhY19vcHRhcmcgOzsNCg0KICAtaHRtbGRpciB8IC0taHRtbGRpciB8 IC0taHRtbGRpIHwgLS1odG1sZCB8IC0taHRtbCB8IC0taHRtIHwgLS1odCkNCiAgICBhY19wcmV2 PWh0bWxkaXIgOzsNCiAgLWh0bWxkaXI9KiB8IC0taHRtbGRpcj0qIHwgLS1odG1sZGk9KiB8IC0t aHRtbGQ9KiB8IC0taHRtbD0qIHwgLS1odG09KiBcDQogIHwgLS1odD0qKQ0KICAgIGh0bWxkaXI9 JGFjX29wdGFyZyA7Ow0KDQogIC1pbmNsdWRlZGlyIHwgLS1pbmNsdWRlZGlyIHwgLS1pbmNsdWRl ZGkgfCAtLWluY2x1ZGVkIHwgLS1pbmNsdWRlIFwNCiAgfCAtLWluY2x1ZCB8IC0taW5jbHUgfCAt LWluY2wgfCAtLWluYykNCiAgICBhY19wcmV2PWluY2x1ZGVkaXIgOzsNCiAgLWluY2x1ZGVkaXI9 KiB8IC0taW5jbHVkZWRpcj0qIHwgLS1pbmNsdWRlZGk9KiB8IC0taW5jbHVkZWQ9KiB8IC0taW5j bHVkZT0qIFwNCiAgfCAtLWluY2x1ZD0qIHwgLS1pbmNsdT0qIHwgLS1pbmNsPSogfCAtLWluYz0q KQ0KICAgIGluY2x1ZGVkaXI9JGFjX29wdGFyZyA7Ow0KDQogIC1pbmZvZGlyIHwgLS1pbmZvZGly IHwgLS1pbmZvZGkgfCAtLWluZm9kIHwgLS1pbmZvIHwgLS1pbmYpDQogICAgYWNfcHJldj1pbmZv ZGlyIDs7DQogIC1pbmZvZGlyPSogfCAtLWluZm9kaXI9KiB8IC0taW5mb2RpPSogfCAtLWluZm9k PSogfCAtLWluZm89KiB8IC0taW5mPSopDQogICAgaW5mb2Rpcj0kYWNfb3B0YXJnIDs7DQoNCiAg LWxpYmRpciB8IC0tbGliZGlyIHwgLS1saWJkaSB8IC0tbGliZCkNCiAgICBhY19wcmV2PWxpYmRp ciA7Ow0KICAtbGliZGlyPSogfCAtLWxpYmRpcj0qIHwgLS1saWJkaT0qIHwgLS1saWJkPSopDQog ICAgbGliZGlyPSRhY19vcHRhcmcgOzsNCg0KICAtbGliZXhlY2RpciB8IC0tbGliZXhlY2RpciB8 IC0tbGliZXhlY2RpIHwgLS1saWJleGVjZCB8IC0tbGliZXhlYyBcDQogIHwgLS1saWJleGUgfCAt LWxpYmV4IHwgLS1saWJlKQ0KICAgIGFjX3ByZXY9bGliZXhlY2RpciA7Ow0KICAtbGliZXhlY2Rp cj0qIHwgLS1saWJleGVjZGlyPSogfCAtLWxpYmV4ZWNkaT0qIHwgLS1saWJleGVjZD0qIHwgLS1s aWJleGVjPSogXA0KICB8IC0tbGliZXhlPSogfCAtLWxpYmV4PSogfCAtLWxpYmU9KikNCiAgICBs aWJleGVjZGlyPSRhY19vcHRhcmcgOzsNCg0KICAtbG9jYWxlZGlyIHwgLS1sb2NhbGVkaXIgfCAt LWxvY2FsZWRpIHwgLS1sb2NhbGVkIHwgLS1sb2NhbGUpDQogICAgYWNfcHJldj1sb2NhbGVkaXIg OzsNCiAgLWxvY2FsZWRpcj0qIHwgLS1sb2NhbGVkaXI9KiB8IC0tbG9jYWxlZGk9KiB8IC0tbG9j YWxlZD0qIHwgLS1sb2NhbGU9KikNCiAgICBsb2NhbGVkaXI9JGFjX29wdGFyZyA7Ow0KDQogIC1s b2NhbHN0YXRlZGlyIHwgLS1sb2NhbHN0YXRlZGlyIHwgLS1sb2NhbHN0YXRlZGkgfCAtLWxvY2Fs c3RhdGVkIFwNCiAgfCAtLWxvY2Fsc3RhdGUgfCAtLWxvY2Fsc3RhdCB8IC0tbG9jYWxzdGEgfCAt LWxvY2Fsc3QgfCAtLWxvY2FscykNCiAgICBhY19wcmV2PWxvY2Fsc3RhdGVkaXIgOzsNCiAgLWxv Y2Fsc3RhdGVkaXI9KiB8IC0tbG9jYWxzdGF0ZWRpcj0qIHwgLS1sb2NhbHN0YXRlZGk9KiB8IC0t bG9jYWxzdGF0ZWQ9KiBcDQogIHwgLS1sb2NhbHN0YXRlPSogfCAtLWxvY2Fsc3RhdD0qIHwgLS1s b2NhbHN0YT0qIHwgLS1sb2NhbHN0PSogfCAtLWxvY2Fscz0qKQ0KICAgIGxvY2Fsc3RhdGVkaXI9 JGFjX29wdGFyZyA7Ow0KDQogIC1tYW5kaXIgfCAtLW1hbmRpciB8IC0tbWFuZGkgfCAtLW1hbmQg fCAtLW1hbiB8IC0tbWEgfCAtLW0pDQogICAgYWNfcHJldj1tYW5kaXIgOzsNCiAgLW1hbmRpcj0q IHwgLS1tYW5kaXI9KiB8IC0tbWFuZGk9KiB8IC0tbWFuZD0qIHwgLS1tYW49KiB8IC0tbWE9KiB8 IC0tbT0qKQ0KICAgIG1hbmRpcj0kYWNfb3B0YXJnIDs7DQoNCiAgLW5mcCB8IC0tbmZwIHwgLS1u ZikNCiAgICAjIE9ic29sZXRlOyB1c2UgLS13aXRob3V0LWZwLg0KICAgIHdpdGhfZnA9bm8gOzsN Cg0KICAtbm8tY3JlYXRlIHwgLS1uby1jcmVhdGUgfCAtLW5vLWNyZWF0IHwgLS1uby1jcmVhIHwg LS1uby1jcmUgXA0KICB8IC0tbm8tY3IgfCAtLW5vLWMgfCAtbikNCiAgICBub19jcmVhdGU9eWVz IDs7DQoNCiAgLW5vLXJlY3Vyc2lvbiB8IC0tbm8tcmVjdXJzaW9uIHwgLS1uby1yZWN1cnNpbyB8 IC0tbm8tcmVjdXJzaSBcDQogIHwgLS1uby1yZWN1cnMgfCAtLW5vLXJlY3VyIHwgLS1uby1yZWN1 IHwgLS1uby1yZWMgfCAtLW5vLXJlIHwgLS1uby1yKQ0KICAgIG5vX3JlY3Vyc2lvbj15ZXMgOzsN Cg0KICAtb2xkaW5jbHVkZWRpciB8IC0tb2xkaW5jbHVkZWRpciB8IC0tb2xkaW5jbHVkZWRpIHwg LS1vbGRpbmNsdWRlZCBcDQogIHwgLS1vbGRpbmNsdWRlIHwgLS1vbGRpbmNsdWQgfCAtLW9sZGlu Y2x1IHwgLS1vbGRpbmNsIHwgLS1vbGRpbmMgXA0KICB8IC0tb2xkaW4gfCAtLW9sZGkgfCAtLW9s ZCB8IC0tb2wgfCAtLW8pDQogICAgYWNfcHJldj1vbGRpbmNsdWRlZGlyIDs7DQogIC1vbGRpbmNs dWRlZGlyPSogfCAtLW9sZGluY2x1ZGVkaXI9KiB8IC0tb2xkaW5jbHVkZWRpPSogfCAtLW9sZGlu Y2x1ZGVkPSogXA0KICB8IC0tb2xkaW5jbHVkZT0qIHwgLS1vbGRpbmNsdWQ9KiB8IC0tb2xkaW5j bHU9KiB8IC0tb2xkaW5jbD0qIHwgLS1vbGRpbmM9KiBcDQogIHwgLS1vbGRpbj0qIHwgLS1vbGRp PSogfCAtLW9sZD0qIHwgLS1vbD0qIHwgLS1vPSopDQogICAgb2xkaW5jbHVkZWRpcj0kYWNfb3B0 YXJnIDs7DQoNCiAgLXByZWZpeCB8IC0tcHJlZml4IHwgLS1wcmVmaSB8IC0tcHJlZiB8IC0tcHJl IHwgLS1wciB8IC0tcCkNCiAgICBhY19wcmV2PXByZWZpeCA7Ow0KICAtcHJlZml4PSogfCAtLXBy ZWZpeD0qIHwgLS1wcmVmaT0qIHwgLS1wcmVmPSogfCAtLXByZT0qIHwgLS1wcj0qIHwgLS1wPSop DQogICAgcHJlZml4PSRhY19vcHRhcmcgOzsNCg0KICAtcHJvZ3JhbS1wcmVmaXggfCAtLXByb2dy YW0tcHJlZml4IHwgLS1wcm9ncmFtLXByZWZpIHwgLS1wcm9ncmFtLXByZWYgXA0KICB8IC0tcHJv Z3JhbS1wcmUgfCAtLXByb2dyYW0tcHIgfCAtLXByb2dyYW0tcCkNCiAgICBhY19wcmV2PXByb2dy YW1fcHJlZml4IDs7DQogIC1wcm9ncmFtLXByZWZpeD0qIHwgLS1wcm9ncmFtLXByZWZpeD0qIHwg LS1wcm9ncmFtLXByZWZpPSogXA0KICB8IC0tcHJvZ3JhbS1wcmVmPSogfCAtLXByb2dyYW0tcHJl PSogfCAtLXByb2dyYW0tcHI9KiB8IC0tcHJvZ3JhbS1wPSopDQogICAgcHJvZ3JhbV9wcmVmaXg9 JGFjX29wdGFyZyA7Ow0KDQogIC1wcm9ncmFtLXN1ZmZpeCB8IC0tcHJvZ3JhbS1zdWZmaXggfCAt LXByb2dyYW0tc3VmZmkgfCAtLXByb2dyYW0tc3VmZiBcDQogIHwgLS1wcm9ncmFtLXN1ZiB8IC0t cHJvZ3JhbS1zdSB8IC0tcHJvZ3JhbS1zKQ0KICAgIGFjX3ByZXY9cHJvZ3JhbV9zdWZmaXggOzsN CiAgLXByb2dyYW0tc3VmZml4PSogfCAtLXByb2dyYW0tc3VmZml4PSogfCAtLXByb2dyYW0tc3Vm Zmk9KiBcDQogIHwgLS1wcm9ncmFtLXN1ZmY9KiB8IC0tcHJvZ3JhbS1zdWY9KiB8IC0tcHJvZ3Jh bS1zdT0qIHwgLS1wcm9ncmFtLXM9KikNCiAgICBwcm9ncmFtX3N1ZmZpeD0kYWNfb3B0YXJnIDs7 DQoNCiAgLXByb2dyYW0tdHJhbnNmb3JtLW5hbWUgfCAtLXByb2dyYW0tdHJhbnNmb3JtLW5hbWUg XA0KICB8IC0tcHJvZ3JhbS10cmFuc2Zvcm0tbmFtIHwgLS1wcm9ncmFtLXRyYW5zZm9ybS1uYSBc DQogIHwgLS1wcm9ncmFtLXRyYW5zZm9ybS1uIHwgLS1wcm9ncmFtLXRyYW5zZm9ybS0gXA0KICB8 IC0tcHJvZ3JhbS10cmFuc2Zvcm0gfCAtLXByb2dyYW0tdHJhbnNmb3IgXA0KICB8IC0tcHJvZ3Jh bS10cmFuc2ZvIHwgLS1wcm9ncmFtLXRyYW5zZiBcDQogIHwgLS1wcm9ncmFtLXRyYW5zIHwgLS1w cm9ncmFtLXRyYW4gXA0KICB8IC0tcHJvZ3ItdHJhIHwgLS1wcm9ncmFtLXRyIHwgLS1wcm9ncmFt LXQpDQogICAgYWNfcHJldj1wcm9ncmFtX3RyYW5zZm9ybV9uYW1lIDs7DQogIC1wcm9ncmFtLXRy YW5zZm9ybS1uYW1lPSogfCAtLXByb2dyYW0tdHJhbnNmb3JtLW5hbWU9KiBcDQogIHwgLS1wcm9n cmFtLXRyYW5zZm9ybS1uYW09KiB8IC0tcHJvZ3JhbS10cmFuc2Zvcm0tbmE9KiBcDQogIHwgLS1w cm9ncmFtLXRyYW5zZm9ybS1uPSogfCAtLXByb2dyYW0tdHJhbnNmb3JtLT0qIFwNCiAgfCAtLXBy b2dyYW0tdHJhbnNmb3JtPSogfCAtLXByb2dyYW0tdHJhbnNmb3I9KiBcDQogIHwgLS1wcm9ncmFt LXRyYW5zZm89KiB8IC0tcHJvZ3JhbS10cmFuc2Y9KiBcDQogIHwgLS1wcm9ncmFtLXRyYW5zPSog fCAtLXByb2dyYW0tdHJhbj0qIFwNCiAgfCAtLXByb2dyLXRyYT0qIHwgLS1wcm9ncmFtLXRyPSog fCAtLXByb2dyYW0tdD0qKQ0KICAgIHByb2dyYW1fdHJhbnNmb3JtX25hbWU9JGFjX29wdGFyZyA7 Ow0KDQogIC1wZGZkaXIgfCAtLXBkZmRpciB8IC0tcGRmZGkgfCAtLXBkZmQgfCAtLXBkZiB8IC0t cGQpDQogICAgYWNfcHJldj1wZGZkaXIgOzsNCiAgLXBkZmRpcj0qIHwgLS1wZGZkaXI9KiB8IC0t cGRmZGk9KiB8IC0tcGRmZD0qIHwgLS1wZGY9KiB8IC0tcGQ9KikNCiAgICBwZGZkaXI9JGFjX29w dGFyZyA7Ow0KDQogIC1wc2RpciB8IC0tcHNkaXIgfCAtLXBzZGkgfCAtLXBzZCB8IC0tcHMpDQog ICAgYWNfcHJldj1wc2RpciA7Ow0KICAtcHNkaXI9KiB8IC0tcHNkaXI9KiB8IC0tcHNkaT0qIHwg LS1wc2Q9KiB8IC0tcHM9KikNCiAgICBwc2Rpcj0kYWNfb3B0YXJnIDs7DQoNCiAgLXEgfCAtcXVp ZXQgfCAtLXF1aWV0IHwgLS1xdWllIHwgLS1xdWkgfCAtLXF1IHwgLS1xIFwNCiAgfCAtc2lsZW50 IHwgLS1zaWxlbnQgfCAtLXNpbGVuIHwgLS1zaWxlIHwgLS1zaWwpDQogICAgc2lsZW50PXllcyA7 Ow0KDQogIC1zYmluZGlyIHwgLS1zYmluZGlyIHwgLS1zYmluZGkgfCAtLXNiaW5kIHwgLS1zYmlu IHwgLS1zYmkgfCAtLXNiKQ0KICAgIGFjX3ByZXY9c2JpbmRpciA7Ow0KICAtc2JpbmRpcj0qIHwg LS1zYmluZGlyPSogfCAtLXNiaW5kaT0qIHwgLS1zYmluZD0qIHwgLS1zYmluPSogXA0KICB8IC0t c2JpPSogfCAtLXNiPSopDQogICAgc2JpbmRpcj0kYWNfb3B0YXJnIDs7DQoNCiAgLXNoYXJlZHN0 YXRlZGlyIHwgLS1zaGFyZWRzdGF0ZWRpciB8IC0tc2hhcmVkc3RhdGVkaSBcDQogIHwgLS1zaGFy ZWRzdGF0ZWQgfCAtLXNoYXJlZHN0YXRlIHwgLS1zaGFyZWRzdGF0IHwgLS1zaGFyZWRzdGEgXA0K ICB8IC0tc2hhcmVkc3QgfCAtLXNoYXJlZHMgfCAtLXNoYXJlZCB8IC0tc2hhcmUgfCAtLXNoYXIg XA0KICB8IC0tc2hhIHwgLS1zaCkNCiAgICBhY19wcmV2PXNoYXJlZHN0YXRlZGlyIDs7DQogIC1z aGFyZWRzdGF0ZWRpcj0qIHwgLS1zaGFyZWRzdGF0ZWRpcj0qIHwgLS1zaGFyZWRzdGF0ZWRpPSog XA0KICB8IC0tc2hhcmVkc3RhdGVkPSogfCAtLXNoYXJlZHN0YXRlPSogfCAtLXNoYXJlZHN0YXQ9 KiB8IC0tc2hhcmVkc3RhPSogXA0KICB8IC0tc2hhcmVkc3Q9KiB8IC0tc2hhcmVkcz0qIHwgLS1z aGFyZWQ9KiB8IC0tc2hhcmU9KiB8IC0tc2hhcj0qIFwNCiAgfCAtLXNoYT0qIHwgLS1zaD0qKQ0K ICAgIHNoYXJlZHN0YXRlZGlyPSRhY19vcHRhcmcgOzsNCg0KICAtc2l0ZSB8IC0tc2l0ZSB8IC0t c2l0KQ0KICAgIGFjX3ByZXY9c2l0ZSA7Ow0KICAtc2l0ZT0qIHwgLS1zaXRlPSogfCAtLXNpdD0q KQ0KICAgIHNpdGU9JGFjX29wdGFyZyA7Ow0KDQogIC1zcmNkaXIgfCAtLXNyY2RpciB8IC0tc3Jj ZGkgfCAtLXNyY2QgfCAtLXNyYyB8IC0tc3IpDQogICAgYWNfcHJldj1zcmNkaXIgOzsNCiAgLXNy Y2Rpcj0qIHwgLS1zcmNkaXI9KiB8IC0tc3JjZGk9KiB8IC0tc3JjZD0qIHwgLS1zcmM9KiB8IC0t c3I9KikNCiAgICBzcmNkaXI9JGFjX29wdGFyZyA7Ow0KDQogIC1zeXNjb25mZGlyIHwgLS1zeXNj b25mZGlyIHwgLS1zeXNjb25mZGkgfCAtLXN5c2NvbmZkIHwgLS1zeXNjb25mIFwNCiAgfCAtLXN5 c2NvbiB8IC0tc3lzY28gfCAtLXN5c2MgfCAtLXN5cyB8IC0tc3kpDQogICAgYWNfcHJldj1zeXNj b25mZGlyIDs7DQogIC1zeXNjb25mZGlyPSogfCAtLXN5c2NvbmZkaXI9KiB8IC0tc3lzY29uZmRp PSogfCAtLXN5c2NvbmZkPSogfCAtLXN5c2NvbmY9KiBcDQogIHwgLS1zeXNjb249KiB8IC0tc3lz Y289KiB8IC0tc3lzYz0qIHwgLS1zeXM9KiB8IC0tc3k9KikNCiAgICBzeXNjb25mZGlyPSRhY19v cHRhcmcgOzsNCg0KICAtdGFyZ2V0IHwgLS10YXJnZXQgfCAtLXRhcmdlIHwgLS10YXJnIHwgLS10 YXIgfCAtLXRhIHwgLS10KQ0KICAgIGFjX3ByZXY9dGFyZ2V0X2FsaWFzIDs7DQogIC10YXJnZXQ9 KiB8IC0tdGFyZ2V0PSogfCAtLXRhcmdlPSogfCAtLXRhcmc9KiB8IC0tdGFyPSogfCAtLXRhPSog fCAtLXQ9KikNCiAgICB0YXJnZXRfYWxpYXM9JGFjX29wdGFyZyA7Ow0KDQogIC12IHwgLXZlcmJv c2UgfCAtLXZlcmJvc2UgfCAtLXZlcmJvcyB8IC0tdmVyYm8gfCAtLXZlcmIpDQogICAgdmVyYm9z ZT15ZXMgOzsNCg0KICAtdmVyc2lvbiB8IC0tdmVyc2lvbiB8IC0tdmVyc2lvIHwgLS12ZXJzaSB8 IC0tdmVycyB8IC1WKQ0KICAgIGFjX2luaXRfdmVyc2lvbj06IDs7DQoNCiAgLXdpdGgtKiB8IC0t d2l0aC0qKQ0KICAgIGFjX3VzZXJvcHQ9YGV4cHIgIngkYWNfb3B0aW9uIiA6ICd4LSp3aXRoLVwo W149XSpcKSdgDQogICAgIyBSZWplY3QgbmFtZXMgdGhhdCBhcmUgbm90IHZhbGlkIHNoZWxsIHZh cmlhYmxlIG5hbWVzLg0KICAgIGV4cHIgIngkYWNfdXNlcm9wdCIgOiAiLipbXi0rLl8kYXNfY3Jf YWxudW1dIiA+L2Rldi9udWxsICYmDQogICAgICBhc19mbl9lcnJvciAkPyAiaW52YWxpZCBwYWNr YWdlIG5hbWU6ICRhY191c2Vyb3B0Ig0KICAgIGFjX3VzZXJvcHRfb3JpZz0kYWNfdXNlcm9wdA0K ICAgIGFjX3VzZXJvcHQ9YCRhc19lY2hvICIkYWNfdXNlcm9wdCIgfCBzZWQgJ3MvWy0rLl0vXy9n J2ANCiAgICBjYXNlICRhY191c2VyX29wdHMgaW4NCiAgICAgICoiDQoid2l0aF8kYWNfdXNlcm9w dCINCiIqKSA7Ow0KICAgICAgKikgYWNfdW5yZWNvZ25pemVkX29wdHM9IiRhY191bnJlY29nbml6 ZWRfb3B0cyRhY191bnJlY29nbml6ZWRfc2VwLS13aXRoLSRhY191c2Vyb3B0X29yaWciDQoJIGFj X3VucmVjb2duaXplZF9zZXA9JywgJzs7DQogICAgZXNhYw0KICAgIGV2YWwgd2l0aF8kYWNfdXNl cm9wdD1cJGFjX29wdGFyZyA7Ow0KDQogIC13aXRob3V0LSogfCAtLXdpdGhvdXQtKikNCiAgICBh Y191c2Vyb3B0PWBleHByICJ4JGFjX29wdGlvbiIgOiAneC0qd2l0aG91dC1cKC4qXCknYA0KICAg ICMgUmVqZWN0IG5hbWVzIHRoYXQgYXJlIG5vdCB2YWxpZCBzaGVsbCB2YXJpYWJsZSBuYW1lcy4N CiAgICBleHByICJ4JGFjX3VzZXJvcHQiIDogIi4qW14tKy5fJGFzX2NyX2FsbnVtXSIgPi9kZXYv bnVsbCAmJg0KICAgICAgYXNfZm5fZXJyb3IgJD8gImludmFsaWQgcGFja2FnZSBuYW1lOiAkYWNf dXNlcm9wdCINCiAgICBhY191c2Vyb3B0X29yaWc9JGFjX3VzZXJvcHQNCiAgICBhY191c2Vyb3B0 PWAkYXNfZWNobyAiJGFjX3VzZXJvcHQiIHwgc2VkICdzL1stKy5dL18vZydgDQogICAgY2FzZSAk YWNfdXNlcl9vcHRzIGluDQogICAgICAqIg0KIndpdGhfJGFjX3VzZXJvcHQiDQoiKikgOzsNCiAg ICAgICopIGFjX3VucmVjb2duaXplZF9vcHRzPSIkYWNfdW5yZWNvZ25pemVkX29wdHMkYWNfdW5y ZWNvZ25pemVkX3NlcC0td2l0aG91dC0kYWNfdXNlcm9wdF9vcmlnIg0KCSBhY191bnJlY29nbml6 ZWRfc2VwPScsICc7Ow0KICAgIGVzYWMNCiAgICBldmFsIHdpdGhfJGFjX3VzZXJvcHQ9bm8gOzsN Cg0KICAtLXgpDQogICAgIyBPYnNvbGV0ZTsgdXNlIC0td2l0aC14Lg0KICAgIHdpdGhfeD15ZXMg OzsNCg0KICAteC1pbmNsdWRlcyB8IC0teC1pbmNsdWRlcyB8IC0teC1pbmNsdWRlIHwgLS14LWlu Y2x1ZCB8IC0teC1pbmNsdSBcDQogIHwgLS14LWluY2wgfCAtLXgtaW5jIHwgLS14LWluIHwgLS14 LWkpDQogICAgYWNfcHJldj14X2luY2x1ZGVzIDs7DQogIC14LWluY2x1ZGVzPSogfCAtLXgtaW5j bHVkZXM9KiB8IC0teC1pbmNsdWRlPSogfCAtLXgtaW5jbHVkPSogfCAtLXgtaW5jbHU9KiBcDQog IHwgLS14LWluY2w9KiB8IC0teC1pbmM9KiB8IC0teC1pbj0qIHwgLS14LWk9KikNCiAgICB4X2lu Y2x1ZGVzPSRhY19vcHRhcmcgOzsNCg0KICAteC1saWJyYXJpZXMgfCAtLXgtbGlicmFyaWVzIHwg LS14LWxpYnJhcmllIHwgLS14LWxpYnJhcmkgXA0KICB8IC0teC1saWJyYXIgfCAtLXgtbGlicmEg fCAtLXgtbGliciB8IC0teC1saWIgfCAtLXgtbGkgfCAtLXgtbCkNCiAgICBhY19wcmV2PXhfbGli cmFyaWVzIDs7DQogIC14LWxpYnJhcmllcz0qIHwgLS14LWxpYnJhcmllcz0qIHwgLS14LWxpYnJh cmllPSogfCAtLXgtbGlicmFyaT0qIFwNCiAgfCAtLXgtbGlicmFyPSogfCAtLXgtbGlicmE9KiB8 IC0teC1saWJyPSogfCAtLXgtbGliPSogfCAtLXgtbGk9KiB8IC0teC1sPSopDQogICAgeF9saWJy YXJpZXM9JGFjX29wdGFyZyA7Ow0KDQogIC0qKSBhc19mbl9lcnJvciAkPyAidW5yZWNvZ25pemVk IG9wdGlvbjogXGAkYWNfb3B0aW9uJw0KVHJ5IFxgJDAgLS1oZWxwJyBmb3IgbW9yZSBpbmZvcm1h dGlvbiINCiAgICA7Ow0KDQogICo9KikNCiAgICBhY19lbnZ2YXI9YGV4cHIgIngkYWNfb3B0aW9u IiA6ICd4XChbXj1dKlwpPSdgDQogICAgIyBSZWplY3QgbmFtZXMgdGhhdCBhcmUgbm90IHZhbGlk IHNoZWxsIHZhcmlhYmxlIG5hbWVzLg0KICAgIGNhc2UgJGFjX2VudnZhciBpbiAjKA0KICAgICAg JycgfCBbMC05XSogfCAqWyFfJGFzX2NyX2FsbnVtXSogKQ0KICAgICAgYXNfZm5fZXJyb3IgJD8g ImludmFsaWQgdmFyaWFibGUgbmFtZTogXGAkYWNfZW52dmFyJyIgOzsNCiAgICBlc2FjDQogICAg ZXZhbCAkYWNfZW52dmFyPVwkYWNfb3B0YXJnDQogICAgZXhwb3J0ICRhY19lbnZ2YXIgOzsNCg0K ICAqKQ0KICAgICMgRklYTUU6IHNob3VsZCBiZSByZW1vdmVkIGluIGF1dG9jb25mIDMuMC4NCiAg ICAkYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiB5b3Ugc2hvdWxkIHVzZSAtLWJ1aWxkLCAtLWhv c3QsIC0tdGFyZ2V0IiA+JjINCiAgICBleHByICJ4JGFjX29wdGlvbiIgOiAiLipbXi0uXyRhc19j cl9hbG51bV0iID4vZGV2L251bGwgJiYNCiAgICAgICRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6 IGludmFsaWQgaG9zdCB0eXBlOiAkYWNfb3B0aW9uIiA+JjINCiAgICA6ICIke2J1aWxkX2FsaWFz PSRhY19vcHRpb259ICR7aG9zdF9hbGlhcz0kYWNfb3B0aW9ufSAke3RhcmdldF9hbGlhcz0kYWNf b3B0aW9ufSINCiAgICA7Ow0KDQogIGVzYWMNCmRvbmUNCg0KaWYgdGVzdCAtbiAiJGFjX3ByZXYi OyB0aGVuDQogIGFjX29wdGlvbj0tLWBlY2hvICRhY19wcmV2IHwgc2VkICdzL18vLS9nJ2ANCiAg YXNfZm5fZXJyb3IgJD8gIm1pc3NpbmcgYXJndW1lbnQgdG8gJGFjX29wdGlvbiINCmZpDQoNCmlm IHRlc3QgLW4gIiRhY191bnJlY29nbml6ZWRfb3B0cyI7IHRoZW4NCiAgY2FzZSAkZW5hYmxlX29w dGlvbl9jaGVja2luZyBpbg0KICAgIG5vKSA7Ow0KICAgIGZhdGFsKSBhc19mbl9lcnJvciAkPyAi dW5yZWNvZ25pemVkIG9wdGlvbnM6ICRhY191bnJlY29nbml6ZWRfb3B0cyIgOzsNCiAgICAqKSAg ICAgJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogdW5yZWNvZ25pemVkIG9wdGlvbnM6ICRhY191 bnJlY29nbml6ZWRfb3B0cyIgPiYyIDs7DQogIGVzYWMNCmZpDQoNCiMgQ2hlY2sgYWxsIGRpcmVj dG9yeSBhcmd1bWVudHMgZm9yIGNvbnNpc3RlbmN5Lg0KZm9yIGFjX3ZhciBpbglleGVjX3ByZWZp eCBwcmVmaXggYmluZGlyIHNiaW5kaXIgbGliZXhlY2RpciBkYXRhcm9vdGRpciBcDQoJCWRhdGFk aXIgc3lzY29uZmRpciBzaGFyZWRzdGF0ZWRpciBsb2NhbHN0YXRlZGlyIGluY2x1ZGVkaXIgXA0K CQlvbGRpbmNsdWRlZGlyIGRvY2RpciBpbmZvZGlyIGh0bWxkaXIgZHZpZGlyIHBkZmRpciBwc2Rp ciBcDQoJCWxpYmRpciBsb2NhbGVkaXIgbWFuZGlyDQpkbw0KICBldmFsIGFjX3ZhbD1cJCRhY192 YXINCiAgIyBSZW1vdmUgdHJhaWxpbmcgc2xhc2hlcy4NCiAgY2FzZSAkYWNfdmFsIGluDQogICAg Ki8gKQ0KICAgICAgYWNfdmFsPWBleHByICJYJGFjX3ZhbCIgOiAnWFwoLipbXi9dXCknIFx8ICJY JGFjX3ZhbCIgOiAnWFwoLipcKSdgDQogICAgICBldmFsICRhY192YXI9XCRhY192YWw7Ow0KICBl c2FjDQogICMgQmUgc3VyZSB0byBoYXZlIGFic29sdXRlIGRpcmVjdG9yeSBuYW1lcy4NCiAgY2Fz ZSAkYWNfdmFsIGluDQogICAgW1xcLyRdKiB8ID86W1xcL10qICkgIGNvbnRpbnVlOzsNCiAgICBO T05FIHwgJycgKSBjYXNlICRhY192YXIgaW4gKnByZWZpeCApIGNvbnRpbnVlOzsgZXNhYzs7DQog IGVzYWMNCiAgYXNfZm5fZXJyb3IgJD8gImV4cGVjdGVkIGFuIGFic29sdXRlIGRpcmVjdG9yeSBu YW1lIGZvciAtLSRhY192YXI6ICRhY192YWwiDQpkb25lDQoNCiMgVGhlcmUgbWlnaHQgYmUgcGVv cGxlIHdobyBkZXBlbmQgb24gdGhlIG9sZCBicm9rZW4gYmVoYXZpb3I6IGAkaG9zdCcNCiMgdXNl ZCB0byBob2xkIHRoZSBhcmd1bWVudCBvZiAtLWhvc3QgZXRjLg0KIyBGSVhNRTogVG8gcmVtb3Zl IHNvbWUgZGF5Lg0KYnVpbGQ9JGJ1aWxkX2FsaWFzDQpob3N0PSRob3N0X2FsaWFzDQp0YXJnZXQ9 JHRhcmdldF9hbGlhcw0KDQojIEZJWE1FOiBUbyByZW1vdmUgc29tZSBkYXkuDQppZiB0ZXN0ICJ4 JGhvc3RfYWxpYXMiICE9IHg7IHRoZW4NCiAgaWYgdGVzdCAieCRidWlsZF9hbGlhcyIgPSB4OyB0 aGVuDQogICAgY3Jvc3NfY29tcGlsaW5nPW1heWJlDQogICAgJGFzX2VjaG8gIiRhc19tZTogV0FS TklORzogaWYgeW91IHdhbnRlZCB0byBzZXQgdGhlIC0tYnVpbGQgdHlwZSwgZG9uJ3QgdXNlIC0t aG9zdC4NCiAgICBJZiBhIGNyb3NzIGNvbXBpbGVyIGlzIGRldGVjdGVkIHRoZW4gY3Jvc3MgY29t cGlsZSBtb2RlIHdpbGwgYmUgdXNlZCIgPiYyDQogIGVsaWYgdGVzdCAieCRidWlsZF9hbGlhcyIg IT0gIngkaG9zdF9hbGlhcyI7IHRoZW4NCiAgICBjcm9zc19jb21waWxpbmc9eWVzDQogIGZpDQpm aQ0KDQphY190b29sX3ByZWZpeD0NCnRlc3QgLW4gIiRob3N0X2FsaWFzIiAmJiBhY190b29sX3By ZWZpeD0kaG9zdF9hbGlhcy0NCg0KdGVzdCAiJHNpbGVudCIgPSB5ZXMgJiYgZXhlYyA2Pi9kZXYv bnVsbA0KDQoNCmFjX3B3ZD1gcHdkYCAmJiB0ZXN0IC1uICIkYWNfcHdkIiAmJg0KYWNfbHNfZGk9 YGxzIC1kaSAuYCAmJg0KYWNfcHdkX2xzX2RpPWBjZCAiJGFjX3B3ZCIgJiYgbHMgLWRpIC5gIHx8 DQogIGFzX2ZuX2Vycm9yICQ/ICJ3b3JraW5nIGRpcmVjdG9yeSBjYW5ub3QgYmUgZGV0ZXJtaW5l ZCINCnRlc3QgIlgkYWNfbHNfZGkiID0gIlgkYWNfcHdkX2xzX2RpIiB8fA0KICBhc19mbl9lcnJv ciAkPyAicHdkIGRvZXMgbm90IHJlcG9ydCBuYW1lIG9mIHdvcmtpbmcgZGlyZWN0b3J5Ig0KDQoN CiMgRmluZCB0aGUgc291cmNlIGZpbGVzLCBpZiBsb2NhdGlvbiB3YXMgbm90IHNwZWNpZmllZC4N CmlmIHRlc3QgLXogIiRzcmNkaXIiOyB0aGVuDQogIGFjX3NyY2Rpcl9kZWZhdWx0ZWQ9eWVzDQog ICMgVHJ5IHRoZSBkaXJlY3RvcnkgY29udGFpbmluZyB0aGlzIHNjcmlwdCwgdGhlbiB0aGUgcGFy ZW50IGRpcmVjdG9yeS4NCiAgYWNfY29uZmRpcj1gJGFzX2Rpcm5hbWUgLS0gIiRhc19teXNlbGYi IHx8DQokYXNfZXhwciBYIiRhc19teXNlbGYiIDogJ1hcKC4qW14vXVwpLy8qW14vXVteL10qLyok JyBcfCBcDQoJIFgiJGFzX215c2VsZiIgOiAnWFwoLy9cKVteL10nIFx8IFwNCgkgWCIkYXNfbXlz ZWxmIiA6ICdYXCgvL1wpJCcgXHwgXA0KCSBYIiRhc19teXNlbGYiIDogJ1hcKC9cKScgXHwgLiAy Pi9kZXYvbnVsbCB8fA0KJGFzX2VjaG8gWCIkYXNfbXlzZWxmIiB8DQogICAgc2VkICcvXlhcKC4q W14vXVwpXC9cLypbXi9dW14vXSpcLyokL3sNCgkgICAgcy8vXDEvDQoJICAgIHENCgkgIH0NCgkg IC9eWFwoXC9cL1wpW14vXS4qL3sNCgkgICAgcy8vXDEvDQoJICAgIHENCgkgIH0NCgkgIC9eWFwo XC9cL1wpJC97DQoJICAgIHMvL1wxLw0KCSAgICBxDQoJICB9DQoJICAvXlhcKFwvXCkuKi97DQoJ ICAgIHMvL1wxLw0KCSAgICBxDQoJICB9DQoJICBzLy4qLy4vOyBxJ2ANCiAgc3JjZGlyPSRhY19j b25mZGlyDQogIGlmIHRlc3QgISAtciAiJHNyY2Rpci8kYWNfdW5pcXVlX2ZpbGUiOyB0aGVuDQog ICAgc3JjZGlyPS4uDQogIGZpDQplbHNlDQogIGFjX3NyY2Rpcl9kZWZhdWx0ZWQ9bm8NCmZpDQpp ZiB0ZXN0ICEgLXIgIiRzcmNkaXIvJGFjX3VuaXF1ZV9maWxlIjsgdGhlbg0KICB0ZXN0ICIkYWNf c3JjZGlyX2RlZmF1bHRlZCIgPSB5ZXMgJiYgc3JjZGlyPSIkYWNfY29uZmRpciBvciAuLiINCiAg YXNfZm5fZXJyb3IgJD8gImNhbm5vdCBmaW5kIHNvdXJjZXMgKCRhY191bmlxdWVfZmlsZSkgaW4g JHNyY2RpciINCmZpDQphY19tc2c9InNvdXJjZXMgYXJlIGluICRzcmNkaXIsIGJ1dCBcYGNkICRz cmNkaXInIGRvZXMgbm90IHdvcmsiDQphY19hYnNfY29uZmRpcj1gKA0KCWNkICIkc3JjZGlyIiAm JiB0ZXN0IC1yICIuLyRhY191bmlxdWVfZmlsZSIgfHwgYXNfZm5fZXJyb3IgJD8gIiRhY19tc2ci DQoJcHdkKWANCiMgV2hlbiBidWlsZGluZyBpbiBwbGFjZSwgc2V0IHNyY2Rpcj0uDQppZiB0ZXN0 ICIkYWNfYWJzX2NvbmZkaXIiID0gIiRhY19wd2QiOyB0aGVuDQogIHNyY2Rpcj0uDQpmaQ0KIyBS ZW1vdmUgdW5uZWNlc3NhcnkgdHJhaWxpbmcgc2xhc2hlcyBmcm9tIHNyY2Rpci4NCiMgRG91Ymxl IHNsYXNoZXMgaW4gZmlsZSBuYW1lcyBpbiBvYmplY3QgZmlsZSBkZWJ1Z2dpbmcgaW5mbw0KIyBt ZXNzIHVwIE0teCBnZGIgaW4gRW1hY3MuDQpjYXNlICRzcmNkaXIgaW4NCiovKSBzcmNkaXI9YGV4 cHIgIlgkc3JjZGlyIiA6ICdYXCguKlteL11cKScgXHwgIlgkc3JjZGlyIiA6ICdYXCguKlwpJ2A7 Ow0KZXNhYw0KZm9yIGFjX3ZhciBpbiAkYWNfcHJlY2lvdXNfdmFyczsgZG8NCiAgZXZhbCBhY19l bnZfJHthY192YXJ9X3NldD1cJHske2FjX3Zhcn0rc2V0fQ0KICBldmFsIGFjX2Vudl8ke2FjX3Zh cn1fdmFsdWU9XCQke2FjX3Zhcn0NCiAgZXZhbCBhY19jdl9lbnZfJHthY192YXJ9X3NldD1cJHsk e2FjX3Zhcn0rc2V0fQ0KICBldmFsIGFjX2N2X2Vudl8ke2FjX3Zhcn1fdmFsdWU9XCQke2FjX3Zh cn0NCmRvbmUNCg0KIw0KIyBSZXBvcnQgdGhlIC0taGVscCBtZXNzYWdlLg0KIw0KaWYgdGVzdCAi JGFjX2luaXRfaGVscCIgPSAibG9uZyI7IHRoZW4NCiAgIyBPbWl0IHNvbWUgaW50ZXJuYWwgb3Ig b2Jzb2xldGUgb3B0aW9ucyB0byBtYWtlIHRoZSBsaXN0IGxlc3MgaW1wb3NpbmcuDQogICMgVGhp cyBtZXNzYWdlIGlzIHRvbyBsb25nIHRvIGJlIGEgc3RyaW5nIGluIHRoZSBBL1VYIDMuMSBzaC4N CiAgY2F0IDw8X0FDRU9GDQpcYGNvbmZpZ3VyZScgY29uZmlndXJlcyBHTlUgY29yZXV0aWxzIDgu MTIgdG8gYWRhcHQgdG8gbWFueSBraW5kcyBvZiBzeXN0ZW1zLg0KDQpVc2FnZTogJDAgW09QVElP Tl0uLi4gW1ZBUj1WQUxVRV0uLi4NCg0KVG8gYXNzaWduIGVudmlyb25tZW50IHZhcmlhYmxlcyAo ZS5nLiwgQ0MsIENGTEFHUy4uLiksIHNwZWNpZnkgdGhlbSBhcw0KVkFSPVZBTFVFLiAgU2VlIGJl bG93IGZvciBkZXNjcmlwdGlvbnMgb2Ygc29tZSBvZiB0aGUgdXNlZnVsIHZhcmlhYmxlcy4NCg0K RGVmYXVsdHMgZm9yIHRoZSBvcHRpb25zIGFyZSBzcGVjaWZpZWQgaW4gYnJhY2tldHMuDQoNCkNv bmZpZ3VyYXRpb246DQogIC1oLCAtLWhlbHAgICAgICAgICAgICAgIGRpc3BsYXkgdGhpcyBoZWxw IGFuZCBleGl0DQogICAgICAtLWhlbHA9c2hvcnQgICAgICAgIGRpc3BsYXkgb3B0aW9ucyBzcGVj aWZpYyB0byB0aGlzIHBhY2thZ2UNCiAgICAgIC0taGVscD1yZWN1cnNpdmUgICAgZGlzcGxheSB0 aGUgc2hvcnQgaGVscCBvZiBhbGwgdGhlIGluY2x1ZGVkIHBhY2thZ2VzDQogIC1WLCAtLXZlcnNp b24gICAgICAgICAgIGRpc3BsYXkgdmVyc2lvbiBpbmZvcm1hdGlvbiBhbmQgZXhpdA0KICAtcSwg LS1xdWlldCwgLS1zaWxlbnQgICBkbyBub3QgcHJpbnQgXGBjaGVja2luZyAuLi4nIG1lc3NhZ2Vz DQogICAgICAtLWNhY2hlLWZpbGU9RklMRSAgIGNhY2hlIHRlc3QgcmVzdWx0cyBpbiBGSUxFIFtk aXNhYmxlZF0NCiAgLUMsIC0tY29uZmlnLWNhY2hlICAgICAgYWxpYXMgZm9yIFxgLS1jYWNoZS1m aWxlPWNvbmZpZy5jYWNoZScNCiAgLW4sIC0tbm8tY3JlYXRlICAgICAgICAgZG8gbm90IGNyZWF0 ZSBvdXRwdXQgZmlsZXMNCiAgICAgIC0tc3JjZGlyPURJUiAgICAgICAgZmluZCB0aGUgc291cmNl cyBpbiBESVIgW2NvbmZpZ3VyZSBkaXIgb3IgXGAuLiddDQoNCkluc3RhbGxhdGlvbiBkaXJlY3Rv cmllczoNCiAgLS1wcmVmaXg9UFJFRklYICAgICAgICAgaW5zdGFsbCBhcmNoaXRlY3R1cmUtaW5k ZXBlbmRlbnQgZmlsZXMgaW4gUFJFRklYDQogICAgICAgICAgICAgICAgICAgICAgICAgIFskYWNf ZGVmYXVsdF9wcmVmaXhdDQogIC0tZXhlYy1wcmVmaXg9RVBSRUZJWCAgIGluc3RhbGwgYXJjaGl0 ZWN0dXJlLWRlcGVuZGVudCBmaWxlcyBpbiBFUFJFRklYDQogICAgICAgICAgICAgICAgICAgICAg ICAgIFtQUkVGSVhdDQoNCkJ5IGRlZmF1bHQsIFxgbWFrZSBpbnN0YWxsJyB3aWxsIGluc3RhbGwg YWxsIHRoZSBmaWxlcyBpbg0KXGAkYWNfZGVmYXVsdF9wcmVmaXgvYmluJywgXGAkYWNfZGVmYXVs dF9wcmVmaXgvbGliJyBldGMuICBZb3UgY2FuIHNwZWNpZnkNCmFuIGluc3RhbGxhdGlvbiBwcmVm aXggb3RoZXIgdGhhbiBcYCRhY19kZWZhdWx0X3ByZWZpeCcgdXNpbmcgXGAtLXByZWZpeCcsDQpm b3IgaW5zdGFuY2UgXGAtLXByZWZpeD1cJEhPTUUnLg0KDQpGb3IgYmV0dGVyIGNvbnRyb2wsIHVz ZSB0aGUgb3B0aW9ucyBiZWxvdy4NCg0KRmluZSB0dW5pbmcgb2YgdGhlIGluc3RhbGxhdGlvbiBk aXJlY3RvcmllczoNCiAgLS1iaW5kaXI9RElSICAgICAgICAgICAgdXNlciBleGVjdXRhYmxlcyBb RVBSRUZJWC9iaW5dDQogIC0tc2JpbmRpcj1ESVIgICAgICAgICAgIHN5c3RlbSBhZG1pbiBleGVj dXRhYmxlcyBbRVBSRUZJWC9zYmluXQ0KICAtLWxpYmV4ZWNkaXI9RElSICAgICAgICBwcm9ncmFt IGV4ZWN1dGFibGVzIFtFUFJFRklYL2xpYmV4ZWNdDQogIC0tc3lzY29uZmRpcj1ESVIgICAgICAg IHJlYWQtb25seSBzaW5nbGUtbWFjaGluZSBkYXRhIFtQUkVGSVgvZXRjXQ0KICAtLXNoYXJlZHN0 YXRlZGlyPURJUiAgICBtb2RpZmlhYmxlIGFyY2hpdGVjdHVyZS1pbmRlcGVuZGVudCBkYXRhIFtQ UkVGSVgvY29tXQ0KICAtLWxvY2Fsc3RhdGVkaXI9RElSICAgICBtb2RpZmlhYmxlIHNpbmdsZS1t YWNoaW5lIGRhdGEgW1BSRUZJWC92YXJdDQogIC0tbGliZGlyPURJUiAgICAgICAgICAgIG9iamVj dCBjb2RlIGxpYnJhcmllcyBbRVBSRUZJWC9saWJdDQogIC0taW5jbHVkZWRpcj1ESVIgICAgICAg IEMgaGVhZGVyIGZpbGVzIFtQUkVGSVgvaW5jbHVkZV0NCiAgLS1vbGRpbmNsdWRlZGlyPURJUiAg ICAgQyBoZWFkZXIgZmlsZXMgZm9yIG5vbi1nY2MgWy91c3IvaW5jbHVkZV0NCiAgLS1kYXRhcm9v dGRpcj1ESVIgICAgICAgcmVhZC1vbmx5IGFyY2guLWluZGVwZW5kZW50IGRhdGEgcm9vdCBbUFJF RklYL3NoYXJlXQ0KICAtLWRhdGFkaXI9RElSICAgICAgICAgICByZWFkLW9ubHkgYXJjaGl0ZWN0 dXJlLWluZGVwZW5kZW50IGRhdGEgW0RBVEFST09URElSXQ0KICAtLWluZm9kaXI9RElSICAgICAg ICAgICBpbmZvIGRvY3VtZW50YXRpb24gW0RBVEFST09URElSL2luZm9dDQogIC0tbG9jYWxlZGly PURJUiAgICAgICAgIGxvY2FsZS1kZXBlbmRlbnQgZGF0YSBbREFUQVJPT1RESVIvbG9jYWxlXQ0K ICAtLW1hbmRpcj1ESVIgICAgICAgICAgICBtYW4gZG9jdW1lbnRhdGlvbiBbREFUQVJPT1RESVIv bWFuXQ0KICAtLWRvY2Rpcj1ESVIgICAgICAgICAgICBkb2N1bWVudGF0aW9uIHJvb3QgW0RBVEFS T09URElSL2RvYy9jb3JldXRpbHNdDQogIC0taHRtbGRpcj1ESVIgICAgICAgICAgIGh0bWwgZG9j dW1lbnRhdGlvbiBbRE9DRElSXQ0KICAtLWR2aWRpcj1ESVIgICAgICAgICAgICBkdmkgZG9jdW1l bnRhdGlvbiBbRE9DRElSXQ0KICAtLXBkZmRpcj1ESVIgICAgICAgICAgICBwZGYgZG9jdW1lbnRh dGlvbiBbRE9DRElSXQ0KICAtLXBzZGlyPURJUiAgICAgICAgICAgICBwcyBkb2N1bWVudGF0aW9u IFtET0NESVJdDQpfQUNFT0YNCg0KICBjYXQgPDxcX0FDRU9GDQoNClByb2dyYW0gbmFtZXM6DQog IC0tcHJvZ3JhbS1wcmVmaXg9UFJFRklYICAgICAgICAgICAgcHJlcGVuZCBQUkVGSVggdG8gaW5z dGFsbGVkIHByb2dyYW0gbmFtZXMNCiAgLS1wcm9ncmFtLXN1ZmZpeD1TVUZGSVggICAgICAgICAg ICBhcHBlbmQgU1VGRklYIHRvIGluc3RhbGxlZCBwcm9ncmFtIG5hbWVzDQogIC0tcHJvZ3JhbS10 cmFuc2Zvcm0tbmFtZT1QUk9HUkFNICAgcnVuIHNlZCBQUk9HUkFNIG9uIGluc3RhbGxlZCBwcm9n cmFtIG5hbWVzDQoNClN5c3RlbSB0eXBlczoNCiAgLS1idWlsZD1CVUlMRCAgICAgY29uZmlndXJl IGZvciBidWlsZGluZyBvbiBCVUlMRCBbZ3Vlc3NlZF0NCiAgLS1ob3N0PUhPU1QgICAgICAgY3Jv c3MtY29tcGlsZSB0byBidWlsZCBwcm9ncmFtcyB0byBydW4gb24gSE9TVCBbQlVJTERdDQpfQUNF T0YNCmZpDQoNCmlmIHRlc3QgLW4gIiRhY19pbml0X2hlbHAiOyB0aGVuDQogIGNhc2UgJGFjX2lu aXRfaGVscCBpbg0KICAgICBzaG9ydCB8IHJlY3Vyc2l2ZSApIGVjaG8gIkNvbmZpZ3VyYXRpb24g b2YgR05VIGNvcmV1dGlscyA4LjEyOiI7Ow0KICAgZXNhYw0KICBjYXQgPDxcX0FDRU9GDQoNCk9w dGlvbmFsIEZlYXR1cmVzOg0KICAtLWRpc2FibGUtb3B0aW9uLWNoZWNraW5nICBpZ25vcmUgdW5y ZWNvZ25pemVkIC0tZW5hYmxlLy0td2l0aCBvcHRpb25zDQogIC0tZGlzYWJsZS1GRUFUVVJFICAg ICAgIGRvIG5vdCBpbmNsdWRlIEZFQVRVUkUgKHNhbWUgYXMgLS1lbmFibGUtRkVBVFVSRT1ubykN CiAgLS1lbmFibGUtRkVBVFVSRVs9QVJHXSAgaW5jbHVkZSBGRUFUVVJFIFtBUkc9eWVzXQ0KICAt LWVuYWJsZS1zaWxlbnQtcnVsZXMgICBsZXNzIHZlcmJvc2UgYnVpbGQgb3V0cHV0ICh1bmRvOiBg bWFrZSBWPTEnKQ0KICAtLWRpc2FibGUtc2lsZW50LXJ1bGVzICB2ZXJib3NlIGJ1aWxkIG91dHB1 dCAodW5kbzogYG1ha2UgVj0wJykNCiAgLS1lbmFibGUtZGVwZW5kZW5jeS10cmFja2luZw0KICAg ICAgICAgICAgICAgICAgICAgICAgICBkbyBub3QgcmVqZWN0IHNsb3cgZGVwZW5kZW5jeSBleHRy YWN0b3JzDQogIC0tZGlzYWJsZS1kZXBlbmRlbmN5LXRyYWNraW5nDQogICAgICAgICAgICAgICAg ICAgICAgICAgIHNwZWVkcyB1cCBvbmUtdGltZSBidWlsZA0KICAtLWVuYWJsZS10aHJlYWRzPXtw b3NpeHxzb2xhcmlzfHB0aHx3aW4zMn0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgc3BlY2lm eSBtdWx0aXRocmVhZGluZyBBUEkNCiAgLS1kaXNhYmxlLXRocmVhZHMgICAgICAgYnVpbGQgd2l0 aG91dCBtdWx0aXRocmVhZCBzYWZldHkNCiAgLS1kaXNhYmxlLWFjbCAgICAgICAgICAgZG8gbm90 IHN1cHBvcnQgQUNMcw0KICAtLWRpc2FibGUtYXNzZXJ0ICAgICAgICB0dXJuIG9mZiBhc3NlcnRp b25zDQogIC0tZGlzYWJsZS1ycGF0aCAgICAgICAgIGRvIG5vdCBoYXJkY29kZSBydW50aW1lIGxp YnJhcnkgcGF0aHMNCiAgLS1kaXNhYmxlLWxhcmdlZmlsZSAgICAgb21pdCBzdXBwb3J0IGZvciBs YXJnZSBmaWxlcw0KICAtLWRpc2FibGUteGF0dHIgICAgICAgICBkbyBub3Qgc3VwcG9ydCBleHRl bmRlZCBhdHRyaWJ1dGVzDQogIC0tZGlzYWJsZS1saWJjYXAgICAgICAgIGRpc2FibGUgbGliY2Fw IHN1cHBvcnQNCiAgLS1lbmFibGUtZ2NjLXdhcm5pbmdzICAgdHVybiBvbiBsb3RzIG9mIEdDQyB3 YXJuaW5ncyAoZm9yIGRldmVsb3BlcnMpDQogIC0tZW5hYmxlLWluc3RhbGwtcHJvZ3JhbT1QUk9H X0xJU1QNCiAgICAgICAgICAgICAgICAgICAgICAgICAgaW5zdGFsbCB0aGUgcHJvZ3JhbXMgaW4g UFJPR19MSVNUIChjb21tYS1zZXBhcmF0ZWQsDQogICAgICAgICAgICAgICAgICAgICAgICAgIGRl ZmF1bHQ6IG5vbmUpDQogIC0tZW5hYmxlLW5vLWluc3RhbGwtcHJvZ3JhbT1QUk9HX0xJU1QNCiAg ICAgICAgICAgICAgICAgICAgICAgICAgZG8gTk9UIGluc3RhbGwgdGhlIHByb2dyYW1zIGluIFBS T0dfTElTVA0KICAgICAgICAgICAgICAgICAgICAgICAgICAoY29tbWEtc2VwYXJhdGVkLCBkZWZh dWx0OiBhcmNoLGhvc3RuYW1lLHN1KQ0KICAtLWRpc2FibGUtbmxzICAgICAgICAgICBkbyBub3Qg dXNlIE5hdGl2ZSBMYW5ndWFnZSBTdXBwb3J0DQoNCk9wdGlvbmFsIFBhY2thZ2VzOg0KICAtLXdp dGgtUEFDS0FHRVs9QVJHXSAgICB1c2UgUEFDS0FHRSBbQVJHPXllc10NCiAgLS13aXRob3V0LVBB Q0tBR0UgICAgICAgZG8gbm90IHVzZSBQQUNLQUdFIChzYW1lIGFzIC0td2l0aC1QQUNLQUdFPW5v KQ0KICAtLXdpdGgtZ251LWxkICAgICAgICAgICBhc3N1bWUgdGhlIEMgY29tcGlsZXIgdXNlcyBH TlUgbGQgZGVmYXVsdD1ubw0KICAtLXdpdGgtbGliaWNvbnYtcHJlZml4Wz1ESVJdICBzZWFyY2gg Zm9yIGxpYmljb252IGluIERJUi9pbmNsdWRlIGFuZCBESVIvbGliDQogIC0td2l0aG91dC1saWJp Y29udi1wcmVmaXggICAgIGRvbid0IHNlYXJjaCBmb3IgbGliaWNvbnYgaW4gaW5jbHVkZWRpciBh bmQgbGliZGlyDQogIC0td2l0aC1saWJwdGgtcHJlZml4Wz1ESVJdICBzZWFyY2ggZm9yIGxpYnB0 aCBpbiBESVIvaW5jbHVkZSBhbmQgRElSL2xpYg0KICAtLXdpdGhvdXQtbGlicHRoLXByZWZpeCAg ICAgZG9uJ3Qgc2VhcmNoIGZvciBsaWJwdGggaW4gaW5jbHVkZWRpciBhbmQgbGliZGlyDQogIC0t d2l0aG91dC1pbmNsdWRlZC1yZWdleA0KICAgICAgICAgICAgICAgICAgICAgICAgICBkb24ndCBj b21waWxlIHJlZ2V4OyB0aGlzIGlzIHRoZSBkZWZhdWx0IG9uIHN5c3RlbXMNCiAgICAgICAgICAg ICAgICAgICAgICAgICAgd2l0aCByZWNlbnQtZW5vdWdoIHZlcnNpb25zIG9mIHRoZSBHTlUgQyBM aWJyYXJ5DQogICAgICAgICAgICAgICAgICAgICAgICAgICh1c2Ugd2l0aCBjYXV0aW9uIG9uIG90 aGVyIHN5c3RlbXMpLg0KICAtLXdpdGhvdXQtc2VsaW51eCAgICAgICBkbyBub3QgdXNlIFNFTGlu dXgsIGV2ZW4gb24gc3lzdGVtcyB3aXRoIFNFTGludXgNCiAgLS13aXRoLXBhY2thZ2VyICAgICAg ICAgU3RyaW5nIGlkZW50aWZ5aW5nIHRoZSBwYWNrYWdlciBvZiB0aGlzIHNvZnR3YXJlDQogIC0t d2l0aC1wYWNrYWdlci12ZXJzaW9uIFBhY2thZ2VyLXNwZWNpZmljIHZlcnNpb24gaW5mb3JtYXRp b24NCiAgLS13aXRoLXBhY2thZ2VyLWJ1Zy1yZXBvcnRzDQogICAgICAgICAgICAgICAgICAgICAg ICAgIFBhY2thZ2VyIGluZm8gZm9yIGJ1ZyByZXBvcnRzIChVUkwvZS1tYWlsLy4uLikNCiAgLS13 aXRoLXR0eS1ncm91cFs9TkFNRV0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JvdXAgdXNl ZCBieSBzeXN0ZW0gZm9yIFRUWXMsICJ0dHkiIHdoZW4gbm90DQogICAgICAgICAgICAgICAgICAg ICAgICAgIHNwZWNpZmllZCAoZGVmYXVsdDogZG8gbm90IHJlbHkgb24gYW55IGdyb3VwIHVzZWQN CiAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIFRUWXMpDQogIC0td2l0aG91dC1nbXAgICAg ICAgICAgIGRvIG5vdCB1c2UgdGhlIEdOVSBNUCBsaWJyYXJ5IGZvciBhcmJpdHJhcnkNCiAgICAg ICAgICAgICAgICAgICAgICAgICAgcHJlY2lzaW9uIGNhbGN1bGF0aW9uIChkZWZhdWx0OiB1c2Ug aXQgaWYgYXZhaWxhYmxlKQ0KICAtLXdpdGgtbGliaW50bC1wcmVmaXhbPURJUl0gIHNlYXJjaCBm b3IgbGliaW50bCBpbiBESVIvaW5jbHVkZSBhbmQgRElSL2xpYg0KICAtLXdpdGhvdXQtbGliaW50 bC1wcmVmaXggICAgIGRvbid0IHNlYXJjaCBmb3IgbGliaW50bCBpbiBpbmNsdWRlZGlyIGFuZCBs aWJkaXINCg0KU29tZSBpbmZsdWVudGlhbCBlbnZpcm9ubWVudCB2YXJpYWJsZXM6DQogIENDICAg ICAgICAgIEMgY29tcGlsZXIgY29tbWFuZA0KICBDRkxBR1MgICAgICBDIGNvbXBpbGVyIGZsYWdz DQogIExERkxBR1MgICAgIGxpbmtlciBmbGFncywgZS5nLiAtTDxsaWIgZGlyPiBpZiB5b3UgaGF2 ZSBsaWJyYXJpZXMgaW4gYQ0KICAgICAgICAgICAgICBub25zdGFuZGFyZCBkaXJlY3RvcnkgPGxp YiBkaXI+DQogIExJQlMgICAgICAgIGxpYnJhcmllcyB0byBwYXNzIHRvIHRoZSBsaW5rZXIsIGUu Zy4gLWw8bGlicmFyeT4NCiAgQ1BQRkxBR1MgICAgKE9iamVjdGl2ZSkgQy9DKysgcHJlcHJvY2Vz c29yIGZsYWdzLCBlLmcuIC1JPGluY2x1ZGUgZGlyPiBpZg0KICAgICAgICAgICAgICB5b3UgaGF2 ZSBoZWFkZXJzIGluIGEgbm9uc3RhbmRhcmQgZGlyZWN0b3J5IDxpbmNsdWRlIGRpcj4NCiAgQ1BQ ICAgICAgICAgQyBwcmVwcm9jZXNzb3INCiAgWUFDQyAgICAgICAgVGhlIGBZZXQgQW5vdGhlciBD IENvbXBpbGVyJyBpbXBsZW1lbnRhdGlvbiB0byB1c2UuIERlZmF1bHRzIHRvDQogICAgICAgICAg ICAgIGBiaXNvbiAteScuIFZhbHVlcyBvdGhlciB0aGFuIGBiaXNvbiAteScgd2lsbCBtb3N0IGxp a2VseSBicmVhaw0KICAgICAgICAgICAgICBvbiBtb3N0IHN5c3RlbXMuDQogIFlGTEFHUyAgICAg IFlGTEFHUyBjb250YWlucyB0aGUgbGlzdCBhcmd1bWVudHMgdGhhdCB3aWxsIGJlIHBhc3NlZCBi eQ0KICAgICAgICAgICAgICBkZWZhdWx0IHRvIEJpc29uLiBUaGlzIHNjcmlwdCB3aWxsIGRlZmF1 bHQgWUZMQUdTIHRvIHRoZSBlbXB0eQ0KICAgICAgICAgICAgICBzdHJpbmcgdG8gYXZvaWQgYSBk ZWZhdWx0IHZhbHVlIG9mIGAtZCcgZ2l2ZW4gYnkgc29tZSBtYWtlDQogICAgICAgICAgICAgIGFw cGxpY2F0aW9ucy4NCiAgREVGQVVMVF9QT1NJWDJfVkVSU0lPTg0KICAgICAgICAgICAgICBQT1NJ WCB2ZXJzaW9uIHRvIGRlZmF1bHQgdG87IHNlZSAnY29uZmlnLmhpbicuDQoNClVzZSB0aGVzZSB2 YXJpYWJsZXMgdG8gb3ZlcnJpZGUgdGhlIGNob2ljZXMgbWFkZSBieSBgY29uZmlndXJlJyBvciB0 byBoZWxwDQppdCB0byBmaW5kIGxpYnJhcmllcyBhbmQgcHJvZ3JhbXMgd2l0aCBub25zdGFuZGFy ZCBuYW1lcy9sb2NhdGlvbnMuDQoNClJlcG9ydCBidWdzIHRvIDxidWctY29yZXV0aWxzQGdudS5v cmc+Lg0KR05VIGNvcmV1dGlscyBob21lIHBhZ2U6IDxodHRwOi8vd3d3LmdudS5vcmcvc29mdHdh cmUvY29yZXV0aWxzLz4uDQpHZW5lcmFsIGhlbHAgdXNpbmcgR05VIHNvZnR3YXJlOiA8aHR0cDov L3d3dy5nbnUub3JnL2dldGhlbHAvPi4NCl9BQ0VPRg0KYWNfc3RhdHVzPSQ/DQpmaQ0KDQppZiB0 ZXN0ICIkYWNfaW5pdF9oZWxwIiA9ICJyZWN1cnNpdmUiOyB0aGVuDQogICMgSWYgdGhlcmUgYXJl IHN1YmRpcnMsIHJlcG9ydCB0aGVpciBzcGVjaWZpYyAtLWhlbHAuDQogIGZvciBhY19kaXIgaW4g OiAkYWNfc3ViZGlyc19hbGw7IGRvIHRlc3QgIngkYWNfZGlyIiA9IHg6ICYmIGNvbnRpbnVlDQog ICAgdGVzdCAtZCAiJGFjX2RpciIgfHwNCiAgICAgIHsgY2QgIiRzcmNkaXIiICYmIGFjX3B3ZD1g cHdkYCAmJiBzcmNkaXI9LiAmJiB0ZXN0IC1kICIkYWNfZGlyIjsgfSB8fA0KICAgICAgY29udGlu dWUNCiAgICBhY19idWlsZGRpcj0uDQoNCmNhc2UgIiRhY19kaXIiIGluDQouKSBhY19kaXJfc3Vm Zml4PSBhY190b3BfYnVpbGRkaXJfc3ViPS4gYWNfdG9wX2J1aWxkX3ByZWZpeD0gOzsNCiopDQog IGFjX2Rpcl9zdWZmaXg9L2AkYXNfZWNobyAiJGFjX2RpciIgfCBzZWQgJ3N8XlwuW1xcL118fCdg DQogICMgQSAiLi4iIGZvciBlYWNoIGRpcmVjdG9yeSBpbiAkYWNfZGlyX3N1ZmZpeC4NCiAgYWNf dG9wX2J1aWxkZGlyX3N1Yj1gJGFzX2VjaG8gIiRhY19kaXJfc3VmZml4IiB8IHNlZCAnc3wvW15c XC9dKnwvLi58ZztzfC98fCdgDQogIGNhc2UgJGFjX3RvcF9idWlsZGRpcl9zdWIgaW4NCiAgIiIp IGFjX3RvcF9idWlsZGRpcl9zdWI9LiBhY190b3BfYnVpbGRfcHJlZml4PSA7Ow0KICAqKSAgYWNf dG9wX2J1aWxkX3ByZWZpeD0kYWNfdG9wX2J1aWxkZGlyX3N1Yi8gOzsNCiAgZXNhYyA7Ow0KZXNh Yw0KYWNfYWJzX3RvcF9idWlsZGRpcj0kYWNfcHdkDQphY19hYnNfYnVpbGRkaXI9JGFjX3B3ZCRh Y19kaXJfc3VmZml4DQojIGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5Og0KYWNfdG9wX2J1aWxk ZGlyPSRhY190b3BfYnVpbGRfcHJlZml4DQoNCmNhc2UgJHNyY2RpciBpbg0KICAuKSAgIyBXZSBh cmUgYnVpbGRpbmcgaW4gcGxhY2UuDQogICAgYWNfc3JjZGlyPS4NCiAgICBhY190b3Bfc3JjZGly PSRhY190b3BfYnVpbGRkaXJfc3ViDQogICAgYWNfYWJzX3RvcF9zcmNkaXI9JGFjX3B3ZCA7Ow0K ICBbXFwvXSogfCA/OltcXC9dKiApICAjIEFic29sdXRlIG5hbWUuDQogICAgYWNfc3JjZGlyPSRz cmNkaXIkYWNfZGlyX3N1ZmZpeDsNCiAgICBhY190b3Bfc3JjZGlyPSRzcmNkaXINCiAgICBhY19h YnNfdG9wX3NyY2Rpcj0kc3JjZGlyIDs7DQogICopICMgUmVsYXRpdmUgbmFtZS4NCiAgICBhY19z cmNkaXI9JGFjX3RvcF9idWlsZF9wcmVmaXgkc3JjZGlyJGFjX2Rpcl9zdWZmaXgNCiAgICBhY190 b3Bfc3JjZGlyPSRhY190b3BfYnVpbGRfcHJlZml4JHNyY2Rpcg0KICAgIGFjX2Fic190b3Bfc3Jj ZGlyPSRhY19wd2QvJHNyY2RpciA7Ow0KZXNhYw0KYWNfYWJzX3NyY2Rpcj0kYWNfYWJzX3RvcF9z cmNkaXIkYWNfZGlyX3N1ZmZpeA0KDQogICAgY2QgIiRhY19kaXIiIHx8IHsgYWNfc3RhdHVzPSQ/ OyBjb250aW51ZTsgfQ0KICAgICMgQ2hlY2sgZm9yIGd1ZXN0ZWQgY29uZmlndXJlLg0KICAgIGlm IHRlc3QgLWYgIiRhY19zcmNkaXIvY29uZmlndXJlLmdudSI7IHRoZW4NCiAgICAgIGVjaG8gJiYN CiAgICAgICRTSEVMTCAiJGFjX3NyY2Rpci9jb25maWd1cmUuZ251IiAtLWhlbHA9cmVjdXJzaXZl DQogICAgZWxpZiB0ZXN0IC1mICIkYWNfc3JjZGlyL2NvbmZpZ3VyZSI7IHRoZW4NCiAgICAgIGVj aG8gJiYNCiAgICAgICRTSEVMTCAiJGFjX3NyY2Rpci9jb25maWd1cmUiIC0taGVscD1yZWN1cnNp dmUNCiAgICBlbHNlDQogICAgICAkYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiBubyBjb25maWd1 cmF0aW9uIGluZm9ybWF0aW9uIGlzIGluICRhY19kaXIiID4mMg0KICAgIGZpIHx8IGFjX3N0YXR1 cz0kPw0KICAgIGNkICIkYWNfcHdkIiB8fCB7IGFjX3N0YXR1cz0kPzsgYnJlYWs7IH0NCiAgZG9u ZQ0KZmkNCg0KdGVzdCAtbiAiJGFjX2luaXRfaGVscCIgJiYgZXhpdCAkYWNfc3RhdHVzDQppZiAk YWNfaW5pdF92ZXJzaW9uOyB0aGVuDQogIGNhdCA8PFxfQUNFT0YNCkdOVSBjb3JldXRpbHMgY29u ZmlndXJlIDguMTINCmdlbmVyYXRlZCBieSBHTlUgQXV0b2NvbmYgMi42OC43MS1hZjMwMA0KDQpD b3B5cmlnaHQgKEMpIDIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuDQpUaGlzIGNv bmZpZ3VyZSBzY3JpcHQgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh dGlvbg0KZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQg bW9kaWZ5IGl0Lg0KX0FDRU9GDQogIGV4aXQNCmZpDQoNCiMjIC0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLSAjIw0KIyMgQXV0b2NvbmYgaW5pdGlhbGl6YXRpb24uICMjDQojIyAtLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0gIyMNCg0KIyBhY19mbl9jX3RyeV9jb21waWxlIExJTkVOTw0KIyAtLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLQ0KIyBUcnkgdG8gY29tcGlsZSBjb25mdGVzdC4kYWNfZXh0LCBh bmQgcmV0dXJuIHdoZXRoZXIgdGhpcyBzdWNjZWVkZWQuDQphY19mbl9jX3RyeV9jb21waWxlICgp DQp7DQogIGFzX2xpbmVubz0ke2FzX2xpbmVuby0iJDEifSBhc19saW5lbm9fc3RhY2s9YXNfbGlu ZW5vX3N0YWNrPSRhc19saW5lbm9fc3RhY2sNCiAgcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dA0K ICBpZiB7IHsgYWNfdHJ5PSIkYWNfY29tcGlsZSINCmNhc2UgIigoJGFjX3RyeSIgaW4NCiAgKlwi KiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7DQogICopIGFjX3RyeV9lY2hv PSRhY190cnk7Ow0KZXNhYw0KZXZhbCBhY190cnlfZWNobz0iXCJcJGFzX21lOiR7YXNfbGluZW5v LSRMSU5FTk99OiAkYWNfdHJ5X2VjaG9cIiINCiRhc19lY2hvICIkYWNfdHJ5X2VjaG8iOyB9ID4m NQ0KICAoZXZhbCAiJGFjX2NvbXBpbGUiKSAyPmNvbmZ0ZXN0LmVycg0KICBhY19zdGF0dXM9JD8N CiAgaWYgdGVzdCAtcyBjb25mdGVzdC5lcnI7IHRoZW4NCiAgICBncmVwIC12ICdeICorJyBjb25m dGVzdC5lcnIgPmNvbmZ0ZXN0LmVyMQ0KICAgIGNhdCBjb25mdGVzdC5lcjEgPiY1DQogICAgbXYg LWYgY29uZnRlc3QuZXIxIGNvbmZ0ZXN0LmVycg0KICBmaQ0KICAkYXNfZWNobyAiJGFzX21lOiR7 YXNfbGluZW5vLSRMSU5FTk99OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUNCiAgdGVzdCAkYWNfc3Rh dHVzID0gMDsgfSAmJiB7DQoJIHRlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIiB8fA0KCSB0ZXN0 ICEgLXMgY29uZnRlc3QuZXJyDQogICAgICAgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpl eHQ7IHRoZW4gOg0KICBhY19yZXR2YWw9MA0KZWxzZQ0KICAkYXNfZWNobyAiJGFzX21lOiBmYWls ZWQgcHJvZ3JhbSB3YXM6IiA+JjUNCnNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUN Cg0KCWFjX3JldHZhbD0xDQpmaQ0KICBldmFsICRhc19saW5lbm9fc3RhY2s7ICR7YXNfbGluZW5v X3N0YWNrOis6fSB1bnNldCBhc19saW5lbm8NCiAgYXNfZm5fc2V0X3N0YXR1cyAkYWNfcmV0dmFs DQoNCn0gIyBhY19mbl9jX3RyeV9jb21waWxlDQoNCiMgYWNfZm5fY190cnlfY3BwIExJTkVOTw0K IyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQojIFRyeSB0byBwcmVwcm9jZXNzIGNvbmZ0ZXN0LiRh Y19leHQsIGFuZCByZXR1cm4gd2hldGhlciB0aGlzIHN1Y2NlZWRlZC4NCmFjX2ZuX2NfdHJ5X2Nw cCAoKQ0Kew0KICBhc19saW5lbm89JHthc19saW5lbm8tIiQxIn0gYXNfbGluZW5vX3N0YWNrPWFz X2xpbmVub19zdGFjaz0kYXNfbGluZW5vX3N0YWNrDQogIGlmIHsgeyBhY190cnk9IiRhY19jcHAg Y29uZnRlc3QuJGFjX2V4dCINCmNhc2UgIigoJGFjX3RyeSIgaW4NCiAgKlwiKiB8ICpcYCogfCAq XFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7DQogICopIGFjX3RyeV9lY2hvPSRhY190cnk7Ow0K ZXNhYw0KZXZhbCBhY190cnlfZWNobz0iXCJcJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiAk YWNfdHJ5X2VjaG9cIiINCiRhc19lY2hvICIkYWNfdHJ5X2VjaG8iOyB9ID4mNQ0KICAoZXZhbCAi JGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0IikgMj5jb25mdGVzdC5lcnINCiAgYWNfc3RhdHVzPSQ/ DQogIGlmIHRlc3QgLXMgY29uZnRlc3QuZXJyOyB0aGVuDQogICAgZ3JlcCAtdiAnXiAqKycgY29u ZnRlc3QuZXJyID5jb25mdGVzdC5lcjENCiAgICBjYXQgY29uZnRlc3QuZXIxID4mNQ0KICAgIG12 IC1mIGNvbmZ0ZXN0LmVyMSBjb25mdGVzdC5lcnINCiAgZmkNCiAgJGFzX2VjaG8gIiRhc19tZTok e2FzX2xpbmVuby0kTElORU5PfTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1DQogIHRlc3QgJGFjX3N0 YXR1cyA9IDA7IH0gPiBjb25mdGVzdC5pICYmIHsNCgkgdGVzdCAteiAiJGFjX2NfcHJlcHJvY193 YXJuX2ZsYWckYWNfY193ZXJyb3JfZmxhZyIgfHwNCgkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycg0K ICAgICAgIH07IHRoZW4gOg0KICBhY19yZXR2YWw9MA0KZWxzZQ0KICAkYXNfZWNobyAiJGFzX21l OiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUNCnNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4 dCA+JjUNCg0KICAgIGFjX3JldHZhbD0xDQpmaQ0KICBldmFsICRhc19saW5lbm9fc3RhY2s7ICR7 YXNfbGluZW5vX3N0YWNrOis6fSB1bnNldCBhc19saW5lbm8NCiAgYXNfZm5fc2V0X3N0YXR1cyAk YWNfcmV0dmFsDQoNCn0gIyBhY19mbl9jX3RyeV9jcHANCg0KIyBhY19mbl9jX2NoZWNrX2hlYWRl cl9tb25ncmVsIExJTkVOTyBIRUFERVIgVkFSIElOQ0xVREVTDQojIC0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiMgVGVzdHMgd2hldGhlciBI RUFERVIgZXhpc3RzLCBnaXZpbmcgYSB3YXJuaW5nIGlmIGl0IGNhbm5vdCBiZSBjb21waWxlZCB1 c2luZw0KIyB0aGUgaW5jbHVkZSBmaWxlcyBpbiBJTkNMVURFUyBhbmQgc2V0dGluZyB0aGUgY2Fj aGUgdmFyaWFibGUgVkFSDQojIGFjY29yZGluZ2x5Lg0KYWNfZm5fY19jaGVja19oZWFkZXJfbW9u Z3JlbCAoKQ0Kew0KICBhc19saW5lbm89JHthc19saW5lbm8tIiQxIn0gYXNfbGluZW5vX3N0YWNr PWFzX2xpbmVub19zdGFjaz0kYXNfbGluZW5vX3N0YWNrDQogIGlmIGV2YWwgXCR7JDMrOn0gZmFs c2U7IHRoZW4gOg0KICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNo ZWNraW5nIGZvciAkMiIgPiY1DQokYXNfZWNob19uICJjaGVja2luZyBmb3IgJDIuLi4gIiA+JjY7 IH0NCmlmIGV2YWwgXCR7JDMrOn0gZmFsc2U7IHRoZW4gOg0KICAkYXNfZWNob19uICIoY2FjaGVk KSAiID4mNg0KZmkNCmV2YWwgYWNfcmVzPVwkJDMNCgkgICAgICAgeyAkYXNfZWNobyAiJGFzX21l OiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19yZXMiID4mNQ0KJGFzX2VjaG8gIiRh Y19yZXMiID4mNjsgfQ0KZWxzZQ0KICAjIElzIHRoZSBoZWFkZXIgY29tcGlsYWJsZT8NCnsgJGFz X2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgJDIgdXNhYmlsaXR5 IiA+JjUNCiRhc19lY2hvX24gImNoZWNraW5nICQyIHVzYWJpbGl0eS4uLiAiID4mNjsgfQ0KY2F0 IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dA0KLyogZW5kIGNvbmZkZWZz LmguICAqLw0KJDQNCiNpbmNsdWRlIDwkMj4NCl9BQ0VPRg0KaWYgYWNfZm5fY190cnlfY29tcGls ZSAiJExJTkVOTyI7IHRoZW4gOg0KICBhY19oZWFkZXJfY29tcGlsZXI9eWVzDQplbHNlDQogIGFj X2hlYWRlcl9jb21waWxlcj1ubw0KZmkNCnJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0 LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dA0KeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGlu ZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19oZWFkZXJfY29tcGlsZXIiID4mNQ0KJGFzX2VjaG8g IiRhY19oZWFkZXJfY29tcGlsZXIiID4mNjsgfQ0KDQojIElzIHRoZSBoZWFkZXIgcHJlc2VudD8N CnsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgJDIgcHJl c2VuY2UiID4mNQ0KJGFzX2VjaG9fbiAiY2hlY2tpbmcgJDIgcHJlc2VuY2UuLi4gIiA+JjY7IH0N CmNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQNCi8qIGVuZCBjb25m ZGVmcy5oLiAgKi8NCiNpbmNsdWRlIDwkMj4NCl9BQ0VPRg0KaWYgYWNfZm5fY190cnlfY3BwICIk TElORU5PIjsgdGhlbiA6DQogIGFjX2hlYWRlcl9wcmVwcm9jPXllcw0KZWxzZQ0KICBhY19oZWFk ZXJfcHJlcHJvYz1ubw0KZmkNCnJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC5pIGNvbmZ0ZXN0 LiRhY19leHQNCnsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0 OiAkYWNfaGVhZGVyX3ByZXByb2MiID4mNQ0KJGFzX2VjaG8gIiRhY19oZWFkZXJfcHJlcHJvYyIg PiY2OyB9DQoNCiMgU28/ICBXaGF0IGFib3V0IHRoaXMgaGVhZGVyPw0KY2FzZSAkYWNfaGVhZGVy X2NvbXBpbGVyOiRhY19oZWFkZXJfcHJlcHJvYzokYWNfY19wcmVwcm9jX3dhcm5fZmxhZyBpbiAj KCgNCiAgeWVzOm5vOiApDQogICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5F Tk99OiBXQVJOSU5HOiAkMjogYWNjZXB0ZWQgYnkgdGhlIGNvbXBpbGVyLCByZWplY3RlZCBieSB0 aGUgcHJlcHJvY2Vzc29yISIgPiY1DQokYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkMjogYWNj ZXB0ZWQgYnkgdGhlIGNvbXBpbGVyLCByZWplY3RlZCBieSB0aGUgcHJlcHJvY2Vzc29yISIgPiYy O30NCiAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6 ICQyOiBwcm9jZWVkaW5nIHdpdGggdGhlIGNvbXBpbGVyJ3MgcmVzdWx0IiA+JjUNCiRhc19lY2hv ICIkYXNfbWU6IFdBUk5JTkc6ICQyOiBwcm9jZWVkaW5nIHdpdGggdGhlIGNvbXBpbGVyJ3MgcmVz dWx0IiA+JjI7fQ0KICAgIDs7DQogIG5vOnllczoqICkNCiAgICB7ICRhc19lY2hvICIkYXNfbWU6 JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6ICQyOiBwcmVzZW50IGJ1dCBjYW5ub3QgYmUg Y29tcGlsZWQiID4mNQ0KJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogJDI6IHByZXNlbnQgYnV0 IGNhbm5vdCBiZSBjb21waWxlZCIgPiYyO30NCiAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19s aW5lbm8tJExJTkVOT306IFdBUk5JTkc6ICQyOiAgICAgY2hlY2sgZm9yIG1pc3NpbmcgcHJlcmVx dWlzaXRlIGhlYWRlcnM/IiA+JjUNCiRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICQyOiAgICAg Y2hlY2sgZm9yIG1pc3NpbmcgcHJlcmVxdWlzaXRlIGhlYWRlcnM/IiA+JjI7fQ0KICAgIHsgJGFz X2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogJDI6IHNlZSB0aGUg QXV0b2NvbmYgZG9jdW1lbnRhdGlvbiIgPiY1DQokYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiAk Mjogc2VlIHRoZSBBdXRvY29uZiBkb2N1bWVudGF0aW9uIiA+JjI7fQ0KICAgIHsgJGFzX2VjaG8g IiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogJDI6ICAgICBzZWN0aW9uIFwi UHJlc2VudCBCdXQgQ2Fubm90IEJlIENvbXBpbGVkXCIiID4mNQ0KJGFzX2VjaG8gIiRhc19tZTog V0FSTklORzogJDI6ICAgICBzZWN0aW9uIFwiUHJlc2VudCBCdXQgQ2Fubm90IEJlIENvbXBpbGVk XCIiID4mMjt9DQogICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBX QVJOSU5HOiAkMjogcHJvY2VlZGluZyB3aXRoIHRoZSBjb21waWxlcidzIHJlc3VsdCIgPiY1DQok YXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkMjogcHJvY2VlZGluZyB3aXRoIHRoZSBjb21waWxl cidzIHJlc3VsdCIgPiYyO30NCiggJGFzX2VjaG8gIiMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLSAjIw0KIyMgUmVwb3J0IHRoaXMgdG8gYnVnLWNvcmV1dGlsc0BnbnUub3Jn ICMjDQojIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMiDQogICAgICkg fCBzZWQgInMvXi8kYXNfbWU6IFdBUk5JTkc6ICAgICAvIiA+JjINCiAgICA7Ow0KZXNhYw0KICB7 ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkMiIg PiY1DQokYXNfZWNob19uICJjaGVja2luZyBmb3IgJDIuLi4gIiA+JjY7IH0NCmlmIGV2YWwgXCR7 JDMrOn0gZmFsc2U7IHRoZW4gOg0KICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNg0KZWxzZQ0K ICBldmFsICIkMz1cJGFjX2hlYWRlcl9jb21waWxlciINCmZpDQpldmFsIGFjX3Jlcz1cJCQzDQoJ ICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAk YWNfcmVzIiA+JjUNCiRhc19lY2hvICIkYWNfcmVzIiA+JjY7IH0NCmZpDQogIGV2YWwgJGFzX2xp bmVub19zdGFjazsgJHthc19saW5lbm9fc3RhY2s6Kzp9IHVuc2V0IGFzX2xpbmVubw0KDQp9ICMg YWNfZm5fY19jaGVja19oZWFkZXJfbW9uZ3JlbA0KDQojIGFjX2ZuX2NfdHJ5X3J1biBMSU5FTk8N CiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KIyBUcnkgdG8gbGluayBjb25mdGVzdC4kYWNfZXh0 LCBhbmQgcmV0dXJuIHdoZXRoZXIgdGhpcyBzdWNjZWVkZWQuIEFzc3VtZXMNCiMgdGhhdCBleGVj dXRhYmxlcyAqY2FuKiBiZSBydW4uDQphY19mbl9jX3RyeV9ydW4gKCkNCnsNCiAgYXNfbGluZW5v PSR7YXNfbGluZW5vLSIkMSJ9IGFzX2xpbmVub19zdGFjaz1hc19saW5lbm9fc3RhY2s9JGFzX2xp bmVub19zdGFjaw0KICBpZiB7IHsgYWNfdHJ5PSIkYWNfbGluayINCmNhc2UgIigoJGFjX3RyeSIg aW4NCiAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7DQogICopIGFj X3RyeV9lY2hvPSRhY190cnk7Ow0KZXNhYw0KZXZhbCBhY190cnlfZWNobz0iXCJcJGFzX21lOiR7 YXNfbGluZW5vLSRMSU5FTk99OiAkYWNfdHJ5X2VjaG9cIiINCiRhc19lY2hvICIkYWNfdHJ5X2Vj aG8iOyB9ID4mNQ0KICAoZXZhbCAiJGFjX2xpbmsiKSAyPiY1DQogIGFjX3N0YXR1cz0kPw0KICAk YXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJD8gPSAkYWNfc3RhdHVzIiA+ JjUNCiAgdGVzdCAkYWNfc3RhdHVzID0gMDsgfSAmJiB7IGFjX3RyeT0nLi9jb25mdGVzdCRhY19l eGVleHQnDQogIHsgeyBjYXNlICIoKCRhY190cnkiIGluDQogICpcIiogfCAqXGAqIHwgKlxcKikg YWNfdHJ5X2VjaG89XCRhY190cnk7Ow0KICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsNCmVzYWMN CmV2YWwgYWNfdHJ5X2VjaG89IlwiXCRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogJGFjX3Ry eV9lY2hvXCIiDQokYXNfZWNobyAiJGFjX3RyeV9lY2hvIjsgfSA+JjUNCiAgKGV2YWwgIiRhY190 cnkiKSAyPiY1DQogIGFjX3N0YXR1cz0kPw0KICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5v LSRMSU5FTk99OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUNCiAgdGVzdCAkYWNfc3RhdHVzID0gMDsg fTsgfTsgdGhlbiA6DQogIGFjX3JldHZhbD0wDQplbHNlDQogICRhc19lY2hvICIkYXNfbWU6IHBy b2dyYW0gZXhpdGVkIHdpdGggc3RhdHVzICRhY19zdGF0dXMiID4mNQ0KICAgICAgICRhc19lY2hv ICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQ0Kc2VkICdzL14vfCAvJyBjb25mdGVz dC4kYWNfZXh0ID4mNQ0KDQogICAgICAgYWNfcmV0dmFsPSRhY19zdGF0dXMNCmZpDQogIHJtIC1y ZiBjb25mdGVzdC5kU1lNIGNvbmZ0ZXN0X2lwYThfY29uZnRlc3Qub28NCiAgZXZhbCAkYXNfbGlu ZW5vX3N0YWNrOyAke2FzX2xpbmVub19zdGFjazorOn0gdW5zZXQgYXNfbGluZW5vDQogIGFzX2Zu X3NldF9zdGF0dXMgJGFjX3JldHZhbA0KDQp9ICMgYWNfZm5fY190cnlfcnVuDQoNCiMgYWNfZm5f Y19jaGVja19oZWFkZXJfY29tcGlsZSBMSU5FTk8gSEVBREVSIFZBUiBJTkNMVURFUw0KIyAtLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQojIFRl c3RzIHdoZXRoZXIgSEVBREVSIGV4aXN0cyBhbmQgY2FuIGJlIGNvbXBpbGVkIHVzaW5nIHRoZSBp bmNsdWRlIGZpbGVzIGluDQojIElOQ0xVREVTLCBzZXR0aW5nIHRoZSBjYWNoZSB2YXJpYWJsZSBW QVIgYWNjb3JkaW5nbHkuDQphY19mbl9jX2NoZWNrX2hlYWRlcl9jb21waWxlICgpDQp7DQogIGFz X2xpbmVubz0ke2FzX2xpbmVuby0iJDEifSBhc19saW5lbm9fc3RhY2s9YXNfbGluZW5vX3N0YWNr PSRhc19saW5lbm9fc3RhY2sNCiAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5F Tk99OiBjaGVja2luZyBmb3IgJDIiID4mNQ0KJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICQyLi4u ICIgPiY2OyB9DQppZiBldmFsIFwkeyQzKzp9IGZhbHNlOyB0aGVuIDoNCiAgJGFzX2VjaG9fbiAi KGNhY2hlZCkgIiA+JjYNCmVsc2UNCiAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRl c3QuJGFjX2V4dA0KLyogZW5kIGNvbmZkZWZzLmguICAqLw0KJDQNCiNpbmNsdWRlIDwkMj4NCl9B Q0VPRg0KaWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOg0KICBldmFsICIk Mz15ZXMiDQplbHNlDQogIGV2YWwgIiQzPW5vIg0KZmkNCnJtIC1mIGNvcmUgY29uZnRlc3QuZXJy IGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dA0KZmkNCmV2YWwgYWNfcmVzPVwk JDMNCgkgICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1 bHQ6ICRhY19yZXMiID4mNQ0KJGFzX2VjaG8gIiRhY19yZXMiID4mNjsgfQ0KICBldmFsICRhc19s aW5lbm9fc3RhY2s7ICR7YXNfbGluZW5vX3N0YWNrOis6fSB1bnNldCBhc19saW5lbm8NCg0KfSAj IGFjX2ZuX2NfY2hlY2tfaGVhZGVyX2NvbXBpbGUNCg0KIyBhY19mbl9jX3RyeV9saW5rIExJTkVO Tw0KIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KIyBUcnkgdG8gbGluayBjb25mdGVzdC4kYWNf ZXh0LCBhbmQgcmV0dXJuIHdoZXRoZXIgdGhpcyBzdWNjZWVkZWQuDQphY19mbl9jX3RyeV9saW5r ICgpDQp7DQogIGFzX2xpbmVubz0ke2FzX2xpbmVuby0iJDEifSBhc19saW5lbm9fc3RhY2s9YXNf bGluZW5vX3N0YWNrPSRhc19saW5lbm9fc3RhY2sNCiAgcm0gLWYgY29uZnRlc3QuJGFjX29iamV4 dCBjb25mdGVzdCRhY19leGVleHQNCiAgaWYgeyB7IGFjX3RyeT0iJGFjX2xpbmsiDQpjYXNlICIo KCRhY190cnkiIGluDQogICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7 Ow0KICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsNCmVzYWMNCmV2YWwgYWNfdHJ5X2VjaG89Ilwi XCRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogJGFjX3RyeV9lY2hvXCIiDQokYXNfZWNobyAi JGFjX3RyeV9lY2hvIjsgfSA+JjUNCiAgKGV2YWwgIiRhY19saW5rIikgMj5jb25mdGVzdC5lcnIN CiAgYWNfc3RhdHVzPSQ/DQogIGlmIHRlc3QgLXMgY29uZnRlc3QuZXJyOyB0aGVuDQogICAgZ3Jl cCAtdiAnXiAqKycgY29uZnRlc3QuZXJyID5jb25mdGVzdC5lcjENCiAgICBjYXQgY29uZnRlc3Qu ZXIxID4mNQ0KICAgIG12IC1mIGNvbmZ0ZXN0LmVyMSBjb25mdGVzdC5lcnINCiAgZmkNCiAgJGFz X2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1 DQogIHRlc3QgJGFjX3N0YXR1cyA9IDA7IH0gJiYgew0KCSB0ZXN0IC16ICIkYWNfY193ZXJyb3Jf ZmxhZyIgfHwNCgkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycg0KICAgICAgIH0gJiYgdGVzdCAtcyBj b25mdGVzdCRhY19leGVleHQgJiYgew0KCSB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IHllcyB8 fA0KCSAkYXNfdGVzdF94IGNvbmZ0ZXN0JGFjX2V4ZWV4dA0KICAgICAgIH07IHRoZW4gOg0KICBh Y19yZXR2YWw9MA0KZWxzZQ0KICAkYXNfZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6 IiA+JjUNCnNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUNCg0KCWFjX3JldHZhbD0x DQpmaQ0KICAjIERlbGV0ZSB0aGUgSVBBL0lQTyAoSW50ZXIgUHJvY2VkdXJhbCBBbmFseXNpcy9P cHRpbWl6YXRpb24pIGluZm9ybWF0aW9uDQogICMgY3JlYXRlZCBieSB0aGUgUEdJIGNvbXBpbGVy IChjb25mdGVzdF9pcGE4X2NvbmZ0ZXN0Lm9vKSwgYXMgaXQgd291bGQNCiAgIyBpbnRlcmZlcmUg d2l0aCB0aGUgbmV4dCBsaW5rIGNvbW1hbmQ7IGFsc28gZGVsZXRlIGEgZGlyZWN0b3J5IHRoYXQg aXMNCiAgIyBsZWZ0IGJlaGluZCBieSBBcHBsZSdzIGNvbXBpbGVyLiAgV2UgZG8gdGhpcyBiZWZv cmUgZXhlY3V0aW5nIHRoZSBhY3Rpb25zLg0KICBybSAtcmYgY29uZnRlc3QuZFNZTSBjb25mdGVz dF9pcGE4X2NvbmZ0ZXN0Lm9vDQogIGV2YWwgJGFzX2xpbmVub19zdGFjazsgJHthc19saW5lbm9f c3RhY2s6Kzp9IHVuc2V0IGFzX2xpbmVubw0KICBhc19mbl9zZXRfc3RhdHVzICRhY19yZXR2YWwN Cg0KfSAjIGFjX2ZuX2NfdHJ5X2xpbmsNCg0KIyBhY19mbl9jX2NoZWNrX2Z1bmMgTElORU5PIEZV TkMgVkFSDQojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiMgVGVzdHMgd2hl dGhlciBGVU5DIGV4aXN0cywgc2V0dGluZyB0aGUgY2FjaGUgdmFyaWFibGUgVkFSIGFjY29yZGlu Z2x5DQphY19mbl9jX2NoZWNrX2Z1bmMgKCkNCnsNCiAgYXNfbGluZW5vPSR7YXNfbGluZW5vLSIk MSJ9IGFzX2xpbmVub19zdGFjaz1hc19saW5lbm9fc3RhY2s9JGFzX2xpbmVub19zdGFjaw0KICB7 ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkMiIg PiY1DQokYXNfZWNob19uICJjaGVja2luZyBmb3IgJDIuLi4gIiA+JjY7IH0NCmlmIGV2YWwgXCR7 JDMrOn0gZmFsc2U7IHRoZW4gOg0KICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNg0KZWxzZQ0K ICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0DQovKiBlbmQgY29u ZmRlZnMuaC4gICovDQovKiBEZWZpbmUgJDIgdG8gYW4gaW5ub2N1b3VzIHZhcmlhbnQsIGluIGNh c2UgPGxpbWl0cy5oPiBkZWNsYXJlcyAkMi4NCiAgIEZvciBleGFtcGxlLCBIUC1VWCAxMWkgPGxp bWl0cy5oPiBkZWNsYXJlcyBnZXR0aW1lb2ZkYXkuICAqLw0KI2RlZmluZSAkMiBpbm5vY3VvdXNf JDINCg0KLyogU3lzdGVtIGhlYWRlciB0byBkZWZpbmUgX19zdHViIG1hY3JvcyBhbmQgaG9wZWZ1 bGx5IGZldyBwcm90b3R5cGVzLA0KICAgIHdoaWNoIGNhbiBjb25mbGljdCB3aXRoIGNoYXIgJDIg KCk7IGJlbG93Lg0KICAgIFByZWZlciA8bGltaXRzLmg+IHRvIDxhc3NlcnQuaD4gaWYgX19TVERD X18gaXMgZGVmaW5lZCwgc2luY2UNCiAgICA8bGltaXRzLmg+IGV4aXN0cyBldmVuIG9uIGZyZWVz dGFuZGluZyBjb21waWxlcnMuICAqLw0KDQojaWZkZWYgX19TVERDX18NCiMgaW5jbHVkZSA8bGlt aXRzLmg+DQojZWxzZQ0KIyBpbmNsdWRlIDxhc3NlcnQuaD4NCiNlbmRpZg0KDQojdW5kZWYgJDIN Cg0KLyogT3ZlcnJpZGUgYW55IEdDQyBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJy b3IuDQogICBVc2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUg b2YgYSBHQ0MNCiAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3Vs ZCBzdGlsbCBhcHBseS4gICovDQojaWZkZWYgX19jcGx1c3BsdXMNCmV4dGVybiAiQyINCiNlbmRp Zg0KY2hhciAkMiAoKTsNCi8qIFRoZSBHTlUgQyBsaWJyYXJ5IGRlZmluZXMgdGhpcyBmb3IgZnVu Y3Rpb25zIHdoaWNoIGl0IGltcGxlbWVudHMNCiAgICB0byBhbHdheXMgZmFpbCB3aXRoIEVOT1NZ Uy4gIFNvbWUgZnVuY3Rpb25zIGFyZSBhY3R1YWxseSBuYW1lZA0KICAgIHNvbWV0aGluZyBzdGFy dGluZyB3aXRoIF9fIGFuZCB0aGUgbm9ybWFsIG5hbWUgaXMgYW4gYWxpYXMuICAqLw0KI2lmIGRl ZmluZWQgX19zdHViXyQyIHx8IGRlZmluZWQgX19zdHViX19fJDINCmNob2tlIG1lDQojZW5kaWYN Cg0KaW50DQptYWluICgpDQp7DQpyZXR1cm4gJDIgKCk7DQogIDsNCiAgcmV0dXJuIDA7DQp9DQpf QUNFT0YNCmlmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoNCiAgZXZhbCAiJDM9 eWVzIg0KZWxzZQ0KICBldmFsICIkMz1ubyINCmZpDQpybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBj b25mdGVzdC4kYWNfb2JqZXh0IFwNCiAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFj X2V4dA0KZmkNCmV2YWwgYWNfcmVzPVwkJDMNCgkgICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7 YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19yZXMiID4mNQ0KJGFzX2VjaG8gIiRhY19y ZXMiID4mNjsgfQ0KICBldmFsICRhc19saW5lbm9fc3RhY2s7ICR7YXNfbGluZW5vX3N0YWNrOis6 fSB1bnNldCBhc19saW5lbm8NCg0KfSAjIGFjX2ZuX2NfY2hlY2tfZnVuYw0KDQojIGFjX2ZuX2Nf Y2hlY2tfdHlwZSBMSU5FTk8gVFlQRSBWQVIgSU5DTFVERVMNCiMgLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KIyBUZXN0cyB3aGV0aGVyIFRZUEUgZXhpc3RzIGFm dGVyIGhhdmluZyBpbmNsdWRlZCBJTkNMVURFUywgc2V0dGluZyBjYWNoZQ0KIyB2YXJpYWJsZSBW QVIgYWNjb3JkaW5nbHkuDQphY19mbl9jX2NoZWNrX3R5cGUgKCkNCnsNCiAgYXNfbGluZW5vPSR7 YXNfbGluZW5vLSIkMSJ9IGFzX2xpbmVub19zdGFjaz1hc19saW5lbm9fc3RhY2s9JGFzX2xpbmVu b19zdGFjaw0KICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNr aW5nIGZvciAkMiIgPiY1DQokYXNfZWNob19uICJjaGVja2luZyBmb3IgJDIuLi4gIiA+JjY7IH0N CmlmIGV2YWwgXCR7JDMrOn0gZmFsc2U7IHRoZW4gOg0KICAkYXNfZWNob19uICIoY2FjaGVkKSAi ID4mNg0KZWxzZQ0KICBldmFsICIkMz1ubyINCiAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+ Y29uZnRlc3QuJGFjX2V4dA0KLyogZW5kIGNvbmZkZWZzLmguICAqLw0KJDQNCmludA0KbWFpbiAo KQ0Kew0KaWYgKHNpemVvZiAoJDIpKQ0KCSByZXR1cm4gMDsNCiAgOw0KICByZXR1cm4gMDsNCn0N Cl9BQ0VPRg0KaWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOg0KICBjYXQg Y29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0DQovKiBlbmQgY29uZmRlZnMu aC4gICovDQokNA0KaW50DQptYWluICgpDQp7DQppZiAoc2l6ZW9mICgoJDIpKSkNCgkgICAgcmV0 dXJuIDA7DQogIDsNCiAgcmV0dXJuIDA7DQp9DQpfQUNFT0YNCmlmIGFjX2ZuX2NfdHJ5X2NvbXBp bGUgIiRMSU5FTk8iOyB0aGVuIDoNCg0KZWxzZQ0KICBldmFsICIkMz15ZXMiDQpmaQ0Kcm0gLWYg Y29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0DQpm aQ0Kcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4k YWNfZXh0DQpmaQ0KZXZhbCBhY19yZXM9XCQkMw0KCSAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6 JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX3JlcyIgPiY1DQokYXNfZWNobyAiJGFj X3JlcyIgPiY2OyB9DQogIGV2YWwgJGFzX2xpbmVub19zdGFjazsgJHthc19saW5lbm9fc3RhY2s6 Kzp9IHVuc2V0IGFzX2xpbmVubw0KDQp9ICMgYWNfZm5fY19jaGVja190eXBlDQoNCiMgYWNfZm5f Y19jaGVja19kZWNsIExJTkVOTyBTWU1CT0wgVkFSIElOQ0xVREVTDQojIC0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KIyBUZXN0cyB3aGV0aGVyIFNZTUJPTCBp cyBkZWNsYXJlZCBpbiBJTkNMVURFUywgc2V0dGluZyBjYWNoZSB2YXJpYWJsZSBWQVINCiMgYWNj b3JkaW5nbHkuDQphY19mbl9jX2NoZWNrX2RlY2wgKCkNCnsNCiAgYXNfbGluZW5vPSR7YXNfbGlu ZW5vLSIkMSJ9IGFzX2xpbmVub19zdGFjaz1hc19saW5lbm9fc3RhY2s9JGFzX2xpbmVub19zdGFj aw0KICBhc19kZWNsX25hbWU9YGVjaG8gJDJ8c2VkICdzLyAqKC4qLy8nYA0KICBhc19kZWNsX3Vz ZT1gZWNobyAkMnxzZWQgLWUgJ3MvKC8oKC8nIC1lICdzLykvKSAwJi8nIC1lICdzLywvKSAwJiAo L2cnYA0KICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5n IHdoZXRoZXIgJGFzX2RlY2xfbmFtZSBpcyBkZWNsYXJlZCIgPiY1DQokYXNfZWNob19uICJjaGVj a2luZyB3aGV0aGVyICRhc19kZWNsX25hbWUgaXMgZGVjbGFyZWQuLi4gIiA+JjY7IH0NCmlmIGV2 YWwgXCR7JDMrOn0gZmFsc2U7IHRoZW4gOg0KICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNg0K ZWxzZQ0KICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0DQovKiBl bmQgY29uZmRlZnMuaC4gICovDQokNA0KaW50DQptYWluICgpDQp7DQojaWZuZGVmICRhc19kZWNs X25hbWUNCiNpZmRlZiBfX2NwbHVzcGx1cw0KICAodm9pZCkgJGFzX2RlY2xfdXNlOw0KI2Vsc2UN CiAgKHZvaWQpICRhc19kZWNsX25hbWU7DQojZW5kaWYNCiNlbmRpZg0KDQogIDsNCiAgcmV0dXJu IDA7DQp9DQpfQUNFT0YNCmlmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoN CiAgZXZhbCAiJDM9eWVzIg0KZWxzZQ0KICBldmFsICIkMz1ubyINCmZpDQpybSAtZiBjb3JlIGNv bmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQNCmZpDQpldmFs IGFjX3Jlcz1cJCQzDQoJICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElO RU5PfTogcmVzdWx0OiAkYWNfcmVzIiA+JjUNCiRhc19lY2hvICIkYWNfcmVzIiA+JjY7IH0NCiAg ZXZhbCAkYXNfbGluZW5vX3N0YWNrOyAke2FzX2xpbmVub19zdGFjazorOn0gdW5zZXQgYXNfbGlu ZW5vDQoNCn0gIyBhY19mbl9jX2NoZWNrX2RlY2wNCg0KIyBhY19mbl9jX2NvbXB1dGVfaW50IExJ TkVOTyBFWFBSIFZBUiBJTkNMVURFUw0KIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLQ0KIyBUcmllcyB0byBmaW5kIHRoZSBjb21waWxlLXRpbWUgdmFsdWUgb2Yg RVhQUiBpbiBhIHByb2dyYW0gdGhhdCBpbmNsdWRlcw0KIyBJTkNMVURFUywgc2V0dGluZyBWQVIg YWNjb3JkaW5nbHkuIFJldHVybnMgd2hldGhlciB0aGUgdmFsdWUgY291bGQgYmUNCiMgY29tcHV0 ZWQNCmFjX2ZuX2NfY29tcHV0ZV9pbnQgKCkNCnsNCiAgYXNfbGluZW5vPSR7YXNfbGluZW5vLSIk MSJ9IGFzX2xpbmVub19zdGFjaz1hc19saW5lbm9fc3RhY2s9JGFzX2xpbmVub19zdGFjaw0KICBp ZiB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IHllczsgdGhlbg0KICAgICMgRGVwZW5kaW5nIHVw b24gdGhlIHNpemUsIGNvbXB1dGUgdGhlIGxvIGFuZCBoaSBib3VuZHMuDQpjYXQgY29uZmRlZnMu aCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0DQovKiBlbmQgY29uZmRlZnMuaC4gICovDQok NA0KaW50DQptYWluICgpDQp7DQpzdGF0aWMgaW50IHRlc3RfYXJyYXkgWzEgLSAyICogISgoJDIp ID49IDApXTsNCnRlc3RfYXJyYXkgWzBdID0gMA0KDQogIDsNCiAgcmV0dXJuIDA7DQp9DQpfQUNF T0YNCmlmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoNCiAgYWNfbG89MCBh Y19taWQ9MA0KICB3aGlsZSA6OyBkbw0KICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNv bmZ0ZXN0LiRhY19leHQNCi8qIGVuZCBjb25mZGVmcy5oLiAgKi8NCiQ0DQppbnQNCm1haW4gKCkN CnsNCnN0YXRpYyBpbnQgdGVzdF9hcnJheSBbMSAtIDIgKiAhKCgkMikgPD0gJGFjX21pZCldOw0K dGVzdF9hcnJheSBbMF0gPSAwDQoNCiAgOw0KICByZXR1cm4gMDsNCn0NCl9BQ0VPRg0KaWYgYWNf Zm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOg0KICBhY19oaT0kYWNfbWlkOyBicmVh aw0KZWxzZQ0KICBhc19mbl9hcml0aCAkYWNfbWlkICsgMSAmJiBhY19sbz0kYXNfdmFsDQoJCQlp ZiB0ZXN0ICRhY19sbyAtbGUgJGFjX21pZDsgdGhlbg0KCQkJICBhY19sbz0gYWNfaGk9DQoJCQkg IGJyZWFrDQoJCQlmaQ0KCQkJYXNfZm5fYXJpdGggMiAnKicgJGFjX21pZCArIDEgJiYgYWNfbWlk PSRhc192YWwNCmZpDQpybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0 IGNvbmZ0ZXN0LiRhY19leHQNCiAgZG9uZQ0KZWxzZQ0KICBjYXQgY29uZmRlZnMuaCAtIDw8X0FD RU9GID5jb25mdGVzdC4kYWNfZXh0DQovKiBlbmQgY29uZmRlZnMuaC4gICovDQokNA0KaW50DQpt YWluICgpDQp7DQpzdGF0aWMgaW50IHRlc3RfYXJyYXkgWzEgLSAyICogISgoJDIpIDwgMCldOw0K dGVzdF9hcnJheSBbMF0gPSAwDQoNCiAgOw0KICByZXR1cm4gMDsNCn0NCl9BQ0VPRg0KaWYgYWNf Zm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOg0KICBhY19oaT0tMSBhY19taWQ9LTEN CiAgd2hpbGUgOjsgZG8NCiAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4k YWNfZXh0DQovKiBlbmQgY29uZmRlZnMuaC4gICovDQokNA0KaW50DQptYWluICgpDQp7DQpzdGF0 aWMgaW50IHRlc3RfYXJyYXkgWzEgLSAyICogISgoJDIpID49ICRhY19taWQpXTsNCnRlc3RfYXJy YXkgWzBdID0gMA0KDQogIDsNCiAgcmV0dXJuIDA7DQp9DQpfQUNFT0YNCmlmIGFjX2ZuX2NfdHJ5 X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoNCiAgYWNfbG89JGFjX21pZDsgYnJlYWsNCmVsc2UN CiAgYXNfZm5fYXJpdGggJygnICRhY19taWQgJyknIC0gMSAmJiBhY19oaT0kYXNfdmFsDQoJCQlp ZiB0ZXN0ICRhY19taWQgLWxlICRhY19oaTsgdGhlbg0KCQkJICBhY19sbz0gYWNfaGk9DQoJCQkg IGJyZWFrDQoJCQlmaQ0KCQkJYXNfZm5fYXJpdGggMiAnKicgJGFjX21pZCAmJiBhY19taWQ9JGFz X3ZhbA0KZmkNCnJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29u ZnRlc3QuJGFjX2V4dA0KICBkb25lDQplbHNlDQogIGFjX2xvPSBhY19oaT0NCmZpDQpybSAtZiBj b3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQNCmZp DQpybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRh Y19leHQNCiMgQmluYXJ5IHNlYXJjaCBiZXR3ZWVuIGxvIGFuZCBoaSBib3VuZHMuDQp3aGlsZSB0 ZXN0ICJ4JGFjX2xvIiAhPSAieCRhY19oaSI7IGRvDQogIGFzX2ZuX2FyaXRoICcoJyAkYWNfaGkg LSAkYWNfbG8gJyknIC8gMiArICRhY19sbyAmJiBhY19taWQ9JGFzX3ZhbA0KICBjYXQgY29uZmRl ZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0DQovKiBlbmQgY29uZmRlZnMuaC4gICov DQokNA0KaW50DQptYWluICgpDQp7DQpzdGF0aWMgaW50IHRlc3RfYXJyYXkgWzEgLSAyICogISgo JDIpIDw9ICRhY19taWQpXTsNCnRlc3RfYXJyYXkgWzBdID0gMA0KDQogIDsNCiAgcmV0dXJuIDA7 DQp9DQpfQUNFT0YNCmlmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoNCiAg YWNfaGk9JGFjX21pZA0KZWxzZQ0KICBhc19mbl9hcml0aCAnKCcgJGFjX21pZCAnKScgKyAxICYm IGFjX2xvPSRhc192YWwNCmZpDQpybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNf b2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQNCmRvbmUNCmNhc2UgJGFjX2xvIGluICMoKA0KPyopIGV2 YWwgIiQzPVwkYWNfbG8iOyBhY19yZXR2YWw9MCA7Ow0KJycpIGFjX3JldHZhbD0xIDs7DQplc2Fj DQogIGVsc2UNCiAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0 DQovKiBlbmQgY29uZmRlZnMuaC4gICovDQokNA0Kc3RhdGljIGxvbmcgaW50IGxvbmd2YWwgKCkg eyByZXR1cm4gJDI7IH0NCnN0YXRpYyB1bnNpZ25lZCBsb25nIGludCB1bG9uZ3ZhbCAoKSB7IHJl dHVybiAkMjsgfQ0KI2luY2x1ZGUgPHN0ZGlvLmg+DQojaW5jbHVkZSA8c3RkbGliLmg+DQppbnQN Cm1haW4gKCkNCnsNCg0KICBGSUxFICpmID0gZm9wZW4gKCJjb25mdGVzdC52YWwiLCAidyIpOw0K ICBpZiAoISBmKQ0KICAgIHJldHVybiAxOw0KICBpZiAoKCQyKSA8IDApDQogICAgew0KICAgICAg bG9uZyBpbnQgaSA9IGxvbmd2YWwgKCk7DQogICAgICBpZiAoaSAhPSAoJDIpKQ0KCXJldHVybiAx Ow0KICAgICAgZnByaW50ZiAoZiwgIiVsZCIsIGkpOw0KICAgIH0NCiAgZWxzZQ0KICAgIHsNCiAg ICAgIHVuc2lnbmVkIGxvbmcgaW50IGkgPSB1bG9uZ3ZhbCAoKTsNCiAgICAgIGlmIChpICE9ICgk MikpDQoJcmV0dXJuIDE7DQogICAgICBmcHJpbnRmIChmLCAiJWx1IiwgaSk7DQogICAgfQ0KICAv KiBEbyBub3Qgb3V0cHV0IGEgdHJhaWxpbmcgbmV3bGluZSwgYXMgdGhpcyBjYXVzZXMgXHJcbiBj b25mdXNpb24NCiAgICAgb24gc29tZSBwbGF0Zm9ybXMuICAqLw0KICByZXR1cm4gZmVycm9yIChm KSB8fCBmY2xvc2UgKGYpICE9IDA7DQoNCiAgOw0KICByZXR1cm4gMDsNCn0NCl9BQ0VPRg0KaWYg YWNfZm5fY190cnlfcnVuICIkTElORU5PIjsgdGhlbiA6DQogIGVjaG8gPj5jb25mdGVzdC52YWw7 IHJlYWQgJDMgPGNvbmZ0ZXN0LnZhbDsgYWNfcmV0dmFsPTANCmVsc2UNCiAgYWNfcmV0dmFsPTEN CmZpDQpybSAtZiBjb3JlICouY29yZSBjb3JlLmNvbmZ0ZXN0LiogZ21vbi5vdXQgYmIub3V0IGNv bmZ0ZXN0JGFjX2V4ZWV4dCBcDQogIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuYmVhbSBj b25mdGVzdC4kYWNfZXh0DQpybSAtZiBjb25mdGVzdC52YWwNCg0KICBmaQ0KICBldmFsICRhc19s aW5lbm9fc3RhY2s7ICR7YXNfbGluZW5vX3N0YWNrOis6fSB1bnNldCBhc19saW5lbm8NCiAgYXNf Zm5fc2V0X3N0YXR1cyAkYWNfcmV0dmFsDQoNCn0gIyBhY19mbl9jX2NvbXB1dGVfaW50DQoNCiMg YWNfZm5fY19jaGVja19tZW1iZXIgTElORU5PIEFHR1IgTUVNQkVSIFZBUiBJTkNMVURFUw0KIyAt LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQojIFRy aWVzIHRvIGZpbmQgaWYgdGhlIGZpZWxkIE1FTUJFUiBleGlzdHMgaW4gdHlwZSBBR0dSLCBhZnRl ciBpbmNsdWRpbmcNCiMgSU5DTFVERVMsIHNldHRpbmcgY2FjaGUgdmFyaWFibGUgVkFSIGFjY29y ZGluZ2x5Lg0KYWNfZm5fY19jaGVja19tZW1iZXIgKCkNCnsNCiAgYXNfbGluZW5vPSR7YXNfbGlu ZW5vLSIkMSJ9IGFzX2xpbmVub19zdGFjaz1hc19saW5lbm9fc3RhY2s9JGFzX2xpbmVub19zdGFj aw0KICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZv ciAkMi4kMyIgPiY1DQokYXNfZWNob19uICJjaGVja2luZyBmb3IgJDIuJDMuLi4gIiA+JjY7IH0N CmlmIGV2YWwgXCR7JDQrOn0gZmFsc2U7IHRoZW4gOg0KICAkYXNfZWNob19uICIoY2FjaGVkKSAi ID4mNg0KZWxzZQ0KICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0 DQovKiBlbmQgY29uZmRlZnMuaC4gICovDQokNQ0KaW50DQptYWluICgpDQp7DQpzdGF0aWMgJDIg YWNfYWdncjsNCmlmIChhY19hZ2dyLiQzKQ0KcmV0dXJuIDA7DQogIDsNCiAgcmV0dXJuIDA7DQp9 DQpfQUNFT0YNCmlmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoNCiAgZXZh bCAiJDQ9eWVzIg0KZWxzZQ0KICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4k YWNfZXh0DQovKiBlbmQgY29uZmRlZnMuaC4gICovDQokNQ0KaW50DQptYWluICgpDQp7DQpzdGF0 aWMgJDIgYWNfYWdncjsNCmlmIChzaXplb2YgYWNfYWdnci4kMykNCnJldHVybiAwOw0KICA7DQog IHJldHVybiAwOw0KfQ0KX0FDRU9GDQppZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsg dGhlbiA6DQogIGV2YWwgIiQ0PXllcyINCmVsc2UNCiAgZXZhbCAiJDQ9bm8iDQpmaQ0Kcm0gLWYg Y29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0DQpm aQ0Kcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4k YWNfZXh0DQpmaQ0KZXZhbCBhY19yZXM9XCQkNA0KCSAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6 JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX3JlcyIgPiY1DQokYXNfZWNobyAiJGFj X3JlcyIgPiY2OyB9DQogIGV2YWwgJGFzX2xpbmVub19zdGFjazsgJHthc19saW5lbm9fc3RhY2s6 Kzp9IHVuc2V0IGFzX2xpbmVubw0KDQp9ICMgYWNfZm5fY19jaGVja19tZW1iZXINCmNhdCA+Y29u ZmlnLmxvZyA8PF9BQ0VPRg0KVGhpcyBmaWxlIGNvbnRhaW5zIGFueSBtZXNzYWdlcyBwcm9kdWNl ZCBieSBjb21waWxlcnMgd2hpbGUNCnJ1bm5pbmcgY29uZmlndXJlLCB0byBhaWQgZGVidWdnaW5n IGlmIGNvbmZpZ3VyZSBtYWtlcyBhIG1pc3Rha2UuDQoNCkl0IHdhcyBjcmVhdGVkIGJ5IEdOVSBj b3JldXRpbHMgJGFzX21lIDguMTIsIHdoaWNoIHdhcw0KZ2VuZXJhdGVkIGJ5IEdOVSBBdXRvY29u ZiAyLjY4LjcxLWFmMzAwLiAgSW52b2NhdGlvbiBjb21tYW5kIGxpbmUgd2FzDQoNCiAgJCAkMCAk QA0KDQpfQUNFT0YNCmV4ZWMgNT4+Y29uZmlnLmxvZw0Kew0KY2F0IDw8X0FTVU5BTUUNCiMjIC0t LS0tLS0tLSAjIw0KIyMgUGxhdGZvcm0uICMjDQojIyAtLS0tLS0tLS0gIyMNCg0KaG9zdG5hbWUg PSBgKGhvc3RuYW1lIHx8IHVuYW1lIC1uKSAyPi9kZXYvbnVsbCB8IHNlZCAxcWANCnVuYW1lIC1t ID0gYCh1bmFtZSAtbSkgMj4vZGV2L251bGwgfHwgZWNobyB1bmtub3duYA0KdW5hbWUgLXIgPSBg KHVuYW1lIC1yKSAyPi9kZXYvbnVsbCB8fCBlY2hvIHVua25vd25gDQp1bmFtZSAtcyA9IGAodW5h bWUgLXMpIDI+L2Rldi9udWxsIHx8IGVjaG8gdW5rbm93bmANCnVuYW1lIC12ID0gYCh1bmFtZSAt dikgMj4vZGV2L251bGwgfHwgZWNobyB1bmtub3duYA0KDQovdXNyL2Jpbi91bmFtZSAtcCA9IGAo L3Vzci9iaW4vdW5hbWUgLXApIDI+L2Rldi9udWxsIHx8IGVjaG8gdW5rbm93bmANCi9iaW4vdW5h bWUgLVggICAgID0gYCgvYmluL3VuYW1lIC1YKSAyPi9kZXYvbnVsbCAgICAgfHwgZWNobyB1bmtu b3duYA0KDQovYmluL2FyY2ggICAgICAgICAgICAgID0gYCgvYmluL2FyY2gpIDI+L2Rldi9udWxs ICAgICAgICAgICAgICB8fCBlY2hvIHVua25vd25gDQovdXNyL2Jpbi9hcmNoIC1rICAgICAgID0g YCgvdXNyL2Jpbi9hcmNoIC1rKSAyPi9kZXYvbnVsbCAgICAgICB8fCBlY2hvIHVua25vd25gDQov dXNyL2NvbnZleC9nZXRzeXNpbmZvID0gYCgvdXNyL2NvbnZleC9nZXRzeXNpbmZvKSAyPi9kZXYv bnVsbCB8fCBlY2hvIHVua25vd25gDQovdXNyL2Jpbi9ob3N0aW5mbyAgICAgID0gYCgvdXNyL2Jp bi9ob3N0aW5mbykgMj4vZGV2L251bGwgICAgICB8fCBlY2hvIHVua25vd25gDQovYmluL21hY2hp bmUgICAgICAgICAgID0gYCgvYmluL21hY2hpbmUpIDI+L2Rldi9udWxsICAgICAgICAgICB8fCBl Y2hvIHVua25vd25gDQovdXNyL2Jpbi9vc2xldmVsICAgICAgID0gYCgvdXNyL2Jpbi9vc2xldmVs KSAyPi9kZXYvbnVsbCAgICAgICB8fCBlY2hvIHVua25vd25gDQovYmluL3VuaXZlcnNlICAgICAg ICAgID0gYCgvYmluL3VuaXZlcnNlKSAyPi9kZXYvbnVsbCAgICAgICAgICB8fCBlY2hvIHVua25v d25gDQoNCl9BU1VOQU1FDQoNCmFzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IN CmZvciBhc19kaXIgaW4gJFBBVEgNCmRvDQogIElGUz0kYXNfc2F2ZV9JRlMNCiAgdGVzdCAteiAi JGFzX2RpciIgJiYgYXNfZGlyPS4NCiAgICAkYXNfZWNobyAiUEFUSDogJGFzX2RpciINCiAgZG9u ZQ0KSUZTPSRhc19zYXZlX0lGUw0KDQp9ID4mNQ0KDQpjYXQgPiY1IDw8X0FDRU9GDQoNCg0KIyMg LS0tLS0tLS0tLS0gIyMNCiMjIENvcmUgdGVzdHMuICMjDQojIyAtLS0tLS0tLS0tLSAjIw0KDQpf QUNFT0YNCg0KDQojIEtlZXAgYSB0cmFjZSBvZiB0aGUgY29tbWFuZCBsaW5lLg0KIyBTdHJpcCBv dXQgLS1uby1jcmVhdGUgYW5kIC0tbm8tcmVjdXJzaW9uIHNvIHRoZXkgZG8gbm90IHBpbGUgdXAu DQojIFN0cmlwIG91dCAtLXNpbGVudCBiZWNhdXNlIHdlIGRvbid0IHdhbnQgdG8gcmVjb3JkIGl0 IGZvciBmdXR1cmUgcnVucy4NCiMgQWxzbyBxdW90ZSBhbnkgYXJncyBjb250YWluaW5nIHNoZWxs IG1ldGEtY2hhcmFjdGVycy4NCiMgTWFrZSB0d28gcGFzc2VzIHRvIGFsbG93IGZvciBwcm9wZXIg ZHVwbGljYXRlLWFyZ3VtZW50IHN1cHByZXNzaW9uLg0KYWNfY29uZmlndXJlX2FyZ3M9DQphY19j b25maWd1cmVfYXJnczA9DQphY19jb25maWd1cmVfYXJnczE9DQphY19tdXN0X2tlZXBfbmV4dD1m YWxzZQ0KZm9yIGFjX3Bhc3MgaW4gMSAyDQpkbw0KICBmb3IgYWNfYXJnDQogIGRvDQogICAgY2Fz ZSAkYWNfYXJnIGluDQogICAgLW5vLWNyZWF0ZSB8IC0tbm8tYyogfCAtbiB8IC1uby1yZWN1cnNp b24gfCAtLW5vLXIqKSBjb250aW51ZSA7Ow0KICAgIC1xIHwgLXF1aWV0IHwgLS1xdWlldCB8IC0t cXVpZSB8IC0tcXVpIHwgLS1xdSB8IC0tcSBcDQogICAgfCAtc2lsZW50IHwgLS1zaWxlbnQgfCAt LXNpbGVuIHwgLS1zaWxlIHwgLS1zaWwpDQogICAgICBjb250aW51ZSA7Ow0KICAgICpcJyopDQog ICAgICBhY19hcmc9YCRhc19lY2hvICIkYWNfYXJnIiB8IHNlZCAicy8nLydcXFxcXFxcXCcnL2ci YCA7Ow0KICAgIGVzYWMNCiAgICBjYXNlICRhY19wYXNzIGluDQogICAgMSkgYXNfZm5fYXBwZW5k IGFjX2NvbmZpZ3VyZV9hcmdzMCAiICckYWNfYXJnJyIgOzsNCiAgICAyKQ0KICAgICAgYXNfZm5f YXBwZW5kIGFjX2NvbmZpZ3VyZV9hcmdzMSAiICckYWNfYXJnJyINCiAgICAgIGlmIHRlc3QgJGFj X211c3Rfa2VlcF9uZXh0ID0gdHJ1ZTsgdGhlbg0KCWFjX211c3Rfa2VlcF9uZXh0PWZhbHNlICMg R290IHZhbHVlLCBiYWNrIHRvIG5vcm1hbC4NCiAgICAgIGVsc2UNCgljYXNlICRhY19hcmcgaW4N CgkgICo9KiB8IC0tY29uZmlnLWNhY2hlIHwgLUMgfCAtZGlzYWJsZS0qIHwgLS1kaXNhYmxlLSog XA0KCSAgfCAtZW5hYmxlLSogfCAtLWVuYWJsZS0qIHwgLWdhcyB8IC0tZyogfCAtbmZwIHwgLS1u ZiogXA0KCSAgfCAtcSB8IC1xdWlldCB8IC0tcSogfCAtc2lsZW50IHwgLS1zaWwqIHwgLXYgfCAt dmVyYiogXA0KCSAgfCAtd2l0aC0qIHwgLS13aXRoLSogfCAtd2l0aG91dC0qIHwgLS13aXRob3V0 LSogfCAtLXgpDQoJICAgIGNhc2UgIiRhY19jb25maWd1cmVfYXJnczAgIiBpbg0KCSAgICAgICIk YWNfY29uZmlndXJlX2FyZ3MxIioiICckYWNfYXJnJyAiKiApIGNvbnRpbnVlIDs7DQoJICAgIGVz YWMNCgkgICAgOzsNCgkgIC0qICkgYWNfbXVzdF9rZWVwX25leHQ9dHJ1ZSA7Ow0KCWVzYWMNCiAg ICAgIGZpDQogICAgICBhc19mbl9hcHBlbmQgYWNfY29uZmlndXJlX2FyZ3MgIiAnJGFjX2FyZyci DQogICAgICA7Ow0KICAgIGVzYWMNCiAgZG9uZQ0KZG9uZQ0KeyBhY19jb25maWd1cmVfYXJnczA9 OyB1bnNldCBhY19jb25maWd1cmVfYXJnczA7fQ0KeyBhY19jb25maWd1cmVfYXJnczE9OyB1bnNl dCBhY19jb25maWd1cmVfYXJnczE7fQ0KDQojIFdoZW4gaW50ZXJydXB0ZWQgb3IgZXhpdCdkLCBj bGVhbnVwIHRlbXBvcmFyeSBmaWxlcywgYW5kIGNvbXBsZXRlDQojIGNvbmZpZy5sb2cuICBXZSBy ZW1vdmUgY29tbWVudHMgYmVjYXVzZSBhbnl3YXkgdGhlIHF1b3RlcyBpbiB0aGVyZQ0KIyB3b3Vs ZCBjYXVzZSBwcm9ibGVtcyBvciBsb29rIHVnbHkuDQojIFdBUk5JTkc6IFVzZSAnXCcnIHRvIHJl cHJlc2VudCBhbiBhcG9zdHJvcGhlIHdpdGhpbiB0aGUgdHJhcC4NCiMgV0FSTklORzogRG8gbm90 IHN0YXJ0IHRoZSB0cmFwIGNvZGUgd2l0aCBhIG5ld2xpbmUsIGR1ZSB0byBhIEZyZWVCU0QgNC4w IGJ1Zy4NCnRyYXAgJ2V4aXRfc3RhdHVzPSQ/DQogICMgU2F2ZSBpbnRvIGNvbmZpZy5sb2cgc29t ZSBpbmZvcm1hdGlvbiB0aGF0IG1pZ2h0IGhlbHAgaW4gZGVidWdnaW5nLg0KICB7DQogICAgZWNo bw0KDQogICAgJGFzX2VjaG8gIiMjIC0tLS0tLS0tLS0tLS0tLS0gIyMNCiMjIENhY2hlIHZhcmlh Ymxlcy4gIyMNCiMjIC0tLS0tLS0tLS0tLS0tLS0gIyMiDQogICAgZWNobw0KICAgICMgVGhlIGZv bGxvd2luZyB3YXkgb2Ygd3JpdGluZyB0aGUgY2FjaGUgbWlzaGFuZGxlcyBuZXdsaW5lcyBpbiB2 YWx1ZXMsDQooDQogIGZvciBhY192YXIgaW4gYChzZXQpIDI+JjEgfCBzZWQgLW4gJ1wnJ3MvXlwo W2EtekEtWl9dW2EtekEtWjAtOV9dKlwpPS4qL1wxL3AnXCcnYDsgZG8NCiAgICBldmFsIGFjX3Zh bD1cJCRhY192YXINCiAgICBjYXNlICRhY192YWwgaW4gIygNCiAgICAqJHthc19ubH0qKQ0KICAg ICAgY2FzZSAkYWNfdmFyIGluICMoDQogICAgICAqX2N2XyopIHsgJGFzX2VjaG8gIiRhc19tZTok e2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogY2FjaGUgdmFyaWFibGUgJGFjX3ZhciBjb250 YWlucyBhIG5ld2xpbmUiID4mNQ0KJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogY2FjaGUgdmFy aWFibGUgJGFjX3ZhciBjb250YWlucyBhIG5ld2xpbmUiID4mMjt9IDs7DQogICAgICBlc2FjDQog ICAgICBjYXNlICRhY192YXIgaW4gIygNCiAgICAgIF8gfCBJRlMgfCBhc19ubCkgOzsgIygNCiAg ICAgIEJBU0hfQVJHViB8IEJBU0hfU09VUkNFKSBldmFsICRhY192YXI9IDs7ICMoDQogICAgICAq KSB7IGV2YWwgJGFjX3Zhcj07IHVuc2V0ICRhY192YXI7fSA7Ow0KICAgICAgZXNhYyA7Ow0KICAg IGVzYWMNCiAgZG9uZQ0KICAoc2V0KSAyPiYxIHwNCiAgICBjYXNlICRhc19ubGAoYWNfc3BhY2U9 J1wnJyAnXCcnOyBzZXQpIDI+JjFgIGluICMoDQogICAgKiR7YXNfbmx9YWNfc3BhY2U9XCAqKQ0K ICAgICAgc2VkIC1uIFwNCgkicy8nXCcnLydcJydcXFxcJ1wnJydcJycvZzsNCgkgIHMvXlxcKFtf JGFzX2NyX2FsbnVtXSpfY3ZfW18kYXNfY3JfYWxudW1dKlxcKT1cXCguKlxcKS9cXDE9J1wnJ1xc MidcJycvcCINCiAgICAgIDs7ICMoDQogICAgKikNCiAgICAgIHNlZCAtbiAiL15bXyRhc19jcl9h bG51bV0qX2N2X1tfJGFzX2NyX2FsbnVtXSo9L3AiDQogICAgICA7Ow0KICAgIGVzYWMgfA0KICAg IHNvcnQNCikNCiAgICBlY2hvDQoNCiAgICAkYXNfZWNobyAiIyMgLS0tLS0tLS0tLS0tLS0tLS0g IyMNCiMjIE91dHB1dCB2YXJpYWJsZXMuICMjDQojIyAtLS0tLS0tLS0tLS0tLS0tLSAjIyINCiAg ICBlY2hvDQogICAgZm9yIGFjX3ZhciBpbiAkYWNfc3Vic3RfdmFycw0KICAgIGRvDQogICAgICBl dmFsIGFjX3ZhbD1cJCRhY192YXINCiAgICAgIGNhc2UgJGFjX3ZhbCBpbg0KICAgICAgKlwnXCcn KikgYWNfdmFsPWAkYXNfZWNobyAiJGFjX3ZhbCIgfCBzZWQgInMvJ1wnJy8nXCcnXFxcXFxcXFwn XCcnJ1wnJy9nImA7Ow0KICAgICAgZXNhYw0KICAgICAgJGFzX2VjaG8gIiRhY192YXI9J1wnJyRh Y192YWwnXCcnIg0KICAgIGRvbmUgfCBzb3J0DQogICAgZWNobw0KDQogICAgaWYgdGVzdCAtbiAi JGFjX3N1YnN0X2ZpbGVzIjsgdGhlbg0KICAgICAgJGFzX2VjaG8gIiMjIC0tLS0tLS0tLS0tLS0t LS0tLS0gIyMNCiMjIEZpbGUgc3Vic3RpdHV0aW9ucy4gIyMNCiMjIC0tLS0tLS0tLS0tLS0tLS0t LS0gIyMiDQogICAgICBlY2hvDQogICAgICBmb3IgYWNfdmFyIGluICRhY19zdWJzdF9maWxlcw0K ICAgICAgZG8NCglldmFsIGFjX3ZhbD1cJCRhY192YXINCgljYXNlICRhY192YWwgaW4NCgkqXCdc JycqKSBhY192YWw9YCRhc19lY2hvICIkYWNfdmFsIiB8IHNlZCAicy8nXCcnLydcJydcXFxcXFxc XCdcJycnXCcnL2ciYDs7DQoJZXNhYw0KCSRhc19lY2hvICIkYWNfdmFyPSdcJyckYWNfdmFsJ1wn JyINCiAgICAgIGRvbmUgfCBzb3J0DQogICAgICBlY2hvDQogICAgZmkNCg0KICAgIGlmIHRlc3Qg LXMgY29uZmRlZnMuaDsgdGhlbg0KICAgICAgJGFzX2VjaG8gIiMjIC0tLS0tLS0tLS0tICMjDQoj IyBjb25mZGVmcy5oLiAjIw0KIyMgLS0tLS0tLS0tLS0gIyMiDQogICAgICBlY2hvDQogICAgICBj YXQgY29uZmRlZnMuaA0KICAgICAgZWNobw0KICAgIGZpDQogICAgdGVzdCAiJGFjX3NpZ25hbCIg IT0gMCAmJg0KICAgICAgJGFzX2VjaG8gIiRhc19tZTogY2F1Z2h0IHNpZ25hbCAkYWNfc2lnbmFs Ig0KICAgICRhc19lY2hvICIkYXNfbWU6IGV4aXQgJGV4aXRfc3RhdHVzIg0KICB9ID4mNQ0KICBy bSAtZiBjb3JlICouY29yZSBjb3JlLmNvbmZ0ZXN0LiogJiYNCiAgICBybSAtZiAtciBjb25mdGVz dCogY29uZmRlZnMqIGNvbmYkJCogJGFjX2NsZWFuX2ZpbGVzICYmDQogICAgZXhpdCAkZXhpdF9z dGF0dXMNCicgMA0KZm9yIGFjX3NpZ25hbCBpbiAxIDIgMTMgMTU7IGRvDQogIHRyYXAgJ2FjX3Np Z25hbD0nJGFjX3NpZ25hbCc7IGFzX2ZuX2V4aXQgMScgJGFjX3NpZ25hbA0KZG9uZQ0KYWNfc2ln bmFsPTANCg0KIyBjb25mZGVmcy5oIGF2b2lkcyBPUyBjb21tYW5kIGxpbmUgbGVuZ3RoIGxpbWl0 cyB0aGF0IERFRlMgY2FuIGV4Y2VlZC4NCnJtIC1mIC1yIGNvbmZ0ZXN0KiBjb25mZGVmcy5oDQoN CiRhc19lY2hvICIvKiBjb25mZGVmcy5oICovIiA+IGNvbmZkZWZzLmgNCg0KIyBQcmVkZWZpbmVk IHByZXByb2Nlc3NvciB2YXJpYWJsZXMuDQoNCmNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YNCiNk ZWZpbmUgUEFDS0FHRV9OQU1FICIkUEFDS0FHRV9OQU1FIg0KX0FDRU9GDQoNCmNhdCA+PmNvbmZk ZWZzLmggPDxfQUNFT0YNCiNkZWZpbmUgUEFDS0FHRV9UQVJOQU1FICIkUEFDS0FHRV9UQVJOQU1F Ig0KX0FDRU9GDQoNCmNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YNCiNkZWZpbmUgUEFDS0FHRV9W RVJTSU9OICIkUEFDS0FHRV9WRVJTSU9OIg0KX0FDRU9GDQoNCmNhdCA+PmNvbmZkZWZzLmggPDxf QUNFT0YNCiNkZWZpbmUgUEFDS0FHRV9TVFJJTkcgIiRQQUNLQUdFX1NUUklORyINCl9BQ0VPRg0K DQpjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GDQojZGVmaW5lIFBBQ0tBR0VfQlVHUkVQT1JUICIk UEFDS0FHRV9CVUdSRVBPUlQiDQpfQUNFT0YNCg0KY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRg0K I2RlZmluZSBQQUNLQUdFX1VSTCAiJFBBQ0tBR0VfVVJMIg0KX0FDRU9GDQoNCg0KIyBMZXQgdGhl IHNpdGUgZmlsZSBzZWxlY3QgYW4gYWx0ZXJuYXRlIGNhY2hlIGZpbGUgaWYgaXQgd2FudHMgdG8u DQojIFByZWZlciBhbiBleHBsaWNpdGx5IHNlbGVjdGVkIGZpbGUgdG8gYXV0b21hdGljYWxseSBz ZWxlY3RlZCBvbmVzLg0KYWNfc2l0ZV9maWxlMT1OT05FDQphY19zaXRlX2ZpbGUyPU5PTkUNCmlm IHRlc3QgLW4gIiRDT05GSUdfU0lURSI7IHRoZW4NCiAgIyBXZSBkbyBub3Qgd2FudCBhIFBBVEgg c2VhcmNoIGZvciBjb25maWcuc2l0ZS4NCiAgY2FzZSAkQ09ORklHX1NJVEUgaW4gIygoDQogICAg LSopICBhY19zaXRlX2ZpbGUxPS4vJENPTkZJR19TSVRFOzsNCiAgICAqLyopIGFjX3NpdGVfZmls ZTE9JENPTkZJR19TSVRFOzsNCiAgICAqKSAgIGFjX3NpdGVfZmlsZTE9Li8kQ09ORklHX1NJVEU7 Ow0KICBlc2FjDQplbGlmIHRlc3QgIngkcHJlZml4IiAhPSB4Tk9ORTsgdGhlbg0KICBhY19zaXRl X2ZpbGUxPSRwcmVmaXgvc2hhcmUvY29uZmlnLnNpdGUNCiAgYWNfc2l0ZV9maWxlMj0kcHJlZml4 L2V0Yy9jb25maWcuc2l0ZQ0KZWxzZQ0KICBhY19zaXRlX2ZpbGUxPSRhY19kZWZhdWx0X3ByZWZp eC9zaGFyZS9jb25maWcuc2l0ZQ0KICBhY19zaXRlX2ZpbGUyPSRhY19kZWZhdWx0X3ByZWZpeC9l dGMvY29uZmlnLnNpdGUNCmZpDQpmb3IgYWNfc2l0ZV9maWxlIGluICIkYWNfc2l0ZV9maWxlMSIg IiRhY19zaXRlX2ZpbGUyIg0KZG8NCiAgdGVzdCAieCRhY19zaXRlX2ZpbGUiID0geE5PTkUgJiYg Y29udGludWUNCiAgaWYgdGVzdCAvZGV2L251bGwgIT0gIiRhY19zaXRlX2ZpbGUiICYmIHRlc3Qg LXIgIiRhY19zaXRlX2ZpbGUiOyB0aGVuDQogICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGlu ZW5vLSRMSU5FTk99OiBsb2FkaW5nIHNpdGUgc2NyaXB0ICRhY19zaXRlX2ZpbGUiID4mNQ0KJGFz X2VjaG8gIiRhc19tZTogbG9hZGluZyBzaXRlIHNjcmlwdCAkYWNfc2l0ZV9maWxlIiA+JjY7fQ0K ICAgIHNlZCAncy9eL3wgLycgIiRhY19zaXRlX2ZpbGUiID4mNQ0KICAgIC4gIiRhY19zaXRlX2Zp bGUiIFwNCiAgICAgIHx8IHsgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99 OiBlcnJvcjogaW4gXGAkYWNfcHdkJzoiID4mNQ0KJGFzX2VjaG8gIiRhc19tZTogZXJyb3I6IGlu IFxgJGFjX3B3ZCc6IiA+JjI7fQ0KYXNfZm5fZXJyb3IgJD8gImZhaWxlZCB0byBsb2FkIHNpdGUg c2NyaXB0ICRhY19zaXRlX2ZpbGUNClNlZSBcYGNvbmZpZy5sb2cnIGZvciBtb3JlIGRldGFpbHMi ICIkTElORU5PIiA1OyB9DQogIGZpDQpkb25lDQoNCmlmIHRlc3QgLXIgIiRjYWNoZV9maWxlIjsg dGhlbg0KICAjIFNvbWUgdmVyc2lvbnMgb2YgYmFzaCB3aWxsIGZhaWwgdG8gc291cmNlIC9kZXYv bnVsbCAoc3BlY2lhbCBmaWxlcw0KICAjIGFjdHVhbGx5KSwgc28gd2UgYXZvaWQgZG9pbmcgdGhh dC4gIERKR1BQIGVtdWxhdGVzIGl0IGFzIGEgcmVndWxhciBmaWxlLg0KICBpZiB0ZXN0IC9kZXYv bnVsbCAhPSAiJGNhY2hlX2ZpbGUiICYmIHRlc3QgLWYgIiRjYWNoZV9maWxlIjsgdGhlbg0KICAg IHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogbG9hZGluZyBjYWNoZSAk Y2FjaGVfZmlsZSIgPiY1DQokYXNfZWNobyAiJGFzX21lOiBsb2FkaW5nIGNhY2hlICRjYWNoZV9m aWxlIiA+JjY7fQ0KICAgIGNhc2UgJGNhY2hlX2ZpbGUgaW4NCiAgICAgIFtcXC9dKiB8ID86W1xc L10qICkgLiAiJGNhY2hlX2ZpbGUiOzsNCiAgICAgICopICAgICAgICAgICAgICAgICAgICAgIC4g Ii4vJGNhY2hlX2ZpbGUiOzsNCiAgICBlc2FjDQogIGZpDQplbHNlDQogIHsgJGFzX2VjaG8gIiRh c19tZToke2FzX2xpbmVuby0kTElORU5PfTogY3JlYXRpbmcgY2FjaGUgJGNhY2hlX2ZpbGUiID4m NQ0KJGFzX2VjaG8gIiRhc19tZTogY3JlYXRpbmcgY2FjaGUgJGNhY2hlX2ZpbGUiID4mNjt9DQog ID4kY2FjaGVfZmlsZQ0KZmkNCg0KYXNfZm5fYXBwZW5kIGFjX2hlYWRlcl9saXN0ICIgYXJwYS9p bmV0LmgiDQphc19mbl9hcHBlbmQgYWNfaGVhZGVyX2xpc3QgIiBmZWF0dXJlcy5oIg0KYXNfZm5f YXBwZW5kIGFjX2Z1bmNfbGlzdCAiIHBhdGhjb25mIg0KYXNfZm5fYXBwZW5kIGFjX2Z1bmNfbGlz dCAiIGJ0b3djIg0KYXNfZm5fYXBwZW5kIGFjX2Z1bmNfbGlzdCAiIGNhbm9uaWNhbGl6ZV9maWxl X25hbWUiDQphc19mbl9hcHBlbmQgYWNfZnVuY19saXN0ICIgcmVhbHBhdGgiDQphc19mbl9hcHBl bmQgYWNfZnVuY19saXN0ICIgcmVhZGxpbmthdCINCmFzX2ZuX2FwcGVuZCBhY19mdW5jX2xpc3Qg IiBjaG93biINCmFzX2ZuX2FwcGVuZCBhY19mdW5jX2xpc3QgIiBmY2hvd24iDQphc19mbl9hcHBl bmQgYWNfaGVhZGVyX2xpc3QgIiBzeXMvc29ja2V0LmgiDQphc19mbl9hcHBlbmQgYWNfaGVhZGVy X2xpc3QgIiBkaXJlbnQuaCINCmFzX2ZuX2FwcGVuZCBhY19mdW5jX2xpc3QgIiBmZG9wZW5kaXIi DQphc19mbl9hcHBlbmQgYWNfZnVuY19saXN0ICIgZHVwMiINCmFzX2ZuX2FwcGVuZCBhY19mdW5j X2xpc3QgIiBmY250bCINCmFzX2ZuX2FwcGVuZCBhY19mdW5jX2xpc3QgIiBmYWNjZXNzYXQiDQph c19mbl9hcHBlbmQgYWNfaGVhZGVyX2xpc3QgIiBsaWJnZW4uaCINCmFzX2ZuX2FwcGVuZCBhY19m dW5jX2xpc3QgIiBsY2htb2QiDQphc19mbl9hcHBlbmQgYWNfZnVuY19saXN0ICIgYWNjZXNzIg0K YXNfZm5fYXBwZW5kIGFjX2Z1bmNfbGlzdCAiIHBvc2l4X2ZhZHZpc2UiDQphc19mbl9hcHBlbmQg YWNfZnVuY19saXN0ICIgZmNoZGlyIg0KYXNfZm5fYXBwZW5kIGFjX2hlYWRlcl9saXN0ICIgc3lz L3BhcmFtLmgiDQphc19mbl9hcHBlbmQgYWNfZnVuY19saXN0ICIgbWVtcGNweSINCmFzX2ZuX2Fw cGVuZCBhY19mdW5jX2xpc3QgIiBpc2JsYW5rIg0KYXNfZm5fYXBwZW5kIGFjX2Z1bmNfbGlzdCAi IGlzd2N0eXBlIg0KYXNfZm5fYXBwZW5kIGFjX2Z1bmNfbGlzdCAiIG1ic3J0b3djcyINCmFzX2Zu X2FwcGVuZCBhY19mdW5jX2xpc3QgIiB3bWVtY2hyIg0KYXNfZm5fYXBwZW5kIGFjX2Z1bmNfbGlz dCAiIHdtZW1jcHkiDQphc19mbl9hcHBlbmQgYWNfZnVuY19saXN0ICIgd21lbXBjcHkiDQphc19m bl9hcHBlbmQgYWNfaGVhZGVyX2xpc3QgIiB3Y3R5cGUuaCINCmdsX2ZubWF0Y2hfcmVxdWlyZWQ9 R05VDQphc19mbl9hcHBlbmQgYWNfaGVhZGVyX2xpc3QgIiBzdGRpb19leHQuaCINCmFzX2ZuX2Fw cGVuZCBhY19mdW5jX2xpc3QgIiBfX2ZwZW5kaW5nIg0KYXNfZm5fYXBwZW5kIGFjX2Z1bmNfbGlz dCAiIGZwdXJnZSINCmFzX2ZuX2FwcGVuZCBhY19mdW5jX2xpc3QgIiBfX2ZwdXJnZSINCmFzX2Zu X2FwcGVuZCBhY19mdW5jX2xpc3QgIiBfX2ZyZWFkaW5nIg0KYXNfZm5fYXBwZW5kIGFjX2hlYWRl cl9saXN0ICIgc3lzL3Zmcy5oIg0KYXNfZm5fYXBwZW5kIGFjX2hlYWRlcl9saXN0ICIgc3lzL2Zz X3R5cGVzLmgiDQphc19mbl9hcHBlbmQgYWNfZnVuY19saXN0ICIgZnN5bmMiDQphc19mbl9hcHBl bmQgYWNfZnVuY19saXN0ICIgZnN0YXRmcyINCmFzX2ZuX2FwcGVuZCBhY19mdW5jX2xpc3QgIiBm dXRpbWVucyINCmFzX2ZuX2FwcGVuZCBhY19oZWFkZXJfbGlzdCAiIG5ldGRiLmgiDQphc19mbl9h cHBlbmQgYWNfaGVhZGVyX2xpc3QgIiBuZXRpbmV0L2luLmgiDQphc19mbl9hcHBlbmQgYWNfZnVu Y19saXN0ICIgZ2V0ZGVsaW0iDQphc19mbl9hcHBlbmQgYWNfZnVuY19saXN0ICIgZ2V0ZHRhYmxl c2l6ZSINCmFzX2ZuX2FwcGVuZCBhY19mdW5jX2xpc3QgIiBtaWNyb3VwdGltZSINCmFzX2ZuX2Fw cGVuZCBhY19mdW5jX2xpc3QgIiBuYW5vdXB0aW1lIg0KYXNfZm5fYXBwZW5kIGFjX2Z1bmNfbGlz dCAiIGZsb2NrZmlsZSINCmFzX2ZuX2FwcGVuZCBhY19mdW5jX2xpc3QgIiBmdW5sb2NrZmlsZSIN CmdsX2dldG9wdF9yZXF1aXJlZD1HTlUNCmFzX2ZuX2FwcGVuZCBhY19oZWFkZXJfbGlzdCAiIGdl dG9wdC5oIg0KYXNfZm5fYXBwZW5kIGFjX2hlYWRlcl9saXN0ICIgdGVybWlvcy5oIg0KYXNfZm5f YXBwZW5kIGFjX2Z1bmNfbGlzdCAiIF9fZnNldGxvY2tpbmciDQphc19mbl9hcHBlbmQgYWNfZnVu Y19saXN0ICIgdGNnZXRhdHRyIg0KYXNfZm5fYXBwZW5kIGFjX2Z1bmNfbGlzdCAiIHRjc2V0YXR0 ciINCmFzX2ZuX2FwcGVuZCBhY19mdW5jX2xpc3QgIiBnZXR0aW1lb2ZkYXkiDQphc19mbl9hcHBl bmQgYWNfZnVuY19saXN0ICIgbmFub3RpbWUiDQphc19mbl9hcHBlbmQgYWNfaGVhZGVyX2xpc3Qg IiBzeXMvdGltZS5oIg0KYXNfZm5fYXBwZW5kIGFjX2hlYWRlcl9saXN0ICIgZ3JwLmgiDQphc19m bl9hcHBlbmQgYWNfZnVuY19saXN0ICIgZ2V0dXNlcnNoZWxsIg0KYXNfZm5fYXBwZW5kIGFjX2hl YWRlcl9saXN0ICIgaWNvbnYuaCINCmFzX2ZuX2FwcGVuZCBhY19oZWFkZXJfbGlzdCAiIHdjaGFy LmgiDQphc19mbl9hcHBlbmQgYWNfaGVhZGVyX2xpc3QgIiBzdGRpbnQuaCINCmFzX2ZuX2FwcGVu ZCBhY19oZWFkZXJfbGlzdCAiIGludHR5cGVzLmgiDQphc19mbl9hcHBlbmQgYWNfZnVuY19saXN0 ICIgaXN3Y250cmwiDQphc19mbl9hcHBlbmQgYWNfZnVuY19saXN0ICIgaXN3YmxhbmsiDQphc19m bl9hcHBlbmQgYWNfaGVhZGVyX2xpc3QgIiBsYW5naW5mby5oIg0KYXNfZm5fYXBwZW5kIGFjX2Z1 bmNfbGlzdCAiIGxpbmsiDQphc19mbl9hcHBlbmQgYWNfZnVuY19saXN0ICIgcmVhZGxpbmsiDQph c19mbl9hcHBlbmQgYWNfZnVuY19saXN0ICIgbGlua2F0Ig0KYXNfZm5fYXBwZW5kIGFjX2Z1bmNf bGlzdCAiIHN5bWxpbmsiDQphc19mbl9hcHBlbmQgYWNfaGVhZGVyX2xpc3QgIiB4bG9jYWxlLmgi DQphc19mbl9hcHBlbmQgYWNfZnVuY19saXN0ICIgbHN0YXQiDQphc19mbl9hcHBlbmQgYWNfaGVh ZGVyX2xpc3QgIiBtYXRoLmgiDQphc19mbl9hcHBlbmQgYWNfZnVuY19saXN0ICIgbWJzaW5pdCIN CmFzX2ZuX2FwcGVuZCBhY19mdW5jX2xpc3QgIiBtYnJ0b3djIg0KYXNfZm5fYXBwZW5kIGFjX2Z1 bmNfbGlzdCAiIG1ic2xlbiINCmFzX2ZuX2FwcGVuZCBhY19mdW5jX2xpc3QgIiBpc2FzY2lpIg0K YXNfZm5fYXBwZW5kIGFjX2hlYWRlcl9saXN0ICIgc3lzL21tYW4uaCINCmFzX2ZuX2FwcGVuZCBh Y19mdW5jX2xpc3QgIiBtcHJvdGVjdCINCmFzX2ZuX2FwcGVuZCBhY19mdW5jX2xpc3QgIiBtZW1j aHIiDQphc19mbl9hcHBlbmQgYWNfZnVuY19saXN0ICIgZ2V0Z3JvdXBsaXN0Ig0KYXNfZm5fYXBw ZW5kIGFjX2hlYWRlcl9saXN0ICIgdW5pc3RkLmgiDQphc19mbl9hcHBlbmQgYWNfZnVuY19saXN0 ICIgZmNobW9kIg0KYXNfZm5fYXBwZW5kIGFjX2Z1bmNfbGlzdCAiIG1rc3RlbXAiDQphc19mbl9h cHBlbmQgYWNfZnVuY19saXN0ICIgYWxhcm0iDQphc19mbl9hcHBlbmQgYWNfaGVhZGVyX2xpc3Qg IiBzeXMvc3RhdHZmcy5oIg0KYXNfZm5fYXBwZW5kIGFjX2hlYWRlcl9saXN0ICIgc3lzL3NlbGVj dC5oIg0KYXNfZm5fYXBwZW5kIGFjX2Z1bmNfbGlzdCAiIG5sX2xhbmdpbmZvIg0KZ2xfcHJpbnRm X3NhZmU9eWVzDQphc19mbl9hcHBlbmQgYWNfaGVhZGVyX2xpc3QgIiBwcml2LmgiDQphc19mbl9h cHBlbmQgYWNfaGVhZGVyX2xpc3QgIiBwdGhyZWFkLmgiDQphc19mbl9hcHBlbmQgYWNfaGVhZGVy X2xpc3QgIiB1dG1wLmgiDQphc19mbl9hcHBlbmQgYWNfaGVhZGVyX2xpc3QgIiB1dG1weC5oIg0K YXNfZm5fYXBwZW5kIGFjX2Z1bmNfbGlzdCAiIHV0bXBuYW1lIg0KYXNfZm5fYXBwZW5kIGFjX2Z1 bmNfbGlzdCAiIHV0bXB4bmFtZSINCmFzX2ZuX2FwcGVuZCBhY19mdW5jX2xpc3QgIiB3Y3Njb2xs Ig0KYXNfZm5fYXBwZW5kIGFjX2hlYWRlcl9saXN0ICIgc2NoZWQuaCINCmFzX2ZuX2FwcGVuZCBh Y19oZWFkZXJfbGlzdCAiIHNlbGludXgvc2VsaW51eC5oIg0KYXNfZm5fYXBwZW5kIGFjX2Z1bmNf bGlzdCAiIHNldGVudiINCmFzX2ZuX2FwcGVuZCBhY19mdW5jX2xpc3QgIiBzZXR0aW1lb2ZkYXki DQphc19mbl9hcHBlbmQgYWNfZnVuY19saXN0ICIgc3RpbWUiDQphc19mbl9hcHBlbmQgYWNfZnVu Y19saXN0ICIgc2lnYWN0aW9uIg0KYXNfZm5fYXBwZW5kIGFjX2Z1bmNfbGlzdCAiIHNpZ2FsdHN0 YWNrIg0KYXNfZm5fYXBwZW5kIGFjX2Z1bmNfbGlzdCAiIHNpZ2ludGVycnVwdCINCmFzX2ZuX2Fw cGVuZCBhY19mdW5jX2xpc3QgIiBzdHBuY3B5Ig0KYXNfZm5fYXBwZW5kIGFjX2Z1bmNfbGlzdCAi IHN0cmR1cCINCmFzX2ZuX2FwcGVuZCBhY19mdW5jX2xpc3QgIiB0enNldCINCmFzX2ZuX2FwcGVu ZCBhY19mdW5jX2xpc3QgIiBzdHJuZHVwIg0KYXNfZm5fYXBwZW5kIGFjX2Z1bmNfbGlzdCAiIHN5 bWxpbmthdCINCmFzX2ZuX2FwcGVuZCBhY19oZWFkZXJfbGlzdCAiIHN5cy9pb2N0bC5oIg0KYXNf Zm5fYXBwZW5kIGFjX2hlYWRlcl9saXN0ICIgc3lzL3N0YXQuaCINCmFzX2ZuX2FwcGVuZCBhY19o ZWFkZXJfbGlzdCAiIHN5cy91dHNuYW1lLmgiDQphc19mbl9hcHBlbmQgYWNfaGVhZGVyX2xpc3Qg IiBzeXMvd2FpdC5oIg0KYXNfZm5fYXBwZW5kIGFjX2Z1bmNfbGlzdCAiIGxvY2FsdGltZV9yIg0K YXNfZm5fYXBwZW5kIGFjX2Z1bmNfbGlzdCAiIHBpcGUiDQphc19mbl9hcHBlbmQgYWNfaGVhZGVy X2xpc3QgIiB1dGltZS5oIg0KYXNfZm5fYXBwZW5kIGFjX2Z1bmNfbGlzdCAiIGZ1dGltZXMiDQph c19mbl9hcHBlbmQgYWNfZnVuY19saXN0ICIgZnV0aW1lc2F0Ig0KYXNfZm5fYXBwZW5kIGFjX2Z1 bmNfbGlzdCAiIHV0aW1lbnNhdCINCmFzX2ZuX2FwcGVuZCBhY19mdW5jX2xpc3QgIiBsdXRpbWVz Ig0KYXNfZm5fYXBwZW5kIGFjX2Z1bmNfbGlzdCAiIHZhc25wcmludGYiDQphc19mbl9hcHBlbmQg YWNfZnVuY19saXN0ICIgd2NydG9tYiINCmFzX2ZuX2FwcGVuZCBhY19mdW5jX2xpc3QgIiB3Y3dp ZHRoIg0KYXNfZm5fYXBwZW5kIGFjX2Z1bmNfbGlzdCAiIHdjc3dpZHRoIg0KYXNfZm5fYXBwZW5k IGFjX2Z1bmNfbGlzdCAiIGdldGVnaWQiDQphc19mbl9hcHBlbmQgYWNfZnVuY19saXN0ICIgbmV3 bG9jYWxlIg0KYXNfZm5fYXBwZW5kIGFjX2Z1bmNfbGlzdCAiIHNsZWVwIg0KYXNfZm5fYXBwZW5k IGFjX2Z1bmNfbGlzdCAiIHNodXRkb3duIg0KYXNfZm5fYXBwZW5kIGFjX2Z1bmNfbGlzdCAiIHVz bGVlcCINCmFzX2ZuX2FwcGVuZCBhY19mdW5jX2xpc3QgIiB3Y3RvYiINCmFzX2ZuX2FwcGVuZCBh Y19oZWFkZXJfbGlzdCAiIGh1cmQuaCINCmFzX2ZuX2FwcGVuZCBhY19oZWFkZXJfbGlzdCAiIHBh dGhzLmgiDQphc19mbl9hcHBlbmQgYWNfaGVhZGVyX2xpc3QgIiBzdHJvcHRzLmgiDQphc19mbl9h cHBlbmQgYWNfaGVhZGVyX2xpc3QgIiBzeXMvcmVzb3VyY2UuaCINCmFzX2ZuX2FwcGVuZCBhY19o ZWFkZXJfbGlzdCAiIHN5cy9zeXN0ZW1pbmZvLmgiDQphc19mbl9hcHBlbmQgYWNfaGVhZGVyX2xp c3QgIiBzeXNsb2cuaCINCmFzX2ZuX2FwcGVuZCBhY19oZWFkZXJfbGlzdCAiIHB3ZC5oIg0KYXNf Zm5fYXBwZW5kIGFjX2Z1bmNfbGlzdCAiIGRpcmVjdGlvIg0KYXNfZm5fYXBwZW5kIGFjX2Z1bmNf bGlzdCAiIGVuZGdyZW50Ig0KYXNfZm5fYXBwZW5kIGFjX2Z1bmNfbGlzdCAiIGVuZHB3ZW50Ig0K YXNfZm5fYXBwZW5kIGFjX2Z1bmNfbGlzdCAiIGZ0cnVuY2F0ZSINCmFzX2ZuX2FwcGVuZCBhY19m dW5jX2xpc3QgIiBpc3dzcGFjZSINCmFzX2ZuX2FwcGVuZCBhY19mdW5jX2xpc3QgIiBta2ZpZm8i DQphc19mbl9hcHBlbmQgYWNfZnVuY19saXN0ICIgbWJybGVuIg0KYXNfZm5fYXBwZW5kIGFjX2Z1 bmNfbGlzdCAiIHNldGdyb3VwcyINCmFzX2ZuX2FwcGVuZCBhY19mdW5jX2xpc3QgIiBzZXRob3N0 bmFtZSINCmFzX2ZuX2FwcGVuZCBhY19mdW5jX2xpc3QgIiBzeW5jIg0KYXNfZm5fYXBwZW5kIGFj X2Z1bmNfbGlzdCAiIHN5c2N0bCINCmFzX2ZuX2FwcGVuZCBhY19mdW5jX2xpc3QgIiBzeXNpbmZv Ig0KYXNfZm5fYXBwZW5kIGFjX2Z1bmNfbGlzdCAiIHRjZ2V0cGdycCINCmFzX2ZuX2FwcGVuZCBh Y19oZWFkZXJfbGlzdCAiIE9TLmgiDQpndF9uZWVkcz0iJGd0X25lZWRzIG5lZWQtZm9ybWF0c3Ry aW5nLW1hY3JvcyINCiMgQ2hlY2sgdGhhdCB0aGUgcHJlY2lvdXMgdmFyaWFibGVzIHNhdmVkIGlu IHRoZSBjYWNoZSBoYXZlIGtlcHQgdGhlIHNhbWUNCiMgdmFsdWUuDQphY19jYWNoZV9jb3JydXB0 ZWQ9ZmFsc2UNCmZvciBhY192YXIgaW4gJGFjX3ByZWNpb3VzX3ZhcnM7IGRvDQogIGV2YWwgYWNf b2xkX3NldD1cJGFjX2N2X2Vudl8ke2FjX3Zhcn1fc2V0DQogIGV2YWwgYWNfbmV3X3NldD1cJGFj X2Vudl8ke2FjX3Zhcn1fc2V0DQogIGV2YWwgYWNfb2xkX3ZhbD1cJGFjX2N2X2Vudl8ke2FjX3Zh cn1fdmFsdWUNCiAgZXZhbCBhY19uZXdfdmFsPVwkYWNfZW52XyR7YWNfdmFyfV92YWx1ZQ0KICBj YXNlICRhY19vbGRfc2V0LCRhY19uZXdfc2V0IGluDQogICAgc2V0LCkNCiAgICAgIHsgJGFzX2Vj aG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZXJyb3I6IFxgJGFjX3Zhcicgd2FzIHNl dCB0byBcYCRhY19vbGRfdmFsJyBpbiB0aGUgcHJldmlvdXMgcnVuIiA+JjUNCiRhc19lY2hvICIk YXNfbWU6IGVycm9yOiBcYCRhY192YXInIHdhcyBzZXQgdG8gXGAkYWNfb2xkX3ZhbCcgaW4gdGhl IHByZXZpb3VzIHJ1biIgPiYyO30NCiAgICAgIGFjX2NhY2hlX2NvcnJ1cHRlZD06IDs7DQogICAg LHNldCkNCiAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZXJy b3I6IFxgJGFjX3Zhcicgd2FzIG5vdCBzZXQgaW4gdGhlIHByZXZpb3VzIHJ1biIgPiY1DQokYXNf ZWNobyAiJGFzX21lOiBlcnJvcjogXGAkYWNfdmFyJyB3YXMgbm90IHNldCBpbiB0aGUgcHJldmlv dXMgcnVuIiA+JjI7fQ0KICAgICAgYWNfY2FjaGVfY29ycnVwdGVkPTogOzsNCiAgICAsKTs7DQog ICAgKikNCiAgICAgIGlmIHRlc3QgIngkYWNfb2xkX3ZhbCIgIT0gIngkYWNfbmV3X3ZhbCI7IHRo ZW4NCgkjIGRpZmZlcmVuY2VzIGluIHdoaXRlc3BhY2UgZG8gbm90IGxlYWQgdG8gZmFpbHVyZS4N CglhY19vbGRfdmFsX3c9YGVjaG8geCAkYWNfb2xkX3ZhbGANCglhY19uZXdfdmFsX3c9YGVjaG8g eCAkYWNfbmV3X3ZhbGANCglpZiB0ZXN0ICIkYWNfb2xkX3ZhbF93IiAhPSAiJGFjX25ld192YWxf dyI7IHRoZW4NCgkgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZXJy b3I6IFxgJGFjX3ZhcicgaGFzIGNoYW5nZWQgc2luY2UgdGhlIHByZXZpb3VzIHJ1bjoiID4mNQ0K JGFzX2VjaG8gIiRhc19tZTogZXJyb3I6IFxgJGFjX3ZhcicgaGFzIGNoYW5nZWQgc2luY2UgdGhl IHByZXZpb3VzIHJ1bjoiID4mMjt9DQoJICBhY19jYWNoZV9jb3JydXB0ZWQ9Og0KCWVsc2UNCgkg IHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogd2FybmluZzogaWdub3Jp bmcgd2hpdGVzcGFjZSBjaGFuZ2VzIGluIFxgJGFjX3Zhcicgc2luY2UgdGhlIHByZXZpb3VzIHJ1 bjoiID4mNQ0KJGFzX2VjaG8gIiRhc19tZTogd2FybmluZzogaWdub3Jpbmcgd2hpdGVzcGFjZSBj aGFuZ2VzIGluIFxgJGFjX3Zhcicgc2luY2UgdGhlIHByZXZpb3VzIHJ1bjoiID4mMjt9DQoJICBl dmFsICRhY192YXI9XCRhY19vbGRfdmFsDQoJZmkNCgl7ICRhc19lY2hvICIkYXNfbWU6JHthc19s aW5lbm8tJExJTkVOT306ICAgZm9ybWVyIHZhbHVlOiAgXGAkYWNfb2xkX3ZhbCciID4mNQ0KJGFz X2VjaG8gIiRhc19tZTogICBmb3JtZXIgdmFsdWU6ICBcYCRhY19vbGRfdmFsJyIgPiYyO30NCgl7 ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306ICAgY3VycmVudCB2YWx1ZTog XGAkYWNfbmV3X3ZhbCciID4mNQ0KJGFzX2VjaG8gIiRhc19tZTogICBjdXJyZW50IHZhbHVlOiBc YCRhY19uZXdfdmFsJyIgPiYyO30NCiAgICAgIGZpOzsNCiAgZXNhYw0KICAjIFBhc3MgcHJlY2lv dXMgdmFyaWFibGVzIHRvIGNvbmZpZy5zdGF0dXMuDQogIGlmIHRlc3QgIiRhY19uZXdfc2V0IiA9 IHNldDsgdGhlbg0KICAgIGNhc2UgJGFjX25ld192YWwgaW4NCiAgICAqXCcqKSBhY19hcmc9JGFj X3Zhcj1gJGFzX2VjaG8gIiRhY19uZXdfdmFsIiB8IHNlZCAicy8nLydcXFxcXFxcXCcnL2ciYCA7 Ow0KICAgICopIGFjX2FyZz0kYWNfdmFyPSRhY19uZXdfdmFsIDs7DQogICAgZXNhYw0KICAgIGNh c2UgIiAkYWNfY29uZmlndXJlX2FyZ3MgIiBpbg0KICAgICAgKiIgJyRhY19hcmcnICIqKSA7OyAj IEF2b2lkIGR1cHMuICBVc2Ugb2YgcXVvdGVzIGVuc3VyZXMgYWNjdXJhY3kuDQogICAgICAqKSBh c19mbl9hcHBlbmQgYWNfY29uZmlndXJlX2FyZ3MgIiAnJGFjX2FyZyciIDs7DQogICAgZXNhYw0K ICBmaQ0KZG9uZQ0KaWYgJGFjX2NhY2hlX2NvcnJ1cHRlZDsgdGhlbg0KICB7ICRhc19lY2hvICIk YXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGVycm9yOiBpbiBcYCRhY19wd2QnOiIgPiY1DQok YXNfZWNobyAiJGFzX21lOiBlcnJvcjogaW4gXGAkYWNfcHdkJzoiID4mMjt9DQogIHsgJGFzX2Vj aG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZXJyb3I6IGNoYW5nZXMgaW4gdGhlIGVu dmlyb25tZW50IGNhbiBjb21wcm9taXNlIHRoZSBidWlsZCIgPiY1DQokYXNfZWNobyAiJGFzX21l OiBlcnJvcjogY2hhbmdlcyBpbiB0aGUgZW52aXJvbm1lbnQgY2FuIGNvbXByb21pc2UgdGhlIGJ1 aWxkIiA+JjI7fQ0KICBhc19mbl9lcnJvciAkPyAicnVuIFxgbWFrZSBkaXN0Y2xlYW4nIGFuZC9v ciBcYHJtICRjYWNoZV9maWxlJyBhbmQgc3RhcnQgb3ZlciIgIiRMSU5FTk8iIDUNCmZpDQojIyAt LS0tLS0tLS0tLS0tLS0tLS0tLSAjIw0KIyMgTWFpbiBib2R5IG9mIHNjcmlwdC4gIyMNCiMjIC0t LS0tLS0tLS0tLS0tLS0tLS0tICMjDQoNCmFjX2V4dD1jDQphY19jcHA9JyRDUFAgJENQUEZMQUdT Jw0KYWNfY29tcGlsZT0nJENDIC1jICRDRkxBR1MgJENQUEZMQUdTIGNvbmZ0ZXN0LiRhY19leHQg PiY1Jw0KYWNfbGluaz0nJENDIC1vIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAkQ0ZMQUdTICRDUFBGTEFH UyAkTERGTEFHUyBjb25mdGVzdC4kYWNfZXh0ICRMSUJTID4mNScNCmFjX2NvbXBpbGVyX2dudT0k YWNfY3ZfY19jb21waWxlcl9nbnUNCg0KDQoNCg0KDQphY19hdXhfZGlyPQ0KZm9yIGFjX2RpciBp biBidWlsZC1hdXggIiRzcmNkaXIiL2J1aWxkLWF1eDsgZG8NCiAgaWYgdGVzdCAtZiAiJGFjX2Rp ci9pbnN0YWxsLXNoIjsgdGhlbg0KICAgIGFjX2F1eF9kaXI9JGFjX2Rpcg0KICAgIGFjX2luc3Rh bGxfc2g9IiRhY19hdXhfZGlyL2luc3RhbGwtc2ggLWMiDQogICAgYnJlYWsNCiAgZWxpZiB0ZXN0 IC1mICIkYWNfZGlyL2luc3RhbGwuc2giOyB0aGVuDQogICAgYWNfYXV4X2Rpcj0kYWNfZGlyDQog ICAgYWNfaW5zdGFsbF9zaD0iJGFjX2F1eF9kaXIvaW5zdGFsbC5zaCAtYyINCiAgICBicmVhaw0K ICBlbGlmIHRlc3QgLWYgIiRhY19kaXIvc2h0b29sIjsgdGhlbg0KICAgIGFjX2F1eF9kaXI9JGFj X2Rpcg0KICAgIGFjX2luc3RhbGxfc2g9IiRhY19hdXhfZGlyL3NodG9vbCBpbnN0YWxsIC1jIg0K ICAgIGJyZWFrDQogIGZpDQpkb25lDQppZiB0ZXN0IC16ICIkYWNfYXV4X2RpciI7IHRoZW4NCiAg YXNfZm5fZXJyb3IgJD8gImNhbm5vdCBmaW5kIGluc3RhbGwtc2gsIGluc3RhbGwuc2gsIG9yIHNo dG9vbCBpbiBidWlsZC1hdXggXCIkc3JjZGlyXCIvYnVpbGQtYXV4IiAiJExJTkVOTyIgNQ0KZmkN Cg0KIyBUaGVzZSB0aHJlZSB2YXJpYWJsZXMgYXJlIHVuZG9jdW1lbnRlZCBhbmQgdW5zdXBwb3J0 ZWQsDQojIGFuZCBhcmUgaW50ZW5kZWQgdG8gYmUgd2l0aGRyYXduIGluIGEgZnV0dXJlIEF1dG9j b25mIHJlbGVhc2UuDQojIFRoZXkgY2FuIGNhdXNlIHNlcmlvdXMgcHJvYmxlbXMgaWYgYSBidWls ZGVyJ3Mgc291cmNlIHRyZWUgaXMgaW4gYSBkaXJlY3RvcnkNCiMgd2hvc2UgZnVsbCBuYW1lIGNv bnRhaW5zIHVudXN1YWwgY2hhcmFjdGVycy4NCmFjX2NvbmZpZ19ndWVzcz0iJFNIRUxMICRhY19h dXhfZGlyL2NvbmZpZy5ndWVzcyIgICMgUGxlYXNlIGRvbid0IHVzZSB0aGlzIHZhci4NCmFjX2Nv bmZpZ19zdWI9IiRTSEVMTCAkYWNfYXV4X2Rpci9jb25maWcuc3ViIiAgIyBQbGVhc2UgZG9uJ3Qg dXNlIHRoaXMgdmFyLg0KYWNfY29uZmlndXJlPSIkU0hFTEwgJGFjX2F1eF9kaXIvY29uZmlndXJl IiAgIyBQbGVhc2UgZG9uJ3QgdXNlIHRoaXMgdmFyLg0KDQoNCmFjX2NvbmZpZ19oZWFkZXJzPSIk YWNfY29uZmlnX2hlYWRlcnMgbGliL2NvbmZpZy5oOmxpYi9jb25maWcuaGluIg0KDQoNCmFtX19h cGlfdmVyc2lvbj0nMS4xMWEnDQoNCiMgRmluZCBhIGdvb2QgaW5zdGFsbCBwcm9ncmFtLiAgV2Ug cHJlZmVyIGEgQyBwcm9ncmFtIChmYXN0ZXIpLA0KIyBzbyBvbmUgc2NyaXB0IGlzIGFzIGdvb2Qg YXMgYW5vdGhlci4gIEJ1dCBhdm9pZCB0aGUgYnJva2VuIG9yDQojIGluY29tcGF0aWJsZSB2ZXJz aW9uczoNCiMgU3lzViAvZXRjL2luc3RhbGwsIC91c3Ivc2Jpbi9pbnN0YWxsDQojIFN1bk9TIC91 c3IvZXRjL2luc3RhbGwNCiMgSVJJWCAvc2Jpbi9pbnN0YWxsDQojIEFJWCAvYmluL2luc3RhbGwN CiMgQW1pZ2FPUyAvQy9pbnN0YWxsLCB3aGljaCBpbnN0YWxscyBib290YmxvY2tzIG9uIGZsb3Bw eSBkaXNjcw0KIyBBSVggNCAvdXNyL2Jpbi9pbnN0YWxsYnNkLCB3aGljaCBkb2Vzbid0IHdvcmsg d2l0aG91dCBhIC1nIGZsYWcNCiMgQUZTIC91c3IvYWZzd3MvYmluL2luc3RhbGwsIHdoaWNoIG1p c2hhbmRsZXMgbm9uZXhpc3RlbnQgYXJncw0KIyBTVlI0IC91c3IvdWNiL2luc3RhbGwsIHdoaWNo IHRyaWVzIHRvIHVzZSB0aGUgbm9uZXhpc3RlbnQgZ3JvdXAgInN0YWZmIg0KIyBPUy8yJ3Mgc3lz dGVtIGluc3RhbGwsIHdoaWNoIGhhcyBhIGNvbXBsZXRlbHkgZGlmZmVyZW50IHNlbWFudGljDQoj IC4vaW5zdGFsbCwgd2hpY2ggY2FuIGJlIGVycm9uZW91c2x5IGNyZWF0ZWQgYnkgbWFrZSBmcm9t IC4vaW5zdGFsbC5zaC4NCiMgUmVqZWN0IGluc3RhbGwgcHJvZ3JhbXMgdGhhdCBjYW5ub3QgaW5z dGFsbCBtdWx0aXBsZSBmaWxlcy4NCnsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElO RU5PfTogY2hlY2tpbmcgZm9yIGEgQlNELWNvbXBhdGlibGUgaW5zdGFsbCIgPiY1DQokYXNfZWNo b19uICJjaGVja2luZyBmb3IgYSBCU0QtY29tcGF0aWJsZSBpbnN0YWxsLi4uICIgPiY2OyB9DQpp ZiB0ZXN0IC16ICIkSU5TVEFMTCI7IHRoZW4NCmlmICR7YWNfY3ZfcGF0aF9pbnN0YWxsKzp9IGZh bHNlOyB0aGVuIDoNCiAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYNCmVsc2UNCiAgYXNfc2F2 ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUg0KZm9yIGFzX2RpciBpbiAkUEFUSA0KZG8N CiAgSUZTPSRhc19zYXZlX0lGUw0KICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9Lg0KICAg ICMgQWNjb3VudCBmb3IgcGVvcGxlIHdobyBwdXQgdHJhaWxpbmcgc2xhc2hlcyBpbiBQQVRIIGVs ZW1lbnRzLg0KY2FzZSAkYXNfZGlyLyBpbiAjKCgNCiAgLi8gfCAuLy8gfCAvW2NDXS8qIHwgXA0K ICAvZXRjLyogfCAvdXNyL3NiaW4vKiB8IC91c3IvZXRjLyogfCAvc2Jpbi8qIHwgL3Vzci9hZnN3 cy9iaW4vKiB8IFwNCiAgPzpbXFwvXW9zMltcXC9daW5zdGFsbFtcXC9dKiB8ID86W1xcL11PUzJb XFwvXUlOU1RBTExbXFwvXSogfCBcDQogIC91c3IvdWNiLyogKSA7Ow0KICAqKQ0KICAgICMgT1NG MSBhbmQgU0NPIE9EVCAzLjAgaGF2ZSB0aGVpciBvd24gbmFtZXMgZm9yIGluc3RhbGwuDQogICAg IyBEb24ndCB1c2UgaW5zdGFsbGJzZCBmcm9tIE9TRiBzaW5jZSBpdCBpbnN0YWxscyBzdHVmZiBh cyByb290DQogICAgIyBieSBkZWZhdWx0Lg0KICAgIGZvciBhY19wcm9nIGluIGdpbnN0YWxsIHNj b2luc3QgaW5zdGFsbDsgZG8NCiAgICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0 YWJsZV9leHRlbnNpb25zOyBkbw0KCWlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfcHJvZyRhY19l eGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfcHJvZyRhY19leGVjX2V4dCI7IH07 IHRoZW4NCgkgIGlmIHRlc3QgJGFjX3Byb2cgPSBpbnN0YWxsICYmDQoJICAgIGdyZXAgZHNwbXNn ICIkYXNfZGlyLyRhY19wcm9nJGFjX2V4ZWNfZXh0IiA+L2Rldi9udWxsIDI+JjE7IHRoZW4NCgkg ICAgIyBBSVggaW5zdGFsbC4gIEl0IGhhcyBhbiBpbmNvbXBhdGlibGUgY2FsbGluZyBjb252ZW50 aW9uLg0KCSAgICA6DQoJICBlbGlmIHRlc3QgJGFjX3Byb2cgPSBpbnN0YWxsICYmDQoJICAgIGdy ZXAgcHdwbHVzICIkYXNfZGlyLyRhY19wcm9nJGFjX2V4ZWNfZXh0IiA+L2Rldi9udWxsIDI+JjE7 IHRoZW4NCgkgICAgIyBwcm9ncmFtLXNwZWNpZmljIGluc3RhbGwgc2NyaXB0IHVzZWQgYnkgSFAg cHdwbHVzLS1kb24ndCB1c2UuDQoJICAgIDoNCgkgIGVsc2UNCgkgICAgcm0gLXJmIGNvbmZ0ZXN0 Lm9uZSBjb25mdGVzdC50d28gY29uZnRlc3QuZGlyDQoJICAgIGVjaG8gb25lID4gY29uZnRlc3Qu b25lDQoJICAgIGVjaG8gdHdvID4gY29uZnRlc3QudHdvDQoJICAgIG1rZGlyIGNvbmZ0ZXN0LmRp cg0KCSAgICBpZiAiJGFzX2Rpci8kYWNfcHJvZyRhY19leGVjX2V4dCIgLWMgY29uZnRlc3Qub25l IGNvbmZ0ZXN0LnR3byAiYHB3ZGAvY29uZnRlc3QuZGlyIiAmJg0KCSAgICAgIHRlc3QgLXMgY29u ZnRlc3Qub25lICYmIHRlc3QgLXMgY29uZnRlc3QudHdvICYmDQoJICAgICAgdGVzdCAtcyBjb25m dGVzdC5kaXIvY29uZnRlc3Qub25lICYmDQoJICAgICAgdGVzdCAtcyBjb25mdGVzdC5kaXIvY29u ZnRlc3QudHdvDQoJICAgIHRoZW4NCgkgICAgICBhY19jdl9wYXRoX2luc3RhbGw9IiRhc19kaXIv JGFjX3Byb2ckYWNfZXhlY19leHQgLWMiDQoJICAgICAgYnJlYWsgMw0KCSAgICBmaQ0KCSAgZmkN CglmaQ0KICAgICAgZG9uZQ0KICAgIGRvbmUNCiAgICA7Ow0KZXNhYw0KDQogIGRvbmUNCklGUz0k YXNfc2F2ZV9JRlMNCg0Kcm0gLXJmIGNvbmZ0ZXN0Lm9uZSBjb25mdGVzdC50d28gY29uZnRlc3Qu ZGlyDQoNCmZpDQogIGlmIHRlc3QgIiR7YWNfY3ZfcGF0aF9pbnN0YWxsK3NldH0iID0gc2V0OyB0 aGVuDQogICAgSU5TVEFMTD0kYWNfY3ZfcGF0aF9pbnN0YWxsDQogIGVsc2UNCiAgICAjIEFzIGEg bGFzdCByZXNvcnQsIHVzZSB0aGUgc2xvdyBzaGVsbCBzY3JpcHQuICBEb24ndCBjYWNoZSBhDQog ICAgIyB2YWx1ZSBmb3IgSU5TVEFMTCB3aXRoaW4gYSBzb3VyY2UgZGlyZWN0b3J5LCBiZWNhdXNl IHRoYXQgd2lsbA0KICAgICMgYnJlYWsgb3RoZXIgcGFja2FnZXMgdXNpbmcgdGhlIGNhY2hlIGlm IHRoYXQgZGlyZWN0b3J5IGlzDQogICAgIyByZW1vdmVkLCBvciBpZiB0aGUgdmFsdWUgaXMgYSBy ZWxhdGl2ZSBuYW1lLg0KICAgIElOU1RBTEw9JGFjX2luc3RhbGxfc2gNCiAgZmkNCmZpDQp7ICRh c19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJElOU1RBTEwiID4m NQ0KJGFzX2VjaG8gIiRJTlNUQUxMIiA+JjY7IH0NCg0KIyBVc2UgdGVzdCAteiBiZWNhdXNlIFN1 bk9TNCBzaCBtaXNoYW5kbGVzIGJyYWNlcyBpbiAke3Zhci12YWx9Lg0KIyBJdCB0aGlua3MgdGhl IGZpcnN0IGNsb3NlIGJyYWNlIGVuZHMgdGhlIHZhcmlhYmxlIHN1YnN0aXR1dGlvbi4NCnRlc3Qg LXogIiRJTlNUQUxMX1BST0dSQU0iICYmIElOU1RBTExfUFJPR1JBTT0nJHtJTlNUQUxMfScNCg0K dGVzdCAteiAiJElOU1RBTExfU0NSSVBUIiAmJiBJTlNUQUxMX1NDUklQVD0nJHtJTlNUQUxMfScN Cg0KdGVzdCAteiAiJElOU1RBTExfREFUQSIgJiYgSU5TVEFMTF9EQVRBPScke0lOU1RBTEx9IC1t IDY0NCcNCg0KeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2lu ZyB3aGV0aGVyIGJ1aWxkIGVudmlyb25tZW50IGlzIHNhbmUiID4mNQ0KJGFzX2VjaG9fbiAiY2hl Y2tpbmcgd2hldGhlciBidWlsZCBlbnZpcm9ubWVudCBpcyBzYW5lLi4uICIgPiY2OyB9DQojIFJl amVjdCB1bnNhZmUgY2hhcmFjdGVycyBpbiAkc3JjZGlyIG9yIHRoZSBhYnNvbHV0ZSB3b3JraW5n IGRpcmVjdG9yeQ0KIyBuYW1lLiAgQWNjZXB0IHNwYWNlIGFuZCB0YWIgb25seSBpbiB0aGUgbGF0 dGVyLg0KYW1fbGY9Jw0KJw0KY2FzZSBgcHdkYCBpbg0KICAqW1xcXCJcI1wkXCZcJ1xgJGFtX2xm XSopDQogICAgYXNfZm5fZXJyb3IgJD8gInVuc2FmZSBhYnNvbHV0ZSB3b3JraW5nIGRpcmVjdG9y eSBuYW1lIiAiJExJTkVOTyIgNTs7DQplc2FjDQpjYXNlICRzcmNkaXIgaW4NCiAgKltcXFwiXCNc JFwmXCdcYCRhbV9sZlwgXAldKikNCiAgICBhc19mbl9lcnJvciAkPyAidW5zYWZlIHNyY2RpciB2 YWx1ZTogXGAkc3JjZGlyJyIgIiRMSU5FTk8iIDU7Ow0KZXNhYw0KDQojIERvIGBzZXQnIGluIGEg c3Vic2hlbGwgc28gd2UgZG9uJ3QgY2xvYmJlciB0aGUgY3VycmVudCBzaGVsbCdzDQojIGFyZ3Vt ZW50cy4gIE11c3QgdHJ5IC1MIGZpcnN0IGluIGNhc2UgY29uZmlndXJlIGlzIGFjdHVhbGx5IGEN CiMgc3ltbGluazsgc29tZSBzeXN0ZW1zIHBsYXkgd2VpcmQgZ2FtZXMgd2l0aCB0aGUgbW9kIHRp bWUgb2Ygc3ltbGlua3MNCiMgKGVnIEZyZWVCU0QgcmV0dXJucyB0aGUgbW9kIHRpbWUgb2YgdGhl IHN5bWxpbmsncyBjb250YWluaW5nDQojIGRpcmVjdG9yeSkuDQppZiAoDQogICBhbV9oYXNfc2xl cHQ9bm8NCiAgIGZvciBhbV90cnkgaW4gMSAyOyBkbw0KICAgICBlY2hvICJ0aW1lc3RhbXAsIHNs ZXB0OiAkYW1faGFzX3NsZXB0IiA+IGNvbmZ0ZXN0LmZpbGUNCiAgICAgc2V0IFggYGxzIC1MdCAi JHNyY2Rpci9jb25maWd1cmUiIGNvbmZ0ZXN0LmZpbGUgMj4gL2Rldi9udWxsYA0KICAgICBpZiB0 ZXN0ICIkKiIgPSAiWCI7IHRoZW4NCgkjIC1MIGRpZG4ndCB3b3JrLg0KCXNldCBYIGBscyAtdCAi JHNyY2Rpci9jb25maWd1cmUiIGNvbmZ0ZXN0LmZpbGVgDQogICAgIGZpDQogICAgIGlmIHRlc3Qg IiQqIiAhPSAiWCAkc3JjZGlyL2NvbmZpZ3VyZSBjb25mdGVzdC5maWxlIiBcDQoJJiYgdGVzdCAi JCoiICE9ICJYIGNvbmZ0ZXN0LmZpbGUgJHNyY2Rpci9jb25maWd1cmUiOyB0aGVuDQoNCgkjIElm IG5laXRoZXIgbWF0Y2hlZCwgdGhlbiB3ZSBoYXZlIGEgYnJva2VuIGxzLiAgVGhpcyBjYW4gaGFw cGVuDQoJIyBpZiwgZm9yIGluc3RhbmNlLCBDT05GSUdfU0hFTEwgaXMgYmFzaCBhbmQgaXQgaW5o ZXJpdHMgYQ0KCSMgYnJva2VuIGxzIGFsaWFzIGZyb20gdGhlIGVudmlyb25tZW50LiAgVGhpcyBo YXMgYWN0dWFsbHkNCgkjIGhhcHBlbmVkLiAgU3VjaCBhIHN5c3RlbSBjb3VsZCBub3QgYmUgY29u c2lkZXJlZCAic2FuZSIuDQoJYXNfZm5fZXJyb3IgJD8gImxzIC10IGFwcGVhcnMgdG8gZmFpbC4g IE1ha2Ugc3VyZSB0aGVyZSBpcyBub3QgYSBicm9rZW4NCiAgYWxpYXMgaW4geW91ciBlbnZpcm9u bWVudCIgIiRMSU5FTk8iIDUNCiAgICAgZmkNCiAgICAgaWYgdGVzdCAiJDIiID0gY29uZnRlc3Qu ZmlsZSB8fCB0ZXN0ICRhbV90cnkgLWVxIDI7IHRoZW4NCiAgICAgICBicmVhaw0KICAgICBmaQ0K ICAgICAjIEp1c3QgaW4gY2FzZS4NCiAgICAgc2xlZXAgMQ0KICAgICBhbV9oYXNfc2xlcHQ9eWVz DQogICBkb25lDQogICB0ZXN0ICIkMiIgPSBjb25mdGVzdC5maWxlDQogICApDQp0aGVuDQogICAj IE9rLg0KICAgOg0KZWxzZQ0KICAgYXNfZm5fZXJyb3IgJD8gIm5ld2x5IGNyZWF0ZWQgZmlsZSBp cyBvbGRlciB0aGFuIGRpc3RyaWJ1dGVkIGZpbGVzIQ0KQ2hlY2sgeW91ciBzeXN0ZW0gY2xvY2si ICIkTElORU5PIiA1DQpmaQ0KeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99 OiByZXN1bHQ6IHllcyIgPiY1DQokYXNfZWNobyAieWVzIiA+JjY7IH0NCiMgSWYgd2UgZGlkbid0 IHNsZWVwLCB3ZSBzdGlsbCBuZWVkIHRvIGVuc3VyZSB0aW1lIHN0YW1wcyBvZiBjb25maWcuc3Rh dHVzIGFuZA0KIyBnZW5lcmF0ZWQgZmlsZXMgYXJlIHN0cmljdGx5IG5ld2VyLg0KYW1fc2xlZXBf cGlkPQ0KaWYgZ3JlcCAnc2xlcHQ6IG5vJyBjb25mdGVzdC5maWxlID4vZGV2L251bGwgMj4mMTsg dGhlbg0KICAoIHNsZWVwIDEgKSAmDQogIGFtX3NsZWVwX3BpZD0kIQ0KZmkNCg0Kcm0gLWYgY29u ZnRlc3QuZmlsZQ0KDQp0ZXN0ICIkcHJvZ3JhbV9wcmVmaXgiICE9IE5PTkUgJiYNCiAgcHJvZ3Jh bV90cmFuc2Zvcm1fbmFtZT0icyZeJiRwcm9ncmFtX3ByZWZpeCY7JHByb2dyYW1fdHJhbnNmb3Jt X25hbWUiDQojIFVzZSBhIGRvdWJsZSAkIHNvIG1ha2UgaWdub3JlcyBpdC4NCnRlc3QgIiRwcm9n cmFtX3N1ZmZpeCIgIT0gTk9ORSAmJg0KICBwcm9ncmFtX3RyYW5zZm9ybV9uYW1lPSJzJlwkJiRw cm9ncmFtX3N1ZmZpeCY7JHByb2dyYW1fdHJhbnNmb3JtX25hbWUiDQojIERvdWJsZSBhbnkgXCBv ciAkLg0KIyBCeSBkZWZhdWx0IHdhcyBgcyx4LHgnLCByZW1vdmUgaXQgaWYgdXNlbGVzcy4NCmFj X3NjcmlwdD0ncy9bXFwkXS8mJi9nO3MvO3MseCx4LCQvLycNCnByb2dyYW1fdHJhbnNmb3JtX25h bWU9YCRhc19lY2hvICIkcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZSIgfCBzZWQgIiRhY19zY3JpcHQi YA0KDQojIGV4cGFuZCAkYWNfYXV4X2RpciB0byBhbiBhYnNvbHV0ZSBwYXRoDQphbV9hdXhfZGly PWBjZCAkYWNfYXV4X2RpciAmJiBwd2RgDQoNCmlmIHRlc3QgeCIke01JU1NJTkcrc2V0fSIgIT0g eHNldDsgdGhlbg0KICBjYXNlICRhbV9hdXhfZGlyIGluDQogICpcICogfCAqXAkqKQ0KICAgIE1J U1NJTkc9Ilwke1NIRUxMfSBcIiRhbV9hdXhfZGlyL21pc3NpbmdcIiIgOzsNCiAgKikNCiAgICBN SVNTSU5HPSJcJHtTSEVMTH0gJGFtX2F1eF9kaXIvbWlzc2luZyIgOzsNCiAgZXNhYw0KZmkNCiMg VXNlIGV2YWwgdG8gZXhwYW5kICRTSEVMTA0KaWYgZXZhbCAiJE1JU1NJTkcgLS1ydW4gdHJ1ZSI7 IHRoZW4NCiAgYW1fbWlzc2luZ19ydW49IiRNSVNTSU5HIC0tcnVuICINCmVsc2UNCiAgYW1fbWlz c2luZ19ydW49DQogIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FS TklORzogXGBtaXNzaW5nJyBzY3JpcHQgaXMgdG9vIG9sZCBvciBtaXNzaW5nIiA+JjUNCiRhc19l Y2hvICIkYXNfbWU6IFdBUk5JTkc6IFxgbWlzc2luZycgc2NyaXB0IGlzIHRvbyBvbGQgb3IgbWlz c2luZyIgPiYyO30NCmZpDQoNCmlmIHRlc3QgeCIke2luc3RhbGxfc2h9IiAhPSB4c2V0OyB0aGVu DQogIGNhc2UgJGFtX2F1eF9kaXIgaW4NCiAgKlwgKiB8ICpcCSopDQogICAgaW5zdGFsbF9zaD0i XCR7U0hFTEx9ICckYW1fYXV4X2Rpci9pbnN0YWxsLXNoJyIgOzsNCiAgKikNCiAgICBpbnN0YWxs X3NoPSJcJHtTSEVMTH0gJGFtX2F1eF9kaXIvaW5zdGFsbC1zaCINCiAgZXNhYw0KZmkNCg0KIyBJ bnN0YWxsZWQgYmluYXJpZXMgYXJlIHVzdWFsbHkgc3RyaXBwZWQgdXNpbmcgYHN0cmlwJyB3aGVu IHRoZSB1c2VyDQojIHJ1biBgbWFrZSBpbnN0YWxsLXN0cmlwJy4gIEhvd2V2ZXIgYHN0cmlwJyBt aWdodCBub3QgYmUgdGhlIHJpZ2h0DQojIHRvb2wgdG8gdXNlIGluIGNyb3NzLWNvbXBpbGF0aW9u IGVudmlyb25tZW50cywgdGhlcmVmb3JlIEF1dG9tYWtlDQojIHdpbGwgaG9ub3IgdGhlIGBTVFJJ UCcgZW52aXJvbm1lbnQgdmFyaWFibGUgdG8gb3ZlcnJ1bGUgdGhpcyBwcm9ncmFtLg0KaWYgdGVz dCAiJGNyb3NzX2NvbXBpbGluZyIgIT0gbm87IHRoZW4NCiAgaWYgdGVzdCAtbiAiJGFjX3Rvb2xf cHJlZml4IjsgdGhlbg0KICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiR7YWNfdG9vbF9w cmVmaXh9c3RyaXAiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLg0Kc2V0 IGR1bW15ICR7YWNfdG9vbF9wcmVmaXh9c3RyaXA7IGFjX3dvcmQ9JDINCnsgJGFzX2VjaG8gIiRh c19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUNCiRh c19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQ0KaWYgJHthY19jdl9w cm9nX1NUUklQKzp9IGZhbHNlOyB0aGVuIDoNCiAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYN CmVsc2UNCiAgaWYgdGVzdCAtbiAiJFNUUklQIjsgdGhlbg0KICBhY19jdl9wcm9nX1NUUklQPSIk U1RSSVAiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0Lg0KZWxzZQ0KYXNfc2F2ZV9J RlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUg0KZm9yIGFzX2RpciBpbiAkUEFUSA0KZG8NCiAg SUZTPSRhc19zYXZlX0lGUw0KICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9Lg0KICAgIGZv ciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbw0KICBpZiB7 IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRh c19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuDQogICAgYWNfY3ZfcHJvZ19TVFJJ UD0iJHthY190b29sX3ByZWZpeH1zdHJpcCINCiAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGlu ZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUNCiAg ICBicmVhayAyDQogIGZpDQpkb25lDQogIGRvbmUNCklGUz0kYXNfc2F2ZV9JRlMNCg0KZmkNCmZp DQpTVFJJUD0kYWNfY3ZfcHJvZ19TVFJJUA0KaWYgdGVzdCAtbiAiJFNUUklQIjsgdGhlbg0KICB7 ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJFNUUklQIiA+ JjUNCiRhc19lY2hvICIkU1RSSVAiID4mNjsgfQ0KZWxzZQ0KICB7ICRhc19lY2hvICIkYXNfbWU6 JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQ0KJGFzX2VjaG8gIm5vIiA+JjY7 IH0NCmZpDQoNCg0KZmkNCmlmIHRlc3QgLXogIiRhY19jdl9wcm9nX1NUUklQIjsgdGhlbg0KICBh Y19jdF9TVFJJUD0kU1RSSVANCiAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICJzdHJpcCIs IHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuDQpzZXQgZHVtbXkgc3RyaXA7 IGFjX3dvcmQ9JDINCnsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hl Y2tpbmcgZm9yICRhY193b3JkIiA+JjUNCiRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29y ZC4uLiAiID4mNjsgfQ0KaWYgJHthY19jdl9wcm9nX2FjX2N0X1NUUklQKzp9IGZhbHNlOyB0aGVu IDoNCiAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYNCmVsc2UNCiAgaWYgdGVzdCAtbiAiJGFj X2N0X1NUUklQIjsgdGhlbg0KICBhY19jdl9wcm9nX2FjX2N0X1NUUklQPSIkYWNfY3RfU1RSSVAi ICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0Lg0KZWxzZQ0KYXNfc2F2ZV9JRlM9JElG UzsgSUZTPSRQQVRIX1NFUEFSQVRPUg0KZm9yIGFzX2RpciBpbiAkUEFUSA0KZG8NCiAgSUZTPSRh c19zYXZlX0lGUw0KICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9Lg0KICAgIGZvciBhY19l eGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbw0KICBpZiB7IHRlc3Qg LWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIv JGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuDQogICAgYWNfY3ZfcHJvZ19hY19jdF9TVFJJ UD0ic3RyaXAiDQogICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91 bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1DQogICAgYnJlYWsgMg0KICBmaQ0K ZG9uZQ0KICBkb25lDQpJRlM9JGFzX3NhdmVfSUZTDQoNCmZpDQpmaQ0KYWNfY3RfU1RSSVA9JGFj X2N2X3Byb2dfYWNfY3RfU1RSSVANCmlmIHRlc3QgLW4gIiRhY19jdF9TVFJJUCI7IHRoZW4NCiAg eyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdF9T VFJJUCIgPiY1DQokYXNfZWNobyAiJGFjX2N0X1NUUklQIiA+JjY7IH0NCmVsc2UNCiAgeyAkYXNf ZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUNCiRhc19l Y2hvICJubyIgPiY2OyB9DQpmaQ0KDQogIGlmIHRlc3QgIngkYWNfY3RfU1RSSVAiID0geDsgdGhl bg0KICAgIFNUUklQPSI6Ig0KICBlbHNlDQogICAgY2FzZSAkY3Jvc3NfY29tcGlsaW5nOiRhY190 b29sX3dhcm5lZCBpbg0KeWVzOikNCnsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElO RU5PfTogV0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0 cmlwbGV0IiA+JjUNCiRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IHVzaW5nIGNyb3NzIHRvb2xz IG5vdCBwcmVmaXhlZCB3aXRoIGhvc3QgdHJpcGxldCIgPiYyO30NCmFjX3Rvb2xfd2FybmVkPXll cyA7Ow0KZXNhYw0KICAgIFNUUklQPSRhY19jdF9TVFJJUA0KICBmaQ0KZWxzZQ0KICBTVFJJUD0i JGFjX2N2X3Byb2dfU1RSSVAiDQpmaQ0KDQpmaQ0KSU5TVEFMTF9TVFJJUF9QUk9HUkFNPSJcJChp bnN0YWxsX3NoKSAtYyAtcyINCg0KeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5F Tk99OiBjaGVja2luZyBmb3IgYSB0aHJlYWQtc2FmZSBta2RpciAtcCIgPiY1DQokYXNfZWNob19u ICJjaGVja2luZyBmb3IgYSB0aHJlYWQtc2FmZSBta2RpciAtcC4uLiAiID4mNjsgfQ0KaWYgdGVz dCAteiAiJE1LRElSX1AiOyB0aGVuDQogIGlmICR7YWNfY3ZfcGF0aF9ta2Rpcis6fSBmYWxzZTsg dGhlbiA6DQogICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2DQplbHNlDQogIGFzX3NhdmVfSUZT PSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1INCmZvciBhc19kaXIgaW4gJFBBVEgkUEFUSF9TRVBB UkFUT1Ivb3B0L3Nmdy9iaW4NCmRvDQogIElGUz0kYXNfc2F2ZV9JRlMNCiAgdGVzdCAteiAiJGFz X2RpciIgJiYgYXNfZGlyPS4NCiAgICBmb3IgYWNfcHJvZyBpbiBta2RpciBnbWtkaXI7IGRvDQoJ IGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbw0KCSAg IHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfcHJvZyRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAi JGFzX2Rpci8kYWNfcHJvZyRhY19leGVjX2V4dCI7IH0gfHwgY29udGludWUNCgkgICBjYXNlIGAi JGFzX2Rpci8kYWNfcHJvZyRhY19leGVjX2V4dCIgLS12ZXJzaW9uIDI+JjFgIGluICMoDQoJICAg ICAnbWtkaXIgKEdOVSBjb3JldXRpbHMpICcqIHwgXA0KCSAgICAgJ21rZGlyIChjb3JldXRpbHMp ICcqIHwgXA0KCSAgICAgJ21rZGlyIChmaWxldXRpbHMpICc0LjEqKQ0KCSAgICAgICBhY19jdl9w YXRoX21rZGlyPSRhc19kaXIvJGFjX3Byb2ckYWNfZXhlY19leHQNCgkgICAgICAgYnJlYWsgMzs7 DQoJICAgZXNhYw0KCSBkb25lDQogICAgICAgZG9uZQ0KICBkb25lDQpJRlM9JGFzX3NhdmVfSUZT DQoNCmZpDQoNCiAgdGVzdCAtZCAuLy0tdmVyc2lvbiAmJiBybWRpciAuLy0tdmVyc2lvbg0KICBp ZiB0ZXN0ICIke2FjX2N2X3BhdGhfbWtkaXIrc2V0fSIgPSBzZXQ7IHRoZW4NCiAgICBNS0RJUl9Q PSIkYWNfY3ZfcGF0aF9ta2RpciAtcCINCiAgZWxzZQ0KICAgICMgQXMgYSBsYXN0IHJlc29ydCwg dXNlIHRoZSBzbG93IHNoZWxsIHNjcmlwdC4gIERvbid0IGNhY2hlIGENCiAgICAjIHZhbHVlIGZv ciBNS0RJUl9QIHdpdGhpbiBhIHNvdXJjZSBkaXJlY3RvcnksIGJlY2F1c2UgdGhhdCB3aWxsDQog ICAgIyBicmVhayBvdGhlciBwYWNrYWdlcyB1c2luZyB0aGUgY2FjaGUgaWYgdGhhdCBkaXJlY3Rv cnkgaXMNCiAgICAjIHJlbW92ZWQsIG9yIGlmIHRoZSB2YWx1ZSBpcyBhIHJlbGF0aXZlIG5hbWUu DQogICAgTUtESVJfUD0iJGFjX2luc3RhbGxfc2ggLWQiDQogIGZpDQpmaQ0KeyAkYXNfZWNobyAi JGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRNS0RJUl9QIiA+JjUNCiRhc19l Y2hvICIkTUtESVJfUCIgPiY2OyB9DQoNCg0KbWtkaXJfcD0iJE1LRElSX1AiDQpjYXNlICRta2Rp cl9wIGluDQogIFtcXC8kXSogfCA/OltcXC9dKikgOzsNCiAgKi8qKSBta2Rpcl9wPSJcJCh0b3Bf YnVpbGRkaXIpLyRta2Rpcl9wIiA7Ow0KZXNhYw0KDQpmb3IgYWNfcHJvZyBpbiBnYXdrIG1hd2sg bmF3ayBhd2sNCmRvDQogICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJGFjX3Byb2ciLCBz byBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLg0Kc2V0IGR1bW15ICRhY19wcm9n OyBhY193b3JkPSQyDQp7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNo ZWNraW5nIGZvciAkYWNfd29yZCIgPiY1DQokYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dv cmQuLi4gIiA+JjY7IH0NCmlmICR7YWNfY3ZfcHJvZ19BV0srOn0gZmFsc2U7IHRoZW4gOg0KICAk YXNfZWNob19uICIoY2FjaGVkKSAiID4mNg0KZWxzZQ0KICBpZiB0ZXN0IC1uICIkQVdLIjsgdGhl bg0KICBhY19jdl9wcm9nX0FXSz0iJEFXSyIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRl c3QuDQplbHNlDQphc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SDQpmb3IgYXNf ZGlyIGluICRQQVRIDQpkbw0KICBJRlM9JGFzX3NhdmVfSUZTDQogIHRlc3QgLXogIiRhc19kaXIi ICYmIGFzX2Rpcj0uDQogICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4 dGVuc2lvbnM7IGRvDQogIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4 dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4N CiAgICBhY19jdl9wcm9nX0FXSz0iJGFjX3Byb2ciDQogICAgJGFzX2VjaG8gIiRhc19tZToke2Fz X2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1 DQogICAgYnJlYWsgMg0KICBmaQ0KZG9uZQ0KICBkb25lDQpJRlM9JGFzX3NhdmVfSUZTDQoNCmZp DQpmaQ0KQVdLPSRhY19jdl9wcm9nX0FXSw0KaWYgdGVzdCAtbiAiJEFXSyI7IHRoZW4NCiAgeyAk YXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRBV0siID4mNQ0K JGFzX2VjaG8gIiRBV0siID4mNjsgfQ0KZWxzZQ0KICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19s aW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQ0KJGFzX2VjaG8gIm5vIiA+JjY7IH0NCmZp DQoNCg0KICB0ZXN0IC1uICIkQVdLIiAmJiBicmVhaw0KZG9uZQ0KDQp7ICRhc19lY2hvICIkYXNf bWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgJHtNQUtFLW1ha2V9IHNl dHMgXCQoTUFLRSkiID4mNQ0KJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciAke01BS0UtbWFr ZX0gc2V0cyBcJChNQUtFKS4uLiAiID4mNjsgfQ0Kc2V0IHggJHtNQUtFLW1ha2V9DQphY19tYWtl PWAkYXNfZWNobyAiJDIiIHwgc2VkICdzLysvcC9nOyBzL1teYS16QS1aMC05X10vXy9nJ2ANCmlm IGV2YWwgXCR7YWNfY3ZfcHJvZ19tYWtlXyR7YWNfbWFrZX1fc2V0Kzp9IGZhbHNlOyB0aGVuIDoN CiAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYNCmVsc2UNCiAgY2F0ID5jb25mdGVzdC5tYWtl IDw8XF9BQ0VPRg0KU0hFTEwgPSAvYmluL3NoDQphbGw6DQoJQGVjaG8gJ0BAQCUlJT0kKE1BS0Up PUBAQCUlJScNCl9BQ0VPRg0KIyBHTlUgbWFrZSBzb21ldGltZXMgcHJpbnRzICJtYWtlWzFdOiBF bnRlcmluZyAuLi4iLCB3aGljaCB3b3VsZCBjb25mdXNlIHVzLg0KY2FzZSBgJHtNQUtFLW1ha2V9 IC1mIGNvbmZ0ZXN0Lm1ha2UgMj4vZGV2L251bGxgIGluDQogICpAQEAlJSU9Pyo9QEBAJSUlKikN CiAgICBldmFsIGFjX2N2X3Byb2dfbWFrZV8ke2FjX21ha2V9X3NldD15ZXM7Ow0KICAqKQ0KICAg IGV2YWwgYWNfY3ZfcHJvZ19tYWtlXyR7YWNfbWFrZX1fc2V0PW5vOzsNCmVzYWMNCnJtIC1mIGNv bmZ0ZXN0Lm1ha2UNCmZpDQppZiBldmFsIHRlc3QgXCRhY19jdl9wcm9nX21ha2VfJHthY19tYWtl fV9zZXQgPSB5ZXM7IHRoZW4NCiAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5F Tk99OiByZXN1bHQ6IHllcyIgPiY1DQokYXNfZWNobyAieWVzIiA+JjY7IH0NCiAgU0VUX01BS0U9 DQplbHNlDQogIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0 OiBubyIgPiY1DQokYXNfZWNobyAibm8iID4mNjsgfQ0KICBTRVRfTUFLRT0iTUFLRT0ke01BS0Ut bWFrZX0iDQpmaQ0KDQpybSAtcmYgLnRzdCAyPi9kZXYvbnVsbA0KbWtkaXIgLnRzdCAyPi9kZXYv bnVsbA0KaWYgdGVzdCAtZCAudHN0OyB0aGVuDQogIGFtX19sZWFkaW5nX2RvdD0uDQplbHNlDQog IGFtX19sZWFkaW5nX2RvdD1fDQpmaQ0Kcm1kaXIgLnRzdCAyPi9kZXYvbnVsbA0KDQppZiB0ZXN0 ICJgY2QgJHNyY2RpciAmJiBwd2RgIiAhPSAiYHB3ZGAiOyB0aGVuDQogICMgVXNlIC1JJChzcmNk aXIpIG9ubHkgd2hlbiAkKHNyY2RpcikgIT0gLiwgc28gdGhhdCBtYWtlJ3Mgb3V0cHV0DQogICMg aXMgbm90IHBvbGx1dGVkIHdpdGggcmVwZWF0ZWQgIi1JLiINCiAgYW1fX2lzcmM9JyAtSSQoc3Jj ZGlyKScNCiAgIyB0ZXN0IHRvIHNlZSBpZiBzcmNkaXIgYWxyZWFkeSBjb25maWd1cmVkDQogIGlm IHRlc3QgLWYgJHNyY2Rpci9jb25maWcuc3RhdHVzOyB0aGVuDQogICAgYXNfZm5fZXJyb3IgJD8g InNvdXJjZSBkaXJlY3RvcnkgYWxyZWFkeSBjb25maWd1cmVkOyBydW4gXCJtYWtlIGRpc3RjbGVh blwiIHRoZXJlIGZpcnN0IiAiJExJTkVOTyIgNQ0KICBmaQ0KZmkNCg0KIyB0ZXN0IHdoZXRoZXIg d2UgaGF2ZSBjeWdwYXRoDQppZiB0ZXN0IC16ICIkQ1lHUEFUSF9XIjsgdGhlbg0KICBpZiAoY3ln cGF0aCAtLXZlcnNpb24pID4vZGV2L251bGwgMj4vZGV2L251bGw7IHRoZW4NCiAgICBDWUdQQVRI X1c9J2N5Z3BhdGggLXcnDQogIGVsc2UNCiAgICBDWUdQQVRIX1c9ZWNobw0KICBmaQ0KZmkNCg0K DQojIERlZmluZSB0aGUgaWRlbnRpdHkgb2YgdGhlIHBhY2thZ2UuDQogUEFDS0FHRT0nY29yZXV0 aWxzJw0KIFZFUlNJT049JzguMTInDQoNCg0KY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRg0KI2Rl ZmluZSBQQUNLQUdFICIkUEFDS0FHRSINCl9BQ0VPRg0KDQoNCmNhdCA+PmNvbmZkZWZzLmggPDxf QUNFT0YNCiNkZWZpbmUgVkVSU0lPTiAiJFZFUlNJT04iDQpfQUNFT0YNCg0KIyBTb21lIHRvb2xz IEF1dG9tYWtlIG5lZWRzLg0KDQpBQ0xPQ0FMPSR7QUNMT0NBTC0iJHthbV9taXNzaW5nX3J1bn1h Y2xvY2FsLSR7YW1fX2FwaV92ZXJzaW9ufSJ9DQoNCg0KQVVUT0NPTkY9JHtBVVRPQ09ORi0iJHth bV9taXNzaW5nX3J1bn1hdXRvY29uZiJ9DQoNCg0KQVVUT01BS0U9JHtBVVRPTUFLRS0iJHthbV9t aXNzaW5nX3J1bn1hdXRvbWFrZS0ke2FtX19hcGlfdmVyc2lvbn0ifQ0KDQoNCkFVVE9IRUFERVI9 JHtBVVRPSEVBREVSLSIke2FtX21pc3NpbmdfcnVufWF1dG9oZWFkZXIifQ0KDQoNCk1BS0VJTkZP PSR7TUFLRUlORk8tIiR7YW1fbWlzc2luZ19ydW59bWFrZWluZm8ifQ0KDQojIFdlIG5lZWQgYXdr IGZvciB0aGUgImNoZWNrIiB0YXJnZXQuICBUaGUgc3lzdGVtICJhd2siIGlzIGJhZCBvbg0KIyBz b21lIHBsYXRmb3Jtcy4NCiMgQWx3YXlzIGRlZmluZSBBTVRBUiBmb3IgYmFja3dhcmQgY29tcGF0 aWJpbGl0eS4NCg0KQU1UQVI9JHtBTVRBUi0iJHthbV9taXNzaW5nX3J1bn10YXIifQ0KDQphbV9f dGFyPScke0FNVEFSfSBjaG9mIC0gIiQkdGFyZGlyIic7IGFtX191bnRhcj0nJHtBTVRBUn0geGYg LScNCg0KDQoNCg0KDQojIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtc2lsZW50LXJ1bGVzIHdhcyBn aXZlbi4NCmlmIHRlc3QgIiR7ZW5hYmxlX3NpbGVudF9ydWxlcytzZXR9IiA9IHNldDsgdGhlbiA6 DQogIGVuYWJsZXZhbD0kZW5hYmxlX3NpbGVudF9ydWxlczsNCmZpDQoNCmNhc2UgJGVuYWJsZV9z aWxlbnRfcnVsZXMgaW4gIyAoKCgNCiAgeWVzKSBBTV9ERUZBVUxUX1ZFUkJPU0lUWT0wOzsNCiAg IG5vKSBBTV9ERUZBVUxUX1ZFUkJPU0lUWT0xOzsNCiAgICAqKSBBTV9ERUZBVUxUX1ZFUkJPU0lU WT0wOzsNCmVzYWMNCkFNX0JBQ0tTTEFTSD0nXCcNCiAjIG1ha2UgLS1lbmFibGUtc2lsZW50LXJ1 bGVzIHRoZSBkZWZhdWx0Lg0KDQpERVBESVI9IiR7YW1fX2xlYWRpbmdfZG90fWRlcHMiDQoNCmFj X2NvbmZpZ19jb21tYW5kcz0iJGFjX2NvbmZpZ19jb21tYW5kcyBkZXBmaWxlcyINCg0KDQphbV9t YWtlPSR7TUFLRS1tYWtlfQ0KY2F0ID4gY29uZmluYyA8PCAnRU5EJw0KYW1fX2RvaXQ6DQoJQGVj aG8gdGhpcyBpcyB0aGUgYW1fX2RvaXQgdGFyZ2V0DQouUEhPTlk6IGFtX19kb2l0DQpFTkQNCiMg SWYgd2UgZG9uJ3QgZmluZCBhbiBpbmNsdWRlIGRpcmVjdGl2ZSwganVzdCBjb21tZW50IG91dCB0 aGUgY29kZS4NCnsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tp bmcgZm9yIHN0eWxlIG9mIGluY2x1ZGUgdXNlZCBieSAkYW1fbWFrZSIgPiY1DQokYXNfZWNob19u ICJjaGVja2luZyBmb3Igc3R5bGUgb2YgaW5jbHVkZSB1c2VkIGJ5ICRhbV9tYWtlLi4uICIgPiY2 OyB9DQphbV9faW5jbHVkZT0iIyINCmFtX19xdW90ZT0NCl9hbV9yZXN1bHQ9bm9uZQ0KIyBGaXJz dCB0cnkgR05VIG1ha2Ugc3R5bGUgaW5jbHVkZS4NCmVjaG8gImluY2x1ZGUgY29uZmluYyIgPiBj b25mbWYNCiMgSWdub3JlIGFsbCBraW5kcyBvZiBhZGRpdGlvbmFsIG91dHB1dCBmcm9tIGBtYWtl Jy4NCmNhc2UgYCRhbV9tYWtlIC1zIC1mIGNvbmZtZiAyPiAvZGV2L251bGxgIGluICMoDQoqdGhl XCBhbV9fZG9pdFwgdGFyZ2V0KikNCiAgYW1fX2luY2x1ZGU9aW5jbHVkZQ0KICBhbV9fcXVvdGU9 DQogIF9hbV9yZXN1bHQ9R05VDQogIDs7DQplc2FjDQojIE5vdyB0cnkgQlNEIG1ha2Ugc3R5bGUg aW5jbHVkZS4NCmlmIHRlc3QgIiRhbV9faW5jbHVkZSIgPSAiIyI7IHRoZW4NCiAgIGVjaG8gJy5p bmNsdWRlICJjb25maW5jIicgPiBjb25mbWYNCiAgIGNhc2UgYCRhbV9tYWtlIC1zIC1mIGNvbmZt ZiAyPiAvZGV2L251bGxgIGluICMoDQogICAqdGhlXCBhbV9fZG9pdFwgdGFyZ2V0KikNCiAgICAg YW1fX2luY2x1ZGU9LmluY2x1ZGUNCiAgICAgYW1fX3F1b3RlPSJcIiINCiAgICAgX2FtX3Jlc3Vs dD1CU0QNCiAgICAgOzsNCiAgIGVzYWMNCmZpDQoNCg0KeyAkYXNfZWNobyAiJGFzX21lOiR7YXNf bGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRfYW1fcmVzdWx0IiA+JjUNCiRhc19lY2hvICIkX2Ft X3Jlc3VsdCIgPiY2OyB9DQpybSAtZiBjb25maW5jIGNvbmZtZg0KDQojIENoZWNrIHdoZXRoZXIg LS1lbmFibGUtZGVwZW5kZW5jeS10cmFja2luZyB3YXMgZ2l2ZW4uDQppZiB0ZXN0ICIke2VuYWJs ZV9kZXBlbmRlbmN5X3RyYWNraW5nK3NldH0iID0gc2V0OyB0aGVuIDoNCiAgZW5hYmxldmFsPSRl bmFibGVfZGVwZW5kZW5jeV90cmFja2luZzsNCmZpDQoNCmlmIHRlc3QgIngkZW5hYmxlX2RlcGVu ZGVuY3lfdHJhY2tpbmciICE9IHhubzsgdGhlbg0KICBhbV9kZXBjb21wPSIkYWNfYXV4X2Rpci9k ZXBjb21wIg0KICBBTURFUEJBQ0tTTEFTSD0nXCcNCiAgYW1fX25vZGVwPSdfbm8nDQpmaQ0KIGlm IHRlc3QgIngkZW5hYmxlX2RlcGVuZGVuY3lfdHJhY2tpbmciICE9IHhubzsgdGhlbg0KICBBTURF UF9UUlVFPQ0KICBBTURFUF9GQUxTRT0nIycNCmVsc2UNCiAgQU1ERVBfVFJVRT0nIycNCiAgQU1E RVBfRkFMU0U9DQpmaQ0KDQoNCmFjX2V4dD1jDQphY19jcHA9JyRDUFAgJENQUEZMQUdTJw0KYWNf Y29tcGlsZT0nJENDIC1jICRDRkxBR1MgJENQUEZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgPiY1Jw0K YWNfbGluaz0nJENDIC1vIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAkQ0ZMQUdTICRDUFBGTEFHUyAkTERG TEFHUyBjb25mdGVzdC4kYWNfZXh0ICRMSUJTID4mNScNCmFjX2NvbXBpbGVyX2dudT0kYWNfY3Zf Y19jb21waWxlcl9nbnUNCmlmIHRlc3QgLW4gIiRhY190b29sX3ByZWZpeCI7IHRoZW4NCiAgIyBF eHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIke2FjX3Rvb2xfcHJlZml4fWdjYyIsIHNvIGl0IGNh biBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuDQpzZXQgZHVtbXkgJHthY190b29sX3ByZWZp eH1nY2M7IGFjX3dvcmQ9JDINCnsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5P fTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUNCiRhc19lY2hvX24gImNoZWNraW5nIGZvciAk YWNfd29yZC4uLiAiID4mNjsgfQ0KaWYgJHthY19jdl9wcm9nX0NDKzp9IGZhbHNlOyB0aGVuIDoN CiAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYNCmVsc2UNCiAgaWYgdGVzdCAtbiAiJENDIjsg dGhlbg0KICBhY19jdl9wcm9nX0NDPSIkQ0MiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0 ZXN0Lg0KZWxzZQ0KYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUg0KZm9yIGFz X2RpciBpbiAkUEFUSA0KZG8NCiAgSUZTPSRhc19zYXZlX0lGUw0KICB0ZXN0IC16ICIkYXNfZGly IiAmJiBhc19kaXI9Lg0KICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9l eHRlbnNpb25zOyBkbw0KICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19l eHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVu DQogICAgYWNfY3ZfcHJvZ19DQz0iJHthY190b29sX3ByZWZpeH1nY2MiDQogICAgJGFzX2VjaG8g IiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19l eGVjX2V4dCIgPiY1DQogICAgYnJlYWsgMg0KICBmaQ0KZG9uZQ0KICBkb25lDQpJRlM9JGFzX3Nh dmVfSUZTDQoNCmZpDQpmaQ0KQ0M9JGFjX2N2X3Byb2dfQ0MNCmlmIHRlc3QgLW4gIiRDQyI7IHRo ZW4NCiAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRD QyIgPiY1DQokYXNfZWNobyAiJENDIiA+JjY7IH0NCmVsc2UNCiAgeyAkYXNfZWNobyAiJGFzX21l OiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUNCiRhc19lY2hvICJubyIgPiY2 OyB9DQpmaQ0KDQoNCmZpDQppZiB0ZXN0IC16ICIkYWNfY3ZfcHJvZ19DQyI7IHRoZW4NCiAgYWNf Y3RfQ0M9JENDDQogICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiZ2NjIiwgc28gaXQgY2Fu IGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4NCnNldCBkdW1teSBnY2M7IGFjX3dvcmQ9JDIN CnsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRh Y193b3JkIiA+JjUNCiRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsg fQ0KaWYgJHthY19jdl9wcm9nX2FjX2N0X0NDKzp9IGZhbHNlOyB0aGVuIDoNCiAgJGFzX2VjaG9f biAiKGNhY2hlZCkgIiA+JjYNCmVsc2UNCiAgaWYgdGVzdCAtbiAiJGFjX2N0X0NDIjsgdGhlbg0K ICBhY19jdl9wcm9nX2FjX2N0X0NDPSIkYWNfY3RfQ0MiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRl IHRoZSB0ZXN0Lg0KZWxzZQ0KYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUg0K Zm9yIGFzX2RpciBpbiAkUEFUSA0KZG8NCiAgSUZTPSRhc19zYXZlX0lGUw0KICB0ZXN0IC16ICIk YXNfZGlyIiAmJiBhc19kaXI9Lg0KICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0 YWJsZV9leHRlbnNpb25zOyBkbw0KICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNf ZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9 OyB0aGVuDQogICAgYWNfY3ZfcHJvZ19hY19jdF9DQz0iZ2NjIg0KICAgICRhc19lY2hvICIkYXNf bWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19l eHQiID4mNQ0KICAgIGJyZWFrIDINCiAgZmkNCmRvbmUNCiAgZG9uZQ0KSUZTPSRhc19zYXZlX0lG Uw0KDQpmaQ0KZmkNCmFjX2N0X0NDPSRhY19jdl9wcm9nX2FjX2N0X0NDDQppZiB0ZXN0IC1uICIk YWNfY3RfQ0MiOyB0aGVuDQogIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5P fTogcmVzdWx0OiAkYWNfY3RfQ0MiID4mNQ0KJGFzX2VjaG8gIiRhY19jdF9DQyIgPiY2OyB9DQpl bHNlDQogIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBu byIgPiY1DQokYXNfZWNobyAibm8iID4mNjsgfQ0KZmkNCg0KICBpZiB0ZXN0ICJ4JGFjX2N0X0ND IiA9IHg7IHRoZW4NCiAgICBDQz0iIg0KICBlbHNlDQogICAgY2FzZSAkY3Jvc3NfY29tcGlsaW5n OiRhY190b29sX3dhcm5lZCBpbg0KeWVzOikNCnsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVu by0kTElORU5PfTogV0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGgg aG9zdCB0cmlwbGV0IiA+JjUNCiRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IHVzaW5nIGNyb3Nz IHRvb2xzIG5vdCBwcmVmaXhlZCB3aXRoIGhvc3QgdHJpcGxldCIgPiYyO30NCmFjX3Rvb2xfd2Fy bmVkPXllcyA7Ow0KZXNhYw0KICAgIENDPSRhY19jdF9DQw0KICBmaQ0KZWxzZQ0KICBDQz0iJGFj X2N2X3Byb2dfQ0MiDQpmaQ0KDQppZiB0ZXN0IC16ICIkQ0MiOyB0aGVuDQogICAgICAgICAgaWYg dGVzdCAtbiAiJGFjX3Rvb2xfcHJlZml4IjsgdGhlbg0KICAgICMgRXh0cmFjdCB0aGUgZmlyc3Qg d29yZCBvZiAiJHthY190b29sX3ByZWZpeH1jYyIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFt ZSB3aXRoIGFyZ3MuDQpzZXQgZHVtbXkgJHthY190b29sX3ByZWZpeH1jYzsgYWNfd29yZD0kMg0K eyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFj X3dvcmQiID4mNQ0KJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9 DQppZiAke2FjX2N2X3Byb2dfQ0MrOn0gZmFsc2U7IHRoZW4gOg0KICAkYXNfZWNob19uICIoY2Fj aGVkKSAiID4mNg0KZWxzZQ0KICBpZiB0ZXN0IC1uICIkQ0MiOyB0aGVuDQogIGFjX2N2X3Byb2df Q0M9IiRDQyIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuDQplbHNlDQphc19zYXZl X0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SDQpmb3IgYXNfZGlyIGluICRQQVRIDQpkbw0K ICBJRlM9JGFzX3NhdmVfSUZTDQogIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uDQogICAg Zm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvDQogIGlm IHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAi JGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4NCiAgICBhY19jdl9wcm9nX0ND PSIke2FjX3Rvb2xfcHJlZml4fWNjIg0KICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8t JExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQ0KICAgIGJy ZWFrIDINCiAgZmkNCmRvbmUNCiAgZG9uZQ0KSUZTPSRhc19zYXZlX0lGUw0KDQpmaQ0KZmkNCkND PSRhY19jdl9wcm9nX0NDDQppZiB0ZXN0IC1uICIkQ0MiOyB0aGVuDQogIHsgJGFzX2VjaG8gIiRh c19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkQ0MiID4mNQ0KJGFzX2VjaG8gIiRD QyIgPiY2OyB9DQplbHNlDQogIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5P fTogcmVzdWx0OiBubyIgPiY1DQokYXNfZWNobyAibm8iID4mNjsgfQ0KZmkNCg0KDQogIGZpDQpm aQ0KaWYgdGVzdCAteiAiJENDIjsgdGhlbg0KICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2Yg ImNjIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4NCnNldCBkdW1teSBj YzsgYWNfd29yZD0kMg0KeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBj aGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQ0KJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193 b3JkLi4uICIgPiY2OyB9DQppZiAke2FjX2N2X3Byb2dfQ0MrOn0gZmFsc2U7IHRoZW4gOg0KICAk YXNfZWNob19uICIoY2FjaGVkKSAiID4mNg0KZWxzZQ0KICBpZiB0ZXN0IC1uICIkQ0MiOyB0aGVu DQogIGFjX2N2X3Byb2dfQ0M9IiRDQyIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3Qu DQplbHNlDQogIGFjX3Byb2dfcmVqZWN0ZWQ9bm8NCmFzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFU SF9TRVBBUkFUT1INCmZvciBhc19kaXIgaW4gJFBBVEgNCmRvDQogIElGUz0kYXNfc2F2ZV9JRlMN CiAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4NCiAgICBmb3IgYWNfZXhlY19leHQgaW4g JycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8NCiAgaWYgeyB0ZXN0IC1mICIkYXNfZGly LyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFj X2V4ZWNfZXh0IjsgfTsgdGhlbg0KICAgIGlmIHRlc3QgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhl Y19leHQiID0gIi91c3IvdWNiL2NjIjsgdGhlbg0KICAgICAgIGFjX3Byb2dfcmVqZWN0ZWQ9eWVz DQogICAgICAgY29udGludWUNCiAgICAgZmkNCiAgICBhY19jdl9wcm9nX0NDPSJjYyINCiAgICAk YXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193 b3JkJGFjX2V4ZWNfZXh0IiA+JjUNCiAgICBicmVhayAyDQogIGZpDQpkb25lDQogIGRvbmUNCklG Uz0kYXNfc2F2ZV9JRlMNCg0KaWYgdGVzdCAkYWNfcHJvZ19yZWplY3RlZCA9IHllczsgdGhlbg0K ICAjIFdlIGZvdW5kIGEgYm9nb24gaW4gdGhlIHBhdGgsIHNvIG1ha2Ugc3VyZSB3ZSBuZXZlciB1 c2UgaXQuDQogIHNldCBkdW1teSAkYWNfY3ZfcHJvZ19DQw0KICBzaGlmdA0KICBpZiB0ZXN0ICQj ICE9IDA7IHRoZW4NCiAgICAjIFdlIGNob3NlIGEgZGlmZmVyZW50IGNvbXBpbGVyIGZyb20gdGhl IGJvZ3VzIG9uZS4NCiAgICAjIEhvd2V2ZXIsIGl0IGhhcyB0aGUgc2FtZSBiYXNlbmFtZSwgc28g dGhlIGJvZ29uIHdpbGwgYmUgY2hvc2VuDQogICAgIyBmaXJzdCBpZiB3ZSBzZXQgQ0MgdG8ganVz dCB0aGUgYmFzZW5hbWU7IHVzZSB0aGUgZnVsbCBmaWxlIG5hbWUuDQogICAgc2hpZnQNCiAgICBh Y19jdl9wcm9nX0NDPSIkYXNfZGlyLyRhY193b3JkJHsxKycgJ30kQCINCiAgZmkNCmZpDQpmaQ0K ZmkNCkNDPSRhY19jdl9wcm9nX0NDDQppZiB0ZXN0IC1uICIkQ0MiOyB0aGVuDQogIHsgJGFzX2Vj aG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkQ0MiID4mNQ0KJGFzX2Vj aG8gIiRDQyIgPiY2OyB9DQplbHNlDQogIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0k TElORU5PfTogcmVzdWx0OiBubyIgPiY1DQokYXNfZWNobyAibm8iID4mNjsgfQ0KZmkNCg0KDQpm aQ0KaWYgdGVzdCAteiAiJENDIjsgdGhlbg0KICBpZiB0ZXN0IC1uICIkYWNfdG9vbF9wcmVmaXgi OyB0aGVuDQogIGZvciBhY19wcm9nIGluIGNsLmV4ZQ0KICBkbw0KICAgICMgRXh0cmFjdCB0aGUg Zmlyc3Qgd29yZCBvZiAiJGFjX3Rvb2xfcHJlZml4JGFjX3Byb2ciLCBzbyBpdCBjYW4gYmUgYSBw cm9ncmFtIG5hbWUgd2l0aCBhcmdzLg0Kc2V0IGR1bW15ICRhY190b29sX3ByZWZpeCRhY19wcm9n OyBhY193b3JkPSQyDQp7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNo ZWNraW5nIGZvciAkYWNfd29yZCIgPiY1DQokYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dv cmQuLi4gIiA+JjY7IH0NCmlmICR7YWNfY3ZfcHJvZ19DQys6fSBmYWxzZTsgdGhlbiA6DQogICRh c19lY2hvX24gIihjYWNoZWQpICIgPiY2DQplbHNlDQogIGlmIHRlc3QgLW4gIiRDQyI7IHRoZW4N CiAgYWNfY3ZfcHJvZ19DQz0iJENDIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4N CmVsc2UNCmFzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1INCmZvciBhc19kaXIg aW4gJFBBVEgNCmRvDQogIElGUz0kYXNfc2F2ZV9JRlMNCiAgdGVzdCAteiAiJGFzX2RpciIgJiYg YXNfZGlyPS4NCiAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5z aW9uczsgZG8NCiAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAm JiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbg0KICAg IGFjX2N2X3Byb2dfQ0M9IiRhY190b29sX3ByZWZpeCRhY19wcm9nIg0KICAgICRhc19lY2hvICIk YXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhl Y19leHQiID4mNQ0KICAgIGJyZWFrIDINCiAgZmkNCmRvbmUNCiAgZG9uZQ0KSUZTPSRhc19zYXZl X0lGUw0KDQpmaQ0KZmkNCkNDPSRhY19jdl9wcm9nX0NDDQppZiB0ZXN0IC1uICIkQ0MiOyB0aGVu DQogIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkQ0Mi ID4mNQ0KJGFzX2VjaG8gIiRDQyIgPiY2OyB9DQplbHNlDQogIHsgJGFzX2VjaG8gIiRhc19tZTok e2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1DQokYXNfZWNobyAibm8iID4mNjsg fQ0KZmkNCg0KDQogICAgdGVzdCAtbiAiJENDIiAmJiBicmVhaw0KICBkb25lDQpmaQ0KaWYgdGVz dCAteiAiJENDIjsgdGhlbg0KICBhY19jdF9DQz0kQ0MNCiAgZm9yIGFjX3Byb2cgaW4gY2wuZXhl DQpkbw0KICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiRhY19wcm9nIiwgc28gaXQgY2Fu IGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4NCnNldCBkdW1teSAkYWNfcHJvZzsgYWNfd29y ZD0kMg0KeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBm b3IgJGFjX3dvcmQiID4mNQ0KJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIg PiY2OyB9DQppZiAke2FjX2N2X3Byb2dfYWNfY3RfQ0MrOn0gZmFsc2U7IHRoZW4gOg0KICAkYXNf ZWNob19uICIoY2FjaGVkKSAiID4mNg0KZWxzZQ0KICBpZiB0ZXN0IC1uICIkYWNfY3RfQ0MiOyB0 aGVuDQogIGFjX2N2X3Byb2dfYWNfY3RfQ0M9IiRhY19jdF9DQyIgIyBMZXQgdGhlIHVzZXIgb3Zl cnJpZGUgdGhlIHRlc3QuDQplbHNlDQphc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJB VE9SDQpmb3IgYXNfZGlyIGluICRQQVRIDQpkbw0KICBJRlM9JGFzX3NhdmVfSUZTDQogIHRlc3Qg LXogIiRhc19kaXIiICYmIGFzX2Rpcj0uDQogICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19l eGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvDQogIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29y ZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4 dCI7IH07IHRoZW4NCiAgICBhY19jdl9wcm9nX2FjX2N0X0NDPSIkYWNfcHJvZyINCiAgICAkYXNf ZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3Jk JGFjX2V4ZWNfZXh0IiA+JjUNCiAgICBicmVhayAyDQogIGZpDQpkb25lDQogIGRvbmUNCklGUz0k YXNfc2F2ZV9JRlMNCg0KZmkNCmZpDQphY19jdF9DQz0kYWNfY3ZfcHJvZ19hY19jdF9DQw0KaWYg dGVzdCAtbiAiJGFjX2N0X0NDIjsgdGhlbg0KICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5l bm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N0X0NDIiA+JjUNCiRhc19lY2hvICIkYWNfY3RfQ0Mi ID4mNjsgfQ0KZWxzZQ0KICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306 IHJlc3VsdDogbm8iID4mNQ0KJGFzX2VjaG8gIm5vIiA+JjY7IH0NCmZpDQoNCg0KICB0ZXN0IC1u ICIkYWNfY3RfQ0MiICYmIGJyZWFrDQpkb25lDQoNCiAgaWYgdGVzdCAieCRhY19jdF9DQyIgPSB4 OyB0aGVuDQogICAgQ0M9IiINCiAgZWxzZQ0KICAgIGNhc2UgJGNyb3NzX2NvbXBpbGluZzokYWNf dG9vbF93YXJuZWQgaW4NCnllczopDQp7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJ TkVOT306IFdBUk5JTkc6IHVzaW5nIGNyb3NzIHRvb2xzIG5vdCBwcmVmaXhlZCB3aXRoIGhvc3Qg dHJpcGxldCIgPiY1DQokYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29s cyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mMjt9DQphY190b29sX3dhcm5lZD15 ZXMgOzsNCmVzYWMNCiAgICBDQz0kYWNfY3RfQ0MNCiAgZmkNCmZpDQoNCmZpDQoNCg0KdGVzdCAt eiAiJENDIiAmJiB7IHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZXJy b3I6IGluIFxgJGFjX3B3ZCc6IiA+JjUNCiRhc19lY2hvICIkYXNfbWU6IGVycm9yOiBpbiBcYCRh Y19wd2QnOiIgPiYyO30NCmFzX2ZuX2Vycm9yICQ/ICJubyBhY2NlcHRhYmxlIEMgY29tcGlsZXIg Zm91bmQgaW4gXCRQQVRIDQpTZWUgXGBjb25maWcubG9nJyBmb3IgbW9yZSBkZXRhaWxzIiAiJExJ TkVOTyIgNTsgfQ0KDQojIFByb3ZpZGUgc29tZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgY29tcGls ZXIuDQokYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3Ig QyBjb21waWxlciB2ZXJzaW9uIiA+JjUNCnNldCBYICRhY19jb21waWxlDQphY19jb21waWxlcj0k Mg0KZm9yIGFjX29wdGlvbiBpbiAtLXZlcnNpb24gLXYgLVYgLXF2ZXJzaW9uOyBkbw0KICB7IHsg YWNfdHJ5PSIkYWNfY29tcGlsZXIgJGFjX29wdGlvbiA+JjUiDQpjYXNlICIoKCRhY190cnkiIGlu DQogICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7Ow0KICAqKSBhY190 cnlfZWNobz0kYWNfdHJ5OzsNCmVzYWMNCmV2YWwgYWNfdHJ5X2VjaG89IlwiXCRhc19tZToke2Fz X2xpbmVuby0kTElORU5PfTogJGFjX3RyeV9lY2hvXCIiDQokYXNfZWNobyAiJGFjX3RyeV9lY2hv IjsgfSA+JjUNCiAgKGV2YWwgIiRhY19jb21waWxlciAkYWNfb3B0aW9uID4mNSIpIDI+Y29uZnRl c3QuZXJyDQogIGFjX3N0YXR1cz0kPw0KICBpZiB0ZXN0IC1zIGNvbmZ0ZXN0LmVycjsgdGhlbg0K ICAgIHNlZCAnMTBhXA0KLi4uIHJlc3Qgb2Ygc3RkZXJyIG91dHB1dCBkZWxldGVkIC4uLg0KICAg ICAgICAgMTBxJyBjb25mdGVzdC5lcnIgPmNvbmZ0ZXN0LmVyMQ0KICAgIGNhdCBjb25mdGVzdC5l cjEgPiY1DQogIGZpDQogIHJtIC1mIGNvbmZ0ZXN0LmVyMSBjb25mdGVzdC5lcnINCiAgJGFzX2Vj aG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1DQog IHRlc3QgJGFjX3N0YXR1cyA9IDA7IH0NCmRvbmUNCg0KY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VP RiA+Y29uZnRlc3QuJGFjX2V4dA0KLyogZW5kIGNvbmZkZWZzLmguICAqLw0KDQppbnQNCm1haW4g KCkNCnsNCg0KICA7DQogIHJldHVybiAwOw0KfQ0KX0FDRU9GDQphY19jbGVhbl9maWxlc19zYXZl PSRhY19jbGVhbl9maWxlcw0KYWNfY2xlYW5fZmlsZXM9IiRhY19jbGVhbl9maWxlcyBhLm91dCBh Lm91dC5kU1lNIGEuZXhlIGIub3V0Ig0KIyBUcnkgdG8gY3JlYXRlIGFuIGV4ZWN1dGFibGUgd2l0 aG91dCAtbyBmaXJzdCwgZGlzcmVnYXJkIGEub3V0Lg0KIyBJdCB3aWxsIGhlbHAgdXMgZGlhZ25v c2UgYnJva2VuIGNvbXBpbGVycywgYW5kIGZpbmRpbmcgb3V0IGFuIGludHVpdGlvbg0KIyBvZiBl eGVleHQuDQp7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5n IHdoZXRoZXIgdGhlIEMgY29tcGlsZXIgd29ya3MiID4mNQ0KJGFzX2VjaG9fbiAiY2hlY2tpbmcg d2hldGhlciB0aGUgQyBjb21waWxlciB3b3Jrcy4uLiAiID4mNjsgfQ0KYWNfbGlua19kZWZhdWx0 PWAkYXNfZWNobyAiJGFjX2xpbmsiIHwgc2VkICdzLyAtbyAqY29uZnRlc3RbXiBdKi8vJ2ANCg0K IyBUaGUgcG9zc2libGUgb3V0cHV0IGZpbGVzOg0KYWNfZmlsZXM9ImEub3V0IGNvbmZ0ZXN0LmV4 ZSBjb25mdGVzdCBhLmV4ZSBhX291dC5leGUgYi5vdXQgY29uZnRlc3QuKiINCg0KYWNfcm1maWxl cz0NCmZvciBhY19maWxlIGluICRhY19maWxlcw0KZG8NCiAgY2FzZSAkYWNfZmlsZSBpbg0KICAg ICouJGFjX2V4dCB8ICoueGNvZmYgfCAqLnRkcyB8ICouZCB8ICoucGRiIHwgKi54U1lNIHwgKi5i YiB8ICouYmJnIHwgKi5tYXAgfCAqLmluZiB8ICouZFNZTSB8ICoubyB8ICoub2JqICkgOzsNCiAg ICAqICkgYWNfcm1maWxlcz0iJGFjX3JtZmlsZXMgJGFjX2ZpbGUiOzsNCiAgZXNhYw0KZG9uZQ0K cm0gLWYgJGFjX3JtZmlsZXMNCg0KaWYgeyB7IGFjX3RyeT0iJGFjX2xpbmtfZGVmYXVsdCINCmNh c2UgIigoJGFjX3RyeSIgaW4NCiAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFj X3RyeTs7DQogICopIGFjX3RyeV9lY2hvPSRhY190cnk7Ow0KZXNhYw0KZXZhbCBhY190cnlfZWNo bz0iXCJcJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiAkYWNfdHJ5X2VjaG9cIiINCiRhc19l Y2hvICIkYWNfdHJ5X2VjaG8iOyB9ID4mNQ0KICAoZXZhbCAiJGFjX2xpbmtfZGVmYXVsdCIpIDI+ JjUNCiAgYWNfc3RhdHVzPSQ/DQogICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVO T306IFwkPyA9ICRhY19zdGF0dXMiID4mNQ0KICB0ZXN0ICRhY19zdGF0dXMgPSAwOyB9OyB0aGVu IDoNCiAgIyBBdXRvY29uZi0yLjEzIGNvdWxkIHNldCB0aGUgYWNfY3ZfZXhlZXh0IHZhcmlhYmxl IHRvIGBubycuDQojIFNvIGlnbm9yZSBhIHZhbHVlIG9mIGBubycsIG90aGVyd2lzZSB0aGlzIHdv dWxkIGxlYWQgdG8gYEVYRUVYVCA9IG5vJw0KIyBpbiBhIE1ha2VmaWxlLiAgV2Ugc2hvdWxkIG5v dCBvdmVycmlkZSBhY19jdl9leGVleHQgaWYgaXQgd2FzIGNhY2hlZCwNCiMgc28gdGhhdCB0aGUg dXNlciBjYW4gc2hvcnQtY2lyY3VpdCB0aGlzIHRlc3QgZm9yIGNvbXBpbGVycyB1bmtub3duIHRv DQojIEF1dG9jb25mLg0KZm9yIGFjX2ZpbGUgaW4gJGFjX2ZpbGVzICcnDQpkbw0KICB0ZXN0IC1m ICIkYWNfZmlsZSIgfHwgY29udGludWUNCiAgY2FzZSAkYWNfZmlsZSBpbg0KICAgICouJGFjX2V4 dCB8ICoueGNvZmYgfCAqLnRkcyB8ICouZCB8ICoucGRiIHwgKi54U1lNIHwgKi5iYiB8ICouYmJn IHwgKi5tYXAgfCAqLmluZiB8ICouZFNZTSB8ICoubyB8ICoub2JqICkNCgk7Ow0KICAgIFthYl0u b3V0ICkNCgkjIFdlIGZvdW5kIHRoZSBkZWZhdWx0IGV4ZWN1dGFibGUsIGJ1dCBleGVleHQ9Jycg aXMgbW9zdA0KCSMgY2VydGFpbmx5IHJpZ2h0Lg0KCWJyZWFrOzsNCiAgICAqLiogKQ0KCWlmIHRl c3QgIiR7YWNfY3ZfZXhlZXh0K3NldH0iID0gc2V0ICYmIHRlc3QgIiRhY19jdl9leGVleHQiICE9 IG5vOw0KCXRoZW4gOjsgZWxzZQ0KCSAgIGFjX2N2X2V4ZWV4dD1gZXhwciAiJGFjX2ZpbGUiIDog J1teLl0qXChcLi4qXCknYA0KCWZpDQoJIyBXZSBzZXQgYWNfY3ZfZXhlZXh0IGhlcmUgYmVjYXVz ZSB0aGUgbGF0ZXIgdGVzdCBmb3IgaXQgaXMgbm90DQoJIyBzYWZlOiBjcm9zcyBjb21waWxlcnMg bWF5IG5vdCBhZGQgdGhlIHN1ZmZpeCBpZiBnaXZlbiBhbiBgLW8nDQoJIyBhcmd1bWVudCwgc28g d2UgbWF5IG5lZWQgdG8ga25vdyBpdCBhdCB0aGF0IHBvaW50IGFscmVhZHkuDQoJIyBFdmVuIGlm IHRoaXMgc2VjdGlvbiBsb29rcyBjcnVmdHk6IGl0IGhhcyB0aGUgYWR2YW50YWdlIG9mDQoJIyBh Y3R1YWxseSB3b3JraW5nLg0KCWJyZWFrOzsNCiAgICAqICkNCglicmVhazs7DQogIGVzYWMNCmRv bmUNCnRlc3QgIiRhY19jdl9leGVleHQiID0gbm8gJiYgYWNfY3ZfZXhlZXh0PQ0KDQplbHNlDQog IGFjX2ZpbGU9JycNCmZpDQppZiB0ZXN0IC16ICIkYWNfZmlsZSI7IHRoZW4gOg0KICB7ICRhc19l Y2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQ0KJGFzX2Vj aG8gIm5vIiA+JjY7IH0NCiRhc19lY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4m NQ0Kc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQ0KDQp7IHsgJGFzX2VjaG8gIiRh c19tZToke2FzX2xpbmVuby0kTElORU5PfTogZXJyb3I6IGluIFxgJGFjX3B3ZCc6IiA+JjUNCiRh c19lY2hvICIkYXNfbWU6IGVycm9yOiBpbiBcYCRhY19wd2QnOiIgPiYyO30NCmFzX2ZuX2Vycm9y IDc3ICJDIGNvbXBpbGVyIGNhbm5vdCBjcmVhdGUgZXhlY3V0YWJsZXMNClNlZSBcYGNvbmZpZy5s b2cnIGZvciBtb3JlIGRldGFpbHMiICIkTElORU5PIiA1OyB9DQplbHNlDQogIHsgJGFzX2VjaG8g IiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMiID4mNQ0KJGFzX2VjaG8g InllcyIgPiY2OyB9DQpmaQ0KeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99 OiBjaGVja2luZyBmb3IgQyBjb21waWxlciBkZWZhdWx0IG91dHB1dCBmaWxlIG5hbWUiID4mNQ0K JGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIEMgY29tcGlsZXIgZGVmYXVsdCBvdXRwdXQgZmlsZSBu YW1lLi4uICIgPiY2OyB9DQp7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306 IHJlc3VsdDogJGFjX2ZpbGUiID4mNQ0KJGFzX2VjaG8gIiRhY19maWxlIiA+JjY7IH0NCmFjX2V4 ZWV4dD0kYWNfY3ZfZXhlZXh0DQoNCnJtIC1mIC1yIGEub3V0IGEub3V0LmRTWU0gYS5leGUgY29u ZnRlc3QkYWNfY3ZfZXhlZXh0IGIub3V0DQphY19jbGVhbl9maWxlcz0kYWNfY2xlYW5fZmlsZXNf c2F2ZQ0KeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBm b3Igc3VmZml4IG9mIGV4ZWN1dGFibGVzIiA+JjUNCiRhc19lY2hvX24gImNoZWNraW5nIGZvciBz dWZmaXggb2YgZXhlY3V0YWJsZXMuLi4gIiA+JjY7IH0NCmlmIHsgeyBhY190cnk9IiRhY19saW5r Ig0KY2FzZSAiKCgkYWNfdHJ5IiBpbg0KICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hv PVwkYWNfdHJ5OzsNCiAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7DQplc2FjDQpldmFsIGFjX3Ry eV9lY2hvPSJcIlwkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306ICRhY190cnlfZWNob1wiIg0K JGFzX2VjaG8gIiRhY190cnlfZWNobyI7IH0gPiY1DQogIChldmFsICIkYWNfbGluayIpIDI+JjUN CiAgYWNfc3RhdHVzPSQ/DQogICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306 IFwkPyA9ICRhY19zdGF0dXMiID4mNQ0KICB0ZXN0ICRhY19zdGF0dXMgPSAwOyB9OyB0aGVuIDoN CiAgIyBJZiBib3RoIGBjb25mdGVzdC5leGUnIGFuZCBgY29uZnRlc3QnIGFyZSBgcHJlc2VudCcg KHdlbGwsIG9ic2VydmFibGUpDQojIGNhdGNoIGBjb25mdGVzdC5leGUnLiAgRm9yIGluc3RhbmNl IHdpdGggQ3lnd2luLCBgbHMgY29uZnRlc3QnIHdpbGwNCiMgd29yayBwcm9wZXJseSAoaS5lLiwg cmVmZXIgdG8gYGNvbmZ0ZXN0LmV4ZScpLCB3aGlsZSBpdCB3b24ndCB3aXRoDQojIGBybScuDQpm b3IgYWNfZmlsZSBpbiBjb25mdGVzdC5leGUgY29uZnRlc3QgY29uZnRlc3QuKjsgZG8NCiAgdGVz dCAtZiAiJGFjX2ZpbGUiIHx8IGNvbnRpbnVlDQogIGNhc2UgJGFjX2ZpbGUgaW4NCiAgICAqLiRh Y19leHQgfCAqLnhjb2ZmIHwgKi50ZHMgfCAqLmQgfCAqLnBkYiB8ICoueFNZTSB8ICouYmIgfCAq LmJiZyB8ICoubWFwIHwgKi5pbmYgfCAqLmRTWU0gfCAqLm8gfCAqLm9iaiApIDs7DQogICAgKi4q ICkgYWNfY3ZfZXhlZXh0PWBleHByICIkYWNfZmlsZSIgOiAnW14uXSpcKFwuLipcKSdgDQoJICBi cmVhazs7DQogICAgKiApIGJyZWFrOzsNCiAgZXNhYw0KZG9uZQ0KZWxzZQ0KICB7IHsgJGFzX2Vj aG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZXJyb3I6IGluIFxgJGFjX3B3ZCc6IiA+ JjUNCiRhc19lY2hvICIkYXNfbWU6IGVycm9yOiBpbiBcYCRhY19wd2QnOiIgPiYyO30NCmFzX2Zu X2Vycm9yICQ/ICJjYW5ub3QgY29tcHV0ZSBzdWZmaXggb2YgZXhlY3V0YWJsZXM6IGNhbm5vdCBj b21waWxlIGFuZCBsaW5rDQpTZWUgXGBjb25maWcubG9nJyBmb3IgbW9yZSBkZXRhaWxzIiAiJExJ TkVOTyIgNTsgfQ0KZmkNCnJtIC1mIGNvbmZ0ZXN0IGNvbmZ0ZXN0JGFjX2N2X2V4ZWV4dA0KeyAk YXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9leGVl eHQiID4mNQ0KJGFzX2VjaG8gIiRhY19jdl9leGVleHQiID4mNjsgfQ0KDQpybSAtZiBjb25mdGVz dC4kYWNfZXh0DQpFWEVFWFQ9JGFjX2N2X2V4ZWV4dA0KYWNfZXhlZXh0PSRFWEVFWFQNCmNhdCBj b25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQNCi8qIGVuZCBjb25mZGVmcy5o LiAgKi8NCiNpbmNsdWRlIDxzdGRpby5oPg0KaW50DQptYWluICgpDQp7DQpGSUxFICpmID0gZm9w ZW4gKCJjb25mdGVzdC5vdXQiLCAidyIpOw0KIHJldHVybiBmZXJyb3IgKGYpIHx8IGZjbG9zZSAo ZikgIT0gMDsNCg0KICA7DQogIHJldHVybiAwOw0KfQ0KX0FDRU9GDQphY19jbGVhbl9maWxlcz0i JGFjX2NsZWFuX2ZpbGVzIGNvbmZ0ZXN0Lm91dCINCiMgQ2hlY2sgdGhhdCB0aGUgY29tcGlsZXIg cHJvZHVjZXMgZXhlY3V0YWJsZXMgd2UgY2FuIHJ1bi4gIElmIG5vdCwgZWl0aGVyDQojIHRoZSBj b21waWxlciBpcyBicm9rZW4sIG9yIHdlIGNyb3NzIGNvbXBpbGUuDQp7ICRhc19lY2hvICIkYXNf bWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgd2UgYXJlIGNyb3NzIGNv bXBpbGluZyIgPiY1DQokYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIHdlIGFyZSBjcm9zcyBj b21waWxpbmcuLi4gIiA+JjY7IH0NCmlmIHRlc3QgIiRjcm9zc19jb21waWxpbmciICE9IHllczsg dGhlbg0KICB7IHsgYWNfdHJ5PSIkYWNfbGluayINCmNhc2UgIigoJGFjX3RyeSIgaW4NCiAgKlwi KiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7DQogICopIGFjX3RyeV9lY2hv PSRhY190cnk7Ow0KZXNhYw0KZXZhbCBhY190cnlfZWNobz0iXCJcJGFzX21lOiR7YXNfbGluZW5v LSRMSU5FTk99OiAkYWNfdHJ5X2VjaG9cIiINCiRhc19lY2hvICIkYWNfdHJ5X2VjaG8iOyB9ID4m NQ0KICAoZXZhbCAiJGFjX2xpbmsiKSAyPiY1DQogIGFjX3N0YXR1cz0kPw0KICAkYXNfZWNobyAi JGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUNCiAgdGVz dCAkYWNfc3RhdHVzID0gMDsgfQ0KICBpZiB7IGFjX3RyeT0nLi9jb25mdGVzdCRhY19jdl9leGVl eHQnDQogIHsgeyBjYXNlICIoKCRhY190cnkiIGluDQogICpcIiogfCAqXGAqIHwgKlxcKikgYWNf dHJ5X2VjaG89XCRhY190cnk7Ow0KICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsNCmVzYWMNCmV2 YWwgYWNfdHJ5X2VjaG89IlwiXCRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogJGFjX3RyeV9l Y2hvXCIiDQokYXNfZWNobyAiJGFjX3RyeV9lY2hvIjsgfSA+JjUNCiAgKGV2YWwgIiRhY190cnki KSAyPiY1DQogIGFjX3N0YXR1cz0kPw0KICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRM SU5FTk99OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUNCiAgdGVzdCAkYWNfc3RhdHVzID0gMDsgfTsg fTsgdGhlbg0KICAgIGNyb3NzX2NvbXBpbGluZz1ubw0KICBlbHNlDQogICAgaWYgdGVzdCAiJGNy b3NzX2NvbXBpbGluZyIgPSBtYXliZTsgdGhlbg0KCWNyb3NzX2NvbXBpbGluZz15ZXMNCiAgICBl bHNlDQoJeyB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGVycm9yOiBp biBcYCRhY19wd2QnOiIgPiY1DQokYXNfZWNobyAiJGFzX21lOiBlcnJvcjogaW4gXGAkYWNfcHdk JzoiID4mMjt9DQphc19mbl9lcnJvciAkPyAiY2Fubm90IHJ1biBDIGNvbXBpbGVkIHByb2dyYW1z Lg0KSWYgeW91IG1lYW50IHRvIGNyb3NzIGNvbXBpbGUsIHVzZSBcYC0taG9zdCcuDQpTZWUgXGBj b25maWcubG9nJyBmb3IgbW9yZSBkZXRhaWxzIiAiJExJTkVOTyIgNTsgfQ0KICAgIGZpDQogIGZp DQpmaQ0KeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRj cm9zc19jb21waWxpbmciID4mNQ0KJGFzX2VjaG8gIiRjcm9zc19jb21waWxpbmciID4mNjsgfQ0K DQpybSAtZiBjb25mdGVzdC4kYWNfZXh0IGNvbmZ0ZXN0JGFjX2N2X2V4ZWV4dCBjb25mdGVzdC5v dXQNCmFjX2NsZWFuX2ZpbGVzPSRhY19jbGVhbl9maWxlc19zYXZlDQp7ICRhc19lY2hvICIkYXNf bWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBzdWZmaXggb2Ygb2JqZWN0IGZp bGVzIiA+JjUNCiRhc19lY2hvX24gImNoZWNraW5nIGZvciBzdWZmaXggb2Ygb2JqZWN0IGZpbGVz Li4uICIgPiY2OyB9DQppZiAke2FjX2N2X29iamV4dCs6fSBmYWxzZTsgdGhlbiA6DQogICRhc19l Y2hvX24gIihjYWNoZWQpICIgPiY2DQplbHNlDQogIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0Yg PmNvbmZ0ZXN0LiRhY19leHQNCi8qIGVuZCBjb25mZGVmcy5oLiAgKi8NCg0KaW50DQptYWluICgp DQp7DQoNCiAgOw0KICByZXR1cm4gMDsNCn0NCl9BQ0VPRg0Kcm0gLWYgY29uZnRlc3QubyBjb25m dGVzdC5vYmoNCmlmIHsgeyBhY190cnk9IiRhY19jb21waWxlIg0KY2FzZSAiKCgkYWNfdHJ5IiBp bg0KICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsNCiAgKikgYWNf dHJ5X2VjaG89JGFjX3RyeTs7DQplc2FjDQpldmFsIGFjX3RyeV9lY2hvPSJcIlwkYXNfbWU6JHth c19saW5lbm8tJExJTkVOT306ICRhY190cnlfZWNob1wiIg0KJGFzX2VjaG8gIiRhY190cnlfZWNo byI7IH0gPiY1DQogIChldmFsICIkYWNfY29tcGlsZSIpIDI+JjUNCiAgYWNfc3RhdHVzPSQ/DQog ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkPyA9ICRhY19zdGF0dXMi ID4mNQ0KICB0ZXN0ICRhY19zdGF0dXMgPSAwOyB9OyB0aGVuIDoNCiAgZm9yIGFjX2ZpbGUgaW4g Y29uZnRlc3QubyBjb25mdGVzdC5vYmogY29uZnRlc3QuKjsgZG8NCiAgdGVzdCAtZiAiJGFjX2Zp bGUiIHx8IGNvbnRpbnVlOw0KICBjYXNlICRhY19maWxlIGluDQogICAgKi4kYWNfZXh0IHwgKi54 Y29mZiB8ICoudGRzIHwgKi5kIHwgKi5wZGIgfCAqLnhTWU0gfCAqLmJiIHwgKi5iYmcgfCAqLm1h cCB8ICouaW5mIHwgKi5kU1lNICkgOzsNCiAgICAqKSBhY19jdl9vYmpleHQ9YGV4cHIgIiRhY19m aWxlIiA6ICcuKlwuXCguKlwpJ2ANCiAgICAgICBicmVhazs7DQogIGVzYWMNCmRvbmUNCmVsc2UN CiAgJGFzX2VjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1DQpzZWQgJ3MvXi98 IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1DQoNCnsgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGlu ZW5vLSRMSU5FTk99OiBlcnJvcjogaW4gXGAkYWNfcHdkJzoiID4mNQ0KJGFzX2VjaG8gIiRhc19t ZTogZXJyb3I6IGluIFxgJGFjX3B3ZCc6IiA+JjI7fQ0KYXNfZm5fZXJyb3IgJD8gImNhbm5vdCBj b21wdXRlIHN1ZmZpeCBvZiBvYmplY3QgZmlsZXM6IGNhbm5vdCBjb21waWxlDQpTZWUgXGBjb25m aWcubG9nJyBmb3IgbW9yZSBkZXRhaWxzIiAiJExJTkVOTyIgNTsgfQ0KZmkNCnJtIC1mIGNvbmZ0 ZXN0LiRhY19jdl9vYmpleHQgY29uZnRlc3QuJGFjX2V4dA0KZmkNCnsgJGFzX2VjaG8gIiRhc19t ZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3Zfb2JqZXh0IiA+JjUNCiRhc19l Y2hvICIkYWNfY3Zfb2JqZXh0IiA+JjY7IH0NCk9CSkVYVD0kYWNfY3Zfb2JqZXh0DQphY19vYmpl eHQ9JE9CSkVYVA0KeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVj a2luZyB3aGV0aGVyIHdlIGFyZSB1c2luZyB0aGUgR05VIEMgY29tcGlsZXIiID4mNQ0KJGFzX2Vj aG9fbiAiY2hlY2tpbmcgd2hldGhlciB3ZSBhcmUgdXNpbmcgdGhlIEdOVSBDIGNvbXBpbGVyLi4u ICIgPiY2OyB9DQppZiAke2FjX2N2X2NfY29tcGlsZXJfZ251Kzp9IGZhbHNlOyB0aGVuIDoNCiAg JGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYNCmVsc2UNCiAgY2F0IGNvbmZkZWZzLmggLSA8PF9B Q0VPRiA+Y29uZnRlc3QuJGFjX2V4dA0KLyogZW5kIGNvbmZkZWZzLmguICAqLw0KDQppbnQNCm1h aW4gKCkNCnsNCiNpZm5kZWYgX19HTlVDX18NCiAgICAgICBjaG9rZSBtZQ0KI2VuZGlmDQoNCiAg Ow0KICByZXR1cm4gMDsNCn0NCl9BQ0VPRg0KaWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVO TyI7IHRoZW4gOg0KICBhY19jb21waWxlcl9nbnU9eWVzDQplbHNlDQogIGFjX2NvbXBpbGVyX2du dT1ubw0KZmkNCnJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29u ZnRlc3QuJGFjX2V4dA0KYWNfY3ZfY19jb21waWxlcl9nbnU9JGFjX2NvbXBpbGVyX2dudQ0KDQpm aQ0KeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19j dl9jX2NvbXBpbGVyX2dudSIgPiY1DQokYXNfZWNobyAiJGFjX2N2X2NfY29tcGlsZXJfZ251IiA+ JjY7IH0NCmlmIHRlc3QgJGFjX2NvbXBpbGVyX2dudSA9IHllczsgdGhlbg0KICBHQ0M9eWVzDQpl bHNlDQogIEdDQz0NCmZpDQphY190ZXN0X0NGTEFHUz0ke0NGTEFHUytzZXR9DQphY19zYXZlX0NG TEFHUz0kQ0ZMQUdTDQp7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNo ZWNraW5nIHdoZXRoZXIgJENDIGFjY2VwdHMgLWciID4mNQ0KJGFzX2VjaG9fbiAiY2hlY2tpbmcg d2hldGhlciAkQ0MgYWNjZXB0cyAtZy4uLiAiID4mNjsgfQ0KaWYgJHthY19jdl9wcm9nX2NjX2cr On0gZmFsc2U7IHRoZW4gOg0KICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNg0KZWxzZQ0KICBh Y19zYXZlX2Nfd2Vycm9yX2ZsYWc9JGFjX2Nfd2Vycm9yX2ZsYWcNCiAgIGFjX2Nfd2Vycm9yX2Zs YWc9eWVzDQogICBhY19jdl9wcm9nX2NjX2c9bm8NCiAgIENGTEFHUz0iLWciDQogICBjYXQgY29u ZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0DQovKiBlbmQgY29uZmRlZnMuaC4g ICovDQoNCmludA0KbWFpbiAoKQ0Kew0KDQogIDsNCiAgcmV0dXJuIDA7DQp9DQpfQUNFT0YNCmlm IGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoNCiAgYWNfY3ZfcHJvZ19jY19n PXllcw0KZWxzZQ0KICBDRkxBR1M9IiINCiAgICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0Yg PmNvbmZ0ZXN0LiRhY19leHQNCi8qIGVuZCBjb25mZGVmcy5oLiAgKi8NCg0KaW50DQptYWluICgp DQp7DQoNCiAgOw0KICByZXR1cm4gMDsNCn0NCl9BQ0VPRg0KaWYgYWNfZm5fY190cnlfY29tcGls ZSAiJExJTkVOTyI7IHRoZW4gOg0KDQplbHNlDQogIGFjX2Nfd2Vycm9yX2ZsYWc9JGFjX3NhdmVf Y193ZXJyb3JfZmxhZw0KCSBDRkxBR1M9Ii1nIg0KCSBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9G ID5jb25mdGVzdC4kYWNfZXh0DQovKiBlbmQgY29uZmRlZnMuaC4gICovDQoNCmludA0KbWFpbiAo KQ0Kew0KDQogIDsNCiAgcmV0dXJuIDA7DQp9DQpfQUNFT0YNCmlmIGFjX2ZuX2NfdHJ5X2NvbXBp bGUgIiRMSU5FTk8iOyB0aGVuIDoNCiAgYWNfY3ZfcHJvZ19jY19nPXllcw0KZmkNCnJtIC1mIGNv cmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dA0KZmkN CnJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFj X2V4dA0KZmkNCnJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29u ZnRlc3QuJGFjX2V4dA0KICAgYWNfY193ZXJyb3JfZmxhZz0kYWNfc2F2ZV9jX3dlcnJvcl9mbGFn DQpmaQ0KeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRh Y19jdl9wcm9nX2NjX2ciID4mNQ0KJGFzX2VjaG8gIiRhY19jdl9wcm9nX2NjX2ciID4mNjsgfQ0K aWYgdGVzdCAiJGFjX3Rlc3RfQ0ZMQUdTIiA9IHNldDsgdGhlbg0KICBDRkxBR1M9JGFjX3NhdmVf Q0ZMQUdTDQplbGlmIHRlc3QgJGFjX2N2X3Byb2dfY2NfZyA9IHllczsgdGhlbg0KICBpZiB0ZXN0 ICIkR0NDIiA9IHllczsgdGhlbg0KICAgIENGTEFHUz0iLWcgLU8yIg0KICBlbHNlDQogICAgQ0ZM QUdTPSItZyINCiAgZmkNCmVsc2UNCiAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4NCiAgICBD RkxBR1M9Ii1PMiINCiAgZWxzZQ0KICAgIENGTEFHUz0NCiAgZmkNCmZpDQp7ICRhc19lY2hvICIk YXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkQ0Mgb3B0aW9uIHRvIGFj Y2VwdCBJU08gQzg5IiA+JjUNCiRhc19lY2hvX24gImNoZWNraW5nIGZvciAkQ0Mgb3B0aW9uIHRv IGFjY2VwdCBJU08gQzg5Li4uICIgPiY2OyB9DQppZiAke2FjX2N2X3Byb2dfY2NfYzg5Kzp9IGZh bHNlOyB0aGVuIDoNCiAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYNCmVsc2UNCiAgYWNfY3Zf cHJvZ19jY19jODk9bm8NCmFjX3NhdmVfQ0M9JENDDQpjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9G ID5jb25mdGVzdC4kYWNfZXh0DQovKiBlbmQgY29uZmRlZnMuaC4gICovDQojaW5jbHVkZSA8c3Rk YXJnLmg+DQojaW5jbHVkZSA8c3RkaW8uaD4NCnN0cnVjdCBzdGF0Ow0KLyogTW9zdCBvZiB0aGUg Zm9sbG93aW5nIHRlc3RzIGFyZSBzdG9sZW4gZnJvbSBSQ1MgNS43J3Mgc3JjL2NvbmYuc2guICAq Lw0Kc3RydWN0IGJ1ZiB7IGludCB4OyB9Ow0KRklMRSAqICgqcmNzb3BlbikgKHN0cnVjdCBidWYg Kiwgc3RydWN0IHN0YXQgKiwgaW50KTsNCnN0YXRpYyBjaGFyICplIChwLCBpKQ0KICAgICBjaGFy ICoqcDsNCiAgICAgaW50IGk7DQp7DQogIHJldHVybiBwW2ldOw0KfQ0Kc3RhdGljIGNoYXIgKmYg KGNoYXIgKiAoKmcpIChjaGFyICoqLCBpbnQpLCBjaGFyICoqcCwgLi4uKQ0Kew0KICBjaGFyICpz Ow0KICB2YV9saXN0IHY7DQogIHZhX3N0YXJ0ICh2LHApOw0KICBzID0gZyAocCwgdmFfYXJnICh2 LGludCkpOw0KICB2YV9lbmQgKHYpOw0KICByZXR1cm4gczsNCn0NCg0KLyogT1NGIDQuMCBDb21w YXEgY2MgaXMgc29tZSBzb3J0IG9mIGFsbW9zdC1BTlNJIGJ5IGRlZmF1bHQuICBJdCBoYXMNCiAg IGZ1bmN0aW9uIHByb3RvdHlwZXMgYW5kIHN0dWZmLCBidXQgbm90ICdceEhIJyBoZXggY2hhcmFj dGVyIGNvbnN0YW50cy4NCiAgIFRoZXNlIGRvbid0IHByb3Zva2UgYW4gZXJyb3IgdW5mb3J0dW5h dGVseSwgaW5zdGVhZCBhcmUgc2lsZW50bHkgdHJlYXRlZA0KICAgYXMgJ3gnLiAgVGhlIGZvbGxv d2luZyBpbmR1Y2VzIGFuIGVycm9yLCB1bnRpbCAtc3RkIGlzIGFkZGVkIHRvIGdldA0KICAgcHJv cGVyIEFOU0kgbW9kZS4gIEN1cmlvdXNseSAnXHgwMCchPSd4JyBhbHdheXMgY29tZXMgb3V0IHRy dWUsIGZvciBhbg0KICAgYXJyYXkgc2l6ZSBhdCBsZWFzdC4gIEl0J3MgbmVjZXNzYXJ5IHRvIHdy aXRlICdceDAwJz09MCB0byBnZXQgc29tZXRoaW5nDQogICB0aGF0J3MgdHJ1ZSBvbmx5IHdpdGgg LXN0ZC4gICovDQppbnQgb3NmNF9jY19hcnJheSBbJ1x4MDAnID09IDAgPyAxIDogLTFdOw0KDQov KiBJQk0gQyA2IGZvciBBSVggaXMgYWxtb3N0LUFOU0kgYnkgZGVmYXVsdCwgYnV0IGl0IHJlcGxh Y2VzIG1hY3JvIHBhcmFtZXRlcnMNCiAgIGluc2lkZSBzdHJpbmdzIGFuZCBjaGFyYWN0ZXIgY29u c3RhbnRzLiAgKi8NCiNkZWZpbmUgRk9PKHgpICd4Jw0KaW50IHhsYzZfY2NfYXJyYXlbRk9PKGEp ID09ICd4JyA/IDEgOiAtMV07DQoNCmludCB0ZXN0IChpbnQgaSwgZG91YmxlIHgpOw0Kc3RydWN0 IHMxIHtpbnQgKCpmKSAoaW50IGEpO307DQpzdHJ1Y3QgczIge2ludCAoKmYpIChkb3VibGUgYSk7 fTsNCmludCBwYWlybmFtZXMgKGludCwgY2hhciAqKiwgRklMRSAqKCopKHN0cnVjdCBidWYgKiwg c3RydWN0IHN0YXQgKiwgaW50KSwgaW50LCBpbnQpOw0KaW50IGFyZ2M7DQpjaGFyICoqYXJndjsN CmludA0KbWFpbiAoKQ0Kew0KcmV0dXJuIGYgKGUsIGFyZ3YsIDApICE9IGFyZ3ZbMF0gIHx8ICBm IChlLCBhcmd2LCAxKSAhPSBhcmd2WzFdOw0KICA7DQogIHJldHVybiAwOw0KfQ0KX0FDRU9GDQpm b3IgYWNfYXJnIGluICcnIC1xbGFuZ2x2bD1leHRjODkgLXFsYW5nbHZsPWFuc2kgLXN0ZCBcDQoJ LUFlICItQWEgLURfSFBVWF9TT1VSQ0UiICItWGMgLURfX0VYVEVOU0lPTlNfXyINCmRvDQogIEND PSIkYWNfc2F2ZV9DQyAkYWNfYXJnIg0KICBpZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5P IjsgdGhlbiA6DQogIGFjX2N2X3Byb2dfY2NfYzg5PSRhY19hcmcNCmZpDQpybSAtZiBjb3JlIGNv bmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0DQogIHRlc3QgIngkYWNfY3ZfcHJvZ19jY19j ODkiICE9ICJ4bm8iICYmIGJyZWFrDQpkb25lDQpybSAtZiBjb25mdGVzdC4kYWNfZXh0DQpDQz0k YWNfc2F2ZV9DQw0KDQpmaQ0KIyBBQ19DQUNIRV9WQUwNCmNhc2UgIngkYWNfY3ZfcHJvZ19jY19j ODkiIGluDQogIHgpDQogICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99 OiByZXN1bHQ6IG5vbmUgbmVlZGVkIiA+JjUNCiRhc19lY2hvICJub25lIG5lZWRlZCIgPiY2OyB9 IDs7DQogIHhubykNCiAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306 IHJlc3VsdDogdW5zdXBwb3J0ZWQiID4mNQ0KJGFzX2VjaG8gInVuc3VwcG9ydGVkIiA+JjY7IH0g OzsNCiAgKikNCiAgICBDQz0iJENDICRhY19jdl9wcm9nX2NjX2M4OSINCiAgICB7ICRhc19lY2hv ICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X3Byb2dfY2NfYzg5 IiA+JjUNCiRhc19lY2hvICIkYWNfY3ZfcHJvZ19jY19jODkiID4mNjsgfSA7Ow0KZXNhYw0KaWYg dGVzdCAieCRhY19jdl9wcm9nX2NjX2M4OSIgIT0geG5vOyB0aGVuIDoNCg0KZmkNCg0KYWNfZXh0 PWMNCmFjX2NwcD0nJENQUCAkQ1BQRkxBR1MnDQphY19jb21waWxlPSckQ0MgLWMgJENGTEFHUyAk Q1BQRkxBR1MgY29uZnRlc3QuJGFjX2V4dCA+JjUnDQphY19saW5rPSckQ0MgLW8gY29uZnRlc3Qk YWNfZXhlZXh0ICRDRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgJExJ QlMgPiY1Jw0KYWNfY29tcGlsZXJfZ251PSRhY19jdl9jX2NvbXBpbGVyX2dudQ0KDQpkZXBjYz0i JENDIiAgIGFtX2NvbXBpbGVyX2xpc3Q9DQoNCnsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVu by0kTElORU5PfTogY2hlY2tpbmcgZGVwZW5kZW5jeSBzdHlsZSBvZiAkZGVwY2MiID4mNQ0KJGFz X2VjaG9fbiAiY2hlY2tpbmcgZGVwZW5kZW5jeSBzdHlsZSBvZiAkZGVwY2MuLi4gIiA+JjY7IH0N CmlmICR7YW1fY3ZfQ0NfZGVwZW5kZW5jaWVzX2NvbXBpbGVyX3R5cGUrOn0gZmFsc2U7IHRoZW4g Og0KICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNg0KZWxzZQ0KICBpZiB0ZXN0IC16ICIkQU1E RVBfVFJVRSIgJiYgdGVzdCAtZiAiJGFtX2RlcGNvbXAiOyB0aGVuDQogICMgV2UgbWFrZSBhIHN1 YmRpciBhbmQgZG8gdGhlIHRlc3RzIHRoZXJlLiAgT3RoZXJ3aXNlIHdlIGNhbiBlbmQgdXANCiAg IyBtYWtpbmcgYm9ndXMgZmlsZXMgdGhhdCB3ZSBkb24ndCBrbm93IGFib3V0IGFuZCBuZXZlciBy ZW1vdmUuICBGb3INCiAgIyBpbnN0YW5jZSBpdCB3YXMgcmVwb3J0ZWQgdGhhdCBvbiBIUC1VWCB0 aGUgZ2NjIHRlc3Qgd2lsbCBlbmQgdXANCiAgIyBtYWtpbmcgYSBkdW1teSBmaWxlIG5hbWVkIGBE JyAtLSBiZWNhdXNlIGAtTUQnIG1lYW5zIGBwdXQgdGhlIG91dHB1dA0KICAjIGluIEQnLg0KICBy bSAtcmYgY29uZnRlc3QuZGlyDQogIG1rZGlyIGNvbmZ0ZXN0LmRpcg0KICAjIENvcHkgZGVwY29t cCB0byBzdWJkaXIgYmVjYXVzZSBvdGhlcndpc2Ugd2Ugd29uJ3QgZmluZCBpdCBpZiB3ZSdyZQ0K ICAjIHVzaW5nIGEgcmVsYXRpdmUgZGlyZWN0b3J5Lg0KICBjcCAiJGFtX2RlcGNvbXAiIGNvbmZ0 ZXN0LmRpcg0KICBjZCBjb25mdGVzdC5kaXINCiAgIyBXZSB3aWxsIGJ1aWxkIG9iamVjdHMgYW5k IGRlcGVuZGVuY2llcyBpbiBhIHN1YmRpcmVjdG9yeSBiZWNhdXNlDQogICMgaXQgaGVscHMgdG8g ZGV0ZWN0IGluYXBwbGljYWJsZSBkZXBlbmRlbmN5IG1vZGVzLiAgRm9yIGluc3RhbmNlDQogICMg Ym90aCBUcnU2NCdzIGNjIGFuZCBJQ0Mgc3VwcG9ydCAtTUQgdG8gb3V0cHV0IGRlcGVuZGVuY2ll cyBhcyBhDQogICMgc2lkZSBlZmZlY3Qgb2YgY29tcGlsYXRpb24sIGJ1dCBJQ0Mgd2lsbCBwdXQg dGhlIGRlcGVuZGVuY2llcyBpbg0KICAjIHRoZSBjdXJyZW50IGRpcmVjdG9yeSB3aGlsZSBUcnU2 NCB3aWxsIHB1dCB0aGVtIGluIHRoZSBvYmplY3QNCiAgIyBkaXJlY3RvcnkuDQogIG1rZGlyIHN1 Yg0KDQogIGFtX2N2X0NDX2RlcGVuZGVuY2llc19jb21waWxlcl90eXBlPW5vbmUNCiAgaWYgdGVz dCAiJGFtX2NvbXBpbGVyX2xpc3QiID0gIiI7IHRoZW4NCiAgICAgYW1fY29tcGlsZXJfbGlzdD1g c2VkIC1uICdzL14jKlwoW2EtekEtWjAtOV0qXCkpJC9cMS9wJyA8IC4vZGVwY29tcGANCiAgZmkN CiAgYW1fX3VuaXZlcnNhbD1mYWxzZQ0KICBjYXNlICIgJGRlcGNjICIgaW4gIygNCiAgICAgKlwg LWFyY2hcICpcIC1hcmNoXCAqKSBhbV9fdW5pdmVyc2FsPXRydWUgOzsNCiAgICAgZXNhYw0KDQog IGZvciBkZXBtb2RlIGluICRhbV9jb21waWxlcl9saXN0OyBkbw0KICAgICMgU2V0dXAgYSBzb3Vy Y2Ugd2l0aCBtYW55IGRlcGVuZGVuY2llcywgYmVjYXVzZSBzb21lIGNvbXBpbGVycw0KICAgICMg bGlrZSB0byB3cmFwIGxhcmdlIGRlcGVuZGVuY3kgbGlzdHMgb24gY29sdW1uIDgwICh3aXRoIFwp LCBhbmQNCiAgICAjIHdlIHNob3VsZCBub3QgY2hvb3NlIGEgZGVwY29tcCBtb2RlIHdoaWNoIGlz IGNvbmZ1c2VkIGJ5IHRoaXMuDQogICAgIw0KICAgICMgV2UgbmVlZCB0byByZWNyZWF0ZSB0aGVz ZSBmaWxlcyBmb3IgZWFjaCB0ZXN0LCBhcyB0aGUgY29tcGlsZXIgbWF5DQogICAgIyBvdmVyd3Jp dGUgc29tZSBvZiB0aGVtIHdoZW4gdGVzdGluZyB3aXRoIG9ic2N1cmUgY29tbWFuZCBsaW5lcy4N CiAgICAjIFRoaXMgaGFwcGVucyBhdCBsZWFzdCB3aXRoIHRoZSBBSVggQyBjb21waWxlci4NCiAg ICA6ID4gc3ViL2NvbmZ0ZXN0LmMNCiAgICBmb3IgaSBpbiAxIDIgMyA0IDUgNjsgZG8NCiAgICAg IGVjaG8gJyNpbmNsdWRlICJjb25mdHN0JyRpJy5oIicgPj4gc3ViL2NvbmZ0ZXN0LmMNCiAgICAg ICMgVXNpbmcgYDogPiBzdWIvY29uZnRzdCRpLmgnIGNyZWF0ZXMgb25seSBzdWIvY29uZnRzdDEu aCB3aXRoDQogICAgICAjIFNvbGFyaXMgOCdzIHsvdXNyLH0vYmluL3NoLg0KICAgICAgdG91Y2gg c3ViL2NvbmZ0c3QkaS5oDQogICAgZG9uZQ0KICAgIGVjaG8gIiR7YW1fX2luY2x1ZGV9ICR7YW1f X3F1b3RlfXN1Yi9jb25mdGVzdC5QbyR7YW1fX3F1b3RlfSIgPiBjb25mbWYNCg0KICAgICMgV2Ug Y2hlY2sgd2l0aCBgLWMnIGFuZCBgLW8nIGZvciB0aGUgc2FrZSBvZiB0aGUgImRhc2htc3Rkb3V0 Ig0KICAgICMgbW9kZS4gIEl0IHR1cm5zIG91dCB0aGF0IHRoZSBTdW5Qcm8gQysrIGNvbXBpbGVy IGRvZXMgbm90IHByb3Blcmx5DQogICAgIyBoYW5kbGUgYC1NIC1vJywgYW5kIHdlIG5lZWQgdG8g ZGV0ZWN0IHRoaXMuICBBbHNvLCBzb21lIEludGVsDQogICAgIyB2ZXJzaW9ucyBoYWQgdHJvdWJs ZSB3aXRoIG91dHB1dCBpbiBzdWJkaXJzDQogICAgYW1fX29iaj1zdWIvY29uZnRlc3QuJHtPQkpF WFQtb30NCiAgICBhbV9fbWludXNfb2JqPSItbyAkYW1fX29iaiINCiAgICBjYXNlICRkZXBtb2Rl IGluDQogICAgZ2NjKQ0KICAgICAgIyBUaGlzIGRlcG1vZGUgY2F1c2VzIGEgY29tcGlsZXIgcmFj ZSBpbiB1bml2ZXJzYWwgbW9kZS4NCiAgICAgIHRlc3QgIiRhbV9fdW5pdmVyc2FsIiA9IGZhbHNl IHx8IGNvbnRpbnVlDQogICAgICA7Ow0KICAgIG5vc2lkZWVmZmVjdCkNCiAgICAgICMgYWZ0ZXIg dGhpcyB0YWcsIG1lY2hhbmlzbXMgYXJlIG5vdCBieSBzaWRlLWVmZmVjdCwgc28gdGhleSdsbA0K ICAgICAgIyBvbmx5IGJlIHVzZWQgd2hlbiBleHBsaWNpdGx5IHJlcXVlc3RlZA0KICAgICAgaWYg dGVzdCAieCRlbmFibGVfZGVwZW5kZW5jeV90cmFja2luZyIgPSB4eWVzOyB0aGVuDQoJY29udGlu dWUNCiAgICAgIGVsc2UNCglicmVhaw0KICAgICAgZmkNCiAgICAgIDs7DQogICAgbXN2YzcgfCBt c3ZjN21zeXMgfCBtc3Zpc3VhbGNwcCB8IG1zdmNtc3lzKQ0KICAgICAgIyBUaGlzIGNvbXBpbGVy IHdvbid0IGdyb2sgYC1jIC1vJywgYnV0IGFsc28sIHRoZSBtaW51c28gdGVzdCBoYXMNCiAgICAg ICMgbm90IHJ1biB5ZXQuICBUaGVzZSBkZXBtb2RlcyBhcmUgbGF0ZSBlbm91Z2ggaW4gdGhlIGdh bWUsIGFuZA0KICAgICAgIyBzbyB3ZWFrIHRoYXQgdGhlaXIgZnVuY3Rpb25pbmcgc2hvdWxkIG5v dCBiZSBpbXBhY3RlZC4NCiAgICAgIGFtX19vYmo9Y29uZnRlc3QuJHtPQkpFWFQtb30NCiAgICAg IGFtX19taW51c19vYmo9DQogICAgICA7Ow0KICAgIG5vbmUpIGJyZWFrIDs7DQogICAgZXNhYw0K ICAgIGlmIGRlcG1vZGU9JGRlcG1vZGUgXA0KICAgICAgIHNvdXJjZT1zdWIvY29uZnRlc3QuYyBv YmplY3Q9JGFtX19vYmogXA0KICAgICAgIGRlcGZpbGU9c3ViL2NvbmZ0ZXN0LlBvIHRtcGRlcGZp bGU9c3ViL2NvbmZ0ZXN0LlRQbyBcDQogICAgICAgJFNIRUxMIC4vZGVwY29tcCAkZGVwY2MgLWMg JGFtX19taW51c19vYmogc3ViL2NvbmZ0ZXN0LmMgXA0KICAgICAgICAgPi9kZXYvbnVsbCAyPmNv bmZ0ZXN0LmVyciAmJg0KICAgICAgIGdyZXAgc3ViL2NvbmZ0c3QxLmggc3ViL2NvbmZ0ZXN0LlBv ID4gL2Rldi9udWxsIDI+JjEgJiYNCiAgICAgICBncmVwIHN1Yi9jb25mdHN0Ni5oIHN1Yi9jb25m dGVzdC5QbyA+IC9kZXYvbnVsbCAyPiYxICYmDQogICAgICAgZ3JlcCAkYW1fX29iaiBzdWIvY29u ZnRlc3QuUG8gPiAvZGV2L251bGwgMj4mMSAmJg0KICAgICAgICR7TUFLRS1tYWtlfSAtcyAtZiBj b25mbWYgPiAvZGV2L251bGwgMj4mMTsgdGhlbg0KICAgICAgIyBpY2MgZG9lc24ndCBjaG9rZSBv biB1bmtub3duIG9wdGlvbnMsIGl0IHdpbGwganVzdCBpc3N1ZSB3YXJuaW5ncw0KICAgICAgIyBv ciByZW1hcmtzIChldmVuIHdpdGggLVdlcnJvcikuICBTbyB3ZSBncmVwIHN0ZGVyciBmb3IgYW55 IG1lc3NhZ2UNCiAgICAgICMgdGhhdCBzYXlzIGFuIG9wdGlvbiB3YXMgaWdub3JlZCBvciBub3Qg c3VwcG9ydGVkLg0KICAgICAgIyBXaGVuIGdpdmVuIC1NUCwgaWNjIDcuMCBhbmQgNy4xIGNvbXBs YWluIHRodXNseToNCiAgICAgICMgICBpY2M6IENvbW1hbmQgbGluZSB3YXJuaW5nOiBpZ25vcmlu ZyBvcHRpb24gJy1NJzsgbm8gYXJndW1lbnQgcmVxdWlyZWQNCiAgICAgICMgVGhlIGRpYWdub3Np cyBjaGFuZ2VkIGluIGljYyA4LjA6DQogICAgICAjICAgaWNjOiBDb21tYW5kIGxpbmUgcmVtYXJr OiBvcHRpb24gJy1NUCcgbm90IHN1cHBvcnRlZA0KICAgICAgaWYgKGdyZXAgJ2lnbm9yaW5nIG9w dGlvbicgY29uZnRlc3QuZXJyIHx8DQogICAgICAgICAgZ3JlcCAnbm90IHN1cHBvcnRlZCcgY29u ZnRlc3QuZXJyKSA+L2Rldi9udWxsIDI+JjE7IHRoZW4gOjsgZWxzZQ0KICAgICAgICBhbV9jdl9D Q19kZXBlbmRlbmNpZXNfY29tcGlsZXJfdHlwZT0kZGVwbW9kZQ0KICAgICAgICBicmVhaw0KICAg ICAgZmkNCiAgICBmaQ0KICBkb25lDQoNCiAgY2QgLi4NCiAgcm0gLXJmIGNvbmZ0ZXN0LmRpcg0K ZWxzZQ0KICBhbV9jdl9DQ19kZXBlbmRlbmNpZXNfY29tcGlsZXJfdHlwZT1ub25lDQpmaQ0KDQpm aQ0KeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhbV9j dl9DQ19kZXBlbmRlbmNpZXNfY29tcGlsZXJfdHlwZSIgPiY1DQokYXNfZWNobyAiJGFtX2N2X0ND X2RlcGVuZGVuY2llc19jb21waWxlcl90eXBlIiA+JjY7IH0NCkNDREVQTU9ERT1kZXBtb2RlPSRh bV9jdl9DQ19kZXBlbmRlbmNpZXNfY29tcGlsZXJfdHlwZQ0KDQogaWYNCiAgdGVzdCAieCRlbmFi bGVfZGVwZW5kZW5jeV90cmFja2luZyIgIT0geG5vIFwNCiAgJiYgdGVzdCAiJGFtX2N2X0NDX2Rl cGVuZGVuY2llc19jb21waWxlcl90eXBlIiA9IGdjYzM7IHRoZW4NCiAgYW1fX2Zhc3RkZXBDQ19U UlVFPQ0KICBhbV9fZmFzdGRlcENDX0ZBTFNFPScjJw0KZWxzZQ0KICBhbV9fZmFzdGRlcENDX1RS VUU9JyMnDQogIGFtX19mYXN0ZGVwQ0NfRkFMU0U9DQpmaQ0KDQoNCiAgIGNhc2UgJGFjX2N2X3By b2dfY2Nfc3RkYyBpbiAjKA0KICBubykgOg0KICAgIGFjX2N2X3Byb2dfY2NfYzk5PW5vOyBhY19j dl9wcm9nX2NjX2M4OT1ubyA7OyAjKA0KICAqKSA6DQogICAgeyAkYXNfZWNobyAiJGFzX21lOiR7 YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJENDIG9wdGlvbiB0byBhY2NlcHQgSVNP IEM5OSIgPiY1DQokYXNfZWNob19uICJjaGVja2luZyBmb3IgJENDIG9wdGlvbiB0byBhY2NlcHQg SVNPIEM5OS4uLiAiID4mNjsgfQ0KaWYgJHthY19jdl9wcm9nX2NjX2M5OSs6fSBmYWxzZTsgdGhl biA6DQogICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2DQplbHNlDQogIGFjX2N2X3Byb2dfY2Nf Yzk5PW5vDQphY19zYXZlX0NDPSRDQw0KY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRl c3QuJGFjX2V4dA0KLyogZW5kIGNvbmZkZWZzLmguICAqLw0KI2luY2x1ZGUgPHN0ZGFyZy5oPg0K I2luY2x1ZGUgPHN0ZGJvb2wuaD4NCiNpbmNsdWRlIDxzdGRsaWIuaD4NCiNpbmNsdWRlIDx3Y2hh ci5oPg0KI2luY2x1ZGUgPHN0ZGlvLmg+DQoNCi8vIENoZWNrIHZhcmFyZ3MgbWFjcm9zLiAgVGhl c2UgZXhhbXBsZXMgYXJlIHRha2VuIGZyb20gQzk5IDYuMTAuMy41Lg0KI2RlZmluZSBkZWJ1Zygu Li4pIGZwcmludGYgKHN0ZGVyciwgX19WQV9BUkdTX18pDQojZGVmaW5lIHNob3dsaXN0KC4uLikg cHV0cyAoI19fVkFfQVJHU19fKQ0KI2RlZmluZSByZXBvcnQodGVzdCwuLi4pICgodGVzdCkgPyBw dXRzICgjdGVzdCkgOiBwcmludGYgKF9fVkFfQVJHU19fKSkNCnN0YXRpYyB2b2lkDQp0ZXN0X3Zh cmFyZ3NfbWFjcm9zICh2b2lkKQ0Kew0KICBpbnQgeCA9IDEyMzQ7DQogIGludCB5ID0gNTY3ODsN CiAgZGVidWcgKCJGbGFnIik7DQogIGRlYnVnICgiWCA9ICVkXG4iLCB4KTsNCiAgc2hvd2xpc3Qg KFRoZSBmaXJzdCwgc2Vjb25kLCBhbmQgdGhpcmQgaXRlbXMuKTsNCiAgcmVwb3J0ICh4PnksICJ4 IGlzICVkIGJ1dCB5IGlzICVkIiwgeCwgeSk7DQp9DQoNCi8vIENoZWNrIGxvbmcgbG9uZyB0eXBl cy4NCiNkZWZpbmUgQklHNjQgMTg0NDY3NDQwNzM3MDk1NTE2MTV1bGwNCiNkZWZpbmUgQklHMzIg NDI5NDk2NzI5NXVsDQojZGVmaW5lIEJJR19PSyAoQklHNjQgLyBCSUczMiA9PSA0Mjk0OTY3Mjk3 dWxsICYmIEJJRzY0ICUgQklHMzIgPT0gMCkNCiNpZiAhQklHX09LDQogIHlvdXIgcHJlcHJvY2Vz c29yIGlzIGJyb2tlbjsNCiNlbmRpZg0KI2lmIEJJR19PSw0KI2Vsc2UNCiAgeW91ciBwcmVwcm9j ZXNzb3IgaXMgYnJva2VuOw0KI2VuZGlmDQpzdGF0aWMgbG9uZyBsb25nIGludCBiaWdudW0gPSAt OTIyMzM3MjAzNjg1NDc3NTgwN0xMOw0Kc3RhdGljIHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQgdWJp Z251bSA9IEJJRzY0Ow0KDQpzdHJ1Y3QgaW5jb21wbGV0ZV9hcnJheQ0Kew0KICBpbnQgZGF0YXNp emU7DQogIGRvdWJsZSBkYXRhW107DQp9Ow0KDQpzdHJ1Y3QgbmFtZWRfaW5pdCB7DQogIGludCBu dW1iZXI7DQogIGNvbnN0IHdjaGFyX3QgKm5hbWU7DQogIGRvdWJsZSBhdmVyYWdlOw0KfTsNCg0K dHlwZWRlZiBjb25zdCBjaGFyICpjY3A7DQoNCnN0YXRpYyBpbmxpbmUgaW50DQp0ZXN0X3Jlc3Ry aWN0IChjY3AgcmVzdHJpY3QgdGV4dCkNCnsNCiAgLy8gU2VlIGlmIEMrKy1zdHlsZSBjb21tZW50 cyB3b3JrLg0KICAvLyBJdGVyYXRlIHRocm91Z2ggaXRlbXMgdmlhIHRoZSByZXN0cmljdGVkIHBv aW50ZXIuDQogIC8vIEFsc28gY2hlY2sgZm9yIGRlY2xhcmF0aW9ucyBpbiBmb3IgbG9vcHMuDQog IGZvciAodW5zaWduZWQgaW50IGkgPSAwOyAqKHRleHQraSkgIT0gJ1wwJzsgKytpKQ0KICAgIGNv bnRpbnVlOw0KICByZXR1cm4gMDsNCn0NCg0KLy8gQ2hlY2sgdmFyYXJncyBhbmQgdmFfY29weS4N CnN0YXRpYyB2b2lkDQp0ZXN0X3ZhcmFyZ3MgKGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uKQ0Kew0K ICB2YV9saXN0IGFyZ3M7DQogIHZhX3N0YXJ0IChhcmdzLCBmb3JtYXQpOw0KICB2YV9saXN0IGFy Z3NfY29weTsNCiAgdmFfY29weSAoYXJnc19jb3B5LCBhcmdzKTsNCg0KICBjb25zdCBjaGFyICpz dHI7DQogIGludCBudW1iZXI7DQogIGZsb2F0IGZudW1iZXI7DQoNCiAgd2hpbGUgKCpmb3JtYXQp DQogICAgew0KICAgICAgc3dpdGNoICgqZm9ybWF0KyspDQoJew0KCWNhc2UgJ3MnOiAvLyBzdHJp bmcNCgkgIHN0ciA9IHZhX2FyZyAoYXJnc19jb3B5LCBjb25zdCBjaGFyICopOw0KCSAgYnJlYWs7 DQoJY2FzZSAnZCc6IC8vIGludA0KCSAgbnVtYmVyID0gdmFfYXJnIChhcmdzX2NvcHksIGludCk7 DQoJICBicmVhazsNCgljYXNlICdmJzogLy8gZmxvYXQNCgkgIGZudW1iZXIgPSB2YV9hcmcgKGFy Z3NfY29weSwgZG91YmxlKTsNCgkgIGJyZWFrOw0KCWRlZmF1bHQ6DQoJICBicmVhazsNCgl9DQog ICAgfQ0KICB2YV9lbmQgKGFyZ3NfY29weSk7DQogIHZhX2VuZCAoYXJncyk7DQp9DQoNCmludA0K bWFpbiAoKQ0Kew0KDQogIC8vIENoZWNrIGJvb2wuDQogIF9Cb29sIHN1Y2Nlc3MgPSBmYWxzZTsN Cg0KICAvLyBDaGVjayByZXN0cmljdC4NCiAgaWYgKHRlc3RfcmVzdHJpY3QgKCJTdHJpbmcgbGl0 ZXJhbCIpID09IDApDQogICAgc3VjY2VzcyA9IHRydWU7DQogIGNoYXIgKnJlc3RyaWN0IG5ld3Zh ciA9ICJBbm90aGVyIHN0cmluZyI7DQoNCiAgLy8gQ2hlY2sgdmFyYXJncy4NCiAgdGVzdF92YXJh cmdzICgicywgZCcgZiAuIiwgInN0cmluZyIsIDY1LCAzNC4yMzQpOw0KICB0ZXN0X3ZhcmFyZ3Nf bWFjcm9zICgpOw0KDQogIC8vIENoZWNrIGZsZXhpYmxlIGFycmF5IG1lbWJlcnMuDQogIHN0cnVj dCBpbmNvbXBsZXRlX2FycmF5ICppYSA9DQogICAgbWFsbG9jIChzaXplb2YgKHN0cnVjdCBpbmNv bXBsZXRlX2FycmF5KSArIChzaXplb2YgKGRvdWJsZSkgKiAxMCkpOw0KICBpYS0+ZGF0YXNpemUg PSAxMDsNCiAgZm9yIChpbnQgaSA9IDA7IGkgPCBpYS0+ZGF0YXNpemU7ICsraSkNCiAgICBpYS0+ ZGF0YVtpXSA9IGkgKiAxLjIzNDsNCg0KICAvLyBDaGVjayBuYW1lZCBpbml0aWFsaXplcnMuDQog IHN0cnVjdCBuYW1lZF9pbml0IG5pID0gew0KICAgIC5udW1iZXIgPSAzNCwNCiAgICAubmFtZSA9 IEwiVGVzdCB3aWRlIHN0cmluZyIsDQogICAgLmF2ZXJhZ2UgPSA1NDMuMzQzNDMsDQogIH07DQoN CiAgbmkubnVtYmVyID0gNTg7DQoNCiAgaW50IGR5bmFtaWNfYXJyYXlbbmkubnVtYmVyXTsNCiAg ZHluYW1pY19hcnJheVtuaS5udW1iZXIgLSAxXSA9IDU0MzsNCg0KICAvLyB3b3JrIGFyb3VuZCB1 bnVzZWQgdmFyaWFibGUgd2FybmluZ3MNCiAgcmV0dXJuICghc3VjY2VzcyB8fCBiaWdudW0gPT0g MExMIHx8IHViaWdudW0gPT0gMHVMTCB8fCBuZXd2YXJbMF0gPT0gJ3gnDQoJICB8fCBkeW5hbWlj X2FycmF5W25pLm51bWJlciAtIDFdICE9IDU0Myk7DQoNCiAgOw0KICByZXR1cm4gMDsNCn0NCl9B Q0VPRg0KZm9yIGFjX2FyZyBpbiAnJyAtc3RkPWdudTk5IC1zdGQ9Yzk5IC1jOTkgLUFDOTkgLURf U1REQ19DOTk9IC1xbGFuZ2x2bD1leHRjOTkNCmRvDQogIENDPSIkYWNfc2F2ZV9DQyAkYWNfYXJn Ig0KICBpZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6DQogIGFjX2N2X3By b2dfY2NfYzk5PSRhY19hcmcNCmZpDQpybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4k YWNfb2JqZXh0DQogIHRlc3QgIngkYWNfY3ZfcHJvZ19jY19jOTkiICE9ICJ4bm8iICYmIGJyZWFr DQpkb25lDQpybSAtZiBjb25mdGVzdC4kYWNfZXh0DQpDQz0kYWNfc2F2ZV9DQw0KDQpmaQ0KIyBB Q19DQUNIRV9WQUwNCmNhc2UgIngkYWNfY3ZfcHJvZ19jY19jOTkiIGluDQogIHgpDQogICAgeyAk YXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vbmUgbmVlZGVk IiA+JjUNCiRhc19lY2hvICJub25lIG5lZWRlZCIgPiY2OyB9IDs7DQogIHhubykNCiAgICB7ICRh c19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogdW5zdXBwb3J0ZWQi ID4mNQ0KJGFzX2VjaG8gInVuc3VwcG9ydGVkIiA+JjY7IH0gOzsNCiAgKikNCiAgICBDQz0iJEND ICRhY19jdl9wcm9nX2NjX2M5OSINCiAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8t JExJTkVOT306IHJlc3VsdDogJGFjX2N2X3Byb2dfY2NfYzk5IiA+JjUNCiRhc19lY2hvICIkYWNf Y3ZfcHJvZ19jY19jOTkiID4mNjsgfSA7Ow0KZXNhYw0KaWYgdGVzdCAieCRhY19jdl9wcm9nX2Nj X2M5OSIgIT0geG5vOyB0aGVuIDoNCiAgYWNfY3ZfcHJvZ19jY19zdGRjPSRhY19jdl9wcm9nX2Nj X2M5OQ0KZWxzZQ0KICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNo ZWNraW5nIGZvciAkQ0Mgb3B0aW9uIHRvIGFjY2VwdCBJU08gQzg5IiA+JjUNCiRhc19lY2hvX24g ImNoZWNraW5nIGZvciAkQ0Mgb3B0aW9uIHRvIGFjY2VwdCBJU08gQzg5Li4uICIgPiY2OyB9DQpp ZiAke2FjX2N2X3Byb2dfY2NfYzg5Kzp9IGZhbHNlOyB0aGVuIDoNCiAgJGFzX2VjaG9fbiAiKGNh Y2hlZCkgIiA+JjYNCmVsc2UNCiAgYWNfY3ZfcHJvZ19jY19jODk9bm8NCmFjX3NhdmVfQ0M9JEND DQpjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0DQovKiBlbmQgY29u ZmRlZnMuaC4gICovDQojaW5jbHVkZSA8c3RkYXJnLmg+DQojaW5jbHVkZSA8c3RkaW8uaD4NCnN0 cnVjdCBzdGF0Ow0KLyogTW9zdCBvZiB0aGUgZm9sbG93aW5nIHRlc3RzIGFyZSBzdG9sZW4gZnJv bSBSQ1MgNS43J3Mgc3JjL2NvbmYuc2guICAqLw0Kc3RydWN0IGJ1ZiB7IGludCB4OyB9Ow0KRklM RSAqICgqcmNzb3BlbikgKHN0cnVjdCBidWYgKiwgc3RydWN0IHN0YXQgKiwgaW50KTsNCnN0YXRp YyBjaGFyICplIChwLCBpKQ0KICAgICBjaGFyICoqcDsNCiAgICAgaW50IGk7DQp7DQogIHJldHVy biBwW2ldOw0KfQ0Kc3RhdGljIGNoYXIgKmYgKGNoYXIgKiAoKmcpIChjaGFyICoqLCBpbnQpLCBj aGFyICoqcCwgLi4uKQ0Kew0KICBjaGFyICpzOw0KICB2YV9saXN0IHY7DQogIHZhX3N0YXJ0ICh2 LHApOw0KICBzID0gZyAocCwgdmFfYXJnICh2LGludCkpOw0KICB2YV9lbmQgKHYpOw0KICByZXR1 cm4gczsNCn0NCg0KLyogT1NGIDQuMCBDb21wYXEgY2MgaXMgc29tZSBzb3J0IG9mIGFsbW9zdC1B TlNJIGJ5IGRlZmF1bHQuICBJdCBoYXMNCiAgIGZ1bmN0aW9uIHByb3RvdHlwZXMgYW5kIHN0dWZm LCBidXQgbm90ICdceEhIJyBoZXggY2hhcmFjdGVyIGNvbnN0YW50cy4NCiAgIFRoZXNlIGRvbid0 IHByb3Zva2UgYW4gZXJyb3IgdW5mb3J0dW5hdGVseSwgaW5zdGVhZCBhcmUgc2lsZW50bHkgdHJl YXRlZA0KICAgYXMgJ3gnLiAgVGhlIGZvbGxvd2luZyBpbmR1Y2VzIGFuIGVycm9yLCB1bnRpbCAt c3RkIGlzIGFkZGVkIHRvIGdldA0KICAgcHJvcGVyIEFOU0kgbW9kZS4gIEN1cmlvdXNseSAnXHgw MCchPSd4JyBhbHdheXMgY29tZXMgb3V0IHRydWUsIGZvciBhbg0KICAgYXJyYXkgc2l6ZSBhdCBs ZWFzdC4gIEl0J3MgbmVjZXNzYXJ5IHRvIHdyaXRlICdceDAwJz09MCB0byBnZXQgc29tZXRoaW5n DQogICB0aGF0J3MgdHJ1ZSBvbmx5IHdpdGggLXN0ZC4gICovDQppbnQgb3NmNF9jY19hcnJheSBb J1x4MDAnID09IDAgPyAxIDogLTFdOw0KDQovKiBJQk0gQyA2IGZvciBBSVggaXMgYWxtb3N0LUFO U0kgYnkgZGVmYXVsdCwgYnV0IGl0IHJlcGxhY2VzIG1hY3JvIHBhcmFtZXRlcnMNCiAgIGluc2lk ZSBzdHJpbmdzIGFuZCBjaGFyYWN0ZXIgY29uc3RhbnRzLiAgKi8NCiNkZWZpbmUgRk9PKHgpICd4 Jw0KaW50IHhsYzZfY2NfYXJyYXlbRk9PKGEpID09ICd4JyA/IDEgOiAtMV07DQoNCmludCB0ZXN0 IChpbnQgaSwgZG91YmxlIHgpOw0Kc3RydWN0IHMxIHtpbnQgKCpmKSAoaW50IGEpO307DQpzdHJ1 Y3QgczIge2ludCAoKmYpIChkb3VibGUgYSk7fTsNCmludCBwYWlybmFtZXMgKGludCwgY2hhciAq KiwgRklMRSAqKCopKHN0cnVjdCBidWYgKiwgc3RydWN0IHN0YXQgKiwgaW50KSwgaW50LCBpbnQp Ow0KaW50IGFyZ2M7DQpjaGFyICoqYXJndjsNCmludA0KbWFpbiAoKQ0Kew0KcmV0dXJuIGYgKGUs IGFyZ3YsIDApICE9IGFyZ3ZbMF0gIHx8ICBmIChlLCBhcmd2LCAxKSAhPSBhcmd2WzFdOw0KICA7 DQogIHJldHVybiAwOw0KfQ0KX0FDRU9GDQpmb3IgYWNfYXJnIGluICcnIC1xbGFuZ2x2bD1leHRj ODkgLXFsYW5nbHZsPWFuc2kgLXN0ZCBcDQoJLUFlICItQWEgLURfSFBVWF9TT1VSQ0UiICItWGMg LURfX0VYVEVOU0lPTlNfXyINCmRvDQogIENDPSIkYWNfc2F2ZV9DQyAkYWNfYXJnIg0KICBpZiBh Y19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6DQogIGFjX2N2X3Byb2dfY2NfYzg5 PSRhY19hcmcNCmZpDQpybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0 DQogIHRlc3QgIngkYWNfY3ZfcHJvZ19jY19jODkiICE9ICJ4bm8iICYmIGJyZWFrDQpkb25lDQpy bSAtZiBjb25mdGVzdC4kYWNfZXh0DQpDQz0kYWNfc2F2ZV9DQw0KDQpmaQ0KIyBBQ19DQUNIRV9W QUwNCmNhc2UgIngkYWNfY3ZfcHJvZ19jY19jODkiIGluDQogIHgpDQogICAgeyAkYXNfZWNobyAi JGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vbmUgbmVlZGVkIiA+JjUNCiRh c19lY2hvICJub25lIG5lZWRlZCIgPiY2OyB9IDs7DQogIHhubykNCiAgICB7ICRhc19lY2hvICIk YXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogdW5zdXBwb3J0ZWQiID4mNQ0KJGFz X2VjaG8gInVuc3VwcG9ydGVkIiA+JjY7IH0gOzsNCiAgKikNCiAgICBDQz0iJENDICRhY19jdl9w cm9nX2NjX2M4OSINCiAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306 IHJlc3VsdDogJGFjX2N2X3Byb2dfY2NfYzg5IiA+JjUNCiRhc19lY2hvICIkYWNfY3ZfcHJvZ19j Y19jODkiID4mNjsgfSA7Ow0KZXNhYw0KaWYgdGVzdCAieCRhY19jdl9wcm9nX2NjX2M4OSIgIT0g eG5vOyB0aGVuIDoNCiAgYWNfY3ZfcHJvZ19jY19zdGRjPSRhY19jdl9wcm9nX2NjX2M4OQ0KZWxz ZQ0KICBhY19jdl9wcm9nX2NjX3N0ZGM9bm8NCmZpDQoNCmZpDQogOzsNCmVzYWMNCiAgeyAkYXNf ZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJENDIG9wdGlv biB0byBhY2NlcHQgSVNPIFN0YW5kYXJkIEMiID4mNQ0KJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9y ICRDQyBvcHRpb24gdG8gYWNjZXB0IElTTyBTdGFuZGFyZCBDLi4uICIgPiY2OyB9DQogIGlmICR7 YWNfY3ZfcHJvZ19jY19zdGRjKzp9IGZhbHNlOyB0aGVuIDoNCiAgJGFzX2VjaG9fbiAiKGNhY2hl ZCkgIiA+JjYNCmZpDQoNCiAgY2FzZSAkYWNfY3ZfcHJvZ19jY19zdGRjIGluICMoDQogIG5vKSA6 DQogICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHVu c3VwcG9ydGVkIiA+JjUNCiRhc19lY2hvICJ1bnN1cHBvcnRlZCIgPiY2OyB9IDs7ICMoDQogICcn KSA6DQogICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6 IG5vbmUgbmVlZGVkIiA+JjUNCiRhc19lY2hvICJub25lIG5lZWRlZCIgPiY2OyB9IDs7ICMoDQog ICopIDoNCiAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3Vs dDogJGFjX2N2X3Byb2dfY2Nfc3RkYyIgPiY1DQokYXNfZWNobyAiJGFjX2N2X3Byb2dfY2Nfc3Rk YyIgPiY2OyB9IDs7DQplc2FjDQoNCmlmIHRlc3QgIngkQ0MiICE9IHhjYzsgdGhlbg0KICB7ICRh c19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgJEND IGFuZCBjYyB1bmRlcnN0YW5kIC1jIGFuZCAtbyB0b2dldGhlciIgPiY1DQokYXNfZWNob19uICJj aGVja2luZyB3aGV0aGVyICRDQyBhbmQgY2MgdW5kZXJzdGFuZCAtYyBhbmQgLW8gdG9nZXRoZXIu Li4gIiA+JjY7IH0NCmVsc2UNCiAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5F Tk99OiBjaGVja2luZyB3aGV0aGVyIGNjIHVuZGVyc3RhbmRzIC1jIGFuZCAtbyB0b2dldGhlciIg PiY1DQokYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIGNjIHVuZGVyc3RhbmRzIC1jIGFuZCAt byB0b2dldGhlci4uLiAiID4mNjsgfQ0KZmkNCnNldCBkdW1teSAkQ0M7IGFjX2NjPWAkYXNfZWNo byAiJDIiIHwNCgkJICAgICAgc2VkICdzL1teYS16QS1aMC05X10vXy9nO3MvXlswLTldL18vJ2AN CmlmIGV2YWwgXCR7YWNfY3ZfcHJvZ19jY18ke2FjX2NjfV9jX28rOn0gZmFsc2U7IHRoZW4gOg0K ICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNg0KZWxzZQ0KICBjYXQgY29uZmRlZnMuaCAtIDw8 X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0DQovKiBlbmQgY29uZmRlZnMuaC4gICovDQoNCmludA0K bWFpbiAoKQ0Kew0KDQogIDsNCiAgcmV0dXJuIDA7DQp9DQpfQUNFT0YNCiMgTWFrZSBzdXJlIGl0 IHdvcmtzIGJvdGggd2l0aCAkQ0MgYW5kIHdpdGggc2ltcGxlIGNjLg0KIyBXZSBkbyB0aGUgdGVz dCB0d2ljZSBiZWNhdXNlIHNvbWUgY29tcGlsZXJzIHJlZnVzZSB0byBvdmVyd3JpdGUgYW4NCiMg ZXhpc3RpbmcgLm8gZmlsZSB3aXRoIC1vLCB0aG91Z2ggdGhleSB3aWxsIGNyZWF0ZSBvbmUuDQph Y190cnk9JyRDQyAtYyBjb25mdGVzdC4kYWNfZXh0IC1vIGNvbmZ0ZXN0Mi4kYWNfb2JqZXh0ID4m NScNCnJtIC1mIGNvbmZ0ZXN0Mi4qDQppZiB7IHsgY2FzZSAiKCgkYWNfdHJ5IiBpbg0KICAqXCIq IHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsNCiAgKikgYWNfdHJ5X2VjaG89 JGFjX3RyeTs7DQplc2FjDQpldmFsIGFjX3RyeV9lY2hvPSJcIlwkYXNfbWU6JHthc19saW5lbm8t JExJTkVOT306ICRhY190cnlfZWNob1wiIg0KJGFzX2VjaG8gIiRhY190cnlfZWNobyI7IH0gPiY1 DQogIChldmFsICIkYWNfdHJ5IikgMj4mNQ0KICBhY19zdGF0dXM9JD8NCiAgJGFzX2VjaG8gIiRh c19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1DQogIHRlc3Qg JGFjX3N0YXR1cyA9IDA7IH0gJiYNCiAgIHRlc3QgLWYgY29uZnRlc3QyLiRhY19vYmpleHQgJiYg eyB7IGNhc2UgIigoJGFjX3RyeSIgaW4NCiAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNo bz1cJGFjX3RyeTs7DQogICopIGFjX3RyeV9lY2hvPSRhY190cnk7Ow0KZXNhYw0KZXZhbCBhY190 cnlfZWNobz0iXCJcJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiAkYWNfdHJ5X2VjaG9cIiIN CiRhc19lY2hvICIkYWNfdHJ5X2VjaG8iOyB9ID4mNQ0KICAoZXZhbCAiJGFjX3RyeSIpIDI+JjUN CiAgYWNfc3RhdHVzPSQ/DQogICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306 IFwkPyA9ICRhY19zdGF0dXMiID4mNQ0KICB0ZXN0ICRhY19zdGF0dXMgPSAwOyB9Ow0KdGhlbg0K ICBldmFsIGFjX2N2X3Byb2dfY2NfJHthY19jY31fY19vPXllcw0KICBpZiB0ZXN0ICJ4JENDIiAh PSB4Y2M7IHRoZW4NCiAgICAjIFRlc3QgZmlyc3QgdGhhdCBjYyBleGlzdHMgYXQgYWxsLg0KICAg IGlmIHsgYWNfdHJ5PSdjYyAtYyBjb25mdGVzdC4kYWNfZXh0ID4mNScNCiAgeyB7IGNhc2UgIigo JGFjX3RyeSIgaW4NCiAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7 DQogICopIGFjX3RyeV9lY2hvPSRhY190cnk7Ow0KZXNhYw0KZXZhbCBhY190cnlfZWNobz0iXCJc JGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiAkYWNfdHJ5X2VjaG9cIiINCiRhc19lY2hvICIk YWNfdHJ5X2VjaG8iOyB9ID4mNQ0KICAoZXZhbCAiJGFjX3RyeSIpIDI+JjUNCiAgYWNfc3RhdHVz PSQ/DQogICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkPyA9ICRhY19z dGF0dXMiID4mNQ0KICB0ZXN0ICRhY19zdGF0dXMgPSAwOyB9OyB9OyB0aGVuDQogICAgICBhY190 cnk9J2NjIC1jIGNvbmZ0ZXN0LiRhY19leHQgLW8gY29uZnRlc3QyLiRhY19vYmpleHQgPiY1Jw0K ICAgICAgcm0gLWYgY29uZnRlc3QyLioNCiAgICAgIGlmIHsgeyBjYXNlICIoKCRhY190cnkiIGlu DQogICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7Ow0KICAqKSBhY190 cnlfZWNobz0kYWNfdHJ5OzsNCmVzYWMNCmV2YWwgYWNfdHJ5X2VjaG89IlwiXCRhc19tZToke2Fz X2xpbmVuby0kTElORU5PfTogJGFjX3RyeV9lY2hvXCIiDQokYXNfZWNobyAiJGFjX3RyeV9lY2hv IjsgfSA+JjUNCiAgKGV2YWwgIiRhY190cnkiKSAyPiY1DQogIGFjX3N0YXR1cz0kPw0KICAkYXNf ZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUN CiAgdGVzdCAkYWNfc3RhdHVzID0gMDsgfSAmJg0KCSB0ZXN0IC1mIGNvbmZ0ZXN0Mi4kYWNfb2Jq ZXh0ICYmIHsgeyBjYXNlICIoKCRhY190cnkiIGluDQogICpcIiogfCAqXGAqIHwgKlxcKikgYWNf dHJ5X2VjaG89XCRhY190cnk7Ow0KICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsNCmVzYWMNCmV2 YWwgYWNfdHJ5X2VjaG89IlwiXCRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogJGFjX3RyeV9l Y2hvXCIiDQokYXNfZWNobyAiJGFjX3RyeV9lY2hvIjsgfSA+JjUNCiAgKGV2YWwgIiRhY190cnki KSAyPiY1DQogIGFjX3N0YXR1cz0kPw0KICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRM SU5FTk99OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUNCiAgdGVzdCAkYWNfc3RhdHVzID0gMDsgfTsN CiAgICAgIHRoZW4NCgkjIGNjIHdvcmtzIHRvby4NCgk6DQogICAgICBlbHNlDQoJIyBjYyBleGlz dHMgYnV0IGRvZXNuJ3QgbGlrZSAtby4NCglldmFsIGFjX2N2X3Byb2dfY2NfJHthY19jY31fY19v PW5vDQogICAgICBmaQ0KICAgIGZpDQogIGZpDQplbHNlDQogIGV2YWwgYWNfY3ZfcHJvZ19jY18k e2FjX2NjfV9jX289bm8NCmZpDQpybSAtZiBjb3JlIGNvbmZ0ZXN0Kg0KDQpmaQ0KaWYgZXZhbCB0 ZXN0IFwkYWNfY3ZfcHJvZ19jY18ke2FjX2NjfV9jX28gPSB5ZXM7IHRoZW4NCiAgeyAkYXNfZWNo byAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1DQokYXNfZWNo byAieWVzIiA+JjY7IH0NCmVsc2UNCiAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRM SU5FTk99OiByZXN1bHQ6IG5vIiA+JjUNCiRhc19lY2hvICJubyIgPiY2OyB9DQoNCiRhc19lY2hv ICIjZGVmaW5lIE5PX01JTlVTX0NfTUlOVVNfTyAxIiA+PmNvbmZkZWZzLmgNCg0KZmkNCg0KIyBG SVhNRTogd2UgcmVseSBvbiB0aGUgY2FjaGUgdmFyaWFibGUgbmFtZSBiZWNhdXNlDQojIHRoZXJl IGlzIG5vIG90aGVyIHdheS4NCnNldCBkdW1teSAkQ0MNCmFtX2NjPWBlY2hvICQyIHwgc2VkICdz L1teYS16QS1aMC05X10vXy9nO3MvXlswLTldL18vJ2ANCmV2YWwgYW1fdD1cJGFjX2N2X3Byb2df Y2NfJHthbV9jY31fY19vDQppZiB0ZXN0ICIkYW1fdCIgIT0geWVzOyB0aGVuDQogICAjIExvc2lu ZyBjb21waWxlciwgc28gb3ZlcnJpZGUgd2l0aCB0aGUgc2NyaXB0Lg0KICAgIyBGSVhNRTogSXQg aXMgd3JvbmcgdG8gcmV3cml0ZSBDQy4NCiAgICMgQnV0IGlmIHdlIGRvbid0IHRoZW4gd2UgZ2V0 IGludG8gdHJvdWJsZSBvZiBvbmUgc29ydCBvciBhbm90aGVyLg0KICAgIyBBIGxvbmdlci10ZXJt IGZpeCB3b3VsZCBiZSB0byBoYXZlIGF1dG9tYWtlIHVzZSBhbV9fQ0MgaW4gdGhpcyBjYXNlLA0K ICAgIyBhbmQgdGhlbiB3ZSBjb3VsZCBzZXQgYW1fX0NDPSJcJCh0b3Bfc3JjZGlyKS9jb21waWxl IFwkKENDKSINCiAgIENDPSIkYW1fYXV4X2Rpci9jb21waWxlICRDQyINCmZpDQoNCg0KYWNfZXh0 PWMNCmFjX2NwcD0nJENQUCAkQ1BQRkxBR1MnDQphY19jb21waWxlPSckQ0MgLWMgJENGTEFHUyAk Q1BQRkxBR1MgY29uZnRlc3QuJGFjX2V4dCA+JjUnDQphY19saW5rPSckQ0MgLW8gY29uZnRlc3Qk YWNfZXhlZXh0ICRDRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgJExJ QlMgPiY1Jw0KYWNfY29tcGlsZXJfZ251PSRhY19jdl9jX2NvbXBpbGVyX2dudQ0KeyAkYXNfZWNo byAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBob3cgdG8gcnVuIHRoZSBD IHByZXByb2Nlc3NvciIgPiY1DQokYXNfZWNob19uICJjaGVja2luZyBob3cgdG8gcnVuIHRoZSBD IHByZXByb2Nlc3Nvci4uLiAiID4mNjsgfQ0KIyBPbiBTdW5zLCBzb21ldGltZXMgJENQUCBuYW1l cyBhIGRpcmVjdG9yeS4NCmlmIHRlc3QgLW4gIiRDUFAiICYmIHRlc3QgLWQgIiRDUFAiOyB0aGVu DQogIENQUD0NCmZpDQppZiB0ZXN0IC16ICIkQ1BQIjsgdGhlbg0KICBpZiAke2FjX2N2X3Byb2df Q1BQKzp9IGZhbHNlOyB0aGVuIDoNCiAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYNCmVsc2UN CiAgICAgICMgRG91YmxlIHF1b3RlcyBiZWNhdXNlIENQUCBuZWVkcyB0byBiZSBleHBhbmRlZA0K ICAgIGZvciBDUFAgaW4gIiRDQyAtRSIgIiRDQyAtRSAtdHJhZGl0aW9uYWwtY3BwIiAiL2xpYi9j cHAiDQogICAgZG8NCiAgICAgIGFjX3ByZXByb2Nfb2s9ZmFsc2UNCmZvciBhY19jX3ByZXByb2Nf d2Fybl9mbGFnIGluICcnIHllcw0KZG8NCiAgIyBVc2UgYSBoZWFkZXIgZmlsZSB0aGF0IGNvbWVz IHdpdGggZ2NjLCBzbyBjb25maWd1cmluZyBnbGliYw0KICAjIHdpdGggYSBmcmVzaCBjcm9zcy1j b21waWxlciB3b3Jrcy4NCiAgIyBQcmVmZXIgPGxpbWl0cy5oPiB0byA8YXNzZXJ0Lmg+IGlmIF9f U1REQ19fIGlzIGRlZmluZWQsIHNpbmNlDQogICMgPGxpbWl0cy5oPiBleGlzdHMgZXZlbiBvbiBm cmVlc3RhbmRpbmcgY29tcGlsZXJzLg0KICAjIE9uIHRoZSBOZVhULCBjYyAtRSBydW5zIHRoZSBj b2RlIHRocm91Z2ggdGhlIGNvbXBpbGVyJ3MgcGFyc2VyLA0KICAjIG5vdCBqdXN0IHRocm91Z2gg Y3BwLiAiU3ludGF4IGVycm9yIiBpcyBoZXJlIHRvIGNhdGNoIHRoaXMgY2FzZS4NCiAgY2F0IGNv bmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dA0KLyogZW5kIGNvbmZkZWZzLmgu ICAqLw0KI2lmZGVmIF9fU1REQ19fDQojIGluY2x1ZGUgPGxpbWl0cy5oPg0KI2Vsc2UNCiMgaW5j bHVkZSA8YXNzZXJ0Lmg+DQojZW5kaWYNCgkJICAgICBTeW50YXggZXJyb3INCl9BQ0VPRg0KaWYg YWNfZm5fY190cnlfY3BwICIkTElORU5PIjsgdGhlbiA6DQoNCmVsc2UNCiAgIyBCcm9rZW46IGZh aWxzIG9uIHZhbGlkIGlucHV0Lg0KY29udGludWUNCmZpDQpybSAtZiBjb25mdGVzdC5lcnIgY29u ZnRlc3QuaSBjb25mdGVzdC4kYWNfZXh0DQoNCiAgIyBPSywgd29ya3Mgb24gc2FuZSBjYXNlcy4g IE5vdyBjaGVjayB3aGV0aGVyIG5vbmV4aXN0ZW50IGhlYWRlcnMNCiAgIyBjYW4gYmUgZGV0ZWN0 ZWQgYW5kIGhvdy4NCiAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4 dA0KLyogZW5kIGNvbmZkZWZzLmguICAqLw0KI2luY2x1ZGUgPGFjX25vbmV4aXN0ZW50Lmg+DQpf QUNFT0YNCmlmIGFjX2ZuX2NfdHJ5X2NwcCAiJExJTkVOTyI7IHRoZW4gOg0KICAjIEJyb2tlbjog c3VjY2VzcyBvbiBpbnZhbGlkIGlucHV0Lg0KY29udGludWUNCmVsc2UNCiAgIyBQYXNzZXMgYm90 aCB0ZXN0cy4NCmFjX3ByZXByb2Nfb2s9Og0KYnJlYWsNCmZpDQpybSAtZiBjb25mdGVzdC5lcnIg Y29uZnRlc3QuaSBjb25mdGVzdC4kYWNfZXh0DQoNCmRvbmUNCiMgQmVjYXVzZSBvZiBgYnJlYWsn LCBfQUNfUFJFUFJPQ19JRkVMU0UncyBjbGVhbmluZyBjb2RlIHdhcyBza2lwcGVkLg0Kcm0gLWYg Y29uZnRlc3QuaSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX2V4dA0KaWYgJGFjX3ByZXByb2Nf b2s7IHRoZW4gOg0KICBicmVhaw0KZmkNCg0KICAgIGRvbmUNCiAgICBhY19jdl9wcm9nX0NQUD0k Q1BQDQoNCmZpDQogIENQUD0kYWNfY3ZfcHJvZ19DUFANCmVsc2UNCiAgYWNfY3ZfcHJvZ19DUFA9 JENQUA0KZmkNCnsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0 OiAkQ1BQIiA+JjUNCiRhc19lY2hvICIkQ1BQIiA+JjY7IH0NCmFjX3ByZXByb2Nfb2s9ZmFsc2UN CmZvciBhY19jX3ByZXByb2Nfd2Fybl9mbGFnIGluICcnIHllcw0KZG8NCiAgIyBVc2UgYSBoZWFk ZXIgZmlsZSB0aGF0IGNvbWVzIHdpdGggZ2NjLCBzbyBjb25maWd1cmluZyBnbGliYw0KICAjIHdp dGggYSBmcmVzaCBjcm9zcy1jb21waWxlciB3b3Jrcy4NCiAgIyBQcmVmZXIgPGxpbWl0cy5oPiB0 byA8YXNzZXJ0Lmg+IGlmIF9fU1REQ19fIGlzIGRlZmluZWQsIHNpbmNlDQogICMgPGxpbWl0cy5o PiBleGlzdHMgZXZlbiBvbiBmcmVlc3RhbmRpbmcgY29tcGlsZXJzLg0KICAjIE9uIHRoZSBOZVhU LCBjYyAtRSBydW5zIHRoZSBjb2RlIHRocm91Z2ggdGhlIGNvbXBpbGVyJ3MgcGFyc2VyLA0KICAj IG5vdCBqdXN0IHRocm91Z2ggY3BwLiAiU3ludGF4IGVycm9yIiBpcyBoZXJlIHRvIGNhdGNoIHRo aXMgY2FzZS4NCiAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dA0K LyogZW5kIGNvbmZkZWZzLmguICAqLw0KI2lmZGVmIF9fU1REQ19fDQojIGluY2x1ZGUgPGxpbWl0 cy5oPg0KI2Vsc2UNCiMgaW5jbHVkZSA8YXNzZXJ0Lmg+DQojZW5kaWYNCgkJICAgICBTeW50YXgg ZXJyb3INCl9BQ0VPRg0KaWYgYWNfZm5fY190cnlfY3BwICIkTElORU5PIjsgdGhlbiA6DQoNCmVs c2UNCiAgIyBCcm9rZW46IGZhaWxzIG9uIHZhbGlkIGlucHV0Lg0KY29udGludWUNCmZpDQpybSAt ZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuaSBjb25mdGVzdC4kYWNfZXh0DQoNCiAgIyBPSywgd29y a3Mgb24gc2FuZSBjYXNlcy4gIE5vdyBjaGVjayB3aGV0aGVyIG5vbmV4aXN0ZW50IGhlYWRlcnMN CiAgIyBjYW4gYmUgZGV0ZWN0ZWQgYW5kIGhvdy4NCiAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VP RiA+Y29uZnRlc3QuJGFjX2V4dA0KLyogZW5kIGNvbmZkZWZzLmguICAqLw0KI2luY2x1ZGUgPGFj X25vbmV4aXN0ZW50Lmg+DQpfQUNFT0YNCmlmIGFjX2ZuX2NfdHJ5X2NwcCAiJExJTkVOTyI7IHRo ZW4gOg0KICAjIEJyb2tlbjogc3VjY2VzcyBvbiBpbnZhbGlkIGlucHV0Lg0KY29udGludWUNCmVs c2UNCiAgIyBQYXNzZXMgYm90aCB0ZXN0cy4NCmFjX3ByZXByb2Nfb2s9Og0KYnJlYWsNCmZpDQpy bSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuaSBjb25mdGVzdC4kYWNfZXh0DQoNCmRvbmUNCiMg QmVjYXVzZSBvZiBgYnJlYWsnLCBfQUNfUFJFUFJPQ19JRkVMU0UncyBjbGVhbmluZyBjb2RlIHdh cyBza2lwcGVkLg0Kcm0gLWYgY29uZnRlc3QuaSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX2V4 dA0KaWYgJGFjX3ByZXByb2Nfb2s7IHRoZW4gOg0KDQplbHNlDQogIHsgeyAkYXNfZWNobyAiJGFz X21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBlcnJvcjogaW4gXGAkYWNfcHdkJzoiID4mNQ0KJGFz X2VjaG8gIiRhc19tZTogZXJyb3I6IGluIFxgJGFjX3B3ZCc6IiA+JjI7fQ0KYXNfZm5fZXJyb3Ig JD8gIkMgcHJlcHJvY2Vzc29yIFwiJENQUFwiIGZhaWxzIHNhbml0eSBjaGVjaw0KU2VlIFxgY29u ZmlnLmxvZycgZm9yIG1vcmUgZGV0YWlscyIgIiRMSU5FTk8iIDU7IH0NCmZpDQoNCmFjX2V4dD1j DQphY19jcHA9JyRDUFAgJENQUEZMQUdTJw0KYWNfY29tcGlsZT0nJENDIC1jICRDRkxBR1MgJENQ UEZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgPiY1Jw0KYWNfbGluaz0nJENDIC1vIGNvbmZ0ZXN0JGFj X2V4ZWV4dCAkQ0ZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyBjb25mdGVzdC4kYWNfZXh0ICRMSUJT ID4mNScNCmFjX2NvbXBpbGVyX2dudT0kYWNfY3ZfY19jb21waWxlcl9nbnUNCg0KDQoNCnsgJGFz X2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIGdyZXAgdGhh dCBoYW5kbGVzIGxvbmcgbGluZXMgYW5kIC1lIiA+JjUNCiRhc19lY2hvX24gImNoZWNraW5nIGZv ciBncmVwIHRoYXQgaGFuZGxlcyBsb25nIGxpbmVzIGFuZCAtZS4uLiAiID4mNjsgfQ0KaWYgJHth Y19jdl9wYXRoX0dSRVArOn0gZmFsc2U7IHRoZW4gOg0KICAkYXNfZWNob19uICIoY2FjaGVkKSAi ID4mNg0KZWxzZQ0KICBpZiB0ZXN0IC16ICIkR1JFUCI7IHRoZW4NCiAgYWNfcGF0aF9HUkVQX2Zv dW5kPWZhbHNlDQogICMgTG9vcCB0aHJvdWdoIHRoZSB1c2VyJ3MgcGF0aCBhbmQgdGVzdCBmb3Ig ZWFjaCBvZiBQUk9HTkFNRS1MSVNUDQogIGFzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBB UkFUT1INCmZvciBhc19kaXIgaW4gJFBBVEgkUEFUSF9TRVBBUkFUT1IvdXNyL3hwZzQvYmluDQpk bw0KICBJRlM9JGFzX3NhdmVfSUZTDQogIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uDQog ICAgZm9yIGFjX3Byb2cgaW4gZ3JlcCBnZ3JlcDsgZG8NCiAgICBmb3IgYWNfZXhlY19leHQgaW4g JycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8NCiAgICAgIGFjX3BhdGhfR1JFUD0iJGFz X2Rpci8kYWNfcHJvZyRhY19leGVjX2V4dCINCiAgICAgIHsgdGVzdCAtZiAiJGFjX3BhdGhfR1JF UCIgJiYgJGFzX3Rlc3RfeCAiJGFjX3BhdGhfR1JFUCI7IH0gfHwgY29udGludWUNCiMgQ2hlY2sg Zm9yIEdOVSBhY19wYXRoX0dSRVAgYW5kIHNlbGVjdCBpdCBpZiBpdCBpcyBmb3VuZC4NCiAgIyBD aGVjayBmb3IgR05VICRhY19wYXRoX0dSRVANCmNhc2UgYCIkYWNfcGF0aF9HUkVQIiAtLXZlcnNp b24gMj4mMWAgaW4NCipHTlUqKQ0KICBhY19jdl9wYXRoX0dSRVA9IiRhY19wYXRoX0dSRVAiIGFj X3BhdGhfR1JFUF9mb3VuZD06OzsNCiopDQogIGFjX2NvdW50PTANCiAgJGFzX2VjaG9fbiAwMTIz NDU2Nzg5ID4iY29uZnRlc3QuaW4iDQogIHdoaWxlIDoNCiAgZG8NCiAgICBjYXQgImNvbmZ0ZXN0 LmluIiAiY29uZnRlc3QuaW4iID4iY29uZnRlc3QudG1wIg0KICAgIG12ICJjb25mdGVzdC50bXAi ICJjb25mdGVzdC5pbiINCiAgICBjcCAiY29uZnRlc3QuaW4iICJjb25mdGVzdC5ubCINCiAgICAk YXNfZWNobyAnR1JFUCcgPj4gImNvbmZ0ZXN0Lm5sIg0KICAgICIkYWNfcGF0aF9HUkVQIiAtZSAn R1JFUCQnIC1lICctKGNhbm5vdCBtYXRjaCktJyA8ICJjb25mdGVzdC5ubCIgPiJjb25mdGVzdC5v dXQiIDI+L2Rldi9udWxsIHx8IGJyZWFrDQogICAgZGlmZiAiY29uZnRlc3Qub3V0IiAiY29uZnRl c3QubmwiID4vZGV2L251bGwgMj4mMSB8fCBicmVhaw0KICAgIGFzX2ZuX2FyaXRoICRhY19jb3Vu dCArIDEgJiYgYWNfY291bnQ9JGFzX3ZhbA0KICAgIGlmIHRlc3QgJGFjX2NvdW50IC1ndCAke2Fj X3BhdGhfR1JFUF9tYXgtMH07IHRoZW4NCiAgICAgICMgQmVzdCBvbmUgc28gZmFyLCBzYXZlIGl0 IGJ1dCBrZWVwIGxvb2tpbmcgZm9yIGEgYmV0dGVyIG9uZQ0KICAgICAgYWNfY3ZfcGF0aF9HUkVQ PSIkYWNfcGF0aF9HUkVQIg0KICAgICAgYWNfcGF0aF9HUkVQX21heD0kYWNfY291bnQNCiAgICBm aQ0KICAgICMgMTAqKDJeMTApIGNoYXJzIGFzIGlucHV0IHNlZW1zIG1vcmUgdGhhbiBlbm91Z2gN CiAgICB0ZXN0ICRhY19jb3VudCAtZ3QgMTAgJiYgYnJlYWsNCiAgZG9uZQ0KICBybSAtZiBjb25m dGVzdC5pbiBjb25mdGVzdC50bXAgY29uZnRlc3QubmwgY29uZnRlc3Qub3V0OzsNCmVzYWMNCg0K ICAgICAgJGFjX3BhdGhfR1JFUF9mb3VuZCAmJiBicmVhayAzDQogICAgZG9uZQ0KICBkb25lDQog IGRvbmUNCklGUz0kYXNfc2F2ZV9JRlMNCiAgaWYgdGVzdCAteiAiJGFjX2N2X3BhdGhfR1JFUCI7 IHRoZW4NCiAgICBhc19mbl9lcnJvciAkPyAibm8gYWNjZXB0YWJsZSBncmVwIGNvdWxkIGJlIGZv dW5kIGluICRQQVRIJFBBVEhfU0VQQVJBVE9SL3Vzci94cGc0L2JpbiIgIiRMSU5FTk8iIDUNCiAg ZmkNCmVsc2UNCiAgYWNfY3ZfcGF0aF9HUkVQPSRHUkVQDQpmaQ0KDQpmaQ0KeyAkYXNfZWNobyAi JGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9wYXRoX0dSRVAiID4m NQ0KJGFzX2VjaG8gIiRhY19jdl9wYXRoX0dSRVAiID4mNjsgfQ0KIEdSRVA9IiRhY19jdl9wYXRo X0dSRVAiDQoNCg0KeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVj a2luZyBmb3IgZWdyZXAiID4mNQ0KJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIGVncmVwLi4uICIg PiY2OyB9DQppZiAke2FjX2N2X3BhdGhfRUdSRVArOn0gZmFsc2U7IHRoZW4gOg0KICAkYXNfZWNo b19uICIoY2FjaGVkKSAiID4mNg0KZWxzZQ0KICBpZiBlY2hvIGEgfCAkR1JFUCAtRSAnKGF8Yikn ID4vZGV2L251bGwgMj4mMQ0KICAgdGhlbiBhY19jdl9wYXRoX0VHUkVQPSIkR1JFUCAtRSINCiAg IGVsc2UNCiAgICAgaWYgdGVzdCAteiAiJEVHUkVQIjsgdGhlbg0KICBhY19wYXRoX0VHUkVQX2Zv dW5kPWZhbHNlDQogICMgTG9vcCB0aHJvdWdoIHRoZSB1c2VyJ3MgcGF0aCBhbmQgdGVzdCBmb3Ig ZWFjaCBvZiBQUk9HTkFNRS1MSVNUDQogIGFzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBB UkFUT1INCmZvciBhc19kaXIgaW4gJFBBVEgkUEFUSF9TRVBBUkFUT1IvdXNyL3hwZzQvYmluDQpk bw0KICBJRlM9JGFzX3NhdmVfSUZTDQogIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uDQog ICAgZm9yIGFjX3Byb2cgaW4gZWdyZXA7IGRvDQogICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRh Y19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvDQogICAgICBhY19wYXRoX0VHUkVQPSIkYXNfZGly LyRhY19wcm9nJGFjX2V4ZWNfZXh0Ig0KICAgICAgeyB0ZXN0IC1mICIkYWNfcGF0aF9FR1JFUCIg JiYgJGFzX3Rlc3RfeCAiJGFjX3BhdGhfRUdSRVAiOyB9IHx8IGNvbnRpbnVlDQojIENoZWNrIGZv ciBHTlUgYWNfcGF0aF9FR1JFUCBhbmQgc2VsZWN0IGl0IGlmIGl0IGlzIGZvdW5kLg0KICAjIENo ZWNrIGZvciBHTlUgJGFjX3BhdGhfRUdSRVANCmNhc2UgYCIkYWNfcGF0aF9FR1JFUCIgLS12ZXJz aW9uIDI+JjFgIGluDQoqR05VKikNCiAgYWNfY3ZfcGF0aF9FR1JFUD0iJGFjX3BhdGhfRUdSRVAi IGFjX3BhdGhfRUdSRVBfZm91bmQ9Ojs7DQoqKQ0KICBhY19jb3VudD0wDQogICRhc19lY2hvX24g MDEyMzQ1Njc4OSA+ImNvbmZ0ZXN0LmluIg0KICB3aGlsZSA6DQogIGRvDQogICAgY2F0ICJjb25m dGVzdC5pbiIgImNvbmZ0ZXN0LmluIiA+ImNvbmZ0ZXN0LnRtcCINCiAgICBtdiAiY29uZnRlc3Qu dG1wIiAiY29uZnRlc3QuaW4iDQogICAgY3AgImNvbmZ0ZXN0LmluIiAiY29uZnRlc3QubmwiDQog ICAgJGFzX2VjaG8gJ0VHUkVQJyA+PiAiY29uZnRlc3QubmwiDQogICAgIiRhY19wYXRoX0VHUkVQ IiAnRUdSRVAkJyA8ICJjb25mdGVzdC5ubCIgPiJjb25mdGVzdC5vdXQiIDI+L2Rldi9udWxsIHx8 IGJyZWFrDQogICAgZGlmZiAiY29uZnRlc3Qub3V0IiAiY29uZnRlc3QubmwiID4vZGV2L251bGwg Mj4mMSB8fCBicmVhaw0KICAgIGFzX2ZuX2FyaXRoICRhY19jb3VudCArIDEgJiYgYWNfY291bnQ9 JGFzX3ZhbA0KICAgIGlmIHRlc3QgJGFjX2NvdW50IC1ndCAke2FjX3BhdGhfRUdSRVBfbWF4LTB9 OyB0aGVuDQogICAgICAjIEJlc3Qgb25lIHNvIGZhciwgc2F2ZSBpdCBidXQga2VlcCBsb29raW5n IGZvciBhIGJldHRlciBvbmUNCiAgICAgIGFjX2N2X3BhdGhfRUdSRVA9IiRhY19wYXRoX0VHUkVQ Ig0KICAgICAgYWNfcGF0aF9FR1JFUF9tYXg9JGFjX2NvdW50DQogICAgZmkNCiAgICAjIDEwKigy XjEwKSBjaGFycyBhcyBpbnB1dCBzZWVtcyBtb3JlIHRoYW4gZW5vdWdoDQogICAgdGVzdCAkYWNf Y291bnQgLWd0IDEwICYmIGJyZWFrDQogIGRvbmUNCiAgcm0gLWYgY29uZnRlc3QuaW4gY29uZnRl c3QudG1wIGNvbmZ0ZXN0Lm5sIGNvbmZ0ZXN0Lm91dDs7DQplc2FjDQoNCiAgICAgICRhY19wYXRo X0VHUkVQX2ZvdW5kICYmIGJyZWFrIDMNCiAgICBkb25lDQogIGRvbmUNCiAgZG9uZQ0KSUZTPSRh c19zYXZlX0lGUw0KICBpZiB0ZXN0IC16ICIkYWNfY3ZfcGF0aF9FR1JFUCI7IHRoZW4NCiAgICBh c19mbl9lcnJvciAkPyAibm8gYWNjZXB0YWJsZSBlZ3JlcCBjb3VsZCBiZSBmb3VuZCBpbiAkUEFU SCRQQVRIX1NFUEFSQVRPUi91c3IveHBnNC9iaW4iICIkTElORU5PIiA1DQogIGZpDQplbHNlDQog IGFjX2N2X3BhdGhfRUdSRVA9JEVHUkVQDQpmaQ0KDQogICBmaQ0KZmkNCnsgJGFzX2VjaG8gIiRh c19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfcGF0aF9FR1JFUCIgPiY1 DQokYXNfZWNobyAiJGFjX2N2X3BhdGhfRUdSRVAiID4mNjsgfQ0KIEVHUkVQPSIkYWNfY3ZfcGF0 aF9FR1JFUCINCg0KDQppZiB0ZXN0ICRhY19jdl9jX2NvbXBpbGVyX2dudSA9IHllczsgdGhlbg0K ICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hl dGhlciAkQ0MgbmVlZHMgLXRyYWRpdGlvbmFsIiA+JjUNCiRhc19lY2hvX24gImNoZWNraW5nIHdo ZXRoZXIgJENDIG5lZWRzIC10cmFkaXRpb25hbC4uLiAiID4mNjsgfQ0KaWYgJHthY19jdl9wcm9n X2djY190cmFkaXRpb25hbCs6fSBmYWxzZTsgdGhlbiA6DQogICRhc19lY2hvX24gIihjYWNoZWQp ICIgPiY2DQplbHNlDQogICAgYWNfcGF0dGVybj0iQXV0b2NvbmYuKid4JyINCiAgY2F0IGNvbmZk ZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dA0KLyogZW5kIGNvbmZkZWZzLmguICAq Lw0KI2luY2x1ZGUgPHNndHR5Lmg+DQpBdXRvY29uZiBUSU9DR0VUUA0KX0FDRU9GDQppZiAoZXZh bCAiJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0IikgMj4mNSB8DQogICRFR1JFUCAiJGFjX3BhdHRl cm4iID4vZGV2L251bGwgMj4mMTsgdGhlbiA6DQogIGFjX2N2X3Byb2dfZ2NjX3RyYWRpdGlvbmFs PXllcw0KZWxzZQ0KICBhY19jdl9wcm9nX2djY190cmFkaXRpb25hbD1ubw0KZmkNCnJtIC1mIGNv bmZ0ZXN0Kg0KDQoNCiAgaWYgdGVzdCAkYWNfY3ZfcHJvZ19nY2NfdHJhZGl0aW9uYWwgPSBubzsg dGhlbg0KICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQNCi8q IGVuZCBjb25mZGVmcy5oLiAgKi8NCiNpbmNsdWRlIDx0ZXJtaW8uaD4NCkF1dG9jb25mIFRDR0VU QQ0KX0FDRU9GDQppZiAoZXZhbCAiJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0IikgMj4mNSB8DQog ICRFR1JFUCAiJGFjX3BhdHRlcm4iID4vZGV2L251bGwgMj4mMTsgdGhlbiA6DQogIGFjX2N2X3By b2dfZ2NjX3RyYWRpdGlvbmFsPXllcw0KZmkNCnJtIC1mIGNvbmZ0ZXN0Kg0KDQogIGZpDQpmaQ0K eyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9w cm9nX2djY190cmFkaXRpb25hbCIgPiY1DQokYXNfZWNobyAiJGFjX2N2X3Byb2dfZ2NjX3RyYWRp dGlvbmFsIiA+JjY7IH0NCiAgaWYgdGVzdCAkYWNfY3ZfcHJvZ19nY2NfdHJhZGl0aW9uYWwgPSB5 ZXM7IHRoZW4NCiAgICBDQz0iJENDIC10cmFkaXRpb25hbCINCiAgZmkNCmZpDQoNCmlmIHRlc3Qg LW4gIiRhY190b29sX3ByZWZpeCI7IHRoZW4NCiAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9m ICIke2FjX3Rvb2xfcHJlZml4fXJhbmxpYiIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3 aXRoIGFyZ3MuDQpzZXQgZHVtbXkgJHthY190b29sX3ByZWZpeH1yYW5saWI7IGFjX3dvcmQ9JDIN CnsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRh Y193b3JkIiA+JjUNCiRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsg fQ0KaWYgJHthY19jdl9wcm9nX1JBTkxJQis6fSBmYWxzZTsgdGhlbiA6DQogICRhc19lY2hvX24g IihjYWNoZWQpICIgPiY2DQplbHNlDQogIGlmIHRlc3QgLW4gIiRSQU5MSUIiOyB0aGVuDQogIGFj X2N2X3Byb2dfUkFOTElCPSIkUkFOTElCIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVz dC4NCmVsc2UNCmFzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1INCmZvciBhc19k aXIgaW4gJFBBVEgNCmRvDQogIElGUz0kYXNfc2F2ZV9JRlMNCiAgdGVzdCAteiAiJGFzX2RpciIg JiYgYXNfZGlyPS4NCiAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0 ZW5zaW9uczsgZG8NCiAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0 IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbg0K ICAgIGFjX2N2X3Byb2dfUkFOTElCPSIke2FjX3Rvb2xfcHJlZml4fXJhbmxpYiINCiAgICAkYXNf ZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3Jk JGFjX2V4ZWNfZXh0IiA+JjUNCiAgICBicmVhayAyDQogIGZpDQpkb25lDQogIGRvbmUNCklGUz0k YXNfc2F2ZV9JRlMNCg0KZmkNCmZpDQpSQU5MSUI9JGFjX2N2X3Byb2dfUkFOTElCDQppZiB0ZXN0 IC1uICIkUkFOTElCIjsgdGhlbg0KICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJ TkVOT306IHJlc3VsdDogJFJBTkxJQiIgPiY1DQokYXNfZWNobyAiJFJBTkxJQiIgPiY2OyB9DQpl bHNlDQogIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBu byIgPiY1DQokYXNfZWNobyAibm8iID4mNjsgfQ0KZmkNCg0KDQpmaQ0KaWYgdGVzdCAteiAiJGFj X2N2X3Byb2dfUkFOTElCIjsgdGhlbg0KICBhY19jdF9SQU5MSUI9JFJBTkxJQg0KICAjIEV4dHJh Y3QgdGhlIGZpcnN0IHdvcmQgb2YgInJhbmxpYiIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFt ZSB3aXRoIGFyZ3MuDQpzZXQgZHVtbXkgcmFubGliOyBhY193b3JkPSQyDQp7ICRhc19lY2hvICIk YXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1DQok YXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0NCmlmICR7YWNfY3Zf cHJvZ19hY19jdF9SQU5MSUIrOn0gZmFsc2U7IHRoZW4gOg0KICAkYXNfZWNob19uICIoY2FjaGVk KSAiID4mNg0KZWxzZQ0KICBpZiB0ZXN0IC1uICIkYWNfY3RfUkFOTElCIjsgdGhlbg0KICBhY19j dl9wcm9nX2FjX2N0X1JBTkxJQj0iJGFjX2N0X1JBTkxJQiIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJp ZGUgdGhlIHRlc3QuDQplbHNlDQphc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9S DQpmb3IgYXNfZGlyIGluICRQQVRIDQpkbw0KICBJRlM9JGFzX3NhdmVfSUZTDQogIHRlc3QgLXog IiRhc19kaXIiICYmIGFzX2Rpcj0uDQogICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVj dXRhYmxlX2V4dGVuc2lvbnM7IGRvDQogIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRh Y19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7 IH07IHRoZW4NCiAgICBhY19jdl9wcm9nX2FjX2N0X1JBTkxJQj0icmFubGliIg0KICAgICRhc19l Y2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQk YWNfZXhlY19leHQiID4mNQ0KICAgIGJyZWFrIDINCiAgZmkNCmRvbmUNCiAgZG9uZQ0KSUZTPSRh c19zYXZlX0lGUw0KDQpmaQ0KZmkNCmFjX2N0X1JBTkxJQj0kYWNfY3ZfcHJvZ19hY19jdF9SQU5M SUINCmlmIHRlc3QgLW4gIiRhY19jdF9SQU5MSUIiOyB0aGVuDQogIHsgJGFzX2VjaG8gIiRhc19t ZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3RfUkFOTElCIiA+JjUNCiRhc19l Y2hvICIkYWNfY3RfUkFOTElCIiA+JjY7IH0NCmVsc2UNCiAgeyAkYXNfZWNobyAiJGFzX21lOiR7 YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUNCiRhc19lY2hvICJubyIgPiY2OyB9 DQpmaQ0KDQogIGlmIHRlc3QgIngkYWNfY3RfUkFOTElCIiA9IHg7IHRoZW4NCiAgICBSQU5MSUI9 IjoiDQogIGVsc2UNCiAgICBjYXNlICRjcm9zc19jb21waWxpbmc6JGFjX3Rvb2xfd2FybmVkIGlu DQp5ZXM6KQ0KeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5H OiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mNQ0K JGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHByZWZpeGVk IHdpdGggaG9zdCB0cmlwbGV0IiA+JjI7fQ0KYWNfdG9vbF93YXJuZWQ9eWVzIDs7DQplc2FjDQog ICAgUkFOTElCPSRhY19jdF9SQU5MSUINCiAgZmkNCmVsc2UNCiAgUkFOTElCPSIkYWNfY3ZfcHJv Z19SQU5MSUIiDQpmaQ0KDQp7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306 IGNoZWNraW5nIHdoZXRoZXIgbG4gLXMgd29ya3MiID4mNQ0KJGFzX2VjaG9fbiAiY2hlY2tpbmcg d2hldGhlciBsbiAtcyB3b3Jrcy4uLiAiID4mNjsgfQ0KTE5fUz0kYXNfbG5fcw0KaWYgdGVzdCAi JExOX1MiID0gImxuIC1zIjsgdGhlbg0KICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8t JExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUNCiRhc19lY2hvICJ5ZXMiID4mNjsgfQ0KZWxzZQ0K ICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8sIHVz aW5nICRMTl9TIiA+JjUNCiRhc19lY2hvICJubywgdXNpbmcgJExOX1MiID4mNjsgfQ0KZmkNCg0K IyBNYWtlIHN1cmUgd2UgY2FuIHJ1biBjb25maWcuc3ViLg0KJFNIRUxMICIkYWNfYXV4X2Rpci9j b25maWcuc3ViIiBzdW40ID4vZGV2L251bGwgMj4mMSB8fA0KICBhc19mbl9lcnJvciAkPyAiY2Fu bm90IHJ1biAkU0hFTEwgJGFjX2F1eF9kaXIvY29uZmlnLnN1YiIgIiRMSU5FTk8iIDUNCg0KeyAk YXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBidWlsZCBzeXN0 ZW0gdHlwZSIgPiY1DQokYXNfZWNob19uICJjaGVja2luZyBidWlsZCBzeXN0ZW0gdHlwZS4uLiAi ID4mNjsgfQ0KaWYgJHthY19jdl9idWlsZCs6fSBmYWxzZTsgdGhlbiA6DQogICRhc19lY2hvX24g IihjYWNoZWQpICIgPiY2DQplbHNlDQogIGFjX2J1aWxkX2FsaWFzPSRidWlsZF9hbGlhcw0KdGVz dCAieCRhY19idWlsZF9hbGlhcyIgPSB4ICYmDQogIGFjX2J1aWxkX2FsaWFzPWAkU0hFTEwgIiRh Y19hdXhfZGlyL2NvbmZpZy5ndWVzcyJgDQp0ZXN0ICJ4JGFjX2J1aWxkX2FsaWFzIiA9IHggJiYN CiAgYXNfZm5fZXJyb3IgJD8gImNhbm5vdCBndWVzcyBidWlsZCB0eXBlOyB5b3UgbXVzdCBzcGVj aWZ5IG9uZSIgIiRMSU5FTk8iIDUNCmFjX2N2X2J1aWxkPWAkU0hFTEwgIiRhY19hdXhfZGlyL2Nv bmZpZy5zdWIiICRhY19idWlsZF9hbGlhc2AgfHwNCiAgYXNfZm5fZXJyb3IgJD8gIiRTSEVMTCAk YWNfYXV4X2Rpci9jb25maWcuc3ViICRhY19idWlsZF9hbGlhcyBmYWlsZWQiICIkTElORU5PIiA1 DQoNCmZpDQp7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDog JGFjX2N2X2J1aWxkIiA+JjUNCiRhc19lY2hvICIkYWNfY3ZfYnVpbGQiID4mNjsgfQ0KY2FzZSAk YWNfY3ZfYnVpbGQgaW4NCiotKi0qKSA7Ow0KKikgYXNfZm5fZXJyb3IgJD8gImludmFsaWQgdmFs dWUgb2YgY2Fub25pY2FsIGJ1aWxkIiAiJExJTkVOTyIgNTs7DQplc2FjDQpidWlsZD0kYWNfY3Zf YnVpbGQNCmFjX3NhdmVfSUZTPSRJRlM7IElGUz0nLScNCnNldCB4ICRhY19jdl9idWlsZA0Kc2hp ZnQNCmJ1aWxkX2NwdT0kMQ0KYnVpbGRfdmVuZG9yPSQyDQpzaGlmdDsgc2hpZnQNCiMgUmVtZW1i ZXIsIHRoZSBmaXJzdCBjaGFyYWN0ZXIgb2YgSUZTIGlzIHVzZWQgdG8gY3JlYXRlICQqLA0KIyBl eGNlcHQgd2l0aCBvbGQgc2hlbGxzOg0KYnVpbGRfb3M9JCoNCklGUz0kYWNfc2F2ZV9JRlMNCmNh c2UgJGJ1aWxkX29zIGluICpcICopIGJ1aWxkX29zPWBlY2hvICIkYnVpbGRfb3MiIHwgc2VkICdz LyAvLS9nJ2A7OyBlc2FjDQoNCg0KeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5F Tk99OiBjaGVja2luZyBob3N0IHN5c3RlbSB0eXBlIiA+JjUNCiRhc19lY2hvX24gImNoZWNraW5n IGhvc3Qgc3lzdGVtIHR5cGUuLi4gIiA+JjY7IH0NCmlmICR7YWNfY3ZfaG9zdCs6fSBmYWxzZTsg dGhlbiA6DQogICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2DQplbHNlDQogIGlmIHRlc3QgIngk aG9zdF9hbGlhcyIgPSB4OyB0aGVuDQogIGFjX2N2X2hvc3Q9JGFjX2N2X2J1aWxkDQplbHNlDQog IGFjX2N2X2hvc3Q9YCRTSEVMTCAiJGFjX2F1eF9kaXIvY29uZmlnLnN1YiIgJGhvc3RfYWxpYXNg IHx8DQogICAgYXNfZm5fZXJyb3IgJD8gIiRTSEVMTCAkYWNfYXV4X2Rpci9jb25maWcuc3ViICRo b3N0X2FsaWFzIGZhaWxlZCIgIiRMSU5FTk8iIDUNCmZpDQoNCmZpDQp7ICRhc19lY2hvICIkYXNf bWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X2hvc3QiID4mNQ0KJGFzX2Vj aG8gIiRhY19jdl9ob3N0IiA+JjY7IH0NCmNhc2UgJGFjX2N2X2hvc3QgaW4NCiotKi0qKSA7Ow0K KikgYXNfZm5fZXJyb3IgJD8gImludmFsaWQgdmFsdWUgb2YgY2Fub25pY2FsIGhvc3QiICIkTElO RU5PIiA1OzsNCmVzYWMNCmhvc3Q9JGFjX2N2X2hvc3QNCmFjX3NhdmVfSUZTPSRJRlM7IElGUz0n LScNCnNldCB4ICRhY19jdl9ob3N0DQpzaGlmdA0KaG9zdF9jcHU9JDENCmhvc3RfdmVuZG9yPSQy DQpzaGlmdDsgc2hpZnQNCiMgUmVtZW1iZXIsIHRoZSBmaXJzdCBjaGFyYWN0ZXIgb2YgSUZTIGlz IHVzZWQgdG8gY3JlYXRlICQqLA0KIyBleGNlcHQgd2l0aCBvbGQgc2hlbGxzOg0KaG9zdF9vcz0k Kg0KSUZTPSRhY19zYXZlX0lGUw0KY2FzZSAkaG9zdF9vcyBpbiAqXCAqKSBob3N0X29zPWBlY2hv ICIkaG9zdF9vcyIgfCBzZWQgJ3MvIC8tL2cnYDs7IGVzYWMNCg0KDQp7ICRhc19lY2hvICIkYXNf bWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBBTlNJIEMgaGVhZGVyIGZpbGVz IiA+JjUNCiRhc19lY2hvX24gImNoZWNraW5nIGZvciBBTlNJIEMgaGVhZGVyIGZpbGVzLi4uICIg PiY2OyB9DQppZiAke2FjX2N2X2hlYWRlcl9zdGRjKzp9IGZhbHNlOyB0aGVuIDoNCiAgJGFzX2Vj aG9fbiAiKGNhY2hlZCkgIiA+JjYNCmVsc2UNCiAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+ Y29uZnRlc3QuJGFjX2V4dA0KLyogZW5kIGNvbmZkZWZzLmguICAqLw0KI2luY2x1ZGUgPHN0ZGxp Yi5oPg0KI2luY2x1ZGUgPHN0ZGFyZy5oPg0KI2luY2x1ZGUgPHN0cmluZy5oPg0KI2luY2x1ZGUg PGZsb2F0Lmg+DQoNCmludA0KbWFpbiAoKQ0Kew0KDQogIDsNCiAgcmV0dXJuIDA7DQp9DQpfQUNF T0YNCmlmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoNCiAgYWNfY3ZfaGVh ZGVyX3N0ZGM9eWVzDQplbHNlDQogIGFjX2N2X2hlYWRlcl9zdGRjPW5vDQpmaQ0Kcm0gLWYgY29y ZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0DQoNCmlm IHRlc3QgJGFjX2N2X2hlYWRlcl9zdGRjID0geWVzOyB0aGVuDQogICMgU3VuT1MgNC54IHN0cmlu Zy5oIGRvZXMgbm90IGRlY2xhcmUgbWVtKiwgY29udHJhcnkgdG8gQU5TSS4NCiAgY2F0IGNvbmZk ZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dA0KLyogZW5kIGNvbmZkZWZzLmguICAq Lw0KI2luY2x1ZGUgPHN0cmluZy5oPg0KDQpfQUNFT0YNCmlmIChldmFsICIkYWNfY3BwIGNvbmZ0 ZXN0LiRhY19leHQiKSAyPiY1IHwNCiAgJEVHUkVQICJtZW1jaHIiID4vZGV2L251bGwgMj4mMTsg dGhlbiA6DQoNCmVsc2UNCiAgYWNfY3ZfaGVhZGVyX3N0ZGM9bm8NCmZpDQpybSAtZiBjb25mdGVz dCoNCg0KZmkNCg0KaWYgdGVzdCAkYWNfY3ZfaGVhZGVyX3N0ZGMgPSB5ZXM7IHRoZW4NCiAgIyBJ U0MgMi4wLjIgc3RkbGliLmggZG9lcyBub3QgZGVjbGFyZSBmcmVlLCBjb250cmFyeSB0byBBTlNJ Lg0KICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0DQovKiBlbmQg Y29uZmRlZnMuaC4gICovDQojaW5jbHVkZSA8c3RkbGliLmg+DQoNCl9BQ0VPRg0KaWYgKGV2YWwg IiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCIpIDI+JjUgfA0KICAkRUdSRVAgImZyZWUiID4vZGV2 L251bGwgMj4mMTsgdGhlbiA6DQoNCmVsc2UNCiAgYWNfY3ZfaGVhZGVyX3N0ZGM9bm8NCmZpDQpy bSAtZiBjb25mdGVzdCoNCg0KZmkNCg0KaWYgdGVzdCAkYWNfY3ZfaGVhZGVyX3N0ZGMgPSB5ZXM7 IHRoZW4NCiAgIyAvYmluL2NjIGluIElyaXgtNC4wLjUgZ2V0cyBub24tQU5TSSBjdHlwZSBtYWNy b3MgdW5sZXNzIHVzaW5nIC1hbnNpLg0KICBpZiB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IHll czsgdGhlbiA6DQogIDoNCmVsc2UNCiAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRl c3QuJGFjX2V4dA0KLyogZW5kIGNvbmZkZWZzLmguICAqLw0KI2luY2x1ZGUgPGN0eXBlLmg+DQoj aW5jbHVkZSA8c3RkbGliLmg+DQojaWYgKCgnICcgJiAweDBGRikgPT0gMHgwMjApDQojIGRlZmlu ZSBJU0xPV0VSKGMpICgnYScgPD0gKGMpICYmIChjKSA8PSAneicpDQojIGRlZmluZSBUT1VQUEVS KGMpIChJU0xPV0VSKGMpID8gJ0EnICsgKChjKSAtICdhJykgOiAoYykpDQojZWxzZQ0KIyBkZWZp bmUgSVNMT1dFUihjKSBcDQoJCSAgICgoJ2EnIDw9IChjKSAmJiAoYykgPD0gJ2knKSBcDQoJCSAg ICAgfHwgKCdqJyA8PSAoYykgJiYgKGMpIDw9ICdyJykgXA0KCQkgICAgIHx8ICgncycgPD0gKGMp ICYmIChjKSA8PSAneicpKQ0KIyBkZWZpbmUgVE9VUFBFUihjKSAoSVNMT1dFUihjKSA/ICgoYykg fCAweDQwKSA6IChjKSkNCiNlbmRpZg0KDQojZGVmaW5lIFhPUihlLCBmKSAoKChlKSAmJiAhKGYp KSB8fCAoIShlKSAmJiAoZikpKQ0KaW50DQptYWluICgpDQp7DQogIGludCBpOw0KICBmb3IgKGkg PSAwOyBpIDwgMjU2OyBpKyspDQogICAgaWYgKFhPUiAoaXNsb3dlciAoaSksIElTTE9XRVIgKGkp KQ0KCXx8IHRvdXBwZXIgKGkpICE9IFRPVVBQRVIgKGkpKQ0KICAgICAgcmV0dXJuIDI7DQogIHJl dHVybiAwOw0KfQ0KX0FDRU9GDQppZiBhY19mbl9jX3RyeV9ydW4gIiRMSU5FTk8iOyB0aGVuIDoN Cg0KZWxzZQ0KICBhY19jdl9oZWFkZXJfc3RkYz1ubw0KZmkNCnJtIC1mIGNvcmUgKi5jb3JlIGNv cmUuY29uZnRlc3QuKiBnbW9uLm91dCBiYi5vdXQgY29uZnRlc3QkYWNfZXhlZXh0IFwNCiAgY29u ZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC5iZWFtIGNvbmZ0ZXN0LiRhY19leHQNCmZpDQoNCmZp DQpmaQ0KeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRh Y19jdl9oZWFkZXJfc3RkYyIgPiY1DQokYXNfZWNobyAiJGFjX2N2X2hlYWRlcl9zdGRjIiA+JjY7 IH0NCmlmIHRlc3QgJGFjX2N2X2hlYWRlcl9zdGRjID0geWVzOyB0aGVuDQoNCiRhc19lY2hvICIj ZGVmaW5lIFNURENfSEVBREVSUyAxIiA+PmNvbmZkZWZzLmgNCg0KZmkNCg0KIyBPbiBJUklYIDUu Mywgc3lzL3R5cGVzIGFuZCBpbnR0eXBlcy5oIGFyZSBjb25mbGljdGluZy4NCmZvciBhY19oZWFk ZXIgaW4gc3lzL3R5cGVzLmggc3lzL3N0YXQuaCBzdGRsaWIuaCBzdHJpbmcuaCBtZW1vcnkuaCBz dHJpbmdzLmggXA0KCQkgIGludHR5cGVzLmggc3RkaW50LmggdW5pc3RkLmgNCmRvIDoNCiAgYXNf YWNfSGVhZGVyPWAkYXNfZWNobyAiYWNfY3ZfaGVhZGVyXyRhY19oZWFkZXIiIHwgJGFzX3RyX3No YA0KYWNfZm5fY19jaGVja19oZWFkZXJfY29tcGlsZSAiJExJTkVOTyIgIiRhY19oZWFkZXIiICIk YXNfYWNfSGVhZGVyIiAiJGFjX2luY2x1ZGVzX2RlZmF1bHQNCiINCmlmIGV2YWwgdGVzdCBcInhc JCIkYXNfYWNfSGVhZGVyIlwiID0geCJ5ZXMiOyB0aGVuIDoNCiAgY2F0ID4+Y29uZmRlZnMuaCA8 PF9BQ0VPRg0KI2RlZmluZSBgJGFzX2VjaG8gIkhBVkVfJGFjX2hlYWRlciIgfCAkYXNfdHJfY3Bw YCAxDQpfQUNFT0YNCg0KZmkNCg0KZG9uZQ0KDQoNCg0KDQoNCiAgYWNfZm5fY19jaGVja19oZWFk ZXJfbW9uZ3JlbCAiJExJTkVOTyIgIm1pbml4L2NvbmZpZy5oIiAiYWNfY3ZfaGVhZGVyX21pbml4 X2NvbmZpZ19oIiAiJGFjX2luY2x1ZGVzX2RlZmF1bHQiDQppZiB0ZXN0ICJ4JGFjX2N2X2hlYWRl cl9taW5peF9jb25maWdfaCIgPSB4eWVzOyB0aGVuIDoNCiAgTUlOSVg9eWVzDQplbHNlDQogIE1J TklYPQ0KZmkNCg0KDQogIGlmIHRlc3QgIiRNSU5JWCIgPSB5ZXM7IHRoZW4NCg0KJGFzX2VjaG8g IiNkZWZpbmUgX1BPU0lYX1NPVVJDRSAxIiA+PmNvbmZkZWZzLmgNCg0KDQokYXNfZWNobyAiI2Rl ZmluZSBfUE9TSVhfMV9TT1VSQ0UgMiIgPj5jb25mZGVmcy5oDQoNCg0KJGFzX2VjaG8gIiNkZWZp bmUgX01JTklYIDEiID4+Y29uZmRlZnMuaA0KDQogIGZpDQoNCiAgICAgICAgY2FzZSAiJGhvc3Rf b3MiIGluDQogICAgaHB1eCopDQoNCiRhc19lY2hvICIjZGVmaW5lIF9YT1BFTl9TT1VSQ0UgNTAw IiA+PmNvbmZkZWZzLmgNCg0KICAgICAgOzsNCiAgZXNhYw0KDQoNCiAgeyAkYXNfZWNobyAiJGFz X21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIGl0IGlzIHNhZmUgdG8g ZGVmaW5lIF9fRVhURU5TSU9OU19fIiA+JjUNCiRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIg aXQgaXMgc2FmZSB0byBkZWZpbmUgX19FWFRFTlNJT05TX18uLi4gIiA+JjY7IH0NCmlmICR7YWNf Y3Zfc2FmZV90b19kZWZpbmVfX19leHRlbnNpb25zX18rOn0gZmFsc2U7IHRoZW4gOg0KICAkYXNf ZWNob19uICIoY2FjaGVkKSAiID4mNg0KZWxzZQ0KICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9G ID5jb25mdGVzdC4kYWNfZXh0DQovKiBlbmQgY29uZmRlZnMuaC4gICovDQoNCiMgICAgICAgICBk ZWZpbmUgX19FWFRFTlNJT05TX18gMQ0KICAgICAgICAgICRhY19pbmNsdWRlc19kZWZhdWx0DQpp bnQNCm1haW4gKCkNCnsNCg0KICA7DQogIHJldHVybiAwOw0KfQ0KX0FDRU9GDQppZiBhY19mbl9j X3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6DQogIGFjX2N2X3NhZmVfdG9fZGVmaW5lX19f ZXh0ZW5zaW9uc19fPXllcw0KZWxzZQ0KICBhY19jdl9zYWZlX3RvX2RlZmluZV9fX2V4dGVuc2lv bnNfXz1ubw0KZmkNCnJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQg Y29uZnRlc3QuJGFjX2V4dA0KZmkNCnsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElO RU5PfTogcmVzdWx0OiAkYWNfY3Zfc2FmZV90b19kZWZpbmVfX19leHRlbnNpb25zX18iID4mNQ0K JGFzX2VjaG8gIiRhY19jdl9zYWZlX3RvX2RlZmluZV9fX2V4dGVuc2lvbnNfXyIgPiY2OyB9DQog IHRlc3QgJGFjX2N2X3NhZmVfdG9fZGVmaW5lX19fZXh0ZW5zaW9uc19fID0geWVzICYmDQogICAg JGFzX2VjaG8gIiNkZWZpbmUgX19FWFRFTlNJT05TX18gMSIgPj5jb25mZGVmcy5oDQoNCiAgJGFz X2VjaG8gIiNkZWZpbmUgX0FMTF9TT1VSQ0UgMSIgPj5jb25mZGVmcy5oDQoNCiAgJGFzX2VjaG8g IiNkZWZpbmUgX0dOVV9TT1VSQ0UgMSIgPj5jb25mZGVmcy5oDQoNCiAgJGFzX2VjaG8gIiNkZWZp bmUgX1BPU0lYX1BUSFJFQURfU0VNQU5USUNTIDEiID4+Y29uZmRlZnMuaA0KDQogICRhc19lY2hv ICIjZGVmaW5lIF9UQU5ERU1fU09VUkNFIDEiID4+Y29uZmRlZnMuaA0KDQoNCg0KDQoNCg0KDQoN CnsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIF9M QVJHRUZJTEVfU09VUkNFIHZhbHVlIG5lZWRlZCBmb3IgbGFyZ2UgZmlsZXMiID4mNQ0KJGFzX2Vj aG9fbiAiY2hlY2tpbmcgZm9yIF9MQVJHRUZJTEVfU09VUkNFIHZhbHVlIG5lZWRlZCBmb3IgbGFy Z2UgZmlsZXMuLi4gIiA+JjY7IH0NCmlmICR7YWNfY3Zfc3lzX2xhcmdlZmlsZV9zb3VyY2UrOn0g ZmFsc2U7IHRoZW4gOg0KICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNg0KZWxzZQ0KICB3aGls ZSA6OyBkbw0KICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0DQov KiBlbmQgY29uZmRlZnMuaC4gICovDQojaW5jbHVkZSA8c3lzL3R5cGVzLmg+IC8qIGZvciBvZmZf dCAqLw0KICAgICAjaW5jbHVkZSA8c3RkaW8uaD4NCmludA0KbWFpbiAoKQ0Kew0KaW50ICgqZnAp IChGSUxFICosIG9mZl90LCBpbnQpID0gZnNlZWtvOw0KICAgICByZXR1cm4gZnNlZWtvIChzdGRp biwgMCwgMCkgJiYgZnAgKHN0ZGluLCAwLCAwKTsNCiAgOw0KICByZXR1cm4gMDsNCn0NCl9BQ0VP Rg0KaWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOg0KICBhY19jdl9zeXNfbGFy Z2VmaWxlX3NvdXJjZT1ubzsgYnJlYWsNCmZpDQpybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25m dGVzdC4kYWNfb2JqZXh0IFwNCiAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4 dA0KICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0DQovKiBlbmQg Y29uZmRlZnMuaC4gICovDQojZGVmaW5lIF9MQVJHRUZJTEVfU09VUkNFIDENCiNpbmNsdWRlIDxz eXMvdHlwZXMuaD4gLyogZm9yIG9mZl90ICovDQogICAgICNpbmNsdWRlIDxzdGRpby5oPg0KaW50 DQptYWluICgpDQp7DQppbnQgKCpmcCkgKEZJTEUgKiwgb2ZmX3QsIGludCkgPSBmc2Vla287DQog ICAgIHJldHVybiBmc2Vla28gKHN0ZGluLCAwLCAwKSAmJiBmcCAoc3RkaW4sIDAsIDApOw0KICA7 DQogIHJldHVybiAwOw0KfQ0KX0FDRU9GDQppZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsg dGhlbiA6DQogIGFjX2N2X3N5c19sYXJnZWZpbGVfc291cmNlPTE7IGJyZWFrDQpmaQ0Kcm0gLWYg Y29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcDQogICAgY29uZnRlc3QkYWNf ZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQNCiAgYWNfY3Zfc3lzX2xhcmdlZmlsZV9zb3VyY2U9dW5r bm93bg0KICBicmVhaw0KZG9uZQ0KZmkNCnsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0k TElORU5PfTogcmVzdWx0OiAkYWNfY3Zfc3lzX2xhcmdlZmlsZV9zb3VyY2UiID4mNQ0KJGFzX2Vj aG8gIiRhY19jdl9zeXNfbGFyZ2VmaWxlX3NvdXJjZSIgPiY2OyB9DQpjYXNlICRhY19jdl9zeXNf bGFyZ2VmaWxlX3NvdXJjZSBpbiAjKA0KICBubyB8IHVua25vd24pIDs7DQogICopDQpjYXQgPj5j b25mZGVmcy5oIDw8X0FDRU9GDQojZGVmaW5lIF9MQVJHRUZJTEVfU09VUkNFICRhY19jdl9zeXNf bGFyZ2VmaWxlX3NvdXJjZQ0KX0FDRU9GDQo7Ow0KZXNhYw0Kcm0gLXJmIGNvbmZ0ZXN0Kg0KDQoj IFdlIHVzZWQgdG8gdHJ5IGRlZmluaW5nIF9YT1BFTl9TT1VSQ0U9NTAwIHRvbywgdG8gd29yayBh cm91bmQgYSBidWcNCiMgaW4gZ2xpYmMgMi4xLjMsIGJ1dCB0aGF0IGJyZWFrcyB0b28gbWFueSBv dGhlciB0aGluZ3MuDQojIElmIHlvdSB3YW50IGZzZWVrbyBhbmQgZnRlbGxvIHdpdGggZ2xpYmMs IHVwZ3JhZGUgdG8gYSBmaXhlZCBnbGliYy4NCmlmIHRlc3QgJGFjX2N2X3N5c19sYXJnZWZpbGVf c291cmNlICE9IHVua25vd247IHRoZW4NCg0KJGFzX2VjaG8gIiNkZWZpbmUgSEFWRV9GU0VFS08g MSIgPj5jb25mZGVmcy5oDQoNCmZpDQoNCg0KDQoNCiAgIyBJRUVFIGJlaGF2aW91ciBpcyB0aGUg ZGVmYXVsdCBvbiBhbGwgQ1BVcyBleGNlcHQgQWxwaGEgYW5kIFNIDQogICMgKGFjY29yZGluZyB0 byB0aGUgdGVzdCByZXN1bHRzIG9mIEJydW5vIEhhaWJsZSdzIGllZWVmcC9mZW52X2RlZmF1bHQu bTQNCiAgIyBhbmQgdGhlIEdDQyA0LjEuMiBtYW51YWwpLg0KICBjYXNlICIkaG9zdF9jcHUiIGlu DQogICAgYWxwaGEqKQ0KICAgICAgIyBPbiBBbHBoYSBzeXN0ZW1zLCBhIGNvbXBpbGVyIG9wdGlv biBwcm92aWRlcyB0aGUgYmVoYXZpb3VyLg0KICAgICAgIyBTZWUgdGhlIGllZWUoMykgbWFudWFs IHBhZ2UsIGFsc28gYXZhaWxhYmxlIGF0DQogICAgICAjIDxodHRwOi8vaDMwMDk3Lnd3dzMuaHAu Y29tL2RvY3MvYmFzZV9kb2MvRE9DVU1FTlRBVElPTi9WNTFCX0hUTUwvTUFOL01BTjMvMDYwMF9f X18uSFRNPg0KICAgICAgaWYgdGVzdCAtbiAiJEdDQyI7IHRoZW4NCiAgICAgICAgIyBHQ0MgaGFz IHRoZSBvcHRpb24gLW1pZWVlLg0KICAgICAgICBDUFBGTEFHUz0iJENQUEZMQUdTIC1taWVlZSIN CiAgICAgIGVsc2UNCiAgICAgICAgIyBDb21wYXEgKGV4LURFQykgQyBoYXMgdGhlIG9wdGlvbiAt aWVlZS4NCiAgICAgICAgQ1BQRkxBR1M9IiRDUFBGTEFHUyAtaWVlZSINCiAgICAgIGZpDQogICAg ICA7Ow0KICAgIHNoKikNCiAgICAgIGlmIHRlc3QgLW4gIiRHQ0MiOyB0aGVuDQogICAgICAgICMg R0NDIGhhcyB0aGUgb3B0aW9uIC1taWVlZS4NCiAgICAgICAgQ1BQRkxBR1M9IiRDUFBGTEFHUyAt bWllZWUiDQogICAgICBmaQ0KICAgICAgOzsNCiAgZXNhYw0KDQoNCg0KDQoNCg0KICAjIENoZWNr IHdoZXRoZXIgLS1lbmFibGUtdGhyZWFkcyB3YXMgZ2l2ZW4uDQppZiB0ZXN0ICIke2VuYWJsZV90 aHJlYWRzK3NldH0iID0gc2V0OyB0aGVuIDoNCiAgZW5hYmxldmFsPSRlbmFibGVfdGhyZWFkczsg Z2xfdXNlX3RocmVhZHM9JGVuYWJsZXZhbA0KZWxzZQ0KICBpZiB0ZXN0IC1uICIkZ2xfdXNlX3Ro cmVhZHNfZGVmYXVsdCI7IHRoZW4NCiAgICAgICBnbF91c2VfdGhyZWFkcz0iJGdsX3VzZV90aHJl YWRzX2RlZmF1bHQiDQogICAgIGVsc2UNCiAgICAgICBjYXNlICIkaG9zdF9vcyIgaW4NCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IG9zZiopIGdsX3VzZV90aHJlYWRzPW5vIDs7DQogICAgICAgICBjeWd3aW4qKQ0KICAgICAgICAg ICAgICAgY2FzZSBgdW5hbWUgLXJgIGluDQogICAgICAgICAgICAgICAgIDEuWzAtNV0uKikgZ2xf dXNlX3RocmVhZHM9bm8gOzsNCiAgICAgICAgICAgICAgICAgKikgICAgICAgICBnbF91c2VfdGhy ZWFkcz15ZXMgOzsNCiAgICAgICAgICAgICAgIGVzYWMNCiAgICAgICAgICAgICAgIDs7DQogICAg ICAgICAqKSAgICBnbF91c2VfdGhyZWFkcz15ZXMgOzsNCiAgICAgICBlc2FjDQogICAgIGZpDQoN CmZpDQoNCiAgaWYgdGVzdCAiJGdsX3VzZV90aHJlYWRzIiA9IHllcyB8fCB0ZXN0ICIkZ2xfdXNl X3RocmVhZHMiID0gcG9zaXg7IHRoZW4NCiAgICAjIEZvciB1c2luZyA8cHRocmVhZC5oPjoNCiAg ICBjYXNlICIkaG9zdF9vcyIgaW4NCiAgICAgIG9zZiopDQogICAgICAgICMgT24gT1NGLzEsIHRo ZSBjb21waWxlciBuZWVkcyB0aGUgZmxhZyAtRF9SRUVOVFJBTlQgc28gdGhhdCBpdA0KICAgICAg ICAjIGdyb2tzIDxwdGhyZWFkLmg+LiBjYyBhbHNvIHVuZGVyc3RhbmRzIHRoZSBmbGFnIC1wdGhy ZWFkLCBidXQNCiAgICAgICAgIyB3ZSBkb24ndCB1c2UgaXQgYmVjYXVzZSAxLiBnY2MtMi45NSBk b2Vzbid0IHVuZGVyc3RhbmQgLXB0aHJlYWQsDQogICAgICAgICMgMi4gcHV0dGluZyBhIGZsYWcg aW50byBDUFBGTEFHUyB0aGF0IGhhcyBhbiBlZmZlY3Qgb24gdGhlIGxpbmtlcg0KICAgICAgICAj IGNhdXNlcyB0aGUgQUNfTElOS19JRkVMU0UgdGVzdCBiZWxvdyB0byBzdWNjZWVkIHVuZXhwZWN0 ZWRseSwNCiAgICAgICAgIyBsZWFkaW5nIHRvIHdyb25nIHZhbHVlcyBvZiBMSUJUSFJFQUQgYW5k IExUTElCVEhSRUFELg0KICAgICAgICBDUFBGTEFHUz0iJENQUEZMQUdTIC1EX1JFRU5UUkFOVCIN CiAgICAgICAgOzsNCiAgICBlc2FjDQogICAgIyBTb21lIHN5c3RlbXMgb3B0aW1pemUgZm9yIHNp bmdsZS10aHJlYWRlZCBwcm9ncmFtcyBieSBkZWZhdWx0LCBhbmQNCiAgICAjIG5lZWQgc3BlY2lh bCBmbGFncyB0byBkaXNhYmxlIHRoZXNlIG9wdGltaXphdGlvbnMuIEZvciBleGFtcGxlLCB0aGUN CiAgICAjIGRlZmluaXRpb24gb2YgJ2Vycm5vJyBpbiA8ZXJybm8uaD4uDQogICAgY2FzZSAiJGhv c3Rfb3MiIGluDQogICAgICBhaXgqIHwgZnJlZWJzZCopIENQUEZMQUdTPSIkQ1BQRkxBR1MgLURf VEhSRUFEX1NBRkUiIDs7DQogICAgICBzb2xhcmlzKikgQ1BQRkxBR1M9IiRDUFBGTEFHUyAtRF9S RUVOVFJBTlQiIDs7DQogICAgZXNhYw0KICBmaQ0KDQoNCg0KDQogICMgQ29kZSBmcm9tIG1vZHVs ZSBhY2NlcHQ6DQogICMgQ29kZSBmcm9tIG1vZHVsZSBhY2w6DQogICMgQ29kZSBmcm9tIG1vZHVs ZSBhY2wtdGVzdHM6DQogICMgQ29kZSBmcm9tIG1vZHVsZSBhbGlnbm9mOg0KICAjIENvZGUgZnJv bSBtb2R1bGUgYWxpZ25vZi10ZXN0czoNCiAgIyBDb2RlIGZyb20gbW9kdWxlIGFsbG9jYToNCiAg IyBDb2RlIGZyb20gbW9kdWxlIGFsbG9jYS1vcHQ6DQogICMgQ29kZSBmcm9tIG1vZHVsZSBhbGxv Y2Etb3B0LXRlc3RzOg0KICAjIENvZGUgZnJvbSBtb2R1bGUgYWxsb2NhdG9yOg0KICAjIENvZGUg ZnJvbSBtb2R1bGUgYW5ub3VuY2UtZ2VuOg0KICAjIENvZGUgZnJvbSBtb2R1bGUgYXJlYWRsaW5r Og0KICAjIENvZGUgZnJvbSBtb2R1bGUgYXJlYWRsaW5rLXRlc3RzOg0KICAjIENvZGUgZnJvbSBt b2R1bGUgYXJlYWRsaW5rLXdpdGgtc2l6ZToNCiAgIyBDb2RlIGZyb20gbW9kdWxlIGFyZWFkbGlu ay13aXRoLXNpemUtdGVzdHM6DQogICMgQ29kZSBmcm9tIG1vZHVsZSBhcmVhZGxpbmthdDoNCiAg IyBDb2RlIGZyb20gbW9kdWxlIGFyZWFkbGlua2F0LXRlc3RzOg0KICAjIENvZGUgZnJvbSBtb2R1 bGUgYXJnLW5vbm51bGw6DQogICMgQ29kZSBmcm9tIG1vZHVsZSBhcmdtYXRjaDoNCiAgIyBDb2Rl IGZyb20gbW9kdWxlIGFyZ21hdGNoLXRlc3RzOg0KICAjIENvZGUgZnJvbSBtb2R1bGUgYXJndi1p dGVyOg0KICAjIENvZGUgZnJvbSBtb2R1bGUgYXJndi1pdGVyLXRlc3RzOg0KICAjIENvZGUgZnJv bSBtb2R1bGUgYXJwYV9pbmV0Og0KICAjIENvZGUgZnJvbSBtb2R1bGUgYXJwYV9pbmV0LXRlc3Rz Og0KICAjIENvZGUgZnJvbSBtb2R1bGUgYXNzZXJ0Og0KICAjIENvZGUgZnJvbSBtb2R1bGUgYXV0 b2J1aWxkOg0KDQoNCg0KDQogIGlmIHRlc3QgLXogIiRBQl9QQUNLQUdFIjsgdGhlbg0KICAgIEFC X1BBQ0tBR0U9JHtQQUNLQUdFX05BTUU6LSRQQUNLQUdFfQ0KICBmaQ0KICB7ICRhc19lY2hvICIk YXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGF1dG9idWlsZCBwcm9qZWN0Li4uICRBQl9QQUNL QUdFIiA+JjUNCiRhc19lY2hvICIkYXNfbWU6IGF1dG9idWlsZCBwcm9qZWN0Li4uICRBQl9QQUNL QUdFIiA+JjY7fQ0KDQogIGlmIHRlc3QgLXogIiRBQl9WRVJTSU9OIjsgdGhlbg0KICAgIEFCX1ZF UlNJT049JHtQQUNLQUdFX1ZFUlNJT046LSRWRVJTSU9OfQ0KICBmaQ0KICB7ICRhc19lY2hvICIk YXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGF1dG9idWlsZCByZXZpc2lvbi4uLiAkQUJfVkVS U0lPTiIgPiY1DQokYXNfZWNobyAiJGFzX21lOiBhdXRvYnVpbGQgcmV2aXNpb24uLi4gJEFCX1ZF UlNJT04iID4mNjt9DQoNCiAgaG9zdG5hbWU9YGhvc3RuYW1lYA0KICBpZiB0ZXN0ICIkaG9zdG5h bWUiOyB0aGVuDQogICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBh dXRvYnVpbGQgaG9zdG5hbWUuLi4gJGhvc3RuYW1lIiA+JjUNCiRhc19lY2hvICIkYXNfbWU6IGF1 dG9idWlsZCBob3N0bmFtZS4uLiAkaG9zdG5hbWUiID4mNjt9DQogIGZpDQoNCg0KDQogIGRhdGU9 YFRaPVVUQzAgZGF0ZSArJVklbSVkVCVIJU0lU1pgDQogIGlmIHRlc3QgIiQ/IiAhPSAwOyB0aGVu DQogICAgZGF0ZT1gZGF0ZWANCiAgZmkNCiAgaWYgdGVzdCAiJGRhdGUiOyB0aGVuDQogICAgeyAk YXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBhdXRvYnVpbGQgdGltZXN0YW1w Li4uICRkYXRlIiA+JjUNCiRhc19lY2hvICIkYXNfbWU6IGF1dG9idWlsZCB0aW1lc3RhbXAuLi4g JGRhdGUiID4mNjt9DQogIGZpDQoNCiAgIyBDb2RlIGZyb20gbW9kdWxlIGJhY2t1cGZpbGU6DQog ICMgQ29kZSBmcm9tIG1vZHVsZSBiYXNlNjQ6DQogICMgQ29kZSBmcm9tIG1vZHVsZSBiYXNlNjQt dGVzdHM6DQogICMgQ29kZSBmcm9tIG1vZHVsZSBiaW5hcnktaW86DQogICMgQ29kZSBmcm9tIG1v ZHVsZSBiaW5hcnktaW8tdGVzdHM6DQogICMgQ29kZSBmcm9tIG1vZHVsZSBiaW5kOg0KICAjIENv ZGUgZnJvbSBtb2R1bGUgYml0cm90YXRlOg0KICAjIENvZGUgZnJvbSBtb2R1bGUgYml0cm90YXRl LXRlc3RzOg0KICAjIENvZGUgZnJvbSBtb2R1bGUgYnRvd2M6DQogICMgQ29kZSBmcm9tIG1vZHVs ZSBidG93Yy10ZXN0czoNCiAgIyBDb2RlIGZyb20gbW9kdWxlIGMrK2RlZnM6DQogICMgQ29kZSBm cm9tIG1vZHVsZSBjLWN0eXBlOg0KICAjIENvZGUgZnJvbSBtb2R1bGUgYy1jdHlwZS10ZXN0czoN CiAgIyBDb2RlIGZyb20gbW9kdWxlIGMtc3RyY2FzZToNCiAgIyBDb2RlIGZyb20gbW9kdWxlIGMt c3RyY2FzZS10ZXN0czoNCiAgIyBDb2RlIGZyb20gbW9kdWxlIGMtc3RydG9kOg0KICAjIENvZGUg ZnJvbSBtb2R1bGUgYy1zdHJ0b2xkOg0KICAjIENvZGUgZnJvbSBtb2R1bGUgY2FsbG9jLWdudToN CiAgIyBDb2RlIGZyb20gbW9kdWxlIGNhbGxvYy1nbnUtdGVzdHM6DQogICMgQ29kZSBmcm9tIG1v ZHVsZSBjYWxsb2MtcG9zaXg6DQogICMgQ29kZSBmcm9tIG1vZHVsZSBjYW5vbi1ob3N0Og0KICAj IENvZGUgZnJvbSBtb2R1bGUgY2Fub25pY2FsaXplOg0KICAjIENvZGUgZnJvbSBtb2R1bGUgY2Fu b25pY2FsaXplLXRlc3RzOg0KICAjIENvZGUgZnJvbSBtb2R1bGUgY2FyZWFkbGlua2F0Og0KICAj IENvZGUgZnJvbSBtb2R1bGUgY2hkaXItbG9uZzoNCiAgIyBDb2RlIGZyb20gbW9kdWxlIGNob3du Og0KICAjIENvZGUgZnJvbSBtb2R1bGUgY2hvd24tdGVzdHM6DQogICMgQ29kZSBmcm9tIG1vZHVs ZSBjbG9jay10aW1lOg0KICAjIENvZGUgZnJvbSBtb2R1bGUgY2xvZXhlYzoNCiAgIyBDb2RlIGZy b20gbW9kdWxlIGNsb2V4ZWMtdGVzdHM6DQogICMgQ29kZSBmcm9tIG1vZHVsZSBjbG9zZToNCiAg IyBDb2RlIGZyb20gbW9kdWxlIGNsb3NlLWhvb2s6DQogICMgQ29kZSBmcm9tIG1vZHVsZSBjbG9z ZS1zdHJlYW06DQogICMgQ29kZSBmcm9tIG1vZHVsZSBjbG9zZWluOg0KICAjIENvZGUgZnJvbSBt b2R1bGUgY2xvc2Vpbi10ZXN0czoNCiAgIyBDb2RlIGZyb20gbW9kdWxlIGNsb3Nlb3V0Og0KICAj IENvZGUgZnJvbSBtb2R1bGUgY29uZmlnLWg6DQogICMgQ29kZSBmcm9tIG1vZHVsZSBjb25maWdt YWtlOg0KICAjIENvZGUgZnJvbSBtb2R1bGUgY29ubmVjdDoNCiAgIyBDb2RlIGZyb20gbW9kdWxl IGNyeXB0by9tZDU6DQogICMgQ29kZSBmcm9tIG1vZHVsZSBjcnlwdG8vbWQ1LXRlc3RzOg0KICAj IENvZGUgZnJvbSBtb2R1bGUgY3J5cHRvL3NoYTE6DQogICMgQ29kZSBmcm9tIG1vZHVsZSBjcnlw dG8vc2hhMS10ZXN0czoNCiAgIyBDb2RlIGZyb20gbW9kdWxlIGNyeXB0by9zaGEyNTY6DQogICMg Q29kZSBmcm9tIG1vZHVsZSBjcnlwdG8vc2hhNTEyOg0KICAjIENvZGUgZnJvbSBtb2R1bGUgY3R5 cGU6DQogICMgQ29kZSBmcm9tIG1vZHVsZSBjdHlwZS10ZXN0czoNCiAgIyBDb2RlIGZyb20gbW9k dWxlIGN5Y2xlLWNoZWNrOg0KICAjIENvZGUgZnJvbSBtb2R1bGUgZC1pbm86DQogICMgQ29kZSBm cm9tIG1vZHVsZSBkLXR5cGU6DQogICMgQ29kZSBmcm9tIG1vZHVsZSBkZXYtaW5vOg0KICAjIENv ZGUgZnJvbSBtb2R1bGUgZGktc2V0Og0KICAjIENvZGUgZnJvbSBtb2R1bGUgZGktc2V0LXRlc3Rz Og0KICAjIENvZGUgZnJvbSBtb2R1bGUgZGlhY3JpdDoNCiAgIyBDb2RlIGZyb20gbW9kdWxlIGRp cmVudDoNCiAgIyBDb2RlIGZyb20gbW9kdWxlIGRpcmVudC1zYWZlcjoNCiAgIyBDb2RlIGZyb20g bW9kdWxlIGRpcmVudC1zYWZlci10ZXN0czoNCiAgIyBDb2RlIGZyb20gbW9kdWxlIGRpcmVudC10 ZXN0czoNCiAgIyBDb2RlIGZyb20gbW9kdWxlIGRpcmZkOg0KICAjIENvZGUgZnJvbSBtb2R1bGUg ZGlybmFtZToNCiAgIyBDb2RlIGZyb20gbW9kdWxlIGRpcm5hbWUtbGdwbDoNCiAgIyBDb2RlIGZy b20gbW9kdWxlIGRpcm5hbWUtdGVzdHM6DQogICMgQ29kZSBmcm9tIG1vZHVsZSBkby1yZWxlYXNl LWNvbW1pdC1hbmQtdGFnOg0KICAjIENvZGUgZnJvbSBtb2R1bGUgZG9zbmFtZToNCiAgIyBDb2Rl IGZyb20gbW9kdWxlIGRvdWJsZS1zbGFzaC1yb290Og0KICAjIENvZGUgZnJvbSBtb2R1bGUgZHRv YXN0cjoNCiAgIyBDb2RlIGZyb20gbW9kdWxlIGR1cDI6DQogICMgQ29kZSBmcm9tIG1vZHVsZSBk dXAyLXRlc3RzOg0KICAjIENvZGUgZnJvbSBtb2R1bGUgZW52aXJvbjoNCiAgIyBDb2RlIGZyb20g bW9kdWxlIGVudmlyb24tdGVzdHM6DQogICMgQ29kZSBmcm9tIG1vZHVsZSBlcnJubzoNCiAgIyBD b2RlIGZyb20gbW9kdWxlIGVycm5vLXRlc3RzOg0KICAjIENvZGUgZnJvbSBtb2R1bGUgZXJyb3I6 DQogICMgQ29kZSBmcm9tIG1vZHVsZSBldWlkYWNjZXNzOg0KICAjIENvZGUgZnJvbSBtb2R1bGUg ZXhjbHVkZToNCiAgIyBDb2RlIGZyb20gbW9kdWxlIGV4Y2x1ZGUtdGVzdHM6DQogICMgQ29kZSBm cm9tIG1vZHVsZSBleGl0ZmFpbDoNCiAgIyBDb2RlIGZyb20gbW9kdWxlIGV4dGVuc2lvbnM6DQoN CiAgIyBDb2RlIGZyb20gbW9kdWxlIGZhY2Nlc3NhdDoNCiAgIyBDb2RlIGZyb20gbW9kdWxlIGZh ZHZpc2U6DQogICMgQ29kZSBmcm9tIG1vZHVsZSBmYWR2aXNlLXRlc3RzOg0KICAjIENvZGUgZnJv bSBtb2R1bGUgZmNoZGlyOg0KICAjIENvZGUgZnJvbSBtb2R1bGUgZmNoZGlyLXRlc3RzOg0KICAj IENvZGUgZnJvbSBtb2R1bGUgZmNsb3NlOg0KICAjIENvZGUgZnJvbSBtb2R1bGUgZmNudGw6DQog ICMgQ29kZSBmcm9tIG1vZHVsZSBmY250bC1oOg0KICAjIENvZGUgZnJvbSBtb2R1bGUgZmNudGwt aC10ZXN0czoNCiAgIyBDb2RlIGZyb20gbW9kdWxlIGZjbnRsLXNhZmVyOg0KICAjIENvZGUgZnJv bSBtb2R1bGUgZmNudGwtc2FmZXItdGVzdHM6DQogICMgQ29kZSBmcm9tIG1vZHVsZSBmY250bC10 ZXN0czoNCiAgIyBDb2RlIGZyb20gbW9kdWxlIGZkLXNhZmVyLWZsYWc6DQogICMgQ29kZSBmcm9t IG1vZHVsZSBmZGw6DQogICMgQ29kZSBmcm9tIG1vZHVsZSBmZG9wZW5kaXI6DQogICMgQ29kZSBm cm9tIG1vZHVsZSBmZG9wZW5kaXItdGVzdHM6DQogICMgQ29kZSBmcm9tIG1vZHVsZSBmZHV0aW1l bnNhdDoNCiAgIyBDb2RlIGZyb20gbW9kdWxlIGZkdXRpbWVuc2F0LXRlc3RzOg0KICAjIENvZGUg ZnJvbSBtb2R1bGUgZmZsdXNoOg0KDQogICMgQ29kZSBmcm9tIG1vZHVsZSBmZmx1c2gtdGVzdHM6 DQogICMgQ29kZSBmcm9tIG1vZHVsZSBmaWxlLXNldDoNCiAgIyBDb2RlIGZyb20gbW9kdWxlIGZp bGUtdHlwZToNCiAgIyBDb2RlIGZyb20gbW9kdWxlIGZpbGVibG9ja3M6DQogICMgQ29kZSBmcm9t IG1vZHVsZSBmaWxlbW9kZToNCiAgIyBDb2RlIGZyb20gbW9kdWxlIGZpbGVuYW1lY2F0Og0KICAj IENvZGUgZnJvbSBtb2R1bGUgZmlsZW5hbWVjYXQtbGdwbDoNCiAgIyBDb2RlIGZyb20gbW9kdWxl IGZpbGVuYW1lY2F0LXRlc3RzOg0KICAjIENvZGUgZnJvbSBtb2R1bGUgZmlsZXZlcmNtcDoNCiAg IyBDb2RlIGZyb20gbW9kdWxlIGZpbGV2ZXJjbXAtdGVzdHM6DQogICMgQ29kZSBmcm9tIG1vZHVs ZSBmbGV4bWVtYmVyOg0KICAjIENvZGUgZnJvbSBtb2R1bGUgZmxvYXQ6DQogICMgQ29kZSBmcm9t IG1vZHVsZSBmbm1hdGNoOg0KICAjIENvZGUgZnJvbSBtb2R1bGUgZm5tYXRjaC1nbnU6DQogICMg Q29kZSBmcm9tIG1vZHVsZSBmbm1hdGNoLXRlc3RzOg0KICAjIENvZGUgZnJvbSBtb2R1bGUgZm9w ZW46DQogICMgQ29kZSBmcm9tIG1vZHVsZSBmb3Blbi1zYWZlcjoNCiAgIyBDb2RlIGZyb20gbW9k dWxlIGZvcGVuLXNhZmVyLXRlc3RzOg0KICAjIENvZGUgZnJvbSBtb2R1bGUgZm9wZW4tdGVzdHM6 DQogICMgQ29kZSBmcm9tIG1vZHVsZSBmcGVuZGluZzoNCiAgIyBDb2RlIGZyb20gbW9kdWxlIGZw ZW5kaW5nLXRlc3RzOg0KICAjIENvZGUgZnJvbSBtb2R1bGUgZnBpZWVlOg0KDQogICMgQ29kZSBm cm9tIG1vZHVsZSBmcHJpbnRmdGltZToNCiAgIyBDb2RlIGZyb20gbW9kdWxlIGZwdWN3Og0KICAj IENvZGUgZnJvbSBtb2R1bGUgZnB1cmdlOg0KICAjIENvZGUgZnJvbSBtb2R1bGUgZnB1cmdlLXRl c3RzOg0KICAjIENvZGUgZnJvbSBtb2R1bGUgZnJlYWRhaGVhZDoNCiAgIyBDb2RlIGZyb20gbW9k dWxlIGZyZWFkYWhlYWQtdGVzdHM6DQogICMgQ29kZSBmcm9tIG1vZHVsZSBmcmVhZGluZzoNCiAg IyBDb2RlIGZyb20gbW9kdWxlIGZyZWFkaW5nLXRlc3RzOg0KICAjIENvZGUgZnJvbSBtb2R1bGUg ZnJlYWRwdHI6DQogICMgQ29kZSBmcm9tIG1vZHVsZSBmcmVhZHB0ci10ZXN0czoNCiAgIyBDb2Rl IGZyb20gbW9kdWxlIGZyZWFkc2VlazoNCiAgIyBDb2RlIGZyb20gbW9kdWxlIGZyZWFkc2Vlay10 ZXN0czoNCiAgIyBDb2RlIGZyb20gbW9kdWxlIGZyZW9wZW46DQogICMgQ29kZSBmcm9tIG1vZHVs ZSBmcmVvcGVuLXNhZmVyOg0KICAjIENvZGUgZnJvbSBtb2R1bGUgZnJlb3Blbi1zYWZlci10ZXN0 czoNCiAgIyBDb2RlIGZyb20gbW9kdWxlIGZyZW9wZW4tdGVzdHM6DQogICMgQ29kZSBmcm9tIG1v ZHVsZSBmcmV4cC1ub2xpYm06DQogICMgQ29kZSBmcm9tIG1vZHVsZSBmcmV4cC1ub2xpYm0tdGVz dHM6DQogICMgQ29kZSBmcm9tIG1vZHVsZSBmcmV4cGwtbm9saWJtOg0KICAjIENvZGUgZnJvbSBt b2R1bGUgZnJleHBsLW5vbGlibS10ZXN0czoNCiAgIyBDb2RlIGZyb20gbW9kdWxlIGZzZWVrbzoN Cg0KICAjIENvZGUgZnJvbSBtb2R1bGUgZnNlZWtvLXRlc3RzOg0KICAjIENvZGUgZnJvbSBtb2R1 bGUgZnNldGVycjoNCiAgIyBDb2RlIGZyb20gbW9kdWxlIGZzZXRlcnItdGVzdHM6DQogICMgQ29k ZSBmcm9tIG1vZHVsZSBmc3VzYWdlOg0KICAjIENvZGUgZnJvbSBtb2R1bGUgZnN5bmM6DQogICMg Q29kZSBmcm9tIG1vZHVsZSBmc3luYy10ZXN0czoNCiAgIyBDb2RlIGZyb20gbW9kdWxlIGZ0ZWxs Og0KICAjIENvZGUgZnJvbSBtb2R1bGUgZnRlbGwtdGVzdHM6DQogICMgQ29kZSBmcm9tIG1vZHVs ZSBmdGVsbG86DQoNCiAgIyBDb2RlIGZyb20gbW9kdWxlIGZ0ZWxsby10ZXN0czoNCiAgIyBDb2Rl IGZyb20gbW9kdWxlIGZ0b2FzdHI6DQogICMgQ29kZSBmcm9tIG1vZHVsZSBmdHM6DQogICMgQ29k ZSBmcm9tIG1vZHVsZSBmdWxsLXJlYWQ6DQogICMgQ29kZSBmcm9tIG1vZHVsZSBmdWxsLXdyaXRl Og0KICAjIENvZGUgZnJvbSBtb2R1bGUgZnV0aW1lbnM6DQogICMgQ29kZSBmcm9tIG1vZHVsZSBm dXRpbWVucy10ZXN0czoNCiAgIyBDb2RlIGZyb20gbW9kdWxlIGdlbmRvY3M6DQogICMgQ29kZSBm cm9tIG1vZHVsZSBnZXRhZGRyaW5mbzoNCiAgIyBDb2RlIGZyb20gbW9kdWxlIGdldGFkZHJpbmZv LXRlc3RzOg0KICAjIENvZGUgZnJvbSBtb2R1bGUgZ2V0Y3dkOg0KICAjIENvZGUgZnJvbSBtb2R1 bGUgZ2V0Y3dkLXRlc3RzOg0KICAjIENvZGUgZnJvbSBtb2R1bGUgZ2V0ZGVsaW06DQogICMgQ29k ZSBmcm9tIG1vZHVsZSBnZXRkZWxpbS10ZXN0czoNCiAgIyBDb2RlIGZyb20gbW9kdWxlIGdldGR0 YWJsZXNpemU6DQogICMgQ29kZSBmcm9tIG1vZHVsZSBnZXRkdGFibGVzaXplLXRlc3RzOg0KICAj IENvZGUgZnJvbSBtb2R1bGUgZ2V0Z3JvdXBzOg0KICAjIENvZGUgZnJvbSBtb2R1bGUgZ2V0Z3Jv dXBzLXRlc3RzOg0KICAjIENvZGUgZnJvbSBtb2R1bGUgZ2V0aG9zdG5hbWU6DQogICMgQ29kZSBm cm9tIG1vZHVsZSBnZXRob3N0bmFtZS10ZXN0czoNCiAgIyBDb2RlIGZyb20gbW9kdWxlIGdldGhy eHRpbWU6DQogICMgQ29kZSBmcm9tIG1vZHVsZSBnZXRsaW5lOg0KICAjIENvZGUgZnJvbSBtb2R1 bGUgZ2V0bGluZS10ZXN0czoNCiAgIyBDb2RlIGZyb20gbW9kdWxlIGdldGxvYWRhdmc6DQogICMg Q29kZSBmcm9tIG1vZHVsZSBnZXRsb2FkYXZnLXRlc3RzOg0KICAjIENvZGUgZnJvbSBtb2R1bGUg Z2V0bmRlbGltMjoNCiAgIyBDb2RlIGZyb20gbW9kdWxlIGdldG5kZWxpbTItdGVzdHM6DQogICMg Q29kZSBmcm9tIG1vZHVsZSBnZXRvcHQtZ251Og0KICAjIENvZGUgZnJvbSBtb2R1bGUgZ2V0b3B0 LXBvc2l4Og0KICAjIENvZGUgZnJvbSBtb2R1bGUgZ2V0b3B0LXBvc2l4LXRlc3RzOg0KICAjIENv ZGUgZnJvbSBtb2R1bGUgZ2V0cGFnZXNpemU6DQogICMgQ29kZSBmcm9tIG1vZHVsZSBnZXRwYXNz LWdudToNCiAgIyBDb2RlIGZyb20gbW9kdWxlIGdldHRleHQtaDoNCiAgIyBDb2RlIGZyb20gbW9k dWxlIGdldHRpbWU6DQogICMgQ29kZSBmcm9tIG1vZHVsZSBnZXR0aW1lb2ZkYXk6DQogICMgQ29k ZSBmcm9tIG1vZHVsZSBnZXR0aW1lb2ZkYXktdGVzdHM6DQogICMgQ29kZSBmcm9tIG1vZHVsZSBn ZXR1Z3JvdXBzOg0KICAjIENvZGUgZnJvbSBtb2R1bGUgZ2V0dXNlcnNoZWxsOg0KICAjIENvZGUg ZnJvbSBtb2R1bGUgZ2l0LXZlcnNpb24tZ2VuOg0KICAjIENvZGUgZnJvbSBtb2R1bGUgZ2l0bG9n LXRvLWNoYW5nZWxvZzoNCiAgIyBDb2RlIGZyb20gbW9kdWxlIGdudS1tYWtlOg0KICAjIENvZGUg ZnJvbSBtb2R1bGUgZ251LXdlYi1kb2MtdXBkYXRlOg0KICAjIENvZGUgZnJvbSBtb2R1bGUgZ251 bWFrZWZpbGU6DQogICMgQ29kZSBmcm9tIG1vZHVsZSBnbnVwbG9hZDoNCiAgIyBDb2RlIGZyb20g bW9kdWxlIGdwZXJmOg0KICAjIENvZGUgZnJvbSBtb2R1bGUgZ3JvdXAtbWVtYmVyOg0KICAjIENv ZGUgZnJvbSBtb2R1bGUgaGFyZC1sb2NhbGU6DQogICMgQ29kZSBmcm9tIG1vZHVsZSBoYXNoOg0K ICAjIENvZGUgZnJvbSBtb2R1bGUgaGFzaC1wanc6DQogICMgQ29kZSBmcm9tIG1vZHVsZSBoYXNo LXRlc3RzOg0KICAjIENvZGUgZnJvbSBtb2R1bGUgaGFzaC10cmlwbGU6DQogICMgQ29kZSBmcm9t IG1vZHVsZSBoYXZlbGliOg0KICAjIENvZGUgZnJvbSBtb2R1bGUgaGVhcDoNCiAgIyBDb2RlIGZy b20gbW9kdWxlIGhvc3Qtb3M6DQogICMgQ29kZSBmcm9tIG1vZHVsZSBob3N0ZW50Og0KICAjIENv ZGUgZnJvbSBtb2R1bGUgaHVtYW46DQogICMgQ29kZSBmcm9tIG1vZHVsZSBpLXJpbmc6DQogICMg Q29kZSBmcm9tIG1vZHVsZSBpLXJpbmctdGVzdHM6DQogICMgQ29kZSBmcm9tIG1vZHVsZSBpY29u djoNCiAgIyBDb2RlIGZyb20gbW9kdWxlIGljb252LWg6DQogICMgQ29kZSBmcm9tIG1vZHVsZSBp Y29udi1oLXRlc3RzOg0KICAjIENvZGUgZnJvbSBtb2R1bGUgaWNvbnYtdGVzdHM6DQogICMgQ29k ZSBmcm9tIG1vZHVsZSBpY29udl9vcGVuOg0KICAjIENvZGUgZnJvbSBtb2R1bGUgaWRjYWNoZToN CiAgIyBDb2RlIGZyb20gbW9kdWxlIGlnbm9yZS12YWx1ZToNCiAgIyBDb2RlIGZyb20gbW9kdWxl IGlnbm9yZS12YWx1ZS10ZXN0czoNCiAgIyBDb2RlIGZyb20gbW9kdWxlIGluY2x1ZGVfbmV4dDoN CiAgIyBDb2RlIGZyb20gbW9kdWxlIGluZXRfbnRvcDoNCiAgIyBDb2RlIGZyb20gbW9kdWxlIGlu ZXRfbnRvcC10ZXN0czoNCiAgIyBDb2RlIGZyb20gbW9kdWxlIGluZXRfcHRvbjoNCiAgIyBDb2Rl IGZyb20gbW9kdWxlIGluZXRfcHRvbi10ZXN0czoNCiAgIyBDb2RlIGZyb20gbW9kdWxlIGlubGlu ZToNCiAgIyBDb2RlIGZyb20gbW9kdWxlIGluby1tYXA6DQogICMgQ29kZSBmcm9tIG1vZHVsZSBp bm8tbWFwLXRlc3RzOg0KICAjIENvZGUgZnJvbSBtb2R1bGUgaW50cHJvcHM6DQogICMgQ29kZSBm cm9tIG1vZHVsZSBpbnR0b3N0cjoNCiAgIyBDb2RlIGZyb20gbW9kdWxlIGludHRvc3RyLXRlc3Rz Og0KICAjIENvZGUgZnJvbSBtb2R1bGUgaW50dHlwZXM6DQogICMgQ29kZSBmcm9tIG1vZHVsZSBp bnR0eXBlcy10ZXN0czoNCiAgIyBDb2RlIGZyb20gbW9kdWxlIGlvY3RsOg0KICAjIENvZGUgZnJv bSBtb2R1bGUgaXNhcGlwZToNCiAgIyBDb2RlIGZyb20gbW9kdWxlIGlzYmxhbms6DQogICMgQ29k ZSBmcm9tIG1vZHVsZSBpc2JsYW5rLXRlc3RzOg0KICAjIENvZGUgZnJvbSBtb2R1bGUgaXNuYW5k LW5vbGlibToNCiAgIyBDb2RlIGZyb20gbW9kdWxlIGlzbmFuZC1ub2xpYm0tdGVzdHM6DQogICMg Q29kZSBmcm9tIG1vZHVsZSBpc25hbmYtbm9saWJtOg0KICAjIENvZGUgZnJvbSBtb2R1bGUgaXNu YW5mLW5vbGlibS10ZXN0czoNCiAgIyBDb2RlIGZyb20gbW9kdWxlIGlzbmFubC1ub2xpYm06DQog ICMgQ29kZSBmcm9tIG1vZHVsZSBpc25hbmwtbm9saWJtLXRlc3RzOg0KICAjIENvZGUgZnJvbSBt b2R1bGUgaXN3Ymxhbms6DQogICMgQ29kZSBmcm9tIG1vZHVsZSBpc3dibGFuay10ZXN0czoNCiAg IyBDb2RlIGZyb20gbW9kdWxlIGxhbmdpbmZvOg0KICAjIENvZGUgZnJvbSBtb2R1bGUgbGFuZ2lu Zm8tdGVzdHM6DQogICMgQ29kZSBmcm9tIG1vZHVsZSBsY2htb2Q6DQogICMgQ29kZSBmcm9tIG1v ZHVsZSBsY2hvd246DQogICMgQ29kZSBmcm9tIG1vZHVsZSBsY2hvd24tdGVzdHM6DQogICMgQ29k ZSBmcm9tIG1vZHVsZSBsZHRvYXN0cjoNCiAgIyBDb2RlIGZyb20gbW9kdWxlIGxpYi1pZ25vcmU6 DQogICMgQ29kZSBmcm9tIG1vZHVsZSBsaW5lYnVmZmVyOg0KICAjIENvZGUgZnJvbSBtb2R1bGUg bGluazoNCiAgIyBDb2RlIGZyb20gbW9kdWxlIGxpbmstZm9sbG93Og0KICAjIENvZGUgZnJvbSBt b2R1bGUgbGluay10ZXN0czoNCiAgIyBDb2RlIGZyb20gbW9kdWxlIGxpbmthdDoNCiAgIyBDb2Rl IGZyb20gbW9kdWxlIGxpbmthdC10ZXN0czoNCiAgIyBDb2RlIGZyb20gbW9kdWxlIGxpc3RlbjoN CiAgIyBDb2RlIGZyb20gbW9kdWxlIGxvY2FsY2hhcnNldDoNCiAgIyBDb2RlIGZyb20gbW9kdWxl IGxvY2FsZToNCiAgIyBDb2RlIGZyb20gbW9kdWxlIGxvY2FsZS10ZXN0czoNCiAgIyBDb2RlIGZy b20gbW9kdWxlIGxvY2FsZW5hbWU6DQogICMgQ29kZSBmcm9tIG1vZHVsZSBsb2NhbGVuYW1lLXRl c3RzOg0KICAjIENvZGUgZnJvbSBtb2R1bGUgbG9jazoNCiAgIyBDb2RlIGZyb20gbW9kdWxlIGxv Y2stdGVzdHM6DQogICMgQ29kZSBmcm9tIG1vZHVsZSBsb25nLW9wdGlvbnM6DQogICMgQ29kZSBm cm9tIG1vZHVsZSBsc2VlazoNCiAgIyBDb2RlIGZyb20gbW9kdWxlIGxzZWVrLXRlc3RzOg0KICAj IENvZGUgZnJvbSBtb2R1bGUgbHN0YXQ6DQogICMgQ29kZSBmcm9tIG1vZHVsZSBsc3RhdC10ZXN0 czoNCiAgIyBDb2RlIGZyb20gbW9kdWxlIG1haW50YWluZXItbWFrZWZpbGU6DQogICMgQ29kZSBm cm9tIG1vZHVsZSBtYWxsb2MtZ251Og0KICAjIENvZGUgZnJvbSBtb2R1bGUgbWFsbG9jLWdudS10 ZXN0czoNCiAgIyBDb2RlIGZyb20gbW9kdWxlIG1hbGxvYy1wb3NpeDoNCiAgIyBDb2RlIGZyb20g bW9kdWxlIG1hbGxvY2E6DQogICMgQ29kZSBmcm9tIG1vZHVsZSBtYWxsb2NhLXRlc3RzOg0KICAj IENvZGUgZnJvbSBtb2R1bGUgbWFueXdhcm5pbmdzOg0KICAjIENvZGUgZnJvbSBtb2R1bGUgbWF0 aDoNCiAgIyBDb2RlIGZyb20gbW9kdWxlIG1hdGgtdGVzdHM6DQogICMgQ29kZSBmcm9tIG1vZHVs ZSBtYmNoYXI6DQogICMgQ29kZSBmcm9tIG1vZHVsZSBtYml0ZXI6DQogICMgQ29kZSBmcm9tIG1v ZHVsZSBtYnJ0b3djOg0KICAjIENvZGUgZnJvbSBtb2R1bGUgbWJydG93Yy10ZXN0czoNCiAgIyBD b2RlIGZyb20gbW9kdWxlIG1ic2FsaWduOg0KICAjIENvZGUgZnJvbSBtb2R1bGUgbWJzYWxpZ24t dGVzdHM6DQogICMgQ29kZSBmcm9tIG1vZHVsZSBtYnNjYXNlY21wOg0KICAjIENvZGUgZnJvbSBt b2R1bGUgbWJzY2FzZWNtcC10ZXN0czoNCiAgIyBDb2RlIGZyb20gbW9kdWxlIG1ic2luaXQ6DQog ICMgQ29kZSBmcm9tIG1vZHVsZSBtYnNpbml0LXRlc3RzOg0KICAjIENvZGUgZnJvbSBtb2R1bGUg bWJzbGVuOg0KICAjIENvZGUgZnJvbSBtb2R1bGUgbWJzcnRvd2NzOg0KICAjIENvZGUgZnJvbSBt b2R1bGUgbWJzcnRvd2NzLXRlc3RzOg0KICAjIENvZGUgZnJvbSBtb2R1bGUgbWJzc3RyOg0KICAj IENvZGUgZnJvbSBtb2R1bGUgbWJzc3RyLXRlc3RzOg0KICAjIENvZGUgZnJvbSBtb2R1bGUgbWJz d2lkdGg6DQogICMgQ29kZSBmcm9tIG1vZHVsZSBtYnRvd2M6DQogICMgQ29kZSBmcm9tIG1vZHVs ZSBtYnVpdGVyOg0KICAjIENvZGUgZnJvbSBtb2R1bGUgbWVtY2FzZWNtcDoNCiAgIyBDb2RlIGZy b20gbW9kdWxlIG1lbWNhc2VjbXAtdGVzdHM6DQogICMgQ29kZSBmcm9tIG1vZHVsZSBtZW1jaHI6 DQogICMgQ29kZSBmcm9tIG1vZHVsZSBtZW1jaHItdGVzdHM6DQogICMgQ29kZSBmcm9tIG1vZHVs ZSBtZW1jaHIyOg0KICAjIENvZGUgZnJvbSBtb2R1bGUgbWVtY2hyMi10ZXN0czoNCiAgIyBDb2Rl IGZyb20gbW9kdWxlIG1lbWNtcDI6DQogICMgQ29kZSBmcm9tIG1vZHVsZSBtZW1jb2xsOg0KICAj IENvZGUgZnJvbSBtb2R1bGUgbWVtY29sbC10ZXN0czoNCiAgIyBDb2RlIGZyb20gbW9kdWxlIG1l bXBjcHk6DQogICMgQ29kZSBmcm9tIG1vZHVsZSBtZW1yY2hyOg0KICAjIENvZGUgZnJvbSBtb2R1 bGUgbWVtcmNoci10ZXN0czoNCiAgIyBDb2RlIGZyb20gbW9kdWxlIG1nZXRncm91cHM6DQogICMg Q29kZSBmcm9tIG1vZHVsZSBta2FuY2VzZGlyczoNCiAgIyBDb2RlIGZyb20gbW9kdWxlIG1rZGly Og0KICAjIENvZGUgZnJvbSBtb2R1bGUgbWtkaXItcDoNCiAgIyBDb2RlIGZyb20gbW9kdWxlIG1r ZGlyLXRlc3RzOg0KICAjIENvZGUgZnJvbSBtb2R1bGUgbWtzdGVtcDoNCiAgIyBDb2RlIGZyb20g bW9kdWxlIG1rdGltZToNCiAgIyBDb2RlIGZyb20gbW9kdWxlIG1vZGVjaGFuZ2U6DQogICMgQ29k ZSBmcm9tIG1vZHVsZSBtb3VudGxpc3Q6DQogICMgQ29kZSBmcm9tIG1vZHVsZSBtcHNvcnQ6DQog ICMgQ29kZSBmcm9tIG1vZHVsZSBtdWx0aWFyY2g6DQogICMgQ29kZSBmcm9tIG1vZHVsZSBuYW5v c2xlZXA6DQogICMgQ29kZSBmcm9tIG1vZHVsZSBuYW5vc2xlZXAtdGVzdHM6DQogICMgQ29kZSBm cm9tIG1vZHVsZSBuZXRkYjoNCiAgIyBDb2RlIGZyb20gbW9kdWxlIG5ldGRiLXRlc3RzOg0KICAj IENvZGUgZnJvbSBtb2R1bGUgbmV0aW5ldF9pbjoNCiAgIyBDb2RlIGZyb20gbW9kdWxlIG5ldGlu ZXRfaW4tdGVzdHM6DQogICMgQ29kZSBmcm9tIG1vZHVsZSBubF9sYW5naW5mbzoNCiAgIyBDb2Rl IGZyb20gbW9kdWxlIG5sX2xhbmdpbmZvLXRlc3RzOg0KICAjIENvZGUgZnJvbSBtb2R1bGUgbm9j cmFzaDoNCiAgIyBDb2RlIGZyb20gbW9kdWxlIG5wcm9jOg0KICAjIENvZGUgZnJvbSBtb2R1bGUg b2JzdGFjazoNCiAgIyBDb2RlIGZyb20gbW9kdWxlIG9wZW46DQogICMgQ29kZSBmcm9tIG1vZHVs ZSBvcGVuLXRlc3RzOg0KICAjIENvZGUgZnJvbSBtb2R1bGUgb3BlbmF0Og0KICAjIENvZGUgZnJv bSBtb2R1bGUgb3BlbmF0LWRpZToNCiAgIyBDb2RlIGZyb20gbW9kdWxlIG9wZW5hdC1zYWZlcjoN CiAgIyBDb2RlIGZyb20gbW9kdWxlIG9wZW5hdC1zYWZlci10ZXN0czoNCiAgIyBDb2RlIGZyb20g bW9kdWxlIG9wZW5hdC10ZXN0czoNCiAgIyBDb2RlIGZyb20gbW9kdWxlIHBhcnNlLWRhdGV0aW1l Og0KICAjIENvZGUgZnJvbSBtb2R1bGUgcGFyc2UtZGF0ZXRpbWUtdGVzdHM6DQogICMgQ29kZSBm cm9tIG1vZHVsZSBwYXRobWF4Og0KICAjIENvZGUgZnJvbSBtb2R1bGUgcGVybDoNCiAgIyBDb2Rl IGZyb20gbW9kdWxlIHBlcnJvcjoNCiAgIyBDb2RlIGZyb20gbW9kdWxlIHBlcnJvci10ZXN0czoN CiAgIyBDb2RlIGZyb20gbW9kdWxlIHBoeXNtZW06DQogICMgQ29kZSBmcm9tIG1vZHVsZSBwaXBl LXBvc2l4Og0KICAjIENvZGUgZnJvbSBtb2R1bGUgcGlwZS1wb3NpeC10ZXN0czoNCiAgIyBDb2Rl IGZyb20gbW9kdWxlIHBvc2l4LXNoZWxsOg0KICAjIENvZGUgZnJvbSBtb2R1bGUgcG9zaXh0bToN CiAgIyBDb2RlIGZyb20gbW9kdWxlIHBvc2l4dG0tdGVzdHM6DQogICMgQ29kZSBmcm9tIG1vZHVs ZSBwb3NpeHZlcjoNCiAgIyBDb2RlIGZyb20gbW9kdWxlIHByaW50Zi1mcmV4cDoNCiAgIyBDb2Rl IGZyb20gbW9kdWxlIHByaW50Zi1mcmV4cC10ZXN0czoNCiAgIyBDb2RlIGZyb20gbW9kdWxlIHBy aW50Zi1mcmV4cGw6DQogICMgQ29kZSBmcm9tIG1vZHVsZSBwcmludGYtZnJleHBsLXRlc3RzOg0K ICAjIENvZGUgZnJvbSBtb2R1bGUgcHJpbnRmLXNhZmU6DQogICMgQ29kZSBmcm9tIG1vZHVsZSBw cml2LXNldDoNCiAgIyBDb2RlIGZyb20gbW9kdWxlIHByaXYtc2V0LXRlc3RzOg0KICAjIENvZGUg ZnJvbSBtb2R1bGUgcHJvZ25hbWU6DQogICMgQ29kZSBmcm9tIG1vZHVsZSBwcm9wZXJuYW1lOg0K ICAjIENvZGUgZnJvbSBtb2R1bGUgcHRocmVhZDoNCiAgIyBDb2RlIGZyb20gbW9kdWxlIHB1dGVu djoNCiAgIyBDb2RlIGZyb20gbW9kdWxlIHF1b3RlOg0KICAjIENvZGUgZnJvbSBtb2R1bGUgcXVv dGVhcmc6DQogICMgQ29kZSBmcm9tIG1vZHVsZSBxdW90ZWFyZy1zaW1wbGU6DQogICMgQ29kZSBm cm9tIG1vZHVsZSBxdW90ZWFyZy1zaW1wbGUtdGVzdHM6DQogICMgQ29kZSBmcm9tIG1vZHVsZSBy YW5kaW50Og0KICAjIENvZGUgZnJvbSBtb2R1bGUgcmFuZHBlcm06DQogICMgQ29kZSBmcm9tIG1v ZHVsZSByYW5kcmVhZDoNCiAgIyBDb2RlIGZyb20gbW9kdWxlIHJhbmRyZWFkLXRlc3RzOg0KICAj IENvZGUgZnJvbSBtb2R1bGUgcmVhZC1maWxlOg0KICAjIENvZGUgZnJvbSBtb2R1bGUgcmVhZC1m aWxlLXRlc3RzOg0KICAjIENvZGUgZnJvbSBtb2R1bGUgcmVhZGxpbms6DQogICMgQ29kZSBmcm9t IG1vZHVsZSByZWFkbGluay10ZXN0czoNCiAgIyBDb2RlIGZyb20gbW9kdWxlIHJlYWRsaW5rYXQ6 DQogICMgQ29kZSBmcm9tIG1vZHVsZSByZWFkbGlua2F0LXRlc3RzOg0KICAjIENvZGUgZnJvbSBt b2R1bGUgcmVhZHRva2VuczoNCiAgIyBDb2RlIGZyb20gbW9kdWxlIHJlYWR0b2tlbnMwOg0KICAj IENvZGUgZnJvbSBtb2R1bGUgcmVhZHV0bXA6DQogICMgQ29kZSBmcm9tIG1vZHVsZSByZWFsbG9j LWdudToNCiAgIyBDb2RlIGZyb20gbW9kdWxlIHJlYWxsb2MtZ251LXRlc3RzOg0KICAjIENvZGUg ZnJvbSBtb2R1bGUgcmVhbGxvYy1wb3NpeDoNCiAgIyBDb2RlIGZyb20gbW9kdWxlIHJlZ2V4Og0K ICAjIENvZGUgZnJvbSBtb2R1bGUgcmVtb3ZlOg0KICAjIENvZGUgZnJvbSBtb2R1bGUgcmVtb3Zl LXRlc3RzOg0KICAjIENvZGUgZnJvbSBtb2R1bGUgcmVuYW1lOg0KICAjIENvZGUgZnJvbSBtb2R1 bGUgcmVuYW1lLXRlc3RzOg0KICAjIENvZGUgZnJvbSBtb2R1bGUgcm1kaXI6DQogICMgQ29kZSBm cm9tIG1vZHVsZSBybWRpci10ZXN0czoNCiAgIyBDb2RlIGZyb20gbW9kdWxlIHJvb3QtZGV2LWlu bzoNCiAgIyBDb2RlIGZyb20gbW9kdWxlIHJwbWF0Y2g6DQogICMgQ29kZSBmcm9tIG1vZHVsZSBz YWZlLXJlYWQ6DQogICMgQ29kZSBmcm9tIG1vZHVsZSBzYWZlLXdyaXRlOg0KICAjIENvZGUgZnJv bSBtb2R1bGUgc2FtZToNCiAgIyBDb2RlIGZyb20gbW9kdWxlIHNhbWUtaW5vZGU6DQogICMgQ29k ZSBmcm9tIG1vZHVsZSBzYXZlLWN3ZDoNCiAgIyBDb2RlIGZyb20gbW9kdWxlIHNhdmVkaXI6DQog ICMgQ29kZSBmcm9tIG1vZHVsZSBzYXZld2Q6DQogICMgQ29kZSBmcm9tIG1vZHVsZSBzY2hlZDoN CiAgIyBDb2RlIGZyb20gbW9kdWxlIHNjaGVkLXRlc3RzOg0KICAjIENvZGUgZnJvbSBtb2R1bGUg c2VsZWN0Og0KICAjIENvZGUgZnJvbSBtb2R1bGUgc2VsZWN0LXRlc3RzOg0KICAjIENvZGUgZnJv bSBtb2R1bGUgc2VsaW51eC1hdDoNCiAgIyBDb2RlIGZyb20gbW9kdWxlIHNlbGludXgtaDoNCiAg IyBDb2RlIGZyb20gbW9kdWxlIHNlcnZlbnQ6DQogICMgQ29kZSBmcm9tIG1vZHVsZSBzZXRlbnY6 DQogICMgQ29kZSBmcm9tIG1vZHVsZSBzZXRlbnYtdGVzdHM6DQogICMgQ29kZSBmcm9tIG1vZHVs ZSBzZXRsb2NhbGU6DQogICMgQ29kZSBmcm9tIG1vZHVsZSBzZXRsb2NhbGUtdGVzdHM6DQogICMg Q29kZSBmcm9tIG1vZHVsZSBzZXRzb2Nrb3B0Og0KICAjIENvZGUgZnJvbSBtb2R1bGUgc2V0dGlt ZToNCiAgIyBDb2RlIGZyb20gbW9kdWxlIHNpZzJzdHI6DQogICMgQ29kZSBmcm9tIG1vZHVsZSBz aWdhY3Rpb246DQogICMgQ29kZSBmcm9tIG1vZHVsZSBzaWdhY3Rpb24tdGVzdHM6DQogICMgQ29k ZSBmcm9tIG1vZHVsZSBzaWduYWw6DQogICMgQ29kZSBmcm9tIG1vZHVsZSBzaWduYWwtdGVzdHM6 DQogICMgQ29kZSBmcm9tIG1vZHVsZSBzaWduYml0Og0KICAjIENvZGUgZnJvbSBtb2R1bGUgc2ln bmJpdC10ZXN0czoNCiAgIyBDb2RlIGZyb20gbW9kdWxlIHNpZ3Byb2NtYXNrOg0KICAjIENvZGUg ZnJvbSBtb2R1bGUgc2l6ZV9tYXg6DQogICMgQ29kZSBmcm9tIG1vZHVsZSBzbGVlcDoNCiAgIyBD b2RlIGZyb20gbW9kdWxlIHNsZWVwLXRlc3RzOg0KICAjIENvZGUgZnJvbSBtb2R1bGUgc25wcmlu dGY6DQogICMgQ29kZSBmcm9tIG1vZHVsZSBzbnByaW50Zi10ZXN0czoNCiAgIyBDb2RlIGZyb20g bW9kdWxlIHNvY2tldDoNCiAgIyBDb2RlIGZyb20gbW9kdWxlIHNvY2tldGxpYjoNCiAgIyBDb2Rl IGZyb20gbW9kdWxlIHNvY2tldHM6DQogICMgQ29kZSBmcm9tIG1vZHVsZSBzb2NrZXRzLXRlc3Rz Og0KICAjIENvZGUgZnJvbSBtb2R1bGUgc29ja2xlbjoNCiAgIyBDb2RlIGZyb20gbW9kdWxlIHNz aXplX3Q6DQogICMgQ29kZSBmcm9tIG1vZHVsZSBzdGF0Og0KICAjIENvZGUgZnJvbSBtb2R1bGUg c3RhdC1tYWNyb3M6DQogICMgQ29kZSBmcm9tIG1vZHVsZSBzdGF0LXRlc3RzOg0KICAjIENvZGUg ZnJvbSBtb2R1bGUgc3RhdC10aW1lOg0KICAjIENvZGUgZnJvbSBtb2R1bGUgc3RhdC10aW1lLXRl c3RzOg0KICAjIENvZGUgZnJvbSBtb2R1bGUgc3RkYXJnOg0KDQogICMgQ29kZSBmcm9tIG1vZHVs ZSBzdGRib29sOg0KICAjIENvZGUgZnJvbSBtb2R1bGUgc3RkYm9vbC10ZXN0czoNCiAgIyBDb2Rl IGZyb20gbW9kdWxlIHN0ZGRlZjoNCiAgIyBDb2RlIGZyb20gbW9kdWxlIHN0ZGRlZi10ZXN0czoN CiAgIyBDb2RlIGZyb20gbW9kdWxlIHN0ZGludDoNCiAgIyBDb2RlIGZyb20gbW9kdWxlIHN0ZGlu dC10ZXN0czoNCiAgIyBDb2RlIGZyb20gbW9kdWxlIHN0ZGlvOg0KICAjIENvZGUgZnJvbSBtb2R1 bGUgc3RkaW8tdGVzdHM6DQogICMgQ29kZSBmcm9tIG1vZHVsZSBzdGRsaWI6DQogICMgQ29kZSBm cm9tIG1vZHVsZSBzdGRsaWItc2FmZXI6DQogICMgQ29kZSBmcm9tIG1vZHVsZSBzdGRsaWItdGVz dHM6DQogICMgQ29kZSBmcm9tIG1vZHVsZSBzdHBjcHk6DQogICMgQ29kZSBmcm9tIG1vZHVsZSBz dHBuY3B5Og0KICAjIENvZGUgZnJvbSBtb2R1bGUgc3RyZHVwLXBvc2l4Og0KICAjIENvZGUgZnJv bSBtb2R1bGUgc3RyZXE6DQogICMgQ29kZSBmcm9tIG1vZHVsZSBzdHJlcnJvcjoNCiAgIyBDb2Rl IGZyb20gbW9kdWxlIHN0cmVycm9yLXRlc3RzOg0KICAjIENvZGUgZnJvbSBtb2R1bGUgc3RyZnRp bWU6DQogICMgQ29kZSBmcm9tIG1vZHVsZSBzdHJmdGltZS10ZXN0czoNCiAgIyBDb2RlIGZyb20g bW9kdWxlIHN0cmljb252Og0KICAjIENvZGUgZnJvbSBtb2R1bGUgc3RyaWNvbnYtdGVzdHM6DQog ICMgQ29kZSBmcm9tIG1vZHVsZSBzdHJpbmc6DQogICMgQ29kZSBmcm9tIG1vZHVsZSBzdHJpbmct dGVzdHM6DQogICMgQ29kZSBmcm9tIG1vZHVsZSBzdHJuZHVwOg0KICAjIENvZGUgZnJvbSBtb2R1 bGUgc3RybmxlbjoNCiAgIyBDb2RlIGZyb20gbW9kdWxlIHN0cm5sZW4tdGVzdHM6DQogICMgQ29k ZSBmcm9tIG1vZHVsZSBzdHJubGVuMToNCiAgIyBDb2RlIGZyb20gbW9kdWxlIHN0cnNpZ25hbDoN CiAgIyBDb2RlIGZyb20gbW9kdWxlIHN0cnNpZ25hbC10ZXN0czoNCiAgIyBDb2RlIGZyb20gbW9k dWxlIHN0cnN0ci1zaW1wbGU6DQogICMgQ29kZSBmcm9tIG1vZHVsZSBzdHJ0b2Q6DQogICMgQ29k ZSBmcm9tIG1vZHVsZSBzdHJ0b2QtdGVzdHM6DQogICMgQ29kZSBmcm9tIG1vZHVsZSBzdHJ0b2lt YXg6DQogICMgQ29kZSBmcm9tIG1vZHVsZSBzdHJ0b2w6DQogICMgQ29kZSBmcm9tIG1vZHVsZSBz dHJ0b2xsOg0KICAjIENvZGUgZnJvbSBtb2R1bGUgc3RydG91bDoNCiAgIyBDb2RlIGZyb20gbW9k dWxlIHN0cnRvdWxsOg0KICAjIENvZGUgZnJvbSBtb2R1bGUgc3RydG91bWF4Og0KICAjIENvZGUg ZnJvbSBtb2R1bGUgc3ltbGluazoNCiAgIyBDb2RlIGZyb20gbW9kdWxlIHN5bWxpbmstdGVzdHM6 DQogICMgQ29kZSBmcm9tIG1vZHVsZSBzeW1saW5rYXQ6DQogICMgQ29kZSBmcm9tIG1vZHVsZSBz eW1saW5rYXQtdGVzdHM6DQogICMgQ29kZSBmcm9tIG1vZHVsZSBzeXNfaW9jdGw6DQogICMgQ29k ZSBmcm9tIG1vZHVsZSBzeXNfaW9jdGwtdGVzdHM6DQogICMgQ29kZSBmcm9tIG1vZHVsZSBzeXNf c2VsZWN0Og0KICAjIENvZGUgZnJvbSBtb2R1bGUgc3lzX3NlbGVjdC10ZXN0czoNCiAgIyBDb2Rl IGZyb20gbW9kdWxlIHN5c19zb2NrZXQ6DQogICMgQ29kZSBmcm9tIG1vZHVsZSBzeXNfc29ja2V0 LXRlc3RzOg0KICAjIENvZGUgZnJvbSBtb2R1bGUgc3lzX3N0YXQ6DQogICMgQ29kZSBmcm9tIG1v ZHVsZSBzeXNfc3RhdC10ZXN0czoNCiAgIyBDb2RlIGZyb20gbW9kdWxlIHN5c190aW1lOg0KICAj IENvZGUgZnJvbSBtb2R1bGUgc3lzX3RpbWUtdGVzdHM6DQogICMgQ29kZSBmcm9tIG1vZHVsZSBz eXNfdXRzbmFtZToNCiAgIyBDb2RlIGZyb20gbW9kdWxlIHN5c191dHNuYW1lLXRlc3RzOg0KICAj IENvZGUgZnJvbSBtb2R1bGUgc3lzX3dhaXQ6DQogICMgQ29kZSBmcm9tIG1vZHVsZSBzeXNfd2Fp dC10ZXN0czoNCiAgIyBDb2RlIGZyb20gbW9kdWxlIHRlbXBuYW1lOg0KICAjIENvZGUgZnJvbSBt b2R1bGUgdGVybWlvczoNCiAgIyBDb2RlIGZyb20gbW9kdWxlIHRlcm1pb3MtdGVzdHM6DQogICMg Q29kZSBmcm9tIG1vZHVsZSB0aHJlYWQ6DQogICMgQ29kZSBmcm9tIG1vZHVsZSB0aHJlYWRsaWI6 DQoNCg0KDQogICMgQ29kZSBmcm9tIG1vZHVsZSB0aW1lOg0KICAjIENvZGUgZnJvbSBtb2R1bGUg dGltZS10ZXN0czoNCiAgIyBDb2RlIGZyb20gbW9kdWxlIHRpbWVfcjoNCiAgIyBDb2RlIGZyb20g bW9kdWxlIHRpbWVzcGVjOg0KICAjIENvZGUgZnJvbSBtb2R1bGUgdGxzOg0KICAjIENvZGUgZnJv bSBtb2R1bGUgdGxzLXRlc3RzOg0KICAjIENvZGUgZnJvbSBtb2R1bGUgdHJpbToNCiAgIyBDb2Rl IGZyb20gbW9kdWxlIHR6c2V0Og0KICAjIENvZGUgZnJvbSBtb2R1bGUgdTY0Og0KICAjIENvZGUg ZnJvbSBtb2R1bGUgdTY0LXRlc3RzOg0KICAjIENvZGUgZnJvbSBtb2R1bGUgdW5hbWU6DQogICMg Q29kZSBmcm9tIG1vZHVsZSB1bmFtZS10ZXN0czoNCiAgIyBDb2RlIGZyb20gbW9kdWxlIHVuaWNv ZGVpbzoNCiAgIyBDb2RlIGZyb20gbW9kdWxlIHVuaXN0ZDoNCiAgIyBDb2RlIGZyb20gbW9kdWxl IHVuaXN0ZC1zYWZlcjoNCiAgIyBDb2RlIGZyb20gbW9kdWxlIHVuaXN0ZC1zYWZlci10ZXN0czoN CiAgIyBDb2RlIGZyb20gbW9kdWxlIHVuaXN0ZC10ZXN0czoNCiAgIyBDb2RlIGZyb20gbW9kdWxl IHVuaXN0ci9iYXNlOg0KICAjIENvZGUgZnJvbSBtb2R1bGUgdW5pc3RyL3U4LXVjdG9tYjoNCiAg IyBDb2RlIGZyb20gbW9kdWxlIHVuaXN0ci91OC11Y3RvbWItdGVzdHM6DQogICMgQ29kZSBmcm9t IG1vZHVsZSB1bml0eXBlczoNCiAgIyBDb2RlIGZyb20gbW9kdWxlIHVuaXdpZHRoL2Jhc2U6DQog ICMgQ29kZSBmcm9tIG1vZHVsZSB1bml3aWR0aC93aWR0aDoNCiAgIyBDb2RlIGZyb20gbW9kdWxl IHVuaXdpZHRoL3dpZHRoLXRlc3RzOg0KICAjIENvZGUgZnJvbSBtb2R1bGUgdW5saW5rOg0KICAj IENvZGUgZnJvbSBtb2R1bGUgdW5saW5rLWJ1c3k6DQogICMgQ29kZSBmcm9tIG1vZHVsZSB1bmxp bmstdGVzdHM6DQogICMgQ29kZSBmcm9tIG1vZHVsZSB1bmxpbmtkaXI6DQogICMgQ29kZSBmcm9t IG1vZHVsZSB1bmxvY2tlZC1pbzoNCiAgIyBDb2RlIGZyb20gbW9kdWxlIHVuc2V0ZW52Og0KICAj IENvZGUgZnJvbSBtb2R1bGUgdW5zZXRlbnYtdGVzdHM6DQogICMgQ29kZSBmcm9tIG1vZHVsZSB1 bnVzZWQtcGFyYW1ldGVyOg0KICAjIENvZGUgZnJvbSBtb2R1bGUgdXBkYXRlLWNvcHlyaWdodDoN CiAgIyBDb2RlIGZyb20gbW9kdWxlIHVwZGF0ZS1jb3B5cmlnaHQtdGVzdHM6DQogICMgQ29kZSBm cm9tIG1vZHVsZSB1cHRpbWU6DQogICMgQ29kZSBmcm9tIG1vZHVsZSB1c2VsZXNzLWlmLWJlZm9y ZS1mcmVlOg0KICAjIENvZGUgZnJvbSBtb2R1bGUgdXNlcnNwZWM6DQogICMgQ29kZSBmcm9tIG1v ZHVsZSB1c2Vyc3BlYy10ZXN0czoNCiAgIyBDb2RlIGZyb20gbW9kdWxlIHVzbGVlcDoNCiAgIyBD b2RlIGZyb20gbW9kdWxlIHVzbGVlcC10ZXN0czoNCiAgIyBDb2RlIGZyb20gbW9kdWxlIHV0aW1l Y21wOg0KICAjIENvZGUgZnJvbSBtb2R1bGUgdXRpbWVuczoNCiAgIyBDb2RlIGZyb20gbW9kdWxl IHV0aW1lbnMtdGVzdHM6DQogICMgQ29kZSBmcm9tIG1vZHVsZSB1dGltZW5zYXQ6DQogICMgQ29k ZSBmcm9tIG1vZHVsZSB1dGltZW5zYXQtdGVzdHM6DQogICMgQ29kZSBmcm9tIG1vZHVsZSB2YXNu cHJpbnRmOg0KICAjIENvZGUgZnJvbSBtb2R1bGUgdmFzbnByaW50Zi10ZXN0czoNCiAgIyBDb2Rl IGZyb20gbW9kdWxlIHZhc3ByaW50ZjoNCiAgIyBDb2RlIGZyb20gbW9kdWxlIHZhc3ByaW50Zi1w b3NpeDoNCiAgIyBDb2RlIGZyb20gbW9kdWxlIHZhc3ByaW50Zi1wb3NpeC10ZXN0czoNCiAgIyBD b2RlIGZyb20gbW9kdWxlIHZhc3ByaW50Zi10ZXN0czoNCiAgIyBDb2RlIGZyb20gbW9kdWxlIHZj LWxpc3QtZmlsZXM6DQogICMgQ29kZSBmcm9tIG1vZHVsZSB2Yy1saXN0LWZpbGVzLXRlc3RzOg0K ICAjIENvZGUgZnJvbSBtb2R1bGUgdmVyaWZ5Og0KICAjIENvZGUgZnJvbSBtb2R1bGUgdmVyaWZ5 LXRlc3RzOg0KICAjIENvZGUgZnJvbSBtb2R1bGUgdmVycm9yOg0KICAjIENvZGUgZnJvbSBtb2R1 bGUgdmVyc2lvbi1ldGM6DQogICMgQ29kZSBmcm9tIG1vZHVsZSB2ZXJzaW9uLWV0Yy1mc2Y6DQog ICMgQ29kZSBmcm9tIG1vZHVsZSB2ZXJzaW9uLWV0Yy10ZXN0czoNCiAgIyBDb2RlIGZyb20gbW9k dWxlIHZmcHJpbnRmLXBvc2l4Og0KICAjIENvZGUgZnJvbSBtb2R1bGUgdmZwcmludGYtcG9zaXgt dGVzdHM6DQogICMgQ29kZSBmcm9tIG1vZHVsZSB2cHJpbnRmLXBvc2l4Og0KICAjIENvZGUgZnJv bSBtb2R1bGUgdnByaW50Zi1wb3NpeC10ZXN0czoNCiAgIyBDb2RlIGZyb20gbW9kdWxlIHdhcm4t b24tdXNlOg0KICAjIENvZGUgZnJvbSBtb2R1bGUgd2FybmluZ3M6DQogICMgQ29kZSBmcm9tIG1v ZHVsZSB3Y2hhcjoNCiAgIyBDb2RlIGZyb20gbW9kdWxlIHdjaGFyLXRlc3RzOg0KICAjIENvZGUg ZnJvbSBtb2R1bGUgd2NydG9tYjoNCiAgIyBDb2RlIGZyb20gbW9kdWxlIHdjcnRvbWItdGVzdHM6 DQogICMgQ29kZSBmcm9tIG1vZHVsZSB3Y3N3aWR0aDoNCiAgIyBDb2RlIGZyb20gbW9kdWxlIHdj dG9iOg0KICAjIENvZGUgZnJvbSBtb2R1bGUgd2N0b21iOg0KICAjIENvZGUgZnJvbSBtb2R1bGUg d2N0eXBlLWg6DQogICMgQ29kZSBmcm9tIG1vZHVsZSB3Y3R5cGUtaC10ZXN0czoNCiAgIyBDb2Rl IGZyb20gbW9kdWxlIHdjd2lkdGg6DQogICMgQ29kZSBmcm9tIG1vZHVsZSB3Y3dpZHRoLXRlc3Rz Og0KICAjIENvZGUgZnJvbSBtb2R1bGUgd2luc3otaW9jdGw6DQogICMgQ29kZSBmcm9tIG1vZHVs ZSB3aW5zei10ZXJtaW9zOg0KICAjIENvZGUgZnJvbSBtb2R1bGUgd3JpdGU6DQogICMgQ29kZSBm cm9tIG1vZHVsZSB3cml0ZS1hbnktZmlsZToNCiAgIyBDb2RlIGZyb20gbW9kdWxlIHhhbGxvYzoN CiAgIyBDb2RlIGZyb20gbW9kdWxlIHhhbGxvYy1kaWU6DQogICMgQ29kZSBmcm9tIG1vZHVsZSB4 YWxsb2MtZGllLXRlc3RzOg0KICAjIENvZGUgZnJvbSBtb2R1bGUgeGZyZW9wZW46DQogICMgQ29k ZSBmcm9tIG1vZHVsZSB4Z2V0Y3dkOg0KICAjIENvZGUgZnJvbSBtb2R1bGUgeGdldGhvc3RuYW1l Og0KICAjIENvZGUgZnJvbSBtb2R1bGUgeG1lbWNvbGw6DQogICMgQ29kZSBmcm9tIG1vZHVsZSB4 bmFub3NsZWVwOg0KICAjIENvZGUgZnJvbSBtb2R1bGUgeHByaW50ZjoNCiAgIyBDb2RlIGZyb20g bW9kdWxlIHhwcmludGYtcG9zaXg6DQogICMgQ29kZSBmcm9tIG1vZHVsZSB4cHJpbnRmLXBvc2l4 LXRlc3RzOg0KICAjIENvZGUgZnJvbSBtb2R1bGUgeHJlYWRsaW5rOg0KICAjIENvZGUgZnJvbSBt b2R1bGUgeHNpemU6DQogICMgQ29kZSBmcm9tIG1vZHVsZSB4c3RyaWNvbnY6DQogICMgQ29kZSBm cm9tIG1vZHVsZSB4c3RybmR1cDoNCiAgIyBDb2RlIGZyb20gbW9kdWxlIHhzdHJ0b2Q6DQogICMg Q29kZSBmcm9tIG1vZHVsZSB4c3RydG9pbWF4Og0KICAjIENvZGUgZnJvbSBtb2R1bGUgeHN0cnRv aW1heC10ZXN0czoNCiAgIyBDb2RlIGZyb20gbW9kdWxlIHhzdHJ0b2w6DQogICMgQ29kZSBmcm9t IG1vZHVsZSB4c3RydG9sLXRlc3RzOg0KICAjIENvZGUgZnJvbSBtb2R1bGUgeHN0cnRvbGQ6DQog ICMgQ29kZSBmcm9tIG1vZHVsZSB4c3RydG91bWF4Og0KICAjIENvZGUgZnJvbSBtb2R1bGUgeHN0 cnRvdW1heC10ZXN0czoNCiAgIyBDb2RlIGZyb20gbW9kdWxlIHh2YXNwcmludGY6DQogICMgQ29k ZSBmcm9tIG1vZHVsZSB4dmFzcHJpbnRmLXRlc3RzOg0KICAjIENvZGUgZnJvbSBtb2R1bGUgeWVz bm86DQogICMgQ29kZSBmcm9tIG1vZHVsZSB5ZXNuby10ZXN0czoNCiAgIyBDb2RlIGZyb20gbW9k dWxlIHlpZWxkOg0KDQoNCg0KDQoNCiAgICAgICAgICBMSUJDX0ZBVEFMX1NUREVSUl89MQ0KICBl eHBvcnQgTElCQ19GQVRBTF9TVERFUlJfDQoNCnsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVu by0kTElORU5PfTogY2hlY2tpbmcgZm9yIGlubGluZSIgPiY1DQokYXNfZWNob19uICJjaGVja2lu ZyBmb3IgaW5saW5lLi4uICIgPiY2OyB9DQppZiAke2FjX2N2X2NfaW5saW5lKzp9IGZhbHNlOyB0 aGVuIDoNCiAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYNCmVsc2UNCiAgYWNfY3ZfY19pbmxp bmU9bm8NCmZvciBhY19rdyBpbiBpbmxpbmUgX19pbmxpbmVfXyBfX2lubGluZTsgZG8NCiAgY2F0 IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dA0KLyogZW5kIGNvbmZkZWZz LmguICAqLw0KI2lmbmRlZiBfX2NwbHVzcGx1cw0KdHlwZWRlZiBpbnQgZm9vX3Q7DQpzdGF0aWMg JGFjX2t3IGZvb190IHN0YXRpY19mb28gKCkge3JldHVybiAwOyB9DQokYWNfa3cgZm9vX3QgZm9v ICgpIHtyZXR1cm4gMDsgfQ0KI2VuZGlmDQoNCl9BQ0VPRg0KaWYgYWNfZm5fY190cnlfY29tcGls ZSAiJExJTkVOTyI7IHRoZW4gOg0KICBhY19jdl9jX2lubGluZT0kYWNfa3cNCmZpDQpybSAtZiBj b3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQNCiAg dGVzdCAiJGFjX2N2X2NfaW5saW5lIiAhPSBubyAmJiBicmVhaw0KZG9uZQ0KDQpmaQ0KeyAkYXNf ZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9jX2lubGlu ZSIgPiY1DQokYXNfZWNobyAiJGFjX2N2X2NfaW5saW5lIiA+JjY7IH0NCg0KY2FzZSAkYWNfY3Zf Y19pbmxpbmUgaW4NCiAgaW5saW5lIHwgeWVzKSA7Ow0KICAqKQ0KICAgIGNhc2UgJGFjX2N2X2Nf aW5saW5lIGluDQogICAgICBubykgYWNfdmFsPTs7DQogICAgICAqKSBhY192YWw9JGFjX2N2X2Nf aW5saW5lOzsNCiAgICBlc2FjDQogICAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRg0KI2lmbmRl ZiBfX2NwbHVzcGx1cw0KI2RlZmluZSBpbmxpbmUgJGFjX3ZhbA0KI2VuZGlmDQpfQUNFT0YNCiAg ICA7Ow0KZXNhYw0KDQphY19mbl9jX2NoZWNrX3R5cGUgIiRMSU5FTk8iICJzaXplX3QiICJhY19j dl90eXBlX3NpemVfdCIgIiRhY19pbmNsdWRlc19kZWZhdWx0Ig0KaWYgdGVzdCAieCRhY19jdl90 eXBlX3NpemVfdCIgPSB4eWVzOyB0aGVuIDoNCg0KZWxzZQ0KDQpjYXQgPj5jb25mZGVmcy5oIDw8 X0FDRU9GDQojZGVmaW5lIHNpemVfdCB1bnNpZ25lZCBpbnQNCl9BQ0VPRg0KDQpmaQ0KDQojIFRo ZSBVbHRyaXggNC4yIG1pcHMgYnVpbHRpbiBhbGxvY2EgZGVjbGFyZWQgYnkgYWxsb2NhLmggb25s eSB3b3Jrcw0KIyBmb3IgY29uc3RhbnQgYXJndW1lbnRzLiAgVXNlbGVzcyENCnsgJGFzX2VjaG8g IiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIHdvcmtpbmcgYWxsb2Nh LmgiID4mNQ0KJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIHdvcmtpbmcgYWxsb2NhLmguLi4gIiA+ JjY7IH0NCmlmICR7YWNfY3Zfd29ya2luZ19hbGxvY2FfaCs6fSBmYWxzZTsgdGhlbiA6DQogICRh c19lY2hvX24gIihjYWNoZWQpICIgPiY2DQplbHNlDQogIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNF T0YgPmNvbmZ0ZXN0LiRhY19leHQNCi8qIGVuZCBjb25mZGVmcy5oLiAgKi8NCiNpbmNsdWRlIDxh bGxvY2EuaD4NCmludA0KbWFpbiAoKQ0Kew0KY2hhciAqcCA9IChjaGFyICopIGFsbG9jYSAoMiAq IHNpemVvZiAoaW50KSk7DQoJCQkgIGlmIChwKSByZXR1cm4gMDsNCiAgOw0KICByZXR1cm4gMDsN Cn0NCl9BQ0VPRg0KaWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOg0KICBhY19j dl93b3JraW5nX2FsbG9jYV9oPXllcw0KZWxzZQ0KICBhY19jdl93b3JraW5nX2FsbG9jYV9oPW5v DQpmaQ0Kcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcDQogICAg Y29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQNCmZpDQp7ICRhc19lY2hvICIkYXNf bWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X3dvcmtpbmdfYWxsb2NhX2gi ID4mNQ0KJGFzX2VjaG8gIiRhY19jdl93b3JraW5nX2FsbG9jYV9oIiA+JjY7IH0NCmlmIHRlc3Qg JGFjX2N2X3dvcmtpbmdfYWxsb2NhX2ggPSB5ZXM7IHRoZW4NCg0KJGFzX2VjaG8gIiNkZWZpbmUg SEFWRV9BTExPQ0FfSCAxIiA+PmNvbmZkZWZzLmgNCg0KZmkNCg0KeyAkYXNfZWNobyAiJGFzX21l OiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgYWxsb2NhIiA+JjUNCiRhc19lY2hv X24gImNoZWNraW5nIGZvciBhbGxvY2EuLi4gIiA+JjY7IH0NCmlmICR7YWNfY3ZfZnVuY19hbGxv Y2Ffd29ya3MrOn0gZmFsc2U7IHRoZW4gOg0KICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNg0K ZWxzZQ0KICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0DQovKiBl bmQgY29uZmRlZnMuaC4gICovDQojaW5jbHVkZSAiY29uZmRlZnMuaCINCiNpZmRlZiBfX1RBTkRF TQ0KI2luY2x1ZGUgPGZsb3NzLmg+DQojZWxzZQ0KI2lmZGVmIF9fR05VQ19fDQojIGRlZmluZSBh bGxvY2EgX19idWlsdGluX2FsbG9jYQ0KI2Vsc2UNCiMgaWZkZWYgX01TQ19WRVINCiMgIGluY2x1 ZGUgPG1hbGxvYy5oPg0KIyAgZGVmaW5lIGFsbG9jYSBfYWxsb2NhDQojIGVsc2UNCiMgIGlmZGVm IEhBVkVfQUxMT0NBX0gNCiMgICBpbmNsdWRlIDxhbGxvY2EuaD4NCiMgIGVsc2UNCiMgICBpZmRl ZiBfQUlYDQogI3ByYWdtYSBhbGxvY2ENCiMgICBlbHNlDQojICAgIGlmbmRlZiBhbGxvY2EgLyog cHJlZGVmaW5lZCBieSBIUCBjYyArT2xpYmNhbGxzICovDQp2b2lkICphbGxvY2EgKHNpemVfdCk7 DQojICAgIGVuZGlmDQojICAgZW5kaWYNCiMgIGVuZGlmDQojIGVuZGlmDQojZW5kaWYNCiNlbmRp Zg0KDQppbnQNCm1haW4gKCkNCnsNCmNoYXIgKnAgPSAoY2hhciAqKSBhbGxvY2EgKDEpOw0KCQkJ CSAgICBpZiAocCkgcmV0dXJuIDA7DQogIDsNCiAgcmV0dXJuIDA7DQp9DQpfQUNFT0YNCmlmIGFj X2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoNCiAgYWNfY3ZfZnVuY19hbGxvY2Ffd29y a3M9eWVzDQplbHNlDQogIGFjX2N2X2Z1bmNfYWxsb2NhX3dvcmtzPW5vDQpmaQ0Kcm0gLWYgY29y ZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcDQogICAgY29uZnRlc3QkYWNfZXhl ZXh0IGNvbmZ0ZXN0LiRhY19leHQNCmZpDQp7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8t JExJTkVOT306IHJlc3VsdDogJGFjX2N2X2Z1bmNfYWxsb2NhX3dvcmtzIiA+JjUNCiRhc19lY2hv ICIkYWNfY3ZfZnVuY19hbGxvY2Ffd29ya3MiID4mNjsgfQ0KDQppZiB0ZXN0ICRhY19jdl9mdW5j X2FsbG9jYV93b3JrcyA9IHllczsgdGhlbg0KDQokYXNfZWNobyAiI2RlZmluZSBIQVZFX0FMTE9D QSAxIiA+PmNvbmZkZWZzLmgNCg0KZWxzZQ0KICAjIFRoZSBTVlIzIGxpYlBXIGFuZCBTVlI0IGxp YnVjYiBib3RoIGNvbnRhaW4gaW5jb21wYXRpYmxlIGZ1bmN0aW9ucw0KIyB0aGF0IGNhdXNlIHRy b3VibGUuICBTb21lIHZlcnNpb25zIGRvIG5vdCBldmVuIGNvbnRhaW4gYWxsb2NhIG9yDQojIGNv bnRhaW4gYSBidWdneSB2ZXJzaW9uLiAgSWYgeW91IHN0aWxsIHdhbnQgdG8gdXNlIHRoZWlyIGFs bG9jYSwNCiMgdXNlIGFyIHRvIGV4dHJhY3QgYWxsb2NhLm8gZnJvbSB0aGVtIGluc3RlYWQgb2Yg Y29tcGlsaW5nIGFsbG9jYS5jLg0KDQoNCg0KDQoNCkFMTE9DQT1cJHtMSUJPQkpESVJ9YWxsb2Nh LiRhY19vYmpleHQNCg0KJGFzX2VjaG8gIiNkZWZpbmUgQ19BTExPQ0EgMSIgPj5jb25mZGVmcy5o DQoNCg0KeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3 aGV0aGVyIFxgYWxsb2NhLmMnIG5lZWRzIENyYXkgaG9va3MiID4mNQ0KJGFzX2VjaG9fbiAiY2hl Y2tpbmcgd2hldGhlciBcYGFsbG9jYS5jJyBuZWVkcyBDcmF5IGhvb2tzLi4uICIgPiY2OyB9DQpp ZiAke2FjX2N2X29zX2NyYXkrOn0gZmFsc2U7IHRoZW4gOg0KICAkYXNfZWNob19uICIoY2FjaGVk KSAiID4mNg0KZWxzZQ0KICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNf ZXh0DQovKiBlbmQgY29uZmRlZnMuaC4gICovDQojaWYgZGVmaW5lZCBDUkFZICYmICEgZGVmaW5l ZCBDUkFZMg0Kd2ViZWNyYXkNCiNlbHNlDQp3ZW5vdGJlY3JheQ0KI2VuZGlmDQoNCl9BQ0VPRg0K aWYgKGV2YWwgIiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCIpIDI+JjUgfA0KICAkRUdSRVAgIndl YmVjcmF5IiA+L2Rldi9udWxsIDI+JjE7IHRoZW4gOg0KICBhY19jdl9vc19jcmF5PXllcw0KZWxz ZQ0KICBhY19jdl9vc19jcmF5PW5vDQpmaQ0Kcm0gLWYgY29uZnRlc3QqDQoNCmZpDQp7ICRhc19l Y2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X29zX2NyYXki ID4mNQ0KJGFzX2VjaG8gIiRhY19jdl9vc19jcmF5IiA+JjY7IH0NCmlmIHRlc3QgJGFjX2N2X29z X2NyYXkgPSB5ZXM7IHRoZW4NCiAgZm9yIGFjX2Z1bmMgaW4gX2dldGI2NyBHRVRCNjcgZ2V0YjY3 OyBkbw0KICAgIGFzX2FjX3Zhcj1gJGFzX2VjaG8gImFjX2N2X2Z1bmNfJGFjX2Z1bmMiIHwgJGFz X3RyX3NoYA0KYWNfZm5fY19jaGVja19mdW5jICIkTElORU5PIiAiJGFjX2Z1bmMiICIkYXNfYWNf dmFyIg0KaWYgZXZhbCB0ZXN0IFwieFwkIiRhc19hY192YXIiXCIgPSB4InllcyI7IHRoZW4gOg0K DQpjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GDQojZGVmaW5lIENSQVlfU1RBQ0tTRUdfRU5EICRh Y19mdW5jDQpfQUNFT0YNCg0KICAgIGJyZWFrDQpmaQ0KDQogIGRvbmUNCmZpDQoNCnsgJGFzX2Vj aG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgc3RhY2sgZGlyZWN0aW9u IGZvciBDIGFsbG9jYSIgPiY1DQokYXNfZWNob19uICJjaGVja2luZyBzdGFjayBkaXJlY3Rpb24g Zm9yIEMgYWxsb2NhLi4uICIgPiY2OyB9DQppZiAke2FjX2N2X2Nfc3RhY2tfZGlyZWN0aW9uKzp9 IGZhbHNlOyB0aGVuIDoNCiAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYNCmVsc2UNCiAgaWYg dGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgPSB5ZXM7IHRoZW4gOg0KICBhY19jdl9jX3N0YWNrX2Rp cmVjdGlvbj0wDQplbHNlDQogIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRh Y19leHQNCi8qIGVuZCBjb25mZGVmcy5oLiAgKi8NCiRhY19pbmNsdWRlc19kZWZhdWx0DQppbnQN CmZpbmRfc3RhY2tfZGlyZWN0aW9uICgpDQp7DQogIHN0YXRpYyBjaGFyICphZGRyID0gMDsNCiAg YXV0byBjaGFyIGR1bW15Ow0KICBpZiAoYWRkciA9PSAwKQ0KICAgIHsNCiAgICAgIGFkZHIgPSAm ZHVtbXk7DQogICAgICByZXR1cm4gZmluZF9zdGFja19kaXJlY3Rpb24gKCk7DQogICAgfQ0KICBl bHNlDQogICAgcmV0dXJuICgmZHVtbXkgPiBhZGRyKSA/IDEgOiAtMTsNCn0NCg0KaW50DQptYWlu ICgpDQp7DQogIHJldHVybiBmaW5kX3N0YWNrX2RpcmVjdGlvbiAoKSA8IDA7DQp9DQpfQUNFT0YN CmlmIGFjX2ZuX2NfdHJ5X3J1biAiJExJTkVOTyI7IHRoZW4gOg0KICBhY19jdl9jX3N0YWNrX2Rp cmVjdGlvbj0xDQplbHNlDQogIGFjX2N2X2Nfc3RhY2tfZGlyZWN0aW9uPS0xDQpmaQ0Kcm0gLWYg Y29yZSAqLmNvcmUgY29yZS5jb25mdGVzdC4qIGdtb24ub3V0IGJiLm91dCBjb25mdGVzdCRhY19l eGVleHQgXA0KICBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LmJlYW0gY29uZnRlc3QuJGFj X2V4dA0KZmkNCg0KZmkNCnsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTog cmVzdWx0OiAkYWNfY3ZfY19zdGFja19kaXJlY3Rpb24iID4mNQ0KJGFzX2VjaG8gIiRhY19jdl9j X3N0YWNrX2RpcmVjdGlvbiIgPiY2OyB9DQpjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GDQojZGVm aW5lIFNUQUNLX0RJUkVDVElPTiAkYWNfY3ZfY19zdGFja19kaXJlY3Rpb24NCl9BQ0VPRg0KDQoN CmZpDQoNCg0KICBHTlVMSUJfSU5FVF9OVE9QPTA7DQogIEdOVUxJQl9JTkVUX1BUT049MDsNCiAg ICBIQVZFX0RFQ0xfSU5FVF9OVE9QPTE7DQogIEhBVkVfREVDTF9JTkVUX1BUT049MTsNCg0KDQoN Cg0KICBmb3IgYWNfaGVhZGVyIGluICRhY19oZWFkZXJfbGlzdA0KZG8gOg0KICBhc19hY19IZWFk ZXI9YCRhc19lY2hvICJhY19jdl9oZWFkZXJfJGFjX2hlYWRlciIgfCAkYXNfdHJfc2hgDQphY19m bl9jX2NoZWNrX2hlYWRlcl9jb21waWxlICIkTElORU5PIiAiJGFjX2hlYWRlciIgIiRhc19hY19I ZWFkZXIiICIkYWNfaW5jbHVkZXNfZGVmYXVsdA0KIg0KaWYgZXZhbCB0ZXN0IFwieFwkIiRhc19h Y19IZWFkZXIiXCIgPSB4InllcyI7IHRoZW4gOg0KICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9G DQojZGVmaW5lIGAkYXNfZWNobyAiSEFWRV8kYWNfaGVhZGVyIiB8ICRhc190cl9jcHBgIDENCl9B Q0VPRg0KDQpmaQ0KDQpkb25lDQoNCg0KDQoNCg0KICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19s aW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgdGhlIHByZXByb2Nlc3NvciBzdXBwb3J0 cyBpbmNsdWRlX25leHQiID4mNQ0KJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciB0aGUgcHJl cHJvY2Vzc29yIHN1cHBvcnRzIGluY2x1ZGVfbmV4dC4uLiAiID4mNjsgfQ0KaWYgJHtnbF9jdl9o YXZlX2luY2x1ZGVfbmV4dCs6fSBmYWxzZTsgdGhlbiA6DQogICRhc19lY2hvX24gIihjYWNoZWQp ICIgPiY2DQplbHNlDQogIHJtIC1yZiBjb25mdGVzdGQxYSBjb25mdGVzdGQxYiBjb25mdGVzdGQy DQogICAgIG1rZGlyIGNvbmZ0ZXN0ZDFhIGNvbmZ0ZXN0ZDFiIGNvbmZ0ZXN0ZDINCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2F0IDw8RU9GID4gY29u ZnRlc3RkMWEvY29uZnRlc3QuaA0KI2RlZmluZSBERUZJTkVEX0lOX0NPTkZURVNURDENCiNpbmNs dWRlX25leHQgPGNvbmZ0ZXN0Lmg+DQojaWZkZWYgREVGSU5FRF9JTl9DT05GVEVTVEQyDQppbnQg Zm9vOw0KI2Vsc2UNCiNlcnJvciAiaW5jbHVkZV9uZXh0IGRvZXNuJ3Qgd29yayINCiNlbmRpZg0K RU9GDQogICAgIGNhdCA8PEVPRiA+IGNvbmZ0ZXN0ZDFiL2NvbmZ0ZXN0LmgNCiNkZWZpbmUgREVG SU5FRF9JTl9DT05GVEVTVEQxDQojaW5jbHVkZSA8c3RkaW8uaD4NCiNpbmNsdWRlX25leHQgPGNv bmZ0ZXN0Lmg+DQojaWZkZWYgREVGSU5FRF9JTl9DT05GVEVTVEQyDQppbnQgZm9vOw0KI2Vsc2UN CiNlcnJvciAiaW5jbHVkZV9uZXh0IGRvZXNuJ3Qgd29yayINCiNlbmRpZg0KRU9GDQogICAgIGNh dCA8PEVPRiA+IGNvbmZ0ZXN0ZDIvY29uZnRlc3QuaA0KI2lmbmRlZiBERUZJTkVEX0lOX0NPTkZU RVNURDENCiNlcnJvciAiaW5jbHVkZV9uZXh0IHRlc3QgZG9lc24ndCB3b3JrIg0KI2VuZGlmDQoj ZGVmaW5lIERFRklORURfSU5fQ09ORlRFU1REMg0KRU9GDQogICAgIGdsX3NhdmVfQ1BQRkxBR1M9 IiRDUFBGTEFHUyINCiAgICAgQ1BQRkxBR1M9IiRnbF9zYXZlX0NQUEZMQUdTIC1JY29uZnRlc3Rk MWIgLUljb25mdGVzdGQyIg0KICAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVz dC4kYWNfZXh0DQovKiBlbmQgY29uZmRlZnMuaC4gICovDQojaW5jbHVkZSA8Y29uZnRlc3QuaD4N Cl9BQ0VPRg0KaWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOg0KICBnbF9j dl9oYXZlX2luY2x1ZGVfbmV4dD15ZXMNCmVsc2UNCiAgQ1BQRkxBR1M9IiRnbF9zYXZlX0NQUEZM QUdTIC1JY29uZnRlc3RkMWEgLUljb25mdGVzdGQyIg0KICAgICAgICBjYXQgY29uZmRlZnMuaCAt IDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0DQovKiBlbmQgY29uZmRlZnMuaC4gICovDQojaW5j bHVkZSA8Y29uZnRlc3QuaD4NCl9BQ0VPRg0KaWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVO TyI7IHRoZW4gOg0KICBnbF9jdl9oYXZlX2luY2x1ZGVfbmV4dD1idWdneQ0KZWxzZQ0KICBnbF9j dl9oYXZlX2luY2x1ZGVfbmV4dD1ubw0KZmkNCnJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0 ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dA0KDQpmaQ0Kcm0gLWYgY29yZSBjb25mdGVz dC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0DQogICAgIENQUEZMQUdT PSIkZ2xfc2F2ZV9DUFBGTEFHUyINCiAgICAgcm0gLXJmIGNvbmZ0ZXN0ZDFhIGNvbmZ0ZXN0ZDFi IGNvbmZ0ZXN0ZDINCg0KZmkNCnsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5P fTogcmVzdWx0OiAkZ2xfY3ZfaGF2ZV9pbmNsdWRlX25leHQiID4mNQ0KJGFzX2VjaG8gIiRnbF9j dl9oYXZlX2luY2x1ZGVfbmV4dCIgPiY2OyB9DQogIFBSQUdNQV9TWVNURU1fSEVBREVSPQ0KICBp ZiB0ZXN0ICRnbF9jdl9oYXZlX2luY2x1ZGVfbmV4dCA9IHllczsgdGhlbg0KICAgIElOQ0xVREVf TkVYVD1pbmNsdWRlX25leHQNCiAgICBJTkNMVURFX05FWFRfQVNfRklSU1RfRElSRUNUSVZFPWlu Y2x1ZGVfbmV4dA0KICAgIGlmIHRlc3QgLW4gIiRHQ0MiOyB0aGVuDQogICAgICBQUkFHTUFfU1lT VEVNX0hFQURFUj0nI3ByYWdtYSBHQ0Mgc3lzdGVtX2hlYWRlcicNCiAgICBmaQ0KICBlbHNlDQog ICAgaWYgdGVzdCAkZ2xfY3ZfaGF2ZV9pbmNsdWRlX25leHQgPSBidWdneTsgdGhlbg0KICAgICAg SU5DTFVERV9ORVhUPWluY2x1ZGUNCiAgICAgIElOQ0xVREVfTkVYVF9BU19GSVJTVF9ESVJFQ1RJ VkU9aW5jbHVkZV9uZXh0DQogICAgZWxzZQ0KICAgICAgSU5DTFVERV9ORVhUPWluY2x1ZGUNCiAg ICAgIElOQ0xVREVfTkVYVF9BU19GSVJTVF9ESVJFQ1RJVkU9aW5jbHVkZQ0KICAgIGZpDQogIGZp DQoNCg0KDQogIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tp bmcgd2hldGhlciBzeXN0ZW0gaGVhZGVyIGZpbGVzIGxpbWl0IHRoZSBsaW5lIGxlbmd0aCIgPiY1 DQokYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIHN5c3RlbSBoZWFkZXIgZmlsZXMgbGltaXQg dGhlIGxpbmUgbGVuZ3RoLi4uICIgPiY2OyB9DQppZiAke2dsX2N2X3ByYWdtYV9jb2x1bW5zKzp9 IGZhbHNlOyB0aGVuIDoNCiAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYNCmVsc2UNCiAgICAg ICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0DQovKiBlbmQgY29u ZmRlZnMuaC4gICovDQoNCiNpZmRlZiBfX1RBTkRFTQ0KY2hva2UgbWUNCiNlbmRpZg0KDQpfQUNF T0YNCmlmIChldmFsICIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQiKSAyPiY1IHwNCiAgJEVHUkVQ ICJjaG9rZSBtZSIgPi9kZXYvbnVsbCAyPiYxOyB0aGVuIDoNCiAgZ2xfY3ZfcHJhZ21hX2NvbHVt bnM9eWVzDQplbHNlDQogIGdsX2N2X3ByYWdtYV9jb2x1bW5zPW5vDQpmaQ0Kcm0gLWYgY29uZnRl c3QqDQoNCg0KZmkNCnsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVz dWx0OiAkZ2xfY3ZfcHJhZ21hX2NvbHVtbnMiID4mNQ0KJGFzX2VjaG8gIiRnbF9jdl9wcmFnbWFf Y29sdW1ucyIgPiY2OyB9DQogIGlmIHRlc3QgJGdsX2N2X3ByYWdtYV9jb2x1bW5zID0geWVzOyB0 aGVuDQogICAgUFJBR01BX0NPTFVNTlM9IiNwcmFnbWEgQ09MVU1OUyAxMDAwMCINCiAgZWxzZQ0K ICAgIFBSQUdNQV9DT0xVTU5TPQ0KICBmaQ0KDQoNCg0KDQoNCg0KICBpZiB0ZXN0ICRhY19jdl9o ZWFkZXJfZmVhdHVyZXNfaCA9IHllczsgdGhlbg0KICAgIEhBVkVfRkVBVFVSRVNfSD0xDQogIGVs c2UNCiAgICBIQVZFX0ZFQVRVUkVTX0g9MA0KICBmaQ0KDQoNCnsgJGFzX2VjaG8gIiRhc19tZTok e2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIGRfaW5vIG1lbWJlciBpbiBkaXJlY3Rv cnkgc3RydWN0IiA+JjUNCiRhc19lY2hvX24gImNoZWNraW5nIGZvciBkX2lubyBtZW1iZXIgaW4g ZGlyZWN0b3J5IHN0cnVjdC4uLiAiID4mNjsgfQ0KaWYgJHtnbF9jdl9zdHJ1Y3RfZGlyZW50X2Rf aW5vKzp9IGZhbHNlOyB0aGVuIDoNCiAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYNCmVsc2UN CiAgaWYgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgPSB5ZXM7IHRoZW4gOg0KICBnbF9jdl9zdHJ1 Y3RfZGlyZW50X2RfaW5vPW5vDQplbHNlDQogIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNv bmZ0ZXN0LiRhY19leHQNCi8qIGVuZCBjb25mZGVmcy5oLiAgKi8NCiNpbmNsdWRlIDxzeXMvdHlw ZXMuaD4NCiNpbmNsdWRlIDxzeXMvc3RhdC5oPg0KI2luY2x1ZGUgPGRpcmVudC5oPg0KDQppbnQN Cm1haW4gKCkNCnsNCkRJUiAqZHAgPSBvcGVuZGlyICgiLiIpOw0KICAgICAgICAgICAgIHN0cnVj dCBkaXJlbnQgKmU7DQogICAgICAgICAgICAgc3RydWN0IHN0YXQgc3Q7DQogICAgICAgICAgICAg aWYgKCEgZHApDQogICAgICAgICAgICAgICByZXR1cm4gMTsNCiAgICAgICAgICAgICBlID0gcmVh ZGRpciAoZHApOw0KICAgICAgICAgICAgIGlmICghIGUpDQogICAgICAgICAgICAgICByZXR1cm4g MjsNCiAgICAgICAgICAgICBpZiAoc3RhdCAoZS0+ZF9uYW1lLCAmc3QpICE9IDApDQogICAgICAg ICAgICAgICByZXR1cm4gMzsNCiAgICAgICAgICAgICBpZiAoZS0+ZF9pbm8gIT0gc3Quc3RfaW5v KQ0KICAgICAgICAgICAgICAgcmV0dXJuIDQ7DQogICAgICAgICAgICAgcmV0dXJuIDA7DQoNCiAg Ow0KICByZXR1cm4gMDsNCn0NCl9BQ0VPRg0KaWYgYWNfZm5fY190cnlfcnVuICIkTElORU5PIjsg dGhlbiA6DQogIGdsX2N2X3N0cnVjdF9kaXJlbnRfZF9pbm89eWVzDQplbHNlDQogIGdsX2N2X3N0 cnVjdF9kaXJlbnRfZF9pbm89bm8NCmZpDQpybSAtZiBjb3JlICouY29yZSBjb3JlLmNvbmZ0ZXN0 LiogZ21vbi5vdXQgYmIub3V0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCBcDQogIGNvbmZ0ZXN0LiRhY19v YmpleHQgY29uZnRlc3QuYmVhbSBjb25mdGVzdC4kYWNfZXh0DQpmaQ0KDQpmaQ0KeyAkYXNfZWNo byAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRnbF9jdl9zdHJ1Y3RfZGly ZW50X2RfaW5vIiA+JjUNCiRhc19lY2hvICIkZ2xfY3Zfc3RydWN0X2RpcmVudF9kX2lubyIgPiY2 OyB9DQogICBpZiB0ZXN0ICRnbF9jdl9zdHJ1Y3RfZGlyZW50X2RfaW5vID0geWVzOyB0aGVuDQoN CiRhc19lY2hvICIjZGVmaW5lIERfSU5PX0lOX0RJUkVOVCAxIiA+PmNvbmZkZWZzLmgNCg0KICAg ZmkNCg0KDQp7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5n IGZvciBsb25nIGZpbGUgbmFtZXMiID4mNQ0KJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIGxvbmcg ZmlsZSBuYW1lcy4uLiAiID4mNjsgfQ0KaWYgJHthY19jdl9zeXNfbG9uZ19maWxlX25hbWVzKzp9 IGZhbHNlOyB0aGVuIDoNCiAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYNCmVsc2UNCiAgYWNf Y3Zfc3lzX2xvbmdfZmlsZV9uYW1lcz15ZXMNCiMgVGVzdCBmb3IgbG9uZyBmaWxlIG5hbWVzIGlu IGFsbCB0aGUgcGxhY2VzIHdlIGtub3cgbWlnaHQgbWF0dGVyOg0KIyAgICAgIC4JCXRoZSBjdXJy ZW50IGRpcmVjdG9yeSwgd2hlcmUgYnVpbGRpbmcgd2lsbCBoYXBwZW4NCiMgICAgICAkcHJlZml4 L2xpYgl3aGVyZSB3ZSB3aWxsIGJlIGluc3RhbGxpbmcgdGhpbmdzDQojICAgICAgJGV4ZWNfcHJl Zml4L2xpYglsaWtld2lzZQ0KIyAgICAgICRUTVBESVIJCWlmIHNldCwgd2hlcmUgaXQgbWlnaHQg d2FudCB0byB3cml0ZSB0ZW1wb3JhcnkgZmlsZXMNCiMgICAgICAvdG1wCQl3aGVyZSBpdCBtaWdo dCB3YW50IHRvIHdyaXRlIHRlbXBvcmFyeSBmaWxlcw0KIyAgICAgIC92YXIvdG1wCQlsaWtld2lz ZQ0KIyAgICAgIC91c3IvdG1wCQlsaWtld2lzZQ0KZm9yIGFjX2RpciBpbiAuICIkVE1QRElSIiAv dG1wIC92YXIvdG1wIC91c3IvdG1wICIkcHJlZml4L2xpYiIgIiRleGVjX3ByZWZpeC9saWIiOyBk bw0KICAjIFNraXAgJFRNUERJUiBpZiBpdCBpcyBlbXB0eSBvciBib2d1cywgYW5kIHNraXAgJGV4 ZWNfcHJlZml4L2xpYg0KICAjIGluIHRoZSB1c3VhbCBjYXNlIHdoZXJlIGV4ZWNfcHJlZml4IGlz ICcke3ByZWZpeH0nLg0KICBjYXNlICRhY19kaXIgaW4gIygNCiAgICAuIHwgLyogfCA/OltcXC9d KikgOzsgIygNCiAgICAqKSBjb250aW51ZTs7DQogIGVzYWMNCiAgdGVzdCAtdyAiJGFjX2Rpci8u IiB8fCBjb250aW51ZSAjIEl0IGlzIGxlc3MgY29uZnVzaW5nIHRvIG5vdCBlY2hvIGFueXRoaW5n IGhlcmUuDQogIGFjX3hkaXI9JGFjX2Rpci9jZiQkDQogICh1bWFzayAwNzcgJiYgbWtkaXIgIiRh Y194ZGlyIiAyPi9kZXYvbnVsbCkgfHwgY29udGludWUNCiAgYWNfdGYxPSRhY194ZGlyL2NvbmZ0 ZXN0OTAxMjM0NQ0KICBhY190ZjI9JGFjX3hkaXIvY29uZnRlc3Q5MDEyMzQ2DQogIHRvdWNoICIk YWNfdGYxIiAyPi9kZXYvbnVsbCAmJiB0ZXN0IC1mICIkYWNfdGYxIiAmJiB0ZXN0ICEgLWYgIiRh Y190ZjIiIHx8DQogICAgYWNfY3Zfc3lzX2xvbmdfZmlsZV9uYW1lcz1ubw0KICBybSAtZiAtciAi JGFjX3hkaXIiIDI+L2Rldi9udWxsDQogIHRlc3QgJGFjX2N2X3N5c19sb25nX2ZpbGVfbmFtZXMg PSBubyAmJiBicmVhaw0KZG9uZQ0KZmkNCnsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0k TElORU5PfTogcmVzdWx0OiAkYWNfY3Zfc3lzX2xvbmdfZmlsZV9uYW1lcyIgPiY1DQokYXNfZWNo byAiJGFjX2N2X3N5c19sb25nX2ZpbGVfbmFtZXMiID4mNjsgfQ0KaWYgdGVzdCAkYWNfY3Zfc3lz X2xvbmdfZmlsZV9uYW1lcyA9IHllczsgdGhlbg0KDQokYXNfZWNobyAiI2RlZmluZSBIQVZFX0xP TkdfRklMRV9OQU1FUyAxIiA+PmNvbmZkZWZzLmgNCg0KZmkNCg0KDQoNCg0KICBmb3IgYWNfZnVu YyBpbiAkYWNfZnVuY19saXN0DQpkbyA6DQogIGFzX2FjX3Zhcj1gJGFzX2VjaG8gImFjX2N2X2Z1 bmNfJGFjX2Z1bmMiIHwgJGFzX3RyX3NoYA0KYWNfZm5fY19jaGVja19mdW5jICIkTElORU5PIiAi JGFjX2Z1bmMiICIkYXNfYWNfdmFyIg0KaWYgZXZhbCB0ZXN0IFwieFwkIiRhc19hY192YXIiXCIg PSB4InllcyI7IHRoZW4gOg0KICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GDQojZGVmaW5lIGAk YXNfZWNobyAiSEFWRV8kYWNfZnVuYyIgfCAkYXNfdHJfY3BwYCAxDQpfQUNFT0YNCg0KZmkNCmRv bmUNCg0KDQoNCnsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tp bmcgZm9yIEMvQysrIHJlc3RyaWN0IGtleXdvcmQiID4mNQ0KJGFzX2VjaG9fbiAiY2hlY2tpbmcg Zm9yIEMvQysrIHJlc3RyaWN0IGtleXdvcmQuLi4gIiA+JjY7IH0NCmlmICR7YWNfY3ZfY19yZXN0 cmljdCs6fSBmYWxzZTsgdGhlbiA6DQogICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2DQplbHNl DQogIGFjX2N2X2NfcmVzdHJpY3Q9bm8NCiAgICMgVGhlIG9yZGVyIGhlcmUgY2F0ZXJzIHRvIHRo ZSBmYWN0IHRoYXQgQysrIGRvZXMgbm90IHJlcXVpcmUgcmVzdHJpY3QuDQogICBmb3IgYWNfa3cg aW4gX19yZXN0cmljdCBfX3Jlc3RyaWN0X18gX1Jlc3RyaWN0IHJlc3RyaWN0OyBkbw0KICAgICBj YXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0DQovKiBlbmQgY29uZmRl ZnMuaC4gICovDQp0eXBlZGVmIGludCAqIGludF9wdHI7DQoJaW50IGZvbyAoaW50X3B0ciAkYWNf a3cgaXApIHsNCglyZXR1cm4gaXBbMF07DQogICAgICAgfQ0KaW50DQptYWluICgpDQp7DQppbnQg c1sxXTsNCglpbnQgKiAkYWNfa3cgdCA9IHM7DQoJdFswXSA9IDA7DQoJcmV0dXJuIGZvbyh0KQ0K ICA7DQogIHJldHVybiAwOw0KfQ0KX0FDRU9GDQppZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElO RU5PIjsgdGhlbiA6DQogIGFjX2N2X2NfcmVzdHJpY3Q9JGFjX2t3DQpmaQ0Kcm0gLWYgY29yZSBj b25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0DQogICAgIHRl c3QgIiRhY19jdl9jX3Jlc3RyaWN0IiAhPSBubyAmJiBicmVhaw0KICAgZG9uZQ0KDQpmaQ0KeyAk YXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9jX3Jl c3RyaWN0IiA+JjUNCiRhc19lY2hvICIkYWNfY3ZfY19yZXN0cmljdCIgPiY2OyB9DQoNCiBjYXNl ICRhY19jdl9jX3Jlc3RyaWN0IGluDQogICByZXN0cmljdCkgOzsNCiAgIG5vKSAkYXNfZWNobyAi I2RlZmluZSByZXN0cmljdCAvKiovIiA+PmNvbmZkZWZzLmgNCiA7Ow0KICAgKikgIGNhdCA+PmNv bmZkZWZzLmggPDxfQUNFT0YNCiNkZWZpbmUgcmVzdHJpY3QgJGFjX2N2X2NfcmVzdHJpY3QNCl9B Q0VPRg0KIDs7DQogZXNhYw0KDQoNCiAgR05VTElCX0JUT1dDPTA7DQogIEdOVUxJQl9XQ1RPQj0w Ow0KICBHTlVMSUJfTUJTSU5JVD0wOw0KICBHTlVMSUJfTUJSVE9XQz0wOw0KICBHTlVMSUJfTUJS TEVOPTA7DQogIEdOVUxJQl9NQlNSVE9XQ1M9MDsNCiAgR05VTElCX01CU05SVE9XQ1M9MDsNCiAg R05VTElCX1dDUlRPTUI9MDsNCiAgR05VTElCX1dDU1JUT01CUz0wOw0KICBHTlVMSUJfV0NTTlJU T01CUz0wOw0KICBHTlVMSUJfV0NXSURUSD0wOw0KICBHTlVMSUJfV01FTUNIUj0wOw0KICBHTlVM SUJfV01FTUNNUD0wOw0KICBHTlVMSUJfV01FTUNQWT0wOw0KICBHTlVMSUJfV01FTU1PVkU9MDsN CiAgR05VTElCX1dNRU1TRVQ9MDsNCiAgR05VTElCX1dDU0xFTj0wOw0KICBHTlVMSUJfV0NTTkxF Tj0wOw0KICBHTlVMSUJfV0NTQ1BZPTA7DQogIEdOVUxJQl9XQ1BDUFk9MDsNCiAgR05VTElCX1dD U05DUFk9MDsNCiAgR05VTElCX1dDUE5DUFk9MDsNCiAgR05VTElCX1dDU0NBVD0wOw0KICBHTlVM SUJfV0NTTkNBVD0wOw0KICBHTlVMSUJfV0NTQ01QPTA7DQogIEdOVUxJQl9XQ1NOQ01QPTA7DQog IEdOVUxJQl9XQ1NDQVNFQ01QPTA7DQogIEdOVUxJQl9XQ1NOQ0FTRUNNUD0wOw0KICBHTlVMSUJf V0NTQ09MTD0wOw0KICBHTlVMSUJfV0NTWEZSTT0wOw0KICBHTlVMSUJfV0NTRFVQPTA7DQogIEdO VUxJQl9XQ1NDSFI9MDsNCiAgR05VTElCX1dDU1JDSFI9MDsNCiAgR05VTElCX1dDU0NTUE49MDsN CiAgR05VTElCX1dDU1NQTj0wOw0KICBHTlVMSUJfV0NTUEJSSz0wOw0KICBHTlVMSUJfV0NTU1RS PTA7DQogIEdOVUxJQl9XQ1NUT0s9MDsNCiAgR05VTElCX1dDU1dJRFRIPTA7DQogICAgSEFWRV9C VE9XQz0xOw0KICBIQVZFX01CU0lOSVQ9MTsNCiAgSEFWRV9NQlJUT1dDPTE7DQogIEhBVkVfTUJS TEVOPTE7DQogIEhBVkVfTUJTUlRPV0NTPTE7DQogIEhBVkVfTUJTTlJUT1dDUz0xOw0KICBIQVZF X1dDUlRPTUI9MTsNCiAgSEFWRV9XQ1NSVE9NQlM9MTsNCiAgSEFWRV9XQ1NOUlRPTUJTPTE7DQog IEhBVkVfV01FTUNIUj0xOw0KICBIQVZFX1dNRU1DTVA9MTsNCiAgSEFWRV9XTUVNQ1BZPTE7DQog IEhBVkVfV01FTU1PVkU9MTsNCiAgSEFWRV9XTUVNU0VUPTE7DQogIEhBVkVfV0NTTEVOPTE7DQog IEhBVkVfV0NTTkxFTj0xOw0KICBIQVZFX1dDU0NQWT0xOw0KICBIQVZFX1dDUENQWT0xOw0KICBI QVZFX1dDU05DUFk9MTsNCiAgSEFWRV9XQ1BOQ1BZPTE7DQogIEhBVkVfV0NTQ0FUPTE7DQogIEhB VkVfV0NTTkNBVD0xOw0KICBIQVZFX1dDU0NNUD0xOw0KICBIQVZFX1dDU05DTVA9MTsNCiAgSEFW RV9XQ1NDQVNFQ01QPTE7DQogIEhBVkVfV0NTTkNBU0VDTVA9MTsNCiAgSEFWRV9XQ1NDT0xMPTE7 DQogIEhBVkVfV0NTWEZSTT0xOw0KICBIQVZFX1dDU0RVUD0xOw0KICBIQVZFX1dDU0NIUj0xOw0K ICBIQVZFX1dDU1JDSFI9MTsNCiAgSEFWRV9XQ1NDU1BOPTE7DQogIEhBVkVfV0NTU1BOPTE7DQog IEhBVkVfV0NTUEJSSz0xOw0KICBIQVZFX1dDU1NUUj0xOw0KICBIQVZFX1dDU1RPSz0xOw0KICBI QVZFX1dDU1dJRFRIPTE7DQogIEhBVkVfREVDTF9XQ1RPQj0xOw0KICBIQVZFX0RFQ0xfV0NXSURU SD0xOw0KICBSRVBMQUNFX01CU1RBVEVfVD0wOw0KICBSRVBMQUNFX0JUT1dDPTA7DQogIFJFUExB Q0VfV0NUT0I9MDsNCiAgUkVQTEFDRV9NQlNJTklUPTA7DQogIFJFUExBQ0VfTUJSVE9XQz0wOw0K ICBSRVBMQUNFX01CUkxFTj0wOw0KICBSRVBMQUNFX01CU1JUT1dDUz0wOw0KICBSRVBMQUNFX01C U05SVE9XQ1M9MDsNCiAgUkVQTEFDRV9XQ1JUT01CPTA7DQogIFJFUExBQ0VfV0NTUlRPTUJTPTA7 DQogIFJFUExBQ0VfV0NTTlJUT01CUz0wOw0KICBSRVBMQUNFX1dDV0lEVEg9MDsNCiAgUkVQTEFD RV9XQ1NXSURUSD0wOw0KDQoNCiAgICAgICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xp bmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciA8d2NoYXIuaD4gdXNlcyAnaW5saW5lJyBj b3JyZWN0bHkiID4mNQ0KJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciA8d2NoYXIuaD4gdXNl cyAnaW5saW5lJyBjb3JyZWN0bHkuLi4gIiA+JjY7IH0NCmlmICR7Z2xfY3ZfaGVhZGVyX3djaGFy X2hfY29ycmVjdF9pbmxpbmUrOn0gZmFsc2U7IHRoZW4gOg0KICAkYXNfZWNob19uICIoY2FjaGVk KSAiID4mNg0KZWxzZQ0KICBnbF9jdl9oZWFkZXJfd2NoYXJfaF9jb3JyZWN0X2lubGluZT15ZXMN CiAgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dA0KLyogZW5k IGNvbmZkZWZzLmguICAqLw0KDQogICAgICAgI2RlZmluZSB3Y3N0b2QgcmVuYW1lZF93Y3N0b2QN Ci8qIFRydTY0IHdpdGggRGVza3RvcCBUb29sa2l0IEMgaGFzIGEgYnVnOiA8c3RkaW8uaD4gbXVz dCBiZSBpbmNsdWRlZCBiZWZvcmUNCiAgIDx3Y2hhci5oPi4NCiAgIEJTRC9PUyA0LjAuMSBoYXMg YSBidWc6IDxzdGRkZWYuaD4sIDxzdGRpby5oPiBhbmQgPHRpbWUuaD4gbXVzdCBiZQ0KICAgaW5j bHVkZWQgYmVmb3JlIDx3Y2hhci5oPi4gICovDQojaW5jbHVkZSA8c3RkZGVmLmg+DQojaW5jbHVk ZSA8c3RkaW8uaD4NCiNpbmNsdWRlIDx0aW1lLmg+DQojaW5jbHVkZSA8d2NoYXIuaD4NCmV4dGVy biBpbnQgemVybyAodm9pZCk7DQppbnQgbWFpbiAoKSB7IHJldHVybiB6ZXJvKCk7IH0NCg0KX0FD RU9GDQogICAgIGlmIHsgeyBldmFsIGVjaG8gIlwiXCRhc19tZVwiOiR7YXNfbGluZW5vLSRMSU5F Tk99OiBcIiRhY19jb21waWxlXCIiOyB9ID4mNQ0KICAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNQ0K ICBhY19zdGF0dXM9JD8NCiAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTog XCQ/ID0gJGFjX3N0YXR1cyIgPiY1DQogIHRlc3QgJGFjX3N0YXR1cyA9IDA7IH07IHRoZW4NCiAg ICAgICBtdiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0MS4kYWNfb2JqZXh0DQogICAgICAg Y2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dA0KLyogZW5kIGNvbmZk ZWZzLmguICAqLw0KDQogICAgICAgICAjZGVmaW5lIHdjc3RvZCByZW5hbWVkX3djc3RvZA0KLyog VHJ1NjQgd2l0aCBEZXNrdG9wIFRvb2xraXQgQyBoYXMgYSBidWc6IDxzdGRpby5oPiBtdXN0IGJl IGluY2x1ZGVkIGJlZm9yZQ0KICAgPHdjaGFyLmg+Lg0KICAgQlNEL09TIDQuMC4xIGhhcyBhIGJ1 ZzogPHN0ZGRlZi5oPiwgPHN0ZGlvLmg+IGFuZCA8dGltZS5oPiBtdXN0IGJlDQogICBpbmNsdWRl ZCBiZWZvcmUgPHdjaGFyLmg+LiAgKi8NCiNpbmNsdWRlIDxzdGRkZWYuaD4NCiNpbmNsdWRlIDxz dGRpby5oPg0KI2luY2x1ZGUgPHRpbWUuaD4NCiNpbmNsdWRlIDx3Y2hhci5oPg0KaW50IHplcm8g KHZvaWQpIHsgcmV0dXJuIDA7IH0NCg0KX0FDRU9GDQogICAgICAgaWYgeyB7IGV2YWwgZWNobyAi XCJcJGFzX21lXCI6JHthc19saW5lbm8tJExJTkVOT306IFwiJGFjX2NvbXBpbGVcIiI7IH0gPiY1 DQogIChldmFsICRhY19jb21waWxlKSAyPiY1DQogIGFjX3N0YXR1cz0kPw0KICAkYXNfZWNobyAi JGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUNCiAgdGVz dCAkYWNfc3RhdHVzID0gMDsgfTsgdGhlbg0KICAgICAgICAgbXYgY29uZnRlc3QuJGFjX29iamV4 dCBjb25mdGVzdDIuJGFjX29iamV4dA0KICAgICAgICAgaWYgJENDIC1vIGNvbmZ0ZXN0JGFjX2V4 ZWV4dCAkQ0ZMQUdTICRMREZMQUdTIGNvbmZ0ZXN0MS4kYWNfb2JqZXh0IGNvbmZ0ZXN0Mi4kYWNf b2JqZXh0ICRMSUJTID4mNSAyPiYxOyB0aGVuDQogICAgICAgICAgIDoNCiAgICAgICAgIGVsc2UN CiAgICAgICAgICAgZ2xfY3ZfaGVhZGVyX3djaGFyX2hfY29ycmVjdF9pbmxpbmU9bm8NCiAgICAg ICAgIGZpDQogICAgICAgZmkNCiAgICAgZmkNCiAgICAgcm0gLWYgY29uZnRlc3QxLiRhY19vYmpl eHQgY29uZnRlc3QyLiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0DQoNCmZpDQp7ICRhc19l Y2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGdsX2N2X2hlYWRlcl93 Y2hhcl9oX2NvcnJlY3RfaW5saW5lIiA+JjUNCiRhc19lY2hvICIkZ2xfY3ZfaGVhZGVyX3djaGFy X2hfY29ycmVjdF9pbmxpbmUiID4mNjsgfQ0KICBpZiB0ZXN0ICRnbF9jdl9oZWFkZXJfd2NoYXJf aF9jb3JyZWN0X2lubGluZSA9IG5vOyB0aGVuDQogICAgYXNfZm5fZXJyb3IgJD8gIjx3Y2hhci5o PiBjYW5ub3QgYmUgdXNlZCB3aXRoIHRoaXMgY29tcGlsZXIgKCRDQyAkQ0ZMQUdTICRDUFBGTEFH UykuDQpUaGlzIGlzIGEga25vd24gaW50ZXJvcGVyYWJpbGl0eSBwcm9ibGVtIG9mIGdsaWJjIDw9 IDIuNSB3aXRoIGdjYyA+PSA0LjMgaW4NCkM5OSBtb2RlLiBZb3UgaGF2ZSBmb3VyIG9wdGlvbnM6 DQogIC0gQWRkIHRoZSBmbGFnIC1mZ251ODktaW5saW5lIHRvIENDIGFuZCByZWNvbmZpZ3VyZSwg b3INCiAgLSBGaXggeW91ciBpbmNsdWRlIGZpbGVzLCB1c2luZyBwYXJ0cyBvZg0KICAgIDxodHRw Oi8vc291cmNld2FyZS5vcmcvZ2l0Lz9wPWdsaWJjLmdpdDthPWNvbW1pdGRpZmY7aD1iMDM3YTI5 M2E0ODcxOGFmMzBkNzA2YzJlMThjOTI5ZDBlNjlhNjIxPiwgb3INCiAgLSBVc2UgYSBnY2MgdmVy c2lvbiBvbGRlciB0aGFuIDQuMywgb3INCiAgLSBEb24ndCB1c2UgdGhlIGZsYWdzIC1zdGQ9Yzk5 IG9yIC1zdGQ9Z251OTkuDQpDb25maWd1cmF0aW9uIGFib3J0ZWQuIiAiJExJTkVOTyIgNQ0KICBm aQ0KDQoNCg0KDQogIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hl Y2tpbmcgZm9yIG5sX2xhbmdpbmZvIGFuZCBDT0RFU0VUIiA+JjUNCiRhc19lY2hvX24gImNoZWNr aW5nIGZvciBubF9sYW5naW5mbyBhbmQgQ09ERVNFVC4uLiAiID4mNjsgfQ0KaWYgJHthbV9jdl9s YW5naW5mb19jb2Rlc2V0Kzp9IGZhbHNlOyB0aGVuIDoNCiAgJGFzX2VjaG9fbiAiKGNhY2hlZCkg IiA+JjYNCmVsc2UNCiAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4 dA0KLyogZW5kIGNvbmZkZWZzLmguICAqLw0KI2luY2x1ZGUgPGxhbmdpbmZvLmg+DQppbnQNCm1h aW4gKCkNCnsNCmNoYXIqIGNzID0gbmxfbGFuZ2luZm8oQ09ERVNFVCk7IHJldHVybiAhY3M7DQog IDsNCiAgcmV0dXJuIDA7DQp9DQpfQUNFT0YNCmlmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8i OyB0aGVuIDoNCiAgYW1fY3ZfbGFuZ2luZm9fY29kZXNldD15ZXMNCmVsc2UNCiAgYW1fY3ZfbGFu Z2luZm9fY29kZXNldD1ubw0KZmkNCnJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRh Y19vYmpleHQgXA0KICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0DQoNCmZp DQp7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFtX2N2 X2xhbmdpbmZvX2NvZGVzZXQiID4mNQ0KJGFzX2VjaG8gIiRhbV9jdl9sYW5naW5mb19jb2Rlc2V0 IiA+JjY7IH0NCiAgaWYgdGVzdCAkYW1fY3ZfbGFuZ2luZm9fY29kZXNldCA9IHllczsgdGhlbg0K DQokYXNfZWNobyAiI2RlZmluZSBIQVZFX0xBTkdJTkZPX0NPREVTRVQgMSIgPj5jb25mZGVmcy5o DQoNCiAgZmkNCg0KDQoNCg0KICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVO T306IGNoZWNraW5nIGZvciBhIHRyYWRpdGlvbmFsIGZyZW5jaCBsb2NhbGUiID4mNQ0KJGFzX2Vj aG9fbiAiY2hlY2tpbmcgZm9yIGEgdHJhZGl0aW9uYWwgZnJlbmNoIGxvY2FsZS4uLiAiID4mNjsg fQ0KaWYgJHtndF9jdl9sb2NhbGVfZnIrOn0gZmFsc2U7IHRoZW4gOg0KICAkYXNfZWNob19uICIo Y2FjaGVkKSAiID4mNg0KZWxzZQ0KDQogICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29u ZnRlc3QuJGFjX2V4dA0KLyogZW5kIGNvbmZkZWZzLmguICAqLw0KDQojaW5jbHVkZSA8bG9jYWxl Lmg+DQojaW5jbHVkZSA8dGltZS5oPg0KI2lmIEhBVkVfTEFOR0lORk9fQ09ERVNFVA0KIyBpbmNs dWRlIDxsYW5naW5mby5oPg0KI2VuZGlmDQojaW5jbHVkZSA8c3RkbGliLmg+DQojaW5jbHVkZSA8 c3RyaW5nLmg+DQpzdHJ1Y3QgdG0gdDsNCmNoYXIgYnVmWzE2XTsNCmludCBtYWluICgpIHsNCiAg LyogQ2hlY2sgd2hldGhlciB0aGUgZ2l2ZW4gbG9jYWxlIG5hbWUgaXMgcmVjb2duaXplZCBieSB0 aGUgc3lzdGVtLiAgKi8NCiNpZiAoZGVmaW5lZCBfV0lOMzIgfHwgZGVmaW5lZCBfX1dJTjMyX18p ICYmICFkZWZpbmVkIF9fQ1lHV0lOX18NCiAgLyogT24gbmF0aXZlIFdpbjMyLCBzZXRsb2NhbGUo Y2F0ZWdvcnksICIiKSBsb29rcyBhdCB0aGUgc3lzdGVtIHNldHRpbmdzLA0KICAgICBub3QgYXQg dGhlIGVudmlyb25tZW50IHZhcmlhYmxlcy4gIEFsc28sIHdoZW4gYW4gZW5jb2Rpbmcgc3VmZml4 IHN1Y2gNCiAgICAgYXMgIi42NTAwMSIgb3IgIi41NDkzNiIgaXMgc3BlZmljaWVkLCBpdCBzdWNj ZWVkcyBidXQgc2V0cyB0aGUgTENfQ1RZUEUNCiAgICAgY2F0ZWdvcnkgb2YgdGhlIGxvY2FsZSB0 byAiQyIuICAqLw0KICBpZiAoc2V0bG9jYWxlIChMQ19BTEwsIGdldGVudiAoIkxDX0FMTCIpKSA9 PSBOVUxMDQogICAgICB8fCBzdHJjbXAgKHNldGxvY2FsZSAoTENfQ1RZUEUsIE5VTEwpLCAiQyIp ID09IDApDQogICAgcmV0dXJuIDE7DQojZWxzZQ0KICBpZiAoc2V0bG9jYWxlIChMQ19BTEwsICIi KSA9PSBOVUxMKSByZXR1cm4gMTsNCiNlbmRpZg0KICAvKiBDaGVjayB3aGV0aGVyIG5sX2xhbmdp bmZvKENPREVTRVQpIGlzIG5vbmVtcHR5IGFuZCBub3QgIkFTQ0lJIiBvciAiNjQ2Ii4NCiAgICAg T24gTWFjT1MgWCAxMC4zLjUgKERhcndpbiA3LjUpIGluIHRoZSBmcl9GUiBsb2NhbGUsIG5sX2xh bmdpbmZvKENPREVTRVQpDQogICAgIGlzIGVtcHR5LCBhbmQgdGhlIGJlaGF2aW91ciBvZiBUY2wg OC40IGluIHRoaXMgbG9jYWxlIGlzIG5vdCB1c2VmdWwuDQogICAgIE9uIE9wZW5CU0QgNC4wLCB3 aGVuIGFuIHVuc3VwcG9ydGVkIGxvY2FsZSBpcyBzcGVjaWZpZWQsIHNldGxvY2FsZSgpDQogICAg IHN1Y2NlZWRzIGJ1dCB0aGVuIG5sX2xhbmdpbmZvKENPREVTRVQpIGlzICI2NDYiLiBJbiB0aGlz IHNpdHVhdGlvbiwNCiAgICAgc29tZSB1bml0IHRlc3RzIGZhaWwuDQogICAgIE9uIE1pckJTRCAx MCwgd2hlbiBhbiB1bnN1cHBvcnRlZCBsb2NhbGUgaXMgc3BlY2lmaWVkLCBzZXRsb2NhbGUoKQ0K ICAgICBzdWNjZWVkcyBidXQgdGhlbiBubF9sYW5naW5mbyhDT0RFU0VUKSBpcyAiVVRGLTgiLiAg Ki8NCiNpZiBIQVZFX0xBTkdJTkZPX0NPREVTRVQNCiAgew0KICAgIGNvbnN0IGNoYXIgKmNzID0g bmxfbGFuZ2luZm8gKENPREVTRVQpOw0KICAgIGlmIChjc1swXSA9PSAnXDAnIHx8IHN0cmNtcCAo Y3MsICJBU0NJSSIpID09IDAgfHwgc3RyY21wIChjcywgIjY0NiIpID09IDANCiAgICAgICAgfHwg c3RyY21wIChjcywgIlVURi04IikgPT0gMCkNCiAgICAgIHJldHVybiAxOw0KICB9DQojZW5kaWYN CiNpZmRlZiBfX0NZR1dJTl9fDQogIC8qIE9uIEN5Z3dpbiwgYXZvaWQgbG9jYWxlIG5hbWVzIHdp dGhvdXQgZW5jb2Rpbmcgc3VmZml4LCBiZWNhdXNlIHRoZQ0KICAgICBsb2NhbGVfY2hhcnNldCgp IGZ1bmN0aW9uIHJlbGllcyBvbiB0aGUgZW5jb2Rpbmcgc3VmZml4LiAgTm90ZSB0aGF0DQogICAg IExDX0FMTCBpcyBzZXQgb24gdGhlIGNvbW1hbmQgbGluZS4gICovDQogIGlmIChzdHJjaHIgKGdl dGVudiAoIkxDX0FMTCIpLCAnLicpID09IE5VTEwpIHJldHVybiAxOw0KI2VuZGlmDQogIC8qIENo ZWNrIHdoZXRoZXIgaW4gdGhlIGFiYnJldmlhdGlvbiBvZiB0aGUgc2Vjb25kIG1vbnRoLCB0aGUg c2Vjb25kDQogICAgIGNoYXJhY3RlciAoc2hvdWxkIGJlIFUrMDBFOTogTEFUSU4gU01BTEwgTEVU VEVSIEUgV0lUSCBBQ1VURSkgaXMgb25seQ0KICAgICBvbmUgYnl0ZSBsb25nLiBUaGlzIGV4Y2x1 ZGVzIHRoZSBVVEYtOCBlbmNvZGluZy4gICovDQogIHQudG1feWVhciA9IDE5NzUgLSAxOTAwOyB0 LnRtX21vbiA9IDIgLSAxOyB0LnRtX21kYXkgPSA0Ow0KICBpZiAoc3RyZnRpbWUgKGJ1Ziwgc2l6 ZW9mIChidWYpLCAiJWIiLCAmdCkgPCAzIHx8IGJ1ZlsyXSAhPSAndicpIHJldHVybiAxOw0KICAv KiBDaGVjayB3aGV0aGVyIHRoZSBkZWNpbWFsIHNlcGFyYXRvciBpcyBhIGNvbW1hLg0KICAgICBP biBOZXRCU0QgMy4wIGluIHRoZSBmcl9GUi5JU084ODU5LTEgbG9jYWxlLCBsb2NhbGVjb252KCkt PmRlY2ltYWxfcG9pbnQNCiAgICAgYXJlIG5sX2xhbmdpbmZvKFJBRElYQ0hBUikgYXJlIGJvdGgg Ii4iLiAgKi8NCiAgaWYgKGxvY2FsZWNvbnYgKCkgLT5kZWNpbWFsX3BvaW50WzBdICE9ICcsJykg cmV0dXJuIDE7DQogIHJldHVybiAwOw0KfQ0KDQpfQUNFT0YNCiAgICBpZiB7IHsgZXZhbCBlY2hv ICJcIlwkYXNfbWVcIjoke2FzX2xpbmVuby0kTElORU5PfTogXCIkYWNfbGlua1wiIjsgfSA+JjUN CiAgKGV2YWwgJGFjX2xpbmspIDI+JjUNCiAgYWNfc3RhdHVzPSQ/DQogICRhc19lY2hvICIkYXNf bWU6JHthc19saW5lbm8tJExJTkVOT306IFwkPyA9ICRhY19zdGF0dXMiID4mNQ0KICB0ZXN0ICRh Y19zdGF0dXMgPSAwOyB9ICYmIHRlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0OyB0aGVuDQogICAg ICBjYXNlICIkaG9zdF9vcyIgaW4NCiAgICAgICAgIyBIYW5kbGUgbmF0aXZlIFdpbmRvd3Mgc3Bl Y2lhbGx5LCBiZWNhdXNlIHRoZXJlIHNldGxvY2FsZSgpIGludGVycHJldHMNCiAgICAgICAgIyAi YXIiIGFzICJBcmFiaWMiIG9yICJBcmFiaWNfU2F1ZGkgQXJhYmlhLjEyNTYiLA0KICAgICAgICAj ICJmciIgb3IgImZyYSIgYXMgIkZyZW5jaCIgb3IgIkZyZW5jaF9GcmFuY2UuMTI1MiIsDQogICAg ICAgICMgImdlIighKSBvciAiZGV1IighKSBhcyAiR2VybWFuIiBvciAiR2VybWFuX0dlcm1hbnku MTI1MiIsDQogICAgICAgICMgImphIiBhcyAiSmFwYW5lc2UiIG9yICJKYXBhbmVzZV9KYXBhbi45 MzIiLA0KICAgICAgICAjIGFuZCBzaW1pbGFyLg0KICAgICAgICBtaW5ndyopDQogICAgICAgICAg IyBUZXN0IGZvciB0aGUgbmF0aXZlIFdpbjMyIGxvY2FsZSBuYW1lLg0KICAgICAgICAgIGlmIChM Q19BTEw9RnJlbmNoX0ZyYW5jZS4xMjUyIExDX1RJTUU9IExDX0NUWVBFPSAuL2NvbmZ0ZXN0OyBl eGl0KSAyPi9kZXYvbnVsbDsgdGhlbg0KICAgICAgICAgICAgZ3RfY3ZfbG9jYWxlX2ZyPUZyZW5j aF9GcmFuY2UuMTI1Mg0KICAgICAgICAgIGVsc2UNCiAgICAgICAgICAgICMgTm9uZSBmb3VuZC4N CiAgICAgICAgICAgIGd0X2N2X2xvY2FsZV9mcj1ub25lDQogICAgICAgICAgZmkNCiAgICAgICAg ICA7Ow0KICAgICAgICAqKQ0KICAgICAgICAgICMgU2V0dGluZyBMQ19BTEwgaXMgbm90IGVub3Vn aC4gTmVlZCB0byBzZXQgTENfVElNRSB0byBlbXB0eSwgYmVjYXVzZQ0KICAgICAgICAgICMgb3Ro ZXJ3aXNlIG9uIE1hY09TIFggMTAuMy41IHRoZSBMQ19USU1FPUMgZnJvbSB0aGUgYmVnaW5uaW5n IG9mIHRoZQ0KICAgICAgICAgICMgY29uZmlndXJlIHNjcmlwdCB3b3VsZCBvdmVycmlkZSB0aGUg TENfQUxMIHNldHRpbmcuIExpa2V3aXNlIGZvcg0KICAgICAgICAgICMgTENfQ1RZUEUsIHdoaWNo IGlzIGFsc28gc2V0IGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIGNvbmZpZ3VyZSBzY3JpcHQuDQog ICAgICAgICAgIyBUZXN0IGZvciB0aGUgdXN1YWwgbG9jYWxlIG5hbWUuDQogICAgICAgICAgaWYg KExDX0FMTD1mcl9GUiBMQ19USU1FPSBMQ19DVFlQRT0gLi9jb25mdGVzdDsgZXhpdCkgMj4vZGV2 L251bGw7IHRoZW4NCiAgICAgICAgICAgIGd0X2N2X2xvY2FsZV9mcj1mcl9GUg0KICAgICAgICAg IGVsc2UNCiAgICAgICAgICAgICMgVGVzdCBmb3IgdGhlIGxvY2FsZSBuYW1lIHdpdGggZXhwbGlj aXQgZW5jb2Rpbmcgc3VmZml4Lg0KICAgICAgICAgICAgaWYgKExDX0FMTD1mcl9GUi5JU08tODg1 OS0xIExDX1RJTUU9IExDX0NUWVBFPSAuL2NvbmZ0ZXN0OyBleGl0KSAyPi9kZXYvbnVsbDsgdGhl bg0KICAgICAgICAgICAgICBndF9jdl9sb2NhbGVfZnI9ZnJfRlIuSVNPLTg4NTktMQ0KICAgICAg ICAgICAgZWxzZQ0KICAgICAgICAgICAgICAjIFRlc3QgZm9yIHRoZSBBSVgsIE9TRi8xLCBGcmVl QlNELCBOZXRCU0QsIE9wZW5CU0QgbG9jYWxlIG5hbWUuDQogICAgICAgICAgICAgIGlmIChMQ19B TEw9ZnJfRlIuSVNPODg1OS0xIExDX1RJTUU9IExDX0NUWVBFPSAuL2NvbmZ0ZXN0OyBleGl0KSAy Pi9kZXYvbnVsbDsgdGhlbg0KICAgICAgICAgICAgICAgIGd0X2N2X2xvY2FsZV9mcj1mcl9GUi5J U084ODU5LTENCiAgICAgICAgICAgICAgZWxzZQ0KICAgICAgICAgICAgICAgICMgVGVzdCBmb3Ig dGhlIEhQLVVYIGxvY2FsZSBuYW1lLg0KICAgICAgICAgICAgICAgIGlmIChMQ19BTEw9ZnJfRlIu aXNvODg1OTEgTENfVElNRT0gTENfQ1RZUEU9IC4vY29uZnRlc3Q7IGV4aXQpIDI+L2Rldi9udWxs OyB0aGVuDQogICAgICAgICAgICAgICAgICBndF9jdl9sb2NhbGVfZnI9ZnJfRlIuaXNvODg1OTEN CiAgICAgICAgICAgICAgICBlbHNlDQogICAgICAgICAgICAgICAgICAjIFRlc3QgZm9yIHRoZSBT b2xhcmlzIDcgbG9jYWxlIG5hbWUuDQogICAgICAgICAgICAgICAgICBpZiAoTENfQUxMPWZyIExD X1RJTUU9IExDX0NUWVBFPSAuL2NvbmZ0ZXN0OyBleGl0KSAyPi9kZXYvbnVsbDsgdGhlbg0KICAg ICAgICAgICAgICAgICAgICBndF9jdl9sb2NhbGVfZnI9ZnINCiAgICAgICAgICAgICAgICAgIGVs c2UNCiAgICAgICAgICAgICAgICAgICAgIyBOb25lIGZvdW5kLg0KICAgICAgICAgICAgICAgICAg ICBndF9jdl9sb2NhbGVfZnI9bm9uZQ0KICAgICAgICAgICAgICAgICAgZmkNCiAgICAgICAgICAg ICAgICBmaQ0KICAgICAgICAgICAgICBmaQ0KICAgICAgICAgICAgZmkNCiAgICAgICAgICBmaQ0K ICAgICAgICAgIDs7DQogICAgICBlc2FjDQogICAgZmkNCiAgICBybSAtZnIgY29uZnRlc3QqDQoN CmZpDQp7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGd0 X2N2X2xvY2FsZV9mciIgPiY1DQokYXNfZWNobyAiJGd0X2N2X2xvY2FsZV9mciIgPiY2OyB9DQog IExPQ0FMRV9GUj0kZ3RfY3ZfbG9jYWxlX2ZyDQoNCg0KDQogIHsgJGFzX2VjaG8gIiRhc19tZTok e2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciBzdHJ0b2xkIGNvbmZvcm1zIHRv IEM5OSIgPiY1DQokYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIHN0cnRvbGQgY29uZm9ybXMg dG8gQzk5Li4uICIgPiY2OyB9DQppZiAke2dsX2N2X2Z1bmNfYzk5X3N0cnRvbGQrOn0gZmFsc2U7 IHRoZW4gOg0KICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNg0KZWxzZQ0KICBjYXQgY29uZmRl ZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0DQovKiBlbmQgY29uZmRlZnMuaC4gICov DQovKiBPbiBIUC1VWCBiZWZvcmUgMTEuMjMsIHN0cnRvbGQgcmV0dXJucyBhIHN0cnVjdCBpbnN0 ZWFkIG9mDQogICAgICAgICAgICAgICAgbG9uZyBkb3VibGUuICBSZWplY3QgaW1wbGVtZW50YXRp b25zIGxpa2UgdGhhdCwgYnkgcmVxdWlyaW5nDQogICAgICAgICAgICAgICAgY29tcGF0aWJpbGl0 eSB3aXRoIHRoZSBDOTkgcHJvdG90eXBlLiAgKi8NCiAgICAgICAgICAgICAjaW5jbHVkZSA8c3Rk bGliLmg+DQogICAgICAgICAgICAgc3RhdGljIGxvbmcgZG91YmxlICgqcCkgKGNoYXIgY29uc3Qg KiwgY2hhciAqKikgPSBzdHJ0b2xkOw0KICAgICAgICAgICAgIHN0YXRpYyBsb25nIGRvdWJsZQ0K ICAgICAgICAgICAgIHRlc3QgKGNoYXIgY29uc3QgKm5wdHIsIGNoYXIgKiplbmRwdHIpDQogICAg ICAgICAgICAgew0KICAgICAgICAgICAgICAgbG9uZyBkb3VibGUgcjsNCiAgICAgICAgICAgICAg IHIgPSBzdHJ0b2xkIChucHRyLCBlbmRwdHIpOw0KICAgICAgICAgICAgICAgcmV0dXJuIHI7DQog ICAgICAgICAgICAgfQ0KaW50DQptYWluICgpDQp7DQpyZXR1cm4gdGVzdCAoIjEuMCIsIE5VTEwp ICE9IDEgfHwgcCAoIjEuMCIsIE5VTEwpICE9IDE7DQogIDsNCiAgcmV0dXJuIDA7DQp9DQpfQUNF T0YNCmlmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoNCiAgZ2xfY3ZfZnVuY19j OTlfc3RydG9sZD15ZXMNCmVsc2UNCiAgZ2xfY3ZfZnVuY19jOTlfc3RydG9sZD1ubw0KZmkNCnJt IC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXA0KICAgIGNvbmZ0ZXN0 JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0DQpmaQ0KeyAkYXNfZWNobyAiJGFzX21lOiR7YXNf bGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRnbF9jdl9mdW5jX2M5OV9zdHJ0b2xkIiA+JjUNCiRh c19lY2hvICIkZ2xfY3ZfZnVuY19jOTlfc3RydG9sZCIgPiY2OyB9DQogIGlmIHRlc3QgJGdsX2N2 X2Z1bmNfYzk5X3N0cnRvbGQgPSB5ZXM7IHRoZW4NCg0KJGFzX2VjaG8gIiNkZWZpbmUgSEFWRV9D OTlfU1RSVE9MRCAxIiA+PmNvbmZkZWZzLmgNCg0KICBmaQ0KDQoNCiAgR05VTElCX19FWElUPTA7 DQogIEdOVUxJQl9BVE9MTD0wOw0KICBHTlVMSUJfQ0FMTE9DX1BPU0lYPTA7DQogIEdOVUxJQl9D QU5PTklDQUxJWkVfRklMRV9OQU1FPTA7DQogIEdOVUxJQl9HRVRMT0FEQVZHPTA7DQogIEdOVUxJ Ql9HRVRTVUJPUFQ9MDsNCiAgR05VTElCX0dSQU5UUFQ9MDsNCiAgR05VTElCX01BTExPQ19QT1NJ WD0wOw0KICBHTlVMSUJfTUJUT1dDPTA7DQogIEdOVUxJQl9NS0RURU1QPTA7DQogIEdOVUxJQl9N S09TVEVNUD0wOw0KICBHTlVMSUJfTUtPU1RFTVBTPTA7DQogIEdOVUxJQl9NS1NURU1QPTA7DQog IEdOVUxJQl9NS1NURU1QUz0wOw0KICBHTlVMSUJfUFRTTkFNRT0wOw0KICBHTlVMSUJfUFVURU5W PTA7DQogIEdOVUxJQl9SQU5ET01fUj0wOw0KICBHTlVMSUJfUkVBTExPQ19QT1NJWD0wOw0KICBH TlVMSUJfUkVBTFBBVEg9MDsNCiAgR05VTElCX1JQTUFUQ0g9MDsNCiAgR05VTElCX1NFVEVOVj0w Ow0KICBHTlVMSUJfU1RSVE9EPTA7DQogIEdOVUxJQl9TVFJUT0xMPTA7DQogIEdOVUxJQl9TVFJU T1VMTD0wOw0KICBHTlVMSUJfU1lTVEVNX1BPU0lYPTA7DQogIEdOVUxJQl9VTkxPQ0tQVD0wOw0K ICBHTlVMSUJfVU5TRVRFTlY9MDsNCiAgR05VTElCX1dDVE9NQj0wOw0KICAgIEhBVkVfX0VYSVQ9 MTsNCiAgSEFWRV9BVE9MTD0xOw0KICBIQVZFX0NBTk9OSUNBTElaRV9GSUxFX05BTUU9MTsNCiAg SEFWRV9ERUNMX0dFVExPQURBVkc9MTsNCiAgSEFWRV9HRVRTVUJPUFQ9MTsNCiAgSEFWRV9HUkFO VFBUPTE7DQogIEhBVkVfTUtEVEVNUD0xOw0KICBIQVZFX01LT1NURU1QPTE7DQogIEhBVkVfTUtP U1RFTVBTPTE7DQogIEhBVkVfTUtTVEVNUD0xOw0KICBIQVZFX01LU1RFTVBTPTE7DQogIEhBVkVf UFRTTkFNRT0xOw0KICBIQVZFX1JBTkRPTV9IPTE7DQogIEhBVkVfUkFORE9NX1I9MTsNCiAgSEFW RV9SRUFMUEFUSD0xOw0KICBIQVZFX1JQTUFUQ0g9MTsNCiAgSEFWRV9TRVRFTlY9MTsNCiAgSEFW RV9ERUNMX1NFVEVOVj0xOw0KICBIQVZFX1NUUlRPRD0xOw0KICBIQVZFX1NUUlRPTEw9MTsNCiAg SEFWRV9TVFJUT1VMTD0xOw0KICBIQVZFX1NUUlVDVF9SQU5ET01fREFUQT0xOw0KICBIQVZFX1NZ U19MT0FEQVZHX0g9MDsNCiAgSEFWRV9VTkxPQ0tQVD0xOw0KICBIQVZFX0RFQ0xfVU5TRVRFTlY9 MTsNCiAgUkVQTEFDRV9DQUxMT0M9MDsNCiAgUkVQTEFDRV9DQU5PTklDQUxJWkVfRklMRV9OQU1F PTA7DQogIFJFUExBQ0VfTUFMTE9DPTA7DQogIFJFUExBQ0VfTUJUT1dDPTA7DQogIFJFUExBQ0Vf TUtTVEVNUD0wOw0KICBSRVBMQUNFX1BVVEVOVj0wOw0KICBSRVBMQUNFX1JFQUxMT0M9MDsNCiAg UkVQTEFDRV9SRUFMUEFUSD0wOw0KICBSRVBMQUNFX1NFVEVOVj0wOw0KICBSRVBMQUNFX1NUUlRP RD0wOw0KICBSRVBMQUNFX1VOU0VURU5WPTA7DQogIFJFUExBQ0VfV0NUT01CPTA7DQoNCg0KICB7 ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIg bWFsbG9jLCByZWFsbG9jLCBjYWxsb2MgYXJlIFBPU0lYIGNvbXBsaWFudCIgPiY1DQokYXNfZWNo b19uICJjaGVja2luZyB3aGV0aGVyIG1hbGxvYywgcmVhbGxvYywgY2FsbG9jIGFyZSBQT1NJWCBj b21wbGlhbnQuLi4gIiA+JjY7IH0NCmlmICR7Z2xfY3ZfZnVuY19tYWxsb2NfcG9zaXgrOn0gZmFs c2U7IHRoZW4gOg0KICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNg0KZWxzZQ0KDQogICAgICAg ICAgICAgICAgICAgICAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNf ZXh0DQovKiBlbmQgY29uZmRlZnMuaC4gICovDQoNCmludA0KbWFpbiAoKQ0Kew0KI2lmIChkZWZp bmVkIF9XSU4zMiB8fCBkZWZpbmVkIF9fV0lOMzJfXykgJiYgISBkZWZpbmVkIF9fQ1lHV0lOX18N CiAgICAgICAgICAgICBjaG9rZSBtZQ0KICAgICAgICAgICAgICNlbmRpZg0KDQogIDsNCiAgcmV0 dXJuIDA7DQp9DQpfQUNFT0YNCmlmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVu IDoNCiAgZ2xfY3ZfZnVuY19tYWxsb2NfcG9zaXg9eWVzDQplbHNlDQogIGdsX2N2X2Z1bmNfbWFs bG9jX3Bvc2l4PW5vDQpmaQ0Kcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29i amV4dCBjb25mdGVzdC4kYWNfZXh0DQoNCmZpDQp7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5l bm8tJExJTkVOT306IHJlc3VsdDogJGdsX2N2X2Z1bmNfbWFsbG9jX3Bvc2l4IiA+JjUNCiRhc19l Y2hvICIkZ2xfY3ZfZnVuY19tYWxsb2NfcG9zaXgiID4mNjsgfQ0KDQoNCg0KDQoNCiAgeyAkYXNf ZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIC8vIGlz IGRpc3RpbmN0IGZyb20gLyIgPiY1DQokYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIC8vIGlz IGRpc3RpbmN0IGZyb20gLy4uLiAiID4mNjsgfQ0KaWYgJHtnbF9jdl9kb3VibGVfc2xhc2hfcm9v dCs6fSBmYWxzZTsgdGhlbiA6DQogICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2DQplbHNlDQog ICBpZiB0ZXN0IHgiJGNyb3NzX2NvbXBpbGluZyIgPSB4eWVzIDsgdGhlbg0KICAgICAgICAjIFdo ZW4gY3Jvc3MtY29tcGlsaW5nLCB0aGVyZSBpcyBubyB3YXkgdG8gdGVsbCB3aGV0aGVyIC8vIGlz IHNwZWNpYWwNCiAgICAgICAgIyBzaG9ydCBvZiBhIGxpc3Qgb2YgaG9zdHMuICBIb3dldmVyLCB0 aGUgb25seSBrbm93biBob3N0cyB0byBkYXRlDQogICAgICAgICMgdGhhdCBoYXZlIGEgZGlzdGlu Y3QgLy8gYXJlIEFwb2xsbyBEb21haW5PUyAodG9vIG9sZCB0byBwb3J0IHRvKSwNCiAgICAgICAg IyBDeWd3aW4sIGFuZCB6L09TLiAgSWYgYW55b25lIGtub3dzIG9mIGFub3RoZXIgc3lzdGVtIGZv ciB3aGljaCAvLyBoYXMNCiAgICAgICAgIyBzcGVjaWFsIHNlbWFudGljcyBhbmQgaXMgZGlzdGlu Y3QgZnJvbSAvLCBwbGVhc2UgcmVwb3J0IGl0IHRvDQogICAgICAgICMgPGJ1Zy1nbnVsaWJAZ251 Lm9yZz4uDQogICAgICAgIGNhc2UgJGhvc3QgaW4NCiAgICAgICAgICAqLWN5Z3dpbiB8IGkzNzAt aWJtLW9wZW5lZGl0aW9uKQ0KICAgICAgICAgICAgZ2xfY3ZfZG91YmxlX3NsYXNoX3Jvb3Q9eWVz IDs7DQogICAgICAgICAgKikNCiAgICAgICAgICAgICMgQmUgb3B0aW1pc3RpYyBhbmQgYXNzdW1l IHRoYXQgLyBhbmQgLy8gYXJlIHRoZSBzYW1lIHdoZW4gd2UNCiAgICAgICAgICAgICMgZG9uJ3Qg a25vdy4NCiAgICAgICAgICAgIGdsX2N2X2RvdWJsZV9zbGFzaF9yb290PSd1bmtub3duLCBhc3N1 bWluZyBubycgOzsNCiAgICAgICAgZXNhYw0KICAgICAgZWxzZQ0KICAgICAgICBzZXQgeCBgbHMg LWRpIC8gLy8gMj4vZGV2L251bGxgDQogICAgICAgIGlmIHRlc3QgIiQyIiA9ICIkNCIgJiYgd2Mg Ly9kZXYvbnVsbCA+L2Rldi9udWxsIDI+JjE7IHRoZW4NCiAgICAgICAgICBnbF9jdl9kb3VibGVf c2xhc2hfcm9vdD1ubw0KICAgICAgICBlbHNlDQogICAgICAgICAgZ2xfY3ZfZG91YmxlX3NsYXNo X3Jvb3Q9eWVzDQogICAgICAgIGZpDQogICAgICBmaQ0KZmkNCnsgJGFzX2VjaG8gIiRhc19tZTok e2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkZ2xfY3ZfZG91YmxlX3NsYXNoX3Jvb3QiID4m NQ0KJGFzX2VjaG8gIiRnbF9jdl9kb3VibGVfc2xhc2hfcm9vdCIgPiY2OyB9DQogIGlmIHRlc3Qg IiRnbF9jdl9kb3VibGVfc2xhc2hfcm9vdCIgPSB5ZXM7IHRoZW4NCg0KJGFzX2VjaG8gIiNkZWZp bmUgRE9VQkxFX1NMQVNIX0lTX0RJU1RJTkNUX1JPT1QgMSIgPj5jb25mZGVmcy5oDQoNCiAgZmkN Cg0KDQoNCg0KDQogIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hl Y2tpbmcgd2hldGhlciByZWFscGF0aCB3b3JrcyIgPiY1DQokYXNfZWNob19uICJjaGVja2luZyB3 aGV0aGVyIHJlYWxwYXRoIHdvcmtzLi4uICIgPiY2OyB9DQppZiAke2dsX2N2X2Z1bmNfcmVhbHBh dGhfd29ya3MrOn0gZmFsc2U7IHRoZW4gOg0KICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNg0K ZWxzZQ0KDQogICAgdG91Y2ggY29uZnRlc3QuYQ0KICAgIGlmIHRlc3QgIiRjcm9zc19jb21waWxp bmciID0geWVzOyB0aGVuIDoNCiAgZ2xfY3ZfZnVuY19yZWFscGF0aF93b3Jrcz0iZ3Vlc3Npbmcg bm8iDQplbHNlDQogIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQN Ci8qIGVuZCBjb25mZGVmcy5oLiAgKi8NCg0KDQogICAgICAgICNpbmNsdWRlIDxzdGRsaWIuaD4N Cg0KaW50DQptYWluICgpDQp7DQoNCiAgICAgICAgaW50IHJlc3VsdCA9IDA7DQogICAgICAgIHsN CiAgICAgICAgICBjaGFyICpuYW1lID0gcmVhbHBhdGggKCJjb25mdGVzdC5hIiwgTlVMTCk7DQog ICAgICAgICAgaWYgKCEobmFtZSAmJiAqbmFtZSA9PSAnLycpKQ0KICAgICAgICAgICAgcmVzdWx0 IHw9IDE7DQogICAgICAgIH0NCiAgICAgICAgew0KICAgICAgICAgIGNoYXIgKm5hbWUgPSByZWFs cGF0aCAoImNvbmZ0ZXN0LmIvLi4vY29uZnRlc3QuYSIsIE5VTEwpOw0KICAgICAgICAgIGlmIChu YW1lICE9IE5VTEwpDQogICAgICAgICAgICByZXN1bHQgfD0gMjsNCiAgICAgICAgfQ0KICAgICAg ICB7DQogICAgICAgICAgY2hhciAqbmFtZSA9IHJlYWxwYXRoICgiY29uZnRlc3QuYS8iLCBOVUxM KTsNCiAgICAgICAgICBpZiAobmFtZSAhPSBOVUxMKQ0KICAgICAgICAgICAgcmVzdWx0IHw9IDQ7 DQogICAgICAgIH0NCiAgICAgICAgcmV0dXJuIHJlc3VsdDsNCg0KICA7DQogIHJldHVybiAwOw0K fQ0KDQpfQUNFT0YNCmlmIGFjX2ZuX2NfdHJ5X3J1biAiJExJTkVOTyI7IHRoZW4gOg0KICBnbF9j dl9mdW5jX3JlYWxwYXRoX3dvcmtzPXllcw0KZWxzZQ0KICBnbF9jdl9mdW5jX3JlYWxwYXRoX3dv cmtzPW5vDQpmaQ0Kcm0gLWYgY29yZSAqLmNvcmUgY29yZS5jb25mdGVzdC4qIGdtb24ub3V0IGJi Lm91dCBjb25mdGVzdCRhY19leGVleHQgXA0KICBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0 LmJlYW0gY29uZnRlc3QuJGFjX2V4dA0KZmkNCg0KDQpmaQ0KeyAkYXNfZWNobyAiJGFzX21lOiR7 YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRnbF9jdl9mdW5jX3JlYWxwYXRoX3dvcmtzIiA+ JjUNCiRhc19lY2hvICIkZ2xfY3ZfZnVuY19yZWFscGF0aF93b3JrcyIgPiY2OyB9DQogIGlmIHRl c3QgIiRnbF9jdl9mdW5jX3JlYWxwYXRoX3dvcmtzIiA9IHllczsgdGhlbg0KDQokYXNfZWNobyAi I2RlZmluZSBGVU5DX1JFQUxQQVRIX1dPUktTIDEiID4+Y29uZmRlZnMuaA0KDQogIGZpDQoNCg0K DQoNCiAgR05VTElCX0NIT1dOPTA7DQogIEdOVUxJQl9DTE9TRT0wOw0KICBHTlVMSUJfRFVQMj0w Ow0KICBHTlVMSUJfRFVQMz0wOw0KICBHTlVMSUJfRU5WSVJPTj0wOw0KICBHTlVMSUJfRVVJREFD Q0VTUz0wOw0KICBHTlVMSUJfRkFDQ0VTU0FUPTA7DQogIEdOVUxJQl9GQ0hESVI9MDsNCiAgR05V TElCX0ZDSE9XTkFUPTA7DQogIEdOVUxJQl9GU1lOQz0wOw0KICBHTlVMSUJfRlRSVU5DQVRFPTA7 DQogIEdOVUxJQl9HRVRDV0Q9MDsNCiAgR05VTElCX0dFVERPTUFJTk5BTUU9MDsNCiAgR05VTElC X0dFVERUQUJMRVNJWkU9MDsNCiAgR05VTElCX0dFVEdST1VQUz0wOw0KICBHTlVMSUJfR0VUSE9T VE5BTUU9MDsNCiAgR05VTElCX0dFVExPR0lOPTA7DQogIEdOVUxJQl9HRVRMT0dJTl9SPTA7DQog IEdOVUxJQl9HRVRQQUdFU0laRT0wOw0KICBHTlVMSUJfR0VUVVNFUlNIRUxMPTA7DQogIEdOVUxJ Ql9MQ0hPV049MDsNCiAgR05VTElCX0xJTks9MDsNCiAgR05VTElCX0xJTktBVD0wOw0KICBHTlVM SUJfTFNFRUs9MDsNCiAgR05VTElCX1BJUEU9MDsNCiAgR05VTElCX1BJUEUyPTA7DQogIEdOVUxJ Ql9QUkVBRD0wOw0KICBHTlVMSUJfUFdSSVRFPTA7DQogIEdOVUxJQl9SRUFETElOSz0wOw0KICBH TlVMSUJfUkVBRExJTktBVD0wOw0KICBHTlVMSUJfUk1ESVI9MDsNCiAgR05VTElCX1NMRUVQPTA7 DQogIEdOVUxJQl9TWU1MSU5LPTA7DQogIEdOVUxJQl9TWU1MSU5LQVQ9MDsNCiAgR05VTElCX1RU WU5BTUVfUj0wOw0KICBHTlVMSUJfVU5JU1REX0hfR0VUT1BUPTA7DQogIEdOVUxJQl9VTklTVERf SF9TSUdQSVBFPTA7DQogIEdOVUxJQl9VTkxJTks9MDsNCiAgR05VTElCX1VOTElOS0FUPTA7DQog IEdOVUxJQl9VU0xFRVA9MDsNCiAgR05VTElCX1dSSVRFPTA7DQogICAgSEFWRV9DSE9XTj0xOw0K ICBIQVZFX0RVUDI9MTsNCiAgSEFWRV9EVVAzPTE7DQogIEhBVkVfRVVJREFDQ0VTUz0xOw0KICBI QVZFX0ZBQ0NFU1NBVD0xOw0KICBIQVZFX0ZDSERJUj0xOw0KICBIQVZFX0ZDSE9XTkFUPTE7DQog IEhBVkVfRlNZTkM9MTsNCiAgSEFWRV9GVFJVTkNBVEU9MTsNCiAgSEFWRV9HRVREVEFCTEVTSVpF PTE7DQogIEhBVkVfR0VUR1JPVVBTPTE7DQogIEhBVkVfR0VUSE9TVE5BTUU9MTsNCiAgSEFWRV9H RVRMT0dJTj0xOw0KICBIQVZFX0dFVFBBR0VTSVpFPTE7DQogIEhBVkVfTENIT1dOPTE7DQogIEhB VkVfTElOSz0xOw0KICBIQVZFX0xJTktBVD0xOw0KICBIQVZFX1BJUEU9MTsNCiAgSEFWRV9QSVBF Mj0xOw0KICBIQVZFX1BSRUFEPTE7DQogIEhBVkVfUFdSSVRFPTE7DQogIEhBVkVfUkVBRExJTks9 MTsNCiAgSEFWRV9SRUFETElOS0FUPTE7DQogIEhBVkVfU0xFRVA9MTsNCiAgSEFWRV9TWU1MSU5L PTE7DQogIEhBVkVfU1lNTElOS0FUPTE7DQogIEhBVkVfVU5MSU5LQVQ9MTsNCiAgSEFWRV9VU0xF RVA9MTsNCiAgSEFWRV9ERUNMX0VOVklST049MTsNCiAgSEFWRV9ERUNMX0ZDSERJUj0xOw0KICBI QVZFX0RFQ0xfR0VURE9NQUlOTkFNRT0xOw0KICBIQVZFX0RFQ0xfR0VUTE9HSU5fUj0xOw0KICBI QVZFX0RFQ0xfR0VUUEFHRVNJWkU9MTsNCiAgSEFWRV9ERUNMX0dFVFVTRVJTSEVMTD0xOw0KICBI QVZFX0RFQ0xfVFRZTkFNRV9SPTE7DQogIEhBVkVfT1NfSD0wOw0KICBIQVZFX1NZU19QQVJBTV9I PTA7DQogIFJFUExBQ0VfQ0hPV049MDsNCiAgUkVQTEFDRV9DTE9TRT0wOw0KICBSRVBMQUNFX0RV UD0wOw0KICBSRVBMQUNFX0RVUDI9MDsNCiAgUkVQTEFDRV9GQ0hPV05BVD0wOw0KICBSRVBMQUNF X0dFVENXRD0wOw0KICBSRVBMQUNFX0dFVERPTUFJTk5BTUU9MDsNCiAgUkVQTEFDRV9HRVRMT0dJ Tl9SPTA7DQogIFJFUExBQ0VfR0VUR1JPVVBTPTA7DQogIFJFUExBQ0VfR0VUUEFHRVNJWkU9MDsN CiAgUkVQTEFDRV9MQ0hPV049MDsNCiAgUkVQTEFDRV9MSU5LPTA7DQogIFJFUExBQ0VfTElOS0FU PTA7DQogIFJFUExBQ0VfTFNFRUs9MDsNCiAgUkVQTEFDRV9QUkVBRD0wOw0KICBSRVBMQUNFX1BX UklURT0wOw0KICBSRVBMQUNFX1JFQURMSU5LPTA7DQogIFJFUExBQ0VfUk1ESVI9MDsNCiAgUkVQ TEFDRV9TTEVFUD0wOw0KICBSRVBMQUNFX1NZTUxJTks9MDsNCiAgUkVQTEFDRV9UVFlOQU1FX1I9 MDsNCiAgUkVQTEFDRV9VTkxJTks9MDsNCiAgUkVQTEFDRV9VTkxJTktBVD0wOw0KICBSRVBMQUNF X1VTTEVFUD0wOw0KICBSRVBMQUNFX1dSSVRFPTA7DQogIFVOSVNURF9IX0hBVkVfV0lOU09DSzJf SD0wOw0KICBVTklTVERfSF9IQVZFX1dJTlNPQ0syX0hfQU5EX1VTRV9TT0NLRVRTPTA7DQoNCg0K eyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgdWlk X3QgaW4gc3lzL3R5cGVzLmgiID4mNQ0KJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIHVpZF90IGlu IHN5cy90eXBlcy5oLi4uICIgPiY2OyB9DQppZiAke2FjX2N2X3R5cGVfdWlkX3QrOn0gZmFsc2U7 IHRoZW4gOg0KICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNg0KZWxzZQ0KICBjYXQgY29uZmRl ZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0DQovKiBlbmQgY29uZmRlZnMuaC4gICov DQojaW5jbHVkZSA8c3lzL3R5cGVzLmg+DQoNCl9BQ0VPRg0KaWYgKGV2YWwgIiRhY19jcHAgY29u ZnRlc3QuJGFjX2V4dCIpIDI+JjUgfA0KICAkRUdSRVAgInVpZF90IiA+L2Rldi9udWxsIDI+JjE7 IHRoZW4gOg0KICBhY19jdl90eXBlX3VpZF90PXllcw0KZWxzZQ0KICBhY19jdl90eXBlX3VpZF90 PW5vDQpmaQ0Kcm0gLWYgY29uZnRlc3QqDQoNCmZpDQp7ICRhc19lY2hvICIkYXNfbWU6JHthc19s aW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X3R5cGVfdWlkX3QiID4mNQ0KJGFzX2VjaG8g IiRhY19jdl90eXBlX3VpZF90IiA+JjY7IH0NCmlmIHRlc3QgJGFjX2N2X3R5cGVfdWlkX3QgPSBu bzsgdGhlbg0KDQokYXNfZWNobyAiI2RlZmluZSB1aWRfdCBpbnQiID4+Y29uZmRlZnMuaA0KDQoN CiRhc19lY2hvICIjZGVmaW5lIGdpZF90IGludCIgPj5jb25mZGVmcy5oDQoNCmZpDQoNCmZvciBh Y19oZWFkZXIgaW4gdW5pc3RkLmgNCmRvIDoNCiAgYWNfZm5fY19jaGVja19oZWFkZXJfbW9uZ3Jl bCAiJExJTkVOTyIgInVuaXN0ZC5oIiAiYWNfY3ZfaGVhZGVyX3VuaXN0ZF9oIiAiJGFjX2luY2x1 ZGVzX2RlZmF1bHQiDQppZiB0ZXN0ICJ4JGFjX2N2X2hlYWRlcl91bmlzdGRfaCIgPSB4eWVzOyB0 aGVuIDoNCiAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRg0KI2RlZmluZSBIQVZFX1VOSVNURF9I IDENCl9BQ0VPRg0KDQpmaQ0KDQpkb25lDQoNCnsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVu by0kTElORU5PfTogY2hlY2tpbmcgZm9yIHdvcmtpbmcgY2hvd24iID4mNQ0KJGFzX2VjaG9fbiAi Y2hlY2tpbmcgZm9yIHdvcmtpbmcgY2hvd24uLi4gIiA+JjY7IH0NCmlmICR7YWNfY3ZfZnVuY19j aG93bl93b3Jrcys6fSBmYWxzZTsgdGhlbiA6DQogICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2 DQplbHNlDQogIGlmIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0geWVzOyB0aGVuIDoNCiAgYWNf Y3ZfZnVuY19jaG93bl93b3Jrcz1ubw0KZWxzZQ0KICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9G ID5jb25mdGVzdC4kYWNfZXh0DQovKiBlbmQgY29uZmRlZnMuaC4gICovDQokYWNfaW5jbHVkZXNf ZGVmYXVsdA0KI2luY2x1ZGUgPGZjbnRsLmg+DQoNCmludA0KbWFpbiAoKQ0Kew0KICBjaGFyICpm ID0gImNvbmZ0ZXN0LmNob3duIjsNCiAgc3RydWN0IHN0YXQgYmVmb3JlLCBhZnRlcjsNCg0KICBp ZiAoY3JlYXQgKGYsIDA2MDApIDwgMCkNCiAgICByZXR1cm4gMTsNCiAgaWYgKHN0YXQgKGYsICZi ZWZvcmUpIDwgMCkNCiAgICByZXR1cm4gMTsNCiAgaWYgKGNob3duIChmLCAodWlkX3QpIC0xLCAo Z2lkX3QpIC0xKSA9PSAtMSkNCiAgICByZXR1cm4gMTsNCiAgaWYgKHN0YXQgKGYsICZhZnRlcikg PCAwKQ0KICAgIHJldHVybiAxOw0KICByZXR1cm4gISAoYmVmb3JlLnN0X3VpZCA9PSBhZnRlci5z dF91aWQgJiYgYmVmb3JlLnN0X2dpZCA9PSBhZnRlci5zdF9naWQpOw0KDQogIDsNCiAgcmV0dXJu IDA7DQp9DQpfQUNFT0YNCmlmIGFjX2ZuX2NfdHJ5X3J1biAiJExJTkVOTyI7IHRoZW4gOg0KICBh Y19jdl9mdW5jX2Nob3duX3dvcmtzPXllcw0KZWxzZQ0KICBhY19jdl9mdW5jX2Nob3duX3dvcmtz PW5vDQpmaQ0Kcm0gLWYgY29yZSAqLmNvcmUgY29yZS5jb25mdGVzdC4qIGdtb24ub3V0IGJiLm91 dCBjb25mdGVzdCRhY19leGVleHQgXA0KICBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LmJl YW0gY29uZnRlc3QuJGFjX2V4dA0KZmkNCg0Kcm0gLWYgY29uZnRlc3QuY2hvd24NCg0KZmkNCnsg JGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfZnVu Y19jaG93bl93b3JrcyIgPiY1DQokYXNfZWNobyAiJGFjX2N2X2Z1bmNfY2hvd25fd29ya3MiID4m NjsgfQ0KaWYgdGVzdCAkYWNfY3ZfZnVuY19jaG93bl93b3JrcyA9IHllczsgdGhlbg0KDQokYXNf ZWNobyAiI2RlZmluZSBIQVZFX0NIT1dOIDEiID4+Y29uZmRlZnMuaA0KDQpmaQ0KDQoNCiAgeyAk YXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIGNo b3duIGRlcmVmZXJlbmNlcyBzeW1saW5rcyIgPiY1DQokYXNfZWNob19uICJjaGVja2luZyB3aGV0 aGVyIGNob3duIGRlcmVmZXJlbmNlcyBzeW1saW5rcy4uLiAiID4mNjsgfQ0KaWYgJHtnbF9jdl9m dW5jX2Nob3duX2ZvbGxvd3Nfc3ltbGluays6fSBmYWxzZTsgdGhlbiA6DQogICRhc19lY2hvX24g IihjYWNoZWQpICIgPiY2DQplbHNlDQoNCiAgICAgIGlmIHRlc3QgIiRjcm9zc19jb21waWxpbmci ID0geWVzOyB0aGVuIDoNCiAgZ2xfY3ZfZnVuY19jaG93bl9mb2xsb3dzX3N5bWxpbms9eWVzDQoN CmVsc2UNCiAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dA0KLyog ZW5kIGNvbmZkZWZzLmguICAqLw0KDQojaW5jbHVkZSA8dW5pc3RkLmg+DQojaW5jbHVkZSA8c3Rk bGliLmg+DQojaW5jbHVkZSA8ZXJybm8uaD4NCg0KICAgICAgICBpbnQNCiAgICAgICAgbWFpbiAo KQ0KICAgICAgICB7DQogICAgICAgICAgaW50IHJlc3VsdCA9IDA7DQogICAgICAgICAgY2hhciBj b25zdCAqZGFuZ2xpbmdfc3ltbGluayA9ICJjb25mdGVzdC5kYW5nbGUiOw0KDQogICAgICAgICAg dW5saW5rIChkYW5nbGluZ19zeW1saW5rKTsNCiAgICAgICAgICBpZiAoc3ltbGluayAoImNvbmZ0 ZXN0Lm5vLXN1Y2giLCBkYW5nbGluZ19zeW1saW5rKSkNCiAgICAgICAgICAgIGFib3J0ICgpOw0K DQogICAgICAgICAgLyogRXhpdCBzdWNjZXNzZnVsbHkgb24gYSBjb25mb3JtaW5nIHN5c3RlbSwN CiAgICAgICAgICAgICBpLmUuLCB3aGVyZSBjaG93biBtdXN0IGZhaWwgd2l0aCBFTk9FTlQuICAq Lw0KICAgICAgICAgIGlmIChjaG93biAoZGFuZ2xpbmdfc3ltbGluaywgZ2V0dWlkICgpLCBnZXRn aWQgKCkpID09IDApDQogICAgICAgICAgICByZXN1bHQgfD0gMTsNCiAgICAgICAgICBpZiAoZXJy bm8gIT0gRU5PRU5UKQ0KICAgICAgICAgICAgcmVzdWx0IHw9IDI7DQogICAgICAgICAgcmV0dXJu IHJlc3VsdDsNCiAgICAgICAgfQ0KDQpfQUNFT0YNCmlmIGFjX2ZuX2NfdHJ5X3J1biAiJExJTkVO TyI7IHRoZW4gOg0KICBnbF9jdl9mdW5jX2Nob3duX2ZvbGxvd3Nfc3ltbGluaz15ZXMNCmVsc2UN CiAgZ2xfY3ZfZnVuY19jaG93bl9mb2xsb3dzX3N5bWxpbms9bm8NCmZpDQpybSAtZiBjb3JlICou Y29yZSBjb3JlLmNvbmZ0ZXN0LiogZ21vbi5vdXQgYmIub3V0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCBc DQogIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuYmVhbSBjb25mdGVzdC4kYWNfZXh0DQpm aQ0KDQoNCg0KZmkNCnsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVz dWx0OiAkZ2xfY3ZfZnVuY19jaG93bl9mb2xsb3dzX3N5bWxpbmsiID4mNQ0KJGFzX2VjaG8gIiRn bF9jdl9mdW5jX2Nob3duX2ZvbGxvd3Nfc3ltbGluayIgPiY2OyB9DQoNCiAgaWYgdGVzdCAkZ2xf Y3ZfZnVuY19jaG93bl9mb2xsb3dzX3N5bWxpbmsgPSBubzsgdGhlbg0KDQokYXNfZWNobyAiI2Rl ZmluZSBDSE9XTl9NT0RJRklFU19TWU1MSU5LIDEiID4+Y29uZmRlZnMuaA0KDQogIGZpDQoNCg0K DQoNCg0KDQoNCg0KDQoNCg0KDQogICAgaWYgdGVzdCAkYWNfY3ZfZnVuY19jaG93biA9IG5vOyB0 aGVuDQogICAgSEFWRV9DSE9XTj0wDQoNCg0KDQoNCg0KDQoNCg0KICBnbF9MSUJPQkpTPSIkZ2xf TElCT0JKUyBjaG93bi4kYWNfb2JqZXh0Ig0KDQogIGVsc2UNCiAgICAgICAgaWYgdGVzdCAkZ2xf Y3ZfZnVuY19jaG93bl9mb2xsb3dzX3N5bWxpbmsgPSBubzsgdGhlbg0KICAgICAgUkVQTEFDRV9D SE9XTj0xDQoNCg0KDQoNCg0KDQoNCg0KICBnbF9MSUJPQkpTPSIkZ2xfTElCT0JKUyBjaG93bi4k YWNfb2JqZXh0Ig0KDQogICAgZmkNCg0KICAgICAgICBpZiB0ZXN0ICRhY19jdl9mdW5jX2Nob3du X3dvcmtzID0gbm87IHRoZW4NCg0KJGFzX2VjaG8gIiNkZWZpbmUgQ0hPV05fRkFJTFNfVE9fSE9O T1JfSURfT0ZfTkVHQVRJVkVfT05FIDEiID4+Y29uZmRlZnMuaA0KDQogICAgICBSRVBMQUNFX0NI T1dOPTENCg0KDQoNCg0KDQoNCg0KDQogIGdsX0xJQk9CSlM9IiRnbF9MSUJPQkpTIGNob3duLiRh Y19vYmpleHQiDQoNCiAgICBmaQ0KDQogICAgICAgICAgICAgICAgeyAkYXNfZWNobyAiJGFzX21l OiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIGNob3duIGhvbm9ycyB0cmFp bGluZyBzbGFzaCIgPiY1DQokYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIGNob3duIGhvbm9y cyB0cmFpbGluZyBzbGFzaC4uLiAiID4mNjsgfQ0KaWYgJHtnbF9jdl9mdW5jX2Nob3duX3NsYXNo X3dvcmtzKzp9IGZhbHNlOyB0aGVuIDoNCiAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYNCmVs c2UNCiAgdG91Y2ggY29uZnRlc3QuZmlsZSAmJiBybSAtZiBjb25mdGVzdC5saW5rDQogICAgICAg aWYgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgPSB5ZXM7IHRoZW4gOg0KICBnbF9jdl9mdW5jX2No b3duX3NsYXNoX3dvcmtzPSJndWVzc2luZyBubyINCmVsc2UNCiAgY2F0IGNvbmZkZWZzLmggLSA8 PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dA0KLyogZW5kIGNvbmZkZWZzLmguICAqLw0KDQojaW5j bHVkZSA8dW5pc3RkLmg+DQojaW5jbHVkZSA8c3RkbGliLmg+DQojaW5jbHVkZSA8ZXJybm8uaD4N Cg0KaW50DQptYWluICgpDQp7DQogICAgaWYgKHN5bWxpbmsgKCJjb25mdGVzdC5maWxlIiwgImNv bmZ0ZXN0LmxpbmsiKSkgcmV0dXJuIDE7DQogICAgICAgICAgaWYgKGNob3duICgiY29uZnRlc3Qu bGluay8iLCBnZXR1aWQgKCksIGdldGdpZCAoKSkgPT0gMCkgcmV0dXJuIDI7DQoNCiAgOw0KICBy ZXR1cm4gMDsNCn0NCl9BQ0VPRg0KaWYgYWNfZm5fY190cnlfcnVuICIkTElORU5PIjsgdGhlbiA6 DQogIGdsX2N2X2Z1bmNfY2hvd25fc2xhc2hfd29ya3M9eWVzDQplbHNlDQogIGdsX2N2X2Z1bmNf Y2hvd25fc2xhc2hfd29ya3M9bm8NCmZpDQpybSAtZiBjb3JlICouY29yZSBjb3JlLmNvbmZ0ZXN0 LiogZ21vbi5vdXQgYmIub3V0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCBcDQogIGNvbmZ0ZXN0LiRhY19v YmpleHQgY29uZnRlc3QuYmVhbSBjb25mdGVzdC4kYWNfZXh0DQpmaQ0KDQogICAgICBybSAtZiBj b25mdGVzdC5saW5rIGNvbmZ0ZXN0LmZpbGUNCmZpDQp7ICRhc19lY2hvICIkYXNfbWU6JHthc19s aW5lbm8tJExJTkVOT306IHJlc3VsdDogJGdsX2N2X2Z1bmNfY2hvd25fc2xhc2hfd29ya3MiID4m NQ0KJGFzX2VjaG8gIiRnbF9jdl9mdW5jX2Nob3duX3NsYXNoX3dvcmtzIiA+JjY7IH0NCiAgICBp ZiB0ZXN0ICIkZ2xfY3ZfZnVuY19jaG93bl9zbGFzaF93b3JrcyIgIT0geWVzOyB0aGVuDQoNCiRh c19lY2hvICIjZGVmaW5lIENIT1dOX1RSQUlMSU5HX1NMQVNIX0JVRyAxIiA+PmNvbmZkZWZzLmgN Cg0KICAgICAgUkVQTEFDRV9DSE9XTj0xDQoNCg0KDQoNCg0KDQoNCg0KICBnbF9MSUJPQkpTPSIk Z2xfTElCT0JKUyBjaG93bi4kYWNfb2JqZXh0Ig0KDQogICAgZmkNCg0KICAgICAgICB7ICRhc19l Y2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgY2hvd24g YWx3YXlzIHVwZGF0ZXMgY3RpbWUiID4mNQ0KJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciBj aG93biBhbHdheXMgdXBkYXRlcyBjdGltZS4uLiAiID4mNjsgfQ0KaWYgJHtnbF9jdl9mdW5jX2No b3duX2N0aW1lX3dvcmtzKzp9IGZhbHNlOyB0aGVuIDoNCiAgJGFzX2VjaG9fbiAiKGNhY2hlZCkg IiA+JjYNCmVsc2UNCiAgaWYgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgPSB5ZXM7IHRoZW4gOg0K ICBnbF9jdl9mdW5jX2Nob3duX2N0aW1lX3dvcmtzPSJndWVzc2luZyBubyINCmVsc2UNCiAgY2F0 IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dA0KLyogZW5kIGNvbmZkZWZz LmguICAqLw0KDQojaW5jbHVkZSA8dW5pc3RkLmg+DQojaW5jbHVkZSA8c3RkbGliLmg+DQojaW5j bHVkZSA8ZXJybm8uaD4NCiNpbmNsdWRlIDxmY250bC5oPg0KI2luY2x1ZGUgPHN5cy9zdGF0Lmg+ DQoNCmludA0KbWFpbiAoKQ0Kew0KICAgIHN0cnVjdCBzdGF0IHN0MSwgc3QyOw0KICAgICAgICAg IGlmIChjbG9zZSAoY3JlYXQgKCJjb25mdGVzdC5maWxlIiwgMDYwMCkpKSByZXR1cm4gMTsNCiAg ICAgICAgICBpZiAoc3RhdCAoImNvbmZ0ZXN0LmZpbGUiLCAmc3QxKSkgcmV0dXJuIDI7DQogICAg ICAgICAgc2xlZXAgKDEpOw0KICAgICAgICAgIGlmIChjaG93biAoImNvbmZ0ZXN0LmZpbGUiLCBz dDEuc3RfdWlkLCBzdDEuc3RfZ2lkKSkgcmV0dXJuIDM7DQogICAgICAgICAgaWYgKHN0YXQgKCJj b25mdGVzdC5maWxlIiwgJnN0MikpIHJldHVybiA0Ow0KICAgICAgICAgIGlmIChzdDIuc3RfY3Rp bWUgPD0gc3QxLnN0X2N0aW1lKSByZXR1cm4gNTsNCg0KICA7DQogIHJldHVybiAwOw0KfQ0KX0FD RU9GDQppZiBhY19mbl9jX3RyeV9ydW4gIiRMSU5FTk8iOyB0aGVuIDoNCiAgZ2xfY3ZfZnVuY19j aG93bl9jdGltZV93b3Jrcz15ZXMNCmVsc2UNCiAgZ2xfY3ZfZnVuY19jaG93bl9jdGltZV93b3Jr cz1ubw0KZmkNCnJtIC1mIGNvcmUgKi5jb3JlIGNvcmUuY29uZnRlc3QuKiBnbW9uLm91dCBiYi5v dXQgY29uZnRlc3QkYWNfZXhlZXh0IFwNCiAgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC5i ZWFtIGNvbmZ0ZXN0LiRhY19leHQNCmZpDQoNCiAgICAgIHJtIC1mIGNvbmZ0ZXN0LmZpbGUNCmZp DQp7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGdsX2N2 X2Z1bmNfY2hvd25fY3RpbWVfd29ya3MiID4mNQ0KJGFzX2VjaG8gIiRnbF9jdl9mdW5jX2Nob3du X2N0aW1lX3dvcmtzIiA+JjY7IH0NCiAgICBpZiB0ZXN0ICIkZ2xfY3ZfZnVuY19jaG93bl9jdGlt ZV93b3JrcyIgIT0geWVzOyB0aGVuDQoNCiRhc19lY2hvICIjZGVmaW5lIENIT1dOX0NIQU5HRV9U SU1FX0JVRyAxIiA+PmNvbmZkZWZzLmgNCg0KICAgICAgUkVQTEFDRV9DSE9XTj0xDQoNCg0KDQoN Cg0KDQoNCg0KICBnbF9MSUJPQkpTPSIkZ2xfTElCT0JKUyBjaG93bi4kYWNfb2JqZXh0Ig0KDQog ICAgZmkNCg0KICAgIGlmIHRlc3QgJFJFUExBQ0VfQ0hPV04gPSAxICYmIHRlc3QgJGFjX2N2X2Z1 bmNfZmNob3duID0gbm87IHRoZW4NCg0KDQoNCg0KDQoNCg0KDQogIGdsX0xJQk9CSlM9IiRnbF9M SUJPQkpTIGZjaG93bi1zdHViLiRhY19vYmpleHQiDQoNCiAgICBmaQ0KICBmaQ0KDQoNCiAgR05V TElCX0lPQ1RMPTA7DQogICAgU1lTX0lPQ1RMX0hfSEFWRV9XSU5TT0NLMl9IPTA7DQogIFNZU19J T0NUTF9IX0hBVkVfV0lOU09DSzJfSF9BTkRfVVNFX1NPQ0tFVFM9MDsNCg0KICBSRVBMQUNFX0lP Q1RMPTA7DQoNCg0KDQoNCiAgR05VTElCX0RQUklOVEY9MDsNCiAgR05VTElCX0ZDTE9TRT0wOw0K ICBHTlVMSUJfRkZMVVNIPTA7DQogIEdOVUxJQl9GT1BFTj0wOw0KICBHTlVMSUJfRlBSSU5URj0w Ow0KICBHTlVMSUJfRlBSSU5URl9QT1NJWD0wOw0KICBHTlVMSUJfRlBVUkdFPTA7DQogIEdOVUxJ Ql9GUFVUQz0wOw0KICBHTlVMSUJfRlBVVFM9MDsNCiAgR05VTElCX0ZSRU9QRU49MDsNCiAgR05V TElCX0ZTRUVLPTA7DQogIEdOVUxJQl9GU0VFS089MDsNCiAgR05VTElCX0ZURUxMPTA7DQogIEdO VUxJQl9GVEVMTE89MDsNCiAgR05VTElCX0ZXUklURT0wOw0KICBHTlVMSUJfR0VUREVMSU09MDsN CiAgR05VTElCX0dFVExJTkU9MDsNCiAgR05VTElCX09CU1RBQ0tfUFJJTlRGPTA7DQogIEdOVUxJ Ql9PQlNUQUNLX1BSSU5URl9QT1NJWD0wOw0KICBHTlVMSUJfUEVSUk9SPTA7DQogIEdOVUxJQl9Q T1BFTj0wOw0KICBHTlVMSUJfUFJJTlRGPTA7DQogIEdOVUxJQl9QUklOVEZfUE9TSVg9MDsNCiAg R05VTElCX1BVVEM9MDsNCiAgR05VTElCX1BVVENIQVI9MDsNCiAgR05VTElCX1BVVFM9MDsNCiAg R05VTElCX1JFTU9WRT0wOw0KICBHTlVMSUJfUkVOQU1FPTA7DQogIEdOVUxJQl9SRU5BTUVBVD0w Ow0KICBHTlVMSUJfU05QUklOVEY9MDsNCiAgR05VTElCX1NQUklOVEZfUE9TSVg9MDsNCiAgR05V TElCX1NURElPX0hfU0lHUElQRT0wOw0KICBHTlVMSUJfVE1QRklMRT0wOw0KICBHTlVMSUJfVkFT UFJJTlRGPTA7DQogIEdOVUxJQl9WRFBSSU5URj0wOw0KICBHTlVMSUJfVkZQUklOVEY9MDsNCiAg R05VTElCX1ZGUFJJTlRGX1BPU0lYPTA7DQogIEdOVUxJQl9WUFJJTlRGPTA7DQogIEdOVUxJQl9W UFJJTlRGX1BPU0lYPTA7DQogIEdOVUxJQl9WU05QUklOVEY9MDsNCiAgR05VTElCX1ZTUFJJTlRG X1BPU0lYPTA7DQogICAgSEFWRV9ERUNMX0ZQVVJHRT0xOw0KICBIQVZFX0RFQ0xfRlNFRUtPPTE7 DQogIEhBVkVfREVDTF9GVEVMTE89MTsNCiAgSEFWRV9ERUNMX0dFVERFTElNPTE7DQogIEhBVkVf REVDTF9HRVRMSU5FPTE7DQogIEhBVkVfREVDTF9PQlNUQUNLX1BSSU5URj0xOw0KICBIQVZFX0RF Q0xfU05QUklOVEY9MTsNCiAgSEFWRV9ERUNMX1ZTTlBSSU5URj0xOw0KICBIQVZFX0RQUklOVEY9 MTsNCiAgSEFWRV9GU0VFS089MTsNCiAgSEFWRV9GVEVMTE89MTsNCiAgSEFWRV9SRU5BTUVBVD0x Ow0KICBIQVZFX1ZBU1BSSU5URj0xOw0KICBIQVZFX1ZEUFJJTlRGPTE7DQogIFJFUExBQ0VfRFBS SU5URj0wOw0KICBSRVBMQUNFX0ZDTE9TRT0wOw0KICBSRVBMQUNFX0ZGTFVTSD0wOw0KICBSRVBM QUNFX0ZPUEVOPTA7DQogIFJFUExBQ0VfRlBSSU5URj0wOw0KICBSRVBMQUNFX0ZQVVJHRT0wOw0K ICBSRVBMQUNFX0ZSRU9QRU49MDsNCiAgUkVQTEFDRV9GU0VFSz0wOw0KICBSRVBMQUNFX0ZTRUVL Tz0wOw0KICBSRVBMQUNFX0ZURUxMPTA7DQogIFJFUExBQ0VfRlRFTExPPTA7DQogIFJFUExBQ0Vf R0VUREVMSU09MDsNCiAgUkVQTEFDRV9HRVRMSU5FPTA7DQogIFJFUExBQ0VfT0JTVEFDS19QUklO VEY9MDsNCiAgUkVQTEFDRV9QRVJST1I9MDsNCiAgUkVQTEFDRV9QT1BFTj0wOw0KICBSRVBMQUNF X1BSSU5URj0wOw0KICBSRVBMQUNFX1JFTU9WRT0wOw0KICBSRVBMQUNFX1JFTkFNRT0wOw0KICBS RVBMQUNFX1JFTkFNRUFUPTA7DQogIFJFUExBQ0VfU05QUklOVEY9MDsNCiAgUkVQTEFDRV9TUFJJ TlRGPTA7DQogIFJFUExBQ0VfU1RESU9fV1JJVEVfRlVOQ1M9MDsNCiAgUkVQTEFDRV9UTVBGSUxF PTA7DQogIFJFUExBQ0VfVkFTUFJJTlRGPTA7DQogIFJFUExBQ0VfVkRQUklOVEY9MDsNCiAgUkVQ TEFDRV9WRlBSSU5URj0wOw0KICBSRVBMQUNFX1ZQUklOVEY9MDsNCiAgUkVQTEFDRV9WU05QUklO VEY9MDsNCiAgUkVQTEFDRV9WU1BSSU5URj0wOw0KDQoNCiAgIHsgJGFzX2VjaG8gIiRhc19tZTok e2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciBieXRlIG9yZGVyaW5nIGlzIGJp Z2VuZGlhbiIgPiY1DQokYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIGJ5dGUgb3JkZXJpbmcg aXMgYmlnZW5kaWFuLi4uICIgPiY2OyB9DQppZiAke2FjX2N2X2NfYmlnZW5kaWFuKzp9IGZhbHNl OyB0aGVuIDoNCiAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYNCmVsc2UNCiAgYWNfY3ZfY19i aWdlbmRpYW49dW5rbm93bg0KICAgICMgU2VlIGlmIHdlJ3JlIGRlYWxpbmcgd2l0aCBhIHVuaXZl cnNhbCBjb21waWxlci4NCiAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4k YWNfZXh0DQovKiBlbmQgY29uZmRlZnMuaC4gICovDQojaWZuZGVmIF9fQVBQTEVfQ0NfXw0KCSAg ICAgICBub3QgYSB1bml2ZXJzYWwgY2FwYWJsZSBjb21waWxlcg0KCSAgICAgI2VuZGlmDQoJICAg ICB0eXBlZGVmIGludCBkdW1teTsNCg0KX0FDRU9GDQppZiBhY19mbl9jX3RyeV9jb21waWxlICIk TElORU5PIjsgdGhlbiA6DQoNCgkjIENoZWNrIGZvciBwb3RlbnRpYWwgLWFyY2ggZmxhZ3MuICBJ dCBpcyBub3QgdW5pdmVyc2FsIHVubGVzcw0KCSMgdGhlcmUgYXJlIGF0IGxlYXN0IHR3byAtYXJj aCBmbGFncyB3aXRoIGRpZmZlcmVudCB2YWx1ZXMuDQoJYWNfYXJjaD0NCglhY19wcmV2PQ0KCWZv ciBhY193b3JkIGluICRDQyAkQ0ZMQUdTICRDUFBGTEFHUyAkTERGTEFHUzsgZG8NCgkgaWYgdGVz dCAtbiAiJGFjX3ByZXYiOyB0aGVuDQoJICAgY2FzZSAkYWNfd29yZCBpbg0KCSAgICAgaT84NiB8 IHg4Nl82NCB8IHBwYyB8IHBwYzY0KQ0KCSAgICAgICBpZiB0ZXN0IC16ICIkYWNfYXJjaCIgfHwg dGVzdCAiJGFjX2FyY2giID0gIiRhY193b3JkIjsgdGhlbg0KCQkgYWNfYXJjaD0kYWNfd29yZA0K CSAgICAgICBlbHNlDQoJCSBhY19jdl9jX2JpZ2VuZGlhbj11bml2ZXJzYWwNCgkJIGJyZWFrDQoJ ICAgICAgIGZpDQoJICAgICAgIDs7DQoJICAgZXNhYw0KCSAgIGFjX3ByZXY9DQoJIGVsaWYgdGVz dCAieCRhY193b3JkIiA9ICJ4LWFyY2giOyB0aGVuDQoJICAgYWNfcHJldj1hcmNoDQoJIGZpDQog ICAgICAgZG9uZQ0KZmkNCnJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpl eHQgY29uZnRlc3QuJGFjX2V4dA0KICAgIGlmIHRlc3QgJGFjX2N2X2NfYmlnZW5kaWFuID0gdW5r bm93bjsgdGhlbg0KICAgICAgIyBTZWUgaWYgc3lzL3BhcmFtLmggZGVmaW5lcyB0aGUgQllURV9P UkRFUiBtYWNyby4NCiAgICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRh Y19leHQNCi8qIGVuZCBjb25mZGVmcy5oLiAgKi8NCiNpbmNsdWRlIDxzeXMvdHlwZXMuaD4NCgkg ICAgICNpbmNsdWRlIDxzeXMvcGFyYW0uaD4NCg0KaW50DQptYWluICgpDQp7DQojaWYgISAoZGVm aW5lZCBCWVRFX09SREVSICYmIGRlZmluZWQgQklHX0VORElBTiBcDQoJCSAgICAgJiYgZGVmaW5l ZCBMSVRUTEVfRU5ESUFOICYmIEJZVEVfT1JERVIgJiYgQklHX0VORElBTiBcDQoJCSAgICAgJiYg TElUVExFX0VORElBTikNCgkgICAgICBib2d1cyBlbmRpYW4gbWFjcm9zDQoJICAgICAjZW5kaWYN Cg0KICA7DQogIHJldHVybiAwOw0KfQ0KX0FDRU9GDQppZiBhY19mbl9jX3RyeV9jb21waWxlICIk TElORU5PIjsgdGhlbiA6DQogICMgSXQgZG9lczsgbm93IHNlZSB3aGV0aGVyIGl0IGRlZmluZWQg dG8gQklHX0VORElBTiBvciBub3QuDQoJIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0 ZXN0LiRhY19leHQNCi8qIGVuZCBjb25mZGVmcy5oLiAgKi8NCiNpbmNsdWRlIDxzeXMvdHlwZXMu aD4NCgkJI2luY2x1ZGUgPHN5cy9wYXJhbS5oPg0KDQppbnQNCm1haW4gKCkNCnsNCiNpZiBCWVRF X09SREVSICE9IEJJR19FTkRJQU4NCgkJIG5vdCBiaWcgZW5kaWFuDQoJCSNlbmRpZg0KDQogIDsN CiAgcmV0dXJuIDA7DQp9DQpfQUNFT0YNCmlmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8i OyB0aGVuIDoNCiAgYWNfY3ZfY19iaWdlbmRpYW49eWVzDQplbHNlDQogIGFjX2N2X2NfYmlnZW5k aWFuPW5vDQpmaQ0Kcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBj b25mdGVzdC4kYWNfZXh0DQpmaQ0Kcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFj X29iamV4dCBjb25mdGVzdC4kYWNfZXh0DQogICAgZmkNCiAgICBpZiB0ZXN0ICRhY19jdl9jX2Jp Z2VuZGlhbiA9IHVua25vd247IHRoZW4NCiAgICAgICMgU2VlIGlmIDxsaW1pdHMuaD4gZGVmaW5l cyBfTElUVExFX0VORElBTiBvciBfQklHX0VORElBTiAoZS5nLiwgU29sYXJpcykuDQogICAgICBj YXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0DQovKiBlbmQgY29uZmRl ZnMuaC4gICovDQojaW5jbHVkZSA8bGltaXRzLmg+DQoNCmludA0KbWFpbiAoKQ0Kew0KI2lmICEg KGRlZmluZWQgX0xJVFRMRV9FTkRJQU4gfHwgZGVmaW5lZCBfQklHX0VORElBTikNCgkgICAgICBi b2d1cyBlbmRpYW4gbWFjcm9zDQoJICAgICAjZW5kaWYNCg0KICA7DQogIHJldHVybiAwOw0KfQ0K X0FDRU9GDQppZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6DQogICMgSXQg ZG9lczsgbm93IHNlZSB3aGV0aGVyIGl0IGRlZmluZWQgdG8gX0JJR19FTkRJQU4gb3Igbm90Lg0K CSBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0DQovKiBlbmQgY29u ZmRlZnMuaC4gICovDQojaW5jbHVkZSA8bGltaXRzLmg+DQoNCmludA0KbWFpbiAoKQ0Kew0KI2lm bmRlZiBfQklHX0VORElBTg0KCQkgbm90IGJpZyBlbmRpYW4NCgkJI2VuZGlmDQoNCiAgOw0KICBy ZXR1cm4gMDsNCn0NCl9BQ0VPRg0KaWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRo ZW4gOg0KICBhY19jdl9jX2JpZ2VuZGlhbj15ZXMNCmVsc2UNCiAgYWNfY3ZfY19iaWdlbmRpYW49 bm8NCmZpDQpybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0 ZXN0LiRhY19leHQNCmZpDQpybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2Jq ZXh0IGNvbmZ0ZXN0LiRhY19leHQNCiAgICBmaQ0KICAgIGlmIHRlc3QgJGFjX2N2X2NfYmlnZW5k aWFuID0gdW5rbm93bjsgdGhlbg0KICAgICAgIyBDb21waWxlIGEgdGVzdCBwcm9ncmFtLg0KICAg ICAgaWYgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgPSB5ZXM7IHRoZW4gOg0KICAjIFRyeSB0byBn dWVzcyBieSBncmVwcGluZyB2YWx1ZXMgZnJvbSBhbiBvYmplY3QgZmlsZS4NCgkgY2F0IGNvbmZk ZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dA0KLyogZW5kIGNvbmZkZWZzLmguICAq Lw0Kc2hvcnQgaW50IGFzY2lpX21tW10gPQ0KCQkgIHsgMHg0MjQ5LCAweDQ3NjUsIDB4NkU0NCwg MHg2OTYxLCAweDZFNTMsIDB4Nzk1MywgMCB9Ow0KCQlzaG9ydCBpbnQgYXNjaWlfaWlbXSA9DQoJ CSAgeyAweDY5NEMsIDB4NTQ1NCwgMHg2NTZDLCAweDZFNDUsIDB4Njk0NCwgMHg2RTYxLCAwIH07 DQoJCWludCB1c2VfYXNjaWkgKGludCBpKSB7DQoJCSAgcmV0dXJuIGFzY2lpX21tW2ldICsgYXNj aWlfaWlbaV07DQoJCX0NCgkJc2hvcnQgaW50IGViY2RpY19paVtdID0NCgkJICB7IDB4ODlEMywg MHhFM0UzLCAweDg1OTMsIDB4OTVDNSwgMHg4OUM0LCAweDk1ODEsIDAgfTsNCgkJc2hvcnQgaW50 IGViY2RpY19tbVtdID0NCgkJICB7IDB4QzJDOSwgMHhDNzg1LCAweDk1QzQsIDB4ODk4MSwgMHg5 NUUyLCAweEE4RTIsIDAgfTsNCgkJaW50IHVzZV9lYmNkaWMgKGludCBpKSB7DQoJCSAgcmV0dXJu IGViY2RpY19tbVtpXSArIGViY2RpY19paVtpXTsNCgkJfQ0KCQlleHRlcm4gaW50IGZvbzsNCg0K aW50DQptYWluICgpDQp7DQpyZXR1cm4gdXNlX2FzY2lpIChmb28pID09IHVzZV9lYmNkaWMgKGZv byk7DQogIDsNCiAgcmV0dXJuIDA7DQp9DQpfQUNFT0YNCmlmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUg IiRMSU5FTk8iOyB0aGVuIDoNCiAgaWYgZ3JlcCBCSUdlbkRpYW5TeVMgY29uZnRlc3QuJGFjX29i amV4dCA+L2Rldi9udWxsOyB0aGVuDQoJICAgICAgYWNfY3ZfY19iaWdlbmRpYW49eWVzDQoJICAg IGZpDQoJICAgIGlmIGdyZXAgTGlUVGxlRW5EaWFuIGNvbmZ0ZXN0LiRhY19vYmpleHQgPi9kZXYv bnVsbCA7IHRoZW4NCgkgICAgICBpZiB0ZXN0ICIkYWNfY3ZfY19iaWdlbmRpYW4iID0gdW5rbm93 bjsgdGhlbg0KCQlhY19jdl9jX2JpZ2VuZGlhbj1ubw0KCSAgICAgIGVsc2UNCgkJIyBmaW5kaW5n IGJvdGggc3RyaW5ncyBpcyB1bmxpa2VseSB0byBoYXBwZW4sIGJ1dCB3aG8ga25vd3M/DQoJCWFj X2N2X2NfYmlnZW5kaWFuPXVua25vd24NCgkgICAgICBmaQ0KCSAgICBmaQ0KZmkNCnJtIC1mIGNv cmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dA0KZWxz ZQ0KICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0DQovKiBlbmQg Y29uZmRlZnMuaC4gICovDQokYWNfaW5jbHVkZXNfZGVmYXVsdA0KaW50DQptYWluICgpDQp7DQoN CgkgICAgIC8qIEFyZSB3ZSBsaXR0bGUgb3IgYmlnIGVuZGlhbj8gIEZyb20gSGFyYmlzb24mU3Rl ZWxlLiAgKi8NCgkgICAgIHVuaW9uDQoJICAgICB7DQoJICAgICAgIGxvbmcgaW50IGw7DQoJICAg ICAgIGNoYXIgY1tzaXplb2YgKGxvbmcgaW50KV07DQoJICAgICB9IHU7DQoJICAgICB1LmwgPSAx Ow0KCSAgICAgcmV0dXJuIHUuY1tzaXplb2YgKGxvbmcgaW50KSAtIDFdID09IDE7DQoNCiAgOw0K ICByZXR1cm4gMDsNCn0NCl9BQ0VPRg0KaWYgYWNfZm5fY190cnlfcnVuICIkTElORU5PIjsgdGhl biA6DQogIGFjX2N2X2NfYmlnZW5kaWFuPW5vDQplbHNlDQogIGFjX2N2X2NfYmlnZW5kaWFuPXll cw0KZmkNCnJtIC1mIGNvcmUgKi5jb3JlIGNvcmUuY29uZnRlc3QuKiBnbW9uLm91dCBiYi5vdXQg Y29uZnRlc3QkYWNfZXhlZXh0IFwNCiAgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC5iZWFt IGNvbmZ0ZXN0LiRhY19leHQNCmZpDQoNCiAgICBmaQ0KZmkNCnsgJGFzX2VjaG8gIiRhc19tZTok e2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfY19iaWdlbmRpYW4iID4mNQ0KJGFz X2VjaG8gIiRhY19jdl9jX2JpZ2VuZGlhbiIgPiY2OyB9DQogY2FzZSAkYWNfY3ZfY19iaWdlbmRp YW4gaW4gIygNCiAgIHllcykNCiAgICAgJGFzX2VjaG8gIiNkZWZpbmUgV09SRFNfQklHRU5ESUFO IDEiID4+Y29uZmRlZnMuaA0KOzsgIygNCiAgIG5vKQ0KICAgICAgOzsgIygNCiAgIHVuaXZlcnNh bCkNCg0KJGFzX2VjaG8gIiNkZWZpbmUgQUNfQVBQTEVfVU5JVkVSU0FMX0JVSUxEIDEiID4+Y29u ZmRlZnMuaA0KDQogICAgIDs7ICMoDQogICAqKQ0KICAgICBhc19mbl9lcnJvciAkPyAidW5rbm93 biBlbmRpYW5uZXNzDQogcHJlc2V0dGluZyBhY19jdl9jX2JpZ2VuZGlhbj1ubyAob3IgeWVzKSB3 aWxsIGhlbHAiICIkTElORU5PIiA1IDs7DQogZXNhYw0KDQoNCg0KICBHTlVMSUJfSVNCTEFOSz0w Ow0KICAgIEhBVkVfSVNCTEFOSz0xOw0KDQoNCiAgICAgR05VTElCX0RJUkZEPTA7DQogIEdOVUxJ Ql9GRE9QRU5ESVI9MDsNCiAgR05VTElCX1NDQU5ESVI9MDsNCiAgR05VTElCX0FMUEhBU09SVD0w Ow0KICAgIEhBVkVfREVDTF9ESVJGRD0xOw0KICBIQVZFX0RFQ0xfRkRPUEVORElSPTE7DQogIEhB VkVfRkRPUEVORElSPTE7DQogIEhBVkVfU0NBTkRJUj0xOw0KICBIQVZFX0FMUEhBU09SVD0xOw0K ICBSRVBMQUNFX0NMT1NFRElSPTA7DQogIFJFUExBQ0VfRElSRkQ9MDsNCiAgUkVQTEFDRV9GRE9Q RU5ESVI9MDsNCiAgUkVQTEFDRV9PUEVORElSPTA7DQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoN Cg0KICBnbF9MSUJPQkpTPSIkZ2xfTElCT0JKUyBiYXNlbmFtZS1sZ3BsLiRhY19vYmpleHQiDQoN Cg0KDQoNCg0KDQoNCg0KDQogIGdsX0xJQk9CSlM9IiRnbF9MSUJPQkpTIGRpcm5hbWUtbGdwbC4k YWNfb2JqZXh0Ig0KDQoNCg0KDQoNCg0KDQoNCg0KICBnbF9MSUJPQkpTPSIkZ2xfTElCT0JKUyBz dHJpcHNsYXNoLiRhY19vYmpleHQiDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KICB7ICRh c19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGlmIGVudmlyb24g aXMgcHJvcGVybHkgZGVjbGFyZWQiID4mNQ0KJGFzX2VjaG9fbiAiY2hlY2tpbmcgaWYgZW52aXJv biBpcyBwcm9wZXJseSBkZWNsYXJlZC4uLiAiID4mNjsgfQ0KICBpZiAke2d0X2N2X3Zhcl9lbnZp cm9uX2RlY2xhcmF0aW9uKzp9IGZhbHNlOyB0aGVuIDoNCiAgJGFzX2VjaG9fbiAiKGNhY2hlZCkg IiA+JjYNCmVsc2UNCg0KICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRh Y19leHQNCi8qIGVuZCBjb25mZGVmcy5oLiAgKi8NCiNpbmNsdWRlIDx1bmlzdGQuaD4NCiAgICAg ICAgICAgZXh0ZXJuIHN0cnVjdCB7IGludCBmb287IH0gZW52aXJvbjsNCmludA0KbWFpbiAoKQ0K ew0KZW52aXJvbi5mb28gPSAxOw0KICA7DQogIHJldHVybiAwOw0KfQ0KX0FDRU9GDQppZiBhY19m bl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6DQogIGd0X2N2X3Zhcl9lbnZpcm9uX2Rl Y2xhcmF0aW9uPW5vDQplbHNlDQogIGd0X2N2X3Zhcl9lbnZpcm9uX2RlY2xhcmF0aW9uPXllcw0K ZmkNCnJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3Qu JGFjX2V4dA0KZmkNCg0KICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306 IHJlc3VsdDogJGd0X2N2X3Zhcl9lbnZpcm9uX2RlY2xhcmF0aW9uIiA+JjUNCiRhc19lY2hvICIk Z3RfY3ZfdmFyX2Vudmlyb25fZGVjbGFyYXRpb24iID4mNjsgfQ0KICBpZiB0ZXN0ICRndF9jdl92 YXJfZW52aXJvbl9kZWNsYXJhdGlvbiA9IHllczsgdGhlbg0KDQokYXNfZWNobyAiI2RlZmluZSBI QVZFX0VOVklST05fREVDTCAxIiA+PmNvbmZkZWZzLmgNCg0KICBmaQ0KDQoNCiAgaWYgdGVzdCAk Z3RfY3ZfdmFyX2Vudmlyb25fZGVjbGFyYXRpb24gIT0geWVzOyB0aGVuDQogICAgSEFWRV9ERUNM X0VOVklST049MA0KICBmaQ0KDQoNCg0KICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8t JExJTkVOT306IGNoZWNraW5nIGZvciBjb21wbGV0ZSBlcnJuby5oIiA+JjUNCiRhc19lY2hvX24g ImNoZWNraW5nIGZvciBjb21wbGV0ZSBlcnJuby5oLi4uICIgPiY2OyB9DQppZiAke2dsX2N2X2hl YWRlcl9lcnJub19oX2NvbXBsZXRlKzp9IGZhbHNlOyB0aGVuIDoNCiAgJGFzX2VjaG9fbiAiKGNh Y2hlZCkgIiA+JjYNCmVsc2UNCg0KICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0 ZXN0LiRhY19leHQNCi8qIGVuZCBjb25mZGVmcy5oLiAgKi8NCg0KI2luY2x1ZGUgPGVycm5vLmg+ DQojaWYgIWRlZmluZWQgRU5PTVNHDQpib29ib28NCiNlbmRpZg0KI2lmICFkZWZpbmVkIEVJRFJN DQpib29ib28NCiNlbmRpZg0KI2lmICFkZWZpbmVkIEVOT0xJTksNCmJvb2Jvbw0KI2VuZGlmDQoj aWYgIWRlZmluZWQgRVBST1RPDQpib29ib28NCiNlbmRpZg0KI2lmICFkZWZpbmVkIEVNVUxUSUhP UA0KYm9vYm9vDQojZW5kaWYNCiNpZiAhZGVmaW5lZCBFQkFETVNHDQpib29ib28NCiNlbmRpZg0K I2lmICFkZWZpbmVkIEVPVkVSRkxPVw0KYm9vYm9vDQojZW5kaWYNCiNpZiAhZGVmaW5lZCBFTk9U U1VQDQpib29ib28NCiNlbmRpZg0KI2lmICFkZWZpbmVkIEVTVEFMRQ0KYm9vYm9vDQojZW5kaWYN CiNpZiAhZGVmaW5lZCBFRFFVT1QNCmJvb2Jvbw0KI2VuZGlmDQojaWYgIWRlZmluZWQgRUNBTkNF TEVEDQpib29ib28NCiNlbmRpZg0KDQpfQUNFT0YNCmlmIChldmFsICIkYWNfY3BwIGNvbmZ0ZXN0 LiRhY19leHQiKSAyPiY1IHwNCiAgJEVHUkVQICJib29ib28iID4vZGV2L251bGwgMj4mMTsgdGhl biA6DQogIGdsX2N2X2hlYWRlcl9lcnJub19oX2NvbXBsZXRlPW5vDQplbHNlDQogIGdsX2N2X2hl YWRlcl9lcnJub19oX2NvbXBsZXRlPXllcw0KZmkNCnJtIC1mIGNvbmZ0ZXN0Kg0KDQoNCmZpDQp7 ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGdsX2N2X2hl YWRlcl9lcnJub19oX2NvbXBsZXRlIiA+JjUNCiRhc19lY2hvICIkZ2xfY3ZfaGVhZGVyX2Vycm5v X2hfY29tcGxldGUiID4mNjsgfQ0KICBpZiB0ZXN0ICRnbF9jdl9oZWFkZXJfZXJybm9faF9jb21w bGV0ZSA9IHllczsgdGhlbg0KICAgIEVSUk5PX0g9JycNCiAgZWxzZQ0KDQoNCg0KDQoNCg0KDQoN CiAgICAgaWYgdGVzdCAkZ2xfY3ZfaGF2ZV9pbmNsdWRlX25leHQgPSB5ZXM7IHRoZW4NCiAgICAg ICBnbF9jdl9uZXh0X2Vycm5vX2g9JzwnZXJybm8uaCc+Jw0KICAgICBlbHNlDQogICAgICAgeyAk YXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBhYnNvbHV0ZSBu YW1lIG9mIDxlcnJuby5oPiIgPiY1DQokYXNfZWNob19uICJjaGVja2luZyBhYnNvbHV0ZSBuYW1l IG9mIDxlcnJuby5oPi4uLiAiID4mNjsgfQ0KaWYgJHtnbF9jdl9uZXh0X2Vycm5vX2grOn0gZmFs c2U7IHRoZW4gOg0KICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNg0KZWxzZQ0KDQogICAgICAg ICAgICAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0DQovKiBl bmQgY29uZmRlZnMuaC4gICovDQojaW5jbHVkZSA8ZXJybm8uaD4NCg0KX0FDRU9GDQogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj YXNlICIkaG9zdF9vcyIgaW4NCiAgICAgICAgICAgICAgICAgYWl4KikgZ2xfYWJzbmFtZV9jcHA9 IiRhY19jcHAgLUMiIDs7DQogICAgICAgICAgICAgICAgICopICAgIGdsX2Fic25hbWVfY3BwPSIk YWNfY3BwIiA7Ow0KICAgICAgICAgICAgICAgZXNhYw0KICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2xfY3ZfbmV4dF9lcnJub19oPSci J2AoZXZhbCAiJGdsX2Fic25hbWVfY3BwIGNvbmZ0ZXN0LiRhY19leHQiKSAyPiY1IHwNCiAgICAg ICAgICAgICAgICAgIHNlZCAtbiAnXCMvZXJybm8uaCN7DQogICAgICAgICAgICAgICAgICAgIHMj LioiXCguKi9lcnJuby5oXCkiLiojXDEjDQogICAgICAgICAgICAgICAgICAgIHMjXi9bXi9dIy8v JiMNCiAgICAgICAgICAgICAgICAgICAgcA0KICAgICAgICAgICAgICAgICAgICBxDQogICAgICAg ICAgICAgICAgICB9J2AnIicNCg0KDQpmaQ0KeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5v LSRMSU5FTk99OiByZXN1bHQ6ICRnbF9jdl9uZXh0X2Vycm5vX2giID4mNQ0KJGFzX2VjaG8gIiRn bF9jdl9uZXh0X2Vycm5vX2giID4mNjsgfQ0KICAgICBmaQ0KICAgICBORVhUX0VSUk5PX0g9JGds X2N2X25leHRfZXJybm9faA0KDQogICAgIGlmIHRlc3QgJGdsX2N2X2hhdmVfaW5jbHVkZV9uZXh0 ID0geWVzIHx8IHRlc3QgJGdsX2N2X2hhdmVfaW5jbHVkZV9uZXh0ID0gYnVnZ3k7IHRoZW4NCiAg ICAgICAjIElOQ0xVREVfTkVYVF9BU19GSVJTVF9ESVJFQ1RJVkU9J2luY2x1ZGVfbmV4dCcNCiAg ICAgICBnbF9uZXh0X2FzX2ZpcnN0X2RpcmVjdGl2ZT0nPCdlcnJuby5oJz4nDQogICAgIGVsc2UN CiAgICAgICAjIElOQ0xVREVfTkVYVF9BU19GSVJTVF9ESVJFQ1RJVkU9J2luY2x1ZGUnDQogICAg ICAgZ2xfbmV4dF9hc19maXJzdF9kaXJlY3RpdmU9JGdsX2N2X25leHRfZXJybm9faA0KICAgICBm aQ0KICAgICBORVhUX0FTX0ZJUlNUX0RJUkVDVElWRV9FUlJOT19IPSRnbF9uZXh0X2FzX2ZpcnN0 X2RpcmVjdGl2ZQ0KDQoNCg0KDQogICAgRVJSTk9fSD0nZXJybm8uaCcNCiAgZmkNCg0KICAgaWYg dGVzdCAtbiAiJEVSUk5PX0giOyB0aGVuDQogIEdMX0dFTkVSQVRFX0VSUk5PX0hfVFJVRT0NCiAg R0xfR0VORVJBVEVfRVJSTk9fSF9GQUxTRT0nIycNCmVsc2UNCiAgR0xfR0VORVJBVEVfRVJSTk9f SF9UUlVFPScjJw0KICBHTF9HRU5FUkFURV9FUlJOT19IX0ZBTFNFPQ0KZmkNCg0KDQogIGlmIHRl c3QgLW4gIiRFUlJOT19IIjsgdGhlbg0KICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVu by0kTElORU5PfTogY2hlY2tpbmcgZm9yIEVNVUxUSUhPUCB2YWx1ZSIgPiY1DQokYXNfZWNob19u ICJjaGVja2luZyBmb3IgRU1VTFRJSE9QIHZhbHVlLi4uICIgPiY2OyB9DQppZiAke2dsX2N2X2hl YWRlcl9lcnJub19oX0VNVUxUSUhPUCs6fSBmYWxzZTsgdGhlbiA6DQogICRhc19lY2hvX24gIihj YWNoZWQpICIgPiY2DQplbHNlDQoNCiAgICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNv bmZ0ZXN0LiRhY19leHQNCi8qIGVuZCBjb25mZGVmcy5oLiAgKi8NCg0KI2luY2x1ZGUgPGVycm5v Lmg+DQojaWZkZWYgRU1VTFRJSE9QDQp5ZXMNCiNlbmRpZg0KDQpfQUNFT0YNCmlmIChldmFsICIk YWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQiKSAyPiY1IHwNCiAgJEVHUkVQICJ5ZXMiID4vZGV2L251 bGwgMj4mMTsgdGhlbiA6DQogIGdsX2N2X2hlYWRlcl9lcnJub19oX0VNVUxUSUhPUD15ZXMNCmVs c2UNCiAgZ2xfY3ZfaGVhZGVyX2Vycm5vX2hfRU1VTFRJSE9QPW5vDQpmaQ0Kcm0gLWYgY29uZnRl c3QqDQoNCiAgICAgIGlmIHRlc3QgJGdsX2N2X2hlYWRlcl9lcnJub19oX0VNVUxUSUhPUCA9IG5v OyB0aGVuDQogICAgICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19l eHQNCi8qIGVuZCBjb25mZGVmcy5oLiAgKi8NCg0KI2RlZmluZSBfWE9QRU5fU09VUkNFX0VYVEVO REVEIDENCiNpbmNsdWRlIDxlcnJuby5oPg0KI2lmZGVmIEVNVUxUSUhPUA0KeWVzDQojZW5kaWYN Cg0KX0FDRU9GDQppZiAoZXZhbCAiJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0IikgMj4mNSB8DQog ICRFR1JFUCAieWVzIiA+L2Rldi9udWxsIDI+JjE7IHRoZW4gOg0KICBnbF9jdl9oZWFkZXJfZXJy bm9faF9FTVVMVElIT1A9aGlkZGVuDQpmaQ0Kcm0gLWYgY29uZnRlc3QqDQoNCiAgICAgICAgaWYg dGVzdCAkZ2xfY3ZfaGVhZGVyX2Vycm5vX2hfRU1VTFRJSE9QID0gaGlkZGVuOyB0aGVuDQogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBhY19mbl9jX2NvbXB1dGVfaW50ICIkTElORU5P IiAiRU1VTFRJSE9QIiAiZ2xfY3ZfaGVhZGVyX2Vycm5vX2hfRU1VTFRJSE9QIiAgICAgICAgIg0K I2RlZmluZSBfWE9QRU5fU09VUkNFX0VYVEVOREVEIDENCiNpbmNsdWRlIDxlcnJuby5oPg0KLyog VGhlIGZvbGxvd2luZyB0d28gbGluZXMgYXJlIGEgd29ya2Fyb3VuZCBhZ2FpbnN0IGFuIGF1dG9j b25mLTIuNTIgYnVnLiAgKi8NCiNpbmNsdWRlIDxzdGRpby5oPg0KI2luY2x1ZGUgPHN0ZGxpYi5o Pg0KIjsgdGhlbiA6DQoNCmZpDQoNCiAgICAgICAgZmkNCiAgICAgIGZpDQoNCmZpDQp7ICRhc19l Y2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGdsX2N2X2hlYWRlcl9l cnJub19oX0VNVUxUSUhPUCIgPiY1DQokYXNfZWNobyAiJGdsX2N2X2hlYWRlcl9lcnJub19oX0VN VUxUSUhPUCIgPiY2OyB9DQogICAgY2FzZSAkZ2xfY3ZfaGVhZGVyX2Vycm5vX2hfRU1VTFRJSE9Q IGluDQogICAgICB5ZXMgfCBubykNCiAgICAgICAgRU1VTFRJSE9QX0hJRERFTj0wOyBFTVVMVElI T1BfVkFMVUU9DQogICAgICAgIDs7DQogICAgICAqKQ0KICAgICAgICBFTVVMVElIT1BfSElEREVO PTE7IEVNVUxUSUhPUF9WQUxVRT0iJGdsX2N2X2hlYWRlcl9lcnJub19oX0VNVUxUSUhPUCINCiAg ICAgICAgOzsNCiAgICBlc2FjDQoNCg0KICBmaQ0KDQoNCiAgaWYgdGVzdCAtbiAiJEVSUk5PX0gi OyB0aGVuDQogICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVj a2luZyBmb3IgRU5PTElOSyB2YWx1ZSIgPiY1DQokYXNfZWNob19uICJjaGVja2luZyBmb3IgRU5P TElOSyB2YWx1ZS4uLiAiID4mNjsgfQ0KaWYgJHtnbF9jdl9oZWFkZXJfZXJybm9faF9FTk9MSU5L Kzp9IGZhbHNlOyB0aGVuIDoNCiAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYNCmVsc2UNCg0K ICAgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dA0KLyogZW5k IGNvbmZkZWZzLmguICAqLw0KDQojaW5jbHVkZSA8ZXJybm8uaD4NCiNpZmRlZiBFTk9MSU5LDQp5 ZXMNCiNlbmRpZg0KDQpfQUNFT0YNCmlmIChldmFsICIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQi KSAyPiY1IHwNCiAgJEVHUkVQICJ5ZXMiID4vZGV2L251bGwgMj4mMTsgdGhlbiA6DQogIGdsX2N2 X2hlYWRlcl9lcnJub19oX0VOT0xJTks9eWVzDQplbHNlDQogIGdsX2N2X2hlYWRlcl9lcnJub19o X0VOT0xJTks9bm8NCmZpDQpybSAtZiBjb25mdGVzdCoNCg0KICAgICAgaWYgdGVzdCAkZ2xfY3Zf aGVhZGVyX2Vycm5vX2hfRU5PTElOSyA9IG5vOyB0aGVuDQogICAgICAgIGNhdCBjb25mZGVmcy5o IC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQNCi8qIGVuZCBjb25mZGVmcy5oLiAgKi8NCg0K I2RlZmluZSBfWE9QRU5fU09VUkNFX0VYVEVOREVEIDENCiNpbmNsdWRlIDxlcnJuby5oPg0KI2lm ZGVmIEVOT0xJTksNCnllcw0KI2VuZGlmDQoNCl9BQ0VPRg0KaWYgKGV2YWwgIiRhY19jcHAgY29u ZnRlc3QuJGFjX2V4dCIpIDI+JjUgfA0KICAkRUdSRVAgInllcyIgPi9kZXYvbnVsbCAyPiYxOyB0 aGVuIDoNCiAgZ2xfY3ZfaGVhZGVyX2Vycm5vX2hfRU5PTElOSz1oaWRkZW4NCmZpDQpybSAtZiBj b25mdGVzdCoNCg0KICAgICAgICBpZiB0ZXN0ICRnbF9jdl9oZWFkZXJfZXJybm9faF9FTk9MSU5L ID0gaGlkZGVuOyB0aGVuDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBhY19mbl9j X2NvbXB1dGVfaW50ICIkTElORU5PIiAiRU5PTElOSyIgImdsX2N2X2hlYWRlcl9lcnJub19oX0VO T0xJTksiICAgICAgICAiDQojZGVmaW5lIF9YT1BFTl9TT1VSQ0VfRVhURU5ERUQgMQ0KI2luY2x1 ZGUgPGVycm5vLmg+DQovKiBUaGUgZm9sbG93aW5nIHR3byBsaW5lcyBhcmUgYSB3b3JrYXJvdW5k IGFnYWluc3QgYW4gYXV0b2NvbmYtMi41MiBidWcuICAqLw0KI2luY2x1ZGUgPHN0ZGlvLmg+DQoj aW5jbHVkZSA8c3RkbGliLmg+DQoiOyB0aGVuIDoNCg0KZmkNCg0KICAgICAgICBmaQ0KICAgICAg ZmkNCg0KZmkNCnsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0 OiAkZ2xfY3ZfaGVhZGVyX2Vycm5vX2hfRU5PTElOSyIgPiY1DQokYXNfZWNobyAiJGdsX2N2X2hl YWRlcl9lcnJub19oX0VOT0xJTksiID4mNjsgfQ0KICAgIGNhc2UgJGdsX2N2X2hlYWRlcl9lcnJu b19oX0VOT0xJTksgaW4NCiAgICAgIHllcyB8IG5vKQ0KICAgICAgICBFTk9MSU5LX0hJRERFTj0w OyBFTk9MSU5LX1ZBTFVFPQ0KICAgICAgICA7Ow0KICAgICAgKikNCiAgICAgICAgRU5PTElOS19I SURERU49MTsgRU5PTElOS19WQUxVRT0iJGdsX2N2X2hlYWRlcl9lcnJub19oX0VOT0xJTksiDQog ICAgICAgIDs7DQogICAgZXNhYw0KDQoNCiAgZmkNCg0KDQogIGlmIHRlc3QgLW4gIiRFUlJOT19I IjsgdGhlbg0KICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hl Y2tpbmcgZm9yIEVPVkVSRkxPVyB2YWx1ZSIgPiY1DQokYXNfZWNob19uICJjaGVja2luZyBmb3Ig RU9WRVJGTE9XIHZhbHVlLi4uICIgPiY2OyB9DQppZiAke2dsX2N2X2hlYWRlcl9lcnJub19oX0VP VkVSRkxPVys6fSBmYWxzZTsgdGhlbiA6DQogICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2DQpl bHNlDQoNCiAgICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQN Ci8qIGVuZCBjb25mZGVmcy5oLiAgKi8NCg0KI2luY2x1ZGUgPGVycm5vLmg+DQojaWZkZWYgRU9W RVJGTE9XDQp5ZXMNCiNlbmRpZg0KDQpfQUNFT0YNCmlmIChldmFsICIkYWNfY3BwIGNvbmZ0ZXN0 LiRhY19leHQiKSAyPiY1IHwNCiAgJEVHUkVQICJ5ZXMiID4vZGV2L251bGwgMj4mMTsgdGhlbiA6 DQogIGdsX2N2X2hlYWRlcl9lcnJub19oX0VPVkVSRkxPVz15ZXMNCmVsc2UNCiAgZ2xfY3ZfaGVh ZGVyX2Vycm5vX2hfRU9WRVJGTE9XPW5vDQpmaQ0Kcm0gLWYgY29uZnRlc3QqDQoNCiAgICAgIGlm IHRlc3QgJGdsX2N2X2hlYWRlcl9lcnJub19oX0VPVkVSRkxPVyA9IG5vOyB0aGVuDQogICAgICAg IGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQNCi8qIGVuZCBjb25m ZGVmcy5oLiAgKi8NCg0KI2RlZmluZSBfWE9QRU5fU09VUkNFX0VYVEVOREVEIDENCiNpbmNsdWRl IDxlcnJuby5oPg0KI2lmZGVmIEVPVkVSRkxPVw0KeWVzDQojZW5kaWYNCg0KX0FDRU9GDQppZiAo ZXZhbCAiJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0IikgMj4mNSB8DQogICRFR1JFUCAieWVzIiA+ L2Rldi9udWxsIDI+JjE7IHRoZW4gOg0KICBnbF9jdl9oZWFkZXJfZXJybm9faF9FT1ZFUkZMT1c9 aGlkZGVuDQpmaQ0Kcm0gLWYgY29uZnRlc3QqDQoNCiAgICAgICAgaWYgdGVzdCAkZ2xfY3ZfaGVh ZGVyX2Vycm5vX2hfRU9WRVJGTE9XID0gaGlkZGVuOyB0aGVuDQogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBpZiBhY19mbl9jX2NvbXB1dGVfaW50ICIkTElORU5PIiAiRU9WRVJGTE9XIiAi Z2xfY3ZfaGVhZGVyX2Vycm5vX2hfRU9WRVJGTE9XIiAgICAgICAgIg0KI2RlZmluZSBfWE9QRU5f U09VUkNFX0VYVEVOREVEIDENCiNpbmNsdWRlIDxlcnJuby5oPg0KLyogVGhlIGZvbGxvd2luZyB0 d28gbGluZXMgYXJlIGEgd29ya2Fyb3VuZCBhZ2FpbnN0IGFuIGF1dG9jb25mLTIuNTIgYnVnLiAg Ki8NCiNpbmNsdWRlIDxzdGRpby5oPg0KI2luY2x1ZGUgPHN0ZGxpYi5oPg0KIjsgdGhlbiA6DQoN CmZpDQoNCiAgICAgICAgZmkNCiAgICAgIGZpDQoNCmZpDQp7ICRhc19lY2hvICIkYXNfbWU6JHth c19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGdsX2N2X2hlYWRlcl9lcnJub19oX0VPVkVSRkxP VyIgPiY1DQokYXNfZWNobyAiJGdsX2N2X2hlYWRlcl9lcnJub19oX0VPVkVSRkxPVyIgPiY2OyB9 DQogICAgY2FzZSAkZ2xfY3ZfaGVhZGVyX2Vycm5vX2hfRU9WRVJGTE9XIGluDQogICAgICB5ZXMg fCBubykNCiAgICAgICAgRU9WRVJGTE9XX0hJRERFTj0wOyBFT1ZFUkZMT1dfVkFMVUU9DQogICAg ICAgIDs7DQogICAgICAqKQ0KICAgICAgICBFT1ZFUkZMT1dfSElEREVOPTE7IEVPVkVSRkxPV19W QUxVRT0iJGdsX2N2X2hlYWRlcl9lcnJub19oX0VPVkVSRkxPVyINCiAgICAgICAgOzsNCiAgICBl c2FjDQoNCg0KICBmaQ0KDQoNCmFjX2ZuX2NfY2hlY2tfZGVjbCAiJExJTkVOTyIgInN0cmVycm9y X3IiICJhY19jdl9oYXZlX2RlY2xfc3RyZXJyb3JfciIgIiRhY19pbmNsdWRlc19kZWZhdWx0Ig0K aWYgdGVzdCAieCRhY19jdl9oYXZlX2RlY2xfc3RyZXJyb3JfciIgPSB4eWVzOyB0aGVuIDoNCiAg YWNfaGF2ZV9kZWNsPTENCmVsc2UNCiAgYWNfaGF2ZV9kZWNsPTANCmZpDQoNCmNhdCA+PmNvbmZk ZWZzLmggPDxfQUNFT0YNCiNkZWZpbmUgSEFWRV9ERUNMX1NUUkVSUk9SX1IgJGFjX2hhdmVfZGVj bA0KX0FDRU9GDQoNCmZvciBhY19mdW5jIGluIHN0cmVycm9yX3INCmRvIDoNCiAgYWNfZm5fY19j aGVja19mdW5jICIkTElORU5PIiAic3RyZXJyb3JfciIgImFjX2N2X2Z1bmNfc3RyZXJyb3JfciIN CmlmIHRlc3QgIngkYWNfY3ZfZnVuY19zdHJlcnJvcl9yIiA9IHh5ZXM7IHRoZW4gOg0KICBjYXQg Pj5jb25mZGVmcy5oIDw8X0FDRU9GDQojZGVmaW5lIEhBVkVfU1RSRVJST1JfUiAxDQpfQUNFT0YN Cg0KZmkNCmRvbmUNCg0KeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBj aGVja2luZyB3aGV0aGVyIHN0cmVycm9yX3IgcmV0dXJucyBjaGFyICoiID4mNQ0KJGFzX2VjaG9f biAiY2hlY2tpbmcgd2hldGhlciBzdHJlcnJvcl9yIHJldHVybnMgY2hhciAqLi4uICIgPiY2OyB9 DQppZiAke2FjX2N2X2Z1bmNfc3RyZXJyb3Jfcl9jaGFyX3ArOn0gZmFsc2U7IHRoZW4gOg0KICAk YXNfZWNob19uICIoY2FjaGVkKSAiID4mNg0KZWxzZQ0KDQogICAgYWNfY3ZfZnVuY19zdHJlcnJv cl9yX2NoYXJfcD1ubw0KICAgIGlmIHRlc3QgJGFjX2N2X2hhdmVfZGVjbF9zdHJlcnJvcl9yID0g eWVzOyB0aGVuDQogICAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNf ZXh0DQovKiBlbmQgY29uZmRlZnMuaC4gICovDQokYWNfaW5jbHVkZXNfZGVmYXVsdA0KaW50DQpt YWluICgpDQp7DQoNCgkgIGNoYXIgYnVmWzEwMF07DQoJICBjaGFyIHggPSAqc3RyZXJyb3JfciAo MCwgYnVmLCBzaXplb2YgYnVmKTsNCgkgIGNoYXIgKnAgPSBzdHJlcnJvcl9yICgwLCBidWYsIHNp emVvZiBidWYpOw0KCSAgcmV0dXJuICFwIHx8IHg7DQoNCiAgOw0KICByZXR1cm4gMDsNCn0NCl9B Q0VPRg0KaWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOg0KICBhY19jdl9m dW5jX3N0cmVycm9yX3JfY2hhcl9wPXllcw0KZmkNCnJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNv bmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dA0KICAgIGVsc2UNCiAgICAgICMgc3Ry ZXJyb3JfciBpcyBub3QgZGVjbGFyZWQuICBDaG9vc2UgYmV0d2Vlbg0KICAgICAgIyBzeXN0ZW1z IHRoYXQgaGF2ZSByZWxhdGl2ZWx5IGluYWNjZXNzaWJsZSBkZWNsYXJhdGlvbnMgZm9yIHRoZQ0K ICAgICAgIyBmdW5jdGlvbi4gIEJlT1MgYW5kIERFQyBVTklYIDQuMCBmYWxsIGluIHRoaXMgY2F0 ZWdvcnksIGJ1dCB0aGUNCiAgICAgICMgZm9ybWVyIGhhcyBhIHN0cmVycm9yX3IgdGhhdCByZXR1 cm5zIGNoYXIqLCB3aGlsZSB0aGUgbGF0dGVyDQogICAgICAjIGhhcyBhIHN0cmVycm9yX3IgdGhh dCByZXR1cm5zIGBpbnQnLg0KICAgICAgIyBUaGlzIHRlc3Qgc2hvdWxkIHNlZ2ZhdWx0IG9uIHRo ZSBERUMgc3lzdGVtLg0KICAgICAgaWYgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgPSB5ZXM7IHRo ZW4gOg0KICA6DQplbHNlDQogIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRh Y19leHQNCi8qIGVuZCBjb25mZGVmcy5oLiAgKi8NCiRhY19pbmNsdWRlc19kZWZhdWx0DQoJZXh0 ZXJuIGNoYXIgKnN0cmVycm9yX3IgKCk7DQppbnQNCm1haW4gKCkNCnsNCmNoYXIgYnVmWzEwMF07 DQoJICBjaGFyIHggPSAqc3RyZXJyb3JfciAoMCwgYnVmLCBzaXplb2YgYnVmKTsNCgkgIHJldHVy biAhIGlzYWxwaGEgKHgpOw0KICA7DQogIHJldHVybiAwOw0KfQ0KX0FDRU9GDQppZiBhY19mbl9j X3RyeV9ydW4gIiRMSU5FTk8iOyB0aGVuIDoNCiAgYWNfY3ZfZnVuY19zdHJlcnJvcl9yX2NoYXJf cD15ZXMNCmZpDQpybSAtZiBjb3JlICouY29yZSBjb3JlLmNvbmZ0ZXN0LiogZ21vbi5vdXQgYmIu b3V0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCBcDQogIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3Qu YmVhbSBjb25mdGVzdC4kYWNfZXh0DQpmaQ0KDQogICAgZmkNCg0KZmkNCnsgJGFzX2VjaG8gIiRh c19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfZnVuY19zdHJlcnJvcl9y X2NoYXJfcCIgPiY1DQokYXNfZWNobyAiJGFjX2N2X2Z1bmNfc3RyZXJyb3Jfcl9jaGFyX3AiID4m NjsgfQ0KaWYgdGVzdCAkYWNfY3ZfZnVuY19zdHJlcnJvcl9yX2NoYXJfcCA9IHllczsgdGhlbg0K DQokYXNfZWNobyAiI2RlZmluZSBTVFJFUlJPUl9SX0NIQVJfUCAxIiA+PmNvbmZkZWZzLmgNCg0K ZmkNCg0KDQogIFhHRVRURVhUX0VYVFJBX09QVElPTlM9DQoNCg0KDQoNCg0KYWNfZm5fY19jaGVj a19kZWNsICIkTElORU5PIiAic2V0cmVnaWQiICJhY19jdl9oYXZlX2RlY2xfc2V0cmVnaWQiICIk YWNfaW5jbHVkZXNfZGVmYXVsdCINCmlmIHRlc3QgIngkYWNfY3ZfaGF2ZV9kZWNsX3NldHJlZ2lk IiA9IHh5ZXM7IHRoZW4gOg0KICBhY19oYXZlX2RlY2w9MQ0KZWxzZQ0KICBhY19oYXZlX2RlY2w9 MA0KZmkNCg0KY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRg0KI2RlZmluZSBIQVZFX0RFQ0xfU0VU UkVHSUQgJGFjX2hhdmVfZGVjbA0KX0FDRU9GDQoNCnsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xp bmVuby0kTElORU5PfTogY2hlY2tpbmcgdHlwZSBvZiBhcnJheSBhcmd1bWVudCB0byBnZXRncm91 cHMiID4mNQ0KJGFzX2VjaG9fbiAiY2hlY2tpbmcgdHlwZSBvZiBhcnJheSBhcmd1bWVudCB0byBn ZXRncm91cHMuLi4gIiA+JjY7IH0NCmlmICR7YWNfY3ZfdHlwZV9nZXRncm91cHMrOn0gZmFsc2U7 IHRoZW4gOg0KICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNg0KZWxzZQ0KICBpZiB0ZXN0ICIk Y3Jvc3NfY29tcGlsaW5nIiA9IHllczsgdGhlbiA6DQogIGFjX2N2X3R5cGVfZ2V0Z3JvdXBzPWNy b3NzDQplbHNlDQogIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQN Ci8qIGVuZCBjb25mZGVmcy5oLiAgKi8NCi8qIFRoYW5rcyB0byBNaWtlIFJlbmRlbGwgZm9yIHRo aXMgdGVzdC4gICovDQokYWNfaW5jbHVkZXNfZGVmYXVsdA0KI2RlZmluZSBOR0lEIDI1Ng0KI3Vu ZGVmIE1BWA0KI2RlZmluZSBNQVgoeCwgeSkgKCh4KSA+ICh5KSA/ICh4KSA6ICh5KSkNCg0KaW50 DQptYWluICgpDQp7DQogIGdpZF90IGdpZHNldFtOR0lEXTsNCiAgaW50IGksIG47DQogIHVuaW9u IHsgZ2lkX3QgZ3ZhbDsgbG9uZyBpbnQgbHZhbDsgfSAgdmFsOw0KDQogIHZhbC5sdmFsID0gLTE7 DQogIGZvciAoaSA9IDA7IGkgPCBOR0lEOyBpKyspDQogICAgZ2lkc2V0W2ldID0gdmFsLmd2YWw7 DQogIG4gPSBnZXRncm91cHMgKHNpemVvZiAoZ2lkc2V0KSAvIE1BWCAoc2l6ZW9mIChpbnQpLCBz aXplb2YgKGdpZF90KSkgLSAxLA0KCQkgZ2lkc2V0KTsNCiAgLyogRXhpdCBub24temVybyBpZiBn ZXRncm91cHMgc2VlbXMgdG8gcmVxdWlyZSBhbiBhcnJheSBvZiBpbnRzLiAgVGhpcw0KICAgICBo YXBwZW5zIHdoZW4gZ2lkX3QgaXMgc2hvcnQgaW50IGJ1dCBnZXRncm91cHMgbW9kaWZpZXMgYW4g YXJyYXkNCiAgICAgb2YgaW50cy4gICovDQogIHJldHVybiBuID4gMCAmJiBnaWRzZXRbbl0gIT0g dmFsLmd2YWw7DQp9DQpfQUNFT0YNCmlmIGFjX2ZuX2NfdHJ5X3J1biAiJExJTkVOTyI7IHRoZW4g Og0KICBhY19jdl90eXBlX2dldGdyb3Vwcz1naWRfdA0KZWxzZQ0KICBhY19jdl90eXBlX2dldGdy b3Vwcz1pbnQNCmZpDQpybSAtZiBjb3JlICouY29yZSBjb3JlLmNvbmZ0ZXN0LiogZ21vbi5vdXQg YmIub3V0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCBcDQogIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRl c3QuYmVhbSBjb25mdGVzdC4kYWNfZXh0DQpmaQ0KDQppZiB0ZXN0ICRhY19jdl90eXBlX2dldGdy b3VwcyA9IGNyb3NzOyB0aGVuDQogICAgICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNv bmZ0ZXN0LiRhY19leHQNCi8qIGVuZCBjb25mZGVmcy5oLiAgKi8NCiNpbmNsdWRlIDx1bmlzdGQu aD4NCg0KX0FDRU9GDQppZiAoZXZhbCAiJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0IikgMj4mNSB8 DQogICRFR1JFUCAiZ2V0Z3JvdXBzLippbnQuKmdpZF90IiA+L2Rldi9udWxsIDI+JjE7IHRoZW4g Og0KICBhY19jdl90eXBlX2dldGdyb3Vwcz1naWRfdA0KZWxzZQ0KICBhY19jdl90eXBlX2dldGdy b3Vwcz1pbnQNCmZpDQpybSAtZiBjb25mdGVzdCoNCg0KZmkNCmZpDQp7ICRhc19lY2hvICIkYXNf bWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X3R5cGVfZ2V0Z3JvdXBzIiA+ JjUNCiRhc19lY2hvICIkYWNfY3ZfdHlwZV9nZXRncm91cHMiID4mNjsgfQ0KDQpjYXQgPj5jb25m ZGVmcy5oIDw8X0FDRU9GDQojZGVmaW5lIEdFVEdST1VQU19UICRhY19jdl90eXBlX2dldGdyb3Vw cw0KX0FDRU9GDQoNCg0KYWNfZm5fY19jaGVja19mdW5jICIkTElORU5PIiAiZ2V0Z3JvdXBzIiAi YWNfY3ZfZnVuY19nZXRncm91cHMiDQppZiB0ZXN0ICJ4JGFjX2N2X2Z1bmNfZ2V0Z3JvdXBzIiA9 IHh5ZXM7IHRoZW4gOg0KDQpmaQ0KDQoNCiMgSWYgd2UgZG9uJ3QgeWV0IGhhdmUgZ2V0Z3JvdXBz LCBzZWUgaWYgaXQncyBpbiAtbGJzZC4NCiMgVGhpcyBpcyByZXBvcnRlZCB0byBiZSBuZWNlc3Nh cnkgb24gYW4gSVRPUyAzMDAwV1MgcnVubmluZyBTRUlVWCAzLjEuDQphY19zYXZlX0xJQlM9JExJ QlMNCmlmIHRlc3QgJGFjX2N2X2Z1bmNfZ2V0Z3JvdXBzID0gbm87IHRoZW4NCiAgeyAkYXNfZWNo byAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgZ2V0Z3JvdXBzIGlu IC1sYnNkIiA+JjUNCiRhc19lY2hvX24gImNoZWNraW5nIGZvciBnZXRncm91cHMgaW4gLWxic2Qu Li4gIiA+JjY7IH0NCmlmICR7YWNfY3ZfbGliX2JzZF9nZXRncm91cHMrOn0gZmFsc2U7IHRoZW4g Og0KICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNg0KZWxzZQ0KICBhY19jaGVja19saWJfc2F2 ZV9MSUJTPSRMSUJTDQpMSUJTPSItbGJzZCAgJExJQlMiDQpjYXQgY29uZmRlZnMuaCAtIDw8X0FD RU9GID5jb25mdGVzdC4kYWNfZXh0DQovKiBlbmQgY29uZmRlZnMuaC4gICovDQoNCi8qIE92ZXJy aWRlIGFueSBHQ0MgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLg0KICAgVXNl IGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgR0NDDQog ICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBw bHkuICAqLw0KI2lmZGVmIF9fY3BsdXNwbHVzDQpleHRlcm4gIkMiDQojZW5kaWYNCmNoYXIgZ2V0 Z3JvdXBzICgpOw0KaW50DQptYWluICgpDQp7DQpyZXR1cm4gZ2V0Z3JvdXBzICgpOw0KICA7DQog IHJldHVybiAwOw0KfQ0KX0FDRU9GDQppZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhl biA6DQogIGFjX2N2X2xpYl9ic2RfZ2V0Z3JvdXBzPXllcw0KZWxzZQ0KICBhY19jdl9saWJfYnNk X2dldGdyb3Vwcz1ubw0KZmkNCnJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19v YmpleHQgXA0KICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0DQpMSUJTPSRh Y19jaGVja19saWJfc2F2ZV9MSUJTDQpmaQ0KeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5v LSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9saWJfYnNkX2dldGdyb3VwcyIgPiY1DQokYXNfZWNo byAiJGFjX2N2X2xpYl9ic2RfZ2V0Z3JvdXBzIiA+JjY7IH0NCmlmIHRlc3QgIngkYWNfY3ZfbGli X2JzZF9nZXRncm91cHMiID0geHllczsgdGhlbiA6DQogIEdFVEdST1VQU19MSUI9LWxic2QNCmZp DQoNCmZpDQoNCiMgUnVuIHRoZSBwcm9ncmFtIHRvIHRlc3QgdGhlIGZ1bmN0aW9uYWxpdHkgb2Yg dGhlIHN5c3RlbS1zdXBwbGllZA0KIyBnZXRncm91cHMgZnVuY3Rpb24gb25seSBpZiB0aGVyZSBp cyBzdWNoIGEgZnVuY3Rpb24uDQppZiB0ZXN0ICRhY19jdl9mdW5jX2dldGdyb3VwcyA9IHllczsg dGhlbg0KICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5n IGZvciB3b3JraW5nIGdldGdyb3VwcyIgPiY1DQokYXNfZWNob19uICJjaGVja2luZyBmb3Igd29y a2luZyBnZXRncm91cHMuLi4gIiA+JjY7IH0NCmlmICR7YWNfY3ZfZnVuY19nZXRncm91cHNfd29y a3MrOn0gZmFsc2U7IHRoZW4gOg0KICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNg0KZWxzZQ0K ICBpZiB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IHllczsgdGhlbiA6DQogIGFjX2N2X2Z1bmNf Z2V0Z3JvdXBzX3dvcmtzPW5vDQplbHNlDQogIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNv bmZ0ZXN0LiRhY19leHQNCi8qIGVuZCBjb25mZGVmcy5oLiAgKi8NCiRhY19pbmNsdWRlc19kZWZh dWx0DQppbnQNCm1haW4gKCkNCnsNCi8qIE9uIFVsdHJpeCA0LjMsIGdldGdyb3VwcyAoMCwgMCkg YWx3YXlzIGZhaWxzLiAgKi8NCiAgICAgICByZXR1cm4gZ2V0Z3JvdXBzICgwLCAwKSA9PSAtMTsN CiAgOw0KICByZXR1cm4gMDsNCn0NCl9BQ0VPRg0KaWYgYWNfZm5fY190cnlfcnVuICIkTElORU5P IjsgdGhlbiA6DQogIGFjX2N2X2Z1bmNfZ2V0Z3JvdXBzX3dvcmtzPXllcw0KZWxzZQ0KICBhY19j dl9mdW5jX2dldGdyb3Vwc193b3Jrcz1ubw0KZmkNCnJtIC1mIGNvcmUgKi5jb3JlIGNvcmUuY29u ZnRlc3QuKiBnbW9uLm91dCBiYi5vdXQgY29uZnRlc3QkYWNfZXhlZXh0IFwNCiAgY29uZnRlc3Qu JGFjX29iamV4dCBjb25mdGVzdC5iZWFtIGNvbmZ0ZXN0LiRhY19leHQNCmZpDQoNCg0KZmkNCnsg JGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfZnVu Y19nZXRncm91cHNfd29ya3MiID4mNQ0KJGFzX2VjaG8gIiRhY19jdl9mdW5jX2dldGdyb3Vwc193 b3JrcyIgPiY2OyB9DQplbHNlDQogIGFjX2N2X2Z1bmNfZ2V0Z3JvdXBzX3dvcmtzPW5vDQpmaQ0K aWYgdGVzdCAkYWNfY3ZfZnVuY19nZXRncm91cHNfd29ya3MgPSB5ZXM7IHRoZW4NCg0KJGFzX2Vj aG8gIiNkZWZpbmUgSEFWRV9HRVRHUk9VUFMgMSIgPj5jb25mZGVmcy5oDQoNCmZpDQpMSUJTPSRh Y19zYXZlX0xJQlMNCg0KDQogIEdOVUxJQl9GQ05UTD0wOw0KICBHTlVMSUJfTk9OQkxPQ0tJTkc9 MDsNCiAgR05VTElCX09QRU49MDsNCiAgR05VTElCX09QRU5BVD0wOw0KICAgIEhBVkVfRkNOVEw9 MTsNCiAgSEFWRV9PUEVOQVQ9MTsNCiAgUkVQTEFDRV9GQ05UTD0wOw0KICBSRVBMQUNFX09QRU49 MDsNCiAgUkVQTEFDRV9PUEVOQVQ9MDsNCg0KDQogICAgIEdOVUxJQl9GQ0hNT0RBVD0wOw0KICBH TlVMSUJfRlNUQVRBVD0wOw0KICBHTlVMSUJfRlVUSU1FTlM9MDsNCiAgR05VTElCX0xDSE1PRD0w Ow0KICBHTlVMSUJfTFNUQVQ9MDsNCiAgR05VTElCX01LRElSQVQ9MDsNCiAgR05VTElCX01LRklG Tz0wOw0KICBHTlVMSUJfTUtGSUZPQVQ9MDsNCiAgR05VTElCX01LTk9EPTA7DQogIEdOVUxJQl9N S05PREFUPTA7DQogIEdOVUxJQl9TVEFUPTA7DQogIEdOVUxJQl9VVElNRU5TQVQ9MDsNCiAgICBI QVZFX0ZDSE1PREFUPTE7DQogIEhBVkVfRlNUQVRBVD0xOw0KICBIQVZFX0ZVVElNRU5TPTE7DQog IEhBVkVfTENITU9EPTE7DQogIEhBVkVfTFNUQVQ9MTsNCiAgSEFWRV9NS0RJUkFUPTE7DQogIEhB VkVfTUtGSUZPPTE7DQogIEhBVkVfTUtGSUZPQVQ9MTsNCiAgSEFWRV9NS05PRD0xOw0KICBIQVZF X01LTk9EQVQ9MTsNCiAgSEFWRV9VVElNRU5TQVQ9MTsNCiAgUkVQTEFDRV9GU1RBVD0wOw0KICBS RVBMQUNFX0ZTVEFUQVQ9MDsNCiAgUkVQTEFDRV9GVVRJTUVOUz0wOw0KICBSRVBMQUNFX0xTVEFU PTA7DQogIFJFUExBQ0VfTUtESVI9MDsNCiAgUkVQTEFDRV9NS0ZJRk89MDsNCiAgUkVQTEFDRV9N S05PRD0wOw0KICBSRVBMQUNFX1NUQVQ9MDsNCiAgUkVQTEFDRV9VVElNRU5TQVQ9MDsNCg0KDQoN Cg0KICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdo ZXRoZXIgbHN0YXQgY29ycmVjdGx5IGhhbmRsZXMgdHJhaWxpbmcgc2xhc2giID4mNQ0KJGFzX2Vj aG9fbiAiY2hlY2tpbmcgd2hldGhlciBsc3RhdCBjb3JyZWN0bHkgaGFuZGxlcyB0cmFpbGluZyBz bGFzaC4uLiAiID4mNjsgfQ0KaWYgJHthY19jdl9mdW5jX2xzdGF0X2RlcmVmZXJlbmNlc19zbGFz aGVkX3N5bWxpbmsrOn0gZmFsc2U7IHRoZW4gOg0KICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4m Ng0KZWxzZQ0KICBybSAtZiBjb25mdGVzdC5zeW0gY29uZnRlc3QuZmlsZQ0KICAgICBlY2hvID5j b25mdGVzdC5maWxlDQogICAgIGlmIHRlc3QgIiRhc19sbl9zIiA9ICJsbiAtcyIgJiYgbG4gLXMg Y29uZnRlc3QuZmlsZSBjb25mdGVzdC5zeW07IHRoZW4NCiAgICAgICBpZiB0ZXN0ICIkY3Jvc3Nf Y29tcGlsaW5nIiA9IHllczsgdGhlbiA6DQogICMgV2hlbiBjcm9zcy1jb21waWxpbmcsIGJlIHBl c3NpbWlzdGljIHNvIHdlIHdpbGwgZW5kIHVwIHVzaW5nIHRoZQ0KICAgICAgICAgICMgcmVwbGFj ZW1lbnQgdmVyc2lvbiBvZiBsc3RhdCB0aGF0IGNoZWNrcyBmb3IgdHJhaWxpbmcgc2xhc2hlcyBh bmQNCiAgICAgICAgICAjIGNhbGxzIGxzdGF0IGEgc2Vjb25kIHRpbWUgd2hlbiBuZWNlc3Nhcnku DQogICAgICAgICAgYWNfY3ZfZnVuY19sc3RhdF9kZXJlZmVyZW5jZXNfc2xhc2hlZF9zeW1saW5r PW5vDQoNCmVsc2UNCiAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4 dA0KLyogZW5kIGNvbmZkZWZzLmguICAqLw0KJGFjX2luY2x1ZGVzX2RlZmF1bHQNCmludA0KbWFp biAoKQ0Kew0Kc3RydWN0IHN0YXQgc2J1ZjsNCiAgICAgICAgICAgICAgLyogTGludXggd2lsbCBk ZXJlZmVyZW5jZSB0aGUgc3ltbGluayBhbmQgZmFpbCwgYXMgcmVxdWlyZWQgYnkNCiAgICAgICAg ICAgICAgICAgUE9TSVguICBUaGF0IGlzIGJldHRlciBpbiB0aGUgc2Vuc2UgdGhhdCBpdCBtZWFu cyB3ZSB3aWxsIG5vdA0KICAgICAgICAgICAgICAgICBoYXZlIHRvIGNvbXBpbGUgYW5kIHVzZSB0 aGUgbHN0YXQgd3JhcHBlci4gICovDQogICAgICAgICAgICAgIHJldHVybiBsc3RhdCAoImNvbmZ0 ZXN0LnN5bS8iLCAmc2J1ZikgPT0gMDsNCg0KICA7DQogIHJldHVybiAwOw0KfQ0KX0FDRU9GDQpp ZiBhY19mbl9jX3RyeV9ydW4gIiRMSU5FTk8iOyB0aGVuIDoNCiAgYWNfY3ZfZnVuY19sc3RhdF9k ZXJlZmVyZW5jZXNfc2xhc2hlZF9zeW1saW5rPXllcw0KZWxzZQ0KICBhY19jdl9mdW5jX2xzdGF0 X2RlcmVmZXJlbmNlc19zbGFzaGVkX3N5bWxpbms9bm8NCmZpDQpybSAtZiBjb3JlICouY29yZSBj b3JlLmNvbmZ0ZXN0LiogZ21vbi5vdXQgYmIub3V0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCBcDQogIGNv bmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuYmVhbSBjb25mdGVzdC4kYWNfZXh0DQpmaQ0KDQog ICAgIGVsc2UNCiAgICAgICAjIElmIHRoZSAnbG4gLXMnIGNvbW1hbmQgZmFpbGVkLCB0aGVuIHdl IHByb2JhYmx5IGRvbid0IGV2ZW4NCiAgICAgICAjIGhhdmUgYW4gbHN0YXQgZnVuY3Rpb24uDQog ICAgICAgYWNfY3ZfZnVuY19sc3RhdF9kZXJlZmVyZW5jZXNfc2xhc2hlZF9zeW1saW5rPW5vDQog ICAgIGZpDQogICAgIHJtIC1mIGNvbmZ0ZXN0LnN5bSBjb25mdGVzdC5maWxlDQoNCmZpDQp7ICRh c19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X2Z1bmNf bHN0YXRfZGVyZWZlcmVuY2VzX3NsYXNoZWRfc3ltbGluayIgPiY1DQokYXNfZWNobyAiJGFjX2N2 X2Z1bmNfbHN0YXRfZGVyZWZlcmVuY2VzX3NsYXNoZWRfc3ltbGluayIgPiY2OyB9DQogIHRlc3Qg JGFjX2N2X2Z1bmNfbHN0YXRfZGVyZWZlcmVuY2VzX3NsYXNoZWRfc3ltbGluayA9IHllcyAmJg0K DQpjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GDQojZGVmaW5lIExTVEFUX0ZPTExPV1NfU0xBU0hF RF9TWU1MSU5LIDENCl9BQ0VPRg0KDQogIGlmIHRlc3QgIngkYWNfY3ZfZnVuY19sc3RhdF9kZXJl ZmVyZW5jZXNfc2xhc2hlZF9zeW1saW5rIiA9IHhubzsgdGhlbg0KDQoNCg0KDQoNCg0KDQoNCiAg Z2xfTElCT0JKUz0iJGdsX0xJQk9CSlMgbHN0YXQuJGFjX29iamV4dCINCg0KICBmaQ0KDQoNCg0K DQogICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3 aGV0aGVyIHVubGluayBob25vcnMgdHJhaWxpbmcgc2xhc2hlcyIgPiY1DQokYXNfZWNob19uICJj aGVja2luZyB3aGV0aGVyIHVubGluayBob25vcnMgdHJhaWxpbmcgc2xhc2hlcy4uLiAiID4mNjsg fQ0KaWYgJHtnbF9jdl9mdW5jX3VubGlua19ob25vcnNfc2xhc2hlcys6fSBmYWxzZTsgdGhlbiA6 DQogICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2DQplbHNlDQogIHRvdWNoIGNvbmZ0ZXN0LmZp bGUNCiAgICAgIyBBc3N1bWUgdGhhdCBpZiB3ZSBoYXZlIGxzdGF0LCB3ZSBjYW4gYWxzbyBjaGVj ayBzeW1saW5rcy4NCiAgICAgaWYgdGVzdCAkYWNfY3ZfZnVuY19sc3RhdCA9IHllczsgdGhlbg0K ICAgICAgIGxuIC1zIGNvbmZ0ZXN0LmZpbGUgY29uZnRlc3QubG5rDQogICAgIGZpDQogICAgIGlm IHRlc3QgIiRjcm9zc19jb21waWxpbmciID0geWVzOyB0aGVuIDoNCiAgZ2xfY3ZfZnVuY191bmxp bmtfaG9ub3JzX3NsYXNoZXM9Imd1ZXNzaW5nIG5vIg0KZWxzZQ0KICBjYXQgY29uZmRlZnMuaCAt IDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0DQovKiBlbmQgY29uZmRlZnMuaC4gICovDQojaW5j bHVkZSA8dW5pc3RkLmg+DQogICAgICAgICAgICNpbmNsdWRlIDxlcnJuby5oPg0KDQppbnQNCm1h aW4gKCkNCnsNCmludCByZXN1bHQgPSAwOw0KICAgICAgICAgICBpZiAoIXVubGluayAoImNvbmZ0 ZXN0LmZpbGUvIikpDQogICAgICAgICAgICAgcmVzdWx0IHw9IDE7DQogICAgICAgICAgIGVsc2Ug aWYgKGVycm5vICE9IEVOT1RESVIpDQogICAgICAgICAgICAgcmVzdWx0IHw9IDI7DQojaWYgSEFW RV9MU1RBVA0KICAgICAgICAgICBpZiAoIXVubGluayAoImNvbmZ0ZXN0Lmxuay8iKSkNCiAgICAg ICAgICAgICByZXN1bHQgfD0gNDsNCiAgICAgICAgICAgZWxzZSBpZiAoZXJybm8gIT0gRU5PVERJ UikNCiAgICAgICAgICAgICByZXN1bHQgfD0gODsNCiNlbmRpZg0KICAgICAgICAgICByZXR1cm4g cmVzdWx0Ow0KDQogIDsNCiAgcmV0dXJuIDA7DQp9DQpfQUNFT0YNCmlmIGFjX2ZuX2NfdHJ5X3J1 biAiJExJTkVOTyI7IHRoZW4gOg0KICBnbF9jdl9mdW5jX3VubGlua19ob25vcnNfc2xhc2hlcz15 ZXMNCmVsc2UNCiAgZ2xfY3ZfZnVuY191bmxpbmtfaG9ub3JzX3NsYXNoZXM9bm8NCmZpDQpybSAt ZiBjb3JlICouY29yZSBjb3JlLmNvbmZ0ZXN0LiogZ21vbi5vdXQgYmIub3V0IGNvbmZ0ZXN0JGFj X2V4ZWV4dCBcDQogIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuYmVhbSBjb25mdGVzdC4k YWNfZXh0DQpmaQ0KDQogICAgIHJtIC1mIGNvbmZ0ZXN0LmZpbGUgY29uZnRlc3QubG5rDQpmaQ0K eyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRnbF9jdl9m dW5jX3VubGlua19ob25vcnNfc2xhc2hlcyIgPiY1DQokYXNfZWNobyAiJGdsX2N2X2Z1bmNfdW5s aW5rX2hvbm9yc19zbGFzaGVzIiA+JjY7IH0NCiAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2Fz X2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciB1bmxpbmsgb2YgYSBwYXJlbnQgZGly ZWN0b3J5IGZhaWxzIGFzIGl0IHNob3VsZCIgPiY1DQokYXNfZWNob19uICJjaGVja2luZyB3aGV0 aGVyIHVubGluayBvZiBhIHBhcmVudCBkaXJlY3RvcnkgZmFpbHMgYXMgaXQgc2hvdWxkLi4uICIg PiY2OyB9DQppZiAke2dsX2N2X2Z1bmNfdW5saW5rX3BhcmVudF9mYWlscys6fSBmYWxzZTsgdGhl biA6DQogICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2DQplbHNlDQogIGNhc2UgIiRob3N0X29z IiBpbg0KICAgICAgIGRhcndpbiopDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBpZiB7DQogICAgICAgICAgICAgICMgVXNlIHRoZSBta3RlbXAg cHJvZ3JhbSBpZiBhdmFpbGFibGUuIElmIG5vdCBhdmFpbGFibGUsIGhpZGUgdGhlIGVycm9yDQog ICAgICAgICAgICAgICMgbWVzc2FnZS4NCiAgICAgICAgICAgICAgdG1wPWAodW1hc2sgMDc3ICYm IG1rdGVtcCAtZCAvdG1wL2d0WFhYWFhYKSAyPi9kZXYvbnVsbGAgJiYNCiAgICAgICAgICAgICAg dGVzdCAtbiAiJHRtcCIgJiYgdGVzdCAtZCAiJHRtcCINCiAgICAgICAgICAgIH0gfHwNCiAgICAg ICAgICAgIHsNCiAgICAgICAgICAgICAgIyBVc2UgYSBzaW1wbGUgbWtkaXIgY29tbWFuZC4gSXQg aXMgZ3VhcmFudGVlZCB0byBmYWlsIGlmIHRoZSBkaXJlY3RvcnkNCiAgICAgICAgICAgICAgIyBh bHJlYWR5IGV4aXN0cy4gICRSQU5ET00gaXMgYmFzaCBzcGVjaWZpYyBhbmQgZXhwYW5kcyB0byBl bXB0eSBpbiBzaGVsbHMNCiAgICAgICAgICAgICAgIyBvdGhlciB0aGFuIGJhc2gsIGtzaCBhbmQg enNoLiAgSXRzIHVzZSBkb2VzIG5vdCBpbmNyZWFzZSBzZWN1cml0eTsNCiAgICAgICAgICAgICAg IyByYXRoZXIsIGl0IG1pbmltaXplcyB0aGUgcHJvYmFiaWxpdHkgb2YgZmFpbHVyZSBpbiBhIHZl cnkgY2x1dHRlcmVkIC90bXANCiAgICAgICAgICAgICAgIyBkaXJlY3RvcnkuDQogICAgICAgICAg ICAgIHRtcD0vdG1wL2d0JCQtJFJBTkRPTQ0KICAgICAgICAgICAgICAodW1hc2sgMDc3ICYmIG1r ZGlyICIkdG1wIikNCiAgICAgICAgICAgIH07IHRoZW4NCiAgICAgICAgICAgbWtkaXIgIiR0bXAv c3ViZGlyIg0KICAgICAgICAgICBHTF9TVUJESVJfRk9SX1VOTElOSz0iJHRtcC9zdWJkaXIiDQog ICAgICAgICAgIGV4cG9ydCBHTF9TVUJESVJfRk9SX1VOTElOSw0KICAgICAgICAgICBpZiB0ZXN0 ICIkY3Jvc3NfY29tcGlsaW5nIiA9IHllczsgdGhlbiA6DQogIGdsX2N2X2Z1bmNfdW5saW5rX3Bh cmVudF9mYWlscz0iZ3Vlc3Npbmcgbm8iDQplbHNlDQogIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNF T0YgPmNvbmZ0ZXN0LiRhY19leHQNCi8qIGVuZCBjb25mZGVmcy5oLiAgKi8NCg0KICAgICAgICAg ICAgICAgICNpbmNsdWRlIDxzdGRsaWIuaD4NCiAgICAgICAgICAgICAgICAjaW5jbHVkZSA8dW5p c3RkLmg+DQogICAgICAgICAgICAgICAgaW50IG1haW4gKCkNCiAgICAgICAgICAgICAgICB7DQog ICAgICAgICAgICAgICAgICBpbnQgcmVzdWx0ID0gMDsNCiAgICAgICAgICAgICAgICAgIGlmIChj aGRpciAoZ2V0ZW52ICgiR0xfU1VCRElSX0ZPUl9VTkxJTksiKSkgIT0gMCkNCiAgICAgICAgICAg ICAgICAgICAgcmVzdWx0IHw9IDE7DQogICAgICAgICAgICAgICAgICBlbHNlIGlmICh1bmxpbmsg KCIuLiIpID09IDApDQogICAgICAgICAgICAgICAgICAgIHJlc3VsdCB8PSAyOw0KICAgICAgICAg ICAgICAgICAgcmV0dXJuIHJlc3VsdDsNCiAgICAgICAgICAgICAgICB9DQoNCl9BQ0VPRg0KaWYg YWNfZm5fY190cnlfcnVuICIkTElORU5PIjsgdGhlbiA6DQogIGdsX2N2X2Z1bmNfdW5saW5rX3Bh cmVudF9mYWlscz15ZXMNCmVsc2UNCiAgZ2xfY3ZfZnVuY191bmxpbmtfcGFyZW50X2ZhaWxzPW5v DQpmaQ0Kcm0gLWYgY29yZSAqLmNvcmUgY29yZS5jb25mdGVzdC4qIGdtb24ub3V0IGJiLm91dCBj b25mdGVzdCRhY19leGVleHQgXA0KICBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LmJlYW0g Y29uZnRlc3QuJGFjX2V4dA0KZmkNCg0KICAgICAgICAgICB1bnNldCBHTF9TVUJESVJfRk9SX1VO TElOSw0KICAgICAgICAgICBybSAtcmYgIiR0bXAiDQogICAgICAgICBlbHNlDQogICAgICAgICAg IGdsX2N2X2Z1bmNfdW5saW5rX3BhcmVudF9mYWlscz0iZ3Vlc3Npbmcgbm8iDQogICAgICAgICBm aQ0KICAgICAgICAgOzsNCiAgICAgICAqKQ0KICAgICAgICAgZ2xfY3ZfZnVuY191bmxpbmtfcGFy ZW50X2ZhaWxzPSJndWVzc2luZyB5ZXMiDQogICAgICAgICA7Ow0KICAgICBlc2FjDQoNCmZpDQp7 ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGdsX2N2X2Z1 bmNfdW5saW5rX3BhcmVudF9mYWlscyIgPiY1DQokYXNfZWNobyAiJGdsX2N2X2Z1bmNfdW5saW5r X3BhcmVudF9mYWlscyIgPiY2OyB9DQogIGNhc2UgIiRnbF9jdl9mdW5jX3VubGlua19wYXJlbnRf ZmFpbHMiIGluDQogICAgKm5vKQ0KDQokYXNfZWNobyAiI2RlZmluZSBVTkxJTktfUEFSRU5UX0JV RyAxIiA+PmNvbmZkZWZzLmgNCg0KICAgICAgOzsNCiAgZXNhYw0KICBpZiB0ZXN0ICIkZ2xfY3Zf ZnVuY191bmxpbmtfaG9ub3JzX3NsYXNoZXMiICE9IHllcyBcDQogICAgIHx8IHsgY2FzZSAiJGds X2N2X2Z1bmNfdW5saW5rX3BhcmVudF9mYWlscyIgaW4NCiAgICAgICAgICAgICp5ZXMpIGZhbHNl OzsNCiAgICAgICAgICAgICpubykgdHJ1ZTs7DQogICAgICAgICAgZXNhYw0KICAgICAgICB9OyB0 aGVuDQogICAgUkVQTEFDRV9VTkxJTks9MQ0KDQoNCg0KDQoNCg0KDQoNCiAgZ2xfTElCT0JKUz0i JGdsX0xJQk9CSlMgdW5saW5rLiRhY19vYmpleHQiDQoNCiAgZmkNCg0KYWNfZm5fY19jaGVja190 eXBlICIkTElORU5PIiAibW9kZV90IiAiYWNfY3ZfdHlwZV9tb2RlX3QiICIkYWNfaW5jbHVkZXNf ZGVmYXVsdCINCmlmIHRlc3QgIngkYWNfY3ZfdHlwZV9tb2RlX3QiID0geHllczsgdGhlbiA6DQoN CmVsc2UNCg0KY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRg0KI2RlZmluZSBtb2RlX3QgaW50DQpf QUNFT0YNCg0KZmkNCg0KDQoNCiAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5F Tk99OiBjaGVja2luZyBmb3IgcHJvbW90ZWQgbW9kZV90IHR5cGUiID4mNQ0KJGFzX2VjaG9fbiAi Y2hlY2tpbmcgZm9yIHByb21vdGVkIG1vZGVfdCB0eXBlLi4uICIgPiY2OyB9DQppZiAke2dsX2N2 X3Byb21vdGVkX21vZGVfdCs6fSBmYWxzZTsgdGhlbiA6DQogICRhc19lY2hvX24gIihjYWNoZWQp ICIgPiY2DQplbHNlDQoNCiAgICAgICAgICAgICAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9G ID5jb25mdGVzdC4kYWNfZXh0DQovKiBlbmQgY29uZmRlZnMuaC4gICovDQojaW5jbHVkZSA8c3lz L3R5cGVzLmg+DQppbnQNCm1haW4gKCkNCnsNCnR5cGVkZWYgaW50IGFycmF5WzIgKiAoc2l6ZW9m IChtb2RlX3QpIDwgc2l6ZW9mIChpbnQpKSAtIDFdOw0KICA7DQogIHJldHVybiAwOw0KfQ0KX0FD RU9GDQppZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6DQogIGdsX2N2X3By b21vdGVkX21vZGVfdD0naW50Jw0KZWxzZQ0KICBnbF9jdl9wcm9tb3RlZF9tb2RlX3Q9J21vZGVf dCcNCmZpDQpybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0 ZXN0LiRhY19leHQNCg0KZmkNCnsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5P fTogcmVzdWx0OiAkZ2xfY3ZfcHJvbW90ZWRfbW9kZV90IiA+JjUNCiRhc19lY2hvICIkZ2xfY3Zf cHJvbW90ZWRfbW9kZV90IiA+JjY7IH0NCg0KY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRg0KI2Rl ZmluZSBQUk9NT1RFRF9NT0RFX1QgJGdsX2N2X3Byb21vdGVkX21vZGVfdA0KX0FDRU9GDQoNCg0K DQoNCiAgR05VTElCX09QRU5BVD0xDQoNCg0KICBHTlVMSUJfRkNITU9EQVQ9MQ0KICBHTlVMSUJf RlNUQVRBVD0xDQogIEdOVUxJQl9NS0RJUkFUPTENCg0KDQogIEdOVUxJQl9GQ0hPV05BVD0xDQog IEdOVUxJQl9VTkxJTktBVD0xDQoNCg0KDQoNCg0KDQoNCg0KDQogIGdsX0xJQk9CSlM9IiRnbF9M SUJPQkpTIG9wZW5hdC1wcm9jLiRhY19vYmpleHQiDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoN Cg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQogIGZv ciBhY19mdW5jIGluIGZjaG1vZGF0IGZzdGF0YXQgbWtkaXJhdCBvcGVuYXQgdW5saW5rYXQNCmRv IDoNCiAgYXNfYWNfdmFyPWAkYXNfZWNobyAiYWNfY3ZfZnVuY18kYWNfZnVuYyIgfCAkYXNfdHJf c2hgDQphY19mbl9jX2NoZWNrX2Z1bmMgIiRMSU5FTk8iICIkYWNfZnVuYyIgIiRhc19hY192YXIi DQppZiBldmFsIHRlc3QgXCJ4XCQiJGFzX2FjX3ZhciJcIiA9IHgieWVzIjsgdGhlbiA6DQogIGNh dCA+PmNvbmZkZWZzLmggPDxfQUNFT0YNCiNkZWZpbmUgYCRhc19lY2hvICJIQVZFXyRhY19mdW5j IiB8ICRhc190cl9jcHBgIDENCl9BQ0VPRg0KDQplbHNlDQoNCiAgICBnbF9MSUJPQkpTPSIkZ2xf TElCT0JKUyAkYWNfZnVuYy4kYWNfb2JqZXh0Ig0KDQpmaQ0KZG9uZQ0KDQoNCg0KDQogIGNhc2Ug JGFjX2N2X2Z1bmNfb3BlbmF0KyRhY19jdl9mdW5jX2xzdGF0X2RlcmVmZXJlbmNlc19zbGFzaGVk X3N5bWxpbmsgaW4NCiAgeWVzK3llcykNCiAgICAjIEdOVS9IdXJkIGhhcyB1bmxpbmthdCwgYnV0 IGl0IGhhcyB0aGUgc2FtZSBidWcgYXMgdW5saW5rLg0KICAgIGlmIHRlc3QgJFJFUExBQ0VfVU5M SU5LID0gMTsgdGhlbg0KDQoNCg0KDQoNCg0KDQoNCiAgZ2xfTElCT0JKUz0iJGdsX0xJQk9CSlMg dW5saW5rYXQuJGFjX29iamV4dCINCg0KICAgICAgUkVQTEFDRV9VTkxJTktBVD0xDQogICAgZmkg OzsNCiAgeWVzKyopDQogICAgIyBTb2xhcmlzIDkgaGFzICphdCBmdW5jdGlvbnMsIGJ1dCB1bmlm b3JtbHkgbWlzaGFuZGxlcyB0cmFpbGluZw0KICAgICMgc2xhc2ggaW4gYWxsIG9mIHRoZW0uDQoN Cg0KDQoNCg0KDQoNCg0KICBnbF9MSUJPQkpTPSIkZ2xfTElCT0JKUyBvcGVuYXQuJGFjX29iamV4 dCINCg0KICAgIFJFUExBQ0VfT1BFTkFUPTENCg0KDQoNCg0KDQoNCg0KDQogIGdsX0xJQk9CSlM9 IiRnbF9MSUJPQkpTIGZzdGF0YXQuJGFjX29iamV4dCINCg0KICAgIFJFUExBQ0VfRlNUQVRBVD0x DQoNCg0KDQoNCg0KDQoNCg0KICBnbF9MSUJPQkpTPSIkZ2xfTElCT0JKUyB1bmxpbmthdC4kYWNf b2JqZXh0Ig0KDQogICAgUkVQTEFDRV9VTkxJTktBVD0xDQogICAgOzsNCiAgKikNCiAgICBIQVZF X09QRU5BVD0wDQogICAgSEFWRV9VTkxJTktBVD0wICMgTm8ga25vd24gc3lzdGVtIHdpdGggdW5s aW5rYXQgYnV0IG5vdCBvcGVuYXQNCiAgICBIQVZFX0ZTVEFUQVQ9MCAjIE5vIGtub3duIHN5c3Rl bSB3aXRoIGZzdGF0YXQgYnV0IG5vdCBvcGVuYXQNCg0KDQoNCiAgOg0KOzsNCiAgZXNhYw0KICBp ZiB0ZXN0ICRhY19jdl9mdW5jX2ZjaG1vZGF0ICE9IHllczsgdGhlbg0KICAgIEhBVkVfRkNITU9E QVQ9MA0KICBmaQ0KICBpZiB0ZXN0ICRhY19jdl9mdW5jX21rZGlyYXQgIT0geWVzOyB0aGVuDQog ICAgSEFWRV9NS0RJUkFUPTANCiAgZmkNCg0KDQoNCiAgYWNfZm5fY19jaGVja19mdW5jICIkTElO RU5PIiAiZmNob3duYXQiICJhY19jdl9mdW5jX2ZjaG93bmF0Ig0KaWYgdGVzdCAieCRhY19jdl9m dW5jX2ZjaG93bmF0IiA9IHh5ZXM7IHRoZW4gOg0KDQoNCg0KICB7ICRhc19lY2hvICIkYXNfbWU6 JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgZmNob3duYXQgd29ya3Mgd2l0 aCBBVF9TWU1MSU5LX05PRk9MTE9XIiA+JjUNCiRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIg ZmNob3duYXQgd29ya3Mgd2l0aCBBVF9TWU1MSU5LX05PRk9MTE9XLi4uICIgPiY2OyB9DQppZiAk e2dsX2N2X2Z1bmNfZmNob3duYXRfbm9mb2xsb3dfd29ya3MrOn0gZmFsc2U7IHRoZW4gOg0KICAk YXNfZWNob19uICIoY2FjaGVkKSAiID4mNg0KZWxzZQ0KDQogICAgIGdsX2RhbmdsZT1jb25mdGVz dC5kYW5nbGUNCiAgICAgIyBSZW1vdmUgYW55IHJlbW5hbnRzIG9mIGEgcHJldmlvdXMgdGVzdC4N CiAgICAgcm0gLWYgJGdsX2RhbmdsZQ0KICAgICAjIEFycmFuZ2UgZm9yIGRlbGV0aW9uIG9mIHRo ZSB0ZW1wb3JhcnkgZmlsZSB0aGlzIHRlc3QgY3JlYXRlcy4NCiAgICAgYWNfY2xlYW5fZmlsZXM9 IiRhY19jbGVhbl9maWxlcyAkZ2xfZGFuZ2xlIg0KICAgICBsbiAtcyBjb25mdGVzdC5uby1zdWNo ICRnbF9kYW5nbGUNCiAgICAgaWYgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgPSB5ZXM7IHRoZW4g Og0KICBnbF9jdl9mdW5jX2ZjaG93bmF0X25vZm9sbG93X3dvcmtzPW5vDQplbHNlDQogIGNhdCBj b25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQNCi8qIGVuZCBjb25mZGVmcy5o LiAgKi8NCg0KI2luY2x1ZGUgPGZjbnRsLmg+DQojaW5jbHVkZSA8dW5pc3RkLmg+DQojaW5jbHVk ZSA8c3RkbGliLmg+DQojaW5jbHVkZSA8ZXJybm8uaD4NCiNpbmNsdWRlIDxzeXMvdHlwZXMuaD4N CmludA0KbWFpbiAoKQ0Kew0KICByZXR1cm4gKGZjaG93bmF0IChBVF9GRENXRCwgIiRnbF9kYW5n bGUiLCAtMSwgZ2V0Z2lkICgpLA0KICAgICAgICAgICAgICAgICAgICBBVF9TWU1MSU5LX05PRk9M TE9XKSAhPSAwDQogICAgICAgICAgJiYgZXJybm8gPT0gRU5PRU5UKTsNCn0NCg0KX0FDRU9GDQpp ZiBhY19mbl9jX3RyeV9ydW4gIiRMSU5FTk8iOyB0aGVuIDoNCiAgZ2xfY3ZfZnVuY19mY2hvd25h dF9ub2ZvbGxvd193b3Jrcz15ZXMNCmVsc2UNCiAgZ2xfY3ZfZnVuY19mY2hvd25hdF9ub2ZvbGxv d193b3Jrcz1ubw0KZmkNCnJtIC1mIGNvcmUgKi5jb3JlIGNvcmUuY29uZnRlc3QuKiBnbW9uLm91 dCBiYi5vdXQgY29uZnRlc3QkYWNfZXhlZXh0IFwNCiAgY29uZnRlc3QuJGFjX29iamV4dCBjb25m dGVzdC5iZWFtIGNvbmZ0ZXN0LiRhY19leHQNCmZpDQoNCg0KZmkNCnsgJGFzX2VjaG8gIiRhc19t ZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkZ2xfY3ZfZnVuY19mY2hvd25hdF9ub2Zv bGxvd193b3JrcyIgPiY1DQokYXNfZWNobyAiJGdsX2N2X2Z1bmNfZmNob3duYXRfbm9mb2xsb3df d29ya3MiID4mNjsgfQ0KICBpZiB0ZXN0ICRnbF9jdl9mdW5jX2ZjaG93bmF0X25vZm9sbG93X3dv cmtzID0gbm87IHRoZW4gOg0KICBSRVBMQUNFX0ZDSE9XTkFUPTENCg0KJGFzX2VjaG8gIiNkZWZp bmUgRkNIT1dOQVRfTk9GT0xMT1dfQlVHIDEiID4+Y29uZmRlZnMuaA0KDQoNCmZpDQoNCg0KDQoN CiAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0 aGVyIGZjaG93bmF0IHdvcmtzIHdpdGggYW4gZW1wdHkgZmlsZSBuYW1lIiA+JjUNCiRhc19lY2hv X24gImNoZWNraW5nIHdoZXRoZXIgZmNob3duYXQgd29ya3Mgd2l0aCBhbiBlbXB0eSBmaWxlIG5h bWUuLi4gIiA+JjY7IH0NCmlmICR7Z2xfY3ZfZnVuY19mY2hvd25hdF9lbXB0eV9maWxlbmFtZV93 b3Jrcys6fSBmYWxzZTsgdGhlbiA6DQogICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2DQplbHNl DQogIGlmIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0geWVzOyB0aGVuIDoNCiAgZ2xfY3ZfZnVu Y19mY2hvd25hdF9lbXB0eV9maWxlbmFtZV93b3Jrcz0iZ3Vlc3Npbmcgbm8iDQplbHNlDQogIGNh dCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQNCi8qIGVuZCBjb25mZGVm cy5oLiAgKi8NCiNpbmNsdWRlIDx1bmlzdGQuaD4NCiAgICAgICAgICAgICNpbmNsdWRlIDxmY250 bC5oPg0KDQppbnQNCm1haW4gKCkNCnsNCmludCBmZDsNCiAgICAgICAgICAgIGludCByZXQ7DQog ICAgICAgICAgICBpZiAobWtkaXIgKCJjb25mdGVzdGRpciIsIDA3MDApIDwgMCkNCiAgICAgICAg ICAgICAgcmV0dXJuIDI7DQogICAgICAgICAgICBmZCA9IG9wZW4gKCJjb25mdGVzdGRpciIsIE9f UkRPTkxZKTsNCiAgICAgICAgICAgIGlmIChmZCA8IDApDQogICAgICAgICAgICAgIHJldHVybiAz Ow0KICAgICAgICAgICAgcmV0ID0gZmNob3duYXQgKGZkLCAiIiwgLTEsIC0xLCAwKTsNCiAgICAg ICAgICAgIGNsb3NlIChmZCk7DQogICAgICAgICAgICBybWRpciAoImNvbmZ0ZXN0ZGlyIik7DQog ICAgICAgICAgICByZXR1cm4gcmV0ID09IDA7DQoNCiAgOw0KICByZXR1cm4gMDsNCn0NCl9BQ0VP Rg0KaWYgYWNfZm5fY190cnlfcnVuICIkTElORU5PIjsgdGhlbiA6DQogIGdsX2N2X2Z1bmNfZmNo b3duYXRfZW1wdHlfZmlsZW5hbWVfd29ya3M9eWVzDQplbHNlDQogIGdsX2N2X2Z1bmNfZmNob3du YXRfZW1wdHlfZmlsZW5hbWVfd29ya3M9bm8NCmZpDQpybSAtZiBjb3JlICouY29yZSBjb3JlLmNv bmZ0ZXN0LiogZ21vbi5vdXQgYmIub3V0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCBcDQogIGNvbmZ0ZXN0 LiRhY19vYmpleHQgY29uZnRlc3QuYmVhbSBjb25mdGVzdC4kYWNfZXh0DQpmaQ0KDQoNCmZpDQp7 ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGdsX2N2X2Z1 bmNfZmNob3duYXRfZW1wdHlfZmlsZW5hbWVfd29ya3MiID4mNQ0KJGFzX2VjaG8gIiRnbF9jdl9m dW5jX2ZjaG93bmF0X2VtcHR5X2ZpbGVuYW1lX3dvcmtzIiA+JjY7IH0NCiAgaWYgdGVzdCAiJGds X2N2X2Z1bmNfZmNob3duYXRfZW1wdHlfZmlsZW5hbWVfd29ya3MiICE9IHllczsgdGhlbiA6DQog IFJFUExBQ0VfRkNIT1dOQVQ9MQ0KDQokYXNfZWNobyAiI2RlZmluZSBGQ0hPV05BVF9FTVBUWV9G SUxFTkFNRV9CVUcgMSIgPj5jb25mZGVmcy5oDQoNCg0KZmkNCg0KICAgICBpZiB0ZXN0ICRSRVBM QUNFX0NIT1dOID0gMTsgdGhlbg0KICAgICAgIFJFUExBQ0VfRkNIT1dOQVQ9MQ0KICAgICBmaQ0K ZWxzZQ0KICBIQVZFX0ZDSE9XTkFUPTANCmZpDQoNCiAgaWYgdGVzdCAkSEFWRV9GQ0hPV05BVCA9 IDAgfHwgdGVzdCAkUkVQTEFDRV9GQ0hPV05BVCA9IDE7IHRoZW4NCg0KDQoNCg0KDQoNCg0KDQog IGdsX0xJQk9CSlM9IiRnbF9MSUJPQkpTIGZjaG93bmF0LiRhY19vYmpleHQiDQoNCiAgZmkNCg0K DQoNCg0KDQoNCmFjX2ZuX2NfY2hlY2tfZGVjbCAiJExJTkVOTyIgImZjaGRpciIgImFjX2N2X2hh dmVfZGVjbF9mY2hkaXIiICIkYWNfaW5jbHVkZXNfZGVmYXVsdCINCmlmIHRlc3QgIngkYWNfY3Zf aGF2ZV9kZWNsX2ZjaGRpciIgPSB4eWVzOyB0aGVuIDoNCiAgYWNfaGF2ZV9kZWNsPTENCmVsc2UN CiAgYWNfaGF2ZV9kZWNsPTANCmZpDQoNCmNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YNCiNkZWZp bmUgSEFWRV9ERUNMX0ZDSERJUiAkYWNfaGF2ZV9kZWNsDQpfQUNFT0YNCg0KDQoNCg0KDQogIHsg JGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIHdvcmtp bmcgZmNudGwuaCIgPiY1DQokYXNfZWNob19uICJjaGVja2luZyBmb3Igd29ya2luZyBmY250bC5o Li4uICIgPiY2OyB9DQppZiAke2dsX2N2X2hlYWRlcl93b3JraW5nX2ZjbnRsX2grOn0gZmFsc2U7 IHRoZW4gOg0KICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNg0KZWxzZQ0KICBpZiB0ZXN0ICIk Y3Jvc3NfY29tcGlsaW5nIiA9IHllczsgdGhlbiA6DQogIGdsX2N2X2hlYWRlcl93b3JraW5nX2Zj bnRsX2g9Y3Jvc3MtY29tcGlsaW5nDQplbHNlDQogIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0Yg PmNvbmZ0ZXN0LiRhY19leHQNCi8qIGVuZCBjb25mZGVmcy5oLiAgKi8NCiNpbmNsdWRlIDxzeXMv dHlwZXMuaD4NCiAgICAgICAgICAgI2luY2x1ZGUgPHN5cy9zdGF0Lmg+DQogICAgICAgICAgICNp bmNsdWRlIDx1bmlzdGQuaD4NCiAgICAgICAgICAgI2luY2x1ZGUgPGZjbnRsLmg+DQogICAgICAg ICAgICNpZm5kZWYgT19OT0FUSU1FDQogICAgICAgICAgICAjZGVmaW5lIE9fTk9BVElNRSAwDQog ICAgICAgICAgICNlbmRpZg0KICAgICAgICAgICAjaWZuZGVmIE9fTk9GT0xMT1cNCiAgICAgICAg ICAgICNkZWZpbmUgT19OT0ZPTExPVyAwDQogICAgICAgICAgICNlbmRpZg0KICAgICAgICAgICBz dGF0aWMgaW50IGNvbnN0IGNvbnN0YW50c1tdID0NCiAgICAgICAgICAgIHsNCiAgICAgICAgICAg ICAgT19DUkVBVCwgT19FWENMLCBPX05PQ1RUWSwgT19UUlVOQywgT19BUFBFTkQsDQogICAgICAg ICAgICAgIE9fTk9OQkxPQ0ssIE9fU1lOQywgT19BQ0NNT0RFLCBPX1JET05MWSwgT19SRFdSLCBP X1dST05MWQ0KICAgICAgICAgICAgfTsNCg0KaW50DQptYWluICgpDQp7DQoNCiAgICAgICAgICAg IGludCByZXN1bHQgPSAhY29uc3RhbnRzOw0KICAgICAgICAgICAgew0KICAgICAgICAgICAgICBz dGF0aWMgY2hhciBjb25zdCBzeW1bXSA9ICJjb25mdGVzdC5zeW0iOw0KICAgICAgICAgICAgICBp ZiAoc3ltbGluayAoIi4iLCBzeW0pICE9IDApDQogICAgICAgICAgICAgICAgcmVzdWx0IHw9IDI7 DQogICAgICAgICAgICAgIGVsc2UNCiAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAg ICBpbnQgZmQgPSBvcGVuIChzeW0sIE9fUkRPTkxZIHwgT19OT0ZPTExPVyk7DQogICAgICAgICAg ICAgICAgICBpZiAoZmQgPj0gMCkNCiAgICAgICAgICAgICAgICAgICAgew0KICAgICAgICAgICAg ICAgICAgICAgIGNsb3NlIChmZCk7DQogICAgICAgICAgICAgICAgICAgICAgcmVzdWx0IHw9IDQ7 DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAg IHVubGluayAoc3ltKTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIHsNCiAgICAgICAgICAg ICAgc3RhdGljIGNoYXIgY29uc3QgZmlsZVtdID0gImNvbmZkZWZzLmgiOw0KICAgICAgICAgICAg ICBpbnQgZmQgPSBvcGVuIChmaWxlLCBPX1JET05MWSB8IE9fTk9BVElNRSk7DQogICAgICAgICAg ICAgIGlmIChmZCA8IDApDQogICAgICAgICAgICAgICAgcmVzdWx0IHw9IDg7DQogICAgICAgICAg ICAgIGVsc2UNCiAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc3Rh dCBzdDA7DQogICAgICAgICAgICAgICAgICBpZiAoZnN0YXQgKGZkLCAmc3QwKSAhPSAwKQ0KICAg ICAgICAgICAgICAgICAgICByZXN1bHQgfD0gMTY7DQogICAgICAgICAgICAgICAgICBlbHNlDQog ICAgICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICAgICBjaGFyIGM7DQogICAg ICAgICAgICAgICAgICAgICAgc2xlZXAgKDEpOw0KICAgICAgICAgICAgICAgICAgICAgIGlmIChy ZWFkIChmZCwgJmMsIDEpICE9IDEpDQogICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQgfD0g MjQ7DQogICAgICAgICAgICAgICAgICAgICAgZWxzZQ0KICAgICAgICAgICAgICAgICAgICAgICAg ew0KICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY2xvc2UgKGZkKSAhPSAwKQ0KICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCB8PSAzMjsNCiAgICAgICAgICAgICAgICAgICAg ICAgICAgZWxzZQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHN0cnVjdCBzdGF0IHN0MTsNCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGlmIChzdGF0IChmaWxlLCAmc3QxKSAhPSAwKQ0KICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICByZXN1bHQgfD0gNDA7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBl bHNlDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdDAuc3RfYXRpbWUgIT0g c3QxLnN0X2F0aW1lKQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCB8 PSA2NDsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAg ICAgICB9DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICB9DQogICAgICAg ICAgICB9DQogICAgICAgICAgICByZXR1cm4gcmVzdWx0Ow0KICA7DQogIHJldHVybiAwOw0KfQ0K X0FDRU9GDQppZiBhY19mbl9jX3RyeV9ydW4gIiRMSU5FTk8iOyB0aGVuIDoNCiAgZ2xfY3ZfaGVh ZGVyX3dvcmtpbmdfZmNudGxfaD15ZXMNCmVsc2UNCiAgY2FzZSAkPyBpbiAjKA0KICAgICAgICA0 KSBnbF9jdl9oZWFkZXJfd29ya2luZ19mY250bF9oPSdubyAoYmFkIE9fTk9GT0xMT1cpJzs7ICMo DQogICAgICAgIDY0KSBnbF9jdl9oZWFkZXJfd29ya2luZ19mY250bF9oPSdubyAoYmFkIE9fTk9B VElNRSknOzsgIygNCiAgICAgICAgNjgpIGdsX2N2X2hlYWRlcl93b3JraW5nX2ZjbnRsX2g9J25v IChiYWQgT19OT0FUSU1FLCBPX05PRk9MTE9XKSc7OyAjKA0KICAgICAgICAgKikgZ2xfY3ZfaGVh ZGVyX3dvcmtpbmdfZmNudGxfaD0nbm8nOzsNCiAgICAgICAgZXNhYw0KZmkNCnJtIC1mIGNvcmUg Ki5jb3JlIGNvcmUuY29uZnRlc3QuKiBnbW9uLm91dCBiYi5vdXQgY29uZnRlc3QkYWNfZXhlZXh0 IFwNCiAgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC5iZWFtIGNvbmZ0ZXN0LiRhY19leHQN CmZpDQoNCmZpDQp7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3Vs dDogJGdsX2N2X2hlYWRlcl93b3JraW5nX2ZjbnRsX2giID4mNQ0KJGFzX2VjaG8gIiRnbF9jdl9o ZWFkZXJfd29ya2luZ19mY250bF9oIiA+JjY7IH0NCg0KICBjYXNlICRnbF9jdl9oZWFkZXJfd29y a2luZ19mY250bF9oIGluICMoDQogICpPX05PQVRJTUUqIHwgbm8gfCBjcm9zcy1jb21waWxpbmcp IGFjX3ZhbD0wOzsgIygNCiAgKikgYWNfdmFsPTE7Ow0KICBlc2FjDQoNCmNhdCA+PmNvbmZkZWZz LmggPDxfQUNFT0YNCiNkZWZpbmUgSEFWRV9XT1JLSU5HX09fTk9BVElNRSAkYWNfdmFsDQpfQUNF T0YNCg0KDQogIGNhc2UgJGdsX2N2X2hlYWRlcl93b3JraW5nX2ZjbnRsX2ggaW4gIygNCiAgKk9f Tk9GT0xMT1cqIHwgbm8gfCBjcm9zcy1jb21waWxpbmcpIGFjX3ZhbD0wOzsgIygNCiAgKikgYWNf dmFsPTE7Ow0KICBlc2FjDQoNCmNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YNCiNkZWZpbmUgSEFW RV9XT1JLSU5HX09fTk9GT0xMT1cgJGFjX3ZhbA0KX0FDRU9GDQoNCg0KDQoNCg0KDQoNCiAgeyAk YXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgZnNlZWtv IiA+JjUNCiRhc19lY2hvX24gImNoZWNraW5nIGZvciBmc2Vla28uLi4gIiA+JjY7IH0NCmlmICR7 Z2xfY3ZfZnVuY19mc2Vla28rOn0gZmFsc2U7IHRoZW4gOg0KICAkYXNfZWNob19uICIoY2FjaGVk KSAiID4mNg0KZWxzZQ0KDQogICAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVz dC4kYWNfZXh0DQovKiBlbmQgY29uZmRlZnMuaC4gICovDQojaW5jbHVkZSA8c3RkaW8uaD4NCg0K aW50DQptYWluICgpDQp7DQpmc2Vla28gKHN0ZGluLCAwLCAwKTsNCiAgOw0KICByZXR1cm4gMDsN Cn0NCl9BQ0VPRg0KaWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOg0KICBnbF9j dl9mdW5jX2ZzZWVrbz15ZXMNCmVsc2UNCiAgZ2xfY3ZfZnVuY19mc2Vla289bm8NCmZpDQpybSAt ZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwNCiAgICBjb25mdGVzdCRh Y19leGVleHQgY29uZnRlc3QuJGFjX2V4dA0KDQpmaQ0KeyAkYXNfZWNobyAiJGFzX21lOiR7YXNf bGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRnbF9jdl9mdW5jX2ZzZWVrbyIgPiY1DQokYXNfZWNo byAiJGdsX2N2X2Z1bmNfZnNlZWtvIiA+JjY7IH0NCg0KDQoNCnsgJGFzX2VjaG8gIiRhc19tZTok e2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIHN0X2RtX21vZGUgaW4gc3RydWN0IHN0 YXQiID4mNQ0KJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIHN0X2RtX21vZGUgaW4gc3RydWN0IHN0 YXQuLi4gIiA+JjY7IH0NCmlmICR7YWNfY3Zfc3RydWN0X3N0X2RtX21vZGUrOn0gZmFsc2U7IHRo ZW4gOg0KICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNg0KZWxzZQ0KICBjYXQgY29uZmRlZnMu aCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0DQovKiBlbmQgY29uZmRlZnMuaC4gICovDQoN CiNpbmNsdWRlIDxzeXMvdHlwZXMuaD4NCiNpbmNsdWRlIDxzeXMvc3RhdC5oPg0KaW50DQptYWlu ICgpDQp7DQpzdHJ1Y3Qgc3RhdCBzOyBzLnN0X2RtX21vZGU7DQogIDsNCiAgcmV0dXJuIDA7DQp9 DQpfQUNFT0YNCmlmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoNCiAgYWNf Y3Zfc3RydWN0X3N0X2RtX21vZGU9eWVzDQplbHNlDQogIGFjX2N2X3N0cnVjdF9zdF9kbV9tb2Rl PW5vDQpmaQ0Kcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25m dGVzdC4kYWNfZXh0DQpmaQ0KeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99 OiByZXN1bHQ6ICRhY19jdl9zdHJ1Y3Rfc3RfZG1fbW9kZSIgPiY1DQokYXNfZWNobyAiJGFjX2N2 X3N0cnVjdF9zdF9kbV9tb2RlIiA+JjY7IH0NCg0KICBpZiB0ZXN0ICRhY19jdl9zdHJ1Y3Rfc3Rf ZG1fbW9kZSA9IHllczsgdGhlbg0KDQokYXNfZWNobyAiI2RlZmluZSBIQVZFX1NUX0RNX01PREUg MSIgPj5jb25mZGVmcy5oDQoNCiAgZmkNCg0KDQphY19mbl9jX2NoZWNrX2RlY2wgIiRMSU5FTk8i ICJzdHJtb2RlIiAiYWNfY3ZfaGF2ZV9kZWNsX3N0cm1vZGUiICIkYWNfaW5jbHVkZXNfZGVmYXVs dCINCmlmIHRlc3QgIngkYWNfY3ZfaGF2ZV9kZWNsX3N0cm1vZGUiID0geHllczsgdGhlbiA6DQog IGFjX2hhdmVfZGVjbD0xDQplbHNlDQogIGFjX2hhdmVfZGVjbD0wDQpmaQ0KDQpjYXQgPj5jb25m ZGVmcy5oIDw8X0FDRU9GDQojZGVmaW5lIEhBVkVfREVDTF9TVFJNT0RFICRhY19oYXZlX2RlY2wN Cl9BQ0VPRg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KICBnbF9MSUJPQkpTPSIkZ2xfTElCT0JK UyBmaWxlbmFtZWNhdC1sZ3BsLiRhY19vYmpleHQiDQoNCg0KDQoNCg0KDQogICB7ICRhc19lY2hv ICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBtYnN0YXRlX3QiID4m NQ0KJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIG1ic3RhdGVfdC4uLiAiID4mNjsgfQ0KaWYgJHth Y19jdl90eXBlX21ic3RhdGVfdCs6fSBmYWxzZTsgdGhlbiA6DQogICRhc19lY2hvX24gIihjYWNo ZWQpICIgPiY2DQplbHNlDQogIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRh Y19leHQNCi8qIGVuZCBjb25mZGVmcy5oLiAgKi8NCiRhY19pbmNsdWRlc19kZWZhdWx0DQovKiBU cnU2NCB3aXRoIERlc2t0b3AgVG9vbGtpdCBDIGhhcyBhIGJ1ZzogPHN0ZGlvLmg+IG11c3QgYmUg aW5jbHVkZWQgYmVmb3JlDQogICA8d2NoYXIuaD4uDQogICBCU0QvT1MgNC4wLjEgaGFzIGEgYnVn OiA8c3RkZGVmLmg+LCA8c3RkaW8uaD4gYW5kIDx0aW1lLmg+IG11c3QgYmUNCiAgIGluY2x1ZGVk IGJlZm9yZSA8d2NoYXIuaD4uICAqLw0KI2luY2x1ZGUgPHN0ZGRlZi5oPg0KI2luY2x1ZGUgPHN0 ZGlvLmg+DQojaW5jbHVkZSA8dGltZS5oPg0KI2luY2x1ZGUgPHdjaGFyLmg+DQppbnQNCm1haW4g KCkNCnsNCm1ic3RhdGVfdCB4OyByZXR1cm4gc2l6ZW9mIHg7DQogIDsNCiAgcmV0dXJuIDA7DQp9 DQpfQUNFT0YNCmlmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoNCiAgYWNf Y3ZfdHlwZV9tYnN0YXRlX3Q9eWVzDQplbHNlDQogIGFjX2N2X3R5cGVfbWJzdGF0ZV90PW5vDQpm aQ0Kcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4k YWNfZXh0DQpmaQ0KeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1 bHQ6ICRhY19jdl90eXBlX21ic3RhdGVfdCIgPiY1DQokYXNfZWNobyAiJGFjX2N2X3R5cGVfbWJz dGF0ZV90IiA+JjY7IH0NCiAgIGlmIHRlc3QgJGFjX2N2X3R5cGVfbWJzdGF0ZV90ID0geWVzOyB0 aGVuDQoNCiRhc19lY2hvICIjZGVmaW5lIEhBVkVfTUJTVEFURV9UIDEiID4+Y29uZmRlZnMuaA0K DQogICBlbHNlDQoNCiRhc19lY2hvICIjZGVmaW5lIG1ic3RhdGVfdCBpbnQiID4+Y29uZmRlZnMu aA0KDQogICBmaQ0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoN Cg0KDQoNCiAgR05VTElCX0FDT1NMPTA7DQogIEdOVUxJQl9BU0lOTD0wOw0KICBHTlVMSUJfQVRB Tkw9MDsNCiAgR05VTElCX0NFSUw9MDsNCiAgR05VTElCX0NFSUxGPTA7DQogIEdOVUxJQl9DRUlM TD0wOw0KICBHTlVMSUJfQ09TTD0wOw0KICBHTlVMSUJfRVhQTD0wOw0KICBHTlVMSUJfRkxPT1I9 MDsNCiAgR05VTElCX0ZMT09SRj0wOw0KICBHTlVMSUJfRkxPT1JMPTA7DQogIEdOVUxJQl9GUkVY UD0wOw0KICBHTlVMSUJfRlJFWFBMPTA7DQogIEdOVUxJQl9JU0ZJTklURT0wOw0KICBHTlVMSUJf SVNJTkY9MDsNCiAgR05VTElCX0lTTkFOPTA7DQogIEdOVUxJQl9JU05BTkY9MDsNCiAgR05VTElC X0lTTkFORD0wOw0KICBHTlVMSUJfSVNOQU5MPTA7DQogIEdOVUxJQl9MREVYUEw9MDsNCiAgR05V TElCX0xPR0I9MDsNCiAgR05VTElCX0xPR0w9MDsNCiAgR05VTElCX1JPVU5EPTA7DQogIEdOVUxJ Ql9ST1VOREY9MDsNCiAgR05VTElCX1JPVU5ETD0wOw0KICBHTlVMSUJfU0lHTkJJVD0wOw0KICBH TlVMSUJfU0lOTD0wOw0KICBHTlVMSUJfU1FSVEw9MDsNCiAgR05VTElCX1RBTkw9MDsNCiAgR05V TElCX1RSVU5DPTA7DQogIEdOVUxJQl9UUlVOQ0Y9MDsNCiAgR05VTElCX1RSVU5DTD0wOw0KICAg IEhBVkVfQUNPU0w9MTsNCiAgSEFWRV9BU0lOTD0xOw0KICBIQVZFX0FUQU5MPTE7DQogIEhBVkVf Q09TTD0xOw0KICBIQVZFX0VYUEw9MTsNCiAgSEFWRV9JU05BTkY9MTsNCiAgSEFWRV9JU05BTkQ9 MTsNCiAgSEFWRV9JU05BTkw9MTsNCiAgSEFWRV9MT0dMPTE7DQogIEhBVkVfU0lOTD0xOw0KICBI QVZFX1NRUlRMPTE7DQogIEhBVkVfVEFOTD0xOw0KICBIQVZFX0RFQ0xfQUNPU0w9MTsNCiAgSEFW RV9ERUNMX0FTSU5MPTE7DQogIEhBVkVfREVDTF9BVEFOTD0xOw0KICBIQVZFX0RFQ0xfQ0VJTEY9 MTsNCiAgSEFWRV9ERUNMX0NFSUxMPTE7DQogIEhBVkVfREVDTF9DT1NMPTE7DQogIEhBVkVfREVD TF9FWFBMPTE7DQogIEhBVkVfREVDTF9GTE9PUkY9MTsNCiAgSEFWRV9ERUNMX0ZMT09STD0xOw0K ICBIQVZFX0RFQ0xfRlJFWFBMPTE7DQogIEhBVkVfREVDTF9MREVYUEw9MTsNCiAgSEFWRV9ERUNM X0xPR0I9MTsNCiAgSEFWRV9ERUNMX0xPR0w9MTsNCiAgSEFWRV9ERUNMX1JPVU5EPTE7DQogIEhB VkVfREVDTF9ST1VOREY9MTsNCiAgSEFWRV9ERUNMX1JPVU5ETD0xOw0KICBIQVZFX0RFQ0xfU0lO TD0xOw0KICBIQVZFX0RFQ0xfU1FSVEw9MTsNCiAgSEFWRV9ERUNMX1RBTkw9MTsNCiAgSEFWRV9E RUNMX1RSVU5DPTE7DQogIEhBVkVfREVDTF9UUlVOQ0Y9MTsNCiAgSEFWRV9ERUNMX1RSVU5DTD0x Ow0KICBSRVBMQUNFX0NFSUw9MDsNCiAgUkVQTEFDRV9DRUlMRj0wOw0KICBSRVBMQUNFX0NFSUxM PTA7DQogIFJFUExBQ0VfRkxPT1I9MDsNCiAgUkVQTEFDRV9GTE9PUkY9MDsNCiAgUkVQTEFDRV9G TE9PUkw9MDsNCiAgUkVQTEFDRV9GUkVYUD0wOw0KICBSRVBMQUNFX0ZSRVhQTD0wOw0KICBSRVBM QUNFX0hVR0VfVkFMPTA7DQogIFJFUExBQ0VfSVNGSU5JVEU9MDsNCiAgUkVQTEFDRV9JU0lORj0w Ow0KICBSRVBMQUNFX0lTTkFOPTA7DQogIFJFUExBQ0VfTERFWFBMPTA7DQogIFJFUExBQ0VfTkFO PTA7DQogIFJFUExBQ0VfUk9VTkQ9MDsNCiAgUkVQTEFDRV9ST1VOREY9MDsNCiAgUkVQTEFDRV9S T1VOREw9MDsNCiAgUkVQTEFDRV9TSUdOQklUPTA7DQogIFJFUExBQ0VfU0lHTkJJVF9VU0lOR19H Q0M9MDsNCiAgUkVQTEFDRV9UUlVOQz0wOw0KICBSRVBMQUNFX1RSVU5DRj0wOw0KICBSRVBMQUNF X1RSVU5DTD0wOw0KDQoNCiAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99 OiBjaGVja2luZyB3aGV0aGVyIGZyZXhwKCkgY2FuIGJlIHVzZWQgd2l0aG91dCBsaW5raW5nIHdp dGggbGlibSIgPiY1DQokYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIGZyZXhwKCkgY2FuIGJl IHVzZWQgd2l0aG91dCBsaW5raW5nIHdpdGggbGlibS4uLiAiID4mNjsgfQ0KaWYgJHtnbF9jdl9m dW5jX2ZyZXhwX25vX2xpYm0rOn0gZmFsc2U7IHRoZW4gOg0KICAkYXNfZWNob19uICIoY2FjaGVk KSAiID4mNg0KZWxzZQ0KDQogICAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVz dC4kYWNfZXh0DQovKiBlbmQgY29uZmRlZnMuaC4gICovDQojaW5jbHVkZSA8bWF0aC5oPg0KICAg ICAgICAgICAgIGRvdWJsZSB4Ow0KaW50DQptYWluICgpDQp7DQppbnQgZTsgcmV0dXJuIGZyZXhw ICh4LCAmZSkgPiAwOw0KICA7DQogIHJldHVybiAwOw0KfQ0KX0FDRU9GDQppZiBhY19mbl9jX3Ry eV9saW5rICIkTElORU5PIjsgdGhlbiA6DQogIGdsX2N2X2Z1bmNfZnJleHBfbm9fbGlibT15ZXMN CmVsc2UNCiAgZ2xfY3ZfZnVuY19mcmV4cF9ub19saWJtPW5vDQpmaQ0Kcm0gLWYgY29yZSBjb25m dGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcDQogICAgY29uZnRlc3QkYWNfZXhlZXh0IGNv bmZ0ZXN0LiRhY19leHQNCg0KZmkNCnsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElO RU5PfTogcmVzdWx0OiAkZ2xfY3ZfZnVuY19mcmV4cF9ub19saWJtIiA+JjUNCiRhc19lY2hvICIk Z2xfY3ZfZnVuY19mcmV4cF9ub19saWJtIiA+JjY7IH0NCg0KDQogICAgeyAkYXNfZWNobyAiJGFz X21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIHN0ZGluIGRlZmF1bHRz IHRvIGxhcmdlIGZpbGUgb2Zmc2V0cyIgPiY1DQokYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVy IHN0ZGluIGRlZmF1bHRzIHRvIGxhcmdlIGZpbGUgb2Zmc2V0cy4uLiAiID4mNjsgfQ0KaWYgJHtn bF9jdl92YXJfc3RkaW5fbGFyZ2Vfb2Zmc2V0Kzp9IGZhbHNlOyB0aGVuIDoNCiAgJGFzX2VjaG9f biAiKGNhY2hlZCkgIiA+JjYNCmVsc2UNCiAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29u ZnRlc3QuJGFjX2V4dA0KLyogZW5kIGNvbmZkZWZzLmguICAqLw0KI2luY2x1ZGUgPHN0ZGlvLmg+ DQppbnQNCm1haW4gKCkNCnsNCiNpZiBkZWZpbmVkIF9fU0w2NCAmJiBkZWZpbmVkIF9fU0NMRSAv KiBjeWd3aW4gKi8NCiAgLyogQ3lnd2luIDEuNS4yNCBhbmQgZWFybGllciBmYWlsIHRvIHB1dCBz dGRpbiBpbiA2NC1iaXQgbW9kZSwgbWFraW5nDQogICAgIGZzZWVrby9mdGVsbG8gbmVlZGxlc3Ns eSBmYWlsLiAgVGhpcyBidWcgd2FzIGZpeGVkIGluIDEuNS4yNSwgYW5kDQogICAgIGl0IGlzIGVh c2llciB0byBkbyBhIHZlcnNpb24gY2hlY2sgdGhhbiBidWlsZGluZyBhIHJ1bnRpbWUgdGVzdC4g ICovDQojIGluY2x1ZGUgPGN5Z3dpbi92ZXJzaW9uLmg+DQojIGlmIENZR1dJTl9WRVJTSU9OX0RM TF9DT01CSU5FRCA8IENZR1dJTl9WRVJTSU9OX0RMTF9NQUtFX0NPTUJJTkVEICgxMDA1LCAyNSkN CiAgY2hva2UgbWUNCiMgZW5kaWYNCiNlbmRpZg0KICA7DQogIHJldHVybiAwOw0KfQ0KX0FDRU9G DQppZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6DQogIGdsX2N2X3Zhcl9zdGRp bl9sYXJnZV9vZmZzZXQ9eWVzDQplbHNlDQogIGdsX2N2X3Zhcl9zdGRpbl9sYXJnZV9vZmZzZXQ9 bm8NCmZpDQpybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwNCiAg ICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dA0KZmkNCnsgJGFzX2VjaG8gIiRh c19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkZ2xfY3ZfdmFyX3N0ZGluX2xhcmdl X29mZnNldCIgPiY1DQokYXNfZWNobyAiJGdsX2N2X3Zhcl9zdGRpbl9sYXJnZV9vZmZzZXQiID4m NjsgfQ0KDQphY19mbl9jX2NoZWNrX2RlY2wgIiRMSU5FTk8iICJmc2Vla28iICJhY19jdl9oYXZl X2RlY2xfZnNlZWtvIiAiJGFjX2luY2x1ZGVzX2RlZmF1bHQiDQppZiB0ZXN0ICJ4JGFjX2N2X2hh dmVfZGVjbF9mc2Vla28iID0geHllczsgdGhlbiA6DQogIGFjX2hhdmVfZGVjbD0xDQplbHNlDQog IGFjX2hhdmVfZGVjbD0wDQpmaQ0KDQpjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GDQojZGVmaW5l IEhBVkVfREVDTF9GU0VFS08gJGFjX2hhdmVfZGVjbA0KX0FDRU9GDQoNCg0KDQoNCg0KDQoNCmFj X2ZuX2NfY2hlY2tfZGVjbCAiJExJTkVOTyIgImZ0ZWxsbyIgImFjX2N2X2hhdmVfZGVjbF9mdGVs bG8iICIkYWNfaW5jbHVkZXNfZGVmYXVsdCINCmlmIHRlc3QgIngkYWNfY3ZfaGF2ZV9kZWNsX2Z0 ZWxsbyIgPSB4eWVzOyB0aGVuIDoNCiAgYWNfaGF2ZV9kZWNsPTENCmVsc2UNCiAgYWNfaGF2ZV9k ZWNsPTANCmZpDQoNCmNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YNCiNkZWZpbmUgSEFWRV9ERUNM X0ZURUxMTyAkYWNfaGF2ZV9kZWNsDQpfQUNFT0YNCg0KDQoNCg0KDQoNCiAgR05VTElCX1NPQ0tF VD0wOw0KICBHTlVMSUJfQ09OTkVDVD0wOw0KICBHTlVMSUJfQUNDRVBUPTA7DQogIEdOVUxJQl9C SU5EPTA7DQogIEdOVUxJQl9HRVRQRUVSTkFNRT0wOw0KICBHTlVMSUJfR0VUU09DS05BTUU9MDsN CiAgR05VTElCX0dFVFNPQ0tPUFQ9MDsNCiAgR05VTElCX0xJU1RFTj0wOw0KICBHTlVMSUJfUkVD Vj0wOw0KICBHTlVMSUJfU0VORD0wOw0KICBHTlVMSUJfUkVDVkZST009MDsNCiAgR05VTElCX1NF TkRUTz0wOw0KICBHTlVMSUJfU0VUU09DS09QVD0wOw0KICBHTlVMSUJfU0hVVERPV049MDsNCiAg R05VTElCX0FDQ0VQVDQ9MDsNCiAgSEFWRV9TVFJVQ1RfU09DS0FERFJfU1RPUkFHRT0xOw0KICBI QVZFX1NUUlVDVF9TT0NLQUREUl9TVE9SQUdFX1NTX0ZBTUlMWT0xOw0KDQogIEhBVkVfU0FfRkFN SUxZX1Q9MTsNCiAgSEFWRV9BQ0NFUFQ0PTE7DQoNCg0KICAgaWYgdGVzdCAkYWNfY3ZfaGVhZGVy X3N5c19zb2NrZXRfaCA9IG5vOyB0aGVuDQogICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGFj X2hlYWRlciBpbiB3czJ0Y3BpcC5oDQpkbyA6DQogIGFjX2ZuX2NfY2hlY2tfaGVhZGVyX21vbmdy ZWwgIiRMSU5FTk8iICJ3czJ0Y3BpcC5oIiAiYWNfY3ZfaGVhZGVyX3dzMnRjcGlwX2giICIkYWNf aW5jbHVkZXNfZGVmYXVsdCINCmlmIHRlc3QgIngkYWNfY3ZfaGVhZGVyX3dzMnRjcGlwX2giID0g eHllczsgdGhlbiA6DQogIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YNCiNkZWZpbmUgSEFWRV9X UzJUQ1BJUF9IIDENCl9BQ0VPRg0KDQpmaQ0KDQpkb25lDQoNCiAgIGZpDQoNCg0KDQoNCg0KDQog ICAgICAgIGNhc2UgIiRob3N0X29zIiBpbg0KICAgIG9zZiopDQoNCiRhc19lY2hvICIjZGVmaW5l IF9QT1NJWF9QSUlfU09DS0VUIDEiID4+Y29uZmRlZnMuaA0KDQogICAgICA7Ow0KICBlc2FjDQoN CiAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0 aGVyIDxzeXMvc29ja2V0Lmg+IGlzIHNlbGYtY29udGFpbmVkIiA+JjUNCiRhc19lY2hvX24gImNo ZWNraW5nIHdoZXRoZXIgPHN5cy9zb2NrZXQuaD4gaXMgc2VsZi1jb250YWluZWQuLi4gIiA+JjY7 IH0NCmlmICR7Z2xfY3ZfaGVhZGVyX3N5c19zb2NrZXRfaF9zZWxmY29udGFpbmVkKzp9IGZhbHNl OyB0aGVuIDoNCiAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYNCmVsc2UNCg0KICAgICAgY2F0 IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dA0KLyogZW5kIGNvbmZkZWZz LmguICAqLw0KI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4NCmludA0KbWFpbiAoKQ0Kew0KDQogIDsN CiAgcmV0dXJuIDA7DQp9DQpfQUNFT0YNCmlmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8i OyB0aGVuIDoNCiAgZ2xfY3ZfaGVhZGVyX3N5c19zb2NrZXRfaF9zZWxmY29udGFpbmVkPXllcw0K ZWxzZQ0KICBnbF9jdl9oZWFkZXJfc3lzX3NvY2tldF9oX3NlbGZjb250YWluZWQ9bm8NCmZpDQpy bSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19l eHQNCg0KZmkNCnsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0 OiAkZ2xfY3ZfaGVhZGVyX3N5c19zb2NrZXRfaF9zZWxmY29udGFpbmVkIiA+JjUNCiRhc19lY2hv ICIkZ2xfY3ZfaGVhZGVyX3N5c19zb2NrZXRfaF9zZWxmY29udGFpbmVkIiA+JjY7IH0NCiAgaWYg dGVzdCAkZ2xfY3ZfaGVhZGVyX3N5c19zb2NrZXRfaF9zZWxmY29udGFpbmVkID0geWVzOyB0aGVu DQogICAgICAgICAgICBmb3IgYWNfZnVuYyBpbiBzaHV0ZG93bg0KZG8gOg0KICBhY19mbl9jX2No ZWNrX2Z1bmMgIiRMSU5FTk8iICJzaHV0ZG93biIgImFjX2N2X2Z1bmNfc2h1dGRvd24iDQppZiB0 ZXN0ICJ4JGFjX2N2X2Z1bmNfc2h1dGRvd24iID0geHllczsgdGhlbiA6DQogIGNhdCA+PmNvbmZk ZWZzLmggPDxfQUNFT0YNCiNkZWZpbmUgSEFWRV9TSFVURE9XTiAxDQpfQUNFT0YNCg0KZmkNCmRv bmUNCg0KICAgIGlmIHRlc3QgJGFjX2N2X2Z1bmNfc2h1dGRvd24gPSB5ZXM7IHRoZW4NCiAgICAg IHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhl ciA8c3lzL3NvY2tldC5oPiBkZWZpbmVzIHRoZSBTSFVUXyogbWFjcm9zIiA+JjUNCiRhc19lY2hv X24gImNoZWNraW5nIHdoZXRoZXIgPHN5cy9zb2NrZXQuaD4gZGVmaW5lcyB0aGUgU0hVVF8qIG1h Y3Jvcy4uLiAiID4mNjsgfQ0KaWYgJHtnbF9jdl9oZWFkZXJfc3lzX3NvY2tldF9oX3NodXQrOn0g ZmFsc2U7IHRoZW4gOg0KICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNg0KZWxzZQ0KDQogICAg ICAgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dA0KLyogZW5k IGNvbmZkZWZzLmguICAqLw0KI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4NCmludA0KbWFpbiAoKQ0K ew0KaW50IGFbXSA9IHsgU0hVVF9SRCwgU0hVVF9XUiwgU0hVVF9SRFdSIH07DQogIDsNCiAgcmV0 dXJuIDA7DQp9DQpfQUNFT0YNCmlmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVu IDoNCiAgZ2xfY3ZfaGVhZGVyX3N5c19zb2NrZXRfaF9zaHV0PXllcw0KZWxzZQ0KICBnbF9jdl9o ZWFkZXJfc3lzX3NvY2tldF9oX3NodXQ9bm8NCmZpDQpybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBj b25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQNCg0KZmkNCnsgJGFzX2VjaG8gIiRh c19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkZ2xfY3ZfaGVhZGVyX3N5c19zb2Nr ZXRfaF9zaHV0IiA+JjUNCiRhc19lY2hvICIkZ2xfY3ZfaGVhZGVyX3N5c19zb2NrZXRfaF9zaHV0 IiA+JjY7IH0NCiAgICAgIGlmIHRlc3QgJGdsX2N2X2hlYWRlcl9zeXNfc29ja2V0X2hfc2h1dCA9 IG5vOyB0aGVuDQogICAgICAgIFNZU19TT0NLRVRfSD0nc3lzL3NvY2tldC5oJw0KICAgICAgZmkN CiAgICBmaQ0KICBmaQ0KICAjIFdlIG5lZWQgdG8gY2hlY2sgZm9yIHdzMnRjcGlwLmggbm93Lg0K DQoNCg0KDQoNCg0KDQoNCg0KDQoNCiAgICAgaWYgdGVzdCAkZ2xfY3ZfaGF2ZV9pbmNsdWRlX25l eHQgPSB5ZXM7IHRoZW4NCiAgICAgICBnbF9jdl9uZXh0X3N5c19zb2NrZXRfaD0nPCdzeXMvc29j a2V0LmgnPicNCiAgICAgZWxzZQ0KICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVu by0kTElORU5PfTogY2hlY2tpbmcgYWJzb2x1dGUgbmFtZSBvZiA8c3lzL3NvY2tldC5oPiIgPiY1 DQokYXNfZWNob19uICJjaGVja2luZyBhYnNvbHV0ZSBuYW1lIG9mIDxzeXMvc29ja2V0Lmg+Li4u ICIgPiY2OyB9DQppZiAke2dsX2N2X25leHRfc3lzX3NvY2tldF9oKzp9IGZhbHNlOyB0aGVuIDoN CiAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYNCmVsc2UNCg0KICAgICAgICAgICAgIGlmIHRl c3QgJGFjX2N2X2hlYWRlcl9zeXNfc29ja2V0X2ggPSB5ZXM7IHRoZW4NCg0KDQogICAgICAgICAg ICAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0DQovKiBlbmQg Y29uZmRlZnMuaC4gICovDQojaW5jbHVkZSA8c3lzL3NvY2tldC5oPg0KDQpfQUNFT0YNCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGNhc2UgIiRob3N0X29zIiBpbg0KICAgICAgICAgICAgICAgICBhaXgqKSBnbF9hYnNuYW1lX2Nw cD0iJGFjX2NwcCAtQyIgOzsNCiAgICAgICAgICAgICAgICAgKikgICAgZ2xfYWJzbmFtZV9jcHA9 IiRhY19jcHAiIDs7DQogICAgICAgICAgICAgICBlc2FjDQogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbF9jdl9uZXh0X3N5c19zb2Nr ZXRfaD0nIidgKGV2YWwgIiRnbF9hYnNuYW1lX2NwcCBjb25mdGVzdC4kYWNfZXh0IikgMj4mNSB8 DQogICAgICAgICAgICAgICAgICBzZWQgLW4gJ1wjL3N5cy9zb2NrZXQuaCN7DQogICAgICAgICAg ICAgICAgICAgIHMjLioiXCguKi9zeXMvc29ja2V0LmhcKSIuKiNcMSMNCiAgICAgICAgICAgICAg ICAgICAgcyNeL1teL10jLy8mIw0KICAgICAgICAgICAgICAgICAgICBwDQogICAgICAgICAgICAg ICAgICAgIHENCiAgICAgICAgICAgICAgICAgIH0nYCciJw0KICAgICAgICAgIGVsc2UNCiAgICAg ICAgICAgICAgIGdsX2N2X25leHRfc3lzX3NvY2tldF9oPSc8J3N5cy9zb2NrZXQuaCc+Jw0KICAg ICAgICAgICAgIGZpDQoNCg0KZmkNCnsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElO RU5PfTogcmVzdWx0OiAkZ2xfY3ZfbmV4dF9zeXNfc29ja2V0X2giID4mNQ0KJGFzX2VjaG8gIiRn bF9jdl9uZXh0X3N5c19zb2NrZXRfaCIgPiY2OyB9DQogICAgIGZpDQogICAgIE5FWFRfU1lTX1NP Q0tFVF9IPSRnbF9jdl9uZXh0X3N5c19zb2NrZXRfaA0KDQogICAgIGlmIHRlc3QgJGdsX2N2X2hh dmVfaW5jbHVkZV9uZXh0ID0geWVzIHx8IHRlc3QgJGdsX2N2X2hhdmVfaW5jbHVkZV9uZXh0ID0g YnVnZ3k7IHRoZW4NCiAgICAgICAjIElOQ0xVREVfTkVYVF9BU19GSVJTVF9ESVJFQ1RJVkU9J2lu Y2x1ZGVfbmV4dCcNCiAgICAgICBnbF9uZXh0X2FzX2ZpcnN0X2RpcmVjdGl2ZT0nPCdzeXMvc29j a2V0LmgnPicNCiAgICAgZWxzZQ0KICAgICAgICMgSU5DTFVERV9ORVhUX0FTX0ZJUlNUX0RJUkVD VElWRT0naW5jbHVkZScNCiAgICAgICBnbF9uZXh0X2FzX2ZpcnN0X2RpcmVjdGl2ZT0kZ2xfY3Zf bmV4dF9zeXNfc29ja2V0X2gNCiAgICAgZmkNCiAgICAgTkVYVF9BU19GSVJTVF9ESVJFQ1RJVkVf U1lTX1NPQ0tFVF9IPSRnbF9uZXh0X2FzX2ZpcnN0X2RpcmVjdGl2ZQ0KDQoNCg0KDQogIGlmIHRl c3QgJGFjX2N2X2hlYWRlcl9zeXNfc29ja2V0X2ggPSB5ZXM7IHRoZW4NCiAgICBIQVZFX1NZU19T T0NLRVRfSD0xDQogICAgSEFWRV9XUzJUQ1BJUF9IPTANCiAgZWxzZQ0KICAgIEhBVkVfU1lTX1NP Q0tFVF9IPTANCiAgICBpZiB0ZXN0ICRhY19jdl9oZWFkZXJfd3MydGNwaXBfaCA9IHllczsgdGhl bg0KICAgICAgSEFWRV9XUzJUQ1BJUF9IPTENCiAgICBlbHNlDQogICAgICBIQVZFX1dTMlRDUElQ X0g9MA0KICAgIGZpDQogIGZpDQoNCg0KDQogIGFjX2ZuX2NfY2hlY2tfdHlwZSAiJExJTkVOTyIg InN0cnVjdCBzb2NrYWRkcl9zdG9yYWdlIiAiYWNfY3ZfdHlwZV9zdHJ1Y3Rfc29ja2FkZHJfc3Rv cmFnZSIgIg0KICAvKiBzeXMvdHlwZXMuaCBpcyBub3QgbmVlZGVkIGFjY29yZGluZyB0byBQT1NJ WCwgYnV0IHRoZQ0KICAgICBzeXMvc29ja2V0LmggaW4gaTM4Ni11bmtub3duLWZyZWVic2Q0LjEw IGFuZA0KICAgICBwb3dlcnBjLWFwcGxlLWRhcndpbjUuNSByZXF1aXJlZCBpdC4gKi8NCiNpbmNs dWRlIDxzeXMvdHlwZXMuaD4NCiNpZmRlZiBIQVZFX1NZU19TT0NLRVRfSA0KI2luY2x1ZGUgPHN5 cy9zb2NrZXQuaD4NCiNlbmRpZg0KI2lmZGVmIEhBVkVfV1MyVENQSVBfSA0KI2luY2x1ZGUgPHdz MnRjcGlwLmg+DQojZW5kaWYNCg0KIg0KaWYgdGVzdCAieCRhY19jdl90eXBlX3N0cnVjdF9zb2Nr YWRkcl9zdG9yYWdlIiA9IHh5ZXM7IHRoZW4gOg0KDQpjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9G DQojZGVmaW5lIEhBVkVfU1RSVUNUX1NPQ0tBRERSX1NUT1JBR0UgMQ0KX0FDRU9GDQoNCg0KZmkN CmFjX2ZuX2NfY2hlY2tfdHlwZSAiJExJTkVOTyIgInNhX2ZhbWlseV90IiAiYWNfY3ZfdHlwZV9z YV9mYW1pbHlfdCIgIg0KICAvKiBzeXMvdHlwZXMuaCBpcyBub3QgbmVlZGVkIGFjY29yZGluZyB0 byBQT1NJWCwgYnV0IHRoZQ0KICAgICBzeXMvc29ja2V0LmggaW4gaTM4Ni11bmtub3duLWZyZWVi c2Q0LjEwIGFuZA0KICAgICBwb3dlcnBjLWFwcGxlLWRhcndpbjUuNSByZXF1aXJlZCBpdC4gKi8N CiNpbmNsdWRlIDxzeXMvdHlwZXMuaD4NCiNpZmRlZiBIQVZFX1NZU19TT0NLRVRfSA0KI2luY2x1 ZGUgPHN5cy9zb2NrZXQuaD4NCiNlbmRpZg0KI2lmZGVmIEhBVkVfV1MyVENQSVBfSA0KI2luY2x1 ZGUgPHdzMnRjcGlwLmg+DQojZW5kaWYNCg0KIg0KaWYgdGVzdCAieCRhY19jdl90eXBlX3NhX2Zh bWlseV90IiA9IHh5ZXM7IHRoZW4gOg0KDQpjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GDQojZGVm aW5lIEhBVkVfU0FfRkFNSUxZX1QgMQ0KX0FDRU9GDQoNCg0KZmkNCg0KICBpZiB0ZXN0ICRhY19j dl90eXBlX3N0cnVjdF9zb2NrYWRkcl9zdG9yYWdlID0gbm87IHRoZW4NCiAgICBIQVZFX1NUUlVD VF9TT0NLQUREUl9TVE9SQUdFPTANCiAgZmkNCiAgaWYgdGVzdCAkYWNfY3ZfdHlwZV9zYV9mYW1p bHlfdCA9IG5vOyB0aGVuDQogICAgSEFWRV9TQV9GQU1JTFlfVD0wDQogIGZpDQogIGlmIHRlc3Qg JGFjX2N2X3R5cGVfc3RydWN0X3NvY2thZGRyX3N0b3JhZ2UgIT0gbm87IHRoZW4NCiAgICBhY19m bl9jX2NoZWNrX21lbWJlciAiJExJTkVOTyIgInN0cnVjdCBzb2NrYWRkcl9zdG9yYWdlIiAic3Nf ZmFtaWx5IiAiYWNfY3ZfbWVtYmVyX3N0cnVjdF9zb2NrYWRkcl9zdG9yYWdlX3NzX2ZhbWlseSIg IiNpbmNsdWRlIDxzeXMvdHlwZXMuaD4NCiAgICAgICAjaWZkZWYgSEFWRV9TWVNfU09DS0VUX0gN CiAgICAgICAjaW5jbHVkZSA8c3lzL3NvY2tldC5oPg0KICAgICAgICNlbmRpZg0KICAgICAgICNp ZmRlZiBIQVZFX1dTMlRDUElQX0gNCiAgICAgICAjaW5jbHVkZSA8d3MydGNwaXAuaD4NCiAgICAg ICAjZW5kaWYNCg0KIg0KaWYgdGVzdCAieCRhY19jdl9tZW1iZXJfc3RydWN0X3NvY2thZGRyX3N0 b3JhZ2Vfc3NfZmFtaWx5IiA9IHh5ZXM7IHRoZW4gOg0KDQpjYXQgPj5jb25mZGVmcy5oIDw8X0FD RU9GDQojZGVmaW5lIEhBVkVfU1RSVUNUX1NPQ0tBRERSX1NUT1JBR0VfU1NfRkFNSUxZIDENCl9B Q0VPRg0KDQoNCmVsc2UNCiAgSEFWRV9TVFJVQ1RfU09DS0FERFJfU1RPUkFHRV9TU19GQU1JTFk9 MA0KZmkNCg0KICBmaQ0KICBpZiB0ZXN0ICRIQVZFX1NUUlVDVF9TT0NLQUREUl9TVE9SQUdFID0g MCB8fCB0ZXN0ICRIQVZFX1NBX0ZBTUlMWV9UID0gMCBcDQogICAgIHx8IHRlc3QgJEhBVkVfU1RS VUNUX1NPQ0tBRERSX1NUT1JBR0VfU1NfRkFNSUxZID0gMDsgdGhlbg0KICAgIFNZU19TT0NLRVRf SD0nc3lzL3NvY2tldC5oJw0KICBmaQ0KDQoNCg0KDQogIGlmIHRlc3QgJGFjX2N2X2hlYWRlcl9z eXNfc29ja2V0X2ggIT0geWVzOyB0aGVuDQogICAgICAgICAgICAgICAgICAgIGZvciBhY19oZWFk ZXIgaW4gd2luc29jazIuaA0KZG8gOg0KICBhY19mbl9jX2NoZWNrX2hlYWRlcl9tb25ncmVsICIk TElORU5PIiAid2luc29jazIuaCIgImFjX2N2X2hlYWRlcl93aW5zb2NrMl9oIiAiJGFjX2luY2x1 ZGVzX2RlZmF1bHQiDQppZiB0ZXN0ICJ4JGFjX2N2X2hlYWRlcl93aW5zb2NrMl9oIiA9IHh5ZXM7 IHRoZW4gOg0KICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GDQojZGVmaW5lIEhBVkVfV0lOU09D SzJfSCAxDQpfQUNFT0YNCg0KZmkNCg0KZG9uZQ0KDQogIGZpDQogIGlmIHRlc3QgIiRhY19jdl9o ZWFkZXJfd2luc29jazJfaCIgPSB5ZXM7IHRoZW4NCiAgICBIQVZFX1dJTlNPQ0syX0g9MQ0KICAg IFVOSVNURF9IX0hBVkVfV0lOU09DSzJfSD0xDQogICAgU1lTX0lPQ1RMX0hfSEFWRV9XSU5TT0NL Ml9IPTENCiAgZWxzZQ0KICAgIEhBVkVfV0lOU09DSzJfSD0wDQogIGZpDQoNCg0KDQoNCiAgICBm b3IgZ2xfZnVuYyBpbiBzb2NrZXQgY29ubmVjdCBhY2NlcHQgYmluZCBnZXRwZWVybmFtZSBnZXRz b2NrbmFtZSBnZXRzb2Nrb3B0ICAgICBsaXN0ZW4gcmVjdiBzZW5kIHJlY3Zmcm9tIHNlbmR0byBz ZXRzb2Nrb3B0IHNodXRkb3duIGFjY2VwdDQ7IGRvDQogICAgYXNfZ2xfU3ltYm9sPWAkYXNfZWNo byAiZ2xfY3ZfaGF2ZV9yYXdfZGVjbF8kZ2xfZnVuYyIgfCAkYXNfdHJfc2hgDQogICAgeyAkYXNf ZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyICRnbF9m dW5jIGlzIGRlY2xhcmVkIHdpdGhvdXQgYSBtYWNybyIgPiY1DQokYXNfZWNob19uICJjaGVja2lu ZyB3aGV0aGVyICRnbF9mdW5jIGlzIGRlY2xhcmVkIHdpdGhvdXQgYSBtYWNyby4uLiAiID4mNjsg fQ0KaWYgZXZhbCBcJHskYXNfZ2xfU3ltYm9sKzp9IGZhbHNlOyB0aGVuIDoNCiAgJGFzX2VjaG9f biAiKGNhY2hlZCkgIiA+JjYNCmVsc2UNCiAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29u ZnRlc3QuJGFjX2V4dA0KLyogZW5kIGNvbmZkZWZzLmguICAqLw0KDQovKiBTb21lIHN5c3RlbXMg cmVxdWlyZSBwcmVyZXF1aXNpdGUgaGVhZGVycy4gICovDQojaW5jbHVkZSA8c3lzL3R5cGVzLmg+ DQojaW5jbHVkZSA8c3lzL3NvY2tldC5oPg0KDQppbnQNCm1haW4gKCkNCnsNCiN1bmRlZiAkZ2xf ZnVuYw0KICAodm9pZCkgJGdsX2Z1bmM7DQogIDsNCiAgcmV0dXJuIDA7DQp9DQpfQUNFT0YNCmlm IGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoNCiAgZXZhbCAiJGFzX2dsX1N5 bWJvbD15ZXMiDQplbHNlDQogIGV2YWwgIiRhc19nbF9TeW1ib2w9bm8iDQpmaQ0Kcm0gLWYgY29y ZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0DQpmaQ0K ZXZhbCBhY19yZXM9XCQkYXNfZ2xfU3ltYm9sDQoJICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZTok e2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfcmVzIiA+JjUNCiRhc19lY2hvICIkYWNf cmVzIiA+JjY7IH0NCiAgICAgaWYgZXZhbCB0ZXN0IFwieFwkIiRhc19nbF9TeW1ib2wiXCIgPSB4 InllcyI7IHRoZW4gOg0KICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GDQojZGVmaW5lIGAkYXNf ZWNobyAiSEFWRV9SQVdfREVDTF8kZ2xfZnVuYyIgfCAkYXNfdHJfY3BwYCAxDQpfQUNFT0YNCg0K ICAgICAgICAgICAgICAgICAgICAgZXZhbCBhY19jdl9oYXZlX2RlY2xfJGdsX2Z1bmM9eWVzDQpm aQ0KICAgICAgZG9uZQ0KDQoNCg0KICBHTlVMSUJfR0VUQUREUklORk89MDsNCiAgICBIQVZFX1NU UlVDVF9BRERSSU5GTz0xOw0KICBIQVZFX0RFQ0xfRlJFRUFERFJJTkZPPTE7DQogIEhBVkVfREVD TF9HQUlfU1RSRVJST1I9MTsNCiAgSEFWRV9ERUNMX0dFVEFERFJJTkZPPTE7DQogIEhBVkVfREVD TF9HRVROQU1FSU5GTz0xOw0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCiAgICAgaWYgdGVz dCAkZ2xfY3ZfaGF2ZV9pbmNsdWRlX25leHQgPSB5ZXM7IHRoZW4NCiAgICAgICBnbF9jdl9uZXh0 X25ldGRiX2g9JzwnbmV0ZGIuaCc+Jw0KICAgICBlbHNlDQogICAgICAgeyAkYXNfZWNobyAiJGFz X21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBhYnNvbHV0ZSBuYW1lIG9mIDxuZXRk Yi5oPiIgPiY1DQokYXNfZWNob19uICJjaGVja2luZyBhYnNvbHV0ZSBuYW1lIG9mIDxuZXRkYi5o Pi4uLiAiID4mNjsgfQ0KaWYgJHtnbF9jdl9uZXh0X25ldGRiX2grOn0gZmFsc2U7IHRoZW4gOg0K ICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNg0KZWxzZQ0KDQogICAgICAgICAgICAgaWYgdGVz dCAkYWNfY3ZfaGVhZGVyX25ldGRiX2ggPSB5ZXM7IHRoZW4NCg0KDQogICAgICAgICAgICAgICBj YXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0DQovKiBlbmQgY29uZmRl ZnMuaC4gICovDQojaW5jbHVkZSA8bmV0ZGIuaD4NCg0KX0FDRU9GDQogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICIkaG9z dF9vcyIgaW4NCiAgICAgICAgICAgICAgICAgYWl4KikgZ2xfYWJzbmFtZV9jcHA9IiRhY19jcHAg LUMiIDs7DQogICAgICAgICAgICAgICAgICopICAgIGdsX2Fic25hbWVfY3BwPSIkYWNfY3BwIiA7 Ow0KICAgICAgICAgICAgICAgZXNhYw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2xfY3ZfbmV4dF9uZXRkYl9oPSciJ2AoZXZhbCAi JGdsX2Fic25hbWVfY3BwIGNvbmZ0ZXN0LiRhY19leHQiKSAyPiY1IHwNCiAgICAgICAgICAgICAg ICAgIHNlZCAtbiAnXCMvbmV0ZGIuaCN7DQogICAgICAgICAgICAgICAgICAgIHMjLioiXCguKi9u ZXRkYi5oXCkiLiojXDEjDQogICAgICAgICAgICAgICAgICAgIHMjXi9bXi9dIy8vJiMNCiAgICAg ICAgICAgICAgICAgICAgcA0KICAgICAgICAgICAgICAgICAgICBxDQogICAgICAgICAgICAgICAg ICB9J2AnIicNCiAgICAgICAgICBlbHNlDQogICAgICAgICAgICAgICBnbF9jdl9uZXh0X25ldGRi X2g9JzwnbmV0ZGIuaCc+Jw0KICAgICAgICAgICAgIGZpDQoNCg0KZmkNCnsgJGFzX2VjaG8gIiRh c19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkZ2xfY3ZfbmV4dF9uZXRkYl9oIiA+ JjUNCiRhc19lY2hvICIkZ2xfY3ZfbmV4dF9uZXRkYl9oIiA+JjY7IH0NCiAgICAgZmkNCiAgICAg TkVYVF9ORVREQl9IPSRnbF9jdl9uZXh0X25ldGRiX2gNCg0KICAgICBpZiB0ZXN0ICRnbF9jdl9o YXZlX2luY2x1ZGVfbmV4dCA9IHllcyB8fCB0ZXN0ICRnbF9jdl9oYXZlX2luY2x1ZGVfbmV4dCA9 IGJ1Z2d5OyB0aGVuDQogICAgICAgIyBJTkNMVURFX05FWFRfQVNfRklSU1RfRElSRUNUSVZFPSdp bmNsdWRlX25leHQnDQogICAgICAgZ2xfbmV4dF9hc19maXJzdF9kaXJlY3RpdmU9JzwnbmV0ZGIu aCc+Jw0KICAgICBlbHNlDQogICAgICAgIyBJTkNMVURFX05FWFRfQVNfRklSU1RfRElSRUNUSVZF PSdpbmNsdWRlJw0KICAgICAgIGdsX25leHRfYXNfZmlyc3RfZGlyZWN0aXZlPSRnbF9jdl9uZXh0 X25ldGRiX2gNCiAgICAgZmkNCiAgICAgTkVYVF9BU19GSVJTVF9ESVJFQ1RJVkVfTkVUREJfSD0k Z2xfbmV4dF9hc19maXJzdF9kaXJlY3RpdmUNCg0KDQoNCg0KICBpZiB0ZXN0ICRhY19jdl9oZWFk ZXJfbmV0ZGJfaCA9IHllczsgdGhlbg0KICAgIEhBVkVfTkVUREJfSD0xDQogIGVsc2UNCiAgICBI QVZFX05FVERCX0g9MA0KICBmaQ0KDQoNCg0KICAgIGZvciBnbF9mdW5jIGluIGdldGFkZHJpbmZv IGZyZWVhZGRyaW5mbyBnYWlfc3RyZXJyb3IgZ2V0bmFtZWluZm87IGRvDQogICAgYXNfZ2xfU3lt Ym9sPWAkYXNfZWNobyAiZ2xfY3ZfaGF2ZV9yYXdfZGVjbF8kZ2xfZnVuYyIgfCAkYXNfdHJfc2hg DQogICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3 aGV0aGVyICRnbF9mdW5jIGlzIGRlY2xhcmVkIHdpdGhvdXQgYSBtYWNybyIgPiY1DQokYXNfZWNo b19uICJjaGVja2luZyB3aGV0aGVyICRnbF9mdW5jIGlzIGRlY2xhcmVkIHdpdGhvdXQgYSBtYWNy by4uLiAiID4mNjsgfQ0KaWYgZXZhbCBcJHskYXNfZ2xfU3ltYm9sKzp9IGZhbHNlOyB0aGVuIDoN CiAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYNCmVsc2UNCiAgY2F0IGNvbmZkZWZzLmggLSA8 PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dA0KLyogZW5kIGNvbmZkZWZzLmguICAqLw0KI2luY2x1 ZGUgPG5ldGRiLmg+DQppbnQNCm1haW4gKCkNCnsNCiN1bmRlZiAkZ2xfZnVuYw0KICAodm9pZCkg JGdsX2Z1bmM7DQogIDsNCiAgcmV0dXJuIDA7DQp9DQpfQUNFT0YNCmlmIGFjX2ZuX2NfdHJ5X2Nv bXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoNCiAgZXZhbCAiJGFzX2dsX1N5bWJvbD15ZXMiDQplbHNl DQogIGV2YWwgIiRhc19nbF9TeW1ib2w9bm8iDQpmaQ0Kcm0gLWYgY29yZSBjb25mdGVzdC5lcnIg Y29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0DQpmaQ0KZXZhbCBhY19yZXM9XCQk YXNfZ2xfU3ltYm9sDQoJICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElO RU5PfTogcmVzdWx0OiAkYWNfcmVzIiA+JjUNCiRhc19lY2hvICIkYWNfcmVzIiA+JjY7IH0NCiAg ICAgaWYgZXZhbCB0ZXN0IFwieFwkIiRhc19nbF9TeW1ib2wiXCIgPSB4InllcyI7IHRoZW4gOg0K ICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GDQojZGVmaW5lIGAkYXNfZWNobyAiSEFWRV9SQVdf REVDTF8kZ2xfZnVuYyIgfCAkYXNfdHJfY3BwYCAxDQpfQUNFT0YNCg0KICAgICAgICAgICAgICAg ICAgICAgZXZhbCBhY19jdl9oYXZlX2RlY2xfJGdsX2Z1bmM9eWVzDQpmaQ0KICAgICAgZG9uZQ0K DQoNCg0KICAgICAgICAgICAgICAgICAgSE9TVEVOVF9MSUI9DQogIGdsX3NhdmVkX2xpYnM9IiRM SUJTIg0KICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5n IGZvciBsaWJyYXJ5IGNvbnRhaW5pbmcgZ2V0aG9zdGJ5bmFtZSIgPiY1DQokYXNfZWNob19uICJj aGVja2luZyBmb3IgbGlicmFyeSBjb250YWluaW5nIGdldGhvc3RieW5hbWUuLi4gIiA+JjY7IH0N CmlmICR7YWNfY3Zfc2VhcmNoX2dldGhvc3RieW5hbWUrOn0gZmFsc2U7IHRoZW4gOg0KICAkYXNf ZWNob19uICIoY2FjaGVkKSAiID4mNg0KZWxzZQ0KICBhY19mdW5jX3NlYXJjaF9zYXZlX0xJQlM9 JExJQlMNCmNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQNCi8qIGVu ZCBjb25mZGVmcy5oLiAgKi8NCg0KLyogT3ZlcnJpZGUgYW55IEdDQyBpbnRlcm5hbCBwcm90b3R5 cGUgdG8gYXZvaWQgYW4gZXJyb3IuDQogICBVc2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRj aCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBHQ0MNCiAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3Vt ZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovDQojaWZkZWYgX19jcGx1c3BsdXMN CmV4dGVybiAiQyINCiNlbmRpZg0KY2hhciBnZXRob3N0YnluYW1lICgpOw0KaW50DQptYWluICgp DQp7DQpyZXR1cm4gZ2V0aG9zdGJ5bmFtZSAoKTsNCiAgOw0KICByZXR1cm4gMDsNCn0NCl9BQ0VP Rg0KZm9yIGFjX2xpYiBpbiAnJyBuc2wgbmV0d29yayBuZXQ7IGRvDQogIGlmIHRlc3QgLXogIiRh Y19saWIiOyB0aGVuDQogICAgYWNfcmVzPSJub25lIHJlcXVpcmVkIg0KICBlbHNlDQogICAgYWNf cmVzPS1sJGFjX2xpYg0KICAgIExJQlM9Ii1sJGFjX2xpYiAgJGFjX2Z1bmNfc2VhcmNoX3NhdmVf TElCUyINCiAgZmkNCiAgaWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOg0KICBh Y19jdl9zZWFyY2hfZ2V0aG9zdGJ5bmFtZT0kYWNfcmVzDQpmaQ0Kcm0gLWYgY29yZSBjb25mdGVz dC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcDQogICAgY29uZnRlc3QkYWNfZXhlZXh0DQogIGlm ICR7YWNfY3Zfc2VhcmNoX2dldGhvc3RieW5hbWUrOn0gZmFsc2U7IHRoZW4gOg0KICBicmVhaw0K ZmkNCmRvbmUNCmlmICR7YWNfY3Zfc2VhcmNoX2dldGhvc3RieW5hbWUrOn0gZmFsc2U7IHRoZW4g Og0KDQplbHNlDQogIGFjX2N2X3NlYXJjaF9nZXRob3N0YnluYW1lPW5vDQpmaQ0Kcm0gY29uZnRl c3QuJGFjX2V4dA0KTElCUz0kYWNfZnVuY19zZWFyY2hfc2F2ZV9MSUJTDQpmaQ0KeyAkYXNfZWNo byAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9zZWFyY2hfZ2V0 aG9zdGJ5bmFtZSIgPiY1DQokYXNfZWNobyAiJGFjX2N2X3NlYXJjaF9nZXRob3N0YnluYW1lIiA+ JjY7IH0NCmFjX3Jlcz0kYWNfY3Zfc2VhcmNoX2dldGhvc3RieW5hbWUNCmlmIHRlc3QgIiRhY19y ZXMiICE9IG5vOyB0aGVuIDoNCiAgdGVzdCAiJGFjX3JlcyIgPSAibm9uZSByZXF1aXJlZCIgfHwg TElCUz0iJGFjX3JlcyAkTElCUyINCiAgaWYgdGVzdCAiJGFjX2N2X3NlYXJjaF9nZXRob3N0Ynlu YW1lIiAhPSAibm9uZSByZXF1aXJlZCI7IHRoZW4NCiAgICAgICBIT1NURU5UX0xJQj0iJGFjX2N2 X3NlYXJjaF9nZXRob3N0YnluYW1lIg0KICAgICBmaQ0KZmkNCg0KICBMSUJTPSIkZ2xfc2F2ZWRf bGlicyINCiAgaWYgdGVzdCAteiAiJEhPU1RFTlRfTElCIjsgdGhlbg0KICAgIGZvciBhY19mdW5j IGluIGdldGhvc3RieW5hbWUNCmRvIDoNCiAgYWNfZm5fY19jaGVja19mdW5jICIkTElORU5PIiAi Z2V0aG9zdGJ5bmFtZSIgImFjX2N2X2Z1bmNfZ2V0aG9zdGJ5bmFtZSINCmlmIHRlc3QgIngkYWNf Y3ZfZnVuY19nZXRob3N0YnluYW1lIiA9IHh5ZXM7IHRoZW4gOg0KICBjYXQgPj5jb25mZGVmcy5o IDw8X0FDRU9GDQojZGVmaW5lIEhBVkVfR0VUSE9TVEJZTkFNRSAxDQpfQUNFT0YNCg0KZWxzZQ0K DQogICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5n IGZvciBnZXRob3N0YnluYW1lIGluIHdpbnNvY2syLmggYW5kIC1sd3MyXzMyIiA+JjUNCiRhc19l Y2hvX24gImNoZWNraW5nIGZvciBnZXRob3N0YnluYW1lIGluIHdpbnNvY2syLmggYW5kIC1sd3My XzMyLi4uICIgPiY2OyB9DQppZiAke2dsX2N2X3czMl9nZXRob3N0YnluYW1lKzp9IGZhbHNlOyB0 aGVuIDoNCiAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYNCmVsc2UNCiAgZ2xfY3ZfdzMyX2dl dGhvc3RieW5hbWU9bm8NCiAgICAgICAgIGdsX3NhdmVfTElCUz0iJExJQlMiDQogICAgICAgICBM SUJTPSIkTElCUyAtbHdzMl8zMiINCiAgICAgICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0Yg PmNvbmZ0ZXN0LiRhY19leHQNCi8qIGVuZCBjb25mZGVmcy5oLiAgKi8NCg0KI2lmZGVmIEhBVkVf V0lOU09DSzJfSA0KI2luY2x1ZGUgPHdpbnNvY2syLmg+DQojZW5kaWYNCiNpbmNsdWRlIDxzdGRk ZWYuaD4NCg0KaW50DQptYWluICgpDQp7DQpnZXRob3N0YnluYW1lKE5VTEwpOw0KICA7DQogIHJl dHVybiAwOw0KfQ0KX0FDRU9GDQppZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6 DQogIGdsX2N2X3czMl9nZXRob3N0YnluYW1lPXllcw0KZmkNCnJtIC1mIGNvcmUgY29uZnRlc3Qu ZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXA0KICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVz dC4kYWNfZXh0DQogICAgICAgICBMSUJTPSIkZ2xfc2F2ZV9MSUJTIg0KDQpmaQ0KeyAkYXNfZWNo byAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRnbF9jdl93MzJfZ2V0aG9z dGJ5bmFtZSIgPiY1DQokYXNfZWNobyAiJGdsX2N2X3czMl9nZXRob3N0YnluYW1lIiA+JjY7IH0N CiAgICAgIGlmIHRlc3QgIiRnbF9jdl93MzJfZ2V0aG9zdGJ5bmFtZSIgPSAieWVzIjsgdGhlbg0K ICAgICAgICBIT1NURU5UX0xJQj0iLWx3czJfMzIiDQogICAgICBmaQ0KDQpmaQ0KZG9uZQ0KDQog IGZpDQoNCg0KDQogICAgICAgICAgICAgICAgICAgICAgU0VSVkVOVF9MSUI9DQogIGdsX3NhdmVk X2xpYnM9IiRMSUJTIg0KICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306 IGNoZWNraW5nIGZvciBsaWJyYXJ5IGNvbnRhaW5pbmcgZ2V0c2VydmJ5bmFtZSIgPiY1DQokYXNf ZWNob19uICJjaGVja2luZyBmb3IgbGlicmFyeSBjb250YWluaW5nIGdldHNlcnZieW5hbWUuLi4g IiA+JjY7IH0NCmlmICR7YWNfY3Zfc2VhcmNoX2dldHNlcnZieW5hbWUrOn0gZmFsc2U7IHRoZW4g Og0KICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNg0KZWxzZQ0KICBhY19mdW5jX3NlYXJjaF9z YXZlX0xJQlM9JExJQlMNCmNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19l eHQNCi8qIGVuZCBjb25mZGVmcy5oLiAgKi8NCg0KLyogT3ZlcnJpZGUgYW55IEdDQyBpbnRlcm5h bCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuDQogICBVc2UgY2hhciBiZWNhdXNlIGludCBt aWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBHQ0MNCiAgIGJ1aWx0aW4gYW5kIHRoZW4g aXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovDQojaWZkZWYgX19j cGx1c3BsdXMNCmV4dGVybiAiQyINCiNlbmRpZg0KY2hhciBnZXRzZXJ2YnluYW1lICgpOw0KaW50 DQptYWluICgpDQp7DQpyZXR1cm4gZ2V0c2VydmJ5bmFtZSAoKTsNCiAgOw0KICByZXR1cm4gMDsN Cn0NCl9BQ0VPRg0KZm9yIGFjX2xpYiBpbiAnJyBzb2NrZXQgbmV0d29yayBuZXQ7IGRvDQogIGlm IHRlc3QgLXogIiRhY19saWIiOyB0aGVuDQogICAgYWNfcmVzPSJub25lIHJlcXVpcmVkIg0KICBl bHNlDQogICAgYWNfcmVzPS1sJGFjX2xpYg0KICAgIExJQlM9Ii1sJGFjX2xpYiAgJGFjX2Z1bmNf c2VhcmNoX3NhdmVfTElCUyINCiAgZmkNCiAgaWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7 IHRoZW4gOg0KICBhY19jdl9zZWFyY2hfZ2V0c2VydmJ5bmFtZT0kYWNfcmVzDQpmaQ0Kcm0gLWYg Y29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcDQogICAgY29uZnRlc3QkYWNf ZXhlZXh0DQogIGlmICR7YWNfY3Zfc2VhcmNoX2dldHNlcnZieW5hbWUrOn0gZmFsc2U7IHRoZW4g Og0KICBicmVhaw0KZmkNCmRvbmUNCmlmICR7YWNfY3Zfc2VhcmNoX2dldHNlcnZieW5hbWUrOn0g ZmFsc2U7IHRoZW4gOg0KDQplbHNlDQogIGFjX2N2X3NlYXJjaF9nZXRzZXJ2YnluYW1lPW5vDQpm aQ0Kcm0gY29uZnRlc3QuJGFjX2V4dA0KTElCUz0kYWNfZnVuY19zZWFyY2hfc2F2ZV9MSUJTDQpm aQ0KeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19j dl9zZWFyY2hfZ2V0c2VydmJ5bmFtZSIgPiY1DQokYXNfZWNobyAiJGFjX2N2X3NlYXJjaF9nZXRz ZXJ2YnluYW1lIiA+JjY7IH0NCmFjX3Jlcz0kYWNfY3Zfc2VhcmNoX2dldHNlcnZieW5hbWUNCmlm IHRlc3QgIiRhY19yZXMiICE9IG5vOyB0aGVuIDoNCiAgdGVzdCAiJGFjX3JlcyIgPSAibm9uZSBy ZXF1aXJlZCIgfHwgTElCUz0iJGFjX3JlcyAkTElCUyINCiAgaWYgdGVzdCAiJGFjX2N2X3NlYXJj aF9nZXRzZXJ2YnluYW1lIiAhPSAibm9uZSByZXF1aXJlZCI7IHRoZW4NCiAgICAgICBTRVJWRU5U X0xJQj0iJGFjX2N2X3NlYXJjaF9nZXRzZXJ2YnluYW1lIg0KICAgICBmaQ0KZmkNCg0KICBMSUJT PSIkZ2xfc2F2ZWRfbGlicyINCiAgaWYgdGVzdCAteiAiJFNFUlZFTlRfTElCIjsgdGhlbg0KICAg IGZvciBhY19mdW5jIGluIGdldHNlcnZieW5hbWUNCmRvIDoNCiAgYWNfZm5fY19jaGVja19mdW5j ICIkTElORU5PIiAiZ2V0c2VydmJ5bmFtZSIgImFjX2N2X2Z1bmNfZ2V0c2VydmJ5bmFtZSINCmlm IHRlc3QgIngkYWNfY3ZfZnVuY19nZXRzZXJ2YnluYW1lIiA9IHh5ZXM7IHRoZW4gOg0KICBjYXQg Pj5jb25mZGVmcy5oIDw8X0FDRU9GDQojZGVmaW5lIEhBVkVfR0VUU0VSVkJZTkFNRSAxDQpfQUNF T0YNCg0KZWxzZQ0KDQogICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVO T306IGNoZWNraW5nIGZvciBnZXRzZXJ2YnluYW1lIGluIHdpbnNvY2syLmggYW5kIC1sd3MyXzMy IiA+JjUNCiRhc19lY2hvX24gImNoZWNraW5nIGZvciBnZXRzZXJ2YnluYW1lIGluIHdpbnNvY2sy LmggYW5kIC1sd3MyXzMyLi4uICIgPiY2OyB9DQppZiAke2dsX2N2X3czMl9nZXRzZXJ2YnluYW1l Kzp9IGZhbHNlOyB0aGVuIDoNCiAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYNCmVsc2UNCiAg Z2xfY3ZfdzMyX2dldHNlcnZieW5hbWU9bm8NCiAgICAgICAgIGdsX3NhdmVfTElCUz0iJExJQlMi DQogICAgICAgICBMSUJTPSIkTElCUyAtbHdzMl8zMiINCiAgICAgICAgIGNhdCBjb25mZGVmcy5o IC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQNCi8qIGVuZCBjb25mZGVmcy5oLiAgKi8NCg0K I2lmZGVmIEhBVkVfV0lOU09DSzJfSA0KI2luY2x1ZGUgPHdpbnNvY2syLmg+DQojZW5kaWYNCiNp bmNsdWRlIDxzdGRkZWYuaD4NCg0KaW50DQptYWluICgpDQp7DQpnZXRzZXJ2YnluYW1lKE5VTEws TlVMTCk7DQogIDsNCiAgcmV0dXJuIDA7DQp9DQpfQUNFT0YNCmlmIGFjX2ZuX2NfdHJ5X2xpbmsg IiRMSU5FTk8iOyB0aGVuIDoNCiAgZ2xfY3ZfdzMyX2dldHNlcnZieW5hbWU9eWVzDQpmaQ0Kcm0g LWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcDQogICAgY29uZnRlc3Qk YWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQNCiAgICAgICAgIExJQlM9IiRnbF9zYXZlX0xJQlMi DQoNCmZpDQp7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDog JGdsX2N2X3czMl9nZXRzZXJ2YnluYW1lIiA+JjUNCiRhc19lY2hvICIkZ2xfY3ZfdzMyX2dldHNl cnZieW5hbWUiID4mNjsgfQ0KICAgICAgaWYgdGVzdCAiJGdsX2N2X3czMl9nZXRzZXJ2YnluYW1l IiA9ICJ5ZXMiOyB0aGVuDQogICAgICAgIFNFUlZFTlRfTElCPSItbHdzMl8zMiINCiAgICAgIGZp DQoNCmZpDQpkb25lDQoNCiAgZmkNCg0KDQoNCg0KDQoNCg0KDQogIHsgJGFzX2VjaG8gIiRhc19t ZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIElQdjQgc29ja2V0cyIgPiY1DQok YXNfZWNob19uICJjaGVja2luZyBmb3IgSVB2NCBzb2NrZXRzLi4uICIgPiY2OyB9DQogIGlmICR7 Z2xfY3Zfc29ja2V0X2lwdjQrOn0gZmFsc2U7IHRoZW4gOg0KICAkYXNfZWNob19uICIoY2FjaGVk KSAiID4mNg0KZWxzZQ0KICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNf ZXh0DQovKiBlbmQgY29uZmRlZnMuaC4gICovDQojaW5jbHVkZSA8c3lzL3R5cGVzLmg+DQojaWZk ZWYgSEFWRV9TWVNfU09DS0VUX0gNCiNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+DQojZW5kaWYNCiNp ZmRlZiBIQVZFX05FVElORVRfSU5fSA0KI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4NCiNlbmRpZg0K I2lmZGVmIEhBVkVfV0lOU09DSzJfSA0KI2luY2x1ZGUgPHdpbnNvY2syLmg+DQojZW5kaWYNCmlu dA0KbWFpbiAoKQ0Kew0KaW50IHggPSBBRl9JTkVUOyBzdHJ1Y3QgaW5fYWRkciB5OyBzdHJ1Y3Qg c29ja2FkZHJfaW4gejsNCiBpZiAoJnggJiYgJnkgJiYgJnopIHJldHVybiAwOw0KICA7DQogIHJl dHVybiAwOw0KfQ0KX0FDRU9GDQppZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhl biA6DQogIGdsX2N2X3NvY2tldF9pcHY0PXllcw0KZWxzZQ0KICBnbF9jdl9zb2NrZXRfaXB2ND1u bw0KZmkNCnJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRl c3QuJGFjX2V4dA0KZmkNCg0KICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVO T306IHJlc3VsdDogJGdsX2N2X3NvY2tldF9pcHY0IiA+JjUNCiRhc19lY2hvICIkZ2xfY3Zfc29j a2V0X2lwdjQiID4mNjsgfQ0KICBpZiB0ZXN0ICRnbF9jdl9zb2NrZXRfaXB2NCA9IHllczsgdGhl bg0KDQokYXNfZWNobyAiI2RlZmluZSBIQVZFX0lQVjQgMSIgPj5jb25mZGVmcy5oDQoNCiAgZmkN Cg0KICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZv ciBJUHY2IHNvY2tldHMiID4mNQ0KJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIElQdjYgc29ja2V0 cy4uLiAiID4mNjsgfQ0KICBpZiAke2dsX2N2X3NvY2tldF9pcHY2Kzp9IGZhbHNlOyB0aGVuIDoN CiAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYNCmVsc2UNCiAgY2F0IGNvbmZkZWZzLmggLSA8 PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dA0KLyogZW5kIGNvbmZkZWZzLmguICAqLw0KI2luY2x1 ZGUgPHN5cy90eXBlcy5oPg0KI2lmZGVmIEhBVkVfU1lTX1NPQ0tFVF9IDQojaW5jbHVkZSA8c3lz L3NvY2tldC5oPg0KI2VuZGlmDQojaWZkZWYgSEFWRV9ORVRJTkVUX0lOX0gNCiNpbmNsdWRlIDxu ZXRpbmV0L2luLmg+DQojZW5kaWYNCiNpZmRlZiBIQVZFX1dJTlNPQ0syX0gNCiNpbmNsdWRlIDx3 aW5zb2NrMi5oPg0KI2VuZGlmDQojaWZkZWYgSEFWRV9XUzJUQ1BJUF9IDQojaW5jbHVkZSA8d3My dGNwaXAuaD4NCiNlbmRpZg0KaW50DQptYWluICgpDQp7DQppbnQgeCA9IEFGX0lORVQ2OyBzdHJ1 Y3QgaW42X2FkZHIgeTsgc3RydWN0IHNvY2thZGRyX2luNiB6Ow0KIGlmICgmeCAmJiAmeSAmJiAm eikgcmV0dXJuIDA7DQogIDsNCiAgcmV0dXJuIDA7DQp9DQpfQUNFT0YNCmlmIGFjX2ZuX2NfdHJ5 X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoNCiAgZ2xfY3Zfc29ja2V0X2lwdjY9eWVzDQplbHNl DQogIGdsX2N2X3NvY2tldF9pcHY2PW5vDQpmaQ0Kcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29u ZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0DQpmaQ0KDQogIHsgJGFzX2VjaG8gIiRh c19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkZ2xfY3Zfc29ja2V0X2lwdjYiID4m NQ0KJGFzX2VjaG8gIiRnbF9jdl9zb2NrZXRfaXB2NiIgPiY2OyB9DQogIGlmIHRlc3QgJGdsX2N2 X3NvY2tldF9pcHY2ID0geWVzOyB0aGVuDQoNCiRhc19lY2hvICIjZGVmaW5lIEhBVkVfSVBWNiAx IiA+PmNvbmZkZWZzLmgNCg0KICBmaQ0KDQoNCg0KDQoNCiAgICA6DQoNCg0KICAgICAgZ2xfc2F2 ZV9MSUJTPSRMSUJTDQogIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTog Y2hlY2tpbmcgZm9yIGxpYnJhcnkgY29udGFpbmluZyBpbmV0X250b3AiID4mNQ0KJGFzX2VjaG9f biAiY2hlY2tpbmcgZm9yIGxpYnJhcnkgY29udGFpbmluZyBpbmV0X250b3AuLi4gIiA+JjY7IH0N CmlmICR7YWNfY3Zfc2VhcmNoX2luZXRfbnRvcCs6fSBmYWxzZTsgdGhlbiA6DQogICRhc19lY2hv X24gIihjYWNoZWQpICIgPiY2DQplbHNlDQogIGFjX2Z1bmNfc2VhcmNoX3NhdmVfTElCUz0kTElC Uw0KY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dA0KLyogZW5kIGNv bmZkZWZzLmguICAqLw0KDQovKiBPdmVycmlkZSBhbnkgR0NDIGludGVybmFsIHByb3RvdHlwZSB0 byBhdm9pZCBhbiBlcnJvci4NCiAgIFVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRo ZSByZXR1cm4gdHlwZSBvZiBhIEdDQw0KICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQg cHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8NCiNpZmRlZiBfX2NwbHVzcGx1cw0KZXh0 ZXJuICJDIg0KI2VuZGlmDQpjaGFyIGluZXRfbnRvcCAoKTsNCmludA0KbWFpbiAoKQ0Kew0KcmV0 dXJuIGluZXRfbnRvcCAoKTsNCiAgOw0KICByZXR1cm4gMDsNCn0NCl9BQ0VPRg0KZm9yIGFjX2xp YiBpbiAnJyBuc2w7IGRvDQogIGlmIHRlc3QgLXogIiRhY19saWIiOyB0aGVuDQogICAgYWNfcmVz PSJub25lIHJlcXVpcmVkIg0KICBlbHNlDQogICAgYWNfcmVzPS1sJGFjX2xpYg0KICAgIExJQlM9 Ii1sJGFjX2xpYiAgJGFjX2Z1bmNfc2VhcmNoX3NhdmVfTElCUyINCiAgZmkNCiAgaWYgYWNfZm5f Y190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOg0KICBhY19jdl9zZWFyY2hfaW5ldF9udG9wPSRh Y19yZXMNCmZpDQpybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwN CiAgICBjb25mdGVzdCRhY19leGVleHQNCiAgaWYgJHthY19jdl9zZWFyY2hfaW5ldF9udG9wKzp9 IGZhbHNlOyB0aGVuIDoNCiAgYnJlYWsNCmZpDQpkb25lDQppZiAke2FjX2N2X3NlYXJjaF9pbmV0 X250b3ArOn0gZmFsc2U7IHRoZW4gOg0KDQplbHNlDQogIGFjX2N2X3NlYXJjaF9pbmV0X250b3A9 bm8NCmZpDQpybSBjb25mdGVzdC4kYWNfZXh0DQpMSUJTPSRhY19mdW5jX3NlYXJjaF9zYXZlX0xJ QlMNCmZpDQp7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDog JGFjX2N2X3NlYXJjaF9pbmV0X250b3AiID4mNQ0KJGFzX2VjaG8gIiRhY19jdl9zZWFyY2hfaW5l dF9udG9wIiA+JjY7IH0NCmFjX3Jlcz0kYWNfY3Zfc2VhcmNoX2luZXRfbnRvcA0KaWYgdGVzdCAi JGFjX3JlcyIgIT0gbm87IHRoZW4gOg0KICB0ZXN0ICIkYWNfcmVzIiA9ICJub25lIHJlcXVpcmVk IiB8fCBMSUJTPSIkYWNfcmVzICRMSUJTIg0KDQplbHNlDQoNCg0KDQoNCg0KDQoNCg0KICBmb3Ig YWNfZnVuYyBpbiBpbmV0X250b3ANCmRvIDoNCiAgYWNfZm5fY19jaGVja19mdW5jICIkTElORU5P IiAiaW5ldF9udG9wIiAiYWNfY3ZfZnVuY19pbmV0X250b3AiDQppZiB0ZXN0ICJ4JGFjX2N2X2Z1 bmNfaW5ldF9udG9wIiA9IHh5ZXM7IHRoZW4gOg0KICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9G DQojZGVmaW5lIEhBVkVfSU5FVF9OVE9QIDENCl9BQ0VPRg0KDQplbHNlDQoNCiAgICBnbF9MSUJP QkpTPSIkZ2xfTElCT0JKUyAkYWNfZnVuYy4kYWNfb2JqZXh0Ig0KDQpmaQ0KZG9uZQ0KDQoNCmZp DQoNCiAgTElCUz0kZ2xfc2F2ZV9MSUJTDQogIElORVRfTlRPUF9MSUI9DQogIGlmIHRlc3QgIiRh Y19jdl9zZWFyY2hfaW5ldF9udG9wIiAhPSAibm8iICYmDQogICAgIHRlc3QgIiRhY19jdl9zZWFy Y2hfaW5ldF9udG9wIiAhPSAibm9uZSByZXF1aXJlZCI7IHRoZW4NCiAgICBJTkVUX05UT1BfTElC PSIkYWNfY3Zfc2VhcmNoX2luZXRfbnRvcCINCiAgZmkNCg0KDQoNCg0KICBhY19mbl9jX2NoZWNr X2RlY2wgIiRMSU5FTk8iICJpbmV0X250b3AiICJhY19jdl9oYXZlX2RlY2xfaW5ldF9udG9wIiAi I2luY2x1ZGUgPGFycGEvaW5ldC5oPg0KICAgICAjaWYgSEFWRV9ORVREQl9IDQogICAgICMgaW5j bHVkZSA8bmV0ZGIuaD4NCiAgICAgI2VuZGlmDQoNCiINCmlmIHRlc3QgIngkYWNfY3ZfaGF2ZV9k ZWNsX2luZXRfbnRvcCIgPSB4eWVzOyB0aGVuIDoNCiAgYWNfaGF2ZV9kZWNsPTENCmVsc2UNCiAg YWNfaGF2ZV9kZWNsPTANCmZpDQoNCmNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YNCiNkZWZpbmUg SEFWRV9ERUNMX0lORVRfTlRPUCAkYWNfaGF2ZV9kZWNsDQpfQUNFT0YNCg0KICBpZiB0ZXN0ICRh Y19jdl9oYXZlX2RlY2xfaW5ldF9udG9wID0gbm87IHRoZW4NCiAgICBIQVZFX0RFQ0xfSU5FVF9O VE9QPTANCiAgZmkNCg0KDQoNCg0KDQogICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8t JExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgZ2V0Y3dkIChOVUxMLCAwKSBhbGxvY2F0ZXMgbWVt b3J5IGZvciByZXN1bHQiID4mNQ0KJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciBnZXRjd2Qg KE5VTEwsIDApIGFsbG9jYXRlcyBtZW1vcnkgZm9yIHJlc3VsdC4uLiAiID4mNjsgfQ0KaWYgJHtn bF9jdl9mdW5jX2dldGN3ZF9udWxsKzp9IGZhbHNlOyB0aGVuIDoNCiAgJGFzX2VjaG9fbiAiKGNh Y2hlZCkgIiA+JjYNCmVsc2UNCiAgaWYgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgPSB5ZXM7IHRo ZW4gOg0KDQogICAgICAgY2FzZSAiJGhvc3Rfb3MiIGluDQogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIyBHdWVzcyB5ZXMgb24gZ2xpYmMgc3lzdGVtcy4NCiAgICAgICAgICotZ251Kikg ICAgICAgICAgICAgICBnbF9jdl9mdW5jX2dldGN3ZF9udWxsPSJndWVzc2luZyB5ZXMiOzsNCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIEd1ZXNzIHllcyBvbiBDeWd3aW4uDQogICAg ICAgICBjeWd3aW4qKSAgICAgICAgICAgICAgZ2xfY3ZfZnVuY19nZXRjd2RfbnVsbD0iZ3Vlc3Np bmcgeWVzIjs7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBHdWVzcyB5ZXMgb24g bWluZ3cuDQogICAgICAgICBtaW5ndyopICAgICAgICAgICAgICAgZ2xfY3ZfZnVuY19nZXRjd2Rf bnVsbD0iZ3Vlc3NpbmcgeWVzIjs7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBJ ZiB3ZSBkb24ndCBrbm93LCBhc3N1bWUgdGhlIHdvcnN0Lg0KICAgICAgICAgKikgICAgICAgICAg ICAgICAgICAgIGdsX2N2X2Z1bmNfZ2V0Y3dkX251bGw9Imd1ZXNzaW5nIG5vIjs7DQogICAgICAg ZXNhYw0KDQplbHNlDQogIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19l eHQNCi8qIGVuZCBjb25mZGVmcy5oLiAgKi8NCg0KIyAgICAgICAgaW5jbHVkZSA8dW5pc3RkLmg+ DQojICAgICAgICBpZm5kZWYgZ2V0Y3dkDQogICAgICAgICBjaGFyICpnZXRjd2QgKCk7DQojICAg ICAgICBlbmRpZg0KDQppbnQNCm1haW4gKCkNCnsNCg0KI2lmIChkZWZpbmVkIF9XSU4zMiB8fCBk ZWZpbmVkIF9fV0lOMzJfXykgJiYgISBkZWZpbmVkIF9fQ1lHV0lOX18NCi8qIG1pbmd3IGN3ZCBk b2VzIG5vdCBzdGFydCB3aXRoICcvJywgYnV0IGdldGN3ZCBkb2VzIGFsbG9jYXRlLiAgKi8NCiNl bHNlDQogICAgICAgICAgIGlmIChjaGRpciAoIi8iKSAhPSAwKQ0KICAgICAgICAgICAgIHJldHVy biAxOw0KICAgICAgICAgICBlbHNlDQogICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgY2hh ciAqZiA9IGdldGN3ZCAoTlVMTCwgMCk7DQogICAgICAgICAgICAgICBpZiAoISBmKQ0KICAgICAg ICAgICAgICAgICByZXR1cm4gMjsNCiAgICAgICAgICAgICAgIGlmIChmWzBdICE9ICcvJykNCiAg ICAgICAgICAgICAgICAgcmV0dXJuIDM7DQogICAgICAgICAgICAgICBpZiAoZlsxXSAhPSAnXDAn KQ0KICAgICAgICAgICAgICAgICByZXR1cm4gNDsNCiAgICAgICAgICAgICAgIHJldHVybiAwOw0K ICAgICAgICAgICAgIH0NCiNlbmRpZg0KDQogIDsNCiAgcmV0dXJuIDA7DQp9DQpfQUNFT0YNCmlm IGFjX2ZuX2NfdHJ5X3J1biAiJExJTkVOTyI7IHRoZW4gOg0KICBnbF9jdl9mdW5jX2dldGN3ZF9u dWxsPXllcw0KZWxzZQ0KICBnbF9jdl9mdW5jX2dldGN3ZF9udWxsPW5vDQpmaQ0Kcm0gLWYgY29y ZSAqLmNvcmUgY29yZS5jb25mdGVzdC4qIGdtb24ub3V0IGJiLm91dCBjb25mdGVzdCRhY19leGVl eHQgXA0KICBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LmJlYW0gY29uZnRlc3QuJGFjX2V4 dA0KZmkNCg0KZmkNCnsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVz dWx0OiAkZ2xfY3ZfZnVuY19nZXRjd2RfbnVsbCIgPiY1DQokYXNfZWNobyAiJGdsX2N2X2Z1bmNf Z2V0Y3dkX251bGwiID4mNjsgfQ0KDQphY19mbl9jX2NoZWNrX2RlY2wgIiRMSU5FTk8iICJnZXRj d2QiICJhY19jdl9oYXZlX2RlY2xfZ2V0Y3dkIiAiJGFjX2luY2x1ZGVzX2RlZmF1bHQiDQppZiB0 ZXN0ICJ4JGFjX2N2X2hhdmVfZGVjbF9nZXRjd2QiID0geHllczsgdGhlbiA6DQogIGFjX2hhdmVf ZGVjbD0xDQplbHNlDQogIGFjX2hhdmVfZGVjbD0wDQpmaQ0KDQpjYXQgPj5jb25mZGVmcy5oIDw8 X0FDRU9GDQojZGVmaW5lIEhBVkVfREVDTF9HRVRDV0QgJGFjX2hhdmVfZGVjbA0KX0FDRU9GDQoN CmFjX2ZuX2NfY2hlY2tfZGVjbCAiJExJTkVOTyIgImdldGRlbGltIiAiYWNfY3ZfaGF2ZV9kZWNs X2dldGRlbGltIiAiJGFjX2luY2x1ZGVzX2RlZmF1bHQiDQppZiB0ZXN0ICJ4JGFjX2N2X2hhdmVf ZGVjbF9nZXRkZWxpbSIgPSB4eWVzOyB0aGVuIDoNCiAgYWNfaGF2ZV9kZWNsPTENCmVsc2UNCiAg YWNfaGF2ZV9kZWNsPTANCmZpDQoNCmNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YNCiNkZWZpbmUg SEFWRV9ERUNMX0dFVERFTElNICRhY19oYXZlX2RlY2wNCl9BQ0VPRg0KDQoNCg0KDQoNCg0KDQog IHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIGFy aXRobWV0aWMgaHJ0aW1lX3QiID4mNQ0KJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIGFyaXRobWV0 aWMgaHJ0aW1lX3QuLi4gIiA+JjY7IH0NCmlmICR7Z2xfY3ZfYXJpdGhtZXRpY19ocnRpbWVfdCs6 fSBmYWxzZTsgdGhlbiA6DQogICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2DQplbHNlDQogIGNh dCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQNCi8qIGVuZCBjb25mZGVm cy5oLiAgKi8NCiNpbmNsdWRlIDx0aW1lLmg+DQppbnQNCm1haW4gKCkNCnsNCmhydGltZV90IHgg PSAwOyByZXR1cm4geC94Ow0KICA7DQogIHJldHVybiAwOw0KfQ0KX0FDRU9GDQppZiBhY19mbl9j X3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6DQogIGdsX2N2X2FyaXRobWV0aWNfaHJ0aW1l X3Q9eWVzDQplbHNlDQogIGdsX2N2X2FyaXRobWV0aWNfaHJ0aW1lX3Q9bm8NCmZpDQpybSAtZiBj b3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQNCmZp DQp7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGdsX2N2 X2FyaXRobWV0aWNfaHJ0aW1lX3QiID4mNQ0KJGFzX2VjaG8gIiRnbF9jdl9hcml0aG1ldGljX2hy dGltZV90IiA+JjY7IH0NCiAgaWYgdGVzdCAkZ2xfY3ZfYXJpdGhtZXRpY19ocnRpbWVfdCA9IHll czsgdGhlbg0KDQokYXNfZWNobyAiI2RlZmluZSBIQVZFX0FSSVRITUVUSUNfSFJUSU1FX1QgMSIg Pj5jb25mZGVmcy5oDQoNCiAgZmkNCg0KDQogIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVu by0kTElORU5PfTogY2hlY2tpbmcgZm9yIHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQiID4mNQ0KJGFz X2VjaG9fbiAiY2hlY2tpbmcgZm9yIHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQuLi4gIiA+JjY7IH0N CmlmICR7YWNfY3ZfdHlwZV91bnNpZ25lZF9sb25nX2xvbmdfaW50Kzp9IGZhbHNlOyB0aGVuIDoN CiAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYNCmVsc2UNCiAgYWNfY3ZfdHlwZV91bnNpZ25l ZF9sb25nX2xvbmdfaW50PXllcw0KICAgICBpZiB0ZXN0ICJ4JHthY19jdl9wcm9nX2NjX2M5OS1u b30iID0geG5vOyB0aGVuDQogICAgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRl c3QuJGFjX2V4dA0KLyogZW5kIGNvbmZkZWZzLmguICAqLw0KDQogIC8qIEZvciBub3csIGRvIG5v dCB0ZXN0IHRoZSBwcmVwcm9jZXNzb3I7IGFzIG9mIDIwMDcgdGhlcmUgYXJlIHRvbyBtYW55DQog ICAgICAgICBpbXBsZW1lbnRhdGlvbnMgd2l0aCBicm9rZW4gcHJlcHJvY2Vzc29ycy4gIFBlcmhh cHMgdGhpcyBjYW4NCiAgICAgICAgIGJlIHJldmlzaXRlZCBpbiAyMDEyLiAgSW4gdGhlIG1lYW50 aW1lLCBjb2RlIHNob3VsZCBub3QgZXhwZWN0DQogICAgICAgICAjaWYgdG8gd29yayB3aXRoIGxp dGVyYWxzIHdpZGVyIHRoYW4gMzIgYml0cy4gICovDQogICAgICAvKiBUZXN0IGxpdGVyYWxzLiAg Ki8NCiAgICAgIGxvbmcgbG9uZyBpbnQgbGwgPSA5MjIzMzcyMDM2ODU0Nzc1ODA3bGw7DQogICAg ICBsb25nIGxvbmcgaW50IG5sbCA9IC05MjIzMzcyMDM2ODU0Nzc1ODA3TEw7DQogICAgICB1bnNp Z25lZCBsb25nIGxvbmcgaW50IHVsbCA9IDE4NDQ2NzQ0MDczNzA5NTUxNjE1VUxMOw0KICAgICAg LyogVGVzdCBjb25zdGFudCBleHByZXNzaW9ucy4gICAqLw0KICAgICAgdHlwZWRlZiBpbnQgYVso KC05MjIzMzcyMDM2ODU0Nzc1ODA3TEwgPCAwICYmIDAgPCA5MjIzMzcyMDM2ODU0Nzc1ODA3bGwp DQogICAgICAgICAgICAgICAgICAgICA/IDEgOiAtMSldOw0KICAgICAgdHlwZWRlZiBpbnQgYlso MTg0NDY3NDQwNzM3MDk1NTE2MTVVTEwgPD0gKHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQpIC0xDQog ICAgICAgICAgICAgICAgICAgICA/IDEgOiAtMSldOw0KICAgICAgaW50IGkgPSA2MzsNCmludA0K bWFpbiAoKQ0Kew0KLyogVGVzdCBhdmFpbGFiaWxpdHkgb2YgcnVudGltZSByb3V0aW5lcyBmb3Ig c2hpZnQgYW5kIGRpdmlzaW9uLiAgKi8NCiAgICAgIGxvbmcgbG9uZyBpbnQgbGxtYXggPSA5MjIz MzcyMDM2ODU0Nzc1ODA3bGw7DQogICAgICB1bnNpZ25lZCBsb25nIGxvbmcgaW50IHVsbG1heCA9 IDE4NDQ2NzQ0MDczNzA5NTUxNjE1dWxsOw0KICAgICAgcmV0dXJuICgobGwgPDwgNjMpIHwgKGxs ID4+IDYzKSB8IChsbCA8IGkpIHwgKGxsID4gaSkNCiAgICAgICAgICAgICAgfCAobGxtYXggLyBs bCkgfCAobGxtYXggJSBsbCkNCiAgICAgICAgICAgICAgfCAodWxsIDw8IDYzKSB8ICh1bGwgPj4g NjMpIHwgKHVsbCA8PCBpKSB8ICh1bGwgPj4gaSkNCiAgICAgICAgICAgICAgfCAodWxsbWF4IC8g dWxsKSB8ICh1bGxtYXggJSB1bGwpKTsNCiAgOw0KICByZXR1cm4gMDsNCn0NCg0KX0FDRU9GDQpp ZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6DQoNCmVsc2UNCiAgYWNfY3ZfdHlw ZV91bnNpZ25lZF9sb25nX2xvbmdfaW50PW5vDQpmaQ0Kcm0gLWYgY29yZSBjb25mdGVzdC5lcnIg Y29uZnRlc3QuJGFjX29iamV4dCBcDQogICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRh Y19leHQNCiAgICAgZmkNCmZpDQp7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVO T306IHJlc3VsdDogJGFjX2N2X3R5cGVfdW5zaWduZWRfbG9uZ19sb25nX2ludCIgPiY1DQokYXNf ZWNobyAiJGFjX2N2X3R5cGVfdW5zaWduZWRfbG9uZ19sb25nX2ludCIgPiY2OyB9DQogIGlmIHRl c3QgJGFjX2N2X3R5cGVfdW5zaWduZWRfbG9uZ19sb25nX2ludCA9IHllczsgdGhlbg0KDQokYXNf ZWNobyAiI2RlZmluZSBIQVZFX1VOU0lHTkVEX0xPTkdfTE9OR19JTlQgMSIgPj5jb25mZGVmcy5o DQoNCiAgZmkNCg0KDQoNCiAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99 OiBjaGVja2luZyBmb3IgbG9uZyBsb25nIGludCIgPiY1DQokYXNfZWNob19uICJjaGVja2luZyBm b3IgbG9uZyBsb25nIGludC4uLiAiID4mNjsgfQ0KaWYgJHthY19jdl90eXBlX2xvbmdfbG9uZ19p bnQrOn0gZmFsc2U7IHRoZW4gOg0KICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNg0KZWxzZQ0K ICBhY19jdl90eXBlX2xvbmdfbG9uZ19pbnQ9eWVzDQogICAgICBpZiB0ZXN0ICJ4JHthY19jdl9w cm9nX2NjX2M5OS1ub30iID0geG5vOyB0aGVuDQogICAgICAgIGFjX2N2X3R5cGVfbG9uZ19sb25n X2ludD0kYWNfY3ZfdHlwZV91bnNpZ25lZF9sb25nX2xvbmdfaW50DQogICAgICAgIGlmIHRlc3Qg JGFjX2N2X3R5cGVfbG9uZ19sb25nX2ludCA9IHllczsgdGhlbg0KICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0geWVzOyB0 aGVuIDoNCiAgOg0KZWxzZQ0KICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4k YWNfZXh0DQovKiBlbmQgY29uZmRlZnMuaC4gICovDQojaW5jbHVkZSA8bGltaXRzLmg+DQogICAg ICAgICAgICAgICAgICNpZm5kZWYgTExPTkdfTUFYDQogICAgICAgICAgICAgICAgICMgZGVmaW5l IEhBTEYgXA0KICAgICAgICAgICAgICAgICAgICAgICAgICAoMUxMIDw8IChzaXplb2YgKGxvbmcg bG9uZyBpbnQpICogQ0hBUl9CSVQgLSAyKSkNCiAgICAgICAgICAgICAgICAgIyBkZWZpbmUgTExP TkdfTUFYIChIQUxGIC0gMSArIEhBTEYpDQogICAgICAgICAgICAgICAgICNlbmRpZg0KaW50DQpt YWluICgpDQp7DQpsb25nIGxvbmcgaW50IG4gPSAxOw0KICAgICAgICAgICAgICAgICBpbnQgaTsN CiAgICAgICAgICAgICAgICAgZm9yIChpID0gMDsgOyBpKyspDQogICAgICAgICAgICAgICAgICAg ew0KICAgICAgICAgICAgICAgICAgICAgbG9uZyBsb25nIGludCBtID0gbiA8PCBpOw0KICAgICAg ICAgICAgICAgICAgICAgaWYgKG0gPj4gaSAhPSBuKQ0KICAgICAgICAgICAgICAgICAgICAgICBy ZXR1cm4gMTsNCiAgICAgICAgICAgICAgICAgICAgIGlmIChMTE9OR19NQVggLyAyIDwgbSkNCiAg ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQogICAgICAgICAgICAgICAgICAgfQ0KICAgICAg ICAgICAgICAgICByZXR1cm4gMDsNCiAgOw0KICByZXR1cm4gMDsNCn0NCl9BQ0VPRg0KaWYgYWNf Zm5fY190cnlfcnVuICIkTElORU5PIjsgdGhlbiA6DQoNCmVsc2UNCiAgYWNfY3ZfdHlwZV9sb25n X2xvbmdfaW50PW5vDQpmaQ0Kcm0gLWYgY29yZSAqLmNvcmUgY29yZS5jb25mdGVzdC4qIGdtb24u b3V0IGJiLm91dCBjb25mdGVzdCRhY19leGVleHQgXA0KICBjb25mdGVzdC4kYWNfb2JqZXh0IGNv bmZ0ZXN0LmJlYW0gY29uZnRlc3QuJGFjX2V4dA0KZmkNCg0KICAgICAgICBmaQ0KICAgICAgZmkN CmZpDQp7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFj X2N2X3R5cGVfbG9uZ19sb25nX2ludCIgPiY1DQokYXNfZWNobyAiJGFjX2N2X3R5cGVfbG9uZ19s b25nX2ludCIgPiY2OyB9DQogIGlmIHRlc3QgJGFjX2N2X3R5cGVfbG9uZ19sb25nX2ludCA9IHll czsgdGhlbg0KDQokYXNfZWNobyAiI2RlZmluZSBIQVZFX0xPTkdfTE9OR19JTlQgMSIgPj5jb25m ZGVmcy5oDQoNCiAgZmkNCg0KDQoNCg0KICA6DQoNCg0KDQoNCg0KYWNfZm5fY19jaGVja19kZWNs ICIkTElORU5PIiAiZ2V0bGluZSIgImFjX2N2X2hhdmVfZGVjbF9nZXRsaW5lIiAiJGFjX2luY2x1 ZGVzX2RlZmF1bHQiDQppZiB0ZXN0ICJ4JGFjX2N2X2hhdmVfZGVjbF9nZXRsaW5lIiA9IHh5ZXM7 IHRoZW4gOg0KICBhY19oYXZlX2RlY2w9MQ0KZWxzZQ0KICBhY19oYXZlX2RlY2w9MA0KZmkNCg0K Y2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRg0KI2RlZmluZSBIQVZFX0RFQ0xfR0VUTElORSAkYWNf aGF2ZV9kZWNsDQpfQUNFT0YNCg0KDQogIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0k TElORU5PfTogY2hlY2tpbmcgZm9yIHNzaXplX3QiID4mNQ0KJGFzX2VjaG9fbiAiY2hlY2tpbmcg Zm9yIHNzaXplX3QuLi4gIiA+JjY7IH0NCmlmICR7Z3RfY3Zfc3NpemVfdCs6fSBmYWxzZTsgdGhl biA6DQogICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2DQplbHNlDQogIGNhdCBjb25mZGVmcy5o IC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQNCi8qIGVuZCBjb25mZGVmcy5oLiAgKi8NCiNp bmNsdWRlIDxzeXMvdHlwZXMuaD4NCmludA0KbWFpbiAoKQ0Kew0KaW50IHggPSBzaXplb2YgKHNz aXplX3QgKikgKyBzaXplb2YgKHNzaXplX3QpOw0KICAgICAgICAgICAgcmV0dXJuICF4Ow0KICA7 DQogIHJldHVybiAwOw0KfQ0KX0FDRU9GDQppZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5P IjsgdGhlbiA6DQogIGd0X2N2X3NzaXplX3Q9eWVzDQplbHNlDQogIGd0X2N2X3NzaXplX3Q9bm8N CmZpDQpybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0 LiRhY19leHQNCmZpDQp7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJl c3VsdDogJGd0X2N2X3NzaXplX3QiID4mNQ0KJGFzX2VjaG8gIiRndF9jdl9zc2l6ZV90IiA+JjY7 IH0NCiAgaWYgdGVzdCAkZ3RfY3Zfc3NpemVfdCA9IG5vOyB0aGVuDQoNCiRhc19lY2hvICIjZGVm aW5lIHNzaXplX3QgaW50IiA+PmNvbmZkZWZzLmgNCg0KICBmaQ0KDQoNCg0KDQoNCg0KDQoNCg0K DQoNCg0KDQoNCg0KDQoNCg0KDQoNCiAgICAgaWYgdGVzdCAkZ2xfY3ZfaGF2ZV9pbmNsdWRlX25l eHQgPSB5ZXM7IHRoZW4NCiAgICAgICBnbF9jdl9uZXh0X2dldG9wdF9oPSc8J2dldG9wdC5oJz4n DQogICAgIGVsc2UNCiAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVO T306IGNoZWNraW5nIGFic29sdXRlIG5hbWUgb2YgPGdldG9wdC5oPiIgPiY1DQokYXNfZWNob19u ICJjaGVja2luZyBhYnNvbHV0ZSBuYW1lIG9mIDxnZXRvcHQuaD4uLi4gIiA+JjY7IH0NCmlmICR7 Z2xfY3ZfbmV4dF9nZXRvcHRfaCs6fSBmYWxzZTsgdGhlbiA6DQogICRhc19lY2hvX24gIihjYWNo ZWQpICIgPiY2DQplbHNlDQoNCiAgICAgICAgICAgICBpZiB0ZXN0ICRhY19jdl9oZWFkZXJfZ2V0 b3B0X2ggPSB5ZXM7IHRoZW4NCg0KDQogICAgICAgICAgICAgICBjYXQgY29uZmRlZnMuaCAtIDw8 X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0DQovKiBlbmQgY29uZmRlZnMuaC4gICovDQojaW5jbHVk ZSA8Z2V0b3B0Lmg+DQoNCl9BQ0VPRg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAiJGhvc3Rfb3MiIGluDQogICAgICAg ICAgICAgICAgIGFpeCopIGdsX2Fic25hbWVfY3BwPSIkYWNfY3BwIC1DIiA7Ow0KICAgICAgICAg ICAgICAgICAqKSAgICBnbF9hYnNuYW1lX2NwcD0iJGFjX2NwcCIgOzsNCiAgICAgICAgICAgICAg IGVzYWMNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGdsX2N2X25leHRfZ2V0b3B0X2g9JyInYChldmFsICIkZ2xfYWJzbmFtZV9jcHAg Y29uZnRlc3QuJGFjX2V4dCIpIDI+JjUgfA0KICAgICAgICAgICAgICAgICAgc2VkIC1uICdcIy9n ZXRvcHQuaCN7DQogICAgICAgICAgICAgICAgICAgIHMjLioiXCguKi9nZXRvcHQuaFwpIi4qI1wx Iw0KICAgICAgICAgICAgICAgICAgICBzI14vW14vXSMvLyYjDQogICAgICAgICAgICAgICAgICAg IHANCiAgICAgICAgICAgICAgICAgICAgcQ0KICAgICAgICAgICAgICAgICAgfSdgJyInDQogICAg ICAgICAgZWxzZQ0KICAgICAgICAgICAgICAgZ2xfY3ZfbmV4dF9nZXRvcHRfaD0nPCdnZXRvcHQu aCc+Jw0KICAgICAgICAgICAgIGZpDQoNCg0KZmkNCnsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xp bmVuby0kTElORU5PfTogcmVzdWx0OiAkZ2xfY3ZfbmV4dF9nZXRvcHRfaCIgPiY1DQokYXNfZWNo byAiJGdsX2N2X25leHRfZ2V0b3B0X2giID4mNjsgfQ0KICAgICBmaQ0KICAgICBORVhUX0dFVE9Q VF9IPSRnbF9jdl9uZXh0X2dldG9wdF9oDQoNCiAgICAgaWYgdGVzdCAkZ2xfY3ZfaGF2ZV9pbmNs dWRlX25leHQgPSB5ZXMgfHwgdGVzdCAkZ2xfY3ZfaGF2ZV9pbmNsdWRlX25leHQgPSBidWdneTsg dGhlbg0KICAgICAgICMgSU5DTFVERV9ORVhUX0FTX0ZJUlNUX0RJUkVDVElWRT0naW5jbHVkZV9u ZXh0Jw0KICAgICAgIGdsX25leHRfYXNfZmlyc3RfZGlyZWN0aXZlPSc8J2dldG9wdC5oJz4nDQog ICAgIGVsc2UNCiAgICAgICAjIElOQ0xVREVfTkVYVF9BU19GSVJTVF9ESVJFQ1RJVkU9J2luY2x1 ZGUnDQogICAgICAgZ2xfbmV4dF9hc19maXJzdF9kaXJlY3RpdmU9JGdsX2N2X25leHRfZ2V0b3B0 X2gNCiAgICAgZmkNCiAgICAgTkVYVF9BU19GSVJTVF9ESVJFQ1RJVkVfR0VUT1BUX0g9JGdsX25l eHRfYXNfZmlyc3RfZGlyZWN0aXZlDQoNCg0KDQoNCiAgaWYgdGVzdCAkYWNfY3ZfaGVhZGVyX2dl dG9wdF9oID0geWVzOyB0aGVuDQogICAgSEFWRV9HRVRPUFRfSD0xDQogIGVsc2UNCiAgICBIQVZF X0dFVE9QVF9IPTANCiAgZmkNCg0KDQogIGdsX3JlcGxhY2VfZ2V0b3B0PQ0KDQogICAgaWYgdGVz dCAteiAiJGdsX3JlcGxhY2VfZ2V0b3B0IiAmJiB0ZXN0ICRnbF9nZXRvcHRfcmVxdWlyZWQgPSBH TlU7IHRoZW4NCiAgICBmb3IgYWNfaGVhZGVyIGluIGdldG9wdC5oDQpkbyA6DQogIGFjX2ZuX2Nf Y2hlY2tfaGVhZGVyX21vbmdyZWwgIiRMSU5FTk8iICJnZXRvcHQuaCIgImFjX2N2X2hlYWRlcl9n ZXRvcHRfaCIgIiRhY19pbmNsdWRlc19kZWZhdWx0Ig0KaWYgdGVzdCAieCRhY19jdl9oZWFkZXJf Z2V0b3B0X2giID0geHllczsgdGhlbiA6DQogIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YNCiNk ZWZpbmUgSEFWRV9HRVRPUFRfSCAxDQpfQUNFT0YNCg0KZWxzZQ0KICBnbF9yZXBsYWNlX2dldG9w dD15ZXMNCmZpDQoNCmRvbmUNCg0KICBmaQ0KDQogICAgaWYgdGVzdCAteiAiJGdsX3JlcGxhY2Vf Z2V0b3B0IiAmJiB0ZXN0ICRnbF9nZXRvcHRfcmVxdWlyZWQgPSBHTlU7IHRoZW4NCiAgICBmb3Ig YWNfZnVuYyBpbiBnZXRvcHRfbG9uZ19vbmx5DQpkbyA6DQogIGFjX2ZuX2NfY2hlY2tfZnVuYyAi JExJTkVOTyIgImdldG9wdF9sb25nX29ubHkiICJhY19jdl9mdW5jX2dldG9wdF9sb25nX29ubHki DQppZiB0ZXN0ICJ4JGFjX2N2X2Z1bmNfZ2V0b3B0X2xvbmdfb25seSIgPSB4eWVzOyB0aGVuIDoN CiAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRg0KI2RlZmluZSBIQVZFX0dFVE9QVF9MT05HX09O TFkgMQ0KX0FDRU9GDQoNCmVsc2UNCiAgZ2xfcmVwbGFjZV9nZXRvcHQ9eWVzDQpmaQ0KZG9uZQ0K DQogIGZpDQoNCiAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAteiAiJGdsX3JlcGxhY2VfZ2V0 b3B0IjsgdGhlbg0KICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTog Y2hlY2tpbmcgd2hldGhlciBnZXRvcHQgaXMgUE9TSVggY29tcGF0aWJsZSIgPiY1DQokYXNfZWNo b19uICJjaGVja2luZyB3aGV0aGVyIGdldG9wdCBpcyBQT1NJWCBjb21wYXRpYmxlLi4uICIgPiY2 OyB9DQppZiAke2dsX2N2X2Z1bmNfZ2V0b3B0X3Bvc2l4Kzp9IGZhbHNlOyB0aGVuIDoNCiAgJGFz X2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYNCmVsc2UNCg0KICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2F0IGNvbmZk ZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dA0KLyogZW5kIGNvbmZkZWZzLmguICAq Lw0KI2luY2x1ZGUgPHVuaXN0ZC5oPg0KaW50DQptYWluICgpDQp7DQppbnQgKnAgPSAmb3B0cmVz ZXQ7IHJldHVybiBvcHRyZXNldDsNCiAgOw0KICByZXR1cm4gMDsNCn0NCl9BQ0VPRg0KaWYgYWNf Zm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOg0KICBnbF9vcHRpbmRfbWluPTENCmVs c2UNCiAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dA0KLyogZW5k IGNvbmZkZWZzLmguICAqLw0KI2luY2x1ZGUgPGdldG9wdC5oPg0KaW50DQptYWluICgpDQp7DQpy ZXR1cm4gIWdldG9wdF9jbGlwOw0KICA7DQogIHJldHVybiAwOw0KfQ0KX0FDRU9GDQppZiBhY19m bl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6DQogIGdsX29wdGluZF9taW49MQ0KZWxz ZQ0KICBnbF9vcHRpbmRfbWluPTANCmZpDQpybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVz dC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQNCmZpDQpybSAtZiBjb3JlIGNvbmZ0ZXN0LmVy ciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQNCg0KICAgICAgICAgICAgICAg IGdsX3NhdmVfQ1BQRkxBR1M9JENQUEZMQUdTDQogICAgICAgIENQUEZMQUdTPSIkQ1BQRkxBR1Mg LURPUFRJTkRfTUlOPSRnbF9vcHRpbmRfbWluIg0KICAgICAgICBpZiB0ZXN0ICIkY3Jvc3NfY29t cGlsaW5nIiA9IHllczsgdGhlbiA6DQogIGNhc2UgIiRob3N0X29zIiBpbg0KICAgICAgICAgICAg IG1pbmd3KikgICAgICAgICBnbF9jdl9mdW5jX2dldG9wdF9wb3NpeD0iZ3Vlc3Npbmcgbm8iOzsN CiAgICAgICAgICAgICBkYXJ3aW4qIHwgYWl4KikgZ2xfY3ZfZnVuY19nZXRvcHRfcG9zaXg9Imd1 ZXNzaW5nIG5vIjs7DQogICAgICAgICAgICAgKikgICAgICAgICAgICAgIGdsX2N2X2Z1bmNfZ2V0 b3B0X3Bvc2l4PSJndWVzc2luZyB5ZXMiOzsNCiAgICAgICAgICAgZXNhYw0KDQplbHNlDQogIGNh dCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQNCi8qIGVuZCBjb25mZGVm cy5oLiAgKi8NCg0KI2luY2x1ZGUgPHVuaXN0ZC5oPg0KI2luY2x1ZGUgPHN0ZGxpYi5oPg0KI2lu Y2x1ZGUgPHN0cmluZy5oPg0KDQppbnQNCm1haW4gKCkNCnsNCiAgew0KICAgIGludCBhcmdjID0g MDsNCiAgICBjaGFyICphcmd2WzEwXTsNCiAgICBpbnQgYzsNCg0KICAgIGFyZ3ZbYXJnYysrXSA9 ICJwcm9ncmFtIjsNCiAgICBhcmd2W2FyZ2MrK10gPSAiLWEiOw0KICAgIGFyZ3ZbYXJnYysrXSA9 ICJmb28iOw0KICAgIGFyZ3ZbYXJnYysrXSA9ICJiYXIiOw0KICAgIGFyZ3ZbYXJnY10gPSBOVUxM Ow0KICAgIG9wdGluZCA9IE9QVElORF9NSU47DQogICAgb3B0ZXJyID0gMDsNCg0KICAgIGMgPSBn ZXRvcHQgKGFyZ2MsIGFyZ3YsICJhYiIpOw0KICAgIGlmICghKGMgPT0gJ2EnKSkNCiAgICAgIHJl dHVybiAxOw0KICAgIGMgPSBnZXRvcHQgKGFyZ2MsIGFyZ3YsICJhYiIpOw0KICAgIGlmICghKGMg PT0gLTEpKQ0KICAgICAgcmV0dXJuIDI7DQogICAgaWYgKCEob3B0aW5kID09IDIpKQ0KICAgICAg cmV0dXJuIDM7DQogIH0NCiAgLyogU29tZSBpbnRlcm5hbCBzdGF0ZSBleGlzdHMgYXQgdGhpcyBw b2ludC4gICovDQogIHsNCiAgICBpbnQgYXJnYyA9IDA7DQogICAgY2hhciAqYXJndlsxMF07DQog ICAgaW50IGM7DQoNCiAgICBhcmd2W2FyZ2MrK10gPSAicHJvZ3JhbSI7DQogICAgYXJndlthcmdj KytdID0gImRvbmFsZCI7DQogICAgYXJndlthcmdjKytdID0gIi1wIjsNCiAgICBhcmd2W2FyZ2Mr K10gPSAiYmlsbHkiOw0KICAgIGFyZ3ZbYXJnYysrXSA9ICJkdWNrIjsNCiAgICBhcmd2W2FyZ2Mr K10gPSAiLWEiOw0KICAgIGFyZ3ZbYXJnYysrXSA9ICJiYXIiOw0KICAgIGFyZ3ZbYXJnY10gPSBO VUxMOw0KICAgIG9wdGluZCA9IE9QVElORF9NSU47DQogICAgb3B0ZXJyID0gMDsNCg0KICAgIGMg PSBnZXRvcHQgKGFyZ2MsIGFyZ3YsICIrYWJwOnE6Iik7DQogICAgaWYgKCEoYyA9PSAtMSkpDQog ICAgICByZXR1cm4gNDsNCiAgICBpZiAoIShzdHJjbXAgKGFyZ3ZbMF0sICJwcm9ncmFtIikgPT0g MCkpDQogICAgICByZXR1cm4gNTsNCiAgICBpZiAoIShzdHJjbXAgKGFyZ3ZbMV0sICJkb25hbGQi KSA9PSAwKSkNCiAgICAgIHJldHVybiA2Ow0KICAgIGlmICghKHN0cmNtcCAoYXJndlsyXSwgIi1w IikgPT0gMCkpDQogICAgICByZXR1cm4gNzsNCiAgICBpZiAoIShzdHJjbXAgKGFyZ3ZbM10sICJi aWxseSIpID09IDApKQ0KICAgICAgcmV0dXJuIDg7DQogICAgaWYgKCEoc3RyY21wIChhcmd2WzRd LCAiZHVjayIpID09IDApKQ0KICAgICAgcmV0dXJuIDk7DQogICAgaWYgKCEoc3RyY21wIChhcmd2 WzVdLCAiLWEiKSA9PSAwKSkNCiAgICAgIHJldHVybiAxMDsNCiAgICBpZiAoIShzdHJjbXAgKGFy Z3ZbNl0sICJiYXIiKSA9PSAwKSkNCiAgICAgIHJldHVybiAxMTsNCiAgICBpZiAoIShvcHRpbmQg PT0gMSkpDQogICAgICByZXR1cm4gMTI7DQogIH0NCiAgLyogRGV0ZWN0IE1hY09TIDEwLjUsIEFJ WCA3LjEgYnVnLiAgKi8NCiAgew0KICAgIGNoYXIgKmFyZ3ZbM10gPSB7ICJwcm9ncmFtIiwgIi1h YiIsIE5VTEwgfTsNCiAgICBvcHRpbmQgPSBPUFRJTkRfTUlOOw0KICAgIG9wdGVyciA9IDA7DQog ICAgaWYgKGdldG9wdCAoMiwgYXJndiwgImFiOiIpICE9ICdhJykNCiAgICAgIHJldHVybiAxMzsN CiAgICBpZiAoZ2V0b3B0ICgyLCBhcmd2LCAiYWI6IikgIT0gJz8nKQ0KICAgICAgcmV0dXJuIDE0 Ow0KICAgIGlmIChvcHRvcHQgIT0gJ2InKQ0KICAgICAgcmV0dXJuIDE1Ow0KICAgIGlmIChvcHRp bmQgIT0gMikNCiAgICAgIHJldHVybiAxNjsNCiAgfQ0KDQogIHJldHVybiAwOw0KfQ0KDQpfQUNF T0YNCmlmIGFjX2ZuX2NfdHJ5X3J1biAiJExJTkVOTyI7IHRoZW4gOg0KICBnbF9jdl9mdW5jX2dl dG9wdF9wb3NpeD15ZXMNCmVsc2UNCiAgZ2xfY3ZfZnVuY19nZXRvcHRfcG9zaXg9bm8NCmZpDQpy bSAtZiBjb3JlICouY29yZSBjb3JlLmNvbmZ0ZXN0LiogZ21vbi5vdXQgYmIub3V0IGNvbmZ0ZXN0 JGFjX2V4ZWV4dCBcDQogIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuYmVhbSBjb25mdGVz dC4kYWNfZXh0DQpmaQ0KDQogICAgICAgIENQUEZMQUdTPSRnbF9zYXZlX0NQUEZMQUdTDQoNCmZp DQp7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGdsX2N2 X2Z1bmNfZ2V0b3B0X3Bvc2l4IiA+JjUNCiRhc19lY2hvICIkZ2xfY3ZfZnVuY19nZXRvcHRfcG9z aXgiID4mNjsgfQ0KICAgIGNhc2UgIiRnbF9jdl9mdW5jX2dldG9wdF9wb3NpeCIgaW4NCiAgICAg ICpubykgZ2xfcmVwbGFjZV9nZXRvcHQ9eWVzIDs7DQogICAgZXNhYw0KICBmaQ0KDQogIGlmIHRl c3QgLXogIiRnbF9yZXBsYWNlX2dldG9wdCIgJiYgdGVzdCAkZ2xfZ2V0b3B0X3JlcXVpcmVkID0g R05VOyB0aGVuDQogICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBj aGVja2luZyBmb3Igd29ya2luZyBHTlUgZ2V0b3B0IGZ1bmN0aW9uIiA+JjUNCiRhc19lY2hvX24g ImNoZWNraW5nIGZvciB3b3JraW5nIEdOVSBnZXRvcHQgZnVuY3Rpb24uLi4gIiA+JjY7IH0NCmlm ICR7Z2xfY3ZfZnVuY19nZXRvcHRfZ251Kzp9IGZhbHNlOyB0aGVuIDoNCiAgJGFzX2VjaG9fbiAi KGNhY2hlZCkgIiA+JjYNCmVsc2UNCiAgIyBFdmVuIHdpdGggUE9TSVhMWV9DT1JSRUNULCB0aGUg R05VIGV4dGVuc2lvbiBvZiBsZWFkaW5nICctJyBpbiB0aGUNCiAgICAgICAjIG9wdHN0cmluZyBp cyBuZWNlc3NhcnkgZm9yIHByb2dyYW1zIGxpa2UgbTQgdGhhdCBoYXZlIFBPU0lYLW1hbmRhdGVk DQogICAgICAgIyBzZW1hbnRpY3MgZm9yIHN1cHBvcnRpbmcgb3B0aW9ucyBpbnRlcnNwZXJzZWQg d2l0aCBmaWxlcy4NCiAgICAgICAjIEFsc28sIHNpbmNlIGdldG9wdF9sb25nIGlzIGEgR05VIGV4 dGVuc2lvbiwgd2UgcmVxdWlyZSBvcHRpbmQ9MC4NCiAgICAgICAjIEJhc2ggdGllcyAnc2V0IC1v IHBvc2l4JyB0byBhIG5vbi1leHBvcnRlZCBQT1NJWExZX0NPUlJFQ1Q7DQogICAgICAgIyBzbyB0 YWtlIGNhcmUgdG8gcmV2ZXJ0IHRvIHRoZSBjb3JyZWN0IChub24tKWV4cG9ydCBzdGF0ZS4NCiAg ICAgICBnbF9hd2tfcHJvYmU9J0JFR0lOIHsgaWYgKCJQT1NJWExZX0NPUlJFQ1QiIGluIEVOVklS T04pIHByaW50ICJ4IiB9Jw0KICAgICAgIGNhc2UgJHtQT1NJWExZX0NPUlJFQ1QreH1gJEFXSyAi JGdsX2F3a19wcm9iZSIgPC9kZXYvbnVsbGAgaW4NCiAgICAgICAgIHh4KSBnbF9oYWRfUE9TSVhM WV9DT1JSRUNUPWV4cG9ydGVkIDs7DQogICAgICAgICB4KSAgZ2xfaGFkX1BPU0lYTFlfQ09SUkVD VD15ZXMgICAgICA7Ow0KICAgICAgICAgKikgIGdsX2hhZF9QT1NJWExZX0NPUlJFQ1Q9ICAgICAg ICAgOzsNCiAgICAgICBlc2FjDQogICAgICAgUE9TSVhMWV9DT1JSRUNUPTENCiAgICAgICBleHBv cnQgUE9TSVhMWV9DT1JSRUNUDQogICAgICAgaWYgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgPSB5 ZXM7IHRoZW4gOg0KICAgICAgICAgICBjYXNlICRob3N0X29zOiRhY19jdl9oYXZlX2RlY2xfb3B0 cmVzZXQgaW4NCiAgICAgICAgICAgKi1nbnUqOiogfCBtaW5ndyo6KikgZ2xfY3ZfZnVuY19nZXRv cHRfZ251PW5vOzsNCiAgICAgICAgICAgKjp5ZXMpICAgICAgICAgICAgICAgZ2xfY3ZfZnVuY19n ZXRvcHRfZ251PW5vOzsNCiAgICAgICAgICAgKikgICAgICAgICAgICAgICAgICAgZ2xfY3ZfZnVu Y19nZXRvcHRfZ251PXllczs7DQogICAgICAgICBlc2FjDQoNCmVsc2UNCiAgY2F0IGNvbmZkZWZz LmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dA0KLyogZW5kIGNvbmZkZWZzLmguICAqLw0K I2luY2x1ZGUgPGdldG9wdC5oPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgI2luY2x1ZGUg PHN0ZGRlZi5oPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgI2luY2x1ZGUgPHN0cmluZy5o Pg0KDQppbnQNCm1haW4gKCkNCnsNCg0KICAgICAgICAgICAgIGludCByZXN1bHQgPSAwOw0KICAg ICAgICAgICAgIC8qIFRoaXMgY29kZSBzdWNjZWVkcyBvbiBnbGliYyAyLjgsIE9wZW5CU0QgNC4w LCBDeWd3aW4sIG1pbmd3LA0KICAgICAgICAgICAgICAgIGFuZCBmYWlscyBvbiBNYWNPUyBYIDEw LjUsIEFJWCA1LjIsIEhQLVVYIDExLCBJUklYIDYuNSwNCiAgICAgICAgICAgICAgICBPU0YvMSA1 LjEsIFNvbGFyaXMgMTAuICAqLw0KICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgIGNoYXIg Km15YXJndlszXTsNCiAgICAgICAgICAgICAgIG15YXJndlswXSA9ICJjb25mdGVzdCI7DQogICAg ICAgICAgICAgICBteWFyZ3ZbMV0gPSAiLSsiOw0KICAgICAgICAgICAgICAgbXlhcmd2WzJdID0g MDsNCiAgICAgICAgICAgICAgIG9wdGVyciA9IDA7DQogICAgICAgICAgICAgICBpZiAoZ2V0b3B0 ICgyLCBteWFyZ3YsICIrYSIpICE9ICc/JykNCiAgICAgICAgICAgICAgICAgcmVzdWx0IHw9IDE7 DQogICAgICAgICAgICAgfQ0KICAgICAgICAgICAgIC8qIFRoaXMgY29kZSBzdWNjZWVkcyBvbiBn bGliYyAyLjgsIG1pbmd3LA0KICAgICAgICAgICAgICAgIGFuZCBmYWlscyBvbiBNYWNPUyBYIDEw LjUsIE9wZW5CU0QgNC4wLCBBSVggNS4yLCBIUC1VWCAxMSwNCiAgICAgICAgICAgICAgICBJUklY IDYuNSwgT1NGLzEgNS4xLCBTb2xhcmlzIDEwLCBDeWd3aW4gMS41LnguICAqLw0KICAgICAgICAg ICAgIHsNCiAgICAgICAgICAgICAgIGNoYXIgKmFyZ3ZbXSA9IHsgInByb2dyYW0iLCAiLXAiLCAi Zm9vIiwgImJhciIsIE5VTEwgfTsNCg0KICAgICAgICAgICAgICAgb3B0aW5kID0gMTsNCiAgICAg ICAgICAgICAgIGlmIChnZXRvcHQgKDQsIGFyZ3YsICJwOjoiKSAhPSAncCcpDQogICAgICAgICAg ICAgICAgIHJlc3VsdCB8PSAyOw0KICAgICAgICAgICAgICAgZWxzZSBpZiAob3B0YXJnICE9IE5V TEwpDQogICAgICAgICAgICAgICAgIHJlc3VsdCB8PSA0Ow0KICAgICAgICAgICAgICAgZWxzZSBp ZiAoZ2V0b3B0ICg0LCBhcmd2LCAicDo6IikgIT0gLTEpDQogICAgICAgICAgICAgICAgIHJlc3Vs dCB8PSA2Ow0KICAgICAgICAgICAgICAgZWxzZSBpZiAob3B0aW5kICE9IDIpDQogICAgICAgICAg ICAgICAgIHJlc3VsdCB8PSA4Ow0KICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAvKiBUaGlz IGNvZGUgc3VjY2VlZHMgb24gZ2xpYmMgMi44IGFuZCBmYWlscyBvbiBDeWd3aW4gMS43LjAuICAq Lw0KICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgIGNoYXIgKmFyZ3ZbXSA9IHsgInByb2dy YW0iLCAiZm9vIiwgIi1wIiwgTlVMTCB9Ow0KICAgICAgICAgICAgICAgb3B0aW5kID0gMDsNCiAg ICAgICAgICAgICAgIGlmIChnZXRvcHQgKDMsIGFyZ3YsICItcCIpICE9IDEpDQogICAgICAgICAg ICAgICAgIHJlc3VsdCB8PSAxNjsNCiAgICAgICAgICAgICAgIGVsc2UgaWYgKGdldG9wdCAoMywg YXJndiwgIi1wIikgIT0gJ3AnKQ0KICAgICAgICAgICAgICAgICByZXN1bHQgfD0gMzI7DQogICAg ICAgICAgICAgfQ0KICAgICAgICAgICAgIC8qIFRoaXMgY29kZSBmYWlscyBvbiBnbGliYyAyLjEx LiAgKi8NCiAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICBjaGFyICphcmd2W10gPSB7ICJw cm9ncmFtIiwgIi1iIiwgIi1hIiwgTlVMTCB9Ow0KICAgICAgICAgICAgICAgb3B0aW5kID0gb3B0 ZXJyID0gMDsNCiAgICAgICAgICAgICAgIGlmIChnZXRvcHQgKDMsIGFyZ3YsICIrOmE6YiIpICE9 ICdiJykNCiAgICAgICAgICAgICAgICAgcmVzdWx0IHw9IDY0Ow0KICAgICAgICAgICAgICAgZWxz ZSBpZiAoZ2V0b3B0ICgzLCBhcmd2LCAiKzphOmIiKSAhPSAnOicpDQogICAgICAgICAgICAgICAg IHJlc3VsdCB8PSA2NDsNCiAgICAgICAgICAgICB9DQogICAgICAgICAgICAgcmV0dXJuIHJlc3Vs dDsNCg0KICA7DQogIHJldHVybiAwOw0KfQ0KX0FDRU9GDQppZiBhY19mbl9jX3RyeV9ydW4gIiRM SU5FTk8iOyB0aGVuIDoNCiAgZ2xfY3ZfZnVuY19nZXRvcHRfZ251PXllcw0KZWxzZQ0KICBnbF9j dl9mdW5jX2dldG9wdF9nbnU9bm8NCmZpDQpybSAtZiBjb3JlICouY29yZSBjb3JlLmNvbmZ0ZXN0 LiogZ21vbi5vdXQgYmIub3V0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCBcDQogIGNvbmZ0ZXN0LiRhY19v YmpleHQgY29uZnRlc3QuYmVhbSBjb25mdGVzdC4kYWNfZXh0DQpmaQ0KDQogICAgICAgY2FzZSAk Z2xfaGFkX1BPU0lYTFlfQ09SUkVDVCBpbg0KICAgICAgICAgZXhwb3J0ZWQpIDs7DQogICAgICAg ICB5ZXMpIHsgUE9TSVhMWV9DT1JSRUNUPTsgdW5zZXQgUE9TSVhMWV9DT1JSRUNUO307IFBPU0lY TFlfQ09SUkVDVD0xIDs7DQogICAgICAgICAqKSB7IFBPU0lYTFlfQ09SUkVDVD07IHVuc2V0IFBP U0lYTFlfQ09SUkVDVDt9IDs7DQogICAgICAgZXNhYw0KDQpmaQ0KeyAkYXNfZWNobyAiJGFzX21l OiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRnbF9jdl9mdW5jX2dldG9wdF9nbnUiID4m NQ0KJGFzX2VjaG8gIiRnbF9jdl9mdW5jX2dldG9wdF9nbnUiID4mNjsgfQ0KICAgIGlmIHRlc3Qg IiRnbF9jdl9mdW5jX2dldG9wdF9nbnUiID0gIm5vIjsgdGhlbg0KICAgICAgZ2xfcmVwbGFjZV9n ZXRvcHQ9eWVzDQogICAgZmkNCiAgZmkNCg0KYWNfZm5fY19jaGVja19kZWNsICIkTElORU5PIiAi Z2V0ZW52IiAiYWNfY3ZfaGF2ZV9kZWNsX2dldGVudiIgIiRhY19pbmNsdWRlc19kZWZhdWx0Ig0K aWYgdGVzdCAieCRhY19jdl9oYXZlX2RlY2xfZ2V0ZW52IiA9IHh5ZXM7IHRoZW4gOg0KICBhY19o YXZlX2RlY2w9MQ0KZWxzZQ0KICBhY19oYXZlX2RlY2w9MA0KZmkNCg0KY2F0ID4+Y29uZmRlZnMu aCA8PF9BQ0VPRg0KI2RlZmluZSBIQVZFX0RFQ0xfR0VURU5WICRhY19oYXZlX2RlY2wNCl9BQ0VP Rg0KDQoNCg0KDQoNCg0KICBpZiB0ZXN0IC1uICIkZ2xfcmVwbGFjZV9nZXRvcHQiOyB0aGVuIDoN Cg0KDQoNCiAgR0VUT1BUX0g9Z2V0b3B0LmgNCg0KJGFzX2VjaG8gIiNkZWZpbmUgX19HRVRPUFRf UFJFRklYIHJwbF8iID4+Y29uZmRlZnMuaA0KDQoNCg0KICAgIEdOVUxJQl9VTklTVERfSF9HRVRP UFQ9MQ0KDQoNCg0KDQoNCg0KDQoNCiAgZ2xfTElCT0JKUz0iJGdsX0xJQk9CSlMgZ2V0b3B0LiRh Y19vYmpleHQiDQoNCg0KDQoNCg0KDQoNCg0KDQogIGdsX0xJQk9CSlM9IiRnbF9MSUJPQkpTIGdl dG9wdDEuJGFjX29iamV4dCINCg0KDQoNCg0KDQoNCmZpDQoNCg0KYWNfZm5fY19jaGVja19kZWNs ICIkTElORU5PIiAiZ2V0cGFzcyIgImFjX2N2X2hhdmVfZGVjbF9nZXRwYXNzIiAiJGFjX2luY2x1 ZGVzX2RlZmF1bHQiDQppZiB0ZXN0ICJ4JGFjX2N2X2hhdmVfZGVjbF9nZXRwYXNzIiA9IHh5ZXM7 IHRoZW4gOg0KICBhY19oYXZlX2RlY2w9MQ0KZWxzZQ0KICBhY19oYXZlX2RlY2w9MA0KZmkNCg0K Y2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRg0KI2RlZmluZSBIQVZFX0RFQ0xfR0VUUEFTUyAkYWNf aGF2ZV9kZWNsDQpfQUNFT0YNCg0KDQoNCg0KDQoNCg0KDQoNCmFjX2ZuX2NfY2hlY2tfZGVjbCAi JExJTkVOTyIgImZmbHVzaF91bmxvY2tlZCIgImFjX2N2X2hhdmVfZGVjbF9mZmx1c2hfdW5sb2Nr ZWQiICIkYWNfaW5jbHVkZXNfZGVmYXVsdCINCmlmIHRlc3QgIngkYWNfY3ZfaGF2ZV9kZWNsX2Zm bHVzaF91bmxvY2tlZCIgPSB4eWVzOyB0aGVuIDoNCiAgYWNfaGF2ZV9kZWNsPTENCmVsc2UNCiAg YWNfaGF2ZV9kZWNsPTANCmZpDQoNCmNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YNCiNkZWZpbmUg SEFWRV9ERUNMX0ZGTFVTSF9VTkxPQ0tFRCAkYWNfaGF2ZV9kZWNsDQpfQUNFT0YNCg0KYWNfZm5f Y19jaGVja19kZWNsICIkTElORU5PIiAiZmxvY2tmaWxlIiAiYWNfY3ZfaGF2ZV9kZWNsX2Zsb2Nr ZmlsZSIgIiRhY19pbmNsdWRlc19kZWZhdWx0Ig0KaWYgdGVzdCAieCRhY19jdl9oYXZlX2RlY2xf ZmxvY2tmaWxlIiA9IHh5ZXM7IHRoZW4gOg0KICBhY19oYXZlX2RlY2w9MQ0KZWxzZQ0KICBhY19o YXZlX2RlY2w9MA0KZmkNCg0KY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRg0KI2RlZmluZSBIQVZF X0RFQ0xfRkxPQ0tGSUxFICRhY19oYXZlX2RlY2wNCl9BQ0VPRg0KDQphY19mbl9jX2NoZWNrX2Rl Y2wgIiRMSU5FTk8iICJmcHV0c191bmxvY2tlZCIgImFjX2N2X2hhdmVfZGVjbF9mcHV0c191bmxv Y2tlZCIgIiRhY19pbmNsdWRlc19kZWZhdWx0Ig0KaWYgdGVzdCAieCRhY19jdl9oYXZlX2RlY2xf ZnB1dHNfdW5sb2NrZWQiID0geHllczsgdGhlbiA6DQogIGFjX2hhdmVfZGVjbD0xDQplbHNlDQog IGFjX2hhdmVfZGVjbD0wDQpmaQ0KDQpjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GDQojZGVmaW5l IEhBVkVfREVDTF9GUFVUU19VTkxPQ0tFRCAkYWNfaGF2ZV9kZWNsDQpfQUNFT0YNCg0KYWNfZm5f Y19jaGVja19kZWNsICIkTElORU5PIiAiZnVubG9ja2ZpbGUiICJhY19jdl9oYXZlX2RlY2xfZnVu bG9ja2ZpbGUiICIkYWNfaW5jbHVkZXNfZGVmYXVsdCINCmlmIHRlc3QgIngkYWNfY3ZfaGF2ZV9k ZWNsX2Z1bmxvY2tmaWxlIiA9IHh5ZXM7IHRoZW4gOg0KICBhY19oYXZlX2RlY2w9MQ0KZWxzZQ0K ICBhY19oYXZlX2RlY2w9MA0KZmkNCg0KY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRg0KI2RlZmlu ZSBIQVZFX0RFQ0xfRlVOTE9DS0ZJTEUgJGFjX2hhdmVfZGVjbA0KX0FDRU9GDQoNCmFjX2ZuX2Nf Y2hlY2tfZGVjbCAiJExJTkVOTyIgInB1dGNfdW5sb2NrZWQiICJhY19jdl9oYXZlX2RlY2xfcHV0 Y191bmxvY2tlZCIgIiRhY19pbmNsdWRlc19kZWZhdWx0Ig0KaWYgdGVzdCAieCRhY19jdl9oYXZl X2RlY2xfcHV0Y191bmxvY2tlZCIgPSB4eWVzOyB0aGVuIDoNCiAgYWNfaGF2ZV9kZWNsPTENCmVs c2UNCiAgYWNfaGF2ZV9kZWNsPTANCmZpDQoNCmNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YNCiNk ZWZpbmUgSEFWRV9ERUNMX1BVVENfVU5MT0NLRUQgJGFjX2hhdmVfZGVjbA0KX0FDRU9GDQoNCg0K DQoNCg0KDQoNCg0KDQogIEdOVUxJQl9HRVRUSU1FT0ZEQVk9MDsNCiAgICBIQVZFX0dFVFRJTUVP RkRBWT0xOw0KICBIQVZFX1NUUlVDVF9USU1FVkFMPTE7DQogIEhBVkVfU1lTX1RJTUVfSD0xOw0K ICBSRVBMQUNFX0dFVFRJTUVPRkRBWT0wOw0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0K DQogICAgIGlmIHRlc3QgJGdsX2N2X2hhdmVfaW5jbHVkZV9uZXh0ID0geWVzOyB0aGVuDQogICAg ICAgZ2xfY3ZfbmV4dF9zeXNfdGltZV9oPSc8J3N5cy90aW1lLmgnPicNCiAgICAgZWxzZQ0KICAg ICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgYWJz b2x1dGUgbmFtZSBvZiA8c3lzL3RpbWUuaD4iID4mNQ0KJGFzX2VjaG9fbiAiY2hlY2tpbmcgYWJz b2x1dGUgbmFtZSBvZiA8c3lzL3RpbWUuaD4uLi4gIiA+JjY7IH0NCmlmICR7Z2xfY3ZfbmV4dF9z eXNfdGltZV9oKzp9IGZhbHNlOyB0aGVuIDoNCiAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYN CmVsc2UNCg0KICAgICAgICAgICAgIGlmIHRlc3QgJGFjX2N2X2hlYWRlcl9zeXNfdGltZV9oID0g eWVzOyB0aGVuDQoNCg0KICAgICAgICAgICAgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+ Y29uZnRlc3QuJGFjX2V4dA0KLyogZW5kIGNvbmZkZWZzLmguICAqLw0KI2luY2x1ZGUgPHN5cy90 aW1lLmg+DQoNCl9BQ0VPRg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAiJGhvc3Rfb3MiIGluDQogICAgICAgICAgICAg ICAgIGFpeCopIGdsX2Fic25hbWVfY3BwPSIkYWNfY3BwIC1DIiA7Ow0KICAgICAgICAgICAgICAg ICAqKSAgICBnbF9hYnNuYW1lX2NwcD0iJGFjX2NwcCIgOzsNCiAgICAgICAgICAgICAgIGVzYWMN CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGdsX2N2X25leHRfc3lzX3RpbWVfaD0nIidgKGV2YWwgIiRnbF9hYnNuYW1lX2NwcCBjb25m dGVzdC4kYWNfZXh0IikgMj4mNSB8DQogICAgICAgICAgICAgICAgICBzZWQgLW4gJ1wjL3N5cy90 aW1lLmgjew0KICAgICAgICAgICAgICAgICAgICBzIy4qIlwoLiovc3lzL3RpbWUuaFwpIi4qI1wx Iw0KICAgICAgICAgICAgICAgICAgICBzI14vW14vXSMvLyYjDQogICAgICAgICAgICAgICAgICAg IHANCiAgICAgICAgICAgICAgICAgICAgcQ0KICAgICAgICAgICAgICAgICAgfSdgJyInDQogICAg ICAgICAgZWxzZQ0KICAgICAgICAgICAgICAgZ2xfY3ZfbmV4dF9zeXNfdGltZV9oPSc8J3N5cy90 aW1lLmgnPicNCiAgICAgICAgICAgICBmaQ0KDQoNCmZpDQp7ICRhc19lY2hvICIkYXNfbWU6JHth c19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGdsX2N2X25leHRfc3lzX3RpbWVfaCIgPiY1DQok YXNfZWNobyAiJGdsX2N2X25leHRfc3lzX3RpbWVfaCIgPiY2OyB9DQogICAgIGZpDQogICAgIE5F WFRfU1lTX1RJTUVfSD0kZ2xfY3ZfbmV4dF9zeXNfdGltZV9oDQoNCiAgICAgaWYgdGVzdCAkZ2xf Y3ZfaGF2ZV9pbmNsdWRlX25leHQgPSB5ZXMgfHwgdGVzdCAkZ2xfY3ZfaGF2ZV9pbmNsdWRlX25l eHQgPSBidWdneTsgdGhlbg0KICAgICAgICMgSU5DTFVERV9ORVhUX0FTX0ZJUlNUX0RJUkVDVElW RT0naW5jbHVkZV9uZXh0Jw0KICAgICAgIGdsX25leHRfYXNfZmlyc3RfZGlyZWN0aXZlPSc8J3N5 cy90aW1lLmgnPicNCiAgICAgZWxzZQ0KICAgICAgICMgSU5DTFVERV9ORVhUX0FTX0ZJUlNUX0RJ UkVDVElWRT0naW5jbHVkZScNCiAgICAgICBnbF9uZXh0X2FzX2ZpcnN0X2RpcmVjdGl2ZT0kZ2xf Y3ZfbmV4dF9zeXNfdGltZV9oDQogICAgIGZpDQogICAgIE5FWFRfQVNfRklSU1RfRElSRUNUSVZF X1NZU19USU1FX0g9JGdsX25leHRfYXNfZmlyc3RfZGlyZWN0aXZlDQoNCg0KDQoNCg0KICBpZiB0 ZXN0ICRhY19jdl9oZWFkZXJfc3lzX3RpbWVfaCAhPSB5ZXM7IHRoZW4NCiAgICBIQVZFX1NZU19U SU1FX0g9MA0KICBmaQ0KDQogIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5P fTogY2hlY2tpbmcgZm9yIHN0cnVjdCB0aW1ldmFsIiA+JjUNCiRhc19lY2hvX24gImNoZWNraW5n IGZvciBzdHJ1Y3QgdGltZXZhbC4uLiAiID4mNjsgfQ0KaWYgJHtnbF9jdl9zeXNfc3RydWN0X3Rp bWV2YWwrOn0gZmFsc2U7IHRoZW4gOg0KICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNg0KZWxz ZQ0KICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0DQovKiBlbmQg Y29uZmRlZnMuaC4gICovDQojaWYgSEFWRV9TWVNfVElNRV9IDQogICAgICAgICAgICAgI2luY2x1 ZGUgPHN5cy90aW1lLmg+DQogICAgICAgICAgICAjZW5kaWYNCiAgICAgICAgICAgICNpbmNsdWRl IDx0aW1lLmg+DQoNCmludA0KbWFpbiAoKQ0Kew0Kc3RhdGljIHN0cnVjdCB0aW1ldmFsIHg7IHgu dHZfc2VjID0geC50dl91c2VjOw0KICA7DQogIHJldHVybiAwOw0KfQ0KX0FDRU9GDQppZiBhY19m bl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6DQogIGdsX2N2X3N5c19zdHJ1Y3RfdGlt ZXZhbD15ZXMNCmVsc2UNCiAgZ2xfY3Zfc3lzX3N0cnVjdF90aW1ldmFsPW5vDQpmaQ0Kcm0gLWYg Y29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0DQpm aQ0KeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRnbF9j dl9zeXNfc3RydWN0X3RpbWV2YWwiID4mNQ0KJGFzX2VjaG8gIiRnbF9jdl9zeXNfc3RydWN0X3Rp bWV2YWwiID4mNjsgfQ0KICBpZiB0ZXN0ICRnbF9jdl9zeXNfc3RydWN0X3RpbWV2YWwgIT0geWVz OyB0aGVuDQogICAgSEFWRV9TVFJVQ1RfVElNRVZBTD0wDQogIGZpDQoNCg0KICAgIGZvciBnbF9m dW5jIGluIGdldHRpbWVvZmRheTsgZG8NCiAgICBhc19nbF9TeW1ib2w9YCRhc19lY2hvICJnbF9j dl9oYXZlX3Jhd19kZWNsXyRnbF9mdW5jIiB8ICRhc190cl9zaGANCiAgICB7ICRhc19lY2hvICIk YXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgJGdsX2Z1bmMgaXMg ZGVjbGFyZWQgd2l0aG91dCBhIG1hY3JvIiA+JjUNCiRhc19lY2hvX24gImNoZWNraW5nIHdoZXRo ZXIgJGdsX2Z1bmMgaXMgZGVjbGFyZWQgd2l0aG91dCBhIG1hY3JvLi4uICIgPiY2OyB9DQppZiBl dmFsIFwkeyRhc19nbF9TeW1ib2wrOn0gZmFsc2U7IHRoZW4gOg0KICAkYXNfZWNob19uICIoY2Fj aGVkKSAiID4mNg0KZWxzZQ0KICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4k YWNfZXh0DQovKiBlbmQgY29uZmRlZnMuaC4gICovDQoNCiNpZiBIQVZFX1NZU19USU1FX0gNCiMg aW5jbHVkZSA8c3lzL3RpbWUuaD4NCiNlbmRpZg0KI2luY2x1ZGUgPHRpbWUuaD4NCg0KaW50DQpt YWluICgpDQp7DQojdW5kZWYgJGdsX2Z1bmMNCiAgKHZvaWQpICRnbF9mdW5jOw0KICA7DQogIHJl dHVybiAwOw0KfQ0KX0FDRU9GDQppZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhl biA6DQogIGV2YWwgIiRhc19nbF9TeW1ib2w9eWVzIg0KZWxzZQ0KICBldmFsICIkYXNfZ2xfU3lt Ym9sPW5vIg0KZmkNCnJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQg Y29uZnRlc3QuJGFjX2V4dA0KZmkNCmV2YWwgYWNfcmVzPVwkJGFzX2dsX1N5bWJvbA0KCSAgICAg ICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX3Jl cyIgPiY1DQokYXNfZWNobyAiJGFjX3JlcyIgPiY2OyB9DQogICAgIGlmIGV2YWwgdGVzdCBcInhc JCIkYXNfZ2xfU3ltYm9sIlwiID0geCJ5ZXMiOyB0aGVuIDoNCiAgY2F0ID4+Y29uZmRlZnMuaCA8 PF9BQ0VPRg0KI2RlZmluZSBgJGFzX2VjaG8gIkhBVkVfUkFXX0RFQ0xfJGdsX2Z1bmMiIHwgJGFz X3RyX2NwcGAgMQ0KX0FDRU9GDQoNCiAgICAgICAgICAgICAgICAgICAgIGV2YWwgYWNfY3ZfaGF2 ZV9kZWNsXyRnbF9mdW5jPXllcw0KZmkNCiAgICAgIGRvbmUNCg0KDQoNCg0KDQoNCg0KDQoNCnsg JGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIHN0ZGJv b2wuaCB0aGF0IGNvbmZvcm1zIHRvIEM5OSIgPiY1DQokYXNfZWNob19uICJjaGVja2luZyBmb3Ig c3RkYm9vbC5oIHRoYXQgY29uZm9ybXMgdG8gQzk5Li4uICIgPiY2OyB9DQppZiAke2FjX2N2X2hl YWRlcl9zdGRib29sX2grOn0gZmFsc2U7IHRoZW4gOg0KICAkYXNfZWNob19uICIoY2FjaGVkKSAi ID4mNg0KZWxzZQ0KICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0 DQovKiBlbmQgY29uZmRlZnMuaC4gICovDQoNCiAgICAgICAgICAgICAjaW5jbHVkZSA8c3RkYm9v bC5oPg0KICAgICAgICAgICAgICNpZm5kZWYgYm9vbA0KICAgICAgICAgICAgICAiZXJyb3I6IGJv b2wgaXMgbm90IGRlZmluZWQiDQogICAgICAgICAgICAgI2VuZGlmDQogICAgICAgICAgICAgI2lm bmRlZiBmYWxzZQ0KICAgICAgICAgICAgICAiZXJyb3I6IGZhbHNlIGlzIG5vdCBkZWZpbmVkIg0K ICAgICAgICAgICAgICNlbmRpZg0KICAgICAgICAgICAgICNpZiBmYWxzZQ0KICAgICAgICAgICAg ICAiZXJyb3I6IGZhbHNlIGlzIG5vdCAwIg0KICAgICAgICAgICAgICNlbmRpZg0KICAgICAgICAg ICAgICNpZm5kZWYgdHJ1ZQ0KICAgICAgICAgICAgICAiZXJyb3I6IHRydWUgaXMgbm90IGRlZmlu ZWQiDQogICAgICAgICAgICAgI2VuZGlmDQogICAgICAgICAgICAgI2lmIHRydWUgIT0gMQ0KICAg ICAgICAgICAgICAiZXJyb3I6IHRydWUgaXMgbm90IDEiDQogICAgICAgICAgICAgI2VuZGlmDQog ICAgICAgICAgICAgI2lmbmRlZiBfX2Jvb2xfdHJ1ZV9mYWxzZV9hcmVfZGVmaW5lZA0KICAgICAg ICAgICAgICAiZXJyb3I6IF9fYm9vbF90cnVlX2ZhbHNlX2FyZV9kZWZpbmVkIGlzIG5vdCBkZWZp bmVkIg0KICAgICAgICAgICAgICNlbmRpZg0KDQogICAgICAgICAgICAgc3RydWN0IHMgeyBfQm9v bCBzOiAxOyBfQm9vbCB0OyB9IHM7DQoNCiAgICAgICAgICAgICBjaGFyIGFbdHJ1ZSA9PSAxID8g MSA6IC0xXTsNCiAgICAgICAgICAgICBjaGFyIGJbZmFsc2UgPT0gMCA/IDEgOiAtMV07DQogICAg ICAgICAgICAgY2hhciBjW19fYm9vbF90cnVlX2ZhbHNlX2FyZV9kZWZpbmVkID09IDEgPyAxIDog LTFdOw0KICAgICAgICAgICAgIGNoYXIgZFsoYm9vbCkgMC41ID09IHRydWUgPyAxIDogLTFdOw0K ICAgICAgICAgICAgIC8qIFNlZSBib2R5IG9mIG1haW4gcHJvZ3JhbSBmb3IgJ2UnLiAgKi8NCiAg ICAgICAgICAgICBjaGFyIGZbKF9Cb29sKSAwLjAgPT0gZmFsc2UgPyAxIDogLTFdOw0KICAgICAg ICAgICAgIGNoYXIgZ1t0cnVlXTsNCiAgICAgICAgICAgICBjaGFyIGhbc2l6ZW9mIChfQm9vbCld Ow0KICAgICAgICAgICAgIGNoYXIgaVtzaXplb2Ygcy50XTsNCiAgICAgICAgICAgICBlbnVtIHsg aiA9IGZhbHNlLCBrID0gdHJ1ZSwgbCA9IGZhbHNlICogdHJ1ZSwgbSA9IHRydWUgKiAyNTYgfTsN CiAgICAgICAgICAgICAvKiBUaGUgZm9sbG93aW5nIGZhaWxzIGZvcg0KICAgICAgICAgICAgICAg IEhQIGFDKysvQU5TSSBDIEIzOTEwQiBBLjA1LjU1IFtEZWMgMDQgMjAwM10uICovDQogICAgICAg ICAgICAgX0Jvb2wgblttXTsNCiAgICAgICAgICAgICBjaGFyIG9bc2l6ZW9mIG4gPT0gbSAqIHNp emVvZiBuWzBdID8gMSA6IC0xXTsNCiAgICAgICAgICAgICBjaGFyIHBbLTEgLSAoX0Jvb2wpIDAg PCAwICYmIC0xIC0gKGJvb2wpIDAgPCAwID8gMSA6IC0xXTsNCiAgICAgICAgICAgICAvKiBDYXRj aCBhIGJ1ZyBpbiBhbiBIUC1VWCBDIGNvbXBpbGVyLiAgU2VlDQogICAgICAgICAgICAgICAgaHR0 cDovL2djYy5nbnUub3JnL21sL2djYy1wYXRjaGVzLzIwMDMtMTIvbXNnMDIzMDMuaHRtbA0KICAg ICAgICAgICAgICAgIGh0dHA6Ly9saXN0cy5nbnUub3JnL2FyY2hpdmUvaHRtbC9idWctY29yZXV0 aWxzLzIwMDUtMTEvbXNnMDAxNjEuaHRtbA0KICAgICAgICAgICAgICAqLw0KICAgICAgICAgICAg IF9Cb29sIHEgPSB0cnVlOw0KICAgICAgICAgICAgIF9Cb29sICpwcSA9ICZxOw0KDQppbnQNCm1h aW4gKCkNCnsNCg0KICAgICAgICAgICAgIGJvb2wgZSA9ICZzOw0KICAgICAgICAgICAgICpwcSB8 PSBxOw0KICAgICAgICAgICAgICpwcSB8PSAhIHE7DQogICAgICAgICAgICAgLyogUmVmZXIgdG8g ZXZlcnkgZGVjbGFyZWQgdmFsdWUsIHRvIGF2b2lkIGNvbXBpbGVyIG9wdGltaXphdGlvbnMuICAq Lw0KICAgICAgICAgICAgIHJldHVybiAoIWEgKyAhYiArICFjICsgIWQgKyAhZSArICFmICsgIWcg KyAhaCArICFpICsgISFqICsgIWsgKyAhIWwNCiAgICAgICAgICAgICAgICAgICAgICsgIW0gKyAh biArICFvICsgIXAgKyAhcSArICFwcSk7DQoNCiAgOw0KICByZXR1cm4gMDsNCn0NCl9BQ0VPRg0K aWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOg0KICBhY19jdl9oZWFkZXJf c3RkYm9vbF9oPXllcw0KZWxzZQ0KICBhY19jdl9oZWFkZXJfc3RkYm9vbF9oPW5vDQpmaQ0Kcm0g LWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0 DQpmaQ0KeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRh Y19jdl9oZWFkZXJfc3RkYm9vbF9oIiA+JjUNCiRhc19lY2hvICIkYWNfY3ZfaGVhZGVyX3N0ZGJv b2xfaCIgPiY2OyB9DQogICBhY19mbl9jX2NoZWNrX3R5cGUgIiRMSU5FTk8iICJfQm9vbCIgImFj X2N2X3R5cGVfX0Jvb2wiICIkYWNfaW5jbHVkZXNfZGVmYXVsdCINCmlmIHRlc3QgIngkYWNfY3Zf dHlwZV9fQm9vbCIgPSB4eWVzOyB0aGVuIDoNCg0KY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRg0K I2RlZmluZSBIQVZFX19CT09MIDENCl9BQ0VPRg0KDQoNCmZpDQoNCg0KDQoNCg0KICAjIERlZmlu ZSB0d28gYWRkaXRpb25hbCB2YXJpYWJsZXMgdXNlZCBpbiB0aGUgTWFrZWZpbGUgc3Vic3RpdHV0 aW9uLg0KDQogIGlmIHRlc3QgIiRhY19jdl9oZWFkZXJfc3RkYm9vbF9oIiA9IHllczsgdGhlbg0K ICAgIFNUREJPT0xfSD0nJw0KICBlbHNlDQogICAgU1REQk9PTF9IPSdzdGRib29sLmgnDQogIGZp DQoNCiAgIGlmIHRlc3QgLW4gIiRTVERCT09MX0giOyB0aGVuDQogIEdMX0dFTkVSQVRFX1NUREJP T0xfSF9UUlVFPQ0KICBHTF9HRU5FUkFURV9TVERCT09MX0hfRkFMU0U9JyMnDQplbHNlDQogIEdM X0dFTkVSQVRFX1NUREJPT0xfSF9UUlVFPScjJw0KICBHTF9HRU5FUkFURV9TVERCT09MX0hfRkFM U0U9DQpmaQ0KDQoNCiAgaWYgdGVzdCAiJGFjX2N2X3R5cGVfX0Jvb2wiID0geWVzOyB0aGVuDQog ICAgSEFWRV9fQk9PTD0xDQogIGVsc2UNCiAgICBIQVZFX19CT09MPTANCiAgZmkNCg0KDQoNCiAg ICAgIGlmIHRlc3QgIlgkcHJlZml4IiA9ICJYTk9ORSI7IHRoZW4NCiAgICBhY2xfZmluYWxfcHJl Zml4PSIkYWNfZGVmYXVsdF9wcmVmaXgiDQogIGVsc2UNCiAgICBhY2xfZmluYWxfcHJlZml4PSIk cHJlZml4Ig0KICBmaQ0KICBpZiB0ZXN0ICJYJGV4ZWNfcHJlZml4IiA9ICJYTk9ORSI7IHRoZW4N CiAgICBhY2xfZmluYWxfZXhlY19wcmVmaXg9JyR7cHJlZml4fScNCiAgZWxzZQ0KICAgIGFjbF9m aW5hbF9leGVjX3ByZWZpeD0iJGV4ZWNfcHJlZml4Ig0KICBmaQ0KICBhY2xfc2F2ZV9wcmVmaXg9 IiRwcmVmaXgiDQogIHByZWZpeD0iJGFjbF9maW5hbF9wcmVmaXgiDQogIGV2YWwgYWNsX2ZpbmFs X2V4ZWNfcHJlZml4PVwiJGFjbF9maW5hbF9leGVjX3ByZWZpeFwiDQogIHByZWZpeD0iJGFjbF9z YXZlX3ByZWZpeCINCg0KDQojIENoZWNrIHdoZXRoZXIgLS13aXRoLWdudS1sZCB3YXMgZ2l2ZW4u DQppZiB0ZXN0ICIke3dpdGhfZ251X2xkK3NldH0iID0gc2V0OyB0aGVuIDoNCiAgd2l0aHZhbD0k d2l0aF9nbnVfbGQ7IHRlc3QgIiR3aXRodmFsIiA9IG5vIHx8IHdpdGhfZ251X2xkPXllcw0KZWxz ZQ0KICB3aXRoX2dudV9sZD1ubw0KZmkNCg0KIyBQcmVwYXJlIFBBVEhfU0VQQVJBVE9SLg0KIyBU aGUgdXNlciBpcyBhbHdheXMgcmlnaHQuDQppZiB0ZXN0ICIke1BBVEhfU0VQQVJBVE9SK3NldH0i ICE9IHNldDsgdGhlbg0KICAjIERldGVybWluZSBQQVRIX1NFUEFSQVRPUiBieSB0cnlpbmcgdG8g ZmluZCAvYmluL3NoIGluIGEgUEFUSCB3aGljaA0KICAjIGNvbnRhaW5zIG9ubHkgL2Jpbi4gTm90 ZSB0aGF0IGtzaCBsb29rcyBhbHNvIGF0IHRoZSBGUEFUSCB2YXJpYWJsZSwNCiAgIyBzbyB3ZSBo YXZlIHRvIHNldCB0aGF0IGFzIHdlbGwgZm9yIHRoZSB0ZXN0Lg0KICBQQVRIX1NFUEFSQVRPUj06 DQogIChQQVRIPScvYmluOy9iaW4nOyBGUEFUSD0kUEFUSDsgc2ggLWMgOikgPi9kZXYvbnVsbCAy PiYxIFwNCiAgICAmJiB7IChQQVRIPScvYmluOi9iaW4nOyBGUEFUSD0kUEFUSDsgc2ggLWMgOikg Pi9kZXYvbnVsbCAyPiYxIFwNCiAgICAgICAgICAgfHwgUEFUSF9TRVBBUkFUT1I9JzsnDQogICAg ICAgfQ0KZmkNCmFjX3Byb2c9bGQNCmlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuDQogICMgQ2hl Y2sgaWYgZ2NjIC1wcmludC1wcm9nLW5hbWU9bGQgZ2l2ZXMgYSBwYXRoLg0KICB7ICRhc19lY2hv ICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBsZCB1c2VkIGJ5IEdD QyIgPiY1DQokYXNfZWNob19uICJjaGVja2luZyBmb3IgbGQgdXNlZCBieSBHQ0MuLi4gIiA+JjY7 IH0NCiAgY2FzZSAkaG9zdCBpbg0KICAqLSotbWluZ3cqKQ0KICAgICMgZ2NjIGxlYXZlcyBhIHRy YWlsaW5nIGNhcnJpYWdlIHJldHVybiB3aGljaCB1cHNldHMgbWluZ3cNCiAgICBhY19wcm9nPWAo JENDIC1wcmludC1wcm9nLW5hbWU9bGQpIDI+JjUgfCB0ciAtZCAnXDAxNSdgIDs7DQogICopDQog ICAgYWNfcHJvZz1gKCRDQyAtcHJpbnQtcHJvZy1uYW1lPWxkKSAyPiY1YCA7Ow0KICBlc2FjDQog IGNhc2UgJGFjX3Byb2cgaW4NCiAgICAjIEFjY2VwdCBhYnNvbHV0ZSBwYXRocy4NCiAgICBbXFwv XSogfCBbQS1aYS16XTpbXFwvXSopDQogICAgICByZV9kaXJlbHQ9Jy9bXi9dW14vXSovXC5cLi8n DQogICAgICAjIENhbm9uaWNhbGl6ZSB0aGUgcGF0aCBvZiBsZA0KICAgICAgYWNfcHJvZz1gZWNo byAkYWNfcHJvZ3wgc2VkICdzJVxcXFwlLyVnJ2ANCiAgICAgIHdoaWxlIGVjaG8gJGFjX3Byb2cg fCBncmVwICIkcmVfZGlyZWx0IiA+IC9kZXYvbnVsbCAyPiYxOyBkbw0KICAgICAgICBhY19wcm9n PWBlY2hvICRhY19wcm9nfCBzZWQgInMlJHJlX2RpcmVsdCUvJSJgDQogICAgICBkb25lDQogICAg ICB0ZXN0IC16ICIkTEQiICYmIExEPSIkYWNfcHJvZyINCiAgICAgIDs7DQogICIiKQ0KICAgICMg SWYgaXQgZmFpbHMsIHRoZW4gcHJldGVuZCB3ZSBhcmVuJ3QgdXNpbmcgR0NDLg0KICAgIGFjX3By b2c9bGQNCiAgICA7Ow0KICAqKQ0KICAgICMgSWYgaXQgaXMgcmVsYXRpdmUsIHRoZW4gc2VhcmNo IGZvciB0aGUgZmlyc3QgbGQgaW4gUEFUSC4NCiAgICB3aXRoX2dudV9sZD11bmtub3duDQogICAg OzsNCiAgZXNhYw0KZWxpZiB0ZXN0ICIkd2l0aF9nbnVfbGQiID0geWVzOyB0aGVuDQogIHsgJGFz X2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIEdOVSBsZCIg PiY1DQokYXNfZWNob19uICJjaGVja2luZyBmb3IgR05VIGxkLi4uICIgPiY2OyB9DQplbHNlDQog IHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIG5v bi1HTlUgbGQiID4mNQ0KJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIG5vbi1HTlUgbGQuLi4gIiA+ JjY7IH0NCmZpDQppZiAke2FjbF9jdl9wYXRoX0xEKzp9IGZhbHNlOyB0aGVuIDoNCiAgJGFzX2Vj aG9fbiAiKGNhY2hlZCkgIiA+JjYNCmVsc2UNCiAgaWYgdGVzdCAteiAiJExEIjsgdGhlbg0KICBJ RlM9IiR7SUZTPSAJfSI7IGFjX3NhdmVfaWZzPSIkSUZTIjsgSUZTPSIke0lGU30ke1BBVEhfU0VQ QVJBVE9SLTp9Ig0KICBmb3IgYWNfZGlyIGluICRQQVRIOyBkbw0KICAgIHRlc3QgLXogIiRhY19k aXIiICYmIGFjX2Rpcj0uDQogICAgaWYgdGVzdCAtZiAiJGFjX2Rpci8kYWNfcHJvZyIgfHwgdGVz dCAtZiAiJGFjX2Rpci8kYWNfcHJvZyRhY19leGVleHQiOyB0aGVuDQogICAgICBhY2xfY3ZfcGF0 aF9MRD0iJGFjX2Rpci8kYWNfcHJvZyINCiAgICAgICMgQ2hlY2sgdG8gc2VlIGlmIHRoZSBwcm9n cmFtIGlzIEdOVSBsZC4gIEknZCByYXRoZXIgdXNlIC0tdmVyc2lvbiwNCiAgICAgICMgYnV0IGFw cGFyZW50bHkgc29tZSBHTlUgbGQncyBvbmx5IGFjY2VwdCAtdi4NCiAgICAgICMgQnJlYWsgb25s eSBpZiBpdCB3YXMgdGhlIEdOVS9ub24tR05VIGxkIHRoYXQgd2UgcHJlZmVyLg0KICAgICAgY2Fz ZSBgIiRhY2xfY3ZfcGF0aF9MRCIgLXYgMj4mMSA8IC9kZXYvbnVsbGAgaW4NCiAgICAgICpHTlUq IHwgKid3aXRoIEJGRCcqKQ0KICAgICAgICB0ZXN0ICIkd2l0aF9nbnVfbGQiICE9IG5vICYmIGJy ZWFrIDs7DQogICAgICAqKQ0KICAgICAgICB0ZXN0ICIkd2l0aF9nbnVfbGQiICE9IHllcyAmJiBi cmVhayA7Ow0KICAgICAgZXNhYw0KICAgIGZpDQogIGRvbmUNCiAgSUZTPSIkYWNfc2F2ZV9pZnMi DQplbHNlDQogIGFjbF9jdl9wYXRoX0xEPSIkTEQiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRo ZSB0ZXN0IHdpdGggYSBwYXRoLg0KZmkNCmZpDQoNCkxEPSIkYWNsX2N2X3BhdGhfTEQiDQppZiB0 ZXN0IC1uICIkTEQiOyB0aGVuDQogIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElO RU5PfTogcmVzdWx0OiAkTEQiID4mNQ0KJGFzX2VjaG8gIiRMRCIgPiY2OyB9DQplbHNlDQogIHsg JGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1DQok YXNfZWNobyAibm8iID4mNjsgfQ0KZmkNCnRlc3QgLXogIiRMRCIgJiYgYXNfZm5fZXJyb3IgJD8g Im5vIGFjY2VwdGFibGUgbGQgZm91bmQgaW4gXCRQQVRIIiAiJExJTkVOTyIgNQ0KeyAkYXNfZWNo byAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBpZiB0aGUgbGlua2VyICgk TEQpIGlzIEdOVSBsZCIgPiY1DQokYXNfZWNob19uICJjaGVja2luZyBpZiB0aGUgbGlua2VyICgk TEQpIGlzIEdOVSBsZC4uLiAiID4mNjsgfQ0KaWYgJHthY2xfY3ZfcHJvZ19nbnVfbGQrOn0gZmFs c2U7IHRoZW4gOg0KICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNg0KZWxzZQ0KICAjIEknZCBy YXRoZXIgdXNlIC0tdmVyc2lvbiBoZXJlLCBidXQgYXBwYXJlbnRseSBzb21lIEdOVSBsZCdzIG9u bHkgYWNjZXB0IC12Lg0KY2FzZSBgJExEIC12IDI+JjEgPC9kZXYvbnVsbGAgaW4NCipHTlUqIHwg Kid3aXRoIEJGRCcqKQ0KICBhY2xfY3ZfcHJvZ19nbnVfbGQ9eWVzIDs7DQoqKQ0KICBhY2xfY3Zf cHJvZ19nbnVfbGQ9bm8gOzsNCmVzYWMNCmZpDQp7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5l bm8tJExJTkVOT306IHJlc3VsdDogJGFjbF9jdl9wcm9nX2dudV9sZCIgPiY1DQokYXNfZWNobyAi JGFjbF9jdl9wcm9nX2dudV9sZCIgPiY2OyB9DQp3aXRoX2dudV9sZD0kYWNsX2N2X3Byb2dfZ251 X2xkDQoNCg0KDQoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9y IHNoYXJlZCBsaWJyYXJ5IHJ1biBwYXRoIG9yaWdpbiIgPiY1DQokYXNfZWNob19uICJjaGVja2lu ZyBmb3Igc2hhcmVkIGxpYnJhcnkgcnVuIHBhdGggb3JpZ2luLi4uICIgPiY2OyB9DQppZiAke2Fj bF9jdl9ycGF0aCs6fSBmYWxzZTsgdGhlbiA6DQogICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2 DQplbHNlDQoNCiAgICBDQz0iJENDIiBHQ0M9IiRHQ0MiIExERkxBR1M9IiRMREZMQUdTIiBMRD0i JExEIiB3aXRoX2dudV9sZD0iJHdpdGhfZ251X2xkIiBcDQogICAgJHtDT05GSUdfU0hFTEwtL2Jp bi9zaH0gIiRhY19hdXhfZGlyL2NvbmZpZy5ycGF0aCIgIiRob3N0IiA+IGNvbmZ0ZXN0LnNoDQog ICAgLiAuL2NvbmZ0ZXN0LnNoDQogICAgcm0gLWYgLi9jb25mdGVzdC5zaA0KICAgIGFjbF9jdl9y cGF0aD1kb25lDQoNCmZpDQp7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306 IHJlc3VsdDogJGFjbF9jdl9ycGF0aCIgPiY1DQokYXNfZWNobyAiJGFjbF9jdl9ycGF0aCIgPiY2 OyB9DQogIHdsPSIkYWNsX2N2X3dsIg0KICBhY2xfbGliZXh0PSIkYWNsX2N2X2xpYmV4dCINCiAg YWNsX3NobGliZXh0PSIkYWNsX2N2X3NobGliZXh0Ig0KICBhY2xfbGlibmFtZV9zcGVjPSIkYWNs X2N2X2xpYm5hbWVfc3BlYyINCiAgYWNsX2xpYnJhcnlfbmFtZXNfc3BlYz0iJGFjbF9jdl9saWJy YXJ5X25hbWVzX3NwZWMiDQogIGFjbF9oYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPSIkYWNsX2N2 X2hhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMiDQogIGFjbF9oYXJkY29kZV9saWJkaXJfc2VwYXJh dG9yPSIkYWNsX2N2X2hhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IiDQogIGFjbF9oYXJkY29kZV9k aXJlY3Q9IiRhY2xfY3ZfaGFyZGNvZGVfZGlyZWN0Ig0KICBhY2xfaGFyZGNvZGVfbWludXNfTD0i JGFjbF9jdl9oYXJkY29kZV9taW51c19MIg0KICAgICMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1y cGF0aCB3YXMgZ2l2ZW4uDQppZiB0ZXN0ICIke2VuYWJsZV9ycGF0aCtzZXR9IiA9IHNldDsgdGhl biA6DQogIGVuYWJsZXZhbD0kZW5hYmxlX3JwYXRoOyA6DQplbHNlDQogIGVuYWJsZV9ycGF0aD15 ZXMNCmZpDQoNCg0KDQoNCiAgYWNsX2xpYmRpcnN0ZW09bGliDQogIGFjbF9saWJkaXJzdGVtMj0N CiAgY2FzZSAiJGhvc3Rfb3MiIGluDQogICAgc29sYXJpcyopDQogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306 IGNoZWNraW5nIGZvciA2NC1iaXQgaG9zdCIgPiY1DQokYXNfZWNob19uICJjaGVja2luZyBmb3Ig NjQtYml0IGhvc3QuLi4gIiA+JjY7IH0NCmlmICR7Z2xfY3Zfc29sYXJpc182NGJpdCs6fSBmYWxz ZTsgdGhlbiA6DQogICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2DQplbHNlDQogIGNhdCBjb25m ZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQNCi8qIGVuZCBjb25mZGVmcy5oLiAg Ki8NCg0KI2lmZGVmIF9MUDY0DQpzaXh0eWZvdXIgYml0cw0KI2VuZGlmDQoNCl9BQ0VPRg0KaWYg KGV2YWwgIiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCIpIDI+JjUgfA0KICAkRUdSRVAgInNpeHR5 Zm91ciBiaXRzIiA+L2Rldi9udWxsIDI+JjE7IHRoZW4gOg0KICBnbF9jdl9zb2xhcmlzXzY0Yml0 PXllcw0KZWxzZQ0KICBnbF9jdl9zb2xhcmlzXzY0Yml0PW5vDQpmaQ0Kcm0gLWYgY29uZnRlc3Qq DQoNCg0KZmkNCnsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0 OiAkZ2xfY3Zfc29sYXJpc182NGJpdCIgPiY1DQokYXNfZWNobyAiJGdsX2N2X3NvbGFyaXNfNjRi aXQiID4mNjsgfQ0KICAgICAgaWYgdGVzdCAkZ2xfY3Zfc29sYXJpc182NGJpdCA9IHllczsgdGhl bg0KICAgICAgICBhY2xfbGliZGlyc3RlbT1saWIvNjQNCiAgICAgICAgY2FzZSAiJGhvc3RfY3B1 IiBpbg0KICAgICAgICAgIHNwYXJjKikgICAgICAgIGFjbF9saWJkaXJzdGVtMj1saWIvc3BhcmN2 OSA7Ow0KICAgICAgICAgIGkqODYgfCB4ODZfNjQpIGFjbF9saWJkaXJzdGVtMj1saWIvYW1kNjQg OzsNCiAgICAgICAgZXNhYw0KICAgICAgZmkNCiAgICAgIDs7DQogICAgKikNCiAgICAgIHNlYXJj aHBhdGg9YChMQ19BTEw9QyAkQ0MgLXByaW50LXNlYXJjaC1kaXJzKSAyPi9kZXYvbnVsbCB8IHNl ZCAtbiAtZSAncyxebGlicmFyaWVzOiAsLHAnIHwgc2VkIC1lICdzLF49LCwnYA0KICAgICAgaWYg dGVzdCAtbiAiJHNlYXJjaHBhdGgiOyB0aGVuDQogICAgICAgIGFjbF9zYXZlX0lGUz0iJHtJRlM9 IAl9IjsgSUZTPSI6Ig0KICAgICAgICBmb3Igc2VhcmNoZGlyIGluICRzZWFyY2hwYXRoOyBkbw0K ICAgICAgICAgIGlmIHRlc3QgLWQgIiRzZWFyY2hkaXIiOyB0aGVuDQogICAgICAgICAgICBjYXNl ICIkc2VhcmNoZGlyIiBpbg0KICAgICAgICAgICAgICAqL2xpYjY0LyB8ICovbGliNjQgKSBhY2xf bGliZGlyc3RlbT1saWI2NCA7Ow0KICAgICAgICAgICAgICAqLy4uLyB8ICovLi4gKQ0KICAgICAg ICAgICAgICAgICMgQmV0dGVyIGlnbm9yZSBkaXJlY3RvcmllcyBvZiB0aGlzIGZvcm0uIFRoZXkg YXJlIG1pc2xlYWRpbmcuDQogICAgICAgICAgICAgICAgOzsNCiAgICAgICAgICAgICAgKikgc2Vh cmNoZGlyPWBjZCAiJHNlYXJjaGRpciIgJiYgcHdkYA0KICAgICAgICAgICAgICAgICBjYXNlICIk c2VhcmNoZGlyIiBpbg0KICAgICAgICAgICAgICAgICAgICovbGliNjQgKSBhY2xfbGliZGlyc3Rl bT1saWI2NCA7Ow0KICAgICAgICAgICAgICAgICBlc2FjIDs7DQogICAgICAgICAgICBlc2FjDQog ICAgICAgICAgZmkNCiAgICAgICAgZG9uZQ0KICAgICAgICBJRlM9IiRhY2xfc2F2ZV9JRlMiDQog ICAgICBmaQ0KICAgICAgOzsNCiAgZXNhYw0KICB0ZXN0IC1uICIkYWNsX2xpYmRpcnN0ZW0yIiB8 fCBhY2xfbGliZGlyc3RlbTI9IiRhY2xfbGliZGlyc3RlbSINCg0KDQoNCg0KDQoNCg0KDQoNCg0K DQoNCiAgICB1c2VfYWRkaXRpb25hbD15ZXMNCg0KICBhY2xfc2F2ZV9wcmVmaXg9IiRwcmVmaXgi DQogIHByZWZpeD0iJGFjbF9maW5hbF9wcmVmaXgiDQogIGFjbF9zYXZlX2V4ZWNfcHJlZml4PSIk ZXhlY19wcmVmaXgiDQogIGV4ZWNfcHJlZml4PSIkYWNsX2ZpbmFsX2V4ZWNfcHJlZml4Ig0KDQog ICAgZXZhbCBhZGRpdGlvbmFsX2luY2x1ZGVkaXI9XCIkaW5jbHVkZWRpclwiDQogICAgZXZhbCBh ZGRpdGlvbmFsX2xpYmRpcj1cIiRsaWJkaXJcIg0KDQogIGV4ZWNfcHJlZml4PSIkYWNsX3NhdmVf ZXhlY19wcmVmaXgiDQogIHByZWZpeD0iJGFjbF9zYXZlX3ByZWZpeCINCg0KDQojIENoZWNrIHdo ZXRoZXIgLS13aXRoLWxpYmljb252LXByZWZpeCB3YXMgZ2l2ZW4uDQppZiB0ZXN0ICIke3dpdGhf bGliaWNvbnZfcHJlZml4K3NldH0iID0gc2V0OyB0aGVuIDoNCiAgd2l0aHZhbD0kd2l0aF9saWJp Y29udl9wcmVmaXg7DQogICAgaWYgdGVzdCAiWCR3aXRodmFsIiA9ICJYbm8iOyB0aGVuDQogICAg ICB1c2VfYWRkaXRpb25hbD1ubw0KICAgIGVsc2UNCiAgICAgIGlmIHRlc3QgIlgkd2l0aHZhbCIg PSAiWCI7IHRoZW4NCg0KICBhY2xfc2F2ZV9wcmVmaXg9IiRwcmVmaXgiDQogIHByZWZpeD0iJGFj bF9maW5hbF9wcmVmaXgiDQogIGFjbF9zYXZlX2V4ZWNfcHJlZml4PSIkZXhlY19wcmVmaXgiDQog IGV4ZWNfcHJlZml4PSIkYWNsX2ZpbmFsX2V4ZWNfcHJlZml4Ig0KDQogICAgICAgICAgZXZhbCBh ZGRpdGlvbmFsX2luY2x1ZGVkaXI9XCIkaW5jbHVkZWRpclwiDQogICAgICAgICAgZXZhbCBhZGRp dGlvbmFsX2xpYmRpcj1cIiRsaWJkaXJcIg0KDQogIGV4ZWNfcHJlZml4PSIkYWNsX3NhdmVfZXhl Y19wcmVmaXgiDQogIHByZWZpeD0iJGFjbF9zYXZlX3ByZWZpeCINCg0KICAgICAgZWxzZQ0KICAg ICAgICBhZGRpdGlvbmFsX2luY2x1ZGVkaXI9IiR3aXRodmFsL2luY2x1ZGUiDQogICAgICAgIGFk ZGl0aW9uYWxfbGliZGlyPSIkd2l0aHZhbC8kYWNsX2xpYmRpcnN0ZW0iDQogICAgICAgIGlmIHRl c3QgIiRhY2xfbGliZGlyc3RlbTIiICE9ICIkYWNsX2xpYmRpcnN0ZW0iIFwNCiAgICAgICAgICAg JiYgISB0ZXN0IC1kICIkd2l0aHZhbC8kYWNsX2xpYmRpcnN0ZW0iOyB0aGVuDQogICAgICAgICAg YWRkaXRpb25hbF9saWJkaXI9IiR3aXRodmFsLyRhY2xfbGliZGlyc3RlbTIiDQogICAgICAgIGZp DQogICAgICBmaQ0KICAgIGZpDQoNCmZpDQoNCiAgICAgIExJQklDT05WPQ0KICBMVExJQklDT05W PQ0KICBJTkNJQ09OVj0NCiAgTElCSUNPTlZfUFJFRklYPQ0KICAgICAgSEFWRV9MSUJJQ09OVj0N CiAgcnBhdGhkaXJzPQ0KICBsdHJwYXRoZGlycz0NCiAgbmFtZXNfYWxyZWFkeV9oYW5kbGVkPQ0K ICBuYW1lc19uZXh0X3JvdW5kPSdpY29udiAnDQogIHdoaWxlIHRlc3QgLW4gIiRuYW1lc19uZXh0 X3JvdW5kIjsgZG8NCiAgICBuYW1lc190aGlzX3JvdW5kPSIkbmFtZXNfbmV4dF9yb3VuZCINCiAg ICBuYW1lc19uZXh0X3JvdW5kPQ0KICAgIGZvciBuYW1lIGluICRuYW1lc190aGlzX3JvdW5kOyBk bw0KICAgICAgYWxyZWFkeV9oYW5kbGVkPQ0KICAgICAgZm9yIG4gaW4gJG5hbWVzX2FscmVhZHlf aGFuZGxlZDsgZG8NCiAgICAgICAgaWYgdGVzdCAiJG4iID0gIiRuYW1lIjsgdGhlbg0KICAgICAg ICAgIGFscmVhZHlfaGFuZGxlZD15ZXMNCiAgICAgICAgICBicmVhaw0KICAgICAgICBmaQ0KICAg ICAgZG9uZQ0KICAgICAgaWYgdGVzdCAteiAiJGFscmVhZHlfaGFuZGxlZCI7IHRoZW4NCiAgICAg ICAgbmFtZXNfYWxyZWFkeV9oYW5kbGVkPSIkbmFtZXNfYWxyZWFkeV9oYW5kbGVkICRuYW1lIg0K ICAgICAgICAgICAgICAgICAgICAgICAgdXBwZXJuYW1lPWBlY2hvICIkbmFtZSIgfCBzZWQgLWUg J3l8YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXouLystfEFCQ0RFRkdISUpLTE1OT1BRUlNUVVZX WFlaX19fX3wnYA0KICAgICAgICBldmFsIHZhbHVlPVwiXCRIQVZFX0xJQiR1cHBlcm5hbWVcIg0K ICAgICAgICBpZiB0ZXN0IC1uICIkdmFsdWUiOyB0aGVuDQogICAgICAgICAgaWYgdGVzdCAiJHZh bHVlIiA9IHllczsgdGhlbg0KICAgICAgICAgICAgZXZhbCB2YWx1ZT1cIlwkTElCJHVwcGVybmFt ZVwiDQogICAgICAgICAgICB0ZXN0IC16ICIkdmFsdWUiIHx8IExJQklDT05WPSIke0xJQklDT05W fSR7TElCSUNPTlY6KyB9JHZhbHVlIg0KICAgICAgICAgICAgZXZhbCB2YWx1ZT1cIlwkTFRMSUIk dXBwZXJuYW1lXCINCiAgICAgICAgICAgIHRlc3QgLXogIiR2YWx1ZSIgfHwgTFRMSUJJQ09OVj0i JHtMVExJQklDT05WfSR7TFRMSUJJQ09OVjorIH0kdmFsdWUiDQogICAgICAgICAgZWxzZQ0KICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOg0KICAgICAgICAgIGZpDQogICAgICAg IGVsc2UNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvdW5kX2Rpcj0NCiAgICAgICAg ICBmb3VuZF9sYT0NCiAgICAgICAgICBmb3VuZF9zbz0NCiAgICAgICAgICBmb3VuZF9hPQ0KICAg ICAgICAgIGV2YWwgbGlibmFtZT1cIiRhY2xfbGlibmFtZV9zcGVjXCIgICAgIyB0eXBpY2FsbHk6 IGxpYm5hbWU9bGliJG5hbWUNCiAgICAgICAgICBpZiB0ZXN0IC1uICIkYWNsX3NobGliZXh0Ijsg dGhlbg0KICAgICAgICAgICAgc2hyZXh0PSIuJGFjbF9zaGxpYmV4dCIgICAgICAgICAgICAgIyB0 eXBpY2FsbHk6IHNocmV4dD0uc28NCiAgICAgICAgICBlbHNlDQogICAgICAgICAgICBzaHJleHQ9 DQogICAgICAgICAgZmkNCiAgICAgICAgICBpZiB0ZXN0ICR1c2VfYWRkaXRpb25hbCA9IHllczsg dGhlbg0KICAgICAgICAgICAgZGlyPSIkYWRkaXRpb25hbF9saWJkaXIiDQogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0IC1uICIkYWNsX3NobGliZXh0IjsgdGhlbg0K ICAgICAgICAgICAgICBpZiB0ZXN0IC1mICIkZGlyLyRsaWJuYW1lJHNocmV4dCI7IHRoZW4NCiAg ICAgICAgICAgICAgICBmb3VuZF9kaXI9IiRkaXIiDQogICAgICAgICAgICAgICAgZm91bmRfc289 IiRkaXIvJGxpYm5hbWUkc2hyZXh0Ig0KICAgICAgICAgICAgICBlbHNlDQogICAgICAgICAgICAg ICAgaWYgdGVzdCAiJGFjbF9saWJyYXJ5X25hbWVzX3NwZWMiID0gJyRsaWJuYW1lJHNocmV4dCR2 ZXJzdWZmaXgnOyB0aGVuDQogICAgICAgICAgICAgICAgICB2ZXI9YChjZCAiJGRpciIgJiYgXA0K ICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGYgaW4gIiRsaWJuYW1lJHNocmV4dCIuKjsgZG8g ZWNobyAiJGYiOyBkb25lIFwNCiAgICAgICAgICAgICAgICAgICAgICAgIHwgc2VkIC1lICJzLF4k bGlibmFtZSRzaHJleHRcXFxcLiwsIiBcDQogICAgICAgICAgICAgICAgICAgICAgICB8IHNvcnQg LXQgJy4nIC1uIC1yIC1rMSwxIC1rMiwyIC1rMywzIC1rNCw0IC1rNSw1IFwNCiAgICAgICAgICAg ICAgICAgICAgICAgIHwgc2VkIDFxICkgMj4vZGV2L251bGxgDQogICAgICAgICAgICAgICAgICBp ZiB0ZXN0IC1uICIkdmVyIiAmJiB0ZXN0IC1mICIkZGlyLyRsaWJuYW1lJHNocmV4dC4kdmVyIjsg dGhlbg0KICAgICAgICAgICAgICAgICAgICBmb3VuZF9kaXI9IiRkaXIiDQogICAgICAgICAgICAg ICAgICAgIGZvdW5kX3NvPSIkZGlyLyRsaWJuYW1lJHNocmV4dC4kdmVyIg0KICAgICAgICAgICAg ICAgICAgZmkNCiAgICAgICAgICAgICAgICBlbHNlDQogICAgICAgICAgICAgICAgICBldmFsIGxp YnJhcnlfbmFtZXM9XCIkYWNsX2xpYnJhcnlfbmFtZXNfc3BlY1wiDQogICAgICAgICAgICAgICAg ICBmb3IgZiBpbiAkbGlicmFyeV9uYW1lczsgZG8NCiAgICAgICAgICAgICAgICAgICAgaWYgdGVz dCAtZiAiJGRpci8kZiI7IHRoZW4NCiAgICAgICAgICAgICAgICAgICAgICBmb3VuZF9kaXI9IiRk aXIiDQogICAgICAgICAgICAgICAgICAgICAgZm91bmRfc289IiRkaXIvJGYiDQogICAgICAgICAg ICAgICAgICAgICAgYnJlYWsNCiAgICAgICAgICAgICAgICAgICAgZmkNCiAgICAgICAgICAgICAg ICAgIGRvbmUNCiAgICAgICAgICAgICAgICBmaQ0KICAgICAgICAgICAgICBmaQ0KICAgICAgICAg ICAgZmkNCiAgICAgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgIlgkZm91bmRfZGlyIiA9ICJY IjsgdGhlbg0KICAgICAgICAgICAgICBpZiB0ZXN0IC1mICIkZGlyLyRsaWJuYW1lLiRhY2xfbGli ZXh0IjsgdGhlbg0KICAgICAgICAgICAgICAgIGZvdW5kX2Rpcj0iJGRpciINCiAgICAgICAgICAg ICAgICBmb3VuZF9hPSIkZGlyLyRsaWJuYW1lLiRhY2xfbGliZXh0Ig0KICAgICAgICAgICAgICBm aQ0KICAgICAgICAgICAgZmkNCiAgICAgICAgICAgIGlmIHRlc3QgIlgkZm91bmRfZGlyIiAhPSAi WCI7IHRoZW4NCiAgICAgICAgICAgICAgaWYgdGVzdCAtZiAiJGRpci8kbGlibmFtZS5sYSI7IHRo ZW4NCiAgICAgICAgICAgICAgICBmb3VuZF9sYT0iJGRpci8kbGlibmFtZS5sYSINCiAgICAgICAg ICAgICAgZmkNCiAgICAgICAgICAgIGZpDQogICAgICAgICAgZmkNCiAgICAgICAgICBpZiB0ZXN0 ICJYJGZvdW5kX2RpciIgPSAiWCI7IHRoZW4NCiAgICAgICAgICAgIGZvciB4IGluICRMREZMQUdT ICRMVExJQklDT05WOyBkbw0KDQogIGFjbF9zYXZlX3ByZWZpeD0iJHByZWZpeCINCiAgcHJlZml4 PSIkYWNsX2ZpbmFsX3ByZWZpeCINCiAgYWNsX3NhdmVfZXhlY19wcmVmaXg9IiRleGVjX3ByZWZp eCINCiAgZXhlY19wcmVmaXg9IiRhY2xfZmluYWxfZXhlY19wcmVmaXgiDQogIGV2YWwgeD1cIiR4 XCINCiAgZXhlY19wcmVmaXg9IiRhY2xfc2F2ZV9leGVjX3ByZWZpeCINCiAgcHJlZml4PSIkYWNs X3NhdmVfcHJlZml4Ig0KDQogICAgICAgICAgICAgIGNhc2UgIiR4IiBpbg0KICAgICAgICAgICAg ICAgIC1MKikNCiAgICAgICAgICAgICAgICAgIGRpcj1gZWNobyAiWCR4IiB8IHNlZCAtZSAncy9e WC1MLy8nYA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAtbiAi JGFjbF9zaGxpYmV4dCI7IHRoZW4NCiAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAtZiAiJGRp ci8kbGlibmFtZSRzaHJleHQiOyB0aGVuDQogICAgICAgICAgICAgICAgICAgICAgZm91bmRfZGly PSIkZGlyIg0KICAgICAgICAgICAgICAgICAgICAgIGZvdW5kX3NvPSIkZGlyLyRsaWJuYW1lJHNo cmV4dCINCiAgICAgICAgICAgICAgICAgICAgZWxzZQ0KICAgICAgICAgICAgICAgICAgICAgIGlm IHRlc3QgIiRhY2xfbGlicmFyeV9uYW1lc19zcGVjIiA9ICckbGlibmFtZSRzaHJleHQkdmVyc3Vm Zml4JzsgdGhlbg0KICAgICAgICAgICAgICAgICAgICAgICAgdmVyPWAoY2QgIiRkaXIiICYmIFwN CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBmIGluICIkbGlibmFtZSRzaHJleHQi Lio7IGRvIGVjaG8gIiRmIjsgZG9uZSBcDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8 IHNlZCAtZSAicyxeJGxpYm5hbWUkc2hyZXh0XFxcXC4sLCIgXA0KICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgfCBzb3J0IC10ICcuJyAtbiAtciAtazEsMSAtazIsMiAtazMsMyAtazQsNCAt azUsNSBcDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHNlZCAxcSApIDI+L2Rldi9u dWxsYA0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAtbiAiJHZlciIgJiYgdGVzdCAt ZiAiJGRpci8kbGlibmFtZSRzaHJleHQuJHZlciI7IHRoZW4NCiAgICAgICAgICAgICAgICAgICAg ICAgICAgZm91bmRfZGlyPSIkZGlyIg0KICAgICAgICAgICAgICAgICAgICAgICAgICBmb3VuZF9z bz0iJGRpci8kbGlibmFtZSRzaHJleHQuJHZlciINCiAgICAgICAgICAgICAgICAgICAgICAgIGZp DQogICAgICAgICAgICAgICAgICAgICAgZWxzZQ0KICAgICAgICAgICAgICAgICAgICAgICAgZXZh bCBsaWJyYXJ5X25hbWVzPVwiJGFjbF9saWJyYXJ5X25hbWVzX3NwZWNcIg0KICAgICAgICAgICAg ICAgICAgICAgICAgZm9yIGYgaW4gJGxpYnJhcnlfbmFtZXM7IGRvDQogICAgICAgICAgICAgICAg ICAgICAgICAgIGlmIHRlc3QgLWYgIiRkaXIvJGYiOyB0aGVuDQogICAgICAgICAgICAgICAgICAg ICAgICAgICAgZm91bmRfZGlyPSIkZGlyIg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZv dW5kX3NvPSIkZGlyLyRmIg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrDQogICAg ICAgICAgICAgICAgICAgICAgICAgIGZpDQogICAgICAgICAgICAgICAgICAgICAgICBkb25lDQog ICAgICAgICAgICAgICAgICAgICAgZmkNCiAgICAgICAgICAgICAgICAgICAgZmkNCiAgICAgICAg ICAgICAgICAgIGZpDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0 ICJYJGZvdW5kX2RpciIgPSAiWCI7IHRoZW4NCiAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAt ZiAiJGRpci8kbGlibmFtZS4kYWNsX2xpYmV4dCI7IHRoZW4NCiAgICAgICAgICAgICAgICAgICAg ICBmb3VuZF9kaXI9IiRkaXIiDQogICAgICAgICAgICAgICAgICAgICAgZm91bmRfYT0iJGRpci8k bGlibmFtZS4kYWNsX2xpYmV4dCINCiAgICAgICAgICAgICAgICAgICAgZmkNCiAgICAgICAgICAg ICAgICAgIGZpDQogICAgICAgICAgICAgICAgICBpZiB0ZXN0ICJYJGZvdW5kX2RpciIgIT0gIlgi OyB0aGVuDQogICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgLWYgIiRkaXIvJGxpYm5hbWUubGEi OyB0aGVuDQogICAgICAgICAgICAgICAgICAgICAgZm91bmRfbGE9IiRkaXIvJGxpYm5hbWUubGEi DQogICAgICAgICAgICAgICAgICAgIGZpDQogICAgICAgICAgICAgICAgICBmaQ0KICAgICAgICAg ICAgICAgICAgOzsNCiAgICAgICAgICAgICAgZXNhYw0KICAgICAgICAgICAgICBpZiB0ZXN0ICJY JGZvdW5kX2RpciIgIT0gIlgiOyB0aGVuDQogICAgICAgICAgICAgICAgYnJlYWsNCiAgICAgICAg ICAgICAgZmkNCiAgICAgICAgICAgIGRvbmUNCiAgICAgICAgICBmaQ0KICAgICAgICAgIGlmIHRl c3QgIlgkZm91bmRfZGlyIiAhPSAiWCI7IHRoZW4NCiAgICAgICAgICAgICAgICAgICAgICAgIExU TElCSUNPTlY9IiR7TFRMSUJJQ09OVn0ke0xUTElCSUNPTlY6KyB9LUwkZm91bmRfZGlyIC1sJG5h bWUiDQogICAgICAgICAgICBpZiB0ZXN0ICJYJGZvdW5kX3NvIiAhPSAiWCI7IHRoZW4NCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgdGVz dCAiJGVuYWJsZV9ycGF0aCIgPSBubyBcDQogICAgICAgICAgICAgICAgIHx8IHRlc3QgIlgkZm91 bmRfZGlyIiA9ICJYL3Vzci8kYWNsX2xpYmRpcnN0ZW0iIFwNCiAgICAgICAgICAgICAgICAgfHwg dGVzdCAiWCRmb3VuZF9kaXIiID0gIlgvdXNyLyRhY2xfbGliZGlyc3RlbTIiOyB0aGVuDQogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIExJQklDT05WPSIke0xJQklDT05WfSR7TElCSUNP TlY6KyB9JGZvdW5kX3NvIg0KICAgICAgICAgICAgICBlbHNlDQogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGhhdmVpdD0NCiAgICAgICAgICAgICAgICBmb3IgeCBpbiAkbHRycGF0aGRpcnM7IGRvDQog ICAgICAgICAgICAgICAgICBpZiB0ZXN0ICJYJHgiID0gIlgkZm91bmRfZGlyIjsgdGhlbg0KICAg ICAgICAgICAgICAgICAgICBoYXZlaXQ9eWVzDQogICAgICAgICAgICAgICAgICAgIGJyZWFrDQog ICAgICAgICAgICAgICAgICBmaQ0KICAgICAgICAgICAgICAgIGRvbmUNCiAgICAgICAgICAgICAg ICBpZiB0ZXN0IC16ICIkaGF2ZWl0IjsgdGhlbg0KICAgICAgICAgICAgICAgICAgbHRycGF0aGRp cnM9IiRsdHJwYXRoZGlycyAkZm91bmRfZGlyIg0KICAgICAgICAgICAgICAgIGZpDQogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgIiRhY2xfaGFyZGNvZGVfZGlyZWN0IiA9 IHllczsgdGhlbg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgTElCSUNPTlY9IiR7TElCSUNPTlZ9JHtMSUJJQ09OVjorIH0kZm91bmRfc28iDQog ICAgICAgICAgICAgICAgZWxzZQ0KICAgICAgICAgICAgICAgICAgaWYgdGVzdCAtbiAiJGFjbF9o YXJkY29kZV9saWJkaXJfZmxhZ19zcGVjIiAmJiB0ZXN0ICIkYWNsX2hhcmRjb2RlX21pbnVzX0wi ID0gbm87IHRoZW4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIExJQklDT05WPSIke0xJQklDT05WfSR7TElCSUNPTlY6KyB9JGZvdW5k X3NvIg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgaGF2ZWl0PQ0KICAgICAgICAgICAgICAgICAgICBmb3IgeCBpbiAkcnBhdGhkaXJz OyBkbw0KICAgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgIlgkeCIgPSAiWCRmb3VuZF9kaXIi OyB0aGVuDQogICAgICAgICAgICAgICAgICAgICAgICBoYXZlaXQ9eWVzDQogICAgICAgICAgICAg ICAgICAgICAgICBicmVhaw0KICAgICAgICAgICAgICAgICAgICAgIGZpDQogICAgICAgICAgICAg ICAgICAgIGRvbmUNCiAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAteiAiJGhhdmVpdCI7IHRo ZW4NCiAgICAgICAgICAgICAgICAgICAgICBycGF0aGRpcnM9IiRycGF0aGRpcnMgJGZvdW5kX2Rp ciINCiAgICAgICAgICAgICAgICAgICAgZmkNCiAgICAgICAgICAgICAgICAgIGVsc2UNCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgaGF2ZWl0PQ0KICAgICAgICAgICAgICAgICAgICBmb3IgeCBpbiAk TERGTEFHUyAkTElCSUNPTlY7IGRvDQoNCiAgYWNsX3NhdmVfcHJlZml4PSIkcHJlZml4Ig0KICBw cmVmaXg9IiRhY2xfZmluYWxfcHJlZml4Ig0KICBhY2xfc2F2ZV9leGVjX3ByZWZpeD0iJGV4ZWNf cHJlZml4Ig0KICBleGVjX3ByZWZpeD0iJGFjbF9maW5hbF9leGVjX3ByZWZpeCINCiAgZXZhbCB4 PVwiJHhcIg0KICBleGVjX3ByZWZpeD0iJGFjbF9zYXZlX2V4ZWNfcHJlZml4Ig0KICBwcmVmaXg9 IiRhY2xfc2F2ZV9wcmVmaXgiDQoNCiAgICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0ICJYJHgi ID0gIlgtTCRmb3VuZF9kaXIiOyB0aGVuDQogICAgICAgICAgICAgICAgICAgICAgICBoYXZlaXQ9 eWVzDQogICAgICAgICAgICAgICAgICAgICAgICBicmVhaw0KICAgICAgICAgICAgICAgICAgICAg IGZpDQogICAgICAgICAgICAgICAgICAgIGRvbmUNCiAgICAgICAgICAgICAgICAgICAgaWYgdGVz dCAteiAiJGhhdmVpdCI7IHRoZW4NCiAgICAgICAgICAgICAgICAgICAgICBMSUJJQ09OVj0iJHtM SUJJQ09OVn0ke0xJQklDT05WOisgfS1MJGZvdW5kX2RpciINCiAgICAgICAgICAgICAgICAgICAg ZmkNCiAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAiJGFjbF9oYXJkY29kZV9taW51c19MIiAh PSBubzsgdGhlbg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExJQklDT05WPSIke0xJ QklDT05WfSR7TElCSUNPTlY6KyB9JGZvdW5kX3NvIg0KICAgICAgICAgICAgICAgICAgICBlbHNl DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIExJQklDT05WPSIke0xJQklDT05WfSR7TElCSUNPTlY6KyB9LWwkbmFtZSINCiAgICAg ICAgICAgICAgICAgICAgZmkNCiAgICAgICAgICAgICAgICAgIGZpDQogICAgICAgICAgICAgICAg ZmkNCiAgICAgICAgICAgICAgZmkNCiAgICAgICAgICAgIGVsc2UNCiAgICAgICAgICAgICAgaWYg dGVzdCAiWCRmb3VuZF9hIiAhPSAiWCI7IHRoZW4NCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgTElCSUNPTlY9IiR7TElCSUNPTlZ9JHtMSUJJQ09OVjorIH0kZm91bmRfYSINCiAgICAg ICAgICAgICAgZWxzZQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgTElCSUNPTlY9IiR7TElCSUNPTlZ9JHtMSUJJQ09OVjorIH0tTCRmb3VuZF9kaXIgLWwk bmFtZSINCiAgICAgICAgICAgICAgZmkNCiAgICAgICAgICAgIGZpDQogICAgICAgICAgICAgICAg ICAgICAgICBhZGRpdGlvbmFsX2luY2x1ZGVkaXI9DQogICAgICAgICAgICBjYXNlICIkZm91bmRf ZGlyIiBpbg0KICAgICAgICAgICAgICAqLyRhY2xfbGliZGlyc3RlbSB8ICovJGFjbF9saWJkaXJz dGVtLykNCiAgICAgICAgICAgICAgICBiYXNlZGlyPWBlY2hvICJYJGZvdW5kX2RpciIgfCBzZWQg LWUgJ3MsXlgsLCcgLWUgInMsLyRhY2xfbGliZGlyc3RlbS8iJyokLCwnYA0KICAgICAgICAgICAg ICAgIGlmIHRlc3QgIiRuYW1lIiA9ICdpY29udic7IHRoZW4NCiAgICAgICAgICAgICAgICAgIExJ QklDT05WX1BSRUZJWD0iJGJhc2VkaXIiDQogICAgICAgICAgICAgICAgZmkNCiAgICAgICAgICAg ICAgICBhZGRpdGlvbmFsX2luY2x1ZGVkaXI9IiRiYXNlZGlyL2luY2x1ZGUiDQogICAgICAgICAg ICAgICAgOzsNCiAgICAgICAgICAgICAgKi8kYWNsX2xpYmRpcnN0ZW0yIHwgKi8kYWNsX2xpYmRp cnN0ZW0yLykNCiAgICAgICAgICAgICAgICBiYXNlZGlyPWBlY2hvICJYJGZvdW5kX2RpciIgfCBz ZWQgLWUgJ3MsXlgsLCcgLWUgInMsLyRhY2xfbGliZGlyc3RlbTIvIicqJCwsJ2ANCiAgICAgICAg ICAgICAgICBpZiB0ZXN0ICIkbmFtZSIgPSAnaWNvbnYnOyB0aGVuDQogICAgICAgICAgICAgICAg ICBMSUJJQ09OVl9QUkVGSVg9IiRiYXNlZGlyIg0KICAgICAgICAgICAgICAgIGZpDQogICAgICAg ICAgICAgICAgYWRkaXRpb25hbF9pbmNsdWRlZGlyPSIkYmFzZWRpci9pbmNsdWRlIg0KICAgICAg ICAgICAgICAgIDs7DQogICAgICAgICAgICBlc2FjDQogICAgICAgICAgICBpZiB0ZXN0ICJYJGFk ZGl0aW9uYWxfaW5jbHVkZWRpciIgIT0gIlgiOyB0aGVuDQogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAiWCRhZGRpdGlvbmFsX2lu Y2x1ZGVkaXIiICE9ICJYL3Vzci9pbmNsdWRlIjsgdGhlbg0KICAgICAgICAgICAgICAgIGhhdmVp dD0NCiAgICAgICAgICAgICAgICBpZiB0ZXN0ICJYJGFkZGl0aW9uYWxfaW5jbHVkZWRpciIgPSAi WC91c3IvbG9jYWwvaW5jbHVkZSI7IHRoZW4NCiAgICAgICAgICAgICAgICAgIGlmIHRlc3QgLW4g IiRHQ0MiOyB0aGVuDQogICAgICAgICAgICAgICAgICAgIGNhc2UgJGhvc3Rfb3MgaW4NCiAgICAg ICAgICAgICAgICAgICAgICBsaW51eCogfCBnbnUqIHwgaypic2QqLWdudSkgaGF2ZWl0PXllczs7 DQogICAgICAgICAgICAgICAgICAgIGVzYWMNCiAgICAgICAgICAgICAgICAgIGZpDQogICAgICAg ICAgICAgICAgZmkNCiAgICAgICAgICAgICAgICBpZiB0ZXN0IC16ICIkaGF2ZWl0IjsgdGhlbg0K ICAgICAgICAgICAgICAgICAgZm9yIHggaW4gJENQUEZMQUdTICRJTkNJQ09OVjsgZG8NCg0KICBh Y2xfc2F2ZV9wcmVmaXg9IiRwcmVmaXgiDQogIHByZWZpeD0iJGFjbF9maW5hbF9wcmVmaXgiDQog IGFjbF9zYXZlX2V4ZWNfcHJlZml4PSIkZXhlY19wcmVmaXgiDQogIGV4ZWNfcHJlZml4PSIkYWNs X2ZpbmFsX2V4ZWNfcHJlZml4Ig0KICBldmFsIHg9XCIkeFwiDQogIGV4ZWNfcHJlZml4PSIkYWNs X3NhdmVfZXhlY19wcmVmaXgiDQogIHByZWZpeD0iJGFjbF9zYXZlX3ByZWZpeCINCg0KICAgICAg ICAgICAgICAgICAgICBpZiB0ZXN0ICJYJHgiID0gIlgtSSRhZGRpdGlvbmFsX2luY2x1ZGVkaXIi OyB0aGVuDQogICAgICAgICAgICAgICAgICAgICAgaGF2ZWl0PXllcw0KICAgICAgICAgICAgICAg ICAgICAgIGJyZWFrDQogICAgICAgICAgICAgICAgICAgIGZpDQogICAgICAgICAgICAgICAgICBk b25lDQogICAgICAgICAgICAgICAgICBpZiB0ZXN0IC16ICIkaGF2ZWl0IjsgdGhlbg0KICAgICAg ICAgICAgICAgICAgICBpZiB0ZXN0IC1kICIkYWRkaXRpb25hbF9pbmNsdWRlZGlyIjsgdGhlbg0K ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJTkNJQ09OVj0iJHtJ TkNJQ09OVn0ke0lOQ0lDT05WOisgfS1JJGFkZGl0aW9uYWxfaW5jbHVkZWRpciINCiAgICAgICAg ICAgICAgICAgICAgZmkNCiAgICAgICAgICAgICAgICAgIGZpDQogICAgICAgICAgICAgICAgZmkN CiAgICAgICAgICAgICAgZmkNCiAgICAgICAgICAgIGZpDQogICAgICAgICAgICAgICAgICAgICAg ICBpZiB0ZXN0IC1uICIkZm91bmRfbGEiOyB0aGVuDQogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNhdmVfbGliZGlyPSIkbGliZGlyIg0KICAg ICAgICAgICAgICBjYXNlICIkZm91bmRfbGEiIGluDQogICAgICAgICAgICAgICAgKi8qIHwgKlxc KikgLiAiJGZvdW5kX2xhIiA7Ow0KICAgICAgICAgICAgICAgICopIC4gIi4vJGZvdW5kX2xhIiA7 Ow0KICAgICAgICAgICAgICBlc2FjDQogICAgICAgICAgICAgIGxpYmRpcj0iJHNhdmVfbGliZGly Ig0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBkZXAgaW4gJGRlcGVuZGVuY3lfbGli czsgZG8NCiAgICAgICAgICAgICAgICBjYXNlICIkZGVwIiBpbg0KICAgICAgICAgICAgICAgICAg LUwqKQ0KICAgICAgICAgICAgICAgICAgICBhZGRpdGlvbmFsX2xpYmRpcj1gZWNobyAiWCRkZXAi IHwgc2VkIC1lICdzL15YLUwvLydgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgaWYgdGVzdCAiWCRhZGRpdGlvbmFsX2xpYmRpciIgIT0gIlgvdXNyLyRhY2xf bGliZGlyc3RlbSIgXA0KICAgICAgICAgICAgICAgICAgICAgICAmJiB0ZXN0ICJYJGFkZGl0aW9u YWxfbGliZGlyIiAhPSAiWC91c3IvJGFjbF9saWJkaXJzdGVtMiI7IHRoZW4NCiAgICAgICAgICAg ICAgICAgICAgICBoYXZlaXQ9DQogICAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAiWCRhZGRp dGlvbmFsX2xpYmRpciIgPSAiWC91c3IvbG9jYWwvJGFjbF9saWJkaXJzdGVtIiBcDQogICAgICAg ICAgICAgICAgICAgICAgICAgfHwgdGVzdCAiWCRhZGRpdGlvbmFsX2xpYmRpciIgPSAiWC91c3Iv bG9jYWwvJGFjbF9saWJkaXJzdGVtMiI7IHRoZW4NCiAgICAgICAgICAgICAgICAgICAgICAgIGlm IHRlc3QgLW4gIiRHQ0MiOyB0aGVuDQogICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJGhv c3Rfb3MgaW4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW51eCogfCBnbnUqIHwgaypi c2QqLWdudSkgaGF2ZWl0PXllczs7DQogICAgICAgICAgICAgICAgICAgICAgICAgIGVzYWMNCiAg ICAgICAgICAgICAgICAgICAgICAgIGZpDQogICAgICAgICAgICAgICAgICAgICAgZmkNCiAgICAg ICAgICAgICAgICAgICAgICBpZiB0ZXN0IC16ICIkaGF2ZWl0IjsgdGhlbg0KICAgICAgICAgICAg ICAgICAgICAgICAgaGF2ZWl0PQ0KICAgICAgICAgICAgICAgICAgICAgICAgZm9yIHggaW4gJExE RkxBR1MgJExJQklDT05WOyBkbw0KDQogIGFjbF9zYXZlX3ByZWZpeD0iJHByZWZpeCINCiAgcHJl Zml4PSIkYWNsX2ZpbmFsX3ByZWZpeCINCiAgYWNsX3NhdmVfZXhlY19wcmVmaXg9IiRleGVjX3By ZWZpeCINCiAgZXhlY19wcmVmaXg9IiRhY2xfZmluYWxfZXhlY19wcmVmaXgiDQogIGV2YWwgeD1c IiR4XCINCiAgZXhlY19wcmVmaXg9IiRhY2xfc2F2ZV9leGVjX3ByZWZpeCINCiAgcHJlZml4PSIk YWNsX3NhdmVfcHJlZml4Ig0KDQogICAgICAgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgIlgk eCIgPSAiWC1MJGFkZGl0aW9uYWxfbGliZGlyIjsgdGhlbg0KICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGhhdmVpdD15ZXMNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaw0KICAg ICAgICAgICAgICAgICAgICAgICAgICBmaQ0KICAgICAgICAgICAgICAgICAgICAgICAgZG9uZQ0K ICAgICAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAteiAiJGhhdmVpdCI7IHRoZW4NCiAgICAg ICAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAtZCAiJGFkZGl0aW9uYWxfbGliZGlyIjsgdGhl bg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBMSUJJQ09OVj0iJHtMSUJJQ09OVn0ke0xJQklDT05WOisgfS1MJGFkZGl0aW9uYWxfbGliZGly Ig0KICAgICAgICAgICAgICAgICAgICAgICAgICBmaQ0KICAgICAgICAgICAgICAgICAgICAgICAg ZmkNCiAgICAgICAgICAgICAgICAgICAgICAgIGhhdmVpdD0NCiAgICAgICAgICAgICAgICAgICAg ICAgIGZvciB4IGluICRMREZMQUdTICRMVExJQklDT05WOyBkbw0KDQogIGFjbF9zYXZlX3ByZWZp eD0iJHByZWZpeCINCiAgcHJlZml4PSIkYWNsX2ZpbmFsX3ByZWZpeCINCiAgYWNsX3NhdmVfZXhl Y19wcmVmaXg9IiRleGVjX3ByZWZpeCINCiAgZXhlY19wcmVmaXg9IiRhY2xfZmluYWxfZXhlY19w cmVmaXgiDQogIGV2YWwgeD1cIiR4XCINCiAgZXhlY19wcmVmaXg9IiRhY2xfc2F2ZV9leGVjX3By ZWZpeCINCiAgcHJlZml4PSIkYWNsX3NhdmVfcHJlZml4Ig0KDQogICAgICAgICAgICAgICAgICAg ICAgICAgIGlmIHRlc3QgIlgkeCIgPSAiWC1MJGFkZGl0aW9uYWxfbGliZGlyIjsgdGhlbg0KICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGhhdmVpdD15ZXMNCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICBicmVhaw0KICAgICAgICAgICAgICAgICAgICAgICAgICBmaQ0KICAgICAgICAgICAg ICAgICAgICAgICAgZG9uZQ0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAteiAiJGhh dmVpdCI7IHRoZW4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAtZCAiJGFkZGl0 aW9uYWxfbGliZGlyIjsgdGhlbg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBMVExJQklDT05WPSIke0xUTElCSUNPTlZ9JHtMVExJQklDT05W OisgfS1MJGFkZGl0aW9uYWxfbGliZGlyIg0KICAgICAgICAgICAgICAgICAgICAgICAgICBmaQ0K ICAgICAgICAgICAgICAgICAgICAgICAgZmkNCiAgICAgICAgICAgICAgICAgICAgICBmaQ0KICAg ICAgICAgICAgICAgICAgICBmaQ0KICAgICAgICAgICAgICAgICAgICA7Ow0KICAgICAgICAgICAg ICAgICAgLVIqKQ0KICAgICAgICAgICAgICAgICAgICBkaXI9YGVjaG8gIlgkZGVwIiB8IHNlZCAt ZSAncy9eWC1SLy8nYA0KICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0ICIkZW5hYmxlX3JwYXRo IiAhPSBubzsgdGhlbg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgaGF2ZWl0PQ0KICAgICAgICAgICAgICAgICAgICAgIGZv ciB4IGluICRycGF0aGRpcnM7IGRvDQogICAgICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0ICJY JHgiID0gIlgkZGlyIjsgdGhlbg0KICAgICAgICAgICAgICAgICAgICAgICAgICBoYXZlaXQ9eWVz DQogICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrDQogICAgICAgICAgICAgICAgICAgICAg ICBmaQ0KICAgICAgICAgICAgICAgICAgICAgIGRvbmUNCiAgICAgICAgICAgICAgICAgICAgICBp ZiB0ZXN0IC16ICIkaGF2ZWl0IjsgdGhlbg0KICAgICAgICAgICAgICAgICAgICAgICAgcnBhdGhk aXJzPSIkcnBhdGhkaXJzICRkaXIiDQogICAgICAgICAgICAgICAgICAgICAgZmkNCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGhhdmVpdD0NCiAgICAgICAgICAgICAgICAgICAgICBmb3IgeCBpbiAkbHRycGF0aGRpcnM7IGRv DQogICAgICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0ICJYJHgiID0gIlgkZGlyIjsgdGhlbg0K ICAgICAgICAgICAgICAgICAgICAgICAgICBoYXZlaXQ9eWVzDQogICAgICAgICAgICAgICAgICAg ICAgICAgIGJyZWFrDQogICAgICAgICAgICAgICAgICAgICAgICBmaQ0KICAgICAgICAgICAgICAg ICAgICAgIGRvbmUNCiAgICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0IC16ICIkaGF2ZWl0Ijsg dGhlbg0KICAgICAgICAgICAgICAgICAgICAgICAgbHRycGF0aGRpcnM9IiRsdHJwYXRoZGlycyAk ZGlyIg0KICAgICAgICAgICAgICAgICAgICAgIGZpDQogICAgICAgICAgICAgICAgICAgIGZpDQog ICAgICAgICAgICAgICAgICAgIDs7DQogICAgICAgICAgICAgICAgICAtbCopDQogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZXNfbmV4dF9yb3VuZD0iJG5hbWVzX25l eHRfcm91bmQgImBlY2hvICJYJGRlcCIgfCBzZWQgLWUgJ3MvXlgtbC8vJ2ANCiAgICAgICAgICAg ICAgICAgICAgOzsNCiAgICAgICAgICAgICAgICAgICoubGEpDQogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIG5hbWVzX25leHRfcm91bmQ9IiRuYW1lc19uZXh0X3JvdW5kICJgZWNobyAiWCRkZXAiIHwg c2VkIC1lICdzLF5YLiovLCwnIC1lICdzLF5saWIsLCcgLWUgJ3MsXC5sYSQsLCdgDQogICAgICAg ICAgICAgICAgICAgIDs7DQogICAgICAgICAgICAgICAgICAqKQ0KICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIExJQklDT05WPSIke0xJQklDT05WfSR7TElCSUNPTlY6KyB9 JGRlcCINCiAgICAgICAgICAgICAgICAgICAgTFRMSUJJQ09OVj0iJHtMVExJQklDT05WfSR7TFRM SUJJQ09OVjorIH0kZGVwIg0KICAgICAgICAgICAgICAgICAgICA7Ow0KICAgICAgICAgICAgICAg IGVzYWMNCiAgICAgICAgICAgICAgZG9uZQ0KICAgICAgICAgICAgZmkNCiAgICAgICAgICBlbHNl DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBMSUJJQ09OVj0iJHtMSUJJQ09OVn0ke0xJQklDT05WOisgfS1sJG5hbWUiDQogICAgICAg ICAgICBMVExJQklDT05WPSIke0xUTElCSUNPTlZ9JHtMVExJQklDT05WOisgfS1sJG5hbWUiDQog ICAgICAgICAgZmkNCiAgICAgICAgZmkNCiAgICAgIGZpDQogICAgZG9uZQ0KICBkb25lDQogIGlm IHRlc3QgIlgkcnBhdGhkaXJzIiAhPSAiWCI7IHRoZW4NCiAgICBpZiB0ZXN0IC1uICIkYWNsX2hh cmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IiOyB0aGVuDQogICAgICAgICAgICAgICAgICAgICAgICBh bGxkaXJzPQ0KICAgICAgZm9yIGZvdW5kX2RpciBpbiAkcnBhdGhkaXJzOyBkbw0KICAgICAgICBh bGxkaXJzPSIke2FsbGRpcnN9JHthbGxkaXJzOiskYWNsX2hhcmRjb2RlX2xpYmRpcl9zZXBhcmF0 b3J9JGZvdW5kX2RpciINCiAgICAgIGRvbmUNCiAgICAgICAgICAgIGFjbF9zYXZlX2xpYmRpcj0i JGxpYmRpciINCiAgICAgIGxpYmRpcj0iJGFsbGRpcnMiDQogICAgICBldmFsIGZsYWc9XCIkYWNs X2hhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNcIg0KICAgICAgbGliZGlyPSIkYWNsX3NhdmVfbGli ZGlyIg0KICAgICAgTElCSUNPTlY9IiR7TElCSUNPTlZ9JHtMSUJJQ09OVjorIH0kZmxhZyINCiAg ICBlbHNlDQogICAgICAgICAgICBmb3IgZm91bmRfZGlyIGluICRycGF0aGRpcnM7IGRvDQogICAg ICAgIGFjbF9zYXZlX2xpYmRpcj0iJGxpYmRpciINCiAgICAgICAgbGliZGlyPSIkZm91bmRfZGly Ig0KICAgICAgICBldmFsIGZsYWc9XCIkYWNsX2hhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNcIg0K ICAgICAgICBsaWJkaXI9IiRhY2xfc2F2ZV9saWJkaXIiDQogICAgICAgIExJQklDT05WPSIke0xJ QklDT05WfSR7TElCSUNPTlY6KyB9JGZsYWciDQogICAgICBkb25lDQogICAgZmkNCiAgZmkNCiAg aWYgdGVzdCAiWCRsdHJwYXRoZGlycyIgIT0gIlgiOyB0aGVuDQogICAgICAgICAgICBmb3IgZm91 bmRfZGlyIGluICRsdHJwYXRoZGlyczsgZG8NCiAgICAgIExUTElCSUNPTlY9IiR7TFRMSUJJQ09O Vn0ke0xUTElCSUNPTlY6KyB9LVIkZm91bmRfZGlyIg0KICAgIGRvbmUNCiAgZmkNCg0KDQoNCg0K DQoNCg0KDQogIEdOVUxJQl9JQ09OVj0wOw0KICAgIElDT05WX0NPTlNUPTsNCiAgUkVQTEFDRV9J Q09OVj0wOw0KICBSRVBMQUNFX0lDT05WX09QRU49MDsNCiAgUkVQTEFDRV9JQ09OVl9VVEY9MDsN CiAgSUNPTlZfSD0nJzsNCiAgIGlmIHRlc3QgLW4gIiRJQ09OVl9IIjsgdGhlbg0KICBHTF9HRU5F UkFURV9JQ09OVl9IX1RSVUU9DQogIEdMX0dFTkVSQVRFX0lDT05WX0hfRkFMU0U9JyMnDQplbHNl DQogIEdMX0dFTkVSQVRFX0lDT05WX0hfVFJVRT0nIycNCiAgR0xfR0VORVJBVEVfSUNPTlZfSF9G QUxTRT0NCmZpDQoNCg0KDQoNCg0KDQoNCiAgICAgICAgICBhbV9zYXZlX0NQUEZMQUdTPSIkQ1BQ RkxBR1MiDQoNCiAgZm9yIGVsZW1lbnQgaW4gJElOQ0lDT05WOyBkbw0KICAgIGhhdmVpdD0NCiAg ICBmb3IgeCBpbiAkQ1BQRkxBR1M7IGRvDQoNCiAgYWNsX3NhdmVfcHJlZml4PSIkcHJlZml4Ig0K ICBwcmVmaXg9IiRhY2xfZmluYWxfcHJlZml4Ig0KICBhY2xfc2F2ZV9leGVjX3ByZWZpeD0iJGV4 ZWNfcHJlZml4Ig0KICBleGVjX3ByZWZpeD0iJGFjbF9maW5hbF9leGVjX3ByZWZpeCINCiAgZXZh bCB4PVwiJHhcIg0KICBleGVjX3ByZWZpeD0iJGFjbF9zYXZlX2V4ZWNfcHJlZml4Ig0KICBwcmVm aXg9IiRhY2xfc2F2ZV9wcmVmaXgiDQoNCiAgICAgIGlmIHRlc3QgIlgkeCIgPSAiWCRlbGVtZW50 IjsgdGhlbg0KICAgICAgICBoYXZlaXQ9eWVzDQogICAgICAgIGJyZWFrDQogICAgICBmaQ0KICAg IGRvbmUNCiAgICBpZiB0ZXN0IC16ICIkaGF2ZWl0IjsgdGhlbg0KICAgICAgQ1BQRkxBR1M9IiR7 Q1BQRkxBR1N9JHtDUFBGTEFHUzorIH0kZWxlbWVudCINCiAgICBmaQ0KICBkb25lDQoNCg0KICB7 ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBpY29u diIgPiY1DQokYXNfZWNob19uICJjaGVja2luZyBmb3IgaWNvbnYuLi4gIiA+JjY7IH0NCmlmICR7 YW1fY3ZfZnVuY19pY29udis6fSBmYWxzZTsgdGhlbiA6DQogICRhc19lY2hvX24gIihjYWNoZWQp ICIgPiY2DQplbHNlDQoNCiAgICBhbV9jdl9mdW5jX2ljb252PSJubywgY29uc2lkZXIgaW5zdGFs bGluZyBHTlUgbGliaWNvbnYiDQogICAgYW1fY3ZfbGliX2ljb252PW5vDQogICAgY2F0IGNvbmZk ZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dA0KLyogZW5kIGNvbmZkZWZzLmguICAq Lw0KDQojaW5jbHVkZSA8c3RkbGliLmg+DQojaW5jbHVkZSA8aWNvbnYuaD4NCg0KaW50DQptYWlu ICgpDQp7DQppY29udl90IGNkID0gaWNvbnZfb3BlbigiIiwiIik7DQogICAgICAgICAgIGljb252 KGNkLE5VTEwsTlVMTCxOVUxMLE5VTEwpOw0KICAgICAgICAgICBpY29udl9jbG9zZShjZCk7DQog IDsNCiAgcmV0dXJuIDA7DQp9DQpfQUNFT0YNCmlmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8i OyB0aGVuIDoNCiAgYW1fY3ZfZnVuY19pY29udj15ZXMNCmZpDQpybSAtZiBjb3JlIGNvbmZ0ZXN0 LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwNCiAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRl c3QuJGFjX2V4dA0KICAgIGlmIHRlc3QgIiRhbV9jdl9mdW5jX2ljb252IiAhPSB5ZXM7IHRoZW4N CiAgICAgIGFtX3NhdmVfTElCUz0iJExJQlMiDQogICAgICBMSUJTPSIkTElCUyAkTElCSUNPTlYi DQogICAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0DQovKiBl bmQgY29uZmRlZnMuaC4gICovDQoNCiNpbmNsdWRlIDxzdGRsaWIuaD4NCiNpbmNsdWRlIDxpY29u di5oPg0KDQppbnQNCm1haW4gKCkNCnsNCmljb252X3QgY2QgPSBpY29udl9vcGVuKCIiLCIiKTsN CiAgICAgICAgICAgICBpY29udihjZCxOVUxMLE5VTEwsTlVMTCxOVUxMKTsNCiAgICAgICAgICAg ICBpY29udl9jbG9zZShjZCk7DQogIDsNCiAgcmV0dXJuIDA7DQp9DQpfQUNFT0YNCmlmIGFjX2Zu X2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoNCiAgYW1fY3ZfbGliX2ljb252PXllcw0KICAg ICAgICBhbV9jdl9mdW5jX2ljb252PXllcw0KZmkNCnJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNv bmZ0ZXN0LiRhY19vYmpleHQgXA0KICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNf ZXh0DQogICAgICBMSUJTPSIkYW1fc2F2ZV9MSUJTIg0KICAgIGZpDQoNCmZpDQp7ICRhc19lY2hv ICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFtX2N2X2Z1bmNfaWNvbnYi ID4mNQ0KJGFzX2VjaG8gIiRhbV9jdl9mdW5jX2ljb252IiA+JjY7IH0NCiAgaWYgdGVzdCAiJGFt X2N2X2Z1bmNfaWNvbnYiID0geWVzOyB0aGVuDQogICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNf bGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3Igd29ya2luZyBpY29udiIgPiY1DQokYXNfZWNo b19uICJjaGVja2luZyBmb3Igd29ya2luZyBpY29udi4uLiAiID4mNjsgfQ0KaWYgJHthbV9jdl9m dW5jX2ljb252X3dvcmtzKzp9IGZhbHNlOyB0aGVuIDoNCiAgJGFzX2VjaG9fbiAiKGNhY2hlZCkg IiA+JjYNCmVsc2UNCg0KICAgICAgICAgICAgICAgICAgYW1fc2F2ZV9MSUJTPSIkTElCUyINCiAg ICAgIGlmIHRlc3QgJGFtX2N2X2xpYl9pY29udiA9IHllczsgdGhlbg0KICAgICAgICBMSUJTPSIk TElCUyAkTElCSUNPTlYiDQogICAgICBmaQ0KICAgICAgaWYgdGVzdCAiJGNyb3NzX2NvbXBpbGlu ZyIgPSB5ZXM7IHRoZW4gOg0KDQogICAgICAgICBjYXNlICIkaG9zdF9vcyIgaW4NCiAgICAgICAg ICAgYWl4KiB8IGhwdXgqKSBhbV9jdl9mdW5jX2ljb252X3dvcmtzPSJndWVzc2luZyBubyIgOzsN CiAgICAgICAgICAgKikgICAgICAgICAgICBhbV9jdl9mdW5jX2ljb252X3dvcmtzPSJndWVzc2lu ZyB5ZXMiIDs7DQogICAgICAgICBlc2FjDQoNCmVsc2UNCiAgY2F0IGNvbmZkZWZzLmggLSA8PF9B Q0VPRiA+Y29uZnRlc3QuJGFjX2V4dA0KLyogZW5kIGNvbmZkZWZzLmguICAqLw0KDQojaW5jbHVk ZSA8aWNvbnYuaD4NCiNpbmNsdWRlIDxzdHJpbmcuaD4NCmludCBtYWluICgpDQp7DQogIGludCBy ZXN1bHQgPSAwOw0KICAvKiBUZXN0IGFnYWluc3QgQUlYIDUuMSBidWc6IEZhaWx1cmVzIGFyZSBu b3QgZGlzdGluZ3Vpc2hhYmxlIGZyb20gc3VjY2Vzc2Z1bA0KICAgICByZXR1cm5zLiAgKi8NCiAg ew0KICAgIGljb252X3QgY2RfdXRmOF90b184ODU5MSA9IGljb252X29wZW4gKCJJU084ODU5LTEi LCAiVVRGLTgiKTsNCiAgICBpZiAoY2RfdXRmOF90b184ODU5MSAhPSAoaWNvbnZfdCkoLTEpKQ0K ICAgICAgew0KICAgICAgICBzdGF0aWMgY29uc3QgY2hhciBpbnB1dFtdID0gIlwzNDJcMjAyXDI1 NCI7IC8qIEVVUk8gU0lHTiAqLw0KICAgICAgICBjaGFyIGJ1ZlsxMF07DQogICAgICAgIGNvbnN0 IGNoYXIgKmlucHRyID0gaW5wdXQ7DQogICAgICAgIHNpemVfdCBpbmJ5dGVzbGVmdCA9IHN0cmxl biAoaW5wdXQpOw0KICAgICAgICBjaGFyICpvdXRwdHIgPSBidWY7DQogICAgICAgIHNpemVfdCBv dXRieXRlc2xlZnQgPSBzaXplb2YgKGJ1Zik7DQogICAgICAgIHNpemVfdCByZXMgPSBpY29udiAo Y2RfdXRmOF90b184ODU5MSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2hhciAqKikg JmlucHRyLCAmaW5ieXRlc2xlZnQsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgJm91dHB0 ciwgJm91dGJ5dGVzbGVmdCk7DQogICAgICAgIGlmIChyZXMgPT0gMCkNCiAgICAgICAgICByZXN1 bHQgfD0gMTsNCiAgICAgICAgaWNvbnZfY2xvc2UgKGNkX3V0ZjhfdG9fODg1OTEpOw0KICAgICAg fQ0KICB9DQogIC8qIFRlc3QgYWdhaW5zdCBTb2xhcmlzIDEwIGJ1ZzogRmFpbHVyZXMgYXJlIG5v dCBkaXN0aW5ndWlzaGFibGUgZnJvbQ0KICAgICBzdWNjZXNzZnVsIHJldHVybnMuICAqLw0KICB7 DQogICAgaWNvbnZfdCBjZF9hc2NpaV90b184ODU5MSA9IGljb252X29wZW4gKCJJU084ODU5LTEi LCAiNjQ2Iik7DQogICAgaWYgKGNkX2FzY2lpX3RvXzg4NTkxICE9IChpY29udl90KSgtMSkpDQog ICAgICB7DQogICAgICAgIHN0YXRpYyBjb25zdCBjaGFyIGlucHV0W10gPSAiXDI2MyI7DQogICAg ICAgIGNoYXIgYnVmWzEwXTsNCiAgICAgICAgY29uc3QgY2hhciAqaW5wdHIgPSBpbnB1dDsNCiAg ICAgICAgc2l6ZV90IGluYnl0ZXNsZWZ0ID0gc3RybGVuIChpbnB1dCk7DQogICAgICAgIGNoYXIg Km91dHB0ciA9IGJ1ZjsNCiAgICAgICAgc2l6ZV90IG91dGJ5dGVzbGVmdCA9IHNpemVvZiAoYnVm KTsNCiAgICAgICAgc2l6ZV90IHJlcyA9IGljb252IChjZF9hc2NpaV90b184ODU5MSwNCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAoY2hhciAqKikgJmlucHRyLCAmaW5ieXRlc2xlZnQsDQog ICAgICAgICAgICAgICAgICAgICAgICAgICAgJm91dHB0ciwgJm91dGJ5dGVzbGVmdCk7DQogICAg ICAgIGlmIChyZXMgPT0gMCkNCiAgICAgICAgICByZXN1bHQgfD0gMjsNCiAgICAgICAgaWNvbnZf Y2xvc2UgKGNkX2FzY2lpX3RvXzg4NTkxKTsNCiAgICAgIH0NCiAgfQ0KICAvKiBUZXN0IGFnYWlu c3QgQUlYIDYuMS4uNy4xIGJ1ZzogQnVmZmVyIG92ZXJydW4uICAqLw0KICB7DQogICAgaWNvbnZf dCBjZF84ODU5MV90b191dGY4ID0gaWNvbnZfb3BlbiAoIlVURi04IiwgIklTTy04ODU5LTEiKTsN CiAgICBpZiAoY2RfODg1OTFfdG9fdXRmOCAhPSAoaWNvbnZfdCkoLTEpKQ0KICAgICAgew0KICAg ICAgICBzdGF0aWMgY29uc3QgY2hhciBpbnB1dFtdID0gIlwzMDQiOw0KICAgICAgICBzdGF0aWMg Y2hhciBidWZbMl0gPSB7IChjaGFyKTB4REUsIChjaGFyKTB4QUQgfTsNCiAgICAgICAgY29uc3Qg Y2hhciAqaW5wdHIgPSBpbnB1dDsNCiAgICAgICAgc2l6ZV90IGluYnl0ZXNsZWZ0ID0gMTsNCiAg ICAgICAgY2hhciAqb3V0cHRyID0gYnVmOw0KICAgICAgICBzaXplX3Qgb3V0Ynl0ZXNsZWZ0ID0g MTsNCiAgICAgICAgc2l6ZV90IHJlcyA9IGljb252IChjZF84ODU5MV90b191dGY4LA0KICAgICAg ICAgICAgICAgICAgICAgICAgICAgIChjaGFyICoqKSAmaW5wdHIsICZpbmJ5dGVzbGVmdCwNCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAmb3V0cHRyLCAmb3V0Ynl0ZXNsZWZ0KTsNCiAgICAg ICAgaWYgKHJlcyAhPSAoc2l6ZV90KSgtMSkgfHwgb3V0cHRyIC0gYnVmID4gMSB8fCBidWZbMV0g IT0gKGNoYXIpMHhBRCkNCiAgICAgICAgICByZXN1bHQgfD0gNDsNCiAgICAgICAgaWNvbnZfY2xv c2UgKGNkXzg4NTkxX3RvX3V0ZjgpOw0KICAgICAgfQ0KICB9DQojaWYgMCAvKiBUaGlzIGJ1ZyBj b3VsZCBiZSB3b3JrZWQgYXJvdW5kIGJ5IHRoZSBjYWxsZXIuICAqLw0KICAvKiBUZXN0IGFnYWlu c3QgSFAtVVggMTEuMTEgYnVnOiBQb3NpdGl2ZSByZXR1cm4gdmFsdWUgaW5zdGVhZCBvZiAwLiAg Ki8NCiAgew0KICAgIGljb252X3QgY2RfODg1OTFfdG9fdXRmOCA9IGljb252X29wZW4gKCJ1dGY4 IiwgImlzbzg4NTkxIik7DQogICAgaWYgKGNkXzg4NTkxX3RvX3V0ZjggIT0gKGljb252X3QpKC0x KSkNCiAgICAgIHsNCiAgICAgICAgc3RhdGljIGNvbnN0IGNoYXIgaW5wdXRbXSA9ICJcMzA0cmdl ciBtaXQgYlwzNjZzZW4gQlwzNzRiY2hlbiBvaG5lIEF1Z2VubWFcMzM3IjsNCiAgICAgICAgY2hh ciBidWZbNTBdOw0KICAgICAgICBjb25zdCBjaGFyICppbnB0ciA9IGlucHV0Ow0KICAgICAgICBz aXplX3QgaW5ieXRlc2xlZnQgPSBzdHJsZW4gKGlucHV0KTsNCiAgICAgICAgY2hhciAqb3V0cHRy ID0gYnVmOw0KICAgICAgICBzaXplX3Qgb3V0Ynl0ZXNsZWZ0ID0gc2l6ZW9mIChidWYpOw0KICAg ICAgICBzaXplX3QgcmVzID0gaWNvbnYgKGNkXzg4NTkxX3RvX3V0ZjgsDQogICAgICAgICAgICAg ICAgICAgICAgICAgICAgKGNoYXIgKiopICZpbnB0ciwgJmluYnl0ZXNsZWZ0LA0KICAgICAgICAg ICAgICAgICAgICAgICAgICAgICZvdXRwdHIsICZvdXRieXRlc2xlZnQpOw0KICAgICAgICBpZiAo KGludClyZXMgPiAwKQ0KICAgICAgICAgIHJlc3VsdCB8PSA4Ow0KICAgICAgICBpY29udl9jbG9z ZSAoY2RfODg1OTFfdG9fdXRmOCk7DQogICAgICB9DQogIH0NCiNlbmRpZg0KICAvKiBUZXN0IGFn YWluc3QgSFAtVVggMTEuMTEgYnVnOiBObyBjb252ZXJ0ZXIgZnJvbSBFVUMtSlAgdG8gVVRGLTgg aXMNCiAgICAgcHJvdmlkZWQuICAqLw0KICBpZiAoLyogVHJ5IHN0YW5kYXJkaXplZCBuYW1lcy4g ICovDQogICAgICBpY29udl9vcGVuICgiVVRGLTgiLCAiRVVDLUpQIikgPT0gKGljb252X3QpKC0x KQ0KICAgICAgLyogVHJ5IElSSVgsIE9TRi8xIG5hbWVzLiAgKi8NCiAgICAgICYmIGljb252X29w ZW4gKCJVVEYtOCIsICJldWNKUCIpID09IChpY29udl90KSgtMSkNCiAgICAgIC8qIFRyeSBBSVgg bmFtZXMuICAqLw0KICAgICAgJiYgaWNvbnZfb3BlbiAoIlVURi04IiwgIklCTS1ldWNKUCIpID09 IChpY29udl90KSgtMSkNCiAgICAgIC8qIFRyeSBIUC1VWCBuYW1lcy4gICovDQogICAgICAmJiBp Y29udl9vcGVuICgidXRmOCIsICJldWNKUCIpID09IChpY29udl90KSgtMSkpDQogICAgcmVzdWx0 IHw9IDE2Ow0KICByZXR1cm4gcmVzdWx0Ow0KfQ0KX0FDRU9GDQppZiBhY19mbl9jX3RyeV9ydW4g IiRMSU5FTk8iOyB0aGVuIDoNCiAgYW1fY3ZfZnVuY19pY29udl93b3Jrcz15ZXMNCmVsc2UNCiAg YW1fY3ZfZnVuY19pY29udl93b3Jrcz1ubw0KZmkNCnJtIC1mIGNvcmUgKi5jb3JlIGNvcmUuY29u ZnRlc3QuKiBnbW9uLm91dCBiYi5vdXQgY29uZnRlc3QkYWNfZXhlZXh0IFwNCiAgY29uZnRlc3Qu JGFjX29iamV4dCBjb25mdGVzdC5iZWFtIGNvbmZ0ZXN0LiRhY19leHQNCmZpDQoNCiAgICAgIExJ QlM9IiRhbV9zYXZlX0xJQlMiDQoNCmZpDQp7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8t JExJTkVOT306IHJlc3VsdDogJGFtX2N2X2Z1bmNfaWNvbnZfd29ya3MiID4mNQ0KJGFzX2VjaG8g IiRhbV9jdl9mdW5jX2ljb252X3dvcmtzIiA+JjY7IH0NCiAgICBjYXNlICIkYW1fY3ZfZnVuY19p Y29udl93b3JrcyIgaW4NCiAgICAgICpubykgYW1fZnVuY19pY29udj1ubyBhbV9jdl9saWJfaWNv bnY9bm8gOzsNCiAgICAgICopICAgYW1fZnVuY19pY29udj15ZXMgOzsNCiAgICBlc2FjDQogIGVs c2UNCiAgICBhbV9mdW5jX2ljb252PW5vIGFtX2N2X2xpYl9pY29udj1ubw0KICBmaQ0KICBpZiB0 ZXN0ICIkYW1fZnVuY19pY29udiIgPSB5ZXM7IHRoZW4NCg0KJGFzX2VjaG8gIiNkZWZpbmUgSEFW RV9JQ09OViAxIiA+PmNvbmZkZWZzLmgNCg0KICBmaQ0KICBpZiB0ZXN0ICIkYW1fY3ZfbGliX2lj b252IiA9IHllczsgdGhlbg0KICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElO RU5PfTogY2hlY2tpbmcgaG93IHRvIGxpbmsgd2l0aCBsaWJpY29udiIgPiY1DQokYXNfZWNob19u ICJjaGVja2luZyBob3cgdG8gbGluayB3aXRoIGxpYmljb252Li4uICIgPiY2OyB9DQogICAgeyAk YXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRMSUJJQ09OViIg PiY1DQokYXNfZWNobyAiJExJQklDT05WIiA+JjY7IH0NCiAgZWxzZQ0KICAgICAgICAgICAgQ1BQ RkxBR1M9IiRhbV9zYXZlX0NQUEZMQUdTIg0KICAgIExJQklDT05WPQ0KICAgIExUTElCSUNPTlY9 DQogIGZpDQoNCg0KDQogIGlmIHRlc3QgIiRhbV9jdl9mdW5jX2ljb252IiA9IHllczsgdGhlbg0K ICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9y IGljb252IGRlY2xhcmF0aW9uIiA+JjUNCiRhc19lY2hvX24gImNoZWNraW5nIGZvciBpY29udiBk ZWNsYXJhdGlvbi4uLiAiID4mNjsgfQ0KICAgIGlmICR7YW1fY3ZfcHJvdG9faWNvbnYrOn0gZmFs c2U7IHRoZW4gOg0KICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNg0KZWxzZQ0KDQogICAgICBj YXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0DQovKiBlbmQgY29uZmRl ZnMuaC4gICovDQoNCiNpbmNsdWRlIDxzdGRsaWIuaD4NCiNpbmNsdWRlIDxpY29udi5oPg0KZXh0 ZXJuDQojaWZkZWYgX19jcGx1c3BsdXMNCiJDIg0KI2VuZGlmDQojaWYgZGVmaW5lZChfX1NURENf XykgfHwgZGVmaW5lZChfX2NwbHVzcGx1cykNCnNpemVfdCBpY29udiAoaWNvbnZfdCBjZCwgY2hh ciAqICppbmJ1Ziwgc2l6ZV90ICppbmJ5dGVzbGVmdCwgY2hhciAqICpvdXRidWYsIHNpemVfdCAq b3V0Ynl0ZXNsZWZ0KTsNCiNlbHNlDQpzaXplX3QgaWNvbnYoKTsNCiNlbmRpZg0KDQppbnQNCm1h aW4gKCkNCnsNCg0KICA7DQogIHJldHVybiAwOw0KfQ0KX0FDRU9GDQppZiBhY19mbl9jX3RyeV9j b21waWxlICIkTElORU5PIjsgdGhlbiA6DQogIGFtX2N2X3Byb3RvX2ljb252X2FyZzE9IiINCmVs c2UNCiAgYW1fY3ZfcHJvdG9faWNvbnZfYXJnMT0iY29uc3QiDQpmaQ0Kcm0gLWYgY29yZSBjb25m dGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0DQogICAgICBhbV9j dl9wcm90b19pY29udj0iZXh0ZXJuIHNpemVfdCBpY29udiAoaWNvbnZfdCBjZCwgJGFtX2N2X3By b3RvX2ljb252X2FyZzEgY2hhciAqICppbmJ1Ziwgc2l6ZV90ICppbmJ5dGVzbGVmdCwgY2hhciAq ICpvdXRidWYsIHNpemVfdCAqb3V0Ynl0ZXNsZWZ0KTsiDQpmaQ0KDQogICAgYW1fY3ZfcHJvdG9f aWNvbnY9YGVjaG8gIiRhbV9jdl9wcm90b19pY29udiIgfCB0ciAtcyAnICcgfCBzZWQgLWUgJ3Mv KCAvKC8nYA0KICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVz dWx0Og0KICAgICAgICAgJGFtX2N2X3Byb3RvX2ljb252IiA+JjUNCiRhc19lY2hvICINCiAgICAg ICAgICRhbV9jdl9wcm90b19pY29udiIgPiY2OyB9DQoNCmNhdCA+PmNvbmZkZWZzLmggPDxfQUNF T0YNCiNkZWZpbmUgSUNPTlZfQ09OU1QgJGFtX2N2X3Byb3RvX2ljb252X2FyZzENCl9BQ0VPRg0K DQoNCiAgICAgICBpZiB0ZXN0IC1uICIkYW1fY3ZfcHJvdG9faWNvbnZfYXJnMSI7IHRoZW4NCiAg ICAgICAgIElDT05WX0NPTlNUPSJjb25zdCINCiAgICAgICBmaQ0KDQogIGZpDQoNCg0KDQphY19m bl9jX2NoZWNrX3R5cGUgIiRMSU5FTk8iICJvZmZfdCIgImFjX2N2X3R5cGVfb2ZmX3QiICIkYWNf aW5jbHVkZXNfZGVmYXVsdCINCmlmIHRlc3QgIngkYWNfY3ZfdHlwZV9vZmZfdCIgPSB4eWVzOyB0 aGVuIDoNCg0KZWxzZQ0KDQpjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GDQojZGVmaW5lIG9mZl90 IGxvbmcgaW50DQpfQUNFT0YNCg0KZmkNCg0KDQoNCg0KDQoNCiAgICBnbF9jdl9jX211bHRpYXJj aD1ubw0KICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0DQovKiBl bmQgY29uZmRlZnMuaC4gICovDQojaWZuZGVmIF9fQVBQTEVfQ0NfXw0KICAgICAgICAgbm90IGEg dW5pdmVyc2FsIGNhcGFibGUgY29tcGlsZXINCiAgICAgICAgI2VuZGlmDQogICAgICAgIHR5cGVk ZWYgaW50IGR1bW15Ow0KDQpfQUNFT0YNCmlmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8i OyB0aGVuIDoNCg0KICAgICAgICAgICAgICAgYXJjaD0NCiAgICAgcHJldj0NCiAgICAgZm9yIHdv cmQgaW4gJHtDQ30gJHtDRkxBR1N9ICR7Q1BQRkxBR1N9ICR7TERGTEFHU307IGRvDQogICAgICAg aWYgdGVzdCAtbiAiJHByZXYiOyB0aGVuDQogICAgICAgICBjYXNlICR3b3JkIGluDQogICAgICAg ICAgIGk/ODYgfCB4ODZfNjQgfCBwcGMgfCBwcGM2NCkNCiAgICAgICAgICAgICBpZiB0ZXN0IC16 ICIkYXJjaCIgfHwgdGVzdCAiJGFyY2giID0gIiR3b3JkIjsgdGhlbg0KICAgICAgICAgICAgICAg YXJjaD0iJHdvcmQiDQogICAgICAgICAgICAgZWxzZQ0KICAgICAgICAgICAgICAgZ2xfY3ZfY19t dWx0aWFyY2g9eWVzDQogICAgICAgICAgICAgZmkNCiAgICAgICAgICAgICA7Ow0KICAgICAgICAg ZXNhYw0KICAgICAgICAgcHJldj0NCiAgICAgICBlbHNlDQogICAgICAgICBpZiB0ZXN0ICJ4JHdv cmQiID0gIngtYXJjaCI7IHRoZW4NCiAgICAgICAgICAgcHJldj1hcmNoDQogICAgICAgICBmaQ0K ICAgICAgIGZpDQogICAgIGRvbmUNCg0KZmkNCnJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0 ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dA0KICBpZiB0ZXN0ICRnbF9jdl9jX211bHRp YXJjaCA9IHllczsgdGhlbg0KICAgIEFQUExFX1VOSVZFUlNBTF9CVUlMRD0xDQogIGVsc2UNCiAg ICBBUFBMRV9VTklWRVJTQUxfQlVJTEQ9MA0KICBmaQ0KDQoNCg0KDQoNCiAgaWYgdGVzdCAkYWNf Y3ZfdHlwZV9sb25nX2xvbmdfaW50ID0geWVzOyB0aGVuDQogICAgSEFWRV9MT05HX0xPTkdfSU5U PTENCiAgZWxzZQ0KICAgIEhBVkVfTE9OR19MT05HX0lOVD0wDQogIGZpDQoNCg0KICBpZiB0ZXN0 ICRhY19jdl90eXBlX3Vuc2lnbmVkX2xvbmdfbG9uZ19pbnQgPSB5ZXM7IHRoZW4NCiAgICBIQVZF X1VOU0lHTkVEX0xPTkdfTE9OR19JTlQ9MQ0KICBlbHNlDQogICAgSEFWRV9VTlNJR05FRF9MT05H X0xPTkdfSU5UPTANCiAgZmkNCg0KDQoNCiAgaWYgdGVzdCAkYWNfY3ZfaGVhZGVyX3djaGFyX2gg PSB5ZXM7IHRoZW4NCiAgICBIQVZFX1dDSEFSX0g9MQ0KICBlbHNlDQogICAgSEFWRV9XQ0hBUl9I PTANCiAgZmkNCg0KDQogICAgICBpZiB0ZXN0ICRhY19jdl9oZWFkZXJfaW50dHlwZXNfaCA9IHll czsgdGhlbg0KICAgIEhBVkVfSU5UVFlQRVNfSD0xDQogIGVsc2UNCiAgICBIQVZFX0lOVFRZUEVT X0g9MA0KICBmaQ0KDQoNCiAgICAgIGlmIHRlc3QgJGFjX2N2X2hlYWRlcl9zeXNfdHlwZXNfaCA9 IHllczsgdGhlbg0KICAgIEhBVkVfU1lTX1RZUEVTX0g9MQ0KICBlbHNlDQogICAgSEFWRV9TWVNf VFlQRVNfSD0wDQogIGZpDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KICAgICBpZiB0ZXN0ICRnbF9j dl9oYXZlX2luY2x1ZGVfbmV4dCA9IHllczsgdGhlbg0KICAgICAgIGdsX2N2X25leHRfc3RkaW50 X2g9Jzwnc3RkaW50LmgnPicNCiAgICAgZWxzZQ0KICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZTok e2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgYWJzb2x1dGUgbmFtZSBvZiA8c3RkaW50Lmg+ IiA+JjUNCiRhc19lY2hvX24gImNoZWNraW5nIGFic29sdXRlIG5hbWUgb2YgPHN0ZGludC5oPi4u LiAiID4mNjsgfQ0KaWYgJHtnbF9jdl9uZXh0X3N0ZGludF9oKzp9IGZhbHNlOyB0aGVuIDoNCiAg JGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYNCmVsc2UNCg0KICAgICAgICAgICAgIGlmIHRlc3Qg JGFjX2N2X2hlYWRlcl9zdGRpbnRfaCA9IHllczsgdGhlbg0KDQoNCiAgICAgICAgICAgICAgIGNh dCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQNCi8qIGVuZCBjb25mZGVm cy5oLiAgKi8NCiNpbmNsdWRlIDxzdGRpbnQuaD4NCg0KX0FDRU9GDQogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICIkaG9z dF9vcyIgaW4NCiAgICAgICAgICAgICAgICAgYWl4KikgZ2xfYWJzbmFtZV9jcHA9IiRhY19jcHAg LUMiIDs7DQogICAgICAgICAgICAgICAgICopICAgIGdsX2Fic25hbWVfY3BwPSIkYWNfY3BwIiA7 Ow0KICAgICAgICAgICAgICAgZXNhYw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2xfY3ZfbmV4dF9zdGRpbnRfaD0nIidgKGV2YWwg IiRnbF9hYnNuYW1lX2NwcCBjb25mdGVzdC4kYWNfZXh0IikgMj4mNSB8DQogICAgICAgICAgICAg ICAgICBzZWQgLW4gJ1wjL3N0ZGludC5oI3sNCiAgICAgICAgICAgICAgICAgICAgcyMuKiJcKC4q L3N0ZGludC5oXCkiLiojXDEjDQogICAgICAgICAgICAgICAgICAgIHMjXi9bXi9dIy8vJiMNCiAg ICAgICAgICAgICAgICAgICAgcA0KICAgICAgICAgICAgICAgICAgICBxDQogICAgICAgICAgICAg ICAgICB9J2AnIicNCiAgICAgICAgICBlbHNlDQogICAgICAgICAgICAgICBnbF9jdl9uZXh0X3N0 ZGludF9oPSc8J3N0ZGludC5oJz4nDQogICAgICAgICAgICAgZmkNCg0KDQpmaQ0KeyAkYXNfZWNo byAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRnbF9jdl9uZXh0X3N0ZGlu dF9oIiA+JjUNCiRhc19lY2hvICIkZ2xfY3ZfbmV4dF9zdGRpbnRfaCIgPiY2OyB9DQogICAgIGZp DQogICAgIE5FWFRfU1RESU5UX0g9JGdsX2N2X25leHRfc3RkaW50X2gNCg0KICAgICBpZiB0ZXN0 ICRnbF9jdl9oYXZlX2luY2x1ZGVfbmV4dCA9IHllcyB8fCB0ZXN0ICRnbF9jdl9oYXZlX2luY2x1 ZGVfbmV4dCA9IGJ1Z2d5OyB0aGVuDQogICAgICAgIyBJTkNMVURFX05FWFRfQVNfRklSU1RfRElS RUNUSVZFPSdpbmNsdWRlX25leHQnDQogICAgICAgZ2xfbmV4dF9hc19maXJzdF9kaXJlY3RpdmU9 Jzwnc3RkaW50LmgnPicNCiAgICAgZWxzZQ0KICAgICAgICMgSU5DTFVERV9ORVhUX0FTX0ZJUlNU X0RJUkVDVElWRT0naW5jbHVkZScNCiAgICAgICBnbF9uZXh0X2FzX2ZpcnN0X2RpcmVjdGl2ZT0k Z2xfY3ZfbmV4dF9zdGRpbnRfaA0KICAgICBmaQ0KICAgICBORVhUX0FTX0ZJUlNUX0RJUkVDVElW RV9TVERJTlRfSD0kZ2xfbmV4dF9hc19maXJzdF9kaXJlY3RpdmUNCg0KDQoNCg0KICBpZiB0ZXN0 ICRhY19jdl9oZWFkZXJfc3RkaW50X2ggPSB5ZXM7IHRoZW4NCiAgICBIQVZFX1NURElOVF9IPTEN CiAgZWxzZQ0KICAgIEhBVkVfU1RESU5UX0g9MA0KICBmaQ0KDQoNCiAgICBpZiB0ZXN0ICRhY19j dl9oZWFkZXJfc3RkaW50X2ggPSB5ZXM7IHRoZW4NCiAgICB7ICRhc19lY2hvICIkYXNfbWU6JHth c19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgc3RkaW50LmggY29uZm9ybXMgdG8g Qzk5IiA+JjUNCiRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgc3RkaW50LmggY29uZm9ybXMg dG8gQzk5Li4uICIgPiY2OyB9DQppZiAke2dsX2N2X2hlYWRlcl93b3JraW5nX3N0ZGludF9oKzp9 IGZhbHNlOyB0aGVuIDoNCiAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYNCmVsc2UNCiAgZ2xf Y3ZfaGVhZGVyX3dvcmtpbmdfc3RkaW50X2g9bm8NCiAgICAgICBjYXQgY29uZmRlZnMuaCAtIDw8 X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0DQovKiBlbmQgY29uZmRlZnMuaC4gICovDQoNCg0KI2Rl ZmluZSBfX1NURENfTElNSVRfTUFDUk9TIDEgLyogdG8gbWFrZSBpdCB3b3JrIGFsc28gaW4gQysr IG1vZGUgKi8NCiNkZWZpbmUgX19TVERDX0NPTlNUQU5UX01BQ1JPUyAxIC8qIHRvIG1ha2UgaXQg d29yayBhbHNvIGluIEMrKyBtb2RlICovDQojZGVmaW5lIF9HTF9KVVNUX0lOQ0xVREVfU1lTVEVN X1NURElOVF9IIDEgLyogd29yayBpZiBidWlsZCBpc24ndCBjbGVhbiAqLw0KI2luY2x1ZGUgPHN0 ZGludC5oPg0KLyogRHJhZ29uZmx5IGRlZmluZXMgV0NIQVJfTUlOLCBXQ0hBUl9NQVggb25seSBp biA8d2NoYXIuaD4uICAqLw0KI2lmICEoZGVmaW5lZCBXQ0hBUl9NSU4gJiYgZGVmaW5lZCBXQ0hB Ul9NQVgpDQojZXJyb3IgIldDSEFSX01JTiwgV0NIQVJfTUFYIG5vdCBkZWZpbmVkIGluIDxzdGRp bnQuaD4iDQojZW5kaWYNCg0KDQogIC8qIEJTRC9PUyA0LjAuMSBoYXMgYSBidWc6IDxzdGRkZWYu aD4sIDxzdGRpby5oPiBhbmQgPHRpbWUuaD4gbXVzdCBiZQ0KICAgICBpbmNsdWRlZCBiZWZvcmUg PHdjaGFyLmg+LiAgKi8NCiAgI2luY2x1ZGUgPHN0ZGRlZi5oPg0KICAjaW5jbHVkZSA8c2lnbmFs Lmg+DQogICNpZiBIQVZFX1dDSEFSX0gNCiAgIyBpbmNsdWRlIDxzdGRpby5oPg0KICAjIGluY2x1 ZGUgPHRpbWUuaD4NCiAgIyBpbmNsdWRlIDx3Y2hhci5oPg0KICAjZW5kaWYNCg0KDQojaWZkZWYg SU5UOF9NQVgNCmludDhfdCBhMSA9IElOVDhfTUFYOw0KaW50OF90IGExbWluID0gSU5UOF9NSU47 DQojZW5kaWYNCiNpZmRlZiBJTlQxNl9NQVgNCmludDE2X3QgYTIgPSBJTlQxNl9NQVg7DQppbnQx Nl90IGEybWluID0gSU5UMTZfTUlOOw0KI2VuZGlmDQojaWZkZWYgSU5UMzJfTUFYDQppbnQzMl90 IGEzID0gSU5UMzJfTUFYOw0KaW50MzJfdCBhM21pbiA9IElOVDMyX01JTjsNCiNlbmRpZg0KI2lm ZGVmIElOVDY0X01BWA0KaW50NjRfdCBhNCA9IElOVDY0X01BWDsNCmludDY0X3QgYTRtaW4gPSBJ TlQ2NF9NSU47DQojZW5kaWYNCiNpZmRlZiBVSU5UOF9NQVgNCnVpbnQ4X3QgYjEgPSBVSU5UOF9N QVg7DQojZWxzZQ0KdHlwZWRlZiBpbnQgYjFbKHVuc2lnbmVkIGNoYXIpIC0xICE9IDI1NSA/IDEg OiAtMV07DQojZW5kaWYNCiNpZmRlZiBVSU5UMTZfTUFYDQp1aW50MTZfdCBiMiA9IFVJTlQxNl9N QVg7DQojZW5kaWYNCiNpZmRlZiBVSU5UMzJfTUFYDQp1aW50MzJfdCBiMyA9IFVJTlQzMl9NQVg7 DQojZW5kaWYNCiNpZmRlZiBVSU5UNjRfTUFYDQp1aW50NjRfdCBiNCA9IFVJTlQ2NF9NQVg7DQoj ZW5kaWYNCmludF9sZWFzdDhfdCBjMSA9IElOVDhfQyAoMHg3Zik7DQppbnRfbGVhc3Q4X3QgYzFt YXggPSBJTlRfTEVBU1Q4X01BWDsNCmludF9sZWFzdDhfdCBjMW1pbiA9IElOVF9MRUFTVDhfTUlO Ow0KaW50X2xlYXN0MTZfdCBjMiA9IElOVDE2X0MgKDB4N2ZmZik7DQppbnRfbGVhc3QxNl90IGMy bWF4ID0gSU5UX0xFQVNUMTZfTUFYOw0KaW50X2xlYXN0MTZfdCBjMm1pbiA9IElOVF9MRUFTVDE2 X01JTjsNCmludF9sZWFzdDMyX3QgYzMgPSBJTlQzMl9DICgweDdmZmZmZmZmKTsNCmludF9sZWFz dDMyX3QgYzNtYXggPSBJTlRfTEVBU1QzMl9NQVg7DQppbnRfbGVhc3QzMl90IGMzbWluID0gSU5U X0xFQVNUMzJfTUlOOw0KaW50X2xlYXN0NjRfdCBjNCA9IElOVDY0X0MgKDB4N2ZmZmZmZmZmZmZm ZmZmZik7DQppbnRfbGVhc3Q2NF90IGM0bWF4ID0gSU5UX0xFQVNUNjRfTUFYOw0KaW50X2xlYXN0 NjRfdCBjNG1pbiA9IElOVF9MRUFTVDY0X01JTjsNCnVpbnRfbGVhc3Q4X3QgZDEgPSBVSU5UOF9D ICgweGZmKTsNCnVpbnRfbGVhc3Q4X3QgZDFtYXggPSBVSU5UX0xFQVNUOF9NQVg7DQp1aW50X2xl YXN0MTZfdCBkMiA9IFVJTlQxNl9DICgweGZmZmYpOw0KdWludF9sZWFzdDE2X3QgZDJtYXggPSBV SU5UX0xFQVNUMTZfTUFYOw0KdWludF9sZWFzdDMyX3QgZDMgPSBVSU5UMzJfQyAoMHhmZmZmZmZm Zik7DQp1aW50X2xlYXN0MzJfdCBkM21heCA9IFVJTlRfTEVBU1QzMl9NQVg7DQp1aW50X2xlYXN0 NjRfdCBkNCA9IFVJTlQ2NF9DICgweGZmZmZmZmZmZmZmZmZmZmYpOw0KdWludF9sZWFzdDY0X3Qg ZDRtYXggPSBVSU5UX0xFQVNUNjRfTUFYOw0KaW50X2Zhc3Q4X3QgZTEgPSBJTlRfRkFTVDhfTUFY Ow0KaW50X2Zhc3Q4X3QgZTFtaW4gPSBJTlRfRkFTVDhfTUlOOw0KaW50X2Zhc3QxNl90IGUyID0g SU5UX0ZBU1QxNl9NQVg7DQppbnRfZmFzdDE2X3QgZTJtaW4gPSBJTlRfRkFTVDE2X01JTjsNCmlu dF9mYXN0MzJfdCBlMyA9IElOVF9GQVNUMzJfTUFYOw0KaW50X2Zhc3QzMl90IGUzbWluID0gSU5U X0ZBU1QzMl9NSU47DQppbnRfZmFzdDY0X3QgZTQgPSBJTlRfRkFTVDY0X01BWDsNCmludF9mYXN0 NjRfdCBlNG1pbiA9IElOVF9GQVNUNjRfTUlOOw0KdWludF9mYXN0OF90IGYxID0gVUlOVF9GQVNU OF9NQVg7DQp1aW50X2Zhc3QxNl90IGYyID0gVUlOVF9GQVNUMTZfTUFYOw0KdWludF9mYXN0MzJf dCBmMyA9IFVJTlRfRkFTVDMyX01BWDsNCnVpbnRfZmFzdDY0X3QgZjQgPSBVSU5UX0ZBU1Q2NF9N QVg7DQojaWZkZWYgSU5UUFRSX01BWA0KaW50cHRyX3QgZyA9IElOVFBUUl9NQVg7DQppbnRwdHJf dCBnbWluID0gSU5UUFRSX01JTjsNCiNlbmRpZg0KI2lmZGVmIFVJTlRQVFJfTUFYDQp1aW50cHRy X3QgaCA9IFVJTlRQVFJfTUFYOw0KI2VuZGlmDQppbnRtYXhfdCBpID0gSU5UTUFYX01BWDsNCnVp bnRtYXhfdCBqID0gVUlOVE1BWF9NQVg7DQoNCiNpbmNsdWRlIDxsaW1pdHMuaD4gLyogZm9yIENI QVJfQklUICovDQojZGVmaW5lIFRZUEVfTUlOSU1VTSh0KSBcDQogICgodCkgKCh0KSAwIDwgKHQp IC0xID8gKHQpIDAgOiB+IFRZUEVfTUFYSU1VTSAodCkpKQ0KI2RlZmluZSBUWVBFX01BWElNVU0o dCkgXA0KICAoKHQpICgodCkgMCA8ICh0KSAtMSBcDQogICAgICAgID8gKHQpIC0xIFwNCiAgICAg ICAgOiAoKCgodCkgMSA8PCAoc2l6ZW9mICh0KSAqIENIQVJfQklUIC0gMikpIC0gMSkgKiAyICsg MSkpKQ0Kc3RydWN0IHMgew0KICBpbnQgY2hlY2tfUFRSRElGRjoNCiAgICAgIFBUUkRJRkZfTUlO ID09IFRZUEVfTUlOSU1VTSAocHRyZGlmZl90KQ0KICAgICAgJiYgUFRSRElGRl9NQVggPT0gVFlQ RV9NQVhJTVVNIChwdHJkaWZmX3QpDQogICAgICA/IDEgOiAtMTsNCiAgLyogRGV0ZWN0IGJ1ZyBp biBGcmVlQlNEIDYuMCAvIGlhNjQuICAqLw0KICBpbnQgY2hlY2tfU0lHX0FUT01JQzoNCiAgICAg IFNJR19BVE9NSUNfTUlOID09IFRZUEVfTUlOSU1VTSAoc2lnX2F0b21pY190KQ0KICAgICAgJiYg U0lHX0FUT01JQ19NQVggPT0gVFlQRV9NQVhJTVVNIChzaWdfYXRvbWljX3QpDQogICAgICA/IDEg OiAtMTsNCiAgaW50IGNoZWNrX1NJWkU6IFNJWkVfTUFYID09IFRZUEVfTUFYSU1VTSAoc2l6ZV90 KSA/IDEgOiAtMTsNCiAgaW50IGNoZWNrX1dDSEFSOg0KICAgICAgV0NIQVJfTUlOID09IFRZUEVf TUlOSU1VTSAod2NoYXJfdCkNCiAgICAgICYmIFdDSEFSX01BWCA9PSBUWVBFX01BWElNVU0gKHdj aGFyX3QpDQogICAgICA/IDEgOiAtMTsNCiAgLyogRGV0ZWN0IGJ1ZyBpbiBtaW5ndy4gICovDQog IGludCBjaGVja19XSU5UOg0KICAgICAgV0lOVF9NSU4gPT0gVFlQRV9NSU5JTVVNICh3aW50X3Qp DQogICAgICAmJiBXSU5UX01BWCA9PSBUWVBFX01BWElNVU0gKHdpbnRfdCkNCiAgICAgID8gMSA6 IC0xOw0KDQogIC8qIERldGVjdCBidWdzIGluIGdsaWJjIDIuNCBhbmQgU29sYXJpcyAxMCBzdGRp bnQuaCwgYW1vbmcgb3RoZXJzLiAgKi8NCiAgaW50IGNoZWNrX1VJTlQ4X0M6DQogICAgICAgICgt MSA8IFVJTlQ4X0MgKDApKSA9PSAoLTEgPCAodWludF9sZWFzdDhfdCkgMCkgPyAxIDogLTE7DQog IGludCBjaGVja19VSU5UMTZfQzoNCiAgICAgICAgKC0xIDwgVUlOVDE2X0MgKDApKSA9PSAoLTEg PCAodWludF9sZWFzdDE2X3QpIDApID8gMSA6IC0xOw0KDQogIC8qIERldGVjdCBidWdzIGluIE9w ZW5CU0QgMy45IHN0ZGludC5oLiAgKi8NCiNpZmRlZiBVSU5UOF9NQVgNCiAgaW50IGNoZWNrX3Vp bnQ4OiAodWludDhfdCkgLTEgPT0gVUlOVDhfTUFYID8gMSA6IC0xOw0KI2VuZGlmDQojaWZkZWYg VUlOVDE2X01BWA0KICBpbnQgY2hlY2tfdWludDE2OiAodWludDE2X3QpIC0xID09IFVJTlQxNl9N QVggPyAxIDogLTE7DQojZW5kaWYNCiNpZmRlZiBVSU5UMzJfTUFYDQogIGludCBjaGVja191aW50 MzI6ICh1aW50MzJfdCkgLTEgPT0gVUlOVDMyX01BWCA/IDEgOiAtMTsNCiNlbmRpZg0KI2lmZGVm IFVJTlQ2NF9NQVgNCiAgaW50IGNoZWNrX3VpbnQ2NDogKHVpbnQ2NF90KSAtMSA9PSBVSU5UNjRf TUFYID8gMSA6IC0xOw0KI2VuZGlmDQogIGludCBjaGVja191aW50X2xlYXN0ODogKHVpbnRfbGVh c3Q4X3QpIC0xID09IFVJTlRfTEVBU1Q4X01BWCA/IDEgOiAtMTsNCiAgaW50IGNoZWNrX3VpbnRf bGVhc3QxNjogKHVpbnRfbGVhc3QxNl90KSAtMSA9PSBVSU5UX0xFQVNUMTZfTUFYID8gMSA6IC0x Ow0KICBpbnQgY2hlY2tfdWludF9sZWFzdDMyOiAodWludF9sZWFzdDMyX3QpIC0xID09IFVJTlRf TEVBU1QzMl9NQVggPyAxIDogLTE7DQogIGludCBjaGVja191aW50X2xlYXN0NjQ6ICh1aW50X2xl YXN0NjRfdCkgLTEgPT0gVUlOVF9MRUFTVDY0X01BWCA/IDEgOiAtMTsNCiAgaW50IGNoZWNrX3Vp bnRfZmFzdDg6ICh1aW50X2Zhc3Q4X3QpIC0xID09IFVJTlRfRkFTVDhfTUFYID8gMSA6IC0xOw0K ICBpbnQgY2hlY2tfdWludF9mYXN0MTY6ICh1aW50X2Zhc3QxNl90KSAtMSA9PSBVSU5UX0ZBU1Qx Nl9NQVggPyAxIDogLTE7DQogIGludCBjaGVja191aW50X2Zhc3QzMjogKHVpbnRfZmFzdDMyX3Qp IC0xID09IFVJTlRfRkFTVDMyX01BWCA/IDEgOiAtMTsNCiAgaW50IGNoZWNrX3VpbnRfZmFzdDY0 OiAodWludF9mYXN0NjRfdCkgLTEgPT0gVUlOVF9GQVNUNjRfTUFYID8gMSA6IC0xOw0KICBpbnQg Y2hlY2tfdWludHB0cjogKHVpbnRwdHJfdCkgLTEgPT0gVUlOVFBUUl9NQVggPyAxIDogLTE7DQog IGludCBjaGVja191aW50bWF4OiAodWludG1heF90KSAtMSA9PSBVSU5UTUFYX01BWCA/IDEgOiAt MTsNCiAgaW50IGNoZWNrX3NpemU6IChzaXplX3QpIC0xID09IFNJWkVfTUFYID8gMSA6IC0xOw0K fTsNCg0KaW50DQptYWluICgpDQp7DQoNCiAgOw0KICByZXR1cm4gMDsNCn0NCl9BQ0VPRg0KaWYg YWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOg0KICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgIiRjcm9zc19jb21waWxp bmciID0geWVzOyB0aGVuIDoNCiAgICAgICAgICAgICAgICAgZ2xfY3ZfaGVhZGVyX3dvcmtpbmdf c3RkaW50X2g9eWVzDQoNCmVsc2UNCiAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRl c3QuJGFjX2V4dA0KLyogZW5kIGNvbmZkZWZzLmguICAqLw0KDQoNCiNkZWZpbmUgX19TVERDX0xJ TUlUX01BQ1JPUyAxIC8qIHRvIG1ha2UgaXQgd29yayBhbHNvIGluIEMrKyBtb2RlICovDQojZGVm aW5lIF9fU1REQ19DT05TVEFOVF9NQUNST1MgMSAvKiB0byBtYWtlIGl0IHdvcmsgYWxzbyBpbiBD KysgbW9kZSAqLw0KI2RlZmluZSBfR0xfSlVTVF9JTkNMVURFX1NZU1RFTV9TVERJTlRfSCAxIC8q IHdvcmsgaWYgYnVpbGQgaXNuJ3QgY2xlYW4gKi8NCiNpbmNsdWRlIDxzdGRpbnQuaD4NCg0KDQog IC8qIEJTRC9PUyA0LjAuMSBoYXMgYSBidWc6IDxzdGRkZWYuaD4sIDxzdGRpby5oPiBhbmQgPHRp bWUuaD4gbXVzdCBiZQ0KICAgICBpbmNsdWRlZCBiZWZvcmUgPHdjaGFyLmg+LiAgKi8NCiAgI2lu Y2x1ZGUgPHN0ZGRlZi5oPg0KICAjaW5jbHVkZSA8c2lnbmFsLmg+DQogICNpZiBIQVZFX1dDSEFS X0gNCiAgIyBpbmNsdWRlIDxzdGRpby5oPg0KICAjIGluY2x1ZGUgPHRpbWUuaD4NCiAgIyBpbmNs dWRlIDx3Y2hhci5oPg0KICAjZW5kaWYNCg0KDQojaW5jbHVkZSA8c3RkaW8uaD4NCiNpbmNsdWRl IDxzdHJpbmcuaD4NCiNkZWZpbmUgTVZBTChtYWNybykgTVZBTDEobWFjcm8pDQojZGVmaW5lIE1W QUwxKGV4cHJlc3Npb24pICNleHByZXNzaW9uDQpzdGF0aWMgY29uc3QgY2hhciAqbWFjcm9fdmFs dWVzW10gPQ0KICB7DQojaWZkZWYgSU5UOF9NQVgNCiAgICBNVkFMIChJTlQ4X01BWCksDQojZW5k aWYNCiNpZmRlZiBJTlQxNl9NQVgNCiAgICBNVkFMIChJTlQxNl9NQVgpLA0KI2VuZGlmDQojaWZk ZWYgSU5UMzJfTUFYDQogICAgTVZBTCAoSU5UMzJfTUFYKSwNCiNlbmRpZg0KI2lmZGVmIElOVDY0 X01BWA0KICAgIE1WQUwgKElOVDY0X01BWCksDQojZW5kaWYNCiNpZmRlZiBVSU5UOF9NQVgNCiAg ICBNVkFMIChVSU5UOF9NQVgpLA0KI2VuZGlmDQojaWZkZWYgVUlOVDE2X01BWA0KICAgIE1WQUwg KFVJTlQxNl9NQVgpLA0KI2VuZGlmDQojaWZkZWYgVUlOVDMyX01BWA0KICAgIE1WQUwgKFVJTlQz Ml9NQVgpLA0KI2VuZGlmDQojaWZkZWYgVUlOVDY0X01BWA0KICAgIE1WQUwgKFVJTlQ2NF9NQVgp LA0KI2VuZGlmDQogICAgTlVMTA0KICB9Ow0KDQppbnQNCm1haW4gKCkNCnsNCg0KICBjb25zdCBj aGFyICoqbXY7DQogIGZvciAobXYgPSBtYWNyb192YWx1ZXM7ICptdiAhPSBOVUxMOyBtdisrKQ0K ICAgIHsNCiAgICAgIGNvbnN0IGNoYXIgKnZhbHVlID0gKm12Ow0KICAgICAgLyogVGVzdCB3aGV0 aGVyIGl0IGxvb2tzIGxpa2UgYSBjYXN0IGV4cHJlc3Npb24uICAqLw0KICAgICAgaWYgKHN0cm5j bXAgKHZhbHVlLCAiKCh1bnNpZ25lZCBpbnQpIi8qKSovLCAxNSkgPT0gMA0KICAgICAgICAgIHx8 IHN0cm5jbXAgKHZhbHVlLCAiKCh1bnNpZ25lZCBzaG9ydCkiLyopKi8sIDE3KSA9PSAwDQogICAg ICAgICAgfHwgc3RybmNtcCAodmFsdWUsICIoKHVuc2lnbmVkIGNoYXIpIi8qKSovLCAxNikgPT0g MA0KICAgICAgICAgIHx8IHN0cm5jbXAgKHZhbHVlLCAiKChpbnQpIi8qKSovLCA2KSA9PSAwDQog ICAgICAgICAgfHwgc3RybmNtcCAodmFsdWUsICIoKHNpZ25lZCBzaG9ydCkiLyopKi8sIDE1KSA9 PSAwDQogICAgICAgICAgfHwgc3RybmNtcCAodmFsdWUsICIoKHNpZ25lZCBjaGFyKSIvKikqLywg MTQpID09IDApDQogICAgICAgIHJldHVybiBtdiAtIG1hY3JvX3ZhbHVlcyArIDE7DQogICAgfQ0K ICByZXR1cm4gMDsNCg0KICA7DQogIHJldHVybiAwOw0KfQ0KX0FDRU9GDQppZiBhY19mbl9jX3Ry eV9ydW4gIiRMSU5FTk8iOyB0aGVuIDoNCiAgZ2xfY3ZfaGVhZGVyX3dvcmtpbmdfc3RkaW50X2g9 eWVzDQpmaQ0Kcm0gLWYgY29yZSAqLmNvcmUgY29yZS5jb25mdGVzdC4qIGdtb24ub3V0IGJiLm91 dCBjb25mdGVzdCRhY19leGVleHQgXA0KICBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LmJl YW0gY29uZnRlc3QuJGFjX2V4dA0KZmkNCg0KDQpmaQ0Kcm0gLWYgY29yZSBjb25mdGVzdC5lcnIg Y29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0DQoNCmZpDQp7ICRhc19lY2hvICIk YXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGdsX2N2X2hlYWRlcl93b3JraW5n X3N0ZGludF9oIiA+JjUNCiRhc19lY2hvICIkZ2xfY3ZfaGVhZGVyX3dvcmtpbmdfc3RkaW50X2gi ID4mNjsgfQ0KICBmaQ0KICBpZiB0ZXN0ICIkZ2xfY3ZfaGVhZGVyX3dvcmtpbmdfc3RkaW50X2gi ID0geWVzOyB0aGVuDQogICAgU1RESU5UX0g9DQogIGVsc2UNCiAgICAgICAgICAgIGZvciBhY19o ZWFkZXIgaW4gc3lzL2ludHR5cGVzLmggc3lzL2JpdHlwZXMuaA0KZG8gOg0KICBhc19hY19IZWFk ZXI9YCRhc19lY2hvICJhY19jdl9oZWFkZXJfJGFjX2hlYWRlciIgfCAkYXNfdHJfc2hgDQphY19m bl9jX2NoZWNrX2hlYWRlcl9tb25ncmVsICIkTElORU5PIiAiJGFjX2hlYWRlciIgIiRhc19hY19I ZWFkZXIiICIkYWNfaW5jbHVkZXNfZGVmYXVsdCINCmlmIGV2YWwgdGVzdCBcInhcJCIkYXNfYWNf SGVhZGVyIlwiID0geCJ5ZXMiOyB0aGVuIDoNCiAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRg0K I2RlZmluZSBgJGFzX2VjaG8gIkhBVkVfJGFjX2hlYWRlciIgfCAkYXNfdHJfY3BwYCAxDQpfQUNF T0YNCg0KZmkNCg0KZG9uZQ0KDQogICAgaWYgdGVzdCAkYWNfY3ZfaGVhZGVyX3N5c19pbnR0eXBl c19oID0geWVzOyB0aGVuDQogICAgICBIQVZFX1NZU19JTlRUWVBFU19IPTENCiAgICBlbHNlDQog ICAgICBIQVZFX1NZU19JTlRUWVBFU19IPTANCiAgICBmaQ0KDQogICAgaWYgdGVzdCAkYWNfY3Zf aGVhZGVyX3N5c19iaXR5cGVzX2ggPSB5ZXM7IHRoZW4NCiAgICAgIEhBVkVfU1lTX0JJVFlQRVNf SD0xDQogICAgZWxzZQ0KICAgICAgSEFWRV9TWVNfQklUWVBFU19IPTANCiAgICBmaQ0KDQoNCg0K DQogIGlmIHRlc3QgJEFQUExFX1VOSVZFUlNBTF9CVUlMRCA9IDA7IHRoZW4NCg0KDQogIGZvciBn bHR5cGUgaW4gcHRyZGlmZl90IHNpemVfdCA7IGRvDQogICAgeyAkYXNfZWNobyAiJGFzX21lOiR7 YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgYml0IHNpemUgb2YgJGdsdHlwZSIgPiY1 DQokYXNfZWNob19uICJjaGVja2luZyBmb3IgYml0IHNpemUgb2YgJGdsdHlwZS4uLiAiID4mNjsg fQ0KaWYgZXZhbCBcJHtnbF9jdl9iaXRzaXplb2ZfJHtnbHR5cGV9Kzp9IGZhbHNlOyB0aGVuIDoN CiAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYNCmVsc2UNCiAgaWYgYWNfZm5fY19jb21wdXRl X2ludCAiJExJTkVOTyIgInNpemVvZiAoJGdsdHlwZSkgKiBDSEFSX0JJVCIgInJlc3VsdCIgICAg ICAgICINCiAgLyogQlNEL09TIDQuMC4xIGhhcyBhIGJ1ZzogPHN0ZGRlZi5oPiwgPHN0ZGlvLmg+ IGFuZCA8dGltZS5oPiBtdXN0IGJlDQogICAgIGluY2x1ZGVkIGJlZm9yZSA8d2NoYXIuaD4uICAq Lw0KICAjaW5jbHVkZSA8c3RkZGVmLmg+DQogICNpbmNsdWRlIDxzaWduYWwuaD4NCiAgI2lmIEhB VkVfV0NIQVJfSA0KICAjIGluY2x1ZGUgPHN0ZGlvLmg+DQogICMgaW5jbHVkZSA8dGltZS5oPg0K ICAjIGluY2x1ZGUgPHdjaGFyLmg+DQogICNlbmRpZg0KDQojaW5jbHVkZSA8bGltaXRzLmg+Ijsg dGhlbiA6DQoNCmVsc2UNCiAgcmVzdWx0PXVua25vd24NCmZpDQoNCiAgICAgICBldmFsIGdsX2N2 X2JpdHNpemVvZl8ke2dsdHlwZX09XCRyZXN1bHQNCg0KZmkNCmV2YWwgYWNfcmVzPVwkZ2xfY3Zf Yml0c2l6ZW9mXyR7Z2x0eXBlfQ0KCSAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5l bm8tJExJTkVOT306IHJlc3VsdDogJGFjX3JlcyIgPiY1DQokYXNfZWNobyAiJGFjX3JlcyIgPiY2 OyB9DQogICAgZXZhbCByZXN1bHQ9XCRnbF9jdl9iaXRzaXplb2ZfJHtnbHR5cGV9DQogICAgaWYg dGVzdCAkcmVzdWx0ID0gdW5rbm93bjsgdGhlbg0KICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgcmVzdWx0PTANCiAgICBmaQ0KICAgIEdMVFlQRT1gZWNobyAi JGdsdHlwZSIgfCB0ciAnYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXogJyAnQUJDREVGR0hJSktM TU5PUFFSU1RVVldYWVpfJ2ANCiAgICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GDQojZGVmaW5l IEJJVFNJWkVPRl8ke0dMVFlQRX0gJHJlc3VsdA0KX0FDRU9GDQoNCiAgICBldmFsIEJJVFNJWkVP Rl8ke0dMVFlQRX09XCRyZXN1bHQNCiAgZG9uZQ0KDQoNCiAgZmkNCg0KDQogIGZvciBnbHR5cGUg aW4gc2lnX2F0b21pY190IHdjaGFyX3Qgd2ludF90IDsgZG8NCiAgICB7ICRhc19lY2hvICIkYXNf bWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBiaXQgc2l6ZSBvZiAkZ2x0eXBl IiA+JjUNCiRhc19lY2hvX24gImNoZWNraW5nIGZvciBiaXQgc2l6ZSBvZiAkZ2x0eXBlLi4uICIg PiY2OyB9DQppZiBldmFsIFwke2dsX2N2X2JpdHNpemVvZl8ke2dsdHlwZX0rOn0gZmFsc2U7IHRo ZW4gOg0KICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNg0KZWxzZQ0KICBpZiBhY19mbl9jX2Nv bXB1dGVfaW50ICIkTElORU5PIiAic2l6ZW9mICgkZ2x0eXBlKSAqIENIQVJfQklUIiAicmVzdWx0 IiAgICAgICAgIg0KICAvKiBCU0QvT1MgNC4wLjEgaGFzIGEgYnVnOiA8c3RkZGVmLmg+LCA8c3Rk aW8uaD4gYW5kIDx0aW1lLmg+IG11c3QgYmUNCiAgICAgaW5jbHVkZWQgYmVmb3JlIDx3Y2hhci5o Pi4gICovDQogICNpbmNsdWRlIDxzdGRkZWYuaD4NCiAgI2luY2x1ZGUgPHNpZ25hbC5oPg0KICAj aWYgSEFWRV9XQ0hBUl9IDQogICMgaW5jbHVkZSA8c3RkaW8uaD4NCiAgIyBpbmNsdWRlIDx0aW1l Lmg+DQogICMgaW5jbHVkZSA8d2NoYXIuaD4NCiAgI2VuZGlmDQoNCiNpbmNsdWRlIDxsaW1pdHMu aD4iOyB0aGVuIDoNCg0KZWxzZQ0KICByZXN1bHQ9dW5rbm93bg0KZmkNCg0KICAgICAgIGV2YWwg Z2xfY3ZfYml0c2l6ZW9mXyR7Z2x0eXBlfT1cJHJlc3VsdA0KDQpmaQ0KZXZhbCBhY19yZXM9XCRn bF9jdl9iaXRzaXplb2ZfJHtnbHR5cGV9DQoJICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2Fz X2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfcmVzIiA+JjUNCiRhc19lY2hvICIkYWNfcmVz IiA+JjY7IH0NCiAgICBldmFsIHJlc3VsdD1cJGdsX2N2X2JpdHNpemVvZl8ke2dsdHlwZX0NCiAg ICBpZiB0ZXN0ICRyZXN1bHQgPSB1bmtub3duOyB0aGVuDQogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQ9MA0KICAgIGZpDQogICAgR0xUWVBFPWBl Y2hvICIkZ2x0eXBlIiB8IHRyICdhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5eiAnICdBQkNERUZH SElKS0xNTk9QUVJTVFVWV1hZWl8nYA0KICAgIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YNCiNk ZWZpbmUgQklUU0laRU9GXyR7R0xUWVBFfSAkcmVzdWx0DQpfQUNFT0YNCg0KICAgIGV2YWwgQklU U0laRU9GXyR7R0xUWVBFfT1cJHJlc3VsdA0KICBkb25lDQoNCg0KDQoNCiAgZm9yIGdsdHlwZSBp biBzaWdfYXRvbWljX3Qgd2NoYXJfdCB3aW50X3QgOyBkbw0KICAgIHsgJGFzX2VjaG8gIiRhc19t ZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciAkZ2x0eXBlIGlzIHNpZ25l ZCIgPiY1DQokYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyICRnbHR5cGUgaXMgc2lnbmVkLi4u ICIgPiY2OyB9DQppZiBldmFsIFwke2dsX2N2X3R5cGVfJHtnbHR5cGV9X3NpZ25lZCs6fSBmYWxz ZTsgdGhlbiA6DQogICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2DQplbHNlDQogIGNhdCBjb25m ZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQNCi8qIGVuZCBjb25mZGVmcy5oLiAg Ki8NCg0KICAvKiBCU0QvT1MgNC4wLjEgaGFzIGEgYnVnOiA8c3RkZGVmLmg+LCA8c3RkaW8uaD4g YW5kIDx0aW1lLmg+IG11c3QgYmUNCiAgICAgaW5jbHVkZWQgYmVmb3JlIDx3Y2hhci5oPi4gICov DQogICNpbmNsdWRlIDxzdGRkZWYuaD4NCiAgI2luY2x1ZGUgPHNpZ25hbC5oPg0KICAjaWYgSEFW RV9XQ0hBUl9IDQogICMgaW5jbHVkZSA8c3RkaW8uaD4NCiAgIyBpbmNsdWRlIDx0aW1lLmg+DQog ICMgaW5jbHVkZSA8d2NoYXIuaD4NCiAgI2VuZGlmDQoNCiAgICAgICAgICAgIGludCB2ZXJpZnlb MiAqICgoJGdsdHlwZSkgLTEgPCAoJGdsdHlwZSkgMCkgLSAxXTsNCmludA0KbWFpbiAoKQ0Kew0K DQogIDsNCiAgcmV0dXJuIDA7DQp9DQpfQUNFT0YNCmlmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRM SU5FTk8iOyB0aGVuIDoNCiAgcmVzdWx0PXllcw0KZWxzZQ0KICByZXN1bHQ9bm8NCmZpDQpybSAt ZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQN CiAgICAgICBldmFsIGdsX2N2X3R5cGVfJHtnbHR5cGV9X3NpZ25lZD1cJHJlc3VsdA0KDQpmaQ0K ZXZhbCBhY19yZXM9XCRnbF9jdl90eXBlXyR7Z2x0eXBlfV9zaWduZWQNCgkgICAgICAgeyAkYXNf ZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19yZXMiID4mNQ0K JGFzX2VjaG8gIiRhY19yZXMiID4mNjsgfQ0KICAgIGV2YWwgcmVzdWx0PVwkZ2xfY3ZfdHlwZV8k e2dsdHlwZX1fc2lnbmVkDQogICAgR0xUWVBFPWBlY2hvICRnbHR5cGUgfCB0ciAnYWJjZGVmZ2hp amtsbW5vcHFyc3R1dnd4eXogJyAnQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpfJ2ANCiAgICBp ZiB0ZXN0ICIkcmVzdWx0IiA9IHllczsgdGhlbg0KICAgICAgY2F0ID4+Y29uZmRlZnMuaCA8PF9B Q0VPRg0KI2RlZmluZSBIQVZFX1NJR05FRF8ke0dMVFlQRX0gMQ0KX0FDRU9GDQoNCiAgICAgIGV2 YWwgSEFWRV9TSUdORURfJHtHTFRZUEV9PTENCiAgICBlbHNlDQogICAgICBldmFsIEhBVkVfU0lH TkVEXyR7R0xUWVBFfT0wDQogICAgZmkNCiAgZG9uZQ0KDQoNCiAgZ2xfY3ZfdHlwZV9wdHJkaWZm X3Rfc2lnbmVkPXllcw0KICBnbF9jdl90eXBlX3NpemVfdF9zaWduZWQ9bm8NCiAgaWYgdGVzdCAk QVBQTEVfVU5JVkVSU0FMX0JVSUxEID0gMDsgdGhlbg0KDQoNCiAgZm9yIGdsdHlwZSBpbiBwdHJk aWZmX3Qgc2l6ZV90IDsgZG8NCiAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJ TkVOT306IGNoZWNraW5nIGZvciAkZ2x0eXBlIGludGVnZXIgbGl0ZXJhbCBzdWZmaXgiID4mNQ0K JGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRnbHR5cGUgaW50ZWdlciBsaXRlcmFsIHN1ZmZpeC4u LiAiID4mNjsgfQ0KaWYgZXZhbCBcJHtnbF9jdl90eXBlXyR7Z2x0eXBlfV9zdWZmaXgrOn0gZmFs c2U7IHRoZW4gOg0KICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNg0KZWxzZQ0KICBldmFsIGds X2N2X3R5cGVfJHtnbHR5cGV9X3N1ZmZpeD1ubw0KICAgICAgIGV2YWwgcmVzdWx0PVwkZ2xfY3Zf dHlwZV8ke2dsdHlwZX1fc2lnbmVkDQogICAgICAgaWYgdGVzdCAiJHJlc3VsdCIgPSB5ZXM7IHRo ZW4NCiAgICAgICAgIGdsc3VmdT0NCiAgICAgICBlbHNlDQogICAgICAgICBnbHN1ZnU9dQ0KICAg ICAgIGZpDQogICAgICAgZm9yIGdsc3VmIGluICIkZ2xzdWZ1IiAke2dsc3VmdX1sICR7Z2xzdWZ1 fWxsICR7Z2xzdWZ1fWk2NDsgZG8NCiAgICAgICAgIGNhc2UgJGdsc3VmIGluDQogICAgICAgICAg ICcnKSAgZ2x0eXBlMT0naW50Jzs7DQogICAgICAgICAgIGwpICAgZ2x0eXBlMT0nbG9uZyBpbnQn OzsNCiAgICAgICAgICAgbGwpICBnbHR5cGUxPSdsb25nIGxvbmcgaW50Jzs7DQogICAgICAgICAg IGk2NCkgZ2x0eXBlMT0nX19pbnQ2NCc7Ow0KICAgICAgICAgICB1KSAgIGdsdHlwZTE9J3Vuc2ln bmVkIGludCc7Ow0KICAgICAgICAgICB1bCkgIGdsdHlwZTE9J3Vuc2lnbmVkIGxvbmcgaW50Jzs7 DQogICAgICAgICAgIHVsbCkgZ2x0eXBlMT0ndW5zaWduZWQgbG9uZyBsb25nIGludCc7Ow0KICAg ICAgICAgICB1aTY0KWdsdHlwZTE9J3Vuc2lnbmVkIF9faW50NjQnOzsNCiAgICAgICAgIGVzYWMN CiAgICAgICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQNCi8q IGVuZCBjb25mZGVmcy5oLiAgKi8NCg0KICAvKiBCU0QvT1MgNC4wLjEgaGFzIGEgYnVnOiA8c3Rk ZGVmLmg+LCA8c3RkaW8uaD4gYW5kIDx0aW1lLmg+IG11c3QgYmUNCiAgICAgaW5jbHVkZWQgYmVm b3JlIDx3Y2hhci5oPi4gICovDQogICNpbmNsdWRlIDxzdGRkZWYuaD4NCiAgI2luY2x1ZGUgPHNp Z25hbC5oPg0KICAjaWYgSEFWRV9XQ0hBUl9IDQogICMgaW5jbHVkZSA8c3RkaW8uaD4NCiAgIyBp bmNsdWRlIDx0aW1lLmg+DQogICMgaW5jbHVkZSA8d2NoYXIuaD4NCiAgI2VuZGlmDQoNCiAgICAg ICAgICAgICAgZXh0ZXJuICRnbHR5cGUgZm9vOw0KICAgICAgICAgICAgICBleHRlcm4gJGdsdHlw ZTEgZm9vOw0KaW50DQptYWluICgpDQp7DQoNCiAgOw0KICByZXR1cm4gMDsNCn0NCl9BQ0VPRg0K aWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOg0KICBldmFsIGdsX2N2X3R5 cGVfJHtnbHR5cGV9X3N1ZmZpeD1cJGdsc3VmDQpmaQ0Kcm0gLWYgY29yZSBjb25mdGVzdC5lcnIg Y29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0DQogICAgICAgICBldmFsIHJlc3Vs dD1cJGdsX2N2X3R5cGVfJHtnbHR5cGV9X3N1ZmZpeA0KICAgICAgICAgdGVzdCAiJHJlc3VsdCIg IT0gbm8gJiYgYnJlYWsNCiAgICAgICBkb25lDQpmaQ0KZXZhbCBhY19yZXM9XCRnbF9jdl90eXBl XyR7Z2x0eXBlfV9zdWZmaXgNCgkgICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5v LSRMSU5FTk99OiByZXN1bHQ6ICRhY19yZXMiID4mNQ0KJGFzX2VjaG8gIiRhY19yZXMiID4mNjsg fQ0KICAgIEdMVFlQRT1gZWNobyAkZ2x0eXBlIHwgdHIgJ2FiY2RlZmdoaWprbG1ub3BxcnN0dXZ3 eHl6ICcgJ0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaXydgDQogICAgZXZhbCByZXN1bHQ9XCRn bF9jdl90eXBlXyR7Z2x0eXBlfV9zdWZmaXgNCiAgICB0ZXN0ICIkcmVzdWx0IiA9IG5vICYmIHJl c3VsdD0NCiAgICBldmFsICR7R0xUWVBFfV9TVUZGSVg9XCRyZXN1bHQNCiAgICBjYXQgPj5jb25m ZGVmcy5oIDw8X0FDRU9GDQojZGVmaW5lICR7R0xUWVBFfV9TVUZGSVggJHJlc3VsdA0KX0FDRU9G DQoNCiAgZG9uZQ0KDQoNCiAgZmkNCg0KDQogIGZvciBnbHR5cGUgaW4gc2lnX2F0b21pY190IHdj aGFyX3Qgd2ludF90IDsgZG8NCiAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJ TkVOT306IGNoZWNraW5nIGZvciAkZ2x0eXBlIGludGVnZXIgbGl0ZXJhbCBzdWZmaXgiID4mNQ0K JGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRnbHR5cGUgaW50ZWdlciBsaXRlcmFsIHN1ZmZpeC4u LiAiID4mNjsgfQ0KaWYgZXZhbCBcJHtnbF9jdl90eXBlXyR7Z2x0eXBlfV9zdWZmaXgrOn0gZmFs c2U7IHRoZW4gOg0KICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNg0KZWxzZQ0KICBldmFsIGds X2N2X3R5cGVfJHtnbHR5cGV9X3N1ZmZpeD1ubw0KICAgICAgIGV2YWwgcmVzdWx0PVwkZ2xfY3Zf dHlwZV8ke2dsdHlwZX1fc2lnbmVkDQogICAgICAgaWYgdGVzdCAiJHJlc3VsdCIgPSB5ZXM7IHRo ZW4NCiAgICAgICAgIGdsc3VmdT0NCiAgICAgICBlbHNlDQogICAgICAgICBnbHN1ZnU9dQ0KICAg ICAgIGZpDQogICAgICAgZm9yIGdsc3VmIGluICIkZ2xzdWZ1IiAke2dsc3VmdX1sICR7Z2xzdWZ1 fWxsICR7Z2xzdWZ1fWk2NDsgZG8NCiAgICAgICAgIGNhc2UgJGdsc3VmIGluDQogICAgICAgICAg ICcnKSAgZ2x0eXBlMT0naW50Jzs7DQogICAgICAgICAgIGwpICAgZ2x0eXBlMT0nbG9uZyBpbnQn OzsNCiAgICAgICAgICAgbGwpICBnbHR5cGUxPSdsb25nIGxvbmcgaW50Jzs7DQogICAgICAgICAg IGk2NCkgZ2x0eXBlMT0nX19pbnQ2NCc7Ow0KICAgICAgICAgICB1KSAgIGdsdHlwZTE9J3Vuc2ln bmVkIGludCc7Ow0KICAgICAgICAgICB1bCkgIGdsdHlwZTE9J3Vuc2lnbmVkIGxvbmcgaW50Jzs7 DQogICAgICAgICAgIHVsbCkgZ2x0eXBlMT0ndW5zaWduZWQgbG9uZyBsb25nIGludCc7Ow0KICAg ICAgICAgICB1aTY0KWdsdHlwZTE9J3Vuc2lnbmVkIF9faW50NjQnOzsNCiAgICAgICAgIGVzYWMN CiAgICAgICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQNCi8q IGVuZCBjb25mZGVmcy5oLiAgKi8NCg0KICAvKiBCU0QvT1MgNC4wLjEgaGFzIGEgYnVnOiA8c3Rk ZGVmLmg+LCA8c3RkaW8uaD4gYW5kIDx0aW1lLmg+IG11c3QgYmUNCiAgICAgaW5jbHVkZWQgYmVm b3JlIDx3Y2hhci5oPi4gICovDQogICNpbmNsdWRlIDxzdGRkZWYuaD4NCiAgI2luY2x1ZGUgPHNp Z25hbC5oPg0KICAjaWYgSEFWRV9XQ0hBUl9IDQogICMgaW5jbHVkZSA8c3RkaW8uaD4NCiAgIyBp bmNsdWRlIDx0aW1lLmg+DQogICMgaW5jbHVkZSA8d2NoYXIuaD4NCiAgI2VuZGlmDQoNCiAgICAg ICAgICAgICAgZXh0ZXJuICRnbHR5cGUgZm9vOw0KICAgICAgICAgICAgICBleHRlcm4gJGdsdHlw ZTEgZm9vOw0KaW50DQptYWluICgpDQp7DQoNCiAgOw0KICByZXR1cm4gMDsNCn0NCl9BQ0VPRg0K aWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOg0KICBldmFsIGdsX2N2X3R5 cGVfJHtnbHR5cGV9X3N1ZmZpeD1cJGdsc3VmDQpmaQ0Kcm0gLWYgY29yZSBjb25mdGVzdC5lcnIg Y29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0DQogICAgICAgICBldmFsIHJlc3Vs dD1cJGdsX2N2X3R5cGVfJHtnbHR5cGV9X3N1ZmZpeA0KICAgICAgICAgdGVzdCAiJHJlc3VsdCIg IT0gbm8gJiYgYnJlYWsNCiAgICAgICBkb25lDQpmaQ0KZXZhbCBhY19yZXM9XCRnbF9jdl90eXBl XyR7Z2x0eXBlfV9zdWZmaXgNCgkgICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5v LSRMSU5FTk99OiByZXN1bHQ6ICRhY19yZXMiID4mNQ0KJGFzX2VjaG8gIiRhY19yZXMiID4mNjsg fQ0KICAgIEdMVFlQRT1gZWNobyAkZ2x0eXBlIHwgdHIgJ2FiY2RlZmdoaWprbG1ub3BxcnN0dXZ3 eHl6ICcgJ0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaXydgDQogICAgZXZhbCByZXN1bHQ9XCRn bF9jdl90eXBlXyR7Z2x0eXBlfV9zdWZmaXgNCiAgICB0ZXN0ICIkcmVzdWx0IiA9IG5vICYmIHJl c3VsdD0NCiAgICBldmFsICR7R0xUWVBFfV9TVUZGSVg9XCRyZXN1bHQNCiAgICBjYXQgPj5jb25m ZGVmcy5oIDw8X0FDRU9GDQojZGVmaW5lICR7R0xUWVBFfV9TVUZGSVggJHJlc3VsdA0KX0FDRU9G DQoNCiAgZG9uZQ0KDQoNCg0KICAgIFNURElOVF9IPXN0ZGludC5oDQogIGZpDQoNCiAgIGlmIHRl c3QgLW4gIiRTVERJTlRfSCI7IHRoZW4NCiAgR0xfR0VORVJBVEVfU1RESU5UX0hfVFJVRT0NCiAg R0xfR0VORVJBVEVfU1RESU5UX0hfRkFMU0U9JyMnDQplbHNlDQogIEdMX0dFTkVSQVRFX1NURElO VF9IX1RSVUU9JyMnDQogIEdMX0dFTkVSQVRFX1NURElOVF9IX0ZBTFNFPQ0KZmkNCg0KDQoNCiAg Zm9yIGFjX2hlYWRlciBpbiBpbnR0eXBlcy5oDQpkbyA6DQogIGFjX2ZuX2NfY2hlY2tfaGVhZGVy X21vbmdyZWwgIiRMSU5FTk8iICJpbnR0eXBlcy5oIiAiYWNfY3ZfaGVhZGVyX2ludHR5cGVzX2gi ICIkYWNfaW5jbHVkZXNfZGVmYXVsdCINCmlmIHRlc3QgIngkYWNfY3ZfaGVhZGVyX2ludHR5cGVz X2giID0geHllczsgdGhlbiA6DQogIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YNCiNkZWZpbmUg SEFWRV9JTlRUWVBFU19IIDENCl9BQ0VPRg0KDQpmaQ0KDQpkb25lDQoNCiAgaWYgdGVzdCAkYWNf Y3ZfaGVhZGVyX2ludHR5cGVzX2ggPSB5ZXM7IHRoZW4NCiAgICB7ICRhc19lY2hvICIkYXNfbWU6 JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgdGhlIGludHR5cGVzLmggUFJJ eE5OIG1hY3JvcyBhcmUgYnJva2VuIiA+JjUNCiRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIg dGhlIGludHR5cGVzLmggUFJJeE5OIG1hY3JvcyBhcmUgYnJva2VuLi4uICIgPiY2OyB9DQppZiAk e2d0X2N2X2ludHR5cGVzX3ByaV9icm9rZW4rOn0gZmFsc2U7IHRoZW4gOg0KICAkYXNfZWNob19u ICIoY2FjaGVkKSAiID4mNg0KZWxzZQ0KDQogICAgICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNF T0YgPmNvbmZ0ZXN0LiRhY19leHQNCi8qIGVuZCBjb25mZGVmcy5oLiAgKi8NCg0KI2luY2x1ZGUg PGludHR5cGVzLmg+DQojaWZkZWYgUFJJZDMyDQpjaGFyICpwID0gUFJJZDMyOw0KI2VuZGlmDQoN CmludA0KbWFpbiAoKQ0Kew0KDQogIDsNCiAgcmV0dXJuIDA7DQp9DQpfQUNFT0YNCmlmIGFjX2Zu X2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoNCiAgZ3RfY3ZfaW50dHlwZXNfcHJpX2Jy b2tlbj1ubw0KZWxzZQ0KICBndF9jdl9pbnR0eXBlc19wcmlfYnJva2VuPXllcw0KZmkNCnJtIC1m IGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dA0K DQpmaQ0KeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRn dF9jdl9pbnR0eXBlc19wcmlfYnJva2VuIiA+JjUNCiRhc19lY2hvICIkZ3RfY3ZfaW50dHlwZXNf cHJpX2Jyb2tlbiIgPiY2OyB9DQogIGZpDQogIGlmIHRlc3QgIiRndF9jdl9pbnR0eXBlc19wcmlf YnJva2VuIiA9IHllczsgdGhlbg0KDQpjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GDQojZGVmaW5l IFBSSV9NQUNST1NfQlJPS0VOIDENCl9BQ0VPRg0KDQogICAgUFJJX01BQ1JPU19CUk9LRU49MQ0K ICBlbHNlDQogICAgUFJJX01BQ1JPU19CUk9LRU49MA0KICBmaQ0KDQoNCg0KDQphY19mbl9jX2No ZWNrX2RlY2wgIiRMSU5FTk8iICJpbWF4YWJzIiAiYWNfY3ZfaGF2ZV9kZWNsX2ltYXhhYnMiICIk YWNfaW5jbHVkZXNfZGVmYXVsdCINCmlmIHRlc3QgIngkYWNfY3ZfaGF2ZV9kZWNsX2ltYXhhYnMi ID0geHllczsgdGhlbiA6DQogIGFjX2hhdmVfZGVjbD0xDQplbHNlDQogIGFjX2hhdmVfZGVjbD0w DQpmaQ0KDQpjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GDQojZGVmaW5lIEhBVkVfREVDTF9JTUFY QUJTICRhY19oYXZlX2RlY2wNCl9BQ0VPRg0KDQphY19mbl9jX2NoZWNrX2RlY2wgIiRMSU5FTk8i ICJpbWF4ZGl2IiAiYWNfY3ZfaGF2ZV9kZWNsX2ltYXhkaXYiICIkYWNfaW5jbHVkZXNfZGVmYXVs dCINCmlmIHRlc3QgIngkYWNfY3ZfaGF2ZV9kZWNsX2ltYXhkaXYiID0geHllczsgdGhlbiA6DQog IGFjX2hhdmVfZGVjbD0xDQplbHNlDQogIGFjX2hhdmVfZGVjbD0wDQpmaQ0KDQpjYXQgPj5jb25m ZGVmcy5oIDw8X0FDRU9GDQojZGVmaW5lIEhBVkVfREVDTF9JTUFYRElWICRhY19oYXZlX2RlY2wN Cl9BQ0VPRg0KDQphY19mbl9jX2NoZWNrX2RlY2wgIiRMSU5FTk8iICJzdHJ0b2ltYXgiICJhY19j dl9oYXZlX2RlY2xfc3RydG9pbWF4IiAiJGFjX2luY2x1ZGVzX2RlZmF1bHQiDQppZiB0ZXN0ICJ4 JGFjX2N2X2hhdmVfZGVjbF9zdHJ0b2ltYXgiID0geHllczsgdGhlbiA6DQogIGFjX2hhdmVfZGVj bD0xDQplbHNlDQogIGFjX2hhdmVfZGVjbD0wDQpmaQ0KDQpjYXQgPj5jb25mZGVmcy5oIDw8X0FD RU9GDQojZGVmaW5lIEhBVkVfREVDTF9TVFJUT0lNQVggJGFjX2hhdmVfZGVjbA0KX0FDRU9GDQoN CmFjX2ZuX2NfY2hlY2tfZGVjbCAiJExJTkVOTyIgInN0cnRvdW1heCIgImFjX2N2X2hhdmVfZGVj bF9zdHJ0b3VtYXgiICIkYWNfaW5jbHVkZXNfZGVmYXVsdCINCmlmIHRlc3QgIngkYWNfY3ZfaGF2 ZV9kZWNsX3N0cnRvdW1heCIgPSB4eWVzOyB0aGVuIDoNCiAgYWNfaGF2ZV9kZWNsPTENCmVsc2UN CiAgYWNfaGF2ZV9kZWNsPTANCmZpDQoNCmNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YNCiNkZWZp bmUgSEFWRV9ERUNMX1NUUlRPVU1BWCAkYWNfaGF2ZV9kZWNsDQpfQUNFT0YNCg0KDQogIEdOVUxJ Ql9JTUFYQUJTPTA7DQogIEdOVUxJQl9JTUFYRElWPTA7DQogIEdOVUxJQl9TVFJUT0lNQVg9MDsN CiAgR05VTElCX1NUUlRPVU1BWD0wOw0KICAgIEhBVkVfREVDTF9JTUFYQUJTPTE7DQogIEhBVkVf REVDTF9JTUFYRElWPTE7DQogIEhBVkVfREVDTF9TVFJUT0lNQVg9MTsNCiAgSEFWRV9ERUNMX1NU UlRPVU1BWD0xOw0KDQoNCiAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99 OiBjaGVja2luZyB3aGVyZSB0byBmaW5kIHRoZSBleHBvbmVudCBpbiBhICdmbG9hdCciID4mNQ0K JGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hlcmUgdG8gZmluZCB0aGUgZXhwb25lbnQgaW4gYSAnZmxv YXQnLi4uICIgPiY2OyB9DQppZiAke2dsX2N2X2NjX2Zsb2F0X2V4cGJpdDArOn0gZmFsc2U7IHRo ZW4gOg0KICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNg0KZWxzZQ0KDQogICAgICBpZiB0ZXN0 ICIkY3Jvc3NfY29tcGlsaW5nIiA9IHllczsgdGhlbiA6DQogIGdsX2N2X2NjX2Zsb2F0X2V4cGJp dDA9IndvcmQgMCBiaXQgMjMiDQplbHNlDQogIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNv bmZ0ZXN0LiRhY19leHQNCi8qIGVuZCBjb25mZGVmcy5oLiAgKi8NCg0KI2luY2x1ZGUgPGZsb2F0 Lmg+DQojaW5jbHVkZSA8c3RkZGVmLmg+DQojaW5jbHVkZSA8c3RkaW8uaD4NCiNpbmNsdWRlIDxz dHJpbmcuaD4NCiNkZWZpbmUgTldPUkRTIFwNCiAgKChzaXplb2YgKGZsb2F0KSArIHNpemVvZiAo dW5zaWduZWQgaW50KSAtIDEpIC8gc2l6ZW9mICh1bnNpZ25lZCBpbnQpKQ0KdHlwZWRlZiB1bmlv biB7IGZsb2F0IHZhbHVlOyB1bnNpZ25lZCBpbnQgd29yZFtOV09SRFNdOyB9IG1lbW9yeV9mbG9h dDsNCnN0YXRpYyB1bnNpZ25lZCBpbnQgb3JlZF93b3Jkc1tOV09SRFNdOw0Kc3RhdGljIHVuc2ln bmVkIGludCBhbmRlZF93b3Jkc1tOV09SRFNdOw0Kc3RhdGljIHZvaWQgYWRkX3RvX29yZWRfd29y ZHMgKGZsb2F0IHgpDQp7DQogIG1lbW9yeV9mbG9hdCBtOw0KICBzaXplX3QgaTsNCiAgLyogQ2xl YXIgaXQgZmlyc3QsIGluIGNhc2UNCiAgICAgc2l6ZW9mIChmbG9hdCkgPCBzaXplb2YgKG1lbW9y eV9mbG9hdCkuICAqLw0KICBtZW1zZXQgKCZtLCAwLCBzaXplb2YgKG1lbW9yeV9mbG9hdCkpOw0K ICBtLnZhbHVlID0geDsNCiAgZm9yIChpID0gMDsgaSA8IE5XT1JEUzsgaSsrKQ0KICAgIHsNCiAg ICAgIG9yZWRfd29yZHNbaV0gfD0gbS53b3JkW2ldOw0KICAgICAgYW5kZWRfd29yZHNbaV0gJj0g bS53b3JkW2ldOw0KICAgIH0NCn0NCmludCBtYWluICgpDQp7DQogIHNpemVfdCBqOw0KICBGSUxF ICpmcCA9IGZvcGVuICgiY29uZnRlc3Qub3V0IiwgInciKTsNCiAgaWYgKGZwID09IE5VTEwpDQog ICAgcmV0dXJuIDE7DQogIGZvciAoaiA9IDA7IGogPCBOV09SRFM7IGorKykNCiAgICBhbmRlZF93 b3Jkc1tqXSA9IH4gKHVuc2lnbmVkIGludCkgMDsNCiAgYWRkX3RvX29yZWRfd29yZHMgKDAuMjVm KTsNCiAgYWRkX3RvX29yZWRfd29yZHMgKDAuNWYpOw0KICBhZGRfdG9fb3JlZF93b3JkcyAoMS4w Zik7DQogIGFkZF90b19vcmVkX3dvcmRzICgyLjBmKTsNCiAgYWRkX3RvX29yZWRfd29yZHMgKDQu MGYpOw0KICAvKiBSZW1vdmUgYml0cyB0aGF0IGFyZSBjb21tb24gKGUuZy4gaWYgcmVwcmVzZW50 YXRpb24gb2YgdGhlIGZpcnN0IG1hbnRpc3NhDQogICAgIGJpdCBpcyBleHBsaWNpdCkuICAqLw0K ICBmb3IgKGogPSAwOyBqIDwgTldPUkRTOyBqKyspDQogICAgb3JlZF93b3Jkc1tqXSAmPSB+YW5k ZWRfd29yZHNbal07DQogIC8qIE5vdyBmaW5kIHRoZSBub256ZXJvIHdvcmQuICAqLw0KICBmb3Ig KGogPSAwOyBqIDwgTldPUkRTOyBqKyspDQogICAgaWYgKG9yZWRfd29yZHNbal0gIT0gMCkNCiAg ICAgIGJyZWFrOw0KICBpZiAoaiA8IE5XT1JEUykNCiAgICB7DQogICAgICBzaXplX3QgaTsNCiAg ICAgIGZvciAoaSA9IGogKyAxOyBpIDwgTldPUkRTOyBpKyspDQogICAgICAgIGlmIChvcmVkX3dv cmRzW2ldICE9IDApDQogICAgICAgICAgew0KICAgICAgICAgICAgZnByaW50ZiAoZnAsICJ1bmtu b3duIik7DQogICAgICAgICAgICByZXR1cm4gKGZjbG9zZSAoZnApICE9IDApOw0KICAgICAgICAg IH0NCiAgICAgIGZvciAoaSA9IDA7IDsgaSsrKQ0KICAgICAgICBpZiAoKG9yZWRfd29yZHNbal0g Pj4gaSkgJiAxKQ0KICAgICAgICAgIHsNCiAgICAgICAgICAgIGZwcmludGYgKGZwLCAid29yZCAl ZCBiaXQgJWQiLCAoaW50KSBqLCAoaW50KSBpKTsNCiAgICAgICAgICAgIHJldHVybiAoZmNsb3Nl IChmcCkgIT0gMCk7DQogICAgICAgICAgfQ0KICAgIH0NCiAgZnByaW50ZiAoZnAsICJ1bmtub3du Iik7DQogIHJldHVybiAoZmNsb3NlIChmcCkgIT0gMCk7DQp9DQoNCl9BQ0VPRg0KaWYgYWNfZm5f Y190cnlfcnVuICIkTElORU5PIjsgdGhlbiA6DQogIGdsX2N2X2NjX2Zsb2F0X2V4cGJpdDA9YGNh dCBjb25mdGVzdC5vdXRgDQplbHNlDQogIGdsX2N2X2NjX2Zsb2F0X2V4cGJpdDA9InVua25vd24i DQpmaQ0Kcm0gLWYgY29yZSAqLmNvcmUgY29yZS5jb25mdGVzdC4qIGdtb24ub3V0IGJiLm91dCBj b25mdGVzdCRhY19leGVleHQgXA0KICBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LmJlYW0g Y29uZnRlc3QuJGFjX2V4dA0KZmkNCg0KICAgICAgcm0gLWYgY29uZnRlc3Qub3V0DQoNCmZpDQp7 ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGdsX2N2X2Nj X2Zsb2F0X2V4cGJpdDAiID4mNQ0KJGFzX2VjaG8gIiRnbF9jdl9jY19mbG9hdF9leHBiaXQwIiA+ JjY7IH0NCiAgY2FzZSAiJGdsX2N2X2NjX2Zsb2F0X2V4cGJpdDAiIGluDQogICAgd29yZCpiaXQq KQ0KICAgICAgd29yZD1gZWNobyAiJGdsX2N2X2NjX2Zsb2F0X2V4cGJpdDAiIHwgc2VkIC1lICdz L3dvcmQgLy8nIC1lICdzLyBiaXQuKi8vJ2ANCiAgICAgIGJpdD1gZWNobyAiJGdsX2N2X2NjX2Zs b2F0X2V4cGJpdDAiIHwgc2VkIC1lICdzL3dvcmQuKmJpdCAvLydgDQoNCmNhdCA+PmNvbmZkZWZz LmggPDxfQUNFT0YNCiNkZWZpbmUgRkxUX0VYUEJJVDBfV09SRCAkd29yZA0KX0FDRU9GDQoNCg0K Y2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRg0KI2RlZmluZSBGTFRfRVhQQklUMF9CSVQgJGJpdA0K X0FDRU9GDQoNCiAgICAgIDs7DQogIGVzYWMNCg0KDQogIEdOVUxJQl9JU1dCTEFOSz0wOw0KICBH TlVMSUJfV0NUWVBFPTA7DQogIEdOVUxJQl9JU1dDVFlQRT0wOw0KICBHTlVMSUJfV0NUUkFOUz0w Ow0KICBHTlVMSUJfVE9XQ1RSQU5TPTA7DQogICAgSEFWRV9JU1dCTEFOSz0xOw0KICBIQVZFX1dD VFlQRV9UPTE7DQogIEhBVkVfV0NUUkFOU19UPTE7DQogIFJFUExBQ0VfSVNXQkxBTks9MDsNCg0K DQoNCg0KICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5n IGZvciB3aW50X3QiID4mNQ0KJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIHdpbnRfdC4uLiAiID4m NjsgfQ0KaWYgJHtndF9jdl9jX3dpbnRfdCs6fSBmYWxzZTsgdGhlbiA6DQogICRhc19lY2hvX24g IihjYWNoZWQpICIgPiY2DQplbHNlDQogIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0 ZXN0LiRhY19leHQNCi8qIGVuZCBjb25mZGVmcy5oLiAgKi8NCg0KLyogVHJ1NjQgd2l0aCBEZXNr dG9wIFRvb2xraXQgQyBoYXMgYSBidWc6IDxzdGRpby5oPiBtdXN0IGJlIGluY2x1ZGVkIGJlZm9y ZQ0KICAgPHdjaGFyLmg+Lg0KICAgQlNEL09TIDQuMC4xIGhhcyBhIGJ1ZzogPHN0ZGRlZi5oPiwg PHN0ZGlvLmg+IGFuZCA8dGltZS5oPiBtdXN0IGJlIGluY2x1ZGVkDQogICBiZWZvcmUgPHdjaGFy Lmg+LiAgKi8NCiNpbmNsdWRlIDxzdGRkZWYuaD4NCiNpbmNsdWRlIDxzdGRpby5oPg0KI2luY2x1 ZGUgPHRpbWUuaD4NCiNpbmNsdWRlIDx3Y2hhci5oPg0KICAgICAgICAgICAgd2ludF90IGZvbyA9 ICh3Y2hhcl90KSdcMCc7DQppbnQNCm1haW4gKCkNCnsNCg0KICA7DQogIHJldHVybiAwOw0KfQ0K X0FDRU9GDQppZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6DQogIGd0X2N2 X2Nfd2ludF90PXllcw0KZWxzZQ0KICBndF9jdl9jX3dpbnRfdD1ubw0KZmkNCnJtIC1mIGNvcmUg Y29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dA0KZmkNCnsg JGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkZ3RfY3ZfY193 aW50X3QiID4mNQ0KJGFzX2VjaG8gIiRndF9jdl9jX3dpbnRfdCIgPiY2OyB9DQogIGlmIHRlc3Qg JGd0X2N2X2Nfd2ludF90ID0geWVzOyB0aGVuDQoNCiRhc19lY2hvICIjZGVmaW5lIEhBVkVfV0lO VF9UIDEiID4+Y29uZmRlZnMuaA0KDQogIGZpDQoNCg0KDQoNCg0KDQogIGlmIHRlc3QgJGFjX2N2 X2Z1bmNfaXN3Y250cmwgPSB5ZXM7IHRoZW4NCiAgICBIQVZFX0lTV0NOVFJMPTENCiAgZWxzZQ0K ICAgIEhBVkVfSVNXQ05UUkw9MA0KICBmaQ0KDQoNCg0KDQoNCiAgaWYgdGVzdCAkZ3RfY3ZfY193 aW50X3QgPSB5ZXM7IHRoZW4NCiAgICBIQVZFX1dJTlRfVD0xDQogIGVsc2UNCiAgICBIQVZFX1dJ TlRfVD0wDQogIGZpDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KICAgICBpZiB0ZXN0ICRnbF9jdl9o YXZlX2luY2x1ZGVfbmV4dCA9IHllczsgdGhlbg0KICAgICAgIGdsX2N2X25leHRfd2N0eXBlX2g9 Jzwnd2N0eXBlLmgnPicNCiAgICAgZWxzZQ0KICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2Fz X2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgYWJzb2x1dGUgbmFtZSBvZiA8d2N0eXBlLmg+IiA+ JjUNCiRhc19lY2hvX24gImNoZWNraW5nIGFic29sdXRlIG5hbWUgb2YgPHdjdHlwZS5oPi4uLiAi ID4mNjsgfQ0KaWYgJHtnbF9jdl9uZXh0X3djdHlwZV9oKzp9IGZhbHNlOyB0aGVuIDoNCiAgJGFz X2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYNCmVsc2UNCg0KICAgICAgICAgICAgIGlmIHRlc3QgJGFj X2N2X2hlYWRlcl93Y3R5cGVfaCA9IHllczsgdGhlbg0KDQoNCiAgICAgICAgICAgICAgIGNhdCBj b25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQNCi8qIGVuZCBjb25mZGVmcy5o LiAgKi8NCiNpbmNsdWRlIDx3Y3R5cGUuaD4NCg0KX0FDRU9GDQogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICIkaG9zdF9v cyIgaW4NCiAgICAgICAgICAgICAgICAgYWl4KikgZ2xfYWJzbmFtZV9jcHA9IiRhY19jcHAgLUMi IDs7DQogICAgICAgICAgICAgICAgICopICAgIGdsX2Fic25hbWVfY3BwPSIkYWNfY3BwIiA7Ow0K ICAgICAgICAgICAgICAgZXNhYw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgZ2xfY3ZfbmV4dF93Y3R5cGVfaD0nIidgKGV2YWwgIiRn bF9hYnNuYW1lX2NwcCBjb25mdGVzdC4kYWNfZXh0IikgMj4mNSB8DQogICAgICAgICAgICAgICAg ICBzZWQgLW4gJ1wjL3djdHlwZS5oI3sNCiAgICAgICAgICAgICAgICAgICAgcyMuKiJcKC4qL3dj dHlwZS5oXCkiLiojXDEjDQogICAgICAgICAgICAgICAgICAgIHMjXi9bXi9dIy8vJiMNCiAgICAg ICAgICAgICAgICAgICAgcA0KICAgICAgICAgICAgICAgICAgICBxDQogICAgICAgICAgICAgICAg ICB9J2AnIicNCiAgICAgICAgICBlbHNlDQogICAgICAgICAgICAgICBnbF9jdl9uZXh0X3djdHlw ZV9oPSc8J3djdHlwZS5oJz4nDQogICAgICAgICAgICAgZmkNCg0KDQpmaQ0KeyAkYXNfZWNobyAi JGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRnbF9jdl9uZXh0X3djdHlwZV9o IiA+JjUNCiRhc19lY2hvICIkZ2xfY3ZfbmV4dF93Y3R5cGVfaCIgPiY2OyB9DQogICAgIGZpDQog ICAgIE5FWFRfV0NUWVBFX0g9JGdsX2N2X25leHRfd2N0eXBlX2gNCg0KICAgICBpZiB0ZXN0ICRn bF9jdl9oYXZlX2luY2x1ZGVfbmV4dCA9IHllcyB8fCB0ZXN0ICRnbF9jdl9oYXZlX2luY2x1ZGVf bmV4dCA9IGJ1Z2d5OyB0aGVuDQogICAgICAgIyBJTkNMVURFX05FWFRfQVNfRklSU1RfRElSRUNU SVZFPSdpbmNsdWRlX25leHQnDQogICAgICAgZ2xfbmV4dF9hc19maXJzdF9kaXJlY3RpdmU9Jzwn d2N0eXBlLmgnPicNCiAgICAgZWxzZQ0KICAgICAgICMgSU5DTFVERV9ORVhUX0FTX0ZJUlNUX0RJ UkVDVElWRT0naW5jbHVkZScNCiAgICAgICBnbF9uZXh0X2FzX2ZpcnN0X2RpcmVjdGl2ZT0kZ2xf Y3ZfbmV4dF93Y3R5cGVfaA0KICAgICBmaQ0KICAgICBORVhUX0FTX0ZJUlNUX0RJUkVDVElWRV9X Q1RZUEVfSD0kZ2xfbmV4dF9hc19maXJzdF9kaXJlY3RpdmUNCg0KDQoNCg0KICBpZiB0ZXN0ICRh Y19jdl9oZWFkZXJfd2N0eXBlX2ggPSB5ZXM7IHRoZW4NCiAgICBpZiB0ZXN0ICRhY19jdl9mdW5j X2lzd2NudHJsID0geWVzOyB0aGVuDQogICAgICAgICAgICAgICAgICB7ICRhc19lY2hvICIkYXNf bWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgaXN3Y250cmwgd29ya3Mi ID4mNQ0KJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciBpc3djbnRybCB3b3Jrcy4uLiAiID4m NjsgfQ0KaWYgJHtnbF9jdl9mdW5jX2lzd2NudHJsX3dvcmtzKzp9IGZhbHNlOyB0aGVuIDoNCiAg JGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYNCmVsc2UNCg0KICAgICAgICAgIGlmIHRlc3QgIiRj cm9zc19jb21waWxpbmciID0geWVzOyB0aGVuIDoNCiAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VP RiA+Y29uZnRlc3QuJGFjX2V4dA0KLyogZW5kIGNvbmZkZWZzLmguICAqLw0KI2luY2x1ZGUgPHN0 ZGxpYi5oPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAjaWYgX19HTlVfTElCUkFSWV9fID09 IDENCiAgICAgICAgICAgICAgICAgICAgICAgICAgTGludXggbGliYzUgaTE4biBpcyBicm9rZW4u DQogICAgICAgICAgICAgICAgICAgICAgICAgICNlbmRpZg0KaW50DQptYWluICgpDQp7DQoNCiAg Ow0KICByZXR1cm4gMDsNCn0NCl9BQ0VPRg0KaWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVO TyI7IHRoZW4gOg0KICBnbF9jdl9mdW5jX2lzd2NudHJsX3dvcmtzPXllcw0KZWxzZQ0KICBnbF9j dl9mdW5jX2lzd2NudHJsX3dvcmtzPW5vDQpmaQ0Kcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29u ZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0DQoNCmVsc2UNCiAgY2F0IGNvbmZkZWZz LmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dA0KLyogZW5kIGNvbmZkZWZzLmguICAqLw0K DQogICAgICAgICAgICAgICAvKiBUcnU2NCB3aXRoIERlc2t0b3AgVG9vbGtpdCBDIGhhcyBhIGJ1 ZzogPHN0ZGlvLmg+IG11c3QgYmUNCiAgICAgICAgICAgICAgICAgIGluY2x1ZGVkIGJlZm9yZSA8 d2NoYXIuaD4uDQogICAgICAgICAgICAgICAgICBCU0QvT1MgNC4wLjEgaGFzIGEgYnVnOiA8c3Rk ZGVmLmg+LCA8c3RkaW8uaD4gYW5kIDx0aW1lLmg+DQogICAgICAgICAgICAgICAgICBtdXN0IGJl IGluY2x1ZGVkIGJlZm9yZSA8d2NoYXIuaD4uICAqLw0KICAgICAgICAgICAgICAgI2luY2x1ZGUg PHN0ZGRlZi5oPg0KICAgICAgICAgICAgICAgI2luY2x1ZGUgPHN0ZGlvLmg+DQogICAgICAgICAg ICAgICAjaW5jbHVkZSA8dGltZS5oPg0KICAgICAgICAgICAgICAgI2luY2x1ZGUgPHdjaGFyLmg+ DQogICAgICAgICAgICAgICAjaW5jbHVkZSA8d2N0eXBlLmg+DQogICAgICAgICAgICAgICBpbnQg bWFpbiAoKSB7IHJldHVybiBpc3dwcmludCAoJ3gnKSA9PSAwOyB9DQoNCl9BQ0VPRg0KaWYgYWNf Zm5fY190cnlfcnVuICIkTElORU5PIjsgdGhlbiA6DQogIGdsX2N2X2Z1bmNfaXN3Y250cmxfd29y a3M9eWVzDQplbHNlDQogIGdsX2N2X2Z1bmNfaXN3Y250cmxfd29ya3M9bm8NCmZpDQpybSAtZiBj b3JlICouY29yZSBjb3JlLmNvbmZ0ZXN0LiogZ21vbi5vdXQgYmIub3V0IGNvbmZ0ZXN0JGFjX2V4 ZWV4dCBcDQogIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuYmVhbSBjb25mdGVzdC4kYWNf ZXh0DQpmaQ0KDQoNCmZpDQp7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306 IHJlc3VsdDogJGdsX2N2X2Z1bmNfaXN3Y250cmxfd29ya3MiID4mNQ0KJGFzX2VjaG8gIiRnbF9j dl9mdW5jX2lzd2NudHJsX3dvcmtzIiA+JjY7IH0NCiAgICBmaQ0KICAgIEhBVkVfV0NUWVBFX0g9 MQ0KICBlbHNlDQogICAgSEFWRV9XQ1RZUEVfSD0wDQogIGZpDQoNCg0KICBpZiB0ZXN0ICIkZ2xf Y3ZfZnVuY19pc3djbnRybF93b3JrcyIgPSBubzsgdGhlbg0KICAgIFJFUExBQ0VfSVNXQ05UUkw9 MQ0KICBlbHNlDQogICAgUkVQTEFDRV9JU1dDTlRSTD0wDQogIGZpDQoNCg0KICBpZiB0ZXN0ICRI QVZFX0lTV0NOVFJMID0gMCB8fCB0ZXN0ICRSRVBMQUNFX0lTV0NOVFJMID0gMTsgdGhlbg0KICAg ICAgICA6DQogIGZpDQoNCiAgICAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8t JExJTkVOT306IGNoZWNraW5nIGZvciB3Y3R5cGVfdCIgPiY1DQokYXNfZWNob19uICJjaGVja2lu ZyBmb3Igd2N0eXBlX3QuLi4gIiA+JjY7IH0NCmlmICR7Z2xfY3ZfdHlwZV93Y3R5cGVfdCs6fSBm YWxzZTsgdGhlbiA6DQogICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2DQplbHNlDQogIGNhdCBj b25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQNCi8qIGVuZCBjb25mZGVmcy5o LiAgKi8NCi8qIFRydTY0IHdpdGggRGVza3RvcCBUb29sa2l0IEMgaGFzIGEgYnVnOiA8c3RkaW8u aD4gbXVzdCBiZQ0KICAgICAgICAgICAgICAgaW5jbHVkZWQgYmVmb3JlIDx3Y2hhci5oPi4NCiAg ICAgICAgICAgICAgIEJTRC9PUyA0LjAuMSBoYXMgYSBidWc6IDxzdGRkZWYuaD4sIDxzdGRpby5o PiBhbmQgPHRpbWUuaD4NCiAgICAgICAgICAgICAgIG11c3QgYmUgaW5jbHVkZWQgYmVmb3JlIDx3 Y2hhci5oPi4gICovDQogICAgICAgICAgICAjaW5jbHVkZSA8c3RkZGVmLmg+DQogICAgICAgICAg ICAjaW5jbHVkZSA8c3RkaW8uaD4NCiAgICAgICAgICAgICNpbmNsdWRlIDx0aW1lLmg+DQogICAg ICAgICAgICAjaW5jbHVkZSA8d2NoYXIuaD4NCiAgICAgICAgICAgICNpZiBIQVZFX1dDVFlQRV9I DQogICAgICAgICAgICAjIGluY2x1ZGUgPHdjdHlwZS5oPg0KICAgICAgICAgICAgI2VuZGlmDQog ICAgICAgICAgICB3Y3R5cGVfdCBhOw0KDQppbnQNCm1haW4gKCkNCnsNCg0KICA7DQogIHJldHVy biAwOw0KfQ0KX0FDRU9GDQppZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6 DQogIGdsX2N2X3R5cGVfd2N0eXBlX3Q9eWVzDQplbHNlDQogIGdsX2N2X3R5cGVfd2N0eXBlX3Q9 bm8NCmZpDQpybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0 ZXN0LiRhY19leHQNCg0KZmkNCnsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5P fTogcmVzdWx0OiAkZ2xfY3ZfdHlwZV93Y3R5cGVfdCIgPiY1DQokYXNfZWNobyAiJGdsX2N2X3R5 cGVfd2N0eXBlX3QiID4mNjsgfQ0KICBpZiB0ZXN0ICRnbF9jdl90eXBlX3djdHlwZV90ID0gbm87 IHRoZW4NCiAgICBIQVZFX1dDVFlQRV9UPTANCiAgZmkNCg0KICAgICAgeyAkYXNfZWNobyAiJGFz X21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3Igd2N0cmFuc190IiA+JjUNCiRh c19lY2hvX24gImNoZWNraW5nIGZvciB3Y3RyYW5zX3QuLi4gIiA+JjY7IH0NCmlmICR7Z2xfY3Zf dHlwZV93Y3RyYW5zX3QrOn0gZmFsc2U7IHRoZW4gOg0KICAkYXNfZWNob19uICIoY2FjaGVkKSAi ID4mNg0KZWxzZQ0KICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0 DQovKiBlbmQgY29uZmRlZnMuaC4gICovDQovKiBUcnU2NCB3aXRoIERlc2t0b3AgVG9vbGtpdCBD IGhhcyBhIGJ1ZzogPHN0ZGlvLmg+IG11c3QgYmUNCiAgICAgICAgICAgICAgIGluY2x1ZGVkIGJl Zm9yZSA8d2NoYXIuaD4uDQogICAgICAgICAgICAgICBCU0QvT1MgNC4wLjEgaGFzIGEgYnVnOiA8 c3RkZGVmLmg+LCA8c3RkaW8uaD4gYW5kIDx0aW1lLmg+DQogICAgICAgICAgICAgICBtdXN0IGJl IGluY2x1ZGVkIGJlZm9yZSA8d2NoYXIuaD4uICAqLw0KICAgICAgICAgICAgI2luY2x1ZGUgPHN0 ZGRlZi5oPg0KICAgICAgICAgICAgI2luY2x1ZGUgPHN0ZGlvLmg+DQogICAgICAgICAgICAjaW5j bHVkZSA8dGltZS5oPg0KICAgICAgICAgICAgI2luY2x1ZGUgPHdjaGFyLmg+DQogICAgICAgICAg ICAjaW5jbHVkZSA8d2N0eXBlLmg+DQogICAgICAgICAgICB3Y3RyYW5zX3QgYTsNCg0KaW50DQpt YWluICgpDQp7DQoNCiAgOw0KICByZXR1cm4gMDsNCn0NCl9BQ0VPRg0KaWYgYWNfZm5fY190cnlf Y29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOg0KICBnbF9jdl90eXBlX3djdHJhbnNfdD15ZXMNCmVs c2UNCiAgZ2xfY3ZfdHlwZV93Y3RyYW5zX3Q9bm8NCmZpDQpybSAtZiBjb3JlIGNvbmZ0ZXN0LmVy ciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQNCg0KZmkNCnsgJGFzX2VjaG8g IiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkZ2xfY3ZfdHlwZV93Y3RyYW5z X3QiID4mNQ0KJGFzX2VjaG8gIiRnbF9jdl90eXBlX3djdHJhbnNfdCIgPiY2OyB9DQogIGlmIHRl c3QgJGdsX2N2X3R5cGVfd2N0cmFuc190ID0gbm87IHRoZW4NCiAgICBIQVZFX1dDVFJBTlNfVD0w DQogIGZpDQoNCg0KICAgIGZvciBnbF9mdW5jIGluIHdjdHlwZSBpc3djdHlwZSB3Y3RyYW5zIHRv d2N0cmFucyAgICAgOyBkbw0KICAgIGFzX2dsX1N5bWJvbD1gJGFzX2VjaG8gImdsX2N2X2hhdmVf cmF3X2RlY2xfJGdsX2Z1bmMiIHwgJGFzX3RyX3NoYA0KICAgIHsgJGFzX2VjaG8gIiRhc19tZTok e2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciAkZ2xfZnVuYyBpcyBkZWNsYXJl ZCB3aXRob3V0IGEgbWFjcm8iID4mNQ0KJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciAkZ2xf ZnVuYyBpcyBkZWNsYXJlZCB3aXRob3V0IGEgbWFjcm8uLi4gIiA+JjY7IH0NCmlmIGV2YWwgXCR7 JGFzX2dsX1N5bWJvbCs6fSBmYWxzZTsgdGhlbiA6DQogICRhc19lY2hvX24gIihjYWNoZWQpICIg PiY2DQplbHNlDQogIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQN Ci8qIGVuZCBjb25mZGVmcy5oLiAgKi8NCg0KLyogVHJ1NjQgd2l0aCBEZXNrdG9wIFRvb2xraXQg QyBoYXMgYSBidWc6IDxzdGRpby5oPiBtdXN0IGJlIGluY2x1ZGVkIGJlZm9yZQ0KICAgPHdjaGFy Lmg+Lg0KICAgQlNEL09TIDQuMC4xIGhhcyBhIGJ1ZzogPHN0ZGRlZi5oPiwgPHN0ZGlvLmg+IGFu ZCA8dGltZS5oPiBtdXN0IGJlDQogICBpbmNsdWRlZCBiZWZvcmUgPHdjaGFyLmg+LiAgKi8NCiNp ZiAhKGRlZmluZWQgX19HTElCQ19fICYmICFkZWZpbmVkIF9fVUNMSUJDX18pDQojIGluY2x1ZGUg PHN0ZGRlZi5oPg0KIyBpbmNsdWRlIDxzdGRpby5oPg0KIyBpbmNsdWRlIDx0aW1lLmg+DQojIGlu Y2x1ZGUgPHdjaGFyLmg+DQojZW5kaWYNCiNpbmNsdWRlIDx3Y3R5cGUuaD4NCg0KaW50DQptYWlu ICgpDQp7DQojdW5kZWYgJGdsX2Z1bmMNCiAgKHZvaWQpICRnbF9mdW5jOw0KICA7DQogIHJldHVy biAwOw0KfQ0KX0FDRU9GDQppZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6 DQogIGV2YWwgIiRhc19nbF9TeW1ib2w9eWVzIg0KZWxzZQ0KICBldmFsICIkYXNfZ2xfU3ltYm9s PW5vIg0KZmkNCnJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29u ZnRlc3QuJGFjX2V4dA0KZmkNCmV2YWwgYWNfcmVzPVwkJGFzX2dsX1N5bWJvbA0KCSAgICAgICB7 ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX3JlcyIg PiY1DQokYXNfZWNobyAiJGFjX3JlcyIgPiY2OyB9DQogICAgIGlmIGV2YWwgdGVzdCBcInhcJCIk YXNfZ2xfU3ltYm9sIlwiID0geCJ5ZXMiOyB0aGVuIDoNCiAgY2F0ID4+Y29uZmRlZnMuaCA8PF9B Q0VPRg0KI2RlZmluZSBgJGFzX2VjaG8gIkhBVkVfUkFXX0RFQ0xfJGdsX2Z1bmMiIHwgJGFzX3Ry X2NwcGAgMQ0KX0FDRU9GDQoNCiAgICAgICAgICAgICAgICAgICAgIGV2YWwgYWNfY3ZfaGF2ZV9k ZWNsXyRnbF9mdW5jPXllcw0KZmkNCiAgICAgIGRvbmUNCg0KDQoNCg0KYWNfZm5fY19jaGVja19k ZWNsICIkTElORU5PIiAiaXN3YmxhbmsiICJhY19jdl9oYXZlX2RlY2xfaXN3YmxhbmsiICIkYWNf aW5jbHVkZXNfZGVmYXVsdCINCmlmIHRlc3QgIngkYWNfY3ZfaGF2ZV9kZWNsX2lzd2JsYW5rIiA9 IHh5ZXM7IHRoZW4gOg0KICBhY19oYXZlX2RlY2w9MQ0KZWxzZQ0KICBhY19oYXZlX2RlY2w9MA0K ZmkNCg0KY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRg0KI2RlZmluZSBIQVZFX0RFQ0xfSVNXQkxB TksgJGFjX2hhdmVfZGVjbA0KX0FDRU9GDQoNCg0KICBHTlVMSUJfTkxfTEFOR0lORk89MDsNCiAg ICBIQVZFX05MX0xBTkdJTkZPPTE7DQogIFJFUExBQ0VfTkxfTEFOR0lORk89MDsNCg0KDQoNCg0K DQoNCg0KDQoNCg0KDQphY19mbl9jX2NoZWNrX2RlY2wgIiRMSU5FTk8iICJnZXRjX3VubG9ja2Vk IiAiYWNfY3ZfaGF2ZV9kZWNsX2dldGNfdW5sb2NrZWQiICIkYWNfaW5jbHVkZXNfZGVmYXVsdCIN CmlmIHRlc3QgIngkYWNfY3ZfaGF2ZV9kZWNsX2dldGNfdW5sb2NrZWQiID0geHllczsgdGhlbiA6 DQogIGFjX2hhdmVfZGVjbD0xDQplbHNlDQogIGFjX2hhdmVfZGVjbD0wDQpmaQ0KDQpjYXQgPj5j b25mZGVmcy5oIDw8X0FDRU9GDQojZGVmaW5lIEhBVkVfREVDTF9HRVRDX1VOTE9DS0VEICRhY19o YXZlX2RlY2wNCl9BQ0VPRg0KDQoNCiAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8t JExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgd2UgYXJlIHVzaW5nIHRoZSBHTlUgQyBMaWJyYXJ5 ID49IDIuMSBvciB1Q2xpYmMiID4mNQ0KJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciB3ZSBh cmUgdXNpbmcgdGhlIEdOVSBDIExpYnJhcnkgPj0gMi4xIG9yIHVDbGliYy4uLiAiID4mNjsgfQ0K aWYgJHthY19jdl9nbnVfbGlicmFyeV8yXzErOn0gZmFsc2U7IHRoZW4gOg0KICAkYXNfZWNob19u ICIoY2FjaGVkKSAiID4mNg0KZWxzZQ0KICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25m dGVzdC4kYWNfZXh0DQovKiBlbmQgY29uZmRlZnMuaC4gICovDQoNCiNpbmNsdWRlIDxmZWF0dXJl cy5oPg0KI2lmZGVmIF9fR05VX0xJQlJBUllfXw0KICNpZiAoX19HTElCQ19fID09IDIgJiYgX19H TElCQ19NSU5PUl9fID49IDEpIHx8IChfX0dMSUJDX18gPiAyKQ0KICBMdWNreSBHTlUgdXNlcg0K ICNlbmRpZg0KI2VuZGlmDQojaWZkZWYgX19VQ0xJQkNfXw0KIEx1Y2t5IHVzZXINCiNlbmRpZg0K DQpfQUNFT0YNCmlmIChldmFsICIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQiKSAyPiY1IHwNCiAg JEVHUkVQICJMdWNreSIgPi9kZXYvbnVsbCAyPiYxOyB0aGVuIDoNCiAgYWNfY3ZfZ251X2xpYnJh cnlfMl8xPXllcw0KZWxzZQ0KICBhY19jdl9nbnVfbGlicmFyeV8yXzE9bm8NCmZpDQpybSAtZiBj b25mdGVzdCoNCg0KDQoNCmZpDQp7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVO T306IHJlc3VsdDogJGFjX2N2X2dudV9saWJyYXJ5XzJfMSIgPiY1DQokYXNfZWNobyAiJGFjX2N2 X2dudV9saWJyYXJ5XzJfMSIgPiY2OyB9DQoNCiAgICBHTElCQzIxPSIkYWNfY3ZfZ251X2xpYnJh cnlfMl8xIg0KDQoNCg0KICBHTlVMSUJfU0VUTE9DQUxFPTA7DQogIEdOVUxJQl9EVVBMT0NBTEU9 MDsNCiAgICBIQVZFX0RVUExPQ0FMRT0xOw0KICBSRVBMQUNFX1NFVExPQ0FMRT0wOw0KICBSRVBM QUNFX0RVUExPQ0FMRT0wOw0KDQoNCiAgICBSRVBMQUNFX05VTEw9MDsNCiAgSEFWRV9XQ0hBUl9U PTE7DQoNCg0KICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNr aW5nIGZvciB3Y2hhcl90IiA+JjUNCiRhc19lY2hvX24gImNoZWNraW5nIGZvciB3Y2hhcl90Li4u ICIgPiY2OyB9DQppZiAke2d0X2N2X2Nfd2NoYXJfdCs6fSBmYWxzZTsgdGhlbiA6DQogICRhc19l Y2hvX24gIihjYWNoZWQpICIgPiY2DQplbHNlDQogIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0Yg PmNvbmZ0ZXN0LiRhY19leHQNCi8qIGVuZCBjb25mZGVmcy5oLiAgKi8NCiNpbmNsdWRlIDxzdGRk ZWYuaD4NCiAgICAgICAgICAgIHdjaGFyX3QgZm9vID0gKHdjaGFyX3QpJ1wwJzsNCmludA0KbWFp biAoKQ0Kew0KDQogIDsNCiAgcmV0dXJuIDA7DQp9DQpfQUNFT0YNCmlmIGFjX2ZuX2NfdHJ5X2Nv bXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoNCiAgZ3RfY3ZfY193Y2hhcl90PXllcw0KZWxzZQ0KICBn dF9jdl9jX3djaGFyX3Q9bm8NCmZpDQpybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4k YWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQNCmZpDQp7ICRhc19lY2hvICIkYXNfbWU6JHthc19s aW5lbm8tJExJTkVOT306IHJlc3VsdDogJGd0X2N2X2Nfd2NoYXJfdCIgPiY1DQokYXNfZWNobyAi JGd0X2N2X2Nfd2NoYXJfdCIgPiY2OyB9DQogIGlmIHRlc3QgJGd0X2N2X2Nfd2NoYXJfdCA9IHll czsgdGhlbg0KDQokYXNfZWNobyAiI2RlZmluZSBIQVZFX1dDSEFSX1QgMSIgPj5jb25mZGVmcy5o DQoNCiAgZmkNCg0KDQoNCg0KICBTVERERUZfSD0NCiAgaWYgdGVzdCAkZ3RfY3ZfY193Y2hhcl90 ID0gbm87IHRoZW4NCiAgICBIQVZFX1dDSEFSX1Q9MA0KICAgIFNURERFRl9IPXN0ZGRlZi5oDQog IGZpDQogIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcg d2hldGhlciBOVUxMIGNhbiBiZSB1c2VkIGluIGFyYml0cmFyeSBleHByZXNzaW9ucyIgPiY1DQok YXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIE5VTEwgY2FuIGJlIHVzZWQgaW4gYXJiaXRyYXJ5 IGV4cHJlc3Npb25zLi4uICIgPiY2OyB9DQppZiAke2dsX2N2X2RlY2xfbnVsbF93b3Jrcys6fSBm YWxzZTsgdGhlbiA6DQogICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2DQplbHNlDQogIGNhdCBj b25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQNCi8qIGVuZCBjb25mZGVmcy5o LiAgKi8NCiNpbmNsdWRlIDxzdGRkZWYuaD4NCiAgICAgIGludCB0ZXN0WzIgKiAoc2l6ZW9mIE5V TEwgPT0gc2l6ZW9mICh2b2lkICopKSAtMV07DQoNCmludA0KbWFpbiAoKQ0Kew0KDQogIDsNCiAg cmV0dXJuIDA7DQp9DQpfQUNFT0YNCmlmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0 aGVuIDoNCiAgZ2xfY3ZfZGVjbF9udWxsX3dvcmtzPXllcw0KZWxzZQ0KICBnbF9jdl9kZWNsX251 bGxfd29ya3M9bm8NCmZpDQpybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2Jq ZXh0IGNvbmZ0ZXN0LiRhY19leHQNCmZpDQp7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8t JExJTkVOT306IHJlc3VsdDogJGdsX2N2X2RlY2xfbnVsbF93b3JrcyIgPiY1DQokYXNfZWNobyAi JGdsX2N2X2RlY2xfbnVsbF93b3JrcyIgPiY2OyB9DQogIGlmIHRlc3QgJGdsX2N2X2RlY2xfbnVs bF93b3JrcyA9IG5vOyB0aGVuDQogICAgUkVQTEFDRV9OVUxMPTENCiAgICBTVERERUZfSD1zdGRk ZWYuaA0KICBmaQ0KDQogICBpZiB0ZXN0IC1uICIkU1REREVGX0giOyB0aGVuDQogIEdMX0dFTkVS QVRFX1NURERFRl9IX1RSVUU9DQogIEdMX0dFTkVSQVRFX1NURERFRl9IX0ZBTFNFPScjJw0KZWxz ZQ0KICBHTF9HRU5FUkFURV9TVERERUZfSF9UUlVFPScjJw0KICBHTF9HRU5FUkFURV9TVERERUZf SF9GQUxTRT0NCmZpDQoNCiAgaWYgdGVzdCAtbiAiJFNURERFRl9IIjsgdGhlbg0KDQoNCg0KDQoN Cg0KDQoNCiAgICAgaWYgdGVzdCAkZ2xfY3ZfaGF2ZV9pbmNsdWRlX25leHQgPSB5ZXM7IHRoZW4N CiAgICAgICBnbF9jdl9uZXh0X3N0ZGRlZl9oPSc8J3N0ZGRlZi5oJz4nDQogICAgIGVsc2UNCiAg ICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGFi c29sdXRlIG5hbWUgb2YgPHN0ZGRlZi5oPiIgPiY1DQokYXNfZWNob19uICJjaGVja2luZyBhYnNv bHV0ZSBuYW1lIG9mIDxzdGRkZWYuaD4uLi4gIiA+JjY7IH0NCmlmICR7Z2xfY3ZfbmV4dF9zdGRk ZWZfaCs6fSBmYWxzZTsgdGhlbiA6DQogICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2DQplbHNl DQoNCiAgICAgICAgICAgICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRh Y19leHQNCi8qIGVuZCBjb25mZGVmcy5oLiAgKi8NCiNpbmNsdWRlIDxzdGRkZWYuaD4NCg0KX0FD RU9GDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBjYXNlICIkaG9zdF9vcyIgaW4NCiAgICAgICAgICAgICAgICAgYWl4KikgZ2xf YWJzbmFtZV9jcHA9IiRhY19jcHAgLUMiIDs7DQogICAgICAgICAgICAgICAgICopICAgIGdsX2Fi c25hbWVfY3BwPSIkYWNfY3BwIiA7Ow0KICAgICAgICAgICAgICAgZXNhYw0KICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2xfY3ZfbmV4 dF9zdGRkZWZfaD0nIidgKGV2YWwgIiRnbF9hYnNuYW1lX2NwcCBjb25mdGVzdC4kYWNfZXh0Iikg Mj4mNSB8DQogICAgICAgICAgICAgICAgICBzZWQgLW4gJ1wjL3N0ZGRlZi5oI3sNCiAgICAgICAg ICAgICAgICAgICAgcyMuKiJcKC4qL3N0ZGRlZi5oXCkiLiojXDEjDQogICAgICAgICAgICAgICAg ICAgIHMjXi9bXi9dIy8vJiMNCiAgICAgICAgICAgICAgICAgICAgcA0KICAgICAgICAgICAgICAg ICAgICBxDQogICAgICAgICAgICAgICAgICB9J2AnIicNCg0KDQpmaQ0KeyAkYXNfZWNobyAiJGFz X21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRnbF9jdl9uZXh0X3N0ZGRlZl9oIiA+ JjUNCiRhc19lY2hvICIkZ2xfY3ZfbmV4dF9zdGRkZWZfaCIgPiY2OyB9DQogICAgIGZpDQogICAg IE5FWFRfU1REREVGX0g9JGdsX2N2X25leHRfc3RkZGVmX2gNCg0KICAgICBpZiB0ZXN0ICRnbF9j dl9oYXZlX2luY2x1ZGVfbmV4dCA9IHllcyB8fCB0ZXN0ICRnbF9jdl9oYXZlX2luY2x1ZGVfbmV4 dCA9IGJ1Z2d5OyB0aGVuDQogICAgICAgIyBJTkNMVURFX05FWFRfQVNfRklSU1RfRElSRUNUSVZF PSdpbmNsdWRlX25leHQnDQogICAgICAgZ2xfbmV4dF9hc19maXJzdF9kaXJlY3RpdmU9Jzwnc3Rk ZGVmLmgnPicNCiAgICAgZWxzZQ0KICAgICAgICMgSU5DTFVERV9ORVhUX0FTX0ZJUlNUX0RJUkVD VElWRT0naW5jbHVkZScNCiAgICAgICBnbF9uZXh0X2FzX2ZpcnN0X2RpcmVjdGl2ZT0kZ2xfY3Zf bmV4dF9zdGRkZWZfaA0KICAgICBmaQ0KICAgICBORVhUX0FTX0ZJUlNUX0RJUkVDVElWRV9TVERE RUZfSD0kZ2xfbmV4dF9hc19maXJzdF9kaXJlY3RpdmUNCg0KDQoNCg0KICBmaQ0KDQoNCg0KDQoN CiAgZ2xfdGhyZWFkc19hcGk9bm9uZQ0KICBMSUJUSFJFQUQ9DQogIExUTElCVEhSRUFEPQ0KICBM SUJNVUxUSVRIUkVBRD0NCiAgTFRMSUJNVUxUSVRIUkVBRD0NCiAgaWYgdGVzdCAiJGdsX3VzZV90 aHJlYWRzIiAhPSBubzsgdGhlbg0KICAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5l bm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgaW1wb3J0ZWQgc3ltYm9scyBjYW4gYmUgZGVj bGFyZWQgd2VhayIgPiY1DQokYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIGltcG9ydGVkIHN5 bWJvbHMgY2FuIGJlIGRlY2xhcmVkIHdlYWsuLi4gIiA+JjY7IH0NCmlmICR7Z2xfY3ZfaGF2ZV93 ZWFrKzp9IGZhbHNlOyB0aGVuIDoNCiAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYNCmVsc2UN CiAgZ2xfY3ZfaGF2ZV93ZWFrPW5vDQogICAgICAgICAgICAgIGNhdCBjb25mZGVmcy5oIC0gPDxf QUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQNCi8qIGVuZCBjb25mZGVmcy5oLiAgKi8NCmV4dGVybiB2 b2lkIHh5enp5ICgpOw0KI3ByYWdtYSB3ZWFrIHh5enp5DQppbnQNCm1haW4gKCkNCnsNCnh5enp5 KCk7DQogIDsNCiAgcmV0dXJuIDA7DQp9DQpfQUNFT0YNCmlmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRM SU5FTk8iOyB0aGVuIDoNCiAgZ2xfY3ZfaGF2ZV93ZWFrPW1heWJlDQpmaQ0Kcm0gLWYgY29yZSBj b25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcDQogICAgY29uZnRlc3QkYWNfZXhlZXh0 IGNvbmZ0ZXN0LiRhY19leHQNCiAgICAgICBpZiB0ZXN0ICRnbF9jdl9oYXZlX3dlYWsgPSBtYXli ZTsgdGhlbg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAiJGNyb3NzX2NvbXBp bGluZyIgPSB5ZXM7IHRoZW4gOg0KICAgICAgICAgICAgICAgICAgICAgICAgICBjYXQgY29uZmRl ZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0DQovKiBlbmQgY29uZmRlZnMuaC4gICov DQojaWZkZWYgX19FTEZfXw0KICAgICAgICAgICAgICAgRXh0ZW5zaWJsZSBMaW5raW5nIEZvcm1h dA0KICAgICAgICAgICAgICAgI2VuZGlmDQoNCl9BQ0VPRg0KaWYgKGV2YWwgIiRhY19jcHAgY29u ZnRlc3QuJGFjX2V4dCIpIDI+JjUgfA0KICAkRUdSRVAgIkV4dGVuc2libGUgTGlua2luZyBGb3Jt YXQiID4vZGV2L251bGwgMj4mMTsgdGhlbiA6DQogIGdsX2N2X2hhdmVfd2Vhaz0iZ3Vlc3Npbmcg eWVzIg0KZWxzZQ0KICBnbF9jdl9oYXZlX3dlYWs9Imd1ZXNzaW5nIG5vIg0KZmkNCnJtIC1mIGNv bmZ0ZXN0Kg0KDQoNCmVsc2UNCiAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3Qu JGFjX2V4dA0KLyogZW5kIGNvbmZkZWZzLmguICAqLw0KDQojaW5jbHVkZSA8c3RkaW8uaD4NCiNw cmFnbWEgd2VhayBmcHV0cw0KaW50IG1haW4gKCkNCnsNCiAgcmV0dXJuIChmcHV0cyA9PSBOVUxM KTsNCn0NCl9BQ0VPRg0KaWYgYWNfZm5fY190cnlfcnVuICIkTElORU5PIjsgdGhlbiA6DQogIGds X2N2X2hhdmVfd2Vhaz15ZXMNCmVsc2UNCiAgZ2xfY3ZfaGF2ZV93ZWFrPW5vDQpmaQ0Kcm0gLWYg Y29yZSAqLmNvcmUgY29yZS5jb25mdGVzdC4qIGdtb24ub3V0IGJiLm91dCBjb25mdGVzdCRhY19l eGVleHQgXA0KICBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LmJlYW0gY29uZnRlc3QuJGFj X2V4dA0KZmkNCg0KICAgICAgIGZpDQoNCmZpDQp7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5l bm8tJExJTkVOT306IHJlc3VsdDogJGdsX2N2X2hhdmVfd2VhayIgPiY1DQokYXNfZWNobyAiJGds X2N2X2hhdmVfd2VhayIgPiY2OyB9DQogICAgaWYgdGVzdCAiJGdsX3VzZV90aHJlYWRzIiA9IHll cyB8fCB0ZXN0ICIkZ2xfdXNlX3RocmVhZHMiID0gcG9zaXg7IHRoZW4NCiAgICAgICMgT24gT1NG LzEsIHRoZSBjb21waWxlciBuZWVkcyB0aGUgZmxhZyAtcHRocmVhZCBvciAtRF9SRUVOVFJBTlQg c28gdGhhdA0KICAgICAgIyBpdCBncm9rcyA8cHRocmVhZC5oPi4gSXQncyBhZGRlZCBhYm92ZSwg aW4gZ2xfVEhSRUFETElCX0VBUkxZX0JPRFkuDQogICAgICBhY19mbl9jX2NoZWNrX2hlYWRlcl9t b25ncmVsICIkTElORU5PIiAicHRocmVhZC5oIiAiYWNfY3ZfaGVhZGVyX3B0aHJlYWRfaCIgIiRh Y19pbmNsdWRlc19kZWZhdWx0Ig0KaWYgdGVzdCAieCRhY19jdl9oZWFkZXJfcHRocmVhZF9oIiA9 IHh5ZXM7IHRoZW4gOg0KICBnbF9oYXZlX3B0aHJlYWRfaD15ZXMNCmVsc2UNCiAgZ2xfaGF2ZV9w dGhyZWFkX2g9bm8NCmZpDQoNCg0KICAgICAgaWYgdGVzdCAiJGdsX2hhdmVfcHRocmVhZF9oIiA9 IHllczsgdGhlbg0KICAgICAgICAjIE90aGVyIHBvc3NpYmxlIHRlc3RzOg0KICAgICAgICAjICAg LWxwdGhyZWFkcyAoRlNVIHRocmVhZHMsIFBDdGhyZWFkcykNCiAgICAgICAgIyAgIC1sZ3RocmVh ZHMNCiAgICAgICAgZ2xfaGF2ZV9wdGhyZWFkPQ0KICAgICAgICAjIFRlc3Qgd2hldGhlciBib3Ro IHB0aHJlYWRfbXV0ZXhfbG9jayBhbmQgcHRocmVhZF9tdXRleGF0dHJfaW5pdCBleGlzdA0KICAg ICAgICAjIGluIGxpYmMuIElSSVggNi41IGhhcyB0aGUgZmlyc3Qgb25lIGluIGJvdGggbGliYyBh bmQgbGlicHRocmVhZCwgYnV0DQogICAgICAgICMgdGhlIHNlY29uZCBvbmUgb25seSBpbiBsaWJw dGhyZWFkLCBhbmQgbG9jay5jIG5lZWRzIGl0Lg0KICAgICAgICBjYXQgY29uZmRlZnMuaCAtIDw8 X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0DQovKiBlbmQgY29uZmRlZnMuaC4gICovDQojaW5jbHVk ZSA8cHRocmVhZC5oPg0KaW50DQptYWluICgpDQp7DQpwdGhyZWFkX211dGV4X2xvY2soKHB0aHJl YWRfbXV0ZXhfdCopMCk7DQogICAgICAgICAgICAgICBwdGhyZWFkX211dGV4YXR0cl9pbml0KChw dGhyZWFkX211dGV4YXR0cl90KikwKTsNCiAgOw0KICByZXR1cm4gMDsNCn0NCl9BQ0VPRg0KaWYg YWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOg0KICBnbF9oYXZlX3B0aHJlYWQ9eWVz DQpmaQ0Kcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcDQogICAg Y29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQNCiAgICAgICAgIyBUZXN0IGZvciBs aWJwdGhyZWFkIGJ5IGxvb2tpbmcgZm9yIHB0aHJlYWRfa2lsbC4gKE5vdCBwdGhyZWFkX3NlbGYs DQogICAgICAgICMgc2luY2UgaXQgaXMgZGVmaW5lZCBhcyBhIG1hY3JvIG9uIE9TRi8xLikNCiAg ICAgICAgaWYgdGVzdCAtbiAiJGdsX2hhdmVfcHRocmVhZCI7IHRoZW4NCiAgICAgICAgICAjIFRo ZSBwcm9ncmFtIGxpbmtzIGZpbmUgd2l0aG91dCBsaWJwdGhyZWFkLiBCdXQgaXQgbWF5IGFjdHVh bGx5DQogICAgICAgICAgIyBuZWVkIHRvIGxpbmsgd2l0aCBsaWJwdGhyZWFkIGluIG9yZGVyIHRv IGNyZWF0ZSBtdWx0aXBsZSB0aHJlYWRzLg0KICAgICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZTok e2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIHB0aHJlYWRfa2lsbCBpbiAtbHB0aHJl YWQiID4mNQ0KJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIHB0aHJlYWRfa2lsbCBpbiAtbHB0aHJl YWQuLi4gIiA+JjY7IH0NCmlmICR7YWNfY3ZfbGliX3B0aHJlYWRfcHRocmVhZF9raWxsKzp9IGZh bHNlOyB0aGVuIDoNCiAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYNCmVsc2UNCiAgYWNfY2hl Y2tfbGliX3NhdmVfTElCUz0kTElCUw0KTElCUz0iLWxwdGhyZWFkICAkTElCUyINCmNhdCBjb25m ZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQNCi8qIGVuZCBjb25mZGVmcy5oLiAg Ki8NCg0KLyogT3ZlcnJpZGUgYW55IEdDQyBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4g ZXJyb3IuDQogICBVc2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5 cGUgb2YgYSBHQ0MNCiAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3 b3VsZCBzdGlsbCBhcHBseS4gICovDQojaWZkZWYgX19jcGx1c3BsdXMNCmV4dGVybiAiQyINCiNl bmRpZg0KY2hhciBwdGhyZWFkX2tpbGwgKCk7DQppbnQNCm1haW4gKCkNCnsNCnJldHVybiBwdGhy ZWFkX2tpbGwgKCk7DQogIDsNCiAgcmV0dXJuIDA7DQp9DQpfQUNFT0YNCmlmIGFjX2ZuX2NfdHJ5 X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoNCiAgYWNfY3ZfbGliX3B0aHJlYWRfcHRocmVhZF9raWxs PXllcw0KZWxzZQ0KICBhY19jdl9saWJfcHRocmVhZF9wdGhyZWFkX2tpbGw9bm8NCmZpDQpybSAt ZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwNCiAgICBjb25mdGVzdCRh Y19leGVleHQgY29uZnRlc3QuJGFjX2V4dA0KTElCUz0kYWNfY2hlY2tfbGliX3NhdmVfTElCUw0K ZmkNCnsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNf Y3ZfbGliX3B0aHJlYWRfcHRocmVhZF9raWxsIiA+JjUNCiRhc19lY2hvICIkYWNfY3ZfbGliX3B0 aHJlYWRfcHRocmVhZF9raWxsIiA+JjY7IH0NCmlmIHRlc3QgIngkYWNfY3ZfbGliX3B0aHJlYWRf cHRocmVhZF9raWxsIiA9IHh5ZXM7IHRoZW4gOg0KICBMSUJNVUxUSVRIUkVBRD0tbHB0aHJlYWQg TFRMSUJNVUxUSVRIUkVBRD0tbHB0aHJlYWQNCiAgICAgICAgICAgICAjIE9uIFNvbGFyaXMgYW5k IEhQLVVYLCBtb3N0IHB0aHJlYWQgZnVuY3Rpb25zIGV4aXN0IGFsc28gaW4gbGliYy4NCiAgICAg ICAgICAgICAjIFRoZXJlZm9yZSBwdGhyZWFkX2luX3VzZSgpIG5lZWRzIHRvIGFjdHVhbGx5IHRy eSB0byBjcmVhdGUgYQ0KICAgICAgICAgICAgICMgdGhyZWFkOiBwdGhyZWFkX2NyZWF0ZSBmcm9t IGxpYmMgd2lsbCBmYWlsLCB3aGVyZWFzDQogICAgICAgICAgICAgIyBwdGhyZWFkX2NyZWF0ZSB3 aWxsIGFjdHVhbGx5IGNyZWF0ZSBhIHRocmVhZC4NCiAgICAgICAgICAgICBjYXNlICIkaG9zdF9v cyIgaW4NCiAgICAgICAgICAgICAgIHNvbGFyaXMqIHwgaHB1eCopDQoNCiRhc19lY2hvICIjZGVm aW5lIFBUSFJFQURfSU5fVVNFX0RFVEVDVElPTl9IQVJEIDEiID4+Y29uZmRlZnMuaA0KDQogICAg ICAgICAgICAgZXNhYw0KDQpmaQ0KDQogICAgICAgIGVsc2UNCiAgICAgICAgICAjIFNvbWUgbGli cmFyeSBpcyBuZWVkZWQuIFRyeSBsaWJwdGhyZWFkIGFuZCBsaWJjX3IuDQogICAgICAgICAgeyAk YXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgcHRocmVh ZF9raWxsIGluIC1scHRocmVhZCIgPiY1DQokYXNfZWNob19uICJjaGVja2luZyBmb3IgcHRocmVh ZF9raWxsIGluIC1scHRocmVhZC4uLiAiID4mNjsgfQ0KaWYgJHthY19jdl9saWJfcHRocmVhZF9w dGhyZWFkX2tpbGwrOn0gZmFsc2U7IHRoZW4gOg0KICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4m Ng0KZWxzZQ0KICBhY19jaGVja19saWJfc2F2ZV9MSUJTPSRMSUJTDQpMSUJTPSItbHB0aHJlYWQg ICRMSUJTIg0KY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dA0KLyog ZW5kIGNvbmZkZWZzLmguICAqLw0KDQovKiBPdmVycmlkZSBhbnkgR0NDIGludGVybmFsIHByb3Rv dHlwZSB0byBhdm9pZCBhbiBlcnJvci4NCiAgIFVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1h dGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIEdDQw0KICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJn dW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8NCiNpZmRlZiBfX2NwbHVzcGx1 cw0KZXh0ZXJuICJDIg0KI2VuZGlmDQpjaGFyIHB0aHJlYWRfa2lsbCAoKTsNCmludA0KbWFpbiAo KQ0Kew0KcmV0dXJuIHB0aHJlYWRfa2lsbCAoKTsNCiAgOw0KICByZXR1cm4gMDsNCn0NCl9BQ0VP Rg0KaWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOg0KICBhY19jdl9saWJfcHRo cmVhZF9wdGhyZWFkX2tpbGw9eWVzDQplbHNlDQogIGFjX2N2X2xpYl9wdGhyZWFkX3B0aHJlYWRf a2lsbD1ubw0KZmkNCnJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQg XA0KICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0DQpMSUJTPSRhY19jaGVj a19saWJfc2F2ZV9MSUJTDQpmaQ0KeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5F Tk99OiByZXN1bHQ6ICRhY19jdl9saWJfcHRocmVhZF9wdGhyZWFkX2tpbGwiID4mNQ0KJGFzX2Vj aG8gIiRhY19jdl9saWJfcHRocmVhZF9wdGhyZWFkX2tpbGwiID4mNjsgfQ0KaWYgdGVzdCAieCRh Y19jdl9saWJfcHRocmVhZF9wdGhyZWFkX2tpbGwiID0geHllczsgdGhlbiA6DQogIGdsX2hhdmVf cHRocmVhZD15ZXMNCiAgICAgICAgICAgICBMSUJUSFJFQUQ9LWxwdGhyZWFkIExUTElCVEhSRUFE PS1scHRocmVhZA0KICAgICAgICAgICAgIExJQk1VTFRJVEhSRUFEPS1scHRocmVhZCBMVExJQk1V TFRJVEhSRUFEPS1scHRocmVhZA0KZmkNCg0KICAgICAgICAgIGlmIHRlc3QgLXogIiRnbF9oYXZl X3B0aHJlYWQiOyB0aGVuDQogICAgICAgICAgICAjIEZvciBGcmVlQlNEIDQuDQogICAgICAgICAg ICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBw dGhyZWFkX2tpbGwgaW4gLWxjX3IiID4mNQ0KJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIHB0aHJl YWRfa2lsbCBpbiAtbGNfci4uLiAiID4mNjsgfQ0KaWYgJHthY19jdl9saWJfY19yX3B0aHJlYWRf a2lsbCs6fSBmYWxzZTsgdGhlbiA6DQogICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2DQplbHNl DQogIGFjX2NoZWNrX2xpYl9zYXZlX0xJQlM9JExJQlMNCkxJQlM9Ii1sY19yICAkTElCUyINCmNh dCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQNCi8qIGVuZCBjb25mZGVm cy5oLiAgKi8NCg0KLyogT3ZlcnJpZGUgYW55IEdDQyBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZv aWQgYW4gZXJyb3IuDQogICBVc2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0 dXJuIHR5cGUgb2YgYSBHQ0MNCiAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3Rv dHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovDQojaWZkZWYgX19jcGx1c3BsdXMNCmV4dGVybiAi QyINCiNlbmRpZg0KY2hhciBwdGhyZWFkX2tpbGwgKCk7DQppbnQNCm1haW4gKCkNCnsNCnJldHVy biBwdGhyZWFkX2tpbGwgKCk7DQogIDsNCiAgcmV0dXJuIDA7DQp9DQpfQUNFT0YNCmlmIGFjX2Zu X2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoNCiAgYWNfY3ZfbGliX2Nfcl9wdGhyZWFkX2tp bGw9eWVzDQplbHNlDQogIGFjX2N2X2xpYl9jX3JfcHRocmVhZF9raWxsPW5vDQpmaQ0Kcm0gLWYg Y29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcDQogICAgY29uZnRlc3QkYWNf ZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQNCkxJQlM9JGFjX2NoZWNrX2xpYl9zYXZlX0xJQlMNCmZp DQp7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2 X2xpYl9jX3JfcHRocmVhZF9raWxsIiA+JjUNCiRhc19lY2hvICIkYWNfY3ZfbGliX2Nfcl9wdGhy ZWFkX2tpbGwiID4mNjsgfQ0KaWYgdGVzdCAieCRhY19jdl9saWJfY19yX3B0aHJlYWRfa2lsbCIg PSB4eWVzOyB0aGVuIDoNCiAgZ2xfaGF2ZV9wdGhyZWFkPXllcw0KICAgICAgICAgICAgICAgTElC VEhSRUFEPS1sY19yIExUTElCVEhSRUFEPS1sY19yDQogICAgICAgICAgICAgICBMSUJNVUxUSVRI UkVBRD0tbGNfciBMVExJQk1VTFRJVEhSRUFEPS1sY19yDQpmaQ0KDQogICAgICAgICAgZmkNCiAg ICAgICAgZmkNCiAgICAgICAgaWYgdGVzdCAtbiAiJGdsX2hhdmVfcHRocmVhZCI7IHRoZW4NCiAg ICAgICAgICBnbF90aHJlYWRzX2FwaT1wb3NpeA0KDQokYXNfZWNobyAiI2RlZmluZSBVU0VfUE9T SVhfVEhSRUFEUyAxIiA+PmNvbmZkZWZzLmgNCg0KICAgICAgICAgIGlmIHRlc3QgLW4gIiRMSUJN VUxUSVRIUkVBRCIgfHwgdGVzdCAtbiAiJExUTElCTVVMVElUSFJFQUQiOyB0aGVuDQogICAgICAg ICAgICBpZiBjYXNlICIkZ2xfY3ZfaGF2ZV93ZWFrIiBpbiAqeWVzKSB0cnVlOzsgKikgZmFsc2U7 OyBlc2FjOyB0aGVuDQoNCiRhc19lY2hvICIjZGVmaW5lIFVTRV9QT1NJWF9USFJFQURTX1dFQUsg MSIgPj5jb25mZGVmcy5oDQoNCiAgICAgICAgICAgICAgTElCVEhSRUFEPQ0KICAgICAgICAgICAg ICBMVExJQlRIUkVBRD0NCiAgICAgICAgICAgIGZpDQogICAgICAgICAgZmkNCiAgICAgICAgZmkN CiAgICAgIGZpDQogICAgZmkNCiAgICBpZiB0ZXN0IC16ICIkZ2xfaGF2ZV9wdGhyZWFkIjsgdGhl bg0KICAgICAgaWYgdGVzdCAiJGdsX3VzZV90aHJlYWRzIiA9IHllcyB8fCB0ZXN0ICIkZ2xfdXNl X3RocmVhZHMiID0gc29sYXJpczsgdGhlbg0KICAgICAgICBnbF9oYXZlX3NvbGFyaXN0aHJlYWQ9 DQogICAgICAgIGdsX3NhdmVfTElCUz0iJExJQlMiDQogICAgICAgIExJQlM9IiRMSUJTIC1sdGhy ZWFkIg0KICAgICAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0 DQovKiBlbmQgY29uZmRlZnMuaC4gICovDQoNCiNpbmNsdWRlIDx0aHJlYWQuaD4NCiNpbmNsdWRl IDxzeW5jaC5oPg0KDQppbnQNCm1haW4gKCkNCnsNCnRocl9zZWxmKCk7DQogIDsNCiAgcmV0dXJu IDA7DQp9DQpfQUNFT0YNCmlmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoNCiAg Z2xfaGF2ZV9zb2xhcmlzdGhyZWFkPXllcw0KZmkNCnJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNv bmZ0ZXN0LiRhY19vYmpleHQgXA0KICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNf ZXh0DQogICAgICAgIExJQlM9IiRnbF9zYXZlX0xJQlMiDQogICAgICAgIGlmIHRlc3QgLW4gIiRn bF9oYXZlX3NvbGFyaXN0aHJlYWQiOyB0aGVuDQogICAgICAgICAgZ2xfdGhyZWFkc19hcGk9c29s YXJpcw0KICAgICAgICAgIExJQlRIUkVBRD0tbHRocmVhZA0KICAgICAgICAgIExUTElCVEhSRUFE PS1sdGhyZWFkDQogICAgICAgICAgTElCTVVMVElUSFJFQUQ9IiRMSUJUSFJFQUQiDQogICAgICAg ICAgTFRMSUJNVUxUSVRIUkVBRD0iJExUTElCVEhSRUFEIg0KDQokYXNfZWNobyAiI2RlZmluZSBV U0VfU09MQVJJU19USFJFQURTIDEiID4+Y29uZmRlZnMuaA0KDQogICAgICAgICAgaWYgY2FzZSAi JGdsX2N2X2hhdmVfd2VhayIgaW4gKnllcykgdHJ1ZTs7ICopIGZhbHNlOzsgZXNhYzsgdGhlbg0K DQokYXNfZWNobyAiI2RlZmluZSBVU0VfU09MQVJJU19USFJFQURTX1dFQUsgMSIgPj5jb25mZGVm cy5oDQoNCiAgICAgICAgICAgIExJQlRIUkVBRD0NCiAgICAgICAgICAgIExUTElCVEhSRUFEPQ0K ICAgICAgICAgIGZpDQogICAgICAgIGZpDQogICAgICBmaQ0KICAgIGZpDQogICAgaWYgdGVzdCAi JGdsX3VzZV90aHJlYWRzIiA9IHB0aDsgdGhlbg0KICAgICAgZ2xfc2F2ZV9DUFBGTEFHUz0iJENQ UEZMQUdTIg0KDQoNCg0KDQoNCiAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5F Tk99OiBjaGVja2luZyBob3cgdG8gbGluayB3aXRoIGxpYnB0aCIgPiY1DQokYXNfZWNob19uICJj aGVja2luZyBob3cgdG8gbGluayB3aXRoIGxpYnB0aC4uLiAiID4mNjsgfQ0KaWYgJHthY19jdl9s aWJwdGhfbGlicys6fSBmYWxzZTsgdGhlbiA6DQogICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2 DQplbHNlDQoNCg0KDQoNCg0KDQoNCg0KICAgIHVzZV9hZGRpdGlvbmFsPXllcw0KDQogIGFjbF9z YXZlX3ByZWZpeD0iJHByZWZpeCINCiAgcHJlZml4PSIkYWNsX2ZpbmFsX3ByZWZpeCINCiAgYWNs X3NhdmVfZXhlY19wcmVmaXg9IiRleGVjX3ByZWZpeCINCiAgZXhlY19wcmVmaXg9IiRhY2xfZmlu YWxfZXhlY19wcmVmaXgiDQoNCiAgICBldmFsIGFkZGl0aW9uYWxfaW5jbHVkZWRpcj1cIiRpbmNs dWRlZGlyXCINCiAgICBldmFsIGFkZGl0aW9uYWxfbGliZGlyPVwiJGxpYmRpclwiDQoNCiAgZXhl Y19wcmVmaXg9IiRhY2xfc2F2ZV9leGVjX3ByZWZpeCINCiAgcHJlZml4PSIkYWNsX3NhdmVfcHJl Zml4Ig0KDQoNCiMgQ2hlY2sgd2hldGhlciAtLXdpdGgtbGlicHRoLXByZWZpeCB3YXMgZ2l2ZW4u DQppZiB0ZXN0ICIke3dpdGhfbGlicHRoX3ByZWZpeCtzZXR9IiA9IHNldDsgdGhlbiA6DQogIHdp dGh2YWw9JHdpdGhfbGlicHRoX3ByZWZpeDsNCiAgICBpZiB0ZXN0ICJYJHdpdGh2YWwiID0gIlhu byI7IHRoZW4NCiAgICAgIHVzZV9hZGRpdGlvbmFsPW5vDQogICAgZWxzZQ0KICAgICAgaWYgdGVz dCAiWCR3aXRodmFsIiA9ICJYIjsgdGhlbg0KDQogIGFjbF9zYXZlX3ByZWZpeD0iJHByZWZpeCIN CiAgcHJlZml4PSIkYWNsX2ZpbmFsX3ByZWZpeCINCiAgYWNsX3NhdmVfZXhlY19wcmVmaXg9IiRl eGVjX3ByZWZpeCINCiAgZXhlY19wcmVmaXg9IiRhY2xfZmluYWxfZXhlY19wcmVmaXgiDQoNCiAg ICAgICAgICBldmFsIGFkZGl0aW9uYWxfaW5jbHVkZWRpcj1cIiRpbmNsdWRlZGlyXCINCiAgICAg ICAgICBldmFsIGFkZGl0aW9uYWxfbGliZGlyPVwiJGxpYmRpclwiDQoNCiAgZXhlY19wcmVmaXg9 IiRhY2xfc2F2ZV9leGVjX3ByZWZpeCINCiAgcHJlZml4PSIkYWNsX3NhdmVfcHJlZml4Ig0KDQog ICAgICBlbHNlDQogICAgICAgIGFkZGl0aW9uYWxfaW5jbHVkZWRpcj0iJHdpdGh2YWwvaW5jbHVk ZSINCiAgICAgICAgYWRkaXRpb25hbF9saWJkaXI9IiR3aXRodmFsLyRhY2xfbGliZGlyc3RlbSIN CiAgICAgICAgaWYgdGVzdCAiJGFjbF9saWJkaXJzdGVtMiIgIT0gIiRhY2xfbGliZGlyc3RlbSIg XA0KICAgICAgICAgICAmJiAhIHRlc3QgLWQgIiR3aXRodmFsLyRhY2xfbGliZGlyc3RlbSI7IHRo ZW4NCiAgICAgICAgICBhZGRpdGlvbmFsX2xpYmRpcj0iJHdpdGh2YWwvJGFjbF9saWJkaXJzdGVt MiINCiAgICAgICAgZmkNCiAgICAgIGZpDQogICAgZmkNCg0KZmkNCg0KICAgICAgTElCUFRIPQ0K ICBMVExJQlBUSD0NCiAgSU5DUFRIPQ0KICBMSUJQVEhfUFJFRklYPQ0KICAgICAgSEFWRV9MSUJQ VEg9DQogIHJwYXRoZGlycz0NCiAgbHRycGF0aGRpcnM9DQogIG5hbWVzX2FscmVhZHlfaGFuZGxl ZD0NCiAgbmFtZXNfbmV4dF9yb3VuZD0ncHRoICcNCiAgd2hpbGUgdGVzdCAtbiAiJG5hbWVzX25l eHRfcm91bmQiOyBkbw0KICAgIG5hbWVzX3RoaXNfcm91bmQ9IiRuYW1lc19uZXh0X3JvdW5kIg0K ICAgIG5hbWVzX25leHRfcm91bmQ9DQogICAgZm9yIG5hbWUgaW4gJG5hbWVzX3RoaXNfcm91bmQ7 IGRvDQogICAgICBhbHJlYWR5X2hhbmRsZWQ9DQogICAgICBmb3IgbiBpbiAkbmFtZXNfYWxyZWFk eV9oYW5kbGVkOyBkbw0KICAgICAgICBpZiB0ZXN0ICIkbiIgPSAiJG5hbWUiOyB0aGVuDQogICAg ICAgICAgYWxyZWFkeV9oYW5kbGVkPXllcw0KICAgICAgICAgIGJyZWFrDQogICAgICAgIGZpDQog ICAgICBkb25lDQogICAgICBpZiB0ZXN0IC16ICIkYWxyZWFkeV9oYW5kbGVkIjsgdGhlbg0KICAg ICAgICBuYW1lc19hbHJlYWR5X2hhbmRsZWQ9IiRuYW1lc19hbHJlYWR5X2hhbmRsZWQgJG5hbWUi DQogICAgICAgICAgICAgICAgICAgICAgICB1cHBlcm5hbWU9YGVjaG8gIiRuYW1lIiB8IHNlZCAt ZSAneXxhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ei4vKy18QUJDREVGR0hJSktMTU5PUFFSU1RV VldYWVpfX19ffCdgDQogICAgICAgIGV2YWwgdmFsdWU9XCJcJEhBVkVfTElCJHVwcGVybmFtZVwi DQogICAgICAgIGlmIHRlc3QgLW4gIiR2YWx1ZSI7IHRoZW4NCiAgICAgICAgICBpZiB0ZXN0ICIk dmFsdWUiID0geWVzOyB0aGVuDQogICAgICAgICAgICBldmFsIHZhbHVlPVwiXCRMSUIkdXBwZXJu YW1lXCINCiAgICAgICAgICAgIHRlc3QgLXogIiR2YWx1ZSIgfHwgTElCUFRIPSIke0xJQlBUSH0k e0xJQlBUSDorIH0kdmFsdWUiDQogICAgICAgICAgICBldmFsIHZhbHVlPVwiXCRMVExJQiR1cHBl cm5hbWVcIg0KICAgICAgICAgICAgdGVzdCAteiAiJHZhbHVlIiB8fCBMVExJQlBUSD0iJHtMVExJ QlBUSH0ke0xUTElCUFRIOisgfSR2YWx1ZSINCiAgICAgICAgICBlbHNlDQogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICA6DQogICAgICAgICAgZmkNCiAgICAgICAgZWxzZQ0KICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgZm91bmRfZGlyPQ0KICAgICAgICAgIGZvdW5kX2xh PQ0KICAgICAgICAgIGZvdW5kX3NvPQ0KICAgICAgICAgIGZvdW5kX2E9DQogICAgICAgICAgZXZh bCBsaWJuYW1lPVwiJGFjbF9saWJuYW1lX3NwZWNcIiAgICAjIHR5cGljYWxseTogbGlibmFtZT1s aWIkbmFtZQ0KICAgICAgICAgIGlmIHRlc3QgLW4gIiRhY2xfc2hsaWJleHQiOyB0aGVuDQogICAg ICAgICAgICBzaHJleHQ9Ii4kYWNsX3NobGliZXh0IiAgICAgICAgICAgICAjIHR5cGljYWxseTog c2hyZXh0PS5zbw0KICAgICAgICAgIGVsc2UNCiAgICAgICAgICAgIHNocmV4dD0NCiAgICAgICAg ICBmaQ0KICAgICAgICAgIGlmIHRlc3QgJHVzZV9hZGRpdGlvbmFsID0geWVzOyB0aGVuDQogICAg ICAgICAgICBkaXI9IiRhZGRpdGlvbmFsX2xpYmRpciINCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGlmIHRlc3QgLW4gIiRhY2xfc2hsaWJleHQiOyB0aGVuDQogICAgICAgICAg ICAgIGlmIHRlc3QgLWYgIiRkaXIvJGxpYm5hbWUkc2hyZXh0IjsgdGhlbg0KICAgICAgICAgICAg ICAgIGZvdW5kX2Rpcj0iJGRpciINCiAgICAgICAgICAgICAgICBmb3VuZF9zbz0iJGRpci8kbGli bmFtZSRzaHJleHQiDQogICAgICAgICAgICAgIGVsc2UNCiAgICAgICAgICAgICAgICBpZiB0ZXN0 ICIkYWNsX2xpYnJhcnlfbmFtZXNfc3BlYyIgPSAnJGxpYm5hbWUkc2hyZXh0JHZlcnN1ZmZpeCc7 IHRoZW4NCiAgICAgICAgICAgICAgICAgIHZlcj1gKGNkICIkZGlyIiAmJiBcDQogICAgICAgICAg ICAgICAgICAgICAgICBmb3IgZiBpbiAiJGxpYm5hbWUkc2hyZXh0Ii4qOyBkbyBlY2hvICIkZiI7 IGRvbmUgXA0KICAgICAgICAgICAgICAgICAgICAgICAgfCBzZWQgLWUgInMsXiRsaWJuYW1lJHNo cmV4dFxcXFwuLCwiIFwNCiAgICAgICAgICAgICAgICAgICAgICAgIHwgc29ydCAtdCAnLicgLW4g LXIgLWsxLDEgLWsyLDIgLWszLDMgLWs0LDQgLWs1LDUgXA0KICAgICAgICAgICAgICAgICAgICAg ICAgfCBzZWQgMXEgKSAyPi9kZXYvbnVsbGANCiAgICAgICAgICAgICAgICAgIGlmIHRlc3QgLW4g IiR2ZXIiICYmIHRlc3QgLWYgIiRkaXIvJGxpYm5hbWUkc2hyZXh0LiR2ZXIiOyB0aGVuDQogICAg ICAgICAgICAgICAgICAgIGZvdW5kX2Rpcj0iJGRpciINCiAgICAgICAgICAgICAgICAgICAgZm91 bmRfc289IiRkaXIvJGxpYm5hbWUkc2hyZXh0LiR2ZXIiDQogICAgICAgICAgICAgICAgICBmaQ0K ICAgICAgICAgICAgICAgIGVsc2UNCiAgICAgICAgICAgICAgICAgIGV2YWwgbGlicmFyeV9uYW1l cz1cIiRhY2xfbGlicmFyeV9uYW1lc19zcGVjXCINCiAgICAgICAgICAgICAgICAgIGZvciBmIGlu ICRsaWJyYXJ5X25hbWVzOyBkbw0KICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0IC1mICIkZGly LyRmIjsgdGhlbg0KICAgICAgICAgICAgICAgICAgICAgIGZvdW5kX2Rpcj0iJGRpciINCiAgICAg ICAgICAgICAgICAgICAgICBmb3VuZF9zbz0iJGRpci8kZiINCiAgICAgICAgICAgICAgICAgICAg ICBicmVhaw0KICAgICAgICAgICAgICAgICAgICBmaQ0KICAgICAgICAgICAgICAgICAgZG9uZQ0K ICAgICAgICAgICAgICAgIGZpDQogICAgICAgICAgICAgIGZpDQogICAgICAgICAgICBmaQ0KICAg ICAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAiWCRmb3VuZF9kaXIiID0gIlgiOyB0aGVuDQog ICAgICAgICAgICAgIGlmIHRlc3QgLWYgIiRkaXIvJGxpYm5hbWUuJGFjbF9saWJleHQiOyB0aGVu DQogICAgICAgICAgICAgICAgZm91bmRfZGlyPSIkZGlyIg0KICAgICAgICAgICAgICAgIGZvdW5k X2E9IiRkaXIvJGxpYm5hbWUuJGFjbF9saWJleHQiDQogICAgICAgICAgICAgIGZpDQogICAgICAg ICAgICBmaQ0KICAgICAgICAgICAgaWYgdGVzdCAiWCRmb3VuZF9kaXIiICE9ICJYIjsgdGhlbg0K ICAgICAgICAgICAgICBpZiB0ZXN0IC1mICIkZGlyLyRsaWJuYW1lLmxhIjsgdGhlbg0KICAgICAg ICAgICAgICAgIGZvdW5kX2xhPSIkZGlyLyRsaWJuYW1lLmxhIg0KICAgICAgICAgICAgICBmaQ0K ICAgICAgICAgICAgZmkNCiAgICAgICAgICBmaQ0KICAgICAgICAgIGlmIHRlc3QgIlgkZm91bmRf ZGlyIiA9ICJYIjsgdGhlbg0KICAgICAgICAgICAgZm9yIHggaW4gJExERkxBR1MgJExUTElCUFRI OyBkbw0KDQogIGFjbF9zYXZlX3ByZWZpeD0iJHByZWZpeCINCiAgcHJlZml4PSIkYWNsX2ZpbmFs X3ByZWZpeCINCiAgYWNsX3NhdmVfZXhlY19wcmVmaXg9IiRleGVjX3ByZWZpeCINCiAgZXhlY19w cmVmaXg9IiRhY2xfZmluYWxfZXhlY19wcmVmaXgiDQogIGV2YWwgeD1cIiR4XCINCiAgZXhlY19w cmVmaXg9IiRhY2xfc2F2ZV9leGVjX3ByZWZpeCINCiAgcHJlZml4PSIkYWNsX3NhdmVfcHJlZml4 Ig0KDQogICAgICAgICAgICAgIGNhc2UgIiR4IiBpbg0KICAgICAgICAgICAgICAgIC1MKikNCiAg ICAgICAgICAgICAgICAgIGRpcj1gZWNobyAiWCR4IiB8IHNlZCAtZSAncy9eWC1MLy8nYA0KICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAtbiAiJGFjbF9zaGxpYmV4 dCI7IHRoZW4NCiAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAtZiAiJGRpci8kbGlibmFtZSRz aHJleHQiOyB0aGVuDQogICAgICAgICAgICAgICAgICAgICAgZm91bmRfZGlyPSIkZGlyIg0KICAg ICAgICAgICAgICAgICAgICAgIGZvdW5kX3NvPSIkZGlyLyRsaWJuYW1lJHNocmV4dCINCiAgICAg ICAgICAgICAgICAgICAgZWxzZQ0KICAgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgIiRhY2xf bGlicmFyeV9uYW1lc19zcGVjIiA9ICckbGlibmFtZSRzaHJleHQkdmVyc3VmZml4JzsgdGhlbg0K ICAgICAgICAgICAgICAgICAgICAgICAgdmVyPWAoY2QgIiRkaXIiICYmIFwNCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGZvciBmIGluICIkbGlibmFtZSRzaHJleHQiLio7IGRvIGVjaG8g IiRmIjsgZG9uZSBcDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHNlZCAtZSAicyxe JGxpYm5hbWUkc2hyZXh0XFxcXC4sLCIgXA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg fCBzb3J0IC10ICcuJyAtbiAtciAtazEsMSAtazIsMiAtazMsMyAtazQsNCAtazUsNSBcDQogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICB8IHNlZCAxcSApIDI+L2Rldi9udWxsYA0KICAgICAg ICAgICAgICAgICAgICAgICAgaWYgdGVzdCAtbiAiJHZlciIgJiYgdGVzdCAtZiAiJGRpci8kbGli bmFtZSRzaHJleHQuJHZlciI7IHRoZW4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgZm91bmRf ZGlyPSIkZGlyIg0KICAgICAgICAgICAgICAgICAgICAgICAgICBmb3VuZF9zbz0iJGRpci8kbGli bmFtZSRzaHJleHQuJHZlciINCiAgICAgICAgICAgICAgICAgICAgICAgIGZpDQogICAgICAgICAg ICAgICAgICAgICAgZWxzZQ0KICAgICAgICAgICAgICAgICAgICAgICAgZXZhbCBsaWJyYXJ5X25h bWVzPVwiJGFjbF9saWJyYXJ5X25hbWVzX3NwZWNcIg0KICAgICAgICAgICAgICAgICAgICAgICAg Zm9yIGYgaW4gJGxpYnJhcnlfbmFtZXM7IGRvDQogICAgICAgICAgICAgICAgICAgICAgICAgIGlm IHRlc3QgLWYgIiRkaXIvJGYiOyB0aGVuDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgZm91 bmRfZGlyPSIkZGlyIg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvdW5kX3NvPSIkZGly LyRmIg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrDQogICAgICAgICAgICAgICAg ICAgICAgICAgIGZpDQogICAgICAgICAgICAgICAgICAgICAgICBkb25lDQogICAgICAgICAgICAg ICAgICAgICAgZmkNCiAgICAgICAgICAgICAgICAgICAgZmkNCiAgICAgICAgICAgICAgICAgIGZp DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0ICJYJGZvdW5kX2Rp ciIgPSAiWCI7IHRoZW4NCiAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAtZiAiJGRpci8kbGli bmFtZS4kYWNsX2xpYmV4dCI7IHRoZW4NCiAgICAgICAgICAgICAgICAgICAgICBmb3VuZF9kaXI9 IiRkaXIiDQogICAgICAgICAgICAgICAgICAgICAgZm91bmRfYT0iJGRpci8kbGlibmFtZS4kYWNs X2xpYmV4dCINCiAgICAgICAgICAgICAgICAgICAgZmkNCiAgICAgICAgICAgICAgICAgIGZpDQog ICAgICAgICAgICAgICAgICBpZiB0ZXN0ICJYJGZvdW5kX2RpciIgIT0gIlgiOyB0aGVuDQogICAg ICAgICAgICAgICAgICAgIGlmIHRlc3QgLWYgIiRkaXIvJGxpYm5hbWUubGEiOyB0aGVuDQogICAg ICAgICAgICAgICAgICAgICAgZm91bmRfbGE9IiRkaXIvJGxpYm5hbWUubGEiDQogICAgICAgICAg ICAgICAgICAgIGZpDQogICAgICAgICAgICAgICAgICBmaQ0KICAgICAgICAgICAgICAgICAgOzsN CiAgICAgICAgICAgICAgZXNhYw0KICAgICAgICAgICAgICBpZiB0ZXN0ICJYJGZvdW5kX2RpciIg IT0gIlgiOyB0aGVuDQogICAgICAgICAgICAgICAgYnJlYWsNCiAgICAgICAgICAgICAgZmkNCiAg ICAgICAgICAgIGRvbmUNCiAgICAgICAgICBmaQ0KICAgICAgICAgIGlmIHRlc3QgIlgkZm91bmRf ZGlyIiAhPSAiWCI7IHRoZW4NCiAgICAgICAgICAgICAgICAgICAgICAgIExUTElCUFRIPSIke0xU TElCUFRIfSR7TFRMSUJQVEg6KyB9LUwkZm91bmRfZGlyIC1sJG5hbWUiDQogICAgICAgICAgICBp ZiB0ZXN0ICJYJGZvdW5kX3NvIiAhPSAiWCI7IHRoZW4NCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAiJGVuYWJsZV9ycGF0aCIg PSBubyBcDQogICAgICAgICAgICAgICAgIHx8IHRlc3QgIlgkZm91bmRfZGlyIiA9ICJYL3Vzci8k YWNsX2xpYmRpcnN0ZW0iIFwNCiAgICAgICAgICAgICAgICAgfHwgdGVzdCAiWCRmb3VuZF9kaXIi ID0gIlgvdXNyLyRhY2xfbGliZGlyc3RlbTIiOyB0aGVuDQogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIExJQlBUSD0iJHtMSUJQVEh9JHtMSUJQVEg6KyB9JGZvdW5kX3NvIg0KICAgICAg ICAgICAgICBlbHNlDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhdmVpdD0NCiAgICAgICAgICAg ICAgICBmb3IgeCBpbiAkbHRycGF0aGRpcnM7IGRvDQogICAgICAgICAgICAgICAgICBpZiB0ZXN0 ICJYJHgiID0gIlgkZm91bmRfZGlyIjsgdGhlbg0KICAgICAgICAgICAgICAgICAgICBoYXZlaXQ9 eWVzDQogICAgICAgICAgICAgICAgICAgIGJyZWFrDQogICAgICAgICAgICAgICAgICBmaQ0KICAg ICAgICAgICAgICAgIGRvbmUNCiAgICAgICAgICAgICAgICBpZiB0ZXN0IC16ICIkaGF2ZWl0Ijsg dGhlbg0KICAgICAgICAgICAgICAgICAgbHRycGF0aGRpcnM9IiRsdHJwYXRoZGlycyAkZm91bmRf ZGlyIg0KICAgICAgICAgICAgICAgIGZpDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGlmIHRlc3QgIiRhY2xfaGFyZGNvZGVfZGlyZWN0IiA9IHllczsgdGhlbg0KICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTElCUFRIPSIke0xJQlBU SH0ke0xJQlBUSDorIH0kZm91bmRfc28iDQogICAgICAgICAgICAgICAgZWxzZQ0KICAgICAgICAg ICAgICAgICAgaWYgdGVzdCAtbiAiJGFjbF9oYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjIiAmJiB0 ZXN0ICIkYWNsX2hhcmRjb2RlX21pbnVzX0wiID0gbm87IHRoZW4NCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExJQlBUSD0iJHtMSUJQ VEh9JHtMSUJQVEg6KyB9JGZvdW5kX3NvIg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGF2ZWl0PQ0KICAgICAgICAgICAgICAgICAg ICBmb3IgeCBpbiAkcnBhdGhkaXJzOyBkbw0KICAgICAgICAgICAgICAgICAgICAgIGlmIHRlc3Qg IlgkeCIgPSAiWCRmb3VuZF9kaXIiOyB0aGVuDQogICAgICAgICAgICAgICAgICAgICAgICBoYXZl aXQ9eWVzDQogICAgICAgICAgICAgICAgICAgICAgICBicmVhaw0KICAgICAgICAgICAgICAgICAg ICAgIGZpDQogICAgICAgICAgICAgICAgICAgIGRvbmUNCiAgICAgICAgICAgICAgICAgICAgaWYg dGVzdCAteiAiJGhhdmVpdCI7IHRoZW4NCiAgICAgICAgICAgICAgICAgICAgICBycGF0aGRpcnM9 IiRycGF0aGRpcnMgJGZvdW5kX2RpciINCiAgICAgICAgICAgICAgICAgICAgZmkNCiAgICAgICAg ICAgICAgICAgIGVsc2UNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGF2ZWl0PQ0KICAgICAgICAg ICAgICAgICAgICBmb3IgeCBpbiAkTERGTEFHUyAkTElCUFRIOyBkbw0KDQogIGFjbF9zYXZlX3By ZWZpeD0iJHByZWZpeCINCiAgcHJlZml4PSIkYWNsX2ZpbmFsX3ByZWZpeCINCiAgYWNsX3NhdmVf ZXhlY19wcmVmaXg9IiRleGVjX3ByZWZpeCINCiAgZXhlY19wcmVmaXg9IiRhY2xfZmluYWxfZXhl Y19wcmVmaXgiDQogIGV2YWwgeD1cIiR4XCINCiAgZXhlY19wcmVmaXg9IiRhY2xfc2F2ZV9leGVj X3ByZWZpeCINCiAgcHJlZml4PSIkYWNsX3NhdmVfcHJlZml4Ig0KDQogICAgICAgICAgICAgICAg ICAgICAgaWYgdGVzdCAiWCR4IiA9ICJYLUwkZm91bmRfZGlyIjsgdGhlbg0KICAgICAgICAgICAg ICAgICAgICAgICAgaGF2ZWl0PXllcw0KICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsNCiAg ICAgICAgICAgICAgICAgICAgICBmaQ0KICAgICAgICAgICAgICAgICAgICBkb25lDQogICAgICAg ICAgICAgICAgICAgIGlmIHRlc3QgLXogIiRoYXZlaXQiOyB0aGVuDQogICAgICAgICAgICAgICAg ICAgICAgTElCUFRIPSIke0xJQlBUSH0ke0xJQlBUSDorIH0tTCRmb3VuZF9kaXIiDQogICAgICAg ICAgICAgICAgICAgIGZpDQogICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgIiRhY2xfaGFyZGNv ZGVfbWludXNfTCIgIT0gbm87IHRoZW4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBM SUJQVEg9IiR7TElCUFRIfSR7TElCUFRIOisgfSRmb3VuZF9zbyINCiAgICAgICAgICAgICAgICAg ICAgZWxzZQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBMSUJQVEg9IiR7TElCUFRIfSR7TElCUFRIOisgfS1sJG5hbWUiDQogICAg ICAgICAgICAgICAgICAgIGZpDQogICAgICAgICAgICAgICAgICBmaQ0KICAgICAgICAgICAgICAg IGZpDQogICAgICAgICAgICAgIGZpDQogICAgICAgICAgICBlbHNlDQogICAgICAgICAgICAgIGlm IHRlc3QgIlgkZm91bmRfYSIgIT0gIlgiOyB0aGVuDQogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIExJQlBUSD0iJHtMSUJQVEh9JHtMSUJQVEg6KyB9JGZvdW5kX2EiDQogICAgICAgICAg ICAgIGVsc2UNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IExJQlBUSD0iJHtMSUJQVEh9JHtMSUJQVEg6KyB9LUwkZm91bmRfZGlyIC1sJG5hbWUiDQogICAg ICAgICAgICAgIGZpDQogICAgICAgICAgICBmaQ0KICAgICAgICAgICAgICAgICAgICAgICAgYWRk aXRpb25hbF9pbmNsdWRlZGlyPQ0KICAgICAgICAgICAgY2FzZSAiJGZvdW5kX2RpciIgaW4NCiAg ICAgICAgICAgICAgKi8kYWNsX2xpYmRpcnN0ZW0gfCAqLyRhY2xfbGliZGlyc3RlbS8pDQogICAg ICAgICAgICAgICAgYmFzZWRpcj1gZWNobyAiWCRmb3VuZF9kaXIiIHwgc2VkIC1lICdzLF5YLCwn IC1lICJzLC8kYWNsX2xpYmRpcnN0ZW0vIicqJCwsJ2ANCiAgICAgICAgICAgICAgICBpZiB0ZXN0 ICIkbmFtZSIgPSAncHRoJzsgdGhlbg0KICAgICAgICAgICAgICAgICAgTElCUFRIX1BSRUZJWD0i JGJhc2VkaXIiDQogICAgICAgICAgICAgICAgZmkNCiAgICAgICAgICAgICAgICBhZGRpdGlvbmFs X2luY2x1ZGVkaXI9IiRiYXNlZGlyL2luY2x1ZGUiDQogICAgICAgICAgICAgICAgOzsNCiAgICAg ICAgICAgICAgKi8kYWNsX2xpYmRpcnN0ZW0yIHwgKi8kYWNsX2xpYmRpcnN0ZW0yLykNCiAgICAg ICAgICAgICAgICBiYXNlZGlyPWBlY2hvICJYJGZvdW5kX2RpciIgfCBzZWQgLWUgJ3MsXlgsLCcg LWUgInMsLyRhY2xfbGliZGlyc3RlbTIvIicqJCwsJ2ANCiAgICAgICAgICAgICAgICBpZiB0ZXN0 ICIkbmFtZSIgPSAncHRoJzsgdGhlbg0KICAgICAgICAgICAgICAgICAgTElCUFRIX1BSRUZJWD0i JGJhc2VkaXIiDQogICAgICAgICAgICAgICAgZmkNCiAgICAgICAgICAgICAgICBhZGRpdGlvbmFs X2luY2x1ZGVkaXI9IiRiYXNlZGlyL2luY2x1ZGUiDQogICAgICAgICAgICAgICAgOzsNCiAgICAg ICAgICAgIGVzYWMNCiAgICAgICAgICAgIGlmIHRlc3QgIlgkYWRkaXRpb25hbF9pbmNsdWRlZGly IiAhPSAiWCI7IHRoZW4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBpZiB0ZXN0ICJYJGFkZGl0aW9uYWxfaW5jbHVkZWRpciIgIT0gIlgvdXNy L2luY2x1ZGUiOyB0aGVuDQogICAgICAgICAgICAgICAgaGF2ZWl0PQ0KICAgICAgICAgICAgICAg IGlmIHRlc3QgIlgkYWRkaXRpb25hbF9pbmNsdWRlZGlyIiA9ICJYL3Vzci9sb2NhbC9pbmNsdWRl IjsgdGhlbg0KICAgICAgICAgICAgICAgICAgaWYgdGVzdCAtbiAiJEdDQyI7IHRoZW4NCiAgICAg ICAgICAgICAgICAgICAgY2FzZSAkaG9zdF9vcyBpbg0KICAgICAgICAgICAgICAgICAgICAgIGxp bnV4KiB8IGdudSogfCBrKmJzZCotZ251KSBoYXZlaXQ9eWVzOzsNCiAgICAgICAgICAgICAgICAg ICAgZXNhYw0KICAgICAgICAgICAgICAgICAgZmkNCiAgICAgICAgICAgICAgICBmaQ0KICAgICAg ICAgICAgICAgIGlmIHRlc3QgLXogIiRoYXZlaXQiOyB0aGVuDQogICAgICAgICAgICAgICAgICBm b3IgeCBpbiAkQ1BQRkxBR1MgJElOQ1BUSDsgZG8NCg0KICBhY2xfc2F2ZV9wcmVmaXg9IiRwcmVm aXgiDQogIHByZWZpeD0iJGFjbF9maW5hbF9wcmVmaXgiDQogIGFjbF9zYXZlX2V4ZWNfcHJlZml4 PSIkZXhlY19wcmVmaXgiDQogIGV4ZWNfcHJlZml4PSIkYWNsX2ZpbmFsX2V4ZWNfcHJlZml4Ig0K ICBldmFsIHg9XCIkeFwiDQogIGV4ZWNfcHJlZml4PSIkYWNsX3NhdmVfZXhlY19wcmVmaXgiDQog IHByZWZpeD0iJGFjbF9zYXZlX3ByZWZpeCINCg0KICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0 ICJYJHgiID0gIlgtSSRhZGRpdGlvbmFsX2luY2x1ZGVkaXIiOyB0aGVuDQogICAgICAgICAgICAg ICAgICAgICAgaGF2ZWl0PXllcw0KICAgICAgICAgICAgICAgICAgICAgIGJyZWFrDQogICAgICAg ICAgICAgICAgICAgIGZpDQogICAgICAgICAgICAgICAgICBkb25lDQogICAgICAgICAgICAgICAg ICBpZiB0ZXN0IC16ICIkaGF2ZWl0IjsgdGhlbg0KICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0 IC1kICIkYWRkaXRpb25hbF9pbmNsdWRlZGlyIjsgdGhlbg0KICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBJTkNQVEg9IiR7SU5DUFRIfSR7SU5DUFRIOisgfS1JJGFk ZGl0aW9uYWxfaW5jbHVkZWRpciINCiAgICAgICAgICAgICAgICAgICAgZmkNCiAgICAgICAgICAg ICAgICAgIGZpDQogICAgICAgICAgICAgICAgZmkNCiAgICAgICAgICAgICAgZmkNCiAgICAgICAg ICAgIGZpDQogICAgICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0IC1uICIkZm91bmRfbGEiOyB0 aGVuDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHNhdmVfbGliZGlyPSIkbGliZGlyIg0KICAgICAgICAgICAgICBjYXNlICIkZm91bmRfbGEi IGluDQogICAgICAgICAgICAgICAgKi8qIHwgKlxcKikgLiAiJGZvdW5kX2xhIiA7Ow0KICAgICAg ICAgICAgICAgICopIC4gIi4vJGZvdW5kX2xhIiA7Ow0KICAgICAgICAgICAgICBlc2FjDQogICAg ICAgICAgICAgIGxpYmRpcj0iJHNhdmVfbGliZGlyIg0KICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGZvciBkZXAgaW4gJGRlcGVuZGVuY3lfbGliczsgZG8NCiAgICAgICAgICAgICAgICBjYXNl ICIkZGVwIiBpbg0KICAgICAgICAgICAgICAgICAgLUwqKQ0KICAgICAgICAgICAgICAgICAgICBh ZGRpdGlvbmFsX2xpYmRpcj1gZWNobyAiWCRkZXAiIHwgc2VkIC1lICdzL15YLUwvLydgDQogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAiWCRhZGRp dGlvbmFsX2xpYmRpciIgIT0gIlgvdXNyLyRhY2xfbGliZGlyc3RlbSIgXA0KICAgICAgICAgICAg ICAgICAgICAgICAmJiB0ZXN0ICJYJGFkZGl0aW9uYWxfbGliZGlyIiAhPSAiWC91c3IvJGFjbF9s aWJkaXJzdGVtMiI7IHRoZW4NCiAgICAgICAgICAgICAgICAgICAgICBoYXZlaXQ9DQogICAgICAg ICAgICAgICAgICAgICAgaWYgdGVzdCAiWCRhZGRpdGlvbmFsX2xpYmRpciIgPSAiWC91c3IvbG9j YWwvJGFjbF9saWJkaXJzdGVtIiBcDQogICAgICAgICAgICAgICAgICAgICAgICAgfHwgdGVzdCAi WCRhZGRpdGlvbmFsX2xpYmRpciIgPSAiWC91c3IvbG9jYWwvJGFjbF9saWJkaXJzdGVtMiI7IHRo ZW4NCiAgICAgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgLW4gIiRHQ0MiOyB0aGVuDQogICAg ICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJGhvc3Rfb3MgaW4NCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICBsaW51eCogfCBnbnUqIHwgaypic2QqLWdudSkgaGF2ZWl0PXllczs7DQogICAg ICAgICAgICAgICAgICAgICAgICAgIGVzYWMNCiAgICAgICAgICAgICAgICAgICAgICAgIGZpDQog ICAgICAgICAgICAgICAgICAgICAgZmkNCiAgICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0IC16 ICIkaGF2ZWl0IjsgdGhlbg0KICAgICAgICAgICAgICAgICAgICAgICAgaGF2ZWl0PQ0KICAgICAg ICAgICAgICAgICAgICAgICAgZm9yIHggaW4gJExERkxBR1MgJExJQlBUSDsgZG8NCg0KICBhY2xf c2F2ZV9wcmVmaXg9IiRwcmVmaXgiDQogIHByZWZpeD0iJGFjbF9maW5hbF9wcmVmaXgiDQogIGFj bF9zYXZlX2V4ZWNfcHJlZml4PSIkZXhlY19wcmVmaXgiDQogIGV4ZWNfcHJlZml4PSIkYWNsX2Zp bmFsX2V4ZWNfcHJlZml4Ig0KICBldmFsIHg9XCIkeFwiDQogIGV4ZWNfcHJlZml4PSIkYWNsX3Nh dmVfZXhlY19wcmVmaXgiDQogIHByZWZpeD0iJGFjbF9zYXZlX3ByZWZpeCINCg0KICAgICAgICAg ICAgICAgICAgICAgICAgICBpZiB0ZXN0ICJYJHgiID0gIlgtTCRhZGRpdGlvbmFsX2xpYmRpciI7 IHRoZW4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXZlaXQ9eWVzDQogICAgICAgICAg ICAgICAgICAgICAgICAgICAgYnJlYWsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgZmkNCiAg ICAgICAgICAgICAgICAgICAgICAgIGRvbmUNCiAgICAgICAgICAgICAgICAgICAgICAgIGlmIHRl c3QgLXogIiRoYXZlaXQiOyB0aGVuDQogICAgICAgICAgICAgICAgICAgICAgICAgIGlmIHRlc3Qg LWQgIiRhZGRpdGlvbmFsX2xpYmRpciI7IHRoZW4NCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTElCUFRIPSIke0xJQlBUSH0ke0xJQlBUSDor IH0tTCRhZGRpdGlvbmFsX2xpYmRpciINCiAgICAgICAgICAgICAgICAgICAgICAgICAgZmkNCiAg ICAgICAgICAgICAgICAgICAgICAgIGZpDQogICAgICAgICAgICAgICAgICAgICAgICBoYXZlaXQ9 DQogICAgICAgICAgICAgICAgICAgICAgICBmb3IgeCBpbiAkTERGTEFHUyAkTFRMSUJQVEg7IGRv DQoNCiAgYWNsX3NhdmVfcHJlZml4PSIkcHJlZml4Ig0KICBwcmVmaXg9IiRhY2xfZmluYWxfcHJl Zml4Ig0KICBhY2xfc2F2ZV9leGVjX3ByZWZpeD0iJGV4ZWNfcHJlZml4Ig0KICBleGVjX3ByZWZp eD0iJGFjbF9maW5hbF9leGVjX3ByZWZpeCINCiAgZXZhbCB4PVwiJHhcIg0KICBleGVjX3ByZWZp eD0iJGFjbF9zYXZlX2V4ZWNfcHJlZml4Ig0KICBwcmVmaXg9IiRhY2xfc2F2ZV9wcmVmaXgiDQoN CiAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAiWCR4IiA9ICJYLUwkYWRkaXRpb25h bF9saWJkaXIiOyB0aGVuDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgaGF2ZWl0PXllcw0K ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrDQogICAgICAgICAgICAgICAgICAgICAg ICAgIGZpDQogICAgICAgICAgICAgICAgICAgICAgICBkb25lDQogICAgICAgICAgICAgICAgICAg ICAgICBpZiB0ZXN0IC16ICIkaGF2ZWl0IjsgdGhlbg0KICAgICAgICAgICAgICAgICAgICAgICAg ICBpZiB0ZXN0IC1kICIkYWRkaXRpb25hbF9saWJkaXIiOyB0aGVuDQogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExUTElCUFRIPSIke0xUTElC UFRIfSR7TFRMSUJQVEg6KyB9LUwkYWRkaXRpb25hbF9saWJkaXIiDQogICAgICAgICAgICAgICAg ICAgICAgICAgIGZpDQogICAgICAgICAgICAgICAgICAgICAgICBmaQ0KICAgICAgICAgICAgICAg ICAgICAgIGZpDQogICAgICAgICAgICAgICAgICAgIGZpDQogICAgICAgICAgICAgICAgICAgIDs7 DQogICAgICAgICAgICAgICAgICAtUiopDQogICAgICAgICAgICAgICAgICAgIGRpcj1gZWNobyAi WCRkZXAiIHwgc2VkIC1lICdzL15YLVIvLydgDQogICAgICAgICAgICAgICAgICAgIGlmIHRlc3Qg IiRlbmFibGVfcnBhdGgiICE9IG5vOyB0aGVuDQogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXZlaXQ9DQogICAgICAgICAg ICAgICAgICAgICAgZm9yIHggaW4gJHJwYXRoZGlyczsgZG8NCiAgICAgICAgICAgICAgICAgICAg ICAgIGlmIHRlc3QgIlgkeCIgPSAiWCRkaXIiOyB0aGVuDQogICAgICAgICAgICAgICAgICAgICAg ICAgIGhhdmVpdD15ZXMNCiAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsNCiAgICAgICAg ICAgICAgICAgICAgICAgIGZpDQogICAgICAgICAgICAgICAgICAgICAgZG9uZQ0KICAgICAgICAg ICAgICAgICAgICAgIGlmIHRlc3QgLXogIiRoYXZlaXQiOyB0aGVuDQogICAgICAgICAgICAgICAg ICAgICAgICBycGF0aGRpcnM9IiRycGF0aGRpcnMgJGRpciINCiAgICAgICAgICAgICAgICAgICAg ICBmaQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgaGF2ZWl0PQ0KICAgICAgICAgICAgICAgICAgICAgIGZvciB4IGluICRs dHJwYXRoZGlyczsgZG8NCiAgICAgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgIlgkeCIgPSAi WCRkaXIiOyB0aGVuDQogICAgICAgICAgICAgICAgICAgICAgICAgIGhhdmVpdD15ZXMNCiAgICAg ICAgICAgICAgICAgICAgICAgICAgYnJlYWsNCiAgICAgICAgICAgICAgICAgICAgICAgIGZpDQog ICAgICAgICAgICAgICAgICAgICAgZG9uZQ0KICAgICAgICAgICAgICAgICAgICAgIGlmIHRlc3Qg LXogIiRoYXZlaXQiOyB0aGVuDQogICAgICAgICAgICAgICAgICAgICAgICBsdHJwYXRoZGlycz0i JGx0cnBhdGhkaXJzICRkaXIiDQogICAgICAgICAgICAgICAgICAgICAgZmkNCiAgICAgICAgICAg ICAgICAgICAgZmkNCiAgICAgICAgICAgICAgICAgICAgOzsNCiAgICAgICAgICAgICAgICAgIC1s KikNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lc19uZXh0X3Jv dW5kPSIkbmFtZXNfbmV4dF9yb3VuZCAiYGVjaG8gIlgkZGVwIiB8IHNlZCAtZSAncy9eWC1sLy8n YA0KICAgICAgICAgICAgICAgICAgICA7Ow0KICAgICAgICAgICAgICAgICAgKi5sYSkNCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgbmFtZXNfbmV4dF9yb3VuZD0iJG5hbWVzX25leHRfcm91bmQgImBl Y2hvICJYJGRlcCIgfCBzZWQgLWUgJ3MsXlguKi8sLCcgLWUgJ3MsXmxpYiwsJyAtZSAncyxcLmxh JCwsJ2ANCiAgICAgICAgICAgICAgICAgICAgOzsNCiAgICAgICAgICAgICAgICAgICopDQogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTElCUFRIPSIke0xJQlBUSH0ke0xJ QlBUSDorIH0kZGVwIg0KICAgICAgICAgICAgICAgICAgICBMVExJQlBUSD0iJHtMVExJQlBUSH0k e0xUTElCUFRIOisgfSRkZXAiDQogICAgICAgICAgICAgICAgICAgIDs7DQogICAgICAgICAgICAg ICAgZXNhYw0KICAgICAgICAgICAgICBkb25lDQogICAgICAgICAgICBmaQ0KICAgICAgICAgIGVs c2UNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIExJQlBUSD0iJHtMSUJQVEh9JHtMSUJQVEg6KyB9LWwkbmFtZSINCiAgICAgICAgICAg IExUTElCUFRIPSIke0xUTElCUFRIfSR7TFRMSUJQVEg6KyB9LWwkbmFtZSINCiAgICAgICAgICBm aQ0KICAgICAgICBmaQ0KICAgICAgZmkNCiAgICBkb25lDQogIGRvbmUNCiAgaWYgdGVzdCAiWCRy cGF0aGRpcnMiICE9ICJYIjsgdGhlbg0KICAgIGlmIHRlc3QgLW4gIiRhY2xfaGFyZGNvZGVfbGli ZGlyX3NlcGFyYXRvciI7IHRoZW4NCiAgICAgICAgICAgICAgICAgICAgICAgIGFsbGRpcnM9DQog ICAgICBmb3IgZm91bmRfZGlyIGluICRycGF0aGRpcnM7IGRvDQogICAgICAgIGFsbGRpcnM9IiR7 YWxsZGlyc30ke2FsbGRpcnM6KyRhY2xfaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcn0kZm91bmRf ZGlyIg0KICAgICAgZG9uZQ0KICAgICAgICAgICAgYWNsX3NhdmVfbGliZGlyPSIkbGliZGlyIg0K ICAgICAgbGliZGlyPSIkYWxsZGlycyINCiAgICAgIGV2YWwgZmxhZz1cIiRhY2xfaGFyZGNvZGVf bGliZGlyX2ZsYWdfc3BlY1wiDQogICAgICBsaWJkaXI9IiRhY2xfc2F2ZV9saWJkaXIiDQogICAg ICBMSUJQVEg9IiR7TElCUFRIfSR7TElCUFRIOisgfSRmbGFnIg0KICAgIGVsc2UNCiAgICAgICAg ICAgIGZvciBmb3VuZF9kaXIgaW4gJHJwYXRoZGlyczsgZG8NCiAgICAgICAgYWNsX3NhdmVfbGli ZGlyPSIkbGliZGlyIg0KICAgICAgICBsaWJkaXI9IiRmb3VuZF9kaXIiDQogICAgICAgIGV2YWwg ZmxhZz1cIiRhY2xfaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY1wiDQogICAgICAgIGxpYmRpcj0i JGFjbF9zYXZlX2xpYmRpciINCiAgICAgICAgTElCUFRIPSIke0xJQlBUSH0ke0xJQlBUSDorIH0k ZmxhZyINCiAgICAgIGRvbmUNCiAgICBmaQ0KICBmaQ0KICBpZiB0ZXN0ICJYJGx0cnBhdGhkaXJz IiAhPSAiWCI7IHRoZW4NCiAgICAgICAgICAgIGZvciBmb3VuZF9kaXIgaW4gJGx0cnBhdGhkaXJz OyBkbw0KICAgICAgTFRMSUJQVEg9IiR7TFRMSUJQVEh9JHtMVExJQlBUSDorIH0tUiRmb3VuZF9k aXIiDQogICAgZG9uZQ0KICBmaQ0KDQoNCg0KDQoNCg0KICAgIGFjX2N2X2xpYnB0aF9saWJzPSIk TElCUFRIIg0KICAgIGFjX2N2X2xpYnB0aF9sdGxpYnM9IiRMVExJQlBUSCINCiAgICBhY19jdl9s aWJwdGhfY3BwZmxhZ3M9IiRJTkNQVEgiDQogICAgYWNfY3ZfbGlicHRoX3ByZWZpeD0iJExJQlBU SF9QUkVGSVgiDQoNCmZpDQp7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306 IHJlc3VsdDogJGFjX2N2X2xpYnB0aF9saWJzIiA+JjUNCiRhc19lY2hvICIkYWNfY3ZfbGlicHRo X2xpYnMiID4mNjsgfQ0KICBMSUJQVEg9IiRhY19jdl9saWJwdGhfbGlicyINCiAgTFRMSUJQVEg9 IiRhY19jdl9saWJwdGhfbHRsaWJzIg0KICBJTkNQVEg9IiRhY19jdl9saWJwdGhfY3BwZmxhZ3Mi DQogIExJQlBUSF9QUkVGSVg9IiRhY19jdl9saWJwdGhfcHJlZml4Ig0KDQogIGZvciBlbGVtZW50 IGluICRJTkNQVEg7IGRvDQogICAgaGF2ZWl0PQ0KICAgIGZvciB4IGluICRDUFBGTEFHUzsgZG8N Cg0KICBhY2xfc2F2ZV9wcmVmaXg9IiRwcmVmaXgiDQogIHByZWZpeD0iJGFjbF9maW5hbF9wcmVm aXgiDQogIGFjbF9zYXZlX2V4ZWNfcHJlZml4PSIkZXhlY19wcmVmaXgiDQogIGV4ZWNfcHJlZml4 PSIkYWNsX2ZpbmFsX2V4ZWNfcHJlZml4Ig0KICBldmFsIHg9XCIkeFwiDQogIGV4ZWNfcHJlZml4 PSIkYWNsX3NhdmVfZXhlY19wcmVmaXgiDQogIHByZWZpeD0iJGFjbF9zYXZlX3ByZWZpeCINCg0K ICAgICAgaWYgdGVzdCAiWCR4IiA9ICJYJGVsZW1lbnQiOyB0aGVuDQogICAgICAgIGhhdmVpdD15 ZXMNCiAgICAgICAgYnJlYWsNCiAgICAgIGZpDQogICAgZG9uZQ0KICAgIGlmIHRlc3QgLXogIiRo YXZlaXQiOyB0aGVuDQogICAgICBDUFBGTEFHUz0iJHtDUFBGTEFHU30ke0NQUEZMQUdTOisgfSRl bGVtZW50Ig0KICAgIGZpDQogIGRvbmUNCg0KDQoNCg0KICAgICAgSEFWRV9MSUJQVEg9eWVzDQoN Cg0KDQogICAgICBnbF9oYXZlX3B0aD0NCiAgICAgIGdsX3NhdmVfTElCUz0iJExJQlMiDQogICAg ICBMSUJTPSIkTElCUyAkTElCUFRIIg0KICAgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+ Y29uZnRlc3QuJGFjX2V4dA0KLyogZW5kIGNvbmZkZWZzLmguICAqLw0KI2luY2x1ZGUgPHB0aC5o Pg0KaW50DQptYWluICgpDQp7DQpwdGhfc2VsZigpOw0KICA7DQogIHJldHVybiAwOw0KfQ0KX0FD RU9GDQppZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6DQogIGdsX2hhdmVfcHRo PXllcw0KZmkNCnJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXA0K ICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0DQogICAgICBMSUJTPSIkZ2xf c2F2ZV9MSUJTIg0KICAgICAgaWYgdGVzdCAtbiAiJGdsX2hhdmVfcHRoIjsgdGhlbg0KICAgICAg ICBnbF90aHJlYWRzX2FwaT1wdGgNCiAgICAgICAgTElCVEhSRUFEPSIkTElCUFRIIg0KICAgICAg ICBMVExJQlRIUkVBRD0iJExUTElCUFRIIg0KICAgICAgICBMSUJNVUxUSVRIUkVBRD0iJExJQlRI UkVBRCINCiAgICAgICAgTFRMSUJNVUxUSVRIUkVBRD0iJExUTElCVEhSRUFEIg0KDQokYXNfZWNo byAiI2RlZmluZSBVU0VfUFRIX1RIUkVBRFMgMSIgPj5jb25mZGVmcy5oDQoNCiAgICAgICAgaWYg dGVzdCAtbiAiJExJQk1VTFRJVEhSRUFEIiB8fCB0ZXN0IC1uICIkTFRMSUJNVUxUSVRIUkVBRCI7 IHRoZW4NCiAgICAgICAgICBpZiBjYXNlICIkZ2xfY3ZfaGF2ZV93ZWFrIiBpbiAqeWVzKSB0cnVl OzsgKikgZmFsc2U7OyBlc2FjOyB0aGVuDQoNCiRhc19lY2hvICIjZGVmaW5lIFVTRV9QVEhfVEhS RUFEU19XRUFLIDEiID4+Y29uZmRlZnMuaA0KDQogICAgICAgICAgICBMSUJUSFJFQUQ9DQogICAg ICAgICAgICBMVExJQlRIUkVBRD0NCiAgICAgICAgICBmaQ0KICAgICAgICBmaQ0KICAgICAgZWxz ZQ0KICAgICAgICBDUFBGTEFHUz0iJGdsX3NhdmVfQ1BQRkxBR1MiDQogICAgICBmaQ0KICAgIGZp DQogICAgaWYgdGVzdCAteiAiJGdsX2hhdmVfcHRocmVhZCI7IHRoZW4NCiAgICAgIGlmIHRlc3Qg IiRnbF91c2VfdGhyZWFkcyIgPSB5ZXMgfHwgdGVzdCAiJGdsX3VzZV90aHJlYWRzIiA9IHdpbjMy OyB0aGVuDQogICAgICAgIGlmIHsgY2FzZSAiJGhvc3Rfb3MiIGluDQogICAgICAgICAgICAgICBt aW5ndyopIHRydWU7Ow0KICAgICAgICAgICAgICAgKikgZmFsc2U7Ow0KICAgICAgICAgICAgIGVz YWMNCiAgICAgICAgICAgfTsgdGhlbg0KICAgICAgICAgIGdsX3RocmVhZHNfYXBpPXdpbjMyDQoN CiRhc19lY2hvICIjZGVmaW5lIFVTRV9XSU4zMl9USFJFQURTIDEiID4+Y29uZmRlZnMuaA0KDQog ICAgICAgIGZpDQogICAgICBmaQ0KICAgIGZpDQogIGZpDQogIHsgJGFzX2VjaG8gIiRhc19tZTok e2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIG11bHRpdGhyZWFkIEFQSSB0byB1c2Ui ID4mNQ0KJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIG11bHRpdGhyZWFkIEFQSSB0byB1c2UuLi4g IiA+JjY7IH0NCiAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1 bHQ6ICRnbF90aHJlYWRzX2FwaSIgPiY1DQokYXNfZWNobyAiJGdsX3RocmVhZHNfYXBpIiA+JjY7 IH0NCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCiAgZm9yIGFjX2hlYWRlciBpbiBzdGRsaWIuaA0K ZG8gOg0KICBhY19mbl9jX2NoZWNrX2hlYWRlcl9tb25ncmVsICIkTElORU5PIiAic3RkbGliLmgi ICJhY19jdl9oZWFkZXJfc3RkbGliX2giICIkYWNfaW5jbHVkZXNfZGVmYXVsdCINCmlmIHRlc3Qg IngkYWNfY3ZfaGVhZGVyX3N0ZGxpYl9oIiA9IHh5ZXM7IHRoZW4gOg0KICBjYXQgPj5jb25mZGVm cy5oIDw8X0FDRU9GDQojZGVmaW5lIEhBVkVfU1RETElCX0ggMQ0KX0FDRU9GDQoNCmZpDQoNCmRv bmUNCg0KeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBm b3IgR05VIGxpYmMgY29tcGF0aWJsZSBtYWxsb2MiID4mNQ0KJGFzX2VjaG9fbiAiY2hlY2tpbmcg Zm9yIEdOVSBsaWJjIGNvbXBhdGlibGUgbWFsbG9jLi4uICIgPiY2OyB9DQppZiAke2FjX2N2X2Z1 bmNfbWFsbG9jXzBfbm9ubnVsbCs6fSBmYWxzZTsgdGhlbiA6DQogICRhc19lY2hvX24gIihjYWNo ZWQpICIgPiY2DQplbHNlDQogIGlmIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0geWVzOyB0aGVu IDoNCiAgYWNfY3ZfZnVuY19tYWxsb2NfMF9ub25udWxsPW5vDQplbHNlDQogIGNhdCBjb25mZGVm cy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQNCi8qIGVuZCBjb25mZGVmcy5oLiAgKi8N CiNpZiBkZWZpbmVkIFNURENfSEVBREVSUyB8fCBkZWZpbmVkIEhBVkVfU1RETElCX0gNCiMgaW5j bHVkZSA8c3RkbGliLmg+DQojZWxzZQ0KY2hhciAqbWFsbG9jICgpOw0KI2VuZGlmDQoNCmludA0K bWFpbiAoKQ0Kew0KcmV0dXJuICEgbWFsbG9jICgwKTsNCiAgOw0KICByZXR1cm4gMDsNCn0NCl9B Q0VPRg0KaWYgYWNfZm5fY190cnlfcnVuICIkTElORU5PIjsgdGhlbiA6DQogIGFjX2N2X2Z1bmNf bWFsbG9jXzBfbm9ubnVsbD15ZXMNCmVsc2UNCiAgYWNfY3ZfZnVuY19tYWxsb2NfMF9ub25udWxs PW5vDQpmaQ0Kcm0gLWYgY29yZSAqLmNvcmUgY29yZS5jb25mdGVzdC4qIGdtb24ub3V0IGJiLm91 dCBjb25mdGVzdCRhY19leGVleHQgXA0KICBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LmJl YW0gY29uZnRlc3QuJGFjX2V4dA0KZmkNCg0KZmkNCnsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xp bmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfZnVuY19tYWxsb2NfMF9ub25udWxsIiA+JjUN CiRhc19lY2hvICIkYWNfY3ZfZnVuY19tYWxsb2NfMF9ub25udWxsIiA+JjY7IH0NCmlmIHRlc3Qg JGFjX2N2X2Z1bmNfbWFsbG9jXzBfbm9ubnVsbCA9IHllczsgdGhlbiA6DQogIGdsX2N2X2Z1bmNf bWFsbG9jXzBfbm9ubnVsbD0xDQplbHNlDQogIGdsX2N2X2Z1bmNfbWFsbG9jXzBfbm9ubnVsbD0w DQpmaQ0KDQoNCmNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YNCiNkZWZpbmUgTUFMTE9DXzBfSVNf Tk9OTlVMTCAkZ2xfY3ZfZnVuY19tYWxsb2NfMF9ub25udWxsDQpfQUNFT0YNCg0KDQoNCg0KDQoN Cg0KDQoNCg0KDQogIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hl Y2tpbmcgZm9yIGEgdHJhZGl0aW9uYWwgamFwYW5lc2UgbG9jYWxlIiA+JjUNCiRhc19lY2hvX24g ImNoZWNraW5nIGZvciBhIHRyYWRpdGlvbmFsIGphcGFuZXNlIGxvY2FsZS4uLiAiID4mNjsgfQ0K aWYgJHtndF9jdl9sb2NhbGVfamErOn0gZmFsc2U7IHRoZW4gOg0KICAkYXNfZWNob19uICIoY2Fj aGVkKSAiID4mNg0KZWxzZQ0KDQogICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRl c3QuJGFjX2V4dA0KLyogZW5kIGNvbmZkZWZzLmguICAqLw0KDQojaW5jbHVkZSA8bG9jYWxlLmg+ DQojaW5jbHVkZSA8dGltZS5oPg0KI2lmIEhBVkVfTEFOR0lORk9fQ09ERVNFVA0KIyBpbmNsdWRl IDxsYW5naW5mby5oPg0KI2VuZGlmDQojaW5jbHVkZSA8c3RkbGliLmg+DQojaW5jbHVkZSA8c3Ry aW5nLmg+DQpzdHJ1Y3QgdG0gdDsNCmNoYXIgYnVmWzE2XTsNCmludCBtYWluICgpDQp7DQogIGNv bnN0IGNoYXIgKnA7DQogIC8qIENoZWNrIHdoZXRoZXIgdGhlIGdpdmVuIGxvY2FsZSBuYW1lIGlz IHJlY29nbml6ZWQgYnkgdGhlIHN5c3RlbS4gICovDQojaWYgKGRlZmluZWQgX1dJTjMyIHx8IGRl ZmluZWQgX19XSU4zMl9fKSAmJiAhZGVmaW5lZCBfX0NZR1dJTl9fDQogIC8qIE9uIG5hdGl2ZSBX aW4zMiwgc2V0bG9jYWxlKGNhdGVnb3J5LCAiIikgbG9va3MgYXQgdGhlIHN5c3RlbSBzZXR0aW5n cywNCiAgICAgbm90IGF0IHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZXMuICBBbHNvLCB3aGVuIGFu IGVuY29kaW5nIHN1ZmZpeCBzdWNoDQogICAgIGFzICIuNjUwMDEiIG9yICIuNTQ5MzYiIGlzIHNw ZWZpY2llZCwgaXQgc3VjY2VlZHMgYnV0IHNldHMgdGhlIExDX0NUWVBFDQogICAgIGNhdGVnb3J5 IG9mIHRoZSBsb2NhbGUgdG8gIkMiLiAgKi8NCiAgaWYgKHNldGxvY2FsZSAoTENfQUxMLCBnZXRl bnYgKCJMQ19BTEwiKSkgPT0gTlVMTA0KICAgICAgfHwgc3RyY21wIChzZXRsb2NhbGUgKExDX0NU WVBFLCBOVUxMKSwgIkMiKSA9PSAwKQ0KICAgIHJldHVybiAxOw0KI2Vsc2UNCiAgaWYgKHNldGxv Y2FsZSAoTENfQUxMLCAiIikgPT0gTlVMTCkgcmV0dXJuIDE7DQojZW5kaWYNCiAgLyogQ2hlY2sg d2hldGhlciBubF9sYW5naW5mbyhDT0RFU0VUKSBpcyBub25lbXB0eSBhbmQgbm90ICJBU0NJSSIg b3IgIjY0NiIuDQogICAgIE9uIE1hY09TIFggMTAuMy41IChEYXJ3aW4gNy41KSBpbiB0aGUgZnJf RlIgbG9jYWxlLCBubF9sYW5naW5mbyhDT0RFU0VUKQ0KICAgICBpcyBlbXB0eSwgYW5kIHRoZSBi ZWhhdmlvdXIgb2YgVGNsIDguNCBpbiB0aGlzIGxvY2FsZSBpcyBub3QgdXNlZnVsLg0KICAgICBP biBPcGVuQlNEIDQuMCwgd2hlbiBhbiB1bnN1cHBvcnRlZCBsb2NhbGUgaXMgc3BlY2lmaWVkLCBz ZXRsb2NhbGUoKQ0KICAgICBzdWNjZWVkcyBidXQgdGhlbiBubF9sYW5naW5mbyhDT0RFU0VUKSBp cyAiNjQ2Ii4gSW4gdGhpcyBzaXR1YXRpb24sDQogICAgIHNvbWUgdW5pdCB0ZXN0cyBmYWlsLg0K ICAgICBPbiBNaXJCU0QgMTAsIHdoZW4gYW4gdW5zdXBwb3J0ZWQgbG9jYWxlIGlzIHNwZWNpZmll ZCwgc2V0bG9jYWxlKCkNCiAgICAgc3VjY2VlZHMgYnV0IHRoZW4gbmxfbGFuZ2luZm8oQ09ERVNF VCkgaXMgIlVURi04Ii4gICovDQojaWYgSEFWRV9MQU5HSU5GT19DT0RFU0VUDQogIHsNCiAgICBj b25zdCBjaGFyICpjcyA9IG5sX2xhbmdpbmZvIChDT0RFU0VUKTsNCiAgICBpZiAoY3NbMF0gPT0g J1wwJyB8fCBzdHJjbXAgKGNzLCAiQVNDSUkiKSA9PSAwIHx8IHN0cmNtcCAoY3MsICI2NDYiKSA9 PSAwDQogICAgICAgIHx8IHN0cmNtcCAoY3MsICJVVEYtOCIpID09IDApDQogICAgICByZXR1cm4g MTsNCiAgfQ0KI2VuZGlmDQojaWZkZWYgX19DWUdXSU5fXw0KICAvKiBPbiBDeWd3aW4sIGF2b2lk IGxvY2FsZSBuYW1lcyB3aXRob3V0IGVuY29kaW5nIHN1ZmZpeCwgYmVjYXVzZSB0aGUNCiAgICAg bG9jYWxlX2NoYXJzZXQoKSBmdW5jdGlvbiByZWxpZXMgb24gdGhlIGVuY29kaW5nIHN1ZmZpeC4g IE5vdGUgdGhhdA0KICAgICBMQ19BTEwgaXMgc2V0IG9uIHRoZSBjb21tYW5kIGxpbmUuICAqLw0K ICBpZiAoc3RyY2hyIChnZXRlbnYgKCJMQ19BTEwiKSwgJy4nKSA9PSBOVUxMKSByZXR1cm4gMTsN CiNlbmRpZg0KICAvKiBDaGVjayB3aGV0aGVyIE1CX0NVUl9NQVggaXMgPiAxLiAgVGhpcyBleGNs dWRlcyB0aGUgZHlzZnVuY3Rpb25hbCBsb2NhbGVzDQogICAgIG9uIEN5Z3dpbiAxLjUueC4gICov DQogIGlmIChNQl9DVVJfTUFYID09IDEpDQogICAgcmV0dXJuIDE7DQogIC8qIENoZWNrIHdoZXRo ZXIgaW4gYSBtb250aCBuYW1lLCBubyBieXRlIGluIHRoZSByYW5nZSAweDgwLi4weDlGIG9jY3Vy cy4NCiAgICAgVGhpcyBleGNsdWRlcyB0aGUgVVRGLTggZW5jb2RpbmcgKGV4Y2VwdCBvbiBNaXJC U0QpLiAgKi8NCiAgdC50bV95ZWFyID0gMTk3NSAtIDE5MDA7IHQudG1fbW9uID0gMiAtIDE7IHQu dG1fbWRheSA9IDQ7DQogIGlmIChzdHJmdGltZSAoYnVmLCBzaXplb2YgKGJ1ZiksICIlQiIsICZ0 KSA8IDIpIHJldHVybiAxOw0KICBmb3IgKHAgPSBidWY7ICpwICE9ICdcMCc7IHArKykNCiAgICBp ZiAoKHVuc2lnbmVkIGNoYXIpICpwID49IDB4ODAgJiYgKHVuc2lnbmVkIGNoYXIpICpwIDwgMHhh MCkNCiAgICAgIHJldHVybiAxOw0KICByZXR1cm4gMDsNCn0NCg0KX0FDRU9GDQogICAgaWYgeyB7 IGV2YWwgZWNobyAiXCJcJGFzX21lXCI6JHthc19saW5lbm8tJExJTkVOT306IFwiJGFjX2xpbmtc IiI7IH0gPiY1DQogIChldmFsICRhY19saW5rKSAyPiY1DQogIGFjX3N0YXR1cz0kPw0KICAkYXNf ZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUN CiAgdGVzdCAkYWNfc3RhdHVzID0gMDsgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dDsg dGhlbg0KICAgICAgY2FzZSAiJGhvc3Rfb3MiIGluDQogICAgICAgICMgSGFuZGxlIG5hdGl2ZSBX aW5kb3dzIHNwZWNpYWxseSwgYmVjYXVzZSB0aGVyZSBzZXRsb2NhbGUoKSBpbnRlcnByZXRzDQog ICAgICAgICMgImFyIiBhcyAiQXJhYmljIiBvciAiQXJhYmljX1NhdWRpIEFyYWJpYS4xMjU2IiwN CiAgICAgICAgIyAiZnIiIG9yICJmcmEiIGFzICJGcmVuY2giIG9yICJGcmVuY2hfRnJhbmNlLjEy NTIiLA0KICAgICAgICAjICJnZSIoISkgb3IgImRldSIoISkgYXMgIkdlcm1hbiIgb3IgIkdlcm1h bl9HZXJtYW55LjEyNTIiLA0KICAgICAgICAjICJqYSIgYXMgIkphcGFuZXNlIiBvciAiSmFwYW5l c2VfSmFwYW4uOTMyIiwNCiAgICAgICAgIyBhbmQgc2ltaWxhci4NCiAgICAgICAgbWluZ3cqKQ0K ICAgICAgICAgICMgTm90ZSB0aGF0IG9uIG5hdGl2ZSBXaW4zMiwgdGhlIEphcGFuZXNlIGxvY2Fs ZSBpcyBKYXBhbmVzZV9KYXBhbi45MzIsDQogICAgICAgICAgIyBhbmQgQ1A5MzIgaXMgdmVyeSBk aWZmZXJlbnQgZnJvbSBFVUMtSlAsIHNvIHdlIGNhbm5vdCB1c2UgaXQgaGVyZS4NCiAgICAgICAg ICBndF9jdl9sb2NhbGVfamE9bm9uZQ0KICAgICAgICAgIDs7DQogICAgICAgICopDQogICAgICAg ICAgIyBTZXR0aW5nIExDX0FMTCBpcyBub3QgZW5vdWdoLiBOZWVkIHRvIHNldCBMQ19USU1FIHRv IGVtcHR5LCBiZWNhdXNlDQogICAgICAgICAgIyBvdGhlcndpc2Ugb24gTWFjT1MgWCAxMC4zLjUg dGhlIExDX1RJTUU9QyBmcm9tIHRoZSBiZWdpbm5pbmcgb2YgdGhlDQogICAgICAgICAgIyBjb25m aWd1cmUgc2NyaXB0IHdvdWxkIG92ZXJyaWRlIHRoZSBMQ19BTEwgc2V0dGluZy4gTGlrZXdpc2Ug Zm9yDQogICAgICAgICAgIyBMQ19DVFlQRSwgd2hpY2ggaXMgYWxzbyBzZXQgYXQgdGhlIGJlZ2lu bmluZyBvZiB0aGUgY29uZmlndXJlIHNjcmlwdC4NCiAgICAgICAgICAjIFRlc3QgZm9yIHRoZSBB SVggbG9jYWxlIG5hbWUuDQogICAgICAgICAgaWYgKExDX0FMTD1qYV9KUCBMQ19USU1FPSBMQ19D VFlQRT0gLi9jb25mdGVzdDsgZXhpdCkgMj4vZGV2L251bGw7IHRoZW4NCiAgICAgICAgICAgIGd0 X2N2X2xvY2FsZV9qYT1qYV9KUA0KICAgICAgICAgIGVsc2UNCiAgICAgICAgICAgICMgVGVzdCBm b3IgdGhlIGxvY2FsZSBuYW1lIHdpdGggZXhwbGljaXQgZW5jb2Rpbmcgc3VmZml4Lg0KICAgICAg ICAgICAgaWYgKExDX0FMTD1qYV9KUC5FVUMtSlAgTENfVElNRT0gTENfQ1RZUEU9IC4vY29uZnRl c3Q7IGV4aXQpIDI+L2Rldi9udWxsOyB0aGVuDQogICAgICAgICAgICAgIGd0X2N2X2xvY2FsZV9q YT1qYV9KUC5FVUMtSlANCiAgICAgICAgICAgIGVsc2UNCiAgICAgICAgICAgICAgIyBUZXN0IGZv ciB0aGUgSFAtVVgsIE9TRi8xLCBOZXRCU0QgbG9jYWxlIG5hbWUuDQogICAgICAgICAgICAgIGlm IChMQ19BTEw9amFfSlAuZXVjSlAgTENfVElNRT0gTENfQ1RZUEU9IC4vY29uZnRlc3Q7IGV4aXQp IDI+L2Rldi9udWxsOyB0aGVuDQogICAgICAgICAgICAgICAgZ3RfY3ZfbG9jYWxlX2phPWphX0pQ LmV1Y0pQDQogICAgICAgICAgICAgIGVsc2UNCiAgICAgICAgICAgICAgICAjIFRlc3QgZm9yIHRo ZSBJUklYLCBGcmVlQlNEIGxvY2FsZSBuYW1lLg0KICAgICAgICAgICAgICAgIGlmIChMQ19BTEw9 amFfSlAuRVVDIExDX1RJTUU9IExDX0NUWVBFPSAuL2NvbmZ0ZXN0OyBleGl0KSAyPi9kZXYvbnVs bDsgdGhlbg0KICAgICAgICAgICAgICAgICAgZ3RfY3ZfbG9jYWxlX2phPWphX0pQLkVVQw0KICAg ICAgICAgICAgICAgIGVsc2UNCiAgICAgICAgICAgICAgICAgICMgVGVzdCBmb3IgdGhlIFNvbGFy aXMgNyBsb2NhbGUgbmFtZS4NCiAgICAgICAgICAgICAgICAgIGlmIChMQ19BTEw9amEgTENfVElN RT0gTENfQ1RZUEU9IC4vY29uZnRlc3Q7IGV4aXQpIDI+L2Rldi9udWxsOyB0aGVuDQogICAgICAg ICAgICAgICAgICAgIGd0X2N2X2xvY2FsZV9qYT1qYQ0KICAgICAgICAgICAgICAgICAgZWxzZQ0K ICAgICAgICAgICAgICAgICAgICAjIFNwZWNpYWwgdGVzdCBmb3IgTmV0QlNEIDEuNi4NCiAgICAg ICAgICAgICAgICAgICAgaWYgdGVzdCAtZiAvdXNyL3NoYXJlL2xvY2FsZS9qYV9KUC5ldWNKUC9M Q19DVFlQRTsgdGhlbg0KICAgICAgICAgICAgICAgICAgICAgIGd0X2N2X2xvY2FsZV9qYT1qYV9K UC5ldWNKUA0KICAgICAgICAgICAgICAgICAgICBlbHNlDQogICAgICAgICAgICAgICAgICAgICAg IyBOb25lIGZvdW5kLg0KICAgICAgICAgICAgICAgICAgICAgIGd0X2N2X2xvY2FsZV9qYT1ub25l DQogICAgICAgICAgICAgICAgICAgIGZpDQogICAgICAgICAgICAgICAgICBmaQ0KICAgICAgICAg ICAgICAgIGZpDQogICAgICAgICAgICAgIGZpDQogICAgICAgICAgICBmaQ0KICAgICAgICAgIGZp DQogICAgICAgICAgOzsNCiAgICAgIGVzYWMNCiAgICBmaQ0KICAgIHJtIC1mciBjb25mdGVzdCoN Cg0KZmkNCnsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAk Z3RfY3ZfbG9jYWxlX2phIiA+JjUNCiRhc19lY2hvICIkZ3RfY3ZfbG9jYWxlX2phIiA+JjY7IH0N CiAgTE9DQUxFX0pBPSRndF9jdl9sb2NhbGVfamENCg0KDQoNCg0KDQogIHsgJGFzX2VjaG8gIiRh c19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIGEgdHJhbnNpdGlvbmFsIGNo aW5lc2UgbG9jYWxlIiA+JjUNCiRhc19lY2hvX24gImNoZWNraW5nIGZvciBhIHRyYW5zaXRpb25h bCBjaGluZXNlIGxvY2FsZS4uLiAiID4mNjsgfQ0KaWYgJHtndF9jdl9sb2NhbGVfemhfQ04rOn0g ZmFsc2U7IHRoZW4gOg0KICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNg0KZWxzZQ0KDQogICAg Y2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dA0KLyogZW5kIGNvbmZk ZWZzLmguICAqLw0KDQojaW5jbHVkZSA8bG9jYWxlLmg+DQojaW5jbHVkZSA8c3RkbGliLmg+DQoj aW5jbHVkZSA8dGltZS5oPg0KI2lmIEhBVkVfTEFOR0lORk9fQ09ERVNFVA0KIyBpbmNsdWRlIDxs YW5naW5mby5oPg0KI2VuZGlmDQojaW5jbHVkZSA8c3RkbGliLmg+DQojaW5jbHVkZSA8c3RyaW5n Lmg+DQpzdHJ1Y3QgdG0gdDsNCmNoYXIgYnVmWzE2XTsNCmludCBtYWluICgpDQp7DQogIGNvbnN0 IGNoYXIgKnA7DQogIC8qIENoZWNrIHdoZXRoZXIgdGhlIGdpdmVuIGxvY2FsZSBuYW1lIGlzIHJl Y29nbml6ZWQgYnkgdGhlIHN5c3RlbS4gICovDQojaWYgKGRlZmluZWQgX1dJTjMyIHx8IGRlZmlu ZWQgX19XSU4zMl9fKSAmJiAhZGVmaW5lZCBfX0NZR1dJTl9fDQogIC8qIE9uIG5hdGl2ZSBXaW4z Miwgc2V0bG9jYWxlKGNhdGVnb3J5LCAiIikgbG9va3MgYXQgdGhlIHN5c3RlbSBzZXR0aW5ncywN CiAgICAgbm90IGF0IHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZXMuICBBbHNvLCB3aGVuIGFuIGVu Y29kaW5nIHN1ZmZpeCBzdWNoDQogICAgIGFzICIuNjUwMDEiIG9yICIuNTQ5MzYiIGlzIHNwZWZp Y2llZCwgaXQgc3VjY2VlZHMgYnV0IHNldHMgdGhlIExDX0NUWVBFDQogICAgIGNhdGVnb3J5IG9m IHRoZSBsb2NhbGUgdG8gIkMiLiAgKi8NCiAgaWYgKHNldGxvY2FsZSAoTENfQUxMLCBnZXRlbnYg KCJMQ19BTEwiKSkgPT0gTlVMTA0KICAgICAgfHwgc3RyY21wIChzZXRsb2NhbGUgKExDX0NUWVBF LCBOVUxMKSwgIkMiKSA9PSAwKQ0KICAgIHJldHVybiAxOw0KI2Vsc2UNCiAgaWYgKHNldGxvY2Fs ZSAoTENfQUxMLCAiIikgPT0gTlVMTCkgcmV0dXJuIDE7DQojZW5kaWYNCiAgLyogQ2hlY2sgd2hl dGhlciBubF9sYW5naW5mbyhDT0RFU0VUKSBpcyBub25lbXB0eSBhbmQgbm90ICJBU0NJSSIgb3Ig IjY0NiIuDQogICAgIE9uIE1hY09TIFggMTAuMy41IChEYXJ3aW4gNy41KSBpbiB0aGUgZnJfRlIg bG9jYWxlLCBubF9sYW5naW5mbyhDT0RFU0VUKQ0KICAgICBpcyBlbXB0eSwgYW5kIHRoZSBiZWhh dmlvdXIgb2YgVGNsIDguNCBpbiB0aGlzIGxvY2FsZSBpcyBub3QgdXNlZnVsLg0KICAgICBPbiBP cGVuQlNEIDQuMCwgd2hlbiBhbiB1bnN1cHBvcnRlZCBsb2NhbGUgaXMgc3BlY2lmaWVkLCBzZXRs b2NhbGUoKQ0KICAgICBzdWNjZWVkcyBidXQgdGhlbiBubF9sYW5naW5mbyhDT0RFU0VUKSBpcyAi NjQ2Ii4gSW4gdGhpcyBzaXR1YXRpb24sDQogICAgIHNvbWUgdW5pdCB0ZXN0cyBmYWlsLg0KICAg ICBPbiBNaXJCU0QgMTAsIHdoZW4gYW4gdW5zdXBwb3J0ZWQgbG9jYWxlIGlzIHNwZWNpZmllZCwg c2V0bG9jYWxlKCkNCiAgICAgc3VjY2VlZHMgYnV0IHRoZW4gbmxfbGFuZ2luZm8oQ09ERVNFVCkg aXMgIlVURi04Ii4gICovDQojaWYgSEFWRV9MQU5HSU5GT19DT0RFU0VUDQogIHsNCiAgICBjb25z dCBjaGFyICpjcyA9IG5sX2xhbmdpbmZvIChDT0RFU0VUKTsNCiAgICBpZiAoY3NbMF0gPT0gJ1ww JyB8fCBzdHJjbXAgKGNzLCAiQVNDSUkiKSA9PSAwIHx8IHN0cmNtcCAoY3MsICI2NDYiKSA9PSAw DQogICAgICAgIHx8IHN0cmNtcCAoY3MsICJVVEYtOCIpID09IDApDQogICAgICByZXR1cm4gMTsN CiAgfQ0KI2VuZGlmDQojaWZkZWYgX19DWUdXSU5fXw0KICAvKiBPbiBDeWd3aW4sIGF2b2lkIGxv Y2FsZSBuYW1lcyB3aXRob3V0IGVuY29kaW5nIHN1ZmZpeCwgYmVjYXVzZSB0aGUNCiAgICAgbG9j YWxlX2NoYXJzZXQoKSBmdW5jdGlvbiByZWxpZXMgb24gdGhlIGVuY29kaW5nIHN1ZmZpeC4gIE5v dGUgdGhhdA0KICAgICBMQ19BTEwgaXMgc2V0IG9uIHRoZSBjb21tYW5kIGxpbmUuICAqLw0KICBp ZiAoc3RyY2hyIChnZXRlbnYgKCJMQ19BTEwiKSwgJy4nKSA9PSBOVUxMKSByZXR1cm4gMTsNCiNl bmRpZg0KICAvKiBDaGVjayB3aGV0aGVyIGluIGEgbW9udGggbmFtZSwgbm8gYnl0ZSBpbiB0aGUg cmFuZ2UgMHg4MC4uMHg5RiBvY2N1cnMuDQogICAgIFRoaXMgZXhjbHVkZXMgdGhlIFVURi04IGVu Y29kaW5nIChleGNlcHQgb24gTWlyQlNEKS4gICovDQogIHQudG1feWVhciA9IDE5NzUgLSAxOTAw OyB0LnRtX21vbiA9IDIgLSAxOyB0LnRtX21kYXkgPSA0Ow0KICBpZiAoc3RyZnRpbWUgKGJ1Ziwg c2l6ZW9mIChidWYpLCAiJUIiLCAmdCkgPCAyKSByZXR1cm4gMTsNCiAgZm9yIChwID0gYnVmOyAq cCAhPSAnXDAnOyBwKyspDQogICAgaWYgKCh1bnNpZ25lZCBjaGFyKSAqcCA+PSAweDgwICYmICh1 bnNpZ25lZCBjaGFyKSAqcCA8IDB4YTApDQogICAgICByZXR1cm4gMTsNCiAgLyogQ2hlY2sgd2hl dGhlciBhIHR5cGljYWwgR0IxODAzMCBtdWx0aWJ5dGUgc2VxdWVuY2UgaXMgcmVjb2duaXplZCBh cyBhDQogICAgIHNpbmdsZSB3aWRlIGNoYXJhY3Rlci4gIFRoaXMgZXhjbHVkZXMgdGhlIEdCMjMx MiBhbmQgR0JLIGVuY29kaW5ncy4gICovDQogIGlmIChtYmxlbiAoIlwyMDNcMDYyXDMzMlwwNjYi LCA1KSAhPSA0KQ0KICAgIHJldHVybiAxOw0KICByZXR1cm4gMDsNCn0NCg0KX0FDRU9GDQogICAg aWYgeyB7IGV2YWwgZWNobyAiXCJcJGFzX21lXCI6JHthc19saW5lbm8tJExJTkVOT306IFwiJGFj X2xpbmtcIiI7IH0gPiY1DQogIChldmFsICRhY19saW5rKSAyPiY1DQogIGFjX3N0YXR1cz0kPw0K ICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJD8gPSAkYWNfc3RhdHVz IiA+JjUNCiAgdGVzdCAkYWNfc3RhdHVzID0gMDsgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4 ZWV4dDsgdGhlbg0KICAgICAgY2FzZSAiJGhvc3Rfb3MiIGluDQogICAgICAgICMgSGFuZGxlIG5h dGl2ZSBXaW5kb3dzIHNwZWNpYWxseSwgYmVjYXVzZSB0aGVyZSBzZXRsb2NhbGUoKSBpbnRlcnBy ZXRzDQogICAgICAgICMgImFyIiBhcyAiQXJhYmljIiBvciAiQXJhYmljX1NhdWRpIEFyYWJpYS4x MjU2IiwNCiAgICAgICAgIyAiZnIiIG9yICJmcmEiIGFzICJGcmVuY2giIG9yICJGcmVuY2hfRnJh bmNlLjEyNTIiLA0KICAgICAgICAjICJnZSIoISkgb3IgImRldSIoISkgYXMgIkdlcm1hbiIgb3Ig Ikdlcm1hbl9HZXJtYW55LjEyNTIiLA0KICAgICAgICAjICJqYSIgYXMgIkphcGFuZXNlIiBvciAi SmFwYW5lc2VfSmFwYW4uOTMyIiwNCiAgICAgICAgIyBhbmQgc2ltaWxhci4NCiAgICAgICAgbWlu Z3cqKQ0KICAgICAgICAgICMgVGVzdCBmb3IgdGhlIGh5cG90aGV0aWNhbCBuYXRpdmUgV2luMzIg bG9jYWxlIG5hbWUuDQogICAgICAgICAgaWYgKExDX0FMTD1DaGluZXNlX0NoaW5hLjU0OTM2IExD X1RJTUU9IExDX0NUWVBFPSAuL2NvbmZ0ZXN0OyBleGl0KSAyPi9kZXYvbnVsbDsgdGhlbg0KICAg ICAgICAgICAgZ3RfY3ZfbG9jYWxlX3poX0NOPUNoaW5lc2VfQ2hpbmEuNTQ5MzYNCiAgICAgICAg ICBlbHNlDQogICAgICAgICAgICAjIE5vbmUgZm91bmQuDQogICAgICAgICAgICBndF9jdl9sb2Nh bGVfemhfQ049bm9uZQ0KICAgICAgICAgIGZpDQogICAgICAgICAgOzsNCiAgICAgICAgKikNCiAg ICAgICAgICAjIFNldHRpbmcgTENfQUxMIGlzIG5vdCBlbm91Z2guIE5lZWQgdG8gc2V0IExDX1RJ TUUgdG8gZW1wdHksIGJlY2F1c2UNCiAgICAgICAgICAjIG90aGVyd2lzZSBvbiBNYWNPUyBYIDEw LjMuNSB0aGUgTENfVElNRT1DIGZyb20gdGhlIGJlZ2lubmluZyBvZiB0aGUNCiAgICAgICAgICAj IGNvbmZpZ3VyZSBzY3JpcHQgd291bGQgb3ZlcnJpZGUgdGhlIExDX0FMTCBzZXR0aW5nLiBMaWtl d2lzZSBmb3INCiAgICAgICAgICAjIExDX0NUWVBFLCB3aGljaCBpcyBhbHNvIHNldCBhdCB0aGUg YmVnaW5uaW5nIG9mIHRoZSBjb25maWd1cmUgc2NyaXB0Lg0KICAgICAgICAgICMgVGVzdCBmb3Ig dGhlIGxvY2FsZSBuYW1lIHdpdGhvdXQgZW5jb2Rpbmcgc3VmZml4Lg0KICAgICAgICAgIGlmIChM Q19BTEw9emhfQ04gTENfVElNRT0gTENfQ1RZUEU9IC4vY29uZnRlc3Q7IGV4aXQpIDI+L2Rldi9u dWxsOyB0aGVuDQogICAgICAgICAgICBndF9jdl9sb2NhbGVfemhfQ049emhfQ04NCiAgICAgICAg ICBlbHNlDQogICAgICAgICAgICAjIFRlc3QgZm9yIHRoZSBsb2NhbGUgbmFtZSB3aXRoIGV4cGxp Y2l0IGVuY29kaW5nIHN1ZmZpeC4NCiAgICAgICAgICAgIGlmIChMQ19BTEw9emhfQ04uR0IxODAz MCBMQ19USU1FPSBMQ19DVFlQRT0gLi9jb25mdGVzdDsgZXhpdCkgMj4vZGV2L251bGw7IHRoZW4N CiAgICAgICAgICAgICAgZ3RfY3ZfbG9jYWxlX3poX0NOPXpoX0NOLkdCMTgwMzANCiAgICAgICAg ICAgIGVsc2UNCiAgICAgICAgICAgICAgIyBOb25lIGZvdW5kLg0KICAgICAgICAgICAgICBndF9j dl9sb2NhbGVfemhfQ049bm9uZQ0KICAgICAgICAgICAgZmkNCiAgICAgICAgICBmaQ0KICAgICAg ICAgIDs7DQogICAgICBlc2FjDQogICAgZWxzZQ0KICAgICAgIyBJZiB0aGVyZSB3YXMgYSBsaW5r IGVycm9yLCBkdWUgdG8gbWJsZW4oKSwgdGhlIHN5c3RlbSBpcyBzbyBvbGQgdGhhdA0KICAgICAg IyBpdCBjZXJ0YWlubHkgZG9lc24ndCBoYXZlIGEgY2hpbmVzZSBsb2NhbGUuDQogICAgICBndF9j dl9sb2NhbGVfemhfQ049bm9uZQ0KICAgIGZpDQogICAgcm0gLWZyIGNvbmZ0ZXN0Kg0KDQpmaQ0K eyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRndF9jdl9s b2NhbGVfemhfQ04iID4mNQ0KJGFzX2VjaG8gIiRndF9jdl9sb2NhbGVfemhfQ04iID4mNjsgfQ0K ICBMT0NBTEVfWkhfQ049JGd0X2N2X2xvY2FsZV96aF9DTg0KDQoNCg0KDQogIHsgJGFzX2VjaG8g IiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIGEgZnJlbmNoIFVuaWNv ZGUgbG9jYWxlIiA+JjUNCiRhc19lY2hvX24gImNoZWNraW5nIGZvciBhIGZyZW5jaCBVbmljb2Rl IGxvY2FsZS4uLiAiID4mNjsgfQ0KaWYgJHtndF9jdl9sb2NhbGVfZnJfdXRmOCs6fSBmYWxzZTsg dGhlbiA6DQogICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2DQplbHNlDQoNCiAgICBjYXQgY29u ZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0DQovKiBlbmQgY29uZmRlZnMuaC4g ICovDQoNCiNpbmNsdWRlIDxsb2NhbGUuaD4NCiNpbmNsdWRlIDx0aW1lLmg+DQojaWYgSEFWRV9M QU5HSU5GT19DT0RFU0VUDQojIGluY2x1ZGUgPGxhbmdpbmZvLmg+DQojZW5kaWYNCiNpbmNsdWRl IDxzdGRsaWIuaD4NCiNpbmNsdWRlIDxzdHJpbmcuaD4NCnN0cnVjdCB0bSB0Ow0KY2hhciBidWZb MTZdOw0KaW50IG1haW4gKCkgew0KICAvKiBPbiBCZU9TIGFuZCBIYWlrdSwgbG9jYWxlcyBhcmUg bm90IGltcGxlbWVudGVkIGluIGxpYmMuICBSYXRoZXIsIGxpYmludGwNCiAgICAgaW1pdGF0ZXMg bG9jYWxlIGRlcGVuZGVudCBiZWhhdmlvdXIgYnkgbG9va2luZyBhdCB0aGUgZW52aXJvbm1lbnQN CiAgICAgdmFyaWFibGVzLCBhbmQgYWxsIGxvY2FsZXMgdXNlIHRoZSBVVEYtOCBlbmNvZGluZy4g ICovDQojaWYgIShkZWZpbmVkIF9fQkVPU19fIHx8IGRlZmluZWQgX19IQUlLVV9fKQ0KICAvKiBD aGVjayB3aGV0aGVyIHRoZSBnaXZlbiBsb2NhbGUgbmFtZSBpcyByZWNvZ25pemVkIGJ5IHRoZSBz eXN0ZW0uICAqLw0KIyBpZiAoZGVmaW5lZCBfV0lOMzIgfHwgZGVmaW5lZCBfX1dJTjMyX18pICYm ICFkZWZpbmVkIF9fQ1lHV0lOX18NCiAgLyogT24gbmF0aXZlIFdpbjMyLCBzZXRsb2NhbGUoY2F0 ZWdvcnksICIiKSBsb29rcyBhdCB0aGUgc3lzdGVtIHNldHRpbmdzLA0KICAgICBub3QgYXQgdGhl IGVudmlyb25tZW50IHZhcmlhYmxlcy4gIEFsc28sIHdoZW4gYW4gZW5jb2Rpbmcgc3VmZml4IHN1 Y2gNCiAgICAgYXMgIi42NTAwMSIgb3IgIi41NDkzNiIgaXMgc3BlZmljaWVkLCBpdCBzdWNjZWVk cyBidXQgc2V0cyB0aGUgTENfQ1RZUEUNCiAgICAgY2F0ZWdvcnkgb2YgdGhlIGxvY2FsZSB0byAi QyIuICAqLw0KICBpZiAoc2V0bG9jYWxlIChMQ19BTEwsIGdldGVudiAoIkxDX0FMTCIpKSA9PSBO VUxMDQogICAgICB8fCBzdHJjbXAgKHNldGxvY2FsZSAoTENfQ1RZUEUsIE5VTEwpLCAiQyIpID09 IDApDQogICAgcmV0dXJuIDE7DQojIGVsc2UNCiAgaWYgKHNldGxvY2FsZSAoTENfQUxMLCAiIikg PT0gTlVMTCkgcmV0dXJuIDE7DQojIGVuZGlmDQogIC8qIENoZWNrIHdoZXRoZXIgbmxfbGFuZ2lu Zm8oQ09ERVNFVCkgaXMgbm9uZW1wdHkgYW5kIG5vdCAiQVNDSUkiIG9yICI2NDYiLg0KICAgICBP biBNYWNPUyBYIDEwLjMuNSAoRGFyd2luIDcuNSkgaW4gdGhlIGZyX0ZSIGxvY2FsZSwgbmxfbGFu Z2luZm8oQ09ERVNFVCkNCiAgICAgaXMgZW1wdHksIGFuZCB0aGUgYmVoYXZpb3VyIG9mIFRjbCA4 LjQgaW4gdGhpcyBsb2NhbGUgaXMgbm90IHVzZWZ1bC4NCiAgICAgT24gT3BlbkJTRCA0LjAsIHdo ZW4gYW4gdW5zdXBwb3J0ZWQgbG9jYWxlIGlzIHNwZWNpZmllZCwgc2V0bG9jYWxlKCkNCiAgICAg c3VjY2VlZHMgYnV0IHRoZW4gbmxfbGFuZ2luZm8oQ09ERVNFVCkgaXMgIjY0NiIuIEluIHRoaXMg c2l0dWF0aW9uLA0KICAgICBzb21lIHVuaXQgdGVzdHMgZmFpbC4gICovDQojIGlmIEhBVkVfTEFO R0lORk9fQ09ERVNFVA0KICB7DQogICAgY29uc3QgY2hhciAqY3MgPSBubF9sYW5naW5mbyAoQ09E RVNFVCk7DQogICAgaWYgKGNzWzBdID09ICdcMCcgfHwgc3RyY21wIChjcywgIkFTQ0lJIikgPT0g MCB8fCBzdHJjbXAgKGNzLCAiNjQ2IikgPT0gMCkNCiAgICAgIHJldHVybiAxOw0KICB9DQojIGVu ZGlmDQojIGlmZGVmIF9fQ1lHV0lOX18NCiAgLyogT24gQ3lnd2luLCBhdm9pZCBsb2NhbGUgbmFt ZXMgd2l0aG91dCBlbmNvZGluZyBzdWZmaXgsIGJlY2F1c2UgdGhlDQogICAgIGxvY2FsZV9jaGFy c2V0KCkgZnVuY3Rpb24gcmVsaWVzIG9uIHRoZSBlbmNvZGluZyBzdWZmaXguICBOb3RlIHRoYXQN CiAgICAgTENfQUxMIGlzIHNldCBvbiB0aGUgY29tbWFuZCBsaW5lLiAgKi8NCiAgaWYgKHN0cmNo ciAoZ2V0ZW52ICgiTENfQUxMIiksICcuJykgPT0gTlVMTCkgcmV0dXJuIDE7DQojIGVuZGlmDQog IC8qIENoZWNrIHdoZXRoZXIgaW4gdGhlIGFiYnJldmlhdGlvbiBvZiB0aGUgc2Vjb25kIG1vbnRo LCB0aGUgc2Vjb25kDQogICAgIGNoYXJhY3RlciAoc2hvdWxkIGJlIFUrMDBFOTogTEFUSU4gU01B TEwgTEVUVEVSIEUgV0lUSCBBQ1VURSkgaXMNCiAgICAgdHdvIGJ5dGVzIGxvbmcsIHdpdGggVVRG LTggZW5jb2RpbmcuICAqLw0KICB0LnRtX3llYXIgPSAxOTc1IC0gMTkwMDsgdC50bV9tb24gPSAy IC0gMTsgdC50bV9tZGF5ID0gNDsNCiAgaWYgKHN0cmZ0aW1lIChidWYsIHNpemVvZiAoYnVmKSwg IiViIiwgJnQpIDwgNA0KICAgICAgfHwgYnVmWzFdICE9IChjaGFyKSAweGMzIHx8IGJ1ZlsyXSAh PSAoY2hhcikgMHhhOSB8fCBidWZbM10gIT0gJ3YnKQ0KICAgIHJldHVybiAxOw0KI2VuZGlmDQog IC8qIENoZWNrIHdoZXRoZXIgdGhlIGRlY2ltYWwgc2VwYXJhdG9yIGlzIGEgY29tbWEuDQogICAg IE9uIE5ldEJTRCAzLjAgaW4gdGhlIGZyX0ZSLklTTzg4NTktMSBsb2NhbGUsIGxvY2FsZWNvbnYo KS0+ZGVjaW1hbF9wb2ludA0KICAgICBhcmUgbmxfbGFuZ2luZm8oUkFESVhDSEFSKSBhcmUgYm90 aCAiLiIuICAqLw0KICBpZiAobG9jYWxlY29udiAoKSAtPmRlY2ltYWxfcG9pbnRbMF0gIT0gJywn KSByZXR1cm4gMTsNCiAgcmV0dXJuIDA7DQp9DQoNCl9BQ0VPRg0KICAgIGlmIHsgeyBldmFsIGVj aG8gIlwiXCRhc19tZVwiOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcIiRhY19saW5rXCIiOyB9ID4m NQ0KICAoZXZhbCAkYWNfbGluaykgMj4mNQ0KICBhY19zdGF0dXM9JD8NCiAgJGFzX2VjaG8gIiRh c19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1DQogIHRlc3Qg JGFjX3N0YXR1cyA9IDA7IH0gJiYgdGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQ7IHRoZW4NCiAg ICAgIGNhc2UgIiRob3N0X29zIiBpbg0KICAgICAgICAjIEhhbmRsZSBuYXRpdmUgV2luZG93cyBz cGVjaWFsbHksIGJlY2F1c2UgdGhlcmUgc2V0bG9jYWxlKCkgaW50ZXJwcmV0cw0KICAgICAgICAj ICJhciIgYXMgIkFyYWJpYyIgb3IgIkFyYWJpY19TYXVkaSBBcmFiaWEuMTI1NiIsDQogICAgICAg ICMgImZyIiBvciAiZnJhIiBhcyAiRnJlbmNoIiBvciAiRnJlbmNoX0ZyYW5jZS4xMjUyIiwNCiAg ICAgICAgIyAiZ2UiKCEpIG9yICJkZXUiKCEpIGFzICJHZXJtYW4iIG9yICJHZXJtYW5fR2VybWFu eS4xMjUyIiwNCiAgICAgICAgIyAiamEiIGFzICJKYXBhbmVzZSIgb3IgIkphcGFuZXNlX0phcGFu LjkzMiIsDQogICAgICAgICMgYW5kIHNpbWlsYXIuDQogICAgICAgIG1pbmd3KikNCiAgICAgICAg ICAjIFRlc3QgZm9yIHRoZSBoeXBvdGhldGljYWwgbmF0aXZlIFdpbjMyIGxvY2FsZSBuYW1lLg0K ICAgICAgICAgIGlmIChMQ19BTEw9RnJlbmNoX0ZyYW5jZS42NTAwMSBMQ19USU1FPSBMQ19DVFlQ RT0gLi9jb25mdGVzdDsgZXhpdCkgMj4vZGV2L251bGw7IHRoZW4NCiAgICAgICAgICAgIGd0X2N2 X2xvY2FsZV9mcl91dGY4PUZyZW5jaF9GcmFuY2UuNjUwMDENCiAgICAgICAgICBlbHNlDQogICAg ICAgICAgICAjIE5vbmUgZm91bmQuDQogICAgICAgICAgICBndF9jdl9sb2NhbGVfZnJfdXRmOD1u b25lDQogICAgICAgICAgZmkNCiAgICAgICAgICA7Ow0KICAgICAgICAqKQ0KICAgICAgICAgICMg U2V0dGluZyBMQ19BTEwgaXMgbm90IGVub3VnaC4gTmVlZCB0byBzZXQgTENfVElNRSB0byBlbXB0 eSwgYmVjYXVzZQ0KICAgICAgICAgICMgb3RoZXJ3aXNlIG9uIE1hY09TIFggMTAuMy41IHRoZSBM Q19USU1FPUMgZnJvbSB0aGUgYmVnaW5uaW5nIG9mIHRoZQ0KICAgICAgICAgICMgY29uZmlndXJl IHNjcmlwdCB3b3VsZCBvdmVycmlkZSB0aGUgTENfQUxMIHNldHRpbmcuIExpa2V3aXNlIGZvcg0K ICAgICAgICAgICMgTENfQ1RZUEUsIHdoaWNoIGlzIGFsc28gc2V0IGF0IHRoZSBiZWdpbm5pbmcg b2YgdGhlIGNvbmZpZ3VyZSBzY3JpcHQuDQogICAgICAgICAgIyBUZXN0IGZvciB0aGUgdXN1YWwg bG9jYWxlIG5hbWUuDQogICAgICAgICAgaWYgKExDX0FMTD1mcl9GUiBMQ19USU1FPSBMQ19DVFlQ RT0gLi9jb25mdGVzdDsgZXhpdCkgMj4vZGV2L251bGw7IHRoZW4NCiAgICAgICAgICAgIGd0X2N2 X2xvY2FsZV9mcl91dGY4PWZyX0ZSDQogICAgICAgICAgZWxzZQ0KICAgICAgICAgICAgIyBUZXN0 IGZvciB0aGUgbG9jYWxlIG5hbWUgd2l0aCBleHBsaWNpdCBlbmNvZGluZyBzdWZmaXguDQogICAg ICAgICAgICBpZiAoTENfQUxMPWZyX0ZSLlVURi04IExDX1RJTUU9IExDX0NUWVBFPSAuL2NvbmZ0 ZXN0OyBleGl0KSAyPi9kZXYvbnVsbDsgdGhlbg0KICAgICAgICAgICAgICBndF9jdl9sb2NhbGVf ZnJfdXRmOD1mcl9GUi5VVEYtOA0KICAgICAgICAgICAgZWxzZQ0KICAgICAgICAgICAgICAjIFRl c3QgZm9yIHRoZSBTb2xhcmlzIDcgbG9jYWxlIG5hbWUuDQogICAgICAgICAgICAgIGlmIChMQ19B TEw9ZnIuVVRGLTggTENfVElNRT0gTENfQ1RZUEU9IC4vY29uZnRlc3Q7IGV4aXQpIDI+L2Rldi9u dWxsOyB0aGVuDQogICAgICAgICAgICAgICAgZ3RfY3ZfbG9jYWxlX2ZyX3V0Zjg9ZnIuVVRGLTgN CiAgICAgICAgICAgICAgZWxzZQ0KICAgICAgICAgICAgICAgICMgTm9uZSBmb3VuZC4NCiAgICAg ICAgICAgICAgICBndF9jdl9sb2NhbGVfZnJfdXRmOD1ub25lDQogICAgICAgICAgICAgIGZpDQog ICAgICAgICAgICBmaQ0KICAgICAgICAgIGZpDQogICAgICAgICAgOzsNCiAgICAgIGVzYWMNCiAg ICBmaQ0KICAgIHJtIC1mciBjb25mdGVzdCoNCg0KZmkNCnsgJGFzX2VjaG8gIiRhc19tZToke2Fz X2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkZ3RfY3ZfbG9jYWxlX2ZyX3V0ZjgiID4mNQ0KJGFz X2VjaG8gIiRndF9jdl9sb2NhbGVfZnJfdXRmOCIgPiY2OyB9DQogIExPQ0FMRV9GUl9VVEY4PSRn dF9jdl9sb2NhbGVfZnJfdXRmOA0KDQoNCg0KICBHTlVMSUJfTUVNQ0hSPTA7DQogIEdOVUxJQl9N RU1NRU09MDsNCiAgR05VTElCX01FTVBDUFk9MDsNCiAgR05VTElCX01FTVJDSFI9MDsNCiAgR05V TElCX1JBV01FTUNIUj0wOw0KICBHTlVMSUJfU1RQQ1BZPTA7DQogIEdOVUxJQl9TVFBOQ1BZPTA7 DQogIEdOVUxJQl9TVFJDSFJOVUw9MDsNCiAgR05VTElCX1NUUkRVUD0wOw0KICBHTlVMSUJfU1RS TkNBVD0wOw0KICBHTlVMSUJfU1RSTkRVUD0wOw0KICBHTlVMSUJfU1RSTkxFTj0wOw0KICBHTlVM SUJfU1RSUEJSSz0wOw0KICBHTlVMSUJfU1RSU0VQPTA7DQogIEdOVUxJQl9TVFJTVFI9MDsNCiAg R05VTElCX1NUUkNBU0VTVFI9MDsNCiAgR05VTElCX1NUUlRPS19SPTA7DQogIEdOVUxJQl9NQlNM RU49MDsNCiAgR05VTElCX01CU05MRU49MDsNCiAgR05VTElCX01CU0NIUj0wOw0KICBHTlVMSUJf TUJTUkNIUj0wOw0KICBHTlVMSUJfTUJTU1RSPTA7DQogIEdOVUxJQl9NQlNDQVNFQ01QPTA7DQog IEdOVUxJQl9NQlNOQ0FTRUNNUD0wOw0KICBHTlVMSUJfTUJTUENBU0VDTVA9MDsNCiAgR05VTElC X01CU0NBU0VTVFI9MDsNCiAgR05VTElCX01CU0NTUE49MDsNCiAgR05VTElCX01CU1BCUks9MDsN CiAgR05VTElCX01CU1NQTj0wOw0KICBHTlVMSUJfTUJTU0VQPTA7DQogIEdOVUxJQl9NQlNUT0tf Uj0wOw0KICBHTlVMSUJfU1RSRVJST1I9MDsNCiAgR05VTElCX1NUUkVSUk9SX1I9MDsNCiAgR05V TElCX1NUUlNJR05BTD0wOw0KICBHTlVMSUJfU1RSVkVSU0NNUD0wOw0KICBIQVZFX01CU0xFTj0w Ow0KICAgIEhBVkVfTUVNQ0hSPTE7DQogIEhBVkVfREVDTF9NRU1NRU09MTsNCiAgSEFWRV9NRU1Q Q1BZPTE7DQogIEhBVkVfREVDTF9NRU1SQ0hSPTE7DQogIEhBVkVfUkFXTUVNQ0hSPTE7DQogIEhB VkVfU1RQQ1BZPTE7DQogIEhBVkVfU1RQTkNQWT0xOw0KICBIQVZFX1NUUkNIUk5VTD0xOw0KICBI QVZFX0RFQ0xfU1RSRFVQPTE7DQogIEhBVkVfREVDTF9TVFJORFVQPTE7DQogIEhBVkVfREVDTF9T VFJOTEVOPTE7DQogIEhBVkVfU1RSUEJSSz0xOw0KICBIQVZFX1NUUlNFUD0xOw0KICBIQVZFX1NU UkNBU0VTVFI9MTsNCiAgSEFWRV9ERUNMX1NUUlRPS19SPTE7DQogIEhBVkVfREVDTF9TVFJFUlJP Ul9SPTE7DQogIEhBVkVfREVDTF9TVFJTSUdOQUw9MTsNCiAgSEFWRV9TVFJWRVJTQ01QPTE7DQog IFJFUExBQ0VfTUVNQ0hSPTA7DQogIFJFUExBQ0VfTUVNTUVNPTA7DQogIFJFUExBQ0VfU1RQTkNQ WT0wOw0KICBSRVBMQUNFX1NUUkRVUD0wOw0KICBSRVBMQUNFX1NUUlNUUj0wOw0KICBSRVBMQUNF X1NUUkNBU0VTVFI9MDsNCiAgUkVQTEFDRV9TVFJFUlJPUj0wOw0KICBSRVBMQUNFX1NUUkVSUk9S X1I9MDsNCiAgUkVQTEFDRV9TVFJOQ0FUPTA7DQogIFJFUExBQ0VfU1RSTkRVUD0wOw0KICBSRVBM QUNFX1NUUk5MRU49MDsNCiAgUkVQTEFDRV9TVFJTSUdOQUw9MDsNCiAgUkVQTEFDRV9TVFJUT0tf Uj0wOw0KICBVTkRFRklORV9TVFJUT0tfUj0wOw0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoN Cg0KICAjIENoZWNrIGZvciBtbWFwKCkuIERvbid0IHVzZSBBQ19GVU5DX01NQVAsIGJlY2F1c2Ug aXQgY2hlY2tzIHRvbyBtdWNoOiBpdA0KICAjIGZhaWxzIG9uIEhQLVVYIDExLCBiZWNhdXNlIE1B UF9GSVhFRCBtYXBwaW5ncyBkbyBub3Qgd29yay4gQnV0IHRoaXMgaXMNCiAgIyBpcnJlbGV2YW50 IGZvciBhbm9ueW1vdXMgbWFwcGluZ3MuDQogIGFjX2ZuX2NfY2hlY2tfZnVuYyAiJExJTkVOTyIg Im1tYXAiICJhY19jdl9mdW5jX21tYXAiDQppZiB0ZXN0ICJ4JGFjX2N2X2Z1bmNfbW1hcCIgPSB4 eWVzOyB0aGVuIDoNCiAgZ2xfaGF2ZV9tbWFwPXllcw0KZWxzZQ0KICBnbF9oYXZlX21tYXA9bm8N CmZpDQoNCg0KICAjIFRyeSB0byBhbGxvdyBNQVBfQU5PTllNT1VTLg0KICBnbF9oYXZlX21tYXBf YW5vbnltb3VzPW5vDQogIGlmIHRlc3QgJGdsX2hhdmVfbW1hcCA9IHllczsgdGhlbg0KICAgIHsg JGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIE1BUF9B Tk9OWU1PVVMiID4mNQ0KJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIE1BUF9BTk9OWU1PVVMuLi4g IiA+JjY7IH0NCiAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0 DQovKiBlbmQgY29uZmRlZnMuaC4gICovDQoNCiNpbmNsdWRlIDxzeXMvbW1hbi5oPg0KI2lmZGVm IE1BUF9BTk9OWU1PVVMNCiAgICBJIGNhbnQgaWRlbnRpZnkgdGhpcyBtYXAuDQojZW5kaWYNCg0K X0FDRU9GDQppZiAoZXZhbCAiJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0IikgMj4mNSB8DQogICRF R1JFUCAiSSBjYW50IGlkZW50aWZ5IHRoaXMgbWFwLiIgPi9kZXYvbnVsbCAyPiYxOyB0aGVuIDoN CiAgZ2xfaGF2ZV9tbWFwX2Fub255bW91cz15ZXMNCmZpDQpybSAtZiBjb25mdGVzdCoNCg0KICAg IGlmIHRlc3QgJGdsX2hhdmVfbW1hcF9hbm9ueW1vdXMgIT0geWVzOyB0aGVuDQogICAgICBjYXQg Y29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0DQovKiBlbmQgY29uZmRlZnMu aC4gICovDQoNCiNpbmNsdWRlIDxzeXMvbW1hbi5oPg0KI2lmZGVmIE1BUF9BTk9ODQogICAgSSBj YW50IGlkZW50aWZ5IHRoaXMgbWFwLg0KI2VuZGlmDQoNCl9BQ0VPRg0KaWYgKGV2YWwgIiRhY19j cHAgY29uZnRlc3QuJGFjX2V4dCIpIDI+JjUgfA0KICAkRUdSRVAgIkkgY2FudCBpZGVudGlmeSB0 aGlzIG1hcC4iID4vZGV2L251bGwgMj4mMTsgdGhlbiA6DQoNCiRhc19lY2hvICIjZGVmaW5lIE1B UF9BTk9OWU1PVVMgTUFQX0FOT04iID4+Y29uZmRlZnMuaA0KDQogICAgICAgICBnbF9oYXZlX21t YXBfYW5vbnltb3VzPXllcw0KZmkNCnJtIC1mIGNvbmZ0ZXN0Kg0KDQogICAgZmkNCiAgICB7ICRh c19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGdsX2hhdmVfbW1h cF9hbm9ueW1vdXMiID4mNQ0KJGFzX2VjaG8gIiRnbF9oYXZlX21tYXBfYW5vbnltb3VzIiA+JjY7 IH0NCiAgICBpZiB0ZXN0ICRnbF9oYXZlX21tYXBfYW5vbnltb3VzID0geWVzOyB0aGVuDQoNCiRh c19lY2hvICIjZGVmaW5lIEhBVkVfTUFQX0FOT05ZTU9VUyAxIiA+PmNvbmZkZWZzLmgNCg0KICAg IGZpDQogIGZpDQoNCg0KDQoNCg0KDQogIGlmIHRlc3QgJGFjX2N2X2Z1bmNfbWVtY2hyID0geWVz OyB0aGVuDQogICAgIyBEZXRlY3QgcGxhdGZvcm0tc3BlY2lmaWMgYnVncyBpbiBzb21lIHZlcnNp b25zIG9mIGdsaWJjOg0KICAgICMgbWVtY2hyIHNob3VsZCBub3QgZGVyZWZlcmVuY2UgYW55dGhp bmcgd2l0aCBsZW5ndGggMA0KICAgICMgICBodHRwOi8vYnVnemlsbGEucmVkaGF0LmNvbS80OTk2 ODkNCiAgICAjIG1lbWNociBzaG91bGQgbm90IGRlcmVmZXJlbmNlIG92ZXJlc3RpbWF0ZWQgbGVu Z3RoIGFmdGVyIGEgbWF0Y2gNCiAgICAjICAgaHR0cDovL2J1Z3MuZGViaWFuLm9yZy9jZ2ktYmlu L2J1Z3JlcG9ydC5jZ2k/YnVnPTUyMTczNw0KICAgICMgICBodHRwOi8vc291cmNld2FyZS5vcmcv YnVnemlsbGEvc2hvd19idWcuY2dpP2lkPTEwMTYyDQogICAgIyBBc3N1bWUgdGhhdCBtZW1jaHIg d29ya3Mgb24gcGxhdGZvcm1zIHRoYXQgbGFjayBtcHJvdGVjdC4NCiAgICB7ICRhc19lY2hvICIk YXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgbWVtY2hyIHdvcmtz IiA+JjUNCiRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgbWVtY2hyIHdvcmtzLi4uICIgPiY2 OyB9DQppZiAke2dsX2N2X2Z1bmNfbWVtY2hyX3dvcmtzKzp9IGZhbHNlOyB0aGVuIDoNCiAgJGFz X2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYNCmVsc2UNCiAgaWYgdGVzdCAiJGNyb3NzX2NvbXBpbGlu ZyIgPSB5ZXM7IHRoZW4gOg0KICAgICAgICAgZ2xfY3ZfZnVuY19tZW1jaHJfd29ya3M9Imd1ZXNz aW5nIG5vIg0KZWxzZQ0KICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNf ZXh0DQovKiBlbmQgY29uZmRlZnMuaC4gICovDQoNCiNpbmNsdWRlIDxzdHJpbmcuaD4NCiNpZiBI QVZFX1NZU19NTUFOX0gNCiMgaW5jbHVkZSA8ZmNudGwuaD4NCiMgaW5jbHVkZSA8dW5pc3RkLmg+ DQojIGluY2x1ZGUgPHN5cy90eXBlcy5oPg0KIyBpbmNsdWRlIDxzeXMvbW1hbi5oPg0KIyBpZm5k ZWYgTUFQX0ZJTEUNCiMgIGRlZmluZSBNQVBfRklMRSAwDQojIGVuZGlmDQojZW5kaWYNCg0KaW50 DQptYWluICgpDQp7DQoNCiAgaW50IHJlc3VsdCA9IDA7DQogIGNoYXIgKmZlbmNlID0gTlVMTDsN CiNpZiBIQVZFX1NZU19NTUFOX0ggJiYgSEFWRV9NUFJPVEVDVA0KIyBpZiBIQVZFX01BUF9BTk9O WU1PVVMNCiAgY29uc3QgaW50IGZsYWdzID0gTUFQX0FOT05ZTU9VUyB8IE1BUF9QUklWQVRFOw0K ICBjb25zdCBpbnQgZmQgPSAtMTsNCiMgZWxzZSAvKiAhSEFWRV9NQVBfQU5PTllNT1VTICovDQog IGNvbnN0IGludCBmbGFncyA9IE1BUF9GSUxFIHwgTUFQX1BSSVZBVEU7DQogIGludCBmZCA9IG9w ZW4gKCIvZGV2L3plcm8iLCBPX1JET05MWSwgMDY2Nik7DQogIGlmIChmZCA+PSAwKQ0KIyBlbmRp Zg0KICAgIHsNCiAgICAgIGludCBwYWdlc2l6ZSA9IGdldHBhZ2VzaXplICgpOw0KICAgICAgY2hh ciAqdHdvX3BhZ2VzID0NCiAgICAgICAgKGNoYXIgKikgbW1hcCAoTlVMTCwgMiAqIHBhZ2VzaXpl LCBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFLA0KICAgICAgICAgICAgICAgICAgICAgICBmbGFncywg ZmQsIDApOw0KICAgICAgaWYgKHR3b19wYWdlcyAhPSAoY2hhciAqKSgtMSkNCiAgICAgICAgICAm JiBtcHJvdGVjdCAodHdvX3BhZ2VzICsgcGFnZXNpemUsIHBhZ2VzaXplLCBQUk9UX05PTkUpID09 IDApDQogICAgICAgIGZlbmNlID0gdHdvX3BhZ2VzICsgcGFnZXNpemU7DQogICAgfQ0KI2VuZGlm DQogIGlmIChmZW5jZSkNCiAgICB7DQogICAgICBpZiAobWVtY2hyIChmZW5jZSwgMCwgMCkpDQog ICAgICAgIHJlc3VsdCB8PSAxOw0KICAgICAgc3RyY3B5IChmZW5jZSAtIDksICIxMjM0NTY3OCIp Ow0KICAgICAgaWYgKG1lbWNociAoZmVuY2UgLSA5LCAwLCA3OSkgIT0gZmVuY2UgLSAxKQ0KICAg ICAgICByZXN1bHQgfD0gMjsNCiAgICAgIGlmIChtZW1jaHIgKGZlbmNlIC0gMSwgMCwgMykgIT0g ZmVuY2UgLSAxKQ0KICAgICAgICByZXN1bHQgfD0gNDsNCiAgICB9DQogIHJldHVybiByZXN1bHQ7 DQoNCiAgOw0KICByZXR1cm4gMDsNCn0NCl9BQ0VPRg0KaWYgYWNfZm5fY190cnlfcnVuICIkTElO RU5PIjsgdGhlbiA6DQogIGdsX2N2X2Z1bmNfbWVtY2hyX3dvcmtzPXllcw0KZWxzZQ0KICBnbF9j dl9mdW5jX21lbWNocl93b3Jrcz1ubw0KZmkNCnJtIC1mIGNvcmUgKi5jb3JlIGNvcmUuY29uZnRl c3QuKiBnbW9uLm91dCBiYi5vdXQgY29uZnRlc3QkYWNfZXhlZXh0IFwNCiAgY29uZnRlc3QuJGFj X29iamV4dCBjb25mdGVzdC5iZWFtIGNvbmZ0ZXN0LiRhY19leHQNCmZpDQoNCmZpDQp7ICRhc19l Y2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGdsX2N2X2Z1bmNfbWVt Y2hyX3dvcmtzIiA+JjUNCiRhc19lY2hvICIkZ2xfY3ZfZnVuY19tZW1jaHJfd29ya3MiID4mNjsg fQ0KICAgIGlmIHRlc3QgIiRnbF9jdl9mdW5jX21lbWNocl93b3JrcyIgIT0geWVzOyB0aGVuDQog ICAgICBSRVBMQUNFX01FTUNIUj0xDQogICAgZmkNCiAgZWxzZQ0KICAgIEhBVkVfTUVNQ0hSPTAN CiAgZmkNCiAgaWYgdGVzdCAkSEFWRV9NRU1DSFIgPSAwIHx8IHRlc3QgJFJFUExBQ0VfTUVNQ0hS ID0gMTsgdGhlbg0KDQoNCg0KDQoNCg0KDQoNCiAgZ2xfTElCT0JKUz0iJGdsX0xJQk9CSlMgbWVt Y2hyLiRhY19vYmpleHQiDQoNCg0KICBmb3IgYWNfaGVhZGVyIGluIGJwLXN5bS5oDQpkbyA6DQog IGFjX2ZuX2NfY2hlY2tfaGVhZGVyX21vbmdyZWwgIiRMSU5FTk8iICJicC1zeW0uaCIgImFjX2N2 X2hlYWRlcl9icF9zeW1faCIgIiRhY19pbmNsdWRlc19kZWZhdWx0Ig0KaWYgdGVzdCAieCRhY19j dl9oZWFkZXJfYnBfc3ltX2giID0geHllczsgdGhlbiA6DQogIGNhdCA+PmNvbmZkZWZzLmggPDxf QUNFT0YNCiNkZWZpbmUgSEFWRV9CUF9TWU1fSCAxDQpfQUNFT0YNCg0KZmkNCg0KZG9uZQ0KDQoN CiAgZmkNCg0KYWNfZm5fY19jaGVja19kZWNsICIkTElORU5PIiAibWVtcmNociIgImFjX2N2X2hh dmVfZGVjbF9tZW1yY2hyIiAiJGFjX2luY2x1ZGVzX2RlZmF1bHQiDQppZiB0ZXN0ICJ4JGFjX2N2 X2hhdmVfZGVjbF9tZW1yY2hyIiA9IHh5ZXM7IHRoZW4gOg0KICBhY19oYXZlX2RlY2w9MQ0KZWxz ZQ0KICBhY19oYXZlX2RlY2w9MA0KZmkNCg0KY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRg0KI2Rl ZmluZSBIQVZFX0RFQ0xfTUVNUkNIUiAkYWNfaGF2ZV9kZWNsDQpfQUNFT0YNCg0KDQoNCg0KDQoN Cg0KIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLWxhcmdlZmlsZSB3YXMgZ2l2ZW4uDQppZiB0ZXN0 ICIke2VuYWJsZV9sYXJnZWZpbGUrc2V0fSIgPSBzZXQ7IHRoZW4gOg0KICBlbmFibGV2YWw9JGVu YWJsZV9sYXJnZWZpbGU7DQpmaQ0KDQppZiB0ZXN0ICIkZW5hYmxlX2xhcmdlZmlsZSIgIT0gbm87 IHRoZW4NCg0KICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNr aW5nIGZvciBzcGVjaWFsIEMgY29tcGlsZXIgb3B0aW9ucyBuZWVkZWQgZm9yIGxhcmdlIGZpbGVz IiA+JjUNCiRhc19lY2hvX24gImNoZWNraW5nIGZvciBzcGVjaWFsIEMgY29tcGlsZXIgb3B0aW9u cyBuZWVkZWQgZm9yIGxhcmdlIGZpbGVzLi4uICIgPiY2OyB9DQppZiAke2FjX2N2X3N5c19sYXJn ZWZpbGVfQ0MrOn0gZmFsc2U7IHRoZW4gOg0KICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNg0K ZWxzZQ0KICBhY19jdl9zeXNfbGFyZ2VmaWxlX0NDPW5vDQogICAgIGlmIHRlc3QgIiRHQ0MiICE9 IHllczsgdGhlbg0KICAgICAgIGFjX3NhdmVfQ0M9JENDDQogICAgICAgd2hpbGUgOjsgZG8NCgkg IyBJUklYIDYuMiBhbmQgbGF0ZXIgZG8gbm90IHN1cHBvcnQgbGFyZ2UgZmlsZXMgYnkgZGVmYXVs dCwNCgkgIyBzbyB1c2UgdGhlIEMgY29tcGlsZXIncyAtbjMyIG9wdGlvbiBpZiB0aGF0IGhlbHBz Lg0KCSBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0DQovKiBlbmQg Y29uZmRlZnMuaC4gICovDQojaW5jbHVkZSA8c3lzL3R5cGVzLmg+DQogLyogQ2hlY2sgdGhhdCBv ZmZfdCBjYW4gcmVwcmVzZW50IDIqKjYzIC0gMSBjb3JyZWN0bHkuDQogICAgV2UgY2FuJ3Qgc2lt cGx5IGRlZmluZSBMQVJHRV9PRkZfVCB0byBiZSA5MjIzMzcyMDM2ODU0Nzc1ODA3LA0KICAgIHNp bmNlIHNvbWUgQysrIGNvbXBpbGVycyBtYXNxdWVyYWRpbmcgYXMgQyBjb21waWxlcnMNCiAgICBp bmNvcnJlY3RseSByZWplY3QgOTIyMzM3MjAzNjg1NDc3NTgwNy4gICovDQojZGVmaW5lIExBUkdF X09GRl9UICgoKG9mZl90KSAxIDw8IDYyKSAtIDEgKyAoKG9mZl90KSAxIDw8IDYyKSkNCiAgaW50 IG9mZl90X2lzX2xhcmdlWyhMQVJHRV9PRkZfVCAlIDIxNDc0ODM2MjkgPT0gNzIxDQoJCSAgICAg ICAmJiBMQVJHRV9PRkZfVCAlIDIxNDc0ODM2NDcgPT0gMSkNCgkJICAgICAgPyAxIDogLTFdOw0K aW50DQptYWluICgpDQp7DQoNCiAgOw0KICByZXR1cm4gMDsNCn0NCl9BQ0VPRg0KCSBpZiBhY19m bl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6DQogIGJyZWFrDQpmaQ0Kcm0gLWYgY29y ZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dA0KCSBDQz0iJENDIC1uMzIiDQoJIGlm IGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoNCiAgYWNfY3Zfc3lzX2xhcmdl ZmlsZV9DQz0nIC1uMzInOyBicmVhaw0KZmkNCnJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0 ZXN0LiRhY19vYmpleHQNCgkgYnJlYWsNCiAgICAgICBkb25lDQogICAgICAgQ0M9JGFjX3NhdmVf Q0MNCiAgICAgICBybSAtZiBjb25mdGVzdC4kYWNfZXh0DQogICAgZmkNCmZpDQp7ICRhc19lY2hv ICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X3N5c19sYXJnZWZp bGVfQ0MiID4mNQ0KJGFzX2VjaG8gIiRhY19jdl9zeXNfbGFyZ2VmaWxlX0NDIiA+JjY7IH0NCiAg aWYgdGVzdCAiJGFjX2N2X3N5c19sYXJnZWZpbGVfQ0MiICE9IG5vOyB0aGVuDQogICAgQ0M9JEND JGFjX2N2X3N5c19sYXJnZWZpbGVfQ0MNCiAgZmkNCg0KICB7ICRhc19lY2hvICIkYXNfbWU6JHth c19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBfRklMRV9PRkZTRVRfQklUUyB2YWx1ZSBu ZWVkZWQgZm9yIGxhcmdlIGZpbGVzIiA+JjUNCiRhc19lY2hvX24gImNoZWNraW5nIGZvciBfRklM RV9PRkZTRVRfQklUUyB2YWx1ZSBuZWVkZWQgZm9yIGxhcmdlIGZpbGVzLi4uICIgPiY2OyB9DQpp ZiAke2FjX2N2X3N5c19maWxlX29mZnNldF9iaXRzKzp9IGZhbHNlOyB0aGVuIDoNCiAgJGFzX2Vj aG9fbiAiKGNhY2hlZCkgIiA+JjYNCmVsc2UNCiAgd2hpbGUgOjsgZG8NCiAgY2F0IGNvbmZkZWZz LmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dA0KLyogZW5kIGNvbmZkZWZzLmguICAqLw0K I2luY2x1ZGUgPHN5cy90eXBlcy5oPg0KIC8qIENoZWNrIHRoYXQgb2ZmX3QgY2FuIHJlcHJlc2Vu dCAyKio2MyAtIDEgY29ycmVjdGx5Lg0KICAgIFdlIGNhbid0IHNpbXBseSBkZWZpbmUgTEFSR0Vf T0ZGX1QgdG8gYmUgOTIyMzM3MjAzNjg1NDc3NTgwNywNCiAgICBzaW5jZSBzb21lIEMrKyBjb21w aWxlcnMgbWFzcXVlcmFkaW5nIGFzIEMgY29tcGlsZXJzDQogICAgaW5jb3JyZWN0bHkgcmVqZWN0 IDkyMjMzNzIwMzY4NTQ3NzU4MDcuICAqLw0KI2RlZmluZSBMQVJHRV9PRkZfVCAoKChvZmZfdCkg MSA8PCA2MikgLSAxICsgKChvZmZfdCkgMSA8PCA2MikpDQogIGludCBvZmZfdF9pc19sYXJnZVso TEFSR0VfT0ZGX1QgJSAyMTQ3NDgzNjI5ID09IDcyMQ0KCQkgICAgICAgJiYgTEFSR0VfT0ZGX1Qg JSAyMTQ3NDgzNjQ3ID09IDEpDQoJCSAgICAgID8gMSA6IC0xXTsNCmludA0KbWFpbiAoKQ0Kew0K DQogIDsNCiAgcmV0dXJuIDA7DQp9DQpfQUNFT0YNCmlmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRM SU5FTk8iOyB0aGVuIDoNCiAgYWNfY3Zfc3lzX2ZpbGVfb2Zmc2V0X2JpdHM9bm87IGJyZWFrDQpm aQ0Kcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4k YWNfZXh0DQogIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQNCi8q IGVuZCBjb25mZGVmcy5oLiAgKi8NCiNkZWZpbmUgX0ZJTEVfT0ZGU0VUX0JJVFMgNjQNCiNpbmNs dWRlIDxzeXMvdHlwZXMuaD4NCiAvKiBDaGVjayB0aGF0IG9mZl90IGNhbiByZXByZXNlbnQgMioq NjMgLSAxIGNvcnJlY3RseS4NCiAgICBXZSBjYW4ndCBzaW1wbHkgZGVmaW5lIExBUkdFX09GRl9U IHRvIGJlIDkyMjMzNzIwMzY4NTQ3NzU4MDcsDQogICAgc2luY2Ugc29tZSBDKysgY29tcGlsZXJz IG1hc3F1ZXJhZGluZyBhcyBDIGNvbXBpbGVycw0KICAgIGluY29ycmVjdGx5IHJlamVjdCA5MjIz MzcyMDM2ODU0Nzc1ODA3LiAgKi8NCiNkZWZpbmUgTEFSR0VfT0ZGX1QgKCgob2ZmX3QpIDEgPDwg NjIpIC0gMSArICgob2ZmX3QpIDEgPDwgNjIpKQ0KICBpbnQgb2ZmX3RfaXNfbGFyZ2VbKExBUkdF X09GRl9UICUgMjE0NzQ4MzYyOSA9PSA3MjENCgkJICAgICAgICYmIExBUkdFX09GRl9UICUgMjE0 NzQ4MzY0NyA9PSAxKQ0KCQkgICAgICA/IDEgOiAtMV07DQppbnQNCm1haW4gKCkNCnsNCg0KICA7 DQogIHJldHVybiAwOw0KfQ0KX0FDRU9GDQppZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5P IjsgdGhlbiA6DQogIGFjX2N2X3N5c19maWxlX29mZnNldF9iaXRzPTY0OyBicmVhaw0KZmkNCnJt IC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4 dA0KICBhY19jdl9zeXNfZmlsZV9vZmZzZXRfYml0cz11bmtub3duDQogIGJyZWFrDQpkb25lDQpm aQ0KeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19j dl9zeXNfZmlsZV9vZmZzZXRfYml0cyIgPiY1DQokYXNfZWNobyAiJGFjX2N2X3N5c19maWxlX29m ZnNldF9iaXRzIiA+JjY7IH0NCmNhc2UgJGFjX2N2X3N5c19maWxlX29mZnNldF9iaXRzIGluICMo DQogIG5vIHwgdW5rbm93bikgOzsNCiAgKikNCmNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YNCiNk ZWZpbmUgX0ZJTEVfT0ZGU0VUX0JJVFMgJGFjX2N2X3N5c19maWxlX29mZnNldF9iaXRzDQpfQUNF T0YNCjs7DQplc2FjDQpybSAtcmYgY29uZnRlc3QqDQogIGlmIHRlc3QgJGFjX2N2X3N5c19maWxl X29mZnNldF9iaXRzID0gdW5rbm93bjsgdGhlbg0KICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2Fz X2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIF9MQVJHRV9GSUxFUyB2YWx1ZSBuZWVkZWQg Zm9yIGxhcmdlIGZpbGVzIiA+JjUNCiRhc19lY2hvX24gImNoZWNraW5nIGZvciBfTEFSR0VfRklM RVMgdmFsdWUgbmVlZGVkIGZvciBsYXJnZSBmaWxlcy4uLiAiID4mNjsgfQ0KaWYgJHthY19jdl9z eXNfbGFyZ2VfZmlsZXMrOn0gZmFsc2U7IHRoZW4gOg0KICAkYXNfZWNob19uICIoY2FjaGVkKSAi ID4mNg0KZWxzZQ0KICB3aGlsZSA6OyBkbw0KICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5j b25mdGVzdC4kYWNfZXh0DQovKiBlbmQgY29uZmRlZnMuaC4gICovDQojaW5jbHVkZSA8c3lzL3R5 cGVzLmg+DQogLyogQ2hlY2sgdGhhdCBvZmZfdCBjYW4gcmVwcmVzZW50IDIqKjYzIC0gMSBjb3Jy ZWN0bHkuDQogICAgV2UgY2FuJ3Qgc2ltcGx5IGRlZmluZSBMQVJHRV9PRkZfVCB0byBiZSA5MjIz MzcyMDM2ODU0Nzc1ODA3LA0KICAgIHNpbmNlIHNvbWUgQysrIGNvbXBpbGVycyBtYXNxdWVyYWRp bmcgYXMgQyBjb21waWxlcnMNCiAgICBpbmNvcnJlY3RseSByZWplY3QgOTIyMzM3MjAzNjg1NDc3 NTgwNy4gICovDQojZGVmaW5lIExBUkdFX09GRl9UICgoKG9mZl90KSAxIDw8IDYyKSAtIDEgKyAo KG9mZl90KSAxIDw8IDYyKSkNCiAgaW50IG9mZl90X2lzX2xhcmdlWyhMQVJHRV9PRkZfVCAlIDIx NDc0ODM2MjkgPT0gNzIxDQoJCSAgICAgICAmJiBMQVJHRV9PRkZfVCAlIDIxNDc0ODM2NDcgPT0g MSkNCgkJICAgICAgPyAxIDogLTFdOw0KaW50DQptYWluICgpDQp7DQoNCiAgOw0KICByZXR1cm4g MDsNCn0NCl9BQ0VPRg0KaWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOg0K ICBhY19jdl9zeXNfbGFyZ2VfZmlsZXM9bm87IGJyZWFrDQpmaQ0Kcm0gLWYgY29yZSBjb25mdGVz dC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0DQogIGNhdCBjb25mZGVm cy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQNCi8qIGVuZCBjb25mZGVmcy5oLiAgKi8N CiNkZWZpbmUgX0xBUkdFX0ZJTEVTIDENCiNpbmNsdWRlIDxzeXMvdHlwZXMuaD4NCiAvKiBDaGVj ayB0aGF0IG9mZl90IGNhbiByZXByZXNlbnQgMioqNjMgLSAxIGNvcnJlY3RseS4NCiAgICBXZSBj YW4ndCBzaW1wbHkgZGVmaW5lIExBUkdFX09GRl9UIHRvIGJlIDkyMjMzNzIwMzY4NTQ3NzU4MDcs DQogICAgc2luY2Ugc29tZSBDKysgY29tcGlsZXJzIG1hc3F1ZXJhZGluZyBhcyBDIGNvbXBpbGVy cw0KICAgIGluY29ycmVjdGx5IHJlamVjdCA5MjIzMzcyMDM2ODU0Nzc1ODA3LiAgKi8NCiNkZWZp bmUgTEFSR0VfT0ZGX1QgKCgob2ZmX3QpIDEgPDwgNjIpIC0gMSArICgob2ZmX3QpIDEgPDwgNjIp KQ0KICBpbnQgb2ZmX3RfaXNfbGFyZ2VbKExBUkdFX09GRl9UICUgMjE0NzQ4MzYyOSA9PSA3MjEN CgkJICAgICAgICYmIExBUkdFX09GRl9UICUgMjE0NzQ4MzY0NyA9PSAxKQ0KCQkgICAgICA/IDEg OiAtMV07DQppbnQNCm1haW4gKCkNCnsNCg0KICA7DQogIHJldHVybiAwOw0KfQ0KX0FDRU9GDQpp ZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6DQogIGFjX2N2X3N5c19sYXJn ZV9maWxlcz0xOyBicmVhaw0KZmkNCnJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRh Y19vYmpleHQgY29uZnRlc3QuJGFjX2V4dA0KICBhY19jdl9zeXNfbGFyZ2VfZmlsZXM9dW5rbm93 bg0KICBicmVhaw0KZG9uZQ0KZmkNCnsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElO RU5PfTogcmVzdWx0OiAkYWNfY3Zfc3lzX2xhcmdlX2ZpbGVzIiA+JjUNCiRhc19lY2hvICIkYWNf Y3Zfc3lzX2xhcmdlX2ZpbGVzIiA+JjY7IH0NCmNhc2UgJGFjX2N2X3N5c19sYXJnZV9maWxlcyBp biAjKA0KICBubyB8IHVua25vd24pIDs7DQogICopDQpjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9G DQojZGVmaW5lIF9MQVJHRV9GSUxFUyAkYWNfY3Zfc3lzX2xhcmdlX2ZpbGVzDQpfQUNFT0YNCjs7 DQplc2FjDQpybSAtcmYgY29uZnRlc3QqDQogIGZpDQpmaQ0KDQoNCg0KDQogIEdOVUxJQl9NS1RJ TUU9MDsNCiAgR05VTElCX05BTk9TTEVFUD0wOw0KICBHTlVMSUJfU1RSUFRJTUU9MDsNCiAgR05V TElCX1RJTUVHTT0wOw0KICBHTlVMSUJfVElNRV9SPTA7DQogICAgSEFWRV9ERUNMX0xPQ0FMVElN RV9SPTE7DQogIEhBVkVfTkFOT1NMRUVQPTE7DQogIEhBVkVfU1RSUFRJTUU9MTsNCiAgSEFWRV9U SU1FR009MTsNCiAgICAgICAgUkVQTEFDRV9MT0NBTFRJTUVfUj1HTlVMSUJfUE9SVENIRUNLOw0K ICBSRVBMQUNFX01LVElNRT1HTlVMSUJfUE9SVENIRUNLOw0KICBSRVBMQUNFX05BTk9TTEVFUD1H TlVMSUJfUE9SVENIRUNLOw0KICBSRVBMQUNFX1RJTUVHTT1HTlVMSUJfUE9SVENIRUNLOw0KDQoN Cg0KDQoNCg0KICBHTlVMSUJfU0VMRUNUPTA7DQogICAgUkVQTEFDRV9TRUxFQ1Q9MDsNCg0KDQoN Cg0KDQoNCiAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2lu ZyB3aGV0aGVyIDxzeXMvc2VsZWN0Lmg+IGlzIHNlbGYtY29udGFpbmVkIiA+JjUNCiRhc19lY2hv X24gImNoZWNraW5nIHdoZXRoZXIgPHN5cy9zZWxlY3QuaD4gaXMgc2VsZi1jb250YWluZWQuLi4g IiA+JjY7IH0NCmlmICR7Z2xfY3ZfaGVhZGVyX3N5c19zZWxlY3RfaF9zZWxmY29udGFpbmVkKzp9 IGZhbHNlOyB0aGVuIDoNCiAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYNCmVsc2UNCg0KICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VP RiA+Y29uZnRlc3QuJGFjX2V4dA0KLyogZW5kIGNvbmZkZWZzLmguICAqLw0KI2luY2x1ZGUgPHN5 cy9zZWxlY3QuaD4NCmludA0KbWFpbiAoKQ0Kew0Kc3RydWN0IHRpbWV2YWwgYjsNCiAgOw0KICBy ZXR1cm4gMDsNCn0NCl9BQ0VPRg0KaWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRo ZW4gOg0KICBnbF9jdl9oZWFkZXJfc3lzX3NlbGVjdF9oX3NlbGZjb250YWluZWQ9eWVzDQplbHNl DQogIGdsX2N2X2hlYWRlcl9zeXNfc2VsZWN0X2hfc2VsZmNvbnRhaW5lZD1ubw0KZmkNCnJtIC1m IGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dA0K ICAgICAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAkZ2xfY3ZfaGVhZGVyX3N5c19zZWxlY3Rf aF9zZWxmY29udGFpbmVkID0geWVzOyB0aGVuDQogICAgICAgIGNhdCBjb25mZGVmcy5oIC0gPDxf QUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQNCi8qIGVuZCBjb25mZGVmcy5oLiAgKi8NCiNpbmNsdWRl IDxzeXMvc2VsZWN0Lmg+DQppbnQNCm1haW4gKCkNCnsNCmludCBtZW1zZXQ7IGludCBiemVybzsN CiAgOw0KICByZXR1cm4gMDsNCn0NCg0KX0FDRU9GDQppZiBhY19mbl9jX3RyeV9jb21waWxlICIk TElORU5PIjsgdGhlbiA6DQogIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRh Y19leHQNCi8qIGVuZCBjb25mZGVmcy5oLiAgKi8NCiNpbmNsdWRlIDxzeXMvc2VsZWN0Lmg+DQpp bnQNCm1haW4gKCkNCnsNCg0KICAgICAgICAgICAgICAgICAgI3VuZGVmIG1lbXNldA0KICAgICAg ICAgICAgICAgICAgI2RlZmluZSBtZW1zZXQgbm9uZXhpc3RlbnRfbWVtc2V0DQogICAgICAgICAg ICAgICAgICBleHRlcm4gdm9pZCAqbWVtc2V0ICh2b2lkICosIGludCwgdW5zaWduZWQgbG9uZyk7 DQogICAgICAgICAgICAgICAgICAjdW5kZWYgYnplcm8NCiAgICAgICAgICAgICAgICAgICNkZWZp bmUgYnplcm8gbm9uZXhpc3RlbnRfYnplcm8NCiAgICAgICAgICAgICAgICAgIGV4dGVybiB2b2lk IGJ6ZXJvICh2b2lkICosIHVuc2lnbmVkIGxvbmcpOw0KICAgICAgICAgICAgICAgICAgZmRfc2V0 IGZkczsNCiAgICAgICAgICAgICAgICAgIEZEX1pFUk8gKCZmZHMpOw0KDQogIDsNCiAgcmV0dXJu IDA7DQp9DQoNCl9BQ0VPRg0KaWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOg0K DQplbHNlDQogIGdsX2N2X2hlYWRlcl9zeXNfc2VsZWN0X2hfc2VsZmNvbnRhaW5lZD1ubw0KZmkN CnJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXA0KICAgIGNvbmZ0 ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0DQoNCmZpDQpybSAtZiBjb3JlIGNvbmZ0ZXN0 LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQNCiAgICAgIGZpDQoNCmZp DQp7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGdsX2N2 X2hlYWRlcl9zeXNfc2VsZWN0X2hfc2VsZmNvbnRhaW5lZCIgPiY1DQokYXNfZWNobyAiJGdsX2N2 X2hlYWRlcl9zeXNfc2VsZWN0X2hfc2VsZmNvbnRhaW5lZCIgPiY2OyB9DQoNCg0KDQoNCg0KDQoN Cg0KDQogICAgIGlmIHRlc3QgJGdsX2N2X2hhdmVfaW5jbHVkZV9uZXh0ID0geWVzOyB0aGVuDQog ICAgICAgZ2xfY3ZfbmV4dF9zeXNfc2VsZWN0X2g9Jzwnc3lzL3NlbGVjdC5oJz4nDQogICAgIGVs c2UNCiAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNr aW5nIGFic29sdXRlIG5hbWUgb2YgPHN5cy9zZWxlY3QuaD4iID4mNQ0KJGFzX2VjaG9fbiAiY2hl Y2tpbmcgYWJzb2x1dGUgbmFtZSBvZiA8c3lzL3NlbGVjdC5oPi4uLiAiID4mNjsgfQ0KaWYgJHtn bF9jdl9uZXh0X3N5c19zZWxlY3RfaCs6fSBmYWxzZTsgdGhlbiA6DQogICRhc19lY2hvX24gIihj YWNoZWQpICIgPiY2DQplbHNlDQoNCiAgICAgICAgICAgICBpZiB0ZXN0ICRhY19jdl9oZWFkZXJf c3lzX3NlbGVjdF9oID0geWVzOyB0aGVuDQoNCg0KICAgICAgICAgICAgICAgY2F0IGNvbmZkZWZz LmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dA0KLyogZW5kIGNvbmZkZWZzLmguICAqLw0K I2luY2x1ZGUgPHN5cy9zZWxlY3QuaD4NCg0KX0FDRU9GDQogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICIkaG9zdF9vcyIg aW4NCiAgICAgICAgICAgICAgICAgYWl4KikgZ2xfYWJzbmFtZV9jcHA9IiRhY19jcHAgLUMiIDs7 DQogICAgICAgICAgICAgICAgICopICAgIGdsX2Fic25hbWVfY3BwPSIkYWNfY3BwIiA7Ow0KICAg ICAgICAgICAgICAgZXNhYw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgZ2xfY3ZfbmV4dF9zeXNfc2VsZWN0X2g9JyInYChldmFsICIk Z2xfYWJzbmFtZV9jcHAgY29uZnRlc3QuJGFjX2V4dCIpIDI+JjUgfA0KICAgICAgICAgICAgICAg ICAgc2VkIC1uICdcIy9zeXMvc2VsZWN0Lmgjew0KICAgICAgICAgICAgICAgICAgICBzIy4qIlwo Liovc3lzL3NlbGVjdC5oXCkiLiojXDEjDQogICAgICAgICAgICAgICAgICAgIHMjXi9bXi9dIy8v JiMNCiAgICAgICAgICAgICAgICAgICAgcA0KICAgICAgICAgICAgICAgICAgICBxDQogICAgICAg ICAgICAgICAgICB9J2AnIicNCiAgICAgICAgICBlbHNlDQogICAgICAgICAgICAgICBnbF9jdl9u ZXh0X3N5c19zZWxlY3RfaD0nPCdzeXMvc2VsZWN0LmgnPicNCiAgICAgICAgICAgICBmaQ0KDQoN CmZpDQp7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGds X2N2X25leHRfc3lzX3NlbGVjdF9oIiA+JjUNCiRhc19lY2hvICIkZ2xfY3ZfbmV4dF9zeXNfc2Vs ZWN0X2giID4mNjsgfQ0KICAgICBmaQ0KICAgICBORVhUX1NZU19TRUxFQ1RfSD0kZ2xfY3ZfbmV4 dF9zeXNfc2VsZWN0X2gNCg0KICAgICBpZiB0ZXN0ICRnbF9jdl9oYXZlX2luY2x1ZGVfbmV4dCA9 IHllcyB8fCB0ZXN0ICRnbF9jdl9oYXZlX2luY2x1ZGVfbmV4dCA9IGJ1Z2d5OyB0aGVuDQogICAg ICAgIyBJTkNMVURFX05FWFRfQVNfRklSU1RfRElSRUNUSVZFPSdpbmNsdWRlX25leHQnDQogICAg ICAgZ2xfbmV4dF9hc19maXJzdF9kaXJlY3RpdmU9Jzwnc3lzL3NlbGVjdC5oJz4nDQogICAgIGVs c2UNCiAgICAgICAjIElOQ0xVREVfTkVYVF9BU19GSVJTVF9ESVJFQ1RJVkU9J2luY2x1ZGUnDQog ICAgICAgZ2xfbmV4dF9hc19maXJzdF9kaXJlY3RpdmU9JGdsX2N2X25leHRfc3lzX3NlbGVjdF9o DQogICAgIGZpDQogICAgIE5FWFRfQVNfRklSU1RfRElSRUNUSVZFX1NZU19TRUxFQ1RfSD0kZ2xf bmV4dF9hc19maXJzdF9kaXJlY3RpdmUNCg0KDQoNCg0KICBpZiB0ZXN0ICRhY19jdl9oZWFkZXJf c3lzX3NlbGVjdF9oID0geWVzOyB0aGVuDQogICAgSEFWRV9TWVNfU0VMRUNUX0g9MQ0KICBlbHNl DQogICAgSEFWRV9TWVNfU0VMRUNUX0g9MA0KICBmaQ0KDQoNCg0KDQoNCiAgaWYgdGVzdCAkYWNf Y3ZfaGVhZGVyX3N5c19zb2NrZXRfaCAhPSB5ZXM7IHRoZW4NCiAgICAgICAgICAgICAgICAgICAg Zm9yIGFjX2hlYWRlciBpbiB3aW5zb2NrMi5oDQpkbyA6DQogIGFjX2ZuX2NfY2hlY2tfaGVhZGVy X21vbmdyZWwgIiRMSU5FTk8iICJ3aW5zb2NrMi5oIiAiYWNfY3ZfaGVhZGVyX3dpbnNvY2syX2gi ICIkYWNfaW5jbHVkZXNfZGVmYXVsdCINCmlmIHRlc3QgIngkYWNfY3ZfaGVhZGVyX3dpbnNvY2sy X2giID0geHllczsgdGhlbiA6DQogIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YNCiNkZWZpbmUg SEFWRV9XSU5TT0NLMl9IIDENCl9BQ0VPRg0KDQpmaQ0KDQpkb25lDQoNCiAgZmkNCiAgaWYgdGVz dCAiJGFjX2N2X2hlYWRlcl93aW5zb2NrMl9oIiA9IHllczsgdGhlbg0KICAgIEhBVkVfV0lOU09D SzJfSD0xDQogICAgVU5JU1REX0hfSEFWRV9XSU5TT0NLMl9IPTENCiAgICBTWVNfSU9DVExfSF9I QVZFX1dJTlNPQ0syX0g9MQ0KICBlbHNlDQogICAgSEFWRV9XSU5TT0NLMl9IPTANCiAgZmkNCg0K DQoNCg0KICAgIGZvciBnbF9mdW5jIGluIHNlbGVjdDsgZG8NCiAgICBhc19nbF9TeW1ib2w9YCRh c19lY2hvICJnbF9jdl9oYXZlX3Jhd19kZWNsXyRnbF9mdW5jIiB8ICRhc190cl9zaGANCiAgICB7 ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIg JGdsX2Z1bmMgaXMgZGVjbGFyZWQgd2l0aG91dCBhIG1hY3JvIiA+JjUNCiRhc19lY2hvX24gImNo ZWNraW5nIHdoZXRoZXIgJGdsX2Z1bmMgaXMgZGVjbGFyZWQgd2l0aG91dCBhIG1hY3JvLi4uICIg PiY2OyB9DQppZiBldmFsIFwkeyRhc19nbF9TeW1ib2wrOn0gZmFsc2U7IHRoZW4gOg0KICAkYXNf ZWNob19uICIoY2FjaGVkKSAiID4mNg0KZWxzZQ0KICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9G ID5jb25mdGVzdC4kYWNfZXh0DQovKiBlbmQgY29uZmRlZnMuaC4gICovDQoNCi8qIFNvbWUgc3lz dGVtcyByZXF1aXJlIHByZXJlcXVpc2l0ZSBoZWFkZXJzLiAgKi8NCiNpbmNsdWRlIDxzeXMvdHlw ZXMuaD4NCiNpZiAhKGRlZmluZWQgX19HTElCQ19fICYmICFkZWZpbmVkIF9fVUNMSUJDX18pICYm IEhBVkVfU1lTX1RJTUVfSA0KIyBpbmNsdWRlIDxzeXMvdGltZS5oPg0KI2VuZGlmDQojaW5jbHVk ZSA8c3lzL3NlbGVjdC5oPg0KDQppbnQNCm1haW4gKCkNCnsNCiN1bmRlZiAkZ2xfZnVuYw0KICAo dm9pZCkgJGdsX2Z1bmM7DQogIDsNCiAgcmV0dXJuIDA7DQp9DQpfQUNFT0YNCmlmIGFjX2ZuX2Nf dHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoNCiAgZXZhbCAiJGFzX2dsX1N5bWJvbD15ZXMi DQplbHNlDQogIGV2YWwgIiRhc19nbF9TeW1ib2w9bm8iDQpmaQ0Kcm0gLWYgY29yZSBjb25mdGVz dC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0DQpmaQ0KZXZhbCBhY19y ZXM9XCQkYXNfZ2xfU3ltYm9sDQoJICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVu by0kTElORU5PfTogcmVzdWx0OiAkYWNfcmVzIiA+JjUNCiRhc19lY2hvICIkYWNfcmVzIiA+JjY7 IH0NCiAgICAgaWYgZXZhbCB0ZXN0IFwieFwkIiRhc19nbF9TeW1ib2wiXCIgPSB4InllcyI7IHRo ZW4gOg0KICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GDQojZGVmaW5lIGAkYXNfZWNobyAiSEFW RV9SQVdfREVDTF8kZ2xfZnVuYyIgfCAkYXNfdHJfY3BwYCAxDQpfQUNFT0YNCg0KICAgICAgICAg ICAgICAgICAgICAgZXZhbCBhY19jdl9oYXZlX2RlY2xfJGdsX2Z1bmM9eWVzDQpmaQ0KICAgICAg ZG9uZQ0KDQoNCg0KDQoNCg0KDQogIGlmIHRlc3QgJGFjX2N2X2hlYWRlcl9zeXNfc29ja2V0X2gg IT0geWVzOyB0aGVuDQogICAgICAgICAgICAgICAgICAgIGZvciBhY19oZWFkZXIgaW4gd2luc29j azIuaA0KZG8gOg0KICBhY19mbl9jX2NoZWNrX2hlYWRlcl9tb25ncmVsICIkTElORU5PIiAid2lu c29jazIuaCIgImFjX2N2X2hlYWRlcl93aW5zb2NrMl9oIiAiJGFjX2luY2x1ZGVzX2RlZmF1bHQi DQppZiB0ZXN0ICJ4JGFjX2N2X2hlYWRlcl93aW5zb2NrMl9oIiA9IHh5ZXM7IHRoZW4gOg0KICBj YXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GDQojZGVmaW5lIEhBVkVfV0lOU09DSzJfSCAxDQpfQUNF T0YNCg0KZmkNCg0KZG9uZQ0KDQogIGZpDQogIGlmIHRlc3QgIiRhY19jdl9oZWFkZXJfd2luc29j azJfaCIgPSB5ZXM7IHRoZW4NCiAgICBIQVZFX1dJTlNPQ0syX0g9MQ0KICAgIFVOSVNURF9IX0hB VkVfV0lOU09DSzJfSD0xDQogICAgU1lTX0lPQ1RMX0hfSEFWRV9XSU5TT0NLMl9IPTENCiAgZWxz ZQ0KICAgIEhBVkVfV0lOU09DSzJfSD0wDQogIGZpDQoNCiAgIExJQlNPQ0tFVD0NCiAgaWYgdGVz dCAkSEFWRV9XSU5TT0NLMl9IID0gMTsgdGhlbg0KICAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6 JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGlmIHdlIG5lZWQgdG8gY2FsbCBXU0FTdGFy dHVwIGluIHdpbnNvY2syLmggYW5kIC1sd3MyXzMyIiA+JjUNCiRhc19lY2hvX24gImNoZWNraW5n IGlmIHdlIG5lZWQgdG8gY2FsbCBXU0FTdGFydHVwIGluIHdpbnNvY2syLmggYW5kIC1sd3MyXzMy Li4uICIgPiY2OyB9DQppZiAke2dsX2N2X2Z1bmNfd3Nhc3RhcnR1cCs6fSBmYWxzZTsgdGhlbiA6 DQogICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2DQplbHNlDQoNCiAgICAgIGdsX3NhdmVfTElC Uz0iJExJQlMiDQogICAgICBMSUJTPSIkTElCUyAtbHdzMl8zMiINCiAgICAgIGNhdCBjb25mZGVm cy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQNCi8qIGVuZCBjb25mZGVmcy5oLiAgKi8N Cg0KI2lmZGVmIEhBVkVfV0lOU09DSzJfSA0KIyBpbmNsdWRlIDx3aW5zb2NrMi5oPg0KI2VuZGlm DQppbnQNCm1haW4gKCkNCnsNCg0KICAgICAgICAgIFdPUkQgd1ZlcnNpb25SZXF1ZXN0ZWQgPSBN QUtFV09SRCgxLCAxKTsNCiAgICAgICAgICBXU0FEQVRBIHdzYURhdGE7DQogICAgICAgICAgaW50 IGVyciA9IFdTQVN0YXJ0dXAod1ZlcnNpb25SZXF1ZXN0ZWQsICZ3c2FEYXRhKTsNCiAgICAgICAg ICBXU0FDbGVhbnVwICgpOw0KICA7DQogIHJldHVybiAwOw0KfQ0KX0FDRU9GDQppZiBhY19mbl9j X3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6DQogIGdsX2N2X2Z1bmNfd3Nhc3RhcnR1cD15ZXMN CmVsc2UNCiAgZ2xfY3ZfZnVuY193c2FzdGFydHVwPW5vDQpmaQ0Kcm0gLWYgY29yZSBjb25mdGVz dC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcDQogICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0 ZXN0LiRhY19leHQNCiAgICAgIExJQlM9IiRnbF9zYXZlX0xJQlMiDQoNCmZpDQp7ICRhc19lY2hv ICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGdsX2N2X2Z1bmNfd3Nhc3Rh cnR1cCIgPiY1DQokYXNfZWNobyAiJGdsX2N2X2Z1bmNfd3Nhc3RhcnR1cCIgPiY2OyB9DQogICAg aWYgdGVzdCAiJGdsX2N2X2Z1bmNfd3Nhc3RhcnR1cCIgPSAieWVzIjsgdGhlbg0KDQokYXNfZWNo byAiI2RlZmluZSBXSU5ET1dTX1NPQ0tFVFMgMSIgPj5jb25mZGVmcy5oDQoNCiAgICAgIExJQlNP Q0tFVD0nLWx3czJfMzInDQogICAgZmkNCiAgZWxzZQ0KICAgICAgICAgICAgICAgICAgICB7ICRh c19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBsaWJyYXJ5 IGNvbnRhaW5pbmcgc2V0c29ja29wdCIgPiY1DQokYXNfZWNob19uICJjaGVja2luZyBmb3IgbGli cmFyeSBjb250YWluaW5nIHNldHNvY2tvcHQuLi4gIiA+JjY7IH0NCmlmICR7Z2xfY3ZfbGliX3Nv Y2tldCs6fSBmYWxzZTsgdGhlbiA6DQogICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2DQplbHNl DQoNCiAgICAgIGdsX2N2X2xpYl9zb2NrZXQ9DQogICAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FD RU9GID5jb25mdGVzdC4kYWNfZXh0DQovKiBlbmQgY29uZmRlZnMuaC4gICovDQpleHRlcm4NCiNp ZmRlZiBfX2NwbHVzcGx1cw0KIkMiDQojZW5kaWYNCmNoYXIgc2V0c29ja29wdCgpOw0KaW50DQpt YWluICgpDQp7DQpzZXRzb2Nrb3B0KCk7DQogIDsNCiAgcmV0dXJuIDA7DQp9DQpfQUNFT0YNCmlm IGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoNCg0KZWxzZQ0KICBnbF9zYXZlX0xJ QlM9IiRMSUJTIg0KICAgICAgICAgTElCUz0iJGdsX3NhdmVfTElCUyAtbHNvY2tldCINCiAgICAg ICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQNCi8qIGVuZCBj b25mZGVmcy5oLiAgKi8NCmV4dGVybg0KI2lmZGVmIF9fY3BsdXNwbHVzDQoiQyINCiNlbmRpZg0K Y2hhciBzZXRzb2Nrb3B0KCk7DQppbnQNCm1haW4gKCkNCnsNCnNldHNvY2tvcHQoKTsNCiAgOw0K ICByZXR1cm4gMDsNCn0NCl9BQ0VPRg0KaWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRo ZW4gOg0KICBnbF9jdl9saWJfc29ja2V0PSItbHNvY2tldCINCmZpDQpybSAtZiBjb3JlIGNvbmZ0 ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwNCiAgICBjb25mdGVzdCRhY19leGVleHQgY29u ZnRlc3QuJGFjX2V4dA0KICAgICAgICAgaWYgdGVzdCAteiAiJGdsX2N2X2xpYl9zb2NrZXQiOyB0 aGVuDQogICAgICAgICAgIExJQlM9IiRnbF9zYXZlX0xJQlMgLWxuZXR3b3JrIg0KICAgICAgICAg ICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0DQovKiBlbmQgY29u ZmRlZnMuaC4gICovDQpleHRlcm4NCiNpZmRlZiBfX2NwbHVzcGx1cw0KIkMiDQojZW5kaWYNCmNo YXIgc2V0c29ja29wdCgpOw0KaW50DQptYWluICgpDQp7DQpzZXRzb2Nrb3B0KCk7DQogIDsNCiAg cmV0dXJuIDA7DQp9DQpfQUNFT0YNCmlmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVu IDoNCiAgZ2xfY3ZfbGliX3NvY2tldD0iLWxuZXR3b3JrIg0KZmkNCnJtIC1mIGNvcmUgY29uZnRl c3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXA0KICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25m dGVzdC4kYWNfZXh0DQogICAgICAgICAgIGlmIHRlc3QgLXogIiRnbF9jdl9saWJfc29ja2V0Ijsg dGhlbg0KICAgICAgICAgICAgIExJQlM9IiRnbF9zYXZlX0xJQlMgLWxuZXQiDQogICAgICAgICAg ICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dA0KLyogZW5kIGNv bmZkZWZzLmguICAqLw0KZXh0ZXJuDQojaWZkZWYgX19jcGx1c3BsdXMNCiJDIg0KI2VuZGlmDQpj aGFyIHNldHNvY2tvcHQoKTsNCmludA0KbWFpbiAoKQ0Kew0Kc2V0c29ja29wdCgpOw0KICA7DQog IHJldHVybiAwOw0KfQ0KX0FDRU9GDQppZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhl biA6DQogIGdsX2N2X2xpYl9zb2NrZXQ9Ii1sbmV0Ig0KZmkNCnJtIC1mIGNvcmUgY29uZnRlc3Qu ZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXA0KICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVz dC4kYWNfZXh0DQogICAgICAgICAgIGZpDQogICAgICAgICBmaQ0KICAgICAgICAgTElCUz0iJGds X3NhdmVfTElCUyINCg0KZmkNCnJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19v YmpleHQgXA0KICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0DQogICAgICBp ZiB0ZXN0IC16ICIkZ2xfY3ZfbGliX3NvY2tldCI7IHRoZW4NCiAgICAgICAgZ2xfY3ZfbGliX3Nv Y2tldD0ibm9uZSBuZWVkZWQiDQogICAgICBmaQ0KDQpmaQ0KeyAkYXNfZWNobyAiJGFzX21lOiR7 YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRnbF9jdl9saWJfc29ja2V0IiA+JjUNCiRhc19l Y2hvICIkZ2xfY3ZfbGliX3NvY2tldCIgPiY2OyB9DQogICAgaWYgdGVzdCAiJGdsX2N2X2xpYl9z b2NrZXQiICE9ICJub25lIG5lZWRlZCI7IHRoZW4NCiAgICAgIExJQlNPQ0tFVD0iJGdsX2N2X2xp Yl9zb2NrZXQiDQogICAgZmkNCiAgZmkNCg0KDQoNCg0KDQoNCiAgOg0KDQoNCg0KDQoNCiAgaWYg dGVzdCAiJGFjX2N2X2hlYWRlcl93aW5zb2NrMl9oIiA9IHllczsgdGhlbg0KDQoNCg0KDQoNCg0K DQoNCiAgZ2xfTElCT0JKUz0iJGdsX0xJQk9CSlMgc2VsZWN0LiRhY19vYmpleHQiDQoNCiAgZWxz ZQ0KDQogICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2lu ZyB3aGV0aGVyIHNlbGVjdCBzdXBwb3J0cyBhIDAgYXJndW1lbnQiID4mNQ0KJGFzX2VjaG9fbiAi Y2hlY2tpbmcgd2hldGhlciBzZWxlY3Qgc3VwcG9ydHMgYSAwIGFyZ3VtZW50Li4uICIgPiY2OyB9 DQppZiAke2dsX2N2X2Z1bmNfc2VsZWN0X3N1cHBvcnRzMCs6fSBmYWxzZTsgdGhlbiA6DQogICRh c19lY2hvX24gIihjYWNoZWQpICIgPiY2DQplbHNlDQoNCiAgICAgICAgaWYgdGVzdCAiJGNyb3Nz X2NvbXBpbGluZyIgPSB5ZXM7IHRoZW4gOg0KDQogICAgICAgICAgIGNhc2UgIiRob3N0X29zIiBp bg0KICAgICAgICAgICAgICAgICAgICAgICAjIEd1ZXNzIG5vIG9uIEludGVyaXguDQogICAgICAg ICAgICAgaW50ZXJpeCopIGdsX2N2X2Z1bmNfc2VsZWN0X3N1cHBvcnRzMD0iZ3Vlc3Npbmcgbm8i OzsNCiAgICAgICAgICAgICAgICAgICAgICAgIyBHdWVzcyB5ZXMgb3RoZXJ3aXNlLg0KICAgICAg ICAgICAgICopICAgICAgICBnbF9jdl9mdW5jX3NlbGVjdF9zdXBwb3J0czA9Imd1ZXNzaW5nIHll cyI7Ow0KICAgICAgICAgICBlc2FjDQoNCmVsc2UNCiAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VP RiA+Y29uZnRlc3QuJGFjX2V4dA0KLyogZW5kIGNvbmZkZWZzLmguICAqLw0KDQojaW5jbHVkZSA8 c3lzL3R5cGVzLmg+DQojaW5jbHVkZSA8c3lzL3RpbWUuaD4NCiNpZiBIQVZFX1NZU19TRUxFQ1Rf SA0KI2luY2x1ZGUgPHN5cy9zZWxlY3QuaD4NCiNlbmRpZg0KaW50IG1haW4gKCkNCnsNCiAgc3Ry dWN0IHRpbWV2YWwgdGltZW91dDsNCiAgdGltZW91dC50dl9zZWMgPSAwOw0KICB0aW1lb3V0LnR2 X3VzZWMgPSA1Ow0KICByZXR1cm4gc2VsZWN0ICgwLCAoZmRfc2V0ICopMCwgKGZkX3NldCAqKTAs IChmZF9zZXQgKikwLCAmdGltZW91dCkgPCAwOw0KfQ0KX0FDRU9GDQppZiBhY19mbl9jX3RyeV9y dW4gIiRMSU5FTk8iOyB0aGVuIDoNCiAgZ2xfY3ZfZnVuY19zZWxlY3Rfc3VwcG9ydHMwPXllcw0K ZWxzZQ0KICBnbF9jdl9mdW5jX3NlbGVjdF9zdXBwb3J0czA9bm8NCmZpDQpybSAtZiBjb3JlICou Y29yZSBjb3JlLmNvbmZ0ZXN0LiogZ21vbi5vdXQgYmIub3V0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCBc DQogIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuYmVhbSBjb25mdGVzdC4kYWNfZXh0DQpm aQ0KDQoNCmZpDQp7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3Vs dDogJGdsX2N2X2Z1bmNfc2VsZWN0X3N1cHBvcnRzMCIgPiY1DQokYXNfZWNobyAiJGdsX2N2X2Z1 bmNfc2VsZWN0X3N1cHBvcnRzMCIgPiY2OyB9DQogICAgY2FzZSAiJGdsX2N2X2Z1bmNfc2VsZWN0 X3N1cHBvcnRzMCIgaW4NCiAgICAgICp5ZXMpIDs7DQogICAgICAqKQ0KICAgICAgICBSRVBMQUNF X1NFTEVDVD0xDQoNCg0KDQoNCg0KDQoNCg0KICBnbF9MSUJPQkpTPSIkZ2xfTElCT0JKUyBzZWxl Y3QuJGFjX29iamV4dCINCg0KICAgICAgICA7Ow0KICAgIGVzYWMNCiAgZmkNCg0KDQoNCg0KICAj IHBhcnNlLWRhdGV0aW1lLnkgd29ya3Mgd2l0aCBiaXNvbiBvbmx5Lg0KICA6ICR7WUFDQz0nYmlz b24gLXknfQ0KDQoNCiAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBj aGVja2luZyBmb3IgY29tcG91bmQgbGl0ZXJhbHMiID4mNQ0KJGFzX2VjaG9fbiAiY2hlY2tpbmcg Zm9yIGNvbXBvdW5kIGxpdGVyYWxzLi4uICIgPiY2OyB9DQppZiAke2dsX2N2X2NvbXBvdW5kX2xp dGVyYWxzKzp9IGZhbHNlOyB0aGVuIDoNCiAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYNCmVs c2UNCiAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dA0KLyogZW5k IGNvbmZkZWZzLmguICAqLw0Kc3RydWN0IHMgeyBpbnQgaSwgajsgfTsNCmludA0KbWFpbiAoKQ0K ew0Kc3RydWN0IHMgdCA9IChzdHJ1Y3QgcykgeyAzLCA0IH07DQogICAgICAgIGlmICh0LmkgIT0g MCkgcmV0dXJuIDA7DQogIDsNCiAgcmV0dXJuIDA7DQp9DQpfQUNFT0YNCmlmIGFjX2ZuX2NfdHJ5 X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoNCiAgZ2xfY3ZfY29tcG91bmRfbGl0ZXJhbHM9eWVz DQplbHNlDQogIGdsX2N2X2NvbXBvdW5kX2xpdGVyYWxzPW5vDQpmaQ0Kcm0gLWYgY29yZSBjb25m dGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0DQpmaQ0KeyAkYXNf ZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRnbF9jdl9jb21wb3Vu ZF9saXRlcmFscyIgPiY1DQokYXNfZWNobyAiJGdsX2N2X2NvbXBvdW5kX2xpdGVyYWxzIiA+JjY7 IH0NCiAgaWYgdGVzdCAkZ2xfY3ZfY29tcG91bmRfbGl0ZXJhbHMgPSB5ZXM7IHRoZW4NCg0KJGFz X2VjaG8gIiNkZWZpbmUgSEFWRV9DT01QT1VORF9MSVRFUkFMUyAxIiA+PmNvbmZkZWZzLmgNCg0K ICBmaQ0KDQp7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5n IHdoZXRoZXIgc3RydWN0IHRtIGlzIGluIHN5cy90aW1lLmggb3IgdGltZS5oIiA+JjUNCiRhc19l Y2hvX24gImNoZWNraW5nIHdoZXRoZXIgc3RydWN0IHRtIGlzIGluIHN5cy90aW1lLmggb3IgdGlt ZS5oLi4uICIgPiY2OyB9DQppZiAke2FjX2N2X3N0cnVjdF90bSs6fSBmYWxzZTsgdGhlbiA6DQog ICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2DQplbHNlDQogIGNhdCBjb25mZGVmcy5oIC0gPDxf QUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQNCi8qIGVuZCBjb25mZGVmcy5oLiAgKi8NCiNpbmNsdWRl IDxzeXMvdHlwZXMuaD4NCiNpbmNsdWRlIDx0aW1lLmg+DQoNCmludA0KbWFpbiAoKQ0Kew0Kc3Ry dWN0IHRtIHRtOw0KCQkJCSAgICAgaW50ICpwID0gJnRtLnRtX3NlYzsNCgkJCQkgICAgIHJldHVy biAhcDsNCiAgOw0KICByZXR1cm4gMDsNCn0NCl9BQ0VPRg0KaWYgYWNfZm5fY190cnlfY29tcGls ZSAiJExJTkVOTyI7IHRoZW4gOg0KICBhY19jdl9zdHJ1Y3RfdG09dGltZS5oDQplbHNlDQogIGFj X2N2X3N0cnVjdF90bT1zeXMvdGltZS5oDQpmaQ0Kcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29u ZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0DQpmaQ0KeyAkYXNfZWNobyAiJGFzX21l OiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9zdHJ1Y3RfdG0iID4mNQ0KJGFz X2VjaG8gIiRhY19jdl9zdHJ1Y3RfdG0iID4mNjsgfQ0KaWYgdGVzdCAkYWNfY3Zfc3RydWN0X3Rt ID0gc3lzL3RpbWUuaDsgdGhlbg0KDQokYXNfZWNobyAiI2RlZmluZSBUTV9JTl9TWVNfVElNRSAx IiA+PmNvbmZkZWZzLmgNCg0KZmkNCg0KDQogYWNfZm5fY19jaGVja19tZW1iZXIgIiRMSU5FTk8i ICJzdHJ1Y3QgdG0iICJ0bV9nbXRvZmYiICJhY19jdl9tZW1iZXJfc3RydWN0X3RtX3RtX2dtdG9m ZiIgIiNpbmNsdWRlIDx0aW1lLmg+DQoiDQppZiB0ZXN0ICJ4JGFjX2N2X21lbWJlcl9zdHJ1Y3Rf dG1fdG1fZ210b2ZmIiA9IHh5ZXM7IHRoZW4gOg0KDQokYXNfZWNobyAiI2RlZmluZSBIQVZFX1RN X0dNVE9GRiAxIiA+PmNvbmZkZWZzLmgNCg0KZmkNCg0KDQp7ICRhc19lY2hvICIkYXNfbWU6JHth c19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBleHRlcm5hbCBzeW1ib2wgX3N5c3RlbV9j b25maWd1cmF0aW9uIiA+JjUNCiRhc19lY2hvX24gImNoZWNraW5nIGZvciBleHRlcm5hbCBzeW1i b2wgX3N5c3RlbV9jb25maWd1cmF0aW9uLi4uICIgPiY2OyB9DQppZiAke2dsX2N2X3Zhcl9fc3lz dGVtX2NvbmZpZ3VyYXRpb24rOn0gZmFsc2U7IHRoZW4gOg0KICAkYXNfZWNob19uICIoY2FjaGVk KSAiID4mNg0KZWxzZQ0KICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNf ZXh0DQovKiBlbmQgY29uZmRlZnMuaC4gICovDQojaW5jbHVkZSA8c3lzL3N5c3RlbWNmZy5oPg0K DQppbnQNCm1haW4gKCkNCnsNCmRvdWJsZSB4ID0gX3N5c3RlbV9jb25maWd1cmF0aW9uLnBoeXNt ZW07DQogICAgICAgICAgICAgICAgICAgICAgICBpZiAoeCA+IDAuMCkgcmV0dXJuIDA7DQogIDsN CiAgcmV0dXJuIDA7DQp9DQpfQUNFT0YNCmlmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0 aGVuIDoNCiAgZ2xfY3ZfdmFyX19zeXN0ZW1fY29uZmlndXJhdGlvbj15ZXMNCmVsc2UNCiAgZ2xf Y3ZfdmFyX19zeXN0ZW1fY29uZmlndXJhdGlvbj1ubw0KZmkNCnJtIC1mIGNvcmUgY29uZnRlc3Qu ZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXA0KICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVz dC4kYWNfZXh0DQpmaQ0KeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBy ZXN1bHQ6ICRnbF9jdl92YXJfX3N5c3RlbV9jb25maWd1cmF0aW9uIiA+JjUNCiRhc19lY2hvICIk Z2xfY3ZfdmFyX19zeXN0ZW1fY29uZmlndXJhdGlvbiIgPiY2OyB9DQoNCiAgICBpZiB0ZXN0ICRn bF9jdl92YXJfX3N5c3RlbV9jb25maWd1cmF0aW9uID0geWVzOyB0aGVuDQoNCiRhc19lY2hvICIj ZGVmaW5lIEhBVkVfX1NZU1RFTV9DT05GSUdVUkFUSU9OIDEiID4+Y29uZmRlZnMuaA0KDQogICAg ZmkNCg0KDQoNCiAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVj a2luZyBmb3IgZGVzaXJlZCBkZWZhdWx0IGxldmVsIG9mIFBPU0lYIGNvbmZvcm1hbmNlIiA+JjUN CiRhc19lY2hvX24gImNoZWNraW5nIGZvciBkZXNpcmVkIGRlZmF1bHQgbGV2ZWwgb2YgUE9TSVgg Y29uZm9ybWFuY2UuLi4gIiA+JjY7IH0NCiAgZ2xfZGVmYXVsdF9wb3NpeDJfdmVyc2lvbj1ub25l LXNwZWNpZmllZA0KICBpZiB0ZXN0IC1uICIkYWNfY3ZfZW52X0RFRkFVTFRfUE9TSVgyX1ZFUlNJ T05fc2V0IjsgdGhlbg0KICAgIGdsX2RlZmF1bHRfcG9zaXgyX3ZlcnNpb249JGFjX2N2X2Vudl9E RUZBVUxUX1BPU0lYMl9WRVJTSU9OX3ZhbHVlDQoNCmNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YN CiNkZWZpbmUgREVGQVVMVF9QT1NJWDJfVkVSU0lPTiAkZ2xfZGVmYXVsdF9wb3NpeDJfdmVyc2lv bg0KX0FDRU9GDQoNCiAgZmkNCiAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5F Tk99OiByZXN1bHQ6ICRnbF9kZWZhdWx0X3Bvc2l4Ml92ZXJzaW9uIiA+JjUNCiRhc19lY2hvICIk Z2xfZGVmYXVsdF9wb3NpeDJfdmVyc2lvbiIgPiY2OyB9DQoNCg0KDQoNCg0KICAgIEhBVkVfUFRI UkVBRF9IPTE7DQogIEhBVkVfUFRIUkVBRF9UPTE7DQogIEhBVkVfUFRIUkVBRF9TUElOTE9DS19U PTE7DQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQogICAgeyAkYXNfZWNobyAiJGFzX21l OiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIHJtZGlyIHdvcmtzIiA+JjUN CiRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgcm1kaXIgd29ya3MuLi4gIiA+JjY7IH0NCmlm ICR7Z2xfY3ZfZnVuY19ybWRpcl93b3Jrcys6fSBmYWxzZTsgdGhlbiA6DQogICRhc19lY2hvX24g IihjYWNoZWQpICIgPiY2DQplbHNlDQogIG1rZGlyIGNvbmZ0ZXN0LmRpcg0KICAgICB0b3VjaCBj b25mdGVzdC5maWxlDQogICAgIGlmIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0geWVzOyB0aGVu IDoNCiAgZ2xfY3ZfZnVuY19ybWRpcl93b3Jrcz0iZ3Vlc3Npbmcgbm8iDQplbHNlDQogIGNhdCBj b25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQNCi8qIGVuZCBjb25mZGVmcy5o LiAgKi8NCiNpbmNsdWRlIDxzdGRpby5oPg0KICAgICAgICAgICAjaW5jbHVkZSA8ZXJybm8uaD4N CiAgICAgICAgICAgI2luY2x1ZGUgPHVuaXN0ZC5oPg0KDQppbnQNCm1haW4gKCkNCnsNCmludCBy ZXN1bHQgPSAwOw0KICAgICAgaWYgKCFybWRpciAoImNvbmZ0ZXN0LmZpbGUvIikpDQogICAgICAg IHJlc3VsdCB8PSAxOw0KICAgICAgZWxzZSBpZiAoZXJybm8gIT0gRU5PVERJUikNCiAgICAgICAg cmVzdWx0IHw9IDI7DQogICAgICBpZiAoIXJtZGlyICgiY29uZnRlc3QuZGlyLy4vIikpDQogICAg ICAgIHJlc3VsdCB8PSA0Ow0KICAgICAgcmV0dXJuIHJlc3VsdDsNCg0KICA7DQogIHJldHVybiAw Ow0KfQ0KX0FDRU9GDQppZiBhY19mbl9jX3RyeV9ydW4gIiRMSU5FTk8iOyB0aGVuIDoNCiAgZ2xf Y3ZfZnVuY19ybWRpcl93b3Jrcz15ZXMNCmVsc2UNCiAgZ2xfY3ZfZnVuY19ybWRpcl93b3Jrcz1u bw0KZmkNCnJtIC1mIGNvcmUgKi5jb3JlIGNvcmUuY29uZnRlc3QuKiBnbW9uLm91dCBiYi5vdXQg Y29uZnRlc3QkYWNfZXhlZXh0IFwNCiAgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC5iZWFt IGNvbmZ0ZXN0LiRhY19leHQNCmZpDQoNCiAgICAgcm0gLXJmIGNvbmZ0ZXN0LmRpciBjb25mdGVz dC5maWxlDQpmaQ0KeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1 bHQ6ICRnbF9jdl9mdW5jX3JtZGlyX3dvcmtzIiA+JjUNCiRhc19lY2hvICIkZ2xfY3ZfZnVuY19y bWRpcl93b3JrcyIgPiY2OyB9DQogIGlmIHRlc3QgeCIkZ2xfY3ZfZnVuY19ybWRpcl93b3JrcyIg IT0geHllczsgdGhlbg0KICAgIFJFUExBQ0VfUk1ESVI9MQ0KDQoNCg0KDQoNCg0KDQoNCiAgZ2xf TElCT0JKUz0iJGdsX0xJQk9CSlMgcm1kaXIuJGFjX29iamV4dCINCg0KICBmaQ0KDQp7ICRhc19l Y2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgbHN0YXQg YWNjZXB0cyBhbiBlbXB0eSBzdHJpbmciID4mNQ0KJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhl ciBsc3RhdCBhY2NlcHRzIGFuIGVtcHR5IHN0cmluZy4uLiAiID4mNjsgfQ0KaWYgJHthY19jdl9m dW5jX2xzdGF0X2VtcHR5X3N0cmluZ19idWcrOn0gZmFsc2U7IHRoZW4gOg0KICAkYXNfZWNob19u ICIoY2FjaGVkKSAiID4mNg0KZWxzZQ0KICBpZiB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IHll czsgdGhlbiA6DQogIGFjX2N2X2Z1bmNfbHN0YXRfZW1wdHlfc3RyaW5nX2J1Zz15ZXMNCmVsc2UN CiAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dA0KLyogZW5kIGNv bmZkZWZzLmguICAqLw0KJGFjX2luY2x1ZGVzX2RlZmF1bHQNCmludA0KbWFpbiAoKQ0Kew0Kc3Ry dWN0IHN0YXQgc2J1ZjsNCiAgcmV0dXJuIGxzdGF0ICgiIiwgJnNidWYpID09IDA7DQogIDsNCiAg cmV0dXJuIDA7DQp9DQpfQUNFT0YNCmlmIGFjX2ZuX2NfdHJ5X3J1biAiJExJTkVOTyI7IHRoZW4g Og0KICBhY19jdl9mdW5jX2xzdGF0X2VtcHR5X3N0cmluZ19idWc9bm8NCmVsc2UNCiAgYWNfY3Zf ZnVuY19sc3RhdF9lbXB0eV9zdHJpbmdfYnVnPXllcw0KZmkNCnJtIC1mIGNvcmUgKi5jb3JlIGNv cmUuY29uZnRlc3QuKiBnbW9uLm91dCBiYi5vdXQgY29uZnRlc3QkYWNfZXhlZXh0IFwNCiAgY29u ZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC5iZWFtIGNvbmZ0ZXN0LiRhY19leHQNCmZpDQoNCmZp DQp7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2 X2Z1bmNfbHN0YXRfZW1wdHlfc3RyaW5nX2J1ZyIgPiY1DQokYXNfZWNobyAiJGFjX2N2X2Z1bmNf bHN0YXRfZW1wdHlfc3RyaW5nX2J1ZyIgPiY2OyB9DQppZiB0ZXN0ICRhY19jdl9mdW5jX2xzdGF0 X2VtcHR5X3N0cmluZ19idWcgPSB5ZXM7IHRoZW4NCg0KDQoNCg0KDQoNCg0KDQogIGdsX0xJQk9C SlM9IiRnbF9MSUJPQkpTIGxzdGF0LiRhY19vYmpleHQiDQoNCg0KY2F0ID4+Y29uZmRlZnMuaCA8 PF9BQ0VPRg0KI2RlZmluZSBIQVZFX0xTVEFUX0VNUFRZX1NUUklOR19CVUcgMQ0KX0FDRU9GDQoN CmZpDQoNCg0KDQoNCg0KDQoNCg0KIyBDaGVjayB3aGV0aGVyIC0td2l0aC1zZWxpbnV4IHdhcyBn aXZlbi4NCmlmIHRlc3QgIiR7d2l0aF9zZWxpbnV4K3NldH0iID0gc2V0OyB0aGVuIDoNCiAgd2l0 aHZhbD0kd2l0aF9zZWxpbnV4Ow0KZWxzZQ0KICB3aXRoX3NlbGludXg9bWF5YmUNCmZpDQoNCg0K ICBMSUJfU0VMSU5VWD0NCiAgaWYgdGVzdCAiJHdpdGhfc2VsaW51eCIgIT0gbm87IHRoZW4NCiAg ICBnbF9zYXZlX0xJQlM9JExJQlMNCiAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8t JExJTkVOT306IGNoZWNraW5nIGZvciBsaWJyYXJ5IGNvbnRhaW5pbmcgc2V0ZmlsZWNvbiIgPiY1 DQokYXNfZWNob19uICJjaGVja2luZyBmb3IgbGlicmFyeSBjb250YWluaW5nIHNldGZpbGVjb24u Li4gIiA+JjY7IH0NCmlmICR7YWNfY3Zfc2VhcmNoX3NldGZpbGVjb24rOn0gZmFsc2U7IHRoZW4g Og0KICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNg0KZWxzZQ0KICBhY19mdW5jX3NlYXJjaF9z YXZlX0xJQlM9JExJQlMNCmNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19l eHQNCi8qIGVuZCBjb25mZGVmcy5oLiAgKi8NCg0KLyogT3ZlcnJpZGUgYW55IEdDQyBpbnRlcm5h bCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuDQogICBVc2UgY2hhciBiZWNhdXNlIGludCBt aWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBHQ0MNCiAgIGJ1aWx0aW4gYW5kIHRoZW4g aXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovDQojaWZkZWYgX19j cGx1c3BsdXMNCmV4dGVybiAiQyINCiNlbmRpZg0KY2hhciBzZXRmaWxlY29uICgpOw0KaW50DQpt YWluICgpDQp7DQpyZXR1cm4gc2V0ZmlsZWNvbiAoKTsNCiAgOw0KICByZXR1cm4gMDsNCn0NCl9B Q0VPRg0KZm9yIGFjX2xpYiBpbiAnJyBzZWxpbnV4OyBkbw0KICBpZiB0ZXN0IC16ICIkYWNfbGli IjsgdGhlbg0KICAgIGFjX3Jlcz0ibm9uZSByZXF1aXJlZCINCiAgZWxzZQ0KICAgIGFjX3Jlcz0t bCRhY19saWINCiAgICBMSUJTPSItbCRhY19saWIgICRhY19mdW5jX3NlYXJjaF9zYXZlX0xJQlMi DQogIGZpDQogIGlmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoNCiAgYWNfY3Zf c2VhcmNoX3NldGZpbGVjb249JGFjX3Jlcw0KZmkNCnJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNv bmZ0ZXN0LiRhY19vYmpleHQgXA0KICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dA0KICBpZiAke2FjX2N2 X3NlYXJjaF9zZXRmaWxlY29uKzp9IGZhbHNlOyB0aGVuIDoNCiAgYnJlYWsNCmZpDQpkb25lDQpp ZiAke2FjX2N2X3NlYXJjaF9zZXRmaWxlY29uKzp9IGZhbHNlOyB0aGVuIDoNCg0KZWxzZQ0KICBh Y19jdl9zZWFyY2hfc2V0ZmlsZWNvbj1ubw0KZmkNCnJtIGNvbmZ0ZXN0LiRhY19leHQNCkxJQlM9 JGFjX2Z1bmNfc2VhcmNoX3NhdmVfTElCUw0KZmkNCnsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xp bmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3Zfc2VhcmNoX3NldGZpbGVjb24iID4mNQ0KJGFz X2VjaG8gIiRhY19jdl9zZWFyY2hfc2V0ZmlsZWNvbiIgPiY2OyB9DQphY19yZXM9JGFjX2N2X3Nl YXJjaF9zZXRmaWxlY29uDQppZiB0ZXN0ICIkYWNfcmVzIiAhPSBubzsgdGhlbiA6DQogIHRlc3Qg IiRhY19yZXMiID0gIm5vbmUgcmVxdWlyZWQiIHx8IExJQlM9IiRhY19yZXMgJExJQlMiDQogIHRl c3QgIiRhY19jdl9zZWFyY2hfc2V0ZmlsZWNvbiIgPSAibm9uZSByZXF1aXJlZCIgfHwNCiAgICAg ICAgICAgICAgICAgICAgTElCX1NFTElOVVg9JGFjX2N2X3NlYXJjaF9zZXRmaWxlY29uDQpmaQ0K DQogICAgTElCUz0kZ2xfc2F2ZV9MSUJTDQogIGZpDQoNCg0KICAjIFdhcm4gaWYgU0VMaW51eCBp cyBmb3VuZCBidXQgbGlic2VsaW51eCBpcyBhYnNlbnQ7DQogIGlmIHRlc3QgIiRhY19jdl9zZWFy Y2hfc2V0ZmlsZWNvbiIgPSBubyAmJg0KICAgICB0ZXN0ICIkaG9zdCIgPSAiJGJ1aWxkIiAmJiB0 ZXN0IC1kIC9zZWxpbnV4OyB0aGVuDQogICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5v LSRMSU5FTk99OiBXQVJOSU5HOiBUaGlzIHN5c3RlbSBzdXBwb3J0cyBTRUxpbnV4IGJ1dCBsaWJz ZWxpbnV4IGlzIG1pc3NpbmcuIiA+JjUNCiRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IFRoaXMg c3lzdGVtIHN1cHBvcnRzIFNFTGludXggYnV0IGxpYnNlbGludXggaXMgbWlzc2luZy4iID4mMjt9 DQogICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiBH TlUgY29yZXV0aWxzIHdpbGwgYmUgY29tcGlsZWQgd2l0aG91dCBTRUxpbnV4IHN1cHBvcnQuIiA+ JjUNCiRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IEdOVSBjb3JldXRpbHMgd2lsbCBiZSBjb21w aWxlZCB3aXRob3V0IFNFTGludXggc3VwcG9ydC4iID4mMjt9DQogIGZpDQoNCg0KDQphY19mbl9j X2NoZWNrX2RlY2wgIiRMSU5FTk8iICJzZXRlbnYiICJhY19jdl9oYXZlX2RlY2xfc2V0ZW52IiAi JGFjX2luY2x1ZGVzX2RlZmF1bHQiDQppZiB0ZXN0ICJ4JGFjX2N2X2hhdmVfZGVjbF9zZXRlbnYi ID0geHllczsgdGhlbiA6DQogIGFjX2hhdmVfZGVjbD0xDQplbHNlDQogIGFjX2hhdmVfZGVjbD0w DQpmaQ0KDQpjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GDQojZGVmaW5lIEhBVkVfREVDTF9TRVRF TlYgJGFjX2hhdmVfZGVjbA0KX0FDRU9GDQoNCg0KDQoNCg0KDQogIGlmIHRlc3QgJGFjX2N2X2hh dmVfZGVjbF9zZXRlbnYgPSBubzsgdGhlbg0KICAgIEhBVkVfREVDTF9TRVRFTlY9MA0KICBmaQ0K DQogIGlmIHRlc3QgJGFjX2N2X2Z1bmNfc2V0ZW52ID0gbm87IHRoZW4NCiAgICBIQVZFX1NFVEVO Vj0wDQogIGVsc2UNCiAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306 IGNoZWNraW5nIHdoZXRoZXIgc2V0ZW52IHZhbGlkYXRlcyBhcmd1bWVudHMiID4mNQ0KJGFzX2Vj aG9fbiAiY2hlY2tpbmcgd2hldGhlciBzZXRlbnYgdmFsaWRhdGVzIGFyZ3VtZW50cy4uLiAiID4m NjsgfQ0KaWYgJHtnbF9jdl9mdW5jX3NldGVudl93b3Jrcys6fSBmYWxzZTsgdGhlbiA6DQogICRh c19lY2hvX24gIihjYWNoZWQpICIgPiY2DQplbHNlDQogIGlmIHRlc3QgIiRjcm9zc19jb21waWxp bmciID0geWVzOyB0aGVuIDoNCiAgZ2xfY3ZfZnVuY19zZXRlbnZfd29ya3M9Imd1ZXNzaW5nIG5v Ig0KZWxzZQ0KICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0DQov KiBlbmQgY29uZmRlZnMuaC4gICovDQoNCiAgICAgICAjaW5jbHVkZSA8c3RkbGliLmg+DQogICAg ICAgI2luY2x1ZGUgPGVycm5vLmg+DQogICAgICAgI2luY2x1ZGUgPHN0cmluZy5oPg0KDQppbnQN Cm1haW4gKCkNCnsNCg0KICAgICAgIGludCByZXN1bHQgPSAwOw0KICAgICAgIHsNCiAgICAgICAg IGlmIChzZXRlbnYgKCIiLCAiIiwgMCkgIT0gLTEpDQogICAgICAgICAgIHJlc3VsdCB8PSAxOw0K ICAgICAgICAgZWxzZSBpZiAoZXJybm8gIT0gRUlOVkFMKQ0KICAgICAgICAgICByZXN1bHQgfD0g MjsNCiAgICAgICB9DQogICAgICAgew0KICAgICAgICAgaWYgKHNldGVudiAoImEiLCAiPSIsIDEp ICE9IDApDQogICAgICAgICAgIHJlc3VsdCB8PSA0Ow0KICAgICAgICAgZWxzZSBpZiAoc3RyY21w IChnZXRlbnYgKCJhIiksICI9IikgIT0gMCkNCiAgICAgICAgICAgcmVzdWx0IHw9IDg7DQogICAg ICAgfQ0KICAgICAgIHJldHVybiByZXN1bHQ7DQoNCiAgOw0KICByZXR1cm4gMDsNCn0NCl9BQ0VP Rg0KaWYgYWNfZm5fY190cnlfcnVuICIkTElORU5PIjsgdGhlbiA6DQogIGdsX2N2X2Z1bmNfc2V0 ZW52X3dvcmtzPXllcw0KZWxzZQ0KICBnbF9jdl9mdW5jX3NldGVudl93b3Jrcz1ubw0KZmkNCnJt IC1mIGNvcmUgKi5jb3JlIGNvcmUuY29uZnRlc3QuKiBnbW9uLm91dCBiYi5vdXQgY29uZnRlc3Qk YWNfZXhlZXh0IFwNCiAgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC5iZWFtIGNvbmZ0ZXN0 LiRhY19leHQNCmZpDQoNCmZpDQp7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVO T306IHJlc3VsdDogJGdsX2N2X2Z1bmNfc2V0ZW52X3dvcmtzIiA+JjUNCiRhc19lY2hvICIkZ2xf Y3ZfZnVuY19zZXRlbnZfd29ya3MiID4mNjsgfQ0KICAgIGlmIHRlc3QgIiRnbF9jdl9mdW5jX3Nl dGVudl93b3JrcyIgIT0geWVzOyB0aGVuDQogICAgICBSRVBMQUNFX1NFVEVOVj0xDQoNCg0KDQoN Cg0KDQoNCg0KICBnbF9MSUJPQkpTPSIkZ2xfTElCT0JKUyBzZXRlbnYuJGFjX29iamV4dCINCg0K ICAgIGZpDQogIGZpDQoNCg0KDQoNCiAgZm9yIGFjX2hlYWRlciBpbiBzZWFyY2guaA0KZG8gOg0K ICBhY19mbl9jX2NoZWNrX2hlYWRlcl9tb25ncmVsICIkTElORU5PIiAic2VhcmNoLmgiICJhY19j dl9oZWFkZXJfc2VhcmNoX2giICIkYWNfaW5jbHVkZXNfZGVmYXVsdCINCmlmIHRlc3QgIngkYWNf Y3ZfaGVhZGVyX3NlYXJjaF9oIiA9IHh5ZXM7IHRoZW4gOg0KICBjYXQgPj5jb25mZGVmcy5oIDw8 X0FDRU9GDQojZGVmaW5lIEhBVkVfU0VBUkNIX0ggMQ0KX0FDRU9GDQoNCmZpDQoNCmRvbmUNCg0K ICBmb3IgYWNfZnVuYyBpbiB0c2VhcmNoDQpkbyA6DQogIGFjX2ZuX2NfY2hlY2tfZnVuYyAiJExJ TkVOTyIgInRzZWFyY2giICJhY19jdl9mdW5jX3RzZWFyY2giDQppZiB0ZXN0ICJ4JGFjX2N2X2Z1 bmNfdHNlYXJjaCIgPSB4eWVzOyB0aGVuIDoNCiAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRg0K I2RlZmluZSBIQVZFX1RTRUFSQ0ggMQ0KX0FDRU9GDQoNCmZpDQpkb25lDQoNCg0KDQoNCg0KDQoN Cg0KICBHTlVMSUJfU0lHTkFMX0hfU0lHUElQRT0wOw0KICBHTlVMSUJfU0lHUFJPQ01BU0s9MDsN CiAgR05VTElCX1NJR0FDVElPTj0wOw0KICAgIEhBVkVfUE9TSVhfU0lHTkFMQkxPQ0tJTkc9MTsN CiAgSEFWRV9TSUdTRVRfVD0xOw0KICBIQVZFX1NJR0lORk9fVD0xOw0KICBIQVZFX1NJR0FDVElP Tj0xOw0KICBIQVZFX1NUUlVDVF9TSUdBQ1RJT05fU0FfU0lHQUNUSU9OPTE7DQoNCiAgSEFWRV9U WVBFX1ZPTEFUSUxFX1NJR19BVE9NSUNfVD0xOw0KDQoNCg0KDQoNCg0KDQoNCg0KDQogICAgIHsg JGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciBz bnByaW50ZiByZXR1cm5zIGEgYnl0ZSBjb3VudCBhcyBpbiBDOTkiID4mNQ0KJGFzX2VjaG9fbiAi Y2hlY2tpbmcgd2hldGhlciBzbnByaW50ZiByZXR1cm5zIGEgYnl0ZSBjb3VudCBhcyBpbiBDOTku Li4gIiA+JjY7IH0NCmlmICR7Z2xfY3ZfZnVuY19zbnByaW50Zl9yZXR2YWxfYzk5Kzp9IGZhbHNl OyB0aGVuIDoNCiAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYNCmVsc2UNCg0KICAgICAgaWYg dGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgPSB5ZXM7IHRoZW4gOg0KDQogICAgICAgICBjYXNlICIk aG9zdF9vcyIgaW4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgR3Vlc3MgeWVz IG9uIGdsaWJjIHN5c3RlbXMuDQogICAgICAgICAgICotZ251KikgICAgICAgICAgICAgICBnbF9j dl9mdW5jX3NucHJpbnRmX3JldHZhbF9jOTk9Imd1ZXNzaW5nIHllcyI7Ow0KICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIyBHdWVzcyB5ZXMgb24gRnJlZUJTRCA+PSA1Lg0KICAgICAg ICAgICBmcmVlYnNkWzEtNF0qKSAgICAgICAgZ2xfY3ZfZnVuY19zbnByaW50Zl9yZXR2YWxfYzk5 PSJndWVzc2luZyBubyI7Ow0KICAgICAgICAgICBmcmVlYnNkKiB8IGtmcmVlYnNkKikgZ2xfY3Zf ZnVuY19zbnByaW50Zl9yZXR2YWxfYzk5PSJndWVzc2luZyB5ZXMiOzsNCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICMgR3Vlc3MgeWVzIG9uIE1hY09TIFggPj0gMTAuMy4NCiAgICAg ICAgICAgZGFyd2luWzEtNl0uKikgICAgICAgIGdsX2N2X2Z1bmNfc25wcmludGZfcmV0dmFsX2M5 OT0iZ3Vlc3Npbmcgbm8iOzsNCiAgICAgICAgICAgZGFyd2luKikgICAgICAgICAgICAgIGdsX2N2 X2Z1bmNfc25wcmludGZfcmV0dmFsX2M5OT0iZ3Vlc3NpbmcgeWVzIjs7DQogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAjIEd1ZXNzIHllcyBvbiBPcGVuQlNEID49IDMuOS4NCiAgICAg ICAgICAgb3BlbmJzZFsxLTJdLiogfCBvcGVuYnNkMy5bMC04XSB8IG9wZW5ic2QzLlswLThdLiop DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbF9jdl9mdW5jX3NucHJpbnRmX3Jl dHZhbF9jOTk9Imd1ZXNzaW5nIG5vIjs7DQogICAgICAgICAgIG9wZW5ic2QqKSAgICAgICAgICAg ICBnbF9jdl9mdW5jX3NucHJpbnRmX3JldHZhbF9jOTk9Imd1ZXNzaW5nIHllcyI7Ow0KICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBHdWVzcyB5ZXMgb24gU29sYXJpcyA+PSAyLjEw Lg0KICAgICAgICAgICBzb2xhcmlzMi5bMS05XVswLTldKikgZ2xfY3ZfZnVuY19wcmludGZfc2l6 ZXNfYzk5PSJndWVzc2luZyB5ZXMiOzsNCiAgICAgICAgICAgc29sYXJpcyopICAgICAgICAgICAg IGdsX2N2X2Z1bmNfcHJpbnRmX3NpemVzX2M5OT0iZ3Vlc3Npbmcgbm8iOzsNCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICMgR3Vlc3MgeWVzIG9uIEFJWCA+PSA0Lg0KICAgICAgICAg ICBhaXhbMS0zXSopICAgICAgICAgICAgZ2xfY3ZfZnVuY19zbnByaW50Zl9yZXR2YWxfYzk5PSJn dWVzc2luZyBubyI7Ow0KICAgICAgICAgICBhaXgqKSAgICAgICAgICAgICAgICAgZ2xfY3ZfZnVu Y19zbnByaW50Zl9yZXR2YWxfYzk5PSJndWVzc2luZyB5ZXMiOzsNCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICMgR3Vlc3MgeWVzIG9uIE5ldEJTRCA+PSAzLg0KICAgICAgICAgICBu ZXRic2RbMS0yXSogfCBuZXRic2RlbGZbMS0yXSogfCBuZXRic2Rhb3V0WzEtMl0qIHwgbmV0YnNk Y29mZlsxLTJdKikNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsX2N2X2Z1bmNf c25wcmludGZfcmV0dmFsX2M5OT0iZ3Vlc3Npbmcgbm8iOzsNCiAgICAgICAgICAgbmV0YnNkKikg ICAgICAgICAgICAgIGdsX2N2X2Z1bmNfc25wcmludGZfcmV0dmFsX2M5OT0iZ3Vlc3NpbmcgeWVz Ijs7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIEd1ZXNzIHllcyBvbiBCZU9T Lg0KICAgICAgICAgICBiZW9zKikgICAgICAgICAgICAgICAgZ2xfY3ZfZnVuY19zbnByaW50Zl9y ZXR2YWxfYzk5PSJndWVzc2luZyB5ZXMiOzsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICMgSWYgd2UgZG9uJ3Qga25vdywgYXNzdW1lIHRoZSB3b3JzdC4NCiAgICAgICAgICAgKikg ICAgICAgICAgICAgICAgICAgIGdsX2N2X2Z1bmNfc25wcmludGZfcmV0dmFsX2M5OT0iZ3Vlc3Np bmcgbm8iOzsNCiAgICAgICAgIGVzYWMNCg0KZWxzZQ0KICBjYXQgY29uZmRlZnMuaCAtIDw8X0FD RU9GID5jb25mdGVzdC4kYWNfZXh0DQovKiBlbmQgY29uZmRlZnMuaC4gICovDQoNCiNpbmNsdWRl IDxzdGRpby5oPg0KI2luY2x1ZGUgPHN0cmluZy5oPg0Kc3RhdGljIGNoYXIgYnVmWzEwMF07DQpp bnQgbWFpbiAoKQ0Kew0KICBzdHJjcHkgKGJ1ZiwgIkFCQ0RFRiIpOw0KICBpZiAoc25wcmludGYg KGJ1ZiwgMywgIiVkICVkIiwgNDU2NywgODkpICE9IDcpDQogICAgcmV0dXJuIDE7DQogIGlmIChz bnByaW50ZiAoYnVmLCAwLCAiJWQgJWQiLCA0NTY3LCA4OSkgIT0gNykNCiAgICByZXR1cm4gMjsN CiAgaWYgKHNucHJpbnRmIChOVUxMLCAwLCAiJWQgJWQiLCA0NTY3LCA4OSkgIT0gNykNCiAgICBy ZXR1cm4gMzsNCiAgcmV0dXJuIDA7DQp9DQpfQUNFT0YNCmlmIGFjX2ZuX2NfdHJ5X3J1biAiJExJ TkVOTyI7IHRoZW4gOg0KICBnbF9jdl9mdW5jX3NucHJpbnRmX3JldHZhbF9jOTk9eWVzDQplbHNl DQogIGdsX2N2X2Z1bmNfc25wcmludGZfcmV0dmFsX2M5OT1ubw0KZmkNCnJtIC1mIGNvcmUgKi5j b3JlIGNvcmUuY29uZnRlc3QuKiBnbW9uLm91dCBiYi5vdXQgY29uZnRlc3QkYWNfZXhlZXh0IFwN CiAgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC5iZWFtIGNvbmZ0ZXN0LiRhY19leHQNCmZp DQoNCg0KZmkNCnsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0 OiAkZ2xfY3ZfZnVuY19zbnByaW50Zl9yZXR2YWxfYzk5IiA+JjUNCiRhc19lY2hvICIkZ2xfY3Zf ZnVuY19zbnByaW50Zl9yZXR2YWxfYzk5IiA+JjY7IH0NCg0KYWNfZm5fY19jaGVja19kZWNsICIk TElORU5PIiAic25wcmludGYiICJhY19jdl9oYXZlX2RlY2xfc25wcmludGYiICIkYWNfaW5jbHVk ZXNfZGVmYXVsdCINCmlmIHRlc3QgIngkYWNfY3ZfaGF2ZV9kZWNsX3NucHJpbnRmIiA9IHh5ZXM7 IHRoZW4gOg0KICBhY19oYXZlX2RlY2w9MQ0KZWxzZQ0KICBhY19oYXZlX2RlY2w9MA0KZmkNCg0K Y2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRg0KI2RlZmluZSBIQVZFX0RFQ0xfU05QUklOVEYgJGFj X2hhdmVfZGVjbA0KX0FDRU9GDQoNCmFjX2ZuX2NfY2hlY2tfZGVjbCAiJExJTkVOTyIgInN0cG5j cHkiICJhY19jdl9oYXZlX2RlY2xfc3RwbmNweSIgIiRhY19pbmNsdWRlc19kZWZhdWx0Ig0KaWYg dGVzdCAieCRhY19jdl9oYXZlX2RlY2xfc3RwbmNweSIgPSB4eWVzOyB0aGVuIDoNCiAgYWNfaGF2 ZV9kZWNsPTENCmVsc2UNCiAgYWNfaGF2ZV9kZWNsPTANCmZpDQoNCmNhdCA+PmNvbmZkZWZzLmgg PDxfQUNFT0YNCiNkZWZpbmUgSEFWRV9ERUNMX1NUUE5DUFkgJGFjX2hhdmVfZGVjbA0KX0FDRU9G DQoNCg0KDQoNCg0KYWNfZm5fY19jaGVja19kZWNsICIkTElORU5PIiAic3RyZHVwIiAiYWNfY3Zf aGF2ZV9kZWNsX3N0cmR1cCIgIiRhY19pbmNsdWRlc19kZWZhdWx0Ig0KaWYgdGVzdCAieCRhY19j dl9oYXZlX2RlY2xfc3RyZHVwIiA9IHh5ZXM7IHRoZW4gOg0KICBhY19oYXZlX2RlY2w9MQ0KZWxz ZQ0KICBhY19oYXZlX2RlY2w9MA0KZmkNCg0KY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRg0KI2Rl ZmluZSBIQVZFX0RFQ0xfU1RSRFVQICRhY19oYXZlX2RlY2wNCl9BQ0VPRg0KDQoNCg0KDQogIGlm IHRlc3QgLXogIiRFUlJOT19IIjsgdGhlbg0KICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xp bmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIHdvcmtpbmcgc3RyZXJyb3IgZnVuY3Rpb24iID4m NQ0KJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIHdvcmtpbmcgc3RyZXJyb3IgZnVuY3Rpb24uLi4g IiA+JjY7IH0NCmlmICR7Z2xfY3ZfZnVuY193b3JraW5nX3N0cmVycm9yKzp9IGZhbHNlOyB0aGVu IDoNCiAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYNCmVsc2UNCiAgaWYgdGVzdCAiJGNyb3Nz X2NvbXBpbGluZyIgPSB5ZXM7IHRoZW4gOg0KICAgICAgICAgICBjYXQgY29uZmRlZnMuaCAtIDw8 X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0DQovKiBlbmQgY29uZmRlZnMuaC4gICovDQojaW5jbHVk ZSA8c3RyaW5nLmg+DQoNCmludA0KbWFpbiAoKQ0Kew0KcmV0dXJuICEqc3RyZXJyb3IgKC0yKTsN CiAgOw0KICByZXR1cm4gMDsNCn0NCl9BQ0VPRg0KaWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJ TkVOTyI7IHRoZW4gOg0KICBnbF9jdl9mdW5jX3dvcmtpbmdfc3RyZXJyb3I9eWVzDQplbHNlDQog IGdsX2N2X2Z1bmNfd29ya2luZ19zdHJlcnJvcj1ubw0KZmkNCnJtIC1mIGNvcmUgY29uZnRlc3Qu ZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dA0KDQplbHNlDQogIGNhdCBj b25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQNCi8qIGVuZCBjb25mZGVmcy5o LiAgKi8NCiNpbmNsdWRlIDxzdHJpbmcuaD4NCg0KaW50DQptYWluICgpDQp7DQpyZXR1cm4gISpz dHJlcnJvciAoLTIpOw0KICA7DQogIHJldHVybiAwOw0KfQ0KX0FDRU9GDQppZiBhY19mbl9jX3Ry eV9ydW4gIiRMSU5FTk8iOyB0aGVuIDoNCiAgZ2xfY3ZfZnVuY193b3JraW5nX3N0cmVycm9yPXll cw0KZWxzZQ0KICBnbF9jdl9mdW5jX3dvcmtpbmdfc3RyZXJyb3I9bm8NCmZpDQpybSAtZiBjb3Jl ICouY29yZSBjb3JlLmNvbmZ0ZXN0LiogZ21vbi5vdXQgYmIub3V0IGNvbmZ0ZXN0JGFjX2V4ZWV4 dCBcDQogIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuYmVhbSBjb25mdGVzdC4kYWNfZXh0 DQpmaQ0KDQoNCmZpDQp7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJl c3VsdDogJGdsX2N2X2Z1bmNfd29ya2luZ19zdHJlcnJvciIgPiY1DQokYXNfZWNobyAiJGdsX2N2 X2Z1bmNfd29ya2luZ19zdHJlcnJvciIgPiY2OyB9DQogICAgaWYgdGVzdCAkZ2xfY3ZfZnVuY193 b3JraW5nX3N0cmVycm9yID0gbm87IHRoZW4NCiAgICAgICAgICAgICAgICAgIFJFUExBQ0VfU1RS RVJST1I9MQ0KICAgIGZpDQogIGVsc2UNCiAgICAgICAgICAgIFJFUExBQ0VfU1RSRVJST1I9MQ0K ICBmaQ0KICBpZiB0ZXN0ICRSRVBMQUNFX1NUUkVSUk9SID0gMTsgdGhlbg0KDQogIGFjX2ZuX2Nf Y2hlY2tfZGVjbCAiJExJTkVOTyIgInN0cmVycm9yIiAiYWNfY3ZfaGF2ZV9kZWNsX3N0cmVycm9y IiAiJGFjX2luY2x1ZGVzX2RlZmF1bHQiDQppZiB0ZXN0ICJ4JGFjX2N2X2hhdmVfZGVjbF9zdHJl cnJvciIgPSB4eWVzOyB0aGVuIDoNCiAgYWNfaGF2ZV9kZWNsPTENCmVsc2UNCiAgYWNfaGF2ZV9k ZWNsPTANCmZpDQoNCmNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YNCiNkZWZpbmUgSEFWRV9ERUNM X1NUUkVSUk9SICRhY19oYXZlX2RlY2wNCl9BQ0VPRg0KDQoNCiAgaWYgdGVzdCAkYWNfY3ZfaGVh ZGVyX3N5c19zb2NrZXRfaCAhPSB5ZXM7IHRoZW4NCiAgICAgICAgICAgICAgICAgICAgZm9yIGFj X2hlYWRlciBpbiB3aW5zb2NrMi5oDQpkbyA6DQogIGFjX2ZuX2NfY2hlY2tfaGVhZGVyX21vbmdy ZWwgIiRMSU5FTk8iICJ3aW5zb2NrMi5oIiAiYWNfY3ZfaGVhZGVyX3dpbnNvY2syX2giICIkYWNf aW5jbHVkZXNfZGVmYXVsdCINCmlmIHRlc3QgIngkYWNfY3ZfaGVhZGVyX3dpbnNvY2syX2giID0g eHllczsgdGhlbiA6DQogIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YNCiNkZWZpbmUgSEFWRV9X SU5TT0NLMl9IIDENCl9BQ0VPRg0KDQpmaQ0KDQpkb25lDQoNCiAgZmkNCg0KICBmaQ0KDQoNCg0K DQoNCg0KDQoNCg0KDQoNCg0KDQoNCiAgICAgaWYgdGVzdCAkZ2xfY3ZfaGF2ZV9pbmNsdWRlX25l eHQgPSB5ZXM7IHRoZW4NCiAgICAgICBnbF9jdl9uZXh0X3N0cmluZ19oPSc8J3N0cmluZy5oJz4n DQogICAgIGVsc2UNCiAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVO T306IGNoZWNraW5nIGFic29sdXRlIG5hbWUgb2YgPHN0cmluZy5oPiIgPiY1DQokYXNfZWNob19u ICJjaGVja2luZyBhYnNvbHV0ZSBuYW1lIG9mIDxzdHJpbmcuaD4uLi4gIiA+JjY7IH0NCmlmICR7 Z2xfY3ZfbmV4dF9zdHJpbmdfaCs6fSBmYWxzZTsgdGhlbiA6DQogICRhc19lY2hvX24gIihjYWNo ZWQpICIgPiY2DQplbHNlDQoNCiAgICAgICAgICAgICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNF T0YgPmNvbmZ0ZXN0LiRhY19leHQNCi8qIGVuZCBjb25mZGVmcy5oLiAgKi8NCiNpbmNsdWRlIDxz dHJpbmcuaD4NCg0KX0FDRU9GDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICIkaG9zdF9vcyIgaW4NCiAgICAgICAgICAg ICAgICAgYWl4KikgZ2xfYWJzbmFtZV9jcHA9IiRhY19jcHAgLUMiIDs7DQogICAgICAgICAgICAg ICAgICopICAgIGdsX2Fic25hbWVfY3BwPSIkYWNfY3BwIiA7Ow0KICAgICAgICAgICAgICAgZXNh Yw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgZ2xfY3ZfbmV4dF9zdHJpbmdfaD0nIidgKGV2YWwgIiRnbF9hYnNuYW1lX2NwcCBjb25m dGVzdC4kYWNfZXh0IikgMj4mNSB8DQogICAgICAgICAgICAgICAgICBzZWQgLW4gJ1wjL3N0cmlu Zy5oI3sNCiAgICAgICAgICAgICAgICAgICAgcyMuKiJcKC4qL3N0cmluZy5oXCkiLiojXDEjDQog ICAgICAgICAgICAgICAgICAgIHMjXi9bXi9dIy8vJiMNCiAgICAgICAgICAgICAgICAgICAgcA0K ICAgICAgICAgICAgICAgICAgICBxDQogICAgICAgICAgICAgICAgICB9J2AnIicNCg0KDQpmaQ0K eyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRnbF9jdl9u ZXh0X3N0cmluZ19oIiA+JjUNCiRhc19lY2hvICIkZ2xfY3ZfbmV4dF9zdHJpbmdfaCIgPiY2OyB9 DQogICAgIGZpDQogICAgIE5FWFRfU1RSSU5HX0g9JGdsX2N2X25leHRfc3RyaW5nX2gNCg0KICAg ICBpZiB0ZXN0ICRnbF9jdl9oYXZlX2luY2x1ZGVfbmV4dCA9IHllcyB8fCB0ZXN0ICRnbF9jdl9o YXZlX2luY2x1ZGVfbmV4dCA9IGJ1Z2d5OyB0aGVuDQogICAgICAgIyBJTkNMVURFX05FWFRfQVNf RklSU1RfRElSRUNUSVZFPSdpbmNsdWRlX25leHQnDQogICAgICAgZ2xfbmV4dF9hc19maXJzdF9k aXJlY3RpdmU9Jzwnc3RyaW5nLmgnPicNCiAgICAgZWxzZQ0KICAgICAgICMgSU5DTFVERV9ORVhU X0FTX0ZJUlNUX0RJUkVDVElWRT0naW5jbHVkZScNCiAgICAgICBnbF9uZXh0X2FzX2ZpcnN0X2Rp cmVjdGl2ZT0kZ2xfY3ZfbmV4dF9zdHJpbmdfaA0KICAgICBmaQ0KICAgICBORVhUX0FTX0ZJUlNU X0RJUkVDVElWRV9TVFJJTkdfSD0kZ2xfbmV4dF9hc19maXJzdF9kaXJlY3RpdmUNCg0KDQoNCg0K DQoNCiAgICBmb3IgZ2xfZnVuYyBpbiBtZW1tZW0gbWVtcGNweSBtZW1yY2hyIHJhd21lbWNociBz dHBjcHkgc3RwbmNweSBzdHJjaHJudWwgc3RyZHVwICAgICAgc3RybmNhdCBzdHJuZHVwIHN0cm5s ZW4gc3RycGJyayBzdHJzZXAgc3RyY2FzZXN0ciBzdHJ0b2tfciBzdHJlcnJvcl9yICAgICAgc3Ry c2lnbmFsIHN0cnZlcnNjbXA7IGRvDQogICAgYXNfZ2xfU3ltYm9sPWAkYXNfZWNobyAiZ2xfY3Zf aGF2ZV9yYXdfZGVjbF8kZ2xfZnVuYyIgfCAkYXNfdHJfc2hgDQogICAgeyAkYXNfZWNobyAiJGFz X21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyICRnbF9mdW5jIGlzIGRl Y2xhcmVkIHdpdGhvdXQgYSBtYWNybyIgPiY1DQokYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVy ICRnbF9mdW5jIGlzIGRlY2xhcmVkIHdpdGhvdXQgYSBtYWNyby4uLiAiID4mNjsgfQ0KaWYgZXZh bCBcJHskYXNfZ2xfU3ltYm9sKzp9IGZhbHNlOyB0aGVuIDoNCiAgJGFzX2VjaG9fbiAiKGNhY2hl ZCkgIiA+JjYNCmVsc2UNCiAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFj X2V4dA0KLyogZW5kIGNvbmZkZWZzLmguICAqLw0KI2luY2x1ZGUgPHN0cmluZy5oPg0KDQppbnQN Cm1haW4gKCkNCnsNCiN1bmRlZiAkZ2xfZnVuYw0KICAodm9pZCkgJGdsX2Z1bmM7DQogIDsNCiAg cmV0dXJuIDA7DQp9DQpfQUNFT0YNCmlmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0 aGVuIDoNCiAgZXZhbCAiJGFzX2dsX1N5bWJvbD15ZXMiDQplbHNlDQogIGV2YWwgIiRhc19nbF9T eW1ib2w9bm8iDQpmaQ0Kcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4 dCBjb25mdGVzdC4kYWNfZXh0DQpmaQ0KZXZhbCBhY19yZXM9XCQkYXNfZ2xfU3ltYm9sDQoJICAg ICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNf cmVzIiA+JjUNCiRhc19lY2hvICIkYWNfcmVzIiA+JjY7IH0NCiAgICAgaWYgZXZhbCB0ZXN0IFwi eFwkIiRhc19nbF9TeW1ib2wiXCIgPSB4InllcyI7IHRoZW4gOg0KICBjYXQgPj5jb25mZGVmcy5o IDw8X0FDRU9GDQojZGVmaW5lIGAkYXNfZWNobyAiSEFWRV9SQVdfREVDTF8kZ2xfZnVuYyIgfCAk YXNfdHJfY3BwYCAxDQpfQUNFT0YNCg0KICAgICAgICAgICAgICAgICAgICAgZXZhbCBhY19jdl9o YXZlX2RlY2xfJGdsX2Z1bmM9eWVzDQpmaQ0KICAgICAgZG9uZQ0KDQoNCmFjX2ZuX2NfY2hlY2tf ZGVjbCAiJExJTkVOTyIgInN0cm5kdXAiICJhY19jdl9oYXZlX2RlY2xfc3RybmR1cCIgIiRhY19p bmNsdWRlc19kZWZhdWx0Ig0KaWYgdGVzdCAieCRhY19jdl9oYXZlX2RlY2xfc3RybmR1cCIgPSB4 eWVzOyB0aGVuIDoNCiAgYWNfaGF2ZV9kZWNsPTENCmVsc2UNCiAgYWNfaGF2ZV9kZWNsPTANCmZp DQoNCmNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YNCiNkZWZpbmUgSEFWRV9ERUNMX1NUUk5EVVAg JGFjX2hhdmVfZGVjbA0KX0FDRU9GDQoNCg0KDQphY19mbl9jX2NoZWNrX2RlY2wgIiRMSU5FTk8i ICJzdHJubGVuIiAiYWNfY3ZfaGF2ZV9kZWNsX3N0cm5sZW4iICIkYWNfaW5jbHVkZXNfZGVmYXVs dCINCmlmIHRlc3QgIngkYWNfY3ZfaGF2ZV9kZWNsX3N0cm5sZW4iID0geHllczsgdGhlbiA6DQog IGFjX2hhdmVfZGVjbD0xDQplbHNlDQogIGFjX2hhdmVfZGVjbD0wDQpmaQ0KDQpjYXQgPj5jb25m ZGVmcy5oIDw8X0FDRU9GDQojZGVmaW5lIEhBVkVfREVDTF9TVFJOTEVOICRhY19oYXZlX2RlY2wN Cl9BQ0VPRg0KDQphY19mbl9jX2NoZWNrX2RlY2wgIiRMSU5FTk8iICJzdHJzaWduYWwiICJhY19j dl9oYXZlX2RlY2xfc3Ryc2lnbmFsIiAiJGFjX2luY2x1ZGVzX2RlZmF1bHQiDQppZiB0ZXN0ICJ4 JGFjX2N2X2hhdmVfZGVjbF9zdHJzaWduYWwiID0geHllczsgdGhlbiA6DQogIGFjX2hhdmVfZGVj bD0xDQplbHNlDQogIGFjX2hhdmVfZGVjbD0wDQpmaQ0KDQpjYXQgPj5jb25mZGVmcy5oIDw8X0FD RU9GDQojZGVmaW5lIEhBVkVfREVDTF9TVFJTSUdOQUwgJGFjX2hhdmVfZGVjbA0KX0FDRU9GDQoN CmFjX2ZuX2NfY2hlY2tfZGVjbCAiJExJTkVOTyIgInN5c19zaWdsaXN0IiAiYWNfY3ZfaGF2ZV9k ZWNsX3N5c19zaWdsaXN0IiAiI2luY2x1ZGUgPHNpZ25hbC5oPg0KLyogTmV0QlNEIGRlY2xhcmVz IHN5c19zaWdsaXN0IGluIHVuaXN0ZC5oLiAgKi8NCiNpZmRlZiBIQVZFX1VOSVNURF9IDQojIGlu Y2x1ZGUgPHVuaXN0ZC5oPg0KI2VuZGlmDQoNCiINCmlmIHRlc3QgIngkYWNfY3ZfaGF2ZV9kZWNs X3N5c19zaWdsaXN0IiA9IHh5ZXM7IHRoZW4gOg0KICBhY19oYXZlX2RlY2w9MQ0KZWxzZQ0KICBh Y19oYXZlX2RlY2w9MA0KZmkNCg0KY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRg0KI2RlZmluZSBI QVZFX0RFQ0xfU1lTX1NJR0xJU1QgJGFjX2hhdmVfZGVjbA0KX0FDRU9GDQoNCg0KYWNfZm5fY19j aGVja19kZWNsICIkTElORU5PIiAic3RydG9kIiAiYWNfY3ZfaGF2ZV9kZWNsX3N0cnRvZCIgIiRh Y19pbmNsdWRlc19kZWZhdWx0Ig0KaWYgdGVzdCAieCRhY19jdl9oYXZlX2RlY2xfc3RydG9kIiA9 IHh5ZXM7IHRoZW4gOg0KICBhY19oYXZlX2RlY2w9MQ0KZWxzZQ0KICBhY19oYXZlX2RlY2w9MA0K ZmkNCg0KY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRg0KI2RlZmluZSBIQVZFX0RFQ0xfU1RSVE9E ICRhY19oYXZlX2RlY2wNCl9BQ0VPRg0KDQoNCiAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGlu ZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIGxkZXhwKCkgY2FuIGJlIHVzZWQgd2l0aG91 dCBsaW5raW5nIHdpdGggbGlibSIgPiY1DQokYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIGxk ZXhwKCkgY2FuIGJlIHVzZWQgd2l0aG91dCBsaW5raW5nIHdpdGggbGlibS4uLiAiID4mNjsgfQ0K aWYgJHtnbF9jdl9mdW5jX2xkZXhwX25vX2xpYm0rOn0gZmFsc2U7IHRoZW4gOg0KICAkYXNfZWNo b19uICIoY2FjaGVkKSAiID4mNg0KZWxzZQ0KDQogICAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FD RU9GID5jb25mdGVzdC4kYWNfZXh0DQovKiBlbmQgY29uZmRlZnMuaC4gICovDQojaWZuZGVmIF9f Tk9fTUFUSF9JTkxJTkVTDQogICAgICAgICAgICAgICAgICAgICAgICAgICAjIGRlZmluZSBfX05P X01BVEhfSU5MSU5FUyAxIC8qIGZvciBnbGliYyAqLw0KICAgICAgICAgICAgICAgICAgICAgICAg ICAgI2VuZGlmDQogICAgICAgICAgICAgICAgICAgICAgICAgICAjaW5jbHVkZSA8bWF0aC5oPg0K ICAgICAgICAgICAgICAgICAgICAgICAgICAgZG91YmxlICgqZnVuY3B0cikgKGRvdWJsZSwgaW50 KSA9IGxkZXhwOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgZG91YmxlIHg7DQppbnQNCm1h aW4gKCkNCnsNCnJldHVybiBsZGV4cCAoeCwgLTEpID4gMDsNCiAgOw0KICByZXR1cm4gMDsNCn0N Cl9BQ0VPRg0KaWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOg0KICBnbF9jdl9m dW5jX2xkZXhwX25vX2xpYm09eWVzDQplbHNlDQogIGdsX2N2X2Z1bmNfbGRleHBfbm9fbGlibT1u bw0KZmkNCnJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXA0KICAg IGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0DQoNCmZpDQp7ICRhc19lY2hvICIk YXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGdsX2N2X2Z1bmNfbGRleHBfbm9f bGlibSIgPiY1DQokYXNfZWNobyAiJGdsX2N2X2Z1bmNfbGRleHBfbm9fbGlibSIgPiY2OyB9DQoN Cg0KDQoNCg0KeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2lu ZyB3aGV0aGVyIHN0YXQgZmlsZS1tb2RlIG1hY3JvcyBhcmUgYnJva2VuIiA+JjUNCiRhc19lY2hv X24gImNoZWNraW5nIHdoZXRoZXIgc3RhdCBmaWxlLW1vZGUgbWFjcm9zIGFyZSBicm9rZW4uLi4g IiA+JjY7IH0NCmlmICR7YWNfY3ZfaGVhZGVyX3N0YXRfYnJva2VuKzp9IGZhbHNlOyB0aGVuIDoN CiAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYNCmVsc2UNCiAgY2F0IGNvbmZkZWZzLmggLSA8 PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dA0KLyogZW5kIGNvbmZkZWZzLmguICAqLw0KI2luY2x1 ZGUgPHN5cy90eXBlcy5oPg0KI2luY2x1ZGUgPHN5cy9zdGF0Lmg+DQoNCiNpZiBkZWZpbmVkIFNf SVNCTEsgJiYgZGVmaW5lZCBTX0lGRElSDQpleHRlcm4gY2hhciBjMVtTX0lTQkxLIChTX0lGRElS KSA/IC0xIDogMV07DQojZW5kaWYNCg0KI2lmIGRlZmluZWQgU19JU0JMSyAmJiBkZWZpbmVkIFNf SUZDSFINCmV4dGVybiBjaGFyIGMyW1NfSVNCTEsgKFNfSUZDSFIpID8gLTEgOiAxXTsNCiNlbmRp Zg0KDQojaWYgZGVmaW5lZCBTX0lTTE5LICYmIGRlZmluZWQgU19JRlJFRw0KZXh0ZXJuIGNoYXIg YzNbU19JU0xOSyAoU19JRlJFRykgPyAtMSA6IDFdOw0KI2VuZGlmDQoNCiNpZiBkZWZpbmVkIFNf SVNTT0NLICYmIGRlZmluZWQgU19JRlJFRw0KZXh0ZXJuIGNoYXIgYzRbU19JU1NPQ0sgKFNfSUZS RUcpID8gLTEgOiAxXTsNCiNlbmRpZg0KDQpfQUNFT0YNCmlmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUg IiRMSU5FTk8iOyB0aGVuIDoNCiAgYWNfY3ZfaGVhZGVyX3N0YXRfYnJva2VuPW5vDQplbHNlDQog IGFjX2N2X2hlYWRlcl9zdGF0X2Jyb2tlbj15ZXMNCmZpDQpybSAtZiBjb3JlIGNvbmZ0ZXN0LmVy ciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQNCmZpDQp7ICRhc19lY2hvICIk YXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X2hlYWRlcl9zdGF0X2Jy b2tlbiIgPiY1DQokYXNfZWNobyAiJGFjX2N2X2hlYWRlcl9zdGF0X2Jyb2tlbiIgPiY2OyB9DQpp ZiB0ZXN0ICRhY19jdl9oZWFkZXJfc3RhdF9icm9rZW4gPSB5ZXM7IHRoZW4NCg0KJGFzX2VjaG8g IiNkZWZpbmUgU1RBVF9NQUNST1NfQlJPS0VOIDEiID4+Y29uZmRlZnMuaA0KDQpmaQ0KDQoNCg0K DQogIEdOVUxJQl9VTkFNRT0wOw0KICAgIEhBVkVfVU5BTUU9MTsNCiAgSEFWRV9TVFJVQ1RfVVRT TkFNRT0xOw0KDQoNCg0KDQogIEdOVUxJQl9XQUlUUElEPTA7DQoNCg0KDQoNCiAgR05VTElCX1RD R0VUU0lEPTA7DQogICAgSEFWRV9ERUNMX1RDR0VUU0lEPTE7DQogIEhBVkVfVEVSTUlPU19IPTE7 DQoNCg0KDQogIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tp bmcgZm9yIHN0cnVjdCB0aW1lc3BlYyBpbiA8dGltZS5oPiIgPiY1DQokYXNfZWNob19uICJjaGVj a2luZyBmb3Igc3RydWN0IHRpbWVzcGVjIGluIDx0aW1lLmg+Li4uICIgPiY2OyB9DQppZiAke2ds X2N2X3N5c19zdHJ1Y3RfdGltZXNwZWNfaW5fdGltZV9oKzp9IGZhbHNlOyB0aGVuIDoNCiAgJGFz X2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYNCmVsc2UNCiAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VP RiA+Y29uZnRlc3QuJGFjX2V4dA0KLyogZW5kIGNvbmZkZWZzLmguICAqLw0KI2luY2x1ZGUgPHRp bWUuaD4NCg0KaW50DQptYWluICgpDQp7DQpzdGF0aWMgc3RydWN0IHRpbWVzcGVjIHg7IHgudHZf c2VjID0geC50dl9uc2VjOw0KICA7DQogIHJldHVybiAwOw0KfQ0KX0FDRU9GDQppZiBhY19mbl9j X3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6DQogIGdsX2N2X3N5c19zdHJ1Y3RfdGltZXNw ZWNfaW5fdGltZV9oPXllcw0KZWxzZQ0KICBnbF9jdl9zeXNfc3RydWN0X3RpbWVzcGVjX2luX3Rp bWVfaD1ubw0KZmkNCnJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQg Y29uZnRlc3QuJGFjX2V4dA0KZmkNCnsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElO RU5PfTogcmVzdWx0OiAkZ2xfY3Zfc3lzX3N0cnVjdF90aW1lc3BlY19pbl90aW1lX2giID4mNQ0K JGFzX2VjaG8gIiRnbF9jdl9zeXNfc3RydWN0X3RpbWVzcGVjX2luX3RpbWVfaCIgPiY2OyB9DQoN CiAgVElNRV9IX0RFRklORVNfU1RSVUNUX1RJTUVTUEVDPTANCiAgU1lTX1RJTUVfSF9ERUZJTkVT X1NUUlVDVF9USU1FU1BFQz0wDQogIFBUSFJFQURfSF9ERUZJTkVTX1NUUlVDVF9USU1FU1BFQz0w DQogIGlmIHRlc3QgJGdsX2N2X3N5c19zdHJ1Y3RfdGltZXNwZWNfaW5fdGltZV9oID0geWVzOyB0 aGVuDQogICAgVElNRV9IX0RFRklORVNfU1RSVUNUX1RJTUVTUEVDPTENCiAgZWxzZQ0KICAgIHsg JGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIHN0cnVj dCB0aW1lc3BlYyBpbiA8c3lzL3RpbWUuaD4iID4mNQ0KJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9y IHN0cnVjdCB0aW1lc3BlYyBpbiA8c3lzL3RpbWUuaD4uLi4gIiA+JjY7IH0NCmlmICR7Z2xfY3Zf c3lzX3N0cnVjdF90aW1lc3BlY19pbl9zeXNfdGltZV9oKzp9IGZhbHNlOyB0aGVuIDoNCiAgJGFz X2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYNCmVsc2UNCiAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VP RiA+Y29uZnRlc3QuJGFjX2V4dA0KLyogZW5kIGNvbmZkZWZzLmguICAqLw0KI2luY2x1ZGUgPHN5 cy90aW1lLmg+DQoNCmludA0KbWFpbiAoKQ0Kew0Kc3RhdGljIHN0cnVjdCB0aW1lc3BlYyB4OyB4 LnR2X3NlYyA9IHgudHZfbnNlYzsNCiAgOw0KICByZXR1cm4gMDsNCn0NCl9BQ0VPRg0KaWYgYWNf Zm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOg0KICBnbF9jdl9zeXNfc3RydWN0X3Rp bWVzcGVjX2luX3N5c190aW1lX2g9eWVzDQplbHNlDQogIGdsX2N2X3N5c19zdHJ1Y3RfdGltZXNw ZWNfaW5fc3lzX3RpbWVfaD1ubw0KZmkNCnJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0 LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dA0KZmkNCnsgJGFzX2VjaG8gIiRhc19tZToke2Fz X2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkZ2xfY3Zfc3lzX3N0cnVjdF90aW1lc3BlY19pbl9z eXNfdGltZV9oIiA+JjUNCiRhc19lY2hvICIkZ2xfY3Zfc3lzX3N0cnVjdF90aW1lc3BlY19pbl9z eXNfdGltZV9oIiA+JjY7IH0NCiAgICBpZiB0ZXN0ICRnbF9jdl9zeXNfc3RydWN0X3RpbWVzcGVj X2luX3N5c190aW1lX2ggPSB5ZXM7IHRoZW4NCiAgICAgIFNZU19USU1FX0hfREVGSU5FU19TVFJV Q1RfVElNRVNQRUM9MQ0KICAgIGVsc2UNCiAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xp bmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIHN0cnVjdCB0aW1lc3BlYyBpbiA8cHRocmVhZC5o PiIgPiY1DQokYXNfZWNob19uICJjaGVja2luZyBmb3Igc3RydWN0IHRpbWVzcGVjIGluIDxwdGhy ZWFkLmg+Li4uICIgPiY2OyB9DQppZiAke2dsX2N2X3N5c19zdHJ1Y3RfdGltZXNwZWNfaW5fcHRo cmVhZF9oKzp9IGZhbHNlOyB0aGVuIDoNCiAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYNCmVs c2UNCiAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dA0KLyogZW5k IGNvbmZkZWZzLmguICAqLw0KI2luY2x1ZGUgPHB0aHJlYWQuaD4NCg0KaW50DQptYWluICgpDQp7 DQpzdGF0aWMgc3RydWN0IHRpbWVzcGVjIHg7IHgudHZfc2VjID0geC50dl9uc2VjOw0KICA7DQog IHJldHVybiAwOw0KfQ0KX0FDRU9GDQppZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsg dGhlbiA6DQogIGdsX2N2X3N5c19zdHJ1Y3RfdGltZXNwZWNfaW5fcHRocmVhZF9oPXllcw0KZWxz ZQ0KICBnbF9jdl9zeXNfc3RydWN0X3RpbWVzcGVjX2luX3B0aHJlYWRfaD1ubw0KZmkNCnJtIC1m IGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dA0K ZmkNCnsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkZ2xf Y3Zfc3lzX3N0cnVjdF90aW1lc3BlY19pbl9wdGhyZWFkX2giID4mNQ0KJGFzX2VjaG8gIiRnbF9j dl9zeXNfc3RydWN0X3RpbWVzcGVjX2luX3B0aHJlYWRfaCIgPiY2OyB9DQogICAgICBpZiB0ZXN0 ICRnbF9jdl9zeXNfc3RydWN0X3RpbWVzcGVjX2luX3B0aHJlYWRfaCA9IHllczsgdGhlbg0KICAg ICAgICBQVEhSRUFEX0hfREVGSU5FU19TVFJVQ1RfVElNRVNQRUM9MQ0KICAgICAgZmkNCiAgICBm aQ0KICBmaQ0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KICAgICBpZiB0ZXN0ICRnbF9j dl9oYXZlX2luY2x1ZGVfbmV4dCA9IHllczsgdGhlbg0KICAgICAgIGdsX2N2X25leHRfdGltZV9o PSc8J3RpbWUuaCc+Jw0KICAgICBlbHNlDQogICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNf bGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBhYnNvbHV0ZSBuYW1lIG9mIDx0aW1lLmg+IiA+JjUN CiRhc19lY2hvX24gImNoZWNraW5nIGFic29sdXRlIG5hbWUgb2YgPHRpbWUuaD4uLi4gIiA+JjY7 IH0NCmlmICR7Z2xfY3ZfbmV4dF90aW1lX2grOn0gZmFsc2U7IHRoZW4gOg0KICAkYXNfZWNob19u ICIoY2FjaGVkKSAiID4mNg0KZWxzZQ0KDQogICAgICAgICAgICAgICBjYXQgY29uZmRlZnMuaCAt IDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0DQovKiBlbmQgY29uZmRlZnMuaC4gICovDQojaW5j bHVkZSA8dGltZS5oPg0KDQpfQUNFT0YNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgIiRob3N0X29zIiBpbg0KICAgICAg ICAgICAgICAgICBhaXgqKSBnbF9hYnNuYW1lX2NwcD0iJGFjX2NwcCAtQyIgOzsNCiAgICAgICAg ICAgICAgICAgKikgICAgZ2xfYWJzbmFtZV9jcHA9IiRhY19jcHAiIDs7DQogICAgICAgICAgICAg ICBlc2FjDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBnbF9jdl9uZXh0X3RpbWVfaD0nIidgKGV2YWwgIiRnbF9hYnNuYW1lX2NwcCBj b25mdGVzdC4kYWNfZXh0IikgMj4mNSB8DQogICAgICAgICAgICAgICAgICBzZWQgLW4gJ1wjL3Rp bWUuaCN7DQogICAgICAgICAgICAgICAgICAgIHMjLioiXCguKi90aW1lLmhcKSIuKiNcMSMNCiAg ICAgICAgICAgICAgICAgICAgcyNeL1teL10jLy8mIw0KICAgICAgICAgICAgICAgICAgICBwDQog ICAgICAgICAgICAgICAgICAgIHENCiAgICAgICAgICAgICAgICAgIH0nYCciJw0KDQoNCmZpDQp7 ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGdsX2N2X25l eHRfdGltZV9oIiA+JjUNCiRhc19lY2hvICIkZ2xfY3ZfbmV4dF90aW1lX2giID4mNjsgfQ0KICAg ICBmaQ0KICAgICBORVhUX1RJTUVfSD0kZ2xfY3ZfbmV4dF90aW1lX2gNCg0KICAgICBpZiB0ZXN0 ICRnbF9jdl9oYXZlX2luY2x1ZGVfbmV4dCA9IHllcyB8fCB0ZXN0ICRnbF9jdl9oYXZlX2luY2x1 ZGVfbmV4dCA9IGJ1Z2d5OyB0aGVuDQogICAgICAgIyBJTkNMVURFX05FWFRfQVNfRklSU1RfRElS RUNUSVZFPSdpbmNsdWRlX25leHQnDQogICAgICAgZ2xfbmV4dF9hc19maXJzdF9kaXJlY3RpdmU9 JzwndGltZS5oJz4nDQogICAgIGVsc2UNCiAgICAgICAjIElOQ0xVREVfTkVYVF9BU19GSVJTVF9E SVJFQ1RJVkU9J2luY2x1ZGUnDQogICAgICAgZ2xfbmV4dF9hc19maXJzdF9kaXJlY3RpdmU9JGds X2N2X25leHRfdGltZV9oDQogICAgIGZpDQogICAgIE5FWFRfQVNfRklSU1RfRElSRUNUSVZFX1RJ TUVfSD0kZ2xfbmV4dF9hc19maXJzdF9kaXJlY3RpdmUNCg0KDQoNCg0KDQoNCmFjX2ZuX2NfY2hl Y2tfZGVjbCAiJExJTkVOTyIgImxvY2FsdGltZV9yIiAiYWNfY3ZfaGF2ZV9kZWNsX2xvY2FsdGlt ZV9yIiAiJGFjX2luY2x1ZGVzX2RlZmF1bHQiDQppZiB0ZXN0ICJ4JGFjX2N2X2hhdmVfZGVjbF9s b2NhbHRpbWVfciIgPSB4eWVzOyB0aGVuIDoNCiAgYWNfaGF2ZV9kZWNsPTENCmVsc2UNCiAgYWNf aGF2ZV9kZWNsPTANCmZpDQoNCmNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YNCiNkZWZpbmUgSEFW RV9ERUNMX0xPQ0FMVElNRV9SICRhY19oYXZlX2RlY2wNCl9BQ0VPRg0KDQoNCg0KDQoNCg0KDQoN Cg0KDQoNCmdsX2xpYnVuaXN0cmluZ19zZWRfZXh0cmFjdF9tYWpvcj0nL15bMC05XS97cy9eXChb MC05XSpcKS4qL1wxL3A7cTt9DQppXA0KMA0KcQ0KJw0KZ2xfbGlidW5pc3RyaW5nX3NlZF9leHRy YWN0X21pbm9yPScvXlswLTldWzAtOV0qWy5dWzAtOV0ve3MvXlswLTldKlsuXVwoWzAtOV0qXCku Ki9cMS9wO3E7fQ0KaVwNCjANCnENCicNCmdsX2xpYnVuaXN0cmluZ19zZWRfZXh0cmFjdF9zdWJt aW5vcj0nL15bMC05XVswLTldKlsuXVswLTldWzAtOV0qWy5dWzAtOV0ve3MvXlswLTldKlsuXVsw LTldKlsuXVwoWzAtOV0qXCkuKi9cMS9wO3E7fQ0KaVwNCjANCnENCicNCg0KDQogIGlmIHRlc3Qg IiRIQVZFX0xJQlVOSVNUUklORyIgPSB5ZXM7IHRoZW4NCiAgICBMSUJVTklTVFJJTkdfVkVSU0lP Tl9NQUpPUj1gZWNobyAiJExJQlVOSVNUUklOR19WRVJTSU9OIiB8IHNlZCAtbiAtZSAiJGdsX2xp YnVuaXN0cmluZ19zZWRfZXh0cmFjdF9tYWpvciJgDQogICAgTElCVU5JU1RSSU5HX1ZFUlNJT05f TUlOT1I9YGVjaG8gIiRMSUJVTklTVFJJTkdfVkVSU0lPTiIgfCBzZWQgLW4gLWUgIiRnbF9saWJ1 bmlzdHJpbmdfc2VkX2V4dHJhY3RfbWlub3IiYA0KICAgIExJQlVOSVNUUklOR19WRVJTSU9OX1NV Qk1JTk9SPWBlY2hvICIkTElCVU5JU1RSSU5HX1ZFUlNJT04iIHwgc2VkIC1uIC1lICIkZ2xfbGli dW5pc3RyaW5nX3NlZF9leHRyYWN0X3N1Ym1pbm9yImANCiAgZmkNCg0KYWNfZm5fY19jaGVja19k ZWNsICIkTElORU5PIiAiY2xlYXJlcnJfdW5sb2NrZWQiICJhY19jdl9oYXZlX2RlY2xfY2xlYXJl cnJfdW5sb2NrZWQiICIkYWNfaW5jbHVkZXNfZGVmYXVsdCINCmlmIHRlc3QgIngkYWNfY3ZfaGF2 ZV9kZWNsX2NsZWFyZXJyX3VubG9ja2VkIiA9IHh5ZXM7IHRoZW4gOg0KICBhY19oYXZlX2RlY2w9 MQ0KZWxzZQ0KICBhY19oYXZlX2RlY2w9MA0KZmkNCg0KY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VP Rg0KI2RlZmluZSBIQVZFX0RFQ0xfQ0xFQVJFUlJfVU5MT0NLRUQgJGFjX2hhdmVfZGVjbA0KX0FD RU9GDQoNCmFjX2ZuX2NfY2hlY2tfZGVjbCAiJExJTkVOTyIgImZlb2ZfdW5sb2NrZWQiICJhY19j dl9oYXZlX2RlY2xfZmVvZl91bmxvY2tlZCIgIiRhY19pbmNsdWRlc19kZWZhdWx0Ig0KaWYgdGVz dCAieCRhY19jdl9oYXZlX2RlY2xfZmVvZl91bmxvY2tlZCIgPSB4eWVzOyB0aGVuIDoNCiAgYWNf aGF2ZV9kZWNsPTENCmVsc2UNCiAgYWNfaGF2ZV9kZWNsPTANCmZpDQoNCmNhdCA+PmNvbmZkZWZz LmggPDxfQUNFT0YNCiNkZWZpbmUgSEFWRV9ERUNMX0ZFT0ZfVU5MT0NLRUQgJGFjX2hhdmVfZGVj bA0KX0FDRU9GDQoNCmFjX2ZuX2NfY2hlY2tfZGVjbCAiJExJTkVOTyIgImZlcnJvcl91bmxvY2tl ZCIgImFjX2N2X2hhdmVfZGVjbF9mZXJyb3JfdW5sb2NrZWQiICIkYWNfaW5jbHVkZXNfZGVmYXVs dCINCmlmIHRlc3QgIngkYWNfY3ZfaGF2ZV9kZWNsX2ZlcnJvcl91bmxvY2tlZCIgPSB4eWVzOyB0 aGVuIDoNCiAgYWNfaGF2ZV9kZWNsPTENCmVsc2UNCiAgYWNfaGF2ZV9kZWNsPTANCmZpDQoNCmNh dCA+PmNvbmZkZWZzLmggPDxfQUNFT0YNCiNkZWZpbmUgSEFWRV9ERUNMX0ZFUlJPUl9VTkxPQ0tF RCAkYWNfaGF2ZV9kZWNsDQpfQUNFT0YNCg0KYWNfZm5fY19jaGVja19kZWNsICIkTElORU5PIiAi ZmdldHNfdW5sb2NrZWQiICJhY19jdl9oYXZlX2RlY2xfZmdldHNfdW5sb2NrZWQiICIkYWNfaW5j bHVkZXNfZGVmYXVsdCINCmlmIHRlc3QgIngkYWNfY3ZfaGF2ZV9kZWNsX2ZnZXRzX3VubG9ja2Vk IiA9IHh5ZXM7IHRoZW4gOg0KICBhY19oYXZlX2RlY2w9MQ0KZWxzZQ0KICBhY19oYXZlX2RlY2w9 MA0KZmkNCg0KY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRg0KI2RlZmluZSBIQVZFX0RFQ0xfRkdF VFNfVU5MT0NLRUQgJGFjX2hhdmVfZGVjbA0KX0FDRU9GDQoNCmFjX2ZuX2NfY2hlY2tfZGVjbCAi JExJTkVOTyIgImZwdXRjX3VubG9ja2VkIiAiYWNfY3ZfaGF2ZV9kZWNsX2ZwdXRjX3VubG9ja2Vk IiAiJGFjX2luY2x1ZGVzX2RlZmF1bHQiDQppZiB0ZXN0ICJ4JGFjX2N2X2hhdmVfZGVjbF9mcHV0 Y191bmxvY2tlZCIgPSB4eWVzOyB0aGVuIDoNCiAgYWNfaGF2ZV9kZWNsPTENCmVsc2UNCiAgYWNf aGF2ZV9kZWNsPTANCmZpDQoNCmNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YNCiNkZWZpbmUgSEFW RV9ERUNMX0ZQVVRDX1VOTE9DS0VEICRhY19oYXZlX2RlY2wNCl9BQ0VPRg0KDQphY19mbl9jX2No ZWNrX2RlY2wgIiRMSU5FTk8iICJmcmVhZF91bmxvY2tlZCIgImFjX2N2X2hhdmVfZGVjbF9mcmVh ZF91bmxvY2tlZCIgIiRhY19pbmNsdWRlc19kZWZhdWx0Ig0KaWYgdGVzdCAieCRhY19jdl9oYXZl X2RlY2xfZnJlYWRfdW5sb2NrZWQiID0geHllczsgdGhlbiA6DQogIGFjX2hhdmVfZGVjbD0xDQpl bHNlDQogIGFjX2hhdmVfZGVjbD0wDQpmaQ0KDQpjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GDQoj ZGVmaW5lIEhBVkVfREVDTF9GUkVBRF9VTkxPQ0tFRCAkYWNfaGF2ZV9kZWNsDQpfQUNFT0YNCg0K YWNfZm5fY19jaGVja19kZWNsICIkTElORU5PIiAiZndyaXRlX3VubG9ja2VkIiAiYWNfY3ZfaGF2 ZV9kZWNsX2Z3cml0ZV91bmxvY2tlZCIgIiRhY19pbmNsdWRlc19kZWZhdWx0Ig0KaWYgdGVzdCAi eCRhY19jdl9oYXZlX2RlY2xfZndyaXRlX3VubG9ja2VkIiA9IHh5ZXM7IHRoZW4gOg0KICBhY19o YXZlX2RlY2w9MQ0KZWxzZQ0KICBhY19oYXZlX2RlY2w9MA0KZmkNCg0KY2F0ID4+Y29uZmRlZnMu aCA8PF9BQ0VPRg0KI2RlZmluZSBIQVZFX0RFQ0xfRldSSVRFX1VOTE9DS0VEICRhY19oYXZlX2Rl Y2wNCl9BQ0VPRg0KDQphY19mbl9jX2NoZWNrX2RlY2wgIiRMSU5FTk8iICJnZXRjaGFyX3VubG9j a2VkIiAiYWNfY3ZfaGF2ZV9kZWNsX2dldGNoYXJfdW5sb2NrZWQiICIkYWNfaW5jbHVkZXNfZGVm YXVsdCINCmlmIHRlc3QgIngkYWNfY3ZfaGF2ZV9kZWNsX2dldGNoYXJfdW5sb2NrZWQiID0geHll czsgdGhlbiA6DQogIGFjX2hhdmVfZGVjbD0xDQplbHNlDQogIGFjX2hhdmVfZGVjbD0wDQpmaQ0K DQpjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GDQojZGVmaW5lIEhBVkVfREVDTF9HRVRDSEFSX1VO TE9DS0VEICRhY19oYXZlX2RlY2wNCl9BQ0VPRg0KDQphY19mbl9jX2NoZWNrX2RlY2wgIiRMSU5F Tk8iICJwdXRjaGFyX3VubG9ja2VkIiAiYWNfY3ZfaGF2ZV9kZWNsX3B1dGNoYXJfdW5sb2NrZWQi ICIkYWNfaW5jbHVkZXNfZGVmYXVsdCINCmlmIHRlc3QgIngkYWNfY3ZfaGF2ZV9kZWNsX3B1dGNo YXJfdW5sb2NrZWQiID0geHllczsgdGhlbiA6DQogIGFjX2hhdmVfZGVjbD0xDQplbHNlDQogIGFj X2hhdmVfZGVjbD0wDQpmaQ0KDQpjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GDQojZGVmaW5lIEhB VkVfREVDTF9QVVRDSEFSX1VOTE9DS0VEICRhY19oYXZlX2RlY2wNCl9BQ0VPRg0KDQphY19mbl9j X2NoZWNrX2RlY2wgIiRMSU5FTk8iICJ1bnNldGVudiIgImFjX2N2X2hhdmVfZGVjbF91bnNldGVu diIgIiRhY19pbmNsdWRlc19kZWZhdWx0Ig0KaWYgdGVzdCAieCRhY19jdl9oYXZlX2RlY2xfdW5z ZXRlbnYiID0geHllczsgdGhlbiA6DQogIGFjX2hhdmVfZGVjbD0xDQplbHNlDQogIGFjX2hhdmVf ZGVjbD0wDQpmaQ0KDQpjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GDQojZGVmaW5lIEhBVkVfREVD TF9VTlNFVEVOViAkYWNfaGF2ZV9kZWNsDQpfQUNFT0YNCg0KDQogIHsgJGFzX2VjaG8gIiRhc19t ZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciB0aGUgdXRpbWVzIGZ1bmN0 aW9uIHdvcmtzIiA+JjUNCiRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgdGhlIHV0aW1lcyBm dW5jdGlvbiB3b3Jrcy4uLiAiID4mNjsgfQ0KaWYgJHtnbF9jdl9mdW5jX3dvcmtpbmdfdXRpbWVz Kzp9IGZhbHNlOyB0aGVuIDoNCiAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYNCmVsc2UNCg0K ICBpZiB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IHllczsgdGhlbiA6DQogIGdsX2N2X2Z1bmNf d29ya2luZ191dGltZXM9bm8NCmVsc2UNCiAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29u ZnRlc3QuJGFjX2V4dA0KLyogZW5kIGNvbmZkZWZzLmguICAqLw0KDQojaW5jbHVkZSA8c3lzL3R5 cGVzLmg+DQojaW5jbHVkZSA8c3lzL3N0YXQuaD4NCiNpbmNsdWRlIDxmY250bC5oPg0KI2luY2x1 ZGUgPHN5cy90aW1lLmg+DQojaW5jbHVkZSA8dGltZS5oPg0KI2luY2x1ZGUgPHVuaXN0ZC5oPg0K I2luY2x1ZGUgPHN0ZGxpYi5oPg0KI2luY2x1ZGUgPHN0ZGlvLmg+DQojaW5jbHVkZSA8dXRpbWUu aD4NCg0Kc3RhdGljIGludA0KaW5vcmRlciAodGltZV90IGEsIHRpbWVfdCBiLCB0aW1lX3QgYykN CnsNCiAgcmV0dXJuIGEgPD0gYiAmJiBiIDw9IGM7DQp9DQoNCmludA0KbWFpbiAoKQ0Kew0KICBp bnQgcmVzdWx0ID0gMDsNCiAgY2hhciBjb25zdCAqZmlsZSA9ICJjb25mdGVzdC51dGltZXMiOw0K ICBzdGF0aWMgc3RydWN0IHRpbWV2YWwgdGltZXZhbFsyXSA9IHt7OSwgMTB9LCB7OTk5OTk5LCA5 OTk5OTl9fTsNCg0KICAvKiBUZXN0IHdoZXRoZXIgdXRpbWVzKCkgZXNzZW50aWFsbHkgd29ya3Mu ICAqLw0KICB7DQogICAgc3RydWN0IHN0YXQgc2J1ZjsNCiAgICBGSUxFICpmID0gZm9wZW4gKGZp bGUsICJ3Iik7DQogICAgaWYgKGYgPT0gTlVMTCkNCiAgICAgIHJlc3VsdCB8PSAxOw0KICAgIGVs c2UgaWYgKGZjbG9zZSAoZikgIT0gMCkNCiAgICAgIHJlc3VsdCB8PSAxOw0KICAgIGVsc2UgaWYg KHV0aW1lcyAoZmlsZSwgdGltZXZhbCkgIT0gMCkNCiAgICAgIHJlc3VsdCB8PSAyOw0KICAgIGVs c2UgaWYgKGxzdGF0IChmaWxlLCAmc2J1ZikgIT0gMCkNCiAgICAgIHJlc3VsdCB8PSAxOw0KICAg IGVsc2UgaWYgKCEoc2J1Zi5zdF9hdGltZSA9PSB0aW1ldmFsWzBdLnR2X3NlYw0KICAgICAgICAg ICAgICAgJiYgc2J1Zi5zdF9tdGltZSA9PSB0aW1ldmFsWzFdLnR2X3NlYykpDQogICAgICByZXN1 bHQgfD0gNDsNCiAgICBpZiAodW5saW5rIChmaWxlKSAhPSAwKQ0KICAgICAgcmVzdWx0IHw9IDE7 DQogIH0NCg0KICAvKiBUZXN0IHdoZXRoZXIgdXRpbWVzKCkgd2l0aCBhIE5VTEwgYXJndW1lbnQg c2V0cyB0aGUgZmlsZSdzIHRpbWVzdGFtcA0KICAgICB0byB0aGUgY3VycmVudCB0aW1lLiAgVXNl ICdmc3RhdCcgYXMgd2VsbCBhcyAndGltZScgdG8NCiAgICAgZGV0ZXJtaW5lIHRoZSAiY3VycmVu dCIgdGltZSwgdG8gYWNjb21tb2RhdGUgTkZTIGZpbGUgc3lzdGVtcw0KICAgICBpZiB0aGVyZSBp cyBhIHRpbWUgc2tldyBiZXR3ZWVuIHRoZSBob3N0IGFuZCB0aGUgTkZTIHNlcnZlci4gICovDQog IHsNCiAgICBpbnQgZmQgPSBvcGVuIChmaWxlLCBPX1dST05MWXxPX0NSRUFULCAwNjQ0KTsNCiAg ICBpZiAoZmQgPCAwKQ0KICAgICAgcmVzdWx0IHw9IDE7DQogICAgZWxzZQ0KICAgICAgew0KICAg ICAgICB0aW1lX3QgdDAsIHQyOw0KICAgICAgICBzdHJ1Y3Qgc3RhdCBzdDAsIHN0MSwgc3QyOw0K ICAgICAgICBpZiAodGltZSAoJnQwKSA9PSAodGltZV90KSAtMSkNCiAgICAgICAgICByZXN1bHQg fD0gMTsNCiAgICAgICAgZWxzZSBpZiAoZnN0YXQgKGZkLCAmc3QwKSAhPSAwKQ0KICAgICAgICAg IHJlc3VsdCB8PSAxOw0KICAgICAgICBlbHNlIGlmICh1dGltZXMgKGZpbGUsIHRpbWV2YWwpICE9 IDApDQogICAgICAgICAgcmVzdWx0IHw9IDI7DQogICAgICAgIGVsc2UgaWYgKHV0aW1lcyAoZmls ZSwgTlVMTCkgIT0gMCkNCiAgICAgICAgICByZXN1bHQgfD0gODsNCiAgICAgICAgZWxzZSBpZiAo ZnN0YXQgKGZkLCAmc3QxKSAhPSAwKQ0KICAgICAgICAgIHJlc3VsdCB8PSAxOw0KICAgICAgICBl bHNlIGlmICh3cml0ZSAoZmQsICJcbiIsIDEpICE9IDEpDQogICAgICAgICAgcmVzdWx0IHw9IDE7 DQogICAgICAgIGVsc2UgaWYgKGZzdGF0IChmZCwgJnN0MikgIT0gMCkNCiAgICAgICAgICByZXN1 bHQgfD0gMTsNCiAgICAgICAgZWxzZSBpZiAodGltZSAoJnQyKSA9PSAodGltZV90KSAtMSkNCiAg ICAgICAgICByZXN1bHQgfD0gMTsNCiAgICAgICAgZWxzZQ0KICAgICAgICAgIHsNCiAgICAgICAg ICAgIGludCBtX29rX1BPU0lYID0gaW5vcmRlciAodDAsIHN0MS5zdF9tdGltZSwgdDIpOw0KICAg ICAgICAgICAgaW50IG1fb2tfTkZTID0gaW5vcmRlciAoc3QwLnN0X210aW1lLCBzdDEuc3RfbXRp bWUsIHN0Mi5zdF9tdGltZSk7DQogICAgICAgICAgICBpZiAoISAoc3QxLnN0X2F0aW1lID09IHN0 MS5zdF9tdGltZSkpDQogICAgICAgICAgICAgIHJlc3VsdCB8PSAxNjsNCiAgICAgICAgICAgIGlm ICghIChtX29rX1BPU0lYIHx8IG1fb2tfTkZTKSkNCiAgICAgICAgICAgICAgcmVzdWx0IHw9IDMy Ow0KICAgICAgICAgIH0NCiAgICAgICAgaWYgKGNsb3NlIChmZCkgIT0gMCkNCiAgICAgICAgICBy ZXN1bHQgfD0gMTsNCiAgICAgIH0NCiAgICBpZiAodW5saW5rIChmaWxlKSAhPSAwKQ0KICAgICAg cmVzdWx0IHw9IDE7DQogIH0NCg0KICAvKiBUZXN0IHdoZXRoZXIgdXRpbWVzKCkgd2l0aCBhIE5V TEwgYXJndW1lbnQgd29ya3Mgb24gcmVhZC1vbmx5IGZpbGVzLiAgKi8NCiAgew0KICAgIGludCBm ZCA9IG9wZW4gKGZpbGUsIE9fV1JPTkxZfE9fQ1JFQVQsIDA0NDQpOw0KICAgIGlmIChmZCA8IDAp DQogICAgICByZXN1bHQgfD0gMTsNCiAgICBlbHNlIGlmIChjbG9zZSAoZmQpICE9IDApDQogICAg ICByZXN1bHQgfD0gMTsNCiAgICBlbHNlIGlmICh1dGltZXMgKGZpbGUsIE5VTEwpICE9IDApDQog ICAgICByZXN1bHQgfD0gNjQ7DQogICAgaWYgKHVubGluayAoZmlsZSkgIT0gMCkNCiAgICAgIHJl c3VsdCB8PSAxOw0KICB9DQoNCiAgcmV0dXJuIHJlc3VsdDsNCn0NCg0KX0FDRU9GDQppZiBhY19m bl9jX3RyeV9ydW4gIiRMSU5FTk8iOyB0aGVuIDoNCiAgZ2xfY3ZfZnVuY193b3JraW5nX3V0aW1l cz15ZXMNCmVsc2UNCiAgZ2xfY3ZfZnVuY193b3JraW5nX3V0aW1lcz1ubw0KZmkNCnJtIC1mIGNv cmUgKi5jb3JlIGNvcmUuY29uZnRlc3QuKiBnbW9uLm91dCBiYi5vdXQgY29uZnRlc3QkYWNfZXhl ZXh0IFwNCiAgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC5iZWFtIGNvbmZ0ZXN0LiRhY19l eHQNCmZpDQoNCmZpDQp7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJl c3VsdDogJGdsX2N2X2Z1bmNfd29ya2luZ191dGltZXMiID4mNQ0KJGFzX2VjaG8gIiRnbF9jdl9m dW5jX3dvcmtpbmdfdXRpbWVzIiA+JjY7IH0NCg0KICBpZiB0ZXN0ICRnbF9jdl9mdW5jX3dvcmtp bmdfdXRpbWVzID0geWVzOyB0aGVuDQoNCiRhc19lY2hvICIjZGVmaW5lIEhBVkVfV09SS0lOR19V VElNRVMgMSIgPj5jb25mZGVmcy5oDQoNCiAgZmkNCg0KDQoNCg0KDQogIHsgJGFzX2VjaG8gIiRh c19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIHN0cnVjdCB1dGltYnVmIiA+ JjUNCiRhc19lY2hvX24gImNoZWNraW5nIGZvciBzdHJ1Y3QgdXRpbWJ1Zi4uLiAiID4mNjsgfQ0K aWYgJHtnbF9jdl9zeXNfc3RydWN0X3V0aW1idWYrOn0gZmFsc2U7IHRoZW4gOg0KICAkYXNfZWNo b19uICIoY2FjaGVkKSAiID4mNg0KZWxzZQ0KICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5j b25mdGVzdC4kYWNfZXh0DQovKiBlbmQgY29uZmRlZnMuaC4gICovDQojaWYgSEFWRV9TWVNfVElN RV9IDQogICAgICAgICAgICAgI2luY2x1ZGUgPHN5cy90aW1lLmg+DQogICAgICAgICAgICAjZW5k aWYNCiAgICAgICAgICAgICNpbmNsdWRlIDx0aW1lLmg+DQogICAgICAgICAgICAjaWZkZWYgSEFW RV9VVElNRV9IDQogICAgICAgICAgICAgI2luY2x1ZGUgPHV0aW1lLmg+DQogICAgICAgICAgICAj ZW5kaWYNCg0KaW50DQptYWluICgpDQp7DQpzdGF0aWMgc3RydWN0IHV0aW1idWYgeDsgeC5hY3Rp bWUgPSB4Lm1vZHRpbWU7DQogIDsNCiAgcmV0dXJuIDA7DQp9DQpfQUNFT0YNCmlmIGFjX2ZuX2Nf dHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoNCiAgZ2xfY3Zfc3lzX3N0cnVjdF91dGltYnVm PXllcw0KZWxzZQ0KICBnbF9jdl9zeXNfc3RydWN0X3V0aW1idWY9bm8NCmZpDQpybSAtZiBjb3Jl IGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQNCmZpDQp7 ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGdsX2N2X3N5 c19zdHJ1Y3RfdXRpbWJ1ZiIgPiY1DQokYXNfZWNobyAiJGdsX2N2X3N5c19zdHJ1Y3RfdXRpbWJ1 ZiIgPiY2OyB9DQoNCiAgaWYgdGVzdCAkZ2xfY3Zfc3lzX3N0cnVjdF91dGltYnVmID0geWVzOyB0 aGVuDQoNCiRhc19lY2hvICIjZGVmaW5lIEhBVkVfU1RSVUNUX1VUSU1CVUYgMSIgPj5jb25mZGVm cy5oDQoNCiAgZmkNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCiAgeyAkYXNfZWNobyAiJGFzX21l OiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgaW50dHlwZXMuaCIgPiY1DQokYXNf ZWNob19uICJjaGVja2luZyBmb3IgaW50dHlwZXMuaC4uLiAiID4mNjsgfQ0KaWYgJHtnbF9jdl9o ZWFkZXJfaW50dHlwZXNfaCs6fSBmYWxzZTsgdGhlbiA6DQogICRhc19lY2hvX24gIihjYWNoZWQp ICIgPiY2DQplbHNlDQogIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19l eHQNCi8qIGVuZCBjb25mZGVmcy5oLiAgKi8NCg0KI2luY2x1ZGUgPHN5cy90eXBlcy5oPg0KI2lu Y2x1ZGUgPGludHR5cGVzLmg+DQoNCmludA0KbWFpbiAoKQ0Kew0KdWludG1heF90IGkgPSAodWlu dG1heF90KSAtMTsgcmV0dXJuICFpOw0KICA7DQogIHJldHVybiAwOw0KfQ0KX0FDRU9GDQppZiBh Y19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6DQogIGdsX2N2X2hlYWRlcl9pbnR0 eXBlc19oPXllcw0KZWxzZQ0KICBnbF9jdl9oZWFkZXJfaW50dHlwZXNfaD1ubw0KZmkNCnJtIC1m IGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dA0K ZmkNCnsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkZ2xf Y3ZfaGVhZGVyX2ludHR5cGVzX2giID4mNQ0KJGFzX2VjaG8gIiRnbF9jdl9oZWFkZXJfaW50dHlw ZXNfaCIgPiY2OyB9DQogIGlmIHRlc3QgJGdsX2N2X2hlYWRlcl9pbnR0eXBlc19oID0geWVzOyB0 aGVuDQoNCmNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YNCiNkZWZpbmUgSEFWRV9JTlRUWVBFU19I X1dJVEhfVUlOVE1BWCAxDQpfQUNFT0YNCg0KICBmaQ0KDQoNCiAgeyAkYXNfZWNobyAiJGFzX21l OiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3Igc3RkaW50LmgiID4mNQ0KJGFzX2Vj aG9fbiAiY2hlY2tpbmcgZm9yIHN0ZGludC5oLi4uICIgPiY2OyB9DQppZiAke2dsX2N2X2hlYWRl cl9zdGRpbnRfaCs6fSBmYWxzZTsgdGhlbiA6DQogICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2 DQplbHNlDQogIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQNCi8q IGVuZCBjb25mZGVmcy5oLiAgKi8NCiNpbmNsdWRlIDxzeXMvdHlwZXMuaD4NCiAgICAgICAgICAg ICNpbmNsdWRlIDxzdGRpbnQuaD4NCmludA0KbWFpbiAoKQ0Kew0KdWludG1heF90IGkgPSAodWlu dG1heF90KSAtMTsgcmV0dXJuICFpOw0KICA7DQogIHJldHVybiAwOw0KfQ0KX0FDRU9GDQppZiBh Y19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6DQogIGdsX2N2X2hlYWRlcl9zdGRp bnRfaD15ZXMNCmVsc2UNCiAgZ2xfY3ZfaGVhZGVyX3N0ZGludF9oPW5vDQpmaQ0Kcm0gLWYgY29y ZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0DQpmaQ0K eyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRnbF9jdl9o ZWFkZXJfc3RkaW50X2giID4mNQ0KJGFzX2VjaG8gIiRnbF9jdl9oZWFkZXJfc3RkaW50X2giID4m NjsgfQ0KICBpZiB0ZXN0ICRnbF9jdl9oZWFkZXJfc3RkaW50X2ggPSB5ZXM7IHRoZW4NCg0KY2F0 ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRg0KI2RlZmluZSBIQVZFX1NURElOVF9IX1dJVEhfVUlOVE1B WCAxDQpfQUNFT0YNCg0KICBmaQ0KDQoNCg0KDQogIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xp bmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIGludG1heF90IiA+JjUNCiRhc19lY2hvX24gImNo ZWNraW5nIGZvciBpbnRtYXhfdC4uLiAiID4mNjsgfQ0KaWYgJHtndF9jdl9jX2ludG1heF90Kzp9 IGZhbHNlOyB0aGVuIDoNCiAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYNCmVsc2UNCiAgY2F0 IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dA0KLyogZW5kIGNvbmZkZWZz LmguICAqLw0KDQojaW5jbHVkZSA8c3RkZGVmLmg+DQojaW5jbHVkZSA8c3RkbGliLmg+DQojaWYg SEFWRV9TVERJTlRfSF9XSVRIX1VJTlRNQVgNCiNpbmNsdWRlIDxzdGRpbnQuaD4NCiNlbmRpZg0K I2lmIEhBVkVfSU5UVFlQRVNfSF9XSVRIX1VJTlRNQVgNCiNpbmNsdWRlIDxpbnR0eXBlcy5oPg0K I2VuZGlmDQoNCmludA0KbWFpbiAoKQ0Kew0KaW50bWF4X3QgeCA9IC0xOyByZXR1cm4gIXg7DQog IDsNCiAgcmV0dXJuIDA7DQp9DQpfQUNFT0YNCmlmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5F Tk8iOyB0aGVuIDoNCiAgZ3RfY3ZfY19pbnRtYXhfdD15ZXMNCmVsc2UNCiAgZ3RfY3ZfY19pbnRt YXhfdD1ubw0KZmkNCnJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQg Y29uZnRlc3QuJGFjX2V4dA0KZmkNCnsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElO RU5PfTogcmVzdWx0OiAkZ3RfY3ZfY19pbnRtYXhfdCIgPiY1DQokYXNfZWNobyAiJGd0X2N2X2Nf aW50bWF4X3QiID4mNjsgfQ0KICBpZiB0ZXN0ICRndF9jdl9jX2ludG1heF90ID0geWVzOyB0aGVu DQoNCiRhc19lY2hvICIjZGVmaW5lIEhBVkVfSU5UTUFYX1QgMSIgPj5jb25mZGVmcy5oDQoNCiAg ZWxzZQ0KDQogICAgdGVzdCAkYWNfY3ZfdHlwZV9sb25nX2xvbmdfaW50ID0geWVzIFwNCiAgICAg ICYmIGFjX3R5cGU9J2xvbmcgbG9uZycgXA0KICAgICAgfHwgYWNfdHlwZT0nbG9uZycNCg0KY2F0 ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRg0KI2RlZmluZSBpbnRtYXhfdCAkYWNfdHlwZQ0KX0FDRU9G DQoNCiAgZmkNCg0KDQoNCg0KDQoNCg0KICBmb3IgYWNfZnVuYyBpbiBzbnByaW50ZiBzdHJubGVu IHdjc2xlbiB3Y3NubGVuIG1icnRvd2Mgd2NydG9tYg0KZG8gOg0KICBhc19hY192YXI9YCRhc19l Y2hvICJhY19jdl9mdW5jXyRhY19mdW5jIiB8ICRhc190cl9zaGANCmFjX2ZuX2NfY2hlY2tfZnVu YyAiJExJTkVOTyIgIiRhY19mdW5jIiAiJGFzX2FjX3ZhciINCmlmIGV2YWwgdGVzdCBcInhcJCIk YXNfYWNfdmFyIlwiID0geCJ5ZXMiOyB0aGVuIDoNCiAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VP Rg0KI2RlZmluZSBgJGFzX2VjaG8gIkhBVkVfJGFjX2Z1bmMiIHwgJGFzX3RyX2NwcGAgMQ0KX0FD RU9GDQoNCmZpDQpkb25lDQoNCiAgICAgIGFjX2ZuX2NfY2hlY2tfZGVjbCAiJExJTkVOTyIgIl9z bnByaW50ZiIgImFjX2N2X2hhdmVfZGVjbF9fc25wcmludGYiICIjaW5jbHVkZSA8c3RkaW8uaD4N CiINCmlmIHRlc3QgIngkYWNfY3ZfaGF2ZV9kZWNsX19zbnByaW50ZiIgPSB4eWVzOyB0aGVuIDoN CiAgYWNfaGF2ZV9kZWNsPTENCmVsc2UNCiAgYWNfaGF2ZV9kZWNsPTANCmZpDQoNCmNhdCA+PmNv bmZkZWZzLmggPDxfQUNFT0YNCiNkZWZpbmUgSEFWRV9ERUNMX19TTlBSSU5URiAkYWNfaGF2ZV9k ZWNsDQpfQUNFT0YNCg0KDQogIGNhc2UgIiRnbF9jdl9mdW5jX3NucHJpbnRmX3JldHZhbF9jOTki IGluDQogICAgKnllcykNCg0KJGFzX2VjaG8gIiNkZWZpbmUgSEFWRV9TTlBSSU5URl9SRVRWQUxf Qzk5IDEiID4+Y29uZmRlZnMuaA0KDQogICAgICA7Ow0KICBlc2FjDQoNCg0KDQoNCg0KICAgICB7 ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIg cHJpbnRmIHN1cHBvcnRzIHNpemUgc3BlY2lmaWVycyBhcyBpbiBDOTkiID4mNQ0KJGFzX2VjaG9f biAiY2hlY2tpbmcgd2hldGhlciBwcmludGYgc3VwcG9ydHMgc2l6ZSBzcGVjaWZpZXJzIGFzIGlu IEM5OS4uLiAiID4mNjsgfQ0KaWYgJHtnbF9jdl9mdW5jX3ByaW50Zl9zaXplc19jOTkrOn0gZmFs c2U7IHRoZW4gOg0KICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNg0KZWxzZQ0KDQogICAgICBp ZiB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IHllczsgdGhlbiA6DQoNCiAgICAgICAgIGNhc2Ug IiRob3N0X29zIiBpbg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBHdWVzcyB5 ZXMgb24gZ2xpYmMgc3lzdGVtcy4NCiAgICAgICAgICAgKi1nbnUqKSAgICAgICAgICAgICAgIGds X2N2X2Z1bmNfcHJpbnRmX3NpemVzX2M5OT0iZ3Vlc3NpbmcgeWVzIjs7DQogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAjIEd1ZXNzIHllcyBvbiBGcmVlQlNEID49IDUuDQogICAgICAg ICAgIGZyZWVic2RbMS00XSopICAgICAgICBnbF9jdl9mdW5jX3ByaW50Zl9zaXplc19jOTk9Imd1 ZXNzaW5nIG5vIjs7DQogICAgICAgICAgIGZyZWVic2QqIHwga2ZyZWVic2QqKSBnbF9jdl9mdW5j X3ByaW50Zl9zaXplc19jOTk9Imd1ZXNzaW5nIHllcyI7Ow0KICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIyBHdWVzcyB5ZXMgb24gTWFjT1MgWCA+PSAxMC4zLg0KICAgICAgICAgICBk YXJ3aW5bMS02XS4qKSAgICAgICAgZ2xfY3ZfZnVuY19wcmludGZfc2l6ZXNfYzk5PSJndWVzc2lu ZyBubyI7Ow0KICAgICAgICAgICBkYXJ3aW4qKSAgICAgICAgICAgICAgZ2xfY3ZfZnVuY19wcmlu dGZfc2l6ZXNfYzk5PSJndWVzc2luZyB5ZXMiOzsNCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICMgR3Vlc3MgeWVzIG9uIE9wZW5CU0QgPj0gMy45Lg0KICAgICAgICAgICBvcGVuYnNk WzEtMl0uKiB8IG9wZW5ic2QzLlswLThdIHwgb3BlbmJzZDMuWzAtOF0uKikNCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGdsX2N2X2Z1bmNfcHJpbnRmX3NpemVzX2M5OT0iZ3Vlc3Np bmcgbm8iOzsNCiAgICAgICAgICAgb3BlbmJzZCopICAgICAgICAgICAgIGdsX2N2X2Z1bmNfcHJp bnRmX3NpemVzX2M5OT0iZ3Vlc3NpbmcgeWVzIjs7DQogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAjIEd1ZXNzIHllcyBvbiBTb2xhcmlzID49IDIuMTAuDQogICAgICAgICAgIHNvbGFy aXMyLlsxLTldWzAtOV0qKSBnbF9jdl9mdW5jX3ByaW50Zl9zaXplc19jOTk9Imd1ZXNzaW5nIHll cyI7Ow0KICAgICAgICAgICBzb2xhcmlzKikgICAgICAgICAgICAgZ2xfY3ZfZnVuY19wcmludGZf c2l6ZXNfYzk5PSJndWVzc2luZyBubyI7Ow0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIyBHdWVzcyB5ZXMgb24gTmV0QlNEID49IDMuDQogICAgICAgICAgIG5ldGJzZFsxLTJdKiB8 IG5ldGJzZGVsZlsxLTJdKiB8IG5ldGJzZGFvdXRbMS0yXSogfCBuZXRic2Rjb2ZmWzEtMl0qKQ0K ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2xfY3ZfZnVuY19wcmludGZfc2l6ZXNf Yzk5PSJndWVzc2luZyBubyI7Ow0KICAgICAgICAgICBuZXRic2QqKSAgICAgICAgICAgICAgZ2xf Y3ZfZnVuY19wcmludGZfc2l6ZXNfYzk5PSJndWVzc2luZyB5ZXMiOzsNCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICMgSWYgd2UgZG9uJ3Qga25vdywgYXNzdW1lIHRoZSB3b3JzdC4N CiAgICAgICAgICAgKikgICAgICAgICAgICAgICAgICAgIGdsX2N2X2Z1bmNfcHJpbnRmX3NpemVz X2M5OT0iZ3Vlc3Npbmcgbm8iOzsNCiAgICAgICAgIGVzYWMNCg0KZWxzZQ0KICBjYXQgY29uZmRl ZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0DQovKiBlbmQgY29uZmRlZnMuaC4gICov DQoNCiNpbmNsdWRlIDxzdGRkZWYuaD4NCiNpbmNsdWRlIDxzdGRpby5oPg0KI2luY2x1ZGUgPHN0 cmluZy5oPg0KI2luY2x1ZGUgPHN5cy90eXBlcy5oPg0KI2lmIEhBVkVfU1RESU5UX0hfV0lUSF9V SU5UTUFYDQojIGluY2x1ZGUgPHN0ZGludC5oPg0KI2VuZGlmDQojaWYgSEFWRV9JTlRUWVBFU19I X1dJVEhfVUlOVE1BWA0KIyBpbmNsdWRlIDxpbnR0eXBlcy5oPg0KI2VuZGlmDQpzdGF0aWMgY2hh ciBidWZbMTAwXTsNCmludCBtYWluICgpDQp7DQogIGludCByZXN1bHQgPSAwOw0KI2lmIEhBVkVf U1RESU5UX0hfV0lUSF9VSU5UTUFYIHx8IEhBVkVfSU5UVFlQRVNfSF9XSVRIX1VJTlRNQVgNCiAg YnVmWzBdID0gJ1wwJzsNCiAgaWYgKHNwcmludGYgKGJ1ZiwgIiVqdSAlZCIsICh1aW50bWF4X3Qp IDEyMzQ1NjcxLCAzMywgNDQsIDU1KSA8IDANCiAgICAgIHx8IHN0cmNtcCAoYnVmLCAiMTIzNDU2 NzEgMzMiKSAhPSAwKQ0KICAgIHJlc3VsdCB8PSAxOw0KI2VuZGlmDQogIGJ1ZlswXSA9ICdcMCc7 DQogIGlmIChzcHJpbnRmIChidWYsICIlenUgJWQiLCAoc2l6ZV90KSAxMjM0NTY3MiwgMzMsIDQ0 LCA1NSkgPCAwDQogICAgICB8fCBzdHJjbXAgKGJ1ZiwgIjEyMzQ1NjcyIDMzIikgIT0gMCkNCiAg ICByZXN1bHQgfD0gMjsNCiAgYnVmWzBdID0gJ1wwJzsNCiAgaWYgKHNwcmludGYgKGJ1ZiwgIiV0 dSAlZCIsIChwdHJkaWZmX3QpIDEyMzQ1NjczLCAzMywgNDQsIDU1KSA8IDANCiAgICAgIHx8IHN0 cmNtcCAoYnVmLCAiMTIzNDU2NzMgMzMiKSAhPSAwKQ0KICAgIHJlc3VsdCB8PSA0Ow0KICBidWZb MF0gPSAnXDAnOw0KICBpZiAoc3ByaW50ZiAoYnVmLCAiJUxnICVkIiwgKGxvbmcgZG91YmxlKSAx LjUsIDMzLCA0NCwgNTUpIDwgMA0KICAgICAgfHwgc3RyY21wIChidWYsICIxLjUgMzMiKSAhPSAw KQ0KICAgIHJlc3VsdCB8PSA4Ow0KICByZXR1cm4gcmVzdWx0Ow0KfQ0KX0FDRU9GDQppZiBhY19m bl9jX3RyeV9ydW4gIiRMSU5FTk8iOyB0aGVuIDoNCiAgZ2xfY3ZfZnVuY19wcmludGZfc2l6ZXNf Yzk5PXllcw0KZWxzZQ0KICBnbF9jdl9mdW5jX3ByaW50Zl9zaXplc19jOTk9bm8NCmZpDQpybSAt ZiBjb3JlICouY29yZSBjb3JlLmNvbmZ0ZXN0LiogZ21vbi5vdXQgYmIub3V0IGNvbmZ0ZXN0JGFj X2V4ZWV4dCBcDQogIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuYmVhbSBjb25mdGVzdC4k YWNfZXh0DQpmaQ0KDQoNCmZpDQp7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVO T306IHJlc3VsdDogJGdsX2N2X2Z1bmNfcHJpbnRmX3NpemVzX2M5OSIgPiY1DQokYXNfZWNobyAi JGdsX2N2X2Z1bmNfcHJpbnRmX3NpemVzX2M5OSIgPiY2OyB9DQoNCg0KDQogICAgIHsgJGFzX2Vj aG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciBwcmludGYg c3VwcG9ydHMgJ2xvbmcgZG91YmxlJyBhcmd1bWVudHMiID4mNQ0KJGFzX2VjaG9fbiAiY2hlY2tp bmcgd2hldGhlciBwcmludGYgc3VwcG9ydHMgJ2xvbmcgZG91YmxlJyBhcmd1bWVudHMuLi4gIiA+ JjY7IH0NCmlmICR7Z2xfY3ZfZnVuY19wcmludGZfbG9uZ19kb3VibGUrOn0gZmFsc2U7IHRoZW4g Og0KICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNg0KZWxzZQ0KDQogICAgICBpZiB0ZXN0ICIk Y3Jvc3NfY29tcGlsaW5nIiA9IHllczsgdGhlbiA6DQoNCiAgICAgICAgIGNhc2UgIiRob3N0X29z IiBpbg0KICAgICAgICAgICBiZW9zKikgICAgICAgIGdsX2N2X2Z1bmNfcHJpbnRmX2xvbmdfZG91 YmxlPSJndWVzc2luZyBubyI7Ow0KICAgICAgICAgICBtaW5ndyogfCBwdyopIGdsX2N2X2Z1bmNf cHJpbnRmX2xvbmdfZG91YmxlPSJndWVzc2luZyBubyI7Ow0KICAgICAgICAgICAqKSAgICAgICAg ICAgIGdsX2N2X2Z1bmNfcHJpbnRmX2xvbmdfZG91YmxlPSJndWVzc2luZyB5ZXMiOzsNCiAgICAg ICAgIGVzYWMNCg0KZWxzZQ0KICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4k YWNfZXh0DQovKiBlbmQgY29uZmRlZnMuaC4gICovDQoNCiNpbmNsdWRlIDxzdGRpby5oPg0KI2lu Y2x1ZGUgPHN0cmluZy5oPg0Kc3RhdGljIGNoYXIgYnVmWzEwMDAwXTsNCmludCBtYWluICgpDQp7 DQogIGludCByZXN1bHQgPSAwOw0KICBidWZbMF0gPSAnXDAnOw0KICBpZiAoc3ByaW50ZiAoYnVm LCAiJUxmICVkIiwgMS43NUwsIDMzLCA0NCwgNTUpIDwgMA0KICAgICAgfHwgc3RyY21wIChidWYs ICIxLjc1MDAwMCAzMyIpICE9IDApDQogICAgcmVzdWx0IHw9IDE7DQogIGJ1ZlswXSA9ICdcMCc7 DQogIGlmIChzcHJpbnRmIChidWYsICIlTGUgJWQiLCAxLjc1TCwgMzMsIDQ0LCA1NSkgPCAwDQog ICAgICB8fCBzdHJjbXAgKGJ1ZiwgIjEuNzUwMDAwZSswMCAzMyIpICE9IDApDQogICAgcmVzdWx0 IHw9IDI7DQogIGJ1ZlswXSA9ICdcMCc7DQogIGlmIChzcHJpbnRmIChidWYsICIlTGcgJWQiLCAx Ljc1TCwgMzMsIDQ0LCA1NSkgPCAwDQogICAgICB8fCBzdHJjbXAgKGJ1ZiwgIjEuNzUgMzMiKSAh PSAwKQ0KICAgIHJlc3VsdCB8PSA0Ow0KICByZXR1cm4gcmVzdWx0Ow0KfQ0KX0FDRU9GDQppZiBh Y19mbl9jX3RyeV9ydW4gIiRMSU5FTk8iOyB0aGVuIDoNCiAgZ2xfY3ZfZnVuY19wcmludGZfbG9u Z19kb3VibGU9eWVzDQplbHNlDQogIGdsX2N2X2Z1bmNfcHJpbnRmX2xvbmdfZG91YmxlPW5vDQpm aQ0Kcm0gLWYgY29yZSAqLmNvcmUgY29yZS5jb25mdGVzdC4qIGdtb24ub3V0IGJiLm91dCBjb25m dGVzdCRhY19leGVleHQgXA0KICBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LmJlYW0gY29u ZnRlc3QuJGFjX2V4dA0KZmkNCg0KDQpmaQ0KeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5v LSRMSU5FTk99OiByZXN1bHQ6ICRnbF9jdl9mdW5jX3ByaW50Zl9sb25nX2RvdWJsZSIgPiY1DQok YXNfZWNobyAiJGdsX2N2X2Z1bmNfcHJpbnRmX2xvbmdfZG91YmxlIiA+JjY7IH0NCg0KDQoNCiAg ICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0 aGVyIHByaW50ZiBzdXBwb3J0cyBpbmZpbml0ZSAnZG91YmxlJyBhcmd1bWVudHMiID4mNQ0KJGFz X2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciBwcmludGYgc3VwcG9ydHMgaW5maW5pdGUgJ2RvdWJs ZScgYXJndW1lbnRzLi4uICIgPiY2OyB9DQppZiAke2dsX2N2X2Z1bmNfcHJpbnRmX2luZmluaXRl Kzp9IGZhbHNlOyB0aGVuIDoNCiAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYNCmVsc2UNCg0K ICAgICAgaWYgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgPSB5ZXM7IHRoZW4gOg0KDQogICAgICAg ICBjYXNlICIkaG9zdF9vcyIgaW4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMg R3Vlc3MgeWVzIG9uIGdsaWJjIHN5c3RlbXMuDQogICAgICAgICAgICotZ251KikgICAgICAgICAg ICAgICBnbF9jdl9mdW5jX3ByaW50Zl9pbmZpbml0ZT0iZ3Vlc3NpbmcgeWVzIjs7DQogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAjIEd1ZXNzIHllcyBvbiBGcmVlQlNEID49IDYuDQog ICAgICAgICAgIGZyZWVic2RbMS01XSopICAgICAgICBnbF9jdl9mdW5jX3ByaW50Zl9pbmZpbml0 ZT0iZ3Vlc3Npbmcgbm8iOzsNCiAgICAgICAgICAgZnJlZWJzZCogfCBrZnJlZWJzZCopIGdsX2N2 X2Z1bmNfcHJpbnRmX2luZmluaXRlPSJndWVzc2luZyB5ZXMiOzsNCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICMgR3Vlc3MgeWVzIG9uIE1hY09TIFggPj0gMTAuMy4NCiAgICAgICAg ICAgZGFyd2luWzEtNl0uKikgICAgICAgIGdsX2N2X2Z1bmNfcHJpbnRmX2luZmluaXRlPSJndWVz c2luZyBubyI7Ow0KICAgICAgICAgICBkYXJ3aW4qKSAgICAgICAgICAgICAgZ2xfY3ZfZnVuY19w cmludGZfaW5maW5pdGU9Imd1ZXNzaW5nIHllcyI7Ow0KICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIyBHdWVzcyB5ZXMgb24gSFAtVVggPj0gMTEuDQogICAgICAgICAgIGhwdXhbNy05 XSogfCBocHV4MTAqKSBnbF9jdl9mdW5jX3ByaW50Zl9pbmZpbml0ZT0iZ3Vlc3Npbmcgbm8iOzsN CiAgICAgICAgICAgaHB1eCopICAgICAgICAgICAgICAgIGdsX2N2X2Z1bmNfcHJpbnRmX2luZmlu aXRlPSJndWVzc2luZyB5ZXMiOzsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMg R3Vlc3MgeWVzIG9uIE5ldEJTRCA+PSAzLg0KICAgICAgICAgICBuZXRic2RbMS0yXSogfCBuZXRi c2RlbGZbMS0yXSogfCBuZXRic2Rhb3V0WzEtMl0qIHwgbmV0YnNkY29mZlsxLTJdKikNCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsX2N2X2Z1bmNfcHJpbnRmX2luZmluaXRlPSJn dWVzc2luZyBubyI7Ow0KICAgICAgICAgICBuZXRic2QqKSAgICAgICAgICAgICAgZ2xfY3ZfZnVu Y19wcmludGZfaW5maW5pdGU9Imd1ZXNzaW5nIHllcyI7Ow0KICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIyBHdWVzcyB5ZXMgb24gQmVPUy4NCiAgICAgICAgICAgYmVvcyopICAgICAg ICAgICAgICAgIGdsX2N2X2Z1bmNfcHJpbnRmX2luZmluaXRlPSJndWVzc2luZyB5ZXMiOzsNCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgSWYgd2UgZG9uJ3Qga25vdywgYXNzdW1l IHRoZSB3b3JzdC4NCiAgICAgICAgICAgKikgICAgICAgICAgICAgICAgICAgIGdsX2N2X2Z1bmNf cHJpbnRmX2luZmluaXRlPSJndWVzc2luZyBubyI7Ow0KICAgICAgICAgZXNhYw0KDQplbHNlDQog IGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQNCi8qIGVuZCBjb25m ZGVmcy5oLiAgKi8NCg0KI2luY2x1ZGUgPHN0ZGlvLmg+DQojaW5jbHVkZSA8c3RyaW5nLmg+DQpz dGF0aWMgaW50DQpzdHJpc25hbiAoY29uc3QgY2hhciAqc3RyaW5nLCBzaXplX3Qgc3RhcnRfaW5k ZXgsIHNpemVfdCBlbmRfaW5kZXgpDQp7DQogIGlmIChzdGFydF9pbmRleCA8IGVuZF9pbmRleCkN CiAgICB7DQogICAgICBpZiAoc3RyaW5nW3N0YXJ0X2luZGV4XSA9PSAnLScpDQogICAgICAgIHN0 YXJ0X2luZGV4Kys7DQogICAgICBpZiAoc3RhcnRfaW5kZXggKyAzIDw9IGVuZF9pbmRleA0KICAg ICAgICAgICYmIG1lbWNtcCAoc3RyaW5nICsgc3RhcnRfaW5kZXgsICJuYW4iLCAzKSA9PSAwKQ0K ICAgICAgICB7DQogICAgICAgICAgc3RhcnRfaW5kZXggKz0gMzsNCiAgICAgICAgICBpZiAoc3Rh cnRfaW5kZXggPT0gZW5kX2luZGV4DQogICAgICAgICAgICAgIHx8IChzdHJpbmdbc3RhcnRfaW5k ZXhdID09ICcoJyAmJiBzdHJpbmdbZW5kX2luZGV4IC0gMV0gPT0gJyknKSkNCiAgICAgICAgICAg IHJldHVybiAxOw0KICAgICAgICB9DQogICAgfQ0KICByZXR1cm4gMDsNCn0NCnN0YXRpYyBpbnQN CmhhdmVfbWludXNfemVybyAoKQ0Kew0KICBzdGF0aWMgZG91YmxlIHBsdXNfemVybyA9IDAuMDsN CiAgZG91YmxlIG1pbnVzX3plcm8gPSAtIHBsdXNfemVybzsNCiAgcmV0dXJuIG1lbWNtcCAoJnBs dXNfemVybywgJm1pbnVzX3plcm8sIHNpemVvZiAoZG91YmxlKSkgIT0gMDsNCn0NCnN0YXRpYyBj aGFyIGJ1ZlsxMDAwMF07DQpzdGF0aWMgZG91YmxlIHplcm8gPSAwLjA7DQppbnQgbWFpbiAoKQ0K ew0KICBpbnQgcmVzdWx0ID0gMDsNCiAgaWYgKHNwcmludGYgKGJ1ZiwgIiVmIiwgMS4wIC8gMC4w KSA8IDANCiAgICAgIHx8IChzdHJjbXAgKGJ1ZiwgImluZiIpICE9IDAgJiYgc3RyY21wIChidWYs ICJpbmZpbml0eSIpICE9IDApKQ0KICAgIHJlc3VsdCB8PSAxOw0KICBpZiAoc3ByaW50ZiAoYnVm LCAiJWYiLCAtMS4wIC8gMC4wKSA8IDANCiAgICAgIHx8IChzdHJjbXAgKGJ1ZiwgIi1pbmYiKSAh PSAwICYmIHN0cmNtcCAoYnVmLCAiLWluZmluaXR5IikgIT0gMCkpDQogICAgcmVzdWx0IHw9IDE7 DQogIGlmIChzcHJpbnRmIChidWYsICIlZiIsIHplcm8gLyB6ZXJvKSA8IDANCiAgICAgIHx8ICFz dHJpc25hbiAoYnVmLCAwLCBzdHJsZW4gKGJ1ZikpKQ0KICAgIHJlc3VsdCB8PSAyOw0KICBpZiAo c3ByaW50ZiAoYnVmLCAiJWUiLCAxLjAgLyAwLjApIDwgMA0KICAgICAgfHwgKHN0cmNtcCAoYnVm LCAiaW5mIikgIT0gMCAmJiBzdHJjbXAgKGJ1ZiwgImluZmluaXR5IikgIT0gMCkpDQogICAgcmVz dWx0IHw9IDQ7DQogIGlmIChzcHJpbnRmIChidWYsICIlZSIsIC0xLjAgLyAwLjApIDwgMA0KICAg ICAgfHwgKHN0cmNtcCAoYnVmLCAiLWluZiIpICE9IDAgJiYgc3RyY21wIChidWYsICItaW5maW5p dHkiKSAhPSAwKSkNCiAgICByZXN1bHQgfD0gNDsNCiAgaWYgKHNwcmludGYgKGJ1ZiwgIiVlIiwg emVybyAvIHplcm8pIDwgMA0KICAgICAgfHwgIXN0cmlzbmFuIChidWYsIDAsIHN0cmxlbiAoYnVm KSkpDQogICAgcmVzdWx0IHw9IDg7DQogIGlmIChzcHJpbnRmIChidWYsICIlZyIsIDEuMCAvIDAu MCkgPCAwDQogICAgICB8fCAoc3RyY21wIChidWYsICJpbmYiKSAhPSAwICYmIHN0cmNtcCAoYnVm LCAiaW5maW5pdHkiKSAhPSAwKSkNCiAgICByZXN1bHQgfD0gMTY7DQogIGlmIChzcHJpbnRmIChi dWYsICIlZyIsIC0xLjAgLyAwLjApIDwgMA0KICAgICAgfHwgKHN0cmNtcCAoYnVmLCAiLWluZiIp ICE9IDAgJiYgc3RyY21wIChidWYsICItaW5maW5pdHkiKSAhPSAwKSkNCiAgICByZXN1bHQgfD0g MTY7DQogIGlmIChzcHJpbnRmIChidWYsICIlZyIsIHplcm8gLyB6ZXJvKSA8IDANCiAgICAgIHx8 ICFzdHJpc25hbiAoYnVmLCAwLCBzdHJsZW4gKGJ1ZikpKQ0KICAgIHJlc3VsdCB8PSAzMjsNCiAg LyogVGhpcyB0ZXN0IGZhaWxzIG9uIEhQLVVYIDEwLjIwLiAgKi8NCiAgaWYgKGhhdmVfbWludXNf emVybyAoKSkNCiAgICBpZiAoc3ByaW50ZiAoYnVmLCAiJWciLCAtIHplcm8pIDwgMA0KICAgICAg ICB8fCBzdHJjbXAgKGJ1ZiwgIi0wIikgIT0gMCkNCiAgICByZXN1bHQgfD0gNjQ7DQogIHJldHVy biByZXN1bHQ7DQp9DQpfQUNFT0YNCmlmIGFjX2ZuX2NfdHJ5X3J1biAiJExJTkVOTyI7IHRoZW4g Og0KICBnbF9jdl9mdW5jX3ByaW50Zl9pbmZpbml0ZT15ZXMNCmVsc2UNCiAgZ2xfY3ZfZnVuY19w cmludGZfaW5maW5pdGU9bm8NCmZpDQpybSAtZiBjb3JlICouY29yZSBjb3JlLmNvbmZ0ZXN0Liog Z21vbi5vdXQgYmIub3V0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCBcDQogIGNvbmZ0ZXN0LiRhY19vYmpl eHQgY29uZnRlc3QuYmVhbSBjb25mdGVzdC4kYWNfZXh0DQpmaQ0KDQoNCmZpDQp7ICRhc19lY2hv ICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGdsX2N2X2Z1bmNfcHJpbnRm X2luZmluaXRlIiA+JjUNCiRhc19lY2hvICIkZ2xfY3ZfZnVuY19wcmludGZfaW5maW5pdGUiID4m NjsgfQ0KDQoNCg0KDQoNCiAgICAgICAgIGlmIHRlc3QgLW4gIiRnbF9wcmludGZfc2FmZSI7IHRo ZW4NCg0KJGFzX2VjaG8gIiNkZWZpbmUgQ0hFQ0tfUFJJTlRGX1NBRkUgMSIgPj5jb25mZGVmcy5o DQoNCiAgZmkNCiAgY2FzZSAiJGdsX2N2X2Z1bmNfcHJpbnRmX2xvbmdfZG91YmxlIiBpbg0KICAg ICp5ZXMpDQogICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNo ZWNraW5nIHdoZXRoZXIgcHJpbnRmIHN1cHBvcnRzIGluZmluaXRlICdsb25nIGRvdWJsZScgYXJn dW1lbnRzIiA+JjUNCiRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgcHJpbnRmIHN1cHBvcnRz IGluZmluaXRlICdsb25nIGRvdWJsZScgYXJndW1lbnRzLi4uICIgPiY2OyB9DQppZiAke2dsX2N2 X2Z1bmNfcHJpbnRmX2luZmluaXRlX2xvbmdfZG91YmxlKzp9IGZhbHNlOyB0aGVuIDoNCiAgJGFz X2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYNCmVsc2UNCg0KICAgICAgICAgIGlmIHRlc3QgIiRjcm9z c19jb21waWxpbmciID0geWVzOyB0aGVuIDoNCg0KICAgICAgICAgICAgIGNhc2UgIiRob3N0X2Nw dSIgaW4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIEd1ZXNzIG5vIG9u IGlhNjQsIHg4Nl82NCwgaTM4Ni4NCiAgICAgICAgICAgICAgIGlhNjQgfCB4ODZfNjQgfCBpKjg2 KSBnbF9jdl9mdW5jX3ByaW50Zl9pbmZpbml0ZV9sb25nX2RvdWJsZT0iZ3Vlc3Npbmcgbm8iOzsN CiAgICAgICAgICAgICAgICopDQogICAgICAgICAgICAgICAgIGNhc2UgIiRob3N0X29zIiBpbg0K ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIEd1ZXNzIHllcyBvbiBn bGliYyBzeXN0ZW1zLg0KICAgICAgICAgICAgICAgICAgICotZ251KikgICAgICAgICAgICAgICBn bF9jdl9mdW5jX3ByaW50Zl9pbmZpbml0ZV9sb25nX2RvdWJsZT0iZ3Vlc3NpbmcgeWVzIjs7DQog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgR3Vlc3MgeWVzIG9uIEZy ZWVCU0QgPj0gNi4NCiAgICAgICAgICAgICAgICAgICBmcmVlYnNkWzEtNV0qKSAgICAgICAgZ2xf Y3ZfZnVuY19wcmludGZfaW5maW5pdGVfbG9uZ19kb3VibGU9Imd1ZXNzaW5nIG5vIjs7DQogICAg ICAgICAgICAgICAgICAgZnJlZWJzZCogfCBrZnJlZWJzZCopIGdsX2N2X2Z1bmNfcHJpbnRmX2lu ZmluaXRlX2xvbmdfZG91YmxlPSJndWVzc2luZyB5ZXMiOzsNCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIyBHdWVzcyB5ZXMgb24gSFAtVVggPj0gMTEuDQogICAgICAg ICAgICAgICAgICAgaHB1eFs3LTldKiB8IGhwdXgxMCopIGdsX2N2X2Z1bmNfcHJpbnRmX2luZmlu aXRlX2xvbmdfZG91YmxlPSJndWVzc2luZyBubyI7Ow0KICAgICAgICAgICAgICAgICAgIGhwdXgq KSAgICAgICAgICAgICAgICBnbF9jdl9mdW5jX3ByaW50Zl9pbmZpbml0ZV9sb25nX2RvdWJsZT0i Z3Vlc3NpbmcgeWVzIjs7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICMgSWYgd2UgZG9uJ3Qga25vdywgYXNzdW1lIHRoZSB3b3JzdC4NCiAgICAgICAgICAgICAgICAg ICAqKSAgICAgICAgICAgICAgICAgICAgZ2xfY3ZfZnVuY19wcmludGZfaW5maW5pdGVfbG9uZ19k b3VibGU9Imd1ZXNzaW5nIG5vIjs7DQogICAgICAgICAgICAgICAgIGVzYWMNCiAgICAgICAgICAg ICAgICAgOzsNCiAgICAgICAgICAgICBlc2FjDQoNCmVsc2UNCiAgY2F0IGNvbmZkZWZzLmggLSA8 PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dA0KLyogZW5kIGNvbmZkZWZzLmguICAqLw0KDQoNCiNp bmNsdWRlIDxzdGRsaWIuaD4NCiNpZiBkZWZpbmVkIF9fTUFDSF9fICYmIGRlZmluZWQgX19BUFBM RV9fDQovKiBBdm9pZCBhIGNyYXNoIG9uIE1hY09TIFguICAqLw0KI2luY2x1ZGUgPG1hY2gvbWFj aC5oPg0KI2luY2x1ZGUgPG1hY2gvbWFjaF9lcnJvci5oPg0KI2luY2x1ZGUgPG1hY2gvdGhyZWFk X3N0YXR1cy5oPg0KI2luY2x1ZGUgPG1hY2gvZXhjZXB0aW9uLmg+DQojaW5jbHVkZSA8bWFjaC90 YXNrLmg+DQojaW5jbHVkZSA8cHRocmVhZC5oPg0KLyogVGhlIGV4Y2VwdGlvbiBwb3J0IG9uIHdo aWNoIG91ciB0aHJlYWQgbGlzdGVucy4gICovDQpzdGF0aWMgbWFjaF9wb3J0X3Qgb3VyX2V4Y2Vw dGlvbl9wb3J0Ow0KLyogVGhlIG1haW4gZnVuY3Rpb24gb2YgdGhlIHRocmVhZCBsaXN0ZW5pbmcg Zm9yIGV4Y2VwdGlvbnMgb2YgdHlwZQ0KICAgRVhDX0JBRF9BQ0NFU1MuICAqLw0Kc3RhdGljIHZv aWQgKg0KbWFjaF9leGNlcHRpb25fdGhyZWFkICh2b2lkICphcmcpDQp7DQogIC8qIEJ1ZmZlciBm b3IgYSBtZXNzYWdlIHRvIGJlIHJlY2VpdmVkLiAgKi8NCiAgc3RydWN0IHsNCiAgICBtYWNoX21z Z19oZWFkZXJfdCBoZWFkOw0KICAgIG1hY2hfbXNnX2JvZHlfdCBtc2doX2JvZHk7DQogICAgY2hh ciBkYXRhWzEwMjRdOw0KICB9IG1zZzsNCiAgbWFjaF9tc2dfcmV0dXJuX3QgcmV0dmFsOw0KICAv KiBXYWl0IGZvciBhIG1lc3NhZ2Ugb24gdGhlIGV4Y2VwdGlvbiBwb3J0LiAgKi8NCiAgcmV0dmFs ID0gbWFjaF9tc2cgKCZtc2cuaGVhZCwgTUFDSF9SQ1ZfTVNHIHwgTUFDSF9SQ1ZfTEFSR0UsIDAs IHNpemVvZiAobXNnKSwNCiAgICAgICAgICAgICAgICAgICAgIG91cl9leGNlcHRpb25fcG9ydCwg TUFDSF9NU0dfVElNRU9VVF9OT05FLCBNQUNIX1BPUlRfTlVMTCk7DQogIGlmIChyZXR2YWwgIT0g TUFDSF9NU0dfU1VDQ0VTUykNCiAgICBhYm9ydCAoKTsNCiAgZXhpdCAoMSk7DQp9DQpzdGF0aWMg dm9pZA0Kbm9jcmFzaF9pbml0ICh2b2lkKQ0Kew0KICBtYWNoX3BvcnRfdCBzZWxmID0gbWFjaF90 YXNrX3NlbGYgKCk7DQogIC8qIEFsbG9jYXRlIGEgcG9ydCBvbiB3aGljaCB0aGUgdGhyZWFkIHNo YWxsIGxpc3RlbiBmb3IgZXhjZXB0aW9ucy4gICovDQogIGlmIChtYWNoX3BvcnRfYWxsb2NhdGUg KHNlbGYsIE1BQ0hfUE9SVF9SSUdIVF9SRUNFSVZFLCAmb3VyX2V4Y2VwdGlvbl9wb3J0KQ0KICAg ICAgPT0gS0VSTl9TVUNDRVNTKSB7DQogICAgLyogU2VlIGh0dHA6Ly93ZWIubWl0LmVkdS9kYXJ3 aW4vc3JjL21vZHVsZXMveG51L29zZm1rL21hbi9tYWNoX3BvcnRfaW5zZXJ0X3JpZ2h0Lmh0bWwu ICAqLw0KICAgIGlmIChtYWNoX3BvcnRfaW5zZXJ0X3JpZ2h0IChzZWxmLCBvdXJfZXhjZXB0aW9u X3BvcnQsIG91cl9leGNlcHRpb25fcG9ydCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgTUFDSF9NU0dfVFlQRV9NQUtFX1NFTkQpDQogICAgICAgID09IEtFUk5fU1VDQ0VTUykgew0K ICAgICAgLyogVGhlIGV4Y2VwdGlvbnMgd2Ugd2FudCB0byBjYXRjaC4gIE9ubHkgRVhDX0JBRF9B Q0NFU1MgaXMgaW50ZXJlc3RpbmcNCiAgICAgICAgIGZvciB1cy4gICovDQogICAgICBleGNlcHRp b25fbWFza190IG1hc2sgPSBFWENfTUFTS19CQURfQUNDRVNTOw0KICAgICAgLyogQ3JlYXRlIHRo ZSB0aHJlYWQgbGlzdGVuaW5nIG9uIHRoZSBleGNlcHRpb24gcG9ydC4gICovDQogICAgICBwdGhy ZWFkX2F0dHJfdCBhdHRyOw0KICAgICAgcHRocmVhZF90IHRocmVhZDsNCiAgICAgIGlmIChwdGhy ZWFkX2F0dHJfaW5pdCAoJmF0dHIpID09IDANCiAgICAgICAgICAmJiBwdGhyZWFkX2F0dHJfc2V0 ZGV0YWNoc3RhdGUgKCZhdHRyLCBQVEhSRUFEX0NSRUFURV9ERVRBQ0hFRCkgPT0gMA0KICAgICAg ICAgICYmIHB0aHJlYWRfY3JlYXRlICgmdGhyZWFkLCAmYXR0ciwgbWFjaF9leGNlcHRpb25fdGhy ZWFkLCBOVUxMKSA9PSAwKSB7DQogICAgICAgIHB0aHJlYWRfYXR0cl9kZXN0cm95ICgmYXR0cik7 DQogICAgICAgIC8qIFJlcGxhY2UgdGhlIGV4Y2VwdGlvbiBwb3J0IGluZm8gZm9yIHRoZXNlIGV4 Y2VwdGlvbnMgd2l0aCBvdXIgb3duLg0KICAgICAgICAgICBOb3RlIHRoYXQgd2UgcmVwbGFjZSB0 aGUgZXhjZXB0aW9uIHBvcnQgZm9yIHRoZSBlbnRpcmUgdGFzaywgbm90IG9ubHkNCiAgICAgICAg ICAgZm9yIGEgcGFydGljdWxhciB0aHJlYWQuICBUaGlzIGhhcyB0aGUgZWZmZWN0IHRoYXQgd2hl biBvdXIgZXhjZXB0aW9uDQogICAgICAgICAgIHBvcnQgZ2V0cyB0aGUgbWVzc2FnZSwgdGhlIHRo cmVhZCBzcGVjaWZpYyBleGNlcHRpb24gcG9ydCBoYXMgYWxyZWFkeQ0KICAgICAgICAgICBiZWVu IGFza2VkLCBhbmQgd2UgZG9uJ3QgbmVlZCB0byBib3RoZXIgYWJvdXQgaXQuDQogICAgICAgICAg IFNlZSBodHRwOi8vd2ViLm1pdC5lZHUvZGFyd2luL3NyYy9tb2R1bGVzL3hudS9vc2Ztay9tYW4v dGFza19zZXRfZXhjZXB0aW9uX3BvcnRzLmh0bWwuICAqLw0KICAgICAgICB0YXNrX3NldF9leGNl cHRpb25fcG9ydHMgKHNlbGYsIG1hc2ssIG91cl9leGNlcHRpb25fcG9ydCwNCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBFWENFUFRJT05fREVGQVVMVCwgTUFDSElORV9USFJFQURf U1RBVEUpOw0KICAgICAgfQ0KICAgIH0NCiAgfQ0KfQ0KI2Vsc2UNCi8qIEF2b2lkIGEgY3Jhc2gg b24gUE9TSVggc3lzdGVtcy4gICovDQojaW5jbHVkZSA8c2lnbmFsLmg+DQovKiBBIFBPU0lYIHNp Z25hbCBoYW5kbGVyLiAgKi8NCnN0YXRpYyB2b2lkDQpleGNlcHRpb25faGFuZGxlciAoaW50IHNp ZykNCnsNCiAgZXhpdCAoMSk7DQp9DQpzdGF0aWMgdm9pZA0Kbm9jcmFzaF9pbml0ICh2b2lkKQ0K ew0KI2lmZGVmIFNJR1NFR1YNCiAgc2lnbmFsIChTSUdTRUdWLCBleGNlcHRpb25faGFuZGxlcik7 DQojZW5kaWYNCiNpZmRlZiBTSUdCVVMNCiAgc2lnbmFsIChTSUdCVVMsIGV4Y2VwdGlvbl9oYW5k bGVyKTsNCiNlbmRpZg0KfQ0KI2VuZGlmDQoNCiNpbmNsdWRlIDxmbG9hdC5oPg0KI2luY2x1ZGUg PHN0ZGlvLmg+DQojaW5jbHVkZSA8c3RyaW5nLmg+DQpzdGF0aWMgaW50DQpzdHJpc25hbiAoY29u c3QgY2hhciAqc3RyaW5nLCBzaXplX3Qgc3RhcnRfaW5kZXgsIHNpemVfdCBlbmRfaW5kZXgpDQp7 DQogIGlmIChzdGFydF9pbmRleCA8IGVuZF9pbmRleCkNCiAgICB7DQogICAgICBpZiAoc3RyaW5n W3N0YXJ0X2luZGV4XSA9PSAnLScpDQogICAgICAgIHN0YXJ0X2luZGV4Kys7DQogICAgICBpZiAo c3RhcnRfaW5kZXggKyAzIDw9IGVuZF9pbmRleA0KICAgICAgICAgICYmIG1lbWNtcCAoc3RyaW5n ICsgc3RhcnRfaW5kZXgsICJuYW4iLCAzKSA9PSAwKQ0KICAgICAgICB7DQogICAgICAgICAgc3Rh cnRfaW5kZXggKz0gMzsNCiAgICAgICAgICBpZiAoc3RhcnRfaW5kZXggPT0gZW5kX2luZGV4DQog ICAgICAgICAgICAgIHx8IChzdHJpbmdbc3RhcnRfaW5kZXhdID09ICcoJyAmJiBzdHJpbmdbZW5k X2luZGV4IC0gMV0gPT0gJyknKSkNCiAgICAgICAgICAgIHJldHVybiAxOw0KICAgICAgICB9DQog ICAgfQ0KICByZXR1cm4gMDsNCn0NCnN0YXRpYyBjaGFyIGJ1ZlsxMDAwMF07DQpzdGF0aWMgbG9u ZyBkb3VibGUgemVyb0wgPSAwLjBMOw0KaW50IG1haW4gKCkNCnsNCiAgaW50IHJlc3VsdCA9IDA7 DQogIG5vY3Jhc2hfaW5pdCgpOw0KICBpZiAoc3ByaW50ZiAoYnVmLCAiJUxmIiwgMS4wTCAvIDAu MEwpIDwgMA0KICAgICAgfHwgKHN0cmNtcCAoYnVmLCAiaW5mIikgIT0gMCAmJiBzdHJjbXAgKGJ1 ZiwgImluZmluaXR5IikgIT0gMCkpDQogICAgcmVzdWx0IHw9IDE7DQogIGlmIChzcHJpbnRmIChi dWYsICIlTGYiLCAtMS4wTCAvIDAuMEwpIDwgMA0KICAgICAgfHwgKHN0cmNtcCAoYnVmLCAiLWlu ZiIpICE9IDAgJiYgc3RyY21wIChidWYsICItaW5maW5pdHkiKSAhPSAwKSkNCiAgICByZXN1bHQg fD0gMTsNCiAgaWYgKHNwcmludGYgKGJ1ZiwgIiVMZiIsIHplcm9MIC8gemVyb0wpIDwgMA0KICAg ICAgfHwgIXN0cmlzbmFuIChidWYsIDAsIHN0cmxlbiAoYnVmKSkpDQogICAgcmVzdWx0IHw9IDE7 DQogIGlmIChzcHJpbnRmIChidWYsICIlTGUiLCAxLjBMIC8gMC4wTCkgPCAwDQogICAgICB8fCAo c3RyY21wIChidWYsICJpbmYiKSAhPSAwICYmIHN0cmNtcCAoYnVmLCAiaW5maW5pdHkiKSAhPSAw KSkNCiAgICByZXN1bHQgfD0gMTsNCiAgaWYgKHNwcmludGYgKGJ1ZiwgIiVMZSIsIC0xLjBMIC8g MC4wTCkgPCAwDQogICAgICB8fCAoc3RyY21wIChidWYsICItaW5mIikgIT0gMCAmJiBzdHJjbXAg KGJ1ZiwgIi1pbmZpbml0eSIpICE9IDApKQ0KICAgIHJlc3VsdCB8PSAxOw0KICBpZiAoc3ByaW50 ZiAoYnVmLCAiJUxlIiwgemVyb0wgLyB6ZXJvTCkgPCAwDQogICAgICB8fCAhc3RyaXNuYW4gKGJ1 ZiwgMCwgc3RybGVuIChidWYpKSkNCiAgICByZXN1bHQgfD0gMTsNCiAgaWYgKHNwcmludGYgKGJ1 ZiwgIiVMZyIsIDEuMEwgLyAwLjBMKSA8IDANCiAgICAgIHx8IChzdHJjbXAgKGJ1ZiwgImluZiIp ICE9IDAgJiYgc3RyY21wIChidWYsICJpbmZpbml0eSIpICE9IDApKQ0KICAgIHJlc3VsdCB8PSAx Ow0KICBpZiAoc3ByaW50ZiAoYnVmLCAiJUxnIiwgLTEuMEwgLyAwLjBMKSA8IDANCiAgICAgIHx8 IChzdHJjbXAgKGJ1ZiwgIi1pbmYiKSAhPSAwICYmIHN0cmNtcCAoYnVmLCAiLWluZmluaXR5Iikg IT0gMCkpDQogICAgcmVzdWx0IHw9IDE7DQogIGlmIChzcHJpbnRmIChidWYsICIlTGciLCB6ZXJv TCAvIHplcm9MKSA8IDANCiAgICAgIHx8ICFzdHJpc25hbiAoYnVmLCAwLCBzdHJsZW4gKGJ1Zikp KQ0KICAgIHJlc3VsdCB8PSAxOw0KI2lmIENIRUNLX1BSSU5URl9TQUZFICYmICgoZGVmaW5lZCBf X2lhNjQgJiYgTERCTF9NQU5UX0RJRyA9PSA2NCkgfHwgKGRlZmluZWQgX194ODZfNjRfXyB8fCBk ZWZpbmVkIF9fYW1kNjRfXykgfHwgKGRlZmluZWQgX19pMzg2IHx8IGRlZmluZWQgX19pMzg2X18g fHwgZGVmaW5lZCBfSTM4NiB8fCBkZWZpbmVkIF9NX0lYODYgfHwgZGVmaW5lZCBfWDg2XykpDQov KiBSZXByZXNlbnRhdGlvbiBvZiBhbiA4MC1iaXQgJ2xvbmcgZG91YmxlJyBhcyBhbiBpbml0aWFs aXplciBmb3IgYSBzZXF1ZW5jZQ0KICAgb2YgJ3Vuc2lnbmVkIGludCcgd29yZHMuICAqLw0KIyBp ZmRlZiBXT1JEU19CSUdFTkRJQU4NCiMgIGRlZmluZSBMREJMODBfV09SRFMoZXhwb25lbnQsbWFu dGhpLG1hbnRsbykgXA0KICAgICB7ICgodW5zaWduZWQgaW50KSAoZXhwb25lbnQpIDw8IDE2KSB8 ICgodW5zaWduZWQgaW50KSAobWFudGhpKSA+PiAxNiksIFwNCiAgICAgICAoKHVuc2lnbmVkIGlu dCkgKG1hbnRoaSkgPDwgMTYpIHwgKHVuc2lnbmVkIGludCkgKG1hbnRsbykgPj4gMTYpLCAgICBc DQogICAgICAgKHVuc2lnbmVkIGludCkgKG1hbnRsbykgPDwgMTYgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgXA0KICAgICB9DQojIGVsc2UNCiMgIGRlZmluZSBMREJMODBf V09SRFMoZXhwb25lbnQsbWFudGhpLG1hbnRsbykgXA0KICAgICB7IG1hbnRsbywgbWFudGhpLCBl eHBvbmVudCB9DQojIGVuZGlmDQogIHsgLyogUXVpZXQgTmFOLiAgKi8NCiAgICBzdGF0aWMgdW5p b24geyB1bnNpZ25lZCBpbnQgd29yZFs0XTsgbG9uZyBkb3VibGUgdmFsdWU7IH0geCA9DQogICAg ICB7IExEQkw4MF9XT1JEUyAoMHhGRkZGLCAweEMzMzMzMzMzLCAweDAwMDAwMDAwKSB9Ow0KICAg IGlmIChzcHJpbnRmIChidWYsICIlTGYiLCB4LnZhbHVlKSA8IDANCiAgICAgICAgfHwgIXN0cmlz bmFuIChidWYsIDAsIHN0cmxlbiAoYnVmKSkpDQogICAgICByZXN1bHQgfD0gMjsNCiAgICBpZiAo c3ByaW50ZiAoYnVmLCAiJUxlIiwgeC52YWx1ZSkgPCAwDQogICAgICAgIHx8ICFzdHJpc25hbiAo YnVmLCAwLCBzdHJsZW4gKGJ1ZikpKQ0KICAgICAgcmVzdWx0IHw9IDI7DQogICAgaWYgKHNwcmlu dGYgKGJ1ZiwgIiVMZyIsIHgudmFsdWUpIDwgMA0KICAgICAgICB8fCAhc3RyaXNuYW4gKGJ1Ziwg MCwgc3RybGVuIChidWYpKSkNCiAgICAgIHJlc3VsdCB8PSAyOw0KICB9DQogIHsNCiAgICAvKiBT aWduYWxsaW5nIE5hTi4gICovDQogICAgc3RhdGljIHVuaW9uIHsgdW5zaWduZWQgaW50IHdvcmRb NF07IGxvbmcgZG91YmxlIHZhbHVlOyB9IHggPQ0KICAgICAgeyBMREJMODBfV09SRFMgKDB4RkZG RiwgMHg4MzMzMzMzMywgMHgwMDAwMDAwMCkgfTsNCiAgICBpZiAoc3ByaW50ZiAoYnVmLCAiJUxm IiwgeC52YWx1ZSkgPCAwDQogICAgICAgIHx8ICFzdHJpc25hbiAoYnVmLCAwLCBzdHJsZW4gKGJ1 ZikpKQ0KICAgICAgcmVzdWx0IHw9IDI7DQogICAgaWYgKHNwcmludGYgKGJ1ZiwgIiVMZSIsIHgu dmFsdWUpIDwgMA0KICAgICAgICB8fCAhc3RyaXNuYW4gKGJ1ZiwgMCwgc3RybGVuIChidWYpKSkN CiAgICAgIHJlc3VsdCB8PSAyOw0KICAgIGlmIChzcHJpbnRmIChidWYsICIlTGciLCB4LnZhbHVl KSA8IDANCiAgICAgICAgfHwgIXN0cmlzbmFuIChidWYsIDAsIHN0cmxlbiAoYnVmKSkpDQogICAg ICByZXN1bHQgfD0gMjsNCiAgfQ0KICB7IC8qIFBzZXVkby1OYU4uICAqLw0KICAgIHN0YXRpYyB1 bmlvbiB7IHVuc2lnbmVkIGludCB3b3JkWzRdOyBsb25nIGRvdWJsZSB2YWx1ZTsgfSB4ID0NCiAg ICAgIHsgTERCTDgwX1dPUkRTICgweEZGRkYsIDB4NDAwMDAwMDEsIDB4MDAwMDAwMDApIH07DQog ICAgaWYgKHNwcmludGYgKGJ1ZiwgIiVMZiIsIHgudmFsdWUpIDwgMA0KICAgICAgICB8fCAhc3Ry aXNuYW4gKGJ1ZiwgMCwgc3RybGVuIChidWYpKSkNCiAgICAgIHJlc3VsdCB8PSA0Ow0KICAgIGlm IChzcHJpbnRmIChidWYsICIlTGUiLCB4LnZhbHVlKSA8IDANCiAgICAgICAgfHwgIXN0cmlzbmFu IChidWYsIDAsIHN0cmxlbiAoYnVmKSkpDQogICAgICByZXN1bHQgfD0gNDsNCiAgICBpZiAoc3By aW50ZiAoYnVmLCAiJUxnIiwgeC52YWx1ZSkgPCAwDQogICAgICAgIHx8ICFzdHJpc25hbiAoYnVm LCAwLCBzdHJsZW4gKGJ1ZikpKQ0KICAgICAgcmVzdWx0IHw9IDQ7DQogIH0NCiAgeyAvKiBQc2V1 ZG8tSW5maW5pdHkuICAqLw0KICAgIHN0YXRpYyB1bmlvbiB7IHVuc2lnbmVkIGludCB3b3JkWzRd OyBsb25nIGRvdWJsZSB2YWx1ZTsgfSB4ID0NCiAgICAgIHsgTERCTDgwX1dPUkRTICgweEZGRkYs IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDApIH07DQogICAgaWYgKHNwcmludGYgKGJ1ZiwgIiVMZiIs IHgudmFsdWUpIDwgMA0KICAgICAgICB8fCAhc3RyaXNuYW4gKGJ1ZiwgMCwgc3RybGVuIChidWYp KSkNCiAgICAgIHJlc3VsdCB8PSA4Ow0KICAgIGlmIChzcHJpbnRmIChidWYsICIlTGUiLCB4LnZh bHVlKSA8IDANCiAgICAgICAgfHwgIXN0cmlzbmFuIChidWYsIDAsIHN0cmxlbiAoYnVmKSkpDQog ICAgICByZXN1bHQgfD0gODsNCiAgICBpZiAoc3ByaW50ZiAoYnVmLCAiJUxnIiwgeC52YWx1ZSkg PCAwDQogICAgICAgIHx8ICFzdHJpc25hbiAoYnVmLCAwLCBzdHJsZW4gKGJ1ZikpKQ0KICAgICAg cmVzdWx0IHw9IDg7DQogIH0NCiAgeyAvKiBQc2V1ZG8tWmVyby4gICovDQogICAgc3RhdGljIHVu aW9uIHsgdW5zaWduZWQgaW50IHdvcmRbNF07IGxvbmcgZG91YmxlIHZhbHVlOyB9IHggPQ0KICAg ICAgeyBMREJMODBfV09SRFMgKDB4NDAwNCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCkgfTsNCiAg ICBpZiAoc3ByaW50ZiAoYnVmLCAiJUxmIiwgeC52YWx1ZSkgPCAwDQogICAgICAgIHx8ICFzdHJp c25hbiAoYnVmLCAwLCBzdHJsZW4gKGJ1ZikpKQ0KICAgICAgcmVzdWx0IHw9IDE2Ow0KICAgIGlm IChzcHJpbnRmIChidWYsICIlTGUiLCB4LnZhbHVlKSA8IDANCiAgICAgICAgfHwgIXN0cmlzbmFu IChidWYsIDAsIHN0cmxlbiAoYnVmKSkpDQogICAgICByZXN1bHQgfD0gMTY7DQogICAgaWYgKHNw cmludGYgKGJ1ZiwgIiVMZyIsIHgudmFsdWUpIDwgMA0KICAgICAgICB8fCAhc3RyaXNuYW4gKGJ1 ZiwgMCwgc3RybGVuIChidWYpKSkNCiAgICAgIHJlc3VsdCB8PSAxNjsNCiAgfQ0KICB7IC8qIFVu bm9ybWFsaXplZCBudW1iZXIuICAqLw0KICAgIHN0YXRpYyB1bmlvbiB7IHVuc2lnbmVkIGludCB3 b3JkWzRdOyBsb25nIGRvdWJsZSB2YWx1ZTsgfSB4ID0NCiAgICAgIHsgTERCTDgwX1dPUkRTICgw eDQwMDAsIDB4NjMzMzMzMzMsIDB4MDAwMDAwMDApIH07DQogICAgaWYgKHNwcmludGYgKGJ1Ziwg IiVMZiIsIHgudmFsdWUpIDwgMA0KICAgICAgICB8fCAhc3RyaXNuYW4gKGJ1ZiwgMCwgc3RybGVu IChidWYpKSkNCiAgICAgIHJlc3VsdCB8PSAzMjsNCiAgICBpZiAoc3ByaW50ZiAoYnVmLCAiJUxl IiwgeC52YWx1ZSkgPCAwDQogICAgICAgIHx8ICFzdHJpc25hbiAoYnVmLCAwLCBzdHJsZW4gKGJ1 ZikpKQ0KICAgICAgcmVzdWx0IHw9IDMyOw0KICAgIGlmIChzcHJpbnRmIChidWYsICIlTGciLCB4 LnZhbHVlKSA8IDANCiAgICAgICAgfHwgIXN0cmlzbmFuIChidWYsIDAsIHN0cmxlbiAoYnVmKSkp DQogICAgICByZXN1bHQgfD0gMzI7DQogIH0NCiAgeyAvKiBQc2V1ZG8tRGVub3JtYWwuICAqLw0K ICAgIHN0YXRpYyB1bmlvbiB7IHVuc2lnbmVkIGludCB3b3JkWzRdOyBsb25nIGRvdWJsZSB2YWx1 ZTsgfSB4ID0NCiAgICAgIHsgTERCTDgwX1dPUkRTICgweDAwMDAsIDB4ODMzMzMzMzMsIDB4MDAw MDAwMDApIH07DQogICAgaWYgKHNwcmludGYgKGJ1ZiwgIiVMZiIsIHgudmFsdWUpIDwgMA0KICAg ICAgICB8fCAhc3RyaXNuYW4gKGJ1ZiwgMCwgc3RybGVuIChidWYpKSkNCiAgICAgIHJlc3VsdCB8 PSA2NDsNCiAgICBpZiAoc3ByaW50ZiAoYnVmLCAiJUxlIiwgeC52YWx1ZSkgPCAwDQogICAgICAg IHx8ICFzdHJpc25hbiAoYnVmLCAwLCBzdHJsZW4gKGJ1ZikpKQ0KICAgICAgcmVzdWx0IHw9IDY0 Ow0KICAgIGlmIChzcHJpbnRmIChidWYsICIlTGciLCB4LnZhbHVlKSA8IDANCiAgICAgICAgfHwg IXN0cmlzbmFuIChidWYsIDAsIHN0cmxlbiAoYnVmKSkpDQogICAgICByZXN1bHQgfD0gNjQ7DQog IH0NCiNlbmRpZg0KICByZXR1cm4gcmVzdWx0Ow0KfQ0KX0FDRU9GDQppZiBhY19mbl9jX3RyeV9y dW4gIiRMSU5FTk8iOyB0aGVuIDoNCiAgZ2xfY3ZfZnVuY19wcmludGZfaW5maW5pdGVfbG9uZ19k b3VibGU9eWVzDQplbHNlDQogIGdsX2N2X2Z1bmNfcHJpbnRmX2luZmluaXRlX2xvbmdfZG91Ymxl PW5vDQpmaQ0Kcm0gLWYgY29yZSAqLmNvcmUgY29yZS5jb25mdGVzdC4qIGdtb24ub3V0IGJiLm91 dCBjb25mdGVzdCRhY19leGVleHQgXA0KICBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LmJl YW0gY29uZnRlc3QuJGFjX2V4dA0KZmkNCg0KDQpmaQ0KeyAkYXNfZWNobyAiJGFzX21lOiR7YXNf bGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRnbF9jdl9mdW5jX3ByaW50Zl9pbmZpbml0ZV9sb25n X2RvdWJsZSIgPiY1DQokYXNfZWNobyAiJGdsX2N2X2Z1bmNfcHJpbnRmX2luZmluaXRlX2xvbmdf ZG91YmxlIiA+JjY7IH0NCiAgICAgIDs7DQogICAgKikNCiAgICAgIGdsX2N2X2Z1bmNfcHJpbnRm X2luZmluaXRlX2xvbmdfZG91YmxlPSJpcnJlbGV2YW50Ig0KICAgICAgOzsNCiAgZXNhYw0KDQoN Cg0KICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5n IHdoZXRoZXIgcHJpbnRmIHN1cHBvcnRzIHRoZSAnYScgYW5kICdBJyBkaXJlY3RpdmVzIiA+JjUN CiRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgcHJpbnRmIHN1cHBvcnRzIHRoZSAnYScgYW5k ICdBJyBkaXJlY3RpdmVzLi4uICIgPiY2OyB9DQppZiAke2dsX2N2X2Z1bmNfcHJpbnRmX2RpcmVj dGl2ZV9hKzp9IGZhbHNlOyB0aGVuIDoNCiAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYNCmVs c2UNCg0KICAgICAgaWYgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgPSB5ZXM7IHRoZW4gOg0KDQog ICAgICAgICBjYXNlICIkaG9zdF9vcyIgaW4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICMgR3Vlc3MgeWVzIG9uIGdsaWJjID49IDIuNSBzeXN0ZW1zLg0KICAgICAgICAgICAqLWdu dSopDQogICAgICAgICAgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFj X2V4dA0KLyogZW5kIGNvbmZkZWZzLmguICAqLw0KDQogICAgICAgICAgICAgICAjaW5jbHVkZSA8 ZmVhdHVyZXMuaD4NCiAgICAgICAgICAgICAgICNpZmRlZiBfX0dOVV9MSUJSQVJZX18NCiAgICAg ICAgICAgICAgICAjaWYgKChfX0dMSUJDX18gPT0gMiAmJiBfX0dMSUJDX01JTk9SX18gPj0gNSkg fHwgKF9fR0xJQkNfXyA+IDIpKSAmJiAhZGVmaW5lZCBfX1VDTElCQ19fDQogICAgICAgICAgICAg ICAgIEJaMjkwOA0KICAgICAgICAgICAgICAgICNlbmRpZg0KICAgICAgICAgICAgICAgI2VuZGlm DQoNCl9BQ0VPRg0KaWYgKGV2YWwgIiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCIpIDI+JjUgfA0K ICAkRUdSRVAgIkJaMjkwOCIgPi9kZXYvbnVsbCAyPiYxOyB0aGVuIDoNCiAgZ2xfY3ZfZnVuY19w cmludGZfZGlyZWN0aXZlX2E9Imd1ZXNzaW5nIHllcyINCmVsc2UNCiAgZ2xfY3ZfZnVuY19wcmlu dGZfZGlyZWN0aXZlX2E9Imd1ZXNzaW5nIG5vIg0KZmkNCnJtIC1mIGNvbmZ0ZXN0Kg0KDQogICAg ICAgICAgICAgOzsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgSWYgd2UgZG9u J3Qga25vdywgYXNzdW1lIHRoZSB3b3JzdC4NCiAgICAgICAgICAgKikgICAgICAgICAgICAgICAg ICAgIGdsX2N2X2Z1bmNfcHJpbnRmX2RpcmVjdGl2ZV9hPSJndWVzc2luZyBubyI7Ow0KICAgICAg ICAgZXNhYw0KDQplbHNlDQogIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRh Y19leHQNCi8qIGVuZCBjb25mZGVmcy5oLiAgKi8NCg0KI2luY2x1ZGUgPHN0ZGlvLmg+DQojaW5j bHVkZSA8c3RyaW5nLmg+DQpzdGF0aWMgY2hhciBidWZbMTAwXTsNCmludCBtYWluICgpDQp7DQog IGludCByZXN1bHQgPSAwOw0KICBpZiAoc3ByaW50ZiAoYnVmLCAiJWEgJWQiLCAzLjE0MTYwMTU2 MjUsIDMzLCA0NCwgNTUpIDwgMA0KICAgICAgfHwgKHN0cmNtcCAoYnVmLCAiMHgxLjkyMnArMSAz MyIpICE9IDANCiAgICAgICAgICAmJiBzdHJjbXAgKGJ1ZiwgIjB4My4yNDRwKzAgMzMiKSAhPSAw DQogICAgICAgICAgJiYgc3RyY21wIChidWYsICIweDYuNDg4cC0xIDMzIikgIT0gMA0KICAgICAg ICAgICYmIHN0cmNtcCAoYnVmLCAiMHhjLjkxcC0yIDMzIikgIT0gMCkpDQogICAgcmVzdWx0IHw9 IDE7DQogIGlmIChzcHJpbnRmIChidWYsICIlQSAlZCIsIC0zLjE0MTYwMTU2MjUsIDMzLCA0NCwg NTUpIDwgMA0KICAgICAgfHwgKHN0cmNtcCAoYnVmLCAiLTBYMS45MjJQKzEgMzMiKSAhPSAwDQog ICAgICAgICAgJiYgc3RyY21wIChidWYsICItMFgzLjI0NFArMCAzMyIpICE9IDANCiAgICAgICAg ICAmJiBzdHJjbXAgKGJ1ZiwgIi0wWDYuNDg4UC0xIDMzIikgIT0gMA0KICAgICAgICAgICYmIHN0 cmNtcCAoYnVmLCAiLTBYQy45MVAtMiAzMyIpICE9IDApKQ0KICAgIHJlc3VsdCB8PSAyOw0KICAv KiBUaGlzIGNhdGNoZXMgYSBGcmVlQlNEIDYuMSBidWc6IGl0IGRvZXNuJ3Qgcm91bmQuICAqLw0K ICBpZiAoc3ByaW50ZiAoYnVmLCAiJS4yYSAlZCIsIDEuNTEsIDMzLCA0NCwgNTUpIDwgMA0KICAg ICAgfHwgKHN0cmNtcCAoYnVmLCAiMHgxLjgzcCswIDMzIikgIT0gMA0KICAgICAgICAgICYmIHN0 cmNtcCAoYnVmLCAiMHgzLjA1cC0xIDMzIikgIT0gMA0KICAgICAgICAgICYmIHN0cmNtcCAoYnVm LCAiMHg2LjBhcC0yIDMzIikgIT0gMA0KICAgICAgICAgICYmIHN0cmNtcCAoYnVmLCAiMHhjLjE0 cC0zIDMzIikgIT0gMCkpDQogICAgcmVzdWx0IHw9IDQ7DQogIC8qIFRoaXMgY2F0Y2hlcyBhIEZy ZWVCU0QgNi4xIGJ1Zy4gIFNlZQ0KICAgICA8aHR0cDovL2xpc3RzLmdudS5vcmcvYXJjaGl2ZS9o dG1sL2J1Zy1nbnVsaWIvMjAwNy0wNC9tc2cwMDEwNy5odG1sPiAqLw0KICBpZiAoc3ByaW50ZiAo YnVmLCAiJTAxMGEgJWQiLCAxLjAgLyAwLjAsIDMzLCA0NCwgNTUpIDwgMA0KICAgICAgfHwgYnVm WzBdID09ICcwJykNCiAgICByZXN1bHQgfD0gODsNCiAgLyogVGhpcyBjYXRjaGVzIGEgTWFjT1Mg WCAxMC4zLjkgKERhcndpbiA3LjkpIGJ1Zy4gICovDQogIGlmIChzcHJpbnRmIChidWYsICIlLjFh IiwgMS45OTkpIDwgMA0KICAgICAgfHwgKHN0cmNtcCAoYnVmLCAiMHgxLjBwKzEiKSAhPSAwDQog ICAgICAgICAgJiYgc3RyY21wIChidWYsICIweDIuMHArMCIpICE9IDANCiAgICAgICAgICAmJiBz dHJjbXAgKGJ1ZiwgIjB4NC4wcC0xIikgIT0gMA0KICAgICAgICAgICYmIHN0cmNtcCAoYnVmLCAi MHg4LjBwLTIiKSAhPSAwKSkNCiAgICByZXN1bHQgfD0gMTY7DQogIC8qIFRoaXMgY2F0Y2hlcyB0 aGUgc2FtZSBNYWNPUyBYIDEwLjMuOSAoRGFyd2luIDcuOSkgYnVnIGFuZCBhbHNvIGENCiAgICAg Z2xpYmMgMi40IGJ1ZyA8aHR0cDovL3NvdXJjZXdhcmUub3JnL2J1Z3ppbGxhL3Nob3dfYnVnLmNn aT9pZD0yOTA4Pi4gICovDQogIGlmIChzcHJpbnRmIChidWYsICIlLjFMYSIsIDEuOTk5TCkgPCAw DQogICAgICB8fCAoc3RyY21wIChidWYsICIweDEuMHArMSIpICE9IDANCiAgICAgICAgICAmJiBz dHJjbXAgKGJ1ZiwgIjB4Mi4wcCswIikgIT0gMA0KICAgICAgICAgICYmIHN0cmNtcCAoYnVmLCAi MHg0LjBwLTEiKSAhPSAwDQogICAgICAgICAgJiYgc3RyY21wIChidWYsICIweDguMHAtMiIpICE9 IDApKQ0KICAgIHJlc3VsdCB8PSAzMjsNCiAgcmV0dXJuIHJlc3VsdDsNCn0NCl9BQ0VPRg0KaWYg YWNfZm5fY190cnlfcnVuICIkTElORU5PIjsgdGhlbiA6DQogIGdsX2N2X2Z1bmNfcHJpbnRmX2Rp cmVjdGl2ZV9hPXllcw0KZWxzZQ0KICBnbF9jdl9mdW5jX3ByaW50Zl9kaXJlY3RpdmVfYT1ubw0K ZmkNCnJtIC1mIGNvcmUgKi5jb3JlIGNvcmUuY29uZnRlc3QuKiBnbW9uLm91dCBiYi5vdXQgY29u ZnRlc3QkYWNfZXhlZXh0IFwNCiAgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC5iZWFtIGNv bmZ0ZXN0LiRhY19leHQNCmZpDQoNCg0KZmkNCnsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVu by0kTElORU5PfTogcmVzdWx0OiAkZ2xfY3ZfZnVuY19wcmludGZfZGlyZWN0aXZlX2EiID4mNQ0K JGFzX2VjaG8gIiRnbF9jdl9mdW5jX3ByaW50Zl9kaXJlY3RpdmVfYSIgPiY2OyB9DQoNCg0KDQog ICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hl dGhlciBwcmludGYgc3VwcG9ydHMgdGhlICdGJyBkaXJlY3RpdmUiID4mNQ0KJGFzX2VjaG9fbiAi Y2hlY2tpbmcgd2hldGhlciBwcmludGYgc3VwcG9ydHMgdGhlICdGJyBkaXJlY3RpdmUuLi4gIiA+ JjY7IH0NCmlmICR7Z2xfY3ZfZnVuY19wcmludGZfZGlyZWN0aXZlX2YrOn0gZmFsc2U7IHRoZW4g Og0KICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNg0KZWxzZQ0KDQogICAgICBpZiB0ZXN0ICIk Y3Jvc3NfY29tcGlsaW5nIiA9IHllczsgdGhlbiA6DQoNCiAgICAgICAgIGNhc2UgIiRob3N0X29z IiBpbg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBHdWVzcyB5ZXMgb24gZ2xp YmMgc3lzdGVtcy4NCiAgICAgICAgICAgKi1nbnUqKSAgICAgICAgICAgICAgIGdsX2N2X2Z1bmNf cHJpbnRmX2RpcmVjdGl2ZV9mPSJndWVzc2luZyB5ZXMiOzsNCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICMgR3Vlc3MgeWVzIG9uIEZyZWVCU0QgPj0gNi4NCiAgICAgICAgICAgZnJl ZWJzZFsxLTVdKikgICAgICAgIGdsX2N2X2Z1bmNfcHJpbnRmX2RpcmVjdGl2ZV9mPSJndWVzc2lu ZyBubyI7Ow0KICAgICAgICAgICBmcmVlYnNkKiB8IGtmcmVlYnNkKikgZ2xfY3ZfZnVuY19wcmlu dGZfZGlyZWN0aXZlX2Y9Imd1ZXNzaW5nIHllcyI7Ow0KICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIyBHdWVzcyB5ZXMgb24gTWFjT1MgWCA+PSAxMC4zLg0KICAgICAgICAgICBkYXJ3 aW5bMS02XS4qKSAgICAgICAgZ2xfY3ZfZnVuY19wcmludGZfZGlyZWN0aXZlX2Y9Imd1ZXNzaW5n IG5vIjs7DQogICAgICAgICAgIGRhcndpbiopICAgICAgICAgICAgICBnbF9jdl9mdW5jX3ByaW50 Zl9kaXJlY3RpdmVfZj0iZ3Vlc3NpbmcgeWVzIjs7DQogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAjIEd1ZXNzIHllcyBvbiBTb2xhcmlzID49IDIuMTAuDQogICAgICAgICAgIHNvbGFy aXMyLlsxLTldWzAtOV0qKSBnbF9jdl9mdW5jX3ByaW50Zl9zaXplc19jOTk9Imd1ZXNzaW5nIHll cyI7Ow0KICAgICAgICAgICBzb2xhcmlzKikgICAgICAgICAgICAgZ2xfY3ZfZnVuY19wcmludGZf c2l6ZXNfYzk5PSJndWVzc2luZyBubyI7Ow0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIyBJZiB3ZSBkb24ndCBrbm93LCBhc3N1bWUgdGhlIHdvcnN0Lg0KICAgICAgICAgICAqKSAg ICAgICAgICAgICAgICAgICAgZ2xfY3ZfZnVuY19wcmludGZfZGlyZWN0aXZlX2Y9Imd1ZXNzaW5n IG5vIjs7DQogICAgICAgICBlc2FjDQoNCmVsc2UNCiAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VP RiA+Y29uZnRlc3QuJGFjX2V4dA0KLyogZW5kIGNvbmZkZWZzLmguICAqLw0KDQojaW5jbHVkZSA8 c3RkaW8uaD4NCiNpbmNsdWRlIDxzdHJpbmcuaD4NCnN0YXRpYyBjaGFyIGJ1ZlsxMDBdOw0KaW50 IG1haW4gKCkNCnsNCiAgaW50IHJlc3VsdCA9IDA7DQogIGlmIChzcHJpbnRmIChidWYsICIlRiAl ZCIsIDEyMzQ1NjcuMCwgMzMsIDQ0LCA1NSkgPCAwDQogICAgICB8fCBzdHJjbXAgKGJ1ZiwgIjEy MzQ1NjcuMDAwMDAwIDMzIikgIT0gMCkNCiAgICByZXN1bHQgfD0gMTsNCiAgaWYgKHNwcmludGYg KGJ1ZiwgIiVGIiwgMS4wIC8gMC4wKSA8IDANCiAgICAgIHx8IChzdHJjbXAgKGJ1ZiwgIklORiIp ICE9IDAgJiYgc3RyY21wIChidWYsICJJTkZJTklUWSIpICE9IDApKQ0KICAgIHJlc3VsdCB8PSAy Ow0KICAvKiBUaGlzIGNhdGNoZXMgYSBDeWd3aW4gMS41LnggYnVnLiAgKi8NCiAgaWYgKHNwcmlu dGYgKGJ1ZiwgIiUuRiIsIDEyMzQuMCkgPCAwDQogICAgICB8fCBzdHJjbXAgKGJ1ZiwgIjEyMzQi KSAhPSAwKQ0KICAgIHJlc3VsdCB8PSA0Ow0KICByZXR1cm4gcmVzdWx0Ow0KfQ0KX0FDRU9GDQpp ZiBhY19mbl9jX3RyeV9ydW4gIiRMSU5FTk8iOyB0aGVuIDoNCiAgZ2xfY3ZfZnVuY19wcmludGZf ZGlyZWN0aXZlX2Y9eWVzDQplbHNlDQogIGdsX2N2X2Z1bmNfcHJpbnRmX2RpcmVjdGl2ZV9mPW5v DQpmaQ0Kcm0gLWYgY29yZSAqLmNvcmUgY29yZS5jb25mdGVzdC4qIGdtb24ub3V0IGJiLm91dCBj b25mdGVzdCRhY19leGVleHQgXA0KICBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LmJlYW0g Y29uZnRlc3QuJGFjX2V4dA0KZmkNCg0KDQpmaQ0KeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGlu ZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRnbF9jdl9mdW5jX3ByaW50Zl9kaXJlY3RpdmVfZiIgPiY1 DQokYXNfZWNobyAiJGdsX2N2X2Z1bmNfcHJpbnRmX2RpcmVjdGl2ZV9mIiA+JjY7IH0NCg0KDQoN CiAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3 aGV0aGVyIHByaW50ZiBzdXBwb3J0cyB0aGUgJ24nIGRpcmVjdGl2ZSIgPiY1DQokYXNfZWNob19u ICJjaGVja2luZyB3aGV0aGVyIHByaW50ZiBzdXBwb3J0cyB0aGUgJ24nIGRpcmVjdGl2ZS4uLiAi ID4mNjsgfQ0KaWYgJHtnbF9jdl9mdW5jX3ByaW50Zl9kaXJlY3RpdmVfbis6fSBmYWxzZTsgdGhl biA6DQogICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2DQplbHNlDQoNCiAgICAgIGlmIHRlc3Qg IiRjcm9zc19jb21waWxpbmciID0geWVzOyB0aGVuIDoNCg0KICAgICAgICAgY2FzZSAiJGhvc3Rf b3MiIGluDQogICAgICAgICAgICopICAgICBnbF9jdl9mdW5jX3ByaW50Zl9kaXJlY3RpdmVfbj0i Z3Vlc3NpbmcgeWVzIjs7DQogICAgICAgICBlc2FjDQoNCmVsc2UNCiAgY2F0IGNvbmZkZWZzLmgg LSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dA0KLyogZW5kIGNvbmZkZWZzLmguICAqLw0KDQoj aW5jbHVkZSA8c3RkaW8uaD4NCiNpbmNsdWRlIDxzdHJpbmcuaD4NCnN0YXRpYyBjaGFyIGZtdHN0 cmluZ1sxMF07DQpzdGF0aWMgY2hhciBidWZbMTAwXTsNCmludCBtYWluICgpDQp7DQogIGludCBj b3VudCA9IC0xOw0KICAvKiBDb3B5IHRoZSBmb3JtYXQgc3RyaW5nLiAgU29tZSBzeXN0ZW1zIChn bGliYyB3aXRoIF9GT1JUSUZZX1NPVVJDRT0yKQ0KICAgICBzdXBwb3J0ICVuIGluIGZvcm1hdCBz dHJpbmdzIGluIHJlYWQtb25seSBtZW1vcnkgYnV0IG5vdCBpbiB3cml0YWJsZQ0KICAgICBtZW1v cnkuICAqLw0KICBzdHJjcHkgKGZtdHN0cmluZywgIiVkICVuIik7DQogIGlmIChzcHJpbnRmIChi dWYsIGZtdHN0cmluZywgMTIzLCAmY291bnQsIDMzLCA0NCwgNTUpIDwgMA0KICAgICAgfHwgc3Ry Y21wIChidWYsICIxMjMgIikgIT0gMA0KICAgICAgfHwgY291bnQgIT0gNCkNCiAgICByZXR1cm4g MTsNCiAgcmV0dXJuIDA7DQp9DQpfQUNFT0YNCmlmIGFjX2ZuX2NfdHJ5X3J1biAiJExJTkVOTyI7 IHRoZW4gOg0KICBnbF9jdl9mdW5jX3ByaW50Zl9kaXJlY3RpdmVfbj15ZXMNCmVsc2UNCiAgZ2xf Y3ZfZnVuY19wcmludGZfZGlyZWN0aXZlX249bm8NCmZpDQpybSAtZiBjb3JlICouY29yZSBjb3Jl LmNvbmZ0ZXN0LiogZ21vbi5vdXQgYmIub3V0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCBcDQogIGNvbmZ0 ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuYmVhbSBjb25mdGVzdC4kYWNfZXh0DQpmaQ0KDQoNCmZp DQp7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGdsX2N2 X2Z1bmNfcHJpbnRmX2RpcmVjdGl2ZV9uIiA+JjUNCiRhc19lY2hvICIkZ2xfY3ZfZnVuY19wcmlu dGZfZGlyZWN0aXZlX24iID4mNjsgfQ0KDQoNCg0KICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHth c19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgcHJpbnRmIHN1cHBvcnRzIHRoZSAn bHMnIGRpcmVjdGl2ZSIgPiY1DQokYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIHByaW50ZiBz dXBwb3J0cyB0aGUgJ2xzJyBkaXJlY3RpdmUuLi4gIiA+JjY7IH0NCmlmICR7Z2xfY3ZfZnVuY19w cmludGZfZGlyZWN0aXZlX2xzKzp9IGZhbHNlOyB0aGVuIDoNCiAgJGFzX2VjaG9fbiAiKGNhY2hl ZCkgIiA+JjYNCmVsc2UNCg0KICAgICAgaWYgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgPSB5ZXM7 IHRoZW4gOg0KDQogICAgICAgICBjYXNlICIkaG9zdF9vcyIgaW4NCiAgICAgICAgICAgb3BlbmJz ZCopICAgICAgICBnbF9jdl9mdW5jX3ByaW50Zl9kaXJlY3RpdmVfbHM9Imd1ZXNzaW5nIG5vIjs7 DQogICAgICAgICAgIGlyaXgqKSAgICAgICAgICAgZ2xfY3ZfZnVuY19wcmludGZfZGlyZWN0aXZl X2xzPSJndWVzc2luZyBubyI7Ow0KICAgICAgICAgICBzb2xhcmlzKikgICAgICAgIGdsX2N2X2Z1 bmNfcHJpbnRmX2RpcmVjdGl2ZV9scz0iZ3Vlc3Npbmcgbm8iOzsNCiAgICAgICAgICAgY3lnd2lu KikgICAgICAgICBnbF9jdl9mdW5jX3ByaW50Zl9kaXJlY3RpdmVfbHM9Imd1ZXNzaW5nIG5vIjs7 DQogICAgICAgICAgIGJlb3MqIHwgaGFpa3UqKSAgZ2xfY3ZfZnVuY19wcmludGZfZGlyZWN0aXZl X2xzPSJndWVzc2luZyBubyI7Ow0KICAgICAgICAgICAqKSAgICAgICAgICAgICAgIGdsX2N2X2Z1 bmNfcHJpbnRmX2RpcmVjdGl2ZV9scz0iZ3Vlc3NpbmcgeWVzIjs7DQogICAgICAgICBlc2FjDQoN CmVsc2UNCiAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dA0KLyog ZW5kIGNvbmZkZWZzLmguICAqLw0KDQovKiBUcnU2NCB3aXRoIERlc2t0b3AgVG9vbGtpdCBDIGhh cyBhIGJ1ZzogPHN0ZGlvLmg+IG11c3QgYmUgaW5jbHVkZWQgYmVmb3JlDQogICA8d2NoYXIuaD4u DQogICBCU0QvT1MgNC4wLjEgaGFzIGEgYnVnOiA8c3RkZGVmLmg+LCA8c3RkaW8uaD4gYW5kIDx0 aW1lLmg+IG11c3QgYmUNCiAgIGluY2x1ZGVkIGJlZm9yZSA8d2NoYXIuaD4uICAqLw0KI2luY2x1 ZGUgPHN0ZGRlZi5oPg0KI2luY2x1ZGUgPHN0ZGlvLmg+DQojaW5jbHVkZSA8dGltZS5oPg0KI2lu Y2x1ZGUgPHdjaGFyLmg+DQojaW5jbHVkZSA8c3RyaW5nLmg+DQppbnQgbWFpbiAoKQ0Kew0KICBp bnQgcmVzdWx0ID0gMDsNCiAgY2hhciBidWZbMTAwXTsNCiAgLyogVGVzdCB3aGV0aGVyICVscyB3 b3JrcyBhdCBhbGwuDQogICAgIFRoaXMgdGVzdCBmYWlscyBvbiBPcGVuQlNEIDQuMCwgSVJJWCA2 LjUsIFNvbGFyaXMgMi42LCBIYWlrdSwgYnV0IG5vdCBvbg0KICAgICBDeWd3aW4gMS41LiAgKi8N CiAgew0KICAgIHN0YXRpYyBjb25zdCB3Y2hhcl90IHdzdHJpbmdbXSA9IHsgJ2EnLCAnYicsICdj JywgMCB9Ow0KICAgIGJ1ZlswXSA9ICdcMCc7DQogICAgaWYgKHNwcmludGYgKGJ1ZiwgIiVscyIs IHdzdHJpbmcpIDwgMA0KICAgICAgICB8fCBzdHJjbXAgKGJ1ZiwgImFiYyIpICE9IDApDQogICAg ICByZXN1bHQgfD0gMTsNCiAgfQ0KICAvKiBUaGlzIHRlc3QgZmFpbHMgb24gSVJJWCA2LjUsIFNv bGFyaXMgMi42LCBDeWd3aW4gMS41LCBIYWlrdSAod2l0aCBhbg0KICAgICBhc3NlcnRpb24gZmFp bHVyZSBpbnNpZGUgbGliYyksIGJ1dCBub3Qgb24gT3BlbkJTRCA0LjAuICAqLw0KICB7DQogICAg c3RhdGljIGNvbnN0IHdjaGFyX3Qgd3N0cmluZ1tdID0geyAnYScsIDAgfTsNCiAgICBidWZbMF0g PSAnXDAnOw0KICAgIGlmIChzcHJpbnRmIChidWYsICIlbHMiLCB3c3RyaW5nKSA8IDANCiAgICAg ICAgfHwgc3RyY21wIChidWYsICJhIikgIT0gMCkNCiAgICAgIHJlc3VsdCB8PSAyOw0KICB9DQog IC8qIFRlc3Qgd2hldGhlciBwcmVjaXNpb25zIGluICVscyBhcmUgc3VwcG9ydGVkIGFzIHNwZWNp ZmllZCBpbiBJU08gQyA5OQ0KICAgICBzZWN0aW9uIDcuMTkuNi4xOg0KICAgICAgICJJZiBhIHBy ZWNpc2lvbiBpcyBzcGVjaWZpZWQsIG5vIG1vcmUgdGhhbiB0aGF0IG1hbnkgYnl0ZXMgYXJlIHdy aXR0ZW4NCiAgICAgICAgKGluY2x1ZGluZyBzaGlmdCBzZXF1ZW5jZXMsIGlmIGFueSksIGFuZCB0 aGUgYXJyYXkgc2hhbGwgY29udGFpbiBhDQogICAgICAgIG51bGwgd2lkZSBjaGFyYWN0ZXIgaWYs IHRvIGVxdWFsIHRoZSBtdWx0aWJ5dGUgY2hhcmFjdGVyIHNlcXVlbmNlDQogICAgICAgIGxlbmd0 aCBnaXZlbiBieSB0aGUgcHJlY2lzaW9uLCB0aGUgZnVuY3Rpb24gd291bGQgbmVlZCB0byBhY2Nl c3MgYQ0KICAgICAgICB3aWRlIGNoYXJhY3RlciBvbmUgcGFzdCB0aGUgZW5kIG9mIHRoZSBhcnJh eS4iDQogICAgIFRoaXMgdGVzdCBmYWlscyBvbiBTb2xhcmlzIDEwLiAgKi8NCiAgew0KICAgIHN0 YXRpYyBjb25zdCB3Y2hhcl90IHdzdHJpbmdbXSA9IHsgJ2EnLCAnYicsICh3Y2hhcl90KSAweGZk ZmRmZGZkLCAwIH07DQogICAgYnVmWzBdID0gJ1wwJzsNCiAgICBpZiAoc3ByaW50ZiAoYnVmLCAi JS4ybHMiLCB3c3RyaW5nKSA8IDANCiAgICAgICAgfHwgc3RyY21wIChidWYsICJhYiIpICE9IDAp DQogICAgICByZXN1bHQgfD0gODsNCiAgfQ0KICByZXR1cm4gcmVzdWx0Ow0KfQ0KX0FDRU9GDQpp ZiBhY19mbl9jX3RyeV9ydW4gIiRMSU5FTk8iOyB0aGVuIDoNCiAgZ2xfY3ZfZnVuY19wcmludGZf ZGlyZWN0aXZlX2xzPXllcw0KZWxzZQ0KICBnbF9jdl9mdW5jX3ByaW50Zl9kaXJlY3RpdmVfbHM9 bm8NCmZpDQpybSAtZiBjb3JlICouY29yZSBjb3JlLmNvbmZ0ZXN0LiogZ21vbi5vdXQgYmIub3V0 IGNvbmZ0ZXN0JGFjX2V4ZWV4dCBcDQogIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuYmVh bSBjb25mdGVzdC4kYWNfZXh0DQpmaQ0KDQoNCmZpDQp7ICRhc19lY2hvICIkYXNfbWU6JHthc19s aW5lbm8tJExJTkVOT306IHJlc3VsdDogJGdsX2N2X2Z1bmNfcHJpbnRmX2RpcmVjdGl2ZV9scyIg PiY1DQokYXNfZWNobyAiJGdsX2N2X2Z1bmNfcHJpbnRmX2RpcmVjdGl2ZV9scyIgPiY2OyB9DQoN Cg0KDQogICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tp bmcgd2hldGhlciBwcmludGYgc3VwcG9ydHMgUE9TSVgvWFNJIGZvcm1hdCBzdHJpbmdzIHdpdGgg cG9zaXRpb25zIiA+JjUNCiRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgcHJpbnRmIHN1cHBv cnRzIFBPU0lYL1hTSSBmb3JtYXQgc3RyaW5ncyB3aXRoIHBvc2l0aW9ucy4uLiAiID4mNjsgfQ0K aWYgJHtnbF9jdl9mdW5jX3ByaW50Zl9wb3NpdGlvbnMrOn0gZmFsc2U7IHRoZW4gOg0KICAkYXNf ZWNob19uICIoY2FjaGVkKSAiID4mNg0KZWxzZQ0KDQogICAgICBpZiB0ZXN0ICIkY3Jvc3NfY29t cGlsaW5nIiA9IHllczsgdGhlbiA6DQoNCiAgICAgICAgIGNhc2UgIiRob3N0X29zIiBpbg0KICAg ICAgICAgICBuZXRic2RbMS0zXSogfCBuZXRic2RlbGZbMS0zXSogfCBuZXRic2Rhb3V0WzEtM10q IHwgbmV0YnNkY29mZlsxLTNdKikNCiAgICAgICAgICAgICAgICAgICAgICAgICBnbF9jdl9mdW5j X3ByaW50Zl9wb3NpdGlvbnM9Imd1ZXNzaW5nIG5vIjs7DQogICAgICAgICAgIGJlb3MqKSAgICAg ICAgZ2xfY3ZfZnVuY19wcmludGZfcG9zaXRpb25zPSJndWVzc2luZyBubyI7Ow0KICAgICAgICAg ICBtaW5ndyogfCBwdyopIGdsX2N2X2Z1bmNfcHJpbnRmX3Bvc2l0aW9ucz0iZ3Vlc3Npbmcgbm8i OzsNCiAgICAgICAgICAgKikgICAgICAgICAgICBnbF9jdl9mdW5jX3ByaW50Zl9wb3NpdGlvbnM9 Imd1ZXNzaW5nIHllcyI7Ow0KICAgICAgICAgZXNhYw0KDQplbHNlDQogIGNhdCBjb25mZGVmcy5o IC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQNCi8qIGVuZCBjb25mZGVmcy5oLiAgKi8NCg0K I2luY2x1ZGUgPHN0ZGlvLmg+DQojaW5jbHVkZSA8c3RyaW5nLmg+DQovKiBUaGUgc3RyaW5nICIl MiRkICUxJGQiLCB3aXRoIGRvbGxhciBjaGFyYWN0ZXJzIHByb3RlY3RlZCBmcm9tIHRoZSBzaGVs bCdzDQogICBkb2xsYXIgZXhwYW5zaW9uIChwb3NzaWJseSBhbiBhdXRvY29uZiBidWcpLiAgKi8N CnN0YXRpYyBjaGFyIGZvcm1hdFtdID0geyAnJScsICcyJywgJyQnLCAnZCcsICcgJywgJyUnLCAn MScsICckJywgJ2QnLCAnXDAnIH07DQpzdGF0aWMgY2hhciBidWZbMTAwXTsNCmludCBtYWluICgp DQp7DQogIHNwcmludGYgKGJ1ZiwgZm9ybWF0LCAzMywgNTUpOw0KICByZXR1cm4gKHN0cmNtcCAo YnVmLCAiNTUgMzMiKSAhPSAwKTsNCn0NCl9BQ0VPRg0KaWYgYWNfZm5fY190cnlfcnVuICIkTElO RU5PIjsgdGhlbiA6DQogIGdsX2N2X2Z1bmNfcHJpbnRmX3Bvc2l0aW9ucz15ZXMNCmVsc2UNCiAg Z2xfY3ZfZnVuY19wcmludGZfcG9zaXRpb25zPW5vDQpmaQ0Kcm0gLWYgY29yZSAqLmNvcmUgY29y ZS5jb25mdGVzdC4qIGdtb24ub3V0IGJiLm91dCBjb25mdGVzdCRhY19leGVleHQgXA0KICBjb25m dGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LmJlYW0gY29uZnRlc3QuJGFjX2V4dA0KZmkNCg0KDQpm aQ0KeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRnbF9j dl9mdW5jX3ByaW50Zl9wb3NpdGlvbnMiID4mNQ0KJGFzX2VjaG8gIiRnbF9jdl9mdW5jX3ByaW50 Zl9wb3NpdGlvbnMiID4mNjsgfQ0KDQoNCg0KICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19s aW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgcHJpbnRmIHN1cHBvcnRzIHRoZSBncm91 cGluZyBmbGFnIiA+JjUNCiRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgcHJpbnRmIHN1cHBv cnRzIHRoZSBncm91cGluZyBmbGFnLi4uICIgPiY2OyB9DQppZiAke2dsX2N2X2Z1bmNfcHJpbnRm X2ZsYWdfZ3JvdXBpbmcrOn0gZmFsc2U7IHRoZW4gOg0KICAkYXNfZWNob19uICIoY2FjaGVkKSAi ID4mNg0KZWxzZQ0KDQogICAgICBpZiB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IHllczsgdGhl biA6DQoNCiAgICAgICAgIGNhc2UgIiRob3N0X29zIiBpbg0KICAgICAgICAgICBjeWd3aW4qKSAg ICAgIGdsX2N2X2Z1bmNfcHJpbnRmX2ZsYWdfZ3JvdXBpbmc9Imd1ZXNzaW5nIG5vIjs7DQogICAg ICAgICAgIG5ldGJzZCopICAgICAgZ2xfY3ZfZnVuY19wcmludGZfZmxhZ19ncm91cGluZz0iZ3Vl c3Npbmcgbm8iOzsNCiAgICAgICAgICAgbWluZ3cqIHwgcHcqKSBnbF9jdl9mdW5jX3ByaW50Zl9m bGFnX2dyb3VwaW5nPSJndWVzc2luZyBubyI7Ow0KICAgICAgICAgICAqKSAgICAgICAgICAgIGds X2N2X2Z1bmNfcHJpbnRmX2ZsYWdfZ3JvdXBpbmc9Imd1ZXNzaW5nIHllcyI7Ow0KICAgICAgICAg ZXNhYw0KDQplbHNlDQogIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19l eHQNCi8qIGVuZCBjb25mZGVmcy5oLiAgKi8NCg0KI2luY2x1ZGUgPHN0ZGlvLmg+DQojaW5jbHVk ZSA8c3RyaW5nLmg+DQpzdGF0aWMgY2hhciBidWZbMTAwXTsNCmludCBtYWluICgpDQp7DQogIGlm IChzcHJpbnRmIChidWYsICIlJ2QgJWQiLCAxMjM0NTY3LCA5OSkgPCAwDQogICAgICB8fCBidWZb c3RybGVuIChidWYpIC0gMV0gIT0gJzknKQ0KICAgIHJldHVybiAxOw0KICByZXR1cm4gMDsNCn0N Cl9BQ0VPRg0KaWYgYWNfZm5fY190cnlfcnVuICIkTElORU5PIjsgdGhlbiA6DQogIGdsX2N2X2Z1 bmNfcHJpbnRmX2ZsYWdfZ3JvdXBpbmc9eWVzDQplbHNlDQogIGdsX2N2X2Z1bmNfcHJpbnRmX2Zs YWdfZ3JvdXBpbmc9bm8NCmZpDQpybSAtZiBjb3JlICouY29yZSBjb3JlLmNvbmZ0ZXN0LiogZ21v bi5vdXQgYmIub3V0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCBcDQogIGNvbmZ0ZXN0LiRhY19vYmpleHQg Y29uZnRlc3QuYmVhbSBjb25mdGVzdC4kYWNfZXh0DQpmaQ0KDQoNCmZpDQp7ICRhc19lY2hvICIk YXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGdsX2N2X2Z1bmNfcHJpbnRmX2Zs YWdfZ3JvdXBpbmciID4mNQ0KJGFzX2VjaG8gIiRnbF9jdl9mdW5jX3ByaW50Zl9mbGFnX2dyb3Vw aW5nIiA+JjY7IH0NCg0KDQoNCiAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRM SU5FTk99OiBjaGVja2luZyB3aGV0aGVyIHByaW50ZiBzdXBwb3J0cyB0aGUgbGVmdC1hZGp1c3Qg ZmxhZyBjb3JyZWN0bHkiID4mNQ0KJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciBwcmludGYg c3VwcG9ydHMgdGhlIGxlZnQtYWRqdXN0IGZsYWcgY29ycmVjdGx5Li4uICIgPiY2OyB9DQppZiAk e2dsX2N2X2Z1bmNfcHJpbnRmX2ZsYWdfbGVmdGFkanVzdCs6fSBmYWxzZTsgdGhlbiA6DQogICRh c19lY2hvX24gIihjYWNoZWQpICIgPiY2DQplbHNlDQoNCiAgICAgIGlmIHRlc3QgIiRjcm9zc19j b21waWxpbmciID0geWVzOyB0aGVuIDoNCg0KICAgICAgICAgY2FzZSAiJGhvc3Rfb3MiIGluDQog ICAgICAgICAgICAgICAgICAgICMgR3Vlc3MgeWVzIG9uIEhQLVVYIDExLg0KICAgICAgICAgICBo cHV4MTEqKSBnbF9jdl9mdW5jX3ByaW50Zl9mbGFnX2xlZnRhZGp1c3Q9Imd1ZXNzaW5nIHllcyI7 Ow0KICAgICAgICAgICAgICAgICAgICAjIEd1ZXNzIG5vIG9uIEhQLVVYIDEwIGFuZCBvbGRlci4N CiAgICAgICAgICAgaHB1eCopICAgZ2xfY3ZfZnVuY19wcmludGZfZmxhZ19sZWZ0YWRqdXN0PSJn dWVzc2luZyBubyI7Ow0KICAgICAgICAgICAgICAgICAgICAjIEd1ZXNzIHllcyBvdGhlcndpc2Uu DQogICAgICAgICAgICopICAgICAgIGdsX2N2X2Z1bmNfcHJpbnRmX2ZsYWdfbGVmdGFkanVzdD0i Z3Vlc3NpbmcgeWVzIjs7DQogICAgICAgICBlc2FjDQoNCmVsc2UNCiAgY2F0IGNvbmZkZWZzLmgg LSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dA0KLyogZW5kIGNvbmZkZWZzLmguICAqLw0KDQoj aW5jbHVkZSA8c3RkaW8uaD4NCiNpbmNsdWRlIDxzdHJpbmcuaD4NCnN0YXRpYyBjaGFyIGJ1Zlsx MDBdOw0KaW50IG1haW4gKCkNCnsNCiAgLyogQ2hlY2sgdGhhdCBhICctJyBmbGFnIGlzIG5vdCBh bm5paGlsYXRlZCBieSBhIG5lZ2F0aXZlIHdpZHRoLiAgKi8NCiAgaWYgKHNwcmludGYgKGJ1Ziwg ImElLSpzYyIsIC0zLCAiYiIpIDwgMA0KICAgICAgfHwgc3RyY21wIChidWYsICJhYiAgYyIpICE9 IDApDQogICAgcmV0dXJuIDE7DQogIHJldHVybiAwOw0KfQ0KX0FDRU9GDQppZiBhY19mbl9jX3Ry eV9ydW4gIiRMSU5FTk8iOyB0aGVuIDoNCiAgZ2xfY3ZfZnVuY19wcmludGZfZmxhZ19sZWZ0YWRq dXN0PXllcw0KZWxzZQ0KICBnbF9jdl9mdW5jX3ByaW50Zl9mbGFnX2xlZnRhZGp1c3Q9bm8NCmZp DQpybSAtZiBjb3JlICouY29yZSBjb3JlLmNvbmZ0ZXN0LiogZ21vbi5vdXQgYmIub3V0IGNvbmZ0 ZXN0JGFjX2V4ZWV4dCBcDQogIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuYmVhbSBjb25m dGVzdC4kYWNfZXh0DQpmaQ0KDQoNCmZpDQp7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8t JExJTkVOT306IHJlc3VsdDogJGdsX2N2X2Z1bmNfcHJpbnRmX2ZsYWdfbGVmdGFkanVzdCIgPiY1 DQokYXNfZWNobyAiJGdsX2N2X2Z1bmNfcHJpbnRmX2ZsYWdfbGVmdGFkanVzdCIgPiY2OyB9DQoN Cg0KDQogICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tp bmcgd2hldGhlciBwcmludGYgc3VwcG9ydHMgdGhlIHplcm8gZmxhZyBjb3JyZWN0bHkiID4mNQ0K JGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciBwcmludGYgc3VwcG9ydHMgdGhlIHplcm8gZmxh ZyBjb3JyZWN0bHkuLi4gIiA+JjY7IH0NCmlmICR7Z2xfY3ZfZnVuY19wcmludGZfZmxhZ196ZXJv Kzp9IGZhbHNlOyB0aGVuIDoNCiAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYNCmVsc2UNCg0K ICAgICAgaWYgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgPSB5ZXM7IHRoZW4gOg0KDQogICAgICAg ICBjYXNlICIkaG9zdF9vcyIgaW4NCiAgICAgICAgICAgICAgICAgICAjIEd1ZXNzIHllcyBvbiBn bGliYyBzeXN0ZW1zLg0KICAgICAgICAgICAqLWdudSopIGdsX2N2X2Z1bmNfcHJpbnRmX2ZsYWdf emVybz0iZ3Vlc3NpbmcgeWVzIjs7DQogICAgICAgICAgICAgICAgICAgIyBHdWVzcyB5ZXMgb24g QmVPUy4NCiAgICAgICAgICAgYmVvcyopICBnbF9jdl9mdW5jX3ByaW50Zl9mbGFnX3plcm89Imd1 ZXNzaW5nIHllcyI7Ow0KICAgICAgICAgICAgICAgICAgICMgSWYgd2UgZG9uJ3Qga25vdywgYXNz dW1lIHRoZSB3b3JzdC4NCiAgICAgICAgICAgKikgICAgICBnbF9jdl9mdW5jX3ByaW50Zl9mbGFn X3plcm89Imd1ZXNzaW5nIG5vIjs7DQogICAgICAgICBlc2FjDQoNCmVsc2UNCiAgY2F0IGNvbmZk ZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dA0KLyogZW5kIGNvbmZkZWZzLmguICAq Lw0KDQojaW5jbHVkZSA8c3RkaW8uaD4NCiNpbmNsdWRlIDxzdHJpbmcuaD4NCnN0YXRpYyBjaGFy IGJ1ZlsxMDBdOw0KaW50IG1haW4gKCkNCnsNCiAgaWYgKHNwcmludGYgKGJ1ZiwgIiUwMTBmIiwg MS4wIC8gMC4wLCAzMywgNDQsIDU1KSA8IDANCiAgICAgIHx8IChzdHJjbXAgKGJ1ZiwgIiAgICAg ICBpbmYiKSAhPSAwDQogICAgICAgICAgJiYgc3RyY21wIChidWYsICIgIGluZmluaXR5IikgIT0g MCkpDQogICAgcmV0dXJuIDE7DQogIHJldHVybiAwOw0KfQ0KX0FDRU9GDQppZiBhY19mbl9jX3Ry eV9ydW4gIiRMSU5FTk8iOyB0aGVuIDoNCiAgZ2xfY3ZfZnVuY19wcmludGZfZmxhZ196ZXJvPXll cw0KZWxzZQ0KICBnbF9jdl9mdW5jX3ByaW50Zl9mbGFnX3plcm89bm8NCmZpDQpybSAtZiBjb3Jl ICouY29yZSBjb3JlLmNvbmZ0ZXN0LiogZ21vbi5vdXQgYmIub3V0IGNvbmZ0ZXN0JGFjX2V4ZWV4 dCBcDQogIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuYmVhbSBjb25mdGVzdC4kYWNfZXh0 DQpmaQ0KDQoNCmZpDQp7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJl c3VsdDogJGdsX2N2X2Z1bmNfcHJpbnRmX2ZsYWdfemVybyIgPiY1DQokYXNfZWNobyAiJGdsX2N2 X2Z1bmNfcHJpbnRmX2ZsYWdfemVybyIgPiY2OyB9DQoNCg0KDQogICAgIHsgJGFzX2VjaG8gIiRh c19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciBwcmludGYgc3VwcG9y dHMgbGFyZ2UgcHJlY2lzaW9ucyIgPiY1DQokYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIHBy aW50ZiBzdXBwb3J0cyBsYXJnZSBwcmVjaXNpb25zLi4uICIgPiY2OyB9DQppZiAke2dsX2N2X2Z1 bmNfcHJpbnRmX3ByZWNpc2lvbis6fSBmYWxzZTsgdGhlbiA6DQogICRhc19lY2hvX24gIihjYWNo ZWQpICIgPiY2DQplbHNlDQoNCiAgICAgIGlmIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0geWVz OyB0aGVuIDoNCg0KICAgICAgICAgY2FzZSAiJGhvc3Rfb3MiIGluDQogICAgICAgICAgICMgR3Vl c3Mgbm8gb25seSBvbiBTb2xhcmlzLCBuYXRpdmUgV2luMzIsIGFuZCBCZU9TIHN5c3RlbXMuDQog ICAgICAgICAgIHNvbGFyaXMqKSAgICAgZ2xfY3ZfZnVuY19wcmludGZfcHJlY2lzaW9uPSJndWVz c2luZyBubyIgOzsNCiAgICAgICAgICAgbWluZ3cqIHwgcHcqKSBnbF9jdl9mdW5jX3ByaW50Zl9w cmVjaXNpb249Imd1ZXNzaW5nIG5vIiA7Ow0KICAgICAgICAgICBiZW9zKikgICAgICAgIGdsX2N2 X2Z1bmNfcHJpbnRmX3ByZWNpc2lvbj0iZ3Vlc3Npbmcgbm8iIDs7DQogICAgICAgICAgICopICAg ICAgICAgICAgZ2xfY3ZfZnVuY19wcmludGZfcHJlY2lzaW9uPSJndWVzc2luZyB5ZXMiIDs7DQog ICAgICAgICBlc2FjDQoNCmVsc2UNCiAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRl c3QuJGFjX2V4dA0KLyogZW5kIGNvbmZkZWZzLmguICAqLw0KDQojaW5jbHVkZSA8c3RkaW8uaD4N CiNpbmNsdWRlIDxzdHJpbmcuaD4NCnN0YXRpYyBjaGFyIGJ1Zls1MDAwXTsNCmludCBtYWluICgp DQp7DQogIGludCByZXN1bHQgPSAwOw0KI2lmZGVmIF9fQkVPU19fDQogIC8qIE9uIEJlT1MsIHRo aXMgd291bGQgY3Jhc2ggYW5kIHNob3cgYSBkaWFsb2cgYm94LiAgQXZvaWQgdGhlIGNyYXNoLiAg Ki8NCiAgcmV0dXJuIDE7DQojZW5kaWYNCiAgaWYgKHNwcmludGYgKGJ1ZiwgIiUuNDAwMGQgJWQi LCAxLCAzMywgNDQpIDwgNDAwMCArIDMpDQogICAgcmVzdWx0IHw9IDE7DQogIGlmIChzcHJpbnRm IChidWYsICIlLjQwMDBmICVkIiwgMS4wLCAzMywgNDQpIDwgNDAwMCArIDUpDQogICAgcmVzdWx0 IHw9IDI7DQogIGlmIChzcHJpbnRmIChidWYsICIlLjUxMWYgJWQiLCAxLjAsIDMzLCA0NCkgPCA1 MTEgKyA1DQogICAgICB8fCBidWZbMF0gIT0gJzEnKQ0KICAgIHJlc3VsdCB8PSA0Ow0KICByZXR1 cm4gcmVzdWx0Ow0KfQ0KX0FDRU9GDQppZiBhY19mbl9jX3RyeV9ydW4gIiRMSU5FTk8iOyB0aGVu IDoNCiAgZ2xfY3ZfZnVuY19wcmludGZfcHJlY2lzaW9uPXllcw0KZWxzZQ0KICBnbF9jdl9mdW5j X3ByaW50Zl9wcmVjaXNpb249bm8NCmZpDQpybSAtZiBjb3JlICouY29yZSBjb3JlLmNvbmZ0ZXN0 LiogZ21vbi5vdXQgYmIub3V0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCBcDQogIGNvbmZ0ZXN0LiRhY19v YmpleHQgY29uZnRlc3QuYmVhbSBjb25mdGVzdC4kYWNfZXh0DQpmaQ0KDQoNCmZpDQp7ICRhc19l Y2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGdsX2N2X2Z1bmNfcHJp bnRmX3ByZWNpc2lvbiIgPiY1DQokYXNfZWNobyAiJGdsX2N2X2Z1bmNfcHJpbnRmX3ByZWNpc2lv biIgPiY2OyB9DQoNCg0KDQoNCiAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRM SU5FTk99OiBjaGVja2luZyB3aGV0aGVyIHByaW50ZiBzdXJ2aXZlcyBvdXQtb2YtbWVtb3J5IGNv bmRpdGlvbnMiID4mNQ0KJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciBwcmludGYgc3Vydml2 ZXMgb3V0LW9mLW1lbW9yeSBjb25kaXRpb25zLi4uICIgPiY2OyB9DQppZiAke2dsX2N2X2Z1bmNf cHJpbnRmX2Vub21lbSs6fSBmYWxzZTsgdGhlbiA6DQogICRhc19lY2hvX24gIihjYWNoZWQpICIg PiY2DQplbHNlDQoNCiAgICAgIGdsX2N2X2Z1bmNfcHJpbnRmX2Vub21lbT0iZ3Vlc3Npbmcgbm8i DQogICAgICBpZiB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IG5vOyB0aGVuDQogICAgICAgIGlm IHRlc3QgJEFQUExFX1VOSVZFUlNBTF9CVUlMRCA9IDA7IHRoZW4NCiAgICAgICAgICBjYXQgY29u ZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0DQovKiBlbmQgY29uZmRlZnMuaC4g ICovDQoNCg0KI2luY2x1ZGUgPHN0ZGxpYi5oPg0KI2lmIGRlZmluZWQgX19NQUNIX18gJiYgZGVm aW5lZCBfX0FQUExFX18NCi8qIEF2b2lkIGEgY3Jhc2ggb24gTWFjT1MgWC4gICovDQojaW5jbHVk ZSA8bWFjaC9tYWNoLmg+DQojaW5jbHVkZSA8bWFjaC9tYWNoX2Vycm9yLmg+DQojaW5jbHVkZSA8 bWFjaC90aHJlYWRfc3RhdHVzLmg+DQojaW5jbHVkZSA8bWFjaC9leGNlcHRpb24uaD4NCiNpbmNs dWRlIDxtYWNoL3Rhc2suaD4NCiNpbmNsdWRlIDxwdGhyZWFkLmg+DQovKiBUaGUgZXhjZXB0aW9u IHBvcnQgb24gd2hpY2ggb3VyIHRocmVhZCBsaXN0ZW5zLiAgKi8NCnN0YXRpYyBtYWNoX3BvcnRf dCBvdXJfZXhjZXB0aW9uX3BvcnQ7DQovKiBUaGUgbWFpbiBmdW5jdGlvbiBvZiB0aGUgdGhyZWFk IGxpc3RlbmluZyBmb3IgZXhjZXB0aW9ucyBvZiB0eXBlDQogICBFWENfQkFEX0FDQ0VTUy4gICov DQpzdGF0aWMgdm9pZCAqDQptYWNoX2V4Y2VwdGlvbl90aHJlYWQgKHZvaWQgKmFyZykNCnsNCiAg LyogQnVmZmVyIGZvciBhIG1lc3NhZ2UgdG8gYmUgcmVjZWl2ZWQuICAqLw0KICBzdHJ1Y3Qgew0K ICAgIG1hY2hfbXNnX2hlYWRlcl90IGhlYWQ7DQogICAgbWFjaF9tc2dfYm9keV90IG1zZ2hfYm9k eTsNCiAgICBjaGFyIGRhdGExMDI0Ow0KICB9IG1zZzsNCiAgbWFjaF9tc2dfcmV0dXJuX3QgcmV0 dmFsOw0KICAvKiBXYWl0IGZvciBhIG1lc3NhZ2Ugb24gdGhlIGV4Y2VwdGlvbiBwb3J0LiAgKi8N CiAgcmV0dmFsID0gbWFjaF9tc2cgKCZtc2cuaGVhZCwgTUFDSF9SQ1ZfTVNHIHwgTUFDSF9SQ1Zf TEFSR0UsIDAsIHNpemVvZiAobXNnKSwNCiAgICAgICAgICAgICAgICAgICAgIG91cl9leGNlcHRp b25fcG9ydCwgTUFDSF9NU0dfVElNRU9VVF9OT05FLCBNQUNIX1BPUlRfTlVMTCk7DQogIGlmIChy ZXR2YWwgIT0gTUFDSF9NU0dfU1VDQ0VTUykNCiAgICBhYm9ydCAoKTsNCiAgZXhpdCAoMSk7DQp9 DQpzdGF0aWMgdm9pZA0Kbm9jcmFzaF9pbml0ICh2b2lkKQ0Kew0KICBtYWNoX3BvcnRfdCBzZWxm ID0gbWFjaF90YXNrX3NlbGYgKCk7DQogIC8qIEFsbG9jYXRlIGEgcG9ydCBvbiB3aGljaCB0aGUg dGhyZWFkIHNoYWxsIGxpc3RlbiBmb3IgZXhjZXB0aW9ucy4gICovDQogIGlmIChtYWNoX3BvcnRf YWxsb2NhdGUgKHNlbGYsIE1BQ0hfUE9SVF9SSUdIVF9SRUNFSVZFLCAmb3VyX2V4Y2VwdGlvbl9w b3J0KQ0KICAgICAgPT0gS0VSTl9TVUNDRVNTKSB7DQogICAgLyogU2VlIGh0dHA6Ly93ZWIubWl0 LmVkdS9kYXJ3aW4vc3JjL21vZHVsZXMveG51L29zZm1rL21hbi9tYWNoX3BvcnRfaW5zZXJ0X3Jp Z2h0Lmh0bWwuICAqLw0KICAgIGlmIChtYWNoX3BvcnRfaW5zZXJ0X3JpZ2h0IChzZWxmLCBvdXJf ZXhjZXB0aW9uX3BvcnQsIG91cl9leGNlcHRpb25fcG9ydCwNCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgTUFDSF9NU0dfVFlQRV9NQUtFX1NFTkQpDQogICAgICAgID09IEtFUk5fU1VD Q0VTUykgew0KICAgICAgLyogVGhlIGV4Y2VwdGlvbnMgd2Ugd2FudCB0byBjYXRjaC4gIE9ubHkg RVhDX0JBRF9BQ0NFU1MgaXMgaW50ZXJlc3RpbmcNCiAgICAgICAgIGZvciB1cy4gICovDQogICAg ICBleGNlcHRpb25fbWFza190IG1hc2sgPSBFWENfTUFTS19CQURfQUNDRVNTOw0KICAgICAgLyog Q3JlYXRlIHRoZSB0aHJlYWQgbGlzdGVuaW5nIG9uIHRoZSBleGNlcHRpb24gcG9ydC4gICovDQog ICAgICBwdGhyZWFkX2F0dHJfdCBhdHRyOw0KICAgICAgcHRocmVhZF90IHRocmVhZDsNCiAgICAg IGlmIChwdGhyZWFkX2F0dHJfaW5pdCAoJmF0dHIpID09IDANCiAgICAgICAgICAmJiBwdGhyZWFk X2F0dHJfc2V0ZGV0YWNoc3RhdGUgKCZhdHRyLCBQVEhSRUFEX0NSRUFURV9ERVRBQ0hFRCkgPT0g MA0KICAgICAgICAgICYmIHB0aHJlYWRfY3JlYXRlICgmdGhyZWFkLCAmYXR0ciwgbWFjaF9leGNl cHRpb25fdGhyZWFkLCBOVUxMKSA9PSAwKSB7DQogICAgICAgIHB0aHJlYWRfYXR0cl9kZXN0cm95 ICgmYXR0cik7DQogICAgICAgIC8qIFJlcGxhY2UgdGhlIGV4Y2VwdGlvbiBwb3J0IGluZm8gZm9y IHRoZXNlIGV4Y2VwdGlvbnMgd2l0aCBvdXIgb3duLg0KICAgICAgICAgICBOb3RlIHRoYXQgd2Ug cmVwbGFjZSB0aGUgZXhjZXB0aW9uIHBvcnQgZm9yIHRoZSBlbnRpcmUgdGFzaywgbm90IG9ubHkN CiAgICAgICAgICAgZm9yIGEgcGFydGljdWxhciB0aHJlYWQuICBUaGlzIGhhcyB0aGUgZWZmZWN0 IHRoYXQgd2hlbiBvdXIgZXhjZXB0aW9uDQogICAgICAgICAgIHBvcnQgZ2V0cyB0aGUgbWVzc2Fn ZSwgdGhlIHRocmVhZCBzcGVjaWZpYyBleGNlcHRpb24gcG9ydCBoYXMgYWxyZWFkeQ0KICAgICAg ICAgICBiZWVuIGFza2VkLCBhbmQgd2UgZG9uJ3QgbmVlZCB0byBib3RoZXIgYWJvdXQgaXQuDQog ICAgICAgICAgIFNlZSBodHRwOi8vd2ViLm1pdC5lZHUvZGFyd2luL3NyYy9tb2R1bGVzL3hudS9v c2Ztay9tYW4vdGFza19zZXRfZXhjZXB0aW9uX3BvcnRzLmh0bWwuICAqLw0KICAgICAgICB0YXNr X3NldF9leGNlcHRpb25fcG9ydHMgKHNlbGYsIG1hc2ssIG91cl9leGNlcHRpb25fcG9ydCwNCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFWENFUFRJT05fREVGQVVMVCwgTUFDSElO RV9USFJFQURfU1RBVEUpOw0KICAgICAgfQ0KICAgIH0NCiAgfQ0KfQ0KI2Vsc2UNCi8qIEF2b2lk IGEgY3Jhc2ggb24gUE9TSVggc3lzdGVtcy4gICovDQojaW5jbHVkZSA8c2lnbmFsLmg+DQovKiBB IFBPU0lYIHNpZ25hbCBoYW5kbGVyLiAgKi8NCnN0YXRpYyB2b2lkDQpleGNlcHRpb25faGFuZGxl ciAoaW50IHNpZykNCnsNCiAgZXhpdCAoMSk7DQp9DQpzdGF0aWMgdm9pZA0Kbm9jcmFzaF9pbml0 ICh2b2lkKQ0Kew0KI2lmZGVmIFNJR1NFR1YNCiAgc2lnbmFsIChTSUdTRUdWLCBleGNlcHRpb25f aGFuZGxlcik7DQojZW5kaWYNCiNpZmRlZiBTSUdCVVMNCiAgc2lnbmFsIChTSUdCVVMsIGV4Y2Vw dGlvbl9oYW5kbGVyKTsNCiNlbmRpZg0KfQ0KI2VuZGlmDQoNCiNpbmNsdWRlIDxzdGRpby5oPg0K I2luY2x1ZGUgPHN5cy90eXBlcy5oPg0KI2luY2x1ZGUgPHN5cy90aW1lLmg+DQojaW5jbHVkZSA8 c3lzL3Jlc291cmNlLmg+DQojaW5jbHVkZSA8ZXJybm8uaD4NCmludCBtYWluKCkNCnsNCiAgc3Ry dWN0IHJsaW1pdCBsaW1pdDsNCiAgaW50IHJldDsNCiAgbm9jcmFzaF9pbml0ICgpOw0KICAvKiBT b21lIHByaW50ZiBpbXBsZW1lbnRhdGlvbnMgYWxsb2NhdGUgdGVtcG9yYXJ5IHNwYWNlIHdpdGgg bWFsbG9jLiAgKi8NCiAgLyogT24gQlNEIHN5c3RlbXMsIG1hbGxvYygpIGlzIGxpbWl0ZWQgYnkg UkxJTUlUX0RBVEEuICAqLw0KI2lmZGVmIFJMSU1JVF9EQVRBDQogIGlmIChnZXRybGltaXQgKFJM SU1JVF9EQVRBLCAmbGltaXQpIDwgMCkNCiAgICByZXR1cm4gNzc7DQogIGlmIChsaW1pdC5ybGlt X21heCA9PSBSTElNX0lORklOSVRZIHx8IGxpbWl0LnJsaW1fbWF4ID4gNTAwMDAwMCkNCiAgICBs aW1pdC5ybGltX21heCA9IDUwMDAwMDA7DQogIGxpbWl0LnJsaW1fY3VyID0gbGltaXQucmxpbV9t YXg7DQogIGlmIChzZXRybGltaXQgKFJMSU1JVF9EQVRBLCAmbGltaXQpIDwgMCkNCiAgICByZXR1 cm4gNzc7DQojZW5kaWYNCiAgLyogT24gTGludXggc3lzdGVtcywgbWFsbG9jKCkgaXMgbGltaXRl ZCBieSBSTElNSVRfQVMuICAqLw0KI2lmZGVmIFJMSU1JVF9BUw0KICBpZiAoZ2V0cmxpbWl0IChS TElNSVRfQVMsICZsaW1pdCkgPCAwKQ0KICAgIHJldHVybiA3NzsNCiAgaWYgKGxpbWl0LnJsaW1f bWF4ID09IFJMSU1fSU5GSU5JVFkgfHwgbGltaXQucmxpbV9tYXggPiA1MDAwMDAwKQ0KICAgIGxp bWl0LnJsaW1fbWF4ID0gNTAwMDAwMDsNCiAgbGltaXQucmxpbV9jdXIgPSBsaW1pdC5ybGltX21h eDsNCiAgaWYgKHNldHJsaW1pdCAoUkxJTUlUX0FTLCAmbGltaXQpIDwgMCkNCiAgICByZXR1cm4g Nzc7DQojZW5kaWYNCiAgLyogU29tZSBwcmludGYgaW1wbGVtZW50YXRpb25zIGFsbG9jYXRlIHRl bXBvcmFyeSBzcGFjZSBvbiB0aGUgc3RhY2suICAqLw0KI2lmZGVmIFJMSU1JVF9TVEFDSw0KICBp ZiAoZ2V0cmxpbWl0IChSTElNSVRfU1RBQ0ssICZsaW1pdCkgPCAwKQ0KICAgIHJldHVybiA3NzsN CiAgaWYgKGxpbWl0LnJsaW1fbWF4ID09IFJMSU1fSU5GSU5JVFkgfHwgbGltaXQucmxpbV9tYXgg PiA1MDAwMDAwKQ0KICAgIGxpbWl0LnJsaW1fbWF4ID0gNTAwMDAwMDsNCiAgbGltaXQucmxpbV9j dXIgPSBsaW1pdC5ybGltX21heDsNCiAgaWYgKHNldHJsaW1pdCAoUkxJTUlUX1NUQUNLLCAmbGlt aXQpIDwgMCkNCiAgICByZXR1cm4gNzc7DQojZW5kaWYNCiAgcmV0ID0gcHJpbnRmICgiJS41MDAw MDAwZiIsIDEuMCk7DQogIHJldHVybiAhKHJldCA9PSA1MDAwMDAyIHx8IChyZXQgPCAwICYmIGVy cm5vID09IEVOT01FTSkpOw0KfQ0KDQpfQUNFT0YNCiAgICAgICAgICBpZiB7IHsgZXZhbCBlY2hv ICJcIlwkYXNfbWVcIjoke2FzX2xpbmVuby0kTElORU5PfTogXCIkYWNfbGlua1wiIjsgfSA+JjUN CiAgKGV2YWwgJGFjX2xpbmspIDI+JjUNCiAgYWNfc3RhdHVzPSQ/DQogICRhc19lY2hvICIkYXNf bWU6JHthc19saW5lbm8tJExJTkVOT306IFwkPyA9ICRhY19zdGF0dXMiID4mNQ0KICB0ZXN0ICRh Y19zdGF0dXMgPSAwOyB9ICYmIHRlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0OyB0aGVuDQogICAg ICAgICAgICAoLi9jb25mdGVzdA0KICAgICAgICAgICAgIHJlc3VsdD0kPw0KICAgICAgICAgICAg IGlmIHRlc3QgJHJlc3VsdCAhPSAwICYmIHRlc3QgJHJlc3VsdCAhPSA3NzsgdGhlbiByZXN1bHQ9 MTsgZmkNCiAgICAgICAgICAgICBleGl0ICRyZXN1bHQNCiAgICAgICAgICAgICkgPi9kZXYvbnVs bCAyPi9kZXYvbnVsbA0KICAgICAgICAgICAgY2FzZSAkPyBpbg0KICAgICAgICAgICAgICAwKSBn bF9jdl9mdW5jX3ByaW50Zl9lbm9tZW09InllcyIgOzsNCiAgICAgICAgICAgICAgNzcpIGdsX2N2 X2Z1bmNfcHJpbnRmX2Vub21lbT0iZ3Vlc3Npbmcgbm8iIDs7DQogICAgICAgICAgICAgICopIGds X2N2X2Z1bmNfcHJpbnRmX2Vub21lbT0ibm8iIDs7DQogICAgICAgICAgICBlc2FjDQogICAgICAg ICAgZWxzZQ0KICAgICAgICAgICAgZ2xfY3ZfZnVuY19wcmludGZfZW5vbWVtPSJndWVzc2luZyBu byINCiAgICAgICAgICBmaQ0KICAgICAgICAgIHJtIC1mciBjb25mdGVzdCoNCiAgICAgICAgZWxz ZQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsX2N2X2Z1bmNfcHJp bnRmX2Vub21lbT0iZ3Vlc3Npbmcgbm8iDQogICAgICAgIGZpDQogICAgICBmaQ0KICAgICAgaWYg dGVzdCAiJGdsX2N2X2Z1bmNfcHJpbnRmX2Vub21lbSIgPSAiZ3Vlc3Npbmcgbm8iOyB0aGVuDQog ICAgICAgIGNhc2UgIiRob3N0X29zIiBpbg0KICAgICAgICAgICAgICAgICAgICAjIEd1ZXNzIHll cyBvbiBnbGliYyBzeXN0ZW1zLg0KICAgICAgICAgICotZ251KikgICBnbF9jdl9mdW5jX3ByaW50 Zl9lbm9tZW09Imd1ZXNzaW5nIHllcyI7Ow0KICAgICAgICAgICAgICAgICAgICAjIEd1ZXNzIHll cyBvbiBTb2xhcmlzLg0KICAgICAgICAgIHNvbGFyaXMqKSBnbF9jdl9mdW5jX3ByaW50Zl9lbm9t ZW09Imd1ZXNzaW5nIHllcyI7Ow0KICAgICAgICAgICAgICAgICAgICAjIEd1ZXNzIHllcyBvbiBB SVguDQogICAgICAgICAgYWl4KikgICAgIGdsX2N2X2Z1bmNfcHJpbnRmX2Vub21lbT0iZ3Vlc3Np bmcgeWVzIjs7DQogICAgICAgICAgICAgICAgICAgICMgR3Vlc3MgeWVzIG9uIEhQLVVYL2hwcGEu DQogICAgICAgICAgaHB1eCopICAgIGNhc2UgIiRob3N0X2NwdSIgaW4NCiAgICAgICAgICAgICAg ICAgICAgICBocHBhKikgZ2xfY3ZfZnVuY19wcmludGZfZW5vbWVtPSJndWVzc2luZyB5ZXMiOzsN CiAgICAgICAgICAgICAgICAgICAgICAqKSAgICAgZ2xfY3ZfZnVuY19wcmludGZfZW5vbWVtPSJn dWVzc2luZyBubyI7Ow0KICAgICAgICAgICAgICAgICAgICBlc2FjDQogICAgICAgICAgICAgICAg ICAgIDs7DQogICAgICAgICAgICAgICAgICAgICMgR3Vlc3MgeWVzIG9uIElSSVguDQogICAgICAg ICAgaXJpeCopICAgIGdsX2N2X2Z1bmNfcHJpbnRmX2Vub21lbT0iZ3Vlc3NpbmcgeWVzIjs7DQog ICAgICAgICAgICAgICAgICAgICMgR3Vlc3MgeWVzIG9uIE9TRi8xLg0KICAgICAgICAgIG9zZiop ICAgICBnbF9jdl9mdW5jX3ByaW50Zl9lbm9tZW09Imd1ZXNzaW5nIHllcyI7Ow0KICAgICAgICAg ICAgICAgICAgICAjIEd1ZXNzIHllcyBvbiBCZU9TLg0KICAgICAgICAgIGJlb3MqKSAgICBnbF9j dl9mdW5jX3ByaW50Zl9lbm9tZW09Imd1ZXNzaW5nIHllcyI7Ow0KICAgICAgICAgICAgICAgICAg ICAjIEd1ZXNzIHllcyBvbiBIYWlrdS4NCiAgICAgICAgICBoYWlrdSopICAgZ2xfY3ZfZnVuY19w cmludGZfZW5vbWVtPSJndWVzc2luZyB5ZXMiOzsNCiAgICAgICAgICAgICAgICAgICAgIyBJZiB3 ZSBkb24ndCBrbm93LCBhc3N1bWUgdGhlIHdvcnN0Lg0KICAgICAgICAgICopICAgICAgICBnbF9j dl9mdW5jX3ByaW50Zl9lbm9tZW09Imd1ZXNzaW5nIG5vIjs7DQogICAgICAgIGVzYWMNCiAgICAg IGZpDQoNCmZpDQp7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3Vs dDogJGdsX2N2X2Z1bmNfcHJpbnRmX2Vub21lbSIgPiY1DQokYXNfZWNobyAiJGdsX2N2X2Z1bmNf cHJpbnRmX2Vub21lbSIgPiY2OyB9DQoNCg0KDQogIGNhc2UgIiRnbF9jdl9mdW5jX3ByaW50Zl9s b25nX2RvdWJsZSIgaW4NCiAgICAqeWVzKQ0KICAgICAgOzsNCiAgICAqKQ0KDQokYXNfZWNobyAi I2RlZmluZSBORUVEX1BSSU5URl9MT05HX0RPVUJMRSAxIiA+PmNvbmZkZWZzLmgNCg0KICAgICAg OzsNCiAgZXNhYw0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQogIGFjX2ZuX2NfY2hl Y2tfZGVjbCAiJExJTkVOTyIgIndjd2lkdGgiICJhY19jdl9oYXZlX2RlY2xfd2N3aWR0aCIgIg0K LyogQUlYIDMuMi41IGRlY2xhcmVzIHdjd2lkdGggaW4gPHN0cmluZy5oPi4gKi8NCiNpbmNsdWRl IDxzdHJpbmcuaD4NCi8qIFRydTY0IHdpdGggRGVza3RvcCBUb29sa2l0IEMgaGFzIGEgYnVnOiA8 c3RkaW8uaD4gbXVzdCBiZSBpbmNsdWRlZCBiZWZvcmUNCiAgIDx3Y2hhci5oPi4NCiAgIEJTRC9P UyA0LjAuMSBoYXMgYSBidWc6IDxzdGRkZWYuaD4sIDxzdGRpby5oPiBhbmQgPHRpbWUuaD4gbXVz dCBiZSBpbmNsdWRlZA0KICAgYmVmb3JlIDx3Y2hhci5oPi4gICovDQojaW5jbHVkZSA8c3RkZGVm Lmg+DQojaW5jbHVkZSA8c3RkaW8uaD4NCiNpbmNsdWRlIDx0aW1lLmg+DQojaW5jbHVkZSA8d2No YXIuaD4NCg0KIg0KaWYgdGVzdCAieCRhY19jdl9oYXZlX2RlY2xfd2N3aWR0aCIgPSB4eWVzOyB0 aGVuIDoNCiAgYWNfaGF2ZV9kZWNsPTENCmVsc2UNCiAgYWNfaGF2ZV9kZWNsPTANCmZpDQoNCmNh dCA+PmNvbmZkZWZzLmggPDxfQUNFT0YNCiNkZWZpbmUgSEFWRV9ERUNMX1dDV0lEVEggJGFjX2hh dmVfZGVjbA0KX0FDRU9GDQoNCiAgaWYgdGVzdCAkYWNfY3ZfaGF2ZV9kZWNsX3djd2lkdGggIT0g eWVzOyB0aGVuDQogICAgSEFWRV9ERUNMX1dDV0lEVEg9MA0KICBmaQ0KDQogIGlmIHRlc3QgJGFj X2N2X2Z1bmNfd2N3aWR0aCA9IHllczsgdGhlbg0KICAgICAgICAgICAgICAgIHsgJGFzX2VjaG8g IiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciB3Y3dpZHRoIHdv cmtzIHJlYXNvbmFibHkgaW4gVVRGLTggbG9jYWxlcyIgPiY1DQokYXNfZWNob19uICJjaGVja2lu ZyB3aGV0aGVyIHdjd2lkdGggd29ya3MgcmVhc29uYWJseSBpbiBVVEYtOCBsb2NhbGVzLi4uICIg PiY2OyB9DQppZiAke2dsX2N2X2Z1bmNfd2N3aWR0aF93b3Jrcys6fSBmYWxzZTsgdGhlbiA6DQog ICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2DQplbHNlDQoNCiAgICAgICAgaWYgdGVzdCAiJGNy b3NzX2NvbXBpbGluZyIgPSB5ZXM7IHRoZW4gOg0KDQogICAgICAgICAgIGNhc2UgIiRob3N0X29z IiBpbg0KICAgICAgICAgICAgICAgICAgICAgIyBHdWVzcyB5ZXMgb24gZ2xpYmMgYW5kIEFJWCA3 IHN5c3RlbXMuDQogICAgICAgICAgICAgKi1nbnUqIHwgYWl4WzctOV0qKSBnbF9jdl9mdW5jX3dj d2lkdGhfd29ya3M9Imd1ZXNzaW5nIHllcyI7Ow0KICAgICAgICAgICAgICopICAgICAgICAgICAg ICAgICAgZ2xfY3ZfZnVuY193Y3dpZHRoX3dvcmtzPSJndWVzc2luZyBubyI7Ow0KICAgICAgICAg ICBlc2FjDQoNCmVsc2UNCiAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFj X2V4dA0KLyogZW5kIGNvbmZkZWZzLmguICAqLw0KDQojaW5jbHVkZSA8bG9jYWxlLmg+DQovKiBB SVggMy4yLjUgZGVjbGFyZXMgd2N3aWR0aCBpbiA8c3RyaW5nLmg+LiAqLw0KI2luY2x1ZGUgPHN0 cmluZy5oPg0KLyogVHJ1NjQgd2l0aCBEZXNrdG9wIFRvb2xraXQgQyBoYXMgYSBidWc6IDxzdGRp by5oPiBtdXN0IGJlIGluY2x1ZGVkIGJlZm9yZQ0KICAgPHdjaGFyLmg+Lg0KICAgQlNEL09TIDQu MC4xIGhhcyBhIGJ1ZzogPHN0ZGRlZi5oPiwgPHN0ZGlvLmg+IGFuZCA8dGltZS5oPiBtdXN0IGJl IGluY2x1ZGVkDQogICBiZWZvcmUgPHdjaGFyLmg+LiAgKi8NCiNpbmNsdWRlIDxzdGRkZWYuaD4N CiNpbmNsdWRlIDxzdGRpby5oPg0KI2luY2x1ZGUgPHRpbWUuaD4NCiNpbmNsdWRlIDx3Y2hhci5o Pg0KI2lmICFIQVZFX0RFQ0xfV0NXSURUSA0KZXh0ZXJuDQojIGlmZGVmIF9fY3BsdXNwbHVzDQoi QyINCiMgZW5kaWYNCmludCB3Y3dpZHRoIChpbnQpOw0KI2VuZGlmDQppbnQgbWFpbiAoKQ0Kew0K ICBpbnQgcmVzdWx0ID0gMDsNCiAgaWYgKHNldGxvY2FsZSAoTENfQUxMLCAiZnJfRlIuVVRGLTgi KSAhPSBOVUxMKQ0KICAgIHsNCiAgICAgIGlmICh3Y3dpZHRoICgweDAzMDEpID4gMCkNCiAgICAg ICAgcmVzdWx0IHw9IDE7DQogICAgICBpZiAod2N3aWR0aCAoMHgyMDBCKSA+IDApDQogICAgICAg IHJlc3VsdCB8PSAyOw0KICAgIH0NCiAgcmV0dXJuIHJlc3VsdDsNCn0NCl9BQ0VPRg0KaWYgYWNf Zm5fY190cnlfcnVuICIkTElORU5PIjsgdGhlbiA6DQogIGdsX2N2X2Z1bmNfd2N3aWR0aF93b3Jr cz15ZXMNCmVsc2UNCiAgZ2xfY3ZfZnVuY193Y3dpZHRoX3dvcmtzPW5vDQpmaQ0Kcm0gLWYgY29y ZSAqLmNvcmUgY29yZS5jb25mdGVzdC4qIGdtb24ub3V0IGJiLm91dCBjb25mdGVzdCRhY19leGVl eHQgXA0KICBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LmJlYW0gY29uZnRlc3QuJGFjX2V4 dA0KZmkNCg0KDQpmaQ0KeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBy ZXN1bHQ6ICRnbF9jdl9mdW5jX3djd2lkdGhfd29ya3MiID4mNQ0KJGFzX2VjaG8gIiRnbF9jdl9m dW5jX3djd2lkdGhfd29ya3MiID4mNjsgfQ0KICAgIGNhc2UgIiRnbF9jdl9mdW5jX3djd2lkdGhf d29ya3MiIGluDQogICAgICAqeWVzKSA7Ow0KICAgICAgKm5vKSBSRVBMQUNFX1dDV0lEVEg9MSA7 Ow0KICAgIGVzYWMNCiAgZmkNCiAgaWYgdGVzdCAkYWNfY3ZfZnVuY193Y3dpZHRoICE9IHllcyB8 fCB0ZXN0ICRSRVBMQUNFX1dDV0lEVEggPSAxOyB0aGVuDQoNCg0KDQoNCg0KDQoNCg0KICBnbF9M SUJPQkpTPSIkZ2xfTElCT0JKUyB3Y3dpZHRoLiRhY19vYmpleHQiDQoNCiAgZmkNCiAgaWYgdGVz dCAkYWNfY3ZfZnVuY193Y3dpZHRoICE9IHllcyB8fCB0ZXN0ICRSRVBMQUNFX1dDV0lEVEggPSAx IFwNCiAgICAgfHwgdGVzdCAkSEFWRV9ERUNMX1dDV0lEVEggPSAwOyB0aGVuDQoNCiAgICA6DQoN CiAgZmkNCg0KDQoNCnsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hl Y2tpbmcgUE9TSVggdGVybWlvcyIgPiY1DQokYXNfZWNob19uICJjaGVja2luZyBQT1NJWCB0ZXJt aW9zLi4uICIgPiY2OyB9DQppZiAke2FjX2N2X3N5c19wb3NpeF90ZXJtaW9zKzp9IGZhbHNlOyB0 aGVuIDoNCiAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYNCmVsc2UNCiAgY2F0IGNvbmZkZWZz LmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dA0KLyogZW5kIGNvbmZkZWZzLmguICAqLw0K I2luY2x1ZGUgPHN5cy90eXBlcy5oPg0KI2luY2x1ZGUgPHVuaXN0ZC5oPg0KI2luY2x1ZGUgPHRl cm1pb3MuaD4NCg0KaW50DQptYWluICgpDQp7DQovKiBTdW5PUyA0LjAuMyBoYXMgdGVybWlvcy5o IGJ1dCBub3QgdGhlIGxpYnJhcnkgY2FsbHMuICAqLw0KICAgdGNnZXRhdHRyKDAsIDApOw0KICA7 DQogIHJldHVybiAwOw0KfQ0KX0FDRU9GDQppZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsg dGhlbiA6DQogIGFjX2N2X3N5c19wb3NpeF90ZXJtaW9zPXllcw0KZWxzZQ0KICBhY19jdl9zeXNf cG9zaXhfdGVybWlvcz1ubw0KZmkNCnJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRh Y19vYmpleHQgXA0KICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0DQpmaQ0K eyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9z eXNfcG9zaXhfdGVybWlvcyIgPiY1DQokYXNfZWNobyAiJGFjX2N2X3N5c19wb3NpeF90ZXJtaW9z IiA+JjY7IH0NCg0KDQogeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBj aGVja2luZyB3aGV0aGVyIHVzZSBvZiBUSU9DR1dJTlNaIHJlcXVpcmVzIHRlcm1pb3MuaCIgPiY1 DQokYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIHVzZSBvZiBUSU9DR1dJTlNaIHJlcXVpcmVz IHRlcm1pb3MuaC4uLiAiID4mNjsgfQ0KaWYgJHtnbF9jdl9zeXNfdGlvY2d3aW5zel9uZWVkc190 ZXJtaW9zX2grOn0gZmFsc2U7IHRoZW4gOg0KICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNg0K ZWxzZQ0KICBnbF9jdl9zeXNfdGlvY2d3aW5zel9uZWVkc190ZXJtaW9zX2g9bm8NCg0KICAgaWYg dGVzdCAkYWNfY3Zfc3lzX3Bvc2l4X3Rlcm1pb3MgPSB5ZXM7IHRoZW4NCiAgICAgY2F0IGNvbmZk ZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dA0KLyogZW5kIGNvbmZkZWZzLmguICAq Lw0KI2luY2x1ZGUgPHN5cy90eXBlcy5oPg0KIyAgICAgIGluY2x1ZGUgPHRlcm1pb3MuaD4NCiMg ICAgICBpZmRlZiBUSU9DR1dJTlNaDQogICAgICAgICB5ZXMNCiMgICAgICBlbmRpZg0KDQpfQUNF T0YNCmlmIChldmFsICIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQiKSAyPiY1IHwNCiAgJEVHUkVQ ICJ5ZXMiID4vZGV2L251bGwgMj4mMTsgdGhlbiA6DQogIGdsX2N2X3N5c190aW9jZ3dpbnN6X25l ZWRzX3Rlcm1pb3NfaD15ZXMNCmZpDQpybSAtZiBjb25mdGVzdCoNCg0KICAgZmkNCg0KZmkNCnsg JGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkZ2xfY3Zfc3lz X3Rpb2Nnd2luc3pfbmVlZHNfdGVybWlvc19oIiA+JjUNCiRhc19lY2hvICIkZ2xfY3Zfc3lzX3Rp b2Nnd2luc3pfbmVlZHNfdGVybWlvc19oIiA+JjY7IH0NCg0KYWNfZm5fY19jaGVja19kZWNsICIk TElORU5PIiAiYWxhcm0iICJhY19jdl9oYXZlX2RlY2xfYWxhcm0iICIkYWNfaW5jbHVkZXNfZGVm YXVsdCINCmlmIHRlc3QgIngkYWNfY3ZfaGF2ZV9kZWNsX2FsYXJtIiA9IHh5ZXM7IHRoZW4gOg0K ICBhY19oYXZlX2RlY2w9MQ0KZWxzZQ0KICBhY19oYXZlX2RlY2w9MA0KZmkNCg0KY2F0ID4+Y29u ZmRlZnMuaCA8PF9BQ0VPRg0KI2RlZmluZSBIQVZFX0RFQ0xfQUxBUk0gJGFjX2hhdmVfZGVjbA0K X0FDRU9GDQoNCg0KDQoNCg0KDQogIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElO RU5PfTogY2hlY2tpbmcgd2hldGhlciB1bmdldGMgd29ya3Mgb24gYXJiaXRyYXJ5IGJ5dGVzIiA+ JjUNCiRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgdW5nZXRjIHdvcmtzIG9uIGFyYml0cmFy eSBieXRlcy4uLiAiID4mNjsgfQ0KaWYgJHtnbF9jdl9mdW5jX3VuZ2V0Y193b3Jrcys6fSBmYWxz ZTsgdGhlbiA6DQogICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2DQplbHNlDQogIGlmIHRlc3Qg IiRjcm9zc19jb21waWxpbmciID0geWVzOyB0aGVuIDoNCiAgZ2xfY3ZfZnVuY191bmdldGNfd29y a3M9J2d1ZXNzaW5nIG5vJw0KZWxzZQ0KICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25m dGVzdC4kYWNfZXh0DQovKiBlbmQgY29uZmRlZnMuaC4gICovDQoNCiNpbmNsdWRlIDxzdGRpby5o Pg0KDQppbnQNCm1haW4gKCkNCnsNCkZJTEUgKmY7DQogICAgICAgICAgIGlmICghKGYgPSBmb3Bl biAoImNvbmZ0ZXN0LnRtcCIsICJ3KyIpKSkgcmV0dXJuIDE7DQogICAgICAgICAgIGlmIChmcHV0 cyAoImFiYyIsIGYpIDwgMCkgcmV0dXJuIDI7DQogICAgICAgICAgIHJld2luZCAoZik7DQogICAg ICAgICAgIGlmIChmZ2V0YyAoZikgIT0gJ2EnKSByZXR1cm4gMzsNCiAgICAgICAgICAgaWYgKGZn ZXRjIChmKSAhPSAnYicpIHJldHVybiA0Ow0KICAgICAgICAgICBpZiAodW5nZXRjICgnZCcsIGYp ICE9ICdkJykgcmV0dXJuIDU7DQogICAgICAgICAgIGlmIChmdGVsbCAoZikgIT0gMSkgcmV0dXJu IDY7DQogICAgICAgICAgIGlmIChmZ2V0YyAoZikgIT0gJ2QnKSByZXR1cm4gNzsNCiAgICAgICAg ICAgaWYgKGZ0ZWxsIChmKSAhPSAyKSByZXR1cm4gODsNCiAgICAgICAgICAgaWYgKGZzZWVrIChm LCAwLCBTRUVLX0NVUikgIT0gMCkgcmV0dXJuIDk7DQogICAgICAgICAgIGlmIChmdGVsbCAoZikg IT0gMikgcmV0dXJuIDEwOw0KICAgICAgICAgICBpZiAoZmdldGMgKGYpICE9ICdjJykgcmV0dXJu IDExOw0KICAgICAgICAgICBmY2xvc2UgKGYpOyByZW1vdmUgKCJjb25mdGVzdC50bXAiKTsNCiAg Ow0KICByZXR1cm4gMDsNCn0NCl9BQ0VPRg0KaWYgYWNfZm5fY190cnlfcnVuICIkTElORU5PIjsg dGhlbiA6DQogIGdsX2N2X2Z1bmNfdW5nZXRjX3dvcmtzPXllcw0KZWxzZQ0KICBnbF9jdl9mdW5j X3VuZ2V0Y193b3Jrcz1ubw0KZmkNCnJtIC1mIGNvcmUgKi5jb3JlIGNvcmUuY29uZnRlc3QuKiBn bW9uLm91dCBiYi5vdXQgY29uZnRlc3QkYWNfZXhlZXh0IFwNCiAgY29uZnRlc3QuJGFjX29iamV4 dCBjb25mdGVzdC5iZWFtIGNvbmZ0ZXN0LiRhY19leHQNCmZpDQoNCg0KZmkNCnsgJGFzX2VjaG8g IiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkZ2xfY3ZfZnVuY191bmdldGNf d29ya3MiID4mNQ0KJGFzX2VjaG8gIiRnbF9jdl9mdW5jX3VuZ2V0Y193b3JrcyIgPiY2OyB9DQog IGlmIHRlc3QgIiRnbF9jdl9mdW5jX3VuZ2V0Y193b3JrcyIgIT0geWVzOyB0aGVuDQoNCiRhc19l Y2hvICIjZGVmaW5lIEZVTkNfVU5HRVRDX0JST0tFTiAxIiA+PmNvbmZkZWZzLmgNCg0KICBmaQ0K DQoNCg0KDQogIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tp bmcgZm9yIExDX01FU1NBR0VTIiA+JjUNCiRhc19lY2hvX24gImNoZWNraW5nIGZvciBMQ19NRVNT QUdFUy4uLiAiID4mNjsgfQ0KaWYgJHtndF9jdl92YWxfTENfTUVTU0FHRVMrOn0gZmFsc2U7IHRo ZW4gOg0KICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNg0KZWxzZQ0KICBjYXQgY29uZmRlZnMu aCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0DQovKiBlbmQgY29uZmRlZnMuaC4gICovDQoj aW5jbHVkZSA8bG9jYWxlLmg+DQppbnQNCm1haW4gKCkNCnsNCnJldHVybiBMQ19NRVNTQUdFUw0K ICA7DQogIHJldHVybiAwOw0KfQ0KX0FDRU9GDQppZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5P IjsgdGhlbiA6DQogIGd0X2N2X3ZhbF9MQ19NRVNTQUdFUz15ZXMNCmVsc2UNCiAgZ3RfY3ZfdmFs X0xDX01FU1NBR0VTPW5vDQpmaQ0Kcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFj X29iamV4dCBcDQogICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQNCmZpDQp7 ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGd0X2N2X3Zh bF9MQ19NRVNTQUdFUyIgPiY1DQokYXNfZWNobyAiJGd0X2N2X3ZhbF9MQ19NRVNTQUdFUyIgPiY2 OyB9DQogIGlmIHRlc3QgJGd0X2N2X3ZhbF9MQ19NRVNTQUdFUyA9IHllczsgdGhlbg0KDQokYXNf ZWNobyAiI2RlZmluZSBIQVZFX0xDX01FU1NBR0VTIDEiID4+Y29uZmRlZnMuaA0KDQogIGZpDQoN Cg0KICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcg Zm9yIENGUHJlZmVyZW5jZXNDb3B5QXBwVmFsdWUiID4mNQ0KJGFzX2VjaG9fbiAiY2hlY2tpbmcg Zm9yIENGUHJlZmVyZW5jZXNDb3B5QXBwVmFsdWUuLi4gIiA+JjY7IH0NCmlmICR7Z3RfY3ZfZnVu Y19DRlByZWZlcmVuY2VzQ29weUFwcFZhbHVlKzp9IGZhbHNlOyB0aGVuIDoNCiAgJGFzX2VjaG9f biAiKGNhY2hlZCkgIiA+JjYNCmVsc2UNCiAgZ3Rfc2F2ZV9MSUJTPSIkTElCUyINCiAgICAgTElC Uz0iJExJQlMgLVdsLC1mcmFtZXdvcmsgLVdsLENvcmVGb3VuZGF0aW9uIg0KICAgICBjYXQgY29u ZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0DQovKiBlbmQgY29uZmRlZnMuaC4g ICovDQojaW5jbHVkZSA8Q29yZUZvdW5kYXRpb24vQ0ZQcmVmZXJlbmNlcy5oPg0KaW50DQptYWlu ICgpDQp7DQpDRlByZWZlcmVuY2VzQ29weUFwcFZhbHVlKE5VTEwsIE5VTEwpDQogIDsNCiAgcmV0 dXJuIDA7DQp9DQpfQUNFT0YNCmlmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoN CiAgZ3RfY3ZfZnVuY19DRlByZWZlcmVuY2VzQ29weUFwcFZhbHVlPXllcw0KZWxzZQ0KICBndF9j dl9mdW5jX0NGUHJlZmVyZW5jZXNDb3B5QXBwVmFsdWU9bm8NCmZpDQpybSAtZiBjb3JlIGNvbmZ0 ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwNCiAgICBjb25mdGVzdCRhY19leGVleHQgY29u ZnRlc3QuJGFjX2V4dA0KICAgICBMSUJTPSIkZ3Rfc2F2ZV9MSUJTIg0KZmkNCnsgJGFzX2VjaG8g IiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkZ3RfY3ZfZnVuY19DRlByZWZl cmVuY2VzQ29weUFwcFZhbHVlIiA+JjUNCiRhc19lY2hvICIkZ3RfY3ZfZnVuY19DRlByZWZlcmVu Y2VzQ29weUFwcFZhbHVlIiA+JjY7IH0NCiAgaWYgdGVzdCAkZ3RfY3ZfZnVuY19DRlByZWZlcmVu Y2VzQ29weUFwcFZhbHVlID0geWVzOyB0aGVuDQoNCiRhc19lY2hvICIjZGVmaW5lIEhBVkVfQ0ZQ UkVGRVJFTkNFU0NPUFlBUFBWQUxVRSAxIiA+PmNvbmZkZWZzLmgNCg0KICBmaQ0KICAgIHsgJGFz X2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIENGTG9jYWxl Q29weUN1cnJlbnQiID4mNQ0KJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIENGTG9jYWxlQ29weUN1 cnJlbnQuLi4gIiA+JjY7IH0NCmlmICR7Z3RfY3ZfZnVuY19DRkxvY2FsZUNvcHlDdXJyZW50Kzp9 IGZhbHNlOyB0aGVuIDoNCiAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYNCmVsc2UNCiAgZ3Rf c2F2ZV9MSUJTPSIkTElCUyINCiAgICAgTElCUz0iJExJQlMgLVdsLC1mcmFtZXdvcmsgLVdsLENv cmVGb3VuZGF0aW9uIg0KICAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4k YWNfZXh0DQovKiBlbmQgY29uZmRlZnMuaC4gICovDQojaW5jbHVkZSA8Q29yZUZvdW5kYXRpb24v Q0ZMb2NhbGUuaD4NCmludA0KbWFpbiAoKQ0Kew0KQ0ZMb2NhbGVDb3B5Q3VycmVudCgpOw0KICA7 DQogIHJldHVybiAwOw0KfQ0KX0FDRU9GDQppZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsg dGhlbiA6DQogIGd0X2N2X2Z1bmNfQ0ZMb2NhbGVDb3B5Q3VycmVudD15ZXMNCmVsc2UNCiAgZ3Rf Y3ZfZnVuY19DRkxvY2FsZUNvcHlDdXJyZW50PW5vDQpmaQ0Kcm0gLWYgY29yZSBjb25mdGVzdC5l cnIgY29uZnRlc3QuJGFjX29iamV4dCBcDQogICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0 LiRhY19leHQNCiAgICAgTElCUz0iJGd0X3NhdmVfTElCUyINCmZpDQp7ICRhc19lY2hvICIkYXNf bWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGd0X2N2X2Z1bmNfQ0ZMb2NhbGVDb3B5 Q3VycmVudCIgPiY1DQokYXNfZWNobyAiJGd0X2N2X2Z1bmNfQ0ZMb2NhbGVDb3B5Q3VycmVudCIg PiY2OyB9DQogIGlmIHRlc3QgJGd0X2N2X2Z1bmNfQ0ZMb2NhbGVDb3B5Q3VycmVudCA9IHllczsg dGhlbg0KDQokYXNfZWNobyAiI2RlZmluZSBIQVZFX0NGTE9DQUxFQ09QWUNVUlJFTlQgMSIgPj5j b25mZGVmcy5oDQoNCiAgZmkNCiAgSU5UTF9NQUNPU1hfTElCUz0NCiAgaWYgdGVzdCAkZ3RfY3Zf ZnVuY19DRlByZWZlcmVuY2VzQ29weUFwcFZhbHVlID0geWVzIHx8IHRlc3QgJGd0X2N2X2Z1bmNf Q0ZMb2NhbGVDb3B5Q3VycmVudCA9IHllczsgdGhlbg0KICAgIElOVExfTUFDT1NYX0xJQlM9Ii1X bCwtZnJhbWV3b3JrIC1XbCxDb3JlRm91bmRhdGlvbiINCiAgZmkNCg0KDQoNCg0KDQoNCg0KDQoN Cg0KDQogICBpZiBmYWxzZTsgdGhlbg0KICBHTF9DT05EX0xJQlRPT0xfVFJVRT0NCiAgR0xfQ09O RF9MSUJUT09MX0ZBTFNFPScjJw0KZWxzZQ0KICBHTF9DT05EX0xJQlRPT0xfVFJVRT0nIycNCiAg R0xfQ09ORF9MSUJUT09MX0ZBTFNFPQ0KZmkNCg0KICBnbF9jb25kX2xpYnRvb2w9ZmFsc2UNCiAg Z2xfbGliZGVwcz0NCiAgZ2xfbHRsaWJkZXBzPQ0KICBnbF9tNF9iYXNlPSdtNCcNCg0KDQoNCg0K DQoNCg0KDQoNCiAgZ2xfc291cmNlX2Jhc2U9J2xpYicNCiAgIyBDb2RlIGZyb20gbW9kdWxlIGFj bDoNCg0KICAjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtYWNsIHdhcyBnaXZlbi4NCmlmIHRlc3Qg IiR7ZW5hYmxlX2FjbCtzZXR9IiA9IHNldDsgdGhlbiA6DQogIGVuYWJsZXZhbD0kZW5hYmxlX2Fj bDsNCmVsc2UNCiAgZW5hYmxlX2FjbD1hdXRvDQpmaQ0KDQoNCiAgTElCX0FDTD0NCiAgdXNlX2Fj bD0wDQoNCiAgaWYgdGVzdCAieCRlbmFibGVfYWNsIiAhPSAieG5vIjsgdGhlbg0KICAgICAgICBm b3IgYWNfaGVhZGVyIGluIHN5cy9hY2wuaA0KZG8gOg0KICBhY19mbl9jX2NoZWNrX2hlYWRlcl9t b25ncmVsICIkTElORU5PIiAic3lzL2FjbC5oIiAiYWNfY3ZfaGVhZGVyX3N5c19hY2xfaCIgIiRh Y19pbmNsdWRlc19kZWZhdWx0Ig0KaWYgdGVzdCAieCRhY19jdl9oZWFkZXJfc3lzX2FjbF9oIiA9 IHh5ZXM7IHRoZW4gOg0KICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GDQojZGVmaW5lIEhBVkVf U1lTX0FDTF9IIDENCl9BQ0VPRg0KDQpmaQ0KDQpkb25lDQoNCiAgICBpZiB0ZXN0ICRhY19jdl9o ZWFkZXJfc3lzX2FjbF9oID0geWVzOyB0aGVuDQogICAgICBhY19zYXZlX0xJQlM9JExJQlMNCg0K ICAgICAgICAgICAgICAgICAgaWYgdGVzdCAkdXNlX2FjbCA9IDA7IHRoZW4NCiAgICAgICAgeyAk YXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgbGlicmFy eSBjb250YWluaW5nIGFjbF9nZXRfZmlsZSIgPiY1DQokYXNfZWNob19uICJjaGVja2luZyBmb3Ig bGlicmFyeSBjb250YWluaW5nIGFjbF9nZXRfZmlsZS4uLiAiID4mNjsgfQ0KaWYgJHthY19jdl9z ZWFyY2hfYWNsX2dldF9maWxlKzp9IGZhbHNlOyB0aGVuIDoNCiAgJGFzX2VjaG9fbiAiKGNhY2hl ZCkgIiA+JjYNCmVsc2UNCiAgYWNfZnVuY19zZWFyY2hfc2F2ZV9MSUJTPSRMSUJTDQpjYXQgY29u ZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0DQovKiBlbmQgY29uZmRlZnMuaC4g ICovDQoNCi8qIE92ZXJyaWRlIGFueSBHQ0MgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFu IGVycm9yLg0KICAgVXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0 eXBlIG9mIGEgR0NDDQogICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUg d291bGQgc3RpbGwgYXBwbHkuICAqLw0KI2lmZGVmIF9fY3BsdXNwbHVzDQpleHRlcm4gIkMiDQoj ZW5kaWYNCmNoYXIgYWNsX2dldF9maWxlICgpOw0KaW50DQptYWluICgpDQp7DQpyZXR1cm4gYWNs X2dldF9maWxlICgpOw0KICA7DQogIHJldHVybiAwOw0KfQ0KX0FDRU9GDQpmb3IgYWNfbGliIGlu ICcnIGFjbCBwYWNsOyBkbw0KICBpZiB0ZXN0IC16ICIkYWNfbGliIjsgdGhlbg0KICAgIGFjX3Jl cz0ibm9uZSByZXF1aXJlZCINCiAgZWxzZQ0KICAgIGFjX3Jlcz0tbCRhY19saWINCiAgICBMSUJT PSItbCRhY19saWIgICRhY19mdW5jX3NlYXJjaF9zYXZlX0xJQlMiDQogIGZpDQogIGlmIGFjX2Zu X2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoNCiAgYWNfY3Zfc2VhcmNoX2FjbF9nZXRfZmls ZT0kYWNfcmVzDQpmaQ0Kcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4 dCBcDQogICAgY29uZnRlc3QkYWNfZXhlZXh0DQogIGlmICR7YWNfY3Zfc2VhcmNoX2FjbF9nZXRf ZmlsZSs6fSBmYWxzZTsgdGhlbiA6DQogIGJyZWFrDQpmaQ0KZG9uZQ0KaWYgJHthY19jdl9zZWFy Y2hfYWNsX2dldF9maWxlKzp9IGZhbHNlOyB0aGVuIDoNCg0KZWxzZQ0KICBhY19jdl9zZWFyY2hf YWNsX2dldF9maWxlPW5vDQpmaQ0Kcm0gY29uZnRlc3QuJGFjX2V4dA0KTElCUz0kYWNfZnVuY19z ZWFyY2hfc2F2ZV9MSUJTDQpmaQ0KeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5F Tk99OiByZXN1bHQ6ICRhY19jdl9zZWFyY2hfYWNsX2dldF9maWxlIiA+JjUNCiRhc19lY2hvICIk YWNfY3Zfc2VhcmNoX2FjbF9nZXRfZmlsZSIgPiY2OyB9DQphY19yZXM9JGFjX2N2X3NlYXJjaF9h Y2xfZ2V0X2ZpbGUNCmlmIHRlc3QgIiRhY19yZXMiICE9IG5vOyB0aGVuIDoNCiAgdGVzdCAiJGFj X3JlcyIgPSAibm9uZSByZXF1aXJlZCIgfHwgTElCUz0iJGFjX3JlcyAkTElCUyINCiAgaWYgdGVz dCAiJGFjX2N2X3NlYXJjaF9hY2xfZ2V0X2ZpbGUiICE9ICJub25lIHJlcXVpcmVkIjsgdGhlbg0K ICAgICAgICAgICAgIExJQl9BQ0w9JGFjX2N2X3NlYXJjaF9hY2xfZ2V0X2ZpbGUNCiAgICAgICAg ICAgZmkNCiAgICAgICAgICAgZm9yIGFjX2Z1bmMgaW4gYWNsX2dldF9maWxlIGFjbF9nZXRfZmQg YWNsX3NldF9maWxlIGFjbF9zZXRfZmQgXA0KICAgICAgICAgICAgICBhY2xfZnJlZSBhY2xfZnJv bV9tb2RlIGFjbF9mcm9tX3RleHQgXA0KICAgICAgICAgICAgICBhY2xfZGVsZXRlX2RlZl9maWxl IGFjbF9leHRlbmRlZF9maWxlIFwNCiAgICAgICAgICAgICAgYWNsX2RlbGV0ZV9mZF9ucCBhY2xf ZGVsZXRlX2ZpbGVfbnAgXA0KICAgICAgICAgICAgICBhY2xfY29weV9leHRfbmF0aXZlIGFjbF9j cmVhdGVfZW50cnlfbnAgXA0KICAgICAgICAgICAgICBhY2xfdG9fc2hvcnRfdGV4dCBhY2xfZnJl ZV90ZXh0DQpkbyA6DQogIGFzX2FjX3Zhcj1gJGFzX2VjaG8gImFjX2N2X2Z1bmNfJGFjX2Z1bmMi IHwgJGFzX3RyX3NoYA0KYWNfZm5fY19jaGVja19mdW5jICIkTElORU5PIiAiJGFjX2Z1bmMiICIk YXNfYWNfdmFyIg0KaWYgZXZhbCB0ZXN0IFwieFwkIiRhc19hY192YXIiXCIgPSB4InllcyI7IHRo ZW4gOg0KICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GDQojZGVmaW5lIGAkYXNfZWNobyAiSEFW RV8kYWNfZnVuYyIgfCAkYXNfdHJfY3BwYCAxDQpfQUNFT0YNCg0KZmkNCmRvbmUNCg0KICAgICAg ICAgICAjIElmIHRoZSBhY2xfZ2V0X2ZpbGUgYnVnIGlzIGRldGVjdGVkLCBkb24ndCBlbmFibGUg dGhlIEFDTCBzdXBwb3J0Lg0KDQogIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElO RU5PfTogY2hlY2tpbmcgZm9yIHdvcmtpbmcgYWNsX2dldF9maWxlIiA+JjUNCiRhc19lY2hvX24g ImNoZWNraW5nIGZvciB3b3JraW5nIGFjbF9nZXRfZmlsZS4uLiAiID4mNjsgfQ0KaWYgJHtnbF9j dl9mdW5jX3dvcmtpbmdfYWNsX2dldF9maWxlKzp9IGZhbHNlOyB0aGVuIDoNCiAgJGFzX2VjaG9f biAiKGNhY2hlZCkgIiA+JjYNCmVsc2UNCiAgaWYgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgPSB5 ZXM7IHRoZW4gOg0KICBnbF9jdl9mdW5jX3dvcmtpbmdfYWNsX2dldF9maWxlPWNyb3NzLWNvbXBp bGluZw0KZWxzZQ0KICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0 DQovKiBlbmQgY29uZmRlZnMuaC4gICovDQojaW5jbHVkZSA8c3lzL3R5cGVzLmg+DQogICAgICAg ICAgICNpbmNsdWRlIDxzeXMvYWNsLmg+DQogICAgICAgICAgICNpbmNsdWRlIDxlcnJuby5oPg0K DQppbnQNCm1haW4gKCkNCnsNCmlmICghYWNsX2dldF9maWxlICgiLiIsIEFDTF9UWVBFX0FDQ0VT UykgJiYgZXJybm8gPT0gRU5PRU5UKQ0KICAgICAgICAgICAgICByZXR1cm4gMTsNCiAgICAgICAg ICAgIHJldHVybiAwOw0KDQogIDsNCiAgcmV0dXJuIDA7DQp9DQpfQUNFT0YNCmlmIGFjX2ZuX2Nf dHJ5X3J1biAiJExJTkVOTyI7IHRoZW4gOg0KICBnbF9jdl9mdW5jX3dvcmtpbmdfYWNsX2dldF9m aWxlPXllcw0KZWxzZQ0KICBnbF9jdl9mdW5jX3dvcmtpbmdfYWNsX2dldF9maWxlPW5vDQpmaQ0K cm0gLWYgY29yZSAqLmNvcmUgY29yZS5jb25mdGVzdC4qIGdtb24ub3V0IGJiLm91dCBjb25mdGVz dCRhY19leGVleHQgXA0KICBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LmJlYW0gY29uZnRl c3QuJGFjX2V4dA0KZmkNCg0KZmkNCnsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElO RU5PfTogcmVzdWx0OiAkZ2xfY3ZfZnVuY193b3JraW5nX2FjbF9nZXRfZmlsZSIgPiY1DQokYXNf ZWNobyAiJGdsX2N2X2Z1bmNfd29ya2luZ19hY2xfZ2V0X2ZpbGUiID4mNjsgfQ0KDQogIGlmIHRl c3QgJGdsX2N2X2Z1bmNfd29ya2luZ19hY2xfZ2V0X2ZpbGUgPSB5ZXM7IHRoZW4gOg0KICB1c2Vf YWNsPTENCmZpDQoNCiAgICAgICAgICAgaWYgdGVzdCAkdXNlX2FjbCA9IDE7IHRoZW4NCiAgICAg ICAgICAgICAgICAgICAgICAgICAgZm9yIGFjX2hlYWRlciBpbiBhY2wvbGliYWNsLmgNCmRvIDoN CiAgYWNfZm5fY19jaGVja19oZWFkZXJfbW9uZ3JlbCAiJExJTkVOTyIgImFjbC9saWJhY2wuaCIg ImFjX2N2X2hlYWRlcl9hY2xfbGliYWNsX2giICIkYWNfaW5jbHVkZXNfZGVmYXVsdCINCmlmIHRl c3QgIngkYWNfY3ZfaGVhZGVyX2FjbF9saWJhY2xfaCIgPSB4eWVzOyB0aGVuIDoNCiAgY2F0ID4+ Y29uZmRlZnMuaCA8PF9BQ0VPRg0KI2RlZmluZSBIQVZFX0FDTF9MSUJBQ0xfSCAxDQpfQUNFT0YN Cg0KZmkNCg0KZG9uZQ0KDQoNCg0KDQoNCg0KDQoNCg0KICBmb3IgYWNfZnVuYyBpbiBhY2xfZW50 cmllcw0KZG8gOg0KICBhY19mbl9jX2NoZWNrX2Z1bmMgIiRMSU5FTk8iICJhY2xfZW50cmllcyIg ImFjX2N2X2Z1bmNfYWNsX2VudHJpZXMiDQppZiB0ZXN0ICJ4JGFjX2N2X2Z1bmNfYWNsX2VudHJp ZXMiID0geHllczsgdGhlbiA6DQogIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YNCiNkZWZpbmUg SEFWRV9BQ0xfRU5UUklFUyAxDQpfQUNFT0YNCg0KZWxzZQ0KDQogICAgZ2xfTElCT0JKUz0iJGds X0xJQk9CSlMgJGFjX2Z1bmMuJGFjX29iamV4dCINCg0KZmkNCmRvbmUNCg0KDQogICAgICAgICAg ICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3Ig QUNMX0ZJUlNUX0VOVFJZIiA+JjUNCiRhc19lY2hvX24gImNoZWNraW5nIGZvciBBQ0xfRklSU1Rf RU5UUlkuLi4gIiA+JjY7IH0NCmlmICR7Z2xfY3ZfYWNsX0FDTF9GSVJTVF9FTlRSWSs6fSBmYWxz ZTsgdGhlbiA6DQogICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2DQplbHNlDQogIGNhdCBjb25m ZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQNCi8qIGVuZCBjb25mZGVmcy5oLiAg Ki8NCiNpbmNsdWRlIDxzeXMvdHlwZXMuaD4NCiNpbmNsdWRlIDxzeXMvYWNsLmg+DQppbnQgdHlw ZSA9IEFDTF9GSVJTVF9FTlRSWTsNCmludA0KbWFpbiAoKQ0Kew0KDQogIDsNCiAgcmV0dXJuIDA7 DQp9DQpfQUNFT0YNCmlmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoNCiAg Z2xfY3ZfYWNsX0FDTF9GSVJTVF9FTlRSWT15ZXMNCmVsc2UNCiAgZ2xfY3ZfYWNsX0FDTF9GSVJT VF9FTlRSWT1ubw0KZmkNCnJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpl eHQgY29uZnRlc3QuJGFjX2V4dA0KZmkNCnsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0k TElORU5PfTogcmVzdWx0OiAkZ2xfY3ZfYWNsX0FDTF9GSVJTVF9FTlRSWSIgPiY1DQokYXNfZWNo byAiJGdsX2N2X2FjbF9BQ0xfRklSU1RfRU5UUlkiID4mNjsgfQ0KICAgICAgICAgICAgIGlmIHRl c3QgJGdsX2N2X2FjbF9BQ0xfRklSU1RfRU5UUlkgPSB5ZXM7IHRoZW4NCg0KJGFzX2VjaG8gIiNk ZWZpbmUgSEFWRV9BQ0xfRklSU1RfRU5UUlkgMSIgPj5jb25mZGVmcy5oDQoNCiAgICAgICAgICAg ICBmaQ0KICAgICAgICAgICAgICAgICAgICAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19s aW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBBQ0xfVFlQRV9FWFRFTkRFRCIgPiY1DQokYXNf ZWNob19uICJjaGVja2luZyBmb3IgQUNMX1RZUEVfRVhURU5ERUQuLi4gIiA+JjY7IH0NCmlmICR7 Z2xfY3ZfYWNsX0FDTF9UWVBFX0VYVEVOREVEKzp9IGZhbHNlOyB0aGVuIDoNCiAgJGFzX2VjaG9f biAiKGNhY2hlZCkgIiA+JjYNCmVsc2UNCiAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29u ZnRlc3QuJGFjX2V4dA0KLyogZW5kIGNvbmZkZWZzLmguICAqLw0KI2luY2x1ZGUgPHN5cy90eXBl cy5oPg0KI2luY2x1ZGUgPHN5cy9hY2wuaD4NCmludCB0eXBlID0gQUNMX1RZUEVfRVhURU5ERUQ7 DQppbnQNCm1haW4gKCkNCnsNCg0KICA7DQogIHJldHVybiAwOw0KfQ0KX0FDRU9GDQppZiBhY19m bl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6DQogIGdsX2N2X2FjbF9BQ0xfVFlQRV9F WFRFTkRFRD15ZXMNCmVsc2UNCiAgZ2xfY3ZfYWNsX0FDTF9UWVBFX0VYVEVOREVEPW5vDQpmaQ0K cm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNf ZXh0DQpmaQ0KeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6 ICRnbF9jdl9hY2xfQUNMX1RZUEVfRVhURU5ERUQiID4mNQ0KJGFzX2VjaG8gIiRnbF9jdl9hY2xf QUNMX1RZUEVfRVhURU5ERUQiID4mNjsgfQ0KICAgICAgICAgICAgIGlmIHRlc3QgJGdsX2N2X2Fj bF9BQ0xfVFlQRV9FWFRFTkRFRCA9IHllczsgdGhlbg0KDQokYXNfZWNobyAiI2RlZmluZSBIQVZF X0FDTF9UWVBFX0VYVEVOREVEIDEiID4+Y29uZmRlZnMuaA0KDQogICAgICAgICAgICAgZmkNCiAg ICAgICAgICAgZWxzZQ0KICAgICAgICAgICAgIExJQl9BQ0w9DQogICAgICAgICAgIGZpDQoNCmZp DQoNCiAgICAgIGZpDQoNCiAgICAgICAgICAgIGlmIHRlc3QgJHVzZV9hY2wgPSAwOyB0aGVuDQog ICAgICAgIGZvciBhY19mdW5jIGluIGZhY2wNCmRvIDoNCiAgYWNfZm5fY19jaGVja19mdW5jICIk TElORU5PIiAiZmFjbCIgImFjX2N2X2Z1bmNfZmFjbCINCmlmIHRlc3QgIngkYWNfY3ZfZnVuY19m YWNsIiA9IHh5ZXM7IHRoZW4gOg0KICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GDQojZGVmaW5l IEhBVkVfRkFDTCAxDQpfQUNFT0YNCg0KZmkNCmRvbmUNCg0KICAgICAgICBpZiB0ZXN0ICRhY19j dl9mdW5jX2ZhY2wgPSB5ZXM7IHRoZW4NCiAgICAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHth c19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBsaWJyYXJ5IGNvbnRhaW5pbmcgYWNsX3Ry aXZpYWwiID4mNQ0KJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIGxpYnJhcnkgY29udGFpbmluZyBh Y2xfdHJpdmlhbC4uLiAiID4mNjsgfQ0KaWYgJHthY19jdl9zZWFyY2hfYWNsX3RyaXZpYWwrOn0g ZmFsc2U7IHRoZW4gOg0KICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNg0KZWxzZQ0KICBhY19m dW5jX3NlYXJjaF9zYXZlX0xJQlM9JExJQlMNCmNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNv bmZ0ZXN0LiRhY19leHQNCi8qIGVuZCBjb25mZGVmcy5oLiAgKi8NCg0KLyogT3ZlcnJpZGUgYW55 IEdDQyBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuDQogICBVc2UgY2hhciBi ZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBHQ0MNCiAgIGJ1aWx0 aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICov DQojaWZkZWYgX19jcGx1c3BsdXMNCmV4dGVybiAiQyINCiNlbmRpZg0KY2hhciBhY2xfdHJpdmlh bCAoKTsNCmludA0KbWFpbiAoKQ0Kew0KcmV0dXJuIGFjbF90cml2aWFsICgpOw0KICA7DQogIHJl dHVybiAwOw0KfQ0KX0FDRU9GDQpmb3IgYWNfbGliIGluICcnIHNlYzsgZG8NCiAgaWYgdGVzdCAt eiAiJGFjX2xpYiI7IHRoZW4NCiAgICBhY19yZXM9Im5vbmUgcmVxdWlyZWQiDQogIGVsc2UNCiAg ICBhY19yZXM9LWwkYWNfbGliDQogICAgTElCUz0iLWwkYWNfbGliICAkYWNfZnVuY19zZWFyY2hf c2F2ZV9MSUJTIg0KICBmaQ0KICBpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6 DQogIGFjX2N2X3NlYXJjaF9hY2xfdHJpdmlhbD0kYWNfcmVzDQpmaQ0Kcm0gLWYgY29yZSBjb25m dGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcDQogICAgY29uZnRlc3QkYWNfZXhlZXh0DQog IGlmICR7YWNfY3Zfc2VhcmNoX2FjbF90cml2aWFsKzp9IGZhbHNlOyB0aGVuIDoNCiAgYnJlYWsN CmZpDQpkb25lDQppZiAke2FjX2N2X3NlYXJjaF9hY2xfdHJpdmlhbCs6fSBmYWxzZTsgdGhlbiA6 DQoNCmVsc2UNCiAgYWNfY3Zfc2VhcmNoX2FjbF90cml2aWFsPW5vDQpmaQ0Kcm0gY29uZnRlc3Qu JGFjX2V4dA0KTElCUz0kYWNfZnVuY19zZWFyY2hfc2F2ZV9MSUJTDQpmaQ0KeyAkYXNfZWNobyAi JGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9zZWFyY2hfYWNsX3Ry aXZpYWwiID4mNQ0KJGFzX2VjaG8gIiRhY19jdl9zZWFyY2hfYWNsX3RyaXZpYWwiID4mNjsgfQ0K YWNfcmVzPSRhY19jdl9zZWFyY2hfYWNsX3RyaXZpYWwNCmlmIHRlc3QgIiRhY19yZXMiICE9IG5v OyB0aGVuIDoNCiAgdGVzdCAiJGFjX3JlcyIgPSAibm9uZSByZXF1aXJlZCIgfHwgTElCUz0iJGFj X3JlcyAkTElCUyINCiAgaWYgdGVzdCAiJGFjX2N2X3NlYXJjaF9hY2xfdHJpdmlhbCIgIT0gIm5v bmUgcmVxdWlyZWQiOyB0aGVuDQogICAgICAgICAgICAgICBMSUJfQUNMPSRhY19jdl9zZWFyY2hf YWNsX3RyaXZpYWwNCiAgICAgICAgICAgICBmaQ0KDQpmaQ0KDQogICAgICAgICAgZm9yIGFjX2Z1 bmMgaW4gYWNsX3RyaXZpYWwNCmRvIDoNCiAgYWNfZm5fY19jaGVja19mdW5jICIkTElORU5PIiAi YWNsX3RyaXZpYWwiICJhY19jdl9mdW5jX2FjbF90cml2aWFsIg0KaWYgdGVzdCAieCRhY19jdl9m dW5jX2FjbF90cml2aWFsIiA9IHh5ZXM7IHRoZW4gOg0KICBjYXQgPj5jb25mZGVmcy5oIDw8X0FD RU9GDQojZGVmaW5lIEhBVkVfQUNMX1RSSVZJQUwgMQ0KX0FDRU9GDQoNCmZpDQpkb25lDQoNCiAg ICAgICAgICB1c2VfYWNsPTENCiAgICAgICAgZmkNCiAgICAgIGZpDQoNCiAgICAgICAgICAgIGlm IHRlc3QgJHVzZV9hY2wgPSAwOyB0aGVuDQogICAgICAgIGZvciBhY19mdW5jIGluIGdldGFjbA0K ZG8gOg0KICBhY19mbl9jX2NoZWNrX2Z1bmMgIiRMSU5FTk8iICJnZXRhY2wiICJhY19jdl9mdW5j X2dldGFjbCINCmlmIHRlc3QgIngkYWNfY3ZfZnVuY19nZXRhY2wiID0geHllczsgdGhlbiA6DQog IGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YNCiNkZWZpbmUgSEFWRV9HRVRBQ0wgMQ0KX0FDRU9G DQoNCmZpDQpkb25lDQoNCiAgICAgICAgaWYgdGVzdCAkYWNfY3ZfZnVuY19nZXRhY2wgPSB5ZXM7 IHRoZW4NCiAgICAgICAgICB1c2VfYWNsPTENCiAgICAgICAgZmkNCiAgICAgIGZpDQoNCiAgICAg ICAgICAgIGlmIHRlc3QgJHVzZV9hY2wgPSAwOyB0aGVuDQogICAgICAgIGZvciBhY19mdW5jIGlu IGFjbHhfZ2V0DQpkbyA6DQogIGFjX2ZuX2NfY2hlY2tfZnVuYyAiJExJTkVOTyIgImFjbHhfZ2V0 IiAiYWNfY3ZfZnVuY19hY2x4X2dldCINCmlmIHRlc3QgIngkYWNfY3ZfZnVuY19hY2x4X2dldCIg PSB4eWVzOyB0aGVuIDoNCiAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRg0KI2RlZmluZSBIQVZF X0FDTFhfR0VUIDENCl9BQ0VPRg0KDQpmaQ0KZG9uZQ0KDQogICAgICAgIGlmIHRlc3QgJGFjX2N2 X2Z1bmNfYWNseF9nZXQgPSB5ZXM7IHRoZW4NCiAgICAgICAgICB1c2VfYWNsPTENCiAgICAgICAg ZmkNCiAgICAgIGZpDQoNCiAgICAgICAgICAgIGlmIHRlc3QgJHVzZV9hY2wgPSAwIHx8IHRlc3Qg IiRhY19jdl9mdW5jX2FjbHhfZ2V0IiA9IHllczsgdGhlbg0KICAgICAgICBmb3IgYWNfZnVuYyBp biBzdGF0YWNsDQpkbyA6DQogIGFjX2ZuX2NfY2hlY2tfZnVuYyAiJExJTkVOTyIgInN0YXRhY2wi ICJhY19jdl9mdW5jX3N0YXRhY2wiDQppZiB0ZXN0ICJ4JGFjX2N2X2Z1bmNfc3RhdGFjbCIgPSB4 eWVzOyB0aGVuIDoNCiAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRg0KI2RlZmluZSBIQVZFX1NU QVRBQ0wgMQ0KX0FDRU9GDQoNCmZpDQpkb25lDQoNCiAgICAgICAgaWYgdGVzdCAkYWNfY3ZfZnVu Y19zdGF0YWNsID0geWVzOyB0aGVuDQogICAgICAgICAgdXNlX2FjbD0xDQogICAgICAgIGZpDQog ICAgICBmaQ0KDQogICAgICAgICAgICBpZiB0ZXN0ICR1c2VfYWNsID0gMDsgdGhlbg0KICAgICAg ICBmb3IgYWNfZnVuYyBpbiBhY2xzb3J0DQpkbyA6DQogIGFjX2ZuX2NfY2hlY2tfZnVuYyAiJExJ TkVOTyIgImFjbHNvcnQiICJhY19jdl9mdW5jX2FjbHNvcnQiDQppZiB0ZXN0ICJ4JGFjX2N2X2Z1 bmNfYWNsc29ydCIgPSB4eWVzOyB0aGVuIDoNCiAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRg0K I2RlZmluZSBIQVZFX0FDTFNPUlQgMQ0KX0FDRU9GDQoNCmZpDQpkb25lDQoNCiAgICAgICAgaWYg dGVzdCAkYWNfY3ZfZnVuY19hY2xzb3J0ID0geWVzOyB0aGVuDQogICAgICAgICAgdXNlX2FjbD0x DQogICAgICAgIGZpDQogICAgICBmaQ0KDQogICAgICBMSUJTPSRhY19zYXZlX0xJQlMNCiAgICBm aQ0KICAgIGlmIHRlc3QgIngkZW5hYmxlX2FjbCR1c2VfYWNsIiA9ICJ4eWVzMCI7IHRoZW4NCiAg ICAgIGFzX2ZuX2Vycm9yICQ/ICJBQ0xzIGVuYWJsZWQgYnV0IHN1cHBvcnQgbm90IGRldGVjdGVk IiAiJExJTkVOTyIgNQ0KICAgIGVsaWYgdGVzdCAieCRlbmFibGVfYWNsJHVzZV9hY2wiID0gInhh dXRvMCI7IHRoZW4NCiAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5P fTogV0FSTklORzogbGliYWNsIGRldmVsb3BtZW50IGxpYnJhcnkgd2FzIG5vdCBmb3VuZCBvciBu b3QgdXNhYmxlLiIgPiY1DQokYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiBsaWJhY2wgZGV2ZWxv cG1lbnQgbGlicmFyeSB3YXMgbm90IGZvdW5kIG9yIG5vdCB1c2FibGUuIiA+JjI7fQ0KICAgICAg eyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiBHTlUgY29y ZXV0aWxzIHdpbGwgYmUgYnVpbHQgd2l0aG91dCBBQ0wgc3VwcG9ydC4iID4mNQ0KJGFzX2VjaG8g IiRhc19tZTogV0FSTklORzogR05VIGNvcmV1dGlscyB3aWxsIGJlIGJ1aWx0IHdpdGhvdXQgQUNM IHN1cHBvcnQuIiA+JjI7fQ0KICAgIGZpDQogIGZpDQoNCg0KY2F0ID4+Y29uZmRlZnMuaCA8PF9B Q0VPRg0KI2RlZmluZSBVU0VfQUNMICR1c2VfYWNsDQpfQUNFT0YNCg0KICBVU0VfQUNMPSR1c2Vf YWNsDQoNCg0KICAjIENvZGUgZnJvbSBtb2R1bGUgYWxpZ25vZjoNCiAgIyBDb2RlIGZyb20gbW9k dWxlIGFsbG9jYToNCiAgIyBDb2RlIGZyb20gbW9kdWxlIGFsbG9jYS1vcHQ6DQoNCg0KICBpZiB0 ZXN0ICRhY19jdl9mdW5jX2FsbG9jYV93b3JrcyA9IG5vOyB0aGVuDQogICAgOg0KICBmaQ0KDQog ICMgRGVmaW5lIGFuIGFkZGl0aW9uYWwgdmFyaWFibGUgdXNlZCBpbiB0aGUgTWFrZWZpbGUgc3Vi c3RpdHV0aW9uLg0KICBpZiB0ZXN0ICRhY19jdl93b3JraW5nX2FsbG9jYV9oID0geWVzOyB0aGVu DQogICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBm b3IgYWxsb2NhIGFzIGEgY29tcGlsZXIgYnVpbHQtaW4iID4mNQ0KJGFzX2VjaG9fbiAiY2hlY2tp bmcgZm9yIGFsbG9jYSBhcyBhIGNvbXBpbGVyIGJ1aWx0LWluLi4uICIgPiY2OyB9DQppZiAke2ds X2N2X3JwbF9hbGxvY2ErOn0gZmFsc2U7IHRoZW4gOg0KICAkYXNfZWNob19uICIoY2FjaGVkKSAi ID4mNg0KZWxzZQ0KDQogICAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4k YWNfZXh0DQovKiBlbmQgY29uZmRlZnMuaC4gICovDQoNCiNpZiBkZWZpbmVkIF9fR05VQ19fIHx8 IGRlZmluZWQgX0FJWCB8fCBkZWZpbmVkIF9NU0NfVkVSDQogICAgICAgIE5lZWQgb3duIGFsbG9j YQ0KI2VuZGlmDQoNCl9BQ0VPRg0KaWYgKGV2YWwgIiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCIp IDI+JjUgfA0KICAkRUdSRVAgIk5lZWQgb3duIGFsbG9jYSIgPi9kZXYvbnVsbCAyPiYxOyB0aGVu IDoNCiAgZ2xfY3ZfcnBsX2FsbG9jYT15ZXMNCmVsc2UNCiAgZ2xfY3ZfcnBsX2FsbG9jYT1ubw0K ZmkNCnJtIC1mIGNvbmZ0ZXN0Kg0KDQoNCmZpDQp7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5l bm8tJExJTkVOT306IHJlc3VsdDogJGdsX2N2X3JwbF9hbGxvY2EiID4mNQ0KJGFzX2VjaG8gIiRn bF9jdl9ycGxfYWxsb2NhIiA+JjY7IH0NCiAgICBpZiB0ZXN0ICRnbF9jdl9ycGxfYWxsb2NhID0g eWVzOyB0aGVuDQoNCiRhc19lY2hvICIjZGVmaW5lIEhBVkVfQUxMT0NBIDEiID4+Y29uZmRlZnMu aA0KDQogICAgICBBTExPQ0FfSD1hbGxvY2EuaA0KICAgIGVsc2UNCiAgICAgICAgICAgICAgICAg IEFMTE9DQV9IPQ0KICAgIGZpDQogIGVsc2UNCiAgICBBTExPQ0FfSD1hbGxvY2EuaA0KICBmaQ0K DQogICBpZiB0ZXN0IC1uICIkQUxMT0NBX0giOyB0aGVuDQogIEdMX0dFTkVSQVRFX0FMTE9DQV9I X1RSVUU9DQogIEdMX0dFTkVSQVRFX0FMTE9DQV9IX0ZBTFNFPScjJw0KZWxzZQ0KICBHTF9HRU5F UkFURV9BTExPQ0FfSF9UUlVFPScjJw0KICBHTF9HRU5FUkFURV9BTExPQ0FfSF9GQUxTRT0NCmZp DQoNCg0KICAjIENvZGUgZnJvbSBtb2R1bGUgYWxsb2NhdG9yOg0KICAjIENvZGUgZnJvbSBtb2R1 bGUgYW5ub3VuY2UtZ2VuOg0KICAjIENvZGUgZnJvbSBtb2R1bGUgYXJlYWRsaW5rOg0KICAjIENv ZGUgZnJvbSBtb2R1bGUgYXJlYWRsaW5rLXdpdGgtc2l6ZToNCiAgIyBDb2RlIGZyb20gbW9kdWxl IGFyZWFkbGlua2F0Og0KDQoNCmNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YNCiNkZWZpbmUgR05V TElCX0FSRUFETElOS0FUIDENCl9BQ0VPRg0KDQoNCiAgIyBDb2RlIGZyb20gbW9kdWxlIGFyZy1u b25udWxsOg0KICAjIENvZGUgZnJvbSBtb2R1bGUgYXJnbWF0Y2g6DQoNCg0KDQoNCg0KDQoNCg0K DQogIGdsX0xJQk9CSlM9IiRnbF9MSUJPQkpTIGFyZ21hdGNoLiRhY19vYmpleHQiDQoNCg0KICAj IENvZGUgZnJvbSBtb2R1bGUgYXJndi1pdGVyOg0KICAjIENvZGUgZnJvbSBtb2R1bGUgYXJwYV9p bmV0Og0KDQoNCg0KDQogIGlmIHRlc3QgJGFjX2N2X2hlYWRlcl9hcnBhX2luZXRfaCA9IHllczsg dGhlbg0KICAgIEhBVkVfQVJQQV9JTkVUX0g9MQ0KICBlbHNlDQogICAgSEFWRV9BUlBBX0lORVRf SD0wDQogIGZpDQoNCg0KDQoNCg0KDQoNCg0KDQoNCiAgICAgaWYgdGVzdCAkZ2xfY3ZfaGF2ZV9p bmNsdWRlX25leHQgPSB5ZXM7IHRoZW4NCiAgICAgICBnbF9jdl9uZXh0X2FycGFfaW5ldF9oPSc8 J2FycGEvaW5ldC5oJz4nDQogICAgIGVsc2UNCiAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHth c19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGFic29sdXRlIG5hbWUgb2YgPGFycGEvaW5ldC5o PiIgPiY1DQokYXNfZWNob19uICJjaGVja2luZyBhYnNvbHV0ZSBuYW1lIG9mIDxhcnBhL2luZXQu aD4uLi4gIiA+JjY7IH0NCmlmICR7Z2xfY3ZfbmV4dF9hcnBhX2luZXRfaCs6fSBmYWxzZTsgdGhl biA6DQogICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2DQplbHNlDQoNCiAgICAgICAgICAgICBp ZiB0ZXN0ICRhY19jdl9oZWFkZXJfYXJwYV9pbmV0X2ggPSB5ZXM7IHRoZW4NCg0KDQogICAgICAg ICAgICAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0DQovKiBl bmQgY29uZmRlZnMuaC4gICovDQojaW5jbHVkZSA8YXJwYS9pbmV0Lmg+DQoNCl9BQ0VPRg0KICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgY2FzZSAiJGhvc3Rfb3MiIGluDQogICAgICAgICAgICAgICAgIGFpeCopIGdsX2Fic25hbWVf Y3BwPSIkYWNfY3BwIC1DIiA7Ow0KICAgICAgICAgICAgICAgICAqKSAgICBnbF9hYnNuYW1lX2Nw cD0iJGFjX2NwcCIgOzsNCiAgICAgICAgICAgICAgIGVzYWMNCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsX2N2X25leHRfYXJwYV9p bmV0X2g9JyInYChldmFsICIkZ2xfYWJzbmFtZV9jcHAgY29uZnRlc3QuJGFjX2V4dCIpIDI+JjUg fA0KICAgICAgICAgICAgICAgICAgc2VkIC1uICdcIy9hcnBhL2luZXQuaCN7DQogICAgICAgICAg ICAgICAgICAgIHMjLioiXCguKi9hcnBhL2luZXQuaFwpIi4qI1wxIw0KICAgICAgICAgICAgICAg ICAgICBzI14vW14vXSMvLyYjDQogICAgICAgICAgICAgICAgICAgIHANCiAgICAgICAgICAgICAg ICAgICAgcQ0KICAgICAgICAgICAgICAgICAgfSdgJyInDQogICAgICAgICAgZWxzZQ0KICAgICAg ICAgICAgICAgZ2xfY3ZfbmV4dF9hcnBhX2luZXRfaD0nPCdhcnBhL2luZXQuaCc+Jw0KICAgICAg ICAgICAgIGZpDQoNCg0KZmkNCnsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5P fTogcmVzdWx0OiAkZ2xfY3ZfbmV4dF9hcnBhX2luZXRfaCIgPiY1DQokYXNfZWNobyAiJGdsX2N2 X25leHRfYXJwYV9pbmV0X2giID4mNjsgfQ0KICAgICBmaQ0KICAgICBORVhUX0FSUEFfSU5FVF9I PSRnbF9jdl9uZXh0X2FycGFfaW5ldF9oDQoNCiAgICAgaWYgdGVzdCAkZ2xfY3ZfaGF2ZV9pbmNs dWRlX25leHQgPSB5ZXMgfHwgdGVzdCAkZ2xfY3ZfaGF2ZV9pbmNsdWRlX25leHQgPSBidWdneTsg dGhlbg0KICAgICAgICMgSU5DTFVERV9ORVhUX0FTX0ZJUlNUX0RJUkVDVElWRT0naW5jbHVkZV9u ZXh0Jw0KICAgICAgIGdsX25leHRfYXNfZmlyc3RfZGlyZWN0aXZlPSc8J2FycGEvaW5ldC5oJz4n DQogICAgIGVsc2UNCiAgICAgICAjIElOQ0xVREVfTkVYVF9BU19GSVJTVF9ESVJFQ1RJVkU9J2lu Y2x1ZGUnDQogICAgICAgZ2xfbmV4dF9hc19maXJzdF9kaXJlY3RpdmU9JGdsX2N2X25leHRfYXJw YV9pbmV0X2gNCiAgICAgZmkNCiAgICAgTkVYVF9BU19GSVJTVF9ESVJFQ1RJVkVfQVJQQV9JTkVU X0g9JGdsX25leHRfYXNfZmlyc3RfZGlyZWN0aXZlDQoNCg0KDQoNCg0KDQoNCg0KICAgIGZvciBn bF9mdW5jIGluIGluZXRfbnRvcCBpbmV0X3B0b247IGRvDQogICAgYXNfZ2xfU3ltYm9sPWAkYXNf ZWNobyAiZ2xfY3ZfaGF2ZV9yYXdfZGVjbF8kZ2xfZnVuYyIgfCAkYXNfdHJfc2hgDQogICAgeyAk YXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyICRn bF9mdW5jIGlzIGRlY2xhcmVkIHdpdGhvdXQgYSBtYWNybyIgPiY1DQokYXNfZWNob19uICJjaGVj a2luZyB3aGV0aGVyICRnbF9mdW5jIGlzIGRlY2xhcmVkIHdpdGhvdXQgYSBtYWNyby4uLiAiID4m NjsgfQ0KaWYgZXZhbCBcJHskYXNfZ2xfU3ltYm9sKzp9IGZhbHNlOyB0aGVuIDoNCiAgJGFzX2Vj aG9fbiAiKGNhY2hlZCkgIiA+JjYNCmVsc2UNCiAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+ Y29uZnRlc3QuJGFjX2V4dA0KLyogZW5kIGNvbmZkZWZzLmguICAqLw0KDQovKiBPbiBzb21lIHN5 c3RlbXMsIHRoaXMgaGVhZGVyIGlzIG5vdCBzZWxmLWNvbnNpc3RlbnQuICAqLw0KI2lmICEoZGVm aW5lZCBfX0dMSUJDX18gfHwgZGVmaW5lZCBfX1VDTElCQ19fKQ0KIyBpbmNsdWRlIDxzeXMvc29j a2V0Lmg+DQojZW5kaWYNCiNpZmRlZiBfX1RBTkRFTQ0KIyBpbmNsdWRlIDxuZXRkYi5oPg0KI2Vu ZGlmDQojaW5jbHVkZSA8YXJwYS9pbmV0Lmg+DQoNCmludA0KbWFpbiAoKQ0Kew0KI3VuZGVmICRn bF9mdW5jDQogICh2b2lkKSAkZ2xfZnVuYzsNCiAgOw0KICByZXR1cm4gMDsNCn0NCl9BQ0VPRg0K aWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOg0KICBldmFsICIkYXNfZ2xf U3ltYm9sPXllcyINCmVsc2UNCiAgZXZhbCAiJGFzX2dsX1N5bWJvbD1ubyINCmZpDQpybSAtZiBj b3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQNCmZp DQpldmFsIGFjX3Jlcz1cJCRhc19nbF9TeW1ib2wNCgkgICAgICAgeyAkYXNfZWNobyAiJGFzX21l OiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19yZXMiID4mNQ0KJGFzX2VjaG8gIiRh Y19yZXMiID4mNjsgfQ0KICAgICBpZiBldmFsIHRlc3QgXCJ4XCQiJGFzX2dsX1N5bWJvbCJcIiA9 IHgieWVzIjsgdGhlbiA6DQogIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YNCiNkZWZpbmUgYCRh c19lY2hvICJIQVZFX1JBV19ERUNMXyRnbF9mdW5jIiB8ICRhc190cl9jcHBgIDENCl9BQ0VPRg0K DQogICAgICAgICAgICAgICAgICAgICBldmFsIGFjX2N2X2hhdmVfZGVjbF8kZ2xfZnVuYz15ZXMN CmZpDQogICAgICBkb25lDQoNCg0KDQogICMgQ29kZSBmcm9tIG1vZHVsZSBhc3NlcnQ6DQoNCiAg eyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVy IHRvIGVuYWJsZSBhc3NlcnRpb25zIiA+JjUNCiRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIg dG8gZW5hYmxlIGFzc2VydGlvbnMuLi4gIiA+JjY7IH0NCiAgIyBDaGVjayB3aGV0aGVyIC0tZW5h YmxlLWFzc2VydCB3YXMgZ2l2ZW4uDQppZiB0ZXN0ICIke2VuYWJsZV9hc3NlcnQrc2V0fSIgPSBz ZXQ7IHRoZW4gOg0KICBlbmFibGV2YWw9JGVuYWJsZV9hc3NlcnQ7IGlmIHRlc3QgIngkZW5hYmxl dmFsIiA9IHhubzsgdGhlbiA6DQoNCiRhc19lY2hvICIjZGVmaW5lIE5ERUJVRyAxIiA+PmNvbmZk ZWZzLmgNCg0KZWxpZiB0ZXN0ICJ4JGVuYWJsZXZhbCIgIT0geHllczsgdGhlbiA6DQogIHsgJGFz X2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogaW52YWxpZCBhcmd1 bWVudCBzdXBwbGllZCB0byAtLWVuYWJsZS1hc3NlcnQiID4mNQ0KJGFzX2VjaG8gIiRhc19tZTog V0FSTklORzogaW52YWxpZCBhcmd1bWVudCBzdXBwbGllZCB0byAtLWVuYWJsZS1hc3NlcnQiID4m Mjt9DQogICAgICBlbmFibGVfYXNzZXJ0PXllcw0KZmkNCmVsc2UNCiAgZW5hYmxlX2Fzc2VydD15 ZXMNCmZpDQoNCiAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1 bHQ6ICRlbmFibGVfYXNzZXJ0IiA+JjUNCiRhc19lY2hvICIkZW5hYmxlX2Fzc2VydCIgPiY2OyB9 DQoNCiAgIyBDb2RlIGZyb20gbW9kdWxlIGF1dG9idWlsZDoNCiAgIyBDb2RlIGZyb20gbW9kdWxl IGJhY2t1cGZpbGU6DQoNCg0KDQoNCg0KDQoNCg0KDQogIGdsX0xJQk9CSlM9IiRnbF9MSUJPQkpT IGJhY2t1cGZpbGUuJGFjX29iamV4dCINCg0KDQoNCg0KDQoNCiAgIyBDb2RlIGZyb20gbW9kdWxl IGJhc2U2NDoNCg0KDQoNCg0KDQoNCiAgIyBDb2RlIGZyb20gbW9kdWxlIGJpdHJvdGF0ZToNCg0K ICAjIENvZGUgZnJvbSBtb2R1bGUgYnRvd2M6DQoNCg0KDQoNCg0KDQogIGlmIHRlc3QgJGFjX2N2 X2Z1bmNfYnRvd2MgPSBubzsgdGhlbg0KICAgIEhBVkVfQlRPV0M9MA0KICBlbHNlDQoNCg0KDQoN CiAgICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2lu ZyB3aGV0aGVyIGJ0b3djKDApIGlzIGNvcnJlY3QiID4mNQ0KJGFzX2VjaG9fbiAiY2hlY2tpbmcg d2hldGhlciBidG93YygwKSBpcyBjb3JyZWN0Li4uICIgPiY2OyB9DQppZiAke2dsX2N2X2Z1bmNf YnRvd2NfbnVsKzp9IGZhbHNlOyB0aGVuIDoNCiAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYN CmVsc2UNCg0KICAgICAgICBpZiB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IHllczsgdGhlbiA6 DQoNCiAgICAgICAgICAgY2FzZSAiJGhvc3Rfb3MiIGluDQogICAgICAgICAgICAgICAgICAgICAg IyBHdWVzcyBubyBvbiBDeWd3aW4uDQogICAgICAgICAgICAgY3lnd2luKikgZ2xfY3ZfZnVuY19i dG93Y19udWw9Imd1ZXNzaW5nIG5vIiA7Ow0KICAgICAgICAgICAgICAgICAgICAgICMgR3Vlc3Mg eWVzIG90aGVyd2lzZS4NCiAgICAgICAgICAgICAqKSAgICAgICBnbF9jdl9mdW5jX2J0b3djX251 bD0iZ3Vlc3NpbmcgeWVzIiA7Ow0KICAgICAgICAgICBlc2FjDQoNCmVsc2UNCiAgY2F0IGNvbmZk ZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dA0KLyogZW5kIGNvbmZkZWZzLmguICAq Lw0KDQojaW5jbHVkZSA8c3RyaW5nLmg+DQovKiBUcnU2NCB3aXRoIERlc2t0b3AgVG9vbGtpdCBD IGhhcyBhIGJ1ZzogPHN0ZGlvLmg+IG11c3QgYmUgaW5jbHVkZWQgYmVmb3JlDQogICA8d2NoYXIu aD4uDQogICBCU0QvT1MgNC4wLjEgaGFzIGEgYnVnOiA8c3RkZGVmLmg+LCA8c3RkaW8uaD4gYW5k IDx0aW1lLmg+IG11c3QgYmUNCiAgIGluY2x1ZGVkIGJlZm9yZSA8d2NoYXIuaD4uICAqLw0KI2lu Y2x1ZGUgPHN0ZGRlZi5oPg0KI2luY2x1ZGUgPHN0ZGlvLmg+DQojaW5jbHVkZSA8dGltZS5oPg0K I2luY2x1ZGUgPHdjaGFyLmg+DQppbnQgbWFpbiAoKQ0Kew0KICBpZiAoYnRvd2MgKCdcMCcpICE9 IDApDQogICAgcmV0dXJuIDE7DQogIHJldHVybiAwOw0KfQ0KX0FDRU9GDQppZiBhY19mbl9jX3Ry eV9ydW4gIiRMSU5FTk8iOyB0aGVuIDoNCiAgZ2xfY3ZfZnVuY19idG93Y19udWw9eWVzDQplbHNl DQogIGdsX2N2X2Z1bmNfYnRvd2NfbnVsPW5vDQpmaQ0Kcm0gLWYgY29yZSAqLmNvcmUgY29yZS5j b25mdGVzdC4qIGdtb24ub3V0IGJiLm91dCBjb25mdGVzdCRhY19leGVleHQgXA0KICBjb25mdGVz dC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LmJlYW0gY29uZnRlc3QuJGFjX2V4dA0KZmkNCg0KDQpmaQ0K eyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRnbF9jdl9m dW5jX2J0b3djX251bCIgPiY1DQokYXNfZWNobyAiJGdsX2N2X2Z1bmNfYnRvd2NfbnVsIiA+JjY7 IH0NCg0KICAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNo ZWNraW5nIHdoZXRoZXIgYnRvd2MoRU9GKSBpcyBjb3JyZWN0IiA+JjUNCiRhc19lY2hvX24gImNo ZWNraW5nIHdoZXRoZXIgYnRvd2MoRU9GKSBpcyBjb3JyZWN0Li4uICIgPiY2OyB9DQppZiAke2ds X2N2X2Z1bmNfYnRvd2NfZW9mKzp9IGZhbHNlOyB0aGVuIDoNCiAgJGFzX2VjaG9fbiAiKGNhY2hl ZCkgIiA+JjYNCmVsc2UNCg0KICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAiJGhvc3Rfb3Mi IGluDQogICAgICAgICAgICAgICAgICMgR3Vlc3Mgbm8gb24gSVJJWC4NCiAgICAgICAgICBpcml4 KikgZ2xfY3ZfZnVuY19idG93Y19lb2Y9Imd1ZXNzaW5nIG5vIiA7Ow0KICAgICAgICAgICAgICAg ICAjIEd1ZXNzIHllcyBvdGhlcndpc2UuDQogICAgICAgICAgKikgICAgIGdsX2N2X2Z1bmNfYnRv d2NfZW9mPSJndWVzc2luZyB5ZXMiIDs7DQogICAgICAgIGVzYWMNCiAgICAgICAgaWYgdGVzdCAk TE9DQUxFX0ZSICE9IG5vbmU7IHRoZW4NCiAgICAgICAgICBpZiB0ZXN0ICIkY3Jvc3NfY29tcGls aW5nIiA9IHllczsgdGhlbiA6DQogIDoNCmVsc2UNCiAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VP RiA+Y29uZnRlc3QuJGFjX2V4dA0KLyogZW5kIGNvbmZkZWZzLmguICAqLw0KDQojaW5jbHVkZSA8 bG9jYWxlLmg+DQojaW5jbHVkZSA8c3RyaW5nLmg+DQovKiBUcnU2NCB3aXRoIERlc2t0b3AgVG9v bGtpdCBDIGhhcyBhIGJ1ZzogPHN0ZGlvLmg+IG11c3QgYmUgaW5jbHVkZWQgYmVmb3JlDQogICA8 d2NoYXIuaD4uDQogICBCU0QvT1MgNC4wLjEgaGFzIGEgYnVnOiA8c3RkZGVmLmg+LCA8c3RkaW8u aD4gYW5kIDx0aW1lLmg+IG11c3QgYmUNCiAgIGluY2x1ZGVkIGJlZm9yZSA8d2NoYXIuaD4uICAq Lw0KI2luY2x1ZGUgPHN0ZGRlZi5oPg0KI2luY2x1ZGUgPHN0ZGlvLmg+DQojaW5jbHVkZSA8dGlt ZS5oPg0KI2luY2x1ZGUgPHdjaGFyLmg+DQppbnQgbWFpbiAoKQ0Kew0KICBpZiAoc2V0bG9jYWxl IChMQ19BTEwsICIkTE9DQUxFX0ZSIikgIT0gTlVMTCkNCiAgICB7DQogICAgICBpZiAoYnRvd2Mg KEVPRikgIT0gV0VPRikNCiAgICAgICAgcmV0dXJuIDE7DQogICAgfQ0KICByZXR1cm4gMDsNCn0N Cl9BQ0VPRg0KaWYgYWNfZm5fY190cnlfcnVuICIkTElORU5PIjsgdGhlbiA6DQogIGdsX2N2X2Z1 bmNfYnRvd2NfZW9mPXllcw0KZWxzZQ0KICBnbF9jdl9mdW5jX2J0b3djX2VvZj1ubw0KZmkNCnJt IC1mIGNvcmUgKi5jb3JlIGNvcmUuY29uZnRlc3QuKiBnbW9uLm91dCBiYi5vdXQgY29uZnRlc3Qk YWNfZXhlZXh0IFwNCiAgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC5iZWFtIGNvbmZ0ZXN0 LiRhY19leHQNCmZpDQoNCiAgICAgICAgZmkNCg0KZmkNCnsgJGFzX2VjaG8gIiRhc19tZToke2Fz X2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkZ2xfY3ZfZnVuY19idG93Y19lb2YiID4mNQ0KJGFz X2VjaG8gIiRnbF9jdl9mdW5jX2J0b3djX2VvZiIgPiY2OyB9DQoNCiAgICBjYXNlICIkZ2xfY3Zf ZnVuY19idG93Y19udWwiIGluDQogICAgICAqeWVzKSA7Ow0KICAgICAgKikgUkVQTEFDRV9CVE9X Qz0xIDs7DQogICAgZXNhYw0KICAgIGNhc2UgIiRnbF9jdl9mdW5jX2J0b3djX2VvZiIgaW4NCiAg ICAgICp5ZXMpIDs7DQogICAgICAqKSBSRVBMQUNFX0JUT1dDPTEgOzsNCiAgICBlc2FjDQogIGZp DQogIGlmIHRlc3QgJEhBVkVfQlRPV0MgPSAwIHx8IHRlc3QgJFJFUExBQ0VfQlRPV0MgPSAxOyB0 aGVuDQoNCiAgICA6DQoNCg0KDQoNCg0KDQoNCg0KDQogIGdsX0xJQk9CSlM9IiRnbF9MSUJPQkpT IGJ0b3djLiRhY19vYmpleHQiDQoNCg0KICA6DQoNCiAgZmkNCg0KDQoNCg0KICBHTlVMSUJfQlRP V0M9MQ0KDQoNCg0KJGFzX2VjaG8gIiNkZWZpbmUgR05VTElCX1RFU1RfQlRPV0MgMSIgPj5jb25m ZGVmcy5oDQoNCg0KDQogICMgQ29kZSBmcm9tIG1vZHVsZSBjKytkZWZzOg0KICAjIENvZGUgZnJv bSBtb2R1bGUgYy1jdHlwZToNCiAgIyBDb2RlIGZyb20gbW9kdWxlIGMtc3RyY2FzZToNCiAgIyBD b2RlIGZyb20gbW9kdWxlIGMtc3RydG9kOg0KDQoNCg0KDQoNCg0KDQoNCg0KICBnbF9MSUJPQkpT PSIkZ2xfTElCT0JKUyBjLXN0cnRvZC4kYWNfb2JqZXh0Ig0KDQoNCg0KICBmb3IgYWNfZnVuYyBp biBzdHJ0b2RfbA0KZG8gOg0KICBhY19mbl9jX2NoZWNrX2Z1bmMgIiRMSU5FTk8iICJzdHJ0b2Rf bCIgImFjX2N2X2Z1bmNfc3RydG9kX2wiDQppZiB0ZXN0ICJ4JGFjX2N2X2Z1bmNfc3RydG9kX2wi ID0geHllczsgdGhlbiA6DQogIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YNCiNkZWZpbmUgSEFW RV9TVFJUT0RfTCAxDQpfQUNFT0YNCg0KZmkNCmRvbmUNCg0KDQoNCiAgOg0KDQogICMgQ29kZSBm cm9tIG1vZHVsZSBjLXN0cnRvbGQ6DQoNCg0KDQoNCg0KDQoNCg0KDQogIGdsX0xJQk9CSlM9IiRn bF9MSUJPQkpTIGMtc3RydG9sZC4kYWNfb2JqZXh0Ig0KDQoNCg0KDQogIGZvciBhY19mdW5jIGlu IHN0cnRvbGRfbA0KZG8gOg0KICBhY19mbl9jX2NoZWNrX2Z1bmMgIiRMSU5FTk8iICJzdHJ0b2xk X2wiICJhY19jdl9mdW5jX3N0cnRvbGRfbCINCmlmIHRlc3QgIngkYWNfY3ZfZnVuY19zdHJ0b2xk X2wiID0geHllczsgdGhlbiA6DQogIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YNCiNkZWZpbmUg SEFWRV9TVFJUT0xEX0wgMQ0KX0FDRU9GDQoNCmZpDQpkb25lDQoNCg0KDQogIDoNCg0KICAjIENv ZGUgZnJvbSBtb2R1bGUgY2FsbG9jLWdudToNCg0KDQoNCiAgICB7ICRhc19lY2hvICIkYXNfbWU6 JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBHTlUgbGliYyBjb21wYXRpYmxlIGNh bGxvYyIgPiY1DQokYXNfZWNob19uICJjaGVja2luZyBmb3IgR05VIGxpYmMgY29tcGF0aWJsZSBj YWxsb2MuLi4gIiA+JjY7IH0NCmlmICR7YWNfY3ZfZnVuY19jYWxsb2NfMF9ub25udWxsKzp9IGZh bHNlOyB0aGVuIDoNCiAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYNCmVsc2UNCiAgaWYgdGVz dCAiJGNyb3NzX2NvbXBpbGluZyIgPSB5ZXM7IHRoZW4gOg0KICBhY19jdl9mdW5jX2NhbGxvY18w X25vbm51bGw9bm8NCmVsc2UNCiAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3Qu JGFjX2V4dA0KLyogZW5kIGNvbmZkZWZzLmguICAqLw0KJGFjX2luY2x1ZGVzX2RlZmF1bHQNCmlu dA0KbWFpbiAoKQ0Kew0KaW50IHJlc3VsdCA9IDA7DQogICAgICAgICAgICBpZiAoIWNhbGxvYyAo MCwgMCkpDQogICAgICAgICAgICAgIHJlc3VsdCB8PSAxOw0KICAgICAgICAgICAgaWYgKGNhbGxv YyAoKHNpemVfdCkgLTEgLyA4ICsgMSwgOCkpDQogICAgICAgICAgICAgIHJlc3VsdCB8PSAyOw0K ICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsNCg0KICA7DQogIHJldHVybiAwOw0KfQ0KX0FDRU9G DQppZiBhY19mbl9jX3RyeV9ydW4gIiRMSU5FTk8iOyB0aGVuIDoNCiAgYWNfY3ZfZnVuY19jYWxs b2NfMF9ub25udWxsPXllcw0KZWxzZQ0KICBhY19jdl9mdW5jX2NhbGxvY18wX25vbm51bGw9bm8N CmZpDQpybSAtZiBjb3JlICouY29yZSBjb3JlLmNvbmZ0ZXN0LiogZ21vbi5vdXQgYmIub3V0IGNv bmZ0ZXN0JGFjX2V4ZWV4dCBcDQogIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuYmVhbSBj b25mdGVzdC4kYWNfZXh0DQpmaQ0KDQpmaQ0KeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5v LSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9mdW5jX2NhbGxvY18wX25vbm51bGwiID4mNQ0KJGFz X2VjaG8gIiRhY19jdl9mdW5jX2NhbGxvY18wX25vbm51bGwiID4mNjsgfQ0KICBpZiB0ZXN0ICRh Y19jdl9mdW5jX2NhbGxvY18wX25vbm51bGwgPSB5ZXM7IHRoZW4gOg0KDQokYXNfZWNobyAiI2Rl ZmluZSBIQVZFX0NBTExPQ19HTlUgMSIgPj5jb25mZGVmcy5oDQoNCmVsc2UNCiAgJGFzX2VjaG8g IiNkZWZpbmUgSEFWRV9DQUxMT0NfR05VIDAiID4+Y29uZmRlZnMuaA0KDQoNCg0KDQoNCg0KDQoN Cg0KDQogIGdsX0xJQk9CSlM9IiRnbF9MSUJPQkpTIGNhbGxvYy4kYWNfb2JqZXh0Ig0KDQogIFJF UExBQ0VfQ0FMTE9DPTENCg0KDQpmaQ0KDQoNCg0KDQpjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9G DQojZGVmaW5lIEdOVUxJQl9DQUxMT0NfR05VIDENCl9BQ0VPRg0KDQoNCiAgIyBDb2RlIGZyb20g bW9kdWxlIGNhbGxvYy1wb3NpeDoNCg0KDQoNCiAgaWYgdGVzdCAkZ2xfY3ZfZnVuY19tYWxsb2Nf cG9zaXggPSB5ZXM7IHRoZW4NCg0KJGFzX2VjaG8gIiNkZWZpbmUgSEFWRV9DQUxMT0NfUE9TSVgg MSIgPj5jb25mZGVmcy5oDQoNCiAgZWxzZQ0KDQoNCg0KDQoNCg0KDQoNCg0KICBnbF9MSUJPQkpT PSIkZ2xfTElCT0JKUyBjYWxsb2MuJGFjX29iamV4dCINCg0KICBSRVBMQUNFX0NBTExPQz0xDQoN CiAgZmkNCg0KDQoNCg0KICBHTlVMSUJfQ0FMTE9DX1BPU0lYPTENCg0KDQoNCiRhc19lY2hvICIj ZGVmaW5lIEdOVUxJQl9URVNUX0NBTExPQ19QT1NJWCAxIiA+PmNvbmZkZWZzLmgNCg0KDQoNCiAg IyBDb2RlIGZyb20gbW9kdWxlIGNhbm9uLWhvc3Q6DQoNCg0KDQoNCg0KDQoNCg0KDQogIGdsX0xJ Qk9CSlM9IiRnbF9MSUJPQkpTIGNhbm9uLWhvc3QuJGFjX29iamV4dCINCg0KDQogIDoNCg0KDQog ICMgQ29kZSBmcm9tIG1vZHVsZSBjYW5vbmljYWxpemU6DQoNCg0KDQoNCg0KDQoNCg0KDQogIGds X0xJQk9CSlM9IiRnbF9MSUJPQkpTIGNhbm9uaWNhbGl6ZS4kYWNfb2JqZXh0Ig0KDQoNCg0KDQoN Cg0KICBpZiB0ZXN0ICRhY19jdl9mdW5jX2Nhbm9uaWNhbGl6ZV9maWxlX25hbWUgPSBubzsgdGhl bg0KICAgIEhBVkVfQ0FOT05JQ0FMSVpFX0ZJTEVfTkFNRT0wDQogIGVsaWYgdGVzdCAiJGdsX2N2 X2Z1bmNfcmVhbHBhdGhfd29ya3MiICE9IHllczsgdGhlbg0KICAgIFJFUExBQ0VfQ0FOT05JQ0FM SVpFX0ZJTEVfTkFNRT0xDQogIGZpDQoNCg0KDQpjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GDQoj ZGVmaW5lIEdOVUxJQl9DQU5PTklDQUxJWkUgMQ0KX0FDRU9GDQoNCg0KDQoNCiRhc19lY2hvICIj ZGVmaW5lIEdOVUxJQl9URVNUX0NBTk9OSUNBTElaRSAxIiA+PmNvbmZkZWZzLmgNCg0KDQoNCg0K DQogIEdOVUxJQl9DQU5PTklDQUxJWkVfRklMRV9OQU1FPTENCg0KDQoNCiRhc19lY2hvICIjZGVm aW5lIEdOVUxJQl9URVNUX0NBTk9OSUNBTElaRV9GSUxFX05BTUUgMSIgPj5jb25mZGVmcy5oDQoN Cg0KDQogICMgQ29kZSBmcm9tIG1vZHVsZSBjYXJlYWRsaW5rYXQ6DQoNCiAgIyBDb2RlIGZyb20g bW9kdWxlIGNoZGlyLWxvbmc6DQoNCiAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRM SU5FTk99OiBjaGVja2luZyB3aGV0aGVyIHRoaXMgc3lzdGVtIGhhcyBhbiBhcmJpdHJhcnkgZmls ZSBuYW1lIGxlbmd0aCBsaW1pdCIgPiY1DQokYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIHRo aXMgc3lzdGVtIGhhcyBhbiBhcmJpdHJhcnkgZmlsZSBuYW1lIGxlbmd0aCBsaW1pdC4uLiAiID4m NjsgfQ0KaWYgJHtnbF9jdl9oYXZlX2FyYml0cmFyeV9maWxlX25hbWVfbGVuZ3RoX2xpbWl0Kzp9 IGZhbHNlOyB0aGVuIDoNCiAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYNCmVsc2UNCiAgY2F0 IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dA0KLyogZW5kIGNvbmZkZWZz LmguICAqLw0KI2luY2x1ZGUgPHVuaXN0ZC5oPg0KI2luY2x1ZGUgPGxpbWl0cy5oPg0KI2lmIGRl ZmluZWQgUEFUSF9NQVggfHwgZGVmaW5lZCBNQVhQQVRITEVODQpoYXZlX2FyYml0cmFyeV9maWxl X25hbWVfbGVuZ3RoX2xpbWl0DQojZW5kaWYNCl9BQ0VPRg0KaWYgKGV2YWwgIiRhY19jcHAgY29u ZnRlc3QuJGFjX2V4dCIpIDI+JjUgfA0KICAkRUdSRVAgImhhdmVfYXJiaXRyYXJ5X2ZpbGVfbmFt ZV9sZW5ndGhfbGltaXQiID4vZGV2L251bGwgMj4mMTsgdGhlbiA6DQogIGdsX2N2X2hhdmVfYXJi aXRyYXJ5X2ZpbGVfbmFtZV9sZW5ndGhfbGltaXQ9eWVzDQplbHNlDQogIGdsX2N2X2hhdmVfYXJi aXRyYXJ5X2ZpbGVfbmFtZV9sZW5ndGhfbGltaXQ9bm8NCmZpDQpybSAtZiBjb25mdGVzdCoNCg0K ZmkNCnsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkZ2xf Y3ZfaGF2ZV9hcmJpdHJhcnlfZmlsZV9uYW1lX2xlbmd0aF9saW1pdCIgPiY1DQokYXNfZWNobyAi JGdsX2N2X2hhdmVfYXJiaXRyYXJ5X2ZpbGVfbmFtZV9sZW5ndGhfbGltaXQiID4mNjsgfQ0KDQog IGlmIHRlc3QgJGdsX2N2X2hhdmVfYXJiaXRyYXJ5X2ZpbGVfbmFtZV9sZW5ndGhfbGltaXQgPSB5 ZXM7IHRoZW4NCg0KDQoNCg0KDQoNCg0KDQogIGdsX0xJQk9CSlM9IiRnbF9MSUJPQkpTIGNoZGly LWxvbmcuJGFjX29iamV4dCINCg0KDQoNCiAgOg0KDQogIGZpDQoNCiAgIyBDb2RlIGZyb20gbW9k dWxlIGNob3duOg0KDQoNCg0KDQogIEdOVUxJQl9DSE9XTj0xDQoNCg0KDQokYXNfZWNobyAiI2Rl ZmluZSBHTlVMSUJfVEVTVF9DSE9XTiAxIiA+PmNvbmZkZWZzLmgNCg0KDQoNCiAgIyBDb2RlIGZy b20gbW9kdWxlIGNsb2NrLXRpbWU6DQoNCg0KDQogICMgU29sYXJpcyAyLjUuMSBuZWVkcyAtbHBv c2l4NCB0byBnZXQgdGhlIGNsb2NrX2dldHRpbWUgZnVuY3Rpb24uDQogICMgU29sYXJpcyA3IHBy ZWZlcnMgdGhlIGxpYnJhcnkgbmFtZSAtbHJ0IHRvIHRoZSBvYnNvbGVzY2VudCBuYW1lIC1scG9z aXg0Lg0KDQogICMgU2F2ZSBhbmQgcmVzdG9yZSBMSUJTIHNvIGUuZy4sIC1scnQsIGlzbid0IGFk ZGVkIHRvIGl0LiAgT3RoZXJ3aXNlLCAqYWxsKg0KICAjIHByb2dyYW1zIGluIHRoZSBwYWNrYWdl IHdvdWxkIGVuZCB1cCBsaW5rZWQgd2l0aCB0aGF0IHBvdGVudGlhbGx5LXNoYXJlZA0KICAjIGxp YnJhcnksIGluZHVjaW5nIHVubmVjZXNzYXJ5IHJ1bi10aW1lIG92ZXJoZWFkLg0KICBMSUJfQ0xP Q0tfR0VUVElNRT0NCg0KICBnbF9zYXZlZF9saWJzPSRMSUJTDQogICAgeyAkYXNfZWNobyAiJGFz X21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgbGlicmFyeSBjb250YWluaW5n IGNsb2NrX2dldHRpbWUiID4mNQ0KJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIGxpYnJhcnkgY29u dGFpbmluZyBjbG9ja19nZXR0aW1lLi4uICIgPiY2OyB9DQppZiAke2FjX2N2X3NlYXJjaF9jbG9j a19nZXR0aW1lKzp9IGZhbHNlOyB0aGVuIDoNCiAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYN CmVsc2UNCiAgYWNfZnVuY19zZWFyY2hfc2F2ZV9MSUJTPSRMSUJTDQpjYXQgY29uZmRlZnMuaCAt IDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0DQovKiBlbmQgY29uZmRlZnMuaC4gICovDQoNCi8q IE92ZXJyaWRlIGFueSBHQ0MgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLg0K ICAgVXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEg R0NDDQogICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3Rp bGwgYXBwbHkuICAqLw0KI2lmZGVmIF9fY3BsdXNwbHVzDQpleHRlcm4gIkMiDQojZW5kaWYNCmNo YXIgY2xvY2tfZ2V0dGltZSAoKTsNCmludA0KbWFpbiAoKQ0Kew0KcmV0dXJuIGNsb2NrX2dldHRp bWUgKCk7DQogIDsNCiAgcmV0dXJuIDA7DQp9DQpfQUNFT0YNCmZvciBhY19saWIgaW4gJycgcnQg cG9zaXg0OyBkbw0KICBpZiB0ZXN0IC16ICIkYWNfbGliIjsgdGhlbg0KICAgIGFjX3Jlcz0ibm9u ZSByZXF1aXJlZCINCiAgZWxzZQ0KICAgIGFjX3Jlcz0tbCRhY19saWINCiAgICBMSUJTPSItbCRh Y19saWIgICRhY19mdW5jX3NlYXJjaF9zYXZlX0xJQlMiDQogIGZpDQogIGlmIGFjX2ZuX2NfdHJ5 X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoNCiAgYWNfY3Zfc2VhcmNoX2Nsb2NrX2dldHRpbWU9JGFj X3Jlcw0KZmkNCnJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXA0K ICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dA0KICBpZiAke2FjX2N2X3NlYXJjaF9jbG9ja19nZXR0aW1l Kzp9IGZhbHNlOyB0aGVuIDoNCiAgYnJlYWsNCmZpDQpkb25lDQppZiAke2FjX2N2X3NlYXJjaF9j bG9ja19nZXR0aW1lKzp9IGZhbHNlOyB0aGVuIDoNCg0KZWxzZQ0KICBhY19jdl9zZWFyY2hfY2xv Y2tfZ2V0dGltZT1ubw0KZmkNCnJtIGNvbmZ0ZXN0LiRhY19leHQNCkxJQlM9JGFjX2Z1bmNfc2Vh cmNoX3NhdmVfTElCUw0KZmkNCnsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5P fTogcmVzdWx0OiAkYWNfY3Zfc2VhcmNoX2Nsb2NrX2dldHRpbWUiID4mNQ0KJGFzX2VjaG8gIiRh Y19jdl9zZWFyY2hfY2xvY2tfZ2V0dGltZSIgPiY2OyB9DQphY19yZXM9JGFjX2N2X3NlYXJjaF9j bG9ja19nZXR0aW1lDQppZiB0ZXN0ICIkYWNfcmVzIiAhPSBubzsgdGhlbiA6DQogIHRlc3QgIiRh Y19yZXMiID0gIm5vbmUgcmVxdWlyZWQiIHx8IExJQlM9IiRhY19yZXMgJExJQlMiDQogIHRlc3Qg IiRhY19jdl9zZWFyY2hfY2xvY2tfZ2V0dGltZSIgPSAibm9uZSByZXF1aXJlZCIgfHwNCiAgICAg ICAgICAgICAgICAgICAgTElCX0NMT0NLX0dFVFRJTUU9JGFjX2N2X3NlYXJjaF9jbG9ja19nZXR0 aW1lDQpmaQ0KDQogICAgZm9yIGFjX2Z1bmMgaW4gY2xvY2tfZ2V0dGltZSBjbG9ja19zZXR0aW1l DQpkbyA6DQogIGFzX2FjX3Zhcj1gJGFzX2VjaG8gImFjX2N2X2Z1bmNfJGFjX2Z1bmMiIHwgJGFz X3RyX3NoYA0KYWNfZm5fY19jaGVja19mdW5jICIkTElORU5PIiAiJGFjX2Z1bmMiICIkYXNfYWNf dmFyIg0KaWYgZXZhbCB0ZXN0IFwieFwkIiRhc19hY192YXIiXCIgPSB4InllcyI7IHRoZW4gOg0K ICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GDQojZGVmaW5lIGAkYXNfZWNobyAiSEFWRV8kYWNf ZnVuYyIgfCAkYXNfdHJfY3BwYCAxDQpfQUNFT0YNCg0KZmkNCmRvbmUNCg0KICBMSUJTPSRnbF9z YXZlZF9saWJzDQoNCiAgIyBDb2RlIGZyb20gbW9kdWxlIGNsb2V4ZWM6DQoNCg0KDQoNCg0KDQoN Cg0KDQogIGdsX0xJQk9CSlM9IiRnbF9MSUJPQkpTIGNsb2V4ZWMuJGFjX29iamV4dCINCg0KDQoN Cg0KJGFzX2VjaG8gIiNkZWZpbmUgR05VTElCX1RFU1RfQ0xPRVhFQyAxIiA+PmNvbmZkZWZzLmgN Cg0KDQogICMgQ29kZSBmcm9tIG1vZHVsZSBjbG9zZToNCg0KDQoNCg0KDQoNCiAgaWYgdGVzdCAk YWNfY3ZfaGVhZGVyX3N5c19zb2NrZXRfaCAhPSB5ZXM7IHRoZW4NCiAgICAgICAgICAgICAgICAg ICAgZm9yIGFjX2hlYWRlciBpbiB3aW5zb2NrMi5oDQpkbyA6DQogIGFjX2ZuX2NfY2hlY2tfaGVh ZGVyX21vbmdyZWwgIiRMSU5FTk8iICJ3aW5zb2NrMi5oIiAiYWNfY3ZfaGVhZGVyX3dpbnNvY2sy X2giICIkYWNfaW5jbHVkZXNfZGVmYXVsdCINCmlmIHRlc3QgIngkYWNfY3ZfaGVhZGVyX3dpbnNv Y2syX2giID0geHllczsgdGhlbiA6DQogIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YNCiNkZWZp bmUgSEFWRV9XSU5TT0NLMl9IIDENCl9BQ0VPRg0KDQpmaQ0KDQpkb25lDQoNCiAgZmkNCiAgaWYg dGVzdCAiJGFjX2N2X2hlYWRlcl93aW5zb2NrMl9oIiA9IHllczsgdGhlbg0KICAgIEhBVkVfV0lO U09DSzJfSD0xDQogICAgVU5JU1REX0hfSEFWRV9XSU5TT0NLMl9IPTENCiAgICBTWVNfSU9DVExf SF9IQVZFX1dJTlNPQ0syX0g9MQ0KICBlbHNlDQogICAgSEFWRV9XSU5TT0NLMl9IPTANCiAgZmkN Cg0KDQogICAgaWYgdGVzdCAkVU5JU1REX0hfSEFWRV9XSU5TT0NLMl9IID0gMTsgdGhlbg0KDQoN CiAgUkVQTEFDRV9DTE9TRT0xDQoNCg0KDQoNCg0KDQoNCg0KICBnbF9MSUJPQkpTPSIkZ2xfTElC T0JKUyBjbG9zZS4kYWNfb2JqZXh0Ig0KDQoNCg0KICBSRVBMQUNFX0ZDTE9TRT0xDQoNCg0KDQoN Cg0KDQoNCg0KICBnbF9MSUJPQkpTPSIkZ2xfTElCT0JKUyBmY2xvc2UuJGFjX29iamV4dCINCg0K DQoNCiAgICBmaQ0KDQoNCg0KDQoNCiAgR05VTElCX0NMT1NFPTENCg0KDQoNCiRhc19lY2hvICIj ZGVmaW5lIEdOVUxJQl9URVNUX0NMT1NFIDEiID4+Y29uZmRlZnMuaA0KDQoNCg0KICAjIENvZGUg ZnJvbSBtb2R1bGUgY2xvc2UtaG9vazoNCiAgIyBDb2RlIGZyb20gbW9kdWxlIGNsb3NlLXN0cmVh bToNCg0KDQoNCg0KDQoNCg0KDQoNCiAgZ2xfTElCT0JKUz0iJGdsX0xJQk9CSlMgY2xvc2Utc3Ry ZWFtLiRhY19vYmpleHQiDQoNCg0KICAgIDoNCg0KDQoNCmNhdCA+PmNvbmZkZWZzLmggPDxfQUNF T0YNCiNkZWZpbmUgR05VTElCX0NMT1NFX1NUUkVBTSAxDQpfQUNFT0YNCg0KDQogICMgQ29kZSBm cm9tIG1vZHVsZSBjbG9zZWluOg0KDQoNCg0KDQoNCg0KDQoNCg0KICBnbF9MSUJPQkpTPSIkZ2xf TElCT0JKUyBjbG9zZWluLiRhY19vYmpleHQiDQoNCg0KICAgIDoNCg0KICAjIENvZGUgZnJvbSBt b2R1bGUgY2xvc2VvdXQ6DQoNCg0KDQoNCg0KDQoNCg0KDQogIGdsX0xJQk9CSlM9IiRnbF9MSUJP QkpTIGNsb3Nlb3V0LiRhY19vYmpleHQiDQoNCg0KICAgIDoNCg0KICAjIENvZGUgZnJvbSBtb2R1 bGUgY29uZmlnLWg6DQoNCiAgIyBDb2RlIGZyb20gbW9kdWxlIGNvbmZpZ21ha2U6DQoNCiAgICAg ICAgICBpZiB0ZXN0ICJ4JGRhdGFyb290ZGlyIiA9IHg7IHRoZW4NCiAgICBkYXRhcm9vdGRpcj0n JHtkYXRhZGlyfScNCg0KICBmaQ0KICAgIGlmIHRlc3QgIngkZG9jZGlyIiA9IHg7IHRoZW4NCiAg ICBkb2NkaXI9JyR7ZGF0YXJvb3RkaXJ9L2RvYy8ke1BBQ0tBR0VfVEFSTkFNRX0nDQoNCiAgZmkN CiAgICBpZiB0ZXN0ICJ4JGh0bWxkaXIiID0geDsgdGhlbg0KICAgIGh0bWxkaXI9JyR7ZG9jZGly fScNCg0KICBmaQ0KICBpZiB0ZXN0ICJ4JGR2aWRpciIgPSB4OyB0aGVuDQogICAgZHZpZGlyPSck e2RvY2Rpcn0nDQoNCiAgZmkNCiAgaWYgdGVzdCAieCRwZGZkaXIiID0geDsgdGhlbg0KICAgIHBk ZmRpcj0nJHtkb2NkaXJ9Jw0KDQogIGZpDQogIGlmIHRlc3QgIngkcHNkaXIiID0geDsgdGhlbg0K ICAgIHBzZGlyPScke2RvY2Rpcn0nDQoNCiAgZmkNCiAgaWYgdGVzdCAieCRsaXNwZGlyIiA9IHg7 IHRoZW4NCiAgICBsaXNwZGlyPScke2RhdGFyb290ZGlyfS9lbWFjcy9zaXRlLWxpc3AnDQoNCiAg ZmkNCiAgaWYgdGVzdCAieCRsb2NhbGVkaXIiID0geDsgdGhlbg0KICAgIGxvY2FsZWRpcj0nJHtk YXRhcm9vdGRpcn0vbG9jYWxlJw0KDQogIGZpDQoNCiAgICAgIHBrZ2xpYmV4ZWNkaXI9JyR7bGli ZXhlY2Rpcn0vJHtQQUNLQUdFfScNCg0KDQogICMgQ29kZSBmcm9tIG1vZHVsZSBjcnlwdG8vbWQ1 Og0KDQoNCg0KDQoNCg0KDQoNCg0KICBnbF9MSUJPQkpTPSIkZ2xfTElCT0JKUyBtZDUuJGFjX29i amV4dCINCg0KDQoNCg0KICA6DQoNCiAgIyBDb2RlIGZyb20gbW9kdWxlIGNyeXB0by9zaGExOg0K DQoNCg0KDQoNCg0KDQoNCg0KICBnbF9MSUJPQkpTPSIkZ2xfTElCT0JKUyBzaGExLiRhY19vYmpl eHQiDQoNCg0KDQoNCiAgOg0KDQogICMgQ29kZSBmcm9tIG1vZHVsZSBjcnlwdG8vc2hhMjU2Og0K DQoNCg0KDQoNCg0KDQoNCg0KICBnbF9MSUJPQkpTPSIkZ2xfTElCT0JKUyBzaGEyNTYuJGFjX29i amV4dCINCg0KDQoNCg0KDQogICMgQ29kZSBmcm9tIG1vZHVsZSBjcnlwdG8vc2hhNTEyOg0KDQoN Cg0KDQoNCg0KDQoNCg0KICBnbF9MSUJPQkpTPSIkZ2xfTElCT0JKUyBzaGE1MTIuJGFjX29iamV4 dCINCg0KDQoNCg0KDQogICMgQ29kZSBmcm9tIG1vZHVsZSBjdHlwZToNCg0KDQoNCg0KDQoNCg0K DQoNCg0KDQogICAgIGlmIHRlc3QgJGdsX2N2X2hhdmVfaW5jbHVkZV9uZXh0ID0geWVzOyB0aGVu DQogICAgICAgZ2xfY3ZfbmV4dF9jdHlwZV9oPSc8J2N0eXBlLmgnPicNCiAgICAgZWxzZQ0KICAg ICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgYWJz b2x1dGUgbmFtZSBvZiA8Y3R5cGUuaD4iID4mNQ0KJGFzX2VjaG9fbiAiY2hlY2tpbmcgYWJzb2x1 dGUgbmFtZSBvZiA8Y3R5cGUuaD4uLi4gIiA+JjY7IH0NCmlmICR7Z2xfY3ZfbmV4dF9jdHlwZV9o Kzp9IGZhbHNlOyB0aGVuIDoNCiAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYNCmVsc2UNCg0K ICAgICAgICAgICAgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4 dA0KLyogZW5kIGNvbmZkZWZzLmguICAqLw0KI2luY2x1ZGUgPGN0eXBlLmg+DQoNCl9BQ0VPRg0K ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgY2FzZSAiJGhvc3Rfb3MiIGluDQogICAgICAgICAgICAgICAgIGFpeCopIGdsX2Fic25h bWVfY3BwPSIkYWNfY3BwIC1DIiA7Ow0KICAgICAgICAgICAgICAgICAqKSAgICBnbF9hYnNuYW1l X2NwcD0iJGFjX2NwcCIgOzsNCiAgICAgICAgICAgICAgIGVzYWMNCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsX2N2X25leHRfY3R5 cGVfaD0nIidgKGV2YWwgIiRnbF9hYnNuYW1lX2NwcCBjb25mdGVzdC4kYWNfZXh0IikgMj4mNSB8 DQogICAgICAgICAgICAgICAgICBzZWQgLW4gJ1wjL2N0eXBlLmgjew0KICAgICAgICAgICAgICAg ICAgICBzIy4qIlwoLiovY3R5cGUuaFwpIi4qI1wxIw0KICAgICAgICAgICAgICAgICAgICBzI14v W14vXSMvLyYjDQogICAgICAgICAgICAgICAgICAgIHANCiAgICAgICAgICAgICAgICAgICAgcQ0K ICAgICAgICAgICAgICAgICAgfSdgJyInDQoNCg0KZmkNCnsgJGFzX2VjaG8gIiRhc19tZToke2Fz X2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkZ2xfY3ZfbmV4dF9jdHlwZV9oIiA+JjUNCiRhc19l Y2hvICIkZ2xfY3ZfbmV4dF9jdHlwZV9oIiA+JjY7IH0NCiAgICAgZmkNCiAgICAgTkVYVF9DVFlQ RV9IPSRnbF9jdl9uZXh0X2N0eXBlX2gNCg0KICAgICBpZiB0ZXN0ICRnbF9jdl9oYXZlX2luY2x1 ZGVfbmV4dCA9IHllcyB8fCB0ZXN0ICRnbF9jdl9oYXZlX2luY2x1ZGVfbmV4dCA9IGJ1Z2d5OyB0 aGVuDQogICAgICAgIyBJTkNMVURFX05FWFRfQVNfRklSU1RfRElSRUNUSVZFPSdpbmNsdWRlX25l eHQnDQogICAgICAgZ2xfbmV4dF9hc19maXJzdF9kaXJlY3RpdmU9JzwnY3R5cGUuaCc+Jw0KICAg ICBlbHNlDQogICAgICAgIyBJTkNMVURFX05FWFRfQVNfRklSU1RfRElSRUNUSVZFPSdpbmNsdWRl Jw0KICAgICAgIGdsX25leHRfYXNfZmlyc3RfZGlyZWN0aXZlPSRnbF9jdl9uZXh0X2N0eXBlX2gN CiAgICAgZmkNCiAgICAgTkVYVF9BU19GSVJTVF9ESVJFQ1RJVkVfQ1RZUEVfSD0kZ2xfbmV4dF9h c19maXJzdF9kaXJlY3RpdmUNCg0KDQoNCg0KDQoNCiAgICBmb3IgZ2xfZnVuYyBpbiBpc2JsYW5r OyBkbw0KICAgIGFzX2dsX1N5bWJvbD1gJGFzX2VjaG8gImdsX2N2X2hhdmVfcmF3X2RlY2xfJGds X2Z1bmMiIHwgJGFzX3RyX3NoYA0KICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0k TElORU5PfTogY2hlY2tpbmcgd2hldGhlciAkZ2xfZnVuYyBpcyBkZWNsYXJlZCB3aXRob3V0IGEg bWFjcm8iID4mNQ0KJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciAkZ2xfZnVuYyBpcyBkZWNs YXJlZCB3aXRob3V0IGEgbWFjcm8uLi4gIiA+JjY7IH0NCmlmIGV2YWwgXCR7JGFzX2dsX1N5bWJv bCs6fSBmYWxzZTsgdGhlbiA6DQogICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2DQplbHNlDQog IGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQNCi8qIGVuZCBjb25m ZGVmcy5oLiAgKi8NCiNpbmNsdWRlIDxjdHlwZS5oPg0KDQppbnQNCm1haW4gKCkNCnsNCiN1bmRl ZiAkZ2xfZnVuYw0KICAodm9pZCkgJGdsX2Z1bmM7DQogIDsNCiAgcmV0dXJuIDA7DQp9DQpfQUNF T0YNCmlmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoNCiAgZXZhbCAiJGFz X2dsX1N5bWJvbD15ZXMiDQplbHNlDQogIGV2YWwgIiRhc19nbF9TeW1ib2w9bm8iDQpmaQ0Kcm0g LWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0 DQpmaQ0KZXZhbCBhY19yZXM9XCQkYXNfZ2xfU3ltYm9sDQoJICAgICAgIHsgJGFzX2VjaG8gIiRh c19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfcmVzIiA+JjUNCiRhc19lY2hv ICIkYWNfcmVzIiA+JjY7IH0NCiAgICAgaWYgZXZhbCB0ZXN0IFwieFwkIiRhc19nbF9TeW1ib2wi XCIgPSB4InllcyI7IHRoZW4gOg0KICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GDQojZGVmaW5l IGAkYXNfZWNobyAiSEFWRV9SQVdfREVDTF8kZ2xfZnVuYyIgfCAkYXNfdHJfY3BwYCAxDQpfQUNF T0YNCg0KICAgICAgICAgICAgICAgICAgICAgZXZhbCBhY19jdl9oYXZlX2RlY2xfJGdsX2Z1bmM9 eWVzDQpmaQ0KICAgICAgZG9uZQ0KDQoNCiAgIyBDb2RlIGZyb20gbW9kdWxlIGN5Y2xlLWNoZWNr Og0KDQoNCg0KDQoNCg0KDQoNCg0KDQogIGdsX0xJQk9CSlM9IiRnbF9MSUJPQkpTIGN5Y2xlLWNo ZWNrLiRhY19vYmpleHQiDQoNCg0KICAjIENvZGUgZnJvbSBtb2R1bGUgZC1pbm86DQogIHsgJGFz X2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIGRfaW5vIG1l bWJlciBpbiBkaXJlY3Rvcnkgc3RydWN0IiA+JjUNCiRhc19lY2hvX24gImNoZWNraW5nIGZvciBk X2lubyBtZW1iZXIgaW4gZGlyZWN0b3J5IHN0cnVjdC4uLiAiID4mNjsgfQ0KaWYgJHtnbF9jdl9z dHJ1Y3RfZGlyZW50X2RfaW5vKzp9IGZhbHNlOyB0aGVuIDoNCiAgJGFzX2VjaG9fbiAiKGNhY2hl ZCkgIiA+JjYNCmVsc2UNCiAgaWYgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgPSB5ZXM7IHRoZW4g Og0KICBnbF9jdl9zdHJ1Y3RfZGlyZW50X2RfaW5vPW5vDQplbHNlDQogIGNhdCBjb25mZGVmcy5o IC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQNCi8qIGVuZCBjb25mZGVmcy5oLiAgKi8NCiNp bmNsdWRlIDxzeXMvdHlwZXMuaD4NCiAgICAgICAgICAgICAjaW5jbHVkZSA8c3lzL3N0YXQuaD4N CiAgICAgICAgICAgICAjaW5jbHVkZSA8ZGlyZW50Lmg+DQoNCmludA0KbWFpbiAoKQ0Kew0KRElS ICpkcCA9IG9wZW5kaXIgKCIuIik7DQogICAgICAgICAgICAgc3RydWN0IGRpcmVudCAqZTsNCiAg ICAgICAgICAgICBzdHJ1Y3Qgc3RhdCBzdDsNCiAgICAgICAgICAgICBpZiAoISBkcCkNCiAgICAg ICAgICAgICAgIHJldHVybiAxOw0KICAgICAgICAgICAgIGUgPSByZWFkZGlyIChkcCk7DQogICAg ICAgICAgICAgaWYgKCEgZSkNCiAgICAgICAgICAgICAgIHJldHVybiAyOw0KICAgICAgICAgICAg IGlmIChzdGF0IChlLT5kX25hbWUsICZzdCkgIT0gMCkNCiAgICAgICAgICAgICAgIHJldHVybiAz Ow0KICAgICAgICAgICAgIGlmIChlLT5kX2lubyAhPSBzdC5zdF9pbm8pDQogICAgICAgICAgICAg ICByZXR1cm4gNDsNCiAgICAgICAgICAgICByZXR1cm4gMDsNCg0KICA7DQogIHJldHVybiAwOw0K fQ0KX0FDRU9GDQppZiBhY19mbl9jX3RyeV9ydW4gIiRMSU5FTk8iOyB0aGVuIDoNCiAgZ2xfY3Zf c3RydWN0X2RpcmVudF9kX2lubz15ZXMNCmVsc2UNCiAgZ2xfY3Zfc3RydWN0X2RpcmVudF9kX2lu bz1ubw0KZmkNCnJtIC1mIGNvcmUgKi5jb3JlIGNvcmUuY29uZnRlc3QuKiBnbW9uLm91dCBiYi5v dXQgY29uZnRlc3QkYWNfZXhlZXh0IFwNCiAgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC5i ZWFtIGNvbmZ0ZXN0LiRhY19leHQNCmZpDQoNCmZpDQp7ICRhc19lY2hvICIkYXNfbWU6JHthc19s aW5lbm8tJExJTkVOT306IHJlc3VsdDogJGdsX2N2X3N0cnVjdF9kaXJlbnRfZF9pbm8iID4mNQ0K JGFzX2VjaG8gIiRnbF9jdl9zdHJ1Y3RfZGlyZW50X2RfaW5vIiA+JjY7IH0NCiAgIGlmIHRlc3Qg JGdsX2N2X3N0cnVjdF9kaXJlbnRfZF9pbm8gPSB5ZXM7IHRoZW4NCg0KJGFzX2VjaG8gIiNkZWZp bmUgRF9JTk9fSU5fRElSRU5UIDEiID4+Y29uZmRlZnMuaA0KDQogICBmaQ0KDQoNCiAgIyBDb2Rl IGZyb20gbW9kdWxlIGQtdHlwZToNCiAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRM SU5FTk99OiBjaGVja2luZyBmb3IgZF90eXBlIG1lbWJlciBpbiBkaXJlY3Rvcnkgc3RydWN0IiA+ JjUNCiRhc19lY2hvX24gImNoZWNraW5nIGZvciBkX3R5cGUgbWVtYmVyIGluIGRpcmVjdG9yeSBz dHJ1Y3QuLi4gIiA+JjY7IH0NCmlmICR7Z2xfY3Zfc3RydWN0X2RpcmVudF9kX3R5cGUrOn0gZmFs c2U7IHRoZW4gOg0KICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNg0KZWxzZQ0KICBjYXQgY29u ZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0DQovKiBlbmQgY29uZmRlZnMuaC4g ICovDQoNCiNpbmNsdWRlIDxzeXMvdHlwZXMuaD4NCiNpbmNsdWRlIDxkaXJlbnQuaD4NCg0KaW50 DQptYWluICgpDQp7DQpzdHJ1Y3QgZGlyZW50IGRwOyBkcC5kX3R5cGUgPSAwOw0KICA7DQogIHJl dHVybiAwOw0KfQ0KX0FDRU9GDQppZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6 DQogIGdsX2N2X3N0cnVjdF9kaXJlbnRfZF90eXBlPXllcw0KZWxzZQ0KICBnbF9jdl9zdHJ1Y3Rf ZGlyZW50X2RfdHlwZT1ubw0KZmkNCnJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRh Y19vYmpleHQgXA0KICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0DQoNCg0K ZmkNCnsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkZ2xf Y3Zfc3RydWN0X2RpcmVudF9kX3R5cGUiID4mNQ0KJGFzX2VjaG8gIiRnbF9jdl9zdHJ1Y3RfZGly ZW50X2RfdHlwZSIgPiY2OyB9DQogICBpZiB0ZXN0ICRnbF9jdl9zdHJ1Y3RfZGlyZW50X2RfdHlw ZSA9IHllczsgdGhlbg0KDQokYXNfZWNobyAiI2RlZmluZSBIQVZFX1NUUlVDVF9ESVJFTlRfRF9U WVBFIDEiID4+Y29uZmRlZnMuaA0KDQogICBmaQ0KDQoNCiAgIyBDb2RlIGZyb20gbW9kdWxlIGRl di1pbm86DQogICMgQ29kZSBmcm9tIG1vZHVsZSBkaS1zZXQ6DQogICMgQ29kZSBmcm9tIG1vZHVs ZSBkaWFjcml0Og0KICAjIENvZGUgZnJvbSBtb2R1bGUgZGlyZW50Og0KDQoNCg0KDQoNCg0KDQoN Cg0KDQoNCg0KICAgICBpZiB0ZXN0ICRnbF9jdl9oYXZlX2luY2x1ZGVfbmV4dCA9IHllczsgdGhl bg0KICAgICAgIGdsX2N2X25leHRfZGlyZW50X2g9JzwnZGlyZW50LmgnPicNCiAgICAgZWxzZQ0K ICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcg YWJzb2x1dGUgbmFtZSBvZiA8ZGlyZW50Lmg+IiA+JjUNCiRhc19lY2hvX24gImNoZWNraW5nIGFi c29sdXRlIG5hbWUgb2YgPGRpcmVudC5oPi4uLiAiID4mNjsgfQ0KaWYgJHtnbF9jdl9uZXh0X2Rp cmVudF9oKzp9IGZhbHNlOyB0aGVuIDoNCiAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYNCmVs c2UNCg0KICAgICAgICAgICAgIGlmIHRlc3QgJGFjX2N2X2hlYWRlcl9kaXJlbnRfaCA9IHllczsg dGhlbg0KDQoNCiAgICAgICAgICAgICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0 ZXN0LiRhY19leHQNCi8qIGVuZCBjb25mZGVmcy5oLiAgKi8NCiNpbmNsdWRlIDxkaXJlbnQuaD4N Cg0KX0FDRU9GDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBjYXNlICIkaG9zdF9vcyIgaW4NCiAgICAgICAgICAgICAgICAgYWl4 KikgZ2xfYWJzbmFtZV9jcHA9IiRhY19jcHAgLUMiIDs7DQogICAgICAgICAgICAgICAgICopICAg IGdsX2Fic25hbWVfY3BwPSIkYWNfY3BwIiA7Ow0KICAgICAgICAgICAgICAgZXNhYw0KICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2xf Y3ZfbmV4dF9kaXJlbnRfaD0nIidgKGV2YWwgIiRnbF9hYnNuYW1lX2NwcCBjb25mdGVzdC4kYWNf ZXh0IikgMj4mNSB8DQogICAgICAgICAgICAgICAgICBzZWQgLW4gJ1wjL2RpcmVudC5oI3sNCiAg ICAgICAgICAgICAgICAgICAgcyMuKiJcKC4qL2RpcmVudC5oXCkiLiojXDEjDQogICAgICAgICAg ICAgICAgICAgIHMjXi9bXi9dIy8vJiMNCiAgICAgICAgICAgICAgICAgICAgcA0KICAgICAgICAg ICAgICAgICAgICBxDQogICAgICAgICAgICAgICAgICB9J2AnIicNCiAgICAgICAgICBlbHNlDQog ICAgICAgICAgICAgICBnbF9jdl9uZXh0X2RpcmVudF9oPSc8J2RpcmVudC5oJz4nDQogICAgICAg ICAgICAgZmkNCg0KDQpmaQ0KeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99 OiByZXN1bHQ6ICRnbF9jdl9uZXh0X2RpcmVudF9oIiA+JjUNCiRhc19lY2hvICIkZ2xfY3ZfbmV4 dF9kaXJlbnRfaCIgPiY2OyB9DQogICAgIGZpDQogICAgIE5FWFRfRElSRU5UX0g9JGdsX2N2X25l eHRfZGlyZW50X2gNCg0KICAgICBpZiB0ZXN0ICRnbF9jdl9oYXZlX2luY2x1ZGVfbmV4dCA9IHll cyB8fCB0ZXN0ICRnbF9jdl9oYXZlX2luY2x1ZGVfbmV4dCA9IGJ1Z2d5OyB0aGVuDQogICAgICAg IyBJTkNMVURFX05FWFRfQVNfRklSU1RfRElSRUNUSVZFPSdpbmNsdWRlX25leHQnDQogICAgICAg Z2xfbmV4dF9hc19maXJzdF9kaXJlY3RpdmU9JzwnZGlyZW50LmgnPicNCiAgICAgZWxzZQ0KICAg ICAgICMgSU5DTFVERV9ORVhUX0FTX0ZJUlNUX0RJUkVDVElWRT0naW5jbHVkZScNCiAgICAgICBn bF9uZXh0X2FzX2ZpcnN0X2RpcmVjdGl2ZT0kZ2xfY3ZfbmV4dF9kaXJlbnRfaA0KICAgICBmaQ0K ICAgICBORVhUX0FTX0ZJUlNUX0RJUkVDVElWRV9ESVJFTlRfSD0kZ2xfbmV4dF9hc19maXJzdF9k aXJlY3RpdmUNCg0KDQoNCg0KDQoNCiAgICBmb3IgZ2xfZnVuYyBpbiBhbHBoYXNvcnQgZGlyZmQg ZmRvcGVuZGlyIHNjYW5kaXI7IGRvDQogICAgYXNfZ2xfU3ltYm9sPWAkYXNfZWNobyAiZ2xfY3Zf aGF2ZV9yYXdfZGVjbF8kZ2xfZnVuYyIgfCAkYXNfdHJfc2hgDQogICAgeyAkYXNfZWNobyAiJGFz X21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyICRnbF9mdW5jIGlzIGRl Y2xhcmVkIHdpdGhvdXQgYSBtYWNybyIgPiY1DQokYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVy ICRnbF9mdW5jIGlzIGRlY2xhcmVkIHdpdGhvdXQgYSBtYWNyby4uLiAiID4mNjsgfQ0KaWYgZXZh bCBcJHskYXNfZ2xfU3ltYm9sKzp9IGZhbHNlOyB0aGVuIDoNCiAgJGFzX2VjaG9fbiAiKGNhY2hl ZCkgIiA+JjYNCmVsc2UNCiAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFj X2V4dA0KLyogZW5kIGNvbmZkZWZzLmguICAqLw0KI2luY2x1ZGUgPGRpcmVudC5oPg0KDQppbnQN Cm1haW4gKCkNCnsNCiN1bmRlZiAkZ2xfZnVuYw0KICAodm9pZCkgJGdsX2Z1bmM7DQogIDsNCiAg cmV0dXJuIDA7DQp9DQpfQUNFT0YNCmlmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0 aGVuIDoNCiAgZXZhbCAiJGFzX2dsX1N5bWJvbD15ZXMiDQplbHNlDQogIGV2YWwgIiRhc19nbF9T eW1ib2w9bm8iDQpmaQ0Kcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4 dCBjb25mdGVzdC4kYWNfZXh0DQpmaQ0KZXZhbCBhY19yZXM9XCQkYXNfZ2xfU3ltYm9sDQoJICAg ICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNf cmVzIiA+JjUNCiRhc19lY2hvICIkYWNfcmVzIiA+JjY7IH0NCiAgICAgaWYgZXZhbCB0ZXN0IFwi eFwkIiRhc19nbF9TeW1ib2wiXCIgPSB4InllcyI7IHRoZW4gOg0KICBjYXQgPj5jb25mZGVmcy5o IDw8X0FDRU9GDQojZGVmaW5lIGAkYXNfZWNobyAiSEFWRV9SQVdfREVDTF8kZ2xfZnVuYyIgfCAk YXNfdHJfY3BwYCAxDQpfQUNFT0YNCg0KICAgICAgICAgICAgICAgICAgICAgZXZhbCBhY19jdl9o YXZlX2RlY2xfJGdsX2Z1bmM9eWVzDQpmaQ0KICAgICAgZG9uZQ0KDQoNCiAgIyBDb2RlIGZyb20g bW9kdWxlIGRpcmVudC1zYWZlcjoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KICBnbF9MSUJPQkpTPSIk Z2xfTElCT0JKUyBvcGVuZGlyLXNhZmVyLiRhY19vYmpleHQiDQoNCg0KDQoNCmNhdCA+PmNvbmZk ZWZzLmggPDxfQUNFT0YNCiNkZWZpbmUgR05VTElCX0RJUkVOVF9TQUZFUiAxDQpfQUNFT0YNCg0K DQogICMgQ29kZSBmcm9tIG1vZHVsZSBkaXJmZDoNCg0KDQoNCiAgICA6DQoNCg0KDQoNCiAgZm9y IGFjX2Z1bmMgaW4gZGlyZmQNCmRvIDoNCiAgYWNfZm5fY19jaGVja19mdW5jICIkTElORU5PIiAi ZGlyZmQiICJhY19jdl9mdW5jX2RpcmZkIg0KaWYgdGVzdCAieCRhY19jdl9mdW5jX2RpcmZkIiA9 IHh5ZXM7IHRoZW4gOg0KICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GDQojZGVmaW5lIEhBVkVf RElSRkQgMQ0KX0FDRU9GDQoNCmZpDQpkb25lDQoNCiAgYWNfZm5fY19jaGVja19kZWNsICIkTElO RU5PIiAiZGlyZmQiICJhY19jdl9oYXZlX2RlY2xfZGlyZmQiICIjaW5jbHVkZSA8c3lzL3R5cGVz Lmg+DQogICAgICNpbmNsdWRlIDxkaXJlbnQuaD4NCiINCmlmIHRlc3QgIngkYWNfY3ZfaGF2ZV9k ZWNsX2RpcmZkIiA9IHh5ZXM7IHRoZW4gOg0KICBhY19oYXZlX2RlY2w9MQ0KZWxzZQ0KICBhY19o YXZlX2RlY2w9MA0KZmkNCg0KY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRg0KI2RlZmluZSBIQVZF X0RFQ0xfRElSRkQgJGFjX2hhdmVfZGVjbA0KX0FDRU9GDQoNCiAgaWYgdGVzdCAkYWNfY3ZfaGF2 ZV9kZWNsX2RpcmZkID0gbm87IHRoZW4NCiAgICBIQVZFX0RFQ0xfRElSRkQ9MA0KICBmaQ0KDQog IHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhl ciBkaXJmZCBpcyBhIG1hY3JvIiA+JjUNCiRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgZGly ZmQgaXMgYSBtYWNyby4uLiAiID4mNjsgfQ0KaWYgJHtnbF9jdl9mdW5jX2RpcmZkX21hY3JvKzp9 IGZhbHNlOyB0aGVuIDoNCiAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYNCmVsc2UNCiAgY2F0 IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dA0KLyogZW5kIGNvbmZkZWZz LmguICAqLw0KDQojaW5jbHVkZSA8c3lzL3R5cGVzLmg+DQojaW5jbHVkZSA8ZGlyZW50Lmg+DQoj aWZkZWYgZGlyZmQNCiBkaXJlbnRfaGVhZGVyX2RlZmluZXNfZGlyZmQNCiNlbmRpZg0KX0FDRU9G DQppZiAoZXZhbCAiJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0IikgMj4mNSB8DQogICRFR1JFUCAi ZGlyZW50X2hlYWRlcl9kZWZpbmVzX2RpcmZkIiA+L2Rldi9udWxsIDI+JjE7IHRoZW4gOg0KICBn bF9jdl9mdW5jX2RpcmZkX21hY3JvPXllcw0KZWxzZQ0KICBnbF9jdl9mdW5jX2RpcmZkX21hY3Jv PW5vDQpmaQ0Kcm0gLWYgY29uZnRlc3QqDQoNCmZpDQp7ICRhc19lY2hvICIkYXNfbWU6JHthc19s aW5lbm8tJExJTkVOT306IHJlc3VsdDogJGdsX2N2X2Z1bmNfZGlyZmRfbWFjcm8iID4mNQ0KJGFz X2VjaG8gIiRnbF9jdl9mdW5jX2RpcmZkX21hY3JvIiA+JjY7IH0NCg0KICAjIFVzZSB0aGUgcmVw bGFjZW1lbnQgb25seSBpZiB3ZSBoYXZlIG5vIGZ1bmN0aW9uIG9yIG1hY3JvIHdpdGggdGhhdCBu YW1lLg0KICBpZiB0ZXN0ICRhY19jdl9mdW5jX2RpcmZkLCRnbF9jdl9mdW5jX2RpcmZkX21hY3Jv ID0gbm8sbm87IHRoZW4NCiAgICBpZiB0ZXN0ICRhY19jdl9oYXZlX2RlY2xfZGlyZmQgPSB5ZXM7 IHRoZW4NCiAgICAgICMgSWYgdGhlIHN5c3RlbSBkZWNsYXJlcyBkaXJmZCBhbHJlYWR5LCBsZXQn cyBkZWNsYXJlIHJwbF9kaXJmZCBpbnN0ZWFkLg0KICAgICAgUkVQTEFDRV9ESVJGRD0xDQogICAg ZmkNCg0KDQoNCg0KDQoNCg0KDQogIGdsX0xJQk9CSlM9IiRnbF9MSUJPQkpTIGRpcmZkLiRhY19v YmpleHQiDQoNCiAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNo ZWNraW5nIGhvdyB0byBnZXQgdGhlIGZpbGUgZGVzY3JpcHRvciBhc3NvY2lhdGVkIHdpdGggYW4g b3BlbiBESVIqIiA+JjUNCiRhc19lY2hvX24gImNoZWNraW5nIGhvdyB0byBnZXQgdGhlIGZpbGUg ZGVzY3JpcHRvciBhc3NvY2lhdGVkIHdpdGggYW4gb3BlbiBESVIqLi4uICIgPiY2OyB9DQppZiAk e2dsX2N2X3N5c19kaXJfZmRfbWVtYmVyX25hbWUrOn0gZmFsc2U7IHRoZW4gOg0KICAkYXNfZWNo b19uICIoY2FjaGVkKSAiID4mNg0KZWxzZQ0KDQogICAgICAgIGRpcmZkX3NhdmVfQ0ZMQUdTPSRD RkxBR1MNCiAgICAgICAgZm9yIGFjX2V4cHIgaW4gZF9mZCBkZF9mZDsgZG8NCg0KICAgICAgICAg IENGTEFHUz0iJENGTEFHUyAtRERJUl9GRF9NRU1CRVJfTkFNRT0kYWNfZXhwciINCiAgICAgICAg ICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0DQovKiBlbmQgY29u ZmRlZnMuaC4gICovDQoNCiAgICAgICAgICAgICAjaW5jbHVkZSA8c3lzL3R5cGVzLmg+DQogICAg ICAgICAgICAgI2luY2x1ZGUgPGRpcmVudC5oPg0KaW50DQptYWluICgpDQp7DQpESVIgKmRpcl9w ID0gb3BlbmRpcigiLiIpOyAodm9pZCkgZGlyX3AtPkRJUl9GRF9NRU1CRVJfTkFNRTsNCiAgOw0K ICByZXR1cm4gMDsNCn0NCl9BQ0VPRg0KaWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7 IHRoZW4gOg0KICBkaXJfZmRfZm91bmQ9eWVzDQoNCmZpDQpybSAtZiBjb3JlIGNvbmZ0ZXN0LmVy ciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQNCiAgICAgICAgICBDRkxBR1M9 JGRpcmZkX3NhdmVfQ0ZMQUdTDQogICAgICAgICAgdGVzdCAiJGRpcl9mZF9mb3VuZCIgPSB5ZXMg JiYgYnJlYWsNCiAgICAgICAgZG9uZQ0KICAgICAgICB0ZXN0ICIkZGlyX2ZkX2ZvdW5kIiA9IHll cyB8fCBhY19leHByPW5vX3N1Y2hfbWVtYmVyDQoNCiAgICAgICAgZ2xfY3Zfc3lzX2Rpcl9mZF9t ZW1iZXJfbmFtZT0kYWNfZXhwcg0KDQoNCmZpDQp7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5l bm8tJExJTkVOT306IHJlc3VsdDogJGdsX2N2X3N5c19kaXJfZmRfbWVtYmVyX25hbWUiID4mNQ0K JGFzX2VjaG8gIiRnbF9jdl9zeXNfZGlyX2ZkX21lbWJlcl9uYW1lIiA+JjY7IH0NCiAgICBpZiB0 ZXN0ICRnbF9jdl9zeXNfZGlyX2ZkX21lbWJlcl9uYW1lICE9IG5vX3N1Y2hfbWVtYmVyOyB0aGVu DQoNCmNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YNCiNkZWZpbmUgRElSX0ZEX01FTUJFUl9OQU1F ICRnbF9jdl9zeXNfZGlyX2ZkX21lbWJlcl9uYW1lDQpfQUNFT0YNCg0KICAgIGZpDQoNCiAgZmkN Cg0KDQoNCg0KICBHTlVMSUJfRElSRkQ9MQ0KDQoNCg0KJGFzX2VjaG8gIiNkZWZpbmUgR05VTElC X1RFU1RfRElSRkQgMSIgPj5jb25mZGVmcy5oDQoNCg0KDQogICMgQ29kZSBmcm9tIG1vZHVsZSBk aXJuYW1lOg0KDQoNCg0KDQoNCg0KDQoNCg0KDQogIGdsX0xJQk9CSlM9IiRnbF9MSUJPQkpTIGJh c2VuYW1lLiRhY19vYmpleHQiDQoNCg0KDQoNCg0KDQoNCg0KDQogIGdsX0xJQk9CSlM9IiRnbF9M SUJPQkpTIGRpcm5hbWUuJGFjX29iamV4dCINCg0KDQoNCg0KY2F0ID4+Y29uZmRlZnMuaCA8PF9B Q0VPRg0KI2RlZmluZSBHTlVMSUJfRElSTkFNRSAxDQpfQUNFT0YNCg0KDQogICMgQ29kZSBmcm9t IG1vZHVsZSBkaXJuYW1lLWxncGw6DQoNCg0KDQoNCg0KDQoNCg0KDQogIGdsX0xJQk9CSlM9IiRn bF9MSUJPQkpTIGJhc2VuYW1lLWxncGwuJGFjX29iamV4dCINCg0KDQoNCg0KDQoNCg0KDQoNCiAg Z2xfTElCT0JKUz0iJGdsX0xJQk9CSlMgZGlybmFtZS1sZ3BsLiRhY19vYmpleHQiDQoNCg0KDQoN Cg0KDQoNCg0KDQogIGdsX0xJQk9CSlM9IiRnbF9MSUJPQkpTIHN0cmlwc2xhc2guJGFjX29iamV4 dCINCg0KDQoNCg0KDQogICMgQ29kZSBmcm9tIG1vZHVsZSBkby1yZWxlYXNlLWNvbW1pdC1hbmQt dGFnOg0KICAjIENvZGUgZnJvbSBtb2R1bGUgZG9zbmFtZToNCiAgIyBDb2RlIGZyb20gbW9kdWxl IGRvdWJsZS1zbGFzaC1yb290Og0KDQoNCiAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5v LSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIC8vIGlzIGRpc3RpbmN0IGZyb20gLyIgPiY1DQok YXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIC8vIGlzIGRpc3RpbmN0IGZyb20gLy4uLiAiID4m NjsgfQ0KaWYgJHtnbF9jdl9kb3VibGVfc2xhc2hfcm9vdCs6fSBmYWxzZTsgdGhlbiA6DQogICRh c19lY2hvX24gIihjYWNoZWQpICIgPiY2DQplbHNlDQogICBpZiB0ZXN0IHgiJGNyb3NzX2NvbXBp bGluZyIgPSB4eWVzIDsgdGhlbg0KICAgICAgICAjIFdoZW4gY3Jvc3MtY29tcGlsaW5nLCB0aGVy ZSBpcyBubyB3YXkgdG8gdGVsbCB3aGV0aGVyIC8vIGlzIHNwZWNpYWwNCiAgICAgICAgIyBzaG9y dCBvZiBhIGxpc3Qgb2YgaG9zdHMuICBIb3dldmVyLCB0aGUgb25seSBrbm93biBob3N0cyB0byBk YXRlDQogICAgICAgICMgdGhhdCBoYXZlIGEgZGlzdGluY3QgLy8gYXJlIEFwb2xsbyBEb21haW5P UyAodG9vIG9sZCB0byBwb3J0IHRvKSwNCiAgICAgICAgIyBDeWd3aW4sIGFuZCB6L09TLiAgSWYg YW55b25lIGtub3dzIG9mIGFub3RoZXIgc3lzdGVtIGZvciB3aGljaCAvLyBoYXMNCiAgICAgICAg IyBzcGVjaWFsIHNlbWFudGljcyBhbmQgaXMgZGlzdGluY3QgZnJvbSAvLCBwbGVhc2UgcmVwb3J0 IGl0IHRvDQogICAgICAgICMgPGJ1Zy1nbnVsaWJAZ251Lm9yZz4uDQogICAgICAgIGNhc2UgJGhv c3QgaW4NCiAgICAgICAgICAqLWN5Z3dpbiB8IGkzNzAtaWJtLW9wZW5lZGl0aW9uKQ0KICAgICAg ICAgICAgZ2xfY3ZfZG91YmxlX3NsYXNoX3Jvb3Q9eWVzIDs7DQogICAgICAgICAgKikNCiAgICAg ICAgICAgICMgQmUgb3B0aW1pc3RpYyBhbmQgYXNzdW1lIHRoYXQgLyBhbmQgLy8gYXJlIHRoZSBz YW1lIHdoZW4gd2UNCiAgICAgICAgICAgICMgZG9uJ3Qga25vdy4NCiAgICAgICAgICAgIGdsX2N2 X2RvdWJsZV9zbGFzaF9yb290PSd1bmtub3duLCBhc3N1bWluZyBubycgOzsNCiAgICAgICAgZXNh Yw0KICAgICAgZWxzZQ0KICAgICAgICBzZXQgeCBgbHMgLWRpIC8gLy8gMj4vZGV2L251bGxgDQog ICAgICAgIGlmIHRlc3QgIiQyIiA9ICIkNCIgJiYgd2MgLy9kZXYvbnVsbCA+L2Rldi9udWxsIDI+ JjE7IHRoZW4NCiAgICAgICAgICBnbF9jdl9kb3VibGVfc2xhc2hfcm9vdD1ubw0KICAgICAgICBl bHNlDQogICAgICAgICAgZ2xfY3ZfZG91YmxlX3NsYXNoX3Jvb3Q9eWVzDQogICAgICAgIGZpDQog ICAgICBmaQ0KZmkNCnsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVz dWx0OiAkZ2xfY3ZfZG91YmxlX3NsYXNoX3Jvb3QiID4mNQ0KJGFzX2VjaG8gIiRnbF9jdl9kb3Vi bGVfc2xhc2hfcm9vdCIgPiY2OyB9DQogIGlmIHRlc3QgIiRnbF9jdl9kb3VibGVfc2xhc2hfcm9v dCIgPSB5ZXM7IHRoZW4NCg0KJGFzX2VjaG8gIiNkZWZpbmUgRE9VQkxFX1NMQVNIX0lTX0RJU1RJ TkNUX1JPT1QgMSIgPj5jb25mZGVmcy5oDQoNCiAgZmkNCg0KICAjIENvZGUgZnJvbSBtb2R1bGUg ZHRvYXN0cjoNCg0KICAjIENvZGUgZnJvbSBtb2R1bGUgZHVwMjoNCg0KDQoNCg0KICBpZiB0ZXN0 ICRhY19jdl9mdW5jX2R1cDIgPSBubzsgdGhlbg0KICAgIEhBVkVfRFVQMj0wDQoNCg0KDQoNCg0K DQoNCg0KICBnbF9MSUJPQkpTPSIkZ2xfTElCT0JKUyBkdXAyLiRhY19vYmpleHQiDQoNCiAgZWxz ZQ0KICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcg d2hldGhlciBkdXAyIHdvcmtzIiA+JjUNCiRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgZHVw MiB3b3Jrcy4uLiAiID4mNjsgfQ0KaWYgJHtnbF9jdl9mdW5jX2R1cDJfd29ya3MrOn0gZmFsc2U7 IHRoZW4gOg0KICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNg0KZWxzZQ0KICBpZiB0ZXN0ICIk Y3Jvc3NfY29tcGlsaW5nIiA9IHllczsgdGhlbiA6DQogIGNhc2UgIiRob3N0X29zIiBpbg0KICAg ICAgICAgICBtaW5ndyopICMgb24gdGhpcyBwbGF0Zm9ybSwgZHVwMiBhbHdheXMgcmV0dXJucyAw IGZvciBzdWNjZXNzDQogICAgICAgICAgICAgZ2xfY3ZfZnVuY19kdXAyX3dvcmtzPW5vOzsNCiAg ICAgICAgICAgY3lnd2luKikgIyBvbiBjeWd3aW4gMS41LngsIGR1cDIoMSwxKSByZXR1cm5zIDAN CiAgICAgICAgICAgICBnbF9jdl9mdW5jX2R1cDJfd29ya3M9bm87Ow0KICAgICAgICAgICBsaW51 eCopICMgT24gbGludXggYmV0d2VlbiAyMDA4LTA3LTI3IGFuZCAyMDA5LTA1LTExLCBkdXAyIG9m IGENCiAgICAgICAgICAgICAgICAgICAjIGNsb3NlZCBmZCBtYXkgeWllbGQgLUVCQURGIGluc3Rl YWQgb2YgLTEgLyBlcnJubz1FQkFERi4NCiAgICAgICAgICAgICBnbF9jdl9mdW5jX2R1cDJfd29y a3M9bm87Ow0KICAgICAgICAgICBmcmVlYnNkKikgIyBvbiBGcmVlQlNEIDYuMSwgZHVwMigxLDEw MDAwMDApIGdpdmVzIEVNRklMRSwgbm90IEVCQURGLg0KICAgICAgICAgICAgIGdsX2N2X2Z1bmNf ZHVwMl93b3Jrcz1ubzs7DQogICAgICAgICAgIGhhaWt1KikgIyBvbiBIYWlrdSBhbHBoYSAyLCBk dXAyKDEsIDEpIHJlc2V0cyBGRF9DTE9FWEVDLg0KICAgICAgICAgICAgIGdsX2N2X2Z1bmNfZHVw Ml93b3Jrcz1ubzs7DQogICAgICAgICAgICopIGdsX2N2X2Z1bmNfZHVwMl93b3Jrcz15ZXM7Ow0K ICAgICAgICAgZXNhYw0KZWxzZQ0KICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVz dC4kYWNfZXh0DQovKiBlbmQgY29uZmRlZnMuaC4gICovDQoNCiAgICAgICAgICNpbmNsdWRlIDx1 bmlzdGQuaD4NCiNpbmNsdWRlIDxmY250bC5oPg0KI2luY2x1ZGUgPGVycm5vLmg+DQppbnQNCm1h aW4gKCkNCnsNCmludCByZXN1bHQgPSAwOw0KI2lmIEhBVkVfRkNOVEwNCiAgICAgICAgICAgIGlm IChmY250bCAoMSwgRl9TRVRGRCwgRkRfQ0xPRVhFQykgPT0gLTEpDQogICAgICAgICAgICAgIHJl c3VsdCB8PSAxOw0KI2VuZGlmIEhBVkVfRkNOVEwNCiAgICAgICAgICAgIGlmIChkdXAyICgxLCAx KSA9PSAwKQ0KICAgICAgICAgICAgICByZXN1bHQgfD0gMjsNCiNpZiBIQVZFX0ZDTlRMDQogICAg ICAgICAgICBpZiAoZmNudGwgKDEsIEZfR0VURkQpICE9IEZEX0NMT0VYRUMpDQogICAgICAgICAg ICAgIHJlc3VsdCB8PSA0Ow0KI2VuZGlmDQogICAgICAgICAgICBjbG9zZSAoMCk7DQogICAgICAg ICAgICBpZiAoZHVwMiAoMCwgMCkgIT0gLTEpDQogICAgICAgICAgICAgIHJlc3VsdCB8PSA4Ow0K ICAgICAgICAgICAgLyogTWFueSBnbnVsaWIgbW9kdWxlcyByZXF1aXJlIFBPU0lYIGNvbmZvcm1h bmNlIG9mIEVCQURGLiAgKi8NCiAgICAgICAgICAgIGlmIChkdXAyICgyLCAxMDAwMDAwKSA9PSAt MSAmJiBlcnJubyAhPSBFQkFERikNCiAgICAgICAgICAgICAgcmVzdWx0IHw9IDE2Ow0KICAgICAg ICAgICAgcmV0dXJuIHJlc3VsdDsNCg0KICA7DQogIHJldHVybiAwOw0KfQ0KDQpfQUNFT0YNCmlm IGFjX2ZuX2NfdHJ5X3J1biAiJExJTkVOTyI7IHRoZW4gOg0KICBnbF9jdl9mdW5jX2R1cDJfd29y a3M9eWVzDQplbHNlDQogIGdsX2N2X2Z1bmNfZHVwMl93b3Jrcz1ubw0KZmkNCnJtIC1mIGNvcmUg Ki5jb3JlIGNvcmUuY29uZnRlc3QuKiBnbW9uLm91dCBiYi5vdXQgY29uZnRlc3QkYWNfZXhlZXh0 IFwNCiAgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC5iZWFtIGNvbmZ0ZXN0LiRhY19leHQN CmZpDQoNCg0KZmkNCnsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVz dWx0OiAkZ2xfY3ZfZnVuY19kdXAyX3dvcmtzIiA+JjUNCiRhc19lY2hvICIkZ2xfY3ZfZnVuY19k dXAyX3dvcmtzIiA+JjY7IH0NCiAgICBpZiB0ZXN0ICIkZ2xfY3ZfZnVuY19kdXAyX3dvcmtzIiA9 IG5vOyB0aGVuDQoNCg0KICBpZiB0ZXN0ICRhY19jdl9mdW5jX2R1cDIgPSB5ZXM7IHRoZW4NCiAg ICBSRVBMQUNFX0RVUDI9MQ0KICBmaQ0KDQoNCg0KDQoNCg0KDQoNCiAgZ2xfTElCT0JKUz0iJGds X0xJQk9CSlMgZHVwMi4kYWNfb2JqZXh0Ig0KDQoNCiAgICBmaQ0KICBmaQ0KDQoNCg0KDQogIEdO VUxJQl9EVVAyPTENCg0KDQoNCiRhc19lY2hvICIjZGVmaW5lIEdOVUxJQl9URVNUX0RVUDIgMSIg Pj5jb25mZGVmcy5oDQoNCg0KDQogICMgQ29kZSBmcm9tIG1vZHVsZSBlbnZpcm9uOg0KDQoNCg0K DQogIEdOVUxJQl9FTlZJUk9OPTENCg0KDQoNCiRhc19lY2hvICIjZGVmaW5lIEdOVUxJQl9URVNU X0VOVklST04gMSIgPj5jb25mZGVmcy5oDQoNCg0KDQogICMgQ29kZSBmcm9tIG1vZHVsZSBlcnJu bzoNCg0KICAjIENvZGUgZnJvbSBtb2R1bGUgZXJyb3I6DQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0K DQoNCg0KICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5n IGZvciBlcnJvcl9hdF9saW5lIiA+JjUNCiRhc19lY2hvX24gImNoZWNraW5nIGZvciBlcnJvcl9h dF9saW5lLi4uICIgPiY2OyB9DQppZiAke2FjX2N2X2xpYl9lcnJvcl9hdF9saW5lKzp9IGZhbHNl OyB0aGVuIDoNCiAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYNCmVsc2UNCiAgY2F0IGNvbmZk ZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dA0KLyogZW5kIGNvbmZkZWZzLmguICAq Lw0KI2luY2x1ZGUgPGVycm9yLmg+DQppbnQNCm1haW4gKCkNCnsNCmVycm9yX2F0X2xpbmUgKDAs IDAsICIiLCAwLCAiYW4gZXJyb3Igb2NjdXJyZWQiKTsNCiAgOw0KICByZXR1cm4gMDsNCn0NCl9B Q0VPRg0KaWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOg0KICBhY19jdl9saWJf ZXJyb3JfYXRfbGluZT15ZXMNCmVsc2UNCiAgYWNfY3ZfbGliX2Vycm9yX2F0X2xpbmU9bm8NCmZp DQpybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwNCiAgICBjb25m dGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dA0KZmkNCnsgJGFzX2VjaG8gIiRhc19tZTok e2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfbGliX2Vycm9yX2F0X2xpbmUiID4m NQ0KJGFzX2VjaG8gIiRhY19jdl9saWJfZXJyb3JfYXRfbGluZSIgPiY2OyB9DQogIGlmIHRlc3Qg JGFjX2N2X2xpYl9lcnJvcl9hdF9saW5lID0gbm87IHRoZW4NCg0KDQoNCg0KDQoNCg0KDQogIGds X0xJQk9CSlM9IiRnbF9MSUJPQkpTIGVycm9yLiRhY19vYmpleHQiDQoNCiAgZmkNCg0KDQoNCg0K ICA6DQoNCg0KDQoNCiAgWEdFVFRFWFRfRVhUUkFfT1BUSU9OUz0iJFhHRVRURVhUX0VYVFJBX09Q VElPTlMgLS1mbGFnPWVycm9yOjM6Yy1mb3JtYXQiDQoNCg0KDQogIFhHRVRURVhUX0VYVFJBX09Q VElPTlM9IiRYR0VUVEVYVF9FWFRSQV9PUFRJT05TIC0tZmxhZz1lcnJvcl9hdF9saW5lOjU6Yy1m b3JtYXQiDQoNCiAgIyBDb2RlIGZyb20gbW9kdWxlIGV1aWRhY2Nlc3M6DQoNCg0KDQoNCg0KDQoN Cg0KDQoNCg0KDQoNCiAgZm9yIGFjX2Z1bmMgaW4gZXVpZGFjY2Vzcw0KZG8gOg0KICBhY19mbl9j X2NoZWNrX2Z1bmMgIiRMSU5FTk8iICJldWlkYWNjZXNzIiAiYWNfY3ZfZnVuY19ldWlkYWNjZXNz Ig0KaWYgdGVzdCAieCRhY19jdl9mdW5jX2V1aWRhY2Nlc3MiID0geHllczsgdGhlbiA6DQogIGNh dCA+PmNvbmZkZWZzLmggPDxfQUNFT0YNCiNkZWZpbmUgSEFWRV9FVUlEQUNDRVNTIDENCl9BQ0VP Rg0KDQplbHNlDQoNCiAgICBnbF9MSUJPQkpTPSIkZ2xfTElCT0JKUyAkYWNfZnVuYy4kYWNfb2Jq ZXh0Ig0KDQpmaQ0KZG9uZQ0KDQoNCiAgaWYgdGVzdCAkYWNfY3ZfZnVuY19ldWlkYWNjZXNzID0g bm87IHRoZW4NCiAgICBIQVZFX0VVSURBQ0NFU1M9MA0KDQoNCg0KDQoNCg0KICAjIFNvbGFyaXMg OSBuZWVkcyAtbGdlbiB0byBnZXQgdGhlIGVhY2Nlc3MgZnVuY3Rpb24uDQogICMgU2F2ZSBhbmQg cmVzdG9yZSBMSUJTIHNvIC1sZ2VuIGlzbid0IGFkZGVkIHRvIGl0LiAgT3RoZXJ3aXNlLCAqYWxs Kg0KICAjIHByb2dyYW1zIGluIHRoZSBwYWNrYWdlIHdvdWxkIGVuZCB1cCBsaW5rZWQgd2l0aCB0 aGF0IHBvdGVudGlhbGx5LXNoYXJlZA0KICAjIGxpYnJhcnksIGluZHVjaW5nIHVubmVjZXNzYXJ5 IHJ1bi10aW1lIG92ZXJoZWFkLg0KICBMSUJfRUFDQ0VTUz0NCg0KICBnbF9zYXZlZF9saWJzPSRM SUJTDQogICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2lu ZyBmb3IgbGlicmFyeSBjb250YWluaW5nIGVhY2Nlc3MiID4mNQ0KJGFzX2VjaG9fbiAiY2hlY2tp bmcgZm9yIGxpYnJhcnkgY29udGFpbmluZyBlYWNjZXNzLi4uICIgPiY2OyB9DQppZiAke2FjX2N2 X3NlYXJjaF9lYWNjZXNzKzp9IGZhbHNlOyB0aGVuIDoNCiAgJGFzX2VjaG9fbiAiKGNhY2hlZCkg IiA+JjYNCmVsc2UNCiAgYWNfZnVuY19zZWFyY2hfc2F2ZV9MSUJTPSRMSUJTDQpjYXQgY29uZmRl ZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0DQovKiBlbmQgY29uZmRlZnMuaC4gICov DQoNCi8qIE92ZXJyaWRlIGFueSBHQ0MgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVy cm9yLg0KICAgVXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBl IG9mIGEgR0NDDQogICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291 bGQgc3RpbGwgYXBwbHkuICAqLw0KI2lmZGVmIF9fY3BsdXNwbHVzDQpleHRlcm4gIkMiDQojZW5k aWYNCmNoYXIgZWFjY2VzcyAoKTsNCmludA0KbWFpbiAoKQ0Kew0KcmV0dXJuIGVhY2Nlc3MgKCk7 DQogIDsNCiAgcmV0dXJuIDA7DQp9DQpfQUNFT0YNCmZvciBhY19saWIgaW4gJycgZ2VuOyBkbw0K ICBpZiB0ZXN0IC16ICIkYWNfbGliIjsgdGhlbg0KICAgIGFjX3Jlcz0ibm9uZSByZXF1aXJlZCIN CiAgZWxzZQ0KICAgIGFjX3Jlcz0tbCRhY19saWINCiAgICBMSUJTPSItbCRhY19saWIgICRhY19m dW5jX3NlYXJjaF9zYXZlX0xJQlMiDQogIGZpDQogIGlmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5F Tk8iOyB0aGVuIDoNCiAgYWNfY3Zfc2VhcmNoX2VhY2Nlc3M9JGFjX3Jlcw0KZmkNCnJtIC1mIGNv cmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXA0KICAgIGNvbmZ0ZXN0JGFjX2V4 ZWV4dA0KICBpZiAke2FjX2N2X3NlYXJjaF9lYWNjZXNzKzp9IGZhbHNlOyB0aGVuIDoNCiAgYnJl YWsNCmZpDQpkb25lDQppZiAke2FjX2N2X3NlYXJjaF9lYWNjZXNzKzp9IGZhbHNlOyB0aGVuIDoN Cg0KZWxzZQ0KICBhY19jdl9zZWFyY2hfZWFjY2Vzcz1ubw0KZmkNCnJtIGNvbmZ0ZXN0LiRhY19l eHQNCkxJQlM9JGFjX2Z1bmNfc2VhcmNoX3NhdmVfTElCUw0KZmkNCnsgJGFzX2VjaG8gIiRhc19t ZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3Zfc2VhcmNoX2VhY2Nlc3MiID4m NQ0KJGFzX2VjaG8gIiRhY19jdl9zZWFyY2hfZWFjY2VzcyIgPiY2OyB9DQphY19yZXM9JGFjX2N2 X3NlYXJjaF9lYWNjZXNzDQppZiB0ZXN0ICIkYWNfcmVzIiAhPSBubzsgdGhlbiA6DQogIHRlc3Qg IiRhY19yZXMiID0gIm5vbmUgcmVxdWlyZWQiIHx8IExJQlM9IiRhY19yZXMgJExJQlMiDQogIHRl c3QgIiRhY19jdl9zZWFyY2hfZWFjY2VzcyIgPSAibm9uZSByZXF1aXJlZCIgfHwNCiAgICAgICAg ICAgICAgICAgICAgTElCX0VBQ0NFU1M9JGFjX2N2X3NlYXJjaF9lYWNjZXNzDQpmaQ0KDQogICAg Zm9yIGFjX2Z1bmMgaW4gZWFjY2Vzcw0KZG8gOg0KICBhY19mbl9jX2NoZWNrX2Z1bmMgIiRMSU5F Tk8iICJlYWNjZXNzIiAiYWNfY3ZfZnVuY19lYWNjZXNzIg0KaWYgdGVzdCAieCRhY19jdl9mdW5j X2VhY2Nlc3MiID0geHllczsgdGhlbiA6DQogIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YNCiNk ZWZpbmUgSEFWRV9FQUNDRVNTIDENCl9BQ0VPRg0KDQpmaQ0KZG9uZQ0KDQogIExJQlM9JGdsX3Nh dmVkX2xpYnMNCg0KICBmaQ0KDQoNCg0KDQogIEdOVUxJQl9FVUlEQUNDRVNTPTENCg0KDQoNCiRh c19lY2hvICIjZGVmaW5lIEdOVUxJQl9URVNUX0VVSURBQ0NFU1MgMSIgPj5jb25mZGVmcy5oDQoN Cg0KDQogICMgQ29kZSBmcm9tIG1vZHVsZSBleGNsdWRlOg0KDQoNCg0KDQoNCg0KDQoNCg0KICBn bF9MSUJPQkpTPSIkZ2xfTElCT0JKUyBleGNsdWRlLiRhY19vYmpleHQiDQoNCg0KICAjIENvZGUg ZnJvbSBtb2R1bGUgZXhpdGZhaWw6DQogICMgQ29kZSBmcm9tIG1vZHVsZSBleHRlbnNpb25zOg0K ICAjIENvZGUgZnJvbSBtb2R1bGUgZmFjY2Vzc2F0Og0KDQoNCg0KDQoNCg0KDQogIGlmIHRlc3Qg JGFjX2N2X2Z1bmNfZmFjY2Vzc2F0ID0gbm87IHRoZW4NCiAgICBIQVZFX0ZBQ0NFU1NBVD0wDQoN Cg0KDQoNCg0KDQoNCg0KICBnbF9MSUJPQkpTPSIkZ2xfTElCT0JKUyBmYWNjZXNzYXQuJGFjX29i amV4dCINCg0KICBmaQ0KDQoNCg0KY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRg0KI2RlZmluZSBH TlVMSUJfRkFDQ0VTU0FUIDENCl9BQ0VPRg0KDQoNCg0KDQoNCiAgR05VTElCX0ZBQ0NFU1NBVD0x DQoNCg0KDQokYXNfZWNobyAiI2RlZmluZSBHTlVMSUJfVEVTVF9GQUNDRVNTQVQgMSIgPj5jb25m ZGVmcy5oDQoNCg0KDQogICMgQ29kZSBmcm9tIG1vZHVsZSBmYWR2aXNlOg0KDQogICMgQ29kZSBm cm9tIG1vZHVsZSBmY2hkaXI6DQoNCg0KDQoNCg0KDQogIGlmIHRlc3QgJGFjX2N2X2hhdmVfZGVj bF9mY2hkaXIgPSBubzsgdGhlbg0KICAgIEhBVkVfREVDTF9GQ0hESVI9MA0KICBmaQ0KDQoNCiAg aWYgdGVzdCAkYWNfY3ZfZnVuY19mY2hkaXIgPSBubzsgdGhlbg0KICAgIEhBVkVfRkNIRElSPTAN Cg0KDQoNCg0KDQoNCg0KDQogIGdsX0xJQk9CSlM9IiRnbF9MSUJPQkpTIGZjaGRpci4kYWNfb2Jq ZXh0Ig0KDQogICAgOg0KDQokYXNfZWNobyAiI2RlZmluZSBSRVBMQUNFX0ZDSERJUiAxIiA+PmNv bmZkZWZzLmgNCg0KICAgICAgICAgICAgICAgIFJFUExBQ0VfT1BFTkRJUj0xDQogICAgUkVQTEFD RV9DTE9TRURJUj0xDQogICAgUkVQTEFDRV9EVVA9MQ0KDQoNCiAgUkVQTEFDRV9PUEVOPTENCg0K DQoNCg0KDQoNCg0KDQogIGdsX0xJQk9CSlM9IiRnbF9MSUJPQkpTIG9wZW4uJGFjX29iamV4dCIN Cg0KDQoNCg0KICA6DQoNCg0KDQoNCiAgUkVQTEFDRV9DTE9TRT0xDQoNCg0KDQoNCg0KDQoNCg0K ICBnbF9MSUJPQkpTPSIkZ2xfTElCT0JKUyBjbG9zZS4kYWNfb2JqZXh0Ig0KDQoNCg0KICBSRVBM QUNFX0ZDTE9TRT0xDQoNCg0KDQoNCg0KDQoNCg0KICBnbF9MSUJPQkpTPSIkZ2xfTElCT0JKUyBm Y2xvc2UuJGFjX29iamV4dCINCg0KDQoNCg0KDQogIGlmIHRlc3QgJGFjX2N2X2Z1bmNfZHVwMiA9 IHllczsgdGhlbg0KICAgIFJFUExBQ0VfRFVQMj0xDQogIGZpDQoNCg0KDQoNCg0KDQoNCg0KICBn bF9MSUJPQkpTPSIkZ2xfTElCT0JKUyBkdXAyLiRhY19vYmpleHQiDQoNCg0KDQoNCg0KICBpZiB0 ZXN0ICRhY19jdl9mdW5jX2ZjbnRsID0gbm87IHRoZW4NCiAgICBIQVZFX0ZDTlRMPTANCiAgZWxz ZQ0KICAgIFJFUExBQ0VfRkNOVEw9MQ0KICBmaQ0KDQoNCg0KDQoNCg0KDQoNCiAgZ2xfTElCT0JK Uz0iJGdsX0xJQk9CSlMgZmNudGwuJGFjX29iamV4dCINCg0KDQoNCiAgICA6DQoNCiAgICB7ICRh c19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgb3Bl biBjYW4gdmlzaXQgZGlyZWN0b3JpZXMiID4mNQ0KJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhl ciBvcGVuIGNhbiB2aXNpdCBkaXJlY3Rvcmllcy4uLiAiID4mNjsgfQ0KaWYgJHtnbF9jdl9mdW5j X29wZW5fZGlyZWN0b3J5X3dvcmtzKzp9IGZhbHNlOyB0aGVuIDoNCiAgJGFzX2VjaG9fbiAiKGNh Y2hlZCkgIiA+JjYNCmVsc2UNCiAgaWYgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgPSB5ZXM7IHRo ZW4gOg0KICBnbF9jdl9mdW5jX29wZW5fZGlyZWN0b3J5X3dvcmtzPSJndWVzc2luZyBubyINCmVs c2UNCiAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dA0KLyogZW5k IGNvbmZkZWZzLmguICAqLw0KI2luY2x1ZGUgPGZjbnRsLmg+DQoNCmludA0KbWFpbiAoKQ0Kew0K cmV0dXJuIG9wZW4oIi4iLCBPX1JET05MWSkgPCAwOw0KICA7DQogIHJldHVybiAwOw0KfQ0KX0FD RU9GDQppZiBhY19mbl9jX3RyeV9ydW4gIiRMSU5FTk8iOyB0aGVuIDoNCiAgZ2xfY3ZfZnVuY19v cGVuX2RpcmVjdG9yeV93b3Jrcz15ZXMNCmVsc2UNCiAgZ2xfY3ZfZnVuY19vcGVuX2RpcmVjdG9y eV93b3Jrcz1ubw0KZmkNCnJtIC1mIGNvcmUgKi5jb3JlIGNvcmUuY29uZnRlc3QuKiBnbW9uLm91 dCBiYi5vdXQgY29uZnRlc3QkYWNfZXhlZXh0IFwNCiAgY29uZnRlc3QuJGFjX29iamV4dCBjb25m dGVzdC5iZWFtIGNvbmZ0ZXN0LiRhY19leHQNCmZpDQoNCmZpDQp7ICRhc19lY2hvICIkYXNfbWU6 JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGdsX2N2X2Z1bmNfb3Blbl9kaXJlY3Rvcnlf d29ya3MiID4mNQ0KJGFzX2VjaG8gIiRnbF9jdl9mdW5jX29wZW5fZGlyZWN0b3J5X3dvcmtzIiA+ JjY7IH0NCiAgICBpZiB0ZXN0ICIkZ2xfY3ZfZnVuY19vcGVuX2RpcmVjdG9yeV93b3JrcyIgIT0g eWVzOyB0aGVuDQoNCiRhc19lY2hvICIjZGVmaW5lIFJFUExBQ0VfT1BFTl9ESVJFQ1RPUlkgMSIg Pj5jb25mZGVmcy5oDQoNCiAgICAgIFJFUExBQ0VfRlNUQVQ9MQ0KICAgIGZpDQogIGZpDQoNCg0K DQoNCiAgR05VTElCX0ZDSERJUj0xDQoNCg0KDQokYXNfZWNobyAiI2RlZmluZSBHTlVMSUJfVEVT VF9GQ0hESVIgMSIgPj5jb25mZGVmcy5oDQoNCg0KDQogICMgQ29kZSBmcm9tIG1vZHVsZSBmY2xv c2U6DQoNCg0KDQoNCg0KICBHTlVMSUJfRkNMT1NFPTENCg0KDQoNCiRhc19lY2hvICIjZGVmaW5l IEdOVUxJQl9URVNUX0ZDTE9TRSAxIiA+PmNvbmZkZWZzLmgNCg0KDQoNCiAgIyBDb2RlIGZyb20g bW9kdWxlIGZjbnRsOg0KDQoNCg0KDQoNCiAgaWYgdGVzdCAkYWNfY3ZfZnVuY19mY250bCA9IG5v OyB0aGVuDQoNCg0KDQogIGlmIHRlc3QgJGFjX2N2X2Z1bmNfZmNudGwgPSBubzsgdGhlbg0KICAg IEhBVkVfRkNOVEw9MA0KICBlbHNlDQogICAgUkVQTEFDRV9GQ05UTD0xDQogIGZpDQoNCg0KDQoN Cg0KDQoNCg0KICBnbF9MSUJPQkpTPSIkZ2xfTElCT0JKUyBmY250bC4kYWNfb2JqZXh0Ig0KDQoN CiAgZWxzZQ0KICAgICAgICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5F Tk99OiBjaGVja2luZyB3aGV0aGVyIGZjbnRsIGhhbmRsZXMgRl9EVVBGRCBjb3JyZWN0bHkiID4m NQ0KJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciBmY250bCBoYW5kbGVzIEZfRFVQRkQgY29y cmVjdGx5Li4uICIgPiY2OyB9DQppZiAke2dsX2N2X2Z1bmNfZmNudGxfZl9kdXBmZF93b3Jrcys6 fSBmYWxzZTsgdGhlbiA6DQogICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2DQplbHNlDQogIGlm IHRlc3QgIiRjcm9zc19jb21waWxpbmciID0geWVzOyB0aGVuIDoNCiAgIyBHdWVzcyB0aGF0IGl0 IHdvcmtzIG9uIGdsaWJjIHN5c3RlbXMNCiAgICAgICAgICBjYXNlICRob3N0X29zIGluICMoKA0K ICAgICAgICAgICAgKi1nbnUqKSBnbF9jdl9mdW5jX2ZjbnRsX2ZfZHVwZmRfd29ya3M9Imd1ZXNz aW5nIHllcyI7Ow0KICAgICAgICAgICAgKikgICAgICBnbF9jdl9mdW5jX2ZjbnRsX2ZfZHVwZmRf d29ya3M9Imd1ZXNzaW5nIG5vIjs7DQogICAgICAgICAgZXNhYw0KZWxzZQ0KICBjYXQgY29uZmRl ZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0DQovKiBlbmQgY29uZmRlZnMuaC4gICov DQoNCiNpbmNsdWRlIDxmY250bC5oPg0KI2luY2x1ZGUgPGVycm5vLmg+DQoNCmludA0KbWFpbiAo KQ0Kew0KaW50IHJlc3VsdCA9IDA7DQogICAgICBpZiAoZmNudGwgKDAsIEZfRFVQRkQsIC0xKSAh PSAtMSkgcmVzdWx0IHw9IDE7DQogICAgICBpZiAoZXJybm8gIT0gRUlOVkFMKSByZXN1bHQgfD0g MjsNCiAgICAgIHJldHVybiByZXN1bHQ7DQoNCiAgOw0KICByZXR1cm4gMDsNCn0NCl9BQ0VPRg0K aWYgYWNfZm5fY190cnlfcnVuICIkTElORU5PIjsgdGhlbiA6DQogIGdsX2N2X2Z1bmNfZmNudGxf Zl9kdXBmZF93b3Jrcz15ZXMNCmVsc2UNCiAgZ2xfY3ZfZnVuY19mY250bF9mX2R1cGZkX3dvcmtz PW5vDQpmaQ0Kcm0gLWYgY29yZSAqLmNvcmUgY29yZS5jb25mdGVzdC4qIGdtb24ub3V0IGJiLm91 dCBjb25mdGVzdCRhY19leGVleHQgXA0KICBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LmJl YW0gY29uZnRlc3QuJGFjX2V4dA0KZmkNCg0KZmkNCnsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xp bmVuby0kTElORU5PfTogcmVzdWx0OiAkZ2xfY3ZfZnVuY19mY250bF9mX2R1cGZkX3dvcmtzIiA+ JjUNCiRhc19lY2hvICIkZ2xfY3ZfZnVuY19mY250bF9mX2R1cGZkX3dvcmtzIiA+JjY7IH0NCiAg ICBjYXNlICRnbF9jdl9mdW5jX2ZjbnRsX2ZfZHVwZmRfd29ya3MgaW4NCiAgICAgICp5ZXMpIDs7 DQogICAgICAqKQ0KDQoNCiAgaWYgdGVzdCAkYWNfY3ZfZnVuY19mY250bCA9IG5vOyB0aGVuDQog ICAgSEFWRV9GQ05UTD0wDQogIGVsc2UNCiAgICBSRVBMQUNFX0ZDTlRMPTENCiAgZmkNCg0KDQoN Cg0KDQoNCg0KDQogIGdsX0xJQk9CSlM9IiRnbF9MSUJPQkpTIGZjbnRsLiRhY19vYmpleHQiDQoN Cg0KDQokYXNfZWNobyAiI2RlZmluZSBGQ05UTF9EVVBGRF9CVUdHWSAxIiA+PmNvbmZkZWZzLmgN CiA7Ow0KICAgIGVzYWMNCg0KICAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8t JExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgZmNudGwgdW5kZXJzdGFuZHMgRl9EVVBGRF9DTE9F WEVDIiA+JjUNCiRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgZmNudGwgdW5kZXJzdGFuZHMg Rl9EVVBGRF9DTE9FWEVDLi4uICIgPiY2OyB9DQppZiAke2dsX2N2X2Z1bmNfZmNudGxfZl9kdXBm ZF9jbG9leGVjKzp9IGZhbHNlOyB0aGVuIDoNCiAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYN CmVsc2UNCiAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dA0KLyog ZW5kIGNvbmZkZWZzLmguICAqLw0KDQojaW5jbHVkZSA8ZmNudGwuaD4NCiNpZm5kZWYgRl9EVVBG RF9DTE9FWEVDDQpjaG9rZSBtZQ0KI2VuZGlmDQoNCmludA0KbWFpbiAoKQ0Kew0KDQogIDsNCiAg cmV0dXJuIDA7DQp9DQpfQUNFT0YNCmlmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0 aGVuIDoNCiAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dA0KLyog ZW5kIGNvbmZkZWZzLmguICAqLw0KDQojaWZkZWYgX19saW51eF9fDQovKiBUaGUgTGludXgga2Vy bmVsIG9ubHkgYWRkZWQgRl9EVVBGRF9DTE9FWEVDIGluIDIuNi4yNCwgc28gd2UgYWx3YXlzIHJl cGxhY2UNCiAgIGl0IHRvIHN1cHBvcnQgdGhlIHNlbWFudGljcyBvbiBvbGRlciBrZXJuZWxzIHRo YXQgZmFpbGVkIHdpdGggRUlOVkFMLiAgKi8NCmNob2tlIG1lDQojZW5kaWYNCg0KaW50DQptYWlu ICgpDQp7DQoNCiAgOw0KICByZXR1cm4gMDsNCn0NCl9BQ0VPRg0KaWYgYWNfZm5fY190cnlfY29t cGlsZSAiJExJTkVOTyI7IHRoZW4gOg0KICBnbF9jdl9mdW5jX2ZjbnRsX2ZfZHVwZmRfY2xvZXhl Yz15ZXMNCmVsc2UNCiAgZ2xfY3ZfZnVuY19mY250bF9mX2R1cGZkX2Nsb2V4ZWM9Im5lZWRzIHJ1 bnRpbWUgY2hlY2siDQpmaQ0Kcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29i amV4dCBjb25mdGVzdC4kYWNfZXh0DQplbHNlDQogIGdsX2N2X2Z1bmNfZmNudGxfZl9kdXBmZF9j bG9leGVjPW5vDQpmaQ0Kcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4 dCBjb25mdGVzdC4kYWNfZXh0DQpmaQ0KeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRM SU5FTk99OiByZXN1bHQ6ICRnbF9jdl9mdW5jX2ZjbnRsX2ZfZHVwZmRfY2xvZXhlYyIgPiY1DQok YXNfZWNobyAiJGdsX2N2X2Z1bmNfZmNudGxfZl9kdXBmZF9jbG9leGVjIiA+JjY7IH0NCiAgICBp ZiB0ZXN0ICIkZ2xfY3ZfZnVuY19mY250bF9mX2R1cGZkX2Nsb2V4ZWMiICE9IHllczsgdGhlbg0K DQoNCg0KICBpZiB0ZXN0ICRhY19jdl9mdW5jX2ZjbnRsID0gbm87IHRoZW4NCiAgICBIQVZFX0ZD TlRMPTANCiAgZWxzZQ0KICAgIFJFUExBQ0VfRkNOVEw9MQ0KICBmaQ0KDQoNCg0KDQoNCg0KDQoN CiAgZ2xfTElCT0JKUz0iJGdsX0xJQk9CSlMgZmNudGwuJGFjX29iamV4dCINCg0KDQogICAgICAg ICAgZmkNCiAgZmkNCg0KDQoNCg0KICBHTlVMSUJfRkNOVEw9MQ0KDQoNCg0KJGFzX2VjaG8gIiNk ZWZpbmUgR05VTElCX1RFU1RfRkNOVEwgMSIgPj5jb25mZGVmcy5oDQoNCg0KDQogICMgQ29kZSBm cm9tIG1vZHVsZSBmY250bC1oOg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCiAgICAgaWYgdGVzdCAk Z2xfY3ZfaGF2ZV9pbmNsdWRlX25leHQgPSB5ZXM7IHRoZW4NCiAgICAgICBnbF9jdl9uZXh0X2Zj bnRsX2g9JzwnZmNudGwuaCc+Jw0KICAgICBlbHNlDQogICAgICAgeyAkYXNfZWNobyAiJGFzX21l OiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBhYnNvbHV0ZSBuYW1lIG9mIDxmY250bC5o PiIgPiY1DQokYXNfZWNob19uICJjaGVja2luZyBhYnNvbHV0ZSBuYW1lIG9mIDxmY250bC5oPi4u LiAiID4mNjsgfQ0KaWYgJHtnbF9jdl9uZXh0X2ZjbnRsX2grOn0gZmFsc2U7IHRoZW4gOg0KICAk YXNfZWNob19uICIoY2FjaGVkKSAiID4mNg0KZWxzZQ0KDQogICAgICAgICAgICAgICBjYXQgY29u ZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0DQovKiBlbmQgY29uZmRlZnMuaC4g ICovDQojaW5jbHVkZSA8ZmNudGwuaD4NCg0KX0FDRU9GDQogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICIkaG9zdF9vcyIg aW4NCiAgICAgICAgICAgICAgICAgYWl4KikgZ2xfYWJzbmFtZV9jcHA9IiRhY19jcHAgLUMiIDs7 DQogICAgICAgICAgICAgICAgICopICAgIGdsX2Fic25hbWVfY3BwPSIkYWNfY3BwIiA7Ow0KICAg ICAgICAgICAgICAgZXNhYw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgZ2xfY3ZfbmV4dF9mY250bF9oPSciJ2AoZXZhbCAiJGdsX2Fi c25hbWVfY3BwIGNvbmZ0ZXN0LiRhY19leHQiKSAyPiY1IHwNCiAgICAgICAgICAgICAgICAgIHNl ZCAtbiAnXCMvZmNudGwuaCN7DQogICAgICAgICAgICAgICAgICAgIHMjLioiXCguKi9mY250bC5o XCkiLiojXDEjDQogICAgICAgICAgICAgICAgICAgIHMjXi9bXi9dIy8vJiMNCiAgICAgICAgICAg ICAgICAgICAgcA0KICAgICAgICAgICAgICAgICAgICBxDQogICAgICAgICAgICAgICAgICB9J2An IicNCg0KDQpmaQ0KeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1 bHQ6ICRnbF9jdl9uZXh0X2ZjbnRsX2giID4mNQ0KJGFzX2VjaG8gIiRnbF9jdl9uZXh0X2ZjbnRs X2giID4mNjsgfQ0KICAgICBmaQ0KICAgICBORVhUX0ZDTlRMX0g9JGdsX2N2X25leHRfZmNudGxf aA0KDQogICAgIGlmIHRlc3QgJGdsX2N2X2hhdmVfaW5jbHVkZV9uZXh0ID0geWVzIHx8IHRlc3Qg JGdsX2N2X2hhdmVfaW5jbHVkZV9uZXh0ID0gYnVnZ3k7IHRoZW4NCiAgICAgICAjIElOQ0xVREVf TkVYVF9BU19GSVJTVF9ESVJFQ1RJVkU9J2luY2x1ZGVfbmV4dCcNCiAgICAgICBnbF9uZXh0X2Fz X2ZpcnN0X2RpcmVjdGl2ZT0nPCdmY250bC5oJz4nDQogICAgIGVsc2UNCiAgICAgICAjIElOQ0xV REVfTkVYVF9BU19GSVJTVF9ESVJFQ1RJVkU9J2luY2x1ZGUnDQogICAgICAgZ2xfbmV4dF9hc19m aXJzdF9kaXJlY3RpdmU9JGdsX2N2X25leHRfZmNudGxfaA0KICAgICBmaQ0KICAgICBORVhUX0FT X0ZJUlNUX0RJUkVDVElWRV9GQ05UTF9IPSRnbF9uZXh0X2FzX2ZpcnN0X2RpcmVjdGl2ZQ0KDQoN Cg0KDQoNCg0KICAgIGZvciBnbF9mdW5jIGluIGZjbnRsIG9wZW5hdDsgZG8NCiAgICBhc19nbF9T eW1ib2w9YCRhc19lY2hvICJnbF9jdl9oYXZlX3Jhd19kZWNsXyRnbF9mdW5jIiB8ICRhc190cl9z aGANCiAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5n IHdoZXRoZXIgJGdsX2Z1bmMgaXMgZGVjbGFyZWQgd2l0aG91dCBhIG1hY3JvIiA+JjUNCiRhc19l Y2hvX24gImNoZWNraW5nIHdoZXRoZXIgJGdsX2Z1bmMgaXMgZGVjbGFyZWQgd2l0aG91dCBhIG1h Y3JvLi4uICIgPiY2OyB9DQppZiBldmFsIFwkeyRhc19nbF9TeW1ib2wrOn0gZmFsc2U7IHRoZW4g Og0KICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNg0KZWxzZQ0KICBjYXQgY29uZmRlZnMuaCAt IDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0DQovKiBlbmQgY29uZmRlZnMuaC4gICovDQojaW5j bHVkZSA8ZmNudGwuaD4NCg0KaW50DQptYWluICgpDQp7DQojdW5kZWYgJGdsX2Z1bmMNCiAgKHZv aWQpICRnbF9mdW5jOw0KICA7DQogIHJldHVybiAwOw0KfQ0KX0FDRU9GDQppZiBhY19mbl9jX3Ry eV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6DQogIGV2YWwgIiRhc19nbF9TeW1ib2w9eWVzIg0K ZWxzZQ0KICBldmFsICIkYXNfZ2xfU3ltYm9sPW5vIg0KZmkNCnJtIC1mIGNvcmUgY29uZnRlc3Qu ZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dA0KZmkNCmV2YWwgYWNfcmVz PVwkJGFzX2dsX1N5bWJvbA0KCSAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8t JExJTkVOT306IHJlc3VsdDogJGFjX3JlcyIgPiY1DQokYXNfZWNobyAiJGFjX3JlcyIgPiY2OyB9 DQogICAgIGlmIGV2YWwgdGVzdCBcInhcJCIkYXNfZ2xfU3ltYm9sIlwiID0geCJ5ZXMiOyB0aGVu IDoNCiAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRg0KI2RlZmluZSBgJGFzX2VjaG8gIkhBVkVf UkFXX0RFQ0xfJGdsX2Z1bmMiIHwgJGFzX3RyX2NwcGAgMQ0KX0FDRU9GDQoNCiAgICAgICAgICAg ICAgICAgICAgIGV2YWwgYWNfY3ZfaGF2ZV9kZWNsXyRnbF9mdW5jPXllcw0KZmkNCiAgICAgIGRv bmUNCg0KDQogICMgQ29kZSBmcm9tIG1vZHVsZSBmY250bC1zYWZlcjoNCg0KDQoNCg0KDQoNCg0K DQoNCiAgZ2xfTElCT0JKUz0iJGdsX0xJQk9CSlMgb3Blbi1zYWZlci4kYWNfb2JqZXh0Ig0KDQoN Cg0KDQoNCg0KDQoNCg0KICBnbF9MSUJPQkpTPSIkZ2xfTElCT0JKUyBjcmVhdC1zYWZlci4kYWNf b2JqZXh0Ig0KDQogICMgUHJlcmVxdWlzaXRlcyBvZiBsaWIvb3Blbi1zYWZlci5jLg0KDQoNCg0K DQpjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GDQojZGVmaW5lIEdOVUxJQl9GQ05UTF9TQUZFUiAx DQpfQUNFT0YNCg0KDQogICMgQ29kZSBmcm9tIG1vZHVsZSBmZC1zYWZlci1mbGFnOg0KDQoNCmNh dCA+PmNvbmZkZWZzLmggPDxfQUNFT0YNCiNkZWZpbmUgR05VTElCX0ZEX1NBRkVSX0ZMQUcgMQ0K X0FDRU9GDQoNCg0KICAjIENvZGUgZnJvbSBtb2R1bGUgZmRsOg0KICAjIENvZGUgZnJvbSBtb2R1 bGUgZmRvcGVuZGlyOg0KDQoNCiAgICBhY19mbl9jX2NoZWNrX2RlY2wgIiRMSU5FTk8iICJmZG9w ZW5kaXIiICJhY19jdl9oYXZlX2RlY2xfZmRvcGVuZGlyIiAiDQojaW5jbHVkZSA8ZGlyZW50Lmg+ DQoNCiINCmlmIHRlc3QgIngkYWNfY3ZfaGF2ZV9kZWNsX2Zkb3BlbmRpciIgPSB4eWVzOyB0aGVu IDoNCiAgYWNfaGF2ZV9kZWNsPTENCmVsc2UNCiAgYWNfaGF2ZV9kZWNsPTANCmZpDQoNCmNhdCA+ PmNvbmZkZWZzLmggPDxfQUNFT0YNCiNkZWZpbmUgSEFWRV9ERUNMX0ZET1BFTkRJUiAkYWNfaGF2 ZV9kZWNsDQpfQUNFT0YNCmlmIHRlc3QgJGFjX2hhdmVfZGVjbCA9IDE7IHRoZW4gOg0KDQplbHNl DQogIEhBVkVfREVDTF9GRE9QRU5ESVI9MA0KZmkNCg0KDQogIGlmIHRlc3QgJGFjX2N2X2Z1bmNf ZmRvcGVuZGlyID0gbm87IHRoZW4NCg0KDQoNCg0KDQoNCg0KDQogIGdsX0xJQk9CSlM9IiRnbF9M SUJPQkpTIG9wZW5hdC1wcm9jLiRhY19vYmpleHQiDQoNCg0KDQoNCg0KDQoNCg0KDQogIGdsX0xJ Qk9CSlM9IiRnbF9MSUJPQkpTIGZkb3BlbmRpci4kYWNfb2JqZXh0Ig0KDQoNCiAgICA6DQoNCiAg ICBIQVZFX0ZET1BFTkRJUj0wDQogIGVsc2UNCiAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19s aW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgZmRvcGVuZGlyIHdvcmtzIiA+JjUNCiRh c19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgZmRvcGVuZGlyIHdvcmtzLi4uICIgPiY2OyB9DQpp ZiAke2dsX2N2X2Z1bmNfZmRvcGVuZGlyX3dvcmtzKzp9IGZhbHNlOyB0aGVuIDoNCiAgJGFzX2Vj aG9fbiAiKGNhY2hlZCkgIiA+JjYNCmVsc2UNCiAgaWYgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIg PSB5ZXM7IHRoZW4gOg0KICBnbF9jdl9mdW5jX2Zkb3BlbmRpcl93b3Jrcz0iZ3Vlc3Npbmcgbm8i DQplbHNlDQogIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQNCi8q IGVuZCBjb25mZGVmcy5oLiAgKi8NCg0KI2luY2x1ZGUgPGRpcmVudC5oPg0KI2luY2x1ZGUgPGZj bnRsLmg+DQojaW5jbHVkZSA8dW5pc3RkLmg+DQojaWYgIUhBVkVfREVDTF9GRE9QRU5ESVINCmV4 dGVybiBESVIgKmZkb3BlbmRpciAoaW50KTsNCiNlbmRpZg0KDQppbnQNCm1haW4gKCkNCnsNCmlu dCByZXN1bHQgPSAwOw0KICAgICBpbnQgZmQgPSBvcGVuICgiY29uZnRlc3QuYyIsIE9fUkRPTkxZ KTsNCiAgICAgaWYgKGZkIDwgMCkgcmVzdWx0IHw9IDE7DQogICAgIGlmIChmZG9wZW5kaXIgKGZk KSkgcmVzdWx0IHw9IDI7DQogICAgIGlmIChjbG9zZSAoZmQpKSByZXN1bHQgfD0gNDsNCiAgICAg cmV0dXJuIHJlc3VsdDsNCiAgOw0KICByZXR1cm4gMDsNCn0NCl9BQ0VPRg0KaWYgYWNfZm5fY190 cnlfcnVuICIkTElORU5PIjsgdGhlbiA6DQogIGdsX2N2X2Z1bmNfZmRvcGVuZGlyX3dvcmtzPXll cw0KZWxzZQ0KICBnbF9jdl9mdW5jX2Zkb3BlbmRpcl93b3Jrcz1ubw0KZmkNCnJtIC1mIGNvcmUg Ki5jb3JlIGNvcmUuY29uZnRlc3QuKiBnbW9uLm91dCBiYi5vdXQgY29uZnRlc3QkYWNfZXhlZXh0 IFwNCiAgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC5iZWFtIGNvbmZ0ZXN0LiRhY19leHQN CmZpDQoNCmZpDQp7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3Vs dDogJGdsX2N2X2Z1bmNfZmRvcGVuZGlyX3dvcmtzIiA+JjUNCiRhc19lY2hvICIkZ2xfY3ZfZnVu Y19mZG9wZW5kaXJfd29ya3MiID4mNjsgfQ0KICAgIGlmIHRlc3QgIiRnbF9jdl9mdW5jX2Zkb3Bl bmRpcl93b3JrcyIgIT0geWVzOyB0aGVuDQogICAgICBSRVBMQUNFX0ZET1BFTkRJUj0xDQoNCiAg ICA6DQoNCg0KDQoNCg0KDQoNCg0KDQogIGdsX0xJQk9CSlM9IiRnbF9MSUJPQkpTIGZkb3BlbmRp ci4kYWNfb2JqZXh0Ig0KDQogICAgZmkNCiAgZmkNCg0KDQoNCg0KICBHTlVMSUJfRkRPUEVORElS PTENCg0KDQoNCiRhc19lY2hvICIjZGVmaW5lIEdOVUxJQl9URVNUX0ZET1BFTkRJUiAxIiA+PmNv bmZkZWZzLmgNCg0KDQoNCg0KDQpjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GDQojZGVmaW5lIEdO VUxJQl9GRE9QRU5ESVIgMQ0KX0FDRU9GDQoNCg0KICAjIENvZGUgZnJvbSBtb2R1bGUgZmR1dGlt ZW5zYXQ6DQoNCg0KY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRg0KI2RlZmluZSBHTlVMSUJfRkRV VElNRU5TQVQgMQ0KX0FDRU9GDQoNCg0KICAjIENvZGUgZnJvbSBtb2R1bGUgZmZsdXNoOg0KDQog IHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhl ciBmZmx1c2ggd29ya3Mgb24gaW5wdXQgc3RyZWFtcyIgPiY1DQokYXNfZWNob19uICJjaGVja2lu ZyB3aGV0aGVyIGZmbHVzaCB3b3JrcyBvbiBpbnB1dCBzdHJlYW1zLi4uICIgPiY2OyB9DQppZiAk e2dsX2N2X2Z1bmNfZmZsdXNoX3N0ZGluKzp9IGZhbHNlOyB0aGVuIDoNCiAgJGFzX2VjaG9fbiAi KGNhY2hlZCkgIiA+JjYNCmVsc2UNCiAgZWNobyBoZWxsbyB3b3JsZCA+IGNvbmZ0ZXN0LnR4dA0K ICAgICBpZiB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IHllczsgdGhlbiA6DQogICAgICAgIGds X2N2X2Z1bmNfZmZsdXNoX3N0ZGluPW5vDQplbHNlDQogIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNF T0YgPmNvbmZ0ZXN0LiRhY19leHQNCi8qIGVuZCBjb25mZGVmcy5oLiAgKi8NCg0KI2luY2x1ZGUg PHN0ZGlvLmg+DQojaW5jbHVkZSA8dW5pc3RkLmg+DQoNCmludA0KbWFpbiAoKQ0Kew0KRklMRSAq ZiA9IGZvcGVuICgiY29uZnRlc3QudHh0IiwgInIiKTsNCiAgICAgICAgIGNoYXIgYnVmZmVyWzEw XTsNCiAgICAgICAgIGludCBmZDsNCiAgICAgICAgIGludCBjOw0KICAgICAgICAgaWYgKGYgPT0g TlVMTCkNCiAgICAgICAgICAgcmV0dXJuIDE7DQogICAgICAgICBmZCA9IGZpbGVubyAoZik7DQog ICAgICAgICBpZiAoZmQgPCAwIHx8IGZyZWFkIChidWZmZXIsIDEsIDUsIGYpICE9IDUpDQogICAg ICAgICAgIHJldHVybiAyOw0KICAgICAgICAgLyogRm9yIGRldGVybWluaXN0aWMgcmVzdWx0cywg ZW5zdXJlIGYgcmVhZCBhIGJpZ2dlciBidWZmZXIuICAqLw0KICAgICAgICAgaWYgKGxzZWVrIChm ZCwgMCwgU0VFS19DVVIpID09IDUpDQogICAgICAgICAgIHJldHVybiAzOw0KICAgICAgICAgLyog UE9TSVggcmVxdWlyZXMgZmZsdXNoLWZzZWVrIHRvIHNldCBmaWxlIG9mZnNldCBvZiBmZC4gIFRo aXMgZmFpbHMNCiAgICAgICAgICAgIG9uIEJTRCBzeXN0ZW1zIGFuZCBvbiBtaW5ndy4gICovDQog ICAgICAgICBpZiAoZmZsdXNoIChmKSAhPSAwIHx8IGZzZWVrIChmLCAwLCBTRUVLX0NVUikgIT0g MCkNCiAgICAgICAgICAgcmV0dXJuIDQ7DQogICAgICAgICBpZiAobHNlZWsgKGZkLCAwLCBTRUVL X0NVUikgIT0gNSkNCiAgICAgICAgICAgcmV0dXJuIDU7DQogICAgICAgICAvKiBWZXJpZnkgYmVo YXZpb3VyIG9mIGZmbHVzaCBhZnRlciB1bmdldGMuIFNlZQ0KICAgICAgICAgICAgPGh0dHA6Ly93 d3cub3Blbmdyb3VwLm9yZy9hdXN0aW4vYWFyZHZhcmsvbGF0ZXN0L3hzaGJ1ZzMudHh0PiAgKi8N CiAgICAgICAgIC8qIFZlcmlmeSBiZWhhdmlvdXIgb2YgZmZsdXNoIGFmdGVyIGEgYmFja3VwIHVu Z2V0Yy4gIFRoaXMgZmFpbHMgb24NCiAgICAgICAgICAgIG1pbmd3LiAgKi8NCiAgICAgICAgIGMg PSBmZ2V0YyAoZik7DQogICAgICAgICB1bmdldGMgKGMsIGYpOw0KICAgICAgICAgZmZsdXNoIChm KTsNCiAgICAgICAgIGlmIChmZ2V0YyAoZikgIT0gYykNCiAgICAgICAgICAgcmV0dXJuIDY7DQog ICAgICAgICAvKiBWZXJpZnkgYmVoYXZpb3VyIG9mIGZmbHVzaCBhZnRlciBhIG5vbi1iYWNrdXAg dW5nZXRjLiAgVGhpcyBmYWlscw0KICAgICAgICAgICAgb24gZ2xpYmMgMi44IGFuZCBvbiBCU0Qg c3lzdGVtcy4gICovDQogICAgICAgICBjID0gZmdldGMgKGYpOw0KICAgICAgICAgdW5nZXRjICgn QCcsIGYpOw0KICAgICAgICAgZmZsdXNoIChmKTsNCiAgICAgICAgIGlmIChmZ2V0YyAoZikgIT0g YykNCiAgICAgICAgICAgcmV0dXJuIDc7DQogICAgICAgICByZXR1cm4gMDsNCg0KICA7DQogIHJl dHVybiAwOw0KfQ0KX0FDRU9GDQppZiBhY19mbl9jX3RyeV9ydW4gIiRMSU5FTk8iOyB0aGVuIDoN CiAgZ2xfY3ZfZnVuY19mZmx1c2hfc3RkaW49eWVzDQplbHNlDQogIGdsX2N2X2Z1bmNfZmZsdXNo X3N0ZGluPW5vDQpmaQ0Kcm0gLWYgY29yZSAqLmNvcmUgY29yZS5jb25mdGVzdC4qIGdtb24ub3V0 IGJiLm91dCBjb25mdGVzdCRhY19leGVleHQgXA0KICBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0 ZXN0LmJlYW0gY29uZnRlc3QuJGFjX2V4dA0KZmkNCg0KICAgICBybSBjb25mdGVzdC50eHQNCg0K ZmkNCnsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkZ2xf Y3ZfZnVuY19mZmx1c2hfc3RkaW4iID4mNQ0KJGFzX2VjaG8gIiRnbF9jdl9mdW5jX2ZmbHVzaF9z dGRpbiIgPiY2OyB9DQogIGlmIHRlc3QgJGdsX2N2X2Z1bmNfZmZsdXNoX3N0ZGluID0gbm87IHRo ZW4NCg0KDQoNCg0KDQoNCg0KDQoNCiAgZ2xfTElCT0JKUz0iJGdsX0xJQk9CSlMgZmZsdXNoLiRh Y19vYmpleHQiDQoNCg0KICBSRVBMQUNFX0ZGTFVTSD0xDQoNCg0KICA6DQoNCg0KDQoNCiAgaWYg dGVzdCAkZ2xfY3ZfZnVuY19mc2Vla28gPSB5ZXM7IHRoZW4NCiAgICBSRVBMQUNFX0ZTRUVLTz0x DQogIGZpDQoNCg0KDQoNCg0KDQoNCg0KICBnbF9MSUJPQkpTPSIkZ2xfTElCT0JKUyBmc2Vla28u JGFjX29iamV4dCINCg0KDQoNCg0KICBmaQ0KDQoNCg0KDQogIEdOVUxJQl9GRkxVU0g9MQ0KDQoN Cg0KJGFzX2VjaG8gIiNkZWZpbmUgR05VTElCX1RFU1RfRkZMVVNIIDEiID4+Y29uZmRlZnMuaA0K DQoNCg0KICAjIENvZGUgZnJvbSBtb2R1bGUgZmlsZS1zZXQ6DQogICMgQ29kZSBmcm9tIG1vZHVs ZSBmaWxlLXR5cGU6DQoNCg0KDQoNCg0KDQoNCg0KDQogIGdsX0xJQk9CSlM9IiRnbF9MSUJPQkpT IGZpbGUtdHlwZS4kYWNfb2JqZXh0Ig0KDQoNCiAgIyBDb2RlIGZyb20gbW9kdWxlIGZpbGVibG9j a3M6DQoNCiAgYWNfZm5fY19jaGVja19tZW1iZXIgIiRMSU5FTk8iICJzdHJ1Y3Qgc3RhdCIgInN0 X2Jsb2NrcyIgImFjX2N2X21lbWJlcl9zdHJ1Y3Rfc3RhdF9zdF9ibG9ja3MiICIkYWNfaW5jbHVk ZXNfZGVmYXVsdCINCmlmIHRlc3QgIngkYWNfY3ZfbWVtYmVyX3N0cnVjdF9zdGF0X3N0X2Jsb2Nr cyIgPSB4eWVzOyB0aGVuIDoNCg0KY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRg0KI2RlZmluZSBI QVZFX1NUUlVDVF9TVEFUX1NUX0JMT0NLUyAxDQpfQUNFT0YNCg0KDQokYXNfZWNobyAiI2RlZmlu ZSBIQVZFX1NUX0JMT0NLUyAxIiA+PmNvbmZkZWZzLmgNCg0KZWxzZQ0KDQoNCg0KDQoNCg0KDQoN CiAgZ2xfTElCT0JKUz0iJGdsX0xJQk9CSlMgZmlsZWJsb2Nrcy4kYWNfb2JqZXh0Ig0KDQpmaQ0K DQoNCiAgICBpZiB0ZXN0ICRhY19jdl9tZW1iZXJfc3RydWN0X3N0YXRfc3RfYmxvY2tzID0gbm87 IHRoZW4NCg0KDQogIDoNCg0KICBmaQ0KDQogICMgQ29kZSBmcm9tIG1vZHVsZSBmaWxlbW9kZToN Cg0KDQoNCg0KDQoNCg0KDQoNCg0KICBnbF9MSUJPQkpTPSIkZ2xfTElCT0JKUyBmaWxlbW9kZS4k YWNfb2JqZXh0Ig0KDQoNCg0KICAjIENvZGUgZnJvbSBtb2R1bGUgZmlsZW5hbWVjYXQ6DQoNCg0K DQoNCg0KDQoNCg0KDQoNCiAgZ2xfTElCT0JKUz0iJGdsX0xJQk9CSlMgZmlsZW5hbWVjYXQuJGFj X29iamV4dCINCg0KDQoNCg0KY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRg0KI2RlZmluZSBHTlVM SUJfRklMRU5BTUVDQVQgMQ0KX0FDRU9GDQoNCg0KICAjIENvZGUgZnJvbSBtb2R1bGUgZmlsZW5h bWVjYXQtbGdwbDoNCg0KDQoNCg0KDQoNCg0KDQoNCiAgZ2xfTElCT0JKUz0iJGdsX0xJQk9CSlMg ZmlsZW5hbWVjYXQtbGdwbC4kYWNfb2JqZXh0Ig0KDQoNCg0KDQogICMgQ29kZSBmcm9tIG1vZHVs ZSBmaWxldmVyY21wOg0KDQogICMgQ29kZSBmcm9tIG1vZHVsZSBmbGV4bWVtYmVyOg0KDQogIHsg JGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIGZsZXhp YmxlIGFycmF5IG1lbWJlciIgPiY1DQokYXNfZWNob19uICJjaGVja2luZyBmb3IgZmxleGlibGUg YXJyYXkgbWVtYmVyLi4uICIgPiY2OyB9DQppZiAke2FjX2N2X2NfZmxleG1lbWJlcis6fSBmYWxz ZTsgdGhlbiA6DQogICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2DQplbHNlDQogIGNhdCBjb25m ZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQNCi8qIGVuZCBjb25mZGVmcy5oLiAg Ki8NCiNpbmNsdWRlIDxzdGRsaWIuaD4NCiAgICAgICAgICAgICNpbmNsdWRlIDxzdGRpby5oPg0K ICAgICAgICAgICAgI2luY2x1ZGUgPHN0ZGRlZi5oPg0KICAgICAgICAgICAgc3RydWN0IHMgeyBp bnQgbjsgZG91YmxlIGRbXTsgfTsNCmludA0KbWFpbiAoKQ0Kew0KaW50IG0gPSBnZXRjaGFyICgp Ow0KICAgICAgICAgICAgc3RydWN0IHMgKnAgPSBtYWxsb2MgKG9mZnNldG9mIChzdHJ1Y3Qgcywg ZCkNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIG0gKiBzaXplb2YgKGRvdWJs ZSkpOw0KICAgICAgICAgICAgcC0+ZFswXSA9IDAuMDsNCiAgICAgICAgICAgIHJldHVybiBwLT5k ICE9IChkb3VibGUgKikgTlVMTDsNCiAgOw0KICByZXR1cm4gMDsNCn0NCl9BQ0VPRg0KaWYgYWNf Zm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOg0KICBhY19jdl9jX2ZsZXhtZW1iZXI9 eWVzDQplbHNlDQogIGFjX2N2X2NfZmxleG1lbWJlcj1ubw0KZmkNCnJtIC1mIGNvcmUgY29uZnRl c3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dA0KZmkNCnsgJGFzX2Vj aG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfY19mbGV4bWVt YmVyIiA+JjUNCiRhc19lY2hvICIkYWNfY3ZfY19mbGV4bWVtYmVyIiA+JjY7IH0NCiAgaWYgdGVz dCAkYWNfY3ZfY19mbGV4bWVtYmVyID0geWVzOyB0aGVuDQoNCiRhc19lY2hvICIjZGVmaW5lIEZM RVhJQkxFX0FSUkFZX01FTUJFUiAvKiovIiA+PmNvbmZkZWZzLmgNCg0KICBlbHNlDQogICAgJGFz X2VjaG8gIiNkZWZpbmUgRkxFWElCTEVfQVJSQVlfTUVNQkVSIDEiID4+Y29uZmRlZnMuaA0KDQog IGZpDQoNCiAgIyBDb2RlIGZyb20gbW9kdWxlIGZsb2F0Og0KDQoNCg0KICBGTE9BVF9IPQ0KICBj YXNlICIkaG9zdF9vcyIgaW4NCiAgICBiZW9zKiB8IG9wZW5ic2QqIHwgbWlyYnNkKikNCiAgICAg IEZMT0FUX0g9ZmxvYXQuaA0KDQoNCg0KDQoNCg0KDQoNCiAgICAgaWYgdGVzdCAkZ2xfY3ZfaGF2 ZV9pbmNsdWRlX25leHQgPSB5ZXM7IHRoZW4NCiAgICAgICBnbF9jdl9uZXh0X2Zsb2F0X2g9Jzwn ZmxvYXQuaCc+Jw0KICAgICBlbHNlDQogICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGlu ZW5vLSRMSU5FTk99OiBjaGVja2luZyBhYnNvbHV0ZSBuYW1lIG9mIDxmbG9hdC5oPiIgPiY1DQok YXNfZWNob19uICJjaGVja2luZyBhYnNvbHV0ZSBuYW1lIG9mIDxmbG9hdC5oPi4uLiAiID4mNjsg fQ0KaWYgJHtnbF9jdl9uZXh0X2Zsb2F0X2grOn0gZmFsc2U7IHRoZW4gOg0KICAkYXNfZWNob19u ICIoY2FjaGVkKSAiID4mNg0KZWxzZQ0KDQogICAgICAgICAgICAgICBjYXQgY29uZmRlZnMuaCAt IDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0DQovKiBlbmQgY29uZmRlZnMuaC4gICovDQojaW5j bHVkZSA8ZmxvYXQuaD4NCg0KX0FDRU9GDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICIkaG9zdF9vcyIgaW4NCiAgICAg ICAgICAgICAgICAgYWl4KikgZ2xfYWJzbmFtZV9jcHA9IiRhY19jcHAgLUMiIDs7DQogICAgICAg ICAgICAgICAgICopICAgIGdsX2Fic25hbWVfY3BwPSIkYWNfY3BwIiA7Ow0KICAgICAgICAgICAg ICAgZXNhYw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgZ2xfY3ZfbmV4dF9mbG9hdF9oPSciJ2AoZXZhbCAiJGdsX2Fic25hbWVfY3Bw IGNvbmZ0ZXN0LiRhY19leHQiKSAyPiY1IHwNCiAgICAgICAgICAgICAgICAgIHNlZCAtbiAnXCMv ZmxvYXQuaCN7DQogICAgICAgICAgICAgICAgICAgIHMjLioiXCguKi9mbG9hdC5oXCkiLiojXDEj DQogICAgICAgICAgICAgICAgICAgIHMjXi9bXi9dIy8vJiMNCiAgICAgICAgICAgICAgICAgICAg cA0KICAgICAgICAgICAgICAgICAgICBxDQogICAgICAgICAgICAgICAgICB9J2AnIicNCg0KDQpm aQ0KeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRnbF9j dl9uZXh0X2Zsb2F0X2giID4mNQ0KJGFzX2VjaG8gIiRnbF9jdl9uZXh0X2Zsb2F0X2giID4mNjsg fQ0KICAgICBmaQ0KICAgICBORVhUX0ZMT0FUX0g9JGdsX2N2X25leHRfZmxvYXRfaA0KDQogICAg IGlmIHRlc3QgJGdsX2N2X2hhdmVfaW5jbHVkZV9uZXh0ID0geWVzIHx8IHRlc3QgJGdsX2N2X2hh dmVfaW5jbHVkZV9uZXh0ID0gYnVnZ3k7IHRoZW4NCiAgICAgICAjIElOQ0xVREVfTkVYVF9BU19G SVJTVF9ESVJFQ1RJVkU9J2luY2x1ZGVfbmV4dCcNCiAgICAgICBnbF9uZXh0X2FzX2ZpcnN0X2Rp cmVjdGl2ZT0nPCdmbG9hdC5oJz4nDQogICAgIGVsc2UNCiAgICAgICAjIElOQ0xVREVfTkVYVF9B U19GSVJTVF9ESVJFQ1RJVkU9J2luY2x1ZGUnDQogICAgICAgZ2xfbmV4dF9hc19maXJzdF9kaXJl Y3RpdmU9JGdsX2N2X25leHRfZmxvYXRfaA0KICAgICBmaQ0KICAgICBORVhUX0FTX0ZJUlNUX0RJ UkVDVElWRV9GTE9BVF9IPSRnbF9uZXh0X2FzX2ZpcnN0X2RpcmVjdGl2ZQ0KDQoNCg0KDQogICAg ICA7Ow0KICBlc2FjDQoNCiAgIGlmIHRlc3QgLW4gIiRGTE9BVF9IIjsgdGhlbg0KICBHTF9HRU5F UkFURV9GTE9BVF9IX1RSVUU9DQogIEdMX0dFTkVSQVRFX0ZMT0FUX0hfRkFMU0U9JyMnDQplbHNl DQogIEdMX0dFTkVSQVRFX0ZMT0FUX0hfVFJVRT0nIycNCiAgR0xfR0VORVJBVEVfRkxPQVRfSF9G QUxTRT0NCmZpDQoNCg0KICAjIENvZGUgZnJvbSBtb2R1bGUgZm5tYXRjaDoNCg0KDQoNCg0KDQog IEZOTUFUQ0hfSD0NCiAgZ2xfZm5tYXRjaF9yZXF1aXJlZF9sb3dlcmNhc2U9YA0KICAgIGVjaG8g JGdsX2ZubWF0Y2hfcmVxdWlyZWQgfCB0ciAnW0EtWl0nICdbYS16XScNCiAgYA0KICBnbF9mbm1h dGNoX2NhY2hlX3Zhcj0iZ2xfY3ZfZnVuY19mbm1hdGNoXyR7Z2xfZm5tYXRjaF9yZXF1aXJlZF9s b3dlcmNhc2V9Ig0KICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNo ZWNraW5nIGZvciB3b3JraW5nICRnbF9mbm1hdGNoX3JlcXVpcmVkIGZubWF0Y2giID4mNQ0KJGFz X2VjaG9fbiAiY2hlY2tpbmcgZm9yIHdvcmtpbmcgJGdsX2ZubWF0Y2hfcmVxdWlyZWQgZm5tYXRj aC4uLiAiID4mNjsgfQ0KaWYgZXZhbCBcJHskZ2xfZm5tYXRjaF9jYWNoZV92YXIrOn0gZmFsc2U7 IHRoZW4gOg0KICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNg0KZWxzZQ0KICAgICAgICAgICAg ICAgICAgICAgICAgICAgaWYgdGVzdCAkZ2xfZm5tYXRjaF9yZXF1aXJlZCA9IEdOVTsgdGhlbg0K ICAgICAgIGdsX2ZubWF0Y2hfZ251X3N0YXJ0PQ0KICAgICAgIGdsX2ZubWF0Y2hfZ251X2VuZD0N CiAgICAgZWxzZQ0KICAgICAgIGdsX2ZubWF0Y2hfZ251X3N0YXJ0PScjaWYgMCcNCiAgICAgICBn bF9mbm1hdGNoX2dudV9lbmQ9JyNlbmRpZicNCiAgICAgZmkNCiAgICAgaWYgdGVzdCAiJGNyb3Nz X2NvbXBpbGluZyIgPSB5ZXM7IHRoZW4gOg0KICBldmFsICIkZ2xfZm5tYXRjaF9jYWNoZV92YXI9 XCJndWVzc2luZyBub1wiIg0KZWxzZQ0KICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25m dGVzdC4kYWNfZXh0DQovKiBlbmQgY29uZmRlZnMuaC4gICovDQojaW5jbHVkZSA8Zm5tYXRjaC5o Pg0KICAgICAgICAgICAgc3RhdGljIGludA0KICAgICAgICAgICAgeSAoY2hhciBjb25zdCAqcGF0 dGVybiwgY2hhciBjb25zdCAqc3RyaW5nLCBpbnQgZmxhZ3MpDQogICAgICAgICAgICB7DQogICAg ICAgICAgICAgIHJldHVybiBmbm1hdGNoIChwYXR0ZXJuLCBzdHJpbmcsIGZsYWdzKSA9PSAwOw0K ICAgICAgICAgICAgfQ0KICAgICAgICAgICAgc3RhdGljIGludA0KICAgICAgICAgICAgbiAoY2hh ciBjb25zdCAqcGF0dGVybiwgY2hhciBjb25zdCAqc3RyaW5nLCBpbnQgZmxhZ3MpDQogICAgICAg ICAgICB7DQogICAgICAgICAgICAgIHJldHVybiBmbm1hdGNoIChwYXR0ZXJuLCBzdHJpbmcsIGZs YWdzKSA9PSBGTk1fTk9NQVRDSDsNCiAgICAgICAgICAgIH0NCg0KaW50DQptYWluICgpDQp7DQpj aGFyIGNvbnN0ICpBcGF0ID0gJ0EnIDwgJ1xcXFwnID8gIltBLVxcXFxcXFxcXSIgOiAiW1xcXFxc XFxcLUFdIjsNCiAgICAgICAgICAgIGNoYXIgY29uc3QgKmFwYXQgPSAnYScgPCAnXFxcXCcgPyAi W2EtXFxcXFxcXFxdIiA6ICJbXFxcXFxcXFwtYV0iOw0KICAgICAgICAgICAgc3RhdGljIGNoYXIg Y29uc3QgQV8xW10gPSB7ICdBJyAtIDEsIDAgfTsNCiAgICAgICAgICAgIHN0YXRpYyBjaGFyIGNv bnN0IEEwMVtdID0geyAnQScgKyAxLCAwIH07DQogICAgICAgICAgICBzdGF0aWMgY2hhciBjb25z dCBhXzFbXSA9IHsgJ2EnIC0gMSwgMCB9Ow0KICAgICAgICAgICAgc3RhdGljIGNoYXIgY29uc3Qg YTAxW10gPSB7ICdhJyArIDEsIDAgfTsNCiAgICAgICAgICAgIHN0YXRpYyBjaGFyIGNvbnN0IGJz XzFbXSA9IHsgJ1xcXFwnIC0gMSwgMCB9Ow0KICAgICAgICAgICAgc3RhdGljIGNoYXIgY29uc3Qg YnMwMVtdID0geyAnXFxcXCcgKyAxLCAwIH07DQogICAgICAgICAgICBpbnQgcmVzdWx0ID0gMDsN CiAgICAgICAgICAgIGlmICghbiAoImEqIiwgIiIsIDApKQ0KICAgICAgICAgICAgICByZXR1cm4g MTsNCiAgICAgICAgICAgIGlmICgheSAoImEqIiwgImFiYyIsIDApKQ0KICAgICAgICAgICAgICBy ZXR1cm4gMTsNCiAgICAgICAgICAgIGlmICghbiAoImQqLyoxIiwgImQvcy8xIiwgRk5NX1BBVEhO QU1FKSkNCiAgICAgICAgICAgICAgcmV0dXJuIDI7DQogICAgICAgICAgICBpZiAoIXkgKCJhXFxc XGJjIiwgImFiYyIsIDApKQ0KICAgICAgICAgICAgICByZXR1cm4gMzsNCiAgICAgICAgICAgIGlm ICghbiAoImFcXFxcYmMiLCAiYWJjIiwgRk5NX05PRVNDQVBFKSkNCiAgICAgICAgICAgICAgcmV0 dXJuIDM7DQogICAgICAgICAgICBpZiAoIXkgKCIqeCIsICIueCIsIDApKQ0KICAgICAgICAgICAg ICByZXR1cm4gNDsNCiAgICAgICAgICAgIGlmICghbiAoIip4IiwgIi54IiwgRk5NX1BFUklPRCkp DQogICAgICAgICAgICAgIHJldHVybiA0Ow0KICAgICAgICAgICAgaWYgKCF5IChBcGF0LCAiXFxc XCIsIDApKQ0KICAgICAgICAgICAgICByZXR1cm4gNTsNCiAgICAgICAgICAgIGlmICgheSAoQXBh dCwgIkEiLCAwKSkNCiAgICAgICAgICAgICAgcmV0dXJuIDU7DQogICAgICAgICAgICBpZiAoIXkg KGFwYXQsICJcXFxcIiwgMCkpDQogICAgICAgICAgICAgIHJldHVybiA1Ow0KICAgICAgICAgICAg aWYgKCF5IChhcGF0LCAiYSIsIDApKQ0KICAgICAgICAgICAgICByZXR1cm4gNTsNCiAgICAgICAg ICAgIGlmICghKG4gKEFwYXQsIEFfMSwgMCkgPT0gKCdBJyA8ICdcXFxcJykpKQ0KICAgICAgICAg ICAgICByZXR1cm4gNTsNCiAgICAgICAgICAgIGlmICghKG4gKGFwYXQsIGFfMSwgMCkgPT0gKCdh JyA8ICdcXFxcJykpKQ0KICAgICAgICAgICAgICByZXR1cm4gNTsNCiAgICAgICAgICAgIGlmICgh KHkgKEFwYXQsIEEwMSwgMCkgPT0gKCdBJyA8ICdcXFxcJykpKQ0KICAgICAgICAgICAgICByZXR1 cm4gNTsNCiAgICAgICAgICAgIGlmICghKHkgKGFwYXQsIGEwMSwgMCkgPT0gKCdhJyA8ICdcXFxc JykpKQ0KICAgICAgICAgICAgICByZXR1cm4gNTsNCiAgICAgICAgICAgIGlmICghKHkgKEFwYXQs IGJzXzEsIDApID09ICgnQScgPCAnXFxcXCcpKSkNCiAgICAgICAgICAgICAgcmV0dXJuIDU7DQog ICAgICAgICAgICBpZiAoISh5IChhcGF0LCBic18xLCAwKSA9PSAoJ2EnIDwgJ1xcXFwnKSkpDQog ICAgICAgICAgICAgIHJldHVybiA1Ow0KICAgICAgICAgICAgaWYgKCEobiAoQXBhdCwgYnMwMSwg MCkgPT0gKCdBJyA8ICdcXFxcJykpKQ0KICAgICAgICAgICAgICByZXR1cm4gNTsNCiAgICAgICAg ICAgIGlmICghKG4gKGFwYXQsIGJzMDEsIDApID09ICgnYScgPCAnXFxcXCcpKSkNCiAgICAgICAg ICAgICAgcmV0dXJuIDU7DQogICAgICAgICAgICAkZ2xfZm5tYXRjaF9nbnVfc3RhcnQNCiAgICAg ICAgICAgIGlmICgheSAoInh4WFgiLCAieFh4WCIsIEZOTV9DQVNFRk9MRCkpDQogICAgICAgICAg ICAgIHJlc3VsdCB8PSA4Ow0KICAgICAgICAgICAgaWYgKCF5ICgiYSsrKHh8eXkpYiIsICJhK3h5 eXl5eGIiLCBGTk1fRVhUTUFUQ0gpKQ0KICAgICAgICAgICAgICByZXN1bHQgfD0gMTY7DQogICAg ICAgICAgICBpZiAoIW4gKCJkKi8qMSIsICJkL3MvMSIsIEZOTV9GSUxFX05BTUUpKQ0KICAgICAg ICAgICAgICByZXN1bHQgfD0gMzI7DQogICAgICAgICAgICBpZiAoIXkgKCIqIiwgIngiLCBGTk1f RklMRV9OQU1FIHwgRk5NX0xFQURJTkdfRElSKSkNCiAgICAgICAgICAgICAgcmVzdWx0IHw9IDY0 Ow0KICAgICAgICAgICAgaWYgKCF5ICgieCoiLCAieC95L3oiLCBGTk1fRklMRV9OQU1FIHwgRk5N X0xFQURJTkdfRElSKSkNCiAgICAgICAgICAgICAgcmVzdWx0IHw9IDY0Ow0KICAgICAgICAgICAg aWYgKCF5ICgiKmMqIiwgImMveCIsIEZOTV9GSUxFX05BTUUgfCBGTk1fTEVBRElOR19ESVIpKQ0K ICAgICAgICAgICAgICByZXN1bHQgfD0gNjQ7DQogICAgICAgICAgICAkZ2xfZm5tYXRjaF9nbnVf ZW5kDQogICAgICAgICAgICByZXR1cm4gcmVzdWx0Ow0KDQogIDsNCiAgcmV0dXJuIDA7DQp9DQpf QUNFT0YNCmlmIGFjX2ZuX2NfdHJ5X3J1biAiJExJTkVOTyI7IHRoZW4gOg0KICBldmFsICIkZ2xf Zm5tYXRjaF9jYWNoZV92YXI9eWVzIg0KZWxzZQ0KICBldmFsICIkZ2xfZm5tYXRjaF9jYWNoZV92 YXI9bm8iDQpmaQ0Kcm0gLWYgY29yZSAqLmNvcmUgY29yZS5jb25mdGVzdC4qIGdtb24ub3V0IGJi Lm91dCBjb25mdGVzdCRhY19leGVleHQgXA0KICBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0 LmJlYW0gY29uZnRlc3QuJGFjX2V4dA0KZmkNCg0KDQpmaQ0KZXZhbCBhY19yZXM9XCQkZ2xfZm5t YXRjaF9jYWNoZV92YXINCgkgICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRM SU5FTk99OiByZXN1bHQ6ICRhY19yZXMiID4mNQ0KJGFzX2VjaG8gIiRhY19yZXMiID4mNjsgfQ0K ICBldmFsICJnbF9mbm1hdGNoX3Jlc3VsdD1cIlwkJGdsX2ZubWF0Y2hfY2FjaGVfdmFyXCIiDQog IGlmIHRlc3QgIiRnbF9mbm1hdGNoX3Jlc3VsdCIgPSB5ZXM7IHRoZW4NCiAgICAgICAgICAgIHJt IC1mICIkZ2xfc291cmNlX2Jhc2UvZm5tYXRjaC5oIg0KICBlbHNlDQogICAgRk5NQVRDSF9IPWZu bWF0Y2guaA0KDQoNCg0KDQoNCg0KDQoNCiAgZ2xfTElCT0JKUz0iJGdsX0xJQk9CSlMgZm5tYXRj aC4kYWNfb2JqZXh0Ig0KDQoNCmNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YNCiNkZWZpbmUgZm5t YXRjaCAke2dsX2ZubWF0Y2hfcmVxdWlyZWRfbG93ZXJjYXNlfV9mbm1hdGNoDQpfQUNFT0YNCg0K DQogICAgYWNfZm5fY19jaGVja19kZWNsICIkTElORU5PIiAiaXNibGFuayIgImFjX2N2X2hhdmVf ZGVjbF9pc2JsYW5rIiAiI2luY2x1ZGUgPGN0eXBlLmg+DQoiDQppZiB0ZXN0ICJ4JGFjX2N2X2hh dmVfZGVjbF9pc2JsYW5rIiA9IHh5ZXM7IHRoZW4gOg0KICBhY19oYXZlX2RlY2w9MQ0KZWxzZQ0K ICBhY19oYXZlX2RlY2w9MA0KZmkNCg0KY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRg0KI2RlZmlu ZSBIQVZFX0RFQ0xfSVNCTEFOSyAkYWNfaGF2ZV9kZWNsDQpfQUNFT0YNCg0KDQoNCiAgZmkNCg0K ICAgaWYgdGVzdCAtbiAiJEZOTUFUQ0hfSCI7IHRoZW4NCiAgR0xfR0VORVJBVEVfRk5NQVRDSF9I X1RSVUU9DQogIEdMX0dFTkVSQVRFX0ZOTUFUQ0hfSF9GQUxTRT0nIycNCmVsc2UNCiAgR0xfR0VO RVJBVEVfRk5NQVRDSF9IX1RSVUU9JyMnDQogIEdMX0dFTkVSQVRFX0ZOTUFUQ0hfSF9GQUxTRT0N CmZpDQoNCg0KICAjIENvZGUgZnJvbSBtb2R1bGUgZm5tYXRjaC1nbnU6DQoNCg0KDQoNCg0KICAj IENvZGUgZnJvbSBtb2R1bGUgZm9wZW46DQoNCg0KDQogIGNhc2UgIiRob3N0X29zIiBpbg0KICAg IG1pbmd3KiB8IHB3KikNCiAgICAgICAgICAgIFJFUExBQ0VfRk9QRU49MQ0KICAgICAgICAgICAg Z2xfY3ZfZnVuY19mb3Blbl9zbGFzaD0iZ3Vlc3Npbmcgbm8iDQogICAgICA7Ow0KICAgICopDQog ICAgICAgICAgICAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306 IGNoZWNraW5nIHdoZXRoZXIgZm9wZW4gcmVjb2duaXplcyBhIHRyYWlsaW5nIHNsYXNoIiA+JjUN CiRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgZm9wZW4gcmVjb2duaXplcyBhIHRyYWlsaW5n IHNsYXNoLi4uICIgPiY2OyB9DQppZiAke2dsX2N2X2Z1bmNfZm9wZW5fc2xhc2grOn0gZmFsc2U7 IHRoZW4gOg0KICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNg0KZWxzZQ0KDQogICAgICAgICAg aWYgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgPSB5ZXM7IHRoZW4gOg0KDQogICAgICAgICAgICAg Y2FzZSAiJGhvc3Rfb3MiIGluDQogICAgICAgICAgICAgICBhaXgqIHwgaHB1eCogfCBzb2xhcmlz Mi5bMC05XSB8IHNvbGFyaXMyLlswLTldLiopDQogICAgICAgICAgICAgICAgIGdsX2N2X2Z1bmNf Zm9wZW5fc2xhc2g9Imd1ZXNzaW5nIG5vIiA7Ow0KICAgICAgICAgICAgICAgKikNCiAgICAgICAg ICAgICAgICAgZ2xfY3ZfZnVuY19mb3Blbl9zbGFzaD0iZ3Vlc3NpbmcgeWVzIiA7Ow0KICAgICAg ICAgICAgIGVzYWMNCg0KZWxzZQ0KICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVz dC4kYWNfZXh0DQovKiBlbmQgY29uZmRlZnMuaC4gICovDQoNCiNpbmNsdWRlIDxzdGRkZWYuaD4N CiNpbmNsdWRlIDxzdGRpby5oPg0KaW50IG1haW4gKCkNCnsNCiAgcmV0dXJuIGZvcGVuICgiY29u ZnRlc3Quc2wvIiwgInciKSAhPSBOVUxMOw0KfQ0KX0FDRU9GDQppZiBhY19mbl9jX3RyeV9ydW4g IiRMSU5FTk8iOyB0aGVuIDoNCiAgZ2xfY3ZfZnVuY19mb3Blbl9zbGFzaD15ZXMNCmVsc2UNCiAg Z2xfY3ZfZnVuY19mb3Blbl9zbGFzaD1ubw0KZmkNCnJtIC1mIGNvcmUgKi5jb3JlIGNvcmUuY29u ZnRlc3QuKiBnbW9uLm91dCBiYi5vdXQgY29uZnRlc3QkYWNfZXhlZXh0IFwNCiAgY29uZnRlc3Qu JGFjX29iamV4dCBjb25mdGVzdC5iZWFtIGNvbmZ0ZXN0LiRhY19leHQNCmZpDQoNCiAgICAgICAg ICBybSAtZiBjb25mdGVzdC5zbA0KDQpmaQ0KeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5v LSRMSU5FTk99OiByZXN1bHQ6ICRnbF9jdl9mdW5jX2ZvcGVuX3NsYXNoIiA+JjUNCiRhc19lY2hv ICIkZ2xfY3ZfZnVuY19mb3Blbl9zbGFzaCIgPiY2OyB9DQogICAgICA7Ow0KICBlc2FjDQogIGNh c2UgIiRnbF9jdl9mdW5jX2ZvcGVuX3NsYXNoIiBpbg0KICAgICpubykNCg0KJGFzX2VjaG8gIiNk ZWZpbmUgRk9QRU5fVFJBSUxJTkdfU0xBU0hfQlVHIDEiID4+Y29uZmRlZnMuaA0KDQogICAgICBS RVBMQUNFX0ZPUEVOPTENCiAgICAgIDs7DQogIGVzYWMNCiAgaWYgdGVzdCAkUkVQTEFDRV9GT1BF TiA9IDE7IHRoZW4NCg0KDQoNCg0KDQoNCg0KDQogIGdsX0xJQk9CSlM9IiRnbF9MSUJPQkpTIGZv cGVuLiRhY19vYmpleHQiDQoNCg0KDQoNCiAgZmkNCg0KDQoNCg0KICBHTlVMSUJfRk9QRU49MQ0K DQoNCg0KJGFzX2VjaG8gIiNkZWZpbmUgR05VTElCX1RFU1RfRk9QRU4gMSIgPj5jb25mZGVmcy5o DQoNCg0KDQogICMgQ29kZSBmcm9tIG1vZHVsZSBmb3Blbi1zYWZlcjoNCg0KDQoNCg0KDQoNCg0K DQoNCiAgZ2xfTElCT0JKUz0iJGdsX0xJQk9CSlMgZm9wZW4tc2FmZXIuJGFjX29iamV4dCINCg0K DQoNCg0KY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRg0KI2RlZmluZSBHTlVMSUJfRk9QRU5fU0FG RVIgMQ0KX0FDRU9GDQoNCg0KICAjIENvZGUgZnJvbSBtb2R1bGUgZnBlbmRpbmc6DQoNCg0KDQog IGZwX2hlYWRlcnM9Jw0KIyAgICAgaW5jbHVkZSA8c3RkaW8uaD4NCiMgICAgIGlmIEhBVkVfU1RE SU9fRVhUX0gNCiMgICAgICBpbmNsdWRlIDxzdGRpb19leHQuaD4NCiMgICAgIGVuZGlmDQonDQog IGFjX2ZuX2NfY2hlY2tfZGVjbCAiJExJTkVOTyIgIl9fZnBlbmRpbmciICJhY19jdl9oYXZlX2Rl Y2xfX19mcGVuZGluZyIgIiRmcF9oZWFkZXJzDQoiDQppZiB0ZXN0ICJ4JGFjX2N2X2hhdmVfZGVj bF9fX2ZwZW5kaW5nIiA9IHh5ZXM7IHRoZW4gOg0KICBhY19oYXZlX2RlY2w9MQ0KZWxzZQ0KICBh Y19oYXZlX2RlY2w9MA0KZmkNCg0KY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRg0KI2RlZmluZSBI QVZFX0RFQ0xfX19GUEVORElORyAkYWNfaGF2ZV9kZWNsDQpfQUNFT0YNCg0KICBpZiB0ZXN0ICRh Y19jdl9mdW5jX19fZnBlbmRpbmcgPSBubzsgdGhlbg0KICAgIHsgJGFzX2VjaG8gIiRhc19tZTok e2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaG93IHRvIGRldGVybWluZSB0aGUgbnVtYmVy IG9mIHBlbmRpbmcgb3V0cHV0IGJ5dGVzIG9uIGEgc3RyZWFtIiA+JjUNCiRhc19lY2hvX24gImNo ZWNraW5nIGhvdyB0byBkZXRlcm1pbmUgdGhlIG51bWJlciBvZiBwZW5kaW5nIG91dHB1dCBieXRl cyBvbiBhIHN0cmVhbS4uLiAiID4mNjsgfQ0KaWYgJHthY19jdl9zeXNfcGVuZGluZ19vdXRwdXRf bl9ieXRlcys6fSBmYWxzZTsgdGhlbiA6DQogICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2DQpl bHNlDQoNCiAgICAgICAgZm9yIGFjX2V4cHIgaW4gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgXA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQogICAgICAgICAg ICAnIyBnbGliYzInICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIFwNCiAgICAgICAgICAgICdmcC0+X0lPX3dyaXRlX3B0ciAtIGZwLT5fSU9fd3JpdGVf YmFzZScgICAgICAgICAgICAgICAgICAgICAgXA0KICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQogICAgICAg ICAgICAnIyB0cmFkaXRpb25hbCBVbml4JyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIFwNCiAgICAgICAgICAgICdmcC0+X3B0ciAtIGZwLT5fYmFzZScgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQogICAg ICAgICAgICAnIyBCU0QnICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIFwNCiAgICAgICAgICAgICdmcC0+X3AgLSBmcC0+X2JmLl9iYXNlJyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQog ICAgICAgICAgICAnIyBTQ08sIFVuaXh3YXJlJyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIFwNCiAgICAgICAgICAgICcoZnAtPl9fcHRyID8gZnAtPl9fcHRyIC0g ZnAtPl9fYmFzZSA6IDApJyAgICAgICAgICAgICAgICAgICAgXA0KICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc DQogICAgICAgICAgICAnIyBRTlgnICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIFwNCiAgICAgICAgICAgICcoZnAtPl9Nb2RlICYgMHgyMDAwIC8q X01XUklURSovID8gZnAtPl9OZXh0IC0gZnAtPl9CdWYgOiAwKScgXA0KICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBcDQogICAgICAgICAgICAnIyBvbGQgZ2xpYmM/JyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIFwNCiAgICAgICAgICAgICdmcC0+X19idWZwIC0gZnAtPl9f YnVmZmVyJyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBcDQogICAgICAgICAgICAnIyBvbGQgZ2xpYmMgaW9zdHJlYW0/JyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIFwNCiAgICAgICAgICAgICdmcC0+X3BwdHIgLSBmcC0+ X3BiYXNlJyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBcDQogICAgICAgICAgICAnIyBlbXgrZ2NjJyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCiAgICAgICAgICAgICdmcC0+X3B0ciAtIGZw LT5fYnVmZmVyJyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBcDQogICAgICAgICAgICAnIyBWTVMnICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCiAgICAgICAgICAgICcoKmZwKS0+X3B0 ciAtICgqZnApLT5fYmFzZScgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBcDQogICAgICAgICAgICAnIyBlLmcuLCBER1VYIFI0LjExOyB0aGUgaW5m byBpcyBub3QgYXZhaWxhYmxlJyAgICAgICAgICAgICAgIFwNCiAgICAgICAgICAgIDEgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0K ICAgICAgICAgICAgOyBkbw0KDQogICAgICAgICAgIyBTa2lwIGVhY2ggZW1iZWRkZWQgY29tbWVu dC4NCiAgICAgICAgICBjYXNlICIkYWNfZXhwciIgaW4gJyMnKikgY29udGludWU7OyBlc2FjDQoN CiAgICAgICAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0DQov KiBlbmQgY29uZmRlZnMuaC4gICovDQojaW5jbHVkZSA8c3RkaW8uaD4NCmludA0KbWFpbiAoKQ0K ew0KRklMRSAqZnAgPSBzdGRpbjsgKHZvaWQpICgkYWNfZXhwcik7DQogIDsNCiAgcmV0dXJuIDA7 DQp9DQpfQUNFT0YNCmlmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoNCiAg ZnBfZG9uZT15ZXMNCg0KZmkNCnJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19v YmpleHQgY29uZnRlc3QuJGFjX2V4dA0KICAgICAgICAgIHRlc3QgIiRmcF9kb25lIiA9IHllcyAm JiBicmVhaw0KICAgICAgICBkb25lDQoNCiAgICAgICAgYWNfY3Zfc3lzX3BlbmRpbmdfb3V0cHV0 X25fYnl0ZXM9JGFjX2V4cHINCg0KDQpmaQ0KeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5v LSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9zeXNfcGVuZGluZ19vdXRwdXRfbl9ieXRlcyIgPiY1 DQokYXNfZWNobyAiJGFjX2N2X3N5c19wZW5kaW5nX291dHB1dF9uX2J5dGVzIiA+JjY7IH0NCg0K Y2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRg0KI2RlZmluZSBQRU5ESU5HX09VVFBVVF9OX0JZVEVT ICRhY19jdl9zeXNfcGVuZGluZ19vdXRwdXRfbl9ieXRlcw0KX0FDRU9GDQoNCg0KDQoNCg0KDQoN Cg0KDQogIGdsX0xJQk9CSlM9IiRnbF9MSUJPQkpTIGZwZW5kaW5nLiRhY19vYmpleHQiDQoNCiAg ZmkNCg0KICAjIENvZGUgZnJvbSBtb2R1bGUgZnBpZWVlOg0KICAjIENvZGUgZnJvbSBtb2R1bGUg ZnByaW50ZnRpbWU6DQoNCg0KDQoNCg0KDQoNCg0KDQogIGdsX0xJQk9CSlM9IiRnbF9MSUJPQkpT IGZwcmludGZ0aW1lLiRhY19vYmpleHQiDQoNCg0KICAjIENvZGUgZnJvbSBtb2R1bGUgZnB1Y3c6 DQogICMgQ29kZSBmcm9tIG1vZHVsZSBmcHVyZ2U6DQoNCg0KDQoNCiAgYWNfZm5fY19jaGVja19k ZWNsICIkTElORU5PIiAiZnB1cmdlIiAiYWNfY3ZfaGF2ZV9kZWNsX2ZwdXJnZSIgIiNpbmNsdWRl IDxzdGRpby5oPg0KIg0KaWYgdGVzdCAieCRhY19jdl9oYXZlX2RlY2xfZnB1cmdlIiA9IHh5ZXM7 IHRoZW4gOg0KICBhY19oYXZlX2RlY2w9MQ0KZWxzZQ0KICBhY19oYXZlX2RlY2w9MA0KZmkNCg0K Y2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRg0KI2RlZmluZSBIQVZFX0RFQ0xfRlBVUkdFICRhY19o YXZlX2RlY2wNCl9BQ0VPRg0KDQogIGlmIHRlc3QgIngkYWNfY3ZfZnVuY19mcHVyZ2UiID0geHll czsgdGhlbg0KICAgICMgRGV0ZWN0IEJTRCBidWcuICBPbmx5IGN5Z3dpbiAxLjcgaXMga25vd24g dG8gYmUgaW1tdW5lLg0KICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5P fTogY2hlY2tpbmcgd2hldGhlciBmcHVyZ2Ugd29ya3MiID4mNQ0KJGFzX2VjaG9fbiAiY2hlY2tp bmcgd2hldGhlciBmcHVyZ2Ugd29ya3MuLi4gIiA+JjY7IH0NCmlmICR7Z2xfY3ZfZnVuY19mcHVy Z2Vfd29ya3MrOn0gZmFsc2U7IHRoZW4gOg0KICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNg0K ZWxzZQ0KICBpZiB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IHllczsgdGhlbiA6DQogIGdsX2N2 X2Z1bmNfZnB1cmdlX3dvcmtzPSdndWVzc2luZyBubycNCmVsc2UNCiAgY2F0IGNvbmZkZWZzLmgg LSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dA0KLyogZW5kIGNvbmZkZWZzLmguICAqLw0KI2lu Y2x1ZGUgPHN0ZGlvLmg+DQoNCmludA0KbWFpbiAoKQ0Kew0KRklMRSAqZiA9IGZvcGVuICgiY29u ZnRlc3QudHh0IiwgIncrIik7DQogICAgICAgIGlmICghZikgcmV0dXJuIDE7DQogICAgICAgIGlm IChmcHV0YyAoJ2EnLCBmKSAhPSAnYScpIHJldHVybiAyOw0KICAgICAgICByZXdpbmQgKGYpOw0K ICAgICAgICBpZiAoZmdldGMgKGYpICE9ICdhJykgcmV0dXJuIDM7DQogICAgICAgIGlmIChmZ2V0 YyAoZikgIT0gRU9GKSByZXR1cm4gNDsNCiAgICAgICAgaWYgKGZwdXJnZSAoZikgIT0gMCkgcmV0 dXJuIDU7DQogICAgICAgIGlmIChwdXRjICgnYicsIGYpICE9ICdiJykgcmV0dXJuIDY7DQogICAg ICAgIGlmIChmY2xvc2UgKGYpICE9IDApIHJldHVybiA3Ow0KICAgICAgICBpZiAoKGYgPSBmb3Bl biAoImNvbmZ0ZXN0LnR4dCIsICJyIikpID09IE5VTEwpIHJldHVybiA4Ow0KICAgICAgICBpZiAo ZmdldGMgKGYpICE9ICdhJykgcmV0dXJuIDk7DQogICAgICAgIGlmIChmZ2V0YyAoZikgIT0gJ2In KSByZXR1cm4gMTA7DQogICAgICAgIGlmIChmZ2V0YyAoZikgIT0gRU9GKSByZXR1cm4gMTE7DQog ICAgICAgIGlmIChmY2xvc2UgKGYpICE9IDApIHJldHVybiAxMjsNCiAgICAgICAgaWYgKHJlbW92 ZSAoImNvbmZ0ZXN0LnR4dCIpICE9IDApIHJldHVybiAxMzsNCiAgICAgICAgcmV0dXJuIDA7DQog IDsNCiAgcmV0dXJuIDA7DQp9DQpfQUNFT0YNCmlmIGFjX2ZuX2NfdHJ5X3J1biAiJExJTkVOTyI7 IHRoZW4gOg0KICBnbF9jdl9mdW5jX2ZwdXJnZV93b3Jrcz15ZXMNCmVsc2UNCiAgZ2xfY3ZfZnVu Y19mcHVyZ2Vfd29ya3M9bm8NCmZpDQpybSAtZiBjb3JlICouY29yZSBjb3JlLmNvbmZ0ZXN0Liog Z21vbi5vdXQgYmIub3V0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCBcDQogIGNvbmZ0ZXN0LiRhY19vYmpl eHQgY29uZnRlc3QuYmVhbSBjb25mdGVzdC4kYWNfZXh0DQpmaQ0KDQpmaQ0KeyAkYXNfZWNobyAi JGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRnbF9jdl9mdW5jX2ZwdXJnZV93 b3JrcyIgPiY1DQokYXNfZWNobyAiJGdsX2N2X2Z1bmNfZnB1cmdlX3dvcmtzIiA+JjY7IH0NCiAg ICBpZiB0ZXN0ICJ4JGdsX2N2X2Z1bmNfZnB1cmdlX3dvcmtzIiAhPSB4eWVzOyB0aGVuDQogICAg ICBSRVBMQUNFX0ZQVVJHRT0xDQoNCg0KDQoNCg0KDQoNCg0KICBnbF9MSUJPQkpTPSIkZ2xfTElC T0JKUyBmcHVyZ2UuJGFjX29iamV4dCINCg0KICAgIGZpDQogIGVsc2UNCg0KDQoNCg0KDQoNCg0K DQogIGdsX0xJQk9CSlM9IiRnbF9MSUJPQkpTIGZwdXJnZS4kYWNfb2JqZXh0Ig0KDQogIGZpDQog IGlmIHRlc3QgIngkYWNfY3ZfaGF2ZV9kZWNsX2ZwdXJnZSIgPSB4bm87IHRoZW4NCiAgICBIQVZF X0RFQ0xfRlBVUkdFPTANCiAgZmkNCg0KDQoNCg0KICBHTlVMSUJfRlBVUkdFPTENCg0KDQoNCiRh c19lY2hvICIjZGVmaW5lIEdOVUxJQl9URVNUX0ZQVVJHRSAxIiA+PmNvbmZkZWZzLmgNCg0KDQoN CiAgIyBDb2RlIGZyb20gbW9kdWxlIGZyZWFkYWhlYWQ6DQogICMgQ29kZSBmcm9tIG1vZHVsZSBm cmVhZGluZzoNCg0KDQoNCiAgIyBDb2RlIGZyb20gbW9kdWxlIGZyZWFkcHRyOg0KICAjIENvZGUg ZnJvbSBtb2R1bGUgZnJlYWRzZWVrOg0KDQogICMgQ29kZSBmcm9tIG1vZHVsZSBmcmVvcGVuOg0K DQoNCg0KICBjYXNlICIkaG9zdF9vcyIgaW4NCiAgICBtaW5ndyogfCBwdyopDQogICAgICBSRVBM QUNFX0ZSRU9QRU49MQ0KDQoNCg0KDQoNCg0KDQoNCiAgZ2xfTElCT0JKUz0iJGdsX0xJQk9CSlMg ZnJlb3Blbi4kYWNfb2JqZXh0Ig0KDQoNCg0KDQogICAgICA7Ow0KICBlc2FjDQoNCg0KDQoNCiAg R05VTElCX0ZSRU9QRU49MQ0KDQoNCg0KJGFzX2VjaG8gIiNkZWZpbmUgR05VTElCX1RFU1RfRlJF T1BFTiAxIiA+PmNvbmZkZWZzLmgNCg0KDQoNCiAgIyBDb2RlIGZyb20gbW9kdWxlIGZyZW9wZW4t c2FmZXI6DQoNCg0KDQoNCg0KDQoNCg0KDQogIGdsX0xJQk9CSlM9IiRnbF9MSUJPQkpTIGZyZW9w ZW4tc2FmZXIuJGFjX29iamV4dCINCg0KDQoNCg0KY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRg0K I2RlZmluZSBHTlVMSUJfRlJFT1BFTl9TQUZFUiAxDQpfQUNFT0YNCg0KDQogICMgQ29kZSBmcm9t IG1vZHVsZSBmcmV4cC1ub2xpYm06DQoNCg0KDQogIGlmIHRlc3QgJGdsX2N2X2Z1bmNfZnJleHBf bm9fbGlibSA9IHllczsgdGhlbg0KDQoNCiAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGlu ZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIGZyZXhwIHdvcmtzIiA+JjUNCiRhc19lY2hv X24gImNoZWNraW5nIHdoZXRoZXIgZnJleHAgd29ya3MuLi4gIiA+JjY7IH0NCmlmICR7Z2xfY3Zf ZnVuY19mcmV4cF93b3Jrcys6fSBmYWxzZTsgdGhlbiA6DQogICRhc19lY2hvX24gIihjYWNoZWQp ICIgPiY2DQplbHNlDQoNCiAgICAgIGlmIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0geWVzOyB0 aGVuIDoNCiAgY2FzZSAiJGhvc3Rfb3MiIGluDQogICAgICAgICAgIG5ldGJzZCogfCBpcml4KiB8 IG1pbmd3KikgZ2xfY3ZfZnVuY19mcmV4cF93b3Jrcz0iZ3Vlc3Npbmcgbm8iOzsNCiAgICAgICAg ICAgKikgICAgICAgICAgICAgICAgICAgICAgICBnbF9jdl9mdW5jX2ZyZXhwX3dvcmtzPSJndWVz c2luZyB5ZXMiOzsNCiAgICAgICAgIGVzYWMNCg0KZWxzZQ0KICBjYXQgY29uZmRlZnMuaCAtIDw8 X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0DQovKiBlbmQgY29uZmRlZnMuaC4gICovDQoNCiNpbmNs dWRlIDxmbG9hdC5oPg0KI2luY2x1ZGUgPG1hdGguaD4NCiNpbmNsdWRlIDxzdHJpbmcuaD4NCi8q IEhQIGNjIG9uIEhQLVVYIDEwLjIwIGhhcyBhIGJ1ZyB3aXRoIHRoZSBjb25zdGFudCBleHByZXNz aW9uIC0wLjAuDQogICBJQ0MgMTAuMCBoYXMgYSBidWcgd2hlbiBvcHRpbWl6aW5nIHRoZSBleHBy ZXNzaW9uIC16ZXJvLg0KICAgVGhlIGV4cHJlc3Npb24gLURCTF9NSU4gKiBEQkxfTUlOIGRvZXMg bm90IHdvcmsgd2hlbiBjcm9zcy1jb21waWxpbmcNCiAgIHRvIFBvd2VyUEMgb24gTWFjT1MgWCAx MC41LiAgKi8NCiNpZiBkZWZpbmVkIF9faHB1eCB8fCBkZWZpbmVkIF9fc2dpIHx8IGRlZmluZWQg X19JQ0MNCnN0YXRpYyBkb3VibGUNCmNvbXB1dGVfbWludXNfemVybyAodm9pZCkNCnsNCiAgcmV0 dXJuIC1EQkxfTUlOICogREJMX01JTjsNCn0NCiMgZGVmaW5lIG1pbnVzX3plcm8gY29tcHV0ZV9t aW51c196ZXJvICgpDQojZWxzZQ0KZG91YmxlIG1pbnVzX3plcm8gPSAtMC4wOw0KI2VuZGlmDQpp bnQgbWFpbigpDQp7DQogIGludCByZXN1bHQgPSAwOw0KICBpbnQgaTsNCiAgdm9sYXRpbGUgZG91 YmxlIHg7DQogIGRvdWJsZSB6ZXJvID0gMC4wOw0KICAvKiBUZXN0IG9uIGRlbm9ybWFsaXplZCBu dW1iZXJzLiAgKi8NCiAgZm9yIChpID0gMSwgeCA9IDEuMDsgaSA+PSBEQkxfTUlOX0VYUDsgaS0t LCB4ICo9IDAuNSkNCiAgICA7DQogIGlmICh4ID4gMC4wKQ0KICAgIHsNCiAgICAgIGludCBleHA7 DQogICAgICBkb3VibGUgeSA9IGZyZXhwICh4LCAmZXhwKTsNCiAgICAgIC8qIE9uIG1hY2hpbmVz IHdpdGggSUVFRTc1NCBhcml0aG1ldGljOiB4ID0gMS4xMTI1NGUtMzA4LCBleHAgPSAtMTAyMi4N CiAgICAgICAgIE9uIE5ldEJTRDogeSA9IDAuNzUuIENvcnJlY3Q6IHkgPSAwLjUuICAqLw0KICAg ICAgaWYgKHkgIT0gMC41KQ0KICAgICAgICByZXN1bHQgfD0gMTsNCiAgICB9DQogIC8qIFRlc3Qg b24gaW5maW5pdGUgbnVtYmVycy4gICovDQogIHggPSAxLjAgLyAwLjA7DQogIHsNCiAgICBpbnQg ZXhwOw0KICAgIGRvdWJsZSB5ID0gZnJleHAgKHgsICZleHApOw0KICAgIGlmICh5ICE9IHgpDQog ICAgICByZXN1bHQgfD0gMjsNCiAgfQ0KICAvKiBUZXN0IG9uIG5lZ2F0aXZlIHplcm8uICAqLw0K ICB4ID0gbWludXNfemVybzsNCiAgew0KICAgIGludCBleHA7DQogICAgZG91YmxlIHkgPSBmcmV4 cCAoeCwgJmV4cCk7DQogICAgaWYgKG1lbWNtcCAoJnksICZ4LCBzaXplb2YgeCkpDQogICAgICBy ZXN1bHQgfD0gNDsNCiAgfQ0KICByZXR1cm4gcmVzdWx0Ow0KfQ0KX0FDRU9GDQppZiBhY19mbl9j X3RyeV9ydW4gIiRMSU5FTk8iOyB0aGVuIDoNCiAgZ2xfY3ZfZnVuY19mcmV4cF93b3Jrcz15ZXMN CmVsc2UNCiAgZ2xfY3ZfZnVuY19mcmV4cF93b3Jrcz1ubw0KZmkNCnJtIC1mIGNvcmUgKi5jb3Jl IGNvcmUuY29uZnRlc3QuKiBnbW9uLm91dCBiYi5vdXQgY29uZnRlc3QkYWNfZXhlZXh0IFwNCiAg Y29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC5iZWFtIGNvbmZ0ZXN0LiRhY19leHQNCmZpDQoN Cg0KZmkNCnsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAk Z2xfY3ZfZnVuY19mcmV4cF93b3JrcyIgPiY1DQokYXNfZWNobyAiJGdsX2N2X2Z1bmNfZnJleHBf d29ya3MiID4mNjsgfQ0KDQogICAgY2FzZSAiJGdsX2N2X2Z1bmNfZnJleHBfd29ya3MiIGluDQog ICAgICAqeWVzKSBnbF9mdW5jX2ZyZXhwX25vX2xpYm09eWVzIDs7DQogICAgICAqKSAgICBnbF9m dW5jX2ZyZXhwX25vX2xpYm09bm87IFJFUExBQ0VfRlJFWFA9MSA7Ow0KICAgIGVzYWMNCiAgZWxz ZQ0KICAgIGdsX2Z1bmNfZnJleHBfbm9fbGlibT1ubw0KICAgICAgICBSRVBMQUNFX0ZSRVhQPTEN CiAgZmkNCiAgaWYgdGVzdCAkZ2xfZnVuY19mcmV4cF9ub19saWJtID0geWVzOyB0aGVuDQoNCiRh c19lY2hvICIjZGVmaW5lIEhBVkVfRlJFWFBfSU5fTElCQyAxIiA+PmNvbmZkZWZzLmgNCg0KICBl bHNlDQoNCg0KDQoNCg0KDQoNCg0KICBnbF9MSUJPQkpTPSIkZ2xfTElCT0JKUyBmcmV4cC4kYWNf b2JqZXh0Ig0KDQogIGZpDQoNCg0KDQoNCiAgR05VTElCX0ZSRVhQPTENCg0KDQoNCiRhc19lY2hv ICIjZGVmaW5lIEdOVUxJQl9URVNUX0ZSRVhQIDEiID4+Y29uZmRlZnMuaA0KDQoNCg0KICAjIENv ZGUgZnJvbSBtb2R1bGUgZnJleHBsLW5vbGlibToNCg0KDQogICAgICBhY19mbl9jX2NoZWNrX2Rl Y2wgIiRMSU5FTk8iICJmcmV4cGwiICJhY19jdl9oYXZlX2RlY2xfZnJleHBsIiAiI2luY2x1ZGUg PG1hdGguaD4NCiINCmlmIHRlc3QgIngkYWNfY3ZfaGF2ZV9kZWNsX2ZyZXhwbCIgPSB4eWVzOyB0 aGVuIDoNCg0KZWxzZQ0KICBIQVZFX0RFQ0xfRlJFWFBMPTANCmZpDQoNCiAgaWYgdGVzdCAkSEFW RV9ERUNMX0ZSRVhQTCA9IDE7IHRoZW4NCg0KICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5l bm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgZnJleHBsKCkgY2FuIGJlIHVzZWQgd2l0aG91 dCBsaW5raW5nIHdpdGggbGlibSIgPiY1DQokYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIGZy ZXhwbCgpIGNhbiBiZSB1c2VkIHdpdGhvdXQgbGlua2luZyB3aXRoIGxpYm0uLi4gIiA+JjY7IH0N CmlmICR7Z2xfY3ZfZnVuY19mcmV4cGxfbm9fbGlibSs6fSBmYWxzZTsgdGhlbiA6DQogICRhc19l Y2hvX24gIihjYWNoZWQpICIgPiY2DQplbHNlDQoNCiAgICAgIGNhdCBjb25mZGVmcy5oIC0gPDxf QUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQNCi8qIGVuZCBjb25mZGVmcy5oLiAgKi8NCiNpbmNsdWRl IDxtYXRoLmg+DQogICAgICAgICAgICAgbG9uZyBkb3VibGUgeDsNCmludA0KbWFpbiAoKQ0Kew0K aW50IGU7IHJldHVybiBmcmV4cGwgKHgsICZlKSA+IDA7DQogIDsNCiAgcmV0dXJuIDA7DQp9DQpf QUNFT0YNCmlmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoNCiAgZ2xfY3ZfZnVu Y19mcmV4cGxfbm9fbGlibT15ZXMNCmVsc2UNCiAgZ2xfY3ZfZnVuY19mcmV4cGxfbm9fbGlibT1u bw0KZmkNCnJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXA0KICAg IGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0DQoNCmZpDQp7ICRhc19lY2hvICIk YXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGdsX2N2X2Z1bmNfZnJleHBsX25v X2xpYm0iID4mNQ0KJGFzX2VjaG8gIiRnbF9jdl9mdW5jX2ZyZXhwbF9ub19saWJtIiA+JjY7IH0N Cg0KICAgIGlmIHRlc3QgJGdsX2N2X2Z1bmNfZnJleHBsX25vX2xpYm0gPSB5ZXM7IHRoZW4NCg0K DQogICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcg d2hldGhlciBmcmV4cGwgd29ya3MiID4mNQ0KJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciBm cmV4cGwgd29ya3MuLi4gIiA+JjY7IH0NCmlmICR7Z2xfY3ZfZnVuY19mcmV4cGxfd29ya3MrOn0g ZmFsc2U7IHRoZW4gOg0KICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNg0KZWxzZQ0KDQogICAg ICBpZiB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IHllczsgdGhlbiA6DQoNCiAgICAgICAgIGNh c2UgIiRob3N0X29zIiBpbg0KICAgICAgICAgICBhaXggfCBhaXhbMy02XSogfCBiZW9zKiB8IGRh cndpbiogfCBpcml4KiB8IG1pbmd3KiB8IHB3KikNCiAgICAgICAgICAgICAgZ2xfY3ZfZnVuY19m cmV4cGxfd29ya3M9Imd1ZXNzaW5nIG5vIjs7DQogICAgICAgICAgICopIGdsX2N2X2Z1bmNfZnJl eHBsX3dvcmtzPSJndWVzc2luZyB5ZXMiOzsNCiAgICAgICAgIGVzYWMNCg0KZWxzZQ0KICBjYXQg Y29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0DQovKiBlbmQgY29uZmRlZnMu aC4gICovDQoNCiNpbmNsdWRlIDxmbG9hdC5oPg0KI2luY2x1ZGUgPG1hdGguaD4NCi8qIE92ZXJy aWRlIHRoZSB2YWx1ZXMgb2YgPGZsb2F0Lmg+LCBsaWtlIGRvbmUgaW4gZmxvYXQuaW4uaC4gICov DQojaWYgZGVmaW5lZCBfX2kzODZfXyAmJiAoZGVmaW5lZCBfX0JFT1NfXyB8fCBkZWZpbmVkIF9f T3BlbkJTRF9fKQ0KIyB1bmRlZiBMREJMX01JTl9FWFANCiMgZGVmaW5lIExEQkxfTUlOX0VYUCAg ICAoLTE2MzgxKQ0KI2VuZGlmDQpleHRlcm4gbG9uZyBkb3VibGUgZnJleHBsIChsb25nIGRvdWJs ZSwgaW50ICopOw0KaW50IG1haW4oKQ0Kew0KICBpbnQgcmVzdWx0ID0gMDsNCiAgdm9sYXRpbGUg bG9uZyBkb3VibGUgeDsNCiAgLyogVGVzdCBvbiBmaW5pdGUgbnVtYmVycyB0aGF0IGZhaWxzIG9u IEFJWCA1LjEuICAqLw0KICB4ID0gMTYuMEw7DQogIHsNCiAgICBpbnQgZXhwID0gLTk5OTk7DQog ICAgZnJleHBsICh4LCAmZXhwKTsNCiAgICBpZiAoZXhwICE9IDUpDQogICAgICByZXN1bHQgfD0g MTsNCiAgfQ0KICAvKiBUZXN0IG9uIGZpbml0ZSBudW1iZXJzIHRoYXQgZmFpbHMgb24gTWFjT1Mg WCAxMC40LCBiZWNhdXNlIGl0cyBmcmV4cGwNCiAgICAgZnVuY3Rpb24gcmV0dXJucyBhbiBpbnZh bGlkIChpbmNvcnJlY3RseSBub3JtYWxpemVkKSB2YWx1ZTogaXQgcmV0dXJucw0KICAgICAgICAg ICAgICAgeSA9IHsgMHgzZmUwMjhmNSwgMHhjMjhmNWMyOCwgMHgzYzllYjg1MSwgMHhlYjg1MWVi OCB9DQogICAgIGJ1dCB0aGUgY29ycmVjdCByZXN1bHQgaXMNCiAgICAgICAgICAwLjUwNUwgPSB7 IDB4M2ZlMDI4ZjUsIDB4YzI4ZjVjMjksIDB4YmM1NDdhZTEsIDB4NDdhZTE0ODAgfSAgKi8NCiAg eCA9IDEuMDFMOw0KICB7DQogICAgaW50IGV4cCA9IC05OTk5Ow0KICAgIGxvbmcgZG91YmxlIHkg PSBmcmV4cGwgKHgsICZleHApOw0KICAgIGlmICghKGV4cCA9PSAxICYmIHkgPT0gMC41MDVMKSkN CiAgICAgIHJlc3VsdCB8PSAyOw0KICB9DQogIC8qIFRlc3Qgb24gbGFyZ2UgZmluaXRlIG51bWJl cnMuICBUaGlzIGZhaWxzIG9uIEJlT1MgYXQgaSA9IDE2MzIyLCB3aGlsZQ0KICAgICBMREJMX01B WF9FWFAgPSAxNjM4NC4NCiAgICAgSW4gdGhlIGxvb3AgZW5kIHRlc3QsIHdlIHRlc3QgeCBhZ2Fp bnN0IEluZmluaXR5LCByYXRoZXIgdGhhbiBjb21wYXJpbmcNCiAgICAgaSB3aXRoIExEQkxfTUFY X0VYUCwgYmVjYXVzZSBCZU9TIDxmbG9hdC5oPiBoYXMgYSB3cm9uZyBMREJMX01BWF9FWFAuICAq Lw0KICB7DQogICAgaW50IGk7DQogICAgZm9yIChpID0gMSwgeCA9IDEuMEw7IHggIT0geCArIHg7 IGkrKywgeCAqPSAyLjBMKQ0KICAgICAgew0KICAgICAgICBpbnQgZXhwID0gLTk5OTk7DQogICAg ICAgIGZyZXhwbCAoeCwgJmV4cCk7DQogICAgICAgIGlmIChleHAgIT0gaSkNCiAgICAgICAgICB7 DQogICAgICAgICAgICByZXN1bHQgfD0gNDsNCiAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAg IH0NCiAgICAgIH0NCiAgfQ0KICAvKiBUZXN0IG9uIGRlbm9ybWFsaXplZCBudW1iZXJzLiAgKi8N CiAgew0KICAgIGludCBpOw0KICAgIGZvciAoaSA9IDEsIHggPSAxLjBMOyBpID49IExEQkxfTUlO X0VYUDsgaS0tLCB4ICo9IDAuNUwpDQogICAgICA7DQogICAgaWYgKHggPiAwLjBMKQ0KICAgICAg ew0KICAgICAgICBpbnQgZXhwOw0KICAgICAgICBsb25nIGRvdWJsZSB5ID0gZnJleHBsICh4LCAm ZXhwKTsNCiAgICAgICAgLyogT24gbWFjaGluZXMgd2l0aCBJRUVFODU0IGFyaXRobWV0aWM6IHgg PSAxLjY4MTA1ZS00OTMyLA0KICAgICAgICAgICBleHAgPSAtMTYzODIsIHkgPSAwLjUuICBPbiBN YWNPUyBYIDEwLjU6IGV4cCA9IC0xNjM4NCwgeSA9IDAuNS4gICovDQogICAgICAgIGlmIChleHAg IT0gTERCTF9NSU5fRVhQIC0gMSkNCiAgICAgICAgICByZXN1bHQgfD0gODsNCiAgICAgIH0NCiAg fQ0KICAvKiBUZXN0IG9uIGluZmluaXRlIG51bWJlcnMuICAqLw0KICB4ID0gMS4wTCAvIDAuMEw7 DQogIHsNCiAgICBpbnQgZXhwOw0KICAgIGxvbmcgZG91YmxlIHkgPSBmcmV4cGwgKHgsICZleHAp Ow0KICAgIGlmICh5ICE9IHgpDQogICAgICByZXN1bHQgfD0gMTY7DQogIH0NCiAgcmV0dXJuIHJl c3VsdDsNCn0NCl9BQ0VPRg0KaWYgYWNfZm5fY190cnlfcnVuICIkTElORU5PIjsgdGhlbiA6DQog IGdsX2N2X2Z1bmNfZnJleHBsX3dvcmtzPXllcw0KZWxzZQ0KICBnbF9jdl9mdW5jX2ZyZXhwbF93 b3Jrcz1ubw0KZmkNCnJtIC1mIGNvcmUgKi5jb3JlIGNvcmUuY29uZnRlc3QuKiBnbW9uLm91dCBi Yi5vdXQgY29uZnRlc3QkYWNfZXhlZXh0IFwNCiAgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVz dC5iZWFtIGNvbmZ0ZXN0LiRhY19leHQNCmZpDQoNCg0KZmkNCnsgJGFzX2VjaG8gIiRhc19tZTok e2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkZ2xfY3ZfZnVuY19mcmV4cGxfd29ya3MiID4m NQ0KJGFzX2VjaG8gIiRnbF9jdl9mdW5jX2ZyZXhwbF93b3JrcyIgPiY2OyB9DQoNCiAgICAgIGNh c2UgIiRnbF9jdl9mdW5jX2ZyZXhwbF93b3JrcyIgaW4NCiAgICAgICAgKnllcykgZ2xfZnVuY19m cmV4cGxfbm9fbGlibT15ZXMgOzsNCiAgICAgICAgKikgICAgZ2xfZnVuY19mcmV4cGxfbm9fbGli bT1ubzsgUkVQTEFDRV9GUkVYUEw9MSA7Ow0KICAgICAgZXNhYw0KICAgIGVsc2UNCiAgICAgIGds X2Z1bmNfZnJleHBsX25vX2xpYm09bm8NCiAgICAgICAgICAgIFJFUExBQ0VfRlJFWFBMPTENCiAg ICBmaQ0KICAgIGlmIHRlc3QgJGdsX2Z1bmNfZnJleHBsX25vX2xpYm0gPSB5ZXM7IHRoZW4NCg0K JGFzX2VjaG8gIiNkZWZpbmUgSEFWRV9GUkVYUExfSU5fTElCQyAxIiA+PmNvbmZkZWZzLmgNCg0K ICAgIGZpDQogIGZpDQogIGlmIHRlc3QgJEhBVkVfREVDTF9GUkVYUEwgPSAwIHx8IHRlc3QgJGds X2Z1bmNfZnJleHBsX25vX2xpYm0gPSBubzsgdGhlbg0KDQoNCg0KDQoNCg0KDQoNCiAgZ2xfTElC T0JKUz0iJGdsX0xJQk9CSlMgZnJleHBsLiRhY19vYmpleHQiDQoNCiAgZmkNCg0KDQoNCg0KICBH TlVMSUJfRlJFWFBMPTENCg0KDQoNCiRhc19lY2hvICIjZGVmaW5lIEdOVUxJQl9URVNUX0ZSRVhQ TCAxIiA+PmNvbmZkZWZzLmgNCg0KDQoNCiAgIyBDb2RlIGZyb20gbW9kdWxlIGZzZWVrbzoNCg0K DQoNCg0KDQoNCiAgaWYgdGVzdCAkYWNfY3ZfaGF2ZV9kZWNsX2ZzZWVrbyA9IG5vOyB0aGVuDQog ICAgSEFWRV9ERUNMX0ZTRUVLTz0wDQogIGZpDQoNCiAgaWYgdGVzdCAkZ2xfY3ZfZnVuY19mc2Vl a28gPSBubzsgdGhlbg0KICAgIEhBVkVfRlNFRUtPPTANCg0KDQoNCiAgaWYgdGVzdCAkZ2xfY3Zf ZnVuY19mc2Vla28gPSB5ZXM7IHRoZW4NCiAgICBSRVBMQUNFX0ZTRUVLTz0xDQogIGZpDQoNCg0K DQoNCg0KDQoNCg0KICBnbF9MSUJPQkpTPSIkZ2xfTElCT0JKUyBmc2Vla28uJGFjX29iamV4dCIN Cg0KDQoNCiAgZWxzZQ0KICAgIGlmIHRlc3QgJGdsX2N2X3Zhcl9zdGRpbl9sYXJnZV9vZmZzZXQg PSBubzsgdGhlbg0KDQoNCg0KICBpZiB0ZXN0ICRnbF9jdl9mdW5jX2ZzZWVrbyA9IHllczsgdGhl bg0KICAgIFJFUExBQ0VfRlNFRUtPPTENCiAgZmkNCg0KDQoNCg0KDQoNCg0KDQogIGdsX0xJQk9C SlM9IiRnbF9MSUJPQkpTIGZzZWVrby4kYWNfb2JqZXh0Ig0KDQoNCg0KICAgIGZpDQogIGZpDQoN Cg0KDQoNCiAgR05VTElCX0ZTRUVLTz0xDQoNCg0KDQokYXNfZWNobyAiI2RlZmluZSBHTlVMSUJf VEVTVF9GU0VFS08gMSIgPj5jb25mZGVmcy5oDQoNCg0KDQogICMgQ29kZSBmcm9tIG1vZHVsZSBm c2V0ZXJyOg0KICAjIENvZGUgZnJvbSBtb2R1bGUgZnN1c2FnZToNCg0KDQoNCiAgZm9yIGFjX2hl YWRlciBpbiBzeXMvbW91bnQuaA0KZG8gOg0KICBhY19mbl9jX2NoZWNrX2hlYWRlcl9jb21waWxl ICIkTElORU5PIiAic3lzL21vdW50LmgiICJhY19jdl9oZWFkZXJfc3lzX21vdW50X2giICIkYWNf aW5jbHVkZXNfZGVmYXVsdA0KICAgICAjaWYgSEFWRV9TWVNfUEFSQU1fSA0KICAgICAgICNpbmNs dWRlIDxzeXMvcGFyYW0uaD4NCiAgICAgICNlbmRpZg0KIg0KaWYgdGVzdCAieCRhY19jdl9oZWFk ZXJfc3lzX21vdW50X2giID0geHllczsgdGhlbiA6DQogIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNF T0YNCiNkZWZpbmUgSEFWRV9TWVNfTU9VTlRfSCAxDQpfQUNFT0YNCg0KZmkNCg0KZG9uZQ0KDQoN Cg0KeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBob3cg dG8gZ2V0IGZpbGUgc3lzdGVtIHNwYWNlIHVzYWdlIiA+JjUNCiRhc19lY2hvICIkYXNfbWU6IGNo ZWNraW5nIGhvdyB0byBnZXQgZmlsZSBzeXN0ZW0gc3BhY2UgdXNhZ2UiID4mNjt9DQphY19mc3Vz YWdlX3NwYWNlPW5vDQoNCiMgUGVyZm9ybSBvbmx5IHRoZSBsaW5rIHRlc3Qgc2luY2UgaXQgc2Vl bXMgdGhlcmUgYXJlIG5vIHZhcmlhbnRzIG9mIHRoZQ0KIyBzdGF0dmZzIGZ1bmN0aW9uLiAgVGhp cyBjaGVjayBpcyBtb3JlIHRoYW4ganVzdCBBQ19DSEVDS19GVU5DUyhbc3RhdHZmc10pDQojIGJl Y2F1c2UgdGhhdCBnb3QgYSBmYWxzZSBwb3NpdGl2ZSBvbiBTQ08gT1NSNS4gIEFkZGluZyB0aGUg ZGVjbGFyYXRpb24NCiMgb2YgYSBgc3RydWN0IHN0YXR2ZnMnIGNhdXNlcyB0aGlzIHRlc3QgdG8g ZmFpbCAoYXMgaXQgc2hvdWxkKSBvbiBzdWNoDQojIHN5c3RlbXMuICBUaGF0IHN5c3RlbSBpcyBy ZXBvcnRlZCB0byB3b3JrIGZpbmUgd2l0aCBTVEFUX1NUQVRGUzQgd2hpY2gNCiMgaXMgd2hhdCBp dCBnZXRzIHdoZW4gdGhpcyB0ZXN0IGZhaWxzLg0KaWYgdGVzdCAkYWNfZnN1c2FnZV9zcGFjZSA9 IG5vOyB0aGVuDQogICMgZ2xpYmMve0h1cmQsa0ZyZWVCU0R9LCBNYWNPUyBYID49IDEwLjQsIEZy ZWVCU0QgPj0gNS4wLCBOZXRCU0QgPj0gMy4wLA0KICAjIE9wZW5CU0QgPj0gNC40LCBBSVgsIEhQ LVVYLCBJUklYLCBTb2xhcmlzLCBDeWd3aW4sIEludGVyaXgsIEJlT1MuDQogIHsgJGFzX2VjaG8g IiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIHN0YXR2ZnMgZnVuY3Rp b24gKFNWUjQpIiA+JjUNCiRhc19lY2hvX24gImNoZWNraW5nIGZvciBzdGF0dmZzIGZ1bmN0aW9u IChTVlI0KS4uLiAiID4mNjsgfQ0KaWYgJHtmdV9jdl9zeXNfc3RhdF9zdGF0dmZzKzp9IGZhbHNl OyB0aGVuIDoNCiAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYNCmVsc2UNCiAgY2F0IGNvbmZk ZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dA0KLyogZW5kIGNvbmZkZWZzLmguICAq Lw0KI2luY2x1ZGUgPHN5cy90eXBlcy5oPg0KI2lmIChkZWZpbmVkIF9fR0xJQkNfXyB8fCBkZWZp bmVkIF9fVUNMSUJDX18pICYmIGRlZmluZWQgX19saW51eF9fDQpEbyBub3QgdXNlIHN0YXR2ZnMg b24gc3lzdGVtcyB3aXRoIEdOVSBsaWJjIG9uIExpbnV4LCBiZWNhdXNlIHRoYXQgZnVuY3Rpb24N CnN0YXRzIGFsbCBwcmVjZWRpbmcgZW50cmllcyBpbiAvcHJvYy9tb3VudHMsIGFuZCB0aGF0IG1h a2VzIGRmIGhhbmcgaWYgZXZlbg0Kb25lIG9mIHRoZSBjb3JyZXNwb25kaW5nIGZpbGUgc3lzdGVt cyBpcyBoYXJkLW1vdW50ZWQsIGJ1dCBub3QgYXZhaWxhYmxlLg0Kc3RhdHZmcyBpbiBHTlUgbGli YyBvbiBIdXJkLCBCZU9TLCBIYWlrdSBvcGVyYXRlcyBkaWZmZXJlbnRseTogaXQgb25seSBtYWtl cw0KYSBzeXN0ZW0gY2FsbC4NCiNlbmRpZg0KDQojaWZkZWYgX19vc2ZfXw0KIkRvIG5vdCB1c2Ug VHJ1NjQncyBzdGF0dmZzIGltcGxlbWVudGF0aW9uIg0KI2VuZGlmDQoNCiNpbmNsdWRlIDxzeXMv c3RhdHZmcy5oPg0KaW50DQptYWluICgpDQp7DQpzdHJ1Y3Qgc3RhdHZmcyBmc2Q7IHN0YXR2ZnMg KDAsICZmc2QpOw0KICA7DQogIHJldHVybiAwOw0KfQ0KX0FDRU9GDQppZiBhY19mbl9jX3RyeV9s aW5rICIkTElORU5PIjsgdGhlbiA6DQogIGZ1X2N2X3N5c19zdGF0X3N0YXR2ZnM9eWVzDQplbHNl DQogIGZ1X2N2X3N5c19zdGF0X3N0YXR2ZnM9bm8NCmZpDQpybSAtZiBjb3JlIGNvbmZ0ZXN0LmVy ciBjb25mdGVzdC4kYWNfb2JqZXh0IFwNCiAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3Qu JGFjX2V4dA0KZmkNCnsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVz dWx0OiAkZnVfY3Zfc3lzX3N0YXRfc3RhdHZmcyIgPiY1DQokYXNfZWNobyAiJGZ1X2N2X3N5c19z dGF0X3N0YXR2ZnMiID4mNjsgfQ0KICBpZiB0ZXN0ICRmdV9jdl9zeXNfc3RhdF9zdGF0dmZzID0g eWVzOyB0aGVuDQogICAgYWNfZnN1c2FnZV9zcGFjZT15ZXMNCg0KJGFzX2VjaG8gIiNkZWZpbmUg U1RBVF9TVEFUVkZTIDEiID4+Y29uZmRlZnMuaA0KDQogIGZpDQpmaQ0KDQppZiB0ZXN0ICRhY19m c3VzYWdlX3NwYWNlID0gbm87IHRoZW4NCiAgIyBERUMgQWxwaGEgcnVubmluZyBPU0YvMQ0KICB7 ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAzLWFy Z3VtZW50IHN0YXRmcyBmdW5jdGlvbiAoREVDIE9TRi8xKSIgPiY1DQokYXNfZWNob19uICJjaGVj a2luZyBmb3IgMy1hcmd1bWVudCBzdGF0ZnMgZnVuY3Rpb24gKERFQyBPU0YvMSkuLi4gIiA+JjY7 IH0NCiAgaWYgJHtmdV9jdl9zeXNfc3RhdF9zdGF0ZnMzX29zZjErOn0gZmFsc2U7IHRoZW4gOg0K ICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNg0KZWxzZQ0KICBpZiB0ZXN0ICIkY3Jvc3NfY29t cGlsaW5nIiA9IHllczsgdGhlbiA6DQogIGZ1X2N2X3N5c19zdGF0X3N0YXRmczNfb3NmMT1ubw0K ZWxzZQ0KICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0DQovKiBl bmQgY29uZmRlZnMuaC4gICovDQoNCiNpbmNsdWRlIDxzeXMvcGFyYW0uaD4NCiNpbmNsdWRlIDxz eXMvdHlwZXMuaD4NCiNpbmNsdWRlIDxzeXMvbW91bnQuaD4NCiAgaW50DQogIG1haW4gKCkNCiAg ew0KICAgIHN0cnVjdCBzdGF0ZnMgZnNkOw0KICAgIGZzZC5mX2ZzaXplID0gMDsNCiAgICByZXR1 cm4gc3RhdGZzICgiLiIsICZmc2QsIHNpemVvZiAoc3RydWN0IHN0YXRmcykpICE9IDA7DQogIH0N Cl9BQ0VPRg0KaWYgYWNfZm5fY190cnlfcnVuICIkTElORU5PIjsgdGhlbiA6DQogIGZ1X2N2X3N5 c19zdGF0X3N0YXRmczNfb3NmMT15ZXMNCmVsc2UNCiAgZnVfY3Zfc3lzX3N0YXRfc3RhdGZzM19v c2YxPW5vDQpmaQ0Kcm0gLWYgY29yZSAqLmNvcmUgY29yZS5jb25mdGVzdC4qIGdtb24ub3V0IGJi Lm91dCBjb25mdGVzdCRhY19leGVleHQgXA0KICBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0 LmJlYW0gY29uZnRlc3QuJGFjX2V4dA0KZmkNCg0KZmkNCg0KICB7ICRhc19lY2hvICIkYXNfbWU6 JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGZ1X2N2X3N5c19zdGF0X3N0YXRmczNfb3Nm MSIgPiY1DQokYXNfZWNobyAiJGZ1X2N2X3N5c19zdGF0X3N0YXRmczNfb3NmMSIgPiY2OyB9DQog IGlmIHRlc3QgJGZ1X2N2X3N5c19zdGF0X3N0YXRmczNfb3NmMSA9IHllczsgdGhlbg0KICAgIGFj X2ZzdXNhZ2Vfc3BhY2U9eWVzDQoNCiRhc19lY2hvICIjZGVmaW5lIFNUQVRfU1RBVEZTM19PU0Yx IDEiID4+Y29uZmRlZnMuaA0KDQogIGZpDQpmaQ0KDQppZiB0ZXN0ICRhY19mc3VzYWdlX3NwYWNl ID0gbm87IHRoZW4NCiAgIyBnbGliYy9MaW51eCwgTWFjT1MgWCA8IDEwLjQsIEZyZWVCU0QgPCA1 LjAsIE5ldEJTRCA8IDMuMCwgT3BlbkJTRCA8IDQuNC4NCiAgIyAoZ2xpYmMve0h1cmQsa0ZyZWVC U0R9LCBNYWNPUyBYID49IDEwLjQsIEZyZWVCU0QgPj0gNS4wLCBOZXRCU0QgPj0gMy4wLA0KICAj IE9wZW5CU0QgPj0gNC40LCBBSVgsIEhQLVVYLCBPU0YvMSwgQ3lnd2luIGFscmVhZHkgaGFuZGxl ZCBhYm92ZS4pDQogICMgKE9uIElSSVggeW91IG5lZWQgdG8gaW5jbHVkZSA8c3lzL3N0YXRmcy5o Piwgbm90IG9ubHkgPHN5cy9tb3VudC5oPiBhbmQNCiAgIyA8c3lzL3Zmcy5oPi4pDQogICMgKE9u IFNvbGFyaXMsIHN0YXRmcyBoYXMgNCBhcmd1bWVudHMuKQ0KICB7ICRhc19lY2hvICIkYXNfbWU6 JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciB0d28tYXJndW1lbnQgc3RhdGZzIHdp dGggc3RhdGZzLmZfYnNpemUgbWVtYmVyIChBSVgsIDQuM0JTRCkiID4mNQ0KJGFzX2VjaG9fbiAi Y2hlY2tpbmcgZm9yIHR3by1hcmd1bWVudCBzdGF0ZnMgd2l0aCBzdGF0ZnMuZl9ic2l6ZSBtZW1i ZXIgKEFJWCwgNC4zQlNEKS4uLiAiID4mNjsgfQ0KICBpZiAke2Z1X2N2X3N5c19zdGF0X3N0YXRm czJfYnNpemUrOn0gZmFsc2U7IHRoZW4gOg0KICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNg0K ZWxzZQ0KICBpZiB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IHllczsgdGhlbiA6DQogIGZ1X2N2 X3N5c19zdGF0X3N0YXRmczJfYnNpemU9bm8NCmVsc2UNCiAgY2F0IGNvbmZkZWZzLmggLSA8PF9B Q0VPRiA+Y29uZnRlc3QuJGFjX2V4dA0KLyogZW5kIGNvbmZkZWZzLmguICAqLw0KDQojaWZkZWYg SEFWRV9TWVNfUEFSQU1fSA0KI2luY2x1ZGUgPHN5cy9wYXJhbS5oPg0KI2VuZGlmDQojaWZkZWYg SEFWRV9TWVNfTU9VTlRfSA0KI2luY2x1ZGUgPHN5cy9tb3VudC5oPg0KI2VuZGlmDQojaWZkZWYg SEFWRV9TWVNfVkZTX0gNCiNpbmNsdWRlIDxzeXMvdmZzLmg+DQojZW5kaWYNCiAgaW50DQogIG1h aW4gKCkNCiAgew0KICBzdHJ1Y3Qgc3RhdGZzIGZzZDsNCiAgZnNkLmZfYnNpemUgPSAwOw0KICBy ZXR1cm4gc3RhdGZzICgiLiIsICZmc2QpICE9IDA7DQogIH0NCl9BQ0VPRg0KaWYgYWNfZm5fY190 cnlfcnVuICIkTElORU5PIjsgdGhlbiA6DQogIGZ1X2N2X3N5c19zdGF0X3N0YXRmczJfYnNpemU9 eWVzDQplbHNlDQogIGZ1X2N2X3N5c19zdGF0X3N0YXRmczJfYnNpemU9bm8NCmZpDQpybSAtZiBj b3JlICouY29yZSBjb3JlLmNvbmZ0ZXN0LiogZ21vbi5vdXQgYmIub3V0IGNvbmZ0ZXN0JGFjX2V4 ZWV4dCBcDQogIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuYmVhbSBjb25mdGVzdC4kYWNf ZXh0DQpmaQ0KDQpmaQ0KDQogIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5P fTogcmVzdWx0OiAkZnVfY3Zfc3lzX3N0YXRfc3RhdGZzMl9ic2l6ZSIgPiY1DQokYXNfZWNobyAi JGZ1X2N2X3N5c19zdGF0X3N0YXRmczJfYnNpemUiID4mNjsgfQ0KICBpZiB0ZXN0ICRmdV9jdl9z eXNfc3RhdF9zdGF0ZnMyX2JzaXplID0geWVzOyB0aGVuDQogICAgYWNfZnN1c2FnZV9zcGFjZT15 ZXMNCg0KJGFzX2VjaG8gIiNkZWZpbmUgU1RBVF9TVEFURlMyX0JTSVpFIDEiID4+Y29uZmRlZnMu aA0KDQogIGZpDQpmaQ0KDQppZiB0ZXN0ICRhY19mc3VzYWdlX3NwYWNlID0gbm87IHRoZW4NCiAg IyBTVlIzDQogICMgKFNvbGFyaXMgYWxyZWFkeSBoYW5kbGVkIGFib3ZlLikNCiAgeyAkYXNfZWNo byAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgZm91ci1hcmd1bWVu dCBzdGF0ZnMgKEFJWC0zLjIuNSwgU1ZSMykiID4mNQ0KJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9y IGZvdXItYXJndW1lbnQgc3RhdGZzIChBSVgtMy4yLjUsIFNWUjMpLi4uICIgPiY2OyB9DQogIGlm ICR7ZnVfY3Zfc3lzX3N0YXRfc3RhdGZzNCs6fSBmYWxzZTsgdGhlbiA6DQogICRhc19lY2hvX24g IihjYWNoZWQpICIgPiY2DQplbHNlDQogIGlmIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0geWVz OyB0aGVuIDoNCiAgZnVfY3Zfc3lzX3N0YXRfc3RhdGZzND1ubw0KZWxzZQ0KICBjYXQgY29uZmRl ZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0DQovKiBlbmQgY29uZmRlZnMuaC4gICov DQoNCiNpbmNsdWRlIDxzeXMvdHlwZXMuaD4NCiNpbmNsdWRlIDxzeXMvc3RhdGZzLmg+DQogIGlu dA0KICBtYWluICgpDQogIHsNCiAgc3RydWN0IHN0YXRmcyBmc2Q7DQogIHJldHVybiBzdGF0ZnMg KCIuIiwgJmZzZCwgc2l6ZW9mIGZzZCwgMCkgIT0gMDsNCiAgfQ0KX0FDRU9GDQppZiBhY19mbl9j X3RyeV9ydW4gIiRMSU5FTk8iOyB0aGVuIDoNCiAgZnVfY3Zfc3lzX3N0YXRfc3RhdGZzND15ZXMN CmVsc2UNCiAgZnVfY3Zfc3lzX3N0YXRfc3RhdGZzND1ubw0KZmkNCnJtIC1mIGNvcmUgKi5jb3Jl IGNvcmUuY29uZnRlc3QuKiBnbW9uLm91dCBiYi5vdXQgY29uZnRlc3QkYWNfZXhlZXh0IFwNCiAg Y29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC5iZWFtIGNvbmZ0ZXN0LiRhY19leHQNCmZpDQoN CmZpDQoNCiAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6 ICRmdV9jdl9zeXNfc3RhdF9zdGF0ZnM0IiA+JjUNCiRhc19lY2hvICIkZnVfY3Zfc3lzX3N0YXRf c3RhdGZzNCIgPiY2OyB9DQogIGlmIHRlc3QgJGZ1X2N2X3N5c19zdGF0X3N0YXRmczQgPSB5ZXM7 IHRoZW4NCiAgICBhY19mc3VzYWdlX3NwYWNlPXllcw0KDQokYXNfZWNobyAiI2RlZmluZSBTVEFU X1NUQVRGUzQgMSIgPj5jb25mZGVmcy5oDQoNCiAgZmkNCmZpDQoNCmlmIHRlc3QgJGFjX2ZzdXNh Z2Vfc3BhY2UgPSBubzsgdGhlbg0KICAjIDQuNEJTRCBhbmQgb2xkZXIgTmV0QlNEDQogICMgKE9T Ri8xIGFscmVhZHkgaGFuZGxlZCBhYm92ZS4pDQogICMgKE9uIEFJWCwgeW91IG5lZWQgdG8gaW5j bHVkZSA8c3lzL3N0YXRmcy5oPiwgbm90IG9ubHkgPHN5cy9tb3VudC5oPi4pDQogICMgKE9uIFNv bGFyaXMsIHN0YXRmcyBoYXMgNCBhcmd1bWVudHMgYW5kICdzdHJ1Y3Qgc3RhdGZzJyBpcyBub3Qg ZGVjbGFyZWQgaW4NCiAgIyA8c3lzL21vdW50Lmg+LikNCiAgeyAkYXNfZWNobyAiJGFzX21lOiR7 YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgdHdvLWFyZ3VtZW50IHN0YXRmcyB3aXRo IHN0YXRmcy5mX2ZzaXplIG1lbWJlciAoNC40QlNEIGFuZCBOZXRCU0QpIiA+JjUNCiRhc19lY2hv X24gImNoZWNraW5nIGZvciB0d28tYXJndW1lbnQgc3RhdGZzIHdpdGggc3RhdGZzLmZfZnNpemUg bWVtYmVyICg0LjRCU0QgYW5kIE5ldEJTRCkuLi4gIiA+JjY7IH0NCiAgaWYgJHtmdV9jdl9zeXNf c3RhdF9zdGF0ZnMyX2ZzaXplKzp9IGZhbHNlOyB0aGVuIDoNCiAgJGFzX2VjaG9fbiAiKGNhY2hl ZCkgIiA+JjYNCmVsc2UNCiAgaWYgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgPSB5ZXM7IHRoZW4g Og0KICBmdV9jdl9zeXNfc3RhdF9zdGF0ZnMyX2ZzaXplPW5vDQplbHNlDQogIGNhdCBjb25mZGVm cy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQNCi8qIGVuZCBjb25mZGVmcy5oLiAgKi8N Cg0KI2luY2x1ZGUgPHN5cy90eXBlcy5oPg0KI2lmZGVmIEhBVkVfU1lTX1BBUkFNX0gNCiNpbmNs dWRlIDxzeXMvcGFyYW0uaD4NCiNlbmRpZg0KI2lmZGVmIEhBVkVfU1lTX01PVU5UX0gNCiNpbmNs dWRlIDxzeXMvbW91bnQuaD4NCiNlbmRpZg0KICBpbnQNCiAgbWFpbiAoKQ0KICB7DQogIHN0cnVj dCBzdGF0ZnMgZnNkOw0KICBmc2QuZl9mc2l6ZSA9IDA7DQogIHJldHVybiBzdGF0ZnMgKCIuIiwg JmZzZCkgIT0gMDsNCiAgfQ0KX0FDRU9GDQppZiBhY19mbl9jX3RyeV9ydW4gIiRMSU5FTk8iOyB0 aGVuIDoNCiAgZnVfY3Zfc3lzX3N0YXRfc3RhdGZzMl9mc2l6ZT15ZXMNCmVsc2UNCiAgZnVfY3Zf c3lzX3N0YXRfc3RhdGZzMl9mc2l6ZT1ubw0KZmkNCnJtIC1mIGNvcmUgKi5jb3JlIGNvcmUuY29u ZnRlc3QuKiBnbW9uLm91dCBiYi5vdXQgY29uZnRlc3QkYWNfZXhlZXh0IFwNCiAgY29uZnRlc3Qu JGFjX29iamV4dCBjb25mdGVzdC5iZWFtIGNvbmZ0ZXN0LiRhY19leHQNCmZpDQoNCmZpDQoNCiAg eyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRmdV9jdl9z eXNfc3RhdF9zdGF0ZnMyX2ZzaXplIiA+JjUNCiRhc19lY2hvICIkZnVfY3Zfc3lzX3N0YXRfc3Rh dGZzMl9mc2l6ZSIgPiY2OyB9DQogIGlmIHRlc3QgJGZ1X2N2X3N5c19zdGF0X3N0YXRmczJfZnNp emUgPSB5ZXM7IHRoZW4NCiAgICBhY19mc3VzYWdlX3NwYWNlPXllcw0KDQokYXNfZWNobyAiI2Rl ZmluZSBTVEFUX1NUQVRGUzJfRlNJWkUgMSIgPj5jb25mZGVmcy5oDQoNCiAgZmkNCmZpDQoNCmlm IHRlc3QgJGFjX2ZzdXNhZ2Vfc3BhY2UgPSBubzsgdGhlbg0KICAjIFVsdHJpeA0KICB7ICRhc19l Y2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciB0d28tYXJndW1l bnQgc3RhdGZzIHdpdGggc3RydWN0IGZzX2RhdGEgKFVsdHJpeCkiID4mNQ0KJGFzX2VjaG9fbiAi Y2hlY2tpbmcgZm9yIHR3by1hcmd1bWVudCBzdGF0ZnMgd2l0aCBzdHJ1Y3QgZnNfZGF0YSAoVWx0 cml4KS4uLiAiID4mNjsgfQ0KICBpZiAke2Z1X2N2X3N5c19zdGF0X2ZzX2RhdGErOn0gZmFsc2U7 IHRoZW4gOg0KICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNg0KZWxzZQ0KICBpZiB0ZXN0ICIk Y3Jvc3NfY29tcGlsaW5nIiA9IHllczsgdGhlbiA6DQogIGZ1X2N2X3N5c19zdGF0X2ZzX2RhdGE9 bm8NCmVsc2UNCiAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dA0K LyogZW5kIGNvbmZkZWZzLmguICAqLw0KDQojaW5jbHVkZSA8c3lzL3R5cGVzLmg+DQojaWZkZWYg SEFWRV9TWVNfUEFSQU1fSA0KI2luY2x1ZGUgPHN5cy9wYXJhbS5oPg0KI2VuZGlmDQojaWZkZWYg SEFWRV9TWVNfTU9VTlRfSA0KI2luY2x1ZGUgPHN5cy9tb3VudC5oPg0KI2VuZGlmDQojaWZkZWYg SEFWRV9TWVNfRlNfVFlQRVNfSA0KI2luY2x1ZGUgPHN5cy9mc190eXBlcy5oPg0KI2VuZGlmDQog IGludA0KICBtYWluICgpDQogIHsNCiAgc3RydWN0IGZzX2RhdGEgZnNkOw0KICAvKiBVbHRyaXgn cyBzdGF0ZnMgcmV0dXJucyAxIGZvciBzdWNjZXNzLA0KICAgICAwIGZvciBub3QgbW91bnRlZCwg LTEgZm9yIGZhaWx1cmUuICAqLw0KICByZXR1cm4gc3RhdGZzICgiLiIsICZmc2QpICE9IDE7DQog IH0NCl9BQ0VPRg0KaWYgYWNfZm5fY190cnlfcnVuICIkTElORU5PIjsgdGhlbiA6DQogIGZ1X2N2 X3N5c19zdGF0X2ZzX2RhdGE9eWVzDQplbHNlDQogIGZ1X2N2X3N5c19zdGF0X2ZzX2RhdGE9bm8N CmZpDQpybSAtZiBjb3JlICouY29yZSBjb3JlLmNvbmZ0ZXN0LiogZ21vbi5vdXQgYmIub3V0IGNv bmZ0ZXN0JGFjX2V4ZWV4dCBcDQogIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuYmVhbSBj b25mdGVzdC4kYWNfZXh0DQpmaQ0KDQpmaQ0KDQogIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xp bmVuby0kTElORU5PfTogcmVzdWx0OiAkZnVfY3Zfc3lzX3N0YXRfZnNfZGF0YSIgPiY1DQokYXNf ZWNobyAiJGZ1X2N2X3N5c19zdGF0X2ZzX2RhdGEiID4mNjsgfQ0KICBpZiB0ZXN0ICRmdV9jdl9z eXNfc3RhdF9mc19kYXRhID0geWVzOyB0aGVuDQogICAgYWNfZnN1c2FnZV9zcGFjZT15ZXMNCg0K JGFzX2VjaG8gIiNkZWZpbmUgU1RBVF9TVEFURlMyX0ZTX0RBVEEgMSIgPj5jb25mZGVmcy5oDQoN CiAgZmkNCmZpDQoNCmlmIHRlc3QgJGFjX2ZzdXNhZ2Vfc3BhY2UgPSBubzsgdGhlbg0KICAjIFNW UjINCiAgIyAoQUlYLCBIUC1VWCwgT1NGLzEgYWxyZWFkeSBoYW5kbGVkIGFib3ZlLikNCiAgY2F0 IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dA0KLyogZW5kIGNvbmZkZWZz LmguICAqLw0KI2luY2x1ZGUgPHN5cy9maWxzeXMuaD4NCg0KX0FDRU9GDQppZiBhY19mbl9jX3Ry eV9jcHAgIiRMSU5FTk8iOyB0aGVuIDoNCg0KJGFzX2VjaG8gIiNkZWZpbmUgU1RBVF9SRUFEX0ZJ TFNZUyAxIiA+PmNvbmZkZWZzLmgNCg0KICAgICBhY19mc3VzYWdlX3NwYWNlPXllcw0KZmkNCnJt IC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC5pIGNvbmZ0ZXN0LiRhY19leHQNCmZpDQoNCmlmIHRl c3QgJGFjX2ZzdXNhZ2Vfc3BhY2UgPSB5ZXM7IHRoZW4gOg0KICBnbF9jdl9mc19zcGFjZT15ZXMN CmVsc2UNCiAgZ2xfY3ZfZnNfc3BhY2U9bm8NCmZpDQoNCg0KICBpZiB0ZXN0ICRnbF9jdl9mc19z cGFjZSA9IHllczsgdGhlbg0KDQoNCg0KDQoNCg0KDQoNCiAgZ2xfTElCT0JKUz0iJGdsX0xJQk9C SlMgZnN1c2FnZS4kYWNfb2JqZXh0Ig0KDQoNCiAgZm9yIGFjX2hlYWRlciBpbiBkdXN0YXQuaCBz eXMvZnMvczVwYXJhbS5oIHN5cy9maWxzeXMuaCBzeXMvc3RhdGZzLmgNCmRvIDoNCiAgYXNfYWNf SGVhZGVyPWAkYXNfZWNobyAiYWNfY3ZfaGVhZGVyXyRhY19oZWFkZXIiIHwgJGFzX3RyX3NoYA0K YWNfZm5fY19jaGVja19oZWFkZXJfbW9uZ3JlbCAiJExJTkVOTyIgIiRhY19oZWFkZXIiICIkYXNf YWNfSGVhZGVyIiAiJGFjX2luY2x1ZGVzX2RlZmF1bHQiDQppZiBldmFsIHRlc3QgXCJ4XCQiJGFz X2FjX0hlYWRlciJcIiA9IHgieWVzIjsgdGhlbiA6DQogIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNF T0YNCiNkZWZpbmUgYCRhc19lY2hvICJIQVZFXyRhY19oZWFkZXIiIHwgJGFzX3RyX2NwcGAgMQ0K X0FDRU9GDQoNCmZpDQoNCmRvbmUNCg0KDQogIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVu by0kTElORU5PfTogY2hlY2tpbmcgZm9yIHN0YXRmcyB0aGF0IHRydW5jYXRlcyBibG9jayBjb3Vu dHMiID4mNQ0KJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIHN0YXRmcyB0aGF0IHRydW5jYXRlcyBi bG9jayBjb3VudHMuLi4gIiA+JjY7IH0NCiAgaWYgJHtmdV9jdl9zeXNfdHJ1bmNhdGluZ19zdGF0 ZnMrOn0gZmFsc2U7IHRoZW4gOg0KICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNg0KZWxzZQ0K ICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0DQovKiBlbmQgY29u ZmRlZnMuaC4gICovDQoNCiNpZiAhZGVmaW5lZChzdW4pICYmICFkZWZpbmVkKF9fc3VuKQ0KY2hv a2UgLS0gdGhpcyBpcyBhIHdvcmthcm91bmQgZm9yIGEgU3VuLXNwZWNpZmljIHByb2JsZW0NCiNl bmRpZg0KI2luY2x1ZGUgPHN5cy90eXBlcy5oPg0KI2luY2x1ZGUgPHN5cy92ZnMuaD4NCmludA0K bWFpbiAoKQ0Kew0Kc3RydWN0IHN0YXRmcyB0OyBsb25nIGMgPSAqKHQuZl9zcGFyZSk7DQogICAg ICAgIGlmIChjKSByZXR1cm4gMDsNCiAgOw0KICByZXR1cm4gMDsNCn0NCl9BQ0VPRg0KaWYgYWNf Zm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOg0KICBmdV9jdl9zeXNfdHJ1bmNhdGlu Z19zdGF0ZnM9eWVzDQplbHNlDQogIGZ1X2N2X3N5c190cnVuY2F0aW5nX3N0YXRmcz1ubw0KZmkN CnJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFj X2V4dA0KZmkNCg0KICBpZiB0ZXN0ICRmdV9jdl9zeXNfdHJ1bmNhdGluZ19zdGF0ZnMgPSB5ZXM7 IHRoZW4NCg0KJGFzX2VjaG8gIiNkZWZpbmUgU1RBVEZTX1RSVU5DQVRFU19CTE9DS19DT1VOVFMg MSIgPj5jb25mZGVmcy5oDQoNCiAgZmkNCiAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5v LSRMSU5FTk99OiByZXN1bHQ6ICRmdV9jdl9zeXNfdHJ1bmNhdGluZ19zdGF0ZnMiID4mNQ0KJGFz X2VjaG8gIiRmdV9jdl9zeXNfdHJ1bmNhdGluZ19zdGF0ZnMiID4mNjsgfQ0KDQoNCiAgZmkNCg0K ICAjIENvZGUgZnJvbSBtb2R1bGUgZnN5bmM6DQoNCg0KDQogIGlmIHRlc3QgJGFjX2N2X2Z1bmNf ZnN5bmMgPSBubzsgdGhlbg0KICAgIEhBVkVfRlNZTkM9MA0KDQoNCg0KDQoNCg0KDQoNCiAgZ2xf TElCT0JKUz0iJGdsX0xJQk9CSlMgZnN5bmMuJGFjX29iamV4dCINCg0KICAgIDoNCiAgZmkNCg0K DQoNCg0KICBHTlVMSUJfRlNZTkM9MQ0KDQoNCg0KJGFzX2VjaG8gIiNkZWZpbmUgR05VTElCX1RF U1RfRlNZTkMgMSIgPj5jb25mZGVmcy5oDQoNCg0KDQogICMgQ29kZSBmcm9tIG1vZHVsZSBmdGVs bG86DQoNCg0KDQoNCg0KDQoNCg0KICBpZiB0ZXN0ICRhY19jdl9oYXZlX2RlY2xfZnRlbGxvID0g bm87IHRoZW4NCiAgICBIQVZFX0RFQ0xfRlRFTExPPTANCiAgZmkNCg0KICB7ICRhc19lY2hvICIk YXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBmdGVsbG8iID4mNQ0KJGFz X2VjaG9fbiAiY2hlY2tpbmcgZm9yIGZ0ZWxsby4uLiAiID4mNjsgfQ0KaWYgJHtnbF9jdl9mdW5j X2Z0ZWxsbys6fSBmYWxzZTsgdGhlbiA6DQogICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2DQpl bHNlDQoNCiAgICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQN Ci8qIGVuZCBjb25mZGVmcy5oLiAgKi8NCiNpbmNsdWRlIDxzdGRpby5oPg0KaW50DQptYWluICgp DQp7DQpmdGVsbG8gKHN0ZGluKTsNCiAgOw0KICByZXR1cm4gMDsNCn0NCl9BQ0VPRg0KaWYgYWNf Zm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOg0KICBnbF9jdl9mdW5jX2Z0ZWxsbz15ZXMN CmVsc2UNCiAgZ2xfY3ZfZnVuY19mdGVsbG89bm8NCmZpDQpybSAtZiBjb3JlIGNvbmZ0ZXN0LmVy ciBjb25mdGVzdC4kYWNfb2JqZXh0IFwNCiAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3Qu JGFjX2V4dA0KDQpmaQ0KeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBy ZXN1bHQ6ICRnbF9jdl9mdW5jX2Z0ZWxsbyIgPiY1DQokYXNfZWNobyAiJGdsX2N2X2Z1bmNfZnRl bGxvIiA+JjY7IH0NCiAgaWYgdGVzdCAkZ2xfY3ZfZnVuY19mdGVsbG8gPSBubzsgdGhlbg0KICAg IEhBVkVfRlRFTExPPTANCiAgZWxzZQ0KICAgIGlmIHRlc3QgJGdsX2N2X3Zhcl9zdGRpbl9sYXJn ZV9vZmZzZXQgPSBubzsgdGhlbg0KICAgICAgUkVQTEFDRV9GVEVMTE89MQ0KICAgIGVsc2UNCg0K ICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3 aGV0aGVyIGZ0ZWxsbyB3b3JrcyIgPiY1DQokYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIGZ0 ZWxsbyB3b3Jrcy4uLiAiID4mNjsgfQ0KaWYgJHtnbF9jdl9mdW5jX2Z0ZWxsb193b3Jrcys6fSBm YWxzZTsgdGhlbiA6DQogICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2DQplbHNlDQoNCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgIiRob3N0X29zIiBpbg0KICAgICAgICAgICAg ICAgICAgICAgICMgR3Vlc3Mgbm8gb24gU29sYXJpcy4NCiAgICAgICAgICAgIHNvbGFyaXMqKSBn bF9jdl9mdW5jX2Z0ZWxsb193b3Jrcz0iZ3Vlc3Npbmcgbm8iIDs7DQogICAgICAgICAgICAgICAg ICAgICAgIyBHdWVzcyB5ZXMgb3RoZXJ3aXNlLg0KICAgICAgICAgICAgKikgICAgICAgIGdsX2N2 X2Z1bmNfZnRlbGxvX3dvcmtzPSJndWVzc2luZyB5ZXMiIDs7DQogICAgICAgICAgZXNhYw0KICAg ICAgICAgIGlmIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0geWVzOyB0aGVuIDoNCiAgOg0KZWxz ZQ0KICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0DQovKiBlbmQg Y29uZmRlZnMuaC4gICovDQoNCiNpbmNsdWRlIDxzdGRpby5oPg0KI2luY2x1ZGUgPHN0ZGxpYi5o Pg0KI2luY2x1ZGUgPHN0cmluZy5oPg0KI2RlZmluZSBURVNURklMRSAiY29uZnRlc3QudG1wIg0K aW50DQptYWluICh2b2lkKQ0Kew0KICBGSUxFICpmcDsNCg0KICAvKiBDcmVhdGUgYSBmaWxlIHdp dGggc29tZSBjb250ZW50cy4gICovDQogIGZwID0gZm9wZW4gKFRFU1RGSUxFLCAidyIpOw0KICBp ZiAoZnAgPT0gTlVMTCkNCiAgICByZXR1cm4gNzA7DQogIGlmIChmd3JpdGUgKCJmb29nYXJzaCIs IDEsIDgsIGZwKSA8IDgpDQogICAgcmV0dXJuIDcxOw0KICBpZiAoZmNsb3NlIChmcCkpDQogICAg cmV0dXJuIDcyOw0KDQogIC8qIFRoZSBmaWxlJ3MgY29udGVudHMgaXMgbm93ICJmb29nYXJzaCIu ICAqLw0KDQogIC8qIFRyeSB3cml0aW5nIGFmdGVyIHJlYWRpbmcgdG8gRU9GLiAgKi8NCiAgZnAg PSBmb3BlbiAoVEVTVEZJTEUsICJyKyIpOw0KICBpZiAoZnAgPT0gTlVMTCkNCiAgICByZXR1cm4g NzM7DQogIGlmIChmc2VlayAoZnAsIC0xLCBTRUVLX0VORCkpDQogICAgcmV0dXJuIDc0Ow0KICBp ZiAoIShnZXRjIChmcCkgPT0gJ2gnKSkNCiAgICByZXR1cm4gMTsNCiAgaWYgKCEoZ2V0YyAoZnAp ID09IEVPRikpDQogICAgcmV0dXJuIDI7DQogIGlmICghKGZ0ZWxsIChmcCkgPT0gOCkpDQogICAg cmV0dXJuIDM7DQogIGlmICghKGZ0ZWxsIChmcCkgPT0gOCkpDQogICAgcmV0dXJuIDQ7DQogIGlm ICghKHB1dGMgKCchJywgZnApID09ICchJykpDQogICAgcmV0dXJuIDU7DQogIGlmICghKGZ0ZWxs IChmcCkgPT0gOSkpDQogICAgcmV0dXJuIDY7DQogIGlmICghKGZjbG9zZSAoZnApID09IDApKQ0K ICAgIHJldHVybiA3Ow0KICBmcCA9IGZvcGVuIChURVNURklMRSwgInIiKTsNCiAgaWYgKGZwID09 IE5VTEwpDQogICAgcmV0dXJuIDc1Ow0KICB7DQogICAgY2hhciBidWZbMTBdOw0KICAgIGlmICgh KGZyZWFkIChidWYsIDEsIDEwLCBmcCkgPT0gOSkpDQogICAgICByZXR1cm4gMTA7DQogICAgaWYg KCEobWVtY21wIChidWYsICJmb29nYXJzaCEiLCA5KSA9PSAwKSkNCiAgICAgIHJldHVybiAxMTsN CiAgfQ0KICBpZiAoIShmY2xvc2UgKGZwKSA9PSAwKSkNCiAgICByZXR1cm4gMTI7DQoNCiAgLyog VGhlIGZpbGUncyBjb250ZW50cyBpcyBub3cgImZvb2dhcnNoISIuICAqLw0KDQogIHJldHVybiAw Ow0KfQ0KX0FDRU9GDQppZiBhY19mbl9jX3RyeV9ydW4gIiRMSU5FTk8iOyB0aGVuIDoNCiAgZ2xf Y3ZfZnVuY19mdGVsbG9fd29ya3M9eWVzDQplbHNlDQogIGdsX2N2X2Z1bmNfZnRlbGxvX3dvcmtz PW5vDQpmaQ0Kcm0gLWYgY29yZSAqLmNvcmUgY29yZS5jb25mdGVzdC4qIGdtb24ub3V0IGJiLm91 dCBjb25mdGVzdCRhY19leGVleHQgXA0KICBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LmJl YW0gY29uZnRlc3QuJGFjX2V4dA0KZmkNCg0KDQpmaQ0KeyAkYXNfZWNobyAiJGFzX21lOiR7YXNf bGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRnbF9jdl9mdW5jX2Z0ZWxsb193b3JrcyIgPiY1DQok YXNfZWNobyAiJGdsX2N2X2Z1bmNfZnRlbGxvX3dvcmtzIiA+JjY7IH0NCiAgICAgIGNhc2UgIiRn bF9jdl9mdW5jX2Z0ZWxsb193b3JrcyIgaW4NCiAgICAgICAgKnllcykgOzsNCiAgICAgICAgKikN CiAgICAgICAgICBSRVBMQUNFX0ZURUxMTz0xDQoNCiRhc19lY2hvICIjZGVmaW5lIEZURUxMT19C Uk9LRU5fQUZURVJfU1dJVENISU5HX0ZST01fUkVBRF9UT19XUklURSAxIiA+PmNvbmZkZWZzLmgN Cg0KICAgICAgICAgIDs7DQogICAgICBlc2FjDQogICAgZmkNCiAgZmkNCiAgaWYgdGVzdCAkSEFW RV9GVEVMTE8gPSAwIHx8IHRlc3QgJFJFUExBQ0VfRlRFTExPID0gMTsgdGhlbg0KDQoNCg0KDQoN Cg0KDQoNCg0KICBnbF9MSUJPQkpTPSIkZ2xfTElCT0JKUyBmdGVsbG8uJGFjX29iamV4dCINCg0K DQogIGZpDQoNCg0KDQoNCiAgR05VTElCX0ZURUxMTz0xDQoNCg0KDQokYXNfZWNobyAiI2RlZmlu ZSBHTlVMSUJfVEVTVF9GVEVMTE8gMSIgPj5jb25mZGVmcy5oDQoNCg0KDQogICMgQ29kZSBmcm9t IG1vZHVsZSBmdG9hc3RyOg0KDQogICMgQ29kZSBmcm9tIG1vZHVsZSBmdHM6DQoNCg0KDQoNCg0K DQoNCg0KDQoNCiAgZ2xfTElCT0JKUz0iJGdsX0xJQk9CSlMgZnRzLiRhY19vYmpleHQiDQoNCg0K DQoNCg0KICBHTlVMSUJfT1BFTkFUPTENCg0KDQogIEdOVUxJQl9GQ0hNT0RBVD0xDQogIEdOVUxJ Ql9GU1RBVEFUPTENCiAgR05VTElCX01LRElSQVQ9MQ0KDQoNCiAgR05VTElCX0ZDSE9XTkFUPTEN CiAgR05VTElCX1VOTElOS0FUPTENCg0KDQoNCg0KDQoNCg0KDQoNCiAgZ2xfTElCT0JKUz0iJGds X0xJQk9CSlMgb3BlbmF0LXByb2MuJGFjX29iamV4dCINCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoN Cg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCiAg Zm9yIGFjX2Z1bmMgaW4gZmNobW9kYXQgZnN0YXRhdCBta2RpcmF0IG9wZW5hdCB1bmxpbmthdA0K ZG8gOg0KICBhc19hY192YXI9YCRhc19lY2hvICJhY19jdl9mdW5jXyRhY19mdW5jIiB8ICRhc190 cl9zaGANCmFjX2ZuX2NfY2hlY2tfZnVuYyAiJExJTkVOTyIgIiRhY19mdW5jIiAiJGFzX2FjX3Zh ciINCmlmIGV2YWwgdGVzdCBcInhcJCIkYXNfYWNfdmFyIlwiID0geCJ5ZXMiOyB0aGVuIDoNCiAg Y2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRg0KI2RlZmluZSBgJGFzX2VjaG8gIkhBVkVfJGFjX2Z1 bmMiIHwgJGFzX3RyX2NwcGAgMQ0KX0FDRU9GDQoNCmVsc2UNCg0KICAgIGdsX0xJQk9CSlM9IiRn bF9MSUJPQkpTICRhY19mdW5jLiRhY19vYmpleHQiDQoNCmZpDQpkb25lDQoNCg0KDQoNCiAgY2Fz ZSAkYWNfY3ZfZnVuY19vcGVuYXQrJGFjX2N2X2Z1bmNfbHN0YXRfZGVyZWZlcmVuY2VzX3NsYXNo ZWRfc3ltbGluayBpbg0KICB5ZXMreWVzKQ0KICAgICMgR05VL0h1cmQgaGFzIHVubGlua2F0LCBi dXQgaXQgaGFzIHRoZSBzYW1lIGJ1ZyBhcyB1bmxpbmsuDQogICAgaWYgdGVzdCAkUkVQTEFDRV9V TkxJTksgPSAxOyB0aGVuDQoNCg0KDQoNCg0KDQoNCg0KICBnbF9MSUJPQkpTPSIkZ2xfTElCT0JK UyB1bmxpbmthdC4kYWNfb2JqZXh0Ig0KDQogICAgICBSRVBMQUNFX1VOTElOS0FUPTENCiAgICBm aSA7Ow0KICB5ZXMrKikNCiAgICAjIFNvbGFyaXMgOSBoYXMgKmF0IGZ1bmN0aW9ucywgYnV0IHVu aWZvcm1seSBtaXNoYW5kbGVzIHRyYWlsaW5nDQogICAgIyBzbGFzaCBpbiBhbGwgb2YgdGhlbS4N Cg0KDQoNCg0KDQoNCg0KDQogIGdsX0xJQk9CSlM9IiRnbF9MSUJPQkpTIG9wZW5hdC4kYWNfb2Jq ZXh0Ig0KDQogICAgUkVQTEFDRV9PUEVOQVQ9MQ0KDQoNCg0KDQoNCg0KDQoNCiAgZ2xfTElCT0JK Uz0iJGdsX0xJQk9CSlMgZnN0YXRhdC4kYWNfb2JqZXh0Ig0KDQogICAgUkVQTEFDRV9GU1RBVEFU PTENCg0KDQoNCg0KDQoNCg0KDQogIGdsX0xJQk9CSlM9IiRnbF9MSUJPQkpTIHVubGlua2F0LiRh Y19vYmpleHQiDQoNCiAgICBSRVBMQUNFX1VOTElOS0FUPTENCiAgICA7Ow0KICAqKQ0KICAgIEhB VkVfT1BFTkFUPTANCiAgICBIQVZFX1VOTElOS0FUPTAgIyBObyBrbm93biBzeXN0ZW0gd2l0aCB1 bmxpbmthdCBidXQgbm90IG9wZW5hdA0KICAgIEhBVkVfRlNUQVRBVD0wICMgTm8ga25vd24gc3lz dGVtIHdpdGggZnN0YXRhdCBidXQgbm90IG9wZW5hdA0KDQoNCg0KICA6DQo7Ow0KICBlc2FjDQog IGlmIHRlc3QgJGFjX2N2X2Z1bmNfZmNobW9kYXQgIT0geWVzOyB0aGVuDQogICAgSEFWRV9GQ0hN T0RBVD0wDQogIGZpDQogIGlmIHRlc3QgJGFjX2N2X2Z1bmNfbWtkaXJhdCAhPSB5ZXM7IHRoZW4N CiAgICBIQVZFX01LRElSQVQ9MA0KICBmaQ0KDQoNCg0KICBhY19mbl9jX2NoZWNrX2Z1bmMgIiRM SU5FTk8iICJmY2hvd25hdCIgImFjX2N2X2Z1bmNfZmNob3duYXQiDQppZiB0ZXN0ICJ4JGFjX2N2 X2Z1bmNfZmNob3duYXQiID0geHllczsgdGhlbiA6DQoNCg0KDQogIHsgJGFzX2VjaG8gIiRhc19t ZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciBmY2hvd25hdCB3b3JrcyB3 aXRoIEFUX1NZTUxJTktfTk9GT0xMT1ciID4mNQ0KJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhl ciBmY2hvd25hdCB3b3JrcyB3aXRoIEFUX1NZTUxJTktfTk9GT0xMT1cuLi4gIiA+JjY7IH0NCmlm ICR7Z2xfY3ZfZnVuY19mY2hvd25hdF9ub2ZvbGxvd193b3Jrcys6fSBmYWxzZTsgdGhlbiA6DQog ICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2DQplbHNlDQoNCiAgICAgZ2xfZGFuZ2xlPWNvbmZ0 ZXN0LmRhbmdsZQ0KICAgICAjIFJlbW92ZSBhbnkgcmVtbmFudHMgb2YgYSBwcmV2aW91cyB0ZXN0 Lg0KICAgICBybSAtZiAkZ2xfZGFuZ2xlDQogICAgICMgQXJyYW5nZSBmb3IgZGVsZXRpb24gb2Yg dGhlIHRlbXBvcmFyeSBmaWxlIHRoaXMgdGVzdCBjcmVhdGVzLg0KICAgICBhY19jbGVhbl9maWxl cz0iJGFjX2NsZWFuX2ZpbGVzICRnbF9kYW5nbGUiDQogICAgIGxuIC1zIGNvbmZ0ZXN0Lm5vLXN1 Y2ggJGdsX2RhbmdsZQ0KICAgICBpZiB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IHllczsgdGhl biA6DQogIGdsX2N2X2Z1bmNfZmNob3duYXRfbm9mb2xsb3dfd29ya3M9bm8NCmVsc2UNCiAgY2F0 IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dA0KLyogZW5kIGNvbmZkZWZz LmguICAqLw0KDQojaW5jbHVkZSA8ZmNudGwuaD4NCiNpbmNsdWRlIDx1bmlzdGQuaD4NCiNpbmNs dWRlIDxzdGRsaWIuaD4NCiNpbmNsdWRlIDxlcnJuby5oPg0KI2luY2x1ZGUgPHN5cy90eXBlcy5o Pg0KaW50DQptYWluICgpDQp7DQogIHJldHVybiAoZmNob3duYXQgKEFUX0ZEQ1dELCAiJGdsX2Rh bmdsZSIsIC0xLCBnZXRnaWQgKCksDQogICAgICAgICAgICAgICAgICAgIEFUX1NZTUxJTktfTk9G T0xMT1cpICE9IDANCiAgICAgICAgICAmJiBlcnJubyA9PSBFTk9FTlQpOw0KfQ0KDQpfQUNFT0YN CmlmIGFjX2ZuX2NfdHJ5X3J1biAiJExJTkVOTyI7IHRoZW4gOg0KICBnbF9jdl9mdW5jX2ZjaG93 bmF0X25vZm9sbG93X3dvcmtzPXllcw0KZWxzZQ0KICBnbF9jdl9mdW5jX2ZjaG93bmF0X25vZm9s bG93X3dvcmtzPW5vDQpmaQ0Kcm0gLWYgY29yZSAqLmNvcmUgY29yZS5jb25mdGVzdC4qIGdtb24u b3V0IGJiLm91dCBjb25mdGVzdCRhY19leGVleHQgXA0KICBjb25mdGVzdC4kYWNfb2JqZXh0IGNv bmZ0ZXN0LmJlYW0gY29uZnRlc3QuJGFjX2V4dA0KZmkNCg0KDQpmaQ0KeyAkYXNfZWNobyAiJGFz X21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRnbF9jdl9mdW5jX2ZjaG93bmF0X25v Zm9sbG93X3dvcmtzIiA+JjUNCiRhc19lY2hvICIkZ2xfY3ZfZnVuY19mY2hvd25hdF9ub2ZvbGxv d193b3JrcyIgPiY2OyB9DQogIGlmIHRlc3QgJGdsX2N2X2Z1bmNfZmNob3duYXRfbm9mb2xsb3df d29ya3MgPSBubzsgdGhlbiA6DQogIFJFUExBQ0VfRkNIT1dOQVQ9MQ0KDQokYXNfZWNobyAiI2Rl ZmluZSBGQ0hPV05BVF9OT0ZPTExPV19CVUcgMSIgPj5jb25mZGVmcy5oDQoNCg0KZmkNCg0KDQoN Cg0KICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdo ZXRoZXIgZmNob3duYXQgd29ya3Mgd2l0aCBhbiBlbXB0eSBmaWxlIG5hbWUiID4mNQ0KJGFzX2Vj aG9fbiAiY2hlY2tpbmcgd2hldGhlciBmY2hvd25hdCB3b3JrcyB3aXRoIGFuIGVtcHR5IGZpbGUg bmFtZS4uLiAiID4mNjsgfQ0KaWYgJHtnbF9jdl9mdW5jX2ZjaG93bmF0X2VtcHR5X2ZpbGVuYW1l X3dvcmtzKzp9IGZhbHNlOyB0aGVuIDoNCiAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYNCmVs c2UNCiAgaWYgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgPSB5ZXM7IHRoZW4gOg0KICBnbF9jdl9m dW5jX2ZjaG93bmF0X2VtcHR5X2ZpbGVuYW1lX3dvcmtzPSJndWVzc2luZyBubyINCmVsc2UNCiAg Y2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dA0KLyogZW5kIGNvbmZk ZWZzLmguICAqLw0KI2luY2x1ZGUgPHVuaXN0ZC5oPg0KICAgICAgICAgICAgI2luY2x1ZGUgPGZj bnRsLmg+DQoNCmludA0KbWFpbiAoKQ0Kew0KaW50IGZkOw0KICAgICAgICAgICAgaW50IHJldDsN CiAgICAgICAgICAgIGlmIChta2RpciAoImNvbmZ0ZXN0ZGlyIiwgMDcwMCkgPCAwKQ0KICAgICAg ICAgICAgICByZXR1cm4gMjsNCiAgICAgICAgICAgIGZkID0gb3BlbiAoImNvbmZ0ZXN0ZGlyIiwg T19SRE9OTFkpOw0KICAgICAgICAgICAgaWYgKGZkIDwgMCkNCiAgICAgICAgICAgICAgcmV0dXJu IDM7DQogICAgICAgICAgICByZXQgPSBmY2hvd25hdCAoZmQsICIiLCAtMSwgLTEsIDApOw0KICAg ICAgICAgICAgY2xvc2UgKGZkKTsNCiAgICAgICAgICAgIHJtZGlyICgiY29uZnRlc3RkaXIiKTsN CiAgICAgICAgICAgIHJldHVybiByZXQgPT0gMDsNCg0KICA7DQogIHJldHVybiAwOw0KfQ0KX0FD RU9GDQppZiBhY19mbl9jX3RyeV9ydW4gIiRMSU5FTk8iOyB0aGVuIDoNCiAgZ2xfY3ZfZnVuY19m Y2hvd25hdF9lbXB0eV9maWxlbmFtZV93b3Jrcz15ZXMNCmVsc2UNCiAgZ2xfY3ZfZnVuY19mY2hv d25hdF9lbXB0eV9maWxlbmFtZV93b3Jrcz1ubw0KZmkNCnJtIC1mIGNvcmUgKi5jb3JlIGNvcmUu Y29uZnRlc3QuKiBnbW9uLm91dCBiYi5vdXQgY29uZnRlc3QkYWNfZXhlZXh0IFwNCiAgY29uZnRl c3QuJGFjX29iamV4dCBjb25mdGVzdC5iZWFtIGNvbmZ0ZXN0LiRhY19leHQNCmZpDQoNCg0KZmkN CnsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkZ2xfY3Zf ZnVuY19mY2hvd25hdF9lbXB0eV9maWxlbmFtZV93b3JrcyIgPiY1DQokYXNfZWNobyAiJGdsX2N2 X2Z1bmNfZmNob3duYXRfZW1wdHlfZmlsZW5hbWVfd29ya3MiID4mNjsgfQ0KICBpZiB0ZXN0ICIk Z2xfY3ZfZnVuY19mY2hvd25hdF9lbXB0eV9maWxlbmFtZV93b3JrcyIgIT0geWVzOyB0aGVuIDoN CiAgUkVQTEFDRV9GQ0hPV05BVD0xDQoNCiRhc19lY2hvICIjZGVmaW5lIEZDSE9XTkFUX0VNUFRZ X0ZJTEVOQU1FX0JVRyAxIiA+PmNvbmZkZWZzLmgNCg0KDQpmaQ0KDQogICAgIGlmIHRlc3QgJFJF UExBQ0VfQ0hPV04gPSAxOyB0aGVuDQogICAgICAgUkVQTEFDRV9GQ0hPV05BVD0xDQogICAgIGZp DQplbHNlDQogIEhBVkVfRkNIT1dOQVQ9MA0KZmkNCg0KICBpZiB0ZXN0ICRIQVZFX0ZDSE9XTkFU ID0gMCB8fCB0ZXN0ICRSRVBMQUNFX0ZDSE9XTkFUID0gMTsgdGhlbg0KDQoNCg0KDQoNCg0KDQoN CiAgZ2xfTElCT0JKUz0iJGdsX0xJQk9CSlMgZmNob3duYXQuJGFjX29iamV4dCINCg0KICBmaQ0K DQoNCg0KDQogICAgYWNfZm5fY19jaGVja19tZW1iZXIgIiRMSU5FTk8iICJzdHJ1Y3Qgc3RhdGZz IiAiZl90eXBlIiAiYWNfY3ZfbWVtYmVyX3N0cnVjdF9zdGF0ZnNfZl90eXBlIiAiJGFjX2luY2x1 ZGVzX2RlZmF1bHQNCiAgICAgI2luY2x1ZGUgPHN5cy92ZnMuaD4NCiINCmlmIHRlc3QgIngkYWNf Y3ZfbWVtYmVyX3N0cnVjdF9zdGF0ZnNfZl90eXBlIiA9IHh5ZXM7IHRoZW4gOg0KDQpjYXQgPj5j b25mZGVmcy5oIDw8X0FDRU9GDQojZGVmaW5lIEhBVkVfU1RSVUNUX1NUQVRGU19GX1RZUEUgMQ0K X0FDRU9GDQoNCg0KZmkNCg0KDQoNCiAgIyBDb2RlIGZyb20gbW9kdWxlIGZ1bGwtcmVhZDoNCiAg IyBDb2RlIGZyb20gbW9kdWxlIGZ1bGwtd3JpdGU6DQogICMgQ29kZSBmcm9tIG1vZHVsZSBmdXRp bWVuczoNCg0KDQoNCg0KICBpZiB0ZXN0ICRhY19jdl9mdW5jX2Z1dGltZW5zID0gbm87IHRoZW4N CiAgICBIQVZFX0ZVVElNRU5TPTANCg0KDQoNCg0KDQoNCg0KDQogIGdsX0xJQk9CSlM9IiRnbF9M SUJPQkpTIGZ1dGltZW5zLiRhY19vYmpleHQiDQoNCiAgZWxzZQ0KICAgIHsgJGFzX2VjaG8gIiRh c19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciBmdXRpbWVucyB3b3Jr cyIgPiY1DQokYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIGZ1dGltZW5zIHdvcmtzLi4uICIg PiY2OyB9DQppZiAke2dsX2N2X2Z1bmNfZnV0aW1lbnNfd29ya3MrOn0gZmFsc2U7IHRoZW4gOg0K ICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNg0KZWxzZQ0KICBpZiB0ZXN0ICIkY3Jvc3NfY29t cGlsaW5nIiA9IHllczsgdGhlbiA6DQogIGdsX2N2X2Z1bmNfZnV0aW1lbnNfd29ya3M9Imd1ZXNz aW5nIG5vIg0KZWxzZQ0KICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNf ZXh0DQovKiBlbmQgY29uZmRlZnMuaC4gICovDQoNCiNpbmNsdWRlIDxmY250bC5oPg0KI2luY2x1 ZGUgPHN5cy9zdGF0Lmg+DQojaW5jbHVkZSA8dW5pc3RkLmg+DQojaW5jbHVkZSA8ZXJybm8uaD4N Cg0KaW50DQptYWluICgpDQp7DQpzdHJ1Y3QgdGltZXNwZWMgdHNbMl0gPSB7IHsgMSwgVVRJTUVf T01JVCB9LCB7IDEsIFVUSU1FX05PVyB9IH07DQogICAgICBpbnQgZmQgPSBjcmVhdCAoImNvbmZ0 ZXN0LmZpbGUiLCAwNjAwKTsNCiAgICAgIHN0cnVjdCBzdGF0IHN0Ow0KICAgICAgaWYgKGZkIDwg MCkgcmV0dXJuIDE7DQogICAgICBlcnJubyA9IDA7DQogICAgICBpZiAoZnV0aW1lbnMgKEFUX0ZE Q1dELCBOVUxMKSA9PSAwKSByZXR1cm4gMjsNCiAgICAgIGlmIChlcnJubyAhPSBFQkFERikgcmV0 dXJuIDM7DQogICAgICBpZiAoZnV0aW1lbnMgKGZkLCB0cykpIHJldHVybiA0Ow0KICAgICAgc2xl ZXAgKDEpOw0KICAgICAgdHNbMF0udHZfbnNlYyA9IFVUSU1FX05PVzsNCiAgICAgIHRzWzFdLnR2 X25zZWMgPSBVVElNRV9PTUlUOw0KICAgICAgaWYgKGZ1dGltZW5zIChmZCwgdHMpKSByZXR1cm4g NTsNCiAgICAgIGlmIChmc3RhdCAoZmQsICZzdCkpIHJldHVybiA2Ow0KICAgICAgaWYgKHN0LnN0 X2N0aW1lIDwgc3Quc3RfYXRpbWUpIHJldHVybiA3Ow0KDQogIDsNCiAgcmV0dXJuIDA7DQp9DQpf QUNFT0YNCmlmIGFjX2ZuX2NfdHJ5X3J1biAiJExJTkVOTyI7IHRoZW4gOg0KICAgICAgICAgICBj YXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0DQovKiBlbmQgY29uZmRl ZnMuaC4gICovDQoNCiNpZmRlZiBfX2xpbnV4X18NCi8qIFRoZSBMaW51eCBrZXJuZWwgYWRkZWQg ZnV0aW1lbnMgaW4gMi42LjIyLCBidXQgaGFzIGJ1Z3Mgd2l0aCBVVElNRV9PTUlUDQogICBpbiBz ZXZlcmFsIGZpbGUgc3lzdGVtcyBhcyByZWNlbnRseSBhcyAyLjYuMzIuICBBbHdheXMgcmVwbGFj ZSBmdXRpbWVucw0KICAgdG8gc3VwcG9ydCBvbGRlciBrZXJuZWxzLiAgKi8NCmNob2tlIG1lDQoj ZW5kaWYNCg0KaW50DQptYWluICgpDQp7DQoNCiAgOw0KICByZXR1cm4gMDsNCn0NCl9BQ0VPRg0K aWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOg0KICBnbF9jdl9mdW5jX2Z1 dGltZW5zX3dvcmtzPXllcw0KZWxzZQ0KICBnbF9jdl9mdW5jX2Z1dGltZW5zX3dvcmtzPSJuZWVk cyBydW50aW1lIGNoZWNrIg0KZmkNCnJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRh Y19vYmpleHQgY29uZnRlc3QuJGFjX2V4dA0KZWxzZQ0KICBnbF9jdl9mdW5jX2Z1dGltZW5zX3dv cmtzPW5vDQpmaQ0Kcm0gLWYgY29yZSAqLmNvcmUgY29yZS5jb25mdGVzdC4qIGdtb24ub3V0IGJi Lm91dCBjb25mdGVzdCRhY19leGVleHQgXA0KICBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0 LmJlYW0gY29uZnRlc3QuJGFjX2V4dA0KZmkNCg0KICAgICAgcm0gLWYgY29uZnRlc3QuZmlsZQ0K ZmkNCnsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkZ2xf Y3ZfZnVuY19mdXRpbWVuc193b3JrcyIgPiY1DQokYXNfZWNobyAiJGdsX2N2X2Z1bmNfZnV0aW1l bnNfd29ya3MiID4mNjsgfQ0KICAgIGlmIHRlc3QgIiRnbF9jdl9mdW5jX2Z1dGltZW5zX3dvcmtz IiAhPSB5ZXM7IHRoZW4NCiAgICAgIFJFUExBQ0VfRlVUSU1FTlM9MQ0KDQoNCg0KDQoNCg0KDQoN CiAgZ2xfTElCT0JKUz0iJGdsX0xJQk9CSlMgZnV0aW1lbnMuJGFjX29iamV4dCINCg0KICAgIGZp DQogIGZpDQoNCg0KDQoNCiAgR05VTElCX0ZVVElNRU5TPTENCg0KDQoNCiRhc19lY2hvICIjZGVm aW5lIEdOVUxJQl9URVNUX0ZVVElNRU5TIDEiID4+Y29uZmRlZnMuaA0KDQoNCg0KICAjIENvZGUg ZnJvbSBtb2R1bGUgZ2VuZG9jczoNCiAgIyBDb2RlIGZyb20gbW9kdWxlIGdldGFkZHJpbmZvOg0K DQogICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5n IGhvdyB0byBkbyBnZXRhZGRyaW5mbywgZnJlZWFkZHJpbmZvIGFuZCBnZXRuYW1laW5mbyIgPiY1 DQokYXNfZWNobyAiJGFzX21lOiBjaGVja2luZyBob3cgdG8gZG8gZ2V0YWRkcmluZm8sIGZyZWVh ZGRyaW5mbyBhbmQgZ2V0bmFtZWluZm8iID4mNjt9DQogIEdFVEFERFJJTkZPX0xJQj0NCiAgZ2Fp X3NhdmVkX0xJQlM9IiRMSUJTIg0KDQogICAgICAgICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZTok e2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIGxpYnJhcnkgY29udGFpbmluZyBnZXRh ZGRyaW5mbyIgPiY1DQokYXNfZWNob19uICJjaGVja2luZyBmb3IgbGlicmFyeSBjb250YWluaW5n IGdldGFkZHJpbmZvLi4uICIgPiY2OyB9DQppZiAke2FjX2N2X3NlYXJjaF9nZXRhZGRyaW5mbys6 fSBmYWxzZTsgdGhlbiA6DQogICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2DQplbHNlDQogIGFj X2Z1bmNfc2VhcmNoX3NhdmVfTElCUz0kTElCUw0KY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+ Y29uZnRlc3QuJGFjX2V4dA0KLyogZW5kIGNvbmZkZWZzLmguICAqLw0KDQovKiBPdmVycmlkZSBh bnkgR0NDIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4NCiAgIFVzZSBjaGFy IGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIEdDQw0KICAgYnVp bHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAg Ki8NCiNpZmRlZiBfX2NwbHVzcGx1cw0KZXh0ZXJuICJDIg0KI2VuZGlmDQpjaGFyIGdldGFkZHJp bmZvICgpOw0KaW50DQptYWluICgpDQp7DQpyZXR1cm4gZ2V0YWRkcmluZm8gKCk7DQogIDsNCiAg cmV0dXJuIDA7DQp9DQpfQUNFT0YNCmZvciBhY19saWIgaW4gJycgc29ja2V0IG5ldHdvcmsgbmV0 OyBkbw0KICBpZiB0ZXN0IC16ICIkYWNfbGliIjsgdGhlbg0KICAgIGFjX3Jlcz0ibm9uZSByZXF1 aXJlZCINCiAgZWxzZQ0KICAgIGFjX3Jlcz0tbCRhY19saWINCiAgICBMSUJTPSItbCRhY19saWIg ICRhY19mdW5jX3NlYXJjaF9zYXZlX0xJQlMiDQogIGZpDQogIGlmIGFjX2ZuX2NfdHJ5X2xpbmsg IiRMSU5FTk8iOyB0aGVuIDoNCiAgYWNfY3Zfc2VhcmNoX2dldGFkZHJpbmZvPSRhY19yZXMNCmZp DQpybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwNCiAgICBjb25m dGVzdCRhY19leGVleHQNCiAgaWYgJHthY19jdl9zZWFyY2hfZ2V0YWRkcmluZm8rOn0gZmFsc2U7 IHRoZW4gOg0KICBicmVhaw0KZmkNCmRvbmUNCmlmICR7YWNfY3Zfc2VhcmNoX2dldGFkZHJpbmZv Kzp9IGZhbHNlOyB0aGVuIDoNCg0KZWxzZQ0KICBhY19jdl9zZWFyY2hfZ2V0YWRkcmluZm89bm8N CmZpDQpybSBjb25mdGVzdC4kYWNfZXh0DQpMSUJTPSRhY19mdW5jX3NlYXJjaF9zYXZlX0xJQlMN CmZpDQp7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFj X2N2X3NlYXJjaF9nZXRhZGRyaW5mbyIgPiY1DQokYXNfZWNobyAiJGFjX2N2X3NlYXJjaF9nZXRh ZGRyaW5mbyIgPiY2OyB9DQphY19yZXM9JGFjX2N2X3NlYXJjaF9nZXRhZGRyaW5mbw0KaWYgdGVz dCAiJGFjX3JlcyIgIT0gbm87IHRoZW4gOg0KICB0ZXN0ICIkYWNfcmVzIiA9ICJub25lIHJlcXVp cmVkIiB8fCBMSUJTPSIkYWNfcmVzICRMSUJTIg0KICBpZiB0ZXN0ICIkYWNfY3Zfc2VhcmNoX2dl dGFkZHJpbmZvIiAhPSAibm9uZSByZXF1aXJlZCI7IHRoZW4NCiAgICAgICBHRVRBRERSSU5GT19M SUI9IiRhY19jdl9zZWFyY2hfZ2V0YWRkcmluZm8iDQogICAgIGZpDQpmaQ0KDQogIExJQlM9IiRn YWlfc2F2ZWRfTElCUyAkR0VUQUREUklORk9fTElCIg0KDQogIHsgJGFzX2VjaG8gIiRhc19tZTok e2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIGdldGFkZHJpbmZvIiA+JjUNCiRhc19l Y2hvX24gImNoZWNraW5nIGZvciBnZXRhZGRyaW5mby4uLiAiID4mNjsgfQ0KaWYgJHtnbF9jdl9m dW5jX2dldGFkZHJpbmZvKzp9IGZhbHNlOyB0aGVuIDoNCiAgJGFzX2VjaG9fbiAiKGNhY2hlZCkg IiA+JjYNCmVsc2UNCg0KICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRh Y19leHQNCi8qIGVuZCBjb25mZGVmcy5oLiAgKi8NCg0KI2luY2x1ZGUgPHN5cy90eXBlcy5oPg0K I2lmZGVmIEhBVkVfU1lTX1NPQ0tFVF9IDQojaW5jbHVkZSA8c3lzL3NvY2tldC5oPg0KI2VuZGlm DQojaWZkZWYgSEFWRV9ORVREQl9IDQojaW5jbHVkZSA8bmV0ZGIuaD4NCiNlbmRpZg0KI2luY2x1 ZGUgPHN0ZGRlZi5oPg0KDQppbnQNCm1haW4gKCkNCnsNCmdldGFkZHJpbmZvKCIiLCAiIiwgTlVM TCwgTlVMTCk7DQogIDsNCiAgcmV0dXJuIDA7DQp9DQpfQUNFT0YNCmlmIGFjX2ZuX2NfdHJ5X2xp bmsgIiRMSU5FTk8iOyB0aGVuIDoNCiAgZ2xfY3ZfZnVuY19nZXRhZGRyaW5mbz15ZXMNCmVsc2UN CiAgZ2xfY3ZfZnVuY19nZXRhZGRyaW5mbz1ubw0KZmkNCnJtIC1mIGNvcmUgY29uZnRlc3QuZXJy IGNvbmZ0ZXN0LiRhY19vYmpleHQgXA0KICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4k YWNfZXh0DQpmaQ0KeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1 bHQ6ICRnbF9jdl9mdW5jX2dldGFkZHJpbmZvIiA+JjUNCiRhc19lY2hvICIkZ2xfY3ZfZnVuY19n ZXRhZGRyaW5mbyIgPiY2OyB9DQogIGlmIHRlc3QgJGdsX2N2X2Z1bmNfZ2V0YWRkcmluZm8gPSBu bzsgdGhlbg0KICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hl Y2tpbmcgZm9yIGdldGFkZHJpbmZvIGluIHdzMnRjcGlwLmggYW5kIC1sd3MyXzMyIiA+JjUNCiRh c19lY2hvX24gImNoZWNraW5nIGZvciBnZXRhZGRyaW5mbyBpbiB3czJ0Y3BpcC5oIGFuZCAtbHdz Ml8zMi4uLiAiID4mNjsgfQ0KaWYgJHtnbF9jdl93MzJfZ2V0YWRkcmluZm8rOn0gZmFsc2U7IHRo ZW4gOg0KICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNg0KZWxzZQ0KDQogICAgICBnbF9jdl93 MzJfZ2V0YWRkcmluZm89bm8NCiAgICAgIGFtX3NhdmVfTElCUz0iJExJQlMiDQogICAgICBMSUJT PSIkTElCUyAtbHdzMl8zMiINCiAgICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0 ZXN0LiRhY19leHQNCi8qIGVuZCBjb25mZGVmcy5oLiAgKi8NCg0KI2lmZGVmIEhBVkVfV1MyVENQ SVBfSA0KI2luY2x1ZGUgPHdzMnRjcGlwLmg+DQojZW5kaWYNCiNpbmNsdWRlIDxzdGRkZWYuaD4N Cg0KaW50DQptYWluICgpDQp7DQpnZXRhZGRyaW5mbyhOVUxMLCBOVUxMLCBOVUxMLCBOVUxMKTsN CiAgOw0KICByZXR1cm4gMDsNCn0NCl9BQ0VPRg0KaWYgYWNfZm5fY190cnlfbGluayAiJExJTkVO TyI7IHRoZW4gOg0KICBnbF9jdl93MzJfZ2V0YWRkcmluZm89eWVzDQpmaQ0Kcm0gLWYgY29yZSBj b25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcDQogICAgY29uZnRlc3QkYWNfZXhlZXh0 IGNvbmZ0ZXN0LiRhY19leHQNCiAgICAgIExJQlM9IiRhbV9zYXZlX0xJQlMiDQoNCmZpDQp7ICRh c19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGdsX2N2X3czMl9n ZXRhZGRyaW5mbyIgPiY1DQokYXNfZWNobyAiJGdsX2N2X3czMl9nZXRhZGRyaW5mbyIgPiY2OyB9 DQogICAgaWYgdGVzdCAiJGdsX2N2X3czMl9nZXRhZGRyaW5mbyIgPSAieWVzIjsgdGhlbg0KICAg ICAgR0VUQUREUklORk9fTElCPSItbHdzMl8zMiINCiAgICAgIExJQlM9IiRnYWlfc2F2ZWRfTElC UyAkR0VUQUREUklORk9fTElCIg0KICAgIGVsc2UNCg0KDQoNCg0KDQoNCg0KDQogIGdsX0xJQk9C SlM9IiRnbF9MSUJPQkpTIGdldGFkZHJpbmZvLiRhY19vYmpleHQiDQoNCiAgICBmaQ0KICBmaQ0K DQogICMgV2UgY2FuJ3QgdXNlIEFDX1JFUExBQ0VfRlVOQ1MgaGVyZSBiZWNhdXNlIGdhaV9zdHJl cnJvciBtYXkgYmUgYW4NCiAgIyBpbmxpbmUgZnVuY3Rpb24gZGVjbGFyZWQgaW4gd3MydGNwaXAu aCwgc28gd2UgbmVlZCB0byBnZXQgdGhhdA0KICAjIGhlYWRlciBpbmNsdWRlZCBzb21laG93Lg0K ICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBn YWlfc3RyZXJyb3IgKHBvc3NpYmx5IHZpYSB3czJ0Y3BpcC5oKSIgPiY1DQokYXNfZWNob19uICJj aGVja2luZyBmb3IgZ2FpX3N0cmVycm9yIChwb3NzaWJseSB2aWEgd3MydGNwaXAuaCkuLi4gIiA+ JjY7IH0NCmlmICR7Z2xfY3ZfZnVuY19nYWlfc3RyZXJyb3IrOn0gZmFsc2U7IHRoZW4gOg0KICAk YXNfZWNob19uICIoY2FjaGVkKSAiID4mNg0KZWxzZQ0KDQogICAgICBjYXQgY29uZmRlZnMuaCAt IDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0DQovKiBlbmQgY29uZmRlZnMuaC4gICovDQoNCiNp bmNsdWRlIDxzeXMvdHlwZXMuaD4NCiNpZmRlZiBIQVZFX1NZU19TT0NLRVRfSA0KI2luY2x1ZGUg PHN5cy9zb2NrZXQuaD4NCiNlbmRpZg0KI2lmZGVmIEhBVkVfTkVUREJfSA0KI2luY2x1ZGUgPG5l dGRiLmg+DQojZW5kaWYNCiNpZmRlZiBIQVZFX1dTMlRDUElQX0gNCiNpbmNsdWRlIDx3czJ0Y3Bp cC5oPg0KI2VuZGlmDQojaW5jbHVkZSA8c3RkZGVmLmg+DQoNCmludA0KbWFpbiAoKQ0Kew0KZ2Fp X3N0cmVycm9yIChOVUxMKTsNCiAgOw0KICByZXR1cm4gMDsNCn0NCl9BQ0VPRg0KaWYgYWNfZm5f Y190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOg0KICBnbF9jdl9mdW5jX2dhaV9zdHJlcnJvcj15 ZXMNCmVsc2UNCiAgZ2xfY3ZfZnVuY19nYWlfc3RyZXJyb3I9bm8NCmZpDQpybSAtZiBjb3JlIGNv bmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwNCiAgICBjb25mdGVzdCRhY19leGVleHQg Y29uZnRlc3QuJGFjX2V4dA0KZmkNCnsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElO RU5PfTogcmVzdWx0OiAkZ2xfY3ZfZnVuY19nYWlfc3RyZXJyb3IiID4mNQ0KJGFzX2VjaG8gIiRn bF9jdl9mdW5jX2dhaV9zdHJlcnJvciIgPiY2OyB9DQogIGlmIHRlc3QgJGdsX2N2X2Z1bmNfZ2Fp X3N0cmVycm9yID0gbm87IHRoZW4NCg0KDQoNCg0KDQoNCg0KDQogIGdsX0xJQk9CSlM9IiRnbF9M SUJPQkpTIGdhaV9zdHJlcnJvci4kYWNfb2JqZXh0Ig0KDQogIGZpDQoNCiAgTElCUz0iJGdhaV9z YXZlZF9MSUJTIg0KDQoNCg0KDQoNCg0KDQoNCg0KICAgICAgYWNfZm5fY19jaGVja19tZW1iZXIg IiRMSU5FTk8iICJzdHJ1Y3Qgc29ja2FkZHIiICJzYV9sZW4iICJhY19jdl9tZW1iZXJfc3RydWN0 X3NvY2thZGRyX3NhX2xlbiIgIg0KI2luY2x1ZGUgPHN5cy90eXBlcy5oPg0KI2luY2x1ZGUgPHN5 cy9zb2NrZXQuaD4NCg0KIg0KaWYgdGVzdCAieCRhY19jdl9tZW1iZXJfc3RydWN0X3NvY2thZGRy X3NhX2xlbiIgPSB4eWVzOyB0aGVuIDoNCg0KY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRg0KI2Rl ZmluZSBIQVZFX1NUUlVDVF9TT0NLQUREUl9TQV9MRU4gMQ0KX0FDRU9GDQoNCg0KZmkNCg0KDQoN Cg0KICBhY19mbl9jX2NoZWNrX2RlY2wgIiRMSU5FTk8iICJnZXRhZGRyaW5mbyIgImFjX2N2X2hh dmVfZGVjbF9nZXRhZGRyaW5mbyIgIg0KICAvKiBzeXMvdHlwZXMuaCBpcyBub3QgbmVlZGVkIGFj Y29yZGluZyB0byBQT1NJWCwgYnV0IHRoZQ0KICAgICBzeXMvc29ja2V0LmggaW4gaTM4Ni11bmtu b3duLWZyZWVic2Q0LjEwIGFuZA0KICAgICBwb3dlcnBjLWFwcGxlLWRhcndpbjUuNSByZXF1aXJl ZCBpdC4gKi8NCiNpbmNsdWRlIDxzeXMvdHlwZXMuaD4NCiNpZmRlZiBIQVZFX1NZU19TT0NLRVRf SA0KI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4NCiNlbmRpZg0KI2lmZGVmIEhBVkVfTkVUREJfSA0K I2luY2x1ZGUgPG5ldGRiLmg+DQojZW5kaWYNCiNpZmRlZiBIQVZFX1dTMlRDUElQX0gNCiNpbmNs dWRlIDx3czJ0Y3BpcC5oPg0KI2VuZGlmDQoNCiINCmlmIHRlc3QgIngkYWNfY3ZfaGF2ZV9kZWNs X2dldGFkZHJpbmZvIiA9IHh5ZXM7IHRoZW4gOg0KICBhY19oYXZlX2RlY2w9MQ0KZWxzZQ0KICBh Y19oYXZlX2RlY2w9MA0KZmkNCg0KY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRg0KI2RlZmluZSBI QVZFX0RFQ0xfR0VUQUREUklORk8gJGFjX2hhdmVfZGVjbA0KX0FDRU9GDQphY19mbl9jX2NoZWNr X2RlY2wgIiRMSU5FTk8iICJmcmVlYWRkcmluZm8iICJhY19jdl9oYXZlX2RlY2xfZnJlZWFkZHJp bmZvIiAiDQogIC8qIHN5cy90eXBlcy5oIGlzIG5vdCBuZWVkZWQgYWNjb3JkaW5nIHRvIFBPU0lY LCBidXQgdGhlDQogICAgIHN5cy9zb2NrZXQuaCBpbiBpMzg2LXVua25vd24tZnJlZWJzZDQuMTAg YW5kDQogICAgIHBvd2VycGMtYXBwbGUtZGFyd2luNS41IHJlcXVpcmVkIGl0LiAqLw0KI2luY2x1 ZGUgPHN5cy90eXBlcy5oPg0KI2lmZGVmIEhBVkVfU1lTX1NPQ0tFVF9IDQojaW5jbHVkZSA8c3lz L3NvY2tldC5oPg0KI2VuZGlmDQojaWZkZWYgSEFWRV9ORVREQl9IDQojaW5jbHVkZSA8bmV0ZGIu aD4NCiNlbmRpZg0KI2lmZGVmIEhBVkVfV1MyVENQSVBfSA0KI2luY2x1ZGUgPHdzMnRjcGlwLmg+ DQojZW5kaWYNCg0KIg0KaWYgdGVzdCAieCRhY19jdl9oYXZlX2RlY2xfZnJlZWFkZHJpbmZvIiA9 IHh5ZXM7IHRoZW4gOg0KICBhY19oYXZlX2RlY2w9MQ0KZWxzZQ0KICBhY19oYXZlX2RlY2w9MA0K ZmkNCg0KY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRg0KI2RlZmluZSBIQVZFX0RFQ0xfRlJFRUFE RFJJTkZPICRhY19oYXZlX2RlY2wNCl9BQ0VPRg0KYWNfZm5fY19jaGVja19kZWNsICIkTElORU5P IiAiZ2FpX3N0cmVycm9yIiAiYWNfY3ZfaGF2ZV9kZWNsX2dhaV9zdHJlcnJvciIgIg0KICAvKiBz eXMvdHlwZXMuaCBpcyBub3QgbmVlZGVkIGFjY29yZGluZyB0byBQT1NJWCwgYnV0IHRoZQ0KICAg ICBzeXMvc29ja2V0LmggaW4gaTM4Ni11bmtub3duLWZyZWVic2Q0LjEwIGFuZA0KICAgICBwb3dl cnBjLWFwcGxlLWRhcndpbjUuNSByZXF1aXJlZCBpdC4gKi8NCiNpbmNsdWRlIDxzeXMvdHlwZXMu aD4NCiNpZmRlZiBIQVZFX1NZU19TT0NLRVRfSA0KI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4NCiNl bmRpZg0KI2lmZGVmIEhBVkVfTkVUREJfSA0KI2luY2x1ZGUgPG5ldGRiLmg+DQojZW5kaWYNCiNp ZmRlZiBIQVZFX1dTMlRDUElQX0gNCiNpbmNsdWRlIDx3czJ0Y3BpcC5oPg0KI2VuZGlmDQoNCiIN CmlmIHRlc3QgIngkYWNfY3ZfaGF2ZV9kZWNsX2dhaV9zdHJlcnJvciIgPSB4eWVzOyB0aGVuIDoN CiAgYWNfaGF2ZV9kZWNsPTENCmVsc2UNCiAgYWNfaGF2ZV9kZWNsPTANCmZpDQoNCmNhdCA+PmNv bmZkZWZzLmggPDxfQUNFT0YNCiNkZWZpbmUgSEFWRV9ERUNMX0dBSV9TVFJFUlJPUiAkYWNfaGF2 ZV9kZWNsDQpfQUNFT0YNCmFjX2ZuX2NfY2hlY2tfZGVjbCAiJExJTkVOTyIgImdldG5hbWVpbmZv IiAiYWNfY3ZfaGF2ZV9kZWNsX2dldG5hbWVpbmZvIiAiDQogIC8qIHN5cy90eXBlcy5oIGlzIG5v dCBuZWVkZWQgYWNjb3JkaW5nIHRvIFBPU0lYLCBidXQgdGhlDQogICAgIHN5cy9zb2NrZXQuaCBp biBpMzg2LXVua25vd24tZnJlZWJzZDQuMTAgYW5kDQogICAgIHBvd2VycGMtYXBwbGUtZGFyd2lu NS41IHJlcXVpcmVkIGl0LiAqLw0KI2luY2x1ZGUgPHN5cy90eXBlcy5oPg0KI2lmZGVmIEhBVkVf U1lTX1NPQ0tFVF9IDQojaW5jbHVkZSA8c3lzL3NvY2tldC5oPg0KI2VuZGlmDQojaWZkZWYgSEFW RV9ORVREQl9IDQojaW5jbHVkZSA8bmV0ZGIuaD4NCiNlbmRpZg0KI2lmZGVmIEhBVkVfV1MyVENQ SVBfSA0KI2luY2x1ZGUgPHdzMnRjcGlwLmg+DQojZW5kaWYNCg0KIg0KaWYgdGVzdCAieCRhY19j dl9oYXZlX2RlY2xfZ2V0bmFtZWluZm8iID0geHllczsgdGhlbiA6DQogIGFjX2hhdmVfZGVjbD0x DQplbHNlDQogIGFjX2hhdmVfZGVjbD0wDQpmaQ0KDQpjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9G DQojZGVmaW5lIEhBVkVfREVDTF9HRVROQU1FSU5GTyAkYWNfaGF2ZV9kZWNsDQpfQUNFT0YNCg0K ICBpZiB0ZXN0ICRhY19jdl9oYXZlX2RlY2xfZ2V0YWRkcmluZm8gPSBubzsgdGhlbg0KICAgIEhB VkVfREVDTF9HRVRBRERSSU5GTz0wDQogIGZpDQogIGlmIHRlc3QgJGFjX2N2X2hhdmVfZGVjbF9m cmVlYWRkcmluZm8gPSBubzsgdGhlbg0KICAgIEhBVkVfREVDTF9GUkVFQUREUklORk89MA0KICBm aQ0KICBpZiB0ZXN0ICRhY19jdl9oYXZlX2RlY2xfZ2FpX3N0cmVycm9yID0gbm87IHRoZW4NCiAg ICBIQVZFX0RFQ0xfR0FJX1NUUkVSUk9SPTANCiAgZmkNCiAgaWYgdGVzdCAkYWNfY3ZfaGF2ZV9k ZWNsX2dldG5hbWVpbmZvID0gbm87IHRoZW4NCiAgICBIQVZFX0RFQ0xfR0VUTkFNRUlORk89MA0K ICBmaQ0KDQogIGFjX2ZuX2NfY2hlY2tfdHlwZSAiJExJTkVOTyIgInN0cnVjdCBhZGRyaW5mbyIg ImFjX2N2X3R5cGVfc3RydWN0X2FkZHJpbmZvIiAiDQojaW5jbHVkZSA8c3lzL3R5cGVzLmg+DQoj aWZkZWYgSEFWRV9TWVNfU09DS0VUX0gNCiNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+DQojZW5kaWYN CiNpZmRlZiBIQVZFX05FVERCX0gNCiNpbmNsdWRlIDxuZXRkYi5oPg0KI2VuZGlmDQojaWZkZWYg SEFWRV9XUzJUQ1BJUF9IDQojaW5jbHVkZSA8d3MydGNwaXAuaD4NCiNlbmRpZg0KDQoiDQppZiB0 ZXN0ICJ4JGFjX2N2X3R5cGVfc3RydWN0X2FkZHJpbmZvIiA9IHh5ZXM7IHRoZW4gOg0KDQpjYXQg Pj5jb25mZGVmcy5oIDw8X0FDRU9GDQojZGVmaW5lIEhBVkVfU1RSVUNUX0FERFJJTkZPIDENCl9B Q0VPRg0KDQoNCmZpDQoNCiAgaWYgdGVzdCAkYWNfY3ZfdHlwZV9zdHJ1Y3RfYWRkcmluZm8gPSBu bzsgdGhlbg0KICAgIEhBVkVfU1RSVUNUX0FERFJJTkZPPTANCiAgZmkNCg0KICAgIGNhc2UgIiAk R0VUQUREUklORk9fTElCICIgaW4NCiAgICAqIiAkSE9TVEVOVF9MSUIgIiopIDs7DQogICAgKikg R0VUQUREUklORk9fTElCPSIkR0VUQUREUklORk9fTElCICRIT1NURU5UX0xJQiIgOzsNCiAgZXNh Yw0KDQogICAgY2FzZSAiICRHRVRBRERSSU5GT19MSUIgIiBpbg0KICAgICoiICRTRVJWRU5UX0xJ QiAiKikgOzsNCiAgICAqKSBHRVRBRERSSU5GT19MSUI9IiRHRVRBRERSSU5GT19MSUIgJFNFUlZF TlRfTElCIiA7Ow0KICBlc2FjDQoNCiAgICBjYXNlICIgJEdFVEFERFJJTkZPX0xJQiAiIGluDQog ICAgKiIgJElORVRfTlRPUF9MSUIgIiopIDs7DQogICAgKikgR0VUQUREUklORk9fTElCPSIkR0VU QUREUklORk9fTElCICRJTkVUX05UT1BfTElCIiA7Ow0KICBlc2FjDQoNCg0KDQoNCg0KDQoNCiAg R05VTElCX0dFVEFERFJJTkZPPTENCg0KDQogICMgQ29kZSBmcm9tIG1vZHVsZSBnZXRjd2Q6DQoN Cg0KDQoNCiAgZ2xfYWJvcnRfYnVnPW5vDQogIGNhc2UgJGdsX2N2X2Z1bmNfZ2V0Y3dkX251bGws JGhvc3Rfb3MgaW4NCiAgKixtaW5ndyopDQogICAgZ2xfY3ZfZnVuY19nZXRjd2RfcGF0aF9tYXg9 eWVzOzsNCiAgeWVzLCopDQoNCg0KDQogIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0k TElORU5PfTogY2hlY2tpbmcgd2hldGhlciBnZXRjd2QgaGFuZGxlcyBsb25nIGZpbGUgbmFtZXMg cHJvcGVybHkiID4mNQ0KJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciBnZXRjd2QgaGFuZGxl cyBsb25nIGZpbGUgbmFtZXMgcHJvcGVybHkuLi4gIiA+JjY7IH0NCmlmICR7Z2xfY3ZfZnVuY19n ZXRjd2RfcGF0aF9tYXgrOn0gZmFsc2U7IHRoZW4gOg0KICAkYXNfZWNob19uICIoY2FjaGVkKSAi ID4mNg0KZWxzZQ0KICAjIEFycmFuZ2UgZm9yIGRlbGV0aW9uIG9mIHRoZSB0ZW1wb3JhcnkgZGly ZWN0b3J5IHRoaXMgdGVzdCBjcmVhdGVzLg0KICAgICBhY19jbGVhbl9maWxlcz0iJGFjX2NsZWFu X2ZpbGVzIGNvbmZkaXIzIg0KICAgICBpZiB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IHllczsg dGhlbiA6DQogIGdsX2N2X2Z1bmNfZ2V0Y3dkX3BhdGhfbWF4PW5vDQplbHNlDQogIGNhdCBjb25m ZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQNCi8qIGVuZCBjb25mZGVmcy5oLiAg Ki8NCg0KI2luY2x1ZGUgPGVycm5vLmg+DQojaW5jbHVkZSA8c3RkbGliLmg+DQojaW5jbHVkZSA8 dW5pc3RkLmg+DQojaW5jbHVkZSA8c3RyaW5nLmg+DQojaW5jbHVkZSA8bGltaXRzLmg+DQojaW5j bHVkZSA8c3lzL3N0YXQuaD4NCiNpbmNsdWRlIDxzeXMvdHlwZXMuaD4NCiNpbmNsdWRlIDxmY250 bC5oPg0KDQojaWZuZGVmIEFUX0ZEQ1dEDQojIGRlZmluZSBBVF9GRENXRCAwDQojZW5kaWYNCiNp ZmRlZiBFTkFNRVRPT0xPTkcNCiMgZGVmaW5lIGlzX0VOQU1FVE9PTE9ORyh4KSAoKHgpID09IEVO QU1FVE9PTE9ORykNCiNlbHNlDQojIGRlZmluZSBpc19FTkFNRVRPT0xPTkcoeCkgMA0KI2VuZGlm DQoNCi8qIERvbid0IGdldCBsaW5rIGVycm9ycyBiZWNhdXNlIG1rZGlyIGlzIHJlZGVmaW5lZCB0 byBycGxfbWtkaXIuICAqLw0KI3VuZGVmIG1rZGlyDQoNCiNpZm5kZWYgU19JUldYVQ0KIyBkZWZp bmUgU19JUldYVSAwNzAwDQojZW5kaWYNCg0KLyogVGhlIGxlbmd0aCBvZiB0aGlzIG5hbWUgbXVz dCBiZSA4LiAgKi8NCiNkZWZpbmUgRElSX05BTUUgImNvbmZkaXIzIg0KI2RlZmluZSBESVJfTkFN RV9MRU4gOA0KI2RlZmluZSBESVJfTkFNRV9TSVpFIChESVJfTkFNRV9MRU4gKyAxKQ0KDQovKiBU aGUgbGVuZ3RoIG9mICIuLi8iLiAgKi8NCiNkZWZpbmUgRE9URE9UU0xBU0hfTEVOIDMNCg0KLyog TGVmdG92ZXIgYnl0ZXMgaW4gdGhlIGJ1ZmZlciwgdG8gd29yayBhcm91bmQgbGlicmFyeSBvciBP UyBidWdzLiAgKi8NCiNkZWZpbmUgQlVGX1NMT1AgMjANCg0KaW50DQptYWluICgpDQp7DQojaWZu ZGVmIFBBVEhfTUFYDQogIC8qIFRoZSBIdXJkIGRvZXNuJ3QgZGVmaW5lIHRoaXMsIHNvIGdldGN3 ZCBjYW4ndCBleGhpYml0IHRoZSBidWcgLS0NCiAgICAgYXQgbGVhc3Qgbm90IG9uIGEgbG9jYWwg ZmlsZSBzeXN0ZW0uICBBbmQgaWYgd2Ugd2VyZSB0byBzdGFydCB3b3JyeWluZw0KICAgICBhYm91 dCByZW1vdGUgZmlsZSBzeXN0ZW1zLCB3ZSdkIGhhdmUgdG8gZW5hYmxlIHRoZSB3cmFwcGVyIGZ1 bmN0aW9uDQogICAgIGFsbCBvZiB0aGUgdGltZSwganVzdCB0byBiZSBzYWZlLiAgVGhhdCdzIG5v dCB3b3J0aCB0aGUgY29zdC4gICovDQogIGV4aXQgKDApOw0KI2VsaWYgKChJTlRfTUFYIC8gKERJ Ul9OQU1FX1NJWkUgLyBET1RET1RTTEFTSF9MRU4gKyAxKSBcDQogICAgICAgIC0gRElSX05BTUVf U0laRSAtIEJVRl9TTE9QKSBcDQogICAgICAgPD0gUEFUSF9NQVgpDQogIC8qIEZJWE1FOiBBc3N1 bWluZyB0aGVyZSdzIGEgc3lzdGVtIGZvciB3aGljaCB0aGlzIGlzIHRydWUsDQogICAgIHRoaXMg c2hvdWxkIGJlIGRvbmUgaW4gYSBjb21waWxlIHRlc3QuICAqLw0KICBleGl0ICgwKTsNCiNlbHNl DQogIGNoYXIgYnVmW1BBVEhfTUFYICogKERJUl9OQU1FX1NJWkUgLyBET1RET1RTTEFTSF9MRU4g KyAxKQ0KICAgICAgICAgICArIERJUl9OQU1FX1NJWkUgKyBCVUZfU0xPUF07DQogIGNoYXIgKmN3 ZCA9IGdldGN3ZCAoYnVmLCBQQVRIX01BWCk7DQogIHNpemVfdCBpbml0aWFsX2N3ZF9sZW47DQog IHNpemVfdCBjd2RfbGVuOw0KICBpbnQgZmFpbCA9IDA7DQogIHNpemVfdCBuX2NoZGlycyA9IDA7 DQoNCiAgaWYgKGN3ZCA9PSBOVUxMKQ0KICAgIGV4aXQgKDEwKTsNCg0KICBjd2RfbGVuID0gaW5p dGlhbF9jd2RfbGVuID0gc3RybGVuIChjd2QpOw0KDQogIHdoaWxlICgxKQ0KICAgIHsNCiAgICAg IHNpemVfdCBkb3Rkb3RfbWF4ID0gUEFUSF9NQVggKiAoRElSX05BTUVfU0laRSAvIERPVERPVFNM QVNIX0xFTik7DQogICAgICBjaGFyICpjID0gTlVMTDsNCg0KICAgICAgY3dkX2xlbiArPSBESVJf TkFNRV9TSVpFOw0KICAgICAgLyogSWYgbWtkaXIgb3IgY2hkaXIgZmFpbHMsIGl0IGNvdWxkIGJl IHRoYXQgdGhpcyBzeXN0ZW0gY2Fubm90IGNyZWF0ZQ0KICAgICAgICAgYW55IGZpbGUgd2l0aCBh biBhYnNvbHV0ZSBuYW1lIGxvbmdlciB0aGFuIFBBVEhfTUFYLCBzdWNoIGFzIGN5Z3dpbi4NCiAg ICAgICAgIElmIHNvLCBsZWF2ZSBmYWlsIGFzIDAsIGJlY2F1c2UgdGhlIGN1cnJlbnQgd29ya2lu ZyBkaXJlY3RvcnkgY2FuJ3QNCiAgICAgICAgIGJlIHRvbyBsb25nIGZvciBnZXRjd2QgaWYgaXQg Y2FuJ3QgZXZlbiBiZSBjcmVhdGVkLiAgRm9yIG90aGVyDQogICAgICAgICBlcnJvcnMsIGJlIHBl c3NpbWlzdGljIGFuZCBjb25zaWRlciB0aGF0IGFzIGEgZmFpbHVyZSwgdG9vLiAgKi8NCiAgICAg IGlmIChta2RpciAoRElSX05BTUUsIFNfSVJXWFUpIDwgMCB8fCBjaGRpciAoRElSX05BTUUpIDwg MCkNCiAgICAgICAgew0KICAgICAgICAgIGlmICghIChlcnJubyA9PSBFUkFOR0UgfHwgaXNfRU5B TUVUT09MT05HIChlcnJubykpKQ0KICAgICAgICAgICAgZmFpbCA9IDIwOw0KICAgICAgICAgIGJy ZWFrOw0KICAgICAgICB9DQoNCiAgICAgIGlmIChQQVRIX01BWCA8PSBjd2RfbGVuICYmIGN3ZF9s ZW4gPCBQQVRIX01BWCArIERJUl9OQU1FX1NJWkUpDQogICAgICAgIHsNCiAgICAgICAgICBjID0g Z2V0Y3dkIChidWYsIFBBVEhfTUFYKTsNCiAgICAgICAgICBpZiAoIWMgJiYgZXJybm8gPT0gRU5P RU5UKQ0KICAgICAgICAgICAgew0KICAgICAgICAgICAgICBmYWlsID0gMTE7DQogICAgICAgICAg ICAgIGJyZWFrOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgIGlmIChjIHx8ICEgKGVycm5vID09 IEVSQU5HRSB8fCBpc19FTkFNRVRPT0xPTkcgKGVycm5vKSkpDQogICAgICAgICAgICB7DQogICAg ICAgICAgICAgIGZhaWwgPSAyMTsNCiAgICAgICAgICAgICAgYnJlYWs7DQogICAgICAgICAgICB9 DQogICAgICAgIH0NCg0KICAgICAgaWYgKGRvdGRvdF9tYXggPD0gY3dkX2xlbiAtIGluaXRpYWxf Y3dkX2xlbikNCiAgICAgICAgew0KICAgICAgICAgIGlmIChkb3Rkb3RfbWF4ICsgRElSX05BTUVf U0laRSA8IGN3ZF9sZW4gLSBpbml0aWFsX2N3ZF9sZW4pDQogICAgICAgICAgICBicmVhazsNCiAg ICAgICAgICBjID0gZ2V0Y3dkIChidWYsIGN3ZF9sZW4gKyAxKTsNCiAgICAgICAgICBpZiAoIWMp DQogICAgICAgICAgICB7DQogICAgICAgICAgICAgIGlmICghIChlcnJubyA9PSBFUkFOR0UgfHwg ZXJybm8gPT0gRU5PRU5UDQogICAgICAgICAgICAgICAgICAgICB8fCBpc19FTkFNRVRPT0xPTkcg KGVycm5vKSkpDQogICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgZmFpbCA9IDIy Ow0KICAgICAgICAgICAgICAgICAgYnJlYWs7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAg ICAgICBpZiAoQVRfRkRDV0QgfHwgZXJybm8gPT0gRVJBTkdFIHx8IGVycm5vID09IEVOT0VOVCkN CiAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICBmYWlsID0gMTI7DQogICAgICAg ICAgICAgICAgICBicmVhazsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9DQogICAg ICAgIH0NCg0KICAgICAgaWYgKGMgJiYgc3RybGVuIChjKSAhPSBjd2RfbGVuKQ0KICAgICAgICB7 DQogICAgICAgICAgZmFpbCA9IDIzOw0KICAgICAgICAgIGJyZWFrOw0KICAgICAgICB9DQogICAg ICArK25fY2hkaXJzOw0KICAgIH0NCg0KICAvKiBMZWF2aW5nIGJlaGluZCBzdWNoIGEgZGVlcCBk aXJlY3RvcnkgaXMgbm90IHBvbGl0ZS4NCiAgICAgU28gY2xlYW4gdXAgaGVyZSwgcmlnaHQgYXdh eSwgZXZlbiB0aG91Z2ggdGhlIGRyaXZpbmcNCiAgICAgc2hlbGwgc2NyaXB0IHdvdWxkIGFsc28g Y2xlYW4gdXAuICAqLw0KICB7DQogICAgc2l6ZV90IGk7DQoNCiAgICAvKiBUcnkgcm1kaXIgZmly c3QsIGluIGNhc2UgdGhlIGNoZGlyIGZhaWxlZC4gICovDQogICAgcm1kaXIgKERJUl9OQU1FKTsN CiAgICBmb3IgKGkgPSAwOyBpIDw9IG5fY2hkaXJzOyBpKyspDQogICAgICB7DQogICAgICAgIGlm IChjaGRpciAoIi4uIikgPCAwKQ0KICAgICAgICAgIGJyZWFrOw0KICAgICAgICBpZiAocm1kaXIg KERJUl9OQU1FKSAhPSAwKQ0KICAgICAgICAgIGJyZWFrOw0KICAgICAgfQ0KICB9DQoNCiAgZXhp dCAoZmFpbCk7DQojZW5kaWYNCn0NCg0KX0FDRU9GDQppZiBhY19mbl9jX3RyeV9ydW4gIiRMSU5F Tk8iOyB0aGVuIDoNCiAgZ2xfY3ZfZnVuY19nZXRjd2RfcGF0aF9tYXg9eWVzDQplbHNlDQogIGNh c2UgJD8gaW4NCiAgICAgMTB8MTF8MTIpIGdsX2N2X2Z1bmNfZ2V0Y3dkX3BhdGhfbWF4PSdubywg YnV0IGl0IGlzIHBhcnRseSB3b3JraW5nJzs7DQogICAgICopIGdsX2N2X2Z1bmNfZ2V0Y3dkX3Bh dGhfbWF4PW5vOzsNCiAgICAgZXNhYw0KZmkNCnJtIC1mIGNvcmUgKi5jb3JlIGNvcmUuY29uZnRl c3QuKiBnbW9uLm91dCBiYi5vdXQgY29uZnRlc3QkYWNfZXhlZXh0IFwNCiAgY29uZnRlc3QuJGFj X29iamV4dCBjb25mdGVzdC5iZWFtIGNvbmZ0ZXN0LiRhY19leHQNCmZpDQoNCg0KZmkNCnsgJGFz X2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkZ2xfY3ZfZnVuY19n ZXRjd2RfcGF0aF9tYXgiID4mNQ0KJGFzX2VjaG8gIiRnbF9jdl9mdW5jX2dldGN3ZF9wYXRoX21h eCIgPiY2OyB9DQogIGNhc2UgJGdsX2N2X2Z1bmNfZ2V0Y3dkX3BhdGhfbWF4IGluDQogIG5vLCop DQoNCiRhc19lY2hvICIjZGVmaW5lIEhBVkVfUEFSVExZX1dPUktJTkdfR0VUQ1dEIDEiID4+Y29u ZmRlZnMuaA0KOzsNCiAgZXNhYw0KDQoNCg0KICBmb3IgYWNfZnVuYyBpbiBnZXRwYWdlc2l6ZQ0K ZG8gOg0KICBhY19mbl9jX2NoZWNrX2Z1bmMgIiRMSU5FTk8iICJnZXRwYWdlc2l6ZSIgImFjX2N2 X2Z1bmNfZ2V0cGFnZXNpemUiDQppZiB0ZXN0ICJ4JGFjX2N2X2Z1bmNfZ2V0cGFnZXNpemUiID0g eHllczsgdGhlbiA6DQogIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YNCiNkZWZpbmUgSEFWRV9H RVRQQUdFU0laRSAxDQpfQUNFT0YNCg0KZmkNCmRvbmUNCg0KICB7ICRhc19lY2hvICIkYXNfbWU6 JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgZ2V0Y3dkIGFib3J0cyB3aGVu IDRrIDwgY3dkX2xlbmd0aCA8IDE2ayIgPiY1DQokYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVy IGdldGN3ZCBhYm9ydHMgd2hlbiA0ayA8IGN3ZF9sZW5ndGggPCAxNmsuLi4gIiA+JjY7IH0NCmlm ICR7Z2xfY3ZfZnVuY19nZXRjd2RfYWJvcnRfYnVnKzp9IGZhbHNlOyB0aGVuIDoNCiAgJGFzX2Vj aG9fbiAiKGNhY2hlZCkgIiA+JjYNCmVsc2UNCiAgIyBSZW1vdmUgYW55IHJlbW5hbnRzIG9mIGEg cHJldmlvdXMgdGVzdC4NCiAgICAgcm0gLXJmIGNvbmZkaXItMTRCLS0tDQogICAgICMgQXJyYW5n ZSBmb3IgZGVsZXRpb24gb2YgdGhlIHRlbXBvcmFyeSBkaXJlY3RvcnkgdGhpcyB0ZXN0IGNyZWF0 ZXMuDQogICAgIGFjX2NsZWFuX2ZpbGVzPSIkYWNfY2xlYW5fZmlsZXMgY29uZmRpci0xNEItLS0i DQogICAgIGlmIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0geWVzOyB0aGVuIDoNCiAgZ2xfY3Zf ZnVuY19nZXRjd2RfYWJvcnRfYnVnPXllcw0KZWxzZQ0KICBjYXQgY29uZmRlZnMuaCAtIDw8X0FD RU9GID5jb25mdGVzdC4kYWNfZXh0DQovKiBlbmQgY29uZmRlZnMuaC4gICovDQoNCiNpbmNsdWRl IDxzdGRsaWIuaD4NCiNpbmNsdWRlIDx1bmlzdGQuaD4NCiNpbmNsdWRlIDxsaW1pdHMuaD4NCiNp bmNsdWRlIDxzdHJpbmcuaD4NCiNpbmNsdWRlIDxzeXMvc3RhdC5oPg0KDQovKiBEb24ndCBnZXQg bGluayBlcnJvcnMgYmVjYXVzZSBta2RpciBpcyByZWRlZmluZWQgdG8gcnBsX21rZGlyLiAgKi8N CiN1bmRlZiBta2Rpcg0KDQojaWZuZGVmIFNfSVJXWFUNCiMgZGVmaW5lIFNfSVJXWFUgMDcwMA0K I2VuZGlmDQoNCi8qIEZJWE1FOiBza2lwIHRoZSBydW4tdGVzdCBhbHRvZ2V0aGVyIG9uIHN5c3Rl bXMgd2l0aG91dCBnZXRwYWdlc2l6ZS4gICovDQojaWYgISBIQVZFX0dFVFBBR0VTSVpFDQojIGRl ZmluZSBnZXRwYWdlc2l6ZSgpIDANCiNlbmRpZg0KDQovKiBUaGlzIHNpemUgaXMgY2hvc2VuIHRv IGJlIGxhcmdlciB0aGFuIFBBVEhfTUFYICg0ayksIHlldCBzbWFsbGVyIHRoYW4NCiAgIHRoZSAx NmtCIHBhZ2VzaXplIG9uIGlhNjQgbGludXguICBUaG9zZSBjb25kaXRpb25zIG1ha2UgdGhlIGNv ZGUgYmVsb3cNCiAgIHRyaWdnZXIgYSBidWcgaW4gZ2xpYmMncyBnZXRjd2QgaW1wbGVtZW50YXRp b24gYmVmb3JlIDIuNC45MC0xMC4gICovDQojZGVmaW5lIFRBUkdFVF9MRU4gKDUgKiAxMDI0KQ0K DQppbnQNCm1haW4gKCkNCnsNCiAgY2hhciBjb25zdCAqZGlyX25hbWUgPSAiY29uZmRpci0xNEIt LS0iOw0KICBjaGFyICpjd2Q7DQogIHNpemVfdCBpbml0aWFsX2N3ZF9sZW47DQogIGludCBmYWls ID0gMDsNCiAgc2l6ZV90IGRlc2lyZWRfZGVwdGg7DQogIHNpemVfdCBkOw0KDQogIC8qIFRoZSBi dWcgaXMgdHJpZ2dlcmVkIHdoZW4gUEFUSF9NQVggPCBnZXRwYWdlc2l6ZSAoKSwgc28gc2tpcA0K ICAgICB0aGlzIHJlbGF0aXZlIGV4cGVuc2l2ZSBhbmQgaW52YXNpdmUgdGVzdCBpZiB0aGF0J3Mg bm90IHRydWUuICAqLw0KICBpZiAoZ2V0cGFnZXNpemUgKCkgPD0gUEFUSF9NQVgpDQogICAgcmV0 dXJuIDA7DQoNCiAgY3dkID0gZ2V0Y3dkIChOVUxMLCAwKTsNCiAgaWYgKGN3ZCA9PSBOVUxMKQ0K ICAgIHJldHVybiAwOw0KDQogIGluaXRpYWxfY3dkX2xlbiA9IHN0cmxlbiAoY3dkKTsNCiAgZnJl ZSAoY3dkKTsNCiAgZGVzaXJlZF9kZXB0aCA9ICgoVEFSR0VUX0xFTiAtIDEgLSBpbml0aWFsX2N3 ZF9sZW4pDQogICAgICAgICAgICAgICAgICAgLyAoMSArIHN0cmxlbiAoZGlyX25hbWUpKSk7DQog IGZvciAoZCA9IDA7IGQgPCBkZXNpcmVkX2RlcHRoOyBkKyspDQogICAgew0KICAgICAgaWYgKG1r ZGlyIChkaXJfbmFtZSwgU19JUldYVSkgPCAwIHx8IGNoZGlyIChkaXJfbmFtZSkgPCAwKQ0KICAg ICAgICB7DQogICAgICAgICAgZmFpbCA9IDM7IC8qIFVuYWJsZSB0byBjb25zdHJ1Y3QgZGVlcCBo aWVyYXJjaHkuICAqLw0KICAgICAgICAgIGJyZWFrOw0KICAgICAgICB9DQogICAgfQ0KDQogIC8q IElmIGxpYmMgaGFzIHRoZSBidWcgaW4gcXVlc3Rpb24sIHRoaXMgaW52b2NhdGlvbiBvZiBnZXRj d2QNCiAgICAgcmVzdWx0cyBpbiBhIGZhaWxlZCBhc3NlcnRpb24uICAqLw0KICBjd2QgPSBnZXRj d2QgKE5VTEwsIDApOw0KICBpZiAoY3dkID09IE5VTEwpDQogICAgZmFpbCA9IDQ7IC8qIGdldGN3 ZCBmYWlsZWQuICBUaGlzIGlzIG9rLCBhbmQgZXhwZWN0ZWQuICAqLw0KICBmcmVlIChjd2QpOw0K DQogIC8qIENhbGwgcm1kaXIgZmlyc3QsIGluIGNhc2UgdGhlIGFib3ZlIGNoZGlyIGZhaWxlZC4g ICovDQogIHJtZGlyIChkaXJfbmFtZSk7DQogIHdoaWxlICgwIDwgZC0tKQ0KICAgIHsNCiAgICAg IGlmIChjaGRpciAoIi4uIikgPCAwKQ0KICAgICAgICBicmVhazsNCiAgICAgIHJtZGlyIChkaXJf bmFtZSk7DQogICAgfQ0KDQogIHJldHVybiAwOw0KfQ0KDQpfQUNFT0YNCmlmIGFjX2ZuX2NfdHJ5 X3J1biAiJExJTkVOTyI7IHRoZW4gOg0KICBnbF9jdl9mdW5jX2dldGN3ZF9hYm9ydF9idWc9bm8N CmVsc2UNCiAgZ2xfY3ZfZnVuY19nZXRjd2RfYWJvcnRfYnVnPXllcw0KZmkNCnJtIC1mIGNvcmUg Ki5jb3JlIGNvcmUuY29uZnRlc3QuKiBnbW9uLm91dCBiYi5vdXQgY29uZnRlc3QkYWNfZXhlZXh0 IFwNCiAgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC5iZWFtIGNvbmZ0ZXN0LiRhY19leHQN CmZpDQoNCg0KZmkNCnsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVz dWx0OiAkZ2xfY3ZfZnVuY19nZXRjd2RfYWJvcnRfYnVnIiA+JjUNCiRhc19lY2hvICIkZ2xfY3Zf ZnVuY19nZXRjd2RfYWJvcnRfYnVnIiA+JjY7IH0NCiAgaWYgdGVzdCAkZ2xfY3ZfZnVuY19nZXRj d2RfYWJvcnRfYnVnID0geWVzOyB0aGVuIDoNCiAgZ2xfYWJvcnRfYnVnPXllcw0KZmkNCjs7DQog IGVzYWMNCg0KICBjYXNlICRnbF9jdl9mdW5jX2dldGN3ZF9udWxsLCRnbF9jdl9mdW5jX2dldGN3 ZF9wYXRoX21heCwkZ2xfYWJvcnRfYnVnIGluDQogICp5ZXMseWVzLG5vKSA7Ow0KICAqKQ0KICAg IFJFUExBQ0VfR0VUQ1dEPTENCg0KDQoNCg0KDQoNCg0KDQogIGdsX0xJQk9CSlM9IiRnbF9MSUJP QkpTIGdldGN3ZC4kYWNfb2JqZXh0Ig0KDQoNCg0KDQogIDoNCjs7DQogIGVzYWMNCg0KDQoNCg0K ICBHTlVMSUJfR0VUQ1dEPTENCg0KDQoNCiRhc19lY2hvICIjZGVmaW5lIEdOVUxJQl9URVNUX0dF VENXRCAxIiA+PmNvbmZkZWZzLmgNCg0KDQoNCiAgIyBDb2RlIGZyb20gbW9kdWxlIGdldGRlbGlt Og0KDQoNCg0KDQoNCg0KDQoNCiAgaWYgdGVzdCAkYWNfY3ZfZnVuY19nZXRkZWxpbSA9IHllczsg dGhlbg0KICAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNo ZWNraW5nIGZvciB3b3JraW5nIGdldGRlbGltIGZ1bmN0aW9uIiA+JjUNCiRhc19lY2hvX24gImNo ZWNraW5nIGZvciB3b3JraW5nIGdldGRlbGltIGZ1bmN0aW9uLi4uICIgPiY2OyB9DQppZiAke2ds X2N2X2Z1bmNfd29ya2luZ19nZXRkZWxpbSs6fSBmYWxzZTsgdGhlbiA6DQogICRhc19lY2hvX24g IihjYWNoZWQpICIgPiY2DQplbHNlDQogIGVjaG8gZm9vTmJhck4gfCB0ciAtZCAnXDAxMicgfCB0 ciBOICdcMDEyJyA+IGNvbmZ0ZXN0LmRhdGENCiAgICBpZiB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5n IiA9IHllczsgdGhlbiA6DQogICAgICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0 ZXN0LiRhY19leHQNCi8qIGVuZCBjb25mZGVmcy5oLiAgKi8NCg0KI2luY2x1ZGUgPGZlYXR1cmVz Lmg+DQojaWZkZWYgX19HTlVfTElCUkFSWV9fDQogI2lmIChfX0dMSUJDX18gPj0gMikgJiYgIWRl ZmluZWQgX19VQ0xJQkNfXw0KICBMdWNreSBHTlUgdXNlcg0KICNlbmRpZg0KI2VuZGlmDQoNCl9B Q0VPRg0KaWYgKGV2YWwgIiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCIpIDI+JjUgfA0KICAkRUdS RVAgIkx1Y2t5IEdOVSB1c2VyIiA+L2Rldi9udWxsIDI+JjE7IHRoZW4gOg0KICBnbF9jdl9mdW5j X3dvcmtpbmdfZ2V0ZGVsaW09eWVzDQplbHNlDQogIGdsX2N2X2Z1bmNfd29ya2luZ19nZXRkZWxp bT1ubw0KZmkNCnJtIC1mIGNvbmZ0ZXN0Kg0KDQoNCmVsc2UNCiAgY2F0IGNvbmZkZWZzLmggLSA8 PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dA0KLyogZW5kIGNvbmZkZWZzLmguICAqLw0KDQojICAg IGluY2x1ZGUgPHN0ZGlvLmg+DQojICAgIGluY2x1ZGUgPHN0ZGxpYi5oPg0KIyAgICBpbmNsdWRl IDxzdHJpbmcuaD4NCiAgICBpbnQgbWFpbiAoKQ0KICAgIHsNCiAgICAgIEZJTEUgKmluID0gZm9w ZW4gKCIuL2NvbmZ0ZXN0LmRhdGEiLCAiciIpOw0KICAgICAgaWYgKCFpbikNCiAgICAgICAgcmV0 dXJuIDE7DQogICAgICB7DQogICAgICAgIC8qIFRlc3QgcmVzdWx0IGZvciBhIE5VTEwgYnVmZmVy IGFuZCBhIHplcm8gc2l6ZS4NCiAgICAgICAgICAgQmFzZWQgb24gYSB0ZXN0IHByb2dyYW0gZnJv bSBLYXJsIEhldWVyLiAgKi8NCiAgICAgICAgY2hhciAqbGluZSA9IE5VTEw7DQogICAgICAgIHNp emVfdCBzaXogPSAwOw0KICAgICAgICBpbnQgbGVuID0gZ2V0ZGVsaW0gKCZsaW5lLCAmc2l6LCAn XG4nLCBpbik7DQogICAgICAgIGlmICghKGxlbiA9PSA0ICYmIGxpbmUgJiYgc3RyY21wIChsaW5l LCAiZm9vXG4iKSA9PSAwKSkNCiAgICAgICAgICByZXR1cm4gMjsNCiAgICAgIH0NCiAgICAgIHsN CiAgICAgICAgLyogVGVzdCByZXN1bHQgZm9yIGEgTlVMTCBidWZmZXIgYW5kIGEgbm9uLXplcm8g c2l6ZS4NCiAgICAgICAgICAgVGhpcyBjcmFzaGVzIG9uIEZyZWVCU0QgOC4wLiAgKi8NCiAgICAg ICAgY2hhciAqbGluZSA9IE5VTEw7DQogICAgICAgIHNpemVfdCBzaXogPSAoc2l6ZV90KSh+MCkg LyA0Ow0KICAgICAgICBpZiAoZ2V0ZGVsaW0gKCZsaW5lLCAmc2l6LCAnXG4nLCBpbikgPT0gLTEp DQogICAgICAgICAgcmV0dXJuIDM7DQogICAgICB9DQogICAgICByZXR1cm4gMDsNCiAgICB9DQoN Cl9BQ0VPRg0KaWYgYWNfZm5fY190cnlfcnVuICIkTElORU5PIjsgdGhlbiA6DQogIGdsX2N2X2Z1 bmNfd29ya2luZ19nZXRkZWxpbT15ZXMNCmVsc2UNCiAgZ2xfY3ZfZnVuY193b3JraW5nX2dldGRl bGltPW5vDQpmaQ0Kcm0gLWYgY29yZSAqLmNvcmUgY29yZS5jb25mdGVzdC4qIGdtb24ub3V0IGJi Lm91dCBjb25mdGVzdCRhY19leGVleHQgXA0KICBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0 LmJlYW0gY29uZnRlc3QuJGFjX2V4dA0KZmkNCg0KZmkNCnsgJGFzX2VjaG8gIiRhc19tZToke2Fz X2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkZ2xfY3ZfZnVuY193b3JraW5nX2dldGRlbGltIiA+ JjUNCiRhc19lY2hvICIkZ2xfY3ZfZnVuY193b3JraW5nX2dldGRlbGltIiA+JjY7IH0NCiAgZWxz ZQ0KICAgIGdsX2N2X2Z1bmNfd29ya2luZ19nZXRkZWxpbT1ubw0KICBmaQ0KDQogIGlmIHRlc3Qg JGFjX2N2X2hhdmVfZGVjbF9nZXRkZWxpbSA9IG5vOyB0aGVuDQogICAgSEFWRV9ERUNMX0dFVERF TElNPTANCiAgZmkNCg0KICBpZiB0ZXN0ICRnbF9jdl9mdW5jX3dvcmtpbmdfZ2V0ZGVsaW0gPSBu bzsgdGhlbg0KICAgIGlmIHRlc3QgJGFjX2N2X2Z1bmNfZ2V0ZGVsaW0gPSB5ZXM7IHRoZW4NCiAg ICAgIFJFUExBQ0VfR0VUREVMSU09MQ0KICAgIGZpDQoNCg0KDQoNCg0KDQoNCg0KICBnbF9MSUJP QkpTPSIkZ2xfTElCT0JKUyBnZXRkZWxpbS4kYWNfb2JqZXh0Ig0KDQoNCiAgZm9yIGFjX2Z1bmMg aW4gZmxvY2tmaWxlIGZ1bmxvY2tmaWxlDQpkbyA6DQogIGFzX2FjX3Zhcj1gJGFzX2VjaG8gImFj X2N2X2Z1bmNfJGFjX2Z1bmMiIHwgJGFzX3RyX3NoYA0KYWNfZm5fY19jaGVja19mdW5jICIkTElO RU5PIiAiJGFjX2Z1bmMiICIkYXNfYWNfdmFyIg0KaWYgZXZhbCB0ZXN0IFwieFwkIiRhc19hY192 YXIiXCIgPSB4InllcyI7IHRoZW4gOg0KICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GDQojZGVm aW5lIGAkYXNfZWNobyAiSEFWRV8kYWNfZnVuYyIgfCAkYXNfdHJfY3BwYCAxDQpfQUNFT0YNCg0K ZmkNCmRvbmUNCg0KICBhY19mbl9jX2NoZWNrX2RlY2wgIiRMSU5FTk8iICJnZXRjX3VubG9ja2Vk IiAiYWNfY3ZfaGF2ZV9kZWNsX2dldGNfdW5sb2NrZWQiICIkYWNfaW5jbHVkZXNfZGVmYXVsdCIN CmlmIHRlc3QgIngkYWNfY3ZfaGF2ZV9kZWNsX2dldGNfdW5sb2NrZWQiID0geHllczsgdGhlbiA6 DQogIGFjX2hhdmVfZGVjbD0xDQplbHNlDQogIGFjX2hhdmVfZGVjbD0wDQpmaQ0KDQpjYXQgPj5j b25mZGVmcy5oIDw8X0FDRU9GDQojZGVmaW5lIEhBVkVfREVDTF9HRVRDX1VOTE9DS0VEICRhY19o YXZlX2RlY2wNCl9BQ0VPRg0KDQoNCiAgZmkNCg0KDQoNCg0KICBHTlVMSUJfR0VUREVMSU09MQ0K DQoNCg0KJGFzX2VjaG8gIiNkZWZpbmUgR05VTElCX1RFU1RfR0VUREVMSU0gMSIgPj5jb25mZGVm cy5oDQoNCg0KDQogICMgQ29kZSBmcm9tIG1vZHVsZSBnZXRkdGFibGVzaXplOg0KDQoNCg0KICBp ZiB0ZXN0ICRhY19jdl9mdW5jX2dldGR0YWJsZXNpemUgIT0geWVzOyB0aGVuDQogICAgSEFWRV9H RVREVEFCTEVTSVpFPTANCg0KDQoNCg0KDQoNCg0KDQogIGdsX0xJQk9CSlM9IiRnbF9MSUJPQkpT IGdldGR0YWJsZXNpemUuJGFjX29iamV4dCINCg0KICBmaQ0KDQoNCg0KDQogIEdOVUxJQl9HRVRE VEFCTEVTSVpFPTENCg0KDQoNCiRhc19lY2hvICIjZGVmaW5lIEdOVUxJQl9URVNUX0dFVERUQUJM RVNJWkUgMSIgPj5jb25mZGVmcy5oDQoNCg0KDQogICMgQ29kZSBmcm9tIG1vZHVsZSBnZXRncm91 cHM6DQoNCg0KDQoNCiAgaWYgdGVzdCAiJGFjX2N2X2Z1bmNfZ2V0Z3JvdXBzIiAhPSB5ZXM7IHRo ZW4NCg0KDQoNCg0KDQoNCg0KDQogIGdsX0xJQk9CSlM9IiRnbF9MSUJPQkpTIGdldGdyb3Vwcy4k YWNfb2JqZXh0Ig0KDQogICAgSEFWRV9HRVRHUk9VUFM9MA0KICBlbGlmIHRlc3QgIiRhY19jdl9m dW5jX2dldGdyb3Vwc193b3Jrcy4kYWNfY3ZfdHlwZV9nZXRncm91cHMiICE9IHllcy5naWRfdA0K ICB0aGVuDQoNCg0KDQoNCg0KDQoNCg0KICBnbF9MSUJPQkpTPSIkZ2xfTElCT0JKUyBnZXRncm91 cHMuJGFjX29iamV4dCINCg0KICAgIFJFUExBQ0VfR0VUR1JPVVBTPTENCg0KJGFzX2VjaG8gIiNk ZWZpbmUgR0VUR1JPVVBTX1pFUk9fQlVHIDEiID4+Y29uZmRlZnMuaA0KDQogIGVsc2UNCiAgICAg ICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0 aGVyIGdldGdyb3VwcyBoYW5kbGVzIG5lZ2F0aXZlIHZhbHVlcyIgPiY1DQokYXNfZWNob19uICJj aGVja2luZyB3aGV0aGVyIGdldGdyb3VwcyBoYW5kbGVzIG5lZ2F0aXZlIHZhbHVlcy4uLiAiID4m NjsgfQ0KaWYgJHtnbF9jdl9mdW5jX2dldGdyb3Vwc193b3Jrcys6fSBmYWxzZTsgdGhlbiA6DQog ICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2DQplbHNlDQogIGlmIHRlc3QgIiRjcm9zc19jb21w aWxpbmciID0geWVzOyB0aGVuIDoNCiAgZ2xfY3ZfZnVuY19nZXRncm91cHNfd29ya3M9Imd1ZXNz aW5nIG5vIg0KZWxzZQ0KICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNf ZXh0DQovKiBlbmQgY29uZmRlZnMuaC4gICovDQokYWNfaW5jbHVkZXNfZGVmYXVsdA0KaW50DQpt YWluICgpDQp7DQppbnQgc2l6ZSA9IGdldGdyb3VwcyAoMCwgMCk7DQogICAgICAgICAgZ2lkX3Qg Kmxpc3QgPSBtYWxsb2MgKHNpemUgKiBzaXplb2YgKmxpc3QpOw0KICAgICAgICAgIHJldHVybiBn ZXRncm91cHMgKC0xLCBsaXN0KSAhPSAtMTsNCiAgOw0KICByZXR1cm4gMDsNCn0NCl9BQ0VPRg0K aWYgYWNfZm5fY190cnlfcnVuICIkTElORU5PIjsgdGhlbiA6DQogIGdsX2N2X2Z1bmNfZ2V0Z3Jv dXBzX3dvcmtzPXllcw0KZWxzZQ0KICBnbF9jdl9mdW5jX2dldGdyb3Vwc193b3Jrcz1ubw0KZmkN CnJtIC1mIGNvcmUgKi5jb3JlIGNvcmUuY29uZnRlc3QuKiBnbW9uLm91dCBiYi5vdXQgY29uZnRl c3QkYWNfZXhlZXh0IFwNCiAgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC5iZWFtIGNvbmZ0 ZXN0LiRhY19leHQNCmZpDQoNCmZpDQp7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJ TkVOT306IHJlc3VsdDogJGdsX2N2X2Z1bmNfZ2V0Z3JvdXBzX3dvcmtzIiA+JjUNCiRhc19lY2hv ICIkZ2xfY3ZfZnVuY19nZXRncm91cHNfd29ya3MiID4mNjsgfQ0KICAgIGlmIHRlc3QgIiRnbF9j dl9mdW5jX2dldGdyb3Vwc193b3JrcyIgIT0geWVzOyB0aGVuDQoNCg0KDQoNCg0KDQoNCg0KICBn bF9MSUJPQkpTPSIkZ2xfTElCT0JKUyBnZXRncm91cHMuJGFjX29iamV4dCINCg0KICAgICAgUkVQ TEFDRV9HRVRHUk9VUFM9MQ0KICAgIGZpDQogIGZpDQogIHRlc3QgLW4gIiRHRVRHUk9VUFNfTElC IiAmJiBMSUJTPSIkR0VUR1JPVVBTX0xJQiAkTElCUyINCg0KDQoNCg0KICBHTlVMSUJfR0VUR1JP VVBTPTENCg0KDQoNCiRhc19lY2hvICIjZGVmaW5lIEdOVUxJQl9URVNUX0dFVEdST1VQUyAxIiA+ PmNvbmZkZWZzLmgNCg0KDQoNCiAgIyBDb2RlIGZyb20gbW9kdWxlIGdldGhvc3RuYW1lOg0KDQoN Cg0KDQoNCg0KICBpZiB0ZXN0ICRhY19jdl9oZWFkZXJfc3lzX3NvY2tldF9oICE9IHllczsgdGhl bg0KICAgICAgICAgICAgICAgICAgICBmb3IgYWNfaGVhZGVyIGluIHdpbnNvY2syLmgNCmRvIDoN CiAgYWNfZm5fY19jaGVja19oZWFkZXJfbW9uZ3JlbCAiJExJTkVOTyIgIndpbnNvY2syLmgiICJh Y19jdl9oZWFkZXJfd2luc29jazJfaCIgIiRhY19pbmNsdWRlc19kZWZhdWx0Ig0KaWYgdGVzdCAi eCRhY19jdl9oZWFkZXJfd2luc29jazJfaCIgPSB4eWVzOyB0aGVuIDoNCiAgY2F0ID4+Y29uZmRl ZnMuaCA8PF9BQ0VPRg0KI2RlZmluZSBIQVZFX1dJTlNPQ0syX0ggMQ0KX0FDRU9GDQoNCmZpDQoN CmRvbmUNCg0KICBmaQ0KICBpZiB0ZXN0ICIkYWNfY3ZfaGVhZGVyX3dpbnNvY2syX2giID0geWVz OyB0aGVuDQogICAgSEFWRV9XSU5TT0NLMl9IPTENCiAgICBVTklTVERfSF9IQVZFX1dJTlNPQ0sy X0g9MQ0KICAgIFNZU19JT0NUTF9IX0hBVkVfV0lOU09DSzJfSD0xDQogIGVsc2UNCiAgICBIQVZF X1dJTlNPQ0syX0g9MA0KICBmaQ0KDQoNCg0KICAgICAgICBHRVRIT1NUTkFNRV9MSUI9DQogIGZv ciBhY19mdW5jIGluIGdldGhvc3RuYW1lDQpkbyA6DQogIGFjX2ZuX2NfY2hlY2tfZnVuYyAiJExJ TkVOTyIgImdldGhvc3RuYW1lIiAiYWNfY3ZfZnVuY19nZXRob3N0bmFtZSINCmlmIHRlc3QgIngk YWNfY3ZfZnVuY19nZXRob3N0bmFtZSIgPSB4eWVzOyB0aGVuIDoNCiAgY2F0ID4+Y29uZmRlZnMu aCA8PF9BQ0VPRg0KI2RlZmluZSBIQVZFX0dFVEhPU1ROQU1FIDENCl9BQ0VPRg0KDQplbHNlDQoN CiAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZv ciBnZXRob3N0bmFtZSBpbiB3aW5zb2NrMi5oIGFuZCAtbHdzMl8zMiIgPiY1DQokYXNfZWNob19u ICJjaGVja2luZyBmb3IgZ2V0aG9zdG5hbWUgaW4gd2luc29jazIuaCBhbmQgLWx3czJfMzIuLi4g IiA+JjY7IH0NCmlmICR7Z2xfY3ZfdzMyX2dldGhvc3RuYW1lKzp9IGZhbHNlOyB0aGVuIDoNCiAg JGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYNCmVsc2UNCiAgZ2xfY3ZfdzMyX2dldGhvc3RuYW1l PW5vDQogICAgICAgZ2xfc2F2ZV9MSUJTPSIkTElCUyINCiAgICAgICBMSUJTPSIkTElCUyAtbHdz Ml8zMiINCiAgICAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0 DQovKiBlbmQgY29uZmRlZnMuaC4gICovDQoNCiNpZmRlZiBIQVZFX1dJTlNPQ0syX0gNCiNpbmNs dWRlIDx3aW5zb2NrMi5oPg0KI2VuZGlmDQojaW5jbHVkZSA8c3RkZGVmLmg+DQoNCmludA0KbWFp biAoKQ0Kew0KZ2V0aG9zdG5hbWUoTlVMTCwgMCk7DQogIDsNCiAgcmV0dXJuIDA7DQp9DQpfQUNF T0YNCmlmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoNCiAgZ2xfY3ZfdzMyX2dl dGhvc3RuYW1lPXllcw0KZmkNCnJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19v YmpleHQgXA0KICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0DQogICAgICAg TElCUz0iJGdsX3NhdmVfTElCUyINCg0KZmkNCnsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVu by0kTElORU5PfTogcmVzdWx0OiAkZ2xfY3ZfdzMyX2dldGhvc3RuYW1lIiA+JjUNCiRhc19lY2hv ICIkZ2xfY3ZfdzMyX2dldGhvc3RuYW1lIiA+JjY7IH0NCiAgICBpZiB0ZXN0ICIkZ2xfY3ZfdzMy X2dldGhvc3RuYW1lIiA9ICJ5ZXMiOyB0aGVuDQogICAgICBHRVRIT1NUTkFNRV9MSUI9Ii1sd3My XzMyIg0KICAgIGZpDQoNCmZpDQpkb25lDQoNCg0KDQogIGlmIHRlc3QgIiRhY19jdl9mdW5jX2dl dGhvc3RuYW1lIiA9IG5vOyB0aGVuDQoNCg0KDQoNCg0KDQoNCg0KICBnbF9MSUJPQkpTPSIkZ2xf TElCT0JKUyBnZXRob3N0bmFtZS4kYWNfb2JqZXh0Ig0KDQogICAgSEFWRV9HRVRIT1NUTkFNRT0w DQoNCiAgaWYgdGVzdCAiJGdsX2N2X3czMl9nZXRob3N0bmFtZSIgIT0gInllcyI7IHRoZW4NCiAg ICBmb3IgYWNfZnVuYyBpbiB1bmFtZQ0KZG8gOg0KICBhY19mbl9jX2NoZWNrX2Z1bmMgIiRMSU5F Tk8iICJ1bmFtZSIgImFjX2N2X2Z1bmNfdW5hbWUiDQppZiB0ZXN0ICJ4JGFjX2N2X2Z1bmNfdW5h bWUiID0geHllczsgdGhlbiA6DQogIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YNCiNkZWZpbmUg SEFWRV9VTkFNRSAxDQpfQUNFT0YNCg0KZmkNCmRvbmUNCg0KICBmaQ0KDQogIGZpDQoNCg0KDQoN CiAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3Ig SE9TVF9OQU1FX01BWCIgPiY1DQokYXNfZWNob19uICJjaGVja2luZyBmb3IgSE9TVF9OQU1FX01B WC4uLiAiID4mNjsgfQ0KaWYgJHtnbF9jdl9kZWNsX0hPU1RfTkFNRV9NQVgrOn0gZmFsc2U7IHRo ZW4gOg0KICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNg0KZWxzZQ0KDQogICAgZ2xfY3ZfZGVj bF9IT1NUX05BTUVfTUFYPQ0KICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0 LiRhY19leHQNCi8qIGVuZCBjb25mZGVmcy5oLiAgKi8NCg0KI2luY2x1ZGUgPGxpbWl0cy5oPg0K I2lmZGVmIEhPU1RfTkFNRV9NQVgNCmx1Y2t5DQojZW5kaWYNCg0KX0FDRU9GDQppZiAoZXZhbCAi JGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0IikgMj4mNSB8DQogICRFR1JFUCAibHVja3kiID4vZGV2 L251bGwgMj4mMTsgdGhlbiA6DQogIGdsX2N2X2RlY2xfSE9TVF9OQU1FX01BWD15ZXMNCmZpDQpy bSAtZiBjb25mdGVzdCoNCg0KICAgIGlmIHRlc3QgLXogIiRnbF9jdl9kZWNsX0hPU1RfTkFNRV9N QVgiOyB0aGVuDQogICAgICAgICAgICBpZiB0ZXN0ICIkZ2xfY3ZfdzMyX2dldGhvc3RuYW1lIiA9 IHllczsgdGhlbg0KICAgICAgICAgICAgICAgIGdsX2N2X2RlY2xfSE9TVF9OQU1FX01BWD0yNTYN CiAgICAgIGVsc2UNCiAgICAgICAgaWYgYWNfZm5fY19jb21wdXRlX2ludCAiJExJTkVOTyIgIk1B WEhPU1ROQU1FTEVOIiAiZ2xfY3ZfZGVjbF9IT1NUX05BTUVfTUFYIiAgICAgICAgIg0KI2luY2x1 ZGUgPHN5cy90eXBlcy5oPg0KI2lmIEhBVkVfU1lTX1BBUkFNX0gNCiMgaW5jbHVkZSA8c3lzL3Bh cmFtLmg+DQojZW5kaWYNCiNpZiBIQVZFX1NZU19TT0NLRVRfSA0KIyBpbmNsdWRlIDxzeXMvc29j a2V0Lmg+DQojZW5kaWYNCiNpZiBIQVZFX05FVERCX0gNCiMgaW5jbHVkZSA8bmV0ZGIuaD4NCiNl bmRpZg0KIjsgdGhlbiA6DQoNCmVsc2UNCiAgICAgICAgICAgICAgICAgICAgICAgIGdsX2N2X2Rl Y2xfSE9TVF9OQU1FX01BWD0yNTYNCg0KZmkNCg0KDQogICAgICBmaQ0KICAgIGZpDQoNCmZpDQp7 ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGdsX2N2X2Rl Y2xfSE9TVF9OQU1FX01BWCIgPiY1DQokYXNfZWNobyAiJGdsX2N2X2RlY2xfSE9TVF9OQU1FX01B WCIgPiY2OyB9DQogIGlmIHRlc3QgIiRnbF9jdl9kZWNsX0hPU1RfTkFNRV9NQVgiICE9IHllczsg dGhlbg0KDQpjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GDQojZGVmaW5lIEhPU1RfTkFNRV9NQVgg JGdsX2N2X2RlY2xfSE9TVF9OQU1FX01BWA0KX0FDRU9GDQoNCiAgZmkNCg0KDQoNCg0KICBHTlVM SUJfR0VUSE9TVE5BTUU9MQ0KDQoNCg0KJGFzX2VjaG8gIiNkZWZpbmUgR05VTElCX1RFU1RfR0VU SE9TVE5BTUUgMSIgPj5jb25mZGVmcy5oDQoNCg0KDQogICMgQ29kZSBmcm9tIG1vZHVsZSBnZXRo cnh0aW1lOg0KDQoNCg0KDQogIGFjX2ZuX2NfY2hlY2tfZGVjbCAiJExJTkVOTyIgImdldGhydGlt ZSIgImFjX2N2X2hhdmVfZGVjbF9nZXRocnRpbWUiICIjaW5jbHVkZSA8dGltZS5oPg0KIg0KaWYg dGVzdCAieCRhY19jdl9oYXZlX2RlY2xfZ2V0aHJ0aW1lIiA9IHh5ZXM7IHRoZW4gOg0KICBhY19o YXZlX2RlY2w9MQ0KZWxzZQ0KICBhY19oYXZlX2RlY2w9MA0KZmkNCg0KY2F0ID4+Y29uZmRlZnMu aCA8PF9BQ0VPRg0KI2RlZmluZSBIQVZFX0RFQ0xfR0VUSFJUSU1FICRhY19oYXZlX2RlY2wNCl9B Q0VPRg0KDQogIExJQl9HRVRIUlhUSU1FPQ0KICBjYXNlICRhY19jdl9oYXZlX2RlY2xfZ2V0aHJ0 aW1lLCRnbF9jdl9hcml0aG1ldGljX2hydGltZV90IGluDQogIHllcyx5ZXMpIDs7DQogICopDQoN Cg0KDQoNCg0KDQoNCg0KICBnbF9MSUJPQkpTPSIkZ2xfTElCT0JKUyBnZXRocnh0aW1lLiRhY19v YmpleHQiDQoNCg0KDQoNCg0KDQogIGlmIHRlc3QgJGFjX2N2X2Z1bmNfbmFub3VwdGltZSAhPSB5 ZXM7IHRoZW4NCiAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNo ZWNraW5nIHdoZXRoZXIgQ0xPQ0tfTU9OT1RPTklDIG9yIENMT0NLX1JFQUxUSU1FIGlzIGRlZmlu ZWQiID4mNQ0KJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciBDTE9DS19NT05PVE9OSUMgb3Ig Q0xPQ0tfUkVBTFRJTUUgaXMgZGVmaW5lZC4uLiAiID4mNjsgfQ0KaWYgJHtnbF9jdl9oYXZlX2Ns b2NrX2dldHRpbWVfbWFjcm8rOn0gZmFsc2U7IHRoZW4gOg0KICAkYXNfZWNob19uICIoY2FjaGVk KSAiID4mNg0KZWxzZQ0KICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNf ZXh0DQovKiBlbmQgY29uZmRlZnMuaC4gICovDQoNCiMgICAgICAgIGluY2x1ZGUgPHRpbWUuaD4N CiMgICAgICAgIGlmIGRlZmluZWQgQ0xPQ0tfTU9OT1RPTklDIHx8IGRlZmluZWQgQ0xPQ0tfUkVB TFRJTUUNCiAgICAgICAgICBoYXZlX2Nsb2NrX2dldHRpbWVfbWFjcm8NCiMgICAgICAgIGVuZGlm DQoNCl9BQ0VPRg0KaWYgKGV2YWwgIiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCIpIDI+JjUgfA0K ICAkRUdSRVAgImhhdmVfY2xvY2tfZ2V0dGltZV9tYWNybyIgPi9kZXYvbnVsbCAyPiYxOyB0aGVu IDoNCiAgZ2xfY3ZfaGF2ZV9jbG9ja19nZXR0aW1lX21hY3JvPXllcw0KZWxzZQ0KICBnbF9jdl9o YXZlX2Nsb2NrX2dldHRpbWVfbWFjcm89bm8NCmZpDQpybSAtZiBjb25mdGVzdCoNCg0KZmkNCnsg JGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkZ2xfY3ZfaGF2 ZV9jbG9ja19nZXR0aW1lX21hY3JvIiA+JjUNCiRhc19lY2hvICIkZ2xfY3ZfaGF2ZV9jbG9ja19n ZXR0aW1lX21hY3JvIiA+JjY7IH0NCiAgICBpZiB0ZXN0ICRnbF9jdl9oYXZlX2Nsb2NrX2dldHRp bWVfbWFjcm8gPSB5ZXM7IHRoZW4NCiAgICAgIExJQl9HRVRIUlhUSU1FPSRMSUJfQ0xPQ0tfR0VU VElNRQ0KICAgIGZpDQogIGZpDQo7Ow0KICBlc2FjDQoNCg0KICAjIENvZGUgZnJvbSBtb2R1bGUg Z2V0bGluZToNCg0KDQoNCg0KDQoNCg0KICBnbF9nZXRsaW5lX25lZWRzX3J1bl90aW1lX2NoZWNr PW5vDQogIGFjX2ZuX2NfY2hlY2tfZnVuYyAiJExJTkVOTyIgImdldGxpbmUiICJhY19jdl9mdW5j X2dldGxpbmUiDQppZiB0ZXN0ICJ4JGFjX2N2X2Z1bmNfZ2V0bGluZSIgPSB4eWVzOyB0aGVuIDoN CiAgICAgICAgICAgICAgICAgICBnbF9nZXRsaW5lX25lZWRzX3J1bl90aW1lX2NoZWNrPXllcw0K ZWxzZQ0KICBhbV9jdl9mdW5jX3dvcmtpbmdfZ2V0bGluZT1ubw0KZmkNCg0KICBpZiB0ZXN0ICRn bF9nZXRsaW5lX25lZWRzX3J1bl90aW1lX2NoZWNrID0geWVzOyB0aGVuDQogICAgeyAkYXNfZWNo byAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3Igd29ya2luZyBnZXRs aW5lIGZ1bmN0aW9uIiA+JjUNCiRhc19lY2hvX24gImNoZWNraW5nIGZvciB3b3JraW5nIGdldGxp bmUgZnVuY3Rpb24uLi4gIiA+JjY7IH0NCmlmICR7YW1fY3ZfZnVuY193b3JraW5nX2dldGxpbmUr On0gZmFsc2U7IHRoZW4gOg0KICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNg0KZWxzZQ0KICBl Y2hvIGZvb05iYXJOIHwgdHIgLWQgJ1wwMTInIHwgdHIgTiAnXDAxMicgPiBjb25mdGVzdC5kYXRh DQogICAgaWYgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgPSB5ZXM7IHRoZW4gOg0KICAgICAgICBj YXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0DQovKiBlbmQgY29uZmRl ZnMuaC4gICovDQoNCiNpbmNsdWRlIDxmZWF0dXJlcy5oPg0KI2lmZGVmIF9fR05VX0xJQlJBUllf Xw0KICNpZiAoX19HTElCQ19fID49IDIpICYmICFkZWZpbmVkIF9fVUNMSUJDX18NCiAgTHVja3kg R05VIHVzZXINCiAjZW5kaWYNCiNlbmRpZg0KDQpfQUNFT0YNCmlmIChldmFsICIkYWNfY3BwIGNv bmZ0ZXN0LiRhY19leHQiKSAyPiY1IHwNCiAgJEVHUkVQICJMdWNreSBHTlUgdXNlciIgPi9kZXYv bnVsbCAyPiYxOyB0aGVuIDoNCiAgYW1fY3ZfZnVuY193b3JraW5nX2dldGxpbmU9eWVzDQplbHNl DQogIGFtX2N2X2Z1bmNfd29ya2luZ19nZXRsaW5lPW5vDQpmaQ0Kcm0gLWYgY29uZnRlc3QqDQoN Cg0KZWxzZQ0KICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0DQov KiBlbmQgY29uZmRlZnMuaC4gICovDQoNCiMgICAgaW5jbHVkZSA8c3RkaW8uaD4NCiMgICAgaW5j bHVkZSA8c3RkbGliLmg+DQojICAgIGluY2x1ZGUgPHN0cmluZy5oPg0KICAgIGludCBtYWluICgp DQogICAgew0KICAgICAgRklMRSAqaW4gPSBmb3BlbiAoIi4vY29uZnRlc3QuZGF0YSIsICJyIik7 DQogICAgICBpZiAoIWluKQ0KICAgICAgICByZXR1cm4gMTsNCiAgICAgIHsNCiAgICAgICAgLyog VGVzdCByZXN1bHQgZm9yIGEgTlVMTCBidWZmZXIgYW5kIGEgemVybyBzaXplLg0KICAgICAgICAg ICBCYXNlZCBvbiBhIHRlc3QgcHJvZ3JhbSBmcm9tIEthcmwgSGV1ZXIuICAqLw0KICAgICAgICBj aGFyICpsaW5lID0gTlVMTDsNCiAgICAgICAgc2l6ZV90IHNpeiA9IDA7DQogICAgICAgIGludCBs ZW4gPSBnZXRsaW5lICgmbGluZSwgJnNpeiwgaW4pOw0KICAgICAgICBpZiAoIShsZW4gPT0gNCAm JiBsaW5lICYmIHN0cmNtcCAobGluZSwgImZvb1xuIikgPT0gMCkpDQogICAgICAgICAgcmV0dXJu IDI7DQogICAgICB9DQogICAgICB7DQogICAgICAgIC8qIFRlc3QgcmVzdWx0IGZvciBhIE5VTEwg YnVmZmVyIGFuZCBhIG5vbi16ZXJvIHNpemUuDQogICAgICAgICAgIFRoaXMgY3Jhc2hlcyBvbiBG cmVlQlNEIDguMC4gICovDQogICAgICAgIGNoYXIgKmxpbmUgPSBOVUxMOw0KICAgICAgICBzaXpl X3Qgc2l6ID0gKHNpemVfdCkofjApIC8gNDsNCiAgICAgICAgaWYgKGdldGxpbmUgKCZsaW5lLCAm c2l6LCBpbikgPT0gLTEpDQogICAgICAgICAgcmV0dXJuIDM7DQogICAgICB9DQogICAgICByZXR1 cm4gMDsNCiAgICB9DQoNCl9BQ0VPRg0KaWYgYWNfZm5fY190cnlfcnVuICIkTElORU5PIjsgdGhl biA6DQogIGFtX2N2X2Z1bmNfd29ya2luZ19nZXRsaW5lPXllcw0KZWxzZQ0KICBhbV9jdl9mdW5j X3dvcmtpbmdfZ2V0bGluZT1ubw0KZmkNCnJtIC1mIGNvcmUgKi5jb3JlIGNvcmUuY29uZnRlc3Qu KiBnbW9uLm91dCBiYi5vdXQgY29uZnRlc3QkYWNfZXhlZXh0IFwNCiAgY29uZnRlc3QuJGFjX29i amV4dCBjb25mdGVzdC5iZWFtIGNvbmZ0ZXN0LiRhY19leHQNCmZpDQoNCmZpDQp7ICRhc19lY2hv ICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFtX2N2X2Z1bmNfd29ya2lu Z19nZXRsaW5lIiA+JjUNCiRhc19lY2hvICIkYW1fY3ZfZnVuY193b3JraW5nX2dldGxpbmUiID4m NjsgfQ0KICBmaQ0KDQogIGlmIHRlc3QgJGFjX2N2X2hhdmVfZGVjbF9nZXRsaW5lID0gbm87IHRo ZW4NCiAgICBIQVZFX0RFQ0xfR0VUTElORT0wDQogIGZpDQoNCiAgaWYgdGVzdCAkYW1fY3ZfZnVu Y193b3JraW5nX2dldGxpbmUgPSBubzsgdGhlbg0KICAgICAgICAgICAgICAgIFJFUExBQ0VfR0VU TElORT0xDQoNCg0KDQoNCg0KDQoNCg0KICBnbF9MSUJPQkpTPSIkZ2xfTElCT0JKUyBnZXRsaW5l LiRhY19vYmpleHQiDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KICBpZiB0ZXN0ICRhY19jdl9mdW5j X2dldGRlbGltID0geWVzOyB0aGVuDQogICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xp bmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIHdvcmtpbmcgZ2V0ZGVsaW0gZnVuY3Rpb24iID4m NQ0KJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIHdvcmtpbmcgZ2V0ZGVsaW0gZnVuY3Rpb24uLi4g IiA+JjY7IH0NCmlmICR7Z2xfY3ZfZnVuY193b3JraW5nX2dldGRlbGltKzp9IGZhbHNlOyB0aGVu IDoNCiAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYNCmVsc2UNCiAgZWNobyBmb29OYmFyTiB8 IHRyIC1kICdcMDEyJyB8IHRyIE4gJ1wwMTInID4gY29uZnRlc3QuZGF0YQ0KICAgIGlmIHRlc3Qg IiRjcm9zc19jb21waWxpbmciID0geWVzOyB0aGVuIDoNCiAgICAgICAgY2F0IGNvbmZkZWZzLmgg LSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dA0KLyogZW5kIGNvbmZkZWZzLmguICAqLw0KDQoj aW5jbHVkZSA8ZmVhdHVyZXMuaD4NCiNpZmRlZiBfX0dOVV9MSUJSQVJZX18NCiAjaWYgKF9fR0xJ QkNfXyA+PSAyKSAmJiAhZGVmaW5lZCBfX1VDTElCQ19fDQogIEx1Y2t5IEdOVSB1c2VyDQogI2Vu ZGlmDQojZW5kaWYNCg0KX0FDRU9GDQppZiAoZXZhbCAiJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0 IikgMj4mNSB8DQogICRFR1JFUCAiTHVja3kgR05VIHVzZXIiID4vZGV2L251bGwgMj4mMTsgdGhl biA6DQogIGdsX2N2X2Z1bmNfd29ya2luZ19nZXRkZWxpbT15ZXMNCmVsc2UNCiAgZ2xfY3ZfZnVu Y193b3JraW5nX2dldGRlbGltPW5vDQpmaQ0Kcm0gLWYgY29uZnRlc3QqDQoNCg0KZWxzZQ0KICBj YXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0DQovKiBlbmQgY29uZmRl ZnMuaC4gICovDQoNCiMgICAgaW5jbHVkZSA8c3RkaW8uaD4NCiMgICAgaW5jbHVkZSA8c3RkbGli Lmg+DQojICAgIGluY2x1ZGUgPHN0cmluZy5oPg0KICAgIGludCBtYWluICgpDQogICAgew0KICAg ICAgRklMRSAqaW4gPSBmb3BlbiAoIi4vY29uZnRlc3QuZGF0YSIsICJyIik7DQogICAgICBpZiAo IWluKQ0KICAgICAgICByZXR1cm4gMTsNCiAgICAgIHsNCiAgICAgICAgLyogVGVzdCByZXN1bHQg Zm9yIGEgTlVMTCBidWZmZXIgYW5kIGEgemVybyBzaXplLg0KICAgICAgICAgICBCYXNlZCBvbiBh IHRlc3QgcHJvZ3JhbSBmcm9tIEthcmwgSGV1ZXIuICAqLw0KICAgICAgICBjaGFyICpsaW5lID0g TlVMTDsNCiAgICAgICAgc2l6ZV90IHNpeiA9IDA7DQogICAgICAgIGludCBsZW4gPSBnZXRkZWxp bSAoJmxpbmUsICZzaXosICdcbicsIGluKTsNCiAgICAgICAgaWYgKCEobGVuID09IDQgJiYgbGlu ZSAmJiBzdHJjbXAgKGxpbmUsICJmb29cbiIpID09IDApKQ0KICAgICAgICAgIHJldHVybiAyOw0K ICAgICAgfQ0KICAgICAgew0KICAgICAgICAvKiBUZXN0IHJlc3VsdCBmb3IgYSBOVUxMIGJ1ZmZl ciBhbmQgYSBub24temVybyBzaXplLg0KICAgICAgICAgICBUaGlzIGNyYXNoZXMgb24gRnJlZUJT RCA4LjAuICAqLw0KICAgICAgICBjaGFyICpsaW5lID0gTlVMTDsNCiAgICAgICAgc2l6ZV90IHNp eiA9IChzaXplX3QpKH4wKSAvIDQ7DQogICAgICAgIGlmIChnZXRkZWxpbSAoJmxpbmUsICZzaXos ICdcbicsIGluKSA9PSAtMSkNCiAgICAgICAgICByZXR1cm4gMzsNCiAgICAgIH0NCiAgICAgIHJl dHVybiAwOw0KICAgIH0NCg0KX0FDRU9GDQppZiBhY19mbl9jX3RyeV9ydW4gIiRMSU5FTk8iOyB0 aGVuIDoNCiAgZ2xfY3ZfZnVuY193b3JraW5nX2dldGRlbGltPXllcw0KZWxzZQ0KICBnbF9jdl9m dW5jX3dvcmtpbmdfZ2V0ZGVsaW09bm8NCmZpDQpybSAtZiBjb3JlICouY29yZSBjb3JlLmNvbmZ0 ZXN0LiogZ21vbi5vdXQgYmIub3V0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCBcDQogIGNvbmZ0ZXN0LiRh Y19vYmpleHQgY29uZnRlc3QuYmVhbSBjb25mdGVzdC4kYWNfZXh0DQpmaQ0KDQpmaQ0KeyAkYXNf ZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRnbF9jdl9mdW5jX3dv cmtpbmdfZ2V0ZGVsaW0iID4mNQ0KJGFzX2VjaG8gIiRnbF9jdl9mdW5jX3dvcmtpbmdfZ2V0ZGVs aW0iID4mNjsgfQ0KICBlbHNlDQogICAgZ2xfY3ZfZnVuY193b3JraW5nX2dldGRlbGltPW5vDQog IGZpDQoNCiAgaWYgdGVzdCAkYWNfY3ZfaGF2ZV9kZWNsX2dldGRlbGltID0gbm87IHRoZW4NCiAg ICBIQVZFX0RFQ0xfR0VUREVMSU09MA0KICBmaQ0KDQogIGlmIHRlc3QgJGdsX2N2X2Z1bmNfd29y a2luZ19nZXRkZWxpbSA9IG5vOyB0aGVuDQogICAgaWYgdGVzdCAkYWNfY3ZfZnVuY19nZXRkZWxp bSA9IHllczsgdGhlbg0KICAgICAgUkVQTEFDRV9HRVRERUxJTT0xDQogICAgZmkNCg0KDQoNCg0K DQoNCg0KDQogIGdsX0xJQk9CSlM9IiRnbF9MSUJPQkpTIGdldGRlbGltLiRhY19vYmpleHQiDQoN Cg0KICBmb3IgYWNfZnVuYyBpbiBmbG9ja2ZpbGUgZnVubG9ja2ZpbGUNCmRvIDoNCiAgYXNfYWNf dmFyPWAkYXNfZWNobyAiYWNfY3ZfZnVuY18kYWNfZnVuYyIgfCAkYXNfdHJfc2hgDQphY19mbl9j X2NoZWNrX2Z1bmMgIiRMSU5FTk8iICIkYWNfZnVuYyIgIiRhc19hY192YXIiDQppZiBldmFsIHRl c3QgXCJ4XCQiJGFzX2FjX3ZhciJcIiA9IHgieWVzIjsgdGhlbiA6DQogIGNhdCA+PmNvbmZkZWZz LmggPDxfQUNFT0YNCiNkZWZpbmUgYCRhc19lY2hvICJIQVZFXyRhY19mdW5jIiB8ICRhc190cl9j cHBgIDENCl9BQ0VPRg0KDQpmaQ0KZG9uZQ0KDQogIGFjX2ZuX2NfY2hlY2tfZGVjbCAiJExJTkVO TyIgImdldGNfdW5sb2NrZWQiICJhY19jdl9oYXZlX2RlY2xfZ2V0Y191bmxvY2tlZCIgIiRhY19p bmNsdWRlc19kZWZhdWx0Ig0KaWYgdGVzdCAieCRhY19jdl9oYXZlX2RlY2xfZ2V0Y191bmxvY2tl ZCIgPSB4eWVzOyB0aGVuIDoNCiAgYWNfaGF2ZV9kZWNsPTENCmVsc2UNCiAgYWNfaGF2ZV9kZWNs PTANCmZpDQoNCmNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YNCiNkZWZpbmUgSEFWRV9ERUNMX0dF VENfVU5MT0NLRUQgJGFjX2hhdmVfZGVjbA0KX0FDRU9GDQoNCg0KICBmaQ0KDQoNCiAgZmkNCg0K DQoNCg0KICBHTlVMSUJfR0VUTElORT0xDQoNCg0KDQokYXNfZWNobyAiI2RlZmluZSBHTlVMSUJf VEVTVF9HRVRMSU5FIDEiID4+Y29uZmRlZnMuaA0KDQoNCg0KICAjIENvZGUgZnJvbSBtb2R1bGUg Z2V0bG9hZGF2ZzoNCg0KDQojIFBlcnN1YWRlIGdsaWJjIDxzdGRsaWIuaD4gdG8gZGVjbGFyZSBn ZXRsb2FkYXZnKCkuDQoNCg0KIyBNYWtlIHN1cmUgZ2V0bG9hZGF2Zy5jIGlzIHdoZXJlIGl0IGJl bG9uZ3MsIGF0IGNvbmZpZ3VyZS10aW1lLg0KdGVzdCAtZiAiJHNyY2Rpci9saWIvZ2V0bG9hZGF2 Zy5jIiB8fA0KICBhc19mbl9lcnJvciAkPyAiJHNyY2Rpci9saWIvZ2V0bG9hZGF2Zy5jIGlzIG1p c3NpbmciICIkTElORU5PIiA1DQoNCmdsX3NhdmVfTElCUz0kTElCUw0KDQojIGdldGxvYWR2ZyBp cyBwcmVzZW50IGluIGxpYmMgb24gZ2xpYmMgPj0gMi4yLCBNYWNPUyBYLCBGcmVlQlNEID49IDIu MCwNCiMgTmV0QlNEID49IDAuOSwgT3BlbkJTRCA+PSAyLjAsIFNvbGFyaXMgPj0gNy4NCmFjX2Zu X2NfY2hlY2tfZnVuYyAiJExJTkVOTyIgImdldGxvYWRhdmciICJhY19jdl9mdW5jX2dldGxvYWRh dmciDQppZiB0ZXN0ICJ4JGFjX2N2X2Z1bmNfZ2V0bG9hZGF2ZyIgPSB4eWVzOyB0aGVuIDoNCg0K ZWxzZQ0KICBnbF9oYXZlX2Z1bmM9bm8NCg0KICAgIyBTb21lIHN5c3RlbXMgd2l0aCAtbHV0aWwg aGF2ZSAoYW5kIG5lZWQpIC1sa3ZtIGFzIHdlbGwsIHNvbWUgZG8gbm90Lg0KICAgIyBPbiBTb2xh cmlzLCAtbGt2bSByZXF1aXJlcyBubGlzdCBmcm9tIC1sZWxmLCBzbyBjaGVjayB0aGF0IGZpcnN0 DQogICAjIHRvIGdldCB0aGUgcmlnaHQgYW5zd2VyIGludG8gdGhlIGNhY2hlLg0KICAgIyBGb3Ig a3N0YXQgb24gc29sYXJpcywgd2UgbmVlZCB0byB0ZXN0IGZvciBsaWJlbGYgYW5kIGxpYmt2bSB0 byBmb3JjZSB0aGUNCiAgICMgZGVmaW5pdGlvbiBvZiBTVlI0IGJlbG93Lg0KICAgaWYgdGVzdCAk Z2xfaGF2ZV9mdW5jID0gbm87IHRoZW4NCiAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGlu ZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgZWxmX2JlZ2luIGluIC1sZWxmIiA+JjUNCiRhc19l Y2hvX24gImNoZWNraW5nIGZvciBlbGZfYmVnaW4gaW4gLWxlbGYuLi4gIiA+JjY7IH0NCmlmICR7 YWNfY3ZfbGliX2VsZl9lbGZfYmVnaW4rOn0gZmFsc2U7IHRoZW4gOg0KICAkYXNfZWNob19uICIo Y2FjaGVkKSAiID4mNg0KZWxzZQ0KICBhY19jaGVja19saWJfc2F2ZV9MSUJTPSRMSUJTDQpMSUJT PSItbGVsZiAgJExJQlMiDQpjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNf ZXh0DQovKiBlbmQgY29uZmRlZnMuaC4gICovDQoNCi8qIE92ZXJyaWRlIGFueSBHQ0MgaW50ZXJu YWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLg0KICAgVXNlIGNoYXIgYmVjYXVzZSBpbnQg bWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgR0NDDQogICBidWlsdGluIGFuZCB0aGVu IGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLw0KI2lmZGVmIF9f Y3BsdXNwbHVzDQpleHRlcm4gIkMiDQojZW5kaWYNCmNoYXIgZWxmX2JlZ2luICgpOw0KaW50DQpt YWluICgpDQp7DQpyZXR1cm4gZWxmX2JlZ2luICgpOw0KICA7DQogIHJldHVybiAwOw0KfQ0KX0FD RU9GDQppZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6DQogIGFjX2N2X2xpYl9l bGZfZWxmX2JlZ2luPXllcw0KZWxzZQ0KICBhY19jdl9saWJfZWxmX2VsZl9iZWdpbj1ubw0KZmkN CnJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXA0KICAgIGNvbmZ0 ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0DQpMSUJTPSRhY19jaGVja19saWJfc2F2ZV9M SUJTDQpmaQ0KeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6 ICRhY19jdl9saWJfZWxmX2VsZl9iZWdpbiIgPiY1DQokYXNfZWNobyAiJGFjX2N2X2xpYl9lbGZf ZWxmX2JlZ2luIiA+JjY7IH0NCmlmIHRlc3QgIngkYWNfY3ZfbGliX2VsZl9lbGZfYmVnaW4iID0g eHllczsgdGhlbiA6DQogIExJQlM9Ii1sZWxmICRMSUJTIg0KZmkNCg0KICAgICB7ICRhc19lY2hv ICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBrdm1fb3BlbiBpbiAt bGt2bSIgPiY1DQokYXNfZWNob19uICJjaGVja2luZyBmb3Iga3ZtX29wZW4gaW4gLWxrdm0uLi4g IiA+JjY7IH0NCmlmICR7YWNfY3ZfbGliX2t2bV9rdm1fb3Blbis6fSBmYWxzZTsgdGhlbiA6DQog ICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2DQplbHNlDQogIGFjX2NoZWNrX2xpYl9zYXZlX0xJ QlM9JExJQlMNCkxJQlM9Ii1sa3ZtICAkTElCUyINCmNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0Yg PmNvbmZ0ZXN0LiRhY19leHQNCi8qIGVuZCBjb25mZGVmcy5oLiAgKi8NCg0KLyogT3ZlcnJpZGUg YW55IEdDQyBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuDQogICBVc2UgY2hh ciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBHQ0MNCiAgIGJ1 aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4g ICovDQojaWZkZWYgX19jcGx1c3BsdXMNCmV4dGVybiAiQyINCiNlbmRpZg0KY2hhciBrdm1fb3Bl biAoKTsNCmludA0KbWFpbiAoKQ0Kew0KcmV0dXJuIGt2bV9vcGVuICgpOw0KICA7DQogIHJldHVy biAwOw0KfQ0KX0FDRU9GDQppZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6DQog IGFjX2N2X2xpYl9rdm1fa3ZtX29wZW49eWVzDQplbHNlDQogIGFjX2N2X2xpYl9rdm1fa3ZtX29w ZW49bm8NCmZpDQpybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwN CiAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dA0KTElCUz0kYWNfY2hlY2tf bGliX3NhdmVfTElCUw0KZmkNCnsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5P fTogcmVzdWx0OiAkYWNfY3ZfbGliX2t2bV9rdm1fb3BlbiIgPiY1DQokYXNfZWNobyAiJGFjX2N2 X2xpYl9rdm1fa3ZtX29wZW4iID4mNjsgfQ0KaWYgdGVzdCAieCRhY19jdl9saWJfa3ZtX2t2bV9v cGVuIiA9IHh5ZXM7IHRoZW4gOg0KICBMSUJTPSItbGt2bSAkTElCUyINCmZpDQoNCiAgICAgIyBD aGVjayBmb3IgdGhlIDQuNEJTRCBkZWZpbml0aW9uIG9mIGdldGxvYWRhdmcuDQogICAgIHsgJGFz X2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIGdldGxvYWRh dmcgaW4gLWx1dGlsIiA+JjUNCiRhc19lY2hvX24gImNoZWNraW5nIGZvciBnZXRsb2FkYXZnIGlu IC1sdXRpbC4uLiAiID4mNjsgfQ0KaWYgJHthY19jdl9saWJfdXRpbF9nZXRsb2FkYXZnKzp9IGZh bHNlOyB0aGVuIDoNCiAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYNCmVsc2UNCiAgYWNfY2hl Y2tfbGliX3NhdmVfTElCUz0kTElCUw0KTElCUz0iLWx1dGlsICAkTElCUyINCmNhdCBjb25mZGVm cy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQNCi8qIGVuZCBjb25mZGVmcy5oLiAgKi8N Cg0KLyogT3ZlcnJpZGUgYW55IEdDQyBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJy b3IuDQogICBVc2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUg b2YgYSBHQ0MNCiAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3Vs ZCBzdGlsbCBhcHBseS4gICovDQojaWZkZWYgX19jcGx1c3BsdXMNCmV4dGVybiAiQyINCiNlbmRp Zg0KY2hhciBnZXRsb2FkYXZnICgpOw0KaW50DQptYWluICgpDQp7DQpyZXR1cm4gZ2V0bG9hZGF2 ZyAoKTsNCiAgOw0KICByZXR1cm4gMDsNCn0NCl9BQ0VPRg0KaWYgYWNfZm5fY190cnlfbGluayAi JExJTkVOTyI7IHRoZW4gOg0KICBhY19jdl9saWJfdXRpbF9nZXRsb2FkYXZnPXllcw0KZWxzZQ0K ICBhY19jdl9saWJfdXRpbF9nZXRsb2FkYXZnPW5vDQpmaQ0Kcm0gLWYgY29yZSBjb25mdGVzdC5l cnIgY29uZnRlc3QuJGFjX29iamV4dCBcDQogICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0 LiRhY19leHQNCkxJQlM9JGFjX2NoZWNrX2xpYl9zYXZlX0xJQlMNCmZpDQp7ICRhc19lY2hvICIk YXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X2xpYl91dGlsX2dldGxv YWRhdmciID4mNQ0KJGFzX2VjaG8gIiRhY19jdl9saWJfdXRpbF9nZXRsb2FkYXZnIiA+JjY7IH0N CmlmIHRlc3QgIngkYWNfY3ZfbGliX3V0aWxfZ2V0bG9hZGF2ZyIgPSB4eWVzOyB0aGVuIDoNCiAg TElCUz0iLWx1dGlsICRMSUJTIiBnbF9oYXZlX2Z1bmM9eWVzDQpmaQ0KDQogICBmaQ0KDQogICBp ZiB0ZXN0ICRnbF9oYXZlX2Z1bmMgPSBubzsgdGhlbg0KICAgICAjIFRoZXJlIGlzIGEgY29tbW9u bHkgYXZhaWxhYmxlIGxpYnJhcnkgZm9yIFJTLzYwMDAgQUlYLg0KICAgICAjIFNpbmNlIGl0IGlz IG5vdCBhIHN0YW5kYXJkIHBhcnQgb2YgQUlYLCBpdCBtaWdodCBiZSBpbnN0YWxsZWQgbG9jYWxs eS4NCiAgICAgZ2xfZ2V0bG9hZGF2Z19MSUJTPSRMSUJTDQogICAgIExJQlM9Ii1ML3Vzci9sb2Nh bC9saWIgJExJQlMiDQogICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5P fTogY2hlY2tpbmcgZm9yIGdldGxvYWRhdmcgaW4gLWxnZXRsb2FkYXZnIiA+JjUNCiRhc19lY2hv X24gImNoZWNraW5nIGZvciBnZXRsb2FkYXZnIGluIC1sZ2V0bG9hZGF2Zy4uLiAiID4mNjsgfQ0K aWYgJHthY19jdl9saWJfZ2V0bG9hZGF2Z19nZXRsb2FkYXZnKzp9IGZhbHNlOyB0aGVuIDoNCiAg JGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYNCmVsc2UNCiAgYWNfY2hlY2tfbGliX3NhdmVfTElC Uz0kTElCUw0KTElCUz0iLWxnZXRsb2FkYXZnICAkTElCUyINCmNhdCBjb25mZGVmcy5oIC0gPDxf QUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQNCi8qIGVuZCBjb25mZGVmcy5oLiAgKi8NCg0KLyogT3Zl cnJpZGUgYW55IEdDQyBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuDQogICBV c2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBHQ0MN CiAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBh cHBseS4gICovDQojaWZkZWYgX19jcGx1c3BsdXMNCmV4dGVybiAiQyINCiNlbmRpZg0KY2hhciBn ZXRsb2FkYXZnICgpOw0KaW50DQptYWluICgpDQp7DQpyZXR1cm4gZ2V0bG9hZGF2ZyAoKTsNCiAg Ow0KICByZXR1cm4gMDsNCn0NCl9BQ0VPRg0KaWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7 IHRoZW4gOg0KICBhY19jdl9saWJfZ2V0bG9hZGF2Z19nZXRsb2FkYXZnPXllcw0KZWxzZQ0KICBh Y19jdl9saWJfZ2V0bG9hZGF2Z19nZXRsb2FkYXZnPW5vDQpmaQ0Kcm0gLWYgY29yZSBjb25mdGVz dC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcDQogICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0 ZXN0LiRhY19leHQNCkxJQlM9JGFjX2NoZWNrX2xpYl9zYXZlX0xJQlMNCmZpDQp7ICRhc19lY2hv ICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X2xpYl9nZXRsb2Fk YXZnX2dldGxvYWRhdmciID4mNQ0KJGFzX2VjaG8gIiRhY19jdl9saWJfZ2V0bG9hZGF2Z19nZXRs b2FkYXZnIiA+JjY7IH0NCmlmIHRlc3QgIngkYWNfY3ZfbGliX2dldGxvYWRhdmdfZ2V0bG9hZGF2 ZyIgPSB4eWVzOyB0aGVuIDoNCiAgTElCUz0iLWxnZXRsb2FkYXZnICRMSUJTIiBnbF9oYXZlX2Z1 bmM9eWVzDQplbHNlDQogIExJQlM9JGdsX2dldGxvYWRhdmdfTElCUw0KZmkNCg0KICAgZmkNCg0K ICAgIyBTZXQgdXAgdGhlIHJlcGxhY2VtZW50IGZ1bmN0aW9uIGlmIG5lY2Vzc2FyeS4NCiAgIGlm IHRlc3QgJGdsX2hhdmVfZnVuYyA9IG5vOyB0aGVuDQoNCg0KDQoNCg0KDQoNCg0KICBnbF9MSUJP QkpTPSIkZ2xfTElCT0JKUyBnZXRsb2FkYXZnLiRhY19vYmpleHQiDQoNCg0KIyBGaWd1cmUgb3V0 IHdoYXQgb3VyIGdldGxvYWRhdmcuYyBuZWVkcy4NCg0KIyBTb2xhcmlzIGhhcyBsaWJrc3RhdCB3 aGljaCBkb2VzIG5vdCByZXF1aXJlIHJvb3QuDQp7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5l bm8tJExJTkVOT306IGNoZWNraW5nIGZvciBrc3RhdF9vcGVuIGluIC1sa3N0YXQiID4mNQ0KJGFz X2VjaG9fbiAiY2hlY2tpbmcgZm9yIGtzdGF0X29wZW4gaW4gLWxrc3RhdC4uLiAiID4mNjsgfQ0K aWYgJHthY19jdl9saWJfa3N0YXRfa3N0YXRfb3Blbis6fSBmYWxzZTsgdGhlbiA6DQogICRhc19l Y2hvX24gIihjYWNoZWQpICIgPiY2DQplbHNlDQogIGFjX2NoZWNrX2xpYl9zYXZlX0xJQlM9JExJ QlMNCkxJQlM9Ii1sa3N0YXQgICRMSUJTIg0KY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29u ZnRlc3QuJGFjX2V4dA0KLyogZW5kIGNvbmZkZWZzLmguICAqLw0KDQovKiBPdmVycmlkZSBhbnkg R0NDIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4NCiAgIFVzZSBjaGFyIGJl Y2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIEdDQw0KICAgYnVpbHRp biBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8N CiNpZmRlZiBfX2NwbHVzcGx1cw0KZXh0ZXJuICJDIg0KI2VuZGlmDQpjaGFyIGtzdGF0X29wZW4g KCk7DQppbnQNCm1haW4gKCkNCnsNCnJldHVybiBrc3RhdF9vcGVuICgpOw0KICA7DQogIHJldHVy biAwOw0KfQ0KX0FDRU9GDQppZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6DQog IGFjX2N2X2xpYl9rc3RhdF9rc3RhdF9vcGVuPXllcw0KZWxzZQ0KICBhY19jdl9saWJfa3N0YXRf a3N0YXRfb3Blbj1ubw0KZmkNCnJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19v YmpleHQgXA0KICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0DQpMSUJTPSRh Y19jaGVja19saWJfc2F2ZV9MSUJTDQpmaQ0KeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5v LSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9saWJfa3N0YXRfa3N0YXRfb3BlbiIgPiY1DQokYXNf ZWNobyAiJGFjX2N2X2xpYl9rc3RhdF9rc3RhdF9vcGVuIiA+JjY7IH0NCmlmIHRlc3QgIngkYWNf Y3ZfbGliX2tzdGF0X2tzdGF0X29wZW4iID0geHllczsgdGhlbiA6DQogIGNhdCA+PmNvbmZkZWZz LmggPDxfQUNFT0YNCiNkZWZpbmUgSEFWRV9MSUJLU1RBVCAxDQpfQUNFT0YNCg0KICBMSUJTPSIt bGtzdGF0ICRMSUJTIg0KDQpmaQ0KDQp0ZXN0ICRhY19jdl9saWJfa3N0YXRfa3N0YXRfb3BlbiA9 IHllcyAmJiBnbF9oYXZlX2Z1bmM9eWVzDQoNCiMgT24gSFBVWDksIGFuIHVucHJpdmlsZWdlZCB1 c2VyIGNhbiBnZXQgbG9hZCBhdmVyYWdlcyB0aGlzIHdheS4NCmlmIHRlc3QgJGdsX2hhdmVfZnVu YyA9IG5vOyB0aGVuDQogIGZvciBhY19mdW5jIGluIHBzdGF0X2dldGR5bmFtaWMNCmRvIDoNCiAg YWNfZm5fY19jaGVja19mdW5jICIkTElORU5PIiAicHN0YXRfZ2V0ZHluYW1pYyIgImFjX2N2X2Z1 bmNfcHN0YXRfZ2V0ZHluYW1pYyINCmlmIHRlc3QgIngkYWNfY3ZfZnVuY19wc3RhdF9nZXRkeW5h bWljIiA9IHh5ZXM7IHRoZW4gOg0KICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GDQojZGVmaW5l IEhBVkVfUFNUQVRfR0VURFlOQU1JQyAxDQpfQUNFT0YNCiBnbF9oYXZlX2Z1bmM9eWVzDQpmaQ0K ZG9uZQ0KDQpmaQ0KDQojIEFJWCBoYXMgbGlicGVyZnN0YXQgd2hpY2ggZG9lcyBub3QgcmVxdWly ZSByb290DQppZiB0ZXN0ICRnbF9oYXZlX2Z1bmMgPSBubzsgdGhlbg0KICB7ICRhc19lY2hvICIk YXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBwZXJmc3RhdF9jcHVfdG90 YWwgaW4gLWxwZXJmc3RhdCIgPiY1DQokYXNfZWNob19uICJjaGVja2luZyBmb3IgcGVyZnN0YXRf Y3B1X3RvdGFsIGluIC1scGVyZnN0YXQuLi4gIiA+JjY7IH0NCmlmICR7YWNfY3ZfbGliX3BlcmZz dGF0X3BlcmZzdGF0X2NwdV90b3RhbCs6fSBmYWxzZTsgdGhlbiA6DQogICRhc19lY2hvX24gIihj YWNoZWQpICIgPiY2DQplbHNlDQogIGFjX2NoZWNrX2xpYl9zYXZlX0xJQlM9JExJQlMNCkxJQlM9 Ii1scGVyZnN0YXQgICRMSUJTIg0KY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3Qu JGFjX2V4dA0KLyogZW5kIGNvbmZkZWZzLmguICAqLw0KDQovKiBPdmVycmlkZSBhbnkgR0NDIGlu dGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4NCiAgIFVzZSBjaGFyIGJlY2F1c2Ug aW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIEdDQw0KICAgYnVpbHRpbiBhbmQg dGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8NCiNpZmRl ZiBfX2NwbHVzcGx1cw0KZXh0ZXJuICJDIg0KI2VuZGlmDQpjaGFyIHBlcmZzdGF0X2NwdV90b3Rh bCAoKTsNCmludA0KbWFpbiAoKQ0Kew0KcmV0dXJuIHBlcmZzdGF0X2NwdV90b3RhbCAoKTsNCiAg Ow0KICByZXR1cm4gMDsNCn0NCl9BQ0VPRg0KaWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7 IHRoZW4gOg0KICBhY19jdl9saWJfcGVyZnN0YXRfcGVyZnN0YXRfY3B1X3RvdGFsPXllcw0KZWxz ZQ0KICBhY19jdl9saWJfcGVyZnN0YXRfcGVyZnN0YXRfY3B1X3RvdGFsPW5vDQpmaQ0Kcm0gLWYg Y29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcDQogICAgY29uZnRlc3QkYWNf ZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQNCkxJQlM9JGFjX2NoZWNrX2xpYl9zYXZlX0xJQlMNCmZp DQp7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2 X2xpYl9wZXJmc3RhdF9wZXJmc3RhdF9jcHVfdG90YWwiID4mNQ0KJGFzX2VjaG8gIiRhY19jdl9s aWJfcGVyZnN0YXRfcGVyZnN0YXRfY3B1X3RvdGFsIiA+JjY7IH0NCmlmIHRlc3QgIngkYWNfY3Zf bGliX3BlcmZzdGF0X3BlcmZzdGF0X2NwdV90b3RhbCIgPSB4eWVzOyB0aGVuIDoNCiAgY2F0ID4+ Y29uZmRlZnMuaCA8PF9BQ0VPRg0KI2RlZmluZSBIQVZFX0xJQlBFUkZTVEFUIDENCl9BQ0VPRg0K DQogIExJQlM9Ii1scGVyZnN0YXQgJExJQlMiDQoNCmZpDQoNCiAgdGVzdCAkYWNfY3ZfbGliX3Bl cmZzdGF0X3BlcmZzdGF0X2NwdV90b3RhbCA9IHllcyAmJiBnbF9oYXZlX2Z1bmM9eWVzDQpmaQ0K DQppZiB0ZXN0ICRnbF9oYXZlX2Z1bmMgPSBubzsgdGhlbg0KICBhY19mbl9jX2NoZWNrX2hlYWRl cl9tb25ncmVsICIkTElORU5PIiAic3lzL2RnX3N5c19pbmZvLmgiICJhY19jdl9oZWFkZXJfc3lz X2RnX3N5c19pbmZvX2giICIkYWNfaW5jbHVkZXNfZGVmYXVsdCINCmlmIHRlc3QgIngkYWNfY3Zf aGVhZGVyX3N5c19kZ19zeXNfaW5mb19oIiA9IHh5ZXM7IHRoZW4gOg0KICBnbF9oYXZlX2Z1bmM9 eWVzDQoNCiRhc19lY2hvICIjZGVmaW5lIERHVVggMSIgPj5jb25mZGVmcy5oDQoNCiAgICAgeyAk YXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgZGdfc3lz X2luZm8gaW4gLWxkZ2MiID4mNQ0KJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIGRnX3N5c19pbmZv IGluIC1sZGdjLi4uICIgPiY2OyB9DQppZiAke2FjX2N2X2xpYl9kZ2NfZGdfc3lzX2luZm8rOn0g ZmFsc2U7IHRoZW4gOg0KICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNg0KZWxzZQ0KICBhY19j aGVja19saWJfc2F2ZV9MSUJTPSRMSUJTDQpMSUJTPSItbGRnYyAgJExJQlMiDQpjYXQgY29uZmRl ZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0DQovKiBlbmQgY29uZmRlZnMuaC4gICov DQoNCi8qIE92ZXJyaWRlIGFueSBHQ0MgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVy cm9yLg0KICAgVXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBl IG9mIGEgR0NDDQogICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291 bGQgc3RpbGwgYXBwbHkuICAqLw0KI2lmZGVmIF9fY3BsdXNwbHVzDQpleHRlcm4gIkMiDQojZW5k aWYNCmNoYXIgZGdfc3lzX2luZm8gKCk7DQppbnQNCm1haW4gKCkNCnsNCnJldHVybiBkZ19zeXNf aW5mbyAoKTsNCiAgOw0KICByZXR1cm4gMDsNCn0NCl9BQ0VPRg0KaWYgYWNfZm5fY190cnlfbGlu ayAiJExJTkVOTyI7IHRoZW4gOg0KICBhY19jdl9saWJfZGdjX2RnX3N5c19pbmZvPXllcw0KZWxz ZQ0KICBhY19jdl9saWJfZGdjX2RnX3N5c19pbmZvPW5vDQpmaQ0Kcm0gLWYgY29yZSBjb25mdGVz dC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcDQogICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0 ZXN0LiRhY19leHQNCkxJQlM9JGFjX2NoZWNrX2xpYl9zYXZlX0xJQlMNCmZpDQp7ICRhc19lY2hv ICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X2xpYl9kZ2NfZGdf c3lzX2luZm8iID4mNQ0KJGFzX2VjaG8gIiRhY19jdl9saWJfZGdjX2RnX3N5c19pbmZvIiA+JjY7 IH0NCmlmIHRlc3QgIngkYWNfY3ZfbGliX2RnY19kZ19zeXNfaW5mbyIgPSB4eWVzOyB0aGVuIDoN CiAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRg0KI2RlZmluZSBIQVZFX0xJQkRHQyAxDQpfQUNF T0YNCg0KICBMSUJTPSItbGRnYyAkTElCUyINCg0KZmkNCg0KZmkNCg0KDQpmaQ0KDQojIFdlIGNh bm5vdCBjaGVjayBmb3IgPGR3YXJmLmg+LCBiZWNhdXNlIFNvbGFyaXMgMiBkb2VzIG5vdCB1c2Ug ZHdhcmYgKGl0DQojIHVzZXMgc3RhYnMpLCBidXQgaXQgaXMgc3RpbGwgU1ZSNC4gIFdlIGNhbm5v dCBjaGVjayBmb3IgPGVsZi5oPiBiZWNhdXNlDQojIElyaXggNC4wLjVGIGhhcyB0aGUgaGVhZGVy IGJ1dCBub3QgdGhlIGxpYnJhcnkuDQppZiB0ZXN0ICRnbF9oYXZlX2Z1bmMgPSBubyAmJiB0ZXN0 ICIkYWNfY3ZfbGliX2VsZl9lbGZfYmVnaW4iID0geWVzIFwNCiAgICAmJiB0ZXN0ICIkYWNfY3Zf bGliX2t2bV9rdm1fb3BlbiIgPSB5ZXM7IHRoZW4NCiAgZ2xfaGF2ZV9mdW5jPXllcw0KDQokYXNf ZWNobyAiI2RlZmluZSBTVlI0IDEiID4+Y29uZmRlZnMuaA0KDQpmaQ0KDQppZiB0ZXN0ICRnbF9o YXZlX2Z1bmMgPSBubzsgdGhlbg0KICBhY19mbl9jX2NoZWNrX2hlYWRlcl9tb25ncmVsICIkTElO RU5PIiAiaW5xX3N0YXRzL2NwdXN0YXRzLmgiICJhY19jdl9oZWFkZXJfaW5xX3N0YXRzX2NwdXN0 YXRzX2giICIkYWNfaW5jbHVkZXNfZGVmYXVsdCINCmlmIHRlc3QgIngkYWNfY3ZfaGVhZGVyX2lu cV9zdGF0c19jcHVzdGF0c19oIiA9IHh5ZXM7IHRoZW4gOg0KICBnbF9oYXZlX2Z1bmM9eWVzDQoN CiRhc19lY2hvICIjZGVmaW5lIFVNQVggMSIgPj5jb25mZGVmcy5oDQoNCg0KJGFzX2VjaG8gIiNk ZWZpbmUgVU1BWDRfMyAxIiA+PmNvbmZkZWZzLmgNCg0KZmkNCg0KDQpmaQ0KDQppZiB0ZXN0ICRn bF9oYXZlX2Z1bmMgPSBubzsgdGhlbg0KICBhY19mbl9jX2NoZWNrX2hlYWRlcl9tb25ncmVsICIk TElORU5PIiAic3lzL2NwdXN0YXRzLmgiICJhY19jdl9oZWFkZXJfc3lzX2NwdXN0YXRzX2giICIk YWNfaW5jbHVkZXNfZGVmYXVsdCINCmlmIHRlc3QgIngkYWNfY3ZfaGVhZGVyX3N5c19jcHVzdGF0 c19oIiA9IHh5ZXM7IHRoZW4gOg0KICBnbF9oYXZlX2Z1bmM9eWVzOyAkYXNfZWNobyAiI2RlZmlu ZSBVTUFYIDEiID4+Y29uZmRlZnMuaA0KDQpmaQ0KDQoNCmZpDQoNCmlmIHRlc3QgJGdsX2hhdmVf ZnVuYyA9IG5vOyB0aGVuDQogIGZvciBhY19oZWFkZXIgaW4gbWFjaC9tYWNoLmgNCmRvIDoNCiAg YWNfZm5fY19jaGVja19oZWFkZXJfbW9uZ3JlbCAiJExJTkVOTyIgIm1hY2gvbWFjaC5oIiAiYWNf Y3ZfaGVhZGVyX21hY2hfbWFjaF9oIiAiJGFjX2luY2x1ZGVzX2RlZmF1bHQiDQppZiB0ZXN0ICJ4 JGFjX2N2X2hlYWRlcl9tYWNoX21hY2hfaCIgPSB4eWVzOyB0aGVuIDoNCiAgY2F0ID4+Y29uZmRl ZnMuaCA8PF9BQ0VPRg0KI2RlZmluZSBIQVZFX01BQ0hfTUFDSF9IIDENCl9BQ0VPRg0KDQpmaQ0K DQpkb25lDQoNCmZpDQoNCmZvciBhY19oZWFkZXIgaW4gbmxpc3QuaA0KZG8gOg0KICBhY19mbl9j X2NoZWNrX2hlYWRlcl9tb25ncmVsICIkTElORU5PIiAibmxpc3QuaCIgImFjX2N2X2hlYWRlcl9u bGlzdF9oIiAiJGFjX2luY2x1ZGVzX2RlZmF1bHQiDQppZiB0ZXN0ICJ4JGFjX2N2X2hlYWRlcl9u bGlzdF9oIiA9IHh5ZXM7IHRoZW4gOg0KICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GDQojZGVm aW5lIEhBVkVfTkxJU1RfSCAxDQpfQUNFT0YNCiBhY19mbl9jX2NoZWNrX21lbWJlciAiJExJTkVO TyIgInN0cnVjdCBubGlzdCIgIm5fdW4ubl9uYW1lIiAiYWNfY3ZfbWVtYmVyX3N0cnVjdF9ubGlz dF9uX3VuX25fbmFtZSIgIiNpbmNsdWRlIDxubGlzdC5oPg0KIg0KaWYgdGVzdCAieCRhY19jdl9t ZW1iZXJfc3RydWN0X25saXN0X25fdW5fbl9uYW1lIiA9IHh5ZXM7IHRoZW4gOg0KDQpjYXQgPj5j b25mZGVmcy5oIDw8X0FDRU9GDQojZGVmaW5lIEhBVkVfU1RSVUNUX05MSVNUX05fVU5fTl9OQU1F IDENCl9BQ0VPRg0KDQoNCmZpDQoNCiBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVz dC4kYWNfZXh0DQovKiBlbmQgY29uZmRlZnMuaC4gICovDQojaW5jbHVkZSA8bmxpc3QuaD4NCmlu dA0KbWFpbiAoKQ0Kew0Kc3RydWN0IG5saXN0IHg7DQogICAgICAgICAgICAgICAgICAgICNpZmRl ZiBIQVZFX1NUUlVDVF9OTElTVF9OX1VOX05fTkFNRQ0KICAgICAgICAgICAgICAgICAgICB4Lm5f dW4ubl9uYW1lID0gIiI7DQogICAgICAgICAgICAgICAgICAgICNlbHNlDQogICAgICAgICAgICAg ICAgICAgIHgubl9uYW1lID0gIiI7DQogICAgICAgICAgICAgICAgICAgICNlbmRpZg0KICA7DQog IHJldHVybiAwOw0KfQ0KX0FDRU9GDQppZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhl biA6DQoNCiRhc19lY2hvICIjZGVmaW5lIE5fTkFNRV9QT0lOVEVSIDEiID4+Y29uZmRlZnMuaA0K DQpmaQ0Kcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcDQogICAg Y29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQNCg0KZmkNCg0KZG9uZQ0KDQogICBm aQ0KZmkNCg0KDQppZiB0ZXN0ICJ4JGdsX3NhdmVfTElCUyIgPSB4OyB0aGVuDQogIEdFVExPQURB VkdfTElCUz0kTElCUw0KZWxzZQ0KICBHRVRMT0FEQVZHX0xJQlM9YGVjaG8gIiRMSUJTIiB8IHNl ZCAicyEkZ2xfc2F2ZV9MSUJTISEiYA0KZmkNCkxJQlM9JGdsX3NhdmVfTElCUw0KDQoNCiMgVGVz dCB3aGV0aGVyIHRoZSBzeXN0ZW0gZGVjbGFyZXMgZ2V0bG9hZGF2Zy4gU29sYXJpcyBoYXMgdGhl IGZ1bmN0aW9uDQojIGJ1dCBkZWNsYXJlcyBpdCBpbiA8c3lzL2xvYWRhdmcuaD4sIG5vdCA8c3Rk bGliLmg+Lg0KZm9yIGFjX2hlYWRlciBpbiBzeXMvbG9hZGF2Zy5oDQpkbyA6DQogIGFjX2ZuX2Nf Y2hlY2tfaGVhZGVyX21vbmdyZWwgIiRMSU5FTk8iICJzeXMvbG9hZGF2Zy5oIiAiYWNfY3ZfaGVh ZGVyX3N5c19sb2FkYXZnX2giICIkYWNfaW5jbHVkZXNfZGVmYXVsdCINCmlmIHRlc3QgIngkYWNf Y3ZfaGVhZGVyX3N5c19sb2FkYXZnX2giID0geHllczsgdGhlbiA6DQogIGNhdCA+PmNvbmZkZWZz LmggPDxfQUNFT0YNCiNkZWZpbmUgSEFWRV9TWVNfTE9BREFWR19IIDENCl9BQ0VPRg0KDQpmaQ0K DQpkb25lDQoNCmlmIHRlc3QgJGFjX2N2X2hlYWRlcl9zeXNfbG9hZGF2Z19oID0geWVzOyB0aGVu DQogIEhBVkVfU1lTX0xPQURBVkdfSD0xDQplbHNlDQogIEhBVkVfU1lTX0xPQURBVkdfSD0wDQpm aQ0KYWNfZm5fY19jaGVja19kZWNsICIkTElORU5PIiAiZ2V0bG9hZGF2ZyIgImFjX2N2X2hhdmVf ZGVjbF9nZXRsb2FkYXZnIiAiI2lmIEhBVkVfU1lTX0xPQURBVkdfSA0KICAgIyBpbmNsdWRlIDxz eXMvbG9hZGF2Zy5oPg0KICAgI2VuZGlmDQogICAjaW5jbHVkZSA8c3RkbGliLmg+DQoiDQppZiB0 ZXN0ICJ4JGFjX2N2X2hhdmVfZGVjbF9nZXRsb2FkYXZnIiA9IHh5ZXM7IHRoZW4gOg0KDQplbHNl DQogIEhBVkVfREVDTF9HRVRMT0FEQVZHPTANCmZpDQoNCg0KDQoNCg0KICBHTlVMSUJfR0VUTE9B REFWRz0xDQoNCg0KDQokYXNfZWNobyAiI2RlZmluZSBHTlVMSUJfVEVTVF9HRVRMT0FEQVZHIDEi ID4+Y29uZmRlZnMuaA0KDQoNCg0KICAjIENvZGUgZnJvbSBtb2R1bGUgZ2V0bmRlbGltMjoNCg0K DQoNCg0KDQoNCg0KDQoNCiAgZ2xfTElCT0JKUz0iJGdsX0xJQk9CSlMgZ2V0bmRlbGltMi4kYWNf b2JqZXh0Ig0KDQoNCg0KDQoNCg0KDQogICMgQ29kZSBmcm9tIG1vZHVsZSBnZXRvcHQtZ251Og0K DQoNCg0KDQoNCg0KDQokYXNfZWNobyAiI2RlZmluZSBHTlVMSUJfVEVTVF9HRVRPUFRfR05VIDEi ID4+Y29uZmRlZnMuaA0KDQoNCiAgIyBDb2RlIGZyb20gbW9kdWxlIGdldG9wdC1wb3NpeDoNCg0K DQoNCg0KDQogIGlmIHRlc3QgLW4gIiRnbF9yZXBsYWNlX2dldG9wdCI7IHRoZW4gOg0KDQoNCg0K ICBHRVRPUFRfSD1nZXRvcHQuaA0KDQokYXNfZWNobyAiI2RlZmluZSBfX0dFVE9QVF9QUkVGSVgg cnBsXyIgPj5jb25mZGVmcy5oDQoNCg0KDQogICAgR05VTElCX1VOSVNURF9IX0dFVE9QVD0xDQoN Cg0KDQoNCg0KDQoNCg0KICBnbF9MSUJPQkpTPSIkZ2xfTElCT0JKUyBnZXRvcHQuJGFjX29iamV4 dCINCg0KDQoNCg0KDQoNCg0KDQoNCiAgZ2xfTElCT0JKUz0iJGdsX0xJQk9CSlMgZ2V0b3B0MS4k YWNfb2JqZXh0Ig0KDQoNCg0KDQoNCg0KZmkNCg0KDQogICMgQ29kZSBmcm9tIG1vZHVsZSBnZXRw YWdlc2l6ZToNCg0KDQoNCiAgZm9yIGFjX2Z1bmMgaW4gZ2V0cGFnZXNpemUNCmRvIDoNCiAgYWNf Zm5fY19jaGVja19mdW5jICIkTElORU5PIiAiZ2V0cGFnZXNpemUiICJhY19jdl9mdW5jX2dldHBh Z2VzaXplIg0KaWYgdGVzdCAieCRhY19jdl9mdW5jX2dldHBhZ2VzaXplIiA9IHh5ZXM7IHRoZW4g Og0KICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GDQojZGVmaW5lIEhBVkVfR0VUUEFHRVNJWkUg MQ0KX0FDRU9GDQoNCmZpDQpkb25lDQoNCiAgaWYgdGVzdCAkYWNfY3ZfZnVuY19nZXRwYWdlc2l6 ZSA9IG5vOyB0aGVuDQogICAgSEFWRV9HRVRQQUdFU0laRT0wDQogICAgZm9yIGFjX2hlYWRlciBp biBPUy5oDQpkbyA6DQogIGFjX2ZuX2NfY2hlY2tfaGVhZGVyX21vbmdyZWwgIiRMSU5FTk8iICJP Uy5oIiAiYWNfY3ZfaGVhZGVyX09TX2giICIkYWNfaW5jbHVkZXNfZGVmYXVsdCINCmlmIHRlc3Qg IngkYWNfY3ZfaGVhZGVyX09TX2giID0geHllczsgdGhlbiA6DQogIGNhdCA+PmNvbmZkZWZzLmgg PDxfQUNFT0YNCiNkZWZpbmUgSEFWRV9PU19IIDENCl9BQ0VPRg0KDQpmaQ0KDQpkb25lDQoNCiAg ICBpZiB0ZXN0ICRhY19jdl9oZWFkZXJfT1NfaCA9IHllczsgdGhlbg0KICAgICAgSEFWRV9PU19I PTENCiAgICBmaQ0KICAgIGZvciBhY19oZWFkZXIgaW4gc3lzL3BhcmFtLmgNCmRvIDoNCiAgYWNf Zm5fY19jaGVja19oZWFkZXJfbW9uZ3JlbCAiJExJTkVOTyIgInN5cy9wYXJhbS5oIiAiYWNfY3Zf aGVhZGVyX3N5c19wYXJhbV9oIiAiJGFjX2luY2x1ZGVzX2RlZmF1bHQiDQppZiB0ZXN0ICJ4JGFj X2N2X2hlYWRlcl9zeXNfcGFyYW1faCIgPSB4eWVzOyB0aGVuIDoNCiAgY2F0ID4+Y29uZmRlZnMu aCA8PF9BQ0VPRg0KI2RlZmluZSBIQVZFX1NZU19QQVJBTV9IIDENCl9BQ0VPRg0KDQpmaQ0KDQpk b25lDQoNCiAgICBpZiB0ZXN0ICRhY19jdl9oZWFkZXJfc3lzX3BhcmFtX2ggPSB5ZXM7IHRoZW4N CiAgICAgIEhBVkVfU1lTX1BBUkFNX0g9MQ0KICAgIGZpDQogIGZpDQogIGNhc2UgIiRob3N0X29z IiBpbg0KICAgIG1pbmd3KikNCiAgICAgIFJFUExBQ0VfR0VUUEFHRVNJWkU9MQ0KDQoNCg0KDQoN Cg0KDQoNCiAgZ2xfTElCT0JKUz0iJGdsX0xJQk9CSlMgZ2V0cGFnZXNpemUuJGFjX29iamV4dCIN Cg0KICAgICAgOzsNCiAgZXNhYw0KICAgICAgYWNfZm5fY19jaGVja19kZWNsICIkTElORU5PIiAi Z2V0cGFnZXNpemUiICJhY19jdl9oYXZlX2RlY2xfZ2V0cGFnZXNpemUiICIkYWNfaW5jbHVkZXNf ZGVmYXVsdCINCmlmIHRlc3QgIngkYWNfY3ZfaGF2ZV9kZWNsX2dldHBhZ2VzaXplIiA9IHh5ZXM7 IHRoZW4gOg0KDQplbHNlDQogIEhBVkVfREVDTF9HRVRQQUdFU0laRT0wDQpmaQ0KDQoNCg0KDQoN CiAgR05VTElCX0dFVFBBR0VTSVpFPTENCg0KDQoNCiRhc19lY2hvICIjZGVmaW5lIEdOVUxJQl9U RVNUX0dFVFBBR0VTSVpFIDEiID4+Y29uZmRlZnMuaA0KDQoNCg0KICAjIENvZGUgZnJvbSBtb2R1 bGUgZ2V0cGFzcy1nbnU6DQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQogIGdsX0xJQk9CSlM9IiRn bF9MSUJPQkpTIGdldHBhc3MuJGFjX29iamV4dCINCg0KDQoNCg0KICBhY19mbl9jX2NoZWNrX2Rl Y2wgIiRMSU5FTk8iICJfX2ZzZXRsb2NraW5nIiAiYWNfY3ZfaGF2ZV9kZWNsX19fZnNldGxvY2tp bmciICIjaW5jbHVkZSA8c3RkaW8uaD4NCiAgICAgI2lmIEhBVkVfU1RESU9fRVhUX0gNCiAgICAg ICNpbmNsdWRlIDxzdGRpb19leHQuaD4NCiAgICAgI2VuZGlmDQoiDQppZiB0ZXN0ICJ4JGFjX2N2 X2hhdmVfZGVjbF9fX2ZzZXRsb2NraW5nIiA9IHh5ZXM7IHRoZW4gOg0KICBhY19oYXZlX2RlY2w9 MQ0KZWxzZQ0KICBhY19oYXZlX2RlY2w9MA0KZmkNCg0KY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VP Rg0KI2RlZmluZSBIQVZFX0RFQ0xfX19GU0VUTE9DS0lORyAkYWNfaGF2ZV9kZWNsDQpfQUNFT0YN Cg0KDQoNCg0KDQoNCiAgOg0KDQoNCiRhc19lY2hvICIjZGVmaW5lIGdldHBhc3MgZ251X2dldHBh c3MiID4+Y29uZmRlZnMuaA0KDQoNCiAgIyBDb2RlIGZyb20gbW9kdWxlIGdldHRleHQtaDoNCg0K DQogICMgQ29kZSBmcm9tIG1vZHVsZSBnZXR0aW1lOg0KDQoNCg0KDQoNCg0KDQoNCg0KICBnbF9M SUJPQkpTPSIkZ2xfTElCT0JKUyBnZXR0aW1lLiRhY19vYmpleHQiDQoNCg0KDQoNCg0KDQogICMg Q29kZSBmcm9tIG1vZHVsZSBnZXR0aW1lb2ZkYXk6DQoNCg0KDQoNCg0KDQogIGdsX2dldHRpbWVv ZmRheV90aW1lem9uZT12b2lkDQogIGlmIHRlc3QgJGFjX2N2X2Z1bmNfZ2V0dGltZW9mZGF5ICE9 IHllczsgdGhlbg0KICAgIEhBVkVfR0VUVElNRU9GREFZPTANCg0KDQoNCg0KDQoNCg0KDQogIGds X0xJQk9CSlM9IiRnbF9MSUJPQkpTIGdldHRpbWVvZmRheS4kYWNfb2JqZXh0Ig0KDQoNCiAgZm9y IGFjX2hlYWRlciBpbiBzeXMvdGltZWIuaA0KZG8gOg0KICBhY19mbl9jX2NoZWNrX2hlYWRlcl9t b25ncmVsICIkTElORU5PIiAic3lzL3RpbWViLmgiICJhY19jdl9oZWFkZXJfc3lzX3RpbWViX2gi ICIkYWNfaW5jbHVkZXNfZGVmYXVsdCINCmlmIHRlc3QgIngkYWNfY3ZfaGVhZGVyX3N5c190aW1l Yl9oIiA9IHh5ZXM7IHRoZW4gOg0KICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GDQojZGVmaW5l IEhBVkVfU1lTX1RJTUVCX0ggMQ0KX0FDRU9GDQoNCmZpDQoNCmRvbmUNCg0KICBmb3IgYWNfZnVu YyBpbiBfZnRpbWUNCmRvIDoNCiAgYWNfZm5fY19jaGVja19mdW5jICIkTElORU5PIiAiX2Z0aW1l IiAiYWNfY3ZfZnVuY19fZnRpbWUiDQppZiB0ZXN0ICJ4JGFjX2N2X2Z1bmNfX2Z0aW1lIiA9IHh5 ZXM7IHRoZW4gOg0KICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GDQojZGVmaW5lIEhBVkVfX0ZU SU1FIDENCl9BQ0VPRg0KDQpmaQ0KZG9uZQ0KDQoNCiAgZWxzZQ0KDQoNCg0KIHsgJGFzX2VjaG8g IiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciBnZXR0aW1lb2Zk YXkgY2xvYmJlcnMgbG9jYWx0aW1lIGJ1ZmZlciIgPiY1DQokYXNfZWNob19uICJjaGVja2luZyB3 aGV0aGVyIGdldHRpbWVvZmRheSBjbG9iYmVycyBsb2NhbHRpbWUgYnVmZmVyLi4uICIgPiY2OyB9 DQppZiAke2dsX2N2X2Z1bmNfZ2V0dGltZW9mZGF5X2Nsb2JiZXIrOn0gZmFsc2U7IHRoZW4gOg0K ICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNg0KZWxzZQ0KICBpZiB0ZXN0ICIkY3Jvc3NfY29t cGlsaW5nIiA9IHllczsgdGhlbiA6DQogICAgICAgZ2xfY3ZfZnVuY19nZXR0aW1lb2ZkYXlfY2xv YmJlcj15ZXMNCmVsc2UNCiAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFj X2V4dA0KLyogZW5kIGNvbmZkZWZzLmguICAqLw0KI2luY2x1ZGUgPHN0cmluZy5oPg0KICAgICAg ICAgICNpbmNsdWRlIDxzeXMvdGltZS5oPg0KICAgICAgICAgICNpbmNsdWRlIDx0aW1lLmg+DQog ICAgICAgICAgI2luY2x1ZGUgPHN0ZGxpYi5oPg0KDQppbnQNCm1haW4gKCkNCnsNCg0KICAgICAg ICAgIHRpbWVfdCB0ID0gMDsNCiAgICAgICAgICBzdHJ1Y3QgdG0gKmx0Ow0KICAgICAgICAgIHN0 cnVjdCB0bSBzYXZlZF9sdDsNCiAgICAgICAgICBzdHJ1Y3QgdGltZXZhbCB0djsNCiAgICAgICAg ICBsdCA9IGxvY2FsdGltZSAoJnQpOw0KICAgICAgICAgIHNhdmVkX2x0ID0gKmx0Ow0KICAgICAg ICAgIGdldHRpbWVvZmRheSAoJnR2LCBOVUxMKTsNCiAgICAgICAgICByZXR1cm4gbWVtY21wIChs dCwgJnNhdmVkX2x0LCBzaXplb2YgKHN0cnVjdCB0bSkpICE9IDA7DQoNCiAgOw0KICByZXR1cm4g MDsNCn0NCl9BQ0VPRg0KaWYgYWNfZm5fY190cnlfcnVuICIkTElORU5PIjsgdGhlbiA6DQogIGds X2N2X2Z1bmNfZ2V0dGltZW9mZGF5X2Nsb2JiZXI9bm8NCmVsc2UNCiAgZ2xfY3ZfZnVuY19nZXR0 aW1lb2ZkYXlfY2xvYmJlcj15ZXMNCmZpDQpybSAtZiBjb3JlICouY29yZSBjb3JlLmNvbmZ0ZXN0 LiogZ21vbi5vdXQgYmIub3V0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCBcDQogIGNvbmZ0ZXN0LiRhY19v YmpleHQgY29uZnRlc3QuYmVhbSBjb25mdGVzdC4kYWNfZXh0DQpmaQ0KDQpmaQ0KeyAkYXNfZWNo byAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRnbF9jdl9mdW5jX2dldHRp bWVvZmRheV9jbG9iYmVyIiA+JjUNCiRhc19lY2hvICIkZ2xfY3ZfZnVuY19nZXR0aW1lb2ZkYXlf Y2xvYmJlciIgPiY2OyB9DQoNCiBpZiB0ZXN0ICRnbF9jdl9mdW5jX2dldHRpbWVvZmRheV9jbG9i YmVyID0geWVzOyB0aGVuDQogICBSRVBMQUNFX0dFVFRJTUVPRkRBWT0xDQoNCg0KDQoNCg0KDQoN Cg0KDQogIGdsX0xJQk9CSlM9IiRnbF9MSUJPQkpTIGdldHRpbWVvZmRheS4kYWNfb2JqZXh0Ig0K DQoNCiAgZm9yIGFjX2hlYWRlciBpbiBzeXMvdGltZWIuaA0KZG8gOg0KICBhY19mbl9jX2NoZWNr X2hlYWRlcl9tb25ncmVsICIkTElORU5PIiAic3lzL3RpbWViLmgiICJhY19jdl9oZWFkZXJfc3lz X3RpbWViX2giICIkYWNfaW5jbHVkZXNfZGVmYXVsdCINCmlmIHRlc3QgIngkYWNfY3ZfaGVhZGVy X3N5c190aW1lYl9oIiA9IHh5ZXM7IHRoZW4gOg0KICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9G DQojZGVmaW5lIEhBVkVfU1lTX1RJTUVCX0ggMQ0KX0FDRU9GDQoNCmZpDQoNCmRvbmUNCg0KICBm b3IgYWNfZnVuYyBpbiBfZnRpbWUNCmRvIDoNCiAgYWNfZm5fY19jaGVja19mdW5jICIkTElORU5P IiAiX2Z0aW1lIiAiYWNfY3ZfZnVuY19fZnRpbWUiDQppZiB0ZXN0ICJ4JGFjX2N2X2Z1bmNfX2Z0 aW1lIiA9IHh5ZXM7IHRoZW4gOg0KICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GDQojZGVmaW5l IEhBVkVfX0ZUSU1FIDENCl9BQ0VPRg0KDQpmaQ0KZG9uZQ0KDQoNCg0KJGFzX2VjaG8gIiNkZWZp bmUgZ210aW1lIHJwbF9nbXRpbWUiID4+Y29uZmRlZnMuaA0KDQoNCiRhc19lY2hvICIjZGVmaW5l IGxvY2FsdGltZSBycGxfbG9jYWx0aW1lIiA+PmNvbmZkZWZzLmgNCg0KDQoNCiRhc19lY2hvICIj ZGVmaW5lIEdFVFRJTUVPRkRBWV9DTE9CQkVSU19MT0NBTFRJTUUgMSIgPj5jb25mZGVmcy5oDQoN CiBmaQ0KDQogICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVj a2luZyBmb3IgZ2V0dGltZW9mZGF5IHdpdGggUE9TSVggc2lnbmF0dXJlIiA+JjUNCiRhc19lY2hv X24gImNoZWNraW5nIGZvciBnZXR0aW1lb2ZkYXkgd2l0aCBQT1NJWCBzaWduYXR1cmUuLi4gIiA+ JjY7IH0NCmlmICR7Z2xfY3ZfZnVuY19nZXR0aW1lb2ZkYXlfcG9zaXhfc2lnbmF0dXJlKzp9IGZh bHNlOyB0aGVuIDoNCiAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYNCmVsc2UNCiAgY2F0IGNv bmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dA0KLyogZW5kIGNvbmZkZWZzLmgu ICAqLw0KI2luY2x1ZGUgPHN5cy90aW1lLmg+DQogICAgICAgICAgICAgIHN0cnVjdCB0aW1ldmFs IGM7DQogICAgICAgICAgICAgIGludCBnZXR0aW1lb2ZkYXkgKHN0cnVjdCB0aW1ldmFsICpyZXN0 cmljdCwgdm9pZCAqcmVzdHJpY3QpOw0KDQppbnQNCm1haW4gKCkNCnsNCi8qIGdsaWJjIHVzZXMg c3RydWN0IHRpbWV6b25lICogcmF0aGVyIHRoYW4gdGhlIFBPU0lYIHZvaWQgKg0KICAgICAgICAg ICAgICAgICBpZiBfR05VX1NPVVJDRSBpcyBkZWZpbmVkLiAgSG93ZXZlciwgc2luY2UgdGhlIG9u bHkgcG9ydGFibGUNCiAgICAgICAgICAgICAgICAgdXNlIG9mIGdldHRpbWVvZmRheSB1c2VzIE5V TEwgYXMgdGhlIHNlY29uZCBwYXJhbWV0ZXIsIGFuZA0KICAgICAgICAgICAgICAgICBzaW5jZSB0 aGUgZ2xpYmMgZGVmaW5pdGlvbiBpcyBhY3R1YWxseSBtb3JlIHR5cGVzYWZlLCBpdCBpcw0KICAg ICAgICAgICAgICAgICBub3Qgd29ydGggd3JhcHBpbmcgdGhpcyB0byBnZXQgYSBjb21wbGlhbnQg c2lnbmF0dXJlLiAgKi8NCiAgICAgICAgICAgICAgaW50ICgqZikgKHN0cnVjdCB0aW1ldmFsICpy ZXN0cmljdCwgdm9pZCAqcmVzdHJpY3QpDQogICAgICAgICAgICAgICAgPSBnZXR0aW1lb2ZkYXk7 DQogICAgICAgICAgICAgIGludCB4ID0gZiAoJmMsIDApOw0KICAgICAgICAgICAgICByZXR1cm4g ISh4IHwgYy50dl9zZWMgfCBjLnR2X3VzZWMpOw0KDQogIDsNCiAgcmV0dXJuIDA7DQp9DQpfQUNF T0YNCmlmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoNCiAgZ2xfY3ZfZnVu Y19nZXR0aW1lb2ZkYXlfcG9zaXhfc2lnbmF0dXJlPXllcw0KZWxzZQ0KICBjYXQgY29uZmRlZnMu aCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0DQovKiBlbmQgY29uZmRlZnMuaC4gICovDQoj aW5jbHVkZSA8c3lzL3RpbWUuaD4NCmludCBnZXR0aW1lb2ZkYXkgKHN0cnVjdCB0aW1ldmFsICpy ZXN0cmljdCwgc3RydWN0IHRpbWV6b25lICpyZXN0cmljdCk7DQoNCmludA0KbWFpbiAoKQ0Kew0K DQogIDsNCiAgcmV0dXJuIDA7DQp9DQpfQUNFT0YNCmlmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRM SU5FTk8iOyB0aGVuIDoNCiAgZ2xfY3ZfZnVuY19nZXR0aW1lb2ZkYXlfcG9zaXhfc2lnbmF0dXJl PWFsbW9zdA0KZWxzZQ0KICBnbF9jdl9mdW5jX2dldHRpbWVvZmRheV9wb3NpeF9zaWduYXR1cmU9 bm8NCmZpDQpybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0 ZXN0LiRhY19leHQNCmZpDQpybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2Jq ZXh0IGNvbmZ0ZXN0LiRhY19leHQNCmZpDQp7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8t JExJTkVOT306IHJlc3VsdDogJGdsX2N2X2Z1bmNfZ2V0dGltZW9mZGF5X3Bvc2l4X3NpZ25hdHVy ZSIgPiY1DQokYXNfZWNobyAiJGdsX2N2X2Z1bmNfZ2V0dGltZW9mZGF5X3Bvc2l4X3NpZ25hdHVy ZSIgPiY2OyB9DQogICAgaWYgdGVzdCAkZ2xfY3ZfZnVuY19nZXR0aW1lb2ZkYXlfcG9zaXhfc2ln bmF0dXJlID0gYWxtb3N0OyB0aGVuDQogICAgICBnbF9nZXR0aW1lb2ZkYXlfdGltZXpvbmU9J3N0 cnVjdCB0aW1lem9uZScNCiAgICBlbGlmIHRlc3QgJGdsX2N2X2Z1bmNfZ2V0dGltZW9mZGF5X3Bv c2l4X3NpZ25hdHVyZSAhPSB5ZXM7IHRoZW4NCiAgICAgIFJFUExBQ0VfR0VUVElNRU9GREFZPTEN Cg0KDQoNCg0KDQoNCg0KDQogIGdsX0xJQk9CSlM9IiRnbF9MSUJPQkpTIGdldHRpbWVvZmRheS4k YWNfb2JqZXh0Ig0KDQoNCiAgZm9yIGFjX2hlYWRlciBpbiBzeXMvdGltZWIuaA0KZG8gOg0KICBh Y19mbl9jX2NoZWNrX2hlYWRlcl9tb25ncmVsICIkTElORU5PIiAic3lzL3RpbWViLmgiICJhY19j dl9oZWFkZXJfc3lzX3RpbWViX2giICIkYWNfaW5jbHVkZXNfZGVmYXVsdCINCmlmIHRlc3QgIngk YWNfY3ZfaGVhZGVyX3N5c190aW1lYl9oIiA9IHh5ZXM7IHRoZW4gOg0KICBjYXQgPj5jb25mZGVm cy5oIDw8X0FDRU9GDQojZGVmaW5lIEhBVkVfU1lTX1RJTUVCX0ggMQ0KX0FDRU9GDQoNCmZpDQoN CmRvbmUNCg0KICBmb3IgYWNfZnVuYyBpbiBfZnRpbWUNCmRvIDoNCiAgYWNfZm5fY19jaGVja19m dW5jICIkTElORU5PIiAiX2Z0aW1lIiAiYWNfY3ZfZnVuY19fZnRpbWUiDQppZiB0ZXN0ICJ4JGFj X2N2X2Z1bmNfX2Z0aW1lIiA9IHh5ZXM7IHRoZW4gOg0KICBjYXQgPj5jb25mZGVmcy5oIDw8X0FD RU9GDQojZGVmaW5lIEhBVkVfX0ZUSU1FIDENCl9BQ0VPRg0KDQpmaQ0KZG9uZQ0KDQoNCiAgICBm aQ0KICBmaQ0KDQpjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GDQojZGVmaW5lIEdFVFRJTUVPRkRB WV9USU1FWk9ORSAkZ2xfZ2V0dGltZW9mZGF5X3RpbWV6b25lDQpfQUNFT0YNCg0KDQoNCg0KDQog IEdOVUxJQl9HRVRUSU1FT0ZEQVk9MQ0KDQoNCg0KJGFzX2VjaG8gIiNkZWZpbmUgR05VTElCX1RF U1RfR0VUVElNRU9GREFZIDEiID4+Y29uZmRlZnMuaA0KDQoNCg0KICAjIENvZGUgZnJvbSBtb2R1 bGUgZ2V0dWdyb3VwczoNCg0KDQoNCg0KDQoNCg0KDQoNCiAgZ2xfTElCT0JKUz0iJGdsX0xJQk9C SlMgZ2V0dWdyb3Vwcy4kYWNfb2JqZXh0Ig0KDQoNCg0KICAjIENvZGUgZnJvbSBtb2R1bGUgZ2V0 dXNlcnNoZWxsOg0KDQoNCg0KDQoNCg0KICBpZiB0ZXN0ICRhY19jdl9mdW5jX2dldHVzZXJzaGVs bCA9IHllczsgdGhlbg0KICAgICAgICBhY19mbl9jX2NoZWNrX2RlY2wgIiRMSU5FTk8iICJnZXR1 c2Vyc2hlbGwiICJhY19jdl9oYXZlX2RlY2xfZ2V0dXNlcnNoZWxsIiAiJGFjX2luY2x1ZGVzX2Rl ZmF1bHQiDQppZiB0ZXN0ICJ4JGFjX2N2X2hhdmVfZGVjbF9nZXR1c2Vyc2hlbGwiID0geHllczsg dGhlbiA6DQogIGFjX2hhdmVfZGVjbD0xDQplbHNlDQogIGFjX2hhdmVfZGVjbD0wDQpmaQ0KDQpj YXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GDQojZGVmaW5lIEhBVkVfREVDTF9HRVRVU0VSU0hFTEwg JGFjX2hhdmVfZGVjbA0KX0FDRU9GDQoNCiAgICBpZiB0ZXN0ICRhY19jdl9oYXZlX2RlY2xfZ2V0 dXNlcnNoZWxsID0gbm87IHRoZW4NCiAgICAgIEhBVkVfREVDTF9HRVRVU0VSU0hFTEw9MA0KICAg IGZpDQogIGVsc2UNCg0KDQoNCg0KDQoNCg0KDQogIGdsX0xJQk9CSlM9IiRnbF9MSUJPQkpTIGdl dHVzZXJzaGVsbC4kYWNfb2JqZXh0Ig0KDQogICAgICAgIEhBVkVfREVDTF9HRVRVU0VSU0hFTEw9 MA0KICBmaQ0KDQoNCg0KDQogIEdOVUxJQl9HRVRVU0VSU0hFTEw9MQ0KDQoNCg0KJGFzX2VjaG8g IiNkZWZpbmUgR05VTElCX1RFU1RfR0VUVVNFUlNIRUxMIDEiID4+Y29uZmRlZnMuaA0KDQoNCg0K ICAjIENvZGUgZnJvbSBtb2R1bGUgZ2l0LXZlcnNpb24tZ2VuOg0KICAjIENvZGUgZnJvbSBtb2R1 bGUgZ2l0bG9nLXRvLWNoYW5nZWxvZzoNCiAgIyBDb2RlIGZyb20gbW9kdWxlIGdudS1tYWtlOg0K DQogICBpZiAke01BS0UtbWFrZX0gLS12ZXJzaW9uIC9jYW5ub3QvbWFrZS90aGlzID4vZGV2L251 bGwgMj4mMTsgdGhlbg0KICBHTlVfTUFLRV9UUlVFPQ0KICBHTlVfTUFLRV9GQUxTRT0nIycNCmVs c2UNCiAgR05VX01BS0VfVFJVRT0nIycNCiAgR05VX01BS0VfRkFMU0U9DQpmaQ0KDQoNCiAgIyBD b2RlIGZyb20gbW9kdWxlIGdudS13ZWItZG9jLXVwZGF0ZToNCiAgIyBDb2RlIGZyb20gbW9kdWxl IGdudW1ha2VmaWxlOg0KICAjIEF1dG9jb25mIDIuNjFhLjk5IGFuZCBlYXJsaWVyIGRvbid0IHN1 cHBvcnQgbGlua2luZyBhIGZpbGUgb25seQ0KICAjIGluIFZQQVRIIGJ1aWxkcy4gIEJ1dCBzaW5j ZSBHTlVtYWtlZmlsZSBpcyBmb3IgbWFpbnRhaW5lciB1c2UNCiAgIyBvbmx5LCBpdCBkb2VzIG5v dCBtYXR0ZXIgaWYgd2Ugc2tpcCB0aGUgbGluayB3aXRoIG9sZGVyIGF1dG9jb25mLg0KICAjIEF1 dG9tYWtlIDEuMTAuMSBhbmQgZWFybGllciB0cnkgdG8gcmVtb3ZlIEdOVW1ha2VmaWxlIGluIG5v bi1WUEFUSA0KICAjIGJ1aWxkcywgc28gdXNlIGEgc2hlbGwgdmFyaWFibGUgdG8gYnlwYXNzIHRo aXMuDQogIEdOVW1ha2VmaWxlPUdOVW1ha2VmaWxlDQogIGFjX2NvbmZpZ19saW5rcz0iJGFjX2Nv bmZpZ19saW5rcyAkR05VbWFrZWZpbGU6JEdOVW1ha2VmaWxlIg0KDQogICMgQ29kZSBmcm9tIG1v ZHVsZSBnbnVwbG9hZDoNCiAgIyBDb2RlIGZyb20gbW9kdWxlIGdwZXJmOg0KICAjIENvZGUgZnJv bSBtb2R1bGUgZ3JvdXAtbWVtYmVyOg0KDQoNCg0KICAgICAgYWNfZm5fY19jaGVja19mdW5jICIk TElORU5PIiAiZ3JvdXBfbWVtYmVyIiAiYWNfY3ZfZnVuY19ncm91cF9tZW1iZXIiDQppZiB0ZXN0 ICJ4JGFjX2N2X2Z1bmNfZ3JvdXBfbWVtYmVyIiA9IHh5ZXM7IHRoZW4gOg0KDQplbHNlDQoNCg0K DQoNCg0KDQoNCg0KDQogIGdsX0xJQk9CSlM9IiRnbF9MSUJPQkpTIGdyb3VwLW1lbWJlci4kYWNf b2JqZXh0Ig0KDQoNCg0KDQoNCmZpDQoNCg0KICAjIENvZGUgZnJvbSBtb2R1bGUgaGFyZC1sb2Nh bGU6DQoNCg0KDQoNCg0KDQoNCg0KDQogIGdsX0xJQk9CSlM9IiRnbF9MSUJPQkpTIGhhcmQtbG9j YWxlLiRhY19vYmpleHQiDQoNCg0KICAjIENvZGUgZnJvbSBtb2R1bGUgaGFzaDoNCg0KDQoNCg0K DQoNCg0KDQoNCiAgZ2xfTElCT0JKUz0iJGdsX0xJQk9CSlMgaGFzaC4kYWNfb2JqZXh0Ig0KDQoN Cg0KDQogICMgQ29kZSBmcm9tIG1vZHVsZSBoYXNoLXBqdzoNCiAgIyBDb2RlIGZyb20gbW9kdWxl IGhhc2gtdHJpcGxlOg0KICAjIENvZGUgZnJvbSBtb2R1bGUgaGF2ZWxpYjoNCiAgIyBDb2RlIGZy b20gbW9kdWxlIGhlYXA6DQogICMgQ29kZSBmcm9tIG1vZHVsZSBob3N0LW9zOg0KDQogICAgeyAk YXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBob3N0IG9wZXJh dGluZyBzeXN0ZW0iID4mNQ0KJGFzX2VjaG9fbiAiY2hlY2tpbmcgaG9zdCBvcGVyYXRpbmcgc3lz dGVtLi4uICIgPiY2OyB9DQppZiAke2dsX2N2X2hvc3Rfb3BlcmF0aW5nX3N5c3RlbSs6fSBmYWxz ZTsgdGhlbiA6DQogICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2DQplbHNlDQogIGNhc2UgJGhv c3Rfb3MgaW4NCg0KICAgICAgICMgVGhlc2Ugb3BlcmF0aW5nIHN5c3RlbSBuYW1lcyBkbyBub3Qg dXNlIHRoZSBkZWZhdWx0IGhldXJpc3RpYyBiZWxvdy4NCiAgICAgICAjIFRoZXkgYXJlIGluIHJl dmVyc2Ugb3JkZXIsIHNvIHRoYXQgbW9yZS1zcGVjaWZpYyBwcmVmaXhlcyBjb21lIGZpcnN0Lg0K ICAgICAgIHdpbm50KikgICAgICAgICAgb3M9J1dpbmRvd3MgTlQnOzsNCiAgICAgICB2b3MqKSAg ICAgICAgICAgIG9zPSdWT1MnOzsNCiAgICAgICBzeXN2KikgICAgICAgICAgIG9zPSdVbml4IFN5 c3RlbSBWJzs7DQogICAgICAgc3VwZXJ1eCopICAgICAgICBvcz0nU1VQRVItVVgnOzsNCiAgICAg ICBzdW5vcyopICAgICAgICAgIG9zPSdTdW5PUyc7Ow0KICAgICAgIHN0b3AqKSAgICAgICAgICAg b3M9J1NUT1AnOzsNCiAgICAgICBzY28qKSAgICAgICAgICAgIG9zPSdTQ08gVW5peCc7Ow0KICAg ICAgIHJpc2NvcyopICAgICAgICAgb3M9J1JJU0MgT1MnOzsNCiAgICAgICByaXNjaXgqKSAgICAg ICAgIG9zPSdSSVNDaVgnOzsNCiAgICAgICBxbngqKSAgICAgICAgICAgIG9zPSdRTlgnOzsNCiAg ICAgICBwdzMyKikgICAgICAgICAgIG9zPSdQVzMyJzs7DQogICAgICAgcHR4KikgICAgICAgICAg ICBvcz0ncHR4Jzs7DQogICAgICAgcGxhbjkqKSAgICAgICAgICBvcz0nUGxhbiA5Jzs7DQogICAg ICAgb3NmKikgICAgICAgICAgICBvcz0nVHJ1NjQnOzsNCiAgICAgICBvczIqKSAgICAgICAgICAg IG9zPSdPUy8yJzs7DQogICAgICAgb3BlbmJzZCopICAgICAgICBvcz0nT3BlbkJTRCc7Ow0KICAg ICAgIG5zayopICAgICAgICAgICAgb3M9J05vblN0b3AgS2VybmVsJzs7DQogICAgICAgbm9uc3Rv cHV4KikgICAgICBvcz0nTm9uU3RvcC1VWCc7Ow0KICAgICAgIG5ldGJzZCotZ251KikgICAgb3M9 J0dOVS9OZXRCU0QnOzsgIyBOZXRCU0Qga2VybmVsK2xpYmMsIEdOVSB1c2VybGFuZA0KICAgICAg IG5ldGJzZCopICAgICAgICAgb3M9J05ldEJTRCc7Ow0KICAgICAgIG1pcmJzZCopICAgICAgICAg b3M9J01pckJTRCc7Ow0KICAgICAgIGtuZXRic2QqLWdudSkgICAgb3M9J0dOVS9rTmV0QlNEJzs7 ICMgTmV0QlNEIGtlcm5lbCwgR05VIGxpYmMrdXNlcmxhbmQNCiAgICAgICBrZnJlZWJzZCotZ251 KSAgIG9zPSdHTlUva0ZyZWVCU0QnOzsgIyBGcmVlQlNEIGtlcm5lbCwgR05VIGxpYmMrdXNlcmxh bmQNCiAgICAgICBtc2Rvc2RqZ3BwKikgICAgIG9zPSdESkdQUCc7Ow0KICAgICAgIG1wZWl4Kikg ICAgICAgICAgb3M9J01QRS9pWCc7Ow0KICAgICAgIG1pbnQqKSAgICAgICAgICAgb3M9J01pTlQn OzsNCiAgICAgICBtaW5ndyopICAgICAgICAgIG9zPSdNaW5HVyc7Ow0KICAgICAgIGx5bnhvcyop ICAgICAgICAgb3M9J0x5bnhPUyc7Ow0KICAgICAgIGxpbnV4KikgICAgICAgICAgb3M9J0dOVS9M aW51eCc7Ow0KICAgICAgIGhwdXgqKSAgICAgICAgICAgb3M9J0hQLVVYJzs7DQogICAgICAgaGl1 eCopICAgICAgICAgICBvcz0nSEktVVgnOzsNCiAgICAgICBnbnUqKSAgICAgICAgICAgIG9zPSdH TlUnOzsNCiAgICAgICBmcmVlYnNkKikgICAgICAgIG9zPSdGcmVlQlNEJzs7DQogICAgICAgZGd1 eCopICAgICAgICAgICBvcz0nREcvVVgnOzsNCiAgICAgICBic2RpKikgICAgICAgICAgIG9zPSdC U0QvT1MnOzsNCiAgICAgICBic2QqKSAgICAgICAgICAgIG9zPSdCU0QnOzsNCiAgICAgICBiZW9z KikgICAgICAgICAgIG9zPSdCZU9TJzs7DQogICAgICAgYXV4KikgICAgICAgICAgICBvcz0nQS9V WCc7Ow0KICAgICAgIGF0aGVvcyopICAgICAgICAgb3M9J0F0aGVPUyc7Ow0KICAgICAgIGFtaWdh b3MqKSAgICAgICAgb3M9J0FtaWdhIE9TJzs7DQogICAgICAgYWl4KikgICAgICAgICAgICBvcz0n QUlYJzs7DQoNCiAgICAgICAjIFRoZSBkZWZhdWx0IGhldXJpc3RpYyB0YWtlcyB0aGUgaW5pdGlh bCBhbHBoYWJldGljIHN0cmluZw0KICAgICAgICMgZnJvbSAkaG9zdF9vcywgYnV0IGNhcGl0YWxp emVzIGl0cyBmaXJzdCBsZXR0ZXIuDQogICAgICAgW0EtWmEtel0qKQ0KICAgICAgICAgb3M9YA0K ICAgICAgICAgICBleHByICJYJGhvc3Rfb3MiIDogJ1hcKFtBLVphLXpdXCknIHwgdHIgJ1thLXpd JyAnW0EtWl0nDQogICAgICAgICBgYA0KICAgICAgICAgICBleHByICJYJGhvc3Rfb3MiIDogJ1gu XChbQS1aYS16XSpcKScNCiAgICAgICAgIGANCiAgICAgICAgIDs7DQoNCiAgICAgICAjIElmICRo b3N0X29zIGRvZXMgbm90IHN0YXJ0IHdpdGggYW4gYWxwaGFiZXRpYyBzdHJpbmcsIHVzZSBpdCB1 bmNoYW5nZWQuDQogICAgICAgKikNCiAgICAgICAgIG9zPSRob3N0X29zOzsNCiAgICAgZXNhYw0K ICAgICBnbF9jdl9ob3N0X29wZXJhdGluZ19zeXN0ZW09JG9zDQpmaQ0KeyAkYXNfZWNobyAiJGFz X21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRnbF9jdl9ob3N0X29wZXJhdGluZ19z eXN0ZW0iID4mNQ0KJGFzX2VjaG8gIiRnbF9jdl9ob3N0X29wZXJhdGluZ19zeXN0ZW0iID4mNjsg fQ0KDQpjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GDQojZGVmaW5lIEhPU1RfT1BFUkFUSU5HX1NZ U1RFTSAiJGdsX2N2X2hvc3Rfb3BlcmF0aW5nX3N5c3RlbSINCl9BQ0VPRg0KDQoNCiAgIyBDb2Rl IGZyb20gbW9kdWxlIGhvc3RlbnQ6DQoNCiAgICAgICAgICAgICAgICAgIEhPU1RFTlRfTElCPQ0K ICBnbF9zYXZlZF9saWJzPSIkTElCUyINCiAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5v LSRMSU5FTk99OiBjaGVja2luZyBmb3IgbGlicmFyeSBjb250YWluaW5nIGdldGhvc3RieW5hbWUi ID4mNQ0KJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIGxpYnJhcnkgY29udGFpbmluZyBnZXRob3N0 YnluYW1lLi4uICIgPiY2OyB9DQppZiAke2FjX2N2X3NlYXJjaF9nZXRob3N0YnluYW1lKzp9IGZh bHNlOyB0aGVuIDoNCiAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYNCmVsc2UNCiAgYWNfZnVu Y19zZWFyY2hfc2F2ZV9MSUJTPSRMSUJTDQpjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25m dGVzdC4kYWNfZXh0DQovKiBlbmQgY29uZmRlZnMuaC4gICovDQoNCi8qIE92ZXJyaWRlIGFueSBH Q0MgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLg0KICAgVXNlIGNoYXIgYmVj YXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgR0NDDQogICBidWlsdGlu IGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLw0K I2lmZGVmIF9fY3BsdXNwbHVzDQpleHRlcm4gIkMiDQojZW5kaWYNCmNoYXIgZ2V0aG9zdGJ5bmFt ZSAoKTsNCmludA0KbWFpbiAoKQ0Kew0KcmV0dXJuIGdldGhvc3RieW5hbWUgKCk7DQogIDsNCiAg cmV0dXJuIDA7DQp9DQpfQUNFT0YNCmZvciBhY19saWIgaW4gJycgbnNsIG5ldHdvcmsgbmV0OyBk bw0KICBpZiB0ZXN0IC16ICIkYWNfbGliIjsgdGhlbg0KICAgIGFjX3Jlcz0ibm9uZSByZXF1aXJl ZCINCiAgZWxzZQ0KICAgIGFjX3Jlcz0tbCRhY19saWINCiAgICBMSUJTPSItbCRhY19saWIgICRh Y19mdW5jX3NlYXJjaF9zYXZlX0xJQlMiDQogIGZpDQogIGlmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRM SU5FTk8iOyB0aGVuIDoNCiAgYWNfY3Zfc2VhcmNoX2dldGhvc3RieW5hbWU9JGFjX3Jlcw0KZmkN CnJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXA0KICAgIGNvbmZ0 ZXN0JGFjX2V4ZWV4dA0KICBpZiAke2FjX2N2X3NlYXJjaF9nZXRob3N0YnluYW1lKzp9IGZhbHNl OyB0aGVuIDoNCiAgYnJlYWsNCmZpDQpkb25lDQppZiAke2FjX2N2X3NlYXJjaF9nZXRob3N0Ynlu YW1lKzp9IGZhbHNlOyB0aGVuIDoNCg0KZWxzZQ0KICBhY19jdl9zZWFyY2hfZ2V0aG9zdGJ5bmFt ZT1ubw0KZmkNCnJtIGNvbmZ0ZXN0LiRhY19leHQNCkxJQlM9JGFjX2Z1bmNfc2VhcmNoX3NhdmVf TElCUw0KZmkNCnsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0 OiAkYWNfY3Zfc2VhcmNoX2dldGhvc3RieW5hbWUiID4mNQ0KJGFzX2VjaG8gIiRhY19jdl9zZWFy Y2hfZ2V0aG9zdGJ5bmFtZSIgPiY2OyB9DQphY19yZXM9JGFjX2N2X3NlYXJjaF9nZXRob3N0Ynlu YW1lDQppZiB0ZXN0ICIkYWNfcmVzIiAhPSBubzsgdGhlbiA6DQogIHRlc3QgIiRhY19yZXMiID0g Im5vbmUgcmVxdWlyZWQiIHx8IExJQlM9IiRhY19yZXMgJExJQlMiDQogIGlmIHRlc3QgIiRhY19j dl9zZWFyY2hfZ2V0aG9zdGJ5bmFtZSIgIT0gIm5vbmUgcmVxdWlyZWQiOyB0aGVuDQogICAgICAg SE9TVEVOVF9MSUI9IiRhY19jdl9zZWFyY2hfZ2V0aG9zdGJ5bmFtZSINCiAgICAgZmkNCmZpDQoN CiAgTElCUz0iJGdsX3NhdmVkX2xpYnMiDQogIGlmIHRlc3QgLXogIiRIT1NURU5UX0xJQiI7IHRo ZW4NCiAgICBmb3IgYWNfZnVuYyBpbiBnZXRob3N0YnluYW1lDQpkbyA6DQogIGFjX2ZuX2NfY2hl Y2tfZnVuYyAiJExJTkVOTyIgImdldGhvc3RieW5hbWUiICJhY19jdl9mdW5jX2dldGhvc3RieW5h bWUiDQppZiB0ZXN0ICJ4JGFjX2N2X2Z1bmNfZ2V0aG9zdGJ5bmFtZSIgPSB4eWVzOyB0aGVuIDoN CiAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRg0KI2RlZmluZSBIQVZFX0dFVEhPU1RCWU5BTUUg MQ0KX0FDRU9GDQoNCmVsc2UNCg0KICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5v LSRMSU5FTk99OiBjaGVja2luZyBmb3IgZ2V0aG9zdGJ5bmFtZSBpbiB3aW5zb2NrMi5oIGFuZCAt bHdzMl8zMiIgPiY1DQokYXNfZWNob19uICJjaGVja2luZyBmb3IgZ2V0aG9zdGJ5bmFtZSBpbiB3 aW5zb2NrMi5oIGFuZCAtbHdzMl8zMi4uLiAiID4mNjsgfQ0KaWYgJHtnbF9jdl93MzJfZ2V0aG9z dGJ5bmFtZSs6fSBmYWxzZTsgdGhlbiA6DQogICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2DQpl bHNlDQogIGdsX2N2X3czMl9nZXRob3N0YnluYW1lPW5vDQogICAgICAgICBnbF9zYXZlX0xJQlM9 IiRMSUJTIg0KICAgICAgICAgTElCUz0iJExJQlMgLWx3czJfMzIiDQogICAgICAgICBjYXQgY29u ZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0DQovKiBlbmQgY29uZmRlZnMuaC4g ICovDQoNCiNpZmRlZiBIQVZFX1dJTlNPQ0syX0gNCiNpbmNsdWRlIDx3aW5zb2NrMi5oPg0KI2Vu ZGlmDQojaW5jbHVkZSA8c3RkZGVmLmg+DQoNCmludA0KbWFpbiAoKQ0Kew0KZ2V0aG9zdGJ5bmFt ZShOVUxMKTsNCiAgOw0KICByZXR1cm4gMDsNCn0NCl9BQ0VPRg0KaWYgYWNfZm5fY190cnlfbGlu ayAiJExJTkVOTyI7IHRoZW4gOg0KICBnbF9jdl93MzJfZ2V0aG9zdGJ5bmFtZT15ZXMNCmZpDQpy bSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwNCiAgICBjb25mdGVz dCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dA0KICAgICAgICAgTElCUz0iJGdsX3NhdmVfTElC UyINCg0KZmkNCnsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0 OiAkZ2xfY3ZfdzMyX2dldGhvc3RieW5hbWUiID4mNQ0KJGFzX2VjaG8gIiRnbF9jdl93MzJfZ2V0 aG9zdGJ5bmFtZSIgPiY2OyB9DQogICAgICBpZiB0ZXN0ICIkZ2xfY3ZfdzMyX2dldGhvc3RieW5h bWUiID0gInllcyI7IHRoZW4NCiAgICAgICAgSE9TVEVOVF9MSUI9Ii1sd3MyXzMyIg0KICAgICAg ZmkNCg0KZmkNCmRvbmUNCg0KICBmaQ0KDQoNCiAgIyBDb2RlIGZyb20gbW9kdWxlIGh1bWFuOg0K DQoNCg0KDQoNCg0KDQoNCg0KICBnbF9MSUJPQkpTPSIkZ2xfTElCT0JKUyBodW1hbi4kYWNfb2Jq ZXh0Ig0KDQoNCiAgICA6DQoNCiAgIyBDb2RlIGZyb20gbW9kdWxlIGktcmluZzoNCg0KDQoNCg0K DQoNCg0KDQoNCiAgZ2xfTElCT0JKUz0iJGdsX0xJQk9CSlMgaS1yaW5nLiRhY19vYmpleHQiDQoN Cg0KICAjIENvZGUgZnJvbSBtb2R1bGUgaWNvbnY6DQoNCg0KDQoNCiAgR05VTElCX0lDT05WPTEN Cg0KDQogICMgQ29kZSBmcm9tIG1vZHVsZSBpY29udi1oOg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoN Cg0KICAgICBpZiB0ZXN0ICRnbF9jdl9oYXZlX2luY2x1ZGVfbmV4dCA9IHllczsgdGhlbg0KICAg ICAgIGdsX2N2X25leHRfaWNvbnZfaD0nPCdpY29udi5oJz4nDQogICAgIGVsc2UNCiAgICAgICB7 ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGFic29sdXRl IG5hbWUgb2YgPGljb252Lmg+IiA+JjUNCiRhc19lY2hvX24gImNoZWNraW5nIGFic29sdXRlIG5h bWUgb2YgPGljb252Lmg+Li4uICIgPiY2OyB9DQppZiAke2dsX2N2X25leHRfaWNvbnZfaCs6fSBm YWxzZTsgdGhlbiA6DQogICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2DQplbHNlDQoNCiAgICAg ICAgICAgICBpZiB0ZXN0ICRhY19jdl9oZWFkZXJfaWNvbnZfaCA9IHllczsgdGhlbg0KDQoNCiAg ICAgICAgICAgICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQN Ci8qIGVuZCBjb25mZGVmcy5oLiAgKi8NCiNpbmNsdWRlIDxpY29udi5oPg0KDQpfQUNFT0YNCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGNhc2UgIiRob3N0X29zIiBpbg0KICAgICAgICAgICAgICAgICBhaXgqKSBnbF9hYnNuYW1l X2NwcD0iJGFjX2NwcCAtQyIgOzsNCiAgICAgICAgICAgICAgICAgKikgICAgZ2xfYWJzbmFtZV9j cHA9IiRhY19jcHAiIDs7DQogICAgICAgICAgICAgICBlc2FjDQogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbF9jdl9uZXh0X2ljb252 X2g9JyInYChldmFsICIkZ2xfYWJzbmFtZV9jcHAgY29uZnRlc3QuJGFjX2V4dCIpIDI+JjUgfA0K ICAgICAgICAgICAgICAgICAgc2VkIC1uICdcIy9pY29udi5oI3sNCiAgICAgICAgICAgICAgICAg ICAgcyMuKiJcKC4qL2ljb252LmhcKSIuKiNcMSMNCiAgICAgICAgICAgICAgICAgICAgcyNeL1te L10jLy8mIw0KICAgICAgICAgICAgICAgICAgICBwDQogICAgICAgICAgICAgICAgICAgIHENCiAg ICAgICAgICAgICAgICAgIH0nYCciJw0KICAgICAgICAgIGVsc2UNCiAgICAgICAgICAgICAgIGds X2N2X25leHRfaWNvbnZfaD0nPCdpY29udi5oJz4nDQogICAgICAgICAgICAgZmkNCg0KDQpmaQ0K eyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRnbF9jdl9u ZXh0X2ljb252X2giID4mNQ0KJGFzX2VjaG8gIiRnbF9jdl9uZXh0X2ljb252X2giID4mNjsgfQ0K ICAgICBmaQ0KICAgICBORVhUX0lDT05WX0g9JGdsX2N2X25leHRfaWNvbnZfaA0KDQogICAgIGlm IHRlc3QgJGdsX2N2X2hhdmVfaW5jbHVkZV9uZXh0ID0geWVzIHx8IHRlc3QgJGdsX2N2X2hhdmVf aW5jbHVkZV9uZXh0ID0gYnVnZ3k7IHRoZW4NCiAgICAgICAjIElOQ0xVREVfTkVYVF9BU19GSVJT VF9ESVJFQ1RJVkU9J2luY2x1ZGVfbmV4dCcNCiAgICAgICBnbF9uZXh0X2FzX2ZpcnN0X2RpcmVj dGl2ZT0nPCdpY29udi5oJz4nDQogICAgIGVsc2UNCiAgICAgICAjIElOQ0xVREVfTkVYVF9BU19G SVJTVF9ESVJFQ1RJVkU9J2luY2x1ZGUnDQogICAgICAgZ2xfbmV4dF9hc19maXJzdF9kaXJlY3Rp dmU9JGdsX2N2X25leHRfaWNvbnZfaA0KICAgICBmaQ0KICAgICBORVhUX0FTX0ZJUlNUX0RJUkVD VElWRV9JQ09OVl9IPSRnbF9uZXh0X2FzX2ZpcnN0X2RpcmVjdGl2ZQ0KDQoNCg0KDQoNCiAgIyBD b2RlIGZyb20gbW9kdWxlIGljb252X29wZW46DQoNCg0KDQoNCiAgaWYgdGVzdCAiJGFtX2N2X2Z1 bmNfaWNvbnYiID0geWVzOyB0aGVuDQoNCg0KICBJQ09OVl9IPSdpY29udi5oJw0KICAgaWYgdGVz dCAtbiAiJElDT05WX0giOyB0aGVuDQogIEdMX0dFTkVSQVRFX0lDT05WX0hfVFJVRT0NCiAgR0xf R0VORVJBVEVfSUNPTlZfSF9GQUxTRT0nIycNCmVsc2UNCiAgR0xfR0VORVJBVEVfSUNPTlZfSF9U UlVFPScjJw0KICBHTF9HRU5FUkFURV9JQ09OVl9IX0ZBTFNFPQ0KZmkNCg0KDQogICAgICAgICAg ICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0DQovKiBlbmQgY29u ZmRlZnMuaC4gICovDQoNCiAgICAgICNpbmNsdWRlIDxpY29udi5oPg0KICAgICAgI2lmIGRlZmlu ZWQgX0xJQklDT05WX1ZFUlNJT04gfHwgKGRlZmluZWQgX19HTElCQ19fICYmICFkZWZpbmVkIF9f VUNMSUJDX18pDQogICAgICAgZ251X2ljb252DQogICAgICAjZW5kaWYNCg0KX0FDRU9GDQppZiAo ZXZhbCAiJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0IikgMj4mNSB8DQogICRFR1JFUCAiZ251X2lj b252IiA+L2Rldi9udWxsIDI+JjE7IHRoZW4gOg0KICBnbF9mdW5jX2ljb252X2dudT15ZXMNCmVs c2UNCiAgZ2xfZnVuY19pY29udl9nbnU9bm8NCmZpDQpybSAtZiBjb25mdGVzdCoNCg0KICAgIGlm IHRlc3QgJGdsX2Z1bmNfaWNvbnZfZ251ID0gbm87IHRoZW4NCiAgICAgIGljb252X2ZsYXZvcj0N CiAgICAgIGNhc2UgIiRob3N0X29zIiBpbg0KICAgICAgICBhaXgqKSAgICAgaWNvbnZfZmxhdm9y PUlDT05WX0ZMQVZPUl9BSVggOzsNCiAgICAgICAgaXJpeCopICAgIGljb252X2ZsYXZvcj1JQ09O Vl9GTEFWT1JfSVJJWCA7Ow0KICAgICAgICBocHV4KikgICAgaWNvbnZfZmxhdm9yPUlDT05WX0ZM QVZPUl9IUFVYIDs7DQogICAgICAgIG9zZiopICAgICBpY29udl9mbGF2b3I9SUNPTlZfRkxBVk9S X09TRiA7Ow0KICAgICAgICBzb2xhcmlzKikgaWNvbnZfZmxhdm9yPUlDT05WX0ZMQVZPUl9TT0xB UklTIDs7DQogICAgICBlc2FjDQogICAgICBpZiB0ZXN0IC1uICIkaWNvbnZfZmxhdm9yIjsgdGhl bg0KDQpjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GDQojZGVmaW5lIElDT05WX0ZMQVZPUiAkaWNv bnZfZmxhdm9yDQpfQUNFT0YNCg0KDQoNCg0KICBJQ09OVl9IPSdpY29udi5oJw0KICAgaWYgdGVz dCAtbiAiJElDT05WX0giOyB0aGVuDQogIEdMX0dFTkVSQVRFX0lDT05WX0hfVFJVRT0NCiAgR0xf R0VORVJBVEVfSUNPTlZfSF9GQUxTRT0nIycNCmVsc2UNCiAgR0xfR0VORVJBVEVfSUNPTlZfSF9U UlVFPScjJw0KICBHTF9HRU5FUkFURV9JQ09OVl9IX0ZBTFNFPQ0KZmkNCg0KDQogIFJFUExBQ0Vf SUNPTlZfT1BFTj0xDQoNCg0KDQoNCg0KDQoNCg0KICBnbF9MSUJPQkpTPSIkZ2xfTElCT0JKUyBp Y29udl9vcGVuLiRhY19vYmpleHQiDQoNCg0KICAgICAgZmkNCiAgICBmaQ0KICBmaQ0KDQogICMg Q29kZSBmcm9tIG1vZHVsZSBpZGNhY2hlOg0KDQoNCg0KDQoNCg0KDQoNCg0KICBnbF9MSUJPQkpT PSIkZ2xfTElCT0JKUyBpZGNhY2hlLiRhY19vYmpleHQiDQoNCg0KICAjIENvZGUgZnJvbSBtb2R1 bGUgaWdub3JlLXZhbHVlOg0KDQogICMgQ29kZSBmcm9tIG1vZHVsZSBpbmNsdWRlX25leHQ6DQog ICMgQ29kZSBmcm9tIG1vZHVsZSBpbmV0X250b3A6DQoNCg0KDQoNCiAgICA6DQoNCg0KICAgICAg Z2xfc2F2ZV9MSUJTPSRMSUJTDQogIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElO RU5PfTogY2hlY2tpbmcgZm9yIGxpYnJhcnkgY29udGFpbmluZyBpbmV0X250b3AiID4mNQ0KJGFz X2VjaG9fbiAiY2hlY2tpbmcgZm9yIGxpYnJhcnkgY29udGFpbmluZyBpbmV0X250b3AuLi4gIiA+ JjY7IH0NCmlmICR7YWNfY3Zfc2VhcmNoX2luZXRfbnRvcCs6fSBmYWxzZTsgdGhlbiA6DQogICRh c19lY2hvX24gIihjYWNoZWQpICIgPiY2DQplbHNlDQogIGFjX2Z1bmNfc2VhcmNoX3NhdmVfTElC Uz0kTElCUw0KY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dA0KLyog ZW5kIGNvbmZkZWZzLmguICAqLw0KDQovKiBPdmVycmlkZSBhbnkgR0NDIGludGVybmFsIHByb3Rv dHlwZSB0byBhdm9pZCBhbiBlcnJvci4NCiAgIFVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1h dGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIEdDQw0KICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJn dW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8NCiNpZmRlZiBfX2NwbHVzcGx1 cw0KZXh0ZXJuICJDIg0KI2VuZGlmDQpjaGFyIGluZXRfbnRvcCAoKTsNCmludA0KbWFpbiAoKQ0K ew0KcmV0dXJuIGluZXRfbnRvcCAoKTsNCiAgOw0KICByZXR1cm4gMDsNCn0NCl9BQ0VPRg0KZm9y IGFjX2xpYiBpbiAnJyBuc2w7IGRvDQogIGlmIHRlc3QgLXogIiRhY19saWIiOyB0aGVuDQogICAg YWNfcmVzPSJub25lIHJlcXVpcmVkIg0KICBlbHNlDQogICAgYWNfcmVzPS1sJGFjX2xpYg0KICAg IExJQlM9Ii1sJGFjX2xpYiAgJGFjX2Z1bmNfc2VhcmNoX3NhdmVfTElCUyINCiAgZmkNCiAgaWYg YWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOg0KICBhY19jdl9zZWFyY2hfaW5ldF9u dG9wPSRhY19yZXMNCmZpDQpybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2Jq ZXh0IFwNCiAgICBjb25mdGVzdCRhY19leGVleHQNCiAgaWYgJHthY19jdl9zZWFyY2hfaW5ldF9u dG9wKzp9IGZhbHNlOyB0aGVuIDoNCiAgYnJlYWsNCmZpDQpkb25lDQppZiAke2FjX2N2X3NlYXJj aF9pbmV0X250b3ArOn0gZmFsc2U7IHRoZW4gOg0KDQplbHNlDQogIGFjX2N2X3NlYXJjaF9pbmV0 X250b3A9bm8NCmZpDQpybSBjb25mdGVzdC4kYWNfZXh0DQpMSUJTPSRhY19mdW5jX3NlYXJjaF9z YXZlX0xJQlMNCmZpDQp7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJl c3VsdDogJGFjX2N2X3NlYXJjaF9pbmV0X250b3AiID4mNQ0KJGFzX2VjaG8gIiRhY19jdl9zZWFy Y2hfaW5ldF9udG9wIiA+JjY7IH0NCmFjX3Jlcz0kYWNfY3Zfc2VhcmNoX2luZXRfbnRvcA0KaWYg dGVzdCAiJGFjX3JlcyIgIT0gbm87IHRoZW4gOg0KICB0ZXN0ICIkYWNfcmVzIiA9ICJub25lIHJl cXVpcmVkIiB8fCBMSUJTPSIkYWNfcmVzICRMSUJTIg0KDQplbHNlDQoNCg0KDQoNCg0KDQoNCg0K ICBmb3IgYWNfZnVuYyBpbiBpbmV0X250b3ANCmRvIDoNCiAgYWNfZm5fY19jaGVja19mdW5jICIk TElORU5PIiAiaW5ldF9udG9wIiAiYWNfY3ZfZnVuY19pbmV0X250b3AiDQppZiB0ZXN0ICJ4JGFj X2N2X2Z1bmNfaW5ldF9udG9wIiA9IHh5ZXM7IHRoZW4gOg0KICBjYXQgPj5jb25mZGVmcy5oIDw8 X0FDRU9GDQojZGVmaW5lIEhBVkVfSU5FVF9OVE9QIDENCl9BQ0VPRg0KDQplbHNlDQoNCiAgICBn bF9MSUJPQkpTPSIkZ2xfTElCT0JKUyAkYWNfZnVuYy4kYWNfb2JqZXh0Ig0KDQpmaQ0KZG9uZQ0K DQoNCmZpDQoNCiAgTElCUz0kZ2xfc2F2ZV9MSUJTDQogIElORVRfTlRPUF9MSUI9DQogIGlmIHRl c3QgIiRhY19jdl9zZWFyY2hfaW5ldF9udG9wIiAhPSAibm8iICYmDQogICAgIHRlc3QgIiRhY19j dl9zZWFyY2hfaW5ldF9udG9wIiAhPSAibm9uZSByZXF1aXJlZCI7IHRoZW4NCiAgICBJTkVUX05U T1BfTElCPSIkYWNfY3Zfc2VhcmNoX2luZXRfbnRvcCINCiAgZmkNCg0KDQoNCg0KICBhY19mbl9j X2NoZWNrX2RlY2wgIiRMSU5FTk8iICJpbmV0X250b3AiICJhY19jdl9oYXZlX2RlY2xfaW5ldF9u dG9wIiAiI2luY2x1ZGUgPGFycGEvaW5ldC5oPg0KICAgICAjaWYgSEFWRV9ORVREQl9IDQogICAg ICMgaW5jbHVkZSA8bmV0ZGIuaD4NCiAgICAgI2VuZGlmDQoNCiINCmlmIHRlc3QgIngkYWNfY3Zf aGF2ZV9kZWNsX2luZXRfbnRvcCIgPSB4eWVzOyB0aGVuIDoNCiAgYWNfaGF2ZV9kZWNsPTENCmVs c2UNCiAgYWNfaGF2ZV9kZWNsPTANCmZpDQoNCmNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YNCiNk ZWZpbmUgSEFWRV9ERUNMX0lORVRfTlRPUCAkYWNfaGF2ZV9kZWNsDQpfQUNFT0YNCg0KICBpZiB0 ZXN0ICRhY19jdl9oYXZlX2RlY2xfaW5ldF9udG9wID0gbm87IHRoZW4NCiAgICBIQVZFX0RFQ0xf SU5FVF9OVE9QPTANCiAgZmkNCg0KDQoNCg0KDQoNCg0KICBHTlVMSUJfSU5FVF9OVE9QPTENCg0K DQogICMgQ29kZSBmcm9tIG1vZHVsZSBpbmxpbmU6DQoNCg0KICB7ICRhc19lY2hvICIkYXNfbWU6 JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgdGhlIGNvbXBpbGVyIGdlbmVy YWxseSByZXNwZWN0cyBpbmxpbmUiID4mNQ0KJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciB0 aGUgY29tcGlsZXIgZ2VuZXJhbGx5IHJlc3BlY3RzIGlubGluZS4uLiAiID4mNjsgfQ0KaWYgJHtn bF9jdl9jX2lubGluZV9lZmZlY3RpdmUrOn0gZmFsc2U7IHRoZW4gOg0KICAkYXNfZWNob19uICIo Y2FjaGVkKSAiID4mNg0KZWxzZQ0KICBpZiB0ZXN0ICRhY19jdl9jX2lubGluZSA9IG5vOyB0aGVu DQogICAgICAgZ2xfY3ZfY19pbmxpbmVfZWZmZWN0aXZlPW5vDQogICAgIGVsc2UNCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNF T0YgPmNvbmZ0ZXN0LiRhY19leHQNCi8qIGVuZCBjb25mZGVmcy5oLiAgKi8NCg0KaW50DQptYWlu ICgpDQp7DQojaWZkZWYgX19OT19JTkxJTkVfXw0KICAgICAgICAgICAgICAgI2Vycm9yICJpbmxp bmUgaXMgbm90IGVmZmVjdGl2ZSINCiAgICAgICAgICAgICAjZW5kaWYNCiAgOw0KICByZXR1cm4g MDsNCn0NCl9BQ0VPRg0KaWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOg0K ICBnbF9jdl9jX2lubGluZV9lZmZlY3RpdmU9eWVzDQplbHNlDQogIGdsX2N2X2NfaW5saW5lX2Vm ZmVjdGl2ZT1ubw0KZmkNCnJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpl eHQgY29uZnRlc3QuJGFjX2V4dA0KICAgICBmaQ0KDQpmaQ0KeyAkYXNfZWNobyAiJGFzX21lOiR7 YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRnbF9jdl9jX2lubGluZV9lZmZlY3RpdmUiID4m NQ0KJGFzX2VjaG8gIiRnbF9jdl9jX2lubGluZV9lZmZlY3RpdmUiID4mNjsgfQ0KICBpZiB0ZXN0 ICRnbF9jdl9jX2lubGluZV9lZmZlY3RpdmUgPSB5ZXM7IHRoZW4NCg0KJGFzX2VjaG8gIiNkZWZp bmUgSEFWRV9JTkxJTkUgMSIgPj5jb25mZGVmcy5oDQoNCiAgZmkNCg0KICAjIENvZGUgZnJvbSBt b2R1bGUgaW5vLW1hcDoNCiAgIyBDb2RlIGZyb20gbW9kdWxlIGludHByb3BzOg0KICAjIENvZGUg ZnJvbSBtb2R1bGUgaW50dG9zdHI6DQoNCg0KDQogIDoNCg0KICA6DQogIDoNCiAgOg0KICA6DQoN CiAgIyBDb2RlIGZyb20gbW9kdWxlIGludHR5cGVzOg0KDQoNCg0KDQoNCg0KDQoNCg0KICAgICAg ICAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5n IHdoZXRoZXIgaW50dHlwZXMuaCBjb25mb3JtcyB0byBDOTkiID4mNQ0KJGFzX2VjaG9fbiAiY2hl Y2tpbmcgd2hldGhlciBpbnR0eXBlcy5oIGNvbmZvcm1zIHRvIEM5OS4uLiAiID4mNjsgfQ0KaWYg JHtnbF9jdl9oZWFkZXJfd29ya2luZ19pbnR0eXBlc19oKzp9IGZhbHNlOyB0aGVuIDoNCiAgJGFz X2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYNCmVsc2UNCiAgZ2xfY3ZfaGVhZGVyX3dvcmtpbmdfaW50 dHlwZXNfaD1ubw0KICAgICBpZiB0ZXN0ICIkZ2xfY3ZfaGVhZGVyX3dvcmtpbmdfc3RkaW50X2gi ID0geWVzIFwNCiAgICAgICAgJiYgdGVzdCAkYWNfY3ZfaGVhZGVyX2ludHR5cGVzX2ggPSB5ZXMg XA0KICAgICAgICAmJiB0ZXN0ICIkYWNfY3ZfaGF2ZV9kZWNsX2ltYXhhYnMiID0geWVzIFwNCiAg ICAgICAgJiYgdGVzdCAiJGFjX2N2X2hhdmVfZGVjbF9pbWF4ZGl2IiA9IHllcyBcDQogICAgICAg ICYmIHRlc3QgIiRhY19jdl9oYXZlX2RlY2xfc3RydG9pbWF4IiA9IHllcyBcDQogICAgICAgICYm IHRlc3QgIiRhY19jdl9oYXZlX2RlY2xfc3RydG91bWF4IiA9IHllczsgdGhlbg0KICAgICAgIGNh dCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQNCi8qIGVuZCBjb25mZGVm cy5oLiAgKi8NCg0KDQojaW5jbHVkZSA8c3RkZGVmLmg+DQojZGVmaW5lIF9fU1REQ19MSU1JVF9N QUNST1MgMSAvKiB0byBtYWtlIGl0IHdvcmsgYWxzbyBpbiBDKysgbW9kZSAqLw0KI2RlZmluZSBf X1NURENfQ09OU1RBTlRfTUFDUk9TIDEgLyogdG8gbWFrZSBpdCB3b3JrIGFsc28gaW4gQysrIG1v ZGUgKi8NCiNkZWZpbmUgX19TVERDX0ZPUk1BVF9NQUNST1MgMSAvKiB0byBtYWtlIGl0IHdvcmsg YWxzbyBpbiBDKysgbW9kZSAqLw0KI2RlZmluZSBfR0xfSlVTVF9JTkNMVURFX1NZU1RFTV9JTlRU WVBFU19IIC8qIHdvcmsgaWYgYnVpbGQgaXNuJ3QgY2xlYW4gKi8NCiNpbmNsdWRlIDxpbnR0eXBl cy5oPg0KDQovKiBObyBuZWVkIHRvIGR1cGxpY2F0ZSB0aGUgdGVzdHMgb2Ygc3RkaW50Lm00OyB0 aGV5IGFyZSBzdWJzdW1lZCBieQ0KICAgJGdsX2N2X2hlYWRlcl93b3JraW5nX3N0ZGludF9oID0g eWVzLiAgKi8NCg0KLyogVGVzdHMgZm9yIG1hY3JvcyBzdXBwb3NlZCB0byBiZSBkZWZpbmVkIGlu IGludHR5cGVzLmguICAqLw0KDQpjb25zdCBjaGFyICprID0gLyogaW1wbGljaXQgc3RyaW5nIGNv bmNhdGVuYXRpb24gKi8NCiNpZmRlZiBJTlQ4X01BWA0KICBQUklkOCBQUklpOA0KI2VuZGlmDQoj aWZkZWYgVUlOVDhfTUFYDQogIFBSSW84IFBSSXU4IFBSSXg4IFBSSVg4DQojZW5kaWYNCiNpZmRl ZiBJTlQxNl9NQVgNCiAgUFJJZDE2IFBSSWkxNg0KI2VuZGlmDQojaWZkZWYgVUlOVDE2X01BWA0K ICBQUklvMTYgUFJJdTE2IFBSSXgxNiBQUklYMTYNCiNlbmRpZg0KI2lmZGVmIElOVDMyX01BWA0K ICBQUklkMzIgUFJJaTMyDQojZW5kaWYNCiNpZmRlZiBVSU5UMzJfTUFYDQogIFBSSW8zMiBQUkl1 MzIgUFJJeDMyIFBSSVgzMg0KI2VuZGlmDQojaWZkZWYgSU5UNjRfTUFYDQogIFBSSWQ2NCBQUklp NjQNCiNlbmRpZg0KI2lmZGVmIFVJTlQ2NF9NQVgNCiAgUFJJbzY0IFBSSXU2NCBQUkl4NjQgUFJJ WDY0DQojZW5kaWYNCiAgUFJJZExFQVNUOCBQUklpTEVBU1Q4IFBSSW9MRUFTVDggUFJJdUxFQVNU OCBQUkl4TEVBU1Q4IFBSSVhMRUFTVDgNCiAgUFJJZExFQVNUMTYgUFJJaUxFQVNUMTYgUFJJb0xF QVNUMTYgUFJJdUxFQVNUMTYgUFJJeExFQVNUMTYgUFJJWExFQVNUMTYNCiAgUFJJZExFQVNUMzIg UFJJaUxFQVNUMzIgUFJJb0xFQVNUMzIgUFJJdUxFQVNUMzIgUFJJeExFQVNUMzIgUFJJWExFQVNU MzINCiAgUFJJZExFQVNUNjQgUFJJaUxFQVNUNjQNCiAgUFJJb0xFQVNUNjQgUFJJdUxFQVNUNjQg UFJJeExFQVNUNjQgUFJJWExFQVNUNjQNCiAgUFJJZEZBU1Q4IFBSSWlGQVNUOCBQUklvRkFTVDgg UFJJdUZBU1Q4IFBSSXhGQVNUOCBQUklYRkFTVDgNCiAgUFJJZEZBU1QxNiBQUklpRkFTVDE2IFBS SW9GQVNUMTYgUFJJdUZBU1QxNiBQUkl4RkFTVDE2IFBSSVhGQVNUMTYNCiAgUFJJZEZBU1QzMiBQ UklpRkFTVDMyIFBSSW9GQVNUMzIgUFJJdUZBU1QzMiBQUkl4RkFTVDMyIFBSSVhGQVNUMzINCiAg UFJJZEZBU1Q2NCBQUklpRkFTVDY0DQogIFBSSW9GQVNUNjQgUFJJdUZBU1Q2NCBQUkl4RkFTVDY0 IFBSSVhGQVNUNjQNCiAgUFJJZE1BWCBQUklpTUFYIFBSSW9NQVggUFJJdU1BWCBQUkl4TUFYIFBS SVhNQVgNCiNpZmRlZiBJTlRQVFJfTUFYDQogIFBSSWRQVFIgUFJJaVBUUg0KI2VuZGlmDQojaWZk ZWYgVUlOVFBUUl9NQVgNCiAgUFJJb1BUUiBQUkl1UFRSIFBSSXhQVFIgUFJJWFBUUg0KI2VuZGlm DQogIDsNCmNvbnN0IGNoYXIgKmwgPSAvKiBpbXBsaWNpdCBzdHJpbmcgY29uY2F0ZW5hdGlvbiAq Lw0KI2lmZGVmIElOVDhfTUFYDQogIFNDTmQ4IFNDTmk4DQojZW5kaWYNCiNpZmRlZiBVSU5UOF9N QVgNCiAgU0NObzggU0NOdTggU0NOeDgNCiNlbmRpZg0KI2lmZGVmIElOVDE2X01BWA0KICBTQ05k MTYgU0NOaTE2DQojZW5kaWYNCiNpZmRlZiBVSU5UMTZfTUFYDQogIFNDTm8xNiBTQ051MTYgU0NO eDE2DQojZW5kaWYNCiNpZmRlZiBJTlQzMl9NQVgNCiAgU0NOZDMyIFNDTmkzMg0KI2VuZGlmDQoj aWZkZWYgVUlOVDMyX01BWA0KICBTQ05vMzIgU0NOdTMyIFNDTngzMg0KI2VuZGlmDQojaWZkZWYg SU5UNjRfTUFYDQogIFNDTmQ2NCBTQ05pNjQNCiNlbmRpZg0KI2lmZGVmIFVJTlQ2NF9NQVgNCiAg U0NObzY0IFNDTnU2NCBTQ054NjQNCiNlbmRpZg0KICBTQ05kTEVBU1Q4IFNDTmlMRUFTVDggU0NO b0xFQVNUOCBTQ051TEVBU1Q4IFNDTnhMRUFTVDgNCiAgU0NOZExFQVNUMTYgU0NOaUxFQVNUMTYg U0NOb0xFQVNUMTYgU0NOdUxFQVNUMTYgU0NOeExFQVNUMTYNCiAgU0NOZExFQVNUMzIgU0NOaUxF QVNUMzIgU0NOb0xFQVNUMzIgU0NOdUxFQVNUMzIgU0NOeExFQVNUMzINCiAgU0NOZExFQVNUNjQg U0NOaUxFQVNUNjQNCiAgU0NOb0xFQVNUNjQgU0NOdUxFQVNUNjQgU0NOeExFQVNUNjQNCiAgU0NO ZEZBU1Q4IFNDTmlGQVNUOCBTQ05vRkFTVDggU0NOdUZBU1Q4IFNDTnhGQVNUOA0KICBTQ05kRkFT VDE2IFNDTmlGQVNUMTYgU0NOb0ZBU1QxNiBTQ051RkFTVDE2IFNDTnhGQVNUMTYNCiAgU0NOZEZB U1QzMiBTQ05pRkFTVDMyIFNDTm9GQVNUMzIgU0NOdUZBU1QzMiBTQ054RkFTVDMyDQogIFNDTmRG QVNUNjQgU0NOaUZBU1Q2NA0KICBTQ05vRkFTVDY0IFNDTnVGQVNUNjQgU0NOeEZBU1Q2NA0KICBT Q05kTUFYIFNDTmlNQVggU0NOb01BWCBTQ051TUFYIFNDTnhNQVgNCiNpZmRlZiBJTlRQVFJfTUFY DQogIFNDTmRQVFIgU0NOaVBUUg0KI2VuZGlmDQojaWZkZWYgVUlOVFBUUl9NQVgNCiAgU0NOb1BU UiBTQ051UFRSIFNDTnhQVFINCiNlbmRpZg0KICA7DQoNCmludA0KbWFpbiAoKQ0Kew0KDQogIDsN CiAgcmV0dXJuIDA7DQp9DQpfQUNFT0YNCmlmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8i OyB0aGVuIDoNCiAgZ2xfY3ZfaGVhZGVyX3dvcmtpbmdfaW50dHlwZXNfaD15ZXMNCmZpDQpybSAt ZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQN CiAgICAgZmkNCmZpDQp7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJl c3VsdDogJGdsX2N2X2hlYWRlcl93b3JraW5nX2ludHR5cGVzX2giID4mNQ0KJGFzX2VjaG8gIiRn bF9jdl9oZWFkZXJfd29ya2luZ19pbnR0eXBlc19oIiA+JjY7IH0NCg0KDQoNCg0KDQoNCg0KDQoN Cg0KDQogICAgIGlmIHRlc3QgJGdsX2N2X2hhdmVfaW5jbHVkZV9uZXh0ID0geWVzOyB0aGVuDQog ICAgICAgZ2xfY3ZfbmV4dF9pbnR0eXBlc19oPSc8J2ludHR5cGVzLmgnPicNCiAgICAgZWxzZQ0K ICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcg YWJzb2x1dGUgbmFtZSBvZiA8aW50dHlwZXMuaD4iID4mNQ0KJGFzX2VjaG9fbiAiY2hlY2tpbmcg YWJzb2x1dGUgbmFtZSBvZiA8aW50dHlwZXMuaD4uLi4gIiA+JjY7IH0NCmlmICR7Z2xfY3ZfbmV4 dF9pbnR0eXBlc19oKzp9IGZhbHNlOyB0aGVuIDoNCiAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+ JjYNCmVsc2UNCg0KICAgICAgICAgICAgIGlmIHRlc3QgJGFjX2N2X2hlYWRlcl9pbnR0eXBlc19o ID0geWVzOyB0aGVuDQoNCg0KICAgICAgICAgICAgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VP RiA+Y29uZnRlc3QuJGFjX2V4dA0KLyogZW5kIGNvbmZkZWZzLmguICAqLw0KI2luY2x1ZGUgPGlu dHR5cGVzLmg+DQoNCl9BQ0VPRg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAiJGhvc3Rfb3MiIGluDQogICAgICAgICAg ICAgICAgIGFpeCopIGdsX2Fic25hbWVfY3BwPSIkYWNfY3BwIC1DIiA7Ow0KICAgICAgICAgICAg ICAgICAqKSAgICBnbF9hYnNuYW1lX2NwcD0iJGFjX2NwcCIgOzsNCiAgICAgICAgICAgICAgIGVz YWMNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGdsX2N2X25leHRfaW50dHlwZXNfaD0nIidgKGV2YWwgIiRnbF9hYnNuYW1lX2NwcCBj b25mdGVzdC4kYWNfZXh0IikgMj4mNSB8DQogICAgICAgICAgICAgICAgICBzZWQgLW4gJ1wjL2lu dHR5cGVzLmgjew0KICAgICAgICAgICAgICAgICAgICBzIy4qIlwoLiovaW50dHlwZXMuaFwpIi4q I1wxIw0KICAgICAgICAgICAgICAgICAgICBzI14vW14vXSMvLyYjDQogICAgICAgICAgICAgICAg ICAgIHANCiAgICAgICAgICAgICAgICAgICAgcQ0KICAgICAgICAgICAgICAgICAgfSdgJyInDQog ICAgICAgICAgZWxzZQ0KICAgICAgICAgICAgICAgZ2xfY3ZfbmV4dF9pbnR0eXBlc19oPSc8J2lu dHR5cGVzLmgnPicNCiAgICAgICAgICAgICBmaQ0KDQoNCmZpDQp7ICRhc19lY2hvICIkYXNfbWU6 JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGdsX2N2X25leHRfaW50dHlwZXNfaCIgPiY1 DQokYXNfZWNobyAiJGdsX2N2X25leHRfaW50dHlwZXNfaCIgPiY2OyB9DQogICAgIGZpDQogICAg IE5FWFRfSU5UVFlQRVNfSD0kZ2xfY3ZfbmV4dF9pbnR0eXBlc19oDQoNCiAgICAgaWYgdGVzdCAk Z2xfY3ZfaGF2ZV9pbmNsdWRlX25leHQgPSB5ZXMgfHwgdGVzdCAkZ2xfY3ZfaGF2ZV9pbmNsdWRl X25leHQgPSBidWdneTsgdGhlbg0KICAgICAgICMgSU5DTFVERV9ORVhUX0FTX0ZJUlNUX0RJUkVD VElWRT0naW5jbHVkZV9uZXh0Jw0KICAgICAgIGdsX25leHRfYXNfZmlyc3RfZGlyZWN0aXZlPSc8 J2ludHR5cGVzLmgnPicNCiAgICAgZWxzZQ0KICAgICAgICMgSU5DTFVERV9ORVhUX0FTX0ZJUlNU X0RJUkVDVElWRT0naW5jbHVkZScNCiAgICAgICBnbF9uZXh0X2FzX2ZpcnN0X2RpcmVjdGl2ZT0k Z2xfY3ZfbmV4dF9pbnR0eXBlc19oDQogICAgIGZpDQogICAgIE5FWFRfQVNfRklSU1RfRElSRUNU SVZFX0lOVFRZUEVTX0g9JGdsX25leHRfYXNfZmlyc3RfZGlyZWN0aXZlDQoNCg0KDQoNCg0KDQoN Cg0KJGFzX2VjaG8gIiNkZWZpbmUgR0xfVFJJR0dFUl9TVERDX0xJTUlUX01BQ1JPUyAxIiA+PmNv bmZkZWZzLmgNCg0KDQoNCiAgUFJJUFRSX1BSRUZJWD0NCiAgaWYgdGVzdCAtbiAiJFNURElOVF9I IjsgdGhlbg0KICAgICAgICBQUklQVFJfUFJFRklYPScibCInDQogIGVsc2UNCiAgICAgICAgZm9y IGdscGZ4IGluICcnIGwgbGwgSTY0OyBkbw0KICAgICAgY2FzZSAkZ2xwZnggaW4NCiAgICAgICAg JycpICBnbHR5cGUxPSdpbnQnOzsNCiAgICAgICAgbCkgICBnbHR5cGUxPSdsb25nIGludCc7Ow0K ICAgICAgICBsbCkgIGdsdHlwZTE9J2xvbmcgbG9uZyBpbnQnOzsNCiAgICAgICAgSTY0KSBnbHR5 cGUxPSdfX2ludDY0Jzs7DQogICAgICBlc2FjDQogICAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FD RU9GID5jb25mdGVzdC4kYWNfZXh0DQovKiBlbmQgY29uZmRlZnMuaC4gICovDQojaW5jbHVkZSA8 c3RkaW50Lmg+DQogICAgICAgICAgIGV4dGVybiBpbnRwdHJfdCBmb287DQogICAgICAgICAgIGV4 dGVybiAkZ2x0eXBlMSBmb287DQppbnQNCm1haW4gKCkNCnsNCg0KICA7DQogIHJldHVybiAwOw0K fQ0KX0FDRU9GDQppZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6DQogIFBS SVBUUl9QUkVGSVg9JyInJGdscGZ4JyInDQpmaQ0Kcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29u ZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0DQogICAgICB0ZXN0IC1uICIkUFJJUFRS X1BSRUZJWCIgJiYgYnJlYWsNCiAgICBkb25lDQogIGZpDQoNCg0KICBpZiB0ZXN0ICIkYWNfY3Zf aGF2ZV9kZWNsX2ltYXhhYnMiID0geWVzOyB0aGVuDQogICAgSEFWRV9ERUNMX0lNQVhBQlM9MQ0K ICBlbHNlDQogICAgSEFWRV9ERUNMX0lNQVhBQlM9MA0KICBmaQ0KDQogIGlmIHRlc3QgIiRhY19j dl9oYXZlX2RlY2xfaW1heGRpdiIgPSB5ZXM7IHRoZW4NCiAgICBIQVZFX0RFQ0xfSU1BWERJVj0x DQogIGVsc2UNCiAgICBIQVZFX0RFQ0xfSU1BWERJVj0wDQogIGZpDQoNCiAgaWYgdGVzdCAiJGFj X2N2X2hhdmVfZGVjbF9zdHJ0b2ltYXgiID0geWVzOyB0aGVuDQogICAgSEFWRV9ERUNMX1NUUlRP SU1BWD0xDQogIGVsc2UNCiAgICBIQVZFX0RFQ0xfU1RSVE9JTUFYPTANCiAgZmkNCg0KICBpZiB0 ZXN0ICIkYWNfY3ZfaGF2ZV9kZWNsX3N0cnRvdW1heCIgPSB5ZXM7IHRoZW4NCiAgICBIQVZFX0RF Q0xfU1RSVE9VTUFYPTENCiAgZWxzZQ0KICAgIEhBVkVfREVDTF9TVFJUT1VNQVg9MA0KICBmaQ0K DQoNCiAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3 aGV0aGVyIElOVDMyX01BWCA8IElOVE1BWF9NQVgiID4mNQ0KJGFzX2VjaG9fbiAiY2hlY2tpbmcg d2hldGhlciBJTlQzMl9NQVggPCBJTlRNQVhfTUFYLi4uICIgPiY2OyB9DQppZiAke2dsX2N2X3Rl c3RfSU5UMzJfTUFYX0xUX0lOVE1BWF9NQVgrOn0gZmFsc2U7IHRoZW4gOg0KICAkYXNfZWNob19u ICIoY2FjaGVkKSAiID4mNg0KZWxzZQ0KICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25m dGVzdC4kYWNfZXh0DQovKiBlbmQgY29uZmRlZnMuaC4gICovDQovKiBXb3JrIGFsc28gaW4gQysr IG1vZGUuICAqLw0KICAgICAgICAgICAgI2RlZmluZSBfX1NURENfTElNSVRfTUFDUk9TIDENCg0K ICAgICAgICAgICAgLyogV29yayBpZiBidWlsZCBpcyBub3QgY2xlYW4uICAqLw0KICAgICAgICAg ICAgI2RlZmluZSBfR0xfSlVTVF9JTkNMVURFX1NZU1RFTV9TVERJTlRfSA0KDQogICAgICAgICAg ICAjaW5jbHVkZSA8bGltaXRzLmg+DQogICAgICAgICAgICAjaWYgSEFWRV9TVERJTlRfSA0KICAg ICAgICAgICAgICNpbmNsdWRlIDxzdGRpbnQuaD4NCiAgICAgICAgICAgICNlbmRpZg0KDQogICAg ICAgICAgICAjaWYgZGVmaW5lZCBJTlQzMl9NQVggJiYgZGVmaW5lZCBJTlRNQVhfTUFYDQogICAg ICAgICAgICAgI2RlZmluZSBDT05ESVRJT04gKElOVDMyX01BWCA8IElOVE1BWF9NQVgpDQogICAg ICAgICAgICAjZWxpZiBIQVZFX0xPTkdfTE9OR19JTlQNCiAgICAgICAgICAgICAjZGVmaW5lIENP TkRJVElPTiAoc2l6ZW9mIChpbnQpIDwgc2l6ZW9mIChsb25nIGxvbmcgaW50KSkNCiAgICAgICAg ICAgICNlbHNlDQogICAgICAgICAgICAgI2RlZmluZSBDT05ESVRJT04gMA0KICAgICAgICAgICAg I2VuZGlmDQogICAgICAgICAgICBpbnQgdGVzdFtDT05ESVRJT04gPyAxIDogLTFdOw0KaW50DQpt YWluICgpDQp7DQoNCiAgOw0KICByZXR1cm4gMDsNCn0NCl9BQ0VPRg0KaWYgYWNfZm5fY190cnlf Y29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOg0KICBnbF9jdl90ZXN0X0lOVDMyX01BWF9MVF9JTlRN QVhfTUFYPXllcw0KZWxzZQ0KICBnbF9jdl90ZXN0X0lOVDMyX01BWF9MVF9JTlRNQVhfTUFYPW5v DQpmaQ0Kcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVz dC4kYWNfZXh0DQpmaQ0KeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBy ZXN1bHQ6ICRnbF9jdl90ZXN0X0lOVDMyX01BWF9MVF9JTlRNQVhfTUFYIiA+JjUNCiRhc19lY2hv ICIkZ2xfY3ZfdGVzdF9JTlQzMl9NQVhfTFRfSU5UTUFYX01BWCIgPiY2OyB9DQogIGlmIHRlc3Qg JGdsX2N2X3Rlc3RfSU5UMzJfTUFYX0xUX0lOVE1BWF9NQVggPSB5ZXM7IHRoZW4NCiAgICBJTlQz Ml9NQVhfTFRfSU5UTUFYX01BWD0xOw0KICBlbHNlDQogICAgSU5UMzJfTUFYX0xUX0lOVE1BWF9N QVg9MDsNCiAgZmkNCg0KDQogIGlmIHRlc3QgJEFQUExFX1VOSVZFUlNBTF9CVUlMRCA9IDA7IHRo ZW4NCg0KICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5n IHdoZXRoZXIgSU5UNjRfTUFYID09IExPTkdfTUFYIiA+JjUNCiRhc19lY2hvX24gImNoZWNraW5n IHdoZXRoZXIgSU5UNjRfTUFYID09IExPTkdfTUFYLi4uICIgPiY2OyB9DQppZiAke2dsX2N2X3Rl c3RfSU5UNjRfTUFYX0VRX0xPTkdfTUFYKzp9IGZhbHNlOyB0aGVuIDoNCiAgJGFzX2VjaG9fbiAi KGNhY2hlZCkgIiA+JjYNCmVsc2UNCiAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRl c3QuJGFjX2V4dA0KLyogZW5kIGNvbmZkZWZzLmguICAqLw0KLyogV29yayBhbHNvIGluIEMrKyBt b2RlLiAgKi8NCiAgICAgICAgICAgICNkZWZpbmUgX19TVERDX0xJTUlUX01BQ1JPUyAxDQoNCiAg ICAgICAgICAgIC8qIFdvcmsgaWYgYnVpbGQgaXMgbm90IGNsZWFuLiAgKi8NCiAgICAgICAgICAg ICNkZWZpbmUgX0dMX0pVU1RfSU5DTFVERV9TWVNURU1fU1RESU5UX0gNCg0KICAgICAgICAgICAg I2luY2x1ZGUgPGxpbWl0cy5oPg0KICAgICAgICAgICAgI2lmIEhBVkVfU1RESU5UX0gNCiAgICAg ICAgICAgICAjaW5jbHVkZSA8c3RkaW50Lmg+DQogICAgICAgICAgICAjZW5kaWYNCg0KICAgICAg ICAgICAgI2lmIGRlZmluZWQgSU5UNjRfTUFYDQogICAgICAgICAgICAgI2RlZmluZSBDT05ESVRJ T04gKElOVDY0X01BWCA9PSBMT05HX01BWCkNCiAgICAgICAgICAgICNlbGlmIEhBVkVfTE9OR19M T05HX0lOVA0KICAgICAgICAgICAgICNkZWZpbmUgQ09ORElUSU9OIChzaXplb2YgKGxvbmcgbG9u ZyBpbnQpID09IHNpemVvZiAobG9uZyBpbnQpKQ0KICAgICAgICAgICAgI2Vsc2UNCiAgICAgICAg ICAgICAjZGVmaW5lIENPTkRJVElPTiAwDQogICAgICAgICAgICAjZW5kaWYNCiAgICAgICAgICAg IGludCB0ZXN0W0NPTkRJVElPTiA/IDEgOiAtMV07DQppbnQNCm1haW4gKCkNCnsNCg0KICA7DQog IHJldHVybiAwOw0KfQ0KX0FDRU9GDQppZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsg dGhlbiA6DQogIGdsX2N2X3Rlc3RfSU5UNjRfTUFYX0VRX0xPTkdfTUFYPXllcw0KZWxzZQ0KICBn bF9jdl90ZXN0X0lOVDY0X01BWF9FUV9MT05HX01BWD1ubw0KZmkNCnJtIC1mIGNvcmUgY29uZnRl c3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dA0KZmkNCnsgJGFzX2Vj aG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkZ2xfY3ZfdGVzdF9JTlQ2 NF9NQVhfRVFfTE9OR19NQVgiID4mNQ0KJGFzX2VjaG8gIiRnbF9jdl90ZXN0X0lOVDY0X01BWF9F UV9MT05HX01BWCIgPiY2OyB9DQogIGlmIHRlc3QgJGdsX2N2X3Rlc3RfSU5UNjRfTUFYX0VRX0xP TkdfTUFYID0geWVzOyB0aGVuDQogICAgSU5UNjRfTUFYX0VRX0xPTkdfTUFYPTE7DQogIGVsc2UN CiAgICBJTlQ2NF9NQVhfRVFfTE9OR19NQVg9MDsNCiAgZmkNCg0KDQogIGVsc2UNCiAgICBJTlQ2 NF9NQVhfRVFfTE9OR19NQVg9LTENCiAgZmkNCg0KICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19s aW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgVUlOVDMyX01BWCA8IFVJTlRNQVhfTUFY IiA+JjUNCiRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgVUlOVDMyX01BWCA8IFVJTlRNQVhf TUFYLi4uICIgPiY2OyB9DQppZiAke2dsX2N2X3Rlc3RfVUlOVDMyX01BWF9MVF9VSU5UTUFYX01B WCs6fSBmYWxzZTsgdGhlbiA6DQogICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2DQplbHNlDQog IGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQNCi8qIGVuZCBjb25m ZGVmcy5oLiAgKi8NCi8qIFdvcmsgYWxzbyBpbiBDKysgbW9kZS4gICovDQogICAgICAgICAgICAj ZGVmaW5lIF9fU1REQ19MSU1JVF9NQUNST1MgMQ0KDQogICAgICAgICAgICAvKiBXb3JrIGlmIGJ1 aWxkIGlzIG5vdCBjbGVhbi4gICovDQogICAgICAgICAgICAjZGVmaW5lIF9HTF9KVVNUX0lOQ0xV REVfU1lTVEVNX1NURElOVF9IDQoNCiAgICAgICAgICAgICNpbmNsdWRlIDxsaW1pdHMuaD4NCiAg ICAgICAgICAgICNpZiBIQVZFX1NURElOVF9IDQogICAgICAgICAgICAgI2luY2x1ZGUgPHN0ZGlu dC5oPg0KICAgICAgICAgICAgI2VuZGlmDQoNCiAgICAgICAgICAgICNpZiBkZWZpbmVkIFVJTlQz Ml9NQVggJiYgZGVmaW5lZCBVSU5UTUFYX01BWA0KICAgICAgICAgICAgICNkZWZpbmUgQ09ORElU SU9OIChVSU5UMzJfTUFYIDwgVUlOVE1BWF9NQVgpDQogICAgICAgICAgICAjZWxpZiBIQVZFX0xP TkdfTE9OR19JTlQNCiAgICAgICAgICAgICAjZGVmaW5lIENPTkRJVElPTiAoc2l6ZW9mICh1bnNp Z25lZCBpbnQpIDwgc2l6ZW9mICh1bnNpZ25lZCBsb25nIGxvbmcgaW50KSkNCiAgICAgICAgICAg ICNlbHNlDQogICAgICAgICAgICAgI2RlZmluZSBDT05ESVRJT04gMA0KICAgICAgICAgICAgI2Vu ZGlmDQogICAgICAgICAgICBpbnQgdGVzdFtDT05ESVRJT04gPyAxIDogLTFdOw0KaW50DQptYWlu ICgpDQp7DQoNCiAgOw0KICByZXR1cm4gMDsNCn0NCl9BQ0VPRg0KaWYgYWNfZm5fY190cnlfY29t cGlsZSAiJExJTkVOTyI7IHRoZW4gOg0KICBnbF9jdl90ZXN0X1VJTlQzMl9NQVhfTFRfVUlOVE1B WF9NQVg9eWVzDQplbHNlDQogIGdsX2N2X3Rlc3RfVUlOVDMyX01BWF9MVF9VSU5UTUFYX01BWD1u bw0KZmkNCnJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRl c3QuJGFjX2V4dA0KZmkNCnsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTog cmVzdWx0OiAkZ2xfY3ZfdGVzdF9VSU5UMzJfTUFYX0xUX1VJTlRNQVhfTUFYIiA+JjUNCiRhc19l Y2hvICIkZ2xfY3ZfdGVzdF9VSU5UMzJfTUFYX0xUX1VJTlRNQVhfTUFYIiA+JjY7IH0NCiAgaWYg dGVzdCAkZ2xfY3ZfdGVzdF9VSU5UMzJfTUFYX0xUX1VJTlRNQVhfTUFYID0geWVzOyB0aGVuDQog ICAgVUlOVDMyX01BWF9MVF9VSU5UTUFYX01BWD0xOw0KICBlbHNlDQogICAgVUlOVDMyX01BWF9M VF9VSU5UTUFYX01BWD0wOw0KICBmaQ0KDQoNCiAgaWYgdGVzdCAkQVBQTEVfVU5JVkVSU0FMX0JV SUxEID0gMDsgdGhlbg0KDQogIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5P fTogY2hlY2tpbmcgd2hldGhlciBVSU5UNjRfTUFYID09IFVMT05HX01BWCIgPiY1DQokYXNfZWNo b19uICJjaGVja2luZyB3aGV0aGVyIFVJTlQ2NF9NQVggPT0gVUxPTkdfTUFYLi4uICIgPiY2OyB9 DQppZiAke2dsX2N2X3Rlc3RfVUlOVDY0X01BWF9FUV9VTE9OR19NQVgrOn0gZmFsc2U7IHRoZW4g Og0KICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNg0KZWxzZQ0KICBjYXQgY29uZmRlZnMuaCAt IDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0DQovKiBlbmQgY29uZmRlZnMuaC4gICovDQovKiBX b3JrIGFsc28gaW4gQysrIG1vZGUuICAqLw0KICAgICAgICAgICAgI2RlZmluZSBfX1NURENfTElN SVRfTUFDUk9TIDENCg0KICAgICAgICAgICAgLyogV29yayBpZiBidWlsZCBpcyBub3QgY2xlYW4u ICAqLw0KICAgICAgICAgICAgI2RlZmluZSBfR0xfSlVTVF9JTkNMVURFX1NZU1RFTV9TVERJTlRf SA0KDQogICAgICAgICAgICAjaW5jbHVkZSA8bGltaXRzLmg+DQogICAgICAgICAgICAjaWYgSEFW RV9TVERJTlRfSA0KICAgICAgICAgICAgICNpbmNsdWRlIDxzdGRpbnQuaD4NCiAgICAgICAgICAg ICNlbmRpZg0KDQogICAgICAgICAgICAjaWYgZGVmaW5lZCBVSU5UNjRfTUFYDQogICAgICAgICAg ICAgI2RlZmluZSBDT05ESVRJT04gKFVJTlQ2NF9NQVggPT0gVUxPTkdfTUFYKQ0KICAgICAgICAg ICAgI2VsaWYgSEFWRV9MT05HX0xPTkdfSU5UDQogICAgICAgICAgICAgI2RlZmluZSBDT05ESVRJ T04gKHNpemVvZiAodW5zaWduZWQgbG9uZyBsb25nIGludCkgPT0gc2l6ZW9mICh1bnNpZ25lZCBs b25nIGludCkpDQogICAgICAgICAgICAjZWxzZQ0KICAgICAgICAgICAgICNkZWZpbmUgQ09ORElU SU9OIDANCiAgICAgICAgICAgICNlbmRpZg0KICAgICAgICAgICAgaW50IHRlc3RbQ09ORElUSU9O ID8gMSA6IC0xXTsNCmludA0KbWFpbiAoKQ0Kew0KDQogIDsNCiAgcmV0dXJuIDA7DQp9DQpfQUNF T0YNCmlmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoNCiAgZ2xfY3ZfdGVz dF9VSU5UNjRfTUFYX0VRX1VMT05HX01BWD15ZXMNCmVsc2UNCiAgZ2xfY3ZfdGVzdF9VSU5UNjRf TUFYX0VRX1VMT05HX01BWD1ubw0KZmkNCnJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0 LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dA0KZmkNCnsgJGFzX2VjaG8gIiRhc19tZToke2Fz X2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkZ2xfY3ZfdGVzdF9VSU5UNjRfTUFYX0VRX1VMT05H X01BWCIgPiY1DQokYXNfZWNobyAiJGdsX2N2X3Rlc3RfVUlOVDY0X01BWF9FUV9VTE9OR19NQVgi ID4mNjsgfQ0KICBpZiB0ZXN0ICRnbF9jdl90ZXN0X1VJTlQ2NF9NQVhfRVFfVUxPTkdfTUFYID0g eWVzOyB0aGVuDQogICAgVUlOVDY0X01BWF9FUV9VTE9OR19NQVg9MTsNCiAgZWxzZQ0KICAgIFVJ TlQ2NF9NQVhfRVFfVUxPTkdfTUFYPTA7DQogIGZpDQoNCg0KICBlbHNlDQogICAgVUlOVDY0X01B WF9FUV9VTE9OR19NQVg9LTENCiAgZmkNCg0KDQogICAgZm9yIGdsX2Z1bmMgaW4gaW1heGFicyBp bWF4ZGl2IHN0cnRvaW1heCBzdHJ0b3VtYXg7IGRvDQogICAgYXNfZ2xfU3ltYm9sPWAkYXNfZWNo byAiZ2xfY3ZfaGF2ZV9yYXdfZGVjbF8kZ2xfZnVuYyIgfCAkYXNfdHJfc2hgDQogICAgeyAkYXNf ZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyICRnbF9m dW5jIGlzIGRlY2xhcmVkIHdpdGhvdXQgYSBtYWNybyIgPiY1DQokYXNfZWNob19uICJjaGVja2lu ZyB3aGV0aGVyICRnbF9mdW5jIGlzIGRlY2xhcmVkIHdpdGhvdXQgYSBtYWNyby4uLiAiID4mNjsg fQ0KaWYgZXZhbCBcJHskYXNfZ2xfU3ltYm9sKzp9IGZhbHNlOyB0aGVuIDoNCiAgJGFzX2VjaG9f biAiKGNhY2hlZCkgIiA+JjYNCmVsc2UNCiAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29u ZnRlc3QuJGFjX2V4dA0KLyogZW5kIGNvbmZkZWZzLmguICAqLw0KI2luY2x1ZGUgPGludHR5cGVz Lmg+DQoNCmludA0KbWFpbiAoKQ0Kew0KI3VuZGVmICRnbF9mdW5jDQogICh2b2lkKSAkZ2xfZnVu YzsNCiAgOw0KICByZXR1cm4gMDsNCn0NCl9BQ0VPRg0KaWYgYWNfZm5fY190cnlfY29tcGlsZSAi JExJTkVOTyI7IHRoZW4gOg0KICBldmFsICIkYXNfZ2xfU3ltYm9sPXllcyINCmVsc2UNCiAgZXZh bCAiJGFzX2dsX1N5bWJvbD1ubyINCmZpDQpybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVz dC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQNCmZpDQpldmFsIGFjX3Jlcz1cJCRhc19nbF9T eW1ib2wNCgkgICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBy ZXN1bHQ6ICRhY19yZXMiID4mNQ0KJGFzX2VjaG8gIiRhY19yZXMiID4mNjsgfQ0KICAgICBpZiBl dmFsIHRlc3QgXCJ4XCQiJGFzX2dsX1N5bWJvbCJcIiA9IHgieWVzIjsgdGhlbiA6DQogIGNhdCA+ PmNvbmZkZWZzLmggPDxfQUNFT0YNCiNkZWZpbmUgYCRhc19lY2hvICJIQVZFX1JBV19ERUNMXyRn bF9mdW5jIiB8ICRhc190cl9jcHBgIDENCl9BQ0VPRg0KDQogICAgICAgICAgICAgICAgICAgICBl dmFsIGFjX2N2X2hhdmVfZGVjbF8kZ2xfZnVuYz15ZXMNCmZpDQogICAgICBkb25lDQoNCg0KICAj IENvZGUgZnJvbSBtb2R1bGUgaXNhcGlwZToNCg0KICAjIE9wZW5WTVMgaGFzIGlzYXBpcGUgYWxy ZWFkeSwgc28gY2hlY2sgZm9yIGl0Lg0KDQoNCg0KDQoNCg0KDQoNCiAgZm9yIGFjX2Z1bmMgaW4g aXNhcGlwZQ0KZG8gOg0KICBhY19mbl9jX2NoZWNrX2Z1bmMgIiRMSU5FTk8iICJpc2FwaXBlIiAi YWNfY3ZfZnVuY19pc2FwaXBlIg0KaWYgdGVzdCAieCRhY19jdl9mdW5jX2lzYXBpcGUiID0geHll czsgdGhlbiA6DQogIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YNCiNkZWZpbmUgSEFWRV9JU0FQ SVBFIDENCl9BQ0VPRg0KDQplbHNlDQoNCiAgICBnbF9MSUJPQkpTPSIkZ2xfTElCT0JKUyAkYWNf ZnVuYy4kYWNfb2JqZXh0Ig0KDQpmaQ0KZG9uZQ0KDQoNCiAgaWYgdGVzdCAkYWNfY3ZfZnVuY19p c2FwaXBlID0gbm87IHRoZW4NCg0KICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJ TkVOT306IGNoZWNraW5nIHdoZXRoZXIgcGlwZXMgYXJlIEZJRk9zIChhbmQgZm9yIHRoZWlyIGxp bmsgY291bnQpIiA+JjUNCiRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgcGlwZXMgYXJlIEZJ Rk9zIChhbmQgZm9yIHRoZWlyIGxpbmsgY291bnQpLi4uICIgPiY2OyB9DQppZiAke2dsX2N2X3Bp cGVzX2FyZV9maWZvcys6fSBmYWxzZTsgdGhlbiA6DQogICRhc19lY2hvX24gIihjYWNoZWQpICIg PiY2DQplbHNlDQogIGlmIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0geWVzOyB0aGVuIDoNCiAg Z2xfY3ZfcGlwZXNfYXJlX2ZpZm9zPWNyb3NzLWNvbXBpbGluZw0KZWxzZQ0KICBjYXQgY29uZmRl ZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0DQovKiBlbmQgY29uZmRlZnMuaC4gICov DQojaW5jbHVkZSA8c3RkaW8uaD4NCiAgICAgICAgICAgICNpbmNsdWRlIDxzeXMvdHlwZXMuaD4N CiAgICAgICAgICAgICNpbmNsdWRlIDxzeXMvc3RhdC5oPg0KICAgICAgICAgICAgI2luY2x1ZGUg PHVuaXN0ZC5oPg0KICAgICAgICAgICAgI2lmbmRlZiBTX0lTRklGTw0KICAgICAgICAgICAgICNk ZWZpbmUgU19JU0ZJRk8obSkgMA0KICAgICAgICAgICAgI2VuZGlmDQogICAgICAgICAgICAjaWZu ZGVmIFNfSVNTT0NLDQogICAgICAgICAgICAgI2RlZmluZSBTX0lTU09DSyhtKSAwDQogICAgICAg ICAgICAjZW5kaWYNCiAgICAgICAgICAgIGludA0KICAgICAgICAgICAgbWFpbiAoaW50IGFyZ2Ms IGNoYXIgKiphcmd2KQ0KICAgICAgICAgICAgew0KICAgICAgICAgICAgICBpbnQgZmRbMl07DQog ICAgICAgICAgICAgIHN0cnVjdCBzdGF0IHN0Ow0KICAgICAgICAgICAgICBpZiAocGlwZSAoZmQp ICE9IDApDQogICAgICAgICAgICAgICAgcmV0dXJuIDE7DQogICAgICAgICAgICAgIGlmIChmc3Rh dCAoZmRbMF0sICZzdCkgIT0gMCkNCiAgICAgICAgICAgICAgICByZXR1cm4gMjsNCiAgICAgICAg ICAgICAgaWYgKDIgPD0gYXJnYyAmJiBhcmd2WzFdWzBdID09ICctJykNCiAgICAgICAgICAgICAg ICB7DQogICAgICAgICAgICAgICAgICBjaGFyIGNvbnN0ICp5ZXNubyA9IChTX0lTRklGTyAoc3Qu c3RfbW9kZSkgPyAieWVzIiA6ICJubyIpOw0KICAgICAgICAgICAgICAgICAgaWYgKHN0LnN0X25s aW5rIDw9IDEpDQogICAgICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAgICAgICBs b25nIGludCBpID0gc3Quc3Rfbmxpbms7DQogICAgICAgICAgICAgICAgICAgICAgaWYgKGkgIT0g c3Quc3RfbmxpbmspDQogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gMzsNCiAgICAgICAg ICAgICAgICAgICAgICBwcmludGYgKCIlcyAoJWxkKVxuIiwgeWVzbm8sIGkpOw0KICAgICAgICAg ICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICBlbHNlDQogICAgICAgICAgICAgICAgICAg IHsNCiAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIGludCBpID0gc3Quc3Rfbmxp bms7DQogICAgICAgICAgICAgICAgICAgICAgaWYgKGkgIT0gc3Quc3RfbmxpbmspDQogICAgICAg ICAgICAgICAgICAgICAgICByZXR1cm4gNDsNCiAgICAgICAgICAgICAgICAgICAgICBwcmludGYg KCIlcyAoJWx1KVxuIiwgeWVzbm8sIGkpOw0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAg ICAgICAgICAgfQ0KICAgICAgICAgICAgICBlbHNlDQogICAgICAgICAgICAgICAgew0KICAgICAg ICAgICAgICAgICAgaWYgKCEgU19JU0ZJRk8gKHN0LnN0X21vZGUpICYmICEgU19JU1NPQ0sgKHN0 LnN0X21vZGUpKQ0KICAgICAgICAgICAgICAgICAgICByZXR1cm4gNTsNCiAgICAgICAgICAgICAg ICB9DQogICAgICAgICAgICAgIHJldHVybiAwOw0KICAgICAgICAgICAgfQ0KX0FDRU9GDQppZiBh Y19mbl9jX3RyeV9ydW4gIiRMSU5FTk8iOyB0aGVuIDoNCiAgZ2xfY3ZfcGlwZXNfYXJlX2ZpZm9z PWAuL2NvbmZ0ZXN0JGFjX2V4ZWV4dCAtYA0KICAgICAgICB0ZXN0IC16ICIkZ2xfY3ZfcGlwZXNf YXJlX2ZpZm9zIiAmJiBnbF9jdl9waXBlc19hcmVfZmlmb3M9bm8NCmVsc2UNCiAgZ2xfY3ZfcGlw ZXNfYXJlX2ZpZm9zPXVua25vd24NCmZpDQpybSAtZiBjb3JlICouY29yZSBjb3JlLmNvbmZ0ZXN0 LiogZ21vbi5vdXQgYmIub3V0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCBcDQogIGNvbmZ0ZXN0LiRhY19v YmpleHQgY29uZnRlc3QuYmVhbSBjb25mdGVzdC4kYWNfZXh0DQpmaQ0KDQpmaQ0KeyAkYXNfZWNo byAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRnbF9jdl9waXBlc19hcmVf Zmlmb3MiID4mNQ0KJGFzX2VjaG8gIiRnbF9jdl9waXBlc19hcmVfZmlmb3MiID4mNjsgfQ0KDQog IGNhc2UgJGdsX2N2X3BpcGVzX2FyZV9maWZvcyBpbiAjKA0KICAneWVzICgnKicpJykNCg0KJGFz X2VjaG8gIiNkZWZpbmUgSEFWRV9GSUZPX1BJUEVTIDEiID4+Y29uZmRlZnMuaA0KOzsgIygNCiAg J25vICgnKicpJykNCiAgICAkYXNfZWNobyAiI2RlZmluZSBIQVZFX0ZJRk9fUElQRVMgMCIgPj5j b25mZGVmcy5oDQo7Ow0KICBlc2FjDQoNCiAgY2FzZSAkZ2xfY3ZfcGlwZXNfYXJlX2ZpZm9zIGlu ICMoDQogIConKCcqJyknKQ0KDQpjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GDQojZGVmaW5lIFBJ UEVfTElOS19DT1VOVF9NQVggYGV4cHIgIiRnbF9jdl9waXBlc19hcmVfZmlmb3MiIDogJy4qXCgo LiopXCknYA0KX0FDRU9GDQo7Ow0KICBlc2FjDQoNCiAgZmkNCg0KICAjIENvZGUgZnJvbSBtb2R1 bGUgaXNibGFuazoNCg0KDQoNCg0KDQogIGlmIHRlc3QgJGFjX2N2X2Z1bmNfaXNibGFuayA9IG5v OyB0aGVuDQogICAgSEFWRV9JU0JMQU5LPTANCg0KDQoNCg0KDQoNCg0KDQogIGdsX0xJQk9CSlM9 IiRnbF9MSUJPQkpTIGlzYmxhbmsuJGFjX29iamV4dCINCg0KICBmaQ0KDQoNCg0KDQogIEdOVUxJ Ql9JU0JMQU5LPTENCg0KDQogICMgQ29kZSBmcm9tIG1vZHVsZSBpc25hbmQtbm9saWJtOg0KDQoN CiAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0 aGVyIGlzbmFuKGRvdWJsZSkgY2FuIGJlIHVzZWQgd2l0aG91dCBsaW5raW5nIHdpdGggbGlibSIg PiY1DQokYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIGlzbmFuKGRvdWJsZSkgY2FuIGJlIHVz ZWQgd2l0aG91dCBsaW5raW5nIHdpdGggbGlibS4uLiAiID4mNjsgfQ0KaWYgJHtnbF9jdl9mdW5j X2lzbmFuZF9ub19saWJtKzp9IGZhbHNlOyB0aGVuIDoNCiAgJGFzX2VjaG9fbiAiKGNhY2hlZCkg IiA+JjYNCmVsc2UNCg0KICAgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3Qu JGFjX2V4dA0KLyogZW5kIGNvbmZkZWZzLmguICAqLw0KI2luY2x1ZGUgPG1hdGguaD4NCiAgICAg ICAgICAgICAjaWYgX19HTlVDX18gPj0gNA0KICAgICAgICAgICAgICMgdW5kZWYgaXNuYW5kDQog ICAgICAgICAgICAgIyBkZWZpbmUgaXNuYW5kKHgpIF9fYnVpbHRpbl9pc25hbiAoKGRvdWJsZSko eCkpDQogICAgICAgICAgICAgI2Vsc2UNCiAgICAgICAgICAgICAjIHVuZGVmIGlzbmFuZA0KICAg ICAgICAgICAgICMgZGVmaW5lIGlzbmFuZCh4KSBpc25hbiAoKGRvdWJsZSkoeCkpDQogICAgICAg ICAgICAgI2VuZGlmDQogICAgICAgICAgICAgZG91YmxlIHg7DQppbnQNCm1haW4gKCkNCnsNCnJl dHVybiBpc25hbmQgKHgpOw0KICA7DQogIHJldHVybiAwOw0KfQ0KX0FDRU9GDQppZiBhY19mbl9j X3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6DQogIGdsX2N2X2Z1bmNfaXNuYW5kX25vX2xpYm09 eWVzDQplbHNlDQogIGdsX2N2X2Z1bmNfaXNuYW5kX25vX2xpYm09bm8NCmZpDQpybSAtZiBjb3Jl IGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwNCiAgICBjb25mdGVzdCRhY19leGVl eHQgY29uZnRlc3QuJGFjX2V4dA0KDQpmaQ0KeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5v LSRMSU5FTk99OiByZXN1bHQ6ICRnbF9jdl9mdW5jX2lzbmFuZF9ub19saWJtIiA+JjUNCiRhc19l Y2hvICIkZ2xfY3ZfZnVuY19pc25hbmRfbm9fbGlibSIgPiY2OyB9DQoNCiAgaWYgdGVzdCAkZ2xf Y3ZfZnVuY19pc25hbmRfbm9fbGlibSA9IHllczsgdGhlbg0KDQokYXNfZWNobyAiI2RlZmluZSBI QVZFX0lTTkFORF9JTl9MSUJDIDEiID4+Y29uZmRlZnMuaA0KDQogIGVsc2UNCg0KDQoNCg0KDQoN Cg0KDQoNCiAgZ2xfTElCT0JKUz0iJGdsX0xJQk9CSlMgaXNuYW5kLiRhY19vYmpleHQiDQoNCg0K ICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXJl IHRvIGZpbmQgdGhlIGV4cG9uZW50IGluIGEgJ2RvdWJsZSciID4mNQ0KJGFzX2VjaG9fbiAiY2hl Y2tpbmcgd2hlcmUgdG8gZmluZCB0aGUgZXhwb25lbnQgaW4gYSAnZG91YmxlJy4uLiAiID4mNjsg fQ0KaWYgJHtnbF9jdl9jY19kb3VibGVfZXhwYml0MCs6fSBmYWxzZTsgdGhlbiA6DQogICRhc19l Y2hvX24gIihjYWNoZWQpICIgPiY2DQplbHNlDQoNCiAgICAgIGlmIHRlc3QgIiRjcm9zc19jb21w aWxpbmciID0geWVzOyB0aGVuIDoNCg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29u ZnRlc3QuJGFjX2V4dA0KLyogZW5kIGNvbmZkZWZzLmguICAqLw0KDQojaWYgZGVmaW5lZCBhcm0g fHwgZGVmaW5lZCBfX2FybSB8fCBkZWZpbmVkIF9fYXJtX18NCiAgbWl4ZWRfZW5kaWFubmVzcw0K I2VuZGlmDQoNCl9BQ0VPRg0KaWYgKGV2YWwgIiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCIpIDI+ JjUgfA0KICAkRUdSRVAgIm1peGVkX2VuZGlhbm5lc3MiID4vZGV2L251bGwgMj4mMTsgdGhlbiA6 DQogIGdsX2N2X2NjX2RvdWJsZV9leHBiaXQwPSJ1bmtub3duIg0KZWxzZQ0KDQogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6DQppZiAke2Fj X2N2X2NfYmlnZW5kaWFuKzp9IGZhbHNlOyB0aGVuIDoNCiAgJGFzX2VjaG9fbiAiKGNhY2hlZCkg IiA+JjYNCmVsc2UNCiAgYWNfY3ZfY19iaWdlbmRpYW49dW5rbm93bg0KICAgICMgU2VlIGlmIHdl J3JlIGRlYWxpbmcgd2l0aCBhIHVuaXZlcnNhbCBjb21waWxlci4NCiAgICBjYXQgY29uZmRlZnMu aCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0DQovKiBlbmQgY29uZmRlZnMuaC4gICovDQoj aWZuZGVmIF9fQVBQTEVfQ0NfXw0KCSAgICAgICBub3QgYSB1bml2ZXJzYWwgY2FwYWJsZSBjb21w aWxlcg0KCSAgICAgI2VuZGlmDQoJICAgICB0eXBlZGVmIGludCBkdW1teTsNCg0KX0FDRU9GDQpp ZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6DQoNCgkjIENoZWNrIGZvciBw b3RlbnRpYWwgLWFyY2ggZmxhZ3MuICBJdCBpcyBub3QgdW5pdmVyc2FsIHVubGVzcw0KCSMgdGhl cmUgYXJlIGF0IGxlYXN0IHR3byAtYXJjaCBmbGFncyB3aXRoIGRpZmZlcmVudCB2YWx1ZXMuDQoJ YWNfYXJjaD0NCglhY19wcmV2PQ0KCWZvciBhY193b3JkIGluICRDQyAkQ0ZMQUdTICRDUFBGTEFH UyAkTERGTEFHUzsgZG8NCgkgaWYgdGVzdCAtbiAiJGFjX3ByZXYiOyB0aGVuDQoJICAgY2FzZSAk YWNfd29yZCBpbg0KCSAgICAgaT84NiB8IHg4Nl82NCB8IHBwYyB8IHBwYzY0KQ0KCSAgICAgICBp ZiB0ZXN0IC16ICIkYWNfYXJjaCIgfHwgdGVzdCAiJGFjX2FyY2giID0gIiRhY193b3JkIjsgdGhl bg0KCQkgYWNfYXJjaD0kYWNfd29yZA0KCSAgICAgICBlbHNlDQoJCSBhY19jdl9jX2JpZ2VuZGlh bj11bml2ZXJzYWwNCgkJIGJyZWFrDQoJICAgICAgIGZpDQoJICAgICAgIDs7DQoJICAgZXNhYw0K CSAgIGFjX3ByZXY9DQoJIGVsaWYgdGVzdCAieCRhY193b3JkIiA9ICJ4LWFyY2giOyB0aGVuDQoJ ICAgYWNfcHJldj1hcmNoDQoJIGZpDQogICAgICAgZG9uZQ0KZmkNCnJtIC1mIGNvcmUgY29uZnRl c3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dA0KICAgIGlmIHRlc3Qg JGFjX2N2X2NfYmlnZW5kaWFuID0gdW5rbm93bjsgdGhlbg0KICAgICAgIyBTZWUgaWYgc3lzL3Bh cmFtLmggZGVmaW5lcyB0aGUgQllURV9PUkRFUiBtYWNyby4NCiAgICAgIGNhdCBjb25mZGVmcy5o IC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQNCi8qIGVuZCBjb25mZGVmcy5oLiAgKi8NCiNp bmNsdWRlIDxzeXMvdHlwZXMuaD4NCgkgICAgICNpbmNsdWRlIDxzeXMvcGFyYW0uaD4NCg0KaW50 DQptYWluICgpDQp7DQojaWYgISAoZGVmaW5lZCBCWVRFX09SREVSICYmIGRlZmluZWQgQklHX0VO RElBTiBcDQoJCSAgICAgJiYgZGVmaW5lZCBMSVRUTEVfRU5ESUFOICYmIEJZVEVfT1JERVIgJiYg QklHX0VORElBTiBcDQoJCSAgICAgJiYgTElUVExFX0VORElBTikNCgkgICAgICBib2d1cyBlbmRp YW4gbWFjcm9zDQoJICAgICAjZW5kaWYNCg0KICA7DQogIHJldHVybiAwOw0KfQ0KX0FDRU9GDQpp ZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6DQogICMgSXQgZG9lczsgbm93 IHNlZSB3aGV0aGVyIGl0IGRlZmluZWQgdG8gQklHX0VORElBTiBvciBub3QuDQoJIGNhdCBjb25m ZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQNCi8qIGVuZCBjb25mZGVmcy5oLiAg Ki8NCiNpbmNsdWRlIDxzeXMvdHlwZXMuaD4NCgkJI2luY2x1ZGUgPHN5cy9wYXJhbS5oPg0KDQpp bnQNCm1haW4gKCkNCnsNCiNpZiBCWVRFX09SREVSICE9IEJJR19FTkRJQU4NCgkJIG5vdCBiaWcg ZW5kaWFuDQoJCSNlbmRpZg0KDQogIDsNCiAgcmV0dXJuIDA7DQp9DQpfQUNFT0YNCmlmIGFjX2Zu X2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoNCiAgYWNfY3ZfY19iaWdlbmRpYW49eWVz DQplbHNlDQogIGFjX2N2X2NfYmlnZW5kaWFuPW5vDQpmaQ0Kcm0gLWYgY29yZSBjb25mdGVzdC5l cnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0DQpmaQ0Kcm0gLWYgY29yZSBj b25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0DQogICAgZmkN CiAgICBpZiB0ZXN0ICRhY19jdl9jX2JpZ2VuZGlhbiA9IHVua25vd247IHRoZW4NCiAgICAgICMg U2VlIGlmIDxsaW1pdHMuaD4gZGVmaW5lcyBfTElUVExFX0VORElBTiBvciBfQklHX0VORElBTiAo ZS5nLiwgU29sYXJpcykuDQogICAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVz dC4kYWNfZXh0DQovKiBlbmQgY29uZmRlZnMuaC4gICovDQojaW5jbHVkZSA8bGltaXRzLmg+DQoN CmludA0KbWFpbiAoKQ0Kew0KI2lmICEgKGRlZmluZWQgX0xJVFRMRV9FTkRJQU4gfHwgZGVmaW5l ZCBfQklHX0VORElBTikNCgkgICAgICBib2d1cyBlbmRpYW4gbWFjcm9zDQoJICAgICAjZW5kaWYN Cg0KICA7DQogIHJldHVybiAwOw0KfQ0KX0FDRU9GDQppZiBhY19mbl9jX3RyeV9jb21waWxlICIk TElORU5PIjsgdGhlbiA6DQogICMgSXQgZG9lczsgbm93IHNlZSB3aGV0aGVyIGl0IGRlZmluZWQg dG8gX0JJR19FTkRJQU4gb3Igbm90Lg0KCSBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25m dGVzdC4kYWNfZXh0DQovKiBlbmQgY29uZmRlZnMuaC4gICovDQojaW5jbHVkZSA8bGltaXRzLmg+ DQoNCmludA0KbWFpbiAoKQ0Kew0KI2lmbmRlZiBfQklHX0VORElBTg0KCQkgbm90IGJpZyBlbmRp YW4NCgkJI2VuZGlmDQoNCiAgOw0KICByZXR1cm4gMDsNCn0NCl9BQ0VPRg0KaWYgYWNfZm5fY190 cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOg0KICBhY19jdl9jX2JpZ2VuZGlhbj15ZXMNCmVs c2UNCiAgYWNfY3ZfY19iaWdlbmRpYW49bm8NCmZpDQpybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBj b25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQNCmZpDQpybSAtZiBjb3JlIGNvbmZ0 ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQNCiAgICBmaQ0KICAg IGlmIHRlc3QgJGFjX2N2X2NfYmlnZW5kaWFuID0gdW5rbm93bjsgdGhlbg0KICAgICAgIyBDb21w aWxlIGEgdGVzdCBwcm9ncmFtLg0KICAgICAgaWYgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgPSB5 ZXM7IHRoZW4gOg0KICAjIFRyeSB0byBndWVzcyBieSBncmVwcGluZyB2YWx1ZXMgZnJvbSBhbiBv YmplY3QgZmlsZS4NCgkgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4 dA0KLyogZW5kIGNvbmZkZWZzLmguICAqLw0Kc2hvcnQgaW50IGFzY2lpX21tW10gPQ0KCQkgIHsg MHg0MjQ5LCAweDQ3NjUsIDB4NkU0NCwgMHg2OTYxLCAweDZFNTMsIDB4Nzk1MywgMCB9Ow0KCQlz aG9ydCBpbnQgYXNjaWlfaWlbXSA9DQoJCSAgeyAweDY5NEMsIDB4NTQ1NCwgMHg2NTZDLCAweDZF NDUsIDB4Njk0NCwgMHg2RTYxLCAwIH07DQoJCWludCB1c2VfYXNjaWkgKGludCBpKSB7DQoJCSAg cmV0dXJuIGFzY2lpX21tW2ldICsgYXNjaWlfaWlbaV07DQoJCX0NCgkJc2hvcnQgaW50IGViY2Rp Y19paVtdID0NCgkJICB7IDB4ODlEMywgMHhFM0UzLCAweDg1OTMsIDB4OTVDNSwgMHg4OUM0LCAw eDk1ODEsIDAgfTsNCgkJc2hvcnQgaW50IGViY2RpY19tbVtdID0NCgkJICB7IDB4QzJDOSwgMHhD Nzg1LCAweDk1QzQsIDB4ODk4MSwgMHg5NUUyLCAweEE4RTIsIDAgfTsNCgkJaW50IHVzZV9lYmNk aWMgKGludCBpKSB7DQoJCSAgcmV0dXJuIGViY2RpY19tbVtpXSArIGViY2RpY19paVtpXTsNCgkJ fQ0KCQlleHRlcm4gaW50IGZvbzsNCg0KaW50DQptYWluICgpDQp7DQpyZXR1cm4gdXNlX2FzY2lp IChmb28pID09IHVzZV9lYmNkaWMgKGZvbyk7DQogIDsNCiAgcmV0dXJuIDA7DQp9DQpfQUNFT0YN CmlmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoNCiAgaWYgZ3JlcCBCSUdl bkRpYW5TeVMgY29uZnRlc3QuJGFjX29iamV4dCA+L2Rldi9udWxsOyB0aGVuDQoJICAgICAgYWNf Y3ZfY19iaWdlbmRpYW49eWVzDQoJICAgIGZpDQoJICAgIGlmIGdyZXAgTGlUVGxlRW5EaWFuIGNv bmZ0ZXN0LiRhY19vYmpleHQgPi9kZXYvbnVsbCA7IHRoZW4NCgkgICAgICBpZiB0ZXN0ICIkYWNf Y3ZfY19iaWdlbmRpYW4iID0gdW5rbm93bjsgdGhlbg0KCQlhY19jdl9jX2JpZ2VuZGlhbj1ubw0K CSAgICAgIGVsc2UNCgkJIyBmaW5kaW5nIGJvdGggc3RyaW5ncyBpcyB1bmxpa2VseSB0byBoYXBw ZW4sIGJ1dCB3aG8ga25vd3M/DQoJCWFjX2N2X2NfYmlnZW5kaWFuPXVua25vd24NCgkgICAgICBm aQ0KCSAgICBmaQ0KZmkNCnJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpl eHQgY29uZnRlc3QuJGFjX2V4dA0KZWxzZQ0KICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5j b25mdGVzdC4kYWNfZXh0DQovKiBlbmQgY29uZmRlZnMuaC4gICovDQokYWNfaW5jbHVkZXNfZGVm YXVsdA0KaW50DQptYWluICgpDQp7DQoNCgkgICAgIC8qIEFyZSB3ZSBsaXR0bGUgb3IgYmlnIGVu ZGlhbj8gIEZyb20gSGFyYmlzb24mU3RlZWxlLiAgKi8NCgkgICAgIHVuaW9uDQoJICAgICB7DQoJ ICAgICAgIGxvbmcgaW50IGw7DQoJICAgICAgIGNoYXIgY1tzaXplb2YgKGxvbmcgaW50KV07DQoJ ICAgICB9IHU7DQoJICAgICB1LmwgPSAxOw0KCSAgICAgcmV0dXJuIHUuY1tzaXplb2YgKGxvbmcg aW50KSAtIDFdID09IDE7DQoNCiAgOw0KICByZXR1cm4gMDsNCn0NCl9BQ0VPRg0KaWYgYWNfZm5f Y190cnlfcnVuICIkTElORU5PIjsgdGhlbiA6DQogIGFjX2N2X2NfYmlnZW5kaWFuPW5vDQplbHNl DQogIGFjX2N2X2NfYmlnZW5kaWFuPXllcw0KZmkNCnJtIC1mIGNvcmUgKi5jb3JlIGNvcmUuY29u ZnRlc3QuKiBnbW9uLm91dCBiYi5vdXQgY29uZnRlc3QkYWNfZXhlZXh0IFwNCiAgY29uZnRlc3Qu JGFjX29iamV4dCBjb25mdGVzdC5iZWFtIGNvbmZ0ZXN0LiRhY19leHQNCmZpDQoNCiAgICBmaQ0K ZmkNCjoNCiBjYXNlICRhY19jdl9jX2JpZ2VuZGlhbiBpbiAjKA0KICAgeWVzKQ0KICAgICBnbF9j dl9jY19kb3VibGVfZXhwYml0MD0id29yZCAwIGJpdCAyMCI7OyAjKA0KICAgbm8pDQogICAgIGds X2N2X2NjX2RvdWJsZV9leHBiaXQwPSJ3b3JkIDEgYml0IDIwIiA7OyAjKA0KICAgdW5pdmVyc2Fs KQ0KDQokYXNfZWNobyAiI2RlZmluZSBBQ19BUFBMRV9VTklWRVJTQUxfQlVJTEQgMSIgPj5jb25m ZGVmcy5oDQoNCiAgICAgOzsgIygNCiAgICopDQogICAgIGdsX2N2X2NjX2RvdWJsZV9leHBiaXQw PSJ1bmtub3duIiA7Ow0KIGVzYWMNCg0KDQpmaQ0Kcm0gLWYgY29uZnRlc3QqDQoNCg0KZWxzZQ0K ICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0DQovKiBlbmQgY29u ZmRlZnMuaC4gICovDQoNCiNpbmNsdWRlIDxmbG9hdC5oPg0KI2luY2x1ZGUgPHN0ZGRlZi5oPg0K I2luY2x1ZGUgPHN0ZGlvLmg+DQojaW5jbHVkZSA8c3RyaW5nLmg+DQojZGVmaW5lIE5XT1JEUyBc DQogICgoc2l6ZW9mIChkb3VibGUpICsgc2l6ZW9mICh1bnNpZ25lZCBpbnQpIC0gMSkgLyBzaXpl b2YgKHVuc2lnbmVkIGludCkpDQp0eXBlZGVmIHVuaW9uIHsgZG91YmxlIHZhbHVlOyB1bnNpZ25l ZCBpbnQgd29yZFtOV09SRFNdOyB9IG1lbW9yeV9kb3VibGU7DQpzdGF0aWMgdW5zaWduZWQgaW50 IG9yZWRfd29yZHNbTldPUkRTXTsNCnN0YXRpYyB1bnNpZ25lZCBpbnQgYW5kZWRfd29yZHNbTldP UkRTXTsNCnN0YXRpYyB2b2lkIGFkZF90b19vcmVkX3dvcmRzIChkb3VibGUgeCkNCnsNCiAgbWVt b3J5X2RvdWJsZSBtOw0KICBzaXplX3QgaTsNCiAgLyogQ2xlYXIgaXQgZmlyc3QsIGluIGNhc2Ug c2l6ZW9mIChkb3VibGUpIDwgc2l6ZW9mIChtZW1vcnlfZG91YmxlKS4gICovDQogIG1lbXNldCAo Jm0sIDAsIHNpemVvZiAobWVtb3J5X2RvdWJsZSkpOw0KICBtLnZhbHVlID0geDsNCiAgZm9yIChp ID0gMDsgaSA8IE5XT1JEUzsgaSsrKQ0KICAgIHsNCiAgICAgIG9yZWRfd29yZHNbaV0gfD0gbS53 b3JkW2ldOw0KICAgICAgYW5kZWRfd29yZHNbaV0gJj0gbS53b3JkW2ldOw0KICAgIH0NCn0NCmlu dCBtYWluICgpDQp7DQogIHNpemVfdCBqOw0KICBGSUxFICpmcCA9IGZvcGVuICgiY29uZnRlc3Qu b3V0IiwgInciKTsNCiAgaWYgKGZwID09IE5VTEwpDQogICAgcmV0dXJuIDE7DQogIGZvciAoaiA9 IDA7IGogPCBOV09SRFM7IGorKykNCiAgICBhbmRlZF93b3Jkc1tqXSA9IH4gKHVuc2lnbmVkIGlu dCkgMDsNCiAgYWRkX3RvX29yZWRfd29yZHMgKDAuMjUpOw0KICBhZGRfdG9fb3JlZF93b3JkcyAo MC41KTsNCiAgYWRkX3RvX29yZWRfd29yZHMgKDEuMCk7DQogIGFkZF90b19vcmVkX3dvcmRzICgy LjApOw0KICBhZGRfdG9fb3JlZF93b3JkcyAoNC4wKTsNCiAgLyogUmVtb3ZlIGJpdHMgdGhhdCBh cmUgY29tbW9uIChlLmcuIGlmIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBmaXJzdCBtYW50aXNzYQ0K ICAgICBiaXQgaXMgZXhwbGljaXQpLiAgKi8NCiAgZm9yIChqID0gMDsgaiA8IE5XT1JEUzsgaisr KQ0KICAgIG9yZWRfd29yZHNbal0gJj0gfmFuZGVkX3dvcmRzW2pdOw0KICAvKiBOb3cgZmluZCB0 aGUgbm9uemVybyB3b3JkLiAgKi8NCiAgZm9yIChqID0gMDsgaiA8IE5XT1JEUzsgaisrKQ0KICAg IGlmIChvcmVkX3dvcmRzW2pdICE9IDApDQogICAgICBicmVhazsNCiAgaWYgKGogPCBOV09SRFMp DQogICAgew0KICAgICAgc2l6ZV90IGk7DQogICAgICBmb3IgKGkgPSBqICsgMTsgaSA8IE5XT1JE UzsgaSsrKQ0KICAgICAgICBpZiAob3JlZF93b3Jkc1tpXSAhPSAwKQ0KICAgICAgICAgIHsNCiAg ICAgICAgICAgIGZwcmludGYgKGZwLCAidW5rbm93biIpOw0KICAgICAgICAgICAgcmV0dXJuIChm Y2xvc2UgKGZwKSAhPSAwKTsNCiAgICAgICAgICB9DQogICAgICBmb3IgKGkgPSAwOyA7IGkrKykN CiAgICAgICAgaWYgKChvcmVkX3dvcmRzW2pdID4+IGkpICYgMSkNCiAgICAgICAgICB7DQogICAg ICAgICAgICBmcHJpbnRmIChmcCwgIndvcmQgJWQgYml0ICVkIiwgKGludCkgaiwgKGludCkgaSk7 DQogICAgICAgICAgICByZXR1cm4gKGZjbG9zZSAoZnApICE9IDApOw0KICAgICAgICAgIH0NCiAg ICB9DQogIGZwcmludGYgKGZwLCAidW5rbm93biIpOw0KICByZXR1cm4gKGZjbG9zZSAoZnApICE9 IDApOw0KfQ0KDQpfQUNFT0YNCmlmIGFjX2ZuX2NfdHJ5X3J1biAiJExJTkVOTyI7IHRoZW4gOg0K ICBnbF9jdl9jY19kb3VibGVfZXhwYml0MD1gY2F0IGNvbmZ0ZXN0Lm91dGANCmVsc2UNCiAgZ2xf Y3ZfY2NfZG91YmxlX2V4cGJpdDA9InVua25vd24iDQpmaQ0Kcm0gLWYgY29yZSAqLmNvcmUgY29y ZS5jb25mdGVzdC4qIGdtb24ub3V0IGJiLm91dCBjb25mdGVzdCRhY19leGVleHQgXA0KICBjb25m dGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LmJlYW0gY29uZnRlc3QuJGFjX2V4dA0KZmkNCg0KICAg ICAgcm0gLWYgY29uZnRlc3Qub3V0DQoNCmZpDQp7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5l bm8tJExJTkVOT306IHJlc3VsdDogJGdsX2N2X2NjX2RvdWJsZV9leHBiaXQwIiA+JjUNCiRhc19l Y2hvICIkZ2xfY3ZfY2NfZG91YmxlX2V4cGJpdDAiID4mNjsgfQ0KICBjYXNlICIkZ2xfY3ZfY2Nf ZG91YmxlX2V4cGJpdDAiIGluDQogICAgd29yZCpiaXQqKQ0KICAgICAgd29yZD1gZWNobyAiJGds X2N2X2NjX2RvdWJsZV9leHBiaXQwIiB8IHNlZCAtZSAncy93b3JkIC8vJyAtZSAncy8gYml0Liov LydgDQogICAgICBiaXQ9YGVjaG8gIiRnbF9jdl9jY19kb3VibGVfZXhwYml0MCIgfCBzZWQgLWUg J3Mvd29yZC4qYml0IC8vJ2ANCg0KY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRg0KI2RlZmluZSBE QkxfRVhQQklUMF9XT1JEICR3b3JkDQpfQUNFT0YNCg0KDQpjYXQgPj5jb25mZGVmcy5oIDw8X0FD RU9GDQojZGVmaW5lIERCTF9FWFBCSVQwX0JJVCAkYml0DQpfQUNFT0YNCg0KICAgICAgOzsNCiAg ZXNhYw0KDQoNCiAgZmkNCg0KICAjIENvZGUgZnJvbSBtb2R1bGUgaXNuYW5mLW5vbGlibToNCg0K DQogIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hl dGhlciBpc25hbihmbG9hdCkgY2FuIGJlIHVzZWQgd2l0aG91dCBsaW5raW5nIHdpdGggbGlibSIg PiY1DQokYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIGlzbmFuKGZsb2F0KSBjYW4gYmUgdXNl ZCB3aXRob3V0IGxpbmtpbmcgd2l0aCBsaWJtLi4uICIgPiY2OyB9DQppZiAke2dsX2N2X2Z1bmNf aXNuYW5mX25vX2xpYm0rOn0gZmFsc2U7IHRoZW4gOg0KICAkYXNfZWNob19uICIoY2FjaGVkKSAi ID4mNg0KZWxzZQ0KDQogICAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4k YWNfZXh0DQovKiBlbmQgY29uZmRlZnMuaC4gICovDQojaW5jbHVkZSA8bWF0aC5oPg0KICAgICAg ICAgICAgICNpZiBfX0dOVUNfXyA+PSA0DQogICAgICAgICAgICAgIyB1bmRlZiBpc25hbmYNCiAg ICAgICAgICAgICAjIGRlZmluZSBpc25hbmYoeCkgX19idWlsdGluX2lzbmFuZiAoKGZsb2F0KSh4 KSkNCiAgICAgICAgICAgICAjZWxpZiBkZWZpbmVkIGlzbmFuDQogICAgICAgICAgICAgIyB1bmRl ZiBpc25hbmYNCiAgICAgICAgICAgICAjIGRlZmluZSBpc25hbmYoeCkgaXNuYW4gKChmbG9hdCko eCkpDQogICAgICAgICAgICAgI2VuZGlmDQogICAgICAgICAgICAgZmxvYXQgeDsNCmludA0KbWFp biAoKQ0Kew0KcmV0dXJuIGlzbmFuZiAoeCk7DQogIDsNCiAgcmV0dXJuIDA7DQp9DQpfQUNFT0YN CmlmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoNCiAgZ2xfY3ZfZnVuY19pc25h bmZfbm9fbGlibT15ZXMNCmVsc2UNCiAgZ2xfY3ZfZnVuY19pc25hbmZfbm9fbGlibT1ubw0KZmkN CnJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXA0KICAgIGNvbmZ0 ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0DQoNCmZpDQp7ICRhc19lY2hvICIkYXNfbWU6 JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGdsX2N2X2Z1bmNfaXNuYW5mX25vX2xpYm0i ID4mNQ0KJGFzX2VjaG8gIiRnbF9jdl9mdW5jX2lzbmFuZl9ub19saWJtIiA+JjY7IH0NCg0KICBp ZiB0ZXN0ICRnbF9jdl9mdW5jX2lzbmFuZl9ub19saWJtID0geWVzOyB0aGVuDQoNCg0KDQogIHsg JGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciBp c25hbihmbG9hdCkgd29ya3MiID4mNQ0KJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciBpc25h bihmbG9hdCkgd29ya3MuLi4gIiA+JjY7IH0NCmlmICR7Z2xfY3ZfZnVuY19pc25hbmZfd29ya3Mr On0gZmFsc2U7IHRoZW4gOg0KICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNg0KZWxzZQ0KDQog ICAgICBpZiB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IHllczsgdGhlbiA6DQogIGNhc2UgIiRo b3N0X29zIiBpbg0KICAgICAgICAgICBpcml4KiB8IHNvbGFyaXMqKSBnbF9jdl9mdW5jX2lzbmFu Zl93b3Jrcz0iZ3Vlc3Npbmcgbm8iOzsNCiAgICAgICAgICAgKikgICAgICAgICAgICAgICAgZ2xf Y3ZfZnVuY19pc25hbmZfd29ya3M9Imd1ZXNzaW5nIHllcyI7Ow0KICAgICAgICAgZXNhYw0KDQpl bHNlDQogIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQNCi8qIGVu ZCBjb25mZGVmcy5oLiAgKi8NCg0KI2luY2x1ZGUgPG1hdGguaD4NCiNpZiBfX0dOVUNfXyA+PSA0 DQojIHVuZGVmIGlzbmFuZg0KIyBkZWZpbmUgaXNuYW5mKHgpIF9fYnVpbHRpbl9pc25hbmYgKChm bG9hdCkoeCkpDQojZWxpZiBkZWZpbmVkIGlzbmFuDQojIHVuZGVmIGlzbmFuZg0KIyBkZWZpbmUg aXNuYW5mKHgpIGlzbmFuICgoZmxvYXQpKHgpKQ0KI2VuZGlmDQovKiBUaGUgQ29tcGFxIChleC1E RUMpIEMgNi40IGNvbXBpbGVyIGNob2tlcyBvbiB0aGUgZXhwcmVzc2lvbiAwLjAgLyAwLjAuICAq Lw0KI2lmZGVmIF9fREVDQw0Kc3RhdGljIGZsb2F0DQpOYU4gKCkNCnsNCiAgc3RhdGljIGZsb2F0 IHplcm8gPSAwLjBmOw0KICByZXR1cm4gemVybyAvIHplcm87DQp9DQojZWxzZQ0KIyBkZWZpbmUg TmFOKCkgKDAuMGYgLyAwLjBmKQ0KI2VuZGlmDQojZGVmaW5lIE5XT1JEUyBcDQogICgoc2l6ZW9m IChmbG9hdCkgKyBzaXplb2YgKHVuc2lnbmVkIGludCkgLSAxKSAvIHNpemVvZiAodW5zaWduZWQg aW50KSkNCnR5cGVkZWYgdW5pb24geyB1bnNpZ25lZCBpbnQgd29yZFtOV09SRFNdOyBmbG9hdCB2 YWx1ZTsgfSBtZW1vcnlfZmxvYXQ7DQppbnQgbWFpbigpDQp7DQogIGludCByZXN1bHQgPSAwOw0K DQogIGlmIChpc25hbmYgKDEuMGYgLyAwLjBmKSkNCiAgICByZXN1bHQgfD0gMTsNCg0KICBpZiAo IWlzbmFuZiAoTmFOICgpKSkNCiAgICByZXN1bHQgfD0gMjsNCg0KI2lmIGRlZmluZWQgRkxUX0VY UEJJVDBfV09SRCAmJiBkZWZpbmVkIEZMVF9FWFBCSVQwX0JJVA0KICAvKiBUaGUgaXNuYW5mIGZ1 bmN0aW9uIHNob3VsZCBiZSBpbW11bmUgYWdhaW5zdCBjaGFuZ2VzIGluIHRoZSBzaWduIGJpdCBh bmQNCiAgICAgaW4gdGhlIG1hbnRpc3NhIGJpdHMuICBUaGUgeG9yIG9wZXJhdGlvbiB0d2lkZGxl cyBhIGJpdCB0aGF0IGNhbiBvbmx5IGJlDQogICAgIGEgc2lnbiBiaXQgb3IgYSBtYW50aXNzYSBi aXQuICAqLw0KICBpZiAoRkxUX0VYUEJJVDBfV09SRCA9PSAwICYmIEZMVF9FWFBCSVQwX0JJVCA+ IDApDQogICAgew0KICAgICAgbWVtb3J5X2Zsb2F0IG07DQoNCiAgICAgIG0udmFsdWUgPSBOYU4g KCk7DQogICAgICAvKiBTZXQgdGhlIGJpdHMgYmVsb3cgdGhlIGV4cG9uZW50IHRvIDAxMTExLi4u MTExLiAgKi8NCiAgICAgIG0ud29yZFswXSAmPSAtMVUgPDwgRkxUX0VYUEJJVDBfQklUOw0KICAg ICAgbS53b3JkWzBdIHw9IDFVIDw8IChGTFRfRVhQQklUMF9CSVQgLSAxKSAtIDE7DQogICAgICBp ZiAoIWlzbmFuZiAobS52YWx1ZSkpDQogICAgICAgIHJlc3VsdCB8PSA0Ow0KICAgIH0NCiNlbmRp Zg0KDQogIHJldHVybiByZXN1bHQ7DQp9DQpfQUNFT0YNCmlmIGFjX2ZuX2NfdHJ5X3J1biAiJExJ TkVOTyI7IHRoZW4gOg0KICBnbF9jdl9mdW5jX2lzbmFuZl93b3Jrcz15ZXMNCmVsc2UNCiAgZ2xf Y3ZfZnVuY19pc25hbmZfd29ya3M9bm8NCmZpDQpybSAtZiBjb3JlICouY29yZSBjb3JlLmNvbmZ0 ZXN0LiogZ21vbi5vdXQgYmIub3V0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCBcDQogIGNvbmZ0ZXN0LiRh Y19vYmpleHQgY29uZnRlc3QuYmVhbSBjb25mdGVzdC4kYWNfZXh0DQpmaQ0KDQoNCmZpDQp7ICRh c19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGdsX2N2X2Z1bmNf aXNuYW5mX3dvcmtzIiA+JjUNCiRhc19lY2hvICIkZ2xfY3ZfZnVuY19pc25hbmZfd29ya3MiID4m NjsgfQ0KDQogIGZpDQogIGlmIHRlc3QgJGdsX2N2X2Z1bmNfaXNuYW5mX25vX2xpYm0gPSB5ZXMg XA0KICAgICAmJiB7IGNhc2UgIiRnbF9jdl9mdW5jX2lzbmFuZl93b3JrcyIgaW4NCiAgICAgICAg ICAgICp5ZXMpIHRydWU7Ow0KICAgICAgICAgICAgKikgZmFsc2U7Ow0KICAgICAgICAgIGVzYWMN CiAgICAgICAgfTsgdGhlbg0KDQokYXNfZWNobyAiI2RlZmluZSBIQVZFX0lTTkFORl9JTl9MSUJD IDEiID4+Y29uZmRlZnMuaA0KDQogIGVsc2UNCg0KDQoNCg0KDQoNCg0KDQoNCiAgZ2xfTElCT0JK Uz0iJGdsX0xJQk9CSlMgaXNuYW5mLiRhY19vYmpleHQiDQoNCg0KICB7ICRhc19lY2hvICIkYXNf bWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXJlIHRvIGZpbmQgdGhlIGV4cG9u ZW50IGluIGEgJ2Zsb2F0JyIgPiY1DQokYXNfZWNob19uICJjaGVja2luZyB3aGVyZSB0byBmaW5k IHRoZSBleHBvbmVudCBpbiBhICdmbG9hdCcuLi4gIiA+JjY7IH0NCmlmICR7Z2xfY3ZfY2NfZmxv YXRfZXhwYml0MCs6fSBmYWxzZTsgdGhlbiA6DQogICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2 DQplbHNlDQoNCiAgICAgIGlmIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0geWVzOyB0aGVuIDoN CiAgZ2xfY3ZfY2NfZmxvYXRfZXhwYml0MD0id29yZCAwIGJpdCAyMyINCmVsc2UNCiAgY2F0IGNv bmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dA0KLyogZW5kIGNvbmZkZWZzLmgu ICAqLw0KDQojaW5jbHVkZSA8ZmxvYXQuaD4NCiNpbmNsdWRlIDxzdGRkZWYuaD4NCiNpbmNsdWRl IDxzdGRpby5oPg0KI2luY2x1ZGUgPHN0cmluZy5oPg0KI2RlZmluZSBOV09SRFMgXA0KICAoKHNp emVvZiAoZmxvYXQpICsgc2l6ZW9mICh1bnNpZ25lZCBpbnQpIC0gMSkgLyBzaXplb2YgKHVuc2ln bmVkIGludCkpDQp0eXBlZGVmIHVuaW9uIHsgZmxvYXQgdmFsdWU7IHVuc2lnbmVkIGludCB3b3Jk W05XT1JEU107IH0gbWVtb3J5X2Zsb2F0Ow0Kc3RhdGljIHVuc2lnbmVkIGludCBvcmVkX3dvcmRz W05XT1JEU107DQpzdGF0aWMgdW5zaWduZWQgaW50IGFuZGVkX3dvcmRzW05XT1JEU107DQpzdGF0 aWMgdm9pZCBhZGRfdG9fb3JlZF93b3JkcyAoZmxvYXQgeCkNCnsNCiAgbWVtb3J5X2Zsb2F0IG07 DQogIHNpemVfdCBpOw0KICAvKiBDbGVhciBpdCBmaXJzdCwgaW4gY2FzZQ0KICAgICBzaXplb2Yg KGZsb2F0KSA8IHNpemVvZiAobWVtb3J5X2Zsb2F0KS4gICovDQogIG1lbXNldCAoJm0sIDAsIHNp emVvZiAobWVtb3J5X2Zsb2F0KSk7DQogIG0udmFsdWUgPSB4Ow0KICBmb3IgKGkgPSAwOyBpIDwg TldPUkRTOyBpKyspDQogICAgew0KICAgICAgb3JlZF93b3Jkc1tpXSB8PSBtLndvcmRbaV07DQog ICAgICBhbmRlZF93b3Jkc1tpXSAmPSBtLndvcmRbaV07DQogICAgfQ0KfQ0KaW50IG1haW4gKCkN CnsNCiAgc2l6ZV90IGo7DQogIEZJTEUgKmZwID0gZm9wZW4gKCJjb25mdGVzdC5vdXQiLCAidyIp Ow0KICBpZiAoZnAgPT0gTlVMTCkNCiAgICByZXR1cm4gMTsNCiAgZm9yIChqID0gMDsgaiA8IE5X T1JEUzsgaisrKQ0KICAgIGFuZGVkX3dvcmRzW2pdID0gfiAodW5zaWduZWQgaW50KSAwOw0KICBh ZGRfdG9fb3JlZF93b3JkcyAoMC4yNWYpOw0KICBhZGRfdG9fb3JlZF93b3JkcyAoMC41Zik7DQog IGFkZF90b19vcmVkX3dvcmRzICgxLjBmKTsNCiAgYWRkX3RvX29yZWRfd29yZHMgKDIuMGYpOw0K ICBhZGRfdG9fb3JlZF93b3JkcyAoNC4wZik7DQogIC8qIFJlbW92ZSBiaXRzIHRoYXQgYXJlIGNv bW1vbiAoZS5nLiBpZiByZXByZXNlbnRhdGlvbiBvZiB0aGUgZmlyc3QgbWFudGlzc2ENCiAgICAg Yml0IGlzIGV4cGxpY2l0KS4gICovDQogIGZvciAoaiA9IDA7IGogPCBOV09SRFM7IGorKykNCiAg ICBvcmVkX3dvcmRzW2pdICY9IH5hbmRlZF93b3Jkc1tqXTsNCiAgLyogTm93IGZpbmQgdGhlIG5v bnplcm8gd29yZC4gICovDQogIGZvciAoaiA9IDA7IGogPCBOV09SRFM7IGorKykNCiAgICBpZiAo b3JlZF93b3Jkc1tqXSAhPSAwKQ0KICAgICAgYnJlYWs7DQogIGlmIChqIDwgTldPUkRTKQ0KICAg IHsNCiAgICAgIHNpemVfdCBpOw0KICAgICAgZm9yIChpID0gaiArIDE7IGkgPCBOV09SRFM7IGkr KykNCiAgICAgICAgaWYgKG9yZWRfd29yZHNbaV0gIT0gMCkNCiAgICAgICAgICB7DQogICAgICAg ICAgICBmcHJpbnRmIChmcCwgInVua25vd24iKTsNCiAgICAgICAgICAgIHJldHVybiAoZmNsb3Nl IChmcCkgIT0gMCk7DQogICAgICAgICAgfQ0KICAgICAgZm9yIChpID0gMDsgOyBpKyspDQogICAg ICAgIGlmICgob3JlZF93b3Jkc1tqXSA+PiBpKSAmIDEpDQogICAgICAgICAgew0KICAgICAgICAg ICAgZnByaW50ZiAoZnAsICJ3b3JkICVkIGJpdCAlZCIsIChpbnQpIGosIChpbnQpIGkpOw0KICAg ICAgICAgICAgcmV0dXJuIChmY2xvc2UgKGZwKSAhPSAwKTsNCiAgICAgICAgICB9DQogICAgfQ0K ICBmcHJpbnRmIChmcCwgInVua25vd24iKTsNCiAgcmV0dXJuIChmY2xvc2UgKGZwKSAhPSAwKTsN Cn0NCg0KX0FDRU9GDQppZiBhY19mbl9jX3RyeV9ydW4gIiRMSU5FTk8iOyB0aGVuIDoNCiAgZ2xf Y3ZfY2NfZmxvYXRfZXhwYml0MD1gY2F0IGNvbmZ0ZXN0Lm91dGANCmVsc2UNCiAgZ2xfY3ZfY2Nf ZmxvYXRfZXhwYml0MD0idW5rbm93biINCmZpDQpybSAtZiBjb3JlICouY29yZSBjb3JlLmNvbmZ0 ZXN0LiogZ21vbi5vdXQgYmIub3V0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCBcDQogIGNvbmZ0ZXN0LiRh Y19vYmpleHQgY29uZnRlc3QuYmVhbSBjb25mdGVzdC4kYWNfZXh0DQpmaQ0KDQogICAgICBybSAt ZiBjb25mdGVzdC5vdXQNCg0KZmkNCnsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElO RU5PfTogcmVzdWx0OiAkZ2xfY3ZfY2NfZmxvYXRfZXhwYml0MCIgPiY1DQokYXNfZWNobyAiJGds X2N2X2NjX2Zsb2F0X2V4cGJpdDAiID4mNjsgfQ0KICBjYXNlICIkZ2xfY3ZfY2NfZmxvYXRfZXhw Yml0MCIgaW4NCiAgICB3b3JkKmJpdCopDQogICAgICB3b3JkPWBlY2hvICIkZ2xfY3ZfY2NfZmxv YXRfZXhwYml0MCIgfCBzZWQgLWUgJ3Mvd29yZCAvLycgLWUgJ3MvIGJpdC4qLy8nYA0KICAgICAg Yml0PWBlY2hvICIkZ2xfY3ZfY2NfZmxvYXRfZXhwYml0MCIgfCBzZWQgLWUgJ3Mvd29yZC4qYml0 IC8vJ2ANCg0KY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRg0KI2RlZmluZSBGTFRfRVhQQklUMF9X T1JEICR3b3JkDQpfQUNFT0YNCg0KDQpjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GDQojZGVmaW5l IEZMVF9FWFBCSVQwX0JJVCAkYml0DQpfQUNFT0YNCg0KICAgICAgOzsNCiAgZXNhYw0KDQoNCiAg ZmkNCg0KICAjIENvZGUgZnJvbSBtb2R1bGUgaXNuYW5sLW5vbGlibToNCg0KDQogIHsgJGFzX2Vj aG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciBpc25hbihs b25nIGRvdWJsZSkgY2FuIGJlIHVzZWQgd2l0aG91dCBsaW5raW5nIHdpdGggbGlibSIgPiY1DQok YXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIGlzbmFuKGxvbmcgZG91YmxlKSBjYW4gYmUgdXNl ZCB3aXRob3V0IGxpbmtpbmcgd2l0aCBsaWJtLi4uICIgPiY2OyB9DQppZiAke2dsX2N2X2Z1bmNf aXNuYW5sX25vX2xpYm0rOn0gZmFsc2U7IHRoZW4gOg0KICAkYXNfZWNob19uICIoY2FjaGVkKSAi ID4mNg0KZWxzZQ0KDQogICAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4k YWNfZXh0DQovKiBlbmQgY29uZmRlZnMuaC4gICovDQojaW5jbHVkZSA8bWF0aC5oPg0KICAgICAg ICAgICAgICNpZiBfX0dOVUNfXyA+PSA0DQogICAgICAgICAgICAgIyB1bmRlZiBpc25hbmwNCiAg ICAgICAgICAgICAjIGRlZmluZSBpc25hbmwoeCkgX19idWlsdGluX2lzbmFubCAoKGxvbmcgZG91 YmxlKSh4KSkNCiAgICAgICAgICAgICAjZWxpZiBkZWZpbmVkIGlzbmFuDQogICAgICAgICAgICAg IyB1bmRlZiBpc25hbmwNCiAgICAgICAgICAgICAjIGRlZmluZSBpc25hbmwoeCkgaXNuYW4gKChs b25nIGRvdWJsZSkoeCkpDQogICAgICAgICAgICAgI2VuZGlmDQogICAgICAgICAgICAgbG9uZyBk b3VibGUgeDsNCmludA0KbWFpbiAoKQ0Kew0KcmV0dXJuIGlzbmFubCAoeCk7DQogIDsNCiAgcmV0 dXJuIDA7DQp9DQpfQUNFT0YNCmlmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoN CiAgZ2xfY3ZfZnVuY19pc25hbmxfbm9fbGlibT15ZXMNCmVsc2UNCiAgZ2xfY3ZfZnVuY19pc25h bmxfbm9fbGlibT1ubw0KZmkNCnJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19v YmpleHQgXA0KICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0DQoNCmZpDQp7 ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGdsX2N2X2Z1 bmNfaXNuYW5sX25vX2xpYm0iID4mNQ0KJGFzX2VjaG8gIiRnbF9jdl9mdW5jX2lzbmFubF9ub19s aWJtIiA+JjY7IH0NCg0KICBnbF9mdW5jX2lzbmFubF9ub19saWJtPSRnbF9jdl9mdW5jX2lzbmFu bF9ub19saWJtDQogIGlmIHRlc3QgJGdsX2Z1bmNfaXNuYW5sX25vX2xpYm0gPSB5ZXM7IHRoZW4N Cg0KDQoNCiAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVj a2luZyB3aGV0aGVyIGlzbmFubCB3b3JrcyIgPiY1DQokYXNfZWNob19uICJjaGVja2luZyB3aGV0 aGVyIGlzbmFubCB3b3Jrcy4uLiAiID4mNjsgfQ0KaWYgJHtnbF9jdl9mdW5jX2lzbmFubF93b3Jr cys6fSBmYWxzZTsgdGhlbiA6DQogICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2DQplbHNlDQoN CiAgICAgIGlmIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0geWVzOyB0aGVuIDoNCiAgY2FzZSAi JGhvc3RfY3B1IiBpbg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBHdWVzcyBu byBvbiBpYTY0LCB4ODZfNjQsIGkzODYuDQogICAgICAgICAgIGlhNjQgfCB4ODZfNjQgfCBpKjg2 KSBnbF9jdl9mdW5jX2lzbmFubF93b3Jrcz0iZ3Vlc3Npbmcgbm8iOzsNCiAgICAgICAgICAgKikN CiAgICAgICAgICAgICBjYXNlICIkaG9zdF9vcyIgaW4NCiAgICAgICAgICAgICAgIG5ldGJzZCop IGdsX2N2X2Z1bmNfaXNuYW5sX3dvcmtzPSJndWVzc2luZyBubyI7Ow0KICAgICAgICAgICAgICAg KikgICAgICAgZ2xfY3ZfZnVuY19pc25hbmxfd29ya3M9Imd1ZXNzaW5nIHllcyI7Ow0KICAgICAg ICAgICAgIGVzYWMNCiAgICAgICAgICAgICA7Ow0KICAgICAgICAgZXNhYw0KDQplbHNlDQogIGNh dCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQNCi8qIGVuZCBjb25mZGVm cy5oLiAgKi8NCg0KI2luY2x1ZGUgPGZsb2F0Lmg+DQojaW5jbHVkZSA8bGltaXRzLmg+DQojaW5j bHVkZSA8bWF0aC5oPg0KI2lmIF9fR05VQ19fID49IDQNCiMgdW5kZWYgaXNuYW5sDQojIGRlZmlu ZSBpc25hbmwoeCkgX19idWlsdGluX2lzbmFubCAoKGxvbmcgZG91YmxlKSh4KSkNCiNlbGlmIGRl ZmluZWQgaXNuYW4NCiMgdW5kZWYgaXNuYW5sDQojIGRlZmluZSBpc25hbmwoeCkgaXNuYW4gKChs b25nIGRvdWJsZSkoeCkpDQojZW5kaWYNCiNkZWZpbmUgTldPUkRTIFwNCiAgKChzaXplb2YgKGxv bmcgZG91YmxlKSArIHNpemVvZiAodW5zaWduZWQgaW50KSAtIDEpIC8gc2l6ZW9mICh1bnNpZ25l ZCBpbnQpKQ0KdHlwZWRlZiB1bmlvbiB7IHVuc2lnbmVkIGludCB3b3JkW05XT1JEU107IGxvbmcg ZG91YmxlIHZhbHVlOyB9DQogICAgICAgIG1lbW9yeV9sb25nX2RvdWJsZTsNCi8qIE9uIElyaXgg Ni41LCBnY2MgMy40LjMgY2FuJ3QgY29tcHV0ZSBjb21waWxlLXRpbWUgTmFOLCBhbmQgbmVlZHMg dGhlDQogICBydW50aW1lIHR5cGUgY29udmVyc2lvbi4gICovDQojaWZkZWYgX19zZ2kNCnN0YXRp YyBsb25nIGRvdWJsZSBOYU5sICgpDQp7DQogIGRvdWJsZSB6ZXJvID0gMC4wOw0KICByZXR1cm4g emVybyAvIHplcm87DQp9DQojZWxzZQ0KIyBkZWZpbmUgTmFObCgpICgwLjBMIC8gMC4wTCkNCiNl bmRpZg0KaW50IG1haW4gKCkNCnsNCiAgaW50IHJlc3VsdCA9IDA7DQoNCiAgaWYgKCFpc25hbmwg KE5hTmwgKCkpKQ0KICAgIHJlc3VsdCB8PSAxOw0KDQogIHsNCiAgICBtZW1vcnlfbG9uZ19kb3Vi bGUgbTsNCiAgICB1bnNpZ25lZCBpbnQgaTsNCg0KICAgIC8qIFRoZSBpc25hbmwgZnVuY3Rpb24g c2hvdWxkIGJlIGltbXVuZSBhZ2FpbnN0IGNoYW5nZXMgaW4gdGhlIHNpZ24gYml0IGFuZA0KICAg ICAgIGluIHRoZSBtYW50aXNzYSBiaXRzLiAgVGhlIHhvciBvcGVyYXRpb24gdHdpZGRsZXMgYSBi aXQgdGhhdCBjYW4gb25seSBiZQ0KICAgICAgIGEgc2lnbiBiaXQgb3IgYSBtYW50aXNzYSBiaXQg KHNpbmNlIHRoZSBleHBvbmVudCBuZXZlciBleHRlbmRzIHRvDQogICAgICAgYml0IDMxKS4gICov DQogICAgbS52YWx1ZSA9IE5hTmwgKCk7DQogICAgbS53b3JkW05XT1JEUyAvIDJdIF49ICh1bnNp Z25lZCBpbnQpIDEgPDwgKHNpemVvZiAodW5zaWduZWQgaW50KSAqIENIQVJfQklUIC0gMSk7DQog ICAgZm9yIChpID0gMDsgaSA8IE5XT1JEUzsgaSsrKQ0KICAgICAgbS53b3JkW2ldIHw9IDE7DQog ICAgaWYgKCFpc25hbmwgKG0udmFsdWUpKQ0KICAgICAgcmVzdWx0IHw9IDE7DQogIH0NCg0KI2lm ICgoZGVmaW5lZCBfX2lhNjQgJiYgTERCTF9NQU5UX0RJRyA9PSA2NCkgfHwgKGRlZmluZWQgX194 ODZfNjRfXyB8fCBkZWZpbmVkIF9fYW1kNjRfXykgfHwgKGRlZmluZWQgX19pMzg2IHx8IGRlZmlu ZWQgX19pMzg2X18gfHwgZGVmaW5lZCBfSTM4NiB8fCBkZWZpbmVkIF9NX0lYODYgfHwgZGVmaW5l ZCBfWDg2XykpDQovKiBSZXByZXNlbnRhdGlvbiBvZiBhbiA4MC1iaXQgJ2xvbmcgZG91YmxlJyBh cyBhbiBpbml0aWFsaXplciBmb3IgYSBzZXF1ZW5jZQ0KICAgb2YgJ3Vuc2lnbmVkIGludCcgd29y ZHMuICAqLw0KIyBpZmRlZiBXT1JEU19CSUdFTkRJQU4NCiMgIGRlZmluZSBMREJMODBfV09SRFMo ZXhwb25lbnQsbWFudGhpLG1hbnRsbykgXA0KICAgICB7ICgodW5zaWduZWQgaW50KSAoZXhwb25l bnQpIDw8IDE2KSB8ICgodW5zaWduZWQgaW50KSAobWFudGhpKSA+PiAxNiksIFwNCiAgICAgICAo KHVuc2lnbmVkIGludCkgKG1hbnRoaSkgPDwgMTYpIHwgKHVuc2lnbmVkIGludCkgKG1hbnRsbykg Pj4gMTYpLCAgICBcDQogICAgICAgKHVuc2lnbmVkIGludCkgKG1hbnRsbykgPDwgMTYgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KICAgICB9DQojIGVsc2UNCiMgIGRl ZmluZSBMREJMODBfV09SRFMoZXhwb25lbnQsbWFudGhpLG1hbnRsbykgXA0KICAgICB7IG1hbnRs bywgbWFudGhpLCBleHBvbmVudCB9DQojIGVuZGlmDQogIHsgLyogUXVpZXQgTmFOLiAgKi8NCiAg ICBzdGF0aWMgbWVtb3J5X2xvbmdfZG91YmxlIHggPQ0KICAgICAgeyBMREJMODBfV09SRFMgKDB4 RkZGRiwgMHhDMzMzMzMzMywgMHgwMDAwMDAwMCkgfTsNCiAgICBpZiAoIWlzbmFubCAoeC52YWx1 ZSkpDQogICAgICByZXN1bHQgfD0gMjsNCiAgfQ0KICB7DQogICAgLyogU2lnbmFsbGluZyBOYU4u ICAqLw0KICAgIHN0YXRpYyBtZW1vcnlfbG9uZ19kb3VibGUgeCA9DQogICAgICB7IExEQkw4MF9X T1JEUyAoMHhGRkZGLCAweDgzMzMzMzMzLCAweDAwMDAwMDAwKSB9Ow0KICAgIGlmICghaXNuYW5s ICh4LnZhbHVlKSkNCiAgICAgIHJlc3VsdCB8PSAyOw0KICB9DQogIC8qIFRoZSBpc25hbmwgZnVu Y3Rpb24gc2hvdWxkIHJlY29nbml6ZSBQc2V1ZG8tTmFOcywgUHNldWRvLUluZmluaXRpZXMsDQog ICAgIFBzZXVkby1aZXJvZXMsIFVubm9ybWFsaXplZCBOdW1iZXJzLCBhbmQgUHNldWRvLURlbm9y bWFscywgYXMgZGVmaW5lZCBpbg0KICAgICAgIEludGVsIElBLTY0IEFyY2hpdGVjdHVyZSBTb2Z0 d2FyZSBEZXZlbG9wZXIncyBNYW51YWwsIFZvbHVtZSAxOg0KICAgICAgIEFwcGxpY2F0aW9uIEFy Y2hpdGVjdHVyZS4NCiAgICAgICBUYWJsZSA1LTIgIkZsb2F0aW5nLVBvaW50IFJlZ2lzdGVyIEVu Y29kaW5ncyINCiAgICAgICBGaWd1cmUgNS02ICJNZW1vcnkgdG8gRmxvYXRpbmctUG9pbnQgUmVn aXN0ZXIgRGF0YSBUcmFuc2xhdGlvbiINCiAgICovDQogIHsgLyogUHNldWRvLU5hTi4gICovDQog ICAgc3RhdGljIG1lbW9yeV9sb25nX2RvdWJsZSB4ID0NCiAgICAgIHsgTERCTDgwX1dPUkRTICgw eEZGRkYsIDB4NDAwMDAwMDEsIDB4MDAwMDAwMDApIH07DQogICAgaWYgKCFpc25hbmwgKHgudmFs dWUpKQ0KICAgICAgcmVzdWx0IHw9IDQ7DQogIH0NCiAgeyAvKiBQc2V1ZG8tSW5maW5pdHkuICAq Lw0KICAgIHN0YXRpYyBtZW1vcnlfbG9uZ19kb3VibGUgeCA9DQogICAgICB7IExEQkw4MF9XT1JE UyAoMHhGRkZGLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwKSB9Ow0KICAgIGlmICghaXNuYW5sICh4 LnZhbHVlKSkNCiAgICAgIHJlc3VsdCB8PSA4Ow0KICB9DQogIHsgLyogUHNldWRvLVplcm8uICAq Lw0KICAgIHN0YXRpYyBtZW1vcnlfbG9uZ19kb3VibGUgeCA9DQogICAgICB7IExEQkw4MF9XT1JE UyAoMHg0MDA0LCAweDAwMDAwMDAwLCAweDAwMDAwMDAwKSB9Ow0KICAgIGlmICghaXNuYW5sICh4 LnZhbHVlKSkNCiAgICAgIHJlc3VsdCB8PSAxNjsNCiAgfQ0KICB7IC8qIFVubm9ybWFsaXplZCBu dW1iZXIuICAqLw0KICAgIHN0YXRpYyBtZW1vcnlfbG9uZ19kb3VibGUgeCA9DQogICAgICB7IExE Qkw4MF9XT1JEUyAoMHg0MDAwLCAweDYzMzMzMzMzLCAweDAwMDAwMDAwKSB9Ow0KICAgIGlmICgh aXNuYW5sICh4LnZhbHVlKSkNCiAgICAgIHJlc3VsdCB8PSAzMjsNCiAgfQ0KICB7IC8qIFBzZXVk by1EZW5vcm1hbC4gICovDQogICAgc3RhdGljIG1lbW9yeV9sb25nX2RvdWJsZSB4ID0NCiAgICAg IHsgTERCTDgwX1dPUkRTICgweDAwMDAsIDB4ODMzMzMzMzMsIDB4MDAwMDAwMDApIH07DQogICAg aWYgKCFpc25hbmwgKHgudmFsdWUpKQ0KICAgICAgcmVzdWx0IHw9IDY0Ow0KICB9DQojZW5kaWYN Cg0KICByZXR1cm4gcmVzdWx0Ow0KfQ0KX0FDRU9GDQppZiBhY19mbl9jX3RyeV9ydW4gIiRMSU5F Tk8iOyB0aGVuIDoNCiAgZ2xfY3ZfZnVuY19pc25hbmxfd29ya3M9eWVzDQplbHNlDQogIGdsX2N2 X2Z1bmNfaXNuYW5sX3dvcmtzPW5vDQpmaQ0Kcm0gLWYgY29yZSAqLmNvcmUgY29yZS5jb25mdGVz dC4qIGdtb24ub3V0IGJiLm91dCBjb25mdGVzdCRhY19leGVleHQgXA0KICBjb25mdGVzdC4kYWNf b2JqZXh0IGNvbmZ0ZXN0LmJlYW0gY29uZnRlc3QuJGFjX2V4dA0KZmkNCg0KDQpmaQ0KeyAkYXNf ZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRnbF9jdl9mdW5jX2lz bmFubF93b3JrcyIgPiY1DQokYXNfZWNobyAiJGdsX2N2X2Z1bmNfaXNuYW5sX3dvcmtzIiA+JjY7 IH0NCg0KICAgIGNhc2UgIiRnbF9jdl9mdW5jX2lzbmFubF93b3JrcyIgaW4NCiAgICAgICp5ZXMp IDs7DQogICAgICAqKSAgICBnbF9mdW5jX2lzbmFubF9ub19saWJtPW5vIDs7DQogICAgZXNhYw0K ICBmaQ0KICBpZiB0ZXN0ICRnbF9mdW5jX2lzbmFubF9ub19saWJtID0geWVzOyB0aGVuDQoNCiRh c19lY2hvICIjZGVmaW5lIEhBVkVfSVNOQU5MX0lOX0xJQkMgMSIgPj5jb25mZGVmcy5oDQoNCiAg ZWxzZQ0KDQoNCg0KDQoNCg0KDQoNCg0KICBnbF9MSUJPQkpTPSIkZ2xfTElCT0JKUyBpc25hbmwu JGFjX29iamV4dCINCg0KDQoNCiAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5F Tk99OiBjaGVja2luZyB3aGVyZSB0byBmaW5kIHRoZSBleHBvbmVudCBpbiBhICdsb25nIGRvdWJs ZSciID4mNQ0KJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hlcmUgdG8gZmluZCB0aGUgZXhwb25lbnQg aW4gYSAnbG9uZyBkb3VibGUnLi4uICIgPiY2OyB9DQppZiAke2dsX2N2X2NjX2xvbmdfZG91Ymxl X2V4cGJpdDArOn0gZmFsc2U7IHRoZW4gOg0KICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNg0K ZWxzZQ0KDQogICAgICBpZiB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IHllczsgdGhlbiA6DQoN CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsX2N2X2NjX2xvbmdfZG91YmxlX2V4cGJp dDA9InVua25vd24iDQoNCmVsc2UNCiAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRl c3QuJGFjX2V4dA0KLyogZW5kIGNvbmZkZWZzLmguICAqLw0KDQojaW5jbHVkZSA8ZmxvYXQuaD4N CiNpbmNsdWRlIDxzdGRkZWYuaD4NCiNpbmNsdWRlIDxzdGRpby5oPg0KI2luY2x1ZGUgPHN0cmlu Zy5oPg0KI2RlZmluZSBOV09SRFMgXA0KICAoKHNpemVvZiAobG9uZyBkb3VibGUpICsgc2l6ZW9m ICh1bnNpZ25lZCBpbnQpIC0gMSkgLyBzaXplb2YgKHVuc2lnbmVkIGludCkpDQp0eXBlZGVmIHVu aW9uIHsgbG9uZyBkb3VibGUgdmFsdWU7IHVuc2lnbmVkIGludCB3b3JkW05XT1JEU107IH0NCiAg ICAgICAgbWVtb3J5X2xvbmdfZG91YmxlOw0Kc3RhdGljIHVuc2lnbmVkIGludCBvcmVkX3dvcmRz W05XT1JEU107DQpzdGF0aWMgdW5zaWduZWQgaW50IGFuZGVkX3dvcmRzW05XT1JEU107DQpzdGF0 aWMgdm9pZCBhZGRfdG9fb3JlZF93b3JkcyAobG9uZyBkb3VibGUgeCkNCnsNCiAgbWVtb3J5X2xv bmdfZG91YmxlIG07DQogIHNpemVfdCBpOw0KICAvKiBDbGVhciBpdCBmaXJzdCwgaW4gY2FzZQ0K ICAgICBzaXplb2YgKGxvbmcgZG91YmxlKSA8IHNpemVvZiAobWVtb3J5X2xvbmdfZG91YmxlKS4g ICovDQogIG1lbXNldCAoJm0sIDAsIHNpemVvZiAobWVtb3J5X2xvbmdfZG91YmxlKSk7DQogIG0u dmFsdWUgPSB4Ow0KICBmb3IgKGkgPSAwOyBpIDwgTldPUkRTOyBpKyspDQogICAgew0KICAgICAg b3JlZF93b3Jkc1tpXSB8PSBtLndvcmRbaV07DQogICAgICBhbmRlZF93b3Jkc1tpXSAmPSBtLndv cmRbaV07DQogICAgfQ0KfQ0KaW50IG1haW4gKCkNCnsNCiAgc2l6ZV90IGo7DQogIEZJTEUgKmZw ID0gZm9wZW4gKCJjb25mdGVzdC5vdXQiLCAidyIpOw0KICBpZiAoZnAgPT0gTlVMTCkNCiAgICBy ZXR1cm4gMTsNCiAgZm9yIChqID0gMDsgaiA8IE5XT1JEUzsgaisrKQ0KICAgIGFuZGVkX3dvcmRz W2pdID0gfiAodW5zaWduZWQgaW50KSAwOw0KICBhZGRfdG9fb3JlZF93b3JkcyAoMC4yNUwpOw0K ICBhZGRfdG9fb3JlZF93b3JkcyAoMC41TCk7DQogIGFkZF90b19vcmVkX3dvcmRzICgxLjBMKTsN CiAgYWRkX3RvX29yZWRfd29yZHMgKDIuMEwpOw0KICBhZGRfdG9fb3JlZF93b3JkcyAoNC4wTCk7 DQogIC8qIFJlbW92ZSBiaXRzIHRoYXQgYXJlIGNvbW1vbiAoZS5nLiBpZiByZXByZXNlbnRhdGlv biBvZiB0aGUgZmlyc3QgbWFudGlzc2ENCiAgICAgYml0IGlzIGV4cGxpY2l0KS4gICovDQogIGZv ciAoaiA9IDA7IGogPCBOV09SRFM7IGorKykNCiAgICBvcmVkX3dvcmRzW2pdICY9IH5hbmRlZF93 b3Jkc1tqXTsNCiAgLyogTm93IGZpbmQgdGhlIG5vbnplcm8gd29yZC4gICovDQogIGZvciAoaiA9 IDA7IGogPCBOV09SRFM7IGorKykNCiAgICBpZiAob3JlZF93b3Jkc1tqXSAhPSAwKQ0KICAgICAg YnJlYWs7DQogIGlmIChqIDwgTldPUkRTKQ0KICAgIHsNCiAgICAgIHNpemVfdCBpOw0KICAgICAg Zm9yIChpID0gaiArIDE7IGkgPCBOV09SRFM7IGkrKykNCiAgICAgICAgaWYgKG9yZWRfd29yZHNb aV0gIT0gMCkNCiAgICAgICAgICB7DQogICAgICAgICAgICBmcHJpbnRmIChmcCwgInVua25vd24i KTsNCiAgICAgICAgICAgIHJldHVybiAoZmNsb3NlIChmcCkgIT0gMCk7DQogICAgICAgICAgfQ0K ICAgICAgZm9yIChpID0gMDsgOyBpKyspDQogICAgICAgIGlmICgob3JlZF93b3Jkc1tqXSA+PiBp KSAmIDEpDQogICAgICAgICAgew0KICAgICAgICAgICAgZnByaW50ZiAoZnAsICJ3b3JkICVkIGJp dCAlZCIsIChpbnQpIGosIChpbnQpIGkpOw0KICAgICAgICAgICAgcmV0dXJuIChmY2xvc2UgKGZw KSAhPSAwKTsNCiAgICAgICAgICB9DQogICAgfQ0KICBmcHJpbnRmIChmcCwgInVua25vd24iKTsN CiAgcmV0dXJuIChmY2xvc2UgKGZwKSAhPSAwKTsNCn0NCg0KX0FDRU9GDQppZiBhY19mbl9jX3Ry eV9ydW4gIiRMSU5FTk8iOyB0aGVuIDoNCiAgZ2xfY3ZfY2NfbG9uZ19kb3VibGVfZXhwYml0MD1g Y2F0IGNvbmZ0ZXN0Lm91dGANCmVsc2UNCiAgZ2xfY3ZfY2NfbG9uZ19kb3VibGVfZXhwYml0MD0i dW5rbm93biINCmZpDQpybSAtZiBjb3JlICouY29yZSBjb3JlLmNvbmZ0ZXN0LiogZ21vbi5vdXQg YmIub3V0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCBcDQogIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRl c3QuYmVhbSBjb25mdGVzdC4kYWNfZXh0DQpmaQ0KDQogICAgICBybSAtZiBjb25mdGVzdC5vdXQN Cg0KZmkNCnsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAk Z2xfY3ZfY2NfbG9uZ19kb3VibGVfZXhwYml0MCIgPiY1DQokYXNfZWNobyAiJGdsX2N2X2NjX2xv bmdfZG91YmxlX2V4cGJpdDAiID4mNjsgfQ0KICBjYXNlICIkZ2xfY3ZfY2NfbG9uZ19kb3VibGVf ZXhwYml0MCIgaW4NCiAgICB3b3JkKmJpdCopDQogICAgICB3b3JkPWBlY2hvICIkZ2xfY3ZfY2Nf bG9uZ19kb3VibGVfZXhwYml0MCIgfCBzZWQgLWUgJ3Mvd29yZCAvLycgLWUgJ3MvIGJpdC4qLy8n YA0KICAgICAgYml0PWBlY2hvICIkZ2xfY3ZfY2NfbG9uZ19kb3VibGVfZXhwYml0MCIgfCBzZWQg LWUgJ3Mvd29yZC4qYml0IC8vJ2ANCg0KY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRg0KI2RlZmlu ZSBMREJMX0VYUEJJVDBfV09SRCAkd29yZA0KX0FDRU9GDQoNCg0KY2F0ID4+Y29uZmRlZnMuaCA8 PF9BQ0VPRg0KI2RlZmluZSBMREJMX0VYUEJJVDBfQklUICRiaXQNCl9BQ0VPRg0KDQogICAgICA7 Ow0KICBlc2FjDQoNCg0KICBmaQ0KDQogICMgQ29kZSBmcm9tIG1vZHVsZSBpc3dibGFuazoNCg0K DQoNCg0KDQoNCiAgaWYgdGVzdCAkYWNfY3ZfZnVuY19pc3dibGFuayA9IG5vOyB0aGVuDQogICAg SEFWRV9JU1dCTEFOSz0wDQogICAgaWYgdGVzdCAkYWNfY3ZfaGF2ZV9kZWNsX2lzd2JsYW5rID0g eWVzOyB0aGVuDQogICAgICBSRVBMQUNFX0lTV0JMQU5LPTENCiAgICBmaQ0KICBmaQ0KICBpZiB0 ZXN0ICRIQVZFX0lTV0NOVFJMID0gMCB8fCB0ZXN0ICRSRVBMQUNFX0lTV0NOVFJMID0gMTsgdGhl bg0KICAgICAgICA6DQogIGVsc2UNCiAgICBpZiB0ZXN0ICRIQVZFX0lTV0JMQU5LID0gMCB8fCB0 ZXN0ICRSRVBMQUNFX0lTV0JMQU5LID0gMTsgdGhlbg0KDQoNCg0KDQoNCg0KDQoNCiAgZ2xfTElC T0JKUz0iJGdsX0xJQk9CSlMgaXN3YmxhbmsuJGFjX29iamV4dCINCg0KICAgIGZpDQogIGZpDQoN Cg0KDQoNCg0KICBHTlVMSUJfSVNXQkxBTks9MQ0KDQoNCg0KJGFzX2VjaG8gIiNkZWZpbmUgR05V TElCX1RFU1RfSVNXQkxBTksgMSIgPj5jb25mZGVmcy5oDQoNCg0KDQogICMgQ29kZSBmcm9tIG1v ZHVsZSBsYW5naW5mbzoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQogICAgIGlmIHRlc3Qg JGdsX2N2X2hhdmVfaW5jbHVkZV9uZXh0ID0geWVzOyB0aGVuDQogICAgICAgZ2xfY3ZfbmV4dF9s YW5naW5mb19oPSc8J2xhbmdpbmZvLmgnPicNCiAgICAgZWxzZQ0KICAgICAgIHsgJGFzX2VjaG8g IiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgYWJzb2x1dGUgbmFtZSBvZiA8 bGFuZ2luZm8uaD4iID4mNQ0KJGFzX2VjaG9fbiAiY2hlY2tpbmcgYWJzb2x1dGUgbmFtZSBvZiA8 bGFuZ2luZm8uaD4uLi4gIiA+JjY7IH0NCmlmICR7Z2xfY3ZfbmV4dF9sYW5naW5mb19oKzp9IGZh bHNlOyB0aGVuIDoNCiAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYNCmVsc2UNCg0KICAgICAg ICAgICAgIGlmIHRlc3QgJGFjX2N2X2hlYWRlcl9sYW5naW5mb19oID0geWVzOyB0aGVuDQoNCg0K ICAgICAgICAgICAgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4 dA0KLyogZW5kIGNvbmZkZWZzLmguICAqLw0KI2luY2x1ZGUgPGxhbmdpbmZvLmg+DQoNCl9BQ0VP Rg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgY2FzZSAiJGhvc3Rfb3MiIGluDQogICAgICAgICAgICAgICAgIGFpeCopIGdsX2Fi c25hbWVfY3BwPSIkYWNfY3BwIC1DIiA7Ow0KICAgICAgICAgICAgICAgICAqKSAgICBnbF9hYnNu YW1lX2NwcD0iJGFjX2NwcCIgOzsNCiAgICAgICAgICAgICAgIGVzYWMNCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsX2N2X25leHRf bGFuZ2luZm9faD0nIidgKGV2YWwgIiRnbF9hYnNuYW1lX2NwcCBjb25mdGVzdC4kYWNfZXh0Iikg Mj4mNSB8DQogICAgICAgICAgICAgICAgICBzZWQgLW4gJ1wjL2xhbmdpbmZvLmgjew0KICAgICAg ICAgICAgICAgICAgICBzIy4qIlwoLiovbGFuZ2luZm8uaFwpIi4qI1wxIw0KICAgICAgICAgICAg ICAgICAgICBzI14vW14vXSMvLyYjDQogICAgICAgICAgICAgICAgICAgIHANCiAgICAgICAgICAg ICAgICAgICAgcQ0KICAgICAgICAgICAgICAgICAgfSdgJyInDQogICAgICAgICAgZWxzZQ0KICAg ICAgICAgICAgICAgZ2xfY3ZfbmV4dF9sYW5naW5mb19oPSc8J2xhbmdpbmZvLmgnPicNCiAgICAg ICAgICAgICBmaQ0KDQoNCmZpDQp7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVO T306IHJlc3VsdDogJGdsX2N2X25leHRfbGFuZ2luZm9faCIgPiY1DQokYXNfZWNobyAiJGdsX2N2 X25leHRfbGFuZ2luZm9faCIgPiY2OyB9DQogICAgIGZpDQogICAgIE5FWFRfTEFOR0lORk9fSD0k Z2xfY3ZfbmV4dF9sYW5naW5mb19oDQoNCiAgICAgaWYgdGVzdCAkZ2xfY3ZfaGF2ZV9pbmNsdWRl X25leHQgPSB5ZXMgfHwgdGVzdCAkZ2xfY3ZfaGF2ZV9pbmNsdWRlX25leHQgPSBidWdneTsgdGhl bg0KICAgICAgICMgSU5DTFVERV9ORVhUX0FTX0ZJUlNUX0RJUkVDVElWRT0naW5jbHVkZV9uZXh0 Jw0KICAgICAgIGdsX25leHRfYXNfZmlyc3RfZGlyZWN0aXZlPSc8J2xhbmdpbmZvLmgnPicNCiAg ICAgZWxzZQ0KICAgICAgICMgSU5DTFVERV9ORVhUX0FTX0ZJUlNUX0RJUkVDVElWRT0naW5jbHVk ZScNCiAgICAgICBnbF9uZXh0X2FzX2ZpcnN0X2RpcmVjdGl2ZT0kZ2xfY3ZfbmV4dF9sYW5naW5m b19oDQogICAgIGZpDQogICAgIE5FWFRfQVNfRklSU1RfRElSRUNUSVZFX0xBTkdJTkZPX0g9JGds X25leHRfYXNfZmlyc3RfZGlyZWN0aXZlDQoNCg0KDQoNCg0KICAgIEhBVkVfTEFOR0lORk9fQ09E RVNFVD0wDQogIEhBVkVfTEFOR0lORk9fVF9GTVRfQU1QTT0wDQogIEhBVkVfTEFOR0lORk9fRVJB PTANCiAgSEFWRV9MQU5HSU5GT19ZRVNFWFBSPTANCg0KICBpZiB0ZXN0ICRhY19jdl9oZWFkZXJf bGFuZ2luZm9faCA9IHllczsgdGhlbg0KICAgIEhBVkVfTEFOR0lORk9fSD0xDQogICAgICAgICAg ICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRo ZXIgbGFuZ2luZm8uaCBkZWZpbmVzIENPREVTRVQiID4mNQ0KJGFzX2VjaG9fbiAiY2hlY2tpbmcg d2hldGhlciBsYW5naW5mby5oIGRlZmluZXMgQ09ERVNFVC4uLiAiID4mNjsgfQ0KaWYgJHtnbF9j dl9oZWFkZXJfbGFuZ2luZm9fY29kZXNldCs6fSBmYWxzZTsgdGhlbiA6DQogICRhc19lY2hvX24g IihjYWNoZWQpICIgPiY2DQplbHNlDQogIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0 ZXN0LiRhY19leHQNCi8qIGVuZCBjb25mZGVmcy5oLiAgKi8NCiNpbmNsdWRlIDxsYW5naW5mby5o Pg0KaW50IGEgPSBDT0RFU0VUOw0KDQppbnQNCm1haW4gKCkNCnsNCg0KICA7DQogIHJldHVybiAw Ow0KfQ0KX0FDRU9GDQppZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6DQog IGdsX2N2X2hlYWRlcl9sYW5naW5mb19jb2Rlc2V0PXllcw0KZWxzZQ0KICBnbF9jdl9oZWFkZXJf bGFuZ2luZm9fY29kZXNldD1ubw0KZmkNCnJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0 LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dA0KDQpmaQ0KeyAkYXNfZWNobyAiJGFzX21lOiR7 YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRnbF9jdl9oZWFkZXJfbGFuZ2luZm9fY29kZXNl dCIgPiY1DQokYXNfZWNobyAiJGdsX2N2X2hlYWRlcl9sYW5naW5mb19jb2Rlc2V0IiA+JjY7IH0N CiAgICBpZiB0ZXN0ICRnbF9jdl9oZWFkZXJfbGFuZ2luZm9fY29kZXNldCA9IHllczsgdGhlbg0K ICAgICAgSEFWRV9MQU5HSU5GT19DT0RFU0VUPTENCiAgICBmaQ0KICAgIHsgJGFzX2VjaG8gIiRh c19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciBsYW5naW5mby5oIGRl ZmluZXMgVF9GTVRfQU1QTSIgPiY1DQokYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIGxhbmdp bmZvLmggZGVmaW5lcyBUX0ZNVF9BTVBNLi4uICIgPiY2OyB9DQppZiAke2dsX2N2X2hlYWRlcl9s YW5naW5mb190X2ZtdF9hbXBtKzp9IGZhbHNlOyB0aGVuIDoNCiAgJGFzX2VjaG9fbiAiKGNhY2hl ZCkgIiA+JjYNCmVsc2UNCiAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFj X2V4dA0KLyogZW5kIGNvbmZkZWZzLmguICAqLw0KI2luY2x1ZGUgPGxhbmdpbmZvLmg+DQppbnQg YSA9IFRfRk1UX0FNUE07DQoNCmludA0KbWFpbiAoKQ0Kew0KDQogIDsNCiAgcmV0dXJuIDA7DQp9 DQpfQUNFT0YNCmlmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoNCiAgZ2xf Y3ZfaGVhZGVyX2xhbmdpbmZvX3RfZm10X2FtcG09eWVzDQplbHNlDQogIGdsX2N2X2hlYWRlcl9s YW5naW5mb190X2ZtdF9hbXBtPW5vDQpmaQ0Kcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRl c3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0DQoNCmZpDQp7ICRhc19lY2hvICIkYXNfbWU6 JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGdsX2N2X2hlYWRlcl9sYW5naW5mb190X2Zt dF9hbXBtIiA+JjUNCiRhc19lY2hvICIkZ2xfY3ZfaGVhZGVyX2xhbmdpbmZvX3RfZm10X2FtcG0i ID4mNjsgfQ0KICAgIGlmIHRlc3QgJGdsX2N2X2hlYWRlcl9sYW5naW5mb190X2ZtdF9hbXBtID0g eWVzOyB0aGVuDQogICAgICBIQVZFX0xBTkdJTkZPX1RfRk1UX0FNUE09MQ0KICAgIGZpDQogICAg eyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVy IGxhbmdpbmZvLmggZGVmaW5lcyBFUkEiID4mNQ0KJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhl ciBsYW5naW5mby5oIGRlZmluZXMgRVJBLi4uICIgPiY2OyB9DQppZiAke2dsX2N2X2hlYWRlcl9s YW5naW5mb19lcmErOn0gZmFsc2U7IHRoZW4gOg0KICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4m Ng0KZWxzZQ0KICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0DQov KiBlbmQgY29uZmRlZnMuaC4gICovDQojaW5jbHVkZSA8bGFuZ2luZm8uaD4NCmludCBhID0gRVJB Ow0KDQppbnQNCm1haW4gKCkNCnsNCg0KICA7DQogIHJldHVybiAwOw0KfQ0KX0FDRU9GDQppZiBh Y19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6DQogIGdsX2N2X2hlYWRlcl9sYW5n aW5mb19lcmE9eWVzDQplbHNlDQogIGdsX2N2X2hlYWRlcl9sYW5naW5mb19lcmE9bm8NCmZpDQpy bSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19l eHQNCg0KZmkNCnsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0 OiAkZ2xfY3ZfaGVhZGVyX2xhbmdpbmZvX2VyYSIgPiY1DQokYXNfZWNobyAiJGdsX2N2X2hlYWRl cl9sYW5naW5mb19lcmEiID4mNjsgfQ0KICAgIGlmIHRlc3QgJGdsX2N2X2hlYWRlcl9sYW5naW5m b19lcmEgPSB5ZXM7IHRoZW4NCiAgICAgIEhBVkVfTEFOR0lORk9fRVJBPTENCiAgICBmaQ0KICAg IHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhl ciBsYW5naW5mby5oIGRlZmluZXMgWUVTRVhQUiIgPiY1DQokYXNfZWNob19uICJjaGVja2luZyB3 aGV0aGVyIGxhbmdpbmZvLmggZGVmaW5lcyBZRVNFWFBSLi4uICIgPiY2OyB9DQppZiAke2dsX2N2 X2hlYWRlcl9sYW5naW5mb195ZXNleHByKzp9IGZhbHNlOyB0aGVuIDoNCiAgJGFzX2VjaG9fbiAi KGNhY2hlZCkgIiA+JjYNCmVsc2UNCiAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRl c3QuJGFjX2V4dA0KLyogZW5kIGNvbmZkZWZzLmguICAqLw0KI2luY2x1ZGUgPGxhbmdpbmZvLmg+ DQppbnQgYSA9IFlFU0VYUFI7DQoNCmludA0KbWFpbiAoKQ0Kew0KDQogIDsNCiAgcmV0dXJuIDA7 DQp9DQpfQUNFT0YNCmlmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoNCiAg Z2xfY3ZfaGVhZGVyX2xhbmdpbmZvX3llc2V4cHI9eWVzDQplbHNlDQogIGdsX2N2X2hlYWRlcl9s YW5naW5mb195ZXNleHByPW5vDQpmaQ0Kcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3Qu JGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0DQoNCmZpDQp7ICRhc19lY2hvICIkYXNfbWU6JHth c19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGdsX2N2X2hlYWRlcl9sYW5naW5mb195ZXNleHBy IiA+JjUNCiRhc19lY2hvICIkZ2xfY3ZfaGVhZGVyX2xhbmdpbmZvX3llc2V4cHIiID4mNjsgfQ0K ICAgIGlmIHRlc3QgJGdsX2N2X2hlYWRlcl9sYW5naW5mb195ZXNleHByID0geWVzOyB0aGVuDQog ICAgICBIQVZFX0xBTkdJTkZPX1lFU0VYUFI9MQ0KICAgIGZpDQogIGVsc2UNCiAgICBIQVZFX0xB TkdJTkZPX0g9MA0KICBmaQ0KDQoNCg0KDQoNCg0KDQogICAgZm9yIGdsX2Z1bmMgaW4gbmxfbGFu Z2luZm87IGRvDQogICAgYXNfZ2xfU3ltYm9sPWAkYXNfZWNobyAiZ2xfY3ZfaGF2ZV9yYXdfZGVj bF8kZ2xfZnVuYyIgfCAkYXNfdHJfc2hgDQogICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGlu ZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyICRnbF9mdW5jIGlzIGRlY2xhcmVkIHdpdGhv dXQgYSBtYWNybyIgPiY1DQokYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyICRnbF9mdW5jIGlz IGRlY2xhcmVkIHdpdGhvdXQgYSBtYWNyby4uLiAiID4mNjsgfQ0KaWYgZXZhbCBcJHskYXNfZ2xf U3ltYm9sKzp9IGZhbHNlOyB0aGVuIDoNCiAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYNCmVs c2UNCiAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dA0KLyogZW5k IGNvbmZkZWZzLmguICAqLw0KI2luY2x1ZGUgPGxhbmdpbmZvLmg+DQoNCmludA0KbWFpbiAoKQ0K ew0KI3VuZGVmICRnbF9mdW5jDQogICh2b2lkKSAkZ2xfZnVuYzsNCiAgOw0KICByZXR1cm4gMDsN Cn0NCl9BQ0VPRg0KaWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOg0KICBl dmFsICIkYXNfZ2xfU3ltYm9sPXllcyINCmVsc2UNCiAgZXZhbCAiJGFzX2dsX1N5bWJvbD1ubyIN CmZpDQpybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0 LiRhY19leHQNCmZpDQpldmFsIGFjX3Jlcz1cJCRhc19nbF9TeW1ib2wNCgkgICAgICAgeyAkYXNf ZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19yZXMiID4mNQ0K JGFzX2VjaG8gIiRhY19yZXMiID4mNjsgfQ0KICAgICBpZiBldmFsIHRlc3QgXCJ4XCQiJGFzX2ds X1N5bWJvbCJcIiA9IHgieWVzIjsgdGhlbiA6DQogIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YN CiNkZWZpbmUgYCRhc19lY2hvICJIQVZFX1JBV19ERUNMXyRnbF9mdW5jIiB8ICRhc190cl9jcHBg IDENCl9BQ0VPRg0KDQogICAgICAgICAgICAgICAgICAgICBldmFsIGFjX2N2X2hhdmVfZGVjbF8k Z2xfZnVuYz15ZXMNCmZpDQogICAgICBkb25lDQoNCg0KICAjIENvZGUgZnJvbSBtb2R1bGUgbGNo bW9kOg0KDQoNCg0KDQoNCg0KICBpZiB0ZXN0ICRhY19jdl9mdW5jX2xjaG1vZCA9IG5vOyB0aGVu DQogICAgSEFWRV9MQ0hNT0Q9MA0KICBmaQ0KDQoNCg0KDQogIEdOVUxJQl9MQ0hNT0Q9MQ0KDQoN Cg0KJGFzX2VjaG8gIiNkZWZpbmUgR05VTElCX1RFU1RfTENITU9EIDEiID4+Y29uZmRlZnMuaA0K DQoNCg0KICAjIENvZGUgZnJvbSBtb2R1bGUgbGNob3duOg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoN Cg0KICBmb3IgYWNfZnVuYyBpbiBsY2hvd24NCmRvIDoNCiAgYWNfZm5fY19jaGVja19mdW5jICIk TElORU5PIiAibGNob3duIiAiYWNfY3ZfZnVuY19sY2hvd24iDQppZiB0ZXN0ICJ4JGFjX2N2X2Z1 bmNfbGNob3duIiA9IHh5ZXM7IHRoZW4gOg0KICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GDQoj ZGVmaW5lIEhBVkVfTENIT1dOIDENCl9BQ0VPRg0KDQplbHNlDQoNCiAgICBnbF9MSUJPQkpTPSIk Z2xfTElCT0JKUyAkYWNfZnVuYy4kYWNfb2JqZXh0Ig0KDQpmaQ0KZG9uZQ0KDQoNCiAgaWYgdGVz dCAkYWNfY3ZfZnVuY19sY2hvd24gPSBubzsgdGhlbg0KICAgIEhBVkVfTENIT1dOPTANCiAgZWxp ZiB0ZXN0ICIkZ2xfY3ZfZnVuY19jaG93bl9zbGFzaF93b3JrcyIgIT0geWVzIFwNCiAgICAgIHx8 IHRlc3QgIiRnbF9jdl9mdW5jX2Nob3duX2N0aW1lX3dvcmtzIiAhPSB5ZXM7IHRoZW4NCg0KDQoN Cg0KDQoNCg0KDQogIGdsX0xJQk9CSlM9IiRnbF9MSUJPQkpTIGxjaG93bi4kYWNfb2JqZXh0Ig0K DQogICAgUkVQTEFDRV9MQ0hPV049MQ0KICBmaQ0KDQoNCg0KDQogIEdOVUxJQl9MQ0hPV049MQ0K DQoNCg0KJGFzX2VjaG8gIiNkZWZpbmUgR05VTElCX1RFU1RfTENIT1dOIDEiID4+Y29uZmRlZnMu aA0KDQoNCg0KICAjIENvZGUgZnJvbSBtb2R1bGUgbGR0b2FzdHI6DQoNCiAgIyBDb2RlIGZyb20g bW9kdWxlIGxpYi1pZ25vcmU6DQoNCiAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRM SU5FTk99OiBjaGVja2luZyBmb3IgQyBjb21waWxlciBmbGFnIHRvIGlnbm9yZSB1bnVzZWQgbGli cmFyaWVzIiA+JjUNCiRhc19lY2hvX24gImNoZWNraW5nIGZvciBDIGNvbXBpbGVyIGZsYWcgdG8g aWdub3JlIHVudXNlZCBsaWJyYXJpZXMuLi4gIiA+JjY7IH0NCmlmICR7Z2xfY3ZfcHJvZ19jX2ln bm9yZV91bnVzZWRfbGlicmFyaWVzKzp9IGZhbHNlOyB0aGVuIDoNCiAgJGFzX2VjaG9fbiAiKGNh Y2hlZCkgIiA+JjYNCmVsc2UNCiAgZ2xfY3ZfcHJvZ19jX2lnbm9yZV91bnVzZWRfbGlicmFyaWVz PW5vbmUNCiAgICAgZ2xfc2F2ZWRfbGRmbGFncz0kTERGTEFHUw0KICAgICBnbF9zYXZlZF9saWJz PSRMSUJTDQogICAgICMgTGluayB3aXRoIC1sbSB0byBkZXRlY3QgYmludXRpbHMgMi4xNiBidWcg d2l0aCAtLWFzLW5lZWRlZDsgc2VlDQogICAgICMgPGh0dHA6Ly9saXN0cy5nbnUub3JnL2FyY2hp dmUvaHRtbC9idWctZ251bGliLzIwMDYtMDYvbXNnMDAxMzEuaHRtbD4uDQogICAgIExJQlM9IiRM SUJTIC1sbSINCiAgICAgIyBVc2UgbG9uZyBvcHRpb24gc2VxdWVuY2VzIGxpa2UgJy16IGlnbm9y ZScgdG8gdGVzdCBmb3IgdGhlIGZlYXR1cmUsDQogICAgICMgdG8gZm9yZXN0YWxsIHByb2JsZW1z IHdpdGggbGlua2VycyB0aGF0IGhhdmUgLXosIC1pLCAtZywgLW4sIGV0Yy4gZmxhZ3MuDQogICAg ICMgR0NDICsgYmludXRpbHMgbGlrZXMgJy1XbCwtLWFzLW5lZWRlZCcuDQogICAgICMgR0NDICsg U29sYXJpcyBsZCBsaWtlcyAnLVdsLC16LGlnbm9yZScuDQogICAgICMgU3VuIEMgbGlrZXMgJy1X bCwteixpZ25vcmUnLiAnLXogaWdub3JlJyBpcyBhY2NlcHRlZCBidXQgaGFzIG5vIGVmZmVjdC4N CiAgICAgIyBEb24ndCB0cnkgYmFyZSAnLS1hcy1uZWVkZWQnOyBub3RoaW5nIGxpa2VzIGl0IGFu ZCB0aGUgSFAtVVggMTEuMTENCiAgICAgIyBuYXRpdmUgY2MgaXNzdWVzIGFubm95aW5nIHdhcm5p bmdzIGFuZCB0aGVuIGlnbm9yZXMgaXQsDQogICAgICMgd2hpY2ggd291bGQgY2F1c2UgdXMgdG8g aW5jb3JyZWN0bHkgY29uY2x1ZGUgdGhhdCBpdCB3b3JrZWQuDQogICAgIGZvciBnbF9mbGFncyBp biAgJy1XbCwtLWFzLW5lZWRlZCcgXA0KICAnLVdsLC16LGlnbm9yZScgXA0KICAnLXogaWdub3Jl Jw0KDQogICAgIGRvDQogICAgICAgTERGTEFHUz0iJGdsX2ZsYWdzICRMREZMQUdTIg0KICAgICAg IGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQNCi8qIGVuZCBjb25m ZGVmcy5oLiAgKi8NCg0KaW50DQptYWluICgpDQp7DQoNCiAgOw0KICByZXR1cm4gMDsNCn0NCl9B Q0VPRg0KaWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOg0KICBnbF9jdl9wcm9n X2NfaWdub3JlX3VudXNlZF9saWJyYXJpZXM9JGdsX2ZsYWdzDQpmaQ0Kcm0gLWYgY29yZSBjb25m dGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcDQogICAgY29uZnRlc3QkYWNfZXhlZXh0IGNv bmZ0ZXN0LiRhY19leHQNCiAgICAgICBMREZMQUdTPSRnbF9zYXZlZF9sZGZsYWdzDQogICAgICAg dGVzdCAiJGdsX2N2X3Byb2dfY19pZ25vcmVfdW51c2VkX2xpYnJhcmllcyIgIT0gbm9uZSAmJg0K ICAgICAgICAgYnJlYWsNCiAgICAgZG9uZQ0KICAgICBMSUJTPSRnbF9zYXZlZF9saWJzDQoNCmZp DQp7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGdsX2N2 X3Byb2dfY19pZ25vcmVfdW51c2VkX2xpYnJhcmllcyIgPiY1DQokYXNfZWNobyAiJGdsX2N2X3By b2dfY19pZ25vcmVfdW51c2VkX2xpYnJhcmllcyIgPiY2OyB9DQogIElHTk9SRV9VTlVTRURfTElC UkFSSUVTX0NGTEFHUz0NCiAgaWYgdGVzdCAiJGdsX2N2X3Byb2dfY19pZ25vcmVfdW51c2VkX2xp YnJhcmllcyIgIT0gbm9uZTsgdGhlbg0KICAgIElHTk9SRV9VTlVTRURfTElCUkFSSUVTX0NGTEFH Uz0iJGdsX2N2X3Byb2dfY19pZ25vcmVfdW51c2VkX2xpYnJhcmllcyINCiAgZmkNCg0KDQogICMg Q29kZSBmcm9tIG1vZHVsZSBsaW5lYnVmZmVyOg0KICAjIENvZGUgZnJvbSBtb2R1bGUgbGluazoN Cg0KDQoNCiAgaWYgdGVzdCAkYWNfY3ZfZnVuY19saW5rID0gbm87IHRoZW4NCiAgICBIQVZFX0xJ Tks9MA0KDQoNCg0KDQoNCg0KDQoNCiAgZ2xfTElCT0JKUz0iJGdsX0xJQk9CSlMgbGluay4kYWNf b2JqZXh0Ig0KDQogIGVsc2UNCiAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJ TkVOT306IGNoZWNraW5nIHdoZXRoZXIgbGluayBoYW5kbGVzIHRyYWlsaW5nIHNsYXNoIGNvcnJl Y3RseSIgPiY1DQokYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIGxpbmsgaGFuZGxlcyB0cmFp bGluZyBzbGFzaCBjb3JyZWN0bHkuLi4gIiA+JjY7IH0NCmlmICR7Z2xfY3ZfZnVuY19saW5rX3dv cmtzKzp9IGZhbHNlOyB0aGVuIDoNCiAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYNCmVsc2UN CiAgdG91Y2ggY29uZnRlc3QuYQ0KICAgICAgICMgQXNzdW1lIHRoYXQgaWYgd2UgaGF2ZSBsc3Rh dCwgd2UgY2FuIGFsc28gY2hlY2sgc3ltbGlua3MuDQogICAgICAgaWYgdGVzdCAkYWNfY3ZfZnVu Y19sc3RhdCA9IHllczsgdGhlbg0KICAgICAgICAgbG4gLXMgY29uZnRlc3QuYSBjb25mdGVzdC5s bmsNCiAgICAgICBmaQ0KICAgICAgIGlmIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0geWVzOyB0 aGVuIDoNCiAgZ2xfY3ZfZnVuY19saW5rX3dvcmtzPSJndWVzc2luZyBubyINCmVsc2UNCiAgY2F0 IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dA0KLyogZW5kIGNvbmZkZWZz LmguICAqLw0KI2luY2x1ZGUgPHVuaXN0ZC5oPg0KDQppbnQNCm1haW4gKCkNCnsNCmludCByZXN1 bHQgPSAwOw0KICAgICAgICAgICAgIGlmICghbGluayAoImNvbmZ0ZXN0LmEiLCAiY29uZnRlc3Qu Yi8iKSkNCiAgICAgICAgICAgICAgIHJlc3VsdCB8PSAxOw0KI2lmIEhBVkVfTFNUQVQNCiAgICAg ICAgICAgICBpZiAoIWxpbmsgKCJjb25mdGVzdC5sbmsvIiwgImNvbmZ0ZXN0LmIiKSkNCiAgICAg ICAgICAgICAgIHJlc3VsdCB8PSAyOw0KI2VuZGlmDQogICAgICAgICAgICAgcmV0dXJuIHJlc3Vs dDsNCg0KICA7DQogIHJldHVybiAwOw0KfQ0KX0FDRU9GDQppZiBhY19mbl9jX3RyeV9ydW4gIiRM SU5FTk8iOyB0aGVuIDoNCiAgZ2xfY3ZfZnVuY19saW5rX3dvcmtzPXllcw0KZWxzZQ0KICBnbF9j dl9mdW5jX2xpbmtfd29ya3M9bm8NCmZpDQpybSAtZiBjb3JlICouY29yZSBjb3JlLmNvbmZ0ZXN0 LiogZ21vbi5vdXQgYmIub3V0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCBcDQogIGNvbmZ0ZXN0LiRhY19v YmpleHQgY29uZnRlc3QuYmVhbSBjb25mdGVzdC4kYWNfZXh0DQpmaQ0KDQogICAgICAgcm0gLWYg Y29uZnRlc3QuYSBjb25mdGVzdC5iIGNvbmZ0ZXN0Lmxuaw0KZmkNCnsgJGFzX2VjaG8gIiRhc19t ZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkZ2xfY3ZfZnVuY19saW5rX3dvcmtzIiA+ JjUNCiRhc19lY2hvICIkZ2xfY3ZfZnVuY19saW5rX3dvcmtzIiA+JjY7IH0NCiAgICBpZiB0ZXN0 ICIkZ2xfY3ZfZnVuY19saW5rX3dvcmtzIiAhPSB5ZXM7IHRoZW4NCiAgICAgIFJFUExBQ0VfTElO Sz0xDQoNCg0KDQoNCg0KDQoNCg0KICBnbF9MSUJPQkpTPSIkZ2xfTElCT0JKUyBsaW5rLiRhY19v YmpleHQiDQoNCiAgICBmaQ0KICBmaQ0KDQoNCg0KDQogIEdOVUxJQl9MSU5LPTENCg0KDQoNCiRh c19lY2hvICIjZGVmaW5lIEdOVUxJQl9URVNUX0xJTksgMSIgPj5jb25mZGVmcy5oDQoNCg0KDQog ICMgQ29kZSBmcm9tIG1vZHVsZSBsaW5rLWZvbGxvdzoNCg0KICAgICAgICAgIGdsX2xpbmtfZm9s bG93c19zeW1saW5rcz0wICMgYXNzdW1lIEdOVSBiZWhhdmlvcg0KICBpZiB0ZXN0ICRhY19jdl9m dW5jX3JlYWRsaW5rID0geWVzOyB0aGVuDQogICAgICAgICAgICAgICAgeyAkYXNfZWNobyAiJGFz X21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgX194cGc0IiA+JjUNCiRhc19l Y2hvX24gImNoZWNraW5nIGZvciBfX3hwZzQuLi4gIiA+JjY7IH0NCmlmICR7Z2xfY3ZfaGF2ZV9f X3hwZzQrOn0gZmFsc2U7IHRoZW4gOg0KICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNg0KZWxz ZQ0KICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0DQovKiBlbmQg Y29uZmRlZnMuaC4gICovDQpleHRlcm4gaW50IF9feHBnNDsNCmludA0KbWFpbiAoKQ0Kew0KcmV0 dXJuIF9feHBnNDsNCiAgOw0KICByZXR1cm4gMDsNCn0NCl9BQ0VPRg0KaWYgYWNfZm5fY190cnlf bGluayAiJExJTkVOTyI7IHRoZW4gOg0KICBnbF9jdl9oYXZlX19feHBnND15ZXMNCmVsc2UNCiAg Z2xfY3ZfaGF2ZV9fX3hwZzQ9bm8NCmZpDQpybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVz dC4kYWNfb2JqZXh0IFwNCiAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dA0K DQpmaQ0KeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRn bF9jdl9oYXZlX19feHBnNCIgPiY1DQokYXNfZWNobyAiJGdsX2N2X2hhdmVfX194cGc0IiA+JjY7 IH0NCiAgICBpZiB0ZXN0ICRnbF9jdl9oYXZlX19feHBnNCA9IHllczsgdGhlbg0KICAgICAgZ2xf bGlua19mb2xsb3dzX3N5bWxpbmtzPS0xDQogICAgZWxzZQ0KICAgICAgeyAkYXNfZWNobyAiJGFz X21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIGxpbmsoMikgZGVyZWZl cmVuY2VzIGEgc3ltbGluayIgPiY1DQokYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIGxpbmso MikgZGVyZWZlcmVuY2VzIGEgc3ltbGluay4uLiAiID4mNjsgfQ0KaWYgJHtnbF9jdl9mdW5jX2xp bmtfZm9sbG93c19zeW1saW5rKzp9IGZhbHNlOyB0aGVuIDoNCiAgJGFzX2VjaG9fbiAiKGNhY2hl ZCkgIiA+JjYNCmVsc2UNCg0KICAgICAgICAgIyBDcmVhdGUgYSByZWd1bGFyIGZpbGUuDQogICAg ICAgICBlY2hvID4gY29uZnRlc3QuZmlsZQ0KICAgICAgICAgaWYgdGVzdCAiJGNyb3NzX2NvbXBp bGluZyIgPSB5ZXM7IHRoZW4gOg0KICAgICAgICAgICAgIGdsX2N2X2Z1bmNfbGlua19mb2xsb3dz X3N5bWxpbms9dW5rbm93bg0KZWxzZQ0KICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25m dGVzdC4kYWNfZXh0DQovKiBlbmQgY29uZmRlZnMuaC4gICovDQoNCiMgICAgICAgaW5jbHVkZSA8 c3lzL3R5cGVzLmg+DQojICAgICAgIGluY2x1ZGUgPHN5cy9zdGF0Lmg+DQojICAgICAgIGluY2x1 ZGUgPHVuaXN0ZC5oPg0KIyAgICAgICBpbmNsdWRlIDxzdGRsaWIuaD4NCg0KIyAgICAgICBkZWZp bmUgU0FNRV9JTk9ERShTdGF0X2J1Zl8xLCBTdGF0X2J1Zl8yKSBcDQogICAgICAgICAgKChTdGF0 X2J1Zl8xKS5zdF9pbm8gPT0gKFN0YXRfYnVmXzIpLnN0X2lubyBcDQogICAgICAgICAgICYmIChT dGF0X2J1Zl8xKS5zdF9kZXYgPT0gKFN0YXRfYnVmXzIpLnN0X2RldikNCg0KICAgICAgICBpbnQN CiAgICAgICAgbWFpbiAoKQ0KICAgICAgICB7DQogICAgICAgICAgY29uc3QgY2hhciAqZmlsZSA9 ICJjb25mdGVzdC5maWxlIjsNCiAgICAgICAgICBjb25zdCBjaGFyICpzeW0gPSAiY29uZnRlc3Qu c3ltIjsNCiAgICAgICAgICBjb25zdCBjaGFyICpoYXJkID0gImNvbmZ0ZXN0LmhhcmQiOw0KICAg ICAgICAgIHN0cnVjdCBzdGF0IHNiX2ZpbGUsIHNiX2hhcmQ7DQoNCiAgICAgICAgICAvKiBDcmVh dGUgYSBzeW1saW5rIHRvIHRoZSByZWd1bGFyIGZpbGUuICovDQogICAgICAgICAgaWYgKHN5bWxp bmsgKGZpbGUsIHN5bSkpDQogICAgICAgICAgICByZXR1cm4gMjsNCg0KICAgICAgICAgIC8qIENy ZWF0ZSBhIGhhcmQgbGluayB0byB0aGF0IHN5bWxpbmsuICAqLw0KICAgICAgICAgIGlmIChsaW5r IChzeW0sIGhhcmQpKQ0KICAgICAgICAgICAgcmV0dXJuIDM7DQoNCiAgICAgICAgICBpZiAobHN0 YXQgKGhhcmQsICZzYl9oYXJkKSkNCiAgICAgICAgICAgIHJldHVybiA0Ow0KICAgICAgICAgIGlm IChsc3RhdCAoZmlsZSwgJnNiX2ZpbGUpKQ0KICAgICAgICAgICAgcmV0dXJuIDU7DQoNCiAgICAg ICAgICAvKiBJZiB0aGUgZGV2L2lub2RlIG9mIGhhcmQgYW5kIGZpbGUgYXJlIHRoZSBzYW1lLCB0 aGVuDQogICAgICAgICAgICAgdGhlIGxpbmsgY2FsbCBmb2xsb3dlZCB0aGUgc3ltbGluay4gICov DQogICAgICAgICAgcmV0dXJuIFNBTUVfSU5PREUgKHNiX2hhcmQsIHNiX2ZpbGUpID8gMSA6IDA7 DQogICAgICAgIH0NCg0KX0FDRU9GDQppZiBhY19mbl9jX3RyeV9ydW4gIiRMSU5FTk8iOyB0aGVu IDoNCiAgZ2xfY3ZfZnVuY19saW5rX2ZvbGxvd3Nfc3ltbGluaz1ubw0KZWxzZQ0KICAgICAgICAg ICAgIGdsX2N2X2Z1bmNfbGlua19mb2xsb3dzX3N5bWxpbms9eWVzDQpmaQ0Kcm0gLWYgY29yZSAq LmNvcmUgY29yZS5jb25mdGVzdC4qIGdtb24ub3V0IGJiLm91dCBjb25mdGVzdCRhY19leGVleHQg XA0KICBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LmJlYW0gY29uZnRlc3QuJGFjX2V4dA0K ZmkNCg0KICAgICAgICAgcm0gLWYgY29uZnRlc3QuZmlsZSBjb25mdGVzdC5zeW0gY29uZnRlc3Qu aGFyZA0KDQpmaQ0KeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1 bHQ6ICRnbF9jdl9mdW5jX2xpbmtfZm9sbG93c19zeW1saW5rIiA+JjUNCiRhc19lY2hvICIkZ2xf Y3ZfZnVuY19saW5rX2ZvbGxvd3Nfc3ltbGluayIgPiY2OyB9DQogICAgICBjYXNlICRnbF9jdl9m dW5jX2xpbmtfZm9sbG93c19zeW1saW5rIGluDQogICAgICAgIHllcykgZ2xfbGlua19mb2xsb3dz X3N5bWxpbmtzPTEgOzsNCiAgICAgICAgbm8pIDs7ICMgYWxyZWFkeSBkZWZhdWx0ZWQgdG8gMA0K ICAgICAgICAqKSBnbF9saW5rX2ZvbGxvd3Nfc3ltbGlua3M9LTIgOzsNCiAgICAgIGVzYWMNCiAg ICBmaQ0KICBmaQ0KDQpjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GDQojZGVmaW5lIExJTktfRk9M TE9XU19TWU1MSU5LUyAkZ2xfbGlua19mb2xsb3dzX3N5bWxpbmtzDQpfQUNFT0YNCg0KDQogICMg Q29kZSBmcm9tIG1vZHVsZSBsaW5rYXQ6DQoNCg0KDQoNCg0KDQoNCg0KICBpZiB0ZXN0ICRhY19j dl9mdW5jX2xpbmthdCA9IG5vOyB0aGVuDQogICAgSEFWRV9MSU5LQVQ9MA0KDQoNCg0KDQoNCg0K DQoNCiAgZ2xfTElCT0JKUz0iJGdsX0xJQk9CSlMgbGlua2F0LiRhY19vYmpleHQiDQoNCg0KDQoN Cg0KDQoNCg0KDQogIGdsX0xJQk9CSlM9IiRnbF9MSUJPQkpTIGF0LWZ1bmMyLiRhY19vYmpleHQi DQoNCiAgZWxzZQ0KICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTog Y2hlY2tpbmcgd2hldGhlciBsaW5rYXQoLEFUX1NZTUxJTktfRk9MTE9XKSB3b3JrcyIgPiY1DQok YXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIGxpbmthdCgsQVRfU1lNTElOS19GT0xMT1cpIHdv cmtzLi4uICIgPiY2OyB9DQppZiAke2dsX2N2X2Z1bmNfbGlua2F0X2ZvbGxvdys6fSBmYWxzZTsg dGhlbiA6DQogICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2DQplbHNlDQogIHJtIC1yZiBjb25m dGVzdC5mMSBjb25mdGVzdC5mMg0KICAgICAgIHRvdWNoIGNvbmZ0ZXN0LmYxDQogICAgICAgY2F0 IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dA0KLyogZW5kIGNvbmZkZWZz LmguICAqLw0KDQojaW5jbHVkZSA8ZmNudGwuaD4NCiNpbmNsdWRlIDx1bmlzdGQuaD4NCiNpZmRl ZiBfX2xpbnV4X18NCi8qIExpbnV4IGFkZGVkIGxpbmthdCBpbiAyLjYuMTYsIGJ1dCBkaWQgbm90 IGFkZCBBVF9TWU1MSU5LX0ZPTExPVw0KICAgdW50aWwgMi42LjE4LiAgQWx3YXlzIHJlcGxhY2Ug bGlua2F0IHRvIHN1cHBvcnQgb2xkZXIga2VybmVscy4gICovDQpjaG9rZSBtZQ0KI2VuZGlmDQoN CmludA0KbWFpbiAoKQ0Kew0KcmV0dXJuIGxpbmthdCAoQVRfRkRDV0QsICJjb25mdGVzdC5mMSIs IEFUX0ZEQ1dELCAiY29uZnRlc3QuZjIiLA0KICAgICAgICAgICAgICAgICAgICBBVF9TWU1MSU5L X0ZPTExPVyk7DQogIDsNCiAgcmV0dXJuIDA7DQp9DQpfQUNFT0YNCmlmIGFjX2ZuX2NfdHJ5X2Nv bXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoNCiAgZ2xfY3ZfZnVuY19saW5rYXRfZm9sbG93PXllcw0K ZWxzZQ0KICBnbF9jdl9mdW5jX2xpbmthdF9mb2xsb3c9Im5lZWQgcnVudGltZSBjaGVjayINCmZp DQpybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRh Y19leHQNCiAgICAgICBybSAtcmYgY29uZnRlc3QuZjEgY29uZnRlc3QuZjINCmZpDQp7ICRhc19l Y2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGdsX2N2X2Z1bmNfbGlu a2F0X2ZvbGxvdyIgPiY1DQokYXNfZWNobyAiJGdsX2N2X2Z1bmNfbGlua2F0X2ZvbGxvdyIgPiY2 OyB9DQogICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2lu ZyB3aGV0aGVyIGxpbmthdCBoYW5kbGVzIHRyYWlsaW5nIHNsYXNoIGNvcnJlY3RseSIgPiY1DQok YXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIGxpbmthdCBoYW5kbGVzIHRyYWlsaW5nIHNsYXNo IGNvcnJlY3RseS4uLiAiID4mNjsgfQ0KaWYgJHtnbF9jdl9mdW5jX2xpbmthdF9zbGFzaCs6fSBm YWxzZTsgdGhlbiA6DQogICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2DQplbHNlDQogIHJtIC1y ZiBjb25mdGVzdC5hIGNvbmZ0ZXN0LmIgY29uZnRlc3QuYyBjb25mdGVzdC5kDQogICAgICAgaWYg dGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgPSB5ZXM7IHRoZW4gOg0KICAjIEd1ZXNzIHllcyBvbiBn bGliYyBzeXN0ZW1zLCBubyBvdGhlcndpc2UuDQogICAgICAgICAgY2FzZSAiJGhvc3Rfb3MiIGlu DQogICAgICAgICAgICAqLWdudSopIGdsX2N2X2Z1bmNfbGlua2F0X3NsYXNoPSJndWVzc2luZyB5 ZXMiOzsNCiAgICAgICAgICAgICopICAgICAgZ2xfY3ZfZnVuY19saW5rYXRfc2xhc2g9Imd1ZXNz aW5nIG5vIjs7DQogICAgICAgICAgZXNhYw0KDQplbHNlDQogIGNhdCBjb25mZGVmcy5oIC0gPDxf QUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQNCi8qIGVuZCBjb25mZGVmcy5oLiAgKi8NCiNpbmNsdWRl IDx1bmlzdGQuaD4NCiAgICAgICAgICAgICAgI2luY2x1ZGUgPGZjbnRsLmg+DQogICAgICAgICAg ICAgICNpbmNsdWRlIDxlcnJuby5oPg0KICAgICAgICAgICAgICAjaW5jbHVkZSA8c3RkaW8uaD4N Cg0KaW50DQptYWluICgpDQp7DQppbnQgcmVzdWx0Ow0KICAgICAgICAgICAgICBpbnQgZmQ7DQog ICAgICAgICAgICAgIC8qIENyZWF0ZSBhIHJlZ3VsYXIgZmlsZS4gICovDQogICAgICAgICAgICAg IGZkID0gb3BlbiAoImNvbmZ0ZXN0LmEiLCBPX0NSRUFUIHwgT19FWENMIHwgT19XUk9OTFksIDA2 MDApOw0KICAgICAgICAgICAgICBpZiAoZmQgPCAwKQ0KICAgICAgICAgICAgICAgIHJldHVybiAx Ow0KICAgICAgICAgICAgICBpZiAod3JpdGUgKGZkLCAiaGVsbG8iLCA1KSA8IDUpDQogICAgICAg ICAgICAgICAgcmV0dXJuIDI7DQogICAgICAgICAgICAgIGlmIChjbG9zZSAoZmQpIDwgMCkNCiAg ICAgICAgICAgICAgICByZXR1cm4gMzsNCiAgICAgICAgICAgICAgLyogVGVzdCB3aGV0aGVyIGhh cmQgbGlua3MgYXJlIHN1cHBvcnRlZCBvbiB0aGUgY3VycmVudA0KICAgICAgICAgICAgICAgICBk ZXZpY2UuICAqLw0KICAgICAgICAgICAgICBpZiAobGlua2F0IChBVF9GRENXRCwgImNvbmZ0ZXN0 LmEiLCBBVF9GRENXRCwgImNvbmZ0ZXN0LmIiLA0KICAgICAgICAgICAgICAgICAgICAgICAgICBB VF9TWU1MSU5LX0ZPTExPVykgPCAwKQ0KICAgICAgICAgICAgICAgIHJldHVybiAwOw0KICAgICAg ICAgICAgICByZXN1bHQgPSAwOw0KICAgICAgICAgICAgICAvKiBUZXN0IHdoZXRoZXIgYSB0cmFp bGluZyAiLyIgaXMgdHJlYXRlZCBsaWtlICIvLiIuICAqLw0KICAgICAgICAgICAgICBpZiAobGlu a2F0IChBVF9GRENXRCwgImNvbmZ0ZXN0LmEvIiwgQVRfRkRDV0QsICJjb25mdGVzdC5jIiwNCiAg ICAgICAgICAgICAgICAgICAgICAgICAgQVRfU1lNTElOS19GT0xMT1cpID09IDApDQogICAgICAg ICAgICAgICAgcmVzdWx0IHw9IDQ7DQogICAgICAgICAgICAgIGlmIChsaW5rYXQgKEFUX0ZEQ1dE LCAiY29uZnRlc3QuYSIsIEFUX0ZEQ1dELCAiY29uZnRlc3QuZC8iLA0KICAgICAgICAgICAgICAg ICAgICAgICAgICBBVF9TWU1MSU5LX0ZPTExPVykgPT0gMCkNCiAgICAgICAgICAgICAgICByZXN1 bHQgfD0gODsNCiAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsNCg0KICA7DQogIHJldHVybiAw Ow0KfQ0KX0FDRU9GDQppZiBhY19mbl9jX3RyeV9ydW4gIiRMSU5FTk8iOyB0aGVuIDoNCiAgZ2xf Y3ZfZnVuY19saW5rYXRfc2xhc2g9eWVzDQplbHNlDQogIGdsX2N2X2Z1bmNfbGlua2F0X3NsYXNo PW5vDQpmaQ0Kcm0gLWYgY29yZSAqLmNvcmUgY29yZS5jb25mdGVzdC4qIGdtb24ub3V0IGJiLm91 dCBjb25mdGVzdCRhY19leGVleHQgXA0KICBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LmJl YW0gY29uZnRlc3QuJGFjX2V4dA0KZmkNCg0KICAgICAgIHJtIC1yZiBjb25mdGVzdC5hIGNvbmZ0 ZXN0LmIgY29uZnRlc3QuYyBjb25mdGVzdC5kDQpmaQ0KeyAkYXNfZWNobyAiJGFzX21lOiR7YXNf bGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRnbF9jdl9mdW5jX2xpbmthdF9zbGFzaCIgPiY1DQok YXNfZWNobyAiJGdsX2N2X2Z1bmNfbGlua2F0X3NsYXNoIiA+JjY7IH0NCiAgICBjYXNlICIkZ2xf Y3ZfZnVuY19saW5rYXRfc2xhc2giIGluDQogICAgICAqeWVzKSBnbF9saW5rYXRfc2xhc2hfYnVn PTAgOzsNCiAgICAgICopICAgIGdsX2xpbmthdF9zbGFzaF9idWc9MSA7Ow0KICAgIGVzYWMNCiAg ICBpZiB0ZXN0ICIkZ2xfY3ZfZnVuY19saW5rYXRfZm9sbG93IiAhPSB5ZXMgXA0KICAgICAgIHx8 IHRlc3QgJGdsX2xpbmthdF9zbGFzaF9idWcgPSAxOyB0aGVuDQogICAgICBSRVBMQUNFX0xJTktB VD0xDQoNCg0KDQoNCg0KDQoNCg0KICBnbF9MSUJPQkpTPSIkZ2xfTElCT0JKUyBsaW5rYXQuJGFj X29iamV4dCINCg0KDQpjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GDQojZGVmaW5lIExJTktBVF9U UkFJTElOR19TTEFTSF9CVUcgJGdsX2xpbmthdF9zbGFzaF9idWcNCl9BQ0VPRg0KDQogICAgZmkN CiAgZmkNCg0KDQoNCg0KICBHTlVMSUJfTElOS0FUPTENCg0KDQoNCiRhc19lY2hvICIjZGVmaW5l IEdOVUxJQl9URVNUX0xJTktBVCAxIiA+PmNvbmZkZWZzLmgNCg0KDQoNCiAgIyBDb2RlIGZyb20g bW9kdWxlIGxvY2FsY2hhcnNldDoNCg0KDQoNCg0KDQoNCg0KDQogIExPQ0FMQ0hBUlNFVF9URVNU U19FTlZJUk9OTUVOVD0iQ0hBUlNFVEFMSUFTRElSPVwiXCQodG9wX2J1aWxkZGlyKS8kZ2xfc291 cmNlX2Jhc2VcIiINCg0KICAjIENvZGUgZnJvbSBtb2R1bGUgbG9jYWxlOg0KDQoNCg0KDQoNCg0K DQogIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hl dGhlciBsb2NhbGUuaCBjb25mb3JtcyB0byBQT1NJWDoyMDAxIiA+JjUNCiRhc19lY2hvX24gImNo ZWNraW5nIHdoZXRoZXIgbG9jYWxlLmggY29uZm9ybXMgdG8gUE9TSVg6MjAwMS4uLiAiID4mNjsg fQ0KaWYgJHtnbF9jdl9oZWFkZXJfbG9jYWxlX2hfcG9zaXgyMDAxKzp9IGZhbHNlOyB0aGVuIDoN CiAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYNCmVsc2UNCiAgY2F0IGNvbmZkZWZzLmggLSA8 PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dA0KLyogZW5kIGNvbmZkZWZzLmguICAqLw0KI2luY2x1 ZGUgPGxvY2FsZS5oPg0KICAgICAgICAgICAgaW50IHggPSBMQ19NRVNTQUdFUzsNCmludA0KbWFp biAoKQ0Kew0KDQogIDsNCiAgcmV0dXJuIDA7DQp9DQpfQUNFT0YNCmlmIGFjX2ZuX2NfdHJ5X2Nv bXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoNCiAgZ2xfY3ZfaGVhZGVyX2xvY2FsZV9oX3Bvc2l4MjAw MT15ZXMNCmVsc2UNCiAgZ2xfY3ZfaGVhZGVyX2xvY2FsZV9oX3Bvc2l4MjAwMT1ubw0KZmkNCnJt IC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4 dA0KZmkNCnsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAk Z2xfY3ZfaGVhZGVyX2xvY2FsZV9oX3Bvc2l4MjAwMSIgPiY1DQokYXNfZWNobyAiJGdsX2N2X2hl YWRlcl9sb2NhbGVfaF9wb3NpeDIwMDEiID4mNjsgfQ0KDQoNCiAgaWYgdGVzdCAkYWNfY3ZfaGVh ZGVyX3hsb2NhbGVfaCA9IHllczsgdGhlbg0KICAgIEhBVkVfWExPQ0FMRV9IPTENCiAgICAgICAg ICAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5n IHdoZXRoZXIgbG9jYWxlLmggZGVmaW5lcyBsb2NhbGVfdCIgPiY1DQokYXNfZWNob19uICJjaGVj a2luZyB3aGV0aGVyIGxvY2FsZS5oIGRlZmluZXMgbG9jYWxlX3QuLi4gIiA+JjY7IH0NCmlmICR7 Z2xfY3ZfaGVhZGVyX2xvY2FsZV9oYXNfbG9jYWxlX3QrOn0gZmFsc2U7IHRoZW4gOg0KICAkYXNf ZWNob19uICIoY2FjaGVkKSAiID4mNg0KZWxzZQ0KICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9G ID5jb25mdGVzdC4kYWNfZXh0DQovKiBlbmQgY29uZmRlZnMuaC4gICovDQojaW5jbHVkZSA8bG9j YWxlLmg+DQogICAgICAgICAgICAgIGxvY2FsZV90IHg7DQppbnQNCm1haW4gKCkNCnsNCg0KICA7 DQogIHJldHVybiAwOw0KfQ0KX0FDRU9GDQppZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5P IjsgdGhlbiA6DQogIGdsX2N2X2hlYWRlcl9sb2NhbGVfaGFzX2xvY2FsZV90PXllcw0KZWxzZQ0K ICBnbF9jdl9oZWFkZXJfbG9jYWxlX2hhc19sb2NhbGVfdD1ubw0KZmkNCnJtIC1mIGNvcmUgY29u ZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dA0KDQpmaQ0KeyAk YXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRnbF9jdl9oZWFk ZXJfbG9jYWxlX2hhc19sb2NhbGVfdCIgPiY1DQokYXNfZWNobyAiJGdsX2N2X2hlYWRlcl9sb2Nh bGVfaGFzX2xvY2FsZV90IiA+JjY7IH0NCiAgICBpZiB0ZXN0ICRnbF9jdl9oZWFkZXJfbG9jYWxl X2hhc19sb2NhbGVfdCA9IHllczsgdGhlbg0KICAgICAgZ2xfY3ZfaGVhZGVyX2xvY2FsZV9oX25l ZWRzX3hsb2NhbGVfaD1ubw0KICAgIGVsc2UNCiAgICAgIGdsX2N2X2hlYWRlcl9sb2NhbGVfaF9u ZWVkc194bG9jYWxlX2g9eWVzDQogICAgZmkNCiAgZWxzZQ0KICAgIEhBVkVfWExPQ0FMRV9IPTAN CiAgICBnbF9jdl9oZWFkZXJfbG9jYWxlX2hfbmVlZHNfeGxvY2FsZV9oPW5vDQogIGZpDQoNCg0K DQoNCg0KDQoNCg0KDQoNCiAgICAgaWYgdGVzdCAkZ2xfY3ZfaGF2ZV9pbmNsdWRlX25leHQgPSB5 ZXM7IHRoZW4NCiAgICAgICBnbF9jdl9uZXh0X2xvY2FsZV9oPSc8J2xvY2FsZS5oJz4nDQogICAg IGVsc2UNCiAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNo ZWNraW5nIGFic29sdXRlIG5hbWUgb2YgPGxvY2FsZS5oPiIgPiY1DQokYXNfZWNob19uICJjaGVj a2luZyBhYnNvbHV0ZSBuYW1lIG9mIDxsb2NhbGUuaD4uLi4gIiA+JjY7IH0NCmlmICR7Z2xfY3Zf bmV4dF9sb2NhbGVfaCs6fSBmYWxzZTsgdGhlbiA6DQogICRhc19lY2hvX24gIihjYWNoZWQpICIg PiY2DQplbHNlDQoNCiAgICAgICAgICAgICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNv bmZ0ZXN0LiRhY19leHQNCi8qIGVuZCBjb25mZGVmcy5oLiAgKi8NCiNpbmNsdWRlIDxsb2NhbGUu aD4NCg0KX0FDRU9GDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBjYXNlICIkaG9zdF9vcyIgaW4NCiAgICAgICAgICAgICAgICAg YWl4KikgZ2xfYWJzbmFtZV9jcHA9IiRhY19jcHAgLUMiIDs7DQogICAgICAgICAgICAgICAgICop ICAgIGdsX2Fic25hbWVfY3BwPSIkYWNfY3BwIiA7Ow0KICAgICAgICAgICAgICAgZXNhYw0KICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg Z2xfY3ZfbmV4dF9sb2NhbGVfaD0nIidgKGV2YWwgIiRnbF9hYnNuYW1lX2NwcCBjb25mdGVzdC4k YWNfZXh0IikgMj4mNSB8DQogICAgICAgICAgICAgICAgICBzZWQgLW4gJ1wjL2xvY2FsZS5oI3sN CiAgICAgICAgICAgICAgICAgICAgcyMuKiJcKC4qL2xvY2FsZS5oXCkiLiojXDEjDQogICAgICAg ICAgICAgICAgICAgIHMjXi9bXi9dIy8vJiMNCiAgICAgICAgICAgICAgICAgICAgcA0KICAgICAg ICAgICAgICAgICAgICBxDQogICAgICAgICAgICAgICAgICB9J2AnIicNCg0KDQpmaQ0KeyAkYXNf ZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRnbF9jdl9uZXh0X2xv Y2FsZV9oIiA+JjUNCiRhc19lY2hvICIkZ2xfY3ZfbmV4dF9sb2NhbGVfaCIgPiY2OyB9DQogICAg IGZpDQogICAgIE5FWFRfTE9DQUxFX0g9JGdsX2N2X25leHRfbG9jYWxlX2gNCg0KICAgICBpZiB0 ZXN0ICRnbF9jdl9oYXZlX2luY2x1ZGVfbmV4dCA9IHllcyB8fCB0ZXN0ICRnbF9jdl9oYXZlX2lu Y2x1ZGVfbmV4dCA9IGJ1Z2d5OyB0aGVuDQogICAgICAgIyBJTkNMVURFX05FWFRfQVNfRklSU1Rf RElSRUNUSVZFPSdpbmNsdWRlX25leHQnDQogICAgICAgZ2xfbmV4dF9hc19maXJzdF9kaXJlY3Rp dmU9JzwnbG9jYWxlLmgnPicNCiAgICAgZWxzZQ0KICAgICAgICMgSU5DTFVERV9ORVhUX0FTX0ZJ UlNUX0RJUkVDVElWRT0naW5jbHVkZScNCiAgICAgICBnbF9uZXh0X2FzX2ZpcnN0X2RpcmVjdGl2 ZT0kZ2xfY3ZfbmV4dF9sb2NhbGVfaA0KICAgICBmaQ0KICAgICBORVhUX0FTX0ZJUlNUX0RJUkVD VElWRV9MT0NBTEVfSD0kZ2xfbmV4dF9hc19maXJzdF9kaXJlY3RpdmUNCg0KDQoNCg0KDQogIGlm IHRlc3QgLW4gIiRTVERERUZfSCIgXA0KICAgICB8fCB0ZXN0ICRnbF9jdl9oZWFkZXJfbG9jYWxl X2hfcG9zaXgyMDAxID0gbm8gXA0KICAgICB8fCB0ZXN0ICRnbF9jdl9oZWFkZXJfbG9jYWxlX2hf bmVlZHNfeGxvY2FsZV9oID0geWVzOyB0aGVuDQoNCiAgICA6DQoNCiAgZmkNCg0KDQogICAgZm9y IGdsX2Z1bmMgaW4gc2V0bG9jYWxlIGR1cGxvY2FsZTsgZG8NCiAgICBhc19nbF9TeW1ib2w9YCRh c19lY2hvICJnbF9jdl9oYXZlX3Jhd19kZWNsXyRnbF9mdW5jIiB8ICRhc190cl9zaGANCiAgICB7 ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIg JGdsX2Z1bmMgaXMgZGVjbGFyZWQgd2l0aG91dCBhIG1hY3JvIiA+JjUNCiRhc19lY2hvX24gImNo ZWNraW5nIHdoZXRoZXIgJGdsX2Z1bmMgaXMgZGVjbGFyZWQgd2l0aG91dCBhIG1hY3JvLi4uICIg PiY2OyB9DQppZiBldmFsIFwkeyRhc19nbF9TeW1ib2wrOn0gZmFsc2U7IHRoZW4gOg0KICAkYXNf ZWNob19uICIoY2FjaGVkKSAiID4mNg0KZWxzZQ0KICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9G ID5jb25mdGVzdC4kYWNfZXh0DQovKiBlbmQgY29uZmRlZnMuaC4gICovDQojaW5jbHVkZSA8bG9j YWxlLmg+DQovKiBTb21lIHN5c3RlbXMgcHJvdmlkZSBkZWNsYXJhdGlvbnMgaW4gYSBub24tc3Rh bmRhcmQgaGVhZGVyLiAgKi8NCiNpZiBIQVZFX1hMT0NBTEVfSA0KIyBpbmNsdWRlIDx4bG9jYWxl Lmg+DQojZW5kaWYNCg0KaW50DQptYWluICgpDQp7DQojdW5kZWYgJGdsX2Z1bmMNCiAgKHZvaWQp ICRnbF9mdW5jOw0KICA7DQogIHJldHVybiAwOw0KfQ0KX0FDRU9GDQppZiBhY19mbl9jX3RyeV9j b21waWxlICIkTElORU5PIjsgdGhlbiA6DQogIGV2YWwgIiRhc19nbF9TeW1ib2w9eWVzIg0KZWxz ZQ0KICBldmFsICIkYXNfZ2xfU3ltYm9sPW5vIg0KZmkNCnJtIC1mIGNvcmUgY29uZnRlc3QuZXJy IGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dA0KZmkNCmV2YWwgYWNfcmVzPVwk JGFzX2dsX1N5bWJvbA0KCSAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJ TkVOT306IHJlc3VsdDogJGFjX3JlcyIgPiY1DQokYXNfZWNobyAiJGFjX3JlcyIgPiY2OyB9DQog ICAgIGlmIGV2YWwgdGVzdCBcInhcJCIkYXNfZ2xfU3ltYm9sIlwiID0geCJ5ZXMiOyB0aGVuIDoN CiAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRg0KI2RlZmluZSBgJGFzX2VjaG8gIkhBVkVfUkFX X0RFQ0xfJGdsX2Z1bmMiIHwgJGFzX3RyX2NwcGAgMQ0KX0FDRU9GDQoNCiAgICAgICAgICAgICAg ICAgICAgIGV2YWwgYWNfY3ZfaGF2ZV9kZWNsXyRnbF9mdW5jPXllcw0KZmkNCiAgICAgIGRvbmUN Cg0KDQogICMgQ29kZSBmcm9tIG1vZHVsZSBsb2NrOg0KDQoNCiAgaWYgdGVzdCAiJGdsX3RocmVh ZHNfYXBpIiA9IHBvc2l4OyB0aGVuDQogICAgIyBPU0YvMSA0LjAgYW5kIE1hY09TIFggMTAuMSBs YWNrIHRoZSBwdGhyZWFkX3J3bG9ja190IHR5cGUgYW5kIHRoZQ0KICAgICMgcHRocmVhZF9yd2xv Y2tfKiBmdW5jdGlvbnMuDQogICAgYWNfZm5fY19jaGVja190eXBlICIkTElORU5PIiAicHRocmVh ZF9yd2xvY2tfdCIgImFjX2N2X3R5cGVfcHRocmVhZF9yd2xvY2tfdCIgIiNpbmNsdWRlIDxwdGhy ZWFkLmg+DQoiDQppZiB0ZXN0ICJ4JGFjX2N2X3R5cGVfcHRocmVhZF9yd2xvY2tfdCIgPSB4eWVz OyB0aGVuIDoNCg0KJGFzX2VjaG8gIiNkZWZpbmUgSEFWRV9QVEhSRUFEX1JXTE9DSyAxIiA+PmNv bmZkZWZzLmgNCg0KZmkNCg0KICAgICMgZ2xpYmMgZGVmaW5lcyBQVEhSRUFEX01VVEVYX1JFQ1VS U0lWRSBhcyBlbnVtLCBub3QgYXMgYSBtYWNyby4NCiAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FD RU9GID5jb25mdGVzdC4kYWNfZXh0DQovKiBlbmQgY29uZmRlZnMuaC4gICovDQoNCiAgICAgICNp bmNsdWRlIDxwdGhyZWFkLmg+DQppbnQNCm1haW4gKCkNCnsNCg0KI2lmIF9fRnJlZUJTRF9fID09 IDQNCmVycm9yICJObywgaW4gRnJlZUJTRCA0LjAgcmVjdXJzaXZlIG11dGV4ZXMgYWN0dWFsbHkg ZG9uJ3Qgd29yay4iDQojZWxzZQ0KaW50IHggPSAoaW50KVBUSFJFQURfTVVURVhfUkVDVVJTSVZF Ow0KcmV0dXJuICF4Ow0KI2VuZGlmDQoNCiAgOw0KICByZXR1cm4gMDsNCn0NCl9BQ0VPRg0KaWYg YWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOg0KDQokYXNfZWNobyAiI2RlZmlu ZSBIQVZFX1BUSFJFQURfTVVURVhfUkVDVVJTSVZFIDEiID4+Y29uZmRlZnMuaA0KDQpmaQ0Kcm0g LWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0 DQogIGZpDQoNCg0KDQoNCiAgIyBDb2RlIGZyb20gbW9kdWxlIGxvbmctb3B0aW9uczoNCg0KDQoN Cg0KDQoNCg0KDQoNCiAgZ2xfTElCT0JKUz0iJGdsX0xJQk9CSlMgbG9uZy1vcHRpb25zLiRhY19v YmpleHQiDQoNCg0KDQogICMgQ29kZSBmcm9tIG1vZHVsZSBsc2VlazoNCg0KDQoNCiAgeyAkYXNf ZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIGxzZWVr IGRldGVjdHMgcGlwZXMiID4mNQ0KJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciBsc2VlayBk ZXRlY3RzIHBpcGVzLi4uICIgPiY2OyB9DQppZiAke2dsX2N2X2Z1bmNfbHNlZWtfcGlwZSs6fSBm YWxzZTsgdGhlbiA6DQogICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2DQplbHNlDQogIGlmIHRl c3QgJGNyb3NzX2NvbXBpbGluZyA9IG5vOyB0aGVuDQogICAgICAgY2F0IGNvbmZkZWZzLmggLSA8 PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dA0KLyogZW5kIGNvbmZkZWZzLmguICAqLw0KDQojaW5j bHVkZSA8c3lzL3R5cGVzLmg+IC8qIGZvciBvZmZfdCAqLw0KI2luY2x1ZGUgPHN0ZGlvLmg+IC8q IGZvciBTRUVLX0NVUiAqLw0KI2luY2x1ZGUgPHVuaXN0ZC5oPg0KaW50DQptYWluICgpDQp7DQoN CiAgLyogRXhpdCB3aXRoIHN1Y2Nlc3Mgb25seSBpZiBzdGRpbiBpcyBzZWVrYWJsZS4gICovDQog IHJldHVybiBsc2VlayAoMCwgKG9mZl90KTAsIFNFRUtfQ1VSKSA8IDA7DQoNCiAgOw0KICByZXR1 cm4gMDsNCn0NCl9BQ0VPRg0KaWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOg0K ICBpZiB0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBcDQogICAgICAgICAgICAgJiYgLi9jb25m dGVzdCRhY19leGVleHQgPCBjb25mdGVzdC4kYWNfZXh0IFwNCiAgICAgICAgICAgICAmJiB0ZXN0 IDEgPSAiYGVjaG8gaGkgXA0KICAgICAgICAgICAgICAgfCB7IC4vY29uZnRlc3QkYWNfZXhlZXh0 OyBlY2hvICQ/OyBjYXQgPi9kZXYvbnVsbDsgfWAiOyB0aGVuDQogICAgICAgICAgICBnbF9jdl9m dW5jX2xzZWVrX3BpcGU9eWVzDQogICAgICAgICAgZWxzZQ0KICAgICAgICAgICAgZ2xfY3ZfZnVu Y19sc2Vla19waXBlPW5vDQogICAgICAgICAgZmkNCmVsc2UNCiAgZ2xfY3ZfZnVuY19sc2Vla19w aXBlPW5vDQpmaQ0Kcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBc DQogICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQNCiAgICAgZWxzZQ0KICAg ICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQNCi8qIGVuZCBj b25mZGVmcy5oLiAgKi8NCg0KI2lmICgoZGVmaW5lZCBfV0lOMzIgfHwgZGVmaW5lZCBfX1dJTjMy X18pICYmICEgZGVmaW5lZCBfX0NZR1dJTl9fKSB8fCBkZWZpbmVkIF9fQkVPU19fDQovKiBtaW5n dyBhbmQgQmVPUyBtaXN0YWtlbmx5IHJldHVybiAwIHdoZW4gdHJ5aW5nIHRvIHNlZWsgb24gcGlw ZXMuICAqLw0KICBDaG9rZSBtZS4NCiNlbmRpZg0KX0FDRU9GDQppZiBhY19mbl9jX3RyeV9jb21w aWxlICIkTElORU5PIjsgdGhlbiA6DQogIGdsX2N2X2Z1bmNfbHNlZWtfcGlwZT15ZXMNCmVsc2UN CiAgZ2xfY3ZfZnVuY19sc2Vla19waXBlPW5vDQpmaQ0Kcm0gLWYgY29yZSBjb25mdGVzdC5lcnIg Y29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0DQogICAgIGZpDQpmaQ0KeyAkYXNf ZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRnbF9jdl9mdW5jX2xz ZWVrX3BpcGUiID4mNQ0KJGFzX2VjaG8gIiRnbF9jdl9mdW5jX2xzZWVrX3BpcGUiID4mNjsgfQ0K ICBpZiB0ZXN0ICRnbF9jdl9mdW5jX2xzZWVrX3BpcGUgPSBubzsgdGhlbg0KDQoNCg0KDQoNCg0K DQoNCg0KICBnbF9MSUJPQkpTPSIkZ2xfTElCT0JKUyBsc2Vlay4kYWNfb2JqZXh0Ig0KDQoNCiAg UkVQTEFDRV9MU0VFSz0xDQoNCiRhc19lY2hvICIjZGVmaW5lIExTRUVLX1BJUEVfQlJPS0VOIDEi ID4+Y29uZmRlZnMuaA0KDQoNCiAgZmkNCg0KDQoNCg0KICBHTlVMSUJfTFNFRUs9MQ0KDQoNCg0K JGFzX2VjaG8gIiNkZWZpbmUgR05VTElCX1RFU1RfTFNFRUsgMSIgPj5jb25mZGVmcy5oDQoNCg0K DQogICMgQ29kZSBmcm9tIG1vZHVsZSBsc3RhdDoNCg0KDQoNCiAgaWYgdGVzdCAkYWNfY3ZfZnVu Y19sc3RhdCA9IHllczsgdGhlbg0KDQogICAgaWYgdGVzdCAkYWNfY3ZfZnVuY19sc3RhdF9kZXJl ZmVyZW5jZXNfc2xhc2hlZF9zeW1saW5rID0gbm87IHRoZW4NCiAgICAgICAgICAgIFJFUExBQ0Vf TFNUQVQ9MQ0KICAgIGZpDQogICAgIyBQcmVyZXF1aXNpdGVzIG9mIGxpYi9sc3RhdC5jLg0KDQog IGVsc2UNCiAgICBIQVZFX0xTVEFUPTANCiAgZmkNCg0KDQoNCg0KICBHTlVMSUJfTFNUQVQ9MQ0K DQoNCg0KJGFzX2VjaG8gIiNkZWZpbmUgR05VTElCX1RFU1RfTFNUQVQgMSIgPj5jb25mZGVmcy5o DQoNCg0KDQogICMgQ29kZSBmcm9tIG1vZHVsZSBtYWludGFpbmVyLW1ha2VmaWxlOg0KDQogICMg Q29kZSBmcm9tIG1vZHVsZSBtYWxsb2MtZ251Og0KDQoNCiAgICBmb3IgYWNfaGVhZGVyIGluIHN0 ZGxpYi5oDQpkbyA6DQogIGFjX2ZuX2NfY2hlY2tfaGVhZGVyX21vbmdyZWwgIiRMSU5FTk8iICJz dGRsaWIuaCIgImFjX2N2X2hlYWRlcl9zdGRsaWJfaCIgIiRhY19pbmNsdWRlc19kZWZhdWx0Ig0K aWYgdGVzdCAieCRhY19jdl9oZWFkZXJfc3RkbGliX2giID0geHllczsgdGhlbiA6DQogIGNhdCA+ PmNvbmZkZWZzLmggPDxfQUNFT0YNCiNkZWZpbmUgSEFWRV9TVERMSUJfSCAxDQpfQUNFT0YNCg0K ZmkNCg0KZG9uZQ0KDQp7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNo ZWNraW5nIGZvciBHTlUgbGliYyBjb21wYXRpYmxlIG1hbGxvYyIgPiY1DQokYXNfZWNob19uICJj aGVja2luZyBmb3IgR05VIGxpYmMgY29tcGF0aWJsZSBtYWxsb2MuLi4gIiA+JjY7IH0NCmlmICR7 YWNfY3ZfZnVuY19tYWxsb2NfMF9ub25udWxsKzp9IGZhbHNlOyB0aGVuIDoNCiAgJGFzX2VjaG9f biAiKGNhY2hlZCkgIiA+JjYNCmVsc2UNCiAgaWYgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgPSB5 ZXM7IHRoZW4gOg0KICBhY19jdl9mdW5jX21hbGxvY18wX25vbm51bGw9bm8NCmVsc2UNCiAgY2F0 IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dA0KLyogZW5kIGNvbmZkZWZz LmguICAqLw0KI2lmIGRlZmluZWQgU1REQ19IRUFERVJTIHx8IGRlZmluZWQgSEFWRV9TVERMSUJf SA0KIyBpbmNsdWRlIDxzdGRsaWIuaD4NCiNlbHNlDQpjaGFyICptYWxsb2MgKCk7DQojZW5kaWYN Cg0KaW50DQptYWluICgpDQp7DQpyZXR1cm4gISBtYWxsb2MgKDApOw0KICA7DQogIHJldHVybiAw Ow0KfQ0KX0FDRU9GDQppZiBhY19mbl9jX3RyeV9ydW4gIiRMSU5FTk8iOyB0aGVuIDoNCiAgYWNf Y3ZfZnVuY19tYWxsb2NfMF9ub25udWxsPXllcw0KZWxzZQ0KICBhY19jdl9mdW5jX21hbGxvY18w X25vbm51bGw9bm8NCmZpDQpybSAtZiBjb3JlICouY29yZSBjb3JlLmNvbmZ0ZXN0LiogZ21vbi5v dXQgYmIub3V0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCBcDQogIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29u ZnRlc3QuYmVhbSBjb25mdGVzdC4kYWNfZXh0DQpmaQ0KDQpmaQ0KeyAkYXNfZWNobyAiJGFzX21l OiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9mdW5jX21hbGxvY18wX25vbm51 bGwiID4mNQ0KJGFzX2VjaG8gIiRhY19jdl9mdW5jX21hbGxvY18wX25vbm51bGwiID4mNjsgfQ0K aWYgdGVzdCAkYWNfY3ZfZnVuY19tYWxsb2NfMF9ub25udWxsID0geWVzOyB0aGVuIDoNCg0KJGFz X2VjaG8gIiNkZWZpbmUgSEFWRV9NQUxMT0NfR05VIDEiID4+Y29uZmRlZnMuaA0KDQplbHNlDQog ICRhc19lY2hvICIjZGVmaW5lIEhBVkVfTUFMTE9DX0dOVSAwIiA+PmNvbmZkZWZzLmgNCg0KDQoN Cg0KDQoNCg0KDQoNCg0KICBnbF9MSUJPQkpTPSIkZ2xfTElCT0JKUyBtYWxsb2MuJGFjX29iamV4 dCINCg0KICBSRVBMQUNFX01BTExPQz0xDQoNCg0KZmkNCg0KDQoNCg0KY2F0ID4+Y29uZmRlZnMu aCA8PF9BQ0VPRg0KI2RlZmluZSBHTlVMSUJfTUFMTE9DX0dOVSAxDQpfQUNFT0YNCg0KDQogICMg Q29kZSBmcm9tIG1vZHVsZSBtYWxsb2MtcG9zaXg6DQoNCg0KDQogIGlmIHRlc3QgJGdsX2N2X2Z1 bmNfbWFsbG9jX3Bvc2l4ID0geWVzOyB0aGVuDQoNCiRhc19lY2hvICIjZGVmaW5lIEhBVkVfTUFM TE9DX1BPU0lYIDEiID4+Y29uZmRlZnMuaA0KDQogIGVsc2UNCg0KDQoNCg0KDQoNCg0KDQoNCiAg Z2xfTElCT0JKUz0iJGdsX0xJQk9CSlMgbWFsbG9jLiRhY19vYmpleHQiDQoNCiAgUkVQTEFDRV9N QUxMT0M9MQ0KDQogIGZpDQoNCg0KDQoNCiAgR05VTElCX01BTExPQ19QT1NJWD0xDQoNCg0KDQok YXNfZWNobyAiI2RlZmluZSBHTlVMSUJfVEVTVF9NQUxMT0NfUE9TSVggMSIgPj5jb25mZGVmcy5o DQoNCg0KDQogICMgQ29kZSBmcm9tIG1vZHVsZSBtYWxsb2NhOg0KDQoNCg0KDQogICMgQ29kZSBm cm9tIG1vZHVsZSBtYW55d2FybmluZ3M6DQogICMgQ29kZSBmcm9tIG1vZHVsZSBtYXRoOg0KDQoN Cg0KDQoNCg0KDQoNCg0KDQoNCiAgICAgaWYgdGVzdCAkZ2xfY3ZfaGF2ZV9pbmNsdWRlX25leHQg PSB5ZXM7IHRoZW4NCiAgICAgICBnbF9jdl9uZXh0X21hdGhfaD0nPCdtYXRoLmgnPicNCiAgICAg ZWxzZQ0KICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hl Y2tpbmcgYWJzb2x1dGUgbmFtZSBvZiA8bWF0aC5oPiIgPiY1DQokYXNfZWNob19uICJjaGVja2lu ZyBhYnNvbHV0ZSBuYW1lIG9mIDxtYXRoLmg+Li4uICIgPiY2OyB9DQppZiAke2dsX2N2X25leHRf bWF0aF9oKzp9IGZhbHNlOyB0aGVuIDoNCiAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYNCmVs c2UNCg0KICAgICAgICAgICAgIGlmIHRlc3QgJGFjX2N2X2hlYWRlcl9tYXRoX2ggPSB5ZXM7IHRo ZW4NCg0KDQogICAgICAgICAgICAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVz dC4kYWNfZXh0DQovKiBlbmQgY29uZmRlZnMuaC4gICovDQojaW5jbHVkZSA8bWF0aC5oPg0KDQpf QUNFT0YNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGNhc2UgIiRob3N0X29zIiBpbg0KICAgICAgICAgICAgICAgICBhaXgqKSBn bF9hYnNuYW1lX2NwcD0iJGFjX2NwcCAtQyIgOzsNCiAgICAgICAgICAgICAgICAgKikgICAgZ2xf YWJzbmFtZV9jcHA9IiRhY19jcHAiIDs7DQogICAgICAgICAgICAgICBlc2FjDQogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbF9jdl9u ZXh0X21hdGhfaD0nIidgKGV2YWwgIiRnbF9hYnNuYW1lX2NwcCBjb25mdGVzdC4kYWNfZXh0Iikg Mj4mNSB8DQogICAgICAgICAgICAgICAgICBzZWQgLW4gJ1wjL21hdGguaCN7DQogICAgICAgICAg ICAgICAgICAgIHMjLioiXCguKi9tYXRoLmhcKSIuKiNcMSMNCiAgICAgICAgICAgICAgICAgICAg cyNeL1teL10jLy8mIw0KICAgICAgICAgICAgICAgICAgICBwDQogICAgICAgICAgICAgICAgICAg IHENCiAgICAgICAgICAgICAgICAgIH0nYCciJw0KICAgICAgICAgIGVsc2UNCiAgICAgICAgICAg ICAgIGdsX2N2X25leHRfbWF0aF9oPSc8J21hdGguaCc+Jw0KICAgICAgICAgICAgIGZpDQoNCg0K ZmkNCnsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkZ2xf Y3ZfbmV4dF9tYXRoX2giID4mNQ0KJGFzX2VjaG8gIiRnbF9jdl9uZXh0X21hdGhfaCIgPiY2OyB9 DQogICAgIGZpDQogICAgIE5FWFRfTUFUSF9IPSRnbF9jdl9uZXh0X21hdGhfaA0KDQogICAgIGlm IHRlc3QgJGdsX2N2X2hhdmVfaW5jbHVkZV9uZXh0ID0geWVzIHx8IHRlc3QgJGdsX2N2X2hhdmVf aW5jbHVkZV9uZXh0ID0gYnVnZ3k7IHRoZW4NCiAgICAgICAjIElOQ0xVREVfTkVYVF9BU19GSVJT VF9ESVJFQ1RJVkU9J2luY2x1ZGVfbmV4dCcNCiAgICAgICBnbF9uZXh0X2FzX2ZpcnN0X2RpcmVj dGl2ZT0nPCdtYXRoLmgnPicNCiAgICAgZWxzZQ0KICAgICAgICMgSU5DTFVERV9ORVhUX0FTX0ZJ UlNUX0RJUkVDVElWRT0naW5jbHVkZScNCiAgICAgICBnbF9uZXh0X2FzX2ZpcnN0X2RpcmVjdGl2 ZT0kZ2xfY3ZfbmV4dF9tYXRoX2gNCiAgICAgZmkNCiAgICAgTkVYVF9BU19GSVJTVF9ESVJFQ1RJ VkVfTUFUSF9IPSRnbF9uZXh0X2FzX2ZpcnN0X2RpcmVjdGl2ZQ0KDQoNCg0KDQoNCg0KICB7ICRh c19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgTkFO IG1hY3JvIHdvcmtzIiA+JjUNCiRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgTkFOIG1hY3Jv IHdvcmtzLi4uICIgPiY2OyB9DQppZiAke2dsX2N2X2hlYWRlcl9tYXRoX25hbl93b3Jrcys6fSBm YWxzZTsgdGhlbiA6DQogICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2DQplbHNlDQogIGNhdCBj b25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQNCi8qIGVuZCBjb25mZGVmcy5o LiAgKi8NCiNpbmNsdWRlIDxtYXRoLmg+DQppbnQNCm1haW4gKCkNCnsNCi8qIFNvbGFyaXMgMTAg aGFzIGEgYnJva2VuIGRlZmluaXRpb24gb2YgTkFOLiAgT3RoZXIgcGxhdGZvcm1zDQogICAgICAg IGZhaWwgdG8gcHJvdmlkZSBOQU4sIG9yIHByb3ZpZGUgaXQgb25seSBpbiBDOTkgbW9kZTsgdGhp cw0KICAgICAgICB0ZXN0IG9ubHkgbmVlZHMgdG8gZmFpbCB3aGVuIE5BTiBpcyBwcm92aWRlZCBi dXQgd3JvbmcuICAqLw0KICAgICAgICAgZmxvYXQgZiA9IDEuMGY7DQojaWZkZWYgTkFODQogICAg ICAgICBmID0gTkFOOw0KI2VuZGlmDQogICAgICAgICByZXR1cm4gZiA9PSAwOw0KICA7DQogIHJl dHVybiAwOw0KfQ0KX0FDRU9GDQppZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhl biA6DQogIGdsX2N2X2hlYWRlcl9tYXRoX25hbl93b3Jrcz15ZXMNCmVsc2UNCiAgZ2xfY3ZfaGVh ZGVyX21hdGhfbmFuX3dvcmtzPW5vDQpmaQ0Kcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRl c3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0DQpmaQ0KeyAkYXNfZWNobyAiJGFzX21lOiR7 YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRnbF9jdl9oZWFkZXJfbWF0aF9uYW5fd29ya3Mi ID4mNQ0KJGFzX2VjaG8gIiRnbF9jdl9oZWFkZXJfbWF0aF9uYW5fd29ya3MiID4mNjsgfQ0KICBp ZiB0ZXN0ICRnbF9jdl9oZWFkZXJfbWF0aF9uYW5fd29ya3MgPSBubzsgdGhlbg0KICAgIFJFUExB Q0VfTkFOPTENCiAgZmkNCiAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99 OiBjaGVja2luZyB3aGV0aGVyIEhVR0VfVkFMIHdvcmtzIiA+JjUNCiRhc19lY2hvX24gImNoZWNr aW5nIHdoZXRoZXIgSFVHRV9WQUwgd29ya3MuLi4gIiA+JjY7IH0NCmlmICR7Z2xfY3ZfaGVhZGVy X21hdGhfaHVnZV92YWxfd29ya3MrOn0gZmFsc2U7IHRoZW4gOg0KICAkYXNfZWNob19uICIoY2Fj aGVkKSAiID4mNg0KZWxzZQ0KICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4k YWNfZXh0DQovKiBlbmQgY29uZmRlZnMuaC4gICovDQojaW5jbHVkZSA8bWF0aC5oPg0KaW50DQpt YWluICgpDQp7DQovKiBTb2xhcmlzIDEwIGhhcyBhIGJyb2tlbiBkZWZpbml0aW9uIG9mIEhVR0Vf VkFMLiAgKi8NCiAgICAgICAgIGRvdWJsZSBkID0gSFVHRV9WQUw7DQogICAgICAgICByZXR1cm4g ZCA9PSAwOw0KICA7DQogIHJldHVybiAwOw0KfQ0KX0FDRU9GDQppZiBhY19mbl9jX3RyeV9jb21w aWxlICIkTElORU5PIjsgdGhlbiA6DQogIGdsX2N2X2hlYWRlcl9tYXRoX2h1Z2VfdmFsX3dvcmtz PXllcw0KZWxzZQ0KICBnbF9jdl9oZWFkZXJfbWF0aF9odWdlX3ZhbF93b3Jrcz1ubw0KZmkNCnJt IC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4 dA0KZmkNCnsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAk Z2xfY3ZfaGVhZGVyX21hdGhfaHVnZV92YWxfd29ya3MiID4mNQ0KJGFzX2VjaG8gIiRnbF9jdl9o ZWFkZXJfbWF0aF9odWdlX3ZhbF93b3JrcyIgPiY2OyB9DQogIGlmIHRlc3QgJGdsX2N2X2hlYWRl cl9tYXRoX2h1Z2VfdmFsX3dvcmtzID0gbm87IHRoZW4NCiAgICBSRVBMQUNFX0hVR0VfVkFMPTEN CiAgZmkNCg0KDQogICAgZm9yIGdsX2Z1bmMgaW4gYWNvc2wgYXNpbmwgYXRhbmwgY2VpbGYgY2Vp bGwgY29zbCBleHBsIGZsb29yZiBmbG9vcmwgZnJleHBsICAgICBsZGV4cGwgbG9nYiBsb2dsIHJv dW5kIHJvdW5kZiByb3VuZGwgc2lubCBzcXJ0bCB0YW5sIHRydW5jIHRydW5jZiB0cnVuY2w7IGRv DQogICAgYXNfZ2xfU3ltYm9sPWAkYXNfZWNobyAiZ2xfY3ZfaGF2ZV9yYXdfZGVjbF8kZ2xfZnVu YyIgfCAkYXNfdHJfc2hgDQogICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5F Tk99OiBjaGVja2luZyB3aGV0aGVyICRnbF9mdW5jIGlzIGRlY2xhcmVkIHdpdGhvdXQgYSBtYWNy byIgPiY1DQokYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyICRnbF9mdW5jIGlzIGRlY2xhcmVk IHdpdGhvdXQgYSBtYWNyby4uLiAiID4mNjsgfQ0KaWYgZXZhbCBcJHskYXNfZ2xfU3ltYm9sKzp9 IGZhbHNlOyB0aGVuIDoNCiAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYNCmVsc2UNCiAgY2F0 IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dA0KLyogZW5kIGNvbmZkZWZz LmguICAqLw0KI2luY2x1ZGUgPG1hdGguaD4NCg0KaW50DQptYWluICgpDQp7DQojdW5kZWYgJGds X2Z1bmMNCiAgKHZvaWQpICRnbF9mdW5jOw0KICA7DQogIHJldHVybiAwOw0KfQ0KX0FDRU9GDQpp ZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6DQogIGV2YWwgIiRhc19nbF9T eW1ib2w9eWVzIg0KZWxzZQ0KICBldmFsICIkYXNfZ2xfU3ltYm9sPW5vIg0KZmkNCnJtIC1mIGNv cmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dA0KZmkN CmV2YWwgYWNfcmVzPVwkJGFzX2dsX1N5bWJvbA0KCSAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6 JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX3JlcyIgPiY1DQokYXNfZWNobyAiJGFj X3JlcyIgPiY2OyB9DQogICAgIGlmIGV2YWwgdGVzdCBcInhcJCIkYXNfZ2xfU3ltYm9sIlwiID0g eCJ5ZXMiOyB0aGVuIDoNCiAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRg0KI2RlZmluZSBgJGFz X2VjaG8gIkhBVkVfUkFXX0RFQ0xfJGdsX2Z1bmMiIHwgJGFzX3RyX2NwcGAgMQ0KX0FDRU9GDQoN CiAgICAgICAgICAgICAgICAgICAgIGV2YWwgYWNfY3ZfaGF2ZV9kZWNsXyRnbF9mdW5jPXllcw0K ZmkNCiAgICAgIGRvbmUNCg0KDQogICMgQ29kZSBmcm9tIG1vZHVsZSBtYmNoYXI6DQoNCg0KDQoN CiAgIyBDb2RlIGZyb20gbW9kdWxlIG1iaXRlcjoNCg0KDQoNCiAgOg0KDQogICMgQ29kZSBmcm9t IG1vZHVsZSBtYnJ0b3djOg0KDQoNCg0KDQoNCg0KDQoNCg0KDQogIGlmIHRlc3QgJGFjX2N2X2Z1 bmNfbWJzaW5pdCA9IHllcyAmJiB0ZXN0ICRhY19jdl9mdW5jX21icnRvd2MgPSB5ZXM7IHRoZW4N Cg0KDQoNCiAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVj a2luZyB3aGV0aGVyIG1icnRvd2MgaGFuZGxlcyBpbmNvbXBsZXRlIGNoYXJhY3RlcnMiID4mNQ0K JGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciBtYnJ0b3djIGhhbmRsZXMgaW5jb21wbGV0ZSBj aGFyYWN0ZXJzLi4uICIgPiY2OyB9DQppZiAke2dsX2N2X2Z1bmNfbWJydG93Y19pbmNvbXBsZXRl X3N0YXRlKzp9IGZhbHNlOyB0aGVuIDoNCiAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYNCmVs c2UNCg0KICAgICAgICAgICAgICAgICAgY2FzZSAiJGhvc3Rfb3MiIGluDQogICAgICAgICAgICAg ICAgICAgICAjIEd1ZXNzIG5vIG9uIEFJWCBhbmQgT1NGLzEuDQogICAgICAgIGFpeCogfCBvc2Yq KSBnbF9jdl9mdW5jX21icnRvd2NfaW5jb21wbGV0ZV9zdGF0ZT0iZ3Vlc3Npbmcgbm8iIDs7DQog ICAgICAgICAgICAgICAgICAgICAjIEd1ZXNzIHllcyBvdGhlcndpc2UuDQogICAgICAgICopICAg ICAgICAgICBnbF9jdl9mdW5jX21icnRvd2NfaW5jb21wbGV0ZV9zdGF0ZT0iZ3Vlc3NpbmcgeWVz IiA7Ow0KICAgICAgZXNhYw0KICAgICAgaWYgdGVzdCAkTE9DQUxFX0pBICE9IG5vbmU7IHRoZW4N CiAgICAgICAgaWYgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgPSB5ZXM7IHRoZW4gOg0KICA6DQpl bHNlDQogIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQNCi8qIGVu ZCBjb25mZGVmcy5oLiAgKi8NCg0KI2luY2x1ZGUgPGxvY2FsZS5oPg0KI2luY2x1ZGUgPHN0cmlu Zy5oPg0KLyogVHJ1NjQgd2l0aCBEZXNrdG9wIFRvb2xraXQgQyBoYXMgYSBidWc6IDxzdGRpby5o PiBtdXN0IGJlIGluY2x1ZGVkIGJlZm9yZQ0KICAgPHdjaGFyLmg+Lg0KICAgQlNEL09TIDQuMC4x IGhhcyBhIGJ1ZzogPHN0ZGRlZi5oPiwgPHN0ZGlvLmg+IGFuZCA8dGltZS5oPiBtdXN0IGJlDQog ICBpbmNsdWRlZCBiZWZvcmUgPHdjaGFyLmg+LiAgKi8NCiNpbmNsdWRlIDxzdGRkZWYuaD4NCiNp bmNsdWRlIDxzdGRpby5oPg0KI2luY2x1ZGUgPHRpbWUuaD4NCiNpbmNsdWRlIDx3Y2hhci5oPg0K aW50IG1haW4gKCkNCnsNCiAgaWYgKHNldGxvY2FsZSAoTENfQUxMLCAiJExPQ0FMRV9KQSIpICE9 IE5VTEwpDQogICAgew0KICAgICAgY29uc3QgY2hhciBpbnB1dFtdID0gIkJcMjE3XDI1M1wzNDRc MjE3XDI1MVwzMTZlciI7IC8qICJCw7zDn2VyIiAqLw0KICAgICAgbWJzdGF0ZV90IHN0YXRlOw0K ICAgICAgd2NoYXJfdCB3YzsNCg0KICAgICAgbWVtc2V0ICgmc3RhdGUsICdcMCcsIHNpemVvZiAo bWJzdGF0ZV90KSk7DQogICAgICBpZiAobWJydG93YyAoJndjLCBpbnB1dCArIDEsIDEsICZzdGF0 ZSkgPT0gKHNpemVfdCkoLTIpKQ0KICAgICAgICBpZiAobWJzaW5pdCAoJnN0YXRlKSkNCiAgICAg ICAgICByZXR1cm4gMTsNCiAgICB9DQogIHJldHVybiAwOw0KfQ0KX0FDRU9GDQppZiBhY19mbl9j X3RyeV9ydW4gIiRMSU5FTk8iOyB0aGVuIDoNCiAgZ2xfY3ZfZnVuY19tYnJ0b3djX2luY29tcGxl dGVfc3RhdGU9eWVzDQplbHNlDQogIGdsX2N2X2Z1bmNfbWJydG93Y19pbmNvbXBsZXRlX3N0YXRl PW5vDQpmaQ0Kcm0gLWYgY29yZSAqLmNvcmUgY29yZS5jb25mdGVzdC4qIGdtb24ub3V0IGJiLm91 dCBjb25mdGVzdCRhY19leGVleHQgXA0KICBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LmJl YW0gY29uZnRlc3QuJGFjX2V4dA0KZmkNCg0KICAgICAgZmkNCg0KZmkNCnsgJGFzX2VjaG8gIiRh c19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkZ2xfY3ZfZnVuY19tYnJ0b3djX2lu Y29tcGxldGVfc3RhdGUiID4mNQ0KJGFzX2VjaG8gIiRnbF9jdl9mdW5jX21icnRvd2NfaW5jb21w bGV0ZV9zdGF0ZSIgPiY2OyB9DQoNCg0KDQoNCiAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNf bGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIG1icnRvd2Mgd29ya3MgYXMgd2VsbCBh cyBtYnRvd2MiID4mNQ0KJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciBtYnJ0b3djIHdvcmtz IGFzIHdlbGwgYXMgbWJ0b3djLi4uICIgPiY2OyB9DQppZiAke2dsX2N2X2Z1bmNfbWJydG93Y19z YW5pdHljaGVjays6fSBmYWxzZTsgdGhlbiA6DQogICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2 DQplbHNlDQoNCiAgICAgICAgICAgICAgICAgIGNhc2UgIiRob3N0X29zIiBpbg0KICAgICAgICAg ICAgICAgICAgICAjIEd1ZXNzIG5vIG9uIFNvbGFyaXMgOC4NCiAgICAgICAgc29sYXJpczIuOCkg Z2xfY3ZfZnVuY19tYnJ0b3djX3Nhbml0eWNoZWNrPSJndWVzc2luZyBubyIgOzsNCiAgICAgICAg ICAgICAgICAgICAgIyBHdWVzcyB5ZXMgb3RoZXJ3aXNlLg0KICAgICAgICAqKSAgICAgICAgICBn bF9jdl9mdW5jX21icnRvd2Nfc2FuaXR5Y2hlY2s9Imd1ZXNzaW5nIHllcyIgOzsNCiAgICAgIGVz YWMNCiAgICAgIGlmIHRlc3QgJExPQ0FMRV9aSF9DTiAhPSBub25lOyB0aGVuDQogICAgICAgIGlm IHRlc3QgIiRjcm9zc19jb21waWxpbmciID0geWVzOyB0aGVuIDoNCiAgOg0KZWxzZQ0KICBjYXQg Y29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0DQovKiBlbmQgY29uZmRlZnMu aC4gICovDQoNCiNpbmNsdWRlIDxsb2NhbGUuaD4NCiNpbmNsdWRlIDxzdGRsaWIuaD4NCiNpbmNs dWRlIDxzdHJpbmcuaD4NCi8qIFRydTY0IHdpdGggRGVza3RvcCBUb29sa2l0IEMgaGFzIGEgYnVn OiA8c3RkaW8uaD4gbXVzdCBiZSBpbmNsdWRlZCBiZWZvcmUNCiAgIDx3Y2hhci5oPi4NCiAgIEJT RC9PUyA0LjAuMSBoYXMgYSBidWc6IDxzdGRkZWYuaD4sIDxzdGRpby5oPiBhbmQgPHRpbWUuaD4g bXVzdCBiZQ0KICAgaW5jbHVkZWQgYmVmb3JlIDx3Y2hhci5oPi4gICovDQojaW5jbHVkZSA8c3Rk ZGVmLmg+DQojaW5jbHVkZSA8c3RkaW8uaD4NCiNpbmNsdWRlIDx0aW1lLmg+DQojaW5jbHVkZSA8 d2NoYXIuaD4NCmludCBtYWluICgpDQp7DQogIC8qIFRoaXMgZmFpbHMgb24gU29sYXJpcyA4Og0K ICAgICBtYnJ0b3djIHJldHVybnMgMiwgYW5kIHNldHMgd2MgdG8gMHgwMEYwLg0KICAgICBtYnRv d2MgcmV0dXJucyA0IChjb3JyZWN0KSBhbmQgc2V0cyB3YyB0byAweDVFREMuICAqLw0KICBpZiAo c2V0bG9jYWxlIChMQ19BTEwsICIkTE9DQUxFX1pIX0NOIikgIT0gTlVMTCkNCiAgICB7DQogICAg ICBjaGFyIGlucHV0W10gPSAiQlwyNTBcMjcxXDIwMVwwNjBcMjExXDA3MGVyIjsgLyogIkLDvMOf ZXIiICovDQogICAgICBtYnN0YXRlX3Qgc3RhdGU7DQogICAgICB3Y2hhcl90IHdjOw0KDQogICAg ICBtZW1zZXQgKCZzdGF0ZSwgJ1wwJywgc2l6ZW9mIChtYnN0YXRlX3QpKTsNCiAgICAgIGlmICht YnJ0b3djICgmd2MsIGlucHV0ICsgMywgNiwgJnN0YXRlKSAhPSA0DQogICAgICAgICAgJiYgbWJ0 b3djICgmd2MsIGlucHV0ICsgMywgNikgPT0gNCkNCiAgICAgICAgcmV0dXJuIDE7DQogICAgfQ0K ICByZXR1cm4gMDsNCn0NCl9BQ0VPRg0KaWYgYWNfZm5fY190cnlfcnVuICIkTElORU5PIjsgdGhl biA6DQogIGdsX2N2X2Z1bmNfbWJydG93Y19zYW5pdHljaGVjaz15ZXMNCmVsc2UNCiAgZ2xfY3Zf ZnVuY19tYnJ0b3djX3Nhbml0eWNoZWNrPW5vDQpmaQ0Kcm0gLWYgY29yZSAqLmNvcmUgY29yZS5j b25mdGVzdC4qIGdtb24ub3V0IGJiLm91dCBjb25mdGVzdCRhY19leGVleHQgXA0KICBjb25mdGVz dC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LmJlYW0gY29uZnRlc3QuJGFjX2V4dA0KZmkNCg0KICAgICAg ZmkNCg0KZmkNCnsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0 OiAkZ2xfY3ZfZnVuY19tYnJ0b3djX3Nhbml0eWNoZWNrIiA+JjUNCiRhc19lY2hvICIkZ2xfY3Zf ZnVuY19tYnJ0b3djX3Nhbml0eWNoZWNrIiA+JjY7IH0NCg0KICAgIFJFUExBQ0VfTUJTVEFURV9U PTANCiAgICBjYXNlICIkZ2xfY3ZfZnVuY19tYnJ0b3djX2luY29tcGxldGVfc3RhdGUiIGluDQog ICAgICAqeWVzKSA7Ow0KICAgICAgKikgUkVQTEFDRV9NQlNUQVRFX1Q9MSA7Ow0KICAgIGVzYWMN CiAgICBjYXNlICIkZ2xfY3ZfZnVuY19tYnJ0b3djX3Nhbml0eWNoZWNrIiBpbg0KICAgICAgKnll cykgOzsNCiAgICAgICopIFJFUExBQ0VfTUJTVEFURV9UPTEgOzsNCiAgICBlc2FjDQogIGVsc2UN CiAgICBSRVBMQUNFX01CU1RBVEVfVD0xDQogIGZpDQogIGlmIHRlc3QgJFJFUExBQ0VfTUJTVEFU RV9UID0gMTsgdGhlbg0KDQogICAgOg0KDQogIGZpDQoNCg0KDQogIGlmIHRlc3QgJGFjX2N2X2Z1 bmNfbWJydG93YyA9IG5vOyB0aGVuDQogICAgSEFWRV9NQlJUT1dDPTANCiAgZWxzZQ0KICAgIGlm IHRlc3QgJFJFUExBQ0VfTUJTVEFURV9UID0gMTsgdGhlbg0KICAgICAgUkVQTEFDRV9NQlJUT1dD PTENCiAgICBlbHNlDQoNCg0KDQogICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0k TElORU5PfTogY2hlY2tpbmcgd2hldGhlciBtYnJ0b3djIGhhbmRsZXMgYSBOVUxMIHB3YyBhcmd1 bWVudCIgPiY1DQokYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIG1icnRvd2MgaGFuZGxlcyBh IE5VTEwgcHdjIGFyZ3VtZW50Li4uICIgPiY2OyB9DQppZiAke2dsX2N2X2Z1bmNfbWJydG93Y19u dWxsX2FyZzErOn0gZmFsc2U7IHRoZW4gOg0KICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNg0K ZWxzZQ0KDQogICAgICAgICAgICAgICAgICBjYXNlICIkaG9zdF9vcyIgaW4NCiAgICAgICAgICAg ICAgICAgICMgR3Vlc3Mgbm8gb24gU29sYXJpcy4NCiAgICAgICAgc29sYXJpcyopIGdsX2N2X2Z1 bmNfbWJydG93Y19udWxsX2FyZzE9Imd1ZXNzaW5nIG5vIiA7Ow0KICAgICAgICAgICAgICAgICAg IyBHdWVzcyB5ZXMgb3RoZXJ3aXNlLg0KICAgICAgICAqKSAgICAgICAgZ2xfY3ZfZnVuY19tYnJ0 b3djX251bGxfYXJnMT0iZ3Vlc3NpbmcgeWVzIiA7Ow0KICAgICAgZXNhYw0KICAgICAgaWYgdGVz dCAkTE9DQUxFX0ZSX1VURjggIT0gbm9uZTsgdGhlbg0KICAgICAgICBpZiB0ZXN0ICIkY3Jvc3Nf Y29tcGlsaW5nIiA9IHllczsgdGhlbiA6DQogIDoNCmVsc2UNCiAgY2F0IGNvbmZkZWZzLmggLSA8 PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dA0KLyogZW5kIGNvbmZkZWZzLmguICAqLw0KDQojaW5j bHVkZSA8bG9jYWxlLmg+DQojaW5jbHVkZSA8c3RkbGliLmg+DQojaW5jbHVkZSA8c3RyaW5nLmg+ DQovKiBUcnU2NCB3aXRoIERlc2t0b3AgVG9vbGtpdCBDIGhhcyBhIGJ1ZzogPHN0ZGlvLmg+IG11 c3QgYmUgaW5jbHVkZWQgYmVmb3JlDQogICA8d2NoYXIuaD4uDQogICBCU0QvT1MgNC4wLjEgaGFz IGEgYnVnOiA8c3RkZGVmLmg+LCA8c3RkaW8uaD4gYW5kIDx0aW1lLmg+IG11c3QgYmUNCiAgIGlu Y2x1ZGVkIGJlZm9yZSA8d2NoYXIuaD4uICAqLw0KI2luY2x1ZGUgPHN0ZGRlZi5oPg0KI2luY2x1 ZGUgPHN0ZGlvLmg+DQojaW5jbHVkZSA8dGltZS5oPg0KI2luY2x1ZGUgPHdjaGFyLmg+DQppbnQg bWFpbiAoKQ0Kew0KICBpbnQgcmVzdWx0ID0gMDsNCg0KICBpZiAoc2V0bG9jYWxlIChMQ19BTEws ICIkTE9DQUxFX0ZSX1VURjgiKSAhPSBOVUxMKQ0KICAgIHsNCiAgICAgIGNoYXIgaW5wdXRbXSA9 ICJcMzAzXDIzN2VyIjsNCiAgICAgIG1ic3RhdGVfdCBzdGF0ZTsNCiAgICAgIHdjaGFyX3Qgd2M7 DQogICAgICBzaXplX3QgcmV0Ow0KDQogICAgICBtZW1zZXQgKCZzdGF0ZSwgJ1wwJywgc2l6ZW9m IChtYnN0YXRlX3QpKTsNCiAgICAgIHdjID0gKHdjaGFyX3QpIDB4QkFERkFDRTsNCiAgICAgIHJl dCA9IG1icnRvd2MgKCZ3YywgaW5wdXQsIDUsICZzdGF0ZSk7DQogICAgICBpZiAocmV0ICE9IDIp DQogICAgICAgIHJlc3VsdCB8PSAxOw0KICAgICAgaWYgKCFtYnNpbml0ICgmc3RhdGUpKQ0KICAg ICAgICByZXN1bHQgfD0gMjsNCg0KICAgICAgbWVtc2V0ICgmc3RhdGUsICdcMCcsIHNpemVvZiAo bWJzdGF0ZV90KSk7DQogICAgICByZXQgPSBtYnJ0b3djIChOVUxMLCBpbnB1dCwgNSwgJnN0YXRl KTsNCiAgICAgIGlmIChyZXQgIT0gMikgLyogU29sYXJpcyA3IGZhaWxzIGhlcmU6IHJldCBpcyAt MS4gICovDQogICAgICAgIHJlc3VsdCB8PSA0Ow0KICAgICAgaWYgKCFtYnNpbml0ICgmc3RhdGUp KQ0KICAgICAgICByZXN1bHQgfD0gODsNCiAgICB9DQogIHJldHVybiByZXN1bHQ7DQp9DQpfQUNF T0YNCmlmIGFjX2ZuX2NfdHJ5X3J1biAiJExJTkVOTyI7IHRoZW4gOg0KICBnbF9jdl9mdW5jX21i cnRvd2NfbnVsbF9hcmcxPXllcw0KZWxzZQ0KICBnbF9jdl9mdW5jX21icnRvd2NfbnVsbF9hcmcx PW5vDQpmaQ0Kcm0gLWYgY29yZSAqLmNvcmUgY29yZS5jb25mdGVzdC4qIGdtb24ub3V0IGJiLm91 dCBjb25mdGVzdCRhY19leGVleHQgXA0KICBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LmJl YW0gY29uZnRlc3QuJGFjX2V4dA0KZmkNCg0KICAgICAgZmkNCg0KZmkNCnsgJGFzX2VjaG8gIiRh c19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkZ2xfY3ZfZnVuY19tYnJ0b3djX251 bGxfYXJnMSIgPiY1DQokYXNfZWNobyAiJGdsX2N2X2Z1bmNfbWJydG93Y19udWxsX2FyZzEiID4m NjsgfQ0KDQoNCg0KDQogICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5P fTogY2hlY2tpbmcgd2hldGhlciBtYnJ0b3djIGhhbmRsZXMgYSBOVUxMIHN0cmluZyBhcmd1bWVu dCIgPiY1DQokYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIG1icnRvd2MgaGFuZGxlcyBhIE5V TEwgc3RyaW5nIGFyZ3VtZW50Li4uICIgPiY2OyB9DQppZiAke2dsX2N2X2Z1bmNfbWJydG93Y19u dWxsX2FyZzIrOn0gZmFsc2U7IHRoZW4gOg0KICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNg0K ZWxzZQ0KDQogICAgICAgICAgICAgICAgICBjYXNlICIkaG9zdF9vcyIgaW4NCiAgICAgICAgICAg ICAgIyBHdWVzcyBubyBvbiBPU0YvMS4NCiAgICAgICAgb3NmKikgZ2xfY3ZfZnVuY19tYnJ0b3dj X251bGxfYXJnMj0iZ3Vlc3Npbmcgbm8iIDs7DQogICAgICAgICAgICAgICMgR3Vlc3MgeWVzIG90 aGVyd2lzZS4NCiAgICAgICAgKikgICAgZ2xfY3ZfZnVuY19tYnJ0b3djX251bGxfYXJnMj0iZ3Vl c3NpbmcgeWVzIiA7Ow0KICAgICAgZXNhYw0KICAgICAgaWYgdGVzdCAkTE9DQUxFX0ZSX1VURjgg IT0gbm9uZTsgdGhlbg0KICAgICAgICBpZiB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IHllczsg dGhlbiA6DQogIDoNCmVsc2UNCiAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3Qu JGFjX2V4dA0KLyogZW5kIGNvbmZkZWZzLmguICAqLw0KDQojaW5jbHVkZSA8bG9jYWxlLmg+DQoj aW5jbHVkZSA8c3RyaW5nLmg+DQovKiBUcnU2NCB3aXRoIERlc2t0b3AgVG9vbGtpdCBDIGhhcyBh IGJ1ZzogPHN0ZGlvLmg+IG11c3QgYmUgaW5jbHVkZWQgYmVmb3JlDQogICA8d2NoYXIuaD4uDQog ICBCU0QvT1MgNC4wLjEgaGFzIGEgYnVnOiA8c3RkZGVmLmg+LCA8c3RkaW8uaD4gYW5kIDx0aW1l Lmg+IG11c3QgYmUNCiAgIGluY2x1ZGVkIGJlZm9yZSA8d2NoYXIuaD4uICAqLw0KI2luY2x1ZGUg PHN0ZGRlZi5oPg0KI2luY2x1ZGUgPHN0ZGlvLmg+DQojaW5jbHVkZSA8dGltZS5oPg0KI2luY2x1 ZGUgPHdjaGFyLmg+DQppbnQgbWFpbiAoKQ0Kew0KICBpZiAoc2V0bG9jYWxlIChMQ19BTEwsICIk TE9DQUxFX0ZSX1VURjgiKSAhPSBOVUxMKQ0KICAgIHsNCiAgICAgIG1ic3RhdGVfdCBzdGF0ZTsN CiAgICAgIHdjaGFyX3Qgd2M7DQogICAgICBpbnQgcmV0Ow0KDQogICAgICBtZW1zZXQgKCZzdGF0 ZSwgJ1wwJywgc2l6ZW9mIChtYnN0YXRlX3QpKTsNCiAgICAgIHdjID0gKHdjaGFyX3QpIDB4QkFE RkFDRTsNCiAgICAgIG1icnRvd2MgKCZ3YywgTlVMTCwgNSwgJnN0YXRlKTsNCiAgICAgIC8qIENo ZWNrIHRoYXQgd2Mgd2FzIG5vdCBtb2RpZmllZC4gICovDQogICAgICBpZiAod2MgIT0gKHdjaGFy X3QpIDB4QkFERkFDRSkNCiAgICAgICAgcmV0dXJuIDE7DQogICAgfQ0KICByZXR1cm4gMDsNCn0N Cl9BQ0VPRg0KaWYgYWNfZm5fY190cnlfcnVuICIkTElORU5PIjsgdGhlbiA6DQogIGdsX2N2X2Z1 bmNfbWJydG93Y19udWxsX2FyZzI9eWVzDQplbHNlDQogIGdsX2N2X2Z1bmNfbWJydG93Y19udWxs X2FyZzI9bm8NCmZpDQpybSAtZiBjb3JlICouY29yZSBjb3JlLmNvbmZ0ZXN0LiogZ21vbi5vdXQg YmIub3V0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCBcDQogIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRl c3QuYmVhbSBjb25mdGVzdC4kYWNfZXh0DQpmaQ0KDQogICAgICBmaQ0KDQpmaQ0KeyAkYXNfZWNo byAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRnbF9jdl9mdW5jX21icnRv d2NfbnVsbF9hcmcyIiA+JjUNCiRhc19lY2hvICIkZ2xfY3ZfZnVuY19tYnJ0b3djX251bGxfYXJn MiIgPiY2OyB9DQoNCg0KDQoNCg0KDQogIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0k TElORU5PfTogY2hlY2tpbmcgd2hldGhlciBtYnJ0b3djIGhhcyBhIGNvcnJlY3QgcmV0dXJuIHZh bHVlIiA+JjUNCiRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgbWJydG93YyBoYXMgYSBjb3Jy ZWN0IHJldHVybiB2YWx1ZS4uLiAiID4mNjsgfQ0KaWYgJHtnbF9jdl9mdW5jX21icnRvd2NfcmV0 dmFsKzp9IGZhbHNlOyB0aGVuIDoNCiAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYNCmVsc2UN Cg0KICAgICAgICAgICAgICAgICAgY2FzZSAiJGhvc3Rfb3MiIGluDQogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICMgR3Vlc3Mgbm8gb24gSFAtVVgsIFNvbGFyaXMsIG5hdGl2ZSBX aW5kb3dzLg0KICAgICAgICBocHV4KiB8IHNvbGFyaXMqIHwgbWluZ3cqKSBnbF9jdl9mdW5jX21i cnRvd2NfcmV0dmFsPSJndWVzc2luZyBubyIgOzsNCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIyBHdWVzcyB5ZXMgb3RoZXJ3aXNlLg0KICAgICAgICAqKSAgICAgICAgICAgICAg ICAgICAgICAgICBnbF9jdl9mdW5jX21icnRvd2NfcmV0dmFsPSJndWVzc2luZyB5ZXMiIDs7DQog ICAgICBlc2FjDQogICAgICBpZiB0ZXN0ICRMT0NBTEVfRlJfVVRGOCAhPSBub25lIHx8IHRlc3Qg JExPQ0FMRV9KQSAhPSBub25lIFwNCiAgICAgICAgIHx8IHsgY2FzZSAiJGhvc3Rfb3MiIGluIG1p bmd3KikgdHJ1ZTs7ICopIGZhbHNlOzsgZXNhYzsgfTsgdGhlbg0KICAgICAgICBpZiB0ZXN0ICIk Y3Jvc3NfY29tcGlsaW5nIiA9IHllczsgdGhlbiA6DQogIDoNCmVsc2UNCiAgY2F0IGNvbmZkZWZz LmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dA0KLyogZW5kIGNvbmZkZWZzLmguICAqLw0K DQojaW5jbHVkZSA8bG9jYWxlLmg+DQojaW5jbHVkZSA8c3RyaW5nLmg+DQovKiBUcnU2NCB3aXRo IERlc2t0b3AgVG9vbGtpdCBDIGhhcyBhIGJ1ZzogPHN0ZGlvLmg+IG11c3QgYmUgaW5jbHVkZWQg YmVmb3JlDQogICA8d2NoYXIuaD4uDQogICBCU0QvT1MgNC4wLjEgaGFzIGEgYnVnOiA8c3RkZGVm Lmg+LCA8c3RkaW8uaD4gYW5kIDx0aW1lLmg+IG11c3QgYmUNCiAgIGluY2x1ZGVkIGJlZm9yZSA8 d2NoYXIuaD4uICAqLw0KI2luY2x1ZGUgPHN0ZGRlZi5oPg0KI2luY2x1ZGUgPHN0ZGlvLmg+DQoj aW5jbHVkZSA8dGltZS5oPg0KI2luY2x1ZGUgPHdjaGFyLmg+DQppbnQgbWFpbiAoKQ0Kew0KICBp bnQgcmVzdWx0ID0gMDsNCiAgaW50IGZvdW5kX3NvbWVfbG9jYWxlID0gMDsNCiAgLyogVGhpcyBm YWlscyBvbiBTb2xhcmlzLiAgKi8NCiAgaWYgKHNldGxvY2FsZSAoTENfQUxMLCAiJExPQ0FMRV9G Ul9VVEY4IikgIT0gTlVMTCkNCiAgICB7DQogICAgICBjaGFyIGlucHV0W10gPSAiQlwzMDNcMjc0 XDMwM1wyMzdlciI7IC8qICJCw7zDn2VyIiAqLw0KICAgICAgbWJzdGF0ZV90IHN0YXRlOw0KICAg ICAgd2NoYXJfdCB3YzsNCg0KICAgICAgbWVtc2V0ICgmc3RhdGUsICdcMCcsIHNpemVvZiAobWJz dGF0ZV90KSk7DQogICAgICBpZiAobWJydG93YyAoJndjLCBpbnB1dCArIDEsIDEsICZzdGF0ZSkg PT0gKHNpemVfdCkoLTIpKQ0KICAgICAgICB7DQogICAgICAgICAgaW5wdXRbMV0gPSAnXDAnOw0K ICAgICAgICAgIGlmIChtYnJ0b3djICgmd2MsIGlucHV0ICsgMiwgNSwgJnN0YXRlKSAhPSAxKQ0K ICAgICAgICAgICAgcmVzdWx0IHw9IDE7DQogICAgICAgIH0NCiAgICAgIGZvdW5kX3NvbWVfbG9j YWxlID0gMTsNCiAgICB9DQogIC8qIFRoaXMgZmFpbHMgb24gSFAtVVggMTEuMTEuICAqLw0KICBp ZiAoc2V0bG9jYWxlIChMQ19BTEwsICIkTE9DQUxFX0pBIikgIT0gTlVMTCkNCiAgICB7DQogICAg ICBjaGFyIGlucHV0W10gPSAiQlwyMTdcMjUzXDM0NFwyMTdcMjUxXDMxNmVyIjsgLyogIkLDvMOf ZXIiICovDQogICAgICBtYnN0YXRlX3Qgc3RhdGU7DQogICAgICB3Y2hhcl90IHdjOw0KDQogICAg ICBtZW1zZXQgKCZzdGF0ZSwgJ1wwJywgc2l6ZW9mIChtYnN0YXRlX3QpKTsNCiAgICAgIGlmICht YnJ0b3djICgmd2MsIGlucHV0ICsgMSwgMSwgJnN0YXRlKSA9PSAoc2l6ZV90KSgtMikpDQogICAg ICAgIHsNCiAgICAgICAgICBpbnB1dFsxXSA9ICdcMCc7DQogICAgICAgICAgaWYgKG1icnRvd2Mg KCZ3YywgaW5wdXQgKyAyLCA1LCAmc3RhdGUpICE9IDIpDQogICAgICAgICAgICByZXN1bHQgfD0g MjsNCiAgICAgICAgfQ0KICAgICAgZm91bmRfc29tZV9sb2NhbGUgPSAxOw0KICAgIH0NCiAgLyog VGhpcyBmYWlscyBvbiBuYXRpdmUgV2luZG93cy4gICovDQogIGlmIChzZXRsb2NhbGUgKExDX0FM TCwgIkphcGFuZXNlX0phcGFuLjkzMiIpICE9IE5VTEwpDQogICAgew0KICAgICAgY2hhciBpbnB1 dFtdID0gIjxcMjIzXDM3MlwyMjZcMTczXDIxNFwzNTI+IjsgLyogIjzml6XmnKzoqp4+IiAqLw0K ICAgICAgbWJzdGF0ZV90IHN0YXRlOw0KICAgICAgd2NoYXJfdCB3YzsNCg0KICAgICAgbWVtc2V0 ICgmc3RhdGUsICdcMCcsIHNpemVvZiAobWJzdGF0ZV90KSk7DQogICAgICBpZiAobWJydG93YyAo JndjLCBpbnB1dCArIDMsIDEsICZzdGF0ZSkgPT0gKHNpemVfdCkoLTIpKQ0KICAgICAgICB7DQog ICAgICAgICAgaW5wdXRbM10gPSAnXDAnOw0KICAgICAgICAgIGlmIChtYnJ0b3djICgmd2MsIGlu cHV0ICsgNCwgNCwgJnN0YXRlKSAhPSAxKQ0KICAgICAgICAgICAgcmVzdWx0IHw9IDQ7DQogICAg ICAgIH0NCiAgICAgIGZvdW5kX3NvbWVfbG9jYWxlID0gMTsNCiAgICB9DQogIGlmIChzZXRsb2Nh bGUgKExDX0FMTCwgIkNoaW5lc2VfVGFpd2FuLjk1MCIpICE9IE5VTEwpDQogICAgew0KICAgICAg Y2hhciBpbnB1dFtdID0gIjxcMjQ0XDM1MVwyNDVcMjczXDI3M1wxNzE+IjsgLyogIjzml6XmnKzo qp4+IiAqLw0KICAgICAgbWJzdGF0ZV90IHN0YXRlOw0KICAgICAgd2NoYXJfdCB3YzsNCg0KICAg ICAgbWVtc2V0ICgmc3RhdGUsICdcMCcsIHNpemVvZiAobWJzdGF0ZV90KSk7DQogICAgICBpZiAo bWJydG93YyAoJndjLCBpbnB1dCArIDMsIDEsICZzdGF0ZSkgPT0gKHNpemVfdCkoLTIpKQ0KICAg ICAgICB7DQogICAgICAgICAgaW5wdXRbM10gPSAnXDAnOw0KICAgICAgICAgIGlmIChtYnJ0b3dj ICgmd2MsIGlucHV0ICsgNCwgNCwgJnN0YXRlKSAhPSAxKQ0KICAgICAgICAgICAgcmVzdWx0IHw9 IDg7DQogICAgICAgIH0NCiAgICAgIGZvdW5kX3NvbWVfbG9jYWxlID0gMTsNCiAgICB9DQogIGlm IChzZXRsb2NhbGUgKExDX0FMTCwgIkNoaW5lc2VfQ2hpbmEuOTM2IikgIT0gTlVMTCkNCiAgICB7 DQogICAgICBjaGFyIGlucHV0W10gPSAiPFwzMTBcMzI1XDI2MVwyNzZcMzI1XDEzMj4iOyAvKiAi POaXpeacrOiqnj4iICovDQogICAgICBtYnN0YXRlX3Qgc3RhdGU7DQogICAgICB3Y2hhcl90IHdj Ow0KDQogICAgICBtZW1zZXQgKCZzdGF0ZSwgJ1wwJywgc2l6ZW9mIChtYnN0YXRlX3QpKTsNCiAg ICAgIGlmIChtYnJ0b3djICgmd2MsIGlucHV0ICsgMywgMSwgJnN0YXRlKSA9PSAoc2l6ZV90KSgt MikpDQogICAgICAgIHsNCiAgICAgICAgICBpbnB1dFszXSA9ICdcMCc7DQogICAgICAgICAgaWYg KG1icnRvd2MgKCZ3YywgaW5wdXQgKyA0LCA0LCAmc3RhdGUpICE9IDEpDQogICAgICAgICAgICBy ZXN1bHQgfD0gMTY7DQogICAgICAgIH0NCiAgICAgIGZvdW5kX3NvbWVfbG9jYWxlID0gMTsNCiAg ICB9DQogIHJldHVybiAoZm91bmRfc29tZV9sb2NhbGUgPyByZXN1bHQgOiA3Nyk7DQp9DQpfQUNF T0YNCmlmIGFjX2ZuX2NfdHJ5X3J1biAiJExJTkVOTyI7IHRoZW4gOg0KICBnbF9jdl9mdW5jX21i cnRvd2NfcmV0dmFsPXllcw0KZWxzZQ0KICBpZiB0ZXN0ICQ/ICE9IDc3OyB0aGVuDQogICAgICAg ICAgICAgZ2xfY3ZfZnVuY19tYnJ0b3djX3JldHZhbD1ubw0KICAgICAgICAgICBmaQ0KDQpmaQ0K cm0gLWYgY29yZSAqLmNvcmUgY29yZS5jb25mdGVzdC4qIGdtb24ub3V0IGJiLm91dCBjb25mdGVz dCRhY19leGVleHQgXA0KICBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LmJlYW0gY29uZnRl c3QuJGFjX2V4dA0KZmkNCg0KICAgICAgZmkNCg0KZmkNCnsgJGFzX2VjaG8gIiRhc19tZToke2Fz X2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkZ2xfY3ZfZnVuY19tYnJ0b3djX3JldHZhbCIgPiY1 DQokYXNfZWNobyAiJGdsX2N2X2Z1bmNfbWJydG93Y19yZXR2YWwiID4mNjsgfQ0KDQoNCg0KDQog ICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hl dGhlciBtYnJ0b3djIHJldHVybnMgMCB3aGVuIHBhcnNpbmcgYSBOVUwgY2hhcmFjdGVyIiA+JjUN CiRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgbWJydG93YyByZXR1cm5zIDAgd2hlbiBwYXJz aW5nIGEgTlVMIGNoYXJhY3Rlci4uLiAiID4mNjsgfQ0KaWYgJHtnbF9jdl9mdW5jX21icnRvd2Nf bnVsX3JldHZhbCs6fSBmYWxzZTsgdGhlbiA6DQogICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2 DQplbHNlDQoNCiAgICAgICAgICAgICAgICAgIGNhc2UgIiRob3N0X29zIiBpbg0KICAgICAgICAg ICAgICAgICAgICAgICAjIEd1ZXNzIG5vIG9uIFNvbGFyaXMgOCBhbmQgOS4NCiAgICAgICAgc29s YXJpczIuWzg5XSkgZ2xfY3ZfZnVuY19tYnJ0b3djX251bF9yZXR2YWw9Imd1ZXNzaW5nIG5vIiA7 Ow0KICAgICAgICAgICAgICAgICAgICAgICAjIEd1ZXNzIHllcyBvdGhlcndpc2UuDQogICAgICAg ICopICAgICAgICAgICAgIGdsX2N2X2Z1bmNfbWJydG93Y19udWxfcmV0dmFsPSJndWVzc2luZyB5 ZXMiIDs7DQogICAgICBlc2FjDQogICAgICBpZiB0ZXN0ICRMT0NBTEVfWkhfQ04gIT0gbm9uZTsg dGhlbg0KICAgICAgICBpZiB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IHllczsgdGhlbiA6DQog IDoNCmVsc2UNCiAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dA0K LyogZW5kIGNvbmZkZWZzLmguICAqLw0KDQojaW5jbHVkZSA8bG9jYWxlLmg+DQojaW5jbHVkZSA8 c3RyaW5nLmg+DQovKiBUcnU2NCB3aXRoIERlc2t0b3AgVG9vbGtpdCBDIGhhcyBhIGJ1ZzogPHN0 ZGlvLmg+IG11c3QgYmUgaW5jbHVkZWQgYmVmb3JlDQogICA8d2NoYXIuaD4uDQogICBCU0QvT1Mg NC4wLjEgaGFzIGEgYnVnOiA8c3RkZGVmLmg+LCA8c3RkaW8uaD4gYW5kIDx0aW1lLmg+IG11c3Qg YmUNCiAgIGluY2x1ZGVkIGJlZm9yZSA8d2NoYXIuaD4uICAqLw0KI2luY2x1ZGUgPHN0ZGRlZi5o Pg0KI2luY2x1ZGUgPHN0ZGlvLmg+DQojaW5jbHVkZSA8dGltZS5oPg0KI2luY2x1ZGUgPHdjaGFy Lmg+DQppbnQgbWFpbiAoKQ0Kew0KICAvKiBUaGlzIGZhaWxzIG9uIFNvbGFyaXMgOCBhbmQgOS4g ICovDQogIGlmIChzZXRsb2NhbGUgKExDX0FMTCwgIiRMT0NBTEVfWkhfQ04iKSAhPSBOVUxMKQ0K ICAgIHsNCiAgICAgIG1ic3RhdGVfdCBzdGF0ZTsNCiAgICAgIHdjaGFyX3Qgd2M7DQoNCiAgICAg IG1lbXNldCAoJnN0YXRlLCAnXDAnLCBzaXplb2YgKG1ic3RhdGVfdCkpOw0KICAgICAgaWYgKG1i cnRvd2MgKCZ3YywgIiIsIDEsICZzdGF0ZSkgIT0gMCkNCiAgICAgICAgcmV0dXJuIDE7DQogICAg fQ0KICByZXR1cm4gMDsNCn0NCl9BQ0VPRg0KaWYgYWNfZm5fY190cnlfcnVuICIkTElORU5PIjsg dGhlbiA6DQogIGdsX2N2X2Z1bmNfbWJydG93Y19udWxfcmV0dmFsPXllcw0KZWxzZQ0KICBnbF9j dl9mdW5jX21icnRvd2NfbnVsX3JldHZhbD1ubw0KZmkNCnJtIC1mIGNvcmUgKi5jb3JlIGNvcmUu Y29uZnRlc3QuKiBnbW9uLm91dCBiYi5vdXQgY29uZnRlc3QkYWNfZXhlZXh0IFwNCiAgY29uZnRl c3QuJGFjX29iamV4dCBjb25mdGVzdC5iZWFtIGNvbmZ0ZXN0LiRhY19leHQNCmZpDQoNCiAgICAg IGZpDQoNCmZpDQp7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3Vs dDogJGdsX2N2X2Z1bmNfbWJydG93Y19udWxfcmV0dmFsIiA+JjUNCiRhc19lY2hvICIkZ2xfY3Zf ZnVuY19tYnJ0b3djX251bF9yZXR2YWwiID4mNjsgfQ0KDQogICAgICBjYXNlICIkZ2xfY3ZfZnVu Y19tYnJ0b3djX251bGxfYXJnMSIgaW4NCiAgICAgICAgKnllcykgOzsNCiAgICAgICAgKikNCiRh c19lY2hvICIjZGVmaW5lIE1CUlRPV0NfTlVMTF9BUkcxX0JVRyAxIiA+PmNvbmZkZWZzLmgNCg0K ICAgICAgICAgICBSRVBMQUNFX01CUlRPV0M9MQ0KICAgICAgICAgICA7Ow0KICAgICAgZXNhYw0K ICAgICAgY2FzZSAiJGdsX2N2X2Z1bmNfbWJydG93Y19udWxsX2FyZzIiIGluDQogICAgICAgICp5 ZXMpIDs7DQogICAgICAgICopDQokYXNfZWNobyAiI2RlZmluZSBNQlJUT1dDX05VTExfQVJHMl9C VUcgMSIgPj5jb25mZGVmcy5oDQoNCiAgICAgICAgICAgUkVQTEFDRV9NQlJUT1dDPTENCiAgICAg ICAgICAgOzsNCiAgICAgIGVzYWMNCiAgICAgIGNhc2UgIiRnbF9jdl9mdW5jX21icnRvd2NfcmV0 dmFsIiBpbg0KICAgICAgICAqeWVzKSA7Ow0KICAgICAgICAqKQ0KJGFzX2VjaG8gIiNkZWZpbmUg TUJSVE9XQ19SRVRWQUxfQlVHIDEiID4+Y29uZmRlZnMuaA0KDQogICAgICAgICAgIFJFUExBQ0Vf TUJSVE9XQz0xDQogICAgICAgICAgIDs7DQogICAgICBlc2FjDQogICAgICBjYXNlICIkZ2xfY3Zf ZnVuY19tYnJ0b3djX251bF9yZXR2YWwiIGluDQogICAgICAgICp5ZXMpIDs7DQogICAgICAgICop DQokYXNfZWNobyAiI2RlZmluZSBNQlJUT1dDX05VTF9SRVRWQUxfQlVHIDEiID4+Y29uZmRlZnMu aA0KDQogICAgICAgICAgIFJFUExBQ0VfTUJSVE9XQz0xDQogICAgICAgICAgIDs7DQogICAgICBl c2FjDQogICAgZmkNCiAgZmkNCiAgaWYgdGVzdCAkSEFWRV9NQlJUT1dDID0gMCB8fCB0ZXN0ICRS RVBMQUNFX01CUlRPV0MgPSAxOyB0aGVuDQoNCiAgICA6DQoNCg0KDQoNCg0KDQoNCg0KDQogIGds X0xJQk9CSlM9IiRnbF9MSUJPQkpTIG1icnRvd2MuJGFjX29iamV4dCINCg0KDQogIDoNCg0KICBm aQ0KDQoNCg0KDQogIEdOVUxJQl9NQlJUT1dDPTENCg0KDQoNCiRhc19lY2hvICIjZGVmaW5lIEdO VUxJQl9URVNUX01CUlRPV0MgMSIgPj5jb25mZGVmcy5oDQoNCg0KDQogICMgQ29kZSBmcm9tIG1v ZHVsZSBtYnNhbGlnbjoNCiAgIyBDb2RlIGZyb20gbW9kdWxlIG1ic2Nhc2VjbXA6DQoNCg0KDQog IEdOVUxJQl9NQlNDQVNFQ01QPTENCg0KDQoNCiRhc19lY2hvICIjZGVmaW5lIEdOVUxJQl9URVNU X01CU0NBU0VDTVAgMSIgPj5jb25mZGVmcy5oDQoNCg0KDQogICMgQ29kZSBmcm9tIG1vZHVsZSBt YnNpbml0Og0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCiAgaWYgdGVzdCAkYWNfY3ZfZnVuY19tYnNp bml0ID0geWVzICYmIHRlc3QgJGFjX2N2X2Z1bmNfbWJydG93YyA9IHllczsgdGhlbg0KDQoNCg0K ICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdo ZXRoZXIgbWJydG93YyBoYW5kbGVzIGluY29tcGxldGUgY2hhcmFjdGVycyIgPiY1DQokYXNfZWNo b19uICJjaGVja2luZyB3aGV0aGVyIG1icnRvd2MgaGFuZGxlcyBpbmNvbXBsZXRlIGNoYXJhY3Rl cnMuLi4gIiA+JjY7IH0NCmlmICR7Z2xfY3ZfZnVuY19tYnJ0b3djX2luY29tcGxldGVfc3RhdGUr On0gZmFsc2U7IHRoZW4gOg0KICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNg0KZWxzZQ0KDQog ICAgICAgICAgICAgICAgICBjYXNlICIkaG9zdF9vcyIgaW4NCiAgICAgICAgICAgICAgICAgICAg ICMgR3Vlc3Mgbm8gb24gQUlYIGFuZCBPU0YvMS4NCiAgICAgICAgYWl4KiB8IG9zZiopIGdsX2N2 X2Z1bmNfbWJydG93Y19pbmNvbXBsZXRlX3N0YXRlPSJndWVzc2luZyBubyIgOzsNCiAgICAgICAg ICAgICAgICAgICAgICMgR3Vlc3MgeWVzIG90aGVyd2lzZS4NCiAgICAgICAgKikgICAgICAgICAg IGdsX2N2X2Z1bmNfbWJydG93Y19pbmNvbXBsZXRlX3N0YXRlPSJndWVzc2luZyB5ZXMiIDs7DQog ICAgICBlc2FjDQogICAgICBpZiB0ZXN0ICRMT0NBTEVfSkEgIT0gbm9uZTsgdGhlbg0KICAgICAg ICBpZiB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IHllczsgdGhlbiA6DQogIDoNCmVsc2UNCiAg Y2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dA0KLyogZW5kIGNvbmZk ZWZzLmguICAqLw0KDQojaW5jbHVkZSA8bG9jYWxlLmg+DQojaW5jbHVkZSA8c3RyaW5nLmg+DQov KiBUcnU2NCB3aXRoIERlc2t0b3AgVG9vbGtpdCBDIGhhcyBhIGJ1ZzogPHN0ZGlvLmg+IG11c3Qg YmUgaW5jbHVkZWQgYmVmb3JlDQogICA8d2NoYXIuaD4uDQogICBCU0QvT1MgNC4wLjEgaGFzIGEg YnVnOiA8c3RkZGVmLmg+LCA8c3RkaW8uaD4gYW5kIDx0aW1lLmg+IG11c3QgYmUNCiAgIGluY2x1 ZGVkIGJlZm9yZSA8d2NoYXIuaD4uICAqLw0KI2luY2x1ZGUgPHN0ZGRlZi5oPg0KI2luY2x1ZGUg PHN0ZGlvLmg+DQojaW5jbHVkZSA8dGltZS5oPg0KI2luY2x1ZGUgPHdjaGFyLmg+DQppbnQgbWFp biAoKQ0Kew0KICBpZiAoc2V0bG9jYWxlIChMQ19BTEwsICIkTE9DQUxFX0pBIikgIT0gTlVMTCkN CiAgICB7DQogICAgICBjb25zdCBjaGFyIGlucHV0W10gPSAiQlwyMTdcMjUzXDM0NFwyMTdcMjUx XDMxNmVyIjsgLyogIkLDvMOfZXIiICovDQogICAgICBtYnN0YXRlX3Qgc3RhdGU7DQogICAgICB3 Y2hhcl90IHdjOw0KDQogICAgICBtZW1zZXQgKCZzdGF0ZSwgJ1wwJywgc2l6ZW9mIChtYnN0YXRl X3QpKTsNCiAgICAgIGlmIChtYnJ0b3djICgmd2MsIGlucHV0ICsgMSwgMSwgJnN0YXRlKSA9PSAo c2l6ZV90KSgtMikpDQogICAgICAgIGlmIChtYnNpbml0ICgmc3RhdGUpKQ0KICAgICAgICAgIHJl dHVybiAxOw0KICAgIH0NCiAgcmV0dXJuIDA7DQp9DQpfQUNFT0YNCmlmIGFjX2ZuX2NfdHJ5X3J1 biAiJExJTkVOTyI7IHRoZW4gOg0KICBnbF9jdl9mdW5jX21icnRvd2NfaW5jb21wbGV0ZV9zdGF0 ZT15ZXMNCmVsc2UNCiAgZ2xfY3ZfZnVuY19tYnJ0b3djX2luY29tcGxldGVfc3RhdGU9bm8NCmZp DQpybSAtZiBjb3JlICouY29yZSBjb3JlLmNvbmZ0ZXN0LiogZ21vbi5vdXQgYmIub3V0IGNvbmZ0 ZXN0JGFjX2V4ZWV4dCBcDQogIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuYmVhbSBjb25m dGVzdC4kYWNfZXh0DQpmaQ0KDQogICAgICBmaQ0KDQpmaQ0KeyAkYXNfZWNobyAiJGFzX21lOiR7 YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRnbF9jdl9mdW5jX21icnRvd2NfaW5jb21wbGV0 ZV9zdGF0ZSIgPiY1DQokYXNfZWNobyAiJGdsX2N2X2Z1bmNfbWJydG93Y19pbmNvbXBsZXRlX3N0 YXRlIiA+JjY7IH0NCg0KDQoNCg0KICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8t JExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgbWJydG93YyB3b3JrcyBhcyB3ZWxsIGFzIG1idG93 YyIgPiY1DQokYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIG1icnRvd2Mgd29ya3MgYXMgd2Vs bCBhcyBtYnRvd2MuLi4gIiA+JjY7IH0NCmlmICR7Z2xfY3ZfZnVuY19tYnJ0b3djX3Nhbml0eWNo ZWNrKzp9IGZhbHNlOyB0aGVuIDoNCiAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYNCmVsc2UN Cg0KICAgICAgICAgICAgICAgICAgY2FzZSAiJGhvc3Rfb3MiIGluDQogICAgICAgICAgICAgICAg ICAgICMgR3Vlc3Mgbm8gb24gU29sYXJpcyA4Lg0KICAgICAgICBzb2xhcmlzMi44KSBnbF9jdl9m dW5jX21icnRvd2Nfc2FuaXR5Y2hlY2s9Imd1ZXNzaW5nIG5vIiA7Ow0KICAgICAgICAgICAgICAg ICAgICAjIEd1ZXNzIHllcyBvdGhlcndpc2UuDQogICAgICAgICopICAgICAgICAgIGdsX2N2X2Z1 bmNfbWJydG93Y19zYW5pdHljaGVjaz0iZ3Vlc3NpbmcgeWVzIiA7Ow0KICAgICAgZXNhYw0KICAg ICAgaWYgdGVzdCAkTE9DQUxFX1pIX0NOICE9IG5vbmU7IHRoZW4NCiAgICAgICAgaWYgdGVzdCAi JGNyb3NzX2NvbXBpbGluZyIgPSB5ZXM7IHRoZW4gOg0KICA6DQplbHNlDQogIGNhdCBjb25mZGVm cy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQNCi8qIGVuZCBjb25mZGVmcy5oLiAgKi8N Cg0KI2luY2x1ZGUgPGxvY2FsZS5oPg0KI2luY2x1ZGUgPHN0ZGxpYi5oPg0KI2luY2x1ZGUgPHN0 cmluZy5oPg0KLyogVHJ1NjQgd2l0aCBEZXNrdG9wIFRvb2xraXQgQyBoYXMgYSBidWc6IDxzdGRp by5oPiBtdXN0IGJlIGluY2x1ZGVkIGJlZm9yZQ0KICAgPHdjaGFyLmg+Lg0KICAgQlNEL09TIDQu MC4xIGhhcyBhIGJ1ZzogPHN0ZGRlZi5oPiwgPHN0ZGlvLmg+IGFuZCA8dGltZS5oPiBtdXN0IGJl DQogICBpbmNsdWRlZCBiZWZvcmUgPHdjaGFyLmg+LiAgKi8NCiNpbmNsdWRlIDxzdGRkZWYuaD4N CiNpbmNsdWRlIDxzdGRpby5oPg0KI2luY2x1ZGUgPHRpbWUuaD4NCiNpbmNsdWRlIDx3Y2hhci5o Pg0KaW50IG1haW4gKCkNCnsNCiAgLyogVGhpcyBmYWlscyBvbiBTb2xhcmlzIDg6DQogICAgIG1i cnRvd2MgcmV0dXJucyAyLCBhbmQgc2V0cyB3YyB0byAweDAwRjAuDQogICAgIG1idG93YyByZXR1 cm5zIDQgKGNvcnJlY3QpIGFuZCBzZXRzIHdjIHRvIDB4NUVEQy4gICovDQogIGlmIChzZXRsb2Nh bGUgKExDX0FMTCwgIiRMT0NBTEVfWkhfQ04iKSAhPSBOVUxMKQ0KICAgIHsNCiAgICAgIGNoYXIg aW5wdXRbXSA9ICJCXDI1MFwyNzFcMjAxXDA2MFwyMTFcMDcwZXIiOyAvKiAiQsO8w59lciIgKi8N CiAgICAgIG1ic3RhdGVfdCBzdGF0ZTsNCiAgICAgIHdjaGFyX3Qgd2M7DQoNCiAgICAgIG1lbXNl dCAoJnN0YXRlLCAnXDAnLCBzaXplb2YgKG1ic3RhdGVfdCkpOw0KICAgICAgaWYgKG1icnRvd2Mg KCZ3YywgaW5wdXQgKyAzLCA2LCAmc3RhdGUpICE9IDQNCiAgICAgICAgICAmJiBtYnRvd2MgKCZ3 YywgaW5wdXQgKyAzLCA2KSA9PSA0KQ0KICAgICAgICByZXR1cm4gMTsNCiAgICB9DQogIHJldHVy biAwOw0KfQ0KX0FDRU9GDQppZiBhY19mbl9jX3RyeV9ydW4gIiRMSU5FTk8iOyB0aGVuIDoNCiAg Z2xfY3ZfZnVuY19tYnJ0b3djX3Nhbml0eWNoZWNrPXllcw0KZWxzZQ0KICBnbF9jdl9mdW5jX21i cnRvd2Nfc2FuaXR5Y2hlY2s9bm8NCmZpDQpybSAtZiBjb3JlICouY29yZSBjb3JlLmNvbmZ0ZXN0 LiogZ21vbi5vdXQgYmIub3V0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCBcDQogIGNvbmZ0ZXN0LiRhY19v YmpleHQgY29uZnRlc3QuYmVhbSBjb25mdGVzdC4kYWNfZXh0DQpmaQ0KDQogICAgICBmaQ0KDQpm aQ0KeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRnbF9j dl9mdW5jX21icnRvd2Nfc2FuaXR5Y2hlY2siID4mNQ0KJGFzX2VjaG8gIiRnbF9jdl9mdW5jX21i cnRvd2Nfc2FuaXR5Y2hlY2siID4mNjsgfQ0KDQogICAgUkVQTEFDRV9NQlNUQVRFX1Q9MA0KICAg IGNhc2UgIiRnbF9jdl9mdW5jX21icnRvd2NfaW5jb21wbGV0ZV9zdGF0ZSIgaW4NCiAgICAgICp5 ZXMpIDs7DQogICAgICAqKSBSRVBMQUNFX01CU1RBVEVfVD0xIDs7DQogICAgZXNhYw0KICAgIGNh c2UgIiRnbF9jdl9mdW5jX21icnRvd2Nfc2FuaXR5Y2hlY2siIGluDQogICAgICAqeWVzKSA7Ow0K ICAgICAgKikgUkVQTEFDRV9NQlNUQVRFX1Q9MSA7Ow0KICAgIGVzYWMNCiAgZWxzZQ0KICAgIFJF UExBQ0VfTUJTVEFURV9UPTENCiAgZmkNCiAgaWYgdGVzdCAkUkVQTEFDRV9NQlNUQVRFX1QgPSAx OyB0aGVuDQoNCiAgICA6DQoNCiAgZmkNCg0KDQoNCiAgaWYgdGVzdCAkYWNfY3ZfZnVuY19tYnNp bml0ID0gbm87IHRoZW4NCiAgICBIQVZFX01CU0lOSVQ9MA0KICBlbHNlDQogICAgaWYgdGVzdCAk UkVQTEFDRV9NQlNUQVRFX1QgPSAxOyB0aGVuDQogICAgICBSRVBMQUNFX01CU0lOSVQ9MQ0KICAg IGVsc2UNCiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgIiRob3N0X29zIiBpbg0KICAgICAg ICBtaW5ndyopIFJFUExBQ0VfTUJTSU5JVD0xIDs7DQogICAgICBlc2FjDQogICAgZmkNCiAgZmkN CiAgaWYgdGVzdCAkSEFWRV9NQlNJTklUID0gMCB8fCB0ZXN0ICRSRVBMQUNFX01CU0lOSVQgPSAx OyB0aGVuDQoNCiAgICA6DQoNCg0KDQoNCg0KDQoNCg0KDQogIGdsX0xJQk9CSlM9IiRnbF9MSUJP QkpTIG1ic2luaXQuJGFjX29iamV4dCINCg0KDQogIDoNCg0KICBmaQ0KDQoNCg0KDQogIEdOVUxJ Ql9NQlNJTklUPTENCg0KDQoNCiRhc19lY2hvICIjZGVmaW5lIEdOVUxJQl9URVNUX01CU0lOSVQg MSIgPj5jb25mZGVmcy5oDQoNCg0KDQogICMgQ29kZSBmcm9tIG1vZHVsZSBtYnNsZW46DQoNCg0K DQogIGlmIHRlc3QgJGFjX2N2X2Z1bmNfbWJzbGVuID0geWVzOyB0aGVuDQogICAgSEFWRV9NQlNM RU49MQ0KICBlbHNlDQogICAgSEFWRV9NQlNMRU49MA0KICBmaQ0KDQoNCg0KDQogIEdOVUxJQl9N QlNMRU49MQ0KDQoNCg0KJGFzX2VjaG8gIiNkZWZpbmUgR05VTElCX1RFU1RfTUJTTEVOIDEiID4+ Y29uZmRlZnMuaA0KDQoNCg0KICAjIENvZGUgZnJvbSBtb2R1bGUgbWJzcnRvd2NzOg0KDQoNCg0K DQoNCg0KDQoNCg0KDQogIGlmIHRlc3QgJGFjX2N2X2Z1bmNfbWJzaW5pdCA9IHllcyAmJiB0ZXN0 ICRhY19jdl9mdW5jX21icnRvd2MgPSB5ZXM7IHRoZW4NCg0KDQoNCiAgICAgeyAkYXNfZWNobyAi JGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIG1icnRvd2MgaGFu ZGxlcyBpbmNvbXBsZXRlIGNoYXJhY3RlcnMiID4mNQ0KJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hl dGhlciBtYnJ0b3djIGhhbmRsZXMgaW5jb21wbGV0ZSBjaGFyYWN0ZXJzLi4uICIgPiY2OyB9DQpp ZiAke2dsX2N2X2Z1bmNfbWJydG93Y19pbmNvbXBsZXRlX3N0YXRlKzp9IGZhbHNlOyB0aGVuIDoN CiAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYNCmVsc2UNCg0KICAgICAgICAgICAgICAgICAg Y2FzZSAiJGhvc3Rfb3MiIGluDQogICAgICAgICAgICAgICAgICAgICAjIEd1ZXNzIG5vIG9uIEFJ WCBhbmQgT1NGLzEuDQogICAgICAgIGFpeCogfCBvc2YqKSBnbF9jdl9mdW5jX21icnRvd2NfaW5j b21wbGV0ZV9zdGF0ZT0iZ3Vlc3Npbmcgbm8iIDs7DQogICAgICAgICAgICAgICAgICAgICAjIEd1 ZXNzIHllcyBvdGhlcndpc2UuDQogICAgICAgICopICAgICAgICAgICBnbF9jdl9mdW5jX21icnRv d2NfaW5jb21wbGV0ZV9zdGF0ZT0iZ3Vlc3NpbmcgeWVzIiA7Ow0KICAgICAgZXNhYw0KICAgICAg aWYgdGVzdCAkTE9DQUxFX0pBICE9IG5vbmU7IHRoZW4NCiAgICAgICAgaWYgdGVzdCAiJGNyb3Nz X2NvbXBpbGluZyIgPSB5ZXM7IHRoZW4gOg0KICA6DQplbHNlDQogIGNhdCBjb25mZGVmcy5oIC0g PDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQNCi8qIGVuZCBjb25mZGVmcy5oLiAgKi8NCg0KI2lu Y2x1ZGUgPGxvY2FsZS5oPg0KI2luY2x1ZGUgPHN0cmluZy5oPg0KLyogVHJ1NjQgd2l0aCBEZXNr dG9wIFRvb2xraXQgQyBoYXMgYSBidWc6IDxzdGRpby5oPiBtdXN0IGJlIGluY2x1ZGVkIGJlZm9y ZQ0KICAgPHdjaGFyLmg+Lg0KICAgQlNEL09TIDQuMC4xIGhhcyBhIGJ1ZzogPHN0ZGRlZi5oPiwg PHN0ZGlvLmg+IGFuZCA8dGltZS5oPiBtdXN0IGJlDQogICBpbmNsdWRlZCBiZWZvcmUgPHdjaGFy Lmg+LiAgKi8NCiNpbmNsdWRlIDxzdGRkZWYuaD4NCiNpbmNsdWRlIDxzdGRpby5oPg0KI2luY2x1 ZGUgPHRpbWUuaD4NCiNpbmNsdWRlIDx3Y2hhci5oPg0KaW50IG1haW4gKCkNCnsNCiAgaWYgKHNl dGxvY2FsZSAoTENfQUxMLCAiJExPQ0FMRV9KQSIpICE9IE5VTEwpDQogICAgew0KICAgICAgY29u c3QgY2hhciBpbnB1dFtdID0gIkJcMjE3XDI1M1wzNDRcMjE3XDI1MVwzMTZlciI7IC8qICJCw7zD n2VyIiAqLw0KICAgICAgbWJzdGF0ZV90IHN0YXRlOw0KICAgICAgd2NoYXJfdCB3YzsNCg0KICAg ICAgbWVtc2V0ICgmc3RhdGUsICdcMCcsIHNpemVvZiAobWJzdGF0ZV90KSk7DQogICAgICBpZiAo bWJydG93YyAoJndjLCBpbnB1dCArIDEsIDEsICZzdGF0ZSkgPT0gKHNpemVfdCkoLTIpKQ0KICAg ICAgICBpZiAobWJzaW5pdCAoJnN0YXRlKSkNCiAgICAgICAgICByZXR1cm4gMTsNCiAgICB9DQog IHJldHVybiAwOw0KfQ0KX0FDRU9GDQppZiBhY19mbl9jX3RyeV9ydW4gIiRMSU5FTk8iOyB0aGVu IDoNCiAgZ2xfY3ZfZnVuY19tYnJ0b3djX2luY29tcGxldGVfc3RhdGU9eWVzDQplbHNlDQogIGds X2N2X2Z1bmNfbWJydG93Y19pbmNvbXBsZXRlX3N0YXRlPW5vDQpmaQ0Kcm0gLWYgY29yZSAqLmNv cmUgY29yZS5jb25mdGVzdC4qIGdtb24ub3V0IGJiLm91dCBjb25mdGVzdCRhY19leGVleHQgXA0K ICBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LmJlYW0gY29uZnRlc3QuJGFjX2V4dA0KZmkN Cg0KICAgICAgZmkNCg0KZmkNCnsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5P fTogcmVzdWx0OiAkZ2xfY3ZfZnVuY19tYnJ0b3djX2luY29tcGxldGVfc3RhdGUiID4mNQ0KJGFz X2VjaG8gIiRnbF9jdl9mdW5jX21icnRvd2NfaW5jb21wbGV0ZV9zdGF0ZSIgPiY2OyB9DQoNCg0K DQoNCiAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2lu ZyB3aGV0aGVyIG1icnRvd2Mgd29ya3MgYXMgd2VsbCBhcyBtYnRvd2MiID4mNQ0KJGFzX2VjaG9f biAiY2hlY2tpbmcgd2hldGhlciBtYnJ0b3djIHdvcmtzIGFzIHdlbGwgYXMgbWJ0b3djLi4uICIg PiY2OyB9DQppZiAke2dsX2N2X2Z1bmNfbWJydG93Y19zYW5pdHljaGVjays6fSBmYWxzZTsgdGhl biA6DQogICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2DQplbHNlDQoNCiAgICAgICAgICAgICAg ICAgIGNhc2UgIiRob3N0X29zIiBpbg0KICAgICAgICAgICAgICAgICAgICAjIEd1ZXNzIG5vIG9u IFNvbGFyaXMgOC4NCiAgICAgICAgc29sYXJpczIuOCkgZ2xfY3ZfZnVuY19tYnJ0b3djX3Nhbml0 eWNoZWNrPSJndWVzc2luZyBubyIgOzsNCiAgICAgICAgICAgICAgICAgICAgIyBHdWVzcyB5ZXMg b3RoZXJ3aXNlLg0KICAgICAgICAqKSAgICAgICAgICBnbF9jdl9mdW5jX21icnRvd2Nfc2FuaXR5 Y2hlY2s9Imd1ZXNzaW5nIHllcyIgOzsNCiAgICAgIGVzYWMNCiAgICAgIGlmIHRlc3QgJExPQ0FM RV9aSF9DTiAhPSBub25lOyB0aGVuDQogICAgICAgIGlmIHRlc3QgIiRjcm9zc19jb21waWxpbmci ID0geWVzOyB0aGVuIDoNCiAgOg0KZWxzZQ0KICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5j b25mdGVzdC4kYWNfZXh0DQovKiBlbmQgY29uZmRlZnMuaC4gICovDQoNCiNpbmNsdWRlIDxsb2Nh bGUuaD4NCiNpbmNsdWRlIDxzdGRsaWIuaD4NCiNpbmNsdWRlIDxzdHJpbmcuaD4NCi8qIFRydTY0 IHdpdGggRGVza3RvcCBUb29sa2l0IEMgaGFzIGEgYnVnOiA8c3RkaW8uaD4gbXVzdCBiZSBpbmNs dWRlZCBiZWZvcmUNCiAgIDx3Y2hhci5oPi4NCiAgIEJTRC9PUyA0LjAuMSBoYXMgYSBidWc6IDxz dGRkZWYuaD4sIDxzdGRpby5oPiBhbmQgPHRpbWUuaD4gbXVzdCBiZQ0KICAgaW5jbHVkZWQgYmVm b3JlIDx3Y2hhci5oPi4gICovDQojaW5jbHVkZSA8c3RkZGVmLmg+DQojaW5jbHVkZSA8c3RkaW8u aD4NCiNpbmNsdWRlIDx0aW1lLmg+DQojaW5jbHVkZSA8d2NoYXIuaD4NCmludCBtYWluICgpDQp7 DQogIC8qIFRoaXMgZmFpbHMgb24gU29sYXJpcyA4Og0KICAgICBtYnJ0b3djIHJldHVybnMgMiwg YW5kIHNldHMgd2MgdG8gMHgwMEYwLg0KICAgICBtYnRvd2MgcmV0dXJucyA0IChjb3JyZWN0KSBh bmQgc2V0cyB3YyB0byAweDVFREMuICAqLw0KICBpZiAoc2V0bG9jYWxlIChMQ19BTEwsICIkTE9D QUxFX1pIX0NOIikgIT0gTlVMTCkNCiAgICB7DQogICAgICBjaGFyIGlucHV0W10gPSAiQlwyNTBc MjcxXDIwMVwwNjBcMjExXDA3MGVyIjsgLyogIkLDvMOfZXIiICovDQogICAgICBtYnN0YXRlX3Qg c3RhdGU7DQogICAgICB3Y2hhcl90IHdjOw0KDQogICAgICBtZW1zZXQgKCZzdGF0ZSwgJ1wwJywg c2l6ZW9mIChtYnN0YXRlX3QpKTsNCiAgICAgIGlmIChtYnJ0b3djICgmd2MsIGlucHV0ICsgMywg NiwgJnN0YXRlKSAhPSA0DQogICAgICAgICAgJiYgbWJ0b3djICgmd2MsIGlucHV0ICsgMywgNikg PT0gNCkNCiAgICAgICAgcmV0dXJuIDE7DQogICAgfQ0KICByZXR1cm4gMDsNCn0NCl9BQ0VPRg0K aWYgYWNfZm5fY190cnlfcnVuICIkTElORU5PIjsgdGhlbiA6DQogIGdsX2N2X2Z1bmNfbWJydG93 Y19zYW5pdHljaGVjaz15ZXMNCmVsc2UNCiAgZ2xfY3ZfZnVuY19tYnJ0b3djX3Nhbml0eWNoZWNr PW5vDQpmaQ0Kcm0gLWYgY29yZSAqLmNvcmUgY29yZS5jb25mdGVzdC4qIGdtb24ub3V0IGJiLm91 dCBjb25mdGVzdCRhY19leGVleHQgXA0KICBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LmJl YW0gY29uZnRlc3QuJGFjX2V4dA0KZmkNCg0KICAgICAgZmkNCg0KZmkNCnsgJGFzX2VjaG8gIiRh c19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkZ2xfY3ZfZnVuY19tYnJ0b3djX3Nh bml0eWNoZWNrIiA+JjUNCiRhc19lY2hvICIkZ2xfY3ZfZnVuY19tYnJ0b3djX3Nhbml0eWNoZWNr IiA+JjY7IH0NCg0KICAgIFJFUExBQ0VfTUJTVEFURV9UPTANCiAgICBjYXNlICIkZ2xfY3ZfZnVu Y19tYnJ0b3djX2luY29tcGxldGVfc3RhdGUiIGluDQogICAgICAqeWVzKSA7Ow0KICAgICAgKikg UkVQTEFDRV9NQlNUQVRFX1Q9MSA7Ow0KICAgIGVzYWMNCiAgICBjYXNlICIkZ2xfY3ZfZnVuY19t YnJ0b3djX3Nhbml0eWNoZWNrIiBpbg0KICAgICAgKnllcykgOzsNCiAgICAgICopIFJFUExBQ0Vf TUJTVEFURV9UPTEgOzsNCiAgICBlc2FjDQogIGVsc2UNCiAgICBSRVBMQUNFX01CU1RBVEVfVD0x DQogIGZpDQogIGlmIHRlc3QgJFJFUExBQ0VfTUJTVEFURV9UID0gMTsgdGhlbg0KDQogICAgOg0K DQogIGZpDQoNCg0KDQogIGlmIHRlc3QgJGFjX2N2X2Z1bmNfbWJzcnRvd2NzID0gbm87IHRoZW4N CiAgICBIQVZFX01CU1JUT1dDUz0wDQogIGVsc2UNCiAgICBpZiB0ZXN0ICRSRVBMQUNFX01CU1RB VEVfVCA9IDE7IHRoZW4NCiAgICAgIFJFUExBQ0VfTUJTUlRPV0NTPTENCiAgICBlbHNlDQoNCg0K DQoNCg0KDQogICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hl Y2tpbmcgd2hldGhlciBtYnNydG93Y3Mgd29ya3MiID4mNQ0KJGFzX2VjaG9fbiAiY2hlY2tpbmcg d2hldGhlciBtYnNydG93Y3Mgd29ya3MuLi4gIiA+JjY7IH0NCmlmICR7Z2xfY3ZfZnVuY19tYnNy dG93Y3Nfd29ya3MrOn0gZmFsc2U7IHRoZW4gOg0KICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4m Ng0KZWxzZQ0KDQogICAgICAgICAgICAgICAgICBjYXNlICIkaG9zdF9vcyIgaW4NCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBHdWVzcyBubyBvbiBIUC1VWCwgU29sYXJpcywg bWluZ3cuDQogICAgICAgIGhwdXgqIHwgc29sYXJpcyogfCBtaW5ndyopIGdsX2N2X2Z1bmNfbWJz cnRvd2NzX3dvcmtzPSJndWVzc2luZyBubyIgOzsNCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIyBHdWVzcyB5ZXMgb3RoZXJ3aXNlLg0KICAgICAgICAqKSAgICAgICAgICAgICAg ICAgICAgICAgICBnbF9jdl9mdW5jX21ic3J0b3djc193b3Jrcz0iZ3Vlc3NpbmcgeWVzIiA7Ow0K ICAgICAgZXNhYw0KICAgICAgaWYgdGVzdCAkTE9DQUxFX0ZSICE9IG5vbmUgfHwgdGVzdCAkTE9D QUxFX0ZSX1VURjggIT0gbm9uZSB8fCB0ZXN0ICRMT0NBTEVfSkEgIT0gbm9uZSB8fCB0ZXN0ICRM T0NBTEVfWkhfQ04gIT0gbm9uZTsgdGhlbg0KICAgICAgICBpZiB0ZXN0ICIkY3Jvc3NfY29tcGls aW5nIiA9IHllczsgdGhlbiA6DQogIDoNCmVsc2UNCiAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VP RiA+Y29uZnRlc3QuJGFjX2V4dA0KLyogZW5kIGNvbmZkZWZzLmguICAqLw0KDQojaW5jbHVkZSA8 bG9jYWxlLmg+DQojaW5jbHVkZSA8c3RyaW5nLmg+DQovKiBUcnU2NCB3aXRoIERlc2t0b3AgVG9v bGtpdCBDIGhhcyBhIGJ1ZzogPHN0ZGlvLmg+IG11c3QgYmUgaW5jbHVkZWQgYmVmb3JlDQogICA8 d2NoYXIuaD4uDQogICBCU0QvT1MgNC4wLjEgaGFzIGEgYnVnOiA8c3RkZGVmLmg+LCA8c3RkaW8u aD4gYW5kIDx0aW1lLmg+IG11c3QgYmUNCiAgIGluY2x1ZGVkIGJlZm9yZSA8d2NoYXIuaD4uICAq Lw0KI2luY2x1ZGUgPHN0ZGRlZi5oPg0KI2luY2x1ZGUgPHN0ZGlvLmg+DQojaW5jbHVkZSA8dGlt ZS5oPg0KI2luY2x1ZGUgPHdjaGFyLmg+DQppbnQgbWFpbiAoKQ0Kew0KICBpbnQgcmVzdWx0ID0g MDsNCiAgLyogVGVzdCB3aGV0aGVyIHRoZSBmdW5jdGlvbiBzdXBwb3J0cyBhIE5VTEwgZGVzdGlu YXRpb24gYXJndW1lbnQuDQogICAgIFRoaXMgZmFpbHMgb24gbmF0aXZlIFdpbmRvd3MuICAqLw0K ICBpZiAoc2V0bG9jYWxlIChMQ19BTEwsICIkTE9DQUxFX0ZSIikgIT0gTlVMTCkNCiAgICB7DQog ICAgICBjb25zdCBjaGFyIGlucHV0W10gPSAiXDMzN2VyIjsNCiAgICAgIGNvbnN0IGNoYXIgKnNy YyA9IGlucHV0Ow0KICAgICAgbWJzdGF0ZV90IHN0YXRlOw0KDQogICAgICBtZW1zZXQgKCZzdGF0 ZSwgJ1wwJywgc2l6ZW9mIChtYnN0YXRlX3QpKTsNCiAgICAgIGlmIChtYnNydG93Y3MgKE5VTEws ICZzcmMsIDEsICZzdGF0ZSkgIT0gMw0KICAgICAgICAgIHx8IHNyYyAhPSBpbnB1dCkNCiAgICAg ICAgcmVzdWx0IHw9IDE7DQogICAgfQ0KICAvKiBUZXN0IHdoZXRoZXIgdGhlIGZ1bmN0aW9uIHdv cmtzIHdoZW4gc3RhcnRlZCB3aXRoIGEgY29udmVyc2lvbiBzdGF0ZQ0KICAgICBpbiBub24taW5p dGlhbCBzdGF0ZS4gIFRoaXMgZmFpbHMgb24gSFAtVVggMTEuMTEgYW5kIFNvbGFyaXMgMTAuICAq Lw0KICBpZiAoc2V0bG9jYWxlIChMQ19BTEwsICIkTE9DQUxFX0ZSX1VURjgiKSAhPSBOVUxMKQ0K ICAgIHsNCiAgICAgIGNvbnN0IGNoYXIgaW5wdXRbXSA9ICJCXDMwM1wyNzRcMzAzXDIzN2VyIjsN CiAgICAgIG1ic3RhdGVfdCBzdGF0ZTsNCg0KICAgICAgbWVtc2V0ICgmc3RhdGUsICdcMCcsIHNp emVvZiAobWJzdGF0ZV90KSk7DQogICAgICBpZiAobWJydG93YyAoTlVMTCwgaW5wdXQgKyAxLCAx LCAmc3RhdGUpID09IChzaXplX3QpKC0yKSkNCiAgICAgICAgaWYgKCFtYnNpbml0ICgmc3RhdGUp KQ0KICAgICAgICAgIHsNCiAgICAgICAgICAgIGNvbnN0IGNoYXIgKnNyYyA9IGlucHV0ICsgMjsN CiAgICAgICAgICAgIGlmIChtYnNydG93Y3MgKE5VTEwsICZzcmMsIDEwLCAmc3RhdGUpICE9IDQp DQogICAgICAgICAgICAgIHJlc3VsdCB8PSAyOw0KICAgICAgICAgIH0NCiAgICB9DQogIGlmIChz ZXRsb2NhbGUgKExDX0FMTCwgIiRMT0NBTEVfSkEiKSAhPSBOVUxMKQ0KICAgIHsNCiAgICAgIGNv bnN0IGNoYXIgaW5wdXRbXSA9ICI8XDMwNlwzNzRcMzEzXDMzNFwyNzBcMzU0PiI7DQogICAgICBt YnN0YXRlX3Qgc3RhdGU7DQoNCiAgICAgIG1lbXNldCAoJnN0YXRlLCAnXDAnLCBzaXplb2YgKG1i c3RhdGVfdCkpOw0KICAgICAgaWYgKG1icnRvd2MgKE5VTEwsIGlucHV0ICsgMywgMSwgJnN0YXRl KSA9PSAoc2l6ZV90KSgtMikpDQogICAgICAgIGlmICghbWJzaW5pdCAoJnN0YXRlKSkNCiAgICAg ICAgICB7DQogICAgICAgICAgICBjb25zdCBjaGFyICpzcmMgPSBpbnB1dCArIDQ7DQogICAgICAg ICAgICBpZiAobWJzcnRvd2NzIChOVUxMLCAmc3JjLCAxMCwgJnN0YXRlKSAhPSAzKQ0KICAgICAg ICAgICAgICByZXN1bHQgfD0gNDsNCiAgICAgICAgICB9DQogICAgfQ0KICBpZiAoc2V0bG9jYWxl IChMQ19BTEwsICIkTE9DQUxFX1pIX0NOIikgIT0gTlVMTCkNCiAgICB7DQogICAgICBjb25zdCBj aGFyIGlucHV0W10gPSAiQlwyNTBcMjcxXDIwMVwwNjBcMjExXDA3MGVyIjsNCiAgICAgIG1ic3Rh dGVfdCBzdGF0ZTsNCg0KICAgICAgbWVtc2V0ICgmc3RhdGUsICdcMCcsIHNpemVvZiAobWJzdGF0 ZV90KSk7DQogICAgICBpZiAobWJydG93YyAoTlVMTCwgaW5wdXQgKyAxLCAxLCAmc3RhdGUpID09 IChzaXplX3QpKC0yKSkNCiAgICAgICAgaWYgKCFtYnNpbml0ICgmc3RhdGUpKQ0KICAgICAgICAg IHsNCiAgICAgICAgICAgIGNvbnN0IGNoYXIgKnNyYyA9IGlucHV0ICsgMjsNCiAgICAgICAgICAg IGlmIChtYnNydG93Y3MgKE5VTEwsICZzcmMsIDEwLCAmc3RhdGUpICE9IDQpDQogICAgICAgICAg ICAgIHJlc3VsdCB8PSA4Ow0KICAgICAgICAgIH0NCiAgICB9DQogIHJldHVybiByZXN1bHQ7DQp9 DQpfQUNFT0YNCmlmIGFjX2ZuX2NfdHJ5X3J1biAiJExJTkVOTyI7IHRoZW4gOg0KICBnbF9jdl9m dW5jX21ic3J0b3djc193b3Jrcz15ZXMNCmVsc2UNCiAgZ2xfY3ZfZnVuY19tYnNydG93Y3Nfd29y a3M9bm8NCmZpDQpybSAtZiBjb3JlICouY29yZSBjb3JlLmNvbmZ0ZXN0LiogZ21vbi5vdXQgYmIu b3V0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCBcDQogIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3Qu YmVhbSBjb25mdGVzdC4kYWNfZXh0DQpmaQ0KDQogICAgICBmaQ0KDQpmaQ0KeyAkYXNfZWNobyAi JGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRnbF9jdl9mdW5jX21ic3J0b3dj c193b3JrcyIgPiY1DQokYXNfZWNobyAiJGdsX2N2X2Z1bmNfbWJzcnRvd2NzX3dvcmtzIiA+JjY7 IH0NCg0KICAgICAgY2FzZSAiJGdsX2N2X2Z1bmNfbWJzcnRvd2NzX3dvcmtzIiBpbg0KICAgICAg ICAqeWVzKSA7Ow0KICAgICAgICAqKSBSRVBMQUNFX01CU1JUT1dDUz0xIDs7DQogICAgICBlc2Fj DQogICAgZmkNCiAgZmkNCiAgaWYgdGVzdCAkSEFWRV9NQlNSVE9XQ1MgPSAwIHx8IHRlc3QgJFJF UExBQ0VfTUJTUlRPV0NTID0gMTsgdGhlbg0KDQogICAgOg0KDQoNCg0KDQoNCg0KDQoNCg0KICBn bF9MSUJPQkpTPSIkZ2xfTElCT0JKUyBtYnNydG93Y3MuJGFjX29iamV4dCINCg0KDQoNCg0KDQoN Cg0KDQoNCiAgZ2xfTElCT0JKUz0iJGdsX0xJQk9CSlMgbWJzcnRvd2NzLXN0YXRlLiRhY19vYmpl eHQiDQoNCg0KICA6DQoNCiAgZmkNCg0KDQoNCg0KICBHTlVMSUJfTUJTUlRPV0NTPTENCg0KDQoN CiRhc19lY2hvICIjZGVmaW5lIEdOVUxJQl9URVNUX01CU1JUT1dDUyAxIiA+PmNvbmZkZWZzLmgN Cg0KDQoNCiAgIyBDb2RlIGZyb20gbW9kdWxlIG1ic3N0cjoNCg0KDQoNCiAgR05VTElCX01CU1NU Uj0xDQoNCg0KDQokYXNfZWNobyAiI2RlZmluZSBHTlVMSUJfVEVTVF9NQlNTVFIgMSIgPj5jb25m ZGVmcy5oDQoNCg0KDQogICMgQ29kZSBmcm9tIG1vZHVsZSBtYnN3aWR0aDoNCg0KDQoNCg0KICAg ICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0 aGVyIG1ic3dpZHRoIGlzIGRlY2xhcmVkIGluIDx3Y2hhci5oPiIgPiY1DQokYXNfZWNob19uICJj aGVja2luZyB3aGV0aGVyIG1ic3dpZHRoIGlzIGRlY2xhcmVkIGluIDx3Y2hhci5oPi4uLiAiID4m NjsgfQ0KaWYgJHthY19jdl9oYXZlX2RlY2xfbWJzd2lkdGgrOn0gZmFsc2U7IHRoZW4gOg0KICAk YXNfZWNob19uICIoY2FjaGVkKSAiID4mNg0KZWxzZQ0KICBjYXQgY29uZmRlZnMuaCAtIDw8X0FD RU9GID5jb25mdGVzdC4kYWNfZXh0DQovKiBlbmQgY29uZmRlZnMuaC4gICovDQoNCi8qIFRydTY0 IHdpdGggRGVza3RvcCBUb29sa2l0IEMgaGFzIGEgYnVnOiA8c3RkaW8uaD4gbXVzdCBiZSBpbmNs dWRlZCBiZWZvcmUNCiAgIDx3Y2hhci5oPi4NCiAgIEJTRC9PUyA0LjAuMSBoYXMgYSBidWc6IDxz dGRkZWYuaD4sIDxzdGRpby5oPiBhbmQgPHRpbWUuaD4gbXVzdCBiZSBpbmNsdWRlZA0KICAgYmVm b3JlIDx3Y2hhci5oPi4gICovDQojaW5jbHVkZSA8c3RkZGVmLmg+DQojaW5jbHVkZSA8c3RkaW8u aD4NCiNpbmNsdWRlIDx0aW1lLmg+DQojaW5jbHVkZSA8d2NoYXIuaD4NCg0KaW50DQptYWluICgp DQp7DQoNCiAgY2hhciAqcCA9IChjaGFyICopIG1ic3dpZHRoOw0KICByZXR1cm4gIXA7DQoNCiAg Ow0KICByZXR1cm4gMDsNCn0NCl9BQ0VPRg0KaWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVO TyI7IHRoZW4gOg0KICBhY19jdl9oYXZlX2RlY2xfbWJzd2lkdGg9eWVzDQplbHNlDQogIGFjX2N2 X2hhdmVfZGVjbF9tYnN3aWR0aD1ubw0KZmkNCnJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0 ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dA0KZmkNCnsgJGFzX2VjaG8gIiRhc19tZTok e2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfaGF2ZV9kZWNsX21ic3dpZHRoIiA+ JjUNCiRhc19lY2hvICIkYWNfY3ZfaGF2ZV9kZWNsX21ic3dpZHRoIiA+JjY7IH0NCiAgaWYgdGVz dCAkYWNfY3ZfaGF2ZV9kZWNsX21ic3dpZHRoID0geWVzOyB0aGVuDQogICAgYWNfdmFsPTENCiAg ZWxzZQ0KICAgIGFjX3ZhbD0wDQogIGZpDQoNCmNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YNCiNk ZWZpbmUgSEFWRV9ERUNMX01CU1dJRFRIX0lOX1dDSEFSX0ggJGFjX3ZhbA0KX0FDRU9GDQoNCg0K DQoNCiAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcg Zm9yIG1ic3RhdGVfdCIgPiY1DQokYXNfZWNob19uICJjaGVja2luZyBmb3IgbWJzdGF0ZV90Li4u ICIgPiY2OyB9DQppZiAke2FjX2N2X3R5cGVfbWJzdGF0ZV90Kzp9IGZhbHNlOyB0aGVuIDoNCiAg JGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYNCmVsc2UNCiAgY2F0IGNvbmZkZWZzLmggLSA8PF9B Q0VPRiA+Y29uZnRlc3QuJGFjX2V4dA0KLyogZW5kIGNvbmZkZWZzLmguICAqLw0KJGFjX2luY2x1 ZGVzX2RlZmF1bHQNCi8qIFRydTY0IHdpdGggRGVza3RvcCBUb29sa2l0IEMgaGFzIGEgYnVnOiA8 c3RkaW8uaD4gbXVzdCBiZSBpbmNsdWRlZCBiZWZvcmUNCiAgIDx3Y2hhci5oPi4NCiAgIEJTRC9P UyA0LjAuMSBoYXMgYSBidWc6IDxzdGRkZWYuaD4sIDxzdGRpby5oPiBhbmQgPHRpbWUuaD4gbXVz dCBiZQ0KICAgaW5jbHVkZWQgYmVmb3JlIDx3Y2hhci5oPi4gICovDQojaW5jbHVkZSA8c3RkZGVm Lmg+DQojaW5jbHVkZSA8c3RkaW8uaD4NCiNpbmNsdWRlIDx0aW1lLmg+DQojaW5jbHVkZSA8d2No YXIuaD4NCmludA0KbWFpbiAoKQ0Kew0KbWJzdGF0ZV90IHg7IHJldHVybiBzaXplb2YgeDsNCiAg Ow0KICByZXR1cm4gMDsNCn0NCl9BQ0VPRg0KaWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVO TyI7IHRoZW4gOg0KICBhY19jdl90eXBlX21ic3RhdGVfdD15ZXMNCmVsc2UNCiAgYWNfY3ZfdHlw ZV9tYnN0YXRlX3Q9bm8NCmZpDQpybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNf b2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQNCmZpDQp7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5l bm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X3R5cGVfbWJzdGF0ZV90IiA+JjUNCiRhc19lY2hv ICIkYWNfY3ZfdHlwZV9tYnN0YXRlX3QiID4mNjsgfQ0KICAgaWYgdGVzdCAkYWNfY3ZfdHlwZV9t YnN0YXRlX3QgPSB5ZXM7IHRoZW4NCg0KJGFzX2VjaG8gIiNkZWZpbmUgSEFWRV9NQlNUQVRFX1Qg MSIgPj5jb25mZGVmcy5oDQoNCiAgIGVsc2UNCg0KJGFzX2VjaG8gIiNkZWZpbmUgbWJzdGF0ZV90 IGludCIgPj5jb25mZGVmcy5oDQoNCiAgIGZpDQoNCg0KICAjIENvZGUgZnJvbSBtb2R1bGUgbWJ0 b3djOg0KDQoNCg0KICBpZiBmYWxzZTsgdGhlbg0KICAgIFJFUExBQ0VfTUJUT1dDPTENCiAgZmkN CiAgaWYgdGVzdCAkUkVQTEFDRV9NQlRPV0MgPSAxOyB0aGVuDQoNCg0KDQoNCg0KDQoNCg0KICBn bF9MSUJPQkpTPSIkZ2xfTElCT0JKUyBtYnRvd2MuJGFjX29iamV4dCINCg0KDQogIDoNCg0KICBm aQ0KDQoNCg0KDQogIEdOVUxJQl9NQlRPV0M9MQ0KDQoNCg0KJGFzX2VjaG8gIiNkZWZpbmUgR05V TElCX1RFU1RfTUJUT1dDIDEiID4+Y29uZmRlZnMuaA0KDQoNCg0KICAjIENvZGUgZnJvbSBtb2R1 bGUgbWJ1aXRlcjoNCg0KDQoNCiAgOg0KDQogICMgQ29kZSBmcm9tIG1vZHVsZSBtZW1jYXNlY21w Og0KDQoNCg0KDQoNCg0KDQoNCg0KICBnbF9MSUJPQkpTPSIkZ2xfTElCT0JKUyBtZW1jYXNlY21w LiRhY19vYmpleHQiDQoNCg0KICAjIENvZGUgZnJvbSBtb2R1bGUgbWVtY2hyOg0KDQoNCg0KDQog IEdOVUxJQl9NRU1DSFI9MQ0KDQoNCg0KJGFzX2VjaG8gIiNkZWZpbmUgR05VTElCX1RFU1RfTUVN Q0hSIDEiID4+Y29uZmRlZnMuaA0KDQoNCg0KICAjIENvZGUgZnJvbSBtb2R1bGUgbWVtY2hyMjoN CiAgIyBDb2RlIGZyb20gbW9kdWxlIG1lbWNtcDI6DQogICMgQ29kZSBmcm9tIG1vZHVsZSBtZW1j b2xsOg0KDQoNCg0KDQoNCg0KDQoNCg0KDQogIGdsX0xJQk9CSlM9IiRnbF9MSUJPQkpTIG1lbWNv bGwuJGFjX29iamV4dCINCg0KDQogICMgQ29kZSBmcm9tIG1vZHVsZSBtZW1wY3B5Og0KDQoNCg0K DQoNCg0KDQoNCg0KDQoNCg0KDQoNCiAgZm9yIGFjX2Z1bmMgaW4gbWVtcGNweQ0KZG8gOg0KICBh Y19mbl9jX2NoZWNrX2Z1bmMgIiRMSU5FTk8iICJtZW1wY3B5IiAiYWNfY3ZfZnVuY19tZW1wY3B5 Ig0KaWYgdGVzdCAieCRhY19jdl9mdW5jX21lbXBjcHkiID0geHllczsgdGhlbiA6DQogIGNhdCA+ PmNvbmZkZWZzLmggPDxfQUNFT0YNCiNkZWZpbmUgSEFWRV9NRU1QQ1BZIDENCl9BQ0VPRg0KDQpl bHNlDQoNCiAgICBnbF9MSUJPQkpTPSIkZ2xfTElCT0JKUyAkYWNfZnVuYy4kYWNfb2JqZXh0Ig0K DQpmaQ0KZG9uZQ0KDQoNCiAgaWYgdGVzdCAkYWNfY3ZfZnVuY19tZW1wY3B5ID0gbm87IHRoZW4N CiAgICBIQVZFX01FTVBDUFk9MA0KDQogIDoNCg0KICBmaQ0KDQoNCg0KDQogIEdOVUxJQl9NRU1Q Q1BZPTENCg0KDQoNCiRhc19lY2hvICIjZGVmaW5lIEdOVUxJQl9URVNUX01FTVBDUFkgMSIgPj5j b25mZGVmcy5oDQoNCg0KDQogICMgQ29kZSBmcm9tIG1vZHVsZSBtZW1yY2hyOg0KDQoNCg0KDQoN CiAgaWYgdGVzdCAkYWNfY3ZfaGF2ZV9kZWNsX21lbXJjaHIgPSBubzsgdGhlbg0KICAgIEhBVkVf REVDTF9NRU1SQ0hSPTANCiAgZmkNCg0KDQoNCg0KDQoNCg0KDQoNCiAgZm9yIGFjX2Z1bmMgaW4g bWVtcmNocg0KZG8gOg0KICBhY19mbl9jX2NoZWNrX2Z1bmMgIiRMSU5FTk8iICJtZW1yY2hyIiAi YWNfY3ZfZnVuY19tZW1yY2hyIg0KaWYgdGVzdCAieCRhY19jdl9mdW5jX21lbXJjaHIiID0geHll czsgdGhlbiA6DQogIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YNCiNkZWZpbmUgSEFWRV9NRU1S Q0hSIDENCl9BQ0VPRg0KDQplbHNlDQoNCiAgICBnbF9MSUJPQkpTPSIkZ2xfTElCT0JKUyAkYWNf ZnVuYy4kYWNfb2JqZXh0Ig0KDQpmaQ0KZG9uZQ0KDQoNCiAgaWYgdGVzdCAkYWNfY3ZfZnVuY19t ZW1yY2hyID0gbm87IHRoZW4NCiAgICA6DQogIGZpDQoNCg0KDQoNCiAgR05VTElCX01FTVJDSFI9 MQ0KDQoNCg0KJGFzX2VjaG8gIiNkZWZpbmUgR05VTElCX1RFU1RfTUVNUkNIUiAxIiA+PmNvbmZk ZWZzLmgNCg0KDQoNCiAgIyBDb2RlIGZyb20gbW9kdWxlIG1nZXRncm91cHM6DQoNCg0KDQoNCg0K DQoNCg0KDQoNCiAgZ2xfTElCT0JKUz0iJGdsX0xJQk9CSlMgbWdldGdyb3Vwcy4kYWNfb2JqZXh0 Ig0KDQoNCiAgIyBDb2RlIGZyb20gbW9kdWxlIG1rYW5jZXNkaXJzOg0KDQoNCg0KDQoNCg0KDQoN Cg0KICBnbF9MSUJPQkpTPSIkZ2xfTElCT0JKUyBta2FuY2VzZGlycy4kYWNfb2JqZXh0Ig0KDQoN CiAgIyBDb2RlIGZyb20gbW9kdWxlIG1rZGlyOg0KDQoNCiAgeyAkYXNfZWNobyAiJGFzX21lOiR7 YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIG1rZGlyIGhhbmRsZXMgdHJhaWxp bmcgc2xhc2giID4mNQ0KJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciBta2RpciBoYW5kbGVz IHRyYWlsaW5nIHNsYXNoLi4uICIgPiY2OyB9DQppZiAke2dsX2N2X2Z1bmNfbWtkaXJfdHJhaWxp bmdfc2xhc2hfd29ya3MrOn0gZmFsc2U7IHRoZW4gOg0KICAkYXNfZWNob19uICIoY2FjaGVkKSAi ID4mNg0KZWxzZQ0KICBybSAtcmYgY29uZnRlc3QuZGlyDQogICAgICBpZiB0ZXN0ICIkY3Jvc3Nf Y29tcGlsaW5nIiA9IHllczsgdGhlbiA6DQogIGdsX2N2X2Z1bmNfbWtkaXJfdHJhaWxpbmdfc2xh c2hfd29ya3M9Imd1ZXNzaW5nIG5vIg0KZWxzZQ0KICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9G ID5jb25mdGVzdC4kYWNfZXh0DQovKiBlbmQgY29uZmRlZnMuaC4gICovDQoNCiMgICAgICAgaW5j bHVkZSA8c3lzL3R5cGVzLmg+DQojICAgICAgIGluY2x1ZGUgPHN5cy9zdGF0Lmg+DQoNCmludA0K bWFpbiAoKQ0Kew0KcmV0dXJuIG1rZGlyICgiY29uZnRlc3QuZGlyLyIsIDA3MDApOw0KICA7DQog IHJldHVybiAwOw0KfQ0KX0FDRU9GDQppZiBhY19mbl9jX3RyeV9ydW4gIiRMSU5FTk8iOyB0aGVu IDoNCiAgZ2xfY3ZfZnVuY19ta2Rpcl90cmFpbGluZ19zbGFzaF93b3Jrcz15ZXMNCmVsc2UNCiAg Z2xfY3ZfZnVuY19ta2Rpcl90cmFpbGluZ19zbGFzaF93b3Jrcz1ubw0KZmkNCnJtIC1mIGNvcmUg Ki5jb3JlIGNvcmUuY29uZnRlc3QuKiBnbW9uLm91dCBiYi5vdXQgY29uZnRlc3QkYWNfZXhlZXh0 IFwNCiAgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC5iZWFtIGNvbmZ0ZXN0LiRhY19leHQN CmZpDQoNCiAgICBybSAtcmYgY29uZnRlc3QuZGlyDQoNCg0KZmkNCnsgJGFzX2VjaG8gIiRhc19t ZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkZ2xfY3ZfZnVuY19ta2Rpcl90cmFpbGlu Z19zbGFzaF93b3JrcyIgPiY1DQokYXNfZWNobyAiJGdsX2N2X2Z1bmNfbWtkaXJfdHJhaWxpbmdf c2xhc2hfd29ya3MiID4mNjsgfQ0KICBpZiB0ZXN0ICIkZ2xfY3ZfZnVuY19ta2Rpcl90cmFpbGlu Z19zbGFzaF93b3JrcyIgIT0geWVzOyB0aGVuDQogICAgUkVQTEFDRV9NS0RJUj0xDQoNCg0KDQoN Cg0KDQoNCg0KICBnbF9MSUJPQkpTPSIkZ2xfTElCT0JKUyBta2Rpci4kYWNfb2JqZXh0Ig0KDQog IGZpDQoNCiAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2lu ZyB3aGV0aGVyIG1rZGlyIGhhbmRsZXMgdHJhaWxpbmcgZG90IiA+JjUNCiRhc19lY2hvX24gImNo ZWNraW5nIHdoZXRoZXIgbWtkaXIgaGFuZGxlcyB0cmFpbGluZyBkb3QuLi4gIiA+JjY7IH0NCmlm ICR7Z2xfY3ZfZnVuY19ta2Rpcl90cmFpbGluZ19kb3Rfd29ya3MrOn0gZmFsc2U7IHRoZW4gOg0K ICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNg0KZWxzZQ0KICBybSAtcmYgY29uZnRlc3QuZGly DQogICAgICBpZiB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IHllczsgdGhlbiA6DQogIGdsX2N2 X2Z1bmNfbWtkaXJfdHJhaWxpbmdfZG90X3dvcmtzPSJndWVzc2luZyBubyINCmVsc2UNCiAgY2F0 IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dA0KLyogZW5kIGNvbmZkZWZz LmguICAqLw0KDQojICAgICAgIGluY2x1ZGUgPHN5cy90eXBlcy5oPg0KIyAgICAgICBpbmNsdWRl IDxzeXMvc3RhdC5oPg0KDQppbnQNCm1haW4gKCkNCnsNCnJldHVybiAhbWtkaXIgKCJjb25mdGVz dC5kaXIvLi8iLCAwNzAwKTsNCiAgOw0KICByZXR1cm4gMDsNCn0NCl9BQ0VPRg0KaWYgYWNfZm5f Y190cnlfcnVuICIkTElORU5PIjsgdGhlbiA6DQogIGdsX2N2X2Z1bmNfbWtkaXJfdHJhaWxpbmdf ZG90X3dvcmtzPXllcw0KZWxzZQ0KICBnbF9jdl9mdW5jX21rZGlyX3RyYWlsaW5nX2RvdF93b3Jr cz1ubw0KZmkNCnJtIC1mIGNvcmUgKi5jb3JlIGNvcmUuY29uZnRlc3QuKiBnbW9uLm91dCBiYi5v dXQgY29uZnRlc3QkYWNfZXhlZXh0IFwNCiAgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC5i ZWFtIGNvbmZ0ZXN0LiRhY19leHQNCmZpDQoNCiAgICBybSAtcmYgY29uZnRlc3QuZGlyDQoNCg0K ZmkNCnsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkZ2xf Y3ZfZnVuY19ta2Rpcl90cmFpbGluZ19kb3Rfd29ya3MiID4mNQ0KJGFzX2VjaG8gIiRnbF9jdl9m dW5jX21rZGlyX3RyYWlsaW5nX2RvdF93b3JrcyIgPiY2OyB9DQogIGlmIHRlc3QgIiRnbF9jdl9m dW5jX21rZGlyX3RyYWlsaW5nX2RvdF93b3JrcyIgIT0geWVzOyB0aGVuDQogICAgUkVQTEFDRV9N S0RJUj0xDQoNCg0KDQoNCg0KDQoNCg0KICBnbF9MSUJPQkpTPSIkZ2xfTElCT0JKUyBta2Rpci4k YWNfb2JqZXh0Ig0KDQoNCiRhc19lY2hvICIjZGVmaW5lIEZVTkNfTUtESVJfRE9UX0JVRyAxIiA+ PmNvbmZkZWZzLmgNCg0KICBmaQ0KDQogICMgQ29kZSBmcm9tIG1vZHVsZSBta2Rpci1wOg0KDQoN Cg0KDQoNCg0KDQoNCg0KICBnbF9MSUJPQkpTPSIkZ2xfTElCT0JKUyBkaXJjaG93bm1vZC4kYWNf b2JqZXh0Ig0KDQoNCg0KDQoNCg0KDQoNCg0KICBnbF9MSUJPQkpTPSIkZ2xfTElCT0JKUyBta2Rp ci1wLiRhY19vYmpleHQiDQoNCg0KDQoNCg0KDQogICMgQ29kZSBmcm9tIG1vZHVsZSBta3N0ZW1w Og0KDQoNCg0KDQoNCiAgaWYgdGVzdCAkYWNfY3ZfZnVuY19ta3N0ZW1wID0geWVzOyB0aGVuDQog ICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3Ig d29ya2luZyBta3N0ZW1wIiA+JjUNCiRhc19lY2hvX24gImNoZWNraW5nIGZvciB3b3JraW5nIG1r c3RlbXAuLi4gIiA+JjY7IH0NCmlmICR7Z2xfY3ZfZnVuY193b3JraW5nX21rc3RlbXArOn0gZmFs c2U7IHRoZW4gOg0KICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNg0KZWxzZQ0KDQogICAgICAg IG1rZGlyIGNvbmZ0ZXN0Lm1rc3RlbXANCiAgICAgICAgaWYgdGVzdCAiJGNyb3NzX2NvbXBpbGlu ZyIgPSB5ZXM7IHRoZW4gOg0KICBnbF9jdl9mdW5jX3dvcmtpbmdfbWtzdGVtcD1ubw0KZWxzZQ0K ICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0DQovKiBlbmQgY29u ZmRlZnMuaC4gICovDQokYWNfaW5jbHVkZXNfZGVmYXVsdA0KaW50DQptYWluICgpDQp7DQppbnQg cmVzdWx0ID0gMDsNCiAgICAgICAgICAgICAgaW50IGk7DQogICAgICAgICAgICAgIG9mZl90IGxh cmdlID0gKG9mZl90KSA0Mjk0OTY3Mjk1dTsNCiAgICAgICAgICAgICAgaWYgKGxhcmdlIDwgMCkN CiAgICAgICAgICAgICAgICBsYXJnZSA9IDIxNDc0ODM2NDc7DQogICAgICAgICAgICAgIGZvciAo aSA9IDA7IGkgPCA3MDsgaSsrKQ0KICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAg IGNoYXIgdGVtcGxbXSA9ICJjb25mdGVzdC5ta3N0ZW1wL2NvWFhYWFhYIjsNCiAgICAgICAgICAg ICAgICAgIGludCAoKm1rc3RlbXBfZnVuY3Rpb24pIChjaGFyICopID0gbWtzdGVtcDsNCiAgICAg ICAgICAgICAgICAgIGludCBmZCA9IG1rc3RlbXBfZnVuY3Rpb24gKHRlbXBsKTsNCiAgICAgICAg ICAgICAgICAgIGlmIChmZCA8IDApDQogICAgICAgICAgICAgICAgICAgIHJlc3VsdCB8PSAxOw0K ICAgICAgICAgICAgICAgICAgZWxzZQ0KICAgICAgICAgICAgICAgICAgICB7DQogICAgICAgICAg ICAgICAgICAgICAgaWYgKGxzZWVrIChmZCwgbGFyZ2UsIFNFRUtfU0VUKSAhPSBsYXJnZSkNCiAg ICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCB8PSAyOw0KICAgICAgICAgICAgICAgICAgICAg IGNsb3NlIChmZCk7DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICB9DQog ICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7DQogIDsNCiAgcmV0dXJuIDA7DQp9DQpfQUNFT0YN CmlmIGFjX2ZuX2NfdHJ5X3J1biAiJExJTkVOTyI7IHRoZW4gOg0KICBnbF9jdl9mdW5jX3dvcmtp bmdfbWtzdGVtcD15ZXMNCmVsc2UNCiAgZ2xfY3ZfZnVuY193b3JraW5nX21rc3RlbXA9bm8NCmZp DQpybSAtZiBjb3JlICouY29yZSBjb3JlLmNvbmZ0ZXN0LiogZ21vbi5vdXQgYmIub3V0IGNvbmZ0 ZXN0JGFjX2V4ZWV4dCBcDQogIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuYmVhbSBjb25m dGVzdC4kYWNfZXh0DQpmaQ0KDQogICAgICAgIHJtIC1yZiBjb25mdGVzdC5ta3N0ZW1wDQoNCmZp DQp7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGdsX2N2 X2Z1bmNfd29ya2luZ19ta3N0ZW1wIiA+JjUNCiRhc19lY2hvICIkZ2xfY3ZfZnVuY193b3JraW5n X21rc3RlbXAiID4mNjsgfQ0KICAgIGlmIHRlc3QgJGdsX2N2X2Z1bmNfd29ya2luZ19ta3N0ZW1w ICE9IHllczsgdGhlbg0KICAgICAgUkVQTEFDRV9NS1NURU1QPTENCg0KDQoNCg0KDQoNCg0KDQog IGdsX0xJQk9CSlM9IiRnbF9MSUJPQkpTIG1rc3RlbXAuJGFjX29iamV4dCINCg0KDQoNCiAgICBm aQ0KICBlbHNlDQogICAgSEFWRV9NS1NURU1QPTANCg0KDQoNCg0KDQoNCg0KDQogIGdsX0xJQk9C SlM9IiRnbF9MSUJPQkpTIG1rc3RlbXAuJGFjX29iamV4dCINCg0KDQoNCiAgZmkNCg0KDQoNCg0K ICBHTlVMSUJfTUtTVEVNUD0xDQoNCg0KDQokYXNfZWNobyAiI2RlZmluZSBHTlVMSUJfVEVTVF9N S1NURU1QIDEiID4+Y29uZmRlZnMuaA0KDQoNCg0KICAjIENvZGUgZnJvbSBtb2R1bGUgbWt0aW1l Og0KDQoNCg0KDQoNCmlmIHRlc3QgJEFQUExFX1VOSVZFUlNBTF9CVUlMRCA9IDE7IHRoZW4NCiAg IyBBIHVuaXZlcnNhbCBidWlsZCBvbiBBcHBsZSBNYWNPUyBYIHBsYXRmb3Jtcy4NCiAgIyBUaGUg dGVzdCByZXN1bHQgd291bGQgYmUgJ3llcycgaW4gMzItYml0IG1vZGUgYW5kICdubycgaW4gNjQt Yml0IG1vZGUuDQogICMgQnV0IHdlIG5lZWQgYSBjb25maWd1cmF0aW9uIHJlc3VsdCB0aGF0IGlz IHZhbGlkIGluIGJvdGggbW9kZXMuDQogIGFjX2N2X2Z1bmNfd29ya2luZ19ta3RpbWU9bm8NCmZp DQp7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciB3 b3JraW5nIG1rdGltZSIgPiY1DQokYXNfZWNob19uICJjaGVja2luZyBmb3Igd29ya2luZyBta3Rp bWUuLi4gIiA+JjY7IH0NCmlmICR7YWNfY3ZfZnVuY193b3JraW5nX21rdGltZSs6fSBmYWxzZTsg dGhlbiA6DQogICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2DQplbHNlDQogIGlmIHRlc3QgIiRj cm9zc19jb21waWxpbmciID0geWVzOyB0aGVuIDoNCiAgYWNfY3ZfZnVuY193b3JraW5nX21rdGlt ZT1ubw0KZWxzZQ0KICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0 DQovKiBlbmQgY29uZmRlZnMuaC4gICovDQovKiBUZXN0IHByb2dyYW0gZnJvbSBQYXVsIEVnZ2Vy dCBhbmQgVG9ueSBMZW5laXMuICAqLw0KI2luY2x1ZGUgPGxpbWl0cy5oPg0KI2luY2x1ZGUgPHN0 ZGxpYi5oPg0KI2luY2x1ZGUgPHRpbWUuaD4NCg0KI2lmZGVmIEhBVkVfVU5JU1REX0gNCiMgaW5j bHVkZSA8dW5pc3RkLmg+DQojZW5kaWYNCg0KI2lmbmRlZiBIQVZFX0FMQVJNDQojIGRlZmluZSBh bGFybShYKSAvKiBlbXB0eSAqLw0KI2VuZGlmDQoNCi8qIFdvcmsgYXJvdW5kIHJlZGVmaW5pdGlv biB0byBycGxfcHV0ZW52IGJ5IG90aGVyIGNvbmZpZyB0ZXN0cy4gICovDQojdW5kZWYgcHV0ZW52 DQoNCnN0YXRpYyB0aW1lX3QgdGltZV90X21heDsNCnN0YXRpYyB0aW1lX3QgdGltZV90X21pbjsN Cg0KLyogVmFsdWVzIHdlJ2xsIHVzZSB0byBzZXQgdGhlIFRaIGVudmlyb25tZW50IHZhcmlhYmxl LiAgKi8NCnN0YXRpYyBjaGFyICp0el9zdHJpbmdzW10gPSB7DQogIChjaGFyICopIDAsICJUWj1H TVQwIiwgIlRaPUpTVC05IiwNCiAgIlRaPUVTVCszRURUKzIsTTEwLjEuMC8wMDowMDowMCxNMi4z LjAvMDA6MDA6MDAiDQp9Ow0KI2RlZmluZSBOX1NUUklOR1MgKHNpemVvZiAodHpfc3RyaW5ncykg LyBzaXplb2YgKHR6X3N0cmluZ3NbMF0pKQ0KDQovKiBSZXR1cm4gMCBpZiBta3RpbWUgZmFpbHMg dG8gY29udmVydCBhIGRhdGUgaW4gdGhlIHNwcmluZy1mb3J3YXJkIGdhcC4NCiAgIEJhc2VkIG9u IGEgcHJvYmxlbSByZXBvcnQgZnJvbSBBbmRyZWFzIEphZWdlci4gICovDQpzdGF0aWMgaW50DQpz cHJpbmdfZm9yd2FyZF9nYXAgKCkNCnsNCiAgLyogZ2xpYmMgKHVwIHRvIGFib3V0IDE5OTgtMTAt MDcpIGZhaWxlZCB0aGlzIHRlc3QuICovDQogIHN0cnVjdCB0bSB0bTsNCg0KICAvKiBVc2UgdGhl IHBvcnRhYmxlIFBPU0lYLjEgc3BlY2lmaWNhdGlvbiAiVFo9UFNUOFBEVCxNNC4xLjAsTTEwLjUu MCINCiAgICAgaW5zdGVhZCBvZiAiVFo9QW1lcmljYS9WYW5jb3V2ZXIiIGluIG9yZGVyIHRvIGRl dGVjdCB0aGUgYnVnIGV2ZW4NCiAgICAgb24gc3lzdGVtcyB0aGF0IGRvbid0IHN1cHBvcnQgdGhl IE9sc29uIGV4dGVuc2lvbiwgb3IgZG9uJ3QgaGF2ZSB0aGUNCiAgICAgZnVsbCB6b25laW5mbyB0 YWJsZXMgaW5zdGFsbGVkLiAgKi8NCiAgcHV0ZW52ICgiVFo9UFNUOFBEVCxNNC4xLjAsTTEwLjUu MCIpOw0KDQogIHRtLnRtX3llYXIgPSA5ODsNCiAgdG0udG1fbW9uID0gMzsNCiAgdG0udG1fbWRh eSA9IDU7DQogIHRtLnRtX2hvdXIgPSAyOw0KICB0bS50bV9taW4gPSAwOw0KICB0bS50bV9zZWMg PSAwOw0KICB0bS50bV9pc2RzdCA9IC0xOw0KICByZXR1cm4gbWt0aW1lICgmdG0pICE9ICh0aW1l X3QpIC0xOw0KfQ0KDQpzdGF0aWMgaW50DQpta3RpbWVfdGVzdDEgKHRpbWVfdCBub3cpDQp7DQog IHN0cnVjdCB0bSAqbHQ7DQogIHJldHVybiAhIChsdCA9IGxvY2FsdGltZSAoJm5vdykpIHx8IG1r dGltZSAobHQpID09IG5vdzsNCn0NCg0Kc3RhdGljIGludA0KbWt0aW1lX3Rlc3QgKHRpbWVfdCBu b3cpDQp7DQogIHJldHVybiAobWt0aW1lX3Rlc3QxIChub3cpDQogICAgICAgICAgJiYgbWt0aW1l X3Rlc3QxICgodGltZV90KSAodGltZV90X21heCAtIG5vdykpDQogICAgICAgICAgJiYgbWt0aW1l X3Rlc3QxICgodGltZV90KSAodGltZV90X21pbiArIG5vdykpKTsNCn0NCg0Kc3RhdGljIGludA0K aXJpeF82XzRfYnVnICgpDQp7DQogIC8qIEJhc2VkIG9uIGNvZGUgZnJvbSBBcmllbCBGYWlnb24u ICAqLw0KICBzdHJ1Y3QgdG0gdG07DQogIHRtLnRtX3llYXIgPSA5NjsNCiAgdG0udG1fbW9uID0g MzsNCiAgdG0udG1fbWRheSA9IDA7DQogIHRtLnRtX2hvdXIgPSAwOw0KICB0bS50bV9taW4gPSAw Ow0KICB0bS50bV9zZWMgPSAwOw0KICB0bS50bV9pc2RzdCA9IC0xOw0KICBta3RpbWUgKCZ0bSk7 DQogIHJldHVybiB0bS50bV9tb24gPT0gMiAmJiB0bS50bV9tZGF5ID09IDMxOw0KfQ0KDQpzdGF0 aWMgaW50DQpiaWd0aW1lX3Rlc3QgKGludCBqKQ0Kew0KICBzdHJ1Y3QgdG0gdG07DQogIHRpbWVf dCBub3c7DQogIHRtLnRtX3llYXIgPSB0bS50bV9tb24gPSB0bS50bV9tZGF5ID0gdG0udG1faG91 ciA9IHRtLnRtX21pbiA9IHRtLnRtX3NlYyA9IGo7DQogIG5vdyA9IG1rdGltZSAoJnRtKTsNCiAg aWYgKG5vdyAhPSAodGltZV90KSAtMSkNCiAgICB7DQogICAgICBzdHJ1Y3QgdG0gKmx0ID0gbG9j YWx0aW1lICgmbm93KTsNCiAgICAgIGlmICghIChsdA0KICAgICAgICAgICAgICYmIGx0LT50bV95 ZWFyID09IHRtLnRtX3llYXINCiAgICAgICAgICAgICAmJiBsdC0+dG1fbW9uID09IHRtLnRtX21v bg0KICAgICAgICAgICAgICYmIGx0LT50bV9tZGF5ID09IHRtLnRtX21kYXkNCiAgICAgICAgICAg ICAmJiBsdC0+dG1faG91ciA9PSB0bS50bV9ob3VyDQogICAgICAgICAgICAgJiYgbHQtPnRtX21p biA9PSB0bS50bV9taW4NCiAgICAgICAgICAgICAmJiBsdC0+dG1fc2VjID09IHRtLnRtX3NlYw0K ICAgICAgICAgICAgICYmIGx0LT50bV95ZGF5ID09IHRtLnRtX3lkYXkNCiAgICAgICAgICAgICAm JiBsdC0+dG1fd2RheSA9PSB0bS50bV93ZGF5DQogICAgICAgICAgICAgJiYgKChsdC0+dG1faXNk c3QgPCAwID8gLTEgOiAwIDwgbHQtPnRtX2lzZHN0KQ0KICAgICAgICAgICAgICAgICAgPT0gKHRt LnRtX2lzZHN0IDwgMCA/IC0xIDogMCA8IHRtLnRtX2lzZHN0KSkpKQ0KICAgICAgICByZXR1cm4g MDsNCiAgICB9DQogIHJldHVybiAxOw0KfQ0KDQpzdGF0aWMgaW50DQp5ZWFyXzIwNTBfdGVzdCAo KQ0Kew0KICAvKiBUaGUgY29ycmVjdCBhbnN3ZXIgZm9yIDIwNTAtMDItMDEgMDA6MDA6MDAgaW4g UGFjaWZpYyB0aW1lLA0KICAgICBpZ25vcmluZyBsZWFwIHNlY29uZHMuICAqLw0KICB1bnNpZ25l ZCBsb25nIGludCBhbnN3ZXIgPSAyNTI3MzE1MjAwVUw7DQoNCiAgc3RydWN0IHRtIHRtOw0KICB0 aW1lX3QgdDsNCiAgdG0udG1feWVhciA9IDIwNTAgLSAxOTAwOw0KICB0bS50bV9tb24gPSAyIC0g MTsNCiAgdG0udG1fbWRheSA9IDE7DQogIHRtLnRtX2hvdXIgPSB0bS50bV9taW4gPSB0bS50bV9z ZWMgPSAwOw0KICB0bS50bV9pc2RzdCA9IC0xOw0KDQogIC8qIFVzZSB0aGUgcG9ydGFibGUgUE9T SVguMSBzcGVjaWZpY2F0aW9uICJUWj1QU1Q4UERULE00LjEuMCxNMTAuNS4wIg0KICAgICBpbnN0 ZWFkIG9mICJUWj1BbWVyaWNhL1ZhbmNvdXZlciIgaW4gb3JkZXIgdG8gZGV0ZWN0IHRoZSBidWcg ZXZlbg0KICAgICBvbiBzeXN0ZW1zIHRoYXQgZG9uJ3Qgc3VwcG9ydCB0aGUgT2xzb24gZXh0ZW5z aW9uLCBvciBkb24ndCBoYXZlIHRoZQ0KICAgICBmdWxsIHpvbmVpbmZvIHRhYmxlcyBpbnN0YWxs ZWQuICAqLw0KICBwdXRlbnYgKCJUWj1QU1Q4UERULE00LjEuMCxNMTAuNS4wIik7DQoNCiAgdCA9 IG1rdGltZSAoJnRtKTsNCg0KICAvKiBDaGVjayB0aGF0IHRoZSByZXN1bHQgaXMgZWl0aGVyIGEg ZmFpbHVyZSwgb3IgY2xvc2UgZW5vdWdoDQogICAgIHRvIHRoZSBjb3JyZWN0IGFuc3dlciB0aGF0 IHdlIGNhbiBhc3N1bWUgdGhlIGRpc2NyZXBhbmN5IGlzDQogICAgIGR1ZSB0byBsZWFwIHNlY29u ZHMuICAqLw0KICByZXR1cm4gKHQgPT0gKHRpbWVfdCkgLTENCiAgICAgICAgICB8fCAoMCA8IHQg JiYgYW5zd2VyIC0gMTIwIDw9IHQgJiYgdCA8PSBhbnN3ZXIgKyAxMjApKTsNCn0NCg0KaW50DQpt YWluICgpDQp7DQogIGludCByZXN1bHQgPSAwOw0KICB0aW1lX3QgdCwgZGVsdGE7DQogIGludCBp LCBqOw0KICBpbnQgdGltZV90X3NpZ25lZF9tYWduaXR1ZGUgPSAodGltZV90KSB+ICh0aW1lX3Qp IDAgPCAodGltZV90KSAtMTsNCiAgaW50IHRpbWVfdF9zaWduZWQgPSAhICgodGltZV90KSAwIDwg KHRpbWVfdCkgLTEpOw0KDQogIC8qIFRoaXMgdGVzdCBtYWtlcyBzb21lIGJ1Z2d5IG1rdGltZSBp bXBsZW1lbnRhdGlvbnMgbG9vcC4NCiAgICAgR2l2ZSB1cCBhZnRlciA2MCBzZWNvbmRzOyBhIG1r dGltZSBzbG93ZXIgdGhhbiB0aGF0DQogICAgIGlzbid0IHdvcnRoIHVzaW5nIGFueXdheS4gICov DQogIGFsYXJtICg2MCk7DQoNCiAgdGltZV90X21heCA9ICghIHRpbWVfdF9zaWduZWQNCiAgICAg ICAgICAgICAgICA/ICh0aW1lX3QpIC0xDQogICAgICAgICAgICAgICAgOiAoKCgodGltZV90KSAx IDw8IChzaXplb2YgKHRpbWVfdCkgKiBDSEFSX0JJVCAtIDIpKSAtIDEpDQogICAgICAgICAgICAg ICAgICAgKiAyICsgMSkpOw0KICB0aW1lX3RfbWluID0gKCEgdGltZV90X3NpZ25lZA0KICAgICAg ICAgICAgICAgID8gKHRpbWVfdCkgMA0KICAgICAgICAgICAgICAgIDogdGltZV90X3NpZ25lZF9t YWduaXR1ZGUNCiAgICAgICAgICAgICAgICA/IH4gKHRpbWVfdCkgMA0KICAgICAgICAgICAgICAg IDogfiB0aW1lX3RfbWF4KTsNCg0KICBkZWx0YSA9IHRpbWVfdF9tYXggLyA5OTc7IC8qIGEgc3Vp dGFibGUgcHJpbWUgbnVtYmVyICovDQogIGZvciAoaSA9IDA7IGkgPCBOX1NUUklOR1M7IGkrKykN CiAgICB7DQogICAgICBpZiAodHpfc3RyaW5nc1tpXSkNCiAgICAgICAgcHV0ZW52ICh0el9zdHJp bmdzW2ldKTsNCg0KICAgICAgZm9yICh0ID0gMDsgdCA8PSB0aW1lX3RfbWF4IC0gZGVsdGE7IHQg Kz0gZGVsdGEpDQogICAgICAgIGlmICghIG1rdGltZV90ZXN0ICh0KSkNCiAgICAgICAgICByZXN1 bHQgfD0gMTsNCiAgICAgIGlmICghIChta3RpbWVfdGVzdCAoKHRpbWVfdCkgMSkNCiAgICAgICAg ICAgICAmJiBta3RpbWVfdGVzdCAoKHRpbWVfdCkgKDYwICogNjApKQ0KICAgICAgICAgICAgICYm IG1rdGltZV90ZXN0ICgodGltZV90KSAoNjAgKiA2MCAqIDI0KSkpKQ0KICAgICAgICByZXN1bHQg fD0gMjsNCg0KICAgICAgZm9yIChqID0gMTsgOyBqIDw8PSAxKQ0KICAgICAgICBpZiAoISBiaWd0 aW1lX3Rlc3QgKGopKQ0KICAgICAgICAgIHJlc3VsdCB8PSA0Ow0KICAgICAgICBlbHNlIGlmIChJ TlRfTUFYIC8gMiA8IGopDQogICAgICAgICAgYnJlYWs7DQogICAgICBpZiAoISBiaWd0aW1lX3Rl c3QgKElOVF9NQVgpKQ0KICAgICAgICByZXN1bHQgfD0gODsNCiAgICB9DQogIGlmICghIGlyaXhf Nl80X2J1ZyAoKSkNCiAgICByZXN1bHQgfD0gMTY7DQogIGlmICghIHNwcmluZ19mb3J3YXJkX2dh cCAoKSkNCiAgICByZXN1bHQgfD0gMzI7DQogIGlmICghIHllYXJfMjA1MF90ZXN0ICgpKQ0KICAg IHJlc3VsdCB8PSA2NDsNCiAgcmV0dXJuIHJlc3VsdDsNCn0NCl9BQ0VPRg0KaWYgYWNfZm5fY190 cnlfcnVuICIkTElORU5PIjsgdGhlbiA6DQogIGFjX2N2X2Z1bmNfd29ya2luZ19ta3RpbWU9eWVz DQplbHNlDQogIGFjX2N2X2Z1bmNfd29ya2luZ19ta3RpbWU9bm8NCmZpDQpybSAtZiBjb3JlICou Y29yZSBjb3JlLmNvbmZ0ZXN0LiogZ21vbi5vdXQgYmIub3V0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCBc DQogIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuYmVhbSBjb25mdGVzdC4kYWNfZXh0DQpm aQ0KDQpmaQ0KeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6 ICRhY19jdl9mdW5jX3dvcmtpbmdfbWt0aW1lIiA+JjUNCiRhc19lY2hvICIkYWNfY3ZfZnVuY193 b3JraW5nX21rdGltZSIgPiY2OyB9DQppZiB0ZXN0ICRhY19jdl9mdW5jX3dvcmtpbmdfbWt0aW1l ID0gbm87IHRoZW4NCg0KDQoNCg0KDQoNCg0KDQogIGdsX0xJQk9CSlM9IiRnbF9MSUJPQkpTIG1r dGltZS4kYWNfb2JqZXh0Ig0KDQpmaQ0KDQogICAgaWYgdGVzdCAkYWNfY3ZfZnVuY193b3JraW5n X21rdGltZSA9IG5vOyB0aGVuDQogICAgUkVQTEFDRV9NS1RJTUU9MQ0KDQoNCg0KICBlbHNlDQog ICAgUkVQTEFDRV9NS1RJTUU9MA0KICBmaQ0KDQoNCg0KDQogIEdOVUxJQl9NS1RJTUU9MQ0KDQoN Cg0KJGFzX2VjaG8gIiNkZWZpbmUgR05VTElCX1RFU1RfTUtUSU1FIDEiID4+Y29uZmRlZnMuaA0K DQoNCg0KICAjIENvZGUgZnJvbSBtb2R1bGUgbW9kZWNoYW5nZToNCg0KDQoNCg0KDQoNCg0KDQoN CiAgZ2xfTElCT0JKUz0iJGdsX0xJQk9CSlMgbW9kZWNoYW5nZS4kYWNfb2JqZXh0Ig0KDQoNCiAg IyBDb2RlIGZyb20gbW9kdWxlIG1vdW50bGlzdDoNCg0KDQpmb3IgYWNfZnVuYyBpbiBsaXN0bW50 ZW50IGdldG1udGluZm8NCmRvIDoNCiAgYXNfYWNfdmFyPWAkYXNfZWNobyAiYWNfY3ZfZnVuY18k YWNfZnVuYyIgfCAkYXNfdHJfc2hgDQphY19mbl9jX2NoZWNrX2Z1bmMgIiRMSU5FTk8iICIkYWNf ZnVuYyIgIiRhc19hY192YXIiDQppZiBldmFsIHRlc3QgXCJ4XCQiJGFzX2FjX3ZhciJcIiA9IHgi eWVzIjsgdGhlbiA6DQogIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YNCiNkZWZpbmUgYCRhc19l Y2hvICJIQVZFXyRhY19mdW5jIiB8ICRhc190cl9jcHBgIDENCl9BQ0VPRg0KDQpmaQ0KZG9uZQ0K DQoNCg0KIyBXZSBtdXN0IGluY2x1ZGUgZ3JwLmggYmVmb3JlIHVjcmVkLmggb24gT1NGIFY0LjAs IHNpbmNlIHVjcmVkLmggdXNlcw0KIyBOR1JPVVBTIChhcyB0aGUgYXJyYXkgZGltZW5zaW9uIGZv ciBhIHN0cnVjdCBtZW1iZXIpIHdpdGhvdXQgYSBkZWZpbml0aW9uLg0KZm9yIGFjX2hlYWRlciBp biBzeXMvdWNyZWQuaA0KZG8gOg0KICBhY19mbl9jX2NoZWNrX2hlYWRlcl9jb21waWxlICIkTElO RU5PIiAic3lzL3VjcmVkLmgiICJhY19jdl9oZWFkZXJfc3lzX3VjcmVkX2giICIjaW5jbHVkZSA8 Z3JwLmg+DQoiDQppZiB0ZXN0ICJ4JGFjX2N2X2hlYWRlcl9zeXNfdWNyZWRfaCIgPSB4eWVzOyB0 aGVuIDoNCiAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRg0KI2RlZmluZSBIQVZFX1NZU19VQ1JF RF9IIDENCl9BQ0VPRg0KDQpmaQ0KDQpkb25lDQoNCg0KZm9yIGFjX2hlYWRlciBpbiBzeXMvbW91 bnQuaA0KZG8gOg0KICBhY19mbl9jX2NoZWNrX2hlYWRlcl9jb21waWxlICIkTElORU5PIiAic3lz L21vdW50LmgiICJhY19jdl9oZWFkZXJfc3lzX21vdW50X2giICIkYWNfaW5jbHVkZXNfZGVmYXVs dA0KICAgI2lmIEhBVkVfU1lTX1BBUkFNX0gNCiAgICAgI2luY2x1ZGUgPHN5cy9wYXJhbS5oPg0K ICAgICNlbmRpZg0KIg0KaWYgdGVzdCAieCRhY19jdl9oZWFkZXJfc3lzX21vdW50X2giID0geHll czsgdGhlbiA6DQogIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YNCiNkZWZpbmUgSEFWRV9TWVNf TU9VTlRfSCAxDQpfQUNFT0YNCg0KZmkNCg0KZG9uZQ0KDQoNCmZvciBhY19oZWFkZXIgaW4gbW50 ZW50Lmggc3lzL2ZzX3R5cGVzLmgNCmRvIDoNCiAgYXNfYWNfSGVhZGVyPWAkYXNfZWNobyAiYWNf Y3ZfaGVhZGVyXyRhY19oZWFkZXIiIHwgJGFzX3RyX3NoYA0KYWNfZm5fY19jaGVja19oZWFkZXJf bW9uZ3JlbCAiJExJTkVOTyIgIiRhY19oZWFkZXIiICIkYXNfYWNfSGVhZGVyIiAiJGFjX2luY2x1 ZGVzX2RlZmF1bHQiDQppZiBldmFsIHRlc3QgXCJ4XCQiJGFzX2FjX0hlYWRlciJcIiA9IHgieWVz IjsgdGhlbiA6DQogIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YNCiNkZWZpbmUgYCRhc19lY2hv ICJIQVZFXyRhY19oZWFkZXIiIHwgJGFzX3RyX2NwcGAgMQ0KX0FDRU9GDQoNCmZpDQoNCmRvbmUN Cg0KICAgIGdldGZzc3RhdF9pbmNsdWRlcz0iXA0KJGFjX2luY2x1ZGVzX2RlZmF1bHQNCiNpZiBI QVZFX1NZU19QQVJBTV9IDQojIGluY2x1ZGUgPHN5cy9wYXJhbS5oPiAvKiBuZWVkZWQgYnkgcG93 ZXJwYy1hcHBsZS1kYXJ3aW4xLjMuNyAqLw0KI2VuZGlmDQojaWYgSEFWRV9TWVNfVUNSRURfSA0K IyBpbmNsdWRlIDxncnAuaD4gLyogbmVlZGVkIGZvciBkZWZpbml0aW9uIG9mIE5HUk9VUFMgKi8N CiMgaW5jbHVkZSA8c3lzL3VjcmVkLmg+IC8qIG5lZWRlZCBieSBwb3dlcnBjLWFwcGxlLWRhcndp bjEuMy43ICovDQojZW5kaWYNCiNpZiBIQVZFX1NZU19NT1VOVF9IDQojIGluY2x1ZGUgPHN5cy9t b3VudC5oPg0KI2VuZGlmDQojaWYgSEFWRV9TWVNfRlNfVFlQRVNfSA0KIyBpbmNsdWRlIDxzeXMv ZnNfdHlwZXMuaD4gLyogbmVlZGVkIGJ5IHBvd2VycGMtYXBwbGUtZGFyd2luMS4zLjcgKi8NCiNl bmRpZg0KIg0KYWNfZm5fY19jaGVja19tZW1iZXIgIiRMSU5FTk8iICJzdHJ1Y3QgZnNzdGF0IiAi Zl9mc3R5cGVuYW1lIiAiYWNfY3ZfbWVtYmVyX3N0cnVjdF9mc3N0YXRfZl9mc3R5cGVuYW1lIiAi JGdldGZzc3RhdF9pbmNsdWRlcw0KIg0KaWYgdGVzdCAieCRhY19jdl9tZW1iZXJfc3RydWN0X2Zz c3RhdF9mX2ZzdHlwZW5hbWUiID0geHllczsgdGhlbiA6DQoNCmNhdCA+PmNvbmZkZWZzLmggPDxf QUNFT0YNCiNkZWZpbmUgSEFWRV9TVFJVQ1RfRlNTVEFUX0ZfRlNUWVBFTkFNRSAxDQpfQUNFT0YN Cg0KDQpmaQ0KDQoNCiMgRGV0ZXJtaW5lIGhvdyB0byBnZXQgdGhlIGxpc3Qgb2YgbW91bnRlZCBm aWxlIHN5c3RlbXMuDQphY19saXN0X21vdW50ZWRfZnM9DQoNCiMgSWYgdGhlIGdldG1udGVudCBm dW5jdGlvbiBpcyBhdmFpbGFibGUgYnV0IG5vdCBpbiB0aGUgc3RhbmRhcmQgbGlicmFyeSwNCiMg bWFrZSBzdXJlIExJQlMgY29udGFpbnMgdGhlIGFwcHJvcHJpYXRlIC1sIG9wdGlvbi4NCiMgZ2V0 bW50ZW50IGlzIGluIHRoZSBzdGFuZGFyZCBDIGxpYnJhcnkgb24gVU5JQ09TLCBpbiAtbHN1biBv biBJcml4IDQsDQojIC1sc2VxIG9uIER5bml4L1BUWCwgLWxnZW4gb24gVW5peHdhcmUuDQp7ICRh c19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBsaWJyYXJ5 IGNvbnRhaW5pbmcgZ2V0bW50ZW50IiA+JjUNCiRhc19lY2hvX24gImNoZWNraW5nIGZvciBsaWJy YXJ5IGNvbnRhaW5pbmcgZ2V0bW50ZW50Li4uICIgPiY2OyB9DQppZiAke2FjX2N2X3NlYXJjaF9n ZXRtbnRlbnQrOn0gZmFsc2U7IHRoZW4gOg0KICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNg0K ZWxzZQ0KICBhY19mdW5jX3NlYXJjaF9zYXZlX0xJQlM9JExJQlMNCmNhdCBjb25mZGVmcy5oIC0g PDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQNCi8qIGVuZCBjb25mZGVmcy5oLiAgKi8NCiNpZmRl ZiBfX1RBTkRFTQ0KI2luY2x1ZGUgPGZsb3NzLmg+DQppbnQNCm1haW4gKCkNCnsNCkZJTEUgKmZw Ow0KcmV0dXJuICgoaW50KWZsb3NzX2dldG1udGVudCAoZnApKTsNCiAgOw0KICByZXR1cm4gMDsN Cn0NCiNlbHNlDQoNCi8qIE92ZXJyaWRlIGFueSBHQ0MgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2 b2lkIGFuIGVycm9yLg0KICAgVXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJl dHVybiB0eXBlIG9mIGEgR0NDDQogICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90 b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLw0KI2lmZGVmIF9fY3BsdXNwbHVzDQpleHRlcm4g IkMiDQojZW5kaWYNCmNoYXIgZ2V0bW50ZW50ICgpOw0KaW50DQptYWluICgpDQp7DQpyZXR1cm4g Z2V0bW50ZW50ICgpOw0KICA7DQogIHJldHVybiAwOw0KfQ0KI2VuZGlmDQpfQUNFT0YNCmZvciBh Y19saWIgaW4gJycgc3VuIHNlcSBnZW47IGRvDQogIGlmIHRlc3QgLXogIiRhY19saWIiOyB0aGVu DQogICAgYWNfcmVzPSJub25lIHJlcXVpcmVkIg0KICBlbHNlDQogICAgYWNfcmVzPS1sJGFjX2xp Yg0KICAgIExJQlM9Ii1sJGFjX2xpYiAgJGFjX2Z1bmNfc2VhcmNoX3NhdmVfTElCUyINCiAgZmkN CiAgaWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOg0KICBhY19jdl9zZWFyY2hf Z2V0bW50ZW50PSRhY19yZXMNCmZpDQpybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4k YWNfb2JqZXh0IFwNCiAgICBjb25mdGVzdCRhY19leGVleHQNCiAgaWYgJHthY19jdl9zZWFyY2hf Z2V0bW50ZW50Kzp9IGZhbHNlOyB0aGVuIDoNCiAgYnJlYWsNCmZpDQpkb25lDQppZiAke2FjX2N2 X3NlYXJjaF9nZXRtbnRlbnQrOn0gZmFsc2U7IHRoZW4gOg0KDQplbHNlDQogIGFjX2N2X3NlYXJj aF9nZXRtbnRlbnQ9bm8NCmZpDQpybSBjb25mdGVzdC4kYWNfZXh0DQpMSUJTPSRhY19mdW5jX3Nl YXJjaF9zYXZlX0xJQlMNCmZpDQp7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVO T306IHJlc3VsdDogJGFjX2N2X3NlYXJjaF9nZXRtbnRlbnQiID4mNQ0KJGFzX2VjaG8gIiRhY19j dl9zZWFyY2hfZ2V0bW50ZW50IiA+JjY7IH0NCmFjX3Jlcz0kYWNfY3Zfc2VhcmNoX2dldG1udGVu dA0KaWYgdGVzdCAiJGFjX3JlcyIgIT0gbm87IHRoZW4gOg0KICB0ZXN0ICIkYWNfcmVzIiA9ICJu b25lIHJlcXVpcmVkIiB8fCBMSUJTPSIkYWNfcmVzICRMSUJTIg0KDQpmaQ0KDQpmb3IgYWNfZnVu YyBpbiBnZXRtbnRlbnQNCmRvIDoNCiAgYWNfZm5fY19jaGVja19mdW5jICIkTElORU5PIiAiZ2V0 bW50ZW50IiAiYWNfY3ZfZnVuY19nZXRtbnRlbnQiDQppZiB0ZXN0ICJ4JGFjX2N2X2Z1bmNfZ2V0 bW50ZW50IiA9IHh5ZXM7IHRoZW4gOg0KICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GDQojZGVm aW5lIEhBVkVfR0VUTU5URU5UIDENCl9BQ0VPRg0KDQpmaQ0KZG9uZQ0KDQoNCmZvciBhY19mdW5j IGluIGZsb3NzX2dldG1udGVudA0KZG8gOg0KICBhY19mbl9jX2NoZWNrX2Z1bmMgIiRMSU5FTk8i ICJmbG9zc19nZXRtbnRlbnQiICJhY19jdl9mdW5jX2Zsb3NzX2dldG1udGVudCINCmlmIHRlc3Qg IngkYWNfY3ZfZnVuY19mbG9zc19nZXRtbnRlbnQiID0geHllczsgdGhlbiA6DQogIGNhdCA+PmNv bmZkZWZzLmggPDxfQUNFT0YNCiNkZWZpbmUgSEFWRV9HRVRNTlRFTlQgMQ0KX0FDRU9GDQoNCmZp DQpkb25lDQoNCiMgVGhpcyB0ZXN0IG11c3QgcHJlY2VkZSB0aGUgb25lcyBmb3IgZ2V0bW50ZW50 IGJlY2F1c2UgVW5pY29zLTkgaXMNCiMgcmVwb3J0ZWQgdG8gaGF2ZSB0aGUgZ2V0bW50ZW50IGZ1 bmN0aW9uLCBidXQgaXRzIHN1cHBvcnQgaXMgaW5jb21wYXRpYmxlDQojIHdpdGggb3RoZXIgZ2V0 bW50ZW50IGltcGxlbWVudGF0aW9ucy4NCg0KIyBOT1RFOiBOb3JtYWxseSwgSSB3b3VsZG4ndCB1 c2UgYSBjaGVjayBmb3Igc3lzdGVtIHR5cGUgYXMgSSd2ZSBkb25lIGZvcg0KIyBgQ1JBWScgYmVs b3cgc2luY2UgdGhhdCBnb2VzIGFnYWluc3QgdGhlIHdob2xlIGF1dG9jb25mIHBoaWxvc29waHku ICBCdXQNCiMgSSB0aGluayB0aGVyZSBpcyB0b28gZ3JlYXQgYSBjaGFuY2UgdGhhdCBzb21lIG5v bi1DcmF5IHN5c3RlbSBoYXMgYQ0KIyBmdW5jdGlvbiBuYW1lZCBsaXN0bW50ZW50IHRvIHJpc2sg dGhlIGZhbHNlIHBvc2l0aXZlLg0KDQppZiB0ZXN0IC16ICIkYWNfbGlzdF9tb3VudGVkX2ZzIjsg dGhlbg0KICAjIENyYXkgVU5JQ09TIDkNCiAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5v LSRMSU5FTk99OiBjaGVja2luZyBmb3IgbGlzdG1udGVudCBvZiBDcmF5L1VuaWNvcy05IiA+JjUN CiRhc19lY2hvX24gImNoZWNraW5nIGZvciBsaXN0bW50ZW50IG9mIENyYXkvVW5pY29zLTkuLi4g IiA+JjY7IH0NCiAgaWYgJHtmdV9jdl9zeXNfbW91bnRlZF9jcmF5X2xpc3RtbnRlbnQrOn0gZmFs c2U7IHRoZW4gOg0KICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNg0KZWxzZQ0KICBmdV9jdl9z eXNfbW91bnRlZF9jcmF5X2xpc3RtbnRlbnQ9bm8NCiAgICAgIGNhdCBjb25mZGVmcy5oIC0gPDxf QUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQNCi8qIGVuZCBjb25mZGVmcy5oLiAgKi8NCiNpZmRlZiBf Q1JBWQ0KeWVzDQojZW5kaWYNCg0KX0FDRU9GDQppZiAoZXZhbCAiJGFjX2NwcCBjb25mdGVzdC4k YWNfZXh0IikgMj4mNSB8DQogICRFR1JFUCAieWVzIiA+L2Rldi9udWxsIDI+JjE7IHRoZW4gOg0K ICB0ZXN0ICRhY19jdl9mdW5jX2xpc3RtbnRlbnQgPSB5ZXMgXA0KICAgICAgICAgICAgJiYgZnVf Y3Zfc3lzX21vdW50ZWRfY3JheV9saXN0bW50ZW50PXllcw0KDQpmaQ0Kcm0gLWYgY29uZnRlc3Qq DQoNCg0KDQpmaQ0KDQogIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTog cmVzdWx0OiAkZnVfY3Zfc3lzX21vdW50ZWRfY3JheV9saXN0bW50ZW50IiA+JjUNCiRhc19lY2hv ICIkZnVfY3Zfc3lzX21vdW50ZWRfY3JheV9saXN0bW50ZW50IiA+JjY7IH0NCiAgaWYgdGVzdCAk ZnVfY3Zfc3lzX21vdW50ZWRfY3JheV9saXN0bW50ZW50ID0geWVzOyB0aGVuDQogICAgYWNfbGlz dF9tb3VudGVkX2ZzPWZvdW5kDQoNCiRhc19lY2hvICIjZGVmaW5lIE1PVU5URURfTElTVE1OVEVO VCAxIiA+PmNvbmZkZWZzLmgNCg0KICBmaQ0KZmkNCg0KaWYgdGVzdCAteiAiJGFjX2xpc3RfbW91 bnRlZF9mcyI7IHRoZW4NCiAgIyBBSVguDQogIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVu by0kTElORU5PfTogY2hlY2tpbmcgZm9yIG1udGN0bCBmdW5jdGlvbiBhbmQgc3RydWN0IHZtb3Vu dCIgPiY1DQokYXNfZWNob19uICJjaGVja2luZyBmb3IgbW50Y3RsIGZ1bmN0aW9uIGFuZCBzdHJ1 Y3Qgdm1vdW50Li4uICIgPiY2OyB9DQogIGlmICR7ZnVfY3Zfc3lzX21vdW50ZWRfdm1vdW50Kzp9 IGZhbHNlOyB0aGVuIDoNCiAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYNCmVsc2UNCiAgY2F0 IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dA0KLyogZW5kIGNvbmZkZWZz LmguICAqLw0KI2luY2x1ZGUgPGZzaGVscC5oPg0KX0FDRU9GDQppZiBhY19mbl9jX3RyeV9jcHAg IiRMSU5FTk8iOyB0aGVuIDoNCiAgZnVfY3Zfc3lzX21vdW50ZWRfdm1vdW50PXllcw0KZWxzZQ0K ICBmdV9jdl9zeXNfbW91bnRlZF92bW91bnQ9bm8NCmZpDQpybSAtZiBjb25mdGVzdC5lcnIgY29u ZnRlc3QuaSBjb25mdGVzdC4kYWNfZXh0DQpmaQ0KDQogIHsgJGFzX2VjaG8gIiRhc19tZToke2Fz X2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkZnVfY3Zfc3lzX21vdW50ZWRfdm1vdW50IiA+JjUN CiRhc19lY2hvICIkZnVfY3Zfc3lzX21vdW50ZWRfdm1vdW50IiA+JjY7IH0NCiAgaWYgdGVzdCAk ZnVfY3Zfc3lzX21vdW50ZWRfdm1vdW50ID0geWVzOyB0aGVuDQogICAgYWNfbGlzdF9tb3VudGVk X2ZzPWZvdW5kDQoNCiRhc19lY2hvICIjZGVmaW5lIE1PVU5URURfVk1PVU5UIDEiID4+Y29uZmRl ZnMuaA0KDQogIGZpDQpmaQ0KDQppZiB0ZXN0ICRhY19jdl9mdW5jX2dldG1udGVudCA9IHllcyB8 fCB0ZXN0ICRhY19jdl9mdW5jX2Zsb3NzX2dldG1udGVudCA9IHllczsgDQp0aGVuDQoNCiAgIyBU aGlzIHN5c3RlbSBoYXMgdGhlIGdldG1udGVudCBmdW5jdGlvbi4NCiAgIyBEZXRlcm1pbmUgd2hl dGhlciBpdCdzIHRoZSBvbmUtYXJndW1lbnQgdmFyaWFudCBvciB0aGUgdHdvLWFyZ3VtZW50IG9u ZS4NCg0KICBpZiB0ZXN0IC16ICIkYWNfbGlzdF9tb3VudGVkX2ZzIjsgdGhlbg0KICAgICMgNC4z QlNELCBTdW5PUywgSFAtVVgsIER5bml4LCBJcml4DQogICAgeyAkYXNfZWNobyAiJGFzX21lOiR7 YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3Igb25lLWFyZ3VtZW50IGdldG1udGVudCBm dW5jdGlvbiIgPiY1DQokYXNfZWNob19uICJjaGVja2luZyBmb3Igb25lLWFyZ3VtZW50IGdldG1u dGVudCBmdW5jdGlvbi4uLiAiID4mNjsgfQ0KICAgIGlmICR7ZnVfY3Zfc3lzX21vdW50ZWRfZ2V0 bW50ZW50MSs6fSBmYWxzZTsgdGhlbiA6DQogICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2DQpl bHNlDQogIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQNCi8qIGVu ZCBjb25mZGVmcy5oLiAgKi8NCg0KLyogU3VuT1MgNC4xLnggL3Vzci9pbmNsdWRlL21udGVudC5o IG5lZWRzIHRoaXMgZm9yIEZJTEUgKi8NCiNpbmNsdWRlIDxzdGRpby5oPg0KDQojaWZkZWYgX19U QU5ERU0NCmludCANCm1haW4oKQ0Kew0KICByZXR1cm4gMDsNCn0NCiNlbHNlDQojaW5jbHVkZSA8 bW50ZW50Lmg+DQojaWYgIWRlZmluZWQgTU9VTlRFRA0KIyBpZiBkZWZpbmVkIF9QQVRIX01PVU5U RUQgICAgICAvKiBHTlUgbGliYyAgKi8NCiMgIGRlZmluZSBNT1VOVEVEIF9QQVRIX01PVU5URUQN CiMgZW5kaWYNCiMgaWYgZGVmaW5lZCBNTlRfTU5UVEFCIC8qIEhQLVVYLiAgKi8NCiMgIGRlZmlu ZSBNT1VOVEVEIE1OVF9NTlRUQUINCiMgZW5kaWYNCiMgaWYgZGVmaW5lZCBNTlRUQUJOQU1FIC8q IER5bml4LiAgKi8NCiMgIGRlZmluZSBNT1VOVEVEIE1OVFRBQk5BTUUNCiMgZW5kaWYNCiNlbmRp Zg0KDQppbnQNCm1haW4gKCkNCnsNCiBzdHJ1Y3QgbW50ZW50ICptbnQgPSAwOyBjaGFyICp0YWJs ZSA9IE1PVU5URUQ7DQogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNpemVvZiBtbnQgJiYg c2l6ZW9mIHRhYmxlKSByZXR1cm4gMDsNCiAgOw0KICByZXR1cm4gMDsNCn0NCiNlbmRpZg0KX0FD RU9GDQppZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6DQogIGZ1X2N2X3N5 c19tb3VudGVkX2dldG1udGVudDE9eWVzDQplbHNlDQogIGZ1X2N2X3N5c19tb3VudGVkX2dldG1u dGVudDE9bm8NCmZpDQpybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0 IGNvbmZ0ZXN0LiRhY19leHQNCmZpDQoNCiAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5l bm8tJExJTkVOT306IHJlc3VsdDogJGZ1X2N2X3N5c19tb3VudGVkX2dldG1udGVudDEiID4mNQ0K JGFzX2VjaG8gIiRmdV9jdl9zeXNfbW91bnRlZF9nZXRtbnRlbnQxIiA+JjY7IH0NCiAgICBpZiB0 ZXN0ICRmdV9jdl9zeXNfbW91bnRlZF9nZXRtbnRlbnQxID0geWVzOyB0aGVuDQogICAgICBhY19s aXN0X21vdW50ZWRfZnM9Zm91bmQNCg0KJGFzX2VjaG8gIiNkZWZpbmUgTU9VTlRFRF9HRVRNTlRF TlQxIDEiID4+Y29uZmRlZnMuaA0KDQogICAgZmkNCiAgZmkNCg0KICBpZiB0ZXN0IC16ICIkYWNf bGlzdF9tb3VudGVkX2ZzIjsgdGhlbg0KICAgICMgU1ZSNA0KICAgIHsgJGFzX2VjaG8gIiRhc19t ZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIHR3by1hcmd1bWVudCBnZXRtbnRl bnQgZnVuY3Rpb24iID4mNQ0KJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIHR3by1hcmd1bWVudCBn ZXRtbnRlbnQgZnVuY3Rpb24uLi4gIiA+JjY7IH0NCiAgICBpZiAke2Z1X2N2X3N5c19tb3VudGVk X2dldG1udGVudDIrOn0gZmFsc2U7IHRoZW4gOg0KICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4m Ng0KZWxzZQ0KICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0DQov KiBlbmQgY29uZmRlZnMuaC4gICovDQojaW5jbHVkZSA8c3lzL21udHRhYi5oPg0KDQpfQUNFT0YN CmlmIChldmFsICIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQiKSAyPiY1IHwNCiAgJEVHUkVQICJn ZXRtbnRlbnQiID4vZGV2L251bGwgMj4mMTsgdGhlbiA6DQogIGZ1X2N2X3N5c19tb3VudGVkX2dl dG1udGVudDI9eWVzDQplbHNlDQogIGZ1X2N2X3N5c19tb3VudGVkX2dldG1udGVudDI9bm8NCmZp DQpybSAtZiBjb25mdGVzdCoNCg0KZmkNCg0KICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xp bmVuby0kTElORU5PfTogcmVzdWx0OiAkZnVfY3Zfc3lzX21vdW50ZWRfZ2V0bW50ZW50MiIgPiY1 DQokYXNfZWNobyAiJGZ1X2N2X3N5c19tb3VudGVkX2dldG1udGVudDIiID4mNjsgfQ0KICAgIGlm IHRlc3QgJGZ1X2N2X3N5c19tb3VudGVkX2dldG1udGVudDIgPSB5ZXM7IHRoZW4NCiAgICAgIGFj X2xpc3RfbW91bnRlZF9mcz1mb3VuZA0KDQokYXNfZWNobyAiI2RlZmluZSBNT1VOVEVEX0dFVE1O VEVOVDIgMSIgPj5jb25mZGVmcy5oDQoNCiAgICAgIGZvciBhY19mdW5jIGluIGhhc21udG9wdA0K ZG8gOg0KICBhY19mbl9jX2NoZWNrX2Z1bmMgIiRMSU5FTk8iICJoYXNtbnRvcHQiICJhY19jdl9m dW5jX2hhc21udG9wdCINCmlmIHRlc3QgIngkYWNfY3ZfZnVuY19oYXNtbnRvcHQiID0geHllczsg dGhlbiA6DQogIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YNCiNkZWZpbmUgSEFWRV9IQVNNTlRP UFQgMQ0KX0FDRU9GDQoNCmZpDQpkb25lDQoNCiAgICBmaQ0KICBmaQ0KDQpmaQ0KDQppZiB0ZXN0 IC16ICIkYWNfbGlzdF9tb3VudGVkX2ZzIjsgdGhlbg0KICAjIERFQyBBbHBoYSBydW5uaW5nIE9T Ri8xLCBhbmQgQXBwbGUgRGFyd2luIDEuMy4NCiAgIyBwb3dlcnBjLWFwcGxlLWRhcndpbjEuMy43 IG5lZWRzIHN5cy9wYXJhbS5oIHN5cy91Y3JlZC5oIHN5cy9mc190eXBlcy5oDQoNCiAgeyAkYXNf ZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgZ2V0ZnNzdGF0 IGZ1bmN0aW9uIiA+JjUNCiRhc19lY2hvX24gImNoZWNraW5nIGZvciBnZXRmc3N0YXQgZnVuY3Rp b24uLi4gIiA+JjY7IH0NCiAgaWYgJHtmdV9jdl9zeXNfbW91bnRlZF9nZXRmc3N0YXQrOn0gZmFs c2U7IHRoZW4gOg0KICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNg0KZWxzZQ0KICBjYXQgY29u ZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0DQovKiBlbmQgY29uZmRlZnMuaC4g ICovDQoNCiNpbmNsdWRlIDxzeXMvdHlwZXMuaD4NCiNpZiBIQVZFX1NUUlVDVF9GU1NUQVRfRl9G U1RZUEVOQU1FDQojIGRlZmluZSBGU19UWVBFKEVudCkgKChFbnQpLmZfZnN0eXBlbmFtZSkNCiNl bHNlDQojIGRlZmluZSBGU19UWVBFKEVudCkgbW50X25hbWVzWyhFbnQpLmZfdHlwZV0NCiNlbmRp Zg0KJGdldGZzc3RhdF9pbmNsdWRlcw0KDQppbnQNCm1haW4gKCkNCnsNCnN0cnVjdCBzdGF0ZnMg KnN0YXRzOw0KICAgICAgICBpbnQgbnVtc3lzID0gZ2V0ZnNzdGF0ICgoc3RydWN0IHN0YXRmcyAq KTAsIDBMLCBNTlRfV0FJVCk7DQogICAgICAgIGNoYXIgKnQgPSBGU19UWVBFICgqc3RhdHMpOw0K ICA7DQogIHJldHVybiAwOw0KfQ0KX0FDRU9GDQppZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5P IjsgdGhlbiA6DQogIGZ1X2N2X3N5c19tb3VudGVkX2dldGZzc3RhdD15ZXMNCmVsc2UNCiAgZnVf Y3Zfc3lzX21vdW50ZWRfZ2V0ZnNzdGF0PW5vDQpmaQ0Kcm0gLWYgY29yZSBjb25mdGVzdC5lcnIg Y29uZnRlc3QuJGFjX29iamV4dCBcDQogICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRh Y19leHQNCmZpDQoNCiAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBy ZXN1bHQ6ICRmdV9jdl9zeXNfbW91bnRlZF9nZXRmc3N0YXQiID4mNQ0KJGFzX2VjaG8gIiRmdV9j dl9zeXNfbW91bnRlZF9nZXRmc3N0YXQiID4mNjsgfQ0KICBpZiB0ZXN0ICRmdV9jdl9zeXNfbW91 bnRlZF9nZXRmc3N0YXQgPSB5ZXM7IHRoZW4NCiAgICBhY19saXN0X21vdW50ZWRfZnM9Zm91bmQN Cg0KJGFzX2VjaG8gIiNkZWZpbmUgTU9VTlRFRF9HRVRGU1NUQVQgMSIgPj5jb25mZGVmcy5oDQoN CiAgZmkNCmZpDQoNCmlmIHRlc3QgLXogIiRhY19saXN0X21vdW50ZWRfZnMiOyB0aGVuDQogICMg U1ZSMw0KICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5n IGZvciBGSVhNRSBleGlzdGVuY2Ugb2YgdGhyZWUgaGVhZGVycyIgPiY1DQokYXNfZWNob19uICJj aGVja2luZyBmb3IgRklYTUUgZXhpc3RlbmNlIG9mIHRocmVlIGhlYWRlcnMuLi4gIiA+JjY7IH0N CiAgaWYgJHtmdV9jdl9zeXNfbW91bnRlZF9mcmVhZF9mc3R5cCs6fSBmYWxzZTsgdGhlbiA6DQog ICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2DQplbHNlDQogIGNhdCBjb25mZGVmcy5oIC0gPDxf QUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQNCi8qIGVuZCBjb25mZGVmcy5oLiAgKi8NCg0KI2luY2x1 ZGUgPHN5cy9zdGF0ZnMuaD4NCiNpbmNsdWRlIDxzeXMvZnN0eXAuaD4NCiNpbmNsdWRlIDxtbnR0 YWIuaD4NCl9BQ0VPRg0KaWYgYWNfZm5fY190cnlfY3BwICIkTElORU5PIjsgdGhlbiA6DQogIGZ1 X2N2X3N5c19tb3VudGVkX2ZyZWFkX2ZzdHlwPXllcw0KZWxzZQ0KICBmdV9jdl9zeXNfbW91bnRl ZF9mcmVhZF9mc3R5cD1ubw0KZmkNCnJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC5pIGNvbmZ0 ZXN0LiRhY19leHQNCmZpDQoNCiAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5F Tk99OiByZXN1bHQ6ICRmdV9jdl9zeXNfbW91bnRlZF9mcmVhZF9mc3R5cCIgPiY1DQokYXNfZWNo byAiJGZ1X2N2X3N5c19tb3VudGVkX2ZyZWFkX2ZzdHlwIiA+JjY7IH0NCiAgaWYgdGVzdCAkZnVf Y3Zfc3lzX21vdW50ZWRfZnJlYWRfZnN0eXAgPSB5ZXM7IHRoZW4NCiAgICBhY19saXN0X21vdW50 ZWRfZnM9Zm91bmQNCg0KJGFzX2VjaG8gIiNkZWZpbmUgTU9VTlRFRF9GUkVBRF9GU1RZUCAxIiA+ PmNvbmZkZWZzLmgNCg0KICBmaQ0KZmkNCg0KaWYgdGVzdCAteiAiJGFjX2xpc3RfbW91bnRlZF9m cyI7IHRoZW4NCiAgIyA0LjRCU0QgYW5kIERFQyBPU0YvMS4NCiAgeyAkYXNfZWNobyAiJGFzX21l OiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgZ2V0bW50aW5mbyBmdW5jdGlvbiIg PiY1DQokYXNfZWNob19uICJjaGVja2luZyBmb3IgZ2V0bW50aW5mbyBmdW5jdGlvbi4uLiAiID4m NjsgfQ0KICBpZiAke2Z1X2N2X3N5c19tb3VudGVkX2dldG1udGluZm8rOn0gZmFsc2U7IHRoZW4g Og0KICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNg0KZWxzZQ0KDQogICAgICB0ZXN0ICIkYWNf Y3ZfZnVuY19nZXRtbnRpbmZvIiA9IHllcyBcDQogICAgICAgICAgJiYgZnVfY3Zfc3lzX21vdW50 ZWRfZ2V0bW50aW5mbz15ZXMgXA0KICAgICAgICAgIHx8IGZ1X2N2X3N5c19tb3VudGVkX2dldG1u dGluZm89bm8NCg0KZmkNCg0KICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVO T306IHJlc3VsdDogJGZ1X2N2X3N5c19tb3VudGVkX2dldG1udGluZm8iID4mNQ0KJGFzX2VjaG8g IiRmdV9jdl9zeXNfbW91bnRlZF9nZXRtbnRpbmZvIiA+JjY7IH0NCiAgaWYgdGVzdCAkZnVfY3Zf c3lzX21vdW50ZWRfZ2V0bW50aW5mbyA9IHllczsgdGhlbg0KICAgIHsgJGFzX2VjaG8gIiRhc19t ZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciBnZXRtbnRpbmZvIHJldHVy bnMgc3RhdHZmcyBzdHJ1Y3R1cmVzIiA+JjUNCiRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIg Z2V0bW50aW5mbyByZXR1cm5zIHN0YXR2ZnMgc3RydWN0dXJlcy4uLiAiID4mNjsgfQ0KICAgIGlm ICR7ZnVfY3Zfc3lzX21vdW50ZWRfZ2V0bW50aW5mbzIrOn0gZmFsc2U7IHRoZW4gOg0KICAkYXNf ZWNob19uICIoY2FjaGVkKSAiID4mNg0KZWxzZQ0KDQogICAgICAgIGNhdCBjb25mZGVmcy5oIC0g PDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQNCi8qIGVuZCBjb25mZGVmcy5oLiAgKi8NCg0KI2lm IEhBVkVfU1lTX1BBUkFNX0gNCiMgaW5jbHVkZSA8c3lzL3BhcmFtLmg+DQojZW5kaWYNCiNpbmNs dWRlIDxzeXMvdHlwZXMuaD4NCiNpZiBIQVZFX1NZU19NT1VOVF9IDQojIGluY2x1ZGUgPHN5cy9t b3VudC5oPg0KI2VuZGlmDQojaWYgSEFWRV9TWVNfU1RBVFZGU19IDQojIGluY2x1ZGUgPHN5cy9z dGF0dmZzLmg+DQojZW5kaWYNCmV4dGVybiBpbnQgZ2V0bW50aW5mbyAoc3RydWN0IHN0YXRmcyAq KiwgaW50KTsNCg0KaW50DQptYWluICgpDQp7DQoNCiAgOw0KICByZXR1cm4gMDsNCn0NCl9BQ0VP Rg0KaWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOg0KICBmdV9jdl9zeXNf bW91bnRlZF9nZXRtbnRpbmZvMj1ubw0KZWxzZQ0KICBmdV9jdl9zeXNfbW91bnRlZF9nZXRtbnRp bmZvMj15ZXMNCmZpDQpybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0 IGNvbmZ0ZXN0LiRhY19leHQNCg0KZmkNCg0KICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xp bmVuby0kTElORU5PfTogcmVzdWx0OiAkZnVfY3Zfc3lzX21vdW50ZWRfZ2V0bW50aW5mbzIiID4m NQ0KJGFzX2VjaG8gIiRmdV9jdl9zeXNfbW91bnRlZF9nZXRtbnRpbmZvMiIgPiY2OyB9DQogICAg aWYgdGVzdCAkZnVfY3Zfc3lzX21vdW50ZWRfZ2V0bW50aW5mbzIgPSBubzsgdGhlbg0KICAgICAg YWNfbGlzdF9tb3VudGVkX2ZzPWZvdW5kDQoNCiRhc19lY2hvICIjZGVmaW5lIE1PVU5URURfR0VU TU5USU5GTyAxIiA+PmNvbmZkZWZzLmgNCg0KICAgIGVsc2UNCiAgICAgIGFjX2xpc3RfbW91bnRl ZF9mcz1mb3VuZA0KDQokYXNfZWNobyAiI2RlZmluZSBNT1VOVEVEX0dFVE1OVElORk8yIDEiID4+ Y29uZmRlZnMuaA0KDQogICAgZmkNCiAgZmkNCmZpDQoNCmlmIHRlc3QgLXogIiRhY19saXN0X21v dW50ZWRfZnMiOyB0aGVuDQogICMgVWx0cml4DQogIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xp bmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIGdldG1udCBmdW5jdGlvbiIgPiY1DQokYXNfZWNo b19uICJjaGVja2luZyBmb3IgZ2V0bW50IGZ1bmN0aW9uLi4uICIgPiY2OyB9DQogIGlmICR7ZnVf Y3Zfc3lzX21vdW50ZWRfZ2V0bW50Kzp9IGZhbHNlOyB0aGVuIDoNCiAgJGFzX2VjaG9fbiAiKGNh Y2hlZCkgIiA+JjYNCmVsc2UNCiAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3Qu JGFjX2V4dA0KLyogZW5kIGNvbmZkZWZzLmguICAqLw0KDQojaW5jbHVkZSA8c3lzL2ZzX3R5cGVz Lmg+DQojaW5jbHVkZSA8c3lzL21vdW50Lmg+DQpfQUNFT0YNCmlmIGFjX2ZuX2NfdHJ5X2NwcCAi JExJTkVOTyI7IHRoZW4gOg0KICBmdV9jdl9zeXNfbW91bnRlZF9nZXRtbnQ9eWVzDQplbHNlDQog IGZ1X2N2X3N5c19tb3VudGVkX2dldG1udD1ubw0KZmkNCnJtIC1mIGNvbmZ0ZXN0LmVyciBjb25m dGVzdC5pIGNvbmZ0ZXN0LiRhY19leHQNCmZpDQoNCiAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNf bGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRmdV9jdl9zeXNfbW91bnRlZF9nZXRtbnQiID4mNQ0K JGFzX2VjaG8gIiRmdV9jdl9zeXNfbW91bnRlZF9nZXRtbnQiID4mNjsgfQ0KICBpZiB0ZXN0ICRm dV9jdl9zeXNfbW91bnRlZF9nZXRtbnQgPSB5ZXM7IHRoZW4NCiAgICBhY19saXN0X21vdW50ZWRf ZnM9Zm91bmQNCg0KJGFzX2VjaG8gIiNkZWZpbmUgTU9VTlRFRF9HRVRNTlQgMSIgPj5jb25mZGVm cy5oDQoNCiAgZmkNCmZpDQoNCmlmIHRlc3QgLXogIiRhY19saXN0X21vdW50ZWRfZnMiOyB0aGVu DQogICMgQmVPUw0KICBmb3IgYWNfZnVuYyBpbiBuZXh0X2RldiBmc19zdGF0X2Rldg0KZG8gOg0K ICBhc19hY192YXI9YCRhc19lY2hvICJhY19jdl9mdW5jXyRhY19mdW5jIiB8ICRhc190cl9zaGAN CmFjX2ZuX2NfY2hlY2tfZnVuYyAiJExJTkVOTyIgIiRhY19mdW5jIiAiJGFzX2FjX3ZhciINCmlm IGV2YWwgdGVzdCBcInhcJCIkYXNfYWNfdmFyIlwiID0geCJ5ZXMiOyB0aGVuIDoNCiAgY2F0ID4+ Y29uZmRlZnMuaCA8PF9BQ0VPRg0KI2RlZmluZSBgJGFzX2VjaG8gIkhBVkVfJGFjX2Z1bmMiIHwg JGFzX3RyX2NwcGAgMQ0KX0FDRU9GDQoNCmZpDQpkb25lDQoNCiAgZm9yIGFjX2hlYWRlciBpbiBm c19pbmZvLmgNCmRvIDoNCiAgYWNfZm5fY19jaGVja19oZWFkZXJfbW9uZ3JlbCAiJExJTkVOTyIg ImZzX2luZm8uaCIgImFjX2N2X2hlYWRlcl9mc19pbmZvX2giICIkYWNfaW5jbHVkZXNfZGVmYXVs dCINCmlmIHRlc3QgIngkYWNfY3ZfaGVhZGVyX2ZzX2luZm9faCIgPSB4eWVzOyB0aGVuIDoNCiAg Y2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRg0KI2RlZmluZSBIQVZFX0ZTX0lORk9fSCAxDQpfQUNF T0YNCg0KZmkNCg0KZG9uZQ0KDQogIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElO RU5PfTogY2hlY2tpbmcgZm9yIEJFT1MgbW91bnRlZCBmaWxlIHN5c3RlbSBzdXBwb3J0IGZ1bmN0 aW9ucyIgPiY1DQokYXNfZWNob19uICJjaGVja2luZyBmb3IgQkVPUyBtb3VudGVkIGZpbGUgc3lz dGVtIHN1cHBvcnQgZnVuY3Rpb25zLi4uICIgPiY2OyB9DQogIGlmIHRlc3QgJGFjX2N2X2hlYWRl cl9mc19pbmZvX2ggPSB5ZXMgXA0KICAgICAgJiYgdGVzdCAkYWNfY3ZfZnVuY19uZXh0X2RldiA9 IHllcyBcDQogICAgICAgICYmIHRlc3QgJGFjX2N2X2Z1bmNfZnNfc3RhdF9kZXYgPSB5ZXM7IHRo ZW4NCiAgICBmdV9yZXN1bHQ9eWVzDQogIGVsc2UNCiAgICBmdV9yZXN1bHQ9bm8NCiAgZmkNCiAg eyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRmdV9yZXN1 bHQiID4mNQ0KJGFzX2VjaG8gIiRmdV9yZXN1bHQiID4mNjsgfQ0KICBpZiB0ZXN0ICRmdV9yZXN1 bHQgPSB5ZXM7IHRoZW4NCiAgICBhY19saXN0X21vdW50ZWRfZnM9Zm91bmQNCg0KJGFzX2VjaG8g IiNkZWZpbmUgTU9VTlRFRF9GU19TVEFUX0RFViAxIiA+PmNvbmZkZWZzLmgNCg0KICBmaQ0KZmkN Cg0KaWYgdGVzdCAteiAiJGFjX2xpc3RfbW91bnRlZF9mcyI7IHRoZW4NCiAgIyBTVlIyDQogIHsg JGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciBp dCBpcyBwb3NzaWJsZSB0byByZXNvcnQgdG8gZnJlYWQgb24gL2V0Yy9tbnR0YWIiID4mNQ0KJGFz X2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciBpdCBpcyBwb3NzaWJsZSB0byByZXNvcnQgdG8gZnJl YWQgb24gL2V0Yy9tbnR0YWIuLi4gIiA+JjY7IH0NCiAgaWYgJHtmdV9jdl9zeXNfbW91bnRlZF9m cmVhZCs6fSBmYWxzZTsgdGhlbiA6DQogICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2DQplbHNl DQogIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQNCi8qIGVuZCBj b25mZGVmcy5oLiAgKi8NCiNpbmNsdWRlIDxtbnR0YWIuaD4NCl9BQ0VPRg0KaWYgYWNfZm5fY190 cnlfY3BwICIkTElORU5PIjsgdGhlbiA6DQogIGZ1X2N2X3N5c19tb3VudGVkX2ZyZWFkPXllcw0K ZWxzZQ0KICBmdV9jdl9zeXNfbW91bnRlZF9mcmVhZD1ubw0KZmkNCnJtIC1mIGNvbmZ0ZXN0LmVy ciBjb25mdGVzdC5pIGNvbmZ0ZXN0LiRhY19leHQNCmZpDQoNCiAgeyAkYXNfZWNobyAiJGFzX21l OiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRmdV9jdl9zeXNfbW91bnRlZF9mcmVhZCIg PiY1DQokYXNfZWNobyAiJGZ1X2N2X3N5c19tb3VudGVkX2ZyZWFkIiA+JjY7IH0NCiAgaWYgdGVz dCAkZnVfY3Zfc3lzX21vdW50ZWRfZnJlYWQgPSB5ZXM7IHRoZW4NCiAgICBhY19saXN0X21vdW50 ZWRfZnM9Zm91bmQNCg0KJGFzX2VjaG8gIiNkZWZpbmUgTU9VTlRFRF9GUkVBRCAxIiA+PmNvbmZk ZWZzLmgNCg0KICBmaQ0KZmkNCg0KaWYgdGVzdCAteiAiJGFjX2xpc3RfbW91bnRlZF9mcyI7IHRo ZW4NCiAgIyBJbnRlcml4IC8gQlNEIGFsaWtlIHN0YXR2ZnMNCiAgIyB0aGUgY29kZSBpcyByZWFs bHkgaW50ZXJpeCBzcGVjaWZpYywgc28gbWFrZSBzdXJlLCB3ZSdyZSBvbiBpdC4NCiAgY2FzZSAi JGhvc3QiIGluDQogICotaW50ZXJpeCopDQogICAgZm9yIGFjX2Z1bmMgaW4gc3RhdHZmcw0KZG8g Og0KICBhY19mbl9jX2NoZWNrX2Z1bmMgIiRMSU5FTk8iICJzdGF0dmZzIiAiYWNfY3ZfZnVuY19z dGF0dmZzIg0KaWYgdGVzdCAieCRhY19jdl9mdW5jX3N0YXR2ZnMiID0geHllczsgdGhlbiA6DQog IGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YNCiNkZWZpbmUgSEFWRV9TVEFUVkZTIDENCl9BQ0VP Rg0KDQpmaQ0KZG9uZQ0KDQogICAgaWYgdGVzdCAkYWNfY3ZfZnVuY19zdGF0dmZzID0geWVzOyB0 aGVuDQogICAgICBhY19saXN0X21vdW50ZWRfZnM9Zm91bmQNCg0KJGFzX2VjaG8gIiNkZWZpbmUg TU9VTlRFRF9JTlRFUklYX1NUQVRWRlMgMSIgPj5jb25mZGVmcy5oDQoNCiAgICBmaQ0KICAgIDs7 DQogIGVzYWMNCmZpDQoNCmlmIHRlc3QgLXogIiRhY19saXN0X21vdW50ZWRfZnMiOyB0aGVuDQog IGFzX2ZuX2Vycm9yICQ/ICJjb3VsZCBub3QgZGV0ZXJtaW5lIGhvdyB0byByZWFkIGxpc3Qgb2Yg bW91bnRlZCBmaWxlIHN5c3RlbXMiICIkTElORU5PIiA1DQogICMgRklYTUUgLS0gbm8gbmVlZCB0 byBhYm9ydCBidWlsZGluZyB0aGUgd2hvbGUgcGFja2FnZQ0KICAjIENhbid0IGJ1aWxkIG1vdW50 bGlzdC5jIG9yIGFueXRoaW5nIHRoYXQgbmVlZHMgaXRzIGZ1bmN0aW9ucw0KZmkNCg0KaWYgdGVz dCAkYWNfbGlzdF9tb3VudGVkX2ZzID0gZm91bmQ7IHRoZW4gOg0KICBnbF9jdl9saXN0X21vdW50 ZWRfZnM9eWVzDQplbHNlDQogIGdsX2N2X2xpc3RfbW91bnRlZF9mcz1ubw0KZmkNCg0KDQogIGlm IHRlc3QgJGdsX2N2X2xpc3RfbW91bnRlZF9mcyA9IHllczsgdGhlbg0KDQoNCg0KDQoNCg0KDQoN CiAgZ2xfTElCT0JKUz0iJGdsX0xJQk9CSlMgbW91bnRsaXN0LiRhY19vYmpleHQiDQoNCg0KICAg IGZvciBhY19oZWFkZXIgaW4gc3lzL21udGVudC5oDQpkbyA6DQogIGFjX2ZuX2NfY2hlY2tfaGVh ZGVyX21vbmdyZWwgIiRMSU5FTk8iICJzeXMvbW50ZW50LmgiICJhY19jdl9oZWFkZXJfc3lzX21u dGVudF9oIiAiJGFjX2luY2x1ZGVzX2RlZmF1bHQiDQppZiB0ZXN0ICJ4JGFjX2N2X2hlYWRlcl9z eXNfbW50ZW50X2giID0geHllczsgdGhlbiA6DQogIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YN CiNkZWZpbmUgSEFWRV9TWVNfTU5URU5UX0ggMQ0KX0FDRU9GDQoNCmZpDQoNCmRvbmUNCg0KDQog IGFjX2ZuX2NfY2hlY2tfbWVtYmVyICIkTElORU5PIiAic3RydWN0IHN0YXRmcyIgImZfZnN0eXBl bmFtZSIgImFjX2N2X21lbWJlcl9zdHJ1Y3Rfc3RhdGZzX2ZfZnN0eXBlbmFtZSIgIg0KICAgICAg I2luY2x1ZGUgPHN5cy90eXBlcy5oPg0KICAgICAgI2luY2x1ZGUgPHN5cy9wYXJhbS5oPg0KICAg ICAgI2luY2x1ZGUgPHN5cy9tb3VudC5oPg0KDQoiDQppZiB0ZXN0ICJ4JGFjX2N2X21lbWJlcl9z dHJ1Y3Rfc3RhdGZzX2ZfZnN0eXBlbmFtZSIgPSB4eWVzOyB0aGVuIDoNCg0KY2F0ID4+Y29uZmRl ZnMuaCA8PF9BQ0VPRg0KI2RlZmluZSBIQVZFX1NUUlVDVF9TVEFURlNfRl9GU1RZUEVOQU1FIDEN Cl9BQ0VPRg0KDQoNCmZpDQoNCg0KDQogIGZpDQoNCiAgIyBDb2RlIGZyb20gbW9kdWxlIG1wc29y dDoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KICBnbF9MSUJPQkpTPSIkZ2xfTElCT0JKUyBtcHNvcnQu JGFjX29iamV4dCINCg0KDQogICMgQ29kZSBmcm9tIG1vZHVsZSBtdWx0aWFyY2g6DQoNCiAgIyBD b2RlIGZyb20gbW9kdWxlIG5hbm9zbGVlcDoNCg0KDQoNCg0KDQoNCg0KIG5hbm9zbGVlcF9zYXZl X2xpYnM9JExJQlMNCg0KICMgU29sYXJpcyAyLjUuMSBuZWVkcyAtbHBvc2l4NCB0byBnZXQgdGhl IG5hbm9zbGVlcCBmdW5jdGlvbi4NCiAjIFNvbGFyaXMgNyBwcmVmZXJzIHRoZSBsaWJyYXJ5IG5h bWUgLWxydCB0byB0aGUgb2Jzb2xlc2NlbnQgbmFtZSAtbHBvc2l4NC4NCiBMSUJfTkFOT1NMRUVQ PQ0KDQogeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBm b3IgbGlicmFyeSBjb250YWluaW5nIG5hbm9zbGVlcCIgPiY1DQokYXNfZWNob19uICJjaGVja2lu ZyBmb3IgbGlicmFyeSBjb250YWluaW5nIG5hbm9zbGVlcC4uLiAiID4mNjsgfQ0KaWYgJHthY19j dl9zZWFyY2hfbmFub3NsZWVwKzp9IGZhbHNlOyB0aGVuIDoNCiAgJGFzX2VjaG9fbiAiKGNhY2hl ZCkgIiA+JjYNCmVsc2UNCiAgYWNfZnVuY19zZWFyY2hfc2F2ZV9MSUJTPSRMSUJTDQpjYXQgY29u ZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0DQovKiBlbmQgY29uZmRlZnMuaC4g ICovDQoNCi8qIE92ZXJyaWRlIGFueSBHQ0MgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFu IGVycm9yLg0KICAgVXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0 eXBlIG9mIGEgR0NDDQogICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUg d291bGQgc3RpbGwgYXBwbHkuICAqLw0KI2lmZGVmIF9fY3BsdXNwbHVzDQpleHRlcm4gIkMiDQoj ZW5kaWYNCmNoYXIgbmFub3NsZWVwICgpOw0KaW50DQptYWluICgpDQp7DQpyZXR1cm4gbmFub3Ns ZWVwICgpOw0KICA7DQogIHJldHVybiAwOw0KfQ0KX0FDRU9GDQpmb3IgYWNfbGliIGluICcnIHJ0 IHBvc2l4NDsgZG8NCiAgaWYgdGVzdCAteiAiJGFjX2xpYiI7IHRoZW4NCiAgICBhY19yZXM9Im5v bmUgcmVxdWlyZWQiDQogIGVsc2UNCiAgICBhY19yZXM9LWwkYWNfbGliDQogICAgTElCUz0iLWwk YWNfbGliICAkYWNfZnVuY19zZWFyY2hfc2F2ZV9MSUJTIg0KICBmaQ0KICBpZiBhY19mbl9jX3Ry eV9saW5rICIkTElORU5PIjsgdGhlbiA6DQogIGFjX2N2X3NlYXJjaF9uYW5vc2xlZXA9JGFjX3Jl cw0KZmkNCnJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXA0KICAg IGNvbmZ0ZXN0JGFjX2V4ZWV4dA0KICBpZiAke2FjX2N2X3NlYXJjaF9uYW5vc2xlZXArOn0gZmFs c2U7IHRoZW4gOg0KICBicmVhaw0KZmkNCmRvbmUNCmlmICR7YWNfY3Zfc2VhcmNoX25hbm9zbGVl cCs6fSBmYWxzZTsgdGhlbiA6DQoNCmVsc2UNCiAgYWNfY3Zfc2VhcmNoX25hbm9zbGVlcD1ubw0K ZmkNCnJtIGNvbmZ0ZXN0LiRhY19leHQNCkxJQlM9JGFjX2Z1bmNfc2VhcmNoX3NhdmVfTElCUw0K ZmkNCnsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNf Y3Zfc2VhcmNoX25hbm9zbGVlcCIgPiY1DQokYXNfZWNobyAiJGFjX2N2X3NlYXJjaF9uYW5vc2xl ZXAiID4mNjsgfQ0KYWNfcmVzPSRhY19jdl9zZWFyY2hfbmFub3NsZWVwDQppZiB0ZXN0ICIkYWNf cmVzIiAhPSBubzsgdGhlbiA6DQogIHRlc3QgIiRhY19yZXMiID0gIm5vbmUgcmVxdWlyZWQiIHx8 IExJQlM9IiRhY19yZXMgJExJQlMiDQogIHRlc3QgIiRhY19jdl9zZWFyY2hfbmFub3NsZWVwIiA9 ICJub25lIHJlcXVpcmVkIiB8fA0KICAgICAgICAgICAgICAgICBMSUJfTkFOT1NMRUVQPSRhY19j dl9zZWFyY2hfbmFub3NsZWVwDQpmaQ0KDQogaWYgdGVzdCAieCRhY19jdl9zZWFyY2hfbmFub3Ns ZWVwIiAhPSB4bm87IHRoZW4NCg0KDQogICBpZiB0ZXN0ICRBUFBMRV9VTklWRVJTQUxfQlVJTEQg PSAxOyB0aGVuDQogICAgICMgQSB1bml2ZXJzYWwgYnVpbGQgb24gQXBwbGUgTWFjT1MgWCBwbGF0 Zm9ybXMuDQogICAgICMgVGhlIHRlc3QgcmVzdWx0IHdvdWxkIGJlICdubyAobWlzaGFuZGxlcyBs YXJnZSBhcmd1bWVudHMpJyBpbiA2NC1iaXQNCiAgICAgIyBtb2RlIGJ1dCAneWVzJyBpbiAzMi1i aXQgbW9kZS4gQnV0IHdlIG5lZWQgYSBjb25maWd1cmF0aW9uIHJlc3VsdCB0aGF0DQogICAgICMg aXMgdmFsaWQgaW4gYm90aCBtb2Rlcy4NCiAgICAgZ2xfY3ZfZnVuY19uYW5vc2xlZXA9J25vICht aXNoYW5kbGVzIGxhcmdlIGFyZ3VtZW50cyknDQogICBmaQ0KDQogICB7ICRhc19lY2hvICIkYXNf bWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciB3b3JraW5nIG5hbm9zbGVlcCIg PiY1DQokYXNfZWNob19uICJjaGVja2luZyBmb3Igd29ya2luZyBuYW5vc2xlZXAuLi4gIiA+JjY7 IH0NCmlmICR7Z2xfY3ZfZnVuY19uYW5vc2xlZXArOn0gZmFsc2U7IHRoZW4gOg0KICAkYXNfZWNo b19uICIoY2FjaGVkKSAiID4mNg0KZWxzZQ0KDQogICAgIGlmIHRlc3QgIiRjcm9zc19jb21waWxp bmciID0geWVzOyB0aGVuIDoNCiAgZ2xfY3ZfZnVuY19uYW5vc2xlZXA9Y3Jvc3MtY29tcGlsaW5n DQplbHNlDQogIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQNCi8q IGVuZCBjb25mZGVmcy5oLiAgKi8NCg0KICAgICAgICAgICNpbmNsdWRlIDxlcnJuby5oPg0KICAg ICAgICAgICNpbmNsdWRlIDxsaW1pdHMuaD4NCiAgICAgICAgICAjaW5jbHVkZSA8c2lnbmFsLmg+ DQogICAgICAgICAgI2lmIEhBVkVfU1lTX1RJTUVfSA0KICAgICAgICAgICAjaW5jbHVkZSA8c3lz L3RpbWUuaD4NCiAgICAgICAgICAjZW5kaWYNCiAgICAgICAgICAjaW5jbHVkZSA8dGltZS5oPg0K ICAgICAgICAgICNpbmNsdWRlIDx1bmlzdGQuaD4NCiAgICAgICAgICAjZGVmaW5lIFRZUEVfU0lH TkVEKHQpICghICgodCkgMCA8ICh0KSAtMSkpDQogICAgICAgICAgI2RlZmluZSBUWVBFX01BWElN VU0odCkgXA0KICAgICAgICAgICAgKCh0KSAoISBUWVBFX1NJR05FRCAodCkgXA0KICAgICAgICAg ICAgICAgICAgPyAodCkgLTEgXA0KICAgICAgICAgICAgICAgICAgOiAoKCgodCkgMSA8PCAoc2l6 ZW9mICh0KSAqIENIQVJfQklUIC0gMikpIC0gMSkgKiAyICsgMSkpKQ0KDQogICAgICAgICAgc3Rh dGljIHZvaWQNCiAgICAgICAgICBjaGVja19mb3JfU0lHQUxSTSAoaW50IHNpZykNCiAgICAgICAg ICB7DQogICAgICAgICAgICBpZiAoc2lnICE9IFNJR0FMUk0pDQogICAgICAgICAgICAgIF9leGl0 ICgxKTsNCiAgICAgICAgICB9DQoNCiAgICAgICAgICBpbnQNCiAgICAgICAgICBtYWluICgpDQog ICAgICAgICAgew0KICAgICAgICAgICAgc3RhdGljIHN0cnVjdCB0aW1lc3BlYyB0c19zbGVlcDsN CiAgICAgICAgICAgIHN0YXRpYyBzdHJ1Y3QgdGltZXNwZWMgdHNfcmVtYWluaW5nOw0KICAgICAg ICAgICAgc3RhdGljIHN0cnVjdCBzaWdhY3Rpb24gYWN0Ow0KICAgICAgICAgICAgaWYgKCEgbmFu b3NsZWVwKQ0KICAgICAgICAgICAgICByZXR1cm4gMjsNCiAgICAgICAgICAgIGFjdC5zYV9oYW5k bGVyID0gY2hlY2tfZm9yX1NJR0FMUk07DQogICAgICAgICAgICBzaWdlbXB0eXNldCAoJmFjdC5z YV9tYXNrKTsNCiAgICAgICAgICAgIHNpZ2FjdGlvbiAoU0lHQUxSTSwgJmFjdCwgTlVMTCk7DQog ICAgICAgICAgICB0c19zbGVlcC50dl9zZWMgPSAwOw0KICAgICAgICAgICAgdHNfc2xlZXAudHZf bnNlYyA9IDE7DQogICAgICAgICAgICBhbGFybSAoMSk7DQogICAgICAgICAgICBpZiAobmFub3Ns ZWVwICgmdHNfc2xlZXAsIE5VTEwpICE9IDApDQogICAgICAgICAgICAgIHJldHVybiAzOw0KICAg ICAgICAgICAgdHNfc2xlZXAudHZfc2VjID0gVFlQRV9NQVhJTVVNICh0aW1lX3QpOw0KICAgICAg ICAgICAgdHNfc2xlZXAudHZfbnNlYyA9IDk5OTk5OTk5OTsNCiAgICAgICAgICAgIGFsYXJtICgx KTsNCiAgICAgICAgICAgIGlmIChuYW5vc2xlZXAgKCZ0c19zbGVlcCwgJnRzX3JlbWFpbmluZykg IT0gLTEpDQogICAgICAgICAgICAgIHJldHVybiA0Ow0KICAgICAgICAgICAgaWYgKGVycm5vICE9 IEVJTlRSKQ0KICAgICAgICAgICAgICByZXR1cm4gNTsNCiAgICAgICAgICAgIGlmICh0c19yZW1h aW5pbmcudHZfc2VjIDw9IFRZUEVfTUFYSU1VTSAodGltZV90KSAtIDEwKQ0KICAgICAgICAgICAg ICByZXR1cm4gNjsNCiAgICAgICAgICAgIHJldHVybiAwOw0KICAgICAgICAgIH0NCl9BQ0VPRg0K aWYgYWNfZm5fY190cnlfcnVuICIkTElORU5PIjsgdGhlbiA6DQogIGdsX2N2X2Z1bmNfbmFub3Ns ZWVwPXllcw0KZWxzZQ0KICBjYXNlICQ/IGluICAgICAgICAgNHw1fDYpIGdsX2N2X2Z1bmNfbmFu b3NsZWVwPSdubyAobWlzaGFuZGxlcyBsYXJnZSBhcmd1bWVudHMpJzs7ICAgICAgICAgKikgICBn bF9jdl9mdW5jX25hbm9zbGVlcD1ubzs7DQogICAgICAgIGVzYWMNCmZpDQpybSAtZiBjb3JlICou Y29yZSBjb3JlLmNvbmZ0ZXN0LiogZ21vbi5vdXQgYmIub3V0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCBc DQogIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuYmVhbSBjb25mdGVzdC4kYWNfZXh0DQpm aQ0KDQoNCmZpDQp7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3Vs dDogJGdsX2N2X2Z1bmNfbmFub3NsZWVwIiA+JjUNCiRhc19lY2hvICIkZ2xfY3ZfZnVuY19uYW5v c2xlZXAiID4mNjsgfQ0KICAgaWYgdGVzdCAiJGdsX2N2X2Z1bmNfbmFub3NsZWVwIiA9IHllczsg dGhlbg0KICAgICBSRVBMQUNFX05BTk9TTEVFUD0wDQogICBlbHNlDQogICAgIFJFUExBQ0VfTkFO T1NMRUVQPTENCiAgICAgaWYgdGVzdCAiJGdsX2N2X2Z1bmNfbmFub3NsZWVwIiA9ICdubyAobWlz aGFuZGxlcyBsYXJnZSBhcmd1bWVudHMpJzsgdGhlbg0KDQokYXNfZWNobyAiI2RlZmluZSBIQVZF X0JVR19CSUdfTkFOT1NMRUVQIDEiID4+Y29uZmRlZnMuaA0KDQogICAgIGVsc2UNCiAgICAgICBm b3IgYWNfbGliIGluICRMSUJTT0NLRVQ7IGRvDQogICAgICAgICBjYXNlICIgJExJQl9OQU5PU0xF RVAgIiBpbg0KICAgICAgICAgKiIgJGFjX2xpYiAiKikgOzsNCiAgICAgICAgICopIExJQl9OQU5P U0xFRVA9IiRMSUJfTkFOT1NMRUVQICRhY19saWIiOzsNCiAgICAgICAgIGVzYWMNCiAgICAgICBk b25lDQogICAgIGZpDQogICBmaQ0KIGVsc2UNCiAgIEhBVkVfTkFOT1NMRUVQPTANCiBmaQ0KIExJ QlM9JG5hbm9zbGVlcF9zYXZlX2xpYnMNCiBpZiB0ZXN0ICRIQVZFX05BTk9TTEVFUCA9IDAgfHwg dGVzdCAkUkVQTEFDRV9OQU5PU0xFRVAgPSAxOyB0aGVuDQoNCg0KDQoNCg0KDQoNCg0KICBnbF9M SUJPQkpTPSIkZ2xfTElCT0JKUyBuYW5vc2xlZXAuJGFjX29iamV4dCINCg0KDQoNCg0KDQoNCg0K IGZpDQoNCg0KDQoNCiAgR05VTElCX05BTk9TTEVFUD0xDQoNCg0KDQokYXNfZWNobyAiI2RlZmlu ZSBHTlVMSUJfVEVTVF9OQU5PU0xFRVAgMSIgPj5jb25mZGVmcy5oDQoNCg0KDQogICMgQ29kZSBm cm9tIG1vZHVsZSBuZXRkYjoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQogICAgIGlmIHRlc3QgJGds X2N2X2hhdmVfaW5jbHVkZV9uZXh0ID0geWVzOyB0aGVuDQogICAgICAgZ2xfY3ZfbmV4dF9uZXRk Yl9oPSc8J25ldGRiLmgnPicNCiAgICAgZWxzZQ0KICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZTok e2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgYWJzb2x1dGUgbmFtZSBvZiA8bmV0ZGIuaD4i ID4mNQ0KJGFzX2VjaG9fbiAiY2hlY2tpbmcgYWJzb2x1dGUgbmFtZSBvZiA8bmV0ZGIuaD4uLi4g IiA+JjY7IH0NCmlmICR7Z2xfY3ZfbmV4dF9uZXRkYl9oKzp9IGZhbHNlOyB0aGVuIDoNCiAgJGFz X2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYNCmVsc2UNCg0KICAgICAgICAgICAgIGlmIHRlc3QgJGFj X2N2X2hlYWRlcl9uZXRkYl9oID0geWVzOyB0aGVuDQoNCg0KICAgICAgICAgICAgICAgY2F0IGNv bmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dA0KLyogZW5kIGNvbmZkZWZzLmgu ICAqLw0KI2luY2x1ZGUgPG5ldGRiLmg+DQoNCl9BQ0VPRg0KICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAiJGhvc3Rfb3Mi IGluDQogICAgICAgICAgICAgICAgIGFpeCopIGdsX2Fic25hbWVfY3BwPSIkYWNfY3BwIC1DIiA7 Ow0KICAgICAgICAgICAgICAgICAqKSAgICBnbF9hYnNuYW1lX2NwcD0iJGFjX2NwcCIgOzsNCiAg ICAgICAgICAgICAgIGVzYWMNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGdsX2N2X25leHRfbmV0ZGJfaD0nIidgKGV2YWwgIiRnbF9h YnNuYW1lX2NwcCBjb25mdGVzdC4kYWNfZXh0IikgMj4mNSB8DQogICAgICAgICAgICAgICAgICBz ZWQgLW4gJ1wjL25ldGRiLmgjew0KICAgICAgICAgICAgICAgICAgICBzIy4qIlwoLiovbmV0ZGIu aFwpIi4qI1wxIw0KICAgICAgICAgICAgICAgICAgICBzI14vW14vXSMvLyYjDQogICAgICAgICAg ICAgICAgICAgIHANCiAgICAgICAgICAgICAgICAgICAgcQ0KICAgICAgICAgICAgICAgICAgfSdg JyInDQogICAgICAgICAgZWxzZQ0KICAgICAgICAgICAgICAgZ2xfY3ZfbmV4dF9uZXRkYl9oPSc8 J25ldGRiLmgnPicNCiAgICAgICAgICAgICBmaQ0KDQoNCmZpDQp7ICRhc19lY2hvICIkYXNfbWU6 JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGdsX2N2X25leHRfbmV0ZGJfaCIgPiY1DQok YXNfZWNobyAiJGdsX2N2X25leHRfbmV0ZGJfaCIgPiY2OyB9DQogICAgIGZpDQogICAgIE5FWFRf TkVUREJfSD0kZ2xfY3ZfbmV4dF9uZXRkYl9oDQoNCiAgICAgaWYgdGVzdCAkZ2xfY3ZfaGF2ZV9p bmNsdWRlX25leHQgPSB5ZXMgfHwgdGVzdCAkZ2xfY3ZfaGF2ZV9pbmNsdWRlX25leHQgPSBidWdn eTsgdGhlbg0KICAgICAgICMgSU5DTFVERV9ORVhUX0FTX0ZJUlNUX0RJUkVDVElWRT0naW5jbHVk ZV9uZXh0Jw0KICAgICAgIGdsX25leHRfYXNfZmlyc3RfZGlyZWN0aXZlPSc8J25ldGRiLmgnPicN CiAgICAgZWxzZQ0KICAgICAgICMgSU5DTFVERV9ORVhUX0FTX0ZJUlNUX0RJUkVDVElWRT0naW5j bHVkZScNCiAgICAgICBnbF9uZXh0X2FzX2ZpcnN0X2RpcmVjdGl2ZT0kZ2xfY3ZfbmV4dF9uZXRk Yl9oDQogICAgIGZpDQogICAgIE5FWFRfQVNfRklSU1RfRElSRUNUSVZFX05FVERCX0g9JGdsX25l eHRfYXNfZmlyc3RfZGlyZWN0aXZlDQoNCg0KDQoNCiAgaWYgdGVzdCAkYWNfY3ZfaGVhZGVyX25l dGRiX2ggPSB5ZXM7IHRoZW4NCiAgICBIQVZFX05FVERCX0g9MQ0KICBlbHNlDQogICAgSEFWRV9O RVREQl9IPTANCiAgZmkNCg0KDQoNCiAgICBmb3IgZ2xfZnVuYyBpbiBnZXRhZGRyaW5mbyBmcmVl YWRkcmluZm8gZ2FpX3N0cmVycm9yIGdldG5hbWVpbmZvOyBkbw0KICAgIGFzX2dsX1N5bWJvbD1g JGFzX2VjaG8gImdsX2N2X2hhdmVfcmF3X2RlY2xfJGdsX2Z1bmMiIHwgJGFzX3RyX3NoYA0KICAg IHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhl ciAkZ2xfZnVuYyBpcyBkZWNsYXJlZCB3aXRob3V0IGEgbWFjcm8iID4mNQ0KJGFzX2VjaG9fbiAi Y2hlY2tpbmcgd2hldGhlciAkZ2xfZnVuYyBpcyBkZWNsYXJlZCB3aXRob3V0IGEgbWFjcm8uLi4g IiA+JjY7IH0NCmlmIGV2YWwgXCR7JGFzX2dsX1N5bWJvbCs6fSBmYWxzZTsgdGhlbiA6DQogICRh c19lY2hvX24gIihjYWNoZWQpICIgPiY2DQplbHNlDQogIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNF T0YgPmNvbmZ0ZXN0LiRhY19leHQNCi8qIGVuZCBjb25mZGVmcy5oLiAgKi8NCiNpbmNsdWRlIDxu ZXRkYi5oPg0KaW50DQptYWluICgpDQp7DQojdW5kZWYgJGdsX2Z1bmMNCiAgKHZvaWQpICRnbF9m dW5jOw0KICA7DQogIHJldHVybiAwOw0KfQ0KX0FDRU9GDQppZiBhY19mbl9jX3RyeV9jb21waWxl ICIkTElORU5PIjsgdGhlbiA6DQogIGV2YWwgIiRhc19nbF9TeW1ib2w9eWVzIg0KZWxzZQ0KICBl dmFsICIkYXNfZ2xfU3ltYm9sPW5vIg0KZmkNCnJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0 ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dA0KZmkNCmV2YWwgYWNfcmVzPVwkJGFzX2ds X1N5bWJvbA0KCSAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306 IHJlc3VsdDogJGFjX3JlcyIgPiY1DQokYXNfZWNobyAiJGFjX3JlcyIgPiY2OyB9DQogICAgIGlm IGV2YWwgdGVzdCBcInhcJCIkYXNfZ2xfU3ltYm9sIlwiID0geCJ5ZXMiOyB0aGVuIDoNCiAgY2F0 ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRg0KI2RlZmluZSBgJGFzX2VjaG8gIkhBVkVfUkFXX0RFQ0xf JGdsX2Z1bmMiIHwgJGFzX3RyX2NwcGAgMQ0KX0FDRU9GDQoNCiAgICAgICAgICAgICAgICAgICAg IGV2YWwgYWNfY3ZfaGF2ZV9kZWNsXyRnbF9mdW5jPXllcw0KZmkNCiAgICAgIGRvbmUNCg0KDQog ICMgQ29kZSBmcm9tIG1vZHVsZSBuZXRpbmV0X2luOg0KDQogIHsgJGFzX2VjaG8gIiRhc19tZTok e2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciA8bmV0aW5ldC9pbi5oPiBpcyBz ZWxmLWNvbnRhaW5lZCIgPiY1DQokYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIDxuZXRpbmV0 L2luLmg+IGlzIHNlbGYtY29udGFpbmVkLi4uICIgPiY2OyB9DQppZiAke2dsX2N2X2hlYWRlcl9u ZXRpbmV0X2luX2hfc2VsZmNvbnRhaW5lZCs6fSBmYWxzZTsgdGhlbiA6DQogICRhc19lY2hvX24g IihjYWNoZWQpICIgPiY2DQplbHNlDQoNCiAgICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0Yg PmNvbmZ0ZXN0LiRhY19leHQNCi8qIGVuZCBjb25mZGVmcy5oLiAgKi8NCiNpbmNsdWRlIDxuZXRp bmV0L2luLmg+DQppbnQNCm1haW4gKCkNCnsNCg0KICA7DQogIHJldHVybiAwOw0KfQ0KX0FDRU9G DQppZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6DQogIGdsX2N2X2hlYWRl cl9uZXRpbmV0X2luX2hfc2VsZmNvbnRhaW5lZD15ZXMNCmVsc2UNCiAgZ2xfY3ZfaGVhZGVyX25l dGluZXRfaW5faF9zZWxmY29udGFpbmVkPW5vDQpmaQ0Kcm0gLWYgY29yZSBjb25mdGVzdC5lcnIg Y29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0DQoNCmZpDQp7ICRhc19lY2hvICIk YXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGdsX2N2X2hlYWRlcl9uZXRpbmV0 X2luX2hfc2VsZmNvbnRhaW5lZCIgPiY1DQokYXNfZWNobyAiJGdsX2N2X2hlYWRlcl9uZXRpbmV0 X2luX2hfc2VsZmNvbnRhaW5lZCIgPiY2OyB9DQogIGlmIHRlc3QgJGdsX2N2X2hlYWRlcl9uZXRp bmV0X2luX2hfc2VsZmNvbnRhaW5lZCA9IHllczsgdGhlbg0KICAgIE5FVElORVRfSU5fSD0nJw0K ICBlbHNlDQogICAgTkVUSU5FVF9JTl9IPSduZXRpbmV0L2luLmgnDQogICAgZm9yIGFjX2hlYWRl ciBpbiBuZXRpbmV0L2luLmgNCmRvIDoNCiAgYWNfZm5fY19jaGVja19oZWFkZXJfbW9uZ3JlbCAi JExJTkVOTyIgIm5ldGluZXQvaW4uaCIgImFjX2N2X2hlYWRlcl9uZXRpbmV0X2luX2giICIkYWNf aW5jbHVkZXNfZGVmYXVsdCINCmlmIHRlc3QgIngkYWNfY3ZfaGVhZGVyX25ldGluZXRfaW5faCIg PSB4eWVzOyB0aGVuIDoNCiAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRg0KI2RlZmluZSBIQVZF X05FVElORVRfSU5fSCAxDQpfQUNFT0YNCg0KZmkNCg0KZG9uZQ0KDQoNCg0KDQoNCg0KDQoNCg0K DQogICAgIGlmIHRlc3QgJGdsX2N2X2hhdmVfaW5jbHVkZV9uZXh0ID0geWVzOyB0aGVuDQogICAg ICAgZ2xfY3ZfbmV4dF9uZXRpbmV0X2luX2g9JzwnbmV0aW5ldC9pbi5oJz4nDQogICAgIGVsc2UN CiAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5n IGFic29sdXRlIG5hbWUgb2YgPG5ldGluZXQvaW4uaD4iID4mNQ0KJGFzX2VjaG9fbiAiY2hlY2tp bmcgYWJzb2x1dGUgbmFtZSBvZiA8bmV0aW5ldC9pbi5oPi4uLiAiID4mNjsgfQ0KaWYgJHtnbF9j dl9uZXh0X25ldGluZXRfaW5faCs6fSBmYWxzZTsgdGhlbiA6DQogICRhc19lY2hvX24gIihjYWNo ZWQpICIgPiY2DQplbHNlDQoNCiAgICAgICAgICAgICBpZiB0ZXN0ICRhY19jdl9oZWFkZXJfbmV0 aW5ldF9pbl9oID0geWVzOyB0aGVuDQoNCg0KICAgICAgICAgICAgICAgY2F0IGNvbmZkZWZzLmgg LSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dA0KLyogZW5kIGNvbmZkZWZzLmguICAqLw0KI2lu Y2x1ZGUgPG5ldGluZXQvaW4uaD4NCg0KX0FDRU9GDQogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICIkaG9zdF9vcyIgaW4N CiAgICAgICAgICAgICAgICAgYWl4KikgZ2xfYWJzbmFtZV9jcHA9IiRhY19jcHAgLUMiIDs7DQog ICAgICAgICAgICAgICAgICopICAgIGdsX2Fic25hbWVfY3BwPSIkYWNfY3BwIiA7Ow0KICAgICAg ICAgICAgICAgZXNhYw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgZ2xfY3ZfbmV4dF9uZXRpbmV0X2luX2g9JyInYChldmFsICIkZ2xf YWJzbmFtZV9jcHAgY29uZnRlc3QuJGFjX2V4dCIpIDI+JjUgfA0KICAgICAgICAgICAgICAgICAg c2VkIC1uICdcIy9uZXRpbmV0L2luLmgjew0KICAgICAgICAgICAgICAgICAgICBzIy4qIlwoLiov bmV0aW5ldC9pbi5oXCkiLiojXDEjDQogICAgICAgICAgICAgICAgICAgIHMjXi9bXi9dIy8vJiMN CiAgICAgICAgICAgICAgICAgICAgcA0KICAgICAgICAgICAgICAgICAgICBxDQogICAgICAgICAg ICAgICAgICB9J2AnIicNCiAgICAgICAgICBlbHNlDQogICAgICAgICAgICAgICBnbF9jdl9uZXh0 X25ldGluZXRfaW5faD0nPCduZXRpbmV0L2luLmgnPicNCiAgICAgICAgICAgICBmaQ0KDQoNCmZp DQp7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGdsX2N2 X25leHRfbmV0aW5ldF9pbl9oIiA+JjUNCiRhc19lY2hvICIkZ2xfY3ZfbmV4dF9uZXRpbmV0X2lu X2giID4mNjsgfQ0KICAgICBmaQ0KICAgICBORVhUX05FVElORVRfSU5fSD0kZ2xfY3ZfbmV4dF9u ZXRpbmV0X2luX2gNCg0KICAgICBpZiB0ZXN0ICRnbF9jdl9oYXZlX2luY2x1ZGVfbmV4dCA9IHll cyB8fCB0ZXN0ICRnbF9jdl9oYXZlX2luY2x1ZGVfbmV4dCA9IGJ1Z2d5OyB0aGVuDQogICAgICAg IyBJTkNMVURFX05FWFRfQVNfRklSU1RfRElSRUNUSVZFPSdpbmNsdWRlX25leHQnDQogICAgICAg Z2xfbmV4dF9hc19maXJzdF9kaXJlY3RpdmU9JzwnbmV0aW5ldC9pbi5oJz4nDQogICAgIGVsc2UN CiAgICAgICAjIElOQ0xVREVfTkVYVF9BU19GSVJTVF9ESVJFQ1RJVkU9J2luY2x1ZGUnDQogICAg ICAgZ2xfbmV4dF9hc19maXJzdF9kaXJlY3RpdmU9JGdsX2N2X25leHRfbmV0aW5ldF9pbl9oDQog ICAgIGZpDQogICAgIE5FWFRfQVNfRklSU1RfRElSRUNUSVZFX05FVElORVRfSU5fSD0kZ2xfbmV4 dF9hc19maXJzdF9kaXJlY3RpdmUNCg0KDQoNCg0KICAgIGlmIHRlc3QgJGFjX2N2X2hlYWRlcl9u ZXRpbmV0X2luX2ggPSB5ZXM7IHRoZW4NCiAgICAgIEhBVkVfTkVUSU5FVF9JTl9IPTENCiAgICBl bHNlDQogICAgICBIQVZFX05FVElORVRfSU5fSD0wDQogICAgZmkNCg0KICBmaQ0KDQogICBpZiB0 ZXN0IC1uICIkTkVUSU5FVF9JTl9IIjsgdGhlbg0KICBHTF9HRU5FUkFURV9ORVRJTkVUX0lOX0hf VFJVRT0NCiAgR0xfR0VORVJBVEVfTkVUSU5FVF9JTl9IX0ZBTFNFPScjJw0KZWxzZQ0KICBHTF9H RU5FUkFURV9ORVRJTkVUX0lOX0hfVFJVRT0nIycNCiAgR0xfR0VORVJBVEVfTkVUSU5FVF9JTl9I X0ZBTFNFPQ0KZmkNCg0KDQoNCiAgIyBDb2RlIGZyb20gbW9kdWxlIG5sX2xhbmdpbmZvOg0KDQoN Cg0KDQogICAgIGlmIHRlc3QgJGFjX2N2X2Z1bmNfbmxfbGFuZ2luZm8gPSB5ZXM7IHRoZW4NCiAg ICAjIE9uIElyaXggNi41LCBZRVNFWFBSIGlzIGRlZmluZWQsIGJ1dCBubF9sYW5naW5mbyhZRVNF WFBSKSBpcyBicm9rZW4uDQogICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5F Tk99OiBjaGVja2luZyB3aGV0aGVyIFlFU0VYUFIgd29ya3MiID4mNQ0KJGFzX2VjaG9fbiAiY2hl Y2tpbmcgd2hldGhlciBZRVNFWFBSIHdvcmtzLi4uICIgPiY2OyB9DQppZiAke2dsX2N2X2Z1bmNf bmxfbGFuZ2luZm9feWVzZXhwcl93b3Jrcys6fSBmYWxzZTsgdGhlbiA6DQogICRhc19lY2hvX24g IihjYWNoZWQpICIgPiY2DQplbHNlDQogIGlmIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0geWVz OyB0aGVuIDoNCg0KICAgICAgICAgY2FzZSAiJGhvc3Rfb3MiIGluDQogICAgICAgICAgICAgICAg ICAgIyBHdWVzcyBubyBvbiBpcml4IHN5c3RlbXMuDQogICAgICAgICAgIGlyaXgqKSAgZ2xfY3Zf ZnVuY19ubF9sYW5naW5mb195ZXNleHByX3dvcmtzPSJndWVzc2luZyBubyI7Ow0KICAgICAgICAg ICAgICAgICAgICMgR3Vlc3MgeWVzIGVsc2V3aGVyZS4NCiAgICAgICAgICAgKikgICAgICBnbF9j dl9mdW5jX25sX2xhbmdpbmZvX3llc2V4cHJfd29ya3M9Imd1ZXNzaW5nIHllcyI7Ow0KICAgICAg ICAgZXNhYw0KDQplbHNlDQogIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRh Y19leHQNCi8qIGVuZCBjb25mZGVmcy5oLiAgKi8NCiNpbmNsdWRlIDxsYW5naW5mby5oPg0KDQpp bnQNCm1haW4gKCkNCnsNCnJldHVybiAhKm5sX2xhbmdpbmZvKFlFU0VYUFIpOw0KDQogIDsNCiAg cmV0dXJuIDA7DQp9DQpfQUNFT0YNCmlmIGFjX2ZuX2NfdHJ5X3J1biAiJExJTkVOTyI7IHRoZW4g Og0KICBnbF9jdl9mdW5jX25sX2xhbmdpbmZvX3llc2V4cHJfd29ya3M9eWVzDQplbHNlDQogIGds X2N2X2Z1bmNfbmxfbGFuZ2luZm9feWVzZXhwcl93b3Jrcz1ubw0KZmkNCnJtIC1mIGNvcmUgKi5j b3JlIGNvcmUuY29uZnRlc3QuKiBnbW9uLm91dCBiYi5vdXQgY29uZnRlc3QkYWNfZXhlZXh0IFwN CiAgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC5iZWFtIGNvbmZ0ZXN0LiRhY19leHQNCmZp DQoNCg0KZmkNCnsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0 OiAkZ2xfY3ZfZnVuY19ubF9sYW5naW5mb195ZXNleHByX3dvcmtzIiA+JjUNCiRhc19lY2hvICIk Z2xfY3ZfZnVuY19ubF9sYW5naW5mb195ZXNleHByX3dvcmtzIiA+JjY7IH0NCiAgICBjYXNlICRn bF9jdl9mdW5jX25sX2xhbmdpbmZvX3llc2V4cHJfd29ya3MgaW4NCiAgICAgICp5ZXMpIEZVTkNf TkxfTEFOR0lORk9fWUVTRVhQUl9XT1JLUz0xIDs7DQogICAgICAqKSAgICBGVU5DX05MX0xBTkdJ TkZPX1lFU0VYUFJfV09SS1M9MCA7Ow0KICAgIGVzYWMNCg0KY2F0ID4+Y29uZmRlZnMuaCA8PF9B Q0VPRg0KI2RlZmluZSBGVU5DX05MX0xBTkdJTkZPX1lFU0VYUFJfV09SS1MgJEZVTkNfTkxfTEFO R0lORk9fWUVTRVhQUl9XT1JLUw0KX0FDRU9GDQoNCiAgICBpZiB0ZXN0ICRIQVZFX0xBTkdJTkZP X0NPREVTRVQgPSAxICYmIHRlc3QgJEhBVkVfTEFOR0lORk9fRVJBID0gMSBcDQogICAgICAgICYm IHRlc3QgJEZVTkNfTkxfTEFOR0lORk9fWUVTRVhQUl9XT1JLUyA9IDE7IHRoZW4NCiAgICAgIDoN CiAgICBlbHNlDQogICAgICBSRVBMQUNFX05MX0xBTkdJTkZPPTENCg0KJGFzX2VjaG8gIiNkZWZp bmUgUkVQTEFDRV9OTF9MQU5HSU5GTyAxIiA+PmNvbmZkZWZzLmgNCg0KDQoNCg0KDQoNCg0KDQoN CiAgZ2xfTElCT0JKUz0iJGdsX0xJQk9CSlMgbmxfbGFuZ2luZm8uJGFjX29iamV4dCINCg0KICAg IGZpDQogIGVsc2UNCiAgICBIQVZFX05MX0xBTkdJTkZPPTANCg0KDQoNCg0KDQoNCg0KDQogIGds X0xJQk9CSlM9IiRnbF9MSUJPQkpTIG5sX2xhbmdpbmZvLiRhY19vYmpleHQiDQoNCiAgZmkNCg0K DQoNCg0KICBHTlVMSUJfTkxfTEFOR0lORk89MQ0KDQoNCg0KJGFzX2VjaG8gIiNkZWZpbmUgR05V TElCX1RFU1RfTkxfTEFOR0lORk8gMSIgPj5jb25mZGVmcy5oDQoNCg0KDQogICMgQ29kZSBmcm9t IG1vZHVsZSBub2NyYXNoOg0KICAjIENvZGUgZnJvbSBtb2R1bGUgbnByb2M6DQoNCg0KDQoNCiAg Zm9yIGFjX2hlYWRlciBpbiBzeXMvcHN0YXQuaCBzeXMvc3lzbXAuaCBzeXMvcGFyYW0uaA0KZG8g Og0KICBhc19hY19IZWFkZXI9YCRhc19lY2hvICJhY19jdl9oZWFkZXJfJGFjX2hlYWRlciIgfCAk YXNfdHJfc2hgDQphY19mbl9jX2NoZWNrX2hlYWRlcl9jb21waWxlICIkTElORU5PIiAiJGFjX2hl YWRlciIgIiRhc19hY19IZWFkZXIiICIkYWNfaW5jbHVkZXNfZGVmYXVsdA0KIg0KaWYgZXZhbCB0 ZXN0IFwieFwkIiRhc19hY19IZWFkZXIiXCIgPSB4InllcyI7IHRoZW4gOg0KICBjYXQgPj5jb25m ZGVmcy5oIDw8X0FDRU9GDQojZGVmaW5lIGAkYXNfZWNobyAiSEFWRV8kYWNfaGVhZGVyIiB8ICRh c190cl9jcHBgIDENCl9BQ0VPRg0KDQpmaQ0KDQpkb25lDQoNCiAgICBmb3IgYWNfaGVhZGVyIGlu IHN5cy9zeXNjdGwuaA0KZG8gOg0KICBhY19mbl9jX2NoZWNrX2hlYWRlcl9jb21waWxlICIkTElO RU5PIiAic3lzL3N5c2N0bC5oIiAiYWNfY3ZfaGVhZGVyX3N5c19zeXNjdGxfaCIgIiRhY19pbmNs dWRlc19kZWZhdWx0DQogICAgICNpZiBIQVZFX1NZU19QQVJBTV9IDQogICAgICMgaW5jbHVkZSA8 c3lzL3BhcmFtLmg+DQogICAgICNlbmRpZg0KDQoiDQppZiB0ZXN0ICJ4JGFjX2N2X2hlYWRlcl9z eXNfc3lzY3RsX2giID0geHllczsgdGhlbiA6DQogIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YN CiNkZWZpbmUgSEFWRV9TWVNfU1lTQ1RMX0ggMQ0KX0FDRU9GDQoNCmZpDQoNCmRvbmUNCg0KDQog IGZvciBhY19mdW5jIGluIHNjaGVkX2dldGFmZmluaXR5IHNjaGVkX2dldGFmZmluaXR5X25wIFwN CiAgICAgICAgICAgICAgICAgIHBzdGF0X2dldGR5bmFtaWMgc3lzbXAgc3lzY3RsDQpkbyA6DQog IGFzX2FjX3Zhcj1gJGFzX2VjaG8gImFjX2N2X2Z1bmNfJGFjX2Z1bmMiIHwgJGFzX3RyX3NoYA0K YWNfZm5fY19jaGVja19mdW5jICIkTElORU5PIiAiJGFjX2Z1bmMiICIkYXNfYWNfdmFyIg0KaWYg ZXZhbCB0ZXN0IFwieFwkIiRhc19hY192YXIiXCIgPSB4InllcyI7IHRoZW4gOg0KICBjYXQgPj5j b25mZGVmcy5oIDw8X0FDRU9GDQojZGVmaW5lIGAkYXNfZWNobyAiSEFWRV8kYWNfZnVuYyIgfCAk YXNfdHJfY3BwYCAxDQpfQUNFT0YNCg0KZmkNCmRvbmUNCg0KDQogICAgICAgICAgICAgICAgaWYg dGVzdCAkYWNfY3ZfZnVuY19zY2hlZF9nZXRhZmZpbml0eSA9IHllczsgdGhlbg0KICAgIHsgJGFz X2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIGdsaWJjIGNv bXBhdGlibGUgc2NoZWRfZ2V0YWZmaW5pdHkiID4mNQ0KJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9y IGdsaWJjIGNvbXBhdGlibGUgc2NoZWRfZ2V0YWZmaW5pdHkuLi4gIiA+JjY7IH0NCmlmICR7Z2xf Y3ZfZnVuY19zY2hlZF9nZXRhZmZpbml0eTMrOn0gZmFsc2U7IHRoZW4gOg0KICAkYXNfZWNob19u ICIoY2FjaGVkKSAiID4mNg0KZWxzZQ0KICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25m dGVzdC4kYWNfZXh0DQovKiBlbmQgY29uZmRlZnMuaC4gICovDQojaW5jbHVkZSA8c2NoZWQuaD4N CmludA0KbWFpbiAoKQ0Kew0Kc2NoZWRfZ2V0YWZmaW5pdHkgKDAsIDAsIChjcHVfc2V0X3QgKikg MCk7DQogIDsNCiAgcmV0dXJuIDA7DQp9DQpfQUNFT0YNCmlmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUg IiRMSU5FTk8iOyB0aGVuIDoNCiAgZ2xfY3ZfZnVuY19zY2hlZF9nZXRhZmZpbml0eTM9eWVzDQpl bHNlDQogIGdsX2N2X2Z1bmNfc2NoZWRfZ2V0YWZmaW5pdHkzPW5vDQpmaQ0Kcm0gLWYgY29yZSBj b25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0DQoNCmZpDQp7 ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGdsX2N2X2Z1 bmNfc2NoZWRfZ2V0YWZmaW5pdHkzIiA+JjUNCiRhc19lY2hvICIkZ2xfY3ZfZnVuY19zY2hlZF9n ZXRhZmZpbml0eTMiID4mNjsgfQ0KICAgIGlmIHRlc3QgJGdsX2N2X2Z1bmNfc2NoZWRfZ2V0YWZm aW5pdHkzID0geWVzOyB0aGVuDQoNCiRhc19lY2hvICIjZGVmaW5lIEhBVkVfU0NIRURfR0VUQUZG SU5JVFlfTElLRV9HTElCQyAxIiA+PmNvbmZkZWZzLmgNCg0KICAgIGZpDQogIGZpDQoNCg0KICAj IENvZGUgZnJvbSBtb2R1bGUgb2JzdGFjazoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCnsgJGFz X2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIG9ic3RhY2tz IiA+JjUNCiRhc19lY2hvX24gImNoZWNraW5nIGZvciBvYnN0YWNrcy4uLiAiID4mNjsgfQ0KaWYg JHthY19jdl9mdW5jX29ic3RhY2srOn0gZmFsc2U7IHRoZW4gOg0KICAkYXNfZWNob19uICIoY2Fj aGVkKSAiID4mNg0KZWxzZQ0KICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4k YWNfZXh0DQovKiBlbmQgY29uZmRlZnMuaC4gICovDQokYWNfaW5jbHVkZXNfZGVmYXVsdA0KCQkg ICAgICAjaW5jbHVkZSAib2JzdGFjay5oIg0KaW50DQptYWluICgpDQp7DQpzdHJ1Y3Qgb2JzdGFj ayBtZW07DQoJCSAgICAgICAjZGVmaW5lIG9ic3RhY2tfY2h1bmtfYWxsb2MgbWFsbG9jDQoJCSAg ICAgICAjZGVmaW5lIG9ic3RhY2tfY2h1bmtfZnJlZSBmcmVlDQoJCSAgICAgICBvYnN0YWNrX2lu aXQgKCZtZW0pOw0KCQkgICAgICAgb2JzdGFja19mcmVlICgmbWVtLCAwKTsNCiAgOw0KICByZXR1 cm4gMDsNCn0NCl9BQ0VPRg0KaWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOg0K ICBhY19jdl9mdW5jX29ic3RhY2s9eWVzDQplbHNlDQogIGFjX2N2X2Z1bmNfb2JzdGFjaz1ubw0K ZmkNCnJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXA0KICAgIGNv bmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0DQpmaQ0KeyAkYXNfZWNobyAiJGFzX21l OiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9mdW5jX29ic3RhY2siID4mNQ0K JGFzX2VjaG8gIiRhY19jdl9mdW5jX29ic3RhY2siID4mNjsgfQ0KaWYgdGVzdCAkYWNfY3ZfZnVu Y19vYnN0YWNrID0geWVzOyB0aGVuDQoNCiRhc19lY2hvICIjZGVmaW5lIEhBVkVfT0JTVEFDSyAx IiA+PmNvbmZkZWZzLmgNCg0KZWxzZQ0KDQoNCg0KDQoNCg0KDQoNCiAgZ2xfTElCT0JKUz0iJGds X0xJQk9CSlMgb2JzdGFjay4kYWNfb2JqZXh0Ig0KDQpmaQ0KDQogICAgIyBDb2RlIGZyb20gbW9k dWxlIG9wZW46DQoNCg0KICBjYXNlICIkaG9zdF9vcyIgaW4NCiAgICBtaW5ndyogfCBwdyopDQoN Cg0KICBSRVBMQUNFX09QRU49MQ0KDQoNCg0KDQoNCg0KDQoNCiAgZ2xfTElCT0JKUz0iJGdsX0xJ Qk9CSlMgb3Blbi4kYWNfb2JqZXh0Ig0KDQoNCg0KDQogIDoNCg0KDQogICAgICA7Ow0KICAgICop DQoNCiAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tp bmcgd2hldGhlciBvcGVuIHJlY29nbml6ZXMgYSB0cmFpbGluZyBzbGFzaCIgPiY1DQokYXNfZWNo b19uICJjaGVja2luZyB3aGV0aGVyIG9wZW4gcmVjb2duaXplcyBhIHRyYWlsaW5nIHNsYXNoLi4u ICIgPiY2OyB9DQppZiAke2dsX2N2X2Z1bmNfb3Blbl9zbGFzaCs6fSBmYWxzZTsgdGhlbiA6DQog ICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2DQplbHNlDQogICMgQXNzdW1lIHRoYXQgaWYgd2Ug aGF2ZSBsc3RhdCwgd2UgY2FuIGFsc28gY2hlY2sgc3ltbGlua3MuDQogICAgICAgICAgaWYgdGVz dCAkYWNfY3ZfZnVuY19sc3RhdCA9IHllczsgdGhlbg0KICAgICAgICAgICAgdG91Y2ggY29uZnRl c3QudG1wDQogICAgICAgICAgICBsbiAtcyBjb25mdGVzdC50bXAgY29uZnRlc3QubG5rDQogICAg ICAgICAgZmkNCiAgICAgICAgICBpZiB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IHllczsgdGhl biA6DQoNCiAgICAgICAgICAgICBjYXNlICIkaG9zdF9vcyIgaW4NCiAgICAgICAgICAgICAgIGZy ZWVic2QqIHwgYWl4KiB8IGhwdXgqIHwgc29sYXJpczIuWzAtOV0gfCBzb2xhcmlzMi5bMC05XS4q KQ0KICAgICAgICAgICAgICAgICBnbF9jdl9mdW5jX29wZW5fc2xhc2g9Imd1ZXNzaW5nIG5vIiA7 Ow0KICAgICAgICAgICAgICAgKikNCiAgICAgICAgICAgICAgICAgZ2xfY3ZfZnVuY19vcGVuX3Ns YXNoPSJndWVzc2luZyB5ZXMiIDs7DQogICAgICAgICAgICAgZXNhYw0KDQplbHNlDQogIGNhdCBj b25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQNCi8qIGVuZCBjb25mZGVmcy5o LiAgKi8NCg0KI2luY2x1ZGUgPGZjbnRsLmg+DQojaWYgSEFWRV9VTklTVERfSA0KIyBpbmNsdWRl IDx1bmlzdGQuaD4NCiNlbmRpZg0KaW50IG1haW4gKCkNCnsNCiAgaW50IHJlc3VsdCA9IDA7DQoj aWYgSEFWRV9MU1RBVA0KICBpZiAob3BlbiAoImNvbmZ0ZXN0Lmxuay8iLCBPX1JET05MWSkgIT0g LTEpDQogICAgcmVzdWx0IHw9IDE7DQojZW5kaWYNCiAgaWYgKG9wZW4gKCJjb25mdGVzdC5zbC8i LCBPX0NSRUFULCAwNjAwKSA+PSAwKQ0KICAgIHJlc3VsdCB8PSAyOw0KICByZXR1cm4gcmVzdWx0 Ow0KfQ0KX0FDRU9GDQppZiBhY19mbl9jX3RyeV9ydW4gIiRMSU5FTk8iOyB0aGVuIDoNCiAgZ2xf Y3ZfZnVuY19vcGVuX3NsYXNoPXllcw0KZWxzZQ0KICBnbF9jdl9mdW5jX29wZW5fc2xhc2g9bm8N CmZpDQpybSAtZiBjb3JlICouY29yZSBjb3JlLmNvbmZ0ZXN0LiogZ21vbi5vdXQgYmIub3V0IGNv bmZ0ZXN0JGFjX2V4ZWV4dCBcDQogIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuYmVhbSBj b25mdGVzdC4kYWNfZXh0DQpmaQ0KDQogICAgICAgICAgcm0gLWYgY29uZnRlc3Quc2wgY29uZnRl c3QudG1wIGNvbmZ0ZXN0Lmxuaw0KDQpmaQ0KeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5v LSRMSU5FTk99OiByZXN1bHQ6ICRnbF9jdl9mdW5jX29wZW5fc2xhc2giID4mNQ0KJGFzX2VjaG8g IiRnbF9jdl9mdW5jX29wZW5fc2xhc2giID4mNjsgfQ0KICAgICAgY2FzZSAiJGdsX2N2X2Z1bmNf b3Blbl9zbGFzaCIgaW4NCiAgICAgICAgKm5vKQ0KDQokYXNfZWNobyAiI2RlZmluZSBPUEVOX1RS QUlMSU5HX1NMQVNIX0JVRyAxIiA+PmNvbmZkZWZzLmgNCg0KDQoNCiAgUkVQTEFDRV9PUEVOPTEN Cg0KDQoNCg0KDQoNCg0KDQogIGdsX0xJQk9CSlM9IiRnbF9MSUJPQkpTIG9wZW4uJGFjX29iamV4 dCINCg0KDQoNCg0KICA6DQoNCg0KICAgICAgICAgIDs7DQogICAgICBlc2FjDQogICAgICA7Ow0K ICBlc2FjDQoNCg0KDQoNCiAgR05VTElCX09QRU49MQ0KDQoNCg0KJGFzX2VjaG8gIiNkZWZpbmUg R05VTElCX1RFU1RfT1BFTiAxIiA+PmNvbmZkZWZzLmgNCg0KDQoNCiAgIyBDb2RlIGZyb20gbW9k dWxlIG9wZW5hdDoNCg0KDQogIEdOVUxJQl9PUEVOQVQ9MQ0KDQoNCiAgR05VTElCX0ZDSE1PREFU PTENCiAgR05VTElCX0ZTVEFUQVQ9MQ0KICBHTlVMSUJfTUtESVJBVD0xDQoNCg0KICBHTlVMSUJf RkNIT1dOQVQ9MQ0KICBHTlVMSUJfVU5MSU5LQVQ9MQ0KDQoNCg0KDQoNCg0KDQoNCg0KICBnbF9M SUJPQkpTPSIkZ2xfTElCT0JKUyBvcGVuYXQtcHJvYy4kYWNfb2JqZXh0Ig0KDQoNCg0KDQoNCg0K DQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoN Cg0KDQoNCg0KICBmb3IgYWNfZnVuYyBpbiBmY2htb2RhdCBmc3RhdGF0IG1rZGlyYXQgb3BlbmF0 IHVubGlua2F0DQpkbyA6DQogIGFzX2FjX3Zhcj1gJGFzX2VjaG8gImFjX2N2X2Z1bmNfJGFjX2Z1 bmMiIHwgJGFzX3RyX3NoYA0KYWNfZm5fY19jaGVja19mdW5jICIkTElORU5PIiAiJGFjX2Z1bmMi ICIkYXNfYWNfdmFyIg0KaWYgZXZhbCB0ZXN0IFwieFwkIiRhc19hY192YXIiXCIgPSB4InllcyI7 IHRoZW4gOg0KICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GDQojZGVmaW5lIGAkYXNfZWNobyAi SEFWRV8kYWNfZnVuYyIgfCAkYXNfdHJfY3BwYCAxDQpfQUNFT0YNCg0KZWxzZQ0KDQogICAgZ2xf TElCT0JKUz0iJGdsX0xJQk9CSlMgJGFjX2Z1bmMuJGFjX29iamV4dCINCg0KZmkNCmRvbmUNCg0K DQoNCg0KICBjYXNlICRhY19jdl9mdW5jX29wZW5hdCskYWNfY3ZfZnVuY19sc3RhdF9kZXJlZmVy ZW5jZXNfc2xhc2hlZF9zeW1saW5rIGluDQogIHllcyt5ZXMpDQogICAgIyBHTlUvSHVyZCBoYXMg dW5saW5rYXQsIGJ1dCBpdCBoYXMgdGhlIHNhbWUgYnVnIGFzIHVubGluay4NCiAgICBpZiB0ZXN0 ICRSRVBMQUNFX1VOTElOSyA9IDE7IHRoZW4NCg0KDQoNCg0KDQoNCg0KDQogIGdsX0xJQk9CSlM9 IiRnbF9MSUJPQkpTIHVubGlua2F0LiRhY19vYmpleHQiDQoNCiAgICAgIFJFUExBQ0VfVU5MSU5L QVQ9MQ0KICAgIGZpIDs7DQogIHllcysqKQ0KICAgICMgU29sYXJpcyA5IGhhcyAqYXQgZnVuY3Rp b25zLCBidXQgdW5pZm9ybWx5IG1pc2hhbmRsZXMgdHJhaWxpbmcNCiAgICAjIHNsYXNoIGluIGFs bCBvZiB0aGVtLg0KDQoNCg0KDQoNCg0KDQoNCiAgZ2xfTElCT0JKUz0iJGdsX0xJQk9CSlMgb3Bl bmF0LiRhY19vYmpleHQiDQoNCiAgICBSRVBMQUNFX09QRU5BVD0xDQoNCg0KDQoNCg0KDQoNCg0K ICBnbF9MSUJPQkpTPSIkZ2xfTElCT0JKUyBmc3RhdGF0LiRhY19vYmpleHQiDQoNCiAgICBSRVBM QUNFX0ZTVEFUQVQ9MQ0KDQoNCg0KDQoNCg0KDQoNCiAgZ2xfTElCT0JKUz0iJGdsX0xJQk9CSlMg dW5saW5rYXQuJGFjX29iamV4dCINCg0KICAgIFJFUExBQ0VfVU5MSU5LQVQ9MQ0KICAgIDs7DQog ICopDQogICAgSEFWRV9PUEVOQVQ9MA0KICAgIEhBVkVfVU5MSU5LQVQ9MCAjIE5vIGtub3duIHN5 c3RlbSB3aXRoIHVubGlua2F0IGJ1dCBub3Qgb3BlbmF0DQogICAgSEFWRV9GU1RBVEFUPTAgIyBO byBrbm93biBzeXN0ZW0gd2l0aCBmc3RhdGF0IGJ1dCBub3Qgb3BlbmF0DQoNCg0KDQogIDoNCjs7 DQogIGVzYWMNCiAgaWYgdGVzdCAkYWNfY3ZfZnVuY19mY2htb2RhdCAhPSB5ZXM7IHRoZW4NCiAg ICBIQVZFX0ZDSE1PREFUPTANCiAgZmkNCiAgaWYgdGVzdCAkYWNfY3ZfZnVuY19ta2RpcmF0ICE9 IHllczsgdGhlbg0KICAgIEhBVkVfTUtESVJBVD0wDQogIGZpDQoNCg0KDQogIGFjX2ZuX2NfY2hl Y2tfZnVuYyAiJExJTkVOTyIgImZjaG93bmF0IiAiYWNfY3ZfZnVuY19mY2hvd25hdCINCmlmIHRl c3QgIngkYWNfY3ZfZnVuY19mY2hvd25hdCIgPSB4eWVzOyB0aGVuIDoNCg0KDQoNCiAgeyAkYXNf ZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIGZjaG93 bmF0IHdvcmtzIHdpdGggQVRfU1lNTElOS19OT0ZPTExPVyIgPiY1DQokYXNfZWNob19uICJjaGVj a2luZyB3aGV0aGVyIGZjaG93bmF0IHdvcmtzIHdpdGggQVRfU1lNTElOS19OT0ZPTExPVy4uLiAi ID4mNjsgfQ0KaWYgJHtnbF9jdl9mdW5jX2ZjaG93bmF0X25vZm9sbG93X3dvcmtzKzp9IGZhbHNl OyB0aGVuIDoNCiAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYNCmVsc2UNCg0KICAgICBnbF9k YW5nbGU9Y29uZnRlc3QuZGFuZ2xlDQogICAgICMgUmVtb3ZlIGFueSByZW1uYW50cyBvZiBhIHBy ZXZpb3VzIHRlc3QuDQogICAgIHJtIC1mICRnbF9kYW5nbGUNCiAgICAgIyBBcnJhbmdlIGZvciBk ZWxldGlvbiBvZiB0aGUgdGVtcG9yYXJ5IGZpbGUgdGhpcyB0ZXN0IGNyZWF0ZXMuDQogICAgIGFj X2NsZWFuX2ZpbGVzPSIkYWNfY2xlYW5fZmlsZXMgJGdsX2RhbmdsZSINCiAgICAgbG4gLXMgY29u ZnRlc3Qubm8tc3VjaCAkZ2xfZGFuZ2xlDQogICAgIGlmIHRlc3QgIiRjcm9zc19jb21waWxpbmci ID0geWVzOyB0aGVuIDoNCiAgZ2xfY3ZfZnVuY19mY2hvd25hdF9ub2ZvbGxvd193b3Jrcz1ubw0K ZWxzZQ0KICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0DQovKiBl bmQgY29uZmRlZnMuaC4gICovDQoNCiNpbmNsdWRlIDxmY250bC5oPg0KI2luY2x1ZGUgPHVuaXN0 ZC5oPg0KI2luY2x1ZGUgPHN0ZGxpYi5oPg0KI2luY2x1ZGUgPGVycm5vLmg+DQojaW5jbHVkZSA8 c3lzL3R5cGVzLmg+DQppbnQNCm1haW4gKCkNCnsNCiAgcmV0dXJuIChmY2hvd25hdCAoQVRfRkRD V0QsICIkZ2xfZGFuZ2xlIiwgLTEsIGdldGdpZCAoKSwNCiAgICAgICAgICAgICAgICAgICAgQVRf U1lNTElOS19OT0ZPTExPVykgIT0gMA0KICAgICAgICAgICYmIGVycm5vID09IEVOT0VOVCk7DQp9 DQoNCl9BQ0VPRg0KaWYgYWNfZm5fY190cnlfcnVuICIkTElORU5PIjsgdGhlbiA6DQogIGdsX2N2 X2Z1bmNfZmNob3duYXRfbm9mb2xsb3dfd29ya3M9eWVzDQplbHNlDQogIGdsX2N2X2Z1bmNfZmNo b3duYXRfbm9mb2xsb3dfd29ya3M9bm8NCmZpDQpybSAtZiBjb3JlICouY29yZSBjb3JlLmNvbmZ0 ZXN0LiogZ21vbi5vdXQgYmIub3V0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCBcDQogIGNvbmZ0ZXN0LiRh Y19vYmpleHQgY29uZnRlc3QuYmVhbSBjb25mdGVzdC4kYWNfZXh0DQpmaQ0KDQoNCmZpDQp7ICRh c19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGdsX2N2X2Z1bmNf ZmNob3duYXRfbm9mb2xsb3dfd29ya3MiID4mNQ0KJGFzX2VjaG8gIiRnbF9jdl9mdW5jX2ZjaG93 bmF0X25vZm9sbG93X3dvcmtzIiA+JjY7IH0NCiAgaWYgdGVzdCAkZ2xfY3ZfZnVuY19mY2hvd25h dF9ub2ZvbGxvd193b3JrcyA9IG5vOyB0aGVuIDoNCiAgUkVQTEFDRV9GQ0hPV05BVD0xDQoNCiRh c19lY2hvICIjZGVmaW5lIEZDSE9XTkFUX05PRk9MTE9XX0JVRyAxIiA+PmNvbmZkZWZzLmgNCg0K DQpmaQ0KDQoNCg0KDQogIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTog Y2hlY2tpbmcgd2hldGhlciBmY2hvd25hdCB3b3JrcyB3aXRoIGFuIGVtcHR5IGZpbGUgbmFtZSIg PiY1DQokYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIGZjaG93bmF0IHdvcmtzIHdpdGggYW4g ZW1wdHkgZmlsZSBuYW1lLi4uICIgPiY2OyB9DQppZiAke2dsX2N2X2Z1bmNfZmNob3duYXRfZW1w dHlfZmlsZW5hbWVfd29ya3MrOn0gZmFsc2U7IHRoZW4gOg0KICAkYXNfZWNob19uICIoY2FjaGVk KSAiID4mNg0KZWxzZQ0KICBpZiB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IHllczsgdGhlbiA6 DQogIGdsX2N2X2Z1bmNfZmNob3duYXRfZW1wdHlfZmlsZW5hbWVfd29ya3M9Imd1ZXNzaW5nIG5v Ig0KZWxzZQ0KICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0DQov KiBlbmQgY29uZmRlZnMuaC4gICovDQojaW5jbHVkZSA8dW5pc3RkLmg+DQogICAgICAgICAgICAj aW5jbHVkZSA8ZmNudGwuaD4NCg0KaW50DQptYWluICgpDQp7DQppbnQgZmQ7DQogICAgICAgICAg ICBpbnQgcmV0Ow0KICAgICAgICAgICAgaWYgKG1rZGlyICgiY29uZnRlc3RkaXIiLCAwNzAwKSA8 IDApDQogICAgICAgICAgICAgIHJldHVybiAyOw0KICAgICAgICAgICAgZmQgPSBvcGVuICgiY29u ZnRlc3RkaXIiLCBPX1JET05MWSk7DQogICAgICAgICAgICBpZiAoZmQgPCAwKQ0KICAgICAgICAg ICAgICByZXR1cm4gMzsNCiAgICAgICAgICAgIHJldCA9IGZjaG93bmF0IChmZCwgIiIsIC0xLCAt MSwgMCk7DQogICAgICAgICAgICBjbG9zZSAoZmQpOw0KICAgICAgICAgICAgcm1kaXIgKCJjb25m dGVzdGRpciIpOw0KICAgICAgICAgICAgcmV0dXJuIHJldCA9PSAwOw0KDQogIDsNCiAgcmV0dXJu IDA7DQp9DQpfQUNFT0YNCmlmIGFjX2ZuX2NfdHJ5X3J1biAiJExJTkVOTyI7IHRoZW4gOg0KICBn bF9jdl9mdW5jX2ZjaG93bmF0X2VtcHR5X2ZpbGVuYW1lX3dvcmtzPXllcw0KZWxzZQ0KICBnbF9j dl9mdW5jX2ZjaG93bmF0X2VtcHR5X2ZpbGVuYW1lX3dvcmtzPW5vDQpmaQ0Kcm0gLWYgY29yZSAq LmNvcmUgY29yZS5jb25mdGVzdC4qIGdtb24ub3V0IGJiLm91dCBjb25mdGVzdCRhY19leGVleHQg XA0KICBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LmJlYW0gY29uZnRlc3QuJGFjX2V4dA0K ZmkNCg0KDQpmaQ0KeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1 bHQ6ICRnbF9jdl9mdW5jX2ZjaG93bmF0X2VtcHR5X2ZpbGVuYW1lX3dvcmtzIiA+JjUNCiRhc19l Y2hvICIkZ2xfY3ZfZnVuY19mY2hvd25hdF9lbXB0eV9maWxlbmFtZV93b3JrcyIgPiY2OyB9DQog IGlmIHRlc3QgIiRnbF9jdl9mdW5jX2ZjaG93bmF0X2VtcHR5X2ZpbGVuYW1lX3dvcmtzIiAhPSB5 ZXM7IHRoZW4gOg0KICBSRVBMQUNFX0ZDSE9XTkFUPTENCg0KJGFzX2VjaG8gIiNkZWZpbmUgRkNI T1dOQVRfRU1QVFlfRklMRU5BTUVfQlVHIDEiID4+Y29uZmRlZnMuaA0KDQoNCmZpDQoNCiAgICAg aWYgdGVzdCAkUkVQTEFDRV9DSE9XTiA9IDE7IHRoZW4NCiAgICAgICBSRVBMQUNFX0ZDSE9XTkFU PTENCiAgICAgZmkNCmVsc2UNCiAgSEFWRV9GQ0hPV05BVD0wDQpmaQ0KDQogIGlmIHRlc3QgJEhB VkVfRkNIT1dOQVQgPSAwIHx8IHRlc3QgJFJFUExBQ0VfRkNIT1dOQVQgPSAxOyB0aGVuDQoNCg0K DQoNCg0KDQoNCg0KICBnbF9MSUJPQkpTPSIkZ2xfTElCT0JKUyBmY2hvd25hdC4kYWNfb2JqZXh0 Ig0KDQogIGZpDQoNCg0KICAjIENvZGUgZnJvbSBtb2R1bGUgb3BlbmF0LWRpZToNCiAgIyBDb2Rl IGZyb20gbW9kdWxlIG9wZW5hdC1zYWZlcjoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KICBnbF9MSUJP QkpTPSIkZ2xfTElCT0JKUyBvcGVuYXQtc2FmZXIuJGFjX29iamV4dCINCg0KDQoNCg0KY2F0ID4+ Y29uZmRlZnMuaCA8PF9BQ0VPRg0KI2RlZmluZSBHTlVMSUJfT1BFTkFUX1NBRkVSIDENCl9BQ0VP Rg0KDQoNCiAgIyBDb2RlIGZyb20gbW9kdWxlIHBhcnNlLWRhdGV0aW1lOg0KDQoNCg0KDQoNCg0K ICBhY19mbl9jX2NoZWNrX21lbWJlciAiJExJTkVOTyIgInN0cnVjdCB0bSIgInRtX3pvbmUiICJh Y19jdl9tZW1iZXJfc3RydWN0X3RtX3RtX3pvbmUiICIjaW5jbHVkZSA8c3lzL3R5cGVzLmg+DQoj aW5jbHVkZSA8JGFjX2N2X3N0cnVjdF90bT4NCg0KIg0KaWYgdGVzdCAieCRhY19jdl9tZW1iZXJf c3RydWN0X3RtX3RtX3pvbmUiID0geHllczsgdGhlbiA6DQoNCmNhdCA+PmNvbmZkZWZzLmggPDxf QUNFT0YNCiNkZWZpbmUgSEFWRV9TVFJVQ1RfVE1fVE1fWk9ORSAxDQpfQUNFT0YNCg0KDQpmaQ0K DQppZiB0ZXN0ICIkYWNfY3ZfbWVtYmVyX3N0cnVjdF90bV90bV96b25lIiA9IHllczsgdGhlbg0K DQokYXNfZWNobyAiI2RlZmluZSBIQVZFX1RNX1pPTkUgMSIgPj5jb25mZGVmcy5oDQoNCmVsc2UN CiAgYWNfZm5fY19jaGVja19kZWNsICIkTElORU5PIiAidHpuYW1lIiAiYWNfY3ZfaGF2ZV9kZWNs X3R6bmFtZSIgIiNpbmNsdWRlIDx0aW1lLmg+DQoiDQppZiB0ZXN0ICJ4JGFjX2N2X2hhdmVfZGVj bF90em5hbWUiID0geHllczsgdGhlbiA6DQogIGFjX2hhdmVfZGVjbD0xDQplbHNlDQogIGFjX2hh dmVfZGVjbD0wDQpmaQ0KDQpjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GDQojZGVmaW5lIEhBVkVf REVDTF9UWk5BTUUgJGFjX2hhdmVfZGVjbA0KX0FDRU9GDQoNCiAgeyAkYXNfZWNobyAiJGFzX21l OiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgdHpuYW1lIiA+JjUNCiRhc19lY2hv X24gImNoZWNraW5nIGZvciB0em5hbWUuLi4gIiA+JjY7IH0NCmlmICR7YWNfY3ZfdmFyX3R6bmFt ZSs6fSBmYWxzZTsgdGhlbiA6DQogICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2DQplbHNlDQog IGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQNCi8qIGVuZCBjb25m ZGVmcy5oLiAgKi8NCiNpbmNsdWRlIDx0aW1lLmg+DQojaWYgIUhBVkVfREVDTF9UWk5BTUUNCmV4 dGVybiBjaGFyICp0em5hbWVbXTsNCiNlbmRpZg0KDQppbnQNCm1haW4gKCkNCnsNCnJldHVybiB0 em5hbWVbMF1bMF07DQogIDsNCiAgcmV0dXJuIDA7DQp9DQpfQUNFT0YNCmlmIGFjX2ZuX2NfdHJ5 X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoNCiAgYWNfY3ZfdmFyX3R6bmFtZT15ZXMNCmVsc2UNCiAg YWNfY3ZfdmFyX3R6bmFtZT1ubw0KZmkNCnJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0 LiRhY19vYmpleHQgXA0KICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0DQpm aQ0KeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19j dl92YXJfdHpuYW1lIiA+JjUNCiRhc19lY2hvICIkYWNfY3ZfdmFyX3R6bmFtZSIgPiY2OyB9DQog IGlmIHRlc3QgJGFjX2N2X3Zhcl90em5hbWUgPSB5ZXM7IHRoZW4NCg0KJGFzX2VjaG8gIiNkZWZp bmUgSEFWRV9UWk5BTUUgMSIgPj5jb25mZGVmcy5oDQoNCiAgZmkNCmZpDQoNCg0KDQogIGNhdCBj b25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQNCi8qIGVuZCBjb25mZGVmcy5o LiAgKi8NCg0KI2luY2x1ZGUgPHRpbWUuaD4gLyogZm9yIHRpbWVfdCAqLw0KI2luY2x1ZGUgPGxp bWl0cy5oPiAvKiBmb3IgQ0hBUl9CSVQsIExPTkdfTUlOLCBMT05HX01BWCAqLw0KI2RlZmluZSBU WVBFX01JTklNVU0odCkgXA0KICAoKHQpICgodCkgMCA8ICh0KSAtMSA/ICh0KSAwIDogfiBUWVBF X01BWElNVU0gKHQpKSkNCiNkZWZpbmUgVFlQRV9NQVhJTVVNKHQpIFwNCiAgKCh0KSAoKHQpIDAg PCAodCkgLTEgXA0KICAgICAgICA/ICh0KSAtMSBcDQogICAgICAgIDogKCgoKHQpIDEgPDwgKHNp emVvZiAodCkgKiBDSEFSX0JJVCAtIDIpKSAtIDEpICogMiArIDEpKSkNCnR5cGVkZWYgaW50IHZl cmlmeV9taW5bMiAqIChMT05HX01JTiA8PSBUWVBFX01JTklNVU0gKHRpbWVfdCkpIC0gMV07DQp0 eXBlZGVmIGludCB2ZXJpZnlfbWF4WzIgKiAoVFlQRV9NQVhJTVVNICh0aW1lX3QpIDw9IExPTkdf TUFYKSAtIDFdOw0KDQpfQUNFT0YNCmlmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0 aGVuIDoNCg0KJGFzX2VjaG8gIiNkZWZpbmUgVElNRV9UX0ZJVFNfSU5fTE9OR19JTlQgMSIgPj5j b25mZGVmcy5oDQoNCg0KZmkNCnJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19v YmpleHQgY29uZnRlc3QuJGFjX2V4dA0KDQogICMgQ29kZSBmcm9tIG1vZHVsZSBwYXRobWF4Og0K DQoNCg0KDQogICMgQ29kZSBmcm9tIG1vZHVsZSBwZXJsOg0KDQogICAgeyAkYXNfZWNobyAiJGFz X21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgcGVybDUuMDA1IG9yIG5ld2Vy IiA+JjUNCiRhc19lY2hvX24gImNoZWNraW5nIGZvciBwZXJsNS4wMDUgb3IgbmV3ZXIuLi4gIiA+ JjY7IH0NCiAgaWYgdGVzdCAiJHtQRVJMK3NldH0iID0gc2V0OyB0aGVuDQogICAgIyBgUEVSTCcg aXMgc2V0IGluIHRoZSB1c2VyJ3MgZW52aXJvbm1lbnQuDQogICAgY2FuZGlkYXRlX3BlcmxfbmFt ZXM9IiRQRVJMIg0KICAgIHBlcmxfc3BlY2lmaWVkPXllcw0KICBlbHNlDQogICAgY2FuZGlkYXRl X3BlcmxfbmFtZXM9J3BlcmwgcGVybDUnDQogICAgcGVybF9zcGVjaWZpZWQ9bm8NCiAgZmkNCg0K ICBmb3VuZD1ubw0KDQogIFBFUkw9IiRhbV9taXNzaW5nX3J1biBwZXJsIg0KICBmb3IgcGVybCBp biAkY2FuZGlkYXRlX3BlcmxfbmFtZXM7IGRvDQogICAgIyBSdW4gdGVzdCBpbiBhIHN1YnNoZWxs OyBzb21lIHZlcnNpb25zIG9mIHNoIHdpbGwgcHJpbnQgYW4gZXJyb3IgaWYNCiAgICAjIGFuIGV4 ZWN1dGFibGUgaXMgbm90IGZvdW5kLCBldmVuIGlmIHN0ZGVyciBpcyByZWRpcmVjdGVkLg0KICAg IGlmICggJHBlcmwgLWUgJ3JlcXVpcmUgNS4wMDU7IHVzZSBGaWxlOjpDb21wYXJlJyApID4gL2Rl di9udWxsIDI+JjE7IHRoZW4NCiAgICAgIFBFUkw9JHBlcmwNCiAgICAgIGZvdW5kPXllcw0KICAg ICAgYnJlYWsNCiAgICBmaQ0KICBkb25lDQoNCiAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGlu ZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRmb3VuZCIgPiY1DQokYXNfZWNobyAiJGZvdW5kIiA+JjY7 IH0NCiAgdGVzdCAkZm91bmQgPSBubyAmJiB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8t JExJTkVOT306IFdBUk5JTkc6DQpXQVJOSU5HOiBZb3UgZG9uJ3Qgc2VlbSB0byBoYXZlIHBlcmw1 LjAwNSBvciBuZXdlciBpbnN0YWxsZWQsIG9yIHlvdSBsYWNrDQogICAgICAgICBhIHVzYWJsZSB2 ZXJzaW9uIG9mIHRoZSBQZXJsIEZpbGU6OkNvbXBhcmUgbW9kdWxlLiAgQXMgYSByZXN1bHQsDQog ICAgICAgICB5b3UgbWF5IGJlIHVuYWJsZSB0byBydW4gYSBmZXcgdGVzdHMgb3IgdG8gcmVnZW5l cmF0ZSBjZXJ0YWluDQogICAgICAgICBmaWxlcyBpZiB5b3UgbW9kaWZ5IHRoZSBzb3VyY2VzIGZy b20gd2hpY2ggdGhleSBhcmUgZGVyaXZlZC4NCiAiID4mNQ0KJGFzX2VjaG8gIiRhc19tZTogV0FS TklORzoNCldBUk5JTkc6IFlvdSBkb24ndCBzZWVtIHRvIGhhdmUgcGVybDUuMDA1IG9yIG5ld2Vy IGluc3RhbGxlZCwgb3IgeW91IGxhY2sNCiAgICAgICAgIGEgdXNhYmxlIHZlcnNpb24gb2YgdGhl IFBlcmwgRmlsZTo6Q29tcGFyZSBtb2R1bGUuICBBcyBhIHJlc3VsdCwNCiAgICAgICAgIHlvdSBt YXkgYmUgdW5hYmxlIHRvIHJ1biBhIGZldyB0ZXN0cyBvciB0byByZWdlbmVyYXRlIGNlcnRhaW4N CiAgICAgICAgIGZpbGVzIGlmIHlvdSBtb2RpZnkgdGhlIHNvdXJjZXMgZnJvbSB3aGljaCB0aGV5 IGFyZSBkZXJpdmVkLg0KICIgPiYyO30NCg0KICAjIENvZGUgZnJvbSBtb2R1bGUgcGh5c21lbToN Cg0KDQoNCg0KDQoNCg0KDQoNCiAgZ2xfTElCT0JKUz0iJGdsX0xJQk9CSlMgcGh5c21lbS4kYWNf b2JqZXh0Ig0KDQoNCiAgIyBQcmVyZXF1aXNpdGVzIG9mIGxpYi9waHlzbWVtLmMuDQogIGZvciBh Y19oZWFkZXIgaW4gc3lzL3BzdGF0Lmggc3lzL3N5c21wLmggc3lzL3N5c2luZm8uaCBcDQogICAg bWFjaGluZS9oYWxfc3lzaW5mby5oIHN5cy90YWJsZS5oIHN5cy9wYXJhbS5oIHN5cy9zeXN0ZW1j ZmcuaA0KZG8gOg0KICBhc19hY19IZWFkZXI9YCRhc19lY2hvICJhY19jdl9oZWFkZXJfJGFjX2hl YWRlciIgfCAkYXNfdHJfc2hgDQphY19mbl9jX2NoZWNrX2hlYWRlcl9jb21waWxlICIkTElORU5P IiAiJGFjX2hlYWRlciIgIiRhc19hY19IZWFkZXIiICIkYWNfaW5jbHVkZXNfZGVmYXVsdA0KIg0K aWYgZXZhbCB0ZXN0IFwieFwkIiRhc19hY19IZWFkZXIiXCIgPSB4InllcyI7IHRoZW4gOg0KICBj YXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GDQojZGVmaW5lIGAkYXNfZWNobyAiSEFWRV8kYWNfaGVh ZGVyIiB8ICRhc190cl9jcHBgIDENCl9BQ0VPRg0KDQpmaQ0KDQpkb25lDQoNCiAgICBmb3IgYWNf aGVhZGVyIGluIHN5cy9zeXNjdGwuaA0KZG8gOg0KICBhY19mbl9jX2NoZWNrX2hlYWRlcl9jb21w aWxlICIkTElORU5PIiAic3lzL3N5c2N0bC5oIiAiYWNfY3ZfaGVhZGVyX3N5c19zeXNjdGxfaCIg IiRhY19pbmNsdWRlc19kZWZhdWx0DQogICAgICNpZiBIQVZFX1NZU19QQVJBTV9IDQogICAgICMg aW5jbHVkZSA8c3lzL3BhcmFtLmg+DQogICAgICNlbmRpZg0KDQoiDQppZiB0ZXN0ICJ4JGFjX2N2 X2hlYWRlcl9zeXNfc3lzY3RsX2giID0geHllczsgdGhlbiA6DQogIGNhdCA+PmNvbmZkZWZzLmgg PDxfQUNFT0YNCiNkZWZpbmUgSEFWRV9TWVNfU1lTQ1RMX0ggMQ0KX0FDRU9GDQoNCmZpDQoNCmRv bmUNCg0KDQogIGZvciBhY19mdW5jIGluIHBzdGF0X2dldHN0YXRpYyBwc3RhdF9nZXRkeW5hbWlj IHN5c21wIGdldHN5c2luZm8gc3lzY3RsIHRhYmxlDQpkbyA6DQogIGFzX2FjX3Zhcj1gJGFzX2Vj aG8gImFjX2N2X2Z1bmNfJGFjX2Z1bmMiIHwgJGFzX3RyX3NoYA0KYWNfZm5fY19jaGVja19mdW5j ICIkTElORU5PIiAiJGFjX2Z1bmMiICIkYXNfYWNfdmFyIg0KaWYgZXZhbCB0ZXN0IFwieFwkIiRh c19hY192YXIiXCIgPSB4InllcyI7IHRoZW4gOg0KICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9G DQojZGVmaW5lIGAkYXNfZWNobyAiSEFWRV8kYWNfZnVuYyIgfCAkYXNfdHJfY3BwYCAxDQpfQUNF T0YNCg0KZmkNCmRvbmUNCg0KDQoNCiAgIyBDb2RlIGZyb20gbW9kdWxlIHBvc2l4LXNoZWxsOg0K DQogIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9y IGEgc2hlbGwgdGhhdCBjb25mb3JtcyB0byBQT1NJWCIgPiY1DQokYXNfZWNob19uICJjaGVja2lu ZyBmb3IgYSBzaGVsbCB0aGF0IGNvbmZvcm1zIHRvIFBPU0lYLi4uICIgPiY2OyB9DQppZiAke2ds X2N2X3Bvc2l4X3NoZWxsKzp9IGZhbHNlOyB0aGVuIDoNCiAgJGFzX2VjaG9fbiAiKGNhY2hlZCkg IiA+JjYNCmVsc2UNCiAgZ2xfdGVzdF9wb3NpeF9zaGVsbF9zY3JpcHQ9Jw0KICAgICAgIGZ1bmNf cmV0dXJuICgpIHsNCiAgICAgICAgIChleGl0ICQxKQ0KICAgICAgIH0NCiAgICAgICBmdW5jX3N1 Y2Nlc3MgKCkgew0KICAgICAgICAgZnVuY19yZXR1cm4gMA0KICAgICAgIH0NCiAgICAgICBmdW5j X2ZhaWx1cmUgKCkgew0KICAgICAgICAgZnVuY19yZXR1cm4gMQ0KICAgICAgIH0NCiAgICAgICBm dW5jX3JldF9zdWNjZXNzICgpIHsNCiAgICAgICAgIHJldHVybiAwDQogICAgICAgfQ0KICAgICAg IGZ1bmNfcmV0X2ZhaWx1cmUgKCkgew0KICAgICAgICAgcmV0dXJuIDENCiAgICAgICB9DQogICAg ICAgc3Vic2hlbGxfdW1hc2tfc2FuaXR5ICgpIHsNCiAgICAgICAgICh1bWFzayAyMjsgKHVtYXNr IDApOyB0ZXN0ICQodW1hc2spIC1lcSAyMikNCiAgICAgICB9DQogICAgICAgdGVzdCAiJChlY2hv IGZvbykiID0gZm9vICYmDQogICAgICAgZnVuY19zdWNjZXNzICYmDQogICAgICAgISBmdW5jX2Zh aWx1cmUgJiYNCiAgICAgICBmdW5jX3JldF9zdWNjZXNzICYmDQogICAgICAgISBmdW5jX3JldF9m YWlsdXJlICYmDQogICAgICAgKHNldCB4ICYmIGZ1bmNfcmV0X3N1Y2Nlc3MgeSAmJiB0ZXN0IHgg PSAiJDEiKSAmJg0KICAgICAgIHN1YnNoZWxsX3VtYXNrX3Nhbml0eQ0KICAgICAnDQogICAgIGZv ciBnbF9jdl9wb3NpeF9zaGVsbCBpbiBcDQogICAgICAgICAiJENPTkZJR19TSEVMTCIgIiRTSEVM TCIgL2Jpbi9zaCAvYmluL2Jhc2ggL2Jpbi9rc2ggL2Jpbi9zaDUgbm87IGRvDQogICAgICAgY2Fz ZSAkZ2xfY3ZfcG9zaXhfc2hlbGwgaW4NCiAgICAgICAgIC8qKQ0KICAgICAgICAgICAiJGdsX2N2 X3Bvc2l4X3NoZWxsIiAtYyAiJGdsX3Rlc3RfcG9zaXhfc2hlbGxfc2NyaXB0IiAyPi9kZXYvbnVs bCBcDQogICAgICAgICAgICAgJiYgYnJlYWs7Ow0KICAgICAgIGVzYWMNCiAgICAgZG9uZQ0KZmkN CnsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkZ2xfY3Zf cG9zaXhfc2hlbGwiID4mNQ0KJGFzX2VjaG8gIiRnbF9jdl9wb3NpeF9zaGVsbCIgPiY2OyB9DQoN CiAgaWYgdGVzdCAiJGdsX2N2X3Bvc2l4X3NoZWxsIiAhPSBubzsgdGhlbg0KICAgIFBPU0lYX1NI RUxMPSRnbF9jdl9wb3NpeF9zaGVsbA0KICAgIFBSRUZFUkFCTFlfUE9TSVhfU0hFTEw9JFBPU0lY X1NIRUxMDQogIGVsc2UNCiAgICBQT1NJWF9TSEVMTD0NCiAgICBQUkVGRVJBQkxZX1BPU0lYX1NI RUxMPS9iaW4vc2gNCiAgZmkNCg0KDQoNCiAgIyBDb2RlIGZyb20gbW9kdWxlIHBvc2l4dG06DQoN Cg0KDQoNCg0KDQoNCg0KDQogIGdsX0xJQk9CSlM9IiRnbF9MSUJPQkpTIHBvc2l4dG0uJGFjX29i amV4dCINCg0KDQoNCiAgIyBDb2RlIGZyb20gbW9kdWxlIHBvc2l4dmVyOg0KDQoNCg0KDQoNCg0K DQoNCg0KICBnbF9MSUJPQkpTPSIkZ2xfTElCT0JKUyBwb3NpeHZlci4kYWNfb2JqZXh0Ig0KDQoN Cg0KDQogICMgQ29kZSBmcm9tIG1vZHVsZSBwcmludGYtZnJleHA6DQoNCg0KICBpZiB0ZXN0ICRn bF9jdl9mdW5jX2ZyZXhwX25vX2xpYm0gPSB5ZXM7IHRoZW4NCg0KDQogICAgIHsgJGFzX2VjaG8g IiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciBmcmV4cCB3b3Jr cyIgPiY1DQokYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIGZyZXhwIHdvcmtzLi4uICIgPiY2 OyB9DQppZiAke2dsX2N2X2Z1bmNfZnJleHBfd29ya3MrOn0gZmFsc2U7IHRoZW4gOg0KICAkYXNf ZWNob19uICIoY2FjaGVkKSAiID4mNg0KZWxzZQ0KDQogICAgICBpZiB0ZXN0ICIkY3Jvc3NfY29t cGlsaW5nIiA9IHllczsgdGhlbiA6DQogIGNhc2UgIiRob3N0X29zIiBpbg0KICAgICAgICAgICBu ZXRic2QqIHwgaXJpeCogfCBtaW5ndyopIGdsX2N2X2Z1bmNfZnJleHBfd29ya3M9Imd1ZXNzaW5n IG5vIjs7DQogICAgICAgICAgICopICAgICAgICAgICAgICAgICAgICAgICAgZ2xfY3ZfZnVuY19m cmV4cF93b3Jrcz0iZ3Vlc3NpbmcgeWVzIjs7DQogICAgICAgICBlc2FjDQoNCmVsc2UNCiAgY2F0 IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dA0KLyogZW5kIGNvbmZkZWZz LmguICAqLw0KDQojaW5jbHVkZSA8ZmxvYXQuaD4NCiNpbmNsdWRlIDxtYXRoLmg+DQojaW5jbHVk ZSA8c3RyaW5nLmg+DQovKiBIUCBjYyBvbiBIUC1VWCAxMC4yMCBoYXMgYSBidWcgd2l0aCB0aGUg Y29uc3RhbnQgZXhwcmVzc2lvbiAtMC4wLg0KICAgSUNDIDEwLjAgaGFzIGEgYnVnIHdoZW4gb3B0 aW1pemluZyB0aGUgZXhwcmVzc2lvbiAtemVyby4NCiAgIFRoZSBleHByZXNzaW9uIC1EQkxfTUlO ICogREJMX01JTiBkb2VzIG5vdCB3b3JrIHdoZW4gY3Jvc3MtY29tcGlsaW5nDQogICB0byBQb3dl clBDIG9uIE1hY09TIFggMTAuNS4gICovDQojaWYgZGVmaW5lZCBfX2hwdXggfHwgZGVmaW5lZCBf X3NnaSB8fCBkZWZpbmVkIF9fSUNDDQpzdGF0aWMgZG91YmxlDQpjb21wdXRlX21pbnVzX3plcm8g KHZvaWQpDQp7DQogIHJldHVybiAtREJMX01JTiAqIERCTF9NSU47DQp9DQojIGRlZmluZSBtaW51 c196ZXJvIGNvbXB1dGVfbWludXNfemVybyAoKQ0KI2Vsc2UNCmRvdWJsZSBtaW51c196ZXJvID0g LTAuMDsNCiNlbmRpZg0KaW50IG1haW4oKQ0Kew0KICBpbnQgcmVzdWx0ID0gMDsNCiAgaW50IGk7 DQogIHZvbGF0aWxlIGRvdWJsZSB4Ow0KICBkb3VibGUgemVybyA9IDAuMDsNCiAgLyogVGVzdCBv biBkZW5vcm1hbGl6ZWQgbnVtYmVycy4gICovDQogIGZvciAoaSA9IDEsIHggPSAxLjA7IGkgPj0g REJMX01JTl9FWFA7IGktLSwgeCAqPSAwLjUpDQogICAgOw0KICBpZiAoeCA+IDAuMCkNCiAgICB7 DQogICAgICBpbnQgZXhwOw0KICAgICAgZG91YmxlIHkgPSBmcmV4cCAoeCwgJmV4cCk7DQogICAg ICAvKiBPbiBtYWNoaW5lcyB3aXRoIElFRUU3NTQgYXJpdGhtZXRpYzogeCA9IDEuMTEyNTRlLTMw OCwgZXhwID0gLTEwMjIuDQogICAgICAgICBPbiBOZXRCU0Q6IHkgPSAwLjc1LiBDb3JyZWN0OiB5 ID0gMC41LiAgKi8NCiAgICAgIGlmICh5ICE9IDAuNSkNCiAgICAgICAgcmVzdWx0IHw9IDE7DQog ICAgfQ0KICAvKiBUZXN0IG9uIGluZmluaXRlIG51bWJlcnMuICAqLw0KICB4ID0gMS4wIC8gMC4w Ow0KICB7DQogICAgaW50IGV4cDsNCiAgICBkb3VibGUgeSA9IGZyZXhwICh4LCAmZXhwKTsNCiAg ICBpZiAoeSAhPSB4KQ0KICAgICAgcmVzdWx0IHw9IDI7DQogIH0NCiAgLyogVGVzdCBvbiBuZWdh dGl2ZSB6ZXJvLiAgKi8NCiAgeCA9IG1pbnVzX3plcm87DQogIHsNCiAgICBpbnQgZXhwOw0KICAg IGRvdWJsZSB5ID0gZnJleHAgKHgsICZleHApOw0KICAgIGlmIChtZW1jbXAgKCZ5LCAmeCwgc2l6 ZW9mIHgpKQ0KICAgICAgcmVzdWx0IHw9IDQ7DQogIH0NCiAgcmV0dXJuIHJlc3VsdDsNCn0NCl9B Q0VPRg0KaWYgYWNfZm5fY190cnlfcnVuICIkTElORU5PIjsgdGhlbiA6DQogIGdsX2N2X2Z1bmNf ZnJleHBfd29ya3M9eWVzDQplbHNlDQogIGdsX2N2X2Z1bmNfZnJleHBfd29ya3M9bm8NCmZpDQpy bSAtZiBjb3JlICouY29yZSBjb3JlLmNvbmZ0ZXN0LiogZ21vbi5vdXQgYmIub3V0IGNvbmZ0ZXN0 JGFjX2V4ZWV4dCBcDQogIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuYmVhbSBjb25mdGVz dC4kYWNfZXh0DQpmaQ0KDQoNCmZpDQp7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJ TkVOT306IHJlc3VsdDogJGdsX2N2X2Z1bmNfZnJleHBfd29ya3MiID4mNQ0KJGFzX2VjaG8gIiRn bF9jdl9mdW5jX2ZyZXhwX3dvcmtzIiA+JjY7IH0NCg0KICAgIGNhc2UgIiRnbF9jdl9mdW5jX2Zy ZXhwX3dvcmtzIiBpbg0KICAgICAgKnllcykNCg0KJGFzX2VjaG8gIiNkZWZpbmUgSEFWRV9GUkVY UF9JTl9MSUJDIDEiID4+Y29uZmRlZnMuaA0KDQogICAgICAgIDs7DQogICAgZXNhYw0KICBmaQ0K DQogIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hl dGhlciBsZGV4cCBjYW4gYmUgdXNlZCB3aXRob3V0IGxpbmtpbmcgd2l0aCBsaWJtIiA+JjUNCiRh c19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgbGRleHAgY2FuIGJlIHVzZWQgd2l0aG91dCBsaW5r aW5nIHdpdGggbGlibS4uLiAiID4mNjsgfQ0KaWYgJHtnbF9jdl9mdW5jX2xkZXhwX25vX2xpYm0r On0gZmFsc2U7IHRoZW4gOg0KICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNg0KZWxzZQ0KDQog ICAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0DQovKiBlbmQg Y29uZmRlZnMuaC4gICovDQojaW5jbHVkZSA8bWF0aC5oPg0KICAgICAgICAgICAgIGRvdWJsZSB4 Ow0KICAgICAgICAgICAgIGludCB5Ow0KaW50DQptYWluICgpDQp7DQpyZXR1cm4gbGRleHAgKHgs IHkpIDwgMTsNCiAgOw0KICByZXR1cm4gMDsNCn0NCl9BQ0VPRg0KaWYgYWNfZm5fY190cnlfbGlu ayAiJExJTkVOTyI7IHRoZW4gOg0KICBnbF9jdl9mdW5jX2xkZXhwX25vX2xpYm09eWVzDQplbHNl DQogIGdsX2N2X2Z1bmNfbGRleHBfbm9fbGlibT1ubw0KZmkNCnJtIC1mIGNvcmUgY29uZnRlc3Qu ZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXA0KICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVz dC4kYWNfZXh0DQoNCmZpDQp7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306 IHJlc3VsdDogJGdsX2N2X2Z1bmNfbGRleHBfbm9fbGlibSIgPiY1DQokYXNfZWNobyAiJGdsX2N2 X2Z1bmNfbGRleHBfbm9fbGlibSIgPiY2OyB9DQogIGlmIHRlc3QgJGdsX2N2X2Z1bmNfbGRleHBf bm9fbGlibSA9IHllczsgdGhlbg0KDQokYXNfZWNobyAiI2RlZmluZSBIQVZFX0xERVhQX0lOX0xJ QkMgMSIgPj5jb25mZGVmcy5oDQoNCiAgZmkNCg0KICAjIENvZGUgZnJvbSBtb2R1bGUgcHJpbnRm LWZyZXhwbDoNCg0KDQoNCiAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99 OiBjaGVja2luZyB3aGV0aGVyIGZyZXhwbCgpIGNhbiBiZSB1c2VkIHdpdGhvdXQgbGlua2luZyB3 aXRoIGxpYm0iID4mNQ0KJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciBmcmV4cGwoKSBjYW4g YmUgdXNlZCB3aXRob3V0IGxpbmtpbmcgd2l0aCBsaWJtLi4uICIgPiY2OyB9DQppZiAke2dsX2N2 X2Z1bmNfZnJleHBsX25vX2xpYm0rOn0gZmFsc2U7IHRoZW4gOg0KICAkYXNfZWNob19uICIoY2Fj aGVkKSAiID4mNg0KZWxzZQ0KDQogICAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25m dGVzdC4kYWNfZXh0DQovKiBlbmQgY29uZmRlZnMuaC4gICovDQojaW5jbHVkZSA8bWF0aC5oPg0K ICAgICAgICAgICAgIGxvbmcgZG91YmxlIHg7DQppbnQNCm1haW4gKCkNCnsNCmludCBlOyByZXR1 cm4gZnJleHBsICh4LCAmZSkgPiAwOw0KICA7DQogIHJldHVybiAwOw0KfQ0KX0FDRU9GDQppZiBh Y19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6DQogIGdsX2N2X2Z1bmNfZnJleHBsX25v X2xpYm09eWVzDQplbHNlDQogIGdsX2N2X2Z1bmNfZnJleHBsX25vX2xpYm09bm8NCmZpDQpybSAt ZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwNCiAgICBjb25mdGVzdCRh Y19leGVleHQgY29uZnRlc3QuJGFjX2V4dA0KDQpmaQ0KeyAkYXNfZWNobyAiJGFzX21lOiR7YXNf bGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRnbF9jdl9mdW5jX2ZyZXhwbF9ub19saWJtIiA+JjUN CiRhc19lY2hvICIkZ2xfY3ZfZnVuY19mcmV4cGxfbm9fbGlibSIgPiY2OyB9DQoNCiAgaWYgdGVz dCAkZ2xfY3ZfZnVuY19mcmV4cGxfbm9fbGlibSA9IHllczsgdGhlbg0KDQoNCiAgICAgeyAkYXNf ZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIGZyZXhw bCB3b3JrcyIgPiY1DQokYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIGZyZXhwbCB3b3Jrcy4u LiAiID4mNjsgfQ0KaWYgJHtnbF9jdl9mdW5jX2ZyZXhwbF93b3Jrcys6fSBmYWxzZTsgdGhlbiA6 DQogICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2DQplbHNlDQoNCiAgICAgIGlmIHRlc3QgIiRj cm9zc19jb21waWxpbmciID0geWVzOyB0aGVuIDoNCg0KICAgICAgICAgY2FzZSAiJGhvc3Rfb3Mi IGluDQogICAgICAgICAgIGFpeCB8IGFpeFszLTZdKiB8IGJlb3MqIHwgZGFyd2luKiB8IGlyaXgq IHwgbWluZ3cqIHwgcHcqKQ0KICAgICAgICAgICAgICBnbF9jdl9mdW5jX2ZyZXhwbF93b3Jrcz0i Z3Vlc3Npbmcgbm8iOzsNCiAgICAgICAgICAgKikgZ2xfY3ZfZnVuY19mcmV4cGxfd29ya3M9Imd1 ZXNzaW5nIHllcyI7Ow0KICAgICAgICAgZXNhYw0KDQplbHNlDQogIGNhdCBjb25mZGVmcy5oIC0g PDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQNCi8qIGVuZCBjb25mZGVmcy5oLiAgKi8NCg0KI2lu Y2x1ZGUgPGZsb2F0Lmg+DQojaW5jbHVkZSA8bWF0aC5oPg0KLyogT3ZlcnJpZGUgdGhlIHZhbHVl cyBvZiA8ZmxvYXQuaD4sIGxpa2UgZG9uZSBpbiBmbG9hdC5pbi5oLiAgKi8NCiNpZiBkZWZpbmVk IF9faTM4Nl9fICYmIChkZWZpbmVkIF9fQkVPU19fIHx8IGRlZmluZWQgX19PcGVuQlNEX18pDQoj IHVuZGVmIExEQkxfTUlOX0VYUA0KIyBkZWZpbmUgTERCTF9NSU5fRVhQICAgICgtMTYzODEpDQoj ZW5kaWYNCmV4dGVybiBsb25nIGRvdWJsZSBmcmV4cGwgKGxvbmcgZG91YmxlLCBpbnQgKik7DQpp bnQgbWFpbigpDQp7DQogIGludCByZXN1bHQgPSAwOw0KICB2b2xhdGlsZSBsb25nIGRvdWJsZSB4 Ow0KICAvKiBUZXN0IG9uIGZpbml0ZSBudW1iZXJzIHRoYXQgZmFpbHMgb24gQUlYIDUuMS4gICov DQogIHggPSAxNi4wTDsNCiAgew0KICAgIGludCBleHAgPSAtOTk5OTsNCiAgICBmcmV4cGwgKHgs ICZleHApOw0KICAgIGlmIChleHAgIT0gNSkNCiAgICAgIHJlc3VsdCB8PSAxOw0KICB9DQogIC8q IFRlc3Qgb24gZmluaXRlIG51bWJlcnMgdGhhdCBmYWlscyBvbiBNYWNPUyBYIDEwLjQsIGJlY2F1 c2UgaXRzIGZyZXhwbA0KICAgICBmdW5jdGlvbiByZXR1cm5zIGFuIGludmFsaWQgKGluY29ycmVj dGx5IG5vcm1hbGl6ZWQpIHZhbHVlOiBpdCByZXR1cm5zDQogICAgICAgICAgICAgICB5ID0geyAw eDNmZTAyOGY1LCAweGMyOGY1YzI4LCAweDNjOWViODUxLCAweGViODUxZWI4IH0NCiAgICAgYnV0 IHRoZSBjb3JyZWN0IHJlc3VsdCBpcw0KICAgICAgICAgIDAuNTA1TCA9IHsgMHgzZmUwMjhmNSwg MHhjMjhmNWMyOSwgMHhiYzU0N2FlMSwgMHg0N2FlMTQ4MCB9ICAqLw0KICB4ID0gMS4wMUw7DQog IHsNCiAgICBpbnQgZXhwID0gLTk5OTk7DQogICAgbG9uZyBkb3VibGUgeSA9IGZyZXhwbCAoeCwg JmV4cCk7DQogICAgaWYgKCEoZXhwID09IDEgJiYgeSA9PSAwLjUwNUwpKQ0KICAgICAgcmVzdWx0 IHw9IDI7DQogIH0NCiAgLyogVGVzdCBvbiBsYXJnZSBmaW5pdGUgbnVtYmVycy4gIFRoaXMgZmFp bHMgb24gQmVPUyBhdCBpID0gMTYzMjIsIHdoaWxlDQogICAgIExEQkxfTUFYX0VYUCA9IDE2Mzg0 Lg0KICAgICBJbiB0aGUgbG9vcCBlbmQgdGVzdCwgd2UgdGVzdCB4IGFnYWluc3QgSW5maW5pdHks IHJhdGhlciB0aGFuIGNvbXBhcmluZw0KICAgICBpIHdpdGggTERCTF9NQVhfRVhQLCBiZWNhdXNl IEJlT1MgPGZsb2F0Lmg+IGhhcyBhIHdyb25nIExEQkxfTUFYX0VYUC4gICovDQogIHsNCiAgICBp bnQgaTsNCiAgICBmb3IgKGkgPSAxLCB4ID0gMS4wTDsgeCAhPSB4ICsgeDsgaSsrLCB4ICo9IDIu MEwpDQogICAgICB7DQogICAgICAgIGludCBleHAgPSAtOTk5OTsNCiAgICAgICAgZnJleHBsICh4 LCAmZXhwKTsNCiAgICAgICAgaWYgKGV4cCAhPSBpKQ0KICAgICAgICAgIHsNCiAgICAgICAgICAg IHJlc3VsdCB8PSA0Ow0KICAgICAgICAgICAgYnJlYWs7DQogICAgICAgICAgfQ0KICAgICAgfQ0K ICB9DQogIC8qIFRlc3Qgb24gZGVub3JtYWxpemVkIG51bWJlcnMuICAqLw0KICB7DQogICAgaW50 IGk7DQogICAgZm9yIChpID0gMSwgeCA9IDEuMEw7IGkgPj0gTERCTF9NSU5fRVhQOyBpLS0sIHgg Kj0gMC41TCkNCiAgICAgIDsNCiAgICBpZiAoeCA+IDAuMEwpDQogICAgICB7DQogICAgICAgIGlu dCBleHA7DQogICAgICAgIGxvbmcgZG91YmxlIHkgPSBmcmV4cGwgKHgsICZleHApOw0KICAgICAg ICAvKiBPbiBtYWNoaW5lcyB3aXRoIElFRUU4NTQgYXJpdGhtZXRpYzogeCA9IDEuNjgxMDVlLTQ5 MzIsDQogICAgICAgICAgIGV4cCA9IC0xNjM4MiwgeSA9IDAuNS4gIE9uIE1hY09TIFggMTAuNTog ZXhwID0gLTE2Mzg0LCB5ID0gMC41LiAgKi8NCiAgICAgICAgaWYgKGV4cCAhPSBMREJMX01JTl9F WFAgLSAxKQ0KICAgICAgICAgIHJlc3VsdCB8PSA4Ow0KICAgICAgfQ0KICB9DQogIC8qIFRlc3Qg b24gaW5maW5pdGUgbnVtYmVycy4gICovDQogIHggPSAxLjBMIC8gMC4wTDsNCiAgew0KICAgIGlu dCBleHA7DQogICAgbG9uZyBkb3VibGUgeSA9IGZyZXhwbCAoeCwgJmV4cCk7DQogICAgaWYgKHkg IT0geCkNCiAgICAgIHJlc3VsdCB8PSAxNjsNCiAgfQ0KICByZXR1cm4gcmVzdWx0Ow0KfQ0KX0FD RU9GDQppZiBhY19mbl9jX3RyeV9ydW4gIiRMSU5FTk8iOyB0aGVuIDoNCiAgZ2xfY3ZfZnVuY19m cmV4cGxfd29ya3M9eWVzDQplbHNlDQogIGdsX2N2X2Z1bmNfZnJleHBsX3dvcmtzPW5vDQpmaQ0K cm0gLWYgY29yZSAqLmNvcmUgY29yZS5jb25mdGVzdC4qIGdtb24ub3V0IGJiLm91dCBjb25mdGVz dCRhY19leGVleHQgXA0KICBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LmJlYW0gY29uZnRl c3QuJGFjX2V4dA0KZmkNCg0KDQpmaQ0KeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRM SU5FTk99OiByZXN1bHQ6ICRnbF9jdl9mdW5jX2ZyZXhwbF93b3JrcyIgPiY1DQokYXNfZWNobyAi JGdsX2N2X2Z1bmNfZnJleHBsX3dvcmtzIiA+JjY7IH0NCg0KICAgIGNhc2UgIiRnbF9jdl9mdW5j X2ZyZXhwbF93b3JrcyIgaW4NCiAgICAgICp5ZXMpIGdsX2Z1bmNfZnJleHBsX25vX2xpYm09eWVz IDs7DQogICAgICAqKSAgICBnbF9mdW5jX2ZyZXhwbF9ub19saWJtPW5vOyBSRVBMQUNFX0ZSRVhQ TD0xIDs7DQogICAgZXNhYw0KICBlbHNlDQogICAgZ2xfZnVuY19mcmV4cGxfbm9fbGlibT1ubw0K ICAgICAgICBSRVBMQUNFX0ZSRVhQTD0xDQogIGZpDQogIGlmIHRlc3QgJGdsX2Z1bmNfZnJleHBs X25vX2xpYm0gPSB5ZXM7IHRoZW4NCg0KJGFzX2VjaG8gIiNkZWZpbmUgSEFWRV9GUkVYUExfSU5f TElCQyAxIiA+PmNvbmZkZWZzLmgNCg0KICAgICAgICAgICAgYWNfZm5fY19jaGVja19kZWNsICIk TElORU5PIiAiZnJleHBsIiAiYWNfY3ZfaGF2ZV9kZWNsX2ZyZXhwbCIgIiNpbmNsdWRlIDxtYXRo Lmg+DQoiDQppZiB0ZXN0ICJ4JGFjX2N2X2hhdmVfZGVjbF9mcmV4cGwiID0geHllczsgdGhlbiA6 DQoNCmVsc2UNCiAgSEFWRV9ERUNMX0ZSRVhQTD0wDQpmaQ0KDQogIGZpDQoNCg0KICB7ICRhc19l Y2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgbGRleHBs KCkgY2FuIGJlIHVzZWQgd2l0aG91dCBsaW5raW5nIHdpdGggbGlibSIgPiY1DQokYXNfZWNob19u ICJjaGVja2luZyB3aGV0aGVyIGxkZXhwbCgpIGNhbiBiZSB1c2VkIHdpdGhvdXQgbGlua2luZyB3 aXRoIGxpYm0uLi4gIiA+JjY7IH0NCmlmICR7Z2xfY3ZfZnVuY19sZGV4cGxfbm9fbGlibSs6fSBm YWxzZTsgdGhlbiA6DQogICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2DQplbHNlDQoNCiAgICAg IGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQNCi8qIGVuZCBjb25m ZGVmcy5oLiAgKi8NCiNpbmNsdWRlIDxtYXRoLmg+DQogICAgICAgICAgICAgbG9uZyBkb3VibGUg eDsNCmludA0KbWFpbiAoKQ0Kew0KcmV0dXJuIGxkZXhwbCAoeCwgLTEpID4gMDsNCiAgOw0KICBy ZXR1cm4gMDsNCn0NCl9BQ0VPRg0KaWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4g Og0KICBnbF9jdl9mdW5jX2xkZXhwbF9ub19saWJtPXllcw0KZWxzZQ0KICBnbF9jdl9mdW5jX2xk ZXhwbF9ub19saWJtPW5vDQpmaQ0Kcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFj X29iamV4dCBcDQogICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQNCg0KZmkN CnsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkZ2xfY3Zf ZnVuY19sZGV4cGxfbm9fbGlibSIgPiY1DQokYXNfZWNobyAiJGdsX2N2X2Z1bmNfbGRleHBsX25v X2xpYm0iID4mNjsgfQ0KDQogIGlmIHRlc3QgJGdsX2N2X2Z1bmNfbGRleHBsX25vX2xpYm0gPSB5 ZXM7IHRoZW4NCg0KDQogICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5P fTogY2hlY2tpbmcgd2hldGhlciBsZGV4cGwgd29ya3MiID4mNQ0KJGFzX2VjaG9fbiAiY2hlY2tp bmcgd2hldGhlciBsZGV4cGwgd29ya3MuLi4gIiA+JjY7IH0NCmlmICR7Z2xfY3ZfZnVuY19sZGV4 cGxfd29ya3MrOn0gZmFsc2U7IHRoZW4gOg0KICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNg0K ZWxzZQ0KDQogICAgICBpZiB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IHllczsgdGhlbiA6DQoN CiAgICAgICAgIGNhc2UgIiRob3N0X29zIiBpbg0KICAgICAgICAgICBhaXggfCBhaXhbMy02XSop IGdsX2N2X2Z1bmNfbGRleHBsX3dvcmtzPSJndWVzc2luZyBubyI7Ow0KICAgICAgICAgICAqKSAg ICAgICAgICAgICAgIGdsX2N2X2Z1bmNfbGRleHBsX3dvcmtzPSJndWVzc2luZyB5ZXMiOzsNCiAg ICAgICAgIGVzYWMNCg0KZWxzZQ0KICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVz dC4kYWNfZXh0DQovKiBlbmQgY29uZmRlZnMuaC4gICovDQoNCiNpbmNsdWRlIDxtYXRoLmg+DQpl eHRlcm4gbG9uZyBkb3VibGUgbGRleHBsIChsb25nIGRvdWJsZSwgaW50KTsNCmludCBtYWluKCkN CnsNCiAgaW50IHJlc3VsdCA9IDA7DQogIHsNCiAgICB2b2xhdGlsZSBsb25nIGRvdWJsZSB4ID0g MS4wOw0KICAgIHZvbGF0aWxlIGxvbmcgZG91YmxlIHkgPSBsZGV4cGwgKHgsIC0xKTsNCiAgICBp ZiAoeSAhPSAwLjVMKQ0KICAgICAgcmVzdWx0IHw9IDE7DQogIH0NCiAgew0KICAgIHZvbGF0aWxl IGxvbmcgZG91YmxlIHggPSAxLjczMjA1TDsNCiAgICB2b2xhdGlsZSBsb25nIGRvdWJsZSB5ID0g bGRleHBsICh4LCAwKTsNCiAgICBpZiAoeSAhPSB4KQ0KICAgICAgcmVzdWx0IHw9IDI7DQogIH0N CiAgcmV0dXJuIHJlc3VsdDsNCn0NCl9BQ0VPRg0KaWYgYWNfZm5fY190cnlfcnVuICIkTElORU5P IjsgdGhlbiA6DQogIGdsX2N2X2Z1bmNfbGRleHBsX3dvcmtzPXllcw0KZWxzZQ0KICBnbF9jdl9m dW5jX2xkZXhwbF93b3Jrcz1ubw0KZmkNCnJtIC1mIGNvcmUgKi5jb3JlIGNvcmUuY29uZnRlc3Qu KiBnbW9uLm91dCBiYi5vdXQgY29uZnRlc3QkYWNfZXhlZXh0IFwNCiAgY29uZnRlc3QuJGFjX29i amV4dCBjb25mdGVzdC5iZWFtIGNvbmZ0ZXN0LiRhY19leHQNCmZpDQoNCg0KZmkNCnsgJGFzX2Vj aG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkZ2xfY3ZfZnVuY19sZGV4 cGxfd29ya3MiID4mNQ0KJGFzX2VjaG8gIiRnbF9jdl9mdW5jX2xkZXhwbF93b3JrcyIgPiY2OyB9 DQoNCiAgICBjYXNlICIkZ2xfY3ZfZnVuY19sZGV4cGxfd29ya3MiIGluDQogICAgICAqeWVzKQ0K DQokYXNfZWNobyAiI2RlZmluZSBIQVZFX0xERVhQTF9JTl9MSUJDIDEiID4+Y29uZmRlZnMuaA0K DQogICAgICAgICAgICAgICAgICAgICAgICBhY19mbl9jX2NoZWNrX2RlY2wgIiRMSU5FTk8iICJs ZGV4cGwiICJhY19jdl9oYXZlX2RlY2xfbGRleHBsIiAiI2luY2x1ZGUgPG1hdGguaD4NCiINCmlm IHRlc3QgIngkYWNfY3ZfaGF2ZV9kZWNsX2xkZXhwbCIgPSB4eWVzOyB0aGVuIDoNCg0KZWxzZQ0K ICBIQVZFX0RFQ0xfTERFWFBMPTANCmZpDQoNCiAgICAgICAgOzsNCiAgICBlc2FjDQogIGZpDQoN CiAgIyBDb2RlIGZyb20gbW9kdWxlIHByaW50Zi1zYWZlOg0KDQogICMgQ29kZSBmcm9tIG1vZHVs ZSBwcml2LXNldDoNCg0KDQogIGZvciBhY19mdW5jIGluIGdldHBwcml2DQpkbyA6DQogIGFjX2Zu X2NfY2hlY2tfZnVuYyAiJExJTkVOTyIgImdldHBwcml2IiAiYWNfY3ZfZnVuY19nZXRwcHJpdiIN CmlmIHRlc3QgIngkYWNfY3ZfZnVuY19nZXRwcHJpdiIgPSB4eWVzOyB0aGVuIDoNCiAgY2F0ID4+ Y29uZmRlZnMuaCA8PF9BQ0VPRg0KI2RlZmluZSBIQVZFX0dFVFBQUklWIDENCl9BQ0VPRg0KDQpm aQ0KZG9uZQ0KDQoNCg0KICAjIENvZGUgZnJvbSBtb2R1bGUgcHJvZ25hbWU6DQogIGFjX2ZuX2Nf Y2hlY2tfZGVjbCAiJExJTkVOTyIgInByb2dyYW1faW52b2NhdGlvbl9uYW1lIiAiYWNfY3ZfaGF2 ZV9kZWNsX3Byb2dyYW1faW52b2NhdGlvbl9uYW1lIiAiI2luY2x1ZGUgPGVycm5vLmg+DQoiDQpp ZiB0ZXN0ICJ4JGFjX2N2X2hhdmVfZGVjbF9wcm9ncmFtX2ludm9jYXRpb25fbmFtZSIgPSB4eWVz OyB0aGVuIDoNCiAgYWNfaGF2ZV9kZWNsPTENCmVsc2UNCiAgYWNfaGF2ZV9kZWNsPTANCmZpDQoN CmNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YNCiNkZWZpbmUgSEFWRV9ERUNMX1BST0dSQU1fSU5W T0NBVElPTl9OQU1FICRhY19oYXZlX2RlY2wNCl9BQ0VPRg0KDQogIGFjX2ZuX2NfY2hlY2tfZGVj bCAiJExJTkVOTyIgInByb2dyYW1faW52b2NhdGlvbl9zaG9ydF9uYW1lIiAiYWNfY3ZfaGF2ZV9k ZWNsX3Byb2dyYW1faW52b2NhdGlvbl9zaG9ydF9uYW1lIiAiI2luY2x1ZGUgPGVycm5vLmg+DQoi DQppZiB0ZXN0ICJ4JGFjX2N2X2hhdmVfZGVjbF9wcm9ncmFtX2ludm9jYXRpb25fc2hvcnRfbmFt ZSIgPSB4eWVzOyB0aGVuIDoNCiAgYWNfaGF2ZV9kZWNsPTENCmVsc2UNCiAgYWNfaGF2ZV9kZWNs PTANCmZpDQoNCmNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YNCiNkZWZpbmUgSEFWRV9ERUNMX1BS T0dSQU1fSU5WT0NBVElPTl9TSE9SVF9OQU1FICRhY19oYXZlX2RlY2wNCl9BQ0VPRg0KDQogICMg Q29kZSBmcm9tIG1vZHVsZSBwcm9wZXJuYW1lOg0KDQoNCiAgWEdFVFRFWFRfRVhUUkFfT1BUSU9O Uz0iJFhHRVRURVhUX0VYVFJBX09QVElPTlMgLS1rZXl3b3JkPSdwcm9wZXJfbmFtZToxLFwiVGhp cyBpcyBhIHByb3BlciBuYW1lLiBTZWUgdGhlIGdldHRleHQgbWFudWFsLCBzZWN0aW9uIE5hbWVz LlwiJyINCg0KDQoNCiAgWEdFVFRFWFRfRVhUUkFfT1BUSU9OUz0iJFhHRVRURVhUX0VYVFJBX09Q VElPTlMgLS1rZXl3b3JkPSdwcm9wZXJfbmFtZV91dGY4OjEsXCJUaGlzIGlzIGEgcHJvcGVyIG5h bWUuIFNlZSB0aGUgZ2V0dGV4dCBtYW51YWwsIHNlY3Rpb24gTmFtZXMuXCInIg0KDQogICMgQ29k ZSBmcm9tIG1vZHVsZSBwdGhyZWFkOg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCiAgICAgaWYgdGVz dCAkZ2xfY3ZfaGF2ZV9pbmNsdWRlX25leHQgPSB5ZXM7IHRoZW4NCiAgICAgICBnbF9jdl9uZXh0 X3B0aHJlYWRfaD0nPCdwdGhyZWFkLmgnPicNCiAgICAgZWxzZQ0KICAgICAgIHsgJGFzX2VjaG8g IiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgYWJzb2x1dGUgbmFtZSBvZiA8 cHRocmVhZC5oPiIgPiY1DQokYXNfZWNob19uICJjaGVja2luZyBhYnNvbHV0ZSBuYW1lIG9mIDxw dGhyZWFkLmg+Li4uICIgPiY2OyB9DQppZiAke2dsX2N2X25leHRfcHRocmVhZF9oKzp9IGZhbHNl OyB0aGVuIDoNCiAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYNCmVsc2UNCg0KICAgICAgICAg ICAgIGlmIHRlc3QgJGFjX2N2X2hlYWRlcl9wdGhyZWFkX2ggPSB5ZXM7IHRoZW4NCg0KDQogICAg ICAgICAgICAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0DQov KiBlbmQgY29uZmRlZnMuaC4gICovDQojaW5jbHVkZSA8cHRocmVhZC5oPg0KDQpfQUNFT0YNCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGNhc2UgIiRob3N0X29zIiBpbg0KICAgICAgICAgICAgICAgICBhaXgqKSBnbF9hYnNuYW1l X2NwcD0iJGFjX2NwcCAtQyIgOzsNCiAgICAgICAgICAgICAgICAgKikgICAgZ2xfYWJzbmFtZV9j cHA9IiRhY19jcHAiIDs7DQogICAgICAgICAgICAgICBlc2FjDQogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbF9jdl9uZXh0X3B0aHJl YWRfaD0nIidgKGV2YWwgIiRnbF9hYnNuYW1lX2NwcCBjb25mdGVzdC4kYWNfZXh0IikgMj4mNSB8 DQogICAgICAgICAgICAgICAgICBzZWQgLW4gJ1wjL3B0aHJlYWQuaCN7DQogICAgICAgICAgICAg ICAgICAgIHMjLioiXCguKi9wdGhyZWFkLmhcKSIuKiNcMSMNCiAgICAgICAgICAgICAgICAgICAg cyNeL1teL10jLy8mIw0KICAgICAgICAgICAgICAgICAgICBwDQogICAgICAgICAgICAgICAgICAg IHENCiAgICAgICAgICAgICAgICAgIH0nYCciJw0KICAgICAgICAgIGVsc2UNCiAgICAgICAgICAg ICAgIGdsX2N2X25leHRfcHRocmVhZF9oPSc8J3B0aHJlYWQuaCc+Jw0KICAgICAgICAgICAgIGZp DQoNCg0KZmkNCnsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0 OiAkZ2xfY3ZfbmV4dF9wdGhyZWFkX2giID4mNQ0KJGFzX2VjaG8gIiRnbF9jdl9uZXh0X3B0aHJl YWRfaCIgPiY2OyB9DQogICAgIGZpDQogICAgIE5FWFRfUFRIUkVBRF9IPSRnbF9jdl9uZXh0X3B0 aHJlYWRfaA0KDQogICAgIGlmIHRlc3QgJGdsX2N2X2hhdmVfaW5jbHVkZV9uZXh0ID0geWVzIHx8 IHRlc3QgJGdsX2N2X2hhdmVfaW5jbHVkZV9uZXh0ID0gYnVnZ3k7IHRoZW4NCiAgICAgICAjIElO Q0xVREVfTkVYVF9BU19GSVJTVF9ESVJFQ1RJVkU9J2luY2x1ZGVfbmV4dCcNCiAgICAgICBnbF9u ZXh0X2FzX2ZpcnN0X2RpcmVjdGl2ZT0nPCdwdGhyZWFkLmgnPicNCiAgICAgZWxzZQ0KICAgICAg ICMgSU5DTFVERV9ORVhUX0FTX0ZJUlNUX0RJUkVDVElWRT0naW5jbHVkZScNCiAgICAgICBnbF9u ZXh0X2FzX2ZpcnN0X2RpcmVjdGl2ZT0kZ2xfY3ZfbmV4dF9wdGhyZWFkX2gNCiAgICAgZmkNCiAg ICAgTkVYVF9BU19GSVJTVF9ESVJFQ1RJVkVfUFRIUkVBRF9IPSRnbF9uZXh0X2FzX2ZpcnN0X2Rp cmVjdGl2ZQ0KDQoNCg0KDQogICBpZiB0ZXN0ICRhY19jdl9oZWFkZXJfcHRocmVhZF9oID0geWVz OyB0aGVuDQogICAgIEhBVkVfUFRIUkVBRF9IPTENCiAgIGVsc2UNCiAgICAgSEFWRV9QVEhSRUFE X0g9MA0KICAgZmkNCg0KICAgYWNfZm5fY19jaGVja190eXBlICIkTElORU5PIiAicHRocmVhZF90 IiAiYWNfY3ZfdHlwZV9wdGhyZWFkX3QiICIkYWNfaW5jbHVkZXNfZGVmYXVsdA0KICAgICAgI2lm IEhBVkVfUFRIUkVBRF9IDQogICAgICAgI2luY2x1ZGUgPHB0aHJlYWQuaD4NCiAgICAgICNlbmRp Zg0KIg0KaWYgdGVzdCAieCRhY19jdl90eXBlX3B0aHJlYWRfdCIgPSB4eWVzOyB0aGVuIDoNCg0K Y2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRg0KI2RlZmluZSBIQVZFX1BUSFJFQURfVCAxDQpfQUNF T0YNCg0KDQpmaQ0KYWNfZm5fY19jaGVja190eXBlICIkTElORU5PIiAicHRocmVhZF9zcGlubG9j a190IiAiYWNfY3ZfdHlwZV9wdGhyZWFkX3NwaW5sb2NrX3QiICIkYWNfaW5jbHVkZXNfZGVmYXVs dA0KICAgICAgI2lmIEhBVkVfUFRIUkVBRF9IDQogICAgICAgI2luY2x1ZGUgPHB0aHJlYWQuaD4N CiAgICAgICNlbmRpZg0KIg0KaWYgdGVzdCAieCRhY19jdl90eXBlX3B0aHJlYWRfc3BpbmxvY2tf dCIgPSB4eWVzOyB0aGVuIDoNCg0KY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRg0KI2RlZmluZSBI QVZFX1BUSFJFQURfU1BJTkxPQ0tfVCAxDQpfQUNFT0YNCg0KDQpmaQ0KDQogICBpZiB0ZXN0ICRh Y19jdl90eXBlX3B0aHJlYWRfdCAhPSB5ZXM7IHRoZW4NCiAgICAgSEFWRV9QVEhSRUFEX1Q9MA0K ICAgZmkNCiAgIGlmIHRlc3QgJGFjX2N2X3R5cGVfcHRocmVhZF9zcGlubG9ja190ICE9IHllczsg dGhlbg0KICAgICBIQVZFX1BUSFJFQURfU1BJTkxPQ0tfVD0wDQogICBmaQ0KDQogICBpZiB0ZXN0 ICRhY19jdl9oZWFkZXJfcHRocmVhZF9oICE9IHllcyB8fA0KICAgICAgdGVzdCAkYWNfY3ZfdHlw ZV9wdGhyZWFkX3QgIT0geWVzIHx8DQogICAgICB0ZXN0ICRhY19jdl90eXBlX3B0aHJlYWRfc3Bp bmxvY2tfdCAhPSB5ZXM7IHRoZW4NCiAgICAgUFRIUkVBRF9IPSdwdGhyZWFkLmgnDQogICBlbHNl DQogICAgIFBUSFJFQURfSD0NCiAgIGZpDQoNCiAgICBpZiB0ZXN0IC1uICIkUFRIUkVBRF9IIjsg dGhlbg0KICBHTF9HRU5FUkFURV9QVEhSRUFEX0hfVFJVRT0NCiAgR0xfR0VORVJBVEVfUFRIUkVB RF9IX0ZBTFNFPScjJw0KZWxzZQ0KICBHTF9HRU5FUkFURV9QVEhSRUFEX0hfVFJVRT0nIycNCiAg R0xfR0VORVJBVEVfUFRIUkVBRF9IX0ZBTFNFPQ0KZmkNCg0KDQogICBMSUJfUFRIUkVBRD0NCiAg IGlmIHRlc3QgJGFjX2N2X2hlYWRlcl9wdGhyZWFkX2ggPSB5ZXM7IHRoZW4NCiAgICAgZ2xfc2F2 ZWRfbGlicz0kTElCUw0KICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVO T306IGNoZWNraW5nIGZvciBsaWJyYXJ5IGNvbnRhaW5pbmcgcHRocmVhZF9jcmVhdGUiID4mNQ0K JGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIGxpYnJhcnkgY29udGFpbmluZyBwdGhyZWFkX2NyZWF0 ZS4uLiAiID4mNjsgfQ0KaWYgJHthY19jdl9zZWFyY2hfcHRocmVhZF9jcmVhdGUrOn0gZmFsc2U7 IHRoZW4gOg0KICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNg0KZWxzZQ0KICBhY19mdW5jX3Nl YXJjaF9zYXZlX0xJQlM9JExJQlMNCmNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0 LiRhY19leHQNCi8qIGVuZCBjb25mZGVmcy5oLiAgKi8NCg0KLyogT3ZlcnJpZGUgYW55IEdDQyBp bnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuDQogICBVc2UgY2hhciBiZWNhdXNl IGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBHQ0MNCiAgIGJ1aWx0aW4gYW5k IHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovDQojaWZk ZWYgX19jcGx1c3BsdXMNCmV4dGVybiAiQyINCiNlbmRpZg0KY2hhciBwdGhyZWFkX2NyZWF0ZSAo KTsNCmludA0KbWFpbiAoKQ0Kew0KcmV0dXJuIHB0aHJlYWRfY3JlYXRlICgpOw0KICA7DQogIHJl dHVybiAwOw0KfQ0KX0FDRU9GDQpmb3IgYWNfbGliIGluICcnIHB0aHJlYWQ7IGRvDQogIGlmIHRl c3QgLXogIiRhY19saWIiOyB0aGVuDQogICAgYWNfcmVzPSJub25lIHJlcXVpcmVkIg0KICBlbHNl DQogICAgYWNfcmVzPS1sJGFjX2xpYg0KICAgIExJQlM9Ii1sJGFjX2xpYiAgJGFjX2Z1bmNfc2Vh cmNoX3NhdmVfTElCUyINCiAgZmkNCiAgaWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRo ZW4gOg0KICBhY19jdl9zZWFyY2hfcHRocmVhZF9jcmVhdGU9JGFjX3Jlcw0KZmkNCnJtIC1mIGNv cmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXA0KICAgIGNvbmZ0ZXN0JGFjX2V4 ZWV4dA0KICBpZiAke2FjX2N2X3NlYXJjaF9wdGhyZWFkX2NyZWF0ZSs6fSBmYWxzZTsgdGhlbiA6 DQogIGJyZWFrDQpmaQ0KZG9uZQ0KaWYgJHthY19jdl9zZWFyY2hfcHRocmVhZF9jcmVhdGUrOn0g ZmFsc2U7IHRoZW4gOg0KDQplbHNlDQogIGFjX2N2X3NlYXJjaF9wdGhyZWFkX2NyZWF0ZT1ubw0K ZmkNCnJtIGNvbmZ0ZXN0LiRhY19leHQNCkxJQlM9JGFjX2Z1bmNfc2VhcmNoX3NhdmVfTElCUw0K ZmkNCnsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNf Y3Zfc2VhcmNoX3B0aHJlYWRfY3JlYXRlIiA+JjUNCiRhc19lY2hvICIkYWNfY3Zfc2VhcmNoX3B0 aHJlYWRfY3JlYXRlIiA+JjY7IH0NCmFjX3Jlcz0kYWNfY3Zfc2VhcmNoX3B0aHJlYWRfY3JlYXRl DQppZiB0ZXN0ICIkYWNfcmVzIiAhPSBubzsgdGhlbiA6DQogIHRlc3QgIiRhY19yZXMiID0gIm5v bmUgcmVxdWlyZWQiIHx8IExJQlM9IiRhY19yZXMgJExJQlMiDQogIGlmIHRlc3QgIiRhY19jdl9z ZWFyY2hfcHRocmVhZF9jcmVhdGUiICE9ICJub25lIHJlcXVpcmVkIjsgdGhlbg0KICAgICAgICAg IExJQl9QVEhSRUFEPSIkYWNfY3Zfc2VhcmNoX3B0aHJlYWRfY3JlYXRlIg0KICAgICAgICBmaQ0K ZmkNCg0KICAgICBMSUJTPSIkZ2xfc2F2ZWRfbGlicyINCiAgIGZpDQoNCg0KDQoNCg0KICAjIENv ZGUgZnJvbSBtb2R1bGUgcHV0ZW52Og0KDQoNCiAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGlu ZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgcHV0ZW52IGNvbXBhdGlibGUgd2l0aCBHTlUgYW5k IFNWSUQiID4mNQ0KJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIHB1dGVudiBjb21wYXRpYmxlIHdp dGggR05VIGFuZCBTVklELi4uICIgPiY2OyB9DQppZiAke2dsX2N2X2Z1bmNfc3ZpZF9wdXRlbnYr On0gZmFsc2U7IHRoZW4gOg0KICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNg0KZWxzZQ0KICBp ZiB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IHllczsgdGhlbiA6DQogICAgICAgICAgICAgICBn bF9jdl9mdW5jX3N2aWRfcHV0ZW52PW5vDQplbHNlDQogIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNF T0YgPmNvbmZ0ZXN0LiRhY19leHQNCi8qIGVuZCBjb25mZGVmcy5oLiAgKi8NCiRhY19pbmNsdWRl c19kZWZhdWx0DQppbnQNCm1haW4gKCkNCnsNCg0KICAgIC8qIFB1dCBpdCBpbiBlbnYuICAqLw0K ICAgIGlmIChwdXRlbnYgKCJDT05GVEVTVF9wdXRlbnY9dmFsIikpDQogICAgICByZXR1cm4gMTsN Cg0KICAgIC8qIFRyeSB0byByZW1vdmUgaXQuICAqLw0KICAgIGlmIChwdXRlbnYgKCJDT05GVEVT VF9wdXRlbnYiKSkNCiAgICAgIHJldHVybiAyOw0KDQogICAgLyogTWFrZSBzdXJlIGl0IHdhcyBk ZWxldGVkLiAgKi8NCiAgICBpZiAoZ2V0ZW52ICgiQ09ORlRFU1RfcHV0ZW52IikgIT0gMCkNCiAg ICAgIHJldHVybiAzOw0KDQogICAgcmV0dXJuIDA7DQoNCiAgOw0KICByZXR1cm4gMDsNCn0NCl9B Q0VPRg0KaWYgYWNfZm5fY190cnlfcnVuICIkTElORU5PIjsgdGhlbiA6DQogIGdsX2N2X2Z1bmNf c3ZpZF9wdXRlbnY9eWVzDQplbHNlDQogIGdsX2N2X2Z1bmNfc3ZpZF9wdXRlbnY9bm8NCmZpDQpy bSAtZiBjb3JlICouY29yZSBjb3JlLmNvbmZ0ZXN0LiogZ21vbi5vdXQgYmIub3V0IGNvbmZ0ZXN0 JGFjX2V4ZWV4dCBcDQogIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuYmVhbSBjb25mdGVz dC4kYWNfZXh0DQpmaQ0KDQoNCmZpDQp7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJ TkVOT306IHJlc3VsdDogJGdsX2N2X2Z1bmNfc3ZpZF9wdXRlbnYiID4mNQ0KJGFzX2VjaG8gIiRn bF9jdl9mdW5jX3N2aWRfcHV0ZW52IiA+JjY7IH0NCiAgaWYgdGVzdCAkZ2xfY3ZfZnVuY19zdmlk X3B1dGVudiA9IG5vOyB0aGVuDQogICAgUkVQTEFDRV9QVVRFTlY9MQ0KDQoNCg0KDQoNCg0KDQoN CiAgZ2xfTElCT0JKUz0iJGdsX0xJQk9CSlMgcHV0ZW52LiRhY19vYmpleHQiDQoNCiAgZmkNCg0K DQoNCg0KICBHTlVMSUJfUFVURU5WPTENCg0KDQoNCiRhc19lY2hvICIjZGVmaW5lIEdOVUxJQl9U RVNUX1BVVEVOViAxIiA+PmNvbmZkZWZzLmgNCg0KDQoNCiAgIyBDb2RlIGZyb20gbW9kdWxlIHF1 b3RlOg0KDQoNCg0KDQoNCg0KDQoNCg0KICBnbF9MSUJPQkpTPSIkZ2xfTElCT0JKUyBxdW90ZS4k YWNfb2JqZXh0Ig0KDQoNCg0KICAjIENvZGUgZnJvbSBtb2R1bGUgcXVvdGVhcmc6DQoNCg0KDQoN Cg0KDQoNCg0KDQogIGdsX0xJQk9CSlM9IiRnbF9MSUJPQkpTIHF1b3RlYXJnLiRhY19vYmpleHQi DQoNCg0KICAjIENvZGUgZnJvbSBtb2R1bGUgcXVvdGVhcmctc2ltcGxlOg0KICAjIENvZGUgZnJv bSBtb2R1bGUgcmFuZGludDoNCiAgIyBDb2RlIGZyb20gbW9kdWxlIHJhbmRwZXJtOg0KICAjIENv ZGUgZnJvbSBtb2R1bGUgcmFuZHJlYWQ6DQogICMgQ29kZSBmcm9tIG1vZHVsZSByZWFkLWZpbGU6 DQoNCg0KDQoNCg0KDQoNCg0KDQogIGdsX0xJQk9CSlM9IiRnbF9MSUJPQkpTIHJlYWQtZmlsZS4k YWNfb2JqZXh0Ig0KDQogIDoNCg0KICAjIENvZGUgZnJvbSBtb2R1bGUgcmVhZGxpbms6DQoNCg0K DQogIGlmIHRlc3QgJGFjX2N2X2Z1bmNfcmVhZGxpbmsgPSBubzsgdGhlbg0KICAgIEhBVkVfUkVB RExJTks9MA0KDQoNCg0KDQoNCg0KDQoNCiAgZ2xfTElCT0JKUz0iJGdsX0xJQk9CSlMgcmVhZGxp bmsuJGFjX29iamV4dCINCg0KDQogIDoNCg0KICBlbHNlDQogICAgeyAkYXNfZWNobyAiJGFzX21l OiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIHJlYWRsaW5rIHNpZ25hdHVy ZSBpcyBjb3JyZWN0IiA+JjUNCiRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgcmVhZGxpbmsg c2lnbmF0dXJlIGlzIGNvcnJlY3QuLi4gIiA+JjY7IH0NCmlmICR7Z2xfY3ZfZGVjbF9yZWFkbGlu a193b3Jrcys6fSBmYWxzZTsgdGhlbiA6DQogICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2DQpl bHNlDQogIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQNCi8qIGVu ZCBjb25mZGVmcy5oLiAgKi8NCiNpbmNsdWRlIDx1bmlzdGQuaD4NCiAgICAgIC8qIENhdXNlIGNv bXBpbGF0aW9uIGZhaWx1cmUgaWYgb3JpZ2luYWwgZGVjbGFyYXRpb24gaGFzIHdyb25nIHR5cGUu ICAqLw0KICAgICAgc3NpemVfdCByZWFkbGluayAoY29uc3QgY2hhciAqLCBjaGFyICosIHNpemVf dCk7DQppbnQNCm1haW4gKCkNCnsNCg0KICA7DQogIHJldHVybiAwOw0KfQ0KX0FDRU9GDQppZiBh Y19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6DQogIGdsX2N2X2RlY2xfcmVhZGxp bmtfd29ya3M9eWVzDQplbHNlDQogIGdsX2N2X2RlY2xfcmVhZGxpbmtfd29ya3M9bm8NCmZpDQpy bSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19l eHQNCmZpDQp7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDog JGdsX2N2X2RlY2xfcmVhZGxpbmtfd29ya3MiID4mNQ0KJGFzX2VjaG8gIiRnbF9jdl9kZWNsX3Jl YWRsaW5rX3dvcmtzIiA+JjY7IH0NCiAgICAgICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2Fz X2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciByZWFkbGluayBoYW5kbGVzIHRyYWls aW5nIHNsYXNoIGNvcnJlY3RseSIgPiY1DQokYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIHJl YWRsaW5rIGhhbmRsZXMgdHJhaWxpbmcgc2xhc2ggY29ycmVjdGx5Li4uICIgPiY2OyB9DQppZiAk e2dsX2N2X2Z1bmNfcmVhZGxpbmtfd29ya3MrOn0gZmFsc2U7IHRoZW4gOg0KICAkYXNfZWNob19u ICIoY2FjaGVkKSAiID4mNg0KZWxzZQ0KICAjIFdlIGhhdmUgcmVhZGxpbmssIHNvIGFzc3VtZSBs biAtcyB3b3Jrcy4NCiAgICAgICBsbiAtcyBjb25mdGVzdC5uby1zdWNoIGNvbmZ0ZXN0LmxpbmsN CiAgICAgICBsbiAtcyBjb25mdGVzdC5saW5rIGNvbmZ0ZXN0LmxuazINCiAgICAgICBpZiB0ZXN0 ICIkY3Jvc3NfY29tcGlsaW5nIiA9IHllczsgdGhlbiA6DQogIGdsX2N2X2Z1bmNfcmVhZGxpbmtf d29ya3M9Imd1ZXNzaW5nIG5vIg0KZWxzZQ0KICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5j b25mdGVzdC4kYWNfZXh0DQovKiBlbmQgY29uZmRlZnMuaC4gICovDQojaW5jbHVkZSA8dW5pc3Rk Lmg+DQoNCmludA0KbWFpbiAoKQ0Kew0KY2hhciBidWZbMjBdOw0KICAgICAgcmV0dXJuIHJlYWRs aW5rICgiY29uZnRlc3QubG5rMi8iLCBidWYsIHNpemVvZiBidWYpICE9IC0xOw0KICA7DQogIHJl dHVybiAwOw0KfQ0KX0FDRU9GDQppZiBhY19mbl9jX3RyeV9ydW4gIiRMSU5FTk8iOyB0aGVuIDoN CiAgZ2xfY3ZfZnVuY19yZWFkbGlua193b3Jrcz15ZXMNCmVsc2UNCiAgZ2xfY3ZfZnVuY19yZWFk bGlua193b3Jrcz1ubw0KZmkNCnJtIC1mIGNvcmUgKi5jb3JlIGNvcmUuY29uZnRlc3QuKiBnbW9u Lm91dCBiYi5vdXQgY29uZnRlc3QkYWNfZXhlZXh0IFwNCiAgY29uZnRlc3QuJGFjX29iamV4dCBj b25mdGVzdC5iZWFtIGNvbmZ0ZXN0LiRhY19leHQNCmZpDQoNCiAgICAgIHJtIC1mIGNvbmZ0ZXN0 LmxpbmsgY29uZnRlc3QubG5rMg0KZmkNCnsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0k TElORU5PfTogcmVzdWx0OiAkZ2xfY3ZfZnVuY19yZWFkbGlua193b3JrcyIgPiY1DQokYXNfZWNo byAiJGdsX2N2X2Z1bmNfcmVhZGxpbmtfd29ya3MiID4mNjsgfQ0KICAgIGlmIHRlc3QgIiRnbF9j dl9mdW5jX3JlYWRsaW5rX3dvcmtzIiAhPSB5ZXM7IHRoZW4NCg0KJGFzX2VjaG8gIiNkZWZpbmUg UkVBRExJTktfVFJBSUxJTkdfU0xBU0hfQlVHIDEiID4+Y29uZmRlZnMuaA0KDQogICAgICBSRVBM QUNFX1JFQURMSU5LPTENCg0KDQoNCg0KDQoNCg0KDQogIGdsX0xJQk9CSlM9IiRnbF9MSUJPQkpT IHJlYWRsaW5rLiRhY19vYmpleHQiDQoNCiAgICBlbGlmIHRlc3QgIiRnbF9jdl9kZWNsX3JlYWRs aW5rX3dvcmtzIiAhPSB5ZXM7IHRoZW4NCiAgICAgIFJFUExBQ0VfUkVBRExJTks9MQ0KDQoNCg0K DQoNCg0KDQoNCiAgZ2xfTElCT0JKUz0iJGdsX0xJQk9CSlMgcmVhZGxpbmsuJGFjX29iamV4dCIN Cg0KICAgIGZpDQogIGZpDQoNCg0KDQoNCiAgR05VTElCX1JFQURMSU5LPTENCg0KDQoNCiRhc19l Y2hvICIjZGVmaW5lIEdOVUxJQl9URVNUX1JFQURMSU5LIDEiID4+Y29uZmRlZnMuaA0KDQoNCg0K ICAjIENvZGUgZnJvbSBtb2R1bGUgcmVhZGxpbmthdDoNCg0KDQoNCg0KDQogIGlmIHRlc3QgJGFj X2N2X2Z1bmNfcmVhZGxpbmthdCA9IG5vOyB0aGVuDQogICAgSEFWRV9SRUFETElOS0FUPTANCg0K DQoNCg0KDQoNCg0KDQogIGdsX0xJQk9CSlM9IiRnbF9MSUJPQkpTIHJlYWRsaW5rYXQuJGFjX29i amV4dCINCg0KICBmaQ0KDQoNCg0KDQogIEdOVUxJQl9SRUFETElOS0FUPTENCg0KDQoNCiRhc19l Y2hvICIjZGVmaW5lIEdOVUxJQl9URVNUX1JFQURMSU5LQVQgMSIgPj5jb25mZGVmcy5oDQoNCg0K DQogICMgQ29kZSBmcm9tIG1vZHVsZSByZWFkdG9rZW5zOg0KDQoNCg0KDQoNCg0KDQoNCg0KICBn bF9MSUJPQkpTPSIkZ2xfTElCT0JKUyByZWFkdG9rZW5zLiRhY19vYmpleHQiDQoNCg0KICAgIDoN Cg0KICAjIENvZGUgZnJvbSBtb2R1bGUgcmVhZHRva2VuczA6DQogICMgQ29kZSBmcm9tIG1vZHVs ZSByZWFkdXRtcDoNCg0KDQoNCg0KICBpZiB0ZXN0ICRhY19jdl9oZWFkZXJfdXRtcF9oID0geWVz IHx8IHRlc3QgJGFjX2N2X2hlYWRlcl91dG1weF9oID0geWVzOyB0aGVuDQoNCg0KDQoNCg0KDQoN Cg0KICBnbF9MSUJPQkpTPSIkZ2xfTElCT0JKUyByZWFkdXRtcC4kYWNfb2JqZXh0Ig0KDQoNCg0K DQogICAgYWNfZm5fY19jaGVja19kZWNsICIkTElORU5PIiAiZ2V0dXRlbnQiICJhY19jdl9oYXZl X2RlY2xfZ2V0dXRlbnQiICINCi8qIDxzeXMvdHlwZXMuaD4gaXMgYSBwcmVyZXF1aXNpdGUgb2Yg PHV0bXAuaD4gb24gRnJlZUJTRCA4LjAsIE9wZW5CU0QgNC42LiAgKi8NCiNpbmNsdWRlIDxzeXMv dHlwZXMuaD4NCiNpZmRlZiBIQVZFX1VUTVBfSA0KIyBpbmNsdWRlIDx1dG1wLmg+DQojZW5kaWYN Cg0KIg0KaWYgdGVzdCAieCRhY19jdl9oYXZlX2RlY2xfZ2V0dXRlbnQiID0geHllczsgdGhlbiA6 DQogIGFjX2hhdmVfZGVjbD0xDQplbHNlDQogIGFjX2hhdmVfZGVjbD0wDQpmaQ0KDQpjYXQgPj5j b25mZGVmcy5oIDw8X0FDRU9GDQojZGVmaW5lIEhBVkVfREVDTF9HRVRVVEVOVCAkYWNfaGF2ZV9k ZWNsDQpfQUNFT0YNCg0KICAgIHV0bXBfaW5jbHVkZXM9IlwNCiRhY19pbmNsdWRlc19kZWZhdWx0 DQojaWZkZWYgSEFWRV9VVE1QWF9IDQojIGluY2x1ZGUgPHV0bXB4Lmg+DQojZW5kaWYNCiNpZmRl ZiBIQVZFX1VUTVBfSA0KIyBpZiBkZWZpbmVkIF9USFJFQURfU0FGRSAmJiBkZWZpbmVkIFVUTVBf REFUQV9JTklUDQogICAvKiBXaGVuIGluY2x1ZGluZyBib3RoIHV0bXAuaCBhbmQgdXRtcHguaCBv biBBSVggNC4zLCB3aXRoIF9USFJFQURfU0FGRQ0KICAgICAgZGVmaW5lZCwgd29yayBhcm91bmQg dGhlIGR1cGxpY2F0ZSBzdHJ1Y3QgdXRtcF9kYXRhIGRlY2xhcmF0aW9uLiAgKi8NCiMgIGRlZmlu ZSB1dG1wX2RhdGEgZ2xfYWl4XzRfM193b3JrYXJvdW5kX3V0bXBfZGF0YQ0KIyBlbmRpZg0KIyBp bmNsdWRlIDx1dG1wLmg+DQojZW5kaWYNCiINCiAgICBhY19mbl9jX2NoZWNrX21lbWJlciAiJExJ TkVOTyIgInN0cnVjdCB1dG1weCIgInV0X3VzZXIiICJhY19jdl9tZW1iZXJfc3RydWN0X3V0bXB4 X3V0X3VzZXIiICIkdXRtcF9pbmNsdWRlcw0KIg0KaWYgdGVzdCAieCRhY19jdl9tZW1iZXJfc3Ry dWN0X3V0bXB4X3V0X3VzZXIiID0geHllczsgdGhlbiA6DQoNCmNhdCA+PmNvbmZkZWZzLmggPDxf QUNFT0YNCiNkZWZpbmUgSEFWRV9TVFJVQ1RfVVRNUFhfVVRfVVNFUiAxDQpfQUNFT0YNCg0KDQpm aQ0KDQogICAgYWNfZm5fY19jaGVja19tZW1iZXIgIiRMSU5FTk8iICJzdHJ1Y3QgdXRtcCIgInV0 X3VzZXIiICJhY19jdl9tZW1iZXJfc3RydWN0X3V0bXBfdXRfdXNlciIgIiR1dG1wX2luY2x1ZGVz DQoiDQppZiB0ZXN0ICJ4JGFjX2N2X21lbWJlcl9zdHJ1Y3RfdXRtcF91dF91c2VyIiA9IHh5ZXM7 IHRoZW4gOg0KDQpjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GDQojZGVmaW5lIEhBVkVfU1RSVUNU X1VUTVBfVVRfVVNFUiAxDQpfQUNFT0YNCg0KDQpmaQ0KDQogICAgYWNfZm5fY19jaGVja19tZW1i ZXIgIiRMSU5FTk8iICJzdHJ1Y3QgdXRtcHgiICJ1dF9uYW1lIiAiYWNfY3ZfbWVtYmVyX3N0cnVj dF91dG1weF91dF9uYW1lIiAiJHV0bXBfaW5jbHVkZXMNCiINCmlmIHRlc3QgIngkYWNfY3ZfbWVt YmVyX3N0cnVjdF91dG1weF91dF9uYW1lIiA9IHh5ZXM7IHRoZW4gOg0KDQpjYXQgPj5jb25mZGVm cy5oIDw8X0FDRU9GDQojZGVmaW5lIEhBVkVfU1RSVUNUX1VUTVBYX1VUX05BTUUgMQ0KX0FDRU9G DQoNCg0KZmkNCg0KICAgIGFjX2ZuX2NfY2hlY2tfbWVtYmVyICIkTElORU5PIiAic3RydWN0IHV0 bXAiICJ1dF9uYW1lIiAiYWNfY3ZfbWVtYmVyX3N0cnVjdF91dG1wX3V0X25hbWUiICIkdXRtcF9p bmNsdWRlcw0KIg0KaWYgdGVzdCAieCRhY19jdl9tZW1iZXJfc3RydWN0X3V0bXBfdXRfbmFtZSIg PSB4eWVzOyB0aGVuIDoNCg0KY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRg0KI2RlZmluZSBIQVZF X1NUUlVDVF9VVE1QX1VUX05BTUUgMQ0KX0FDRU9GDQoNCg0KZmkNCg0KICAgIGFjX2ZuX2NfY2hl Y2tfbWVtYmVyICIkTElORU5PIiAic3RydWN0IHV0bXB4IiAidXRfdHlwZSIgImFjX2N2X21lbWJl cl9zdHJ1Y3RfdXRtcHhfdXRfdHlwZSIgIiR1dG1wX2luY2x1ZGVzDQoiDQppZiB0ZXN0ICJ4JGFj X2N2X21lbWJlcl9zdHJ1Y3RfdXRtcHhfdXRfdHlwZSIgPSB4eWVzOyB0aGVuIDoNCg0KY2F0ID4+ Y29uZmRlZnMuaCA8PF9BQ0VPRg0KI2RlZmluZSBIQVZFX1NUUlVDVF9VVE1QWF9VVF9UWVBFIDEN Cl9BQ0VPRg0KDQoNCmZpDQoNCiAgICBhY19mbl9jX2NoZWNrX21lbWJlciAiJExJTkVOTyIgInN0 cnVjdCB1dG1wIiAidXRfdHlwZSIgImFjX2N2X21lbWJlcl9zdHJ1Y3RfdXRtcF91dF90eXBlIiAi JHV0bXBfaW5jbHVkZXMNCiINCmlmIHRlc3QgIngkYWNfY3ZfbWVtYmVyX3N0cnVjdF91dG1wX3V0 X3R5cGUiID0geHllczsgdGhlbiA6DQoNCmNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YNCiNkZWZp bmUgSEFWRV9TVFJVQ1RfVVRNUF9VVF9UWVBFIDENCl9BQ0VPRg0KDQoNCmZpDQoNCiAgICBhY19m bl9jX2NoZWNrX21lbWJlciAiJExJTkVOTyIgInN0cnVjdCB1dG1weCIgInV0X3BpZCIgImFjX2N2 X21lbWJlcl9zdHJ1Y3RfdXRtcHhfdXRfcGlkIiAiJHV0bXBfaW5jbHVkZXMNCiINCmlmIHRlc3Qg IngkYWNfY3ZfbWVtYmVyX3N0cnVjdF91dG1weF91dF9waWQiID0geHllczsgdGhlbiA6DQoNCmNh dCA+PmNvbmZkZWZzLmggPDxfQUNFT0YNCiNkZWZpbmUgSEFWRV9TVFJVQ1RfVVRNUFhfVVRfUElE IDENCl9BQ0VPRg0KDQoNCmZpDQoNCiAgICBhY19mbl9jX2NoZWNrX21lbWJlciAiJExJTkVOTyIg InN0cnVjdCB1dG1wIiAidXRfcGlkIiAiYWNfY3ZfbWVtYmVyX3N0cnVjdF91dG1wX3V0X3BpZCIg IiR1dG1wX2luY2x1ZGVzDQoiDQppZiB0ZXN0ICJ4JGFjX2N2X21lbWJlcl9zdHJ1Y3RfdXRtcF91 dF9waWQiID0geHllczsgdGhlbiA6DQoNCmNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YNCiNkZWZp bmUgSEFWRV9TVFJVQ1RfVVRNUF9VVF9QSUQgMQ0KX0FDRU9GDQoNCg0KZmkNCg0KICAgIGFjX2Zu X2NfY2hlY2tfbWVtYmVyICIkTElORU5PIiAic3RydWN0IHV0bXB4IiAidXRfaWQiICJhY19jdl9t ZW1iZXJfc3RydWN0X3V0bXB4X3V0X2lkIiAiJHV0bXBfaW5jbHVkZXMNCiINCmlmIHRlc3QgIngk YWNfY3ZfbWVtYmVyX3N0cnVjdF91dG1weF91dF9pZCIgPSB4eWVzOyB0aGVuIDoNCg0KY2F0ID4+ Y29uZmRlZnMuaCA8PF9BQ0VPRg0KI2RlZmluZSBIQVZFX1NUUlVDVF9VVE1QWF9VVF9JRCAxDQpf QUNFT0YNCg0KDQpmaQ0KDQogICAgYWNfZm5fY19jaGVja19tZW1iZXIgIiRMSU5FTk8iICJzdHJ1 Y3QgdXRtcCIgInV0X2lkIiAiYWNfY3ZfbWVtYmVyX3N0cnVjdF91dG1wX3V0X2lkIiAiJHV0bXBf aW5jbHVkZXMNCiINCmlmIHRlc3QgIngkYWNfY3ZfbWVtYmVyX3N0cnVjdF91dG1wX3V0X2lkIiA9 IHh5ZXM7IHRoZW4gOg0KDQpjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GDQojZGVmaW5lIEhBVkVf U1RSVUNUX1VUTVBfVVRfSUQgMQ0KX0FDRU9GDQoNCg0KZmkNCg0KICAgIGFjX2ZuX2NfY2hlY2tf bWVtYmVyICIkTElORU5PIiAic3RydWN0IHV0bXB4IiAidXRfZXhpdCIgImFjX2N2X21lbWJlcl9z dHJ1Y3RfdXRtcHhfdXRfZXhpdCIgIiR1dG1wX2luY2x1ZGVzDQoiDQppZiB0ZXN0ICJ4JGFjX2N2 X21lbWJlcl9zdHJ1Y3RfdXRtcHhfdXRfZXhpdCIgPSB4eWVzOyB0aGVuIDoNCg0KY2F0ID4+Y29u ZmRlZnMuaCA8PF9BQ0VPRg0KI2RlZmluZSBIQVZFX1NUUlVDVF9VVE1QWF9VVF9FWElUIDENCl9B Q0VPRg0KDQoNCmZpDQoNCiAgICBhY19mbl9jX2NoZWNrX21lbWJlciAiJExJTkVOTyIgInN0cnVj dCB1dG1wIiAidXRfZXhpdCIgImFjX2N2X21lbWJlcl9zdHJ1Y3RfdXRtcF91dF9leGl0IiAiJHV0 bXBfaW5jbHVkZXMNCiINCmlmIHRlc3QgIngkYWNfY3ZfbWVtYmVyX3N0cnVjdF91dG1wX3V0X2V4 aXQiID0geHllczsgdGhlbiA6DQoNCmNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YNCiNkZWZpbmUg SEFWRV9TVFJVQ1RfVVRNUF9VVF9FWElUIDENCl9BQ0VPRg0KDQoNCmZpDQoNCg0KICAgIGFjX2Zu X2NfY2hlY2tfbWVtYmVyICIkTElORU5PIiAic3RydWN0IHV0bXB4IiAidXRfZXhpdC51dF9leGl0 IiAiYWNfY3ZfbWVtYmVyX3N0cnVjdF91dG1weF91dF9leGl0X3V0X2V4aXQiICIkdXRtcF9pbmNs dWRlcw0KIg0KaWYgdGVzdCAieCRhY19jdl9tZW1iZXJfc3RydWN0X3V0bXB4X3V0X2V4aXRfdXRf ZXhpdCIgPSB4eWVzOyB0aGVuIDoNCg0KY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRg0KI2RlZmlu ZSBIQVZFX1NUUlVDVF9VVE1QWF9VVF9FWElUX1VUX0VYSVQgMQ0KX0FDRU9GDQoNCg0KZmkNCg0K ICAgIGFjX2ZuX2NfY2hlY2tfbWVtYmVyICIkTElORU5PIiAic3RydWN0IHV0bXAiICJ1dF9leGl0 LnV0X2V4aXQiICJhY19jdl9tZW1iZXJfc3RydWN0X3V0bXBfdXRfZXhpdF91dF9leGl0IiAiJHV0 bXBfaW5jbHVkZXMNCiINCmlmIHRlc3QgIngkYWNfY3ZfbWVtYmVyX3N0cnVjdF91dG1wX3V0X2V4 aXRfdXRfZXhpdCIgPSB4eWVzOyB0aGVuIDoNCg0KY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRg0K I2RlZmluZSBIQVZFX1NUUlVDVF9VVE1QX1VUX0VYSVRfVVRfRVhJVCAxDQpfQUNFT0YNCg0KDQpm aQ0KDQogICAgYWNfZm5fY19jaGVja19tZW1iZXIgIiRMSU5FTk8iICJzdHJ1Y3QgdXRtcHgiICJ1 dF9leGl0LmVfZXhpdCIgImFjX2N2X21lbWJlcl9zdHJ1Y3RfdXRtcHhfdXRfZXhpdF9lX2V4aXQi ICIkdXRtcF9pbmNsdWRlcw0KIg0KaWYgdGVzdCAieCRhY19jdl9tZW1iZXJfc3RydWN0X3V0bXB4 X3V0X2V4aXRfZV9leGl0IiA9IHh5ZXM7IHRoZW4gOg0KDQpjYXQgPj5jb25mZGVmcy5oIDw8X0FD RU9GDQojZGVmaW5lIEhBVkVfU1RSVUNUX1VUTVBYX1VUX0VYSVRfRV9FWElUIDENCl9BQ0VPRg0K DQoNCmZpDQoNCiAgICBhY19mbl9jX2NoZWNrX21lbWJlciAiJExJTkVOTyIgInN0cnVjdCB1dG1w IiAidXRfZXhpdC5lX2V4aXQiICJhY19jdl9tZW1iZXJfc3RydWN0X3V0bXBfdXRfZXhpdF9lX2V4 aXQiICIkdXRtcF9pbmNsdWRlcw0KIg0KaWYgdGVzdCAieCRhY19jdl9tZW1iZXJfc3RydWN0X3V0 bXBfdXRfZXhpdF9lX2V4aXQiID0geHllczsgdGhlbiA6DQoNCmNhdCA+PmNvbmZkZWZzLmggPDxf QUNFT0YNCiNkZWZpbmUgSEFWRV9TVFJVQ1RfVVRNUF9VVF9FWElUX0VfRVhJVCAxDQpfQUNFT0YN Cg0KDQpmaQ0KDQoNCiAgICBhY19mbl9jX2NoZWNrX21lbWJlciAiJExJTkVOTyIgInN0cnVjdCB1 dG1weCIgInV0X2V4aXQudXRfdGVybWluYXRpb24iICJhY19jdl9tZW1iZXJfc3RydWN0X3V0bXB4 X3V0X2V4aXRfdXRfdGVybWluYXRpb24iICIkdXRtcF9pbmNsdWRlcw0KIg0KaWYgdGVzdCAieCRh Y19jdl9tZW1iZXJfc3RydWN0X3V0bXB4X3V0X2V4aXRfdXRfdGVybWluYXRpb24iID0geHllczsg dGhlbiA6DQoNCmNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YNCiNkZWZpbmUgSEFWRV9TVFJVQ1Rf VVRNUFhfVVRfRVhJVF9VVF9URVJNSU5BVElPTiAxDQpfQUNFT0YNCg0KDQpmaQ0KDQogICAgYWNf Zm5fY19jaGVja19tZW1iZXIgIiRMSU5FTk8iICJzdHJ1Y3QgdXRtcCIgInV0X2V4aXQudXRfdGVy bWluYXRpb24iICJhY19jdl9tZW1iZXJfc3RydWN0X3V0bXBfdXRfZXhpdF91dF90ZXJtaW5hdGlv biIgIiR1dG1wX2luY2x1ZGVzDQoiDQppZiB0ZXN0ICJ4JGFjX2N2X21lbWJlcl9zdHJ1Y3RfdXRt cF91dF9leGl0X3V0X3Rlcm1pbmF0aW9uIiA9IHh5ZXM7IHRoZW4gOg0KDQpjYXQgPj5jb25mZGVm cy5oIDw8X0FDRU9GDQojZGVmaW5lIEhBVkVfU1RSVUNUX1VUTVBfVVRfRVhJVF9VVF9URVJNSU5B VElPTiAxDQpfQUNFT0YNCg0KDQpmaQ0KDQogICAgYWNfZm5fY19jaGVja19tZW1iZXIgIiRMSU5F Tk8iICJzdHJ1Y3QgdXRtcHgiICJ1dF9leGl0LmVfdGVybWluYXRpb24iICJhY19jdl9tZW1iZXJf c3RydWN0X3V0bXB4X3V0X2V4aXRfZV90ZXJtaW5hdGlvbiIgIiR1dG1wX2luY2x1ZGVzDQoiDQpp ZiB0ZXN0ICJ4JGFjX2N2X21lbWJlcl9zdHJ1Y3RfdXRtcHhfdXRfZXhpdF9lX3Rlcm1pbmF0aW9u IiA9IHh5ZXM7IHRoZW4gOg0KDQpjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GDQojZGVmaW5lIEhB VkVfU1RSVUNUX1VUTVBYX1VUX0VYSVRfRV9URVJNSU5BVElPTiAxDQpfQUNFT0YNCg0KDQpmaQ0K DQogICAgYWNfZm5fY19jaGVja19tZW1iZXIgIiRMSU5FTk8iICJzdHJ1Y3QgdXRtcCIgInV0X2V4 aXQuZV90ZXJtaW5hdGlvbiIgImFjX2N2X21lbWJlcl9zdHJ1Y3RfdXRtcF91dF9leGl0X2VfdGVy bWluYXRpb24iICIkdXRtcF9pbmNsdWRlcw0KIg0KaWYgdGVzdCAieCRhY19jdl9tZW1iZXJfc3Ry dWN0X3V0bXBfdXRfZXhpdF9lX3Rlcm1pbmF0aW9uIiA9IHh5ZXM7IHRoZW4gOg0KDQpjYXQgPj5j b25mZGVmcy5oIDw8X0FDRU9GDQojZGVmaW5lIEhBVkVfU1RSVUNUX1VUTVBfVVRfRVhJVF9FX1RF Uk1JTkFUSU9OIDENCl9BQ0VPRg0KDQoNCmZpDQoNCiAgZmkNCg0KICAjIENvZGUgZnJvbSBtb2R1 bGUgcmVhbGxvYy1nbnU6DQoNCg0KICAgIGZvciBhY19oZWFkZXIgaW4gc3RkbGliLmgNCmRvIDoN CiAgYWNfZm5fY19jaGVja19oZWFkZXJfbW9uZ3JlbCAiJExJTkVOTyIgInN0ZGxpYi5oIiAiYWNf Y3ZfaGVhZGVyX3N0ZGxpYl9oIiAiJGFjX2luY2x1ZGVzX2RlZmF1bHQiDQppZiB0ZXN0ICJ4JGFj X2N2X2hlYWRlcl9zdGRsaWJfaCIgPSB4eWVzOyB0aGVuIDoNCiAgY2F0ID4+Y29uZmRlZnMuaCA8 PF9BQ0VPRg0KI2RlZmluZSBIQVZFX1NURExJQl9IIDENCl9BQ0VPRg0KDQpmaQ0KDQpkb25lDQoN CnsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIEdO VSBsaWJjIGNvbXBhdGlibGUgcmVhbGxvYyIgPiY1DQokYXNfZWNob19uICJjaGVja2luZyBmb3Ig R05VIGxpYmMgY29tcGF0aWJsZSByZWFsbG9jLi4uICIgPiY2OyB9DQppZiAke2FjX2N2X2Z1bmNf cmVhbGxvY18wX25vbm51bGwrOn0gZmFsc2U7IHRoZW4gOg0KICAkYXNfZWNob19uICIoY2FjaGVk KSAiID4mNg0KZWxzZQ0KICBpZiB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IHllczsgdGhlbiA6 DQogIGFjX2N2X2Z1bmNfcmVhbGxvY18wX25vbm51bGw9bm8NCmVsc2UNCiAgY2F0IGNvbmZkZWZz LmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dA0KLyogZW5kIGNvbmZkZWZzLmguICAqLw0K I2lmIGRlZmluZWQgU1REQ19IRUFERVJTIHx8IGRlZmluZWQgSEFWRV9TVERMSUJfSA0KIyBpbmNs dWRlIDxzdGRsaWIuaD4NCiNlbHNlDQpjaGFyICpyZWFsbG9jICgpOw0KI2VuZGlmDQoNCmludA0K bWFpbiAoKQ0Kew0KcmV0dXJuICEgcmVhbGxvYyAoMCwgMCk7DQogIDsNCiAgcmV0dXJuIDA7DQp9 DQpfQUNFT0YNCmlmIGFjX2ZuX2NfdHJ5X3J1biAiJExJTkVOTyI7IHRoZW4gOg0KICBhY19jdl9m dW5jX3JlYWxsb2NfMF9ub25udWxsPXllcw0KZWxzZQ0KICBhY19jdl9mdW5jX3JlYWxsb2NfMF9u b25udWxsPW5vDQpmaQ0Kcm0gLWYgY29yZSAqLmNvcmUgY29yZS5jb25mdGVzdC4qIGdtb24ub3V0 IGJiLm91dCBjb25mdGVzdCRhY19leGVleHQgXA0KICBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0 ZXN0LmJlYW0gY29uZnRlc3QuJGFjX2V4dA0KZmkNCg0KZmkNCnsgJGFzX2VjaG8gIiRhc19tZTok e2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfZnVuY19yZWFsbG9jXzBfbm9ubnVs bCIgPiY1DQokYXNfZWNobyAiJGFjX2N2X2Z1bmNfcmVhbGxvY18wX25vbm51bGwiID4mNjsgfQ0K aWYgdGVzdCAkYWNfY3ZfZnVuY19yZWFsbG9jXzBfbm9ubnVsbCA9IHllczsgdGhlbiA6DQoNCiRh c19lY2hvICIjZGVmaW5lIEhBVkVfUkVBTExPQ19HTlUgMSIgPj5jb25mZGVmcy5oDQoNCmVsc2UN CiAgJGFzX2VjaG8gIiNkZWZpbmUgSEFWRV9SRUFMTE9DX0dOVSAwIiA+PmNvbmZkZWZzLmgNCg0K DQoNCg0KDQoNCg0KDQoNCg0KICBnbF9MSUJPQkpTPSIkZ2xfTElCT0JKUyByZWFsbG9jLiRhY19v YmpleHQiDQoNCiAgUkVQTEFDRV9SRUFMTE9DPTENCg0KDQpmaQ0KDQoNCg0KDQpjYXQgPj5jb25m ZGVmcy5oIDw8X0FDRU9GDQojZGVmaW5lIEdOVUxJQl9SRUFMTE9DX0dOVSAxDQpfQUNFT0YNCg0K DQogICMgQ29kZSBmcm9tIG1vZHVsZSByZWFsbG9jLXBvc2l4Og0KDQoNCg0KICBpZiB0ZXN0ICRn bF9jdl9mdW5jX21hbGxvY19wb3NpeCA9IHllczsgdGhlbg0KDQokYXNfZWNobyAiI2RlZmluZSBI QVZFX1JFQUxMT0NfUE9TSVggMSIgPj5jb25mZGVmcy5oDQoNCiAgZWxzZQ0KDQoNCg0KDQoNCg0K DQoNCg0KICBnbF9MSUJPQkpTPSIkZ2xfTElCT0JKUyByZWFsbG9jLiRhY19vYmpleHQiDQoNCiAg UkVQTEFDRV9SRUFMTE9DPTENCg0KICBmaQ0KDQoNCg0KDQogIEdOVUxJQl9SRUFMTE9DX1BPU0lY PTENCg0KDQoNCiRhc19lY2hvICIjZGVmaW5lIEdOVUxJQl9URVNUX1JFQUxMT0NfUE9TSVggMSIg Pj5jb25mZGVmcy5oDQoNCg0KDQogICMgQ29kZSBmcm9tIG1vZHVsZSByZWdleDoNCg0KDQojIENo ZWNrIHdoZXRoZXIgLS13aXRoLWluY2x1ZGVkLXJlZ2V4IHdhcyBnaXZlbi4NCmlmIHRlc3QgIiR7 d2l0aF9pbmNsdWRlZF9yZWdleCtzZXR9IiA9IHNldDsgdGhlbiA6DQogIHdpdGh2YWw9JHdpdGhf aW5jbHVkZWRfcmVnZXg7DQpmaQ0KDQoNCiAgY2FzZSAkd2l0aF9pbmNsdWRlZF9yZWdleCBpbiAj KA0KICB5ZXN8bm8pIGFjX3VzZV9pbmNsdWRlZF9yZWdleD0kd2l0aF9pbmNsdWRlZF9yZWdleA0K ICAgICAgICA7Ow0KICAnJykNCiAgICAjIElmIHRoZSBzeXN0ZW0gcmVnZXggc3VwcG9ydCBpcyBn b29kIGVub3VnaCB0aGF0IGl0IHBhc3NlcyB0aGUNCiAgICAjIGZvbGxvd2luZyBydW4gdGVzdCwg dGhlbiBkZWZhdWx0IHRvICpub3QqIHVzaW5nIHRoZSBpbmNsdWRlZCByZWdleC5jLg0KICAgICMg SWYgY3Jvc3MgY29tcGlsaW5nLCBhc3N1bWUgdGhlIHRlc3Qgd291bGQgZmFpbCBhbmQgdXNlIHRo ZSBpbmNsdWRlZA0KICAgICMgcmVnZXguYy4NCiAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19s aW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciB3b3JraW5nIHJlX2NvbXBpbGVfcGF0dGVybiIg PiY1DQokYXNfZWNob19uICJjaGVja2luZyBmb3Igd29ya2luZyByZV9jb21waWxlX3BhdHRlcm4u Li4gIiA+JjY7IH0NCmlmICR7Z2xfY3ZfZnVuY19yZV9jb21waWxlX3BhdHRlcm5fd29ya2luZys6 fSBmYWxzZTsgdGhlbiA6DQogICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2DQplbHNlDQogIGlm IHRlc3QgIiRjcm9zc19jb21waWxpbmciID0geWVzOyB0aGVuIDoNCiAgICAgICAgIGdsX2N2X2Z1 bmNfcmVfY29tcGlsZV9wYXR0ZXJuX3dvcmtpbmc9bm8NCmVsc2UNCiAgY2F0IGNvbmZkZWZzLmgg LSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dA0KLyogZW5kIGNvbmZkZWZzLmguICAqLw0KJGFj X2luY2x1ZGVzX2RlZmF1bHQNCiAgICAgICAgICAgI2luY2x1ZGUgPGxvY2FsZS5oPg0KICAgICAg ICAgICAjaW5jbHVkZSA8bGltaXRzLmg+DQogICAgICAgICAgICNpbmNsdWRlIDxyZWdleC5oPg0K DQppbnQNCm1haW4gKCkNCnsNCmludCByZXN1bHQgPSAwOw0KICAgICAgICAgICAgc3RhdGljIHN0 cnVjdCByZV9wYXR0ZXJuX2J1ZmZlciByZWdleDsNCiAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIg Zm9sZGVkX2NoYXJzW1VDSEFSX01BWCArIDFdOw0KICAgICAgICAgICAgaW50IGk7DQogICAgICAg ICAgICBjb25zdCBjaGFyICpzOw0KICAgICAgICAgICAgc3RydWN0IHJlX3JlZ2lzdGVycyByZWdz Ow0KDQogICAgICAgICAgICAvKiBodHRwOi8vc291cmNld2FyZS5vcmcvbWwvbGliYy1oYWNrZXIv MjAwNi0wOS9tc2cwMDAwOC5odG1sDQogICAgICAgICAgICAgICBUaGlzIHRlc3QgbmVlZHMgdmFs Z3JpbmQgdG8gY2F0Y2ggdGhlIGJ1ZyBvbiBEZWJpYW4NCiAgICAgICAgICAgICAgIEdOVS9MaW51 eCAzLjEgeDg2LCBidXQgaXQgbWlnaHQgY2F0Y2ggdGhlIGJ1ZyBiZXR0ZXINCiAgICAgICAgICAg ICAgIG9uIG90aGVyIHBsYXRmb3JtcyBhbmQgaXQgc2hvdWxkbid0IGh1cnQgdG8gdHJ5IHRoZQ0K ICAgICAgICAgICAgICAgdGVzdCBoZXJlLiAgKi8NCiAgICAgICAgICAgIGlmIChzZXRsb2NhbGUg KExDX0FMTCwgImVuX1VTLlVURi04IikpDQogICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAg ICBzdGF0aWMgY2hhciBjb25zdCBwYXRbXSA9ICJpbnNlcnQgaW50byI7DQogICAgICAgICAgICAg ICAgc3RhdGljIGNoYXIgY29uc3QgZGF0YVtdID0NCiAgICAgICAgICAgICAgICAgICJceEZGXDBc eDEyXHhBMlx4QUFceEM0XHhCMSxLXHgxMlx4QzRceEIxKlx4QUNLIjsNCiAgICAgICAgICAgICAg ICByZV9zZXRfc3ludGF4IChSRV9TWU5UQVhfR1JFUCB8IFJFX0hBVF9MSVNUU19OT1RfTkVXTElO RQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUkVfSUNBU0UpOw0KICAgICAgICAg ICAgICAgIG1lbXNldCAoJnJlZ2V4LCAwLCBzaXplb2YgcmVnZXgpOw0KICAgICAgICAgICAgICAg IHMgPSByZV9jb21waWxlX3BhdHRlcm4gKHBhdCwgc2l6ZW9mIHBhdCAtIDEsICZyZWdleCk7DQog ICAgICAgICAgICAgICAgaWYgKHMpDQogICAgICAgICAgICAgICAgICByZXN1bHQgfD0gMTsNCiAg ICAgICAgICAgICAgICBlbHNlIGlmIChyZV9zZWFyY2ggKCZyZWdleCwgZGF0YSwgc2l6ZW9mIGRh dGEgLSAxLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgc2l6ZW9mIGRh dGEgLSAxLCAmcmVncykNCiAgICAgICAgICAgICAgICAgICAgICAgICAhPSAtMSkNCiAgICAgICAg ICAgICAgICAgIHJlc3VsdCB8PSAxOw0KICAgICAgICAgICAgICAgIGlmICghIHNldGxvY2FsZSAo TENfQUxMLCAiQyIpKQ0KICAgICAgICAgICAgICAgICAgcmV0dXJuIDE7DQogICAgICAgICAgICAg IH0NCg0KICAgICAgICAgICAgLyogVGhpcyB0ZXN0IGlzIGZyb20gZ2xpYmMgYnVnIDM5NTcsIHJl cG9ydGVkIGJ5IEFuZHJldyBNYWNrZXkuICAqLw0KICAgICAgICAgICAgcmVfc2V0X3N5bnRheCAo UkVfU1lOVEFYX0VHUkVQIHwgUkVfSEFUX0xJU1RTX05PVF9ORVdMSU5FKTsNCiAgICAgICAgICAg IG1lbXNldCAoJnJlZ2V4LCAwLCBzaXplb2YgcmVnZXgpOw0KICAgICAgICAgICAgcyA9IHJlX2Nv bXBpbGVfcGF0dGVybiAoImFbXnhdYiIsIDYsICZyZWdleCk7DQogICAgICAgICAgICBpZiAocykN CiAgICAgICAgICAgICAgcmVzdWx0IHw9IDI7DQogICAgICAgICAgICAvKiBUaGlzIHNob3VsZCBm YWlsLCBidXQgc3VjY2VlZHMgZm9yIGdsaWJjLTIuNS4gICovDQogICAgICAgICAgICBlbHNlIGlm IChyZV9zZWFyY2ggKCZyZWdleCwgImFcbmIiLCAzLCAwLCAzLCAmcmVncykgIT0gLTEpDQogICAg ICAgICAgICAgIHJlc3VsdCB8PSAyOw0KDQogICAgICAgICAgICAvKiBUaGlzIHJlZ3VsYXIgZXhw cmVzc2lvbiBpcyBmcm9tIFNwZW5jZXIgZXJlIHRlc3QgbnVtYmVyIDc1DQogICAgICAgICAgICAg ICBpbiBncmVwLTIuMy4gICovDQogICAgICAgICAgICByZV9zZXRfc3ludGF4IChSRV9TWU5UQVhf UE9TSVhfRUdSRVApOw0KICAgICAgICAgICAgbWVtc2V0ICgmcmVnZXgsIDAsIHNpemVvZiByZWdl eCk7DQogICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDw9IFVDSEFSX01BWDsgaSsrKQ0KICAgICAg ICAgICAgICBmb2xkZWRfY2hhcnNbaV0gPSBpOw0KICAgICAgICAgICAgcmVnZXgudHJhbnNsYXRl ID0gZm9sZGVkX2NoYXJzOw0KICAgICAgICAgICAgcyA9IHJlX2NvbXBpbGVfcGF0dGVybiAoImFb WzpdOl1dYlxuIiwgMTEsICZyZWdleCk7DQogICAgICAgICAgICAvKiBUaGlzIHNob3VsZCBmYWls IHdpdGggX0ludmFsaWQgY2hhcmFjdGVyIGNsYXNzIG5hbWVfIGVycm9yLiAgKi8NCiAgICAgICAg ICAgIGlmICghcykNCiAgICAgICAgICAgICAgcmVzdWx0IHw9IDQ7DQoNCiAgICAgICAgICAgIC8q IEVuc3VyZSB0aGF0IFtiLWFdIGlzIGRpYWdub3NlZCBhcyBpbnZhbGlkLCB3aGVuDQogICAgICAg ICAgICAgICB1c2luZyBSRV9OT19FTVBUWV9SQU5HRVMuICovDQogICAgICAgICAgICByZV9zZXRf c3ludGF4IChSRV9TWU5UQVhfUE9TSVhfRUdSRVAgfCBSRV9OT19FTVBUWV9SQU5HRVMpOw0KICAg ICAgICAgICAgbWVtc2V0ICgmcmVnZXgsIDAsIHNpemVvZiByZWdleCk7DQogICAgICAgICAgICBz ID0gcmVfY29tcGlsZV9wYXR0ZXJuICgiYVtiLWFdIiwgNiwgJnJlZ2V4KTsNCiAgICAgICAgICAg IGlmIChzID09IDApDQogICAgICAgICAgICAgIHJlc3VsdCB8PSA4Ow0KDQogICAgICAgICAgICAv KiBUaGlzIHNob3VsZCBzdWNjZWVkLCBidXQgZG9lcyBub3QgZm9yIGdsaWJjLTIuMS4zLiAgKi8N CiAgICAgICAgICAgIG1lbXNldCAoJnJlZ2V4LCAwLCBzaXplb2YgcmVnZXgpOw0KICAgICAgICAg ICAgcyA9IHJlX2NvbXBpbGVfcGF0dGVybiAoInsxIiwgMiwgJnJlZ2V4KTsNCiAgICAgICAgICAg IGlmIChzKQ0KICAgICAgICAgICAgICByZXN1bHQgfD0gODsNCg0KICAgICAgICAgICAgLyogVGhl IGZvbGxvd2luZyBleGFtcGxlIGlzIGRlcml2ZWQgZnJvbSBhIHByb2JsZW0gcmVwb3J0DQogICAg ICAgICAgICAgICBhZ2FpbnN0IGdhd2sgZnJvbSBKb3JnZSBTdG9sZmkgPHN0b2xmaUBpYy51bmlj YW1wLmJyPi4gICovDQogICAgICAgICAgICBtZW1zZXQgKCZyZWdleCwgMCwgc2l6ZW9mIHJlZ2V4 KTsNCiAgICAgICAgICAgIHMgPSByZV9jb21waWxlX3BhdHRlcm4gKCJbYW5cMzcxXSpuIiwgNywg JnJlZ2V4KTsNCiAgICAgICAgICAgIGlmIChzKQ0KICAgICAgICAgICAgICByZXN1bHQgfD0gODsN CiAgICAgICAgICAgIC8qIFRoaXMgc2hvdWxkIG1hdGNoLCBidXQgZG9lcyBub3QgZm9yIGdsaWJj LTIuMi4xLiAgKi8NCiAgICAgICAgICAgIGVsc2UgaWYgKHJlX21hdGNoICgmcmVnZXgsICJhbiIs IDIsIDAsICZyZWdzKSAhPSAyKQ0KICAgICAgICAgICAgICByZXN1bHQgfD0gODsNCg0KICAgICAg ICAgICAgbWVtc2V0ICgmcmVnZXgsIDAsIHNpemVvZiByZWdleCk7DQogICAgICAgICAgICBzID0g cmVfY29tcGlsZV9wYXR0ZXJuICgieCIsIDEsICZyZWdleCk7DQogICAgICAgICAgICBpZiAocykN CiAgICAgICAgICAgICAgcmVzdWx0IHw9IDg7DQogICAgICAgICAgICAvKiBnbGliYy0yLjIuOTMg ZG9lcyBub3Qgd29yayB3aXRoIGEgbmVnYXRpdmUgUkFOR0UgYXJndW1lbnQuICAqLw0KICAgICAg ICAgICAgZWxzZSBpZiAocmVfc2VhcmNoICgmcmVnZXgsICJ3eHkiLCAzLCAyLCAtMiwgJnJlZ3Mp ICE9IDEpDQogICAgICAgICAgICAgIHJlc3VsdCB8PSA4Ow0KDQogICAgICAgICAgICAvKiBUaGUg dmVyc2lvbiBvZiByZWdleC5jIGluIG9sZGVyIHZlcnNpb25zIG9mIGdudWxpYg0KICAgICAgICAg ICAgICAgaWdub3JlZCBSRV9JQ0FTRS4gIERldGVjdCB0aGF0IHByb2JsZW0gdG9vLiAgKi8NCiAg ICAgICAgICAgIHJlX3NldF9zeW50YXggKFJFX1NZTlRBWF9FTUFDUyB8IFJFX0lDQVNFKTsNCiAg ICAgICAgICAgIG1lbXNldCAoJnJlZ2V4LCAwLCBzaXplb2YgcmVnZXgpOw0KICAgICAgICAgICAg cyA9IHJlX2NvbXBpbGVfcGF0dGVybiAoIngiLCAxLCAmcmVnZXgpOw0KICAgICAgICAgICAgaWYg KHMpDQogICAgICAgICAgICAgIHJlc3VsdCB8PSAxNjsNCiAgICAgICAgICAgIGVsc2UgaWYgKHJl X3NlYXJjaCAoJnJlZ2V4LCAiV1hZIiwgMywgMCwgMywgJnJlZ3MpIDwgMCkNCiAgICAgICAgICAg ICAgcmVzdWx0IHw9IDE2Ow0KDQogICAgICAgICAgICAvKiBDYXRjaCBhIGJ1ZyByZXBvcnRlZCBi eSBWaW4gU2hlbHRvbiBpbg0KICAgICAgICAgICAgICAgaHR0cDovL2xpc3RzLmdudS5vcmcvYXJj aGl2ZS9odG1sL2J1Zy1jb3JldXRpbHMvMjAwNy0wNi9tc2cwMDA4OS5odG1sDQogICAgICAgICAg ICAgICAqLw0KICAgICAgICAgICAgcmVfc2V0X3N5bnRheCAoUkVfU1lOVEFYX1BPU0lYX0JBU0lD DQogICAgICAgICAgICAgICAgICAgICAgICAgICAmIH5SRV9DT05URVhUX0lOVkFMSURfRFVQDQog ICAgICAgICAgICAgICAgICAgICAgICAgICAmIH5SRV9OT19FTVBUWV9SQU5HRVMpOw0KICAgICAg ICAgICAgbWVtc2V0ICgmcmVnZXgsIDAsIHNpemVvZiByZWdleCk7DQogICAgICAgICAgICBzID0g cmVfY29tcGlsZV9wYXR0ZXJuICgiW1s6YWxudW06XV8tXVxcXFwrJCIsIDE2LCAmcmVnZXgpOw0K ICAgICAgICAgICAgaWYgKHMpDQogICAgICAgICAgICAgIHJlc3VsdCB8PSAzMjsNCg0KICAgICAg ICAgICAgLyogUkVHX1NUQVJURU5EIHdhcyBhZGRlZCB0byBnbGliYyBvbiAyMDA0LTAxLTE1Lg0K ICAgICAgICAgICAgICAgUmVqZWN0IG9sZGVyIHZlcnNpb25zLiAgKi8NCiAgICAgICAgICAgIGlm ICghIFJFR19TVEFSVEVORCkNCiAgICAgICAgICAgICAgcmVzdWx0IHw9IDY0Ow0KDQojaWYgMA0K ICAgICAgICAgICAgLyogSXQgd291bGQgYmUgbmljZSB0byByZWplY3QgaG9zdHMgd2hvc2UgcmVn b2ZmX3QgdmFsdWVzIGFyZSB0b28NCiAgICAgICAgICAgICAgIG5hcnJvdyAoaW5jbHVkaW5nIGds aWJjIG9uIGhvc3RzIHdpdGggNjQtYml0IHB0cmRpZmZfdCBhbmQNCiAgICAgICAgICAgICAgIDMy LWJpdCBpbnQpLCBidXQgd2Ugc2hvdWxkIHdhaXQgdW50aWwgZ2xpYmMgaW1wbGVtZW50cyB0aGlz DQogICAgICAgICAgICAgICBmZWF0dXJlLiAgT3RoZXJ3aXNlLCBzdXBwb3J0IGZvciBlcXVpdmFs ZW5jZSBjbGFzc2VzIGFuZA0KICAgICAgICAgICAgICAgbXVsdGlieXRlIGNvbGxhdGlvbiBzeW1i b2xzIHdvdWxkIGFsd2F5cyBiZSBicm9rZW4gZXhjZXB0DQogICAgICAgICAgICAgICB3aGVuIGNv bXBpbGluZyAtLXdpdGhvdXQtaW5jbHVkZWQtcmVnZXguICAgKi8NCiAgICAgICAgICAgIGlmIChz aXplb2YgKHJlZ29mZl90KSA8IHNpemVvZiAocHRyZGlmZl90KQ0KICAgICAgICAgICAgICAgIHx8 IHNpemVvZiAocmVnb2ZmX3QpIDwgc2l6ZW9mIChzc2l6ZV90KSkNCiAgICAgICAgICAgICAgcmVz dWx0IHw9IDY0Ow0KI2VuZGlmDQoNCiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7DQoNCiAgOw0K ICByZXR1cm4gMDsNCn0NCl9BQ0VPRg0KaWYgYWNfZm5fY190cnlfcnVuICIkTElORU5PIjsgdGhl biA6DQogIGdsX2N2X2Z1bmNfcmVfY29tcGlsZV9wYXR0ZXJuX3dvcmtpbmc9eWVzDQplbHNlDQog IGdsX2N2X2Z1bmNfcmVfY29tcGlsZV9wYXR0ZXJuX3dvcmtpbmc9bm8NCmZpDQpybSAtZiBjb3Jl ICouY29yZSBjb3JlLmNvbmZ0ZXN0LiogZ21vbi5vdXQgYmIub3V0IGNvbmZ0ZXN0JGFjX2V4ZWV4 dCBcDQogIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuYmVhbSBjb25mdGVzdC4kYWNfZXh0 DQpmaQ0KDQpmaQ0KeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1 bHQ6ICRnbF9jdl9mdW5jX3JlX2NvbXBpbGVfcGF0dGVybl93b3JraW5nIiA+JjUNCiRhc19lY2hv ICIkZ2xfY3ZfZnVuY19yZV9jb21waWxlX3BhdHRlcm5fd29ya2luZyIgPiY2OyB9DQogICAgY2Fz ZSAkZ2xfY3ZfZnVuY19yZV9jb21waWxlX3BhdHRlcm5fd29ya2luZyBpbiAjKA0KICAgIHllcykg YWNfdXNlX2luY2x1ZGVkX3JlZ2V4PW5vOzsgIygNCiAgICBubykgYWNfdXNlX2luY2x1ZGVkX3Jl Z2V4PXllczs7DQogICAgZXNhYw0KICAgIDs7DQogICopIGFzX2ZuX2Vycm9yICQ/ICJJbnZhbGlk IHZhbHVlIGZvciAtLXdpdGgtaW5jbHVkZWQtcmVnZXg6ICR3aXRoX2luY2x1ZGVkX3JlZ2V4IiAi JExJTkVOTyIgNQ0KICAgIDs7DQogIGVzYWMNCg0KICBpZiB0ZXN0ICRhY191c2VfaW5jbHVkZWRf cmVnZXggPSB5ZXM7IHRoZW4NCg0KJGFzX2VjaG8gIiNkZWZpbmUgX1JFR0VYX0xBUkdFX09GRlNF VFMgMSIgPj5jb25mZGVmcy5oDQoNCg0KJGFzX2VjaG8gIiNkZWZpbmUgcmVfc3ludGF4X29wdGlv bnMgcnBsX3JlX3N5bnRheF9vcHRpb25zIiA+PmNvbmZkZWZzLmgNCg0KDQokYXNfZWNobyAiI2Rl ZmluZSByZV9zZXRfc3ludGF4IHJwbF9yZV9zZXRfc3ludGF4IiA+PmNvbmZkZWZzLmgNCg0KDQok YXNfZWNobyAiI2RlZmluZSByZV9jb21waWxlX3BhdHRlcm4gcnBsX3JlX2NvbXBpbGVfcGF0dGVy biIgPj5jb25mZGVmcy5oDQoNCg0KJGFzX2VjaG8gIiNkZWZpbmUgcmVfY29tcGlsZV9mYXN0bWFw IHJwbF9yZV9jb21waWxlX2Zhc3RtYXAiID4+Y29uZmRlZnMuaA0KDQoNCiRhc19lY2hvICIjZGVm aW5lIHJlX3NlYXJjaCBycGxfcmVfc2VhcmNoIiA+PmNvbmZkZWZzLmgNCg0KDQokYXNfZWNobyAi I2RlZmluZSByZV9zZWFyY2hfMiBycGxfcmVfc2VhcmNoXzIiID4+Y29uZmRlZnMuaA0KDQoNCiRh c19lY2hvICIjZGVmaW5lIHJlX21hdGNoIHJwbF9yZV9tYXRjaCIgPj5jb25mZGVmcy5oDQoNCg0K JGFzX2VjaG8gIiNkZWZpbmUgcmVfbWF0Y2hfMiBycGxfcmVfbWF0Y2hfMiIgPj5jb25mZGVmcy5o DQoNCg0KJGFzX2VjaG8gIiNkZWZpbmUgcmVfc2V0X3JlZ2lzdGVycyBycGxfcmVfc2V0X3JlZ2lz dGVycyIgPj5jb25mZGVmcy5oDQoNCg0KJGFzX2VjaG8gIiNkZWZpbmUgcmVfY29tcCBycGxfcmVf Y29tcCIgPj5jb25mZGVmcy5oDQoNCg0KJGFzX2VjaG8gIiNkZWZpbmUgcmVfZXhlYyBycGxfcmVf ZXhlYyIgPj5jb25mZGVmcy5oDQoNCg0KJGFzX2VjaG8gIiNkZWZpbmUgcmVnY29tcCBycGxfcmVn Y29tcCIgPj5jb25mZGVmcy5oDQoNCg0KJGFzX2VjaG8gIiNkZWZpbmUgcmVnZXhlYyBycGxfcmVn ZXhlYyIgPj5jb25mZGVmcy5oDQoNCg0KJGFzX2VjaG8gIiNkZWZpbmUgcmVnZXJyb3IgcnBsX3Jl Z2Vycm9yIiA+PmNvbmZkZWZzLmgNCg0KDQokYXNfZWNobyAiI2RlZmluZSByZWdmcmVlIHJwbF9y ZWdmcmVlIiA+PmNvbmZkZWZzLmgNCg0KDQoNCg0KDQoNCg0KDQoNCiAgZ2xfTElCT0JKUz0iJGds X0xJQk9CSlMgcmVnZXguJGFjX29iamV4dCINCg0KDQoNCg0KDQoNCiAgZm9yIGFjX2hlYWRlciBp biBsaWJpbnRsLmgNCmRvIDoNCiAgYWNfZm5fY19jaGVja19oZWFkZXJfbW9uZ3JlbCAiJExJTkVO TyIgImxpYmludGwuaCIgImFjX2N2X2hlYWRlcl9saWJpbnRsX2giICIkYWNfaW5jbHVkZXNfZGVm YXVsdCINCmlmIHRlc3QgIngkYWNfY3ZfaGVhZGVyX2xpYmludGxfaCIgPSB4eWVzOyB0aGVuIDoN CiAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRg0KI2RlZmluZSBIQVZFX0xJQklOVExfSCAxDQpf QUNFT0YNCg0KZmkNCg0KZG9uZQ0KDQoNCiAgYWNfZm5fY19jaGVja19kZWNsICIkTElORU5PIiAi aXNibGFuayIgImFjX2N2X2hhdmVfZGVjbF9pc2JsYW5rIiAiI2luY2x1ZGUgPGN0eXBlLmg+DQoi DQppZiB0ZXN0ICJ4JGFjX2N2X2hhdmVfZGVjbF9pc2JsYW5rIiA9IHh5ZXM7IHRoZW4gOg0KICBh Y19oYXZlX2RlY2w9MQ0KZWxzZQ0KICBhY19oYXZlX2RlY2w9MA0KZmkNCg0KY2F0ID4+Y29uZmRl ZnMuaCA8PF9BQ0VPRg0KI2RlZmluZSBIQVZFX0RFQ0xfSVNCTEFOSyAkYWNfaGF2ZV9kZWNsDQpf QUNFT0YNCg0KDQogIGZpDQoNCiAgIyBDb2RlIGZyb20gbW9kdWxlIHJlbW92ZToNCg0KDQoNCg0K ICBpZiB0ZXN0ICIkZ2xfY3ZfZnVuY19ybWRpcl93b3JrczokZ2xfY3ZfZnVuY191bmxpbmtfd29y a3MiICE9IHllczp5ZXM7IHRoZW4NCiAgICAgICAgICAgIFJFUExBQ0VfUkVNT1ZFPTENCg0KDQoN Cg0KDQoNCg0KDQogIGdsX0xJQk9CSlM9IiRnbF9MSUJPQkpTIHJlbW92ZS4kYWNfb2JqZXh0Ig0K DQogIGVsc2UNCiAgICAgICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElO RU5PfTogY2hlY2tpbmcgd2hldGhlciByZW1vdmUgaGFuZGxlcyBkaXJlY3RvcmllcyIgPiY1DQok YXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIHJlbW92ZSBoYW5kbGVzIGRpcmVjdG9yaWVzLi4u ICIgPiY2OyB9DQppZiAke2dsX2N2X2Z1bmNfcmVtb3ZlX2Rpcl93b3Jrcys6fSBmYWxzZTsgdGhl biA6DQogICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2DQplbHNlDQogIG1rZGlyIGNvbmZ0ZXN0 LmRpcg0KICAgICAgIGlmIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0geWVzOyB0aGVuIDoNCiAg Y2FzZSAkaG9zdF9vcyBpbg0KICAgICAgICAgICAgbWluZ3cqKSBnbF9jdl9mdW5jX3JlbW92ZV9k aXJfd29ya3M9Imd1ZXNzaW5nIG5vIjs7DQogICAgICAgICAgICAqKSBnbF9jdl9mdW5jX3JlbW92 ZV9kaXJfd29ya3M9Imd1ZXNzaW5nIHllcyI7Ow0KICAgICAgICAgIGVzYWMNCmVsc2UNCiAgY2F0 IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dA0KLyogZW5kIGNvbmZkZWZz LmguICAqLw0KI2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludA0KbWFpbiAoKQ0Kew0KcmV0dXJuIHJl bW92ZSAoImNvbmZ0ZXN0LmRpciIpOw0KICA7DQogIHJldHVybiAwOw0KfQ0KX0FDRU9GDQppZiBh Y19mbl9jX3RyeV9ydW4gIiRMSU5FTk8iOyB0aGVuIDoNCiAgZ2xfY3ZfZnVuY19yZW1vdmVfZGly X3dvcmtzPXllcw0KZWxzZQ0KICBnbF9jdl9mdW5jX3JlbW92ZV9kaXJfd29ya3M9bm8NCmZpDQpy bSAtZiBjb3JlICouY29yZSBjb3JlLmNvbmZ0ZXN0LiogZ21vbi5vdXQgYmIub3V0IGNvbmZ0ZXN0 JGFjX2V4ZWV4dCBcDQogIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuYmVhbSBjb25mdGVz dC4kYWNfZXh0DQpmaQ0KDQogICAgICAgcm0gLXJmIGNvbmZ0ZXN0LmRpcg0KZmkNCnsgJGFzX2Vj aG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkZ2xfY3ZfZnVuY19yZW1v dmVfZGlyX3dvcmtzIiA+JjUNCiRhc19lY2hvICIkZ2xfY3ZfZnVuY19yZW1vdmVfZGlyX3dvcmtz IiA+JjY7IH0NCiAgICBjYXNlICRnbF9jdl9mdW5jX3JlbW92ZV9kaXJfd29ya3MgaW4NCiAgICAg ICpubyopIFJFUExBQ0VfUkVNT1ZFPTENCg0KDQoNCg0KDQoNCg0KDQogIGdsX0xJQk9CSlM9IiRn bF9MSUJPQkpTIHJlbW92ZS4kYWNfb2JqZXh0Ig0KOzsNCiAgICBlc2FjDQogIGZpDQoNCg0KDQoN CiAgR05VTElCX1JFTU9WRT0xDQoNCg0KDQokYXNfZWNobyAiI2RlZmluZSBHTlVMSUJfVEVTVF9S RU1PVkUgMSIgPj5jb25mZGVmcy5oDQoNCg0KDQogICMgQ29kZSBmcm9tIG1vZHVsZSByZW5hbWU6 DQoNCg0KDQoNCg0KICAgICAgICAgICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVu by0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciByZW5hbWUgaG9ub3JzIHRyYWlsaW5nIHNsYXNo IG9uIGRlc3RpbmF0aW9uIiA+JjUNCiRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgcmVuYW1l IGhvbm9ycyB0cmFpbGluZyBzbGFzaCBvbiBkZXN0aW5hdGlvbi4uLiAiID4mNjsgfQ0KaWYgJHtn bF9jdl9mdW5jX3JlbmFtZV9zbGFzaF9kc3Rfd29ya3MrOn0gZmFsc2U7IHRoZW4gOg0KICAkYXNf ZWNob19uICIoY2FjaGVkKSAiID4mNg0KZWxzZQ0KICBybSAtcmYgY29uZnRlc3QuZiBjb25mdGVz dC5mMSBjb25mdGVzdC5mMiBjb25mdGVzdC5kMSBjb25mdGVzdC5kMiBjb25mdGVzdC5sbmsNCiAg ICB0b3VjaCBjb25mdGVzdC5mICYmIHRvdWNoIGNvbmZ0ZXN0LmYxICYmIG1rZGlyIGNvbmZ0ZXN0 LmQxIHx8DQogICAgICBhc19mbl9lcnJvciAkPyAiY2Fubm90IGNyZWF0ZSB0ZW1wb3JhcnkgZmls ZXMiICIkTElORU5PIiA1DQogICAgIyBBc3N1bWUgdGhhdCBpZiB3ZSBoYXZlIGxzdGF0LCB3ZSBj YW4gYWxzbyBjaGVjayBzeW1saW5rcy4NCiAgICBpZiB0ZXN0ICRhY19jdl9mdW5jX2xzdGF0ID0g eWVzOyB0aGVuDQogICAgICBsbiAtcyBjb25mdGVzdC5mIGNvbmZ0ZXN0Lmxuaw0KICAgIGZpDQog ICAgaWYgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgPSB5ZXM7IHRoZW4gOg0KICAgICAgICBnbF9j dl9mdW5jX3JlbmFtZV9zbGFzaF9kc3Rfd29ya3M9Imd1ZXNzaW5nIG5vIg0KZWxzZQ0KICBjYXQg Y29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0DQovKiBlbmQgY29uZmRlZnMu aC4gICovDQoNCiMgICAgICAgIGluY2x1ZGUgPHN0ZGlvLmg+DQojICAgICAgICBpbmNsdWRlIDxz dGRsaWIuaD4NCg0KaW50DQptYWluICgpDQp7DQppbnQgcmVzdWx0ID0gMDsNCiAgICAgICAgICAg aWYgKHJlbmFtZSAoImNvbmZ0ZXN0LmYxIiwgImNvbmZ0ZXN0LmYyLyIpID09IDApDQogICAgICAg ICAgICAgcmVzdWx0IHw9IDE7DQogICAgICAgICAgIGlmIChyZW5hbWUgKCJjb25mdGVzdC5kMSIs ICJjb25mdGVzdC5kMi8iKSAhPSAwKQ0KICAgICAgICAgICAgIHJlc3VsdCB8PSAyOw0KI2lmIEhB VkVfTFNUQVQNCiAgICAgICAgICAgaWYgKHJlbmFtZSAoImNvbmZ0ZXN0LmYiLCAiY29uZnRlc3Qu bG5rLyIpID09IDApDQogICAgICAgICAgICAgcmVzdWx0IHw9IDQ7DQojZW5kaWYNCiAgICAgICAg ICAgcmV0dXJuIHJlc3VsdDsNCg0KICA7DQogIHJldHVybiAwOw0KfQ0KX0FDRU9GDQppZiBhY19m bl9jX3RyeV9ydW4gIiRMSU5FTk8iOyB0aGVuIDoNCiAgZ2xfY3ZfZnVuY19yZW5hbWVfc2xhc2hf ZHN0X3dvcmtzPXllcw0KZWxzZQ0KICBnbF9jdl9mdW5jX3JlbmFtZV9zbGFzaF9kc3Rfd29ya3M9 bm8NCmZpDQpybSAtZiBjb3JlICouY29yZSBjb3JlLmNvbmZ0ZXN0LiogZ21vbi5vdXQgYmIub3V0 IGNvbmZ0ZXN0JGFjX2V4ZWV4dCBcDQogIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuYmVh bSBjb25mdGVzdC4kYWNfZXh0DQpmaQ0KDQogICAgcm0gLXJmIGNvbmZ0ZXN0LmYgY29uZnRlc3Qu ZjEgY29uZnRlc3QuZjIgY29uZnRlc3QuZDEgY29uZnRlc3QuZDIgY29uZnRlc3QubG5rDQoNCmZp DQp7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGdsX2N2 X2Z1bmNfcmVuYW1lX3NsYXNoX2RzdF93b3JrcyIgPiY1DQokYXNfZWNobyAiJGdsX2N2X2Z1bmNf cmVuYW1lX3NsYXNoX2RzdF93b3JrcyIgPiY2OyB9DQogIGlmIHRlc3QgIngkZ2xfY3ZfZnVuY19y ZW5hbWVfc2xhc2hfZHN0X3dvcmtzIiAhPSB4eWVzOyB0aGVuDQoNCg0KDQoNCg0KDQoNCg0KICBn bF9MSUJPQkpTPSIkZ2xfTElCT0JKUyByZW5hbWUuJGFjX29iamV4dCINCg0KICAgIFJFUExBQ0Vf UkVOQU1FPTENCg0KJGFzX2VjaG8gIiNkZWZpbmUgUkVOQU1FX1RSQUlMSU5HX1NMQVNIX0RFU1Rf QlVHIDEiID4+Y29uZmRlZnMuaA0KDQogIGZpDQoNCiAgICAgICAgICAgIHsgJGFzX2VjaG8gIiRh c19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciByZW5hbWUgaG9ub3Jz IHRyYWlsaW5nIHNsYXNoIG9uIHNvdXJjZSIgPiY1DQokYXNfZWNob19uICJjaGVja2luZyB3aGV0 aGVyIHJlbmFtZSBob25vcnMgdHJhaWxpbmcgc2xhc2ggb24gc291cmNlLi4uICIgPiY2OyB9DQpp ZiAke2dsX2N2X2Z1bmNfcmVuYW1lX3NsYXNoX3NyY193b3Jrcys6fSBmYWxzZTsgdGhlbiA6DQog ICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2DQplbHNlDQogIHJtIC1yZiBjb25mdGVzdC5mIGNv bmZ0ZXN0LmYxIGNvbmZ0ZXN0LmQxIGNvbmZ0ZXN0LmQyIGNvbmZ0ZXN0LmQzIGNvbmZ0ZXN0Lmxu aw0KICAgIHRvdWNoIGNvbmZ0ZXN0LmYgJiYgdG91Y2ggY29uZnRlc3QuZjEgJiYgbWtkaXIgY29u ZnRlc3QuZDEgfHwNCiAgICAgIGFzX2ZuX2Vycm9yICQ/ICJjYW5ub3QgY3JlYXRlIHRlbXBvcmFy eSBmaWxlcyIgIiRMSU5FTk8iIDUNCiAgICAjIEFzc3VtZSB0aGF0IGlmIHdlIGhhdmUgbHN0YXQs IHdlIGNhbiBhbHNvIGNoZWNrIHN5bWxpbmtzLg0KICAgIGlmIHRlc3QgJGFjX2N2X2Z1bmNfbHN0 YXQgPSB5ZXM7IHRoZW4NCiAgICAgIGxuIC1zIGNvbmZ0ZXN0LmYgY29uZnRlc3QubG5rDQogICAg ZmkNCiAgICBpZiB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IHllczsgdGhlbiA6DQogICAgICAg IGdsX2N2X2Z1bmNfcmVuYW1lX3NsYXNoX3NyY193b3Jrcz0iZ3Vlc3Npbmcgbm8iDQplbHNlDQog IGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQNCi8qIGVuZCBjb25m ZGVmcy5oLiAgKi8NCg0KIyAgICAgICAgaW5jbHVkZSA8c3RkaW8uaD4NCiMgICAgICAgIGluY2x1 ZGUgPHN0ZGxpYi5oPg0KDQppbnQNCm1haW4gKCkNCnsNCmludCByZXN1bHQgPSAwOw0KICAgICAg ICAgICBpZiAocmVuYW1lICgiY29uZnRlc3QuZjEvIiwgImNvbmZ0ZXN0LmQzIikgPT0gMCkNCiAg ICAgICAgICAgICByZXN1bHQgfD0gMTsNCiAgICAgICAgICAgaWYgKHJlbmFtZSAoImNvbmZ0ZXN0 LmQxLyIsICJjb25mdGVzdC5kMiIpICE9IDApDQogICAgICAgICAgICAgcmVzdWx0IHw9IDI7DQoj aWYgSEFWRV9MU1RBVA0KICAgICAgICAgICBpZiAocmVuYW1lICgiY29uZnRlc3QubG5rLyIsICJj b25mdGVzdC5mIikgPT0gMCkNCiAgICAgICAgICAgICByZXN1bHQgfD0gNDsNCiNlbmRpZg0KICAg ICAgICAgICByZXR1cm4gcmVzdWx0Ow0KDQogIDsNCiAgcmV0dXJuIDA7DQp9DQpfQUNFT0YNCmlm IGFjX2ZuX2NfdHJ5X3J1biAiJExJTkVOTyI7IHRoZW4gOg0KICBnbF9jdl9mdW5jX3JlbmFtZV9z bGFzaF9zcmNfd29ya3M9eWVzDQplbHNlDQogIGdsX2N2X2Z1bmNfcmVuYW1lX3NsYXNoX3NyY193 b3Jrcz1ubw0KZmkNCnJtIC1mIGNvcmUgKi5jb3JlIGNvcmUuY29uZnRlc3QuKiBnbW9uLm91dCBi Yi5vdXQgY29uZnRlc3QkYWNfZXhlZXh0IFwNCiAgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVz dC5iZWFtIGNvbmZ0ZXN0LiRhY19leHQNCmZpDQoNCiAgICBybSAtcmYgY29uZnRlc3QuZiBjb25m dGVzdC5mMSBjb25mdGVzdC5kMSBjb25mdGVzdC5kMiBjb25mdGVzdC5kMyBjb25mdGVzdC5sbmsN Cg0KZmkNCnsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAk Z2xfY3ZfZnVuY19yZW5hbWVfc2xhc2hfc3JjX3dvcmtzIiA+JjUNCiRhc19lY2hvICIkZ2xfY3Zf ZnVuY19yZW5hbWVfc2xhc2hfc3JjX3dvcmtzIiA+JjY7IH0NCiAgaWYgdGVzdCAieCRnbF9jdl9m dW5jX3JlbmFtZV9zbGFzaF9zcmNfd29ya3MiICE9IHh5ZXM7IHRoZW4NCg0KDQoNCg0KDQoNCg0K DQogIGdsX0xJQk9CSlM9IiRnbF9MSUJPQkpTIHJlbmFtZS4kYWNfb2JqZXh0Ig0KDQogICAgUkVQ TEFDRV9SRU5BTUU9MQ0KDQokYXNfZWNobyAiI2RlZmluZSBSRU5BTUVfVFJBSUxJTkdfU0xBU0hf U09VUkNFX0JVRyAxIiA+PmNvbmZkZWZzLmgNCg0KICBmaQ0KDQogICAgICAgIHsgJGFzX2VjaG8g IiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciByZW5hbWUgbWFu YWdlcyBoYXJkIGxpbmtzIGNvcnJlY3RseSIgPiY1DQokYXNfZWNob19uICJjaGVja2luZyB3aGV0 aGVyIHJlbmFtZSBtYW5hZ2VzIGhhcmQgbGlua3MgY29ycmVjdGx5Li4uICIgPiY2OyB9DQppZiAk e2dsX2N2X2Z1bmNfcmVuYW1lX2xpbmtfd29ya3MrOn0gZmFsc2U7IHRoZW4gOg0KICAkYXNfZWNo b19uICIoY2FjaGVkKSAiID4mNg0KZWxzZQ0KICBybSAtcmYgY29uZnRlc3QuZiBjb25mdGVzdC5m MQ0KICAgIGlmIHRvdWNoIGNvbmZ0ZXN0LmYgJiYgbG4gY29uZnRlc3QuZiBjb25mdGVzdC5mMSAm Jg0KICAgICAgICBzZXQgeCBgbHMgLWkgY29uZnRlc3QuZiBjb25mdGVzdC5mMWAgJiYgdGVzdCAi IiA9ICIiOyB0aGVuDQogICAgICBpZiB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IHllczsgdGhl biA6DQogICAgICAgICAgZ2xfY3ZfZnVuY19yZW5hbWVfbGlua193b3Jrcz0iZ3Vlc3Npbmcgbm8i DQplbHNlDQogIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQNCi8q IGVuZCBjb25mZGVmcy5oLiAgKi8NCg0KIyAgICAgICAgICBpbmNsdWRlIDxzdGRpby5oPg0KIyAg ICAgICAgICBpbmNsdWRlIDxzdGRsaWIuaD4NCiMgICAgICAgICAgaW5jbHVkZSA8dW5pc3RkLmg+ DQoNCmludA0KbWFpbiAoKQ0Kew0KaW50IHJlc3VsdCA9IDA7DQogICAgICAgICAgICAgaWYgKHJl bmFtZSAoImNvbmZ0ZXN0LmYiLCAiY29uZnRlc3QuZjEiKSkNCiAgICAgICAgICAgICAgIHJlc3Vs dCB8PSAxOw0KICAgICAgICAgICAgIGlmICh1bmxpbmsgKCJjb25mdGVzdC5mMSIpKQ0KICAgICAg ICAgICAgICAgcmVzdWx0IHw9IDI7DQogICAgICAgICAgICAgaWYgKHJlbmFtZSAoImNvbmZ0ZXN0 LmYiLCAiY29uZnRlc3QuZiIpKQ0KICAgICAgICAgICAgICAgcmVzdWx0IHw9IDQ7DQogICAgICAg ICAgICAgaWYgKHJlbmFtZSAoImNvbmZ0ZXN0LmYxIiwgImNvbmZ0ZXN0LmYxIikgPT0gMCkNCiAg ICAgICAgICAgICAgIHJlc3VsdCB8PSA4Ow0KICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7DQoN CiAgOw0KICByZXR1cm4gMDsNCn0NCl9BQ0VPRg0KaWYgYWNfZm5fY190cnlfcnVuICIkTElORU5P IjsgdGhlbiA6DQogIGdsX2N2X2Z1bmNfcmVuYW1lX2xpbmtfd29ya3M9eWVzDQplbHNlDQogIGds X2N2X2Z1bmNfcmVuYW1lX2xpbmtfd29ya3M9bm8NCmZpDQpybSAtZiBjb3JlICouY29yZSBjb3Jl LmNvbmZ0ZXN0LiogZ21vbi5vdXQgYmIub3V0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCBcDQogIGNvbmZ0 ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuYmVhbSBjb25mdGVzdC4kYWNfZXh0DQpmaQ0KDQogICAg ZWxzZQ0KICAgICAgZ2xfY3ZfZnVuY19yZW5hbWVfbGlua193b3Jrcz0iZ3Vlc3Npbmcgbm8iDQog ICAgZmkNCiAgICBybSAtcmYgY29uZnRlc3QuZiBjb25mdGVzdC5mMQ0KDQpmaQ0KeyAkYXNfZWNo byAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRnbF9jdl9mdW5jX3JlbmFt ZV9saW5rX3dvcmtzIiA+JjUNCiRhc19lY2hvICIkZ2xfY3ZfZnVuY19yZW5hbWVfbGlua193b3Jr cyIgPiY2OyB9DQogIGlmIHRlc3QgIngkZ2xfY3ZfZnVuY19yZW5hbWVfbGlua193b3JrcyIgIT0g eHllczsgdGhlbg0KDQoNCg0KDQoNCg0KDQoNCiAgZ2xfTElCT0JKUz0iJGdsX0xJQk9CSlMgcmVu YW1lLiRhY19vYmpleHQiDQoNCiAgICBSRVBMQUNFX1JFTkFNRT0xDQoNCiRhc19lY2hvICIjZGVm aW5lIFJFTkFNRV9IQVJEX0xJTktfQlVHIDEiID4+Y29uZmRlZnMuaA0KDQogIGZpDQoNCiAgICAg ICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdo ZXRoZXIgcmVuYW1lIG1hbmFnZXMgZXhpc3RpbmcgZGVzdGluYXRpb25zIGNvcnJlY3RseSIgPiY1 DQokYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIHJlbmFtZSBtYW5hZ2VzIGV4aXN0aW5nIGRl c3RpbmF0aW9ucyBjb3JyZWN0bHkuLi4gIiA+JjY7IH0NCmlmICR7Z2xfY3ZfZnVuY19yZW5hbWVf ZGVzdF93b3Jrcys6fSBmYWxzZTsgdGhlbiA6DQogICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2 DQplbHNlDQogIHJtIC1yZiBjb25mdGVzdC5mIGNvbmZ0ZXN0LmQxIGNvbmZ0ZXN0LmQyDQogICAg dG91Y2ggY29uZnRlc3QuZiAmJiBta2RpciBjb25mdGVzdC5kMSBjb25mdGVzdC5kMiB8fA0KICAg ICAgYXNfZm5fZXJyb3IgJD8gImNhbm5vdCBjcmVhdGUgdGVtcG9yYXJ5IGZpbGVzIiAiJExJTkVO TyIgNQ0KICAgIGlmIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0geWVzOyB0aGVuIDoNCiAgICAg ICAgZ2xfY3ZfZnVuY19yZW5hbWVfZGVzdF93b3Jrcz0iZ3Vlc3Npbmcgbm8iDQplbHNlDQogIGNh dCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQNCi8qIGVuZCBjb25mZGVm cy5oLiAgKi8NCg0KIyAgICAgICAgaW5jbHVkZSA8c3RkaW8uaD4NCiMgICAgICAgIGluY2x1ZGUg PHN0ZGxpYi5oPg0KDQppbnQNCm1haW4gKCkNCnsNCmludCByZXN1bHQgPSAwOw0KICAgICAgICAg ICBpZiAocmVuYW1lICgiY29uZnRlc3QuZDEiLCAiY29uZnRlc3QuZDIiKSAhPSAwKQ0KICAgICAg ICAgICAgIHJlc3VsdCB8PSAxOw0KICAgICAgICAgICBpZiAocmVuYW1lICgiY29uZnRlc3QuZDIi LCAiY29uZnRlc3QuZiIpID09IDApDQogICAgICAgICAgICAgcmVzdWx0IHw9IDI7DQogICAgICAg ICAgIHJldHVybiByZXN1bHQ7DQoNCiAgOw0KICByZXR1cm4gMDsNCn0NCl9BQ0VPRg0KaWYgYWNf Zm5fY190cnlfcnVuICIkTElORU5PIjsgdGhlbiA6DQogIGdsX2N2X2Z1bmNfcmVuYW1lX2Rlc3Rf d29ya3M9eWVzDQplbHNlDQogIGdsX2N2X2Z1bmNfcmVuYW1lX2Rlc3Rfd29ya3M9bm8NCmZpDQpy bSAtZiBjb3JlICouY29yZSBjb3JlLmNvbmZ0ZXN0LiogZ21vbi5vdXQgYmIub3V0IGNvbmZ0ZXN0 JGFjX2V4ZWV4dCBcDQogIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuYmVhbSBjb25mdGVz dC4kYWNfZXh0DQpmaQ0KDQogICAgcm0gLXJmIGNvbmZ0ZXN0LmYgY29uZnRlc3QuZDEgY29uZnRl c3QuZDINCg0KZmkNCnsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVz dWx0OiAkZ2xfY3ZfZnVuY19yZW5hbWVfZGVzdF93b3JrcyIgPiY1DQokYXNfZWNobyAiJGdsX2N2 X2Z1bmNfcmVuYW1lX2Rlc3Rfd29ya3MiID4mNjsgfQ0KICBpZiB0ZXN0ICJ4JGdsX2N2X2Z1bmNf cmVuYW1lX2Rlc3Rfd29ya3MiICE9IHh5ZXM7IHRoZW4NCg0KDQoNCg0KDQoNCg0KDQogIGdsX0xJ Qk9CSlM9IiRnbF9MSUJPQkpTIHJlbmFtZS4kYWNfb2JqZXh0Ig0KDQogICAgUkVQTEFDRV9SRU5B TUU9MQ0KDQokYXNfZWNobyAiI2RlZmluZSBSRU5BTUVfREVTVF9FWElTVFNfQlVHIDEiID4+Y29u ZmRlZnMuaA0KDQogIGZpDQoNCg0KDQoNCiAgR05VTElCX1JFTkFNRT0xDQoNCg0KDQokYXNfZWNo byAiI2RlZmluZSBHTlVMSUJfVEVTVF9SRU5BTUUgMSIgPj5jb25mZGVmcy5oDQoNCg0KDQogICMg Q29kZSBmcm9tIG1vZHVsZSBybWRpcjoNCg0KDQogICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNf bGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIHJtZGlyIHdvcmtzIiA+JjUNCiRhc19l Y2hvX24gImNoZWNraW5nIHdoZXRoZXIgcm1kaXIgd29ya3MuLi4gIiA+JjY7IH0NCmlmICR7Z2xf Y3ZfZnVuY19ybWRpcl93b3Jrcys6fSBmYWxzZTsgdGhlbiA6DQogICRhc19lY2hvX24gIihjYWNo ZWQpICIgPiY2DQplbHNlDQogIG1rZGlyIGNvbmZ0ZXN0LmRpcg0KICAgICB0b3VjaCBjb25mdGVz dC5maWxlDQogICAgIGlmIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0geWVzOyB0aGVuIDoNCiAg Z2xfY3ZfZnVuY19ybWRpcl93b3Jrcz0iZ3Vlc3Npbmcgbm8iDQplbHNlDQogIGNhdCBjb25mZGVm cy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQNCi8qIGVuZCBjb25mZGVmcy5oLiAgKi8N CiNpbmNsdWRlIDxzdGRpby5oPg0KICAgICAgICAgICAjaW5jbHVkZSA8ZXJybm8uaD4NCiAgICAg ICAgICAgI2luY2x1ZGUgPHVuaXN0ZC5oPg0KDQppbnQNCm1haW4gKCkNCnsNCmludCByZXN1bHQg PSAwOw0KICAgICAgaWYgKCFybWRpciAoImNvbmZ0ZXN0LmZpbGUvIikpDQogICAgICAgIHJlc3Vs dCB8PSAxOw0KICAgICAgZWxzZSBpZiAoZXJybm8gIT0gRU5PVERJUikNCiAgICAgICAgcmVzdWx0 IHw9IDI7DQogICAgICBpZiAoIXJtZGlyICgiY29uZnRlc3QuZGlyLy4vIikpDQogICAgICAgIHJl c3VsdCB8PSA0Ow0KICAgICAgcmV0dXJuIHJlc3VsdDsNCg0KICA7DQogIHJldHVybiAwOw0KfQ0K X0FDRU9GDQppZiBhY19mbl9jX3RyeV9ydW4gIiRMSU5FTk8iOyB0aGVuIDoNCiAgZ2xfY3ZfZnVu Y19ybWRpcl93b3Jrcz15ZXMNCmVsc2UNCiAgZ2xfY3ZfZnVuY19ybWRpcl93b3Jrcz1ubw0KZmkN CnJtIC1mIGNvcmUgKi5jb3JlIGNvcmUuY29uZnRlc3QuKiBnbW9uLm91dCBiYi5vdXQgY29uZnRl c3QkYWNfZXhlZXh0IFwNCiAgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC5iZWFtIGNvbmZ0 ZXN0LiRhY19leHQNCmZpDQoNCiAgICAgcm0gLXJmIGNvbmZ0ZXN0LmRpciBjb25mdGVzdC5maWxl DQpmaQ0KeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRn bF9jdl9mdW5jX3JtZGlyX3dvcmtzIiA+JjUNCiRhc19lY2hvICIkZ2xfY3ZfZnVuY19ybWRpcl93 b3JrcyIgPiY2OyB9DQogIGlmIHRlc3QgeCIkZ2xfY3ZfZnVuY19ybWRpcl93b3JrcyIgIT0geHll czsgdGhlbg0KICAgIFJFUExBQ0VfUk1ESVI9MQ0KDQoNCg0KDQoNCg0KDQoNCiAgZ2xfTElCT0JK Uz0iJGdsX0xJQk9CSlMgcm1kaXIuJGFjX29iamV4dCINCg0KICBmaQ0KDQoNCg0KDQogIEdOVUxJ Ql9STURJUj0xDQoNCg0KDQokYXNfZWNobyAiI2RlZmluZSBHTlVMSUJfVEVTVF9STURJUiAxIiA+ PmNvbmZkZWZzLmgNCg0KDQoNCiAgIyBDb2RlIGZyb20gbW9kdWxlIHJvb3QtZGV2LWlubzoNCg0K DQoNCg0KDQoNCg0KDQoNCiAgZ2xfTElCT0JKUz0iJGdsX0xJQk9CSlMgcm9vdC1kZXYtaW5vLiRh Y19vYmpleHQiDQoNCg0KDQogIDoNCg0KICAjIENvZGUgZnJvbSBtb2R1bGUgcnBtYXRjaDoNCg0K DQoNCg0KDQoNCg0KDQoNCg0KDQoNCiAgZm9yIGFjX2Z1bmMgaW4gcnBtYXRjaA0KZG8gOg0KICBh Y19mbl9jX2NoZWNrX2Z1bmMgIiRMSU5FTk8iICJycG1hdGNoIiAiYWNfY3ZfZnVuY19ycG1hdGNo Ig0KaWYgdGVzdCAieCRhY19jdl9mdW5jX3JwbWF0Y2giID0geHllczsgdGhlbiA6DQogIGNhdCA+ PmNvbmZkZWZzLmggPDxfQUNFT0YNCiNkZWZpbmUgSEFWRV9SUE1BVENIIDENCl9BQ0VPRg0KDQpl bHNlDQoNCiAgICBnbF9MSUJPQkpTPSIkZ2xfTElCT0JKUyAkYWNfZnVuYy4kYWNfb2JqZXh0Ig0K DQpmaQ0KZG9uZQ0KDQoNCiAgaWYgdGVzdCAkYWNfY3ZfZnVuY19ycG1hdGNoID0gbm87IHRoZW4N CiAgICBIQVZFX1JQTUFUQ0g9MA0KDQogIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0k TElORU5PfTogY2hlY2tpbmcgZm9yIG5sX2xhbmdpbmZvIGFuZCBZRVNFWFBSIiA+JjUNCiRhc19l Y2hvX24gImNoZWNraW5nIGZvciBubF9sYW5naW5mbyBhbmQgWUVTRVhQUi4uLiAiID4mNjsgfQ0K aWYgJHtnbF9jdl9sYW5naW5mb195ZXNleHByKzp9IGZhbHNlOyB0aGVuIDoNCiAgJGFzX2VjaG9f biAiKGNhY2hlZCkgIiA+JjYNCmVsc2UNCiAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29u ZnRlc3QuJGFjX2V4dA0KLyogZW5kIGNvbmZkZWZzLmguICAqLw0KI2luY2x1ZGUgPGxhbmdpbmZv Lmg+DQppbnQNCm1haW4gKCkNCnsNCmNoYXIqIGNzID0gbmxfbGFuZ2luZm8oWUVTRVhQUik7IHJl dHVybiAhY3M7DQogIDsNCiAgcmV0dXJuIDA7DQp9DQpfQUNFT0YNCmlmIGFjX2ZuX2NfdHJ5X2xp bmsgIiRMSU5FTk8iOyB0aGVuIDoNCiAgZ2xfY3ZfbGFuZ2luZm9feWVzZXhwcj15ZXMNCmVsc2UN CiAgZ2xfY3ZfbGFuZ2luZm9feWVzZXhwcj1ubw0KZmkNCnJtIC1mIGNvcmUgY29uZnRlc3QuZXJy IGNvbmZ0ZXN0LiRhY19vYmpleHQgXA0KICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4k YWNfZXh0DQoNCmZpDQp7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJl c3VsdDogJGdsX2N2X2xhbmdpbmZvX3llc2V4cHIiID4mNQ0KJGFzX2VjaG8gIiRnbF9jdl9sYW5n aW5mb195ZXNleHByIiA+JjY7IH0NCiAgaWYgdGVzdCAkZ2xfY3ZfbGFuZ2luZm9feWVzZXhwciA9 IHllczsgdGhlbg0KDQokYXNfZWNobyAiI2RlZmluZSBIQVZFX0xBTkdJTkZPX1lFU0VYUFIgMSIg Pj5jb25mZGVmcy5oDQoNCiAgZmkNCg0KICBmaQ0KDQoNCg0KDQogIEdOVUxJQl9SUE1BVENIPTEN Cg0KDQoNCiRhc19lY2hvICIjZGVmaW5lIEdOVUxJQl9URVNUX1JQTUFUQ0ggMSIgPj5jb25mZGVm cy5oDQoNCg0KDQogICMgQ29kZSBmcm9tIG1vZHVsZSBzYWZlLXJlYWQ6DQoNCg0KDQoNCg0KDQoN Cg0KDQogIGdsX0xJQk9CSlM9IiRnbF9MSUJPQkpTIHNhZmUtcmVhZC4kYWNfb2JqZXh0Ig0KDQoN Cg0KDQoNCg0KICAjIENvZGUgZnJvbSBtb2R1bGUgc2FmZS13cml0ZToNCg0KDQoNCg0KDQoNCg0K DQoNCiAgZ2xfTElCT0JKUz0iJGdsX0xJQk9CSlMgc2FmZS13cml0ZS4kYWNfb2JqZXh0Ig0KDQoN Cg0KDQoNCg0KDQoNCiAgIyBDb2RlIGZyb20gbW9kdWxlIHNhbWU6DQoNCg0KDQoNCg0KDQoNCg0K DQogIGdsX0xJQk9CSlM9IiRnbF9MSUJPQkpTIHNhbWUuJGFjX29iamV4dCINCg0KDQoNCg0KDQog ICMgQ29kZSBmcm9tIG1vZHVsZSBzYW1lLWlub2RlOg0KICAjIENvZGUgZnJvbSBtb2R1bGUgc2F2 ZS1jd2Q6DQoNCg0KDQoNCg0KDQoNCg0KDQogIGdsX0xJQk9CSlM9IiRnbF9MSUJPQkpTIHNhdmUt Y3dkLiRhY19vYmpleHQiDQoNCg0KDQogICMgQ29kZSBmcm9tIG1vZHVsZSBzYXZlZGlyOg0KDQoN Cg0KDQoNCg0KDQoNCg0KICBnbF9MSUJPQkpTPSIkZ2xfTElCT0JKUyBzYXZlZGlyLiRhY19vYmpl eHQiDQoNCg0KICAjIENvZGUgZnJvbSBtb2R1bGUgc2F2ZXdkOg0KDQogICMgQ29kZSBmcm9tIG1v ZHVsZSBzY2hlZDoNCg0KICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNf ZXh0DQovKiBlbmQgY29uZmRlZnMuaC4gICovDQoNCiAgICAgICAjaW5jbHVkZSA8c2NoZWQuaD4N CiAgICAgICBzdHJ1Y3Qgc2NoZWRfcGFyYW0gYTsNCiAgICAgICBpbnQgYltdID0geyBTQ0hFRF9G SUZPLCBTQ0hFRF9SUiwgU0NIRURfT1RIRVIgfTsNCg0KaW50DQptYWluICgpDQp7DQoNCiAgOw0K ICByZXR1cm4gMDsNCn0NCl9BQ0VPRg0KaWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7 IHRoZW4gOg0KICBTQ0hFRF9IPScnDQplbHNlDQogIFNDSEVEX0g9J3NjaGVkLmgnDQoNCg0KDQoN Cg0KDQoNCg0KDQoNCiAgICAgaWYgdGVzdCAkZ2xfY3ZfaGF2ZV9pbmNsdWRlX25leHQgPSB5ZXM7 IHRoZW4NCiAgICAgICBnbF9jdl9uZXh0X3NjaGVkX2g9Jzwnc2NoZWQuaCc+Jw0KICAgICBlbHNl DQogICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2lu ZyBhYnNvbHV0ZSBuYW1lIG9mIDxzY2hlZC5oPiIgPiY1DQokYXNfZWNob19uICJjaGVja2luZyBh YnNvbHV0ZSBuYW1lIG9mIDxzY2hlZC5oPi4uLiAiID4mNjsgfQ0KaWYgJHtnbF9jdl9uZXh0X3Nj aGVkX2grOn0gZmFsc2U7IHRoZW4gOg0KICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNg0KZWxz ZQ0KDQogICAgICAgICAgICAgaWYgdGVzdCAkYWNfY3ZfaGVhZGVyX3NjaGVkX2ggPSB5ZXM7IHRo ZW4NCg0KDQogICAgICAgICAgICAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVz dC4kYWNfZXh0DQovKiBlbmQgY29uZmRlZnMuaC4gICovDQojaW5jbHVkZSA8c2NoZWQuaD4NCg0K X0FDRU9GDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBjYXNlICIkaG9zdF9vcyIgaW4NCiAgICAgICAgICAgICAgICAgYWl4Kikg Z2xfYWJzbmFtZV9jcHA9IiRhY19jcHAgLUMiIDs7DQogICAgICAgICAgICAgICAgICopICAgIGds X2Fic25hbWVfY3BwPSIkYWNfY3BwIiA7Ow0KICAgICAgICAgICAgICAgZXNhYw0KICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2xfY3Zf bmV4dF9zY2hlZF9oPSciJ2AoZXZhbCAiJGdsX2Fic25hbWVfY3BwIGNvbmZ0ZXN0LiRhY19leHQi KSAyPiY1IHwNCiAgICAgICAgICAgICAgICAgIHNlZCAtbiAnXCMvc2NoZWQuaCN7DQogICAgICAg ICAgICAgICAgICAgIHMjLioiXCguKi9zY2hlZC5oXCkiLiojXDEjDQogICAgICAgICAgICAgICAg ICAgIHMjXi9bXi9dIy8vJiMNCiAgICAgICAgICAgICAgICAgICAgcA0KICAgICAgICAgICAgICAg ICAgICBxDQogICAgICAgICAgICAgICAgICB9J2AnIicNCiAgICAgICAgICBlbHNlDQogICAgICAg ICAgICAgICBnbF9jdl9uZXh0X3NjaGVkX2g9Jzwnc2NoZWQuaCc+Jw0KICAgICAgICAgICAgIGZp DQoNCg0KZmkNCnsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0 OiAkZ2xfY3ZfbmV4dF9zY2hlZF9oIiA+JjUNCiRhc19lY2hvICIkZ2xfY3ZfbmV4dF9zY2hlZF9o IiA+JjY7IH0NCiAgICAgZmkNCiAgICAgTkVYVF9TQ0hFRF9IPSRnbF9jdl9uZXh0X3NjaGVkX2gN Cg0KICAgICBpZiB0ZXN0ICRnbF9jdl9oYXZlX2luY2x1ZGVfbmV4dCA9IHllcyB8fCB0ZXN0ICRn bF9jdl9oYXZlX2luY2x1ZGVfbmV4dCA9IGJ1Z2d5OyB0aGVuDQogICAgICAgIyBJTkNMVURFX05F WFRfQVNfRklSU1RfRElSRUNUSVZFPSdpbmNsdWRlX25leHQnDQogICAgICAgZ2xfbmV4dF9hc19m aXJzdF9kaXJlY3RpdmU9Jzwnc2NoZWQuaCc+Jw0KICAgICBlbHNlDQogICAgICAgIyBJTkNMVURF X05FWFRfQVNfRklSU1RfRElSRUNUSVZFPSdpbmNsdWRlJw0KICAgICAgIGdsX25leHRfYXNfZmly c3RfZGlyZWN0aXZlPSRnbF9jdl9uZXh0X3NjaGVkX2gNCiAgICAgZmkNCiAgICAgTkVYVF9BU19G SVJTVF9ESVJFQ1RJVkVfU0NIRURfSD0kZ2xfbmV4dF9hc19maXJzdF9kaXJlY3RpdmUNCg0KDQoN Cg0KDQogICAgIGlmIHRlc3QgJGFjX2N2X2hlYWRlcl9zY2hlZF9oID0geWVzOyB0aGVuDQogICAg ICAgSEFWRV9TQ0hFRF9IPTENCiAgICAgZWxzZQ0KICAgICAgIEhBVkVfU0NIRURfSD0wDQogICAg IGZpDQoNCg0KICAgICBhY19mbl9jX2NoZWNrX3R5cGUgIiRMSU5FTk8iICJzdHJ1Y3Qgc2NoZWRf cGFyYW0iICJhY19jdl90eXBlX3N0cnVjdF9zY2hlZF9wYXJhbSIgIiNpbmNsdWRlIDxzY2hlZC5o Pg0KIg0KaWYgdGVzdCAieCRhY19jdl90eXBlX3N0cnVjdF9zY2hlZF9wYXJhbSIgPSB4eWVzOyB0 aGVuIDoNCiAgSEFWRV9TVFJVQ1RfU0NIRURfUEFSQU09MQ0KZWxzZQ0KICBIQVZFX1NUUlVDVF9T Q0hFRF9QQVJBTT0wDQpmaQ0KDQoNCg0KZmkNCnJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0 ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dA0KDQogICBpZiB0ZXN0IC1uICIkU0NIRURf SCI7IHRoZW4NCiAgR0xfR0VORVJBVEVfU0NIRURfSF9UUlVFPQ0KICBHTF9HRU5FUkFURV9TQ0hF RF9IX0ZBTFNFPScjJw0KZWxzZQ0KICBHTF9HRU5FUkFURV9TQ0hFRF9IX1RSVUU9JyMnDQogIEdM X0dFTkVSQVRFX1NDSEVEX0hfRkFMU0U9DQpmaQ0KDQoNCiAgIyBDb2RlIGZyb20gbW9kdWxlIHNl bGVjdDoNCg0KDQoNCiAgaWYgdGVzdCAiJGFjX2N2X2hlYWRlcl93aW5zb2NrMl9oIiA9IHllczsg dGhlbg0KDQoNCg0KDQoNCg0KDQoNCiAgZ2xfTElCT0JKUz0iJGdsX0xJQk9CSlMgc2VsZWN0LiRh Y19vYmpleHQiDQoNCiAgZWxzZQ0KDQogICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5v LSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIHNlbGVjdCBzdXBwb3J0cyBhIDAgYXJndW1lbnQi ID4mNQ0KJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciBzZWxlY3Qgc3VwcG9ydHMgYSAwIGFy Z3VtZW50Li4uICIgPiY2OyB9DQppZiAke2dsX2N2X2Z1bmNfc2VsZWN0X3N1cHBvcnRzMCs6fSBm YWxzZTsgdGhlbiA6DQogICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2DQplbHNlDQoNCiAgICAg ICAgaWYgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgPSB5ZXM7IHRoZW4gOg0KDQogICAgICAgICAg IGNhc2UgIiRob3N0X29zIiBpbg0KICAgICAgICAgICAgICAgICAgICAgICAjIEd1ZXNzIG5vIG9u IEludGVyaXguDQogICAgICAgICAgICAgaW50ZXJpeCopIGdsX2N2X2Z1bmNfc2VsZWN0X3N1cHBv cnRzMD0iZ3Vlc3Npbmcgbm8iOzsNCiAgICAgICAgICAgICAgICAgICAgICAgIyBHdWVzcyB5ZXMg b3RoZXJ3aXNlLg0KICAgICAgICAgICAgICopICAgICAgICBnbF9jdl9mdW5jX3NlbGVjdF9zdXBw b3J0czA9Imd1ZXNzaW5nIHllcyI7Ow0KICAgICAgICAgICBlc2FjDQoNCmVsc2UNCiAgY2F0IGNv bmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dA0KLyogZW5kIGNvbmZkZWZzLmgu ICAqLw0KDQojaW5jbHVkZSA8c3lzL3R5cGVzLmg+DQojaW5jbHVkZSA8c3lzL3RpbWUuaD4NCiNp ZiBIQVZFX1NZU19TRUxFQ1RfSA0KI2luY2x1ZGUgPHN5cy9zZWxlY3QuaD4NCiNlbmRpZg0KaW50 IG1haW4gKCkNCnsNCiAgc3RydWN0IHRpbWV2YWwgdGltZW91dDsNCiAgdGltZW91dC50dl9zZWMg PSAwOw0KICB0aW1lb3V0LnR2X3VzZWMgPSA1Ow0KICByZXR1cm4gc2VsZWN0ICgwLCAoZmRfc2V0 ICopMCwgKGZkX3NldCAqKTAsIChmZF9zZXQgKikwLCAmdGltZW91dCkgPCAwOw0KfQ0KX0FDRU9G DQppZiBhY19mbl9jX3RyeV9ydW4gIiRMSU5FTk8iOyB0aGVuIDoNCiAgZ2xfY3ZfZnVuY19zZWxl Y3Rfc3VwcG9ydHMwPXllcw0KZWxzZQ0KICBnbF9jdl9mdW5jX3NlbGVjdF9zdXBwb3J0czA9bm8N CmZpDQpybSAtZiBjb3JlICouY29yZSBjb3JlLmNvbmZ0ZXN0LiogZ21vbi5vdXQgYmIub3V0IGNv bmZ0ZXN0JGFjX2V4ZWV4dCBcDQogIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuYmVhbSBj b25mdGVzdC4kYWNfZXh0DQpmaQ0KDQoNCmZpDQp7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5l bm8tJExJTkVOT306IHJlc3VsdDogJGdsX2N2X2Z1bmNfc2VsZWN0X3N1cHBvcnRzMCIgPiY1DQok YXNfZWNobyAiJGdsX2N2X2Z1bmNfc2VsZWN0X3N1cHBvcnRzMCIgPiY2OyB9DQogICAgY2FzZSAi JGdsX2N2X2Z1bmNfc2VsZWN0X3N1cHBvcnRzMCIgaW4NCiAgICAgICp5ZXMpIDs7DQogICAgICAq KQ0KICAgICAgICBSRVBMQUNFX1NFTEVDVD0xDQoNCg0KDQoNCg0KDQoNCg0KICBnbF9MSUJPQkpT PSIkZ2xfTElCT0JKUyBzZWxlY3QuJGFjX29iamV4dCINCg0KICAgICAgICA7Ow0KICAgIGVzYWMN CiAgZmkNCg0KDQoNCg0KICBHTlVMSUJfU0VMRUNUPTENCg0KDQoNCiRhc19lY2hvICIjZGVmaW5l IEdOVUxJQl9URVNUX1NFTEVDVCAxIiA+PmNvbmZkZWZzLmgNCg0KDQoNCiAgIyBDb2RlIGZyb20g bW9kdWxlIHNlbGludXgtYXQ6DQogIGZvciBhY19oZWFkZXIgaW4gc2VsaW51eC9mbGFzay5oDQpk byA6DQogIGFjX2ZuX2NfY2hlY2tfaGVhZGVyX21vbmdyZWwgIiRMSU5FTk8iICJzZWxpbnV4L2Zs YXNrLmgiICJhY19jdl9oZWFkZXJfc2VsaW51eF9mbGFza19oIiAiJGFjX2luY2x1ZGVzX2RlZmF1 bHQiDQppZiB0ZXN0ICJ4JGFjX2N2X2hlYWRlcl9zZWxpbnV4X2ZsYXNrX2giID0geHllczsgdGhl biA6DQogIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YNCiNkZWZpbmUgSEFWRV9TRUxJTlVYX0ZM QVNLX0ggMQ0KX0FDRU9GDQoNCmZpDQoNCmRvbmUNCg0KDQoNCg0KDQoNCg0KDQoNCiAgZ2xfTElC T0JKUz0iJGdsX0xJQk9CSlMgc2VsaW51eC1hdC4kYWNfb2JqZXh0Ig0KDQogICMgQ29kZSBmcm9t IG1vZHVsZSBzZWxpbnV4LWg6DQoNCg0KICBpZiB0ZXN0ICIkd2l0aF9zZWxpbnV4IiAhPSBubzsg dGhlbg0KICAgIGZvciBhY19oZWFkZXIgaW4gc2VsaW51eC9zZWxpbnV4LmgNCmRvIDoNCiAgYWNf Zm5fY19jaGVja19oZWFkZXJfbW9uZ3JlbCAiJExJTkVOTyIgInNlbGludXgvc2VsaW51eC5oIiAi YWNfY3ZfaGVhZGVyX3NlbGludXhfc2VsaW51eF9oIiAiJGFjX2luY2x1ZGVzX2RlZmF1bHQiDQpp ZiB0ZXN0ICJ4JGFjX2N2X2hlYWRlcl9zZWxpbnV4X3NlbGludXhfaCIgPSB4eWVzOyB0aGVuIDoN CiAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRg0KI2RlZmluZSBIQVZFX1NFTElOVVhfU0VMSU5V WF9IIDENCl9BQ0VPRg0KDQpmaQ0KDQpkb25lDQoNCg0KICAgIGlmIHRlc3QgIiRhY19jdl9oZWFk ZXJfc2VsaW51eF9zZWxpbnV4X2giID0geWVzOyB0aGVuDQogICAgICAjIFdlIGRvIGhhdmUgPHNl bGludXgvc2VsaW51eC5oPiwgc28gZG8gY29tcGlsZSBnZXRmaWxlY29uLmMNCiAgICAgICMgYW5k IGFycmFuZ2UgdG8gdXNlIGl0cyB3cmFwcGVycy4NCg0KDQoNCg0KDQoNCg0KDQogIGdsX0xJQk9C SlM9IiRnbF9MSUJPQkpTIGdldGZpbGVjb24uJGFjX29iamV4dCINCg0KDQoNCg0KDQoNCg0KDQoN Cg0KICAgICBpZiB0ZXN0ICRnbF9jdl9oYXZlX2luY2x1ZGVfbmV4dCA9IHllczsgdGhlbg0KICAg ICAgIGdsX2N2X25leHRfc2VsaW51eF9zZWxpbnV4X2g9Jzwnc2VsaW51eC9zZWxpbnV4LmgnPicN CiAgICAgZWxzZQ0KICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5P fTogY2hlY2tpbmcgYWJzb2x1dGUgbmFtZSBvZiA8c2VsaW51eC9zZWxpbnV4Lmg+IiA+JjUNCiRh c19lY2hvX24gImNoZWNraW5nIGFic29sdXRlIG5hbWUgb2YgPHNlbGludXgvc2VsaW51eC5oPi4u LiAiID4mNjsgfQ0KaWYgJHtnbF9jdl9uZXh0X3NlbGludXhfc2VsaW51eF9oKzp9IGZhbHNlOyB0 aGVuIDoNCiAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYNCmVsc2UNCg0KICAgICAgICAgICAg IGlmIHRlc3QgJGFjX2N2X2hlYWRlcl9zZWxpbnV4X3NlbGludXhfaCA9IHllczsgdGhlbg0KDQoN CiAgICAgICAgICAgICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19l eHQNCi8qIGVuZCBjb25mZGVmcy5oLiAgKi8NCiNpbmNsdWRlIDxzZWxpbnV4L3NlbGludXguaD4N Cg0KX0FDRU9GDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBjYXNlICIkaG9zdF9vcyIgaW4NCiAgICAgICAgICAgICAgICAgYWl4 KikgZ2xfYWJzbmFtZV9jcHA9IiRhY19jcHAgLUMiIDs7DQogICAgICAgICAgICAgICAgICopICAg IGdsX2Fic25hbWVfY3BwPSIkYWNfY3BwIiA7Ow0KICAgICAgICAgICAgICAgZXNhYw0KICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2xf Y3ZfbmV4dF9zZWxpbnV4X3NlbGludXhfaD0nIidgKGV2YWwgIiRnbF9hYnNuYW1lX2NwcCBjb25m dGVzdC4kYWNfZXh0IikgMj4mNSB8DQogICAgICAgICAgICAgICAgICBzZWQgLW4gJ1wjL3NlbGlu dXgvc2VsaW51eC5oI3sNCiAgICAgICAgICAgICAgICAgICAgcyMuKiJcKC4qL3NlbGludXgvc2Vs aW51eC5oXCkiLiojXDEjDQogICAgICAgICAgICAgICAgICAgIHMjXi9bXi9dIy8vJiMNCiAgICAg ICAgICAgICAgICAgICAgcA0KICAgICAgICAgICAgICAgICAgICBxDQogICAgICAgICAgICAgICAg ICB9J2AnIicNCiAgICAgICAgICBlbHNlDQogICAgICAgICAgICAgICBnbF9jdl9uZXh0X3NlbGlu dXhfc2VsaW51eF9oPSc8J3NlbGludXgvc2VsaW51eC5oJz4nDQogICAgICAgICAgICAgZmkNCg0K DQpmaQ0KeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRn bF9jdl9uZXh0X3NlbGludXhfc2VsaW51eF9oIiA+JjUNCiRhc19lY2hvICIkZ2xfY3ZfbmV4dF9z ZWxpbnV4X3NlbGludXhfaCIgPiY2OyB9DQogICAgIGZpDQogICAgIE5FWFRfU0VMSU5VWF9TRUxJ TlVYX0g9JGdsX2N2X25leHRfc2VsaW51eF9zZWxpbnV4X2gNCg0KICAgICBpZiB0ZXN0ICRnbF9j dl9oYXZlX2luY2x1ZGVfbmV4dCA9IHllcyB8fCB0ZXN0ICRnbF9jdl9oYXZlX2luY2x1ZGVfbmV4 dCA9IGJ1Z2d5OyB0aGVuDQogICAgICAgIyBJTkNMVURFX05FWFRfQVNfRklSU1RfRElSRUNUSVZF PSdpbmNsdWRlX25leHQnDQogICAgICAgZ2xfbmV4dF9hc19maXJzdF9kaXJlY3RpdmU9Jzwnc2Vs aW51eC9zZWxpbnV4LmgnPicNCiAgICAgZWxzZQ0KICAgICAgICMgSU5DTFVERV9ORVhUX0FTX0ZJ UlNUX0RJUkVDVElWRT0naW5jbHVkZScNCiAgICAgICBnbF9uZXh0X2FzX2ZpcnN0X2RpcmVjdGl2 ZT0kZ2xfY3ZfbmV4dF9zZWxpbnV4X3NlbGludXhfaA0KICAgICBmaQ0KICAgICBORVhUX0FTX0ZJ UlNUX0RJUkVDVElWRV9TRUxJTlVYX1NFTElOVVhfSD0kZ2xfbmV4dF9hc19maXJzdF9kaXJlY3Rp dmUNCg0KDQoNCg0KDQokYXNfZWNobyAiI2RlZmluZSBnZXRmaWxlY29uIHJwbF9nZXRmaWxlY29u IiA+PmNvbmZkZWZzLmgNCg0KDQokYXNfZWNobyAiI2RlZmluZSBsZ2V0ZmlsZWNvbiBycGxfbGdl dGZpbGVjb24iID4+Y29uZmRlZnMuaA0KDQoNCiRhc19lY2hvICIjZGVmaW5lIGZnZXRmaWxlY29u IHJwbF9mZ2V0ZmlsZWNvbiIgPj5jb25mZGVmcy5oDQoNCiAgICBmaQ0KDQogICAgY2FzZSAiJGFj X2N2X3NlYXJjaF9zZXRmaWxlY29uOiRhY19jdl9oZWFkZXJfc2VsaW51eF9zZWxpbnV4X2giIGlu DQogICAgICBubzoqKSAjIGFscmVhZHkgd2FybmVkDQogICAgICAgIDs7DQogICAgICAqOm5vKQ0K ICAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6 IGxpYnNlbGludXggd2FzIGZvdW5kIGJ1dCBzZWxpbnV4L3NlbGludXguaCBpcyBtaXNzaW5nLiIg PiY1DQokYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiBsaWJzZWxpbnV4IHdhcyBmb3VuZCBidXQg c2VsaW51eC9zZWxpbnV4LmggaXMgbWlzc2luZy4iID4mMjt9DQogICAgICAgIHsgJGFzX2VjaG8g IiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogR05VIGNvcmV1dGlscyB3aWxs IGJlIGNvbXBpbGVkIHdpdGhvdXQgU0VMaW51eCBzdXBwb3J0LiIgPiY1DQokYXNfZWNobyAiJGFz X21lOiBXQVJOSU5HOiBHTlUgY29yZXV0aWxzIHdpbGwgYmUgY29tcGlsZWQgd2l0aG91dCBTRUxp bnV4IHN1cHBvcnQuIiA+JjI7fQ0KICAgIGVzYWMNCiAgZWxzZQ0KICAgICMgRG8gYXMgaWYgPHNl bGludXgvc2VsaW51eC5oPiBkb2VzIG5vdCBleGlzdCwgZXZlbiBpZg0KICAgICMgQUNfQ0hFQ0tf SEVBREVSU19PTkNFIGhhcyBhbHJlYWR5IGRldGVybWluZWQgdGhhdCBpdCBleGlzdHMuDQogICAg JGFzX2VjaG8gIiNkZWZpbmUgSEFWRV9TRUxJTlVYX1NFTElOVVhfSCAwIiA+PmNvbmZkZWZzLmgN Cg0KICBmaQ0KDQoNCg0KICBpZiB0ZXN0ICIkd2l0aF9zZWxpbnV4IiAhPSBubzsgdGhlbg0KICAg IGZvciBhY19oZWFkZXIgaW4gc2VsaW51eC9jb250ZXh0LmgNCmRvIDoNCiAgYWNfZm5fY19jaGVj a19oZWFkZXJfbW9uZ3JlbCAiJExJTkVOTyIgInNlbGludXgvY29udGV4dC5oIiAiYWNfY3ZfaGVh ZGVyX3NlbGludXhfY29udGV4dF9oIiAiJGFjX2luY2x1ZGVzX2RlZmF1bHQiDQppZiB0ZXN0ICJ4 JGFjX2N2X2hlYWRlcl9zZWxpbnV4X2NvbnRleHRfaCIgPSB4eWVzOyB0aGVuIDoNCiAgY2F0ID4+ Y29uZmRlZnMuaCA8PF9BQ0VPRg0KI2RlZmluZSBIQVZFX1NFTElOVVhfQ09OVEVYVF9IIDENCl9B Q0VPRg0KIFNFTElOVVhfQ09OVEVYVF9IPQ0KZWxzZQ0KICBTRUxJTlVYX0NPTlRFWFRfSD1zZWxp bnV4L2NvbnRleHQuaA0KZmkNCg0KZG9uZQ0KDQogIGVsc2UNCiAgICBTRUxJTlVYX0NPTlRFWFRf SD1zZWxpbnV4L2NvbnRleHQuaA0KICBmaQ0KDQogICBpZiB0ZXN0IC1uICIkU0VMSU5VWF9DT05U RVhUX0giOyB0aGVuDQogIEdMX0dFTkVSQVRFX1NFTElOVVhfQ09OVEVYVF9IX1RSVUU9DQogIEdM X0dFTkVSQVRFX1NFTElOVVhfQ09OVEVYVF9IX0ZBTFNFPScjJw0KZWxzZQ0KICBHTF9HRU5FUkFU RV9TRUxJTlVYX0NPTlRFWFRfSF9UUlVFPScjJw0KICBHTF9HRU5FUkFURV9TRUxJTlVYX0NPTlRF WFRfSF9GQUxTRT0NCmZpDQoNCg0KDQogICMgQ29kZSBmcm9tIG1vZHVsZSBzZXJ2ZW50Og0KDQog ICAgICAgICAgICAgICAgICAgICAgU0VSVkVOVF9MSUI9DQogIGdsX3NhdmVkX2xpYnM9IiRMSUJT Ig0KICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZv ciBsaWJyYXJ5IGNvbnRhaW5pbmcgZ2V0c2VydmJ5bmFtZSIgPiY1DQokYXNfZWNob19uICJjaGVj a2luZyBmb3IgbGlicmFyeSBjb250YWluaW5nIGdldHNlcnZieW5hbWUuLi4gIiA+JjY7IH0NCmlm ICR7YWNfY3Zfc2VhcmNoX2dldHNlcnZieW5hbWUrOn0gZmFsc2U7IHRoZW4gOg0KICAkYXNfZWNo b19uICIoY2FjaGVkKSAiID4mNg0KZWxzZQ0KICBhY19mdW5jX3NlYXJjaF9zYXZlX0xJQlM9JExJ QlMNCmNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQNCi8qIGVuZCBj b25mZGVmcy5oLiAgKi8NCg0KLyogT3ZlcnJpZGUgYW55IEdDQyBpbnRlcm5hbCBwcm90b3R5cGUg dG8gYXZvaWQgYW4gZXJyb3IuDQogICBVc2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0 aGUgcmV0dXJuIHR5cGUgb2YgYSBHQ0MNCiAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50 IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovDQojaWZkZWYgX19jcGx1c3BsdXMNCmV4 dGVybiAiQyINCiNlbmRpZg0KY2hhciBnZXRzZXJ2YnluYW1lICgpOw0KaW50DQptYWluICgpDQp7 DQpyZXR1cm4gZ2V0c2VydmJ5bmFtZSAoKTsNCiAgOw0KICByZXR1cm4gMDsNCn0NCl9BQ0VPRg0K Zm9yIGFjX2xpYiBpbiAnJyBzb2NrZXQgbmV0d29yayBuZXQ7IGRvDQogIGlmIHRlc3QgLXogIiRh Y19saWIiOyB0aGVuDQogICAgYWNfcmVzPSJub25lIHJlcXVpcmVkIg0KICBlbHNlDQogICAgYWNf cmVzPS1sJGFjX2xpYg0KICAgIExJQlM9Ii1sJGFjX2xpYiAgJGFjX2Z1bmNfc2VhcmNoX3NhdmVf TElCUyINCiAgZmkNCiAgaWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOg0KICBh Y19jdl9zZWFyY2hfZ2V0c2VydmJ5bmFtZT0kYWNfcmVzDQpmaQ0Kcm0gLWYgY29yZSBjb25mdGVz dC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcDQogICAgY29uZnRlc3QkYWNfZXhlZXh0DQogIGlm ICR7YWNfY3Zfc2VhcmNoX2dldHNlcnZieW5hbWUrOn0gZmFsc2U7IHRoZW4gOg0KICBicmVhaw0K ZmkNCmRvbmUNCmlmICR7YWNfY3Zfc2VhcmNoX2dldHNlcnZieW5hbWUrOn0gZmFsc2U7IHRoZW4g Og0KDQplbHNlDQogIGFjX2N2X3NlYXJjaF9nZXRzZXJ2YnluYW1lPW5vDQpmaQ0Kcm0gY29uZnRl c3QuJGFjX2V4dA0KTElCUz0kYWNfZnVuY19zZWFyY2hfc2F2ZV9MSUJTDQpmaQ0KeyAkYXNfZWNo byAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9zZWFyY2hfZ2V0 c2VydmJ5bmFtZSIgPiY1DQokYXNfZWNobyAiJGFjX2N2X3NlYXJjaF9nZXRzZXJ2YnluYW1lIiA+ JjY7IH0NCmFjX3Jlcz0kYWNfY3Zfc2VhcmNoX2dldHNlcnZieW5hbWUNCmlmIHRlc3QgIiRhY19y ZXMiICE9IG5vOyB0aGVuIDoNCiAgdGVzdCAiJGFjX3JlcyIgPSAibm9uZSByZXF1aXJlZCIgfHwg TElCUz0iJGFjX3JlcyAkTElCUyINCiAgaWYgdGVzdCAiJGFjX2N2X3NlYXJjaF9nZXRzZXJ2Ynlu YW1lIiAhPSAibm9uZSByZXF1aXJlZCI7IHRoZW4NCiAgICAgICBTRVJWRU5UX0xJQj0iJGFjX2N2 X3NlYXJjaF9nZXRzZXJ2YnluYW1lIg0KICAgICBmaQ0KZmkNCg0KICBMSUJTPSIkZ2xfc2F2ZWRf bGlicyINCiAgaWYgdGVzdCAteiAiJFNFUlZFTlRfTElCIjsgdGhlbg0KICAgIGZvciBhY19mdW5j IGluIGdldHNlcnZieW5hbWUNCmRvIDoNCiAgYWNfZm5fY19jaGVja19mdW5jICIkTElORU5PIiAi Z2V0c2VydmJ5bmFtZSIgImFjX2N2X2Z1bmNfZ2V0c2VydmJ5bmFtZSINCmlmIHRlc3QgIngkYWNf Y3ZfZnVuY19nZXRzZXJ2YnluYW1lIiA9IHh5ZXM7IHRoZW4gOg0KICBjYXQgPj5jb25mZGVmcy5o IDw8X0FDRU9GDQojZGVmaW5lIEhBVkVfR0VUU0VSVkJZTkFNRSAxDQpfQUNFT0YNCg0KZWxzZQ0K DQogICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5n IGZvciBnZXRzZXJ2YnluYW1lIGluIHdpbnNvY2syLmggYW5kIC1sd3MyXzMyIiA+JjUNCiRhc19l Y2hvX24gImNoZWNraW5nIGZvciBnZXRzZXJ2YnluYW1lIGluIHdpbnNvY2syLmggYW5kIC1sd3My XzMyLi4uICIgPiY2OyB9DQppZiAke2dsX2N2X3czMl9nZXRzZXJ2YnluYW1lKzp9IGZhbHNlOyB0 aGVuIDoNCiAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYNCmVsc2UNCiAgZ2xfY3ZfdzMyX2dl dHNlcnZieW5hbWU9bm8NCiAgICAgICAgIGdsX3NhdmVfTElCUz0iJExJQlMiDQogICAgICAgICBM SUJTPSIkTElCUyAtbHdzMl8zMiINCiAgICAgICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0Yg PmNvbmZ0ZXN0LiRhY19leHQNCi8qIGVuZCBjb25mZGVmcy5oLiAgKi8NCg0KI2lmZGVmIEhBVkVf V0lOU09DSzJfSA0KI2luY2x1ZGUgPHdpbnNvY2syLmg+DQojZW5kaWYNCiNpbmNsdWRlIDxzdGRk ZWYuaD4NCg0KaW50DQptYWluICgpDQp7DQpnZXRzZXJ2YnluYW1lKE5VTEwsTlVMTCk7DQogIDsN CiAgcmV0dXJuIDA7DQp9DQpfQUNFT0YNCmlmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0 aGVuIDoNCiAgZ2xfY3ZfdzMyX2dldHNlcnZieW5hbWU9eWVzDQpmaQ0Kcm0gLWYgY29yZSBjb25m dGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcDQogICAgY29uZnRlc3QkYWNfZXhlZXh0IGNv bmZ0ZXN0LiRhY19leHQNCiAgICAgICAgIExJQlM9IiRnbF9zYXZlX0xJQlMiDQoNCmZpDQp7ICRh c19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGdsX2N2X3czMl9n ZXRzZXJ2YnluYW1lIiA+JjUNCiRhc19lY2hvICIkZ2xfY3ZfdzMyX2dldHNlcnZieW5hbWUiID4m NjsgfQ0KICAgICAgaWYgdGVzdCAiJGdsX2N2X3czMl9nZXRzZXJ2YnluYW1lIiA9ICJ5ZXMiOyB0 aGVuDQogICAgICAgIFNFUlZFTlRfTElCPSItbHdzMl8zMiINCiAgICAgIGZpDQoNCmZpDQpkb25l DQoNCiAgZmkNCg0KDQogICMgQ29kZSBmcm9tIG1vZHVsZSBzZXRlbnY6DQoNCg0KICBpZiB0ZXN0 ICRIQVZFX1NFVEVOViRSRVBMQUNFX1NFVEVOViAhPSAxMDsgdGhlbg0KDQoNCg0KDQoNCg0KDQoN CiAgZ2xfTElCT0JKUz0iJGdsX0xJQk9CSlMgc2V0ZW52LiRhY19vYmpleHQiDQoNCiAgZmkNCg0K DQoNCg0KICBHTlVMSUJfU0VURU5WPTENCg0KDQoNCiRhc19lY2hvICIjZGVmaW5lIEdOVUxJQl9U RVNUX1NFVEVOViAxIiA+PmNvbmZkZWZzLmgNCg0KDQoNCiAgIyBDb2RlIGZyb20gbW9kdWxlIHNl dHRpbWU6DQoNCg0KDQoNCg0KDQoNCg0KDQogIGdsX0xJQk9CSlM9IiRnbF9MSUJPQkpTIHNldHRp bWUuJGFjX29iamV4dCINCg0KDQoNCg0KDQoNCiAgIyBDb2RlIGZyb20gbW9kdWxlIHNpZzJzdHI6 DQoNCg0KDQoNCg0KDQoNCg0KDQoNCiAgZm9yIGFjX2Z1bmMgaW4gc2lnMnN0cg0KZG8gOg0KICBh Y19mbl9jX2NoZWNrX2Z1bmMgIiRMSU5FTk8iICJzaWcyc3RyIiAiYWNfY3ZfZnVuY19zaWcyc3Ry Ig0KaWYgdGVzdCAieCRhY19jdl9mdW5jX3NpZzJzdHIiID0geHllczsgdGhlbiA6DQogIGNhdCA+ PmNvbmZkZWZzLmggPDxfQUNFT0YNCiNkZWZpbmUgSEFWRV9TSUcyU1RSIDENCl9BQ0VPRg0KDQpl bHNlDQoNCiAgICBnbF9MSUJPQkpTPSIkZ2xfTElCT0JKUyAkYWNfZnVuYy4kYWNfb2JqZXh0Ig0K DQpmaQ0KZG9uZQ0KDQoNCiAgaWYgdGVzdCAkYWNfY3ZfZnVuY19zaWcyc3RyID0gbm87IHRoZW4N Cg0KICA6DQoNCiAgZmkNCg0KICAjIENvZGUgZnJvbSBtb2R1bGUgc2lnYWN0aW9uOg0KDQoNCg0K ICBpZiB0ZXN0ICRhY19jdl9mdW5jX3NpZ2FjdGlvbiA9IHllczsgdGhlbg0KICAgIGFjX2ZuX2Nf Y2hlY2tfbWVtYmVyICIkTElORU5PIiAic3RydWN0IHNpZ2FjdGlvbiIgInNhX3NpZ2FjdGlvbiIg ImFjX2N2X21lbWJlcl9zdHJ1Y3Rfc2lnYWN0aW9uX3NhX3NpZ2FjdGlvbiIgIiNpbmNsdWRlIDxz aWduYWwuaD4NCiINCmlmIHRlc3QgIngkYWNfY3ZfbWVtYmVyX3N0cnVjdF9zaWdhY3Rpb25fc2Ff c2lnYWN0aW9uIiA9IHh5ZXM7IHRoZW4gOg0KDQpjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GDQoj ZGVmaW5lIEhBVkVfU1RSVUNUX1NJR0FDVElPTl9TQV9TSUdBQ1RJT04gMQ0KX0FDRU9GDQoNCg0K ZmkNCg0KICAgIGlmIHRlc3QgJGFjX2N2X21lbWJlcl9zdHJ1Y3Rfc2lnYWN0aW9uX3NhX3NpZ2Fj dGlvbiA9IG5vOyB0aGVuDQogICAgICBIQVZFX1NUUlVDVF9TSUdBQ1RJT05fU0FfU0lHQUNUSU9O PTANCiAgICBmaQ0KICBlbHNlDQogICAgSEFWRV9TSUdBQ1RJT049MA0KDQoNCg0KDQoNCg0KDQoN CiAgZ2xfTElCT0JKUz0iJGdsX0xJQk9CSlMgc2lnYWN0aW9uLiRhY19vYmpleHQiDQoNCg0KDQoN Cg0KDQoNCiAgYWNfZm5fY19jaGVja190eXBlICIkTElORU5PIiAic2lnaW5mb190IiAiYWNfY3Zf dHlwZV9zaWdpbmZvX3QiICINCiNpbmNsdWRlIDxzaWduYWwuaD4NCg0KIg0KaWYgdGVzdCAieCRh Y19jdl90eXBlX3NpZ2luZm9fdCIgPSB4eWVzOyB0aGVuIDoNCg0KY2F0ID4+Y29uZmRlZnMuaCA8 PF9BQ0VPRg0KI2RlZmluZSBIQVZFX1NJR0lORk9fVCAxDQpfQUNFT0YNCg0KDQpmaQ0KDQogIGlm IHRlc3QgJGFjX2N2X3R5cGVfc2lnaW5mb190ID0gbm87IHRoZW4NCiAgICBIQVZFX1NJR0lORk9f VD0wDQogIGZpDQoNCiAgZmkNCg0KDQoNCg0KICBHTlVMSUJfU0lHQUNUSU9OPTENCg0KDQoNCiRh c19lY2hvICIjZGVmaW5lIEdOVUxJQl9URVNUX1NJR0FDVElPTiAxIiA+PmNvbmZkZWZzLmgNCg0K DQoNCiAgIyBDb2RlIGZyb20gbW9kdWxlIHNpZ25hbDoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KICAg ICBpZiB0ZXN0ICRnbF9jdl9oYXZlX2luY2x1ZGVfbmV4dCA9IHllczsgdGhlbg0KICAgICAgIGds X2N2X25leHRfc2lnbmFsX2g9Jzwnc2lnbmFsLmgnPicNCiAgICAgZWxzZQ0KICAgICAgIHsgJGFz X2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgYWJzb2x1dGUgbmFt ZSBvZiA8c2lnbmFsLmg+IiA+JjUNCiRhc19lY2hvX24gImNoZWNraW5nIGFic29sdXRlIG5hbWUg b2YgPHNpZ25hbC5oPi4uLiAiID4mNjsgfQ0KaWYgJHtnbF9jdl9uZXh0X3NpZ25hbF9oKzp9IGZh bHNlOyB0aGVuIDoNCiAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYNCmVsc2UNCg0KICAgICAg ICAgICAgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dA0KLyog ZW5kIGNvbmZkZWZzLmguICAqLw0KI2luY2x1ZGUgPHNpZ25hbC5oPg0KDQpfQUNFT0YNCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGNhc2UgIiRob3N0X29zIiBpbg0KICAgICAgICAgICAgICAgICBhaXgqKSBnbF9hYnNuYW1lX2Nw cD0iJGFjX2NwcCAtQyIgOzsNCiAgICAgICAgICAgICAgICAgKikgICAgZ2xfYWJzbmFtZV9jcHA9 IiRhY19jcHAiIDs7DQogICAgICAgICAgICAgICBlc2FjDQogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbF9jdl9uZXh0X3NpZ25hbF9o PSciJ2AoZXZhbCAiJGdsX2Fic25hbWVfY3BwIGNvbmZ0ZXN0LiRhY19leHQiKSAyPiY1IHwNCiAg ICAgICAgICAgICAgICAgIHNlZCAtbiAnXCMvc2lnbmFsLmgjew0KICAgICAgICAgICAgICAgICAg ICBzIy4qIlwoLiovc2lnbmFsLmhcKSIuKiNcMSMNCiAgICAgICAgICAgICAgICAgICAgcyNeL1te L10jLy8mIw0KICAgICAgICAgICAgICAgICAgICBwDQogICAgICAgICAgICAgICAgICAgIHENCiAg ICAgICAgICAgICAgICAgIH0nYCciJw0KDQoNCmZpDQp7ICRhc19lY2hvICIkYXNfbWU6JHthc19s aW5lbm8tJExJTkVOT306IHJlc3VsdDogJGdsX2N2X25leHRfc2lnbmFsX2giID4mNQ0KJGFzX2Vj aG8gIiRnbF9jdl9uZXh0X3NpZ25hbF9oIiA+JjY7IH0NCiAgICAgZmkNCiAgICAgTkVYVF9TSUdO QUxfSD0kZ2xfY3ZfbmV4dF9zaWduYWxfaA0KDQogICAgIGlmIHRlc3QgJGdsX2N2X2hhdmVfaW5j bHVkZV9uZXh0ID0geWVzIHx8IHRlc3QgJGdsX2N2X2hhdmVfaW5jbHVkZV9uZXh0ID0gYnVnZ3k7 IHRoZW4NCiAgICAgICAjIElOQ0xVREVfTkVYVF9BU19GSVJTVF9ESVJFQ1RJVkU9J2luY2x1ZGVf bmV4dCcNCiAgICAgICBnbF9uZXh0X2FzX2ZpcnN0X2RpcmVjdGl2ZT0nPCdzaWduYWwuaCc+Jw0K ICAgICBlbHNlDQogICAgICAgIyBJTkNMVURFX05FWFRfQVNfRklSU1RfRElSRUNUSVZFPSdpbmNs dWRlJw0KICAgICAgIGdsX25leHRfYXNfZmlyc3RfZGlyZWN0aXZlPSRnbF9jdl9uZXh0X3NpZ25h bF9oDQogICAgIGZpDQogICAgIE5FWFRfQVNfRklSU1RfRElSRUNUSVZFX1NJR05BTF9IPSRnbF9u ZXh0X2FzX2ZpcnN0X2RpcmVjdGl2ZQ0KDQoNCg0KDQojIEFJWCBkZWNsYXJlcyBzaWdfYXRvbWlj X3QgdG8gYWxyZWFkeSBpbmNsdWRlIHZvbGF0aWxlLCBhbmQgQzg5IGNvbXBpbGVycw0KIyB0aGVu IGNob2tlIG9uICd2b2xhdGlsZSBzaWdfYXRvbWljX3QnLiAgQzk5IHJlcXVpcmVzIHRoYXQgaXQg Y29tcGlsZS4NCiAgYWNfZm5fY19jaGVja190eXBlICIkTElORU5PIiAidm9sYXRpbGUgc2lnX2F0 b21pY190IiAiYWNfY3ZfdHlwZV92b2xhdGlsZV9zaWdfYXRvbWljX3QiICINCiNpbmNsdWRlIDxz aWduYWwuaD4NCg0KIg0KaWYgdGVzdCAieCRhY19jdl90eXBlX3ZvbGF0aWxlX3NpZ19hdG9taWNf dCIgPSB4eWVzOyB0aGVuIDoNCg0KZWxzZQ0KICBIQVZFX1RZUEVfVk9MQVRJTEVfU0lHX0FUT01J Q19UPTANCmZpDQoNCg0KDQoNCiAgICBmb3IgZ2xfZnVuYyBpbiBzaWdhY3Rpb24gc2lnYWRkc2V0 IHNpZ2RlbHNldCBzaWdlbXB0eXNldCBzaWdmaWxsc2V0IHNpZ2lzbWVtYmVyICAgICBzaWdwZW5k aW5nIHNpZ3Byb2NtYXNrOyBkbw0KICAgIGFzX2dsX1N5bWJvbD1gJGFzX2VjaG8gImdsX2N2X2hh dmVfcmF3X2RlY2xfJGdsX2Z1bmMiIHwgJGFzX3RyX3NoYA0KICAgIHsgJGFzX2VjaG8gIiRhc19t ZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciAkZ2xfZnVuYyBpcyBkZWNs YXJlZCB3aXRob3V0IGEgbWFjcm8iID4mNQ0KJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciAk Z2xfZnVuYyBpcyBkZWNsYXJlZCB3aXRob3V0IGEgbWFjcm8uLi4gIiA+JjY7IH0NCmlmIGV2YWwg XCR7JGFzX2dsX1N5bWJvbCs6fSBmYWxzZTsgdGhlbiA6DQogICRhc19lY2hvX24gIihjYWNoZWQp ICIgPiY2DQplbHNlDQogIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19l eHQNCi8qIGVuZCBjb25mZGVmcy5oLiAgKi8NCiNpbmNsdWRlIDxzaWduYWwuaD4NCg0KaW50DQpt YWluICgpDQp7DQojdW5kZWYgJGdsX2Z1bmMNCiAgKHZvaWQpICRnbF9mdW5jOw0KICA7DQogIHJl dHVybiAwOw0KfQ0KX0FDRU9GDQppZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhl biA6DQogIGV2YWwgIiRhc19nbF9TeW1ib2w9eWVzIg0KZWxzZQ0KICBldmFsICIkYXNfZ2xfU3lt Ym9sPW5vIg0KZmkNCnJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQg Y29uZnRlc3QuJGFjX2V4dA0KZmkNCmV2YWwgYWNfcmVzPVwkJGFzX2dsX1N5bWJvbA0KCSAgICAg ICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX3Jl cyIgPiY1DQokYXNfZWNobyAiJGFjX3JlcyIgPiY2OyB9DQogICAgIGlmIGV2YWwgdGVzdCBcInhc JCIkYXNfZ2xfU3ltYm9sIlwiID0geCJ5ZXMiOyB0aGVuIDoNCiAgY2F0ID4+Y29uZmRlZnMuaCA8 PF9BQ0VPRg0KI2RlZmluZSBgJGFzX2VjaG8gIkhBVkVfUkFXX0RFQ0xfJGdsX2Z1bmMiIHwgJGFz X3RyX2NwcGAgMQ0KX0FDRU9GDQoNCiAgICAgICAgICAgICAgICAgICAgIGV2YWwgYWNfY3ZfaGF2 ZV9kZWNsXyRnbF9mdW5jPXllcw0KZmkNCiAgICAgIGRvbmUNCg0KDQogICMgQ29kZSBmcm9tIG1v ZHVsZSBzaWduYml0Og0KDQoNCiAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5F Tk99OiBjaGVja2luZyBmb3Igc2lnbmJpdCBtYWNybyIgPiY1DQokYXNfZWNob19uICJjaGVja2lu ZyBmb3Igc2lnbmJpdCBtYWNyby4uLiAiID4mNjsgfQ0KaWYgJHtnbF9jdl9mdW5jX3NpZ25iaXQr On0gZmFsc2U7IHRoZW4gOg0KICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNg0KZWxzZQ0KDQog ICAgICBpZiB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IHllczsgdGhlbiA6DQogIGdsX2N2X2Z1 bmNfc2lnbmJpdD0iZ3Vlc3Npbmcgbm8iDQplbHNlDQogIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNF T0YgPmNvbmZ0ZXN0LiRhY19leHQNCi8qIGVuZCBjb25mZGVmcy5oLiAgKi8NCg0KI2luY2x1ZGUg PG1hdGguaD4NCi8qIElmIHNpZ25iaXQgaXMgZGVmaW5lZCBhcyBhIGZ1bmN0aW9uLCBkb24ndCB1 c2UgaXQsIHNpbmNlIGNhbGxpbmcgaXQgZm9yDQogICAnZmxvYXQnIG9yICdsb25nIGRvdWJsZScg YXJndW1lbnRzIHdvdWxkIGludm9sdmUgY29udmVyc2lvbnMuDQogICBJZiBzaWduYml0IGlzIG5v dCBkZWNsYXJlZCBhdCBhbGwgYnV0IGV4aXN0cyBhcyBhIGxpYnJhcnkgZnVuY3Rpb24sIGRvbid0 DQogICB1c2UgaXQsIHNpbmNlIHRoZSBwcm90b3R5cGUgbWF5IG5vdCBtYXRjaC4NCiAgIElmIHNp Z25iaXQgaXMgbm90IGRlY2xhcmVkIGF0IGFsbCBidXQgZXhpc3RzIGFzIGEgY29tcGlsZXIgYnVp bHQtaW4sIGRvbid0DQogICB1c2UgaXQsIHNpbmNlIGl0J3MgcHJlZmVyYWJsZSB0byB1c2UgX19i dWlsdGluX3NpZ25iaXQqIChubyB3YXJuaW5ncywNCiAgIG5vIGNvbnZlcnNpb25zKS4gICovDQoj aWZuZGVmIHNpZ25iaXQNCiMgZXJyb3IgInNpZ25iaXQgc2hvdWxkIGJlIGEgbWFjcm8iDQojZW5k aWYNCiNpbmNsdWRlIDxzdHJpbmcuaD4NCg0KLyogR2xvYmFsIHZhcmlhYmxlcy4NCiAgIE5lZWRl ZCBiZWNhdXNlIEdDQyA0IGNvbnN0YW50LWZvbGRzIF9fYnVpbHRpbl9zaWduYml0bCAobGl0ZXJh bCkNCiAgIGJ1dCBjYW5ub3QgY29uc3RhbnQtZm9sZCAgICAgICAgICAgIF9fYnVpbHRpbl9zaWdu Yml0bCAodmFyaWFibGUpLiAgKi8NCmZsb2F0IHZmOw0KZG91YmxlIHZkOw0KbG9uZyBkb3VibGUg dmw7DQppbnQgbWFpbiAoKQ0Kew0KLyogSFAgY2Mgb24gSFAtVVggMTAuMjAgaGFzIGEgYnVnIHdp dGggdGhlIGNvbnN0YW50IGV4cHJlc3Npb24gLTAuMC4NCiAgIFNvIHdlIHVzZSAtcDBmIGFuZCAt cDBkIGluc3RlYWQuICAqLw0KZmxvYXQgcDBmID0gMC4wZjsNCmZsb2F0IG0wZiA9IC1wMGY7DQpk b3VibGUgcDBkID0gMC4wOw0KZG91YmxlIG0wZCA9IC1wMGQ7DQovKiBPbiBIUC1VWCAxMC4yMCwg bmVnYXRpbmcgMC4wTCBkb2VzIG5vdCB5aWVsZCAtMC4wTC4NCiAgIFNvIHdlIHVzZSBhbm90aGVy IGNvbnN0YW50IGV4cHJlc3Npb24gaW5zdGVhZC4NCiAgIEJ1dCB0aGF0IGV4cHJlc3Npb24gZG9l cyBub3Qgd29yayBvbiBvdGhlciBwbGF0Zm9ybXMsIHN1Y2ggYXMgd2hlbg0KICAgY3Jvc3MtY29t cGlsaW5nIHRvIFBvd2VyUEMgb24gTWFjT1MgWCAxMC41LiAgKi8NCmxvbmcgZG91YmxlIHAwbCA9 IDAuMEw7DQojaWYgZGVmaW5lZCBfX2hwdXggfHwgZGVmaW5lZCBfX3NnaQ0KbG9uZyBkb3VibGUg bTBsID0gLUxEQkxfTUlOICogTERCTF9NSU47DQojZWxzZQ0KbG9uZyBkb3VibGUgbTBsID0gLXAw bDsNCiNlbmRpZg0KICBpbnQgcmVzdWx0ID0gMDsNCiAgaWYgKHNpZ25iaXQgKHZmKSkgLyogbGlu ayBjaGVjayAqLw0KICAgIHZmKys7DQogIHsNCiAgICBmbG9hdCBwbHVzX2luZiA9IDEuMGYgLyBw MGY7DQogICAgZmxvYXQgbWludXNfaW5mID0gLTEuMGYgLyBwMGY7DQogICAgaWYgKCEoIXNpZ25i aXQgKDI1NS4wZikNCiAgICAgICAgICAmJiBzaWduYml0ICgtMjU1LjBmKQ0KICAgICAgICAgICYm ICFzaWduYml0IChwMGYpDQogICAgICAgICAgJiYgKG1lbWNtcCAoJm0wZiwgJnAwZiwgc2l6ZW9m IChmbG9hdCkpID09IDAgfHwgc2lnbmJpdCAobTBmKSkNCiAgICAgICAgICAmJiAhc2lnbmJpdCAo cGx1c19pbmYpDQogICAgICAgICAgJiYgc2lnbmJpdCAobWludXNfaW5mKSkpDQogICAgICByZXN1 bHQgfD0gMTsNCiAgfQ0KICBpZiAoc2lnbmJpdCAodmQpKSAvKiBsaW5rIGNoZWNrICovDQogICAg dmQrKzsNCiAgew0KICAgIGRvdWJsZSBwbHVzX2luZiA9IDEuMCAvIHAwZDsNCiAgICBkb3VibGUg bWludXNfaW5mID0gLTEuMCAvIHAwZDsNCiAgICBpZiAoISghc2lnbmJpdCAoMjU1LjApDQogICAg ICAgICAgJiYgc2lnbmJpdCAoLTI1NS4wKQ0KICAgICAgICAgICYmICFzaWduYml0IChwMGQpDQog ICAgICAgICAgJiYgKG1lbWNtcCAoJm0wZCwgJnAwZCwgc2l6ZW9mIChkb3VibGUpKSA9PSAwIHx8 IHNpZ25iaXQgKG0wZCkpDQogICAgICAgICAgJiYgIXNpZ25iaXQgKHBsdXNfaW5mKQ0KICAgICAg ICAgICYmIHNpZ25iaXQgKG1pbnVzX2luZikpKQ0KICAgICAgcmVzdWx0IHw9IDI7DQogIH0NCiAg aWYgKHNpZ25iaXQgKHZsKSkgLyogbGluayBjaGVjayAqLw0KICAgIHZsKys7DQogIHsNCiAgICBs b25nIGRvdWJsZSBwbHVzX2luZiA9IDEuMEwgLyBwMGw7DQogICAgbG9uZyBkb3VibGUgbWludXNf aW5mID0gLTEuMEwgLyBwMGw7DQogICAgaWYgKHNpZ25iaXQgKDI1NS4wTCkpDQogICAgICByZXN1 bHQgfD0gNDsNCiAgICBpZiAoIXNpZ25iaXQgKC0yNTUuMEwpKQ0KICAgICAgcmVzdWx0IHw9IDQ7 DQogICAgaWYgKHNpZ25iaXQgKHAwbCkpDQogICAgICByZXN1bHQgfD0gODsNCiAgICBpZiAoISht ZW1jbXAgKCZtMGwsICZwMGwsIHNpemVvZiAobG9uZyBkb3VibGUpKSA9PSAwIHx8IHNpZ25iaXQg KG0wbCkpKQ0KICAgICAgcmVzdWx0IHw9IDE2Ow0KICAgIGlmIChzaWduYml0IChwbHVzX2luZikp DQogICAgICByZXN1bHQgfD0gMzI7DQogICAgaWYgKCFzaWduYml0IChtaW51c19pbmYpKQ0KICAg ICAgcmVzdWx0IHw9IDY0Ow0KICB9DQogIHJldHVybiByZXN1bHQ7DQp9DQoNCg0KX0FDRU9GDQpp ZiBhY19mbl9jX3RyeV9ydW4gIiRMSU5FTk8iOyB0aGVuIDoNCiAgZ2xfY3ZfZnVuY19zaWduYml0 PXllcw0KZWxzZQ0KICBnbF9jdl9mdW5jX3NpZ25iaXQ9bm8NCmZpDQpybSAtZiBjb3JlICouY29y ZSBjb3JlLmNvbmZ0ZXN0LiogZ21vbi5vdXQgYmIub3V0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCBcDQog IGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuYmVhbSBjb25mdGVzdC4kYWNfZXh0DQpmaQ0K DQoNCmZpDQp7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDog JGdsX2N2X2Z1bmNfc2lnbmJpdCIgPiY1DQokYXNfZWNobyAiJGdsX2N2X2Z1bmNfc2lnbmJpdCIg PiY2OyB9DQogICAgICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99 OiBjaGVja2luZyBmb3Igc2lnbmJpdCBjb21waWxlciBidWlsdC1pbnMiID4mNQ0KJGFzX2VjaG9f biAiY2hlY2tpbmcgZm9yIHNpZ25iaXQgY29tcGlsZXIgYnVpbHQtaW5zLi4uICIgPiY2OyB9DQpp ZiAke2dsX2N2X2Z1bmNfc2lnbmJpdF9nY2MrOn0gZmFsc2U7IHRoZW4gOg0KICAkYXNfZWNob19u ICIoY2FjaGVkKSAiID4mNg0KZWxzZQ0KDQogICAgICBpZiB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5n IiA9IHllczsgdGhlbiA6DQogIGdsX2N2X2Z1bmNfc2lnbmJpdF9nY2M9Imd1ZXNzaW5nIG5vIg0K ZWxzZQ0KICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0DQovKiBl bmQgY29uZmRlZnMuaC4gICovDQoNCiNpZiBfX0dOVUNfXyA+PSA0DQojIGRlZmluZSBzaWduYml0 KHgpIFwNCiAgIChzaXplb2YgKHgpID09IHNpemVvZiAobG9uZyBkb3VibGUpID8gX19idWlsdGlu X3NpZ25iaXRsICh4KSA6IFwNCiAgICBzaXplb2YgKHgpID09IHNpemVvZiAoZG91YmxlKSA/IF9f YnVpbHRpbl9zaWduYml0ICh4KSA6IFwNCiAgICBfX2J1aWx0aW5fc2lnbmJpdGYgKHgpKQ0KI2Vs c2UNCiMgZXJyb3IgInNpZ25iaXQgc2hvdWxkIGJlIHRocmVlIGNvbXBpbGVyIGJ1aWx0LWlucyIN CiNlbmRpZg0KI2luY2x1ZGUgPHN0cmluZy5oPg0KDQovKiBHbG9iYWwgdmFyaWFibGVzLg0KICAg TmVlZGVkIGJlY2F1c2UgR0NDIDQgY29uc3RhbnQtZm9sZHMgX19idWlsdGluX3NpZ25iaXRsIChs aXRlcmFsKQ0KICAgYnV0IGNhbm5vdCBjb25zdGFudC1mb2xkICAgICAgICAgICAgX19idWlsdGlu X3NpZ25iaXRsICh2YXJpYWJsZSkuICAqLw0KZmxvYXQgdmY7DQpkb3VibGUgdmQ7DQpsb25nIGRv dWJsZSB2bDsNCmludCBtYWluICgpDQp7DQovKiBIUCBjYyBvbiBIUC1VWCAxMC4yMCBoYXMgYSBi dWcgd2l0aCB0aGUgY29uc3RhbnQgZXhwcmVzc2lvbiAtMC4wLg0KICAgU28gd2UgdXNlIC1wMGYg YW5kIC1wMGQgaW5zdGVhZC4gICovDQpmbG9hdCBwMGYgPSAwLjBmOw0KZmxvYXQgbTBmID0gLXAw ZjsNCmRvdWJsZSBwMGQgPSAwLjA7DQpkb3VibGUgbTBkID0gLXAwZDsNCi8qIE9uIEhQLVVYIDEw LjIwLCBuZWdhdGluZyAwLjBMIGRvZXMgbm90IHlpZWxkIC0wLjBMLg0KICAgU28gd2UgdXNlIGFu b3RoZXIgY29uc3RhbnQgZXhwcmVzc2lvbiBpbnN0ZWFkLg0KICAgQnV0IHRoYXQgZXhwcmVzc2lv biBkb2VzIG5vdCB3b3JrIG9uIG90aGVyIHBsYXRmb3Jtcywgc3VjaCBhcyB3aGVuDQogICBjcm9z cy1jb21waWxpbmcgdG8gUG93ZXJQQyBvbiBNYWNPUyBYIDEwLjUuICAqLw0KbG9uZyBkb3VibGUg cDBsID0gMC4wTDsNCiNpZiBkZWZpbmVkIF9faHB1eCB8fCBkZWZpbmVkIF9fc2dpDQpsb25nIGRv dWJsZSBtMGwgPSAtTERCTF9NSU4gKiBMREJMX01JTjsNCiNlbHNlDQpsb25nIGRvdWJsZSBtMGwg PSAtcDBsOw0KI2VuZGlmDQogIGludCByZXN1bHQgPSAwOw0KICBpZiAoc2lnbmJpdCAodmYpKSAv KiBsaW5rIGNoZWNrICovDQogICAgdmYrKzsNCiAgew0KICAgIGZsb2F0IHBsdXNfaW5mID0gMS4w ZiAvIHAwZjsNCiAgICBmbG9hdCBtaW51c19pbmYgPSAtMS4wZiAvIHAwZjsNCiAgICBpZiAoISgh c2lnbmJpdCAoMjU1LjBmKQ0KICAgICAgICAgICYmIHNpZ25iaXQgKC0yNTUuMGYpDQogICAgICAg ICAgJiYgIXNpZ25iaXQgKHAwZikNCiAgICAgICAgICAmJiAobWVtY21wICgmbTBmLCAmcDBmLCBz aXplb2YgKGZsb2F0KSkgPT0gMCB8fCBzaWduYml0IChtMGYpKQ0KICAgICAgICAgICYmICFzaWdu Yml0IChwbHVzX2luZikNCiAgICAgICAgICAmJiBzaWduYml0IChtaW51c19pbmYpKSkNCiAgICAg IHJlc3VsdCB8PSAxOw0KICB9DQogIGlmIChzaWduYml0ICh2ZCkpIC8qIGxpbmsgY2hlY2sgKi8N CiAgICB2ZCsrOw0KICB7DQogICAgZG91YmxlIHBsdXNfaW5mID0gMS4wIC8gcDBkOw0KICAgIGRv dWJsZSBtaW51c19pbmYgPSAtMS4wIC8gcDBkOw0KICAgIGlmICghKCFzaWduYml0ICgyNTUuMCkN CiAgICAgICAgICAmJiBzaWduYml0ICgtMjU1LjApDQogICAgICAgICAgJiYgIXNpZ25iaXQgKHAw ZCkNCiAgICAgICAgICAmJiAobWVtY21wICgmbTBkLCAmcDBkLCBzaXplb2YgKGRvdWJsZSkpID09 IDAgfHwgc2lnbmJpdCAobTBkKSkNCiAgICAgICAgICAmJiAhc2lnbmJpdCAocGx1c19pbmYpDQog ICAgICAgICAgJiYgc2lnbmJpdCAobWludXNfaW5mKSkpDQogICAgICByZXN1bHQgfD0gMjsNCiAg fQ0KICBpZiAoc2lnbmJpdCAodmwpKSAvKiBsaW5rIGNoZWNrICovDQogICAgdmwrKzsNCiAgew0K ICAgIGxvbmcgZG91YmxlIHBsdXNfaW5mID0gMS4wTCAvIHAwbDsNCiAgICBsb25nIGRvdWJsZSBt aW51c19pbmYgPSAtMS4wTCAvIHAwbDsNCiAgICBpZiAoc2lnbmJpdCAoMjU1LjBMKSkNCiAgICAg IHJlc3VsdCB8PSA0Ow0KICAgIGlmICghc2lnbmJpdCAoLTI1NS4wTCkpDQogICAgICByZXN1bHQg fD0gNDsNCiAgICBpZiAoc2lnbmJpdCAocDBsKSkNCiAgICAgIHJlc3VsdCB8PSA4Ow0KICAgIGlm ICghKG1lbWNtcCAoJm0wbCwgJnAwbCwgc2l6ZW9mIChsb25nIGRvdWJsZSkpID09IDAgfHwgc2ln bmJpdCAobTBsKSkpDQogICAgICByZXN1bHQgfD0gMTY7DQogICAgaWYgKHNpZ25iaXQgKHBsdXNf aW5mKSkNCiAgICAgIHJlc3VsdCB8PSAzMjsNCiAgICBpZiAoIXNpZ25iaXQgKG1pbnVzX2luZikp DQogICAgICByZXN1bHQgfD0gNjQ7DQogIH0NCiAgcmV0dXJuIHJlc3VsdDsNCn0NCg0KDQpfQUNF T0YNCmlmIGFjX2ZuX2NfdHJ5X3J1biAiJExJTkVOTyI7IHRoZW4gOg0KICBnbF9jdl9mdW5jX3Np Z25iaXRfZ2NjPXllcw0KZWxzZQ0KICBnbF9jdl9mdW5jX3NpZ25iaXRfZ2NjPW5vDQpmaQ0Kcm0g LWYgY29yZSAqLmNvcmUgY29yZS5jb25mdGVzdC4qIGdtb24ub3V0IGJiLm91dCBjb25mdGVzdCRh Y19leGVleHQgXA0KICBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LmJlYW0gY29uZnRlc3Qu JGFjX2V4dA0KZmkNCg0KDQpmaQ0KeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5F Tk99OiByZXN1bHQ6ICRnbF9jdl9mdW5jX3NpZ25iaXRfZ2NjIiA+JjUNCiRhc19lY2hvICIkZ2xf Y3ZfZnVuY19zaWduYml0X2djYyIgPiY2OyB9DQogICAgICBpZiB0ZXN0ICIkZ2xfY3ZfZnVuY19z aWduYml0X2djYyIgPSB5ZXM7IHRoZW4NCiAgICBSRVBMQUNFX1NJR05CSVRfVVNJTkdfR0NDPTEN CiAgZWxzZQ0KICAgIGlmIHRlc3QgIiRnbF9jdl9mdW5jX3NpZ25iaXQiICE9IHllczsgdGhlbg0K ICAgICAgUkVQTEFDRV9TSUdOQklUPTENCg0KDQoNCg0KDQoNCg0KDQogIGdsX0xJQk9CSlM9IiRn bF9MSUJPQkpTIHNpZ25iaXRmLiRhY19vYmpleHQiDQoNCg0KDQoNCg0KDQoNCg0KDQogIGdsX0xJ Qk9CSlM9IiRnbF9MSUJPQkpTIHNpZ25iaXRkLiRhY19vYmpleHQiDQoNCg0KDQoNCg0KDQoNCg0K DQogIGdsX0xJQk9CSlM9IiRnbF9MSUJPQkpTIHNpZ25iaXRsLiRhY19vYmpleHQiDQoNCg0KDQog IHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hlcmUg dG8gZmluZCB0aGUgc2lnbiBiaXQgaW4gYSAnZmxvYXQnIiA+JjUNCiRhc19lY2hvX24gImNoZWNr aW5nIHdoZXJlIHRvIGZpbmQgdGhlIHNpZ24gYml0IGluIGEgJ2Zsb2F0Jy4uLiAiID4mNjsgfQ0K aWYgJHtnbF9jdl9jY19mbG9hdF9zaWduYml0Kzp9IGZhbHNlOyB0aGVuIDoNCiAgJGFzX2VjaG9f biAiKGNhY2hlZCkgIiA+JjYNCmVsc2UNCg0KICAgICAgaWYgdGVzdCAiJGNyb3NzX2NvbXBpbGlu ZyIgPSB5ZXM7IHRoZW4gOg0KDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbF9jdl9j Y19mbG9hdF9zaWduYml0PSJ1bmtub3duIg0KDQplbHNlDQogIGNhdCBjb25mZGVmcy5oIC0gPDxf QUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQNCi8qIGVuZCBjb25mZGVmcy5oLiAgKi8NCg0KI2luY2x1 ZGUgPHN0ZGRlZi5oPg0KI2luY2x1ZGUgPHN0ZGlvLmg+DQojZGVmaW5lIE5XT1JEUyBcDQogICgo c2l6ZW9mIChmbG9hdCkgKyBzaXplb2YgKHVuc2lnbmVkIGludCkgLSAxKSAvIHNpemVvZiAodW5z aWduZWQgaW50KSkNCnR5cGVkZWYgdW5pb24geyBmbG9hdCB2YWx1ZTsgdW5zaWduZWQgaW50IHdv cmRbTldPUkRTXTsgfQ0KICAgICAgICBtZW1vcnlfZmxvYXQ7DQpzdGF0aWMgbWVtb3J5X2Zsb2F0 IHBsdXMgPSB7IDEuMGYgfTsNCnN0YXRpYyBtZW1vcnlfZmxvYXQgbWludXMgPSB7IC0xLjBmIH07 DQppbnQgbWFpbiAoKQ0Kew0KICBzaXplX3QgaiwgaywgaTsNCiAgdW5zaWduZWQgaW50IG07DQog IEZJTEUgKmZwID0gZm9wZW4gKCJjb25mdGVzdC5vdXQiLCAidyIpOw0KICBpZiAoZnAgPT0gTlVM TCkNCiAgICByZXR1cm4gMTsNCiAgLyogRmluZCB0aGUgZGlmZmVyZW50IGJpdC4gICovDQogIGsg PSAwOyBtID0gMDsNCiAgZm9yIChqID0gMDsgaiA8IE5XT1JEUzsgaisrKQ0KICAgIHsNCiAgICAg IHVuc2lnbmVkIGludCB4ID0gcGx1cy53b3JkW2pdIF4gbWludXMud29yZFtqXTsNCiAgICAgIGlm ICgoeCAmICh4IC0gMSkpIHx8ICh4ICYmIG0pKQ0KICAgICAgICB7DQogICAgICAgICAgLyogTW9y ZSB0aGFuIG9uZSBiaXQgZGlmZmVyZW5jZS4gICovDQogICAgICAgICAgZnByaW50ZiAoZnAsICJ1 bmtub3duIik7DQogICAgICAgICAgcmV0dXJuIDI7DQogICAgICAgIH0NCiAgICAgIGlmICh4KQ0K ICAgICAgICB7DQogICAgICAgICAgayA9IGo7DQogICAgICAgICAgbSA9IHg7DQogICAgICAgIH0N CiAgICB9DQogIGlmIChtID09IDApDQogICAgew0KICAgICAgLyogTm8gZGlmZmVyZW5jZS4gICov DQogICAgICBmcHJpbnRmIChmcCwgInVua25vd24iKTsNCiAgICAgIHJldHVybiAzOw0KICAgIH0N CiAgLyogTm93IG0gPSBwbHVzLndvcmRba10gXiB+bWludXMud29yZFtrXS4gICovDQogIGlmIChw bHVzLndvcmRba10gJiB+bWludXMud29yZFtrXSkNCiAgICB7DQogICAgICAvKiBPaD8gVGhlIHNp Z24gYml0IGlzIHNldCBpbiB0aGUgcG9zaXRpdmUgYW5kIGNsZWFyZWQgaW4gdGhlIG5lZ2F0aXZl DQogICAgICAgICBudW1iZXJzPyAgKi8NCiAgICAgIGZwcmludGYgKGZwLCAidW5rbm93biIpOw0K ICAgICAgcmV0dXJuIDQ7DQogICAgfQ0KICBmb3IgKGkgPSAwOyA7IGkrKykNCiAgICBpZiAoKG0g Pj4gaSkgJiAxKQ0KICAgICAgYnJlYWs7DQogIGZwcmludGYgKGZwLCAid29yZCAlZCBiaXQgJWQi LCAoaW50KSBrLCAoaW50KSBpKTsNCiAgaWYgKGZjbG9zZSAoZnApICE9IDApDQogICAgcmV0dXJu IDU7DQogIHJldHVybiAwOw0KfQ0KDQpfQUNFT0YNCmlmIGFjX2ZuX2NfdHJ5X3J1biAiJExJTkVO TyI7IHRoZW4gOg0KICBnbF9jdl9jY19mbG9hdF9zaWduYml0PWBjYXQgY29uZnRlc3Qub3V0YA0K ZWxzZQ0KICBnbF9jdl9jY19mbG9hdF9zaWduYml0PSJ1bmtub3duIg0KZmkNCnJtIC1mIGNvcmUg Ki5jb3JlIGNvcmUuY29uZnRlc3QuKiBnbW9uLm91dCBiYi5vdXQgY29uZnRlc3QkYWNfZXhlZXh0 IFwNCiAgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC5iZWFtIGNvbmZ0ZXN0LiRhY19leHQN CmZpDQoNCiAgICAgIHJtIC1mIGNvbmZ0ZXN0Lm91dA0KDQpmaQ0KeyAkYXNfZWNobyAiJGFzX21l OiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRnbF9jdl9jY19mbG9hdF9zaWduYml0IiA+ JjUNCiRhc19lY2hvICIkZ2xfY3ZfY2NfZmxvYXRfc2lnbmJpdCIgPiY2OyB9DQogIGNhc2UgIiRn bF9jdl9jY19mbG9hdF9zaWduYml0IiBpbg0KICAgIHdvcmQqYml0KikNCiAgICAgIHdvcmQ9YGVj aG8gIiRnbF9jdl9jY19mbG9hdF9zaWduYml0IiB8IHNlZCAtZSAncy93b3JkIC8vJyAtZSAncy8g Yml0LiovLydgDQogICAgICBiaXQ9YGVjaG8gIiRnbF9jdl9jY19mbG9hdF9zaWduYml0IiB8IHNl ZCAtZSAncy93b3JkLipiaXQgLy8nYA0KDQpjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GDQojZGVm aW5lIEZMVF9TSUdOQklUX1dPUkQgJHdvcmQNCl9BQ0VPRg0KDQoNCmNhdCA+PmNvbmZkZWZzLmgg PDxfQUNFT0YNCiNkZWZpbmUgRkxUX1NJR05CSVRfQklUICRiaXQNCl9BQ0VPRg0KDQogICAgICA7 Ow0KICBlc2FjDQoNCg0KDQoNCiAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5F Tk99OiBjaGVja2luZyB3aGVyZSB0byBmaW5kIHRoZSBzaWduIGJpdCBpbiBhICdkb3VibGUnIiA+ JjUNCiRhc19lY2hvX24gImNoZWNraW5nIHdoZXJlIHRvIGZpbmQgdGhlIHNpZ24gYml0IGluIGEg J2RvdWJsZScuLi4gIiA+JjY7IH0NCmlmICR7Z2xfY3ZfY2NfZG91YmxlX3NpZ25iaXQrOn0gZmFs c2U7IHRoZW4gOg0KICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNg0KZWxzZQ0KDQogICAgICBp ZiB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IHllczsgdGhlbiA6DQoNCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGdsX2N2X2NjX2RvdWJsZV9zaWduYml0PSJ1bmtub3duIg0KDQplbHNl DQogIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQNCi8qIGVuZCBj b25mZGVmcy5oLiAgKi8NCg0KI2luY2x1ZGUgPHN0ZGRlZi5oPg0KI2luY2x1ZGUgPHN0ZGlvLmg+ DQojZGVmaW5lIE5XT1JEUyBcDQogICgoc2l6ZW9mIChkb3VibGUpICsgc2l6ZW9mICh1bnNpZ25l ZCBpbnQpIC0gMSkgLyBzaXplb2YgKHVuc2lnbmVkIGludCkpDQp0eXBlZGVmIHVuaW9uIHsgZG91 YmxlIHZhbHVlOyB1bnNpZ25lZCBpbnQgd29yZFtOV09SRFNdOyB9DQogICAgICAgIG1lbW9yeV9m bG9hdDsNCnN0YXRpYyBtZW1vcnlfZmxvYXQgcGx1cyA9IHsgMS4wIH07DQpzdGF0aWMgbWVtb3J5 X2Zsb2F0IG1pbnVzID0geyAtMS4wIH07DQppbnQgbWFpbiAoKQ0Kew0KICBzaXplX3Qgaiwgaywg aTsNCiAgdW5zaWduZWQgaW50IG07DQogIEZJTEUgKmZwID0gZm9wZW4gKCJjb25mdGVzdC5vdXQi LCAidyIpOw0KICBpZiAoZnAgPT0gTlVMTCkNCiAgICByZXR1cm4gMTsNCiAgLyogRmluZCB0aGUg ZGlmZmVyZW50IGJpdC4gICovDQogIGsgPSAwOyBtID0gMDsNCiAgZm9yIChqID0gMDsgaiA8IE5X T1JEUzsgaisrKQ0KICAgIHsNCiAgICAgIHVuc2lnbmVkIGludCB4ID0gcGx1cy53b3JkW2pdIF4g bWludXMud29yZFtqXTsNCiAgICAgIGlmICgoeCAmICh4IC0gMSkpIHx8ICh4ICYmIG0pKQ0KICAg ICAgICB7DQogICAgICAgICAgLyogTW9yZSB0aGFuIG9uZSBiaXQgZGlmZmVyZW5jZS4gICovDQog ICAgICAgICAgZnByaW50ZiAoZnAsICJ1bmtub3duIik7DQogICAgICAgICAgcmV0dXJuIDI7DQog ICAgICAgIH0NCiAgICAgIGlmICh4KQ0KICAgICAgICB7DQogICAgICAgICAgayA9IGo7DQogICAg ICAgICAgbSA9IHg7DQogICAgICAgIH0NCiAgICB9DQogIGlmIChtID09IDApDQogICAgew0KICAg ICAgLyogTm8gZGlmZmVyZW5jZS4gICovDQogICAgICBmcHJpbnRmIChmcCwgInVua25vd24iKTsN CiAgICAgIHJldHVybiAzOw0KICAgIH0NCiAgLyogTm93IG0gPSBwbHVzLndvcmRba10gXiB+bWlu dXMud29yZFtrXS4gICovDQogIGlmIChwbHVzLndvcmRba10gJiB+bWludXMud29yZFtrXSkNCiAg ICB7DQogICAgICAvKiBPaD8gVGhlIHNpZ24gYml0IGlzIHNldCBpbiB0aGUgcG9zaXRpdmUgYW5k IGNsZWFyZWQgaW4gdGhlIG5lZ2F0aXZlDQogICAgICAgICBudW1iZXJzPyAgKi8NCiAgICAgIGZw cmludGYgKGZwLCAidW5rbm93biIpOw0KICAgICAgcmV0dXJuIDQ7DQogICAgfQ0KICBmb3IgKGkg PSAwOyA7IGkrKykNCiAgICBpZiAoKG0gPj4gaSkgJiAxKQ0KICAgICAgYnJlYWs7DQogIGZwcmlu dGYgKGZwLCAid29yZCAlZCBiaXQgJWQiLCAoaW50KSBrLCAoaW50KSBpKTsNCiAgaWYgKGZjbG9z ZSAoZnApICE9IDApDQogICAgcmV0dXJuIDU7DQogIHJldHVybiAwOw0KfQ0KDQpfQUNFT0YNCmlm IGFjX2ZuX2NfdHJ5X3J1biAiJExJTkVOTyI7IHRoZW4gOg0KICBnbF9jdl9jY19kb3VibGVfc2ln bmJpdD1gY2F0IGNvbmZ0ZXN0Lm91dGANCmVsc2UNCiAgZ2xfY3ZfY2NfZG91YmxlX3NpZ25iaXQ9 InVua25vd24iDQpmaQ0Kcm0gLWYgY29yZSAqLmNvcmUgY29yZS5jb25mdGVzdC4qIGdtb24ub3V0 IGJiLm91dCBjb25mdGVzdCRhY19leGVleHQgXA0KICBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0 ZXN0LmJlYW0gY29uZnRlc3QuJGFjX2V4dA0KZmkNCg0KICAgICAgcm0gLWYgY29uZnRlc3Qub3V0 DQoNCmZpDQp7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDog JGdsX2N2X2NjX2RvdWJsZV9zaWduYml0IiA+JjUNCiRhc19lY2hvICIkZ2xfY3ZfY2NfZG91Ymxl X3NpZ25iaXQiID4mNjsgfQ0KICBjYXNlICIkZ2xfY3ZfY2NfZG91YmxlX3NpZ25iaXQiIGluDQog ICAgd29yZCpiaXQqKQ0KICAgICAgd29yZD1gZWNobyAiJGdsX2N2X2NjX2RvdWJsZV9zaWduYml0 IiB8IHNlZCAtZSAncy93b3JkIC8vJyAtZSAncy8gYml0LiovLydgDQogICAgICBiaXQ9YGVjaG8g IiRnbF9jdl9jY19kb3VibGVfc2lnbmJpdCIgfCBzZWQgLWUgJ3Mvd29yZC4qYml0IC8vJ2ANCg0K Y2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRg0KI2RlZmluZSBEQkxfU0lHTkJJVF9XT1JEICR3b3Jk DQpfQUNFT0YNCg0KDQpjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GDQojZGVmaW5lIERCTF9TSUdO QklUX0JJVCAkYml0DQpfQUNFT0YNCg0KICAgICAgOzsNCiAgZXNhYw0KDQoNCg0KDQogIHsgJGFz X2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hlcmUgdG8gZmlu ZCB0aGUgc2lnbiBiaXQgaW4gYSAnbG9uZyBkb3VibGUnIiA+JjUNCiRhc19lY2hvX24gImNoZWNr aW5nIHdoZXJlIHRvIGZpbmQgdGhlIHNpZ24gYml0IGluIGEgJ2xvbmcgZG91YmxlJy4uLiAiID4m NjsgfQ0KaWYgJHtnbF9jdl9jY19sb25nX2RvdWJsZV9zaWduYml0Kzp9IGZhbHNlOyB0aGVuIDoN CiAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYNCmVsc2UNCg0KICAgICAgaWYgdGVzdCAiJGNy b3NzX2NvbXBpbGluZyIgPSB5ZXM7IHRoZW4gOg0KDQogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBnbF9jdl9jY19sb25nX2RvdWJsZV9zaWduYml0PSJ1bmtub3duIg0KDQplbHNlDQogIGNh dCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQNCi8qIGVuZCBjb25mZGVm cy5oLiAgKi8NCg0KI2luY2x1ZGUgPHN0ZGRlZi5oPg0KI2luY2x1ZGUgPHN0ZGlvLmg+DQojZGVm aW5lIE5XT1JEUyBcDQogICgoc2l6ZW9mIChsb25nIGRvdWJsZSkgKyBzaXplb2YgKHVuc2lnbmVk IGludCkgLSAxKSAvIHNpemVvZiAodW5zaWduZWQgaW50KSkNCnR5cGVkZWYgdW5pb24geyBsb25n IGRvdWJsZSB2YWx1ZTsgdW5zaWduZWQgaW50IHdvcmRbTldPUkRTXTsgfQ0KICAgICAgICBtZW1v cnlfZmxvYXQ7DQpzdGF0aWMgbWVtb3J5X2Zsb2F0IHBsdXMgPSB7IDEuMEwgfTsNCnN0YXRpYyBt ZW1vcnlfZmxvYXQgbWludXMgPSB7IC0xLjBMIH07DQppbnQgbWFpbiAoKQ0Kew0KICBzaXplX3Qg aiwgaywgaTsNCiAgdW5zaWduZWQgaW50IG07DQogIEZJTEUgKmZwID0gZm9wZW4gKCJjb25mdGVz dC5vdXQiLCAidyIpOw0KICBpZiAoZnAgPT0gTlVMTCkNCiAgICByZXR1cm4gMTsNCiAgLyogRmlu ZCB0aGUgZGlmZmVyZW50IGJpdC4gICovDQogIGsgPSAwOyBtID0gMDsNCiAgZm9yIChqID0gMDsg aiA8IE5XT1JEUzsgaisrKQ0KICAgIHsNCiAgICAgIHVuc2lnbmVkIGludCB4ID0gcGx1cy53b3Jk W2pdIF4gbWludXMud29yZFtqXTsNCiAgICAgIGlmICgoeCAmICh4IC0gMSkpIHx8ICh4ICYmIG0p KQ0KICAgICAgICB7DQogICAgICAgICAgLyogTW9yZSB0aGFuIG9uZSBiaXQgZGlmZmVyZW5jZS4g ICovDQogICAgICAgICAgZnByaW50ZiAoZnAsICJ1bmtub3duIik7DQogICAgICAgICAgcmV0dXJu IDI7DQogICAgICAgIH0NCiAgICAgIGlmICh4KQ0KICAgICAgICB7DQogICAgICAgICAgayA9IGo7 DQogICAgICAgICAgbSA9IHg7DQogICAgICAgIH0NCiAgICB9DQogIGlmIChtID09IDApDQogICAg ew0KICAgICAgLyogTm8gZGlmZmVyZW5jZS4gICovDQogICAgICBmcHJpbnRmIChmcCwgInVua25v d24iKTsNCiAgICAgIHJldHVybiAzOw0KICAgIH0NCiAgLyogTm93IG0gPSBwbHVzLndvcmRba10g XiB+bWludXMud29yZFtrXS4gICovDQogIGlmIChwbHVzLndvcmRba10gJiB+bWludXMud29yZFtr XSkNCiAgICB7DQogICAgICAvKiBPaD8gVGhlIHNpZ24gYml0IGlzIHNldCBpbiB0aGUgcG9zaXRp dmUgYW5kIGNsZWFyZWQgaW4gdGhlIG5lZ2F0aXZlDQogICAgICAgICBudW1iZXJzPyAgKi8NCiAg ICAgIGZwcmludGYgKGZwLCAidW5rbm93biIpOw0KICAgICAgcmV0dXJuIDQ7DQogICAgfQ0KICBm b3IgKGkgPSAwOyA7IGkrKykNCiAgICBpZiAoKG0gPj4gaSkgJiAxKQ0KICAgICAgYnJlYWs7DQog IGZwcmludGYgKGZwLCAid29yZCAlZCBiaXQgJWQiLCAoaW50KSBrLCAoaW50KSBpKTsNCiAgaWYg KGZjbG9zZSAoZnApICE9IDApDQogICAgcmV0dXJuIDU7DQogIHJldHVybiAwOw0KfQ0KDQpfQUNF T0YNCmlmIGFjX2ZuX2NfdHJ5X3J1biAiJExJTkVOTyI7IHRoZW4gOg0KICBnbF9jdl9jY19sb25n X2RvdWJsZV9zaWduYml0PWBjYXQgY29uZnRlc3Qub3V0YA0KZWxzZQ0KICBnbF9jdl9jY19sb25n X2RvdWJsZV9zaWduYml0PSJ1bmtub3duIg0KZmkNCnJtIC1mIGNvcmUgKi5jb3JlIGNvcmUuY29u ZnRlc3QuKiBnbW9uLm91dCBiYi5vdXQgY29uZnRlc3QkYWNfZXhlZXh0IFwNCiAgY29uZnRlc3Qu JGFjX29iamV4dCBjb25mdGVzdC5iZWFtIGNvbmZ0ZXN0LiRhY19leHQNCmZpDQoNCiAgICAgIHJt IC1mIGNvbmZ0ZXN0Lm91dA0KDQpmaQ0KeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRM SU5FTk99OiByZXN1bHQ6ICRnbF9jdl9jY19sb25nX2RvdWJsZV9zaWduYml0IiA+JjUNCiRhc19l Y2hvICIkZ2xfY3ZfY2NfbG9uZ19kb3VibGVfc2lnbmJpdCIgPiY2OyB9DQogIGNhc2UgIiRnbF9j dl9jY19sb25nX2RvdWJsZV9zaWduYml0IiBpbg0KICAgIHdvcmQqYml0KikNCiAgICAgIHdvcmQ9 YGVjaG8gIiRnbF9jdl9jY19sb25nX2RvdWJsZV9zaWduYml0IiB8IHNlZCAtZSAncy93b3JkIC8v JyAtZSAncy8gYml0LiovLydgDQogICAgICBiaXQ9YGVjaG8gIiRnbF9jdl9jY19sb25nX2RvdWJs ZV9zaWduYml0IiB8IHNlZCAtZSAncy93b3JkLipiaXQgLy8nYA0KDQpjYXQgPj5jb25mZGVmcy5o IDw8X0FDRU9GDQojZGVmaW5lIExEQkxfU0lHTkJJVF9XT1JEICR3b3JkDQpfQUNFT0YNCg0KDQpj YXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GDQojZGVmaW5lIExEQkxfU0lHTkJJVF9CSVQgJGJpdA0K X0FDRU9GDQoNCiAgICAgIDs7DQogIGVzYWMNCg0KDQogICAgICBpZiB0ZXN0ICIkZ2xfY3ZfY2Nf ZmxvYXRfc2lnbmJpdCIgPSB1bmtub3duOyB0aGVuDQogICAgICAgICAgICAgICAgYWNfZm5fY19j aGVja19kZWNsICIkTElORU5PIiAiY29weXNpZ25mIiAiYWNfY3ZfaGF2ZV9kZWNsX2NvcHlzaWdu ZiIgIiNpbmNsdWRlIDxtYXRoLmg+DQoiDQppZiB0ZXN0ICJ4JGFjX2N2X2hhdmVfZGVjbF9jb3B5 c2lnbmYiID0geHllczsgdGhlbiA6DQogIGFjX2hhdmVfZGVjbD0xDQplbHNlDQogIGFjX2hhdmVf ZGVjbD0wDQpmaQ0KDQpjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GDQojZGVmaW5lIEhBVkVfREVD TF9DT1BZU0lHTkYgJGFjX2hhdmVfZGVjbA0KX0FDRU9GDQoNCiAgICAgICAgaWYgdGVzdCAiJGFj X2N2X2hhdmVfZGVjbF9jb3B5c2lnbmYiID0geWVzOyB0aGVuDQogICAgICAgICAgICAgICAgICAg IHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhl ciBjb3B5c2lnbmYgY2FuIGJlIHVzZWQgd2l0aG91dCBsaW5raW5nIHdpdGggbGlibSIgPiY1DQok YXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIGNvcHlzaWduZiBjYW4gYmUgdXNlZCB3aXRob3V0 IGxpbmtpbmcgd2l0aCBsaWJtLi4uICIgPiY2OyB9DQppZiAke2dsX2N2X2Z1bmNfY29weXNpZ25m X25vX2xpYm0rOn0gZmFsc2U7IHRoZW4gOg0KICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNg0K ZWxzZQ0KDQogICAgICAgICAgICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0 LiRhY19leHQNCi8qIGVuZCBjb25mZGVmcy5oLiAgKi8NCiNpbmNsdWRlIDxtYXRoLmg+DQogICAg ICAgICAgICAgICAgICAgICBmbG9hdCB4LCB5Ow0KaW50DQptYWluICgpDQp7DQpyZXR1cm4gY29w eXNpZ25mICh4LCB5KSA8IDA7DQogIDsNCiAgcmV0dXJuIDA7DQp9DQpfQUNFT0YNCmlmIGFjX2Zu X2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoNCiAgZ2xfY3ZfZnVuY19jb3B5c2lnbmZfbm9f bGlibT15ZXMNCmVsc2UNCiAgZ2xfY3ZfZnVuY19jb3B5c2lnbmZfbm9fbGlibT1ubw0KZmkNCnJt IC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXA0KICAgIGNvbmZ0ZXN0 JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0DQoNCmZpDQp7ICRhc19lY2hvICIkYXNfbWU6JHth c19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGdsX2N2X2Z1bmNfY29weXNpZ25mX25vX2xpYm0i ID4mNQ0KJGFzX2VjaG8gIiRnbF9jdl9mdW5jX2NvcHlzaWduZl9ub19saWJtIiA+JjY7IH0NCiAg ICAgICAgICBpZiB0ZXN0ICRnbF9jdl9mdW5jX2NvcHlzaWduZl9ub19saWJtID0geWVzOyB0aGVu DQoNCiRhc19lY2hvICIjZGVmaW5lIEhBVkVfQ09QWVNJR05GX0lOX0xJQkMgMSIgPj5jb25mZGVm cy5oDQoNCiAgICAgICAgICBmaQ0KICAgICAgICBmaQ0KICAgICAgZmkNCiAgICAgIGlmIHRlc3Qg IiRnbF9jdl9jY19kb3VibGVfc2lnbmJpdCIgPSB1bmtub3duOyB0aGVuDQogICAgICAgICAgICAg ICAgYWNfZm5fY19jaGVja19kZWNsICIkTElORU5PIiAiY29weXNpZ24iICJhY19jdl9oYXZlX2Rl Y2xfY29weXNpZ24iICIjaW5jbHVkZSA8bWF0aC5oPg0KIg0KaWYgdGVzdCAieCRhY19jdl9oYXZl X2RlY2xfY29weXNpZ24iID0geHllczsgdGhlbiA6DQogIGFjX2hhdmVfZGVjbD0xDQplbHNlDQog IGFjX2hhdmVfZGVjbD0wDQpmaQ0KDQpjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GDQojZGVmaW5l IEhBVkVfREVDTF9DT1BZU0lHTiAkYWNfaGF2ZV9kZWNsDQpfQUNFT0YNCg0KICAgICAgICBpZiB0 ZXN0ICIkYWNfY3ZfaGF2ZV9kZWNsX2NvcHlzaWduIiA9IHllczsgdGhlbg0KICAgICAgICAgICAg ICAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5n IHdoZXRoZXIgY29weXNpZ24gY2FuIGJlIHVzZWQgd2l0aG91dCBsaW5raW5nIHdpdGggbGlibSIg PiY1DQokYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIGNvcHlzaWduIGNhbiBiZSB1c2VkIHdp dGhvdXQgbGlua2luZyB3aXRoIGxpYm0uLi4gIiA+JjY7IH0NCmlmICR7Z2xfY3ZfZnVuY19jb3B5 c2lnbl9ub19saWJtKzp9IGZhbHNlOyB0aGVuIDoNCiAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+ JjYNCmVsc2UNCg0KICAgICAgICAgICAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25m dGVzdC4kYWNfZXh0DQovKiBlbmQgY29uZmRlZnMuaC4gICovDQojaW5jbHVkZSA8bWF0aC5oPg0K ICAgICAgICAgICAgICAgICAgICAgZG91YmxlIHgsIHk7DQppbnQNCm1haW4gKCkNCnsNCnJldHVy biBjb3B5c2lnbiAoeCwgeSkgPCAwOw0KICA7DQogIHJldHVybiAwOw0KfQ0KX0FDRU9GDQppZiBh Y19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6DQogIGdsX2N2X2Z1bmNfY29weXNpZ25f bm9fbGlibT15ZXMNCmVsc2UNCiAgZ2xfY3ZfZnVuY19jb3B5c2lnbl9ub19saWJtPW5vDQpmaQ0K cm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcDQogICAgY29uZnRl c3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQNCg0KZmkNCnsgJGFzX2VjaG8gIiRhc19tZTok e2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkZ2xfY3ZfZnVuY19jb3B5c2lnbl9ub19saWJt IiA+JjUNCiRhc19lY2hvICIkZ2xfY3ZfZnVuY19jb3B5c2lnbl9ub19saWJtIiA+JjY7IH0NCiAg ICAgICAgICBpZiB0ZXN0ICRnbF9jdl9mdW5jX2NvcHlzaWduX25vX2xpYm0gPSB5ZXM7IHRoZW4N Cg0KJGFzX2VjaG8gIiNkZWZpbmUgSEFWRV9DT1BZU0lHTl9JTl9MSUJDIDEiID4+Y29uZmRlZnMu aA0KDQogICAgICAgICAgZmkNCiAgICAgICAgZmkNCiAgICAgIGZpDQogICAgICBpZiB0ZXN0ICIk Z2xfY3ZfY2NfbG9uZ19kb3VibGVfc2lnbmJpdCIgPSB1bmtub3duOyB0aGVuDQogICAgICAgICAg ICAgICAgYWNfZm5fY19jaGVja19kZWNsICIkTElORU5PIiAiY29weXNpZ25sIiAiYWNfY3ZfaGF2 ZV9kZWNsX2NvcHlzaWdubCIgIiNpbmNsdWRlIDxtYXRoLmg+DQoiDQppZiB0ZXN0ICJ4JGFjX2N2 X2hhdmVfZGVjbF9jb3B5c2lnbmwiID0geHllczsgdGhlbiA6DQogIGFjX2hhdmVfZGVjbD0xDQpl bHNlDQogIGFjX2hhdmVfZGVjbD0wDQpmaQ0KDQpjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GDQoj ZGVmaW5lIEhBVkVfREVDTF9DT1BZU0lHTkwgJGFjX2hhdmVfZGVjbA0KX0FDRU9GDQoNCiAgICAg ICAgaWYgdGVzdCAiJGFjX2N2X2hhdmVfZGVjbF9jb3B5c2lnbmwiID0geWVzOyB0aGVuDQogICAg ICAgICAgICAgICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTog Y2hlY2tpbmcgd2hldGhlciBjb3B5c2lnbmwgY2FuIGJlIHVzZWQgd2l0aG91dCBsaW5raW5nIHdp dGggbGlibSIgPiY1DQokYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIGNvcHlzaWdubCBjYW4g YmUgdXNlZCB3aXRob3V0IGxpbmtpbmcgd2l0aCBsaWJtLi4uICIgPiY2OyB9DQppZiAke2dsX2N2 X2Z1bmNfY29weXNpZ25sX25vX2xpYm0rOn0gZmFsc2U7IHRoZW4gOg0KICAkYXNfZWNob19uICIo Y2FjaGVkKSAiID4mNg0KZWxzZQ0KDQogICAgICAgICAgICAgIGNhdCBjb25mZGVmcy5oIC0gPDxf QUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQNCi8qIGVuZCBjb25mZGVmcy5oLiAgKi8NCiNpbmNsdWRl IDxtYXRoLmg+DQogICAgICAgICAgICAgICAgICAgICBsb25nIGRvdWJsZSB4LCB5Ow0KaW50DQpt YWluICgpDQp7DQpyZXR1cm4gY29weXNpZ25sICh4LCB5KSA8IDA7DQogIDsNCiAgcmV0dXJuIDA7 DQp9DQpfQUNFT0YNCmlmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoNCiAgZ2xf Y3ZfZnVuY19jb3B5c2lnbmxfbm9fbGlibT15ZXMNCmVsc2UNCiAgZ2xfY3ZfZnVuY19jb3B5c2ln bmxfbm9fbGlibT1ubw0KZmkNCnJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19v YmpleHQgXA0KICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0DQoNCmZpDQp7 ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGdsX2N2X2Z1 bmNfY29weXNpZ25sX25vX2xpYm0iID4mNQ0KJGFzX2VjaG8gIiRnbF9jdl9mdW5jX2NvcHlzaWdu bF9ub19saWJtIiA+JjY7IH0NCiAgICAgICAgICBpZiB0ZXN0ICRnbF9jdl9mdW5jX2NvcHlzaWdu bF9ub19saWJtID0geWVzOyB0aGVuDQoNCiRhc19lY2hvICIjZGVmaW5lIEhBVkVfQ09QWVNJR05M X0lOX0xJQkMgMSIgPj5jb25mZGVmcy5oDQoNCiAgICAgICAgICBmaQ0KICAgICAgICBmaQ0KICAg ICAgZmkNCiAgICBmaQ0KICBmaQ0KDQoNCg0KDQogIEdOVUxJQl9TSUdOQklUPTENCg0KDQoNCiRh c19lY2hvICIjZGVmaW5lIEdOVUxJQl9URVNUX1NJR05CSVQgMSIgPj5jb25mZGVmcy5oDQoNCg0K DQogICMgQ29kZSBmcm9tIG1vZHVsZSBzaWdwcm9jbWFzazoNCg0KDQogIHNpZ25hbHNfbm90X3Bv c2l4PQ0KICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0DQovKiBl bmQgY29uZmRlZnMuaC4gICovDQojaW5jbHVkZSA8c2lnbmFsLmg+DQoNCl9BQ0VPRg0KaWYgKGV2 YWwgIiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCIpIDI+JjUgfA0KICAkRUdSRVAgInNpZ3NldF90 IiA+L2Rldi9udWxsIDI+JjE7IHRoZW4gOg0KDQplbHNlDQogIHNpZ25hbHNfbm90X3Bvc2l4PTEN CmZpDQpybSAtZiBjb25mdGVzdCoNCg0KICBpZiB0ZXN0IC16ICIkc2lnbmFsc19ub3RfcG9zaXgi OyB0aGVuDQogICAgYWNfZm5fY19jaGVja19mdW5jICIkTElORU5PIiAic2lncHJvY21hc2siICJh Y19jdl9mdW5jX3NpZ3Byb2NtYXNrIg0KaWYgdGVzdCAieCRhY19jdl9mdW5jX3NpZ3Byb2NtYXNr IiA9IHh5ZXM7IHRoZW4gOg0KICBnbF9jdl9mdW5jX3NpZ3Byb2NtYXNrPTENCmZpDQoNCiAgZmkN CiAgaWYgdGVzdCAteiAiJGdsX2N2X2Z1bmNfc2lncHJvY21hc2siOyB0aGVuDQogICAgSEFWRV9Q T1NJWF9TSUdOQUxCTE9DS0lORz0wDQoNCg0KDQoNCg0KDQoNCg0KICBnbF9MSUJPQkpTPSIkZ2xf TElCT0JKUyBzaWdwcm9jbWFzay4kYWNfb2JqZXh0Ig0KDQoNCg0KICBhY19mbl9jX2NoZWNrX3R5 cGUgIiRMSU5FTk8iICJzaWdzZXRfdCIgImFjX2N2X3R5cGVfc2lnc2V0X3QiICIjaW5jbHVkZSA8 c2lnbmFsLmg+DQovKiBNaW5ndyBkZWZpbmVzIHNpZ3NldF90IG5vdCBpbiA8c2lnbmFsLmg+LCBi dXQgaW4gPHN5cy90eXBlcy5oPi4gICovDQojaW5jbHVkZSA8c3lzL3R5cGVzLmg+DQoiDQppZiB0 ZXN0ICJ4JGFjX2N2X3R5cGVfc2lnc2V0X3QiID0geHllczsgdGhlbiA6DQoNCmNhdCA+PmNvbmZk ZWZzLmggPDxfQUNFT0YNCiNkZWZpbmUgSEFWRV9TSUdTRVRfVCAxDQpfQUNFT0YNCg0KZ2xfY3Zf dHlwZV9zaWdzZXRfdD15ZXMNCmVsc2UNCiAgZ2xfY3ZfdHlwZV9zaWdzZXRfdD1ubw0KZmkNCg0K ICBpZiB0ZXN0ICRnbF9jdl90eXBlX3NpZ3NldF90ICE9IHllczsgdGhlbg0KICAgIEhBVkVfU0lH U0VUX1Q9MA0KICBmaQ0KDQoNCiAgZmkNCg0KDQoNCg0KICBHTlVMSUJfU0lHUFJPQ01BU0s9MQ0K DQoNCg0KJGFzX2VjaG8gIiNkZWZpbmUgR05VTElCX1RFU1RfU0lHUFJPQ01BU0sgMSIgPj5jb25m ZGVmcy5oDQoNCg0KDQogICMgQ29kZSBmcm9tIG1vZHVsZSBzaXplX21heDoNCg0KICBmb3IgYWNf aGVhZGVyIGluIHN0ZGludC5oDQpkbyA6DQogIGFjX2ZuX2NfY2hlY2tfaGVhZGVyX21vbmdyZWwg IiRMSU5FTk8iICJzdGRpbnQuaCIgImFjX2N2X2hlYWRlcl9zdGRpbnRfaCIgIiRhY19pbmNsdWRl c19kZWZhdWx0Ig0KaWYgdGVzdCAieCRhY19jdl9oZWFkZXJfc3RkaW50X2giID0geHllczsgdGhl biA6DQogIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YNCiNkZWZpbmUgSEFWRV9TVERJTlRfSCAx DQpfQUNFT0YNCg0KZmkNCg0KZG9uZQ0KDQogICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGlu ZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgU0laRV9NQVgiID4mNQ0KJGFzX2VjaG9fbiAiY2hl Y2tpbmcgZm9yIFNJWkVfTUFYLi4uICIgPiY2OyB9DQppZiAke2dsX2N2X3NpemVfbWF4Kzp9IGZh bHNlOyB0aGVuIDoNCiAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYNCmVsc2UNCg0KICAgIGds X2N2X3NpemVfbWF4PQ0KICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRh Y19leHQNCi8qIGVuZCBjb25mZGVmcy5oLiAgKi8NCg0KI2luY2x1ZGUgPGxpbWl0cy5oPg0KI2lm IEhBVkVfU1RESU5UX0gNCiNpbmNsdWRlIDxzdGRpbnQuaD4NCiNlbmRpZg0KI2lmZGVmIFNJWkVf TUFYDQpGb3VuZCBpdA0KI2VuZGlmDQoNCl9BQ0VPRg0KaWYgKGV2YWwgIiRhY19jcHAgY29uZnRl c3QuJGFjX2V4dCIpIDI+JjUgfA0KICAkRUdSRVAgIkZvdW5kIGl0IiA+L2Rldi9udWxsIDI+JjE7 IHRoZW4gOg0KICBnbF9jdl9zaXplX21heD15ZXMNCmZpDQpybSAtZiBjb25mdGVzdCoNCg0KICAg IGlmIHRlc3QgLXogIiRnbF9jdl9zaXplX21heCI7IHRoZW4NCiAgICAgICAgICAgICAgICAgICAg ICAgIGlmIGFjX2ZuX2NfY29tcHV0ZV9pbnQgIiRMSU5FTk8iICJzaXplb2YgKHNpemVfdCkgKiBD SEFSX0JJVCAtIDEiICJzaXplX3RfYml0c19taW51c18xIiAgICAgICAgIiNpbmNsdWRlIDxzdGRk ZWYuaD4NCiNpbmNsdWRlIDxsaW1pdHMuaD4iOyB0aGVuIDoNCg0KZWxzZQ0KICBzaXplX3RfYml0 c19taW51c18xPQ0KZmkNCg0KICAgICAgaWYgYWNfZm5fY19jb21wdXRlX2ludCAiJExJTkVOTyIg InNpemVvZiAoc2l6ZV90KSA8PSBzaXplb2YgKHVuc2lnbmVkIGludCkiICJmaXRzX2luX3VpbnQi ICAgICAgICAiI2luY2x1ZGUgPHN0ZGRlZi5oPiI7IHRoZW4gOg0KDQplbHNlDQogIGZpdHNfaW5f dWludD0NCmZpDQoNCiAgICAgIGlmIHRlc3QgLW4gIiRzaXplX3RfYml0c19taW51c18xIiAmJiB0 ZXN0IC1uICIkZml0c19pbl91aW50IjsgdGhlbg0KICAgICAgICBpZiB0ZXN0ICRmaXRzX2luX3Vp bnQgPSAxOyB0aGVuDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXQgY29uZmRlZnMu aCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0DQovKiBlbmQgY29uZmRlZnMuaC4gICovDQoj aW5jbHVkZSA8c3RkZGVmLmg+DQogICAgICAgICAgICAgICAgIGV4dGVybiBzaXplX3QgZm9vOw0K ICAgICAgICAgICAgICAgICBleHRlcm4gdW5zaWduZWQgbG9uZyBmb287DQoNCmludA0KbWFpbiAo KQ0Kew0KDQogIDsNCiAgcmV0dXJuIDA7DQp9DQpfQUNFT0YNCmlmIGFjX2ZuX2NfdHJ5X2NvbXBp bGUgIiRMSU5FTk8iOyB0aGVuIDoNCiAgZml0c19pbl91aW50PTANCmZpDQpybSAtZiBjb3JlIGNv bmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQNCiAgICAgICAg ZmkNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAkZml0c19pbl91aW50 ID0gMTsgdGhlbg0KICAgICAgICAgIGdsX2N2X3NpemVfbWF4PSIoKCgxVSA8PCAkc2l6ZV90X2Jp dHNfbWludXNfMSkgLSAxKSAqIDIgKyAxKSINCiAgICAgICAgZWxzZQ0KICAgICAgICAgIGdsX2N2 X3NpemVfbWF4PSIoKCgxVUwgPDwgJHNpemVfdF9iaXRzX21pbnVzXzEpIC0gMSkgKiAyICsgMSki DQogICAgICAgIGZpDQogICAgICBlbHNlDQogICAgICAgICAgICAgICAgZ2xfY3Zfc2l6ZV9tYXg9 Jygoc2l6ZV90KX4oc2l6ZV90KTApJw0KICAgICAgZmkNCiAgICBmaQ0KDQpmaQ0KeyAkYXNfZWNo byAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRnbF9jdl9zaXplX21heCIg PiY1DQokYXNfZWNobyAiJGdsX2N2X3NpemVfbWF4IiA+JjY7IH0NCiAgaWYgdGVzdCAiJGdsX2N2 X3NpemVfbWF4IiAhPSB5ZXM7IHRoZW4NCg0KY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRg0KI2Rl ZmluZSBTSVpFX01BWCAkZ2xfY3Zfc2l6ZV9tYXgNCl9BQ0VPRg0KDQogIGZpDQoNCg0KICAjIENv ZGUgZnJvbSBtb2R1bGUgc25wcmludGY6DQoNCg0KICBnbF9jdl9mdW5jX3NucHJpbnRmX3VzYWJs ZT1ubw0KICBmb3IgYWNfZnVuYyBpbiBzbnByaW50Zg0KZG8gOg0KICBhY19mbl9jX2NoZWNrX2Z1 bmMgIiRMSU5FTk8iICJzbnByaW50ZiIgImFjX2N2X2Z1bmNfc25wcmludGYiDQppZiB0ZXN0ICJ4 JGFjX2N2X2Z1bmNfc25wcmludGYiID0geHllczsgdGhlbiA6DQogIGNhdCA+PmNvbmZkZWZzLmgg PDxfQUNFT0YNCiNkZWZpbmUgSEFWRV9TTlBSSU5URiAxDQpfQUNFT0YNCg0KZmkNCmRvbmUNCg0K ICBpZiB0ZXN0ICRhY19jdl9mdW5jX3NucHJpbnRmID0geWVzOyB0aGVuDQoNCg0KICB7ICRhc19l Y2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgc25wcmlu dGYgcmVzcGVjdHMgYSBzaXplIG9mIDEiID4mNQ0KJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhl ciBzbnByaW50ZiByZXNwZWN0cyBhIHNpemUgb2YgMS4uLiAiID4mNjsgfQ0KaWYgJHtnbF9jdl9m dW5jX3NucHJpbnRmX3NpemUxKzp9IGZhbHNlOyB0aGVuIDoNCiAgJGFzX2VjaG9fbiAiKGNhY2hl ZCkgIiA+JjYNCmVsc2UNCg0KICAgICAgaWYgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgPSB5ZXM7 IHRoZW4gOg0KICBnbF9jdl9mdW5jX3NucHJpbnRmX3NpemUxPSJndWVzc2luZyB5ZXMiDQplbHNl DQogIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQNCi8qIGVuZCBj b25mZGVmcy5oLiAgKi8NCg0KI2luY2x1ZGUgPHN0ZGlvLmg+DQppbnQgbWFpbigpDQp7DQogIHN0 YXRpYyBjaGFyIGJ1Zls4XSA9IHsgJ0QnLCAnRScsICdBJywgJ0QnLCAnQicsICdFJywgJ0UnLCAn RicgfTsNCiAgc25wcmludGYgKGJ1ZiwgMSwgIiVkIiwgMTIzNDUpOw0KICByZXR1cm4gYnVmWzFd ICE9ICdFJzsNCn0NCl9BQ0VPRg0KaWYgYWNfZm5fY190cnlfcnVuICIkTElORU5PIjsgdGhlbiA6 DQogIGdsX2N2X2Z1bmNfc25wcmludGZfc2l6ZTE9eWVzDQplbHNlDQogIGdsX2N2X2Z1bmNfc25w cmludGZfc2l6ZTE9bm8NCmZpDQpybSAtZiBjb3JlICouY29yZSBjb3JlLmNvbmZ0ZXN0LiogZ21v bi5vdXQgYmIub3V0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCBcDQogIGNvbmZ0ZXN0LiRhY19vYmpleHQg Y29uZnRlc3QuYmVhbSBjb25mdGVzdC4kYWNfZXh0DQpmaQ0KDQoNCmZpDQp7ICRhc19lY2hvICIk YXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGdsX2N2X2Z1bmNfc25wcmludGZf c2l6ZTEiID4mNQ0KJGFzX2VjaG8gIiRnbF9jdl9mdW5jX3NucHJpbnRmX3NpemUxIiA+JjY7IH0N Cg0KICAgIGNhc2UgIiRnbF9jdl9mdW5jX3NucHJpbnRmX3NpemUxIiBpbg0KICAgICAgKnllcykN Cg0KICAgICAgICBjYXNlICIkZ2xfY3ZfZnVuY19zbnByaW50Zl9yZXR2YWxfYzk5IiBpbg0KICAg ICAgICAgICp5ZXMpDQogICAgICAgICAgICBnbF9jdl9mdW5jX3NucHJpbnRmX3VzYWJsZT15ZXMN CiAgICAgICAgICAgIDs7DQogICAgICAgIGVzYWMNCiAgICAgICAgOzsNCiAgICBlc2FjDQogIGZp DQogIGlmIHRlc3QgJGdsX2N2X2Z1bmNfc25wcmludGZfdXNhYmxlID0gbm87IHRoZW4NCg0KDQoN Cg0KDQoNCg0KDQoNCg0KICBnbF9MSUJPQkpTPSIkZ2xfTElCT0JKUyBzbnByaW50Zi4kYWNfb2Jq ZXh0Ig0KDQogIGlmIHRlc3QgJGFjX2N2X2Z1bmNfc25wcmludGYgPSB5ZXM7IHRoZW4NCiAgICBS RVBMQUNFX1NOUFJJTlRGPTENCiAgZmkNCiAgOg0KDQogIGZpDQoNCiAgaWYgdGVzdCAkYWNfY3Zf aGF2ZV9kZWNsX3NucHJpbnRmID0gbm87IHRoZW4NCiAgICBIQVZFX0RFQ0xfU05QUklOVEY9MA0K ICBmaQ0KDQoNCg0KDQogIEdOVUxJQl9TTlBSSU5URj0xDQoNCg0KDQokYXNfZWNobyAiI2RlZmlu ZSBHTlVMSUJfVEVTVF9TTlBSSU5URiAxIiA+PmNvbmZkZWZzLmgNCg0KDQoNCg0KDQpjYXQgPj5j b25mZGVmcy5oIDw8X0FDRU9GDQojZGVmaW5lIEdOVUxJQl9TTlBSSU5URiAxDQpfQUNFT0YNCg0K DQogICMgQ29kZSBmcm9tIG1vZHVsZSBzb2NrZXRsaWI6DQoNCg0KDQoNCg0KICBpZiB0ZXN0ICRh Y19jdl9oZWFkZXJfc3lzX3NvY2tldF9oICE9IHllczsgdGhlbg0KICAgICAgICAgICAgICAgICAg ICBmb3IgYWNfaGVhZGVyIGluIHdpbnNvY2syLmgNCmRvIDoNCiAgYWNfZm5fY19jaGVja19oZWFk ZXJfbW9uZ3JlbCAiJExJTkVOTyIgIndpbnNvY2syLmgiICJhY19jdl9oZWFkZXJfd2luc29jazJf aCIgIiRhY19pbmNsdWRlc19kZWZhdWx0Ig0KaWYgdGVzdCAieCRhY19jdl9oZWFkZXJfd2luc29j azJfaCIgPSB4eWVzOyB0aGVuIDoNCiAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRg0KI2RlZmlu ZSBIQVZFX1dJTlNPQ0syX0ggMQ0KX0FDRU9GDQoNCmZpDQoNCmRvbmUNCg0KICBmaQ0KICBpZiB0 ZXN0ICIkYWNfY3ZfaGVhZGVyX3dpbnNvY2syX2giID0geWVzOyB0aGVuDQogICAgSEFWRV9XSU5T T0NLMl9IPTENCiAgICBVTklTVERfSF9IQVZFX1dJTlNPQ0syX0g9MQ0KICAgIFNZU19JT0NUTF9I X0hBVkVfV0lOU09DSzJfSD0xDQogIGVsc2UNCiAgICBIQVZFX1dJTlNPQ0syX0g9MA0KICBmaQ0K DQogICBMSUJTT0NLRVQ9DQogIGlmIHRlc3QgJEhBVkVfV0lOU09DSzJfSCA9IDE7IHRoZW4NCiAg ICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBp ZiB3ZSBuZWVkIHRvIGNhbGwgV1NBU3RhcnR1cCBpbiB3aW5zb2NrMi5oIGFuZCAtbHdzMl8zMiIg PiY1DQokYXNfZWNob19uICJjaGVja2luZyBpZiB3ZSBuZWVkIHRvIGNhbGwgV1NBU3RhcnR1cCBp biB3aW5zb2NrMi5oIGFuZCAtbHdzMl8zMi4uLiAiID4mNjsgfQ0KaWYgJHtnbF9jdl9mdW5jX3dz YXN0YXJ0dXArOn0gZmFsc2U7IHRoZW4gOg0KICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNg0K ZWxzZQ0KDQogICAgICBnbF9zYXZlX0xJQlM9IiRMSUJTIg0KICAgICAgTElCUz0iJExJQlMgLWx3 czJfMzIiDQogICAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0 DQovKiBlbmQgY29uZmRlZnMuaC4gICovDQoNCiNpZmRlZiBIQVZFX1dJTlNPQ0syX0gNCiMgaW5j bHVkZSA8d2luc29jazIuaD4NCiNlbmRpZg0KaW50DQptYWluICgpDQp7DQoNCiAgICAgICAgICBX T1JEIHdWZXJzaW9uUmVxdWVzdGVkID0gTUFLRVdPUkQoMSwgMSk7DQogICAgICAgICAgV1NBREFU QSB3c2FEYXRhOw0KICAgICAgICAgIGludCBlcnIgPSBXU0FTdGFydHVwKHdWZXJzaW9uUmVxdWVz dGVkLCAmd3NhRGF0YSk7DQogICAgICAgICAgV1NBQ2xlYW51cCAoKTsNCiAgOw0KICByZXR1cm4g MDsNCn0NCl9BQ0VPRg0KaWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOg0KICBn bF9jdl9mdW5jX3dzYXN0YXJ0dXA9eWVzDQplbHNlDQogIGdsX2N2X2Z1bmNfd3Nhc3RhcnR1cD1u bw0KZmkNCnJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXA0KICAg IGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0DQogICAgICBMSUJTPSIkZ2xfc2F2 ZV9MSUJTIg0KDQpmaQ0KeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBy ZXN1bHQ6ICRnbF9jdl9mdW5jX3dzYXN0YXJ0dXAiID4mNQ0KJGFzX2VjaG8gIiRnbF9jdl9mdW5j X3dzYXN0YXJ0dXAiID4mNjsgfQ0KICAgIGlmIHRlc3QgIiRnbF9jdl9mdW5jX3dzYXN0YXJ0dXAi ID0gInllcyI7IHRoZW4NCg0KJGFzX2VjaG8gIiNkZWZpbmUgV0lORE9XU19TT0NLRVRTIDEiID4+ Y29uZmRlZnMuaA0KDQogICAgICBMSUJTT0NLRVQ9Jy1sd3MyXzMyJw0KICAgIGZpDQogIGVsc2UN CiAgICAgICAgICAgICAgICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5F Tk99OiBjaGVja2luZyBmb3IgbGlicmFyeSBjb250YWluaW5nIHNldHNvY2tvcHQiID4mNQ0KJGFz X2VjaG9fbiAiY2hlY2tpbmcgZm9yIGxpYnJhcnkgY29udGFpbmluZyBzZXRzb2Nrb3B0Li4uICIg PiY2OyB9DQppZiAke2dsX2N2X2xpYl9zb2NrZXQrOn0gZmFsc2U7IHRoZW4gOg0KICAkYXNfZWNo b19uICIoY2FjaGVkKSAiID4mNg0KZWxzZQ0KDQogICAgICBnbF9jdl9saWJfc29ja2V0PQ0KICAg ICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dA0KLyogZW5kIGNv bmZkZWZzLmguICAqLw0KZXh0ZXJuDQojaWZkZWYgX19jcGx1c3BsdXMNCiJDIg0KI2VuZGlmDQpj aGFyIHNldHNvY2tvcHQoKTsNCmludA0KbWFpbiAoKQ0Kew0Kc2V0c29ja29wdCgpOw0KICA7DQog IHJldHVybiAwOw0KfQ0KX0FDRU9GDQppZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhl biA6DQoNCmVsc2UNCiAgZ2xfc2F2ZV9MSUJTPSIkTElCUyINCiAgICAgICAgIExJQlM9IiRnbF9z YXZlX0xJQlMgLWxzb2NrZXQiDQogICAgICAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5j b25mdGVzdC4kYWNfZXh0DQovKiBlbmQgY29uZmRlZnMuaC4gICovDQpleHRlcm4NCiNpZmRlZiBf X2NwbHVzcGx1cw0KIkMiDQojZW5kaWYNCmNoYXIgc2V0c29ja29wdCgpOw0KaW50DQptYWluICgp DQp7DQpzZXRzb2Nrb3B0KCk7DQogIDsNCiAgcmV0dXJuIDA7DQp9DQpfQUNFT0YNCmlmIGFjX2Zu X2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoNCiAgZ2xfY3ZfbGliX3NvY2tldD0iLWxzb2Nr ZXQiDQpmaQ0Kcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcDQog ICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQNCiAgICAgICAgIGlmIHRlc3Qg LXogIiRnbF9jdl9saWJfc29ja2V0IjsgdGhlbg0KICAgICAgICAgICBMSUJTPSIkZ2xfc2F2ZV9M SUJTIC1sbmV0d29yayINCiAgICAgICAgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29u ZnRlc3QuJGFjX2V4dA0KLyogZW5kIGNvbmZkZWZzLmguICAqLw0KZXh0ZXJuDQojaWZkZWYgX19j cGx1c3BsdXMNCiJDIg0KI2VuZGlmDQpjaGFyIHNldHNvY2tvcHQoKTsNCmludA0KbWFpbiAoKQ0K ew0Kc2V0c29ja29wdCgpOw0KICA7DQogIHJldHVybiAwOw0KfQ0KX0FDRU9GDQppZiBhY19mbl9j X3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6DQogIGdsX2N2X2xpYl9zb2NrZXQ9Ii1sbmV0d29y ayINCmZpDQpybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwNCiAg ICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dA0KICAgICAgICAgICBpZiB0ZXN0 IC16ICIkZ2xfY3ZfbGliX3NvY2tldCI7IHRoZW4NCiAgICAgICAgICAgICBMSUJTPSIkZ2xfc2F2 ZV9MSUJTIC1sbmV0Ig0KICAgICAgICAgICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNv bmZ0ZXN0LiRhY19leHQNCi8qIGVuZCBjb25mZGVmcy5oLiAgKi8NCmV4dGVybg0KI2lmZGVmIF9f Y3BsdXNwbHVzDQoiQyINCiNlbmRpZg0KY2hhciBzZXRzb2Nrb3B0KCk7DQppbnQNCm1haW4gKCkN CnsNCnNldHNvY2tvcHQoKTsNCiAgOw0KICByZXR1cm4gMDsNCn0NCl9BQ0VPRg0KaWYgYWNfZm5f Y190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOg0KICBnbF9jdl9saWJfc29ja2V0PSItbG5ldCIN CmZpDQpybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwNCiAgICBj b25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dA0KICAgICAgICAgICBmaQ0KICAgICAg ICAgZmkNCiAgICAgICAgIExJQlM9IiRnbF9zYXZlX0xJQlMiDQoNCmZpDQpybSAtZiBjb3JlIGNv bmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwNCiAgICBjb25mdGVzdCRhY19leGVleHQg Y29uZnRlc3QuJGFjX2V4dA0KICAgICAgaWYgdGVzdCAteiAiJGdsX2N2X2xpYl9zb2NrZXQiOyB0 aGVuDQogICAgICAgIGdsX2N2X2xpYl9zb2NrZXQ9Im5vbmUgbmVlZGVkIg0KICAgICAgZmkNCg0K ZmkNCnsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkZ2xf Y3ZfbGliX3NvY2tldCIgPiY1DQokYXNfZWNobyAiJGdsX2N2X2xpYl9zb2NrZXQiID4mNjsgfQ0K ICAgIGlmIHRlc3QgIiRnbF9jdl9saWJfc29ja2V0IiAhPSAibm9uZSBuZWVkZWQiOyB0aGVuDQog ICAgICBMSUJTT0NLRVQ9IiRnbF9jdl9saWJfc29ja2V0Ig0KICAgIGZpDQogIGZpDQoNCg0KICAj IENvZGUgZnJvbSBtb2R1bGUgc29ja2V0czoNCg0KDQoNCg0KICA6DQoNCg0KICAjIENvZGUgZnJv bSBtb2R1bGUgc29ja2xlbjoNCiAgICAgYWNfZm5fY19jaGVja190eXBlICIkTElORU5PIiAic29j a2xlbl90IiAiYWNfY3ZfdHlwZV9zb2NrbGVuX3QiICINCi8qIDxzeXMvdHlwZXMuaD4gaXMgbm90 IG5lZWRlZCBhY2NvcmRpbmcgdG8gUE9TSVgsIGJ1dCB0aGUNCiAgIDxzeXMvc29ja2V0Lmg+IGlu IGkzODYtdW5rbm93bi1mcmVlYnNkNC4xMCBhbmQNCiAgIHBvd2VycGMtYXBwbGUtZGFyd2luNS41 IHJlcXVpcmVkIGl0LiAqLw0KI2luY2x1ZGUgPHN5cy90eXBlcy5oPg0KI2lmIEhBVkVfU1lTX1NP Q0tFVF9IDQojIGluY2x1ZGUgPHN5cy9zb2NrZXQuaD4NCiNlbGlmIEhBVkVfV1MyVENQSVBfSA0K IyBpbmNsdWRlIDx3czJ0Y3BpcC5oPg0KI2VuZGlmDQoNCiINCmlmIHRlc3QgIngkYWNfY3ZfdHlw ZV9zb2NrbGVuX3QiID0geHllczsgdGhlbiA6DQoNCmVsc2UNCiAgeyAkYXNfZWNobyAiJGFzX21l OiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3Igc29ja2xlbl90IGVxdWl2YWxlbnQi ID4mNQ0KJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIHNvY2tsZW5fdCBlcXVpdmFsZW50Li4uICIg PiY2OyB9DQogICAgICBpZiAke2dsX2N2X3NvY2tsZW5fdF9lcXVpdis6fSBmYWxzZTsgdGhlbiA6 DQogICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2DQplbHNlDQogICMgU3lzdGVtcyBoYXZlIGVp dGhlciAic3RydWN0IHNvY2thZGRyICoiIG9yDQogICAgICAgICAjICJ2b2lkICoiIGFzIHRoZSBz ZWNvbmQgYXJndW1lbnQgdG8gZ2V0cGVlcm5hbWUNCiAgICAgICAgIGdsX2N2X3NvY2tsZW5fdF9l cXVpdj0NCiAgICAgICAgIGZvciBhcmcyIGluICJzdHJ1Y3Qgc29ja2FkZHIiIHZvaWQ7IGRvDQog ICAgICAgICAgIGZvciB0IGluIGludCBzaXplX3QgInVuc2lnbmVkIGludCIgImxvbmcgaW50IiAi dW5zaWduZWQgbG9uZyBpbnQiOyBkbw0KICAgICAgICAgICAgIGNhdCBjb25mZGVmcy5oIC0gPDxf QUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQNCi8qIGVuZCBjb25mZGVmcy5oLiAgKi8NCiNpbmNsdWRl IDxzeXMvdHlwZXMuaD4NCiAgICAgICAgICAgICAgICAgICAjaW5jbHVkZSA8c3lzL3NvY2tldC5o Pg0KDQogICAgICAgICAgICAgICAgICAgaW50IGdldHBlZXJuYW1lIChpbnQsICRhcmcyICosICR0 ICopOw0KaW50DQptYWluICgpDQp7DQokdCBsZW47DQogICAgICAgICAgICAgICAgICBnZXRwZWVy bmFtZSAoMCwgMCwgJmxlbik7DQogIDsNCiAgcmV0dXJuIDA7DQp9DQpfQUNFT0YNCmlmIGFjX2Zu X2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoNCiAgZ2xfY3Zfc29ja2xlbl90X2VxdWl2 PSIkdCINCmZpDQpybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNv bmZ0ZXN0LiRhY19leHQNCiAgICAgICAgICAgICB0ZXN0ICIkZ2xfY3Zfc29ja2xlbl90X2VxdWl2 IiAhPSAiIiAmJiBicmVhaw0KICAgICAgICAgICBkb25lDQogICAgICAgICAgIHRlc3QgIiRnbF9j dl9zb2NrbGVuX3RfZXF1aXYiICE9ICIiICYmIGJyZWFrDQogICAgICAgICBkb25lDQoNCmZpDQoN CiAgICAgIGlmIHRlc3QgIiRnbF9jdl9zb2NrbGVuX3RfZXF1aXYiID0gIiI7IHRoZW4NCiAgICAg ICAgYXNfZm5fZXJyb3IgJD8gIkNhbm5vdCBmaW5kIGEgdHlwZSB0byB1c2UgaW4gcGxhY2Ugb2Yg c29ja2xlbl90IiAiJExJTkVOTyIgNQ0KICAgICAgZmkNCiAgICAgIHsgJGFzX2VjaG8gIiRhc19t ZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkZ2xfY3Zfc29ja2xlbl90X2VxdWl2IiA+ JjUNCiRhc19lY2hvICIkZ2xfY3Zfc29ja2xlbl90X2VxdWl2IiA+JjY7IH0NCg0KY2F0ID4+Y29u ZmRlZnMuaCA8PF9BQ0VPRg0KI2RlZmluZSBzb2NrbGVuX3QgJGdsX2N2X3NvY2tsZW5fdF9lcXVp dg0KX0FDRU9GDQoNCmZpDQoNCiAgIyBDb2RlIGZyb20gbW9kdWxlIHNzaXplX3Q6DQoNCiAgeyAk YXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3Igc3NpemVf dCIgPiY1DQokYXNfZWNob19uICJjaGVja2luZyBmb3Igc3NpemVfdC4uLiAiID4mNjsgfQ0KaWYg JHtndF9jdl9zc2l6ZV90Kzp9IGZhbHNlOyB0aGVuIDoNCiAgJGFzX2VjaG9fbiAiKGNhY2hlZCkg IiA+JjYNCmVsc2UNCiAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4 dA0KLyogZW5kIGNvbmZkZWZzLmguICAqLw0KI2luY2x1ZGUgPHN5cy90eXBlcy5oPg0KaW50DQpt YWluICgpDQp7DQppbnQgeCA9IHNpemVvZiAoc3NpemVfdCAqKSArIHNpemVvZiAoc3NpemVfdCk7 DQogICAgICAgICAgICByZXR1cm4gIXg7DQogIDsNCiAgcmV0dXJuIDA7DQp9DQpfQUNFT0YNCmlm IGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoNCiAgZ3RfY3Zfc3NpemVfdD15 ZXMNCmVsc2UNCiAgZ3RfY3Zfc3NpemVfdD1ubw0KZmkNCnJtIC1mIGNvcmUgY29uZnRlc3QuZXJy IGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dA0KZmkNCnsgJGFzX2VjaG8gIiRh c19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkZ3RfY3Zfc3NpemVfdCIgPiY1DQok YXNfZWNobyAiJGd0X2N2X3NzaXplX3QiID4mNjsgfQ0KICBpZiB0ZXN0ICRndF9jdl9zc2l6ZV90 ID0gbm87IHRoZW4NCg0KJGFzX2VjaG8gIiNkZWZpbmUgc3NpemVfdCBpbnQiID4+Y29uZmRlZnMu aA0KDQogIGZpDQoNCiAgIyBDb2RlIGZyb20gbW9kdWxlIHN0YXQ6DQoNCg0KDQogICAgeyAkYXNf ZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIHN0YXQg aGFuZGxlcyB0cmFpbGluZyBzbGFzaGVzIG9uIGRpcmVjdG9yaWVzIiA+JjUNCiRhc19lY2hvX24g ImNoZWNraW5nIHdoZXRoZXIgc3RhdCBoYW5kbGVzIHRyYWlsaW5nIHNsYXNoZXMgb24gZGlyZWN0 b3JpZXMuLi4gIiA+JjY7IH0NCmlmICR7Z2xfY3ZfZnVuY19zdGF0X2Rpcl9zbGFzaCs6fSBmYWxz ZTsgdGhlbiA6DQogICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2DQplbHNlDQogIGlmIHRlc3Qg IiRjcm9zc19jb21waWxpbmciID0geWVzOyB0aGVuIDoNCiAgY2FzZSAkaG9zdF9vcyBpbg0KICAg ICAgICAgICAgbWluZ3cqKSBnbF9jdl9mdW5jX3N0YXRfZGlyX3NsYXNoPSJndWVzc2luZyBubyI7 Ow0KICAgICAgICAgICAgKikgZ2xfY3ZfZnVuY19zdGF0X2Rpcl9zbGFzaD0iZ3Vlc3NpbmcgeWVz Ijs7DQogICAgICAgICAgZXNhYw0KZWxzZQ0KICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5j b25mdGVzdC4kYWNfZXh0DQovKiBlbmQgY29uZmRlZnMuaC4gICovDQojaW5jbHVkZSA8c3lzL3N0 YXQuaD4NCg0KaW50DQptYWluICgpDQp7DQpzdHJ1Y3Qgc3RhdCBzdDsgcmV0dXJuIHN0YXQgKCIu IiwgJnN0KSAhPSBzdGF0ICgiLi8iLCAmc3QpOw0KICA7DQogIHJldHVybiAwOw0KfQ0KX0FDRU9G DQppZiBhY19mbl9jX3RyeV9ydW4gIiRMSU5FTk8iOyB0aGVuIDoNCiAgZ2xfY3ZfZnVuY19zdGF0 X2Rpcl9zbGFzaD15ZXMNCmVsc2UNCiAgZ2xfY3ZfZnVuY19zdGF0X2Rpcl9zbGFzaD1ubw0KZmkN CnJtIC1mIGNvcmUgKi5jb3JlIGNvcmUuY29uZnRlc3QuKiBnbW9uLm91dCBiYi5vdXQgY29uZnRl c3QkYWNfZXhlZXh0IFwNCiAgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC5iZWFtIGNvbmZ0 ZXN0LiRhY19leHQNCmZpDQoNCmZpDQp7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJ TkVOT306IHJlc3VsdDogJGdsX2N2X2Z1bmNfc3RhdF9kaXJfc2xhc2giID4mNQ0KJGFzX2VjaG8g IiRnbF9jdl9mdW5jX3N0YXRfZGlyX3NsYXNoIiA+JjY7IH0NCiAgICAgIHsgJGFzX2VjaG8gIiRh c19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciBzdGF0IGhhbmRsZXMg dHJhaWxpbmcgc2xhc2hlcyBvbiBmaWxlcyIgPiY1DQokYXNfZWNob19uICJjaGVja2luZyB3aGV0 aGVyIHN0YXQgaGFuZGxlcyB0cmFpbGluZyBzbGFzaGVzIG9uIGZpbGVzLi4uICIgPiY2OyB9DQpp ZiAke2dsX2N2X2Z1bmNfc3RhdF9maWxlX3NsYXNoKzp9IGZhbHNlOyB0aGVuIDoNCiAgJGFzX2Vj aG9fbiAiKGNhY2hlZCkgIiA+JjYNCmVsc2UNCiAgdG91Y2ggY29uZnRlc3QudG1wDQogICAgICAg IyBBc3N1bWUgdGhhdCBpZiB3ZSBoYXZlIGxzdGF0LCB3ZSBjYW4gYWxzbyBjaGVjayBzeW1saW5r cy4NCiAgICAgICBpZiB0ZXN0ICRhY19jdl9mdW5jX2xzdGF0ID0geWVzOyB0aGVuDQogICAgICAg ICBsbiAtcyBjb25mdGVzdC50bXAgY29uZnRlc3QubG5rDQogICAgICAgZmkNCiAgICAgICBpZiB0 ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IHllczsgdGhlbiA6DQogIGdsX2N2X2Z1bmNfc3RhdF9m aWxlX3NsYXNoPSJndWVzc2luZyBubyINCmVsc2UNCiAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VP RiA+Y29uZnRlc3QuJGFjX2V4dA0KLyogZW5kIGNvbmZkZWZzLmguICAqLw0KI2luY2x1ZGUgPHN5 cy9zdGF0Lmg+DQoNCmludA0KbWFpbiAoKQ0Kew0KaW50IHJlc3VsdCA9IDA7DQogICAgICBzdHJ1 Y3Qgc3RhdCBzdDsNCiAgICAgIGlmICghc3RhdCAoImNvbmZ0ZXN0LnRtcC8iLCAmc3QpKQ0KICAg ICAgICByZXN1bHQgfD0gMTsNCiNpZiBIQVZFX0xTVEFUDQogICAgICBpZiAoIXN0YXQgKCJjb25m dGVzdC5sbmsvIiwgJnN0KSkNCiAgICAgICAgcmVzdWx0IHw9IDI7DQojZW5kaWYNCiAgICAgIHJl dHVybiByZXN1bHQ7DQoNCiAgOw0KICByZXR1cm4gMDsNCn0NCl9BQ0VPRg0KaWYgYWNfZm5fY190 cnlfcnVuICIkTElORU5PIjsgdGhlbiA6DQogIGdsX2N2X2Z1bmNfc3RhdF9maWxlX3NsYXNoPXll cw0KZWxzZQ0KICBnbF9jdl9mdW5jX3N0YXRfZmlsZV9zbGFzaD1ubw0KZmkNCnJtIC1mIGNvcmUg Ki5jb3JlIGNvcmUuY29uZnRlc3QuKiBnbW9uLm91dCBiYi5vdXQgY29uZnRlc3QkYWNfZXhlZXh0 IFwNCiAgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC5iZWFtIGNvbmZ0ZXN0LiRhY19leHQN CmZpDQoNCiAgICAgICBybSAtZiBjb25mdGVzdC50bXAgY29uZnRlc3QubG5rDQpmaQ0KeyAkYXNf ZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRnbF9jdl9mdW5jX3N0 YXRfZmlsZV9zbGFzaCIgPiY1DQokYXNfZWNobyAiJGdsX2N2X2Z1bmNfc3RhdF9maWxlX3NsYXNo IiA+JjY7IH0NCiAgY2FzZSAkZ2xfY3ZfZnVuY19zdGF0X2Rpcl9zbGFzaCBpbg0KICAgICpubykg UkVQTEFDRV9TVEFUPTENCg0KJGFzX2VjaG8gIiNkZWZpbmUgUkVQTEFDRV9GVU5DX1NUQVRfRElS IDEiID4+Y29uZmRlZnMuaA0KOzsNCiAgZXNhYw0KICBjYXNlICRnbF9jdl9mdW5jX3N0YXRfZmls ZV9zbGFzaCBpbg0KICAgICpubykgUkVQTEFDRV9TVEFUPTENCg0KJGFzX2VjaG8gIiNkZWZpbmUg UkVQTEFDRV9GVU5DX1NUQVRfRklMRSAxIiA+PmNvbmZkZWZzLmgNCjs7DQogIGVzYWMNCiAgaWYg dGVzdCAkUkVQTEFDRV9TVEFUID0gMTsgdGhlbg0KDQoNCg0KDQoNCg0KDQoNCiAgZ2xfTElCT0JK Uz0iJGdsX0xJQk9CSlMgc3RhdC4kYWNfb2JqZXh0Ig0KDQoNCiAgZmkNCg0KDQoNCg0KICBHTlVM SUJfU1RBVD0xDQoNCg0KDQokYXNfZWNobyAiI2RlZmluZSBHTlVMSUJfVEVTVF9TVEFUIDEiID4+ Y29uZmRlZnMuaA0KDQoNCg0KICAjIENvZGUgZnJvbSBtb2R1bGUgc3RhdC1tYWNyb3M6DQogICMg Q29kZSBmcm9tIG1vZHVsZSBzdGF0LXRpbWU6DQoNCg0KDQoNCg0KICBhY19mbl9jX2NoZWNrX21l bWJlciAiJExJTkVOTyIgInN0cnVjdCBzdGF0IiAic3RfYXRpbS50dl9uc2VjIiAiYWNfY3ZfbWVt YmVyX3N0cnVjdF9zdGF0X3N0X2F0aW1fdHZfbnNlYyIgIiNpbmNsdWRlIDxzeXMvdHlwZXMuaD4N CiAgICAgI2luY2x1ZGUgPHN5cy9zdGF0Lmg+DQoiDQppZiB0ZXN0ICJ4JGFjX2N2X21lbWJlcl9z dHJ1Y3Rfc3RhdF9zdF9hdGltX3R2X25zZWMiID0geHllczsgdGhlbiA6DQoNCmNhdCA+PmNvbmZk ZWZzLmggPDxfQUNFT0YNCiNkZWZpbmUgSEFWRV9TVFJVQ1RfU1RBVF9TVF9BVElNX1RWX05TRUMg MQ0KX0FDRU9GDQoNCnsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hl Y2tpbmcgd2hldGhlciBzdHJ1Y3Qgc3RhdC5zdF9hdGltIGlzIG9mIHR5cGUgc3RydWN0IHRpbWVz cGVjIiA+JjUNCiRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgc3RydWN0IHN0YXQuc3RfYXRp bSBpcyBvZiB0eXBlIHN0cnVjdCB0aW1lc3BlYy4uLiAiID4mNjsgfQ0KaWYgJHthY19jdl90eXBl b2Zfc3RydWN0X3N0YXRfc3RfYXRpbV9pc19zdHJ1Y3RfdGltZXNwZWMrOn0gZmFsc2U7IHRoZW4g Og0KICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNg0KZWxzZQ0KICBjYXQgY29uZmRlZnMuaCAt IDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0DQovKiBlbmQgY29uZmRlZnMuaC4gICovDQoNCiAg ICAgICAgICAgICNpbmNsdWRlIDxzeXMvdHlwZXMuaD4NCiAgICAgICAgICAgICNpbmNsdWRlIDxz eXMvc3RhdC5oPg0KICAgICAgICAgICAgI2lmIEhBVkVfU1lTX1RJTUVfSA0KICAgICAgICAgICAg IyBpbmNsdWRlIDxzeXMvdGltZS5oPg0KICAgICAgICAgICAgI2VuZGlmDQogICAgICAgICAgICAj aW5jbHVkZSA8dGltZS5oPg0KICAgICAgICAgICAgc3RydWN0IHRpbWVzcGVjIHRzOw0KICAgICAg ICAgICAgc3RydWN0IHN0YXQgc3Q7DQoNCmludA0KbWFpbiAoKQ0Kew0KDQogICAgICAgICAgICBz dC5zdF9hdGltID0gdHM7DQoNCiAgOw0KICByZXR1cm4gMDsNCn0NCl9BQ0VPRg0KaWYgYWNfZm5f Y190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOg0KICBhY19jdl90eXBlb2Zfc3RydWN0X3N0 YXRfc3RfYXRpbV9pc19zdHJ1Y3RfdGltZXNwZWM9eWVzDQplbHNlDQogIGFjX2N2X3R5cGVvZl9z dHJ1Y3Rfc3RhdF9zdF9hdGltX2lzX3N0cnVjdF90aW1lc3BlYz1ubw0KZmkNCnJtIC1mIGNvcmUg Y29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dA0KZmkNCnsg JGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfdHlw ZW9mX3N0cnVjdF9zdGF0X3N0X2F0aW1faXNfc3RydWN0X3RpbWVzcGVjIiA+JjUNCiRhc19lY2hv ICIkYWNfY3ZfdHlwZW9mX3N0cnVjdF9zdGF0X3N0X2F0aW1faXNfc3RydWN0X3RpbWVzcGVjIiA+ JjY7IH0NCiAgICAgaWYgdGVzdCAkYWNfY3ZfdHlwZW9mX3N0cnVjdF9zdGF0X3N0X2F0aW1faXNf c3RydWN0X3RpbWVzcGVjID0geWVzOyB0aGVuDQoNCiRhc19lY2hvICIjZGVmaW5lIFRZUEVPRl9T VFJVQ1RfU1RBVF9TVF9BVElNX0lTX1NUUlVDVF9USU1FU1BFQyAxIiA+PmNvbmZkZWZzLmgNCg0K ICAgICBmaQ0KZWxzZQ0KICBhY19mbl9jX2NoZWNrX21lbWJlciAiJExJTkVOTyIgInN0cnVjdCBz dGF0IiAic3RfYXRpbWVzcGVjLnR2X25zZWMiICJhY19jdl9tZW1iZXJfc3RydWN0X3N0YXRfc3Rf YXRpbWVzcGVjX3R2X25zZWMiICIjaW5jbHVkZSA8c3lzL3R5cGVzLmg+DQogICAgICAgICNpbmNs dWRlIDxzeXMvc3RhdC5oPg0KIg0KaWYgdGVzdCAieCRhY19jdl9tZW1iZXJfc3RydWN0X3N0YXRf c3RfYXRpbWVzcGVjX3R2X25zZWMiID0geHllczsgdGhlbiA6DQoNCmNhdCA+PmNvbmZkZWZzLmgg PDxfQUNFT0YNCiNkZWZpbmUgSEFWRV9TVFJVQ1RfU1RBVF9TVF9BVElNRVNQRUNfVFZfTlNFQyAx DQpfQUNFT0YNCg0KDQplbHNlDQogIGFjX2ZuX2NfY2hlY2tfbWVtYmVyICIkTElORU5PIiAic3Ry dWN0IHN0YXQiICJzdF9hdGltZW5zZWMiICJhY19jdl9tZW1iZXJfc3RydWN0X3N0YXRfc3RfYXRp bWVuc2VjIiAiI2luY2x1ZGUgPHN5cy90eXBlcy5oPg0KICAgICAgICAgICAjaW5jbHVkZSA8c3lz L3N0YXQuaD4NCiINCmlmIHRlc3QgIngkYWNfY3ZfbWVtYmVyX3N0cnVjdF9zdGF0X3N0X2F0aW1l bnNlYyIgPSB4eWVzOyB0aGVuIDoNCg0KY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRg0KI2RlZmlu ZSBIQVZFX1NUUlVDVF9TVEFUX1NUX0FUSU1FTlNFQyAxDQpfQUNFT0YNCg0KDQplbHNlDQogIGFj X2ZuX2NfY2hlY2tfbWVtYmVyICIkTElORU5PIiAic3RydWN0IHN0YXQiICJzdF9hdGltLnN0X190 aW0udHZfbnNlYyIgImFjX2N2X21lbWJlcl9zdHJ1Y3Rfc3RhdF9zdF9hdGltX3N0X190aW1fdHZf bnNlYyIgIiNpbmNsdWRlIDxzeXMvdHlwZXMuaD4NCiAgICAgICAgICAgICAgI2luY2x1ZGUgPHN5 cy9zdGF0Lmg+DQoiDQppZiB0ZXN0ICJ4JGFjX2N2X21lbWJlcl9zdHJ1Y3Rfc3RhdF9zdF9hdGlt X3N0X190aW1fdHZfbnNlYyIgPSB4eWVzOyB0aGVuIDoNCg0KY2F0ID4+Y29uZmRlZnMuaCA8PF9B Q0VPRg0KI2RlZmluZSBIQVZFX1NUUlVDVF9TVEFUX1NUX0FUSU1fU1RfX1RJTV9UVl9OU0VDIDEN Cl9BQ0VPRg0KDQoNCmZpDQoNCmZpDQoNCmZpDQoNCmZpDQoNCg0KDQoNCg0KDQogIGFjX2ZuX2Nf Y2hlY2tfbWVtYmVyICIkTElORU5PIiAic3RydWN0IHN0YXQiICJzdF9iaXJ0aHRpbWVzcGVjLnR2 X25zZWMiICJhY19jdl9tZW1iZXJfc3RydWN0X3N0YXRfc3RfYmlydGh0aW1lc3BlY190dl9uc2Vj IiAiI2luY2x1ZGUgPHN5cy90eXBlcy5oPg0KICAgICAjaW5jbHVkZSA8c3lzL3N0YXQuaD4NCiIN CmlmIHRlc3QgIngkYWNfY3ZfbWVtYmVyX3N0cnVjdF9zdGF0X3N0X2JpcnRodGltZXNwZWNfdHZf bnNlYyIgPSB4eWVzOyB0aGVuIDoNCg0KY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRg0KI2RlZmlu ZSBIQVZFX1NUUlVDVF9TVEFUX1NUX0JJUlRIVElNRVNQRUNfVFZfTlNFQyAxDQpfQUNFT0YNCg0K DQplbHNlDQogIGFjX2ZuX2NfY2hlY2tfbWVtYmVyICIkTElORU5PIiAic3RydWN0IHN0YXQiICJz dF9iaXJ0aHRpbWVuc2VjIiAiYWNfY3ZfbWVtYmVyX3N0cnVjdF9zdGF0X3N0X2JpcnRodGltZW5z ZWMiICIjaW5jbHVkZSA8c3lzL3R5cGVzLmg+DQogICAgICAgICNpbmNsdWRlIDxzeXMvc3RhdC5o Pg0KIg0KaWYgdGVzdCAieCRhY19jdl9tZW1iZXJfc3RydWN0X3N0YXRfc3RfYmlydGh0aW1lbnNl YyIgPSB4eWVzOyB0aGVuIDoNCg0KY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRg0KI2RlZmluZSBI QVZFX1NUUlVDVF9TVEFUX1NUX0JJUlRIVElNRU5TRUMgMQ0KX0FDRU9GDQoNCg0KZWxzZQ0KICBh Y19mbl9jX2NoZWNrX21lbWJlciAiJExJTkVOTyIgInN0cnVjdCBzdGF0IiAic3RfYmlydGh0aW0u dHZfbnNlYyIgImFjX2N2X21lbWJlcl9zdHJ1Y3Rfc3RhdF9zdF9iaXJ0aHRpbV90dl9uc2VjIiAi I2luY2x1ZGUgPHN5cy90eXBlcy5oPg0KICAgICAgICAgICNpbmNsdWRlIDxzeXMvc3RhdC5oPg0K Ig0KaWYgdGVzdCAieCRhY19jdl9tZW1iZXJfc3RydWN0X3N0YXRfc3RfYmlydGh0aW1fdHZfbnNl YyIgPSB4eWVzOyB0aGVuIDoNCg0KY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRg0KI2RlZmluZSBI QVZFX1NUUlVDVF9TVEFUX1NUX0JJUlRIVElNX1RWX05TRUMgMQ0KX0FDRU9GDQoNCg0KZmkNCg0K ZmkNCg0KZmkNCg0KDQogICMgQ29kZSBmcm9tIG1vZHVsZSBzdGRhcmc6DQoNCiAgU1REQVJHX0g9 JycNCiAgTkVYVF9TVERBUkdfSD0nPHN0ZGFyZy5oPicNCiAgeyAkYXNfZWNobyAiJGFzX21lOiR7 YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgdmFfY29weSIgPiY1DQokYXNfZWNob19u ICJjaGVja2luZyBmb3IgdmFfY29weS4uLiAiID4mNjsgfQ0KICBpZiAke2dsX2N2X2Z1bmNfdmFf Y29weSs6fSBmYWxzZTsgdGhlbiA6DQogICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2DQplbHNl DQoNCiAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0DQovKiBl bmQgY29uZmRlZnMuaC4gICovDQojaW5jbHVkZSA8c3RkYXJnLmg+DQppbnQNCm1haW4gKCkNCnsN Cg0KI2lmbmRlZiB2YV9jb3B5DQp2b2lkICgqZnVuYykgKHZhX2xpc3QsIHZhX2xpc3QpID0gdmFf Y29weTsNCiNlbmRpZg0KDQogIDsNCiAgcmV0dXJuIDA7DQp9DQpfQUNFT0YNCmlmIGFjX2ZuX2Nf dHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoNCiAgZ2xfY3ZfZnVuY192YV9jb3B5PXllcw0K ZWxzZQ0KICBnbF9jdl9mdW5jX3ZhX2NvcHk9bm8NCmZpDQpybSAtZiBjb3JlIGNvbmZ0ZXN0LmVy ciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQNCmZpDQoNCiAgeyAkYXNfZWNo byAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRnbF9jdl9mdW5jX3ZhX2Nv cHkiID4mNQ0KJGFzX2VjaG8gIiRnbF9jdl9mdW5jX3ZhX2NvcHkiID4mNjsgfQ0KICBpZiB0ZXN0 ICRnbF9jdl9mdW5jX3ZhX2NvcHkgPSBubzsgdGhlbg0KICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dA0K LyogZW5kIGNvbmZkZWZzLmguICAqLw0KI2lmIGRlZmluZWQgX0FJWCAmJiAhZGVmaW5lZCBfX0dO VUNfXw0KICAgICAgICBBSVggdmFjY2luZQ0KICAgICAgICNlbmRpZg0KDQpfQUNFT0YNCmlmIChl dmFsICIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQiKSAyPiY1IHwNCiAgJEVHUkVQICJ2YWNjaW5l IiA+L2Rldi9udWxsIDI+JjE7IHRoZW4gOg0KICBnbF9haXhjYz15ZXMNCmVsc2UNCiAgZ2xfYWl4 Y2M9bm8NCmZpDQpybSAtZiBjb25mdGVzdCoNCg0KICAgIGlmIHRlc3QgJGdsX2FpeGNjID0geWVz OyB0aGVuDQogICAgICAgICAgICBTVERBUkdfSD1zdGRhcmcuaA0KDQoNCg0KDQoNCg0KDQoNCiAg ICAgaWYgdGVzdCAkZ2xfY3ZfaGF2ZV9pbmNsdWRlX25leHQgPSB5ZXM7IHRoZW4NCiAgICAgICBn bF9jdl9uZXh0X3N0ZGFyZ19oPSc8J3N0ZGFyZy5oJz4nDQogICAgIGVsc2UNCiAgICAgICB7ICRh c19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGFic29sdXRlIG5h bWUgb2YgPHN0ZGFyZy5oPiIgPiY1DQokYXNfZWNob19uICJjaGVja2luZyBhYnNvbHV0ZSBuYW1l IG9mIDxzdGRhcmcuaD4uLi4gIiA+JjY7IH0NCmlmICR7Z2xfY3ZfbmV4dF9zdGRhcmdfaCs6fSBm YWxzZTsgdGhlbiA6DQogICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2DQplbHNlDQoNCiAgICAg ICAgICAgICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQNCi8q IGVuZCBjb25mZGVmcy5oLiAgKi8NCiNpbmNsdWRlIDxzdGRhcmcuaD4NCg0KX0FDRU9GDQogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBjYXNlICIkaG9zdF9vcyIgaW4NCiAgICAgICAgICAgICAgICAgYWl4KikgZ2xfYWJzbmFtZV9j cHA9IiRhY19jcHAgLUMiIDs7DQogICAgICAgICAgICAgICAgICopICAgIGdsX2Fic25hbWVfY3Bw PSIkYWNfY3BwIiA7Ow0KICAgICAgICAgICAgICAgZXNhYw0KICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2xfY3ZfbmV4dF9zdGRhcmdf aD0nIidgKGV2YWwgIiRnbF9hYnNuYW1lX2NwcCBjb25mdGVzdC4kYWNfZXh0IikgMj4mNSB8DQog ICAgICAgICAgICAgICAgICBzZWQgLW4gJ1wjL3N0ZGFyZy5oI3sNCiAgICAgICAgICAgICAgICAg ICAgcyMuKiJcKC4qL3N0ZGFyZy5oXCkiLiojXDEjDQogICAgICAgICAgICAgICAgICAgIHMjXi9b Xi9dIy8vJiMNCiAgICAgICAgICAgICAgICAgICAgcA0KICAgICAgICAgICAgICAgICAgICBxDQog ICAgICAgICAgICAgICAgICB9J2AnIicNCg0KDQpmaQ0KeyAkYXNfZWNobyAiJGFzX21lOiR7YXNf bGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRnbF9jdl9uZXh0X3N0ZGFyZ19oIiA+JjUNCiRhc19l Y2hvICIkZ2xfY3ZfbmV4dF9zdGRhcmdfaCIgPiY2OyB9DQogICAgIGZpDQogICAgIE5FWFRfU1RE QVJHX0g9JGdsX2N2X25leHRfc3RkYXJnX2gNCg0KICAgICBpZiB0ZXN0ICRnbF9jdl9oYXZlX2lu Y2x1ZGVfbmV4dCA9IHllcyB8fCB0ZXN0ICRnbF9jdl9oYXZlX2luY2x1ZGVfbmV4dCA9IGJ1Z2d5 OyB0aGVuDQogICAgICAgIyBJTkNMVURFX05FWFRfQVNfRklSU1RfRElSRUNUSVZFPSdpbmNsdWRl X25leHQnDQogICAgICAgZ2xfbmV4dF9hc19maXJzdF9kaXJlY3RpdmU9Jzwnc3RkYXJnLmgnPicN CiAgICAgZWxzZQ0KICAgICAgICMgSU5DTFVERV9ORVhUX0FTX0ZJUlNUX0RJUkVDVElWRT0naW5j bHVkZScNCiAgICAgICBnbF9uZXh0X2FzX2ZpcnN0X2RpcmVjdGl2ZT0kZ2xfY3ZfbmV4dF9zdGRh cmdfaA0KICAgICBmaQ0KICAgICBORVhUX0FTX0ZJUlNUX0RJUkVDVElWRV9TVERBUkdfSD0kZ2xf bmV4dF9hc19maXJzdF9kaXJlY3RpdmUNCg0KDQoNCg0KICAgICAgICAgICAgaWYgdGVzdCAiJGds X2N2X25leHRfc3RkYXJnX2giID0gJyIiJzsgdGhlbg0KICAgICAgICBnbF9jdl9uZXh0X3N0ZGFy Z19oPSciLy8vdXNyL2luY2x1ZGUvc3RkYXJnLmgiJw0KICAgICAgICBORVhUX1NUREFSR19IPSIk Z2xfY3ZfbmV4dF9zdGRhcmdfaCINCiAgICAgIGZpDQogICAgZWxzZQ0KDQogIHNhdmVkX2FzX2Vj aG9fbj0iJGFzX2VjaG9fbiINCiAgYXNfZWNob19uPSc6Jw0KICBpZiAke2dsX2N2X2Z1bmNfX192 YV9jb3B5Kzp9IGZhbHNlOyB0aGVuIDoNCiAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYNCmVs c2UNCg0KICAgICAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0 DQovKiBlbmQgY29uZmRlZnMuaC4gICovDQojaW5jbHVkZSA8c3RkYXJnLmg+DQppbnQNCm1haW4g KCkNCnsNCg0KI2lmbmRlZiBfX3ZhX2NvcHkNCmVycm9yLCBiYWlsIG91dA0KI2VuZGlmDQoNCiAg Ow0KICByZXR1cm4gMDsNCn0NCl9BQ0VPRg0KaWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVO TyI7IHRoZW4gOg0KICBnbF9jdl9mdW5jX19fdmFfY29weT15ZXMNCmVsc2UNCiAgZ2xfY3ZfZnVu Y19fX3ZhX2NvcHk9bm8NCmZpDQpybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNf b2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQNCmZpDQoNCiAgYXNfZWNob19uPSIkc2F2ZWRfYXNfZWNo b19uIg0KDQogICAgICBpZiB0ZXN0ICRnbF9jdl9mdW5jX19fdmFfY29weSA9IHllczsgdGhlbg0K DQokYXNfZWNobyAiI2RlZmluZSB2YV9jb3B5IF9fdmFfY29weSIgPj5jb25mZGVmcy5oDQoNCiAg ICAgIGVsc2UNCg0KDQokYXNfZWNobyAiI2RlZmluZSB2YV9jb3B5IGdsX3ZhX2NvcHkiID4+Y29u ZmRlZnMuaA0KDQogICAgICBmaQ0KICAgIGZpDQogIGZpDQoNCiAgIGlmIHRlc3QgLW4gIiRTVERB UkdfSCI7IHRoZW4NCiAgR0xfR0VORVJBVEVfU1REQVJHX0hfVFJVRT0NCiAgR0xfR0VORVJBVEVf U1REQVJHX0hfRkFMU0U9JyMnDQplbHNlDQogIEdMX0dFTkVSQVRFX1NUREFSR19IX1RSVUU9JyMn DQogIEdMX0dFTkVSQVRFX1NUREFSR19IX0ZBTFNFPQ0KZmkNCg0KDQoNCiAgIyBDb2RlIGZyb20g bW9kdWxlIHN0ZGJvb2w6DQoNCg0KDQogICMgRGVmaW5lIHR3byBhZGRpdGlvbmFsIHZhcmlhYmxl cyB1c2VkIGluIHRoZSBNYWtlZmlsZSBzdWJzdGl0dXRpb24uDQoNCiAgaWYgdGVzdCAiJGFjX2N2 X2hlYWRlcl9zdGRib29sX2giID0geWVzOyB0aGVuDQogICAgU1REQk9PTF9IPScnDQogIGVsc2UN CiAgICBTVERCT09MX0g9J3N0ZGJvb2wuaCcNCiAgZmkNCg0KICAgaWYgdGVzdCAtbiAiJFNUREJP T0xfSCI7IHRoZW4NCiAgR0xfR0VORVJBVEVfU1REQk9PTF9IX1RSVUU9DQogIEdMX0dFTkVSQVRF X1NUREJPT0xfSF9GQUxTRT0nIycNCmVsc2UNCiAgR0xfR0VORVJBVEVfU1REQk9PTF9IX1RSVUU9 JyMnDQogIEdMX0dFTkVSQVRFX1NUREJPT0xfSF9GQUxTRT0NCmZpDQoNCg0KICBpZiB0ZXN0ICIk YWNfY3ZfdHlwZV9fQm9vbCIgPSB5ZXM7IHRoZW4NCiAgICBIQVZFX19CT09MPTENCiAgZWxzZQ0K ICAgIEhBVkVfX0JPT0w9MA0KICBmaQ0KDQoNCiAgIyBDb2RlIGZyb20gbW9kdWxlIHN0ZGRlZjoN Cg0KDQoNCiAgU1REREVGX0g9DQogIGlmIHRlc3QgJGd0X2N2X2Nfd2NoYXJfdCA9IG5vOyB0aGVu DQogICAgSEFWRV9XQ0hBUl9UPTANCiAgICBTVERERUZfSD1zdGRkZWYuaA0KICBmaQ0KICB7ICRh c19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgTlVM TCBjYW4gYmUgdXNlZCBpbiBhcmJpdHJhcnkgZXhwcmVzc2lvbnMiID4mNQ0KJGFzX2VjaG9fbiAi Y2hlY2tpbmcgd2hldGhlciBOVUxMIGNhbiBiZSB1c2VkIGluIGFyYml0cmFyeSBleHByZXNzaW9u cy4uLiAiID4mNjsgfQ0KaWYgJHtnbF9jdl9kZWNsX251bGxfd29ya3MrOn0gZmFsc2U7IHRoZW4g Og0KICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNg0KZWxzZQ0KICBjYXQgY29uZmRlZnMuaCAt IDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0DQovKiBlbmQgY29uZmRlZnMuaC4gICovDQojaW5j bHVkZSA8c3RkZGVmLmg+DQogICAgICBpbnQgdGVzdFsyICogKHNpemVvZiBOVUxMID09IHNpemVv ZiAodm9pZCAqKSkgLTFdOw0KDQppbnQNCm1haW4gKCkNCnsNCg0KICA7DQogIHJldHVybiAwOw0K fQ0KX0FDRU9GDQppZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6DQogIGds X2N2X2RlY2xfbnVsbF93b3Jrcz15ZXMNCmVsc2UNCiAgZ2xfY3ZfZGVjbF9udWxsX3dvcmtzPW5v DQpmaQ0Kcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVz dC4kYWNfZXh0DQpmaQ0KeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBy ZXN1bHQ6ICRnbF9jdl9kZWNsX251bGxfd29ya3MiID4mNQ0KJGFzX2VjaG8gIiRnbF9jdl9kZWNs X251bGxfd29ya3MiID4mNjsgfQ0KICBpZiB0ZXN0ICRnbF9jdl9kZWNsX251bGxfd29ya3MgPSBu bzsgdGhlbg0KICAgIFJFUExBQ0VfTlVMTD0xDQogICAgU1REREVGX0g9c3RkZGVmLmgNCiAgZmkN Cg0KICAgaWYgdGVzdCAtbiAiJFNURERFRl9IIjsgdGhlbg0KICBHTF9HRU5FUkFURV9TVERERUZf SF9UUlVFPQ0KICBHTF9HRU5FUkFURV9TVERERUZfSF9GQUxTRT0nIycNCmVsc2UNCiAgR0xfR0VO RVJBVEVfU1REREVGX0hfVFJVRT0nIycNCiAgR0xfR0VORVJBVEVfU1REREVGX0hfRkFMU0U9DQpm aQ0KDQogIGlmIHRlc3QgLW4gIiRTVERERUZfSCI7IHRoZW4NCg0KDQoNCg0KDQoNCg0KDQogICAg IGlmIHRlc3QgJGdsX2N2X2hhdmVfaW5jbHVkZV9uZXh0ID0geWVzOyB0aGVuDQogICAgICAgZ2xf Y3ZfbmV4dF9zdGRkZWZfaD0nPCdzdGRkZWYuaCc+Jw0KICAgICBlbHNlDQogICAgICAgeyAkYXNf ZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBhYnNvbHV0ZSBuYW1l IG9mIDxzdGRkZWYuaD4iID4mNQ0KJGFzX2VjaG9fbiAiY2hlY2tpbmcgYWJzb2x1dGUgbmFtZSBv ZiA8c3RkZGVmLmg+Li4uICIgPiY2OyB9DQppZiAke2dsX2N2X25leHRfc3RkZGVmX2grOn0gZmFs c2U7IHRoZW4gOg0KICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNg0KZWxzZQ0KDQogICAgICAg ICAgICAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0DQovKiBl bmQgY29uZmRlZnMuaC4gICovDQojaW5jbHVkZSA8c3RkZGVmLmg+DQoNCl9BQ0VPRg0KICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg Y2FzZSAiJGhvc3Rfb3MiIGluDQogICAgICAgICAgICAgICAgIGFpeCopIGdsX2Fic25hbWVfY3Bw PSIkYWNfY3BwIC1DIiA7Ow0KICAgICAgICAgICAgICAgICAqKSAgICBnbF9hYnNuYW1lX2NwcD0i JGFjX2NwcCIgOzsNCiAgICAgICAgICAgICAgIGVzYWMNCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsX2N2X25leHRfc3RkZGVmX2g9 JyInYChldmFsICIkZ2xfYWJzbmFtZV9jcHAgY29uZnRlc3QuJGFjX2V4dCIpIDI+JjUgfA0KICAg ICAgICAgICAgICAgICAgc2VkIC1uICdcIy9zdGRkZWYuaCN7DQogICAgICAgICAgICAgICAgICAg IHMjLioiXCguKi9zdGRkZWYuaFwpIi4qI1wxIw0KICAgICAgICAgICAgICAgICAgICBzI14vW14v XSMvLyYjDQogICAgICAgICAgICAgICAgICAgIHANCiAgICAgICAgICAgICAgICAgICAgcQ0KICAg ICAgICAgICAgICAgICAgfSdgJyInDQoNCg0KZmkNCnsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xp bmVuby0kTElORU5PfTogcmVzdWx0OiAkZ2xfY3ZfbmV4dF9zdGRkZWZfaCIgPiY1DQokYXNfZWNo byAiJGdsX2N2X25leHRfc3RkZGVmX2giID4mNjsgfQ0KICAgICBmaQ0KICAgICBORVhUX1NURERF Rl9IPSRnbF9jdl9uZXh0X3N0ZGRlZl9oDQoNCiAgICAgaWYgdGVzdCAkZ2xfY3ZfaGF2ZV9pbmNs dWRlX25leHQgPSB5ZXMgfHwgdGVzdCAkZ2xfY3ZfaGF2ZV9pbmNsdWRlX25leHQgPSBidWdneTsg dGhlbg0KICAgICAgICMgSU5DTFVERV9ORVhUX0FTX0ZJUlNUX0RJUkVDVElWRT0naW5jbHVkZV9u ZXh0Jw0KICAgICAgIGdsX25leHRfYXNfZmlyc3RfZGlyZWN0aXZlPSc8J3N0ZGRlZi5oJz4nDQog ICAgIGVsc2UNCiAgICAgICAjIElOQ0xVREVfTkVYVF9BU19GSVJTVF9ESVJFQ1RJVkU9J2luY2x1 ZGUnDQogICAgICAgZ2xfbmV4dF9hc19maXJzdF9kaXJlY3RpdmU9JGdsX2N2X25leHRfc3RkZGVm X2gNCiAgICAgZmkNCiAgICAgTkVYVF9BU19GSVJTVF9ESVJFQ1RJVkVfU1REREVGX0g9JGdsX25l eHRfYXNfZmlyc3RfZGlyZWN0aXZlDQoNCg0KDQoNCiAgZmkNCg0KICAjIENvZGUgZnJvbSBtb2R1 bGUgc3RkaW50Og0KDQoNCg0KICBpZiB0ZXN0ICRhY19jdl90eXBlX2xvbmdfbG9uZ19pbnQgPSB5 ZXM7IHRoZW4NCiAgICBIQVZFX0xPTkdfTE9OR19JTlQ9MQ0KICBlbHNlDQogICAgSEFWRV9MT05H X0xPTkdfSU5UPTANCiAgZmkNCg0KDQogIGlmIHRlc3QgJGFjX2N2X3R5cGVfdW5zaWduZWRfbG9u Z19sb25nX2ludCA9IHllczsgdGhlbg0KICAgIEhBVkVfVU5TSUdORURfTE9OR19MT05HX0lOVD0x DQogIGVsc2UNCiAgICBIQVZFX1VOU0lHTkVEX0xPTkdfTE9OR19JTlQ9MA0KICBmaQ0KDQoNCg0K ICBpZiB0ZXN0ICRhY19jdl9oZWFkZXJfd2NoYXJfaCA9IHllczsgdGhlbg0KICAgIEhBVkVfV0NI QVJfSD0xDQogIGVsc2UNCiAgICBIQVZFX1dDSEFSX0g9MA0KICBmaQ0KDQoNCiAgICAgIGlmIHRl c3QgJGFjX2N2X2hlYWRlcl9pbnR0eXBlc19oID0geWVzOyB0aGVuDQogICAgSEFWRV9JTlRUWVBF U19IPTENCiAgZWxzZQ0KICAgIEhBVkVfSU5UVFlQRVNfSD0wDQogIGZpDQoNCg0KICAgICAgaWYg dGVzdCAkYWNfY3ZfaGVhZGVyX3N5c190eXBlc19oID0geWVzOyB0aGVuDQogICAgSEFWRV9TWVNf VFlQRVNfSD0xDQogIGVsc2UNCiAgICBIQVZFX1NZU19UWVBFU19IPTANCiAgZmkNCg0KDQoNCg0K DQoNCg0KDQoNCg0KDQogICAgIGlmIHRlc3QgJGdsX2N2X2hhdmVfaW5jbHVkZV9uZXh0ID0geWVz OyB0aGVuDQogICAgICAgZ2xfY3ZfbmV4dF9zdGRpbnRfaD0nPCdzdGRpbnQuaCc+Jw0KICAgICBl bHNlDQogICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVj a2luZyBhYnNvbHV0ZSBuYW1lIG9mIDxzdGRpbnQuaD4iID4mNQ0KJGFzX2VjaG9fbiAiY2hlY2tp bmcgYWJzb2x1dGUgbmFtZSBvZiA8c3RkaW50Lmg+Li4uICIgPiY2OyB9DQppZiAke2dsX2N2X25l eHRfc3RkaW50X2grOn0gZmFsc2U7IHRoZW4gOg0KICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4m Ng0KZWxzZQ0KDQogICAgICAgICAgICAgaWYgdGVzdCAkYWNfY3ZfaGVhZGVyX3N0ZGludF9oID0g eWVzOyB0aGVuDQoNCg0KICAgICAgICAgICAgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+ Y29uZnRlc3QuJGFjX2V4dA0KLyogZW5kIGNvbmZkZWZzLmguICAqLw0KI2luY2x1ZGUgPHN0ZGlu dC5oPg0KDQpfQUNFT0YNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGNhc2UgIiRob3N0X29zIiBpbg0KICAgICAgICAgICAgICAg ICBhaXgqKSBnbF9hYnNuYW1lX2NwcD0iJGFjX2NwcCAtQyIgOzsNCiAgICAgICAgICAgICAgICAg KikgICAgZ2xfYWJzbmFtZV9jcHA9IiRhY19jcHAiIDs7DQogICAgICAgICAgICAgICBlc2FjDQog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBnbF9jdl9uZXh0X3N0ZGludF9oPSciJ2AoZXZhbCAiJGdsX2Fic25hbWVfY3BwIGNvbmZ0ZXN0 LiRhY19leHQiKSAyPiY1IHwNCiAgICAgICAgICAgICAgICAgIHNlZCAtbiAnXCMvc3RkaW50Lmgj ew0KICAgICAgICAgICAgICAgICAgICBzIy4qIlwoLiovc3RkaW50LmhcKSIuKiNcMSMNCiAgICAg ICAgICAgICAgICAgICAgcyNeL1teL10jLy8mIw0KICAgICAgICAgICAgICAgICAgICBwDQogICAg ICAgICAgICAgICAgICAgIHENCiAgICAgICAgICAgICAgICAgIH0nYCciJw0KICAgICAgICAgIGVs c2UNCiAgICAgICAgICAgICAgIGdsX2N2X25leHRfc3RkaW50X2g9Jzwnc3RkaW50LmgnPicNCiAg ICAgICAgICAgICBmaQ0KDQoNCmZpDQp7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJ TkVOT306IHJlc3VsdDogJGdsX2N2X25leHRfc3RkaW50X2giID4mNQ0KJGFzX2VjaG8gIiRnbF9j dl9uZXh0X3N0ZGludF9oIiA+JjY7IH0NCiAgICAgZmkNCiAgICAgTkVYVF9TVERJTlRfSD0kZ2xf Y3ZfbmV4dF9zdGRpbnRfaA0KDQogICAgIGlmIHRlc3QgJGdsX2N2X2hhdmVfaW5jbHVkZV9uZXh0 ID0geWVzIHx8IHRlc3QgJGdsX2N2X2hhdmVfaW5jbHVkZV9uZXh0ID0gYnVnZ3k7IHRoZW4NCiAg ICAgICAjIElOQ0xVREVfTkVYVF9BU19GSVJTVF9ESVJFQ1RJVkU9J2luY2x1ZGVfbmV4dCcNCiAg ICAgICBnbF9uZXh0X2FzX2ZpcnN0X2RpcmVjdGl2ZT0nPCdzdGRpbnQuaCc+Jw0KICAgICBlbHNl DQogICAgICAgIyBJTkNMVURFX05FWFRfQVNfRklSU1RfRElSRUNUSVZFPSdpbmNsdWRlJw0KICAg ICAgIGdsX25leHRfYXNfZmlyc3RfZGlyZWN0aXZlPSRnbF9jdl9uZXh0X3N0ZGludF9oDQogICAg IGZpDQogICAgIE5FWFRfQVNfRklSU1RfRElSRUNUSVZFX1NURElOVF9IPSRnbF9uZXh0X2FzX2Zp cnN0X2RpcmVjdGl2ZQ0KDQoNCg0KDQogIGlmIHRlc3QgJGFjX2N2X2hlYWRlcl9zdGRpbnRfaCA9 IHllczsgdGhlbg0KICAgIEhBVkVfU1RESU5UX0g9MQ0KICBlbHNlDQogICAgSEFWRV9TVERJTlRf SD0wDQogIGZpDQoNCg0KICAgIGlmIHRlc3QgJGFjX2N2X2hlYWRlcl9zdGRpbnRfaCA9IHllczsg dGhlbg0KICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tp bmcgd2hldGhlciBzdGRpbnQuaCBjb25mb3JtcyB0byBDOTkiID4mNQ0KJGFzX2VjaG9fbiAiY2hl Y2tpbmcgd2hldGhlciBzdGRpbnQuaCBjb25mb3JtcyB0byBDOTkuLi4gIiA+JjY7IH0NCmlmICR7 Z2xfY3ZfaGVhZGVyX3dvcmtpbmdfc3RkaW50X2grOn0gZmFsc2U7IHRoZW4gOg0KICAkYXNfZWNo b19uICIoY2FjaGVkKSAiID4mNg0KZWxzZQ0KICBnbF9jdl9oZWFkZXJfd29ya2luZ19zdGRpbnRf aD1ubw0KICAgICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQN Ci8qIGVuZCBjb25mZGVmcy5oLiAgKi8NCg0KDQojZGVmaW5lIF9fU1REQ19MSU1JVF9NQUNST1Mg MSAvKiB0byBtYWtlIGl0IHdvcmsgYWxzbyBpbiBDKysgbW9kZSAqLw0KI2RlZmluZSBfX1NURENf Q09OU1RBTlRfTUFDUk9TIDEgLyogdG8gbWFrZSBpdCB3b3JrIGFsc28gaW4gQysrIG1vZGUgKi8N CiNkZWZpbmUgX0dMX0pVU1RfSU5DTFVERV9TWVNURU1fU1RESU5UX0ggMSAvKiB3b3JrIGlmIGJ1 aWxkIGlzbid0IGNsZWFuICovDQojaW5jbHVkZSA8c3RkaW50Lmg+DQovKiBEcmFnb25mbHkgZGVm aW5lcyBXQ0hBUl9NSU4sIFdDSEFSX01BWCBvbmx5IGluIDx3Y2hhci5oPi4gICovDQojaWYgIShk ZWZpbmVkIFdDSEFSX01JTiAmJiBkZWZpbmVkIFdDSEFSX01BWCkNCiNlcnJvciAiV0NIQVJfTUlO LCBXQ0hBUl9NQVggbm90IGRlZmluZWQgaW4gPHN0ZGludC5oPiINCiNlbmRpZg0KDQoNCiAgLyog QlNEL09TIDQuMC4xIGhhcyBhIGJ1ZzogPHN0ZGRlZi5oPiwgPHN0ZGlvLmg+IGFuZCA8dGltZS5o PiBtdXN0IGJlDQogICAgIGluY2x1ZGVkIGJlZm9yZSA8d2NoYXIuaD4uICAqLw0KICAjaW5jbHVk ZSA8c3RkZGVmLmg+DQogICNpbmNsdWRlIDxzaWduYWwuaD4NCiAgI2lmIEhBVkVfV0NIQVJfSA0K ICAjIGluY2x1ZGUgPHN0ZGlvLmg+DQogICMgaW5jbHVkZSA8dGltZS5oPg0KICAjIGluY2x1ZGUg PHdjaGFyLmg+DQogICNlbmRpZg0KDQoNCiNpZmRlZiBJTlQ4X01BWA0KaW50OF90IGExID0gSU5U OF9NQVg7DQppbnQ4X3QgYTFtaW4gPSBJTlQ4X01JTjsNCiNlbmRpZg0KI2lmZGVmIElOVDE2X01B WA0KaW50MTZfdCBhMiA9IElOVDE2X01BWDsNCmludDE2X3QgYTJtaW4gPSBJTlQxNl9NSU47DQoj ZW5kaWYNCiNpZmRlZiBJTlQzMl9NQVgNCmludDMyX3QgYTMgPSBJTlQzMl9NQVg7DQppbnQzMl90 IGEzbWluID0gSU5UMzJfTUlOOw0KI2VuZGlmDQojaWZkZWYgSU5UNjRfTUFYDQppbnQ2NF90IGE0 ID0gSU5UNjRfTUFYOw0KaW50NjRfdCBhNG1pbiA9IElOVDY0X01JTjsNCiNlbmRpZg0KI2lmZGVm IFVJTlQ4X01BWA0KdWludDhfdCBiMSA9IFVJTlQ4X01BWDsNCiNlbHNlDQp0eXBlZGVmIGludCBi MVsodW5zaWduZWQgY2hhcikgLTEgIT0gMjU1ID8gMSA6IC0xXTsNCiNlbmRpZg0KI2lmZGVmIFVJ TlQxNl9NQVgNCnVpbnQxNl90IGIyID0gVUlOVDE2X01BWDsNCiNlbmRpZg0KI2lmZGVmIFVJTlQz Ml9NQVgNCnVpbnQzMl90IGIzID0gVUlOVDMyX01BWDsNCiNlbmRpZg0KI2lmZGVmIFVJTlQ2NF9N QVgNCnVpbnQ2NF90IGI0ID0gVUlOVDY0X01BWDsNCiNlbmRpZg0KaW50X2xlYXN0OF90IGMxID0g SU5UOF9DICgweDdmKTsNCmludF9sZWFzdDhfdCBjMW1heCA9IElOVF9MRUFTVDhfTUFYOw0KaW50 X2xlYXN0OF90IGMxbWluID0gSU5UX0xFQVNUOF9NSU47DQppbnRfbGVhc3QxNl90IGMyID0gSU5U MTZfQyAoMHg3ZmZmKTsNCmludF9sZWFzdDE2X3QgYzJtYXggPSBJTlRfTEVBU1QxNl9NQVg7DQpp bnRfbGVhc3QxNl90IGMybWluID0gSU5UX0xFQVNUMTZfTUlOOw0KaW50X2xlYXN0MzJfdCBjMyA9 IElOVDMyX0MgKDB4N2ZmZmZmZmYpOw0KaW50X2xlYXN0MzJfdCBjM21heCA9IElOVF9MRUFTVDMy X01BWDsNCmludF9sZWFzdDMyX3QgYzNtaW4gPSBJTlRfTEVBU1QzMl9NSU47DQppbnRfbGVhc3Q2 NF90IGM0ID0gSU5UNjRfQyAoMHg3ZmZmZmZmZmZmZmZmZmZmKTsNCmludF9sZWFzdDY0X3QgYzRt YXggPSBJTlRfTEVBU1Q2NF9NQVg7DQppbnRfbGVhc3Q2NF90IGM0bWluID0gSU5UX0xFQVNUNjRf TUlOOw0KdWludF9sZWFzdDhfdCBkMSA9IFVJTlQ4X0MgKDB4ZmYpOw0KdWludF9sZWFzdDhfdCBk MW1heCA9IFVJTlRfTEVBU1Q4X01BWDsNCnVpbnRfbGVhc3QxNl90IGQyID0gVUlOVDE2X0MgKDB4 ZmZmZik7DQp1aW50X2xlYXN0MTZfdCBkMm1heCA9IFVJTlRfTEVBU1QxNl9NQVg7DQp1aW50X2xl YXN0MzJfdCBkMyA9IFVJTlQzMl9DICgweGZmZmZmZmZmKTsNCnVpbnRfbGVhc3QzMl90IGQzbWF4 ID0gVUlOVF9MRUFTVDMyX01BWDsNCnVpbnRfbGVhc3Q2NF90IGQ0ID0gVUlOVDY0X0MgKDB4ZmZm ZmZmZmZmZmZmZmZmZik7DQp1aW50X2xlYXN0NjRfdCBkNG1heCA9IFVJTlRfTEVBU1Q2NF9NQVg7 DQppbnRfZmFzdDhfdCBlMSA9IElOVF9GQVNUOF9NQVg7DQppbnRfZmFzdDhfdCBlMW1pbiA9IElO VF9GQVNUOF9NSU47DQppbnRfZmFzdDE2X3QgZTIgPSBJTlRfRkFTVDE2X01BWDsNCmludF9mYXN0 MTZfdCBlMm1pbiA9IElOVF9GQVNUMTZfTUlOOw0KaW50X2Zhc3QzMl90IGUzID0gSU5UX0ZBU1Qz Ml9NQVg7DQppbnRfZmFzdDMyX3QgZTNtaW4gPSBJTlRfRkFTVDMyX01JTjsNCmludF9mYXN0NjRf dCBlNCA9IElOVF9GQVNUNjRfTUFYOw0KaW50X2Zhc3Q2NF90IGU0bWluID0gSU5UX0ZBU1Q2NF9N SU47DQp1aW50X2Zhc3Q4X3QgZjEgPSBVSU5UX0ZBU1Q4X01BWDsNCnVpbnRfZmFzdDE2X3QgZjIg PSBVSU5UX0ZBU1QxNl9NQVg7DQp1aW50X2Zhc3QzMl90IGYzID0gVUlOVF9GQVNUMzJfTUFYOw0K dWludF9mYXN0NjRfdCBmNCA9IFVJTlRfRkFTVDY0X01BWDsNCiNpZmRlZiBJTlRQVFJfTUFYDQpp bnRwdHJfdCBnID0gSU5UUFRSX01BWDsNCmludHB0cl90IGdtaW4gPSBJTlRQVFJfTUlOOw0KI2Vu ZGlmDQojaWZkZWYgVUlOVFBUUl9NQVgNCnVpbnRwdHJfdCBoID0gVUlOVFBUUl9NQVg7DQojZW5k aWYNCmludG1heF90IGkgPSBJTlRNQVhfTUFYOw0KdWludG1heF90IGogPSBVSU5UTUFYX01BWDsN Cg0KI2luY2x1ZGUgPGxpbWl0cy5oPiAvKiBmb3IgQ0hBUl9CSVQgKi8NCiNkZWZpbmUgVFlQRV9N SU5JTVVNKHQpIFwNCiAgKCh0KSAoKHQpIDAgPCAodCkgLTEgPyAodCkgMCA6IH4gVFlQRV9NQVhJ TVVNICh0KSkpDQojZGVmaW5lIFRZUEVfTUFYSU1VTSh0KSBcDQogICgodCkgKCh0KSAwIDwgKHQp IC0xIFwNCiAgICAgICAgPyAodCkgLTEgXA0KICAgICAgICA6ICgoKCh0KSAxIDw8IChzaXplb2Yg KHQpICogQ0hBUl9CSVQgLSAyKSkgLSAxKSAqIDIgKyAxKSkpDQpzdHJ1Y3QgcyB7DQogIGludCBj aGVja19QVFJESUZGOg0KICAgICAgUFRSRElGRl9NSU4gPT0gVFlQRV9NSU5JTVVNIChwdHJkaWZm X3QpDQogICAgICAmJiBQVFJESUZGX01BWCA9PSBUWVBFX01BWElNVU0gKHB0cmRpZmZfdCkNCiAg ICAgID8gMSA6IC0xOw0KICAvKiBEZXRlY3QgYnVnIGluIEZyZWVCU0QgNi4wIC8gaWE2NC4gICov DQogIGludCBjaGVja19TSUdfQVRPTUlDOg0KICAgICAgU0lHX0FUT01JQ19NSU4gPT0gVFlQRV9N SU5JTVVNIChzaWdfYXRvbWljX3QpDQogICAgICAmJiBTSUdfQVRPTUlDX01BWCA9PSBUWVBFX01B WElNVU0gKHNpZ19hdG9taWNfdCkNCiAgICAgID8gMSA6IC0xOw0KICBpbnQgY2hlY2tfU0laRTog U0laRV9NQVggPT0gVFlQRV9NQVhJTVVNIChzaXplX3QpID8gMSA6IC0xOw0KICBpbnQgY2hlY2tf V0NIQVI6DQogICAgICBXQ0hBUl9NSU4gPT0gVFlQRV9NSU5JTVVNICh3Y2hhcl90KQ0KICAgICAg JiYgV0NIQVJfTUFYID09IFRZUEVfTUFYSU1VTSAod2NoYXJfdCkNCiAgICAgID8gMSA6IC0xOw0K ICAvKiBEZXRlY3QgYnVnIGluIG1pbmd3LiAgKi8NCiAgaW50IGNoZWNrX1dJTlQ6DQogICAgICBX SU5UX01JTiA9PSBUWVBFX01JTklNVU0gKHdpbnRfdCkNCiAgICAgICYmIFdJTlRfTUFYID09IFRZ UEVfTUFYSU1VTSAod2ludF90KQ0KICAgICAgPyAxIDogLTE7DQoNCiAgLyogRGV0ZWN0IGJ1Z3Mg aW4gZ2xpYmMgMi40IGFuZCBTb2xhcmlzIDEwIHN0ZGludC5oLCBhbW9uZyBvdGhlcnMuICAqLw0K ICBpbnQgY2hlY2tfVUlOVDhfQzoNCiAgICAgICAgKC0xIDwgVUlOVDhfQyAoMCkpID09ICgtMSA8 ICh1aW50X2xlYXN0OF90KSAwKSA/IDEgOiAtMTsNCiAgaW50IGNoZWNrX1VJTlQxNl9DOg0KICAg ICAgICAoLTEgPCBVSU5UMTZfQyAoMCkpID09ICgtMSA8ICh1aW50X2xlYXN0MTZfdCkgMCkgPyAx IDogLTE7DQoNCiAgLyogRGV0ZWN0IGJ1Z3MgaW4gT3BlbkJTRCAzLjkgc3RkaW50LmguICAqLw0K I2lmZGVmIFVJTlQ4X01BWA0KICBpbnQgY2hlY2tfdWludDg6ICh1aW50OF90KSAtMSA9PSBVSU5U OF9NQVggPyAxIDogLTE7DQojZW5kaWYNCiNpZmRlZiBVSU5UMTZfTUFYDQogIGludCBjaGVja191 aW50MTY6ICh1aW50MTZfdCkgLTEgPT0gVUlOVDE2X01BWCA/IDEgOiAtMTsNCiNlbmRpZg0KI2lm ZGVmIFVJTlQzMl9NQVgNCiAgaW50IGNoZWNrX3VpbnQzMjogKHVpbnQzMl90KSAtMSA9PSBVSU5U MzJfTUFYID8gMSA6IC0xOw0KI2VuZGlmDQojaWZkZWYgVUlOVDY0X01BWA0KICBpbnQgY2hlY2tf dWludDY0OiAodWludDY0X3QpIC0xID09IFVJTlQ2NF9NQVggPyAxIDogLTE7DQojZW5kaWYNCiAg aW50IGNoZWNrX3VpbnRfbGVhc3Q4OiAodWludF9sZWFzdDhfdCkgLTEgPT0gVUlOVF9MRUFTVDhf TUFYID8gMSA6IC0xOw0KICBpbnQgY2hlY2tfdWludF9sZWFzdDE2OiAodWludF9sZWFzdDE2X3Qp IC0xID09IFVJTlRfTEVBU1QxNl9NQVggPyAxIDogLTE7DQogIGludCBjaGVja191aW50X2xlYXN0 MzI6ICh1aW50X2xlYXN0MzJfdCkgLTEgPT0gVUlOVF9MRUFTVDMyX01BWCA/IDEgOiAtMTsNCiAg aW50IGNoZWNrX3VpbnRfbGVhc3Q2NDogKHVpbnRfbGVhc3Q2NF90KSAtMSA9PSBVSU5UX0xFQVNU NjRfTUFYID8gMSA6IC0xOw0KICBpbnQgY2hlY2tfdWludF9mYXN0ODogKHVpbnRfZmFzdDhfdCkg LTEgPT0gVUlOVF9GQVNUOF9NQVggPyAxIDogLTE7DQogIGludCBjaGVja191aW50X2Zhc3QxNjog KHVpbnRfZmFzdDE2X3QpIC0xID09IFVJTlRfRkFTVDE2X01BWCA/IDEgOiAtMTsNCiAgaW50IGNo ZWNrX3VpbnRfZmFzdDMyOiAodWludF9mYXN0MzJfdCkgLTEgPT0gVUlOVF9GQVNUMzJfTUFYID8g MSA6IC0xOw0KICBpbnQgY2hlY2tfdWludF9mYXN0NjQ6ICh1aW50X2Zhc3Q2NF90KSAtMSA9PSBV SU5UX0ZBU1Q2NF9NQVggPyAxIDogLTE7DQogIGludCBjaGVja191aW50cHRyOiAodWludHB0cl90 KSAtMSA9PSBVSU5UUFRSX01BWCA/IDEgOiAtMTsNCiAgaW50IGNoZWNrX3VpbnRtYXg6ICh1aW50 bWF4X3QpIC0xID09IFVJTlRNQVhfTUFYID8gMSA6IC0xOw0KICBpbnQgY2hlY2tfc2l6ZTogKHNp emVfdCkgLTEgPT0gU0laRV9NQVggPyAxIDogLTE7DQp9Ow0KDQppbnQNCm1haW4gKCkNCnsNCg0K ICA7DQogIHJldHVybiAwOw0KfQ0KX0FDRU9GDQppZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElO RU5PIjsgdGhlbiA6DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgaWYgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgPSB5ZXM7IHRoZW4gOg0KICAgICAg ICAgICAgICAgICBnbF9jdl9oZWFkZXJfd29ya2luZ19zdGRpbnRfaD15ZXMNCg0KZWxzZQ0KICBj YXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0DQovKiBlbmQgY29uZmRl ZnMuaC4gICovDQoNCg0KI2RlZmluZSBfX1NURENfTElNSVRfTUFDUk9TIDEgLyogdG8gbWFrZSBp dCB3b3JrIGFsc28gaW4gQysrIG1vZGUgKi8NCiNkZWZpbmUgX19TVERDX0NPTlNUQU5UX01BQ1JP UyAxIC8qIHRvIG1ha2UgaXQgd29yayBhbHNvIGluIEMrKyBtb2RlICovDQojZGVmaW5lIF9HTF9K VVNUX0lOQ0xVREVfU1lTVEVNX1NURElOVF9IIDEgLyogd29yayBpZiBidWlsZCBpc24ndCBjbGVh biAqLw0KI2luY2x1ZGUgPHN0ZGludC5oPg0KDQoNCiAgLyogQlNEL09TIDQuMC4xIGhhcyBhIGJ1 ZzogPHN0ZGRlZi5oPiwgPHN0ZGlvLmg+IGFuZCA8dGltZS5oPiBtdXN0IGJlDQogICAgIGluY2x1 ZGVkIGJlZm9yZSA8d2NoYXIuaD4uICAqLw0KICAjaW5jbHVkZSA8c3RkZGVmLmg+DQogICNpbmNs dWRlIDxzaWduYWwuaD4NCiAgI2lmIEhBVkVfV0NIQVJfSA0KICAjIGluY2x1ZGUgPHN0ZGlvLmg+ DQogICMgaW5jbHVkZSA8dGltZS5oPg0KICAjIGluY2x1ZGUgPHdjaGFyLmg+DQogICNlbmRpZg0K DQoNCiNpbmNsdWRlIDxzdGRpby5oPg0KI2luY2x1ZGUgPHN0cmluZy5oPg0KI2RlZmluZSBNVkFM KG1hY3JvKSBNVkFMMShtYWNybykNCiNkZWZpbmUgTVZBTDEoZXhwcmVzc2lvbikgI2V4cHJlc3Np b24NCnN0YXRpYyBjb25zdCBjaGFyICptYWNyb192YWx1ZXNbXSA9DQogIHsNCiNpZmRlZiBJTlQ4 X01BWA0KICAgIE1WQUwgKElOVDhfTUFYKSwNCiNlbmRpZg0KI2lmZGVmIElOVDE2X01BWA0KICAg IE1WQUwgKElOVDE2X01BWCksDQojZW5kaWYNCiNpZmRlZiBJTlQzMl9NQVgNCiAgICBNVkFMIChJ TlQzMl9NQVgpLA0KI2VuZGlmDQojaWZkZWYgSU5UNjRfTUFYDQogICAgTVZBTCAoSU5UNjRfTUFY KSwNCiNlbmRpZg0KI2lmZGVmIFVJTlQ4X01BWA0KICAgIE1WQUwgKFVJTlQ4X01BWCksDQojZW5k aWYNCiNpZmRlZiBVSU5UMTZfTUFYDQogICAgTVZBTCAoVUlOVDE2X01BWCksDQojZW5kaWYNCiNp ZmRlZiBVSU5UMzJfTUFYDQogICAgTVZBTCAoVUlOVDMyX01BWCksDQojZW5kaWYNCiNpZmRlZiBV SU5UNjRfTUFYDQogICAgTVZBTCAoVUlOVDY0X01BWCksDQojZW5kaWYNCiAgICBOVUxMDQogIH07 DQoNCmludA0KbWFpbiAoKQ0Kew0KDQogIGNvbnN0IGNoYXIgKiptdjsNCiAgZm9yIChtdiA9IG1h Y3JvX3ZhbHVlczsgKm12ICE9IE5VTEw7IG12KyspDQogICAgew0KICAgICAgY29uc3QgY2hhciAq dmFsdWUgPSAqbXY7DQogICAgICAvKiBUZXN0IHdoZXRoZXIgaXQgbG9va3MgbGlrZSBhIGNhc3Qg ZXhwcmVzc2lvbi4gICovDQogICAgICBpZiAoc3RybmNtcCAodmFsdWUsICIoKHVuc2lnbmVkIGlu dCkiLyopKi8sIDE1KSA9PSAwDQogICAgICAgICAgfHwgc3RybmNtcCAodmFsdWUsICIoKHVuc2ln bmVkIHNob3J0KSIvKikqLywgMTcpID09IDANCiAgICAgICAgICB8fCBzdHJuY21wICh2YWx1ZSwg IigodW5zaWduZWQgY2hhcikiLyopKi8sIDE2KSA9PSAwDQogICAgICAgICAgfHwgc3RybmNtcCAo dmFsdWUsICIoKGludCkiLyopKi8sIDYpID09IDANCiAgICAgICAgICB8fCBzdHJuY21wICh2YWx1 ZSwgIigoc2lnbmVkIHNob3J0KSIvKikqLywgMTUpID09IDANCiAgICAgICAgICB8fCBzdHJuY21w ICh2YWx1ZSwgIigoc2lnbmVkIGNoYXIpIi8qKSovLCAxNCkgPT0gMCkNCiAgICAgICAgcmV0dXJu IG12IC0gbWFjcm9fdmFsdWVzICsgMTsNCiAgICB9DQogIHJldHVybiAwOw0KDQogIDsNCiAgcmV0 dXJuIDA7DQp9DQpfQUNFT0YNCmlmIGFjX2ZuX2NfdHJ5X3J1biAiJExJTkVOTyI7IHRoZW4gOg0K ICBnbF9jdl9oZWFkZXJfd29ya2luZ19zdGRpbnRfaD15ZXMNCmZpDQpybSAtZiBjb3JlICouY29y ZSBjb3JlLmNvbmZ0ZXN0LiogZ21vbi5vdXQgYmIub3V0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCBcDQog IGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuYmVhbSBjb25mdGVzdC4kYWNfZXh0DQpmaQ0K DQoNCmZpDQpybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0 ZXN0LiRhY19leHQNCg0KZmkNCnsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5P fTogcmVzdWx0OiAkZ2xfY3ZfaGVhZGVyX3dvcmtpbmdfc3RkaW50X2giID4mNQ0KJGFzX2VjaG8g IiRnbF9jdl9oZWFkZXJfd29ya2luZ19zdGRpbnRfaCIgPiY2OyB9DQogIGZpDQogIGlmIHRlc3Qg IiRnbF9jdl9oZWFkZXJfd29ya2luZ19zdGRpbnRfaCIgPSB5ZXM7IHRoZW4NCiAgICBTVERJTlRf SD0NCiAgZWxzZQ0KICAgICAgICAgICAgZm9yIGFjX2hlYWRlciBpbiBzeXMvaW50dHlwZXMuaCBz eXMvYml0eXBlcy5oDQpkbyA6DQogIGFzX2FjX0hlYWRlcj1gJGFzX2VjaG8gImFjX2N2X2hlYWRl cl8kYWNfaGVhZGVyIiB8ICRhc190cl9zaGANCmFjX2ZuX2NfY2hlY2tfaGVhZGVyX21vbmdyZWwg IiRMSU5FTk8iICIkYWNfaGVhZGVyIiAiJGFzX2FjX0hlYWRlciIgIiRhY19pbmNsdWRlc19kZWZh dWx0Ig0KaWYgZXZhbCB0ZXN0IFwieFwkIiRhc19hY19IZWFkZXIiXCIgPSB4InllcyI7IHRoZW4g Og0KICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GDQojZGVmaW5lIGAkYXNfZWNobyAiSEFWRV8k YWNfaGVhZGVyIiB8ICRhc190cl9jcHBgIDENCl9BQ0VPRg0KDQpmaQ0KDQpkb25lDQoNCiAgICBp ZiB0ZXN0ICRhY19jdl9oZWFkZXJfc3lzX2ludHR5cGVzX2ggPSB5ZXM7IHRoZW4NCiAgICAgIEhB VkVfU1lTX0lOVFRZUEVTX0g9MQ0KICAgIGVsc2UNCiAgICAgIEhBVkVfU1lTX0lOVFRZUEVTX0g9 MA0KICAgIGZpDQoNCiAgICBpZiB0ZXN0ICRhY19jdl9oZWFkZXJfc3lzX2JpdHlwZXNfaCA9IHll czsgdGhlbg0KICAgICAgSEFWRV9TWVNfQklUWVBFU19IPTENCiAgICBlbHNlDQogICAgICBIQVZF X1NZU19CSVRZUEVTX0g9MA0KICAgIGZpDQoNCg0KDQoNCiAgaWYgdGVzdCAkQVBQTEVfVU5JVkVS U0FMX0JVSUxEID0gMDsgdGhlbg0KDQoNCiAgZm9yIGdsdHlwZSBpbiBwdHJkaWZmX3Qgc2l6ZV90 IDsgZG8NCiAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNr aW5nIGZvciBiaXQgc2l6ZSBvZiAkZ2x0eXBlIiA+JjUNCiRhc19lY2hvX24gImNoZWNraW5nIGZv ciBiaXQgc2l6ZSBvZiAkZ2x0eXBlLi4uICIgPiY2OyB9DQppZiBldmFsIFwke2dsX2N2X2JpdHNp emVvZl8ke2dsdHlwZX0rOn0gZmFsc2U7IHRoZW4gOg0KICAkYXNfZWNob19uICIoY2FjaGVkKSAi ID4mNg0KZWxzZQ0KICBpZiBhY19mbl9jX2NvbXB1dGVfaW50ICIkTElORU5PIiAic2l6ZW9mICgk Z2x0eXBlKSAqIENIQVJfQklUIiAicmVzdWx0IiAgICAgICAgIg0KICAvKiBCU0QvT1MgNC4wLjEg aGFzIGEgYnVnOiA8c3RkZGVmLmg+LCA8c3RkaW8uaD4gYW5kIDx0aW1lLmg+IG11c3QgYmUNCiAg ICAgaW5jbHVkZWQgYmVmb3JlIDx3Y2hhci5oPi4gICovDQogICNpbmNsdWRlIDxzdGRkZWYuaD4N CiAgI2luY2x1ZGUgPHNpZ25hbC5oPg0KICAjaWYgSEFWRV9XQ0hBUl9IDQogICMgaW5jbHVkZSA8 c3RkaW8uaD4NCiAgIyBpbmNsdWRlIDx0aW1lLmg+DQogICMgaW5jbHVkZSA8d2NoYXIuaD4NCiAg I2VuZGlmDQoNCiNpbmNsdWRlIDxsaW1pdHMuaD4iOyB0aGVuIDoNCg0KZWxzZQ0KICByZXN1bHQ9 dW5rbm93bg0KZmkNCg0KICAgICAgIGV2YWwgZ2xfY3ZfYml0c2l6ZW9mXyR7Z2x0eXBlfT1cJHJl c3VsdA0KDQpmaQ0KZXZhbCBhY19yZXM9XCRnbF9jdl9iaXRzaXplb2ZfJHtnbHR5cGV9DQoJICAg ICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNf cmVzIiA+JjUNCiRhc19lY2hvICIkYWNfcmVzIiA+JjY7IH0NCiAgICBldmFsIHJlc3VsdD1cJGds X2N2X2JpdHNpemVvZl8ke2dsdHlwZX0NCiAgICBpZiB0ZXN0ICRyZXN1bHQgPSB1bmtub3duOyB0 aGVuDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1 bHQ9MA0KICAgIGZpDQogICAgR0xUWVBFPWBlY2hvICIkZ2x0eXBlIiB8IHRyICdhYmNkZWZnaGlq a2xtbm9wcXJzdHV2d3h5eiAnICdBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWl8nYA0KICAgIGNh dCA+PmNvbmZkZWZzLmggPDxfQUNFT0YNCiNkZWZpbmUgQklUU0laRU9GXyR7R0xUWVBFfSAkcmVz dWx0DQpfQUNFT0YNCg0KICAgIGV2YWwgQklUU0laRU9GXyR7R0xUWVBFfT1cJHJlc3VsdA0KICBk b25lDQoNCg0KICBmaQ0KDQoNCiAgZm9yIGdsdHlwZSBpbiBzaWdfYXRvbWljX3Qgd2NoYXJfdCB3 aW50X3QgOyBkbw0KICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTog Y2hlY2tpbmcgZm9yIGJpdCBzaXplIG9mICRnbHR5cGUiID4mNQ0KJGFzX2VjaG9fbiAiY2hlY2tp bmcgZm9yIGJpdCBzaXplIG9mICRnbHR5cGUuLi4gIiA+JjY7IH0NCmlmIGV2YWwgXCR7Z2xfY3Zf Yml0c2l6ZW9mXyR7Z2x0eXBlfSs6fSBmYWxzZTsgdGhlbiA6DQogICRhc19lY2hvX24gIihjYWNo ZWQpICIgPiY2DQplbHNlDQogIGlmIGFjX2ZuX2NfY29tcHV0ZV9pbnQgIiRMSU5FTk8iICJzaXpl b2YgKCRnbHR5cGUpICogQ0hBUl9CSVQiICJyZXN1bHQiICAgICAgICAiDQogIC8qIEJTRC9PUyA0 LjAuMSBoYXMgYSBidWc6IDxzdGRkZWYuaD4sIDxzdGRpby5oPiBhbmQgPHRpbWUuaD4gbXVzdCBi ZQ0KICAgICBpbmNsdWRlZCBiZWZvcmUgPHdjaGFyLmg+LiAgKi8NCiAgI2luY2x1ZGUgPHN0ZGRl Zi5oPg0KICAjaW5jbHVkZSA8c2lnbmFsLmg+DQogICNpZiBIQVZFX1dDSEFSX0gNCiAgIyBpbmNs dWRlIDxzdGRpby5oPg0KICAjIGluY2x1ZGUgPHRpbWUuaD4NCiAgIyBpbmNsdWRlIDx3Y2hhci5o Pg0KICAjZW5kaWYNCg0KI2luY2x1ZGUgPGxpbWl0cy5oPiI7IHRoZW4gOg0KDQplbHNlDQogIHJl c3VsdD11bmtub3duDQpmaQ0KDQogICAgICAgZXZhbCBnbF9jdl9iaXRzaXplb2ZfJHtnbHR5cGV9 PVwkcmVzdWx0DQoNCmZpDQpldmFsIGFjX3Jlcz1cJGdsX2N2X2JpdHNpemVvZl8ke2dsdHlwZX0N CgkgICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6 ICRhY19yZXMiID4mNQ0KJGFzX2VjaG8gIiRhY19yZXMiID4mNjsgfQ0KICAgIGV2YWwgcmVzdWx0 PVwkZ2xfY3ZfYml0c2l6ZW9mXyR7Z2x0eXBlfQ0KICAgIGlmIHRlc3QgJHJlc3VsdCA9IHVua25v d247IHRoZW4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHJlc3VsdD0wDQogICAgZmkNCiAgICBHTFRZUEU9YGVjaG8gIiRnbHR5cGUiIHwgdHIgJ2FiY2Rl ZmdoaWprbG1ub3BxcnN0dXZ3eHl6ICcgJ0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaXydgDQog ICAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRg0KI2RlZmluZSBCSVRTSVpFT0ZfJHtHTFRZUEV9 ICRyZXN1bHQNCl9BQ0VPRg0KDQogICAgZXZhbCBCSVRTSVpFT0ZfJHtHTFRZUEV9PVwkcmVzdWx0 DQogIGRvbmUNCg0KDQoNCg0KICBmb3IgZ2x0eXBlIGluIHNpZ19hdG9taWNfdCB3Y2hhcl90IHdp bnRfdCA7IGRvDQogICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBj aGVja2luZyB3aGV0aGVyICRnbHR5cGUgaXMgc2lnbmVkIiA+JjUNCiRhc19lY2hvX24gImNoZWNr aW5nIHdoZXRoZXIgJGdsdHlwZSBpcyBzaWduZWQuLi4gIiA+JjY7IH0NCmlmIGV2YWwgXCR7Z2xf Y3ZfdHlwZV8ke2dsdHlwZX1fc2lnbmVkKzp9IGZhbHNlOyB0aGVuIDoNCiAgJGFzX2VjaG9fbiAi KGNhY2hlZCkgIiA+JjYNCmVsc2UNCiAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRl c3QuJGFjX2V4dA0KLyogZW5kIGNvbmZkZWZzLmguICAqLw0KDQogIC8qIEJTRC9PUyA0LjAuMSBo YXMgYSBidWc6IDxzdGRkZWYuaD4sIDxzdGRpby5oPiBhbmQgPHRpbWUuaD4gbXVzdCBiZQ0KICAg ICBpbmNsdWRlZCBiZWZvcmUgPHdjaGFyLmg+LiAgKi8NCiAgI2luY2x1ZGUgPHN0ZGRlZi5oPg0K ICAjaW5jbHVkZSA8c2lnbmFsLmg+DQogICNpZiBIQVZFX1dDSEFSX0gNCiAgIyBpbmNsdWRlIDxz dGRpby5oPg0KICAjIGluY2x1ZGUgPHRpbWUuaD4NCiAgIyBpbmNsdWRlIDx3Y2hhci5oPg0KICAj ZW5kaWYNCg0KICAgICAgICAgICAgaW50IHZlcmlmeVsyICogKCgkZ2x0eXBlKSAtMSA8ICgkZ2x0 eXBlKSAwKSAtIDFdOw0KaW50DQptYWluICgpDQp7DQoNCiAgOw0KICByZXR1cm4gMDsNCn0NCl9B Q0VPRg0KaWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOg0KICByZXN1bHQ9 eWVzDQplbHNlDQogIHJlc3VsdD1ubw0KZmkNCnJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0 ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dA0KICAgICAgIGV2YWwgZ2xfY3ZfdHlwZV8k e2dsdHlwZX1fc2lnbmVkPVwkcmVzdWx0DQoNCmZpDQpldmFsIGFjX3Jlcz1cJGdsX2N2X3R5cGVf JHtnbHR5cGV9X3NpZ25lZA0KCSAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8t JExJTkVOT306IHJlc3VsdDogJGFjX3JlcyIgPiY1DQokYXNfZWNobyAiJGFjX3JlcyIgPiY2OyB9 DQogICAgZXZhbCByZXN1bHQ9XCRnbF9jdl90eXBlXyR7Z2x0eXBlfV9zaWduZWQNCiAgICBHTFRZ UEU9YGVjaG8gJGdsdHlwZSB8IHRyICdhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5eiAnICdBQkNE RUZHSElKS0xNTk9QUVJTVFVWV1hZWl8nYA0KICAgIGlmIHRlc3QgIiRyZXN1bHQiID0geWVzOyB0 aGVuDQogICAgICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GDQojZGVmaW5lIEhBVkVfU0lHTkVE XyR7R0xUWVBFfSAxDQpfQUNFT0YNCg0KICAgICAgZXZhbCBIQVZFX1NJR05FRF8ke0dMVFlQRX09 MQ0KICAgIGVsc2UNCiAgICAgIGV2YWwgSEFWRV9TSUdORURfJHtHTFRZUEV9PTANCiAgICBmaQ0K ICBkb25lDQoNCg0KICBnbF9jdl90eXBlX3B0cmRpZmZfdF9zaWduZWQ9eWVzDQogIGdsX2N2X3R5 cGVfc2l6ZV90X3NpZ25lZD1ubw0KICBpZiB0ZXN0ICRBUFBMRV9VTklWRVJTQUxfQlVJTEQgPSAw OyB0aGVuDQoNCg0KICBmb3IgZ2x0eXBlIGluIHB0cmRpZmZfdCBzaXplX3QgOyBkbw0KICAgIHsg JGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRnbHR5 cGUgaW50ZWdlciBsaXRlcmFsIHN1ZmZpeCIgPiY1DQokYXNfZWNob19uICJjaGVja2luZyBmb3Ig JGdsdHlwZSBpbnRlZ2VyIGxpdGVyYWwgc3VmZml4Li4uICIgPiY2OyB9DQppZiBldmFsIFwke2ds X2N2X3R5cGVfJHtnbHR5cGV9X3N1ZmZpeCs6fSBmYWxzZTsgdGhlbiA6DQogICRhc19lY2hvX24g IihjYWNoZWQpICIgPiY2DQplbHNlDQogIGV2YWwgZ2xfY3ZfdHlwZV8ke2dsdHlwZX1fc3VmZml4 PW5vDQogICAgICAgZXZhbCByZXN1bHQ9XCRnbF9jdl90eXBlXyR7Z2x0eXBlfV9zaWduZWQNCiAg ICAgICBpZiB0ZXN0ICIkcmVzdWx0IiA9IHllczsgdGhlbg0KICAgICAgICAgZ2xzdWZ1PQ0KICAg ICAgIGVsc2UNCiAgICAgICAgIGdsc3VmdT11DQogICAgICAgZmkNCiAgICAgICBmb3IgZ2xzdWYg aW4gIiRnbHN1ZnUiICR7Z2xzdWZ1fWwgJHtnbHN1ZnV9bGwgJHtnbHN1ZnV9aTY0OyBkbw0KICAg ICAgICAgY2FzZSAkZ2xzdWYgaW4NCiAgICAgICAgICAgJycpICBnbHR5cGUxPSdpbnQnOzsNCiAg ICAgICAgICAgbCkgICBnbHR5cGUxPSdsb25nIGludCc7Ow0KICAgICAgICAgICBsbCkgIGdsdHlw ZTE9J2xvbmcgbG9uZyBpbnQnOzsNCiAgICAgICAgICAgaTY0KSBnbHR5cGUxPSdfX2ludDY0Jzs7 DQogICAgICAgICAgIHUpICAgZ2x0eXBlMT0ndW5zaWduZWQgaW50Jzs7DQogICAgICAgICAgIHVs KSAgZ2x0eXBlMT0ndW5zaWduZWQgbG9uZyBpbnQnOzsNCiAgICAgICAgICAgdWxsKSBnbHR5cGUx PSd1bnNpZ25lZCBsb25nIGxvbmcgaW50Jzs7DQogICAgICAgICAgIHVpNjQpZ2x0eXBlMT0ndW5z aWduZWQgX19pbnQ2NCc7Ow0KICAgICAgICAgZXNhYw0KICAgICAgICAgY2F0IGNvbmZkZWZzLmgg LSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dA0KLyogZW5kIGNvbmZkZWZzLmguICAqLw0KDQog IC8qIEJTRC9PUyA0LjAuMSBoYXMgYSBidWc6IDxzdGRkZWYuaD4sIDxzdGRpby5oPiBhbmQgPHRp bWUuaD4gbXVzdCBiZQ0KICAgICBpbmNsdWRlZCBiZWZvcmUgPHdjaGFyLmg+LiAgKi8NCiAgI2lu Y2x1ZGUgPHN0ZGRlZi5oPg0KICAjaW5jbHVkZSA8c2lnbmFsLmg+DQogICNpZiBIQVZFX1dDSEFS X0gNCiAgIyBpbmNsdWRlIDxzdGRpby5oPg0KICAjIGluY2x1ZGUgPHRpbWUuaD4NCiAgIyBpbmNs dWRlIDx3Y2hhci5oPg0KICAjZW5kaWYNCg0KICAgICAgICAgICAgICBleHRlcm4gJGdsdHlwZSBm b287DQogICAgICAgICAgICAgIGV4dGVybiAkZ2x0eXBlMSBmb287DQppbnQNCm1haW4gKCkNCnsN Cg0KICA7DQogIHJldHVybiAwOw0KfQ0KX0FDRU9GDQppZiBhY19mbl9jX3RyeV9jb21waWxlICIk TElORU5PIjsgdGhlbiA6DQogIGV2YWwgZ2xfY3ZfdHlwZV8ke2dsdHlwZX1fc3VmZml4PVwkZ2xz dWYNCmZpDQpybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0 ZXN0LiRhY19leHQNCiAgICAgICAgIGV2YWwgcmVzdWx0PVwkZ2xfY3ZfdHlwZV8ke2dsdHlwZX1f c3VmZml4DQogICAgICAgICB0ZXN0ICIkcmVzdWx0IiAhPSBubyAmJiBicmVhaw0KICAgICAgIGRv bmUNCmZpDQpldmFsIGFjX3Jlcz1cJGdsX2N2X3R5cGVfJHtnbHR5cGV9X3N1ZmZpeA0KCSAgICAg ICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX3Jl cyIgPiY1DQokYXNfZWNobyAiJGFjX3JlcyIgPiY2OyB9DQogICAgR0xUWVBFPWBlY2hvICRnbHR5 cGUgfCB0ciAnYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXogJyAnQUJDREVGR0hJSktMTU5PUFFS U1RVVldYWVpfJ2ANCiAgICBldmFsIHJlc3VsdD1cJGdsX2N2X3R5cGVfJHtnbHR5cGV9X3N1ZmZp eA0KICAgIHRlc3QgIiRyZXN1bHQiID0gbm8gJiYgcmVzdWx0PQ0KICAgIGV2YWwgJHtHTFRZUEV9 X1NVRkZJWD1cJHJlc3VsdA0KICAgIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YNCiNkZWZpbmUg JHtHTFRZUEV9X1NVRkZJWCAkcmVzdWx0DQpfQUNFT0YNCg0KICBkb25lDQoNCg0KICBmaQ0KDQoN CiAgZm9yIGdsdHlwZSBpbiBzaWdfYXRvbWljX3Qgd2NoYXJfdCB3aW50X3QgOyBkbw0KICAgIHsg JGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRnbHR5 cGUgaW50ZWdlciBsaXRlcmFsIHN1ZmZpeCIgPiY1DQokYXNfZWNob19uICJjaGVja2luZyBmb3Ig JGdsdHlwZSBpbnRlZ2VyIGxpdGVyYWwgc3VmZml4Li4uICIgPiY2OyB9DQppZiBldmFsIFwke2ds X2N2X3R5cGVfJHtnbHR5cGV9X3N1ZmZpeCs6fSBmYWxzZTsgdGhlbiA6DQogICRhc19lY2hvX24g IihjYWNoZWQpICIgPiY2DQplbHNlDQogIGV2YWwgZ2xfY3ZfdHlwZV8ke2dsdHlwZX1fc3VmZml4 PW5vDQogICAgICAgZXZhbCByZXN1bHQ9XCRnbF9jdl90eXBlXyR7Z2x0eXBlfV9zaWduZWQNCiAg ICAgICBpZiB0ZXN0ICIkcmVzdWx0IiA9IHllczsgdGhlbg0KICAgICAgICAgZ2xzdWZ1PQ0KICAg ICAgIGVsc2UNCiAgICAgICAgIGdsc3VmdT11DQogICAgICAgZmkNCiAgICAgICBmb3IgZ2xzdWYg aW4gIiRnbHN1ZnUiICR7Z2xzdWZ1fWwgJHtnbHN1ZnV9bGwgJHtnbHN1ZnV9aTY0OyBkbw0KICAg ICAgICAgY2FzZSAkZ2xzdWYgaW4NCiAgICAgICAgICAgJycpICBnbHR5cGUxPSdpbnQnOzsNCiAg ICAgICAgICAgbCkgICBnbHR5cGUxPSdsb25nIGludCc7Ow0KICAgICAgICAgICBsbCkgIGdsdHlw ZTE9J2xvbmcgbG9uZyBpbnQnOzsNCiAgICAgICAgICAgaTY0KSBnbHR5cGUxPSdfX2ludDY0Jzs7 DQogICAgICAgICAgIHUpICAgZ2x0eXBlMT0ndW5zaWduZWQgaW50Jzs7DQogICAgICAgICAgIHVs KSAgZ2x0eXBlMT0ndW5zaWduZWQgbG9uZyBpbnQnOzsNCiAgICAgICAgICAgdWxsKSBnbHR5cGUx PSd1bnNpZ25lZCBsb25nIGxvbmcgaW50Jzs7DQogICAgICAgICAgIHVpNjQpZ2x0eXBlMT0ndW5z aWduZWQgX19pbnQ2NCc7Ow0KICAgICAgICAgZXNhYw0KICAgICAgICAgY2F0IGNvbmZkZWZzLmgg LSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dA0KLyogZW5kIGNvbmZkZWZzLmguICAqLw0KDQog IC8qIEJTRC9PUyA0LjAuMSBoYXMgYSBidWc6IDxzdGRkZWYuaD4sIDxzdGRpby5oPiBhbmQgPHRp bWUuaD4gbXVzdCBiZQ0KICAgICBpbmNsdWRlZCBiZWZvcmUgPHdjaGFyLmg+LiAgKi8NCiAgI2lu Y2x1ZGUgPHN0ZGRlZi5oPg0KICAjaW5jbHVkZSA8c2lnbmFsLmg+DQogICNpZiBIQVZFX1dDSEFS X0gNCiAgIyBpbmNsdWRlIDxzdGRpby5oPg0KICAjIGluY2x1ZGUgPHRpbWUuaD4NCiAgIyBpbmNs dWRlIDx3Y2hhci5oPg0KICAjZW5kaWYNCg0KICAgICAgICAgICAgICBleHRlcm4gJGdsdHlwZSBm b287DQogICAgICAgICAgICAgIGV4dGVybiAkZ2x0eXBlMSBmb287DQppbnQNCm1haW4gKCkNCnsN Cg0KICA7DQogIHJldHVybiAwOw0KfQ0KX0FDRU9GDQppZiBhY19mbl9jX3RyeV9jb21waWxlICIk TElORU5PIjsgdGhlbiA6DQogIGV2YWwgZ2xfY3ZfdHlwZV8ke2dsdHlwZX1fc3VmZml4PVwkZ2xz dWYNCmZpDQpybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0 ZXN0LiRhY19leHQNCiAgICAgICAgIGV2YWwgcmVzdWx0PVwkZ2xfY3ZfdHlwZV8ke2dsdHlwZX1f c3VmZml4DQogICAgICAgICB0ZXN0ICIkcmVzdWx0IiAhPSBubyAmJiBicmVhaw0KICAgICAgIGRv bmUNCmZpDQpldmFsIGFjX3Jlcz1cJGdsX2N2X3R5cGVfJHtnbHR5cGV9X3N1ZmZpeA0KCSAgICAg ICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX3Jl cyIgPiY1DQokYXNfZWNobyAiJGFjX3JlcyIgPiY2OyB9DQogICAgR0xUWVBFPWBlY2hvICRnbHR5 cGUgfCB0ciAnYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXogJyAnQUJDREVGR0hJSktMTU5PUFFS U1RVVldYWVpfJ2ANCiAgICBldmFsIHJlc3VsdD1cJGdsX2N2X3R5cGVfJHtnbHR5cGV9X3N1ZmZp eA0KICAgIHRlc3QgIiRyZXN1bHQiID0gbm8gJiYgcmVzdWx0PQ0KICAgIGV2YWwgJHtHTFRZUEV9 X1NVRkZJWD1cJHJlc3VsdA0KICAgIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YNCiNkZWZpbmUg JHtHTFRZUEV9X1NVRkZJWCAkcmVzdWx0DQpfQUNFT0YNCg0KICBkb25lDQoNCg0KDQogICAgU1RE SU5UX0g9c3RkaW50LmgNCiAgZmkNCg0KICAgaWYgdGVzdCAtbiAiJFNURElOVF9IIjsgdGhlbg0K ICBHTF9HRU5FUkFURV9TVERJTlRfSF9UUlVFPQ0KICBHTF9HRU5FUkFURV9TVERJTlRfSF9GQUxT RT0nIycNCmVsc2UNCiAgR0xfR0VORVJBVEVfU1RESU5UX0hfVFJVRT0nIycNCiAgR0xfR0VORVJB VEVfU1RESU5UX0hfRkFMU0U9DQpmaQ0KDQoNCiAgIyBDb2RlIGZyb20gbW9kdWxlIHN0ZGlvOg0K DQoNCg0KDQoNCg0KDQoNCg0KDQoNCiAgICAgaWYgdGVzdCAkZ2xfY3ZfaGF2ZV9pbmNsdWRlX25l eHQgPSB5ZXM7IHRoZW4NCiAgICAgICBnbF9jdl9uZXh0X3N0ZGlvX2g9Jzwnc3RkaW8uaCc+Jw0K ICAgICBlbHNlDQogICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99 OiBjaGVja2luZyBhYnNvbHV0ZSBuYW1lIG9mIDxzdGRpby5oPiIgPiY1DQokYXNfZWNob19uICJj aGVja2luZyBhYnNvbHV0ZSBuYW1lIG9mIDxzdGRpby5oPi4uLiAiID4mNjsgfQ0KaWYgJHtnbF9j dl9uZXh0X3N0ZGlvX2grOn0gZmFsc2U7IHRoZW4gOg0KICAkYXNfZWNob19uICIoY2FjaGVkKSAi ID4mNg0KZWxzZQ0KDQogICAgICAgICAgICAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5j b25mdGVzdC4kYWNfZXh0DQovKiBlbmQgY29uZmRlZnMuaC4gICovDQojaW5jbHVkZSA8c3RkaW8u aD4NCg0KX0FDRU9GDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBjYXNlICIkaG9zdF9vcyIgaW4NCiAgICAgICAgICAgICAgICAg YWl4KikgZ2xfYWJzbmFtZV9jcHA9IiRhY19jcHAgLUMiIDs7DQogICAgICAgICAgICAgICAgICop ICAgIGdsX2Fic25hbWVfY3BwPSIkYWNfY3BwIiA7Ow0KICAgICAgICAgICAgICAgZXNhYw0KICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg Z2xfY3ZfbmV4dF9zdGRpb19oPSciJ2AoZXZhbCAiJGdsX2Fic25hbWVfY3BwIGNvbmZ0ZXN0LiRh Y19leHQiKSAyPiY1IHwNCiAgICAgICAgICAgICAgICAgIHNlZCAtbiAnXCMvc3RkaW8uaCN7DQog ICAgICAgICAgICAgICAgICAgIHMjLioiXCguKi9zdGRpby5oXCkiLiojXDEjDQogICAgICAgICAg ICAgICAgICAgIHMjXi9bXi9dIy8vJiMNCiAgICAgICAgICAgICAgICAgICAgcA0KICAgICAgICAg ICAgICAgICAgICBxDQogICAgICAgICAgICAgICAgICB9J2AnIicNCg0KDQpmaQ0KeyAkYXNfZWNo byAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRnbF9jdl9uZXh0X3N0ZGlv X2giID4mNQ0KJGFzX2VjaG8gIiRnbF9jdl9uZXh0X3N0ZGlvX2giID4mNjsgfQ0KICAgICBmaQ0K ICAgICBORVhUX1NURElPX0g9JGdsX2N2X25leHRfc3RkaW9faA0KDQogICAgIGlmIHRlc3QgJGds X2N2X2hhdmVfaW5jbHVkZV9uZXh0ID0geWVzIHx8IHRlc3QgJGdsX2N2X2hhdmVfaW5jbHVkZV9u ZXh0ID0gYnVnZ3k7IHRoZW4NCiAgICAgICAjIElOQ0xVREVfTkVYVF9BU19GSVJTVF9ESVJFQ1RJ VkU9J2luY2x1ZGVfbmV4dCcNCiAgICAgICBnbF9uZXh0X2FzX2ZpcnN0X2RpcmVjdGl2ZT0nPCdz dGRpby5oJz4nDQogICAgIGVsc2UNCiAgICAgICAjIElOQ0xVREVfTkVYVF9BU19GSVJTVF9ESVJF Q1RJVkU9J2luY2x1ZGUnDQogICAgICAgZ2xfbmV4dF9hc19maXJzdF9kaXJlY3RpdmU9JGdsX2N2 X25leHRfc3RkaW9faA0KICAgICBmaQ0KICAgICBORVhUX0FTX0ZJUlNUX0RJUkVDVElWRV9TVERJ T19IPSRnbF9uZXh0X2FzX2ZpcnN0X2RpcmVjdGl2ZQ0KDQoNCg0KDQogICAgICBHTlVMSUJfRlBS SU5URj0xDQogIEdOVUxJQl9QUklOVEY9MQ0KICBHTlVMSUJfVkZQUklOVEY9MQ0KICBHTlVMSUJf VlBSSU5URj0xDQogIEdOVUxJQl9GUFVUQz0xDQogIEdOVUxJQl9QVVRDPTENCiAgR05VTElCX1BV VENIQVI9MQ0KICBHTlVMSUJfRlBVVFM9MQ0KICBHTlVMSUJfUFVUUz0xDQogIEdOVUxJQl9GV1JJ VEU9MQ0KDQoNCg0KICAgIGZvciBnbF9mdW5jIGluIGRwcmludGYgZnB1cmdlIGZzZWVrbyBmdGVs bG8gZ2V0ZGVsaW0gZ2V0bGluZSBwb3BlbiByZW5hbWVhdCAgICAgc25wcmludGYgdG1wZmlsZSB2 ZHByaW50ZiB2c25wcmludGY7IGRvDQogICAgYXNfZ2xfU3ltYm9sPWAkYXNfZWNobyAiZ2xfY3Zf aGF2ZV9yYXdfZGVjbF8kZ2xfZnVuYyIgfCAkYXNfdHJfc2hgDQogICAgeyAkYXNfZWNobyAiJGFz X21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyICRnbF9mdW5jIGlzIGRl Y2xhcmVkIHdpdGhvdXQgYSBtYWNybyIgPiY1DQokYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVy ICRnbF9mdW5jIGlzIGRlY2xhcmVkIHdpdGhvdXQgYSBtYWNyby4uLiAiID4mNjsgfQ0KaWYgZXZh bCBcJHskYXNfZ2xfU3ltYm9sKzp9IGZhbHNlOyB0aGVuIDoNCiAgJGFzX2VjaG9fbiAiKGNhY2hl ZCkgIiA+JjYNCmVsc2UNCiAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFj X2V4dA0KLyogZW5kIGNvbmZkZWZzLmguICAqLw0KI2luY2x1ZGUgPHN0ZGlvLmg+DQoNCmludA0K bWFpbiAoKQ0Kew0KI3VuZGVmICRnbF9mdW5jDQogICh2b2lkKSAkZ2xfZnVuYzsNCiAgOw0KICBy ZXR1cm4gMDsNCn0NCl9BQ0VPRg0KaWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRo ZW4gOg0KICBldmFsICIkYXNfZ2xfU3ltYm9sPXllcyINCmVsc2UNCiAgZXZhbCAiJGFzX2dsX1N5 bWJvbD1ubyINCmZpDQpybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0 IGNvbmZ0ZXN0LiRhY19leHQNCmZpDQpldmFsIGFjX3Jlcz1cJCRhc19nbF9TeW1ib2wNCgkgICAg ICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19y ZXMiID4mNQ0KJGFzX2VjaG8gIiRhY19yZXMiID4mNjsgfQ0KICAgICBpZiBldmFsIHRlc3QgXCJ4 XCQiJGFzX2dsX1N5bWJvbCJcIiA9IHgieWVzIjsgdGhlbiA6DQogIGNhdCA+PmNvbmZkZWZzLmgg PDxfQUNFT0YNCiNkZWZpbmUgYCRhc19lY2hvICJIQVZFX1JBV19ERUNMXyRnbF9mdW5jIiB8ICRh c190cl9jcHBgIDENCl9BQ0VPRg0KDQogICAgICAgICAgICAgICAgICAgICBldmFsIGFjX2N2X2hh dmVfZGVjbF8kZ2xfZnVuYz15ZXMNCmZpDQogICAgICBkb25lDQoNCg0KICAjIENvZGUgZnJvbSBt b2R1bGUgc3RkbGliOg0KDQoNCg0KDQoNCg0KDQoNCg0KDQogICAgIGlmIHRlc3QgJGdsX2N2X2hh dmVfaW5jbHVkZV9uZXh0ID0geWVzOyB0aGVuDQogICAgICAgZ2xfY3ZfbmV4dF9zdGRsaWJfaD0n PCdzdGRsaWIuaCc+Jw0KICAgICBlbHNlDQogICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNf bGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBhYnNvbHV0ZSBuYW1lIG9mIDxzdGRsaWIuaD4iID4m NQ0KJGFzX2VjaG9fbiAiY2hlY2tpbmcgYWJzb2x1dGUgbmFtZSBvZiA8c3RkbGliLmg+Li4uICIg PiY2OyB9DQppZiAke2dsX2N2X25leHRfc3RkbGliX2grOn0gZmFsc2U7IHRoZW4gOg0KICAkYXNf ZWNob19uICIoY2FjaGVkKSAiID4mNg0KZWxzZQ0KDQogICAgICAgICAgICAgICBjYXQgY29uZmRl ZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0DQovKiBlbmQgY29uZmRlZnMuaC4gICov DQojaW5jbHVkZSA8c3RkbGliLmg+DQoNCl9BQ0VPRg0KICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAiJGhvc3Rfb3MiIGlu DQogICAgICAgICAgICAgICAgIGFpeCopIGdsX2Fic25hbWVfY3BwPSIkYWNfY3BwIC1DIiA7Ow0K ICAgICAgICAgICAgICAgICAqKSAgICBnbF9hYnNuYW1lX2NwcD0iJGFjX2NwcCIgOzsNCiAgICAg ICAgICAgICAgIGVzYWMNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGdsX2N2X25leHRfc3RkbGliX2g9JyInYChldmFsICIkZ2xfYWJz bmFtZV9jcHAgY29uZnRlc3QuJGFjX2V4dCIpIDI+JjUgfA0KICAgICAgICAgICAgICAgICAgc2Vk IC1uICdcIy9zdGRsaWIuaCN7DQogICAgICAgICAgICAgICAgICAgIHMjLioiXCguKi9zdGRsaWIu aFwpIi4qI1wxIw0KICAgICAgICAgICAgICAgICAgICBzI14vW14vXSMvLyYjDQogICAgICAgICAg ICAgICAgICAgIHANCiAgICAgICAgICAgICAgICAgICAgcQ0KICAgICAgICAgICAgICAgICAgfSdg JyInDQoNCg0KZmkNCnsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVz dWx0OiAkZ2xfY3ZfbmV4dF9zdGRsaWJfaCIgPiY1DQokYXNfZWNobyAiJGdsX2N2X25leHRfc3Rk bGliX2giID4mNjsgfQ0KICAgICBmaQ0KICAgICBORVhUX1NURExJQl9IPSRnbF9jdl9uZXh0X3N0 ZGxpYl9oDQoNCiAgICAgaWYgdGVzdCAkZ2xfY3ZfaGF2ZV9pbmNsdWRlX25leHQgPSB5ZXMgfHwg dGVzdCAkZ2xfY3ZfaGF2ZV9pbmNsdWRlX25leHQgPSBidWdneTsgdGhlbg0KICAgICAgICMgSU5D TFVERV9ORVhUX0FTX0ZJUlNUX0RJUkVDVElWRT0naW5jbHVkZV9uZXh0Jw0KICAgICAgIGdsX25l eHRfYXNfZmlyc3RfZGlyZWN0aXZlPSc8J3N0ZGxpYi5oJz4nDQogICAgIGVsc2UNCiAgICAgICAj IElOQ0xVREVfTkVYVF9BU19GSVJTVF9ESVJFQ1RJVkU9J2luY2x1ZGUnDQogICAgICAgZ2xfbmV4 dF9hc19maXJzdF9kaXJlY3RpdmU9JGdsX2N2X25leHRfc3RkbGliX2gNCiAgICAgZmkNCiAgICAg TkVYVF9BU19GSVJTVF9ESVJFQ1RJVkVfU1RETElCX0g9JGdsX25leHRfYXNfZmlyc3RfZGlyZWN0 aXZlDQoNCg0KDQoNCg0KDQogICAgZm9yIGdsX2Z1bmMgaW4gX0V4aXQgYXRvbGwgY2Fub25pY2Fs aXplX2ZpbGVfbmFtZSBnZXRsb2FkYXZnIGdldHN1Ym9wdCBncmFudHB0IG1rZHRlbXAgICAgIG1r b3N0ZW1wIG1rb3N0ZW1wcyBta3N0ZW1wIG1rc3RlbXBzIHB0c25hbWUgcmFuZG9tX3IgaW5pdHN0 YXRfciBzcmFuZG9tX3IgICAgIHNldHN0YXRlX3IgcmVhbHBhdGggcnBtYXRjaCBzZXRlbnYgc3Ry dG9kIHN0cnRvbGwgc3RydG91bGwgdW5sb2NrcHQgICAgIHVuc2V0ZW52OyBkbw0KICAgIGFzX2ds X1N5bWJvbD1gJGFzX2VjaG8gImdsX2N2X2hhdmVfcmF3X2RlY2xfJGdsX2Z1bmMiIHwgJGFzX3Ry X3NoYA0KICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tp bmcgd2hldGhlciAkZ2xfZnVuYyBpcyBkZWNsYXJlZCB3aXRob3V0IGEgbWFjcm8iID4mNQ0KJGFz X2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciAkZ2xfZnVuYyBpcyBkZWNsYXJlZCB3aXRob3V0IGEg bWFjcm8uLi4gIiA+JjY7IH0NCmlmIGV2YWwgXCR7JGFzX2dsX1N5bWJvbCs6fSBmYWxzZTsgdGhl biA6DQogICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2DQplbHNlDQogIGNhdCBjb25mZGVmcy5o IC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQNCi8qIGVuZCBjb25mZGVmcy5oLiAgKi8NCiNp bmNsdWRlIDxzdGRsaWIuaD4NCiNpZiBIQVZFX1NZU19MT0FEQVZHX0gNCiMgaW5jbHVkZSA8c3lz L2xvYWRhdmcuaD4NCiNlbmRpZg0KI2lmIEhBVkVfUkFORE9NX0gNCiMgaW5jbHVkZSA8cmFuZG9t Lmg+DQojZW5kaWYNCg0KaW50DQptYWluICgpDQp7DQojdW5kZWYgJGdsX2Z1bmMNCiAgKHZvaWQp ICRnbF9mdW5jOw0KICA7DQogIHJldHVybiAwOw0KfQ0KX0FDRU9GDQppZiBhY19mbl9jX3RyeV9j b21waWxlICIkTElORU5PIjsgdGhlbiA6DQogIGV2YWwgIiRhc19nbF9TeW1ib2w9eWVzIg0KZWxz ZQ0KICBldmFsICIkYXNfZ2xfU3ltYm9sPW5vIg0KZmkNCnJtIC1mIGNvcmUgY29uZnRlc3QuZXJy IGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dA0KZmkNCmV2YWwgYWNfcmVzPVwk JGFzX2dsX1N5bWJvbA0KCSAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJ TkVOT306IHJlc3VsdDogJGFjX3JlcyIgPiY1DQokYXNfZWNobyAiJGFjX3JlcyIgPiY2OyB9DQog ICAgIGlmIGV2YWwgdGVzdCBcInhcJCIkYXNfZ2xfU3ltYm9sIlwiID0geCJ5ZXMiOyB0aGVuIDoN CiAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRg0KI2RlZmluZSBgJGFzX2VjaG8gIkhBVkVfUkFX X0RFQ0xfJGdsX2Z1bmMiIHwgJGFzX3RyX2NwcGAgMQ0KX0FDRU9GDQoNCiAgICAgICAgICAgICAg ICAgICAgIGV2YWwgYWNfY3ZfaGF2ZV9kZWNsXyRnbF9mdW5jPXllcw0KZmkNCiAgICAgIGRvbmUN Cg0KDQogICMgQ29kZSBmcm9tIG1vZHVsZSBzdGRsaWItc2FmZXI6DQoNCg0KDQoNCg0KDQoNCg0K DQogIGdsX0xJQk9CSlM9IiRnbF9MSUJPQkpTIG1rc3RlbXAtc2FmZXIuJGFjX29iamV4dCINCg0K DQogICMgQ29kZSBmcm9tIG1vZHVsZSBzdHBjcHk6DQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoN Cg0KICBmb3IgYWNfZnVuYyBpbiBzdHBjcHkNCmRvIDoNCiAgYWNfZm5fY19jaGVja19mdW5jICIk TElORU5PIiAic3RwY3B5IiAiYWNfY3ZfZnVuY19zdHBjcHkiDQppZiB0ZXN0ICJ4JGFjX2N2X2Z1 bmNfc3RwY3B5IiA9IHh5ZXM7IHRoZW4gOg0KICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GDQoj ZGVmaW5lIEhBVkVfU1RQQ1BZIDENCl9BQ0VPRg0KDQplbHNlDQoNCiAgICBnbF9MSUJPQkpTPSIk Z2xfTElCT0JKUyAkYWNfZnVuYy4kYWNfb2JqZXh0Ig0KDQpmaQ0KZG9uZQ0KDQoNCiAgaWYgdGVz dCAkYWNfY3ZfZnVuY19zdHBjcHkgPSBubzsgdGhlbg0KICAgIEhBVkVfU1RQQ1BZPTANCg0KICA6 DQoNCiAgZmkNCg0KDQoNCg0KICBHTlVMSUJfU1RQQ1BZPTENCg0KDQoNCiRhc19lY2hvICIjZGVm aW5lIEdOVUxJQl9URVNUX1NUUENQWSAxIiA+PmNvbmZkZWZzLmgNCg0KDQoNCiAgIyBDb2RlIGZy b20gbW9kdWxlIHN0cG5jcHk6DQoNCg0KDQoNCg0KDQoNCg0KDQoNCiAgaWYgdGVzdCAkYWNfY3Zf ZnVuY19zdHBuY3B5ID0geWVzOyB0aGVuDQogICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGlu ZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3Igd29ya2luZyBzdHBuY3B5IiA+JjUNCiRhc19lY2hv X24gImNoZWNraW5nIGZvciB3b3JraW5nIHN0cG5jcHkuLi4gIiA+JjY7IH0NCmlmICR7Z2xfY3Zf ZnVuY19zdHBuY3B5Kzp9IGZhbHNlOyB0aGVuIDoNCiAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+ JjYNCmVsc2UNCg0KICAgICAgaWYgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgPSB5ZXM7IHRoZW4g Og0KICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0DQovKiBlbmQg Y29uZmRlZnMuaC4gICovDQoNCiNpbmNsdWRlIDxmZWF0dXJlcy5oPg0KI2lmZGVmIF9fR05VX0xJ QlJBUllfXw0KICBUaGFua3MgZm9yIHVzaW5nIEdOVQ0KI2VuZGlmDQoNCl9BQ0VPRg0KaWYgKGV2 YWwgIiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCIpIDI+JjUgfA0KICAkRUdSRVAgIlRoYW5rcyBm b3IgdXNpbmcgR05VIiA+L2Rldi9udWxsIDI+JjE7IHRoZW4gOg0KICBnbF9jdl9mdW5jX3N0cG5j cHk9eWVzDQplbHNlDQogIGdsX2N2X2Z1bmNfc3RwbmNweT1ubw0KZmkNCnJtIC1mIGNvbmZ0ZXN0 Kg0KDQoNCmVsc2UNCiAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4 dA0KLyogZW5kIGNvbmZkZWZzLmguICAqLw0KDQojaW5jbHVkZSA8c3RkbGliLmg+DQojaW5jbHVk ZSA8c3RyaW5nLmg+IC8qIGZvciBzdHJjcHkgKi8NCi8qIFRoZSBzdHBuY3B5IHByb3RvdHlwZSBp cyBtaXNzaW5nIGluIDxzdHJpbmcuaD4gb24gQUlYIDQuICAqLw0KI2lmICFIQVZFX0RFQ0xfU1RQ TkNQWQ0KZXh0ZXJuIGNoYXIgKnN0cG5jcHkgKGNoYXIgKmRlc3QsIGNvbnN0IGNoYXIgKnNyYywg c2l6ZV90IG4pOw0KI2VuZGlmDQppbnQgbWFpbiAoKQ0Kew0KICBpbnQgcmVzdWx0ID0gMDsNCiAg Y29uc3QgY2hhciAqc3JjID0gIkhlbGxvIjsNCiAgY2hhciBkZXN0WzEwXTsNCiAgLyogQUlYIDQu My4zIGFuZCBBSVggNS4xIHN0cG5jcHkoKSByZXR1cm5zIGRlc3QrMSBoZXJlLiAgKi8NCiAgew0K ICAgIHN0cmNweSAoZGVzdCwgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIpOw0KICAgIGlmIChz dHBuY3B5IChkZXN0LCBzcmMsIDIpICE9IGRlc3QgKyAyKQ0KICAgICAgcmVzdWx0IHw9IDE7DQog IH0NCiAgLyogQUlYIDQuMy4zIGFuZCBBSVggNS4xIHN0cG5jcHkoKSByZXR1cm5zIGRlc3QrNCBo ZXJlLiAgKi8NCiAgew0KICAgIHN0cmNweSAoZGVzdCwgIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3 NyIpOw0KICAgIGlmIChzdHBuY3B5IChkZXN0LCBzcmMsIDUpICE9IGRlc3QgKyA1KQ0KICAgICAg cmVzdWx0IHw9IDI7DQogIH0NCiAgLyogQUlYIDQuMy4zIGFuZCBBSVggNS4xIHN0cG5jcHkoKSBy ZXR1cm5zIGRlc3QrNiBoZXJlLiAgKi8NCiAgew0KICAgIHN0cmNweSAoZGVzdCwgIlwzNzdcMzc3 XDM3N1wzNzdcMzc3XDM3NyIpOw0KICAgIGlmIChzdHBuY3B5IChkZXN0LCBzcmMsIDcpICE9IGRl c3QgKyA1KQ0KICAgICAgcmVzdWx0IHw9IDQ7DQogIH0NCiAgcmV0dXJuIHJlc3VsdDsNCn0NCg0K X0FDRU9GDQppZiBhY19mbl9jX3RyeV9ydW4gIiRMSU5FTk8iOyB0aGVuIDoNCiAgZ2xfY3ZfZnVu Y19zdHBuY3B5PXllcw0KZWxzZQ0KICBnbF9jdl9mdW5jX3N0cG5jcHk9bm8NCmZpDQpybSAtZiBj b3JlICouY29yZSBjb3JlLmNvbmZ0ZXN0LiogZ21vbi5vdXQgYmIub3V0IGNvbmZ0ZXN0JGFjX2V4 ZWV4dCBcDQogIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuYmVhbSBjb25mdGVzdC4kYWNf ZXh0DQpmaQ0KDQoNCmZpDQp7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306 IHJlc3VsdDogJGdsX2N2X2Z1bmNfc3RwbmNweSIgPiY1DQokYXNfZWNobyAiJGdsX2N2X2Z1bmNf c3RwbmNweSIgPiY2OyB9DQogICAgaWYgdGVzdCAkZ2xfY3ZfZnVuY19zdHBuY3B5ID0geWVzOyB0 aGVuDQoNCiRhc19lY2hvICIjZGVmaW5lIEhBVkVfU1RQTkNQWSAxIiA+PmNvbmZkZWZzLmgNCg0K ICAgIGVsc2UNCiAgICAgIFJFUExBQ0VfU1RQTkNQWT0xDQoNCg0KDQoNCg0KDQoNCg0KICBnbF9M SUJPQkpTPSIkZ2xfTElCT0JKUyBzdHBuY3B5LiRhY19vYmpleHQiDQoNCg0KICA6DQoNCiAgICBm aQ0KICBlbHNlDQogICAgSEFWRV9TVFBOQ1BZPTANCg0KDQoNCg0KDQoNCg0KDQogIGdsX0xJQk9C SlM9IiRnbF9MSUJPQkpTIHN0cG5jcHkuJGFjX29iamV4dCINCg0KDQogIDoNCg0KICBmaQ0KDQoN Cg0KDQogIEdOVUxJQl9TVFBOQ1BZPTENCg0KDQoNCiRhc19lY2hvICIjZGVmaW5lIEdOVUxJQl9U RVNUX1NUUE5DUFkgMSIgPj5jb25mZGVmcy5oDQoNCg0KDQogICMgQ29kZSBmcm9tIG1vZHVsZSBz dHJkdXAtcG9zaXg6DQoNCg0KDQoNCiAgaWYgdGVzdCAkYWNfY3ZfZnVuY19zdHJkdXAgPSB5ZXM7 IHRoZW4NCiAgICBpZiB0ZXN0ICRnbF9jdl9mdW5jX21hbGxvY19wb3NpeCAhPSB5ZXM7IHRoZW4N CiAgICAgIFJFUExBQ0VfU1RSRFVQPTENCg0KDQoNCg0KDQoNCg0KDQogIGdsX0xJQk9CSlM9IiRn bF9MSUJPQkpTIHN0cmR1cC4kYWNfb2JqZXh0Ig0KDQogICAgICA6DQogICAgZmkNCiAgZWxzZQ0K DQoNCg0KDQoNCg0KDQoNCiAgZ2xfTElCT0JKUz0iJGdsX0xJQk9CSlMgc3RyZHVwLiRhY19vYmpl eHQiDQoNCiAgICA6DQogIGZpDQoNCiAgaWYgdGVzdCAkYWNfY3ZfaGF2ZV9kZWNsX3N0cmR1cCA9 IG5vOyB0aGVuDQogICAgSEFWRV9ERUNMX1NUUkRVUD0wDQogIGZpDQoNCg0KDQoNCiAgR05VTElC X1NUUkRVUD0xDQoNCg0KDQokYXNfZWNobyAiI2RlZmluZSBHTlVMSUJfVEVTVF9TVFJEVVAgMSIg Pj5jb25mZGVmcy5oDQoNCg0KDQogICMgQ29kZSBmcm9tIG1vZHVsZSBzdHJlcToNCiAgIyBDb2Rl IGZyb20gbW9kdWxlIHN0cmVycm9yOg0KDQoNCiAgaWYgdGVzdCAkUkVQTEFDRV9TVFJFUlJPUiA9 IDE7IHRoZW4NCg0KDQoNCg0KDQoNCg0KDQogIGdsX0xJQk9CSlM9IiRnbF9MSUJPQkpTIHN0cmVy cm9yLiRhY19vYmpleHQiDQoNCg0KY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRg0KI2RlZmluZSBS RVBMQUNFX1NUUkVSUk9SICRSRVBMQUNFX1NUUkVSUk9SDQpfQUNFT0YNCg0KICBmaQ0KDQoNCg0K DQogIEdOVUxJQl9TVFJFUlJPUj0xDQoNCg0KDQokYXNfZWNobyAiI2RlZmluZSBHTlVMSUJfVEVT VF9TVFJFUlJPUiAxIiA+PmNvbmZkZWZzLmgNCg0KDQoNCiAgIyBDb2RlIGZyb20gbW9kdWxlIHN0 cmZ0aW1lOg0KDQoNCg0KDQoNCg0KDQoNCg0KDQogIGdsX0xJQk9CSlM9IiRnbF9MSUJPQkpTIHN0 cmZ0aW1lLiRhY19vYmpleHQiDQoNCg0KICMgVGhpcyBkZWZpbmVzIChvciBub3QpIEhBVkVfVFpO QU1FIGFuZCBIQVZFX1RNX1pPTkUuDQoNCg0KDQoNCg0KDQoNCiRhc19lY2hvICIjZGVmaW5lIG15 X3N0cmZ0aW1lIG5zdHJmdGltZSIgPj5jb25mZGVmcy5oDQoNCg0KDQogICMgQ29kZSBmcm9tIG1v ZHVsZSBzdHJpY29udjoNCiAgaWYgdGVzdCAkZ2xfY29uZF9saWJ0b29sID0gZmFsc2U7IHRoZW4N CiAgICBnbF9sdGxpYmRlcHM9IiRnbF9sdGxpYmRlcHMgJExUTElCSUNPTlYiDQogICAgZ2xfbGli ZGVwcz0iJGdsX2xpYmRlcHMgJExJQklDT05WIg0KICBmaQ0KICAjIENvZGUgZnJvbSBtb2R1bGUg c3RyaW5nOg0KDQoNCg0KICAjIENvZGUgZnJvbSBtb2R1bGUgc3RybmR1cDoNCg0KDQoNCg0KDQoN CiAgaWYgdGVzdCAkYWNfY3ZfaGF2ZV9kZWNsX3N0cm5kdXAgPSBubzsgdGhlbg0KICAgIEhBVkVf REVDTF9TVFJORFVQPTANCiAgZmkNCg0KICBpZiB0ZXN0ICRhY19jdl9mdW5jX3N0cm5kdXAgPSB5 ZXM7IHRoZW4NCiAgICAjIEFJWCA0LjMuMywgQUlYIDUuMSBoYXZlIGEgZnVuY3Rpb24gdGhhdCBm YWlscyB0byBhZGQgdGhlIHRlcm1pbmF0aW5nICdcMCcuDQogICAgeyAkYXNfZWNobyAiJGFzX21l OiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3Igd29ya2luZyBzdHJuZHVwIiA+JjUN CiRhc19lY2hvX24gImNoZWNraW5nIGZvciB3b3JraW5nIHN0cm5kdXAuLi4gIiA+JjY7IH0NCmlm ICR7Z2xfY3ZfZnVuY19zdHJuZHVwX3dvcmtzKzp9IGZhbHNlOyB0aGVuIDoNCiAgJGFzX2VjaG9f biAiKGNhY2hlZCkgIiA+JjYNCmVsc2UNCiAgaWYgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgPSB5 ZXM7IHRoZW4gOg0KDQogICAgICAgICAgY2FzZSAkaG9zdF9vcyBpbg0KICAgICAgICAgICAgYWl4 IHwgYWl4WzMtNl0qKSBnbF9jdl9mdW5jX3N0cm5kdXBfd29ya3M9Imd1ZXNzaW5nIG5vIjs7DQog ICAgICAgICAgICAqKSAgICAgICAgICAgICAgIGdsX2N2X2Z1bmNfc3RybmR1cF93b3Jrcz0iZ3Vl c3NpbmcgeWVzIjs7DQogICAgICAgICAgZXNhYw0KDQplbHNlDQogIGNhdCBjb25mZGVmcy5oIC0g PDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQNCi8qIGVuZCBjb25mZGVmcy5oLiAgKi8NCg0KICAg ICAgICAgI2luY2x1ZGUgPHN0cmluZy5oPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgI2lu Y2x1ZGUgPHN0ZGxpYi5oPg0KaW50DQptYWluICgpDQp7DQoNCiNpZm5kZWYgSEFWRV9ERUNMX1NU Uk5EVVANCiAgZXh0ZXJuIGNoYXIgKnN0cm5kdXAgKGNvbnN0IGNoYXIgKiwgc2l6ZV90KTsNCiNl bmRpZg0KICBjaGFyICpzOw0KICBzID0gc3RybmR1cCAoInNvbWUgbG9uZ2VyIHN0cmluZyIsIDE1 KTsNCiAgZnJlZSAocyk7DQogIHMgPSBzdHJuZHVwICgic2hvcnRlciBzdHJpbmciLCAxMyk7DQog IHJldHVybiBzWzEzXSAhPSAnXDAnOw0KICA7DQogIHJldHVybiAwOw0KfQ0KX0FDRU9GDQppZiBh Y19mbl9jX3RyeV9ydW4gIiRMSU5FTk8iOyB0aGVuIDoNCiAgZ2xfY3ZfZnVuY19zdHJuZHVwX3dv cmtzPXllcw0KZWxzZQ0KICBnbF9jdl9mdW5jX3N0cm5kdXBfd29ya3M9bm8NCmZpDQpybSAtZiBj b3JlICouY29yZSBjb3JlLmNvbmZ0ZXN0LiogZ21vbi5vdXQgYmIub3V0IGNvbmZ0ZXN0JGFjX2V4 ZWV4dCBcDQogIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuYmVhbSBjb25mdGVzdC4kYWNf ZXh0DQpmaQ0KDQpmaQ0KeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBy ZXN1bHQ6ICRnbF9jdl9mdW5jX3N0cm5kdXBfd29ya3MiID4mNQ0KJGFzX2VjaG8gIiRnbF9jdl9m dW5jX3N0cm5kdXBfd29ya3MiID4mNjsgfQ0KICAgIGNhc2UgJGdsX2N2X2Z1bmNfc3RybmR1cF93 b3JrcyBpbg0KICAgICAgKm5vKQ0KICAgICAgICBSRVBMQUNFX1NUUk5EVVA9MQ0KDQoNCg0KDQoN Cg0KDQoNCiAgZ2xfTElCT0JKUz0iJGdsX0xJQk9CSlMgc3RybmR1cC4kYWNfb2JqZXh0Ig0KDQog ICAgICAgIDs7DQogICAgZXNhYw0KICBlbHNlDQoNCg0KDQoNCg0KDQoNCg0KICBnbF9MSUJPQkpT PSIkZ2xfTElCT0JKUyBzdHJuZHVwLiRhY19vYmpleHQiDQoNCiAgZmkNCg0KDQoNCg0KICBHTlVM SUJfU1RSTkRVUD0xDQoNCg0KDQokYXNfZWNobyAiI2RlZmluZSBHTlVMSUJfVEVTVF9TVFJORFVQ IDEiID4+Y29uZmRlZnMuaA0KDQoNCg0KICAjIENvZGUgZnJvbSBtb2R1bGUgc3RybmxlbjoNCg0K DQoNCg0KDQoNCiAgaWYgdGVzdCAkYWNfY3ZfaGF2ZV9kZWNsX3N0cm5sZW4gPSBubzsgdGhlbg0K ICAgIEhBVkVfREVDTF9TVFJOTEVOPTANCiAgZWxzZQ0KICAgICB7ICRhc19lY2hvICIkYXNfbWU6 JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciB3b3JraW5nIHN0cm5sZW4iID4mNQ0K JGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIHdvcmtpbmcgc3Rybmxlbi4uLiAiID4mNjsgfQ0KaWYg JHthY19jdl9mdW5jX3N0cm5sZW5fd29ya2luZys6fSBmYWxzZTsgdGhlbiA6DQogICRhc19lY2hv X24gIihjYWNoZWQpICIgPiY2DQplbHNlDQogIGlmIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0g eWVzOyB0aGVuIDoNCiAgIyBHdWVzcyBubyBvbiBBSVggc3lzdGVtcywgeWVzIG90aGVyd2lzZS4N CgkJY2FzZSAiJGhvc3Rfb3MiIGluDQoJCSAgYWl4KikgYWNfY3ZfZnVuY19zdHJubGVuX3dvcmtp bmc9bm87Ow0KCQkgICopICAgIGFjX2N2X2Z1bmNfc3Rybmxlbl93b3JraW5nPXllczs7DQoJCWVz YWMNCmVsc2UNCiAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dA0K LyogZW5kIGNvbmZkZWZzLmguICAqLw0KJGFjX2luY2x1ZGVzX2RlZmF1bHQNCmludA0KbWFpbiAo KQ0Kew0KDQojZGVmaW5lIFMgImZvb2JhciINCiNkZWZpbmUgU19MRU4gKHNpemVvZiBTIC0gMSkN Cg0KICAvKiBBdCBsZWFzdCBvbmUgaW1wbGVtZW50YXRpb24gaXMgYnVnZ3k6IHRoYXQgb2YgQUlY IDQuMyB3b3VsZA0KICAgICBnaXZlIHN0cm5sZW4gKFMsIDEpID09IDMuICAqLw0KDQogIGludCBp Ow0KICBmb3IgKGkgPSAwOyBpIDwgU19MRU4gKyAxOyArK2kpDQogICAgew0KICAgICAgaW50IGV4 cGVjdGVkID0gaSA8PSBTX0xFTiA/IGkgOiBTX0xFTjsNCiAgICAgIGlmIChzdHJubGVuIChTLCBp KSAhPSBleHBlY3RlZCkNCglyZXR1cm4gMTsNCiAgICB9DQogIHJldHVybiAwOw0KDQogIDsNCiAg cmV0dXJuIDA7DQp9DQpfQUNFT0YNCmlmIGFjX2ZuX2NfdHJ5X3J1biAiJExJTkVOTyI7IHRoZW4g Og0KICBhY19jdl9mdW5jX3N0cm5sZW5fd29ya2luZz15ZXMNCmVsc2UNCiAgYWNfY3ZfZnVuY19z dHJubGVuX3dvcmtpbmc9bm8NCmZpDQpybSAtZiBjb3JlICouY29yZSBjb3JlLmNvbmZ0ZXN0Liog Z21vbi5vdXQgYmIub3V0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCBcDQogIGNvbmZ0ZXN0LiRhY19vYmpl eHQgY29uZnRlc3QuYmVhbSBjb25mdGVzdC4kYWNfZXh0DQpmaQ0KDQpmaQ0KeyAkYXNfZWNobyAi JGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9mdW5jX3N0cm5sZW5f d29ya2luZyIgPiY1DQokYXNfZWNobyAiJGFjX2N2X2Z1bmNfc3Rybmxlbl93b3JraW5nIiA+JjY7 IH0NCnRlc3QgJGFjX2N2X2Z1bmNfc3Rybmxlbl93b3JraW5nID0gbm8gJiYNCg0KDQoNCg0KDQoN Cg0KICBnbF9MSUJPQkpTPSIkZ2xfTElCT0JKUyBzdHJubGVuLiRhY19vYmpleHQiDQoNCg0KICAg ICAgICBpZiB0ZXN0ICRhY19jdl9mdW5jX3N0cm5sZW5fd29ya2luZyA9IG5vOyB0aGVuDQogICAg ICBSRVBMQUNFX1NUUk5MRU49MQ0KICAgIGZpDQogIGZpDQogIGlmIHRlc3QgJEhBVkVfREVDTF9T VFJOTEVOID0gMCB8fCB0ZXN0ICRSRVBMQUNFX1NUUk5MRU4gPSAxOyB0aGVuDQoNCg0KDQoNCg0K DQoNCg0KICBnbF9MSUJPQkpTPSIkZ2xfTElCT0JKUyBzdHJubGVuLiRhY19vYmpleHQiDQoNCiAg ICA6DQogIGZpDQoNCg0KDQoNCiAgR05VTElCX1NUUk5MRU49MQ0KDQoNCg0KJGFzX2VjaG8gIiNk ZWZpbmUgR05VTElCX1RFU1RfU1RSTkxFTiAxIiA+PmNvbmZkZWZzLmgNCg0KDQoNCiAgIyBDb2Rl IGZyb20gbW9kdWxlIHN0cm5sZW4xOg0KICAjIENvZGUgZnJvbSBtb2R1bGUgc3Ryc2lnbmFsOg0K DQoNCg0KDQoNCg0KICBpZiB0ZXN0ICRhY19jdl9oYXZlX2RlY2xfc3Ryc2lnbmFsID0gbm87IHRo ZW4NCiAgICBIQVZFX0RFQ0xfU1RSU0lHTkFMPTANCiAgZmkNCg0KICBmb3IgYWNfZnVuYyBpbiBz dHJzaWduYWwNCmRvIDoNCiAgYWNfZm5fY19jaGVja19mdW5jICIkTElORU5PIiAic3Ryc2lnbmFs IiAiYWNfY3ZfZnVuY19zdHJzaWduYWwiDQppZiB0ZXN0ICJ4JGFjX2N2X2Z1bmNfc3Ryc2lnbmFs IiA9IHh5ZXM7IHRoZW4gOg0KICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GDQojZGVmaW5lIEhB VkVfU1RSU0lHTkFMIDENCl9BQ0VPRg0KDQpmaQ0KZG9uZQ0KDQogIGlmIHRlc3QgJGFjX2N2X2Z1 bmNfc3Ryc2lnbmFsID0geWVzOyB0aGVuDQogICAgICAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6 JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgc3Ryc2lnbmFsIGFsd2F5cyBy ZXR1cm5zIGEgc3RyaW5nIiA+JjUNCiRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgc3Ryc2ln bmFsIGFsd2F5cyByZXR1cm5zIGEgc3RyaW5nLi4uICIgPiY2OyB9DQppZiAke2dsX2N2X2Z1bmNf d29ya2luZ19zdHJzaWduYWwrOn0gZmFsc2U7IHRoZW4gOg0KICAkYXNfZWNob19uICIoY2FjaGVk KSAiID4mNg0KZWxzZQ0KICBpZiB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IHllczsgdGhlbiA6 DQogIGNhc2UgIiRob3N0X29zIiBpbg0KICAgICAgICAgICAgc29sYXJpcyogfCBhaXgqKSBnbF9j dl9mdW5jX3dvcmtpbmdfc3Ryc2lnbmFsPW5vOzsNCiAgICAgICAgICAgICopICAgICAgICAgICAg ICAgZ2xfY3ZfZnVuY193b3JraW5nX3N0cnNpZ25hbD0iZ3Vlc3NpbmcgeWVzIjs7DQogICAgICAg ICAgZXNhYw0KZWxzZQ0KICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNf ZXh0DQovKiBlbmQgY29uZmRlZnMuaC4gICovDQojaW5jbHVkZSA8c3RyaW5nLmg+DQojaW5jbHVk ZSA8dW5pc3RkLmg+IC8qIE5ldEJTRCA1LjAgZGVjbGFyZXMgaXQgaW4gd3JvbmcgaGVhZGVyLiAq Lw0KDQppbnQNCm1haW4gKCkNCnsNCmludCByZXN1bHQgPSAwOw0KICAgICAgICAgICAgICBjaGFy ICpzID0gc3Ryc2lnbmFsICgtMSk7DQogICAgICAgICAgICAgIGlmIChzID09IChjaGFyICopIDAp DQogICAgICAgICAgICAgICAgcmVzdWx0IHw9IDE7DQogICAgICAgICAgICAgIGlmIChzID09IChj aGFyICopIC0xKQ0KICAgICAgICAgICAgICAgIHJlc3VsdCB8PSAyOw0KICAgICAgICAgICAgICBy ZXR1cm4gcmVzdWx0Ow0KDQogIDsNCiAgcmV0dXJuIDA7DQp9DQpfQUNFT0YNCmlmIGFjX2ZuX2Nf dHJ5X3J1biAiJExJTkVOTyI7IHRoZW4gOg0KICBnbF9jdl9mdW5jX3dvcmtpbmdfc3Ryc2lnbmFs PXllcw0KZWxzZQ0KICBnbF9jdl9mdW5jX3dvcmtpbmdfc3Ryc2lnbmFsPW5vDQpmaQ0Kcm0gLWYg Y29yZSAqLmNvcmUgY29yZS5jb25mdGVzdC4qIGdtb24ub3V0IGJiLm91dCBjb25mdGVzdCRhY19l eGVleHQgXA0KICBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LmJlYW0gY29uZnRlc3QuJGFj X2V4dA0KZmkNCg0KZmkNCnsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTog cmVzdWx0OiAkZ2xfY3ZfZnVuY193b3JraW5nX3N0cnNpZ25hbCIgPiY1DQokYXNfZWNobyAiJGds X2N2X2Z1bmNfd29ya2luZ19zdHJzaWduYWwiID4mNjsgfQ0KICBlbHNlDQogICAgZ2xfY3ZfZnVu Y193b3JraW5nX3N0cnNpZ25hbD1ubw0KICBmaQ0KDQogIGlmIHRlc3QgIiRnbF9jdl9mdW5jX3dv cmtpbmdfc3Ryc2lnbmFsIiA9IG5vOyB0aGVuDQogICAgaWYgdGVzdCAkYWNfY3ZfZnVuY19zdHJz aWduYWwgPSB5ZXM7IHRoZW4NCiAgICAgIFJFUExBQ0VfU1RSU0lHTkFMPTENCiAgICBmaQ0KDQoN Cg0KDQoNCg0KDQoNCiAgZ2xfTElCT0JKUz0iJGdsX0xJQk9CSlMgc3Ryc2lnbmFsLiRhY19vYmpl eHQiDQoNCg0KDQogIGFjX2ZuX2NfY2hlY2tfZGVjbCAiJExJTkVOTyIgIl9zeXNfc2lnbGlzdCIg ImFjX2N2X2hhdmVfZGVjbF9fc3lzX3NpZ2xpc3QiICIjaW5jbHVkZSA8c2lnbmFsLmg+DQoiDQpp ZiB0ZXN0ICJ4JGFjX2N2X2hhdmVfZGVjbF9fc3lzX3NpZ2xpc3QiID0geHllczsgdGhlbiA6DQog IGFjX2hhdmVfZGVjbD0xDQplbHNlDQogIGFjX2hhdmVfZGVjbD0wDQpmaQ0KDQpjYXQgPj5jb25m ZGVmcy5oIDw8X0FDRU9GDQojZGVmaW5lIEhBVkVfREVDTF9fU1lTX1NJR0xJU1QgJGFjX2hhdmVf ZGVjbA0KX0FDRU9GDQoNCg0KICBmaQ0KDQoNCg0KDQogIEdOVUxJQl9TVFJTSUdOQUw9MQ0KDQoN Cg0KJGFzX2VjaG8gIiNkZWZpbmUgR05VTElCX1RFU1RfU1RSU0lHTkFMIDEiID4+Y29uZmRlZnMu aA0KDQoNCg0KICAjIENvZGUgZnJvbSBtb2R1bGUgc3Ryc3RyLXNpbXBsZToNCg0KDQoNCiAgaWYg dGVzdCAiJGdsX2N2X2Z1bmNfbWVtY2hyX3dvcmtzIiAhPSB5ZXM7IHRoZW4NCiAgICBSRVBMQUNF X1NUUlNUUj0xDQoNCg0KDQoNCg0KDQoNCg0KICBnbF9MSUJPQkpTPSIkZ2xfTElCT0JKUyBzdHJz dHIuJGFjX29iamV4dCINCg0KICBlbHNlDQogICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2Fz X2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciBzdHJzdHIgd29ya3MiID4mNQ0KJGFz X2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciBzdHJzdHIgd29ya3MuLi4gIiA+JjY7IH0NCmlmICR7 Z2xfY3ZfZnVuY19zdHJzdHJfd29ya3NfYWx3YXlzKzp9IGZhbHNlOyB0aGVuIDoNCiAgJGFzX2Vj aG9fbiAiKGNhY2hlZCkgIiA+JjYNCmVsc2UNCiAgaWYgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIg PSB5ZXM7IHRoZW4gOg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0DQovKiBlbmQg Y29uZmRlZnMuaC4gICovDQoNCiNpZmRlZiBfX0dOVV9MSUJSQVJZX18NCiAjaW5jbHVkZSA8ZmVh dHVyZXMuaD4NCiAjaWYgKChfX0dMSUJDX18gPT0gMiAmJiBfX0dMSUJDX01JTk9SX18gPiAxMikg fHwgKF9fR0xJQkNfXyA+IDIpKSBcDQogICAgIHx8IGRlZmluZWQgX19VQ0xJQkNfXw0KICBMdWNr eSB1c2VyDQogI2VuZGlmDQojZWxpZiBkZWZpbmVkIF9fQ1lHV0lOX18NCiAjaW5jbHVkZSA8Y3ln d2luL3ZlcnNpb24uaD4NCiAjaWYgQ1lHV0lOX1ZFUlNJT05fRExMX0NPTUJJTkVEID4gQ1lHV0lO X1ZFUlNJT05fRExMX01BS0VfQ09NQklORUQgKDEwMDcsIDcpDQogIEx1Y2t5IHVzZXINCiAjZW5k aWYNCiNlbHNlDQogIEx1Y2t5IHVzZXINCiNlbmRpZg0KDQpfQUNFT0YNCmlmIChldmFsICIkYWNf Y3BwIGNvbmZ0ZXN0LiRhY19leHQiKSAyPiY1IHwNCiAgJEVHUkVQICJMdWNreSB1c2VyIiA+L2Rl di9udWxsIDI+JjE7IHRoZW4gOg0KICBnbF9jdl9mdW5jX3N0cnN0cl93b3Jrc19hbHdheXM9eWVz DQplbHNlDQogIGdsX2N2X2Z1bmNfc3Ryc3RyX3dvcmtzX2Fsd2F5cz0iZ3Vlc3Npbmcgbm8iDQpm aQ0Kcm0gLWYgY29uZnRlc3QqDQoNCg0KZWxzZQ0KICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9G ID5jb25mdGVzdC4kYWNfZXh0DQovKiBlbmQgY29uZmRlZnMuaC4gICovDQoNCiNpbmNsdWRlIDxz dHJpbmcuaD4gLyogZm9yIHN0cnN0ciAqLw0KI2RlZmluZSBQICJfRUZfQkZfQkQiDQojZGVmaW5l IEhBWVNUQUNLICJGX0JEX0NFX0JEIiBQIFAgUCBQICJfQzNfODhfMjAiIFAgUCBQICJfQzNfQTdf MjAiIFANCiNkZWZpbmUgTkVFRExFIFAgUCBQIFAgUA0KDQppbnQNCm1haW4gKCkNCnsNCnJldHVy biAhIXN0cnN0ciAoSEFZU1RBQ0ssIE5FRURMRSk7DQoNCiAgOw0KICByZXR1cm4gMDsNCn0NCl9B Q0VPRg0KaWYgYWNfZm5fY190cnlfcnVuICIkTElORU5PIjsgdGhlbiA6DQogIGdsX2N2X2Z1bmNf c3Ryc3RyX3dvcmtzX2Fsd2F5cz15ZXMNCmVsc2UNCiAgZ2xfY3ZfZnVuY19zdHJzdHJfd29ya3Nf YWx3YXlzPW5vDQpmaQ0Kcm0gLWYgY29yZSAqLmNvcmUgY29yZS5jb25mdGVzdC4qIGdtb24ub3V0 IGJiLm91dCBjb25mdGVzdCRhY19leGVleHQgXA0KICBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0 ZXN0LmJlYW0gY29uZnRlc3QuJGFjX2V4dA0KZmkNCg0KDQpmaQ0KeyAkYXNfZWNobyAiJGFzX21l OiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRnbF9jdl9mdW5jX3N0cnN0cl93b3Jrc19h bHdheXMiID4mNQ0KJGFzX2VjaG8gIiRnbF9jdl9mdW5jX3N0cnN0cl93b3Jrc19hbHdheXMiID4m NjsgfQ0KICAgIGlmIHRlc3QgIiRnbF9jdl9mdW5jX3N0cnN0cl93b3Jrc19hbHdheXMiICE9IHll czsgdGhlbg0KICAgICAgUkVQTEFDRV9TVFJTVFI9MQ0KDQoNCg0KDQoNCg0KDQoNCiAgZ2xfTElC T0JKUz0iJGdsX0xJQk9CSlMgc3Ryc3RyLiRhY19vYmpleHQiDQoNCiAgICBmaQ0KICBmaQ0KDQoN Cg0KDQogIEdOVUxJQl9TVFJTVFI9MQ0KDQoNCg0KJGFzX2VjaG8gIiNkZWZpbmUgR05VTElCX1RF U1RfU1RSU1RSIDEiID4+Y29uZmRlZnMuaA0KDQoNCg0KICAjIENvZGUgZnJvbSBtb2R1bGUgc3Ry dG9kOg0KDQoNCg0KICBpZiB0ZXN0ICRhY19jdl9oYXZlX2RlY2xfc3RydG9kICE9IHllczsgdGhl bg0KICAgIEhBVkVfU1RSVE9EPTANCiAgZWxzZQ0KICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2Fz X2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciBzdHJ0b2Qgb2JleXMgQzk5IiA+JjUN CiRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgc3RydG9kIG9iZXlzIEM5OS4uLiAiID4mNjsg fQ0KaWYgJHtnbF9jdl9mdW5jX3N0cnRvZF93b3Jrcys6fSBmYWxzZTsgdGhlbiA6DQogICRhc19l Y2hvX24gIihjYWNoZWQpICIgPiY2DQplbHNlDQogIGlmIHRlc3QgIiRjcm9zc19jb21waWxpbmci ID0geWVzOyB0aGVuIDoNCiAgCSAgICAgICAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5j b25mdGVzdC4kYWNfZXh0DQovKiBlbmQgY29uZmRlZnMuaC4gICovDQoNCiNpbmNsdWRlIDxmZWF0 dXJlcy5oPg0KI2lmZGVmIF9fR05VX0xJQlJBUllfXw0KICNpZiAoKF9fR0xJQkNfXyA9PSAyICYm IF9fR0xJQkNfTUlOT1JfXyA+PSA4KSB8fCAoX19HTElCQ19fID4gMikpIFwNCiAgICAgJiYgIWRl ZmluZWQgX19VQ0xJQkNfXw0KICBMdWNreSB1c2VyDQogI2VuZGlmDQojZW5kaWYNCg0KX0FDRU9G DQppZiAoZXZhbCAiJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0IikgMj4mNSB8DQogICRFR1JFUCAi THVja3kgdXNlciIgPi9kZXYvbnVsbCAyPiYxOyB0aGVuIDoNCiAgZ2xfY3ZfZnVuY19zdHJ0b2Rf d29ya3M9eWVzDQplbHNlDQogIGdsX2N2X2Z1bmNfc3RydG9kX3dvcmtzPSJndWVzc2luZyBubyIN CmZpDQpybSAtZiBjb25mdGVzdCoNCg0KZWxzZQ0KICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9G ID5jb25mdGVzdC4kYWNfZXh0DQovKiBlbmQgY29uZmRlZnMuaC4gICovDQoNCiNpbmNsdWRlIDxz dGRsaWIuaD4NCiNpbmNsdWRlIDxtYXRoLmg+DQojaW5jbHVkZSA8ZXJybm8uaD4NCi8qIENvbXBh cmUgdHdvIG51bWJlcnMgd2l0aCA9PS4NCiAgIFRoaXMgaXMgYSBzZXBhcmF0ZSBmdW5jdGlvbiBi ZWNhdXNlIElSSVggNi41ICJjYyAtTyIgbWlzY29tcGlsZXMgYW4NCiAgICd4ID09IHgnIHRlc3Qu ICAqLw0Kc3RhdGljIGludA0KbnVtZXJpY19lcXVhbCAoZG91YmxlIHgsIGRvdWJsZSB5KQ0Kew0K ICByZXR1cm4geCA9PSB5Ow0KfQ0KDQppbnQNCm1haW4gKCkNCnsNCg0KICBpbnQgcmVzdWx0ID0g MDsNCiAgew0KICAgIC8qIEluIHNvbWUgb2xkIHZlcnNpb25zIG9mIExpbnV4ICgyMDAwIG9yIGJl Zm9yZSksIHN0cnRvZCBtaXMtcGFyc2VzDQogICAgICAgc3RyaW5ncyB3aXRoIGxlYWRpbmcgJysn LiAgKi8NCiAgICBjb25zdCBjaGFyICpzdHJpbmcgPSAiICs2OSI7DQogICAgY2hhciAqdGVybTsN CiAgICBkb3VibGUgdmFsdWUgPSBzdHJ0b2QgKHN0cmluZywgJnRlcm0pOw0KICAgIGlmICh2YWx1 ZSAhPSA2OSB8fCB0ZXJtICE9IChzdHJpbmcgKyA0KSkNCiAgICAgIHJlc3VsdCB8PSAxOw0KICB9 DQogIHsNCiAgICAvKiBVbmRlciBTb2xhcmlzIDIuNCwgc3RydG9kIHJldHVybnMgdGhlIHdyb25n IHZhbHVlIGZvciB0aGUNCiAgICAgICB0ZXJtaW5hdGluZyBjaGFyYWN0ZXIgdW5kZXIgc29tZSBj b25kaXRpb25zLiAgKi8NCiAgICBjb25zdCBjaGFyICpzdHJpbmcgPSAiTmFOIjsNCiAgICBjaGFy ICp0ZXJtOw0KICAgIHN0cnRvZCAoc3RyaW5nLCAmdGVybSk7DQogICAgaWYgKHRlcm0gIT0gc3Ry aW5nICYmICoodGVybSAtIDEpID09IDApDQogICAgICByZXN1bHQgfD0gMjsNCiAgfQ0KICB7DQog ICAgLyogT2xkZXIgZ2xpYmMgYW5kIEN5Z3dpbiBtaXMtcGFyc2UgIi0weCIuICAqLw0KICAgIGNv bnN0IGNoYXIgKnN0cmluZyA9ICItMHgiOw0KICAgIGNoYXIgKnRlcm07DQogICAgZG91YmxlIHZh bHVlID0gc3RydG9kIChzdHJpbmcsICZ0ZXJtKTsNCiAgICBkb3VibGUgemVybyA9IDAuMDsNCiAg ICBpZiAoMS4wIC8gdmFsdWUgIT0gLTEuMCAvIHplcm8gfHwgdGVybSAhPSAoc3RyaW5nICsgMikp DQogICAgICByZXN1bHQgfD0gNDsNCiAgfQ0KICB7DQogICAgLyogTWFueSBwbGF0Zm9ybXMgZG8g bm90IHBhcnNlIGhleCBmbG9hdHMuICAqLw0KICAgIGNvbnN0IGNoYXIgKnN0cmluZyA9ICIwWGFQ KzEiOw0KICAgIGNoYXIgKnRlcm07DQogICAgZG91YmxlIHZhbHVlID0gc3RydG9kIChzdHJpbmcs ICZ0ZXJtKTsNCiAgICBpZiAodmFsdWUgIT0gMjAuMCB8fCB0ZXJtICE9IChzdHJpbmcgKyA2KSkN CiAgICAgIHJlc3VsdCB8PSA4Ow0KICB9DQogIHsNCiAgICAvKiBNYW55IHBsYXRmb3JtcyBkbyBu b3QgcGFyc2UgaW5maW5pdGllcy4gIEhQLVVYIDExLjMxIHBhcnNlcyBpbmYsDQogICAgICAgYnV0 IG1pc3Rha2VubHkgc2V0cyBlcnJuby4gICovDQogICAgY29uc3QgY2hhciAqc3RyaW5nID0gImlu ZiI7DQogICAgY2hhciAqdGVybTsNCiAgICBkb3VibGUgdmFsdWU7DQogICAgZXJybm8gPSAwOw0K ICAgIHZhbHVlID0gc3RydG9kIChzdHJpbmcsICZ0ZXJtKTsNCiAgICBpZiAodmFsdWUgIT0gSFVH RV9WQUwgfHwgdGVybSAhPSAoc3RyaW5nICsgMykgfHwgZXJybm8pDQogICAgICByZXN1bHQgfD0g MTY7DQogIH0NCiAgew0KICAgIC8qIGdsaWJjIDIuNyBhbmQgY3lnd2luIDEuNS4yNCBtaXNwYXJz ZSAibmFuKCkiLiAgKi8NCiAgICBjb25zdCBjaGFyICpzdHJpbmcgPSAibmFuKCkiOw0KICAgIGNo YXIgKnRlcm07DQogICAgZG91YmxlIHZhbHVlID0gc3RydG9kIChzdHJpbmcsICZ0ZXJtKTsNCiAg ICBpZiAobnVtZXJpY19lcXVhbCAodmFsdWUsIHZhbHVlKSB8fCB0ZXJtICE9IChzdHJpbmcgKyA1 KSkNCiAgICAgIHJlc3VsdCB8PSAzMjsNCiAgfQ0KICB7DQogICAgLyogZGFyd2luIDEwLjYuMSBt aXNwYXJzZXMgIm5hbigiLiAgKi8NCiAgICBjb25zdCBjaGFyICpzdHJpbmcgPSAibmFuKCI7DQog ICAgY2hhciAqdGVybTsNCiAgICBkb3VibGUgdmFsdWUgPSBzdHJ0b2QgKHN0cmluZywgJnRlcm0p Ow0KICAgIGlmIChudW1lcmljX2VxdWFsICh2YWx1ZSwgdmFsdWUpIHx8IHRlcm0gIT0gKHN0cmlu ZyArIDMpKQ0KICAgICAgcmVzdWx0IHw9IDY0Ow0KICB9DQogIHJldHVybiByZXN1bHQ7DQoNCiAg Ow0KICByZXR1cm4gMDsNCn0NCl9BQ0VPRg0KaWYgYWNfZm5fY190cnlfcnVuICIkTElORU5PIjsg dGhlbiA6DQogIGdsX2N2X2Z1bmNfc3RydG9kX3dvcmtzPXllcw0KZWxzZQ0KICBnbF9jdl9mdW5j X3N0cnRvZF93b3Jrcz1ubw0KZmkNCnJtIC1mIGNvcmUgKi5jb3JlIGNvcmUuY29uZnRlc3QuKiBn bW9uLm91dCBiYi5vdXQgY29uZnRlc3QkYWNfZXhlZXh0IFwNCiAgY29uZnRlc3QuJGFjX29iamV4 dCBjb25mdGVzdC5iZWFtIGNvbmZ0ZXN0LiRhY19leHQNCmZpDQoNCmZpDQp7ICRhc19lY2hvICIk YXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGdsX2N2X2Z1bmNfc3RydG9kX3dv cmtzIiA+JjUNCiRhc19lY2hvICIkZ2xfY3ZfZnVuY19zdHJ0b2Rfd29ya3MiID4mNjsgfQ0KICAg IGlmIHRlc3QgIiRnbF9jdl9mdW5jX3N0cnRvZF93b3JrcyIgIT0geWVzOyB0aGVuDQogICAgICBS RVBMQUNFX1NUUlRPRD0xDQogICAgZmkNCiAgZmkNCiAgaWYgdGVzdCAkSEFWRV9TVFJUT0QgPSAw IHx8IHRlc3QgJFJFUExBQ0VfU1RSVE9EID0gMTsgdGhlbg0KDQoNCg0KDQoNCg0KDQoNCiAgZ2xf TElCT0JKUz0iJGdsX0xJQk9CSlMgc3RydG9kLiRhY19vYmpleHQiDQoNCg0KDQogIGlmIHRlc3Qg JGdsX2N2X2Z1bmNfbGRleHBfbm9fbGlibSA9IHllczsgdGhlbg0KDQokYXNfZWNobyAiI2RlZmlu ZSBIQVZFX0xERVhQX0lOX0xJQkMgMSIgPj5jb25mZGVmcy5oDQoNCiAgZmkNCg0KICBmaQ0KDQoN Cg0KDQogIEdOVUxJQl9TVFJUT0Q9MQ0KDQoNCg0KJGFzX2VjaG8gIiNkZWZpbmUgR05VTElCX1RF U1RfU1RSVE9EIDEiID4+Y29uZmRlZnMuaA0KDQoNCg0KICAjIENvZGUgZnJvbSBtb2R1bGUgc3Ry dG9pbWF4Og0KDQogIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hl Y2tpbmcgd2hldGhlciA8aW50dHlwZXMuaD4gZGVmaW5lcyBzdHJ0b2ltYXggYXMgYSBtYWNybyIg PiY1DQokYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIDxpbnR0eXBlcy5oPiBkZWZpbmVzIHN0 cnRvaW1heCBhcyBhIG1hY3JvLi4uICIgPiY2OyB9DQppZiAke2dsX2N2X2Z1bmNfc3RydG9pbWF4 X21hY3JvKzp9IGZhbHNlOyB0aGVuIDoNCiAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYNCmVs c2UNCiAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dA0KLyogZW5k IGNvbmZkZWZzLmguICAqLw0KI2luY2x1ZGUgPGludHR5cGVzLmg+DQojaWZkZWYgc3RydG9pbWF4 DQogaW50dHlwZXNfaF9kZWZpbmVzX3N0cnRvaW1heA0KI2VuZGlmDQpfQUNFT0YNCmlmIChldmFs ICIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQiKSAyPiY1IHwNCiAgJEVHUkVQICJpbnR0eXBlc19o X2RlZmluZXNfc3RydG9pbWF4IiA+L2Rldi9udWxsIDI+JjE7IHRoZW4gOg0KICBnbF9jdl9mdW5j X3N0cnRvaW1heF9tYWNybz15ZXMNCmVsc2UNCiAgZ2xfY3ZfZnVuY19zdHJ0b2ltYXhfbWFjcm89 bm8NCmZpDQpybSAtZiBjb25mdGVzdCoNCg0KZmkNCnsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xp bmVuby0kTElORU5PfTogcmVzdWx0OiAkZ2xfY3ZfZnVuY19zdHJ0b2ltYXhfbWFjcm8iID4mNQ0K JGFzX2VjaG8gIiRnbF9jdl9mdW5jX3N0cnRvaW1heF9tYWNybyIgPiY2OyB9DQoNCiAgaWYgdGVz dCAiJGdsX2N2X2Z1bmNfc3RydG9pbWF4X21hY3JvIiAhPSB5ZXM7IHRoZW4NCg0KDQoNCg0KDQoN Cg0KDQogIGZvciBhY19mdW5jIGluIHN0cnRvaW1heA0KZG8gOg0KICBhY19mbl9jX2NoZWNrX2Z1 bmMgIiRMSU5FTk8iICJzdHJ0b2ltYXgiICJhY19jdl9mdW5jX3N0cnRvaW1heCINCmlmIHRlc3Qg IngkYWNfY3ZfZnVuY19zdHJ0b2ltYXgiID0geHllczsgdGhlbiA6DQogIGNhdCA+PmNvbmZkZWZz LmggPDxfQUNFT0YNCiNkZWZpbmUgSEFWRV9TVFJUT0lNQVggMQ0KX0FDRU9GDQoNCmVsc2UNCg0K ICAgIGdsX0xJQk9CSlM9IiRnbF9MSUJPQkpTICRhY19mdW5jLiRhY19vYmpleHQiDQoNCmZpDQpk b25lDQoNCg0KICAgIGlmIHRlc3QgJGFjX2N2X2Z1bmNfc3RydG9pbWF4ID0gbm87IHRoZW4NCg0K ICBhY19mbl9jX2NoZWNrX2RlY2wgIiRMSU5FTk8iICJzdHJ0b2xsIiAiYWNfY3ZfaGF2ZV9kZWNs X3N0cnRvbGwiICIkYWNfaW5jbHVkZXNfZGVmYXVsdCINCmlmIHRlc3QgIngkYWNfY3ZfaGF2ZV9k ZWNsX3N0cnRvbGwiID0geHllczsgdGhlbiA6DQogIGFjX2hhdmVfZGVjbD0xDQplbHNlDQogIGFj X2hhdmVfZGVjbD0wDQpmaQ0KDQpjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GDQojZGVmaW5lIEhB VkVfREVDTF9TVFJUT0xMICRhY19oYXZlX2RlY2wNCl9BQ0VPRg0KDQoNCg0KICAgIGZpDQogIGZp DQoNCg0KDQoNCiAgR05VTElCX1NUUlRPSU1BWD0xDQoNCg0KICAjIENvZGUgZnJvbSBtb2R1bGUg c3RydG9sOg0KDQoNCg0KDQoNCg0KDQoNCg0KICBmb3IgYWNfZnVuYyBpbiBzdHJ0b2wNCmRvIDoN CiAgYWNfZm5fY19jaGVja19mdW5jICIkTElORU5PIiAic3RydG9sIiAiYWNfY3ZfZnVuY19zdHJ0 b2wiDQppZiB0ZXN0ICJ4JGFjX2N2X2Z1bmNfc3RydG9sIiA9IHh5ZXM7IHRoZW4gOg0KICBjYXQg Pj5jb25mZGVmcy5oIDw8X0FDRU9GDQojZGVmaW5lIEhBVkVfU1RSVE9MIDENCl9BQ0VPRg0KDQpl bHNlDQoNCiAgICBnbF9MSUJPQkpTPSIkZ2xfTElCT0JKUyAkYWNfZnVuYy4kYWNfb2JqZXh0Ig0K DQpmaQ0KZG9uZQ0KDQoNCg0KICAjIENvZGUgZnJvbSBtb2R1bGUgc3RydG9sbDoNCg0KDQoNCiAg aWYgdGVzdCAiJGFjX2N2X3R5cGVfbG9uZ19sb25nX2ludCIgPSB5ZXM7IHRoZW4NCg0KDQoNCg0K DQoNCg0KDQogIGZvciBhY19mdW5jIGluIHN0cnRvbGwNCmRvIDoNCiAgYWNfZm5fY19jaGVja19m dW5jICIkTElORU5PIiAic3RydG9sbCIgImFjX2N2X2Z1bmNfc3RydG9sbCINCmlmIHRlc3QgIngk YWNfY3ZfZnVuY19zdHJ0b2xsIiA9IHh5ZXM7IHRoZW4gOg0KICBjYXQgPj5jb25mZGVmcy5oIDw8 X0FDRU9GDQojZGVmaW5lIEhBVkVfU1RSVE9MTCAxDQpfQUNFT0YNCg0KZWxzZQ0KDQogICAgZ2xf TElCT0JKUz0iJGdsX0xJQk9CSlMgJGFjX2Z1bmMuJGFjX29iamV4dCINCg0KZmkNCmRvbmUNCg0K DQogICAgaWYgdGVzdCAkYWNfY3ZfZnVuY19zdHJ0b2xsID0gbm87IHRoZW4NCiAgICAgIEhBVkVf U1RSVE9MTD0wDQoNCiAgOg0KDQogICAgZmkNCiAgZmkNCg0KDQoNCg0KICBHTlVMSUJfU1RSVE9M TD0xDQoNCg0KDQokYXNfZWNobyAiI2RlZmluZSBHTlVMSUJfVEVTVF9TVFJUT0xMIDEiID4+Y29u ZmRlZnMuaA0KDQoNCg0KICAjIENvZGUgZnJvbSBtb2R1bGUgc3RydG91bDoNCg0KDQoNCg0KDQoN Cg0KDQoNCiAgZm9yIGFjX2Z1bmMgaW4gc3RydG91bA0KZG8gOg0KICBhY19mbl9jX2NoZWNrX2Z1 bmMgIiRMSU5FTk8iICJzdHJ0b3VsIiAiYWNfY3ZfZnVuY19zdHJ0b3VsIg0KaWYgdGVzdCAieCRh Y19jdl9mdW5jX3N0cnRvdWwiID0geHllczsgdGhlbiA6DQogIGNhdCA+PmNvbmZkZWZzLmggPDxf QUNFT0YNCiNkZWZpbmUgSEFWRV9TVFJUT1VMIDENCl9BQ0VPRg0KDQplbHNlDQoNCiAgICBnbF9M SUJPQkpTPSIkZ2xfTElCT0JKUyAkYWNfZnVuYy4kYWNfb2JqZXh0Ig0KDQpmaQ0KZG9uZQ0KDQoN Cg0KICAjIENvZGUgZnJvbSBtb2R1bGUgc3RydG91bGw6DQoNCg0KDQogIGlmIHRlc3QgIiRhY19j dl90eXBlX3Vuc2lnbmVkX2xvbmdfbG9uZ19pbnQiID0geWVzOyB0aGVuDQoNCg0KDQoNCg0KDQoN Cg0KICBmb3IgYWNfZnVuYyBpbiBzdHJ0b3VsbA0KZG8gOg0KICBhY19mbl9jX2NoZWNrX2Z1bmMg IiRMSU5FTk8iICJzdHJ0b3VsbCIgImFjX2N2X2Z1bmNfc3RydG91bGwiDQppZiB0ZXN0ICJ4JGFj X2N2X2Z1bmNfc3RydG91bGwiID0geHllczsgdGhlbiA6DQogIGNhdCA+PmNvbmZkZWZzLmggPDxf QUNFT0YNCiNkZWZpbmUgSEFWRV9TVFJUT1VMTCAxDQpfQUNFT0YNCg0KZWxzZQ0KDQogICAgZ2xf TElCT0JKUz0iJGdsX0xJQk9CSlMgJGFjX2Z1bmMuJGFjX29iamV4dCINCg0KZmkNCmRvbmUNCg0K DQogICAgaWYgdGVzdCAkYWNfY3ZfZnVuY19zdHJ0b3VsbCA9IG5vOyB0aGVuDQogICAgICBIQVZF X1NUUlRPVUxMPTANCg0KICA6DQoNCiAgICBmaQ0KICBmaQ0KDQoNCg0KDQogIEdOVUxJQl9TVFJU T1VMTD0xDQoNCg0KDQokYXNfZWNobyAiI2RlZmluZSBHTlVMSUJfVEVTVF9TVFJUT1VMTCAxIiA+ PmNvbmZkZWZzLmgNCg0KDQoNCiAgIyBDb2RlIGZyb20gbW9kdWxlIHN0cnRvdW1heDoNCg0KICB7 ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIg PGludHR5cGVzLmg+IGRlZmluZXMgc3RydG91bWF4IGFzIGEgbWFjcm8iID4mNQ0KJGFzX2VjaG9f biAiY2hlY2tpbmcgd2hldGhlciA8aW50dHlwZXMuaD4gZGVmaW5lcyBzdHJ0b3VtYXggYXMgYSBt YWNyby4uLiAiID4mNjsgfQ0KaWYgJHtnbF9jdl9mdW5jX3N0cnRvdW1heF9tYWNybys6fSBmYWxz ZTsgdGhlbiA6DQogICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2DQplbHNlDQogIGNhdCBjb25m ZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQNCi8qIGVuZCBjb25mZGVmcy5oLiAg Ki8NCiNpbmNsdWRlIDxpbnR0eXBlcy5oPg0KI2lmZGVmIHN0cnRvdW1heA0KIGludHR5cGVzX2hf ZGVmaW5lc19zdHJ0b3VtYXgNCiNlbmRpZg0KX0FDRU9GDQppZiAoZXZhbCAiJGFjX2NwcCBjb25m dGVzdC4kYWNfZXh0IikgMj4mNSB8DQogICRFR1JFUCAiaW50dHlwZXNfaF9kZWZpbmVzX3N0cnRv dW1heCIgPi9kZXYvbnVsbCAyPiYxOyB0aGVuIDoNCiAgZ2xfY3ZfZnVuY19zdHJ0b3VtYXhfbWFj cm89eWVzDQplbHNlDQogIGdsX2N2X2Z1bmNfc3RydG91bWF4X21hY3JvPW5vDQpmaQ0Kcm0gLWYg Y29uZnRlc3QqDQoNCmZpDQp7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306 IHJlc3VsdDogJGdsX2N2X2Z1bmNfc3RydG91bWF4X21hY3JvIiA+JjUNCiRhc19lY2hvICIkZ2xf Y3ZfZnVuY19zdHJ0b3VtYXhfbWFjcm8iID4mNjsgfQ0KDQogIGlmIHRlc3QgIiRnbF9jdl9mdW5j X3N0cnRvdW1heF9tYWNybyIgIT0geWVzOyB0aGVuDQoNCg0KDQoNCg0KDQoNCg0KICBmb3IgYWNf ZnVuYyBpbiBzdHJ0b3VtYXgNCmRvIDoNCiAgYWNfZm5fY19jaGVja19mdW5jICIkTElORU5PIiAi c3RydG91bWF4IiAiYWNfY3ZfZnVuY19zdHJ0b3VtYXgiDQppZiB0ZXN0ICJ4JGFjX2N2X2Z1bmNf c3RydG91bWF4IiA9IHh5ZXM7IHRoZW4gOg0KICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GDQoj ZGVmaW5lIEhBVkVfU1RSVE9VTUFYIDENCl9BQ0VPRg0KDQplbHNlDQoNCiAgICBnbF9MSUJPQkpT PSIkZ2xfTElCT0JKUyAkYWNfZnVuYy4kYWNfb2JqZXh0Ig0KDQpmaQ0KZG9uZQ0KDQoNCiAgICBp ZiB0ZXN0ICRhY19jdl9mdW5jX3N0cnRvdW1heCA9IG5vOyB0aGVuDQoNCiAgYWNfZm5fY19jaGVj a19kZWNsICIkTElORU5PIiAic3RydG91bGwiICJhY19jdl9oYXZlX2RlY2xfc3RydG91bGwiICIk YWNfaW5jbHVkZXNfZGVmYXVsdCINCmlmIHRlc3QgIngkYWNfY3ZfaGF2ZV9kZWNsX3N0cnRvdWxs IiA9IHh5ZXM7IHRoZW4gOg0KICBhY19oYXZlX2RlY2w9MQ0KZWxzZQ0KICBhY19oYXZlX2RlY2w9 MA0KZmkNCg0KY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRg0KI2RlZmluZSBIQVZFX0RFQ0xfU1RS VE9VTEwgJGFjX2hhdmVfZGVjbA0KX0FDRU9GDQoNCg0KDQogICAgZmkNCiAgZmkNCg0KDQoNCg0K ICBHTlVMSUJfU1RSVE9VTUFYPTENCg0KDQogICMgQ29kZSBmcm9tIG1vZHVsZSBzeW1saW5rOg0K DQoNCg0KICAgICAgICBpZiB0ZXN0ICRhY19jdl9mdW5jX3N5bWxpbmsgPSBubzsgdGhlbg0KICAg IEhBVkVfU1lNTElOSz0wDQoNCg0KDQoNCg0KDQoNCg0KICBnbF9MSUJPQkpTPSIkZ2xfTElCT0JK UyBzeW1saW5rLiRhY19vYmpleHQiDQoNCiAgZWxzZQ0KICAgIHsgJGFzX2VjaG8gIiRhc19tZTok e2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciBzeW1saW5rIGhhbmRsZXMgdHJh aWxpbmcgc2xhc2ggY29ycmVjdGx5IiA+JjUNCiRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIg c3ltbGluayBoYW5kbGVzIHRyYWlsaW5nIHNsYXNoIGNvcnJlY3RseS4uLiAiID4mNjsgfQ0KaWYg JHtnbF9jdl9mdW5jX3N5bWxpbmtfd29ya3MrOn0gZmFsc2U7IHRoZW4gOg0KICAkYXNfZWNob19u ICIoY2FjaGVkKSAiID4mNg0KZWxzZQ0KICBpZiB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IHll czsgdGhlbiA6DQogIGdsX2N2X2Z1bmNfc3ltbGlua193b3Jrcz0iZ3Vlc3Npbmcgbm8iDQplbHNl DQogIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQNCi8qIGVuZCBj b25mZGVmcy5oLiAgKi8NCiNpbmNsdWRlIDx1bmlzdGQuaD4NCg0KaW50DQptYWluICgpDQp7DQpp bnQgcmVzdWx0ID0gMDsNCiAgICAgICAgICAgICBpZiAoIXN5bWxpbmsgKCJhIiwgImNvbmZ0ZXN0 LmxpbmsvIikpDQogICAgICAgICAgICAgICByZXN1bHQgfD0gMTsNCiAgICAgICAgICAgICBpZiAo c3ltbGluayAoImNvbmZ0ZXN0LmYiLCAiY29uZnRlc3QubG5rMiIpKQ0KICAgICAgICAgICAgICAg cmVzdWx0IHw9IDI7DQogICAgICAgICAgICAgZWxzZSBpZiAoIXN5bWxpbmsgKCJhIiwgImNvbmZ0 ZXN0LmxuazIvIikpDQogICAgICAgICAgICAgICByZXN1bHQgfD0gNDsNCiAgICAgICAgICAgICBy ZXR1cm4gcmVzdWx0Ow0KDQogIDsNCiAgcmV0dXJuIDA7DQp9DQpfQUNFT0YNCmlmIGFjX2ZuX2Nf dHJ5X3J1biAiJExJTkVOTyI7IHRoZW4gOg0KICBnbF9jdl9mdW5jX3N5bWxpbmtfd29ya3M9eWVz DQplbHNlDQogIGdsX2N2X2Z1bmNfc3ltbGlua193b3Jrcz1ubw0KZmkNCnJtIC1mIGNvcmUgKi5j b3JlIGNvcmUuY29uZnRlc3QuKiBnbW9uLm91dCBiYi5vdXQgY29uZnRlc3QkYWNfZXhlZXh0IFwN CiAgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC5iZWFtIGNvbmZ0ZXN0LiRhY19leHQNCmZp DQoNCiAgICAgIHJtIC1mIGNvbmZ0ZXN0LmYgY29uZnRlc3QubGluayBjb25mdGVzdC5sbmsyDQpm aQ0KeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRnbF9j dl9mdW5jX3N5bWxpbmtfd29ya3MiID4mNQ0KJGFzX2VjaG8gIiRnbF9jdl9mdW5jX3N5bWxpbmtf d29ya3MiID4mNjsgfQ0KICAgIGlmIHRlc3QgIiRnbF9jdl9mdW5jX3N5bWxpbmtfd29ya3MiICE9 IHllczsgdGhlbg0KICAgICAgUkVQTEFDRV9TWU1MSU5LPTENCg0KDQoNCg0KDQoNCg0KDQogIGds X0xJQk9CSlM9IiRnbF9MSUJPQkpTIHN5bWxpbmsuJGFjX29iamV4dCINCg0KICAgIGZpDQogIGZp DQoNCg0KDQoNCiAgR05VTElCX1NZTUxJTks9MQ0KDQoNCg0KJGFzX2VjaG8gIiNkZWZpbmUgR05V TElCX1RFU1RfU1lNTElOSyAxIiA+PmNvbmZkZWZzLmgNCg0KDQoNCiAgIyBDb2RlIGZyb20gbW9k dWxlIHN5bWxpbmthdDoNCg0KDQoNCg0KDQogIGlmIHRlc3QgJGFjX2N2X2Z1bmNfc3ltbGlua2F0 ID0gbm87IHRoZW4NCiAgICBIQVZFX1NZTUxJTktBVD0wDQoNCg0KDQoNCg0KDQoNCg0KICBnbF9M SUJPQkpTPSIkZ2xfTElCT0JKUyBzeW1saW5rYXQuJGFjX29iamV4dCINCg0KICBmaQ0KDQoNCg0K DQogIEdOVUxJQl9TWU1MSU5LQVQ9MQ0KDQoNCg0KJGFzX2VjaG8gIiNkZWZpbmUgR05VTElCX1RF U1RfU1lNTElOS0FUIDEiID4+Y29uZmRlZnMuaA0KDQoNCg0KICAjIENvZGUgZnJvbSBtb2R1bGUg c3lzX2lvY3RsOg0KDQoNCg0KDQogIGlmIHRlc3QgJGFjX2N2X2hlYWRlcl9zeXNfaW9jdGxfaCA9 IHllczsgdGhlbg0KICAgIEhBVkVfU1lTX0lPQ1RMX0g9MQ0KICAgICAgICAgICAgeyAkYXNfZWNo byAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIDxzeXMvaW9j dGwuaD4gZGVjbGFyZXMgaW9jdGwiID4mNQ0KJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciA8 c3lzL2lvY3RsLmg+IGRlY2xhcmVzIGlvY3RsLi4uICIgPiY2OyB9DQppZiAke2dsX2N2X2RlY2xf aW9jdGxfaW5fc3lzX2lvY3RsX2grOn0gZmFsc2U7IHRoZW4gOg0KICAkYXNfZWNob19uICIoY2Fj aGVkKSAiID4mNg0KZWxzZQ0KICAgICAgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29u ZnRlc3QuJGFjX2V4dA0KLyogZW5kIGNvbmZkZWZzLmguICAqLw0KI2luY2x1ZGUgPHN5cy9pb2N0 bC5oPg0KDQppbnQNCm1haW4gKCkNCnsNCih2b2lkKSBpb2N0bDsNCiAgOw0KICByZXR1cm4gMDsN Cn0NCl9BQ0VPRg0KaWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOg0KICBn bF9jdl9kZWNsX2lvY3RsX2luX3N5c19pb2N0bF9oPXllcw0KZWxzZQ0KICBnbF9jdl9kZWNsX2lv Y3RsX2luX3N5c19pb2N0bF9oPW5vDQpmaQ0Kcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRl c3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0DQoNCmZpDQp7ICRhc19lY2hvICIkYXNfbWU6 JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGdsX2N2X2RlY2xfaW9jdGxfaW5fc3lzX2lv Y3RsX2giID4mNQ0KJGFzX2VjaG8gIiRnbF9jdl9kZWNsX2lvY3RsX2luX3N5c19pb2N0bF9oIiA+ JjY7IH0NCiAgZWxzZQ0KICAgIEhBVkVfU1lTX0lPQ1RMX0g9MA0KICBmaQ0KDQoNCg0KDQoNCg0K DQoNCg0KDQogICAgIGlmIHRlc3QgJGdsX2N2X2hhdmVfaW5jbHVkZV9uZXh0ID0geWVzOyB0aGVu DQogICAgICAgZ2xfY3ZfbmV4dF9zeXNfaW9jdGxfaD0nPCdzeXMvaW9jdGwuaCc+Jw0KICAgICBl bHNlDQogICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVj a2luZyBhYnNvbHV0ZSBuYW1lIG9mIDxzeXMvaW9jdGwuaD4iID4mNQ0KJGFzX2VjaG9fbiAiY2hl Y2tpbmcgYWJzb2x1dGUgbmFtZSBvZiA8c3lzL2lvY3RsLmg+Li4uICIgPiY2OyB9DQppZiAke2ds X2N2X25leHRfc3lzX2lvY3RsX2grOn0gZmFsc2U7IHRoZW4gOg0KICAkYXNfZWNob19uICIoY2Fj aGVkKSAiID4mNg0KZWxzZQ0KDQogICAgICAgICAgICAgaWYgdGVzdCAkYWNfY3ZfaGVhZGVyX3N5 c19pb2N0bF9oID0geWVzOyB0aGVuDQoNCg0KICAgICAgICAgICAgICAgY2F0IGNvbmZkZWZzLmgg LSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dA0KLyogZW5kIGNvbmZkZWZzLmguICAqLw0KI2lu Y2x1ZGUgPHN5cy9pb2N0bC5oPg0KDQpfQUNFT0YNCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgIiRob3N0X29zIiBpbg0K ICAgICAgICAgICAgICAgICBhaXgqKSBnbF9hYnNuYW1lX2NwcD0iJGFjX2NwcCAtQyIgOzsNCiAg ICAgICAgICAgICAgICAgKikgICAgZ2xfYWJzbmFtZV9jcHA9IiRhY19jcHAiIDs7DQogICAgICAg ICAgICAgICBlc2FjDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBnbF9jdl9uZXh0X3N5c19pb2N0bF9oPSciJ2AoZXZhbCAiJGdsX2Fi c25hbWVfY3BwIGNvbmZ0ZXN0LiRhY19leHQiKSAyPiY1IHwNCiAgICAgICAgICAgICAgICAgIHNl ZCAtbiAnXCMvc3lzL2lvY3RsLmgjew0KICAgICAgICAgICAgICAgICAgICBzIy4qIlwoLiovc3lz L2lvY3RsLmhcKSIuKiNcMSMNCiAgICAgICAgICAgICAgICAgICAgcyNeL1teL10jLy8mIw0KICAg ICAgICAgICAgICAgICAgICBwDQogICAgICAgICAgICAgICAgICAgIHENCiAgICAgICAgICAgICAg ICAgIH0nYCciJw0KICAgICAgICAgIGVsc2UNCiAgICAgICAgICAgICAgIGdsX2N2X25leHRfc3lz X2lvY3RsX2g9Jzwnc3lzL2lvY3RsLmgnPicNCiAgICAgICAgICAgICBmaQ0KDQoNCmZpDQp7ICRh c19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGdsX2N2X25leHRf c3lzX2lvY3RsX2giID4mNQ0KJGFzX2VjaG8gIiRnbF9jdl9uZXh0X3N5c19pb2N0bF9oIiA+JjY7 IH0NCiAgICAgZmkNCiAgICAgTkVYVF9TWVNfSU9DVExfSD0kZ2xfY3ZfbmV4dF9zeXNfaW9jdGxf aA0KDQogICAgIGlmIHRlc3QgJGdsX2N2X2hhdmVfaW5jbHVkZV9uZXh0ID0geWVzIHx8IHRlc3Qg JGdsX2N2X2hhdmVfaW5jbHVkZV9uZXh0ID0gYnVnZ3k7IHRoZW4NCiAgICAgICAjIElOQ0xVREVf TkVYVF9BU19GSVJTVF9ESVJFQ1RJVkU9J2luY2x1ZGVfbmV4dCcNCiAgICAgICBnbF9uZXh0X2Fz X2ZpcnN0X2RpcmVjdGl2ZT0nPCdzeXMvaW9jdGwuaCc+Jw0KICAgICBlbHNlDQogICAgICAgIyBJ TkNMVURFX05FWFRfQVNfRklSU1RfRElSRUNUSVZFPSdpbmNsdWRlJw0KICAgICAgIGdsX25leHRf YXNfZmlyc3RfZGlyZWN0aXZlPSRnbF9jdl9uZXh0X3N5c19pb2N0bF9oDQogICAgIGZpDQogICAg IE5FWFRfQVNfRklSU1RfRElSRUNUSVZFX1NZU19JT0NUTF9IPSRnbF9uZXh0X2FzX2ZpcnN0X2Rp cmVjdGl2ZQ0KDQoNCg0KDQoNCg0KICAgIGZvciBnbF9mdW5jIGluIGlvY3RsOyBkbw0KICAgIGFz X2dsX1N5bWJvbD1gJGFzX2VjaG8gImdsX2N2X2hhdmVfcmF3X2RlY2xfJGdsX2Z1bmMiIHwgJGFz X3RyX3NoYA0KICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hl Y2tpbmcgd2hldGhlciAkZ2xfZnVuYyBpcyBkZWNsYXJlZCB3aXRob3V0IGEgbWFjcm8iID4mNQ0K JGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciAkZ2xfZnVuYyBpcyBkZWNsYXJlZCB3aXRob3V0 IGEgbWFjcm8uLi4gIiA+JjY7IH0NCmlmIGV2YWwgXCR7JGFzX2dsX1N5bWJvbCs6fSBmYWxzZTsg dGhlbiA6DQogICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2DQplbHNlDQogIGNhdCBjb25mZGVm cy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQNCi8qIGVuZCBjb25mZGVmcy5oLiAgKi8N CiNpbmNsdWRlIDxzeXMvaW9jdGwuaD4NCi8qIFNvbWUgcGxhdGZvcm1zIGRlY2xhcmUgaW9jdGwg aW4gdGhlIHdyb25nIGhlYWRlci4gICovDQojaWYgIShkZWZpbmVkIF9fR0xJQkNfXyAmJiAhZGVm aW5lZCBfX1VDTElCQ19fKQ0KIyBpbmNsdWRlIDx1bmlzdGQuaD4NCiNlbmRpZg0KDQppbnQNCm1h aW4gKCkNCnsNCiN1bmRlZiAkZ2xfZnVuYw0KICAodm9pZCkgJGdsX2Z1bmM7DQogIDsNCiAgcmV0 dXJuIDA7DQp9DQpfQUNFT0YNCmlmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVu IDoNCiAgZXZhbCAiJGFzX2dsX1N5bWJvbD15ZXMiDQplbHNlDQogIGV2YWwgIiRhc19nbF9TeW1i b2w9bm8iDQpmaQ0Kcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBj b25mdGVzdC4kYWNfZXh0DQpmaQ0KZXZhbCBhY19yZXM9XCQkYXNfZ2xfU3ltYm9sDQoJICAgICAg IHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfcmVz IiA+JjUNCiRhc19lY2hvICIkYWNfcmVzIiA+JjY7IH0NCiAgICAgaWYgZXZhbCB0ZXN0IFwieFwk IiRhc19nbF9TeW1ib2wiXCIgPSB4InllcyI7IHRoZW4gOg0KICBjYXQgPj5jb25mZGVmcy5oIDw8 X0FDRU9GDQojZGVmaW5lIGAkYXNfZWNobyAiSEFWRV9SQVdfREVDTF8kZ2xfZnVuYyIgfCAkYXNf dHJfY3BwYCAxDQpfQUNFT0YNCg0KICAgICAgICAgICAgICAgICAgICAgZXZhbCBhY19jdl9oYXZl X2RlY2xfJGdsX2Z1bmM9eWVzDQpmaQ0KICAgICAgZG9uZQ0KDQoNCg0KICAjIENvZGUgZnJvbSBt b2R1bGUgc3lzX3NlbGVjdDoNCg0KDQoNCiAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5v LSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIDxzeXMvc2VsZWN0Lmg+IGlzIHNlbGYtY29udGFp bmVkIiA+JjUNCiRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgPHN5cy9zZWxlY3QuaD4gaXMg c2VsZi1jb250YWluZWQuLi4gIiA+JjY7IH0NCmlmICR7Z2xfY3ZfaGVhZGVyX3N5c19zZWxlY3Rf aF9zZWxmY29udGFpbmVkKzp9IGZhbHNlOyB0aGVuIDoNCiAgJGFzX2VjaG9fbiAiKGNhY2hlZCkg IiA+JjYNCmVsc2UNCg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2F0IGNv bmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dA0KLyogZW5kIGNvbmZkZWZzLmgu ICAqLw0KI2luY2x1ZGUgPHN5cy9zZWxlY3QuaD4NCmludA0KbWFpbiAoKQ0Kew0Kc3RydWN0IHRp bWV2YWwgYjsNCiAgOw0KICByZXR1cm4gMDsNCn0NCl9BQ0VPRg0KaWYgYWNfZm5fY190cnlfY29t cGlsZSAiJExJTkVOTyI7IHRoZW4gOg0KICBnbF9jdl9oZWFkZXJfc3lzX3NlbGVjdF9oX3NlbGZj b250YWluZWQ9eWVzDQplbHNlDQogIGdsX2N2X2hlYWRlcl9zeXNfc2VsZWN0X2hfc2VsZmNvbnRh aW5lZD1ubw0KZmkNCnJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQg Y29uZnRlc3QuJGFjX2V4dA0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAkZ2xfY3Zf aGVhZGVyX3N5c19zZWxlY3RfaF9zZWxmY29udGFpbmVkID0geWVzOyB0aGVuDQogICAgICAgIGNh dCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQNCi8qIGVuZCBjb25mZGVm cy5oLiAgKi8NCiNpbmNsdWRlIDxzeXMvc2VsZWN0Lmg+DQppbnQNCm1haW4gKCkNCnsNCmludCBt ZW1zZXQ7IGludCBiemVybzsNCiAgOw0KICByZXR1cm4gMDsNCn0NCg0KX0FDRU9GDQppZiBhY19m bl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6DQogIGNhdCBjb25mZGVmcy5oIC0gPDxf QUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQNCi8qIGVuZCBjb25mZGVmcy5oLiAgKi8NCiNpbmNsdWRl IDxzeXMvc2VsZWN0Lmg+DQppbnQNCm1haW4gKCkNCnsNCg0KICAgICAgICAgICAgICAgICAgI3Vu ZGVmIG1lbXNldA0KICAgICAgICAgICAgICAgICAgI2RlZmluZSBtZW1zZXQgbm9uZXhpc3RlbnRf bWVtc2V0DQogICAgICAgICAgICAgICAgICBleHRlcm4gdm9pZCAqbWVtc2V0ICh2b2lkICosIGlu dCwgdW5zaWduZWQgbG9uZyk7DQogICAgICAgICAgICAgICAgICAjdW5kZWYgYnplcm8NCiAgICAg ICAgICAgICAgICAgICNkZWZpbmUgYnplcm8gbm9uZXhpc3RlbnRfYnplcm8NCiAgICAgICAgICAg ICAgICAgIGV4dGVybiB2b2lkIGJ6ZXJvICh2b2lkICosIHVuc2lnbmVkIGxvbmcpOw0KICAgICAg ICAgICAgICAgICAgZmRfc2V0IGZkczsNCiAgICAgICAgICAgICAgICAgIEZEX1pFUk8gKCZmZHMp Ow0KDQogIDsNCiAgcmV0dXJuIDA7DQp9DQoNCl9BQ0VPRg0KaWYgYWNfZm5fY190cnlfbGluayAi JExJTkVOTyI7IHRoZW4gOg0KDQplbHNlDQogIGdsX2N2X2hlYWRlcl9zeXNfc2VsZWN0X2hfc2Vs ZmNvbnRhaW5lZD1ubw0KZmkNCnJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19v YmpleHQgXA0KICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0DQoNCmZpDQpy bSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19l eHQNCiAgICAgIGZpDQoNCmZpDQp7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVO T306IHJlc3VsdDogJGdsX2N2X2hlYWRlcl9zeXNfc2VsZWN0X2hfc2VsZmNvbnRhaW5lZCIgPiY1 DQokYXNfZWNobyAiJGdsX2N2X2hlYWRlcl9zeXNfc2VsZWN0X2hfc2VsZmNvbnRhaW5lZCIgPiY2 OyB9DQoNCg0KDQoNCg0KDQoNCg0KDQogICAgIGlmIHRlc3QgJGdsX2N2X2hhdmVfaW5jbHVkZV9u ZXh0ID0geWVzOyB0aGVuDQogICAgICAgZ2xfY3ZfbmV4dF9zeXNfc2VsZWN0X2g9Jzwnc3lzL3Nl bGVjdC5oJz4nDQogICAgIGVsc2UNCiAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5l bm8tJExJTkVOT306IGNoZWNraW5nIGFic29sdXRlIG5hbWUgb2YgPHN5cy9zZWxlY3QuaD4iID4m NQ0KJGFzX2VjaG9fbiAiY2hlY2tpbmcgYWJzb2x1dGUgbmFtZSBvZiA8c3lzL3NlbGVjdC5oPi4u LiAiID4mNjsgfQ0KaWYgJHtnbF9jdl9uZXh0X3N5c19zZWxlY3RfaCs6fSBmYWxzZTsgdGhlbiA6 DQogICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2DQplbHNlDQoNCiAgICAgICAgICAgICBpZiB0 ZXN0ICRhY19jdl9oZWFkZXJfc3lzX3NlbGVjdF9oID0geWVzOyB0aGVuDQoNCg0KICAgICAgICAg ICAgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dA0KLyogZW5k IGNvbmZkZWZzLmguICAqLw0KI2luY2x1ZGUgPHN5cy9zZWxlY3QuaD4NCg0KX0FDRU9GDQogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBjYXNlICIkaG9zdF9vcyIgaW4NCiAgICAgICAgICAgICAgICAgYWl4KikgZ2xfYWJzbmFtZV9j cHA9IiRhY19jcHAgLUMiIDs7DQogICAgICAgICAgICAgICAgICopICAgIGdsX2Fic25hbWVfY3Bw PSIkYWNfY3BwIiA7Ow0KICAgICAgICAgICAgICAgZXNhYw0KICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2xfY3ZfbmV4dF9zeXNfc2Vs ZWN0X2g9JyInYChldmFsICIkZ2xfYWJzbmFtZV9jcHAgY29uZnRlc3QuJGFjX2V4dCIpIDI+JjUg fA0KICAgICAgICAgICAgICAgICAgc2VkIC1uICdcIy9zeXMvc2VsZWN0Lmgjew0KICAgICAgICAg ICAgICAgICAgICBzIy4qIlwoLiovc3lzL3NlbGVjdC5oXCkiLiojXDEjDQogICAgICAgICAgICAg ICAgICAgIHMjXi9bXi9dIy8vJiMNCiAgICAgICAgICAgICAgICAgICAgcA0KICAgICAgICAgICAg ICAgICAgICBxDQogICAgICAgICAgICAgICAgICB9J2AnIicNCiAgICAgICAgICBlbHNlDQogICAg ICAgICAgICAgICBnbF9jdl9uZXh0X3N5c19zZWxlY3RfaD0nPCdzeXMvc2VsZWN0LmgnPicNCiAg ICAgICAgICAgICBmaQ0KDQoNCmZpDQp7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJ TkVOT306IHJlc3VsdDogJGdsX2N2X25leHRfc3lzX3NlbGVjdF9oIiA+JjUNCiRhc19lY2hvICIk Z2xfY3ZfbmV4dF9zeXNfc2VsZWN0X2giID4mNjsgfQ0KICAgICBmaQ0KICAgICBORVhUX1NZU19T RUxFQ1RfSD0kZ2xfY3ZfbmV4dF9zeXNfc2VsZWN0X2gNCg0KICAgICBpZiB0ZXN0ICRnbF9jdl9o YXZlX2luY2x1ZGVfbmV4dCA9IHllcyB8fCB0ZXN0ICRnbF9jdl9oYXZlX2luY2x1ZGVfbmV4dCA9 IGJ1Z2d5OyB0aGVuDQogICAgICAgIyBJTkNMVURFX05FWFRfQVNfRklSU1RfRElSRUNUSVZFPSdp bmNsdWRlX25leHQnDQogICAgICAgZ2xfbmV4dF9hc19maXJzdF9kaXJlY3RpdmU9Jzwnc3lzL3Nl bGVjdC5oJz4nDQogICAgIGVsc2UNCiAgICAgICAjIElOQ0xVREVfTkVYVF9BU19GSVJTVF9ESVJF Q1RJVkU9J2luY2x1ZGUnDQogICAgICAgZ2xfbmV4dF9hc19maXJzdF9kaXJlY3RpdmU9JGdsX2N2 X25leHRfc3lzX3NlbGVjdF9oDQogICAgIGZpDQogICAgIE5FWFRfQVNfRklSU1RfRElSRUNUSVZF X1NZU19TRUxFQ1RfSD0kZ2xfbmV4dF9hc19maXJzdF9kaXJlY3RpdmUNCg0KDQoNCg0KICBpZiB0 ZXN0ICRhY19jdl9oZWFkZXJfc3lzX3NlbGVjdF9oID0geWVzOyB0aGVuDQogICAgSEFWRV9TWVNf U0VMRUNUX0g9MQ0KICBlbHNlDQogICAgSEFWRV9TWVNfU0VMRUNUX0g9MA0KICBmaQ0KDQoNCg0K DQoNCiAgaWYgdGVzdCAkYWNfY3ZfaGVhZGVyX3N5c19zb2NrZXRfaCAhPSB5ZXM7IHRoZW4NCiAg ICAgICAgICAgICAgICAgICAgZm9yIGFjX2hlYWRlciBpbiB3aW5zb2NrMi5oDQpkbyA6DQogIGFj X2ZuX2NfY2hlY2tfaGVhZGVyX21vbmdyZWwgIiRMSU5FTk8iICJ3aW5zb2NrMi5oIiAiYWNfY3Zf aGVhZGVyX3dpbnNvY2syX2giICIkYWNfaW5jbHVkZXNfZGVmYXVsdCINCmlmIHRlc3QgIngkYWNf Y3ZfaGVhZGVyX3dpbnNvY2syX2giID0geHllczsgdGhlbiA6DQogIGNhdCA+PmNvbmZkZWZzLmgg PDxfQUNFT0YNCiNkZWZpbmUgSEFWRV9XSU5TT0NLMl9IIDENCl9BQ0VPRg0KDQpmaQ0KDQpkb25l DQoNCiAgZmkNCiAgaWYgdGVzdCAiJGFjX2N2X2hlYWRlcl93aW5zb2NrMl9oIiA9IHllczsgdGhl bg0KICAgIEhBVkVfV0lOU09DSzJfSD0xDQogICAgVU5JU1REX0hfSEFWRV9XSU5TT0NLMl9IPTEN CiAgICBTWVNfSU9DVExfSF9IQVZFX1dJTlNPQ0syX0g9MQ0KICBlbHNlDQogICAgSEFWRV9XSU5T T0NLMl9IPTANCiAgZmkNCg0KDQoNCg0KICAgIGZvciBnbF9mdW5jIGluIHNlbGVjdDsgZG8NCiAg ICBhc19nbF9TeW1ib2w9YCRhc19lY2hvICJnbF9jdl9oYXZlX3Jhd19kZWNsXyRnbF9mdW5jIiB8 ICRhc190cl9zaGANCiAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306 IGNoZWNraW5nIHdoZXRoZXIgJGdsX2Z1bmMgaXMgZGVjbGFyZWQgd2l0aG91dCBhIG1hY3JvIiA+ JjUNCiRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgJGdsX2Z1bmMgaXMgZGVjbGFyZWQgd2l0 aG91dCBhIG1hY3JvLi4uICIgPiY2OyB9DQppZiBldmFsIFwkeyRhc19nbF9TeW1ib2wrOn0gZmFs c2U7IHRoZW4gOg0KICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNg0KZWxzZQ0KICBjYXQgY29u ZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0DQovKiBlbmQgY29uZmRlZnMuaC4g ICovDQoNCi8qIFNvbWUgc3lzdGVtcyByZXF1aXJlIHByZXJlcXVpc2l0ZSBoZWFkZXJzLiAgKi8N CiNpbmNsdWRlIDxzeXMvdHlwZXMuaD4NCiNpZiAhKGRlZmluZWQgX19HTElCQ19fICYmICFkZWZp bmVkIF9fVUNMSUJDX18pICYmIEhBVkVfU1lTX1RJTUVfSA0KIyBpbmNsdWRlIDxzeXMvdGltZS5o Pg0KI2VuZGlmDQojaW5jbHVkZSA8c3lzL3NlbGVjdC5oPg0KDQppbnQNCm1haW4gKCkNCnsNCiN1 bmRlZiAkZ2xfZnVuYw0KICAodm9pZCkgJGdsX2Z1bmM7DQogIDsNCiAgcmV0dXJuIDA7DQp9DQpf QUNFT0YNCmlmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoNCiAgZXZhbCAi JGFzX2dsX1N5bWJvbD15ZXMiDQplbHNlDQogIGV2YWwgIiRhc19nbF9TeW1ib2w9bm8iDQpmaQ0K cm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNf ZXh0DQpmaQ0KZXZhbCBhY19yZXM9XCQkYXNfZ2xfU3ltYm9sDQoJICAgICAgIHsgJGFzX2VjaG8g IiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfcmVzIiA+JjUNCiRhc19l Y2hvICIkYWNfcmVzIiA+JjY7IH0NCiAgICAgaWYgZXZhbCB0ZXN0IFwieFwkIiRhc19nbF9TeW1i b2wiXCIgPSB4InllcyI7IHRoZW4gOg0KICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GDQojZGVm aW5lIGAkYXNfZWNobyAiSEFWRV9SQVdfREVDTF8kZ2xfZnVuYyIgfCAkYXNfdHJfY3BwYCAxDQpf QUNFT0YNCg0KICAgICAgICAgICAgICAgICAgICAgZXZhbCBhY19jdl9oYXZlX2RlY2xfJGdsX2Z1 bmM9eWVzDQpmaQ0KICAgICAgZG9uZQ0KDQoNCg0KICAjIENvZGUgZnJvbSBtb2R1bGUgc3lzX3Nv Y2tldDoNCg0KDQoNCg0KDQogICAgICAgIGNhc2UgIiRob3N0X29zIiBpbg0KICAgIG9zZiopDQoN CiRhc19lY2hvICIjZGVmaW5lIF9QT1NJWF9QSUlfU09DS0VUIDEiID4+Y29uZmRlZnMuaA0KDQog ICAgICA7Ow0KICBlc2FjDQoNCiAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5F Tk99OiBjaGVja2luZyB3aGV0aGVyIDxzeXMvc29ja2V0Lmg+IGlzIHNlbGYtY29udGFpbmVkIiA+ JjUNCiRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgPHN5cy9zb2NrZXQuaD4gaXMgc2VsZi1j b250YWluZWQuLi4gIiA+JjY7IH0NCmlmICR7Z2xfY3ZfaGVhZGVyX3N5c19zb2NrZXRfaF9zZWxm Y29udGFpbmVkKzp9IGZhbHNlOyB0aGVuIDoNCiAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYN CmVsc2UNCg0KICAgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4 dA0KLyogZW5kIGNvbmZkZWZzLmguICAqLw0KI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4NCmludA0K bWFpbiAoKQ0Kew0KDQogIDsNCiAgcmV0dXJuIDA7DQp9DQpfQUNFT0YNCmlmIGFjX2ZuX2NfdHJ5 X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoNCiAgZ2xfY3ZfaGVhZGVyX3N5c19zb2NrZXRfaF9z ZWxmY29udGFpbmVkPXllcw0KZWxzZQ0KICBnbF9jdl9oZWFkZXJfc3lzX3NvY2tldF9oX3NlbGZj b250YWluZWQ9bm8NCmZpDQpybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2Jq ZXh0IGNvbmZ0ZXN0LiRhY19leHQNCg0KZmkNCnsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVu by0kTElORU5PfTogcmVzdWx0OiAkZ2xfY3ZfaGVhZGVyX3N5c19zb2NrZXRfaF9zZWxmY29udGFp bmVkIiA+JjUNCiRhc19lY2hvICIkZ2xfY3ZfaGVhZGVyX3N5c19zb2NrZXRfaF9zZWxmY29udGFp bmVkIiA+JjY7IH0NCiAgaWYgdGVzdCAkZ2xfY3ZfaGVhZGVyX3N5c19zb2NrZXRfaF9zZWxmY29u dGFpbmVkID0geWVzOyB0aGVuDQogICAgICAgICAgICBmb3IgYWNfZnVuYyBpbiBzaHV0ZG93bg0K ZG8gOg0KICBhY19mbl9jX2NoZWNrX2Z1bmMgIiRMSU5FTk8iICJzaHV0ZG93biIgImFjX2N2X2Z1 bmNfc2h1dGRvd24iDQppZiB0ZXN0ICJ4JGFjX2N2X2Z1bmNfc2h1dGRvd24iID0geHllczsgdGhl biA6DQogIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YNCiNkZWZpbmUgSEFWRV9TSFVURE9XTiAx DQpfQUNFT0YNCg0KZmkNCmRvbmUNCg0KICAgIGlmIHRlc3QgJGFjX2N2X2Z1bmNfc2h1dGRvd24g PSB5ZXM7IHRoZW4NCiAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5P fTogY2hlY2tpbmcgd2hldGhlciA8c3lzL3NvY2tldC5oPiBkZWZpbmVzIHRoZSBTSFVUXyogbWFj cm9zIiA+JjUNCiRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgPHN5cy9zb2NrZXQuaD4gZGVm aW5lcyB0aGUgU0hVVF8qIG1hY3Jvcy4uLiAiID4mNjsgfQ0KaWYgJHtnbF9jdl9oZWFkZXJfc3lz X3NvY2tldF9oX3NodXQrOn0gZmFsc2U7IHRoZW4gOg0KICAkYXNfZWNob19uICIoY2FjaGVkKSAi ID4mNg0KZWxzZQ0KDQogICAgICAgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRl c3QuJGFjX2V4dA0KLyogZW5kIGNvbmZkZWZzLmguICAqLw0KI2luY2x1ZGUgPHN5cy9zb2NrZXQu aD4NCmludA0KbWFpbiAoKQ0Kew0KaW50IGFbXSA9IHsgU0hVVF9SRCwgU0hVVF9XUiwgU0hVVF9S RFdSIH07DQogIDsNCiAgcmV0dXJuIDA7DQp9DQpfQUNFT0YNCmlmIGFjX2ZuX2NfdHJ5X2NvbXBp bGUgIiRMSU5FTk8iOyB0aGVuIDoNCiAgZ2xfY3ZfaGVhZGVyX3N5c19zb2NrZXRfaF9zaHV0PXll cw0KZWxzZQ0KICBnbF9jdl9oZWFkZXJfc3lzX3NvY2tldF9oX3NodXQ9bm8NCmZpDQpybSAtZiBj b3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQNCg0K ZmkNCnsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkZ2xf Y3ZfaGVhZGVyX3N5c19zb2NrZXRfaF9zaHV0IiA+JjUNCiRhc19lY2hvICIkZ2xfY3ZfaGVhZGVy X3N5c19zb2NrZXRfaF9zaHV0IiA+JjY7IH0NCiAgICAgIGlmIHRlc3QgJGdsX2N2X2hlYWRlcl9z eXNfc29ja2V0X2hfc2h1dCA9IG5vOyB0aGVuDQogICAgICAgIFNZU19TT0NLRVRfSD0nc3lzL3Nv Y2tldC5oJw0KICAgICAgZmkNCiAgICBmaQ0KICBmaQ0KICAjIFdlIG5lZWQgdG8gY2hlY2sgZm9y IHdzMnRjcGlwLmggbm93Lg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCiAgICAgaWYgdGVzdCAkZ2xf Y3ZfaGF2ZV9pbmNsdWRlX25leHQgPSB5ZXM7IHRoZW4NCiAgICAgICBnbF9jdl9uZXh0X3N5c19z b2NrZXRfaD0nPCdzeXMvc29ja2V0LmgnPicNCiAgICAgZWxzZQ0KICAgICAgIHsgJGFzX2VjaG8g IiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgYWJzb2x1dGUgbmFtZSBvZiA8 c3lzL3NvY2tldC5oPiIgPiY1DQokYXNfZWNob19uICJjaGVja2luZyBhYnNvbHV0ZSBuYW1lIG9m IDxzeXMvc29ja2V0Lmg+Li4uICIgPiY2OyB9DQppZiAke2dsX2N2X25leHRfc3lzX3NvY2tldF9o Kzp9IGZhbHNlOyB0aGVuIDoNCiAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYNCmVsc2UNCg0K ICAgICAgICAgICAgIGlmIHRlc3QgJGFjX2N2X2hlYWRlcl9zeXNfc29ja2V0X2ggPSB5ZXM7IHRo ZW4NCg0KDQogICAgICAgICAgICAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVz dC4kYWNfZXh0DQovKiBlbmQgY29uZmRlZnMuaC4gICovDQojaW5jbHVkZSA8c3lzL3NvY2tldC5o Pg0KDQpfQUNFT0YNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGNhc2UgIiRob3N0X29zIiBpbg0KICAgICAgICAgICAgICAgICBh aXgqKSBnbF9hYnNuYW1lX2NwcD0iJGFjX2NwcCAtQyIgOzsNCiAgICAgICAgICAgICAgICAgKikg ICAgZ2xfYWJzbmFtZV9jcHA9IiRhY19jcHAiIDs7DQogICAgICAgICAgICAgICBlc2FjDQogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBn bF9jdl9uZXh0X3N5c19zb2NrZXRfaD0nIidgKGV2YWwgIiRnbF9hYnNuYW1lX2NwcCBjb25mdGVz dC4kYWNfZXh0IikgMj4mNSB8DQogICAgICAgICAgICAgICAgICBzZWQgLW4gJ1wjL3N5cy9zb2Nr ZXQuaCN7DQogICAgICAgICAgICAgICAgICAgIHMjLioiXCguKi9zeXMvc29ja2V0LmhcKSIuKiNc MSMNCiAgICAgICAgICAgICAgICAgICAgcyNeL1teL10jLy8mIw0KICAgICAgICAgICAgICAgICAg ICBwDQogICAgICAgICAgICAgICAgICAgIHENCiAgICAgICAgICAgICAgICAgIH0nYCciJw0KICAg ICAgICAgIGVsc2UNCiAgICAgICAgICAgICAgIGdsX2N2X25leHRfc3lzX3NvY2tldF9oPSc8J3N5 cy9zb2NrZXQuaCc+Jw0KICAgICAgICAgICAgIGZpDQoNCg0KZmkNCnsgJGFzX2VjaG8gIiRhc19t ZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkZ2xfY3ZfbmV4dF9zeXNfc29ja2V0X2gi ID4mNQ0KJGFzX2VjaG8gIiRnbF9jdl9uZXh0X3N5c19zb2NrZXRfaCIgPiY2OyB9DQogICAgIGZp DQogICAgIE5FWFRfU1lTX1NPQ0tFVF9IPSRnbF9jdl9uZXh0X3N5c19zb2NrZXRfaA0KDQogICAg IGlmIHRlc3QgJGdsX2N2X2hhdmVfaW5jbHVkZV9uZXh0ID0geWVzIHx8IHRlc3QgJGdsX2N2X2hh dmVfaW5jbHVkZV9uZXh0ID0gYnVnZ3k7IHRoZW4NCiAgICAgICAjIElOQ0xVREVfTkVYVF9BU19G SVJTVF9ESVJFQ1RJVkU9J2luY2x1ZGVfbmV4dCcNCiAgICAgICBnbF9uZXh0X2FzX2ZpcnN0X2Rp cmVjdGl2ZT0nPCdzeXMvc29ja2V0LmgnPicNCiAgICAgZWxzZQ0KICAgICAgICMgSU5DTFVERV9O RVhUX0FTX0ZJUlNUX0RJUkVDVElWRT0naW5jbHVkZScNCiAgICAgICBnbF9uZXh0X2FzX2ZpcnN0 X2RpcmVjdGl2ZT0kZ2xfY3ZfbmV4dF9zeXNfc29ja2V0X2gNCiAgICAgZmkNCiAgICAgTkVYVF9B U19GSVJTVF9ESVJFQ1RJVkVfU1lTX1NPQ0tFVF9IPSRnbF9uZXh0X2FzX2ZpcnN0X2RpcmVjdGl2 ZQ0KDQoNCg0KDQogIGlmIHRlc3QgJGFjX2N2X2hlYWRlcl9zeXNfc29ja2V0X2ggPSB5ZXM7IHRo ZW4NCiAgICBIQVZFX1NZU19TT0NLRVRfSD0xDQogICAgSEFWRV9XUzJUQ1BJUF9IPTANCiAgZWxz ZQ0KICAgIEhBVkVfU1lTX1NPQ0tFVF9IPTANCiAgICBpZiB0ZXN0ICRhY19jdl9oZWFkZXJfd3My dGNwaXBfaCA9IHllczsgdGhlbg0KICAgICAgSEFWRV9XUzJUQ1BJUF9IPTENCiAgICBlbHNlDQog ICAgICBIQVZFX1dTMlRDUElQX0g9MA0KICAgIGZpDQogIGZpDQoNCg0KDQogIGFjX2ZuX2NfY2hl Y2tfdHlwZSAiJExJTkVOTyIgInN0cnVjdCBzb2NrYWRkcl9zdG9yYWdlIiAiYWNfY3ZfdHlwZV9z dHJ1Y3Rfc29ja2FkZHJfc3RvcmFnZSIgIg0KICAvKiBzeXMvdHlwZXMuaCBpcyBub3QgbmVlZGVk IGFjY29yZGluZyB0byBQT1NJWCwgYnV0IHRoZQ0KICAgICBzeXMvc29ja2V0LmggaW4gaTM4Ni11 bmtub3duLWZyZWVic2Q0LjEwIGFuZA0KICAgICBwb3dlcnBjLWFwcGxlLWRhcndpbjUuNSByZXF1 aXJlZCBpdC4gKi8NCiNpbmNsdWRlIDxzeXMvdHlwZXMuaD4NCiNpZmRlZiBIQVZFX1NZU19TT0NL RVRfSA0KI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4NCiNlbmRpZg0KI2lmZGVmIEhBVkVfV1MyVENQ SVBfSA0KI2luY2x1ZGUgPHdzMnRjcGlwLmg+DQojZW5kaWYNCg0KIg0KaWYgdGVzdCAieCRhY19j dl90eXBlX3N0cnVjdF9zb2NrYWRkcl9zdG9yYWdlIiA9IHh5ZXM7IHRoZW4gOg0KDQpjYXQgPj5j b25mZGVmcy5oIDw8X0FDRU9GDQojZGVmaW5lIEhBVkVfU1RSVUNUX1NPQ0tBRERSX1NUT1JBR0Ug MQ0KX0FDRU9GDQoNCg0KZmkNCmFjX2ZuX2NfY2hlY2tfdHlwZSAiJExJTkVOTyIgInNhX2ZhbWls eV90IiAiYWNfY3ZfdHlwZV9zYV9mYW1pbHlfdCIgIg0KICAvKiBzeXMvdHlwZXMuaCBpcyBub3Qg bmVlZGVkIGFjY29yZGluZyB0byBQT1NJWCwgYnV0IHRoZQ0KICAgICBzeXMvc29ja2V0LmggaW4g aTM4Ni11bmtub3duLWZyZWVic2Q0LjEwIGFuZA0KICAgICBwb3dlcnBjLWFwcGxlLWRhcndpbjUu NSByZXF1aXJlZCBpdC4gKi8NCiNpbmNsdWRlIDxzeXMvdHlwZXMuaD4NCiNpZmRlZiBIQVZFX1NZ U19TT0NLRVRfSA0KI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4NCiNlbmRpZg0KI2lmZGVmIEhBVkVf V1MyVENQSVBfSA0KI2luY2x1ZGUgPHdzMnRjcGlwLmg+DQojZW5kaWYNCg0KIg0KaWYgdGVzdCAi eCRhY19jdl90eXBlX3NhX2ZhbWlseV90IiA9IHh5ZXM7IHRoZW4gOg0KDQpjYXQgPj5jb25mZGVm cy5oIDw8X0FDRU9GDQojZGVmaW5lIEhBVkVfU0FfRkFNSUxZX1QgMQ0KX0FDRU9GDQoNCg0KZmkN Cg0KICBpZiB0ZXN0ICRhY19jdl90eXBlX3N0cnVjdF9zb2NrYWRkcl9zdG9yYWdlID0gbm87IHRo ZW4NCiAgICBIQVZFX1NUUlVDVF9TT0NLQUREUl9TVE9SQUdFPTANCiAgZmkNCiAgaWYgdGVzdCAk YWNfY3ZfdHlwZV9zYV9mYW1pbHlfdCA9IG5vOyB0aGVuDQogICAgSEFWRV9TQV9GQU1JTFlfVD0w DQogIGZpDQogIGlmIHRlc3QgJGFjX2N2X3R5cGVfc3RydWN0X3NvY2thZGRyX3N0b3JhZ2UgIT0g bm87IHRoZW4NCiAgICBhY19mbl9jX2NoZWNrX21lbWJlciAiJExJTkVOTyIgInN0cnVjdCBzb2Nr YWRkcl9zdG9yYWdlIiAic3NfZmFtaWx5IiAiYWNfY3ZfbWVtYmVyX3N0cnVjdF9zb2NrYWRkcl9z dG9yYWdlX3NzX2ZhbWlseSIgIiNpbmNsdWRlIDxzeXMvdHlwZXMuaD4NCiAgICAgICAjaWZkZWYg SEFWRV9TWVNfU09DS0VUX0gNCiAgICAgICAjaW5jbHVkZSA8c3lzL3NvY2tldC5oPg0KICAgICAg ICNlbmRpZg0KICAgICAgICNpZmRlZiBIQVZFX1dTMlRDUElQX0gNCiAgICAgICAjaW5jbHVkZSA8 d3MydGNwaXAuaD4NCiAgICAgICAjZW5kaWYNCg0KIg0KaWYgdGVzdCAieCRhY19jdl9tZW1iZXJf c3RydWN0X3NvY2thZGRyX3N0b3JhZ2Vfc3NfZmFtaWx5IiA9IHh5ZXM7IHRoZW4gOg0KDQpjYXQg Pj5jb25mZGVmcy5oIDw8X0FDRU9GDQojZGVmaW5lIEhBVkVfU1RSVUNUX1NPQ0tBRERSX1NUT1JB R0VfU1NfRkFNSUxZIDENCl9BQ0VPRg0KDQoNCmVsc2UNCiAgSEFWRV9TVFJVQ1RfU09DS0FERFJf U1RPUkFHRV9TU19GQU1JTFk9MA0KZmkNCg0KICBmaQ0KICBpZiB0ZXN0ICRIQVZFX1NUUlVDVF9T T0NLQUREUl9TVE9SQUdFID0gMCB8fCB0ZXN0ICRIQVZFX1NBX0ZBTUlMWV9UID0gMCBcDQogICAg IHx8IHRlc3QgJEhBVkVfU1RSVUNUX1NPQ0tBRERSX1NUT1JBR0VfU1NfRkFNSUxZID0gMDsgdGhl bg0KICAgIFNZU19TT0NLRVRfSD0nc3lzL3NvY2tldC5oJw0KICBmaQ0KDQoNCg0KDQogIGlmIHRl c3QgJGFjX2N2X2hlYWRlcl9zeXNfc29ja2V0X2ggIT0geWVzOyB0aGVuDQogICAgICAgICAgICAg ICAgICAgIGZvciBhY19oZWFkZXIgaW4gd2luc29jazIuaA0KZG8gOg0KICBhY19mbl9jX2NoZWNr X2hlYWRlcl9tb25ncmVsICIkTElORU5PIiAid2luc29jazIuaCIgImFjX2N2X2hlYWRlcl93aW5z b2NrMl9oIiAiJGFjX2luY2x1ZGVzX2RlZmF1bHQiDQppZiB0ZXN0ICJ4JGFjX2N2X2hlYWRlcl93 aW5zb2NrMl9oIiA9IHh5ZXM7IHRoZW4gOg0KICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GDQoj ZGVmaW5lIEhBVkVfV0lOU09DSzJfSCAxDQpfQUNFT0YNCg0KZmkNCg0KZG9uZQ0KDQogIGZpDQog IGlmIHRlc3QgIiRhY19jdl9oZWFkZXJfd2luc29jazJfaCIgPSB5ZXM7IHRoZW4NCiAgICBIQVZF X1dJTlNPQ0syX0g9MQ0KICAgIFVOSVNURF9IX0hBVkVfV0lOU09DSzJfSD0xDQogICAgU1lTX0lP Q1RMX0hfSEFWRV9XSU5TT0NLMl9IPTENCiAgZWxzZQ0KICAgIEhBVkVfV0lOU09DSzJfSD0wDQog IGZpDQoNCg0KDQoNCiAgICBmb3IgZ2xfZnVuYyBpbiBzb2NrZXQgY29ubmVjdCBhY2NlcHQgYmlu ZCBnZXRwZWVybmFtZSBnZXRzb2NrbmFtZSBnZXRzb2Nrb3B0ICAgICBsaXN0ZW4gcmVjdiBzZW5k IHJlY3Zmcm9tIHNlbmR0byBzZXRzb2Nrb3B0IHNodXRkb3duIGFjY2VwdDQ7IGRvDQogICAgYXNf Z2xfU3ltYm9sPWAkYXNfZWNobyAiZ2xfY3ZfaGF2ZV9yYXdfZGVjbF8kZ2xfZnVuYyIgfCAkYXNf dHJfc2hgDQogICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVj a2luZyB3aGV0aGVyICRnbF9mdW5jIGlzIGRlY2xhcmVkIHdpdGhvdXQgYSBtYWNybyIgPiY1DQok YXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyICRnbF9mdW5jIGlzIGRlY2xhcmVkIHdpdGhvdXQg YSBtYWNyby4uLiAiID4mNjsgfQ0KaWYgZXZhbCBcJHskYXNfZ2xfU3ltYm9sKzp9IGZhbHNlOyB0 aGVuIDoNCiAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYNCmVsc2UNCiAgY2F0IGNvbmZkZWZz LmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dA0KLyogZW5kIGNvbmZkZWZzLmguICAqLw0K DQovKiBTb21lIHN5c3RlbXMgcmVxdWlyZSBwcmVyZXF1aXNpdGUgaGVhZGVycy4gICovDQojaW5j bHVkZSA8c3lzL3R5cGVzLmg+DQojaW5jbHVkZSA8c3lzL3NvY2tldC5oPg0KDQppbnQNCm1haW4g KCkNCnsNCiN1bmRlZiAkZ2xfZnVuYw0KICAodm9pZCkgJGdsX2Z1bmM7DQogIDsNCiAgcmV0dXJu IDA7DQp9DQpfQUNFT0YNCmlmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoN CiAgZXZhbCAiJGFzX2dsX1N5bWJvbD15ZXMiDQplbHNlDQogIGV2YWwgIiRhc19nbF9TeW1ib2w9 bm8iDQpmaQ0Kcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25m dGVzdC4kYWNfZXh0DQpmaQ0KZXZhbCBhY19yZXM9XCQkYXNfZ2xfU3ltYm9sDQoJICAgICAgIHsg JGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfcmVzIiA+ JjUNCiRhc19lY2hvICIkYWNfcmVzIiA+JjY7IH0NCiAgICAgaWYgZXZhbCB0ZXN0IFwieFwkIiRh c19nbF9TeW1ib2wiXCIgPSB4InllcyI7IHRoZW4gOg0KICBjYXQgPj5jb25mZGVmcy5oIDw8X0FD RU9GDQojZGVmaW5lIGAkYXNfZWNobyAiSEFWRV9SQVdfREVDTF8kZ2xfZnVuYyIgfCAkYXNfdHJf Y3BwYCAxDQpfQUNFT0YNCg0KICAgICAgICAgICAgICAgICAgICAgZXZhbCBhY19jdl9oYXZlX2Rl Y2xfJGdsX2Z1bmM9eWVzDQpmaQ0KICAgICAgZG9uZQ0KDQoNCg0KICAjIENvZGUgZnJvbSBtb2R1 bGUgc3lzX3N0YXQ6DQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCiAgICAgaWYgdGVz dCAkZ2xfY3ZfaGF2ZV9pbmNsdWRlX25leHQgPSB5ZXM7IHRoZW4NCiAgICAgICBnbF9jdl9uZXh0 X3N5c19zdGF0X2g9Jzwnc3lzL3N0YXQuaCc+Jw0KICAgICBlbHNlDQogICAgICAgeyAkYXNfZWNo byAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBhYnNvbHV0ZSBuYW1lIG9m IDxzeXMvc3RhdC5oPiIgPiY1DQokYXNfZWNob19uICJjaGVja2luZyBhYnNvbHV0ZSBuYW1lIG9m IDxzeXMvc3RhdC5oPi4uLiAiID4mNjsgfQ0KaWYgJHtnbF9jdl9uZXh0X3N5c19zdGF0X2grOn0g ZmFsc2U7IHRoZW4gOg0KICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNg0KZWxzZQ0KDQogICAg ICAgICAgICAgaWYgdGVzdCAkYWNfY3ZfaGVhZGVyX3N5c19zdGF0X2ggPSB5ZXM7IHRoZW4NCg0K DQogICAgICAgICAgICAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNf ZXh0DQovKiBlbmQgY29uZmRlZnMuaC4gICovDQojaW5jbHVkZSA8c3lzL3N0YXQuaD4NCg0KX0FD RU9GDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBjYXNlICIkaG9zdF9vcyIgaW4NCiAgICAgICAgICAgICAgICAgYWl4KikgZ2xf YWJzbmFtZV9jcHA9IiRhY19jcHAgLUMiIDs7DQogICAgICAgICAgICAgICAgICopICAgIGdsX2Fi c25hbWVfY3BwPSIkYWNfY3BwIiA7Ow0KICAgICAgICAgICAgICAgZXNhYw0KICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2xfY3ZfbmV4 dF9zeXNfc3RhdF9oPSciJ2AoZXZhbCAiJGdsX2Fic25hbWVfY3BwIGNvbmZ0ZXN0LiRhY19leHQi KSAyPiY1IHwNCiAgICAgICAgICAgICAgICAgIHNlZCAtbiAnXCMvc3lzL3N0YXQuaCN7DQogICAg ICAgICAgICAgICAgICAgIHMjLioiXCguKi9zeXMvc3RhdC5oXCkiLiojXDEjDQogICAgICAgICAg ICAgICAgICAgIHMjXi9bXi9dIy8vJiMNCiAgICAgICAgICAgICAgICAgICAgcA0KICAgICAgICAg ICAgICAgICAgICBxDQogICAgICAgICAgICAgICAgICB9J2AnIicNCiAgICAgICAgICBlbHNlDQog ICAgICAgICAgICAgICBnbF9jdl9uZXh0X3N5c19zdGF0X2g9Jzwnc3lzL3N0YXQuaCc+Jw0KICAg ICAgICAgICAgIGZpDQoNCg0KZmkNCnsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElO RU5PfTogcmVzdWx0OiAkZ2xfY3ZfbmV4dF9zeXNfc3RhdF9oIiA+JjUNCiRhc19lY2hvICIkZ2xf Y3ZfbmV4dF9zeXNfc3RhdF9oIiA+JjY7IH0NCiAgICAgZmkNCiAgICAgTkVYVF9TWVNfU1RBVF9I PSRnbF9jdl9uZXh0X3N5c19zdGF0X2gNCg0KICAgICBpZiB0ZXN0ICRnbF9jdl9oYXZlX2luY2x1 ZGVfbmV4dCA9IHllcyB8fCB0ZXN0ICRnbF9jdl9oYXZlX2luY2x1ZGVfbmV4dCA9IGJ1Z2d5OyB0 aGVuDQogICAgICAgIyBJTkNMVURFX05FWFRfQVNfRklSU1RfRElSRUNUSVZFPSdpbmNsdWRlX25l eHQnDQogICAgICAgZ2xfbmV4dF9hc19maXJzdF9kaXJlY3RpdmU9Jzwnc3lzL3N0YXQuaCc+Jw0K ICAgICBlbHNlDQogICAgICAgIyBJTkNMVURFX05FWFRfQVNfRklSU1RfRElSRUNUSVZFPSdpbmNs dWRlJw0KICAgICAgIGdsX25leHRfYXNfZmlyc3RfZGlyZWN0aXZlPSRnbF9jdl9uZXh0X3N5c19z dGF0X2gNCiAgICAgZmkNCiAgICAgTkVYVF9BU19GSVJTVF9ESVJFQ1RJVkVfU1lTX1NUQVRfSD0k Z2xfbmV4dF9hc19maXJzdF9kaXJlY3RpdmUNCg0KDQoNCg0KDQogICAgICBhY19mbl9jX2NoZWNr X3R5cGUgIiRMSU5FTk8iICJubGlua190IiAiYWNfY3ZfdHlwZV9ubGlua190IiAiI2luY2x1ZGUg PHN5cy90eXBlcy5oPg0KICAgICAjaW5jbHVkZSA8c3lzL3N0YXQuaD4NCiINCmlmIHRlc3QgIngk YWNfY3ZfdHlwZV9ubGlua190IiA9IHh5ZXM7IHRoZW4gOg0KDQplbHNlDQoNCiRhc19lY2hvICIj ZGVmaW5lIG5saW5rX3QgaW50IiA+PmNvbmZkZWZzLmgNCg0KZmkNCg0KDQoNCiAgICBmb3IgZ2xf ZnVuYyBpbiBmY2htb2RhdCBmc3RhdGF0IGZ1dGltZW5zIGxjaG1vZCBsc3RhdCBta2RpcmF0IG1r ZmlmbyBta2ZpZm9hdCAgICAgbWtub2QgbWtub2RhdCBzdGF0IHV0aW1lbnNhdDsgZG8NCiAgICBh c19nbF9TeW1ib2w9YCRhc19lY2hvICJnbF9jdl9oYXZlX3Jhd19kZWNsXyRnbF9mdW5jIiB8ICRh c190cl9zaGANCiAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNo ZWNraW5nIHdoZXRoZXIgJGdsX2Z1bmMgaXMgZGVjbGFyZWQgd2l0aG91dCBhIG1hY3JvIiA+JjUN CiRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgJGdsX2Z1bmMgaXMgZGVjbGFyZWQgd2l0aG91 dCBhIG1hY3JvLi4uICIgPiY2OyB9DQppZiBldmFsIFwkeyRhc19nbF9TeW1ib2wrOn0gZmFsc2U7 IHRoZW4gOg0KICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNg0KZWxzZQ0KICBjYXQgY29uZmRl ZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0DQovKiBlbmQgY29uZmRlZnMuaC4gICov DQojaW5jbHVkZSA8c3lzL3N0YXQuaD4NCg0KaW50DQptYWluICgpDQp7DQojdW5kZWYgJGdsX2Z1 bmMNCiAgKHZvaWQpICRnbF9mdW5jOw0KICA7DQogIHJldHVybiAwOw0KfQ0KX0FDRU9GDQppZiBh Y19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6DQogIGV2YWwgIiRhc19nbF9TeW1i b2w9eWVzIg0KZWxzZQ0KICBldmFsICIkYXNfZ2xfU3ltYm9sPW5vIg0KZmkNCnJtIC1mIGNvcmUg Y29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dA0KZmkNCmV2 YWwgYWNfcmVzPVwkJGFzX2dsX1N5bWJvbA0KCSAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHth c19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX3JlcyIgPiY1DQokYXNfZWNobyAiJGFjX3Jl cyIgPiY2OyB9DQogICAgIGlmIGV2YWwgdGVzdCBcInhcJCIkYXNfZ2xfU3ltYm9sIlwiID0geCJ5 ZXMiOyB0aGVuIDoNCiAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRg0KI2RlZmluZSBgJGFzX2Vj aG8gIkhBVkVfUkFXX0RFQ0xfJGdsX2Z1bmMiIHwgJGFzX3RyX2NwcGAgMQ0KX0FDRU9GDQoNCiAg ICAgICAgICAgICAgICAgICAgIGV2YWwgYWNfY3ZfaGF2ZV9kZWNsXyRnbF9mdW5jPXllcw0KZmkN CiAgICAgIGRvbmUNCg0KDQoNCiAgIyBDb2RlIGZyb20gbW9kdWxlIHN5c190aW1lOg0KDQoNCg0K DQogICMgQ29kZSBmcm9tIG1vZHVsZSBzeXNfdXRzbmFtZToNCg0KDQoNCg0KDQoNCg0KDQoNCg0K DQoNCiAgICAgaWYgdGVzdCAkZ2xfY3ZfaGF2ZV9pbmNsdWRlX25leHQgPSB5ZXM7IHRoZW4NCiAg ICAgICBnbF9jdl9uZXh0X3N5c191dHNuYW1lX2g9Jzwnc3lzL3V0c25hbWUuaCc+Jw0KICAgICBl bHNlDQogICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVj a2luZyBhYnNvbHV0ZSBuYW1lIG9mIDxzeXMvdXRzbmFtZS5oPiIgPiY1DQokYXNfZWNob19uICJj aGVja2luZyBhYnNvbHV0ZSBuYW1lIG9mIDxzeXMvdXRzbmFtZS5oPi4uLiAiID4mNjsgfQ0KaWYg JHtnbF9jdl9uZXh0X3N5c191dHNuYW1lX2grOn0gZmFsc2U7IHRoZW4gOg0KICAkYXNfZWNob19u ICIoY2FjaGVkKSAiID4mNg0KZWxzZQ0KDQogICAgICAgICAgICAgaWYgdGVzdCAkYWNfY3ZfaGVh ZGVyX3N5c191dHNuYW1lX2ggPSB5ZXM7IHRoZW4NCg0KDQogICAgICAgICAgICAgICBjYXQgY29u ZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0DQovKiBlbmQgY29uZmRlZnMuaC4g ICovDQojaW5jbHVkZSA8c3lzL3V0c25hbWUuaD4NCg0KX0FDRU9GDQogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICIkaG9z dF9vcyIgaW4NCiAgICAgICAgICAgICAgICAgYWl4KikgZ2xfYWJzbmFtZV9jcHA9IiRhY19jcHAg LUMiIDs7DQogICAgICAgICAgICAgICAgICopICAgIGdsX2Fic25hbWVfY3BwPSIkYWNfY3BwIiA7 Ow0KICAgICAgICAgICAgICAgZXNhYw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2xfY3ZfbmV4dF9zeXNfdXRzbmFtZV9oPSciJ2Ao ZXZhbCAiJGdsX2Fic25hbWVfY3BwIGNvbmZ0ZXN0LiRhY19leHQiKSAyPiY1IHwNCiAgICAgICAg ICAgICAgICAgIHNlZCAtbiAnXCMvc3lzL3V0c25hbWUuaCN7DQogICAgICAgICAgICAgICAgICAg IHMjLioiXCguKi9zeXMvdXRzbmFtZS5oXCkiLiojXDEjDQogICAgICAgICAgICAgICAgICAgIHMj Xi9bXi9dIy8vJiMNCiAgICAgICAgICAgICAgICAgICAgcA0KICAgICAgICAgICAgICAgICAgICBx DQogICAgICAgICAgICAgICAgICB9J2AnIicNCiAgICAgICAgICBlbHNlDQogICAgICAgICAgICAg ICBnbF9jdl9uZXh0X3N5c191dHNuYW1lX2g9Jzwnc3lzL3V0c25hbWUuaCc+Jw0KICAgICAgICAg ICAgIGZpDQoNCg0KZmkNCnsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTog cmVzdWx0OiAkZ2xfY3ZfbmV4dF9zeXNfdXRzbmFtZV9oIiA+JjUNCiRhc19lY2hvICIkZ2xfY3Zf bmV4dF9zeXNfdXRzbmFtZV9oIiA+JjY7IH0NCiAgICAgZmkNCiAgICAgTkVYVF9TWVNfVVRTTkFN RV9IPSRnbF9jdl9uZXh0X3N5c191dHNuYW1lX2gNCg0KICAgICBpZiB0ZXN0ICRnbF9jdl9oYXZl X2luY2x1ZGVfbmV4dCA9IHllcyB8fCB0ZXN0ICRnbF9jdl9oYXZlX2luY2x1ZGVfbmV4dCA9IGJ1 Z2d5OyB0aGVuDQogICAgICAgIyBJTkNMVURFX05FWFRfQVNfRklSU1RfRElSRUNUSVZFPSdpbmNs dWRlX25leHQnDQogICAgICAgZ2xfbmV4dF9hc19maXJzdF9kaXJlY3RpdmU9Jzwnc3lzL3V0c25h bWUuaCc+Jw0KICAgICBlbHNlDQogICAgICAgIyBJTkNMVURFX05FWFRfQVNfRklSU1RfRElSRUNU SVZFPSdpbmNsdWRlJw0KICAgICAgIGdsX25leHRfYXNfZmlyc3RfZGlyZWN0aXZlPSRnbF9jdl9u ZXh0X3N5c191dHNuYW1lX2gNCiAgICAgZmkNCiAgICAgTkVYVF9BU19GSVJTVF9ESVJFQ1RJVkVf U1lTX1VUU05BTUVfSD0kZ2xfbmV4dF9hc19maXJzdF9kaXJlY3RpdmUNCg0KDQoNCg0KICBpZiB0 ZXN0ICRhY19jdl9oZWFkZXJfc3lzX3V0c25hbWVfaCAhPSB5ZXM7IHRoZW4NCiAgICBIQVZFX1NZ U19VVFNOQU1FX0g9MA0KICAgIEhBVkVfU1RSVUNUX1VUU05BTUU9MA0KICBlbHNlDQogICAgSEFW RV9TWVNfVVRTTkFNRV9IPTENCiAgICBhY19mbl9jX2NoZWNrX3R5cGUgIiRMSU5FTk8iICJzdHJ1 Y3QgdXRzbmFtZSIgImFjX2N2X3R5cGVfc3RydWN0X3V0c25hbWUiICINCiNpbmNsdWRlIDxzeXMv dXRzbmFtZS5oPg0KDQoiDQppZiB0ZXN0ICJ4JGFjX2N2X3R5cGVfc3RydWN0X3V0c25hbWUiID0g eHllczsgdGhlbiA6DQoNCmNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YNCiNkZWZpbmUgSEFWRV9T VFJVQ1RfVVRTTkFNRSAxDQpfQUNFT0YNCg0KDQplbHNlDQogIEhBVkVfU1RSVUNUX1VUU05BTUU9 MA0KZmkNCg0KICBmaQ0KDQoNCg0KICAgIGZvciBnbF9mdW5jIGluIHVuYW1lOyBkbw0KICAgIGFz X2dsX1N5bWJvbD1gJGFzX2VjaG8gImdsX2N2X2hhdmVfcmF3X2RlY2xfJGdsX2Z1bmMiIHwgJGFz X3RyX3NoYA0KICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hl Y2tpbmcgd2hldGhlciAkZ2xfZnVuYyBpcyBkZWNsYXJlZCB3aXRob3V0IGEgbWFjcm8iID4mNQ0K JGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciAkZ2xfZnVuYyBpcyBkZWNsYXJlZCB3aXRob3V0 IGEgbWFjcm8uLi4gIiA+JjY7IH0NCmlmIGV2YWwgXCR7JGFzX2dsX1N5bWJvbCs6fSBmYWxzZTsg dGhlbiA6DQogICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2DQplbHNlDQogIGNhdCBjb25mZGVm cy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQNCi8qIGVuZCBjb25mZGVmcy5oLiAgKi8N CiNpbmNsdWRlIDxzeXMvdXRzbmFtZS5oPg0KDQppbnQNCm1haW4gKCkNCnsNCiN1bmRlZiAkZ2xf ZnVuYw0KICAodm9pZCkgJGdsX2Z1bmM7DQogIDsNCiAgcmV0dXJuIDA7DQp9DQpfQUNFT0YNCmlm IGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoNCiAgZXZhbCAiJGFzX2dsX1N5 bWJvbD15ZXMiDQplbHNlDQogIGV2YWwgIiRhc19nbF9TeW1ib2w9bm8iDQpmaQ0Kcm0gLWYgY29y ZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0DQpmaQ0K ZXZhbCBhY19yZXM9XCQkYXNfZ2xfU3ltYm9sDQoJICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZTok e2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfcmVzIiA+JjUNCiRhc19lY2hvICIkYWNf cmVzIiA+JjY7IH0NCiAgICAgaWYgZXZhbCB0ZXN0IFwieFwkIiRhc19nbF9TeW1ib2wiXCIgPSB4 InllcyI7IHRoZW4gOg0KICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GDQojZGVmaW5lIGAkYXNf ZWNobyAiSEFWRV9SQVdfREVDTF8kZ2xfZnVuYyIgfCAkYXNfdHJfY3BwYCAxDQpfQUNFT0YNCg0K ICAgICAgICAgICAgICAgICAgICAgZXZhbCBhY19jdl9oYXZlX2RlY2xfJGdsX2Z1bmM9eWVzDQpm aQ0KICAgICAgZG9uZQ0KDQoNCg0KICAjIENvZGUgZnJvbSBtb2R1bGUgc3lzX3dhaXQ6DQoNCg0K DQoNCg0KDQoNCg0KDQoNCg0KDQogICAgIGlmIHRlc3QgJGdsX2N2X2hhdmVfaW5jbHVkZV9uZXh0 ID0geWVzOyB0aGVuDQogICAgICAgZ2xfY3ZfbmV4dF9zeXNfd2FpdF9oPSc8J3N5cy93YWl0Lmgn PicNCiAgICAgZWxzZQ0KICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElO RU5PfTogY2hlY2tpbmcgYWJzb2x1dGUgbmFtZSBvZiA8c3lzL3dhaXQuaD4iID4mNQ0KJGFzX2Vj aG9fbiAiY2hlY2tpbmcgYWJzb2x1dGUgbmFtZSBvZiA8c3lzL3dhaXQuaD4uLi4gIiA+JjY7IH0N CmlmICR7Z2xfY3ZfbmV4dF9zeXNfd2FpdF9oKzp9IGZhbHNlOyB0aGVuIDoNCiAgJGFzX2VjaG9f biAiKGNhY2hlZCkgIiA+JjYNCmVsc2UNCg0KICAgICAgICAgICAgIGlmIHRlc3QgJGFjX2N2X2hl YWRlcl9zeXNfd2FpdF9oID0geWVzOyB0aGVuDQoNCg0KICAgICAgICAgICAgICAgY2F0IGNvbmZk ZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dA0KLyogZW5kIGNvbmZkZWZzLmguICAq Lw0KI2luY2x1ZGUgPHN5cy93YWl0Lmg+DQoNCl9BQ0VPRg0KICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAiJGhvc3Rfb3Mi IGluDQogICAgICAgICAgICAgICAgIGFpeCopIGdsX2Fic25hbWVfY3BwPSIkYWNfY3BwIC1DIiA7 Ow0KICAgICAgICAgICAgICAgICAqKSAgICBnbF9hYnNuYW1lX2NwcD0iJGFjX2NwcCIgOzsNCiAg ICAgICAgICAgICAgIGVzYWMNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGdsX2N2X25leHRfc3lzX3dhaXRfaD0nIidgKGV2YWwgIiRn bF9hYnNuYW1lX2NwcCBjb25mdGVzdC4kYWNfZXh0IikgMj4mNSB8DQogICAgICAgICAgICAgICAg ICBzZWQgLW4gJ1wjL3N5cy93YWl0Lmgjew0KICAgICAgICAgICAgICAgICAgICBzIy4qIlwoLiov c3lzL3dhaXQuaFwpIi4qI1wxIw0KICAgICAgICAgICAgICAgICAgICBzI14vW14vXSMvLyYjDQog ICAgICAgICAgICAgICAgICAgIHANCiAgICAgICAgICAgICAgICAgICAgcQ0KICAgICAgICAgICAg ICAgICAgfSdgJyInDQogICAgICAgICAgZWxzZQ0KICAgICAgICAgICAgICAgZ2xfY3ZfbmV4dF9z eXNfd2FpdF9oPSc8J3N5cy93YWl0LmgnPicNCiAgICAgICAgICAgICBmaQ0KDQoNCmZpDQp7ICRh c19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGdsX2N2X25leHRf c3lzX3dhaXRfaCIgPiY1DQokYXNfZWNobyAiJGdsX2N2X25leHRfc3lzX3dhaXRfaCIgPiY2OyB9 DQogICAgIGZpDQogICAgIE5FWFRfU1lTX1dBSVRfSD0kZ2xfY3ZfbmV4dF9zeXNfd2FpdF9oDQoN CiAgICAgaWYgdGVzdCAkZ2xfY3ZfaGF2ZV9pbmNsdWRlX25leHQgPSB5ZXMgfHwgdGVzdCAkZ2xf Y3ZfaGF2ZV9pbmNsdWRlX25leHQgPSBidWdneTsgdGhlbg0KICAgICAgICMgSU5DTFVERV9ORVhU X0FTX0ZJUlNUX0RJUkVDVElWRT0naW5jbHVkZV9uZXh0Jw0KICAgICAgIGdsX25leHRfYXNfZmly c3RfZGlyZWN0aXZlPSc8J3N5cy93YWl0LmgnPicNCiAgICAgZWxzZQ0KICAgICAgICMgSU5DTFVE RV9ORVhUX0FTX0ZJUlNUX0RJUkVDVElWRT0naW5jbHVkZScNCiAgICAgICBnbF9uZXh0X2FzX2Zp cnN0X2RpcmVjdGl2ZT0kZ2xfY3ZfbmV4dF9zeXNfd2FpdF9oDQogICAgIGZpDQogICAgIE5FWFRf QVNfRklSU1RfRElSRUNUSVZFX1NZU19XQUlUX0g9JGdsX25leHRfYXNfZmlyc3RfZGlyZWN0aXZl DQoNCg0KDQoNCg0KDQogICAgZm9yIGdsX2Z1bmMgaW4gd2FpdHBpZDsgZG8NCiAgICBhc19nbF9T eW1ib2w9YCRhc19lY2hvICJnbF9jdl9oYXZlX3Jhd19kZWNsXyRnbF9mdW5jIiB8ICRhc190cl9z aGANCiAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5n IHdoZXRoZXIgJGdsX2Z1bmMgaXMgZGVjbGFyZWQgd2l0aG91dCBhIG1hY3JvIiA+JjUNCiRhc19l Y2hvX24gImNoZWNraW5nIHdoZXRoZXIgJGdsX2Z1bmMgaXMgZGVjbGFyZWQgd2l0aG91dCBhIG1h Y3JvLi4uICIgPiY2OyB9DQppZiBldmFsIFwkeyRhc19nbF9TeW1ib2wrOn0gZmFsc2U7IHRoZW4g Og0KICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNg0KZWxzZQ0KICBjYXQgY29uZmRlZnMuaCAt IDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0DQovKiBlbmQgY29uZmRlZnMuaC4gICovDQojaW5j bHVkZSA8c3lzL3dhaXQuaD4NCmludA0KbWFpbiAoKQ0Kew0KI3VuZGVmICRnbF9mdW5jDQogICh2 b2lkKSAkZ2xfZnVuYzsNCiAgOw0KICByZXR1cm4gMDsNCn0NCl9BQ0VPRg0KaWYgYWNfZm5fY190 cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOg0KICBldmFsICIkYXNfZ2xfU3ltYm9sPXllcyIN CmVsc2UNCiAgZXZhbCAiJGFzX2dsX1N5bWJvbD1ubyINCmZpDQpybSAtZiBjb3JlIGNvbmZ0ZXN0 LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQNCmZpDQpldmFsIGFjX3Jl cz1cJCRhc19nbF9TeW1ib2wNCgkgICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5v LSRMSU5FTk99OiByZXN1bHQ6ICRhY19yZXMiID4mNQ0KJGFzX2VjaG8gIiRhY19yZXMiID4mNjsg fQ0KICAgICBpZiBldmFsIHRlc3QgXCJ4XCQiJGFzX2dsX1N5bWJvbCJcIiA9IHgieWVzIjsgdGhl biA6DQogIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YNCiNkZWZpbmUgYCRhc19lY2hvICJIQVZF X1JBV19ERUNMXyRnbF9mdW5jIiB8ICRhc190cl9jcHBgIDENCl9BQ0VPRg0KDQogICAgICAgICAg ICAgICAgICAgICBldmFsIGFjX2N2X2hhdmVfZGVjbF8kZ2xfZnVuYz15ZXMNCmZpDQogICAgICBk b25lDQoNCg0KDQogICMgQ29kZSBmcm9tIG1vZHVsZSB0ZW1wbmFtZToNCg0KDQoNCg0KDQoNCg0K DQoNCg0KDQogIGdsX0xJQk9CSlM9IiRnbF9MSUJPQkpTIHRlbXBuYW1lLiRhY19vYmpleHQiDQoN Cg0KICA6DQoNCg0KICAjIENvZGUgZnJvbSBtb2R1bGUgdGVybWlvczoNCg0KDQoNCg0KDQoNCg0K DQoNCg0KDQoNCiAgICAgaWYgdGVzdCAkZ2xfY3ZfaGF2ZV9pbmNsdWRlX25leHQgPSB5ZXM7IHRo ZW4NCiAgICAgICBnbF9jdl9uZXh0X3Rlcm1pb3NfaD0nPCd0ZXJtaW9zLmgnPicNCiAgICAgZWxz ZQ0KICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tp bmcgYWJzb2x1dGUgbmFtZSBvZiA8dGVybWlvcy5oPiIgPiY1DQokYXNfZWNob19uICJjaGVja2lu ZyBhYnNvbHV0ZSBuYW1lIG9mIDx0ZXJtaW9zLmg+Li4uICIgPiY2OyB9DQppZiAke2dsX2N2X25l eHRfdGVybWlvc19oKzp9IGZhbHNlOyB0aGVuIDoNCiAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+ JjYNCmVsc2UNCg0KICAgICAgICAgICAgIGlmIHRlc3QgJGFjX2N2X2hlYWRlcl90ZXJtaW9zX2gg PSB5ZXM7IHRoZW4NCg0KDQogICAgICAgICAgICAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9G ID5jb25mdGVzdC4kYWNfZXh0DQovKiBlbmQgY29uZmRlZnMuaC4gICovDQojaW5jbHVkZSA8dGVy bWlvcy5oPg0KDQpfQUNFT0YNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgIiRob3N0X29zIiBpbg0KICAgICAgICAgICAg ICAgICBhaXgqKSBnbF9hYnNuYW1lX2NwcD0iJGFjX2NwcCAtQyIgOzsNCiAgICAgICAgICAgICAg ICAgKikgICAgZ2xfYWJzbmFtZV9jcHA9IiRhY19jcHAiIDs7DQogICAgICAgICAgICAgICBlc2Fj DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBnbF9jdl9uZXh0X3Rlcm1pb3NfaD0nIidgKGV2YWwgIiRnbF9hYnNuYW1lX2NwcCBjb25m dGVzdC4kYWNfZXh0IikgMj4mNSB8DQogICAgICAgICAgICAgICAgICBzZWQgLW4gJ1wjL3Rlcm1p b3MuaCN7DQogICAgICAgICAgICAgICAgICAgIHMjLioiXCguKi90ZXJtaW9zLmhcKSIuKiNcMSMN CiAgICAgICAgICAgICAgICAgICAgcyNeL1teL10jLy8mIw0KICAgICAgICAgICAgICAgICAgICBw DQogICAgICAgICAgICAgICAgICAgIHENCiAgICAgICAgICAgICAgICAgIH0nYCciJw0KICAgICAg ICAgIGVsc2UNCiAgICAgICAgICAgICAgIGdsX2N2X25leHRfdGVybWlvc19oPSc8J3Rlcm1pb3Mu aCc+Jw0KICAgICAgICAgICAgIGZpDQoNCg0KZmkNCnsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xp bmVuby0kTElORU5PfTogcmVzdWx0OiAkZ2xfY3ZfbmV4dF90ZXJtaW9zX2giID4mNQ0KJGFzX2Vj aG8gIiRnbF9jdl9uZXh0X3Rlcm1pb3NfaCIgPiY2OyB9DQogICAgIGZpDQogICAgIE5FWFRfVEVS TUlPU19IPSRnbF9jdl9uZXh0X3Rlcm1pb3NfaA0KDQogICAgIGlmIHRlc3QgJGdsX2N2X2hhdmVf aW5jbHVkZV9uZXh0ID0geWVzIHx8IHRlc3QgJGdsX2N2X2hhdmVfaW5jbHVkZV9uZXh0ID0gYnVn Z3k7IHRoZW4NCiAgICAgICAjIElOQ0xVREVfTkVYVF9BU19GSVJTVF9ESVJFQ1RJVkU9J2luY2x1 ZGVfbmV4dCcNCiAgICAgICBnbF9uZXh0X2FzX2ZpcnN0X2RpcmVjdGl2ZT0nPCd0ZXJtaW9zLmgn PicNCiAgICAgZWxzZQ0KICAgICAgICMgSU5DTFVERV9ORVhUX0FTX0ZJUlNUX0RJUkVDVElWRT0n aW5jbHVkZScNCiAgICAgICBnbF9uZXh0X2FzX2ZpcnN0X2RpcmVjdGl2ZT0kZ2xfY3ZfbmV4dF90 ZXJtaW9zX2gNCiAgICAgZmkNCiAgICAgTkVYVF9BU19GSVJTVF9ESVJFQ1RJVkVfVEVSTUlPU19I PSRnbF9uZXh0X2FzX2ZpcnN0X2RpcmVjdGl2ZQ0KDQoNCg0KDQogIGlmIHRlc3QgJGFjX2N2X2hl YWRlcl90ZXJtaW9zX2ggIT0geWVzOyB0aGVuDQogICAgSEFWRV9URVJNSU9TX0g9MA0KICBmaQ0K DQoNCiAgICBmb3IgZ2xfZnVuYyBpbiB0Y2dldHNpZDsgZG8NCiAgICBhc19nbF9TeW1ib2w9YCRh c19lY2hvICJnbF9jdl9oYXZlX3Jhd19kZWNsXyRnbF9mdW5jIiB8ICRhc190cl9zaGANCiAgICB7 ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIg JGdsX2Z1bmMgaXMgZGVjbGFyZWQgd2l0aG91dCBhIG1hY3JvIiA+JjUNCiRhc19lY2hvX24gImNo ZWNraW5nIHdoZXRoZXIgJGdsX2Z1bmMgaXMgZGVjbGFyZWQgd2l0aG91dCBhIG1hY3JvLi4uICIg PiY2OyB9DQppZiBldmFsIFwkeyRhc19nbF9TeW1ib2wrOn0gZmFsc2U7IHRoZW4gOg0KICAkYXNf ZWNob19uICIoY2FjaGVkKSAiID4mNg0KZWxzZQ0KICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9G ID5jb25mdGVzdC4kYWNfZXh0DQovKiBlbmQgY29uZmRlZnMuaC4gICovDQojaW5jbHVkZSA8dGVy bWlvcy5oPg0KaW50DQptYWluICgpDQp7DQojdW5kZWYgJGdsX2Z1bmMNCiAgKHZvaWQpICRnbF9m dW5jOw0KICA7DQogIHJldHVybiAwOw0KfQ0KX0FDRU9GDQppZiBhY19mbl9jX3RyeV9jb21waWxl ICIkTElORU5PIjsgdGhlbiA6DQogIGV2YWwgIiRhc19nbF9TeW1ib2w9eWVzIg0KZWxzZQ0KICBl dmFsICIkYXNfZ2xfU3ltYm9sPW5vIg0KZmkNCnJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0 ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dA0KZmkNCmV2YWwgYWNfcmVzPVwkJGFzX2ds X1N5bWJvbA0KCSAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306 IHJlc3VsdDogJGFjX3JlcyIgPiY1DQokYXNfZWNobyAiJGFjX3JlcyIgPiY2OyB9DQogICAgIGlm IGV2YWwgdGVzdCBcInhcJCIkYXNfZ2xfU3ltYm9sIlwiID0geCJ5ZXMiOyB0aGVuIDoNCiAgY2F0 ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRg0KI2RlZmluZSBgJGFzX2VjaG8gIkhBVkVfUkFXX0RFQ0xf JGdsX2Z1bmMiIHwgJGFzX3RyX2NwcGAgMQ0KX0FDRU9GDQoNCiAgICAgICAgICAgICAgICAgICAg IGV2YWwgYWNfY3ZfaGF2ZV9kZWNsXyRnbF9mdW5jPXllcw0KZmkNCiAgICAgIGRvbmUNCg0KDQog ICMgQ29kZSBmcm9tIG1vZHVsZSB0aHJlYWRsaWI6DQoNCg0KDQoNCiAgIyBDb2RlIGZyb20gbW9k dWxlIHRpbWU6DQoNCg0KDQogICMgQ29kZSBmcm9tIG1vZHVsZSB0aW1lX3I6DQoNCg0KDQoNCg0K DQoNCiAgaWYgdGVzdCAkYWNfY3ZfaGF2ZV9kZWNsX2xvY2FsdGltZV9yID0gbm87IHRoZW4NCiAg ICBIQVZFX0RFQ0xfTE9DQUxUSU1FX1I9MA0KICBmaQ0KDQoNCiAgaWYgdGVzdCAkYWNfY3ZfZnVu Y19sb2NhbHRpbWVfciA9IHllczsgdGhlbg0KICAgIEhBVkVfTE9DQUxUSU1FX1I9MQ0KICAgIHsg JGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciBs b2NhbHRpbWVfciBpcyBjb21wYXRpYmxlIHdpdGggaXRzIFBPU0lYIHNpZ25hdHVyZSIgPiY1DQok YXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIGxvY2FsdGltZV9yIGlzIGNvbXBhdGlibGUgd2l0 aCBpdHMgUE9TSVggc2lnbmF0dXJlLi4uICIgPiY2OyB9DQppZiAke2dsX2N2X3RpbWVfcl9wb3Np eCs6fSBmYWxzZTsgdGhlbiA6DQogICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2DQplbHNlDQog IGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQNCi8qIGVuZCBjb25m ZGVmcy5oLiAgKi8NCiNpbmNsdWRlIDx0aW1lLmg+DQppbnQNCm1haW4gKCkNCnsNCi8qIFdlIGRv bid0IG5lZWQgdG8gYXBwZW5kICdyZXN0cmljdCdzIHRvIHRoZSBhcmd1bWVudCB0eXBlcywNCiAg ICAgICAgICAgICAgICAgZXZlbiB0aG91Z2ggdGhlIFBPU0lYIHNpZ25hdHVyZSBoYXMgdGhlICdy ZXN0cmljdCdzLA0KICAgICAgICAgICAgICAgICBzaW5jZSBDOTkgc2F5cyB0aGV5IGNhbid0IGFm ZmVjdCB0eXBlIGNvbXBhdGliaWxpdHkuICAqLw0KICAgICAgICAgICAgICBzdHJ1Y3QgdG0gKiAo KnB0cikgKHRpbWVfdCBjb25zdCAqLCBzdHJ1Y3QgdG0gKikgPSBsb2NhbHRpbWVfcjsNCiAgICAg ICAgICAgICAgaWYgKHB0cikgcmV0dXJuIDA7DQogICAgICAgICAgICAgIC8qIENoZWNrIHRoZSBy ZXR1cm4gdHlwZSBpcyBhIHBvaW50ZXIuDQogICAgICAgICAgICAgICAgIE9uIEhQLVVYIDEwIGl0 IGlzICdpbnQnLiAgKi8NCiAgICAgICAgICAgICAgKmxvY2FsdGltZV9yICgwLCAwKTsNCiAgOw0K ICByZXR1cm4gMDsNCn0NCg0KX0FDRU9GDQppZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5P IjsgdGhlbiA6DQogIGdsX2N2X3RpbWVfcl9wb3NpeD15ZXMNCmVsc2UNCiAgZ2xfY3ZfdGltZV9y X3Bvc2l4PW5vDQpmaQ0Kcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4 dCBjb25mdGVzdC4kYWNfZXh0DQoNCmZpDQp7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8t JExJTkVOT306IHJlc3VsdDogJGdsX2N2X3RpbWVfcl9wb3NpeCIgPiY1DQokYXNfZWNobyAiJGds X2N2X3RpbWVfcl9wb3NpeCIgPiY2OyB9DQogICAgaWYgdGVzdCAkZ2xfY3ZfdGltZV9yX3Bvc2l4 ID0geWVzOyB0aGVuDQogICAgICBSRVBMQUNFX0xPQ0FMVElNRV9SPTANCiAgICBlbHNlDQogICAg ICBSRVBMQUNFX0xPQ0FMVElNRV9SPTENCiAgICBmaQ0KICBlbHNlDQogICAgSEFWRV9MT0NBTFRJ TUVfUj0wDQogIGZpDQogIGlmIHRlc3QgJEhBVkVfTE9DQUxUSU1FX1IgPSAwIHx8IHRlc3QgJFJF UExBQ0VfTE9DQUxUSU1FX1IgPSAxOyB0aGVuDQoNCg0KDQoNCg0KDQoNCg0KICBnbF9MSUJPQkpT PSIkZ2xfTElCT0JKUyB0aW1lX3IuJGFjX29iamV4dCINCg0KDQogIDoNCg0KICBmaQ0KDQoNCg0K DQogIEdOVUxJQl9USU1FX1I9MQ0KDQoNCg0KJGFzX2VjaG8gIiNkZWZpbmUgR05VTElCX1RFU1Rf VElNRV9SIDEiID4+Y29uZmRlZnMuaA0KDQoNCg0KICAjIENvZGUgZnJvbSBtb2R1bGUgdGltZXNw ZWM6DQoNCg0KDQogICMgQ29kZSBmcm9tIG1vZHVsZSB0bHM6DQoNCg0KDQogICMgQ29kZSBmcm9t IG1vZHVsZSB0cmltOg0KICAjIENvZGUgZnJvbSBtb2R1bGUgdHpzZXQ6DQoNCg0KICB7ICRhc19l Y2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgdHpzZXQg Y2xvYmJlcnMgbG9jYWx0aW1lIGJ1ZmZlciIgPiY1DQokYXNfZWNob19uICJjaGVja2luZyB3aGV0 aGVyIHR6c2V0IGNsb2JiZXJzIGxvY2FsdGltZSBidWZmZXIuLi4gIiA+JjY7IH0NCmlmICR7Z2xf Y3ZfZnVuY190enNldF9jbG9iYmVyKzp9IGZhbHNlOyB0aGVuIDoNCiAgJGFzX2VjaG9fbiAiKGNh Y2hlZCkgIiA+JjYNCmVsc2UNCg0KICBpZiB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IHllczsg dGhlbiA6DQogIGdsX2N2X2Z1bmNfdHpzZXRfY2xvYmJlcj15ZXMNCmVsc2UNCiAgY2F0IGNvbmZk ZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dA0KLyogZW5kIGNvbmZkZWZzLmguICAq Lw0KDQojaW5jbHVkZSA8dGltZS5oPg0KI2luY2x1ZGUgPHN0ZGxpYi5oPg0KDQppbnQNCm1haW4g KCkNCnsNCiAgdGltZV90IHQxID0gODUzOTU4MTIxOw0KICBzdHJ1Y3QgdG0gKnAsIHM7DQogIHB1 dGVudiAoIlRaPUdNVDAiKTsNCiAgcCA9IGxvY2FsdGltZSAoJnQxKTsNCiAgcyA9ICpwOw0KICBw dXRlbnYgKCJUWj1FU1QrM0VEVCsyLE0xMC4xLjAvMDA6MDA6MDAsTTIuMy4wLzAwOjAwOjAwIik7 DQogIHR6c2V0ICgpOw0KICByZXR1cm4gKHAtPnRtX3llYXIgIT0gcy50bV95ZWFyDQogICAgICAg ICAgfHwgcC0+dG1fbW9uICE9IHMudG1fbW9uDQogICAgICAgICAgfHwgcC0+dG1fbWRheSAhPSBz LnRtX21kYXkNCiAgICAgICAgICB8fCBwLT50bV9ob3VyICE9IHMudG1faG91cg0KICAgICAgICAg IHx8IHAtPnRtX21pbiAhPSBzLnRtX21pbg0KICAgICAgICAgIHx8IHAtPnRtX3NlYyAhPSBzLnRt X3NlYyk7DQp9DQoNCl9BQ0VPRg0KaWYgYWNfZm5fY190cnlfcnVuICIkTElORU5PIjsgdGhlbiA6 DQogIGdsX2N2X2Z1bmNfdHpzZXRfY2xvYmJlcj1ubw0KZWxzZQ0KICBnbF9jdl9mdW5jX3R6c2V0 X2Nsb2JiZXI9eWVzDQpmaQ0Kcm0gLWYgY29yZSAqLmNvcmUgY29yZS5jb25mdGVzdC4qIGdtb24u b3V0IGJiLm91dCBjb25mdGVzdCRhY19leGVleHQgXA0KICBjb25mdGVzdC4kYWNfb2JqZXh0IGNv bmZ0ZXN0LmJlYW0gY29uZnRlc3QuJGFjX2V4dA0KZmkNCg0KZmkNCnsgJGFzX2VjaG8gIiRhc19t ZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkZ2xfY3ZfZnVuY190enNldF9jbG9iYmVy IiA+JjUNCiRhc19lY2hvICIkZ2xfY3ZfZnVuY190enNldF9jbG9iYmVyIiA+JjY7IH0NCg0KDQok YXNfZWNobyAiI2RlZmluZSBIQVZFX1JVTl9UWlNFVF9URVNUIDEiID4+Y29uZmRlZnMuaA0KDQoN CiAgaWYgdGVzdCAkZ2xfY3ZfZnVuY190enNldF9jbG9iYmVyID0geWVzOyB0aGVuDQoNCg0KDQoN Cg0KDQoNCg0KDQogIGdsX0xJQk9CSlM9IiRnbF9MSUJPQkpTIGdldHRpbWVvZmRheS4kYWNfb2Jq ZXh0Ig0KDQoNCiAgZm9yIGFjX2hlYWRlciBpbiBzeXMvdGltZWIuaA0KZG8gOg0KICBhY19mbl9j X2NoZWNrX2hlYWRlcl9tb25ncmVsICIkTElORU5PIiAic3lzL3RpbWViLmgiICJhY19jdl9oZWFk ZXJfc3lzX3RpbWViX2giICIkYWNfaW5jbHVkZXNfZGVmYXVsdCINCmlmIHRlc3QgIngkYWNfY3Zf aGVhZGVyX3N5c190aW1lYl9oIiA9IHh5ZXM7IHRoZW4gOg0KICBjYXQgPj5jb25mZGVmcy5oIDw8 X0FDRU9GDQojZGVmaW5lIEhBVkVfU1lTX1RJTUVCX0ggMQ0KX0FDRU9GDQoNCmZpDQoNCmRvbmUN Cg0KICBmb3IgYWNfZnVuYyBpbiBfZnRpbWUNCmRvIDoNCiAgYWNfZm5fY19jaGVja19mdW5jICIk TElORU5PIiAiX2Z0aW1lIiAiYWNfY3ZfZnVuY19fZnRpbWUiDQppZiB0ZXN0ICJ4JGFjX2N2X2Z1 bmNfX2Z0aW1lIiA9IHh5ZXM7IHRoZW4gOg0KICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GDQoj ZGVmaW5lIEhBVkVfX0ZUSU1FIDENCl9BQ0VPRg0KDQpmaQ0KZG9uZQ0KDQoNCg0KJGFzX2VjaG8g IiNkZWZpbmUgZ210aW1lIHJwbF9nbXRpbWUiID4+Y29uZmRlZnMuaA0KDQoNCiRhc19lY2hvICIj ZGVmaW5lIGxvY2FsdGltZSBycGxfbG9jYWx0aW1lIiA+PmNvbmZkZWZzLmgNCg0KDQoNCg0KJGFz X2VjaG8gIiNkZWZpbmUgdHpzZXQgcnBsX3R6c2V0IiA+PmNvbmZkZWZzLmgNCg0KDQokYXNfZWNo byAiI2RlZmluZSBUWlNFVF9DTE9CQkVSU19MT0NBTFRJTUUgMSIgPj5jb25mZGVmcy5oDQoNCiAg ZmkNCg0KICAjIENvZGUgZnJvbSBtb2R1bGUgdTY0Og0KDQogICMgQ29kZSBmcm9tIG1vZHVsZSB1 bmFtZToNCg0KDQoNCg0KDQoNCg0KDQoNCg0KICBmb3IgYWNfZnVuYyBpbiB1bmFtZQ0KZG8gOg0K ICBhY19mbl9jX2NoZWNrX2Z1bmMgIiRMSU5FTk8iICJ1bmFtZSIgImFjX2N2X2Z1bmNfdW5hbWUi DQppZiB0ZXN0ICJ4JGFjX2N2X2Z1bmNfdW5hbWUiID0geHllczsgdGhlbiA6DQogIGNhdCA+PmNv bmZkZWZzLmggPDxfQUNFT0YNCiNkZWZpbmUgSEFWRV9VTkFNRSAxDQpfQUNFT0YNCg0KZWxzZQ0K DQogICAgZ2xfTElCT0JKUz0iJGdsX0xJQk9CSlMgJGFjX2Z1bmMuJGFjX29iamV4dCINCg0KZmkN CmRvbmUNCg0KDQogIGlmIHRlc3QgJGFjX2N2X2Z1bmNfdW5hbWUgPSBubzsgdGhlbg0KICAgIEhB VkVfVU5BTUU9MA0KDQogIDoNCg0KICBmaQ0KDQoNCg0KDQogIEdOVUxJQl9VTkFNRT0xDQoNCg0K ICAjIENvZGUgZnJvbSBtb2R1bGUgdW5pY29kZWlvOg0KDQogICAgOg0KDQogICMgQ29kZSBmcm9t IG1vZHVsZSB1bmlzdGQ6DQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCiAgICAgaWYgdGVzdCAk Z2xfY3ZfaGF2ZV9pbmNsdWRlX25leHQgPSB5ZXM7IHRoZW4NCiAgICAgICBnbF9jdl9uZXh0X3Vu aXN0ZF9oPSc8J3VuaXN0ZC5oJz4nDQogICAgIGVsc2UNCiAgICAgICB7ICRhc19lY2hvICIkYXNf bWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGFic29sdXRlIG5hbWUgb2YgPHVuaXN0 ZC5oPiIgPiY1DQokYXNfZWNob19uICJjaGVja2luZyBhYnNvbHV0ZSBuYW1lIG9mIDx1bmlzdGQu aD4uLi4gIiA+JjY7IH0NCmlmICR7Z2xfY3ZfbmV4dF91bmlzdGRfaCs6fSBmYWxzZTsgdGhlbiA6 DQogICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2DQplbHNlDQoNCiAgICAgICAgICAgICBpZiB0 ZXN0ICRhY19jdl9oZWFkZXJfdW5pc3RkX2ggPSB5ZXM7IHRoZW4NCg0KDQogICAgICAgICAgICAg ICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0DQovKiBlbmQgY29u ZmRlZnMuaC4gICovDQojaW5jbHVkZSA8dW5pc3RkLmg+DQoNCl9BQ0VPRg0KICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAi JGhvc3Rfb3MiIGluDQogICAgICAgICAgICAgICAgIGFpeCopIGdsX2Fic25hbWVfY3BwPSIkYWNf Y3BwIC1DIiA7Ow0KICAgICAgICAgICAgICAgICAqKSAgICBnbF9hYnNuYW1lX2NwcD0iJGFjX2Nw cCIgOzsNCiAgICAgICAgICAgICAgIGVzYWMNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsX2N2X25leHRfdW5pc3RkX2g9JyInYChl dmFsICIkZ2xfYWJzbmFtZV9jcHAgY29uZnRlc3QuJGFjX2V4dCIpIDI+JjUgfA0KICAgICAgICAg ICAgICAgICAgc2VkIC1uICdcIy91bmlzdGQuaCN7DQogICAgICAgICAgICAgICAgICAgIHMjLioi XCguKi91bmlzdGQuaFwpIi4qI1wxIw0KICAgICAgICAgICAgICAgICAgICBzI14vW14vXSMvLyYj DQogICAgICAgICAgICAgICAgICAgIHANCiAgICAgICAgICAgICAgICAgICAgcQ0KICAgICAgICAg ICAgICAgICAgfSdgJyInDQogICAgICAgICAgZWxzZQ0KICAgICAgICAgICAgICAgZ2xfY3ZfbmV4 dF91bmlzdGRfaD0nPCd1bmlzdGQuaCc+Jw0KICAgICAgICAgICAgIGZpDQoNCg0KZmkNCnsgJGFz X2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkZ2xfY3ZfbmV4dF91 bmlzdGRfaCIgPiY1DQokYXNfZWNobyAiJGdsX2N2X25leHRfdW5pc3RkX2giID4mNjsgfQ0KICAg ICBmaQ0KICAgICBORVhUX1VOSVNURF9IPSRnbF9jdl9uZXh0X3VuaXN0ZF9oDQoNCiAgICAgaWYg dGVzdCAkZ2xfY3ZfaGF2ZV9pbmNsdWRlX25leHQgPSB5ZXMgfHwgdGVzdCAkZ2xfY3ZfaGF2ZV9p bmNsdWRlX25leHQgPSBidWdneTsgdGhlbg0KICAgICAgICMgSU5DTFVERV9ORVhUX0FTX0ZJUlNU X0RJUkVDVElWRT0naW5jbHVkZV9uZXh0Jw0KICAgICAgIGdsX25leHRfYXNfZmlyc3RfZGlyZWN0 aXZlPSc8J3VuaXN0ZC5oJz4nDQogICAgIGVsc2UNCiAgICAgICAjIElOQ0xVREVfTkVYVF9BU19G SVJTVF9ESVJFQ1RJVkU9J2luY2x1ZGUnDQogICAgICAgZ2xfbmV4dF9hc19maXJzdF9kaXJlY3Rp dmU9JGdsX2N2X25leHRfdW5pc3RkX2gNCiAgICAgZmkNCiAgICAgTkVYVF9BU19GSVJTVF9ESVJF Q1RJVkVfVU5JU1REX0g9JGdsX25leHRfYXNfZmlyc3RfZGlyZWN0aXZlDQoNCg0KDQoNCiAgaWYg dGVzdCAkYWNfY3ZfaGVhZGVyX3VuaXN0ZF9oID0geWVzOyB0aGVuDQogICAgSEFWRV9VTklTVERf SD0xDQogIGVsc2UNCiAgICBIQVZFX1VOSVNURF9IPTANCiAgZmkNCg0KDQoNCiAgICBmb3IgZ2xf ZnVuYyBpbiBjaG93biBkdXAyIGR1cDMgZW52aXJvbiBldWlkYWNjZXNzIGZhY2Nlc3NhdCBmY2hk aXIgZmNob3duYXQgICAgIGZzeW5jIGZ0cnVuY2F0ZSBnZXRjd2QgZ2V0ZG9tYWlubmFtZSBnZXRk dGFibGVzaXplIGdldGdyb3VwcyAgICAgZ2V0aG9zdG5hbWUgZ2V0bG9naW4gZ2V0bG9naW5fciBn ZXRwYWdlc2l6ZSBnZXR1c2Vyc2hlbGwgc2V0dXNlcnNoZWxsICAgICBlbmR1c2Vyc2hlbGwgbGNo b3duIGxpbmsgbGlua2F0IGxzZWVrIHBpcGUgcGlwZTIgcHJlYWQgcHdyaXRlIHJlYWRsaW5rICAg ICByZWFkbGlua2F0IHJtZGlyIHNsZWVwIHN5bWxpbmsgc3ltbGlua2F0IHR0eW5hbWVfciB1bmxp bmsgdW5saW5rYXQgICAgIHVzbGVlcDsgZG8NCiAgICBhc19nbF9TeW1ib2w9YCRhc19lY2hvICJn bF9jdl9oYXZlX3Jhd19kZWNsXyRnbF9mdW5jIiB8ICRhc190cl9zaGANCiAgICB7ICRhc19lY2hv ICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgJGdsX2Z1bmMg aXMgZGVjbGFyZWQgd2l0aG91dCBhIG1hY3JvIiA+JjUNCiRhc19lY2hvX24gImNoZWNraW5nIHdo ZXRoZXIgJGdsX2Z1bmMgaXMgZGVjbGFyZWQgd2l0aG91dCBhIG1hY3JvLi4uICIgPiY2OyB9DQpp ZiBldmFsIFwkeyRhc19nbF9TeW1ib2wrOn0gZmFsc2U7IHRoZW4gOg0KICAkYXNfZWNob19uICIo Y2FjaGVkKSAiID4mNg0KZWxzZQ0KICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVz dC4kYWNfZXh0DQovKiBlbmQgY29uZmRlZnMuaC4gICovDQojaW5jbHVkZSA8dW5pc3RkLmg+DQov KiBTb21lIHN5c3RlbXMgZGVjbGFyZSB2YXJpb3VzIGl0ZW1zIGluIHRoZSB3cm9uZyBoZWFkZXJz LiAgKi8NCiNpZiAhKGRlZmluZWQgX19HTElCQ19fICYmICFkZWZpbmVkIF9fVUNMSUJDX18pDQoj IGluY2x1ZGUgPGZjbnRsLmg+DQojIGluY2x1ZGUgPHN0ZGlvLmg+DQojIGluY2x1ZGUgPHN0ZGxp Yi5oPg0KIyBpZiAoZGVmaW5lZCBfV0lOMzIgfHwgZGVmaW5lZCBfX1dJTjMyX18pICYmICEgZGVm aW5lZCBfX0NZR1dJTl9fDQojICBpbmNsdWRlIDxpby5oPg0KIyBlbmRpZg0KI2VuZGlmDQoNCmlu dA0KbWFpbiAoKQ0Kew0KI3VuZGVmICRnbF9mdW5jDQogICh2b2lkKSAkZ2xfZnVuYzsNCiAgOw0K ICByZXR1cm4gMDsNCn0NCl9BQ0VPRg0KaWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7 IHRoZW4gOg0KICBldmFsICIkYXNfZ2xfU3ltYm9sPXllcyINCmVsc2UNCiAgZXZhbCAiJGFzX2ds X1N5bWJvbD1ubyINCmZpDQpybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2Jq ZXh0IGNvbmZ0ZXN0LiRhY19leHQNCmZpDQpldmFsIGFjX3Jlcz1cJCRhc19nbF9TeW1ib2wNCgkg ICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRh Y19yZXMiID4mNQ0KJGFzX2VjaG8gIiRhY19yZXMiID4mNjsgfQ0KICAgICBpZiBldmFsIHRlc3Qg XCJ4XCQiJGFzX2dsX1N5bWJvbCJcIiA9IHgieWVzIjsgdGhlbiA6DQogIGNhdCA+PmNvbmZkZWZz LmggPDxfQUNFT0YNCiNkZWZpbmUgYCRhc19lY2hvICJIQVZFX1JBV19ERUNMXyRnbF9mdW5jIiB8 ICRhc190cl9jcHBgIDENCl9BQ0VPRg0KDQogICAgICAgICAgICAgICAgICAgICBldmFsIGFjX2N2 X2hhdmVfZGVjbF8kZ2xfZnVuYz15ZXMNCmZpDQogICAgICBkb25lDQoNCg0KICAjIENvZGUgZnJv bSBtb2R1bGUgdW5pc3RkLXNhZmVyOg0KDQoNCg0KDQoNCg0KDQoNCg0KDQogIGdsX0xJQk9CSlM9 IiRnbF9MSUJPQkpTIGR1cC1zYWZlci4kYWNfb2JqZXh0Ig0KDQoNCg0KDQoNCg0KDQoNCg0KICBn bF9MSUJPQkpTPSIkZ2xfTElCT0JKUyBmZC1zYWZlci4kYWNfb2JqZXh0Ig0KDQoNCg0KDQoNCg0K DQoNCg0KICBnbF9MSUJPQkpTPSIkZ2xfTElCT0JKUyBwaXBlLXNhZmVyLiRhY19vYmpleHQiDQoN Cg0KICAjIENvZGUgZnJvbSBtb2R1bGUgdW5pc3RyL2Jhc2U6DQoNCg0KICAgICAgaWYgIHsgdGVz dCAiJEhBVkVfTElCVU5JU1RSSU5HIiAhPSB5ZXMgXA0KICAgIHx8IHsNCg0KDQoNCiAgICAgICAg ICAgIHRlc3QgJExJQlVOSVNUUklOR19WRVJTSU9OX01BSk9SIC1sdCAwIFwNCiAgICAgICAgICAg IHx8IHsgdGVzdCAkTElCVU5JU1RSSU5HX1ZFUlNJT05fTUFKT1IgLWVxIDAgXA0KICAgICAgICAg ICAgICAgICAmJiB7IHRlc3QgJExJQlVOSVNUUklOR19WRVJTSU9OX01JTk9SIC1sdCA5IFwNCiAg ICAgICAgICAgICAgICAgICAgICB8fCB7IHRlc3QgJExJQlVOSVNUUklOR19WRVJTSU9OX01JTk9S IC1lcSA5IFwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIHRlc3QgJExJQlVOSVNUUklO R19WRVJTSU9OX1NVQk1JTk9SIC1sdCAyDQogICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAg ICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICB9DQoNCg0KDQoNCiAgICAgICB9DQog IH07IHRoZW4NCiAgICBMSUJVTklTVFJJTkdfVU5JU1RSX0g9J3VuaXN0ci5oJw0KICBlbHNlDQog ICAgTElCVU5JU1RSSU5HX1VOSVNUUl9IPQ0KICBmaQ0KDQoNCiAgIyBDb2RlIGZyb20gbW9kdWxl IHVuaXN0ci91OC11Y3RvbWI6DQoNCg0KY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRg0KI2RlZmlu ZSBHTlVMSUJfVU5JU1RSX1U4X1VDVE9NQiAxDQpfQUNFT0YNCg0KDQoNCg0KICAgICAgIGlmICB7 IHRlc3QgIiRIQVZFX0xJQlVOSVNUUklORyIgIT0geWVzIFwNCiAgICB8fCB7DQoNCg0KDQogICAg ICAgICAgICB0ZXN0ICRMSUJVTklTVFJJTkdfVkVSU0lPTl9NQUpPUiAtbHQgMCBcDQogICAgICAg ICAgICB8fCB7IHRlc3QgJExJQlVOSVNUUklOR19WRVJTSU9OX01BSk9SIC1lcSAwIFwNCiAgICAg ICAgICAgICAgICAgJiYgeyB0ZXN0ICRMSUJVTklTVFJJTkdfVkVSU0lPTl9NSU5PUiAtbHQgOSBc DQogICAgICAgICAgICAgICAgICAgICAgfHwgeyB0ZXN0ICRMSUJVTklTVFJJTkdfVkVSU0lPTl9N SU5PUiAtZXEgOSBcDQogICAgICAgICAgICAgICAgICAgICAgICAgICAmJiB0ZXN0ICRMSUJVTklT VFJJTkdfVkVSU0lPTl9TVUJNSU5PUiAtbHQgMA0KICAgICAgICAgICAgICAgICAgICAgICAgIH0N CiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgfQ0KDQoNCg0KDQogICAgICAg fQ0KICB9OyB0aGVuDQogIExJQlVOSVNUUklOR19DT01QSUxFX1VOSVNUUl9VOF9VQ1RPTUJfVFJV RT0NCiAgTElCVU5JU1RSSU5HX0NPTVBJTEVfVU5JU1RSX1U4X1VDVE9NQl9GQUxTRT0nIycNCmVs c2UNCiAgTElCVU5JU1RSSU5HX0NPTVBJTEVfVU5JU1RSX1U4X1VDVE9NQl9UUlVFPScjJw0KICBM SUJVTklTVFJJTkdfQ09NUElMRV9VTklTVFJfVThfVUNUT01CX0ZBTFNFPQ0KZmkNCg0KDQogICMg Q29kZSBmcm9tIG1vZHVsZSB1bml0eXBlczoNCg0KDQogICAgICBpZiAgeyB0ZXN0ICIkSEFWRV9M SUJVTklTVFJJTkciICE9IHllcyBcDQogICAgfHwgew0KDQoNCg0KICAgICAgICAgICAgdGVzdCAk TElCVU5JU1RSSU5HX1ZFUlNJT05fTUFKT1IgLWx0IDAgXA0KICAgICAgICAgICAgfHwgeyB0ZXN0 ICRMSUJVTklTVFJJTkdfVkVSU0lPTl9NQUpPUiAtZXEgMCBcDQogICAgICAgICAgICAgICAgICYm IHsgdGVzdCAkTElCVU5JU1RSSU5HX1ZFUlNJT05fTUlOT1IgLWx0IDkgXA0KICAgICAgICAgICAg ICAgICAgICAgIHx8IHsgdGVzdCAkTElCVU5JU1RSSU5HX1ZFUlNJT05fTUlOT1IgLWVxIDkgXA0K ICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgdGVzdCAkTElCVU5JU1RSSU5HX1ZFUlNJT05f U1VCTUlOT1IgLWx0IDANCiAgICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAg ICAgICAgIH0NCiAgICAgICAgICAgICAgIH0NCg0KDQoNCg0KICAgICAgIH0NCiAgfTsgdGhlbg0K ICAgIExJQlVOSVNUUklOR19VTklUWVBFU19IPSd1bml0eXBlcy5oJw0KICBlbHNlDQogICAgTElC VU5JU1RSSU5HX1VOSVRZUEVTX0g9DQogIGZpDQoNCg0KICAjIENvZGUgZnJvbSBtb2R1bGUgdW5p d2lkdGgvYmFzZToNCg0KDQogICAgICBpZiAgeyB0ZXN0ICIkSEFWRV9MSUJVTklTVFJJTkciICE9 IHllcyBcDQogICAgfHwgew0KDQoNCg0KICAgICAgICAgICAgdGVzdCAkTElCVU5JU1RSSU5HX1ZF UlNJT05fTUFKT1IgLWx0IDAgXA0KICAgICAgICAgICAgfHwgeyB0ZXN0ICRMSUJVTklTVFJJTkdf VkVSU0lPTl9NQUpPUiAtZXEgMCBcDQogICAgICAgICAgICAgICAgICYmIHsgdGVzdCAkTElCVU5J U1RSSU5HX1ZFUlNJT05fTUlOT1IgLWx0IDkgXA0KICAgICAgICAgICAgICAgICAgICAgIHx8IHsg dGVzdCAkTElCVU5JU1RSSU5HX1ZFUlNJT05fTUlOT1IgLWVxIDkgXA0KICAgICAgICAgICAgICAg ICAgICAgICAgICAgJiYgdGVzdCAkTElCVU5JU1RSSU5HX1ZFUlNJT05fU1VCTUlOT1IgLWx0IDAN CiAgICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAg ICAgICAgICAgIH0NCg0KDQoNCg0KICAgICAgIH0NCiAgfTsgdGhlbg0KICAgIExJQlVOSVNUUklO R19VTklXSURUSF9IPSd1bml3aWR0aC5oJw0KICBlbHNlDQogICAgTElCVU5JU1RSSU5HX1VOSVdJ RFRIX0g9DQogIGZpDQoNCg0KICAjIENvZGUgZnJvbSBtb2R1bGUgdW5pd2lkdGgvd2lkdGg6DQoN Cg0KICAgICAgIGlmICB7IHRlc3QgIiRIQVZFX0xJQlVOSVNUUklORyIgIT0geWVzIFwNCiAgICB8 fCB7DQoNCg0KDQogICAgICAgICAgICB0ZXN0ICRMSUJVTklTVFJJTkdfVkVSU0lPTl9NQUpPUiAt bHQgMCBcDQogICAgICAgICAgICB8fCB7IHRlc3QgJExJQlVOSVNUUklOR19WRVJTSU9OX01BSk9S IC1lcSAwIFwNCiAgICAgICAgICAgICAgICAgJiYgeyB0ZXN0ICRMSUJVTklTVFJJTkdfVkVSU0lP Tl9NSU5PUiAtbHQgOSBcDQogICAgICAgICAgICAgICAgICAgICAgfHwgeyB0ZXN0ICRMSUJVTklT VFJJTkdfVkVSU0lPTl9NSU5PUiAtZXEgOSBcDQogICAgICAgICAgICAgICAgICAgICAgICAgICAm JiB0ZXN0ICRMSUJVTklTVFJJTkdfVkVSU0lPTl9TVUJNSU5PUiAtbHQgNA0KICAgICAgICAgICAg ICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgfQ0K DQoNCg0KDQogICAgICAgfQ0KICB9OyB0aGVuDQogIExJQlVOSVNUUklOR19DT01QSUxFX1VOSVdJ RFRIX1dJRFRIX1RSVUU9DQogIExJQlVOSVNUUklOR19DT01QSUxFX1VOSVdJRFRIX1dJRFRIX0ZB TFNFPScjJw0KZWxzZQ0KICBMSUJVTklTVFJJTkdfQ09NUElMRV9VTklXSURUSF9XSURUSF9UUlVF PScjJw0KICBMSUJVTklTVFJJTkdfQ09NUElMRV9VTklXSURUSF9XSURUSF9GQUxTRT0NCmZpDQoN Cg0KICAjIENvZGUgZnJvbSBtb2R1bGUgdW5saW5rOg0KDQoNCg0KICAgIHsgJGFzX2VjaG8gIiRh c19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciB1bmxpbmsgaG9ub3Jz IHRyYWlsaW5nIHNsYXNoZXMiID4mNQ0KJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciB1bmxp bmsgaG9ub3JzIHRyYWlsaW5nIHNsYXNoZXMuLi4gIiA+JjY7IH0NCmlmICR7Z2xfY3ZfZnVuY191 bmxpbmtfaG9ub3JzX3NsYXNoZXMrOn0gZmFsc2U7IHRoZW4gOg0KICAkYXNfZWNob19uICIoY2Fj aGVkKSAiID4mNg0KZWxzZQ0KICB0b3VjaCBjb25mdGVzdC5maWxlDQogICAgICMgQXNzdW1lIHRo YXQgaWYgd2UgaGF2ZSBsc3RhdCwgd2UgY2FuIGFsc28gY2hlY2sgc3ltbGlua3MuDQogICAgIGlm IHRlc3QgJGFjX2N2X2Z1bmNfbHN0YXQgPSB5ZXM7IHRoZW4NCiAgICAgICBsbiAtcyBjb25mdGVz dC5maWxlIGNvbmZ0ZXN0Lmxuaw0KICAgICBmaQ0KICAgICBpZiB0ZXN0ICIkY3Jvc3NfY29tcGls aW5nIiA9IHllczsgdGhlbiA6DQogIGdsX2N2X2Z1bmNfdW5saW5rX2hvbm9yc19zbGFzaGVzPSJn dWVzc2luZyBubyINCmVsc2UNCiAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3Qu JGFjX2V4dA0KLyogZW5kIGNvbmZkZWZzLmguICAqLw0KI2luY2x1ZGUgPHVuaXN0ZC5oPg0KICAg ICAgICAgICAjaW5jbHVkZSA8ZXJybm8uaD4NCg0KaW50DQptYWluICgpDQp7DQppbnQgcmVzdWx0 ID0gMDsNCiAgICAgICAgICAgaWYgKCF1bmxpbmsgKCJjb25mdGVzdC5maWxlLyIpKQ0KICAgICAg ICAgICAgIHJlc3VsdCB8PSAxOw0KICAgICAgICAgICBlbHNlIGlmIChlcnJubyAhPSBFTk9URElS KQ0KICAgICAgICAgICAgIHJlc3VsdCB8PSAyOw0KI2lmIEhBVkVfTFNUQVQNCiAgICAgICAgICAg aWYgKCF1bmxpbmsgKCJjb25mdGVzdC5sbmsvIikpDQogICAgICAgICAgICAgcmVzdWx0IHw9IDQ7 DQogICAgICAgICAgIGVsc2UgaWYgKGVycm5vICE9IEVOT1RESVIpDQogICAgICAgICAgICAgcmVz dWx0IHw9IDg7DQojZW5kaWYNCiAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsNCg0KICA7DQogIHJl dHVybiAwOw0KfQ0KX0FDRU9GDQppZiBhY19mbl9jX3RyeV9ydW4gIiRMSU5FTk8iOyB0aGVuIDoN CiAgZ2xfY3ZfZnVuY191bmxpbmtfaG9ub3JzX3NsYXNoZXM9eWVzDQplbHNlDQogIGdsX2N2X2Z1 bmNfdW5saW5rX2hvbm9yc19zbGFzaGVzPW5vDQpmaQ0Kcm0gLWYgY29yZSAqLmNvcmUgY29yZS5j b25mdGVzdC4qIGdtb24ub3V0IGJiLm91dCBjb25mdGVzdCRhY19leGVleHQgXA0KICBjb25mdGVz dC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LmJlYW0gY29uZnRlc3QuJGFjX2V4dA0KZmkNCg0KICAgICBy bSAtZiBjb25mdGVzdC5maWxlIGNvbmZ0ZXN0Lmxuaw0KZmkNCnsgJGFzX2VjaG8gIiRhc19tZTok e2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkZ2xfY3ZfZnVuY191bmxpbmtfaG9ub3JzX3Ns YXNoZXMiID4mNQ0KJGFzX2VjaG8gIiRnbF9jdl9mdW5jX3VubGlua19ob25vcnNfc2xhc2hlcyIg PiY2OyB9DQogICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNo ZWNraW5nIHdoZXRoZXIgdW5saW5rIG9mIGEgcGFyZW50IGRpcmVjdG9yeSBmYWlscyBhcyBpdCBz aG91bGQiID4mNQ0KJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciB1bmxpbmsgb2YgYSBwYXJl bnQgZGlyZWN0b3J5IGZhaWxzIGFzIGl0IHNob3VsZC4uLiAiID4mNjsgfQ0KaWYgJHtnbF9jdl9m dW5jX3VubGlua19wYXJlbnRfZmFpbHMrOn0gZmFsc2U7IHRoZW4gOg0KICAkYXNfZWNob19uICIo Y2FjaGVkKSAiID4mNg0KZWxzZQ0KICBjYXNlICIkaG9zdF9vcyIgaW4NCiAgICAgICBkYXJ3aW4q KQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg aWYgew0KICAgICAgICAgICAgICAjIFVzZSB0aGUgbWt0ZW1wIHByb2dyYW0gaWYgYXZhaWxhYmxl LiBJZiBub3QgYXZhaWxhYmxlLCBoaWRlIHRoZSBlcnJvcg0KICAgICAgICAgICAgICAjIG1lc3Nh Z2UuDQogICAgICAgICAgICAgIHRtcD1gKHVtYXNrIDA3NyAmJiBta3RlbXAgLWQgL3RtcC9ndFhY WFhYWCkgMj4vZGV2L251bGxgICYmDQogICAgICAgICAgICAgIHRlc3QgLW4gIiR0bXAiICYmIHRl c3QgLWQgIiR0bXAiDQogICAgICAgICAgICB9IHx8DQogICAgICAgICAgICB7DQogICAgICAgICAg ICAgICMgVXNlIGEgc2ltcGxlIG1rZGlyIGNvbW1hbmQuIEl0IGlzIGd1YXJhbnRlZWQgdG8gZmFp bCBpZiB0aGUgZGlyZWN0b3J5DQogICAgICAgICAgICAgICMgYWxyZWFkeSBleGlzdHMuICAkUkFO RE9NIGlzIGJhc2ggc3BlY2lmaWMgYW5kIGV4cGFuZHMgdG8gZW1wdHkgaW4gc2hlbGxzDQogICAg ICAgICAgICAgICMgb3RoZXIgdGhhbiBiYXNoLCBrc2ggYW5kIHpzaC4gIEl0cyB1c2UgZG9lcyBu b3QgaW5jcmVhc2Ugc2VjdXJpdHk7DQogICAgICAgICAgICAgICMgcmF0aGVyLCBpdCBtaW5pbWl6 ZXMgdGhlIHByb2JhYmlsaXR5IG9mIGZhaWx1cmUgaW4gYSB2ZXJ5IGNsdXR0ZXJlZCAvdG1wDQog ICAgICAgICAgICAgICMgZGlyZWN0b3J5Lg0KICAgICAgICAgICAgICB0bXA9L3RtcC9ndCQkLSRS QU5ET00NCiAgICAgICAgICAgICAgKHVtYXNrIDA3NyAmJiBta2RpciAiJHRtcCIpDQogICAgICAg ICAgICB9OyB0aGVuDQogICAgICAgICAgIG1rZGlyICIkdG1wL3N1YmRpciINCiAgICAgICAgICAg R0xfU1VCRElSX0ZPUl9VTkxJTks9IiR0bXAvc3ViZGlyIg0KICAgICAgICAgICBleHBvcnQgR0xf U1VCRElSX0ZPUl9VTkxJTksNCiAgICAgICAgICAgaWYgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIg PSB5ZXM7IHRoZW4gOg0KICBnbF9jdl9mdW5jX3VubGlua19wYXJlbnRfZmFpbHM9Imd1ZXNzaW5n IG5vIg0KZWxzZQ0KICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0 DQovKiBlbmQgY29uZmRlZnMuaC4gICovDQoNCiAgICAgICAgICAgICAgICAjaW5jbHVkZSA8c3Rk bGliLmg+DQogICAgICAgICAgICAgICAgI2luY2x1ZGUgPHVuaXN0ZC5oPg0KICAgICAgICAgICAg ICAgIGludCBtYWluICgpDQogICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgaW50 IHJlc3VsdCA9IDA7DQogICAgICAgICAgICAgICAgICBpZiAoY2hkaXIgKGdldGVudiAoIkdMX1NV QkRJUl9GT1JfVU5MSU5LIikpICE9IDApDQogICAgICAgICAgICAgICAgICAgIHJlc3VsdCB8PSAx Ow0KICAgICAgICAgICAgICAgICAgZWxzZSBpZiAodW5saW5rICgiLi4iKSA9PSAwKQ0KICAgICAg ICAgICAgICAgICAgICByZXN1bHQgfD0gMjsNCiAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1 bHQ7DQogICAgICAgICAgICAgICAgfQ0KDQpfQUNFT0YNCmlmIGFjX2ZuX2NfdHJ5X3J1biAiJExJ TkVOTyI7IHRoZW4gOg0KICBnbF9jdl9mdW5jX3VubGlua19wYXJlbnRfZmFpbHM9eWVzDQplbHNl DQogIGdsX2N2X2Z1bmNfdW5saW5rX3BhcmVudF9mYWlscz1ubw0KZmkNCnJtIC1mIGNvcmUgKi5j b3JlIGNvcmUuY29uZnRlc3QuKiBnbW9uLm91dCBiYi5vdXQgY29uZnRlc3QkYWNfZXhlZXh0IFwN CiAgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC5iZWFtIGNvbmZ0ZXN0LiRhY19leHQNCmZp DQoNCiAgICAgICAgICAgdW5zZXQgR0xfU1VCRElSX0ZPUl9VTkxJTksNCiAgICAgICAgICAgcm0g LXJmICIkdG1wIg0KICAgICAgICAgZWxzZQ0KICAgICAgICAgICBnbF9jdl9mdW5jX3VubGlua19w YXJlbnRfZmFpbHM9Imd1ZXNzaW5nIG5vIg0KICAgICAgICAgZmkNCiAgICAgICAgIDs7DQogICAg ICAgKikNCiAgICAgICAgIGdsX2N2X2Z1bmNfdW5saW5rX3BhcmVudF9mYWlscz0iZ3Vlc3Npbmcg eWVzIg0KICAgICAgICAgOzsNCiAgICAgZXNhYw0KDQpmaQ0KeyAkYXNfZWNobyAiJGFzX21lOiR7 YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRnbF9jdl9mdW5jX3VubGlua19wYXJlbnRfZmFp bHMiID4mNQ0KJGFzX2VjaG8gIiRnbF9jdl9mdW5jX3VubGlua19wYXJlbnRfZmFpbHMiID4mNjsg fQ0KICBjYXNlICIkZ2xfY3ZfZnVuY191bmxpbmtfcGFyZW50X2ZhaWxzIiBpbg0KICAgICpubykN Cg0KJGFzX2VjaG8gIiNkZWZpbmUgVU5MSU5LX1BBUkVOVF9CVUcgMSIgPj5jb25mZGVmcy5oDQoN CiAgICAgIDs7DQogIGVzYWMNCiAgaWYgdGVzdCAiJGdsX2N2X2Z1bmNfdW5saW5rX2hvbm9yc19z bGFzaGVzIiAhPSB5ZXMgXA0KICAgICB8fCB7IGNhc2UgIiRnbF9jdl9mdW5jX3VubGlua19wYXJl bnRfZmFpbHMiIGluDQogICAgICAgICAgICAqeWVzKSBmYWxzZTs7DQogICAgICAgICAgICAqbm8p IHRydWU7Ow0KICAgICAgICAgIGVzYWMNCiAgICAgICAgfTsgdGhlbg0KICAgIFJFUExBQ0VfVU5M SU5LPTENCg0KDQoNCg0KDQoNCg0KDQogIGdsX0xJQk9CSlM9IiRnbF9MSUJPQkpTIHVubGluay4k YWNfb2JqZXh0Ig0KDQogIGZpDQoNCg0KDQoNCiAgR05VTElCX1VOTElOSz0xDQoNCg0KDQokYXNf ZWNobyAiI2RlZmluZSBHTlVMSUJfVEVTVF9VTkxJTksgMSIgPj5jb25mZGVmcy5oDQoNCg0KDQog ICMgQ29kZSBmcm9tIG1vZHVsZSB1bmxpbmstYnVzeToNCiAgICB7ICRhc19lY2hvICIkYXNfbWU6 JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgYSBydW5uaW5nIHByb2dyYW0g Y2FuIGJlIHVubGlua2VkIiA+JjUNCiRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgYSBydW5u aW5nIHByb2dyYW0gY2FuIGJlIHVubGlua2VkLi4uICIgPiY2OyB9DQppZiAke2dsX2N2X2Z1bmNf dW5saW5rX2J1c3lfdGV4dCs6fSBmYWxzZTsgdGhlbiA6DQogICRhc19lY2hvX24gIihjYWNoZWQp ICIgPiY2DQplbHNlDQoNCiAgICAgIGlmIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0geWVzOyB0 aGVuIDoNCiAgZ2xfY3ZfZnVuY191bmxpbmtfYnVzeV90ZXh0PW5vDQoNCmVsc2UNCiAgY2F0IGNv bmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dA0KLyogZW5kIGNvbmZkZWZzLmgu ICAqLw0KJGFjX2luY2x1ZGVzX2RlZmF1bHQNCiAgICAgICAgICAgIGludA0KICAgICAgICAgICAg bWFpbiAoaW50IGFyZ2MsIGNoYXIgKiphcmd2KQ0KICAgICAgICAgICAgew0KICAgICAgICAgICAg ICBpbnQgcmVzdWx0ID0gMDsNCiAgICAgICAgICAgICAgaWYgKGFyZ2MgPT0gMCkNCiAgICAgICAg ICAgICAgICByZXN1bHQgfD0gMTsNCiAgICAgICAgICAgICAgZWxzZSBpZiAodW5saW5rIChhcmd2 WzBdKSAhPSAwKQ0KICAgICAgICAgICAgICAgIHJlc3VsdCB8PSAyOw0KICAgICAgICAgICAgICBy ZXR1cm4gcmVzdWx0Ow0KICAgICAgICAgICAgfQ0KX0FDRU9GDQppZiBhY19mbl9jX3RyeV9ydW4g IiRMSU5FTk8iOyB0aGVuIDoNCiAgZ2xfY3ZfZnVuY191bmxpbmtfYnVzeV90ZXh0PXllcw0KZWxz ZQ0KICBnbF9jdl9mdW5jX3VubGlua19idXN5X3RleHQ9bm8NCmZpDQpybSAtZiBjb3JlICouY29y ZSBjb3JlLmNvbmZ0ZXN0LiogZ21vbi5vdXQgYmIub3V0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCBcDQog IGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuYmVhbSBjb25mdGVzdC4kYWNfZXh0DQpmaQ0K DQoNCg0KZmkNCnsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0 OiAkZ2xfY3ZfZnVuY191bmxpbmtfYnVzeV90ZXh0IiA+JjUNCiRhc19lY2hvICIkZ2xfY3ZfZnVu Y191bmxpbmtfYnVzeV90ZXh0IiA+JjY7IH0NCg0KICBpZiB0ZXN0ICRnbF9jdl9mdW5jX3VubGlu a19idXN5X3RleHQgPSBubzsgdGhlbg0KICAgIElOU1RBTEw9JGFjX2luc3RhbGxfc2gNCiAgZmkN Cg0KICAjIENvZGUgZnJvbSBtb2R1bGUgdW5sb2NrZWQtaW86DQoNCg0KJGFzX2VjaG8gIiNkZWZp bmUgVVNFX1VOTE9DS0VEX0lPIDEiID4+Y29uZmRlZnMuaA0KDQoNCg0KDQoNCg0KDQoNCg0KDQoN Cg0KDQoNCg0KDQoNCg0KICAjIENvZGUgZnJvbSBtb2R1bGUgdW5zZXRlbnY6DQoNCg0KDQogIGlm IHRlc3QgJGFjX2N2X2hhdmVfZGVjbF91bnNldGVudiA9IG5vOyB0aGVuDQogICAgSEFWRV9ERUNM X1VOU0VURU5WPTANCiAgZmkNCiAgZm9yIGFjX2Z1bmMgaW4gdW5zZXRlbnYNCmRvIDoNCiAgYWNf Zm5fY19jaGVja19mdW5jICIkTElORU5PIiAidW5zZXRlbnYiICJhY19jdl9mdW5jX3Vuc2V0ZW52 Ig0KaWYgdGVzdCAieCRhY19jdl9mdW5jX3Vuc2V0ZW52IiA9IHh5ZXM7IHRoZW4gOg0KICBjYXQg Pj5jb25mZGVmcy5oIDw8X0FDRU9GDQojZGVmaW5lIEhBVkVfVU5TRVRFTlYgMQ0KX0FDRU9GDQoN CmZpDQpkb25lDQoNCiAgaWYgdGVzdCAkYWNfY3ZfZnVuY191bnNldGVudiA9IG5vOyB0aGVuDQoN Cg0KDQoNCg0KDQoNCg0KICBnbF9MSUJPQkpTPSIkZ2xfTElCT0JKUyB1bnNldGVudi4kYWNfb2Jq ZXh0Ig0KDQoNCg0KDQoNCiAgZWxzZQ0KICAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19s aW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciB1bnNldGVudigpIHJldHVybiB0eXBlIiA+JjUN CiRhc19lY2hvX24gImNoZWNraW5nIGZvciB1bnNldGVudigpIHJldHVybiB0eXBlLi4uICIgPiY2 OyB9DQppZiAke2d0X2N2X2Z1bmNfdW5zZXRlbnZfcmV0Kzp9IGZhbHNlOyB0aGVuIDoNCiAgJGFz X2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYNCmVsc2UNCiAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VP RiA+Y29uZnRlc3QuJGFjX2V4dA0KLyogZW5kIGNvbmZkZWZzLmguICAqLw0KDQojdW5kZWYgX0JT RA0KI2RlZmluZSBfQlNEIDEgLyogdW5oaWRlIHVuc2V0ZW52IGRlY2xhcmF0aW9uIGluIE9TRi8x IDUuMSA8c3RkbGliLmg+ICovDQojaW5jbHVkZSA8c3RkbGliLmg+DQpleHRlcm4NCiNpZmRlZiBf X2NwbHVzcGx1cw0KIkMiDQojZW5kaWYNCiNpZiBkZWZpbmVkKF9fU1REQ19fKSB8fCBkZWZpbmVk KF9fY3BsdXNwbHVzKQ0KaW50IHVuc2V0ZW52IChjb25zdCBjaGFyICpuYW1lKTsNCiNlbHNlDQpp bnQgdW5zZXRlbnYoKTsNCiNlbmRpZg0KDQppbnQNCm1haW4gKCkNCnsNCg0KICA7DQogIHJldHVy biAwOw0KfQ0KX0FDRU9GDQppZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6 DQogIGd0X2N2X2Z1bmNfdW5zZXRlbnZfcmV0PSdpbnQnDQplbHNlDQogIGd0X2N2X2Z1bmNfdW5z ZXRlbnZfcmV0PSd2b2lkJw0KZmkNCnJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRh Y19vYmpleHQgY29uZnRlc3QuJGFjX2V4dA0KZmkNCnsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xp bmVuby0kTElORU5PfTogcmVzdWx0OiAkZ3RfY3ZfZnVuY191bnNldGVudl9yZXQiID4mNQ0KJGFz X2VjaG8gIiRndF9jdl9mdW5jX3Vuc2V0ZW52X3JldCIgPiY2OyB9DQogICAgaWYgdGVzdCAkZ3Rf Y3ZfZnVuY191bnNldGVudl9yZXQgPSAndm9pZCc7IHRoZW4NCg0KJGFzX2VjaG8gIiNkZWZpbmUg Vk9JRF9VTlNFVEVOViAxIiA+PmNvbmZkZWZzLmgNCg0KICAgICAgUkVQTEFDRV9VTlNFVEVOVj0x DQoNCg0KDQoNCg0KDQoNCg0KICBnbF9MSUJPQkpTPSIkZ2xfTElCT0JKUyB1bnNldGVudi4kYWNf b2JqZXh0Ig0KDQogICAgZmkNCg0KICAgICAgICAgICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZTok e2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciB1bnNldGVudiBvYmV5cyBQT1NJ WCIgPiY1DQokYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIHVuc2V0ZW52IG9iZXlzIFBPU0lY Li4uICIgPiY2OyB9DQppZiAke2dsX2N2X2Z1bmNfdW5zZXRlbnZfd29ya3MrOn0gZmFsc2U7IHRo ZW4gOg0KICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNg0KZWxzZQ0KICBpZiB0ZXN0ICIkY3Jv c3NfY29tcGlsaW5nIiA9IHllczsgdGhlbiA6DQogIGdsX2N2X2Z1bmNfdW5zZXRlbnZfd29ya3M9 Imd1ZXNzaW5nIG5vIg0KZWxzZQ0KICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVz dC4kYWNfZXh0DQovKiBlbmQgY29uZmRlZnMuaC4gICovDQoNCiAgICAgICAjaW5jbHVkZSA8c3Rk bGliLmg+DQogICAgICAgI2luY2x1ZGUgPGVycm5vLmg+DQogICAgICAgZXh0ZXJuIGNoYXIgKipl bnZpcm9uOw0KDQppbnQNCm1haW4gKCkNCnsNCg0KICAgICAgIGNoYXIgZW50cnkxW10gPSAiYT0x IjsNCiAgICAgICBjaGFyIGVudHJ5MltdID0gImI9MiI7DQogICAgICAgY2hhciAqZW52W10gPSB7 IGVudHJ5MSwgZW50cnkyLCBOVUxMIH07DQogICAgICAgaWYgKHB1dGVudiAoKGNoYXIgKikgImE9 MSIpKSByZXR1cm4gMTsNCiAgICAgICBpZiAocHV0ZW52IChlbnRyeTIpKSByZXR1cm4gMjsNCiAg ICAgICBlbnRyeTJbMF0gPSAnYSc7DQogICAgICAgdW5zZXRlbnYgKCJhIik7DQogICAgICAgaWYg KGdldGVudiAoImEiKSkgcmV0dXJuIDM7DQogICAgICAgaWYgKCF1bnNldGVudiAoIiIpIHx8IGVy cm5vICE9IEVJTlZBTCkgcmV0dXJuIDQ7DQogICAgICAgZW50cnkyWzBdID0gJ2InOw0KICAgICAg IGVudmlyb24gPSBlbnY7DQogICAgICAgaWYgKCFnZXRlbnYgKCJhIikpIHJldHVybiA1Ow0KICAg ICAgIGVudHJ5MlswXSA9ICdhJzsNCiAgICAgICB1bnNldGVudiAoImEiKTsNCiAgICAgICBpZiAo Z2V0ZW52ICgiYSIpKSByZXR1cm4gNjsNCg0KICA7DQogIHJldHVybiAwOw0KfQ0KX0FDRU9GDQpp ZiBhY19mbl9jX3RyeV9ydW4gIiRMSU5FTk8iOyB0aGVuIDoNCiAgZ2xfY3ZfZnVuY191bnNldGVu dl93b3Jrcz15ZXMNCmVsc2UNCiAgZ2xfY3ZfZnVuY191bnNldGVudl93b3Jrcz1ubw0KZmkNCnJt IC1mIGNvcmUgKi5jb3JlIGNvcmUuY29uZnRlc3QuKiBnbW9uLm91dCBiYi5vdXQgY29uZnRlc3Qk YWNfZXhlZXh0IFwNCiAgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC5iZWFtIGNvbmZ0ZXN0 LiRhY19leHQNCmZpDQoNCmZpDQp7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVO T306IHJlc3VsdDogJGdsX2N2X2Z1bmNfdW5zZXRlbnZfd29ya3MiID4mNQ0KJGFzX2VjaG8gIiRn bF9jdl9mdW5jX3Vuc2V0ZW52X3dvcmtzIiA+JjY7IH0NCiAgICBpZiB0ZXN0ICIkZ2xfY3ZfZnVu Y191bnNldGVudl93b3JrcyIgIT0geWVzOyB0aGVuDQogICAgICBSRVBMQUNFX1VOU0VURU5WPTEN Cg0KDQoNCg0KDQoNCg0KDQogIGdsX0xJQk9CSlM9IiRnbF9MSUJPQkpTIHVuc2V0ZW52LiRhY19v YmpleHQiDQoNCiAgICBmaQ0KICBmaQ0KDQoNCg0KDQogIEdOVUxJQl9VTlNFVEVOVj0xDQoNCg0K DQokYXNfZWNobyAiI2RlZmluZSBHTlVMSUJfVEVTVF9VTlNFVEVOViAxIiA+PmNvbmZkZWZzLmgN Cg0KDQoNCiAgIyBDb2RlIGZyb20gbW9kdWxlIHVudXNlZC1wYXJhbWV0ZXI6DQogICMgQ29kZSBm cm9tIG1vZHVsZSB1cGRhdGUtY29weXJpZ2h0Og0KICAjIENvZGUgZnJvbSBtb2R1bGUgdXB0aW1l Og0KDQogIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcg Zm9yIC9wcm9jL3VwdGltZSIgPiY1DQokYXNfZWNob19uICJjaGVja2luZyBmb3IgL3Byb2MvdXB0 aW1lLi4uICIgPiY2OyB9DQppZiAke2dsX2N2X2hhdmVfcHJvY191cHRpbWUrOn0gZmFsc2U7IHRo ZW4gOg0KICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNg0KZWxzZQ0KICBnbF9jdl9oYXZlX3By b2NfdXB0aW1lPW5vDQogICAgdGVzdCAtZiAvcHJvYy91cHRpbWUgXA0KICAgICAgJiYgdGVzdCAi JGNyb3NzX2NvbXBpbGluZyIgPSBubyBcDQogICAgICAmJiBjYXQgPCAvcHJvYy91cHRpbWUgPi9k ZXYvbnVsbCAyPi9kZXYvbnVsbCBcDQogICAgICAmJiBnbF9jdl9oYXZlX3Byb2NfdXB0aW1lPXll cw0KZmkNCnsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAk Z2xfY3ZfaGF2ZV9wcm9jX3VwdGltZSIgPiY1DQokYXNfZWNobyAiJGdsX2N2X2hhdmVfcHJvY191 cHRpbWUiID4mNjsgfQ0KICBpZiB0ZXN0ICRnbF9jdl9oYXZlX3Byb2NfdXB0aW1lID0geWVzOyB0 aGVuDQoNCiRhc19lY2hvICIjZGVmaW5lIEhBVkVfUFJPQ19VUFRJTUUgMSIgPj5jb25mZGVmcy5o DQoNCiAgZmkNCg0KICAjIENvZGUgZnJvbSBtb2R1bGUgdXNlbGVzcy1pZi1iZWZvcmUtZnJlZToN CiAgIyBDb2RlIGZyb20gbW9kdWxlIHVzZXJzcGVjOg0KDQoNCg0KDQoNCg0KDQoNCg0KICBnbF9M SUJPQkpTPSIkZ2xfTElCT0JKUyB1c2Vyc3BlYy4kYWNfb2JqZXh0Ig0KDQoNCg0KDQogICMgQ29k ZSBmcm9tIG1vZHVsZSB1dGltZWNtcDoNCg0KDQoNCg0KDQoNCg0KDQoNCiAgZ2xfTElCT0JKUz0i JGdsX0xJQk9CSlMgdXRpbWVjbXAuJGFjX29iamV4dCINCg0KDQoNCiAgOg0KDQogICMgQ29kZSBm cm9tIG1vZHVsZSB1dGltZW5zOg0KDQoNCg0KDQoNCg0KDQoNCg0KICBnbF9MSUJPQkpTPSIkZ2xf TElCT0JKUyB1dGltZW5zLiRhY19vYmpleHQiDQoNCg0KDQoNCg0KDQoNCiAgaWYgdGVzdCAkYWNf Y3ZfZnVuY19mdXRpbWVucyA9IG5vICYmIHRlc3QgJGFjX2N2X2Z1bmNfZnV0aW1lc2F0ID0geWVz OyB0aGVuDQogICAgICAgICAgICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRM SU5FTk99OiBjaGVja2luZyB3aGV0aGVyIGZ1dGltZXNhdCBoYW5kbGVzIE5VTEwgZmlsZSIgPiY1 DQokYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIGZ1dGltZXNhdCBoYW5kbGVzIE5VTEwgZmls ZS4uLiAiID4mNjsgfQ0KaWYgJHtnbF9jdl9mdW5jX2Z1dGltZXNhdF93b3Jrcys6fSBmYWxzZTsg dGhlbiA6DQogICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2DQplbHNlDQogIHRvdWNoIGNvbmZ0 ZXN0LmZpbGUNCiAgICAgICBpZiB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IHllczsgdGhlbiA6 DQogIGdsX2N2X2Z1bmNfZnV0aW1lc2F0X3dvcmtzPSJndWVzc2luZyBubyINCmVsc2UNCiAgY2F0 IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dA0KLyogZW5kIGNvbmZkZWZz LmguICAqLw0KDQojaW5jbHVkZSA8c3RkZGVmLmg+DQojaW5jbHVkZSA8c3lzL3RpbWVzLmg+DQoj aW5jbHVkZSA8ZmNudGwuaD4NCg0KaW50DQptYWluICgpDQp7DQogICAgaW50IGZkID0gb3BlbiAo ImNvbmZ0ZXN0LmZpbGUiLCBPX1JEV1IpOw0KICAgICAgICAgIGlmIChmZCA8IDApIHJldHVybiAx Ow0KICAgICAgICAgIGlmIChmdXRpbWVzYXQgKGZkLCBOVUxMLCBOVUxMKSkgcmV0dXJuIDI7DQoN CiAgOw0KICByZXR1cm4gMDsNCn0NCl9BQ0VPRg0KaWYgYWNfZm5fY190cnlfcnVuICIkTElORU5P IjsgdGhlbiA6DQogIGdsX2N2X2Z1bmNfZnV0aW1lc2F0X3dvcmtzPXllcw0KZWxzZQ0KICBnbF9j dl9mdW5jX2Z1dGltZXNhdF93b3Jrcz1ubw0KZmkNCnJtIC1mIGNvcmUgKi5jb3JlIGNvcmUuY29u ZnRlc3QuKiBnbW9uLm91dCBiYi5vdXQgY29uZnRlc3QkYWNfZXhlZXh0IFwNCiAgY29uZnRlc3Qu JGFjX29iamV4dCBjb25mdGVzdC5iZWFtIGNvbmZ0ZXN0LiRhY19leHQNCmZpDQoNCiAgICAgIHJt IC1mIGNvbmZ0ZXN0LmZpbGUNCmZpDQp7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJ TkVOT306IHJlc3VsdDogJGdsX2N2X2Z1bmNfZnV0aW1lc2F0X3dvcmtzIiA+JjUNCiRhc19lY2hv ICIkZ2xfY3ZfZnVuY19mdXRpbWVzYXRfd29ya3MiID4mNjsgfQ0KICAgIGlmIHRlc3QgIiRnbF9j dl9mdW5jX2Z1dGltZXNhdF93b3JrcyIgIT0geWVzOyB0aGVuDQoNCiRhc19lY2hvICIjZGVmaW5l IEZVVElNRVNBVF9OVUxMX0JVRyAxIiA+PmNvbmZkZWZzLmgNCg0KICAgIGZpDQogIGZpDQoNCiAg IyBDb2RlIGZyb20gbW9kdWxlIHV0aW1lbnNhdDoNCg0KDQoNCg0KICBpZiB0ZXN0ICRhY19jdl9m dW5jX3V0aW1lbnNhdCA9IG5vOyB0aGVuDQogICAgSEFWRV9VVElNRU5TQVQ9MA0KDQoNCg0KDQoN Cg0KDQoNCiAgZ2xfTElCT0JKUz0iJGdsX0xJQk9CSlMgdXRpbWVuc2F0LiRhY19vYmpleHQiDQoN CiAgZWxzZQ0KICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hl Y2tpbmcgd2hldGhlciB1dGltZW5zYXQgd29ya3MiID4mNQ0KJGFzX2VjaG9fbiAiY2hlY2tpbmcg d2hldGhlciB1dGltZW5zYXQgd29ya3MuLi4gIiA+JjY7IH0NCmlmICR7Z2xfY3ZfZnVuY191dGlt ZW5zYXRfd29ya3MrOn0gZmFsc2U7IHRoZW4gOg0KICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4m Ng0KZWxzZQ0KICBpZiB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IHllczsgdGhlbiA6DQogIGds X2N2X2Z1bmNfdXRpbWVuc2F0X3dvcmtzPSJndWVzc2luZyBubyINCmVsc2UNCiAgY2F0IGNvbmZk ZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dA0KLyogZW5kIGNvbmZkZWZzLmguICAq Lw0KDQojaW5jbHVkZSA8ZmNudGwuaD4NCiNpbmNsdWRlIDxzeXMvc3RhdC5oPg0KI2luY2x1ZGUg PHVuaXN0ZC5oPg0KDQppbnQNCm1haW4gKCkNCnsNCmludCByZXN1bHQgPSAwOw0KICAgICAgICAg ICAgICBjb25zdCBjaGFyICpmID0gImNvbmZ0ZXN0LmZpbGUiOw0KICAgICAgICAgICAgICBpZiAo Y2xvc2UgKGNyZWF0IChmLCAwNjAwKSkpDQogICAgICAgICAgICAgICAgcmV0dXJuIDE7DQogICAg ICAgICAgICAgIC8qIFRlc3Qgd2hldGhlciB0aGUgQVRfU1lNTElOS19OT0ZPTExPVyBmbGFnIGlz IHN1cHBvcnRlZC4gICovDQogICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICBpZiAodXRp bWVuc2F0IChBVF9GRENXRCwgZiwgTlVMTCwgQVRfU1lNTElOS19OT0ZPTExPVykpDQogICAgICAg ICAgICAgICAgICByZXN1bHQgfD0gMjsNCiAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAv KiBUZXN0IHdoZXRoZXIgVVRJTUVfTk9XIGFuZCBVVElNRV9PTUlUIHdvcmsuICAqLw0KICAgICAg ICAgICAgICB7DQogICAgICAgICAgICAgICAgc3RydWN0IHRpbWVzcGVjIHRzWzJdID0geyB7IDEs IFVUSU1FX09NSVQgfSwgeyAxLCBVVElNRV9OT1cgfSB9Ow0KICAgICAgICAgICAgICAgIGlmICh1 dGltZW5zYXQgKEFUX0ZEQ1dELCBmLCB0cywgMCkpDQogICAgICAgICAgICAgICAgICByZXN1bHQg fD0gNDsNCiAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICBzbGVlcCAoMSk7DQogICAgICAg ICAgICAgIHsNCiAgICAgICAgICAgICAgICBzdHJ1Y3QgdGltZXNwZWMgdHNbMl0gPSB7IHsgMSwg VVRJTUVfTk9XIH0sIHsgMSwgVVRJTUVfT01JVCB9IH07DQogICAgICAgICAgICAgICAgc3RydWN0 IHN0YXQgc3Q7DQogICAgICAgICAgICAgICAgaWYgKHV0aW1lbnNhdCAoQVRfRkRDV0QsIGYsIHRz LCAwKSkNCiAgICAgICAgICAgICAgICAgIHJlc3VsdCB8PSA4Ow0KICAgICAgICAgICAgICAgIGlm IChzdGF0IChmLCAmc3QpKQ0KICAgICAgICAgICAgICAgICAgcmVzdWx0IHw9IDE2Ow0KICAgICAg ICAgICAgICAgIGVsc2UgaWYgKHN0LnN0X2N0aW1lIDwgc3Quc3RfYXRpbWUpDQogICAgICAgICAg ICAgICAgICByZXN1bHQgfD0gMzI7DQogICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgcmV0 dXJuIHJlc3VsdDsNCg0KICA7DQogIHJldHVybiAwOw0KfQ0KX0FDRU9GDQppZiBhY19mbl9jX3Ry eV9ydW4gIiRMSU5FTk8iOyB0aGVuIDoNCiAgICAgICAgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9B Q0VPRiA+Y29uZnRlc3QuJGFjX2V4dA0KLyogZW5kIGNvbmZkZWZzLmguICAqLw0KDQojaWZkZWYg X19saW51eF9fDQovKiBUaGUgTGludXgga2VybmVsIGFkZGVkIHV0aW1lbnNhdCBpbiAyLjYuMjIs IGJ1dCBoYXMgYnVncyB3aXRoIFVUSU1FX09NSVQNCiAgIGluIHNldmVyYWwgZmlsZSBzeXN0ZW1z IGFzIHJlY2VudGx5IGFzIDIuNi4zMi4gIEFsd2F5cyByZXBsYWNlIHV0aW1lbnNhdA0KICAgdG8g c3VwcG9ydCBvbGRlciBrZXJuZWxzLiAgKi8NCmNob2tlIG1lDQojZW5kaWYNCg0KaW50DQptYWlu ICgpDQp7DQoNCiAgOw0KICByZXR1cm4gMDsNCn0NCl9BQ0VPRg0KaWYgYWNfZm5fY190cnlfY29t cGlsZSAiJExJTkVOTyI7IHRoZW4gOg0KICBnbF9jdl9mdW5jX3V0aW1lbnNhdF93b3Jrcz15ZXMN CmVsc2UNCiAgZ2xfY3ZfZnVuY191dGltZW5zYXRfd29ya3M9Im5lZWRzIHJ1bnRpbWUgY2hlY2si DQpmaQ0Kcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVz dC4kYWNfZXh0DQplbHNlDQogIGdsX2N2X2Z1bmNfdXRpbWVuc2F0X3dvcmtzPW5vDQpmaQ0Kcm0g LWYgY29yZSAqLmNvcmUgY29yZS5jb25mdGVzdC4qIGdtb24ub3V0IGJiLm91dCBjb25mdGVzdCRh Y19leGVleHQgXA0KICBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LmJlYW0gY29uZnRlc3Qu JGFjX2V4dA0KZmkNCg0KZmkNCnsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5P fTogcmVzdWx0OiAkZ2xfY3ZfZnVuY191dGltZW5zYXRfd29ya3MiID4mNQ0KJGFzX2VjaG8gIiRn bF9jdl9mdW5jX3V0aW1lbnNhdF93b3JrcyIgPiY2OyB9DQogICAgaWYgdGVzdCAiJGdsX2N2X2Z1 bmNfdXRpbWVuc2F0X3dvcmtzIiAhPSB5ZXM7IHRoZW4NCiAgICAgIFJFUExBQ0VfVVRJTUVOU0FU PTENCg0KDQoNCg0KDQoNCg0KDQogIGdsX0xJQk9CSlM9IiRnbF9MSUJPQkpTIHV0aW1lbnNhdC4k YWNfb2JqZXh0Ig0KDQogICAgZmkNCiAgZmkNCg0KDQoNCg0KICBHTlVMSUJfVVRJTUVOU0FUPTEN Cg0KDQoNCiRhc19lY2hvICIjZGVmaW5lIEdOVUxJQl9URVNUX1VUSU1FTlNBVCAxIiA+PmNvbmZk ZWZzLmgNCg0KDQoNCiAgIyBDb2RlIGZyb20gbW9kdWxlIHZhc25wcmludGY6DQoNCg0KICBpZiB0 ZXN0ICRhY19jdl9mdW5jX3Zhc25wcmludGYgPSBubzsgdGhlbg0KDQoNCg0KDQoNCg0KDQoNCg0K DQogIGdsX0xJQk9CSlM9IiRnbF9MSUJPQkpTIHZhc25wcmludGYuJGFjX29iamV4dCINCg0KDQoN Cg0KDQoNCg0KDQoNCiAgZ2xfTElCT0JKUz0iJGdsX0xJQk9CSlMgcHJpbnRmLWFyZ3MuJGFjX29i amV4dCINCg0KDQoNCg0KDQoNCg0KDQoNCiAgZ2xfTElCT0JKUz0iJGdsX0xJQk9CSlMgcHJpbnRm LXBhcnNlLiRhY19vYmpleHQiDQoNCg0KDQoNCg0KDQoNCg0KDQogIGdsX0xJQk9CSlM9IiRnbF9M SUJPQkpTIGFzbnByaW50Zi4kYWNfb2JqZXh0Ig0KDQogIGlmIHRlc3QgJGFjX2N2X2Z1bmNfdmFz bnByaW50ZiA9IHllczsgdGhlbg0KDQokYXNfZWNobyAiI2RlZmluZSBSRVBMQUNFX1ZBU05QUklO VEYgMSIgPj5jb25mZGVmcy5oDQoNCiAgZmkNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQogIGFjX2Zu X2NfY2hlY2tfdHlwZSAiJExJTkVOTyIgInB0cmRpZmZfdCIgImFjX2N2X3R5cGVfcHRyZGlmZl90 IiAiJGFjX2luY2x1ZGVzX2RlZmF1bHQiDQppZiB0ZXN0ICJ4JGFjX2N2X3R5cGVfcHRyZGlmZl90 IiA9IHh5ZXM7IHRoZW4gOg0KDQplbHNlDQoNCiRhc19lY2hvICIjZGVmaW5lIHB0cmRpZmZfdCBs b25nIiA+PmNvbmZkZWZzLmgNCg0KDQpmaQ0KDQoNCg0KDQoNCg0KDQogIGZpDQoNCiAgIyBDb2Rl IGZyb20gbW9kdWxlIHZhc3ByaW50ZjoNCg0KICBmb3IgYWNfZnVuYyBpbiB2YXNwcmludGYNCmRv IDoNCiAgYWNfZm5fY19jaGVja19mdW5jICIkTElORU5PIiAidmFzcHJpbnRmIiAiYWNfY3ZfZnVu Y192YXNwcmludGYiDQppZiB0ZXN0ICJ4JGFjX2N2X2Z1bmNfdmFzcHJpbnRmIiA9IHh5ZXM7IHRo ZW4gOg0KICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GDQojZGVmaW5lIEhBVkVfVkFTUFJJTlRG IDENCl9BQ0VPRg0KDQpmaQ0KZG9uZQ0KDQogIGlmIHRlc3QgJGFjX2N2X2Z1bmNfdmFzcHJpbnRm ID0gbm87IHRoZW4NCg0KDQoNCg0KDQoNCg0KDQoNCiAgZ2xfTElCT0JKUz0iJGdsX0xJQk9CSlMg dmFzcHJpbnRmLiRhY19vYmpleHQiDQoNCg0KDQoNCg0KDQoNCg0KDQogIGdsX0xJQk9CSlM9IiRn bF9MSUJPQkpTIGFzcHJpbnRmLiRhY19vYmpleHQiDQoNCg0KICBpZiB0ZXN0ICRhY19jdl9mdW5j X3Zhc3ByaW50ZiA9IHllczsgdGhlbg0KICAgIFJFUExBQ0VfVkFTUFJJTlRGPTENCiAgZWxzZQ0K ICAgIEhBVkVfVkFTUFJJTlRGPTANCiAgZmkNCg0KDQoNCg0KDQoNCg0KDQogIGZpDQoNCg0KDQoN CiAgR05VTElCX1ZBU1BSSU5URj0xDQoNCg0KDQokYXNfZWNobyAiI2RlZmluZSBHTlVMSUJfVEVT VF9WQVNQUklOVEYgMSIgPj5jb25mZGVmcy5oDQoNCg0KDQoNCg0KICBYR0VUVEVYVF9FWFRSQV9P UFRJT05TPSIkWEdFVFRFWFRfRVhUUkFfT1BUSU9OUyAtLWZsYWc9YXNwcmludGY6MjpjLWZvcm1h dCINCg0KDQoNCiAgWEdFVFRFWFRfRVhUUkFfT1BUSU9OUz0iJFhHRVRURVhUX0VYVFJBX09QVElP TlMgLS1mbGFnPXZhc3ByaW50ZjoyOmMtZm9ybWF0Ig0KDQogICMgQ29kZSBmcm9tIG1vZHVsZSB2 YXNwcmludGYtcG9zaXg6DQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQogIGdsX2N2X2Z1 bmNfdmFzcHJpbnRmX3Bvc2l4PW5vDQogIGZvciBhY19mdW5jIGluIHZhc3ByaW50Zg0KZG8gOg0K ICBhY19mbl9jX2NoZWNrX2Z1bmMgIiRMSU5FTk8iICJ2YXNwcmludGYiICJhY19jdl9mdW5jX3Zh c3ByaW50ZiINCmlmIHRlc3QgIngkYWNfY3ZfZnVuY192YXNwcmludGYiID0geHllczsgdGhlbiA6 DQogIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YNCiNkZWZpbmUgSEFWRV9WQVNQUklOVEYgMQ0K X0FDRU9GDQoNCmZpDQpkb25lDQoNCiAgY2FzZSAiJGdsX2N2X2Z1bmNfcHJpbnRmX3NpemVzX2M5 OSIgaW4NCiAgICAqeWVzKQ0KICAgICAgY2FzZSAiJGdsX2N2X2Z1bmNfcHJpbnRmX2xvbmdfZG91 YmxlIiBpbg0KICAgICAgICAqeWVzKQ0KICAgICAgICAgIGNhc2UgIiRnbF9jdl9mdW5jX3ByaW50 Zl9pbmZpbml0ZSIgaW4NCiAgICAgICAgICAgICp5ZXMpDQogICAgICAgICAgICAgIGNhc2UgIiRn bF9jdl9mdW5jX3ByaW50Zl9pbmZpbml0ZV9sb25nX2RvdWJsZSIgaW4NCiAgICAgICAgICAgICAg ICAqeWVzKQ0KICAgICAgICAgICAgICAgICAgY2FzZSAiJGdsX2N2X2Z1bmNfcHJpbnRmX2RpcmVj dGl2ZV9hIiBpbg0KICAgICAgICAgICAgICAgICAgICAqeWVzKQ0KICAgICAgICAgICAgICAgICAg ICAgIGNhc2UgIiRnbF9jdl9mdW5jX3ByaW50Zl9kaXJlY3RpdmVfZiIgaW4NCiAgICAgICAgICAg ICAgICAgICAgICAgICp5ZXMpDQogICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgIiRnbF9j dl9mdW5jX3ByaW50Zl9kaXJlY3RpdmVfbiIgaW4NCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAqeWVzKQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAiJGdsX2N2X2Z1bmNf cHJpbnRmX2RpcmVjdGl2ZV9scyIgaW4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg KnllcykNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICIkZ2xfY3ZfZnVu Y19wcmludGZfcG9zaXRpb25zIiBpbg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgKnllcykNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAiJGds X2N2X2Z1bmNfcHJpbnRmX2ZsYWdfZ3JvdXBpbmciIGluDQogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgKnllcykNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGNhc2UgIiRnbF9jdl9mdW5jX3ByaW50Zl9mbGFnX2xlZnRhZGp1c3QiIGluDQog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICp5ZXMpDQogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAiJGdsX2N2X2Z1bmNf cHJpbnRmX2ZsYWdfemVybyIgaW4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICp5ZXMpDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGNhc2UgIiRnbF9jdl9mdW5jX3ByaW50Zl9wcmVjaXNpb24iIGluDQogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKnllcykNCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2Ug IiRnbF9jdl9mdW5jX3ByaW50Zl9lbm9tZW0iIGluDQogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICp5ZXMpDQogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAkYWNfY3ZfZnVu Y192YXNwcmludGYgPSB5ZXM7IHRoZW4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgdmFzcHJpbnRmIGV4aXN0cyBhbmQgaXMNCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICMgYWxyZWFkeSBQT1NJWCBjb21wbGlhbnQuDQogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbF9jdl9mdW5jX3Zhc3ByaW50Zl9wb3Np eD15ZXMNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBmaQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIDs7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBlc2FjDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICA7Ow0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBlc2FjDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIDs7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgZXNhYw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IDs7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlc2FjDQogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7Ow0KICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBlc2FjDQogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIDs7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXNhYw0KICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDs7DQogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBlc2FjDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7Ow0KICAgICAgICAg ICAgICAgICAgICAgICAgICBlc2FjDQogICAgICAgICAgICAgICAgICAgICAgICAgIDs7DQogICAg ICAgICAgICAgICAgICAgICAgZXNhYw0KICAgICAgICAgICAgICAgICAgICAgIDs7DQogICAgICAg ICAgICAgICAgICBlc2FjDQogICAgICAgICAgICAgICAgICA7Ow0KICAgICAgICAgICAgICBlc2Fj DQogICAgICAgICAgICAgIDs7DQogICAgICAgICAgZXNhYw0KICAgICAgICAgIDs7DQogICAgICBl c2FjDQogICAgICA7Ow0KICBlc2FjDQogIGlmIHRlc3QgJGdsX2N2X2Z1bmNfdmFzcHJpbnRmX3Bv c2l4ID0gbm87IHRoZW4NCg0KDQoNCiAgY2FzZSAiJGdsX2N2X2Z1bmNfcHJpbnRmX2luZmluaXRl IiBpbg0KICAgICp5ZXMpDQogICAgICA7Ow0KICAgICopDQoNCiRhc19lY2hvICIjZGVmaW5lIE5F RURfUFJJTlRGX0lORklOSVRFX0RPVUJMRSAxIiA+PmNvbmZkZWZzLmgNCg0KICAgICAgOzsNCiAg ZXNhYw0KDQoNCg0KDQogIGNhc2UgIiRnbF9jdl9mdW5jX3ByaW50Zl9sb25nX2RvdWJsZSIgaW4N CiAgICAqeWVzKQ0KICAgICAgY2FzZSAiJGdsX2N2X2Z1bmNfcHJpbnRmX2luZmluaXRlX2xvbmdf ZG91YmxlIiBpbg0KICAgICAgICAqeWVzKQ0KICAgICAgICAgIDs7DQogICAgICAgICopDQoNCiRh c19lY2hvICIjZGVmaW5lIE5FRURfUFJJTlRGX0lORklOSVRFX0xPTkdfRE9VQkxFIDEiID4+Y29u ZmRlZnMuaA0KDQogICAgICAgICAgOzsNCiAgICAgIGVzYWMNCiAgICAgIDs7DQogIGVzYWMNCg0K DQoNCiAgY2FzZSAiJGdsX2N2X2Z1bmNfcHJpbnRmX2RpcmVjdGl2ZV9hIiBpbg0KICAgICp5ZXMp DQogICAgICA7Ow0KICAgICopDQoNCiRhc19lY2hvICIjZGVmaW5lIE5FRURfUFJJTlRGX0RJUkVD VElWRV9BIDEiID4+Y29uZmRlZnMuaA0KDQogICAgICBmb3IgYWNfZnVuYyBpbiBubF9sYW5naW5m bw0KZG8gOg0KICBhY19mbl9jX2NoZWNrX2Z1bmMgIiRMSU5FTk8iICJubF9sYW5naW5mbyIgImFj X2N2X2Z1bmNfbmxfbGFuZ2luZm8iDQppZiB0ZXN0ICJ4JGFjX2N2X2Z1bmNfbmxfbGFuZ2luZm8i ID0geHllczsgdGhlbiA6DQogIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YNCiNkZWZpbmUgSEFW RV9OTF9MQU5HSU5GTyAxDQpfQUNFT0YNCg0KZmkNCmRvbmUNCg0KICAgICAgOzsNCiAgZXNhYw0K DQoNCg0KICBjYXNlICIkZ2xfY3ZfZnVuY19wcmludGZfZGlyZWN0aXZlX2YiIGluDQogICAgKnll cykNCiAgICAgIDs7DQogICAgKikNCg0KJGFzX2VjaG8gIiNkZWZpbmUgTkVFRF9QUklOVEZfRElS RUNUSVZFX0YgMSIgPj5jb25mZGVmcy5oDQoNCiAgICAgIDs7DQogIGVzYWMNCg0KDQoNCiAgY2Fz ZSAiJGdsX2N2X2Z1bmNfcHJpbnRmX2RpcmVjdGl2ZV9scyIgaW4NCiAgICAqeWVzKQ0KICAgICAg OzsNCiAgICAqKQ0KDQokYXNfZWNobyAiI2RlZmluZSBORUVEX1BSSU5URl9ESVJFQ1RJVkVfTFMg MSIgPj5jb25mZGVmcy5oDQoNCiAgICAgIDs7DQogIGVzYWMNCg0KDQoNCiAgY2FzZSAiJGdsX2N2 X2Z1bmNfcHJpbnRmX2ZsYWdfZ3JvdXBpbmciIGluDQogICAgKnllcykNCiAgICAgIDs7DQogICAg KikNCg0KJGFzX2VjaG8gIiNkZWZpbmUgTkVFRF9QUklOVEZfRkxBR19HUk9VUElORyAxIiA+PmNv bmZkZWZzLmgNCg0KICAgICAgOzsNCiAgZXNhYw0KDQoNCg0KICBjYXNlICIkZ2xfY3ZfZnVuY19w cmludGZfZmxhZ19sZWZ0YWRqdXN0IiBpbg0KICAgICp5ZXMpDQogICAgICA7Ow0KICAgICopDQoN CiRhc19lY2hvICIjZGVmaW5lIE5FRURfUFJJTlRGX0ZMQUdfTEVGVEFESlVTVCAxIiA+PmNvbmZk ZWZzLmgNCg0KICAgICAgOzsNCiAgZXNhYw0KDQoNCg0KICBjYXNlICIkZ2xfY3ZfZnVuY19wcmlu dGZfZmxhZ196ZXJvIiBpbg0KICAgICp5ZXMpDQogICAgICA7Ow0KICAgICopDQoNCiRhc19lY2hv ICIjZGVmaW5lIE5FRURfUFJJTlRGX0ZMQUdfWkVSTyAxIiA+PmNvbmZkZWZzLmgNCg0KICAgICAg OzsNCiAgZXNhYw0KDQoNCg0KICBjYXNlICIkZ2xfY3ZfZnVuY19wcmludGZfcHJlY2lzaW9uIiBp bg0KICAgICp5ZXMpDQogICAgICA7Ow0KICAgICopDQoNCiRhc19lY2hvICIjZGVmaW5lIE5FRURf UFJJTlRGX1VOQk9VTkRFRF9QUkVDSVNJT04gMSIgPj5jb25mZGVmcy5oDQoNCg0KJGFzX2VjaG8g IiNkZWZpbmUgTkVFRF9QUklOVEZfRE9VQkxFIDEiID4+Y29uZmRlZnMuaA0KDQoNCiRhc19lY2hv ICIjZGVmaW5lIE5FRURfUFJJTlRGX0xPTkdfRE9VQkxFIDEiID4+Y29uZmRlZnMuaA0KDQogICAg ICA7Ow0KICBlc2FjDQoNCg0KDQogIGNhc2UgIiRnbF9jdl9mdW5jX3ByaW50Zl9lbm9tZW0iIGlu DQogICAgKnllcykNCiAgICAgIDs7DQogICAgKikNCg0KJGFzX2VjaG8gIiNkZWZpbmUgTkVFRF9Q UklOVEZfRU5PTUVNIDEiID4+Y29uZmRlZnMuaA0KDQoNCiRhc19lY2hvICIjZGVmaW5lIE5FRURf UFJJTlRGX0RPVUJMRSAxIiA+PmNvbmZkZWZzLmgNCg0KDQokYXNfZWNobyAiI2RlZmluZSBORUVE X1BSSU5URl9MT05HX0RPVUJMRSAxIiA+PmNvbmZkZWZzLmgNCg0KICAgICAgOzsNCiAgZXNhYw0K DQoNCg0KDQoNCg0KDQoNCg0KDQoNCiAgZ2xfTElCT0JKUz0iJGdsX0xJQk9CSlMgdmFzbnByaW50 Zi4kYWNfb2JqZXh0Ig0KDQoNCg0KDQoNCg0KDQoNCg0KICBnbF9MSUJPQkpTPSIkZ2xfTElCT0JK UyBwcmludGYtYXJncy4kYWNfb2JqZXh0Ig0KDQoNCg0KDQoNCg0KDQoNCg0KICBnbF9MSUJPQkpT PSIkZ2xfTElCT0JKUyBwcmludGYtcGFyc2UuJGFjX29iamV4dCINCg0KDQoNCg0KDQoNCg0KDQoN CiAgZ2xfTElCT0JKUz0iJGdsX0xJQk9CSlMgYXNucHJpbnRmLiRhY19vYmpleHQiDQoNCiAgaWYg dGVzdCAkYWNfY3ZfZnVuY192YXNucHJpbnRmID0geWVzOyB0aGVuDQoNCiRhc19lY2hvICIjZGVm aW5lIFJFUExBQ0VfVkFTTlBSSU5URiAxIiA+PmNvbmZkZWZzLmgNCg0KICBmaQ0KDQoNCg0KDQoN Cg0KDQoNCg0KDQoNCiAgYWNfZm5fY19jaGVja190eXBlICIkTElORU5PIiAicHRyZGlmZl90IiAi YWNfY3ZfdHlwZV9wdHJkaWZmX3QiICIkYWNfaW5jbHVkZXNfZGVmYXVsdCINCmlmIHRlc3QgIngk YWNfY3ZfdHlwZV9wdHJkaWZmX3QiID0geHllczsgdGhlbiA6DQoNCmVsc2UNCg0KJGFzX2VjaG8g IiNkZWZpbmUgcHRyZGlmZl90IGxvbmciID4+Y29uZmRlZnMuaA0KDQoNCmZpDQoNCg0KDQoNCg0K DQoNCg0KDQoNCg0KDQoNCg0KDQoNCiAgZ2xfTElCT0JKUz0iJGdsX0xJQk9CSlMgdmFzcHJpbnRm LiRhY19vYmpleHQiDQoNCg0KDQoNCg0KDQoNCg0KDQogIGdsX0xJQk9CSlM9IiRnbF9MSUJPQkpT IGFzcHJpbnRmLiRhY19vYmpleHQiDQoNCg0KICBpZiB0ZXN0ICRhY19jdl9mdW5jX3Zhc3ByaW50 ZiA9IHllczsgdGhlbg0KICAgIFJFUExBQ0VfVkFTUFJJTlRGPTENCiAgZWxzZQ0KICAgIEhBVkVf VkFTUFJJTlRGPTANCiAgZmkNCg0KDQoNCg0KDQoNCg0KDQogIGZpDQoNCiAgIyBDb2RlIGZyb20g bW9kdWxlIHZjLWxpc3QtZmlsZXM6DQogICMgQ29kZSBmcm9tIG1vZHVsZSB2ZXJpZnk6DQogICMg Q29kZSBmcm9tIG1vZHVsZSB2ZXJyb3I6DQoNCg0KICBYR0VUVEVYVF9FWFRSQV9PUFRJT05TPSIk WEdFVFRFWFRfRVhUUkFfT1BUSU9OUyAtLWZsYWc9dmVycm9yOjM6Yy1mb3JtYXQiDQoNCg0KDQog IFhHRVRURVhUX0VYVFJBX09QVElPTlM9IiRYR0VUVEVYVF9FWFRSQV9PUFRJT05TIC0tZmxhZz12 ZXJyb3JfYXRfbGluZTo1OmMtZm9ybWF0Ig0KDQogICMgQ29kZSBmcm9tIG1vZHVsZSB2ZXJzaW9u LWV0YzoNCg0KIyBDaGVjayB3aGV0aGVyIC0td2l0aC1wYWNrYWdlciB3YXMgZ2l2ZW4uDQppZiB0 ZXN0ICIke3dpdGhfcGFja2FnZXIrc2V0fSIgPSBzZXQ7IHRoZW4gOg0KICB3aXRodmFsPSR3aXRo X3BhY2thZ2VyOyAgICAgICBjYXNlICR3aXRodmFsIGluDQogICAgICAgIHllc3xubykgOzsNCiAg ICAgICAgKikNCmNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YNCiNkZWZpbmUgUEFDS0FHRV9QQUNL QUdFUiAiJHdpdGh2YWwiDQpfQUNFT0YNCiA7Ow0KICAgICAgZXNhYw0KDQpmaQ0KDQoNCg0KIyBD aGVjayB3aGV0aGVyIC0td2l0aC1wYWNrYWdlci12ZXJzaW9uIHdhcyBnaXZlbi4NCmlmIHRlc3Qg IiR7d2l0aF9wYWNrYWdlcl92ZXJzaW9uK3NldH0iID0gc2V0OyB0aGVuIDoNCiAgd2l0aHZhbD0k d2l0aF9wYWNrYWdlcl92ZXJzaW9uOyAgICAgICBjYXNlICR3aXRodmFsIGluDQogICAgICAgIHll c3xubykgOzsNCiAgICAgICAgKikNCmNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YNCiNkZWZpbmUg UEFDS0FHRV9QQUNLQUdFUl9WRVJTSU9OICIkd2l0aHZhbCINCl9BQ0VPRg0KIDs7DQogICAgICBl c2FjDQoNCmZpDQoNCg0KDQojIENoZWNrIHdoZXRoZXIgLS13aXRoLXBhY2thZ2VyLWJ1Zy1yZXBv cnRzIHdhcyBnaXZlbi4NCmlmIHRlc3QgIiR7d2l0aF9wYWNrYWdlcl9idWdfcmVwb3J0cytzZXR9 IiA9IHNldDsgdGhlbiA6DQogIHdpdGh2YWw9JHdpdGhfcGFja2FnZXJfYnVnX3JlcG9ydHM7ICAg ICAgIGNhc2UgJHdpdGh2YWwgaW4NCiAgICAgICAgeWVzfG5vKSA7Ow0KICAgICAgICAqKQ0KY2F0 ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRg0KI2RlZmluZSBQQUNLQUdFX1BBQ0tBR0VSX0JVR19SRVBP UlRTICIkd2l0aHZhbCINCl9BQ0VPRg0KIDs7DQogICAgICBlc2FjDQoNCmZpDQoNCg0KICBpZiB0 ZXN0ICJYJHdpdGhfcGFja2FnZXIiID0gIlgiICYmIFwNCiAgICAgdGVzdCAiWCR3aXRoX3BhY2th Z2VyX3ZlcnNpb24kd2l0aF9wYWNrYWdlcl9idWdfcmVwb3J0cyIgIT0gIlgiDQogIHRoZW4NCiAg ICBhc19mbl9lcnJvciAkPyAiVGhlIC0td2l0aC1wYWNrYWdlci17YnVnLXJlcG9ydHMsdmVyc2lv bn0gb3B0aW9ucyByZXF1aXJlIC0td2l0aC1wYWNrYWdlciIgIiRMSU5FTk8iIDUNCiAgZmkNCg0K ICAjIENvZGUgZnJvbSBtb2R1bGUgdmVyc2lvbi1ldGMtZnNmOg0KICAjIENvZGUgZnJvbSBtb2R1 bGUgdmZwcmludGYtcG9zaXg6DQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQogIGdsX2N2 X2Z1bmNfdmZwcmludGZfcG9zaXg9bm8NCiAgY2FzZSAiJGdsX2N2X2Z1bmNfcHJpbnRmX3NpemVz X2M5OSIgaW4NCiAgICAqeWVzKQ0KICAgICAgY2FzZSAiJGdsX2N2X2Z1bmNfcHJpbnRmX2xvbmdf ZG91YmxlIiBpbg0KICAgICAgICAqeWVzKQ0KICAgICAgICAgIGNhc2UgIiRnbF9jdl9mdW5jX3By aW50Zl9pbmZpbml0ZSIgaW4NCiAgICAgICAgICAgICp5ZXMpDQogICAgICAgICAgICAgIGNhc2Ug IiRnbF9jdl9mdW5jX3ByaW50Zl9pbmZpbml0ZV9sb25nX2RvdWJsZSIgaW4NCiAgICAgICAgICAg ICAgICAqeWVzKQ0KICAgICAgICAgICAgICAgICAgY2FzZSAiJGdsX2N2X2Z1bmNfcHJpbnRmX2Rp cmVjdGl2ZV9hIiBpbg0KICAgICAgICAgICAgICAgICAgICAqeWVzKQ0KICAgICAgICAgICAgICAg ICAgICAgIGNhc2UgIiRnbF9jdl9mdW5jX3ByaW50Zl9kaXJlY3RpdmVfZiIgaW4NCiAgICAgICAg ICAgICAgICAgICAgICAgICp5ZXMpDQogICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgIiRn bF9jdl9mdW5jX3ByaW50Zl9kaXJlY3RpdmVfbiIgaW4NCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAqeWVzKQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAiJGdsX2N2X2Z1 bmNfcHJpbnRmX2RpcmVjdGl2ZV9scyIgaW4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgKnllcykNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICIkZ2xfY3Zf ZnVuY19wcmludGZfcG9zaXRpb25zIiBpbg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgKnllcykNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAi JGdsX2N2X2Z1bmNfcHJpbnRmX2ZsYWdfZ3JvdXBpbmciIGluDQogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgKnllcykNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGNhc2UgIiRnbF9jdl9mdW5jX3ByaW50Zl9mbGFnX2xlZnRhZGp1c3QiIGlu DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICp5ZXMpDQogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAiJGdsX2N2X2Z1 bmNfcHJpbnRmX2ZsYWdfemVybyIgaW4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICp5ZXMpDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGNhc2UgIiRnbF9jdl9mdW5jX3ByaW50Zl9wcmVjaXNpb24iIGluDQog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKnllcykN CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNh c2UgIiRnbF9jdl9mdW5jX3ByaW50Zl9lbm9tZW0iIGluDQogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICp5ZXMpDQogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyB2ZnByaW50ZiBleGlz dHMgYW5kIGlzDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIyBhbHJlYWR5IFBPU0lYIGNvbXBsaWFudC4NCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbF9jdl9mdW5jX3ZmcHJp bnRmX3Bvc2l4PXllcw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIDs7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBlc2FjDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICA7Ow0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBlc2FjDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIDs7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgZXNhYw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIDs7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlc2FjDQog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7Ow0KICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBlc2FjDQogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIDs7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXNhYw0K ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDs7DQogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBlc2FjDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7Ow0KICAgICAg ICAgICAgICAgICAgICAgICAgICBlc2FjDQogICAgICAgICAgICAgICAgICAgICAgICAgIDs7DQog ICAgICAgICAgICAgICAgICAgICAgZXNhYw0KICAgICAgICAgICAgICAgICAgICAgIDs7DQogICAg ICAgICAgICAgICAgICBlc2FjDQogICAgICAgICAgICAgICAgICA7Ow0KICAgICAgICAgICAgICBl c2FjDQogICAgICAgICAgICAgIDs7DQogICAgICAgICAgZXNhYw0KICAgICAgICAgIDs7DQogICAg ICBlc2FjDQogICAgICA7Ow0KICBlc2FjDQogIGlmIHRlc3QgJGdsX2N2X2Z1bmNfdmZwcmludGZf cG9zaXggPSBubzsgdGhlbg0KDQoNCg0KICBjYXNlICIkZ2xfY3ZfZnVuY19wcmludGZfaW5maW5p dGUiIGluDQogICAgKnllcykNCiAgICAgIDs7DQogICAgKikNCg0KJGFzX2VjaG8gIiNkZWZpbmUg TkVFRF9QUklOVEZfSU5GSU5JVEVfRE9VQkxFIDEiID4+Y29uZmRlZnMuaA0KDQogICAgICA7Ow0K ICBlc2FjDQoNCg0KDQoNCiAgY2FzZSAiJGdsX2N2X2Z1bmNfcHJpbnRmX2xvbmdfZG91YmxlIiBp bg0KICAgICp5ZXMpDQogICAgICBjYXNlICIkZ2xfY3ZfZnVuY19wcmludGZfaW5maW5pdGVfbG9u Z19kb3VibGUiIGluDQogICAgICAgICp5ZXMpDQogICAgICAgICAgOzsNCiAgICAgICAgKikNCg0K JGFzX2VjaG8gIiNkZWZpbmUgTkVFRF9QUklOVEZfSU5GSU5JVEVfTE9OR19ET1VCTEUgMSIgPj5j b25mZGVmcy5oDQoNCiAgICAgICAgICA7Ow0KICAgICAgZXNhYw0KICAgICAgOzsNCiAgZXNhYw0K DQoNCg0KICBjYXNlICIkZ2xfY3ZfZnVuY19wcmludGZfZGlyZWN0aXZlX2EiIGluDQogICAgKnll cykNCiAgICAgIDs7DQogICAgKikNCg0KJGFzX2VjaG8gIiNkZWZpbmUgTkVFRF9QUklOVEZfRElS RUNUSVZFX0EgMSIgPj5jb25mZGVmcy5oDQoNCiAgICAgIGZvciBhY19mdW5jIGluIG5sX2xhbmdp bmZvDQpkbyA6DQogIGFjX2ZuX2NfY2hlY2tfZnVuYyAiJExJTkVOTyIgIm5sX2xhbmdpbmZvIiAi YWNfY3ZfZnVuY19ubF9sYW5naW5mbyINCmlmIHRlc3QgIngkYWNfY3ZfZnVuY19ubF9sYW5naW5m byIgPSB4eWVzOyB0aGVuIDoNCiAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRg0KI2RlZmluZSBI QVZFX05MX0xBTkdJTkZPIDENCl9BQ0VPRg0KDQpmaQ0KZG9uZQ0KDQogICAgICA7Ow0KICBlc2Fj DQoNCg0KDQogIGNhc2UgIiRnbF9jdl9mdW5jX3ByaW50Zl9kaXJlY3RpdmVfZiIgaW4NCiAgICAq eWVzKQ0KICAgICAgOzsNCiAgICAqKQ0KDQokYXNfZWNobyAiI2RlZmluZSBORUVEX1BSSU5URl9E SVJFQ1RJVkVfRiAxIiA+PmNvbmZkZWZzLmgNCg0KICAgICAgOzsNCiAgZXNhYw0KDQoNCg0KICBj YXNlICIkZ2xfY3ZfZnVuY19wcmludGZfZGlyZWN0aXZlX2xzIiBpbg0KICAgICp5ZXMpDQogICAg ICA7Ow0KICAgICopDQoNCiRhc19lY2hvICIjZGVmaW5lIE5FRURfUFJJTlRGX0RJUkVDVElWRV9M UyAxIiA+PmNvbmZkZWZzLmgNCg0KICAgICAgOzsNCiAgZXNhYw0KDQoNCg0KICBjYXNlICIkZ2xf Y3ZfZnVuY19wcmludGZfZmxhZ19ncm91cGluZyIgaW4NCiAgICAqeWVzKQ0KICAgICAgOzsNCiAg ICAqKQ0KDQokYXNfZWNobyAiI2RlZmluZSBORUVEX1BSSU5URl9GTEFHX0dST1VQSU5HIDEiID4+ Y29uZmRlZnMuaA0KDQogICAgICA7Ow0KICBlc2FjDQoNCg0KDQogIGNhc2UgIiRnbF9jdl9mdW5j X3ByaW50Zl9mbGFnX2xlZnRhZGp1c3QiIGluDQogICAgKnllcykNCiAgICAgIDs7DQogICAgKikN Cg0KJGFzX2VjaG8gIiNkZWZpbmUgTkVFRF9QUklOVEZfRkxBR19MRUZUQURKVVNUIDEiID4+Y29u ZmRlZnMuaA0KDQogICAgICA7Ow0KICBlc2FjDQoNCg0KDQogIGNhc2UgIiRnbF9jdl9mdW5jX3By aW50Zl9mbGFnX3plcm8iIGluDQogICAgKnllcykNCiAgICAgIDs7DQogICAgKikNCg0KJGFzX2Vj aG8gIiNkZWZpbmUgTkVFRF9QUklOVEZfRkxBR19aRVJPIDEiID4+Y29uZmRlZnMuaA0KDQogICAg ICA7Ow0KICBlc2FjDQoNCg0KDQogIGNhc2UgIiRnbF9jdl9mdW5jX3ByaW50Zl9wcmVjaXNpb24i IGluDQogICAgKnllcykNCiAgICAgIDs7DQogICAgKikNCg0KJGFzX2VjaG8gIiNkZWZpbmUgTkVF RF9QUklOVEZfVU5CT1VOREVEX1BSRUNJU0lPTiAxIiA+PmNvbmZkZWZzLmgNCg0KDQokYXNfZWNo byAiI2RlZmluZSBORUVEX1BSSU5URl9ET1VCTEUgMSIgPj5jb25mZGVmcy5oDQoNCg0KJGFzX2Vj aG8gIiNkZWZpbmUgTkVFRF9QUklOVEZfTE9OR19ET1VCTEUgMSIgPj5jb25mZGVmcy5oDQoNCiAg ICAgIDs7DQogIGVzYWMNCg0KDQoNCiAgY2FzZSAiJGdsX2N2X2Z1bmNfcHJpbnRmX2Vub21lbSIg aW4NCiAgICAqeWVzKQ0KICAgICAgOzsNCiAgICAqKQ0KDQokYXNfZWNobyAiI2RlZmluZSBORUVE X1BSSU5URl9FTk9NRU0gMSIgPj5jb25mZGVmcy5oDQoNCg0KJGFzX2VjaG8gIiNkZWZpbmUgTkVF RF9QUklOVEZfRE9VQkxFIDEiID4+Y29uZmRlZnMuaA0KDQoNCiRhc19lY2hvICIjZGVmaW5lIE5F RURfUFJJTlRGX0xPTkdfRE9VQkxFIDEiID4+Y29uZmRlZnMuaA0KDQogICAgICA7Ow0KICBlc2Fj DQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KICBnbF9MSUJPQkpTPSIkZ2xfTElCT0JKUyB2YXNucHJp bnRmLiRhY19vYmpleHQiDQoNCg0KDQoNCg0KDQoNCg0KDQogIGdsX0xJQk9CSlM9IiRnbF9MSUJP QkpTIHByaW50Zi1hcmdzLiRhY19vYmpleHQiDQoNCg0KDQoNCg0KDQoNCg0KDQogIGdsX0xJQk9C SlM9IiRnbF9MSUJPQkpTIHByaW50Zi1wYXJzZS4kYWNfb2JqZXh0Ig0KDQoNCg0KDQoNCg0KDQoN Cg0KICBnbF9MSUJPQkpTPSIkZ2xfTElCT0JKUyBhc25wcmludGYuJGFjX29iamV4dCINCg0KICBp ZiB0ZXN0ICRhY19jdl9mdW5jX3Zhc25wcmludGYgPSB5ZXM7IHRoZW4NCg0KJGFzX2VjaG8gIiNk ZWZpbmUgUkVQTEFDRV9WQVNOUFJJTlRGIDEiID4+Y29uZmRlZnMuaA0KDQogIGZpDQoNCg0KDQoN Cg0KDQoNCg0KDQoNCg0KICBhY19mbl9jX2NoZWNrX3R5cGUgIiRMSU5FTk8iICJwdHJkaWZmX3Qi ICJhY19jdl90eXBlX3B0cmRpZmZfdCIgIiRhY19pbmNsdWRlc19kZWZhdWx0Ig0KaWYgdGVzdCAi eCRhY19jdl90eXBlX3B0cmRpZmZfdCIgPSB4eWVzOyB0aGVuIDoNCg0KZWxzZQ0KDQokYXNfZWNo byAiI2RlZmluZSBwdHJkaWZmX3QgbG9uZyIgPj5jb25mZGVmcy5oDQoNCg0KZmkNCg0KDQoNCg0K DQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQogIGdsX0xJQk9CSlM9IiRnbF9MSUJPQkpTIHZmcHJp bnRmLiRhY19vYmpleHQiDQoNCiAgUkVQTEFDRV9WRlBSSU5URj0xDQoNCiRhc19lY2hvICIjZGVm aW5lIFJFUExBQ0VfVkZQUklOVEZfUE9TSVggMSIgPj5jb25mZGVmcy5oDQoNCiAgOg0KDQogIGZp DQoNCg0KDQoNCiAgR05VTElCX1ZGUFJJTlRGX1BPU0lYPTENCg0KDQoNCiRhc19lY2hvICIjZGVm aW5lIEdOVUxJQl9URVNUX1ZGUFJJTlRGX1BPU0lYIDEiID4+Y29uZmRlZnMuaA0KDQoNCg0KICAj IENvZGUgZnJvbSBtb2R1bGUgdnByaW50Zi1wb3NpeDoNCg0KDQogIGlmIHRlc3QgJGdsX2N2X2Z1 bmNfdmZwcmludGZfcG9zaXggPSBubzsgdGhlbg0KDQoNCg0KDQoNCg0KDQoNCg0KDQogIGdsX0xJ Qk9CSlM9IiRnbF9MSUJPQkpTIHZwcmludGYuJGFjX29iamV4dCINCg0KICBSRVBMQUNFX1ZQUklO VEY9MQ0KDQokYXNfZWNobyAiI2RlZmluZSBSRVBMQUNFX1ZQUklOVEZfUE9TSVggMSIgPj5jb25m ZGVmcy5oDQoNCiAgOg0KDQogIGZpDQoNCg0KDQoNCiAgR05VTElCX1ZQUklOVEZfUE9TSVg9MQ0K DQoNCg0KJGFzX2VjaG8gIiNkZWZpbmUgR05VTElCX1RFU1RfVlBSSU5URl9QT1NJWCAxIiA+PmNv bmZkZWZzLmgNCg0KDQoNCiAgIyBDb2RlIGZyb20gbW9kdWxlIHdhcm4tb24tdXNlOg0KICAjIENv ZGUgZnJvbSBtb2R1bGUgd2FybmluZ3M6DQoNCiAgIyBDb2RlIGZyb20gbW9kdWxlIHdjaGFyOg0K DQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KICAgICBpZiB0ZXN0ICRnbF9jdl9oYXZlX2luY2x1ZGVf bmV4dCA9IHllczsgdGhlbg0KICAgICAgIGdsX2N2X25leHRfd2NoYXJfaD0nPCd3Y2hhci5oJz4n DQogICAgIGVsc2UNCiAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVO T306IGNoZWNraW5nIGFic29sdXRlIG5hbWUgb2YgPHdjaGFyLmg+IiA+JjUNCiRhc19lY2hvX24g ImNoZWNraW5nIGFic29sdXRlIG5hbWUgb2YgPHdjaGFyLmg+Li4uICIgPiY2OyB9DQppZiAke2ds X2N2X25leHRfd2NoYXJfaCs6fSBmYWxzZTsgdGhlbiA6DQogICRhc19lY2hvX24gIihjYWNoZWQp ICIgPiY2DQplbHNlDQoNCiAgICAgICAgICAgICBpZiB0ZXN0ICRhY19jdl9oZWFkZXJfd2NoYXJf aCA9IHllczsgdGhlbg0KDQoNCiAgICAgICAgICAgICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNF T0YgPmNvbmZ0ZXN0LiRhY19leHQNCi8qIGVuZCBjb25mZGVmcy5oLiAgKi8NCiNpbmNsdWRlIDx3 Y2hhci5oPg0KDQpfQUNFT0YNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgIiRob3N0X29zIiBpbg0KICAgICAgICAgICAg ICAgICBhaXgqKSBnbF9hYnNuYW1lX2NwcD0iJGFjX2NwcCAtQyIgOzsNCiAgICAgICAgICAgICAg ICAgKikgICAgZ2xfYWJzbmFtZV9jcHA9IiRhY19jcHAiIDs7DQogICAgICAgICAgICAgICBlc2Fj DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBnbF9jdl9uZXh0X3djaGFyX2g9JyInYChldmFsICIkZ2xfYWJzbmFtZV9jcHAgY29uZnRl c3QuJGFjX2V4dCIpIDI+JjUgfA0KICAgICAgICAgICAgICAgICAgc2VkIC1uICdcIy93Y2hhci5o I3sNCiAgICAgICAgICAgICAgICAgICAgcyMuKiJcKC4qL3djaGFyLmhcKSIuKiNcMSMNCiAgICAg ICAgICAgICAgICAgICAgcyNeL1teL10jLy8mIw0KICAgICAgICAgICAgICAgICAgICBwDQogICAg ICAgICAgICAgICAgICAgIHENCiAgICAgICAgICAgICAgICAgIH0nYCciJw0KICAgICAgICAgIGVs c2UNCiAgICAgICAgICAgICAgIGdsX2N2X25leHRfd2NoYXJfaD0nPCd3Y2hhci5oJz4nDQogICAg ICAgICAgICAgZmkNCg0KDQpmaQ0KeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5F Tk99OiByZXN1bHQ6ICRnbF9jdl9uZXh0X3djaGFyX2giID4mNQ0KJGFzX2VjaG8gIiRnbF9jdl9u ZXh0X3djaGFyX2giID4mNjsgfQ0KICAgICBmaQ0KICAgICBORVhUX1dDSEFSX0g9JGdsX2N2X25l eHRfd2NoYXJfaA0KDQogICAgIGlmIHRlc3QgJGdsX2N2X2hhdmVfaW5jbHVkZV9uZXh0ID0geWVz IHx8IHRlc3QgJGdsX2N2X2hhdmVfaW5jbHVkZV9uZXh0ID0gYnVnZ3k7IHRoZW4NCiAgICAgICAj IElOQ0xVREVfTkVYVF9BU19GSVJTVF9ESVJFQ1RJVkU9J2luY2x1ZGVfbmV4dCcNCiAgICAgICBn bF9uZXh0X2FzX2ZpcnN0X2RpcmVjdGl2ZT0nPCd3Y2hhci5oJz4nDQogICAgIGVsc2UNCiAgICAg ICAjIElOQ0xVREVfTkVYVF9BU19GSVJTVF9ESVJFQ1RJVkU9J2luY2x1ZGUnDQogICAgICAgZ2xf bmV4dF9hc19maXJzdF9kaXJlY3RpdmU9JGdsX2N2X25leHRfd2NoYXJfaA0KICAgICBmaQ0KICAg ICBORVhUX0FTX0ZJUlNUX0RJUkVDVElWRV9XQ0hBUl9IPSRnbF9uZXh0X2FzX2ZpcnN0X2RpcmVj dGl2ZQ0KDQoNCg0KDQogIGlmIHRlc3QgJGFjX2N2X2hlYWRlcl93Y2hhcl9oID0geWVzOyB0aGVu DQogICAgSEFWRV9XQ0hBUl9IPTENCiAgZWxzZQ0KICAgIEhBVkVfV0NIQVJfSD0wDQogIGZpDQoN Cg0KDQoNCg0KICBpZiB0ZXN0ICRndF9jdl9jX3dpbnRfdCA9IHllczsgdGhlbg0KICAgIEhBVkVf V0lOVF9UPTENCiAgZWxzZQ0KICAgIEhBVkVfV0lOVF9UPTANCiAgZmkNCg0KDQoNCiAgICBmb3Ig Z2xfZnVuYyBpbiBidG93YyB3Y3RvYiBtYnNpbml0IG1icnRvd2MgbWJybGVuIG1ic3J0b3djcyBt YnNucnRvd2NzIHdjcnRvbWIgICAgICB3Y3NydG9tYnMgd2NzbnJ0b21icyB3Y3dpZHRoIHdtZW1j aHIgd21lbWNtcCB3bWVtY3B5IHdtZW1tb3ZlIHdtZW1zZXQgICAgICB3Y3NsZW4gd2NzbmxlbiB3 Y3NjcHkgd2NwY3B5IHdjc25jcHkgd2NwbmNweSB3Y3NjYXQgd2NzbmNhdCB3Y3NjbXAgICAgICB3 Y3NuY21wIHdjc2Nhc2VjbXAgd2NzbmNhc2VjbXAgd2NzY29sbCB3Y3N4ZnJtIHdjc2R1cCB3Y3Nj aHIgd2NzcmNociAgICAgIHdjc2NzcG4gd2Nzc3BuIHdjc3Bicmsgd2Nzc3RyIHdjc3RvayB3Y3N3 aWR0aCAgICAgOyBkbw0KICAgIGFzX2dsX1N5bWJvbD1gJGFzX2VjaG8gImdsX2N2X2hhdmVfcmF3 X2RlY2xfJGdsX2Z1bmMiIHwgJGFzX3RyX3NoYA0KICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2Fz X2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciAkZ2xfZnVuYyBpcyBkZWNsYXJlZCB3 aXRob3V0IGEgbWFjcm8iID4mNQ0KJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciAkZ2xfZnVu YyBpcyBkZWNsYXJlZCB3aXRob3V0IGEgbWFjcm8uLi4gIiA+JjY7IH0NCmlmIGV2YWwgXCR7JGFz X2dsX1N5bWJvbCs6fSBmYWxzZTsgdGhlbiA6DQogICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2 DQplbHNlDQogIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQNCi8q IGVuZCBjb25mZGVmcy5oLiAgKi8NCg0KLyogVHJ1NjQgd2l0aCBEZXNrdG9wIFRvb2xraXQgQyBo YXMgYSBidWc6IDxzdGRpby5oPiBtdXN0IGJlIGluY2x1ZGVkIGJlZm9yZQ0KICAgPHdjaGFyLmg+ Lg0KICAgQlNEL09TIDQuMC4xIGhhcyBhIGJ1ZzogPHN0ZGRlZi5oPiwgPHN0ZGlvLmg+IGFuZCA8 dGltZS5oPiBtdXN0IGJlDQogICBpbmNsdWRlZCBiZWZvcmUgPHdjaGFyLmg+LiAgKi8NCiNpZiAh KGRlZmluZWQgX19HTElCQ19fICYmICFkZWZpbmVkIF9fVUNMSUJDX18pDQojIGluY2x1ZGUgPHN0 ZGRlZi5oPg0KIyBpbmNsdWRlIDxzdGRpby5oPg0KIyBpbmNsdWRlIDx0aW1lLmg+DQojZW5kaWYN CiNpbmNsdWRlIDx3Y2hhci5oPg0KDQppbnQNCm1haW4gKCkNCnsNCiN1bmRlZiAkZ2xfZnVuYw0K ICAodm9pZCkgJGdsX2Z1bmM7DQogIDsNCiAgcmV0dXJuIDA7DQp9DQpfQUNFT0YNCmlmIGFjX2Zu X2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoNCiAgZXZhbCAiJGFzX2dsX1N5bWJvbD15 ZXMiDQplbHNlDQogIGV2YWwgIiRhc19nbF9TeW1ib2w9bm8iDQpmaQ0Kcm0gLWYgY29yZSBjb25m dGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0DQpmaQ0KZXZhbCBh Y19yZXM9XCQkYXNfZ2xfU3ltYm9sDQoJICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xp bmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfcmVzIiA+JjUNCiRhc19lY2hvICIkYWNfcmVzIiA+ JjY7IH0NCiAgICAgaWYgZXZhbCB0ZXN0IFwieFwkIiRhc19nbF9TeW1ib2wiXCIgPSB4InllcyI7 IHRoZW4gOg0KICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GDQojZGVmaW5lIGAkYXNfZWNobyAi SEFWRV9SQVdfREVDTF8kZ2xfZnVuYyIgfCAkYXNfdHJfY3BwYCAxDQpfQUNFT0YNCg0KICAgICAg ICAgICAgICAgICAgICAgZXZhbCBhY19jdl9oYXZlX2RlY2xfJGdsX2Z1bmM9eWVzDQpmaQ0KICAg ICAgZG9uZQ0KDQoNCiAgIyBDb2RlIGZyb20gbW9kdWxlIHdjcnRvbWI6DQoNCg0KDQoNCg0KDQoN Cg0KDQoNCiAgaWYgdGVzdCAkYWNfY3ZfZnVuY19tYnNpbml0ID0geWVzICYmIHRlc3QgJGFjX2N2 X2Z1bmNfbWJydG93YyA9IHllczsgdGhlbg0KDQoNCg0KICAgICB7ICRhc19lY2hvICIkYXNfbWU6 JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgbWJydG93YyBoYW5kbGVzIGlu Y29tcGxldGUgY2hhcmFjdGVycyIgPiY1DQokYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIG1i cnRvd2MgaGFuZGxlcyBpbmNvbXBsZXRlIGNoYXJhY3RlcnMuLi4gIiA+JjY7IH0NCmlmICR7Z2xf Y3ZfZnVuY19tYnJ0b3djX2luY29tcGxldGVfc3RhdGUrOn0gZmFsc2U7IHRoZW4gOg0KICAkYXNf ZWNob19uICIoY2FjaGVkKSAiID4mNg0KZWxzZQ0KDQogICAgICAgICAgICAgICAgICBjYXNlICIk aG9zdF9vcyIgaW4NCiAgICAgICAgICAgICAgICAgICAgICMgR3Vlc3Mgbm8gb24gQUlYIGFuZCBP U0YvMS4NCiAgICAgICAgYWl4KiB8IG9zZiopIGdsX2N2X2Z1bmNfbWJydG93Y19pbmNvbXBsZXRl X3N0YXRlPSJndWVzc2luZyBubyIgOzsNCiAgICAgICAgICAgICAgICAgICAgICMgR3Vlc3MgeWVz IG90aGVyd2lzZS4NCiAgICAgICAgKikgICAgICAgICAgIGdsX2N2X2Z1bmNfbWJydG93Y19pbmNv bXBsZXRlX3N0YXRlPSJndWVzc2luZyB5ZXMiIDs7DQogICAgICBlc2FjDQogICAgICBpZiB0ZXN0 ICRMT0NBTEVfSkEgIT0gbm9uZTsgdGhlbg0KICAgICAgICBpZiB0ZXN0ICIkY3Jvc3NfY29tcGls aW5nIiA9IHllczsgdGhlbiA6DQogIDoNCmVsc2UNCiAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VP RiA+Y29uZnRlc3QuJGFjX2V4dA0KLyogZW5kIGNvbmZkZWZzLmguICAqLw0KDQojaW5jbHVkZSA8 bG9jYWxlLmg+DQojaW5jbHVkZSA8c3RyaW5nLmg+DQovKiBUcnU2NCB3aXRoIERlc2t0b3AgVG9v bGtpdCBDIGhhcyBhIGJ1ZzogPHN0ZGlvLmg+IG11c3QgYmUgaW5jbHVkZWQgYmVmb3JlDQogICA8 d2NoYXIuaD4uDQogICBCU0QvT1MgNC4wLjEgaGFzIGEgYnVnOiA8c3RkZGVmLmg+LCA8c3RkaW8u aD4gYW5kIDx0aW1lLmg+IG11c3QgYmUNCiAgIGluY2x1ZGVkIGJlZm9yZSA8d2NoYXIuaD4uICAq Lw0KI2luY2x1ZGUgPHN0ZGRlZi5oPg0KI2luY2x1ZGUgPHN0ZGlvLmg+DQojaW5jbHVkZSA8dGlt ZS5oPg0KI2luY2x1ZGUgPHdjaGFyLmg+DQppbnQgbWFpbiAoKQ0Kew0KICBpZiAoc2V0bG9jYWxl IChMQ19BTEwsICIkTE9DQUxFX0pBIikgIT0gTlVMTCkNCiAgICB7DQogICAgICBjb25zdCBjaGFy IGlucHV0W10gPSAiQlwyMTdcMjUzXDM0NFwyMTdcMjUxXDMxNmVyIjsgLyogIkLDvMOfZXIiICov DQogICAgICBtYnN0YXRlX3Qgc3RhdGU7DQogICAgICB3Y2hhcl90IHdjOw0KDQogICAgICBtZW1z ZXQgKCZzdGF0ZSwgJ1wwJywgc2l6ZW9mIChtYnN0YXRlX3QpKTsNCiAgICAgIGlmIChtYnJ0b3dj ICgmd2MsIGlucHV0ICsgMSwgMSwgJnN0YXRlKSA9PSAoc2l6ZV90KSgtMikpDQogICAgICAgIGlm IChtYnNpbml0ICgmc3RhdGUpKQ0KICAgICAgICAgIHJldHVybiAxOw0KICAgIH0NCiAgcmV0dXJu IDA7DQp9DQpfQUNFT0YNCmlmIGFjX2ZuX2NfdHJ5X3J1biAiJExJTkVOTyI7IHRoZW4gOg0KICBn bF9jdl9mdW5jX21icnRvd2NfaW5jb21wbGV0ZV9zdGF0ZT15ZXMNCmVsc2UNCiAgZ2xfY3ZfZnVu Y19tYnJ0b3djX2luY29tcGxldGVfc3RhdGU9bm8NCmZpDQpybSAtZiBjb3JlICouY29yZSBjb3Jl LmNvbmZ0ZXN0LiogZ21vbi5vdXQgYmIub3V0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCBcDQogIGNvbmZ0 ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuYmVhbSBjb25mdGVzdC4kYWNfZXh0DQpmaQ0KDQogICAg ICBmaQ0KDQpmaQ0KeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1 bHQ6ICRnbF9jdl9mdW5jX21icnRvd2NfaW5jb21wbGV0ZV9zdGF0ZSIgPiY1DQokYXNfZWNobyAi JGdsX2N2X2Z1bmNfbWJydG93Y19pbmNvbXBsZXRlX3N0YXRlIiA+JjY7IH0NCg0KDQoNCg0KICAg ICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRo ZXIgbWJydG93YyB3b3JrcyBhcyB3ZWxsIGFzIG1idG93YyIgPiY1DQokYXNfZWNob19uICJjaGVj a2luZyB3aGV0aGVyIG1icnRvd2Mgd29ya3MgYXMgd2VsbCBhcyBtYnRvd2MuLi4gIiA+JjY7IH0N CmlmICR7Z2xfY3ZfZnVuY19tYnJ0b3djX3Nhbml0eWNoZWNrKzp9IGZhbHNlOyB0aGVuIDoNCiAg JGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYNCmVsc2UNCg0KICAgICAgICAgICAgICAgICAgY2Fz ZSAiJGhvc3Rfb3MiIGluDQogICAgICAgICAgICAgICAgICAgICMgR3Vlc3Mgbm8gb24gU29sYXJp cyA4Lg0KICAgICAgICBzb2xhcmlzMi44KSBnbF9jdl9mdW5jX21icnRvd2Nfc2FuaXR5Y2hlY2s9 Imd1ZXNzaW5nIG5vIiA7Ow0KICAgICAgICAgICAgICAgICAgICAjIEd1ZXNzIHllcyBvdGhlcndp c2UuDQogICAgICAgICopICAgICAgICAgIGdsX2N2X2Z1bmNfbWJydG93Y19zYW5pdHljaGVjaz0i Z3Vlc3NpbmcgeWVzIiA7Ow0KICAgICAgZXNhYw0KICAgICAgaWYgdGVzdCAkTE9DQUxFX1pIX0NO ICE9IG5vbmU7IHRoZW4NCiAgICAgICAgaWYgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgPSB5ZXM7 IHRoZW4gOg0KICA6DQplbHNlDQogIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0 LiRhY19leHQNCi8qIGVuZCBjb25mZGVmcy5oLiAgKi8NCg0KI2luY2x1ZGUgPGxvY2FsZS5oPg0K I2luY2x1ZGUgPHN0ZGxpYi5oPg0KI2luY2x1ZGUgPHN0cmluZy5oPg0KLyogVHJ1NjQgd2l0aCBE ZXNrdG9wIFRvb2xraXQgQyBoYXMgYSBidWc6IDxzdGRpby5oPiBtdXN0IGJlIGluY2x1ZGVkIGJl Zm9yZQ0KICAgPHdjaGFyLmg+Lg0KICAgQlNEL09TIDQuMC4xIGhhcyBhIGJ1ZzogPHN0ZGRlZi5o PiwgPHN0ZGlvLmg+IGFuZCA8dGltZS5oPiBtdXN0IGJlDQogICBpbmNsdWRlZCBiZWZvcmUgPHdj aGFyLmg+LiAgKi8NCiNpbmNsdWRlIDxzdGRkZWYuaD4NCiNpbmNsdWRlIDxzdGRpby5oPg0KI2lu Y2x1ZGUgPHRpbWUuaD4NCiNpbmNsdWRlIDx3Y2hhci5oPg0KaW50IG1haW4gKCkNCnsNCiAgLyog VGhpcyBmYWlscyBvbiBTb2xhcmlzIDg6DQogICAgIG1icnRvd2MgcmV0dXJucyAyLCBhbmQgc2V0 cyB3YyB0byAweDAwRjAuDQogICAgIG1idG93YyByZXR1cm5zIDQgKGNvcnJlY3QpIGFuZCBzZXRz IHdjIHRvIDB4NUVEQy4gICovDQogIGlmIChzZXRsb2NhbGUgKExDX0FMTCwgIiRMT0NBTEVfWkhf Q04iKSAhPSBOVUxMKQ0KICAgIHsNCiAgICAgIGNoYXIgaW5wdXRbXSA9ICJCXDI1MFwyNzFcMjAx XDA2MFwyMTFcMDcwZXIiOyAvKiAiQsO8w59lciIgKi8NCiAgICAgIG1ic3RhdGVfdCBzdGF0ZTsN CiAgICAgIHdjaGFyX3Qgd2M7DQoNCiAgICAgIG1lbXNldCAoJnN0YXRlLCAnXDAnLCBzaXplb2Yg KG1ic3RhdGVfdCkpOw0KICAgICAgaWYgKG1icnRvd2MgKCZ3YywgaW5wdXQgKyAzLCA2LCAmc3Rh dGUpICE9IDQNCiAgICAgICAgICAmJiBtYnRvd2MgKCZ3YywgaW5wdXQgKyAzLCA2KSA9PSA0KQ0K ICAgICAgICByZXR1cm4gMTsNCiAgICB9DQogIHJldHVybiAwOw0KfQ0KX0FDRU9GDQppZiBhY19m bl9jX3RyeV9ydW4gIiRMSU5FTk8iOyB0aGVuIDoNCiAgZ2xfY3ZfZnVuY19tYnJ0b3djX3Nhbml0 eWNoZWNrPXllcw0KZWxzZQ0KICBnbF9jdl9mdW5jX21icnRvd2Nfc2FuaXR5Y2hlY2s9bm8NCmZp DQpybSAtZiBjb3JlICouY29yZSBjb3JlLmNvbmZ0ZXN0LiogZ21vbi5vdXQgYmIub3V0IGNvbmZ0 ZXN0JGFjX2V4ZWV4dCBcDQogIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuYmVhbSBjb25m dGVzdC4kYWNfZXh0DQpmaQ0KDQogICAgICBmaQ0KDQpmaQ0KeyAkYXNfZWNobyAiJGFzX21lOiR7 YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRnbF9jdl9mdW5jX21icnRvd2Nfc2FuaXR5Y2hl Y2siID4mNQ0KJGFzX2VjaG8gIiRnbF9jdl9mdW5jX21icnRvd2Nfc2FuaXR5Y2hlY2siID4mNjsg fQ0KDQogICAgUkVQTEFDRV9NQlNUQVRFX1Q9MA0KICAgIGNhc2UgIiRnbF9jdl9mdW5jX21icnRv d2NfaW5jb21wbGV0ZV9zdGF0ZSIgaW4NCiAgICAgICp5ZXMpIDs7DQogICAgICAqKSBSRVBMQUNF X01CU1RBVEVfVD0xIDs7DQogICAgZXNhYw0KICAgIGNhc2UgIiRnbF9jdl9mdW5jX21icnRvd2Nf c2FuaXR5Y2hlY2siIGluDQogICAgICAqeWVzKSA7Ow0KICAgICAgKikgUkVQTEFDRV9NQlNUQVRF X1Q9MSA7Ow0KICAgIGVzYWMNCiAgZWxzZQ0KICAgIFJFUExBQ0VfTUJTVEFURV9UPTENCiAgZmkN CiAgaWYgdGVzdCAkUkVQTEFDRV9NQlNUQVRFX1QgPSAxOyB0aGVuDQoNCiAgICA6DQoNCiAgZmkN Cg0KDQoNCiAgaWYgdGVzdCAkYWNfY3ZfZnVuY193Y3J0b21iID0gbm87IHRoZW4NCiAgICBIQVZF X1dDUlRPTUI9MA0KICBlbHNlDQogICAgaWYgdGVzdCAkUkVQTEFDRV9NQlNUQVRFX1QgPSAxOyB0 aGVuDQogICAgICBSRVBMQUNFX1dDUlRPTUI9MQ0KICAgIGVsc2UNCg0KDQoNCg0KDQogICAgICAg ICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3 aGV0aGVyIHdjcnRvbWIgcmV0dXJuIHZhbHVlIGlzIGNvcnJlY3QiID4mNQ0KJGFzX2VjaG9fbiAi Y2hlY2tpbmcgd2hldGhlciB3Y3J0b21iIHJldHVybiB2YWx1ZSBpcyBjb3JyZWN0Li4uICIgPiY2 OyB9DQppZiAke2dsX2N2X2Z1bmNfd2NydG9tYl9yZXR2YWwrOn0gZmFsc2U7IHRoZW4gOg0KICAk YXNfZWNob19uICIoY2FjaGVkKSAiID4mNg0KZWxzZQ0KDQogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBjYXNlICIkaG9zdF9vcyIgaW4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAjIEd1ZXNzIG5vIG9uIEFJWCA0LCBPU0YvMSBhbmQgU29sYXJpcy4NCiAgICAgICAg ICAgIGFpeDQqIHwgb3NmKiB8IHNvbGFyaXMqKSBnbF9jdl9mdW5jX3djcnRvbWJfcmV0dmFsPSJn dWVzc2luZyBubyIgOzsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIEd1 ZXNzIHllcyBvdGhlcndpc2UuDQogICAgICAgICAgICAqKSAgICAgICAgICAgICAgICAgICAgICAg Z2xfY3ZfZnVuY193Y3J0b21iX3JldHZhbD0iZ3Vlc3NpbmcgeWVzIiA7Ow0KICAgICAgICAgIGVz YWMNCiAgICAgICAgICBpZiB0ZXN0ICRMT0NBTEVfRlIgIT0gbm9uZSB8fCB0ZXN0ICRMT0NBTEVf RlJfVVRGOCAhPSBub25lIHx8IHRlc3QgJExPQ0FMRV9KQSAhPSBub25lIHx8IHRlc3QgJExPQ0FM RV9aSF9DTiAhPSBub25lOyB0aGVuDQogICAgICAgICAgICBpZiB0ZXN0ICIkY3Jvc3NfY29tcGls aW5nIiA9IHllczsgdGhlbiA6DQogIDoNCmVsc2UNCiAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VP RiA+Y29uZnRlc3QuJGFjX2V4dA0KLyogZW5kIGNvbmZkZWZzLmguICAqLw0KDQojaW5jbHVkZSA8 bG9jYWxlLmg+DQojaW5jbHVkZSA8c3RyaW5nLmg+DQovKiBUcnU2NCB3aXRoIERlc2t0b3AgVG9v bGtpdCBDIGhhcyBhIGJ1ZzogPHN0ZGlvLmg+IG11c3QgYmUgaW5jbHVkZWQgYmVmb3JlDQogICA8 d2NoYXIuaD4uDQogICBCU0QvT1MgNC4wLjEgaGFzIGEgYnVnOiA8c3RkZGVmLmg+LCA8c3RkaW8u aD4gYW5kIDx0aW1lLmg+IG11c3QgYmUNCiAgIGluY2x1ZGVkIGJlZm9yZSA8d2NoYXIuaD4uICAq Lw0KI2luY2x1ZGUgPHN0ZGRlZi5oPg0KI2luY2x1ZGUgPHN0ZGlvLmg+DQojaW5jbHVkZSA8dGlt ZS5oPg0KI2luY2x1ZGUgPHdjaGFyLmg+DQppbnQgbWFpbiAoKQ0Kew0KICBpbnQgcmVzdWx0ID0g MDsNCiAgaWYgKHNldGxvY2FsZSAoTENfQUxMLCAiJExPQ0FMRV9GUiIpICE9IE5VTEwpDQogICAg ew0KICAgICAgaWYgKHdjcnRvbWIgKE5VTEwsIDAsIE5VTEwpICE9IDEpDQogICAgICAgIHJlc3Vs dCB8PSAxOw0KICAgIH0NCiAgaWYgKHNldGxvY2FsZSAoTENfQUxMLCAiJExPQ0FMRV9GUl9VVEY4 IikgIT0gTlVMTCkNCiAgICB7DQogICAgICBpZiAod2NydG9tYiAoTlVMTCwgMCwgTlVMTCkgIT0g MSkNCiAgICAgICAgcmVzdWx0IHw9IDI7DQogICAgfQ0KICBpZiAoc2V0bG9jYWxlIChMQ19BTEws ICIkTE9DQUxFX0pBIikgIT0gTlVMTCkNCiAgICB7DQogICAgICBpZiAod2NydG9tYiAoTlVMTCwg MCwgTlVMTCkgIT0gMSkNCiAgICAgICAgcmVzdWx0IHw9IDQ7DQogICAgfQ0KICBpZiAoc2V0bG9j YWxlIChMQ19BTEwsICIkTE9DQUxFX1pIX0NOIikgIT0gTlVMTCkNCiAgICB7DQogICAgICBpZiAo d2NydG9tYiAoTlVMTCwgMCwgTlVMTCkgIT0gMSkNCiAgICAgICAgcmVzdWx0IHw9IDg7DQogICAg fQ0KICByZXR1cm4gcmVzdWx0Ow0KfQ0KX0FDRU9GDQppZiBhY19mbl9jX3RyeV9ydW4gIiRMSU5F Tk8iOyB0aGVuIDoNCiAgZ2xfY3ZfZnVuY193Y3J0b21iX3JldHZhbD15ZXMNCmVsc2UNCiAgZ2xf Y3ZfZnVuY193Y3J0b21iX3JldHZhbD1ubw0KZmkNCnJtIC1mIGNvcmUgKi5jb3JlIGNvcmUuY29u ZnRlc3QuKiBnbW9uLm91dCBiYi5vdXQgY29uZnRlc3QkYWNfZXhlZXh0IFwNCiAgY29uZnRlc3Qu JGFjX29iamV4dCBjb25mdGVzdC5iZWFtIGNvbmZ0ZXN0LiRhY19leHQNCmZpDQoNCiAgICAgICAg ICBmaQ0KDQpmaQ0KeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1 bHQ6ICRnbF9jdl9mdW5jX3djcnRvbWJfcmV0dmFsIiA+JjUNCiRhc19lY2hvICIkZ2xfY3ZfZnVu Y193Y3J0b21iX3JldHZhbCIgPiY2OyB9DQogICAgICBjYXNlICIkZ2xfY3ZfZnVuY193Y3J0b21i X3JldHZhbCIgaW4NCiAgICAgICAgKnllcykgOzsNCiAgICAgICAgKikgUkVQTEFDRV9XQ1JUT01C PTEgOzsNCiAgICAgIGVzYWMNCiAgICBmaQ0KICBmaQ0KICBpZiB0ZXN0ICRIQVZFX1dDUlRPTUIg PSAwIHx8IHRlc3QgJFJFUExBQ0VfV0NSVE9NQiA9IDE7IHRoZW4NCg0KICAgIDoNCg0KDQoNCg0K DQoNCg0KDQoNCiAgZ2xfTElCT0JKUz0iJGdsX0xJQk9CSlMgd2NydG9tYi4kYWNfb2JqZXh0Ig0K DQoNCiAgOg0KDQogIGZpDQoNCg0KDQoNCiAgR05VTElCX1dDUlRPTUI9MQ0KDQoNCg0KJGFzX2Vj aG8gIiNkZWZpbmUgR05VTElCX1RFU1RfV0NSVE9NQiAxIiA+PmNvbmZkZWZzLmgNCg0KDQoNCiAg IyBDb2RlIGZyb20gbW9kdWxlIHdjc3dpZHRoOg0KDQoNCg0KDQogIGlmIHRlc3QgJGFjX2N2X2Z1 bmNfd2Nzd2lkdGggPSBubzsgdGhlbg0KICAgIEhBVkVfV0NTV0lEVEg9MA0KICBlbHNlDQogICAg aWYgdGVzdCAkUkVQTEFDRV9XQ1dJRFRIID0gMTsgdGhlbg0KICAgICAgICAgICAgICAgICAgUkVQ TEFDRV9XQ1NXSURUSD0xDQogICAgZmkNCiAgZmkNCiAgaWYgdGVzdCAkSEFWRV9XQ1NXSURUSCA9 IDAgfHwgdGVzdCAkUkVQTEFDRV9XQ1NXSURUSCA9IDE7IHRoZW4NCg0KDQoNCg0KDQoNCg0KDQog IGdsX0xJQk9CSlM9IiRnbF9MSUJPQkpTIHdjc3dpZHRoLiRhY19vYmpleHQiDQoNCiAgZmkNCg0K DQoNCg0KICBHTlVMSUJfV0NTV0lEVEg9MQ0KDQoNCg0KJGFzX2VjaG8gIiNkZWZpbmUgR05VTElC X1RFU1RfV0NTV0lEVEggMSIgPj5jb25mZGVmcy5oDQoNCg0KDQogICMgQ29kZSBmcm9tIG1vZHVs ZSB3Y3R5cGUtaDoNCg0KDQoNCg0KDQogIGlmIHRlc3QgJGFjX2N2X2Z1bmNfaXN3Y250cmwgPSB5 ZXM7IHRoZW4NCiAgICBIQVZFX0lTV0NOVFJMPTENCiAgZWxzZQ0KICAgIEhBVkVfSVNXQ05UUkw9 MA0KICBmaQ0KDQoNCg0KDQoNCiAgaWYgdGVzdCAkZ3RfY3ZfY193aW50X3QgPSB5ZXM7IHRoZW4N CiAgICBIQVZFX1dJTlRfVD0xDQogIGVsc2UNCiAgICBIQVZFX1dJTlRfVD0wDQogIGZpDQoNCg0K DQoNCg0KDQoNCg0KDQoNCg0KICAgICBpZiB0ZXN0ICRnbF9jdl9oYXZlX2luY2x1ZGVfbmV4dCA9 IHllczsgdGhlbg0KICAgICAgIGdsX2N2X25leHRfd2N0eXBlX2g9Jzwnd2N0eXBlLmgnPicNCiAg ICAgZWxzZQ0KICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTog Y2hlY2tpbmcgYWJzb2x1dGUgbmFtZSBvZiA8d2N0eXBlLmg+IiA+JjUNCiRhc19lY2hvX24gImNo ZWNraW5nIGFic29sdXRlIG5hbWUgb2YgPHdjdHlwZS5oPi4uLiAiID4mNjsgfQ0KaWYgJHtnbF9j dl9uZXh0X3djdHlwZV9oKzp9IGZhbHNlOyB0aGVuIDoNCiAgJGFzX2VjaG9fbiAiKGNhY2hlZCkg IiA+JjYNCmVsc2UNCg0KICAgICAgICAgICAgIGlmIHRlc3QgJGFjX2N2X2hlYWRlcl93Y3R5cGVf aCA9IHllczsgdGhlbg0KDQoNCiAgICAgICAgICAgICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNF T0YgPmNvbmZ0ZXN0LiRhY19leHQNCi8qIGVuZCBjb25mZGVmcy5oLiAgKi8NCiNpbmNsdWRlIDx3 Y3R5cGUuaD4NCg0KX0FDRU9GDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICIkaG9zdF9vcyIgaW4NCiAgICAgICAgICAg ICAgICAgYWl4KikgZ2xfYWJzbmFtZV9jcHA9IiRhY19jcHAgLUMiIDs7DQogICAgICAgICAgICAg ICAgICopICAgIGdsX2Fic25hbWVfY3BwPSIkYWNfY3BwIiA7Ow0KICAgICAgICAgICAgICAgZXNh Yw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgZ2xfY3ZfbmV4dF93Y3R5cGVfaD0nIidgKGV2YWwgIiRnbF9hYnNuYW1lX2NwcCBjb25m dGVzdC4kYWNfZXh0IikgMj4mNSB8DQogICAgICAgICAgICAgICAgICBzZWQgLW4gJ1wjL3djdHlw ZS5oI3sNCiAgICAgICAgICAgICAgICAgICAgcyMuKiJcKC4qL3djdHlwZS5oXCkiLiojXDEjDQog ICAgICAgICAgICAgICAgICAgIHMjXi9bXi9dIy8vJiMNCiAgICAgICAgICAgICAgICAgICAgcA0K ICAgICAgICAgICAgICAgICAgICBxDQogICAgICAgICAgICAgICAgICB9J2AnIicNCiAgICAgICAg ICBlbHNlDQogICAgICAgICAgICAgICBnbF9jdl9uZXh0X3djdHlwZV9oPSc8J3djdHlwZS5oJz4n DQogICAgICAgICAgICAgZmkNCg0KDQpmaQ0KeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5v LSRMSU5FTk99OiByZXN1bHQ6ICRnbF9jdl9uZXh0X3djdHlwZV9oIiA+JjUNCiRhc19lY2hvICIk Z2xfY3ZfbmV4dF93Y3R5cGVfaCIgPiY2OyB9DQogICAgIGZpDQogICAgIE5FWFRfV0NUWVBFX0g9 JGdsX2N2X25leHRfd2N0eXBlX2gNCg0KICAgICBpZiB0ZXN0ICRnbF9jdl9oYXZlX2luY2x1ZGVf bmV4dCA9IHllcyB8fCB0ZXN0ICRnbF9jdl9oYXZlX2luY2x1ZGVfbmV4dCA9IGJ1Z2d5OyB0aGVu DQogICAgICAgIyBJTkNMVURFX05FWFRfQVNfRklSU1RfRElSRUNUSVZFPSdpbmNsdWRlX25leHQn DQogICAgICAgZ2xfbmV4dF9hc19maXJzdF9kaXJlY3RpdmU9Jzwnd2N0eXBlLmgnPicNCiAgICAg ZWxzZQ0KICAgICAgICMgSU5DTFVERV9ORVhUX0FTX0ZJUlNUX0RJUkVDVElWRT0naW5jbHVkZScN CiAgICAgICBnbF9uZXh0X2FzX2ZpcnN0X2RpcmVjdGl2ZT0kZ2xfY3ZfbmV4dF93Y3R5cGVfaA0K ICAgICBmaQ0KICAgICBORVhUX0FTX0ZJUlNUX0RJUkVDVElWRV9XQ1RZUEVfSD0kZ2xfbmV4dF9h c19maXJzdF9kaXJlY3RpdmUNCg0KDQoNCg0KICBpZiB0ZXN0ICRhY19jdl9oZWFkZXJfd2N0eXBl X2ggPSB5ZXM7IHRoZW4NCiAgICBpZiB0ZXN0ICRhY19jdl9mdW5jX2lzd2NudHJsID0geWVzOyB0 aGVuDQogICAgICAgICAgICAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJ TkVOT306IGNoZWNraW5nIHdoZXRoZXIgaXN3Y250cmwgd29ya3MiID4mNQ0KJGFzX2VjaG9fbiAi Y2hlY2tpbmcgd2hldGhlciBpc3djbnRybCB3b3Jrcy4uLiAiID4mNjsgfQ0KaWYgJHtnbF9jdl9m dW5jX2lzd2NudHJsX3dvcmtzKzp9IGZhbHNlOyB0aGVuIDoNCiAgJGFzX2VjaG9fbiAiKGNhY2hl ZCkgIiA+JjYNCmVsc2UNCg0KICAgICAgICAgIGlmIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0g eWVzOyB0aGVuIDoNCiAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4 dA0KLyogZW5kIGNvbmZkZWZzLmguICAqLw0KI2luY2x1ZGUgPHN0ZGxpYi5oPg0KICAgICAgICAg ICAgICAgICAgICAgICAgICAjaWYgX19HTlVfTElCUkFSWV9fID09IDENCiAgICAgICAgICAgICAg ICAgICAgICAgICAgTGludXggbGliYzUgaTE4biBpcyBicm9rZW4uDQogICAgICAgICAgICAgICAg ICAgICAgICAgICNlbmRpZg0KaW50DQptYWluICgpDQp7DQoNCiAgOw0KICByZXR1cm4gMDsNCn0N Cl9BQ0VPRg0KaWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOg0KICBnbF9j dl9mdW5jX2lzd2NudHJsX3dvcmtzPXllcw0KZWxzZQ0KICBnbF9jdl9mdW5jX2lzd2NudHJsX3dv cmtzPW5vDQpmaQ0Kcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBj b25mdGVzdC4kYWNfZXh0DQoNCmVsc2UNCiAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29u ZnRlc3QuJGFjX2V4dA0KLyogZW5kIGNvbmZkZWZzLmguICAqLw0KDQogICAgICAgICAgICAgICAv KiBUcnU2NCB3aXRoIERlc2t0b3AgVG9vbGtpdCBDIGhhcyBhIGJ1ZzogPHN0ZGlvLmg+IG11c3Qg YmUNCiAgICAgICAgICAgICAgICAgIGluY2x1ZGVkIGJlZm9yZSA8d2NoYXIuaD4uDQogICAgICAg ICAgICAgICAgICBCU0QvT1MgNC4wLjEgaGFzIGEgYnVnOiA8c3RkZGVmLmg+LCA8c3RkaW8uaD4g YW5kIDx0aW1lLmg+DQogICAgICAgICAgICAgICAgICBtdXN0IGJlIGluY2x1ZGVkIGJlZm9yZSA8 d2NoYXIuaD4uICAqLw0KICAgICAgICAgICAgICAgI2luY2x1ZGUgPHN0ZGRlZi5oPg0KICAgICAg ICAgICAgICAgI2luY2x1ZGUgPHN0ZGlvLmg+DQogICAgICAgICAgICAgICAjaW5jbHVkZSA8dGlt ZS5oPg0KICAgICAgICAgICAgICAgI2luY2x1ZGUgPHdjaGFyLmg+DQogICAgICAgICAgICAgICAj aW5jbHVkZSA8d2N0eXBlLmg+DQogICAgICAgICAgICAgICBpbnQgbWFpbiAoKSB7IHJldHVybiBp c3dwcmludCAoJ3gnKSA9PSAwOyB9DQoNCl9BQ0VPRg0KaWYgYWNfZm5fY190cnlfcnVuICIkTElO RU5PIjsgdGhlbiA6DQogIGdsX2N2X2Z1bmNfaXN3Y250cmxfd29ya3M9eWVzDQplbHNlDQogIGds X2N2X2Z1bmNfaXN3Y250cmxfd29ya3M9bm8NCmZpDQpybSAtZiBjb3JlICouY29yZSBjb3JlLmNv bmZ0ZXN0LiogZ21vbi5vdXQgYmIub3V0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCBcDQogIGNvbmZ0ZXN0 LiRhY19vYmpleHQgY29uZnRlc3QuYmVhbSBjb25mdGVzdC4kYWNfZXh0DQpmaQ0KDQoNCmZpDQp7 ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGdsX2N2X2Z1 bmNfaXN3Y250cmxfd29ya3MiID4mNQ0KJGFzX2VjaG8gIiRnbF9jdl9mdW5jX2lzd2NudHJsX3dv cmtzIiA+JjY7IH0NCiAgICBmaQ0KICAgIEhBVkVfV0NUWVBFX0g9MQ0KICBlbHNlDQogICAgSEFW RV9XQ1RZUEVfSD0wDQogIGZpDQoNCg0KICBpZiB0ZXN0ICIkZ2xfY3ZfZnVuY19pc3djbnRybF93 b3JrcyIgPSBubzsgdGhlbg0KICAgIFJFUExBQ0VfSVNXQ05UUkw9MQ0KICBlbHNlDQogICAgUkVQ TEFDRV9JU1dDTlRSTD0wDQogIGZpDQoNCg0KICBpZiB0ZXN0ICRIQVZFX0lTV0NOVFJMID0gMCB8 fCB0ZXN0ICRSRVBMQUNFX0lTV0NOVFJMID0gMTsgdGhlbg0KICAgICAgICA6DQogIGZpDQoNCiAg ICAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5n IGZvciB3Y3R5cGVfdCIgPiY1DQokYXNfZWNob19uICJjaGVja2luZyBmb3Igd2N0eXBlX3QuLi4g IiA+JjY7IH0NCmlmICR7Z2xfY3ZfdHlwZV93Y3R5cGVfdCs6fSBmYWxzZTsgdGhlbiA6DQogICRh c19lY2hvX24gIihjYWNoZWQpICIgPiY2DQplbHNlDQogIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNF T0YgPmNvbmZ0ZXN0LiRhY19leHQNCi8qIGVuZCBjb25mZGVmcy5oLiAgKi8NCi8qIFRydTY0IHdp dGggRGVza3RvcCBUb29sa2l0IEMgaGFzIGEgYnVnOiA8c3RkaW8uaD4gbXVzdCBiZQ0KICAgICAg ICAgICAgICAgaW5jbHVkZWQgYmVmb3JlIDx3Y2hhci5oPi4NCiAgICAgICAgICAgICAgIEJTRC9P UyA0LjAuMSBoYXMgYSBidWc6IDxzdGRkZWYuaD4sIDxzdGRpby5oPiBhbmQgPHRpbWUuaD4NCiAg ICAgICAgICAgICAgIG11c3QgYmUgaW5jbHVkZWQgYmVmb3JlIDx3Y2hhci5oPi4gICovDQogICAg ICAgICAgICAjaW5jbHVkZSA8c3RkZGVmLmg+DQogICAgICAgICAgICAjaW5jbHVkZSA8c3RkaW8u aD4NCiAgICAgICAgICAgICNpbmNsdWRlIDx0aW1lLmg+DQogICAgICAgICAgICAjaW5jbHVkZSA8 d2NoYXIuaD4NCiAgICAgICAgICAgICNpZiBIQVZFX1dDVFlQRV9IDQogICAgICAgICAgICAjIGlu Y2x1ZGUgPHdjdHlwZS5oPg0KICAgICAgICAgICAgI2VuZGlmDQogICAgICAgICAgICB3Y3R5cGVf dCBhOw0KDQppbnQNCm1haW4gKCkNCnsNCg0KICA7DQogIHJldHVybiAwOw0KfQ0KX0FDRU9GDQpp ZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6DQogIGdsX2N2X3R5cGVfd2N0 eXBlX3Q9eWVzDQplbHNlDQogIGdsX2N2X3R5cGVfd2N0eXBlX3Q9bm8NCmZpDQpybSAtZiBjb3Jl IGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQNCg0KZmkN CnsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkZ2xfY3Zf dHlwZV93Y3R5cGVfdCIgPiY1DQokYXNfZWNobyAiJGdsX2N2X3R5cGVfd2N0eXBlX3QiID4mNjsg fQ0KICBpZiB0ZXN0ICRnbF9jdl90eXBlX3djdHlwZV90ID0gbm87IHRoZW4NCiAgICBIQVZFX1dD VFlQRV9UPTANCiAgZmkNCg0KICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRM SU5FTk99OiBjaGVja2luZyBmb3Igd2N0cmFuc190IiA+JjUNCiRhc19lY2hvX24gImNoZWNraW5n IGZvciB3Y3RyYW5zX3QuLi4gIiA+JjY7IH0NCmlmICR7Z2xfY3ZfdHlwZV93Y3RyYW5zX3QrOn0g ZmFsc2U7IHRoZW4gOg0KICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNg0KZWxzZQ0KICBjYXQg Y29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0DQovKiBlbmQgY29uZmRlZnMu aC4gICovDQovKiBUcnU2NCB3aXRoIERlc2t0b3AgVG9vbGtpdCBDIGhhcyBhIGJ1ZzogPHN0ZGlv Lmg+IG11c3QgYmUNCiAgICAgICAgICAgICAgIGluY2x1ZGVkIGJlZm9yZSA8d2NoYXIuaD4uDQog ICAgICAgICAgICAgICBCU0QvT1MgNC4wLjEgaGFzIGEgYnVnOiA8c3RkZGVmLmg+LCA8c3RkaW8u aD4gYW5kIDx0aW1lLmg+DQogICAgICAgICAgICAgICBtdXN0IGJlIGluY2x1ZGVkIGJlZm9yZSA8 d2NoYXIuaD4uICAqLw0KICAgICAgICAgICAgI2luY2x1ZGUgPHN0ZGRlZi5oPg0KICAgICAgICAg ICAgI2luY2x1ZGUgPHN0ZGlvLmg+DQogICAgICAgICAgICAjaW5jbHVkZSA8dGltZS5oPg0KICAg ICAgICAgICAgI2luY2x1ZGUgPHdjaGFyLmg+DQogICAgICAgICAgICAjaW5jbHVkZSA8d2N0eXBl Lmg+DQogICAgICAgICAgICB3Y3RyYW5zX3QgYTsNCg0KaW50DQptYWluICgpDQp7DQoNCiAgOw0K ICByZXR1cm4gMDsNCn0NCl9BQ0VPRg0KaWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7 IHRoZW4gOg0KICBnbF9jdl90eXBlX3djdHJhbnNfdD15ZXMNCmVsc2UNCiAgZ2xfY3ZfdHlwZV93 Y3RyYW5zX3Q9bm8NCmZpDQpybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2Jq ZXh0IGNvbmZ0ZXN0LiRhY19leHQNCg0KZmkNCnsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVu by0kTElORU5PfTogcmVzdWx0OiAkZ2xfY3ZfdHlwZV93Y3RyYW5zX3QiID4mNQ0KJGFzX2VjaG8g IiRnbF9jdl90eXBlX3djdHJhbnNfdCIgPiY2OyB9DQogIGlmIHRlc3QgJGdsX2N2X3R5cGVfd2N0 cmFuc190ID0gbm87IHRoZW4NCiAgICBIQVZFX1dDVFJBTlNfVD0wDQogIGZpDQoNCg0KICAgIGZv ciBnbF9mdW5jIGluIHdjdHlwZSBpc3djdHlwZSB3Y3RyYW5zIHRvd2N0cmFucyAgICAgOyBkbw0K ICAgIGFzX2dsX1N5bWJvbD1gJGFzX2VjaG8gImdsX2N2X2hhdmVfcmF3X2RlY2xfJGdsX2Z1bmMi IHwgJGFzX3RyX3NoYA0KICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5P fTogY2hlY2tpbmcgd2hldGhlciAkZ2xfZnVuYyBpcyBkZWNsYXJlZCB3aXRob3V0IGEgbWFjcm8i ID4mNQ0KJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciAkZ2xfZnVuYyBpcyBkZWNsYXJlZCB3 aXRob3V0IGEgbWFjcm8uLi4gIiA+JjY7IH0NCmlmIGV2YWwgXCR7JGFzX2dsX1N5bWJvbCs6fSBm YWxzZTsgdGhlbiA6DQogICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2DQplbHNlDQogIGNhdCBj b25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQNCi8qIGVuZCBjb25mZGVmcy5o LiAgKi8NCg0KLyogVHJ1NjQgd2l0aCBEZXNrdG9wIFRvb2xraXQgQyBoYXMgYSBidWc6IDxzdGRp by5oPiBtdXN0IGJlIGluY2x1ZGVkIGJlZm9yZQ0KICAgPHdjaGFyLmg+Lg0KICAgQlNEL09TIDQu MC4xIGhhcyBhIGJ1ZzogPHN0ZGRlZi5oPiwgPHN0ZGlvLmg+IGFuZCA8dGltZS5oPiBtdXN0IGJl DQogICBpbmNsdWRlZCBiZWZvcmUgPHdjaGFyLmg+LiAgKi8NCiNpZiAhKGRlZmluZWQgX19HTElC Q19fICYmICFkZWZpbmVkIF9fVUNMSUJDX18pDQojIGluY2x1ZGUgPHN0ZGRlZi5oPg0KIyBpbmNs dWRlIDxzdGRpby5oPg0KIyBpbmNsdWRlIDx0aW1lLmg+DQojIGluY2x1ZGUgPHdjaGFyLmg+DQoj ZW5kaWYNCiNpbmNsdWRlIDx3Y3R5cGUuaD4NCg0KaW50DQptYWluICgpDQp7DQojdW5kZWYgJGds X2Z1bmMNCiAgKHZvaWQpICRnbF9mdW5jOw0KICA7DQogIHJldHVybiAwOw0KfQ0KX0FDRU9GDQpp ZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6DQogIGV2YWwgIiRhc19nbF9T eW1ib2w9eWVzIg0KZWxzZQ0KICBldmFsICIkYXNfZ2xfU3ltYm9sPW5vIg0KZmkNCnJtIC1mIGNv cmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dA0KZmkN CmV2YWwgYWNfcmVzPVwkJGFzX2dsX1N5bWJvbA0KCSAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6 JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX3JlcyIgPiY1DQokYXNfZWNobyAiJGFj X3JlcyIgPiY2OyB9DQogICAgIGlmIGV2YWwgdGVzdCBcInhcJCIkYXNfZ2xfU3ltYm9sIlwiID0g eCJ5ZXMiOyB0aGVuIDoNCiAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRg0KI2RlZmluZSBgJGFz X2VjaG8gIkhBVkVfUkFXX0RFQ0xfJGdsX2Z1bmMiIHwgJGFzX3RyX2NwcGAgMQ0KX0FDRU9GDQoN CiAgICAgICAgICAgICAgICAgICAgIGV2YWwgYWNfY3ZfaGF2ZV9kZWNsXyRnbF9mdW5jPXllcw0K ZmkNCiAgICAgIGRvbmUNCg0KDQogICMgQ29kZSBmcm9tIG1vZHVsZSB3Y3dpZHRoOg0KDQoNCg0K DQoNCg0KDQoNCg0KDQoNCiAgYWNfZm5fY19jaGVja19kZWNsICIkTElORU5PIiAid2N3aWR0aCIg ImFjX2N2X2hhdmVfZGVjbF93Y3dpZHRoIiAiDQovKiBBSVggMy4yLjUgZGVjbGFyZXMgd2N3aWR0 aCBpbiA8c3RyaW5nLmg+LiAqLw0KI2luY2x1ZGUgPHN0cmluZy5oPg0KLyogVHJ1NjQgd2l0aCBE ZXNrdG9wIFRvb2xraXQgQyBoYXMgYSBidWc6IDxzdGRpby5oPiBtdXN0IGJlIGluY2x1ZGVkIGJl Zm9yZQ0KICAgPHdjaGFyLmg+Lg0KICAgQlNEL09TIDQuMC4xIGhhcyBhIGJ1ZzogPHN0ZGRlZi5o PiwgPHN0ZGlvLmg+IGFuZCA8dGltZS5oPiBtdXN0IGJlIGluY2x1ZGVkDQogICBiZWZvcmUgPHdj aGFyLmg+LiAgKi8NCiNpbmNsdWRlIDxzdGRkZWYuaD4NCiNpbmNsdWRlIDxzdGRpby5oPg0KI2lu Y2x1ZGUgPHRpbWUuaD4NCiNpbmNsdWRlIDx3Y2hhci5oPg0KDQoiDQppZiB0ZXN0ICJ4JGFjX2N2 X2hhdmVfZGVjbF93Y3dpZHRoIiA9IHh5ZXM7IHRoZW4gOg0KICBhY19oYXZlX2RlY2w9MQ0KZWxz ZQ0KICBhY19oYXZlX2RlY2w9MA0KZmkNCg0KY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRg0KI2Rl ZmluZSBIQVZFX0RFQ0xfV0NXSURUSCAkYWNfaGF2ZV9kZWNsDQpfQUNFT0YNCg0KICBpZiB0ZXN0 ICRhY19jdl9oYXZlX2RlY2xfd2N3aWR0aCAhPSB5ZXM7IHRoZW4NCiAgICBIQVZFX0RFQ0xfV0NX SURUSD0wDQogIGZpDQoNCiAgaWYgdGVzdCAkYWNfY3ZfZnVuY193Y3dpZHRoID0geWVzOyB0aGVu DQogICAgICAgICAgICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99 OiBjaGVja2luZyB3aGV0aGVyIHdjd2lkdGggd29ya3MgcmVhc29uYWJseSBpbiBVVEYtOCBsb2Nh bGVzIiA+JjUNCiRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgd2N3aWR0aCB3b3JrcyByZWFz b25hYmx5IGluIFVURi04IGxvY2FsZXMuLi4gIiA+JjY7IH0NCmlmICR7Z2xfY3ZfZnVuY193Y3dp ZHRoX3dvcmtzKzp9IGZhbHNlOyB0aGVuIDoNCiAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYN CmVsc2UNCg0KICAgICAgICBpZiB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IHllczsgdGhlbiA6 DQoNCiAgICAgICAgICAgY2FzZSAiJGhvc3Rfb3MiIGluDQogICAgICAgICAgICAgICAgICAgICAj IEd1ZXNzIHllcyBvbiBnbGliYyBhbmQgQUlYIDcgc3lzdGVtcy4NCiAgICAgICAgICAgICAqLWdu dSogfCBhaXhbNy05XSopIGdsX2N2X2Z1bmNfd2N3aWR0aF93b3Jrcz0iZ3Vlc3NpbmcgeWVzIjs7 DQogICAgICAgICAgICAgKikgICAgICAgICAgICAgICAgICBnbF9jdl9mdW5jX3djd2lkdGhfd29y a3M9Imd1ZXNzaW5nIG5vIjs7DQogICAgICAgICAgIGVzYWMNCg0KZWxzZQ0KICBjYXQgY29uZmRl ZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0DQovKiBlbmQgY29uZmRlZnMuaC4gICov DQoNCiNpbmNsdWRlIDxsb2NhbGUuaD4NCi8qIEFJWCAzLjIuNSBkZWNsYXJlcyB3Y3dpZHRoIGlu IDxzdHJpbmcuaD4uICovDQojaW5jbHVkZSA8c3RyaW5nLmg+DQovKiBUcnU2NCB3aXRoIERlc2t0 b3AgVG9vbGtpdCBDIGhhcyBhIGJ1ZzogPHN0ZGlvLmg+IG11c3QgYmUgaW5jbHVkZWQgYmVmb3Jl DQogICA8d2NoYXIuaD4uDQogICBCU0QvT1MgNC4wLjEgaGFzIGEgYnVnOiA8c3RkZGVmLmg+LCA8 c3RkaW8uaD4gYW5kIDx0aW1lLmg+IG11c3QgYmUgaW5jbHVkZWQNCiAgIGJlZm9yZSA8d2NoYXIu aD4uICAqLw0KI2luY2x1ZGUgPHN0ZGRlZi5oPg0KI2luY2x1ZGUgPHN0ZGlvLmg+DQojaW5jbHVk ZSA8dGltZS5oPg0KI2luY2x1ZGUgPHdjaGFyLmg+DQojaWYgIUhBVkVfREVDTF9XQ1dJRFRIDQpl eHRlcm4NCiMgaWZkZWYgX19jcGx1c3BsdXMNCiJDIg0KIyBlbmRpZg0KaW50IHdjd2lkdGggKGlu dCk7DQojZW5kaWYNCmludCBtYWluICgpDQp7DQogIGludCByZXN1bHQgPSAwOw0KICBpZiAoc2V0 bG9jYWxlIChMQ19BTEwsICJmcl9GUi5VVEYtOCIpICE9IE5VTEwpDQogICAgew0KICAgICAgaWYg KHdjd2lkdGggKDB4MDMwMSkgPiAwKQ0KICAgICAgICByZXN1bHQgfD0gMTsNCiAgICAgIGlmICh3 Y3dpZHRoICgweDIwMEIpID4gMCkNCiAgICAgICAgcmVzdWx0IHw9IDI7DQogICAgfQ0KICByZXR1 cm4gcmVzdWx0Ow0KfQ0KX0FDRU9GDQppZiBhY19mbl9jX3RyeV9ydW4gIiRMSU5FTk8iOyB0aGVu IDoNCiAgZ2xfY3ZfZnVuY193Y3dpZHRoX3dvcmtzPXllcw0KZWxzZQ0KICBnbF9jdl9mdW5jX3dj d2lkdGhfd29ya3M9bm8NCmZpDQpybSAtZiBjb3JlICouY29yZSBjb3JlLmNvbmZ0ZXN0LiogZ21v bi5vdXQgYmIub3V0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCBcDQogIGNvbmZ0ZXN0LiRhY19vYmpleHQg Y29uZnRlc3QuYmVhbSBjb25mdGVzdC4kYWNfZXh0DQpmaQ0KDQoNCmZpDQp7ICRhc19lY2hvICIk YXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGdsX2N2X2Z1bmNfd2N3aWR0aF93 b3JrcyIgPiY1DQokYXNfZWNobyAiJGdsX2N2X2Z1bmNfd2N3aWR0aF93b3JrcyIgPiY2OyB9DQog ICAgY2FzZSAiJGdsX2N2X2Z1bmNfd2N3aWR0aF93b3JrcyIgaW4NCiAgICAgICp5ZXMpIDs7DQog ICAgICAqbm8pIFJFUExBQ0VfV0NXSURUSD0xIDs7DQogICAgZXNhYw0KICBmaQ0KICBpZiB0ZXN0 ICRhY19jdl9mdW5jX3djd2lkdGggIT0geWVzIHx8IHRlc3QgJFJFUExBQ0VfV0NXSURUSCA9IDE7 IHRoZW4NCg0KDQoNCg0KDQoNCg0KDQogIGdsX0xJQk9CSlM9IiRnbF9MSUJPQkpTIHdjd2lkdGgu JGFjX29iamV4dCINCg0KICBmaQ0KICBpZiB0ZXN0ICRhY19jdl9mdW5jX3djd2lkdGggIT0geWVz IHx8IHRlc3QgJFJFUExBQ0VfV0NXSURUSCA9IDEgXA0KICAgICB8fCB0ZXN0ICRIQVZFX0RFQ0xf V0NXSURUSCA9IDA7IHRoZW4NCg0KICAgIDoNCg0KICBmaQ0KDQoNCg0KDQogIEdOVUxJQl9XQ1dJ RFRIPTENCg0KDQoNCiRhc19lY2hvICIjZGVmaW5lIEdOVUxJQl9URVNUX1dDV0lEVEggMSIgPj5j b25mZGVmcy5oDQoNCg0KDQogICMgQ29kZSBmcm9tIG1vZHVsZSB3aW5zei1pb2N0bDoNCg0KIHsg JGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciB1 c2Ugb2YgVElPQ0dXSU5TWiByZXF1aXJlcyBzeXMvaW9jdGwuaCIgPiY1DQokYXNfZWNob19uICJj aGVja2luZyB3aGV0aGVyIHVzZSBvZiBUSU9DR1dJTlNaIHJlcXVpcmVzIHN5cy9pb2N0bC5oLi4u ICIgPiY2OyB9DQppZiAke2dsX2N2X3N5c190aW9jZ3dpbnN6X25lZWRzX3N5c19pb2N0bF9oKzp9 IGZhbHNlOyB0aGVuIDoNCiAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYNCmVsc2UNCiAgZ2xf Y3Zfc3lzX3Rpb2Nnd2luc3pfbmVlZHNfc3lzX2lvY3RsX2g9bm8NCg0KICBpZiB0ZXN0ICRnbF9j dl9zeXNfdGlvY2d3aW5zel9uZWVkc190ZXJtaW9zX2ggPSBubzsgdGhlbg0KICAgIGNhdCBjb25m ZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQNCi8qIGVuZCBjb25mZGVmcy5oLiAg Ki8NCiNpbmNsdWRlIDxzeXMvdHlwZXMuaD4NCiMgICAgIGluY2x1ZGUgPHN5cy9pb2N0bC5oPg0K IyAgICAgaWZkZWYgVElPQ0dXSU5TWg0KICAgICAgICB5ZXMNCiMgICAgIGVuZGlmDQoNCl9BQ0VP Rg0KaWYgKGV2YWwgIiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCIpIDI+JjUgfA0KICAkRUdSRVAg InllcyIgPi9kZXYvbnVsbCAyPiYxOyB0aGVuIDoNCiAgZ2xfY3Zfc3lzX3Rpb2Nnd2luc3pfbmVl ZHNfc3lzX2lvY3RsX2g9eWVzDQpmaQ0Kcm0gLWYgY29uZnRlc3QqDQoNCiAgZmkNCg0KZmkNCnsg JGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkZ2xfY3Zfc3lz X3Rpb2Nnd2luc3pfbmVlZHNfc3lzX2lvY3RsX2giID4mNQ0KJGFzX2VjaG8gIiRnbF9jdl9zeXNf dGlvY2d3aW5zel9uZWVkc19zeXNfaW9jdGxfaCIgPiY2OyB9DQogIGlmIHRlc3QgJGdsX2N2X3N5 c190aW9jZ3dpbnN6X25lZWRzX3N5c19pb2N0bF9oID0geWVzOyB0aGVuDQoNCiRhc19lY2hvICIj ZGVmaW5lIEdXSU5TWl9JTl9TWVNfSU9DVEwgMSIgPj5jb25mZGVmcy5oDQoNCiAgZmkNCg0KICAj IENvZGUgZnJvbSBtb2R1bGUgd2luc3otdGVybWlvczoNCg0KIHsgJGFzX2VjaG8gIiRhc19tZTok e2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciB1c2Ugb2YgVElPQ0dXSU5TWiBy ZXF1aXJlcyB0ZXJtaW9zLmgiID4mNQ0KJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciB1c2Ug b2YgVElPQ0dXSU5TWiByZXF1aXJlcyB0ZXJtaW9zLmguLi4gIiA+JjY7IH0NCmlmICR7Z2xfY3Zf c3lzX3Rpb2Nnd2luc3pfbmVlZHNfdGVybWlvc19oKzp9IGZhbHNlOyB0aGVuIDoNCiAgJGFzX2Vj aG9fbiAiKGNhY2hlZCkgIiA+JjYNCmVsc2UNCiAgZ2xfY3Zfc3lzX3Rpb2Nnd2luc3pfbmVlZHNf dGVybWlvc19oPW5vDQoNCiAgIGlmIHRlc3QgJGFjX2N2X3N5c19wb3NpeF90ZXJtaW9zID0geWVz OyB0aGVuDQogICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQN Ci8qIGVuZCBjb25mZGVmcy5oLiAgKi8NCiNpbmNsdWRlIDxzeXMvdHlwZXMuaD4NCiMgICAgICBp bmNsdWRlIDx0ZXJtaW9zLmg+DQojICAgICAgaWZkZWYgVElPQ0dXSU5TWg0KICAgICAgICAgeWVz DQojICAgICAgZW5kaWYNCg0KX0FDRU9GDQppZiAoZXZhbCAiJGFjX2NwcCBjb25mdGVzdC4kYWNf ZXh0IikgMj4mNSB8DQogICRFR1JFUCAieWVzIiA+L2Rldi9udWxsIDI+JjE7IHRoZW4gOg0KICBn bF9jdl9zeXNfdGlvY2d3aW5zel9uZWVkc190ZXJtaW9zX2g9eWVzDQpmaQ0Kcm0gLWYgY29uZnRl c3QqDQoNCiAgIGZpDQoNCmZpDQp7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVO T306IHJlc3VsdDogJGdsX2N2X3N5c190aW9jZ3dpbnN6X25lZWRzX3Rlcm1pb3NfaCIgPiY1DQok YXNfZWNobyAiJGdsX2N2X3N5c190aW9jZ3dpbnN6X25lZWRzX3Rlcm1pb3NfaCIgPiY2OyB9DQoN Cg0KICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3 aGV0aGVyIHVzZSBvZiBzdHJ1Y3Qgd2luc2l6ZSByZXF1aXJlcyBzeXMvcHRlbS5oIiA+JjUNCiRh c19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgdXNlIG9mIHN0cnVjdCB3aW5zaXplIHJlcXVpcmVz IHN5cy9wdGVtLmguLi4gIiA+JjY7IH0NCmlmICR7Z2xfY3Zfc3lzX3N0cnVjdF93aW5zaXplX25l ZWRzX3N5c19wdGVtX2grOn0gZmFsc2U7IHRoZW4gOg0KICAkYXNfZWNob19uICIoY2FjaGVkKSAi ID4mNg0KZWxzZQ0KICBnbF9jdl9zeXNfc3RydWN0X3dpbnNpemVfbmVlZHNfc3lzX3B0ZW1faD15 ZXMNCiAgICAgIGlmIHRlc3QgJGFjX2N2X3N5c19wb3NpeF90ZXJtaW9zID0geWVzOyB0aGVuDQog ICAgICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQNCi8qIGVu ZCBjb25mZGVmcy5oLiAgKi8NCiNpbmNsdWRlIDx0ZXJtaW9zLmg+DQppbnQNCm1haW4gKCkNCnsN CnN0cnVjdCB3aW5zaXplIHg7DQogICAgICAgICAgICBpZiAoc2l6ZW9mIHggPiAwKSByZXR1cm4g MDsNCiAgOw0KICByZXR1cm4gMDsNCn0NCl9BQ0VPRg0KaWYgYWNfZm5fY190cnlfY29tcGlsZSAi JExJTkVOTyI7IHRoZW4gOg0KICBnbF9jdl9zeXNfc3RydWN0X3dpbnNpemVfbmVlZHNfc3lzX3B0 ZW1faD1ubw0KZmkNCnJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQg Y29uZnRlc3QuJGFjX2V4dA0KICAgICAgZmkNCiAgICAgIGlmIHRlc3QgJGdsX2N2X3N5c19zdHJ1 Y3Rfd2luc2l6ZV9uZWVkc19zeXNfcHRlbV9oID0geWVzOyB0aGVuDQogICAgICAgIGNhdCBjb25m ZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQNCi8qIGVuZCBjb25mZGVmcy5oLiAg Ki8NCiNpbmNsdWRlIDxzeXMvcHRlbS5oPg0KaW50DQptYWluICgpDQp7DQpzdHJ1Y3Qgd2luc2l6 ZSB4Ow0KICAgICAgICAgICAgaWYgKHNpemVvZiB4ID4gMCkgcmV0dXJuIDA7DQogIDsNCiAgcmV0 dXJuIDA7DQp9DQpfQUNFT0YNCmlmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVu IDoNCg0KZWxzZQ0KICBnbF9jdl9zeXNfc3RydWN0X3dpbnNpemVfbmVlZHNfc3lzX3B0ZW1faD1u bw0KZmkNCnJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRl c3QuJGFjX2V4dA0KICAgICAgZmkNCmZpDQp7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8t JExJTkVOT306IHJlc3VsdDogJGdsX2N2X3N5c19zdHJ1Y3Rfd2luc2l6ZV9uZWVkc19zeXNfcHRl bV9oIiA+JjUNCiRhc19lY2hvICIkZ2xfY3Zfc3lzX3N0cnVjdF93aW5zaXplX25lZWRzX3N5c19w dGVtX2giID4mNjsgfQ0KICAgaWYgdGVzdCAkZ2xfY3Zfc3lzX3N0cnVjdF93aW5zaXplX25lZWRz X3N5c19wdGVtX2ggPSB5ZXM7IHRoZW4NCg0KJGFzX2VjaG8gIiNkZWZpbmUgV0lOU0laRV9JTl9Q VEVNIDEiID4+Y29uZmRlZnMuaA0KDQogICBmaQ0KICAjIENvZGUgZnJvbSBtb2R1bGUgd3JpdGU6 DQoNCg0KDQoNCg0KDQoNCiAgR05VTElCX1dSSVRFPTENCg0KDQoNCiRhc19lY2hvICIjZGVmaW5l IEdOVUxJQl9URVNUX1dSSVRFIDEiID4+Y29uZmRlZnMuaA0KDQoNCg0KICAjIENvZGUgZnJvbSBt b2R1bGUgd3JpdGUtYW55LWZpbGU6DQoNCg0KDQoNCg0KDQoNCg0KDQoNCiAgZ2xfTElCT0JKUz0i JGdsX0xJQk9CSlMgd3JpdGUtYW55LWZpbGUuJGFjX29iamV4dCINCg0KDQogICMgQ29kZSBmcm9t IG1vZHVsZSB4YWxsb2M6DQoNCg0KDQoNCg0KDQoNCg0KDQogIGdsX0xJQk9CSlM9IiRnbF9MSUJP QkpTIHhtYWxsb2MuJGFjX29iamV4dCINCg0KDQoNCg0KICA6DQoNCg0KICA6DQoNCg0KICAjIENv ZGUgZnJvbSBtb2R1bGUgeGFsbG9jLWRpZToNCiAgIyBDb2RlIGZyb20gbW9kdWxlIHhmcmVvcGVu Og0KICAjIENvZGUgZnJvbSBtb2R1bGUgeGdldGN3ZDoNCg0KDQoNCg0KDQoNCg0KDQoNCiAgZ2xf TElCT0JKUz0iJGdsX0xJQk9CSlMgeGdldGN3ZC4kYWNfb2JqZXh0Ig0KDQoNCg0KDQogICMgQ29k ZSBmcm9tIG1vZHVsZSB4Z2V0aG9zdG5hbWU6DQogICMgQ29kZSBmcm9tIG1vZHVsZSB4bWVtY29s bDoNCiAgIyBDb2RlIGZyb20gbW9kdWxlIHhuYW5vc2xlZXA6DQoNCg0KDQoNCg0KDQoNCg0KDQog IGdsX0xJQk9CSlM9IiRnbF9MSUJPQkpTIHhuYW5vc2xlZXAuJGFjX29iamV4dCINCg0KDQogICMg Q29kZSBmcm9tIG1vZHVsZSB4cHJpbnRmOg0KDQoNCiAgWEdFVFRFWFRfRVhUUkFfT1BUSU9OUz0i JFhHRVRURVhUX0VYVFJBX09QVElPTlMgLS1mbGFnPXhwcmludGY6MTpjLWZvcm1hdCINCg0KDQoN CiAgWEdFVFRFWFRfRVhUUkFfT1BUSU9OUz0iJFhHRVRURVhUX0VYVFJBX09QVElPTlMgLS1mbGFn PXh2cHJpbnRmOjE6Yy1mb3JtYXQiDQoNCg0KDQogIFhHRVRURVhUX0VYVFJBX09QVElPTlM9IiRY R0VUVEVYVF9FWFRSQV9PUFRJT05TIC0tZmxhZz14ZnByaW50ZjoyOmMtZm9ybWF0Ig0KDQoNCg0K ICBYR0VUVEVYVF9FWFRSQV9PUFRJT05TPSIkWEdFVFRFWFRfRVhUUkFfT1BUSU9OUyAtLWZsYWc9 eHZmcHJpbnRmOjI6Yy1mb3JtYXQiDQoNCiAgIyBDb2RlIGZyb20gbW9kdWxlIHhwcmludGYtcG9z aXg6DQogICMgQ29kZSBmcm9tIG1vZHVsZSB4cmVhZGxpbms6DQogICMgQ29kZSBmcm9tIG1vZHVs ZSB4c2l6ZToNCg0KDQoNCiAgZm9yIGFjX2hlYWRlciBpbiBzdGRpbnQuaA0KZG8gOg0KICBhY19m bl9jX2NoZWNrX2hlYWRlcl9tb25ncmVsICIkTElORU5PIiAic3RkaW50LmgiICJhY19jdl9oZWFk ZXJfc3RkaW50X2giICIkYWNfaW5jbHVkZXNfZGVmYXVsdCINCmlmIHRlc3QgIngkYWNfY3ZfaGVh ZGVyX3N0ZGludF9oIiA9IHh5ZXM7IHRoZW4gOg0KICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9G DQojZGVmaW5lIEhBVkVfU1RESU5UX0ggMQ0KX0FDRU9GDQoNCmZpDQoNCmRvbmUNCg0KDQogICMg Q29kZSBmcm9tIG1vZHVsZSB4c3RyaWNvbnY6DQogICMgQ29kZSBmcm9tIG1vZHVsZSB4c3RybmR1 cDoNCg0KDQogIDoNCg0KDQogICMgQ29kZSBmcm9tIG1vZHVsZSB4c3RydG9kOg0KDQoNCg0KDQoN Cg0KDQoNCg0KICBnbF9MSUJPQkpTPSIkZ2xfTElCT0JKUyB4c3RydG9kLiRhY19vYmpleHQiDQoN Cg0KICAjIENvZGUgZnJvbSBtb2R1bGUgeHN0cnRvaW1heDoNCiAgIyBDb2RlIGZyb20gbW9kdWxl IHhzdHJ0b2w6DQoNCg0KDQoNCg0KDQoNCg0KDQogIGdsX0xJQk9CSlM9IiRnbF9MSUJPQkpTIHhz dHJ0b2wuJGFjX29iamV4dCINCg0KDQoNCg0KDQoNCg0KDQoNCiAgZ2xfTElCT0JKUz0iJGdsX0xJ Qk9CSlMgeHN0cnRvdWwuJGFjX29iamV4dCINCg0KDQoNCg0KDQoNCg0KDQoNCiAgZ2xfTElCT0JK Uz0iJGdsX0xJQk9CSlMgeHN0cnRvbC1lcnJvci4kYWNfb2JqZXh0Ig0KDQoNCiAgIyBDb2RlIGZy b20gbW9kdWxlIHhzdHJ0b2xkOg0KDQoNCg0KDQoNCg0KDQoNCg0KICBnbF9MSUJPQkpTPSIkZ2xf TElCT0JKUyB4c3RydG9sZC4kYWNfb2JqZXh0Ig0KDQoNCiAgIyBDb2RlIGZyb20gbW9kdWxlIHhz dHJ0b3VtYXg6DQogICMgQ29kZSBmcm9tIG1vZHVsZSB4dmFzcHJpbnRmOg0KDQoNCg0KDQoNCiAg WEdFVFRFWFRfRVhUUkFfT1BUSU9OUz0iJFhHRVRURVhUX0VYVFJBX09QVElPTlMgLS1mbGFnPXhh c3ByaW50ZjoxOmMtZm9ybWF0Ig0KDQogICMgQ29kZSBmcm9tIG1vZHVsZSB5ZXNubzoNCg0KDQoN Cg0KDQoNCg0KDQoNCiAgZ2xfTElCT0JKUz0iJGdsX0xJQk9CSlMgeWVzbm8uJGFjX29iamV4dCIN Cg0KDQogICAgOg0KDQogICMgRW5kIG9mIGNvZGUgZnJvbSBtb2R1bGVzDQoNCg0KDQoNCg0KDQoN Cg0KDQogIGdsdGVzdHNfbGliZGVwcz0NCiAgZ2x0ZXN0c19sdGxpYmRlcHM9DQoNCg0KDQoNCg0K DQoNCg0KDQogIGdsX3NvdXJjZV9iYXNlPSdnbnVsaWItdGVzdHMnDQogIGdsdGVzdHNfV0lUTkVT Uz1JTl9gZWNobyAiJHtQQUNLQUdFLSRQQUNLQUdFX1RBUk5BTUV9IiB8IExDX0FMTD1DIHRyIGFi Y2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6IEFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaIHwgTENf QUxMPUMgc2VkIC1lICdzL1teQS1aMC05X10vXy9nJ2BfR05VTElCX1RFU1RTDQoNCiAgZ2xfbW9k dWxlX2luZGljYXRvcl9jb25kaXRpb249JGdsdGVzdHNfV0lUTkVTUw0KDQoNCiAgaWYgdGVzdCAi JGFjX2N2X2hlYWRlcl93aW5zb2NrMl9oIiA9IHllczsgdGhlbg0KDQoNCg0KDQoNCg0KDQoNCiAg Z2x0ZXN0c19MSUJPQkpTPSIkZ2x0ZXN0c19MSUJPQkpTIGFjY2VwdC4kYWNfb2JqZXh0Ig0KDQog IGZpDQoNCg0KDQogIEdOVUxJQl9BQ0NFUFQ9JGdsX21vZHVsZV9pbmRpY2F0b3JfY29uZGl0aW9u DQoNCg0KDQokYXNfZWNobyAiI2RlZmluZSBHTlVMSUJfVEVTVF9BQ0NFUFQgMSIgPj5jb25mZGVm cy5oDQoNCg0KDQoNCg0KICBpZiB0ZXN0ICIkYWNfY3ZfaGVhZGVyX3dpbnNvY2syX2giID0geWVz OyB0aGVuDQoNCg0KDQoNCg0KDQoNCg0KICBnbHRlc3RzX0xJQk9CSlM9IiRnbHRlc3RzX0xJQk9C SlMgYmluZC4kYWNfb2JqZXh0Ig0KDQogIGZpDQoNCg0KDQogIEdOVUxJQl9CSU5EPSRnbF9tb2R1 bGVfaW5kaWNhdG9yX2NvbmRpdGlvbg0KDQoNCg0KJGFzX2VjaG8gIiNkZWZpbmUgR05VTElCX1RF U1RfQklORCAxIiA+PmNvbmZkZWZzLmgNCg0KDQoNCg0KDQoNCiAgeyAkYXNfZWNobyAiJGFzX21l OiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgYSB0cmFkaXRpb25hbCBmcmVuY2gg bG9jYWxlIiA+JjUNCiRhc19lY2hvX24gImNoZWNraW5nIGZvciBhIHRyYWRpdGlvbmFsIGZyZW5j aCBsb2NhbGUuLi4gIiA+JjY7IH0NCmlmICR7Z3RfY3ZfbG9jYWxlX2ZyKzp9IGZhbHNlOyB0aGVu IDoNCiAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYNCmVsc2UNCg0KICAgIGNhdCBjb25mZGVm cy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQNCi8qIGVuZCBjb25mZGVmcy5oLiAgKi8N Cg0KI2luY2x1ZGUgPGxvY2FsZS5oPg0KI2luY2x1ZGUgPHRpbWUuaD4NCiNpZiBIQVZFX0xBTkdJ TkZPX0NPREVTRVQNCiMgaW5jbHVkZSA8bGFuZ2luZm8uaD4NCiNlbmRpZg0KI2luY2x1ZGUgPHN0 ZGxpYi5oPg0KI2luY2x1ZGUgPHN0cmluZy5oPg0Kc3RydWN0IHRtIHQ7DQpjaGFyIGJ1ZlsxNl07 DQppbnQgbWFpbiAoKSB7DQogIC8qIENoZWNrIHdoZXRoZXIgdGhlIGdpdmVuIGxvY2FsZSBuYW1l IGlzIHJlY29nbml6ZWQgYnkgdGhlIHN5c3RlbS4gICovDQojaWYgKGRlZmluZWQgX1dJTjMyIHx8 IGRlZmluZWQgX19XSU4zMl9fKSAmJiAhZGVmaW5lZCBfX0NZR1dJTl9fDQogIC8qIE9uIG5hdGl2 ZSBXaW4zMiwgc2V0bG9jYWxlKGNhdGVnb3J5LCAiIikgbG9va3MgYXQgdGhlIHN5c3RlbSBzZXR0 aW5ncywNCiAgICAgbm90IGF0IHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZXMuICBBbHNvLCB3aGVu IGFuIGVuY29kaW5nIHN1ZmZpeCBzdWNoDQogICAgIGFzICIuNjUwMDEiIG9yICIuNTQ5MzYiIGlz IHNwZWZpY2llZCwgaXQgc3VjY2VlZHMgYnV0IHNldHMgdGhlIExDX0NUWVBFDQogICAgIGNhdGVn b3J5IG9mIHRoZSBsb2NhbGUgdG8gIkMiLiAgKi8NCiAgaWYgKHNldGxvY2FsZSAoTENfQUxMLCBn ZXRlbnYgKCJMQ19BTEwiKSkgPT0gTlVMTA0KICAgICAgfHwgc3RyY21wIChzZXRsb2NhbGUgKExD X0NUWVBFLCBOVUxMKSwgIkMiKSA9PSAwKQ0KICAgIHJldHVybiAxOw0KI2Vsc2UNCiAgaWYgKHNl dGxvY2FsZSAoTENfQUxMLCAiIikgPT0gTlVMTCkgcmV0dXJuIDE7DQojZW5kaWYNCiAgLyogQ2hl Y2sgd2hldGhlciBubF9sYW5naW5mbyhDT0RFU0VUKSBpcyBub25lbXB0eSBhbmQgbm90ICJBU0NJ SSIgb3IgIjY0NiIuDQogICAgIE9uIE1hY09TIFggMTAuMy41IChEYXJ3aW4gNy41KSBpbiB0aGUg ZnJfRlIgbG9jYWxlLCBubF9sYW5naW5mbyhDT0RFU0VUKQ0KICAgICBpcyBlbXB0eSwgYW5kIHRo ZSBiZWhhdmlvdXIgb2YgVGNsIDguNCBpbiB0aGlzIGxvY2FsZSBpcyBub3QgdXNlZnVsLg0KICAg ICBPbiBPcGVuQlNEIDQuMCwgd2hlbiBhbiB1bnN1cHBvcnRlZCBsb2NhbGUgaXMgc3BlY2lmaWVk LCBzZXRsb2NhbGUoKQ0KICAgICBzdWNjZWVkcyBidXQgdGhlbiBubF9sYW5naW5mbyhDT0RFU0VU KSBpcyAiNjQ2Ii4gSW4gdGhpcyBzaXR1YXRpb24sDQogICAgIHNvbWUgdW5pdCB0ZXN0cyBmYWls Lg0KICAgICBPbiBNaXJCU0QgMTAsIHdoZW4gYW4gdW5zdXBwb3J0ZWQgbG9jYWxlIGlzIHNwZWNp ZmllZCwgc2V0bG9jYWxlKCkNCiAgICAgc3VjY2VlZHMgYnV0IHRoZW4gbmxfbGFuZ2luZm8oQ09E RVNFVCkgaXMgIlVURi04Ii4gICovDQojaWYgSEFWRV9MQU5HSU5GT19DT0RFU0VUDQogIHsNCiAg ICBjb25zdCBjaGFyICpjcyA9IG5sX2xhbmdpbmZvIChDT0RFU0VUKTsNCiAgICBpZiAoY3NbMF0g PT0gJ1wwJyB8fCBzdHJjbXAgKGNzLCAiQVNDSUkiKSA9PSAwIHx8IHN0cmNtcCAoY3MsICI2NDYi KSA9PSAwDQogICAgICAgIHx8IHN0cmNtcCAoY3MsICJVVEYtOCIpID09IDApDQogICAgICByZXR1 cm4gMTsNCiAgfQ0KI2VuZGlmDQojaWZkZWYgX19DWUdXSU5fXw0KICAvKiBPbiBDeWd3aW4sIGF2 b2lkIGxvY2FsZSBuYW1lcyB3aXRob3V0IGVuY29kaW5nIHN1ZmZpeCwgYmVjYXVzZSB0aGUNCiAg ICAgbG9jYWxlX2NoYXJzZXQoKSBmdW5jdGlvbiByZWxpZXMgb24gdGhlIGVuY29kaW5nIHN1ZmZp eC4gIE5vdGUgdGhhdA0KICAgICBMQ19BTEwgaXMgc2V0IG9uIHRoZSBjb21tYW5kIGxpbmUuICAq Lw0KICBpZiAoc3RyY2hyIChnZXRlbnYgKCJMQ19BTEwiKSwgJy4nKSA9PSBOVUxMKSByZXR1cm4g MTsNCiNlbmRpZg0KICAvKiBDaGVjayB3aGV0aGVyIGluIHRoZSBhYmJyZXZpYXRpb24gb2YgdGhl IHNlY29uZCBtb250aCwgdGhlIHNlY29uZA0KICAgICBjaGFyYWN0ZXIgKHNob3VsZCBiZSBVKzAw RTk6IExBVElOIFNNQUxMIExFVFRFUiBFIFdJVEggQUNVVEUpIGlzIG9ubHkNCiAgICAgb25lIGJ5 dGUgbG9uZy4gVGhpcyBleGNsdWRlcyB0aGUgVVRGLTggZW5jb2RpbmcuICAqLw0KICB0LnRtX3ll YXIgPSAxOTc1IC0gMTkwMDsgdC50bV9tb24gPSAyIC0gMTsgdC50bV9tZGF5ID0gNDsNCiAgaWYg KHN0cmZ0aW1lIChidWYsIHNpemVvZiAoYnVmKSwgIiViIiwgJnQpIDwgMyB8fCBidWZbMl0gIT0g J3YnKSByZXR1cm4gMTsNCiAgLyogQ2hlY2sgd2hldGhlciB0aGUgZGVjaW1hbCBzZXBhcmF0b3Ig aXMgYSBjb21tYS4NCiAgICAgT24gTmV0QlNEIDMuMCBpbiB0aGUgZnJfRlIuSVNPODg1OS0xIGxv Y2FsZSwgbG9jYWxlY29udigpLT5kZWNpbWFsX3BvaW50DQogICAgIGFyZSBubF9sYW5naW5mbyhS QURJWENIQVIpIGFyZSBib3RoICIuIi4gICovDQogIGlmIChsb2NhbGVjb252ICgpIC0+ZGVjaW1h bF9wb2ludFswXSAhPSAnLCcpIHJldHVybiAxOw0KICByZXR1cm4gMDsNCn0NCg0KX0FDRU9GDQog ICAgaWYgeyB7IGV2YWwgZWNobyAiXCJcJGFzX21lXCI6JHthc19saW5lbm8tJExJTkVOT306IFwi JGFjX2xpbmtcIiI7IH0gPiY1DQogIChldmFsICRhY19saW5rKSAyPiY1DQogIGFjX3N0YXR1cz0k Pw0KICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJD8gPSAkYWNfc3Rh dHVzIiA+JjUNCiAgdGVzdCAkYWNfc3RhdHVzID0gMDsgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JGFj X2V4ZWV4dDsgdGhlbg0KICAgICAgY2FzZSAiJGhvc3Rfb3MiIGluDQogICAgICAgICMgSGFuZGxl IG5hdGl2ZSBXaW5kb3dzIHNwZWNpYWxseSwgYmVjYXVzZSB0aGVyZSBzZXRsb2NhbGUoKSBpbnRl cnByZXRzDQogICAgICAgICMgImFyIiBhcyAiQXJhYmljIiBvciAiQXJhYmljX1NhdWRpIEFyYWJp YS4xMjU2IiwNCiAgICAgICAgIyAiZnIiIG9yICJmcmEiIGFzICJGcmVuY2giIG9yICJGcmVuY2hf RnJhbmNlLjEyNTIiLA0KICAgICAgICAjICJnZSIoISkgb3IgImRldSIoISkgYXMgIkdlcm1hbiIg b3IgIkdlcm1hbl9HZXJtYW55LjEyNTIiLA0KICAgICAgICAjICJqYSIgYXMgIkphcGFuZXNlIiBv ciAiSmFwYW5lc2VfSmFwYW4uOTMyIiwNCiAgICAgICAgIyBhbmQgc2ltaWxhci4NCiAgICAgICAg bWluZ3cqKQ0KICAgICAgICAgICMgVGVzdCBmb3IgdGhlIG5hdGl2ZSBXaW4zMiBsb2NhbGUgbmFt ZS4NCiAgICAgICAgICBpZiAoTENfQUxMPUZyZW5jaF9GcmFuY2UuMTI1MiBMQ19USU1FPSBMQ19D VFlQRT0gLi9jb25mdGVzdDsgZXhpdCkgMj4vZGV2L251bGw7IHRoZW4NCiAgICAgICAgICAgIGd0 X2N2X2xvY2FsZV9mcj1GcmVuY2hfRnJhbmNlLjEyNTINCiAgICAgICAgICBlbHNlDQogICAgICAg ICAgICAjIE5vbmUgZm91bmQuDQogICAgICAgICAgICBndF9jdl9sb2NhbGVfZnI9bm9uZQ0KICAg ICAgICAgIGZpDQogICAgICAgICAgOzsNCiAgICAgICAgKikNCiAgICAgICAgICAjIFNldHRpbmcg TENfQUxMIGlzIG5vdCBlbm91Z2guIE5lZWQgdG8gc2V0IExDX1RJTUUgdG8gZW1wdHksIGJlY2F1 c2UNCiAgICAgICAgICAjIG90aGVyd2lzZSBvbiBNYWNPUyBYIDEwLjMuNSB0aGUgTENfVElNRT1D IGZyb20gdGhlIGJlZ2lubmluZyBvZiB0aGUNCiAgICAgICAgICAjIGNvbmZpZ3VyZSBzY3JpcHQg d291bGQgb3ZlcnJpZGUgdGhlIExDX0FMTCBzZXR0aW5nLiBMaWtld2lzZSBmb3INCiAgICAgICAg ICAjIExDX0NUWVBFLCB3aGljaCBpcyBhbHNvIHNldCBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBj b25maWd1cmUgc2NyaXB0Lg0KICAgICAgICAgICMgVGVzdCBmb3IgdGhlIHVzdWFsIGxvY2FsZSBu YW1lLg0KICAgICAgICAgIGlmIChMQ19BTEw9ZnJfRlIgTENfVElNRT0gTENfQ1RZUEU9IC4vY29u ZnRlc3Q7IGV4aXQpIDI+L2Rldi9udWxsOyB0aGVuDQogICAgICAgICAgICBndF9jdl9sb2NhbGVf ZnI9ZnJfRlINCiAgICAgICAgICBlbHNlDQogICAgICAgICAgICAjIFRlc3QgZm9yIHRoZSBsb2Nh bGUgbmFtZSB3aXRoIGV4cGxpY2l0IGVuY29kaW5nIHN1ZmZpeC4NCiAgICAgICAgICAgIGlmIChM Q19BTEw9ZnJfRlIuSVNPLTg4NTktMSBMQ19USU1FPSBMQ19DVFlQRT0gLi9jb25mdGVzdDsgZXhp dCkgMj4vZGV2L251bGw7IHRoZW4NCiAgICAgICAgICAgICAgZ3RfY3ZfbG9jYWxlX2ZyPWZyX0ZS LklTTy04ODU5LTENCiAgICAgICAgICAgIGVsc2UNCiAgICAgICAgICAgICAgIyBUZXN0IGZvciB0 aGUgQUlYLCBPU0YvMSwgRnJlZUJTRCwgTmV0QlNELCBPcGVuQlNEIGxvY2FsZSBuYW1lLg0KICAg ICAgICAgICAgICBpZiAoTENfQUxMPWZyX0ZSLklTTzg4NTktMSBMQ19USU1FPSBMQ19DVFlQRT0g Li9jb25mdGVzdDsgZXhpdCkgMj4vZGV2L251bGw7IHRoZW4NCiAgICAgICAgICAgICAgICBndF9j dl9sb2NhbGVfZnI9ZnJfRlIuSVNPODg1OS0xDQogICAgICAgICAgICAgIGVsc2UNCiAgICAgICAg ICAgICAgICAjIFRlc3QgZm9yIHRoZSBIUC1VWCBsb2NhbGUgbmFtZS4NCiAgICAgICAgICAgICAg ICBpZiAoTENfQUxMPWZyX0ZSLmlzbzg4NTkxIExDX1RJTUU9IExDX0NUWVBFPSAuL2NvbmZ0ZXN0 OyBleGl0KSAyPi9kZXYvbnVsbDsgdGhlbg0KICAgICAgICAgICAgICAgICAgZ3RfY3ZfbG9jYWxl X2ZyPWZyX0ZSLmlzbzg4NTkxDQogICAgICAgICAgICAgICAgZWxzZQ0KICAgICAgICAgICAgICAg ICAgIyBUZXN0IGZvciB0aGUgU29sYXJpcyA3IGxvY2FsZSBuYW1lLg0KICAgICAgICAgICAgICAg ICAgaWYgKExDX0FMTD1mciBMQ19USU1FPSBMQ19DVFlQRT0gLi9jb25mdGVzdDsgZXhpdCkgMj4v ZGV2L251bGw7IHRoZW4NCiAgICAgICAgICAgICAgICAgICAgZ3RfY3ZfbG9jYWxlX2ZyPWZyDQog ICAgICAgICAgICAgICAgICBlbHNlDQogICAgICAgICAgICAgICAgICAgICMgTm9uZSBmb3VuZC4N CiAgICAgICAgICAgICAgICAgICAgZ3RfY3ZfbG9jYWxlX2ZyPW5vbmUNCiAgICAgICAgICAgICAg ICAgIGZpDQogICAgICAgICAgICAgICAgZmkNCiAgICAgICAgICAgICAgZmkNCiAgICAgICAgICAg IGZpDQogICAgICAgICAgZmkNCiAgICAgICAgICA7Ow0KICAgICAgZXNhYw0KICAgIGZpDQogICAg cm0gLWZyIGNvbmZ0ZXN0Kg0KDQpmaQ0KeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRM SU5FTk99OiByZXN1bHQ6ICRndF9jdl9sb2NhbGVfZnIiID4mNQ0KJGFzX2VjaG8gIiRndF9jdl9s b2NhbGVfZnIiID4mNjsgfQ0KICBMT0NBTEVfRlI9JGd0X2N2X2xvY2FsZV9mcg0KDQoNCg0KDQog IHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIGEg ZnJlbmNoIFVuaWNvZGUgbG9jYWxlIiA+JjUNCiRhc19lY2hvX24gImNoZWNraW5nIGZvciBhIGZy ZW5jaCBVbmljb2RlIGxvY2FsZS4uLiAiID4mNjsgfQ0KaWYgJHtndF9jdl9sb2NhbGVfZnJfdXRm OCs6fSBmYWxzZTsgdGhlbiA6DQogICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2DQplbHNlDQoN CiAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0DQovKiBlbmQg Y29uZmRlZnMuaC4gICovDQoNCiNpbmNsdWRlIDxsb2NhbGUuaD4NCiNpbmNsdWRlIDx0aW1lLmg+ DQojaWYgSEFWRV9MQU5HSU5GT19DT0RFU0VUDQojIGluY2x1ZGUgPGxhbmdpbmZvLmg+DQojZW5k aWYNCiNpbmNsdWRlIDxzdGRsaWIuaD4NCiNpbmNsdWRlIDxzdHJpbmcuaD4NCnN0cnVjdCB0bSB0 Ow0KY2hhciBidWZbMTZdOw0KaW50IG1haW4gKCkgew0KICAvKiBPbiBCZU9TIGFuZCBIYWlrdSwg bG9jYWxlcyBhcmUgbm90IGltcGxlbWVudGVkIGluIGxpYmMuICBSYXRoZXIsIGxpYmludGwNCiAg ICAgaW1pdGF0ZXMgbG9jYWxlIGRlcGVuZGVudCBiZWhhdmlvdXIgYnkgbG9va2luZyBhdCB0aGUg ZW52aXJvbm1lbnQNCiAgICAgdmFyaWFibGVzLCBhbmQgYWxsIGxvY2FsZXMgdXNlIHRoZSBVVEYt OCBlbmNvZGluZy4gICovDQojaWYgIShkZWZpbmVkIF9fQkVPU19fIHx8IGRlZmluZWQgX19IQUlL VV9fKQ0KICAvKiBDaGVjayB3aGV0aGVyIHRoZSBnaXZlbiBsb2NhbGUgbmFtZSBpcyByZWNvZ25p emVkIGJ5IHRoZSBzeXN0ZW0uICAqLw0KIyBpZiAoZGVmaW5lZCBfV0lOMzIgfHwgZGVmaW5lZCBf X1dJTjMyX18pICYmICFkZWZpbmVkIF9fQ1lHV0lOX18NCiAgLyogT24gbmF0aXZlIFdpbjMyLCBz ZXRsb2NhbGUoY2F0ZWdvcnksICIiKSBsb29rcyBhdCB0aGUgc3lzdGVtIHNldHRpbmdzLA0KICAg ICBub3QgYXQgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlcy4gIEFsc28sIHdoZW4gYW4gZW5jb2Rp bmcgc3VmZml4IHN1Y2gNCiAgICAgYXMgIi42NTAwMSIgb3IgIi41NDkzNiIgaXMgc3BlZmljaWVk LCBpdCBzdWNjZWVkcyBidXQgc2V0cyB0aGUgTENfQ1RZUEUNCiAgICAgY2F0ZWdvcnkgb2YgdGhl IGxvY2FsZSB0byAiQyIuICAqLw0KICBpZiAoc2V0bG9jYWxlIChMQ19BTEwsIGdldGVudiAoIkxD X0FMTCIpKSA9PSBOVUxMDQogICAgICB8fCBzdHJjbXAgKHNldGxvY2FsZSAoTENfQ1RZUEUsIE5V TEwpLCAiQyIpID09IDApDQogICAgcmV0dXJuIDE7DQojIGVsc2UNCiAgaWYgKHNldGxvY2FsZSAo TENfQUxMLCAiIikgPT0gTlVMTCkgcmV0dXJuIDE7DQojIGVuZGlmDQogIC8qIENoZWNrIHdoZXRo ZXIgbmxfbGFuZ2luZm8oQ09ERVNFVCkgaXMgbm9uZW1wdHkgYW5kIG5vdCAiQVNDSUkiIG9yICI2 NDYiLg0KICAgICBPbiBNYWNPUyBYIDEwLjMuNSAoRGFyd2luIDcuNSkgaW4gdGhlIGZyX0ZSIGxv Y2FsZSwgbmxfbGFuZ2luZm8oQ09ERVNFVCkNCiAgICAgaXMgZW1wdHksIGFuZCB0aGUgYmVoYXZp b3VyIG9mIFRjbCA4LjQgaW4gdGhpcyBsb2NhbGUgaXMgbm90IHVzZWZ1bC4NCiAgICAgT24gT3Bl bkJTRCA0LjAsIHdoZW4gYW4gdW5zdXBwb3J0ZWQgbG9jYWxlIGlzIHNwZWNpZmllZCwgc2V0bG9j YWxlKCkNCiAgICAgc3VjY2VlZHMgYnV0IHRoZW4gbmxfbGFuZ2luZm8oQ09ERVNFVCkgaXMgIjY0 NiIuIEluIHRoaXMgc2l0dWF0aW9uLA0KICAgICBzb21lIHVuaXQgdGVzdHMgZmFpbC4gICovDQoj IGlmIEhBVkVfTEFOR0lORk9fQ09ERVNFVA0KICB7DQogICAgY29uc3QgY2hhciAqY3MgPSBubF9s YW5naW5mbyAoQ09ERVNFVCk7DQogICAgaWYgKGNzWzBdID09ICdcMCcgfHwgc3RyY21wIChjcywg IkFTQ0lJIikgPT0gMCB8fCBzdHJjbXAgKGNzLCAiNjQ2IikgPT0gMCkNCiAgICAgIHJldHVybiAx Ow0KICB9DQojIGVuZGlmDQojIGlmZGVmIF9fQ1lHV0lOX18NCiAgLyogT24gQ3lnd2luLCBhdm9p ZCBsb2NhbGUgbmFtZXMgd2l0aG91dCBlbmNvZGluZyBzdWZmaXgsIGJlY2F1c2UgdGhlDQogICAg IGxvY2FsZV9jaGFyc2V0KCkgZnVuY3Rpb24gcmVsaWVzIG9uIHRoZSBlbmNvZGluZyBzdWZmaXgu ICBOb3RlIHRoYXQNCiAgICAgTENfQUxMIGlzIHNldCBvbiB0aGUgY29tbWFuZCBsaW5lLiAgKi8N CiAgaWYgKHN0cmNociAoZ2V0ZW52ICgiTENfQUxMIiksICcuJykgPT0gTlVMTCkgcmV0dXJuIDE7 DQojIGVuZGlmDQogIC8qIENoZWNrIHdoZXRoZXIgaW4gdGhlIGFiYnJldmlhdGlvbiBvZiB0aGUg c2Vjb25kIG1vbnRoLCB0aGUgc2Vjb25kDQogICAgIGNoYXJhY3RlciAoc2hvdWxkIGJlIFUrMDBF OTogTEFUSU4gU01BTEwgTEVUVEVSIEUgV0lUSCBBQ1VURSkgaXMNCiAgICAgdHdvIGJ5dGVzIGxv bmcsIHdpdGggVVRGLTggZW5jb2RpbmcuICAqLw0KICB0LnRtX3llYXIgPSAxOTc1IC0gMTkwMDsg dC50bV9tb24gPSAyIC0gMTsgdC50bV9tZGF5ID0gNDsNCiAgaWYgKHN0cmZ0aW1lIChidWYsIHNp emVvZiAoYnVmKSwgIiViIiwgJnQpIDwgNA0KICAgICAgfHwgYnVmWzFdICE9IChjaGFyKSAweGMz IHx8IGJ1ZlsyXSAhPSAoY2hhcikgMHhhOSB8fCBidWZbM10gIT0gJ3YnKQ0KICAgIHJldHVybiAx Ow0KI2VuZGlmDQogIC8qIENoZWNrIHdoZXRoZXIgdGhlIGRlY2ltYWwgc2VwYXJhdG9yIGlzIGEg Y29tbWEuDQogICAgIE9uIE5ldEJTRCAzLjAgaW4gdGhlIGZyX0ZSLklTTzg4NTktMSBsb2NhbGUs IGxvY2FsZWNvbnYoKS0+ZGVjaW1hbF9wb2ludA0KICAgICBhcmUgbmxfbGFuZ2luZm8oUkFESVhD SEFSKSBhcmUgYm90aCAiLiIuICAqLw0KICBpZiAobG9jYWxlY29udiAoKSAtPmRlY2ltYWxfcG9p bnRbMF0gIT0gJywnKSByZXR1cm4gMTsNCiAgcmV0dXJuIDA7DQp9DQoNCl9BQ0VPRg0KICAgIGlm IHsgeyBldmFsIGVjaG8gIlwiXCRhc19tZVwiOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcIiRhY19s aW5rXCIiOyB9ID4mNQ0KICAoZXZhbCAkYWNfbGluaykgMj4mNQ0KICBhY19zdGF0dXM9JD8NCiAg JGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCQ/ID0gJGFjX3N0YXR1cyIg PiY1DQogIHRlc3QgJGFjX3N0YXR1cyA9IDA7IH0gJiYgdGVzdCAtcyBjb25mdGVzdCRhY19leGVl eHQ7IHRoZW4NCiAgICAgIGNhc2UgIiRob3N0X29zIiBpbg0KICAgICAgICAjIEhhbmRsZSBuYXRp dmUgV2luZG93cyBzcGVjaWFsbHksIGJlY2F1c2UgdGhlcmUgc2V0bG9jYWxlKCkgaW50ZXJwcmV0 cw0KICAgICAgICAjICJhciIgYXMgIkFyYWJpYyIgb3IgIkFyYWJpY19TYXVkaSBBcmFiaWEuMTI1 NiIsDQogICAgICAgICMgImZyIiBvciAiZnJhIiBhcyAiRnJlbmNoIiBvciAiRnJlbmNoX0ZyYW5j ZS4xMjUyIiwNCiAgICAgICAgIyAiZ2UiKCEpIG9yICJkZXUiKCEpIGFzICJHZXJtYW4iIG9yICJH ZXJtYW5fR2VybWFueS4xMjUyIiwNCiAgICAgICAgIyAiamEiIGFzICJKYXBhbmVzZSIgb3IgIkph cGFuZXNlX0phcGFuLjkzMiIsDQogICAgICAgICMgYW5kIHNpbWlsYXIuDQogICAgICAgIG1pbmd3 KikNCiAgICAgICAgICAjIFRlc3QgZm9yIHRoZSBoeXBvdGhldGljYWwgbmF0aXZlIFdpbjMyIGxv Y2FsZSBuYW1lLg0KICAgICAgICAgIGlmIChMQ19BTEw9RnJlbmNoX0ZyYW5jZS42NTAwMSBMQ19U SU1FPSBMQ19DVFlQRT0gLi9jb25mdGVzdDsgZXhpdCkgMj4vZGV2L251bGw7IHRoZW4NCiAgICAg ICAgICAgIGd0X2N2X2xvY2FsZV9mcl91dGY4PUZyZW5jaF9GcmFuY2UuNjUwMDENCiAgICAgICAg ICBlbHNlDQogICAgICAgICAgICAjIE5vbmUgZm91bmQuDQogICAgICAgICAgICBndF9jdl9sb2Nh bGVfZnJfdXRmOD1ub25lDQogICAgICAgICAgZmkNCiAgICAgICAgICA7Ow0KICAgICAgICAqKQ0K ICAgICAgICAgICMgU2V0dGluZyBMQ19BTEwgaXMgbm90IGVub3VnaC4gTmVlZCB0byBzZXQgTENf VElNRSB0byBlbXB0eSwgYmVjYXVzZQ0KICAgICAgICAgICMgb3RoZXJ3aXNlIG9uIE1hY09TIFgg MTAuMy41IHRoZSBMQ19USU1FPUMgZnJvbSB0aGUgYmVnaW5uaW5nIG9mIHRoZQ0KICAgICAgICAg ICMgY29uZmlndXJlIHNjcmlwdCB3b3VsZCBvdmVycmlkZSB0aGUgTENfQUxMIHNldHRpbmcuIExp a2V3aXNlIGZvcg0KICAgICAgICAgICMgTENfQ1RZUEUsIHdoaWNoIGlzIGFsc28gc2V0IGF0IHRo ZSBiZWdpbm5pbmcgb2YgdGhlIGNvbmZpZ3VyZSBzY3JpcHQuDQogICAgICAgICAgIyBUZXN0IGZv ciB0aGUgdXN1YWwgbG9jYWxlIG5hbWUuDQogICAgICAgICAgaWYgKExDX0FMTD1mcl9GUiBMQ19U SU1FPSBMQ19DVFlQRT0gLi9jb25mdGVzdDsgZXhpdCkgMj4vZGV2L251bGw7IHRoZW4NCiAgICAg ICAgICAgIGd0X2N2X2xvY2FsZV9mcl91dGY4PWZyX0ZSDQogICAgICAgICAgZWxzZQ0KICAgICAg ICAgICAgIyBUZXN0IGZvciB0aGUgbG9jYWxlIG5hbWUgd2l0aCBleHBsaWNpdCBlbmNvZGluZyBz dWZmaXguDQogICAgICAgICAgICBpZiAoTENfQUxMPWZyX0ZSLlVURi04IExDX1RJTUU9IExDX0NU WVBFPSAuL2NvbmZ0ZXN0OyBleGl0KSAyPi9kZXYvbnVsbDsgdGhlbg0KICAgICAgICAgICAgICBn dF9jdl9sb2NhbGVfZnJfdXRmOD1mcl9GUi5VVEYtOA0KICAgICAgICAgICAgZWxzZQ0KICAgICAg ICAgICAgICAjIFRlc3QgZm9yIHRoZSBTb2xhcmlzIDcgbG9jYWxlIG5hbWUuDQogICAgICAgICAg ICAgIGlmIChMQ19BTEw9ZnIuVVRGLTggTENfVElNRT0gTENfQ1RZUEU9IC4vY29uZnRlc3Q7IGV4 aXQpIDI+L2Rldi9udWxsOyB0aGVuDQogICAgICAgICAgICAgICAgZ3RfY3ZfbG9jYWxlX2ZyX3V0 Zjg9ZnIuVVRGLTgNCiAgICAgICAgICAgICAgZWxzZQ0KICAgICAgICAgICAgICAgICMgTm9uZSBm b3VuZC4NCiAgICAgICAgICAgICAgICBndF9jdl9sb2NhbGVfZnJfdXRmOD1ub25lDQogICAgICAg ICAgICAgIGZpDQogICAgICAgICAgICBmaQ0KICAgICAgICAgIGZpDQogICAgICAgICAgOzsNCiAg ICAgIGVzYWMNCiAgICBmaQ0KICAgIHJtIC1mciBjb25mdGVzdCoNCg0KZmkNCnsgJGFzX2VjaG8g IiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkZ3RfY3ZfbG9jYWxlX2ZyX3V0 ZjgiID4mNQ0KJGFzX2VjaG8gIiRndF9jdl9sb2NhbGVfZnJfdXRmOCIgPiY2OyB9DQogIExPQ0FM RV9GUl9VVEY4PSRndF9jdl9sb2NhbGVfZnJfdXRmOA0KDQoNCg0KDQoNCiAgeyAkYXNfZWNobyAi JGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgYSB0cmFkaXRpb25hbCBm cmVuY2ggbG9jYWxlIiA+JjUNCiRhc19lY2hvX24gImNoZWNraW5nIGZvciBhIHRyYWRpdGlvbmFs IGZyZW5jaCBsb2NhbGUuLi4gIiA+JjY7IH0NCmlmICR7Z3RfY3ZfbG9jYWxlX2ZyKzp9IGZhbHNl OyB0aGVuIDoNCiAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYNCmVsc2UNCg0KICAgIGNhdCBj b25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQNCi8qIGVuZCBjb25mZGVmcy5o LiAgKi8NCg0KI2luY2x1ZGUgPGxvY2FsZS5oPg0KI2luY2x1ZGUgPHRpbWUuaD4NCiNpZiBIQVZF X0xBTkdJTkZPX0NPREVTRVQNCiMgaW5jbHVkZSA8bGFuZ2luZm8uaD4NCiNlbmRpZg0KI2luY2x1 ZGUgPHN0ZGxpYi5oPg0KI2luY2x1ZGUgPHN0cmluZy5oPg0Kc3RydWN0IHRtIHQ7DQpjaGFyIGJ1 ZlsxNl07DQppbnQgbWFpbiAoKSB7DQogIC8qIENoZWNrIHdoZXRoZXIgdGhlIGdpdmVuIGxvY2Fs ZSBuYW1lIGlzIHJlY29nbml6ZWQgYnkgdGhlIHN5c3RlbS4gICovDQojaWYgKGRlZmluZWQgX1dJ TjMyIHx8IGRlZmluZWQgX19XSU4zMl9fKSAmJiAhZGVmaW5lZCBfX0NZR1dJTl9fDQogIC8qIE9u IG5hdGl2ZSBXaW4zMiwgc2V0bG9jYWxlKGNhdGVnb3J5LCAiIikgbG9va3MgYXQgdGhlIHN5c3Rl bSBzZXR0aW5ncywNCiAgICAgbm90IGF0IHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZXMuICBBbHNv LCB3aGVuIGFuIGVuY29kaW5nIHN1ZmZpeCBzdWNoDQogICAgIGFzICIuNjUwMDEiIG9yICIuNTQ5 MzYiIGlzIHNwZWZpY2llZCwgaXQgc3VjY2VlZHMgYnV0IHNldHMgdGhlIExDX0NUWVBFDQogICAg IGNhdGVnb3J5IG9mIHRoZSBsb2NhbGUgdG8gIkMiLiAgKi8NCiAgaWYgKHNldGxvY2FsZSAoTENf QUxMLCBnZXRlbnYgKCJMQ19BTEwiKSkgPT0gTlVMTA0KICAgICAgfHwgc3RyY21wIChzZXRsb2Nh bGUgKExDX0NUWVBFLCBOVUxMKSwgIkMiKSA9PSAwKQ0KICAgIHJldHVybiAxOw0KI2Vsc2UNCiAg aWYgKHNldGxvY2FsZSAoTENfQUxMLCAiIikgPT0gTlVMTCkgcmV0dXJuIDE7DQojZW5kaWYNCiAg LyogQ2hlY2sgd2hldGhlciBubF9sYW5naW5mbyhDT0RFU0VUKSBpcyBub25lbXB0eSBhbmQgbm90 ICJBU0NJSSIgb3IgIjY0NiIuDQogICAgIE9uIE1hY09TIFggMTAuMy41IChEYXJ3aW4gNy41KSBp biB0aGUgZnJfRlIgbG9jYWxlLCBubF9sYW5naW5mbyhDT0RFU0VUKQ0KICAgICBpcyBlbXB0eSwg YW5kIHRoZSBiZWhhdmlvdXIgb2YgVGNsIDguNCBpbiB0aGlzIGxvY2FsZSBpcyBub3QgdXNlZnVs Lg0KICAgICBPbiBPcGVuQlNEIDQuMCwgd2hlbiBhbiB1bnN1cHBvcnRlZCBsb2NhbGUgaXMgc3Bl Y2lmaWVkLCBzZXRsb2NhbGUoKQ0KICAgICBzdWNjZWVkcyBidXQgdGhlbiBubF9sYW5naW5mbyhD T0RFU0VUKSBpcyAiNjQ2Ii4gSW4gdGhpcyBzaXR1YXRpb24sDQogICAgIHNvbWUgdW5pdCB0ZXN0 cyBmYWlsLg0KICAgICBPbiBNaXJCU0QgMTAsIHdoZW4gYW4gdW5zdXBwb3J0ZWQgbG9jYWxlIGlz IHNwZWNpZmllZCwgc2V0bG9jYWxlKCkNCiAgICAgc3VjY2VlZHMgYnV0IHRoZW4gbmxfbGFuZ2lu Zm8oQ09ERVNFVCkgaXMgIlVURi04Ii4gICovDQojaWYgSEFWRV9MQU5HSU5GT19DT0RFU0VUDQog IHsNCiAgICBjb25zdCBjaGFyICpjcyA9IG5sX2xhbmdpbmZvIChDT0RFU0VUKTsNCiAgICBpZiAo Y3NbMF0gPT0gJ1wwJyB8fCBzdHJjbXAgKGNzLCAiQVNDSUkiKSA9PSAwIHx8IHN0cmNtcCAoY3Ms ICI2NDYiKSA9PSAwDQogICAgICAgIHx8IHN0cmNtcCAoY3MsICJVVEYtOCIpID09IDApDQogICAg ICByZXR1cm4gMTsNCiAgfQ0KI2VuZGlmDQojaWZkZWYgX19DWUdXSU5fXw0KICAvKiBPbiBDeWd3 aW4sIGF2b2lkIGxvY2FsZSBuYW1lcyB3aXRob3V0IGVuY29kaW5nIHN1ZmZpeCwgYmVjYXVzZSB0 aGUNCiAgICAgbG9jYWxlX2NoYXJzZXQoKSBmdW5jdGlvbiByZWxpZXMgb24gdGhlIGVuY29kaW5n IHN1ZmZpeC4gIE5vdGUgdGhhdA0KICAgICBMQ19BTEwgaXMgc2V0IG9uIHRoZSBjb21tYW5kIGxp bmUuICAqLw0KICBpZiAoc3RyY2hyIChnZXRlbnYgKCJMQ19BTEwiKSwgJy4nKSA9PSBOVUxMKSBy ZXR1cm4gMTsNCiNlbmRpZg0KICAvKiBDaGVjayB3aGV0aGVyIGluIHRoZSBhYmJyZXZpYXRpb24g b2YgdGhlIHNlY29uZCBtb250aCwgdGhlIHNlY29uZA0KICAgICBjaGFyYWN0ZXIgKHNob3VsZCBi ZSBVKzAwRTk6IExBVElOIFNNQUxMIExFVFRFUiBFIFdJVEggQUNVVEUpIGlzIG9ubHkNCiAgICAg b25lIGJ5dGUgbG9uZy4gVGhpcyBleGNsdWRlcyB0aGUgVVRGLTggZW5jb2RpbmcuICAqLw0KICB0 LnRtX3llYXIgPSAxOTc1IC0gMTkwMDsgdC50bV9tb24gPSAyIC0gMTsgdC50bV9tZGF5ID0gNDsN CiAgaWYgKHN0cmZ0aW1lIChidWYsIHNpemVvZiAoYnVmKSwgIiViIiwgJnQpIDwgMyB8fCBidWZb Ml0gIT0gJ3YnKSByZXR1cm4gMTsNCiAgLyogQ2hlY2sgd2hldGhlciB0aGUgZGVjaW1hbCBzZXBh cmF0b3IgaXMgYSBjb21tYS4NCiAgICAgT24gTmV0QlNEIDMuMCBpbiB0aGUgZnJfRlIuSVNPODg1 OS0xIGxvY2FsZSwgbG9jYWxlY29udigpLT5kZWNpbWFsX3BvaW50DQogICAgIGFyZSBubF9sYW5n aW5mbyhSQURJWENIQVIpIGFyZSBib3RoICIuIi4gICovDQogIGlmIChsb2NhbGVjb252ICgpIC0+ ZGVjaW1hbF9wb2ludFswXSAhPSAnLCcpIHJldHVybiAxOw0KICByZXR1cm4gMDsNCn0NCg0KX0FD RU9GDQogICAgaWYgeyB7IGV2YWwgZWNobyAiXCJcJGFzX21lXCI6JHthc19saW5lbm8tJExJTkVO T306IFwiJGFjX2xpbmtcIiI7IH0gPiY1DQogIChldmFsICRhY19saW5rKSAyPiY1DQogIGFjX3N0 YXR1cz0kPw0KICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJD8gPSAk YWNfc3RhdHVzIiA+JjUNCiAgdGVzdCAkYWNfc3RhdHVzID0gMDsgfSAmJiB0ZXN0IC1zIGNvbmZ0 ZXN0JGFjX2V4ZWV4dDsgdGhlbg0KICAgICAgY2FzZSAiJGhvc3Rfb3MiIGluDQogICAgICAgICMg SGFuZGxlIG5hdGl2ZSBXaW5kb3dzIHNwZWNpYWxseSwgYmVjYXVzZSB0aGVyZSBzZXRsb2NhbGUo KSBpbnRlcnByZXRzDQogICAgICAgICMgImFyIiBhcyAiQXJhYmljIiBvciAiQXJhYmljX1NhdWRp IEFyYWJpYS4xMjU2IiwNCiAgICAgICAgIyAiZnIiIG9yICJmcmEiIGFzICJGcmVuY2giIG9yICJG cmVuY2hfRnJhbmNlLjEyNTIiLA0KICAgICAgICAjICJnZSIoISkgb3IgImRldSIoISkgYXMgIkdl cm1hbiIgb3IgIkdlcm1hbl9HZXJtYW55LjEyNTIiLA0KICAgICAgICAjICJqYSIgYXMgIkphcGFu ZXNlIiBvciAiSmFwYW5lc2VfSmFwYW4uOTMyIiwNCiAgICAgICAgIyBhbmQgc2ltaWxhci4NCiAg ICAgICAgbWluZ3cqKQ0KICAgICAgICAgICMgVGVzdCBmb3IgdGhlIG5hdGl2ZSBXaW4zMiBsb2Nh bGUgbmFtZS4NCiAgICAgICAgICBpZiAoTENfQUxMPUZyZW5jaF9GcmFuY2UuMTI1MiBMQ19USU1F PSBMQ19DVFlQRT0gLi9jb25mdGVzdDsgZXhpdCkgMj4vZGV2L251bGw7IHRoZW4NCiAgICAgICAg ICAgIGd0X2N2X2xvY2FsZV9mcj1GcmVuY2hfRnJhbmNlLjEyNTINCiAgICAgICAgICBlbHNlDQog ICAgICAgICAgICAjIE5vbmUgZm91bmQuDQogICAgICAgICAgICBndF9jdl9sb2NhbGVfZnI9bm9u ZQ0KICAgICAgICAgIGZpDQogICAgICAgICAgOzsNCiAgICAgICAgKikNCiAgICAgICAgICAjIFNl dHRpbmcgTENfQUxMIGlzIG5vdCBlbm91Z2guIE5lZWQgdG8gc2V0IExDX1RJTUUgdG8gZW1wdHks IGJlY2F1c2UNCiAgICAgICAgICAjIG90aGVyd2lzZSBvbiBNYWNPUyBYIDEwLjMuNSB0aGUgTENf VElNRT1DIGZyb20gdGhlIGJlZ2lubmluZyBvZiB0aGUNCiAgICAgICAgICAjIGNvbmZpZ3VyZSBz Y3JpcHQgd291bGQgb3ZlcnJpZGUgdGhlIExDX0FMTCBzZXR0aW5nLiBMaWtld2lzZSBmb3INCiAg ICAgICAgICAjIExDX0NUWVBFLCB3aGljaCBpcyBhbHNvIHNldCBhdCB0aGUgYmVnaW5uaW5nIG9m IHRoZSBjb25maWd1cmUgc2NyaXB0Lg0KICAgICAgICAgICMgVGVzdCBmb3IgdGhlIHVzdWFsIGxv Y2FsZSBuYW1lLg0KICAgICAgICAgIGlmIChMQ19BTEw9ZnJfRlIgTENfVElNRT0gTENfQ1RZUEU9 IC4vY29uZnRlc3Q7IGV4aXQpIDI+L2Rldi9udWxsOyB0aGVuDQogICAgICAgICAgICBndF9jdl9s b2NhbGVfZnI9ZnJfRlINCiAgICAgICAgICBlbHNlDQogICAgICAgICAgICAjIFRlc3QgZm9yIHRo ZSBsb2NhbGUgbmFtZSB3aXRoIGV4cGxpY2l0IGVuY29kaW5nIHN1ZmZpeC4NCiAgICAgICAgICAg IGlmIChMQ19BTEw9ZnJfRlIuSVNPLTg4NTktMSBMQ19USU1FPSBMQ19DVFlQRT0gLi9jb25mdGVz dDsgZXhpdCkgMj4vZGV2L251bGw7IHRoZW4NCiAgICAgICAgICAgICAgZ3RfY3ZfbG9jYWxlX2Zy PWZyX0ZSLklTTy04ODU5LTENCiAgICAgICAgICAgIGVsc2UNCiAgICAgICAgICAgICAgIyBUZXN0 IGZvciB0aGUgQUlYLCBPU0YvMSwgRnJlZUJTRCwgTmV0QlNELCBPcGVuQlNEIGxvY2FsZSBuYW1l Lg0KICAgICAgICAgICAgICBpZiAoTENfQUxMPWZyX0ZSLklTTzg4NTktMSBMQ19USU1FPSBMQ19D VFlQRT0gLi9jb25mdGVzdDsgZXhpdCkgMj4vZGV2L251bGw7IHRoZW4NCiAgICAgICAgICAgICAg ICBndF9jdl9sb2NhbGVfZnI9ZnJfRlIuSVNPODg1OS0xDQogICAgICAgICAgICAgIGVsc2UNCiAg ICAgICAgICAgICAgICAjIFRlc3QgZm9yIHRoZSBIUC1VWCBsb2NhbGUgbmFtZS4NCiAgICAgICAg ICAgICAgICBpZiAoTENfQUxMPWZyX0ZSLmlzbzg4NTkxIExDX1RJTUU9IExDX0NUWVBFPSAuL2Nv bmZ0ZXN0OyBleGl0KSAyPi9kZXYvbnVsbDsgdGhlbg0KICAgICAgICAgICAgICAgICAgZ3RfY3Zf bG9jYWxlX2ZyPWZyX0ZSLmlzbzg4NTkxDQogICAgICAgICAgICAgICAgZWxzZQ0KICAgICAgICAg ICAgICAgICAgIyBUZXN0IGZvciB0aGUgU29sYXJpcyA3IGxvY2FsZSBuYW1lLg0KICAgICAgICAg ICAgICAgICAgaWYgKExDX0FMTD1mciBMQ19USU1FPSBMQ19DVFlQRT0gLi9jb25mdGVzdDsgZXhp dCkgMj4vZGV2L251bGw7IHRoZW4NCiAgICAgICAgICAgICAgICAgICAgZ3RfY3ZfbG9jYWxlX2Zy PWZyDQogICAgICAgICAgICAgICAgICBlbHNlDQogICAgICAgICAgICAgICAgICAgICMgTm9uZSBm b3VuZC4NCiAgICAgICAgICAgICAgICAgICAgZ3RfY3ZfbG9jYWxlX2ZyPW5vbmUNCiAgICAgICAg ICAgICAgICAgIGZpDQogICAgICAgICAgICAgICAgZmkNCiAgICAgICAgICAgICAgZmkNCiAgICAg ICAgICAgIGZpDQogICAgICAgICAgZmkNCiAgICAgICAgICA7Ow0KICAgICAgZXNhYw0KICAgIGZp DQogICAgcm0gLWZyIGNvbmZ0ZXN0Kg0KDQpmaQ0KeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGlu ZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRndF9jdl9sb2NhbGVfZnIiID4mNQ0KJGFzX2VjaG8gIiRn dF9jdl9sb2NhbGVfZnIiID4mNjsgfQ0KICBMT0NBTEVfRlI9JGd0X2N2X2xvY2FsZV9mcg0KDQoN Cg0KDQoNCiAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2lu ZyBmb3IgYSB0dXJraXNoIFVuaWNvZGUgbG9jYWxlIiA+JjUNCiRhc19lY2hvX24gImNoZWNraW5n IGZvciBhIHR1cmtpc2ggVW5pY29kZSBsb2NhbGUuLi4gIiA+JjY7IH0NCmlmICR7Z3RfY3ZfbG9j YWxlX3RyX3V0ZjgrOn0gZmFsc2U7IHRoZW4gOg0KICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4m Ng0KZWxzZQ0KDQogICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4 dA0KLyogZW5kIGNvbmZkZWZzLmguICAqLw0KDQojaW5jbHVkZSA8bG9jYWxlLmg+DQojaW5jbHVk ZSA8dGltZS5oPg0KI2lmIEhBVkVfTEFOR0lORk9fQ09ERVNFVA0KIyBpbmNsdWRlIDxsYW5naW5m by5oPg0KI2VuZGlmDQojaW5jbHVkZSA8c3RkbGliLmg+DQojaW5jbHVkZSA8c3RyaW5nLmg+DQpz dHJ1Y3QgdG0gdDsNCmNoYXIgYnVmWzE2XTsNCmludCBtYWluICgpIHsNCiAgLyogT24gQmVPUywg bG9jYWxlcyBhcmUgbm90IGltcGxlbWVudGVkIGluIGxpYmMuICBSYXRoZXIsIGxpYmludGwNCiAg ICAgaW1pdGF0ZXMgbG9jYWxlIGRlcGVuZGVudCBiZWhhdmlvdXIgYnkgbG9va2luZyBhdCB0aGUg ZW52aXJvbm1lbnQNCiAgICAgdmFyaWFibGVzLCBhbmQgYWxsIGxvY2FsZXMgdXNlIHRoZSBVVEYt OCBlbmNvZGluZy4gIEJ1dCBCZU9TIGRvZXMgbm90DQogICAgIGltcGxlbWVudCB0aGUgVHVya2lz aCB1cHBlci0vbG93ZXJjYXNlIG1hcHBpbmdzLiAgVGhlcmVmb3JlLCBsZXQgdGhpcw0KICAgICBw cm9ncmFtIHJldHVybiAxIG9uIEJlT1MuICAqLw0KICAvKiBDaGVjayB3aGV0aGVyIHRoZSBnaXZl biBsb2NhbGUgbmFtZSBpcyByZWNvZ25pemVkIGJ5IHRoZSBzeXN0ZW0uICAqLw0KI2lmIChkZWZp bmVkIF9XSU4zMiB8fCBkZWZpbmVkIF9fV0lOMzJfXykgJiYgIWRlZmluZWQgX19DWUdXSU5fXw0K ICAvKiBPbiBuYXRpdmUgV2luMzIsIHNldGxvY2FsZShjYXRlZ29yeSwgIiIpIGxvb2tzIGF0IHRo ZSBzeXN0ZW0gc2V0dGluZ3MsDQogICAgIG5vdCBhdCB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGVz LiAgQWxzbywgd2hlbiBhbiBlbmNvZGluZyBzdWZmaXggc3VjaA0KICAgICBhcyAiLjY1MDAxIiBv ciAiLjU0OTM2IiBpcyBzcGVmaWNpZWQsIGl0IHN1Y2NlZWRzIGJ1dCBzZXRzIHRoZSBMQ19DVFlQ RQ0KICAgICBjYXRlZ29yeSBvZiB0aGUgbG9jYWxlIHRvICJDIi4gICovDQogIGlmIChzZXRsb2Nh bGUgKExDX0FMTCwgZ2V0ZW52ICgiTENfQUxMIikpID09IE5VTEwNCiAgICAgIHx8IHN0cmNtcCAo c2V0bG9jYWxlIChMQ19DVFlQRSwgTlVMTCksICJDIikgPT0gMCkNCiAgICByZXR1cm4gMTsNCiNl bHNlDQogIGlmIChzZXRsb2NhbGUgKExDX0FMTCwgIiIpID09IE5VTEwpIHJldHVybiAxOw0KI2Vu ZGlmDQogIC8qIENoZWNrIHdoZXRoZXIgbmxfbGFuZ2luZm8oQ09ERVNFVCkgaXMgbm9uZW1wdHkg YW5kIG5vdCAiQVNDSUkiIG9yICI2NDYiLg0KICAgICBPbiBNYWNPUyBYIDEwLjMuNSAoRGFyd2lu IDcuNSkgaW4gdGhlIHRyX1RSIGxvY2FsZSwgbmxfbGFuZ2luZm8oQ09ERVNFVCkNCiAgICAgaXMg ZW1wdHksIGFuZCB0aGUgYmVoYXZpb3VyIG9mIFRjbCA4LjQgaW4gdGhpcyBsb2NhbGUgaXMgbm90 IHVzZWZ1bC4NCiAgICAgT24gT3BlbkJTRCA0LjAsIHdoZW4gYW4gdW5zdXBwb3J0ZWQgbG9jYWxl IGlzIHNwZWNpZmllZCwgc2V0bG9jYWxlKCkNCiAgICAgc3VjY2VlZHMgYnV0IHRoZW4gbmxfbGFu Z2luZm8oQ09ERVNFVCkgaXMgIjY0NiIuIEluIHRoaXMgc2l0dWF0aW9uLA0KICAgICBzb21lIHVu aXQgdGVzdHMgZmFpbC4gICovDQojaWYgSEFWRV9MQU5HSU5GT19DT0RFU0VUDQogIHsNCiAgICBj b25zdCBjaGFyICpjcyA9IG5sX2xhbmdpbmZvIChDT0RFU0VUKTsNCiAgICBpZiAoY3NbMF0gPT0g J1wwJyB8fCBzdHJjbXAgKGNzLCAiQVNDSUkiKSA9PSAwIHx8IHN0cmNtcCAoY3MsICI2NDYiKSA9 PSAwKQ0KICAgICAgcmV0dXJuIDE7DQogIH0NCiNlbmRpZg0KI2lmZGVmIF9fQ1lHV0lOX18NCiAg LyogT24gQ3lnd2luLCBhdm9pZCBsb2NhbGUgbmFtZXMgd2l0aG91dCBlbmNvZGluZyBzdWZmaXgs IGJlY2F1c2UgdGhlDQogICAgIGxvY2FsZV9jaGFyc2V0KCkgZnVuY3Rpb24gcmVsaWVzIG9uIHRo ZSBlbmNvZGluZyBzdWZmaXguICBOb3RlIHRoYXQNCiAgICAgTENfQUxMIGlzIHNldCBvbiB0aGUg Y29tbWFuZCBsaW5lLiAgKi8NCiAgaWYgKHN0cmNociAoZ2V0ZW52ICgiTENfQUxMIiksICcuJykg PT0gTlVMTCkgcmV0dXJuIDE7DQojZW5kaWYNCiAgLyogQ2hlY2sgd2hldGhlciBpbiB0aGUgYWJi cmV2aWF0aW9uIG9mIHRoZSBlaWdodGggbW9udGgsIHRoZSBzZWNvbmQNCiAgICAgY2hhcmFjdGVy IChzaG91bGQgYmUgVSswMTFGOiBMQVRJTiBTTUFMTCBMRVRURVIgRyBXSVRIIEJSRVZFKSBpcw0K ICAgICB0d28gYnl0ZXMgbG9uZywgd2l0aCBVVEYtOCBlbmNvZGluZy4gICovDQogIHQudG1feWVh ciA9IDE5OTIgLSAxOTAwOyB0LnRtX21vbiA9IDggLSAxOyB0LnRtX21kYXkgPSAxOTsNCiAgaWYg KHN0cmZ0aW1lIChidWYsIHNpemVvZiAoYnVmKSwgIiViIiwgJnQpIDwgNA0KICAgICAgfHwgYnVm WzFdICE9IChjaGFyKSAweGM0IHx8IGJ1ZlsyXSAhPSAoY2hhcikgMHg5ZikNCiAgICByZXR1cm4g MTsNCiAgLyogQ2hlY2sgd2hldGhlciB0aGUgdXBwZXItL2xvd2VyY2FzZSBtYXBwaW5ncyBhcmUg YXMgZXhwZWN0ZWQgZm9yDQogICAgIFR1cmtpc2guICAqLw0KICBpZiAodG93dXBwZXIgKCdpJykg IT0gMHgwMTMwIHx8IHRvd2xvd2VyICgweDAxMzApICE9ICdpJw0KICAgICAgfHwgdG93dXBwZXIo MHgwMTMxKSAhPSAnSScgfHwgdG93bG93ZXIgKCdJJykgIT0gMHgwMTMxKQ0KICAgIHJldHVybiAx Ow0KICByZXR1cm4gMDsNCn0NCg0KX0FDRU9GDQogICAgaWYgeyB7IGV2YWwgZWNobyAiXCJcJGFz X21lXCI6JHthc19saW5lbm8tJExJTkVOT306IFwiJGFjX2xpbmtcIiI7IH0gPiY1DQogIChldmFs ICRhY19saW5rKSAyPiY1DQogIGFjX3N0YXR1cz0kPw0KICAkYXNfZWNobyAiJGFzX21lOiR7YXNf bGluZW5vLSRMSU5FTk99OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUNCiAgdGVzdCAkYWNfc3RhdHVz ID0gMDsgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dDsgdGhlbg0KICAgICAgY2FzZSAi JGhvc3Rfb3MiIGluDQogICAgICAgICMgSGFuZGxlIG5hdGl2ZSBXaW5kb3dzIHNwZWNpYWxseSwg YmVjYXVzZSB0aGVyZSBzZXRsb2NhbGUoKSBpbnRlcnByZXRzDQogICAgICAgICMgImFyIiBhcyAi QXJhYmljIiBvciAiQXJhYmljX1NhdWRpIEFyYWJpYS4xMjU2IiwNCiAgICAgICAgIyAiZnIiIG9y ICJmcmEiIGFzICJGcmVuY2giIG9yICJGcmVuY2hfRnJhbmNlLjEyNTIiLA0KICAgICAgICAjICJn ZSIoISkgb3IgImRldSIoISkgYXMgIkdlcm1hbiIgb3IgIkdlcm1hbl9HZXJtYW55LjEyNTIiLA0K ICAgICAgICAjICJqYSIgYXMgIkphcGFuZXNlIiBvciAiSmFwYW5lc2VfSmFwYW4uOTMyIiwNCiAg ICAgICAgIyBhbmQgc2ltaWxhci4NCiAgICAgICAgbWluZ3cqKQ0KICAgICAgICAgICMgVGVzdCBm b3IgdGhlIGh5cG90aGV0aWNhbCBuYXRpdmUgV2luMzIgbG9jYWxlIG5hbWUuDQogICAgICAgICAg aWYgKExDX0FMTD1UdXJraXNoX1R1cmtleS42NTAwMSBMQ19USU1FPSBMQ19DVFlQRT0gLi9jb25m dGVzdDsgZXhpdCkgMj4vZGV2L251bGw7IHRoZW4NCiAgICAgICAgICAgIGd0X2N2X2xvY2FsZV90 cl91dGY4PVR1cmtpc2hfVHVya2V5LjY1MDAxDQogICAgICAgICAgZWxzZQ0KICAgICAgICAgICAg IyBOb25lIGZvdW5kLg0KICAgICAgICAgICAgZ3RfY3ZfbG9jYWxlX3RyX3V0Zjg9bm9uZQ0KICAg ICAgICAgIGZpDQogICAgICAgICAgOzsNCiAgICAgICAgKikNCiAgICAgICAgICAjIFNldHRpbmcg TENfQUxMIGlzIG5vdCBlbm91Z2guIE5lZWQgdG8gc2V0IExDX1RJTUUgdG8gZW1wdHksIGJlY2F1 c2UNCiAgICAgICAgICAjIG90aGVyd2lzZSBvbiBNYWNPUyBYIDEwLjMuNSB0aGUgTENfVElNRT1D IGZyb20gdGhlIGJlZ2lubmluZyBvZiB0aGUNCiAgICAgICAgICAjIGNvbmZpZ3VyZSBzY3JpcHQg d291bGQgb3ZlcnJpZGUgdGhlIExDX0FMTCBzZXR0aW5nLiBMaWtld2lzZSBmb3INCiAgICAgICAg ICAjIExDX0NUWVBFLCB3aGljaCBpcyBhbHNvIHNldCBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBj b25maWd1cmUgc2NyaXB0Lg0KICAgICAgICAgICMgVGVzdCBmb3IgdGhlIHVzdWFsIGxvY2FsZSBu YW1lLg0KICAgICAgICAgIGlmIChMQ19BTEw9dHJfVFIgTENfVElNRT0gTENfQ1RZUEU9IC4vY29u ZnRlc3Q7IGV4aXQpIDI+L2Rldi9udWxsOyB0aGVuDQogICAgICAgICAgICBndF9jdl9sb2NhbGVf dHJfdXRmOD10cl9UUg0KICAgICAgICAgIGVsc2UNCiAgICAgICAgICAgICMgVGVzdCBmb3IgdGhl IGxvY2FsZSBuYW1lIHdpdGggZXhwbGljaXQgZW5jb2Rpbmcgc3VmZml4Lg0KICAgICAgICAgICAg aWYgKExDX0FMTD10cl9UUi5VVEYtOCBMQ19USU1FPSBMQ19DVFlQRT0gLi9jb25mdGVzdDsgZXhp dCkgMj4vZGV2L251bGw7IHRoZW4NCiAgICAgICAgICAgICAgZ3RfY3ZfbG9jYWxlX3RyX3V0Zjg9 dHJfVFIuVVRGLTgNCiAgICAgICAgICAgIGVsc2UNCiAgICAgICAgICAgICAgIyBUZXN0IGZvciB0 aGUgU29sYXJpcyA3IGxvY2FsZSBuYW1lLg0KICAgICAgICAgICAgICBpZiAoTENfQUxMPXRyLlVU Ri04IExDX1RJTUU9IExDX0NUWVBFPSAuL2NvbmZ0ZXN0OyBleGl0KSAyPi9kZXYvbnVsbDsgdGhl bg0KICAgICAgICAgICAgICAgIGd0X2N2X2xvY2FsZV90cl91dGY4PXRyLlVURi04DQogICAgICAg ICAgICAgIGVsc2UNCiAgICAgICAgICAgICAgICAjIE5vbmUgZm91bmQuDQogICAgICAgICAgICAg ICAgZ3RfY3ZfbG9jYWxlX3RyX3V0Zjg9bm9uZQ0KICAgICAgICAgICAgICBmaQ0KICAgICAgICAg ICAgZmkNCiAgICAgICAgICBmaQ0KICAgICAgICAgIDs7DQogICAgICBlc2FjDQogICAgZWxzZQ0K ICAgICAgZ3RfY3ZfbG9jYWxlX3RyX3V0Zjg9bm9uZQ0KICAgIGZpDQogICAgcm0gLWZyIGNvbmZ0 ZXN0Kg0KDQpmaQ0KeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1 bHQ6ICRndF9jdl9sb2NhbGVfdHJfdXRmOCIgPiY1DQokYXNfZWNobyAiJGd0X2N2X2xvY2FsZV90 cl91dGY4IiA+JjY7IH0NCiAgTE9DQUxFX1RSX1VURjg9JGd0X2N2X2xvY2FsZV90cl91dGY4DQoN Cg0KDQoNCiAgaWYgdGVzdCAiJGFjX2N2X2hlYWRlcl93aW5zb2NrMl9oIiA9IHllczsgdGhlbg0K DQoNCg0KDQoNCg0KDQoNCiAgZ2x0ZXN0c19MSUJPQkpTPSIkZ2x0ZXN0c19MSUJPQkpTIGNvbm5l Y3QuJGFjX29iamV4dCINCg0KICBmaQ0KDQoNCg0KICBHTlVMSUJfQ09OTkVDVD0kZ2xfbW9kdWxl X2luZGljYXRvcl9jb25kaXRpb24NCg0KDQoNCiRhc19lY2hvICIjZGVmaW5lIEdOVUxJQl9URVNU X0NPTk5FQ1QgMSIgPj5jb25mZGVmcy5oDQoNCg0KDQoNCg0KDQoNCiAgICBpZiB0ZXN0ICRSRVBM QUNFX0ZURUxMTyAhPSAwOyB0aGVuDQoNCg0KDQoNCg0KDQoNCg0KICBnbHRlc3RzX0xJQk9CSlM9 IiRnbHRlc3RzX0xJQk9CSlMgZnRlbGwuJGFjX29iamV4dCINCg0KICAgIFJFUExBQ0VfRlRFTEw9 MQ0KICBmaQ0KDQoNCg0KDQogIEdOVUxJQl9GVEVMTD0kZ2xfbW9kdWxlX2luZGljYXRvcl9jb25k aXRpb24NCg0KDQoNCiRhc19lY2hvICIjZGVmaW5lIEdOVUxJQl9URVNUX0ZURUxMIDEiID4+Y29u ZmRlZnMuaA0KDQoNCg0KDQoNCiAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElO RU5PfTogY2hlY2tpbmcgd2hldGhlciBieXRlIG9yZGVyaW5nIGlzIGJpZ2VuZGlhbiIgPiY1DQok YXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIGJ5dGUgb3JkZXJpbmcgaXMgYmlnZW5kaWFuLi4u ICIgPiY2OyB9DQppZiAke2FjX2N2X2NfYmlnZW5kaWFuKzp9IGZhbHNlOyB0aGVuIDoNCiAgJGFz X2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYNCmVsc2UNCiAgYWNfY3ZfY19iaWdlbmRpYW49dW5rbm93 bg0KICAgICMgU2VlIGlmIHdlJ3JlIGRlYWxpbmcgd2l0aCBhIHVuaXZlcnNhbCBjb21waWxlci4N CiAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0DQovKiBlbmQg Y29uZmRlZnMuaC4gICovDQojaWZuZGVmIF9fQVBQTEVfQ0NfXw0KCSAgICAgICBub3QgYSB1bml2 ZXJzYWwgY2FwYWJsZSBjb21waWxlcg0KCSAgICAgI2VuZGlmDQoJICAgICB0eXBlZGVmIGludCBk dW1teTsNCg0KX0FDRU9GDQppZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6 DQoNCgkjIENoZWNrIGZvciBwb3RlbnRpYWwgLWFyY2ggZmxhZ3MuICBJdCBpcyBub3QgdW5pdmVy c2FsIHVubGVzcw0KCSMgdGhlcmUgYXJlIGF0IGxlYXN0IHR3byAtYXJjaCBmbGFncyB3aXRoIGRp ZmZlcmVudCB2YWx1ZXMuDQoJYWNfYXJjaD0NCglhY19wcmV2PQ0KCWZvciBhY193b3JkIGluICRD QyAkQ0ZMQUdTICRDUFBGTEFHUyAkTERGTEFHUzsgZG8NCgkgaWYgdGVzdCAtbiAiJGFjX3ByZXYi OyB0aGVuDQoJICAgY2FzZSAkYWNfd29yZCBpbg0KCSAgICAgaT84NiB8IHg4Nl82NCB8IHBwYyB8 IHBwYzY0KQ0KCSAgICAgICBpZiB0ZXN0IC16ICIkYWNfYXJjaCIgfHwgdGVzdCAiJGFjX2FyY2gi ID0gIiRhY193b3JkIjsgdGhlbg0KCQkgYWNfYXJjaD0kYWNfd29yZA0KCSAgICAgICBlbHNlDQoJ CSBhY19jdl9jX2JpZ2VuZGlhbj11bml2ZXJzYWwNCgkJIGJyZWFrDQoJICAgICAgIGZpDQoJICAg ICAgIDs7DQoJICAgZXNhYw0KCSAgIGFjX3ByZXY9DQoJIGVsaWYgdGVzdCAieCRhY193b3JkIiA9 ICJ4LWFyY2giOyB0aGVuDQoJICAgYWNfcHJldj1hcmNoDQoJIGZpDQogICAgICAgZG9uZQ0KZmkN CnJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFj X2V4dA0KICAgIGlmIHRlc3QgJGFjX2N2X2NfYmlnZW5kaWFuID0gdW5rbm93bjsgdGhlbg0KICAg ICAgIyBTZWUgaWYgc3lzL3BhcmFtLmggZGVmaW5lcyB0aGUgQllURV9PUkRFUiBtYWNyby4NCiAg ICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQNCi8qIGVuZCBj b25mZGVmcy5oLiAgKi8NCiNpbmNsdWRlIDxzeXMvdHlwZXMuaD4NCgkgICAgICNpbmNsdWRlIDxz eXMvcGFyYW0uaD4NCg0KaW50DQptYWluICgpDQp7DQojaWYgISAoZGVmaW5lZCBCWVRFX09SREVS ICYmIGRlZmluZWQgQklHX0VORElBTiBcDQoJCSAgICAgJiYgZGVmaW5lZCBMSVRUTEVfRU5ESUFO ICYmIEJZVEVfT1JERVIgJiYgQklHX0VORElBTiBcDQoJCSAgICAgJiYgTElUVExFX0VORElBTikN CgkgICAgICBib2d1cyBlbmRpYW4gbWFjcm9zDQoJICAgICAjZW5kaWYNCg0KICA7DQogIHJldHVy biAwOw0KfQ0KX0FDRU9GDQppZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6 DQogICMgSXQgZG9lczsgbm93IHNlZSB3aGV0aGVyIGl0IGRlZmluZWQgdG8gQklHX0VORElBTiBv ciBub3QuDQoJIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQNCi8q IGVuZCBjb25mZGVmcy5oLiAgKi8NCiNpbmNsdWRlIDxzeXMvdHlwZXMuaD4NCgkJI2luY2x1ZGUg PHN5cy9wYXJhbS5oPg0KDQppbnQNCm1haW4gKCkNCnsNCiNpZiBCWVRFX09SREVSICE9IEJJR19F TkRJQU4NCgkJIG5vdCBiaWcgZW5kaWFuDQoJCSNlbmRpZg0KDQogIDsNCiAgcmV0dXJuIDA7DQp9 DQpfQUNFT0YNCmlmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoNCiAgYWNf Y3ZfY19iaWdlbmRpYW49eWVzDQplbHNlDQogIGFjX2N2X2NfYmlnZW5kaWFuPW5vDQpmaQ0Kcm0g LWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0 DQpmaQ0Kcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVz dC4kYWNfZXh0DQogICAgZmkNCiAgICBpZiB0ZXN0ICRhY19jdl9jX2JpZ2VuZGlhbiA9IHVua25v d247IHRoZW4NCiAgICAgICMgU2VlIGlmIDxsaW1pdHMuaD4gZGVmaW5lcyBfTElUVExFX0VORElB TiBvciBfQklHX0VORElBTiAoZS5nLiwgU29sYXJpcykuDQogICAgICBjYXQgY29uZmRlZnMuaCAt IDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0DQovKiBlbmQgY29uZmRlZnMuaC4gICovDQojaW5j bHVkZSA8bGltaXRzLmg+DQoNCmludA0KbWFpbiAoKQ0Kew0KI2lmICEgKGRlZmluZWQgX0xJVFRM RV9FTkRJQU4gfHwgZGVmaW5lZCBfQklHX0VORElBTikNCgkgICAgICBib2d1cyBlbmRpYW4gbWFj cm9zDQoJICAgICAjZW5kaWYNCg0KICA7DQogIHJldHVybiAwOw0KfQ0KX0FDRU9GDQppZiBhY19m bl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6DQogICMgSXQgZG9lczsgbm93IHNlZSB3 aGV0aGVyIGl0IGRlZmluZWQgdG8gX0JJR19FTkRJQU4gb3Igbm90Lg0KCSBjYXQgY29uZmRlZnMu aCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0DQovKiBlbmQgY29uZmRlZnMuaC4gICovDQoj aW5jbHVkZSA8bGltaXRzLmg+DQoNCmludA0KbWFpbiAoKQ0Kew0KI2lmbmRlZiBfQklHX0VORElB Tg0KCQkgbm90IGJpZyBlbmRpYW4NCgkJI2VuZGlmDQoNCiAgOw0KICByZXR1cm4gMDsNCn0NCl9B Q0VPRg0KaWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOg0KICBhY19jdl9j X2JpZ2VuZGlhbj15ZXMNCmVsc2UNCiAgYWNfY3ZfY19iaWdlbmRpYW49bm8NCmZpDQpybSAtZiBj b3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQNCmZp DQpybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRh Y19leHQNCiAgICBmaQ0KICAgIGlmIHRlc3QgJGFjX2N2X2NfYmlnZW5kaWFuID0gdW5rbm93bjsg dGhlbg0KICAgICAgIyBDb21waWxlIGEgdGVzdCBwcm9ncmFtLg0KICAgICAgaWYgdGVzdCAiJGNy b3NzX2NvbXBpbGluZyIgPSB5ZXM7IHRoZW4gOg0KICAjIFRyeSB0byBndWVzcyBieSBncmVwcGlu ZyB2YWx1ZXMgZnJvbSBhbiBvYmplY3QgZmlsZS4NCgkgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VP RiA+Y29uZnRlc3QuJGFjX2V4dA0KLyogZW5kIGNvbmZkZWZzLmguICAqLw0Kc2hvcnQgaW50IGFz Y2lpX21tW10gPQ0KCQkgIHsgMHg0MjQ5LCAweDQ3NjUsIDB4NkU0NCwgMHg2OTYxLCAweDZFNTMs IDB4Nzk1MywgMCB9Ow0KCQlzaG9ydCBpbnQgYXNjaWlfaWlbXSA9DQoJCSAgeyAweDY5NEMsIDB4 NTQ1NCwgMHg2NTZDLCAweDZFNDUsIDB4Njk0NCwgMHg2RTYxLCAwIH07DQoJCWludCB1c2VfYXNj aWkgKGludCBpKSB7DQoJCSAgcmV0dXJuIGFzY2lpX21tW2ldICsgYXNjaWlfaWlbaV07DQoJCX0N CgkJc2hvcnQgaW50IGViY2RpY19paVtdID0NCgkJICB7IDB4ODlEMywgMHhFM0UzLCAweDg1OTMs IDB4OTVDNSwgMHg4OUM0LCAweDk1ODEsIDAgfTsNCgkJc2hvcnQgaW50IGViY2RpY19tbVtdID0N CgkJICB7IDB4QzJDOSwgMHhDNzg1LCAweDk1QzQsIDB4ODk4MSwgMHg5NUUyLCAweEE4RTIsIDAg fTsNCgkJaW50IHVzZV9lYmNkaWMgKGludCBpKSB7DQoJCSAgcmV0dXJuIGViY2RpY19tbVtpXSAr IGViY2RpY19paVtpXTsNCgkJfQ0KCQlleHRlcm4gaW50IGZvbzsNCg0KaW50DQptYWluICgpDQp7 DQpyZXR1cm4gdXNlX2FzY2lpIChmb28pID09IHVzZV9lYmNkaWMgKGZvbyk7DQogIDsNCiAgcmV0 dXJuIDA7DQp9DQpfQUNFT0YNCmlmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVu IDoNCiAgaWYgZ3JlcCBCSUdlbkRpYW5TeVMgY29uZnRlc3QuJGFjX29iamV4dCA+L2Rldi9udWxs OyB0aGVuDQoJICAgICAgYWNfY3ZfY19iaWdlbmRpYW49eWVzDQoJICAgIGZpDQoJICAgIGlmIGdy ZXAgTGlUVGxlRW5EaWFuIGNvbmZ0ZXN0LiRhY19vYmpleHQgPi9kZXYvbnVsbCA7IHRoZW4NCgkg ICAgICBpZiB0ZXN0ICIkYWNfY3ZfY19iaWdlbmRpYW4iID0gdW5rbm93bjsgdGhlbg0KCQlhY19j dl9jX2JpZ2VuZGlhbj1ubw0KCSAgICAgIGVsc2UNCgkJIyBmaW5kaW5nIGJvdGggc3RyaW5ncyBp cyB1bmxpa2VseSB0byBoYXBwZW4sIGJ1dCB3aG8ga25vd3M/DQoJCWFjX2N2X2NfYmlnZW5kaWFu PXVua25vd24NCgkgICAgICBmaQ0KCSAgICBmaQ0KZmkNCnJtIC1mIGNvcmUgY29uZnRlc3QuZXJy IGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dA0KZWxzZQ0KICBjYXQgY29uZmRl ZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0DQovKiBlbmQgY29uZmRlZnMuaC4gICov DQokYWNfaW5jbHVkZXNfZGVmYXVsdA0KaW50DQptYWluICgpDQp7DQoNCgkgICAgIC8qIEFyZSB3 ZSBsaXR0bGUgb3IgYmlnIGVuZGlhbj8gIEZyb20gSGFyYmlzb24mU3RlZWxlLiAgKi8NCgkgICAg IHVuaW9uDQoJICAgICB7DQoJICAgICAgIGxvbmcgaW50IGw7DQoJICAgICAgIGNoYXIgY1tzaXpl b2YgKGxvbmcgaW50KV07DQoJICAgICB9IHU7DQoJICAgICB1LmwgPSAxOw0KCSAgICAgcmV0dXJu IHUuY1tzaXplb2YgKGxvbmcgaW50KSAtIDFdID09IDE7DQoNCiAgOw0KICByZXR1cm4gMDsNCn0N Cl9BQ0VPRg0KaWYgYWNfZm5fY190cnlfcnVuICIkTElORU5PIjsgdGhlbiA6DQogIGFjX2N2X2Nf YmlnZW5kaWFuPW5vDQplbHNlDQogIGFjX2N2X2NfYmlnZW5kaWFuPXllcw0KZmkNCnJtIC1mIGNv cmUgKi5jb3JlIGNvcmUuY29uZnRlc3QuKiBnbW9uLm91dCBiYi5vdXQgY29uZnRlc3QkYWNfZXhl ZXh0IFwNCiAgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC5iZWFtIGNvbmZ0ZXN0LiRhY19l eHQNCmZpDQoNCiAgICBmaQ0KZmkNCnsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElO RU5PfTogcmVzdWx0OiAkYWNfY3ZfY19iaWdlbmRpYW4iID4mNQ0KJGFzX2VjaG8gIiRhY19jdl9j X2JpZ2VuZGlhbiIgPiY2OyB9DQogY2FzZSAkYWNfY3ZfY19iaWdlbmRpYW4gaW4gIygNCiAgIHll cykNCiAgICAgJGFzX2VjaG8gIiNkZWZpbmUgV09SRFNfQklHRU5ESUFOIDEiID4+Y29uZmRlZnMu aA0KOzsgIygNCiAgIG5vKQ0KICAgICAgOzsgIygNCiAgIHVuaXZlcnNhbCkNCg0KJGFzX2VjaG8g IiNkZWZpbmUgQUNfQVBQTEVfVU5JVkVSU0FMX0JVSUxEIDEiID4+Y29uZmRlZnMuaA0KDQogICAg IDs7ICMoDQogICAqKQ0KICAgICBhc19mbl9lcnJvciAkPyAidW5rbm93biBlbmRpYW5uZXNzDQog cHJlc2V0dGluZyBhY19jdl9jX2JpZ2VuZGlhbj1ubyAob3IgeWVzKSB3aWxsIGhlbHAiICIkTElO RU5PIiA1IDs7DQogZXNhYw0KDQoNCg0KDQoNCiAgICA6DQoNCg0KICAgICAgZ2xfc2F2ZV9MSUJT PSRMSUJTDQogIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tp bmcgZm9yIGxpYnJhcnkgY29udGFpbmluZyBpbmV0X3B0b24iID4mNQ0KJGFzX2VjaG9fbiAiY2hl Y2tpbmcgZm9yIGxpYnJhcnkgY29udGFpbmluZyBpbmV0X3B0b24uLi4gIiA+JjY7IH0NCmlmICR7 YWNfY3Zfc2VhcmNoX2luZXRfcHRvbis6fSBmYWxzZTsgdGhlbiA6DQogICRhc19lY2hvX24gIihj YWNoZWQpICIgPiY2DQplbHNlDQogIGFjX2Z1bmNfc2VhcmNoX3NhdmVfTElCUz0kTElCUw0KY2F0 IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dA0KLyogZW5kIGNvbmZkZWZz LmguICAqLw0KDQovKiBPdmVycmlkZSBhbnkgR0NDIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9p ZCBhbiBlcnJvci4NCiAgIFVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1 cm4gdHlwZSBvZiBhIEdDQw0KICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90 eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8NCiNpZmRlZiBfX2NwbHVzcGx1cw0KZXh0ZXJuICJD Ig0KI2VuZGlmDQpjaGFyIGluZXRfcHRvbiAoKTsNCmludA0KbWFpbiAoKQ0Kew0KcmV0dXJuIGlu ZXRfcHRvbiAoKTsNCiAgOw0KICByZXR1cm4gMDsNCn0NCl9BQ0VPRg0KZm9yIGFjX2xpYiBpbiAn JyBuc2w7IGRvDQogIGlmIHRlc3QgLXogIiRhY19saWIiOyB0aGVuDQogICAgYWNfcmVzPSJub25l IHJlcXVpcmVkIg0KICBlbHNlDQogICAgYWNfcmVzPS1sJGFjX2xpYg0KICAgIExJQlM9Ii1sJGFj X2xpYiAgJGFjX2Z1bmNfc2VhcmNoX3NhdmVfTElCUyINCiAgZmkNCiAgaWYgYWNfZm5fY190cnlf bGluayAiJExJTkVOTyI7IHRoZW4gOg0KICBhY19jdl9zZWFyY2hfaW5ldF9wdG9uPSRhY19yZXMN CmZpDQpybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwNCiAgICBj b25mdGVzdCRhY19leGVleHQNCiAgaWYgJHthY19jdl9zZWFyY2hfaW5ldF9wdG9uKzp9IGZhbHNl OyB0aGVuIDoNCiAgYnJlYWsNCmZpDQpkb25lDQppZiAke2FjX2N2X3NlYXJjaF9pbmV0X3B0b24r On0gZmFsc2U7IHRoZW4gOg0KDQplbHNlDQogIGFjX2N2X3NlYXJjaF9pbmV0X3B0b249bm8NCmZp DQpybSBjb25mdGVzdC4kYWNfZXh0DQpMSUJTPSRhY19mdW5jX3NlYXJjaF9zYXZlX0xJQlMNCmZp DQp7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2 X3NlYXJjaF9pbmV0X3B0b24iID4mNQ0KJGFzX2VjaG8gIiRhY19jdl9zZWFyY2hfaW5ldF9wdG9u IiA+JjY7IH0NCmFjX3Jlcz0kYWNfY3Zfc2VhcmNoX2luZXRfcHRvbg0KaWYgdGVzdCAiJGFjX3Jl cyIgIT0gbm87IHRoZW4gOg0KICB0ZXN0ICIkYWNfcmVzIiA9ICJub25lIHJlcXVpcmVkIiB8fCBM SUJTPSIkYWNfcmVzICRMSUJTIg0KDQplbHNlDQoNCg0KDQoNCg0KDQoNCg0KICBmb3IgYWNfZnVu YyBpbiBpbmV0X3B0b24NCmRvIDoNCiAgYWNfZm5fY19jaGVja19mdW5jICIkTElORU5PIiAiaW5l dF9wdG9uIiAiYWNfY3ZfZnVuY19pbmV0X3B0b24iDQppZiB0ZXN0ICJ4JGFjX2N2X2Z1bmNfaW5l dF9wdG9uIiA9IHh5ZXM7IHRoZW4gOg0KICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GDQojZGVm aW5lIEhBVkVfSU5FVF9QVE9OIDENCl9BQ0VPRg0KDQplbHNlDQoNCiAgICBnbHRlc3RzX0xJQk9C SlM9IiRnbHRlc3RzX0xJQk9CSlMgJGFjX2Z1bmMuJGFjX29iamV4dCINCg0KZmkNCmRvbmUNCg0K DQpmaQ0KDQogIExJQlM9JGdsX3NhdmVfTElCUw0KICBJTkVUX1BUT05fTElCPQ0KICBpZiB0ZXN0 ICIkYWNfY3Zfc2VhcmNoX2luZXRfcHRvbiIgIT0gIm5vIiAmJg0KICAgICB0ZXN0ICIkYWNfY3Zf c2VhcmNoX2luZXRfcHRvbiIgIT0gIm5vbmUgcmVxdWlyZWQiOyB0aGVuDQogICAgSU5FVF9QVE9O X0xJQj0iJGFjX2N2X3NlYXJjaF9pbmV0X3B0b24iDQogIGZpDQoNCg0KDQoNCiAgYWNfZm5fY19j aGVja19kZWNsICIkTElORU5PIiAiaW5ldF9wdG9uIiAiYWNfY3ZfaGF2ZV9kZWNsX2luZXRfcHRv biIgIiNpbmNsdWRlIDxhcnBhL2luZXQuaD4NCiAgICAgI2lmIEhBVkVfTkVUREJfSA0KICAgICAj IGluY2x1ZGUgPG5ldGRiLmg+DQogICAgICNlbmRpZg0KDQoiDQppZiB0ZXN0ICJ4JGFjX2N2X2hh dmVfZGVjbF9pbmV0X3B0b24iID0geHllczsgdGhlbiA6DQogIGFjX2hhdmVfZGVjbD0xDQplbHNl DQogIGFjX2hhdmVfZGVjbD0wDQpmaQ0KDQpjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GDQojZGVm aW5lIEhBVkVfREVDTF9JTkVUX1BUT04gJGFjX2hhdmVfZGVjbA0KX0FDRU9GDQoNCiAgaWYgdGVz dCAkYWNfY3ZfaGF2ZV9kZWNsX2luZXRfcHRvbiA9IG5vOyB0aGVuDQogICAgSEFWRV9ERUNMX0lO RVRfUFRPTj0wDQogIGZpDQoNCg0KDQoNCg0KDQoNCiAgR05VTElCX0lORVRfUFRPTj0kZ2xfbW9k dWxlX2luZGljYXRvcl9jb25kaXRpb24NCg0KDQogICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19s aW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgYnl0ZSBvcmRlcmluZyBpcyBiaWdlbmRp YW4iID4mNQ0KJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciBieXRlIG9yZGVyaW5nIGlzIGJp Z2VuZGlhbi4uLiAiID4mNjsgfQ0KaWYgJHthY19jdl9jX2JpZ2VuZGlhbis6fSBmYWxzZTsgdGhl biA6DQogICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2DQplbHNlDQogIGFjX2N2X2NfYmlnZW5k aWFuPXVua25vd24NCiAgICAjIFNlZSBpZiB3ZSdyZSBkZWFsaW5nIHdpdGggYSB1bml2ZXJzYWwg Y29tcGlsZXIuDQogICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4 dA0KLyogZW5kIGNvbmZkZWZzLmguICAqLw0KI2lmbmRlZiBfX0FQUExFX0NDX18NCgkgICAgICAg bm90IGEgdW5pdmVyc2FsIGNhcGFibGUgY29tcGlsZXINCgkgICAgICNlbmRpZg0KCSAgICAgdHlw ZWRlZiBpbnQgZHVtbXk7DQoNCl9BQ0VPRg0KaWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVO TyI7IHRoZW4gOg0KDQoJIyBDaGVjayBmb3IgcG90ZW50aWFsIC1hcmNoIGZsYWdzLiAgSXQgaXMg bm90IHVuaXZlcnNhbCB1bmxlc3MNCgkjIHRoZXJlIGFyZSBhdCBsZWFzdCB0d28gLWFyY2ggZmxh Z3Mgd2l0aCBkaWZmZXJlbnQgdmFsdWVzLg0KCWFjX2FyY2g9DQoJYWNfcHJldj0NCglmb3IgYWNf d29yZCBpbiAkQ0MgJENGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1M7IGRvDQoJIGlmIHRlc3QgLW4g IiRhY19wcmV2IjsgdGhlbg0KCSAgIGNhc2UgJGFjX3dvcmQgaW4NCgkgICAgIGk/ODYgfCB4ODZf NjQgfCBwcGMgfCBwcGM2NCkNCgkgICAgICAgaWYgdGVzdCAteiAiJGFjX2FyY2giIHx8IHRlc3Qg IiRhY19hcmNoIiA9ICIkYWNfd29yZCI7IHRoZW4NCgkJIGFjX2FyY2g9JGFjX3dvcmQNCgkgICAg ICAgZWxzZQ0KCQkgYWNfY3ZfY19iaWdlbmRpYW49dW5pdmVyc2FsDQoJCSBicmVhaw0KCSAgICAg ICBmaQ0KCSAgICAgICA7Ow0KCSAgIGVzYWMNCgkgICBhY19wcmV2PQ0KCSBlbGlmIHRlc3QgIngk YWNfd29yZCIgPSAieC1hcmNoIjsgdGhlbg0KCSAgIGFjX3ByZXY9YXJjaA0KCSBmaQ0KICAgICAg IGRvbmUNCmZpDQpybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNv bmZ0ZXN0LiRhY19leHQNCiAgICBpZiB0ZXN0ICRhY19jdl9jX2JpZ2VuZGlhbiA9IHVua25vd247 IHRoZW4NCiAgICAgICMgU2VlIGlmIHN5cy9wYXJhbS5oIGRlZmluZXMgdGhlIEJZVEVfT1JERVIg bWFjcm8uDQogICAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0 DQovKiBlbmQgY29uZmRlZnMuaC4gICovDQojaW5jbHVkZSA8c3lzL3R5cGVzLmg+DQoJICAgICAj aW5jbHVkZSA8c3lzL3BhcmFtLmg+DQoNCmludA0KbWFpbiAoKQ0Kew0KI2lmICEgKGRlZmluZWQg QllURV9PUkRFUiAmJiBkZWZpbmVkIEJJR19FTkRJQU4gXA0KCQkgICAgICYmIGRlZmluZWQgTElU VExFX0VORElBTiAmJiBCWVRFX09SREVSICYmIEJJR19FTkRJQU4gXA0KCQkgICAgICYmIExJVFRM RV9FTkRJQU4pDQoJICAgICAgYm9ndXMgZW5kaWFuIG1hY3Jvcw0KCSAgICAgI2VuZGlmDQoNCiAg Ow0KICByZXR1cm4gMDsNCn0NCl9BQ0VPRg0KaWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVO TyI7IHRoZW4gOg0KICAjIEl0IGRvZXM7IG5vdyBzZWUgd2hldGhlciBpdCBkZWZpbmVkIHRvIEJJ R19FTkRJQU4gb3Igbm90Lg0KCSBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4k YWNfZXh0DQovKiBlbmQgY29uZmRlZnMuaC4gICovDQojaW5jbHVkZSA8c3lzL3R5cGVzLmg+DQoJ CSNpbmNsdWRlIDxzeXMvcGFyYW0uaD4NCg0KaW50DQptYWluICgpDQp7DQojaWYgQllURV9PUkRF UiAhPSBCSUdfRU5ESUFODQoJCSBub3QgYmlnIGVuZGlhbg0KCQkjZW5kaWYNCg0KICA7DQogIHJl dHVybiAwOw0KfQ0KX0FDRU9GDQppZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhl biA6DQogIGFjX2N2X2NfYmlnZW5kaWFuPXllcw0KZWxzZQ0KICBhY19jdl9jX2JpZ2VuZGlhbj1u bw0KZmkNCnJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRl c3QuJGFjX2V4dA0KZmkNCnJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpl eHQgY29uZnRlc3QuJGFjX2V4dA0KICAgIGZpDQogICAgaWYgdGVzdCAkYWNfY3ZfY19iaWdlbmRp YW4gPSB1bmtub3duOyB0aGVuDQogICAgICAjIFNlZSBpZiA8bGltaXRzLmg+IGRlZmluZXMgX0xJ VFRMRV9FTkRJQU4gb3IgX0JJR19FTkRJQU4gKGUuZy4sIFNvbGFyaXMpLg0KICAgICAgY2F0IGNv bmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dA0KLyogZW5kIGNvbmZkZWZzLmgu ICAqLw0KI2luY2x1ZGUgPGxpbWl0cy5oPg0KDQppbnQNCm1haW4gKCkNCnsNCiNpZiAhIChkZWZp bmVkIF9MSVRUTEVfRU5ESUFOIHx8IGRlZmluZWQgX0JJR19FTkRJQU4pDQoJICAgICAgYm9ndXMg ZW5kaWFuIG1hY3Jvcw0KCSAgICAgI2VuZGlmDQoNCiAgOw0KICByZXR1cm4gMDsNCn0NCl9BQ0VP Rg0KaWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOg0KICAjIEl0IGRvZXM7 IG5vdyBzZWUgd2hldGhlciBpdCBkZWZpbmVkIHRvIF9CSUdfRU5ESUFOIG9yIG5vdC4NCgkgY2F0 IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dA0KLyogZW5kIGNvbmZkZWZz LmguICAqLw0KI2luY2x1ZGUgPGxpbWl0cy5oPg0KDQppbnQNCm1haW4gKCkNCnsNCiNpZm5kZWYg X0JJR19FTkRJQU4NCgkJIG5vdCBiaWcgZW5kaWFuDQoJCSNlbmRpZg0KDQogIDsNCiAgcmV0dXJu IDA7DQp9DQpfQUNFT0YNCmlmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoN CiAgYWNfY3ZfY19iaWdlbmRpYW49eWVzDQplbHNlDQogIGFjX2N2X2NfYmlnZW5kaWFuPW5vDQpm aQ0Kcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4k YWNfZXh0DQpmaQ0Kcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBj b25mdGVzdC4kYWNfZXh0DQogICAgZmkNCiAgICBpZiB0ZXN0ICRhY19jdl9jX2JpZ2VuZGlhbiA9 IHVua25vd247IHRoZW4NCiAgICAgICMgQ29tcGlsZSBhIHRlc3QgcHJvZ3JhbS4NCiAgICAgIGlm IHRlc3QgIiRjcm9zc19jb21waWxpbmciID0geWVzOyB0aGVuIDoNCiAgIyBUcnkgdG8gZ3Vlc3Mg YnkgZ3JlcHBpbmcgdmFsdWVzIGZyb20gYW4gb2JqZWN0IGZpbGUuDQoJIGNhdCBjb25mZGVmcy5o IC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQNCi8qIGVuZCBjb25mZGVmcy5oLiAgKi8NCnNo b3J0IGludCBhc2NpaV9tbVtdID0NCgkJICB7IDB4NDI0OSwgMHg0NzY1LCAweDZFNDQsIDB4Njk2 MSwgMHg2RTUzLCAweDc5NTMsIDAgfTsNCgkJc2hvcnQgaW50IGFzY2lpX2lpW10gPQ0KCQkgIHsg MHg2OTRDLCAweDU0NTQsIDB4NjU2QywgMHg2RTQ1LCAweDY5NDQsIDB4NkU2MSwgMCB9Ow0KCQlp bnQgdXNlX2FzY2lpIChpbnQgaSkgew0KCQkgIHJldHVybiBhc2NpaV9tbVtpXSArIGFzY2lpX2lp W2ldOw0KCQl9DQoJCXNob3J0IGludCBlYmNkaWNfaWlbXSA9DQoJCSAgeyAweDg5RDMsIDB4RTNF MywgMHg4NTkzLCAweDk1QzUsIDB4ODlDNCwgMHg5NTgxLCAwIH07DQoJCXNob3J0IGludCBlYmNk aWNfbW1bXSA9DQoJCSAgeyAweEMyQzksIDB4Qzc4NSwgMHg5NUM0LCAweDg5ODEsIDB4OTVFMiwg MHhBOEUyLCAwIH07DQoJCWludCB1c2VfZWJjZGljIChpbnQgaSkgew0KCQkgIHJldHVybiBlYmNk aWNfbW1baV0gKyBlYmNkaWNfaWlbaV07DQoJCX0NCgkJZXh0ZXJuIGludCBmb287DQoNCmludA0K bWFpbiAoKQ0Kew0KcmV0dXJuIHVzZV9hc2NpaSAoZm9vKSA9PSB1c2VfZWJjZGljIChmb28pOw0K ICA7DQogIHJldHVybiAwOw0KfQ0KX0FDRU9GDQppZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElO RU5PIjsgdGhlbiA6DQogIGlmIGdyZXAgQklHZW5EaWFuU3lTIGNvbmZ0ZXN0LiRhY19vYmpleHQg Pi9kZXYvbnVsbDsgdGhlbg0KCSAgICAgIGFjX2N2X2NfYmlnZW5kaWFuPXllcw0KCSAgICBmaQ0K CSAgICBpZiBncmVwIExpVFRsZUVuRGlhbiBjb25mdGVzdC4kYWNfb2JqZXh0ID4vZGV2L251bGwg OyB0aGVuDQoJICAgICAgaWYgdGVzdCAiJGFjX2N2X2NfYmlnZW5kaWFuIiA9IHVua25vd247IHRo ZW4NCgkJYWNfY3ZfY19iaWdlbmRpYW49bm8NCgkgICAgICBlbHNlDQoJCSMgZmluZGluZyBib3Ro IHN0cmluZ3MgaXMgdW5saWtlbHkgdG8gaGFwcGVuLCBidXQgd2hvIGtub3dzPw0KCQlhY19jdl9j X2JpZ2VuZGlhbj11bmtub3duDQoJICAgICAgZmkNCgkgICAgZmkNCmZpDQpybSAtZiBjb3JlIGNv bmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQNCmVsc2UNCiAg Y2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dA0KLyogZW5kIGNvbmZk ZWZzLmguICAqLw0KJGFjX2luY2x1ZGVzX2RlZmF1bHQNCmludA0KbWFpbiAoKQ0Kew0KDQoJICAg ICAvKiBBcmUgd2UgbGl0dGxlIG9yIGJpZyBlbmRpYW4/ICBGcm9tIEhhcmJpc29uJlN0ZWVsZS4g ICovDQoJICAgICB1bmlvbg0KCSAgICAgew0KCSAgICAgICBsb25nIGludCBsOw0KCSAgICAgICBj aGFyIGNbc2l6ZW9mIChsb25nIGludCldOw0KCSAgICAgfSB1Ow0KCSAgICAgdS5sID0gMTsNCgkg ICAgIHJldHVybiB1LmNbc2l6ZW9mIChsb25nIGludCkgLSAxXSA9PSAxOw0KDQogIDsNCiAgcmV0 dXJuIDA7DQp9DQpfQUNFT0YNCmlmIGFjX2ZuX2NfdHJ5X3J1biAiJExJTkVOTyI7IHRoZW4gOg0K ICBhY19jdl9jX2JpZ2VuZGlhbj1ubw0KZWxzZQ0KICBhY19jdl9jX2JpZ2VuZGlhbj15ZXMNCmZp DQpybSAtZiBjb3JlICouY29yZSBjb3JlLmNvbmZ0ZXN0LiogZ21vbi5vdXQgYmIub3V0IGNvbmZ0 ZXN0JGFjX2V4ZWV4dCBcDQogIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuYmVhbSBjb25m dGVzdC4kYWNfZXh0DQpmaQ0KDQogICAgZmkNCmZpDQp7ICRhc19lY2hvICIkYXNfbWU6JHthc19s aW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X2NfYmlnZW5kaWFuIiA+JjUNCiRhc19lY2hv ICIkYWNfY3ZfY19iaWdlbmRpYW4iID4mNjsgfQ0KIGNhc2UgJGFjX2N2X2NfYmlnZW5kaWFuIGlu ICMoDQogICB5ZXMpDQogICAgICRhc19lY2hvICIjZGVmaW5lIFdPUkRTX0JJR0VORElBTiAxIiA+ PmNvbmZkZWZzLmgNCjs7ICMoDQogICBubykNCiAgICAgIDs7ICMoDQogICB1bml2ZXJzYWwpDQoN CiRhc19lY2hvICIjZGVmaW5lIEFDX0FQUExFX1VOSVZFUlNBTF9CVUlMRCAxIiA+PmNvbmZkZWZz LmgNCg0KICAgICA7OyAjKA0KICAgKikNCiAgICAgYXNfZm5fZXJyb3IgJD8gInVua25vd24gZW5k aWFubmVzcw0KIHByZXNldHRpbmcgYWNfY3ZfY19iaWdlbmRpYW49bm8gKG9yIHllcykgd2lsbCBo ZWxwIiAiJExJTkVOTyIgNSA7Ow0KIGVzYWMNCg0KDQoNCg0KICBpZiB0ZXN0ICIkYWNfY3ZfaGVh ZGVyX3dpbnNvY2syX2giID0geWVzOyB0aGVuDQoNCg0KDQoNCg0KDQoNCg0KICBnbHRlc3RzX0xJ Qk9CSlM9IiRnbHRlc3RzX0xJQk9CSlMgaW9jdGwuJGFjX29iamV4dCINCg0KDQogICAgOg0KDQog IGVsc2UNCiAgICBmb3IgYWNfZnVuYyBpbiBpb2N0bA0KZG8gOg0KICBhY19mbl9jX2NoZWNrX2Z1 bmMgIiRMSU5FTk8iICJpb2N0bCIgImFjX2N2X2Z1bmNfaW9jdGwiDQppZiB0ZXN0ICJ4JGFjX2N2 X2Z1bmNfaW9jdGwiID0geHllczsgdGhlbiA6DQogIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YN CiNkZWZpbmUgSEFWRV9JT0NUTCAxDQpfQUNFT0YNCg0KZmkNCmRvbmUNCg0KICAgICAgICAgICAg ICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9y IGlvY3RsIHdpdGggUE9TSVggc2lnbmF0dXJlIiA+JjUNCiRhc19lY2hvX24gImNoZWNraW5nIGZv ciBpb2N0bCB3aXRoIFBPU0lYIHNpZ25hdHVyZS4uLiAiID4mNjsgfQ0KaWYgJHtnbF9jdl9mdW5j X2lvY3RsX3Bvc2l4X3NpZ25hdHVyZSs6fSBmYWxzZTsgdGhlbiA6DQogICRhc19lY2hvX24gIihj YWNoZWQpICIgPiY2DQplbHNlDQogIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0 LiRhY19leHQNCi8qIGVuZCBjb25mZGVmcy5oLiAgKi8NCiNpbmNsdWRlIDxzeXMvaW9jdGwuaD4N CmludA0KbWFpbiAoKQ0Kew0KZXh0ZXJuIGludCBpb2N0bCAoaW50LCBpbnQsIC4uLik7DQogIDsN CiAgcmV0dXJuIDA7DQp9DQoNCl9BQ0VPRg0KaWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVO TyI7IHRoZW4gOg0KICBnbF9jdl9mdW5jX2lvY3RsX3Bvc2l4X3NpZ25hdHVyZT15ZXMNCmVsc2UN CiAgZ2xfY3ZfZnVuY19pb2N0bF9wb3NpeF9zaWduYXR1cmU9bm8NCmZpDQpybSAtZiBjb3JlIGNv bmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQNCg0KZmkNCnsg JGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkZ2xfY3ZfZnVu Y19pb2N0bF9wb3NpeF9zaWduYXR1cmUiID4mNQ0KJGFzX2VjaG8gIiRnbF9jdl9mdW5jX2lvY3Rs X3Bvc2l4X3NpZ25hdHVyZSIgPiY2OyB9DQogICAgaWYgdGVzdCAkZ2xfY3ZfZnVuY19pb2N0bF9w b3NpeF9zaWduYXR1cmUgIT0geWVzOyB0aGVuDQogICAgICBSRVBMQUNFX0lPQ1RMPTENCg0KDQoN Cg0KDQoNCg0KDQogIGdsdGVzdHNfTElCT0JKUz0iJGdsdGVzdHNfTElCT0JKUyBpb2N0bC4kYWNf b2JqZXh0Ig0KDQoNCiAgICA6DQoNCiAgICBmaQ0KICBmaQ0KDQoNCg0KDQogIEdOVUxJQl9JT0NU TD0kZ2xfbW9kdWxlX2luZGljYXRvcl9jb25kaXRpb24NCg0KDQoNCiRhc19lY2hvICIjZGVmaW5l IEdOVUxJQl9URVNUX0lPQ1RMIDEiID4+Y29uZmRlZnMuaA0KDQoNCg0KDQogIHsgJGFzX2VjaG8g IiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hlcmUgdG8gZmluZCB0aGUg ZXhwb25lbnQgaW4gYSAnZG91YmxlJyIgPiY1DQokYXNfZWNob19uICJjaGVja2luZyB3aGVyZSB0 byBmaW5kIHRoZSBleHBvbmVudCBpbiBhICdkb3VibGUnLi4uICIgPiY2OyB9DQppZiAke2dsX2N2 X2NjX2RvdWJsZV9leHBiaXQwKzp9IGZhbHNlOyB0aGVuIDoNCiAgJGFzX2VjaG9fbiAiKGNhY2hl ZCkgIiA+JjYNCmVsc2UNCg0KICAgICAgaWYgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgPSB5ZXM7 IHRoZW4gOg0KDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0 DQovKiBlbmQgY29uZmRlZnMuaC4gICovDQoNCiNpZiBkZWZpbmVkIGFybSB8fCBkZWZpbmVkIF9f YXJtIHx8IGRlZmluZWQgX19hcm1fXw0KICBtaXhlZF9lbmRpYW5uZXNzDQojZW5kaWYNCg0KX0FD RU9GDQppZiAoZXZhbCAiJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0IikgMj4mNSB8DQogICRFR1JF UCAibWl4ZWRfZW5kaWFubmVzcyIgPi9kZXYvbnVsbCAyPiYxOyB0aGVuIDoNCiAgZ2xfY3ZfY2Nf ZG91YmxlX2V4cGJpdDA9InVua25vd24iDQplbHNlDQoNCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDoNCmlmICR7YWNfY3ZfY19iaWdlbmRp YW4rOn0gZmFsc2U7IHRoZW4gOg0KICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNg0KZWxzZQ0K ICBhY19jdl9jX2JpZ2VuZGlhbj11bmtub3duDQogICAgIyBTZWUgaWYgd2UncmUgZGVhbGluZyB3 aXRoIGEgdW5pdmVyc2FsIGNvbXBpbGVyLg0KICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0Yg PmNvbmZ0ZXN0LiRhY19leHQNCi8qIGVuZCBjb25mZGVmcy5oLiAgKi8NCiNpZm5kZWYgX19BUFBM RV9DQ19fDQoJICAgICAgIG5vdCBhIHVuaXZlcnNhbCBjYXBhYmxlIGNvbXBpbGVyDQoJICAgICAj ZW5kaWYNCgkgICAgIHR5cGVkZWYgaW50IGR1bW15Ow0KDQpfQUNFT0YNCmlmIGFjX2ZuX2NfdHJ5 X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoNCg0KCSMgQ2hlY2sgZm9yIHBvdGVudGlhbCAtYXJj aCBmbGFncy4gIEl0IGlzIG5vdCB1bml2ZXJzYWwgdW5sZXNzDQoJIyB0aGVyZSBhcmUgYXQgbGVh c3QgdHdvIC1hcmNoIGZsYWdzIHdpdGggZGlmZmVyZW50IHZhbHVlcy4NCglhY19hcmNoPQ0KCWFj X3ByZXY9DQoJZm9yIGFjX3dvcmQgaW4gJENDICRDRkxBR1MgJENQUEZMQUdTICRMREZMQUdTOyBk bw0KCSBpZiB0ZXN0IC1uICIkYWNfcHJldiI7IHRoZW4NCgkgICBjYXNlICRhY193b3JkIGluDQoJ ICAgICBpPzg2IHwgeDg2XzY0IHwgcHBjIHwgcHBjNjQpDQoJICAgICAgIGlmIHRlc3QgLXogIiRh Y19hcmNoIiB8fCB0ZXN0ICIkYWNfYXJjaCIgPSAiJGFjX3dvcmQiOyB0aGVuDQoJCSBhY19hcmNo PSRhY193b3JkDQoJICAgICAgIGVsc2UNCgkJIGFjX2N2X2NfYmlnZW5kaWFuPXVuaXZlcnNhbA0K CQkgYnJlYWsNCgkgICAgICAgZmkNCgkgICAgICAgOzsNCgkgICBlc2FjDQoJICAgYWNfcHJldj0N CgkgZWxpZiB0ZXN0ICJ4JGFjX3dvcmQiID0gIngtYXJjaCI7IHRoZW4NCgkgICBhY19wcmV2PWFy Y2gNCgkgZmkNCiAgICAgICBkb25lDQpmaQ0Kcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRl c3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0DQogICAgaWYgdGVzdCAkYWNfY3ZfY19iaWdl bmRpYW4gPSB1bmtub3duOyB0aGVuDQogICAgICAjIFNlZSBpZiBzeXMvcGFyYW0uaCBkZWZpbmVz IHRoZSBCWVRFX09SREVSIG1hY3JvLg0KICAgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+ Y29uZnRlc3QuJGFjX2V4dA0KLyogZW5kIGNvbmZkZWZzLmguICAqLw0KI2luY2x1ZGUgPHN5cy90 eXBlcy5oPg0KCSAgICAgI2luY2x1ZGUgPHN5cy9wYXJhbS5oPg0KDQppbnQNCm1haW4gKCkNCnsN CiNpZiAhIChkZWZpbmVkIEJZVEVfT1JERVIgJiYgZGVmaW5lZCBCSUdfRU5ESUFOIFwNCgkJICAg ICAmJiBkZWZpbmVkIExJVFRMRV9FTkRJQU4gJiYgQllURV9PUkRFUiAmJiBCSUdfRU5ESUFOIFwN CgkJICAgICAmJiBMSVRUTEVfRU5ESUFOKQ0KCSAgICAgIGJvZ3VzIGVuZGlhbiBtYWNyb3MNCgkg ICAgICNlbmRpZg0KDQogIDsNCiAgcmV0dXJuIDA7DQp9DQpfQUNFT0YNCmlmIGFjX2ZuX2NfdHJ5 X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoNCiAgIyBJdCBkb2VzOyBub3cgc2VlIHdoZXRoZXIg aXQgZGVmaW5lZCB0byBCSUdfRU5ESUFOIG9yIG5vdC4NCgkgY2F0IGNvbmZkZWZzLmggLSA8PF9B Q0VPRiA+Y29uZnRlc3QuJGFjX2V4dA0KLyogZW5kIGNvbmZkZWZzLmguICAqLw0KI2luY2x1ZGUg PHN5cy90eXBlcy5oPg0KCQkjaW5jbHVkZSA8c3lzL3BhcmFtLmg+DQoNCmludA0KbWFpbiAoKQ0K ew0KI2lmIEJZVEVfT1JERVIgIT0gQklHX0VORElBTg0KCQkgbm90IGJpZyBlbmRpYW4NCgkJI2Vu ZGlmDQoNCiAgOw0KICByZXR1cm4gMDsNCn0NCl9BQ0VPRg0KaWYgYWNfZm5fY190cnlfY29tcGls ZSAiJExJTkVOTyI7IHRoZW4gOg0KICBhY19jdl9jX2JpZ2VuZGlhbj15ZXMNCmVsc2UNCiAgYWNf Y3ZfY19iaWdlbmRpYW49bm8NCmZpDQpybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4k YWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQNCmZpDQpybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBj b25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQNCiAgICBmaQ0KICAgIGlmIHRlc3Qg JGFjX2N2X2NfYmlnZW5kaWFuID0gdW5rbm93bjsgdGhlbg0KICAgICAgIyBTZWUgaWYgPGxpbWl0 cy5oPiBkZWZpbmVzIF9MSVRUTEVfRU5ESUFOIG9yIF9CSUdfRU5ESUFOIChlLmcuLCBTb2xhcmlz KS4NCiAgICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQNCi8q IGVuZCBjb25mZGVmcy5oLiAgKi8NCiNpbmNsdWRlIDxsaW1pdHMuaD4NCg0KaW50DQptYWluICgp DQp7DQojaWYgISAoZGVmaW5lZCBfTElUVExFX0VORElBTiB8fCBkZWZpbmVkIF9CSUdfRU5ESUFO KQ0KCSAgICAgIGJvZ3VzIGVuZGlhbiBtYWNyb3MNCgkgICAgICNlbmRpZg0KDQogIDsNCiAgcmV0 dXJuIDA7DQp9DQpfQUNFT0YNCmlmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVu IDoNCiAgIyBJdCBkb2VzOyBub3cgc2VlIHdoZXRoZXIgaXQgZGVmaW5lZCB0byBfQklHX0VORElB TiBvciBub3QuDQoJIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQN Ci8qIGVuZCBjb25mZGVmcy5oLiAgKi8NCiNpbmNsdWRlIDxsaW1pdHMuaD4NCg0KaW50DQptYWlu ICgpDQp7DQojaWZuZGVmIF9CSUdfRU5ESUFODQoJCSBub3QgYmlnIGVuZGlhbg0KCQkjZW5kaWYN Cg0KICA7DQogIHJldHVybiAwOw0KfQ0KX0FDRU9GDQppZiBhY19mbl9jX3RyeV9jb21waWxlICIk TElORU5PIjsgdGhlbiA6DQogIGFjX2N2X2NfYmlnZW5kaWFuPXllcw0KZWxzZQ0KICBhY19jdl9j X2JpZ2VuZGlhbj1ubw0KZmkNCnJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19v YmpleHQgY29uZnRlc3QuJGFjX2V4dA0KZmkNCnJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0 ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dA0KICAgIGZpDQogICAgaWYgdGVzdCAkYWNf Y3ZfY19iaWdlbmRpYW4gPSB1bmtub3duOyB0aGVuDQogICAgICAjIENvbXBpbGUgYSB0ZXN0IHBy b2dyYW0uDQogICAgICBpZiB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IHllczsgdGhlbiA6DQog ICMgVHJ5IHRvIGd1ZXNzIGJ5IGdyZXBwaW5nIHZhbHVlcyBmcm9tIGFuIG9iamVjdCBmaWxlLg0K CSBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0DQovKiBlbmQgY29u ZmRlZnMuaC4gICovDQpzaG9ydCBpbnQgYXNjaWlfbW1bXSA9DQoJCSAgeyAweDQyNDksIDB4NDc2 NSwgMHg2RTQ0LCAweDY5NjEsIDB4NkU1MywgMHg3OTUzLCAwIH07DQoJCXNob3J0IGludCBhc2Np aV9paVtdID0NCgkJICB7IDB4Njk0QywgMHg1NDU0LCAweDY1NkMsIDB4NkU0NSwgMHg2OTQ0LCAw eDZFNjEsIDAgfTsNCgkJaW50IHVzZV9hc2NpaSAoaW50IGkpIHsNCgkJICByZXR1cm4gYXNjaWlf bW1baV0gKyBhc2NpaV9paVtpXTsNCgkJfQ0KCQlzaG9ydCBpbnQgZWJjZGljX2lpW10gPQ0KCQkg IHsgMHg4OUQzLCAweEUzRTMsIDB4ODU5MywgMHg5NUM1LCAweDg5QzQsIDB4OTU4MSwgMCB9Ow0K CQlzaG9ydCBpbnQgZWJjZGljX21tW10gPQ0KCQkgIHsgMHhDMkM5LCAweEM3ODUsIDB4OTVDNCwg MHg4OTgxLCAweDk1RTIsIDB4QThFMiwgMCB9Ow0KCQlpbnQgdXNlX2ViY2RpYyAoaW50IGkpIHsN CgkJICByZXR1cm4gZWJjZGljX21tW2ldICsgZWJjZGljX2lpW2ldOw0KCQl9DQoJCWV4dGVybiBp bnQgZm9vOw0KDQppbnQNCm1haW4gKCkNCnsNCnJldHVybiB1c2VfYXNjaWkgKGZvbykgPT0gdXNl X2ViY2RpYyAoZm9vKTsNCiAgOw0KICByZXR1cm4gMDsNCn0NCl9BQ0VPRg0KaWYgYWNfZm5fY190 cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOg0KICBpZiBncmVwIEJJR2VuRGlhblN5UyBjb25m dGVzdC4kYWNfb2JqZXh0ID4vZGV2L251bGw7IHRoZW4NCgkgICAgICBhY19jdl9jX2JpZ2VuZGlh bj15ZXMNCgkgICAgZmkNCgkgICAgaWYgZ3JlcCBMaVRUbGVFbkRpYW4gY29uZnRlc3QuJGFjX29i amV4dCA+L2Rldi9udWxsIDsgdGhlbg0KCSAgICAgIGlmIHRlc3QgIiRhY19jdl9jX2JpZ2VuZGlh biIgPSB1bmtub3duOyB0aGVuDQoJCWFjX2N2X2NfYmlnZW5kaWFuPW5vDQoJICAgICAgZWxzZQ0K CQkjIGZpbmRpbmcgYm90aCBzdHJpbmdzIGlzIHVubGlrZWx5IHRvIGhhcHBlbiwgYnV0IHdobyBr bm93cz8NCgkJYWNfY3ZfY19iaWdlbmRpYW49dW5rbm93bg0KCSAgICAgIGZpDQoJICAgIGZpDQpm aQ0Kcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4k YWNfZXh0DQplbHNlDQogIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19l eHQNCi8qIGVuZCBjb25mZGVmcy5oLiAgKi8NCiRhY19pbmNsdWRlc19kZWZhdWx0DQppbnQNCm1h aW4gKCkNCnsNCg0KCSAgICAgLyogQXJlIHdlIGxpdHRsZSBvciBiaWcgZW5kaWFuPyAgRnJvbSBI YXJiaXNvbiZTdGVlbGUuICAqLw0KCSAgICAgdW5pb24NCgkgICAgIHsNCgkgICAgICAgbG9uZyBp bnQgbDsNCgkgICAgICAgY2hhciBjW3NpemVvZiAobG9uZyBpbnQpXTsNCgkgICAgIH0gdTsNCgkg ICAgIHUubCA9IDE7DQoJICAgICByZXR1cm4gdS5jW3NpemVvZiAobG9uZyBpbnQpIC0gMV0gPT0g MTsNCg0KICA7DQogIHJldHVybiAwOw0KfQ0KX0FDRU9GDQppZiBhY19mbl9jX3RyeV9ydW4gIiRM SU5FTk8iOyB0aGVuIDoNCiAgYWNfY3ZfY19iaWdlbmRpYW49bm8NCmVsc2UNCiAgYWNfY3ZfY19i aWdlbmRpYW49eWVzDQpmaQ0Kcm0gLWYgY29yZSAqLmNvcmUgY29yZS5jb25mdGVzdC4qIGdtb24u b3V0IGJiLm91dCBjb25mdGVzdCRhY19leGVleHQgXA0KICBjb25mdGVzdC4kYWNfb2JqZXh0IGNv bmZ0ZXN0LmJlYW0gY29uZnRlc3QuJGFjX2V4dA0KZmkNCg0KICAgIGZpDQpmaQ0KOg0KIGNhc2Ug JGFjX2N2X2NfYmlnZW5kaWFuIGluICMoDQogICB5ZXMpDQogICAgIGdsX2N2X2NjX2RvdWJsZV9l eHBiaXQwPSJ3b3JkIDAgYml0IDIwIjs7ICMoDQogICBubykNCiAgICAgZ2xfY3ZfY2NfZG91Ymxl X2V4cGJpdDA9IndvcmQgMSBiaXQgMjAiIDs7ICMoDQogICB1bml2ZXJzYWwpDQoNCiRhc19lY2hv ICIjZGVmaW5lIEFDX0FQUExFX1VOSVZFUlNBTF9CVUlMRCAxIiA+PmNvbmZkZWZzLmgNCg0KICAg ICA7OyAjKA0KICAgKikNCiAgICAgZ2xfY3ZfY2NfZG91YmxlX2V4cGJpdDA9InVua25vd24iIDs7 DQogZXNhYw0KDQoNCmZpDQpybSAtZiBjb25mdGVzdCoNCg0KDQplbHNlDQogIGNhdCBjb25mZGVm cy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQNCi8qIGVuZCBjb25mZGVmcy5oLiAgKi8N Cg0KI2luY2x1ZGUgPGZsb2F0Lmg+DQojaW5jbHVkZSA8c3RkZGVmLmg+DQojaW5jbHVkZSA8c3Rk aW8uaD4NCiNpbmNsdWRlIDxzdHJpbmcuaD4NCiNkZWZpbmUgTldPUkRTIFwNCiAgKChzaXplb2Yg KGRvdWJsZSkgKyBzaXplb2YgKHVuc2lnbmVkIGludCkgLSAxKSAvIHNpemVvZiAodW5zaWduZWQg aW50KSkNCnR5cGVkZWYgdW5pb24geyBkb3VibGUgdmFsdWU7IHVuc2lnbmVkIGludCB3b3JkW05X T1JEU107IH0gbWVtb3J5X2RvdWJsZTsNCnN0YXRpYyB1bnNpZ25lZCBpbnQgb3JlZF93b3Jkc1tO V09SRFNdOw0Kc3RhdGljIHVuc2lnbmVkIGludCBhbmRlZF93b3Jkc1tOV09SRFNdOw0Kc3RhdGlj IHZvaWQgYWRkX3RvX29yZWRfd29yZHMgKGRvdWJsZSB4KQ0Kew0KICBtZW1vcnlfZG91YmxlIG07 DQogIHNpemVfdCBpOw0KICAvKiBDbGVhciBpdCBmaXJzdCwgaW4gY2FzZSBzaXplb2YgKGRvdWJs ZSkgPCBzaXplb2YgKG1lbW9yeV9kb3VibGUpLiAgKi8NCiAgbWVtc2V0ICgmbSwgMCwgc2l6ZW9m IChtZW1vcnlfZG91YmxlKSk7DQogIG0udmFsdWUgPSB4Ow0KICBmb3IgKGkgPSAwOyBpIDwgTldP UkRTOyBpKyspDQogICAgew0KICAgICAgb3JlZF93b3Jkc1tpXSB8PSBtLndvcmRbaV07DQogICAg ICBhbmRlZF93b3Jkc1tpXSAmPSBtLndvcmRbaV07DQogICAgfQ0KfQ0KaW50IG1haW4gKCkNCnsN CiAgc2l6ZV90IGo7DQogIEZJTEUgKmZwID0gZm9wZW4gKCJjb25mdGVzdC5vdXQiLCAidyIpOw0K ICBpZiAoZnAgPT0gTlVMTCkNCiAgICByZXR1cm4gMTsNCiAgZm9yIChqID0gMDsgaiA8IE5XT1JE UzsgaisrKQ0KICAgIGFuZGVkX3dvcmRzW2pdID0gfiAodW5zaWduZWQgaW50KSAwOw0KICBhZGRf dG9fb3JlZF93b3JkcyAoMC4yNSk7DQogIGFkZF90b19vcmVkX3dvcmRzICgwLjUpOw0KICBhZGRf dG9fb3JlZF93b3JkcyAoMS4wKTsNCiAgYWRkX3RvX29yZWRfd29yZHMgKDIuMCk7DQogIGFkZF90 b19vcmVkX3dvcmRzICg0LjApOw0KICAvKiBSZW1vdmUgYml0cyB0aGF0IGFyZSBjb21tb24gKGUu Zy4gaWYgcmVwcmVzZW50YXRpb24gb2YgdGhlIGZpcnN0IG1hbnRpc3NhDQogICAgIGJpdCBpcyBl eHBsaWNpdCkuICAqLw0KICBmb3IgKGogPSAwOyBqIDwgTldPUkRTOyBqKyspDQogICAgb3JlZF93 b3Jkc1tqXSAmPSB+YW5kZWRfd29yZHNbal07DQogIC8qIE5vdyBmaW5kIHRoZSBub256ZXJvIHdv cmQuICAqLw0KICBmb3IgKGogPSAwOyBqIDwgTldPUkRTOyBqKyspDQogICAgaWYgKG9yZWRfd29y ZHNbal0gIT0gMCkNCiAgICAgIGJyZWFrOw0KICBpZiAoaiA8IE5XT1JEUykNCiAgICB7DQogICAg ICBzaXplX3QgaTsNCiAgICAgIGZvciAoaSA9IGogKyAxOyBpIDwgTldPUkRTOyBpKyspDQogICAg ICAgIGlmIChvcmVkX3dvcmRzW2ldICE9IDApDQogICAgICAgICAgew0KICAgICAgICAgICAgZnBy aW50ZiAoZnAsICJ1bmtub3duIik7DQogICAgICAgICAgICByZXR1cm4gKGZjbG9zZSAoZnApICE9 IDApOw0KICAgICAgICAgIH0NCiAgICAgIGZvciAoaSA9IDA7IDsgaSsrKQ0KICAgICAgICBpZiAo KG9yZWRfd29yZHNbal0gPj4gaSkgJiAxKQ0KICAgICAgICAgIHsNCiAgICAgICAgICAgIGZwcmlu dGYgKGZwLCAid29yZCAlZCBiaXQgJWQiLCAoaW50KSBqLCAoaW50KSBpKTsNCiAgICAgICAgICAg IHJldHVybiAoZmNsb3NlIChmcCkgIT0gMCk7DQogICAgICAgICAgfQ0KICAgIH0NCiAgZnByaW50 ZiAoZnAsICJ1bmtub3duIik7DQogIHJldHVybiAoZmNsb3NlIChmcCkgIT0gMCk7DQp9DQoNCl9B Q0VPRg0KaWYgYWNfZm5fY190cnlfcnVuICIkTElORU5PIjsgdGhlbiA6DQogIGdsX2N2X2NjX2Rv dWJsZV9leHBiaXQwPWBjYXQgY29uZnRlc3Qub3V0YA0KZWxzZQ0KICBnbF9jdl9jY19kb3VibGVf ZXhwYml0MD0idW5rbm93biINCmZpDQpybSAtZiBjb3JlICouY29yZSBjb3JlLmNvbmZ0ZXN0Liog Z21vbi5vdXQgYmIub3V0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCBcDQogIGNvbmZ0ZXN0LiRhY19vYmpl eHQgY29uZnRlc3QuYmVhbSBjb25mdGVzdC4kYWNfZXh0DQpmaQ0KDQogICAgICBybSAtZiBjb25m dGVzdC5vdXQNCg0KZmkNCnsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTog cmVzdWx0OiAkZ2xfY3ZfY2NfZG91YmxlX2V4cGJpdDAiID4mNQ0KJGFzX2VjaG8gIiRnbF9jdl9j Y19kb3VibGVfZXhwYml0MCIgPiY2OyB9DQogIGNhc2UgIiRnbF9jdl9jY19kb3VibGVfZXhwYml0 MCIgaW4NCiAgICB3b3JkKmJpdCopDQogICAgICB3b3JkPWBlY2hvICIkZ2xfY3ZfY2NfZG91Ymxl X2V4cGJpdDAiIHwgc2VkIC1lICdzL3dvcmQgLy8nIC1lICdzLyBiaXQuKi8vJ2ANCiAgICAgIGJp dD1gZWNobyAiJGdsX2N2X2NjX2RvdWJsZV9leHBiaXQwIiB8IHNlZCAtZSAncy93b3JkLipiaXQg Ly8nYA0KDQpjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GDQojZGVmaW5lIERCTF9FWFBCSVQwX1dP UkQgJHdvcmQNCl9BQ0VPRg0KDQoNCmNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YNCiNkZWZpbmUg REJMX0VYUEJJVDBfQklUICRiaXQNCl9BQ0VPRg0KDQogICAgICA7Ow0KICBlc2FjDQoNCg0KICB7 ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXJlIHRv IGZpbmQgdGhlIGV4cG9uZW50IGluIGEgJ2Zsb2F0JyIgPiY1DQokYXNfZWNob19uICJjaGVja2lu ZyB3aGVyZSB0byBmaW5kIHRoZSBleHBvbmVudCBpbiBhICdmbG9hdCcuLi4gIiA+JjY7IH0NCmlm ICR7Z2xfY3ZfY2NfZmxvYXRfZXhwYml0MCs6fSBmYWxzZTsgdGhlbiA6DQogICRhc19lY2hvX24g IihjYWNoZWQpICIgPiY2DQplbHNlDQoNCiAgICAgIGlmIHRlc3QgIiRjcm9zc19jb21waWxpbmci ID0geWVzOyB0aGVuIDoNCiAgZ2xfY3ZfY2NfZmxvYXRfZXhwYml0MD0id29yZCAwIGJpdCAyMyIN CmVsc2UNCiAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dA0KLyog ZW5kIGNvbmZkZWZzLmguICAqLw0KDQojaW5jbHVkZSA8ZmxvYXQuaD4NCiNpbmNsdWRlIDxzdGRk ZWYuaD4NCiNpbmNsdWRlIDxzdGRpby5oPg0KI2luY2x1ZGUgPHN0cmluZy5oPg0KI2RlZmluZSBO V09SRFMgXA0KICAoKHNpemVvZiAoZmxvYXQpICsgc2l6ZW9mICh1bnNpZ25lZCBpbnQpIC0gMSkg LyBzaXplb2YgKHVuc2lnbmVkIGludCkpDQp0eXBlZGVmIHVuaW9uIHsgZmxvYXQgdmFsdWU7IHVu c2lnbmVkIGludCB3b3JkW05XT1JEU107IH0gbWVtb3J5X2Zsb2F0Ow0Kc3RhdGljIHVuc2lnbmVk IGludCBvcmVkX3dvcmRzW05XT1JEU107DQpzdGF0aWMgdW5zaWduZWQgaW50IGFuZGVkX3dvcmRz W05XT1JEU107DQpzdGF0aWMgdm9pZCBhZGRfdG9fb3JlZF93b3JkcyAoZmxvYXQgeCkNCnsNCiAg bWVtb3J5X2Zsb2F0IG07DQogIHNpemVfdCBpOw0KICAvKiBDbGVhciBpdCBmaXJzdCwgaW4gY2Fz ZQ0KICAgICBzaXplb2YgKGZsb2F0KSA8IHNpemVvZiAobWVtb3J5X2Zsb2F0KS4gICovDQogIG1l bXNldCAoJm0sIDAsIHNpemVvZiAobWVtb3J5X2Zsb2F0KSk7DQogIG0udmFsdWUgPSB4Ow0KICBm b3IgKGkgPSAwOyBpIDwgTldPUkRTOyBpKyspDQogICAgew0KICAgICAgb3JlZF93b3Jkc1tpXSB8 PSBtLndvcmRbaV07DQogICAgICBhbmRlZF93b3Jkc1tpXSAmPSBtLndvcmRbaV07DQogICAgfQ0K fQ0KaW50IG1haW4gKCkNCnsNCiAgc2l6ZV90IGo7DQogIEZJTEUgKmZwID0gZm9wZW4gKCJjb25m dGVzdC5vdXQiLCAidyIpOw0KICBpZiAoZnAgPT0gTlVMTCkNCiAgICByZXR1cm4gMTsNCiAgZm9y IChqID0gMDsgaiA8IE5XT1JEUzsgaisrKQ0KICAgIGFuZGVkX3dvcmRzW2pdID0gfiAodW5zaWdu ZWQgaW50KSAwOw0KICBhZGRfdG9fb3JlZF93b3JkcyAoMC4yNWYpOw0KICBhZGRfdG9fb3JlZF93 b3JkcyAoMC41Zik7DQogIGFkZF90b19vcmVkX3dvcmRzICgxLjBmKTsNCiAgYWRkX3RvX29yZWRf d29yZHMgKDIuMGYpOw0KICBhZGRfdG9fb3JlZF93b3JkcyAoNC4wZik7DQogIC8qIFJlbW92ZSBi aXRzIHRoYXQgYXJlIGNvbW1vbiAoZS5nLiBpZiByZXByZXNlbnRhdGlvbiBvZiB0aGUgZmlyc3Qg bWFudGlzc2ENCiAgICAgYml0IGlzIGV4cGxpY2l0KS4gICovDQogIGZvciAoaiA9IDA7IGogPCBO V09SRFM7IGorKykNCiAgICBvcmVkX3dvcmRzW2pdICY9IH5hbmRlZF93b3Jkc1tqXTsNCiAgLyog Tm93IGZpbmQgdGhlIG5vbnplcm8gd29yZC4gICovDQogIGZvciAoaiA9IDA7IGogPCBOV09SRFM7 IGorKykNCiAgICBpZiAob3JlZF93b3Jkc1tqXSAhPSAwKQ0KICAgICAgYnJlYWs7DQogIGlmIChq IDwgTldPUkRTKQ0KICAgIHsNCiAgICAgIHNpemVfdCBpOw0KICAgICAgZm9yIChpID0gaiArIDE7 IGkgPCBOV09SRFM7IGkrKykNCiAgICAgICAgaWYgKG9yZWRfd29yZHNbaV0gIT0gMCkNCiAgICAg ICAgICB7DQogICAgICAgICAgICBmcHJpbnRmIChmcCwgInVua25vd24iKTsNCiAgICAgICAgICAg IHJldHVybiAoZmNsb3NlIChmcCkgIT0gMCk7DQogICAgICAgICAgfQ0KICAgICAgZm9yIChpID0g MDsgOyBpKyspDQogICAgICAgIGlmICgob3JlZF93b3Jkc1tqXSA+PiBpKSAmIDEpDQogICAgICAg ICAgew0KICAgICAgICAgICAgZnByaW50ZiAoZnAsICJ3b3JkICVkIGJpdCAlZCIsIChpbnQpIGos IChpbnQpIGkpOw0KICAgICAgICAgICAgcmV0dXJuIChmY2xvc2UgKGZwKSAhPSAwKTsNCiAgICAg ICAgICB9DQogICAgfQ0KICBmcHJpbnRmIChmcCwgInVua25vd24iKTsNCiAgcmV0dXJuIChmY2xv c2UgKGZwKSAhPSAwKTsNCn0NCg0KX0FDRU9GDQppZiBhY19mbl9jX3RyeV9ydW4gIiRMSU5FTk8i OyB0aGVuIDoNCiAgZ2xfY3ZfY2NfZmxvYXRfZXhwYml0MD1gY2F0IGNvbmZ0ZXN0Lm91dGANCmVs c2UNCiAgZ2xfY3ZfY2NfZmxvYXRfZXhwYml0MD0idW5rbm93biINCmZpDQpybSAtZiBjb3JlICou Y29yZSBjb3JlLmNvbmZ0ZXN0LiogZ21vbi5vdXQgYmIub3V0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCBc DQogIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuYmVhbSBjb25mdGVzdC4kYWNfZXh0DQpm aQ0KDQogICAgICBybSAtZiBjb25mdGVzdC5vdXQNCg0KZmkNCnsgJGFzX2VjaG8gIiRhc19tZTok e2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkZ2xfY3ZfY2NfZmxvYXRfZXhwYml0MCIgPiY1 DQokYXNfZWNobyAiJGdsX2N2X2NjX2Zsb2F0X2V4cGJpdDAiID4mNjsgfQ0KICBjYXNlICIkZ2xf Y3ZfY2NfZmxvYXRfZXhwYml0MCIgaW4NCiAgICB3b3JkKmJpdCopDQogICAgICB3b3JkPWBlY2hv ICIkZ2xfY3ZfY2NfZmxvYXRfZXhwYml0MCIgfCBzZWQgLWUgJ3Mvd29yZCAvLycgLWUgJ3MvIGJp dC4qLy8nYA0KICAgICAgYml0PWBlY2hvICIkZ2xfY3ZfY2NfZmxvYXRfZXhwYml0MCIgfCBzZWQg LWUgJ3Mvd29yZC4qYml0IC8vJ2ANCg0KY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRg0KI2RlZmlu ZSBGTFRfRVhQQklUMF9XT1JEICR3b3JkDQpfQUNFT0YNCg0KDQpjYXQgPj5jb25mZGVmcy5oIDw8 X0FDRU9GDQojZGVmaW5lIEZMVF9FWFBCSVQwX0JJVCAkYml0DQpfQUNFT0YNCg0KICAgICAgOzsN CiAgZXNhYw0KDQoNCg0KICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306 IGNoZWNraW5nIHdoZXJlIHRvIGZpbmQgdGhlIGV4cG9uZW50IGluIGEgJ2xvbmcgZG91YmxlJyIg PiY1DQokYXNfZWNob19uICJjaGVja2luZyB3aGVyZSB0byBmaW5kIHRoZSBleHBvbmVudCBpbiBh ICdsb25nIGRvdWJsZScuLi4gIiA+JjY7IH0NCmlmICR7Z2xfY3ZfY2NfbG9uZ19kb3VibGVfZXhw Yml0MCs6fSBmYWxzZTsgdGhlbiA6DQogICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2DQplbHNl DQoNCiAgICAgIGlmIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0geWVzOyB0aGVuIDoNCg0KICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2xfY3ZfY2NfbG9uZ19kb3VibGVfZXhwYml0MD0i dW5rbm93biINCg0KZWxzZQ0KICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4k YWNfZXh0DQovKiBlbmQgY29uZmRlZnMuaC4gICovDQoNCiNpbmNsdWRlIDxmbG9hdC5oPg0KI2lu Y2x1ZGUgPHN0ZGRlZi5oPg0KI2luY2x1ZGUgPHN0ZGlvLmg+DQojaW5jbHVkZSA8c3RyaW5nLmg+ DQojZGVmaW5lIE5XT1JEUyBcDQogICgoc2l6ZW9mIChsb25nIGRvdWJsZSkgKyBzaXplb2YgKHVu c2lnbmVkIGludCkgLSAxKSAvIHNpemVvZiAodW5zaWduZWQgaW50KSkNCnR5cGVkZWYgdW5pb24g eyBsb25nIGRvdWJsZSB2YWx1ZTsgdW5zaWduZWQgaW50IHdvcmRbTldPUkRTXTsgfQ0KICAgICAg ICBtZW1vcnlfbG9uZ19kb3VibGU7DQpzdGF0aWMgdW5zaWduZWQgaW50IG9yZWRfd29yZHNbTldP UkRTXTsNCnN0YXRpYyB1bnNpZ25lZCBpbnQgYW5kZWRfd29yZHNbTldPUkRTXTsNCnN0YXRpYyB2 b2lkIGFkZF90b19vcmVkX3dvcmRzIChsb25nIGRvdWJsZSB4KQ0Kew0KICBtZW1vcnlfbG9uZ19k b3VibGUgbTsNCiAgc2l6ZV90IGk7DQogIC8qIENsZWFyIGl0IGZpcnN0LCBpbiBjYXNlDQogICAg IHNpemVvZiAobG9uZyBkb3VibGUpIDwgc2l6ZW9mIChtZW1vcnlfbG9uZ19kb3VibGUpLiAgKi8N CiAgbWVtc2V0ICgmbSwgMCwgc2l6ZW9mIChtZW1vcnlfbG9uZ19kb3VibGUpKTsNCiAgbS52YWx1 ZSA9IHg7DQogIGZvciAoaSA9IDA7IGkgPCBOV09SRFM7IGkrKykNCiAgICB7DQogICAgICBvcmVk X3dvcmRzW2ldIHw9IG0ud29yZFtpXTsNCiAgICAgIGFuZGVkX3dvcmRzW2ldICY9IG0ud29yZFtp XTsNCiAgICB9DQp9DQppbnQgbWFpbiAoKQ0Kew0KICBzaXplX3QgajsNCiAgRklMRSAqZnAgPSBm b3BlbiAoImNvbmZ0ZXN0Lm91dCIsICJ3Iik7DQogIGlmIChmcCA9PSBOVUxMKQ0KICAgIHJldHVy biAxOw0KICBmb3IgKGogPSAwOyBqIDwgTldPUkRTOyBqKyspDQogICAgYW5kZWRfd29yZHNbal0g PSB+ICh1bnNpZ25lZCBpbnQpIDA7DQogIGFkZF90b19vcmVkX3dvcmRzICgwLjI1TCk7DQogIGFk ZF90b19vcmVkX3dvcmRzICgwLjVMKTsNCiAgYWRkX3RvX29yZWRfd29yZHMgKDEuMEwpOw0KICBh ZGRfdG9fb3JlZF93b3JkcyAoMi4wTCk7DQogIGFkZF90b19vcmVkX3dvcmRzICg0LjBMKTsNCiAg LyogUmVtb3ZlIGJpdHMgdGhhdCBhcmUgY29tbW9uIChlLmcuIGlmIHJlcHJlc2VudGF0aW9uIG9m IHRoZSBmaXJzdCBtYW50aXNzYQ0KICAgICBiaXQgaXMgZXhwbGljaXQpLiAgKi8NCiAgZm9yIChq ID0gMDsgaiA8IE5XT1JEUzsgaisrKQ0KICAgIG9yZWRfd29yZHNbal0gJj0gfmFuZGVkX3dvcmRz W2pdOw0KICAvKiBOb3cgZmluZCB0aGUgbm9uemVybyB3b3JkLiAgKi8NCiAgZm9yIChqID0gMDsg aiA8IE5XT1JEUzsgaisrKQ0KICAgIGlmIChvcmVkX3dvcmRzW2pdICE9IDApDQogICAgICBicmVh azsNCiAgaWYgKGogPCBOV09SRFMpDQogICAgew0KICAgICAgc2l6ZV90IGk7DQogICAgICBmb3Ig KGkgPSBqICsgMTsgaSA8IE5XT1JEUzsgaSsrKQ0KICAgICAgICBpZiAob3JlZF93b3Jkc1tpXSAh PSAwKQ0KICAgICAgICAgIHsNCiAgICAgICAgICAgIGZwcmludGYgKGZwLCAidW5rbm93biIpOw0K ICAgICAgICAgICAgcmV0dXJuIChmY2xvc2UgKGZwKSAhPSAwKTsNCiAgICAgICAgICB9DQogICAg ICBmb3IgKGkgPSAwOyA7IGkrKykNCiAgICAgICAgaWYgKChvcmVkX3dvcmRzW2pdID4+IGkpICYg MSkNCiAgICAgICAgICB7DQogICAgICAgICAgICBmcHJpbnRmIChmcCwgIndvcmQgJWQgYml0ICVk IiwgKGludCkgaiwgKGludCkgaSk7DQogICAgICAgICAgICByZXR1cm4gKGZjbG9zZSAoZnApICE9 IDApOw0KICAgICAgICAgIH0NCiAgICB9DQogIGZwcmludGYgKGZwLCAidW5rbm93biIpOw0KICBy ZXR1cm4gKGZjbG9zZSAoZnApICE9IDApOw0KfQ0KDQpfQUNFT0YNCmlmIGFjX2ZuX2NfdHJ5X3J1 biAiJExJTkVOTyI7IHRoZW4gOg0KICBnbF9jdl9jY19sb25nX2RvdWJsZV9leHBiaXQwPWBjYXQg Y29uZnRlc3Qub3V0YA0KZWxzZQ0KICBnbF9jdl9jY19sb25nX2RvdWJsZV9leHBiaXQwPSJ1bmtu b3duIg0KZmkNCnJtIC1mIGNvcmUgKi5jb3JlIGNvcmUuY29uZnRlc3QuKiBnbW9uLm91dCBiYi5v dXQgY29uZnRlc3QkYWNfZXhlZXh0IFwNCiAgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC5i ZWFtIGNvbmZ0ZXN0LiRhY19leHQNCmZpDQoNCiAgICAgIHJtIC1mIGNvbmZ0ZXN0Lm91dA0KDQpm aQ0KeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRnbF9j dl9jY19sb25nX2RvdWJsZV9leHBiaXQwIiA+JjUNCiRhc19lY2hvICIkZ2xfY3ZfY2NfbG9uZ19k b3VibGVfZXhwYml0MCIgPiY2OyB9DQogIGNhc2UgIiRnbF9jdl9jY19sb25nX2RvdWJsZV9leHBi aXQwIiBpbg0KICAgIHdvcmQqYml0KikNCiAgICAgIHdvcmQ9YGVjaG8gIiRnbF9jdl9jY19sb25n X2RvdWJsZV9leHBiaXQwIiB8IHNlZCAtZSAncy93b3JkIC8vJyAtZSAncy8gYml0LiovLydgDQog ICAgICBiaXQ9YGVjaG8gIiRnbF9jdl9jY19sb25nX2RvdWJsZV9leHBiaXQwIiB8IHNlZCAtZSAn cy93b3JkLipiaXQgLy8nYA0KDQpjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GDQojZGVmaW5lIExE QkxfRVhQQklUMF9XT1JEICR3b3JkDQpfQUNFT0YNCg0KDQpjYXQgPj5jb25mZGVmcy5oIDw8X0FD RU9GDQojZGVmaW5lIExEQkxfRVhQQklUMF9CSVQgJGJpdA0KX0FDRU9GDQoNCiAgICAgIDs7DQog IGVzYWMNCg0KDQoNCiAgaWYgdGVzdCAiJGFjX2N2X2hlYWRlcl93aW5zb2NrMl9oIiA9IHllczsg dGhlbg0KDQoNCg0KDQoNCg0KDQoNCiAgZ2x0ZXN0c19MSUJPQkpTPSIkZ2x0ZXN0c19MSUJPQkpT IGxpc3Rlbi4kYWNfb2JqZXh0Ig0KDQogIGZpDQoNCg0KDQogIEdOVUxJQl9MSVNURU49JGdsX21v ZHVsZV9pbmRpY2F0b3JfY29uZGl0aW9uDQoNCg0KDQokYXNfZWNobyAiI2RlZmluZSBHTlVMSUJf VEVTVF9MSVNURU4gMSIgPj5jb25mZGVmcy5oDQoNCg0KDQoNCg0KDQoNCiAgZm9yIGFjX2Z1bmMg aW4gc2V0bG9jYWxlIHVzZWxvY2FsZQ0KZG8gOg0KICBhc19hY192YXI9YCRhc19lY2hvICJhY19j dl9mdW5jXyRhY19mdW5jIiB8ICRhc190cl9zaGANCmFjX2ZuX2NfY2hlY2tfZnVuYyAiJExJTkVO TyIgIiRhY19mdW5jIiAiJGFzX2FjX3ZhciINCmlmIGV2YWwgdGVzdCBcInhcJCIkYXNfYWNfdmFy IlwiID0geCJ5ZXMiOyB0aGVuIDoNCiAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRg0KI2RlZmlu ZSBgJGFzX2VjaG8gIkhBVkVfJGFjX2Z1bmMiIHwgJGFzX3RyX2NwcGAgMQ0KX0FDRU9GDQoNCmZp DQpkb25lDQoNCg0KDQoNCg0KDQogIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElO RU5PfTogY2hlY2tpbmcgZm9yIGEgdHJhZGl0aW9uYWwgZnJlbmNoIGxvY2FsZSIgPiY1DQokYXNf ZWNob19uICJjaGVja2luZyBmb3IgYSB0cmFkaXRpb25hbCBmcmVuY2ggbG9jYWxlLi4uICIgPiY2 OyB9DQppZiAke2d0X2N2X2xvY2FsZV9mcis6fSBmYWxzZTsgdGhlbiA6DQogICRhc19lY2hvX24g IihjYWNoZWQpICIgPiY2DQplbHNlDQoNCiAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5j b25mdGVzdC4kYWNfZXh0DQovKiBlbmQgY29uZmRlZnMuaC4gICovDQoNCiNpbmNsdWRlIDxsb2Nh bGUuaD4NCiNpbmNsdWRlIDx0aW1lLmg+DQojaWYgSEFWRV9MQU5HSU5GT19DT0RFU0VUDQojIGlu Y2x1ZGUgPGxhbmdpbmZvLmg+DQojZW5kaWYNCiNpbmNsdWRlIDxzdGRsaWIuaD4NCiNpbmNsdWRl IDxzdHJpbmcuaD4NCnN0cnVjdCB0bSB0Ow0KY2hhciBidWZbMTZdOw0KaW50IG1haW4gKCkgew0K ICAvKiBDaGVjayB3aGV0aGVyIHRoZSBnaXZlbiBsb2NhbGUgbmFtZSBpcyByZWNvZ25pemVkIGJ5 IHRoZSBzeXN0ZW0uICAqLw0KI2lmIChkZWZpbmVkIF9XSU4zMiB8fCBkZWZpbmVkIF9fV0lOMzJf XykgJiYgIWRlZmluZWQgX19DWUdXSU5fXw0KICAvKiBPbiBuYXRpdmUgV2luMzIsIHNldGxvY2Fs ZShjYXRlZ29yeSwgIiIpIGxvb2tzIGF0IHRoZSBzeXN0ZW0gc2V0dGluZ3MsDQogICAgIG5vdCBh dCB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGVzLiAgQWxzbywgd2hlbiBhbiBlbmNvZGluZyBzdWZm aXggc3VjaA0KICAgICBhcyAiLjY1MDAxIiBvciAiLjU0OTM2IiBpcyBzcGVmaWNpZWQsIGl0IHN1 Y2NlZWRzIGJ1dCBzZXRzIHRoZSBMQ19DVFlQRQ0KICAgICBjYXRlZ29yeSBvZiB0aGUgbG9jYWxl IHRvICJDIi4gICovDQogIGlmIChzZXRsb2NhbGUgKExDX0FMTCwgZ2V0ZW52ICgiTENfQUxMIikp ID09IE5VTEwNCiAgICAgIHx8IHN0cmNtcCAoc2V0bG9jYWxlIChMQ19DVFlQRSwgTlVMTCksICJD IikgPT0gMCkNCiAgICByZXR1cm4gMTsNCiNlbHNlDQogIGlmIChzZXRsb2NhbGUgKExDX0FMTCwg IiIpID09IE5VTEwpIHJldHVybiAxOw0KI2VuZGlmDQogIC8qIENoZWNrIHdoZXRoZXIgbmxfbGFu Z2luZm8oQ09ERVNFVCkgaXMgbm9uZW1wdHkgYW5kIG5vdCAiQVNDSUkiIG9yICI2NDYiLg0KICAg ICBPbiBNYWNPUyBYIDEwLjMuNSAoRGFyd2luIDcuNSkgaW4gdGhlIGZyX0ZSIGxvY2FsZSwgbmxf bGFuZ2luZm8oQ09ERVNFVCkNCiAgICAgaXMgZW1wdHksIGFuZCB0aGUgYmVoYXZpb3VyIG9mIFRj bCA4LjQgaW4gdGhpcyBsb2NhbGUgaXMgbm90IHVzZWZ1bC4NCiAgICAgT24gT3BlbkJTRCA0LjAs IHdoZW4gYW4gdW5zdXBwb3J0ZWQgbG9jYWxlIGlzIHNwZWNpZmllZCwgc2V0bG9jYWxlKCkNCiAg ICAgc3VjY2VlZHMgYnV0IHRoZW4gbmxfbGFuZ2luZm8oQ09ERVNFVCkgaXMgIjY0NiIuIEluIHRo aXMgc2l0dWF0aW9uLA0KICAgICBzb21lIHVuaXQgdGVzdHMgZmFpbC4NCiAgICAgT24gTWlyQlNE IDEwLCB3aGVuIGFuIHVuc3VwcG9ydGVkIGxvY2FsZSBpcyBzcGVjaWZpZWQsIHNldGxvY2FsZSgp DQogICAgIHN1Y2NlZWRzIGJ1dCB0aGVuIG5sX2xhbmdpbmZvKENPREVTRVQpIGlzICJVVEYtOCIu ICAqLw0KI2lmIEhBVkVfTEFOR0lORk9fQ09ERVNFVA0KICB7DQogICAgY29uc3QgY2hhciAqY3Mg PSBubF9sYW5naW5mbyAoQ09ERVNFVCk7DQogICAgaWYgKGNzWzBdID09ICdcMCcgfHwgc3RyY21w IChjcywgIkFTQ0lJIikgPT0gMCB8fCBzdHJjbXAgKGNzLCAiNjQ2IikgPT0gMA0KICAgICAgICB8 fCBzdHJjbXAgKGNzLCAiVVRGLTgiKSA9PSAwKQ0KICAgICAgcmV0dXJuIDE7DQogIH0NCiNlbmRp Zg0KI2lmZGVmIF9fQ1lHV0lOX18NCiAgLyogT24gQ3lnd2luLCBhdm9pZCBsb2NhbGUgbmFtZXMg d2l0aG91dCBlbmNvZGluZyBzdWZmaXgsIGJlY2F1c2UgdGhlDQogICAgIGxvY2FsZV9jaGFyc2V0 KCkgZnVuY3Rpb24gcmVsaWVzIG9uIHRoZSBlbmNvZGluZyBzdWZmaXguICBOb3RlIHRoYXQNCiAg ICAgTENfQUxMIGlzIHNldCBvbiB0aGUgY29tbWFuZCBsaW5lLiAgKi8NCiAgaWYgKHN0cmNociAo Z2V0ZW52ICgiTENfQUxMIiksICcuJykgPT0gTlVMTCkgcmV0dXJuIDE7DQojZW5kaWYNCiAgLyog Q2hlY2sgd2hldGhlciBpbiB0aGUgYWJicmV2aWF0aW9uIG9mIHRoZSBzZWNvbmQgbW9udGgsIHRo ZSBzZWNvbmQNCiAgICAgY2hhcmFjdGVyIChzaG91bGQgYmUgVSswMEU5OiBMQVRJTiBTTUFMTCBM RVRURVIgRSBXSVRIIEFDVVRFKSBpcyBvbmx5DQogICAgIG9uZSBieXRlIGxvbmcuIFRoaXMgZXhj bHVkZXMgdGhlIFVURi04IGVuY29kaW5nLiAgKi8NCiAgdC50bV95ZWFyID0gMTk3NSAtIDE5MDA7 IHQudG1fbW9uID0gMiAtIDE7IHQudG1fbWRheSA9IDQ7DQogIGlmIChzdHJmdGltZSAoYnVmLCBz aXplb2YgKGJ1ZiksICIlYiIsICZ0KSA8IDMgfHwgYnVmWzJdICE9ICd2JykgcmV0dXJuIDE7DQog IC8qIENoZWNrIHdoZXRoZXIgdGhlIGRlY2ltYWwgc2VwYXJhdG9yIGlzIGEgY29tbWEuDQogICAg IE9uIE5ldEJTRCAzLjAgaW4gdGhlIGZyX0ZSLklTTzg4NTktMSBsb2NhbGUsIGxvY2FsZWNvbnYo KS0+ZGVjaW1hbF9wb2ludA0KICAgICBhcmUgbmxfbGFuZ2luZm8oUkFESVhDSEFSKSBhcmUgYm90 aCAiLiIuICAqLw0KICBpZiAobG9jYWxlY29udiAoKSAtPmRlY2ltYWxfcG9pbnRbMF0gIT0gJywn KSByZXR1cm4gMTsNCiAgcmV0dXJuIDA7DQp9DQoNCl9BQ0VPRg0KICAgIGlmIHsgeyBldmFsIGVj aG8gIlwiXCRhc19tZVwiOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcIiRhY19saW5rXCIiOyB9ID4m NQ0KICAoZXZhbCAkYWNfbGluaykgMj4mNQ0KICBhY19zdGF0dXM9JD8NCiAgJGFzX2VjaG8gIiRh c19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1DQogIHRlc3Qg JGFjX3N0YXR1cyA9IDA7IH0gJiYgdGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQ7IHRoZW4NCiAg ICAgIGNhc2UgIiRob3N0X29zIiBpbg0KICAgICAgICAjIEhhbmRsZSBuYXRpdmUgV2luZG93cyBz cGVjaWFsbHksIGJlY2F1c2UgdGhlcmUgc2V0bG9jYWxlKCkgaW50ZXJwcmV0cw0KICAgICAgICAj ICJhciIgYXMgIkFyYWJpYyIgb3IgIkFyYWJpY19TYXVkaSBBcmFiaWEuMTI1NiIsDQogICAgICAg ICMgImZyIiBvciAiZnJhIiBhcyAiRnJlbmNoIiBvciAiRnJlbmNoX0ZyYW5jZS4xMjUyIiwNCiAg ICAgICAgIyAiZ2UiKCEpIG9yICJkZXUiKCEpIGFzICJHZXJtYW4iIG9yICJHZXJtYW5fR2VybWFu eS4xMjUyIiwNCiAgICAgICAgIyAiamEiIGFzICJKYXBhbmVzZSIgb3IgIkphcGFuZXNlX0phcGFu LjkzMiIsDQogICAgICAgICMgYW5kIHNpbWlsYXIuDQogICAgICAgIG1pbmd3KikNCiAgICAgICAg ICAjIFRlc3QgZm9yIHRoZSBuYXRpdmUgV2luMzIgbG9jYWxlIG5hbWUuDQogICAgICAgICAgaWYg KExDX0FMTD1GcmVuY2hfRnJhbmNlLjEyNTIgTENfVElNRT0gTENfQ1RZUEU9IC4vY29uZnRlc3Q7 IGV4aXQpIDI+L2Rldi9udWxsOyB0aGVuDQogICAgICAgICAgICBndF9jdl9sb2NhbGVfZnI9RnJl bmNoX0ZyYW5jZS4xMjUyDQogICAgICAgICAgZWxzZQ0KICAgICAgICAgICAgIyBOb25lIGZvdW5k Lg0KICAgICAgICAgICAgZ3RfY3ZfbG9jYWxlX2ZyPW5vbmUNCiAgICAgICAgICBmaQ0KICAgICAg ICAgIDs7DQogICAgICAgICopDQogICAgICAgICAgIyBTZXR0aW5nIExDX0FMTCBpcyBub3QgZW5v dWdoLiBOZWVkIHRvIHNldCBMQ19USU1FIHRvIGVtcHR5LCBiZWNhdXNlDQogICAgICAgICAgIyBv dGhlcndpc2Ugb24gTWFjT1MgWCAxMC4zLjUgdGhlIExDX1RJTUU9QyBmcm9tIHRoZSBiZWdpbm5p bmcgb2YgdGhlDQogICAgICAgICAgIyBjb25maWd1cmUgc2NyaXB0IHdvdWxkIG92ZXJyaWRlIHRo ZSBMQ19BTEwgc2V0dGluZy4gTGlrZXdpc2UgZm9yDQogICAgICAgICAgIyBMQ19DVFlQRSwgd2hp Y2ggaXMgYWxzbyBzZXQgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgY29uZmlndXJlIHNjcmlwdC4N CiAgICAgICAgICAjIFRlc3QgZm9yIHRoZSB1c3VhbCBsb2NhbGUgbmFtZS4NCiAgICAgICAgICBp ZiAoTENfQUxMPWZyX0ZSIExDX1RJTUU9IExDX0NUWVBFPSAuL2NvbmZ0ZXN0OyBleGl0KSAyPi9k ZXYvbnVsbDsgdGhlbg0KICAgICAgICAgICAgZ3RfY3ZfbG9jYWxlX2ZyPWZyX0ZSDQogICAgICAg ICAgZWxzZQ0KICAgICAgICAgICAgIyBUZXN0IGZvciB0aGUgbG9jYWxlIG5hbWUgd2l0aCBleHBs aWNpdCBlbmNvZGluZyBzdWZmaXguDQogICAgICAgICAgICBpZiAoTENfQUxMPWZyX0ZSLklTTy04 ODU5LTEgTENfVElNRT0gTENfQ1RZUEU9IC4vY29uZnRlc3Q7IGV4aXQpIDI+L2Rldi9udWxsOyB0 aGVuDQogICAgICAgICAgICAgIGd0X2N2X2xvY2FsZV9mcj1mcl9GUi5JU08tODg1OS0xDQogICAg ICAgICAgICBlbHNlDQogICAgICAgICAgICAgICMgVGVzdCBmb3IgdGhlIEFJWCwgT1NGLzEsIEZy ZWVCU0QsIE5ldEJTRCwgT3BlbkJTRCBsb2NhbGUgbmFtZS4NCiAgICAgICAgICAgICAgaWYgKExD X0FMTD1mcl9GUi5JU084ODU5LTEgTENfVElNRT0gTENfQ1RZUEU9IC4vY29uZnRlc3Q7IGV4aXQp IDI+L2Rldi9udWxsOyB0aGVuDQogICAgICAgICAgICAgICAgZ3RfY3ZfbG9jYWxlX2ZyPWZyX0ZS LklTTzg4NTktMQ0KICAgICAgICAgICAgICBlbHNlDQogICAgICAgICAgICAgICAgIyBUZXN0IGZv ciB0aGUgSFAtVVggbG9jYWxlIG5hbWUuDQogICAgICAgICAgICAgICAgaWYgKExDX0FMTD1mcl9G Ui5pc284ODU5MSBMQ19USU1FPSBMQ19DVFlQRT0gLi9jb25mdGVzdDsgZXhpdCkgMj4vZGV2L251 bGw7IHRoZW4NCiAgICAgICAgICAgICAgICAgIGd0X2N2X2xvY2FsZV9mcj1mcl9GUi5pc284ODU5 MQ0KICAgICAgICAgICAgICAgIGVsc2UNCiAgICAgICAgICAgICAgICAgICMgVGVzdCBmb3IgdGhl IFNvbGFyaXMgNyBsb2NhbGUgbmFtZS4NCiAgICAgICAgICAgICAgICAgIGlmIChMQ19BTEw9ZnIg TENfVElNRT0gTENfQ1RZUEU9IC4vY29uZnRlc3Q7IGV4aXQpIDI+L2Rldi9udWxsOyB0aGVuDQog ICAgICAgICAgICAgICAgICAgIGd0X2N2X2xvY2FsZV9mcj1mcg0KICAgICAgICAgICAgICAgICAg ZWxzZQ0KICAgICAgICAgICAgICAgICAgICAjIE5vbmUgZm91bmQuDQogICAgICAgICAgICAgICAg ICAgIGd0X2N2X2xvY2FsZV9mcj1ub25lDQogICAgICAgICAgICAgICAgICBmaQ0KICAgICAgICAg ICAgICAgIGZpDQogICAgICAgICAgICAgIGZpDQogICAgICAgICAgICBmaQ0KICAgICAgICAgIGZp DQogICAgICAgICAgOzsNCiAgICAgIGVzYWMNCiAgICBmaQ0KICAgIHJtIC1mciBjb25mdGVzdCoN Cg0KZmkNCnsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAk Z3RfY3ZfbG9jYWxlX2ZyIiA+JjUNCiRhc19lY2hvICIkZ3RfY3ZfbG9jYWxlX2ZyIiA+JjY7IH0N CiAgTE9DQUxFX0ZSPSRndF9jdl9sb2NhbGVfZnINCg0KDQoNCg0KICB7ICRhc19lY2hvICIkYXNf bWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBhIGZyZW5jaCBVbmljb2RlIGxv Y2FsZSIgPiY1DQokYXNfZWNob19uICJjaGVja2luZyBmb3IgYSBmcmVuY2ggVW5pY29kZSBsb2Nh bGUuLi4gIiA+JjY7IH0NCmlmICR7Z3RfY3ZfbG9jYWxlX2ZyX3V0ZjgrOn0gZmFsc2U7IHRoZW4g Og0KICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNg0KZWxzZQ0KDQogICAgY2F0IGNvbmZkZWZz LmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dA0KLyogZW5kIGNvbmZkZWZzLmguICAqLw0K DQojaW5jbHVkZSA8bG9jYWxlLmg+DQojaW5jbHVkZSA8dGltZS5oPg0KI2lmIEhBVkVfTEFOR0lO Rk9fQ09ERVNFVA0KIyBpbmNsdWRlIDxsYW5naW5mby5oPg0KI2VuZGlmDQojaW5jbHVkZSA8c3Rk bGliLmg+DQojaW5jbHVkZSA8c3RyaW5nLmg+DQpzdHJ1Y3QgdG0gdDsNCmNoYXIgYnVmWzE2XTsN CmludCBtYWluICgpIHsNCiAgLyogT24gQmVPUyBhbmQgSGFpa3UsIGxvY2FsZXMgYXJlIG5vdCBp bXBsZW1lbnRlZCBpbiBsaWJjLiAgUmF0aGVyLCBsaWJpbnRsDQogICAgIGltaXRhdGVzIGxvY2Fs ZSBkZXBlbmRlbnQgYmVoYXZpb3VyIGJ5IGxvb2tpbmcgYXQgdGhlIGVudmlyb25tZW50DQogICAg IHZhcmlhYmxlcywgYW5kIGFsbCBsb2NhbGVzIHVzZSB0aGUgVVRGLTggZW5jb2RpbmcuICAqLw0K I2lmICEoZGVmaW5lZCBfX0JFT1NfXyB8fCBkZWZpbmVkIF9fSEFJS1VfXykNCiAgLyogQ2hlY2sg d2hldGhlciB0aGUgZ2l2ZW4gbG9jYWxlIG5hbWUgaXMgcmVjb2duaXplZCBieSB0aGUgc3lzdGVt LiAgKi8NCiMgaWYgKGRlZmluZWQgX1dJTjMyIHx8IGRlZmluZWQgX19XSU4zMl9fKSAmJiAhZGVm aW5lZCBfX0NZR1dJTl9fDQogIC8qIE9uIG5hdGl2ZSBXaW4zMiwgc2V0bG9jYWxlKGNhdGVnb3J5 LCAiIikgbG9va3MgYXQgdGhlIHN5c3RlbSBzZXR0aW5ncywNCiAgICAgbm90IGF0IHRoZSBlbnZp cm9ubWVudCB2YXJpYWJsZXMuICBBbHNvLCB3aGVuIGFuIGVuY29kaW5nIHN1ZmZpeCBzdWNoDQog ICAgIGFzICIuNjUwMDEiIG9yICIuNTQ5MzYiIGlzIHNwZWZpY2llZCwgaXQgc3VjY2VlZHMgYnV0 IHNldHMgdGhlIExDX0NUWVBFDQogICAgIGNhdGVnb3J5IG9mIHRoZSBsb2NhbGUgdG8gIkMiLiAg Ki8NCiAgaWYgKHNldGxvY2FsZSAoTENfQUxMLCBnZXRlbnYgKCJMQ19BTEwiKSkgPT0gTlVMTA0K ICAgICAgfHwgc3RyY21wIChzZXRsb2NhbGUgKExDX0NUWVBFLCBOVUxMKSwgIkMiKSA9PSAwKQ0K ICAgIHJldHVybiAxOw0KIyBlbHNlDQogIGlmIChzZXRsb2NhbGUgKExDX0FMTCwgIiIpID09IE5V TEwpIHJldHVybiAxOw0KIyBlbmRpZg0KICAvKiBDaGVjayB3aGV0aGVyIG5sX2xhbmdpbmZvKENP REVTRVQpIGlzIG5vbmVtcHR5IGFuZCBub3QgIkFTQ0lJIiBvciAiNjQ2Ii4NCiAgICAgT24gTWFj T1MgWCAxMC4zLjUgKERhcndpbiA3LjUpIGluIHRoZSBmcl9GUiBsb2NhbGUsIG5sX2xhbmdpbmZv KENPREVTRVQpDQogICAgIGlzIGVtcHR5LCBhbmQgdGhlIGJlaGF2aW91ciBvZiBUY2wgOC40IGlu IHRoaXMgbG9jYWxlIGlzIG5vdCB1c2VmdWwuDQogICAgIE9uIE9wZW5CU0QgNC4wLCB3aGVuIGFu IHVuc3VwcG9ydGVkIGxvY2FsZSBpcyBzcGVjaWZpZWQsIHNldGxvY2FsZSgpDQogICAgIHN1Y2Nl ZWRzIGJ1dCB0aGVuIG5sX2xhbmdpbmZvKENPREVTRVQpIGlzICI2NDYiLiBJbiB0aGlzIHNpdHVh dGlvbiwNCiAgICAgc29tZSB1bml0IHRlc3RzIGZhaWwuICAqLw0KIyBpZiBIQVZFX0xBTkdJTkZP X0NPREVTRVQNCiAgew0KICAgIGNvbnN0IGNoYXIgKmNzID0gbmxfbGFuZ2luZm8gKENPREVTRVQp Ow0KICAgIGlmIChjc1swXSA9PSAnXDAnIHx8IHN0cmNtcCAoY3MsICJBU0NJSSIpID09IDAgfHwg c3RyY21wIChjcywgIjY0NiIpID09IDApDQogICAgICByZXR1cm4gMTsNCiAgfQ0KIyBlbmRpZg0K IyBpZmRlZiBfX0NZR1dJTl9fDQogIC8qIE9uIEN5Z3dpbiwgYXZvaWQgbG9jYWxlIG5hbWVzIHdp dGhvdXQgZW5jb2Rpbmcgc3VmZml4LCBiZWNhdXNlIHRoZQ0KICAgICBsb2NhbGVfY2hhcnNldCgp IGZ1bmN0aW9uIHJlbGllcyBvbiB0aGUgZW5jb2Rpbmcgc3VmZml4LiAgTm90ZSB0aGF0DQogICAg IExDX0FMTCBpcyBzZXQgb24gdGhlIGNvbW1hbmQgbGluZS4gICovDQogIGlmIChzdHJjaHIgKGdl dGVudiAoIkxDX0FMTCIpLCAnLicpID09IE5VTEwpIHJldHVybiAxOw0KIyBlbmRpZg0KICAvKiBD aGVjayB3aGV0aGVyIGluIHRoZSBhYmJyZXZpYXRpb24gb2YgdGhlIHNlY29uZCBtb250aCwgdGhl IHNlY29uZA0KICAgICBjaGFyYWN0ZXIgKHNob3VsZCBiZSBVKzAwRTk6IExBVElOIFNNQUxMIExF VFRFUiBFIFdJVEggQUNVVEUpIGlzDQogICAgIHR3byBieXRlcyBsb25nLCB3aXRoIFVURi04IGVu Y29kaW5nLiAgKi8NCiAgdC50bV95ZWFyID0gMTk3NSAtIDE5MDA7IHQudG1fbW9uID0gMiAtIDE7 IHQudG1fbWRheSA9IDQ7DQogIGlmIChzdHJmdGltZSAoYnVmLCBzaXplb2YgKGJ1ZiksICIlYiIs ICZ0KSA8IDQNCiAgICAgIHx8IGJ1ZlsxXSAhPSAoY2hhcikgMHhjMyB8fCBidWZbMl0gIT0gKGNo YXIpIDB4YTkgfHwgYnVmWzNdICE9ICd2JykNCiAgICByZXR1cm4gMTsNCiNlbmRpZg0KICAvKiBD aGVjayB3aGV0aGVyIHRoZSBkZWNpbWFsIHNlcGFyYXRvciBpcyBhIGNvbW1hLg0KICAgICBPbiBO ZXRCU0QgMy4wIGluIHRoZSBmcl9GUi5JU084ODU5LTEgbG9jYWxlLCBsb2NhbGVjb252KCktPmRl Y2ltYWxfcG9pbnQNCiAgICAgYXJlIG5sX2xhbmdpbmZvKFJBRElYQ0hBUikgYXJlIGJvdGggIi4i LiAgKi8NCiAgaWYgKGxvY2FsZWNvbnYgKCkgLT5kZWNpbWFsX3BvaW50WzBdICE9ICcsJykgcmV0 dXJuIDE7DQogIHJldHVybiAwOw0KfQ0KDQpfQUNFT0YNCiAgICBpZiB7IHsgZXZhbCBlY2hvICJc IlwkYXNfbWVcIjoke2FzX2xpbmVuby0kTElORU5PfTogXCIkYWNfbGlua1wiIjsgfSA+JjUNCiAg KGV2YWwgJGFjX2xpbmspIDI+JjUNCiAgYWNfc3RhdHVzPSQ/DQogICRhc19lY2hvICIkYXNfbWU6 JHthc19saW5lbm8tJExJTkVOT306IFwkPyA9ICRhY19zdGF0dXMiID4mNQ0KICB0ZXN0ICRhY19z dGF0dXMgPSAwOyB9ICYmIHRlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0OyB0aGVuDQogICAgICBj YXNlICIkaG9zdF9vcyIgaW4NCiAgICAgICAgIyBIYW5kbGUgbmF0aXZlIFdpbmRvd3Mgc3BlY2lh bGx5LCBiZWNhdXNlIHRoZXJlIHNldGxvY2FsZSgpIGludGVycHJldHMNCiAgICAgICAgIyAiYXIi IGFzICJBcmFiaWMiIG9yICJBcmFiaWNfU2F1ZGkgQXJhYmlhLjEyNTYiLA0KICAgICAgICAjICJm ciIgb3IgImZyYSIgYXMgIkZyZW5jaCIgb3IgIkZyZW5jaF9GcmFuY2UuMTI1MiIsDQogICAgICAg ICMgImdlIighKSBvciAiZGV1IighKSBhcyAiR2VybWFuIiBvciAiR2VybWFuX0dlcm1hbnkuMTI1 MiIsDQogICAgICAgICMgImphIiBhcyAiSmFwYW5lc2UiIG9yICJKYXBhbmVzZV9KYXBhbi45MzIi LA0KICAgICAgICAjIGFuZCBzaW1pbGFyLg0KICAgICAgICBtaW5ndyopDQogICAgICAgICAgIyBU ZXN0IGZvciB0aGUgaHlwb3RoZXRpY2FsIG5hdGl2ZSBXaW4zMiBsb2NhbGUgbmFtZS4NCiAgICAg ICAgICBpZiAoTENfQUxMPUZyZW5jaF9GcmFuY2UuNjUwMDEgTENfVElNRT0gTENfQ1RZUEU9IC4v Y29uZnRlc3Q7IGV4aXQpIDI+L2Rldi9udWxsOyB0aGVuDQogICAgICAgICAgICBndF9jdl9sb2Nh bGVfZnJfdXRmOD1GcmVuY2hfRnJhbmNlLjY1MDAxDQogICAgICAgICAgZWxzZQ0KICAgICAgICAg ICAgIyBOb25lIGZvdW5kLg0KICAgICAgICAgICAgZ3RfY3ZfbG9jYWxlX2ZyX3V0Zjg9bm9uZQ0K ICAgICAgICAgIGZpDQogICAgICAgICAgOzsNCiAgICAgICAgKikNCiAgICAgICAgICAjIFNldHRp bmcgTENfQUxMIGlzIG5vdCBlbm91Z2guIE5lZWQgdG8gc2V0IExDX1RJTUUgdG8gZW1wdHksIGJl Y2F1c2UNCiAgICAgICAgICAjIG90aGVyd2lzZSBvbiBNYWNPUyBYIDEwLjMuNSB0aGUgTENfVElN RT1DIGZyb20gdGhlIGJlZ2lubmluZyBvZiB0aGUNCiAgICAgICAgICAjIGNvbmZpZ3VyZSBzY3Jp cHQgd291bGQgb3ZlcnJpZGUgdGhlIExDX0FMTCBzZXR0aW5nLiBMaWtld2lzZSBmb3INCiAgICAg ICAgICAjIExDX0NUWVBFLCB3aGljaCBpcyBhbHNvIHNldCBhdCB0aGUgYmVnaW5uaW5nIG9mIHRo ZSBjb25maWd1cmUgc2NyaXB0Lg0KICAgICAgICAgICMgVGVzdCBmb3IgdGhlIHVzdWFsIGxvY2Fs ZSBuYW1lLg0KICAgICAgICAgIGlmIChMQ19BTEw9ZnJfRlIgTENfVElNRT0gTENfQ1RZUEU9IC4v Y29uZnRlc3Q7IGV4aXQpIDI+L2Rldi9udWxsOyB0aGVuDQogICAgICAgICAgICBndF9jdl9sb2Nh bGVfZnJfdXRmOD1mcl9GUg0KICAgICAgICAgIGVsc2UNCiAgICAgICAgICAgICMgVGVzdCBmb3Ig dGhlIGxvY2FsZSBuYW1lIHdpdGggZXhwbGljaXQgZW5jb2Rpbmcgc3VmZml4Lg0KICAgICAgICAg ICAgaWYgKExDX0FMTD1mcl9GUi5VVEYtOCBMQ19USU1FPSBMQ19DVFlQRT0gLi9jb25mdGVzdDsg ZXhpdCkgMj4vZGV2L251bGw7IHRoZW4NCiAgICAgICAgICAgICAgZ3RfY3ZfbG9jYWxlX2ZyX3V0 Zjg9ZnJfRlIuVVRGLTgNCiAgICAgICAgICAgIGVsc2UNCiAgICAgICAgICAgICAgIyBUZXN0IGZv ciB0aGUgU29sYXJpcyA3IGxvY2FsZSBuYW1lLg0KICAgICAgICAgICAgICBpZiAoTENfQUxMPWZy LlVURi04IExDX1RJTUU9IExDX0NUWVBFPSAuL2NvbmZ0ZXN0OyBleGl0KSAyPi9kZXYvbnVsbDsg dGhlbg0KICAgICAgICAgICAgICAgIGd0X2N2X2xvY2FsZV9mcl91dGY4PWZyLlVURi04DQogICAg ICAgICAgICAgIGVsc2UNCiAgICAgICAgICAgICAgICAjIE5vbmUgZm91bmQuDQogICAgICAgICAg ICAgICAgZ3RfY3ZfbG9jYWxlX2ZyX3V0Zjg9bm9uZQ0KICAgICAgICAgICAgICBmaQ0KICAgICAg ICAgICAgZmkNCiAgICAgICAgICBmaQ0KICAgICAgICAgIDs7DQogICAgICBlc2FjDQogICAgZmkN CiAgICBybSAtZnIgY29uZnRlc3QqDQoNCmZpDQp7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5l bm8tJExJTkVOT306IHJlc3VsdDogJGd0X2N2X2xvY2FsZV9mcl91dGY4IiA+JjUNCiRhc19lY2hv ICIkZ3RfY3ZfbG9jYWxlX2ZyX3V0ZjgiID4mNjsgfQ0KICBMT0NBTEVfRlJfVVRGOD0kZ3RfY3Zf bG9jYWxlX2ZyX3V0ZjgNCg0KDQoNCg0KDQogIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVu by0kTElORU5PfTogY2hlY2tpbmcgZm9yIGEgdHJhZGl0aW9uYWwgamFwYW5lc2UgbG9jYWxlIiA+ JjUNCiRhc19lY2hvX24gImNoZWNraW5nIGZvciBhIHRyYWRpdGlvbmFsIGphcGFuZXNlIGxvY2Fs ZS4uLiAiID4mNjsgfQ0KaWYgJHtndF9jdl9sb2NhbGVfamErOn0gZmFsc2U7IHRoZW4gOg0KICAk YXNfZWNob19uICIoY2FjaGVkKSAiID4mNg0KZWxzZQ0KDQogICAgY2F0IGNvbmZkZWZzLmggLSA8 PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dA0KLyogZW5kIGNvbmZkZWZzLmguICAqLw0KDQojaW5j bHVkZSA8bG9jYWxlLmg+DQojaW5jbHVkZSA8dGltZS5oPg0KI2lmIEhBVkVfTEFOR0lORk9fQ09E RVNFVA0KIyBpbmNsdWRlIDxsYW5naW5mby5oPg0KI2VuZGlmDQojaW5jbHVkZSA8c3RkbGliLmg+ DQojaW5jbHVkZSA8c3RyaW5nLmg+DQpzdHJ1Y3QgdG0gdDsNCmNoYXIgYnVmWzE2XTsNCmludCBt YWluICgpDQp7DQogIGNvbnN0IGNoYXIgKnA7DQogIC8qIENoZWNrIHdoZXRoZXIgdGhlIGdpdmVu IGxvY2FsZSBuYW1lIGlzIHJlY29nbml6ZWQgYnkgdGhlIHN5c3RlbS4gICovDQojaWYgKGRlZmlu ZWQgX1dJTjMyIHx8IGRlZmluZWQgX19XSU4zMl9fKSAmJiAhZGVmaW5lZCBfX0NZR1dJTl9fDQog IC8qIE9uIG5hdGl2ZSBXaW4zMiwgc2V0bG9jYWxlKGNhdGVnb3J5LCAiIikgbG9va3MgYXQgdGhl IHN5c3RlbSBzZXR0aW5ncywNCiAgICAgbm90IGF0IHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZXMu ICBBbHNvLCB3aGVuIGFuIGVuY29kaW5nIHN1ZmZpeCBzdWNoDQogICAgIGFzICIuNjUwMDEiIG9y ICIuNTQ5MzYiIGlzIHNwZWZpY2llZCwgaXQgc3VjY2VlZHMgYnV0IHNldHMgdGhlIExDX0NUWVBF DQogICAgIGNhdGVnb3J5IG9mIHRoZSBsb2NhbGUgdG8gIkMiLiAgKi8NCiAgaWYgKHNldGxvY2Fs ZSAoTENfQUxMLCBnZXRlbnYgKCJMQ19BTEwiKSkgPT0gTlVMTA0KICAgICAgfHwgc3RyY21wIChz ZXRsb2NhbGUgKExDX0NUWVBFLCBOVUxMKSwgIkMiKSA9PSAwKQ0KICAgIHJldHVybiAxOw0KI2Vs c2UNCiAgaWYgKHNldGxvY2FsZSAoTENfQUxMLCAiIikgPT0gTlVMTCkgcmV0dXJuIDE7DQojZW5k aWYNCiAgLyogQ2hlY2sgd2hldGhlciBubF9sYW5naW5mbyhDT0RFU0VUKSBpcyBub25lbXB0eSBh bmQgbm90ICJBU0NJSSIgb3IgIjY0NiIuDQogICAgIE9uIE1hY09TIFggMTAuMy41IChEYXJ3aW4g Ny41KSBpbiB0aGUgZnJfRlIgbG9jYWxlLCBubF9sYW5naW5mbyhDT0RFU0VUKQ0KICAgICBpcyBl bXB0eSwgYW5kIHRoZSBiZWhhdmlvdXIgb2YgVGNsIDguNCBpbiB0aGlzIGxvY2FsZSBpcyBub3Qg dXNlZnVsLg0KICAgICBPbiBPcGVuQlNEIDQuMCwgd2hlbiBhbiB1bnN1cHBvcnRlZCBsb2NhbGUg aXMgc3BlY2lmaWVkLCBzZXRsb2NhbGUoKQ0KICAgICBzdWNjZWVkcyBidXQgdGhlbiBubF9sYW5n aW5mbyhDT0RFU0VUKSBpcyAiNjQ2Ii4gSW4gdGhpcyBzaXR1YXRpb24sDQogICAgIHNvbWUgdW5p dCB0ZXN0cyBmYWlsLg0KICAgICBPbiBNaXJCU0QgMTAsIHdoZW4gYW4gdW5zdXBwb3J0ZWQgbG9j YWxlIGlzIHNwZWNpZmllZCwgc2V0bG9jYWxlKCkNCiAgICAgc3VjY2VlZHMgYnV0IHRoZW4gbmxf bGFuZ2luZm8oQ09ERVNFVCkgaXMgIlVURi04Ii4gICovDQojaWYgSEFWRV9MQU5HSU5GT19DT0RF U0VUDQogIHsNCiAgICBjb25zdCBjaGFyICpjcyA9IG5sX2xhbmdpbmZvIChDT0RFU0VUKTsNCiAg ICBpZiAoY3NbMF0gPT0gJ1wwJyB8fCBzdHJjbXAgKGNzLCAiQVNDSUkiKSA9PSAwIHx8IHN0cmNt cCAoY3MsICI2NDYiKSA9PSAwDQogICAgICAgIHx8IHN0cmNtcCAoY3MsICJVVEYtOCIpID09IDAp DQogICAgICByZXR1cm4gMTsNCiAgfQ0KI2VuZGlmDQojaWZkZWYgX19DWUdXSU5fXw0KICAvKiBP biBDeWd3aW4sIGF2b2lkIGxvY2FsZSBuYW1lcyB3aXRob3V0IGVuY29kaW5nIHN1ZmZpeCwgYmVj YXVzZSB0aGUNCiAgICAgbG9jYWxlX2NoYXJzZXQoKSBmdW5jdGlvbiByZWxpZXMgb24gdGhlIGVu Y29kaW5nIHN1ZmZpeC4gIE5vdGUgdGhhdA0KICAgICBMQ19BTEwgaXMgc2V0IG9uIHRoZSBjb21t YW5kIGxpbmUuICAqLw0KICBpZiAoc3RyY2hyIChnZXRlbnYgKCJMQ19BTEwiKSwgJy4nKSA9PSBO VUxMKSByZXR1cm4gMTsNCiNlbmRpZg0KICAvKiBDaGVjayB3aGV0aGVyIE1CX0NVUl9NQVggaXMg PiAxLiAgVGhpcyBleGNsdWRlcyB0aGUgZHlzZnVuY3Rpb25hbCBsb2NhbGVzDQogICAgIG9uIEN5 Z3dpbiAxLjUueC4gICovDQogIGlmIChNQl9DVVJfTUFYID09IDEpDQogICAgcmV0dXJuIDE7DQog IC8qIENoZWNrIHdoZXRoZXIgaW4gYSBtb250aCBuYW1lLCBubyBieXRlIGluIHRoZSByYW5nZSAw eDgwLi4weDlGIG9jY3Vycy4NCiAgICAgVGhpcyBleGNsdWRlcyB0aGUgVVRGLTggZW5jb2Rpbmcg KGV4Y2VwdCBvbiBNaXJCU0QpLiAgKi8NCiAgdC50bV95ZWFyID0gMTk3NSAtIDE5MDA7IHQudG1f bW9uID0gMiAtIDE7IHQudG1fbWRheSA9IDQ7DQogIGlmIChzdHJmdGltZSAoYnVmLCBzaXplb2Yg KGJ1ZiksICIlQiIsICZ0KSA8IDIpIHJldHVybiAxOw0KICBmb3IgKHAgPSBidWY7ICpwICE9ICdc MCc7IHArKykNCiAgICBpZiAoKHVuc2lnbmVkIGNoYXIpICpwID49IDB4ODAgJiYgKHVuc2lnbmVk IGNoYXIpICpwIDwgMHhhMCkNCiAgICAgIHJldHVybiAxOw0KICByZXR1cm4gMDsNCn0NCg0KX0FD RU9GDQogICAgaWYgeyB7IGV2YWwgZWNobyAiXCJcJGFzX21lXCI6JHthc19saW5lbm8tJExJTkVO T306IFwiJGFjX2xpbmtcIiI7IH0gPiY1DQogIChldmFsICRhY19saW5rKSAyPiY1DQogIGFjX3N0 YXR1cz0kPw0KICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJD8gPSAk YWNfc3RhdHVzIiA+JjUNCiAgdGVzdCAkYWNfc3RhdHVzID0gMDsgfSAmJiB0ZXN0IC1zIGNvbmZ0 ZXN0JGFjX2V4ZWV4dDsgdGhlbg0KICAgICAgY2FzZSAiJGhvc3Rfb3MiIGluDQogICAgICAgICMg SGFuZGxlIG5hdGl2ZSBXaW5kb3dzIHNwZWNpYWxseSwgYmVjYXVzZSB0aGVyZSBzZXRsb2NhbGUo KSBpbnRlcnByZXRzDQogICAgICAgICMgImFyIiBhcyAiQXJhYmljIiBvciAiQXJhYmljX1NhdWRp IEFyYWJpYS4xMjU2IiwNCiAgICAgICAgIyAiZnIiIG9yICJmcmEiIGFzICJGcmVuY2giIG9yICJG cmVuY2hfRnJhbmNlLjEyNTIiLA0KICAgICAgICAjICJnZSIoISkgb3IgImRldSIoISkgYXMgIkdl cm1hbiIgb3IgIkdlcm1hbl9HZXJtYW55LjEyNTIiLA0KICAgICAgICAjICJqYSIgYXMgIkphcGFu ZXNlIiBvciAiSmFwYW5lc2VfSmFwYW4uOTMyIiwNCiAgICAgICAgIyBhbmQgc2ltaWxhci4NCiAg ICAgICAgbWluZ3cqKQ0KICAgICAgICAgICMgTm90ZSB0aGF0IG9uIG5hdGl2ZSBXaW4zMiwgdGhl IEphcGFuZXNlIGxvY2FsZSBpcyBKYXBhbmVzZV9KYXBhbi45MzIsDQogICAgICAgICAgIyBhbmQg Q1A5MzIgaXMgdmVyeSBkaWZmZXJlbnQgZnJvbSBFVUMtSlAsIHNvIHdlIGNhbm5vdCB1c2UgaXQg aGVyZS4NCiAgICAgICAgICBndF9jdl9sb2NhbGVfamE9bm9uZQ0KICAgICAgICAgIDs7DQogICAg ICAgICopDQogICAgICAgICAgIyBTZXR0aW5nIExDX0FMTCBpcyBub3QgZW5vdWdoLiBOZWVkIHRv IHNldCBMQ19USU1FIHRvIGVtcHR5LCBiZWNhdXNlDQogICAgICAgICAgIyBvdGhlcndpc2Ugb24g TWFjT1MgWCAxMC4zLjUgdGhlIExDX1RJTUU9QyBmcm9tIHRoZSBiZWdpbm5pbmcgb2YgdGhlDQog ICAgICAgICAgIyBjb25maWd1cmUgc2NyaXB0IHdvdWxkIG92ZXJyaWRlIHRoZSBMQ19BTEwgc2V0 dGluZy4gTGlrZXdpc2UgZm9yDQogICAgICAgICAgIyBMQ19DVFlQRSwgd2hpY2ggaXMgYWxzbyBz ZXQgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgY29uZmlndXJlIHNjcmlwdC4NCiAgICAgICAgICAj IFRlc3QgZm9yIHRoZSBBSVggbG9jYWxlIG5hbWUuDQogICAgICAgICAgaWYgKExDX0FMTD1qYV9K UCBMQ19USU1FPSBMQ19DVFlQRT0gLi9jb25mdGVzdDsgZXhpdCkgMj4vZGV2L251bGw7IHRoZW4N CiAgICAgICAgICAgIGd0X2N2X2xvY2FsZV9qYT1qYV9KUA0KICAgICAgICAgIGVsc2UNCiAgICAg ICAgICAgICMgVGVzdCBmb3IgdGhlIGxvY2FsZSBuYW1lIHdpdGggZXhwbGljaXQgZW5jb2Rpbmcg c3VmZml4Lg0KICAgICAgICAgICAgaWYgKExDX0FMTD1qYV9KUC5FVUMtSlAgTENfVElNRT0gTENf Q1RZUEU9IC4vY29uZnRlc3Q7IGV4aXQpIDI+L2Rldi9udWxsOyB0aGVuDQogICAgICAgICAgICAg IGd0X2N2X2xvY2FsZV9qYT1qYV9KUC5FVUMtSlANCiAgICAgICAgICAgIGVsc2UNCiAgICAgICAg ICAgICAgIyBUZXN0IGZvciB0aGUgSFAtVVgsIE9TRi8xLCBOZXRCU0QgbG9jYWxlIG5hbWUuDQog ICAgICAgICAgICAgIGlmIChMQ19BTEw9amFfSlAuZXVjSlAgTENfVElNRT0gTENfQ1RZUEU9IC4v Y29uZnRlc3Q7IGV4aXQpIDI+L2Rldi9udWxsOyB0aGVuDQogICAgICAgICAgICAgICAgZ3RfY3Zf bG9jYWxlX2phPWphX0pQLmV1Y0pQDQogICAgICAgICAgICAgIGVsc2UNCiAgICAgICAgICAgICAg ICAjIFRlc3QgZm9yIHRoZSBJUklYLCBGcmVlQlNEIGxvY2FsZSBuYW1lLg0KICAgICAgICAgICAg ICAgIGlmIChMQ19BTEw9amFfSlAuRVVDIExDX1RJTUU9IExDX0NUWVBFPSAuL2NvbmZ0ZXN0OyBl eGl0KSAyPi9kZXYvbnVsbDsgdGhlbg0KICAgICAgICAgICAgICAgICAgZ3RfY3ZfbG9jYWxlX2ph PWphX0pQLkVVQw0KICAgICAgICAgICAgICAgIGVsc2UNCiAgICAgICAgICAgICAgICAgICMgVGVz dCBmb3IgdGhlIFNvbGFyaXMgNyBsb2NhbGUgbmFtZS4NCiAgICAgICAgICAgICAgICAgIGlmIChM Q19BTEw9amEgTENfVElNRT0gTENfQ1RZUEU9IC4vY29uZnRlc3Q7IGV4aXQpIDI+L2Rldi9udWxs OyB0aGVuDQogICAgICAgICAgICAgICAgICAgIGd0X2N2X2xvY2FsZV9qYT1qYQ0KICAgICAgICAg ICAgICAgICAgZWxzZQ0KICAgICAgICAgICAgICAgICAgICAjIFNwZWNpYWwgdGVzdCBmb3IgTmV0 QlNEIDEuNi4NCiAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAtZiAvdXNyL3NoYXJlL2xvY2Fs ZS9qYV9KUC5ldWNKUC9MQ19DVFlQRTsgdGhlbg0KICAgICAgICAgICAgICAgICAgICAgIGd0X2N2 X2xvY2FsZV9qYT1qYV9KUC5ldWNKUA0KICAgICAgICAgICAgICAgICAgICBlbHNlDQogICAgICAg ICAgICAgICAgICAgICAgIyBOb25lIGZvdW5kLg0KICAgICAgICAgICAgICAgICAgICAgIGd0X2N2 X2xvY2FsZV9qYT1ub25lDQogICAgICAgICAgICAgICAgICAgIGZpDQogICAgICAgICAgICAgICAg ICBmaQ0KICAgICAgICAgICAgICAgIGZpDQogICAgICAgICAgICAgIGZpDQogICAgICAgICAgICBm aQ0KICAgICAgICAgIGZpDQogICAgICAgICAgOzsNCiAgICAgIGVzYWMNCiAgICBmaQ0KICAgIHJt IC1mciBjb25mdGVzdCoNCg0KZmkNCnsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElO RU5PfTogcmVzdWx0OiAkZ3RfY3ZfbG9jYWxlX2phIiA+JjUNCiRhc19lY2hvICIkZ3RfY3ZfbG9j YWxlX2phIiA+JjY7IH0NCiAgTE9DQUxFX0pBPSRndF9jdl9sb2NhbGVfamENCg0KDQoNCg0KDQog IHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIGEg dHJhbnNpdGlvbmFsIGNoaW5lc2UgbG9jYWxlIiA+JjUNCiRhc19lY2hvX24gImNoZWNraW5nIGZv ciBhIHRyYW5zaXRpb25hbCBjaGluZXNlIGxvY2FsZS4uLiAiID4mNjsgfQ0KaWYgJHtndF9jdl9s b2NhbGVfemhfQ04rOn0gZmFsc2U7IHRoZW4gOg0KICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4m Ng0KZWxzZQ0KDQogICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4 dA0KLyogZW5kIGNvbmZkZWZzLmguICAqLw0KDQojaW5jbHVkZSA8bG9jYWxlLmg+DQojaW5jbHVk ZSA8c3RkbGliLmg+DQojaW5jbHVkZSA8dGltZS5oPg0KI2lmIEhBVkVfTEFOR0lORk9fQ09ERVNF VA0KIyBpbmNsdWRlIDxsYW5naW5mby5oPg0KI2VuZGlmDQojaW5jbHVkZSA8c3RkbGliLmg+DQoj aW5jbHVkZSA8c3RyaW5nLmg+DQpzdHJ1Y3QgdG0gdDsNCmNoYXIgYnVmWzE2XTsNCmludCBtYWlu ICgpDQp7DQogIGNvbnN0IGNoYXIgKnA7DQogIC8qIENoZWNrIHdoZXRoZXIgdGhlIGdpdmVuIGxv Y2FsZSBuYW1lIGlzIHJlY29nbml6ZWQgYnkgdGhlIHN5c3RlbS4gICovDQojaWYgKGRlZmluZWQg X1dJTjMyIHx8IGRlZmluZWQgX19XSU4zMl9fKSAmJiAhZGVmaW5lZCBfX0NZR1dJTl9fDQogIC8q IE9uIG5hdGl2ZSBXaW4zMiwgc2V0bG9jYWxlKGNhdGVnb3J5LCAiIikgbG9va3MgYXQgdGhlIHN5 c3RlbSBzZXR0aW5ncywNCiAgICAgbm90IGF0IHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZXMuICBB bHNvLCB3aGVuIGFuIGVuY29kaW5nIHN1ZmZpeCBzdWNoDQogICAgIGFzICIuNjUwMDEiIG9yICIu NTQ5MzYiIGlzIHNwZWZpY2llZCwgaXQgc3VjY2VlZHMgYnV0IHNldHMgdGhlIExDX0NUWVBFDQog ICAgIGNhdGVnb3J5IG9mIHRoZSBsb2NhbGUgdG8gIkMiLiAgKi8NCiAgaWYgKHNldGxvY2FsZSAo TENfQUxMLCBnZXRlbnYgKCJMQ19BTEwiKSkgPT0gTlVMTA0KICAgICAgfHwgc3RyY21wIChzZXRs b2NhbGUgKExDX0NUWVBFLCBOVUxMKSwgIkMiKSA9PSAwKQ0KICAgIHJldHVybiAxOw0KI2Vsc2UN CiAgaWYgKHNldGxvY2FsZSAoTENfQUxMLCAiIikgPT0gTlVMTCkgcmV0dXJuIDE7DQojZW5kaWYN CiAgLyogQ2hlY2sgd2hldGhlciBubF9sYW5naW5mbyhDT0RFU0VUKSBpcyBub25lbXB0eSBhbmQg bm90ICJBU0NJSSIgb3IgIjY0NiIuDQogICAgIE9uIE1hY09TIFggMTAuMy41IChEYXJ3aW4gNy41 KSBpbiB0aGUgZnJfRlIgbG9jYWxlLCBubF9sYW5naW5mbyhDT0RFU0VUKQ0KICAgICBpcyBlbXB0 eSwgYW5kIHRoZSBiZWhhdmlvdXIgb2YgVGNsIDguNCBpbiB0aGlzIGxvY2FsZSBpcyBub3QgdXNl ZnVsLg0KICAgICBPbiBPcGVuQlNEIDQuMCwgd2hlbiBhbiB1bnN1cHBvcnRlZCBsb2NhbGUgaXMg c3BlY2lmaWVkLCBzZXRsb2NhbGUoKQ0KICAgICBzdWNjZWVkcyBidXQgdGhlbiBubF9sYW5naW5m byhDT0RFU0VUKSBpcyAiNjQ2Ii4gSW4gdGhpcyBzaXR1YXRpb24sDQogICAgIHNvbWUgdW5pdCB0 ZXN0cyBmYWlsLg0KICAgICBPbiBNaXJCU0QgMTAsIHdoZW4gYW4gdW5zdXBwb3J0ZWQgbG9jYWxl IGlzIHNwZWNpZmllZCwgc2V0bG9jYWxlKCkNCiAgICAgc3VjY2VlZHMgYnV0IHRoZW4gbmxfbGFu Z2luZm8oQ09ERVNFVCkgaXMgIlVURi04Ii4gICovDQojaWYgSEFWRV9MQU5HSU5GT19DT0RFU0VU DQogIHsNCiAgICBjb25zdCBjaGFyICpjcyA9IG5sX2xhbmdpbmZvIChDT0RFU0VUKTsNCiAgICBp ZiAoY3NbMF0gPT0gJ1wwJyB8fCBzdHJjbXAgKGNzLCAiQVNDSUkiKSA9PSAwIHx8IHN0cmNtcCAo Y3MsICI2NDYiKSA9PSAwDQogICAgICAgIHx8IHN0cmNtcCAoY3MsICJVVEYtOCIpID09IDApDQog ICAgICByZXR1cm4gMTsNCiAgfQ0KI2VuZGlmDQojaWZkZWYgX19DWUdXSU5fXw0KICAvKiBPbiBD eWd3aW4sIGF2b2lkIGxvY2FsZSBuYW1lcyB3aXRob3V0IGVuY29kaW5nIHN1ZmZpeCwgYmVjYXVz ZSB0aGUNCiAgICAgbG9jYWxlX2NoYXJzZXQoKSBmdW5jdGlvbiByZWxpZXMgb24gdGhlIGVuY29k aW5nIHN1ZmZpeC4gIE5vdGUgdGhhdA0KICAgICBMQ19BTEwgaXMgc2V0IG9uIHRoZSBjb21tYW5k IGxpbmUuICAqLw0KICBpZiAoc3RyY2hyIChnZXRlbnYgKCJMQ19BTEwiKSwgJy4nKSA9PSBOVUxM KSByZXR1cm4gMTsNCiNlbmRpZg0KICAvKiBDaGVjayB3aGV0aGVyIGluIGEgbW9udGggbmFtZSwg bm8gYnl0ZSBpbiB0aGUgcmFuZ2UgMHg4MC4uMHg5RiBvY2N1cnMuDQogICAgIFRoaXMgZXhjbHVk ZXMgdGhlIFVURi04IGVuY29kaW5nIChleGNlcHQgb24gTWlyQlNEKS4gICovDQogIHQudG1feWVh ciA9IDE5NzUgLSAxOTAwOyB0LnRtX21vbiA9IDIgLSAxOyB0LnRtX21kYXkgPSA0Ow0KICBpZiAo c3RyZnRpbWUgKGJ1Ziwgc2l6ZW9mIChidWYpLCAiJUIiLCAmdCkgPCAyKSByZXR1cm4gMTsNCiAg Zm9yIChwID0gYnVmOyAqcCAhPSAnXDAnOyBwKyspDQogICAgaWYgKCh1bnNpZ25lZCBjaGFyKSAq cCA+PSAweDgwICYmICh1bnNpZ25lZCBjaGFyKSAqcCA8IDB4YTApDQogICAgICByZXR1cm4gMTsN CiAgLyogQ2hlY2sgd2hldGhlciBhIHR5cGljYWwgR0IxODAzMCBtdWx0aWJ5dGUgc2VxdWVuY2Ug aXMgcmVjb2duaXplZCBhcyBhDQogICAgIHNpbmdsZSB3aWRlIGNoYXJhY3Rlci4gIFRoaXMgZXhj bHVkZXMgdGhlIEdCMjMxMiBhbmQgR0JLIGVuY29kaW5ncy4gICovDQogIGlmIChtYmxlbiAoIlwy MDNcMDYyXDMzMlwwNjYiLCA1KSAhPSA0KQ0KICAgIHJldHVybiAxOw0KICByZXR1cm4gMDsNCn0N Cg0KX0FDRU9GDQogICAgaWYgeyB7IGV2YWwgZWNobyAiXCJcJGFzX21lXCI6JHthc19saW5lbm8t JExJTkVOT306IFwiJGFjX2xpbmtcIiI7IH0gPiY1DQogIChldmFsICRhY19saW5rKSAyPiY1DQog IGFjX3N0YXR1cz0kPw0KICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBc JD8gPSAkYWNfc3RhdHVzIiA+JjUNCiAgdGVzdCAkYWNfc3RhdHVzID0gMDsgfSAmJiB0ZXN0IC1z IGNvbmZ0ZXN0JGFjX2V4ZWV4dDsgdGhlbg0KICAgICAgY2FzZSAiJGhvc3Rfb3MiIGluDQogICAg ICAgICMgSGFuZGxlIG5hdGl2ZSBXaW5kb3dzIHNwZWNpYWxseSwgYmVjYXVzZSB0aGVyZSBzZXRs b2NhbGUoKSBpbnRlcnByZXRzDQogICAgICAgICMgImFyIiBhcyAiQXJhYmljIiBvciAiQXJhYmlj X1NhdWRpIEFyYWJpYS4xMjU2IiwNCiAgICAgICAgIyAiZnIiIG9yICJmcmEiIGFzICJGcmVuY2gi IG9yICJGcmVuY2hfRnJhbmNlLjEyNTIiLA0KICAgICAgICAjICJnZSIoISkgb3IgImRldSIoISkg YXMgIkdlcm1hbiIgb3IgIkdlcm1hbl9HZXJtYW55LjEyNTIiLA0KICAgICAgICAjICJqYSIgYXMg IkphcGFuZXNlIiBvciAiSmFwYW5lc2VfSmFwYW4uOTMyIiwNCiAgICAgICAgIyBhbmQgc2ltaWxh ci4NCiAgICAgICAgbWluZ3cqKQ0KICAgICAgICAgICMgVGVzdCBmb3IgdGhlIGh5cG90aGV0aWNh bCBuYXRpdmUgV2luMzIgbG9jYWxlIG5hbWUuDQogICAgICAgICAgaWYgKExDX0FMTD1DaGluZXNl X0NoaW5hLjU0OTM2IExDX1RJTUU9IExDX0NUWVBFPSAuL2NvbmZ0ZXN0OyBleGl0KSAyPi9kZXYv bnVsbDsgdGhlbg0KICAgICAgICAgICAgZ3RfY3ZfbG9jYWxlX3poX0NOPUNoaW5lc2VfQ2hpbmEu NTQ5MzYNCiAgICAgICAgICBlbHNlDQogICAgICAgICAgICAjIE5vbmUgZm91bmQuDQogICAgICAg ICAgICBndF9jdl9sb2NhbGVfemhfQ049bm9uZQ0KICAgICAgICAgIGZpDQogICAgICAgICAgOzsN CiAgICAgICAgKikNCiAgICAgICAgICAjIFNldHRpbmcgTENfQUxMIGlzIG5vdCBlbm91Z2guIE5l ZWQgdG8gc2V0IExDX1RJTUUgdG8gZW1wdHksIGJlY2F1c2UNCiAgICAgICAgICAjIG90aGVyd2lz ZSBvbiBNYWNPUyBYIDEwLjMuNSB0aGUgTENfVElNRT1DIGZyb20gdGhlIGJlZ2lubmluZyBvZiB0 aGUNCiAgICAgICAgICAjIGNvbmZpZ3VyZSBzY3JpcHQgd291bGQgb3ZlcnJpZGUgdGhlIExDX0FM TCBzZXR0aW5nLiBMaWtld2lzZSBmb3INCiAgICAgICAgICAjIExDX0NUWVBFLCB3aGljaCBpcyBh bHNvIHNldCBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBjb25maWd1cmUgc2NyaXB0Lg0KICAgICAg ICAgICMgVGVzdCBmb3IgdGhlIGxvY2FsZSBuYW1lIHdpdGhvdXQgZW5jb2Rpbmcgc3VmZml4Lg0K ICAgICAgICAgIGlmIChMQ19BTEw9emhfQ04gTENfVElNRT0gTENfQ1RZUEU9IC4vY29uZnRlc3Q7 IGV4aXQpIDI+L2Rldi9udWxsOyB0aGVuDQogICAgICAgICAgICBndF9jdl9sb2NhbGVfemhfQ049 emhfQ04NCiAgICAgICAgICBlbHNlDQogICAgICAgICAgICAjIFRlc3QgZm9yIHRoZSBsb2NhbGUg bmFtZSB3aXRoIGV4cGxpY2l0IGVuY29kaW5nIHN1ZmZpeC4NCiAgICAgICAgICAgIGlmIChMQ19B TEw9emhfQ04uR0IxODAzMCBMQ19USU1FPSBMQ19DVFlQRT0gLi9jb25mdGVzdDsgZXhpdCkgMj4v ZGV2L251bGw7IHRoZW4NCiAgICAgICAgICAgICAgZ3RfY3ZfbG9jYWxlX3poX0NOPXpoX0NOLkdC MTgwMzANCiAgICAgICAgICAgIGVsc2UNCiAgICAgICAgICAgICAgIyBOb25lIGZvdW5kLg0KICAg ICAgICAgICAgICBndF9jdl9sb2NhbGVfemhfQ049bm9uZQ0KICAgICAgICAgICAgZmkNCiAgICAg ICAgICBmaQ0KICAgICAgICAgIDs7DQogICAgICBlc2FjDQogICAgZWxzZQ0KICAgICAgIyBJZiB0 aGVyZSB3YXMgYSBsaW5rIGVycm9yLCBkdWUgdG8gbWJsZW4oKSwgdGhlIHN5c3RlbSBpcyBzbyBv bGQgdGhhdA0KICAgICAgIyBpdCBjZXJ0YWlubHkgZG9lc24ndCBoYXZlIGEgY2hpbmVzZSBsb2Nh bGUuDQogICAgICBndF9jdl9sb2NhbGVfemhfQ049bm9uZQ0KICAgIGZpDQogICAgcm0gLWZyIGNv bmZ0ZXN0Kg0KDQpmaQ0KeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBy ZXN1bHQ6ICRndF9jdl9sb2NhbGVfemhfQ04iID4mNQ0KJGFzX2VjaG8gIiRndF9jdl9sb2NhbGVf emhfQ04iID4mNjsgfQ0KICBMT0NBTEVfWkhfQ049JGd0X2N2X2xvY2FsZV96aF9DTg0KDQoNCg0K DQoNCiAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBm b3IgYSB0dXJraXNoIFVuaWNvZGUgbG9jYWxlIiA+JjUNCiRhc19lY2hvX24gImNoZWNraW5nIGZv ciBhIHR1cmtpc2ggVW5pY29kZSBsb2NhbGUuLi4gIiA+JjY7IH0NCmlmICR7Z3RfY3ZfbG9jYWxl X3RyX3V0ZjgrOn0gZmFsc2U7IHRoZW4gOg0KICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNg0K ZWxzZQ0KDQogICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dA0K LyogZW5kIGNvbmZkZWZzLmguICAqLw0KDQojaW5jbHVkZSA8bG9jYWxlLmg+DQojaW5jbHVkZSA8 dGltZS5oPg0KI2lmIEhBVkVfTEFOR0lORk9fQ09ERVNFVA0KIyBpbmNsdWRlIDxsYW5naW5mby5o Pg0KI2VuZGlmDQojaW5jbHVkZSA8c3RkbGliLmg+DQojaW5jbHVkZSA8c3RyaW5nLmg+DQpzdHJ1 Y3QgdG0gdDsNCmNoYXIgYnVmWzE2XTsNCmludCBtYWluICgpIHsNCiAgLyogT24gQmVPUywgbG9j YWxlcyBhcmUgbm90IGltcGxlbWVudGVkIGluIGxpYmMuICBSYXRoZXIsIGxpYmludGwNCiAgICAg aW1pdGF0ZXMgbG9jYWxlIGRlcGVuZGVudCBiZWhhdmlvdXIgYnkgbG9va2luZyBhdCB0aGUgZW52 aXJvbm1lbnQNCiAgICAgdmFyaWFibGVzLCBhbmQgYWxsIGxvY2FsZXMgdXNlIHRoZSBVVEYtOCBl bmNvZGluZy4gIEJ1dCBCZU9TIGRvZXMgbm90DQogICAgIGltcGxlbWVudCB0aGUgVHVya2lzaCB1 cHBlci0vbG93ZXJjYXNlIG1hcHBpbmdzLiAgVGhlcmVmb3JlLCBsZXQgdGhpcw0KICAgICBwcm9n cmFtIHJldHVybiAxIG9uIEJlT1MuICAqLw0KICAvKiBDaGVjayB3aGV0aGVyIHRoZSBnaXZlbiBs b2NhbGUgbmFtZSBpcyByZWNvZ25pemVkIGJ5IHRoZSBzeXN0ZW0uICAqLw0KI2lmIChkZWZpbmVk IF9XSU4zMiB8fCBkZWZpbmVkIF9fV0lOMzJfXykgJiYgIWRlZmluZWQgX19DWUdXSU5fXw0KICAv KiBPbiBuYXRpdmUgV2luMzIsIHNldGxvY2FsZShjYXRlZ29yeSwgIiIpIGxvb2tzIGF0IHRoZSBz eXN0ZW0gc2V0dGluZ3MsDQogICAgIG5vdCBhdCB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGVzLiAg QWxzbywgd2hlbiBhbiBlbmNvZGluZyBzdWZmaXggc3VjaA0KICAgICBhcyAiLjY1MDAxIiBvciAi LjU0OTM2IiBpcyBzcGVmaWNpZWQsIGl0IHN1Y2NlZWRzIGJ1dCBzZXRzIHRoZSBMQ19DVFlQRQ0K ICAgICBjYXRlZ29yeSBvZiB0aGUgbG9jYWxlIHRvICJDIi4gICovDQogIGlmIChzZXRsb2NhbGUg KExDX0FMTCwgZ2V0ZW52ICgiTENfQUxMIikpID09IE5VTEwNCiAgICAgIHx8IHN0cmNtcCAoc2V0 bG9jYWxlIChMQ19DVFlQRSwgTlVMTCksICJDIikgPT0gMCkNCiAgICByZXR1cm4gMTsNCiNlbHNl DQogIGlmIChzZXRsb2NhbGUgKExDX0FMTCwgIiIpID09IE5VTEwpIHJldHVybiAxOw0KI2VuZGlm DQogIC8qIENoZWNrIHdoZXRoZXIgbmxfbGFuZ2luZm8oQ09ERVNFVCkgaXMgbm9uZW1wdHkgYW5k IG5vdCAiQVNDSUkiIG9yICI2NDYiLg0KICAgICBPbiBNYWNPUyBYIDEwLjMuNSAoRGFyd2luIDcu NSkgaW4gdGhlIHRyX1RSIGxvY2FsZSwgbmxfbGFuZ2luZm8oQ09ERVNFVCkNCiAgICAgaXMgZW1w dHksIGFuZCB0aGUgYmVoYXZpb3VyIG9mIFRjbCA4LjQgaW4gdGhpcyBsb2NhbGUgaXMgbm90IHVz ZWZ1bC4NCiAgICAgT24gT3BlbkJTRCA0LjAsIHdoZW4gYW4gdW5zdXBwb3J0ZWQgbG9jYWxlIGlz IHNwZWNpZmllZCwgc2V0bG9jYWxlKCkNCiAgICAgc3VjY2VlZHMgYnV0IHRoZW4gbmxfbGFuZ2lu Zm8oQ09ERVNFVCkgaXMgIjY0NiIuIEluIHRoaXMgc2l0dWF0aW9uLA0KICAgICBzb21lIHVuaXQg dGVzdHMgZmFpbC4gICovDQojaWYgSEFWRV9MQU5HSU5GT19DT0RFU0VUDQogIHsNCiAgICBjb25z dCBjaGFyICpjcyA9IG5sX2xhbmdpbmZvIChDT0RFU0VUKTsNCiAgICBpZiAoY3NbMF0gPT0gJ1ww JyB8fCBzdHJjbXAgKGNzLCAiQVNDSUkiKSA9PSAwIHx8IHN0cmNtcCAoY3MsICI2NDYiKSA9PSAw KQ0KICAgICAgcmV0dXJuIDE7DQogIH0NCiNlbmRpZg0KI2lmZGVmIF9fQ1lHV0lOX18NCiAgLyog T24gQ3lnd2luLCBhdm9pZCBsb2NhbGUgbmFtZXMgd2l0aG91dCBlbmNvZGluZyBzdWZmaXgsIGJl Y2F1c2UgdGhlDQogICAgIGxvY2FsZV9jaGFyc2V0KCkgZnVuY3Rpb24gcmVsaWVzIG9uIHRoZSBl bmNvZGluZyBzdWZmaXguICBOb3RlIHRoYXQNCiAgICAgTENfQUxMIGlzIHNldCBvbiB0aGUgY29t bWFuZCBsaW5lLiAgKi8NCiAgaWYgKHN0cmNociAoZ2V0ZW52ICgiTENfQUxMIiksICcuJykgPT0g TlVMTCkgcmV0dXJuIDE7DQojZW5kaWYNCiAgLyogQ2hlY2sgd2hldGhlciBpbiB0aGUgYWJicmV2 aWF0aW9uIG9mIHRoZSBlaWdodGggbW9udGgsIHRoZSBzZWNvbmQNCiAgICAgY2hhcmFjdGVyIChz aG91bGQgYmUgVSswMTFGOiBMQVRJTiBTTUFMTCBMRVRURVIgRyBXSVRIIEJSRVZFKSBpcw0KICAg ICB0d28gYnl0ZXMgbG9uZywgd2l0aCBVVEYtOCBlbmNvZGluZy4gICovDQogIHQudG1feWVhciA9 IDE5OTIgLSAxOTAwOyB0LnRtX21vbiA9IDggLSAxOyB0LnRtX21kYXkgPSAxOTsNCiAgaWYgKHN0 cmZ0aW1lIChidWYsIHNpemVvZiAoYnVmKSwgIiViIiwgJnQpIDwgNA0KICAgICAgfHwgYnVmWzFd ICE9IChjaGFyKSAweGM0IHx8IGJ1ZlsyXSAhPSAoY2hhcikgMHg5ZikNCiAgICByZXR1cm4gMTsN CiAgLyogQ2hlY2sgd2hldGhlciB0aGUgdXBwZXItL2xvd2VyY2FzZSBtYXBwaW5ncyBhcmUgYXMg ZXhwZWN0ZWQgZm9yDQogICAgIFR1cmtpc2guICAqLw0KICBpZiAodG93dXBwZXIgKCdpJykgIT0g MHgwMTMwIHx8IHRvd2xvd2VyICgweDAxMzApICE9ICdpJw0KICAgICAgfHwgdG93dXBwZXIoMHgw MTMxKSAhPSAnSScgfHwgdG93bG93ZXIgKCdJJykgIT0gMHgwMTMxKQ0KICAgIHJldHVybiAxOw0K ICByZXR1cm4gMDsNCn0NCg0KX0FDRU9GDQogICAgaWYgeyB7IGV2YWwgZWNobyAiXCJcJGFzX21l XCI6JHthc19saW5lbm8tJExJTkVOT306IFwiJGFjX2xpbmtcIiI7IH0gPiY1DQogIChldmFsICRh Y19saW5rKSAyPiY1DQogIGFjX3N0YXR1cz0kPw0KICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGlu ZW5vLSRMSU5FTk99OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUNCiAgdGVzdCAkYWNfc3RhdHVzID0g MDsgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dDsgdGhlbg0KICAgICAgY2FzZSAiJGhv c3Rfb3MiIGluDQogICAgICAgICMgSGFuZGxlIG5hdGl2ZSBXaW5kb3dzIHNwZWNpYWxseSwgYmVj YXVzZSB0aGVyZSBzZXRsb2NhbGUoKSBpbnRlcnByZXRzDQogICAgICAgICMgImFyIiBhcyAiQXJh YmljIiBvciAiQXJhYmljX1NhdWRpIEFyYWJpYS4xMjU2IiwNCiAgICAgICAgIyAiZnIiIG9yICJm cmEiIGFzICJGcmVuY2giIG9yICJGcmVuY2hfRnJhbmNlLjEyNTIiLA0KICAgICAgICAjICJnZSIo ISkgb3IgImRldSIoISkgYXMgIkdlcm1hbiIgb3IgIkdlcm1hbl9HZXJtYW55LjEyNTIiLA0KICAg ICAgICAjICJqYSIgYXMgIkphcGFuZXNlIiBvciAiSmFwYW5lc2VfSmFwYW4uOTMyIiwNCiAgICAg ICAgIyBhbmQgc2ltaWxhci4NCiAgICAgICAgbWluZ3cqKQ0KICAgICAgICAgICMgVGVzdCBmb3Ig dGhlIGh5cG90aGV0aWNhbCBuYXRpdmUgV2luMzIgbG9jYWxlIG5hbWUuDQogICAgICAgICAgaWYg KExDX0FMTD1UdXJraXNoX1R1cmtleS42NTAwMSBMQ19USU1FPSBMQ19DVFlQRT0gLi9jb25mdGVz dDsgZXhpdCkgMj4vZGV2L251bGw7IHRoZW4NCiAgICAgICAgICAgIGd0X2N2X2xvY2FsZV90cl91 dGY4PVR1cmtpc2hfVHVya2V5LjY1MDAxDQogICAgICAgICAgZWxzZQ0KICAgICAgICAgICAgIyBO b25lIGZvdW5kLg0KICAgICAgICAgICAgZ3RfY3ZfbG9jYWxlX3RyX3V0Zjg9bm9uZQ0KICAgICAg ICAgIGZpDQogICAgICAgICAgOzsNCiAgICAgICAgKikNCiAgICAgICAgICAjIFNldHRpbmcgTENf QUxMIGlzIG5vdCBlbm91Z2guIE5lZWQgdG8gc2V0IExDX1RJTUUgdG8gZW1wdHksIGJlY2F1c2UN CiAgICAgICAgICAjIG90aGVyd2lzZSBvbiBNYWNPUyBYIDEwLjMuNSB0aGUgTENfVElNRT1DIGZy b20gdGhlIGJlZ2lubmluZyBvZiB0aGUNCiAgICAgICAgICAjIGNvbmZpZ3VyZSBzY3JpcHQgd291 bGQgb3ZlcnJpZGUgdGhlIExDX0FMTCBzZXR0aW5nLiBMaWtld2lzZSBmb3INCiAgICAgICAgICAj IExDX0NUWVBFLCB3aGljaCBpcyBhbHNvIHNldCBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBjb25m aWd1cmUgc2NyaXB0Lg0KICAgICAgICAgICMgVGVzdCBmb3IgdGhlIHVzdWFsIGxvY2FsZSBuYW1l Lg0KICAgICAgICAgIGlmIChMQ19BTEw9dHJfVFIgTENfVElNRT0gTENfQ1RZUEU9IC4vY29uZnRl c3Q7IGV4aXQpIDI+L2Rldi9udWxsOyB0aGVuDQogICAgICAgICAgICBndF9jdl9sb2NhbGVfdHJf dXRmOD10cl9UUg0KICAgICAgICAgIGVsc2UNCiAgICAgICAgICAgICMgVGVzdCBmb3IgdGhlIGxv Y2FsZSBuYW1lIHdpdGggZXhwbGljaXQgZW5jb2Rpbmcgc3VmZml4Lg0KICAgICAgICAgICAgaWYg KExDX0FMTD10cl9UUi5VVEYtOCBMQ19USU1FPSBMQ19DVFlQRT0gLi9jb25mdGVzdDsgZXhpdCkg Mj4vZGV2L251bGw7IHRoZW4NCiAgICAgICAgICAgICAgZ3RfY3ZfbG9jYWxlX3RyX3V0Zjg9dHJf VFIuVVRGLTgNCiAgICAgICAgICAgIGVsc2UNCiAgICAgICAgICAgICAgIyBUZXN0IGZvciB0aGUg U29sYXJpcyA3IGxvY2FsZSBuYW1lLg0KICAgICAgICAgICAgICBpZiAoTENfQUxMPXRyLlVURi04 IExDX1RJTUU9IExDX0NUWVBFPSAuL2NvbmZ0ZXN0OyBleGl0KSAyPi9kZXYvbnVsbDsgdGhlbg0K ICAgICAgICAgICAgICAgIGd0X2N2X2xvY2FsZV90cl91dGY4PXRyLlVURi04DQogICAgICAgICAg ICAgIGVsc2UNCiAgICAgICAgICAgICAgICAjIE5vbmUgZm91bmQuDQogICAgICAgICAgICAgICAg Z3RfY3ZfbG9jYWxlX3RyX3V0Zjg9bm9uZQ0KICAgICAgICAgICAgICBmaQ0KICAgICAgICAgICAg ZmkNCiAgICAgICAgICBmaQ0KICAgICAgICAgIDs7DQogICAgICBlc2FjDQogICAgZWxzZQ0KICAg ICAgZ3RfY3ZfbG9jYWxlX3RyX3V0Zjg9bm9uZQ0KICAgIGZpDQogICAgcm0gLWZyIGNvbmZ0ZXN0 Kg0KDQpmaQ0KeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6 ICRndF9jdl9sb2NhbGVfdHJfdXRmOCIgPiY1DQokYXNfZWNobyAiJGd0X2N2X2xvY2FsZV90cl91 dGY4IiA+JjY7IH0NCiAgTE9DQUxFX1RSX1VURjg9JGd0X2N2X2xvY2FsZV90cl91dGY4DQoNCg0K DQoNCiAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBm b3IgYSBmcmVuY2ggVW5pY29kZSBsb2NhbGUiID4mNQ0KJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9y IGEgZnJlbmNoIFVuaWNvZGUgbG9jYWxlLi4uICIgPiY2OyB9DQppZiAke2d0X2N2X2xvY2FsZV9m cl91dGY4Kzp9IGZhbHNlOyB0aGVuIDoNCiAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYNCmVs c2UNCg0KICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQNCi8q IGVuZCBjb25mZGVmcy5oLiAgKi8NCg0KI2luY2x1ZGUgPGxvY2FsZS5oPg0KI2luY2x1ZGUgPHRp bWUuaD4NCiNpZiBIQVZFX0xBTkdJTkZPX0NPREVTRVQNCiMgaW5jbHVkZSA8bGFuZ2luZm8uaD4N CiNlbmRpZg0KI2luY2x1ZGUgPHN0ZGxpYi5oPg0KI2luY2x1ZGUgPHN0cmluZy5oPg0Kc3RydWN0 IHRtIHQ7DQpjaGFyIGJ1ZlsxNl07DQppbnQgbWFpbiAoKSB7DQogIC8qIE9uIEJlT1MgYW5kIEhh aWt1LCBsb2NhbGVzIGFyZSBub3QgaW1wbGVtZW50ZWQgaW4gbGliYy4gIFJhdGhlciwgbGliaW50 bA0KICAgICBpbWl0YXRlcyBsb2NhbGUgZGVwZW5kZW50IGJlaGF2aW91ciBieSBsb29raW5nIGF0 IHRoZSBlbnZpcm9ubWVudA0KICAgICB2YXJpYWJsZXMsIGFuZCBhbGwgbG9jYWxlcyB1c2UgdGhl IFVURi04IGVuY29kaW5nLiAgKi8NCiNpZiAhKGRlZmluZWQgX19CRU9TX18gfHwgZGVmaW5lZCBf X0hBSUtVX18pDQogIC8qIENoZWNrIHdoZXRoZXIgdGhlIGdpdmVuIGxvY2FsZSBuYW1lIGlzIHJl Y29nbml6ZWQgYnkgdGhlIHN5c3RlbS4gICovDQojIGlmIChkZWZpbmVkIF9XSU4zMiB8fCBkZWZp bmVkIF9fV0lOMzJfXykgJiYgIWRlZmluZWQgX19DWUdXSU5fXw0KICAvKiBPbiBuYXRpdmUgV2lu MzIsIHNldGxvY2FsZShjYXRlZ29yeSwgIiIpIGxvb2tzIGF0IHRoZSBzeXN0ZW0gc2V0dGluZ3Ms DQogICAgIG5vdCBhdCB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGVzLiAgQWxzbywgd2hlbiBhbiBl bmNvZGluZyBzdWZmaXggc3VjaA0KICAgICBhcyAiLjY1MDAxIiBvciAiLjU0OTM2IiBpcyBzcGVm aWNpZWQsIGl0IHN1Y2NlZWRzIGJ1dCBzZXRzIHRoZSBMQ19DVFlQRQ0KICAgICBjYXRlZ29yeSBv ZiB0aGUgbG9jYWxlIHRvICJDIi4gICovDQogIGlmIChzZXRsb2NhbGUgKExDX0FMTCwgZ2V0ZW52 ICgiTENfQUxMIikpID09IE5VTEwNCiAgICAgIHx8IHN0cmNtcCAoc2V0bG9jYWxlIChMQ19DVFlQ RSwgTlVMTCksICJDIikgPT0gMCkNCiAgICByZXR1cm4gMTsNCiMgZWxzZQ0KICBpZiAoc2V0bG9j YWxlIChMQ19BTEwsICIiKSA9PSBOVUxMKSByZXR1cm4gMTsNCiMgZW5kaWYNCiAgLyogQ2hlY2sg d2hldGhlciBubF9sYW5naW5mbyhDT0RFU0VUKSBpcyBub25lbXB0eSBhbmQgbm90ICJBU0NJSSIg b3IgIjY0NiIuDQogICAgIE9uIE1hY09TIFggMTAuMy41IChEYXJ3aW4gNy41KSBpbiB0aGUgZnJf RlIgbG9jYWxlLCBubF9sYW5naW5mbyhDT0RFU0VUKQ0KICAgICBpcyBlbXB0eSwgYW5kIHRoZSBi ZWhhdmlvdXIgb2YgVGNsIDguNCBpbiB0aGlzIGxvY2FsZSBpcyBub3QgdXNlZnVsLg0KICAgICBP biBPcGVuQlNEIDQuMCwgd2hlbiBhbiB1bnN1cHBvcnRlZCBsb2NhbGUgaXMgc3BlY2lmaWVkLCBz ZXRsb2NhbGUoKQ0KICAgICBzdWNjZWVkcyBidXQgdGhlbiBubF9sYW5naW5mbyhDT0RFU0VUKSBp cyAiNjQ2Ii4gSW4gdGhpcyBzaXR1YXRpb24sDQogICAgIHNvbWUgdW5pdCB0ZXN0cyBmYWlsLiAg Ki8NCiMgaWYgSEFWRV9MQU5HSU5GT19DT0RFU0VUDQogIHsNCiAgICBjb25zdCBjaGFyICpjcyA9 IG5sX2xhbmdpbmZvIChDT0RFU0VUKTsNCiAgICBpZiAoY3NbMF0gPT0gJ1wwJyB8fCBzdHJjbXAg KGNzLCAiQVNDSUkiKSA9PSAwIHx8IHN0cmNtcCAoY3MsICI2NDYiKSA9PSAwKQ0KICAgICAgcmV0 dXJuIDE7DQogIH0NCiMgZW5kaWYNCiMgaWZkZWYgX19DWUdXSU5fXw0KICAvKiBPbiBDeWd3aW4s IGF2b2lkIGxvY2FsZSBuYW1lcyB3aXRob3V0IGVuY29kaW5nIHN1ZmZpeCwgYmVjYXVzZSB0aGUN CiAgICAgbG9jYWxlX2NoYXJzZXQoKSBmdW5jdGlvbiByZWxpZXMgb24gdGhlIGVuY29kaW5nIHN1 ZmZpeC4gIE5vdGUgdGhhdA0KICAgICBMQ19BTEwgaXMgc2V0IG9uIHRoZSBjb21tYW5kIGxpbmUu ICAqLw0KICBpZiAoc3RyY2hyIChnZXRlbnYgKCJMQ19BTEwiKSwgJy4nKSA9PSBOVUxMKSByZXR1 cm4gMTsNCiMgZW5kaWYNCiAgLyogQ2hlY2sgd2hldGhlciBpbiB0aGUgYWJicmV2aWF0aW9uIG9m IHRoZSBzZWNvbmQgbW9udGgsIHRoZSBzZWNvbmQNCiAgICAgY2hhcmFjdGVyIChzaG91bGQgYmUg VSswMEU5OiBMQVRJTiBTTUFMTCBMRVRURVIgRSBXSVRIIEFDVVRFKSBpcw0KICAgICB0d28gYnl0 ZXMgbG9uZywgd2l0aCBVVEYtOCBlbmNvZGluZy4gICovDQogIHQudG1feWVhciA9IDE5NzUgLSAx OTAwOyB0LnRtX21vbiA9IDIgLSAxOyB0LnRtX21kYXkgPSA0Ow0KICBpZiAoc3RyZnRpbWUgKGJ1 Ziwgc2l6ZW9mIChidWYpLCAiJWIiLCAmdCkgPCA0DQogICAgICB8fCBidWZbMV0gIT0gKGNoYXIp IDB4YzMgfHwgYnVmWzJdICE9IChjaGFyKSAweGE5IHx8IGJ1ZlszXSAhPSAndicpDQogICAgcmV0 dXJuIDE7DQojZW5kaWYNCiAgLyogQ2hlY2sgd2hldGhlciB0aGUgZGVjaW1hbCBzZXBhcmF0b3Ig aXMgYSBjb21tYS4NCiAgICAgT24gTmV0QlNEIDMuMCBpbiB0aGUgZnJfRlIuSVNPODg1OS0xIGxv Y2FsZSwgbG9jYWxlY29udigpLT5kZWNpbWFsX3BvaW50DQogICAgIGFyZSBubF9sYW5naW5mbyhS QURJWENIQVIpIGFyZSBib3RoICIuIi4gICovDQogIGlmIChsb2NhbGVjb252ICgpIC0+ZGVjaW1h bF9wb2ludFswXSAhPSAnLCcpIHJldHVybiAxOw0KICByZXR1cm4gMDsNCn0NCg0KX0FDRU9GDQog ICAgaWYgeyB7IGV2YWwgZWNobyAiXCJcJGFzX21lXCI6JHthc19saW5lbm8tJExJTkVOT306IFwi JGFjX2xpbmtcIiI7IH0gPiY1DQogIChldmFsICRhY19saW5rKSAyPiY1DQogIGFjX3N0YXR1cz0k Pw0KICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJD8gPSAkYWNfc3Rh dHVzIiA+JjUNCiAgdGVzdCAkYWNfc3RhdHVzID0gMDsgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JGFj X2V4ZWV4dDsgdGhlbg0KICAgICAgY2FzZSAiJGhvc3Rfb3MiIGluDQogICAgICAgICMgSGFuZGxl IG5hdGl2ZSBXaW5kb3dzIHNwZWNpYWxseSwgYmVjYXVzZSB0aGVyZSBzZXRsb2NhbGUoKSBpbnRl cnByZXRzDQogICAgICAgICMgImFyIiBhcyAiQXJhYmljIiBvciAiQXJhYmljX1NhdWRpIEFyYWJp YS4xMjU2IiwNCiAgICAgICAgIyAiZnIiIG9yICJmcmEiIGFzICJGcmVuY2giIG9yICJGcmVuY2hf RnJhbmNlLjEyNTIiLA0KICAgICAgICAjICJnZSIoISkgb3IgImRldSIoISkgYXMgIkdlcm1hbiIg b3IgIkdlcm1hbl9HZXJtYW55LjEyNTIiLA0KICAgICAgICAjICJqYSIgYXMgIkphcGFuZXNlIiBv ciAiSmFwYW5lc2VfSmFwYW4uOTMyIiwNCiAgICAgICAgIyBhbmQgc2ltaWxhci4NCiAgICAgICAg bWluZ3cqKQ0KICAgICAgICAgICMgVGVzdCBmb3IgdGhlIGh5cG90aGV0aWNhbCBuYXRpdmUgV2lu MzIgbG9jYWxlIG5hbWUuDQogICAgICAgICAgaWYgKExDX0FMTD1GcmVuY2hfRnJhbmNlLjY1MDAx IExDX1RJTUU9IExDX0NUWVBFPSAuL2NvbmZ0ZXN0OyBleGl0KSAyPi9kZXYvbnVsbDsgdGhlbg0K ICAgICAgICAgICAgZ3RfY3ZfbG9jYWxlX2ZyX3V0Zjg9RnJlbmNoX0ZyYW5jZS42NTAwMQ0KICAg ICAgICAgIGVsc2UNCiAgICAgICAgICAgICMgTm9uZSBmb3VuZC4NCiAgICAgICAgICAgIGd0X2N2 X2xvY2FsZV9mcl91dGY4PW5vbmUNCiAgICAgICAgICBmaQ0KICAgICAgICAgIDs7DQogICAgICAg ICopDQogICAgICAgICAgIyBTZXR0aW5nIExDX0FMTCBpcyBub3QgZW5vdWdoLiBOZWVkIHRvIHNl dCBMQ19USU1FIHRvIGVtcHR5LCBiZWNhdXNlDQogICAgICAgICAgIyBvdGhlcndpc2Ugb24gTWFj T1MgWCAxMC4zLjUgdGhlIExDX1RJTUU9QyBmcm9tIHRoZSBiZWdpbm5pbmcgb2YgdGhlDQogICAg ICAgICAgIyBjb25maWd1cmUgc2NyaXB0IHdvdWxkIG92ZXJyaWRlIHRoZSBMQ19BTEwgc2V0dGlu Zy4gTGlrZXdpc2UgZm9yDQogICAgICAgICAgIyBMQ19DVFlQRSwgd2hpY2ggaXMgYWxzbyBzZXQg YXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgY29uZmlndXJlIHNjcmlwdC4NCiAgICAgICAgICAjIFRl c3QgZm9yIHRoZSB1c3VhbCBsb2NhbGUgbmFtZS4NCiAgICAgICAgICBpZiAoTENfQUxMPWZyX0ZS IExDX1RJTUU9IExDX0NUWVBFPSAuL2NvbmZ0ZXN0OyBleGl0KSAyPi9kZXYvbnVsbDsgdGhlbg0K ICAgICAgICAgICAgZ3RfY3ZfbG9jYWxlX2ZyX3V0Zjg9ZnJfRlINCiAgICAgICAgICBlbHNlDQog ICAgICAgICAgICAjIFRlc3QgZm9yIHRoZSBsb2NhbGUgbmFtZSB3aXRoIGV4cGxpY2l0IGVuY29k aW5nIHN1ZmZpeC4NCiAgICAgICAgICAgIGlmIChMQ19BTEw9ZnJfRlIuVVRGLTggTENfVElNRT0g TENfQ1RZUEU9IC4vY29uZnRlc3Q7IGV4aXQpIDI+L2Rldi9udWxsOyB0aGVuDQogICAgICAgICAg ICAgIGd0X2N2X2xvY2FsZV9mcl91dGY4PWZyX0ZSLlVURi04DQogICAgICAgICAgICBlbHNlDQog ICAgICAgICAgICAgICMgVGVzdCBmb3IgdGhlIFNvbGFyaXMgNyBsb2NhbGUgbmFtZS4NCiAgICAg ICAgICAgICAgaWYgKExDX0FMTD1mci5VVEYtOCBMQ19USU1FPSBMQ19DVFlQRT0gLi9jb25mdGVz dDsgZXhpdCkgMj4vZGV2L251bGw7IHRoZW4NCiAgICAgICAgICAgICAgICBndF9jdl9sb2NhbGVf ZnJfdXRmOD1mci5VVEYtOA0KICAgICAgICAgICAgICBlbHNlDQogICAgICAgICAgICAgICAgIyBO b25lIGZvdW5kLg0KICAgICAgICAgICAgICAgIGd0X2N2X2xvY2FsZV9mcl91dGY4PW5vbmUNCiAg ICAgICAgICAgICAgZmkNCiAgICAgICAgICAgIGZpDQogICAgICAgICAgZmkNCiAgICAgICAgICA7 Ow0KICAgICAgZXNhYw0KICAgIGZpDQogICAgcm0gLWZyIGNvbmZ0ZXN0Kg0KDQpmaQ0KeyAkYXNf ZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRndF9jdl9sb2NhbGVf ZnJfdXRmOCIgPiY1DQokYXNfZWNobyAiJGd0X2N2X2xvY2FsZV9mcl91dGY4IiA+JjY7IH0NCiAg TE9DQUxFX0ZSX1VURjg9JGd0X2N2X2xvY2FsZV9mcl91dGY4DQoNCg0KDQoNCg0KICB7ICRhc19l Y2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBhIHRyYWRpdGlv bmFsIGZyZW5jaCBsb2NhbGUiID4mNQ0KJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIGEgdHJhZGl0 aW9uYWwgZnJlbmNoIGxvY2FsZS4uLiAiID4mNjsgfQ0KaWYgJHtndF9jdl9sb2NhbGVfZnIrOn0g ZmFsc2U7IHRoZW4gOg0KICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNg0KZWxzZQ0KDQogICAg Y2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dA0KLyogZW5kIGNvbmZk ZWZzLmguICAqLw0KDQojaW5jbHVkZSA8bG9jYWxlLmg+DQojaW5jbHVkZSA8dGltZS5oPg0KI2lm IEhBVkVfTEFOR0lORk9fQ09ERVNFVA0KIyBpbmNsdWRlIDxsYW5naW5mby5oPg0KI2VuZGlmDQoj aW5jbHVkZSA8c3RkbGliLmg+DQojaW5jbHVkZSA8c3RyaW5nLmg+DQpzdHJ1Y3QgdG0gdDsNCmNo YXIgYnVmWzE2XTsNCmludCBtYWluICgpIHsNCiAgLyogQ2hlY2sgd2hldGhlciB0aGUgZ2l2ZW4g bG9jYWxlIG5hbWUgaXMgcmVjb2duaXplZCBieSB0aGUgc3lzdGVtLiAgKi8NCiNpZiAoZGVmaW5l ZCBfV0lOMzIgfHwgZGVmaW5lZCBfX1dJTjMyX18pICYmICFkZWZpbmVkIF9fQ1lHV0lOX18NCiAg LyogT24gbmF0aXZlIFdpbjMyLCBzZXRsb2NhbGUoY2F0ZWdvcnksICIiKSBsb29rcyBhdCB0aGUg c3lzdGVtIHNldHRpbmdzLA0KICAgICBub3QgYXQgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlcy4g IEFsc28sIHdoZW4gYW4gZW5jb2Rpbmcgc3VmZml4IHN1Y2gNCiAgICAgYXMgIi42NTAwMSIgb3Ig Ii41NDkzNiIgaXMgc3BlZmljaWVkLCBpdCBzdWNjZWVkcyBidXQgc2V0cyB0aGUgTENfQ1RZUEUN CiAgICAgY2F0ZWdvcnkgb2YgdGhlIGxvY2FsZSB0byAiQyIuICAqLw0KICBpZiAoc2V0bG9jYWxl IChMQ19BTEwsIGdldGVudiAoIkxDX0FMTCIpKSA9PSBOVUxMDQogICAgICB8fCBzdHJjbXAgKHNl dGxvY2FsZSAoTENfQ1RZUEUsIE5VTEwpLCAiQyIpID09IDApDQogICAgcmV0dXJuIDE7DQojZWxz ZQ0KICBpZiAoc2V0bG9jYWxlIChMQ19BTEwsICIiKSA9PSBOVUxMKSByZXR1cm4gMTsNCiNlbmRp Zg0KICAvKiBDaGVjayB3aGV0aGVyIG5sX2xhbmdpbmZvKENPREVTRVQpIGlzIG5vbmVtcHR5IGFu ZCBub3QgIkFTQ0lJIiBvciAiNjQ2Ii4NCiAgICAgT24gTWFjT1MgWCAxMC4zLjUgKERhcndpbiA3 LjUpIGluIHRoZSBmcl9GUiBsb2NhbGUsIG5sX2xhbmdpbmZvKENPREVTRVQpDQogICAgIGlzIGVt cHR5LCBhbmQgdGhlIGJlaGF2aW91ciBvZiBUY2wgOC40IGluIHRoaXMgbG9jYWxlIGlzIG5vdCB1 c2VmdWwuDQogICAgIE9uIE9wZW5CU0QgNC4wLCB3aGVuIGFuIHVuc3VwcG9ydGVkIGxvY2FsZSBp cyBzcGVjaWZpZWQsIHNldGxvY2FsZSgpDQogICAgIHN1Y2NlZWRzIGJ1dCB0aGVuIG5sX2xhbmdp bmZvKENPREVTRVQpIGlzICI2NDYiLiBJbiB0aGlzIHNpdHVhdGlvbiwNCiAgICAgc29tZSB1bml0 IHRlc3RzIGZhaWwuDQogICAgIE9uIE1pckJTRCAxMCwgd2hlbiBhbiB1bnN1cHBvcnRlZCBsb2Nh bGUgaXMgc3BlY2lmaWVkLCBzZXRsb2NhbGUoKQ0KICAgICBzdWNjZWVkcyBidXQgdGhlbiBubF9s YW5naW5mbyhDT0RFU0VUKSBpcyAiVVRGLTgiLiAgKi8NCiNpZiBIQVZFX0xBTkdJTkZPX0NPREVT RVQNCiAgew0KICAgIGNvbnN0IGNoYXIgKmNzID0gbmxfbGFuZ2luZm8gKENPREVTRVQpOw0KICAg IGlmIChjc1swXSA9PSAnXDAnIHx8IHN0cmNtcCAoY3MsICJBU0NJSSIpID09IDAgfHwgc3RyY21w IChjcywgIjY0NiIpID09IDANCiAgICAgICAgfHwgc3RyY21wIChjcywgIlVURi04IikgPT0gMCkN CiAgICAgIHJldHVybiAxOw0KICB9DQojZW5kaWYNCiNpZmRlZiBfX0NZR1dJTl9fDQogIC8qIE9u IEN5Z3dpbiwgYXZvaWQgbG9jYWxlIG5hbWVzIHdpdGhvdXQgZW5jb2Rpbmcgc3VmZml4LCBiZWNh dXNlIHRoZQ0KICAgICBsb2NhbGVfY2hhcnNldCgpIGZ1bmN0aW9uIHJlbGllcyBvbiB0aGUgZW5j b2Rpbmcgc3VmZml4LiAgTm90ZSB0aGF0DQogICAgIExDX0FMTCBpcyBzZXQgb24gdGhlIGNvbW1h bmQgbGluZS4gICovDQogIGlmIChzdHJjaHIgKGdldGVudiAoIkxDX0FMTCIpLCAnLicpID09IE5V TEwpIHJldHVybiAxOw0KI2VuZGlmDQogIC8qIENoZWNrIHdoZXRoZXIgaW4gdGhlIGFiYnJldmlh dGlvbiBvZiB0aGUgc2Vjb25kIG1vbnRoLCB0aGUgc2Vjb25kDQogICAgIGNoYXJhY3RlciAoc2hv dWxkIGJlIFUrMDBFOTogTEFUSU4gU01BTEwgTEVUVEVSIEUgV0lUSCBBQ1VURSkgaXMgb25seQ0K ICAgICBvbmUgYnl0ZSBsb25nLiBUaGlzIGV4Y2x1ZGVzIHRoZSBVVEYtOCBlbmNvZGluZy4gICov DQogIHQudG1feWVhciA9IDE5NzUgLSAxOTAwOyB0LnRtX21vbiA9IDIgLSAxOyB0LnRtX21kYXkg PSA0Ow0KICBpZiAoc3RyZnRpbWUgKGJ1Ziwgc2l6ZW9mIChidWYpLCAiJWIiLCAmdCkgPCAzIHx8 IGJ1ZlsyXSAhPSAndicpIHJldHVybiAxOw0KICAvKiBDaGVjayB3aGV0aGVyIHRoZSBkZWNpbWFs IHNlcGFyYXRvciBpcyBhIGNvbW1hLg0KICAgICBPbiBOZXRCU0QgMy4wIGluIHRoZSBmcl9GUi5J U084ODU5LTEgbG9jYWxlLCBsb2NhbGVjb252KCktPmRlY2ltYWxfcG9pbnQNCiAgICAgYXJlIG5s X2xhbmdpbmZvKFJBRElYQ0hBUikgYXJlIGJvdGggIi4iLiAgKi8NCiAgaWYgKGxvY2FsZWNvbnYg KCkgLT5kZWNpbWFsX3BvaW50WzBdICE9ICcsJykgcmV0dXJuIDE7DQogIHJldHVybiAwOw0KfQ0K DQpfQUNFT0YNCiAgICBpZiB7IHsgZXZhbCBlY2hvICJcIlwkYXNfbWVcIjoke2FzX2xpbmVuby0k TElORU5PfTogXCIkYWNfbGlua1wiIjsgfSA+JjUNCiAgKGV2YWwgJGFjX2xpbmspIDI+JjUNCiAg YWNfc3RhdHVzPSQ/DQogICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwk PyA9ICRhY19zdGF0dXMiID4mNQ0KICB0ZXN0ICRhY19zdGF0dXMgPSAwOyB9ICYmIHRlc3QgLXMg Y29uZnRlc3QkYWNfZXhlZXh0OyB0aGVuDQogICAgICBjYXNlICIkaG9zdF9vcyIgaW4NCiAgICAg ICAgIyBIYW5kbGUgbmF0aXZlIFdpbmRvd3Mgc3BlY2lhbGx5LCBiZWNhdXNlIHRoZXJlIHNldGxv Y2FsZSgpIGludGVycHJldHMNCiAgICAgICAgIyAiYXIiIGFzICJBcmFiaWMiIG9yICJBcmFiaWNf U2F1ZGkgQXJhYmlhLjEyNTYiLA0KICAgICAgICAjICJmciIgb3IgImZyYSIgYXMgIkZyZW5jaCIg b3IgIkZyZW5jaF9GcmFuY2UuMTI1MiIsDQogICAgICAgICMgImdlIighKSBvciAiZGV1IighKSBh cyAiR2VybWFuIiBvciAiR2VybWFuX0dlcm1hbnkuMTI1MiIsDQogICAgICAgICMgImphIiBhcyAi SmFwYW5lc2UiIG9yICJKYXBhbmVzZV9KYXBhbi45MzIiLA0KICAgICAgICAjIGFuZCBzaW1pbGFy Lg0KICAgICAgICBtaW5ndyopDQogICAgICAgICAgIyBUZXN0IGZvciB0aGUgbmF0aXZlIFdpbjMy IGxvY2FsZSBuYW1lLg0KICAgICAgICAgIGlmIChMQ19BTEw9RnJlbmNoX0ZyYW5jZS4xMjUyIExD X1RJTUU9IExDX0NUWVBFPSAuL2NvbmZ0ZXN0OyBleGl0KSAyPi9kZXYvbnVsbDsgdGhlbg0KICAg ICAgICAgICAgZ3RfY3ZfbG9jYWxlX2ZyPUZyZW5jaF9GcmFuY2UuMTI1Mg0KICAgICAgICAgIGVs c2UNCiAgICAgICAgICAgICMgTm9uZSBmb3VuZC4NCiAgICAgICAgICAgIGd0X2N2X2xvY2FsZV9m cj1ub25lDQogICAgICAgICAgZmkNCiAgICAgICAgICA7Ow0KICAgICAgICAqKQ0KICAgICAgICAg ICMgU2V0dGluZyBMQ19BTEwgaXMgbm90IGVub3VnaC4gTmVlZCB0byBzZXQgTENfVElNRSB0byBl bXB0eSwgYmVjYXVzZQ0KICAgICAgICAgICMgb3RoZXJ3aXNlIG9uIE1hY09TIFggMTAuMy41IHRo ZSBMQ19USU1FPUMgZnJvbSB0aGUgYmVnaW5uaW5nIG9mIHRoZQ0KICAgICAgICAgICMgY29uZmln dXJlIHNjcmlwdCB3b3VsZCBvdmVycmlkZSB0aGUgTENfQUxMIHNldHRpbmcuIExpa2V3aXNlIGZv cg0KICAgICAgICAgICMgTENfQ1RZUEUsIHdoaWNoIGlzIGFsc28gc2V0IGF0IHRoZSBiZWdpbm5p bmcgb2YgdGhlIGNvbmZpZ3VyZSBzY3JpcHQuDQogICAgICAgICAgIyBUZXN0IGZvciB0aGUgdXN1 YWwgbG9jYWxlIG5hbWUuDQogICAgICAgICAgaWYgKExDX0FMTD1mcl9GUiBMQ19USU1FPSBMQ19D VFlQRT0gLi9jb25mdGVzdDsgZXhpdCkgMj4vZGV2L251bGw7IHRoZW4NCiAgICAgICAgICAgIGd0 X2N2X2xvY2FsZV9mcj1mcl9GUg0KICAgICAgICAgIGVsc2UNCiAgICAgICAgICAgICMgVGVzdCBm b3IgdGhlIGxvY2FsZSBuYW1lIHdpdGggZXhwbGljaXQgZW5jb2Rpbmcgc3VmZml4Lg0KICAgICAg ICAgICAgaWYgKExDX0FMTD1mcl9GUi5JU08tODg1OS0xIExDX1RJTUU9IExDX0NUWVBFPSAuL2Nv bmZ0ZXN0OyBleGl0KSAyPi9kZXYvbnVsbDsgdGhlbg0KICAgICAgICAgICAgICBndF9jdl9sb2Nh bGVfZnI9ZnJfRlIuSVNPLTg4NTktMQ0KICAgICAgICAgICAgZWxzZQ0KICAgICAgICAgICAgICAj IFRlc3QgZm9yIHRoZSBBSVgsIE9TRi8xLCBGcmVlQlNELCBOZXRCU0QsIE9wZW5CU0QgbG9jYWxl IG5hbWUuDQogICAgICAgICAgICAgIGlmIChMQ19BTEw9ZnJfRlIuSVNPODg1OS0xIExDX1RJTUU9 IExDX0NUWVBFPSAuL2NvbmZ0ZXN0OyBleGl0KSAyPi9kZXYvbnVsbDsgdGhlbg0KICAgICAgICAg ICAgICAgIGd0X2N2X2xvY2FsZV9mcj1mcl9GUi5JU084ODU5LTENCiAgICAgICAgICAgICAgZWxz ZQ0KICAgICAgICAgICAgICAgICMgVGVzdCBmb3IgdGhlIEhQLVVYIGxvY2FsZSBuYW1lLg0KICAg ICAgICAgICAgICAgIGlmIChMQ19BTEw9ZnJfRlIuaXNvODg1OTEgTENfVElNRT0gTENfQ1RZUEU9 IC4vY29uZnRlc3Q7IGV4aXQpIDI+L2Rldi9udWxsOyB0aGVuDQogICAgICAgICAgICAgICAgICBn dF9jdl9sb2NhbGVfZnI9ZnJfRlIuaXNvODg1OTENCiAgICAgICAgICAgICAgICBlbHNlDQogICAg ICAgICAgICAgICAgICAjIFRlc3QgZm9yIHRoZSBTb2xhcmlzIDcgbG9jYWxlIG5hbWUuDQogICAg ICAgICAgICAgICAgICBpZiAoTENfQUxMPWZyIExDX1RJTUU9IExDX0NUWVBFPSAuL2NvbmZ0ZXN0 OyBleGl0KSAyPi9kZXYvbnVsbDsgdGhlbg0KICAgICAgICAgICAgICAgICAgICBndF9jdl9sb2Nh bGVfZnI9ZnINCiAgICAgICAgICAgICAgICAgIGVsc2UNCiAgICAgICAgICAgICAgICAgICAgIyBO b25lIGZvdW5kLg0KICAgICAgICAgICAgICAgICAgICBndF9jdl9sb2NhbGVfZnI9bm9uZQ0KICAg ICAgICAgICAgICAgICAgZmkNCiAgICAgICAgICAgICAgICBmaQ0KICAgICAgICAgICAgICBmaQ0K ICAgICAgICAgICAgZmkNCiAgICAgICAgICBmaQ0KICAgICAgICAgIDs7DQogICAgICBlc2FjDQog ICAgZmkNCiAgICBybSAtZnIgY29uZnRlc3QqDQoNCmZpDQp7ICRhc19lY2hvICIkYXNfbWU6JHth c19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGd0X2N2X2xvY2FsZV9mciIgPiY1DQokYXNfZWNo byAiJGd0X2N2X2xvY2FsZV9mciIgPiY2OyB9DQogIExPQ0FMRV9GUj0kZ3RfY3ZfbG9jYWxlX2Zy DQoNCg0KDQoNCiAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVj a2luZyBmb3IgYSBmcmVuY2ggVW5pY29kZSBsb2NhbGUiID4mNQ0KJGFzX2VjaG9fbiAiY2hlY2tp bmcgZm9yIGEgZnJlbmNoIFVuaWNvZGUgbG9jYWxlLi4uICIgPiY2OyB9DQppZiAke2d0X2N2X2xv Y2FsZV9mcl91dGY4Kzp9IGZhbHNlOyB0aGVuIDoNCiAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+ JjYNCmVsc2UNCg0KICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19l eHQNCi8qIGVuZCBjb25mZGVmcy5oLiAgKi8NCg0KI2luY2x1ZGUgPGxvY2FsZS5oPg0KI2luY2x1 ZGUgPHRpbWUuaD4NCiNpZiBIQVZFX0xBTkdJTkZPX0NPREVTRVQNCiMgaW5jbHVkZSA8bGFuZ2lu Zm8uaD4NCiNlbmRpZg0KI2luY2x1ZGUgPHN0ZGxpYi5oPg0KI2luY2x1ZGUgPHN0cmluZy5oPg0K c3RydWN0IHRtIHQ7DQpjaGFyIGJ1ZlsxNl07DQppbnQgbWFpbiAoKSB7DQogIC8qIE9uIEJlT1Mg YW5kIEhhaWt1LCBsb2NhbGVzIGFyZSBub3QgaW1wbGVtZW50ZWQgaW4gbGliYy4gIFJhdGhlciwg bGliaW50bA0KICAgICBpbWl0YXRlcyBsb2NhbGUgZGVwZW5kZW50IGJlaGF2aW91ciBieSBsb29r aW5nIGF0IHRoZSBlbnZpcm9ubWVudA0KICAgICB2YXJpYWJsZXMsIGFuZCBhbGwgbG9jYWxlcyB1 c2UgdGhlIFVURi04IGVuY29kaW5nLiAgKi8NCiNpZiAhKGRlZmluZWQgX19CRU9TX18gfHwgZGVm aW5lZCBfX0hBSUtVX18pDQogIC8qIENoZWNrIHdoZXRoZXIgdGhlIGdpdmVuIGxvY2FsZSBuYW1l IGlzIHJlY29nbml6ZWQgYnkgdGhlIHN5c3RlbS4gICovDQojIGlmIChkZWZpbmVkIF9XSU4zMiB8 fCBkZWZpbmVkIF9fV0lOMzJfXykgJiYgIWRlZmluZWQgX19DWUdXSU5fXw0KICAvKiBPbiBuYXRp dmUgV2luMzIsIHNldGxvY2FsZShjYXRlZ29yeSwgIiIpIGxvb2tzIGF0IHRoZSBzeXN0ZW0gc2V0 dGluZ3MsDQogICAgIG5vdCBhdCB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGVzLiAgQWxzbywgd2hl biBhbiBlbmNvZGluZyBzdWZmaXggc3VjaA0KICAgICBhcyAiLjY1MDAxIiBvciAiLjU0OTM2IiBp cyBzcGVmaWNpZWQsIGl0IHN1Y2NlZWRzIGJ1dCBzZXRzIHRoZSBMQ19DVFlQRQ0KICAgICBjYXRl Z29yeSBvZiB0aGUgbG9jYWxlIHRvICJDIi4gICovDQogIGlmIChzZXRsb2NhbGUgKExDX0FMTCwg Z2V0ZW52ICgiTENfQUxMIikpID09IE5VTEwNCiAgICAgIHx8IHN0cmNtcCAoc2V0bG9jYWxlIChM Q19DVFlQRSwgTlVMTCksICJDIikgPT0gMCkNCiAgICByZXR1cm4gMTsNCiMgZWxzZQ0KICBpZiAo c2V0bG9jYWxlIChMQ19BTEwsICIiKSA9PSBOVUxMKSByZXR1cm4gMTsNCiMgZW5kaWYNCiAgLyog Q2hlY2sgd2hldGhlciBubF9sYW5naW5mbyhDT0RFU0VUKSBpcyBub25lbXB0eSBhbmQgbm90ICJB U0NJSSIgb3IgIjY0NiIuDQogICAgIE9uIE1hY09TIFggMTAuMy41IChEYXJ3aW4gNy41KSBpbiB0 aGUgZnJfRlIgbG9jYWxlLCBubF9sYW5naW5mbyhDT0RFU0VUKQ0KICAgICBpcyBlbXB0eSwgYW5k IHRoZSBiZWhhdmlvdXIgb2YgVGNsIDguNCBpbiB0aGlzIGxvY2FsZSBpcyBub3QgdXNlZnVsLg0K ICAgICBPbiBPcGVuQlNEIDQuMCwgd2hlbiBhbiB1bnN1cHBvcnRlZCBsb2NhbGUgaXMgc3BlY2lm aWVkLCBzZXRsb2NhbGUoKQ0KICAgICBzdWNjZWVkcyBidXQgdGhlbiBubF9sYW5naW5mbyhDT0RF U0VUKSBpcyAiNjQ2Ii4gSW4gdGhpcyBzaXR1YXRpb24sDQogICAgIHNvbWUgdW5pdCB0ZXN0cyBm YWlsLiAgKi8NCiMgaWYgSEFWRV9MQU5HSU5GT19DT0RFU0VUDQogIHsNCiAgICBjb25zdCBjaGFy ICpjcyA9IG5sX2xhbmdpbmZvIChDT0RFU0VUKTsNCiAgICBpZiAoY3NbMF0gPT0gJ1wwJyB8fCBz dHJjbXAgKGNzLCAiQVNDSUkiKSA9PSAwIHx8IHN0cmNtcCAoY3MsICI2NDYiKSA9PSAwKQ0KICAg ICAgcmV0dXJuIDE7DQogIH0NCiMgZW5kaWYNCiMgaWZkZWYgX19DWUdXSU5fXw0KICAvKiBPbiBD eWd3aW4sIGF2b2lkIGxvY2FsZSBuYW1lcyB3aXRob3V0IGVuY29kaW5nIHN1ZmZpeCwgYmVjYXVz ZSB0aGUNCiAgICAgbG9jYWxlX2NoYXJzZXQoKSBmdW5jdGlvbiByZWxpZXMgb24gdGhlIGVuY29k aW5nIHN1ZmZpeC4gIE5vdGUgdGhhdA0KICAgICBMQ19BTEwgaXMgc2V0IG9uIHRoZSBjb21tYW5k IGxpbmUuICAqLw0KICBpZiAoc3RyY2hyIChnZXRlbnYgKCJMQ19BTEwiKSwgJy4nKSA9PSBOVUxM KSByZXR1cm4gMTsNCiMgZW5kaWYNCiAgLyogQ2hlY2sgd2hldGhlciBpbiB0aGUgYWJicmV2aWF0 aW9uIG9mIHRoZSBzZWNvbmQgbW9udGgsIHRoZSBzZWNvbmQNCiAgICAgY2hhcmFjdGVyIChzaG91 bGQgYmUgVSswMEU5OiBMQVRJTiBTTUFMTCBMRVRURVIgRSBXSVRIIEFDVVRFKSBpcw0KICAgICB0 d28gYnl0ZXMgbG9uZywgd2l0aCBVVEYtOCBlbmNvZGluZy4gICovDQogIHQudG1feWVhciA9IDE5 NzUgLSAxOTAwOyB0LnRtX21vbiA9IDIgLSAxOyB0LnRtX21kYXkgPSA0Ow0KICBpZiAoc3RyZnRp bWUgKGJ1Ziwgc2l6ZW9mIChidWYpLCAiJWIiLCAmdCkgPCA0DQogICAgICB8fCBidWZbMV0gIT0g KGNoYXIpIDB4YzMgfHwgYnVmWzJdICE9IChjaGFyKSAweGE5IHx8IGJ1ZlszXSAhPSAndicpDQog ICAgcmV0dXJuIDE7DQojZW5kaWYNCiAgLyogQ2hlY2sgd2hldGhlciB0aGUgZGVjaW1hbCBzZXBh cmF0b3IgaXMgYSBjb21tYS4NCiAgICAgT24gTmV0QlNEIDMuMCBpbiB0aGUgZnJfRlIuSVNPODg1 OS0xIGxvY2FsZSwgbG9jYWxlY29udigpLT5kZWNpbWFsX3BvaW50DQogICAgIGFyZSBubF9sYW5n aW5mbyhSQURJWENIQVIpIGFyZSBib3RoICIuIi4gICovDQogIGlmIChsb2NhbGVjb252ICgpIC0+ ZGVjaW1hbF9wb2ludFswXSAhPSAnLCcpIHJldHVybiAxOw0KICByZXR1cm4gMDsNCn0NCg0KX0FD RU9GDQogICAgaWYgeyB7IGV2YWwgZWNobyAiXCJcJGFzX21lXCI6JHthc19saW5lbm8tJExJTkVO T306IFwiJGFjX2xpbmtcIiI7IH0gPiY1DQogIChldmFsICRhY19saW5rKSAyPiY1DQogIGFjX3N0 YXR1cz0kPw0KICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJD8gPSAk YWNfc3RhdHVzIiA+JjUNCiAgdGVzdCAkYWNfc3RhdHVzID0gMDsgfSAmJiB0ZXN0IC1zIGNvbmZ0 ZXN0JGFjX2V4ZWV4dDsgdGhlbg0KICAgICAgY2FzZSAiJGhvc3Rfb3MiIGluDQogICAgICAgICMg SGFuZGxlIG5hdGl2ZSBXaW5kb3dzIHNwZWNpYWxseSwgYmVjYXVzZSB0aGVyZSBzZXRsb2NhbGUo KSBpbnRlcnByZXRzDQogICAgICAgICMgImFyIiBhcyAiQXJhYmljIiBvciAiQXJhYmljX1NhdWRp IEFyYWJpYS4xMjU2IiwNCiAgICAgICAgIyAiZnIiIG9yICJmcmEiIGFzICJGcmVuY2giIG9yICJG cmVuY2hfRnJhbmNlLjEyNTIiLA0KICAgICAgICAjICJnZSIoISkgb3IgImRldSIoISkgYXMgIkdl cm1hbiIgb3IgIkdlcm1hbl9HZXJtYW55LjEyNTIiLA0KICAgICAgICAjICJqYSIgYXMgIkphcGFu ZXNlIiBvciAiSmFwYW5lc2VfSmFwYW4uOTMyIiwNCiAgICAgICAgIyBhbmQgc2ltaWxhci4NCiAg ICAgICAgbWluZ3cqKQ0KICAgICAgICAgICMgVGVzdCBmb3IgdGhlIGh5cG90aGV0aWNhbCBuYXRp dmUgV2luMzIgbG9jYWxlIG5hbWUuDQogICAgICAgICAgaWYgKExDX0FMTD1GcmVuY2hfRnJhbmNl LjY1MDAxIExDX1RJTUU9IExDX0NUWVBFPSAuL2NvbmZ0ZXN0OyBleGl0KSAyPi9kZXYvbnVsbDsg dGhlbg0KICAgICAgICAgICAgZ3RfY3ZfbG9jYWxlX2ZyX3V0Zjg9RnJlbmNoX0ZyYW5jZS42NTAw MQ0KICAgICAgICAgIGVsc2UNCiAgICAgICAgICAgICMgTm9uZSBmb3VuZC4NCiAgICAgICAgICAg IGd0X2N2X2xvY2FsZV9mcl91dGY4PW5vbmUNCiAgICAgICAgICBmaQ0KICAgICAgICAgIDs7DQog ICAgICAgICopDQogICAgICAgICAgIyBTZXR0aW5nIExDX0FMTCBpcyBub3QgZW5vdWdoLiBOZWVk IHRvIHNldCBMQ19USU1FIHRvIGVtcHR5LCBiZWNhdXNlDQogICAgICAgICAgIyBvdGhlcndpc2Ug b24gTWFjT1MgWCAxMC4zLjUgdGhlIExDX1RJTUU9QyBmcm9tIHRoZSBiZWdpbm5pbmcgb2YgdGhl DQogICAgICAgICAgIyBjb25maWd1cmUgc2NyaXB0IHdvdWxkIG92ZXJyaWRlIHRoZSBMQ19BTEwg c2V0dGluZy4gTGlrZXdpc2UgZm9yDQogICAgICAgICAgIyBMQ19DVFlQRSwgd2hpY2ggaXMgYWxz byBzZXQgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgY29uZmlndXJlIHNjcmlwdC4NCiAgICAgICAg ICAjIFRlc3QgZm9yIHRoZSB1c3VhbCBsb2NhbGUgbmFtZS4NCiAgICAgICAgICBpZiAoTENfQUxM PWZyX0ZSIExDX1RJTUU9IExDX0NUWVBFPSAuL2NvbmZ0ZXN0OyBleGl0KSAyPi9kZXYvbnVsbDsg dGhlbg0KICAgICAgICAgICAgZ3RfY3ZfbG9jYWxlX2ZyX3V0Zjg9ZnJfRlINCiAgICAgICAgICBl bHNlDQogICAgICAgICAgICAjIFRlc3QgZm9yIHRoZSBsb2NhbGUgbmFtZSB3aXRoIGV4cGxpY2l0 IGVuY29kaW5nIHN1ZmZpeC4NCiAgICAgICAgICAgIGlmIChMQ19BTEw9ZnJfRlIuVVRGLTggTENf VElNRT0gTENfQ1RZUEU9IC4vY29uZnRlc3Q7IGV4aXQpIDI+L2Rldi9udWxsOyB0aGVuDQogICAg ICAgICAgICAgIGd0X2N2X2xvY2FsZV9mcl91dGY4PWZyX0ZSLlVURi04DQogICAgICAgICAgICBl bHNlDQogICAgICAgICAgICAgICMgVGVzdCBmb3IgdGhlIFNvbGFyaXMgNyBsb2NhbGUgbmFtZS4N CiAgICAgICAgICAgICAgaWYgKExDX0FMTD1mci5VVEYtOCBMQ19USU1FPSBMQ19DVFlQRT0gLi9j b25mdGVzdDsgZXhpdCkgMj4vZGV2L251bGw7IHRoZW4NCiAgICAgICAgICAgICAgICBndF9jdl9s b2NhbGVfZnJfdXRmOD1mci5VVEYtOA0KICAgICAgICAgICAgICBlbHNlDQogICAgICAgICAgICAg ICAgIyBOb25lIGZvdW5kLg0KICAgICAgICAgICAgICAgIGd0X2N2X2xvY2FsZV9mcl91dGY4PW5v bmUNCiAgICAgICAgICAgICAgZmkNCiAgICAgICAgICAgIGZpDQogICAgICAgICAgZmkNCiAgICAg ICAgICA7Ow0KICAgICAgZXNhYw0KICAgIGZpDQogICAgcm0gLWZyIGNvbmZ0ZXN0Kg0KDQpmaQ0K eyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRndF9jdl9s b2NhbGVfZnJfdXRmOCIgPiY1DQokYXNfZWNobyAiJGd0X2N2X2xvY2FsZV9mcl91dGY4IiA+JjY7 IH0NCiAgTE9DQUxFX0ZSX1VURjg9JGd0X2N2X2xvY2FsZV9mcl91dGY4DQoNCg0KDQoNCg0KICB7 ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBhIHRy YWRpdGlvbmFsIGphcGFuZXNlIGxvY2FsZSIgPiY1DQokYXNfZWNob19uICJjaGVja2luZyBmb3Ig YSB0cmFkaXRpb25hbCBqYXBhbmVzZSBsb2NhbGUuLi4gIiA+JjY7IH0NCmlmICR7Z3RfY3ZfbG9j YWxlX2phKzp9IGZhbHNlOyB0aGVuIDoNCiAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYNCmVs c2UNCg0KICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQNCi8q IGVuZCBjb25mZGVmcy5oLiAgKi8NCg0KI2luY2x1ZGUgPGxvY2FsZS5oPg0KI2luY2x1ZGUgPHRp bWUuaD4NCiNpZiBIQVZFX0xBTkdJTkZPX0NPREVTRVQNCiMgaW5jbHVkZSA8bGFuZ2luZm8uaD4N CiNlbmRpZg0KI2luY2x1ZGUgPHN0ZGxpYi5oPg0KI2luY2x1ZGUgPHN0cmluZy5oPg0Kc3RydWN0 IHRtIHQ7DQpjaGFyIGJ1ZlsxNl07DQppbnQgbWFpbiAoKQ0Kew0KICBjb25zdCBjaGFyICpwOw0K ICAvKiBDaGVjayB3aGV0aGVyIHRoZSBnaXZlbiBsb2NhbGUgbmFtZSBpcyByZWNvZ25pemVkIGJ5 IHRoZSBzeXN0ZW0uICAqLw0KI2lmIChkZWZpbmVkIF9XSU4zMiB8fCBkZWZpbmVkIF9fV0lOMzJf XykgJiYgIWRlZmluZWQgX19DWUdXSU5fXw0KICAvKiBPbiBuYXRpdmUgV2luMzIsIHNldGxvY2Fs ZShjYXRlZ29yeSwgIiIpIGxvb2tzIGF0IHRoZSBzeXN0ZW0gc2V0dGluZ3MsDQogICAgIG5vdCBh dCB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGVzLiAgQWxzbywgd2hlbiBhbiBlbmNvZGluZyBzdWZm aXggc3VjaA0KICAgICBhcyAiLjY1MDAxIiBvciAiLjU0OTM2IiBpcyBzcGVmaWNpZWQsIGl0IHN1 Y2NlZWRzIGJ1dCBzZXRzIHRoZSBMQ19DVFlQRQ0KICAgICBjYXRlZ29yeSBvZiB0aGUgbG9jYWxl IHRvICJDIi4gICovDQogIGlmIChzZXRsb2NhbGUgKExDX0FMTCwgZ2V0ZW52ICgiTENfQUxMIikp ID09IE5VTEwNCiAgICAgIHx8IHN0cmNtcCAoc2V0bG9jYWxlIChMQ19DVFlQRSwgTlVMTCksICJD IikgPT0gMCkNCiAgICByZXR1cm4gMTsNCiNlbHNlDQogIGlmIChzZXRsb2NhbGUgKExDX0FMTCwg IiIpID09IE5VTEwpIHJldHVybiAxOw0KI2VuZGlmDQogIC8qIENoZWNrIHdoZXRoZXIgbmxfbGFu Z2luZm8oQ09ERVNFVCkgaXMgbm9uZW1wdHkgYW5kIG5vdCAiQVNDSUkiIG9yICI2NDYiLg0KICAg ICBPbiBNYWNPUyBYIDEwLjMuNSAoRGFyd2luIDcuNSkgaW4gdGhlIGZyX0ZSIGxvY2FsZSwgbmxf bGFuZ2luZm8oQ09ERVNFVCkNCiAgICAgaXMgZW1wdHksIGFuZCB0aGUgYmVoYXZpb3VyIG9mIFRj bCA4LjQgaW4gdGhpcyBsb2NhbGUgaXMgbm90IHVzZWZ1bC4NCiAgICAgT24gT3BlbkJTRCA0LjAs IHdoZW4gYW4gdW5zdXBwb3J0ZWQgbG9jYWxlIGlzIHNwZWNpZmllZCwgc2V0bG9jYWxlKCkNCiAg ICAgc3VjY2VlZHMgYnV0IHRoZW4gbmxfbGFuZ2luZm8oQ09ERVNFVCkgaXMgIjY0NiIuIEluIHRo aXMgc2l0dWF0aW9uLA0KICAgICBzb21lIHVuaXQgdGVzdHMgZmFpbC4NCiAgICAgT24gTWlyQlNE IDEwLCB3aGVuIGFuIHVuc3VwcG9ydGVkIGxvY2FsZSBpcyBzcGVjaWZpZWQsIHNldGxvY2FsZSgp DQogICAgIHN1Y2NlZWRzIGJ1dCB0aGVuIG5sX2xhbmdpbmZvKENPREVTRVQpIGlzICJVVEYtOCIu ICAqLw0KI2lmIEhBVkVfTEFOR0lORk9fQ09ERVNFVA0KICB7DQogICAgY29uc3QgY2hhciAqY3Mg PSBubF9sYW5naW5mbyAoQ09ERVNFVCk7DQogICAgaWYgKGNzWzBdID09ICdcMCcgfHwgc3RyY21w IChjcywgIkFTQ0lJIikgPT0gMCB8fCBzdHJjbXAgKGNzLCAiNjQ2IikgPT0gMA0KICAgICAgICB8 fCBzdHJjbXAgKGNzLCAiVVRGLTgiKSA9PSAwKQ0KICAgICAgcmV0dXJuIDE7DQogIH0NCiNlbmRp Zg0KI2lmZGVmIF9fQ1lHV0lOX18NCiAgLyogT24gQ3lnd2luLCBhdm9pZCBsb2NhbGUgbmFtZXMg d2l0aG91dCBlbmNvZGluZyBzdWZmaXgsIGJlY2F1c2UgdGhlDQogICAgIGxvY2FsZV9jaGFyc2V0 KCkgZnVuY3Rpb24gcmVsaWVzIG9uIHRoZSBlbmNvZGluZyBzdWZmaXguICBOb3RlIHRoYXQNCiAg ICAgTENfQUxMIGlzIHNldCBvbiB0aGUgY29tbWFuZCBsaW5lLiAgKi8NCiAgaWYgKHN0cmNociAo Z2V0ZW52ICgiTENfQUxMIiksICcuJykgPT0gTlVMTCkgcmV0dXJuIDE7DQojZW5kaWYNCiAgLyog Q2hlY2sgd2hldGhlciBNQl9DVVJfTUFYIGlzID4gMS4gIFRoaXMgZXhjbHVkZXMgdGhlIGR5c2Z1 bmN0aW9uYWwgbG9jYWxlcw0KICAgICBvbiBDeWd3aW4gMS41LnguICAqLw0KICBpZiAoTUJfQ1VS X01BWCA9PSAxKQ0KICAgIHJldHVybiAxOw0KICAvKiBDaGVjayB3aGV0aGVyIGluIGEgbW9udGgg bmFtZSwgbm8gYnl0ZSBpbiB0aGUgcmFuZ2UgMHg4MC4uMHg5RiBvY2N1cnMuDQogICAgIFRoaXMg ZXhjbHVkZXMgdGhlIFVURi04IGVuY29kaW5nIChleGNlcHQgb24gTWlyQlNEKS4gICovDQogIHQu dG1feWVhciA9IDE5NzUgLSAxOTAwOyB0LnRtX21vbiA9IDIgLSAxOyB0LnRtX21kYXkgPSA0Ow0K ICBpZiAoc3RyZnRpbWUgKGJ1Ziwgc2l6ZW9mIChidWYpLCAiJUIiLCAmdCkgPCAyKSByZXR1cm4g MTsNCiAgZm9yIChwID0gYnVmOyAqcCAhPSAnXDAnOyBwKyspDQogICAgaWYgKCh1bnNpZ25lZCBj aGFyKSAqcCA+PSAweDgwICYmICh1bnNpZ25lZCBjaGFyKSAqcCA8IDB4YTApDQogICAgICByZXR1 cm4gMTsNCiAgcmV0dXJuIDA7DQp9DQoNCl9BQ0VPRg0KICAgIGlmIHsgeyBldmFsIGVjaG8gIlwi XCRhc19tZVwiOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcIiRhY19saW5rXCIiOyB9ID4mNQ0KICAo ZXZhbCAkYWNfbGluaykgMj4mNQ0KICBhY19zdGF0dXM9JD8NCiAgJGFzX2VjaG8gIiRhc19tZTok e2FzX2xpbmVuby0kTElORU5PfTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1DQogIHRlc3QgJGFjX3N0 YXR1cyA9IDA7IH0gJiYgdGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQ7IHRoZW4NCiAgICAgIGNh c2UgIiRob3N0X29zIiBpbg0KICAgICAgICAjIEhhbmRsZSBuYXRpdmUgV2luZG93cyBzcGVjaWFs bHksIGJlY2F1c2UgdGhlcmUgc2V0bG9jYWxlKCkgaW50ZXJwcmV0cw0KICAgICAgICAjICJhciIg YXMgIkFyYWJpYyIgb3IgIkFyYWJpY19TYXVkaSBBcmFiaWEuMTI1NiIsDQogICAgICAgICMgImZy IiBvciAiZnJhIiBhcyAiRnJlbmNoIiBvciAiRnJlbmNoX0ZyYW5jZS4xMjUyIiwNCiAgICAgICAg IyAiZ2UiKCEpIG9yICJkZXUiKCEpIGFzICJHZXJtYW4iIG9yICJHZXJtYW5fR2VybWFueS4xMjUy IiwNCiAgICAgICAgIyAiamEiIGFzICJKYXBhbmVzZSIgb3IgIkphcGFuZXNlX0phcGFuLjkzMiIs DQogICAgICAgICMgYW5kIHNpbWlsYXIuDQogICAgICAgIG1pbmd3KikNCiAgICAgICAgICAjIE5v dGUgdGhhdCBvbiBuYXRpdmUgV2luMzIsIHRoZSBKYXBhbmVzZSBsb2NhbGUgaXMgSmFwYW5lc2Vf SmFwYW4uOTMyLA0KICAgICAgICAgICMgYW5kIENQOTMyIGlzIHZlcnkgZGlmZmVyZW50IGZyb20g RVVDLUpQLCBzbyB3ZSBjYW5ub3QgdXNlIGl0IGhlcmUuDQogICAgICAgICAgZ3RfY3ZfbG9jYWxl X2phPW5vbmUNCiAgICAgICAgICA7Ow0KICAgICAgICAqKQ0KICAgICAgICAgICMgU2V0dGluZyBM Q19BTEwgaXMgbm90IGVub3VnaC4gTmVlZCB0byBzZXQgTENfVElNRSB0byBlbXB0eSwgYmVjYXVz ZQ0KICAgICAgICAgICMgb3RoZXJ3aXNlIG9uIE1hY09TIFggMTAuMy41IHRoZSBMQ19USU1FPUMg ZnJvbSB0aGUgYmVnaW5uaW5nIG9mIHRoZQ0KICAgICAgICAgICMgY29uZmlndXJlIHNjcmlwdCB3 b3VsZCBvdmVycmlkZSB0aGUgTENfQUxMIHNldHRpbmcuIExpa2V3aXNlIGZvcg0KICAgICAgICAg ICMgTENfQ1RZUEUsIHdoaWNoIGlzIGFsc28gc2V0IGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIGNv bmZpZ3VyZSBzY3JpcHQuDQogICAgICAgICAgIyBUZXN0IGZvciB0aGUgQUlYIGxvY2FsZSBuYW1l Lg0KICAgICAgICAgIGlmIChMQ19BTEw9amFfSlAgTENfVElNRT0gTENfQ1RZUEU9IC4vY29uZnRl c3Q7IGV4aXQpIDI+L2Rldi9udWxsOyB0aGVuDQogICAgICAgICAgICBndF9jdl9sb2NhbGVfamE9 amFfSlANCiAgICAgICAgICBlbHNlDQogICAgICAgICAgICAjIFRlc3QgZm9yIHRoZSBsb2NhbGUg bmFtZSB3aXRoIGV4cGxpY2l0IGVuY29kaW5nIHN1ZmZpeC4NCiAgICAgICAgICAgIGlmIChMQ19B TEw9amFfSlAuRVVDLUpQIExDX1RJTUU9IExDX0NUWVBFPSAuL2NvbmZ0ZXN0OyBleGl0KSAyPi9k ZXYvbnVsbDsgdGhlbg0KICAgICAgICAgICAgICBndF9jdl9sb2NhbGVfamE9amFfSlAuRVVDLUpQ DQogICAgICAgICAgICBlbHNlDQogICAgICAgICAgICAgICMgVGVzdCBmb3IgdGhlIEhQLVVYLCBP U0YvMSwgTmV0QlNEIGxvY2FsZSBuYW1lLg0KICAgICAgICAgICAgICBpZiAoTENfQUxMPWphX0pQ LmV1Y0pQIExDX1RJTUU9IExDX0NUWVBFPSAuL2NvbmZ0ZXN0OyBleGl0KSAyPi9kZXYvbnVsbDsg dGhlbg0KICAgICAgICAgICAgICAgIGd0X2N2X2xvY2FsZV9qYT1qYV9KUC5ldWNKUA0KICAgICAg ICAgICAgICBlbHNlDQogICAgICAgICAgICAgICAgIyBUZXN0IGZvciB0aGUgSVJJWCwgRnJlZUJT RCBsb2NhbGUgbmFtZS4NCiAgICAgICAgICAgICAgICBpZiAoTENfQUxMPWphX0pQLkVVQyBMQ19U SU1FPSBMQ19DVFlQRT0gLi9jb25mdGVzdDsgZXhpdCkgMj4vZGV2L251bGw7IHRoZW4NCiAgICAg ICAgICAgICAgICAgIGd0X2N2X2xvY2FsZV9qYT1qYV9KUC5FVUMNCiAgICAgICAgICAgICAgICBl bHNlDQogICAgICAgICAgICAgICAgICAjIFRlc3QgZm9yIHRoZSBTb2xhcmlzIDcgbG9jYWxlIG5h bWUuDQogICAgICAgICAgICAgICAgICBpZiAoTENfQUxMPWphIExDX1RJTUU9IExDX0NUWVBFPSAu L2NvbmZ0ZXN0OyBleGl0KSAyPi9kZXYvbnVsbDsgdGhlbg0KICAgICAgICAgICAgICAgICAgICBn dF9jdl9sb2NhbGVfamE9amENCiAgICAgICAgICAgICAgICAgIGVsc2UNCiAgICAgICAgICAgICAg ICAgICAgIyBTcGVjaWFsIHRlc3QgZm9yIE5ldEJTRCAxLjYuDQogICAgICAgICAgICAgICAgICAg IGlmIHRlc3QgLWYgL3Vzci9zaGFyZS9sb2NhbGUvamFfSlAuZXVjSlAvTENfQ1RZUEU7IHRoZW4N CiAgICAgICAgICAgICAgICAgICAgICBndF9jdl9sb2NhbGVfamE9amFfSlAuZXVjSlANCiAgICAg ICAgICAgICAgICAgICAgZWxzZQ0KICAgICAgICAgICAgICAgICAgICAgICMgTm9uZSBmb3VuZC4N CiAgICAgICAgICAgICAgICAgICAgICBndF9jdl9sb2NhbGVfamE9bm9uZQ0KICAgICAgICAgICAg ICAgICAgICBmaQ0KICAgICAgICAgICAgICAgICAgZmkNCiAgICAgICAgICAgICAgICBmaQ0KICAg ICAgICAgICAgICBmaQ0KICAgICAgICAgICAgZmkNCiAgICAgICAgICBmaQ0KICAgICAgICAgIDs7 DQogICAgICBlc2FjDQogICAgZmkNCiAgICBybSAtZnIgY29uZnRlc3QqDQoNCmZpDQp7ICRhc19l Y2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGd0X2N2X2xvY2FsZV9q YSIgPiY1DQokYXNfZWNobyAiJGd0X2N2X2xvY2FsZV9qYSIgPiY2OyB9DQogIExPQ0FMRV9KQT0k Z3RfY3ZfbG9jYWxlX2phDQoNCg0KDQoNCg0KICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5l bm8tJExJTkVOT306IGNoZWNraW5nIGZvciBhIHRyYW5zaXRpb25hbCBjaGluZXNlIGxvY2FsZSIg PiY1DQokYXNfZWNob19uICJjaGVja2luZyBmb3IgYSB0cmFuc2l0aW9uYWwgY2hpbmVzZSBsb2Nh bGUuLi4gIiA+JjY7IH0NCmlmICR7Z3RfY3ZfbG9jYWxlX3poX0NOKzp9IGZhbHNlOyB0aGVuIDoN CiAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYNCmVsc2UNCg0KICAgIGNhdCBjb25mZGVmcy5o IC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQNCi8qIGVuZCBjb25mZGVmcy5oLiAgKi8NCg0K I2luY2x1ZGUgPGxvY2FsZS5oPg0KI2luY2x1ZGUgPHN0ZGxpYi5oPg0KI2luY2x1ZGUgPHRpbWUu aD4NCiNpZiBIQVZFX0xBTkdJTkZPX0NPREVTRVQNCiMgaW5jbHVkZSA8bGFuZ2luZm8uaD4NCiNl bmRpZg0KI2luY2x1ZGUgPHN0ZGxpYi5oPg0KI2luY2x1ZGUgPHN0cmluZy5oPg0Kc3RydWN0IHRt IHQ7DQpjaGFyIGJ1ZlsxNl07DQppbnQgbWFpbiAoKQ0Kew0KICBjb25zdCBjaGFyICpwOw0KICAv KiBDaGVjayB3aGV0aGVyIHRoZSBnaXZlbiBsb2NhbGUgbmFtZSBpcyByZWNvZ25pemVkIGJ5IHRo ZSBzeXN0ZW0uICAqLw0KI2lmIChkZWZpbmVkIF9XSU4zMiB8fCBkZWZpbmVkIF9fV0lOMzJfXykg JiYgIWRlZmluZWQgX19DWUdXSU5fXw0KICAvKiBPbiBuYXRpdmUgV2luMzIsIHNldGxvY2FsZShj YXRlZ29yeSwgIiIpIGxvb2tzIGF0IHRoZSBzeXN0ZW0gc2V0dGluZ3MsDQogICAgIG5vdCBhdCB0 aGUgZW52aXJvbm1lbnQgdmFyaWFibGVzLiAgQWxzbywgd2hlbiBhbiBlbmNvZGluZyBzdWZmaXgg c3VjaA0KICAgICBhcyAiLjY1MDAxIiBvciAiLjU0OTM2IiBpcyBzcGVmaWNpZWQsIGl0IHN1Y2Nl ZWRzIGJ1dCBzZXRzIHRoZSBMQ19DVFlQRQ0KICAgICBjYXRlZ29yeSBvZiB0aGUgbG9jYWxlIHRv ICJDIi4gICovDQogIGlmIChzZXRsb2NhbGUgKExDX0FMTCwgZ2V0ZW52ICgiTENfQUxMIikpID09 IE5VTEwNCiAgICAgIHx8IHN0cmNtcCAoc2V0bG9jYWxlIChMQ19DVFlQRSwgTlVMTCksICJDIikg PT0gMCkNCiAgICByZXR1cm4gMTsNCiNlbHNlDQogIGlmIChzZXRsb2NhbGUgKExDX0FMTCwgIiIp ID09IE5VTEwpIHJldHVybiAxOw0KI2VuZGlmDQogIC8qIENoZWNrIHdoZXRoZXIgbmxfbGFuZ2lu Zm8oQ09ERVNFVCkgaXMgbm9uZW1wdHkgYW5kIG5vdCAiQVNDSUkiIG9yICI2NDYiLg0KICAgICBP biBNYWNPUyBYIDEwLjMuNSAoRGFyd2luIDcuNSkgaW4gdGhlIGZyX0ZSIGxvY2FsZSwgbmxfbGFu Z2luZm8oQ09ERVNFVCkNCiAgICAgaXMgZW1wdHksIGFuZCB0aGUgYmVoYXZpb3VyIG9mIFRjbCA4 LjQgaW4gdGhpcyBsb2NhbGUgaXMgbm90IHVzZWZ1bC4NCiAgICAgT24gT3BlbkJTRCA0LjAsIHdo ZW4gYW4gdW5zdXBwb3J0ZWQgbG9jYWxlIGlzIHNwZWNpZmllZCwgc2V0bG9jYWxlKCkNCiAgICAg c3VjY2VlZHMgYnV0IHRoZW4gbmxfbGFuZ2luZm8oQ09ERVNFVCkgaXMgIjY0NiIuIEluIHRoaXMg c2l0dWF0aW9uLA0KICAgICBzb21lIHVuaXQgdGVzdHMgZmFpbC4NCiAgICAgT24gTWlyQlNEIDEw LCB3aGVuIGFuIHVuc3VwcG9ydGVkIGxvY2FsZSBpcyBzcGVjaWZpZWQsIHNldGxvY2FsZSgpDQog ICAgIHN1Y2NlZWRzIGJ1dCB0aGVuIG5sX2xhbmdpbmZvKENPREVTRVQpIGlzICJVVEYtOCIuICAq Lw0KI2lmIEhBVkVfTEFOR0lORk9fQ09ERVNFVA0KICB7DQogICAgY29uc3QgY2hhciAqY3MgPSBu bF9sYW5naW5mbyAoQ09ERVNFVCk7DQogICAgaWYgKGNzWzBdID09ICdcMCcgfHwgc3RyY21wIChj cywgIkFTQ0lJIikgPT0gMCB8fCBzdHJjbXAgKGNzLCAiNjQ2IikgPT0gMA0KICAgICAgICB8fCBz dHJjbXAgKGNzLCAiVVRGLTgiKSA9PSAwKQ0KICAgICAgcmV0dXJuIDE7DQogIH0NCiNlbmRpZg0K I2lmZGVmIF9fQ1lHV0lOX18NCiAgLyogT24gQ3lnd2luLCBhdm9pZCBsb2NhbGUgbmFtZXMgd2l0 aG91dCBlbmNvZGluZyBzdWZmaXgsIGJlY2F1c2UgdGhlDQogICAgIGxvY2FsZV9jaGFyc2V0KCkg ZnVuY3Rpb24gcmVsaWVzIG9uIHRoZSBlbmNvZGluZyBzdWZmaXguICBOb3RlIHRoYXQNCiAgICAg TENfQUxMIGlzIHNldCBvbiB0aGUgY29tbWFuZCBsaW5lLiAgKi8NCiAgaWYgKHN0cmNociAoZ2V0 ZW52ICgiTENfQUxMIiksICcuJykgPT0gTlVMTCkgcmV0dXJuIDE7DQojZW5kaWYNCiAgLyogQ2hl Y2sgd2hldGhlciBpbiBhIG1vbnRoIG5hbWUsIG5vIGJ5dGUgaW4gdGhlIHJhbmdlIDB4ODAuLjB4 OUYgb2NjdXJzLg0KICAgICBUaGlzIGV4Y2x1ZGVzIHRoZSBVVEYtOCBlbmNvZGluZyAoZXhjZXB0 IG9uIE1pckJTRCkuICAqLw0KICB0LnRtX3llYXIgPSAxOTc1IC0gMTkwMDsgdC50bV9tb24gPSAy IC0gMTsgdC50bV9tZGF5ID0gNDsNCiAgaWYgKHN0cmZ0aW1lIChidWYsIHNpemVvZiAoYnVmKSwg IiVCIiwgJnQpIDwgMikgcmV0dXJuIDE7DQogIGZvciAocCA9IGJ1ZjsgKnAgIT0gJ1wwJzsgcCsr KQ0KICAgIGlmICgodW5zaWduZWQgY2hhcikgKnAgPj0gMHg4MCAmJiAodW5zaWduZWQgY2hhcikg KnAgPCAweGEwKQ0KICAgICAgcmV0dXJuIDE7DQogIC8qIENoZWNrIHdoZXRoZXIgYSB0eXBpY2Fs IEdCMTgwMzAgbXVsdGlieXRlIHNlcXVlbmNlIGlzIHJlY29nbml6ZWQgYXMgYQ0KICAgICBzaW5n bGUgd2lkZSBjaGFyYWN0ZXIuICBUaGlzIGV4Y2x1ZGVzIHRoZSBHQjIzMTIgYW5kIEdCSyBlbmNv ZGluZ3MuICAqLw0KICBpZiAobWJsZW4gKCJcMjAzXDA2MlwzMzJcMDY2IiwgNSkgIT0gNCkNCiAg ICByZXR1cm4gMTsNCiAgcmV0dXJuIDA7DQp9DQoNCl9BQ0VPRg0KICAgIGlmIHsgeyBldmFsIGVj aG8gIlwiXCRhc19tZVwiOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcIiRhY19saW5rXCIiOyB9ID4m NQ0KICAoZXZhbCAkYWNfbGluaykgMj4mNQ0KICBhY19zdGF0dXM9JD8NCiAgJGFzX2VjaG8gIiRh c19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1DQogIHRlc3Qg JGFjX3N0YXR1cyA9IDA7IH0gJiYgdGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQ7IHRoZW4NCiAg ICAgIGNhc2UgIiRob3N0X29zIiBpbg0KICAgICAgICAjIEhhbmRsZSBuYXRpdmUgV2luZG93cyBz cGVjaWFsbHksIGJlY2F1c2UgdGhlcmUgc2V0bG9jYWxlKCkgaW50ZXJwcmV0cw0KICAgICAgICAj ICJhciIgYXMgIkFyYWJpYyIgb3IgIkFyYWJpY19TYXVkaSBBcmFiaWEuMTI1NiIsDQogICAgICAg ICMgImZyIiBvciAiZnJhIiBhcyAiRnJlbmNoIiBvciAiRnJlbmNoX0ZyYW5jZS4xMjUyIiwNCiAg ICAgICAgIyAiZ2UiKCEpIG9yICJkZXUiKCEpIGFzICJHZXJtYW4iIG9yICJHZXJtYW5fR2VybWFu eS4xMjUyIiwNCiAgICAgICAgIyAiamEiIGFzICJKYXBhbmVzZSIgb3IgIkphcGFuZXNlX0phcGFu LjkzMiIsDQogICAgICAgICMgYW5kIHNpbWlsYXIuDQogICAgICAgIG1pbmd3KikNCiAgICAgICAg ICAjIFRlc3QgZm9yIHRoZSBoeXBvdGhldGljYWwgbmF0aXZlIFdpbjMyIGxvY2FsZSBuYW1lLg0K ICAgICAgICAgIGlmIChMQ19BTEw9Q2hpbmVzZV9DaGluYS41NDkzNiBMQ19USU1FPSBMQ19DVFlQ RT0gLi9jb25mdGVzdDsgZXhpdCkgMj4vZGV2L251bGw7IHRoZW4NCiAgICAgICAgICAgIGd0X2N2 X2xvY2FsZV96aF9DTj1DaGluZXNlX0NoaW5hLjU0OTM2DQogICAgICAgICAgZWxzZQ0KICAgICAg ICAgICAgIyBOb25lIGZvdW5kLg0KICAgICAgICAgICAgZ3RfY3ZfbG9jYWxlX3poX0NOPW5vbmUN CiAgICAgICAgICBmaQ0KICAgICAgICAgIDs7DQogICAgICAgICopDQogICAgICAgICAgIyBTZXR0 aW5nIExDX0FMTCBpcyBub3QgZW5vdWdoLiBOZWVkIHRvIHNldCBMQ19USU1FIHRvIGVtcHR5LCBi ZWNhdXNlDQogICAgICAgICAgIyBvdGhlcndpc2Ugb24gTWFjT1MgWCAxMC4zLjUgdGhlIExDX1RJ TUU9QyBmcm9tIHRoZSBiZWdpbm5pbmcgb2YgdGhlDQogICAgICAgICAgIyBjb25maWd1cmUgc2Ny aXB0IHdvdWxkIG92ZXJyaWRlIHRoZSBMQ19BTEwgc2V0dGluZy4gTGlrZXdpc2UgZm9yDQogICAg ICAgICAgIyBMQ19DVFlQRSwgd2hpY2ggaXMgYWxzbyBzZXQgYXQgdGhlIGJlZ2lubmluZyBvZiB0 aGUgY29uZmlndXJlIHNjcmlwdC4NCiAgICAgICAgICAjIFRlc3QgZm9yIHRoZSBsb2NhbGUgbmFt ZSB3aXRob3V0IGVuY29kaW5nIHN1ZmZpeC4NCiAgICAgICAgICBpZiAoTENfQUxMPXpoX0NOIExD X1RJTUU9IExDX0NUWVBFPSAuL2NvbmZ0ZXN0OyBleGl0KSAyPi9kZXYvbnVsbDsgdGhlbg0KICAg ICAgICAgICAgZ3RfY3ZfbG9jYWxlX3poX0NOPXpoX0NODQogICAgICAgICAgZWxzZQ0KICAgICAg ICAgICAgIyBUZXN0IGZvciB0aGUgbG9jYWxlIG5hbWUgd2l0aCBleHBsaWNpdCBlbmNvZGluZyBz dWZmaXguDQogICAgICAgICAgICBpZiAoTENfQUxMPXpoX0NOLkdCMTgwMzAgTENfVElNRT0gTENf Q1RZUEU9IC4vY29uZnRlc3Q7IGV4aXQpIDI+L2Rldi9udWxsOyB0aGVuDQogICAgICAgICAgICAg IGd0X2N2X2xvY2FsZV96aF9DTj16aF9DTi5HQjE4MDMwDQogICAgICAgICAgICBlbHNlDQogICAg ICAgICAgICAgICMgTm9uZSBmb3VuZC4NCiAgICAgICAgICAgICAgZ3RfY3ZfbG9jYWxlX3poX0NO PW5vbmUNCiAgICAgICAgICAgIGZpDQogICAgICAgICAgZmkNCiAgICAgICAgICA7Ow0KICAgICAg ZXNhYw0KICAgIGVsc2UNCiAgICAgICMgSWYgdGhlcmUgd2FzIGEgbGluayBlcnJvciwgZHVlIHRv IG1ibGVuKCksIHRoZSBzeXN0ZW0gaXMgc28gb2xkIHRoYXQNCiAgICAgICMgaXQgY2VydGFpbmx5 IGRvZXNuJ3QgaGF2ZSBhIGNoaW5lc2UgbG9jYWxlLg0KICAgICAgZ3RfY3ZfbG9jYWxlX3poX0NO PW5vbmUNCiAgICBmaQ0KICAgIHJtIC1mciBjb25mdGVzdCoNCg0KZmkNCnsgJGFzX2VjaG8gIiRh c19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkZ3RfY3ZfbG9jYWxlX3poX0NOIiA+ JjUNCiRhc19lY2hvICIkZ3RfY3ZfbG9jYWxlX3poX0NOIiA+JjY7IH0NCiAgTE9DQUxFX1pIX0NO PSRndF9jdl9sb2NhbGVfemhfQ04NCg0KDQoNCg0KICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19s aW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBhIGZyZW5jaCBVbmljb2RlIGxvY2FsZSIgPiY1 DQokYXNfZWNob19uICJjaGVja2luZyBmb3IgYSBmcmVuY2ggVW5pY29kZSBsb2NhbGUuLi4gIiA+ JjY7IH0NCmlmICR7Z3RfY3ZfbG9jYWxlX2ZyX3V0ZjgrOn0gZmFsc2U7IHRoZW4gOg0KICAkYXNf ZWNob19uICIoY2FjaGVkKSAiID4mNg0KZWxzZQ0KDQogICAgY2F0IGNvbmZkZWZzLmggLSA8PF9B Q0VPRiA+Y29uZnRlc3QuJGFjX2V4dA0KLyogZW5kIGNvbmZkZWZzLmguICAqLw0KDQojaW5jbHVk ZSA8bG9jYWxlLmg+DQojaW5jbHVkZSA8dGltZS5oPg0KI2lmIEhBVkVfTEFOR0lORk9fQ09ERVNF VA0KIyBpbmNsdWRlIDxsYW5naW5mby5oPg0KI2VuZGlmDQojaW5jbHVkZSA8c3RkbGliLmg+DQoj aW5jbHVkZSA8c3RyaW5nLmg+DQpzdHJ1Y3QgdG0gdDsNCmNoYXIgYnVmWzE2XTsNCmludCBtYWlu ICgpIHsNCiAgLyogT24gQmVPUyBhbmQgSGFpa3UsIGxvY2FsZXMgYXJlIG5vdCBpbXBsZW1lbnRl ZCBpbiBsaWJjLiAgUmF0aGVyLCBsaWJpbnRsDQogICAgIGltaXRhdGVzIGxvY2FsZSBkZXBlbmRl bnQgYmVoYXZpb3VyIGJ5IGxvb2tpbmcgYXQgdGhlIGVudmlyb25tZW50DQogICAgIHZhcmlhYmxl cywgYW5kIGFsbCBsb2NhbGVzIHVzZSB0aGUgVVRGLTggZW5jb2RpbmcuICAqLw0KI2lmICEoZGVm aW5lZCBfX0JFT1NfXyB8fCBkZWZpbmVkIF9fSEFJS1VfXykNCiAgLyogQ2hlY2sgd2hldGhlciB0 aGUgZ2l2ZW4gbG9jYWxlIG5hbWUgaXMgcmVjb2duaXplZCBieSB0aGUgc3lzdGVtLiAgKi8NCiMg aWYgKGRlZmluZWQgX1dJTjMyIHx8IGRlZmluZWQgX19XSU4zMl9fKSAmJiAhZGVmaW5lZCBfX0NZ R1dJTl9fDQogIC8qIE9uIG5hdGl2ZSBXaW4zMiwgc2V0bG9jYWxlKGNhdGVnb3J5LCAiIikgbG9v a3MgYXQgdGhlIHN5c3RlbSBzZXR0aW5ncywNCiAgICAgbm90IGF0IHRoZSBlbnZpcm9ubWVudCB2 YXJpYWJsZXMuICBBbHNvLCB3aGVuIGFuIGVuY29kaW5nIHN1ZmZpeCBzdWNoDQogICAgIGFzICIu NjUwMDEiIG9yICIuNTQ5MzYiIGlzIHNwZWZpY2llZCwgaXQgc3VjY2VlZHMgYnV0IHNldHMgdGhl IExDX0NUWVBFDQogICAgIGNhdGVnb3J5IG9mIHRoZSBsb2NhbGUgdG8gIkMiLiAgKi8NCiAgaWYg KHNldGxvY2FsZSAoTENfQUxMLCBnZXRlbnYgKCJMQ19BTEwiKSkgPT0gTlVMTA0KICAgICAgfHwg c3RyY21wIChzZXRsb2NhbGUgKExDX0NUWVBFLCBOVUxMKSwgIkMiKSA9PSAwKQ0KICAgIHJldHVy biAxOw0KIyBlbHNlDQogIGlmIChzZXRsb2NhbGUgKExDX0FMTCwgIiIpID09IE5VTEwpIHJldHVy biAxOw0KIyBlbmRpZg0KICAvKiBDaGVjayB3aGV0aGVyIG5sX2xhbmdpbmZvKENPREVTRVQpIGlz IG5vbmVtcHR5IGFuZCBub3QgIkFTQ0lJIiBvciAiNjQ2Ii4NCiAgICAgT24gTWFjT1MgWCAxMC4z LjUgKERhcndpbiA3LjUpIGluIHRoZSBmcl9GUiBsb2NhbGUsIG5sX2xhbmdpbmZvKENPREVTRVQp DQogICAgIGlzIGVtcHR5LCBhbmQgdGhlIGJlaGF2aW91ciBvZiBUY2wgOC40IGluIHRoaXMgbG9j YWxlIGlzIG5vdCB1c2VmdWwuDQogICAgIE9uIE9wZW5CU0QgNC4wLCB3aGVuIGFuIHVuc3VwcG9y dGVkIGxvY2FsZSBpcyBzcGVjaWZpZWQsIHNldGxvY2FsZSgpDQogICAgIHN1Y2NlZWRzIGJ1dCB0 aGVuIG5sX2xhbmdpbmZvKENPREVTRVQpIGlzICI2NDYiLiBJbiB0aGlzIHNpdHVhdGlvbiwNCiAg ICAgc29tZSB1bml0IHRlc3RzIGZhaWwuICAqLw0KIyBpZiBIQVZFX0xBTkdJTkZPX0NPREVTRVQN CiAgew0KICAgIGNvbnN0IGNoYXIgKmNzID0gbmxfbGFuZ2luZm8gKENPREVTRVQpOw0KICAgIGlm IChjc1swXSA9PSAnXDAnIHx8IHN0cmNtcCAoY3MsICJBU0NJSSIpID09IDAgfHwgc3RyY21wIChj cywgIjY0NiIpID09IDApDQogICAgICByZXR1cm4gMTsNCiAgfQ0KIyBlbmRpZg0KIyBpZmRlZiBf X0NZR1dJTl9fDQogIC8qIE9uIEN5Z3dpbiwgYXZvaWQgbG9jYWxlIG5hbWVzIHdpdGhvdXQgZW5j b2Rpbmcgc3VmZml4LCBiZWNhdXNlIHRoZQ0KICAgICBsb2NhbGVfY2hhcnNldCgpIGZ1bmN0aW9u IHJlbGllcyBvbiB0aGUgZW5jb2Rpbmcgc3VmZml4LiAgTm90ZSB0aGF0DQogICAgIExDX0FMTCBp cyBzZXQgb24gdGhlIGNvbW1hbmQgbGluZS4gICovDQogIGlmIChzdHJjaHIgKGdldGVudiAoIkxD X0FMTCIpLCAnLicpID09IE5VTEwpIHJldHVybiAxOw0KIyBlbmRpZg0KICAvKiBDaGVjayB3aGV0 aGVyIGluIHRoZSBhYmJyZXZpYXRpb24gb2YgdGhlIHNlY29uZCBtb250aCwgdGhlIHNlY29uZA0K ICAgICBjaGFyYWN0ZXIgKHNob3VsZCBiZSBVKzAwRTk6IExBVElOIFNNQUxMIExFVFRFUiBFIFdJ VEggQUNVVEUpIGlzDQogICAgIHR3byBieXRlcyBsb25nLCB3aXRoIFVURi04IGVuY29kaW5nLiAg Ki8NCiAgdC50bV95ZWFyID0gMTk3NSAtIDE5MDA7IHQudG1fbW9uID0gMiAtIDE7IHQudG1fbWRh eSA9IDQ7DQogIGlmIChzdHJmdGltZSAoYnVmLCBzaXplb2YgKGJ1ZiksICIlYiIsICZ0KSA8IDQN CiAgICAgIHx8IGJ1ZlsxXSAhPSAoY2hhcikgMHhjMyB8fCBidWZbMl0gIT0gKGNoYXIpIDB4YTkg fHwgYnVmWzNdICE9ICd2JykNCiAgICByZXR1cm4gMTsNCiNlbmRpZg0KICAvKiBDaGVjayB3aGV0 aGVyIHRoZSBkZWNpbWFsIHNlcGFyYXRvciBpcyBhIGNvbW1hLg0KICAgICBPbiBOZXRCU0QgMy4w IGluIHRoZSBmcl9GUi5JU084ODU5LTEgbG9jYWxlLCBsb2NhbGVjb252KCktPmRlY2ltYWxfcG9p bnQNCiAgICAgYXJlIG5sX2xhbmdpbmZvKFJBRElYQ0hBUikgYXJlIGJvdGggIi4iLiAgKi8NCiAg aWYgKGxvY2FsZWNvbnYgKCkgLT5kZWNpbWFsX3BvaW50WzBdICE9ICcsJykgcmV0dXJuIDE7DQog IHJldHVybiAwOw0KfQ0KDQpfQUNFT0YNCiAgICBpZiB7IHsgZXZhbCBlY2hvICJcIlwkYXNfbWVc Ijoke2FzX2xpbmVuby0kTElORU5PfTogXCIkYWNfbGlua1wiIjsgfSA+JjUNCiAgKGV2YWwgJGFj X2xpbmspIDI+JjUNCiAgYWNfc3RhdHVzPSQ/DQogICRhc19lY2hvICIkYXNfbWU6JHthc19saW5l bm8tJExJTkVOT306IFwkPyA9ICRhY19zdGF0dXMiID4mNQ0KICB0ZXN0ICRhY19zdGF0dXMgPSAw OyB9ICYmIHRlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0OyB0aGVuDQogICAgICBjYXNlICIkaG9z dF9vcyIgaW4NCiAgICAgICAgIyBIYW5kbGUgbmF0aXZlIFdpbmRvd3Mgc3BlY2lhbGx5LCBiZWNh dXNlIHRoZXJlIHNldGxvY2FsZSgpIGludGVycHJldHMNCiAgICAgICAgIyAiYXIiIGFzICJBcmFi aWMiIG9yICJBcmFiaWNfU2F1ZGkgQXJhYmlhLjEyNTYiLA0KICAgICAgICAjICJmciIgb3IgImZy YSIgYXMgIkZyZW5jaCIgb3IgIkZyZW5jaF9GcmFuY2UuMTI1MiIsDQogICAgICAgICMgImdlIigh KSBvciAiZGV1IighKSBhcyAiR2VybWFuIiBvciAiR2VybWFuX0dlcm1hbnkuMTI1MiIsDQogICAg ICAgICMgImphIiBhcyAiSmFwYW5lc2UiIG9yICJKYXBhbmVzZV9KYXBhbi45MzIiLA0KICAgICAg ICAjIGFuZCBzaW1pbGFyLg0KICAgICAgICBtaW5ndyopDQogICAgICAgICAgIyBUZXN0IGZvciB0 aGUgaHlwb3RoZXRpY2FsIG5hdGl2ZSBXaW4zMiBsb2NhbGUgbmFtZS4NCiAgICAgICAgICBpZiAo TENfQUxMPUZyZW5jaF9GcmFuY2UuNjUwMDEgTENfVElNRT0gTENfQ1RZUEU9IC4vY29uZnRlc3Q7 IGV4aXQpIDI+L2Rldi9udWxsOyB0aGVuDQogICAgICAgICAgICBndF9jdl9sb2NhbGVfZnJfdXRm OD1GcmVuY2hfRnJhbmNlLjY1MDAxDQogICAgICAgICAgZWxzZQ0KICAgICAgICAgICAgIyBOb25l IGZvdW5kLg0KICAgICAgICAgICAgZ3RfY3ZfbG9jYWxlX2ZyX3V0Zjg9bm9uZQ0KICAgICAgICAg IGZpDQogICAgICAgICAgOzsNCiAgICAgICAgKikNCiAgICAgICAgICAjIFNldHRpbmcgTENfQUxM IGlzIG5vdCBlbm91Z2guIE5lZWQgdG8gc2V0IExDX1RJTUUgdG8gZW1wdHksIGJlY2F1c2UNCiAg ICAgICAgICAjIG90aGVyd2lzZSBvbiBNYWNPUyBYIDEwLjMuNSB0aGUgTENfVElNRT1DIGZyb20g dGhlIGJlZ2lubmluZyBvZiB0aGUNCiAgICAgICAgICAjIGNvbmZpZ3VyZSBzY3JpcHQgd291bGQg b3ZlcnJpZGUgdGhlIExDX0FMTCBzZXR0aW5nLiBMaWtld2lzZSBmb3INCiAgICAgICAgICAjIExD X0NUWVBFLCB3aGljaCBpcyBhbHNvIHNldCBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBjb25maWd1 cmUgc2NyaXB0Lg0KICAgICAgICAgICMgVGVzdCBmb3IgdGhlIHVzdWFsIGxvY2FsZSBuYW1lLg0K ICAgICAgICAgIGlmIChMQ19BTEw9ZnJfRlIgTENfVElNRT0gTENfQ1RZUEU9IC4vY29uZnRlc3Q7 IGV4aXQpIDI+L2Rldi9udWxsOyB0aGVuDQogICAgICAgICAgICBndF9jdl9sb2NhbGVfZnJfdXRm OD1mcl9GUg0KICAgICAgICAgIGVsc2UNCiAgICAgICAgICAgICMgVGVzdCBmb3IgdGhlIGxvY2Fs ZSBuYW1lIHdpdGggZXhwbGljaXQgZW5jb2Rpbmcgc3VmZml4Lg0KICAgICAgICAgICAgaWYgKExD X0FMTD1mcl9GUi5VVEYtOCBMQ19USU1FPSBMQ19DVFlQRT0gLi9jb25mdGVzdDsgZXhpdCkgMj4v ZGV2L251bGw7IHRoZW4NCiAgICAgICAgICAgICAgZ3RfY3ZfbG9jYWxlX2ZyX3V0Zjg9ZnJfRlIu VVRGLTgNCiAgICAgICAgICAgIGVsc2UNCiAgICAgICAgICAgICAgIyBUZXN0IGZvciB0aGUgU29s YXJpcyA3IGxvY2FsZSBuYW1lLg0KICAgICAgICAgICAgICBpZiAoTENfQUxMPWZyLlVURi04IExD X1RJTUU9IExDX0NUWVBFPSAuL2NvbmZ0ZXN0OyBleGl0KSAyPi9kZXYvbnVsbDsgdGhlbg0KICAg ICAgICAgICAgICAgIGd0X2N2X2xvY2FsZV9mcl91dGY4PWZyLlVURi04DQogICAgICAgICAgICAg IGVsc2UNCiAgICAgICAgICAgICAgICAjIE5vbmUgZm91bmQuDQogICAgICAgICAgICAgICAgZ3Rf Y3ZfbG9jYWxlX2ZyX3V0Zjg9bm9uZQ0KICAgICAgICAgICAgICBmaQ0KICAgICAgICAgICAgZmkN CiAgICAgICAgICBmaQ0KICAgICAgICAgIDs7DQogICAgICBlc2FjDQogICAgZmkNCiAgICBybSAt ZnIgY29uZnRlc3QqDQoNCmZpDQp7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVO T306IHJlc3VsdDogJGd0X2N2X2xvY2FsZV9mcl91dGY4IiA+JjUNCiRhc19lY2hvICIkZ3RfY3Zf bG9jYWxlX2ZyX3V0ZjgiID4mNjsgfQ0KICBMT0NBTEVfRlJfVVRGOD0kZ3RfY3ZfbG9jYWxlX2Zy X3V0ZjgNCg0KDQoNCg0KDQogIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5P fTogY2hlY2tpbmcgZm9yIGEgdHJhbnNpdGlvbmFsIGNoaW5lc2UgbG9jYWxlIiA+JjUNCiRhc19l Y2hvX24gImNoZWNraW5nIGZvciBhIHRyYW5zaXRpb25hbCBjaGluZXNlIGxvY2FsZS4uLiAiID4m NjsgfQ0KaWYgJHtndF9jdl9sb2NhbGVfemhfQ04rOn0gZmFsc2U7IHRoZW4gOg0KICAkYXNfZWNo b19uICIoY2FjaGVkKSAiID4mNg0KZWxzZQ0KDQogICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VP RiA+Y29uZnRlc3QuJGFjX2V4dA0KLyogZW5kIGNvbmZkZWZzLmguICAqLw0KDQojaW5jbHVkZSA8 bG9jYWxlLmg+DQojaW5jbHVkZSA8c3RkbGliLmg+DQojaW5jbHVkZSA8dGltZS5oPg0KI2lmIEhB VkVfTEFOR0lORk9fQ09ERVNFVA0KIyBpbmNsdWRlIDxsYW5naW5mby5oPg0KI2VuZGlmDQojaW5j bHVkZSA8c3RkbGliLmg+DQojaW5jbHVkZSA8c3RyaW5nLmg+DQpzdHJ1Y3QgdG0gdDsNCmNoYXIg YnVmWzE2XTsNCmludCBtYWluICgpDQp7DQogIGNvbnN0IGNoYXIgKnA7DQogIC8qIENoZWNrIHdo ZXRoZXIgdGhlIGdpdmVuIGxvY2FsZSBuYW1lIGlzIHJlY29nbml6ZWQgYnkgdGhlIHN5c3RlbS4g ICovDQojaWYgKGRlZmluZWQgX1dJTjMyIHx8IGRlZmluZWQgX19XSU4zMl9fKSAmJiAhZGVmaW5l ZCBfX0NZR1dJTl9fDQogIC8qIE9uIG5hdGl2ZSBXaW4zMiwgc2V0bG9jYWxlKGNhdGVnb3J5LCAi IikgbG9va3MgYXQgdGhlIHN5c3RlbSBzZXR0aW5ncywNCiAgICAgbm90IGF0IHRoZSBlbnZpcm9u bWVudCB2YXJpYWJsZXMuICBBbHNvLCB3aGVuIGFuIGVuY29kaW5nIHN1ZmZpeCBzdWNoDQogICAg IGFzICIuNjUwMDEiIG9yICIuNTQ5MzYiIGlzIHNwZWZpY2llZCwgaXQgc3VjY2VlZHMgYnV0IHNl dHMgdGhlIExDX0NUWVBFDQogICAgIGNhdGVnb3J5IG9mIHRoZSBsb2NhbGUgdG8gIkMiLiAgKi8N CiAgaWYgKHNldGxvY2FsZSAoTENfQUxMLCBnZXRlbnYgKCJMQ19BTEwiKSkgPT0gTlVMTA0KICAg ICAgfHwgc3RyY21wIChzZXRsb2NhbGUgKExDX0NUWVBFLCBOVUxMKSwgIkMiKSA9PSAwKQ0KICAg IHJldHVybiAxOw0KI2Vsc2UNCiAgaWYgKHNldGxvY2FsZSAoTENfQUxMLCAiIikgPT0gTlVMTCkg cmV0dXJuIDE7DQojZW5kaWYNCiAgLyogQ2hlY2sgd2hldGhlciBubF9sYW5naW5mbyhDT0RFU0VU KSBpcyBub25lbXB0eSBhbmQgbm90ICJBU0NJSSIgb3IgIjY0NiIuDQogICAgIE9uIE1hY09TIFgg MTAuMy41IChEYXJ3aW4gNy41KSBpbiB0aGUgZnJfRlIgbG9jYWxlLCBubF9sYW5naW5mbyhDT0RF U0VUKQ0KICAgICBpcyBlbXB0eSwgYW5kIHRoZSBiZWhhdmlvdXIgb2YgVGNsIDguNCBpbiB0aGlz IGxvY2FsZSBpcyBub3QgdXNlZnVsLg0KICAgICBPbiBPcGVuQlNEIDQuMCwgd2hlbiBhbiB1bnN1 cHBvcnRlZCBsb2NhbGUgaXMgc3BlY2lmaWVkLCBzZXRsb2NhbGUoKQ0KICAgICBzdWNjZWVkcyBi dXQgdGhlbiBubF9sYW5naW5mbyhDT0RFU0VUKSBpcyAiNjQ2Ii4gSW4gdGhpcyBzaXR1YXRpb24s DQogICAgIHNvbWUgdW5pdCB0ZXN0cyBmYWlsLg0KICAgICBPbiBNaXJCU0QgMTAsIHdoZW4gYW4g dW5zdXBwb3J0ZWQgbG9jYWxlIGlzIHNwZWNpZmllZCwgc2V0bG9jYWxlKCkNCiAgICAgc3VjY2Vl ZHMgYnV0IHRoZW4gbmxfbGFuZ2luZm8oQ09ERVNFVCkgaXMgIlVURi04Ii4gICovDQojaWYgSEFW RV9MQU5HSU5GT19DT0RFU0VUDQogIHsNCiAgICBjb25zdCBjaGFyICpjcyA9IG5sX2xhbmdpbmZv IChDT0RFU0VUKTsNCiAgICBpZiAoY3NbMF0gPT0gJ1wwJyB8fCBzdHJjbXAgKGNzLCAiQVNDSUki KSA9PSAwIHx8IHN0cmNtcCAoY3MsICI2NDYiKSA9PSAwDQogICAgICAgIHx8IHN0cmNtcCAoY3Ms ICJVVEYtOCIpID09IDApDQogICAgICByZXR1cm4gMTsNCiAgfQ0KI2VuZGlmDQojaWZkZWYgX19D WUdXSU5fXw0KICAvKiBPbiBDeWd3aW4sIGF2b2lkIGxvY2FsZSBuYW1lcyB3aXRob3V0IGVuY29k aW5nIHN1ZmZpeCwgYmVjYXVzZSB0aGUNCiAgICAgbG9jYWxlX2NoYXJzZXQoKSBmdW5jdGlvbiBy ZWxpZXMgb24gdGhlIGVuY29kaW5nIHN1ZmZpeC4gIE5vdGUgdGhhdA0KICAgICBMQ19BTEwgaXMg c2V0IG9uIHRoZSBjb21tYW5kIGxpbmUuICAqLw0KICBpZiAoc3RyY2hyIChnZXRlbnYgKCJMQ19B TEwiKSwgJy4nKSA9PSBOVUxMKSByZXR1cm4gMTsNCiNlbmRpZg0KICAvKiBDaGVjayB3aGV0aGVy IGluIGEgbW9udGggbmFtZSwgbm8gYnl0ZSBpbiB0aGUgcmFuZ2UgMHg4MC4uMHg5RiBvY2N1cnMu DQogICAgIFRoaXMgZXhjbHVkZXMgdGhlIFVURi04IGVuY29kaW5nIChleGNlcHQgb24gTWlyQlNE KS4gICovDQogIHQudG1feWVhciA9IDE5NzUgLSAxOTAwOyB0LnRtX21vbiA9IDIgLSAxOyB0LnRt X21kYXkgPSA0Ow0KICBpZiAoc3RyZnRpbWUgKGJ1Ziwgc2l6ZW9mIChidWYpLCAiJUIiLCAmdCkg PCAyKSByZXR1cm4gMTsNCiAgZm9yIChwID0gYnVmOyAqcCAhPSAnXDAnOyBwKyspDQogICAgaWYg KCh1bnNpZ25lZCBjaGFyKSAqcCA+PSAweDgwICYmICh1bnNpZ25lZCBjaGFyKSAqcCA8IDB4YTAp DQogICAgICByZXR1cm4gMTsNCiAgLyogQ2hlY2sgd2hldGhlciBhIHR5cGljYWwgR0IxODAzMCBt dWx0aWJ5dGUgc2VxdWVuY2UgaXMgcmVjb2duaXplZCBhcyBhDQogICAgIHNpbmdsZSB3aWRlIGNo YXJhY3Rlci4gIFRoaXMgZXhjbHVkZXMgdGhlIEdCMjMxMiBhbmQgR0JLIGVuY29kaW5ncy4gICov DQogIGlmIChtYmxlbiAoIlwyMDNcMDYyXDMzMlwwNjYiLCA1KSAhPSA0KQ0KICAgIHJldHVybiAx Ow0KICByZXR1cm4gMDsNCn0NCg0KX0FDRU9GDQogICAgaWYgeyB7IGV2YWwgZWNobyAiXCJcJGFz X21lXCI6JHthc19saW5lbm8tJExJTkVOT306IFwiJGFjX2xpbmtcIiI7IH0gPiY1DQogIChldmFs ICRhY19saW5rKSAyPiY1DQogIGFjX3N0YXR1cz0kPw0KICAkYXNfZWNobyAiJGFzX21lOiR7YXNf bGluZW5vLSRMSU5FTk99OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUNCiAgdGVzdCAkYWNfc3RhdHVz ID0gMDsgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dDsgdGhlbg0KICAgICAgY2FzZSAi JGhvc3Rfb3MiIGluDQogICAgICAgICMgSGFuZGxlIG5hdGl2ZSBXaW5kb3dzIHNwZWNpYWxseSwg YmVjYXVzZSB0aGVyZSBzZXRsb2NhbGUoKSBpbnRlcnByZXRzDQogICAgICAgICMgImFyIiBhcyAi QXJhYmljIiBvciAiQXJhYmljX1NhdWRpIEFyYWJpYS4xMjU2IiwNCiAgICAgICAgIyAiZnIiIG9y ICJmcmEiIGFzICJGcmVuY2giIG9yICJGcmVuY2hfRnJhbmNlLjEyNTIiLA0KICAgICAgICAjICJn ZSIoISkgb3IgImRldSIoISkgYXMgIkdlcm1hbiIgb3IgIkdlcm1hbl9HZXJtYW55LjEyNTIiLA0K ICAgICAgICAjICJqYSIgYXMgIkphcGFuZXNlIiBvciAiSmFwYW5lc2VfSmFwYW4uOTMyIiwNCiAg ICAgICAgIyBhbmQgc2ltaWxhci4NCiAgICAgICAgbWluZ3cqKQ0KICAgICAgICAgICMgVGVzdCBm b3IgdGhlIGh5cG90aGV0aWNhbCBuYXRpdmUgV2luMzIgbG9jYWxlIG5hbWUuDQogICAgICAgICAg aWYgKExDX0FMTD1DaGluZXNlX0NoaW5hLjU0OTM2IExDX1RJTUU9IExDX0NUWVBFPSAuL2NvbmZ0 ZXN0OyBleGl0KSAyPi9kZXYvbnVsbDsgdGhlbg0KICAgICAgICAgICAgZ3RfY3ZfbG9jYWxlX3po X0NOPUNoaW5lc2VfQ2hpbmEuNTQ5MzYNCiAgICAgICAgICBlbHNlDQogICAgICAgICAgICAjIE5v bmUgZm91bmQuDQogICAgICAgICAgICBndF9jdl9sb2NhbGVfemhfQ049bm9uZQ0KICAgICAgICAg IGZpDQogICAgICAgICAgOzsNCiAgICAgICAgKikNCiAgICAgICAgICAjIFNldHRpbmcgTENfQUxM IGlzIG5vdCBlbm91Z2guIE5lZWQgdG8gc2V0IExDX1RJTUUgdG8gZW1wdHksIGJlY2F1c2UNCiAg ICAgICAgICAjIG90aGVyd2lzZSBvbiBNYWNPUyBYIDEwLjMuNSB0aGUgTENfVElNRT1DIGZyb20g dGhlIGJlZ2lubmluZyBvZiB0aGUNCiAgICAgICAgICAjIGNvbmZpZ3VyZSBzY3JpcHQgd291bGQg b3ZlcnJpZGUgdGhlIExDX0FMTCBzZXR0aW5nLiBMaWtld2lzZSBmb3INCiAgICAgICAgICAjIExD X0NUWVBFLCB3aGljaCBpcyBhbHNvIHNldCBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBjb25maWd1 cmUgc2NyaXB0Lg0KICAgICAgICAgICMgVGVzdCBmb3IgdGhlIGxvY2FsZSBuYW1lIHdpdGhvdXQg ZW5jb2Rpbmcgc3VmZml4Lg0KICAgICAgICAgIGlmIChMQ19BTEw9emhfQ04gTENfVElNRT0gTENf Q1RZUEU9IC4vY29uZnRlc3Q7IGV4aXQpIDI+L2Rldi9udWxsOyB0aGVuDQogICAgICAgICAgICBn dF9jdl9sb2NhbGVfemhfQ049emhfQ04NCiAgICAgICAgICBlbHNlDQogICAgICAgICAgICAjIFRl c3QgZm9yIHRoZSBsb2NhbGUgbmFtZSB3aXRoIGV4cGxpY2l0IGVuY29kaW5nIHN1ZmZpeC4NCiAg ICAgICAgICAgIGlmIChMQ19BTEw9emhfQ04uR0IxODAzMCBMQ19USU1FPSBMQ19DVFlQRT0gLi9j b25mdGVzdDsgZXhpdCkgMj4vZGV2L251bGw7IHRoZW4NCiAgICAgICAgICAgICAgZ3RfY3ZfbG9j YWxlX3poX0NOPXpoX0NOLkdCMTgwMzANCiAgICAgICAgICAgIGVsc2UNCiAgICAgICAgICAgICAg IyBOb25lIGZvdW5kLg0KICAgICAgICAgICAgICBndF9jdl9sb2NhbGVfemhfQ049bm9uZQ0KICAg ICAgICAgICAgZmkNCiAgICAgICAgICBmaQ0KICAgICAgICAgIDs7DQogICAgICBlc2FjDQogICAg ZWxzZQ0KICAgICAgIyBJZiB0aGVyZSB3YXMgYSBsaW5rIGVycm9yLCBkdWUgdG8gbWJsZW4oKSwg dGhlIHN5c3RlbSBpcyBzbyBvbGQgdGhhdA0KICAgICAgIyBpdCBjZXJ0YWlubHkgZG9lc24ndCBo YXZlIGEgY2hpbmVzZSBsb2NhbGUuDQogICAgICBndF9jdl9sb2NhbGVfemhfQ049bm9uZQ0KICAg IGZpDQogICAgcm0gLWZyIGNvbmZ0ZXN0Kg0KDQpmaQ0KeyAkYXNfZWNobyAiJGFzX21lOiR7YXNf bGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRndF9jdl9sb2NhbGVfemhfQ04iID4mNQ0KJGFzX2Vj aG8gIiRndF9jdl9sb2NhbGVfemhfQ04iID4mNjsgfQ0KICBMT0NBTEVfWkhfQ049JGd0X2N2X2xv Y2FsZV96aF9DTg0KDQoNCg0KDQoNCiAgIyBDaGVjayBmb3IgbW1hcCgpLiBEb24ndCB1c2UgQUNf RlVOQ19NTUFQLCBiZWNhdXNlIGl0IGNoZWNrcyB0b28gbXVjaDogaXQNCiAgIyBmYWlscyBvbiBI UC1VWCAxMSwgYmVjYXVzZSBNQVBfRklYRUQgbWFwcGluZ3MgZG8gbm90IHdvcmsuIEJ1dCB0aGlz IGlzDQogICMgaXJyZWxldmFudCBmb3IgYW5vbnltb3VzIG1hcHBpbmdzLg0KICBhY19mbl9jX2No ZWNrX2Z1bmMgIiRMSU5FTk8iICJtbWFwIiAiYWNfY3ZfZnVuY19tbWFwIg0KaWYgdGVzdCAieCRh Y19jdl9mdW5jX21tYXAiID0geHllczsgdGhlbiA6DQogIGdsX2hhdmVfbW1hcD15ZXMNCmVsc2UN CiAgZ2xfaGF2ZV9tbWFwPW5vDQpmaQ0KDQoNCiAgIyBUcnkgdG8gYWxsb3cgTUFQX0FOT05ZTU9V Uy4NCiAgZ2xfaGF2ZV9tbWFwX2Fub255bW91cz1ubw0KICBpZiB0ZXN0ICRnbF9oYXZlX21tYXAg PSB5ZXM7IHRoZW4NCiAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306 IGNoZWNraW5nIGZvciBNQVBfQU5PTllNT1VTIiA+JjUNCiRhc19lY2hvX24gImNoZWNraW5nIGZv ciBNQVBfQU5PTllNT1VTLi4uICIgPiY2OyB9DQogICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VP RiA+Y29uZnRlc3QuJGFjX2V4dA0KLyogZW5kIGNvbmZkZWZzLmguICAqLw0KDQojaW5jbHVkZSA8 c3lzL21tYW4uaD4NCiNpZmRlZiBNQVBfQU5PTllNT1VTDQogICAgSSBjYW50IGlkZW50aWZ5IHRo aXMgbWFwLg0KI2VuZGlmDQoNCl9BQ0VPRg0KaWYgKGV2YWwgIiRhY19jcHAgY29uZnRlc3QuJGFj X2V4dCIpIDI+JjUgfA0KICAkRUdSRVAgIkkgY2FudCBpZGVudGlmeSB0aGlzIG1hcC4iID4vZGV2 L251bGwgMj4mMTsgdGhlbiA6DQogIGdsX2hhdmVfbW1hcF9hbm9ueW1vdXM9eWVzDQpmaQ0Kcm0g LWYgY29uZnRlc3QqDQoNCiAgICBpZiB0ZXN0ICRnbF9oYXZlX21tYXBfYW5vbnltb3VzICE9IHll czsgdGhlbg0KICAgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4 dA0KLyogZW5kIGNvbmZkZWZzLmguICAqLw0KDQojaW5jbHVkZSA8c3lzL21tYW4uaD4NCiNpZmRl ZiBNQVBfQU5PTg0KICAgIEkgY2FudCBpZGVudGlmeSB0aGlzIG1hcC4NCiNlbmRpZg0KDQpfQUNF T0YNCmlmIChldmFsICIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQiKSAyPiY1IHwNCiAgJEVHUkVQ ICJJIGNhbnQgaWRlbnRpZnkgdGhpcyBtYXAuIiA+L2Rldi9udWxsIDI+JjE7IHRoZW4gOg0KDQok YXNfZWNobyAiI2RlZmluZSBNQVBfQU5PTllNT1VTIE1BUF9BTk9OIiA+PmNvbmZkZWZzLmgNCg0K ICAgICAgICAgZ2xfaGF2ZV9tbWFwX2Fub255bW91cz15ZXMNCmZpDQpybSAtZiBjb25mdGVzdCoN Cg0KICAgIGZpDQogICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBy ZXN1bHQ6ICRnbF9oYXZlX21tYXBfYW5vbnltb3VzIiA+JjUNCiRhc19lY2hvICIkZ2xfaGF2ZV9t bWFwX2Fub255bW91cyIgPiY2OyB9DQogICAgaWYgdGVzdCAkZ2xfaGF2ZV9tbWFwX2Fub255bW91 cyA9IHllczsgdGhlbg0KDQokYXNfZWNobyAiI2RlZmluZSBIQVZFX01BUF9BTk9OWU1PVVMgMSIg Pj5jb25mZGVmcy5oDQoNCiAgICBmaQ0KICBmaQ0KDQoNCg0KDQoNCg0KICAjIENoZWNrIGZvciBt bWFwKCkuIERvbid0IHVzZSBBQ19GVU5DX01NQVAsIGJlY2F1c2UgaXQgY2hlY2tzIHRvbyBtdWNo OiBpdA0KICAjIGZhaWxzIG9uIEhQLVVYIDExLCBiZWNhdXNlIE1BUF9GSVhFRCBtYXBwaW5ncyBk byBub3Qgd29yay4gQnV0IHRoaXMgaXMNCiAgIyBpcnJlbGV2YW50IGZvciBhbm9ueW1vdXMgbWFw cGluZ3MuDQogIGFjX2ZuX2NfY2hlY2tfZnVuYyAiJExJTkVOTyIgIm1tYXAiICJhY19jdl9mdW5j X21tYXAiDQppZiB0ZXN0ICJ4JGFjX2N2X2Z1bmNfbW1hcCIgPSB4eWVzOyB0aGVuIDoNCiAgZ2xf aGF2ZV9tbWFwPXllcw0KZWxzZQ0KICBnbF9oYXZlX21tYXA9bm8NCmZpDQoNCg0KICAjIFRyeSB0 byBhbGxvdyBNQVBfQU5PTllNT1VTLg0KICBnbF9oYXZlX21tYXBfYW5vbnltb3VzPW5vDQogIGlm IHRlc3QgJGdsX2hhdmVfbW1hcCA9IHllczsgdGhlbg0KICAgIHsgJGFzX2VjaG8gIiRhc19tZTok e2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIE1BUF9BTk9OWU1PVVMiID4mNQ0KJGFz X2VjaG9fbiAiY2hlY2tpbmcgZm9yIE1BUF9BTk9OWU1PVVMuLi4gIiA+JjY7IH0NCiAgICBjYXQg Y29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0DQovKiBlbmQgY29uZmRlZnMu aC4gICovDQoNCiNpbmNsdWRlIDxzeXMvbW1hbi5oPg0KI2lmZGVmIE1BUF9BTk9OWU1PVVMNCiAg ICBJIGNhbnQgaWRlbnRpZnkgdGhpcyBtYXAuDQojZW5kaWYNCg0KX0FDRU9GDQppZiAoZXZhbCAi JGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0IikgMj4mNSB8DQogICRFR1JFUCAiSSBjYW50IGlkZW50 aWZ5IHRoaXMgbWFwLiIgPi9kZXYvbnVsbCAyPiYxOyB0aGVuIDoNCiAgZ2xfaGF2ZV9tbWFwX2Fu b255bW91cz15ZXMNCmZpDQpybSAtZiBjb25mdGVzdCoNCg0KICAgIGlmIHRlc3QgJGdsX2hhdmVf bW1hcF9hbm9ueW1vdXMgIT0geWVzOyB0aGVuDQogICAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FD RU9GID5jb25mdGVzdC4kYWNfZXh0DQovKiBlbmQgY29uZmRlZnMuaC4gICovDQoNCiNpbmNsdWRl IDxzeXMvbW1hbi5oPg0KI2lmZGVmIE1BUF9BTk9ODQogICAgSSBjYW50IGlkZW50aWZ5IHRoaXMg bWFwLg0KI2VuZGlmDQoNCl9BQ0VPRg0KaWYgKGV2YWwgIiRhY19jcHAgY29uZnRlc3QuJGFjX2V4 dCIpIDI+JjUgfA0KICAkRUdSRVAgIkkgY2FudCBpZGVudGlmeSB0aGlzIG1hcC4iID4vZGV2L251 bGwgMj4mMTsgdGhlbiA6DQoNCiRhc19lY2hvICIjZGVmaW5lIE1BUF9BTk9OWU1PVVMgTUFQX0FO T04iID4+Y29uZmRlZnMuaA0KDQogICAgICAgICBnbF9oYXZlX21tYXBfYW5vbnltb3VzPXllcw0K ZmkNCnJtIC1mIGNvbmZ0ZXN0Kg0KDQogICAgZmkNCiAgICB7ICRhc19lY2hvICIkYXNfbWU6JHth c19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGdsX2hhdmVfbW1hcF9hbm9ueW1vdXMiID4mNQ0K JGFzX2VjaG8gIiRnbF9oYXZlX21tYXBfYW5vbnltb3VzIiA+JjY7IH0NCiAgICBpZiB0ZXN0ICRn bF9oYXZlX21tYXBfYW5vbnltb3VzID0geWVzOyB0aGVuDQoNCiRhc19lY2hvICIjZGVmaW5lIEhB VkVfTUFQX0FOT05ZTU9VUyAxIiA+PmNvbmZkZWZzLmgNCg0KICAgIGZpDQogIGZpDQoNCg0KDQoN Cg0KDQogICMgQ2hlY2sgZm9yIG1tYXAoKS4gRG9uJ3QgdXNlIEFDX0ZVTkNfTU1BUCwgYmVjYXVz ZSBpdCBjaGVja3MgdG9vIG11Y2g6IGl0DQogICMgZmFpbHMgb24gSFAtVVggMTEsIGJlY2F1c2Ug TUFQX0ZJWEVEIG1hcHBpbmdzIGRvIG5vdCB3b3JrLiBCdXQgdGhpcyBpcw0KICAjIGlycmVsZXZh bnQgZm9yIGFub255bW91cyBtYXBwaW5ncy4NCiAgYWNfZm5fY19jaGVja19mdW5jICIkTElORU5P IiAibW1hcCIgImFjX2N2X2Z1bmNfbW1hcCINCmlmIHRlc3QgIngkYWNfY3ZfZnVuY19tbWFwIiA9 IHh5ZXM7IHRoZW4gOg0KICBnbF9oYXZlX21tYXA9eWVzDQplbHNlDQogIGdsX2hhdmVfbW1hcD1u bw0KZmkNCg0KDQogICMgVHJ5IHRvIGFsbG93IE1BUF9BTk9OWU1PVVMuDQogIGdsX2hhdmVfbW1h cF9hbm9ueW1vdXM9bm8NCiAgaWYgdGVzdCAkZ2xfaGF2ZV9tbWFwID0geWVzOyB0aGVuDQogICAg eyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgTUFQ X0FOT05ZTU9VUyIgPiY1DQokYXNfZWNob19uICJjaGVja2luZyBmb3IgTUFQX0FOT05ZTU9VUy4u LiAiID4mNjsgfQ0KICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19l eHQNCi8qIGVuZCBjb25mZGVmcy5oLiAgKi8NCg0KI2luY2x1ZGUgPHN5cy9tbWFuLmg+DQojaWZk ZWYgTUFQX0FOT05ZTU9VUw0KICAgIEkgY2FudCBpZGVudGlmeSB0aGlzIG1hcC4NCiNlbmRpZg0K DQpfQUNFT0YNCmlmIChldmFsICIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQiKSAyPiY1IHwNCiAg JEVHUkVQICJJIGNhbnQgaWRlbnRpZnkgdGhpcyBtYXAuIiA+L2Rldi9udWxsIDI+JjE7IHRoZW4g Og0KICBnbF9oYXZlX21tYXBfYW5vbnltb3VzPXllcw0KZmkNCnJtIC1mIGNvbmZ0ZXN0Kg0KDQog ICAgaWYgdGVzdCAkZ2xfaGF2ZV9tbWFwX2Fub255bW91cyAhPSB5ZXM7IHRoZW4NCiAgICAgIGNh dCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQNCi8qIGVuZCBjb25mZGVm cy5oLiAgKi8NCg0KI2luY2x1ZGUgPHN5cy9tbWFuLmg+DQojaWZkZWYgTUFQX0FOT04NCiAgICBJ IGNhbnQgaWRlbnRpZnkgdGhpcyBtYXAuDQojZW5kaWYNCg0KX0FDRU9GDQppZiAoZXZhbCAiJGFj X2NwcCBjb25mdGVzdC4kYWNfZXh0IikgMj4mNSB8DQogICRFR1JFUCAiSSBjYW50IGlkZW50aWZ5 IHRoaXMgbWFwLiIgPi9kZXYvbnVsbCAyPiYxOyB0aGVuIDoNCg0KJGFzX2VjaG8gIiNkZWZpbmUg TUFQX0FOT05ZTU9VUyBNQVBfQU5PTiIgPj5jb25mZGVmcy5oDQoNCiAgICAgICAgIGdsX2hhdmVf bW1hcF9hbm9ueW1vdXM9eWVzDQpmaQ0Kcm0gLWYgY29uZnRlc3QqDQoNCiAgICBmaQ0KICAgIHsg JGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkZ2xfaGF2ZV9t bWFwX2Fub255bW91cyIgPiY1DQokYXNfZWNobyAiJGdsX2hhdmVfbW1hcF9hbm9ueW1vdXMiID4m NjsgfQ0KICAgIGlmIHRlc3QgJGdsX2hhdmVfbW1hcF9hbm9ueW1vdXMgPSB5ZXM7IHRoZW4NCg0K JGFzX2VjaG8gIiNkZWZpbmUgSEFWRV9NQVBfQU5PTllNT1VTIDEiID4+Y29uZmRlZnMuaA0KDQog ICAgZmkNCiAgZmkNCg0KDQoNCg0KDQoNCiAgIyBDaGVjayBmb3IgbW1hcCgpLiBEb24ndCB1c2Ug QUNfRlVOQ19NTUFQLCBiZWNhdXNlIGl0IGNoZWNrcyB0b28gbXVjaDogaXQNCiAgIyBmYWlscyBv biBIUC1VWCAxMSwgYmVjYXVzZSBNQVBfRklYRUQgbWFwcGluZ3MgZG8gbm90IHdvcmsuIEJ1dCB0 aGlzIGlzDQogICMgaXJyZWxldmFudCBmb3IgYW5vbnltb3VzIG1hcHBpbmdzLg0KICBhY19mbl9j X2NoZWNrX2Z1bmMgIiRMSU5FTk8iICJtbWFwIiAiYWNfY3ZfZnVuY19tbWFwIg0KaWYgdGVzdCAi eCRhY19jdl9mdW5jX21tYXAiID0geHllczsgdGhlbiA6DQogIGdsX2hhdmVfbW1hcD15ZXMNCmVs c2UNCiAgZ2xfaGF2ZV9tbWFwPW5vDQpmaQ0KDQoNCiAgIyBUcnkgdG8gYWxsb3cgTUFQX0FOT05Z TU9VUy4NCiAgZ2xfaGF2ZV9tbWFwX2Fub255bW91cz1ubw0KICBpZiB0ZXN0ICRnbF9oYXZlX21t YXAgPSB5ZXM7IHRoZW4NCiAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVO T306IGNoZWNraW5nIGZvciBNQVBfQU5PTllNT1VTIiA+JjUNCiRhc19lY2hvX24gImNoZWNraW5n IGZvciBNQVBfQU5PTllNT1VTLi4uICIgPiY2OyB9DQogICAgY2F0IGNvbmZkZWZzLmggLSA8PF9B Q0VPRiA+Y29uZnRlc3QuJGFjX2V4dA0KLyogZW5kIGNvbmZkZWZzLmguICAqLw0KDQojaW5jbHVk ZSA8c3lzL21tYW4uaD4NCiNpZmRlZiBNQVBfQU5PTllNT1VTDQogICAgSSBjYW50IGlkZW50aWZ5 IHRoaXMgbWFwLg0KI2VuZGlmDQoNCl9BQ0VPRg0KaWYgKGV2YWwgIiRhY19jcHAgY29uZnRlc3Qu JGFjX2V4dCIpIDI+JjUgfA0KICAkRUdSRVAgIkkgY2FudCBpZGVudGlmeSB0aGlzIG1hcC4iID4v ZGV2L251bGwgMj4mMTsgdGhlbiA6DQogIGdsX2hhdmVfbW1hcF9hbm9ueW1vdXM9eWVzDQpmaQ0K cm0gLWYgY29uZnRlc3QqDQoNCiAgICBpZiB0ZXN0ICRnbF9oYXZlX21tYXBfYW5vbnltb3VzICE9 IHllczsgdGhlbg0KICAgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFj X2V4dA0KLyogZW5kIGNvbmZkZWZzLmguICAqLw0KDQojaW5jbHVkZSA8c3lzL21tYW4uaD4NCiNp ZmRlZiBNQVBfQU5PTg0KICAgIEkgY2FudCBpZGVudGlmeSB0aGlzIG1hcC4NCiNlbmRpZg0KDQpf QUNFT0YNCmlmIChldmFsICIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQiKSAyPiY1IHwNCiAgJEVH UkVQICJJIGNhbnQgaWRlbnRpZnkgdGhpcyBtYXAuIiA+L2Rldi9udWxsIDI+JjE7IHRoZW4gOg0K DQokYXNfZWNobyAiI2RlZmluZSBNQVBfQU5PTllNT1VTIE1BUF9BTk9OIiA+PmNvbmZkZWZzLmgN Cg0KICAgICAgICAgZ2xfaGF2ZV9tbWFwX2Fub255bW91cz15ZXMNCmZpDQpybSAtZiBjb25mdGVz dCoNCg0KICAgIGZpDQogICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99 OiByZXN1bHQ6ICRnbF9oYXZlX21tYXBfYW5vbnltb3VzIiA+JjUNCiRhc19lY2hvICIkZ2xfaGF2 ZV9tbWFwX2Fub255bW91cyIgPiY2OyB9DQogICAgaWYgdGVzdCAkZ2xfaGF2ZV9tbWFwX2Fub255 bW91cyA9IHllczsgdGhlbg0KDQokYXNfZWNobyAiI2RlZmluZSBIQVZFX01BUF9BTk9OWU1PVVMg MSIgPj5jb25mZGVmcy5oDQoNCiAgICBmaQ0KICBmaQ0KDQoNCg0KDQoNCg0KDQogIHsgJGFzX2Vj aG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIGEgdHJhZGl0aW9u YWwgZnJlbmNoIGxvY2FsZSIgPiY1DQokYXNfZWNob19uICJjaGVja2luZyBmb3IgYSB0cmFkaXRp b25hbCBmcmVuY2ggbG9jYWxlLi4uICIgPiY2OyB9DQppZiAke2d0X2N2X2xvY2FsZV9mcis6fSBm YWxzZTsgdGhlbiA6DQogICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2DQplbHNlDQoNCiAgICBj YXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0DQovKiBlbmQgY29uZmRl ZnMuaC4gICovDQoNCiNpbmNsdWRlIDxsb2NhbGUuaD4NCiNpbmNsdWRlIDx0aW1lLmg+DQojaWYg SEFWRV9MQU5HSU5GT19DT0RFU0VUDQojIGluY2x1ZGUgPGxhbmdpbmZvLmg+DQojZW5kaWYNCiNp bmNsdWRlIDxzdGRsaWIuaD4NCiNpbmNsdWRlIDxzdHJpbmcuaD4NCnN0cnVjdCB0bSB0Ow0KY2hh ciBidWZbMTZdOw0KaW50IG1haW4gKCkgew0KICAvKiBDaGVjayB3aGV0aGVyIHRoZSBnaXZlbiBs b2NhbGUgbmFtZSBpcyByZWNvZ25pemVkIGJ5IHRoZSBzeXN0ZW0uICAqLw0KI2lmIChkZWZpbmVk IF9XSU4zMiB8fCBkZWZpbmVkIF9fV0lOMzJfXykgJiYgIWRlZmluZWQgX19DWUdXSU5fXw0KICAv KiBPbiBuYXRpdmUgV2luMzIsIHNldGxvY2FsZShjYXRlZ29yeSwgIiIpIGxvb2tzIGF0IHRoZSBz eXN0ZW0gc2V0dGluZ3MsDQogICAgIG5vdCBhdCB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGVzLiAg QWxzbywgd2hlbiBhbiBlbmNvZGluZyBzdWZmaXggc3VjaA0KICAgICBhcyAiLjY1MDAxIiBvciAi LjU0OTM2IiBpcyBzcGVmaWNpZWQsIGl0IHN1Y2NlZWRzIGJ1dCBzZXRzIHRoZSBMQ19DVFlQRQ0K ICAgICBjYXRlZ29yeSBvZiB0aGUgbG9jYWxlIHRvICJDIi4gICovDQogIGlmIChzZXRsb2NhbGUg KExDX0FMTCwgZ2V0ZW52ICgiTENfQUxMIikpID09IE5VTEwNCiAgICAgIHx8IHN0cmNtcCAoc2V0 bG9jYWxlIChMQ19DVFlQRSwgTlVMTCksICJDIikgPT0gMCkNCiAgICByZXR1cm4gMTsNCiNlbHNl DQogIGlmIChzZXRsb2NhbGUgKExDX0FMTCwgIiIpID09IE5VTEwpIHJldHVybiAxOw0KI2VuZGlm DQogIC8qIENoZWNrIHdoZXRoZXIgbmxfbGFuZ2luZm8oQ09ERVNFVCkgaXMgbm9uZW1wdHkgYW5k IG5vdCAiQVNDSUkiIG9yICI2NDYiLg0KICAgICBPbiBNYWNPUyBYIDEwLjMuNSAoRGFyd2luIDcu NSkgaW4gdGhlIGZyX0ZSIGxvY2FsZSwgbmxfbGFuZ2luZm8oQ09ERVNFVCkNCiAgICAgaXMgZW1w dHksIGFuZCB0aGUgYmVoYXZpb3VyIG9mIFRjbCA4LjQgaW4gdGhpcyBsb2NhbGUgaXMgbm90IHVz ZWZ1bC4NCiAgICAgT24gT3BlbkJTRCA0LjAsIHdoZW4gYW4gdW5zdXBwb3J0ZWQgbG9jYWxlIGlz IHNwZWNpZmllZCwgc2V0bG9jYWxlKCkNCiAgICAgc3VjY2VlZHMgYnV0IHRoZW4gbmxfbGFuZ2lu Zm8oQ09ERVNFVCkgaXMgIjY0NiIuIEluIHRoaXMgc2l0dWF0aW9uLA0KICAgICBzb21lIHVuaXQg dGVzdHMgZmFpbC4NCiAgICAgT24gTWlyQlNEIDEwLCB3aGVuIGFuIHVuc3VwcG9ydGVkIGxvY2Fs ZSBpcyBzcGVjaWZpZWQsIHNldGxvY2FsZSgpDQogICAgIHN1Y2NlZWRzIGJ1dCB0aGVuIG5sX2xh bmdpbmZvKENPREVTRVQpIGlzICJVVEYtOCIuICAqLw0KI2lmIEhBVkVfTEFOR0lORk9fQ09ERVNF VA0KICB7DQogICAgY29uc3QgY2hhciAqY3MgPSBubF9sYW5naW5mbyAoQ09ERVNFVCk7DQogICAg aWYgKGNzWzBdID09ICdcMCcgfHwgc3RyY21wIChjcywgIkFTQ0lJIikgPT0gMCB8fCBzdHJjbXAg KGNzLCAiNjQ2IikgPT0gMA0KICAgICAgICB8fCBzdHJjbXAgKGNzLCAiVVRGLTgiKSA9PSAwKQ0K ICAgICAgcmV0dXJuIDE7DQogIH0NCiNlbmRpZg0KI2lmZGVmIF9fQ1lHV0lOX18NCiAgLyogT24g Q3lnd2luLCBhdm9pZCBsb2NhbGUgbmFtZXMgd2l0aG91dCBlbmNvZGluZyBzdWZmaXgsIGJlY2F1 c2UgdGhlDQogICAgIGxvY2FsZV9jaGFyc2V0KCkgZnVuY3Rpb24gcmVsaWVzIG9uIHRoZSBlbmNv ZGluZyBzdWZmaXguICBOb3RlIHRoYXQNCiAgICAgTENfQUxMIGlzIHNldCBvbiB0aGUgY29tbWFu ZCBsaW5lLiAgKi8NCiAgaWYgKHN0cmNociAoZ2V0ZW52ICgiTENfQUxMIiksICcuJykgPT0gTlVM TCkgcmV0dXJuIDE7DQojZW5kaWYNCiAgLyogQ2hlY2sgd2hldGhlciBpbiB0aGUgYWJicmV2aWF0 aW9uIG9mIHRoZSBzZWNvbmQgbW9udGgsIHRoZSBzZWNvbmQNCiAgICAgY2hhcmFjdGVyIChzaG91 bGQgYmUgVSswMEU5OiBMQVRJTiBTTUFMTCBMRVRURVIgRSBXSVRIIEFDVVRFKSBpcyBvbmx5DQog ICAgIG9uZSBieXRlIGxvbmcuIFRoaXMgZXhjbHVkZXMgdGhlIFVURi04IGVuY29kaW5nLiAgKi8N CiAgdC50bV95ZWFyID0gMTk3NSAtIDE5MDA7IHQudG1fbW9uID0gMiAtIDE7IHQudG1fbWRheSA9 IDQ7DQogIGlmIChzdHJmdGltZSAoYnVmLCBzaXplb2YgKGJ1ZiksICIlYiIsICZ0KSA8IDMgfHwg YnVmWzJdICE9ICd2JykgcmV0dXJuIDE7DQogIC8qIENoZWNrIHdoZXRoZXIgdGhlIGRlY2ltYWwg c2VwYXJhdG9yIGlzIGEgY29tbWEuDQogICAgIE9uIE5ldEJTRCAzLjAgaW4gdGhlIGZyX0ZSLklT Tzg4NTktMSBsb2NhbGUsIGxvY2FsZWNvbnYoKS0+ZGVjaW1hbF9wb2ludA0KICAgICBhcmUgbmxf bGFuZ2luZm8oUkFESVhDSEFSKSBhcmUgYm90aCAiLiIuICAqLw0KICBpZiAobG9jYWxlY29udiAo KSAtPmRlY2ltYWxfcG9pbnRbMF0gIT0gJywnKSByZXR1cm4gMTsNCiAgcmV0dXJuIDA7DQp9DQoN Cl9BQ0VPRg0KICAgIGlmIHsgeyBldmFsIGVjaG8gIlwiXCRhc19tZVwiOiR7YXNfbGluZW5vLSRM SU5FTk99OiBcIiRhY19saW5rXCIiOyB9ID4mNQ0KICAoZXZhbCAkYWNfbGluaykgMj4mNQ0KICBh Y19zdGF0dXM9JD8NCiAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCQ/ ID0gJGFjX3N0YXR1cyIgPiY1DQogIHRlc3QgJGFjX3N0YXR1cyA9IDA7IH0gJiYgdGVzdCAtcyBj b25mdGVzdCRhY19leGVleHQ7IHRoZW4NCiAgICAgIGNhc2UgIiRob3N0X29zIiBpbg0KICAgICAg ICAjIEhhbmRsZSBuYXRpdmUgV2luZG93cyBzcGVjaWFsbHksIGJlY2F1c2UgdGhlcmUgc2V0bG9j YWxlKCkgaW50ZXJwcmV0cw0KICAgICAgICAjICJhciIgYXMgIkFyYWJpYyIgb3IgIkFyYWJpY19T YXVkaSBBcmFiaWEuMTI1NiIsDQogICAgICAgICMgImZyIiBvciAiZnJhIiBhcyAiRnJlbmNoIiBv ciAiRnJlbmNoX0ZyYW5jZS4xMjUyIiwNCiAgICAgICAgIyAiZ2UiKCEpIG9yICJkZXUiKCEpIGFz ICJHZXJtYW4iIG9yICJHZXJtYW5fR2VybWFueS4xMjUyIiwNCiAgICAgICAgIyAiamEiIGFzICJK YXBhbmVzZSIgb3IgIkphcGFuZXNlX0phcGFuLjkzMiIsDQogICAgICAgICMgYW5kIHNpbWlsYXIu DQogICAgICAgIG1pbmd3KikNCiAgICAgICAgICAjIFRlc3QgZm9yIHRoZSBuYXRpdmUgV2luMzIg bG9jYWxlIG5hbWUuDQogICAgICAgICAgaWYgKExDX0FMTD1GcmVuY2hfRnJhbmNlLjEyNTIgTENf VElNRT0gTENfQ1RZUEU9IC4vY29uZnRlc3Q7IGV4aXQpIDI+L2Rldi9udWxsOyB0aGVuDQogICAg ICAgICAgICBndF9jdl9sb2NhbGVfZnI9RnJlbmNoX0ZyYW5jZS4xMjUyDQogICAgICAgICAgZWxz ZQ0KICAgICAgICAgICAgIyBOb25lIGZvdW5kLg0KICAgICAgICAgICAgZ3RfY3ZfbG9jYWxlX2Zy PW5vbmUNCiAgICAgICAgICBmaQ0KICAgICAgICAgIDs7DQogICAgICAgICopDQogICAgICAgICAg IyBTZXR0aW5nIExDX0FMTCBpcyBub3QgZW5vdWdoLiBOZWVkIHRvIHNldCBMQ19USU1FIHRvIGVt cHR5LCBiZWNhdXNlDQogICAgICAgICAgIyBvdGhlcndpc2Ugb24gTWFjT1MgWCAxMC4zLjUgdGhl IExDX1RJTUU9QyBmcm9tIHRoZSBiZWdpbm5pbmcgb2YgdGhlDQogICAgICAgICAgIyBjb25maWd1 cmUgc2NyaXB0IHdvdWxkIG92ZXJyaWRlIHRoZSBMQ19BTEwgc2V0dGluZy4gTGlrZXdpc2UgZm9y DQogICAgICAgICAgIyBMQ19DVFlQRSwgd2hpY2ggaXMgYWxzbyBzZXQgYXQgdGhlIGJlZ2lubmlu ZyBvZiB0aGUgY29uZmlndXJlIHNjcmlwdC4NCiAgICAgICAgICAjIFRlc3QgZm9yIHRoZSB1c3Vh bCBsb2NhbGUgbmFtZS4NCiAgICAgICAgICBpZiAoTENfQUxMPWZyX0ZSIExDX1RJTUU9IExDX0NU WVBFPSAuL2NvbmZ0ZXN0OyBleGl0KSAyPi9kZXYvbnVsbDsgdGhlbg0KICAgICAgICAgICAgZ3Rf Y3ZfbG9jYWxlX2ZyPWZyX0ZSDQogICAgICAgICAgZWxzZQ0KICAgICAgICAgICAgIyBUZXN0IGZv ciB0aGUgbG9jYWxlIG5hbWUgd2l0aCBleHBsaWNpdCBlbmNvZGluZyBzdWZmaXguDQogICAgICAg ICAgICBpZiAoTENfQUxMPWZyX0ZSLklTTy04ODU5LTEgTENfVElNRT0gTENfQ1RZUEU9IC4vY29u ZnRlc3Q7IGV4aXQpIDI+L2Rldi9udWxsOyB0aGVuDQogICAgICAgICAgICAgIGd0X2N2X2xvY2Fs ZV9mcj1mcl9GUi5JU08tODg1OS0xDQogICAgICAgICAgICBlbHNlDQogICAgICAgICAgICAgICMg VGVzdCBmb3IgdGhlIEFJWCwgT1NGLzEsIEZyZWVCU0QsIE5ldEJTRCwgT3BlbkJTRCBsb2NhbGUg bmFtZS4NCiAgICAgICAgICAgICAgaWYgKExDX0FMTD1mcl9GUi5JU084ODU5LTEgTENfVElNRT0g TENfQ1RZUEU9IC4vY29uZnRlc3Q7IGV4aXQpIDI+L2Rldi9udWxsOyB0aGVuDQogICAgICAgICAg ICAgICAgZ3RfY3ZfbG9jYWxlX2ZyPWZyX0ZSLklTTzg4NTktMQ0KICAgICAgICAgICAgICBlbHNl DQogICAgICAgICAgICAgICAgIyBUZXN0IGZvciB0aGUgSFAtVVggbG9jYWxlIG5hbWUuDQogICAg ICAgICAgICAgICAgaWYgKExDX0FMTD1mcl9GUi5pc284ODU5MSBMQ19USU1FPSBMQ19DVFlQRT0g Li9jb25mdGVzdDsgZXhpdCkgMj4vZGV2L251bGw7IHRoZW4NCiAgICAgICAgICAgICAgICAgIGd0 X2N2X2xvY2FsZV9mcj1mcl9GUi5pc284ODU5MQ0KICAgICAgICAgICAgICAgIGVsc2UNCiAgICAg ICAgICAgICAgICAgICMgVGVzdCBmb3IgdGhlIFNvbGFyaXMgNyBsb2NhbGUgbmFtZS4NCiAgICAg ICAgICAgICAgICAgIGlmIChMQ19BTEw9ZnIgTENfVElNRT0gTENfQ1RZUEU9IC4vY29uZnRlc3Q7 IGV4aXQpIDI+L2Rldi9udWxsOyB0aGVuDQogICAgICAgICAgICAgICAgICAgIGd0X2N2X2xvY2Fs ZV9mcj1mcg0KICAgICAgICAgICAgICAgICAgZWxzZQ0KICAgICAgICAgICAgICAgICAgICAjIE5v bmUgZm91bmQuDQogICAgICAgICAgICAgICAgICAgIGd0X2N2X2xvY2FsZV9mcj1ub25lDQogICAg ICAgICAgICAgICAgICBmaQ0KICAgICAgICAgICAgICAgIGZpDQogICAgICAgICAgICAgIGZpDQog ICAgICAgICAgICBmaQ0KICAgICAgICAgIGZpDQogICAgICAgICAgOzsNCiAgICAgIGVzYWMNCiAg ICBmaQ0KICAgIHJtIC1mciBjb25mdGVzdCoNCg0KZmkNCnsgJGFzX2VjaG8gIiRhc19tZToke2Fz X2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkZ3RfY3ZfbG9jYWxlX2ZyIiA+JjUNCiRhc19lY2hv ICIkZ3RfY3ZfbG9jYWxlX2ZyIiA+JjY7IH0NCiAgTE9DQUxFX0ZSPSRndF9jdl9sb2NhbGVfZnIN Cg0KDQoNCg0KICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNr aW5nIGZvciBhIGZyZW5jaCBVbmljb2RlIGxvY2FsZSIgPiY1DQokYXNfZWNob19uICJjaGVja2lu ZyBmb3IgYSBmcmVuY2ggVW5pY29kZSBsb2NhbGUuLi4gIiA+JjY7IH0NCmlmICR7Z3RfY3ZfbG9j YWxlX2ZyX3V0ZjgrOn0gZmFsc2U7IHRoZW4gOg0KICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4m Ng0KZWxzZQ0KDQogICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4 dA0KLyogZW5kIGNvbmZkZWZzLmguICAqLw0KDQojaW5jbHVkZSA8bG9jYWxlLmg+DQojaW5jbHVk ZSA8dGltZS5oPg0KI2lmIEhBVkVfTEFOR0lORk9fQ09ERVNFVA0KIyBpbmNsdWRlIDxsYW5naW5m by5oPg0KI2VuZGlmDQojaW5jbHVkZSA8c3RkbGliLmg+DQojaW5jbHVkZSA8c3RyaW5nLmg+DQpz dHJ1Y3QgdG0gdDsNCmNoYXIgYnVmWzE2XTsNCmludCBtYWluICgpIHsNCiAgLyogT24gQmVPUyBh bmQgSGFpa3UsIGxvY2FsZXMgYXJlIG5vdCBpbXBsZW1lbnRlZCBpbiBsaWJjLiAgUmF0aGVyLCBs aWJpbnRsDQogICAgIGltaXRhdGVzIGxvY2FsZSBkZXBlbmRlbnQgYmVoYXZpb3VyIGJ5IGxvb2tp bmcgYXQgdGhlIGVudmlyb25tZW50DQogICAgIHZhcmlhYmxlcywgYW5kIGFsbCBsb2NhbGVzIHVz ZSB0aGUgVVRGLTggZW5jb2RpbmcuICAqLw0KI2lmICEoZGVmaW5lZCBfX0JFT1NfXyB8fCBkZWZp bmVkIF9fSEFJS1VfXykNCiAgLyogQ2hlY2sgd2hldGhlciB0aGUgZ2l2ZW4gbG9jYWxlIG5hbWUg aXMgcmVjb2duaXplZCBieSB0aGUgc3lzdGVtLiAgKi8NCiMgaWYgKGRlZmluZWQgX1dJTjMyIHx8 IGRlZmluZWQgX19XSU4zMl9fKSAmJiAhZGVmaW5lZCBfX0NZR1dJTl9fDQogIC8qIE9uIG5hdGl2 ZSBXaW4zMiwgc2V0bG9jYWxlKGNhdGVnb3J5LCAiIikgbG9va3MgYXQgdGhlIHN5c3RlbSBzZXR0 aW5ncywNCiAgICAgbm90IGF0IHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZXMuICBBbHNvLCB3aGVu IGFuIGVuY29kaW5nIHN1ZmZpeCBzdWNoDQogICAgIGFzICIuNjUwMDEiIG9yICIuNTQ5MzYiIGlz IHNwZWZpY2llZCwgaXQgc3VjY2VlZHMgYnV0IHNldHMgdGhlIExDX0NUWVBFDQogICAgIGNhdGVn b3J5IG9mIHRoZSBsb2NhbGUgdG8gIkMiLiAgKi8NCiAgaWYgKHNldGxvY2FsZSAoTENfQUxMLCBn ZXRlbnYgKCJMQ19BTEwiKSkgPT0gTlVMTA0KICAgICAgfHwgc3RyY21wIChzZXRsb2NhbGUgKExD X0NUWVBFLCBOVUxMKSwgIkMiKSA9PSAwKQ0KICAgIHJldHVybiAxOw0KIyBlbHNlDQogIGlmIChz ZXRsb2NhbGUgKExDX0FMTCwgIiIpID09IE5VTEwpIHJldHVybiAxOw0KIyBlbmRpZg0KICAvKiBD aGVjayB3aGV0aGVyIG5sX2xhbmdpbmZvKENPREVTRVQpIGlzIG5vbmVtcHR5IGFuZCBub3QgIkFT Q0lJIiBvciAiNjQ2Ii4NCiAgICAgT24gTWFjT1MgWCAxMC4zLjUgKERhcndpbiA3LjUpIGluIHRo ZSBmcl9GUiBsb2NhbGUsIG5sX2xhbmdpbmZvKENPREVTRVQpDQogICAgIGlzIGVtcHR5LCBhbmQg dGhlIGJlaGF2aW91ciBvZiBUY2wgOC40IGluIHRoaXMgbG9jYWxlIGlzIG5vdCB1c2VmdWwuDQog ICAgIE9uIE9wZW5CU0QgNC4wLCB3aGVuIGFuIHVuc3VwcG9ydGVkIGxvY2FsZSBpcyBzcGVjaWZp ZWQsIHNldGxvY2FsZSgpDQogICAgIHN1Y2NlZWRzIGJ1dCB0aGVuIG5sX2xhbmdpbmZvKENPREVT RVQpIGlzICI2NDYiLiBJbiB0aGlzIHNpdHVhdGlvbiwNCiAgICAgc29tZSB1bml0IHRlc3RzIGZh aWwuICAqLw0KIyBpZiBIQVZFX0xBTkdJTkZPX0NPREVTRVQNCiAgew0KICAgIGNvbnN0IGNoYXIg KmNzID0gbmxfbGFuZ2luZm8gKENPREVTRVQpOw0KICAgIGlmIChjc1swXSA9PSAnXDAnIHx8IHN0 cmNtcCAoY3MsICJBU0NJSSIpID09IDAgfHwgc3RyY21wIChjcywgIjY0NiIpID09IDApDQogICAg ICByZXR1cm4gMTsNCiAgfQ0KIyBlbmRpZg0KIyBpZmRlZiBfX0NZR1dJTl9fDQogIC8qIE9uIEN5 Z3dpbiwgYXZvaWQgbG9jYWxlIG5hbWVzIHdpdGhvdXQgZW5jb2Rpbmcgc3VmZml4LCBiZWNhdXNl IHRoZQ0KICAgICBsb2NhbGVfY2hhcnNldCgpIGZ1bmN0aW9uIHJlbGllcyBvbiB0aGUgZW5jb2Rp bmcgc3VmZml4LiAgTm90ZSB0aGF0DQogICAgIExDX0FMTCBpcyBzZXQgb24gdGhlIGNvbW1hbmQg bGluZS4gICovDQogIGlmIChzdHJjaHIgKGdldGVudiAoIkxDX0FMTCIpLCAnLicpID09IE5VTEwp IHJldHVybiAxOw0KIyBlbmRpZg0KICAvKiBDaGVjayB3aGV0aGVyIGluIHRoZSBhYmJyZXZpYXRp b24gb2YgdGhlIHNlY29uZCBtb250aCwgdGhlIHNlY29uZA0KICAgICBjaGFyYWN0ZXIgKHNob3Vs ZCBiZSBVKzAwRTk6IExBVElOIFNNQUxMIExFVFRFUiBFIFdJVEggQUNVVEUpIGlzDQogICAgIHR3 byBieXRlcyBsb25nLCB3aXRoIFVURi04IGVuY29kaW5nLiAgKi8NCiAgdC50bV95ZWFyID0gMTk3 NSAtIDE5MDA7IHQudG1fbW9uID0gMiAtIDE7IHQudG1fbWRheSA9IDQ7DQogIGlmIChzdHJmdGlt ZSAoYnVmLCBzaXplb2YgKGJ1ZiksICIlYiIsICZ0KSA8IDQNCiAgICAgIHx8IGJ1ZlsxXSAhPSAo Y2hhcikgMHhjMyB8fCBidWZbMl0gIT0gKGNoYXIpIDB4YTkgfHwgYnVmWzNdICE9ICd2JykNCiAg ICByZXR1cm4gMTsNCiNlbmRpZg0KICAvKiBDaGVjayB3aGV0aGVyIHRoZSBkZWNpbWFsIHNlcGFy YXRvciBpcyBhIGNvbW1hLg0KICAgICBPbiBOZXRCU0QgMy4wIGluIHRoZSBmcl9GUi5JU084ODU5 LTEgbG9jYWxlLCBsb2NhbGVjb252KCktPmRlY2ltYWxfcG9pbnQNCiAgICAgYXJlIG5sX2xhbmdp bmZvKFJBRElYQ0hBUikgYXJlIGJvdGggIi4iLiAgKi8NCiAgaWYgKGxvY2FsZWNvbnYgKCkgLT5k ZWNpbWFsX3BvaW50WzBdICE9ICcsJykgcmV0dXJuIDE7DQogIHJldHVybiAwOw0KfQ0KDQpfQUNF T0YNCiAgICBpZiB7IHsgZXZhbCBlY2hvICJcIlwkYXNfbWVcIjoke2FzX2xpbmVuby0kTElORU5P fTogXCIkYWNfbGlua1wiIjsgfSA+JjUNCiAgKGV2YWwgJGFjX2xpbmspIDI+JjUNCiAgYWNfc3Rh dHVzPSQ/DQogICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkPyA9ICRh Y19zdGF0dXMiID4mNQ0KICB0ZXN0ICRhY19zdGF0dXMgPSAwOyB9ICYmIHRlc3QgLXMgY29uZnRl c3QkYWNfZXhlZXh0OyB0aGVuDQogICAgICBjYXNlICIkaG9zdF9vcyIgaW4NCiAgICAgICAgIyBI YW5kbGUgbmF0aXZlIFdpbmRvd3Mgc3BlY2lhbGx5LCBiZWNhdXNlIHRoZXJlIHNldGxvY2FsZSgp IGludGVycHJldHMNCiAgICAgICAgIyAiYXIiIGFzICJBcmFiaWMiIG9yICJBcmFiaWNfU2F1ZGkg QXJhYmlhLjEyNTYiLA0KICAgICAgICAjICJmciIgb3IgImZyYSIgYXMgIkZyZW5jaCIgb3IgIkZy ZW5jaF9GcmFuY2UuMTI1MiIsDQogICAgICAgICMgImdlIighKSBvciAiZGV1IighKSBhcyAiR2Vy bWFuIiBvciAiR2VybWFuX0dlcm1hbnkuMTI1MiIsDQogICAgICAgICMgImphIiBhcyAiSmFwYW5l c2UiIG9yICJKYXBhbmVzZV9KYXBhbi45MzIiLA0KICAgICAgICAjIGFuZCBzaW1pbGFyLg0KICAg ICAgICBtaW5ndyopDQogICAgICAgICAgIyBUZXN0IGZvciB0aGUgaHlwb3RoZXRpY2FsIG5hdGl2 ZSBXaW4zMiBsb2NhbGUgbmFtZS4NCiAgICAgICAgICBpZiAoTENfQUxMPUZyZW5jaF9GcmFuY2Uu NjUwMDEgTENfVElNRT0gTENfQ1RZUEU9IC4vY29uZnRlc3Q7IGV4aXQpIDI+L2Rldi9udWxsOyB0 aGVuDQogICAgICAgICAgICBndF9jdl9sb2NhbGVfZnJfdXRmOD1GcmVuY2hfRnJhbmNlLjY1MDAx DQogICAgICAgICAgZWxzZQ0KICAgICAgICAgICAgIyBOb25lIGZvdW5kLg0KICAgICAgICAgICAg Z3RfY3ZfbG9jYWxlX2ZyX3V0Zjg9bm9uZQ0KICAgICAgICAgIGZpDQogICAgICAgICAgOzsNCiAg ICAgICAgKikNCiAgICAgICAgICAjIFNldHRpbmcgTENfQUxMIGlzIG5vdCBlbm91Z2guIE5lZWQg dG8gc2V0IExDX1RJTUUgdG8gZW1wdHksIGJlY2F1c2UNCiAgICAgICAgICAjIG90aGVyd2lzZSBv biBNYWNPUyBYIDEwLjMuNSB0aGUgTENfVElNRT1DIGZyb20gdGhlIGJlZ2lubmluZyBvZiB0aGUN CiAgICAgICAgICAjIGNvbmZpZ3VyZSBzY3JpcHQgd291bGQgb3ZlcnJpZGUgdGhlIExDX0FMTCBz ZXR0aW5nLiBMaWtld2lzZSBmb3INCiAgICAgICAgICAjIExDX0NUWVBFLCB3aGljaCBpcyBhbHNv IHNldCBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBjb25maWd1cmUgc2NyaXB0Lg0KICAgICAgICAg ICMgVGVzdCBmb3IgdGhlIHVzdWFsIGxvY2FsZSBuYW1lLg0KICAgICAgICAgIGlmIChMQ19BTEw9 ZnJfRlIgTENfVElNRT0gTENfQ1RZUEU9IC4vY29uZnRlc3Q7IGV4aXQpIDI+L2Rldi9udWxsOyB0 aGVuDQogICAgICAgICAgICBndF9jdl9sb2NhbGVfZnJfdXRmOD1mcl9GUg0KICAgICAgICAgIGVs c2UNCiAgICAgICAgICAgICMgVGVzdCBmb3IgdGhlIGxvY2FsZSBuYW1lIHdpdGggZXhwbGljaXQg ZW5jb2Rpbmcgc3VmZml4Lg0KICAgICAgICAgICAgaWYgKExDX0FMTD1mcl9GUi5VVEYtOCBMQ19U SU1FPSBMQ19DVFlQRT0gLi9jb25mdGVzdDsgZXhpdCkgMj4vZGV2L251bGw7IHRoZW4NCiAgICAg ICAgICAgICAgZ3RfY3ZfbG9jYWxlX2ZyX3V0Zjg9ZnJfRlIuVVRGLTgNCiAgICAgICAgICAgIGVs c2UNCiAgICAgICAgICAgICAgIyBUZXN0IGZvciB0aGUgU29sYXJpcyA3IGxvY2FsZSBuYW1lLg0K ICAgICAgICAgICAgICBpZiAoTENfQUxMPWZyLlVURi04IExDX1RJTUU9IExDX0NUWVBFPSAuL2Nv bmZ0ZXN0OyBleGl0KSAyPi9kZXYvbnVsbDsgdGhlbg0KICAgICAgICAgICAgICAgIGd0X2N2X2xv Y2FsZV9mcl91dGY4PWZyLlVURi04DQogICAgICAgICAgICAgIGVsc2UNCiAgICAgICAgICAgICAg ICAjIE5vbmUgZm91bmQuDQogICAgICAgICAgICAgICAgZ3RfY3ZfbG9jYWxlX2ZyX3V0Zjg9bm9u ZQ0KICAgICAgICAgICAgICBmaQ0KICAgICAgICAgICAgZmkNCiAgICAgICAgICBmaQ0KICAgICAg ICAgIDs7DQogICAgICBlc2FjDQogICAgZmkNCiAgICBybSAtZnIgY29uZnRlc3QqDQoNCmZpDQp7 ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGd0X2N2X2xv Y2FsZV9mcl91dGY4IiA+JjUNCiRhc19lY2hvICIkZ3RfY3ZfbG9jYWxlX2ZyX3V0ZjgiID4mNjsg fQ0KICBMT0NBTEVfRlJfVVRGOD0kZ3RfY3ZfbG9jYWxlX2ZyX3V0ZjgNCg0KDQoNCg0KDQoNCiAg aWYgdGVzdCAtbiAiJEVSUk5PX0giOyB0aGVuDQogICAgICAgICAgICBSRVBMQUNFX1BFUlJPUj0x DQoNCg0KDQoNCg0KDQoNCg0KICBnbHRlc3RzX0xJQk9CSlM9IiRnbHRlc3RzX0xJQk9CSlMgcGVy cm9yLiRhY19vYmpleHQiDQoNCiAgZmkNCg0KDQoNCg0KICBHTlVMSUJfUEVSUk9SPSRnbF9tb2R1 bGVfaW5kaWNhdG9yX2NvbmRpdGlvbg0KDQoNCg0KJGFzX2VjaG8gIiNkZWZpbmUgR05VTElCX1RF U1RfUEVSUk9SIDEiID4+Y29uZmRlZnMuaA0KDQoNCg0KDQoNCg0KDQogIGlmIHRlc3QgJGFjX2N2 X2Z1bmNfcGlwZSAhPSB5ZXM7IHRoZW4NCiAgICBIQVZFX1BJUEU9MA0KDQoNCg0KDQoNCg0KDQoN CiAgZ2x0ZXN0c19MSUJPQkpTPSIkZ2x0ZXN0c19MSUJPQkpTIHBpcGUuJGFjX29iamV4dCINCg0K ICBmaQ0KDQoNCg0KDQogIEdOVUxJQl9QSVBFPSRnbF9tb2R1bGVfaW5kaWNhdG9yX2NvbmRpdGlv bg0KDQoNCg0KJGFzX2VjaG8gIiNkZWZpbmUgR05VTElCX1RFU1RfUElQRSAxIiA+PmNvbmZkZWZz LmgNCg0KDQoNCg0KDQoNCg0KICBjYXNlICIkaG9zdF9vcyIgaW4NCiAgICAgICAgICAgIG1pbmd3 KikgUkVQTEFDRV9TRVRMT0NBTEU9MSA7Ow0KICBlc2FjDQogIGlmIHRlc3QgJFJFUExBQ0VfU0VU TE9DQUxFID0gMTsgdGhlbg0KDQogICAgOg0KDQoNCg0KDQoNCg0KDQoNCg0KICBnbHRlc3RzX0xJ Qk9CSlM9IiRnbHRlc3RzX0xJQk9CSlMgc2V0bG9jYWxlLiRhY19vYmpleHQiDQoNCg0KICA6DQoN CiAgZmkNCg0KDQoNCg0KICBHTlVMSUJfU0VUTE9DQUxFPSRnbF9tb2R1bGVfaW5kaWNhdG9yX2Nv bmRpdGlvbg0KDQoNCg0KJGFzX2VjaG8gIiNkZWZpbmUgR05VTElCX1RFU1RfU0VUTE9DQUxFIDEi ID4+Y29uZmRlZnMuaA0KDQoNCg0KDQoNCg0KICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5l bm8tJExJTkVOT306IGNoZWNraW5nIGZvciBhIHRyYWRpdGlvbmFsIGZyZW5jaCBsb2NhbGUiID4m NQ0KJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIGEgdHJhZGl0aW9uYWwgZnJlbmNoIGxvY2FsZS4u LiAiID4mNjsgfQ0KaWYgJHtndF9jdl9sb2NhbGVfZnIrOn0gZmFsc2U7IHRoZW4gOg0KICAkYXNf ZWNob19uICIoY2FjaGVkKSAiID4mNg0KZWxzZQ0KDQogICAgY2F0IGNvbmZkZWZzLmggLSA8PF9B Q0VPRiA+Y29uZnRlc3QuJGFjX2V4dA0KLyogZW5kIGNvbmZkZWZzLmguICAqLw0KDQojaW5jbHVk ZSA8bG9jYWxlLmg+DQojaW5jbHVkZSA8dGltZS5oPg0KI2lmIEhBVkVfTEFOR0lORk9fQ09ERVNF VA0KIyBpbmNsdWRlIDxsYW5naW5mby5oPg0KI2VuZGlmDQojaW5jbHVkZSA8c3RkbGliLmg+DQoj aW5jbHVkZSA8c3RyaW5nLmg+DQpzdHJ1Y3QgdG0gdDsNCmNoYXIgYnVmWzE2XTsNCmludCBtYWlu ICgpIHsNCiAgLyogQ2hlY2sgd2hldGhlciB0aGUgZ2l2ZW4gbG9jYWxlIG5hbWUgaXMgcmVjb2du aXplZCBieSB0aGUgc3lzdGVtLiAgKi8NCiNpZiAoZGVmaW5lZCBfV0lOMzIgfHwgZGVmaW5lZCBf X1dJTjMyX18pICYmICFkZWZpbmVkIF9fQ1lHV0lOX18NCiAgLyogT24gbmF0aXZlIFdpbjMyLCBz ZXRsb2NhbGUoY2F0ZWdvcnksICIiKSBsb29rcyBhdCB0aGUgc3lzdGVtIHNldHRpbmdzLA0KICAg ICBub3QgYXQgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlcy4gIEFsc28sIHdoZW4gYW4gZW5jb2Rp bmcgc3VmZml4IHN1Y2gNCiAgICAgYXMgIi42NTAwMSIgb3IgIi41NDkzNiIgaXMgc3BlZmljaWVk LCBpdCBzdWNjZWVkcyBidXQgc2V0cyB0aGUgTENfQ1RZUEUNCiAgICAgY2F0ZWdvcnkgb2YgdGhl IGxvY2FsZSB0byAiQyIuICAqLw0KICBpZiAoc2V0bG9jYWxlIChMQ19BTEwsIGdldGVudiAoIkxD X0FMTCIpKSA9PSBOVUxMDQogICAgICB8fCBzdHJjbXAgKHNldGxvY2FsZSAoTENfQ1RZUEUsIE5V TEwpLCAiQyIpID09IDApDQogICAgcmV0dXJuIDE7DQojZWxzZQ0KICBpZiAoc2V0bG9jYWxlIChM Q19BTEwsICIiKSA9PSBOVUxMKSByZXR1cm4gMTsNCiNlbmRpZg0KICAvKiBDaGVjayB3aGV0aGVy IG5sX2xhbmdpbmZvKENPREVTRVQpIGlzIG5vbmVtcHR5IGFuZCBub3QgIkFTQ0lJIiBvciAiNjQ2 Ii4NCiAgICAgT24gTWFjT1MgWCAxMC4zLjUgKERhcndpbiA3LjUpIGluIHRoZSBmcl9GUiBsb2Nh bGUsIG5sX2xhbmdpbmZvKENPREVTRVQpDQogICAgIGlzIGVtcHR5LCBhbmQgdGhlIGJlaGF2aW91 ciBvZiBUY2wgOC40IGluIHRoaXMgbG9jYWxlIGlzIG5vdCB1c2VmdWwuDQogICAgIE9uIE9wZW5C U0QgNC4wLCB3aGVuIGFuIHVuc3VwcG9ydGVkIGxvY2FsZSBpcyBzcGVjaWZpZWQsIHNldGxvY2Fs ZSgpDQogICAgIHN1Y2NlZWRzIGJ1dCB0aGVuIG5sX2xhbmdpbmZvKENPREVTRVQpIGlzICI2NDYi LiBJbiB0aGlzIHNpdHVhdGlvbiwNCiAgICAgc29tZSB1bml0IHRlc3RzIGZhaWwuDQogICAgIE9u IE1pckJTRCAxMCwgd2hlbiBhbiB1bnN1cHBvcnRlZCBsb2NhbGUgaXMgc3BlY2lmaWVkLCBzZXRs b2NhbGUoKQ0KICAgICBzdWNjZWVkcyBidXQgdGhlbiBubF9sYW5naW5mbyhDT0RFU0VUKSBpcyAi VVRGLTgiLiAgKi8NCiNpZiBIQVZFX0xBTkdJTkZPX0NPREVTRVQNCiAgew0KICAgIGNvbnN0IGNo YXIgKmNzID0gbmxfbGFuZ2luZm8gKENPREVTRVQpOw0KICAgIGlmIChjc1swXSA9PSAnXDAnIHx8 IHN0cmNtcCAoY3MsICJBU0NJSSIpID09IDAgfHwgc3RyY21wIChjcywgIjY0NiIpID09IDANCiAg ICAgICAgfHwgc3RyY21wIChjcywgIlVURi04IikgPT0gMCkNCiAgICAgIHJldHVybiAxOw0KICB9 DQojZW5kaWYNCiNpZmRlZiBfX0NZR1dJTl9fDQogIC8qIE9uIEN5Z3dpbiwgYXZvaWQgbG9jYWxl IG5hbWVzIHdpdGhvdXQgZW5jb2Rpbmcgc3VmZml4LCBiZWNhdXNlIHRoZQ0KICAgICBsb2NhbGVf Y2hhcnNldCgpIGZ1bmN0aW9uIHJlbGllcyBvbiB0aGUgZW5jb2Rpbmcgc3VmZml4LiAgTm90ZSB0 aGF0DQogICAgIExDX0FMTCBpcyBzZXQgb24gdGhlIGNvbW1hbmQgbGluZS4gICovDQogIGlmIChz dHJjaHIgKGdldGVudiAoIkxDX0FMTCIpLCAnLicpID09IE5VTEwpIHJldHVybiAxOw0KI2VuZGlm DQogIC8qIENoZWNrIHdoZXRoZXIgaW4gdGhlIGFiYnJldmlhdGlvbiBvZiB0aGUgc2Vjb25kIG1v bnRoLCB0aGUgc2Vjb25kDQogICAgIGNoYXJhY3RlciAoc2hvdWxkIGJlIFUrMDBFOTogTEFUSU4g U01BTEwgTEVUVEVSIEUgV0lUSCBBQ1VURSkgaXMgb25seQ0KICAgICBvbmUgYnl0ZSBsb25nLiBU aGlzIGV4Y2x1ZGVzIHRoZSBVVEYtOCBlbmNvZGluZy4gICovDQogIHQudG1feWVhciA9IDE5NzUg LSAxOTAwOyB0LnRtX21vbiA9IDIgLSAxOyB0LnRtX21kYXkgPSA0Ow0KICBpZiAoc3RyZnRpbWUg KGJ1Ziwgc2l6ZW9mIChidWYpLCAiJWIiLCAmdCkgPCAzIHx8IGJ1ZlsyXSAhPSAndicpIHJldHVy biAxOw0KICAvKiBDaGVjayB3aGV0aGVyIHRoZSBkZWNpbWFsIHNlcGFyYXRvciBpcyBhIGNvbW1h Lg0KICAgICBPbiBOZXRCU0QgMy4wIGluIHRoZSBmcl9GUi5JU084ODU5LTEgbG9jYWxlLCBsb2Nh bGVjb252KCktPmRlY2ltYWxfcG9pbnQNCiAgICAgYXJlIG5sX2xhbmdpbmZvKFJBRElYQ0hBUikg YXJlIGJvdGggIi4iLiAgKi8NCiAgaWYgKGxvY2FsZWNvbnYgKCkgLT5kZWNpbWFsX3BvaW50WzBd ICE9ICcsJykgcmV0dXJuIDE7DQogIHJldHVybiAwOw0KfQ0KDQpfQUNFT0YNCiAgICBpZiB7IHsg ZXZhbCBlY2hvICJcIlwkYXNfbWVcIjoke2FzX2xpbmVuby0kTElORU5PfTogXCIkYWNfbGlua1wi IjsgfSA+JjUNCiAgKGV2YWwgJGFjX2xpbmspIDI+JjUNCiAgYWNfc3RhdHVzPSQ/DQogICRhc19l Y2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkPyA9ICRhY19zdGF0dXMiID4mNQ0K ICB0ZXN0ICRhY19zdGF0dXMgPSAwOyB9ICYmIHRlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0OyB0 aGVuDQogICAgICBjYXNlICIkaG9zdF9vcyIgaW4NCiAgICAgICAgIyBIYW5kbGUgbmF0aXZlIFdp bmRvd3Mgc3BlY2lhbGx5LCBiZWNhdXNlIHRoZXJlIHNldGxvY2FsZSgpIGludGVycHJldHMNCiAg ICAgICAgIyAiYXIiIGFzICJBcmFiaWMiIG9yICJBcmFiaWNfU2F1ZGkgQXJhYmlhLjEyNTYiLA0K ICAgICAgICAjICJmciIgb3IgImZyYSIgYXMgIkZyZW5jaCIgb3IgIkZyZW5jaF9GcmFuY2UuMTI1 MiIsDQogICAgICAgICMgImdlIighKSBvciAiZGV1IighKSBhcyAiR2VybWFuIiBvciAiR2VybWFu X0dlcm1hbnkuMTI1MiIsDQogICAgICAgICMgImphIiBhcyAiSmFwYW5lc2UiIG9yICJKYXBhbmVz ZV9KYXBhbi45MzIiLA0KICAgICAgICAjIGFuZCBzaW1pbGFyLg0KICAgICAgICBtaW5ndyopDQog ICAgICAgICAgIyBUZXN0IGZvciB0aGUgbmF0aXZlIFdpbjMyIGxvY2FsZSBuYW1lLg0KICAgICAg ICAgIGlmIChMQ19BTEw9RnJlbmNoX0ZyYW5jZS4xMjUyIExDX1RJTUU9IExDX0NUWVBFPSAuL2Nv bmZ0ZXN0OyBleGl0KSAyPi9kZXYvbnVsbDsgdGhlbg0KICAgICAgICAgICAgZ3RfY3ZfbG9jYWxl X2ZyPUZyZW5jaF9GcmFuY2UuMTI1Mg0KICAgICAgICAgIGVsc2UNCiAgICAgICAgICAgICMgTm9u ZSBmb3VuZC4NCiAgICAgICAgICAgIGd0X2N2X2xvY2FsZV9mcj1ub25lDQogICAgICAgICAgZmkN CiAgICAgICAgICA7Ow0KICAgICAgICAqKQ0KICAgICAgICAgICMgU2V0dGluZyBMQ19BTEwgaXMg bm90IGVub3VnaC4gTmVlZCB0byBzZXQgTENfVElNRSB0byBlbXB0eSwgYmVjYXVzZQ0KICAgICAg ICAgICMgb3RoZXJ3aXNlIG9uIE1hY09TIFggMTAuMy41IHRoZSBMQ19USU1FPUMgZnJvbSB0aGUg YmVnaW5uaW5nIG9mIHRoZQ0KICAgICAgICAgICMgY29uZmlndXJlIHNjcmlwdCB3b3VsZCBvdmVy cmlkZSB0aGUgTENfQUxMIHNldHRpbmcuIExpa2V3aXNlIGZvcg0KICAgICAgICAgICMgTENfQ1RZ UEUsIHdoaWNoIGlzIGFsc28gc2V0IGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIGNvbmZpZ3VyZSBz Y3JpcHQuDQogICAgICAgICAgIyBUZXN0IGZvciB0aGUgdXN1YWwgbG9jYWxlIG5hbWUuDQogICAg ICAgICAgaWYgKExDX0FMTD1mcl9GUiBMQ19USU1FPSBMQ19DVFlQRT0gLi9jb25mdGVzdDsgZXhp dCkgMj4vZGV2L251bGw7IHRoZW4NCiAgICAgICAgICAgIGd0X2N2X2xvY2FsZV9mcj1mcl9GUg0K ICAgICAgICAgIGVsc2UNCiAgICAgICAgICAgICMgVGVzdCBmb3IgdGhlIGxvY2FsZSBuYW1lIHdp dGggZXhwbGljaXQgZW5jb2Rpbmcgc3VmZml4Lg0KICAgICAgICAgICAgaWYgKExDX0FMTD1mcl9G Ui5JU08tODg1OS0xIExDX1RJTUU9IExDX0NUWVBFPSAuL2NvbmZ0ZXN0OyBleGl0KSAyPi9kZXYv bnVsbDsgdGhlbg0KICAgICAgICAgICAgICBndF9jdl9sb2NhbGVfZnI9ZnJfRlIuSVNPLTg4NTkt MQ0KICAgICAgICAgICAgZWxzZQ0KICAgICAgICAgICAgICAjIFRlc3QgZm9yIHRoZSBBSVgsIE9T Ri8xLCBGcmVlQlNELCBOZXRCU0QsIE9wZW5CU0QgbG9jYWxlIG5hbWUuDQogICAgICAgICAgICAg IGlmIChMQ19BTEw9ZnJfRlIuSVNPODg1OS0xIExDX1RJTUU9IExDX0NUWVBFPSAuL2NvbmZ0ZXN0 OyBleGl0KSAyPi9kZXYvbnVsbDsgdGhlbg0KICAgICAgICAgICAgICAgIGd0X2N2X2xvY2FsZV9m cj1mcl9GUi5JU084ODU5LTENCiAgICAgICAgICAgICAgZWxzZQ0KICAgICAgICAgICAgICAgICMg VGVzdCBmb3IgdGhlIEhQLVVYIGxvY2FsZSBuYW1lLg0KICAgICAgICAgICAgICAgIGlmIChMQ19B TEw9ZnJfRlIuaXNvODg1OTEgTENfVElNRT0gTENfQ1RZUEU9IC4vY29uZnRlc3Q7IGV4aXQpIDI+ L2Rldi9udWxsOyB0aGVuDQogICAgICAgICAgICAgICAgICBndF9jdl9sb2NhbGVfZnI9ZnJfRlIu aXNvODg1OTENCiAgICAgICAgICAgICAgICBlbHNlDQogICAgICAgICAgICAgICAgICAjIFRlc3Qg Zm9yIHRoZSBTb2xhcmlzIDcgbG9jYWxlIG5hbWUuDQogICAgICAgICAgICAgICAgICBpZiAoTENf QUxMPWZyIExDX1RJTUU9IExDX0NUWVBFPSAuL2NvbmZ0ZXN0OyBleGl0KSAyPi9kZXYvbnVsbDsg dGhlbg0KICAgICAgICAgICAgICAgICAgICBndF9jdl9sb2NhbGVfZnI9ZnINCiAgICAgICAgICAg ICAgICAgIGVsc2UNCiAgICAgICAgICAgICAgICAgICAgIyBOb25lIGZvdW5kLg0KICAgICAgICAg ICAgICAgICAgICBndF9jdl9sb2NhbGVfZnI9bm9uZQ0KICAgICAgICAgICAgICAgICAgZmkNCiAg ICAgICAgICAgICAgICBmaQ0KICAgICAgICAgICAgICBmaQ0KICAgICAgICAgICAgZmkNCiAgICAg ICAgICBmaQ0KICAgICAgICAgIDs7DQogICAgICBlc2FjDQogICAgZmkNCiAgICBybSAtZnIgY29u ZnRlc3QqDQoNCmZpDQp7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJl c3VsdDogJGd0X2N2X2xvY2FsZV9mciIgPiY1DQokYXNfZWNobyAiJGd0X2N2X2xvY2FsZV9mciIg PiY2OyB9DQogIExPQ0FMRV9GUj0kZ3RfY3ZfbG9jYWxlX2ZyDQoNCg0KDQoNCiAgeyAkYXNfZWNo byAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgYSBmcmVuY2ggVW5p Y29kZSBsb2NhbGUiID4mNQ0KJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIGEgZnJlbmNoIFVuaWNv ZGUgbG9jYWxlLi4uICIgPiY2OyB9DQppZiAke2d0X2N2X2xvY2FsZV9mcl91dGY4Kzp9IGZhbHNl OyB0aGVuIDoNCiAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYNCmVsc2UNCg0KICAgIGNhdCBj b25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQNCi8qIGVuZCBjb25mZGVmcy5o LiAgKi8NCg0KI2luY2x1ZGUgPGxvY2FsZS5oPg0KI2luY2x1ZGUgPHRpbWUuaD4NCiNpZiBIQVZF X0xBTkdJTkZPX0NPREVTRVQNCiMgaW5jbHVkZSA8bGFuZ2luZm8uaD4NCiNlbmRpZg0KI2luY2x1 ZGUgPHN0ZGxpYi5oPg0KI2luY2x1ZGUgPHN0cmluZy5oPg0Kc3RydWN0IHRtIHQ7DQpjaGFyIGJ1 ZlsxNl07DQppbnQgbWFpbiAoKSB7DQogIC8qIE9uIEJlT1MgYW5kIEhhaWt1LCBsb2NhbGVzIGFy ZSBub3QgaW1wbGVtZW50ZWQgaW4gbGliYy4gIFJhdGhlciwgbGliaW50bA0KICAgICBpbWl0YXRl cyBsb2NhbGUgZGVwZW5kZW50IGJlaGF2aW91ciBieSBsb29raW5nIGF0IHRoZSBlbnZpcm9ubWVu dA0KICAgICB2YXJpYWJsZXMsIGFuZCBhbGwgbG9jYWxlcyB1c2UgdGhlIFVURi04IGVuY29kaW5n LiAgKi8NCiNpZiAhKGRlZmluZWQgX19CRU9TX18gfHwgZGVmaW5lZCBfX0hBSUtVX18pDQogIC8q IENoZWNrIHdoZXRoZXIgdGhlIGdpdmVuIGxvY2FsZSBuYW1lIGlzIHJlY29nbml6ZWQgYnkgdGhl IHN5c3RlbS4gICovDQojIGlmIChkZWZpbmVkIF9XSU4zMiB8fCBkZWZpbmVkIF9fV0lOMzJfXykg JiYgIWRlZmluZWQgX19DWUdXSU5fXw0KICAvKiBPbiBuYXRpdmUgV2luMzIsIHNldGxvY2FsZShj YXRlZ29yeSwgIiIpIGxvb2tzIGF0IHRoZSBzeXN0ZW0gc2V0dGluZ3MsDQogICAgIG5vdCBhdCB0 aGUgZW52aXJvbm1lbnQgdmFyaWFibGVzLiAgQWxzbywgd2hlbiBhbiBlbmNvZGluZyBzdWZmaXgg c3VjaA0KICAgICBhcyAiLjY1MDAxIiBvciAiLjU0OTM2IiBpcyBzcGVmaWNpZWQsIGl0IHN1Y2Nl ZWRzIGJ1dCBzZXRzIHRoZSBMQ19DVFlQRQ0KICAgICBjYXRlZ29yeSBvZiB0aGUgbG9jYWxlIHRv ICJDIi4gICovDQogIGlmIChzZXRsb2NhbGUgKExDX0FMTCwgZ2V0ZW52ICgiTENfQUxMIikpID09 IE5VTEwNCiAgICAgIHx8IHN0cmNtcCAoc2V0bG9jYWxlIChMQ19DVFlQRSwgTlVMTCksICJDIikg PT0gMCkNCiAgICByZXR1cm4gMTsNCiMgZWxzZQ0KICBpZiAoc2V0bG9jYWxlIChMQ19BTEwsICIi KSA9PSBOVUxMKSByZXR1cm4gMTsNCiMgZW5kaWYNCiAgLyogQ2hlY2sgd2hldGhlciBubF9sYW5n aW5mbyhDT0RFU0VUKSBpcyBub25lbXB0eSBhbmQgbm90ICJBU0NJSSIgb3IgIjY0NiIuDQogICAg IE9uIE1hY09TIFggMTAuMy41IChEYXJ3aW4gNy41KSBpbiB0aGUgZnJfRlIgbG9jYWxlLCBubF9s YW5naW5mbyhDT0RFU0VUKQ0KICAgICBpcyBlbXB0eSwgYW5kIHRoZSBiZWhhdmlvdXIgb2YgVGNs IDguNCBpbiB0aGlzIGxvY2FsZSBpcyBub3QgdXNlZnVsLg0KICAgICBPbiBPcGVuQlNEIDQuMCwg d2hlbiBhbiB1bnN1cHBvcnRlZCBsb2NhbGUgaXMgc3BlY2lmaWVkLCBzZXRsb2NhbGUoKQ0KICAg ICBzdWNjZWVkcyBidXQgdGhlbiBubF9sYW5naW5mbyhDT0RFU0VUKSBpcyAiNjQ2Ii4gSW4gdGhp cyBzaXR1YXRpb24sDQogICAgIHNvbWUgdW5pdCB0ZXN0cyBmYWlsLiAgKi8NCiMgaWYgSEFWRV9M QU5HSU5GT19DT0RFU0VUDQogIHsNCiAgICBjb25zdCBjaGFyICpjcyA9IG5sX2xhbmdpbmZvIChD T0RFU0VUKTsNCiAgICBpZiAoY3NbMF0gPT0gJ1wwJyB8fCBzdHJjbXAgKGNzLCAiQVNDSUkiKSA9 PSAwIHx8IHN0cmNtcCAoY3MsICI2NDYiKSA9PSAwKQ0KICAgICAgcmV0dXJuIDE7DQogIH0NCiMg ZW5kaWYNCiMgaWZkZWYgX19DWUdXSU5fXw0KICAvKiBPbiBDeWd3aW4sIGF2b2lkIGxvY2FsZSBu YW1lcyB3aXRob3V0IGVuY29kaW5nIHN1ZmZpeCwgYmVjYXVzZSB0aGUNCiAgICAgbG9jYWxlX2No YXJzZXQoKSBmdW5jdGlvbiByZWxpZXMgb24gdGhlIGVuY29kaW5nIHN1ZmZpeC4gIE5vdGUgdGhh dA0KICAgICBMQ19BTEwgaXMgc2V0IG9uIHRoZSBjb21tYW5kIGxpbmUuICAqLw0KICBpZiAoc3Ry Y2hyIChnZXRlbnYgKCJMQ19BTEwiKSwgJy4nKSA9PSBOVUxMKSByZXR1cm4gMTsNCiMgZW5kaWYN CiAgLyogQ2hlY2sgd2hldGhlciBpbiB0aGUgYWJicmV2aWF0aW9uIG9mIHRoZSBzZWNvbmQgbW9u dGgsIHRoZSBzZWNvbmQNCiAgICAgY2hhcmFjdGVyIChzaG91bGQgYmUgVSswMEU5OiBMQVRJTiBT TUFMTCBMRVRURVIgRSBXSVRIIEFDVVRFKSBpcw0KICAgICB0d28gYnl0ZXMgbG9uZywgd2l0aCBV VEYtOCBlbmNvZGluZy4gICovDQogIHQudG1feWVhciA9IDE5NzUgLSAxOTAwOyB0LnRtX21vbiA9 IDIgLSAxOyB0LnRtX21kYXkgPSA0Ow0KICBpZiAoc3RyZnRpbWUgKGJ1Ziwgc2l6ZW9mIChidWYp LCAiJWIiLCAmdCkgPCA0DQogICAgICB8fCBidWZbMV0gIT0gKGNoYXIpIDB4YzMgfHwgYnVmWzJd ICE9IChjaGFyKSAweGE5IHx8IGJ1ZlszXSAhPSAndicpDQogICAgcmV0dXJuIDE7DQojZW5kaWYN CiAgLyogQ2hlY2sgd2hldGhlciB0aGUgZGVjaW1hbCBzZXBhcmF0b3IgaXMgYSBjb21tYS4NCiAg ICAgT24gTmV0QlNEIDMuMCBpbiB0aGUgZnJfRlIuSVNPODg1OS0xIGxvY2FsZSwgbG9jYWxlY29u digpLT5kZWNpbWFsX3BvaW50DQogICAgIGFyZSBubF9sYW5naW5mbyhSQURJWENIQVIpIGFyZSBi b3RoICIuIi4gICovDQogIGlmIChsb2NhbGVjb252ICgpIC0+ZGVjaW1hbF9wb2ludFswXSAhPSAn LCcpIHJldHVybiAxOw0KICByZXR1cm4gMDsNCn0NCg0KX0FDRU9GDQogICAgaWYgeyB7IGV2YWwg ZWNobyAiXCJcJGFzX21lXCI6JHthc19saW5lbm8tJExJTkVOT306IFwiJGFjX2xpbmtcIiI7IH0g PiY1DQogIChldmFsICRhY19saW5rKSAyPiY1DQogIGFjX3N0YXR1cz0kPw0KICAkYXNfZWNobyAi JGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUNCiAgdGVz dCAkYWNfc3RhdHVzID0gMDsgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dDsgdGhlbg0K ICAgICAgY2FzZSAiJGhvc3Rfb3MiIGluDQogICAgICAgICMgSGFuZGxlIG5hdGl2ZSBXaW5kb3dz IHNwZWNpYWxseSwgYmVjYXVzZSB0aGVyZSBzZXRsb2NhbGUoKSBpbnRlcnByZXRzDQogICAgICAg ICMgImFyIiBhcyAiQXJhYmljIiBvciAiQXJhYmljX1NhdWRpIEFyYWJpYS4xMjU2IiwNCiAgICAg ICAgIyAiZnIiIG9yICJmcmEiIGFzICJGcmVuY2giIG9yICJGcmVuY2hfRnJhbmNlLjEyNTIiLA0K ICAgICAgICAjICJnZSIoISkgb3IgImRldSIoISkgYXMgIkdlcm1hbiIgb3IgIkdlcm1hbl9HZXJt YW55LjEyNTIiLA0KICAgICAgICAjICJqYSIgYXMgIkphcGFuZXNlIiBvciAiSmFwYW5lc2VfSmFw YW4uOTMyIiwNCiAgICAgICAgIyBhbmQgc2ltaWxhci4NCiAgICAgICAgbWluZ3cqKQ0KICAgICAg ICAgICMgVGVzdCBmb3IgdGhlIGh5cG90aGV0aWNhbCBuYXRpdmUgV2luMzIgbG9jYWxlIG5hbWUu DQogICAgICAgICAgaWYgKExDX0FMTD1GcmVuY2hfRnJhbmNlLjY1MDAxIExDX1RJTUU9IExDX0NU WVBFPSAuL2NvbmZ0ZXN0OyBleGl0KSAyPi9kZXYvbnVsbDsgdGhlbg0KICAgICAgICAgICAgZ3Rf Y3ZfbG9jYWxlX2ZyX3V0Zjg9RnJlbmNoX0ZyYW5jZS42NTAwMQ0KICAgICAgICAgIGVsc2UNCiAg ICAgICAgICAgICMgTm9uZSBmb3VuZC4NCiAgICAgICAgICAgIGd0X2N2X2xvY2FsZV9mcl91dGY4 PW5vbmUNCiAgICAgICAgICBmaQ0KICAgICAgICAgIDs7DQogICAgICAgICopDQogICAgICAgICAg IyBTZXR0aW5nIExDX0FMTCBpcyBub3QgZW5vdWdoLiBOZWVkIHRvIHNldCBMQ19USU1FIHRvIGVt cHR5LCBiZWNhdXNlDQogICAgICAgICAgIyBvdGhlcndpc2Ugb24gTWFjT1MgWCAxMC4zLjUgdGhl IExDX1RJTUU9QyBmcm9tIHRoZSBiZWdpbm5pbmcgb2YgdGhlDQogICAgICAgICAgIyBjb25maWd1 cmUgc2NyaXB0IHdvdWxkIG92ZXJyaWRlIHRoZSBMQ19BTEwgc2V0dGluZy4gTGlrZXdpc2UgZm9y DQogICAgICAgICAgIyBMQ19DVFlQRSwgd2hpY2ggaXMgYWxzbyBzZXQgYXQgdGhlIGJlZ2lubmlu ZyBvZiB0aGUgY29uZmlndXJlIHNjcmlwdC4NCiAgICAgICAgICAjIFRlc3QgZm9yIHRoZSB1c3Vh bCBsb2NhbGUgbmFtZS4NCiAgICAgICAgICBpZiAoTENfQUxMPWZyX0ZSIExDX1RJTUU9IExDX0NU WVBFPSAuL2NvbmZ0ZXN0OyBleGl0KSAyPi9kZXYvbnVsbDsgdGhlbg0KICAgICAgICAgICAgZ3Rf Y3ZfbG9jYWxlX2ZyX3V0Zjg9ZnJfRlINCiAgICAgICAgICBlbHNlDQogICAgICAgICAgICAjIFRl c3QgZm9yIHRoZSBsb2NhbGUgbmFtZSB3aXRoIGV4cGxpY2l0IGVuY29kaW5nIHN1ZmZpeC4NCiAg ICAgICAgICAgIGlmIChMQ19BTEw9ZnJfRlIuVVRGLTggTENfVElNRT0gTENfQ1RZUEU9IC4vY29u ZnRlc3Q7IGV4aXQpIDI+L2Rldi9udWxsOyB0aGVuDQogICAgICAgICAgICAgIGd0X2N2X2xvY2Fs ZV9mcl91dGY4PWZyX0ZSLlVURi04DQogICAgICAgICAgICBlbHNlDQogICAgICAgICAgICAgICMg VGVzdCBmb3IgdGhlIFNvbGFyaXMgNyBsb2NhbGUgbmFtZS4NCiAgICAgICAgICAgICAgaWYgKExD X0FMTD1mci5VVEYtOCBMQ19USU1FPSBMQ19DVFlQRT0gLi9jb25mdGVzdDsgZXhpdCkgMj4vZGV2 L251bGw7IHRoZW4NCiAgICAgICAgICAgICAgICBndF9jdl9sb2NhbGVfZnJfdXRmOD1mci5VVEYt OA0KICAgICAgICAgICAgICBlbHNlDQogICAgICAgICAgICAgICAgIyBOb25lIGZvdW5kLg0KICAg ICAgICAgICAgICAgIGd0X2N2X2xvY2FsZV9mcl91dGY4PW5vbmUNCiAgICAgICAgICAgICAgZmkN CiAgICAgICAgICAgIGZpDQogICAgICAgICAgZmkNCiAgICAgICAgICA7Ow0KICAgICAgZXNhYw0K ICAgIGZpDQogICAgcm0gLWZyIGNvbmZ0ZXN0Kg0KDQpmaQ0KeyAkYXNfZWNobyAiJGFzX21lOiR7 YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRndF9jdl9sb2NhbGVfZnJfdXRmOCIgPiY1DQok YXNfZWNobyAiJGd0X2N2X2xvY2FsZV9mcl91dGY4IiA+JjY7IH0NCiAgTE9DQUxFX0ZSX1VURjg9 JGd0X2N2X2xvY2FsZV9mcl91dGY4DQoNCg0KDQoNCg0KICB7ICRhc19lY2hvICIkYXNfbWU6JHth c19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBhIHRyYWRpdGlvbmFsIGphcGFuZXNlIGxv Y2FsZSIgPiY1DQokYXNfZWNob19uICJjaGVja2luZyBmb3IgYSB0cmFkaXRpb25hbCBqYXBhbmVz ZSBsb2NhbGUuLi4gIiA+JjY7IH0NCmlmICR7Z3RfY3ZfbG9jYWxlX2phKzp9IGZhbHNlOyB0aGVu IDoNCiAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYNCmVsc2UNCg0KICAgIGNhdCBjb25mZGVm cy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQNCi8qIGVuZCBjb25mZGVmcy5oLiAgKi8N Cg0KI2luY2x1ZGUgPGxvY2FsZS5oPg0KI2luY2x1ZGUgPHRpbWUuaD4NCiNpZiBIQVZFX0xBTkdJ TkZPX0NPREVTRVQNCiMgaW5jbHVkZSA8bGFuZ2luZm8uaD4NCiNlbmRpZg0KI2luY2x1ZGUgPHN0 ZGxpYi5oPg0KI2luY2x1ZGUgPHN0cmluZy5oPg0Kc3RydWN0IHRtIHQ7DQpjaGFyIGJ1ZlsxNl07 DQppbnQgbWFpbiAoKQ0Kew0KICBjb25zdCBjaGFyICpwOw0KICAvKiBDaGVjayB3aGV0aGVyIHRo ZSBnaXZlbiBsb2NhbGUgbmFtZSBpcyByZWNvZ25pemVkIGJ5IHRoZSBzeXN0ZW0uICAqLw0KI2lm IChkZWZpbmVkIF9XSU4zMiB8fCBkZWZpbmVkIF9fV0lOMzJfXykgJiYgIWRlZmluZWQgX19DWUdX SU5fXw0KICAvKiBPbiBuYXRpdmUgV2luMzIsIHNldGxvY2FsZShjYXRlZ29yeSwgIiIpIGxvb2tz IGF0IHRoZSBzeXN0ZW0gc2V0dGluZ3MsDQogICAgIG5vdCBhdCB0aGUgZW52aXJvbm1lbnQgdmFy aWFibGVzLiAgQWxzbywgd2hlbiBhbiBlbmNvZGluZyBzdWZmaXggc3VjaA0KICAgICBhcyAiLjY1 MDAxIiBvciAiLjU0OTM2IiBpcyBzcGVmaWNpZWQsIGl0IHN1Y2NlZWRzIGJ1dCBzZXRzIHRoZSBM Q19DVFlQRQ0KICAgICBjYXRlZ29yeSBvZiB0aGUgbG9jYWxlIHRvICJDIi4gICovDQogIGlmIChz ZXRsb2NhbGUgKExDX0FMTCwgZ2V0ZW52ICgiTENfQUxMIikpID09IE5VTEwNCiAgICAgIHx8IHN0 cmNtcCAoc2V0bG9jYWxlIChMQ19DVFlQRSwgTlVMTCksICJDIikgPT0gMCkNCiAgICByZXR1cm4g MTsNCiNlbHNlDQogIGlmIChzZXRsb2NhbGUgKExDX0FMTCwgIiIpID09IE5VTEwpIHJldHVybiAx Ow0KI2VuZGlmDQogIC8qIENoZWNrIHdoZXRoZXIgbmxfbGFuZ2luZm8oQ09ERVNFVCkgaXMgbm9u ZW1wdHkgYW5kIG5vdCAiQVNDSUkiIG9yICI2NDYiLg0KICAgICBPbiBNYWNPUyBYIDEwLjMuNSAo RGFyd2luIDcuNSkgaW4gdGhlIGZyX0ZSIGxvY2FsZSwgbmxfbGFuZ2luZm8oQ09ERVNFVCkNCiAg ICAgaXMgZW1wdHksIGFuZCB0aGUgYmVoYXZpb3VyIG9mIFRjbCA4LjQgaW4gdGhpcyBsb2NhbGUg aXMgbm90IHVzZWZ1bC4NCiAgICAgT24gT3BlbkJTRCA0LjAsIHdoZW4gYW4gdW5zdXBwb3J0ZWQg bG9jYWxlIGlzIHNwZWNpZmllZCwgc2V0bG9jYWxlKCkNCiAgICAgc3VjY2VlZHMgYnV0IHRoZW4g bmxfbGFuZ2luZm8oQ09ERVNFVCkgaXMgIjY0NiIuIEluIHRoaXMgc2l0dWF0aW9uLA0KICAgICBz b21lIHVuaXQgdGVzdHMgZmFpbC4NCiAgICAgT24gTWlyQlNEIDEwLCB3aGVuIGFuIHVuc3VwcG9y dGVkIGxvY2FsZSBpcyBzcGVjaWZpZWQsIHNldGxvY2FsZSgpDQogICAgIHN1Y2NlZWRzIGJ1dCB0 aGVuIG5sX2xhbmdpbmZvKENPREVTRVQpIGlzICJVVEYtOCIuICAqLw0KI2lmIEhBVkVfTEFOR0lO Rk9fQ09ERVNFVA0KICB7DQogICAgY29uc3QgY2hhciAqY3MgPSBubF9sYW5naW5mbyAoQ09ERVNF VCk7DQogICAgaWYgKGNzWzBdID09ICdcMCcgfHwgc3RyY21wIChjcywgIkFTQ0lJIikgPT0gMCB8 fCBzdHJjbXAgKGNzLCAiNjQ2IikgPT0gMA0KICAgICAgICB8fCBzdHJjbXAgKGNzLCAiVVRGLTgi KSA9PSAwKQ0KICAgICAgcmV0dXJuIDE7DQogIH0NCiNlbmRpZg0KI2lmZGVmIF9fQ1lHV0lOX18N CiAgLyogT24gQ3lnd2luLCBhdm9pZCBsb2NhbGUgbmFtZXMgd2l0aG91dCBlbmNvZGluZyBzdWZm aXgsIGJlY2F1c2UgdGhlDQogICAgIGxvY2FsZV9jaGFyc2V0KCkgZnVuY3Rpb24gcmVsaWVzIG9u IHRoZSBlbmNvZGluZyBzdWZmaXguICBOb3RlIHRoYXQNCiAgICAgTENfQUxMIGlzIHNldCBvbiB0 aGUgY29tbWFuZCBsaW5lLiAgKi8NCiAgaWYgKHN0cmNociAoZ2V0ZW52ICgiTENfQUxMIiksICcu JykgPT0gTlVMTCkgcmV0dXJuIDE7DQojZW5kaWYNCiAgLyogQ2hlY2sgd2hldGhlciBNQl9DVVJf TUFYIGlzID4gMS4gIFRoaXMgZXhjbHVkZXMgdGhlIGR5c2Z1bmN0aW9uYWwgbG9jYWxlcw0KICAg ICBvbiBDeWd3aW4gMS41LnguICAqLw0KICBpZiAoTUJfQ1VSX01BWCA9PSAxKQ0KICAgIHJldHVy biAxOw0KICAvKiBDaGVjayB3aGV0aGVyIGluIGEgbW9udGggbmFtZSwgbm8gYnl0ZSBpbiB0aGUg cmFuZ2UgMHg4MC4uMHg5RiBvY2N1cnMuDQogICAgIFRoaXMgZXhjbHVkZXMgdGhlIFVURi04IGVu Y29kaW5nIChleGNlcHQgb24gTWlyQlNEKS4gICovDQogIHQudG1feWVhciA9IDE5NzUgLSAxOTAw OyB0LnRtX21vbiA9IDIgLSAxOyB0LnRtX21kYXkgPSA0Ow0KICBpZiAoc3RyZnRpbWUgKGJ1Ziwg c2l6ZW9mIChidWYpLCAiJUIiLCAmdCkgPCAyKSByZXR1cm4gMTsNCiAgZm9yIChwID0gYnVmOyAq cCAhPSAnXDAnOyBwKyspDQogICAgaWYgKCh1bnNpZ25lZCBjaGFyKSAqcCA+PSAweDgwICYmICh1 bnNpZ25lZCBjaGFyKSAqcCA8IDB4YTApDQogICAgICByZXR1cm4gMTsNCiAgcmV0dXJuIDA7DQp9 DQoNCl9BQ0VPRg0KICAgIGlmIHsgeyBldmFsIGVjaG8gIlwiXCRhc19tZVwiOiR7YXNfbGluZW5v LSRMSU5FTk99OiBcIiRhY19saW5rXCIiOyB9ID4mNQ0KICAoZXZhbCAkYWNfbGluaykgMj4mNQ0K ICBhY19zdGF0dXM9JD8NCiAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTog XCQ/ID0gJGFjX3N0YXR1cyIgPiY1DQogIHRlc3QgJGFjX3N0YXR1cyA9IDA7IH0gJiYgdGVzdCAt cyBjb25mdGVzdCRhY19leGVleHQ7IHRoZW4NCiAgICAgIGNhc2UgIiRob3N0X29zIiBpbg0KICAg ICAgICAjIEhhbmRsZSBuYXRpdmUgV2luZG93cyBzcGVjaWFsbHksIGJlY2F1c2UgdGhlcmUgc2V0 bG9jYWxlKCkgaW50ZXJwcmV0cw0KICAgICAgICAjICJhciIgYXMgIkFyYWJpYyIgb3IgIkFyYWJp Y19TYXVkaSBBcmFiaWEuMTI1NiIsDQogICAgICAgICMgImZyIiBvciAiZnJhIiBhcyAiRnJlbmNo IiBvciAiRnJlbmNoX0ZyYW5jZS4xMjUyIiwNCiAgICAgICAgIyAiZ2UiKCEpIG9yICJkZXUiKCEp IGFzICJHZXJtYW4iIG9yICJHZXJtYW5fR2VybWFueS4xMjUyIiwNCiAgICAgICAgIyAiamEiIGFz ICJKYXBhbmVzZSIgb3IgIkphcGFuZXNlX0phcGFuLjkzMiIsDQogICAgICAgICMgYW5kIHNpbWls YXIuDQogICAgICAgIG1pbmd3KikNCiAgICAgICAgICAjIE5vdGUgdGhhdCBvbiBuYXRpdmUgV2lu MzIsIHRoZSBKYXBhbmVzZSBsb2NhbGUgaXMgSmFwYW5lc2VfSmFwYW4uOTMyLA0KICAgICAgICAg ICMgYW5kIENQOTMyIGlzIHZlcnkgZGlmZmVyZW50IGZyb20gRVVDLUpQLCBzbyB3ZSBjYW5ub3Qg dXNlIGl0IGhlcmUuDQogICAgICAgICAgZ3RfY3ZfbG9jYWxlX2phPW5vbmUNCiAgICAgICAgICA7 Ow0KICAgICAgICAqKQ0KICAgICAgICAgICMgU2V0dGluZyBMQ19BTEwgaXMgbm90IGVub3VnaC4g TmVlZCB0byBzZXQgTENfVElNRSB0byBlbXB0eSwgYmVjYXVzZQ0KICAgICAgICAgICMgb3RoZXJ3 aXNlIG9uIE1hY09TIFggMTAuMy41IHRoZSBMQ19USU1FPUMgZnJvbSB0aGUgYmVnaW5uaW5nIG9m IHRoZQ0KICAgICAgICAgICMgY29uZmlndXJlIHNjcmlwdCB3b3VsZCBvdmVycmlkZSB0aGUgTENf QUxMIHNldHRpbmcuIExpa2V3aXNlIGZvcg0KICAgICAgICAgICMgTENfQ1RZUEUsIHdoaWNoIGlz IGFsc28gc2V0IGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIGNvbmZpZ3VyZSBzY3JpcHQuDQogICAg ICAgICAgIyBUZXN0IGZvciB0aGUgQUlYIGxvY2FsZSBuYW1lLg0KICAgICAgICAgIGlmIChMQ19B TEw9amFfSlAgTENfVElNRT0gTENfQ1RZUEU9IC4vY29uZnRlc3Q7IGV4aXQpIDI+L2Rldi9udWxs OyB0aGVuDQogICAgICAgICAgICBndF9jdl9sb2NhbGVfamE9amFfSlANCiAgICAgICAgICBlbHNl DQogICAgICAgICAgICAjIFRlc3QgZm9yIHRoZSBsb2NhbGUgbmFtZSB3aXRoIGV4cGxpY2l0IGVu Y29kaW5nIHN1ZmZpeC4NCiAgICAgICAgICAgIGlmIChMQ19BTEw9amFfSlAuRVVDLUpQIExDX1RJ TUU9IExDX0NUWVBFPSAuL2NvbmZ0ZXN0OyBleGl0KSAyPi9kZXYvbnVsbDsgdGhlbg0KICAgICAg ICAgICAgICBndF9jdl9sb2NhbGVfamE9amFfSlAuRVVDLUpQDQogICAgICAgICAgICBlbHNlDQog ICAgICAgICAgICAgICMgVGVzdCBmb3IgdGhlIEhQLVVYLCBPU0YvMSwgTmV0QlNEIGxvY2FsZSBu YW1lLg0KICAgICAgICAgICAgICBpZiAoTENfQUxMPWphX0pQLmV1Y0pQIExDX1RJTUU9IExDX0NU WVBFPSAuL2NvbmZ0ZXN0OyBleGl0KSAyPi9kZXYvbnVsbDsgdGhlbg0KICAgICAgICAgICAgICAg IGd0X2N2X2xvY2FsZV9qYT1qYV9KUC5ldWNKUA0KICAgICAgICAgICAgICBlbHNlDQogICAgICAg ICAgICAgICAgIyBUZXN0IGZvciB0aGUgSVJJWCwgRnJlZUJTRCBsb2NhbGUgbmFtZS4NCiAgICAg ICAgICAgICAgICBpZiAoTENfQUxMPWphX0pQLkVVQyBMQ19USU1FPSBMQ19DVFlQRT0gLi9jb25m dGVzdDsgZXhpdCkgMj4vZGV2L251bGw7IHRoZW4NCiAgICAgICAgICAgICAgICAgIGd0X2N2X2xv Y2FsZV9qYT1qYV9KUC5FVUMNCiAgICAgICAgICAgICAgICBlbHNlDQogICAgICAgICAgICAgICAg ICAjIFRlc3QgZm9yIHRoZSBTb2xhcmlzIDcgbG9jYWxlIG5hbWUuDQogICAgICAgICAgICAgICAg ICBpZiAoTENfQUxMPWphIExDX1RJTUU9IExDX0NUWVBFPSAuL2NvbmZ0ZXN0OyBleGl0KSAyPi9k ZXYvbnVsbDsgdGhlbg0KICAgICAgICAgICAgICAgICAgICBndF9jdl9sb2NhbGVfamE9amENCiAg ICAgICAgICAgICAgICAgIGVsc2UNCiAgICAgICAgICAgICAgICAgICAgIyBTcGVjaWFsIHRlc3Qg Zm9yIE5ldEJTRCAxLjYuDQogICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgLWYgL3Vzci9zaGFy ZS9sb2NhbGUvamFfSlAuZXVjSlAvTENfQ1RZUEU7IHRoZW4NCiAgICAgICAgICAgICAgICAgICAg ICBndF9jdl9sb2NhbGVfamE9amFfSlAuZXVjSlANCiAgICAgICAgICAgICAgICAgICAgZWxzZQ0K ICAgICAgICAgICAgICAgICAgICAgICMgTm9uZSBmb3VuZC4NCiAgICAgICAgICAgICAgICAgICAg ICBndF9jdl9sb2NhbGVfamE9bm9uZQ0KICAgICAgICAgICAgICAgICAgICBmaQ0KICAgICAgICAg ICAgICAgICAgZmkNCiAgICAgICAgICAgICAgICBmaQ0KICAgICAgICAgICAgICBmaQ0KICAgICAg ICAgICAgZmkNCiAgICAgICAgICBmaQ0KICAgICAgICAgIDs7DQogICAgICBlc2FjDQogICAgZmkN CiAgICBybSAtZnIgY29uZnRlc3QqDQoNCmZpDQp7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5l bm8tJExJTkVOT306IHJlc3VsdDogJGd0X2N2X2xvY2FsZV9qYSIgPiY1DQokYXNfZWNobyAiJGd0 X2N2X2xvY2FsZV9qYSIgPiY2OyB9DQogIExPQ0FMRV9KQT0kZ3RfY3ZfbG9jYWxlX2phDQoNCg0K DQoNCg0KICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5n IGZvciBhIHRyYW5zaXRpb25hbCBjaGluZXNlIGxvY2FsZSIgPiY1DQokYXNfZWNob19uICJjaGVj a2luZyBmb3IgYSB0cmFuc2l0aW9uYWwgY2hpbmVzZSBsb2NhbGUuLi4gIiA+JjY7IH0NCmlmICR7 Z3RfY3ZfbG9jYWxlX3poX0NOKzp9IGZhbHNlOyB0aGVuIDoNCiAgJGFzX2VjaG9fbiAiKGNhY2hl ZCkgIiA+JjYNCmVsc2UNCg0KICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0 LiRhY19leHQNCi8qIGVuZCBjb25mZGVmcy5oLiAgKi8NCg0KI2luY2x1ZGUgPGxvY2FsZS5oPg0K I2luY2x1ZGUgPHN0ZGxpYi5oPg0KI2luY2x1ZGUgPHRpbWUuaD4NCiNpZiBIQVZFX0xBTkdJTkZP X0NPREVTRVQNCiMgaW5jbHVkZSA8bGFuZ2luZm8uaD4NCiNlbmRpZg0KI2luY2x1ZGUgPHN0ZGxp Yi5oPg0KI2luY2x1ZGUgPHN0cmluZy5oPg0Kc3RydWN0IHRtIHQ7DQpjaGFyIGJ1ZlsxNl07DQpp bnQgbWFpbiAoKQ0Kew0KICBjb25zdCBjaGFyICpwOw0KICAvKiBDaGVjayB3aGV0aGVyIHRoZSBn aXZlbiBsb2NhbGUgbmFtZSBpcyByZWNvZ25pemVkIGJ5IHRoZSBzeXN0ZW0uICAqLw0KI2lmIChk ZWZpbmVkIF9XSU4zMiB8fCBkZWZpbmVkIF9fV0lOMzJfXykgJiYgIWRlZmluZWQgX19DWUdXSU5f Xw0KICAvKiBPbiBuYXRpdmUgV2luMzIsIHNldGxvY2FsZShjYXRlZ29yeSwgIiIpIGxvb2tzIGF0 IHRoZSBzeXN0ZW0gc2V0dGluZ3MsDQogICAgIG5vdCBhdCB0aGUgZW52aXJvbm1lbnQgdmFyaWFi bGVzLiAgQWxzbywgd2hlbiBhbiBlbmNvZGluZyBzdWZmaXggc3VjaA0KICAgICBhcyAiLjY1MDAx IiBvciAiLjU0OTM2IiBpcyBzcGVmaWNpZWQsIGl0IHN1Y2NlZWRzIGJ1dCBzZXRzIHRoZSBMQ19D VFlQRQ0KICAgICBjYXRlZ29yeSBvZiB0aGUgbG9jYWxlIHRvICJDIi4gICovDQogIGlmIChzZXRs b2NhbGUgKExDX0FMTCwgZ2V0ZW52ICgiTENfQUxMIikpID09IE5VTEwNCiAgICAgIHx8IHN0cmNt cCAoc2V0bG9jYWxlIChMQ19DVFlQRSwgTlVMTCksICJDIikgPT0gMCkNCiAgICByZXR1cm4gMTsN CiNlbHNlDQogIGlmIChzZXRsb2NhbGUgKExDX0FMTCwgIiIpID09IE5VTEwpIHJldHVybiAxOw0K I2VuZGlmDQogIC8qIENoZWNrIHdoZXRoZXIgbmxfbGFuZ2luZm8oQ09ERVNFVCkgaXMgbm9uZW1w dHkgYW5kIG5vdCAiQVNDSUkiIG9yICI2NDYiLg0KICAgICBPbiBNYWNPUyBYIDEwLjMuNSAoRGFy d2luIDcuNSkgaW4gdGhlIGZyX0ZSIGxvY2FsZSwgbmxfbGFuZ2luZm8oQ09ERVNFVCkNCiAgICAg aXMgZW1wdHksIGFuZCB0aGUgYmVoYXZpb3VyIG9mIFRjbCA4LjQgaW4gdGhpcyBsb2NhbGUgaXMg bm90IHVzZWZ1bC4NCiAgICAgT24gT3BlbkJTRCA0LjAsIHdoZW4gYW4gdW5zdXBwb3J0ZWQgbG9j YWxlIGlzIHNwZWNpZmllZCwgc2V0bG9jYWxlKCkNCiAgICAgc3VjY2VlZHMgYnV0IHRoZW4gbmxf bGFuZ2luZm8oQ09ERVNFVCkgaXMgIjY0NiIuIEluIHRoaXMgc2l0dWF0aW9uLA0KICAgICBzb21l IHVuaXQgdGVzdHMgZmFpbC4NCiAgICAgT24gTWlyQlNEIDEwLCB3aGVuIGFuIHVuc3VwcG9ydGVk IGxvY2FsZSBpcyBzcGVjaWZpZWQsIHNldGxvY2FsZSgpDQogICAgIHN1Y2NlZWRzIGJ1dCB0aGVu IG5sX2xhbmdpbmZvKENPREVTRVQpIGlzICJVVEYtOCIuICAqLw0KI2lmIEhBVkVfTEFOR0lORk9f Q09ERVNFVA0KICB7DQogICAgY29uc3QgY2hhciAqY3MgPSBubF9sYW5naW5mbyAoQ09ERVNFVCk7 DQogICAgaWYgKGNzWzBdID09ICdcMCcgfHwgc3RyY21wIChjcywgIkFTQ0lJIikgPT0gMCB8fCBz dHJjbXAgKGNzLCAiNjQ2IikgPT0gMA0KICAgICAgICB8fCBzdHJjbXAgKGNzLCAiVVRGLTgiKSA9 PSAwKQ0KICAgICAgcmV0dXJuIDE7DQogIH0NCiNlbmRpZg0KI2lmZGVmIF9fQ1lHV0lOX18NCiAg LyogT24gQ3lnd2luLCBhdm9pZCBsb2NhbGUgbmFtZXMgd2l0aG91dCBlbmNvZGluZyBzdWZmaXgs IGJlY2F1c2UgdGhlDQogICAgIGxvY2FsZV9jaGFyc2V0KCkgZnVuY3Rpb24gcmVsaWVzIG9uIHRo ZSBlbmNvZGluZyBzdWZmaXguICBOb3RlIHRoYXQNCiAgICAgTENfQUxMIGlzIHNldCBvbiB0aGUg Y29tbWFuZCBsaW5lLiAgKi8NCiAgaWYgKHN0cmNociAoZ2V0ZW52ICgiTENfQUxMIiksICcuJykg PT0gTlVMTCkgcmV0dXJuIDE7DQojZW5kaWYNCiAgLyogQ2hlY2sgd2hldGhlciBpbiBhIG1vbnRo IG5hbWUsIG5vIGJ5dGUgaW4gdGhlIHJhbmdlIDB4ODAuLjB4OUYgb2NjdXJzLg0KICAgICBUaGlz IGV4Y2x1ZGVzIHRoZSBVVEYtOCBlbmNvZGluZyAoZXhjZXB0IG9uIE1pckJTRCkuICAqLw0KICB0 LnRtX3llYXIgPSAxOTc1IC0gMTkwMDsgdC50bV9tb24gPSAyIC0gMTsgdC50bV9tZGF5ID0gNDsN CiAgaWYgKHN0cmZ0aW1lIChidWYsIHNpemVvZiAoYnVmKSwgIiVCIiwgJnQpIDwgMikgcmV0dXJu IDE7DQogIGZvciAocCA9IGJ1ZjsgKnAgIT0gJ1wwJzsgcCsrKQ0KICAgIGlmICgodW5zaWduZWQg Y2hhcikgKnAgPj0gMHg4MCAmJiAodW5zaWduZWQgY2hhcikgKnAgPCAweGEwKQ0KICAgICAgcmV0 dXJuIDE7DQogIC8qIENoZWNrIHdoZXRoZXIgYSB0eXBpY2FsIEdCMTgwMzAgbXVsdGlieXRlIHNl cXVlbmNlIGlzIHJlY29nbml6ZWQgYXMgYQ0KICAgICBzaW5nbGUgd2lkZSBjaGFyYWN0ZXIuICBU aGlzIGV4Y2x1ZGVzIHRoZSBHQjIzMTIgYW5kIEdCSyBlbmNvZGluZ3MuICAqLw0KICBpZiAobWJs ZW4gKCJcMjAzXDA2MlwzMzJcMDY2IiwgNSkgIT0gNCkNCiAgICByZXR1cm4gMTsNCiAgcmV0dXJu IDA7DQp9DQoNCl9BQ0VPRg0KICAgIGlmIHsgeyBldmFsIGVjaG8gIlwiXCRhc19tZVwiOiR7YXNf bGluZW5vLSRMSU5FTk99OiBcIiRhY19saW5rXCIiOyB9ID4mNQ0KICAoZXZhbCAkYWNfbGluaykg Mj4mNQ0KICBhY19zdGF0dXM9JD8NCiAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElO RU5PfTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1DQogIHRlc3QgJGFjX3N0YXR1cyA9IDA7IH0gJiYg dGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQ7IHRoZW4NCiAgICAgIGNhc2UgIiRob3N0X29zIiBp bg0KICAgICAgICAjIEhhbmRsZSBuYXRpdmUgV2luZG93cyBzcGVjaWFsbHksIGJlY2F1c2UgdGhl cmUgc2V0bG9jYWxlKCkgaW50ZXJwcmV0cw0KICAgICAgICAjICJhciIgYXMgIkFyYWJpYyIgb3Ig IkFyYWJpY19TYXVkaSBBcmFiaWEuMTI1NiIsDQogICAgICAgICMgImZyIiBvciAiZnJhIiBhcyAi RnJlbmNoIiBvciAiRnJlbmNoX0ZyYW5jZS4xMjUyIiwNCiAgICAgICAgIyAiZ2UiKCEpIG9yICJk ZXUiKCEpIGFzICJHZXJtYW4iIG9yICJHZXJtYW5fR2VybWFueS4xMjUyIiwNCiAgICAgICAgIyAi amEiIGFzICJKYXBhbmVzZSIgb3IgIkphcGFuZXNlX0phcGFuLjkzMiIsDQogICAgICAgICMgYW5k IHNpbWlsYXIuDQogICAgICAgIG1pbmd3KikNCiAgICAgICAgICAjIFRlc3QgZm9yIHRoZSBoeXBv dGhldGljYWwgbmF0aXZlIFdpbjMyIGxvY2FsZSBuYW1lLg0KICAgICAgICAgIGlmIChMQ19BTEw9 Q2hpbmVzZV9DaGluYS41NDkzNiBMQ19USU1FPSBMQ19DVFlQRT0gLi9jb25mdGVzdDsgZXhpdCkg Mj4vZGV2L251bGw7IHRoZW4NCiAgICAgICAgICAgIGd0X2N2X2xvY2FsZV96aF9DTj1DaGluZXNl X0NoaW5hLjU0OTM2DQogICAgICAgICAgZWxzZQ0KICAgICAgICAgICAgIyBOb25lIGZvdW5kLg0K ICAgICAgICAgICAgZ3RfY3ZfbG9jYWxlX3poX0NOPW5vbmUNCiAgICAgICAgICBmaQ0KICAgICAg ICAgIDs7DQogICAgICAgICopDQogICAgICAgICAgIyBTZXR0aW5nIExDX0FMTCBpcyBub3QgZW5v dWdoLiBOZWVkIHRvIHNldCBMQ19USU1FIHRvIGVtcHR5LCBiZWNhdXNlDQogICAgICAgICAgIyBv dGhlcndpc2Ugb24gTWFjT1MgWCAxMC4zLjUgdGhlIExDX1RJTUU9QyBmcm9tIHRoZSBiZWdpbm5p bmcgb2YgdGhlDQogICAgICAgICAgIyBjb25maWd1cmUgc2NyaXB0IHdvdWxkIG92ZXJyaWRlIHRo ZSBMQ19BTEwgc2V0dGluZy4gTGlrZXdpc2UgZm9yDQogICAgICAgICAgIyBMQ19DVFlQRSwgd2hp Y2ggaXMgYWxzbyBzZXQgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgY29uZmlndXJlIHNjcmlwdC4N CiAgICAgICAgICAjIFRlc3QgZm9yIHRoZSBsb2NhbGUgbmFtZSB3aXRob3V0IGVuY29kaW5nIHN1 ZmZpeC4NCiAgICAgICAgICBpZiAoTENfQUxMPXpoX0NOIExDX1RJTUU9IExDX0NUWVBFPSAuL2Nv bmZ0ZXN0OyBleGl0KSAyPi9kZXYvbnVsbDsgdGhlbg0KICAgICAgICAgICAgZ3RfY3ZfbG9jYWxl X3poX0NOPXpoX0NODQogICAgICAgICAgZWxzZQ0KICAgICAgICAgICAgIyBUZXN0IGZvciB0aGUg bG9jYWxlIG5hbWUgd2l0aCBleHBsaWNpdCBlbmNvZGluZyBzdWZmaXguDQogICAgICAgICAgICBp ZiAoTENfQUxMPXpoX0NOLkdCMTgwMzAgTENfVElNRT0gTENfQ1RZUEU9IC4vY29uZnRlc3Q7IGV4 aXQpIDI+L2Rldi9udWxsOyB0aGVuDQogICAgICAgICAgICAgIGd0X2N2X2xvY2FsZV96aF9DTj16 aF9DTi5HQjE4MDMwDQogICAgICAgICAgICBlbHNlDQogICAgICAgICAgICAgICMgTm9uZSBmb3Vu ZC4NCiAgICAgICAgICAgICAgZ3RfY3ZfbG9jYWxlX3poX0NOPW5vbmUNCiAgICAgICAgICAgIGZp DQogICAgICAgICAgZmkNCiAgICAgICAgICA7Ow0KICAgICAgZXNhYw0KICAgIGVsc2UNCiAgICAg ICMgSWYgdGhlcmUgd2FzIGEgbGluayBlcnJvciwgZHVlIHRvIG1ibGVuKCksIHRoZSBzeXN0ZW0g aXMgc28gb2xkIHRoYXQNCiAgICAgICMgaXQgY2VydGFpbmx5IGRvZXNuJ3QgaGF2ZSBhIGNoaW5l c2UgbG9jYWxlLg0KICAgICAgZ3RfY3ZfbG9jYWxlX3poX0NOPW5vbmUNCiAgICBmaQ0KICAgIHJt IC1mciBjb25mdGVzdCoNCg0KZmkNCnsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElO RU5PfTogcmVzdWx0OiAkZ3RfY3ZfbG9jYWxlX3poX0NOIiA+JjUNCiRhc19lY2hvICIkZ3RfY3Zf bG9jYWxlX3poX0NOIiA+JjY7IH0NCiAgTE9DQUxFX1pIX0NOPSRndF9jdl9sb2NhbGVfemhfQ04N Cg0KDQoNCiAgaWYgdGVzdCAiJGFjX2N2X2hlYWRlcl93aW5zb2NrMl9oIiA9IHllczsgdGhlbg0K DQoNCg0KDQoNCg0KDQoNCiAgZ2x0ZXN0c19MSUJPQkpTPSIkZ2x0ZXN0c19MSUJPQkpTIHNldHNv Y2tvcHQuJGFjX29iamV4dCINCg0KICBmaQ0KDQoNCg0KICBHTlVMSUJfU0VUU09DS09QVD0kZ2xf bW9kdWxlX2luZGljYXRvcl9jb25kaXRpb24NCg0KDQoNCiRhc19lY2hvICIjZGVmaW5lIEdOVUxJ Ql9URVNUX1NFVFNPQ0tPUFQgMSIgPj5jb25mZGVmcy5oDQoNCg0KDQoNCg0KDQoNCg0KICAgICAg ICAgICAgYWNfZm5fY19jaGVja19kZWNsICIkTElORU5PIiAic2xlZXAiICJhY19jdl9oYXZlX2Rl Y2xfc2xlZXAiICIjaW5jbHVkZSA8dW5pc3RkLmg+DQoiDQppZiB0ZXN0ICJ4JGFjX2N2X2hhdmVf ZGVjbF9zbGVlcCIgPSB4eWVzOyB0aGVuIDoNCiAgYWNfaGF2ZV9kZWNsPTENCmVsc2UNCiAgYWNf aGF2ZV9kZWNsPTANCmZpDQoNCmNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YNCiNkZWZpbmUgSEFW RV9ERUNMX1NMRUVQICRhY19oYXZlX2RlY2wNCl9BQ0VPRg0KDQoNCiAgaWYgdGVzdCAkYWNfY3Zf aGF2ZV9kZWNsX3NsZWVwICE9IHllczsgdGhlbg0KICAgIEhBVkVfU0xFRVA9MA0KDQoNCg0KDQoN Cg0KDQoNCiAgZ2x0ZXN0c19MSUJPQkpTPSIkZ2x0ZXN0c19MSUJPQkpTIHNsZWVwLiRhY19vYmpl eHQiDQoNCiAgZWxzZQ0KICAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJ TkVOT306IGNoZWNraW5nIGZvciB3b3JraW5nIHNsZWVwIiA+JjUNCiRhc19lY2hvX24gImNoZWNr aW5nIGZvciB3b3JraW5nIHNsZWVwLi4uICIgPiY2OyB9DQppZiAke2dsX2N2X2Z1bmNfc2xlZXBf d29ya3MrOn0gZmFsc2U7IHRoZW4gOg0KICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNg0KZWxz ZQ0KICBpZiB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IHllczsgdGhlbiA6DQogIGdsX2N2X2Z1 bmNfc2xlZXBfd29ya3M9Imd1ZXNzaW5nIG5vIg0KZWxzZQ0KICBjYXQgY29uZmRlZnMuaCAtIDw8 X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0DQovKiBlbmQgY29uZmRlZnMuaC4gICovDQoNCiNpbmNs dWRlIDxlcnJuby5oPg0KI2luY2x1ZGUgPHVuaXN0ZC5oPg0KI2luY2x1ZGUgPHNpZ25hbC5oPg0K c3RhdGljIHZvaWQNCmhhbmRsZV9hbGFybSAoaW50IHNpZykNCnsNCiAgaWYgKHNpZyAhPSBTSUdB TFJNKQ0KICAgIF9leGl0ICgyKTsNCn0NCg0KaW50DQptYWluICgpDQp7DQoNCiAgICAvKiBGYWls dXJlIHRvIGNvbXBpbGUgdGhpcyB0ZXN0IGR1ZSB0byBtaXNzaW5nIGFsYXJtIGlzIG9rYXksDQog ICAgICAgc2luY2UgYWxsIHN1Y2ggcGxhdGZvcm1zIChtaW5ndykgYWxzbyBsYWNrIHNsZWVwLiAg Ki8NCiAgICB1bnNpZ25lZCBpbnQgcGVudGVjb3N0ID0gNTAgKiAyNCAqIDYwICogNjA7IC8qIDUw IGRheXMuICAqLw0KICAgIHVuc2lnbmVkIGludCByZW1haW5pbmc7DQogICAgc2lnbmFsIChTSUdB TFJNLCBoYW5kbGVfYWxhcm0pOw0KICAgIGFsYXJtICgxKTsNCiAgICByZW1haW5pbmcgPSBzbGVl cCAocGVudGVjb3N0KTsNCiAgICBpZiAocmVtYWluaW5nID4gcGVudGVjb3N0KQ0KICAgICAgcmV0 dXJuIDM7DQogICAgaWYgKHJlbWFpbmluZyA8PSBwZW50ZWNvc3QgLSAxMCkNCiAgICAgIHJldHVy biA0Ow0KICAgIHJldHVybiAwOw0KDQogIDsNCiAgcmV0dXJuIDA7DQp9DQpfQUNFT0YNCmlmIGFj X2ZuX2NfdHJ5X3J1biAiJExJTkVOTyI7IHRoZW4gOg0KICBnbF9jdl9mdW5jX3NsZWVwX3dvcmtz PXllcw0KZWxzZQ0KICBnbF9jdl9mdW5jX3NsZWVwX3dvcmtzPW5vDQpmaQ0Kcm0gLWYgY29yZSAq LmNvcmUgY29yZS5jb25mdGVzdC4qIGdtb24ub3V0IGJiLm91dCBjb25mdGVzdCRhY19leGVleHQg XA0KICBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LmJlYW0gY29uZnRlc3QuJGFjX2V4dA0K ZmkNCg0KZmkNCnsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0 OiAkZ2xfY3ZfZnVuY19zbGVlcF93b3JrcyIgPiY1DQokYXNfZWNobyAiJGdsX2N2X2Z1bmNfc2xl ZXBfd29ya3MiID4mNjsgfQ0KICAgIGlmIHRlc3QgIiRnbF9jdl9mdW5jX3NsZWVwX3dvcmtzIiAh PSB5ZXM7IHRoZW4NCiAgICAgIFJFUExBQ0VfU0xFRVA9MQ0KDQoNCg0KDQoNCg0KDQoNCiAgZ2x0 ZXN0c19MSUJPQkpTPSIkZ2x0ZXN0c19MSUJPQkpTIHNsZWVwLiRhY19vYmpleHQiDQoNCiAgICBm aQ0KICBmaQ0KDQoNCg0KDQogIEdOVUxJQl9TTEVFUD0kZ2xfbW9kdWxlX2luZGljYXRvcl9jb25k aXRpb24NCg0KDQoNCiRhc19lY2hvICIjZGVmaW5lIEdOVUxJQl9URVNUX1NMRUVQIDEiID4+Y29u ZmRlZnMuaA0KDQoNCg0KDQoNCiAgaWYgdGVzdCAiJGFjX2N2X2hlYWRlcl93aW5zb2NrMl9oIiA9 IHllczsgdGhlbg0KDQoNCg0KDQoNCg0KDQoNCiAgZ2x0ZXN0c19MSUJPQkpTPSIkZ2x0ZXN0c19M SUJPQkpTIHNvY2tldC4kYWNfb2JqZXh0Ig0KDQogIGZpDQogICMgV2hlbiB0aGlzIG1vZHVsZSBp cyB1c2VkLCBzb2NrZXRzIG1heSBhY3R1YWxseSBvY2N1ciBhcyBmaWxlIGRlc2NyaXB0b3JzLA0K ICAjIGhlbmNlIGl0IGlzIHdvcnRoIHdhcm5pbmcgaWYgdGhlIG1vZHVsZXMgJ2Nsb3NlJyBhbmQg J2lvY3RsJyBhcmUgbm90IHVzZWQuDQoNCg0KDQogIGlmIHRlc3QgIiRhY19jdl9oZWFkZXJfd2lu c29jazJfaCIgPSB5ZXM7IHRoZW4NCiAgICBVTklTVERfSF9IQVZFX1dJTlNPQ0syX0hfQU5EX1VT RV9TT0NLRVRTPTENCiAgICBTWVNfSU9DVExfSF9IQVZFX1dJTlNPQ0syX0hfQU5EX1VTRV9TT0NL RVRTPTENCiAgZmkNCg0KDQoNCiAgR05VTElCX1NPQ0tFVD0kZ2xfbW9kdWxlX2luZGljYXRvcl9j b25kaXRpb24NCg0KDQoNCiRhc19lY2hvICIjZGVmaW5lIEdOVUxJQl9URVNUX1NPQ0tFVCAxIiA+ PmNvbmZkZWZzLmgNCg0KDQoNCg0KICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJ TkVOT306IGNoZWNraW5nIGZvciB3Y2hhcl90IiA+JjUNCiRhc19lY2hvX24gImNoZWNraW5nIGZv ciB3Y2hhcl90Li4uICIgPiY2OyB9DQppZiAke2d0X2N2X2Nfd2NoYXJfdCs6fSBmYWxzZTsgdGhl biA6DQogICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2DQplbHNlDQogIGNhdCBjb25mZGVmcy5o IC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQNCi8qIGVuZCBjb25mZGVmcy5oLiAgKi8NCiNp bmNsdWRlIDxzdGRkZWYuaD4NCiAgICAgICAgICAgIHdjaGFyX3QgZm9vID0gKHdjaGFyX3QpJ1ww JzsNCmludA0KbWFpbiAoKQ0Kew0KDQogIDsNCiAgcmV0dXJuIDA7DQp9DQpfQUNFT0YNCmlmIGFj X2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoNCiAgZ3RfY3ZfY193Y2hhcl90PXll cw0KZWxzZQ0KICBndF9jdl9jX3djaGFyX3Q9bm8NCmZpDQpybSAtZiBjb3JlIGNvbmZ0ZXN0LmVy ciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQNCmZpDQp7ICRhc19lY2hvICIk YXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGd0X2N2X2Nfd2NoYXJfdCIgPiY1 DQokYXNfZWNobyAiJGd0X2N2X2Nfd2NoYXJfdCIgPiY2OyB9DQogIGlmIHRlc3QgJGd0X2N2X2Nf d2NoYXJfdCA9IHllczsgdGhlbg0KDQokYXNfZWNobyAiI2RlZmluZSBIQVZFX1dDSEFSX1QgMSIg Pj5jb25mZGVmcy5oDQoNCiAgZmkNCg0KDQogIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVu by0kTElORU5PfTogY2hlY2tpbmcgZm9yIHdpbnRfdCIgPiY1DQokYXNfZWNob19uICJjaGVja2lu ZyBmb3Igd2ludF90Li4uICIgPiY2OyB9DQppZiAke2d0X2N2X2Nfd2ludF90Kzp9IGZhbHNlOyB0 aGVuIDoNCiAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYNCmVsc2UNCiAgY2F0IGNvbmZkZWZz LmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dA0KLyogZW5kIGNvbmZkZWZzLmguICAqLw0K DQovKiBUcnU2NCB3aXRoIERlc2t0b3AgVG9vbGtpdCBDIGhhcyBhIGJ1ZzogPHN0ZGlvLmg+IG11 c3QgYmUgaW5jbHVkZWQgYmVmb3JlDQogICA8d2NoYXIuaD4uDQogICBCU0QvT1MgNC4wLjEgaGFz IGEgYnVnOiA8c3RkZGVmLmg+LCA8c3RkaW8uaD4gYW5kIDx0aW1lLmg+IG11c3QgYmUgaW5jbHVk ZWQNCiAgIGJlZm9yZSA8d2NoYXIuaD4uICAqLw0KI2luY2x1ZGUgPHN0ZGRlZi5oPg0KI2luY2x1 ZGUgPHN0ZGlvLmg+DQojaW5jbHVkZSA8dGltZS5oPg0KI2luY2x1ZGUgPHdjaGFyLmg+DQogICAg ICAgICAgICB3aW50X3QgZm9vID0gKHdjaGFyX3QpJ1wwJzsNCmludA0KbWFpbiAoKQ0Kew0KDQog IDsNCiAgcmV0dXJuIDA7DQp9DQpfQUNFT0YNCmlmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5F Tk8iOyB0aGVuIDoNCiAgZ3RfY3ZfY193aW50X3Q9eWVzDQplbHNlDQogIGd0X2N2X2Nfd2ludF90 PW5vDQpmaQ0Kcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25m dGVzdC4kYWNfZXh0DQpmaQ0KeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99 OiByZXN1bHQ6ICRndF9jdl9jX3dpbnRfdCIgPiY1DQokYXNfZWNobyAiJGd0X2N2X2Nfd2ludF90 IiA+JjY7IH0NCiAgaWYgdGVzdCAkZ3RfY3ZfY193aW50X3QgPSB5ZXM7IHRoZW4NCg0KJGFzX2Vj aG8gIiNkZWZpbmUgSEFWRV9XSU5UX1QgMSIgPj5jb25mZGVmcy5oDQoNCiAgZmkNCg0KDQoNCg0K ICAjIENoZWNrIGZvciBtbWFwKCkuIERvbid0IHVzZSBBQ19GVU5DX01NQVAsIGJlY2F1c2UgaXQg Y2hlY2tzIHRvbyBtdWNoOiBpdA0KICAjIGZhaWxzIG9uIEhQLVVYIDExLCBiZWNhdXNlIE1BUF9G SVhFRCBtYXBwaW5ncyBkbyBub3Qgd29yay4gQnV0IHRoaXMgaXMNCiAgIyBpcnJlbGV2YW50IGZv ciBhbm9ueW1vdXMgbWFwcGluZ3MuDQogIGFjX2ZuX2NfY2hlY2tfZnVuYyAiJExJTkVOTyIgIm1t YXAiICJhY19jdl9mdW5jX21tYXAiDQppZiB0ZXN0ICJ4JGFjX2N2X2Z1bmNfbW1hcCIgPSB4eWVz OyB0aGVuIDoNCiAgZ2xfaGF2ZV9tbWFwPXllcw0KZWxzZQ0KICBnbF9oYXZlX21tYXA9bm8NCmZp DQoNCg0KICAjIFRyeSB0byBhbGxvdyBNQVBfQU5PTllNT1VTLg0KICBnbF9oYXZlX21tYXBfYW5v bnltb3VzPW5vDQogIGlmIHRlc3QgJGdsX2hhdmVfbW1hcCA9IHllczsgdGhlbg0KICAgIHsgJGFz X2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIE1BUF9BTk9O WU1PVVMiID4mNQ0KJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIE1BUF9BTk9OWU1PVVMuLi4gIiA+ JjY7IH0NCiAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0DQov KiBlbmQgY29uZmRlZnMuaC4gICovDQoNCiNpbmNsdWRlIDxzeXMvbW1hbi5oPg0KI2lmZGVmIE1B UF9BTk9OWU1PVVMNCiAgICBJIGNhbnQgaWRlbnRpZnkgdGhpcyBtYXAuDQojZW5kaWYNCg0KX0FD RU9GDQppZiAoZXZhbCAiJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0IikgMj4mNSB8DQogICRFR1JF UCAiSSBjYW50IGlkZW50aWZ5IHRoaXMgbWFwLiIgPi9kZXYvbnVsbCAyPiYxOyB0aGVuIDoNCiAg Z2xfaGF2ZV9tbWFwX2Fub255bW91cz15ZXMNCmZpDQpybSAtZiBjb25mdGVzdCoNCg0KICAgIGlm IHRlc3QgJGdsX2hhdmVfbW1hcF9hbm9ueW1vdXMgIT0geWVzOyB0aGVuDQogICAgICBjYXQgY29u ZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0DQovKiBlbmQgY29uZmRlZnMuaC4g ICovDQoNCiNpbmNsdWRlIDxzeXMvbW1hbi5oPg0KI2lmZGVmIE1BUF9BTk9ODQogICAgSSBjYW50 IGlkZW50aWZ5IHRoaXMgbWFwLg0KI2VuZGlmDQoNCl9BQ0VPRg0KaWYgKGV2YWwgIiRhY19jcHAg Y29uZnRlc3QuJGFjX2V4dCIpIDI+JjUgfA0KICAkRUdSRVAgIkkgY2FudCBpZGVudGlmeSB0aGlz IG1hcC4iID4vZGV2L251bGwgMj4mMTsgdGhlbiA6DQoNCiRhc19lY2hvICIjZGVmaW5lIE1BUF9B Tk9OWU1PVVMgTUFQX0FOT04iID4+Y29uZmRlZnMuaA0KDQogICAgICAgICBnbF9oYXZlX21tYXBf YW5vbnltb3VzPXllcw0KZmkNCnJtIC1mIGNvbmZ0ZXN0Kg0KDQogICAgZmkNCiAgICB7ICRhc19l Y2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGdsX2hhdmVfbW1hcF9h bm9ueW1vdXMiID4mNQ0KJGFzX2VjaG8gIiRnbF9oYXZlX21tYXBfYW5vbnltb3VzIiA+JjY7IH0N CiAgICBpZiB0ZXN0ICRnbF9oYXZlX21tYXBfYW5vbnltb3VzID0geWVzOyB0aGVuDQoNCiRhc19l Y2hvICIjZGVmaW5lIEhBVkVfTUFQX0FOT05ZTU9VUyAxIiA+PmNvbmZkZWZzLmgNCg0KICAgIGZp DQogIGZpDQoNCg0KDQoNCg0KDQoNCg0KICBpZiB0ZXN0ICRnbF90aHJlYWRzX2FwaSA9IHBvc2l4 OyB0aGVuDQogICAgZ2xfc2F2ZV9MSUJTPSIkTElCUyINCiAgICBMSUJTPSIkTElCUyAkTElCTVVM VElUSFJFQUQiDQogICAgZm9yIGFjX2Z1bmMgaW4gcHRocmVhZF9hdGZvcmsNCmRvIDoNCiAgYWNf Zm5fY19jaGVja19mdW5jICIkTElORU5PIiAicHRocmVhZF9hdGZvcmsiICJhY19jdl9mdW5jX3B0 aHJlYWRfYXRmb3JrIg0KaWYgdGVzdCAieCRhY19jdl9mdW5jX3B0aHJlYWRfYXRmb3JrIiA9IHh5 ZXM7IHRoZW4gOg0KICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GDQojZGVmaW5lIEhBVkVfUFRI UkVBRF9BVEZPUksgMQ0KX0FDRU9GDQoNCmZpDQpkb25lDQoNCiAgICBMSUJTPSIkZ2xfc2F2ZV9M SUJTIg0KICBmaQ0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQogIGdsdGVzdHNfTElCT0JKUz0i JGdsdGVzdHNfTElCT0JKUyB1bmxpbmtkaXIuJGFjX29iamV4dCINCg0KDQogICMgVGhlIEh1cmQs IHRoZSBMaW51eCBrZXJuZWwsIHRoZSBGcmVlQlNEIGtlcm5lbCB2ZXJzaW9uIDIuMiBhbmQgbGF0 ZXIsDQogICMgQ3lnd2luLCBhbmQgbWluZ3cgbmV2ZXIgbGV0IGFueW9uZSAoZXZlbiByb290KSB1 bmxpbmsgZGlyZWN0b3JpZXMuDQogICMgSWYgYW55b25lIGtub3dzIG9mIGFub3RoZXIgc3lzdGVt IGZvciB3aGljaCB1bmxpbmsgY2FuIG5ldmVyDQogICMgcmVtb3ZlIGEgZGlyZWN0b3J5LCBwbGVh c2UgcmVwb3J0IGl0IHRvIDxidWctY29yZXV0aWxzQGdudS5vcmc+Lg0KICAjIFVuZm9ydHVuYXRl bHkgdGhpcyBpcyBkaWZmaWN1bHQgdG8gdGVzdCBmb3IsIHNpbmNlIGl0IHJlcXVpcmVzIHJvb3Qg YWNjZXNzDQogICMgYW5kIG1pZ2h0IGNyZWF0ZSBnYXJiYWdlIGluIHRoZSBmaWxlIHN5c3RlbSwN CiAgIyBzbyB0aGUgY29kZSBiZWxvdyBzaW1wbHkgcmVsaWVzIG9uIHRoZSBrZXJuZWwgbmFtZSBh bmQgdmVyc2lvbiBudW1iZXIuDQogIGNhc2UgJGhvc3Rfb3MgaW4NCiAgZ251WzAtOV0qIHwgXA0K ICBsaW51eC0qIHwgbGludXggfCBcDQogIGZyZWVic2QyLjIqIHwgZnJlZWJzZFszLTldKiB8IGZy ZWVic2RbMS05XVswLTldKiB8IFwNCiAgY3lnd2luIHwgXA0KICBtaW5ndyopDQoNCiRhc19lY2hv ICIjZGVmaW5lIFVOTElOS19DQU5OT1RfVU5MSU5LX0RJUiAxIiA+PmNvbmZkZWZzLmgNCjs7DQog IGVzYWMNCg0KICBhYnNfYXV4X2Rpcj1gY2QgIiRhY19hdXhfZGlyIjsgcHdkYA0KDQoNCg0KDQoN CiAgYWNfZm5fY19jaGVja190eXBlICIkTElORU5PIiAidXNlY29uZHNfdCIgImFjX2N2X3R5cGVf dXNlY29uZHNfdCIgIiRhY19pbmNsdWRlc19kZWZhdWx0Ig0KaWYgdGVzdCAieCRhY19jdl90eXBl X3VzZWNvbmRzX3QiID0geHllczsgdGhlbiA6DQoNCmVsc2UNCg0KJGFzX2VjaG8gIiNkZWZpbmUg dXNlY29uZHNfdCB1bnNpZ25lZCBpbnQiID4+Y29uZmRlZnMuaA0KDQpmaQ0KDQogIGlmIHRlc3Qg JGFjX2N2X2Z1bmNfdXNsZWVwID0gbm87IHRoZW4NCiAgICBIQVZFX1VTTEVFUD0wDQoNCg0KDQoN Cg0KDQoNCg0KICBnbHRlc3RzX0xJQk9CSlM9IiRnbHRlc3RzX0xJQk9CSlMgdXNsZWVwLiRhY19v YmpleHQiDQoNCiAgZWxzZQ0KICAgICAgICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGlu ZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIHVzbGVlcCBhbGxvd3MgbGFyZ2UgYXJndW1l bnRzIiA+JjUNCiRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgdXNsZWVwIGFsbG93cyBsYXJn ZSBhcmd1bWVudHMuLi4gIiA+JjY7IH0NCmlmICR7Z2xfY3ZfZnVuY191c2xlZXBfd29ya3MrOn0g ZmFsc2U7IHRoZW4gOg0KICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNg0KZWxzZQ0KICBpZiB0 ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IHllczsgdGhlbiA6DQogIGdsX2N2X2Z1bmNfdXNsZWVw X3dvcmtzPSJndWVzc2luZyBubyINCmVsc2UNCiAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+ Y29uZnRlc3QuJGFjX2V4dA0KLyogZW5kIGNvbmZkZWZzLmguICAqLw0KDQojaW5jbHVkZSA8dW5p c3RkLmg+DQoNCmludA0KbWFpbiAoKQ0Kew0KcmV0dXJuICEhdXNsZWVwICgxMDAwMDAwKTsNCiAg Ow0KICByZXR1cm4gMDsNCn0NCl9BQ0VPRg0KaWYgYWNfZm5fY190cnlfcnVuICIkTElORU5PIjsg dGhlbiA6DQogIGdsX2N2X2Z1bmNfdXNsZWVwX3dvcmtzPXllcw0KZWxzZQ0KICBnbF9jdl9mdW5j X3VzbGVlcF93b3Jrcz1ubw0KZmkNCnJtIC1mIGNvcmUgKi5jb3JlIGNvcmUuY29uZnRlc3QuKiBn bW9uLm91dCBiYi5vdXQgY29uZnRlc3QkYWNfZXhlZXh0IFwNCiAgY29uZnRlc3QuJGFjX29iamV4 dCBjb25mdGVzdC5iZWFtIGNvbmZ0ZXN0LiRhY19leHQNCmZpDQoNCmZpDQp7ICRhc19lY2hvICIk YXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGdsX2N2X2Z1bmNfdXNsZWVwX3dv cmtzIiA+JjUNCiRhc19lY2hvICIkZ2xfY3ZfZnVuY191c2xlZXBfd29ya3MiID4mNjsgfQ0KICAg IGlmIHRlc3QgIiRnbF9jdl9mdW5jX3VzbGVlcF93b3JrcyIgIT0geWVzOyB0aGVuDQogICAgICBS RVBMQUNFX1VTTEVFUD0xDQoNCg0KDQoNCg0KDQoNCg0KICBnbHRlc3RzX0xJQk9CSlM9IiRnbHRl c3RzX0xJQk9CSlMgdXNsZWVwLiRhY19vYmpleHQiDQoNCiAgICBmaQ0KICBmaQ0KDQoNCg0KDQog IEdOVUxJQl9VU0xFRVA9JGdsX21vZHVsZV9pbmRpY2F0b3JfY29uZGl0aW9uDQoNCg0KDQokYXNf ZWNobyAiI2RlZmluZSBHTlVMSUJfVEVTVF9VU0xFRVAgMSIgPj5jb25mZGVmcy5oDQoNCg0KDQog IGFic19hdXhfZGlyPWBjZCAiJGFjX2F1eF9kaXIiOyBwd2RgDQoNCg0KDQoNCiAgeyAkYXNfZWNo byAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgYSB0cmFkaXRpb25h bCBmcmVuY2ggbG9jYWxlIiA+JjUNCiRhc19lY2hvX24gImNoZWNraW5nIGZvciBhIHRyYWRpdGlv bmFsIGZyZW5jaCBsb2NhbGUuLi4gIiA+JjY7IH0NCmlmICR7Z3RfY3ZfbG9jYWxlX2ZyKzp9IGZh bHNlOyB0aGVuIDoNCiAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYNCmVsc2UNCg0KICAgIGNh dCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQNCi8qIGVuZCBjb25mZGVm cy5oLiAgKi8NCg0KI2luY2x1ZGUgPGxvY2FsZS5oPg0KI2luY2x1ZGUgPHRpbWUuaD4NCiNpZiBI QVZFX0xBTkdJTkZPX0NPREVTRVQNCiMgaW5jbHVkZSA8bGFuZ2luZm8uaD4NCiNlbmRpZg0KI2lu Y2x1ZGUgPHN0ZGxpYi5oPg0KI2luY2x1ZGUgPHN0cmluZy5oPg0Kc3RydWN0IHRtIHQ7DQpjaGFy IGJ1ZlsxNl07DQppbnQgbWFpbiAoKSB7DQogIC8qIENoZWNrIHdoZXRoZXIgdGhlIGdpdmVuIGxv Y2FsZSBuYW1lIGlzIHJlY29nbml6ZWQgYnkgdGhlIHN5c3RlbS4gICovDQojaWYgKGRlZmluZWQg X1dJTjMyIHx8IGRlZmluZWQgX19XSU4zMl9fKSAmJiAhZGVmaW5lZCBfX0NZR1dJTl9fDQogIC8q IE9uIG5hdGl2ZSBXaW4zMiwgc2V0bG9jYWxlKGNhdGVnb3J5LCAiIikgbG9va3MgYXQgdGhlIHN5 c3RlbSBzZXR0aW5ncywNCiAgICAgbm90IGF0IHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZXMuICBB bHNvLCB3aGVuIGFuIGVuY29kaW5nIHN1ZmZpeCBzdWNoDQogICAgIGFzICIuNjUwMDEiIG9yICIu NTQ5MzYiIGlzIHNwZWZpY2llZCwgaXQgc3VjY2VlZHMgYnV0IHNldHMgdGhlIExDX0NUWVBFDQog ICAgIGNhdGVnb3J5IG9mIHRoZSBsb2NhbGUgdG8gIkMiLiAgKi8NCiAgaWYgKHNldGxvY2FsZSAo TENfQUxMLCBnZXRlbnYgKCJMQ19BTEwiKSkgPT0gTlVMTA0KICAgICAgfHwgc3RyY21wIChzZXRs b2NhbGUgKExDX0NUWVBFLCBOVUxMKSwgIkMiKSA9PSAwKQ0KICAgIHJldHVybiAxOw0KI2Vsc2UN CiAgaWYgKHNldGxvY2FsZSAoTENfQUxMLCAiIikgPT0gTlVMTCkgcmV0dXJuIDE7DQojZW5kaWYN CiAgLyogQ2hlY2sgd2hldGhlciBubF9sYW5naW5mbyhDT0RFU0VUKSBpcyBub25lbXB0eSBhbmQg bm90ICJBU0NJSSIgb3IgIjY0NiIuDQogICAgIE9uIE1hY09TIFggMTAuMy41IChEYXJ3aW4gNy41 KSBpbiB0aGUgZnJfRlIgbG9jYWxlLCBubF9sYW5naW5mbyhDT0RFU0VUKQ0KICAgICBpcyBlbXB0 eSwgYW5kIHRoZSBiZWhhdmlvdXIgb2YgVGNsIDguNCBpbiB0aGlzIGxvY2FsZSBpcyBub3QgdXNl ZnVsLg0KICAgICBPbiBPcGVuQlNEIDQuMCwgd2hlbiBhbiB1bnN1cHBvcnRlZCBsb2NhbGUgaXMg c3BlY2lmaWVkLCBzZXRsb2NhbGUoKQ0KICAgICBzdWNjZWVkcyBidXQgdGhlbiBubF9sYW5naW5m byhDT0RFU0VUKSBpcyAiNjQ2Ii4gSW4gdGhpcyBzaXR1YXRpb24sDQogICAgIHNvbWUgdW5pdCB0 ZXN0cyBmYWlsLg0KICAgICBPbiBNaXJCU0QgMTAsIHdoZW4gYW4gdW5zdXBwb3J0ZWQgbG9jYWxl IGlzIHNwZWNpZmllZCwgc2V0bG9jYWxlKCkNCiAgICAgc3VjY2VlZHMgYnV0IHRoZW4gbmxfbGFu Z2luZm8oQ09ERVNFVCkgaXMgIlVURi04Ii4gICovDQojaWYgSEFWRV9MQU5HSU5GT19DT0RFU0VU DQogIHsNCiAgICBjb25zdCBjaGFyICpjcyA9IG5sX2xhbmdpbmZvIChDT0RFU0VUKTsNCiAgICBp ZiAoY3NbMF0gPT0gJ1wwJyB8fCBzdHJjbXAgKGNzLCAiQVNDSUkiKSA9PSAwIHx8IHN0cmNtcCAo Y3MsICI2NDYiKSA9PSAwDQogICAgICAgIHx8IHN0cmNtcCAoY3MsICJVVEYtOCIpID09IDApDQog ICAgICByZXR1cm4gMTsNCiAgfQ0KI2VuZGlmDQojaWZkZWYgX19DWUdXSU5fXw0KICAvKiBPbiBD eWd3aW4sIGF2b2lkIGxvY2FsZSBuYW1lcyB3aXRob3V0IGVuY29kaW5nIHN1ZmZpeCwgYmVjYXVz ZSB0aGUNCiAgICAgbG9jYWxlX2NoYXJzZXQoKSBmdW5jdGlvbiByZWxpZXMgb24gdGhlIGVuY29k aW5nIHN1ZmZpeC4gIE5vdGUgdGhhdA0KICAgICBMQ19BTEwgaXMgc2V0IG9uIHRoZSBjb21tYW5k IGxpbmUuICAqLw0KICBpZiAoc3RyY2hyIChnZXRlbnYgKCJMQ19BTEwiKSwgJy4nKSA9PSBOVUxM KSByZXR1cm4gMTsNCiNlbmRpZg0KICAvKiBDaGVjayB3aGV0aGVyIGluIHRoZSBhYmJyZXZpYXRp b24gb2YgdGhlIHNlY29uZCBtb250aCwgdGhlIHNlY29uZA0KICAgICBjaGFyYWN0ZXIgKHNob3Vs ZCBiZSBVKzAwRTk6IExBVElOIFNNQUxMIExFVFRFUiBFIFdJVEggQUNVVEUpIGlzIG9ubHkNCiAg ICAgb25lIGJ5dGUgbG9uZy4gVGhpcyBleGNsdWRlcyB0aGUgVVRGLTggZW5jb2RpbmcuICAqLw0K ICB0LnRtX3llYXIgPSAxOTc1IC0gMTkwMDsgdC50bV9tb24gPSAyIC0gMTsgdC50bV9tZGF5ID0g NDsNCiAgaWYgKHN0cmZ0aW1lIChidWYsIHNpemVvZiAoYnVmKSwgIiViIiwgJnQpIDwgMyB8fCBi dWZbMl0gIT0gJ3YnKSByZXR1cm4gMTsNCiAgLyogQ2hlY2sgd2hldGhlciB0aGUgZGVjaW1hbCBz ZXBhcmF0b3IgaXMgYSBjb21tYS4NCiAgICAgT24gTmV0QlNEIDMuMCBpbiB0aGUgZnJfRlIuSVNP ODg1OS0xIGxvY2FsZSwgbG9jYWxlY29udigpLT5kZWNpbWFsX3BvaW50DQogICAgIGFyZSBubF9s YW5naW5mbyhSQURJWENIQVIpIGFyZSBib3RoICIuIi4gICovDQogIGlmIChsb2NhbGVjb252ICgp IC0+ZGVjaW1hbF9wb2ludFswXSAhPSAnLCcpIHJldHVybiAxOw0KICByZXR1cm4gMDsNCn0NCg0K X0FDRU9GDQogICAgaWYgeyB7IGV2YWwgZWNobyAiXCJcJGFzX21lXCI6JHthc19saW5lbm8tJExJ TkVOT306IFwiJGFjX2xpbmtcIiI7IH0gPiY1DQogIChldmFsICRhY19saW5rKSAyPiY1DQogIGFj X3N0YXR1cz0kPw0KICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJD8g PSAkYWNfc3RhdHVzIiA+JjUNCiAgdGVzdCAkYWNfc3RhdHVzID0gMDsgfSAmJiB0ZXN0IC1zIGNv bmZ0ZXN0JGFjX2V4ZWV4dDsgdGhlbg0KICAgICAgY2FzZSAiJGhvc3Rfb3MiIGluDQogICAgICAg ICMgSGFuZGxlIG5hdGl2ZSBXaW5kb3dzIHNwZWNpYWxseSwgYmVjYXVzZSB0aGVyZSBzZXRsb2Nh bGUoKSBpbnRlcnByZXRzDQogICAgICAgICMgImFyIiBhcyAiQXJhYmljIiBvciAiQXJhYmljX1Nh dWRpIEFyYWJpYS4xMjU2IiwNCiAgICAgICAgIyAiZnIiIG9yICJmcmEiIGFzICJGcmVuY2giIG9y ICJGcmVuY2hfRnJhbmNlLjEyNTIiLA0KICAgICAgICAjICJnZSIoISkgb3IgImRldSIoISkgYXMg Ikdlcm1hbiIgb3IgIkdlcm1hbl9HZXJtYW55LjEyNTIiLA0KICAgICAgICAjICJqYSIgYXMgIkph cGFuZXNlIiBvciAiSmFwYW5lc2VfSmFwYW4uOTMyIiwNCiAgICAgICAgIyBhbmQgc2ltaWxhci4N CiAgICAgICAgbWluZ3cqKQ0KICAgICAgICAgICMgVGVzdCBmb3IgdGhlIG5hdGl2ZSBXaW4zMiBs b2NhbGUgbmFtZS4NCiAgICAgICAgICBpZiAoTENfQUxMPUZyZW5jaF9GcmFuY2UuMTI1MiBMQ19U SU1FPSBMQ19DVFlQRT0gLi9jb25mdGVzdDsgZXhpdCkgMj4vZGV2L251bGw7IHRoZW4NCiAgICAg ICAgICAgIGd0X2N2X2xvY2FsZV9mcj1GcmVuY2hfRnJhbmNlLjEyNTINCiAgICAgICAgICBlbHNl DQogICAgICAgICAgICAjIE5vbmUgZm91bmQuDQogICAgICAgICAgICBndF9jdl9sb2NhbGVfZnI9 bm9uZQ0KICAgICAgICAgIGZpDQogICAgICAgICAgOzsNCiAgICAgICAgKikNCiAgICAgICAgICAj IFNldHRpbmcgTENfQUxMIGlzIG5vdCBlbm91Z2guIE5lZWQgdG8gc2V0IExDX1RJTUUgdG8gZW1w dHksIGJlY2F1c2UNCiAgICAgICAgICAjIG90aGVyd2lzZSBvbiBNYWNPUyBYIDEwLjMuNSB0aGUg TENfVElNRT1DIGZyb20gdGhlIGJlZ2lubmluZyBvZiB0aGUNCiAgICAgICAgICAjIGNvbmZpZ3Vy ZSBzY3JpcHQgd291bGQgb3ZlcnJpZGUgdGhlIExDX0FMTCBzZXR0aW5nLiBMaWtld2lzZSBmb3IN CiAgICAgICAgICAjIExDX0NUWVBFLCB3aGljaCBpcyBhbHNvIHNldCBhdCB0aGUgYmVnaW5uaW5n IG9mIHRoZSBjb25maWd1cmUgc2NyaXB0Lg0KICAgICAgICAgICMgVGVzdCBmb3IgdGhlIHVzdWFs IGxvY2FsZSBuYW1lLg0KICAgICAgICAgIGlmIChMQ19BTEw9ZnJfRlIgTENfVElNRT0gTENfQ1RZ UEU9IC4vY29uZnRlc3Q7IGV4aXQpIDI+L2Rldi9udWxsOyB0aGVuDQogICAgICAgICAgICBndF9j dl9sb2NhbGVfZnI9ZnJfRlINCiAgICAgICAgICBlbHNlDQogICAgICAgICAgICAjIFRlc3QgZm9y IHRoZSBsb2NhbGUgbmFtZSB3aXRoIGV4cGxpY2l0IGVuY29kaW5nIHN1ZmZpeC4NCiAgICAgICAg ICAgIGlmIChMQ19BTEw9ZnJfRlIuSVNPLTg4NTktMSBMQ19USU1FPSBMQ19DVFlQRT0gLi9jb25m dGVzdDsgZXhpdCkgMj4vZGV2L251bGw7IHRoZW4NCiAgICAgICAgICAgICAgZ3RfY3ZfbG9jYWxl X2ZyPWZyX0ZSLklTTy04ODU5LTENCiAgICAgICAgICAgIGVsc2UNCiAgICAgICAgICAgICAgIyBU ZXN0IGZvciB0aGUgQUlYLCBPU0YvMSwgRnJlZUJTRCwgTmV0QlNELCBPcGVuQlNEIGxvY2FsZSBu YW1lLg0KICAgICAgICAgICAgICBpZiAoTENfQUxMPWZyX0ZSLklTTzg4NTktMSBMQ19USU1FPSBM Q19DVFlQRT0gLi9jb25mdGVzdDsgZXhpdCkgMj4vZGV2L251bGw7IHRoZW4NCiAgICAgICAgICAg ICAgICBndF9jdl9sb2NhbGVfZnI9ZnJfRlIuSVNPODg1OS0xDQogICAgICAgICAgICAgIGVsc2UN CiAgICAgICAgICAgICAgICAjIFRlc3QgZm9yIHRoZSBIUC1VWCBsb2NhbGUgbmFtZS4NCiAgICAg ICAgICAgICAgICBpZiAoTENfQUxMPWZyX0ZSLmlzbzg4NTkxIExDX1RJTUU9IExDX0NUWVBFPSAu L2NvbmZ0ZXN0OyBleGl0KSAyPi9kZXYvbnVsbDsgdGhlbg0KICAgICAgICAgICAgICAgICAgZ3Rf Y3ZfbG9jYWxlX2ZyPWZyX0ZSLmlzbzg4NTkxDQogICAgICAgICAgICAgICAgZWxzZQ0KICAgICAg ICAgICAgICAgICAgIyBUZXN0IGZvciB0aGUgU29sYXJpcyA3IGxvY2FsZSBuYW1lLg0KICAgICAg ICAgICAgICAgICAgaWYgKExDX0FMTD1mciBMQ19USU1FPSBMQ19DVFlQRT0gLi9jb25mdGVzdDsg ZXhpdCkgMj4vZGV2L251bGw7IHRoZW4NCiAgICAgICAgICAgICAgICAgICAgZ3RfY3ZfbG9jYWxl X2ZyPWZyDQogICAgICAgICAgICAgICAgICBlbHNlDQogICAgICAgICAgICAgICAgICAgICMgTm9u ZSBmb3VuZC4NCiAgICAgICAgICAgICAgICAgICAgZ3RfY3ZfbG9jYWxlX2ZyPW5vbmUNCiAgICAg ICAgICAgICAgICAgIGZpDQogICAgICAgICAgICAgICAgZmkNCiAgICAgICAgICAgICAgZmkNCiAg ICAgICAgICAgIGZpDQogICAgICAgICAgZmkNCiAgICAgICAgICA7Ow0KICAgICAgZXNhYw0KICAg IGZpDQogICAgcm0gLWZyIGNvbmZ0ZXN0Kg0KDQpmaQ0KeyAkYXNfZWNobyAiJGFzX21lOiR7YXNf bGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRndF9jdl9sb2NhbGVfZnIiID4mNQ0KJGFzX2VjaG8g IiRndF9jdl9sb2NhbGVfZnIiID4mNjsgfQ0KICBMT0NBTEVfRlI9JGd0X2N2X2xvY2FsZV9mcg0K DQoNCg0KDQogIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tp bmcgZm9yIGEgZnJlbmNoIFVuaWNvZGUgbG9jYWxlIiA+JjUNCiRhc19lY2hvX24gImNoZWNraW5n IGZvciBhIGZyZW5jaCBVbmljb2RlIGxvY2FsZS4uLiAiID4mNjsgfQ0KaWYgJHtndF9jdl9sb2Nh bGVfZnJfdXRmOCs6fSBmYWxzZTsgdGhlbiA6DQogICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2 DQplbHNlDQoNCiAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0 DQovKiBlbmQgY29uZmRlZnMuaC4gICovDQoNCiNpbmNsdWRlIDxsb2NhbGUuaD4NCiNpbmNsdWRl IDx0aW1lLmg+DQojaWYgSEFWRV9MQU5HSU5GT19DT0RFU0VUDQojIGluY2x1ZGUgPGxhbmdpbmZv Lmg+DQojZW5kaWYNCiNpbmNsdWRlIDxzdGRsaWIuaD4NCiNpbmNsdWRlIDxzdHJpbmcuaD4NCnN0 cnVjdCB0bSB0Ow0KY2hhciBidWZbMTZdOw0KaW50IG1haW4gKCkgew0KICAvKiBPbiBCZU9TIGFu ZCBIYWlrdSwgbG9jYWxlcyBhcmUgbm90IGltcGxlbWVudGVkIGluIGxpYmMuICBSYXRoZXIsIGxp YmludGwNCiAgICAgaW1pdGF0ZXMgbG9jYWxlIGRlcGVuZGVudCBiZWhhdmlvdXIgYnkgbG9va2lu ZyBhdCB0aGUgZW52aXJvbm1lbnQNCiAgICAgdmFyaWFibGVzLCBhbmQgYWxsIGxvY2FsZXMgdXNl IHRoZSBVVEYtOCBlbmNvZGluZy4gICovDQojaWYgIShkZWZpbmVkIF9fQkVPU19fIHx8IGRlZmlu ZWQgX19IQUlLVV9fKQ0KICAvKiBDaGVjayB3aGV0aGVyIHRoZSBnaXZlbiBsb2NhbGUgbmFtZSBp cyByZWNvZ25pemVkIGJ5IHRoZSBzeXN0ZW0uICAqLw0KIyBpZiAoZGVmaW5lZCBfV0lOMzIgfHwg ZGVmaW5lZCBfX1dJTjMyX18pICYmICFkZWZpbmVkIF9fQ1lHV0lOX18NCiAgLyogT24gbmF0aXZl IFdpbjMyLCBzZXRsb2NhbGUoY2F0ZWdvcnksICIiKSBsb29rcyBhdCB0aGUgc3lzdGVtIHNldHRp bmdzLA0KICAgICBub3QgYXQgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlcy4gIEFsc28sIHdoZW4g YW4gZW5jb2Rpbmcgc3VmZml4IHN1Y2gNCiAgICAgYXMgIi42NTAwMSIgb3IgIi41NDkzNiIgaXMg c3BlZmljaWVkLCBpdCBzdWNjZWVkcyBidXQgc2V0cyB0aGUgTENfQ1RZUEUNCiAgICAgY2F0ZWdv cnkgb2YgdGhlIGxvY2FsZSB0byAiQyIuICAqLw0KICBpZiAoc2V0bG9jYWxlIChMQ19BTEwsIGdl dGVudiAoIkxDX0FMTCIpKSA9PSBOVUxMDQogICAgICB8fCBzdHJjbXAgKHNldGxvY2FsZSAoTENf Q1RZUEUsIE5VTEwpLCAiQyIpID09IDApDQogICAgcmV0dXJuIDE7DQojIGVsc2UNCiAgaWYgKHNl dGxvY2FsZSAoTENfQUxMLCAiIikgPT0gTlVMTCkgcmV0dXJuIDE7DQojIGVuZGlmDQogIC8qIENo ZWNrIHdoZXRoZXIgbmxfbGFuZ2luZm8oQ09ERVNFVCkgaXMgbm9uZW1wdHkgYW5kIG5vdCAiQVND SUkiIG9yICI2NDYiLg0KICAgICBPbiBNYWNPUyBYIDEwLjMuNSAoRGFyd2luIDcuNSkgaW4gdGhl IGZyX0ZSIGxvY2FsZSwgbmxfbGFuZ2luZm8oQ09ERVNFVCkNCiAgICAgaXMgZW1wdHksIGFuZCB0 aGUgYmVoYXZpb3VyIG9mIFRjbCA4LjQgaW4gdGhpcyBsb2NhbGUgaXMgbm90IHVzZWZ1bC4NCiAg ICAgT24gT3BlbkJTRCA0LjAsIHdoZW4gYW4gdW5zdXBwb3J0ZWQgbG9jYWxlIGlzIHNwZWNpZmll ZCwgc2V0bG9jYWxlKCkNCiAgICAgc3VjY2VlZHMgYnV0IHRoZW4gbmxfbGFuZ2luZm8oQ09ERVNF VCkgaXMgIjY0NiIuIEluIHRoaXMgc2l0dWF0aW9uLA0KICAgICBzb21lIHVuaXQgdGVzdHMgZmFp bC4gICovDQojIGlmIEhBVkVfTEFOR0lORk9fQ09ERVNFVA0KICB7DQogICAgY29uc3QgY2hhciAq Y3MgPSBubF9sYW5naW5mbyAoQ09ERVNFVCk7DQogICAgaWYgKGNzWzBdID09ICdcMCcgfHwgc3Ry Y21wIChjcywgIkFTQ0lJIikgPT0gMCB8fCBzdHJjbXAgKGNzLCAiNjQ2IikgPT0gMCkNCiAgICAg IHJldHVybiAxOw0KICB9DQojIGVuZGlmDQojIGlmZGVmIF9fQ1lHV0lOX18NCiAgLyogT24gQ3ln d2luLCBhdm9pZCBsb2NhbGUgbmFtZXMgd2l0aG91dCBlbmNvZGluZyBzdWZmaXgsIGJlY2F1c2Ug dGhlDQogICAgIGxvY2FsZV9jaGFyc2V0KCkgZnVuY3Rpb24gcmVsaWVzIG9uIHRoZSBlbmNvZGlu ZyBzdWZmaXguICBOb3RlIHRoYXQNCiAgICAgTENfQUxMIGlzIHNldCBvbiB0aGUgY29tbWFuZCBs aW5lLiAgKi8NCiAgaWYgKHN0cmNociAoZ2V0ZW52ICgiTENfQUxMIiksICcuJykgPT0gTlVMTCkg cmV0dXJuIDE7DQojIGVuZGlmDQogIC8qIENoZWNrIHdoZXRoZXIgaW4gdGhlIGFiYnJldmlhdGlv biBvZiB0aGUgc2Vjb25kIG1vbnRoLCB0aGUgc2Vjb25kDQogICAgIGNoYXJhY3RlciAoc2hvdWxk IGJlIFUrMDBFOTogTEFUSU4gU01BTEwgTEVUVEVSIEUgV0lUSCBBQ1VURSkgaXMNCiAgICAgdHdv IGJ5dGVzIGxvbmcsIHdpdGggVVRGLTggZW5jb2RpbmcuICAqLw0KICB0LnRtX3llYXIgPSAxOTc1 IC0gMTkwMDsgdC50bV9tb24gPSAyIC0gMTsgdC50bV9tZGF5ID0gNDsNCiAgaWYgKHN0cmZ0aW1l IChidWYsIHNpemVvZiAoYnVmKSwgIiViIiwgJnQpIDwgNA0KICAgICAgfHwgYnVmWzFdICE9IChj aGFyKSAweGMzIHx8IGJ1ZlsyXSAhPSAoY2hhcikgMHhhOSB8fCBidWZbM10gIT0gJ3YnKQ0KICAg IHJldHVybiAxOw0KI2VuZGlmDQogIC8qIENoZWNrIHdoZXRoZXIgdGhlIGRlY2ltYWwgc2VwYXJh dG9yIGlzIGEgY29tbWEuDQogICAgIE9uIE5ldEJTRCAzLjAgaW4gdGhlIGZyX0ZSLklTTzg4NTkt MSBsb2NhbGUsIGxvY2FsZWNvbnYoKS0+ZGVjaW1hbF9wb2ludA0KICAgICBhcmUgbmxfbGFuZ2lu Zm8oUkFESVhDSEFSKSBhcmUgYm90aCAiLiIuICAqLw0KICBpZiAobG9jYWxlY29udiAoKSAtPmRl Y2ltYWxfcG9pbnRbMF0gIT0gJywnKSByZXR1cm4gMTsNCiAgcmV0dXJuIDA7DQp9DQoNCl9BQ0VP Rg0KICAgIGlmIHsgeyBldmFsIGVjaG8gIlwiXCRhc19tZVwiOiR7YXNfbGluZW5vLSRMSU5FTk99 OiBcIiRhY19saW5rXCIiOyB9ID4mNQ0KICAoZXZhbCAkYWNfbGluaykgMj4mNQ0KICBhY19zdGF0 dXM9JD8NCiAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCQ/ID0gJGFj X3N0YXR1cyIgPiY1DQogIHRlc3QgJGFjX3N0YXR1cyA9IDA7IH0gJiYgdGVzdCAtcyBjb25mdGVz dCRhY19leGVleHQ7IHRoZW4NCiAgICAgIGNhc2UgIiRob3N0X29zIiBpbg0KICAgICAgICAjIEhh bmRsZSBuYXRpdmUgV2luZG93cyBzcGVjaWFsbHksIGJlY2F1c2UgdGhlcmUgc2V0bG9jYWxlKCkg aW50ZXJwcmV0cw0KICAgICAgICAjICJhciIgYXMgIkFyYWJpYyIgb3IgIkFyYWJpY19TYXVkaSBB cmFiaWEuMTI1NiIsDQogICAgICAgICMgImZyIiBvciAiZnJhIiBhcyAiRnJlbmNoIiBvciAiRnJl bmNoX0ZyYW5jZS4xMjUyIiwNCiAgICAgICAgIyAiZ2UiKCEpIG9yICJkZXUiKCEpIGFzICJHZXJt YW4iIG9yICJHZXJtYW5fR2VybWFueS4xMjUyIiwNCiAgICAgICAgIyAiamEiIGFzICJKYXBhbmVz ZSIgb3IgIkphcGFuZXNlX0phcGFuLjkzMiIsDQogICAgICAgICMgYW5kIHNpbWlsYXIuDQogICAg ICAgIG1pbmd3KikNCiAgICAgICAgICAjIFRlc3QgZm9yIHRoZSBoeXBvdGhldGljYWwgbmF0aXZl IFdpbjMyIGxvY2FsZSBuYW1lLg0KICAgICAgICAgIGlmIChMQ19BTEw9RnJlbmNoX0ZyYW5jZS42 NTAwMSBMQ19USU1FPSBMQ19DVFlQRT0gLi9jb25mdGVzdDsgZXhpdCkgMj4vZGV2L251bGw7IHRo ZW4NCiAgICAgICAgICAgIGd0X2N2X2xvY2FsZV9mcl91dGY4PUZyZW5jaF9GcmFuY2UuNjUwMDEN CiAgICAgICAgICBlbHNlDQogICAgICAgICAgICAjIE5vbmUgZm91bmQuDQogICAgICAgICAgICBn dF9jdl9sb2NhbGVfZnJfdXRmOD1ub25lDQogICAgICAgICAgZmkNCiAgICAgICAgICA7Ow0KICAg ICAgICAqKQ0KICAgICAgICAgICMgU2V0dGluZyBMQ19BTEwgaXMgbm90IGVub3VnaC4gTmVlZCB0 byBzZXQgTENfVElNRSB0byBlbXB0eSwgYmVjYXVzZQ0KICAgICAgICAgICMgb3RoZXJ3aXNlIG9u IE1hY09TIFggMTAuMy41IHRoZSBMQ19USU1FPUMgZnJvbSB0aGUgYmVnaW5uaW5nIG9mIHRoZQ0K ICAgICAgICAgICMgY29uZmlndXJlIHNjcmlwdCB3b3VsZCBvdmVycmlkZSB0aGUgTENfQUxMIHNl dHRpbmcuIExpa2V3aXNlIGZvcg0KICAgICAgICAgICMgTENfQ1RZUEUsIHdoaWNoIGlzIGFsc28g c2V0IGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIGNvbmZpZ3VyZSBzY3JpcHQuDQogICAgICAgICAg IyBUZXN0IGZvciB0aGUgdXN1YWwgbG9jYWxlIG5hbWUuDQogICAgICAgICAgaWYgKExDX0FMTD1m cl9GUiBMQ19USU1FPSBMQ19DVFlQRT0gLi9jb25mdGVzdDsgZXhpdCkgMj4vZGV2L251bGw7IHRo ZW4NCiAgICAgICAgICAgIGd0X2N2X2xvY2FsZV9mcl91dGY4PWZyX0ZSDQogICAgICAgICAgZWxz ZQ0KICAgICAgICAgICAgIyBUZXN0IGZvciB0aGUgbG9jYWxlIG5hbWUgd2l0aCBleHBsaWNpdCBl bmNvZGluZyBzdWZmaXguDQogICAgICAgICAgICBpZiAoTENfQUxMPWZyX0ZSLlVURi04IExDX1RJ TUU9IExDX0NUWVBFPSAuL2NvbmZ0ZXN0OyBleGl0KSAyPi9kZXYvbnVsbDsgdGhlbg0KICAgICAg ICAgICAgICBndF9jdl9sb2NhbGVfZnJfdXRmOD1mcl9GUi5VVEYtOA0KICAgICAgICAgICAgZWxz ZQ0KICAgICAgICAgICAgICAjIFRlc3QgZm9yIHRoZSBTb2xhcmlzIDcgbG9jYWxlIG5hbWUuDQog ICAgICAgICAgICAgIGlmIChMQ19BTEw9ZnIuVVRGLTggTENfVElNRT0gTENfQ1RZUEU9IC4vY29u ZnRlc3Q7IGV4aXQpIDI+L2Rldi9udWxsOyB0aGVuDQogICAgICAgICAgICAgICAgZ3RfY3ZfbG9j YWxlX2ZyX3V0Zjg9ZnIuVVRGLTgNCiAgICAgICAgICAgICAgZWxzZQ0KICAgICAgICAgICAgICAg ICMgTm9uZSBmb3VuZC4NCiAgICAgICAgICAgICAgICBndF9jdl9sb2NhbGVfZnJfdXRmOD1ub25l DQogICAgICAgICAgICAgIGZpDQogICAgICAgICAgICBmaQ0KICAgICAgICAgIGZpDQogICAgICAg ICAgOzsNCiAgICAgIGVzYWMNCiAgICBmaQ0KICAgIHJtIC1mciBjb25mdGVzdCoNCg0KZmkNCnsg JGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkZ3RfY3ZfbG9j YWxlX2ZyX3V0ZjgiID4mNQ0KJGFzX2VjaG8gIiRndF9jdl9sb2NhbGVfZnJfdXRmOCIgPiY2OyB9 DQogIExPQ0FMRV9GUl9VVEY4PSRndF9jdl9sb2NhbGVfZnJfdXRmOA0KDQoNCg0KDQoNCiAgeyAk YXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgYSB0cmFk aXRpb25hbCBqYXBhbmVzZSBsb2NhbGUiID4mNQ0KJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIGEg dHJhZGl0aW9uYWwgamFwYW5lc2UgbG9jYWxlLi4uICIgPiY2OyB9DQppZiAke2d0X2N2X2xvY2Fs ZV9qYSs6fSBmYWxzZTsgdGhlbiA6DQogICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2DQplbHNl DQoNCiAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0DQovKiBl bmQgY29uZmRlZnMuaC4gICovDQoNCiNpbmNsdWRlIDxsb2NhbGUuaD4NCiNpbmNsdWRlIDx0aW1l Lmg+DQojaWYgSEFWRV9MQU5HSU5GT19DT0RFU0VUDQojIGluY2x1ZGUgPGxhbmdpbmZvLmg+DQoj ZW5kaWYNCiNpbmNsdWRlIDxzdGRsaWIuaD4NCiNpbmNsdWRlIDxzdHJpbmcuaD4NCnN0cnVjdCB0 bSB0Ow0KY2hhciBidWZbMTZdOw0KaW50IG1haW4gKCkNCnsNCiAgY29uc3QgY2hhciAqcDsNCiAg LyogQ2hlY2sgd2hldGhlciB0aGUgZ2l2ZW4gbG9jYWxlIG5hbWUgaXMgcmVjb2duaXplZCBieSB0 aGUgc3lzdGVtLiAgKi8NCiNpZiAoZGVmaW5lZCBfV0lOMzIgfHwgZGVmaW5lZCBfX1dJTjMyX18p ICYmICFkZWZpbmVkIF9fQ1lHV0lOX18NCiAgLyogT24gbmF0aXZlIFdpbjMyLCBzZXRsb2NhbGUo Y2F0ZWdvcnksICIiKSBsb29rcyBhdCB0aGUgc3lzdGVtIHNldHRpbmdzLA0KICAgICBub3QgYXQg dGhlIGVudmlyb25tZW50IHZhcmlhYmxlcy4gIEFsc28sIHdoZW4gYW4gZW5jb2Rpbmcgc3VmZml4 IHN1Y2gNCiAgICAgYXMgIi42NTAwMSIgb3IgIi41NDkzNiIgaXMgc3BlZmljaWVkLCBpdCBzdWNj ZWVkcyBidXQgc2V0cyB0aGUgTENfQ1RZUEUNCiAgICAgY2F0ZWdvcnkgb2YgdGhlIGxvY2FsZSB0 byAiQyIuICAqLw0KICBpZiAoc2V0bG9jYWxlIChMQ19BTEwsIGdldGVudiAoIkxDX0FMTCIpKSA9 PSBOVUxMDQogICAgICB8fCBzdHJjbXAgKHNldGxvY2FsZSAoTENfQ1RZUEUsIE5VTEwpLCAiQyIp ID09IDApDQogICAgcmV0dXJuIDE7DQojZWxzZQ0KICBpZiAoc2V0bG9jYWxlIChMQ19BTEwsICIi KSA9PSBOVUxMKSByZXR1cm4gMTsNCiNlbmRpZg0KICAvKiBDaGVjayB3aGV0aGVyIG5sX2xhbmdp bmZvKENPREVTRVQpIGlzIG5vbmVtcHR5IGFuZCBub3QgIkFTQ0lJIiBvciAiNjQ2Ii4NCiAgICAg T24gTWFjT1MgWCAxMC4zLjUgKERhcndpbiA3LjUpIGluIHRoZSBmcl9GUiBsb2NhbGUsIG5sX2xh bmdpbmZvKENPREVTRVQpDQogICAgIGlzIGVtcHR5LCBhbmQgdGhlIGJlaGF2aW91ciBvZiBUY2wg OC40IGluIHRoaXMgbG9jYWxlIGlzIG5vdCB1c2VmdWwuDQogICAgIE9uIE9wZW5CU0QgNC4wLCB3 aGVuIGFuIHVuc3VwcG9ydGVkIGxvY2FsZSBpcyBzcGVjaWZpZWQsIHNldGxvY2FsZSgpDQogICAg IHN1Y2NlZWRzIGJ1dCB0aGVuIG5sX2xhbmdpbmZvKENPREVTRVQpIGlzICI2NDYiLiBJbiB0aGlz IHNpdHVhdGlvbiwNCiAgICAgc29tZSB1bml0IHRlc3RzIGZhaWwuDQogICAgIE9uIE1pckJTRCAx MCwgd2hlbiBhbiB1bnN1cHBvcnRlZCBsb2NhbGUgaXMgc3BlY2lmaWVkLCBzZXRsb2NhbGUoKQ0K ICAgICBzdWNjZWVkcyBidXQgdGhlbiBubF9sYW5naW5mbyhDT0RFU0VUKSBpcyAiVVRGLTgiLiAg Ki8NCiNpZiBIQVZFX0xBTkdJTkZPX0NPREVTRVQNCiAgew0KICAgIGNvbnN0IGNoYXIgKmNzID0g bmxfbGFuZ2luZm8gKENPREVTRVQpOw0KICAgIGlmIChjc1swXSA9PSAnXDAnIHx8IHN0cmNtcCAo Y3MsICJBU0NJSSIpID09IDAgfHwgc3RyY21wIChjcywgIjY0NiIpID09IDANCiAgICAgICAgfHwg c3RyY21wIChjcywgIlVURi04IikgPT0gMCkNCiAgICAgIHJldHVybiAxOw0KICB9DQojZW5kaWYN CiNpZmRlZiBfX0NZR1dJTl9fDQogIC8qIE9uIEN5Z3dpbiwgYXZvaWQgbG9jYWxlIG5hbWVzIHdp dGhvdXQgZW5jb2Rpbmcgc3VmZml4LCBiZWNhdXNlIHRoZQ0KICAgICBsb2NhbGVfY2hhcnNldCgp IGZ1bmN0aW9uIHJlbGllcyBvbiB0aGUgZW5jb2Rpbmcgc3VmZml4LiAgTm90ZSB0aGF0DQogICAg IExDX0FMTCBpcyBzZXQgb24gdGhlIGNvbW1hbmQgbGluZS4gICovDQogIGlmIChzdHJjaHIgKGdl dGVudiAoIkxDX0FMTCIpLCAnLicpID09IE5VTEwpIHJldHVybiAxOw0KI2VuZGlmDQogIC8qIENo ZWNrIHdoZXRoZXIgTUJfQ1VSX01BWCBpcyA+IDEuICBUaGlzIGV4Y2x1ZGVzIHRoZSBkeXNmdW5j dGlvbmFsIGxvY2FsZXMNCiAgICAgb24gQ3lnd2luIDEuNS54LiAgKi8NCiAgaWYgKE1CX0NVUl9N QVggPT0gMSkNCiAgICByZXR1cm4gMTsNCiAgLyogQ2hlY2sgd2hldGhlciBpbiBhIG1vbnRoIG5h bWUsIG5vIGJ5dGUgaW4gdGhlIHJhbmdlIDB4ODAuLjB4OUYgb2NjdXJzLg0KICAgICBUaGlzIGV4 Y2x1ZGVzIHRoZSBVVEYtOCBlbmNvZGluZyAoZXhjZXB0IG9uIE1pckJTRCkuICAqLw0KICB0LnRt X3llYXIgPSAxOTc1IC0gMTkwMDsgdC50bV9tb24gPSAyIC0gMTsgdC50bV9tZGF5ID0gNDsNCiAg aWYgKHN0cmZ0aW1lIChidWYsIHNpemVvZiAoYnVmKSwgIiVCIiwgJnQpIDwgMikgcmV0dXJuIDE7 DQogIGZvciAocCA9IGJ1ZjsgKnAgIT0gJ1wwJzsgcCsrKQ0KICAgIGlmICgodW5zaWduZWQgY2hh cikgKnAgPj0gMHg4MCAmJiAodW5zaWduZWQgY2hhcikgKnAgPCAweGEwKQ0KICAgICAgcmV0dXJu IDE7DQogIHJldHVybiAwOw0KfQ0KDQpfQUNFT0YNCiAgICBpZiB7IHsgZXZhbCBlY2hvICJcIlwk YXNfbWVcIjoke2FzX2xpbmVuby0kTElORU5PfTogXCIkYWNfbGlua1wiIjsgfSA+JjUNCiAgKGV2 YWwgJGFjX2xpbmspIDI+JjUNCiAgYWNfc3RhdHVzPSQ/DQogICRhc19lY2hvICIkYXNfbWU6JHth c19saW5lbm8tJExJTkVOT306IFwkPyA9ICRhY19zdGF0dXMiID4mNQ0KICB0ZXN0ICRhY19zdGF0 dXMgPSAwOyB9ICYmIHRlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0OyB0aGVuDQogICAgICBjYXNl ICIkaG9zdF9vcyIgaW4NCiAgICAgICAgIyBIYW5kbGUgbmF0aXZlIFdpbmRvd3Mgc3BlY2lhbGx5 LCBiZWNhdXNlIHRoZXJlIHNldGxvY2FsZSgpIGludGVycHJldHMNCiAgICAgICAgIyAiYXIiIGFz ICJBcmFiaWMiIG9yICJBcmFiaWNfU2F1ZGkgQXJhYmlhLjEyNTYiLA0KICAgICAgICAjICJmciIg b3IgImZyYSIgYXMgIkZyZW5jaCIgb3IgIkZyZW5jaF9GcmFuY2UuMTI1MiIsDQogICAgICAgICMg ImdlIighKSBvciAiZGV1IighKSBhcyAiR2VybWFuIiBvciAiR2VybWFuX0dlcm1hbnkuMTI1MiIs DQogICAgICAgICMgImphIiBhcyAiSmFwYW5lc2UiIG9yICJKYXBhbmVzZV9KYXBhbi45MzIiLA0K ICAgICAgICAjIGFuZCBzaW1pbGFyLg0KICAgICAgICBtaW5ndyopDQogICAgICAgICAgIyBOb3Rl IHRoYXQgb24gbmF0aXZlIFdpbjMyLCB0aGUgSmFwYW5lc2UgbG9jYWxlIGlzIEphcGFuZXNlX0ph cGFuLjkzMiwNCiAgICAgICAgICAjIGFuZCBDUDkzMiBpcyB2ZXJ5IGRpZmZlcmVudCBmcm9tIEVV Qy1KUCwgc28gd2UgY2Fubm90IHVzZSBpdCBoZXJlLg0KICAgICAgICAgIGd0X2N2X2xvY2FsZV9q YT1ub25lDQogICAgICAgICAgOzsNCiAgICAgICAgKikNCiAgICAgICAgICAjIFNldHRpbmcgTENf QUxMIGlzIG5vdCBlbm91Z2guIE5lZWQgdG8gc2V0IExDX1RJTUUgdG8gZW1wdHksIGJlY2F1c2UN CiAgICAgICAgICAjIG90aGVyd2lzZSBvbiBNYWNPUyBYIDEwLjMuNSB0aGUgTENfVElNRT1DIGZy b20gdGhlIGJlZ2lubmluZyBvZiB0aGUNCiAgICAgICAgICAjIGNvbmZpZ3VyZSBzY3JpcHQgd291 bGQgb3ZlcnJpZGUgdGhlIExDX0FMTCBzZXR0aW5nLiBMaWtld2lzZSBmb3INCiAgICAgICAgICAj IExDX0NUWVBFLCB3aGljaCBpcyBhbHNvIHNldCBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBjb25m aWd1cmUgc2NyaXB0Lg0KICAgICAgICAgICMgVGVzdCBmb3IgdGhlIEFJWCBsb2NhbGUgbmFtZS4N CiAgICAgICAgICBpZiAoTENfQUxMPWphX0pQIExDX1RJTUU9IExDX0NUWVBFPSAuL2NvbmZ0ZXN0 OyBleGl0KSAyPi9kZXYvbnVsbDsgdGhlbg0KICAgICAgICAgICAgZ3RfY3ZfbG9jYWxlX2phPWph X0pQDQogICAgICAgICAgZWxzZQ0KICAgICAgICAgICAgIyBUZXN0IGZvciB0aGUgbG9jYWxlIG5h bWUgd2l0aCBleHBsaWNpdCBlbmNvZGluZyBzdWZmaXguDQogICAgICAgICAgICBpZiAoTENfQUxM PWphX0pQLkVVQy1KUCBMQ19USU1FPSBMQ19DVFlQRT0gLi9jb25mdGVzdDsgZXhpdCkgMj4vZGV2 L251bGw7IHRoZW4NCiAgICAgICAgICAgICAgZ3RfY3ZfbG9jYWxlX2phPWphX0pQLkVVQy1KUA0K ICAgICAgICAgICAgZWxzZQ0KICAgICAgICAgICAgICAjIFRlc3QgZm9yIHRoZSBIUC1VWCwgT1NG LzEsIE5ldEJTRCBsb2NhbGUgbmFtZS4NCiAgICAgICAgICAgICAgaWYgKExDX0FMTD1qYV9KUC5l dWNKUCBMQ19USU1FPSBMQ19DVFlQRT0gLi9jb25mdGVzdDsgZXhpdCkgMj4vZGV2L251bGw7IHRo ZW4NCiAgICAgICAgICAgICAgICBndF9jdl9sb2NhbGVfamE9amFfSlAuZXVjSlANCiAgICAgICAg ICAgICAgZWxzZQ0KICAgICAgICAgICAgICAgICMgVGVzdCBmb3IgdGhlIElSSVgsIEZyZWVCU0Qg bG9jYWxlIG5hbWUuDQogICAgICAgICAgICAgICAgaWYgKExDX0FMTD1qYV9KUC5FVUMgTENfVElN RT0gTENfQ1RZUEU9IC4vY29uZnRlc3Q7IGV4aXQpIDI+L2Rldi9udWxsOyB0aGVuDQogICAgICAg ICAgICAgICAgICBndF9jdl9sb2NhbGVfamE9amFfSlAuRVVDDQogICAgICAgICAgICAgICAgZWxz ZQ0KICAgICAgICAgICAgICAgICAgIyBUZXN0IGZvciB0aGUgU29sYXJpcyA3IGxvY2FsZSBuYW1l Lg0KICAgICAgICAgICAgICAgICAgaWYgKExDX0FMTD1qYSBMQ19USU1FPSBMQ19DVFlQRT0gLi9j b25mdGVzdDsgZXhpdCkgMj4vZGV2L251bGw7IHRoZW4NCiAgICAgICAgICAgICAgICAgICAgZ3Rf Y3ZfbG9jYWxlX2phPWphDQogICAgICAgICAgICAgICAgICBlbHNlDQogICAgICAgICAgICAgICAg ICAgICMgU3BlY2lhbCB0ZXN0IGZvciBOZXRCU0QgMS42Lg0KICAgICAgICAgICAgICAgICAgICBp ZiB0ZXN0IC1mIC91c3Ivc2hhcmUvbG9jYWxlL2phX0pQLmV1Y0pQL0xDX0NUWVBFOyB0aGVuDQog ICAgICAgICAgICAgICAgICAgICAgZ3RfY3ZfbG9jYWxlX2phPWphX0pQLmV1Y0pQDQogICAgICAg ICAgICAgICAgICAgIGVsc2UNCiAgICAgICAgICAgICAgICAgICAgICAjIE5vbmUgZm91bmQuDQog ICAgICAgICAgICAgICAgICAgICAgZ3RfY3ZfbG9jYWxlX2phPW5vbmUNCiAgICAgICAgICAgICAg ICAgICAgZmkNCiAgICAgICAgICAgICAgICAgIGZpDQogICAgICAgICAgICAgICAgZmkNCiAgICAg ICAgICAgICAgZmkNCiAgICAgICAgICAgIGZpDQogICAgICAgICAgZmkNCiAgICAgICAgICA7Ow0K ICAgICAgZXNhYw0KICAgIGZpDQogICAgcm0gLWZyIGNvbmZ0ZXN0Kg0KDQpmaQ0KeyAkYXNfZWNo byAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRndF9jdl9sb2NhbGVfamEi ID4mNQ0KJGFzX2VjaG8gIiRndF9jdl9sb2NhbGVfamEiID4mNjsgfQ0KICBMT0NBTEVfSkE9JGd0 X2N2X2xvY2FsZV9qYQ0KDQoNCg0KDQoNCiAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5v LSRMSU5FTk99OiBjaGVja2luZyBmb3IgYSB0cmFuc2l0aW9uYWwgY2hpbmVzZSBsb2NhbGUiID4m NQ0KJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIGEgdHJhbnNpdGlvbmFsIGNoaW5lc2UgbG9jYWxl Li4uICIgPiY2OyB9DQppZiAke2d0X2N2X2xvY2FsZV96aF9DTis6fSBmYWxzZTsgdGhlbiA6DQog ICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2DQplbHNlDQoNCiAgICBjYXQgY29uZmRlZnMuaCAt IDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0DQovKiBlbmQgY29uZmRlZnMuaC4gICovDQoNCiNp bmNsdWRlIDxsb2NhbGUuaD4NCiNpbmNsdWRlIDxzdGRsaWIuaD4NCiNpbmNsdWRlIDx0aW1lLmg+ DQojaWYgSEFWRV9MQU5HSU5GT19DT0RFU0VUDQojIGluY2x1ZGUgPGxhbmdpbmZvLmg+DQojZW5k aWYNCiNpbmNsdWRlIDxzdGRsaWIuaD4NCiNpbmNsdWRlIDxzdHJpbmcuaD4NCnN0cnVjdCB0bSB0 Ow0KY2hhciBidWZbMTZdOw0KaW50IG1haW4gKCkNCnsNCiAgY29uc3QgY2hhciAqcDsNCiAgLyog Q2hlY2sgd2hldGhlciB0aGUgZ2l2ZW4gbG9jYWxlIG5hbWUgaXMgcmVjb2duaXplZCBieSB0aGUg c3lzdGVtLiAgKi8NCiNpZiAoZGVmaW5lZCBfV0lOMzIgfHwgZGVmaW5lZCBfX1dJTjMyX18pICYm ICFkZWZpbmVkIF9fQ1lHV0lOX18NCiAgLyogT24gbmF0aXZlIFdpbjMyLCBzZXRsb2NhbGUoY2F0 ZWdvcnksICIiKSBsb29rcyBhdCB0aGUgc3lzdGVtIHNldHRpbmdzLA0KICAgICBub3QgYXQgdGhl IGVudmlyb25tZW50IHZhcmlhYmxlcy4gIEFsc28sIHdoZW4gYW4gZW5jb2Rpbmcgc3VmZml4IHN1 Y2gNCiAgICAgYXMgIi42NTAwMSIgb3IgIi41NDkzNiIgaXMgc3BlZmljaWVkLCBpdCBzdWNjZWVk cyBidXQgc2V0cyB0aGUgTENfQ1RZUEUNCiAgICAgY2F0ZWdvcnkgb2YgdGhlIGxvY2FsZSB0byAi QyIuICAqLw0KICBpZiAoc2V0bG9jYWxlIChMQ19BTEwsIGdldGVudiAoIkxDX0FMTCIpKSA9PSBO VUxMDQogICAgICB8fCBzdHJjbXAgKHNldGxvY2FsZSAoTENfQ1RZUEUsIE5VTEwpLCAiQyIpID09 IDApDQogICAgcmV0dXJuIDE7DQojZWxzZQ0KICBpZiAoc2V0bG9jYWxlIChMQ19BTEwsICIiKSA9 PSBOVUxMKSByZXR1cm4gMTsNCiNlbmRpZg0KICAvKiBDaGVjayB3aGV0aGVyIG5sX2xhbmdpbmZv KENPREVTRVQpIGlzIG5vbmVtcHR5IGFuZCBub3QgIkFTQ0lJIiBvciAiNjQ2Ii4NCiAgICAgT24g TWFjT1MgWCAxMC4zLjUgKERhcndpbiA3LjUpIGluIHRoZSBmcl9GUiBsb2NhbGUsIG5sX2xhbmdp bmZvKENPREVTRVQpDQogICAgIGlzIGVtcHR5LCBhbmQgdGhlIGJlaGF2aW91ciBvZiBUY2wgOC40 IGluIHRoaXMgbG9jYWxlIGlzIG5vdCB1c2VmdWwuDQogICAgIE9uIE9wZW5CU0QgNC4wLCB3aGVu IGFuIHVuc3VwcG9ydGVkIGxvY2FsZSBpcyBzcGVjaWZpZWQsIHNldGxvY2FsZSgpDQogICAgIHN1 Y2NlZWRzIGJ1dCB0aGVuIG5sX2xhbmdpbmZvKENPREVTRVQpIGlzICI2NDYiLiBJbiB0aGlzIHNp dHVhdGlvbiwNCiAgICAgc29tZSB1bml0IHRlc3RzIGZhaWwuDQogICAgIE9uIE1pckJTRCAxMCwg d2hlbiBhbiB1bnN1cHBvcnRlZCBsb2NhbGUgaXMgc3BlY2lmaWVkLCBzZXRsb2NhbGUoKQ0KICAg ICBzdWNjZWVkcyBidXQgdGhlbiBubF9sYW5naW5mbyhDT0RFU0VUKSBpcyAiVVRGLTgiLiAgKi8N CiNpZiBIQVZFX0xBTkdJTkZPX0NPREVTRVQNCiAgew0KICAgIGNvbnN0IGNoYXIgKmNzID0gbmxf bGFuZ2luZm8gKENPREVTRVQpOw0KICAgIGlmIChjc1swXSA9PSAnXDAnIHx8IHN0cmNtcCAoY3Ms ICJBU0NJSSIpID09IDAgfHwgc3RyY21wIChjcywgIjY0NiIpID09IDANCiAgICAgICAgfHwgc3Ry Y21wIChjcywgIlVURi04IikgPT0gMCkNCiAgICAgIHJldHVybiAxOw0KICB9DQojZW5kaWYNCiNp ZmRlZiBfX0NZR1dJTl9fDQogIC8qIE9uIEN5Z3dpbiwgYXZvaWQgbG9jYWxlIG5hbWVzIHdpdGhv dXQgZW5jb2Rpbmcgc3VmZml4LCBiZWNhdXNlIHRoZQ0KICAgICBsb2NhbGVfY2hhcnNldCgpIGZ1 bmN0aW9uIHJlbGllcyBvbiB0aGUgZW5jb2Rpbmcgc3VmZml4LiAgTm90ZSB0aGF0DQogICAgIExD X0FMTCBpcyBzZXQgb24gdGhlIGNvbW1hbmQgbGluZS4gICovDQogIGlmIChzdHJjaHIgKGdldGVu diAoIkxDX0FMTCIpLCAnLicpID09IE5VTEwpIHJldHVybiAxOw0KI2VuZGlmDQogIC8qIENoZWNr IHdoZXRoZXIgaW4gYSBtb250aCBuYW1lLCBubyBieXRlIGluIHRoZSByYW5nZSAweDgwLi4weDlG IG9jY3Vycy4NCiAgICAgVGhpcyBleGNsdWRlcyB0aGUgVVRGLTggZW5jb2RpbmcgKGV4Y2VwdCBv biBNaXJCU0QpLiAgKi8NCiAgdC50bV95ZWFyID0gMTk3NSAtIDE5MDA7IHQudG1fbW9uID0gMiAt IDE7IHQudG1fbWRheSA9IDQ7DQogIGlmIChzdHJmdGltZSAoYnVmLCBzaXplb2YgKGJ1ZiksICIl QiIsICZ0KSA8IDIpIHJldHVybiAxOw0KICBmb3IgKHAgPSBidWY7ICpwICE9ICdcMCc7IHArKykN CiAgICBpZiAoKHVuc2lnbmVkIGNoYXIpICpwID49IDB4ODAgJiYgKHVuc2lnbmVkIGNoYXIpICpw IDwgMHhhMCkNCiAgICAgIHJldHVybiAxOw0KICAvKiBDaGVjayB3aGV0aGVyIGEgdHlwaWNhbCBH QjE4MDMwIG11bHRpYnl0ZSBzZXF1ZW5jZSBpcyByZWNvZ25pemVkIGFzIGENCiAgICAgc2luZ2xl IHdpZGUgY2hhcmFjdGVyLiAgVGhpcyBleGNsdWRlcyB0aGUgR0IyMzEyIGFuZCBHQksgZW5jb2Rp bmdzLiAgKi8NCiAgaWYgKG1ibGVuICgiXDIwM1wwNjJcMzMyXDA2NiIsIDUpICE9IDQpDQogICAg cmV0dXJuIDE7DQogIHJldHVybiAwOw0KfQ0KDQpfQUNFT0YNCiAgICBpZiB7IHsgZXZhbCBlY2hv ICJcIlwkYXNfbWVcIjoke2FzX2xpbmVuby0kTElORU5PfTogXCIkYWNfbGlua1wiIjsgfSA+JjUN CiAgKGV2YWwgJGFjX2xpbmspIDI+JjUNCiAgYWNfc3RhdHVzPSQ/DQogICRhc19lY2hvICIkYXNf bWU6JHthc19saW5lbm8tJExJTkVOT306IFwkPyA9ICRhY19zdGF0dXMiID4mNQ0KICB0ZXN0ICRh Y19zdGF0dXMgPSAwOyB9ICYmIHRlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0OyB0aGVuDQogICAg ICBjYXNlICIkaG9zdF9vcyIgaW4NCiAgICAgICAgIyBIYW5kbGUgbmF0aXZlIFdpbmRvd3Mgc3Bl Y2lhbGx5LCBiZWNhdXNlIHRoZXJlIHNldGxvY2FsZSgpIGludGVycHJldHMNCiAgICAgICAgIyAi YXIiIGFzICJBcmFiaWMiIG9yICJBcmFiaWNfU2F1ZGkgQXJhYmlhLjEyNTYiLA0KICAgICAgICAj ICJmciIgb3IgImZyYSIgYXMgIkZyZW5jaCIgb3IgIkZyZW5jaF9GcmFuY2UuMTI1MiIsDQogICAg ICAgICMgImdlIighKSBvciAiZGV1IighKSBhcyAiR2VybWFuIiBvciAiR2VybWFuX0dlcm1hbnku MTI1MiIsDQogICAgICAgICMgImphIiBhcyAiSmFwYW5lc2UiIG9yICJKYXBhbmVzZV9KYXBhbi45 MzIiLA0KICAgICAgICAjIGFuZCBzaW1pbGFyLg0KICAgICAgICBtaW5ndyopDQogICAgICAgICAg IyBUZXN0IGZvciB0aGUgaHlwb3RoZXRpY2FsIG5hdGl2ZSBXaW4zMiBsb2NhbGUgbmFtZS4NCiAg ICAgICAgICBpZiAoTENfQUxMPUNoaW5lc2VfQ2hpbmEuNTQ5MzYgTENfVElNRT0gTENfQ1RZUEU9 IC4vY29uZnRlc3Q7IGV4aXQpIDI+L2Rldi9udWxsOyB0aGVuDQogICAgICAgICAgICBndF9jdl9s b2NhbGVfemhfQ049Q2hpbmVzZV9DaGluYS41NDkzNg0KICAgICAgICAgIGVsc2UNCiAgICAgICAg ICAgICMgTm9uZSBmb3VuZC4NCiAgICAgICAgICAgIGd0X2N2X2xvY2FsZV96aF9DTj1ub25lDQog ICAgICAgICAgZmkNCiAgICAgICAgICA7Ow0KICAgICAgICAqKQ0KICAgICAgICAgICMgU2V0dGlu ZyBMQ19BTEwgaXMgbm90IGVub3VnaC4gTmVlZCB0byBzZXQgTENfVElNRSB0byBlbXB0eSwgYmVj YXVzZQ0KICAgICAgICAgICMgb3RoZXJ3aXNlIG9uIE1hY09TIFggMTAuMy41IHRoZSBMQ19USU1F PUMgZnJvbSB0aGUgYmVnaW5uaW5nIG9mIHRoZQ0KICAgICAgICAgICMgY29uZmlndXJlIHNjcmlw dCB3b3VsZCBvdmVycmlkZSB0aGUgTENfQUxMIHNldHRpbmcuIExpa2V3aXNlIGZvcg0KICAgICAg ICAgICMgTENfQ1RZUEUsIHdoaWNoIGlzIGFsc28gc2V0IGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhl IGNvbmZpZ3VyZSBzY3JpcHQuDQogICAgICAgICAgIyBUZXN0IGZvciB0aGUgbG9jYWxlIG5hbWUg d2l0aG91dCBlbmNvZGluZyBzdWZmaXguDQogICAgICAgICAgaWYgKExDX0FMTD16aF9DTiBMQ19U SU1FPSBMQ19DVFlQRT0gLi9jb25mdGVzdDsgZXhpdCkgMj4vZGV2L251bGw7IHRoZW4NCiAgICAg ICAgICAgIGd0X2N2X2xvY2FsZV96aF9DTj16aF9DTg0KICAgICAgICAgIGVsc2UNCiAgICAgICAg ICAgICMgVGVzdCBmb3IgdGhlIGxvY2FsZSBuYW1lIHdpdGggZXhwbGljaXQgZW5jb2Rpbmcgc3Vm Zml4Lg0KICAgICAgICAgICAgaWYgKExDX0FMTD16aF9DTi5HQjE4MDMwIExDX1RJTUU9IExDX0NU WVBFPSAuL2NvbmZ0ZXN0OyBleGl0KSAyPi9kZXYvbnVsbDsgdGhlbg0KICAgICAgICAgICAgICBn dF9jdl9sb2NhbGVfemhfQ049emhfQ04uR0IxODAzMA0KICAgICAgICAgICAgZWxzZQ0KICAgICAg ICAgICAgICAjIE5vbmUgZm91bmQuDQogICAgICAgICAgICAgIGd0X2N2X2xvY2FsZV96aF9DTj1u b25lDQogICAgICAgICAgICBmaQ0KICAgICAgICAgIGZpDQogICAgICAgICAgOzsNCiAgICAgIGVz YWMNCiAgICBlbHNlDQogICAgICAjIElmIHRoZXJlIHdhcyBhIGxpbmsgZXJyb3IsIGR1ZSB0byBt YmxlbigpLCB0aGUgc3lzdGVtIGlzIHNvIG9sZCB0aGF0DQogICAgICAjIGl0IGNlcnRhaW5seSBk b2Vzbid0IGhhdmUgYSBjaGluZXNlIGxvY2FsZS4NCiAgICAgIGd0X2N2X2xvY2FsZV96aF9DTj1u b25lDQogICAgZmkNCiAgICBybSAtZnIgY29uZnRlc3QqDQoNCmZpDQp7ICRhc19lY2hvICIkYXNf bWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGd0X2N2X2xvY2FsZV96aF9DTiIgPiY1 DQokYXNfZWNobyAiJGd0X2N2X2xvY2FsZV96aF9DTiIgPiY2OyB9DQogIExPQ0FMRV9aSF9DTj0k Z3RfY3ZfbG9jYWxlX3poX0NODQoNCg0KDQoNCg0KDQogIGlmIHRlc3QgJGFjX2N2X2Z1bmNfd2N0 b2IgPSBubzsgdGhlbg0KICAgIEhBVkVfREVDTF9XQ1RPQj0wDQoNCiAgICA6DQoNCg0KDQoNCg0K DQoNCg0KDQogIGdsdGVzdHNfTElCT0JKUz0iJGdsdGVzdHNfTElCT0JKUyB3Y3RvYi4kYWNfb2Jq ZXh0Ig0KDQoNCiAgOg0KDQogIGVsc2UNCg0KDQoNCiAgICAgICAgIHsgJGFzX2VjaG8gIiRhc19t ZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciB3Y3RvYiB3b3JrcyIgPiY1 DQokYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIHdjdG9iIHdvcmtzLi4uICIgPiY2OyB9DQpp ZiAke2dsX2N2X2Z1bmNfd2N0b2Jfd29ya3MrOn0gZmFsc2U7IHRoZW4gOg0KICAkYXNfZWNob19u ICIoY2FjaGVkKSAiID4mNg0KZWxzZQ0KDQogICAgICAgICAgICAgICAgICAgICAgICBjYXNlICIk aG9zdF9vcyIgaW4NCiAgICAgICAgICAgICMgR3Vlc3Mgbm8gb24gU29sYXJpcyA8PSA5IGFuZCBD eWd3aW4uDQogICAgICAgICAgc29sYXJpczIuWzEtOV0gfCBzb2xhcmlzMi5bMS05XS4qIHwgY3ln d2luKikNCiAgICAgICAgICAgIGdsX2N2X2Z1bmNfd2N0b2Jfd29ya3M9Imd1ZXNzaW5nIG5vIiA7 Ow0KICAgICAgICAgICAgIyBHdWVzcyB5ZXMgb3RoZXJ3aXNlLg0KICAgICAgICAgICopIGdsX2N2 X2Z1bmNfd2N0b2Jfd29ya3M9Imd1ZXNzaW5nIHllcyIgOzsNCiAgICAgICAgZXNhYw0KICAgICAg ICBjYXNlICIkaG9zdF9vcyIgaW4NCiAgICAgICAgICBjeWd3aW4qKQ0KICAgICAgICAgICAgaWYg dGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgPSB5ZXM7IHRoZW4gOg0KICA6DQplbHNlDQogIGNhdCBj b25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQNCi8qIGVuZCBjb25mZGVmcy5o LiAgKi8NCg0KI2luY2x1ZGUgPGxvY2FsZS5oPg0KLyogVHJ1NjQgd2l0aCBEZXNrdG9wIFRvb2xr aXQgQyBoYXMgYSBidWc6IDxzdGRpby5oPiBtdXN0IGJlIGluY2x1ZGVkIGJlZm9yZQ0KICAgPHdj aGFyLmg+Lg0KICAgQlNEL09TIDQuMC4xIGhhcyBhIGJ1ZzogPHN0ZGRlZi5oPiwgPHN0ZGlvLmg+ IGFuZCA8dGltZS5oPiBtdXN0IGJlDQogICBpbmNsdWRlZCBiZWZvcmUgPHdjaGFyLmg+LiAgKi8N CiNpbmNsdWRlIDxzdGRkZWYuaD4NCiNpbmNsdWRlIDxzdGRpby5oPg0KI2luY2x1ZGUgPHRpbWUu aD4NCiNpbmNsdWRlIDx3Y2hhci5oPg0KDQpyZWdpc3RlciBsb25nIGdsb2JhbCBfX2FzbV9fICgi JWVieCIpOw0KDQppbnQgbWFpbiAoKQ0Kew0KICBzZXRsb2NhbGUgKExDX0FMTCwgImVuX1VTLlVU Ri04Iik7DQoNCiAgZ2xvYmFsID0gMHgxMjM0NTY3ODsNCiAgaWYgKHdjdG9iICgweDAwRkMpICE9 IC0xKQ0KICAgIHJldHVybiAxOw0KICBpZiAoZ2xvYmFsICE9IDB4MTIzNDU2NzgpDQogICAgcmV0 dXJuIDI7DQogIHJldHVybiAwOw0KfQ0KX0FDRU9GDQppZiBhY19mbl9jX3RyeV9ydW4gIiRMSU5F Tk8iOyB0aGVuIDoNCiAgOg0KZWxzZQ0KICBnbF9jdl9mdW5jX3djdG9iX3dvcmtzPW5vDQpmaQ0K cm0gLWYgY29yZSAqLmNvcmUgY29yZS5jb25mdGVzdC4qIGdtb24ub3V0IGJiLm91dCBjb25mdGVz dCRhY19leGVleHQgXA0KICBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LmJlYW0gY29uZnRl c3QuJGFjX2V4dA0KZmkNCg0KICAgICAgICAgICAgOzsNCiAgICAgICAgZXNhYw0KICAgICAgICBp ZiB0ZXN0ICIkZ2xfY3ZfZnVuY193Y3RvYl93b3JrcyIgIT0gbm8gJiYgdGVzdCAkTE9DQUxFX0ZS ICE9IG5vbmU7IHRoZW4NCiAgICAgICAgICBpZiB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IHll czsgdGhlbiA6DQogIDoNCmVsc2UNCiAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRl c3QuJGFjX2V4dA0KLyogZW5kIGNvbmZkZWZzLmguICAqLw0KDQojaW5jbHVkZSA8bG9jYWxlLmg+ DQojaW5jbHVkZSA8c3RyaW5nLmg+DQovKiBUcnU2NCB3aXRoIERlc2t0b3AgVG9vbGtpdCBDIGhh cyBhIGJ1ZzogPHN0ZGlvLmg+IG11c3QgYmUgaW5jbHVkZWQgYmVmb3JlDQogICA8d2NoYXIuaD4u DQogICBCU0QvT1MgNC4wLjEgaGFzIGEgYnVnOiA8c3RkZGVmLmg+LCA8c3RkaW8uaD4gYW5kIDx0 aW1lLmg+IG11c3QgYmUNCiAgIGluY2x1ZGVkIGJlZm9yZSA8d2NoYXIuaD4uICAqLw0KI2luY2x1 ZGUgPHN0ZGRlZi5oPg0KI2luY2x1ZGUgPHN0ZGlvLmg+DQojaW5jbHVkZSA8dGltZS5oPg0KI2lu Y2x1ZGUgPHdjaGFyLmg+DQppbnQgbWFpbiAoKQ0Kew0KICBpZiAoc2V0bG9jYWxlIChMQ19BTEws ICIkTE9DQUxFX0ZSIikgIT0gTlVMTCkNCiAgICB7DQogICAgICB3Y2hhcl90IHdjOw0KDQogICAg ICBpZiAobWJ0b3djICgmd2MsICJcMzc0IiwgMSkgPT0gMSkNCiAgICAgICAgaWYgKHdjdG9iICh3 YykgIT0gKHVuc2lnbmVkIGNoYXIpICdcMzc0JykNCiAgICAgICAgICByZXR1cm4gMTsNCiAgICB9 DQogIHJldHVybiAwOw0KfQ0KX0FDRU9GDQppZiBhY19mbl9jX3RyeV9ydW4gIiRMSU5FTk8iOyB0 aGVuIDoNCiAgZ2xfY3ZfZnVuY193Y3RvYl93b3Jrcz15ZXMNCmVsc2UNCiAgZ2xfY3ZfZnVuY193 Y3RvYl93b3Jrcz1ubw0KZmkNCnJtIC1mIGNvcmUgKi5jb3JlIGNvcmUuY29uZnRlc3QuKiBnbW9u Lm91dCBiYi5vdXQgY29uZnRlc3QkYWNfZXhlZXh0IFwNCiAgY29uZnRlc3QuJGFjX29iamV4dCBj b25mdGVzdC5iZWFtIGNvbmZ0ZXN0LiRhY19leHQNCmZpDQoNCiAgICAgICAgZmkNCg0KZmkNCnsg JGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkZ2xfY3ZfZnVu Y193Y3RvYl93b3JrcyIgPiY1DQokYXNfZWNobyAiJGdsX2N2X2Z1bmNfd2N0b2Jfd29ya3MiID4m NjsgfQ0KICAgIGNhc2UgIiRnbF9jdl9mdW5jX3djdG9iX3dvcmtzIiBpbg0KICAgICAgKnllcykg OzsNCiAgICAgICopIFJFUExBQ0VfV0NUT0I9MSA7Ow0KICAgIGVzYWMNCiAgICBpZiB0ZXN0ICRS RVBMQUNFX1dDVE9CID0gMTsgdGhlbg0KDQogICAgOg0KDQoNCg0KDQoNCg0KDQoNCg0KICBnbHRl c3RzX0xJQk9CSlM9IiRnbHRlc3RzX0xJQk9CSlMgd2N0b2IuJGFjX29iamV4dCINCg0KDQogIDoN Cg0KICAgIGVsc2UNCg0KICAgICAgICAgICAgYWNfZm5fY19jaGVja19kZWNsICIkTElORU5PIiAi d2N0b2IiICJhY19jdl9oYXZlX2RlY2xfd2N0b2IiICINCi8qIFRydTY0IHdpdGggRGVza3RvcCBU b29sa2l0IEMgaGFzIGEgYnVnOiA8c3RkaW8uaD4gbXVzdCBiZSBpbmNsdWRlZCBiZWZvcmUNCiAg IDx3Y2hhci5oPi4NCiAgIEJTRC9PUyA0LjAuMSBoYXMgYSBidWc6IDxzdGRkZWYuaD4sIDxzdGRp by5oPiBhbmQgPHRpbWUuaD4gbXVzdCBiZSBpbmNsdWRlZA0KICAgYmVmb3JlIDx3Y2hhci5oPi4g ICovDQojaW5jbHVkZSA8c3RkZGVmLmg+DQojaW5jbHVkZSA8c3RkaW8uaD4NCiNpbmNsdWRlIDx0 aW1lLmg+DQojaW5jbHVkZSA8d2NoYXIuaD4NCg0KIg0KaWYgdGVzdCAieCRhY19jdl9oYXZlX2Rl Y2xfd2N0b2IiID0geHllczsgdGhlbiA6DQogIGFjX2hhdmVfZGVjbD0xDQplbHNlDQogIGFjX2hh dmVfZGVjbD0wDQpmaQ0KDQpjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GDQojZGVmaW5lIEhBVkVf REVDTF9XQ1RPQiAkYWNfaGF2ZV9kZWNsDQpfQUNFT0YNCg0KICAgICAgaWYgdGVzdCAkYWNfY3Zf aGF2ZV9kZWNsX3djdG9iICE9IHllczsgdGhlbg0KICAgICAgICBIQVZFX0RFQ0xfV0NUT0I9MA0K DQogICAgOg0KDQogICAgICBmaQ0KICAgIGZpDQogIGZpDQoNCg0KDQoNCiAgR05VTElCX1dDVE9C PSRnbF9tb2R1bGVfaW5kaWNhdG9yX2NvbmRpdGlvbg0KDQoNCg0KJGFzX2VjaG8gIiNkZWZpbmUg R05VTElCX1RFU1RfV0NUT0IgMSIgPj5jb25mZGVmcy5oDQoNCg0KDQoNCg0KDQogIGlmIGZhbHNl OyB0aGVuDQogICAgUkVQTEFDRV9XQ1RPTUI9MQ0KICBmaQ0KICBpZiB0ZXN0ICRSRVBMQUNFX1dD VE9NQiA9IDE7IHRoZW4NCg0KDQoNCg0KDQoNCg0KDQogIGdsdGVzdHNfTElCT0JKUz0iJGdsdGVz dHNfTElCT0JKUyB3Y3RvbWIuJGFjX29iamV4dCINCg0KDQogIDoNCg0KICBmaQ0KDQoNCg0KDQog IEdOVUxJQl9XQ1RPTUI9JGdsX21vZHVsZV9pbmRpY2F0b3JfY29uZGl0aW9uDQoNCg0KDQokYXNf ZWNobyAiI2RlZmluZSBHTlVMSUJfVEVTVF9XQ1RPTUIgMSIgPj5jb25mZGVmcy5oDQoNCg0KDQoN Cg0KICAgIFlJRUxEX0xJQj0NCiAgaWYgdGVzdCAkZ2xfdGhyZWFkc19hcGkgPSBwb3NpeDsgdGhl bg0KICAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNr aW5nIGZvciBzY2hlZF95aWVsZCBpbiAtbHJ0IiA+JjUNCiRhc19lY2hvX24gImNoZWNraW5nIGZv ciBzY2hlZF95aWVsZCBpbiAtbHJ0Li4uICIgPiY2OyB9DQppZiAke2FjX2N2X2xpYl9ydF9zY2hl ZF95aWVsZCs6fSBmYWxzZTsgdGhlbiA6DQogICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2DQpl bHNlDQogIGFjX2NoZWNrX2xpYl9zYXZlX0xJQlM9JExJQlMNCkxJQlM9Ii1scnQgICRMSUJTIg0K Y2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dA0KLyogZW5kIGNvbmZk ZWZzLmguICAqLw0KDQovKiBPdmVycmlkZSBhbnkgR0NDIGludGVybmFsIHByb3RvdHlwZSB0byBh dm9pZCBhbiBlcnJvci4NCiAgIFVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSBy ZXR1cm4gdHlwZSBvZiBhIEdDQw0KICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJv dG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8NCiNpZmRlZiBfX2NwbHVzcGx1cw0KZXh0ZXJu ICJDIg0KI2VuZGlmDQpjaGFyIHNjaGVkX3lpZWxkICgpOw0KaW50DQptYWluICgpDQp7DQpyZXR1 cm4gc2NoZWRfeWllbGQgKCk7DQogIDsNCiAgcmV0dXJuIDA7DQp9DQpfQUNFT0YNCmlmIGFjX2Zu X2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoNCiAgYWNfY3ZfbGliX3J0X3NjaGVkX3lpZWxk PXllcw0KZWxzZQ0KICBhY19jdl9saWJfcnRfc2NoZWRfeWllbGQ9bm8NCmZpDQpybSAtZiBjb3Jl IGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwNCiAgICBjb25mdGVzdCRhY19leGVl eHQgY29uZnRlc3QuJGFjX2V4dA0KTElCUz0kYWNfY2hlY2tfbGliX3NhdmVfTElCUw0KZmkNCnsg JGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfbGli X3J0X3NjaGVkX3lpZWxkIiA+JjUNCiRhc19lY2hvICIkYWNfY3ZfbGliX3J0X3NjaGVkX3lpZWxk IiA+JjY7IH0NCmlmIHRlc3QgIngkYWNfY3ZfbGliX3J0X3NjaGVkX3lpZWxkIiA9IHh5ZXM7IHRo ZW4gOg0KICBZSUVMRF9MSUI9LWxydA0KZWxzZQ0KICAgICAgICAgeyAkYXNfZWNobyAiJGFzX21l OiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3Igc2NoZWRfeWllbGQgaW4gLWxwb3Np eDQiID4mNQ0KJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIHNjaGVkX3lpZWxkIGluIC1scG9zaXg0 Li4uICIgPiY2OyB9DQppZiAke2FjX2N2X2xpYl9wb3NpeDRfc2NoZWRfeWllbGQrOn0gZmFsc2U7 IHRoZW4gOg0KICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNg0KZWxzZQ0KICBhY19jaGVja19s aWJfc2F2ZV9MSUJTPSRMSUJTDQpMSUJTPSItbHBvc2l4NCAgJExJQlMiDQpjYXQgY29uZmRlZnMu aCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0DQovKiBlbmQgY29uZmRlZnMuaC4gICovDQoN Ci8qIE92ZXJyaWRlIGFueSBHQ0MgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9y Lg0KICAgVXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9m IGEgR0NDDQogICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQg c3RpbGwgYXBwbHkuICAqLw0KI2lmZGVmIF9fY3BsdXNwbHVzDQpleHRlcm4gIkMiDQojZW5kaWYN CmNoYXIgc2NoZWRfeWllbGQgKCk7DQppbnQNCm1haW4gKCkNCnsNCnJldHVybiBzY2hlZF95aWVs ZCAoKTsNCiAgOw0KICByZXR1cm4gMDsNCn0NCl9BQ0VPRg0KaWYgYWNfZm5fY190cnlfbGluayAi JExJTkVOTyI7IHRoZW4gOg0KICBhY19jdl9saWJfcG9zaXg0X3NjaGVkX3lpZWxkPXllcw0KZWxz ZQ0KICBhY19jdl9saWJfcG9zaXg0X3NjaGVkX3lpZWxkPW5vDQpmaQ0Kcm0gLWYgY29yZSBjb25m dGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcDQogICAgY29uZnRlc3QkYWNfZXhlZXh0IGNv bmZ0ZXN0LiRhY19leHQNCkxJQlM9JGFjX2NoZWNrX2xpYl9zYXZlX0xJQlMNCmZpDQp7ICRhc19l Y2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X2xpYl9wb3Np eDRfc2NoZWRfeWllbGQiID4mNQ0KJGFzX2VjaG8gIiRhY19jdl9saWJfcG9zaXg0X3NjaGVkX3lp ZWxkIiA+JjY7IH0NCmlmIHRlc3QgIngkYWNfY3ZfbGliX3Bvc2l4NF9zY2hlZF95aWVsZCIgPSB4 eWVzOyB0aGVuIDoNCiAgWUlFTERfTElCPS1scG9zaXg0DQpmaQ0KDQpmaQ0KDQogIGZpDQoNCg0K DQoNCg0KDQoNCg0KDQoNCg0KDQogIExJQkNPUkVVVElMU19MSUJERVBTPSIkZ2xfbGliZGVwcyIN Cg0KICBMSUJDT1JFVVRJTFNfTFRMSUJERVBTPSIkZ2xfbHRsaWJkZXBzIg0KDQogIExJQlRFU1RT X0xJQkRFUFM9IiRnbHRlc3RzX2xpYmRlcHMiDQoNCg0KeyAkYXNfZWNobyAiJGFzX21lOiR7YXNf bGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgbGlicmFyeSBjb250YWluaW5nIHN0cmVycm9y IiA+JjUNCiRhc19lY2hvX24gImNoZWNraW5nIGZvciBsaWJyYXJ5IGNvbnRhaW5pbmcgc3RyZXJy b3IuLi4gIiA+JjY7IH0NCmlmICR7YWNfY3Zfc2VhcmNoX3N0cmVycm9yKzp9IGZhbHNlOyB0aGVu IDoNCiAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYNCmVsc2UNCiAgYWNfZnVuY19zZWFyY2hf c2F2ZV9MSUJTPSRMSUJTDQpjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNf ZXh0DQovKiBlbmQgY29uZmRlZnMuaC4gICovDQoNCi8qIE92ZXJyaWRlIGFueSBHQ0MgaW50ZXJu YWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLg0KICAgVXNlIGNoYXIgYmVjYXVzZSBpbnQg bWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgR0NDDQogICBidWlsdGluIGFuZCB0aGVu IGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLw0KI2lmZGVmIF9f Y3BsdXNwbHVzDQpleHRlcm4gIkMiDQojZW5kaWYNCmNoYXIgc3RyZXJyb3IgKCk7DQppbnQNCm1h aW4gKCkNCnsNCnJldHVybiBzdHJlcnJvciAoKTsNCiAgOw0KICByZXR1cm4gMDsNCn0NCl9BQ0VP Rg0KZm9yIGFjX2xpYiBpbiAnJyBjcG9zaXg7IGRvDQogIGlmIHRlc3QgLXogIiRhY19saWIiOyB0 aGVuDQogICAgYWNfcmVzPSJub25lIHJlcXVpcmVkIg0KICBlbHNlDQogICAgYWNfcmVzPS1sJGFj X2xpYg0KICAgIExJQlM9Ii1sJGFjX2xpYiAgJGFjX2Z1bmNfc2VhcmNoX3NhdmVfTElCUyINCiAg ZmkNCiAgaWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOg0KICBhY19jdl9zZWFy Y2hfc3RyZXJyb3I9JGFjX3Jlcw0KZmkNCnJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0 LiRhY19vYmpleHQgXA0KICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dA0KICBpZiAke2FjX2N2X3NlYXJj aF9zdHJlcnJvcis6fSBmYWxzZTsgdGhlbiA6DQogIGJyZWFrDQpmaQ0KZG9uZQ0KaWYgJHthY19j dl9zZWFyY2hfc3RyZXJyb3IrOn0gZmFsc2U7IHRoZW4gOg0KDQplbHNlDQogIGFjX2N2X3NlYXJj aF9zdHJlcnJvcj1ubw0KZmkNCnJtIGNvbmZ0ZXN0LiRhY19leHQNCkxJQlM9JGFjX2Z1bmNfc2Vh cmNoX3NhdmVfTElCUw0KZmkNCnsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5P fTogcmVzdWx0OiAkYWNfY3Zfc2VhcmNoX3N0cmVycm9yIiA+JjUNCiRhc19lY2hvICIkYWNfY3Zf c2VhcmNoX3N0cmVycm9yIiA+JjY7IH0NCmFjX3Jlcz0kYWNfY3Zfc2VhcmNoX3N0cmVycm9yDQpp ZiB0ZXN0ICIkYWNfcmVzIiAhPSBubzsgdGhlbiA6DQogIHRlc3QgIiRhY19yZXMiID0gIm5vbmUg cmVxdWlyZWQiIHx8IExJQlM9IiRhY19yZXMgJExJQlMiDQoNCmZpDQoNCnsgJGFzX2VjaG8gIiRh c19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIGZ1bmN0aW9uIHByb3RvdHlw ZXMiID4mNQ0KJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIGZ1bmN0aW9uIHByb3RvdHlwZXMuLi4g IiA+JjY7IH0NCmlmIHRlc3QgIiRhY19jdl9wcm9nX2NjX2M4OSIgIT0gbm87IHRoZW4NCiAgeyAk YXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1DQok YXNfZWNobyAieWVzIiA+JjY7IH0NCg0KJGFzX2VjaG8gIiNkZWZpbmUgUFJPVE9UWVBFUyAxIiA+ PmNvbmZkZWZzLmgNCg0KDQokYXNfZWNobyAiI2RlZmluZSBfX1BST1RPVFlQRVMgMSIgPj5jb25m ZGVmcy5oDQoNCmVsc2UNCiAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99 OiByZXN1bHQ6IG5vIiA+JjUNCiRhc19lY2hvICJubyIgPiY2OyB9DQpmaQ0KDQoNCmlmIHRlc3Qg IiRhY19jdl9wcm9nX2NjX3N0ZGMiICE9IG5vOyB0aGVuDQogIFU9IEFOU0kyS05SPQ0KZWxzZQ0K ICBVPV8gQU5TSTJLTlI9Li9hbnNpMmtucg0KZmkNCiMgRW5zdXJlIHNvbWUgY2hlY2tzIG5lZWRl ZCBieSBhbnNpMmtuciBpdHNlbGYuDQoNCmZvciBhY19oZWFkZXIgaW4gc3RyaW5nLmgNCmRvIDoN CiAgYWNfZm5fY19jaGVja19oZWFkZXJfbW9uZ3JlbCAiJExJTkVOTyIgInN0cmluZy5oIiAiYWNf Y3ZfaGVhZGVyX3N0cmluZ19oIiAiJGFjX2luY2x1ZGVzX2RlZmF1bHQiDQppZiB0ZXN0ICJ4JGFj X2N2X2hlYWRlcl9zdHJpbmdfaCIgPSB4eWVzOyB0aGVuIDoNCiAgY2F0ID4+Y29uZmRlZnMuaCA8 PF9BQ0VPRg0KI2RlZmluZSBIQVZFX1NUUklOR19IIDENCl9BQ0VPRg0KDQpmaQ0KDQpkb25lDQoN Cg0KeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3Ig d29ya2luZyB2b2xhdGlsZSIgPiY1DQokYXNfZWNob19uICJjaGVja2luZyBmb3Igd29ya2luZyB2 b2xhdGlsZS4uLiAiID4mNjsgfQ0KaWYgJHthY19jdl9jX3ZvbGF0aWxlKzp9IGZhbHNlOyB0aGVu IDoNCiAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYNCmVsc2UNCiAgY2F0IGNvbmZkZWZzLmgg LSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dA0KLyogZW5kIGNvbmZkZWZzLmguICAqLw0KDQpp bnQNCm1haW4gKCkNCnsNCg0Kdm9sYXRpbGUgaW50IHg7DQppbnQgKiB2b2xhdGlsZSB5ID0gKGlu dCAqKSAwOw0KcmV0dXJuICF4ICYmICF5Ow0KICA7DQogIHJldHVybiAwOw0KfQ0KX0FDRU9GDQpp ZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6DQogIGFjX2N2X2Nfdm9sYXRp bGU9eWVzDQplbHNlDQogIGFjX2N2X2Nfdm9sYXRpbGU9bm8NCmZpDQpybSAtZiBjb3JlIGNvbmZ0 ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQNCmZpDQp7ICRhc19l Y2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X2Nfdm9sYXRp bGUiID4mNQ0KJGFzX2VjaG8gIiRhY19jdl9jX3ZvbGF0aWxlIiA+JjY7IH0NCmlmIHRlc3QgJGFj X2N2X2Nfdm9sYXRpbGUgPSBubzsgdGhlbg0KDQokYXNfZWNobyAiI2RlZmluZSB2b2xhdGlsZSAv KiovIiA+PmNvbmZkZWZzLmgNCg0KZmkNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCiAg Zm9yIGFjX2hlYWRlciBpbiBzeXMvc3lzY3RsLmgNCmRvIDoNCiAgYWNfZm5fY19jaGVja19oZWFk ZXJfY29tcGlsZSAiJExJTkVOTyIgInN5cy9zeXNjdGwuaCIgImFjX2N2X2hlYWRlcl9zeXNfc3lz Y3RsX2giICIkYWNfaW5jbHVkZXNfZGVmYXVsdA0KICAgICAjaWYgSEFWRV9TWVNfUEFSQU1fSA0K ICAgICAgICNpbmNsdWRlIDxzeXMvcGFyYW0uaD4NCiAgICAgICNlbmRpZg0KIg0KaWYgdGVzdCAi eCRhY19jdl9oZWFkZXJfc3lzX3N5c2N0bF9oIiA9IHh5ZXM7IHRoZW4gOg0KICBjYXQgPj5jb25m ZGVmcy5oIDw8X0FDRU9GDQojZGVmaW5lIEhBVkVfU1lTX1NZU0NUTF9IIDENCl9BQ0VPRg0KDQpm aQ0KDQpkb25lDQoNCg0KYWNfZm5fY19jaGVja190eXBlICIkTElORU5PIiAicGlkX3QiICJhY19j dl90eXBlX3BpZF90IiAiJGFjX2luY2x1ZGVzX2RlZmF1bHQiDQppZiB0ZXN0ICJ4JGFjX2N2X3R5 cGVfcGlkX3QiID0geHllczsgdGhlbiA6DQoNCmVsc2UNCg0KY2F0ID4+Y29uZmRlZnMuaCA8PF9B Q0VPRg0KI2RlZmluZSBwaWRfdCBpbnQNCl9BQ0VPRg0KDQpmaQ0KDQp7ICRhc19lY2hvICIkYXNf bWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgc3lzL3R5cGVzLmggZGVm aW5lcyBtYWtlZGV2IiA+JjUNCiRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgc3lzL3R5cGVz LmggZGVmaW5lcyBtYWtlZGV2Li4uICIgPiY2OyB9DQppZiAke2FjX2N2X2hlYWRlcl9zeXNfdHlw ZXNfaF9tYWtlZGV2Kzp9IGZhbHNlOyB0aGVuIDoNCiAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+ JjYNCmVsc2UNCiAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dA0K LyogZW5kIGNvbmZkZWZzLmguICAqLw0KI2luY2x1ZGUgPHN5cy90eXBlcy5oPg0KaW50DQptYWlu ICgpDQp7DQpyZXR1cm4gbWFrZWRldigwLCAwKTsNCiAgOw0KICByZXR1cm4gMDsNCn0NCl9BQ0VP Rg0KaWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOg0KICBhY19jdl9oZWFkZXJf c3lzX3R5cGVzX2hfbWFrZWRldj15ZXMNCmVsc2UNCiAgYWNfY3ZfaGVhZGVyX3N5c190eXBlc19o X21ha2VkZXY9bm8NCmZpDQpybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2Jq ZXh0IFwNCiAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dA0KDQpmaQ0KeyAk YXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9oZWFk ZXJfc3lzX3R5cGVzX2hfbWFrZWRldiIgPiY1DQokYXNfZWNobyAiJGFjX2N2X2hlYWRlcl9zeXNf dHlwZXNfaF9tYWtlZGV2IiA+JjY7IH0NCg0KaWYgdGVzdCAkYWNfY3ZfaGVhZGVyX3N5c190eXBl c19oX21ha2VkZXYgPSBubzsgdGhlbg0KYWNfZm5fY19jaGVja19oZWFkZXJfbW9uZ3JlbCAiJExJ TkVOTyIgInN5cy9ta2Rldi5oIiAiYWNfY3ZfaGVhZGVyX3N5c19ta2Rldl9oIiAiJGFjX2luY2x1 ZGVzX2RlZmF1bHQiDQppZiB0ZXN0ICJ4JGFjX2N2X2hlYWRlcl9zeXNfbWtkZXZfaCIgPSB4eWVz OyB0aGVuIDoNCg0KJGFzX2VjaG8gIiNkZWZpbmUgTUFKT1JfSU5fTUtERVYgMSIgPj5jb25mZGVm cy5oDQoNCmZpDQoNCg0KDQogIGlmIHRlc3QgJGFjX2N2X2hlYWRlcl9zeXNfbWtkZXZfaCA9IG5v OyB0aGVuDQogICAgYWNfZm5fY19jaGVja19oZWFkZXJfbW9uZ3JlbCAiJExJTkVOTyIgInN5cy9z eXNtYWNyb3MuaCIgImFjX2N2X2hlYWRlcl9zeXNfc3lzbWFjcm9zX2giICIkYWNfaW5jbHVkZXNf ZGVmYXVsdCINCmlmIHRlc3QgIngkYWNfY3ZfaGVhZGVyX3N5c19zeXNtYWNyb3NfaCIgPSB4eWVz OyB0aGVuIDoNCg0KJGFzX2VjaG8gIiNkZWZpbmUgTUFKT1JfSU5fU1lTTUFDUk9TIDEiID4+Y29u ZmRlZnMuaA0KDQpmaQ0KDQoNCiAgZmkNCmZpDQoNCnsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xp bmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciB0aW1lLmggYW5kIHN5cy90aW1lLmggbWF5 IGJvdGggYmUgaW5jbHVkZWQiID4mNQ0KJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciB0aW1l LmggYW5kIHN5cy90aW1lLmggbWF5IGJvdGggYmUgaW5jbHVkZWQuLi4gIiA+JjY7IH0NCmlmICR7 YWNfY3ZfaGVhZGVyX3RpbWUrOn0gZmFsc2U7IHRoZW4gOg0KICAkYXNfZWNob19uICIoY2FjaGVk KSAiID4mNg0KZWxzZQ0KICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNf ZXh0DQovKiBlbmQgY29uZmRlZnMuaC4gICovDQojaW5jbHVkZSA8c3lzL3R5cGVzLmg+DQojaW5j bHVkZSA8c3lzL3RpbWUuaD4NCiNpbmNsdWRlIDx0aW1lLmg+DQoNCmludA0KbWFpbiAoKQ0Kew0K aWYgKChzdHJ1Y3QgdG0gKikgMCkNCnJldHVybiAwOw0KICA7DQogIHJldHVybiAwOw0KfQ0KX0FD RU9GDQppZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6DQogIGFjX2N2X2hl YWRlcl90aW1lPXllcw0KZWxzZQ0KICBhY19jdl9oZWFkZXJfdGltZT1ubw0KZmkNCnJtIC1mIGNv cmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dA0KZmkN CnsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3Zf aGVhZGVyX3RpbWUiID4mNQ0KJGFzX2VjaG8gIiRhY19jdl9oZWFkZXJfdGltZSIgPiY2OyB9DQpp ZiB0ZXN0ICRhY19jdl9oZWFkZXJfdGltZSA9IHllczsgdGhlbg0KDQokYXNfZWNobyAiI2RlZmlu ZSBUSU1FX1dJVEhfU1lTX1RJTUUgMSIgPj5jb25mZGVmcy5oDQoNCmZpDQoNCg0KDQphY19mbl9j X2NoZWNrX2RlY2wgIiRMSU5FTk8iICJnZXRldWlkIiAiYWNfY3ZfaGF2ZV9kZWNsX2dldGV1aWQi ICIkYWNfaW5jbHVkZXNfZGVmYXVsdCINCmlmIHRlc3QgIngkYWNfY3ZfaGF2ZV9kZWNsX2dldGV1 aWQiID0geHllczsgdGhlbiA6DQogIGFjX2hhdmVfZGVjbD0xDQplbHNlDQogIGFjX2hhdmVfZGVj bD0wDQpmaQ0KDQpjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GDQojZGVmaW5lIEhBVkVfREVDTF9H RVRFVUlEICRhY19oYXZlX2RlY2wNCl9BQ0VPRg0KDQphY19mbl9jX2NoZWNrX2RlY2wgIiRMSU5F Tk8iICJnZXRsb2dpbiIgImFjX2N2X2hhdmVfZGVjbF9nZXRsb2dpbiIgIiRhY19pbmNsdWRlc19k ZWZhdWx0Ig0KaWYgdGVzdCAieCRhY19jdl9oYXZlX2RlY2xfZ2V0bG9naW4iID0geHllczsgdGhl biA6DQogIGFjX2hhdmVfZGVjbD0xDQplbHNlDQogIGFjX2hhdmVfZGVjbD0wDQpmaQ0KDQpjYXQg Pj5jb25mZGVmcy5oIDw8X0FDRU9GDQojZGVmaW5lIEhBVkVfREVDTF9HRVRMT0dJTiAkYWNfaGF2 ZV9kZWNsDQpfQUNFT0YNCg0KYWNfZm5fY19jaGVja19kZWNsICIkTElORU5PIiAiZ2V0dWlkIiAi YWNfY3ZfaGF2ZV9kZWNsX2dldHVpZCIgIiRhY19pbmNsdWRlc19kZWZhdWx0Ig0KaWYgdGVzdCAi eCRhY19jdl9oYXZlX2RlY2xfZ2V0dWlkIiA9IHh5ZXM7IHRoZW4gOg0KICBhY19oYXZlX2RlY2w9 MQ0KZWxzZQ0KICBhY19oYXZlX2RlY2w9MA0KZmkNCg0KY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VP Rg0KI2RlZmluZSBIQVZFX0RFQ0xfR0VUVUlEICRhY19oYXZlX2RlY2wNCl9BQ0VPRg0KDQoNCg0K DQoNCiAgaGVhZGVycz0nDQojaW5jbHVkZSA8c3lzL3R5cGVzLmg+DQoNCiNpbmNsdWRlIDx1bmlz dGQuaD4NCg0KI2lmIEhBVkVfR1JQX0gNCiMgaW5jbHVkZSA8Z3JwLmg+DQojZW5kaWYNCg0KI2lm IEhBVkVfUFdEX0gNCiMgaW5jbHVkZSA8cHdkLmg+DQojZW5kaWYNCicNCiAgYWNfZm5fY19jaGVj a19kZWNsICIkTElORU5PIiAiZ2V0Z3JnaWQiICJhY19jdl9oYXZlX2RlY2xfZ2V0Z3JnaWQiICIk aGVhZGVycw0KIg0KaWYgdGVzdCAieCRhY19jdl9oYXZlX2RlY2xfZ2V0Z3JnaWQiID0geHllczsg dGhlbiA6DQogIGFjX2hhdmVfZGVjbD0xDQplbHNlDQogIGFjX2hhdmVfZGVjbD0wDQpmaQ0KDQpj YXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GDQojZGVmaW5lIEhBVkVfREVDTF9HRVRHUkdJRCAkYWNf aGF2ZV9kZWNsDQpfQUNFT0YNCmFjX2ZuX2NfY2hlY2tfZGVjbCAiJExJTkVOTyIgImdldHB3dWlk IiAiYWNfY3ZfaGF2ZV9kZWNsX2dldHB3dWlkIiAiJGhlYWRlcnMNCiINCmlmIHRlc3QgIngkYWNf Y3ZfaGF2ZV9kZWNsX2dldHB3dWlkIiA9IHh5ZXM7IHRoZW4gOg0KICBhY19oYXZlX2RlY2w9MQ0K ZWxzZQ0KICBhY19oYXZlX2RlY2w9MA0KZmkNCg0KY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRg0K I2RlZmluZSBIQVZFX0RFQ0xfR0VUUFdVSUQgJGFjX2hhdmVfZGVjbA0KX0FDRU9GDQphY19mbl9j X2NoZWNrX2RlY2wgIiRMSU5FTk8iICJ0dHluYW1lIiAiYWNfY3ZfaGF2ZV9kZWNsX3R0eW5hbWUi ICIkaGVhZGVycw0KIg0KaWYgdGVzdCAieCRhY19jdl9oYXZlX2RlY2xfdHR5bmFtZSIgPSB4eWVz OyB0aGVuIDoNCiAgYWNfaGF2ZV9kZWNsPTENCmVsc2UNCiAgYWNfaGF2ZV9kZWNsPTANCmZpDQoN CmNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YNCiNkZWZpbmUgSEFWRV9ERUNMX1RUWU5BTUUgJGFj X2hhdmVfZGVjbA0KX0FDRU9GDQoNCg0KDQoNCg0KDQoNCg0KDQokYXNfZWNobyAiI2RlZmluZSBQ UkVGRVJfTk9OUkVFTlRSQU5UX0VVSURBQ0NFU1MgMSIgPj5jb25mZGVmcy5oDQoNCg0KDQoNCiAg Y2FzZSAiICRMSUJPQkpTICIgaW4NCiAgKiIgZXVpZGFjY2Vzcy1zdGF0LiRhY19vYmpleHQgIiog KSA7Ow0KICAqKSBMSUJPQkpTPSIkTElCT0JKUyBldWlkYWNjZXNzLXN0YXQuJGFjX29iamV4dCIN CiA7Ow0KZXNhYw0KDQoNCg0KDQogIGNhc2UgIiAkTElCT0JKUyAiIGluDQogICoiIGZkLXJlb3Bl bi4kYWNfb2JqZXh0ICIqICkgOzsNCiAgKikgTElCT0JKUz0iJExJQk9CSlMgZmQtcmVvcGVuLiRh Y19vYmpleHQiDQogOzsNCmVzYWMNCg0KDQoNCiAgIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLXhh dHRyIHdhcyBnaXZlbi4NCmlmIHRlc3QgIiR7ZW5hYmxlX3hhdHRyK3NldH0iID0gc2V0OyB0aGVu IDoNCiAgZW5hYmxldmFsPSRlbmFibGVfeGF0dHI7IHVzZV94YXR0cj0kZW5hYmxldmFsDQplbHNl DQogIHVzZV94YXR0cj15ZXMNCmZpDQoNCg0KICBMSUJfWEFUVFI9DQoNCg0KICBpZiB0ZXN0ICIk dXNlX3hhdHRyIiA9ICJ5ZXMiOyB0aGVuDQogICAgZm9yIGFjX2hlYWRlciBpbiBhdHRyL2Vycm9y X2NvbnRleHQuaCBhdHRyL2xpYmF0dHIuaA0KZG8gOg0KICBhc19hY19IZWFkZXI9YCRhc19lY2hv ICJhY19jdl9oZWFkZXJfJGFjX2hlYWRlciIgfCAkYXNfdHJfc2hgDQphY19mbl9jX2NoZWNrX2hl YWRlcl9tb25ncmVsICIkTElORU5PIiAiJGFjX2hlYWRlciIgIiRhc19hY19IZWFkZXIiICIkYWNf aW5jbHVkZXNfZGVmYXVsdCINCmlmIGV2YWwgdGVzdCBcInhcJCIkYXNfYWNfSGVhZGVyIlwiID0g eCJ5ZXMiOyB0aGVuIDoNCiAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRg0KI2RlZmluZSBgJGFz X2VjaG8gIkhBVkVfJGFjX2hlYWRlciIgfCAkYXNfdHJfY3BwYCAxDQpfQUNFT0YNCg0KZmkNCg0K ZG9uZQ0KDQogICAgdXNlX3hhdHRyPW5vDQogICAgaWYgdGVzdCAkYWNfY3ZfaGVhZGVyX2F0dHJf bGliYXR0cl9oID0geWVzIFwNCiAgICAgICAgJiYgdGVzdCAkYWNfY3ZfaGVhZGVyX2F0dHJfZXJy b3JfY29udGV4dF9oID0geWVzOyB0aGVuDQogICAgICB4YXR0cl9zYXZlZF9MSUJTPSRMSUJTDQog ICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZv ciBsaWJyYXJ5IGNvbnRhaW5pbmcgYXR0cl9jb3B5X2ZpbGUiID4mNQ0KJGFzX2VjaG9fbiAiY2hl Y2tpbmcgZm9yIGxpYnJhcnkgY29udGFpbmluZyBhdHRyX2NvcHlfZmlsZS4uLiAiID4mNjsgfQ0K aWYgJHthY19jdl9zZWFyY2hfYXR0cl9jb3B5X2ZpbGUrOn0gZmFsc2U7IHRoZW4gOg0KICAkYXNf ZWNob19uICIoY2FjaGVkKSAiID4mNg0KZWxzZQ0KICBhY19mdW5jX3NlYXJjaF9zYXZlX0xJQlM9 JExJQlMNCmNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQNCi8qIGVu ZCBjb25mZGVmcy5oLiAgKi8NCg0KLyogT3ZlcnJpZGUgYW55IEdDQyBpbnRlcm5hbCBwcm90b3R5 cGUgdG8gYXZvaWQgYW4gZXJyb3IuDQogICBVc2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRj aCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBHQ0MNCiAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3Vt ZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovDQojaWZkZWYgX19jcGx1c3BsdXMN CmV4dGVybiAiQyINCiNlbmRpZg0KY2hhciBhdHRyX2NvcHlfZmlsZSAoKTsNCmludA0KbWFpbiAo KQ0Kew0KcmV0dXJuIGF0dHJfY29weV9maWxlICgpOw0KICA7DQogIHJldHVybiAwOw0KfQ0KX0FD RU9GDQpmb3IgYWNfbGliIGluICcnIGF0dHI7IGRvDQogIGlmIHRlc3QgLXogIiRhY19saWIiOyB0 aGVuDQogICAgYWNfcmVzPSJub25lIHJlcXVpcmVkIg0KICBlbHNlDQogICAgYWNfcmVzPS1sJGFj X2xpYg0KICAgIExJQlM9Ii1sJGFjX2xpYiAgJGFjX2Z1bmNfc2VhcmNoX3NhdmVfTElCUyINCiAg ZmkNCiAgaWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOg0KICBhY19jdl9zZWFy Y2hfYXR0cl9jb3B5X2ZpbGU9JGFjX3Jlcw0KZmkNCnJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNv bmZ0ZXN0LiRhY19vYmpleHQgXA0KICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dA0KICBpZiAke2FjX2N2 X3NlYXJjaF9hdHRyX2NvcHlfZmlsZSs6fSBmYWxzZTsgdGhlbiA6DQogIGJyZWFrDQpmaQ0KZG9u ZQ0KaWYgJHthY19jdl9zZWFyY2hfYXR0cl9jb3B5X2ZpbGUrOn0gZmFsc2U7IHRoZW4gOg0KDQpl bHNlDQogIGFjX2N2X3NlYXJjaF9hdHRyX2NvcHlfZmlsZT1ubw0KZmkNCnJtIGNvbmZ0ZXN0LiRh Y19leHQNCkxJQlM9JGFjX2Z1bmNfc2VhcmNoX3NhdmVfTElCUw0KZmkNCnsgJGFzX2VjaG8gIiRh c19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3Zfc2VhcmNoX2F0dHJfY29w eV9maWxlIiA+JjUNCiRhc19lY2hvICIkYWNfY3Zfc2VhcmNoX2F0dHJfY29weV9maWxlIiA+JjY7 IH0NCmFjX3Jlcz0kYWNfY3Zfc2VhcmNoX2F0dHJfY29weV9maWxlDQppZiB0ZXN0ICIkYWNfcmVz IiAhPSBubzsgdGhlbiA6DQogIHRlc3QgIiRhY19yZXMiID0gIm5vbmUgcmVxdWlyZWQiIHx8IExJ QlM9IiRhY19yZXMgJExJQlMiDQogIHRlc3QgIiRhY19jdl9zZWFyY2hfYXR0cl9jb3B5X2ZpbGUi ID0gIm5vbmUgcmVxdWlyZWQiIHx8DQogICAgICAgICAgICAgICAgICAgICAgICBMSUJfWEFUVFI9 JGFjX2N2X3NlYXJjaF9hdHRyX2NvcHlfZmlsZQ0KZmkNCg0KICAgICAgZm9yIGFjX2Z1bmMgaW4g YXR0cl9jb3B5X2ZpbGUNCmRvIDoNCiAgYWNfZm5fY19jaGVja19mdW5jICIkTElORU5PIiAiYXR0 cl9jb3B5X2ZpbGUiICJhY19jdl9mdW5jX2F0dHJfY29weV9maWxlIg0KaWYgdGVzdCAieCRhY19j dl9mdW5jX2F0dHJfY29weV9maWxlIiA9IHh5ZXM7IHRoZW4gOg0KICBjYXQgPj5jb25mZGVmcy5o IDw8X0FDRU9GDQojZGVmaW5lIEhBVkVfQVRUUl9DT1BZX0ZJTEUgMQ0KX0FDRU9GDQoNCmZpDQpk b25lDQoNCiAgICAgIExJQlM9JHhhdHRyX3NhdmVkX0xJQlMNCiAgICAgIGlmIHRlc3QgJGFjX2N2 X2Z1bmNfYXR0cl9jb3B5X2ZpbGUgPSB5ZXM7IHRoZW4NCiAgICAgICAgdXNlX3hhdHRyPXllcw0K ICAgICAgZmkNCiAgICBmaQ0KICAgIGlmIHRlc3QgJHVzZV94YXR0ciA9IG5vOyB0aGVuDQogICAg ICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6IGxpYmF0 dHIgZGV2ZWxvcG1lbnQgbGlicmFyeSB3YXMgbm90IGZvdW5kIG9yIG5vdCB1c2FibGUuIiA+JjUN CiRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IGxpYmF0dHIgZGV2ZWxvcG1lbnQgbGlicmFyeSB3 YXMgbm90IGZvdW5kIG9yIG5vdCB1c2FibGUuIiA+JjI7fQ0KICAgICAgeyAkYXNfZWNobyAiJGFz X21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiBHTlUgY29yZXV0aWxzIHdpbGwgYmUg YnVpbHQgd2l0aG91dCB4YXR0ciBzdXBwb3J0LiIgPiY1DQokYXNfZWNobyAiJGFzX21lOiBXQVJO SU5HOiBHTlUgY29yZXV0aWxzIHdpbGwgYmUgYnVpbHQgd2l0aG91dCB4YXR0ciBzdXBwb3J0LiIg PiYyO30NCiAgICBmaQ0KICBmaQ0KDQpjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GDQojZGVmaW5l IFVTRV9YQVRUUiBgdGVzdCAkdXNlX3hhdHRyICE9IHllczsgZWNobyAkP2ANCl9BQ0VPRg0KDQoN Cg0KDQogIGNhc2UgIiAkTElCT0JKUyAiIGluDQogICoiIHhmdHMuJGFjX29iamV4dCAiKiApIDs7 DQogICopIExJQk9CSlM9IiRMSUJPQkpTIHhmdHMuJGFjX29iamV4dCINCiA7Ow0KZXNhYw0KDQoN CiAgICA6DQoNCnsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tp bmcgZm9yIGlubGluZSIgPiY1DQokYXNfZWNob19uICJjaGVja2luZyBmb3IgaW5saW5lLi4uICIg PiY2OyB9DQppZiAke2FjX2N2X2NfaW5saW5lKzp9IGZhbHNlOyB0aGVuIDoNCiAgJGFzX2VjaG9f biAiKGNhY2hlZCkgIiA+JjYNCmVsc2UNCiAgYWNfY3ZfY19pbmxpbmU9bm8NCmZvciBhY19rdyBp biBpbmxpbmUgX19pbmxpbmVfXyBfX2lubGluZTsgZG8NCiAgY2F0IGNvbmZkZWZzLmggLSA8PF9B Q0VPRiA+Y29uZnRlc3QuJGFjX2V4dA0KLyogZW5kIGNvbmZkZWZzLmguICAqLw0KI2lmbmRlZiBf X2NwbHVzcGx1cw0KdHlwZWRlZiBpbnQgZm9vX3Q7DQpzdGF0aWMgJGFjX2t3IGZvb190IHN0YXRp Y19mb28gKCkge3JldHVybiAwOyB9DQokYWNfa3cgZm9vX3QgZm9vICgpIHtyZXR1cm4gMDsgfQ0K I2VuZGlmDQoNCl9BQ0VPRg0KaWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4g Og0KICBhY19jdl9jX2lubGluZT0kYWNfa3cNCmZpDQpybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBj b25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQNCiAgdGVzdCAiJGFjX2N2X2NfaW5s aW5lIiAhPSBubyAmJiBicmVhaw0KZG9uZQ0KDQpmaQ0KeyAkYXNfZWNobyAiJGFzX21lOiR7YXNf bGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9jX2lubGluZSIgPiY1DQokYXNfZWNobyAi JGFjX2N2X2NfaW5saW5lIiA+JjY7IH0NCg0KY2FzZSAkYWNfY3ZfY19pbmxpbmUgaW4NCiAgaW5s aW5lIHwgeWVzKSA7Ow0KICAqKQ0KICAgIGNhc2UgJGFjX2N2X2NfaW5saW5lIGluDQogICAgICBu bykgYWNfdmFsPTs7DQogICAgICAqKSBhY192YWw9JGFjX2N2X2NfaW5saW5lOzsNCiAgICBlc2Fj DQogICAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRg0KI2lmbmRlZiBfX2NwbHVzcGx1cw0KI2Rl ZmluZSBpbmxpbmUgJGFjX3ZhbA0KI2VuZGlmDQpfQUNFT0YNCiAgICA7Ow0KZXNhYw0KDQoNCg0K ICBjYXNlICIgJExJQk9CSlMgIiBpbg0KICAqIiBzdHJpbnRjbXAuJGFjX29iamV4dCAiKiApIDs7 DQogICopIExJQk9CSlM9IiRMSUJPQkpTIHN0cmludGNtcC4kYWNfb2JqZXh0Ig0KIDs7DQplc2Fj DQoNCg0KDQoNCg0KDQogIGNhc2UgIiAkTElCT0JKUyAiIGluDQogICoiIHN0cm51bWNtcC4kYWNf b2JqZXh0ICIqICkgOzsNCiAgKikgTElCT0JKUz0iJExJQk9CSlMgc3RybnVtY21wLiRhY19vYmpl eHQiDQogOzsNCmVzYWMNCg0KDQoNCg0KDQogICMgZ251bGliIHNldHRpbmdzLg0KDQoNCiAgIyBX ZSBkb24ndCB1c2UgYy1zdGFjay5jLg0KICAjIEFDX1JFUVVJUkUoW2dsX0NfU1RBQ0tdKQ0KDQog ICMgSW52b2tlIG1hY3JvcyBvZiBtb2R1bGVzIHRoYXQgbWF5IG1pZ3JhdGUgaW50byBnbnVsaWIu DQogICMgVGhlcmUncyBubyBuZWVkIHRvIGxpc3QgZ251bGliIG1vZHVsZXMgaGVyZSwgc2luY2Ug Z251bGliLXRvb2wNCiAgIyBoYW5kbGVzIHRoYXQ7IHNlZSAuLi9ib290c3RyYXAuY29uZi4NCg0K DQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoN Cg0KDQoNCg0KDQoNCg0KSEVMUDJNQU49JHtIRUxQMk1BTi0iJHthbV9taXNzaW5nX3J1bn1oZWxw Mm1hbiJ9DQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCiAgYWNfZm5fY19jaGVja19tZW1iZXIg IiRMSU5FTk8iICJzdHJ1Y3Qgc3RhdCIgInN0X2F1dGhvciIgImFjX2N2X21lbWJlcl9zdHJ1Y3Rf c3RhdF9zdF9hdXRob3IiICIkYWNfaW5jbHVkZXNfZGVmYXVsdA0KI2luY2x1ZGUgPHN5cy9zdGF0 Lmg+DQoNCiINCmlmIHRlc3QgIngkYWNfY3ZfbWVtYmVyX3N0cnVjdF9zdGF0X3N0X2F1dGhvciIg PSB4eWVzOyB0aGVuIDoNCg0KY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRg0KI2RlZmluZSBIQVZF X1NUUlVDVF9TVEFUX1NUX0FVVEhPUiAxDQpfQUNFT0YNCg0KDQpmaQ0KDQoNCg0KDQoNCg0KDQoN Cg0KDQogIGFjX2ZuX2NfY2hlY2tfdHlwZSAiJExJTkVOTyIgImlub190IiAiYWNfY3ZfdHlwZV9p bm9fdCIgIiRhY19pbmNsdWRlc19kZWZhdWx0Ig0KaWYgdGVzdCAieCRhY19jdl90eXBlX2lub190 IiA9IHh5ZXM7IHRoZW4gOg0KDQplbHNlDQoNCmNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YNCiNk ZWZpbmUgaW5vX3QgdW5zaWduZWQgbG9uZyBpbnQNCl9BQ0VPRg0KDQpmaQ0KDQoNCiAgICAgIGFj X2ZuX2NfY2hlY2tfdHlwZSAiJExJTkVOTyIgIm1ham9yX3QiICJhY19jdl90eXBlX21ham9yX3Qi ICIkYWNfaW5jbHVkZXNfZGVmYXVsdCINCmlmIHRlc3QgIngkYWNfY3ZfdHlwZV9tYWpvcl90IiA9 IHh5ZXM7IHRoZW4gOg0KDQplbHNlDQoNCmNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YNCiNkZWZp bmUgbWFqb3JfdCB1bnNpZ25lZCBpbnQNCl9BQ0VPRg0KDQpmaQ0KDQogIGFjX2ZuX2NfY2hlY2tf dHlwZSAiJExJTkVOTyIgIm1pbm9yX3QiICJhY19jdl90eXBlX21pbm9yX3QiICIkYWNfaW5jbHVk ZXNfZGVmYXVsdCINCmlmIHRlc3QgIngkYWNfY3ZfdHlwZV9taW5vcl90IiA9IHh5ZXM7IHRoZW4g Og0KDQplbHNlDQoNCmNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YNCiNkZWZpbmUgbWlub3JfdCB1 bnNpZ25lZCBpbnQNCl9BQ0VPRg0KDQpmaQ0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCiAgIyBCeSBk ZWZhdWx0LCBhcmdtYXRjaCBzaG91bGQgZmFpbCBjYWxsaW5nIHVzYWdlIChFWElUX0ZBSUxVUkUp Lg0KDQokYXNfZWNobyAiI2RlZmluZSBBUkdNQVRDSF9ESUUgdXNhZ2UgKEVYSVRfRkFJTFVSRSki ID4+Y29uZmRlZnMuaA0KDQoNCiRhc19lY2hvICIjZGVmaW5lIEFSR01BVENIX0RJRV9ERUNMIHZv aWQgdXNhZ2UgKGludCBfZSkiID4+Y29uZmRlZnMuaA0KDQoNCiAgIyB1c2VkIGJ5IGxzDQoNCiAg IyB1c2VkIGJ5IHNocmVkDQoNCg0KICAjIFVzZWQgYnkgaW5zdGFsbC5jLg0KICBjb3JldXRpbHNf c2F2ZWRfbGlicz0kTElCUw0KICAgIExJQlM9IiRMSUJTICRMSUJfU0VMSU5VWCINCiAgICBmb3Ig YWNfZnVuYyBpbiBtYXRjaHBhdGhjb25faW5pdF9wcmVmaXgNCmRvIDoNCiAgYWNfZm5fY19jaGVj a19mdW5jICIkTElORU5PIiAibWF0Y2hwYXRoY29uX2luaXRfcHJlZml4IiAiYWNfY3ZfZnVuY19t YXRjaHBhdGhjb25faW5pdF9wcmVmaXgiDQppZiB0ZXN0ICJ4JGFjX2N2X2Z1bmNfbWF0Y2hwYXRo Y29uX2luaXRfcHJlZml4IiA9IHh5ZXM7IHRoZW4gOg0KICBjYXQgPj5jb25mZGVmcy5oIDw8X0FD RU9GDQojZGVmaW5lIEhBVkVfTUFUQ0hQQVRIQ09OX0lOSVRfUFJFRklYIDENCl9BQ0VPRg0KDQpl bHNlDQoNCiAgICAgIGNhc2UgIiRhY19jdl9zZWFyY2hfc2V0ZmlsZWNvbjokYWNfY3ZfaGVhZGVy X3NlbGludXhfc2VsaW51eF9oIiBpbg0KICAgICAgICBubzoqKSAjIFNFTGludXggZGlzYWJsZWQN CiAgICAgICAgICA7Ow0KICAgICAgICAqOm5vKSAjIFNFTGludXggZGlzYWJsZWQNCiAgICAgICAg ICA7Ow0KICAgICAgICAqKQ0KICAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8t JExJTkVOT306IFdBUk5JTkc6IFNFTGludXggZW5hYmxlZCwgYnV0IG1hdGNocGF0aGNvbl9pbml0 X3ByZWZpeCBub3QgZm91bmQiID4mNQ0KJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogU0VMaW51 eCBlbmFibGVkLCBidXQgbWF0Y2hwYXRoY29uX2luaXRfcHJlZml4IG5vdCBmb3VuZCIgPiYyO30N CiAgICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5H OiBUaGUgaW5zdGFsbCB1dGlsaXR5IG1heSBydW4gc2xvd2x5IiA+JjUNCiRhc19lY2hvICIkYXNf bWU6IFdBUk5JTkc6IFRoZSBpbnN0YWxsIHV0aWxpdHkgbWF5IHJ1biBzbG93bHkiID4mMjt9DQog ICAgICBlc2FjDQoNCmZpDQpkb25lDQoNCiAgTElCUz0kY29yZXV0aWxzX3NhdmVkX2xpYnMNCg0K ICAjIFVzZWQgYnkgc29ydC5jLg0KDQoNCiAgIyBVc2VkIGJ5IHRhaWwuYy4NCiAgZm9yIGFjX2Z1 bmMgaW4gaW5vdGlmeV9pbml0DQpkbyA6DQogIGFjX2ZuX2NfY2hlY2tfZnVuYyAiJExJTkVOTyIg Imlub3RpZnlfaW5pdCIgImFjX2N2X2Z1bmNfaW5vdGlmeV9pbml0Ig0KaWYgdGVzdCAieCRhY19j dl9mdW5jX2lub3RpZnlfaW5pdCIgPSB4eWVzOyB0aGVuIDoNCiAgY2F0ID4+Y29uZmRlZnMuaCA8 PF9BQ0VPRg0KI2RlZmluZSBIQVZFX0lOT1RJRllfSU5JVCAxDQpfQUNFT0YNCg0KJGFzX2VjaG8g IiNkZWZpbmUgSEFWRV9JTk9USUZZIDEiID4+Y29uZmRlZnMuaA0KDQpmaQ0KZG9uZQ0KDQoNCg0K DQoNCg0KDQoNCg0KICAgICAgdGVzdCAkYWNfY3ZfaGVhZGVyX3N5c19wYXJhbV9oID0geWVzICYm DQogIHRlc3QgJGFjX2N2X2hlYWRlcl9zeXNfbW91bnRfaCA9IHllcyAmJg0KICBmb3IgYWNfaGVh ZGVyIGluIG5mcy92ZnMuaA0KZG8gOg0KICBhY19mbl9jX2NoZWNrX2hlYWRlcl9tb25ncmVsICIk TElORU5PIiAibmZzL3Zmcy5oIiAiYWNfY3ZfaGVhZGVyX25mc192ZnNfaCIgIiRhY19pbmNsdWRl c19kZWZhdWx0Ig0KaWYgdGVzdCAieCRhY19jdl9oZWFkZXJfbmZzX3Zmc19oIiA9IHh5ZXM7IHRo ZW4gOg0KICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GDQojZGVmaW5lIEhBVkVfTkZTX1ZGU19I IDENCl9BQ0VPRg0KIGZvciBhY19oZWFkZXIgaW4gbmZzL25mc19jbGllbnQuaA0KZG8gOg0KICBh Y19mbl9jX2NoZWNrX2hlYWRlcl9tb25ncmVsICIkTElORU5PIiAibmZzL25mc19jbGllbnQuaCIg ImFjX2N2X2hlYWRlcl9uZnNfbmZzX2NsaWVudF9oIiAiJGFjX2luY2x1ZGVzX2RlZmF1bHQiDQpp ZiB0ZXN0ICJ4JGFjX2N2X2hlYWRlcl9uZnNfbmZzX2NsaWVudF9oIiA9IHh5ZXM7IHRoZW4gOg0K ICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GDQojZGVmaW5lIEhBVkVfTkZTX05GU19DTElFTlRf SCAxDQpfQUNFT0YNCg0KZmkNCg0KZG9uZQ0KDQpmaQ0KDQpkb25lDQoNCg0KICBzdGF0dmZzX2lu Y2x1ZGVzPSJcDQokYWNfaW5jbHVkZXNfZGVmYXVsdA0KI2luY2x1ZGUgPHN5cy9zdGF0dmZzLmg+ DQoiDQogIHN0YXRmc19pbmNsdWRlcz0iXA0KJGFjX2luY2x1ZGVzX2RlZmF1bHQNCiNpZiBIQVZF X1NZU19WRlNfSA0KIyBpbmNsdWRlIDxzeXMvdmZzLmg+DQojZWxpZiBIQVZFX1NZU19NT1VOVF9I ICYmIEhBVkVfU1lTX1BBUkFNX0gNCiMgaW5jbHVkZSA8c3lzL3BhcmFtLmg+DQojIGluY2x1ZGUg PHN5cy9tb3VudC5oPg0KIyBpZiBIQVZFX05FVElORVRfSU5fSCAmJiBIQVZFX05GU19ORlNfQ0xO VF9IICYmIEhBVkVfTkZTX1ZGU19IDQojICBpbmNsdWRlIDxuZXRpbmV0L2luLmg+DQojICBpbmNs dWRlIDxuZnMvbmZzX2NsbnQuaD4NCiMgIGluY2x1ZGUgPG5mcy92ZnMuaD4NCiMgZW5kaWYNCiNl bGlmIEhBVkVfT1NfSA0KIyBpbmNsdWRlIDxmc19pbmZvLmg+DQojZW5kaWYNCiINCiAgICAgIGlm IHRlc3QgIiRmdV9jdl9zeXNfc3RhdF9zdGF0dmZzIiA9IHllcyAmJg0KICAgICB7IGFjX2ZuX2Nf Y2hlY2tfbWVtYmVyICIkTElORU5PIiAic3RydWN0IHN0YXR2ZnMiICJmX2Jhc2V0eXBlIiAiYWNf Y3ZfbWVtYmVyX3N0cnVjdF9zdGF0dmZzX2ZfYmFzZXR5cGUiICIkc3RhdHZmc19pbmNsdWRlcw0K Ig0KaWYgdGVzdCAieCRhY19jdl9tZW1iZXJfc3RydWN0X3N0YXR2ZnNfZl9iYXNldHlwZSIgPSB4 eWVzOyB0aGVuIDoNCg0KY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRg0KI2RlZmluZSBIQVZFX1NU UlVDVF9TVEFUVkZTX0ZfQkFTRVRZUEUgMQ0KX0FDRU9GDQoNCg0KZmkNCg0KICAgICAgIHRlc3Qg JGFjX2N2X21lbWJlcl9zdHJ1Y3Rfc3RhdHZmc19mX2Jhc2V0eXBlID0geWVzIHx8DQogICAgICAg eyBhY19mbl9jX2NoZWNrX21lbWJlciAiJExJTkVOTyIgInN0cnVjdCBzdGF0dmZzIiAiZl9mc3R5 cGVuYW1lIiAiYWNfY3ZfbWVtYmVyX3N0cnVjdF9zdGF0dmZzX2ZfZnN0eXBlbmFtZSIgIiRzdGF0 dmZzX2luY2x1ZGVzDQoiDQppZiB0ZXN0ICJ4JGFjX2N2X21lbWJlcl9zdHJ1Y3Rfc3RhdHZmc19m X2ZzdHlwZW5hbWUiID0geHllczsgdGhlbiA6DQoNCmNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YN CiNkZWZpbmUgSEFWRV9TVFJVQ1RfU1RBVFZGU19GX0ZTVFlQRU5BTUUgMQ0KX0FDRU9GDQoNCg0K ZmkNCg0KICAgICAgICAgdGVzdCAkYWNfY3ZfbWVtYmVyX3N0cnVjdF9zdGF0dmZzX2ZfZnN0eXBl bmFtZSA9IHllcyB8fA0KICAgICAgICAgeyB0ZXN0ICRhY19jdl9tZW1iZXJfc3RydWN0X3N0YXRm c19mX2ZzdHlwZW5hbWUgIT0geWVzICYmDQogICAgICAgICAgIHsgYWNfZm5fY19jaGVja19tZW1i ZXIgIiRMSU5FTk8iICJzdHJ1Y3Qgc3RhdHZmcyIgImZfdHlwZSIgImFjX2N2X21lbWJlcl9zdHJ1 Y3Rfc3RhdHZmc19mX3R5cGUiICIkc3RhdHZmc19pbmNsdWRlcw0KIg0KaWYgdGVzdCAieCRhY19j dl9tZW1iZXJfc3RydWN0X3N0YXR2ZnNfZl90eXBlIiA9IHh5ZXM7IHRoZW4gOg0KDQpjYXQgPj5j b25mZGVmcy5oIDw8X0FDRU9GDQojZGVmaW5lIEhBVkVfU1RSVUNUX1NUQVRWRlNfRl9UWVBFIDEN Cl9BQ0VPRg0KDQoNCmZpDQoNCiAgICAgICAgICAgICB0ZXN0ICRhY19jdl9tZW1iZXJfc3RydWN0 X3N0YXR2ZnNfZl90eXBlID0geWVzOyB9OyB9OyB9OyB9DQogIHRoZW4NCiAgICBhY19mbl9jX2No ZWNrX21lbWJlciAiJExJTkVOTyIgInN0cnVjdCBzdGF0dmZzIiAiZl9uYW1lbWF4IiAiYWNfY3Zf bWVtYmVyX3N0cnVjdF9zdGF0dmZzX2ZfbmFtZW1heCIgIiRzdGF0dmZzX2luY2x1ZGVzDQoiDQpp ZiB0ZXN0ICJ4JGFjX2N2X21lbWJlcl9zdHJ1Y3Rfc3RhdHZmc19mX25hbWVtYXgiID0geHllczsg dGhlbiA6DQoNCmNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YNCiNkZWZpbmUgSEFWRV9TVFJVQ1Rf U1RBVFZGU19GX05BTUVNQVggMQ0KX0FDRU9GDQoNCg0KZmkNCg0KICAgIGNhdCBjb25mZGVmcy5o IC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQNCi8qIGVuZCBjb25mZGVmcy5oLiAgKi8NCiRz dGF0dmZzX2luY2x1ZGVzDQppbnQNCm1haW4gKCkNCnsNCnN0YXRpYyBzdGF0dmZzIHM7DQogICAg ICAgICAgcmV0dXJuIChzLnNfZnNpZCBeIDApID09IDA7DQogIDsNCiAgcmV0dXJuIDA7DQp9DQpf QUNFT0YNCmlmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoNCg0KJGFzX2Vj aG8gIiNkZWZpbmUgU1RSVUNUX1NUQVRWRlNfRl9GU0lEX0lTX0lOVEVHRVIgMSIgPj5jb25mZGVm cy5oDQoNCmZpDQpybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNv bmZ0ZXN0LiRhY19leHQNCiAgZWxzZQ0KICAgIGFjX2ZuX2NfY2hlY2tfbWVtYmVyICIkTElORU5P IiAic3RydWN0IHN0YXRmcyIgImZfbmFtZWxlbiIgImFjX2N2X21lbWJlcl9zdHJ1Y3Rfc3RhdGZz X2ZfbmFtZWxlbiIgIiRzdGF0ZnNfaW5jbHVkZXMNCiINCmlmIHRlc3QgIngkYWNfY3ZfbWVtYmVy X3N0cnVjdF9zdGF0ZnNfZl9uYW1lbGVuIiA9IHh5ZXM7IHRoZW4gOg0KDQpjYXQgPj5jb25mZGVm cy5oIDw8X0FDRU9GDQojZGVmaW5lIEhBVkVfU1RSVUNUX1NUQVRGU19GX05BTUVMRU4gMQ0KX0FD RU9GDQoNCg0KZmkNCmFjX2ZuX2NfY2hlY2tfbWVtYmVyICIkTElORU5PIiAic3RydWN0IHN0YXRm cyIgImZfdHlwZSIgImFjX2N2X21lbWJlcl9zdHJ1Y3Rfc3RhdGZzX2ZfdHlwZSIgIiRzdGF0ZnNf aW5jbHVkZXMNCiINCmlmIHRlc3QgIngkYWNfY3ZfbWVtYmVyX3N0cnVjdF9zdGF0ZnNfZl90eXBl IiA9IHh5ZXM7IHRoZW4gOg0KDQpjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GDQojZGVmaW5lIEhB VkVfU1RSVUNUX1NUQVRGU19GX1RZUEUgMQ0KX0FDRU9GDQoNCg0KZmkNCg0KICAgIGlmIHRlc3Qg JGFjX2N2X2hlYWRlcl9PU19oICE9IHllczsgdGhlbg0KICAgICAgY2F0IGNvbmZkZWZzLmggLSA8 PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dA0KLyogZW5kIGNvbmZkZWZzLmguICAqLw0KJHN0YXRm c19pbmNsdWRlcw0KaW50DQptYWluICgpDQp7DQpzdGF0aWMgc3RhdGZzIHM7DQogICAgICAgICAg ICByZXR1cm4gKHMuc19mc2lkIF4gMCkgPT0gMDsNCiAgOw0KICByZXR1cm4gMDsNCn0NCl9BQ0VP Rg0KaWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOg0KDQokYXNfZWNobyAi I2RlZmluZSBTVFJVQ1RfU1RBVEZTX0ZfRlNJRF9JU19JTlRFR0VSIDEiID4+Y29uZmRlZnMuaA0K DQpmaQ0Kcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVz dC4kYWNfZXh0DQogICAgZmkNCiAgZmkNCg0KDQogICMgZm9yIGRkLmMgYW5kIHNocmVkLmMNCiAg Y29yZXV0aWxzX3NhdmVkX2xpYnM9JExJQlMNCiAgICBMSUJfRkRBVEFTWU5DPQ0KICAgIHsgJGFz X2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIGxpYnJhcnkg Y29udGFpbmluZyBmZGF0YXN5bmMiID4mNQ0KJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIGxpYnJh cnkgY29udGFpbmluZyBmZGF0YXN5bmMuLi4gIiA+JjY7IH0NCmlmICR7YWNfY3Zfc2VhcmNoX2Zk YXRhc3luYys6fSBmYWxzZTsgdGhlbiA6DQogICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2DQpl bHNlDQogIGFjX2Z1bmNfc2VhcmNoX3NhdmVfTElCUz0kTElCUw0KY2F0IGNvbmZkZWZzLmggLSA8 PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dA0KLyogZW5kIGNvbmZkZWZzLmguICAqLw0KDQovKiBP dmVycmlkZSBhbnkgR0NDIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4NCiAg IFVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIEdD Qw0KICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxs IGFwcGx5LiAgKi8NCiNpZmRlZiBfX2NwbHVzcGx1cw0KZXh0ZXJuICJDIg0KI2VuZGlmDQpjaGFy IGZkYXRhc3luYyAoKTsNCmludA0KbWFpbiAoKQ0Kew0KcmV0dXJuIGZkYXRhc3luYyAoKTsNCiAg Ow0KICByZXR1cm4gMDsNCn0NCl9BQ0VPRg0KZm9yIGFjX2xpYiBpbiAnJyBydCBwb3NpeDQ7IGRv DQogIGlmIHRlc3QgLXogIiRhY19saWIiOyB0aGVuDQogICAgYWNfcmVzPSJub25lIHJlcXVpcmVk Ig0KICBlbHNlDQogICAgYWNfcmVzPS1sJGFjX2xpYg0KICAgIExJQlM9Ii1sJGFjX2xpYiAgJGFj X2Z1bmNfc2VhcmNoX3NhdmVfTElCUyINCiAgZmkNCiAgaWYgYWNfZm5fY190cnlfbGluayAiJExJ TkVOTyI7IHRoZW4gOg0KICBhY19jdl9zZWFyY2hfZmRhdGFzeW5jPSRhY19yZXMNCmZpDQpybSAt ZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwNCiAgICBjb25mdGVzdCRh Y19leGVleHQNCiAgaWYgJHthY19jdl9zZWFyY2hfZmRhdGFzeW5jKzp9IGZhbHNlOyB0aGVuIDoN CiAgYnJlYWsNCmZpDQpkb25lDQppZiAke2FjX2N2X3NlYXJjaF9mZGF0YXN5bmMrOn0gZmFsc2U7 IHRoZW4gOg0KDQplbHNlDQogIGFjX2N2X3NlYXJjaF9mZGF0YXN5bmM9bm8NCmZpDQpybSBjb25m dGVzdC4kYWNfZXh0DQpMSUJTPSRhY19mdW5jX3NlYXJjaF9zYXZlX0xJQlMNCmZpDQp7ICRhc19l Y2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X3NlYXJjaF9m ZGF0YXN5bmMiID4mNQ0KJGFzX2VjaG8gIiRhY19jdl9zZWFyY2hfZmRhdGFzeW5jIiA+JjY7IH0N CmFjX3Jlcz0kYWNfY3Zfc2VhcmNoX2ZkYXRhc3luYw0KaWYgdGVzdCAiJGFjX3JlcyIgIT0gbm87 IHRoZW4gOg0KICB0ZXN0ICIkYWNfcmVzIiA9ICJub25lIHJlcXVpcmVkIiB8fCBMSUJTPSIkYWNf cmVzICRMSUJTIg0KICB0ZXN0ICIkYWNfY3Zfc2VhcmNoX2ZkYXRhc3luYyIgPSAibm9uZSByZXF1 aXJlZCIgfHwNCiAgICAgICAgICAgICAgICAgICAgTElCX0ZEQVRBU1lOQz0kYWNfY3Zfc2VhcmNo X2ZkYXRhc3luYw0KZmkNCg0KDQogICAgZm9yIGFjX2Z1bmMgaW4gZmRhdGFzeW5jDQpkbyA6DQog IGFjX2ZuX2NfY2hlY2tfZnVuYyAiJExJTkVOTyIgImZkYXRhc3luYyIgImFjX2N2X2Z1bmNfZmRh dGFzeW5jIg0KaWYgdGVzdCAieCRhY19jdl9mdW5jX2ZkYXRhc3luYyIgPSB4eWVzOyB0aGVuIDoN CiAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRg0KI2RlZmluZSBIQVZFX0ZEQVRBU1lOQyAxDQpf QUNFT0YNCg0KZmkNCmRvbmUNCg0KICBMSUJTPSRjb3JldXRpbHNfc2F2ZWRfbGlicw0KDQogICMg Q2hlY2sgd2hldGhlciBsaWJjYXAgaXMgdXNhYmxlIC0tIGZvciBscyAtLWNvbG9yIHN1cHBvcnQN CiAgTElCX0NBUD0NCiAgIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLWxpYmNhcCB3YXMgZ2l2ZW4u DQppZiB0ZXN0ICIke2VuYWJsZV9saWJjYXArc2V0fSIgPSBzZXQ7IHRoZW4gOg0KICBlbmFibGV2 YWw9JGVuYWJsZV9saWJjYXA7DQpmaQ0KDQogIGlmIHRlc3QgIlgkZW5hYmxlX2xpYmNhcCIgIT0g IlhubyI7IHRoZW4NCiAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306 IGNoZWNraW5nIGZvciBjYXBfZ2V0X2ZpbGUgaW4gLWxjYXAiID4mNQ0KJGFzX2VjaG9fbiAiY2hl Y2tpbmcgZm9yIGNhcF9nZXRfZmlsZSBpbiAtbGNhcC4uLiAiID4mNjsgfQ0KaWYgJHthY19jdl9s aWJfY2FwX2NhcF9nZXRfZmlsZSs6fSBmYWxzZTsgdGhlbiA6DQogICRhc19lY2hvX24gIihjYWNo ZWQpICIgPiY2DQplbHNlDQogIGFjX2NoZWNrX2xpYl9zYXZlX0xJQlM9JExJQlMNCkxJQlM9Ii1s Y2FwICAkTElCUyINCmNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQN Ci8qIGVuZCBjb25mZGVmcy5oLiAgKi8NCg0KLyogT3ZlcnJpZGUgYW55IEdDQyBpbnRlcm5hbCBw cm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuDQogICBVc2UgY2hhciBiZWNhdXNlIGludCBtaWdo dCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBHQ0MNCiAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRz IGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovDQojaWZkZWYgX19jcGx1 c3BsdXMNCmV4dGVybiAiQyINCiNlbmRpZg0KY2hhciBjYXBfZ2V0X2ZpbGUgKCk7DQppbnQNCm1h aW4gKCkNCnsNCnJldHVybiBjYXBfZ2V0X2ZpbGUgKCk7DQogIDsNCiAgcmV0dXJuIDA7DQp9DQpf QUNFT0YNCmlmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoNCiAgYWNfY3ZfbGli X2NhcF9jYXBfZ2V0X2ZpbGU9eWVzDQplbHNlDQogIGFjX2N2X2xpYl9jYXBfY2FwX2dldF9maWxl PW5vDQpmaQ0Kcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcDQog ICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQNCkxJQlM9JGFjX2NoZWNrX2xp Yl9zYXZlX0xJQlMNCmZpDQp7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306 IHJlc3VsdDogJGFjX2N2X2xpYl9jYXBfY2FwX2dldF9maWxlIiA+JjUNCiRhc19lY2hvICIkYWNf Y3ZfbGliX2NhcF9jYXBfZ2V0X2ZpbGUiID4mNjsgfQ0KaWYgdGVzdCAieCRhY19jdl9saWJfY2Fw X2NhcF9nZXRfZmlsZSIgPSB4eWVzOyB0aGVuIDoNCiAgYWNfZm5fY19jaGVja19oZWFkZXJfbW9u Z3JlbCAiJExJTkVOTyIgInN5cy9jYXBhYmlsaXR5LmgiICJhY19jdl9oZWFkZXJfc3lzX2NhcGFi aWxpdHlfaCIgIiRhY19pbmNsdWRlc19kZWZhdWx0Ig0KaWYgdGVzdCAieCRhY19jdl9oZWFkZXJf c3lzX2NhcGFiaWxpdHlfaCIgPSB4eWVzOyB0aGVuIDoNCiAgTElCX0NBUD0tbGNhcA0KDQokYXNf ZWNobyAiI2RlZmluZSBIQVZFX0NBUCAxIiA+PmNvbmZkZWZzLmgNCg0KDQpmaQ0KDQoNCmZpDQoN CiAgICBpZiB0ZXN0ICJYJExJQl9DQVAiID0gIlgiOyB0aGVuDQogICAgICBpZiB0ZXN0ICJYJGVu YWJsZV9saWJjYXAiID0gIlh5ZXMiOyB0aGVuDQogICAgICAgIGFzX2ZuX2Vycm9yICQ/ICJsaWJj YXAgbGlicmFyeSB3YXMgbm90IGZvdW5kIG9yIG5vdCB1c2FibGUiICIkTElORU5PIiA1DQogICAg ICBlbHNlDQogICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTog V0FSTklORzogbGliY2FwIGxpYnJhcnkgd2FzIG5vdCBmb3VuZCBvciBub3QgdXNhYmxlLiIgPiY1 DQokYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiBsaWJjYXAgbGlicmFyeSB3YXMgbm90IGZvdW5k IG9yIG5vdCB1c2FibGUuIiA+JjI7fQ0KICAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19s aW5lbm8tJExJTkVOT306IFdBUk5JTkc6IEdOVSBjb3JldXRpbHMgd2lsbCBiZSBidWlsdCB3aXRo b3V0IGNhcGFiaWxpdHkgc3VwcG9ydC4iID4mNQ0KJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzog R05VIGNvcmV1dGlscyB3aWxsIGJlIGJ1aWx0IHdpdGhvdXQgY2FwYWJpbGl0eSBzdXBwb3J0LiIg PiYyO30NCiAgICAgIGZpDQogICAgZmkNCiAgZWxzZQ0KICAgIHsgJGFzX2VjaG8gIiRhc19tZTok e2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogbGliY2FwIHN1cHBvcnQgZGlzYWJsZWQgYnkg dXNlciIgPiY1DQokYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiBsaWJjYXAgc3VwcG9ydCBkaXNh YmxlZCBieSB1c2VyIiA+JjI7fQ0KICBmaQ0KDQoNCiAgIyBTZWUgaWYgbGlua2luZyBgc2VxJyBy ZXF1aXJlcyAtbG0uDQogICMgSXQgZG9lcyBvbiBuZWFybHkgZXZlcnkgc3lzdGVtLiAgVGhlIHNp bmdsZSBleGNlcHRpb24gKHNvIGZhcikgaXMNCiAgIyBCZU9TIHdoaWNoIGhhcyBhbGwgdGhlIG1h dGggZnVuY3Rpb25zIGluIHRoZSBub3JtYWwgcnVudGltZSBsaWJyYXJ5DQogICMgYW5kIGRvZXNu J3QgaGF2ZSBhIHNlcGFyYXRlIG1hdGggbGlicmFyeS4NCg0KDQogIGFjX3NlcV9ib2R5PScNCiAg ICAgc3RhdGljIGRvdWJsZSB4LCB5Ow0KICAgICB4ID0gZmxvb3IgKHgpOw0KICAgICB4ID0gcmlu dCAoeCk7DQogICAgIHggPSBtb2RmICh4LCAmeSk7Jw0KICBjYXQgY29uZmRlZnMuaCAtIDw8X0FD RU9GID5jb25mdGVzdC4kYWNfZXh0DQovKiBlbmQgY29uZmRlZnMuaC4gICovDQojaW5jbHVkZSA8 bWF0aC5oPg0KaW50DQptYWluICgpDQp7DQokYWNfc2VxX2JvZHkNCiAgOw0KICByZXR1cm4gMDsN Cn0NCl9BQ0VPRg0KaWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOg0KDQplbHNl DQogIGFjX3NlcV9zYXZlX0xJQlM9IiRMSUJTIg0KICAgICBMSUJTPSIkTElCUyAtbG0iDQogICAg IGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQNCi8qIGVuZCBjb25m ZGVmcy5oLiAgKi8NCiNpbmNsdWRlIDxtYXRoLmg+DQppbnQNCm1haW4gKCkNCnsNCiRhY19zZXFf Ym9keQ0KICA7DQogIHJldHVybiAwOw0KfQ0KX0FDRU9GDQppZiBhY19mbl9jX3RyeV9saW5rICIk TElORU5PIjsgdGhlbiA6DQogIFNFUV9MSUJNPS1sbQ0KZmkNCnJtIC1mIGNvcmUgY29uZnRlc3Qu ZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXA0KICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVz dC4kYWNfZXh0DQogICAgIExJQlM9IiRhY19zZXFfc2F2ZV9MSUJTIg0KDQpmaQ0Kcm0gLWYgY29y ZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcDQogICAgY29uZnRlc3QkYWNfZXhl ZXh0IGNvbmZ0ZXN0LiRhY19leHQNCg0KDQoNCiAgIyBBY2NlcHQgY29uZmlndXJlIG9wdGlvbnM6 IC0td2l0aC10dHktZ3JvdXBbPUdST1VQXSwgLS13aXRob3V0LXR0eS1ncm91cA0KICAjIFlvdSBj YW4gZGV0ZXJtaW5lIHRoZSBncm91cCBvZiBhIFRUWSB2aWEgJ3N0YXQgLS1mb3JtYXQgJUcgL2Rl di90dHknDQogICMgT21pdHRpbmcgdGhpcyBvcHRpb24gaXMgZXF1aXZhbGVudCB0byB1c2luZyAt LXdpdGhvdXQtdHR5LWdyb3VwLg0KDQojIENoZWNrIHdoZXRoZXIgLS13aXRoLXR0eS1ncm91cCB3 YXMgZ2l2ZW4uDQppZiB0ZXN0ICIke3dpdGhfdHR5X2dyb3VwK3NldH0iID0gc2V0OyB0aGVuIDoN CiAgd2l0aHZhbD0kd2l0aF90dHlfZ3JvdXA7IHR0eV9ncm91cF9uYW1lPSR3aXRodmFsDQplbHNl DQogIHR0eV9ncm91cF9uYW1lPW5vDQpmaQ0KDQoNCiAgaWYgdGVzdCAieCR0dHlfZ3JvdXBfbmFt ZSIgIT0geG5vOyB0aGVuDQogICAgaWYgdGVzdCAieCR0dHlfZ3JvdXBfbmFtZSIgPSB4eWVzOyB0 aGVuDQogICAgICB0dHlfZ3JvdXBfbmFtZT10dHkNCiAgICBmaQ0KICAgIHsgJGFzX2VjaG8gIiRh c19tZToke2FzX2xpbmVuby0kTElORU5PfTogVFRZIGdyb3VwIHVzZWQgYnkgc3lzdGVtIHNldCB0 byBcIiR0dHlfZ3JvdXBfbmFtZVwiIiA+JjUNCiRhc19lY2hvICIkYXNfbWU6IFRUWSBncm91cCB1 c2VkIGJ5IHN5c3RlbSBzZXQgdG8gXCIkdHR5X2dyb3VwX25hbWVcIiIgPiY2O30NCg0KY2F0ID4+ Y29uZmRlZnMuaCA8PF9BQ0VPRg0KI2RlZmluZSBUVFlfR1JPVVBfTkFNRSAiJHR0eV9ncm91cF9u YW1lIg0KX0FDRU9GDQoNCiAgZmkNCg0KDQojIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtZ2NjLXdh cm5pbmdzIHdhcyBnaXZlbi4NCmlmIHRlc3QgIiR7ZW5hYmxlX2djY193YXJuaW5ncytzZXR9IiA9 IHNldDsgdGhlbiA6DQogIGVuYWJsZXZhbD0kZW5hYmxlX2djY193YXJuaW5nczsgY2FzZSAkZW5h YmxldmFsIGluDQogICAgIHllc3xubykgOzsNCiAgICAgKikgICAgICBhc19mbl9lcnJvciAkPyAi YmFkIHZhbHVlICRlbmFibGV2YWwgZm9yIGdjYy13YXJuaW5ncyBvcHRpb24iICIkTElORU5PIiA1 IDs7DQogICBlc2FjDQogICBnbF9nY2Nfd2FybmluZ3M9JGVuYWJsZXZhbA0KZWxzZQ0KICBnbF9n Y2Nfd2FybmluZ3M9bm8NCg0KZmkNCg0KDQppZiB0ZXN0ICIkZ2xfZ2NjX3dhcm5pbmdzIiA9IHll czsgdGhlbg0KICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNr aW5nIHdoZXRoZXIgY29tcGlsZXIgaGFuZGxlcyAtV2Vycm9yIiA+JjUNCiRhc19lY2hvX24gImNo ZWNraW5nIHdoZXRoZXIgY29tcGlsZXIgaGFuZGxlcyAtV2Vycm9yLi4uICIgPiY2OyB9DQppZiAk e2dsX2N2X3dhcm5fX1dlcnJvcis6fSBmYWxzZTsgdGhlbiA6DQogICRhc19lY2hvX24gIihjYWNo ZWQpICIgPiY2DQplbHNlDQoNCiAgc2F2ZV9DUFBGTEFHUz0iJENQUEZMQUdTIg0KICBDUFBGTEFH Uz0iJHtDUFBGTEFHU30gLVdlcnJvciINCiAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29u ZnRlc3QuJGFjX2V4dA0KLyogZW5kIGNvbmZkZWZzLmguICAqLw0KDQppbnQNCm1haW4gKCkNCnsN Cg0KICA7DQogIHJldHVybiAwOw0KfQ0KX0FDRU9GDQppZiBhY19mbl9jX3RyeV9jcHAgIiRMSU5F Tk8iOyB0aGVuIDoNCiAgZ2xfY3Zfd2Fybl9fV2Vycm9yPXllcw0KZWxzZQ0KICBnbF9jdl93YXJu X19XZXJyb3I9bm8NCmZpDQpybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuaSBjb25mdGVzdC4k YWNfZXh0DQogIENQUEZMQUdTPSIkc2F2ZV9DUFBGTEFHUyINCg0KZmkNCnsgJGFzX2VjaG8gIiRh c19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkZ2xfY3Zfd2Fybl9fV2Vycm9yIiA+ JjUNCiRhc19lY2hvICIkZ2xfY3Zfd2Fybl9fV2Vycm9yIiA+JjY7IH0NCmlmIHRlc3QgIngkZ2xf Y3Zfd2Fybl9fV2Vycm9yIiA9IHh5ZXM7IHRoZW4gOg0KICBhc19mbl9hcHBlbmQgV0VSUk9SX0NG TEFHUyAiIC1XZXJyb3IiDQpmaQ0KDQoNCg0KICBudz0NCiAgIyBUaGlzLCAkbncsIGlzIHRoZSBs aXN0IG9mIHdhcm5pbmdzIHdlIGRpc2FibGUuDQogIG53PSIkbncgLVdkZWNsYXJhdGlvbi1hZnRl ci1zdGF0ZW1lbnQiICMgdG9vIHVzZWZ1bCB0byBmb3JiaWQNCiAgbnc9IiRudyAtV2FnZ3JlZ2F0 ZS1yZXR1cm4iICAgICAgICMgYW5hY2hyb25pc3RpYw0KICBudz0iJG53IC1XbG9uZy1sb25nIiAg ICAgICAgICAgICAgIyBDOTAgaXMgYW5hY2hyb25pc3RpYyAobGliL2dldGhyeHRpbWUuaCkNCiAg bnc9IiRudyAtV2MrKy1jb21wYXQiICAgICAgICAgICAgICMgV2UgZG9uJ3QgY2FyZSBhYm91dCBD KysgY29tcGlsZXJzDQogIG53PSIkbncgLVd1bmRlZiIgICAgICAgICAgICAgICAgICAjIFdhcm5z IG9uICcjaWYgR05VTElCX0ZPTycgZXRjIGluIGdudWxpYg0KICBudz0iJG53IC1XdHJhZGl0aW9u YWwiICAgICAgICAgICAgIyBXYXJucyBvbiAjZWxpZiB3aGljaCB3ZSB1c2Ugb2Z0ZW4NCiAgbnc9 IiRudyAtV2Nhc3QtcXVhbCIgICAgICAgICAgICAgICMgVG9vIG1hbnkgd2FybmluZ3MgZm9yIG5v dw0KICBudz0iJG53IC1XY29udmVyc2lvbiIgICAgICAgICAgICAgIyBUb28gbWFueSB3YXJuaW5n cyBmb3Igbm93DQogIG53PSIkbncgLVdzeXN0ZW0taGVhZGVycyIgICAgICAgICAjIERvbid0IGxl dCBzeXN0ZW0gaGVhZGVycyB0cmlnZ2VyIHdhcm5pbmdzDQogIG53PSIkbncgLVdzaWduLWNvbnZl cnNpb24iICAgICAgICAjIFRvbyBtYW55IHdhcm5pbmdzIGZvciBub3cNCiAgbnc9IiRudyAtV3Ry YWRpdGlvbmFsLWNvbnZlcnNpb24iICMgVG9vIG1hbnkgd2FybmluZ3MgZm9yIG5vdw0KICBudz0i JG53IC1XdW5yZWFjaGFibGUtY29kZSIgICAgICAgIyBUb28gbWFueSB3YXJuaW5ncyBmb3Igbm93 DQogIG53PSIkbncgLVdwYWRkZWQiICAgICAgICAgICAgICAgICAjIE91ciBzdHJ1Y3RzIGFyZSBu b3QgcGFkZGVkDQogIG53PSIkbncgLVdyZWR1bmRhbnQtZGVjbHMiICAgICAgICAjIG9wZW5hdC5o IGRlY2xhcmVzIGUuZy4sIG1rZGlyYXQNCiAgbnc9IiRudyAtV2xvZ2ljYWwtb3AiICAgICAgICAg ICAgICMgYW55IHVzZSBvZiBmd3JpdGUgcHJvdm9rZXMgdGhpcw0KICBudz0iJG53IC1XZm9ybWF0 LW5vbmxpdGVyYWwiICAgICAgIyB3aG8uYyBhbmQgcGlua3kuYyBzdHJmdGltZSB1c2VzDQogIG53 PSIkbncgLVd2bGEiICAgICAgICAgICAgICAgICAgICAjIHdhcm5pbmdzIGluIGdldHRleHQuaA0K ICBudz0iJG53IC1XbmVzdGVkLWV4dGVybnMiICAgICAgICAgIyB1c2Ugb2YgWEFSR01BVENIL3Zl cmlmeV9mdW5jdGlvbl9fDQogIG53PSIkbncgLVdzd2l0Y2gtZW51bSIgICAgICAgICAgICAjIFRv byBtYW55IHdhcm5pbmdzIGZvciBub3cNCiAgbnc9IiRudyAtV3N3aXRjaC1kZWZhdWx0IiAgICAg ICAgICMgVG9vIG1hbnkgd2FybmluZ3MgZm9yIG5vdw0KICBudz0iJG53IC1Xc3RhY2stcHJvdGVj dG9yIiAgICAgICAgIyBub3Qgd29ydGggd29ya2luZyBhcm91bmQNCiAgIyB0aGluZ3MgSSBtaWdo dCBmaXggc29vbjoNCiAgbnc9IiRudyAtV2Zsb2F0LWVxdWFsIiAgICAgICAgICAgICMgc29ydC5j LCBzZXEuYw0KICBudz0iJG53IC1XbWlzc2luZy1mb3JtYXQtYXR0cmlidXRlIiAjIGNvcHkuYw0K ICBudz0iJG53IC1XdW5zYWZlLWxvb3Atb3B0aW1pemF0aW9ucyIgIyBhIGZldyBzcmMvKi5jDQog IG53PSIkbncgLVdpbmxpbmUiICAgICAgICAgICAgICAgICAjIHN5c3RlbS5oJ3MgcmVhZGRpcl9p Z25vcmluZ19kb3RfYW5kX2RvdGRvdA0KICBudz0iJG53IC1Xc3RyaWN0LW92ZXJmbG93IiAgICAg ICAgIyBleHByLmMsIHByLmMsIHRyLmMsIGZhY3Rvci5jDQogICMgPz8gLVdzdHJpY3Qtb3ZlcmZs b3cNCg0KDQogZ2xfbWFueXdhcm5fc2V0PQ0KIGZvciBnbF9tYW55d2Fybl9pdGVtIGluIFwNCiAg IC1XYWxsIFwNCiAgIC1XIFwNCiAgIC1XZm9ybWF0LXkyayBcDQogICAtV2Zvcm1hdC1ub25saXRl cmFsIFwNCiAgIC1XZm9ybWF0LXNlY3VyaXR5IFwNCiAgIC1XaW5pdC1zZWxmIFwNCiAgIC1XbWlz c2luZy1pbmNsdWRlLWRpcnMgXA0KICAgLVdzd2l0Y2gtZGVmYXVsdCBcDQogICAtV3N3aXRjaC1l bnVtIFwNCiAgIC1XdW51c2VkIFwNCiAgIC1XdW5rbm93bi1wcmFnbWFzIFwNCiAgIC1Xc3RyaWN0 LWFsaWFzaW5nIFwNCiAgIC1Xc3RyaWN0LW92ZXJmbG93IFwNCiAgIC1Xc3lzdGVtLWhlYWRlcnMg XA0KICAgLVdmbG9hdC1lcXVhbCBcDQogICAtV3RyYWRpdGlvbmFsIFwNCiAgIC1XdHJhZGl0aW9u YWwtY29udmVyc2lvbiBcDQogICAtV2RlY2xhcmF0aW9uLWFmdGVyLXN0YXRlbWVudCBcDQogICAt V3VuZGVmIFwNCiAgIC1Xc2hhZG93IFwNCiAgIC1XdW5zYWZlLWxvb3Atb3B0aW1pemF0aW9ucyBc DQogICAtV3BvaW50ZXItYXJpdGggXA0KICAgLVdiYWQtZnVuY3Rpb24tY2FzdCBcDQogICAtV2Mr Ky1jb21wYXQgXA0KICAgLVdjYXN0LXF1YWwgXA0KICAgLVdjYXN0LWFsaWduIFwNCiAgIC1Xd3Jp dGUtc3RyaW5ncyBcDQogICAtV2NvbnZlcnNpb24gXA0KICAgLVdzaWduLWNvbnZlcnNpb24gXA0K ICAgLVdsb2dpY2FsLW9wIFwNCiAgIC1XYWdncmVnYXRlLXJldHVybiBcDQogICAtV3N0cmljdC1w cm90b3R5cGVzIFwNCiAgIC1Xb2xkLXN0eWxlLWRlZmluaXRpb24gXA0KICAgLVdtaXNzaW5nLXBy b3RvdHlwZXMgXA0KICAgLVdtaXNzaW5nLWRlY2xhcmF0aW9ucyBcDQogICAtV21pc3Npbmctbm9y ZXR1cm4gXA0KICAgLVdtaXNzaW5nLWZvcm1hdC1hdHRyaWJ1dGUgXA0KICAgLVdwYWNrZWQgXA0K ICAgLVdwYWRkZWQgXA0KICAgLVdyZWR1bmRhbnQtZGVjbHMgXA0KICAgLVduZXN0ZWQtZXh0ZXJu cyBcDQogICAtV3VucmVhY2hhYmxlLWNvZGUgXA0KICAgLVdpbmxpbmUgXA0KICAgLVdpbnZhbGlk LXBjaCBcDQogICAtV2xvbmctbG9uZyBcDQogICAtV3ZsYSBcDQogICAtV3ZvbGF0aWxlLXJlZ2lz dGVyLXZhciBcDQogICAtV2Rpc2FibGVkLW9wdGltaXphdGlvbiBcDQogICAtV3N0YWNrLXByb3Rl Y3RvciBcDQogICAtV292ZXJsZW5ndGgtc3RyaW5ncyBcDQogICAtV2J1aWx0aW4tbWFjcm8tcmVk ZWZpbmVkIFwNCiAgIC1XbXVkZmxhcCBcDQogICAtV3BhY2tlZC1iaXRmaWVsZC1jb21wYXQgXA0K ICAgLVdzeW5jLW5hbmQgXA0KICA7IGRvDQogICAgZ2xfbWFueXdhcm5fc2V0PSIkZ2xfbWFueXdh cm5fc2V0ICRnbF9tYW55d2Fybl9pdGVtIg0KICBkb25lDQogIyBUaGUgZm9sbG93aW5nIGFyZSBu b3QgZG9jdW1lbnRlZCBpbiB0aGUgbWFudWFsIGJ1dCBhcmUgaW5jbHVkZWQgaW4NCiAjIG91dHB1 dCBmcm9tIGdjYyAtLWhlbHA9d2FybmluZ3MuDQogZm9yIGdsX21hbnl3YXJuX2l0ZW0gaW4gXA0K ICAgLVdhdHRyaWJ1dGVzIFwNCiAgIC1XY292ZXJhZ2UtbWlzbWF0Y2ggXA0KICAgLVdtdWx0aWNo YXIgXA0KICAgLVd1bnVzZWQtbWFjcm9zIFwNCiAgOyBkbw0KICAgIGdsX21hbnl3YXJuX3NldD0i JGdsX21hbnl3YXJuX3NldCAkZ2xfbWFueXdhcm5faXRlbSINCiAgZG9uZQ0KICB3cz0kZ2xfbWFu eXdhcm5fc2V0DQoNCg0KICBnbF93YXJuX3NldD0NCiAgc2V0IHggJHdzOyBzaGlmdA0KICBmb3Ig Z2xfd2Fybl9pdGVtDQogIGRvDQogICAgY2FzZSAiICRudyAiIGluDQogICAgICAqIiAkZ2xfd2Fy bl9pdGVtICIqKQ0KICAgICAgICA7Ow0KICAgICAgKikNCiAgICAgICAgZ2xfd2Fybl9zZXQ9IiRn bF93YXJuX3NldCAkZ2xfd2Fybl9pdGVtIg0KICAgICAgICA7Ow0KICAgIGVzYWMNCiAgZG9uZQ0K ICB3cz0kZ2xfd2Fybl9zZXQNCg0KICBmb3IgdyBpbiAkd3M7IGRvDQogICAgYXNfZ2xfV2Fybj1g JGFzX2VjaG8gImdsX2N2X3dhcm5fJHciIHwgJGFzX3RyX3NoYA0KeyAkYXNfZWNobyAiJGFzX21l OiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIGNvbXBpbGVyIGhhbmRsZXMg JHciID4mNQ0KJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciBjb21waWxlciBoYW5kbGVzICR3 Li4uICIgPiY2OyB9DQppZiBldmFsIFwkeyRhc19nbF9XYXJuKzp9IGZhbHNlOyB0aGVuIDoNCiAg JGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYNCmVsc2UNCg0KICBzYXZlX0NQUEZMQUdTPSIkQ1BQ RkxBR1MiDQogIENQUEZMQUdTPSIke0NQUEZMQUdTfSAkdyINCiAgY2F0IGNvbmZkZWZzLmggLSA8 PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dA0KLyogZW5kIGNvbmZkZWZzLmguICAqLw0KDQppbnQN Cm1haW4gKCkNCnsNCg0KICA7DQogIHJldHVybiAwOw0KfQ0KX0FDRU9GDQppZiBhY19mbl9jX3Ry eV9jcHAgIiRMSU5FTk8iOyB0aGVuIDoNCiAgZXZhbCAiJGFzX2dsX1dhcm49eWVzIg0KZWxzZQ0K ICBldmFsICIkYXNfZ2xfV2Fybj1ubyINCmZpDQpybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3Qu aSBjb25mdGVzdC4kYWNfZXh0DQogIENQUEZMQUdTPSIkc2F2ZV9DUFBGTEFHUyINCg0KZmkNCmV2 YWwgYWNfcmVzPVwkJGFzX2dsX1dhcm4NCgkgICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNf bGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19yZXMiID4mNQ0KJGFzX2VjaG8gIiRhY19yZXMi ID4mNjsgfQ0KaWYgZXZhbCB0ZXN0IFwieFwkIiRhc19nbF9XYXJuIlwiID0geCJ5ZXMiOyB0aGVu IDoNCiAgYXNfZm5fYXBwZW5kIFdBUk5fQ0ZMQUdTICIgJHciDQpmaQ0KDQogIGRvbmUNCiAgeyAk YXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIGNv bXBpbGVyIGhhbmRsZXMgLVduby1taXNzaW5nLWZpZWxkLWluaXRpYWxpemVycyIgPiY1DQokYXNf ZWNob19uICJjaGVja2luZyB3aGV0aGVyIGNvbXBpbGVyIGhhbmRsZXMgLVduby1taXNzaW5nLWZp ZWxkLWluaXRpYWxpemVycy4uLiAiID4mNjsgfQ0KaWYgJHtnbF9jdl93YXJuX19Xbm9fbWlzc2lu Z19maWVsZF9pbml0aWFsaXplcnMrOn0gZmFsc2U7IHRoZW4gOg0KICAkYXNfZWNob19uICIoY2Fj aGVkKSAiID4mNg0KZWxzZQ0KDQogIHNhdmVfQ1BQRkxBR1M9IiRDUFBGTEFHUyINCiAgQ1BQRkxB R1M9IiR7Q1BQRkxBR1N9IC1Xbm8tbWlzc2luZy1maWVsZC1pbml0aWFsaXplcnMiDQogIGNhdCBj b25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQNCi8qIGVuZCBjb25mZGVmcy5o LiAgKi8NCg0KaW50DQptYWluICgpDQp7DQoNCiAgOw0KICByZXR1cm4gMDsNCn0NCl9BQ0VPRg0K aWYgYWNfZm5fY190cnlfY3BwICIkTElORU5PIjsgdGhlbiA6DQogIGdsX2N2X3dhcm5fX1dub19t aXNzaW5nX2ZpZWxkX2luaXRpYWxpemVycz15ZXMNCmVsc2UNCiAgZ2xfY3Zfd2Fybl9fV25vX21p c3NpbmdfZmllbGRfaW5pdGlhbGl6ZXJzPW5vDQpmaQ0Kcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0 ZXN0LmkgY29uZnRlc3QuJGFjX2V4dA0KICBDUFBGTEFHUz0iJHNhdmVfQ1BQRkxBR1MiDQoNCmZp DQp7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGdsX2N2 X3dhcm5fX1dub19taXNzaW5nX2ZpZWxkX2luaXRpYWxpemVycyIgPiY1DQokYXNfZWNobyAiJGds X2N2X3dhcm5fX1dub19taXNzaW5nX2ZpZWxkX2luaXRpYWxpemVycyIgPiY2OyB9DQppZiB0ZXN0 ICJ4JGdsX2N2X3dhcm5fX1dub19taXNzaW5nX2ZpZWxkX2luaXRpYWxpemVycyIgPSB4eWVzOyB0 aGVuIDoNCiAgYXNfZm5fYXBwZW5kIFdBUk5fQ0ZMQUdTICIgLVduby1taXNzaW5nLWZpZWxkLWlu aXRpYWxpemVycyINCmZpDQogIyBXZSBuZWVkIHRoaXMgb25lDQogIHsgJGFzX2VjaG8gIiRhc19t ZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciBjb21waWxlciBoYW5kbGVz IC1Xbm8tc2lnbi1jb21wYXJlIiA+JjUNCiRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgY29t cGlsZXIgaGFuZGxlcyAtV25vLXNpZ24tY29tcGFyZS4uLiAiID4mNjsgfQ0KaWYgJHtnbF9jdl93 YXJuX19Xbm9fc2lnbl9jb21wYXJlKzp9IGZhbHNlOyB0aGVuIDoNCiAgJGFzX2VjaG9fbiAiKGNh Y2hlZCkgIiA+JjYNCmVsc2UNCg0KICBzYXZlX0NQUEZMQUdTPSIkQ1BQRkxBR1MiDQogIENQUEZM QUdTPSIke0NQUEZMQUdTfSAtV25vLXNpZ24tY29tcGFyZSINCiAgY2F0IGNvbmZkZWZzLmggLSA8 PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dA0KLyogZW5kIGNvbmZkZWZzLmguICAqLw0KDQppbnQN Cm1haW4gKCkNCnsNCg0KICA7DQogIHJldHVybiAwOw0KfQ0KX0FDRU9GDQppZiBhY19mbl9jX3Ry eV9jcHAgIiRMSU5FTk8iOyB0aGVuIDoNCiAgZ2xfY3Zfd2Fybl9fV25vX3NpZ25fY29tcGFyZT15 ZXMNCmVsc2UNCiAgZ2xfY3Zfd2Fybl9fV25vX3NpZ25fY29tcGFyZT1ubw0KZmkNCnJtIC1mIGNv bmZ0ZXN0LmVyciBjb25mdGVzdC5pIGNvbmZ0ZXN0LiRhY19leHQNCiAgQ1BQRkxBR1M9IiRzYXZl X0NQUEZMQUdTIg0KDQpmaQ0KeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99 OiByZXN1bHQ6ICRnbF9jdl93YXJuX19Xbm9fc2lnbl9jb21wYXJlIiA+JjUNCiRhc19lY2hvICIk Z2xfY3Zfd2Fybl9fV25vX3NpZ25fY29tcGFyZSIgPiY2OyB9DQppZiB0ZXN0ICJ4JGdsX2N2X3dh cm5fX1dub19zaWduX2NvbXBhcmUiID0geHllczsgdGhlbiA6DQogIGFzX2ZuX2FwcGVuZCBXQVJO X0NGTEFHUyAiIC1Xbm8tc2lnbi1jb21wYXJlIg0KZmkNCiAgICAgIyBUb28gbWFueSB3YXJuaW5n cyBmb3Igbm93DQogIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hl Y2tpbmcgd2hldGhlciBjb21waWxlciBoYW5kbGVzIC1Xbm8tdW51c2VkLXBhcmFtZXRlciIgPiY1 DQokYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIGNvbXBpbGVyIGhhbmRsZXMgLVduby11bnVz ZWQtcGFyYW1ldGVyLi4uICIgPiY2OyB9DQppZiAke2dsX2N2X3dhcm5fX1dub191bnVzZWRfcGFy YW1ldGVyKzp9IGZhbHNlOyB0aGVuIDoNCiAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYNCmVs c2UNCg0KICBzYXZlX0NQUEZMQUdTPSIkQ1BQRkxBR1MiDQogIENQUEZMQUdTPSIke0NQUEZMQUdT fSAtV25vLXVudXNlZC1wYXJhbWV0ZXIiDQogIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNv bmZ0ZXN0LiRhY19leHQNCi8qIGVuZCBjb25mZGVmcy5oLiAgKi8NCg0KaW50DQptYWluICgpDQp7 DQoNCiAgOw0KICByZXR1cm4gMDsNCn0NCl9BQ0VPRg0KaWYgYWNfZm5fY190cnlfY3BwICIkTElO RU5PIjsgdGhlbiA6DQogIGdsX2N2X3dhcm5fX1dub191bnVzZWRfcGFyYW1ldGVyPXllcw0KZWxz ZQ0KICBnbF9jdl93YXJuX19Xbm9fdW51c2VkX3BhcmFtZXRlcj1ubw0KZmkNCnJtIC1mIGNvbmZ0 ZXN0LmVyciBjb25mdGVzdC5pIGNvbmZ0ZXN0LiRhY19leHQNCiAgQ1BQRkxBR1M9IiRzYXZlX0NQ UEZMQUdTIg0KDQpmaQ0KeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBy ZXN1bHQ6ICRnbF9jdl93YXJuX19Xbm9fdW51c2VkX3BhcmFtZXRlciIgPiY1DQokYXNfZWNobyAi JGdsX2N2X3dhcm5fX1dub191bnVzZWRfcGFyYW1ldGVyIiA+JjY7IH0NCmlmIHRlc3QgIngkZ2xf Y3Zfd2Fybl9fV25vX3VudXNlZF9wYXJhbWV0ZXIiID0geHllczsgdGhlbiA6DQogIGFzX2ZuX2Fw cGVuZCBXQVJOX0NGTEFHUyAiIC1Xbm8tdW51c2VkLXBhcmFtZXRlciINCmZpDQogIyBUb28gbWFu eSB3YXJuaW5ncyBmb3Igbm93DQoNCiAgIyBJbiBzcGl0ZSBvZiBleGNsdWRpbmcgLVdsb2dpY2Fs LW9wIGFib3ZlLCBpdCBpcyBlbmFibGVkLCBhcyBvZg0KICAjIGdjYyA0LjUuMCAyMDA5MDUxNywg YW5kIGl0IHByb3Zva2VzIHdhcm5pbmdzIGluIGNhdC5jLCBkZC5jLCB0cnVuY2F0ZS5jDQogIHsg JGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciBj b21waWxlciBoYW5kbGVzIC1Xbm8tbG9naWNhbC1vcCIgPiY1DQokYXNfZWNob19uICJjaGVja2lu ZyB3aGV0aGVyIGNvbXBpbGVyIGhhbmRsZXMgLVduby1sb2dpY2FsLW9wLi4uICIgPiY2OyB9DQpp ZiAke2dsX2N2X3dhcm5fX1dub19sb2dpY2FsX29wKzp9IGZhbHNlOyB0aGVuIDoNCiAgJGFzX2Vj aG9fbiAiKGNhY2hlZCkgIiA+JjYNCmVsc2UNCg0KICBzYXZlX0NQUEZMQUdTPSIkQ1BQRkxBR1Mi DQogIENQUEZMQUdTPSIke0NQUEZMQUdTfSAtV25vLWxvZ2ljYWwtb3AiDQogIGNhdCBjb25mZGVm cy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQNCi8qIGVuZCBjb25mZGVmcy5oLiAgKi8N Cg0KaW50DQptYWluICgpDQp7DQoNCiAgOw0KICByZXR1cm4gMDsNCn0NCl9BQ0VPRg0KaWYgYWNf Zm5fY190cnlfY3BwICIkTElORU5PIjsgdGhlbiA6DQogIGdsX2N2X3dhcm5fX1dub19sb2dpY2Fs X29wPXllcw0KZWxzZQ0KICBnbF9jdl93YXJuX19Xbm9fbG9naWNhbF9vcD1ubw0KZmkNCnJtIC1m IGNvbmZ0ZXN0LmVyciBjb25mdGVzdC5pIGNvbmZ0ZXN0LiRhY19leHQNCiAgQ1BQRkxBR1M9IiRz YXZlX0NQUEZMQUdTIg0KDQpmaQ0KeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5F Tk99OiByZXN1bHQ6ICRnbF9jdl93YXJuX19Xbm9fbG9naWNhbF9vcCIgPiY1DQokYXNfZWNobyAi JGdsX2N2X3dhcm5fX1dub19sb2dpY2FsX29wIiA+JjY7IH0NCmlmIHRlc3QgIngkZ2xfY3Zfd2Fy bl9fV25vX2xvZ2ljYWxfb3AiID0geHllczsgdGhlbiA6DQogIGFzX2ZuX2FwcGVuZCBXQVJOX0NG TEFHUyAiIC1Xbm8tbG9naWNhbC1vcCINCmZpDQoNCg0KICB7ICRhc19lY2hvICIkYXNfbWU6JHth c19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgY29tcGlsZXIgaGFuZGxlcyAtZmRp YWdub3N0aWNzLXNob3ctb3B0aW9uIiA+JjUNCiRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIg Y29tcGlsZXIgaGFuZGxlcyAtZmRpYWdub3N0aWNzLXNob3ctb3B0aW9uLi4uICIgPiY2OyB9DQpp ZiAke2dsX2N2X3dhcm5fX2ZkaWFnbm9zdGljc19zaG93X29wdGlvbis6fSBmYWxzZTsgdGhlbiA6 DQogICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2DQplbHNlDQoNCiAgc2F2ZV9DUFBGTEFHUz0i JENQUEZMQUdTIg0KICBDUFBGTEFHUz0iJHtDUFBGTEFHU30gLWZkaWFnbm9zdGljcy1zaG93LW9w dGlvbiINCiAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dA0KLyog ZW5kIGNvbmZkZWZzLmguICAqLw0KDQppbnQNCm1haW4gKCkNCnsNCg0KICA7DQogIHJldHVybiAw Ow0KfQ0KX0FDRU9GDQppZiBhY19mbl9jX3RyeV9jcHAgIiRMSU5FTk8iOyB0aGVuIDoNCiAgZ2xf Y3Zfd2Fybl9fZmRpYWdub3N0aWNzX3Nob3dfb3B0aW9uPXllcw0KZWxzZQ0KICBnbF9jdl93YXJu X19mZGlhZ25vc3RpY3Nfc2hvd19vcHRpb249bm8NCmZpDQpybSAtZiBjb25mdGVzdC5lcnIgY29u ZnRlc3QuaSBjb25mdGVzdC4kYWNfZXh0DQogIENQUEZMQUdTPSIkc2F2ZV9DUFBGTEFHUyINCg0K ZmkNCnsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkZ2xf Y3Zfd2Fybl9fZmRpYWdub3N0aWNzX3Nob3dfb3B0aW9uIiA+JjUNCiRhc19lY2hvICIkZ2xfY3Zf d2Fybl9fZmRpYWdub3N0aWNzX3Nob3dfb3B0aW9uIiA+JjY7IH0NCmlmIHRlc3QgIngkZ2xfY3Zf d2Fybl9fZmRpYWdub3N0aWNzX3Nob3dfb3B0aW9uIiA9IHh5ZXM7IHRoZW4gOg0KICBhc19mbl9h cHBlbmQgV0FSTl9DRkxBR1MgIiAtZmRpYWdub3N0aWNzLXNob3ctb3B0aW9uIg0KZmkNCg0KICB7 ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIg Y29tcGlsZXIgaGFuZGxlcyAtZnVuaXQtYXQtYS10aW1lIiA+JjUNCiRhc19lY2hvX24gImNoZWNr aW5nIHdoZXRoZXIgY29tcGlsZXIgaGFuZGxlcyAtZnVuaXQtYXQtYS10aW1lLi4uICIgPiY2OyB9 DQppZiAke2dsX2N2X3dhcm5fX2Z1bml0X2F0X2FfdGltZSs6fSBmYWxzZTsgdGhlbiA6DQogICRh c19lY2hvX24gIihjYWNoZWQpICIgPiY2DQplbHNlDQoNCiAgc2F2ZV9DUFBGTEFHUz0iJENQUEZM QUdTIg0KICBDUFBGTEFHUz0iJHtDUFBGTEFHU30gLWZ1bml0LWF0LWEtdGltZSINCiAgY2F0IGNv bmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dA0KLyogZW5kIGNvbmZkZWZzLmgu ICAqLw0KDQppbnQNCm1haW4gKCkNCnsNCg0KICA7DQogIHJldHVybiAwOw0KfQ0KX0FDRU9GDQpp ZiBhY19mbl9jX3RyeV9jcHAgIiRMSU5FTk8iOyB0aGVuIDoNCiAgZ2xfY3Zfd2Fybl9fZnVuaXRf YXRfYV90aW1lPXllcw0KZWxzZQ0KICBnbF9jdl93YXJuX19mdW5pdF9hdF9hX3RpbWU9bm8NCmZp DQpybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuaSBjb25mdGVzdC4kYWNfZXh0DQogIENQUEZM QUdTPSIkc2F2ZV9DUFBGTEFHUyINCg0KZmkNCnsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVu by0kTElORU5PfTogcmVzdWx0OiAkZ2xfY3Zfd2Fybl9fZnVuaXRfYXRfYV90aW1lIiA+JjUNCiRh c19lY2hvICIkZ2xfY3Zfd2Fybl9fZnVuaXRfYXRfYV90aW1lIiA+JjY7IH0NCmlmIHRlc3QgIngk Z2xfY3Zfd2Fybl9fZnVuaXRfYXRfYV90aW1lIiA9IHh5ZXM7IHRoZW4gOg0KICBhc19mbl9hcHBl bmQgV0FSTl9DRkxBR1MgIiAtZnVuaXQtYXQtYS10aW1lIg0KZmkNCg0KDQoNCg0KDQokYXNfZWNo byAiI2RlZmluZSBsaW50IDEiID4+Y29uZmRlZnMuaA0KDQoNCiRhc19lY2hvICIjZGVmaW5lIF9G T1JUSUZZX1NPVVJDRSAyIiA+PmNvbmZkZWZzLmgNCg0KDQokYXNfZWNobyAiI2RlZmluZSBHTlVM SUJfUE9SVENIRUNLIDEiID4+Y29uZmRlZnMuaA0KDQoNCiAgIyBXZSB1c2UgYSBzbGlnaHRseSBz bWFsbGVyIHNldCBvZiB3YXJuaW5nIG9wdGlvbnMgZm9yIGxpYi8uDQogICMgUmVtb3ZlIHRoZSBm b2xsb3dpbmcgYW5kIHNhdmUgdGhlIHJlc3VsdCBpbiBHTlVMSUJfV0FSTl9DRkxBR1MuDQogIG53 PQ0KICBudz0iJG53IC1XdW5pbml0aWFsaXplZCINCiAgbnc9IiRudyAtV3VudXNlZC1tYWNyb3Mi DQogIG53PSIkbncgLVdtaXNzaW5nLXByb3RvdHlwZXMiDQogIG53PSIkbncgLVdvbGQtc3R5bGUt ZGVmaW5pdGlvbiINCg0KICBnbF93YXJuX3NldD0NCiAgc2V0IHggJFdBUk5fQ0ZMQUdTOyBzaGlm dA0KICBmb3IgZ2xfd2Fybl9pdGVtDQogIGRvDQogICAgY2FzZSAiICRudyAiIGluDQogICAgICAq IiAkZ2xfd2Fybl9pdGVtICIqKQ0KICAgICAgICA7Ow0KICAgICAgKikNCiAgICAgICAgZ2xfd2Fy bl9zZXQ9IiRnbF93YXJuX3NldCAkZ2xfd2Fybl9pdGVtIg0KICAgICAgICA7Ow0KICAgIGVzYWMN CiAgZG9uZQ0KICBHTlVMSUJfV0FSTl9DRkxBR1M9JGdsX3dhcm5fc2V0DQoNCg0KDQogICMgRm9y IGdudWxpYi10ZXN0cywgdGhlIHNldCBpcyBzbGlnaHRseSBzbWFsbGVyIHN0aWxsLg0KICBudz0N CiAgbnc9IiRudyAtV3N0cmljdC1wcm90b3R5cGVzIg0KDQogIGdsX3dhcm5fc2V0PQ0KICBzZXQg eCAkR05VTElCX1dBUk5fQ0ZMQUdTOyBzaGlmdA0KICBmb3IgZ2xfd2Fybl9pdGVtDQogIGRvDQog ICAgY2FzZSAiICRudyAiIGluDQogICAgICAqIiAkZ2xfd2Fybl9pdGVtICIqKQ0KICAgICAgICA7 Ow0KICAgICAgKikNCiAgICAgICAgZ2xfd2Fybl9zZXQ9IiRnbF93YXJuX3NldCAkZ2xfd2Fybl9p dGVtIg0KICAgICAgICA7Ow0KICAgIGVzYWMNCiAgZG9uZQ0KICBHTlVMSUJfVEVTVF9XQVJOX0NG TEFHUz0kZ2xfd2Fybl9zZXQNCg0KDQpmaQ0KDQpmb3IgYWNfaGVhZGVyIGluIHZmb3JrLmgNCmRv IDoNCiAgYWNfZm5fY19jaGVja19oZWFkZXJfbW9uZ3JlbCAiJExJTkVOTyIgInZmb3JrLmgiICJh Y19jdl9oZWFkZXJfdmZvcmtfaCIgIiRhY19pbmNsdWRlc19kZWZhdWx0Ig0KaWYgdGVzdCAieCRh Y19jdl9oZWFkZXJfdmZvcmtfaCIgPSB4eWVzOyB0aGVuIDoNCiAgY2F0ID4+Y29uZmRlZnMuaCA8 PF9BQ0VPRg0KI2RlZmluZSBIQVZFX1ZGT1JLX0ggMQ0KX0FDRU9GDQoNCmZpDQoNCmRvbmUNCg0K Zm9yIGFjX2Z1bmMgaW4gZm9yayB2Zm9yaw0KZG8gOg0KICBhc19hY192YXI9YCRhc19lY2hvICJh Y19jdl9mdW5jXyRhY19mdW5jIiB8ICRhc190cl9zaGANCmFjX2ZuX2NfY2hlY2tfZnVuYyAiJExJ TkVOTyIgIiRhY19mdW5jIiAiJGFzX2FjX3ZhciINCmlmIGV2YWwgdGVzdCBcInhcJCIkYXNfYWNf dmFyIlwiID0geCJ5ZXMiOyB0aGVuIDoNCiAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRg0KI2Rl ZmluZSBgJGFzX2VjaG8gIkhBVkVfJGFjX2Z1bmMiIHwgJGFzX3RyX2NwcGAgMQ0KX0FDRU9GDQoN CmZpDQpkb25lDQoNCmlmIHRlc3QgIngkYWNfY3ZfZnVuY19mb3JrIiA9IHh5ZXM7IHRoZW4NCiAg eyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3Igd29y a2luZyBmb3JrIiA+JjUNCiRhc19lY2hvX24gImNoZWNraW5nIGZvciB3b3JraW5nIGZvcmsuLi4g IiA+JjY7IH0NCmlmICR7YWNfY3ZfZnVuY19mb3JrX3dvcmtzKzp9IGZhbHNlOyB0aGVuIDoNCiAg JGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYNCmVsc2UNCiAgaWYgdGVzdCAiJGNyb3NzX2NvbXBp bGluZyIgPSB5ZXM7IHRoZW4gOg0KICBhY19jdl9mdW5jX2Zvcmtfd29ya3M9Y3Jvc3MNCmVsc2UN CiAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dA0KLyogZW5kIGNv bmZkZWZzLmguICAqLw0KJGFjX2luY2x1ZGVzX2RlZmF1bHQNCmludA0KbWFpbiAoKQ0Kew0KDQoJ ICAvKiBCeSBSdWVkaWdlciBLdWhsbWFubi4gKi8NCgkgIHJldHVybiBmb3JrICgpIDwgMDsNCg0K ICA7DQogIHJldHVybiAwOw0KfQ0KX0FDRU9GDQppZiBhY19mbl9jX3RyeV9ydW4gIiRMSU5FTk8i OyB0aGVuIDoNCiAgYWNfY3ZfZnVuY19mb3JrX3dvcmtzPXllcw0KZWxzZQ0KICBhY19jdl9mdW5j X2Zvcmtfd29ya3M9bm8NCmZpDQpybSAtZiBjb3JlICouY29yZSBjb3JlLmNvbmZ0ZXN0LiogZ21v bi5vdXQgYmIub3V0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCBcDQogIGNvbmZ0ZXN0LiRhY19vYmpleHQg Y29uZnRlc3QuYmVhbSBjb25mdGVzdC4kYWNfZXh0DQpmaQ0KDQpmaQ0KeyAkYXNfZWNobyAiJGFz X21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9mdW5jX2Zvcmtfd29ya3Mi ID4mNQ0KJGFzX2VjaG8gIiRhY19jdl9mdW5jX2Zvcmtfd29ya3MiID4mNjsgfQ0KDQplbHNlDQog IGFjX2N2X2Z1bmNfZm9ya193b3Jrcz0kYWNfY3ZfZnVuY19mb3JrDQpmaQ0KaWYgdGVzdCAieCRh Y19jdl9mdW5jX2Zvcmtfd29ya3MiID0geGNyb3NzOyB0aGVuDQogIGNhc2UgJGhvc3QgaW4NCiAg ICAqLSotYW1pZ2FvcyogfCAqLSotbXNkb3NkamdwcCopDQogICAgICAjIE92ZXJyaWRlLCBhcyB0 aGVzZSBzeXN0ZW1zIGhhdmUgb25seSBhIGR1bW15IGZvcmsoKSBzdHViDQogICAgICBhY19jdl9m dW5jX2Zvcmtfd29ya3M9bm8NCiAgICAgIDs7DQogICAgKikNCiAgICAgIGFjX2N2X2Z1bmNfZm9y a193b3Jrcz15ZXMNCiAgICAgIDs7DQogIGVzYWMNCiAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNf bGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiByZXN1bHQgJGFjX2N2X2Z1bmNfZm9ya193b3JrcyBn dWVzc2VkIGJlY2F1c2Ugb2YgY3Jvc3MgY29tcGlsYXRpb24iID4mNQ0KJGFzX2VjaG8gIiRhc19t ZTogV0FSTklORzogcmVzdWx0ICRhY19jdl9mdW5jX2Zvcmtfd29ya3MgZ3Vlc3NlZCBiZWNhdXNl IG9mIGNyb3NzIGNvbXBpbGF0aW9uIiA+JjI7fQ0KZmkNCmFjX2N2X2Z1bmNfdmZvcmtfd29ya3M9 JGFjX2N2X2Z1bmNfdmZvcmsNCmlmIHRlc3QgIngkYWNfY3ZfZnVuY192Zm9yayIgPSB4eWVzOyB0 aGVuDQogIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcg Zm9yIHdvcmtpbmcgdmZvcmsiID4mNQ0KJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIHdvcmtpbmcg dmZvcmsuLi4gIiA+JjY7IH0NCmlmICR7YWNfY3ZfZnVuY192Zm9ya193b3Jrcys6fSBmYWxzZTsg dGhlbiA6DQogICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2DQplbHNlDQogIGlmIHRlc3QgIiRj cm9zc19jb21waWxpbmciID0geWVzOyB0aGVuIDoNCiAgYWNfY3ZfZnVuY192Zm9ya193b3Jrcz1j cm9zcw0KZWxzZQ0KICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0 DQovKiBlbmQgY29uZmRlZnMuaC4gICovDQovKiBUaGFua3MgdG8gUGF1bCBFZ2dlcnQgZm9yIHRo aXMgdGVzdC4gICovDQokYWNfaW5jbHVkZXNfZGVmYXVsdA0KI2luY2x1ZGUgPHN5cy93YWl0Lmg+ DQojaWZkZWYgSEFWRV9WRk9SS19IDQojIGluY2x1ZGUgPHZmb3JrLmg+DQojZW5kaWYNCi8qIE9u IHNvbWUgc3BhcmMgc3lzdGVtcywgY2hhbmdlcyBieSB0aGUgY2hpbGQgdG8gbG9jYWwgYW5kIGlu Y29taW5nDQogICBhcmd1bWVudCByZWdpc3RlcnMgYXJlIHByb3BhZ2F0ZWQgYmFjayB0byB0aGUg cGFyZW50LiAgVGhlIGNvbXBpbGVyDQogICBpcyB0b2xkIGFib3V0IHRoaXMgd2l0aCAjaW5jbHVk ZSA8dmZvcmsuaD4sIGJ1dCBzb21lIGNvbXBpbGVycw0KICAgKGUuZy4gZ2NjIC1PKSBkb24ndCBn cm9rIDx2Zm9yay5oPi4gIFRlc3QgZm9yIHRoaXMgYnkgdXNpbmcgYQ0KICAgc3RhdGljIHZhcmlh YmxlIHdob3NlIGFkZHJlc3MgaXMgcHV0IGludG8gYSByZWdpc3RlciB0aGF0IGlzDQogICBjbG9i YmVyZWQgYnkgdGhlIHZmb3JrLiAgKi8NCnN0YXRpYyB2b2lkDQojaWZkZWYgX19jcGx1c3BsdXMN CnNwYXJjX2FkZHJlc3NfdGVzdCAoaW50IGFyZykNCiMgZWxzZQ0Kc3BhcmNfYWRkcmVzc190ZXN0 IChhcmcpIGludCBhcmc7DQojZW5kaWYNCnsNCiAgc3RhdGljIHBpZF90IGNoaWxkOw0KICBpZiAo IWNoaWxkKSB7DQogICAgY2hpbGQgPSB2Zm9yayAoKTsNCiAgICBpZiAoY2hpbGQgPCAwKSB7DQog ICAgICBwZXJyb3IgKCJ2Zm9yayIpOw0KICAgICAgX2V4aXQoMik7DQogICAgfQ0KICAgIGlmICgh Y2hpbGQpIHsNCiAgICAgIGFyZyA9IGdldHBpZCgpOw0KICAgICAgd3JpdGUoLTEsICIiLCAwKTsN CiAgICAgIF9leGl0IChhcmcpOw0KICAgIH0NCiAgfQ0KfQ0KDQppbnQNCm1haW4gKCkNCnsNCiAg cGlkX3QgcGFyZW50ID0gZ2V0cGlkICgpOw0KICBwaWRfdCBjaGlsZDsNCg0KICBzcGFyY19hZGRy ZXNzX3Rlc3QgKDApOw0KDQogIGNoaWxkID0gdmZvcmsgKCk7DQoNCiAgaWYgKGNoaWxkID09IDAp IHsNCiAgICAvKiBIZXJlIGlzIGFub3RoZXIgdGVzdCBmb3Igc3BhcmMgdmZvcmsgcmVnaXN0ZXIg cHJvYmxlbXMuICBUaGlzDQogICAgICAgdGVzdCB1c2VzIGxvdHMgb2YgbG9jYWwgdmFyaWFibGVz LCBhdCBsZWFzdCBhcyBtYW55IGxvY2FsDQogICAgICAgdmFyaWFibGVzIGFzIG1haW4gaGFzIGFs bG9jYXRlZCBzbyBmYXIgaW5jbHVkaW5nIGNvbXBpbGVyDQogICAgICAgdGVtcG9yYXJpZXMuICA0 IGxvY2FscyBhcmUgZW5vdWdoIGZvciBnY2MgMS40MC4zIG9uIGEgU29sYXJpcw0KICAgICAgIDQu MS4zIHNwYXJjLCBidXQgd2UgdXNlIDggdG8gYmUgc2FmZS4gIEEgYnVnZ3kgY29tcGlsZXIgc2hv dWxkDQogICAgICAgcmV1c2UgdGhlIHJlZ2lzdGVyIG9mIHBhcmVudCBmb3Igb25lIG9mIHRoZSBs b2NhbCB2YXJpYWJsZXMsDQogICAgICAgc2luY2UgaXQgd2lsbCB0aGluayB0aGF0IHBhcmVudCBj YW4ndCBwb3NzaWJseSBiZSB1c2VkIGFueSBtb3JlDQogICAgICAgaW4gdGhpcyByb3V0aW5lLiAg QXNzaWduaW5nIHRvIHRoZSBsb2NhbCB2YXJpYWJsZSB3aWxsIHRodXMNCiAgICAgICBtdW5nZSBw YXJlbnQgaW4gdGhlIHBhcmVudCBwcm9jZXNzLiAgKi8NCiAgICBwaWRfdA0KICAgICAgcCA9IGdl dHBpZCgpLCBwMSA9IGdldHBpZCgpLCBwMiA9IGdldHBpZCgpLCBwMyA9IGdldHBpZCgpLA0KICAg ICAgcDQgPSBnZXRwaWQoKSwgcDUgPSBnZXRwaWQoKSwgcDYgPSBnZXRwaWQoKSwgcDcgPSBnZXRw aWQoKTsNCiAgICAvKiBDb252aW5jZSB0aGUgY29tcGlsZXIgdGhhdCBwLi5wNyBhcmUgbGl2ZTsg b3RoZXJ3aXNlLCBpdCBtaWdodA0KICAgICAgIHVzZSB0aGUgc2FtZSBoYXJkd2FyZSByZWdpc3Rl ciBmb3IgYWxsIDggbG9jYWwgdmFyaWFibGVzLiAgKi8NCiAgICBpZiAocCAhPSBwMSB8fCBwICE9 IHAyIHx8IHAgIT0gcDMgfHwgcCAhPSBwNA0KCXx8IHAgIT0gcDUgfHwgcCAhPSBwNiB8fCBwICE9 IHA3KQ0KICAgICAgX2V4aXQoMSk7DQoNCiAgICAvKiBPbiBzb21lIHN5c3RlbXMgKGUuZy4gSVJJ WCAzLjMpLCB2Zm9yayBkb2Vzbid0IHNlcGFyYXRlIHBhcmVudA0KICAgICAgIGZyb20gY2hpbGQg ZmlsZSBkZXNjcmlwdG9ycy4gIElmIHRoZSBjaGlsZCBjbG9zZXMgYSBkZXNjcmlwdG9yDQogICAg ICAgYmVmb3JlIGl0IGV4ZWNzIG9yIGV4aXRzLCB0aGlzIG11bmdlcyB0aGUgcGFyZW50J3MgZGVz Y3JpcHRvcg0KICAgICAgIGFzIHdlbGwuICBUZXN0IGZvciB0aGlzIGJ5IGNsb3Npbmcgc3Rkb3V0 IGluIHRoZSBjaGlsZC4gICovDQogICAgX2V4aXQoY2xvc2UoZmlsZW5vKHN0ZG91dCkpICE9IDAp Ow0KICB9IGVsc2Ugew0KICAgIGludCBzdGF0dXM7DQogICAgc3RydWN0IHN0YXQgc3Q7DQoNCiAg ICB3aGlsZSAod2FpdCgmc3RhdHVzKSAhPSBjaGlsZCkNCiAgICAgIDsNCiAgICByZXR1cm4gKA0K CSAvKiBXYXMgdGhlcmUgc29tZSBwcm9ibGVtIHdpdGggdmZvcmtpbmc/ICAqLw0KCSBjaGlsZCA8 IDANCg0KCSAvKiBEaWQgdGhlIGNoaWxkIGZhaWw/ICAoVGhpcyBzaG91bGRuJ3QgaGFwcGVuLikg ICovDQoJIHx8IHN0YXR1cw0KDQoJIC8qIERpZCB0aGUgdmZvcmsvY29tcGlsZXIgYnVnIG9jY3Vy PyAgKi8NCgkgfHwgcGFyZW50ICE9IGdldHBpZCgpDQoNCgkgLyogRGlkIHRoZSBmaWxlIGRlc2Ny aXB0b3IgYnVnIG9jY3VyPyAgKi8NCgkgfHwgZnN0YXQoZmlsZW5vKHN0ZG91dCksICZzdCkgIT0g MA0KCSApOw0KICB9DQp9DQpfQUNFT0YNCmlmIGFjX2ZuX2NfdHJ5X3J1biAiJExJTkVOTyI7IHRo ZW4gOg0KICBhY19jdl9mdW5jX3Zmb3JrX3dvcmtzPXllcw0KZWxzZQ0KICBhY19jdl9mdW5jX3Zm b3JrX3dvcmtzPW5vDQpmaQ0Kcm0gLWYgY29yZSAqLmNvcmUgY29yZS5jb25mdGVzdC4qIGdtb24u b3V0IGJiLm91dCBjb25mdGVzdCRhY19leGVleHQgXA0KICBjb25mdGVzdC4kYWNfb2JqZXh0IGNv bmZ0ZXN0LmJlYW0gY29uZnRlc3QuJGFjX2V4dA0KZmkNCg0KZmkNCnsgJGFzX2VjaG8gIiRhc19t ZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfZnVuY192Zm9ya193b3JrcyIg PiY1DQokYXNfZWNobyAiJGFjX2N2X2Z1bmNfdmZvcmtfd29ya3MiID4mNjsgfQ0KDQpmaTsNCmlm IHRlc3QgIngkYWNfY3ZfZnVuY19mb3JrX3dvcmtzIiA9IHhjcm9zczsgdGhlbg0KICBhY19jdl9m dW5jX3Zmb3JrX3dvcmtzPSRhY19jdl9mdW5jX3Zmb3JrDQogIHsgJGFzX2VjaG8gIiRhc19tZTok e2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogcmVzdWx0ICRhY19jdl9mdW5jX3Zmb3JrX3dv cmtzIGd1ZXNzZWQgYmVjYXVzZSBvZiBjcm9zcyBjb21waWxhdGlvbiIgPiY1DQokYXNfZWNobyAi JGFzX21lOiBXQVJOSU5HOiByZXN1bHQgJGFjX2N2X2Z1bmNfdmZvcmtfd29ya3MgZ3Vlc3NlZCBi ZWNhdXNlIG9mIGNyb3NzIGNvbXBpbGF0aW9uIiA+JjI7fQ0KZmkNCg0KaWYgdGVzdCAieCRhY19j dl9mdW5jX3Zmb3JrX3dvcmtzIiA9IHh5ZXM7IHRoZW4NCg0KJGFzX2VjaG8gIiNkZWZpbmUgSEFW RV9XT1JLSU5HX1ZGT1JLIDEiID4+Y29uZmRlZnMuaA0KDQplbHNlDQoNCiRhc19lY2hvICIjZGVm aW5lIHZmb3JrIGZvcmsiID4+Y29uZmRlZnMuaA0KDQpmaQ0KaWYgdGVzdCAieCRhY19jdl9mdW5j X2Zvcmtfd29ya3MiID0geHllczsgdGhlbg0KDQokYXNfZWNobyAiI2RlZmluZSBIQVZFX1dPUktJ TkdfRk9SSyAxIiA+PmNvbmZkZWZzLmgNCg0KZmkNCg0KDQpvcHRpb25hbF9iaW5fcHJvZ3M9DQpm b3IgYWNfZnVuYyBpbiBjaHJvb3QNCmRvIDoNCiAgYWNfZm5fY19jaGVja19mdW5jICIkTElORU5P IiAiY2hyb290IiAiYWNfY3ZfZnVuY19jaHJvb3QiDQppZiB0ZXN0ICJ4JGFjX2N2X2Z1bmNfY2hy b290IiA9IHh5ZXM7IHRoZW4gOg0KICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GDQojZGVmaW5l IEhBVkVfQ0hST09UIDENCl9BQ0VPRg0KIHsNCiAgaWYgdGVzdCAteiAiJG9wdGlvbmFsX2Jpbl9w cm9ncyI7IHRoZW4NCiAgICBvcHRpb25hbF9iaW5fcHJvZ3M9Y2hyb290DQogIGVsc2UNCiAgICBv cHRpb25hbF9iaW5fcHJvZ3M9IiRvcHRpb25hbF9iaW5fcHJvZ3MgY2hyb290Ig0KICBmaQ0KfQ0K ZmkNCmRvbmUNCg0KZm9yIGFjX2Z1bmMgaW4gZ2V0aG9zdGlkDQpkbyA6DQogIGFjX2ZuX2NfY2hl Y2tfZnVuYyAiJExJTkVOTyIgImdldGhvc3RpZCIgImFjX2N2X2Z1bmNfZ2V0aG9zdGlkIg0KaWYg dGVzdCAieCRhY19jdl9mdW5jX2dldGhvc3RpZCIgPSB4eWVzOyB0aGVuIDoNCiAgY2F0ID4+Y29u ZmRlZnMuaCA8PF9BQ0VPRg0KI2RlZmluZSBIQVZFX0dFVEhPU1RJRCAxDQpfQUNFT0YNCiB7DQog IGlmIHRlc3QgLXogIiRvcHRpb25hbF9iaW5fcHJvZ3MiOyB0aGVuDQogICAgb3B0aW9uYWxfYmlu X3Byb2dzPWhvc3RpZA0KICBlbHNlDQogICAgb3B0aW9uYWxfYmluX3Byb2dzPSIkb3B0aW9uYWxf YmluX3Byb2dzIGhvc3RpZCINCiAgZmkNCn0NCmZpDQpkb25lDQoNCg0KDQogICB7ICRhc19lY2hv ICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgdXNlIG9mIHN0 cnVjdCB3aW5zaXplIHJlcXVpcmVzIHN5cy9wdGVtLmgiID4mNQ0KJGFzX2VjaG9fbiAiY2hlY2tp bmcgd2hldGhlciB1c2Ugb2Ygc3RydWN0IHdpbnNpemUgcmVxdWlyZXMgc3lzL3B0ZW0uaC4uLiAi ID4mNjsgfQ0KaWYgJHtnbF9jdl9zeXNfc3RydWN0X3dpbnNpemVfbmVlZHNfc3lzX3B0ZW1faCs6 fSBmYWxzZTsgdGhlbiA6DQogICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2DQplbHNlDQogIGds X2N2X3N5c19zdHJ1Y3Rfd2luc2l6ZV9uZWVkc19zeXNfcHRlbV9oPXllcw0KICAgICAgaWYgdGVz dCAkYWNfY3Zfc3lzX3Bvc2l4X3Rlcm1pb3MgPSB5ZXM7IHRoZW4NCiAgICAgICAgY2F0IGNvbmZk ZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dA0KLyogZW5kIGNvbmZkZWZzLmguICAq Lw0KI2luY2x1ZGUgPHRlcm1pb3MuaD4NCmludA0KbWFpbiAoKQ0Kew0Kc3RydWN0IHdpbnNpemUg eDsNCiAgICAgICAgICAgIGlmIChzaXplb2YgeCA+IDApIHJldHVybiAwOw0KICA7DQogIHJldHVy biAwOw0KfQ0KX0FDRU9GDQppZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6 DQogIGdsX2N2X3N5c19zdHJ1Y3Rfd2luc2l6ZV9uZWVkc19zeXNfcHRlbV9oPW5vDQpmaQ0Kcm0g LWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0 DQogICAgICBmaQ0KICAgICAgaWYgdGVzdCAkZ2xfY3Zfc3lzX3N0cnVjdF93aW5zaXplX25lZWRz X3N5c19wdGVtX2ggPSB5ZXM7IHRoZW4NCiAgICAgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VP RiA+Y29uZnRlc3QuJGFjX2V4dA0KLyogZW5kIGNvbmZkZWZzLmguICAqLw0KI2luY2x1ZGUgPHN5 cy9wdGVtLmg+DQppbnQNCm1haW4gKCkNCnsNCnN0cnVjdCB3aW5zaXplIHg7DQogICAgICAgICAg ICBpZiAoc2l6ZW9mIHggPiAwKSByZXR1cm4gMDsNCiAgOw0KICByZXR1cm4gMDsNCn0NCl9BQ0VP Rg0KaWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOg0KDQplbHNlDQogIGds X2N2X3N5c19zdHJ1Y3Rfd2luc2l6ZV9uZWVkc19zeXNfcHRlbV9oPW5vDQpmaQ0Kcm0gLWYgY29y ZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0DQogICAg ICBmaQ0KZmkNCnsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0 OiAkZ2xfY3Zfc3lzX3N0cnVjdF93aW5zaXplX25lZWRzX3N5c19wdGVtX2giID4mNQ0KJGFzX2Vj aG8gIiRnbF9jdl9zeXNfc3RydWN0X3dpbnNpemVfbmVlZHNfc3lzX3B0ZW1faCIgPiY2OyB9DQog ICBpZiB0ZXN0ICRnbF9jdl9zeXNfc3RydWN0X3dpbnNpemVfbmVlZHNfc3lzX3B0ZW1faCA9IHll czsgdGhlbg0KDQokYXNfZWNobyAiI2RlZmluZSBXSU5TSVpFX0lOX1BURU0gMSIgPj5jb25mZGVm cy5oDQoNCiAgIGZpDQoNCnsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTog Y2hlY2tpbmcgd2hldGhlciBsb2NhbHRpbWUgY2FjaGVzIFRaIiA+JjUNCiRhc19lY2hvX24gImNo ZWNraW5nIHdoZXRoZXIgbG9jYWx0aW1lIGNhY2hlcyBUWi4uLiAiID4mNjsgfQ0KaWYgJHt1dGls c19jdl9sb2NhbHRpbWVfY2FjaGUrOn0gZmFsc2U7IHRoZW4gOg0KICAkYXNfZWNob19uICIoY2Fj aGVkKSAiID4mNg0KZWxzZQ0KICBpZiB0ZXN0IHgkYWNfY3ZfZnVuY190enNldCA9IHh5ZXM7IHRo ZW4NCmlmIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0geWVzOyB0aGVuIDoNCiAgIyBJZiB3ZSBo YXZlIHR6c2V0LCBhc3N1bWUgdGhlIHdvcnN0IHdoZW4gY3Jvc3MtY29tcGlsaW5nLg0KdXRpbHNf Y3ZfbG9jYWx0aW1lX2NhY2hlPXllcw0KZWxzZQ0KICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9G ID5jb25mdGVzdC4kYWNfZXh0DQovKiBlbmQgY29uZmRlZnMuaC4gICovDQojaW5jbHVkZSA8dGlt ZS5oPg0KI2lmIFNURENfSEVBREVSUw0KIyBpbmNsdWRlIDxzdGRsaWIuaD4NCiNlbmRpZg0KZXh0 ZXJuIGNoYXIgKiplbnZpcm9uOw0Kdm9pZCB1bnNldF9UWiAodm9pZCkNCnsNCiAgY2hhciAqKmZy b20sICoqdG87DQogIGZvciAodG8gPSBmcm9tID0gZW52aXJvbjsgKCp0byA9ICpmcm9tKTsgZnJv bSsrKQ0KICAgIGlmICghICh0b1swXVswXSA9PSAnVCcgJiYgdG9bMF1bMV0gPT0gJ1onICYmIHRv WzBdWzJdID09ICc9JykpDQogICAgICB0bysrOw0KfQ0KaW50IG1haW4oKQ0Kew0KICB0aW1lX3Qg bm93ID0gdGltZSAoKHRpbWVfdCAqKSAwKTsNCiAgaW50IGhvdXJfR01UMCwgaG91cl91bnNldDsN CiAgaWYgKHB1dGVudiAoIlRaPUdNVDAiKSAhPSAwKQ0KICAgIHJldHVybiAxOw0KICBob3VyX0dN VDAgPSBsb2NhbHRpbWUgKCZub3cpLT50bV9ob3VyOw0KICB1bnNldF9UWiAoKTsNCiAgaG91cl91 bnNldCA9IGxvY2FsdGltZSAoJm5vdyktPnRtX2hvdXI7DQogIGlmIChwdXRlbnYgKCJUWj1QU1Q4 IikgIT0gMCkNCiAgICByZXR1cm4gMTsNCiAgaWYgKGxvY2FsdGltZSAoJm5vdyktPnRtX2hvdXIg PT0gaG91cl9HTVQwKQ0KICAgIHJldHVybiAxOw0KICB1bnNldF9UWiAoKTsNCiAgaWYgKGxvY2Fs dGltZSAoJm5vdyktPnRtX2hvdXIgIT0gaG91cl91bnNldCkNCiAgICByZXR1cm4gMTsNCiAgcmV0 dXJuIDA7DQp9DQpfQUNFT0YNCmlmIGFjX2ZuX2NfdHJ5X3J1biAiJExJTkVOTyI7IHRoZW4gOg0K ICB1dGlsc19jdl9sb2NhbHRpbWVfY2FjaGU9bm8NCmVsc2UNCiAgdXRpbHNfY3ZfbG9jYWx0aW1l X2NhY2hlPXllcw0KZmkNCnJtIC1mIGNvcmUgKi5jb3JlIGNvcmUuY29uZnRlc3QuKiBnbW9uLm91 dCBiYi5vdXQgY29uZnRlc3QkYWNfZXhlZXh0IFwNCiAgY29uZnRlc3QuJGFjX29iamV4dCBjb25m dGVzdC5iZWFtIGNvbmZ0ZXN0LiRhY19leHQNCmZpDQoNCmVsc2UNCiAgICAgICAgIyBJZiB3ZSBs YWNrIHR6c2V0LCByZXBvcnQgdGhhdCBsb2NhbHRpbWUgZG9lcyBub3QgY2FjaGUgVFosDQogICAg ICAgICMgc2luY2Ugd2UgY2FuJ3QgaW52YWxpZGF0ZSB0aGUgY2FjaGUgaWYgd2UgZG9uJ3QgaGF2 ZSB0enNldC4NCiAgICAgICAgdXRpbHNfY3ZfbG9jYWx0aW1lX2NhY2hlPW5vDQpmaQ0KZmkNCnsg JGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkdXRpbHNfY3Zf bG9jYWx0aW1lX2NhY2hlIiA+JjUNCiRhc19lY2hvICIkdXRpbHNfY3ZfbG9jYWx0aW1lX2NhY2hl IiA+JjY7IH0NCmlmIHRlc3QgJHV0aWxzX2N2X2xvY2FsdGltZV9jYWNoZSA9IHllczsgdGhlbg0K DQokYXNfZWNobyAiI2RlZmluZSBMT0NBTFRJTUVfQ0FDSEUgMSIgPj5jb25mZGVmcy5oDQoNCmZp DQoNCiMgU0NPLU9EVC0zLjAgaXMgcmVwb3J0ZWQgdG8gbmVlZCAtbG9zIHRvIGxpbmsgcHJvZ3Jh bXMgdXNpbmcgaW5pdGdyb3Vwcw0KZm9yIGFjX2Z1bmMgaW4gaW5pdGdyb3Vwcw0KZG8gOg0KICBh Y19mbl9jX2NoZWNrX2Z1bmMgIiRMSU5FTk8iICJpbml0Z3JvdXBzIiAiYWNfY3ZfZnVuY19pbml0 Z3JvdXBzIg0KaWYgdGVzdCAieCRhY19jdl9mdW5jX2luaXRncm91cHMiID0geHllczsgdGhlbiA6 DQogIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YNCiNkZWZpbmUgSEFWRV9JTklUR1JPVVBTIDEN Cl9BQ0VPRg0KDQpmaQ0KZG9uZQ0KDQppZiB0ZXN0ICRhY19jdl9mdW5jX2luaXRncm91cHMgPSBu bzsgdGhlbg0KICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNr aW5nIGZvciBpbml0Z3JvdXBzIGluIC1sb3MiID4mNQ0KJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9y IGluaXRncm91cHMgaW4gLWxvcy4uLiAiID4mNjsgfQ0KaWYgJHthY19jdl9saWJfb3NfaW5pdGdy b3Vwcys6fSBmYWxzZTsgdGhlbiA6DQogICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2DQplbHNl DQogIGFjX2NoZWNrX2xpYl9zYXZlX0xJQlM9JExJQlMNCkxJQlM9Ii1sb3MgICRMSUJTIg0KY2F0 IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dA0KLyogZW5kIGNvbmZkZWZz LmguICAqLw0KDQovKiBPdmVycmlkZSBhbnkgR0NDIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9p ZCBhbiBlcnJvci4NCiAgIFVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1 cm4gdHlwZSBvZiBhIEdDQw0KICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90 eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8NCiNpZmRlZiBfX2NwbHVzcGx1cw0KZXh0ZXJuICJD Ig0KI2VuZGlmDQpjaGFyIGluaXRncm91cHMgKCk7DQppbnQNCm1haW4gKCkNCnsNCnJldHVybiBp bml0Z3JvdXBzICgpOw0KICA7DQogIHJldHVybiAwOw0KfQ0KX0FDRU9GDQppZiBhY19mbl9jX3Ry eV9saW5rICIkTElORU5PIjsgdGhlbiA6DQogIGFjX2N2X2xpYl9vc19pbml0Z3JvdXBzPXllcw0K ZWxzZQ0KICBhY19jdl9saWJfb3NfaW5pdGdyb3Vwcz1ubw0KZmkNCnJtIC1mIGNvcmUgY29uZnRl c3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXA0KICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25m dGVzdC4kYWNfZXh0DQpMSUJTPSRhY19jaGVja19saWJfc2F2ZV9MSUJTDQpmaQ0KeyAkYXNfZWNo byAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9saWJfb3NfaW5p dGdyb3VwcyIgPiY1DQokYXNfZWNobyAiJGFjX2N2X2xpYl9vc19pbml0Z3JvdXBzIiA+JjY7IH0N CmlmIHRlc3QgIngkYWNfY3ZfbGliX29zX2luaXRncm91cHMiID0geHllczsgdGhlbiA6DQogIGNh dCA+PmNvbmZkZWZzLmggPDxfQUNFT0YNCiNkZWZpbmUgSEFWRV9MSUJPUyAxDQpfQUNFT0YNCg0K ICBMSUJTPSItbG9zICRMSUJTIg0KDQpmaQ0KDQpmaQ0KDQpmb3IgYWNfZnVuYyBpbiBzeXNsb2cN CmRvIDoNCiAgYWNfZm5fY19jaGVja19mdW5jICIkTElORU5PIiAic3lzbG9nIiAiYWNfY3ZfZnVu Y19zeXNsb2ciDQppZiB0ZXN0ICJ4JGFjX2N2X2Z1bmNfc3lzbG9nIiA9IHh5ZXM7IHRoZW4gOg0K ICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GDQojZGVmaW5lIEhBVkVfU1lTTE9HIDENCl9BQ0VP Rg0KDQpmaQ0KZG9uZQ0KDQppZiB0ZXN0ICRhY19jdl9mdW5jX3N5c2xvZyA9IG5vOyB0aGVuDQog ICMgc3lzbG9nIGlzIG5vdCBpbiB0aGUgZGVmYXVsdCBsaWJyYXJpZXMuICBTZWUgaWYgaXQncyBp biBzb21lIG90aGVyLg0KICBmb3IgbGliIGluIGJzZCBzb2NrZXQgaW5ldDsgZG8NCiAgICBhc19h Y19MaWI9YCRhc19lY2hvICJhY19jdl9saWJfJGxpYicnX3N5c2xvZyIgfCAkYXNfdHJfc2hgDQp7 ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBzeXNs b2cgaW4gLWwkbGliIiA+JjUNCiRhc19lY2hvX24gImNoZWNraW5nIGZvciBzeXNsb2cgaW4gLWwk bGliLi4uICIgPiY2OyB9DQppZiBldmFsIFwkeyRhc19hY19MaWIrOn0gZmFsc2U7IHRoZW4gOg0K ICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNg0KZWxzZQ0KICBhY19jaGVja19saWJfc2F2ZV9M SUJTPSRMSUJTDQpMSUJTPSItbCRsaWIgICRMSUJTIg0KY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VP RiA+Y29uZnRlc3QuJGFjX2V4dA0KLyogZW5kIGNvbmZkZWZzLmguICAqLw0KDQovKiBPdmVycmlk ZSBhbnkgR0NDIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4NCiAgIFVzZSBj aGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIEdDQw0KICAg YnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5 LiAgKi8NCiNpZmRlZiBfX2NwbHVzcGx1cw0KZXh0ZXJuICJDIg0KI2VuZGlmDQpjaGFyIHN5c2xv ZyAoKTsNCmludA0KbWFpbiAoKQ0Kew0KcmV0dXJuIHN5c2xvZyAoKTsNCiAgOw0KICByZXR1cm4g MDsNCn0NCl9BQ0VPRg0KaWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOg0KICBl dmFsICIkYXNfYWNfTGliPXllcyINCmVsc2UNCiAgZXZhbCAiJGFzX2FjX0xpYj1ubyINCmZpDQpy bSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwNCiAgICBjb25mdGVz dCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dA0KTElCUz0kYWNfY2hlY2tfbGliX3NhdmVfTElC Uw0KZmkNCmV2YWwgYWNfcmVzPVwkJGFzX2FjX0xpYg0KCSAgICAgICB7ICRhc19lY2hvICIkYXNf bWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX3JlcyIgPiY1DQokYXNfZWNobyAi JGFjX3JlcyIgPiY2OyB9DQppZiBldmFsIHRlc3QgXCJ4XCQiJGFzX2FjX0xpYiJcIiA9IHgieWVz IjsgdGhlbiA6DQoNCiRhc19lY2hvICIjZGVmaW5lIEhBVkVfU1lTTE9HIDEiID4+Y29uZmRlZnMu aA0KDQogICAgICBMSUJTPSIkTElCUyAtbCRsaWIiOyBicmVhaw0KZmkNCg0KICBkb25lDQpmaQ0K DQp7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAz LWFyZ3VtZW50IHNldHByaW9yaXR5IGZ1bmN0aW9uIiA+JjUNCiRhc19lY2hvX24gImNoZWNraW5n IGZvciAzLWFyZ3VtZW50IHNldHByaW9yaXR5IGZ1bmN0aW9uLi4uICIgPiY2OyB9DQppZiAke3V0 aWxzX2N2X2Z1bmNfc2V0cHJpb3JpdHkrOn0gZmFsc2U7IHRoZW4gOg0KICAkYXNfZWNob19uICIo Y2FjaGVkKSAiID4mNg0KZWxzZQ0KICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVz dC4kYWNfZXh0DQovKiBlbmQgY29uZmRlZnMuaC4gICovDQojaW5jbHVkZSA8c3lzL3RpbWUuaD4N CiAgICAgICAgICNpbmNsdWRlIDxzeXMvcmVzb3VyY2UuaD4NCg0KaW50DQptYWluICgpDQp7DQpz ZXRwcmlvcml0eSAoMCwgMCwgMCk7DQogIDsNCiAgcmV0dXJuIDA7DQp9DQpfQUNFT0YNCmlmIGFj X2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoNCiAgdXRpbHNfY3ZfZnVuY19zZXRwcmlv cml0eT15ZXMNCmVsc2UNCiAgdXRpbHNfY3ZfZnVuY19zZXRwcmlvcml0eT1ubw0KZmkNCnJtIC1m IGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXA0KICAgIGNvbmZ0ZXN0JGFj X2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0DQpmaQ0KeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGlu ZW5vLSRMSU5FTk99OiByZXN1bHQ6ICR1dGlsc19jdl9mdW5jX3NldHByaW9yaXR5IiA+JjUNCiRh c19lY2hvICIkdXRpbHNfY3ZfZnVuY19zZXRwcmlvcml0eSIgPiY2OyB9DQppZiB0ZXN0ICR1dGls c19jdl9mdW5jX3NldHByaW9yaXR5ID0gbm87IHRoZW4NCiAgZm9yIGFjX2Z1bmMgaW4gbmljZQ0K ZG8gOg0KICBhY19mbl9jX2NoZWNrX2Z1bmMgIiRMSU5FTk8iICJuaWNlIiAiYWNfY3ZfZnVuY19u aWNlIg0KaWYgdGVzdCAieCRhY19jdl9mdW5jX25pY2UiID0geHllczsgdGhlbiA6DQogIGNhdCA+ PmNvbmZkZWZzLmggPDxfQUNFT0YNCiNkZWZpbmUgSEFWRV9OSUNFIDENCl9BQ0VPRg0KDQpmaQ0K ZG9uZQ0KDQpmaQ0KY2FzZSAkdXRpbHNfY3ZfZnVuY19zZXRwcmlvcml0eSwkYWNfY3ZfZnVuY19u aWNlIGluDQoqeWVzKikNCiAgew0KICBpZiB0ZXN0IC16ICIkb3B0aW9uYWxfYmluX3Byb2dzIjsg dGhlbg0KICAgIG9wdGlvbmFsX2Jpbl9wcm9ncz1uaWNlDQogIGVsc2UNCiAgICBvcHRpb25hbF9i aW5fcHJvZ3M9IiRvcHRpb25hbF9iaW5fcHJvZ3MgbmljZSINCiAgZmkNCn0NCmVzYWMNCg0KDQoN Cg0KICBpZiB0ZXN0ICRhY19jdl9oZWFkZXJfdXRtcF9oID0geWVzIHx8IHRlc3QgJGFjX2N2X2hl YWRlcl91dG1weF9oID0geWVzOyB0aGVuDQogICAgew0KICBpZiB0ZXN0IC16ICIkb3B0aW9uYWxf YmluX3Byb2dzIjsgdGhlbg0KICAgIG9wdGlvbmFsX2Jpbl9wcm9ncz13aG8NCiAgZWxzZQ0KICAg IG9wdGlvbmFsX2Jpbl9wcm9ncz0iJG9wdGlvbmFsX2Jpbl9wcm9ncyB3aG8iDQogIGZpDQp9DQog ICAgew0KICBpZiB0ZXN0IC16ICIkb3B0aW9uYWxfYmluX3Byb2dzIjsgdGhlbg0KICAgIG9wdGlv bmFsX2Jpbl9wcm9ncz11c2Vycw0KICBlbHNlDQogICAgb3B0aW9uYWxfYmluX3Byb2dzPSIkb3B0 aW9uYWxfYmluX3Byb2dzIHVzZXJzIg0KICBmaQ0KfQ0KICAgIHsNCiAgaWYgdGVzdCAteiAiJG9w dGlvbmFsX2Jpbl9wcm9ncyI7IHRoZW4NCiAgICBvcHRpb25hbF9iaW5fcHJvZ3M9cGlua3kNCiAg ZWxzZQ0KICAgIG9wdGlvbmFsX2Jpbl9wcm9ncz0iJG9wdGlvbmFsX2Jpbl9wcm9ncyBwaW5reSIN CiAgZmkNCn0NCiAgZmkNCg0KDQp7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVO T306IGNoZWNraW5nIHV0X2hvc3QgaW4gc3RydWN0IHV0bXAiID4mNQ0KJGFzX2VjaG9fbiAiY2hl Y2tpbmcgdXRfaG9zdCBpbiBzdHJ1Y3QgdXRtcC4uLiAiID4mNjsgfQ0KaWYgJHtzdV9jdl9mdW5j X3V0X2hvc3RfaW5fdXRtcCs6fSBmYWxzZTsgdGhlbiA6DQogICRhc19lY2hvX24gIihjYWNoZWQp ICIgPiY2DQplbHNlDQogIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19l eHQNCi8qIGVuZCBjb25mZGVmcy5oLiAgKi8NCiNpbmNsdWRlIDxzeXMvdHlwZXMuaD4NCiNpbmNs dWRlIDx1dG1wLmg+DQppbnQNCm1haW4gKCkNCnsNCnN0cnVjdCB1dG1wIHV0OyByZXR1cm4gIXNp emVvZiB1dC51dF9ob3N0Ow0KICA7DQogIHJldHVybiAwOw0KfQ0KX0FDRU9GDQppZiBhY19mbl9j X3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6DQogIHN1X2N2X2Z1bmNfdXRfaG9zdF9pbl91dG1w PXllcw0KZWxzZQ0KICBzdV9jdl9mdW5jX3V0X2hvc3RfaW5fdXRtcD1ubw0KZmkNCnJtIC1mIGNv cmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXA0KICAgIGNvbmZ0ZXN0JGFjX2V4 ZWV4dCBjb25mdGVzdC4kYWNfZXh0DQpmaQ0KDQp7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5l bm8tJExJTkVOT306IHJlc3VsdDogJHN1X2N2X2Z1bmNfdXRfaG9zdF9pbl91dG1wIiA+JjUNCiRh c19lY2hvICIkc3VfY3ZfZnVuY191dF9ob3N0X2luX3V0bXAiID4mNjsgfQ0KaWYgdGVzdCAkc3Vf Y3ZfZnVuY191dF9ob3N0X2luX3V0bXAgPSB5ZXM7IHRoZW4NCiAgaGF2ZV91dF9ob3N0PTENCg0K JGFzX2VjaG8gIiNkZWZpbmUgSEFWRV9VVF9IT1NUIDEiID4+Y29uZmRlZnMuaA0KDQpmaQ0KDQpp ZiB0ZXN0IC16ICIkaGF2ZV91dF9ob3N0IjsgdGhlbg0KICB7ICRhc19lY2hvICIkYXNfbWU6JHth c19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHV0X2hvc3QgaW4gc3RydWN0IHV0bXB4IiA+JjUN CiRhc19lY2hvX24gImNoZWNraW5nIHV0X2hvc3QgaW4gc3RydWN0IHV0bXB4Li4uICIgPiY2OyB9 DQogIGlmICR7c3VfY3ZfZnVuY191dF9ob3N0X2luX3V0bXB4Kzp9IGZhbHNlOyB0aGVuIDoNCiAg JGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYNCmVsc2UNCiAgY2F0IGNvbmZkZWZzLmggLSA8PF9B Q0VPRiA+Y29uZnRlc3QuJGFjX2V4dA0KLyogZW5kIGNvbmZkZWZzLmguICAqLw0KI2luY2x1ZGUg PHN5cy90eXBlcy5oPg0KI2luY2x1ZGUgPHV0bXB4Lmg+DQppbnQNCm1haW4gKCkNCnsNCnN0cnVj dCB1dG1weCB1dDsgcmV0dXJuICFzaXplb2YgdXQudXRfaG9zdDsNCiAgOw0KICByZXR1cm4gMDsN Cn0NCl9BQ0VPRg0KaWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOg0KICBzdV9j dl9mdW5jX3V0X2hvc3RfaW5fdXRtcHg9eWVzDQplbHNlDQogIHN1X2N2X2Z1bmNfdXRfaG9zdF9p bl91dG1weD1ubw0KZmkNCnJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpl eHQgXA0KICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0DQpmaQ0KDQogIHsg JGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkc3VfY3ZfZnVu Y191dF9ob3N0X2luX3V0bXB4IiA+JjUNCiRhc19lY2hvICIkc3VfY3ZfZnVuY191dF9ob3N0X2lu X3V0bXB4IiA+JjY7IH0NCiAgaWYgdGVzdCAkc3VfY3ZfZnVuY191dF9ob3N0X2luX3V0bXB4ID0g eWVzOyB0aGVuDQoNCiRhc19lY2hvICIjZGVmaW5lIEhBVkVfVVRNUFhfSCAxIiA+PmNvbmZkZWZz LmgNCg0KDQokYXNfZWNobyAiI2RlZmluZSBIQVZFX1VUX0hPU1QgMSIgPj5jb25mZGVmcy5oDQoN CiAgZmkNCmZpDQoNCg0KICBmb3IgYWNfZnVuYyBpbiBzeXNjdGwNCmRvIDoNCiAgYWNfZm5fY19j aGVja19mdW5jICIkTElORU5PIiAic3lzY3RsIiAiYWNfY3ZfZnVuY19zeXNjdGwiDQppZiB0ZXN0 ICJ4JGFjX2N2X2Z1bmNfc3lzY3RsIiA9IHh5ZXM7IHRoZW4gOg0KICBjYXQgPj5jb25mZGVmcy5o IDw8X0FDRU9GDQojZGVmaW5lIEhBVkVfU1lTQ1RMIDENCl9BQ0VPRg0KDQpmaQ0KZG9uZQ0KDQoN CiAgZm9yIGFjX2hlYWRlciBpbiBzeXMvc3lzY3RsLmgNCmRvIDoNCiAgYWNfZm5fY19jaGVja19o ZWFkZXJfY29tcGlsZSAiJExJTkVOTyIgInN5cy9zeXNjdGwuaCIgImFjX2N2X2hlYWRlcl9zeXNf c3lzY3RsX2giICIkYWNfaW5jbHVkZXNfZGVmYXVsdA0KICAgICAjaWYgSEFWRV9TWVNfUEFSQU1f SA0KICAgICAgICNpbmNsdWRlIDxzeXMvcGFyYW0uaD4NCiAgICAgICNlbmRpZg0KIg0KaWYgdGVz dCAieCRhY19jdl9oZWFkZXJfc3lzX3N5c2N0bF9oIiA9IHh5ZXM7IHRoZW4gOg0KICBjYXQgPj5j b25mZGVmcy5oIDw8X0FDRU9GDQojZGVmaW5lIEhBVkVfU1lTX1NZU0NUTF9IIDENCl9BQ0VPRg0K DQpmaQ0KDQpkb25lDQoNCg0KICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVO T306IGNoZWNraW5nIHdoZXRoZXIgd2UgY2FuIGdldCB0aGUgc3lzdGVtIGJvb3QgdGltZSIgPiY1 DQokYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIHdlIGNhbiBnZXQgdGhlIHN5c3RlbSBib290 IHRpbWUuLi4gIiA+JjY7IH0NCmlmICR7Z251bGliX2N2X2hhdmVfYm9vdF90aW1lKzp9IGZhbHNl OyB0aGVuIDoNCiAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYNCmVsc2UNCg0KICAgICAgY2F0 IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dA0KLyogZW5kIGNvbmZkZWZz LmguICAqLw0KJGFjX2luY2x1ZGVzX2RlZmF1bHQNCiNpZiBIQVZFX1NZU0NUTCAmJiBIQVZFX1NZ U19TWVNDVExfSA0KIyBpZiBIQVZFX1NZU19QQVJBTV9IDQojICBpbmNsdWRlIDxzeXMvcGFyYW0u aD4gLyogbmVlZGVkIGZvciBPcGVuQlNEIDMuMCAqLw0KIyBlbmRpZg0KIyBpbmNsdWRlIDxzeXMv c3lzY3RsLmg+DQojZW5kaWYNCiNpZiBIQVZFX1VUTVBYX0gNCiMgaW5jbHVkZSA8dXRtcHguaD4N CiNlbGlmIEhBVkVfVVRNUF9IDQojIGluY2x1ZGUgPHV0bXAuaD4NCiNlbmRpZg0KI2lmIEhBVkVf T1NfSA0KIyBpbmNsdWRlIDxPUy5oPg0KI2VuZGlmDQoNCmludA0KbWFpbiAoKQ0Kew0KDQojaWYg KGRlZmluZWQgQk9PVF9USU1FICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KICAgICB8 fCAoZGVmaW5lZCBDVExfS0VSTiAmJiBkZWZpbmVkIEtFUk5fQk9PVFRJTUUpIFwNCiAgICAgfHwg SEFWRV9PU19IKQ0KLyogeW91ciBzeXN0ZW0gKmRvZXMqIGhhdmUgdGhlIGluZnJhc3RydWN0dXJl IHRvIGRldGVybWluZSBib290IHRpbWUgKi8NCiNlbHNlDQpwbGVhc2VfdGVsbF91c19ob3dfdG9f ZGV0ZXJtaW5lX2Jvb3RfdGltZV9vbl95b3VyX3N5c3RlbQ0KI2VuZGlmDQoNCiAgOw0KICByZXR1 cm4gMDsNCn0NCl9BQ0VPRg0KaWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4g Og0KICBnbnVsaWJfY3ZfaGF2ZV9ib290X3RpbWU9eWVzDQplbHNlDQogIGdudWxpYl9jdl9oYXZl X2Jvb3RfdGltZT1ubw0KZmkNCnJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19v YmpleHQgY29uZnRlc3QuJGFjX2V4dA0KDQpmaQ0KeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGlu ZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRnbnVsaWJfY3ZfaGF2ZV9ib290X3RpbWUiID4mNQ0KJGFz X2VjaG8gIiRnbnVsaWJfY3ZfaGF2ZV9ib290X3RpbWUiID4mNjsgfQ0KICBpZiB0ZXN0ICRnbnVs aWJfY3ZfaGF2ZV9ib290X3RpbWUgPSB5ZXM7IHRoZW4gOg0KICB7DQogIGlmIHRlc3QgLXogIiRv cHRpb25hbF9iaW5fcHJvZ3MiOyB0aGVuDQogICAgb3B0aW9uYWxfYmluX3Byb2dzPXVwdGltZQ0K ICBlbHNlDQogICAgb3B0aW9uYWxfYmluX3Byb2dzPSIkb3B0aW9uYWxfYmluX3Byb2dzIHVwdGlt ZSINCiAgZmkNCn0NCmZpDQoNCg0KeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5F Tk99OiBjaGVja2luZyBQT1NJWCB0ZXJtaW9zIiA+JjUNCiRhc19lY2hvX24gImNoZWNraW5nIFBP U0lYIHRlcm1pb3MuLi4gIiA+JjY7IH0NCmlmICR7YWNfY3Zfc3lzX3Bvc2l4X3Rlcm1pb3MrOn0g ZmFsc2U7IHRoZW4gOg0KICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNg0KZWxzZQ0KICBjYXQg Y29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0DQovKiBlbmQgY29uZmRlZnMu aC4gICovDQojaW5jbHVkZSA8c3lzL3R5cGVzLmg+DQojaW5jbHVkZSA8dW5pc3RkLmg+DQojaW5j bHVkZSA8dGVybWlvcy5oPg0KDQppbnQNCm1haW4gKCkNCnsNCi8qIFN1bk9TIDQuMC4zIGhhcyB0 ZXJtaW9zLmggYnV0IG5vdCB0aGUgbGlicmFyeSBjYWxscy4gICovDQogICB0Y2dldGF0dHIoMCwg MCk7DQogIDsNCiAgcmV0dXJuIDA7DQp9DQpfQUNFT0YNCmlmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRM SU5FTk8iOyB0aGVuIDoNCiAgYWNfY3Zfc3lzX3Bvc2l4X3Rlcm1pb3M9eWVzDQplbHNlDQogIGFj X2N2X3N5c19wb3NpeF90ZXJtaW9zPW5vDQpmaQ0Kcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29u ZnRlc3QuJGFjX29iamV4dCBcDQogICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19l eHQNCmZpDQp7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDog JGFjX2N2X3N5c19wb3NpeF90ZXJtaW9zIiA+JjUNCiRhc19lY2hvICIkYWNfY3Zfc3lzX3Bvc2l4 X3Rlcm1pb3MiID4mNjsgfQ0KDQoNCiB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJ TkVOT306IGNoZWNraW5nIHdoZXRoZXIgdXNlIG9mIFRJT0NHV0lOU1ogcmVxdWlyZXMgc3lzL2lv Y3RsLmgiID4mNQ0KJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciB1c2Ugb2YgVElPQ0dXSU5T WiByZXF1aXJlcyBzeXMvaW9jdGwuaC4uLiAiID4mNjsgfQ0KaWYgJHtnbF9jdl9zeXNfdGlvY2d3 aW5zel9uZWVkc19zeXNfaW9jdGxfaCs6fSBmYWxzZTsgdGhlbiA6DQogICRhc19lY2hvX24gIihj YWNoZWQpICIgPiY2DQplbHNlDQogIGdsX2N2X3N5c190aW9jZ3dpbnN6X25lZWRzX3N5c19pb2N0 bF9oPW5vDQoNCiAgaWYgdGVzdCAkZ2xfY3Zfc3lzX3Rpb2Nnd2luc3pfbmVlZHNfdGVybWlvc19o ID0gbm87IHRoZW4NCiAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNf ZXh0DQovKiBlbmQgY29uZmRlZnMuaC4gICovDQojaW5jbHVkZSA8c3lzL3R5cGVzLmg+DQojICAg ICBpbmNsdWRlIDxzeXMvaW9jdGwuaD4NCiMgICAgIGlmZGVmIFRJT0NHV0lOU1oNCiAgICAgICAg eWVzDQojICAgICBlbmRpZg0KDQpfQUNFT0YNCmlmIChldmFsICIkYWNfY3BwIGNvbmZ0ZXN0LiRh Y19leHQiKSAyPiY1IHwNCiAgJEVHUkVQICJ5ZXMiID4vZGV2L251bGwgMj4mMTsgdGhlbiA6DQog IGdsX2N2X3N5c190aW9jZ3dpbnN6X25lZWRzX3N5c19pb2N0bF9oPXllcw0KZmkNCnJtIC1mIGNv bmZ0ZXN0Kg0KDQogIGZpDQoNCmZpDQp7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJ TkVOT306IHJlc3VsdDogJGdsX2N2X3N5c190aW9jZ3dpbnN6X25lZWRzX3N5c19pb2N0bF9oIiA+ JjUNCiRhc19lY2hvICIkZ2xfY3Zfc3lzX3Rpb2Nnd2luc3pfbmVlZHNfc3lzX2lvY3RsX2giID4m NjsgfQ0KICBpZiB0ZXN0ICRnbF9jdl9zeXNfdGlvY2d3aW5zel9uZWVkc19zeXNfaW9jdGxfaCA9 IHllczsgdGhlbg0KDQokYXNfZWNobyAiI2RlZmluZSBHV0lOU1pfSU5fU1lTX0lPQ1RMIDEiID4+ Y29uZmRlZnMuaA0KDQogIGZpDQoNCg0KaWYgdGVzdCAkYWNfY3Zfc3lzX3Bvc2l4X3Rlcm1pb3Mg PSB5ZXM7IHRoZW4NCiAgew0KICBpZiB0ZXN0IC16ICIkb3B0aW9uYWxfYmluX3Byb2dzIjsgdGhl bg0KICAgIG9wdGlvbmFsX2Jpbl9wcm9ncz1zdHR5DQogIGVsc2UNCiAgICBvcHRpb25hbF9iaW5f cHJvZ3M9IiRvcHRpb25hbF9iaW5fcHJvZ3Mgc3R0eSINCiAgZmkNCn0NCg0KICB7ICRhc19lY2hv ICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgdGVybWlvcy5o IG5lZWRzIF9YT1BFTl9TT1VSQ0UiID4mNQ0KJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciB0 ZXJtaW9zLmggbmVlZHMgX1hPUEVOX1NPVVJDRS4uLiAiID4mNjsgfQ0KICBpZiAke3N1X2N2X3N5 c190ZXJtaW9zX25lZWRzX3hvcGVuX3NvdXJjZSs6fSBmYWxzZTsgdGhlbiA6DQogICRhc19lY2hv X24gIihjYWNoZWQpICIgPiY2DQplbHNlDQogIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNv bmZ0ZXN0LiRhY19leHQNCi8qIGVuZCBjb25mZGVmcy5oLiAgKi8NCiNpbmNsdWRlIDx0ZXJtaW9z Lmg+DQojaWZkZWYgSVVDTEMNCnllcw0KI2VuZGlmDQpfQUNFT0YNCmlmIChldmFsICIkYWNfY3Bw IGNvbmZ0ZXN0LiRhY19leHQiKSAyPiY1IHwNCiAgJEVHUkVQICJ5ZXMiID4vZGV2L251bGwgMj4m MTsgdGhlbiA6DQogIHN1X2N2X3N5c190ZXJtaW9zX25lZWRzX3hvcGVuX3NvdXJjZT1ubw0KZWxz ZQ0KICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0DQovKiBlbmQg Y29uZmRlZnMuaC4gICovDQojZGVmaW5lIF9YT1BFTl9TT1VSQ0UNCiNpbmNsdWRlIDx0ZXJtaW9z Lmg+DQojaWZkZWYgSVVDTEMNCnllcw0KI2VuZGlmDQpfQUNFT0YNCmlmIChldmFsICIkYWNfY3Bw IGNvbmZ0ZXN0LiRhY19leHQiKSAyPiY1IHwNCiAgJEVHUkVQICJ5ZXMiID4vZGV2L251bGwgMj4m MTsgdGhlbiA6DQogIHN1X2N2X3N5c190ZXJtaW9zX25lZWRzX3hvcGVuX3NvdXJjZT15ZXMNCmVs c2UNCiAgc3VfY3Zfc3lzX3Rlcm1pb3NfbmVlZHNfeG9wZW5fc291cmNlPW5vDQpmaQ0Kcm0gLWYg Y29uZnRlc3QqDQoNCmZpDQpybSAtZiBjb25mdGVzdCoNCg0KZmkNCg0KICB7ICRhc19lY2hvICIk YXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJHN1X2N2X3N5c190ZXJtaW9zX25l ZWRzX3hvcGVuX3NvdXJjZSIgPiY1DQokYXNfZWNobyAiJHN1X2N2X3N5c190ZXJtaW9zX25lZWRz X3hvcGVuX3NvdXJjZSIgPiY2OyB9DQogIHRlc3QgJHN1X2N2X3N5c190ZXJtaW9zX25lZWRzX3hv cGVuX3NvdXJjZSA9IHllcyAmJg0KDQokYXNfZWNobyAiI2RlZmluZSBURVJNSU9TX05FRURTX1hP UEVOX1NPVVJDRSAxIiA+PmNvbmZkZWZzLmgNCg0KDQogIHsgJGFzX2VjaG8gIiRhc19tZToke2Fz X2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgY19saW5lIGluIHN0cnVjdCB0ZXJtaW9zIiA+JjUN CiRhc19lY2hvX24gImNoZWNraW5nIGNfbGluZSBpbiBzdHJ1Y3QgdGVybWlvcy4uLiAiID4mNjsg fQ0KICBpZiAke3N1X2N2X3N5c19jX2xpbmVfaW5fdGVybWlvcys6fSBmYWxzZTsgdGhlbiA6DQog ICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2DQplbHNlDQogIGNhdCBjb25mZGVmcy5oIC0gPDxf QUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQNCi8qIGVuZCBjb25mZGVmcy5oLiAgKi8NCiNpZiBURVJN SU9TX05FRURTX1hPUEVOX1NPVVJDRQ0KI2RlZmluZSBfWE9QRU5fU09VUkNFDQojZW5kaWYNCiNp bmNsdWRlIDxzeXMvdHlwZXMuaD4NCiNpbmNsdWRlIDx0ZXJtaW9zLmg+DQppbnQNCm1haW4gKCkN CnsNCnN0cnVjdCB0ZXJtaW9zIHQ7IHJldHVybiAhc2l6ZW9mIHQuY19saW5lOw0KICA7DQogIHJl dHVybiAwOw0KfQ0KX0FDRU9GDQppZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6 DQogIHN1X2N2X3N5c19jX2xpbmVfaW5fdGVybWlvcz15ZXMNCmVsc2UNCiAgc3VfY3Zfc3lzX2Nf bGluZV9pbl90ZXJtaW9zPW5vDQpmaQ0Kcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3Qu JGFjX29iamV4dCBcDQogICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQNCmZp DQoNCiAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRz dV9jdl9zeXNfY19saW5lX2luX3Rlcm1pb3MiID4mNQ0KJGFzX2VjaG8gIiRzdV9jdl9zeXNfY19s aW5lX2luX3Rlcm1pb3MiID4mNjsgfQ0KICB0ZXN0ICRzdV9jdl9zeXNfY19saW5lX2luX3Rlcm1p b3MgPSB5ZXMgXA0KICAgICYmDQokYXNfZWNobyAiI2RlZmluZSBIQVZFX0NfTElORSAxIiA+PmNv bmZkZWZzLmgNCg0KZmkNCg0KIyBGSVhNRTogbm90ZSB0aGF0IHRoaXMgbWFjcm8gYXBwZWFycyBh Ym92ZSwgdG9vLg0KIyBJJ20gbGVhdmluZyBpdCBoZXJlIGZvciBub3cuICBUaGlzIHdob2xlIHRo aW5nIG5lZWRzIHRvIGJlIG1vZGVybml6ZWQuLi4NCg0KICAgeyAkYXNfZWNobyAiJGFzX21lOiR7 YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIHVzZSBvZiBzdHJ1Y3Qgd2luc2l6 ZSByZXF1aXJlcyBzeXMvcHRlbS5oIiA+JjUNCiRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIg dXNlIG9mIHN0cnVjdCB3aW5zaXplIHJlcXVpcmVzIHN5cy9wdGVtLmguLi4gIiA+JjY7IH0NCmlm ICR7Z2xfY3Zfc3lzX3N0cnVjdF93aW5zaXplX25lZWRzX3N5c19wdGVtX2grOn0gZmFsc2U7IHRo ZW4gOg0KICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNg0KZWxzZQ0KICBnbF9jdl9zeXNfc3Ry dWN0X3dpbnNpemVfbmVlZHNfc3lzX3B0ZW1faD15ZXMNCiAgICAgIGlmIHRlc3QgJGFjX2N2X3N5 c19wb3NpeF90ZXJtaW9zID0geWVzOyB0aGVuDQogICAgICAgIGNhdCBjb25mZGVmcy5oIC0gPDxf QUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQNCi8qIGVuZCBjb25mZGVmcy5oLiAgKi8NCiNpbmNsdWRl IDx0ZXJtaW9zLmg+DQppbnQNCm1haW4gKCkNCnsNCnN0cnVjdCB3aW5zaXplIHg7DQogICAgICAg ICAgICBpZiAoc2l6ZW9mIHggPiAwKSByZXR1cm4gMDsNCiAgOw0KICByZXR1cm4gMDsNCn0NCl9B Q0VPRg0KaWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOg0KICBnbF9jdl9z eXNfc3RydWN0X3dpbnNpemVfbmVlZHNfc3lzX3B0ZW1faD1ubw0KZmkNCnJtIC1mIGNvcmUgY29u ZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dA0KICAgICAgZmkN CiAgICAgIGlmIHRlc3QgJGdsX2N2X3N5c19zdHJ1Y3Rfd2luc2l6ZV9uZWVkc19zeXNfcHRlbV9o ID0geWVzOyB0aGVuDQogICAgICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0 LiRhY19leHQNCi8qIGVuZCBjb25mZGVmcy5oLiAgKi8NCiNpbmNsdWRlIDxzeXMvcHRlbS5oPg0K aW50DQptYWluICgpDQp7DQpzdHJ1Y3Qgd2luc2l6ZSB4Ow0KICAgICAgICAgICAgaWYgKHNpemVv ZiB4ID4gMCkgcmV0dXJuIDA7DQogIDsNCiAgcmV0dXJuIDA7DQp9DQpfQUNFT0YNCmlmIGFjX2Zu X2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoNCg0KZWxzZQ0KICBnbF9jdl9zeXNfc3Ry dWN0X3dpbnNpemVfbmVlZHNfc3lzX3B0ZW1faD1ubw0KZmkNCnJtIC1mIGNvcmUgY29uZnRlc3Qu ZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dA0KICAgICAgZmkNCmZpDQp7 ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGdsX2N2X3N5 c19zdHJ1Y3Rfd2luc2l6ZV9uZWVkc19zeXNfcHRlbV9oIiA+JjUNCiRhc19lY2hvICIkZ2xfY3Zf c3lzX3N0cnVjdF93aW5zaXplX25lZWRzX3N5c19wdGVtX2giID4mNjsgfQ0KICAgaWYgdGVzdCAk Z2xfY3Zfc3lzX3N0cnVjdF93aW5zaXplX25lZWRzX3N5c19wdGVtX2ggPSB5ZXM7IHRoZW4NCg0K JGFzX2VjaG8gIiNkZWZpbmUgV0lOU0laRV9JTl9QVEVNIDEiID4+Y29uZmRlZnMuaA0KDQogICBm aQ0KDQoNCiB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5n IHdoZXRoZXIgdXNlIG9mIFRJT0NHV0lOU1ogcmVxdWlyZXMgdGVybWlvcy5oIiA+JjUNCiRhc19l Y2hvX24gImNoZWNraW5nIHdoZXRoZXIgdXNlIG9mIFRJT0NHV0lOU1ogcmVxdWlyZXMgdGVybWlv cy5oLi4uICIgPiY2OyB9DQppZiAke2dsX2N2X3N5c190aW9jZ3dpbnN6X25lZWRzX3Rlcm1pb3Nf aCs6fSBmYWxzZTsgdGhlbiA6DQogICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2DQplbHNlDQog IGdsX2N2X3N5c190aW9jZ3dpbnN6X25lZWRzX3Rlcm1pb3NfaD1ubw0KDQogICBpZiB0ZXN0ICRh Y19jdl9zeXNfcG9zaXhfdGVybWlvcyA9IHllczsgdGhlbg0KICAgICBjYXQgY29uZmRlZnMuaCAt IDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0DQovKiBlbmQgY29uZmRlZnMuaC4gICovDQojaW5j bHVkZSA8c3lzL3R5cGVzLmg+DQojICAgICAgaW5jbHVkZSA8dGVybWlvcy5oPg0KIyAgICAgIGlm ZGVmIFRJT0NHV0lOU1oNCiAgICAgICAgIHllcw0KIyAgICAgIGVuZGlmDQoNCl9BQ0VPRg0KaWYg KGV2YWwgIiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCIpIDI+JjUgfA0KICAkRUdSRVAgInllcyIg Pi9kZXYvbnVsbCAyPiYxOyB0aGVuIDoNCiAgZ2xfY3Zfc3lzX3Rpb2Nnd2luc3pfbmVlZHNfdGVy bWlvc19oPXllcw0KZmkNCnJtIC1mIGNvbmZ0ZXN0Kg0KDQogICBmaQ0KDQpmaQ0KeyAkYXNfZWNo byAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRnbF9jdl9zeXNfdGlvY2d3 aW5zel9uZWVkc190ZXJtaW9zX2giID4mNQ0KJGFzX2VjaG8gIiRnbF9jdl9zeXNfdGlvY2d3aW5z el9uZWVkc190ZXJtaW9zX2giID4mNjsgfQ0KDQoNCmlmIHRlc3QgJGdsX2N2X3N5c190aW9jZ3dp bnN6X25lZWRzX3Rlcm1pb3NfaCA9IG5vICYmIFwNCiAgIHRlc3QgJGdsX2N2X3N5c190aW9jZ3dp bnN6X25lZWRzX3N5c19pb2N0bF9oID0gbm87IHRoZW4NCiAgeyAkYXNfZWNobyAiJGFzX21lOiR7 YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBUSU9DR1dJTlNaIGluIHN5cy9wdHkuaCIgPiY1 DQokYXNfZWNob19uICJjaGVja2luZyBUSU9DR1dJTlNaIGluIHN5cy9wdHkuaC4uLiAiID4mNjsg fQ0KICBpZiAke3N1X2N2X3N5c190aW9jZ3dpbnN6X2luX3N5c19wdHlfaCs6fSBmYWxzZTsgdGhl biA6DQogICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2DQplbHNlDQogIGNhdCBjb25mZGVmcy5o IC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQNCi8qIGVuZCBjb25mZGVmcy5oLiAgKi8NCiNp bmNsdWRlIDxzeXMvdHlwZXMuaD4NCiNpZmRlZiBXSU5TSVpFX0lOX1BURU0NCiMgaW5jbHVkZSA8 c3lzL3N0cmVhbS5oPg0KIyBpbmNsdWRlIDxzeXMvcHRlbS5oPg0KI2VuZGlmDQojaW5jbHVkZSA8 c3lzL2lvY3RsLmg+DQojaW5jbHVkZSA8c3lzL3R0eS5oPg0KI2luY2x1ZGUgPHN5cy9wdHkuaD4N CmludA0KbWFpbiAoKQ0Kew0KaW50IHggPSBUSU9DR1dJTlNaOw0KICA7DQogIHJldHVybiAwOw0K fQ0KX0FDRU9GDQppZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6DQogIHN1X2N2 X3N5c190aW9jZ3dpbnN6X2luX3N5c19wdHlfaD15ZXMNCmVsc2UNCiAgc3VfY3Zfc3lzX3Rpb2Nn d2luc3pfaW5fc3lzX3B0eV9oPW5vDQpmaQ0Kcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRl c3QuJGFjX29iamV4dCBcDQogICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQN CmZpDQoNCiAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6 ICRzdV9jdl9zeXNfdGlvY2d3aW5zel9pbl9zeXNfcHR5X2giID4mNQ0KJGFzX2VjaG8gIiRzdV9j dl9zeXNfdGlvY2d3aW5zel9pbl9zeXNfcHR5X2giID4mNjsgfQ0KDQogIHRlc3QgJHN1X2N2X3N5 c190aW9jZ3dpbnN6X2luX3N5c19wdHlfaCA9IHllcyBcDQogICAgICAmJg0KJGFzX2VjaG8gIiNk ZWZpbmUgR1dJTlNaX0lOX1NZU19QVFkgMSIgPj5jb25mZGVmcy5oDQoNCmZpDQoNCiMgRm9yIHNy Yy9raWxsLmMuDQphY19mbl9jX2NoZWNrX2RlY2wgIiRMSU5FTk8iICJzdHJzaWduYWwiICJhY19j dl9oYXZlX2RlY2xfc3Ryc2lnbmFsIiAiJGFjX2luY2x1ZGVzX2RlZmF1bHQNCiNpbmNsdWRlIDxz aWduYWwuaD4NCiINCmlmIHRlc3QgIngkYWNfY3ZfaGF2ZV9kZWNsX3N0cnNpZ25hbCIgPSB4eWVz OyB0aGVuIDoNCiAgYWNfaGF2ZV9kZWNsPTENCmVsc2UNCiAgYWNfaGF2ZV9kZWNsPTANCmZpDQoN CmNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YNCiNkZWZpbmUgSEFWRV9ERUNMX1NUUlNJR05BTCAk YWNfaGF2ZV9kZWNsDQpfQUNFT0YNCmFjX2ZuX2NfY2hlY2tfZGVjbCAiJExJTkVOTyIgInN5c19z aWdsaXN0IiAiYWNfY3ZfaGF2ZV9kZWNsX3N5c19zaWdsaXN0IiAiJGFjX2luY2x1ZGVzX2RlZmF1 bHQNCiNpbmNsdWRlIDxzaWduYWwuaD4NCiINCmlmIHRlc3QgIngkYWNfY3ZfaGF2ZV9kZWNsX3N5 c19zaWdsaXN0IiA9IHh5ZXM7IHRoZW4gOg0KICBhY19oYXZlX2RlY2w9MQ0KZWxzZQ0KICBhY19o YXZlX2RlY2w9MA0KZmkNCg0KY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRg0KI2RlZmluZSBIQVZF X0RFQ0xfU1lTX1NJR0xJU1QgJGFjX2hhdmVfZGVjbA0KX0FDRU9GDQphY19mbl9jX2NoZWNrX2Rl Y2wgIiRMSU5FTk8iICJfc3lzX3NpZ2xpc3QiICJhY19jdl9oYXZlX2RlY2xfX3N5c19zaWdsaXN0 IiAiJGFjX2luY2x1ZGVzX2RlZmF1bHQNCiNpbmNsdWRlIDxzaWduYWwuaD4NCiINCmlmIHRlc3Qg IngkYWNfY3ZfaGF2ZV9kZWNsX19zeXNfc2lnbGlzdCIgPSB4eWVzOyB0aGVuIDoNCiAgYWNfaGF2 ZV9kZWNsPTENCmVsc2UNCiAgYWNfaGF2ZV9kZWNsPTANCmZpDQoNCmNhdCA+PmNvbmZkZWZzLmgg PDxfQUNFT0YNCiNkZWZpbmUgSEFWRV9ERUNMX19TWVNfU0lHTElTVCAkYWNfaGF2ZV9kZWNsDQpf QUNFT0YNCmFjX2ZuX2NfY2hlY2tfZGVjbCAiJExJTkVOTyIgIl9fc3lzX3NpZ2xpc3QiICJhY19j dl9oYXZlX2RlY2xfX19zeXNfc2lnbGlzdCIgIiRhY19pbmNsdWRlc19kZWZhdWx0DQojaW5jbHVk ZSA8c2lnbmFsLmg+DQoiDQppZiB0ZXN0ICJ4JGFjX2N2X2hhdmVfZGVjbF9fX3N5c19zaWdsaXN0 IiA9IHh5ZXM7IHRoZW4gOg0KICBhY19oYXZlX2RlY2w9MQ0KZWxzZQ0KICBhY19oYXZlX2RlY2w9 MA0KZmkNCg0KY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRg0KI2RlZmluZSBIQVZFX0RFQ0xfX19T WVNfU0lHTElTVCAkYWNfaGF2ZV9kZWNsDQpfQUNFT0YNCg0KDQoNCg0KICAjIENoZWNrIGZvciBs aWJ5cHNlYy5hIG9uIERvbHBoaW4gTTg4SyBtYWNoaW5lcy4NCiAgeyAkYXNfZWNobyAiJGFzX21l OiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgbWFpbiBpbiAtbHlwc2VjIiA+JjUN CiRhc19lY2hvX24gImNoZWNraW5nIGZvciBtYWluIGluIC1seXBzZWMuLi4gIiA+JjY7IH0NCmlm ICR7YWNfY3ZfbGliX3lwc2VjX21haW4rOn0gZmFsc2U7IHRoZW4gOg0KICAkYXNfZWNob19uICIo Y2FjaGVkKSAiID4mNg0KZWxzZQ0KICBhY19jaGVja19saWJfc2F2ZV9MSUJTPSRMSUJTDQpMSUJT PSItbHlwc2VjICAkTElCUyINCmNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRh Y19leHQNCi8qIGVuZCBjb25mZGVmcy5oLiAgKi8NCg0KDQppbnQNCm1haW4gKCkNCnsNCnJldHVy biBtYWluICgpOw0KICA7DQogIHJldHVybiAwOw0KfQ0KX0FDRU9GDQppZiBhY19mbl9jX3RyeV9s aW5rICIkTElORU5PIjsgdGhlbiA6DQogIGFjX2N2X2xpYl95cHNlY19tYWluPXllcw0KZWxzZQ0K ICBhY19jdl9saWJfeXBzZWNfbWFpbj1ubw0KZmkNCnJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNv bmZ0ZXN0LiRhY19vYmpleHQgXA0KICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNf ZXh0DQpMSUJTPSRhY19jaGVja19saWJfc2F2ZV9MSUJTDQpmaQ0KeyAkYXNfZWNobyAiJGFzX21l OiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9saWJfeXBzZWNfbWFpbiIgPiY1 DQokYXNfZWNobyAiJGFjX2N2X2xpYl95cHNlY19tYWluIiA+JjY7IH0NCmlmIHRlc3QgIngkYWNf Y3ZfbGliX3lwc2VjX21haW4iID0geHllczsgdGhlbiA6DQogIGNhdCA+PmNvbmZkZWZzLmggPDxf QUNFT0YNCiNkZWZpbmUgSEFWRV9MSUJZUFNFQyAxDQpfQUNFT0YNCg0KICBMSUJTPSItbHlwc2Vj ICRMSUJTIg0KDQpmaQ0KDQoNCiAgIyBtODhrIHJ1bm5pbmcgZGd1eCA1LjQgbmVlZHMgdGhpcw0K ICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBt YWluIGluIC1sbGRnYyIgPiY1DQokYXNfZWNob19uICJjaGVja2luZyBmb3IgbWFpbiBpbiAtbGxk Z2MuLi4gIiA+JjY7IH0NCmlmICR7YWNfY3ZfbGliX2xkZ2NfbWFpbis6fSBmYWxzZTsgdGhlbiA6 DQogICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2DQplbHNlDQogIGFjX2NoZWNrX2xpYl9zYXZl X0xJQlM9JExJQlMNCkxJQlM9Ii1sbGRnYyAgJExJQlMiDQpjYXQgY29uZmRlZnMuaCAtIDw8X0FD RU9GID5jb25mdGVzdC4kYWNfZXh0DQovKiBlbmQgY29uZmRlZnMuaC4gICovDQoNCg0KaW50DQpt YWluICgpDQp7DQpyZXR1cm4gbWFpbiAoKTsNCiAgOw0KICByZXR1cm4gMDsNCn0NCl9BQ0VPRg0K aWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOg0KICBhY19jdl9saWJfbGRnY19t YWluPXllcw0KZWxzZQ0KICBhY19jdl9saWJfbGRnY19tYWluPW5vDQpmaQ0Kcm0gLWYgY29yZSBj b25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcDQogICAgY29uZnRlc3QkYWNfZXhlZXh0 IGNvbmZ0ZXN0LiRhY19leHQNCkxJQlM9JGFjX2NoZWNrX2xpYl9zYXZlX0xJQlMNCmZpDQp7ICRh c19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X2xpYl9s ZGdjX21haW4iID4mNQ0KJGFzX2VjaG8gIiRhY19jdl9saWJfbGRnY19tYWluIiA+JjY7IH0NCmlm IHRlc3QgIngkYWNfY3ZfbGliX2xkZ2NfbWFpbiIgPSB4eWVzOyB0aGVuIDoNCiAgY2F0ID4+Y29u ZmRlZnMuaCA8PF9BQ0VPRg0KI2RlZmluZSBIQVZFX0xJQkxER0MgMQ0KX0FDRU9GDQoNCiAgTElC Uz0iLWxsZGdjICRMSUJTIg0KDQpmaQ0KDQoNCiAgIyBUaGUgLWxzdW4gbGlicmFyeSBpcyByZXF1 aXJlZCBmb3IgWVAgc3VwcG9ydCBvbiBJcml4LTQuMC41IHN5c3RlbXMuDQogICMgbTg4ay9zdnIz IERvbHBoaW5PUyBzeXN0ZW1zIHVzaW5nIFlQIG5lZWQgLWx5cHNlYyBmb3IgaWQuDQogIHsgJGFz X2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIGxpYnJhcnkg Y29udGFpbmluZyB5cF9tYXRjaCIgPiY1DQokYXNfZWNob19uICJjaGVja2luZyBmb3IgbGlicmFy eSBjb250YWluaW5nIHlwX21hdGNoLi4uICIgPiY2OyB9DQppZiAke2FjX2N2X3NlYXJjaF95cF9t YXRjaCs6fSBmYWxzZTsgdGhlbiA6DQogICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2DQplbHNl DQogIGFjX2Z1bmNfc2VhcmNoX3NhdmVfTElCUz0kTElCUw0KY2F0IGNvbmZkZWZzLmggLSA8PF9B Q0VPRiA+Y29uZnRlc3QuJGFjX2V4dA0KLyogZW5kIGNvbmZkZWZzLmguICAqLw0KDQovKiBPdmVy cmlkZSBhbnkgR0NDIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4NCiAgIFVz ZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIEdDQw0K ICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFw cGx5LiAgKi8NCiNpZmRlZiBfX2NwbHVzcGx1cw0KZXh0ZXJuICJDIg0KI2VuZGlmDQpjaGFyIHlw X21hdGNoICgpOw0KaW50DQptYWluICgpDQp7DQpyZXR1cm4geXBfbWF0Y2ggKCk7DQogIDsNCiAg cmV0dXJuIDA7DQp9DQpfQUNFT0YNCmZvciBhY19saWIgaW4gJycgc3VuIHlwc2VjOyBkbw0KICBp ZiB0ZXN0IC16ICIkYWNfbGliIjsgdGhlbg0KICAgIGFjX3Jlcz0ibm9uZSByZXF1aXJlZCINCiAg ZWxzZQ0KICAgIGFjX3Jlcz0tbCRhY19saWINCiAgICBMSUJTPSItbCRhY19saWIgICRhY19mdW5j X3NlYXJjaF9zYXZlX0xJQlMiDQogIGZpDQogIGlmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8i OyB0aGVuIDoNCiAgYWNfY3Zfc2VhcmNoX3lwX21hdGNoPSRhY19yZXMNCmZpDQpybSAtZiBjb3Jl IGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwNCiAgICBjb25mdGVzdCRhY19leGVl eHQNCiAgaWYgJHthY19jdl9zZWFyY2hfeXBfbWF0Y2grOn0gZmFsc2U7IHRoZW4gOg0KICBicmVh aw0KZmkNCmRvbmUNCmlmICR7YWNfY3Zfc2VhcmNoX3lwX21hdGNoKzp9IGZhbHNlOyB0aGVuIDoN Cg0KZWxzZQ0KICBhY19jdl9zZWFyY2hfeXBfbWF0Y2g9bm8NCmZpDQpybSBjb25mdGVzdC4kYWNf ZXh0DQpMSUJTPSRhY19mdW5jX3NlYXJjaF9zYXZlX0xJQlMNCmZpDQp7ICRhc19lY2hvICIkYXNf bWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X3NlYXJjaF95cF9tYXRjaCIg PiY1DQokYXNfZWNobyAiJGFjX2N2X3NlYXJjaF95cF9tYXRjaCIgPiY2OyB9DQphY19yZXM9JGFj X2N2X3NlYXJjaF95cF9tYXRjaA0KaWYgdGVzdCAiJGFjX3JlcyIgIT0gbm87IHRoZW4gOg0KICB0 ZXN0ICIkYWNfcmVzIiA9ICJub25lIHJlcXVpcmVkIiB8fCBMSUJTPSIkYWNfcmVzICRMSUJTIg0K DQpmaQ0KDQoNCiAgIyBTeXNWIG5lZWRzIC1sc2VjLCBvbGRlciB2ZXJzaW9ucyBvZiBMaW51eCBu ZWVkIC1sc2hhZG93IGZvcg0KICAjIHNoYWRvdyBwYXNzd29yZHMuICBVbml4V2FyZSA3IG5lZWRz IC1sZ2VuLg0KICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNr aW5nIGZvciBsaWJyYXJ5IGNvbnRhaW5pbmcgZ2V0c3BuYW0iID4mNQ0KJGFzX2VjaG9fbiAiY2hl Y2tpbmcgZm9yIGxpYnJhcnkgY29udGFpbmluZyBnZXRzcG5hbS4uLiAiID4mNjsgfQ0KaWYgJHth Y19jdl9zZWFyY2hfZ2V0c3BuYW0rOn0gZmFsc2U7IHRoZW4gOg0KICAkYXNfZWNob19uICIoY2Fj aGVkKSAiID4mNg0KZWxzZQ0KICBhY19mdW5jX3NlYXJjaF9zYXZlX0xJQlM9JExJQlMNCmNhdCBj b25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQNCi8qIGVuZCBjb25mZGVmcy5o LiAgKi8NCg0KLyogT3ZlcnJpZGUgYW55IEdDQyBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQg YW4gZXJyb3IuDQogICBVc2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJu IHR5cGUgb2YgYSBHQ0MNCiAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlw ZSB3b3VsZCBzdGlsbCBhcHBseS4gICovDQojaWZkZWYgX19jcGx1c3BsdXMNCmV4dGVybiAiQyIN CiNlbmRpZg0KY2hhciBnZXRzcG5hbSAoKTsNCmludA0KbWFpbiAoKQ0Kew0KcmV0dXJuIGdldHNw bmFtICgpOw0KICA7DQogIHJldHVybiAwOw0KfQ0KX0FDRU9GDQpmb3IgYWNfbGliIGluICcnIHNo YWRvdyBzZWMgZ2VuOyBkbw0KICBpZiB0ZXN0IC16ICIkYWNfbGliIjsgdGhlbg0KICAgIGFjX3Jl cz0ibm9uZSByZXF1aXJlZCINCiAgZWxzZQ0KICAgIGFjX3Jlcz0tbCRhY19saWINCiAgICBMSUJT PSItbCRhY19saWIgICRhY19mdW5jX3NlYXJjaF9zYXZlX0xJQlMiDQogIGZpDQogIGlmIGFjX2Zu X2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoNCiAgYWNfY3Zfc2VhcmNoX2dldHNwbmFtPSRh Y19yZXMNCmZpDQpybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwN CiAgICBjb25mdGVzdCRhY19leGVleHQNCiAgaWYgJHthY19jdl9zZWFyY2hfZ2V0c3BuYW0rOn0g ZmFsc2U7IHRoZW4gOg0KICBicmVhaw0KZmkNCmRvbmUNCmlmICR7YWNfY3Zfc2VhcmNoX2dldHNw bmFtKzp9IGZhbHNlOyB0aGVuIDoNCg0KZWxzZQ0KICBhY19jdl9zZWFyY2hfZ2V0c3BuYW09bm8N CmZpDQpybSBjb25mdGVzdC4kYWNfZXh0DQpMSUJTPSRhY19mdW5jX3NlYXJjaF9zYXZlX0xJQlMN CmZpDQp7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFj X2N2X3NlYXJjaF9nZXRzcG5hbSIgPiY1DQokYXNfZWNobyAiJGFjX2N2X3NlYXJjaF9nZXRzcG5h bSIgPiY2OyB9DQphY19yZXM9JGFjX2N2X3NlYXJjaF9nZXRzcG5hbQ0KaWYgdGVzdCAiJGFjX3Jl cyIgIT0gbm87IHRoZW4gOg0KICB0ZXN0ICIkYWNfcmVzIiA9ICJub25lIHJlcXVpcmVkIiB8fCBM SUJTPSIkYWNfcmVzICRMSUJTIg0KDQpmaQ0KDQoNCiAgZm9yIGFjX2hlYWRlciBpbiBzaGFkb3cu aA0KZG8gOg0KICBhY19mbl9jX2NoZWNrX2hlYWRlcl9tb25ncmVsICIkTElORU5PIiAic2hhZG93 LmgiICJhY19jdl9oZWFkZXJfc2hhZG93X2giICIkYWNfaW5jbHVkZXNfZGVmYXVsdCINCmlmIHRl c3QgIngkYWNfY3ZfaGVhZGVyX3NoYWRvd19oIiA9IHh5ZXM7IHRoZW4gOg0KICBjYXQgPj5jb25m ZGVmcy5oIDw8X0FDRU9GDQojZGVmaW5lIEhBVkVfU0hBRE9XX0ggMQ0KX0FDRU9GDQoNCmZpDQoN CmRvbmUNCg0KDQogICMgUmVxdWlyZW1lbnRzIGZvciBzdS5jLg0KICBzaGFkb3dfaW5jbHVkZXM9 IlwNCiRhY19pbmNsdWRlc19kZWZhdWx0DQojaWYgSEFWRV9TSEFET1dfSA0KIyBpbmNsdWRlIDxz aGFkb3cuaD4NCiNlbmRpZg0KIg0KICBhY19mbl9jX2NoZWNrX21lbWJlciAiJExJTkVOTyIgInN0 cnVjdCBzcHdkIiAic3BfcHdkcCIgImFjX2N2X21lbWJlcl9zdHJ1Y3Rfc3B3ZF9zcF9wd2RwIiAi JHNoYWRvd19pbmNsdWRlcw0KIg0KaWYgdGVzdCAieCRhY19jdl9tZW1iZXJfc3RydWN0X3Nwd2Rf c3BfcHdkcCIgPSB4eWVzOyB0aGVuIDoNCg0KY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRg0KI2Rl ZmluZSBIQVZFX1NUUlVDVF9TUFdEX1NQX1BXRFAgMQ0KX0FDRU9GDQoNCg0KZmkNCg0KICBmb3Ig YWNfZnVuYyBpbiBnZXRzcG5hbQ0KZG8gOg0KICBhY19mbl9jX2NoZWNrX2Z1bmMgIiRMSU5FTk8i ICJnZXRzcG5hbSIgImFjX2N2X2Z1bmNfZ2V0c3BuYW0iDQppZiB0ZXN0ICJ4JGFjX2N2X2Z1bmNf Z2V0c3BuYW0iID0geHllczsgdGhlbiA6DQogIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YNCiNk ZWZpbmUgSEFWRV9HRVRTUE5BTSAxDQpfQUNFT0YNCg0KZmkNCmRvbmUNCg0KDQogICMgU0NPLU9E VC0zLjAgaXMgcmVwb3J0ZWQgdG8gbmVlZCAtbHVmYyBmb3IgY3J5cHQuDQogICMgTmV0QlNEIG5l ZWRzIC1sY3J5cHQgZm9yIGNyeXB0Lg0KICBMSUJfQ1JZUFQ9DQogIGN1X3NhdmVkX2xpYnM9IiRM SUJTIg0KICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5n IGZvciBsaWJyYXJ5IGNvbnRhaW5pbmcgY3J5cHQiID4mNQ0KJGFzX2VjaG9fbiAiY2hlY2tpbmcg Zm9yIGxpYnJhcnkgY29udGFpbmluZyBjcnlwdC4uLiAiID4mNjsgfQ0KaWYgJHthY19jdl9zZWFy Y2hfY3J5cHQrOn0gZmFsc2U7IHRoZW4gOg0KICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNg0K ZWxzZQ0KICBhY19mdW5jX3NlYXJjaF9zYXZlX0xJQlM9JExJQlMNCmNhdCBjb25mZGVmcy5oIC0g PDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQNCi8qIGVuZCBjb25mZGVmcy5oLiAgKi8NCg0KLyog T3ZlcnJpZGUgYW55IEdDQyBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuDQog ICBVc2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBH Q0MNCiAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGls bCBhcHBseS4gICovDQojaWZkZWYgX19jcGx1c3BsdXMNCmV4dGVybiAiQyINCiNlbmRpZg0KY2hh ciBjcnlwdCAoKTsNCmludA0KbWFpbiAoKQ0Kew0KcmV0dXJuIGNyeXB0ICgpOw0KICA7DQogIHJl dHVybiAwOw0KfQ0KX0FDRU9GDQpmb3IgYWNfbGliIGluICcnIHVmYyBjcnlwdDsgZG8NCiAgaWYg dGVzdCAteiAiJGFjX2xpYiI7IHRoZW4NCiAgICBhY19yZXM9Im5vbmUgcmVxdWlyZWQiDQogIGVs c2UNCiAgICBhY19yZXM9LWwkYWNfbGliDQogICAgTElCUz0iLWwkYWNfbGliICAkYWNfZnVuY19z ZWFyY2hfc2F2ZV9MSUJTIg0KICBmaQ0KICBpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsg dGhlbiA6DQogIGFjX2N2X3NlYXJjaF9jcnlwdD0kYWNfcmVzDQpmaQ0Kcm0gLWYgY29yZSBjb25m dGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcDQogICAgY29uZnRlc3QkYWNfZXhlZXh0DQog IGlmICR7YWNfY3Zfc2VhcmNoX2NyeXB0Kzp9IGZhbHNlOyB0aGVuIDoNCiAgYnJlYWsNCmZpDQpk b25lDQppZiAke2FjX2N2X3NlYXJjaF9jcnlwdCs6fSBmYWxzZTsgdGhlbiA6DQoNCmVsc2UNCiAg YWNfY3Zfc2VhcmNoX2NyeXB0PW5vDQpmaQ0Kcm0gY29uZnRlc3QuJGFjX2V4dA0KTElCUz0kYWNf ZnVuY19zZWFyY2hfc2F2ZV9MSUJTDQpmaQ0KeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5v LSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9zZWFyY2hfY3J5cHQiID4mNQ0KJGFzX2VjaG8gIiRh Y19jdl9zZWFyY2hfY3J5cHQiID4mNjsgfQ0KYWNfcmVzPSRhY19jdl9zZWFyY2hfY3J5cHQNCmlm IHRlc3QgIiRhY19yZXMiICE9IG5vOyB0aGVuIDoNCiAgdGVzdCAiJGFjX3JlcyIgPSAibm9uZSBy ZXF1aXJlZCIgfHwgTElCUz0iJGFjX3JlcyAkTElCUyINCiAgdGVzdCAiJGFjX2N2X3NlYXJjaF9j cnlwdCIgPSAibm9uZSByZXF1aXJlZCIgfHwNCiAgICAgICAgICAgICAgICAgIExJQl9DUllQVD0i JGFjX2N2X3NlYXJjaF9jcnlwdCINCmZpDQoNCiAgTElCUz0iJGN1X3NhdmVkX2xpYnMiDQoNCg0K DQogIExJQl9HTVA9DQoNCg0KDQojIENoZWNrIHdoZXRoZXIgLS13aXRoLWdtcCB3YXMgZ2l2ZW4u DQppZiB0ZXN0ICIke3dpdGhfZ21wK3NldH0iID0gc2V0OyB0aGVuIDoNCiAgd2l0aHZhbD0kd2l0 aF9nbXA7IGN1X3VzZV9nbXA9JHdpdGh2YWwNCmVsc2UNCiAgY3VfdXNlX2dtcD1hdXRvDQpmaQ0K DQoNCiAgaWYgdGVzdCAkY3VfdXNlX2dtcCAhPSBubzsgdGhlbg0KICAgIGN1X3NhdmVkX2xpYnM9 JExJQlMNCiAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNr aW5nIGZvciBsaWJyYXJ5IGNvbnRhaW5pbmcgX19nbXB6X2luaXQiID4mNQ0KJGFzX2VjaG9fbiAi Y2hlY2tpbmcgZm9yIGxpYnJhcnkgY29udGFpbmluZyBfX2dtcHpfaW5pdC4uLiAiID4mNjsgfQ0K aWYgJHthY19jdl9zZWFyY2hfX19nbXB6X2luaXQrOn0gZmFsc2U7IHRoZW4gOg0KICAkYXNfZWNo b19uICIoY2FjaGVkKSAiID4mNg0KZWxzZQ0KICBhY19mdW5jX3NlYXJjaF9zYXZlX0xJQlM9JExJ QlMNCmNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQNCi8qIGVuZCBj b25mZGVmcy5oLiAgKi8NCg0KLyogT3ZlcnJpZGUgYW55IEdDQyBpbnRlcm5hbCBwcm90b3R5cGUg dG8gYXZvaWQgYW4gZXJyb3IuDQogICBVc2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0 aGUgcmV0dXJuIHR5cGUgb2YgYSBHQ0MNCiAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50 IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovDQojaWZkZWYgX19jcGx1c3BsdXMNCmV4 dGVybiAiQyINCiNlbmRpZg0KY2hhciBfX2dtcHpfaW5pdCAoKTsNCmludA0KbWFpbiAoKQ0Kew0K cmV0dXJuIF9fZ21wel9pbml0ICgpOw0KICA7DQogIHJldHVybiAwOw0KfQ0KX0FDRU9GDQpmb3Ig YWNfbGliIGluICcnIGdtcDsgZG8NCiAgaWYgdGVzdCAteiAiJGFjX2xpYiI7IHRoZW4NCiAgICBh Y19yZXM9Im5vbmUgcmVxdWlyZWQiDQogIGVsc2UNCiAgICBhY19yZXM9LWwkYWNfbGliDQogICAg TElCUz0iLWwkYWNfbGliICAkYWNfZnVuY19zZWFyY2hfc2F2ZV9MSUJTIg0KICBmaQ0KICBpZiBh Y19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6DQogIGFjX2N2X3NlYXJjaF9fX2dtcHpf aW5pdD0kYWNfcmVzDQpmaQ0Kcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29i amV4dCBcDQogICAgY29uZnRlc3QkYWNfZXhlZXh0DQogIGlmICR7YWNfY3Zfc2VhcmNoX19fZ21w el9pbml0Kzp9IGZhbHNlOyB0aGVuIDoNCiAgYnJlYWsNCmZpDQpkb25lDQppZiAke2FjX2N2X3Nl YXJjaF9fX2dtcHpfaW5pdCs6fSBmYWxzZTsgdGhlbiA6DQoNCmVsc2UNCiAgYWNfY3Zfc2VhcmNo X19fZ21wel9pbml0PW5vDQpmaQ0Kcm0gY29uZnRlc3QuJGFjX2V4dA0KTElCUz0kYWNfZnVuY19z ZWFyY2hfc2F2ZV9MSUJTDQpmaQ0KeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5F Tk99OiByZXN1bHQ6ICRhY19jdl9zZWFyY2hfX19nbXB6X2luaXQiID4mNQ0KJGFzX2VjaG8gIiRh Y19jdl9zZWFyY2hfX19nbXB6X2luaXQiID4mNjsgfQ0KYWNfcmVzPSRhY19jdl9zZWFyY2hfX19n bXB6X2luaXQNCmlmIHRlc3QgIiRhY19yZXMiICE9IG5vOyB0aGVuIDoNCiAgdGVzdCAiJGFjX3Jl cyIgPSAibm9uZSByZXF1aXJlZCIgfHwgTElCUz0iJGFjX3JlcyAkTElCUyINCiAgdGVzdCAiJGFj X2N2X3NlYXJjaF9fX2dtcHpfaW5pdCIgPSAibm9uZSByZXF1aXJlZCIgfHwNCiAgICAgICB7DQog ICAgICAgIExJQl9HTVA9JGFjX2N2X3NlYXJjaF9fX2dtcHpfaW5pdA0KDQokYXNfZWNobyAiI2Rl ZmluZSBIQVZFX0dNUCAxIiA+PmNvbmZkZWZzLmgNCg0KICAgICAgIH0NCmVsc2UNCiAgeyAkYXNf ZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiBsaWJnbXAgZGV2ZWxv cG1lbnQgbGlicmFyeSB3YXMgbm90IGZvdW5kIG9yIG5vdCB1c2FibGUuIiA+JjUNCiRhc19lY2hv ICIkYXNfbWU6IFdBUk5JTkc6IGxpYmdtcCBkZXZlbG9wbWVudCBsaWJyYXJ5IHdhcyBub3QgZm91 bmQgb3Igbm90IHVzYWJsZS4iID4mMjt9DQogICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNf bGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiBHTlUgY29yZXV0aWxzIHdpbGwgYmUgYnVpbHQgd2l0 aG91dCBHTVAgc3VwcG9ydC4iID4mNQ0KJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogR05VIGNv cmV1dGlscyB3aWxsIGJlIGJ1aWx0IHdpdGhvdXQgR01QIHN1cHBvcnQuIiA+JjI7fQ0KZmkNCg0K ICAgIExJQlM9JGN1X3NhdmVkX2xpYnMNCiAgZmkNCg0KDQojIEJ1aWxkIGRmIG9ubHkgaWYgdGhl cmUncyBhIHBvaW50IHRvIGl0Lg0KaWYgdGVzdCAkZ2xfY3ZfbGlzdF9tb3VudGVkX2ZzID0geWVz ICYmIHRlc3QgJGdsX2N2X2ZzX3NwYWNlID0geWVzOyB0aGVuDQogIHsNCiAgaWYgdGVzdCAteiAi JG9wdGlvbmFsX2Jpbl9wcm9ncyI7IHRoZW4NCiAgICBvcHRpb25hbF9iaW5fcHJvZ3M9ZGYNCiAg ZWxzZQ0KICAgIG9wdGlvbmFsX2Jpbl9wcm9ncz0iJG9wdGlvbmFsX2Jpbl9wcm9ncyBkZiINCiAg ZmkNCn0NCmZpDQoNCiMgTGltaXQgc3RkYnVmIHRvIEVMRiBzeXN0ZW1zIHdpdGggR0NDDQp7ICRh c19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgdGhp cyBpcyBhbiBFTEYgc3lzdGVtIiA+JjUNCiRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgdGhp cyBpcyBhbiBFTEYgc3lzdGVtLi4uICIgPiY2OyB9DQpjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9G ID5jb25mdGVzdC4kYWNfZXh0DQovKiBlbmQgY29uZmRlZnMuaC4gICovDQojaWYgX19FTEZfXw0K eWVzDQojZW5kaWYNCl9BQ0VPRg0KaWYgKGV2YWwgIiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCIp IDI+JjUgfA0KICAkRUdSRVAgInllcyIgPi9kZXYvbnVsbCAyPiYxOyB0aGVuIDoNCiAgZWxmX3N5 cz15ZXMNCmVsc2UNCiAgZWxmX3N5cz1ubw0KZmkNCnJtIC1mIGNvbmZ0ZXN0Kg0KDQp7ICRhc19l Y2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGVsZl9zeXMiID4mNQ0K JGFzX2VjaG8gIiRlbGZfc3lzIiA+JjY7IH0NCmlmIHRlc3QgIiRlbGZfc3lzIiA9ICJ5ZXMiICYm IFwNCiAgIHRlc3QgIiRHQ0MiID0gInllcyI7IHRoZW4NCiAgew0KICBpZiB0ZXN0IC16ICIkb3B0 aW9uYWxfYmluX3Byb2dzIjsgdGhlbg0KICAgIG9wdGlvbmFsX2Jpbl9wcm9ncz1zdGRidWYNCiAg ZWxzZQ0KICAgIG9wdGlvbmFsX2Jpbl9wcm9ncz0iJG9wdGlvbmFsX2Jpbl9wcm9ncyBzdGRidWYi DQogIGZpDQp9DQpmaQ0KDQojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQptaz0iJHNyY2Rpci9zcmMvTWFr ZWZpbGUuYW0iDQojIEV4dHJhY3QgYWxsIGxpdGVyYWwgbmFtZXMgZnJvbSB0aGUgZGVmaW5pdGlv biBvZiAkKEVYVFJBX1BST0dSQU1TKQ0KIyBpbiAkbWsgYnV0IGRvbid0IGV4cGFuZCB0aGUgdmFy aWFibGUgcmVmZXJlbmNlcy4NCiMgQXBwZW5kIGVhY2ggbGl0ZXJhbCBuYW1lIHRvICRvcHRpb25h bF9iaW5fcHJvZ3MuDQp2PUVYVFJBX1BST0dSQU1TDQpmb3IgZ2xfaSBpbiBgc2VkIC1uICcvXick dicgPS8sL1teXF0kL3AnICRtayBcDQogICAgfCBzZWQgJ3MvXiAgKi8vOy9eXCQuKi9kOy9eJyR2 JyA9L2QnIFwNCiAgICB8IHRyIC1zICdcXDAxNVxcMDEyXFxcXCcgJyAgICdgOyBkbw0KICB7DQog IGlmIHRlc3QgLXogIiRvcHRpb25hbF9iaW5fcHJvZ3MiOyB0aGVuDQogICAgb3B0aW9uYWxfYmlu X3Byb2dzPSRnbF9pDQogIGVsc2UNCiAgICBvcHRpb25hbF9iaW5fcHJvZ3M9IiRvcHRpb25hbF9i aW5fcHJvZ3MgJGdsX2kiDQogIGZpDQp9DQpkb25lDQoNCiMgQXMgYWJvdmUsIGV4dHJhY3QgbGl0 ZXJhbCBuYW1lcyBmcm9tIHRoZSBkZWZpbml0aW9uIG9mICQobm9faW5zdGFsbF9fcHJvZ3MpDQoj IGluICRtayBidXQgZG9uJ3QgZXhwYW5kIHRoZSB2YXJpYWJsZSByZWZlcmVuY2VzLg0Kdj1ub19p bnN0YWxsX19wcm9ncw0KdD1gc2VkIC1uICcvXickdicgPS8sL1teXF0kL3AnICRtayBcDQogICAg fCBzZWQgJ3MvXiAgKi8vOy9eXCQuKi9kOy9eJyR2JyA9L2QnIFwNCiAgICB8IHRyIC1zICdcXDAx NVxcMDEyXFxcXCcgJyAgICdgDQojIFJlbW92ZSBhbnkgdHJhaWxpbmcgc3BhY2UuDQpub19pbnN0 YWxsX3Byb2dzX2RlZmF1bHQ9YGVjaG8gIiR0InxzZWQgJ3MvICQvLydgDQoNCiMgVW5mb3J0dW5h dGVseSwgZHVlIHRvIHRoZSB3YXkgYXV0b2NvbmYncyBBU19IRUxQX1NUUklORyB3b3JrcywgdGhl IGxpc3QNCiMgb2YgZGVmYXVsdC1ub3QtaW5zdGFsbGVkIHByb2dyYW1zLCAiYXJjaCBob3N0bmFt ZSBzdSIsIG11c3QgYXBwZWFyIGluIHR3bw0KIyBwbGFjZXM6IGluIHRoaXMgZmlsZSBiZWxvdywg YW5kIGluICRtay4gIFVzaW5nICIkbm9faW5zdGFsbF9wcm9nc19kZWZhdWx0Ig0KIyBiZWxvdyBj YW5ub3Qgd29yay4gIEFuZCB3ZSBjYW4ndCBzdWJzdGl0dXRlIHRoZSBuYW1lcyBpbnRvICRtayBi ZWNhdXNlDQojIGF1dG9tYWtlIG5lZWRzIHRoZSBsaXRlcmFscywgdG9vLg0KIyBUaGUgY29tcHJv bWlzZSBpcyB0byBlbnN1cmUgdGhhdCB0aGUgc3BhY2Utc2VwYXJhdGVkIGxpc3QgZXh0cmFjdGVk DQojIGFib3ZlIG1hdGNoZXMgdGhlIGxpdGVyYWwgMm5kIGFyZ3VtZW50IGJlbG93Lg0KYz0iJHNy Y2Rpci9jb25maWd1cmUuYWMiDQpyZT0nXmcnJ2xfSU5DTFVERV9FWENMVURFX1BST0coLiogXFtc KC4qXClcXSknDQp0PWBzZWQgLW4gJy8nIiRyZSInL3tzLyciJHJlIicvXDEvO3MvLC8gL2dwDQp9 JyAkY2ANCmNhc2UgJHQgaW4NCiAgJG5vX2luc3RhbGxfcHJvZ3NfZGVmYXVsdCkgOzsNCiAgKikg YXNfZm5fZXJyb3IgMSAiaW50ZXJuYWwgZXJyb3I6IGcnbF9JTkNMVURFX0VYQ0xVREVfUFJPRydz IDJuZCBhcmcsICR0LA0KICAgICAgICAgICAgICAgICAgIGRvZXMgbm90IG1hdGNoIHRoZSBsaXN0 IG9mIGRlZmF1bHQtbm90LWluc3RhbGxlZCBwcm9ncmFtcw0KICAgICAgICAgICAgICAgICAgICgk bm9faW5zdGFsbF9wcm9nc19kZWZhdWx0KSBhbHNvIHJlY29yZGVkIGluICRtayIgIiRMSU5FTk8i IDUgOzsNCmVzYWMNCg0KIyBHaXZlbiB0aGUgbmFtZSBvZiBhIHZhcmlhYmxlIGNvbnRhaW5pbmcg YSBzcGFjZS1zZXBhcmF0ZWQgbGlzdCBvZg0KIyBpbnN0YWxsLWJ5LWRlZmF1bHQgcHJvZ3JhbXMg YW5kIHRoZSBhY3R1YWwgbGlzdCBkby1ub3QtaW5zdGFsbC1ieS1kZWZhdWx0DQojIHByb2dyYW1z LCBtb2RpZnkgdGhlIGZvcm1lciB2YXJpYWJsZSB0byByZWZsZWN0IGFueSAiZG8taW5zdGFsbCIg YW5kDQojICJkb24ndC1pbnN0YWxsIiByZXF1ZXN0cy4NCiMgSS5lLiwgYWRkIGFueSBwcm9ncmFt IG5hbWUgc3BlY2lmaWVkIHZpYSAtLWVuYWJsZS1pbnN0YWxsLXByb2dyYW09Li4uLCBhbmQNCiMg cmVtb3ZlIGFueSBwcm9ncmFtIG5hbWUgc3BlY2lmaWVkIHZpYSAtLWVuYWJsZS1uby1pbnN0YWxs LXByb2dyYW09Li4uDQojIE5vdGUgaG93IHRoZSBzZWNvbmQgYXJndW1lbnQgYmVsb3cgaXMgYSBs aXRlcmFsLCB3aXRoICIsIiBzZXBhcmF0b3JzLg0KIyBUaGF0IGlzIHJlcXVpcmVkIGR1ZSB0byB0 aGUgd2F5IHRoZSBtYWNybyB3b3JrcywgYW5kIHNpbmNlIHRoZQ0KIyBjb3JyZXNwb25kaW5nIC4v Y29uZmlndXJlIG9wdGlvbiBhcmd1bWVudCBpcyBjb21tYS1zZXBhcmF0ZWQgb24gaW5wdXQuDQp7 DQogIGdsX25vX2luc3RhbGxfcHJvZ3NfZGVmYXVsdD1gZWNobyAnYXJjaCxob3N0bmFtZSxzdSd8 c2VkICdzLywvIC9nJ2ANCiAgIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLWluc3RhbGwtcHJvZ3Jh bSB3YXMgZ2l2ZW4uDQppZiB0ZXN0ICIke2VuYWJsZV9pbnN0YWxsX3Byb2dyYW0rc2V0fSIgPSBz ZXQ7IHRoZW4gOg0KICBlbmFibGV2YWw9JGVuYWJsZV9pbnN0YWxsX3Byb2dyYW07IGdsX2RvX2lu c3RhbGxfcHJvZz0kZW5hYmxldmFsDQplbHNlDQogIGdsX2RvX2luc3RhbGxfcHJvZz0NCg0KZmkN Cg0KDQogICMgSWYgeW91IHdhbnQgdG8gcmVmcmFpbiBmcm9tIGluc3RhbGxpbmcgcHJvZ3JhbXMg QSBhbmQgQiwNCiAgIyB1c2UgLS1lbmFibGUtbm8taW5zdGFsbC1wcm9ncmFtPUEsQg0KICAjIENo ZWNrIHdoZXRoZXIgLS1lbmFibGUtbm8taW5zdGFsbC1wcm9ncmFtIHdhcyBnaXZlbi4NCmlmIHRl c3QgIiR7ZW5hYmxlX25vX2luc3RhbGxfcHJvZ3JhbStzZXR9IiA9IHNldDsgdGhlbiA6DQogIGVu YWJsZXZhbD0kZW5hYmxlX25vX2luc3RhbGxfcHJvZ3JhbTsgZ2xfbm9faW5zdGFsbF9wcm9nPSRl bmFibGV2YWwNCmVsc2UNCiAgZ2xfbm9faW5zdGFsbF9wcm9nPQ0KDQpmaQ0KDQoNCiAgIyBDb252 ZXJ0IHRvIHNwYWNlIHNlcGFyYXRlZCBsaXN0cy4NCiAgZ2xfZG9faW5zdGFsbF9wcm9nPWBlY2hv ICIkZ2xfZG9faW5zdGFsbF9wcm9nInx0ciAtcyAsICcgJ2ANCiAgZ2xfbm9faW5zdGFsbF9wcm9n PWBlY2hvICIkZ2xfbm9faW5zdGFsbF9wcm9nInx0ciAtcyAsICcgJ2ANCg0KICAjIEZvciBlYWNo IG5vdC10by1iZS1pbnN0YWxsZWQgcHJvZ3JhbSBuYW1lLCBlbnN1cmUgdGhhdCBpdCdzIGENCiAg IyB2YWxpZCBuYW1lLCByZW1vdmUgaXQgZnJvbSB0aGUgbGlzdCBvZiBwcm9ncmFtcyB0byBidWls ZC9pbnN0YWxsLA0KICAjIGFzIHdlbGwgYXMgZnJvbSB0aGUgbGlzdCBvZiBtYW4gcGFnZXMgdG8g aW5zdGFsbC4NCiAgZm9yIGdsX2kgaW4gJGdsX25vX2luc3RhbGxfcHJvZzsgZG8NCg0KICAgICMg RmFpbCB1cG9uIGEgcmVxdWVzdCB0byBpbnN0YWxsIGFuZCBub3QtaW5zdGFsbCB0aGUgc2FtZSBw cm9ncmFtLg0KICAgIGNhc2UgIiAkZ2xfZG9faW5zdGFsbF9wcm9nICIgaW4NCiAgICAgICoiICRn bF9pICIqKSBhc19mbl9lcnJvciAkPyAiJyRnbF9pJyBpcyBib3RoIGluY2x1ZGVkIGFuZCBleGNs dWRlZCIgIiRMSU5FTk8iIDUgOzsNCiAgICBlc2FjDQoNCiAgICBnbF9tc2c9DQogICAgIyBXYXJu IGFib3V0IGEgcmVxdWVzdCBub3QgdG8gaW5zdGFsbCBhIHByb2dyYW0gdGhhdCBpcyBub3QgYmVp bmcNCiAgICAjIGJ1aWx0ICh3aGljaCBtYXkgYmUgYmVjYXVzZSB0aGUgc3lzdGVtcyBsYWNrcyBh IHJlcXVpcmVkIGludGVyZmFjZSkuDQogICAgY2FzZSAiICRvcHRpb25hbF9iaW5fcHJvZ3MgIiBp bg0KICAgICAgKiIgJGdsX2kgIiopIHsNCiAgb3B0aW9uYWxfYmluX3Byb2dzPWBmb3IgZ2xfcmVt X2kgaW4gJG9wdGlvbmFsX2Jpbl9wcm9nczsgZG8NCiAgICAgICAgdGVzdCAiJGdsX3JlbV9pIiA9 ICIkZ2xfaSIgfHwgZWNobyAiJGdsX3JlbV9pIg0KICAgICAgZG9uZSB8IHRyICdcMDEyJyAnICcg fCBzZWQgJ3MvICQvLyc7IGVjaG9gDQp9IDs7DQogICAgICAqKSBnbF9tc2c9IickZ2xfaScgaXMg YWxyZWFkeSBub3QgYmVpbmcgaW5zdGFsbGVkIiA7Ow0KICAgIGVzYWMNCg0KICAgIGlmIHRlc3Qg IiRnbF9tc2ciID0gJyc7IHRoZW4NCiAgICAgICMgV2FybiBhYm91dCBhIHJlcXVlc3Qgbm90IHRv IGluc3RhbGwgYSBwcm9ncmFtIHRoYXQgaXMNCiAgICAgICMgYWxyZWFkeSBvbiB0aGUgZGVmYXVs dC1uby1pbnN0YWxsIGxpc3QuDQogICAgICBjYXNlICIgJGdsX25vX2luc3RhbGxfcHJvZ3NfZGVm YXVsdCAiIGluDQogICAgICAgICoiICRnbF9pICIqKSBnbF9tc2c9ImJ5IGRlZmF1bHQsICckZ2xf aScgaXMgbm90IGluc3RhbGxlZCIgOzsNCiAgICAgIGVzYWMNCiAgICBmaQ0KDQogICAgdGVzdCAi JGdsX21zZyIgIT0gJycgJiYgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99 OiBXQVJOSU5HOiAkZ2xfbXNnIiA+JjUNCiRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRnbF9t c2ciID4mMjt9DQogIGRvbmUNCg0KICBmb3IgZ2xfaSBpbiAkZ2xfZG9faW5zdGFsbF9wcm9nOyBk bw0KICAgIGNhc2UgIiAkZ2xfbm9faW5zdGFsbF9wcm9nc19kZWZhdWx0ICIgaW4NCiAgICAgICoi ICRnbF9pICIqKSB7DQogIGlmIHRlc3QgLXogIiRvcHRpb25hbF9iaW5fcHJvZ3MiOyB0aGVuDQog ICAgb3B0aW9uYWxfYmluX3Byb2dzPSRnbF9pDQogIGVsc2UNCiAgICBvcHRpb25hbF9iaW5fcHJv Z3M9IiRvcHRpb25hbF9iaW5fcHJvZ3MgJGdsX2kiDQogIGZpDQp9IDs7DQogICAgICAqKSB7ICRh c19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6ICckZ2xfaScgaXMg bm90IGFuIG9wdGlvbmFsbHktaW5zdGFsbGFibGUgcHJvZ3JhbSIgPiY1DQokYXNfZWNobyAiJGFz X21lOiBXQVJOSU5HOiAnJGdsX2knIGlzIG5vdCBhbiBvcHRpb25hbGx5LWluc3RhbGxhYmxlIHBy b2dyYW0iID4mMjt9IDs7DQogICAgZXNhYw0KICBkb25lDQp9DQoNCiMgTm93IHRoYXQgd2Uga25v dyB3aGljaCBwcm9ncmFtcyB3aWxsIGFjdHVhbGx5IGJlIGJ1aWx0IHVwLCBmaWd1cmUgb3V0DQoj IHdoaWNoIG9wdGlvbmFsIGhlbHBlciBwcm9ncyBzaG91bGQgYmUgY29tcGlsZWQuDQpvcHRpb25h bF9wa2dsaWJfcHJvZ3M9DQpjYXNlICIgJG9wdGlvbmFsX2Jpbl9wcm9ncyAiIGluDQogIConIHN0 ZGJ1ZiAnKikgew0KICBpZiB0ZXN0IC16ICIkb3B0aW9uYWxfcGtnbGliX3Byb2dzIjsgdGhlbg0K ICAgIG9wdGlvbmFsX3BrZ2xpYl9wcm9ncz1saWJzdGRidWYuc28NCiAgZWxzZQ0KICAgIG9wdGlv bmFsX3BrZ2xpYl9wcm9ncz0iJG9wdGlvbmFsX3BrZ2xpYl9wcm9ncyBsaWJzdGRidWYuc28iDQog IGZpDQp9IDs7DQplc2FjDQoNCiMgU2V0IElOU1RBTExfU1UgaWYgc3UgaW5zdGFsbGF0aW9uIGhh cyBiZWVuIHJlcXVlc3RlZCB2aWENCiMgLS1lbmFibGUtaW5zdGFsbC1wcm9ncmFtPXN1Lg0KDQpj YXNlICIgJG9wdGlvbmFsX2Jpbl9wcm9ncyAiIGluDQogIConIHN1ICcqKSBJTlNUQUxMX1NVPXll cyA7Ow0KICAqKSAgICAgICAgSU5TVEFMTF9TVT1ubyA7Ow0KZXNhYw0KDQpNQU49YGVjaG8gIiRv cHRpb25hbF9iaW5fcHJvZ3MgInxzZWQgJ3MvIC8uMSAvZztzLyAkLy8nfHRyIC1kICdcXDAxNVxc MDEyJ2ANCg0KIyBDaGFuZ2UgZ2luc3RhbGwuMSB0byAiaW5zdGFsbC5oIiBpbiAkTUFOLg0KTUFO PWBmb3IgbSBpbiAkTUFOOyBkbyB0ZXN0ICRtID0gZ2luc3RhbGwuMSAmJiBtPWluc3RhbGwuMTsg ZWNobyAkbTsgZG9uZSBcDQogIHwgdHIgJ1wwMTVcMDEyJyAnICAnOyBlY2hvYA0KDQojIFJlbW92 ZSBbLjEsIHNpbmNlIHdyaXRpbmcgYSBwb3J0YWJsZSBydWxlIGZvciBpdCBpbiBtYW4vTWFrZWZp bGUuYW0NCiMgaXMgbm90IHByYWN0aWNhbC4gIFRoZSBzZWQgTEhTIGJlbG93IHVzZXMgdGhlIGF1 dG9jb25mIHF1YWRyaWdyYXBoDQojIHJlcHJlc2VudGluZyAnWycuDQpNQU49YGVjaG8gIiRNQU4i fHNlZCAncy9cW1wuMS8vJ2ANCg0KT1BUSU9OQUxfQklOX1BST0dTPWBlY2hvICIkb3B0aW9uYWxf YmluX3Byb2dzICJ8c2VkICdzLyAvXCQoRVhFRVhUKSAvZztzLyAkLy8nYA0KDQpPUFRJT05BTF9Q S0dMSUJfUFJPR1M9YGVjaG8gIiRvcHRpb25hbF9wa2dsaWJfcHJvZ3MgIiB8IHNlZCAncy8gJC8v J2ANCg0KTk9fSU5TVEFMTF9QUk9HU19ERUZBVUxUPSRub19pbnN0YWxsX3Byb2dzX2RlZmF1bHQN Cg0KDQogaWYgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgPSB5ZXM7IHRoZW4NCiAgQ1JPU1NfQ09N UElMSU5HX1RSVUU9DQogIENST1NTX0NPTVBJTElOR19GQUxTRT0nIycNCmVsc2UNCiAgQ1JPU1Nf Q09NUElMSU5HX1RSVUU9JyMnDQogIENST1NTX0NPTVBJTElOR19GQUxTRT0NCmZpDQoNCg0KIyBB cnJhbmdlIHRvIHJlcnVuIGNvbmZpZ3VyZSB3aGVuZXZlciB0aGUgZmlsZSwgc3JjL01ha2VmaWxl LmFtLA0KIyBjb250YWluaW5nIHRoZSBsaXN0IG9mIHByb2dyYW0gbmFtZXMgY2hhbmdlcy4NCkNP TkZJR19TVEFUVVNfREVQRU5ERU5DSUVTPSckKHRvcF9zcmNkaXIpL3NyYy9NYWtlZmlsZS5hbScN Cg0KIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KDQojIEFzIGxvbmcgYXMgImdyZXAgJ1BSSVtkaW91eFhd JyBwby8qLnBvdCIgcmVwb3J0cyBtYXRjaGVzIGluDQojIHRyYW5zbGF0YWJsZSBzdHJpbmdzLCB3 ZSBtdXN0IHVzZSBuZWVkLWZvcm1hdHN0cmluZy1tYWNyb3MgaGVyZS4NCg0KICB7ICRhc19lY2hv ICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgTkxTIGlzIHJl cXVlc3RlZCIgPiY1DQokYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIE5MUyBpcyByZXF1ZXN0 ZWQuLi4gIiA+JjY7IH0NCiAgICAjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtbmxzIHdhcyBnaXZl bi4NCmlmIHRlc3QgIiR7ZW5hYmxlX25scytzZXR9IiA9IHNldDsgdGhlbiA6DQogIGVuYWJsZXZh bD0kZW5hYmxlX25sczsgVVNFX05MUz0kZW5hYmxldmFsDQplbHNlDQogIFVTRV9OTFM9eWVzDQpm aQ0KDQogIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAk VVNFX05MUyIgPiY1DQokYXNfZWNobyAiJFVTRV9OTFMiID4mNjsgfQ0KDQoNCg0KDQogICAgICBH RVRURVhUX01BQ1JPX1ZFUlNJT049MC4xNw0KDQoNCg0KDQojIFByZXBhcmUgUEFUSF9TRVBBUkFU T1IuDQojIFRoZSB1c2VyIGlzIGFsd2F5cyByaWdodC4NCmlmIHRlc3QgIiR7UEFUSF9TRVBBUkFU T1Irc2V0fSIgIT0gc2V0OyB0aGVuDQogIGVjaG8gIiMhIC9iaW4vc2giID5jb25mJCQuc2gNCiAg ZWNobyAgImV4aXQgMCIgICA+PmNvbmYkJC5zaA0KICBjaG1vZCAreCBjb25mJCQuc2gNCiAgaWYg KFBBVEg9Ii9ub25leGlzdGVudDsuIjsgY29uZiQkLnNoKSA+L2Rldi9udWxsIDI+JjE7IHRoZW4N CiAgICBQQVRIX1NFUEFSQVRPUj0nOycNCiAgZWxzZQ0KICAgIFBBVEhfU0VQQVJBVE9SPToNCiAg ZmkNCiAgcm0gLWYgY29uZiQkLnNoDQpmaQ0KDQojIEZpbmQgb3V0IGhvdyB0byB0ZXN0IGZvciBl eGVjdXRhYmxlIGZpbGVzLiBEb24ndCB1c2UgYSB6ZXJvLWJ5dGUgZmlsZSwNCiMgYXMgc3lzdGVt cyBtYXkgdXNlIG1ldGhvZHMgb3RoZXIgdGhhbiBtb2RlIGJpdHMgdG8gZGV0ZXJtaW5lIGV4ZWN1 dGFiaWxpdHkuDQpjYXQgPmNvbmYkJC5maWxlIDw8X0FTRU9GDQojISAvYmluL3NoDQpleGl0IDAN Cl9BU0VPRg0KY2htb2QgK3ggY29uZiQkLmZpbGUNCmlmIHRlc3QgLXggY29uZiQkLmZpbGUgPi9k ZXYvbnVsbCAyPiYxOyB0aGVuDQogIGFjX2V4ZWN1dGFibGVfcD0idGVzdCAteCINCmVsc2UNCiAg YWNfZXhlY3V0YWJsZV9wPSJ0ZXN0IC1mIg0KZmkNCnJtIC1mIGNvbmYkJC5maWxlDQoNCiMgRXh0 cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAibXNnZm10Iiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBu YW1lIHdpdGggYXJncy4NCnNldCBkdW1teSBtc2dmbXQ7IGFjX3dvcmQ9JDINCnsgJGFzX2VjaG8g IiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUN CiRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQ0KaWYgJHthY19j dl9wYXRoX01TR0ZNVCs6fSBmYWxzZTsgdGhlbiA6DQogICRhc19lY2hvX24gIihjYWNoZWQpICIg PiY2DQplbHNlDQogIGNhc2UgIiRNU0dGTVQiIGluDQogIFtcXC9dKiB8ID86W1xcL10qKQ0KICAg IGFjX2N2X3BhdGhfTVNHRk1UPSIkTVNHRk1UIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUg dGVzdCB3aXRoIGEgcGF0aC4NCiAgICA7Ow0KICAqKQ0KICAgIGFjX3NhdmVfSUZTPSIkSUZTIjsg SUZTPSRQQVRIX1NFUEFSQVRPUg0KICAgIGZvciBhY19kaXIgaW4gJFBBVEg7IGRvDQogICAgICBJ RlM9IiRhY19zYXZlX0lGUyINCiAgICAgIHRlc3QgLXogIiRhY19kaXIiICYmIGFjX2Rpcj0uDQog ICAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8N CiAgICAgICAgaWYgJGFjX2V4ZWN1dGFibGVfcCAiJGFjX2Rpci8kYWNfd29yZCRhY19leGVjX2V4 dCI7IHRoZW4NCiAgICAgICAgICBlY2hvICIkYXNfbWU6IHRyeWluZyAkYWNfZGlyLyRhY193b3Jk Li4uIiA+JjUNCiAgICAgICAgICBpZiAkYWNfZGlyLyRhY193b3JkIC0tc3RhdGlzdGljcyAvZGV2 L251bGwgPiY1IDI+JjEgJiYNCiAgICAgKGlmICRhY19kaXIvJGFjX3dvcmQgLS1zdGF0aXN0aWNz IC9kZXYvbnVsbCAyPiYxID4vZGV2L251bGwgfCBncmVwIHVzYWdlID4vZGV2L251bGw7IHRoZW4g ZXhpdCAxOyBlbHNlIGV4aXQgMDsgZmkpOyB0aGVuDQogICAgICAgICAgICBhY19jdl9wYXRoX01T R0ZNVD0iJGFjX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCINCiAgICAgICAgICAgIGJyZWFrIDIN CiAgICAgICAgICBmaQ0KICAgICAgICBmaQ0KICAgICAgZG9uZQ0KICAgIGRvbmUNCiAgICBJRlM9 IiRhY19zYXZlX0lGUyINCiAgdGVzdCAteiAiJGFjX2N2X3BhdGhfTVNHRk1UIiAmJiBhY19jdl9w YXRoX01TR0ZNVD0iOiINCiAgICA7Ow0KZXNhYw0KZmkNCk1TR0ZNVD0iJGFjX2N2X3BhdGhfTVNH Rk1UIg0KaWYgdGVzdCAiJE1TR0ZNVCIgIT0gIjoiOyB0aGVuDQogIHsgJGFzX2VjaG8gIiRhc19t ZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkTVNHRk1UIiA+JjUNCiRhc19lY2hvICIk TVNHRk1UIiA+JjY7IH0NCmVsc2UNCiAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRM SU5FTk99OiByZXN1bHQ6IG5vIiA+JjUNCiRhc19lY2hvICJubyIgPiY2OyB9DQpmaQ0KDQogICMg RXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiZ21zZ2ZtdCIsIHNvIGl0IGNhbiBiZSBhIHByb2dy YW0gbmFtZSB3aXRoIGFyZ3MuDQpzZXQgZHVtbXkgZ21zZ2ZtdDsgYWNfd29yZD0kMg0KeyAkYXNf ZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQi ID4mNQ0KJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9DQppZiAk e2FjX2N2X3BhdGhfR01TR0ZNVCs6fSBmYWxzZTsgdGhlbiA6DQogICRhc19lY2hvX24gIihjYWNo ZWQpICIgPiY2DQplbHNlDQogIGNhc2UgJEdNU0dGTVQgaW4NCiAgW1xcL10qIHwgPzpbXFwvXSop DQogIGFjX2N2X3BhdGhfR01TR0ZNVD0iJEdNU0dGTVQiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRl IHRoZSB0ZXN0IHdpdGggYSBwYXRoLg0KICA7Ow0KICAqKQ0KICBhc19zYXZlX0lGUz0kSUZTOyBJ RlM9JFBBVEhfU0VQQVJBVE9SDQpmb3IgYXNfZGlyIGluICRQQVRIDQpkbw0KICBJRlM9JGFzX3Nh dmVfSUZTDQogIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uDQogICAgZm9yIGFjX2V4ZWNf ZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvDQogIGlmIHsgdGVzdCAtZiAi JGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNf d29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4NCiAgICBhY19jdl9wYXRoX0dNU0dGTVQ9IiRhc19k aXIvJGFjX3dvcmQkYWNfZXhlY19leHQiDQogICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVu by0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1DQogICAg YnJlYWsgMg0KICBmaQ0KZG9uZQ0KICBkb25lDQpJRlM9JGFzX3NhdmVfSUZTDQoNCiAgdGVzdCAt eiAiJGFjX2N2X3BhdGhfR01TR0ZNVCIgJiYgYWNfY3ZfcGF0aF9HTVNHRk1UPSIkTVNHRk1UIg0K ICA7Ow0KZXNhYw0KZmkNCkdNU0dGTVQ9JGFjX2N2X3BhdGhfR01TR0ZNVA0KaWYgdGVzdCAtbiAi JEdNU0dGTVQiOyB0aGVuDQogIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5P fTogcmVzdWx0OiAkR01TR0ZNVCIgPiY1DQokYXNfZWNobyAiJEdNU0dGTVQiID4mNjsgfQ0KZWxz ZQ0KICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8i ID4mNQ0KJGFzX2VjaG8gIm5vIiA+JjY7IH0NCmZpDQoNCg0KDQogICAgY2FzZSBgJE1TR0ZNVCAt LXZlcnNpb24gfCBzZWQgMXEgfCBzZWQgLWUgJ3MsXlteMC05XSosLCdgIGluDQogICAgJycgfCAw LlswLTldIHwgMC5bMC05XS4qIHwgMC4xWzAtNF0gfCAwLjFbMC00XS4qKSBNU0dGTVRfMDE1PTog OzsNCiAgICAqKSBNU0dGTVRfMDE1PSRNU0dGTVQgOzsNCiAgZXNhYw0KDQogIGNhc2UgYCRHTVNH Rk1UIC0tdmVyc2lvbiB8IHNlZCAxcSB8IHNlZCAtZSAncyxeW14wLTldKiwsJ2AgaW4NCiAgICAn JyB8IDAuWzAtOV0gfCAwLlswLTldLiogfCAwLjFbMC00XSB8IDAuMVswLTRdLiopIEdNU0dGTVRf MDE1PTogOzsNCiAgICAqKSBHTVNHRk1UXzAxNT0kR01TR0ZNVCA7Ow0KICBlc2FjDQoNCg0KDQoj IFByZXBhcmUgUEFUSF9TRVBBUkFUT1IuDQojIFRoZSB1c2VyIGlzIGFsd2F5cyByaWdodC4NCmlm IHRlc3QgIiR7UEFUSF9TRVBBUkFUT1Irc2V0fSIgIT0gc2V0OyB0aGVuDQogIGVjaG8gIiMhIC9i aW4vc2giID5jb25mJCQuc2gNCiAgZWNobyAgImV4aXQgMCIgICA+PmNvbmYkJC5zaA0KICBjaG1v ZCAreCBjb25mJCQuc2gNCiAgaWYgKFBBVEg9Ii9ub25leGlzdGVudDsuIjsgY29uZiQkLnNoKSA+ L2Rldi9udWxsIDI+JjE7IHRoZW4NCiAgICBQQVRIX1NFUEFSQVRPUj0nOycNCiAgZWxzZQ0KICAg IFBBVEhfU0VQQVJBVE9SPToNCiAgZmkNCiAgcm0gLWYgY29uZiQkLnNoDQpmaQ0KDQojIEZpbmQg b3V0IGhvdyB0byB0ZXN0IGZvciBleGVjdXRhYmxlIGZpbGVzLiBEb24ndCB1c2UgYSB6ZXJvLWJ5 dGUgZmlsZSwNCiMgYXMgc3lzdGVtcyBtYXkgdXNlIG1ldGhvZHMgb3RoZXIgdGhhbiBtb2RlIGJp dHMgdG8gZGV0ZXJtaW5lIGV4ZWN1dGFiaWxpdHkuDQpjYXQgPmNvbmYkJC5maWxlIDw8X0FTRU9G DQojISAvYmluL3NoDQpleGl0IDANCl9BU0VPRg0KY2htb2QgK3ggY29uZiQkLmZpbGUNCmlmIHRl c3QgLXggY29uZiQkLmZpbGUgPi9kZXYvbnVsbCAyPiYxOyB0aGVuDQogIGFjX2V4ZWN1dGFibGVf cD0idGVzdCAteCINCmVsc2UNCiAgYWNfZXhlY3V0YWJsZV9wPSJ0ZXN0IC1mIg0KZmkNCnJtIC1m IGNvbmYkJC5maWxlDQoNCiMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAieGdldHRleHQiLCBz byBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLg0Kc2V0IGR1bW15IHhnZXR0ZXh0 OyBhY193b3JkPSQyDQp7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNo ZWNraW5nIGZvciAkYWNfd29yZCIgPiY1DQokYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dv cmQuLi4gIiA+JjY7IH0NCmlmICR7YWNfY3ZfcGF0aF9YR0VUVEVYVCs6fSBmYWxzZTsgdGhlbiA6 DQogICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2DQplbHNlDQogIGNhc2UgIiRYR0VUVEVYVCIg aW4NCiAgW1xcL10qIHwgPzpbXFwvXSopDQogICAgYWNfY3ZfcGF0aF9YR0VUVEVYVD0iJFhHRVRU RVhUIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdCB3aXRoIGEgcGF0aC4NCiAgICA7 Ow0KICAqKQ0KICAgIGFjX3NhdmVfSUZTPSIkSUZTIjsgSUZTPSRQQVRIX1NFUEFSQVRPUg0KICAg IGZvciBhY19kaXIgaW4gJFBBVEg7IGRvDQogICAgICBJRlM9IiRhY19zYXZlX0lGUyINCiAgICAg IHRlc3QgLXogIiRhY19kaXIiICYmIGFjX2Rpcj0uDQogICAgICBmb3IgYWNfZXhlY19leHQgaW4g JycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8NCiAgICAgICAgaWYgJGFjX2V4ZWN1dGFi bGVfcCAiJGFjX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IHRoZW4NCiAgICAgICAgICBlY2hv ICIkYXNfbWU6IHRyeWluZyAkYWNfZGlyLyRhY193b3JkLi4uIiA+JjUNCiAgICAgICAgICBpZiAk YWNfZGlyLyRhY193b3JkIC0tb21pdC1oZWFkZXIgLS1jb3B5cmlnaHQtaG9sZGVyPSAtLW1zZ2lk LWJ1Z3MtYWRkcmVzcz0gL2Rldi9udWxsID4mNSAyPiYxICYmDQogICAgIChpZiAkYWNfZGlyLyRh Y193b3JkIC0tb21pdC1oZWFkZXIgLS1jb3B5cmlnaHQtaG9sZGVyPSAtLW1zZ2lkLWJ1Z3MtYWRk cmVzcz0gL2Rldi9udWxsIDI+JjEgPi9kZXYvbnVsbCB8IGdyZXAgdXNhZ2UgPi9kZXYvbnVsbDsg dGhlbiBleGl0IDE7IGVsc2UgZXhpdCAwOyBmaSk7IHRoZW4NCiAgICAgICAgICAgIGFjX2N2X3Bh dGhfWEdFVFRFWFQ9IiRhY19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiDQogICAgICAgICAgICBi cmVhayAyDQogICAgICAgICAgZmkNCiAgICAgICAgZmkNCiAgICAgIGRvbmUNCiAgICBkb25lDQog ICAgSUZTPSIkYWNfc2F2ZV9JRlMiDQogIHRlc3QgLXogIiRhY19jdl9wYXRoX1hHRVRURVhUIiAm JiBhY19jdl9wYXRoX1hHRVRURVhUPSI6Ig0KICAgIDs7DQplc2FjDQpmaQ0KWEdFVFRFWFQ9IiRh Y19jdl9wYXRoX1hHRVRURVhUIg0KaWYgdGVzdCAiJFhHRVRURVhUIiAhPSAiOiI7IHRoZW4NCiAg eyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRYR0VUVEVY VCIgPiY1DQokYXNfZWNobyAiJFhHRVRURVhUIiA+JjY7IH0NCmVsc2UNCiAgeyAkYXNfZWNobyAi JGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUNCiRhc19lY2hvICJu byIgPiY2OyB9DQpmaQ0KDQogICAgcm0gLWYgbWVzc2FnZXMucG8NCg0KICAgIGNhc2UgYCRYR0VU VEVYVCAtLXZlcnNpb24gfCBzZWQgMXEgfCBzZWQgLWUgJ3MsXlteMC05XSosLCdgIGluDQogICAg JycgfCAwLlswLTldIHwgMC5bMC05XS4qIHwgMC4xWzAtNF0gfCAwLjFbMC00XS4qKSBYR0VUVEVY VF8wMTU9OiA7Ow0KICAgICopIFhHRVRURVhUXzAxNT0kWEdFVFRFWFQgOzsNCiAgZXNhYw0KDQoN Cg0KIyBQcmVwYXJlIFBBVEhfU0VQQVJBVE9SLg0KIyBUaGUgdXNlciBpcyBhbHdheXMgcmlnaHQu DQppZiB0ZXN0ICIke1BBVEhfU0VQQVJBVE9SK3NldH0iICE9IHNldDsgdGhlbg0KICBlY2hvICIj ISAvYmluL3NoIiA+Y29uZiQkLnNoDQogIGVjaG8gICJleGl0IDAiICAgPj5jb25mJCQuc2gNCiAg Y2htb2QgK3ggY29uZiQkLnNoDQogIGlmIChQQVRIPSIvbm9uZXhpc3RlbnQ7LiI7IGNvbmYkJC5z aCkgPi9kZXYvbnVsbCAyPiYxOyB0aGVuDQogICAgUEFUSF9TRVBBUkFUT1I9JzsnDQogIGVsc2UN CiAgICBQQVRIX1NFUEFSQVRPUj06DQogIGZpDQogIHJtIC1mIGNvbmYkJC5zaA0KZmkNCg0KIyBG aW5kIG91dCBob3cgdG8gdGVzdCBmb3IgZXhlY3V0YWJsZSBmaWxlcy4gRG9uJ3QgdXNlIGEgemVy by1ieXRlIGZpbGUsDQojIGFzIHN5c3RlbXMgbWF5IHVzZSBtZXRob2RzIG90aGVyIHRoYW4gbW9k ZSBiaXRzIHRvIGRldGVybWluZSBleGVjdXRhYmlsaXR5Lg0KY2F0ID5jb25mJCQuZmlsZSA8PF9B U0VPRg0KIyEgL2Jpbi9zaA0KZXhpdCAwDQpfQVNFT0YNCmNobW9kICt4IGNvbmYkJC5maWxlDQpp ZiB0ZXN0IC14IGNvbmYkJC5maWxlID4vZGV2L251bGwgMj4mMTsgdGhlbg0KICBhY19leGVjdXRh YmxlX3A9InRlc3QgLXgiDQplbHNlDQogIGFjX2V4ZWN1dGFibGVfcD0idGVzdCAtZiINCmZpDQpy bSAtZiBjb25mJCQuZmlsZQ0KDQojIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIm1zZ21lcmdl Iiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4NCnNldCBkdW1teSBtc2dt ZXJnZTsgYWNfd29yZD0kMg0KeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99 OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQ0KJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRh Y193b3JkLi4uICIgPiY2OyB9DQppZiAke2FjX2N2X3BhdGhfTVNHTUVSR0UrOn0gZmFsc2U7IHRo ZW4gOg0KICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNg0KZWxzZQ0KICBjYXNlICIkTVNHTUVS R0UiIGluDQogIFtcXC9dKiB8ID86W1xcL10qKQ0KICAgIGFjX2N2X3BhdGhfTVNHTUVSR0U9IiRN U0dNRVJHRSIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3Qgd2l0aCBhIHBhdGguDQog ICAgOzsNCiAgKikNCiAgICBhY19zYXZlX0lGUz0iJElGUyI7IElGUz0kUEFUSF9TRVBBUkFUT1IN CiAgICBmb3IgYWNfZGlyIGluICRQQVRIOyBkbw0KICAgICAgSUZTPSIkYWNfc2F2ZV9JRlMiDQog ICAgICB0ZXN0IC16ICIkYWNfZGlyIiAmJiBhY19kaXI9Lg0KICAgICAgZm9yIGFjX2V4ZWNfZXh0 IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvDQogICAgICAgIGlmICRhY19leGVj dXRhYmxlX3AgIiRhY19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB0aGVuDQogICAgICAgICAg ZWNobyAiJGFzX21lOiB0cnlpbmcgJGFjX2Rpci8kYWNfd29yZC4uLiIgPiY1DQogICAgICAgICAg aWYgJGFjX2Rpci8kYWNfd29yZCAtLXVwZGF0ZSAtcSAvZGV2L251bGwgL2Rldi9udWxsID4mNSAy PiYxOyB0aGVuDQogICAgICAgICAgICBhY19jdl9wYXRoX01TR01FUkdFPSIkYWNfZGlyLyRhY193 b3JkJGFjX2V4ZWNfZXh0Ig0KICAgICAgICAgICAgYnJlYWsgMg0KICAgICAgICAgIGZpDQogICAg ICAgIGZpDQogICAgICBkb25lDQogICAgZG9uZQ0KICAgIElGUz0iJGFjX3NhdmVfSUZTIg0KICB0 ZXN0IC16ICIkYWNfY3ZfcGF0aF9NU0dNRVJHRSIgJiYgYWNfY3ZfcGF0aF9NU0dNRVJHRT0iOiIN CiAgICA7Ow0KZXNhYw0KZmkNCk1TR01FUkdFPSIkYWNfY3ZfcGF0aF9NU0dNRVJHRSINCmlmIHRl c3QgIiRNU0dNRVJHRSIgIT0gIjoiOyB0aGVuDQogIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xp bmVuby0kTElORU5PfTogcmVzdWx0OiAkTVNHTUVSR0UiID4mNQ0KJGFzX2VjaG8gIiRNU0dNRVJH RSIgPiY2OyB9DQplbHNlDQogIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5P fTogcmVzdWx0OiBubyIgPiY1DQokYXNfZWNobyAibm8iID4mNjsgfQ0KZmkNCg0KDQogICAgICAg IHRlc3QgLW4gIiRsb2NhbGVkaXIiIHx8IGxvY2FsZWRpcj0nJHtkYXRhZGlyfS9sb2NhbGUnDQoN Cg0KICAgIHRlc3QgLW4gIiR7WEdFVFRFWFRfRVhUUkFfT1BUSU9OUytzZXR9IiB8fCBYR0VUVEVY VF9FWFRSQV9PUFRJT05TPQ0KDQoNCiAgYWNfY29uZmlnX2NvbW1hbmRzPSIkYWNfY29uZmlnX2Nv bW1hbmRzIHBvLWRpcmVjdG9yaWVzIg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoN Cg0KDQoNCg0KDQoNCg0KDQogICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5F Tk99OiBjaGVja2luZyBmb3IgQ0ZQcmVmZXJlbmNlc0NvcHlBcHBWYWx1ZSIgPiY1DQokYXNfZWNo b19uICJjaGVja2luZyBmb3IgQ0ZQcmVmZXJlbmNlc0NvcHlBcHBWYWx1ZS4uLiAiID4mNjsgfQ0K aWYgJHtndF9jdl9mdW5jX0NGUHJlZmVyZW5jZXNDb3B5QXBwVmFsdWUrOn0gZmFsc2U7IHRoZW4g Og0KICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNg0KZWxzZQ0KICBndF9zYXZlX0xJQlM9IiRM SUJTIg0KICAgICBMSUJTPSIkTElCUyAtV2wsLWZyYW1ld29yayAtV2wsQ29yZUZvdW5kYXRpb24i DQogICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQNCi8qIGVu ZCBjb25mZGVmcy5oLiAgKi8NCiNpbmNsdWRlIDxDb3JlRm91bmRhdGlvbi9DRlByZWZlcmVuY2Vz Lmg+DQppbnQNCm1haW4gKCkNCnsNCkNGUHJlZmVyZW5jZXNDb3B5QXBwVmFsdWUoTlVMTCwgTlVM TCkNCiAgOw0KICByZXR1cm4gMDsNCn0NCl9BQ0VPRg0KaWYgYWNfZm5fY190cnlfbGluayAiJExJ TkVOTyI7IHRoZW4gOg0KICBndF9jdl9mdW5jX0NGUHJlZmVyZW5jZXNDb3B5QXBwVmFsdWU9eWVz DQplbHNlDQogIGd0X2N2X2Z1bmNfQ0ZQcmVmZXJlbmNlc0NvcHlBcHBWYWx1ZT1ubw0KZmkNCnJt IC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXA0KICAgIGNvbmZ0ZXN0 JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0DQogICAgIExJQlM9IiRndF9zYXZlX0xJQlMiDQpm aQ0KeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRndF9j dl9mdW5jX0NGUHJlZmVyZW5jZXNDb3B5QXBwVmFsdWUiID4mNQ0KJGFzX2VjaG8gIiRndF9jdl9m dW5jX0NGUHJlZmVyZW5jZXNDb3B5QXBwVmFsdWUiID4mNjsgfQ0KICBpZiB0ZXN0ICRndF9jdl9m dW5jX0NGUHJlZmVyZW5jZXNDb3B5QXBwVmFsdWUgPSB5ZXM7IHRoZW4NCg0KJGFzX2VjaG8gIiNk ZWZpbmUgSEFWRV9DRlBSRUZFUkVOQ0VTQ09QWUFQUFZBTFVFIDEiID4+Y29uZmRlZnMuaA0KDQog IGZpDQogICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2lu ZyBmb3IgQ0ZMb2NhbGVDb3B5Q3VycmVudCIgPiY1DQokYXNfZWNob19uICJjaGVja2luZyBmb3Ig Q0ZMb2NhbGVDb3B5Q3VycmVudC4uLiAiID4mNjsgfQ0KaWYgJHtndF9jdl9mdW5jX0NGTG9jYWxl Q29weUN1cnJlbnQrOn0gZmFsc2U7IHRoZW4gOg0KICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4m Ng0KZWxzZQ0KICBndF9zYXZlX0xJQlM9IiRMSUJTIg0KICAgICBMSUJTPSIkTElCUyAtV2wsLWZy YW1ld29yayAtV2wsQ29yZUZvdW5kYXRpb24iDQogICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNF T0YgPmNvbmZ0ZXN0LiRhY19leHQNCi8qIGVuZCBjb25mZGVmcy5oLiAgKi8NCiNpbmNsdWRlIDxD b3JlRm91bmRhdGlvbi9DRkxvY2FsZS5oPg0KaW50DQptYWluICgpDQp7DQpDRkxvY2FsZUNvcHlD dXJyZW50KCk7DQogIDsNCiAgcmV0dXJuIDA7DQp9DQpfQUNFT0YNCmlmIGFjX2ZuX2NfdHJ5X2xp bmsgIiRMSU5FTk8iOyB0aGVuIDoNCiAgZ3RfY3ZfZnVuY19DRkxvY2FsZUNvcHlDdXJyZW50PXll cw0KZWxzZQ0KICBndF9jdl9mdW5jX0NGTG9jYWxlQ29weUN1cnJlbnQ9bm8NCmZpDQpybSAtZiBj b3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwNCiAgICBjb25mdGVzdCRhY19l eGVleHQgY29uZnRlc3QuJGFjX2V4dA0KICAgICBMSUJTPSIkZ3Rfc2F2ZV9MSUJTIg0KZmkNCnsg JGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkZ3RfY3ZfZnVu Y19DRkxvY2FsZUNvcHlDdXJyZW50IiA+JjUNCiRhc19lY2hvICIkZ3RfY3ZfZnVuY19DRkxvY2Fs ZUNvcHlDdXJyZW50IiA+JjY7IH0NCiAgaWYgdGVzdCAkZ3RfY3ZfZnVuY19DRkxvY2FsZUNvcHlD dXJyZW50ID0geWVzOyB0aGVuDQoNCiRhc19lY2hvICIjZGVmaW5lIEhBVkVfQ0ZMT0NBTEVDT1BZ Q1VSUkVOVCAxIiA+PmNvbmZkZWZzLmgNCg0KICBmaQ0KICBJTlRMX01BQ09TWF9MSUJTPQ0KICBp ZiB0ZXN0ICRndF9jdl9mdW5jX0NGUHJlZmVyZW5jZXNDb3B5QXBwVmFsdWUgPSB5ZXMgfHwgdGVz dCAkZ3RfY3ZfZnVuY19DRkxvY2FsZUNvcHlDdXJyZW50ID0geWVzOyB0aGVuDQogICAgSU5UTF9N QUNPU1hfTElCUz0iLVdsLC1mcmFtZXdvcmsgLVdsLENvcmVGb3VuZGF0aW9uIg0KICBmaQ0KDQoN Cg0KDQoNCg0KICBMSUJJTlRMPQ0KICBMVExJQklOVEw9DQogIFBPU1VCPQ0KDQogICAgY2FzZSAi ICRndF9uZWVkcyAiIGluDQogICAgKiIgbmVlZC1mb3JtYXRzdHJpbmctbWFjcm9zICIqKSBndF9h cGlfdmVyc2lvbj0zIDs7DQogICAgKiIgbmVlZC1uZ2V0dGV4dCAiKikgZ3RfYXBpX3ZlcnNpb249 MiA7Ow0KICAgICopIGd0X2FwaV92ZXJzaW9uPTEgOzsNCiAgZXNhYw0KICBndF9mdW5jX2dudWdl dHRleHRfbGliYz0iZ3RfY3ZfZnVuY19nbnVnZXR0ZXh0JHtndF9hcGlfdmVyc2lvbn1fbGliYyIN CiAgZ3RfZnVuY19nbnVnZXR0ZXh0X2xpYmludGw9Imd0X2N2X2Z1bmNfZ251Z2V0dGV4dCR7Z3Rf YXBpX3ZlcnNpb259X2xpYmludGwiDQoNCiAgICBpZiB0ZXN0ICIkVVNFX05MUyIgPSAieWVzIjsg dGhlbg0KICAgIGd0X3VzZV9wcmVpbnN0YWxsZWRfZ251Z2V0dGV4dD1ubw0KDQoNCiAgICAgICAg aWYgdGVzdCAkZ3RfYXBpX3ZlcnNpb24gLWdlIDM7IHRoZW4NCiAgICAgICAgICBndF9yZXZpc2lv bl90ZXN0X2NvZGU9Jw0KI2lmbmRlZiBfX0dOVV9HRVRURVhUX1NVUFBPUlRFRF9SRVZJU0lPTg0K I2RlZmluZSBfX0dOVV9HRVRURVhUX1NVUFBPUlRFRF9SRVZJU0lPTihtYWpvcikgKChtYWpvcikg PT0gMCA/IDAgOiAtMSkNCiNlbmRpZg0KdHlwZWRlZiBpbnQgYXJyYXkgWzIgKiAoX19HTlVfR0VU VEVYVF9TVVBQT1JURURfUkVWSVNJT04oMCkgPj0gMSkgLSAxXTsNCicNCiAgICAgICAgZWxzZQ0K ICAgICAgICAgIGd0X3JldmlzaW9uX3Rlc3RfY29kZT0NCiAgICAgICAgZmkNCiAgICAgICAgaWYg dGVzdCAkZ3RfYXBpX3ZlcnNpb24gLWdlIDI7IHRoZW4NCiAgICAgICAgICBndF9leHByZXNzaW9u X3Rlc3RfY29kZT0nICsgKiBuZ2V0dGV4dCAoIiIsICIiLCAwKScNCiAgICAgICAgZWxzZQ0KICAg ICAgICAgIGd0X2V4cHJlc3Npb25fdGVzdF9jb2RlPQ0KICAgICAgICBmaQ0KDQogICAgICAgIHsg JGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIEdOVSBn ZXR0ZXh0IGluIGxpYmMiID4mNQ0KJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIEdOVSBnZXR0ZXh0 IGluIGxpYmMuLi4gIiA+JjY7IH0NCmlmIGV2YWwgXCR7JGd0X2Z1bmNfZ251Z2V0dGV4dF9saWJj Kzp9IGZhbHNlOyB0aGVuIDoNCiAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYNCmVsc2UNCiAg Y2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dA0KLyogZW5kIGNvbmZk ZWZzLmguICAqLw0KI2luY2x1ZGUgPGxpYmludGwuaD4NCiRndF9yZXZpc2lvbl90ZXN0X2NvZGUN CmV4dGVybiBpbnQgX25sX21zZ19jYXRfY250cjsNCmV4dGVybiBpbnQgKl9ubF9kb21haW5fYmlu ZGluZ3M7DQppbnQNCm1haW4gKCkNCnsNCmJpbmR0ZXh0ZG9tYWluICgiIiwgIiIpOw0KcmV0dXJu ICogZ2V0dGV4dCAoIiIpJGd0X2V4cHJlc3Npb25fdGVzdF9jb2RlICsgX25sX21zZ19jYXRfY250 ciArICpfbmxfZG9tYWluX2JpbmRpbmdzDQogIDsNCiAgcmV0dXJuIDA7DQp9DQpfQUNFT0YNCmlm IGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoNCiAgZXZhbCAiJGd0X2Z1bmNfZ251 Z2V0dGV4dF9saWJjPXllcyINCmVsc2UNCiAgZXZhbCAiJGd0X2Z1bmNfZ251Z2V0dGV4dF9saWJj PW5vIg0KZmkNCnJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXA0K ICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0DQpmaQ0KZXZhbCBhY19yZXM9 XCQkZ3RfZnVuY19nbnVnZXR0ZXh0X2xpYmMNCgkgICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7 YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19yZXMiID4mNQ0KJGFzX2VjaG8gIiRhY19y ZXMiID4mNjsgfQ0KDQogICAgICAgIGlmIHsgZXZhbCAiZ3RfdmFsPVwkJGd0X2Z1bmNfZ251Z2V0 dGV4dF9saWJjIjsgdGVzdCAiJGd0X3ZhbCIgIT0gInllcyI7IH07IHRoZW4NCg0KDQoNCg0KDQog ICAgICAgICAgYW1fc2F2ZV9DUFBGTEFHUz0iJENQUEZMQUdTIg0KDQogIGZvciBlbGVtZW50IGlu ICRJTkNJQ09OVjsgZG8NCiAgICBoYXZlaXQ9DQogICAgZm9yIHggaW4gJENQUEZMQUdTOyBkbw0K DQogIGFjbF9zYXZlX3ByZWZpeD0iJHByZWZpeCINCiAgcHJlZml4PSIkYWNsX2ZpbmFsX3ByZWZp eCINCiAgYWNsX3NhdmVfZXhlY19wcmVmaXg9IiRleGVjX3ByZWZpeCINCiAgZXhlY19wcmVmaXg9 IiRhY2xfZmluYWxfZXhlY19wcmVmaXgiDQogIGV2YWwgeD1cIiR4XCINCiAgZXhlY19wcmVmaXg9 IiRhY2xfc2F2ZV9leGVjX3ByZWZpeCINCiAgcHJlZml4PSIkYWNsX3NhdmVfcHJlZml4Ig0KDQog ICAgICBpZiB0ZXN0ICJYJHgiID0gIlgkZWxlbWVudCI7IHRoZW4NCiAgICAgICAgaGF2ZWl0PXll cw0KICAgICAgICBicmVhaw0KICAgICAgZmkNCiAgICBkb25lDQogICAgaWYgdGVzdCAteiAiJGhh dmVpdCI7IHRoZW4NCiAgICAgIENQUEZMQUdTPSIke0NQUEZMQUdTfSR7Q1BQRkxBR1M6KyB9JGVs ZW1lbnQiDQogICAgZmkNCiAgZG9uZQ0KDQoNCiAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGlu ZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgaWNvbnYiID4mNQ0KJGFzX2VjaG9fbiAiY2hlY2tp bmcgZm9yIGljb252Li4uICIgPiY2OyB9DQppZiAke2FtX2N2X2Z1bmNfaWNvbnYrOn0gZmFsc2U7 IHRoZW4gOg0KICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNg0KZWxzZQ0KDQogICAgYW1fY3Zf ZnVuY19pY29udj0ibm8sIGNvbnNpZGVyIGluc3RhbGxpbmcgR05VIGxpYmljb252Ig0KICAgIGFt X2N2X2xpYl9pY29udj1ubw0KICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0 LiRhY19leHQNCi8qIGVuZCBjb25mZGVmcy5oLiAgKi8NCg0KI2luY2x1ZGUgPHN0ZGxpYi5oPg0K I2luY2x1ZGUgPGljb252Lmg+DQoNCmludA0KbWFpbiAoKQ0Kew0KaWNvbnZfdCBjZCA9IGljb252 X29wZW4oIiIsIiIpOw0KICAgICAgICAgICBpY29udihjZCxOVUxMLE5VTEwsTlVMTCxOVUxMKTsN CiAgICAgICAgICAgaWNvbnZfY2xvc2UoY2QpOw0KICA7DQogIHJldHVybiAwOw0KfQ0KX0FDRU9G DQppZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6DQogIGFtX2N2X2Z1bmNfaWNv bnY9eWVzDQpmaQ0Kcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBc DQogICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQNCiAgICBpZiB0ZXN0ICIk YW1fY3ZfZnVuY19pY29udiIgIT0geWVzOyB0aGVuDQogICAgICBhbV9zYXZlX0xJQlM9IiRMSUJT Ig0KICAgICAgTElCUz0iJExJQlMgJExJQklDT05WIg0KICAgICAgY2F0IGNvbmZkZWZzLmggLSA8 PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dA0KLyogZW5kIGNvbmZkZWZzLmguICAqLw0KDQojaW5j bHVkZSA8c3RkbGliLmg+DQojaW5jbHVkZSA8aWNvbnYuaD4NCg0KaW50DQptYWluICgpDQp7DQpp Y29udl90IGNkID0gaWNvbnZfb3BlbigiIiwiIik7DQogICAgICAgICAgICAgaWNvbnYoY2QsTlVM TCxOVUxMLE5VTEwsTlVMTCk7DQogICAgICAgICAgICAgaWNvbnZfY2xvc2UoY2QpOw0KICA7DQog IHJldHVybiAwOw0KfQ0KX0FDRU9GDQppZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhl biA6DQogIGFtX2N2X2xpYl9pY29udj15ZXMNCiAgICAgICAgYW1fY3ZfZnVuY19pY29udj15ZXMN CmZpDQpybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwNCiAgICBj b25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dA0KICAgICAgTElCUz0iJGFtX3NhdmVf TElCUyINCiAgICBmaQ0KDQpmaQ0KeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5F Tk99OiByZXN1bHQ6ICRhbV9jdl9mdW5jX2ljb252IiA+JjUNCiRhc19lY2hvICIkYW1fY3ZfZnVu Y19pY29udiIgPiY2OyB9DQogIGlmIHRlc3QgIiRhbV9jdl9mdW5jX2ljb252IiA9IHllczsgdGhl bg0KICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcg Zm9yIHdvcmtpbmcgaWNvbnYiID4mNQ0KJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIHdvcmtpbmcg aWNvbnYuLi4gIiA+JjY7IH0NCmlmICR7YW1fY3ZfZnVuY19pY29udl93b3Jrcys6fSBmYWxzZTsg dGhlbiA6DQogICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2DQplbHNlDQoNCiAgICAgICAgICAg ICAgICAgIGFtX3NhdmVfTElCUz0iJExJQlMiDQogICAgICBpZiB0ZXN0ICRhbV9jdl9saWJfaWNv bnYgPSB5ZXM7IHRoZW4NCiAgICAgICAgTElCUz0iJExJQlMgJExJQklDT05WIg0KICAgICAgZmkN CiAgICAgIGlmIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0geWVzOyB0aGVuIDoNCg0KICAgICAg ICAgY2FzZSAiJGhvc3Rfb3MiIGluDQogICAgICAgICAgIGFpeCogfCBocHV4KikgYW1fY3ZfZnVu Y19pY29udl93b3Jrcz0iZ3Vlc3Npbmcgbm8iIDs7DQogICAgICAgICAgICopICAgICAgICAgICAg YW1fY3ZfZnVuY19pY29udl93b3Jrcz0iZ3Vlc3NpbmcgeWVzIiA7Ow0KICAgICAgICAgZXNhYw0K DQplbHNlDQogIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQNCi8q IGVuZCBjb25mZGVmcy5oLiAgKi8NCg0KI2luY2x1ZGUgPGljb252Lmg+DQojaW5jbHVkZSA8c3Ry aW5nLmg+DQppbnQgbWFpbiAoKQ0Kew0KICBpbnQgcmVzdWx0ID0gMDsNCiAgLyogVGVzdCBhZ2Fp bnN0IEFJWCA1LjEgYnVnOiBGYWlsdXJlcyBhcmUgbm90IGRpc3Rpbmd1aXNoYWJsZSBmcm9tIHN1 Y2Nlc3NmdWwNCiAgICAgcmV0dXJucy4gICovDQogIHsNCiAgICBpY29udl90IGNkX3V0ZjhfdG9f ODg1OTEgPSBpY29udl9vcGVuICgiSVNPODg1OS0xIiwgIlVURi04Iik7DQogICAgaWYgKGNkX3V0 ZjhfdG9fODg1OTEgIT0gKGljb252X3QpKC0xKSkNCiAgICAgIHsNCiAgICAgICAgc3RhdGljIGNv bnN0IGNoYXIgaW5wdXRbXSA9ICJcMzQyXDIwMlwyNTQiOyAvKiBFVVJPIFNJR04gKi8NCiAgICAg ICAgY2hhciBidWZbMTBdOw0KICAgICAgICBjb25zdCBjaGFyICppbnB0ciA9IGlucHV0Ow0KICAg ICAgICBzaXplX3QgaW5ieXRlc2xlZnQgPSBzdHJsZW4gKGlucHV0KTsNCiAgICAgICAgY2hhciAq b3V0cHRyID0gYnVmOw0KICAgICAgICBzaXplX3Qgb3V0Ynl0ZXNsZWZ0ID0gc2l6ZW9mIChidWYp Ow0KICAgICAgICBzaXplX3QgcmVzID0gaWNvbnYgKGNkX3V0ZjhfdG9fODg1OTEsDQogICAgICAg ICAgICAgICAgICAgICAgICAgICAgKGNoYXIgKiopICZpbnB0ciwgJmluYnl0ZXNsZWZ0LA0KICAg ICAgICAgICAgICAgICAgICAgICAgICAgICZvdXRwdHIsICZvdXRieXRlc2xlZnQpOw0KICAgICAg ICBpZiAocmVzID09IDApDQogICAgICAgICAgcmVzdWx0IHw9IDE7DQogICAgICAgIGljb252X2Ns b3NlIChjZF91dGY4X3RvXzg4NTkxKTsNCiAgICAgIH0NCiAgfQ0KICAvKiBUZXN0IGFnYWluc3Qg U29sYXJpcyAxMCBidWc6IEZhaWx1cmVzIGFyZSBub3QgZGlzdGluZ3Vpc2hhYmxlIGZyb20NCiAg ICAgc3VjY2Vzc2Z1bCByZXR1cm5zLiAgKi8NCiAgew0KICAgIGljb252X3QgY2RfYXNjaWlfdG9f ODg1OTEgPSBpY29udl9vcGVuICgiSVNPODg1OS0xIiwgIjY0NiIpOw0KICAgIGlmIChjZF9hc2Np aV90b184ODU5MSAhPSAoaWNvbnZfdCkoLTEpKQ0KICAgICAgew0KICAgICAgICBzdGF0aWMgY29u c3QgY2hhciBpbnB1dFtdID0gIlwyNjMiOw0KICAgICAgICBjaGFyIGJ1ZlsxMF07DQogICAgICAg IGNvbnN0IGNoYXIgKmlucHRyID0gaW5wdXQ7DQogICAgICAgIHNpemVfdCBpbmJ5dGVzbGVmdCA9 IHN0cmxlbiAoaW5wdXQpOw0KICAgICAgICBjaGFyICpvdXRwdHIgPSBidWY7DQogICAgICAgIHNp emVfdCBvdXRieXRlc2xlZnQgPSBzaXplb2YgKGJ1Zik7DQogICAgICAgIHNpemVfdCByZXMgPSBp Y29udiAoY2RfYXNjaWlfdG9fODg1OTEsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNo YXIgKiopICZpbnB0ciwgJmluYnl0ZXNsZWZ0LA0KICAgICAgICAgICAgICAgICAgICAgICAgICAg ICZvdXRwdHIsICZvdXRieXRlc2xlZnQpOw0KICAgICAgICBpZiAocmVzID09IDApDQogICAgICAg ICAgcmVzdWx0IHw9IDI7DQogICAgICAgIGljb252X2Nsb3NlIChjZF9hc2NpaV90b184ODU5MSk7 DQogICAgICB9DQogIH0NCiAgLyogVGVzdCBhZ2FpbnN0IEFJWCA2LjEuLjcuMSBidWc6IEJ1ZmZl ciBvdmVycnVuLiAgKi8NCiAgew0KICAgIGljb252X3QgY2RfODg1OTFfdG9fdXRmOCA9IGljb252 X29wZW4gKCJVVEYtOCIsICJJU08tODg1OS0xIik7DQogICAgaWYgKGNkXzg4NTkxX3RvX3V0Zjgg IT0gKGljb252X3QpKC0xKSkNCiAgICAgIHsNCiAgICAgICAgc3RhdGljIGNvbnN0IGNoYXIgaW5w dXRbXSA9ICJcMzA0IjsNCiAgICAgICAgc3RhdGljIGNoYXIgYnVmWzJdID0geyAoY2hhcikweERF LCAoY2hhcikweEFEIH07DQogICAgICAgIGNvbnN0IGNoYXIgKmlucHRyID0gaW5wdXQ7DQogICAg ICAgIHNpemVfdCBpbmJ5dGVzbGVmdCA9IDE7DQogICAgICAgIGNoYXIgKm91dHB0ciA9IGJ1ZjsN CiAgICAgICAgc2l6ZV90IG91dGJ5dGVzbGVmdCA9IDE7DQogICAgICAgIHNpemVfdCByZXMgPSBp Y29udiAoY2RfODg1OTFfdG9fdXRmOCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2hh ciAqKikgJmlucHRyLCAmaW5ieXRlc2xlZnQsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAg Jm91dHB0ciwgJm91dGJ5dGVzbGVmdCk7DQogICAgICAgIGlmIChyZXMgIT0gKHNpemVfdCkoLTEp IHx8IG91dHB0ciAtIGJ1ZiA+IDEgfHwgYnVmWzFdICE9IChjaGFyKTB4QUQpDQogICAgICAgICAg cmVzdWx0IHw9IDQ7DQogICAgICAgIGljb252X2Nsb3NlIChjZF84ODU5MV90b191dGY4KTsNCiAg ICAgIH0NCiAgfQ0KI2lmIDAgLyogVGhpcyBidWcgY291bGQgYmUgd29ya2VkIGFyb3VuZCBieSB0 aGUgY2FsbGVyLiAgKi8NCiAgLyogVGVzdCBhZ2FpbnN0IEhQLVVYIDExLjExIGJ1ZzogUG9zaXRp dmUgcmV0dXJuIHZhbHVlIGluc3RlYWQgb2YgMC4gICovDQogIHsNCiAgICBpY29udl90IGNkXzg4 NTkxX3RvX3V0ZjggPSBpY29udl9vcGVuICgidXRmOCIsICJpc284ODU5MSIpOw0KICAgIGlmIChj ZF84ODU5MV90b191dGY4ICE9IChpY29udl90KSgtMSkpDQogICAgICB7DQogICAgICAgIHN0YXRp YyBjb25zdCBjaGFyIGlucHV0W10gPSAiXDMwNHJnZXIgbWl0IGJcMzY2c2VuIEJcMzc0YmNoZW4g b2huZSBBdWdlbm1hXDMzNyI7DQogICAgICAgIGNoYXIgYnVmWzUwXTsNCiAgICAgICAgY29uc3Qg Y2hhciAqaW5wdHIgPSBpbnB1dDsNCiAgICAgICAgc2l6ZV90IGluYnl0ZXNsZWZ0ID0gc3RybGVu IChpbnB1dCk7DQogICAgICAgIGNoYXIgKm91dHB0ciA9IGJ1ZjsNCiAgICAgICAgc2l6ZV90IG91 dGJ5dGVzbGVmdCA9IHNpemVvZiAoYnVmKTsNCiAgICAgICAgc2l6ZV90IHJlcyA9IGljb252IChj ZF84ODU5MV90b191dGY4LA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjaGFyICoqKSAm aW5wdHIsICZpbmJ5dGVzbGVmdCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAmb3V0cHRy LCAmb3V0Ynl0ZXNsZWZ0KTsNCiAgICAgICAgaWYgKChpbnQpcmVzID4gMCkNCiAgICAgICAgICBy ZXN1bHQgfD0gODsNCiAgICAgICAgaWNvbnZfY2xvc2UgKGNkXzg4NTkxX3RvX3V0ZjgpOw0KICAg ICAgfQ0KICB9DQojZW5kaWYNCiAgLyogVGVzdCBhZ2FpbnN0IEhQLVVYIDExLjExIGJ1ZzogTm8g Y29udmVydGVyIGZyb20gRVVDLUpQIHRvIFVURi04IGlzDQogICAgIHByb3ZpZGVkLiAgKi8NCiAg aWYgKC8qIFRyeSBzdGFuZGFyZGl6ZWQgbmFtZXMuICAqLw0KICAgICAgaWNvbnZfb3BlbiAoIlVU Ri04IiwgIkVVQy1KUCIpID09IChpY29udl90KSgtMSkNCiAgICAgIC8qIFRyeSBJUklYLCBPU0Yv MSBuYW1lcy4gICovDQogICAgICAmJiBpY29udl9vcGVuICgiVVRGLTgiLCAiZXVjSlAiKSA9PSAo aWNvbnZfdCkoLTEpDQogICAgICAvKiBUcnkgQUlYIG5hbWVzLiAgKi8NCiAgICAgICYmIGljb252 X29wZW4gKCJVVEYtOCIsICJJQk0tZXVjSlAiKSA9PSAoaWNvbnZfdCkoLTEpDQogICAgICAvKiBU cnkgSFAtVVggbmFtZXMuICAqLw0KICAgICAgJiYgaWNvbnZfb3BlbiAoInV0ZjgiLCAiZXVjSlAi KSA9PSAoaWNvbnZfdCkoLTEpKQ0KICAgIHJlc3VsdCB8PSAxNjsNCiAgcmV0dXJuIHJlc3VsdDsN Cn0NCl9BQ0VPRg0KaWYgYWNfZm5fY190cnlfcnVuICIkTElORU5PIjsgdGhlbiA6DQogIGFtX2N2 X2Z1bmNfaWNvbnZfd29ya3M9eWVzDQplbHNlDQogIGFtX2N2X2Z1bmNfaWNvbnZfd29ya3M9bm8N CmZpDQpybSAtZiBjb3JlICouY29yZSBjb3JlLmNvbmZ0ZXN0LiogZ21vbi5vdXQgYmIub3V0IGNv bmZ0ZXN0JGFjX2V4ZWV4dCBcDQogIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuYmVhbSBj b25mdGVzdC4kYWNfZXh0DQpmaQ0KDQogICAgICBMSUJTPSIkYW1fc2F2ZV9MSUJTIg0KDQpmaQ0K eyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhbV9jdl9m dW5jX2ljb252X3dvcmtzIiA+JjUNCiRhc19lY2hvICIkYW1fY3ZfZnVuY19pY29udl93b3JrcyIg PiY2OyB9DQogICAgY2FzZSAiJGFtX2N2X2Z1bmNfaWNvbnZfd29ya3MiIGluDQogICAgICAqbm8p IGFtX2Z1bmNfaWNvbnY9bm8gYW1fY3ZfbGliX2ljb252PW5vIDs7DQogICAgICAqKSAgIGFtX2Z1 bmNfaWNvbnY9eWVzIDs7DQogICAgZXNhYw0KICBlbHNlDQogICAgYW1fZnVuY19pY29udj1ubyBh bV9jdl9saWJfaWNvbnY9bm8NCiAgZmkNCiAgaWYgdGVzdCAiJGFtX2Z1bmNfaWNvbnYiID0geWVz OyB0aGVuDQoNCiRhc19lY2hvICIjZGVmaW5lIEhBVkVfSUNPTlYgMSIgPj5jb25mZGVmcy5oDQoN CiAgZmkNCiAgaWYgdGVzdCAiJGFtX2N2X2xpYl9pY29udiIgPSB5ZXM7IHRoZW4NCiAgICB7ICRh c19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGhvdyB0byBsaW5r IHdpdGggbGliaWNvbnYiID4mNQ0KJGFzX2VjaG9fbiAiY2hlY2tpbmcgaG93IHRvIGxpbmsgd2l0 aCBsaWJpY29udi4uLiAiID4mNjsgfQ0KICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVu by0kTElORU5PfTogcmVzdWx0OiAkTElCSUNPTlYiID4mNQ0KJGFzX2VjaG8gIiRMSUJJQ09OViIg PiY2OyB9DQogIGVsc2UNCiAgICAgICAgICAgIENQUEZMQUdTPSIkYW1fc2F2ZV9DUFBGTEFHUyIN CiAgICBMSUJJQ09OVj0NCiAgICBMVExJQklDT05WPQ0KICBmaQ0KDQoNCg0KDQoNCg0KDQoNCg0K DQoNCiAgICB1c2VfYWRkaXRpb25hbD15ZXMNCg0KICBhY2xfc2F2ZV9wcmVmaXg9IiRwcmVmaXgi DQogIHByZWZpeD0iJGFjbF9maW5hbF9wcmVmaXgiDQogIGFjbF9zYXZlX2V4ZWNfcHJlZml4PSIk ZXhlY19wcmVmaXgiDQogIGV4ZWNfcHJlZml4PSIkYWNsX2ZpbmFsX2V4ZWNfcHJlZml4Ig0KDQog ICAgZXZhbCBhZGRpdGlvbmFsX2luY2x1ZGVkaXI9XCIkaW5jbHVkZWRpclwiDQogICAgZXZhbCBh ZGRpdGlvbmFsX2xpYmRpcj1cIiRsaWJkaXJcIg0KDQogIGV4ZWNfcHJlZml4PSIkYWNsX3NhdmVf ZXhlY19wcmVmaXgiDQogIHByZWZpeD0iJGFjbF9zYXZlX3ByZWZpeCINCg0KDQojIENoZWNrIHdo ZXRoZXIgLS13aXRoLWxpYmludGwtcHJlZml4IHdhcyBnaXZlbi4NCmlmIHRlc3QgIiR7d2l0aF9s aWJpbnRsX3ByZWZpeCtzZXR9IiA9IHNldDsgdGhlbiA6DQogIHdpdGh2YWw9JHdpdGhfbGliaW50 bF9wcmVmaXg7DQogICAgaWYgdGVzdCAiWCR3aXRodmFsIiA9ICJYbm8iOyB0aGVuDQogICAgICB1 c2VfYWRkaXRpb25hbD1ubw0KICAgIGVsc2UNCiAgICAgIGlmIHRlc3QgIlgkd2l0aHZhbCIgPSAi WCI7IHRoZW4NCg0KICBhY2xfc2F2ZV9wcmVmaXg9IiRwcmVmaXgiDQogIHByZWZpeD0iJGFjbF9m aW5hbF9wcmVmaXgiDQogIGFjbF9zYXZlX2V4ZWNfcHJlZml4PSIkZXhlY19wcmVmaXgiDQogIGV4 ZWNfcHJlZml4PSIkYWNsX2ZpbmFsX2V4ZWNfcHJlZml4Ig0KDQogICAgICAgICAgZXZhbCBhZGRp dGlvbmFsX2luY2x1ZGVkaXI9XCIkaW5jbHVkZWRpclwiDQogICAgICAgICAgZXZhbCBhZGRpdGlv bmFsX2xpYmRpcj1cIiRsaWJkaXJcIg0KDQogIGV4ZWNfcHJlZml4PSIkYWNsX3NhdmVfZXhlY19w cmVmaXgiDQogIHByZWZpeD0iJGFjbF9zYXZlX3ByZWZpeCINCg0KICAgICAgZWxzZQ0KICAgICAg ICBhZGRpdGlvbmFsX2luY2x1ZGVkaXI9IiR3aXRodmFsL2luY2x1ZGUiDQogICAgICAgIGFkZGl0 aW9uYWxfbGliZGlyPSIkd2l0aHZhbC8kYWNsX2xpYmRpcnN0ZW0iDQogICAgICAgIGlmIHRlc3Qg IiRhY2xfbGliZGlyc3RlbTIiICE9ICIkYWNsX2xpYmRpcnN0ZW0iIFwNCiAgICAgICAgICAgJiYg ISB0ZXN0IC1kICIkd2l0aHZhbC8kYWNsX2xpYmRpcnN0ZW0iOyB0aGVuDQogICAgICAgICAgYWRk aXRpb25hbF9saWJkaXI9IiR3aXRodmFsLyRhY2xfbGliZGlyc3RlbTIiDQogICAgICAgIGZpDQog ICAgICBmaQ0KICAgIGZpDQoNCmZpDQoNCiAgICAgIExJQklOVEw9DQogIExUTElCSU5UTD0NCiAg SU5DSU5UTD0NCiAgTElCSU5UTF9QUkVGSVg9DQogICAgICBIQVZFX0xJQklOVEw9DQogIHJwYXRo ZGlycz0NCiAgbHRycGF0aGRpcnM9DQogIG5hbWVzX2FscmVhZHlfaGFuZGxlZD0NCiAgbmFtZXNf bmV4dF9yb3VuZD0naW50bCAnDQogIHdoaWxlIHRlc3QgLW4gIiRuYW1lc19uZXh0X3JvdW5kIjsg ZG8NCiAgICBuYW1lc190aGlzX3JvdW5kPSIkbmFtZXNfbmV4dF9yb3VuZCINCiAgICBuYW1lc19u ZXh0X3JvdW5kPQ0KICAgIGZvciBuYW1lIGluICRuYW1lc190aGlzX3JvdW5kOyBkbw0KICAgICAg YWxyZWFkeV9oYW5kbGVkPQ0KICAgICAgZm9yIG4gaW4gJG5hbWVzX2FscmVhZHlfaGFuZGxlZDsg ZG8NCiAgICAgICAgaWYgdGVzdCAiJG4iID0gIiRuYW1lIjsgdGhlbg0KICAgICAgICAgIGFscmVh ZHlfaGFuZGxlZD15ZXMNCiAgICAgICAgICBicmVhaw0KICAgICAgICBmaQ0KICAgICAgZG9uZQ0K ICAgICAgaWYgdGVzdCAteiAiJGFscmVhZHlfaGFuZGxlZCI7IHRoZW4NCiAgICAgICAgbmFtZXNf YWxyZWFkeV9oYW5kbGVkPSIkbmFtZXNfYWxyZWFkeV9oYW5kbGVkICRuYW1lIg0KICAgICAgICAg ICAgICAgICAgICAgICAgdXBwZXJuYW1lPWBlY2hvICIkbmFtZSIgfCBzZWQgLWUgJ3l8YWJjZGVm Z2hpamtsbW5vcHFyc3R1dnd4eXouLystfEFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaX19fX3wn YA0KICAgICAgICBldmFsIHZhbHVlPVwiXCRIQVZFX0xJQiR1cHBlcm5hbWVcIg0KICAgICAgICBp ZiB0ZXN0IC1uICIkdmFsdWUiOyB0aGVuDQogICAgICAgICAgaWYgdGVzdCAiJHZhbHVlIiA9IHll czsgdGhlbg0KICAgICAgICAgICAgZXZhbCB2YWx1ZT1cIlwkTElCJHVwcGVybmFtZVwiDQogICAg ICAgICAgICB0ZXN0IC16ICIkdmFsdWUiIHx8IExJQklOVEw9IiR7TElCSU5UTH0ke0xJQklOVEw6 KyB9JHZhbHVlIg0KICAgICAgICAgICAgZXZhbCB2YWx1ZT1cIlwkTFRMSUIkdXBwZXJuYW1lXCIN CiAgICAgICAgICAgIHRlc3QgLXogIiR2YWx1ZSIgfHwgTFRMSUJJTlRMPSIke0xUTElCSU5UTH0k e0xUTElCSU5UTDorIH0kdmFsdWUiDQogICAgICAgICAgZWxzZQ0KICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgOg0KICAgICAgICAgIGZpDQogICAgICAgIGVsc2UNCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGZvdW5kX2Rpcj0NCiAgICAgICAgICBmb3VuZF9sYT0NCiAg ICAgICAgICBmb3VuZF9zbz0NCiAgICAgICAgICBmb3VuZF9hPQ0KICAgICAgICAgIGV2YWwgbGli bmFtZT1cIiRhY2xfbGlibmFtZV9zcGVjXCIgICAgIyB0eXBpY2FsbHk6IGxpYm5hbWU9bGliJG5h bWUNCiAgICAgICAgICBpZiB0ZXN0IC1uICIkYWNsX3NobGliZXh0IjsgdGhlbg0KICAgICAgICAg ICAgc2hyZXh0PSIuJGFjbF9zaGxpYmV4dCIgICAgICAgICAgICAgIyB0eXBpY2FsbHk6IHNocmV4 dD0uc28NCiAgICAgICAgICBlbHNlDQogICAgICAgICAgICBzaHJleHQ9DQogICAgICAgICAgZmkN CiAgICAgICAgICBpZiB0ZXN0ICR1c2VfYWRkaXRpb25hbCA9IHllczsgdGhlbg0KICAgICAgICAg ICAgZGlyPSIkYWRkaXRpb25hbF9saWJkaXIiDQogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBpZiB0ZXN0IC1uICIkYWNsX3NobGliZXh0IjsgdGhlbg0KICAgICAgICAgICAgICBp ZiB0ZXN0IC1mICIkZGlyLyRsaWJuYW1lJHNocmV4dCI7IHRoZW4NCiAgICAgICAgICAgICAgICBm b3VuZF9kaXI9IiRkaXIiDQogICAgICAgICAgICAgICAgZm91bmRfc289IiRkaXIvJGxpYm5hbWUk c2hyZXh0Ig0KICAgICAgICAgICAgICBlbHNlDQogICAgICAgICAgICAgICAgaWYgdGVzdCAiJGFj bF9saWJyYXJ5X25hbWVzX3NwZWMiID0gJyRsaWJuYW1lJHNocmV4dCR2ZXJzdWZmaXgnOyB0aGVu DQogICAgICAgICAgICAgICAgICB2ZXI9YChjZCAiJGRpciIgJiYgXA0KICAgICAgICAgICAgICAg ICAgICAgICAgZm9yIGYgaW4gIiRsaWJuYW1lJHNocmV4dCIuKjsgZG8gZWNobyAiJGYiOyBkb25l IFwNCiAgICAgICAgICAgICAgICAgICAgICAgIHwgc2VkIC1lICJzLF4kbGlibmFtZSRzaHJleHRc XFxcLiwsIiBcDQogICAgICAgICAgICAgICAgICAgICAgICB8IHNvcnQgLXQgJy4nIC1uIC1yIC1r MSwxIC1rMiwyIC1rMywzIC1rNCw0IC1rNSw1IFwNCiAgICAgICAgICAgICAgICAgICAgICAgIHwg c2VkIDFxICkgMj4vZGV2L251bGxgDQogICAgICAgICAgICAgICAgICBpZiB0ZXN0IC1uICIkdmVy IiAmJiB0ZXN0IC1mICIkZGlyLyRsaWJuYW1lJHNocmV4dC4kdmVyIjsgdGhlbg0KICAgICAgICAg ICAgICAgICAgICBmb3VuZF9kaXI9IiRkaXIiDQogICAgICAgICAgICAgICAgICAgIGZvdW5kX3Nv PSIkZGlyLyRsaWJuYW1lJHNocmV4dC4kdmVyIg0KICAgICAgICAgICAgICAgICAgZmkNCiAgICAg ICAgICAgICAgICBlbHNlDQogICAgICAgICAgICAgICAgICBldmFsIGxpYnJhcnlfbmFtZXM9XCIk YWNsX2xpYnJhcnlfbmFtZXNfc3BlY1wiDQogICAgICAgICAgICAgICAgICBmb3IgZiBpbiAkbGli cmFyeV9uYW1lczsgZG8NCiAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAtZiAiJGRpci8kZiI7 IHRoZW4NCiAgICAgICAgICAgICAgICAgICAgICBmb3VuZF9kaXI9IiRkaXIiDQogICAgICAgICAg ICAgICAgICAgICAgZm91bmRfc289IiRkaXIvJGYiDQogICAgICAgICAgICAgICAgICAgICAgYnJl YWsNCiAgICAgICAgICAgICAgICAgICAgZmkNCiAgICAgICAgICAgICAgICAgIGRvbmUNCiAgICAg ICAgICAgICAgICBmaQ0KICAgICAgICAgICAgICBmaQ0KICAgICAgICAgICAgZmkNCiAgICAgICAg ICAgICAgICAgICAgICAgIGlmIHRlc3QgIlgkZm91bmRfZGlyIiA9ICJYIjsgdGhlbg0KICAgICAg ICAgICAgICBpZiB0ZXN0IC1mICIkZGlyLyRsaWJuYW1lLiRhY2xfbGliZXh0IjsgdGhlbg0KICAg ICAgICAgICAgICAgIGZvdW5kX2Rpcj0iJGRpciINCiAgICAgICAgICAgICAgICBmb3VuZF9hPSIk ZGlyLyRsaWJuYW1lLiRhY2xfbGliZXh0Ig0KICAgICAgICAgICAgICBmaQ0KICAgICAgICAgICAg ZmkNCiAgICAgICAgICAgIGlmIHRlc3QgIlgkZm91bmRfZGlyIiAhPSAiWCI7IHRoZW4NCiAgICAg ICAgICAgICAgaWYgdGVzdCAtZiAiJGRpci8kbGlibmFtZS5sYSI7IHRoZW4NCiAgICAgICAgICAg ICAgICBmb3VuZF9sYT0iJGRpci8kbGlibmFtZS5sYSINCiAgICAgICAgICAgICAgZmkNCiAgICAg ICAgICAgIGZpDQogICAgICAgICAgZmkNCiAgICAgICAgICBpZiB0ZXN0ICJYJGZvdW5kX2RpciIg PSAiWCI7IHRoZW4NCiAgICAgICAgICAgIGZvciB4IGluICRMREZMQUdTICRMVExJQklOVEw7IGRv DQoNCiAgYWNsX3NhdmVfcHJlZml4PSIkcHJlZml4Ig0KICBwcmVmaXg9IiRhY2xfZmluYWxfcHJl Zml4Ig0KICBhY2xfc2F2ZV9leGVjX3ByZWZpeD0iJGV4ZWNfcHJlZml4Ig0KICBleGVjX3ByZWZp eD0iJGFjbF9maW5hbF9leGVjX3ByZWZpeCINCiAgZXZhbCB4PVwiJHhcIg0KICBleGVjX3ByZWZp eD0iJGFjbF9zYXZlX2V4ZWNfcHJlZml4Ig0KICBwcmVmaXg9IiRhY2xfc2F2ZV9wcmVmaXgiDQoN CiAgICAgICAgICAgICAgY2FzZSAiJHgiIGluDQogICAgICAgICAgICAgICAgLUwqKQ0KICAgICAg ICAgICAgICAgICAgZGlyPWBlY2hvICJYJHgiIHwgc2VkIC1lICdzL15YLUwvLydgDQogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0IC1uICIkYWNsX3NobGliZXh0Ijsg dGhlbg0KICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0IC1mICIkZGlyLyRsaWJuYW1lJHNocmV4 dCI7IHRoZW4NCiAgICAgICAgICAgICAgICAgICAgICBmb3VuZF9kaXI9IiRkaXIiDQogICAgICAg ICAgICAgICAgICAgICAgZm91bmRfc289IiRkaXIvJGxpYm5hbWUkc2hyZXh0Ig0KICAgICAgICAg ICAgICAgICAgICBlbHNlDQogICAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAiJGFjbF9saWJy YXJ5X25hbWVzX3NwZWMiID0gJyRsaWJuYW1lJHNocmV4dCR2ZXJzdWZmaXgnOyB0aGVuDQogICAg ICAgICAgICAgICAgICAgICAgICB2ZXI9YChjZCAiJGRpciIgJiYgXA0KICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgZm9yIGYgaW4gIiRsaWJuYW1lJHNocmV4dCIuKjsgZG8gZWNobyAiJGYi OyBkb25lIFwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgc2VkIC1lICJzLF4kbGli bmFtZSRzaHJleHRcXFxcLiwsIiBcDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHNv cnQgLXQgJy4nIC1uIC1yIC1rMSwxIC1rMiwyIC1rMywzIC1rNCw0IC1rNSw1IFwNCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHwgc2VkIDFxICkgMj4vZGV2L251bGxgDQogICAgICAgICAg ICAgICAgICAgICAgICBpZiB0ZXN0IC1uICIkdmVyIiAmJiB0ZXN0IC1mICIkZGlyLyRsaWJuYW1l JHNocmV4dC4kdmVyIjsgdGhlbg0KICAgICAgICAgICAgICAgICAgICAgICAgICBmb3VuZF9kaXI9 IiRkaXIiDQogICAgICAgICAgICAgICAgICAgICAgICAgIGZvdW5kX3NvPSIkZGlyLyRsaWJuYW1l JHNocmV4dC4kdmVyIg0KICAgICAgICAgICAgICAgICAgICAgICAgZmkNCiAgICAgICAgICAgICAg ICAgICAgICBlbHNlDQogICAgICAgICAgICAgICAgICAgICAgICBldmFsIGxpYnJhcnlfbmFtZXM9 XCIkYWNsX2xpYnJhcnlfbmFtZXNfc3BlY1wiDQogICAgICAgICAgICAgICAgICAgICAgICBmb3Ig ZiBpbiAkbGlicmFyeV9uYW1lczsgZG8NCiAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgdGVz dCAtZiAiJGRpci8kZiI7IHRoZW4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3VuZF9k aXI9IiRkaXIiDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgZm91bmRfc289IiRkaXIvJGYi DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsNCiAgICAgICAgICAgICAgICAgICAg ICAgICAgZmkNCiAgICAgICAgICAgICAgICAgICAgICAgIGRvbmUNCiAgICAgICAgICAgICAgICAg ICAgICBmaQ0KICAgICAgICAgICAgICAgICAgICBmaQ0KICAgICAgICAgICAgICAgICAgZmkNCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgIlgkZm91bmRfZGlyIiA9 ICJYIjsgdGhlbg0KICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0IC1mICIkZGlyLyRsaWJuYW1l LiRhY2xfbGliZXh0IjsgdGhlbg0KICAgICAgICAgICAgICAgICAgICAgIGZvdW5kX2Rpcj0iJGRp ciINCiAgICAgICAgICAgICAgICAgICAgICBmb3VuZF9hPSIkZGlyLyRsaWJuYW1lLiRhY2xfbGli ZXh0Ig0KICAgICAgICAgICAgICAgICAgICBmaQ0KICAgICAgICAgICAgICAgICAgZmkNCiAgICAg ICAgICAgICAgICAgIGlmIHRlc3QgIlgkZm91bmRfZGlyIiAhPSAiWCI7IHRoZW4NCiAgICAgICAg ICAgICAgICAgICAgaWYgdGVzdCAtZiAiJGRpci8kbGlibmFtZS5sYSI7IHRoZW4NCiAgICAgICAg ICAgICAgICAgICAgICBmb3VuZF9sYT0iJGRpci8kbGlibmFtZS5sYSINCiAgICAgICAgICAgICAg ICAgICAgZmkNCiAgICAgICAgICAgICAgICAgIGZpDQogICAgICAgICAgICAgICAgICA7Ow0KICAg ICAgICAgICAgICBlc2FjDQogICAgICAgICAgICAgIGlmIHRlc3QgIlgkZm91bmRfZGlyIiAhPSAi WCI7IHRoZW4NCiAgICAgICAgICAgICAgICBicmVhaw0KICAgICAgICAgICAgICBmaQ0KICAgICAg ICAgICAgZG9uZQ0KICAgICAgICAgIGZpDQogICAgICAgICAgaWYgdGVzdCAiWCRmb3VuZF9kaXIi ICE9ICJYIjsgdGhlbg0KICAgICAgICAgICAgICAgICAgICAgICAgTFRMSUJJTlRMPSIke0xUTElC SU5UTH0ke0xUTElCSU5UTDorIH0tTCRmb3VuZF9kaXIgLWwkbmFtZSINCiAgICAgICAgICAgIGlm IHRlc3QgIlgkZm91bmRfc28iICE9ICJYIjsgdGhlbg0KICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0ICIkZW5hYmxlX3JwYXRoIiA9 IG5vIFwNCiAgICAgICAgICAgICAgICAgfHwgdGVzdCAiWCRmb3VuZF9kaXIiID0gIlgvdXNyLyRh Y2xfbGliZGlyc3RlbSIgXA0KICAgICAgICAgICAgICAgICB8fCB0ZXN0ICJYJGZvdW5kX2RpciIg PSAiWC91c3IvJGFjbF9saWJkaXJzdGVtMiI7IHRoZW4NCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgTElCSU5UTD0iJHtMSUJJTlRMfSR7TElCSU5UTDorIH0kZm91bmRfc28iDQogICAg ICAgICAgICAgIGVsc2UNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGF2ZWl0PQ0KICAgICAgICAg ICAgICAgIGZvciB4IGluICRsdHJwYXRoZGlyczsgZG8NCiAgICAgICAgICAgICAgICAgIGlmIHRl c3QgIlgkeCIgPSAiWCRmb3VuZF9kaXIiOyB0aGVuDQogICAgICAgICAgICAgICAgICAgIGhhdmVp dD15ZXMNCiAgICAgICAgICAgICAgICAgICAgYnJlYWsNCiAgICAgICAgICAgICAgICAgIGZpDQog ICAgICAgICAgICAgICAgZG9uZQ0KICAgICAgICAgICAgICAgIGlmIHRlc3QgLXogIiRoYXZlaXQi OyB0aGVuDQogICAgICAgICAgICAgICAgICBsdHJwYXRoZGlycz0iJGx0cnBhdGhkaXJzICRmb3Vu ZF9kaXIiDQogICAgICAgICAgICAgICAgZmkNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgaWYgdGVzdCAiJGFjbF9oYXJkY29kZV9kaXJlY3QiID0geWVzOyB0aGVuDQogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMSUJJTlRMPSIke0xJ QklOVEx9JHtMSUJJTlRMOisgfSRmb3VuZF9zbyINCiAgICAgICAgICAgICAgICBlbHNlDQogICAg ICAgICAgICAgICAgICBpZiB0ZXN0IC1uICIkYWNsX2hhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMi ICYmIHRlc3QgIiRhY2xfaGFyZGNvZGVfbWludXNfTCIgPSBubzsgdGhlbg0KICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTElCSU5UTD0i JHtMSUJJTlRMfSR7TElCSU5UTDorIH0kZm91bmRfc28iDQogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXZlaXQ9DQogICAgICAgICAg ICAgICAgICAgIGZvciB4IGluICRycGF0aGRpcnM7IGRvDQogICAgICAgICAgICAgICAgICAgICAg aWYgdGVzdCAiWCR4IiA9ICJYJGZvdW5kX2RpciI7IHRoZW4NCiAgICAgICAgICAgICAgICAgICAg ICAgIGhhdmVpdD15ZXMNCiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrDQogICAgICAgICAg ICAgICAgICAgICAgZmkNCiAgICAgICAgICAgICAgICAgICAgZG9uZQ0KICAgICAgICAgICAgICAg ICAgICBpZiB0ZXN0IC16ICIkaGF2ZWl0IjsgdGhlbg0KICAgICAgICAgICAgICAgICAgICAgIHJw YXRoZGlycz0iJHJwYXRoZGlycyAkZm91bmRfZGlyIg0KICAgICAgICAgICAgICAgICAgICBmaQ0K ICAgICAgICAgICAgICAgICAgZWxzZQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXZlaXQ9DQog ICAgICAgICAgICAgICAgICAgIGZvciB4IGluICRMREZMQUdTICRMSUJJTlRMOyBkbw0KDQogIGFj bF9zYXZlX3ByZWZpeD0iJHByZWZpeCINCiAgcHJlZml4PSIkYWNsX2ZpbmFsX3ByZWZpeCINCiAg YWNsX3NhdmVfZXhlY19wcmVmaXg9IiRleGVjX3ByZWZpeCINCiAgZXhlY19wcmVmaXg9IiRhY2xf ZmluYWxfZXhlY19wcmVmaXgiDQogIGV2YWwgeD1cIiR4XCINCiAgZXhlY19wcmVmaXg9IiRhY2xf c2F2ZV9leGVjX3ByZWZpeCINCiAgcHJlZml4PSIkYWNsX3NhdmVfcHJlZml4Ig0KDQogICAgICAg ICAgICAgICAgICAgICAgaWYgdGVzdCAiWCR4IiA9ICJYLUwkZm91bmRfZGlyIjsgdGhlbg0KICAg ICAgICAgICAgICAgICAgICAgICAgaGF2ZWl0PXllcw0KICAgICAgICAgICAgICAgICAgICAgICAg YnJlYWsNCiAgICAgICAgICAgICAgICAgICAgICBmaQ0KICAgICAgICAgICAgICAgICAgICBkb25l DQogICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgLXogIiRoYXZlaXQiOyB0aGVuDQogICAgICAg ICAgICAgICAgICAgICAgTElCSU5UTD0iJHtMSUJJTlRMfSR7TElCSU5UTDorIH0tTCRmb3VuZF9k aXIiDQogICAgICAgICAgICAgICAgICAgIGZpDQogICAgICAgICAgICAgICAgICAgIGlmIHRlc3Qg IiRhY2xfaGFyZGNvZGVfbWludXNfTCIgIT0gbm87IHRoZW4NCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBMSUJJTlRMPSIke0xJQklOVEx9JHtMSUJJTlRMOisgfSRmb3VuZF9zbyINCiAg ICAgICAgICAgICAgICAgICAgZWxzZQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMSUJJTlRMPSIke0xJQklOVEx9JHtMSUJJTlRM OisgfS1sJG5hbWUiDQogICAgICAgICAgICAgICAgICAgIGZpDQogICAgICAgICAgICAgICAgICBm aQ0KICAgICAgICAgICAgICAgIGZpDQogICAgICAgICAgICAgIGZpDQogICAgICAgICAgICBlbHNl DQogICAgICAgICAgICAgIGlmIHRlc3QgIlgkZm91bmRfYSIgIT0gIlgiOyB0aGVuDQogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIExJQklOVEw9IiR7TElCSU5UTH0ke0xJQklOVEw6KyB9 JGZvdW5kX2EiDQogICAgICAgICAgICAgIGVsc2UNCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIExJQklOVEw9IiR7TElCSU5UTH0ke0xJQklOVEw6KyB9LUwk Zm91bmRfZGlyIC1sJG5hbWUiDQogICAgICAgICAgICAgIGZpDQogICAgICAgICAgICBmaQ0KICAg ICAgICAgICAgICAgICAgICAgICAgYWRkaXRpb25hbF9pbmNsdWRlZGlyPQ0KICAgICAgICAgICAg Y2FzZSAiJGZvdW5kX2RpciIgaW4NCiAgICAgICAgICAgICAgKi8kYWNsX2xpYmRpcnN0ZW0gfCAq LyRhY2xfbGliZGlyc3RlbS8pDQogICAgICAgICAgICAgICAgYmFzZWRpcj1gZWNobyAiWCRmb3Vu ZF9kaXIiIHwgc2VkIC1lICdzLF5YLCwnIC1lICJzLC8kYWNsX2xpYmRpcnN0ZW0vIicqJCwsJ2AN CiAgICAgICAgICAgICAgICBpZiB0ZXN0ICIkbmFtZSIgPSAnaW50bCc7IHRoZW4NCiAgICAgICAg ICAgICAgICAgIExJQklOVExfUFJFRklYPSIkYmFzZWRpciINCiAgICAgICAgICAgICAgICBmaQ0K ICAgICAgICAgICAgICAgIGFkZGl0aW9uYWxfaW5jbHVkZWRpcj0iJGJhc2VkaXIvaW5jbHVkZSIN CiAgICAgICAgICAgICAgICA7Ow0KICAgICAgICAgICAgICAqLyRhY2xfbGliZGlyc3RlbTIgfCAq LyRhY2xfbGliZGlyc3RlbTIvKQ0KICAgICAgICAgICAgICAgIGJhc2VkaXI9YGVjaG8gIlgkZm91 bmRfZGlyIiB8IHNlZCAtZSAncyxeWCwsJyAtZSAicywvJGFjbF9saWJkaXJzdGVtMi8iJyokLCwn YA0KICAgICAgICAgICAgICAgIGlmIHRlc3QgIiRuYW1lIiA9ICdpbnRsJzsgdGhlbg0KICAgICAg ICAgICAgICAgICAgTElCSU5UTF9QUkVGSVg9IiRiYXNlZGlyIg0KICAgICAgICAgICAgICAgIGZp DQogICAgICAgICAgICAgICAgYWRkaXRpb25hbF9pbmNsdWRlZGlyPSIkYmFzZWRpci9pbmNsdWRl Ig0KICAgICAgICAgICAgICAgIDs7DQogICAgICAgICAgICBlc2FjDQogICAgICAgICAgICBpZiB0 ZXN0ICJYJGFkZGl0aW9uYWxfaW5jbHVkZWRpciIgIT0gIlgiOyB0aGVuDQogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAiWCRhZGRp dGlvbmFsX2luY2x1ZGVkaXIiICE9ICJYL3Vzci9pbmNsdWRlIjsgdGhlbg0KICAgICAgICAgICAg ICAgIGhhdmVpdD0NCiAgICAgICAgICAgICAgICBpZiB0ZXN0ICJYJGFkZGl0aW9uYWxfaW5jbHVk ZWRpciIgPSAiWC91c3IvbG9jYWwvaW5jbHVkZSI7IHRoZW4NCiAgICAgICAgICAgICAgICAgIGlm IHRlc3QgLW4gIiRHQ0MiOyB0aGVuDQogICAgICAgICAgICAgICAgICAgIGNhc2UgJGhvc3Rfb3Mg aW4NCiAgICAgICAgICAgICAgICAgICAgICBsaW51eCogfCBnbnUqIHwgaypic2QqLWdudSkgaGF2 ZWl0PXllczs7DQogICAgICAgICAgICAgICAgICAgIGVzYWMNCiAgICAgICAgICAgICAgICAgIGZp DQogICAgICAgICAgICAgICAgZmkNCiAgICAgICAgICAgICAgICBpZiB0ZXN0IC16ICIkaGF2ZWl0 IjsgdGhlbg0KICAgICAgICAgICAgICAgICAgZm9yIHggaW4gJENQUEZMQUdTICRJTkNJTlRMOyBk bw0KDQogIGFjbF9zYXZlX3ByZWZpeD0iJHByZWZpeCINCiAgcHJlZml4PSIkYWNsX2ZpbmFsX3By ZWZpeCINCiAgYWNsX3NhdmVfZXhlY19wcmVmaXg9IiRleGVjX3ByZWZpeCINCiAgZXhlY19wcmVm aXg9IiRhY2xfZmluYWxfZXhlY19wcmVmaXgiDQogIGV2YWwgeD1cIiR4XCINCiAgZXhlY19wcmVm aXg9IiRhY2xfc2F2ZV9leGVjX3ByZWZpeCINCiAgcHJlZml4PSIkYWNsX3NhdmVfcHJlZml4Ig0K DQogICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgIlgkeCIgPSAiWC1JJGFkZGl0aW9uYWxfaW5j bHVkZWRpciI7IHRoZW4NCiAgICAgICAgICAgICAgICAgICAgICBoYXZlaXQ9eWVzDQogICAgICAg ICAgICAgICAgICAgICAgYnJlYWsNCiAgICAgICAgICAgICAgICAgICAgZmkNCiAgICAgICAgICAg ICAgICAgIGRvbmUNCiAgICAgICAgICAgICAgICAgIGlmIHRlc3QgLXogIiRoYXZlaXQiOyB0aGVu DQogICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgLWQgIiRhZGRpdGlvbmFsX2luY2x1ZGVkaXIi OyB0aGVuDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElOQ0lO VEw9IiR7SU5DSU5UTH0ke0lOQ0lOVEw6KyB9LUkkYWRkaXRpb25hbF9pbmNsdWRlZGlyIg0KICAg ICAgICAgICAgICAgICAgICBmaQ0KICAgICAgICAgICAgICAgICAgZmkNCiAgICAgICAgICAgICAg ICBmaQ0KICAgICAgICAgICAgICBmaQ0KICAgICAgICAgICAgZmkNCiAgICAgICAgICAgICAgICAg ICAgICAgIGlmIHRlc3QgLW4gIiRmb3VuZF9sYSI7IHRoZW4NCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2F2ZV9saWJkaXI9IiRsaWJkaXIi DQogICAgICAgICAgICAgIGNhc2UgIiRmb3VuZF9sYSIgaW4NCiAgICAgICAgICAgICAgICAqLyog fCAqXFwqKSAuICIkZm91bmRfbGEiIDs7DQogICAgICAgICAgICAgICAgKikgLiAiLi8kZm91bmRf bGEiIDs7DQogICAgICAgICAgICAgIGVzYWMNCiAgICAgICAgICAgICAgbGliZGlyPSIkc2F2ZV9s aWJkaXIiDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGRlcCBpbiAkZGVwZW5kZW5j eV9saWJzOyBkbw0KICAgICAgICAgICAgICAgIGNhc2UgIiRkZXAiIGluDQogICAgICAgICAgICAg ICAgICAtTCopDQogICAgICAgICAgICAgICAgICAgIGFkZGl0aW9uYWxfbGliZGlyPWBlY2hvICJY JGRlcCIgfCBzZWQgLWUgJ3MvXlgtTC8vJ2ANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBpZiB0ZXN0ICJYJGFkZGl0aW9uYWxfbGliZGlyIiAhPSAiWC91c3Iv JGFjbF9saWJkaXJzdGVtIiBcDQogICAgICAgICAgICAgICAgICAgICAgICYmIHRlc3QgIlgkYWRk aXRpb25hbF9saWJkaXIiICE9ICJYL3Vzci8kYWNsX2xpYmRpcnN0ZW0yIjsgdGhlbg0KICAgICAg ICAgICAgICAgICAgICAgIGhhdmVpdD0NCiAgICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0ICJY JGFkZGl0aW9uYWxfbGliZGlyIiA9ICJYL3Vzci9sb2NhbC8kYWNsX2xpYmRpcnN0ZW0iIFwNCiAg ICAgICAgICAgICAgICAgICAgICAgICB8fCB0ZXN0ICJYJGFkZGl0aW9uYWxfbGliZGlyIiA9ICJY L3Vzci9sb2NhbC8kYWNsX2xpYmRpcnN0ZW0yIjsgdGhlbg0KICAgICAgICAgICAgICAgICAgICAg ICAgaWYgdGVzdCAtbiAiJEdDQyI7IHRoZW4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgY2Fz ZSAkaG9zdF9vcyBpbg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbnV4KiB8IGdudSog fCBrKmJzZCotZ251KSBoYXZlaXQ9eWVzOzsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgZXNh Yw0KICAgICAgICAgICAgICAgICAgICAgICAgZmkNCiAgICAgICAgICAgICAgICAgICAgICBmaQ0K ICAgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgLXogIiRoYXZlaXQiOyB0aGVuDQogICAgICAg ICAgICAgICAgICAgICAgICBoYXZlaXQ9DQogICAgICAgICAgICAgICAgICAgICAgICBmb3IgeCBp biAkTERGTEFHUyAkTElCSU5UTDsgZG8NCg0KICBhY2xfc2F2ZV9wcmVmaXg9IiRwcmVmaXgiDQog IHByZWZpeD0iJGFjbF9maW5hbF9wcmVmaXgiDQogIGFjbF9zYXZlX2V4ZWNfcHJlZml4PSIkZXhl Y19wcmVmaXgiDQogIGV4ZWNfcHJlZml4PSIkYWNsX2ZpbmFsX2V4ZWNfcHJlZml4Ig0KICBldmFs IHg9XCIkeFwiDQogIGV4ZWNfcHJlZml4PSIkYWNsX3NhdmVfZXhlY19wcmVmaXgiDQogIHByZWZp eD0iJGFjbF9zYXZlX3ByZWZpeCINCg0KICAgICAgICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0 ICJYJHgiID0gIlgtTCRhZGRpdGlvbmFsX2xpYmRpciI7IHRoZW4NCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICBoYXZlaXQ9eWVzDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsN CiAgICAgICAgICAgICAgICAgICAgICAgICAgZmkNCiAgICAgICAgICAgICAgICAgICAgICAgIGRv bmUNCiAgICAgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgLXogIiRoYXZlaXQiOyB0aGVuDQog ICAgICAgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgLWQgIiRhZGRpdGlvbmFsX2xpYmRpciI7 IHRoZW4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgTElCSU5UTD0iJHtMSUJJTlRMfSR7TElCSU5UTDorIH0tTCRhZGRpdGlvbmFsX2xpYmRp ciINCiAgICAgICAgICAgICAgICAgICAgICAgICAgZmkNCiAgICAgICAgICAgICAgICAgICAgICAg IGZpDQogICAgICAgICAgICAgICAgICAgICAgICBoYXZlaXQ9DQogICAgICAgICAgICAgICAgICAg ICAgICBmb3IgeCBpbiAkTERGTEFHUyAkTFRMSUJJTlRMOyBkbw0KDQogIGFjbF9zYXZlX3ByZWZp eD0iJHByZWZpeCINCiAgcHJlZml4PSIkYWNsX2ZpbmFsX3ByZWZpeCINCiAgYWNsX3NhdmVfZXhl Y19wcmVmaXg9IiRleGVjX3ByZWZpeCINCiAgZXhlY19wcmVmaXg9IiRhY2xfZmluYWxfZXhlY19w cmVmaXgiDQogIGV2YWwgeD1cIiR4XCINCiAgZXhlY19wcmVmaXg9IiRhY2xfc2F2ZV9leGVjX3By ZWZpeCINCiAgcHJlZml4PSIkYWNsX3NhdmVfcHJlZml4Ig0KDQogICAgICAgICAgICAgICAgICAg ICAgICAgIGlmIHRlc3QgIlgkeCIgPSAiWC1MJGFkZGl0aW9uYWxfbGliZGlyIjsgdGhlbg0KICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGhhdmVpdD15ZXMNCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICBicmVhaw0KICAgICAgICAgICAgICAgICAgICAgICAgICBmaQ0KICAgICAgICAgICAg ICAgICAgICAgICAgZG9uZQ0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAteiAiJGhh dmVpdCI7IHRoZW4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAtZCAiJGFkZGl0 aW9uYWxfbGliZGlyIjsgdGhlbg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBMVExJQklOVEw9IiR7TFRMSUJJTlRMfSR7TFRMSUJJTlRMOisg fS1MJGFkZGl0aW9uYWxfbGliZGlyIg0KICAgICAgICAgICAgICAgICAgICAgICAgICBmaQ0KICAg ICAgICAgICAgICAgICAgICAgICAgZmkNCiAgICAgICAgICAgICAgICAgICAgICBmaQ0KICAgICAg ICAgICAgICAgICAgICBmaQ0KICAgICAgICAgICAgICAgICAgICA7Ow0KICAgICAgICAgICAgICAg ICAgLVIqKQ0KICAgICAgICAgICAgICAgICAgICBkaXI9YGVjaG8gIlgkZGVwIiB8IHNlZCAtZSAn cy9eWC1SLy8nYA0KICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0ICIkZW5hYmxlX3JwYXRoIiAh PSBubzsgdGhlbg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgaGF2ZWl0PQ0KICAgICAgICAgICAgICAgICAgICAgIGZvciB4 IGluICRycGF0aGRpcnM7IGRvDQogICAgICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0ICJYJHgi ID0gIlgkZGlyIjsgdGhlbg0KICAgICAgICAgICAgICAgICAgICAgICAgICBoYXZlaXQ9eWVzDQog ICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrDQogICAgICAgICAgICAgICAgICAgICAgICBm aQ0KICAgICAgICAgICAgICAgICAgICAgIGRvbmUNCiAgICAgICAgICAgICAgICAgICAgICBpZiB0 ZXN0IC16ICIkaGF2ZWl0IjsgdGhlbg0KICAgICAgICAgICAgICAgICAgICAgICAgcnBhdGhkaXJz PSIkcnBhdGhkaXJzICRkaXIiDQogICAgICAgICAgICAgICAgICAgICAgZmkNCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhh dmVpdD0NCiAgICAgICAgICAgICAgICAgICAgICBmb3IgeCBpbiAkbHRycGF0aGRpcnM7IGRvDQog ICAgICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0ICJYJHgiID0gIlgkZGlyIjsgdGhlbg0KICAg ICAgICAgICAgICAgICAgICAgICAgICBoYXZlaXQ9eWVzDQogICAgICAgICAgICAgICAgICAgICAg ICAgIGJyZWFrDQogICAgICAgICAgICAgICAgICAgICAgICBmaQ0KICAgICAgICAgICAgICAgICAg ICAgIGRvbmUNCiAgICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0IC16ICIkaGF2ZWl0IjsgdGhl bg0KICAgICAgICAgICAgICAgICAgICAgICAgbHRycGF0aGRpcnM9IiRsdHJwYXRoZGlycyAkZGly Ig0KICAgICAgICAgICAgICAgICAgICAgIGZpDQogICAgICAgICAgICAgICAgICAgIGZpDQogICAg ICAgICAgICAgICAgICAgIDs7DQogICAgICAgICAgICAgICAgICAtbCopDQogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZXNfbmV4dF9yb3VuZD0iJG5hbWVzX25leHRf cm91bmQgImBlY2hvICJYJGRlcCIgfCBzZWQgLWUgJ3MvXlgtbC8vJ2ANCiAgICAgICAgICAgICAg ICAgICAgOzsNCiAgICAgICAgICAgICAgICAgICoubGEpDQogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IG5hbWVzX25leHRfcm91bmQ9IiRuYW1lc19uZXh0X3JvdW5kICJgZWNobyAiWCRkZXAiIHwgc2Vk IC1lICdzLF5YLiovLCwnIC1lICdzLF5saWIsLCcgLWUgJ3MsXC5sYSQsLCdgDQogICAgICAgICAg ICAgICAgICAgIDs7DQogICAgICAgICAgICAgICAgICAqKQ0KICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIExJQklOVEw9IiR7TElCSU5UTH0ke0xJQklOVEw6KyB9JGRlcCIN CiAgICAgICAgICAgICAgICAgICAgTFRMSUJJTlRMPSIke0xUTElCSU5UTH0ke0xUTElCSU5UTDor IH0kZGVwIg0KICAgICAgICAgICAgICAgICAgICA7Ow0KICAgICAgICAgICAgICAgIGVzYWMNCiAg ICAgICAgICAgICAgZG9uZQ0KICAgICAgICAgICAgZmkNCiAgICAgICAgICBlbHNlDQogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMSUJJ TlRMPSIke0xJQklOVEx9JHtMSUJJTlRMOisgfS1sJG5hbWUiDQogICAgICAgICAgICBMVExJQklO VEw9IiR7TFRMSUJJTlRMfSR7TFRMSUJJTlRMOisgfS1sJG5hbWUiDQogICAgICAgICAgZmkNCiAg ICAgICAgZmkNCiAgICAgIGZpDQogICAgZG9uZQ0KICBkb25lDQogIGlmIHRlc3QgIlgkcnBhdGhk aXJzIiAhPSAiWCI7IHRoZW4NCiAgICBpZiB0ZXN0IC1uICIkYWNsX2hhcmRjb2RlX2xpYmRpcl9z ZXBhcmF0b3IiOyB0aGVuDQogICAgICAgICAgICAgICAgICAgICAgICBhbGxkaXJzPQ0KICAgICAg Zm9yIGZvdW5kX2RpciBpbiAkcnBhdGhkaXJzOyBkbw0KICAgICAgICBhbGxkaXJzPSIke2FsbGRp cnN9JHthbGxkaXJzOiskYWNsX2hhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3J9JGZvdW5kX2RpciIN CiAgICAgIGRvbmUNCiAgICAgICAgICAgIGFjbF9zYXZlX2xpYmRpcj0iJGxpYmRpciINCiAgICAg IGxpYmRpcj0iJGFsbGRpcnMiDQogICAgICBldmFsIGZsYWc9XCIkYWNsX2hhcmRjb2RlX2xpYmRp cl9mbGFnX3NwZWNcIg0KICAgICAgbGliZGlyPSIkYWNsX3NhdmVfbGliZGlyIg0KICAgICAgTElC SU5UTD0iJHtMSUJJTlRMfSR7TElCSU5UTDorIH0kZmxhZyINCiAgICBlbHNlDQogICAgICAgICAg ICBmb3IgZm91bmRfZGlyIGluICRycGF0aGRpcnM7IGRvDQogICAgICAgIGFjbF9zYXZlX2xpYmRp cj0iJGxpYmRpciINCiAgICAgICAgbGliZGlyPSIkZm91bmRfZGlyIg0KICAgICAgICBldmFsIGZs YWc9XCIkYWNsX2hhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNcIg0KICAgICAgICBsaWJkaXI9IiRh Y2xfc2F2ZV9saWJkaXIiDQogICAgICAgIExJQklOVEw9IiR7TElCSU5UTH0ke0xJQklOVEw6KyB9 JGZsYWciDQogICAgICBkb25lDQogICAgZmkNCiAgZmkNCiAgaWYgdGVzdCAiWCRsdHJwYXRoZGly cyIgIT0gIlgiOyB0aGVuDQogICAgICAgICAgICBmb3IgZm91bmRfZGlyIGluICRsdHJwYXRoZGly czsgZG8NCiAgICAgIExUTElCSU5UTD0iJHtMVExJQklOVEx9JHtMVExJQklOVEw6KyB9LVIkZm91 bmRfZGlyIg0KICAgIGRvbmUNCiAgZmkNCg0KDQoNCg0KDQoNCiAgICAgICAgICB7ICRhc19lY2hv ICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBHTlUgZ2V0dGV4dCBp biBsaWJpbnRsIiA+JjUNCiRhc19lY2hvX24gImNoZWNraW5nIGZvciBHTlUgZ2V0dGV4dCBpbiBs aWJpbnRsLi4uICIgPiY2OyB9DQppZiBldmFsIFwkeyRndF9mdW5jX2dudWdldHRleHRfbGliaW50 bCs6fSBmYWxzZTsgdGhlbiA6DQogICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2DQplbHNlDQog IGd0X3NhdmVfQ1BQRkxBR1M9IiRDUFBGTEFHUyINCiAgICAgICAgICAgIENQUEZMQUdTPSIkQ1BQ RkxBR1MgJElOQ0lOVEwiDQogICAgICAgICAgICBndF9zYXZlX0xJQlM9IiRMSUJTIg0KICAgICAg ICAgICAgTElCUz0iJExJQlMgJExJQklOVEwiDQogICAgICAgICAgICAgICAgICAgICAgICBjYXQg Y29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0DQovKiBlbmQgY29uZmRlZnMu aC4gICovDQojaW5jbHVkZSA8bGliaW50bC5oPg0KJGd0X3JldmlzaW9uX3Rlc3RfY29kZQ0KZXh0 ZXJuIGludCBfbmxfbXNnX2NhdF9jbnRyOw0KZXh0ZXJuDQojaWZkZWYgX19jcGx1c3BsdXMNCiJD Ig0KI2VuZGlmDQpjb25zdCBjaGFyICpfbmxfZXhwYW5kX2FsaWFzIChjb25zdCBjaGFyICopOw0K aW50DQptYWluICgpDQp7DQpiaW5kdGV4dGRvbWFpbiAoIiIsICIiKTsNCnJldHVybiAqIGdldHRl eHQgKCIiKSRndF9leHByZXNzaW9uX3Rlc3RfY29kZSArIF9ubF9tc2dfY2F0X2NudHIgKyAqX25s X2V4cGFuZF9hbGlhcyAoIiIpDQogIDsNCiAgcmV0dXJuIDA7DQp9DQpfQUNFT0YNCmlmIGFjX2Zu X2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoNCiAgZXZhbCAiJGd0X2Z1bmNfZ251Z2V0dGV4 dF9saWJpbnRsPXllcyINCmVsc2UNCiAgZXZhbCAiJGd0X2Z1bmNfZ251Z2V0dGV4dF9saWJpbnRs PW5vIg0KZmkNCnJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXA0K ICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0DQogICAgICAgICAgICAgICAg ICAgICAgICBpZiB7IGV2YWwgImd0X3ZhbD1cJCRndF9mdW5jX2dudWdldHRleHRfbGliaW50bCI7 IHRlc3QgIiRndF92YWwiICE9IHllczsgfSAmJiB0ZXN0IC1uICIkTElCSUNPTlYiOyB0aGVuDQog ICAgICAgICAgICAgIExJQlM9IiRMSUJTICRMSUJJQ09OViINCiAgICAgICAgICAgICAgY2F0IGNv bmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dA0KLyogZW5kIGNvbmZkZWZzLmgu ICAqLw0KI2luY2x1ZGUgPGxpYmludGwuaD4NCiRndF9yZXZpc2lvbl90ZXN0X2NvZGUNCmV4dGVy biBpbnQgX25sX21zZ19jYXRfY250cjsNCmV4dGVybg0KI2lmZGVmIF9fY3BsdXNwbHVzDQoiQyIN CiNlbmRpZg0KY29uc3QgY2hhciAqX25sX2V4cGFuZF9hbGlhcyAoY29uc3QgY2hhciAqKTsNCmlu dA0KbWFpbiAoKQ0Kew0KYmluZHRleHRkb21haW4gKCIiLCAiIik7DQpyZXR1cm4gKiBnZXR0ZXh0 ICgiIikkZ3RfZXhwcmVzc2lvbl90ZXN0X2NvZGUgKyBfbmxfbXNnX2NhdF9jbnRyICsgKl9ubF9l eHBhbmRfYWxpYXMgKCIiKQ0KICA7DQogIHJldHVybiAwOw0KfQ0KX0FDRU9GDQppZiBhY19mbl9j X3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6DQogIExJQklOVEw9IiRMSUJJTlRMICRMSUJJQ09O ViINCiAgICAgICAgICAgICAgICBMVExJQklOVEw9IiRMVExJQklOVEwgJExUTElCSUNPTlYiDQog ICAgICAgICAgICAgICAgZXZhbCAiJGd0X2Z1bmNfZ251Z2V0dGV4dF9saWJpbnRsPXllcyINCg0K ZmkNCnJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXA0KICAgIGNv bmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0DQogICAgICAgICAgICBmaQ0KICAgICAg ICAgICAgQ1BQRkxBR1M9IiRndF9zYXZlX0NQUEZMQUdTIg0KICAgICAgICAgICAgTElCUz0iJGd0 X3NhdmVfTElCUyINCmZpDQpldmFsIGFjX3Jlcz1cJCRndF9mdW5jX2dudWdldHRleHRfbGliaW50 bA0KCSAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3Vs dDogJGFjX3JlcyIgPiY1DQokYXNfZWNobyAiJGFjX3JlcyIgPiY2OyB9DQogICAgICAgIGZpDQoN CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiB7IGV2YWwgImd0X3Zh bD1cJCRndF9mdW5jX2dudWdldHRleHRfbGliYyI7IHRlc3QgIiRndF92YWwiID0gInllcyI7IH0g XA0KICAgICAgICAgICB8fCB7IHsgZXZhbCAiZ3RfdmFsPVwkJGd0X2Z1bmNfZ251Z2V0dGV4dF9s aWJpbnRsIjsgdGVzdCAiJGd0X3ZhbCIgPSAieWVzIjsgfSBcDQogICAgICAgICAgICAgICAgJiYg dGVzdCAiJFBBQ0tBR0UiICE9IGdldHRleHQtcnVudGltZSBcDQogICAgICAgICAgICAgICAgJiYg dGVzdCAiJFBBQ0tBR0UiICE9IGdldHRleHQtdG9vbHM7IH07IHRoZW4NCiAgICAgICAgICBndF91 c2VfcHJlaW5zdGFsbGVkX2dudWdldHRleHQ9eWVzDQogICAgICAgIGVsc2UNCiAgICAgICAgICAg ICAgICAgICAgTElCSU5UTD0NCiAgICAgICAgICBMVExJQklOVEw9DQogICAgICAgICAgSU5DSU5U TD0NCiAgICAgICAgZmkNCg0KDQoNCiAgICBpZiB0ZXN0IC1uICIkSU5UTF9NQUNPU1hfTElCUyI7 IHRoZW4NCiAgICAgIGlmIHRlc3QgIiRndF91c2VfcHJlaW5zdGFsbGVkX2dudWdldHRleHQiID0g InllcyIgXA0KICAgICAgICAgfHwgdGVzdCAiJG5sc19jdl91c2VfZ251X2dldHRleHQiID0gInll cyI7IHRoZW4NCiAgICAgICAgICAgICAgICBMSUJJTlRMPSIkTElCSU5UTCAkSU5UTF9NQUNPU1hf TElCUyINCiAgICAgICAgTFRMSUJJTlRMPSIkTFRMSUJJTlRMICRJTlRMX01BQ09TWF9MSUJTIg0K ICAgICAgZmkNCiAgICBmaQ0KDQogICAgaWYgdGVzdCAiJGd0X3VzZV9wcmVpbnN0YWxsZWRfZ251 Z2V0dGV4dCIgPSAieWVzIiBcDQogICAgICAgfHwgdGVzdCAiJG5sc19jdl91c2VfZ251X2dldHRl eHQiID0gInllcyI7IHRoZW4NCg0KJGFzX2VjaG8gIiNkZWZpbmUgRU5BQkxFX05MUyAxIiA+PmNv bmZkZWZzLmgNCg0KICAgIGVsc2UNCiAgICAgIFVTRV9OTFM9bm8NCiAgICBmaQ0KICBmaQ0KDQog IHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhl ciB0byB1c2UgTkxTIiA+JjUNCiRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgdG8gdXNlIE5M Uy4uLiAiID4mNjsgfQ0KICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306 IHJlc3VsdDogJFVTRV9OTFMiID4mNQ0KJGFzX2VjaG8gIiRVU0VfTkxTIiA+JjY7IH0NCiAgaWYg dGVzdCAiJFVTRV9OTFMiID0gInllcyI7IHRoZW4NCiAgICB7ICRhc19lY2hvICIkYXNfbWU6JHth c19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXJlIHRoZSBnZXR0ZXh0IGZ1bmN0aW9uIGNv bWVzIGZyb20iID4mNQ0KJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hlcmUgdGhlIGdldHRleHQgZnVu Y3Rpb24gY29tZXMgZnJvbS4uLiAiID4mNjsgfQ0KICAgIGlmIHRlc3QgIiRndF91c2VfcHJlaW5z dGFsbGVkX2dudWdldHRleHQiID0gInllcyI7IHRoZW4NCiAgICAgIGlmIHsgZXZhbCAiZ3RfdmFs PVwkJGd0X2Z1bmNfZ251Z2V0dGV4dF9saWJpbnRsIjsgdGVzdCAiJGd0X3ZhbCIgPSAieWVzIjsg fTsgdGhlbg0KICAgICAgICBndF9zb3VyY2U9ImV4dGVybmFsIGxpYmludGwiDQogICAgICBlbHNl DQogICAgICAgIGd0X3NvdXJjZT0ibGliYyINCiAgICAgIGZpDQogICAgZWxzZQ0KICAgICAgZ3Rf c291cmNlPSJpbmNsdWRlZCBpbnRsIGRpcmVjdG9yeSINCiAgICBmaQ0KICAgIHsgJGFzX2VjaG8g IiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkZ3Rfc291cmNlIiA+JjUNCiRh c19lY2hvICIkZ3Rfc291cmNlIiA+JjY7IH0NCiAgZmkNCg0KICBpZiB0ZXN0ICIkVVNFX05MUyIg PSAieWVzIjsgdGhlbg0KDQogICAgaWYgdGVzdCAiJGd0X3VzZV9wcmVpbnN0YWxsZWRfZ251Z2V0 dGV4dCIgPSAieWVzIjsgdGhlbg0KICAgICAgaWYgeyBldmFsICJndF92YWw9XCQkZ3RfZnVuY19n bnVnZXR0ZXh0X2xpYmludGwiOyB0ZXN0ICIkZ3RfdmFsIiA9ICJ5ZXMiOyB9OyB0aGVuDQogICAg ICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaG93 IHRvIGxpbmsgd2l0aCBsaWJpbnRsIiA+JjUNCiRhc19lY2hvX24gImNoZWNraW5nIGhvdyB0byBs aW5rIHdpdGggbGliaW50bC4uLiAiID4mNjsgfQ0KICAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6 JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJExJQklOVEwiID4mNQ0KJGFzX2VjaG8gIiRM SUJJTlRMIiA+JjY7IH0NCg0KICBmb3IgZWxlbWVudCBpbiAkSU5DSU5UTDsgZG8NCiAgICBoYXZl aXQ9DQogICAgZm9yIHggaW4gJENQUEZMQUdTOyBkbw0KDQogIGFjbF9zYXZlX3ByZWZpeD0iJHBy ZWZpeCINCiAgcHJlZml4PSIkYWNsX2ZpbmFsX3ByZWZpeCINCiAgYWNsX3NhdmVfZXhlY19wcmVm aXg9IiRleGVjX3ByZWZpeCINCiAgZXhlY19wcmVmaXg9IiRhY2xfZmluYWxfZXhlY19wcmVmaXgi DQogIGV2YWwgeD1cIiR4XCINCiAgZXhlY19wcmVmaXg9IiRhY2xfc2F2ZV9leGVjX3ByZWZpeCIN CiAgcHJlZml4PSIkYWNsX3NhdmVfcHJlZml4Ig0KDQogICAgICBpZiB0ZXN0ICJYJHgiID0gIlgk ZWxlbWVudCI7IHRoZW4NCiAgICAgICAgaGF2ZWl0PXllcw0KICAgICAgICBicmVhaw0KICAgICAg ZmkNCiAgICBkb25lDQogICAgaWYgdGVzdCAteiAiJGhhdmVpdCI7IHRoZW4NCiAgICAgIENQUEZM QUdTPSIke0NQUEZMQUdTfSR7Q1BQRkxBR1M6KyB9JGVsZW1lbnQiDQogICAgZmkNCiAgZG9uZQ0K DQogICAgICBmaQ0KDQoNCiRhc19lY2hvICIjZGVmaW5lIEhBVkVfR0VUVEVYVCAxIiA+PmNvbmZk ZWZzLmgNCg0KDQokYXNfZWNobyAiI2RlZmluZSBIQVZFX0RDR0VUVEVYVCAxIiA+PmNvbmZkZWZz LmgNCg0KICAgIGZpDQoNCiAgICAgICAgUE9TVUI9cG8NCiAgZmkNCg0KDQoNCiAgICBJTlRMTElC Uz0iJExJQklOVEwiDQoNCg0KDQoNCg0KDQoNCg0KIyBGb3IgYSB0ZXN0IG9mIHVuaXE6IGl0IHVz ZXMgdGhlICRMT0NBTEVfRlIgZW52dmFyLg0KDQoNCg0KICB7ICRhc19lY2hvICIkYXNfbWU6JHth c19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBhIHRyYWRpdGlvbmFsIGZyZW5jaCBsb2Nh bGUiID4mNQ0KJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIGEgdHJhZGl0aW9uYWwgZnJlbmNoIGxv Y2FsZS4uLiAiID4mNjsgfQ0KaWYgJHtndF9jdl9sb2NhbGVfZnIrOn0gZmFsc2U7IHRoZW4gOg0K ICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNg0KZWxzZQ0KDQogICAgY2F0IGNvbmZkZWZzLmgg LSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dA0KLyogZW5kIGNvbmZkZWZzLmguICAqLw0KDQoj aW5jbHVkZSA8bG9jYWxlLmg+DQojaW5jbHVkZSA8dGltZS5oPg0KI2lmIEhBVkVfTEFOR0lORk9f Q09ERVNFVA0KIyBpbmNsdWRlIDxsYW5naW5mby5oPg0KI2VuZGlmDQojaW5jbHVkZSA8c3RkbGli Lmg+DQojaW5jbHVkZSA8c3RyaW5nLmg+DQpzdHJ1Y3QgdG0gdDsNCmNoYXIgYnVmWzE2XTsNCmlu dCBtYWluICgpIHsNCiAgLyogQ2hlY2sgd2hldGhlciB0aGUgZ2l2ZW4gbG9jYWxlIG5hbWUgaXMg cmVjb2duaXplZCBieSB0aGUgc3lzdGVtLiAgKi8NCiNpZiAoZGVmaW5lZCBfV0lOMzIgfHwgZGVm aW5lZCBfX1dJTjMyX18pICYmICFkZWZpbmVkIF9fQ1lHV0lOX18NCiAgLyogT24gbmF0aXZlIFdp bjMyLCBzZXRsb2NhbGUoY2F0ZWdvcnksICIiKSBsb29rcyBhdCB0aGUgc3lzdGVtIHNldHRpbmdz LA0KICAgICBub3QgYXQgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlcy4gIEFsc28sIHdoZW4gYW4g ZW5jb2Rpbmcgc3VmZml4IHN1Y2gNCiAgICAgYXMgIi42NTAwMSIgb3IgIi41NDkzNiIgaXMgc3Bl ZmljaWVkLCBpdCBzdWNjZWVkcyBidXQgc2V0cyB0aGUgTENfQ1RZUEUNCiAgICAgY2F0ZWdvcnkg b2YgdGhlIGxvY2FsZSB0byAiQyIuICAqLw0KICBpZiAoc2V0bG9jYWxlIChMQ19BTEwsIGdldGVu diAoIkxDX0FMTCIpKSA9PSBOVUxMDQogICAgICB8fCBzdHJjbXAgKHNldGxvY2FsZSAoTENfQ1RZ UEUsIE5VTEwpLCAiQyIpID09IDApDQogICAgcmV0dXJuIDE7DQojZWxzZQ0KICBpZiAoc2V0bG9j YWxlIChMQ19BTEwsICIiKSA9PSBOVUxMKSByZXR1cm4gMTsNCiNlbmRpZg0KICAvKiBDaGVjayB3 aGV0aGVyIG5sX2xhbmdpbmZvKENPREVTRVQpIGlzIG5vbmVtcHR5IGFuZCBub3QgIkFTQ0lJIiBv ciAiNjQ2Ii4NCiAgICAgT24gTWFjT1MgWCAxMC4zLjUgKERhcndpbiA3LjUpIGluIHRoZSBmcl9G UiBsb2NhbGUsIG5sX2xhbmdpbmZvKENPREVTRVQpDQogICAgIGlzIGVtcHR5LCBhbmQgdGhlIGJl aGF2aW91ciBvZiBUY2wgOC40IGluIHRoaXMgbG9jYWxlIGlzIG5vdCB1c2VmdWwuDQogICAgIE9u IE9wZW5CU0QgNC4wLCB3aGVuIGFuIHVuc3VwcG9ydGVkIGxvY2FsZSBpcyBzcGVjaWZpZWQsIHNl dGxvY2FsZSgpDQogICAgIHN1Y2NlZWRzIGJ1dCB0aGVuIG5sX2xhbmdpbmZvKENPREVTRVQpIGlz ICI2NDYiLiBJbiB0aGlzIHNpdHVhdGlvbiwNCiAgICAgc29tZSB1bml0IHRlc3RzIGZhaWwuDQog ICAgIE9uIE1pckJTRCAxMCwgd2hlbiBhbiB1bnN1cHBvcnRlZCBsb2NhbGUgaXMgc3BlY2lmaWVk LCBzZXRsb2NhbGUoKQ0KICAgICBzdWNjZWVkcyBidXQgdGhlbiBubF9sYW5naW5mbyhDT0RFU0VU KSBpcyAiVVRGLTgiLiAgKi8NCiNpZiBIQVZFX0xBTkdJTkZPX0NPREVTRVQNCiAgew0KICAgIGNv bnN0IGNoYXIgKmNzID0gbmxfbGFuZ2luZm8gKENPREVTRVQpOw0KICAgIGlmIChjc1swXSA9PSAn XDAnIHx8IHN0cmNtcCAoY3MsICJBU0NJSSIpID09IDAgfHwgc3RyY21wIChjcywgIjY0NiIpID09 IDANCiAgICAgICAgfHwgc3RyY21wIChjcywgIlVURi04IikgPT0gMCkNCiAgICAgIHJldHVybiAx Ow0KICB9DQojZW5kaWYNCiNpZmRlZiBfX0NZR1dJTl9fDQogIC8qIE9uIEN5Z3dpbiwgYXZvaWQg bG9jYWxlIG5hbWVzIHdpdGhvdXQgZW5jb2Rpbmcgc3VmZml4LCBiZWNhdXNlIHRoZQ0KICAgICBs b2NhbGVfY2hhcnNldCgpIGZ1bmN0aW9uIHJlbGllcyBvbiB0aGUgZW5jb2Rpbmcgc3VmZml4LiAg Tm90ZSB0aGF0DQogICAgIExDX0FMTCBpcyBzZXQgb24gdGhlIGNvbW1hbmQgbGluZS4gICovDQog IGlmIChzdHJjaHIgKGdldGVudiAoIkxDX0FMTCIpLCAnLicpID09IE5VTEwpIHJldHVybiAxOw0K I2VuZGlmDQogIC8qIENoZWNrIHdoZXRoZXIgaW4gdGhlIGFiYnJldmlhdGlvbiBvZiB0aGUgc2Vj b25kIG1vbnRoLCB0aGUgc2Vjb25kDQogICAgIGNoYXJhY3RlciAoc2hvdWxkIGJlIFUrMDBFOTog TEFUSU4gU01BTEwgTEVUVEVSIEUgV0lUSCBBQ1VURSkgaXMgb25seQ0KICAgICBvbmUgYnl0ZSBs b25nLiBUaGlzIGV4Y2x1ZGVzIHRoZSBVVEYtOCBlbmNvZGluZy4gICovDQogIHQudG1feWVhciA9 IDE5NzUgLSAxOTAwOyB0LnRtX21vbiA9IDIgLSAxOyB0LnRtX21kYXkgPSA0Ow0KICBpZiAoc3Ry ZnRpbWUgKGJ1Ziwgc2l6ZW9mIChidWYpLCAiJWIiLCAmdCkgPCAzIHx8IGJ1ZlsyXSAhPSAndicp IHJldHVybiAxOw0KICAvKiBDaGVjayB3aGV0aGVyIHRoZSBkZWNpbWFsIHNlcGFyYXRvciBpcyBh IGNvbW1hLg0KICAgICBPbiBOZXRCU0QgMy4wIGluIHRoZSBmcl9GUi5JU084ODU5LTEgbG9jYWxl LCBsb2NhbGVjb252KCktPmRlY2ltYWxfcG9pbnQNCiAgICAgYXJlIG5sX2xhbmdpbmZvKFJBRElY Q0hBUikgYXJlIGJvdGggIi4iLiAgKi8NCiAgaWYgKGxvY2FsZWNvbnYgKCkgLT5kZWNpbWFsX3Bv aW50WzBdICE9ICcsJykgcmV0dXJuIDE7DQogIHJldHVybiAwOw0KfQ0KDQpfQUNFT0YNCiAgICBp ZiB7IHsgZXZhbCBlY2hvICJcIlwkYXNfbWVcIjoke2FzX2xpbmVuby0kTElORU5PfTogXCIkYWNf bGlua1wiIjsgfSA+JjUNCiAgKGV2YWwgJGFjX2xpbmspIDI+JjUNCiAgYWNfc3RhdHVzPSQ/DQog ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkPyA9ICRhY19zdGF0dXMi ID4mNQ0KICB0ZXN0ICRhY19zdGF0dXMgPSAwOyB9ICYmIHRlc3QgLXMgY29uZnRlc3QkYWNfZXhl ZXh0OyB0aGVuDQogICAgICBjYXNlICIkaG9zdF9vcyIgaW4NCiAgICAgICAgIyBIYW5kbGUgbmF0 aXZlIFdpbmRvd3Mgc3BlY2lhbGx5LCBiZWNhdXNlIHRoZXJlIHNldGxvY2FsZSgpIGludGVycHJl dHMNCiAgICAgICAgIyAiYXIiIGFzICJBcmFiaWMiIG9yICJBcmFiaWNfU2F1ZGkgQXJhYmlhLjEy NTYiLA0KICAgICAgICAjICJmciIgb3IgImZyYSIgYXMgIkZyZW5jaCIgb3IgIkZyZW5jaF9GcmFu Y2UuMTI1MiIsDQogICAgICAgICMgImdlIighKSBvciAiZGV1IighKSBhcyAiR2VybWFuIiBvciAi R2VybWFuX0dlcm1hbnkuMTI1MiIsDQogICAgICAgICMgImphIiBhcyAiSmFwYW5lc2UiIG9yICJK YXBhbmVzZV9KYXBhbi45MzIiLA0KICAgICAgICAjIGFuZCBzaW1pbGFyLg0KICAgICAgICBtaW5n dyopDQogICAgICAgICAgIyBUZXN0IGZvciB0aGUgbmF0aXZlIFdpbjMyIGxvY2FsZSBuYW1lLg0K ICAgICAgICAgIGlmIChMQ19BTEw9RnJlbmNoX0ZyYW5jZS4xMjUyIExDX1RJTUU9IExDX0NUWVBF PSAuL2NvbmZ0ZXN0OyBleGl0KSAyPi9kZXYvbnVsbDsgdGhlbg0KICAgICAgICAgICAgZ3RfY3Zf bG9jYWxlX2ZyPUZyZW5jaF9GcmFuY2UuMTI1Mg0KICAgICAgICAgIGVsc2UNCiAgICAgICAgICAg ICMgTm9uZSBmb3VuZC4NCiAgICAgICAgICAgIGd0X2N2X2xvY2FsZV9mcj1ub25lDQogICAgICAg ICAgZmkNCiAgICAgICAgICA7Ow0KICAgICAgICAqKQ0KICAgICAgICAgICMgU2V0dGluZyBMQ19B TEwgaXMgbm90IGVub3VnaC4gTmVlZCB0byBzZXQgTENfVElNRSB0byBlbXB0eSwgYmVjYXVzZQ0K ICAgICAgICAgICMgb3RoZXJ3aXNlIG9uIE1hY09TIFggMTAuMy41IHRoZSBMQ19USU1FPUMgZnJv bSB0aGUgYmVnaW5uaW5nIG9mIHRoZQ0KICAgICAgICAgICMgY29uZmlndXJlIHNjcmlwdCB3b3Vs ZCBvdmVycmlkZSB0aGUgTENfQUxMIHNldHRpbmcuIExpa2V3aXNlIGZvcg0KICAgICAgICAgICMg TENfQ1RZUEUsIHdoaWNoIGlzIGFsc28gc2V0IGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIGNvbmZp Z3VyZSBzY3JpcHQuDQogICAgICAgICAgIyBUZXN0IGZvciB0aGUgdXN1YWwgbG9jYWxlIG5hbWUu DQogICAgICAgICAgaWYgKExDX0FMTD1mcl9GUiBMQ19USU1FPSBMQ19DVFlQRT0gLi9jb25mdGVz dDsgZXhpdCkgMj4vZGV2L251bGw7IHRoZW4NCiAgICAgICAgICAgIGd0X2N2X2xvY2FsZV9mcj1m cl9GUg0KICAgICAgICAgIGVsc2UNCiAgICAgICAgICAgICMgVGVzdCBmb3IgdGhlIGxvY2FsZSBu YW1lIHdpdGggZXhwbGljaXQgZW5jb2Rpbmcgc3VmZml4Lg0KICAgICAgICAgICAgaWYgKExDX0FM TD1mcl9GUi5JU08tODg1OS0xIExDX1RJTUU9IExDX0NUWVBFPSAuL2NvbmZ0ZXN0OyBleGl0KSAy Pi9kZXYvbnVsbDsgdGhlbg0KICAgICAgICAgICAgICBndF9jdl9sb2NhbGVfZnI9ZnJfRlIuSVNP LTg4NTktMQ0KICAgICAgICAgICAgZWxzZQ0KICAgICAgICAgICAgICAjIFRlc3QgZm9yIHRoZSBB SVgsIE9TRi8xLCBGcmVlQlNELCBOZXRCU0QsIE9wZW5CU0QgbG9jYWxlIG5hbWUuDQogICAgICAg ICAgICAgIGlmIChMQ19BTEw9ZnJfRlIuSVNPODg1OS0xIExDX1RJTUU9IExDX0NUWVBFPSAuL2Nv bmZ0ZXN0OyBleGl0KSAyPi9kZXYvbnVsbDsgdGhlbg0KICAgICAgICAgICAgICAgIGd0X2N2X2xv Y2FsZV9mcj1mcl9GUi5JU084ODU5LTENCiAgICAgICAgICAgICAgZWxzZQ0KICAgICAgICAgICAg ICAgICMgVGVzdCBmb3IgdGhlIEhQLVVYIGxvY2FsZSBuYW1lLg0KICAgICAgICAgICAgICAgIGlm IChMQ19BTEw9ZnJfRlIuaXNvODg1OTEgTENfVElNRT0gTENfQ1RZUEU9IC4vY29uZnRlc3Q7IGV4 aXQpIDI+L2Rldi9udWxsOyB0aGVuDQogICAgICAgICAgICAgICAgICBndF9jdl9sb2NhbGVfZnI9 ZnJfRlIuaXNvODg1OTENCiAgICAgICAgICAgICAgICBlbHNlDQogICAgICAgICAgICAgICAgICAj IFRlc3QgZm9yIHRoZSBTb2xhcmlzIDcgbG9jYWxlIG5hbWUuDQogICAgICAgICAgICAgICAgICBp ZiAoTENfQUxMPWZyIExDX1RJTUU9IExDX0NUWVBFPSAuL2NvbmZ0ZXN0OyBleGl0KSAyPi9kZXYv bnVsbDsgdGhlbg0KICAgICAgICAgICAgICAgICAgICBndF9jdl9sb2NhbGVfZnI9ZnINCiAgICAg ICAgICAgICAgICAgIGVsc2UNCiAgICAgICAgICAgICAgICAgICAgIyBOb25lIGZvdW5kLg0KICAg ICAgICAgICAgICAgICAgICBndF9jdl9sb2NhbGVfZnI9bm9uZQ0KICAgICAgICAgICAgICAgICAg ZmkNCiAgICAgICAgICAgICAgICBmaQ0KICAgICAgICAgICAgICBmaQ0KICAgICAgICAgICAgZmkN CiAgICAgICAgICBmaQ0KICAgICAgICAgIDs7DQogICAgICBlc2FjDQogICAgZmkNCiAgICBybSAt ZnIgY29uZnRlc3QqDQoNCmZpDQp7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVO T306IHJlc3VsdDogJGd0X2N2X2xvY2FsZV9mciIgPiY1DQokYXNfZWNobyAiJGd0X2N2X2xvY2Fs ZV9mciIgPiY2OyB9DQogIExPQ0FMRV9GUj0kZ3RfY3ZfbG9jYWxlX2ZyDQoNCg0KDQphY19jb25m aWdfZmlsZXM9IiRhY19jb25maWdfZmlsZXMgTWFrZWZpbGUgZG9jL01ha2VmaWxlIGxpYi9NYWtl ZmlsZSBtYW4vTWFrZWZpbGUgcG8vTWFrZWZpbGUuaW4gc3JjL01ha2VmaWxlIHRlc3RzL01ha2Vm aWxlIGdudWxpYi10ZXN0cy9NYWtlZmlsZSINCg0KY2F0ID5jb25mY2FjaGUgPDxcX0FDRU9GDQoj IFRoaXMgZmlsZSBpcyBhIHNoZWxsIHNjcmlwdCB0aGF0IGNhY2hlcyB0aGUgcmVzdWx0cyBvZiBj b25maWd1cmUNCiMgdGVzdHMgcnVuIG9uIHRoaXMgc3lzdGVtIHNvIHRoZXkgY2FuIGJlIHNoYXJl ZCBiZXR3ZWVuIGNvbmZpZ3VyZQ0KIyBzY3JpcHRzIGFuZCBjb25maWd1cmUgcnVucywgc2VlIGNv bmZpZ3VyZSdzIG9wdGlvbiAtLWNvbmZpZy1jYWNoZS4NCiMgSXQgaXMgbm90IHVzZWZ1bCBvbiBv dGhlciBzeXN0ZW1zLiAgSWYgaXQgY29udGFpbnMgcmVzdWx0cyB5b3UgZG9uJ3QNCiMgd2FudCB0 byBrZWVwLCB5b3UgbWF5IHJlbW92ZSBvciBlZGl0IGl0Lg0KIw0KIyBjb25maWcuc3RhdHVzIG9u bHkgcGF5cyBhdHRlbnRpb24gdG8gdGhlIGNhY2hlIGZpbGUgaWYgeW91IGdpdmUgaXQNCiMgdGhl IC0tcmVjaGVjayBvcHRpb24gdG8gcmVydW4gY29uZmlndXJlLg0KIw0KIyBgYWNfY3ZfZW52X2Zv bycgdmFyaWFibGVzIChzZXQgb3IgdW5zZXQpIHdpbGwgYmUgb3ZlcnJpZGRlbiB3aGVuDQojIGxv YWRpbmcgdGhpcyBmaWxlLCBvdGhlciAqdW5zZXQqIGBhY19jdl9mb28nIHdpbGwgYmUgYXNzaWdu ZWQgdGhlDQojIGZvbGxvd2luZyB2YWx1ZXMuDQoNCl9BQ0VPRg0KDQojIFRoZSBmb2xsb3dpbmcg d2F5IG9mIHdyaXRpbmcgdGhlIGNhY2hlIG1pc2hhbmRsZXMgbmV3bGluZXMgaW4gdmFsdWVzLA0K IyBidXQgd2Uga25vdyBvZiBubyB3b3JrYXJvdW5kIHRoYXQgaXMgc2ltcGxlLCBwb3J0YWJsZSwg YW5kIGVmZmljaWVudC4NCiMgU28sIHdlIGtpbGwgdmFyaWFibGVzIGNvbnRhaW5pbmcgbmV3bGlu ZXMuDQojIFVsdHJpeCBzaCBzZXQgd3JpdGVzIHRvIHN0ZGVyciBhbmQgY2FuJ3QgYmUgcmVkaXJl Y3RlZCBkaXJlY3RseSwNCiMgYW5kIHNldHMgdGhlIGhpZ2ggYml0IGluIHRoZSBjYWNoZSBmaWxl IHVubGVzcyB3ZSBhc3NpZ24gdG8gdGhlIHZhcnMuDQooDQogIGZvciBhY192YXIgaW4gYChzZXQp IDI+JjEgfCBzZWQgLW4gJ3MvXlwoW2EtekEtWl9dW2EtekEtWjAtOV9dKlwpPS4qL1wxL3AnYDsg ZG8NCiAgICBldmFsIGFjX3ZhbD1cJCRhY192YXINCiAgICBjYXNlICRhY192YWwgaW4gIygNCiAg ICAqJHthc19ubH0qKQ0KICAgICAgY2FzZSAkYWNfdmFyIGluICMoDQogICAgICAqX2N2XyopIHsg JGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogY2FjaGUgdmFy aWFibGUgJGFjX3ZhciBjb250YWlucyBhIG5ld2xpbmUiID4mNQ0KJGFzX2VjaG8gIiRhc19tZTog V0FSTklORzogY2FjaGUgdmFyaWFibGUgJGFjX3ZhciBjb250YWlucyBhIG5ld2xpbmUiID4mMjt9 IDs7DQogICAgICBlc2FjDQogICAgICBjYXNlICRhY192YXIgaW4gIygNCiAgICAgIF8gfCBJRlMg fCBhc19ubCkgOzsgIygNCiAgICAgIEJBU0hfQVJHViB8IEJBU0hfU09VUkNFKSBldmFsICRhY192 YXI9IDs7ICMoDQogICAgICAqKSB7IGV2YWwgJGFjX3Zhcj07IHVuc2V0ICRhY192YXI7fSA7Ow0K ICAgICAgZXNhYyA7Ow0KICAgIGVzYWMNCiAgZG9uZQ0KDQogIChzZXQpIDI+JjEgfA0KICAgIGNh c2UgJGFzX25sYChhY19zcGFjZT0nICc7IHNldCkgMj4mMWAgaW4gIygNCiAgICAqJHthc19ubH1h Y19zcGFjZT1cICopDQogICAgICAjIGBzZXQnIGRvZXMgbm90IHF1b3RlIGNvcnJlY3RseSwgc28g YWRkIHF1b3RlczogZG91YmxlLXF1b3RlDQogICAgICAjIHN1YnN0aXR1dGlvbiB0dXJucyBcXFxc IGludG8gXFwsIGFuZCBzZWQgdHVybnMgXFwgaW50byBcLg0KICAgICAgc2VkIC1uIFwNCgkicy8n LydcXFxcJycvZzsNCgkgIHMvXlxcKFtfJGFzX2NyX2FsbnVtXSpfY3ZfW18kYXNfY3JfYWxudW1d KlxcKT1cXCguKlxcKS9cXDE9J1xcMicvcCINCiAgICAgIDs7ICMoDQogICAgKikNCiAgICAgICMg YHNldCcgcXVvdGVzIGNvcnJlY3RseSBhcyByZXF1aXJlZCBieSBQT1NJWCwgc28gZG8gbm90IGFk ZCBxdW90ZXMuDQogICAgICBzZWQgLW4gIi9eW18kYXNfY3JfYWxudW1dKl9jdl9bXyRhc19jcl9h bG51bV0qPS9wIg0KICAgICAgOzsNCiAgICBlc2FjIHwNCiAgICBzb3J0DQopIHwNCiAgc2VkICcN CiAgICAgL15hY19jdl9lbnZfL2IgZW5kDQogICAgIHQgY2xlYXINCiAgICAgOmNsZWFyDQogICAg IHMvXlwoW149XSpcKT1cKC4qW3t9XS4qXCkkL3Rlc3QgIiR7XDErc2V0fSIgPSBzZXQgfHwgJi8N CiAgICAgdCBlbmQNCiAgICAgcy9eXChbXj1dKlwpPVwoLipcKSQvXDE9JHtcMT1cMn0vDQogICAg IDplbmQnID4+Y29uZmNhY2hlDQppZiBkaWZmICIkY2FjaGVfZmlsZSIgY29uZmNhY2hlID4vZGV2 L251bGwgMj4mMTsgdGhlbiA6OyBlbHNlDQogIGlmIHRlc3QgLXcgIiRjYWNoZV9maWxlIjsgdGhl bg0KICAgIGlmIHRlc3QgIngkY2FjaGVfZmlsZSIgIT0gIngvZGV2L251bGwiOyB0aGVuDQogICAg ICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHVwZGF0aW5nIGNhY2hl ICRjYWNoZV9maWxlIiA+JjUNCiRhc19lY2hvICIkYXNfbWU6IHVwZGF0aW5nIGNhY2hlICRjYWNo ZV9maWxlIiA+JjY7fQ0KICAgICAgaWYgdGVzdCAhIC1mICIkY2FjaGVfZmlsZSIgfHwgdGVzdCAt aCAiJGNhY2hlX2ZpbGUiOyB0aGVuDQoJY2F0IGNvbmZjYWNoZSA+IiRjYWNoZV9maWxlIg0KICAg ICAgZWxzZQ0KICAgICAgICBjYXNlICRjYWNoZV9maWxlIGluICMoDQogICAgICAgICovKiB8ID86 KikNCgkgIG12IC1mIGNvbmZjYWNoZSAiJGNhY2hlX2ZpbGUiJCQgJiYNCgkgIG12IC1mICIkY2Fj aGVfZmlsZSIkJCAiJGNhY2hlX2ZpbGUiIDs7ICMoDQogICAgICAgICopDQoJICBtdiAtZiBjb25m Y2FjaGUgIiRjYWNoZV9maWxlIiA7Ow0KCWVzYWMNCiAgICAgIGZpDQogICAgZmkNCiAgZWxzZQ0K ICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogbm90IHVwZGF0aW5n IHVud3JpdGFibGUgY2FjaGUgJGNhY2hlX2ZpbGUiID4mNQ0KJGFzX2VjaG8gIiRhc19tZTogbm90 IHVwZGF0aW5nIHVud3JpdGFibGUgY2FjaGUgJGNhY2hlX2ZpbGUiID4mNjt9DQogIGZpDQpmaQ0K cm0gLWYgY29uZmNhY2hlDQoNCnRlc3QgIngkcHJlZml4IiA9IHhOT05FICYmIHByZWZpeD0kYWNf ZGVmYXVsdF9wcmVmaXgNCiMgTGV0IG1ha2UgZXhwYW5kIGV4ZWNfcHJlZml4Lg0KdGVzdCAieCRl eGVjX3ByZWZpeCIgPSB4Tk9ORSAmJiBleGVjX3ByZWZpeD0nJHtwcmVmaXh9Jw0KDQpERUZTPS1E SEFWRV9DT05GSUdfSA0KDQphY19saWJvYmpzPQ0KYWNfbHRsaWJvYmpzPQ0KZm9yIGFjX2kgaW4g OiAkTElCT0JKUzsgZG8gdGVzdCAieCRhY19pIiA9IHg6ICYmIGNvbnRpbnVlDQogICMgMS4gUmVt b3ZlIHRoZSBleHRlbnNpb24sIGFuZCAkVSBpZiBhbHJlYWR5IGluc3RhbGxlZC4NCiAgYWNfc2Ny aXB0PSdzL1wkVVwuLy4vO3MvXC5vJC8vO3MvXC5vYmokLy8nDQogIGFjX2k9YCRhc19lY2hvICIk YWNfaSIgfCBzZWQgIiRhY19zY3JpcHQiYA0KICAjIDIuIFByZXBlbmQgTElCT0JKRElSLiAgV2hl biB1c2VkIHdpdGggYXV0b21ha2U+PTEuMTAgTElCT0JKRElSDQogICMgICAgd2lsbCBiZSBzZXQg dG8gdGhlIGRpcmVjdG9yeSB3aGVyZSBMSUJPQkpTIG9iamVjdHMgYXJlIGJ1aWx0Lg0KICBhc19m bl9hcHBlbmQgYWNfbGlib2JqcyAiIFwke0xJQk9CSkRJUn0kYWNfaVwkVS4kYWNfb2JqZXh0Ig0K ICBhc19mbl9hcHBlbmQgYWNfbHRsaWJvYmpzICIgXCR7TElCT0JKRElSfSRhY19pIickVS5sbycN CmRvbmUNCkxJQk9CSlM9JGFjX2xpYm9ianMNCg0KTFRMSUJPQkpTPSRhY19sdGxpYm9ianMNCg0K DQp7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHRoYXQg Z2VuZXJhdGVkIGZpbGVzIGFyZSBuZXdlciB0aGFuIGNvbmZpZ3VyZSIgPiY1DQokYXNfZWNob19u ICJjaGVja2luZyB0aGF0IGdlbmVyYXRlZCBmaWxlcyBhcmUgbmV3ZXIgdGhhbiBjb25maWd1cmUu Li4gIiA+JjY7IH0NCiAgIGlmIHRlc3QgLW4gIiRhbV9zbGVlcF9waWQiOyB0aGVuDQogICAgICMg SGlkZSB3YXJuaW5ncyBhYm91dCByZXVzZWQgUElEcy4NCiAgICAgd2FpdCAkYW1fc2xlZXBfcGlk IDI+L2Rldi9udWxsDQogICBmaQ0KICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRM SU5FTk99OiByZXN1bHQ6IGRvbmUiID4mNQ0KJGFzX2VjaG8gImRvbmUiID4mNjsgfQ0KIGlmIHRl c3QgLW4gIiRFWEVFWFQiOyB0aGVuDQogIGFtX19FWEVFWFRfVFJVRT0NCiAgYW1fX0VYRUVYVF9G QUxTRT0nIycNCmVsc2UNCiAgYW1fX0VYRUVYVF9UUlVFPScjJw0KICBhbV9fRVhFRVhUX0ZBTFNF PQ0KZmkNCg0KaWYgdGVzdCAteiAiJHtBTURFUF9UUlVFfSIgJiYgdGVzdCAteiAiJHtBTURFUF9G QUxTRX0iOyB0aGVuDQogIGFzX2ZuX2Vycm9yICQ/ICJjb25kaXRpb25hbCBcIkFNREVQXCIgd2Fz IG5ldmVyIGRlZmluZWQuDQpVc3VhbGx5IHRoaXMgbWVhbnMgdGhlIG1hY3JvIHdhcyBvbmx5IGlu dm9rZWQgY29uZGl0aW9uYWxseS4iICIkTElORU5PIiA1DQpmaQ0KaWYgdGVzdCAteiAiJHthbV9f ZmFzdGRlcENDX1RSVUV9IiAmJiB0ZXN0IC16ICIke2FtX19mYXN0ZGVwQ0NfRkFMU0V9IjsgdGhl bg0KICBhc19mbl9lcnJvciAkPyAiY29uZGl0aW9uYWwgXCJhbV9fZmFzdGRlcENDXCIgd2FzIG5l dmVyIGRlZmluZWQuDQpVc3VhbGx5IHRoaXMgbWVhbnMgdGhlIG1hY3JvIHdhcyBvbmx5IGludm9r ZWQgY29uZGl0aW9uYWxseS4iICIkTElORU5PIiA1DQpmaQ0KaWYgdGVzdCAteiAiJHtHTF9DT05E X0xJQlRPT0xfVFJVRX0iICYmIHRlc3QgLXogIiR7R0xfQ09ORF9MSUJUT09MX0ZBTFNFfSI7IHRo ZW4NCiAgYXNfZm5fZXJyb3IgJD8gImNvbmRpdGlvbmFsIFwiR0xfQ09ORF9MSUJUT09MXCIgd2Fz IG5ldmVyIGRlZmluZWQuDQpVc3VhbGx5IHRoaXMgbWVhbnMgdGhlIG1hY3JvIHdhcyBvbmx5IGlu dm9rZWQgY29uZGl0aW9uYWxseS4iICIkTElORU5PIiA1DQpmaQ0KaWYgdGVzdCAteiAiJHtHTF9H RU5FUkFURV9BTExPQ0FfSF9UUlVFfSIgJiYgdGVzdCAteiAiJHtHTF9HRU5FUkFURV9BTExPQ0Ff SF9GQUxTRX0iOyB0aGVuDQogIGFzX2ZuX2Vycm9yICQ/ICJjb25kaXRpb25hbCBcIkdMX0dFTkVS QVRFX0FMTE9DQV9IXCIgd2FzIG5ldmVyIGRlZmluZWQuDQpVc3VhbGx5IHRoaXMgbWVhbnMgdGhl IG1hY3JvIHdhcyBvbmx5IGludm9rZWQgY29uZGl0aW9uYWxseS4iICIkTElORU5PIiA1DQpmaQ0K dGVzdCAiWCRERUZTIiA9IFgtREhBVkVfQ09ORklHX0ggJiYgREVGUz0NCg0KaWYgdGVzdCAteiAi JHtHTF9HRU5FUkFURV9FUlJOT19IX1RSVUV9IiAmJiB0ZXN0IC16ICIke0dMX0dFTkVSQVRFX0VS Uk5PX0hfRkFMU0V9IjsgdGhlbg0KICBhc19mbl9lcnJvciAkPyAiY29uZGl0aW9uYWwgXCJHTF9H RU5FUkFURV9FUlJOT19IXCIgd2FzIG5ldmVyIGRlZmluZWQuDQpVc3VhbGx5IHRoaXMgbWVhbnMg dGhlIG1hY3JvIHdhcyBvbmx5IGludm9rZWQgY29uZGl0aW9uYWxseS4iICIkTElORU5PIiA1DQpm aQ0KaWYgdGVzdCAteiAiJHtHTF9HRU5FUkFURV9GTE9BVF9IX1RSVUV9IiAmJiB0ZXN0IC16ICIk e0dMX0dFTkVSQVRFX0ZMT0FUX0hfRkFMU0V9IjsgdGhlbg0KICBhc19mbl9lcnJvciAkPyAiY29u ZGl0aW9uYWwgXCJHTF9HRU5FUkFURV9GTE9BVF9IXCIgd2FzIG5ldmVyIGRlZmluZWQuDQpVc3Vh bGx5IHRoaXMgbWVhbnMgdGhlIG1hY3JvIHdhcyBvbmx5IGludm9rZWQgY29uZGl0aW9uYWxseS4i ICIkTElORU5PIiA1DQpmaQ0KaWYgdGVzdCAteiAiJHtHTF9HRU5FUkFURV9GTk1BVENIX0hfVFJV RX0iICYmIHRlc3QgLXogIiR7R0xfR0VORVJBVEVfRk5NQVRDSF9IX0ZBTFNFfSI7IHRoZW4NCiAg YXNfZm5fZXJyb3IgJD8gImNvbmRpdGlvbmFsIFwiR0xfR0VORVJBVEVfRk5NQVRDSF9IXCIgd2Fz IG5ldmVyIGRlZmluZWQuDQpVc3VhbGx5IHRoaXMgbWVhbnMgdGhlIG1hY3JvIHdhcyBvbmx5IGlu dm9rZWQgY29uZGl0aW9uYWxseS4iICIkTElORU5PIiA1DQpmaQ0KaWYgdGVzdCAteiAiJHtHTlVf TUFLRV9UUlVFfSIgJiYgdGVzdCAteiAiJHtHTlVfTUFLRV9GQUxTRX0iOyB0aGVuDQogIGFzX2Zu X2Vycm9yICQ/ICJjb25kaXRpb25hbCBcIkdOVV9NQUtFXCIgd2FzIG5ldmVyIGRlZmluZWQuDQpV c3VhbGx5IHRoaXMgbWVhbnMgdGhlIG1hY3JvIHdhcyBvbmx5IGludm9rZWQgY29uZGl0aW9uYWxs eS4iICIkTElORU5PIiA1DQpmaQ0KaWYgdGVzdCAteiAiJHtHTF9HRU5FUkFURV9TVERCT09MX0hf VFJVRX0iICYmIHRlc3QgLXogIiR7R0xfR0VORVJBVEVfU1REQk9PTF9IX0ZBTFNFfSI7IHRoZW4N CiAgYXNfZm5fZXJyb3IgJD8gImNvbmRpdGlvbmFsIFwiR0xfR0VORVJBVEVfU1REQk9PTF9IXCIg d2FzIG5ldmVyIGRlZmluZWQuDQpVc3VhbGx5IHRoaXMgbWVhbnMgdGhlIG1hY3JvIHdhcyBvbmx5 IGludm9rZWQgY29uZGl0aW9uYWxseS4iICIkTElORU5PIiA1DQpmaQ0KaWYgdGVzdCAteiAiJHtH TF9HRU5FUkFURV9JQ09OVl9IX1RSVUV9IiAmJiB0ZXN0IC16ICIke0dMX0dFTkVSQVRFX0lDT05W X0hfRkFMU0V9IjsgdGhlbg0KICBhc19mbl9lcnJvciAkPyAiY29uZGl0aW9uYWwgXCJHTF9HRU5F UkFURV9JQ09OVl9IXCIgd2FzIG5ldmVyIGRlZmluZWQuDQpVc3VhbGx5IHRoaXMgbWVhbnMgdGhl IG1hY3JvIHdhcyBvbmx5IGludm9rZWQgY29uZGl0aW9uYWxseS4iICIkTElORU5PIiA1DQpmaQ0K aWYgdGVzdCAteiAiJHtHTF9HRU5FUkFURV9JQ09OVl9IX1RSVUV9IiAmJiB0ZXN0IC16ICIke0dM X0dFTkVSQVRFX0lDT05WX0hfRkFMU0V9IjsgdGhlbg0KICBhc19mbl9lcnJvciAkPyAiY29uZGl0 aW9uYWwgXCJHTF9HRU5FUkFURV9JQ09OVl9IXCIgd2FzIG5ldmVyIGRlZmluZWQuDQpVc3VhbGx5 IHRoaXMgbWVhbnMgdGhlIG1hY3JvIHdhcyBvbmx5IGludm9rZWQgY29uZGl0aW9uYWxseS4iICIk TElORU5PIiA1DQpmaQ0KaWYgdGVzdCAteiAiJHtHTF9HRU5FUkFURV9JQ09OVl9IX1RSVUV9IiAm JiB0ZXN0IC16ICIke0dMX0dFTkVSQVRFX0lDT05WX0hfRkFMU0V9IjsgdGhlbg0KICBhc19mbl9l cnJvciAkPyAiY29uZGl0aW9uYWwgXCJHTF9HRU5FUkFURV9JQ09OVl9IXCIgd2FzIG5ldmVyIGRl ZmluZWQuDQpVc3VhbGx5IHRoaXMgbWVhbnMgdGhlIG1hY3JvIHdhcyBvbmx5IGludm9rZWQgY29u ZGl0aW9uYWxseS4iICIkTElORU5PIiA1DQpmaQ0KaWYgdGVzdCAteiAiJHtHTF9HRU5FUkFURV9T VERJTlRfSF9UUlVFfSIgJiYgdGVzdCAteiAiJHtHTF9HRU5FUkFURV9TVERJTlRfSF9GQUxTRX0i OyB0aGVuDQogIGFzX2ZuX2Vycm9yICQ/ICJjb25kaXRpb25hbCBcIkdMX0dFTkVSQVRFX1NURElO VF9IXCIgd2FzIG5ldmVyIGRlZmluZWQuDQpVc3VhbGx5IHRoaXMgbWVhbnMgdGhlIG1hY3JvIHdh cyBvbmx5IGludm9rZWQgY29uZGl0aW9uYWxseS4iICIkTElORU5PIiA1DQpmaQ0KDQppZiB0ZXN0 IC16ICIke0dMX0dFTkVSQVRFX1NURERFRl9IX1RSVUV9IiAmJiB0ZXN0IC16ICIke0dMX0dFTkVS QVRFX1NURERFRl9IX0ZBTFNFfSI7IHRoZW4NCiAgYXNfZm5fZXJyb3IgJD8gImNvbmRpdGlvbmFs IFwiR0xfR0VORVJBVEVfU1REREVGX0hcIiB3YXMgbmV2ZXIgZGVmaW5lZC4NClVzdWFsbHkgdGhp cyBtZWFucyB0aGUgbWFjcm8gd2FzIG9ubHkgaW52b2tlZCBjb25kaXRpb25hbGx5LiIgIiRMSU5F Tk8iIDUNCmZpDQpDT05GSUdfSU5DTFVERT1saWIvY29uZmlnLmgNCg0KaWYgdGVzdCAteiAiJHtH TF9HRU5FUkFURV9ORVRJTkVUX0lOX0hfVFJVRX0iICYmIHRlc3QgLXogIiR7R0xfR0VORVJBVEVf TkVUSU5FVF9JTl9IX0ZBTFNFfSI7IHRoZW4NCiAgYXNfZm5fZXJyb3IgJD8gImNvbmRpdGlvbmFs IFwiR0xfR0VORVJBVEVfTkVUSU5FVF9JTl9IXCIgd2FzIG5ldmVyIGRlZmluZWQuDQpVc3VhbGx5 IHRoaXMgbWVhbnMgdGhlIG1hY3JvIHdhcyBvbmx5IGludm9rZWQgY29uZGl0aW9uYWxseS4iICIk TElORU5PIiA1DQpmaQ0KaWYgdGVzdCAteiAiJHtHTF9HRU5FUkFURV9QVEhSRUFEX0hfVFJVRX0i ICYmIHRlc3QgLXogIiR7R0xfR0VORVJBVEVfUFRIUkVBRF9IX0ZBTFNFfSI7IHRoZW4NCiAgYXNf Zm5fZXJyb3IgJD8gImNvbmRpdGlvbmFsIFwiR0xfR0VORVJBVEVfUFRIUkVBRF9IXCIgd2FzIG5l dmVyIGRlZmluZWQuDQpVc3VhbGx5IHRoaXMgbWVhbnMgdGhlIG1hY3JvIHdhcyBvbmx5IGludm9r ZWQgY29uZGl0aW9uYWxseS4iICIkTElORU5PIiA1DQpmaQ0KaWYgdGVzdCAteiAiJHtHTF9HRU5F UkFURV9TQ0hFRF9IX1RSVUV9IiAmJiB0ZXN0IC16ICIke0dMX0dFTkVSQVRFX1NDSEVEX0hfRkFM U0V9IjsgdGhlbg0KICBhc19mbl9lcnJvciAkPyAiY29uZGl0aW9uYWwgXCJHTF9HRU5FUkFURV9T Q0hFRF9IXCIgd2FzIG5ldmVyIGRlZmluZWQuDQpVc3VhbGx5IHRoaXMgbWVhbnMgdGhlIG1hY3Jv IHdhcyBvbmx5IGludm9rZWQgY29uZGl0aW9uYWxseS4iICIkTElORU5PIiA1DQpmaQ0KaWYgdGVz dCAteiAiJHtHTF9HRU5FUkFURV9TRUxJTlVYX0NPTlRFWFRfSF9UUlVFfSIgJiYgdGVzdCAteiAi JHtHTF9HRU5FUkFURV9TRUxJTlVYX0NPTlRFWFRfSF9GQUxTRX0iOyB0aGVuDQogIGFzX2ZuX2Vy cm9yICQ/ICJjb25kaXRpb25hbCBcIkdMX0dFTkVSQVRFX1NFTElOVVhfQ09OVEVYVF9IXCIgd2Fz IG5ldmVyIGRlZmluZWQuDQpVc3VhbGx5IHRoaXMgbWVhbnMgdGhlIG1hY3JvIHdhcyBvbmx5IGlu dm9rZWQgY29uZGl0aW9uYWxseS4iICIkTElORU5PIiA1DQpmaQ0KaWYgdGVzdCAteiAiJHtHTF9H RU5FUkFURV9TVERBUkdfSF9UUlVFfSIgJiYgdGVzdCAteiAiJHtHTF9HRU5FUkFURV9TVERBUkdf SF9GQUxTRX0iOyB0aGVuDQogIGFzX2ZuX2Vycm9yICQ/ICJjb25kaXRpb25hbCBcIkdMX0dFTkVS QVRFX1NUREFSR19IXCIgd2FzIG5ldmVyIGRlZmluZWQuDQpVc3VhbGx5IHRoaXMgbWVhbnMgdGhl IG1hY3JvIHdhcyBvbmx5IGludm9rZWQgY29uZGl0aW9uYWxseS4iICIkTElORU5PIiA1DQpmaQ0K aWYgdGVzdCAteiAiJHtHTF9HRU5FUkFURV9TVERCT09MX0hfVFJVRX0iICYmIHRlc3QgLXogIiR7 R0xfR0VORVJBVEVfU1REQk9PTF9IX0ZBTFNFfSI7IHRoZW4NCiAgYXNfZm5fZXJyb3IgJD8gImNv bmRpdGlvbmFsIFwiR0xfR0VORVJBVEVfU1REQk9PTF9IXCIgd2FzIG5ldmVyIGRlZmluZWQuDQpV c3VhbGx5IHRoaXMgbWVhbnMgdGhlIG1hY3JvIHdhcyBvbmx5IGludm9rZWQgY29uZGl0aW9uYWxs eS4iICIkTElORU5PIiA1DQpmaQ0KaWYgdGVzdCAteiAiJHtHTF9HRU5FUkFURV9TVERERUZfSF9U UlVFfSIgJiYgdGVzdCAteiAiJHtHTF9HRU5FUkFURV9TVERERUZfSF9GQUxTRX0iOyB0aGVuDQog IGFzX2ZuX2Vycm9yICQ/ICJjb25kaXRpb25hbCBcIkdMX0dFTkVSQVRFX1NURERFRl9IXCIgd2Fz IG5ldmVyIGRlZmluZWQuDQpVc3VhbGx5IHRoaXMgbWVhbnMgdGhlIG1hY3JvIHdhcyBvbmx5IGlu dm9rZWQgY29uZGl0aW9uYWxseS4iICIkTElORU5PIiA1DQpmaQ0KaWYgdGVzdCAteiAiJHtHTF9H RU5FUkFURV9TVERJTlRfSF9UUlVFfSIgJiYgdGVzdCAteiAiJHtHTF9HRU5FUkFURV9TVERJTlRf SF9GQUxTRX0iOyB0aGVuDQogIGFzX2ZuX2Vycm9yICQ/ICJjb25kaXRpb25hbCBcIkdMX0dFTkVS QVRFX1NURElOVF9IXCIgd2FzIG5ldmVyIGRlZmluZWQuDQpVc3VhbGx5IHRoaXMgbWVhbnMgdGhl IG1hY3JvIHdhcyBvbmx5IGludm9rZWQgY29uZGl0aW9uYWxseS4iICIkTElORU5PIiA1DQpmaQ0K aWYgdGVzdCAteiAiJHtMSUJVTklTVFJJTkdfQ09NUElMRV9VTklTVFJfVThfVUNUT01CX1RSVUV9 IiAmJiB0ZXN0IC16ICIke0xJQlVOSVNUUklOR19DT01QSUxFX1VOSVNUUl9VOF9VQ1RPTUJfRkFM U0V9IjsgdGhlbg0KICBhc19mbl9lcnJvciAkPyAiY29uZGl0aW9uYWwgXCJMSUJVTklTVFJJTkdf Q09NUElMRV9VTklTVFJfVThfVUNUT01CXCIgd2FzIG5ldmVyIGRlZmluZWQuDQpVc3VhbGx5IHRo aXMgbWVhbnMgdGhlIG1hY3JvIHdhcyBvbmx5IGludm9rZWQgY29uZGl0aW9uYWxseS4iICIkTElO RU5PIiA1DQpmaQ0KaWYgdGVzdCAteiAiJHtMSUJVTklTVFJJTkdfQ09NUElMRV9VTklXSURUSF9X SURUSF9UUlVFfSIgJiYgdGVzdCAteiAiJHtMSUJVTklTVFJJTkdfQ09NUElMRV9VTklXSURUSF9X SURUSF9GQUxTRX0iOyB0aGVuDQogIGFzX2ZuX2Vycm9yICQ/ICJjb25kaXRpb25hbCBcIkxJQlVO SVNUUklOR19DT01QSUxFX1VOSVdJRFRIX1dJRFRIXCIgd2FzIG5ldmVyIGRlZmluZWQuDQpVc3Vh bGx5IHRoaXMgbWVhbnMgdGhlIG1hY3JvIHdhcyBvbmx5IGludm9rZWQgY29uZGl0aW9uYWxseS4i ICIkTElORU5PIiA1DQpmaQ0KDQogICAgZ2xfbGlib2Jqcz0NCiAgICBnbF9sdGxpYm9ianM9DQog ICAgaWYgdGVzdCAtbiAiJGdsX0xJQk9CSlMiOyB0aGVuDQogICAgICAjIFJlbW92ZSB0aGUgZXh0 ZW5zaW9uLg0KICAgICAgc2VkX2Ryb3Bfb2JqZXh0PSdzL1wubyQvLztzL1wub2JqJC8vJw0KICAg ICAgZm9yIGkgaW4gYGZvciBpIGluICRnbF9MSUJPQkpTOyBkbyBlY2hvICIkaSI7IGRvbmUgfCBz ZWQgLWUgIiRzZWRfZHJvcF9vYmpleHQiIHwgc29ydCB8IHVuaXFgOyBkbw0KICAgICAgICBnbF9s aWJvYmpzPSIkZ2xfbGlib2JqcyAkaS4kYWNfb2JqZXh0Ig0KICAgICAgICBnbF9sdGxpYm9ianM9 IiRnbF9sdGxpYm9ianMgJGkubG8iDQogICAgICBkb25lDQogICAgZmkNCiAgICBnbF9MSUJPQkpT PSRnbF9saWJvYmpzDQoNCiAgICBnbF9MVExJQk9CSlM9JGdsX2x0bGlib2Jqcw0KDQoNCg0KDQoN Cg0KICAgIGdsdGVzdHNfbGlib2Jqcz0NCiAgICBnbHRlc3RzX2x0bGlib2Jqcz0NCiAgICBpZiB0 ZXN0IC1uICIkZ2x0ZXN0c19MSUJPQkpTIjsgdGhlbg0KICAgICAgIyBSZW1vdmUgdGhlIGV4dGVu c2lvbi4NCiAgICAgIHNlZF9kcm9wX29iamV4dD0ncy9cLm8kLy87cy9cLm9iaiQvLycNCiAgICAg IGZvciBpIGluIGBmb3IgaSBpbiAkZ2x0ZXN0c19MSUJPQkpTOyBkbyBlY2hvICIkaSI7IGRvbmUg fCBzZWQgLWUgIiRzZWRfZHJvcF9vYmpleHQiIHwgc29ydCB8IHVuaXFgOyBkbw0KICAgICAgICBn bHRlc3RzX2xpYm9ianM9IiRnbHRlc3RzX2xpYm9ianMgJGkuJGFjX29iamV4dCINCiAgICAgICAg Z2x0ZXN0c19sdGxpYm9ianM9IiRnbHRlc3RzX2x0bGlib2JqcyAkaS5sbyINCiAgICAgIGRvbmUN CiAgICBmaQ0KICAgIGdsdGVzdHNfTElCT0JKUz0kZ2x0ZXN0c19saWJvYmpzDQoNCiAgICBnbHRl c3RzX0xUTElCT0JKUz0kZ2x0ZXN0c19sdGxpYm9ianMNCg0KDQppZiB0ZXN0IC16ICIke0NST1NT X0NPTVBJTElOR19UUlVFfSIgJiYgdGVzdCAteiAiJHtDUk9TU19DT01QSUxJTkdfRkFMU0V9Ijsg dGhlbg0KICBhc19mbl9lcnJvciAkPyAiY29uZGl0aW9uYWwgXCJDUk9TU19DT01QSUxJTkdcIiB3 YXMgbmV2ZXIgZGVmaW5lZC4NClVzdWFsbHkgdGhpcyBtZWFucyB0aGUgbWFjcm8gd2FzIG9ubHkg aW52b2tlZCBjb25kaXRpb25hbGx5LiIgIiRMSU5FTk8iIDUNCmZpDQoNCjogIiR7Q09ORklHX1NU QVRVUz0uL2NvbmZpZy5zdGF0dXN9Ig0KYWNfd3JpdGVfZmFpbD0wDQphY19jbGVhbl9maWxlc19z YXZlPSRhY19jbGVhbl9maWxlcw0KYWNfY2xlYW5fZmlsZXM9IiRhY19jbGVhbl9maWxlcyAkQ09O RklHX1NUQVRVUyINCnsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY3Jl YXRpbmcgJENPTkZJR19TVEFUVVMiID4mNQ0KJGFzX2VjaG8gIiRhc19tZTogY3JlYXRpbmcgJENP TkZJR19TVEFUVVMiID4mNjt9DQphc193cml0ZV9mYWlsPTANCmNhdCA+JENPTkZJR19TVEFUVVMg PDxfQVNFT0YgfHwgYXNfd3JpdGVfZmFpbD0xDQojISAkU0hFTEwNCiMgR2VuZXJhdGVkIGJ5ICRh c19tZS4NCiMgUnVuIHRoaXMgZmlsZSB0byByZWNyZWF0ZSB0aGUgY3VycmVudCBjb25maWd1cmF0 aW9uLg0KIyBDb21waWxlciBvdXRwdXQgcHJvZHVjZWQgYnkgY29uZmlndXJlLCB1c2VmdWwgZm9y IGRlYnVnZ2luZw0KIyBjb25maWd1cmUsIGlzIGluIGNvbmZpZy5sb2cgaWYgaXQgZXhpc3RzLg0K DQpkZWJ1Zz1mYWxzZQ0KYWNfY3NfcmVjaGVjaz1mYWxzZQ0KYWNfY3Nfc2lsZW50PWZhbHNlDQoN ClNIRUxMPVwke0NPTkZJR19TSEVMTC0kU0hFTEx9DQpleHBvcnQgU0hFTEwNCl9BU0VPRg0KY2F0 ID4+JENPTkZJR19TVEFUVVMgPDxcX0FTRU9GIHx8IGFzX3dyaXRlX2ZhaWw9MQ0KIyMgLS0tLS0t LS0tLS0tLS0tLS0tLS0gIyMNCiMjIE00c2ggSW5pdGlhbGl6YXRpb24uICMjDQojIyAtLS0tLS0t LS0tLS0tLS0tLS0tLSAjIw0KDQojIEJlIG1vcmUgQm91cm5lIGNvbXBhdGlibGUNCkRVQUxDQVNF PTE7IGV4cG9ydCBEVUFMQ0FTRSAjIGZvciBNS1Mgc2gNCmlmIHRlc3QgLW4gIiR7WlNIX1ZFUlNJ T04rc2V0fSIgJiYgKGVtdWxhdGUgc2gpID4vZGV2L251bGwgMj4mMTsgdGhlbiA6DQogIGVtdWxh dGUgc2gNCiAgTlVMTENNRD06DQogICMgUHJlLTQuMiB2ZXJzaW9ucyBvZiBac2ggZG8gd29yZCBz cGxpdHRpbmcgb24gJHsxKyIkQCJ9LCB3aGljaA0KICAjIGlzIGNvbnRyYXJ5IHRvIG91ciB1c2Fn ZS4gIERpc2FibGUgdGhpcyBmZWF0dXJlLg0KICBhbGlhcyAtZyAnJHsxKyIkQCJ9Jz0nIiRAIicN CiAgc2V0b3B0IE5PX0dMT0JfU1VCU1QNCmVsc2UNCiAgY2FzZSBgKHNldCAtbykgMj4vZGV2L251 bGxgIGluICMoDQogICpwb3NpeCopIDoNCiAgICBzZXQgLW8gcG9zaXggOzsgIygNCiAgKikgOg0K ICAgICA7Ow0KZXNhYw0KZmkNCg0KDQphc19ubD0nDQonDQpleHBvcnQgYXNfbmwNCiMgUHJpbnRp bmcgYSBsb25nIHN0cmluZyBjcmFzaGVzIFNvbGFyaXMgNyAvdXNyL2Jpbi9wcmludGYuDQphc19l Y2hvPSdcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxc XFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcJw0KYXNf ZWNobz0kYXNfZWNobyRhc19lY2hvJGFzX2VjaG8kYXNfZWNobyRhc19lY2hvDQphc19lY2hvPSRh c19lY2hvJGFzX2VjaG8kYXNfZWNobyRhc19lY2hvJGFzX2VjaG8kYXNfZWNobw0KIyBQcmVmZXIg YSBrc2ggc2hlbGwgYnVpbHRpbiBvdmVyIGFuIGV4dGVybmFsIHByaW50ZiBwcm9ncmFtIG9uIFNv bGFyaXMsDQojIGJ1dCB3aXRob3V0IHdhc3RpbmcgZm9ya3MgZm9yIGJhc2ggb3IgenNoLg0KaWYg dGVzdCAteiAiJEJBU0hfVkVSU0lPTiRaU0hfVkVSU0lPTiIgXA0KICAgICYmICh0ZXN0ICJYYHBy aW50IC1yIC0tICRhc19lY2hvYCIgPSAiWCRhc19lY2hvIikgMj4vZGV2L251bGw7IHRoZW4NCiAg YXNfZWNobz0ncHJpbnQgLXIgLS0nDQogIGFzX2VjaG9fbj0ncHJpbnQgLXJuIC0tJw0KZWxpZiAo dGVzdCAiWGBwcmludGYgJXMgJGFzX2VjaG9gIiA9ICJYJGFzX2VjaG8iKSAyPi9kZXYvbnVsbDsg dGhlbg0KICBhc19lY2hvPSdwcmludGYgJXNcbicNCiAgYXNfZWNob19uPSdwcmludGYgJXMnDQpl bHNlDQogIGlmIHRlc3QgIlhgKC91c3IvdWNiL2VjaG8gLW4gLW4gJGFzX2VjaG8pIDI+L2Rldi9u dWxsYCIgPSAiWC1uICRhc19lY2hvIjsgdGhlbg0KICAgIGFzX2VjaG9fYm9keT0nZXZhbCAvdXNy L3VjYi9lY2hvIC1uICIkMSRhc19ubCInDQogICAgYXNfZWNob19uPScvdXNyL3VjYi9lY2hvIC1u Jw0KICBlbHNlDQogICAgYXNfZWNob19ib2R5PSdldmFsIGV4cHIgIlgkMSIgOiAiWFxcKC4qXFwp IicNCiAgICBhc19lY2hvX25fYm9keT0nZXZhbA0KICAgICAgYXJnPSQxOw0KICAgICAgY2FzZSAk YXJnIGluICMoDQogICAgICAqIiRhc19ubCIqKQ0KCWV4cHIgIlgkYXJnIiA6ICJYXFwoLipcXCkk YXNfbmwiOw0KCWFyZz1gZXhwciAiWCRhcmciIDogIi4qJGFzX25sXFwoLipcXCkiYDs7DQogICAg ICBlc2FjOw0KICAgICAgZXhwciAiWCRhcmciIDogIlhcXCguKlxcKSIgfCB0ciAtZCAiJGFzX25s Ig0KICAgICcNCiAgICBleHBvcnQgYXNfZWNob19uX2JvZHkNCiAgICBhc19lY2hvX249J3NoIC1j ICRhc19lY2hvX25fYm9keSBhc19lY2hvJw0KICBmaQ0KICBleHBvcnQgYXNfZWNob19ib2R5DQog IGFzX2VjaG89J3NoIC1jICRhc19lY2hvX2JvZHkgYXNfZWNobycNCmZpDQoNCiMgVGhlIHVzZXIg aXMgYWx3YXlzIHJpZ2h0Lg0KaWYgdGVzdCAiJHtQQVRIX1NFUEFSQVRPUitzZXR9IiAhPSBzZXQ7 IHRoZW4NCiAgUEFUSF9TRVBBUkFUT1I9Og0KICAoUEFUSD0nL2JpbjsvYmluJzsgRlBBVEg9JFBB VEg7IHNoIC1jIDopID4vZGV2L251bGwgMj4mMSAmJiB7DQogICAgKFBBVEg9Jy9iaW46L2Jpbic7 IEZQQVRIPSRQQVRIOyBzaCAtYyA6KSA+L2Rldi9udWxsIDI+JjEgfHwNCiAgICAgIFBBVEhfU0VQ QVJBVE9SPSc7Jw0KICB9DQpmaQ0KDQoNCiMgSUZTDQojIFdlIG5lZWQgc3BhY2UsIHRhYiBhbmQg bmV3IGxpbmUsIGluIHByZWNpc2VseSB0aGF0IG9yZGVyLiAgUXVvdGluZyBpcw0KIyB0aGVyZSB0 byBwcmV2ZW50IGVkaXRvcnMgZnJvbSBjb21wbGFpbmluZyBhYm91dCBzcGFjZS10YWIuDQojIChJ ZiBfQVNfUEFUSF9XQUxLIHdlcmUgY2FsbGVkIHdpdGggSUZTIHVuc2V0LCBpdCB3b3VsZCBkaXNh YmxlIHdvcmQNCiMgc3BsaXR0aW5nIGJ5IHNldHRpbmcgSUZTIHRvIGVtcHR5IHZhbHVlLikNCklG Uz0iICIiCSRhc19ubCINCg0KIyBGaW5kIHdobyB3ZSBhcmUuICBMb29rIGluIHRoZSBwYXRoIGlm IHdlIGNvbnRhaW4gbm8gZGlyZWN0b3J5IHNlcGFyYXRvci4NCmFzX215c2VsZj0NCmNhc2UgJDAg aW4gIygoDQogICpbXFwvXSogKSBhc19teXNlbGY9JDAgOzsNCiAgKikgYXNfc2F2ZV9JRlM9JElG UzsgSUZTPSRQQVRIX1NFUEFSQVRPUg0KZm9yIGFzX2RpciBpbiAkUEFUSA0KZG8NCiAgSUZTPSRh c19zYXZlX0lGUw0KICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9Lg0KICAgIHRlc3QgLXIg IiRhc19kaXIvJDAiICYmIGFzX215c2VsZj0kYXNfZGlyLyQwICYmIGJyZWFrDQogIGRvbmUNCklG Uz0kYXNfc2F2ZV9JRlMNCg0KICAgICA7Ow0KZXNhYw0KIyBXZSBkaWQgbm90IGZpbmQgb3Vyc2Vs dmVzLCBtb3N0IHByb2JhYmx5IHdlIHdlcmUgcnVuIGFzIGBzaCBDT01NQU5EJw0KIyBpbiB3aGlj aCBjYXNlIHdlIGFyZSBub3QgdG8gYmUgZm91bmQgaW4gdGhlIHBhdGguDQppZiB0ZXN0ICJ4JGFz X215c2VsZiIgPSB4OyB0aGVuDQogIGFzX215c2VsZj0kMA0KZmkNCmlmIHRlc3QgISAtZiAiJGFz X215c2VsZiI7IHRoZW4NCiAgJGFzX2VjaG8gIiRhc19teXNlbGY6IGVycm9yOiBjYW5ub3QgZmlu ZCBteXNlbGY7IHJlcnVuIHdpdGggYW4gYWJzb2x1dGUgZmlsZSBuYW1lIiA+JjINCiAgZXhpdCAx DQpmaQ0KDQojIFVuc2V0IHZhcmlhYmxlcyB0aGF0IHdlIGRvIG5vdCBuZWVkIGFuZCB3aGljaCBj YXVzZSBidWdzIChlLmcuIGluDQojIHByZS0zLjAgVVdJTiBrc2gpLiAgQnV0IGRvIG5vdCBjYXVz ZSBidWdzIGluIGJhc2ggMi4wMTsgdGhlICJ8fCBleGl0IDEiDQojIHN1cHByZXNzZXMgYW55ICJT ZWdtZW50YXRpb24gZmF1bHQiIG1lc3NhZ2UgdGhlcmUuICAnKCgnIGNvdWxkDQojIHRyaWdnZXIg YSBidWcgaW4gcGRrc2ggNS4yLjE0Lg0KZm9yIGFzX3ZhciBpbiBCQVNIX0VOViBFTlYgTUFJTCBN QUlMUEFUSA0KZG8gZXZhbCB0ZXN0IHhcJHskYXNfdmFyK3NldH0gPSB4c2V0IFwNCiAgJiYgKCAo dW5zZXQgJGFzX3ZhcikgfHwgZXhpdCAxKSA+L2Rldi9udWxsIDI+JjEgJiYgdW5zZXQgJGFzX3Zh ciB8fCA6DQpkb25lDQpQUzE9JyQgJw0KUFMyPSc+ICcNClBTND0nKyAnDQoNCiMgTkxTIG51aXNh bmNlcy4NCkxDX0FMTD1DDQpleHBvcnQgTENfQUxMDQpMQU5HVUFHRT1DDQpleHBvcnQgTEFOR1VB R0UNCg0KIyBDRFBBVEguDQoodW5zZXQgQ0RQQVRIKSA+L2Rldi9udWxsIDI+JjEgJiYgdW5zZXQg Q0RQQVRIDQoNCg0KIyBhc19mbl9lcnJvciBTVEFUVVMgRVJST1IgW0xJTkVOTyBMT0dfRkRdDQoj IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiMgT3V0cHV0ICJgYmFz ZW5hbWUgJDBgOiBlcnJvcjogRVJST1IiIHRvIHN0ZGVyci4gSWYgTElORU5PIGFuZCBMT0dfRkQg YXJlDQojIHByb3ZpZGVkLCBhbHNvIG91dHB1dCB0aGUgZXJyb3IgdG8gTE9HX0ZELCByZWZlcmVu Y2luZyBMSU5FTk8uIFRoZW4gZXhpdCB0aGUNCiMgc2NyaXB0IHdpdGggU1RBVFVTLCB1c2luZyAx IGlmIHRoYXQgd2FzIDAuDQphc19mbl9lcnJvciAoKQ0Kew0KICBhc19zdGF0dXM9JDE7IHRlc3Qg JGFzX3N0YXR1cyAtZXEgMCAmJiBhc19zdGF0dXM9MQ0KICBpZiB0ZXN0ICIkNCI7IHRoZW4NCiAg ICBhc19saW5lbm89JHthc19saW5lbm8tIiQzIn0gYXNfbGluZW5vX3N0YWNrPWFzX2xpbmVub19z dGFjaz0kYXNfbGluZW5vX3N0YWNrDQogICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0k TElORU5PfTogZXJyb3I6ICQyIiA+JiQ0DQogIGZpDQogICRhc19lY2hvICIkYXNfbWU6IGVycm9y OiAkMiIgPiYyDQogIGFzX2ZuX2V4aXQgJGFzX3N0YXR1cw0KfSAjIGFzX2ZuX2Vycm9yDQoNCg0K IyBhc19mbl9zZXRfc3RhdHVzIFNUQVRVUw0KIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KIyBT ZXQgJD8gdG8gU1RBVFVTLCB3aXRob3V0IGZvcmtpbmcuDQphc19mbl9zZXRfc3RhdHVzICgpDQp7 DQogIHJldHVybiAkMQ0KfSAjIGFzX2ZuX3NldF9zdGF0dXMNCg0KIyBhc19mbl9leGl0IFNUQVRV Uw0KIyAtLS0tLS0tLS0tLS0tLS0tLQ0KIyBFeGl0IHRoZSBzaGVsbCB3aXRoIFNUQVRVUywgZXZl biBpbiBhICJ0cmFwIDAiIG9yICJzZXQgLWUiIGNvbnRleHQuDQphc19mbl9leGl0ICgpDQp7DQog IHNldCArZQ0KICBhc19mbl9zZXRfc3RhdHVzICQxDQogIGV4aXQgJDENCn0gIyBhc19mbl9leGl0 DQoNCiMgYXNfZm5fdW5zZXQgVkFSDQojIC0tLS0tLS0tLS0tLS0tLQ0KIyBQb3J0YWJseSB1bnNl dCBWQVIuDQphc19mbl91bnNldCAoKQ0Kew0KICB7IGV2YWwgJDE9OyB1bnNldCAkMTt9DQp9DQph c191bnNldD1hc19mbl91bnNldA0KIyBhc19mbl9hcHBlbmQgVkFSIFZBTFVFDQojIC0tLS0tLS0t LS0tLS0tLS0tLS0tLS0NCiMgQXBwZW5kIHRoZSB0ZXh0IGluIFZBTFVFIHRvIHRoZSBlbmQgb2Yg dGhlIGRlZmluaXRpb24gY29udGFpbmVkIGluIFZBUi4gVGFrZQ0KIyBhZHZhbnRhZ2Ugb2YgYW55 IHNoZWxsIG9wdGltaXphdGlvbnMgdGhhdCBhbGxvdyBhbW9ydGl6ZWQgbGluZWFyIGdyb3d0aCBv dmVyDQojIHJlcGVhdGVkIGFwcGVuZHMsIGluc3RlYWQgb2YgdGhlIHR5cGljYWwgcXVhZHJhdGlj IGdyb3d0aCBwcmVzZW50IGluIG5haXZlDQojIGltcGxlbWVudGF0aW9ucy4NCmlmIChldmFsICJh c192YXI9MTsgYXNfdmFyKz0yOyB0ZXN0IHhcJGFzX3ZhciA9IHgxMiIpIDI+L2Rldi9udWxsOyB0 aGVuIDoNCiAgZXZhbCAnYXNfZm5fYXBwZW5kICgpDQogIHsNCiAgICBldmFsICQxKz1cJDINCiAg fScNCmVsc2UNCiAgYXNfZm5fYXBwZW5kICgpDQogIHsNCiAgICBldmFsICQxPVwkJDFcJDINCiAg fQ0KZmkgIyBhc19mbl9hcHBlbmQNCg0KIyBhc19mbl9hcml0aCBBUkcuLi4NCiMgLS0tLS0tLS0t LS0tLS0tLS0tDQojIFBlcmZvcm0gYXJpdGhtZXRpYyBldmFsdWF0aW9uIG9uIHRoZSBBUkdzLCBh bmQgc3RvcmUgdGhlIHJlc3VsdCBpbiB0aGUNCiMgZ2xvYmFsICRhc192YWwuIFRha2UgYWR2YW50 YWdlIG9mIHNoZWxscyB0aGF0IGNhbiBhdm9pZCBmb3Jrcy4gVGhlIGFyZ3VtZW50cw0KIyBtdXN0 IGJlIHBvcnRhYmxlIGFjcm9zcyAkKCgpKSBhbmQgZXhwci4NCmlmIChldmFsICJ0ZXN0IFwkKCgg MSArIDEgKSkgPSAyIikgMj4vZGV2L251bGw7IHRoZW4gOg0KICBldmFsICdhc19mbl9hcml0aCAo KQ0KICB7DQogICAgYXNfdmFsPSQoKCAkKiApKQ0KICB9Jw0KZWxzZQ0KICBhc19mbl9hcml0aCAo KQ0KICB7DQogICAgYXNfdmFsPWBleHByICIkQCIgfHwgdGVzdCAkPyAtZXEgMWANCiAgfQ0KZmkg IyBhc19mbl9hcml0aA0KDQoNCmlmIGV4cHIgYSA6ICdcKGFcKScgPi9kZXYvbnVsbCAyPiYxICYm DQogICB0ZXN0ICJYYGV4cHIgMDAwMDEgOiAnLipcKC4uLlwpJ2AiID0gWDAwMTsgdGhlbg0KICBh c19leHByPWV4cHINCmVsc2UNCiAgYXNfZXhwcj1mYWxzZQ0KZmkNCg0KaWYgKGJhc2VuYW1lIC0t IC8pID4vZGV2L251bGwgMj4mMSAmJiB0ZXN0ICJYYGJhc2VuYW1lIC0tIC8gMj4mMWAiID0gIlgv IjsgdGhlbg0KICBhc19iYXNlbmFtZT1iYXNlbmFtZQ0KZWxzZQ0KICBhc19iYXNlbmFtZT1mYWxz ZQ0KZmkNCg0KaWYgKGFzX2Rpcj1gZGlybmFtZSAtLSAvYCAmJiB0ZXN0ICJYJGFzX2RpciIgPSBY LykgPi9kZXYvbnVsbCAyPiYxOyB0aGVuDQogIGFzX2Rpcm5hbWU9ZGlybmFtZQ0KZWxzZQ0KICBh c19kaXJuYW1lPWZhbHNlDQpmaQ0KDQphc19tZT1gJGFzX2Jhc2VuYW1lIC0tICIkMCIgfHwNCiRh c19leHByIFgvIiQwIiA6ICcuKi9cKFteL11bXi9dKlwpLyokJyBcfCBcDQoJIFgiJDAiIDogJ1hc KC8vXCkkJyBcfCBcDQoJIFgiJDAiIDogJ1hcKC9cKScgXHwgLiAyPi9kZXYvbnVsbCB8fA0KJGFz X2VjaG8gWC8iJDAiIHwNCiAgICBzZWQgJy9eLipcL1woW14vXVteL10qXClcLyokL3sNCgkgICAg cy8vXDEvDQoJICAgIHENCgkgIH0NCgkgIC9eWFwvXChcL1wvXCkkL3sNCgkgICAgcy8vXDEvDQoJ ICAgIHENCgkgIH0NCgkgIC9eWFwvXChcL1wpLiovew0KCSAgICBzLy9cMS8NCgkgICAgcQ0KCSAg fQ0KCSAgcy8uKi8uLzsgcSdgDQoNCiMgQXZvaWQgZGVwZW5kaW5nIHVwb24gQ2hhcmFjdGVyIFJh bmdlcy4NCmFzX2NyX2xldHRlcnM9J2FiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Jw0KYXNfY3Jf TEVUVEVSUz0nQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVonDQphc19jcl9MZXR0ZXJzPSRhc19j cl9sZXR0ZXJzJGFzX2NyX0xFVFRFUlMNCmFzX2NyX2RpZ2l0cz0nMDEyMzQ1Njc4OScNCmFzX2Ny X2FsbnVtPSRhc19jcl9MZXR0ZXJzJGFzX2NyX2RpZ2l0cw0KDQpFQ0hPX0M9IEVDSE9fTj0gRUNI T19UPQ0KY2FzZSBgZWNobyAtbiB4YCBpbiAjKCgoKCgNCi1uKikNCiAgY2FzZSBgZWNobyAneHlc YydgIGluDQogICpjKikgRUNIT19UPScJJzs7CSMgRUNIT19UIGlzIHNpbmdsZSB0YWIgY2hhcmFj dGVyLg0KICB4eSkgIEVDSE9fQz0nXGMnOzsNCiAgKikgICBlY2hvIGBlY2hvIGtzaDg4IGJ1ZyBv biBBSVggNi4xYCA+IC9kZXYvbnVsbA0KICAgICAgIEVDSE9fVD0nCSc7Ow0KICBlc2FjOzsNCiop DQogIEVDSE9fTj0nLW4nOzsNCmVzYWMNCg0Kcm0gLWYgY29uZiQkIGNvbmYkJC5leGUgY29uZiQk LmZpbGUNCmlmIHRlc3QgLWQgY29uZiQkLmRpcjsgdGhlbg0KICBybSAtZiBjb25mJCQuZGlyL2Nv bmYkJC5maWxlDQplbHNlDQogIHJtIC1mIGNvbmYkJC5kaXINCiAgbWtkaXIgY29uZiQkLmRpciAy Pi9kZXYvbnVsbA0KZmkNCmlmIChlY2hvID5jb25mJCQuZmlsZSkgMj4vZGV2L251bGw7IHRoZW4N CiAgaWYgbG4gLXMgY29uZiQkLmZpbGUgY29uZiQkIDI+L2Rldi9udWxsOyB0aGVuDQogICAgYXNf bG5fcz0nbG4gLXMnDQogICAgIyAuLi4gYnV0IHRoZXJlIGFyZSB0d28gZ290Y2hhczoNCiAgICAj IDEpIE9uIE1TWVMsIGJvdGggYGxuIC1zIGZpbGUgZGlyJyBhbmQgYGxuIGZpbGUgZGlyJyBmYWls Lg0KICAgICMgMikgREpHUFAgPCAyLjA0IGhhcyBubyBzeW1saW5rczsgYGxuIC1zJyBjcmVhdGVz IGEgd3JhcHBlciBleGVjdXRhYmxlLg0KICAgICMgSW4gYm90aCBjYXNlcywgd2UgaGF2ZSB0byBk ZWZhdWx0IHRvIGBjcCAtcCcuDQogICAgbG4gLXMgY29uZiQkLmZpbGUgY29uZiQkLmRpciAyPi9k ZXYvbnVsbCAmJiB0ZXN0ICEgLWYgY29uZiQkLmV4ZSB8fA0KICAgICAgYXNfbG5fcz0nY3AgLXAn DQogIGVsaWYgbG4gY29uZiQkLmZpbGUgY29uZiQkIDI+L2Rldi9udWxsOyB0aGVuDQogICAgYXNf bG5fcz1sbg0KICBlbHNlDQogICAgYXNfbG5fcz0nY3AgLXAnDQogIGZpDQplbHNlDQogIGFzX2xu X3M9J2NwIC1wJw0KZmkNCnJtIC1mIGNvbmYkJCBjb25mJCQuZXhlIGNvbmYkJC5kaXIvY29uZiQk LmZpbGUgY29uZiQkLmZpbGUNCnJtZGlyIGNvbmYkJC5kaXIgMj4vZGV2L251bGwNCg0KDQojIGFz X2ZuX21rZGlyX3ANCiMgLS0tLS0tLS0tLS0tLQ0KIyBDcmVhdGUgIiRhc19kaXIiIGFzIGEgZGly ZWN0b3J5LCBpbmNsdWRpbmcgcGFyZW50cyBpZiBuZWNlc3NhcnkuDQphc19mbl9ta2Rpcl9wICgp DQp7DQoNCiAgY2FzZSAkYXNfZGlyIGluICMoDQogIC0qKSBhc19kaXI9Li8kYXNfZGlyOzsNCiAg ZXNhYw0KICB0ZXN0IC1kICIkYXNfZGlyIiB8fCBldmFsICRhc19ta2Rpcl9wIHx8IHsNCiAgICBh c19kaXJzPQ0KICAgIHdoaWxlIDo7IGRvDQogICAgICBjYXNlICRhc19kaXIgaW4gIygNCiAgICAg ICpcJyopIGFzX3FkaXI9YCRhc19lY2hvICIkYXNfZGlyIiB8IHNlZCAicy8nLydcXFxcXFxcXCcn L2ciYDs7ICMnKA0KICAgICAgKikgYXNfcWRpcj0kYXNfZGlyOzsNCiAgICAgIGVzYWMNCiAgICAg IGFzX2RpcnM9IickYXNfcWRpcicgJGFzX2RpcnMiDQogICAgICBhc19kaXI9YCRhc19kaXJuYW1l IC0tICIkYXNfZGlyIiB8fA0KJGFzX2V4cHIgWCIkYXNfZGlyIiA6ICdYXCguKlteL11cKS8vKlte L11bXi9dKi8qJCcgXHwgXA0KCSBYIiRhc19kaXIiIDogJ1hcKC8vXClbXi9dJyBcfCBcDQoJIFgi JGFzX2RpciIgOiAnWFwoLy9cKSQnIFx8IFwNCgkgWCIkYXNfZGlyIiA6ICdYXCgvXCknIFx8IC4g Mj4vZGV2L251bGwgfHwNCiRhc19lY2hvIFgiJGFzX2RpciIgfA0KICAgIHNlZCAnL15YXCguKlte L11cKVwvXC8qW14vXVteL10qXC8qJC97DQoJICAgIHMvL1wxLw0KCSAgICBxDQoJICB9DQoJICAv XlhcKFwvXC9cKVteL10uKi97DQoJICAgIHMvL1wxLw0KCSAgICBxDQoJICB9DQoJICAvXlhcKFwv XC9cKSQvew0KCSAgICBzLy9cMS8NCgkgICAgcQ0KCSAgfQ0KCSAgL15YXChcL1wpLiovew0KCSAg ICBzLy9cMS8NCgkgICAgcQ0KCSAgfQ0KCSAgcy8uKi8uLzsgcSdgDQogICAgICB0ZXN0IC1kICIk YXNfZGlyIiAmJiBicmVhaw0KICAgIGRvbmUNCiAgICB0ZXN0IC16ICIkYXNfZGlycyIgfHwgZXZh bCAibWtkaXIgJGFzX2RpcnMiDQogIH0gfHwgdGVzdCAtZCAiJGFzX2RpciIgfHwgYXNfZm5fZXJy b3IgJD8gImNhbm5vdCBjcmVhdGUgZGlyZWN0b3J5ICRhc19kaXIiDQoNCg0KfSAjIGFzX2ZuX21r ZGlyX3ANCmlmIG1rZGlyIC1wIC4gMj4vZGV2L251bGw7IHRoZW4NCiAgYXNfbWtkaXJfcD0nbWtk aXIgLXAgIiRhc19kaXIiJw0KZWxzZQ0KICB0ZXN0IC1kIC4vLXAgJiYgcm1kaXIgLi8tcA0KICBh c19ta2Rpcl9wPWZhbHNlDQpmaQ0KDQppZiB0ZXN0IC14IC8gPi9kZXYvbnVsbCAyPiYxOyB0aGVu DQogIGFzX3Rlc3RfeD0ndGVzdCAteCcNCmVsc2UNCiAgaWYgbHMgLWRMIC8gPi9kZXYvbnVsbCAy PiYxOyB0aGVuDQogICAgYXNfbHNfTF9vcHRpb249TA0KICBlbHNlDQogICAgYXNfbHNfTF9vcHRp b249DQogIGZpDQogIGFzX3Rlc3RfeD0nDQogICAgZXZhbCBzaCAtYyAnXCcnDQogICAgICBpZiB0 ZXN0IC1kICIkMSI7IHRoZW4NCgl0ZXN0IC1kICIkMS8uIjsNCiAgICAgIGVsc2UNCgljYXNlICQx IGluICMoDQoJLSopc2V0ICIuLyQxIjs7DQoJZXNhYzsNCgljYXNlIGBscyAtbGQnJGFzX2xzX0xf b3B0aW9uJyAiJDEiIDI+L2Rldi9udWxsYCBpbiAjKCgNCgk/Pz9bc3hdKik6OzsqKWZhbHNlOztl c2FjO2ZpDQogICAgJ1wnJyBzaA0KICAnDQpmaQ0KYXNfZXhlY3V0YWJsZV9wPSRhc190ZXN0X3gN Cg0KIyBTZWQgZXhwcmVzc2lvbiB0byBtYXAgYSBzdHJpbmcgb250byBhIHZhbGlkIENQUCBuYW1l Lg0KYXNfdHJfY3BwPSJldmFsIHNlZCAneSUqJGFzX2NyX2xldHRlcnMlUCRhc19jcl9MRVRURVJT JTtzJVteXyRhc19jcl9hbG51bV0lXyVnJyINCg0KIyBTZWQgZXhwcmVzc2lvbiB0byBtYXAgYSBz dHJpbmcgb250byBhIHZhbGlkIHZhcmlhYmxlIG5hbWUuDQphc190cl9zaD0iZXZhbCBzZWQgJ3kl KislcHAlO3MlW15fJGFzX2NyX2FsbnVtXSVfJWcnIg0KDQoNCmV4ZWMgNj4mMQ0KIyMgLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMNCiMjIE1haW4gYm9keSBvZiAkQ09ORklH X1NUQVRVUyBzY3JpcHQuICMjDQojIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LSAjIw0KX0FTRU9GDQp0ZXN0ICRhc193cml0ZV9mYWlsID0gMCAmJiBjaG1vZCAreCAkQ09ORklH X1NUQVRVUyB8fCBhY193cml0ZV9mYWlsPTENCg0KY2F0ID4+JENPTkZJR19TVEFUVVMgPDxcX0FD RU9GIHx8IGFjX3dyaXRlX2ZhaWw9MQ0KIyBTYXZlIHRoZSBsb2cgbWVzc2FnZSwgdG8ga2VlcCAk MCBhbmQgc28gb24gbWVhbmluZ2Z1bCwgYW5kIHRvDQojIHJlcG9ydCBhY3R1YWwgaW5wdXQgdmFs dWVzIG9mIENPTkZJR19GSUxFUyBldGMuIGluc3RlYWQgb2YgdGhlaXINCiMgdmFsdWVzIGFmdGVy IG9wdGlvbnMgaGFuZGxpbmcuDQphY19sb2c9Ig0KVGhpcyBmaWxlIHdhcyBleHRlbmRlZCBieSBH TlUgY29yZXV0aWxzICRhc19tZSA4LjEyLCB3aGljaCB3YXMNCmdlbmVyYXRlZCBieSBHTlUgQXV0 b2NvbmYgMi42OC43MS1hZjMwMC4gIEludm9jYXRpb24gY29tbWFuZCBsaW5lIHdhcw0KDQogIENP TkZJR19GSUxFUyAgICA9ICRDT05GSUdfRklMRVMNCiAgQ09ORklHX0hFQURFUlMgID0gJENPTkZJ R19IRUFERVJTDQogIENPTkZJR19MSU5LUyAgICA9ICRDT05GSUdfTElOS1MNCiAgQ09ORklHX0NP TU1BTkRTID0gJENPTkZJR19DT01NQU5EUw0KICAkICQwICRADQoNCm9uIGAoaG9zdG5hbWUgfHwg dW5hbWUgLW4pIDI+L2Rldi9udWxsIHwgc2VkIDFxYA0KIg0KDQpfQUNFT0YNCg0KY2FzZSAkYWNf Y29uZmlnX2ZpbGVzIGluICoiDQoiKikgc2V0IHggJGFjX2NvbmZpZ19maWxlczsgc2hpZnQ7IGFj X2NvbmZpZ19maWxlcz0kKjs7DQplc2FjDQoNCmNhc2UgJGFjX2NvbmZpZ19oZWFkZXJzIGluICoi DQoiKikgc2V0IHggJGFjX2NvbmZpZ19oZWFkZXJzOyBzaGlmdDsgYWNfY29uZmlnX2hlYWRlcnM9 JCo7Ow0KZXNhYw0KDQoNCmNhdCA+PiRDT05GSUdfU1RBVFVTIDw8X0FDRU9GIHx8IGFjX3dyaXRl X2ZhaWw9MQ0KIyBGaWxlcyB0aGF0IGNvbmZpZy5zdGF0dXMgd2FzIG1hZGUgZm9yLg0KY29uZmln X2ZpbGVzPSIkYWNfY29uZmlnX2ZpbGVzIg0KY29uZmlnX2hlYWRlcnM9IiRhY19jb25maWdfaGVh ZGVycyINCmNvbmZpZ19saW5rcz0iJGFjX2NvbmZpZ19saW5rcyINCmNvbmZpZ19jb21tYW5kcz0i JGFjX2NvbmZpZ19jb21tYW5kcyINCg0KX0FDRU9GDQoNCmNhdCA+PiRDT05GSUdfU1RBVFVTIDw8 XF9BQ0VPRiB8fCBhY193cml0ZV9mYWlsPTENCmFjX2NzX3VzYWdlPSJcDQpcYCRhc19tZScgaW5z dGFudGlhdGVzIGZpbGVzIGFuZCBvdGhlciBjb25maWd1cmF0aW9uIGFjdGlvbnMNCmZyb20gdGVt cGxhdGVzIGFjY29yZGluZyB0byB0aGUgY3VycmVudCBjb25maWd1cmF0aW9uLiAgVW5sZXNzIHRo ZSBmaWxlcw0KYW5kIGFjdGlvbnMgYXJlIHNwZWNpZmllZCBhcyBUQUdzLCBhbGwgYXJlIGluc3Rh bnRpYXRlZCBieSBkZWZhdWx0Lg0KDQpVc2FnZTogJDAgW09QVElPTl0uLi4gW1RBR10uLi4NCg0K ICAtaCwgLS1oZWxwICAgICAgIHByaW50IHRoaXMgaGVscCwgdGhlbiBleGl0DQogIC1WLCAtLXZl cnNpb24gICAgcHJpbnQgdmVyc2lvbiBudW1iZXIgYW5kIGNvbmZpZ3VyYXRpb24gc2V0dGluZ3Ms IHRoZW4gZXhpdA0KICAgICAgLS1jb25maWcgICAgIHByaW50IGNvbmZpZ3VyYXRpb24sIHRoZW4g ZXhpdA0KICAtcSwgLS1xdWlldCwgLS1zaWxlbnQNCiAgICAgICAgICAgICAgICAgICBkbyBub3Qg cHJpbnQgcHJvZ3Jlc3MgbWVzc2FnZXMNCiAgLWQsIC0tZGVidWcgICAgICBkb24ndCByZW1vdmUg dGVtcG9yYXJ5IGZpbGVzDQogICAgICAtLXJlY2hlY2sgICAgdXBkYXRlICRhc19tZSBieSByZWNv bmZpZ3VyaW5nIGluIHRoZSBzYW1lIGNvbmRpdGlvbnMNCiAgICAgIC0tZmlsZT1GSUxFWzpURU1Q TEFURV0NCiAgICAgICAgICAgICAgICAgICBpbnN0YW50aWF0ZSB0aGUgY29uZmlndXJhdGlvbiBm aWxlIEZJTEUNCiAgICAgIC0taGVhZGVyPUZJTEVbOlRFTVBMQVRFXQ0KICAgICAgICAgICAgICAg ICAgIGluc3RhbnRpYXRlIHRoZSBjb25maWd1cmF0aW9uIGhlYWRlciBGSUxFDQoNCkNvbmZpZ3Vy YXRpb24gZmlsZXM6DQokY29uZmlnX2ZpbGVzDQoNCkNvbmZpZ3VyYXRpb24gaGVhZGVyczoNCiRj b25maWdfaGVhZGVycw0KDQpDb25maWd1cmF0aW9uIGxpbmtzOg0KJGNvbmZpZ19saW5rcw0KDQpD b25maWd1cmF0aW9uIGNvbW1hbmRzOg0KJGNvbmZpZ19jb21tYW5kcw0KDQpSZXBvcnQgYnVncyB0 byA8YnVnLWNvcmV1dGlsc0BnbnUub3JnPi4NCkdOVSBjb3JldXRpbHMgaG9tZSBwYWdlOiA8aHR0 cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL2NvcmV1dGlscy8+Lg0KR2VuZXJhbCBoZWxwIHVzaW5n IEdOVSBzb2Z0d2FyZTogPGh0dHA6Ly93d3cuZ251Lm9yZy9nZXRoZWxwLz4uIg0KDQpfQUNFT0YN CmNhdCA+PiRDT05GSUdfU1RBVFVTIDw8X0FDRU9GIHx8IGFjX3dyaXRlX2ZhaWw9MQ0KYWNfY3Nf Y29uZmlnPSJgJGFzX2VjaG8gIiRhY19jb25maWd1cmVfYXJncyIgfCBzZWQgJ3MvXiAvLzsgcy9b XFwiIlxgXCRdL1xcXFwmL2cnYCINCmFjX2NzX3ZlcnNpb249IlxcDQpHTlUgY29yZXV0aWxzIGNv bmZpZy5zdGF0dXMgOC4xMg0KY29uZmlndXJlZCBieSAkMCwgZ2VuZXJhdGVkIGJ5IEdOVSBBdXRv Y29uZiAyLjY4LjcxLWFmMzAwLA0KICB3aXRoIG9wdGlvbnMgXFwiXCRhY19jc19jb25maWdcXCIN Cg0KQ29weXJpZ2h0IChDKSAyMDExIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLg0KVGhp cyBjb25maWcuc3RhdHVzIHNjcmlwdCBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2Fy ZSBGb3VuZGF0aW9uDQpnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5LCBkaXN0cmli dXRlIGFuZCBtb2RpZnkgaXQuIg0KDQphY19wd2Q9JyRhY19wd2QnDQpzcmNkaXI9JyRzcmNkaXIn DQpJTlNUQUxMPSckSU5TVEFMTCcNCk1LRElSX1A9JyRNS0RJUl9QJw0KQVdLPSckQVdLJw0KdGVz dCAtbiAiXCRBV0siIHx8IEFXSz1hd2sNCl9BQ0VPRg0KDQpjYXQgPj4kQ09ORklHX1NUQVRVUyA8 PFxfQUNFT0YgfHwgYWNfd3JpdGVfZmFpbD0xDQojIFRoZSBkZWZhdWx0IGxpc3RzIGFwcGx5IGlm IHRoZSB1c2VyIGRvZXMgbm90IHNwZWNpZnkgYW55IGZpbGUuDQphY19uZWVkX2RlZmF1bHRzPToN CndoaWxlIHRlc3QgJCMgIT0gMA0KZG8NCiAgY2FzZSAkMSBpbg0KICAtLSo9PyopDQogICAgYWNf b3B0aW9uPWBleHByICJYJDEiIDogJ1hcKFtePV0qXCk9J2ANCiAgICBhY19vcHRhcmc9YGV4cHIg IlgkMSIgOiAnWFtePV0qPVwoLipcKSdgDQogICAgYWNfc2hpZnQ9Og0KICAgIDs7DQogIC0tKj0p DQogICAgYWNfb3B0aW9uPWBleHByICJYJDEiIDogJ1hcKFtePV0qXCk9J2ANCiAgICBhY19vcHRh cmc9DQogICAgYWNfc2hpZnQ9Og0KICAgIDs7DQogICopDQogICAgYWNfb3B0aW9uPSQxDQogICAg YWNfb3B0YXJnPSQyDQogICAgYWNfc2hpZnQ9c2hpZnQNCiAgICA7Ow0KICBlc2FjDQoNCiAgY2Fz ZSAkYWNfb3B0aW9uIGluDQogICMgSGFuZGxpbmcgb2YgdGhlIG9wdGlvbnMuDQogIC1yZWNoZWNr IHwgLS1yZWNoZWNrIHwgLS1yZWNoZWMgfCAtLXJlY2hlIHwgLS1yZWNoIHwgLS1yZWMgfCAtLXJl IHwgLS1yKQ0KICAgIGFjX2NzX3JlY2hlY2s9OiA7Ow0KICAtLXZlcnNpb24gfCAtLXZlcnNpbyB8 IC0tdmVyc2kgfCAtLXZlcnMgfCAtLXZlciB8IC0tdmUgfCAtLXYgfCAtViApDQogICAgJGFzX2Vj aG8gIiRhY19jc192ZXJzaW9uIjsgZXhpdCA7Ow0KICAtLWNvbmZpZyB8IC0tY29uZmkgfCAtLWNv bmYgfCAtLWNvbiB8IC0tY28gfCAtLWMgKQ0KICAgICRhc19lY2hvICIkYWNfY3NfY29uZmlnIjsg ZXhpdCA7Ow0KICAtLWRlYnVnIHwgLS1kZWJ1IHwgLS1kZWIgfCAtLWRlIHwgLS1kIHwgLWQgKQ0K ICAgIGRlYnVnPTogOzsNCiAgLS1maWxlIHwgLS1maWwgfCAtLWZpIHwgLS1mICkNCiAgICAkYWNf c2hpZnQNCiAgICBjYXNlICRhY19vcHRhcmcgaW4NCiAgICAqXCcqKSBhY19vcHRhcmc9YCRhc19l Y2hvICIkYWNfb3B0YXJnIiB8IHNlZCAicy8nLydcXFxcXFxcXCcnL2ciYCA7Ow0KICAgICcnKSBh c19mbl9lcnJvciAkPyAibWlzc2luZyBmaWxlIGFyZ3VtZW50IiA7Ow0KICAgIGVzYWMNCiAgICBh c19mbl9hcHBlbmQgQ09ORklHX0ZJTEVTICIgJyRhY19vcHRhcmcnIg0KICAgIGFjX25lZWRfZGVm YXVsdHM9ZmFsc2U7Ow0KICAtLWhlYWRlciB8IC0taGVhZGUgfCAtLWhlYWQgfCAtLWhlYSApDQog ICAgJGFjX3NoaWZ0DQogICAgY2FzZSAkYWNfb3B0YXJnIGluDQogICAgKlwnKikgYWNfb3B0YXJn PWAkYXNfZWNobyAiJGFjX29wdGFyZyIgfCBzZWQgInMvJy8nXFxcXFxcXFwnJy9nImAgOzsNCiAg ICBlc2FjDQogICAgYXNfZm5fYXBwZW5kIENPTkZJR19IRUFERVJTICIgJyRhY19vcHRhcmcnIg0K ICAgIGFjX25lZWRfZGVmYXVsdHM9ZmFsc2U7Ow0KICAtLWhlIHwgLS1oKQ0KICAgICMgQ29uZmxp Y3QgYmV0d2VlbiAtLWhlbHAgYW5kIC0taGVhZGVyDQogICAgYXNfZm5fZXJyb3IgJD8gImFtYmln dW91cyBvcHRpb246IFxgJDEnDQpUcnkgXGAkMCAtLWhlbHAnIGZvciBtb3JlIGluZm9ybWF0aW9u LiI7Ow0KICAtLWhlbHAgfCAtLWhlbCB8IC1oICkNCiAgICAkYXNfZWNobyAiJGFjX2NzX3VzYWdl IjsgZXhpdCA7Ow0KICAtcSB8IC1xdWlldCB8IC0tcXVpZXQgfCAtLXF1aWUgfCAtLXF1aSB8IC0t cXUgfCAtLXEgXA0KICB8IC1zaWxlbnQgfCAtLXNpbGVudCB8IC0tc2lsZW4gfCAtLXNpbGUgfCAt LXNpbCB8IC0tc2kgfCAtLXMpDQogICAgYWNfY3Nfc2lsZW50PTogOzsNCg0KICAjIFRoaXMgaXMg YW4gZXJyb3IuDQogIC0qKSBhc19mbl9lcnJvciAkPyAidW5yZWNvZ25pemVkIG9wdGlvbjogXGAk MScNClRyeSBcYCQwIC0taGVscCcgZm9yIG1vcmUgaW5mb3JtYXRpb24uIiA7Ow0KDQogICopIGFz X2ZuX2FwcGVuZCBhY19jb25maWdfdGFyZ2V0cyAiICQxIg0KICAgICBhY19uZWVkX2RlZmF1bHRz PWZhbHNlIDs7DQoNCiAgZXNhYw0KICBzaGlmdA0KZG9uZQ0KDQphY19jb25maWd1cmVfZXh0cmFf YXJncz0NCg0KaWYgJGFjX2NzX3NpbGVudDsgdGhlbg0KICBleGVjIDY+L2Rldi9udWxsDQogIGFj X2NvbmZpZ3VyZV9leHRyYV9hcmdzPSIkYWNfY29uZmlndXJlX2V4dHJhX2FyZ3MgLS1zaWxlbnQi DQpmaQ0KDQpfQUNFT0YNCmNhdCA+PiRDT05GSUdfU1RBVFVTIDw8X0FDRU9GIHx8IGFjX3dyaXRl X2ZhaWw9MQ0KaWYgXCRhY19jc19yZWNoZWNrOyB0aGVuDQogIHNldCBYICRTSEVMTCAnJDAnICRh Y19jb25maWd1cmVfYXJncyBcJGFjX2NvbmZpZ3VyZV9leHRyYV9hcmdzIC0tbm8tY3JlYXRlIC0t bm8tcmVjdXJzaW9uDQogIHNoaWZ0DQogIFwkYXNfZWNobyAicnVubmluZyBDT05GSUdfU0hFTEw9 JFNIRUxMIFwkKiIgPiY2DQogIENPTkZJR19TSEVMTD0nJFNIRUxMJw0KICBleHBvcnQgQ09ORklH X1NIRUxMDQogIGV4ZWMgIlwkQCINCmZpDQoNCl9BQ0VPRg0KY2F0ID4+JENPTkZJR19TVEFUVVMg PDxcX0FDRU9GIHx8IGFjX3dyaXRlX2ZhaWw9MQ0KZXhlYyA1Pj5jb25maWcubG9nDQp7DQogIGVj aG8NCiAgc2VkICdoO3MvLi8tL2c7cy9eLi4uLyMjIC87cy8uLi4kLyAjIy87cDt4O3A7eCcgPDxf QVNCT1gNCiMjIFJ1bm5pbmcgJGFzX21lLiAjIw0KX0FTQk9YDQogICRhc19lY2hvICIkYWNfbG9n Ig0KfSA+JjUNCg0KX0FDRU9GDQpjYXQgPj4kQ09ORklHX1NUQVRVUyA8PF9BQ0VPRiB8fCBhY193 cml0ZV9mYWlsPTENCiMNCiMgSU5JVC1DT01NQU5EUw0KIw0KQU1ERVBfVFJVRT0iJEFNREVQX1RS VUUiIGFjX2F1eF9kaXI9IiRhY19hdXhfZGlyIg0KR05VbWFrZWZpbGU9JEdOVW1ha2VmaWxlDQoj IENhcHR1cmUgdGhlIHZhbHVlIG9mIG9ic29sZXRlIEFMTF9MSU5HVUFTIGJlY2F1c2Ugd2UgbmVl ZCBpdCB0byBjb21wdXRlDQogICAgIyBQT0ZJTEVTLCBVUERBVEVQT0ZJTEVTLCBEVU1NWVBPRklM RVMsIEdNT0ZJTEVTLCBDQVRBTE9HUy4gQnV0IGhpZGUgaXQNCiAgICAjIGZyb20gYXV0b21ha2Ug PCAxLjUuDQogICAgZXZhbCAnT0JTT0xFVEVfQUxMX0xJTkdVQVMnJz0iJEFMTF9MSU5HVUFTIicN CiAgICAjIENhcHR1cmUgdGhlIHZhbHVlIG9mIExJTkdVQVMgYmVjYXVzZSB3ZSBuZWVkIGl0IHRv IGNvbXB1dGUgQ0FUQUxPR1MuDQogICAgTElOR1VBUz0iJHtMSU5HVUFTLSVVTlNFVCV9Ig0KDQoN Cl9BQ0VPRg0KDQpjYXQgPj4kQ09ORklHX1NUQVRVUyA8PFxfQUNFT0YgfHwgYWNfd3JpdGVfZmFp bD0xDQoNCiMgSGFuZGxpbmcgb2YgYXJndW1lbnRzLg0KZm9yIGFjX2NvbmZpZ190YXJnZXQgaW4g JGFjX2NvbmZpZ190YXJnZXRzDQpkbw0KICBjYXNlICRhY19jb25maWdfdGFyZ2V0IGluDQogICAg ImxpYi9jb25maWcuaCIpIENPTkZJR19IRUFERVJTPSIkQ09ORklHX0hFQURFUlMgbGliL2NvbmZp Zy5oOmxpYi9jb25maWcuaGluIiA7Ow0KICAgICJkZXBmaWxlcyIpIENPTkZJR19DT01NQU5EUz0i JENPTkZJR19DT01NQU5EUyBkZXBmaWxlcyIgOzsNCiAgICAiJEdOVW1ha2VmaWxlIikgQ09ORklH X0xJTktTPSIkQ09ORklHX0xJTktTICRHTlVtYWtlZmlsZTokR05VbWFrZWZpbGUiIDs7DQogICAg InBvLWRpcmVjdG9yaWVzIikgQ09ORklHX0NPTU1BTkRTPSIkQ09ORklHX0NPTU1BTkRTIHBvLWRp cmVjdG9yaWVzIiA7Ow0KICAgICJNYWtlZmlsZSIpIENPTkZJR19GSUxFUz0iJENPTkZJR19GSUxF UyBNYWtlZmlsZSIgOzsNCiAgICAiZG9jL01ha2VmaWxlIikgQ09ORklHX0ZJTEVTPSIkQ09ORklH X0ZJTEVTIGRvYy9NYWtlZmlsZSIgOzsNCiAgICAibGliL01ha2VmaWxlIikgQ09ORklHX0ZJTEVT PSIkQ09ORklHX0ZJTEVTIGxpYi9NYWtlZmlsZSIgOzsNCiAgICAibWFuL01ha2VmaWxlIikgQ09O RklHX0ZJTEVTPSIkQ09ORklHX0ZJTEVTIG1hbi9NYWtlZmlsZSIgOzsNCiAgICAicG8vTWFrZWZp bGUuaW4iKSBDT05GSUdfRklMRVM9IiRDT05GSUdfRklMRVMgcG8vTWFrZWZpbGUuaW4iIDs7DQog ICAgInNyYy9NYWtlZmlsZSIpIENPTkZJR19GSUxFUz0iJENPTkZJR19GSUxFUyBzcmMvTWFrZWZp bGUiIDs7DQogICAgInRlc3RzL01ha2VmaWxlIikgQ09ORklHX0ZJTEVTPSIkQ09ORklHX0ZJTEVT IHRlc3RzL01ha2VmaWxlIiA7Ow0KICAgICJnbnVsaWItdGVzdHMvTWFrZWZpbGUiKSBDT05GSUdf RklMRVM9IiRDT05GSUdfRklMRVMgZ251bGliLXRlc3RzL01ha2VmaWxlIiA7Ow0KDQogICopIGFz X2ZuX2Vycm9yICQ/ICJpbnZhbGlkIGFyZ3VtZW50OiBcYCRhY19jb25maWdfdGFyZ2V0JyIgIiRM SU5FTk8iIDU7Ow0KICBlc2FjDQpkb25lDQoNCg0KIyBJZiB0aGUgdXNlciBkaWQgbm90IHVzZSB0 aGUgYXJndW1lbnRzIHRvIHNwZWNpZnkgdGhlIGl0ZW1zIHRvIGluc3RhbnRpYXRlLA0KIyB0aGVu IHRoZSBlbnZ2YXIgaW50ZXJmYWNlIGlzIHVzZWQuICBTZXQgb25seSB0aG9zZSB0aGF0IGFyZSBu b3QuDQojIFdlIHVzZSB0aGUgbG9uZyBmb3JtIGZvciB0aGUgZGVmYXVsdCBhc3NpZ25tZW50IGJl Y2F1c2Ugb2YgYW4gZXh0cmVtZWx5DQojIGJpemFycmUgYnVnIG9uIFN1bk9TIDQuMS4zLg0KaWYg JGFjX25lZWRfZGVmYXVsdHM7IHRoZW4NCiAgdGVzdCAiJHtDT05GSUdfRklMRVMrc2V0fSIgPSBz ZXQgfHwgQ09ORklHX0ZJTEVTPSRjb25maWdfZmlsZXMNCiAgdGVzdCAiJHtDT05GSUdfSEVBREVS UytzZXR9IiA9IHNldCB8fCBDT05GSUdfSEVBREVSUz0kY29uZmlnX2hlYWRlcnMNCiAgdGVzdCAi JHtDT05GSUdfTElOS1Mrc2V0fSIgPSBzZXQgfHwgQ09ORklHX0xJTktTPSRjb25maWdfbGlua3MN CiAgdGVzdCAiJHtDT05GSUdfQ09NTUFORFMrc2V0fSIgPSBzZXQgfHwgQ09ORklHX0NPTU1BTkRT PSRjb25maWdfY29tbWFuZHMNCmZpDQoNCiMgSGF2ZSBhIHRlbXBvcmFyeSBkaXJlY3RvcnkgZm9y IGNvbnZlbmllbmNlLiAgTWFrZSBpdCBpbiB0aGUgYnVpbGQgdHJlZQ0KIyBzaW1wbHkgYmVjYXVz ZSB0aGVyZSBpcyBubyByZWFzb24gYWdhaW5zdCBoYXZpbmcgaXQgaGVyZSwgYW5kIGluIGFkZGl0 aW9uLA0KIyBjcmVhdGluZyBhbmQgbW92aW5nIGZpbGVzIGZyb20gL3RtcCBjYW4gc29tZXRpbWVz IGNhdXNlIHByb2JsZW1zLg0KIyBIb29rIGZvciBpdHMgcmVtb3ZhbCB1bmxlc3MgZGVidWdnaW5n Lg0KIyBOb3RlIHRoYXQgdGhlcmUgaXMgYSBzbWFsbCB3aW5kb3cgaW4gd2hpY2ggdGhlIGRpcmVj dG9yeSB3aWxsIG5vdCBiZSBjbGVhbmVkOg0KIyBhZnRlciBpdHMgY3JlYXRpb24gYnV0IGJlZm9y ZSBpdHMgbmFtZSBoYXMgYmVlbiBhc3NpZ25lZCB0byBgJHRtcCcuDQokZGVidWcgfHwNCnsNCiAg dG1wPSBhY190bXA9DQogIHRyYXAgJ2V4aXRfc3RhdHVzPSQ/DQogIDogIiR7YWNfdG1wOj0kdG1w fSINCiAgeyB0ZXN0ICEgLWQgIiRhY190bXAiIHx8IHJtIC1mciAiJGFjX3RtcCI7IH0gJiYgZXhp dCAkZXhpdF9zdGF0dXMNCicgMA0KICB0cmFwICdhc19mbl9leGl0IDEnIDEgMiAxMyAxNQ0KfQ0K IyBDcmVhdGUgYSAoc2VjdXJlKSB0bXAgZGlyZWN0b3J5IGZvciB0bXAgZmlsZXMuDQoNCnsNCiAg dG1wPWAodW1hc2sgMDc3ICYmIG1rdGVtcCAtZCAiLi9jb25mWFhYWFhYIikgMj4vZGV2L251bGxg ICYmDQogIHRlc3QgLWQgIiR0bXAiDQp9ICB8fA0Kew0KICB0bXA9Li9jb25mJCQtJFJBTkRPTQ0K ICAodW1hc2sgMDc3ICYmIG1rZGlyICIkdG1wIikNCn0gfHwgYXNfZm5fZXJyb3IgJD8gImNhbm5v dCBjcmVhdGUgYSB0ZW1wb3JhcnkgZGlyZWN0b3J5IGluIC4iICIkTElORU5PIiA1DQphY190bXA9 JHRtcA0KDQojIFNldCB1cCB0aGUgc2NyaXB0cyBmb3IgQ09ORklHX0ZJTEVTIHNlY3Rpb24uDQoj IE5vIG5lZWQgdG8gZ2VuZXJhdGUgdGhlbSBpZiB0aGVyZSBhcmUgbm8gQ09ORklHX0ZJTEVTLg0K IyBUaGlzIGhhcHBlbnMgZm9yIGluc3RhbmNlIHdpdGggYC4vY29uZmlnLnN0YXR1cyBjb25maWcu aCcuDQppZiB0ZXN0IC1uICIkQ09ORklHX0ZJTEVTIjsgdGhlbg0KDQoNCmFjX2NyPWBlY2hvIFgg fCB0ciBYICdcMDE1J2ANCiMgT24gY3lnd2luLCBiYXNoIGNhbiBlYXQgXHIgaW5zaWRlIGBgIGlm IHRoZSB1c2VyIHJlcXVlc3RlZCBpZ25jci4NCiMgQnV0IHdlIGtub3cgb2Ygbm8gb3RoZXIgc2hl bGwgd2hlcmUgYWNfY3Igd291bGQgYmUgZW1wdHkgYXQgdGhpcw0KIyBwb2ludCwgc28gd2UgY2Fu IHVzZSBhIGJhc2hpc20gYXMgYSBmYWxsYmFjay4NCmlmIHRlc3QgIngkYWNfY3IiID0geDsgdGhl bg0KICBldmFsIGFjX2NyPVwkXCdcXHJcJw0KZmkNCmFjX2NzX2F3a19jcj1gJEFXSyAnQkVHSU4g eyBwcmludCAiYVxyYiIgfScgPC9kZXYvbnVsbCAyPi9kZXYvbnVsbGANCmlmIHRlc3QgIiRhY19j c19hd2tfY3IiID0gImEke2FjX2NyfWIiOyB0aGVuDQogIGFjX2NzX2F3a19jcj0nXFxyJw0KZWxz ZQ0KICBhY19jc19hd2tfY3I9JGFjX2NyDQpmaQ0KDQplY2hvICdCRUdJTiB7JyA+IiRhY190bXAv c3ViczEuYXdrIiAmJg0KX0FDRU9GDQoNCg0Kew0KICBlY2hvICJjYXQgPmNvbmYkJHN1YnMuYXdr IDw8X0FDRU9GIiAmJg0KICBlY2hvICIkYWNfc3Vic3RfdmFycyIgfCBzZWQgJ3MvLiovJiEkJiRh Y19kZWxpbS8nICYmDQogIGVjaG8gIl9BQ0VPRiINCn0gPmNvbmYkJHN1YnMuc2ggfHwNCiAgYXNf Zm5fZXJyb3IgJD8gImNvdWxkIG5vdCBtYWtlICRDT05GSUdfU1RBVFVTIiAiJExJTkVOTyIgNQ0K YWNfZGVsaW1fbnVtPWBlY2hvICIkYWNfc3Vic3RfdmFycyIgfCBncmVwIC1jICdeJ2ANCmFjX2Rl bGltPSclIV8hIyAnDQpmb3IgYWNfbGFzdF90cnkgaW4gZmFsc2UgZmFsc2UgZmFsc2UgZmFsc2Ug ZmFsc2UgOjsgZG8NCiAgLiAuL2NvbmYkJHN1YnMuc2ggfHwNCiAgICBhc19mbl9lcnJvciAkPyAi Y291bGQgbm90IG1ha2UgJENPTkZJR19TVEFUVVMiICIkTElORU5PIiA1DQoNCiAgYWNfZGVsaW1f bj1gc2VkIC1uICJzLy4qJGFjX2RlbGltXCQvWC9wIiBjb25mJCRzdWJzLmF3ayB8IGdyZXAgLWMg WGANCiAgaWYgdGVzdCAkYWNfZGVsaW1fbiA9ICRhY19kZWxpbV9udW07IHRoZW4NCiAgICBicmVh aw0KICBlbGlmICRhY19sYXN0X3RyeTsgdGhlbg0KICAgIGFzX2ZuX2Vycm9yICQ/ICJjb3VsZCBu b3QgbWFrZSAkQ09ORklHX1NUQVRVUyIgIiRMSU5FTk8iIDUNCiAgZWxzZQ0KICAgIGFjX2RlbGlt PSIkYWNfZGVsaW0hJGFjX2RlbGltIF8kYWNfZGVsaW0hISAiDQogIGZpDQpkb25lDQpybSAtZiBj b25mJCRzdWJzLnNoDQoNCmNhdCA+PiRDT05GSUdfU1RBVFVTIDw8X0FDRU9GIHx8IGFjX3dyaXRl X2ZhaWw9MQ0KY2F0ID4+IlwkYWNfdG1wL3N1YnMxLmF3ayIgPDxcXF9BQ0FXSyAmJg0KX0FDRU9G DQpzZWQgLW4gJw0KaA0Kcy9eL1NbIi87IHMvIS4qLyJdPS8NCnANCmcNCnMvXlteIV0qIS8vDQo6 cmVwbA0KdCByZXBsDQpzLyciJGFjX2RlbGltIickLy8NCnQgZGVsaW0NCjpubA0KaA0Kcy9cKC5c ezE0OFx9XCkuLiovXDEvDQp0IG1vcmUxDQpzL1siXFxdL1xcJi9nOyBzL14vIi87IHMvJC9cXG4i XFwvDQpwDQpuDQpiIHJlcGwNCjptb3JlMQ0Kcy9bIlxcXS9cXCYvZzsgcy9eLyIvOyBzLyQvIlxc Lw0KcA0KZw0Kcy8uXHsxNDhcfS8vDQp0IG5sDQo6ZGVsaW0NCmgNCnMvXCguXHsxNDhcfVwpLi4q L1wxLw0KdCBtb3JlMg0Kcy9bIlxcXS9cXCYvZzsgcy9eLyIvOyBzLyQvIi8NCnANCmINCjptb3Jl Mg0Kcy9bIlxcXS9cXCYvZzsgcy9eLyIvOyBzLyQvIlxcLw0KcA0KZw0Kcy8uXHsxNDhcfS8vDQp0 IGRlbGltDQonIDxjb25mJCRzdWJzLmF3ayB8IHNlZCAnDQovXlteIiJdL3sNCiAgTg0KICBzL1xu Ly8NCn0NCicgPj4kQ09ORklHX1NUQVRVUyB8fCBhY193cml0ZV9mYWlsPTENCnJtIC1mIGNvbmYk JHN1YnMuYXdrDQpjYXQgPj4kQ09ORklHX1NUQVRVUyA8PF9BQ0VPRiB8fCBhY193cml0ZV9mYWls PTENCl9BQ0FXSw0KY2F0ID4+IlwkYWNfdG1wL3N1YnMxLmF3ayIgPDxfQUNBV0sgJiYNCiAgZm9y IChrZXkgaW4gUykgU19pc19zZXRba2V5XSA9IDENCiAgRlMgPSAiByINCg0KfQ0Kew0KICBsaW5l ID0gJCAwDQogIG5maWVsZHMgPSBzcGxpdChsaW5lLCBmaWVsZCwgIkAiKQ0KICBzdWJzdGVkID0g MA0KICBsZW4gPSBsZW5ndGgoZmllbGRbMV0pDQogIGZvciAoaSA9IDI7IGkgPCBuZmllbGRzOyBp KyspIHsNCiAgICBrZXkgPSBmaWVsZFtpXQ0KICAgIGtleWxlbiA9IGxlbmd0aChrZXkpDQogICAg aWYgKFNfaXNfc2V0W2tleV0pIHsNCiAgICAgIHZhbHVlID0gU1trZXldDQogICAgICBsaW5lID0g c3Vic3RyKGxpbmUsIDEsIGxlbikgIiIgdmFsdWUgIiIgc3Vic3RyKGxpbmUsIGxlbiArIGtleWxl biArIDMpDQogICAgICBsZW4gKz0gbGVuZ3RoKHZhbHVlKSArIGxlbmd0aChmaWVsZFsrK2ldKQ0K ICAgICAgc3Vic3RlZCA9IDENCiAgICB9IGVsc2UNCiAgICAgIGxlbiArPSAxICsga2V5bGVuDQog IH0NCg0KICBwcmludCBsaW5lDQp9DQoNCl9BQ0FXSw0KX0FDRU9GDQpjYXQgPj4kQ09ORklHX1NU QVRVUyA8PFxfQUNFT0YgfHwgYWNfd3JpdGVfZmFpbD0xDQppZiBzZWQgInMvJGFjX2NyLy8iIDwg L2Rldi9udWxsID4gL2Rldi9udWxsIDI+JjE7IHRoZW4NCiAgc2VkICJzLyRhY19jclwkLy87IHMv JGFjX2NyLyRhY19jc19hd2tfY3IvZyINCmVsc2UNCiAgY2F0DQpmaSA8ICIkYWNfdG1wL3N1YnMx LmF3ayIgPiAiJGFjX3RtcC9zdWJzLmF3ayIgXA0KICB8fCBhc19mbl9lcnJvciAkPyAiY291bGQg bm90IHNldHVwIGNvbmZpZyBmaWxlcyBtYWNoaW5lcnkiICIkTElORU5PIiA1DQpfQUNFT0YNCg0K IyBWUEFUSCBtYXkgY2F1c2UgdHJvdWJsZSB3aXRoIHNvbWUgbWFrZXMsIHNvIHdlIHJlbW92ZSBz b2xlICQoc3JjZGlyKSwNCiMgJHtzcmNkaXJ9IGFuZCBAc3JjZGlyQCBlbnRyaWVzIGZyb20gVlBB VEggaWYgc3JjZGlyIGlzICIuIiwgc3RyaXAgbGVhZGluZyBhbmQNCiMgdHJhaWxpbmcgY29sb25z IGFuZCB0aGVuIHJlbW92ZSB0aGUgd2hvbGUgbGluZSBpZiBWUEFUSCBiZWNvbWVzIGVtcHR5DQoj IChhY3R1YWxseSB3ZSBsZWF2ZSBhbiBlbXB0eSBsaW5lIHRvIHByZXNlcnZlIGxpbmUgbnVtYmVy cykuDQppZiB0ZXN0ICJ4JHNyY2RpciIgPSB4LjsgdGhlbg0KICBhY192cHN1Yj0nL15bCSBdKlZQ QVRIWwkgXSo9WwkgXSovew0KaA0Kcy8vLw0Kcy9eLzovDQpzL1sJIF0qJC86Lw0Kcy86XCQoc3Jj ZGlyKTovOi9nDQpzLzpcJHtzcmNkaXJ9Oi86L2cNCnMvOkBzcmNkaXJAOi86L2cNCnMvXjoqLy8N CnMvOiokLy8NCngNCnMvXCg9WwkgXSpcKS4qL1wxLw0KRw0Kcy9cbi8vDQpzL15bXj1dKj1bCSBd KiQvLw0KfScNCmZpDQoNCmNhdCA+PiRDT05GSUdfU1RBVFVTIDw8XF9BQ0VPRiB8fCBhY193cml0 ZV9mYWlsPTENCmZpICMgdGVzdCAtbiAiJENPTkZJR19GSUxFUyINCg0KIyBTZXQgdXAgdGhlIHNj cmlwdHMgZm9yIENPTkZJR19IRUFERVJTIHNlY3Rpb24uDQojIE5vIG5lZWQgdG8gZ2VuZXJhdGUg dGhlbSBpZiB0aGVyZSBhcmUgbm8gQ09ORklHX0hFQURFUlMuDQojIFRoaXMgaGFwcGVucyBmb3Ig aW5zdGFuY2Ugd2l0aCBgLi9jb25maWcuc3RhdHVzIE1ha2VmaWxlJy4NCmlmIHRlc3QgLW4gIiRD T05GSUdfSEVBREVSUyI7IHRoZW4NCmNhdCA+IiRhY190bXAvZGVmaW5lcy5hd2siIDw8XF9BQ0FX SyB8fA0KQkVHSU4gew0KX0FDRU9GDQoNCiMgVHJhbnNmb3JtIGNvbmZkZWZzLmggaW50byBhbiBh d2sgc2NyaXB0IGBkZWZpbmVzLmF3aycsIGVtYmVkZGVkIGFzDQojIGhlcmUtZG9jdW1lbnQgaW4g Y29uZmlnLnN0YXR1cywgdGhhdCBzdWJzdGl0dXRlcyB0aGUgcHJvcGVyIHZhbHVlcyBpbnRvDQoj IGNvbmZpZy5oLmluIHRvIHByb2R1Y2UgY29uZmlnLmguDQoNCiMgQ3JlYXRlIGEgZGVsaW1pdGVy IHN0cmluZyB0aGF0IGRvZXMgbm90IGV4aXN0IGluIGNvbmZkZWZzLmgsIHRvIGVhc2UNCiMgaGFu ZGxpbmcgb2YgbG9uZyBsaW5lcy4NCmFjX2RlbGltPSclIV8hIyAnDQpmb3IgYWNfbGFzdF90cnkg aW4gZmFsc2UgZmFsc2UgOjsgZG8NCiAgYWNfdHQ9YHNlZCAtbiAiLyRhY19kZWxpbS9wIiBjb25m ZGVmcy5oYA0KICBpZiB0ZXN0IC16ICIkYWNfdHQiOyB0aGVuDQogICAgYnJlYWsNCiAgZWxpZiAk YWNfbGFzdF90cnk7IHRoZW4NCiAgICBhc19mbl9lcnJvciAkPyAiY291bGQgbm90IG1ha2UgJENP TkZJR19IRUFERVJTIiAiJExJTkVOTyIgNQ0KICBlbHNlDQogICAgYWNfZGVsaW09IiRhY19kZWxp bSEkYWNfZGVsaW0gXyRhY19kZWxpbSEhICINCiAgZmkNCmRvbmUNCg0KIyBGb3IgdGhlIGF3ayBz Y3JpcHQsIEQgaXMgYW4gYXJyYXkgb2YgbWFjcm8gdmFsdWVzIGtleWVkIGJ5IG5hbWUsDQojIGxp a2V3aXNlIFAgY29udGFpbnMgbWFjcm8gcGFyYW1ldGVycyBpZiBhbnkuICBQcmVzZXJ2ZSBiYWNr c2xhc2gNCiMgbmV3bGluZSBzZXF1ZW5jZXMuDQoNCmFjX3dvcmRfcmU9W18kYXNfY3JfTGV0dGVy c11bXyRhc19jcl9hbG51bV0qDQpzZWQgLW4gJw0Kcy8uXHsxNDhcfS8mJyIkYWNfZGVsaW0iJy9n DQp0IHJzZXQNCjpyc2V0DQpzL15bCSBdKiNbCSBdKmRlZmluZVsJIF1bCSBdKi8gLw0KdCBkZWYN CmQNCjpkZWYNCnMvXFwkLy8NCnQgYnNubA0Kcy9bIlxcXS9cXCYvZw0Kcy9eIFwoJyIkYWNfd29y ZF9yZSInXClcKChbXigpXSopXClbCSBdKlwoLipcKS9QWyJcMSJdPSJcMiJcDQpEWyJcMSJdPSIg XDMiL3ANCnMvXiBcKCciJGFjX3dvcmRfcmUiJ1wpWwkgXSpcKC4qXCkvRFsiXDEiXT0iIFwyIi9w DQpkDQo6YnNubA0Kcy9bIlxcXS9cXCYvZw0Kcy9eIFwoJyIkYWNfd29yZF9yZSInXClcKChbXigp XSopXClbCSBdKlwoLipcKS9QWyJcMSJdPSJcMiJcDQpEWyJcMSJdPSIgXDNcXFxcXFxuIlxcL3AN CnQgY29udA0Kcy9eIFwoJyIkYWNfd29yZF9yZSInXClbCSBdKlwoLipcKS9EWyJcMSJdPSIgXDJc XFxcXFxuIlxcL3ANCnQgY29udA0KZA0KOmNvbnQNCm4NCnMvLlx7MTQ4XH0vJiciJGFjX2RlbGlt IicvZw0KdCBjbGVhcg0KOmNsZWFyDQpzL1xcJC8vDQp0IGJzbmxjDQpzL1siXFxdL1xcJi9nOyBz L14vIi87IHMvJC8iL3ANCmQNCjpic25sYw0Kcy9bIlxcXS9cXCYvZzsgcy9eLyIvOyBzLyQvXFxc XFxcbiJcXC9wDQpiIGNvbnQNCicgPGNvbmZkZWZzLmggfCBzZWQgJw0Kcy8nIiRhY19kZWxpbSIn LyJcXFwNCiIvZycgPj4kQ09ORklHX1NUQVRVUyB8fCBhY193cml0ZV9mYWlsPTENCg0KY2F0ID4+ JENPTkZJR19TVEFUVVMgPDxfQUNFT0YgfHwgYWNfd3JpdGVfZmFpbD0xDQogIGZvciAoa2V5IGlu IEQpIERfaXNfc2V0W2tleV0gPSAxDQogIEZTID0gIgciDQp9DQovXltcdCBdKiNbXHQgXSooZGVm aW5lfHVuZGVmKVtcdCBdKyRhY193b3JkX3JlKFtcdCAoXXxcJCkvIHsNCiAgbGluZSA9IFwkIDAN CiAgc3BsaXQobGluZSwgYXJnLCAiICIpDQogIGlmIChhcmdbMV0gPT0gIiMiKSB7DQogICAgZGVm dW5kZWYgPSBhcmdbMl0NCiAgICBtYWMxID0gYXJnWzNdDQogIH0gZWxzZSB7DQogICAgZGVmdW5k ZWYgPSBzdWJzdHIoYXJnWzFdLCAyKQ0KICAgIG1hYzEgPSBhcmdbMl0NCiAgfQ0KICBzcGxpdCht YWMxLCBtYWMyLCAiKCIpICMpDQogIG1hY3JvID0gbWFjMlsxXQ0KICBwcmVmaXggPSBzdWJzdHIo bGluZSwgMSwgaW5kZXgobGluZSwgZGVmdW5kZWYpIC0gMSkNCiAgaWYgKERfaXNfc2V0W21hY3Jv XSkgew0KICAgICMgUHJlc2VydmUgdGhlIHdoaXRlIHNwYWNlIHN1cnJvdW5kaW5nIHRoZSAiIyIu DQogICAgcHJpbnQgcHJlZml4ICJkZWZpbmUiLCBtYWNybyBQW21hY3JvXSBEW21hY3JvXQ0KICAg IG5leHQNCiAgfSBlbHNlIHsNCiAgICAjIFJlcGxhY2UgI3VuZGVmIHdpdGggY29tbWVudHMuICBU aGlzIGlzIG5lY2Vzc2FyeSwgZm9yIGV4YW1wbGUsDQogICAgIyBpbiB0aGUgY2FzZSBvZiBfUE9T SVhfU09VUkNFLCB3aGljaCBpcyBwcmVkZWZpbmVkIGFuZCByZXF1aXJlZA0KICAgICMgb24gc29t ZSBzeXN0ZW1zIHdoZXJlIGNvbmZpZ3VyZSB3aWxsIG5vdCBkZWNpZGUgdG8gZGVmaW5lIGl0Lg0K ICAgIGlmIChkZWZ1bmRlZiA9PSAidW5kZWYiKSB7DQogICAgICBwcmludCAiLyoiLCBwcmVmaXgg ZGVmdW5kZWYsIG1hY3JvLCAiKi8iDQogICAgICBuZXh0DQogICAgfQ0KICB9DQp9DQp7IHByaW50 IH0NCl9BQ0FXSw0KX0FDRU9GDQpjYXQgPj4kQ09ORklHX1NUQVRVUyA8PFxfQUNFT0YgfHwgYWNf d3JpdGVfZmFpbD0xDQogIGFzX2ZuX2Vycm9yICQ/ICJjb3VsZCBub3Qgc2V0dXAgY29uZmlnIGhl YWRlcnMgbWFjaGluZXJ5IiAiJExJTkVOTyIgNQ0KZmkgIyB0ZXN0IC1uICIkQ09ORklHX0hFQURF UlMiDQoNCg0KZXZhbCBzZXQgWCAiICA6RiAkQ09ORklHX0ZJTEVTICA6SCAkQ09ORklHX0hFQURF UlMgIDpMICRDT05GSUdfTElOS1MgIDpDICRDT05GSUdfQ09NTUFORFMiDQpzaGlmdA0KZm9yIGFj X3RhZw0KZG8NCiAgY2FzZSAkYWNfdGFnIGluDQogIDpbRkhMQ10pIGFjX21vZGU9JGFjX3RhZzsg Y29udGludWU7Ow0KICBlc2FjDQogIGNhc2UgJGFjX21vZGUkYWNfdGFnIGluDQogIDpbRkhMXSo6 Kik7Ow0KICA6TCogfCA6Qyo6KikgYXNfZm5fZXJyb3IgJD8gImludmFsaWQgdGFnIFxgJGFjX3Rh ZyciICIkTElORU5PIiA1OzsNCiAgOltGSF0tKSBhY190YWc9LTotOzsNCiAgOltGSF0qKSBhY190 YWc9JGFjX3RhZzokYWNfdGFnLmluOzsNCiAgZXNhYw0KICBhY19zYXZlX0lGUz0kSUZTDQogIElG Uz06DQogIHNldCB4ICRhY190YWcNCiAgSUZTPSRhY19zYXZlX0lGUw0KICBzaGlmdA0KICBhY19m aWxlPSQxDQogIHNoaWZ0DQoNCiAgY2FzZSAkYWNfbW9kZSBpbg0KICA6TCkgYWNfc291cmNlPSQx OzsNCiAgOltGSF0pDQogICAgYWNfZmlsZV9pbnB1dHM9DQogICAgZm9yIGFjX2YNCiAgICBkbw0K ICAgICAgY2FzZSAkYWNfZiBpbg0KICAgICAgLSkgYWNfZj0iJGFjX3RtcC9zdGRpbiI7Ow0KICAg ICAgKikgIyBMb29rIGZvciB0aGUgZmlsZSBmaXJzdCBpbiB0aGUgYnVpbGQgdHJlZSwgdGhlbiBp biB0aGUgc291cmNlIHRyZWUNCgkgIyAoaWYgdGhlIHBhdGggaXMgbm90IGFic29sdXRlKS4gIFRo ZSBhYnNvbHV0ZSBwYXRoIGNhbm5vdCBiZSBET1Mtc3R5bGUsDQoJICMgYmVjYXVzZSAkYWNfZiBj YW5ub3QgY29udGFpbiBgOicuDQoJIHRlc3QgLWYgIiRhY19mIiB8fA0KCSAgIGNhc2UgJGFjX2Yg aW4NCgkgICBbXFwvJF0qKSBmYWxzZTs7DQoJICAgKikgdGVzdCAtZiAiJHNyY2Rpci8kYWNfZiIg JiYgYWNfZj0iJHNyY2Rpci8kYWNfZiI7Ow0KCSAgIGVzYWMgfHwNCgkgICBhc19mbl9lcnJvciAx ICJjYW5ub3QgZmluZCBpbnB1dCBmaWxlOiBcYCRhY19mJyIgIiRMSU5FTk8iIDU7Ow0KICAgICAg ZXNhYw0KICAgICAgY2FzZSAkYWNfZiBpbiAqXCcqKSBhY19mPWAkYXNfZWNobyAiJGFjX2YiIHwg c2VkICJzLycvJ1xcXFxcXFxcJycvZyJgOzsgZXNhYw0KICAgICAgYXNfZm5fYXBwZW5kIGFjX2Zp bGVfaW5wdXRzICIgJyRhY19mJyINCiAgICBkb25lDQoNCiAgICAjIExldCdzIHN0aWxsIHByZXRl bmQgaXQgaXMgYGNvbmZpZ3VyZScgd2hpY2ggaW5zdGFudGlhdGVzIChpLmUuLCBkb24ndA0KICAg ICMgdXNlICRhc19tZSksIHBlb3BsZSB3b3VsZCBiZSBzdXJwcmlzZWQgdG8gcmVhZDoNCiAgICAj ICAgIC8qIGNvbmZpZy5oLiAgR2VuZXJhdGVkIGJ5IGNvbmZpZy5zdGF0dXMuICAqLw0KICAgIGNv bmZpZ3VyZV9pbnB1dD0nR2VuZXJhdGVkIGZyb20gJ2ANCgkgICRhc19lY2hvICIkKiIgfCBzZWQg J3N8XlteOl0qL3x8O3N8OlteOl0qL3wsIHxnJw0KCWAnIGJ5IGNvbmZpZ3VyZS4nDQogICAgaWYg dGVzdCB4IiRhY19maWxlIiAhPSB4LTsgdGhlbg0KICAgICAgY29uZmlndXJlX2lucHV0PSIkYWNf ZmlsZS4gICRjb25maWd1cmVfaW5wdXQiDQogICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19s aW5lbm8tJExJTkVOT306IGNyZWF0aW5nICRhY19maWxlIiA+JjUNCiRhc19lY2hvICIkYXNfbWU6 IGNyZWF0aW5nICRhY19maWxlIiA+JjY7fQ0KICAgIGZpDQogICAgIyBOZXV0cmFsaXplIHNwZWNp YWwgY2hhcmFjdGVycyBpbnRlcnByZXRlZCBieSBzZWQgaW4gcmVwbGFjZW1lbnQgc3RyaW5ncy4N CiAgICBjYXNlICRjb25maWd1cmVfaW5wdXQgaW4gIygNCiAgICAqXCYqIHwgKlx8KiB8ICpcXCog KQ0KICAgICAgIGFjX3NlZF9jb25mX2lucHV0PWAkYXNfZWNobyAiJGNvbmZpZ3VyZV9pbnB1dCIg fA0KICAgICAgIHNlZCAncy9bXFxcXCZ8XS9cXFxcJi9nJ2A7OyAjKA0KICAgICopIGFjX3NlZF9j b25mX2lucHV0PSRjb25maWd1cmVfaW5wdXQ7Ow0KICAgIGVzYWMNCg0KICAgIGNhc2UgJGFjX3Rh ZyBpbg0KICAgICo6LToqIHwgKjotKSBjYXQgPiIkYWNfdG1wL3N0ZGluIiBcDQogICAgICB8fCBh c19mbl9lcnJvciAkPyAiY291bGQgbm90IGNyZWF0ZSAkYWNfZmlsZSIgIiRMSU5FTk8iIDUgOzsN CiAgICBlc2FjDQogICAgOzsNCiAgZXNhYw0KDQogIGFjX2Rpcj1gJGFzX2Rpcm5hbWUgLS0gIiRh Y19maWxlIiB8fA0KJGFzX2V4cHIgWCIkYWNfZmlsZSIgOiAnWFwoLipbXi9dXCkvLypbXi9dW14v XSovKiQnIFx8IFwNCgkgWCIkYWNfZmlsZSIgOiAnWFwoLy9cKVteL10nIFx8IFwNCgkgWCIkYWNf ZmlsZSIgOiAnWFwoLy9cKSQnIFx8IFwNCgkgWCIkYWNfZmlsZSIgOiAnWFwoL1wpJyBcfCAuIDI+ L2Rldi9udWxsIHx8DQokYXNfZWNobyBYIiRhY19maWxlIiB8DQogICAgc2VkICcvXlhcKC4qW14v XVwpXC9cLypbXi9dW14vXSpcLyokL3sNCgkgICAgcy8vXDEvDQoJICAgIHENCgkgIH0NCgkgIC9e WFwoXC9cL1wpW14vXS4qL3sNCgkgICAgcy8vXDEvDQoJICAgIHENCgkgIH0NCgkgIC9eWFwoXC9c L1wpJC97DQoJICAgIHMvL1wxLw0KCSAgICBxDQoJICB9DQoJICAvXlhcKFwvXCkuKi97DQoJICAg IHMvL1wxLw0KCSAgICBxDQoJICB9DQoJICBzLy4qLy4vOyBxJ2ANCiAgYXNfZGlyPSIkYWNfZGly IjsgYXNfZm5fbWtkaXJfcA0KICBhY19idWlsZGRpcj0uDQoNCmNhc2UgIiRhY19kaXIiIGluDQou KSBhY19kaXJfc3VmZml4PSBhY190b3BfYnVpbGRkaXJfc3ViPS4gYWNfdG9wX2J1aWxkX3ByZWZp eD0gOzsNCiopDQogIGFjX2Rpcl9zdWZmaXg9L2AkYXNfZWNobyAiJGFjX2RpciIgfCBzZWQgJ3N8 XlwuW1xcL118fCdgDQogICMgQSAiLi4iIGZvciBlYWNoIGRpcmVjdG9yeSBpbiAkYWNfZGlyX3N1 ZmZpeC4NCiAgYWNfdG9wX2J1aWxkZGlyX3N1Yj1gJGFzX2VjaG8gIiRhY19kaXJfc3VmZml4IiB8 IHNlZCAnc3wvW15cXC9dKnwvLi58ZztzfC98fCdgDQogIGNhc2UgJGFjX3RvcF9idWlsZGRpcl9z dWIgaW4NCiAgIiIpIGFjX3RvcF9idWlsZGRpcl9zdWI9LiBhY190b3BfYnVpbGRfcHJlZml4PSA7 Ow0KICAqKSAgYWNfdG9wX2J1aWxkX3ByZWZpeD0kYWNfdG9wX2J1aWxkZGlyX3N1Yi8gOzsNCiAg ZXNhYyA7Ow0KZXNhYw0KYWNfYWJzX3RvcF9idWlsZGRpcj0kYWNfcHdkDQphY19hYnNfYnVpbGRk aXI9JGFjX3B3ZCRhY19kaXJfc3VmZml4DQojIGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5Og0K YWNfdG9wX2J1aWxkZGlyPSRhY190b3BfYnVpbGRfcHJlZml4DQoNCmNhc2UgJHNyY2RpciBpbg0K ICAuKSAgIyBXZSBhcmUgYnVpbGRpbmcgaW4gcGxhY2UuDQogICAgYWNfc3JjZGlyPS4NCiAgICBh Y190b3Bfc3JjZGlyPSRhY190b3BfYnVpbGRkaXJfc3ViDQogICAgYWNfYWJzX3RvcF9zcmNkaXI9 JGFjX3B3ZCA7Ow0KICBbXFwvXSogfCA/OltcXC9dKiApICAjIEFic29sdXRlIG5hbWUuDQogICAg YWNfc3JjZGlyPSRzcmNkaXIkYWNfZGlyX3N1ZmZpeDsNCiAgICBhY190b3Bfc3JjZGlyPSRzcmNk aXINCiAgICBhY19hYnNfdG9wX3NyY2Rpcj0kc3JjZGlyIDs7DQogICopICMgUmVsYXRpdmUgbmFt ZS4NCiAgICBhY19zcmNkaXI9JGFjX3RvcF9idWlsZF9wcmVmaXgkc3JjZGlyJGFjX2Rpcl9zdWZm aXgNCiAgICBhY190b3Bfc3JjZGlyPSRhY190b3BfYnVpbGRfcHJlZml4JHNyY2Rpcg0KICAgIGFj X2Fic190b3Bfc3JjZGlyPSRhY19wd2QvJHNyY2RpciA7Ow0KZXNhYw0KYWNfYWJzX3NyY2Rpcj0k YWNfYWJzX3RvcF9zcmNkaXIkYWNfZGlyX3N1ZmZpeA0KDQoNCiAgY2FzZSAkYWNfbW9kZSBpbg0K ICA6RikNCiAgIw0KICAjIENPTkZJR19GSUxFDQogICMNCg0KICBjYXNlICRJTlNUQUxMIGluDQog IFtcXC8kXSogfCA/OltcXC9dKiApIGFjX0lOU1RBTEw9JElOU1RBTEwgOzsNCiAgKikgYWNfSU5T VEFMTD0kYWNfdG9wX2J1aWxkX3ByZWZpeCRJTlNUQUxMIDs7DQogIGVzYWMNCiAgYWNfTUtESVJf UD0kTUtESVJfUA0KICBjYXNlICRNS0RJUl9QIGluDQogIFtcXC8kXSogfCA/OltcXC9dKiApIDs7 DQogICovKikgYWNfTUtESVJfUD0kYWNfdG9wX2J1aWxkX3ByZWZpeCRNS0RJUl9QIDs7DQogIGVz YWMNCl9BQ0VPRg0KDQpjYXQgPj4kQ09ORklHX1NUQVRVUyA8PFxfQUNFT0YgfHwgYWNfd3JpdGVf ZmFpbD0xDQojIElmIHRoZSB0ZW1wbGF0ZSBkb2VzIG5vdCBrbm93IGFib3V0IGRhdGFyb290ZGly LCBleHBhbmQgaXQuDQojIEZJWE1FOiBUaGlzIGhhY2sgc2hvdWxkIGJlIHJlbW92ZWQgYSBmZXcg eWVhcnMgYWZ0ZXIgMi42MC4NCmFjX2RhdGFyb290ZGlyX2hhY2s9OyBhY19kYXRhcm9vdGRpcl9z ZWVuPQ0KYWNfc2VkX2RhdGFyb290PScNCi9kYXRhcm9vdGRpci8gew0KICBwDQogIHENCn0NCi9A ZGF0YWRpckAvcA0KL0Bkb2NkaXJAL3ANCi9AaW5mb2RpckAvcA0KL0Bsb2NhbGVkaXJAL3ANCi9A bWFuZGlyQC9wJw0KY2FzZSBgZXZhbCAic2VkIC1uIFwiXCRhY19zZWRfZGF0YXJvb3RcIiAkYWNf ZmlsZV9pbnB1dHMiYCBpbg0KKmRhdGFyb290ZGlyKikgYWNfZGF0YXJvb3RkaXJfc2Vlbj15ZXM7 Ow0KKkBkYXRhZGlyQCp8KkBkb2NkaXJAKnwqQGluZm9kaXJAKnwqQGxvY2FsZWRpckAqfCpAbWFu ZGlyQCopDQogIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklO RzogJGFjX2ZpbGVfaW5wdXRzIHNlZW1zIHRvIGlnbm9yZSB0aGUgLS1kYXRhcm9vdGRpciBzZXR0 aW5nIiA+JjUNCiRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19maWxlX2lucHV0cyBzZWVt cyB0byBpZ25vcmUgdGhlIC0tZGF0YXJvb3RkaXIgc2V0dGluZyIgPiYyO30NCl9BQ0VPRg0KY2F0 ID4+JENPTkZJR19TVEFUVVMgPDxfQUNFT0YgfHwgYWNfd3JpdGVfZmFpbD0xDQogIGFjX2RhdGFy b290ZGlyX2hhY2s9Jw0KICBzJkBkYXRhZGlyQCYkZGF0YWRpciZnDQogIHMmQGRvY2RpckAmJGRv Y2RpciZnDQogIHMmQGluZm9kaXJAJiRpbmZvZGlyJmcNCiAgcyZAbG9jYWxlZGlyQCYkbG9jYWxl ZGlyJmcNCiAgcyZAbWFuZGlyQCYkbWFuZGlyJmcNCiAgcyZcXFwke2RhdGFyb290ZGlyfSYkZGF0 YXJvb3RkaXImZycgOzsNCmVzYWMNCl9BQ0VPRg0KDQojIE5ldXRyYWxpemUgVlBBVEggd2hlbiBg JHNyY2RpcicgPSBgLicuDQojIFNoZWxsIGNvZGUgaW4gY29uZmlndXJlLmFjIG1pZ2h0IHNldCBl eHRyYXN1Yi4NCiMgRklYTUU6IGRvIHdlIHJlYWxseSB3YW50IHRvIG1haW50YWluIHRoaXMgZmVh dHVyZT8NCmNhdCA+PiRDT05GSUdfU1RBVFVTIDw8X0FDRU9GIHx8IGFjX3dyaXRlX2ZhaWw9MQ0K YWNfc2VkX2V4dHJhPSIkYWNfdnBzdWINCiRleHRyYXN1Yg0KX0FDRU9GDQpjYXQgPj4kQ09ORklH X1NUQVRVUyA8PFxfQUNFT0YgfHwgYWNfd3JpdGVfZmFpbD0xDQo6dA0KL0BbYS16QS1aX11bYS16 QS1aXzAtOV0qQC8hYg0Kc3xAY29uZmlndXJlX2lucHV0QHwkYWNfc2VkX2NvbmZfaW5wdXR8O3Qg dA0KcyZAdG9wX2J1aWxkZGlyQCYkYWNfdG9wX2J1aWxkZGlyX3N1YiY7dCB0DQpzJkB0b3BfYnVp bGRfcHJlZml4QCYkYWNfdG9wX2J1aWxkX3ByZWZpeCY7dCB0DQpzJkBzcmNkaXJAJiRhY19zcmNk aXImO3QgdA0KcyZAYWJzX3NyY2RpckAmJGFjX2Fic19zcmNkaXImO3QgdA0KcyZAdG9wX3NyY2Rp ckAmJGFjX3RvcF9zcmNkaXImO3QgdA0KcyZAYWJzX3RvcF9zcmNkaXJAJiRhY19hYnNfdG9wX3Ny Y2RpciY7dCB0DQpzJkBidWlsZGRpckAmJGFjX2J1aWxkZGlyJjt0IHQNCnMmQGFic19idWlsZGRp ckAmJGFjX2Fic19idWlsZGRpciY7dCB0DQpzJkBhYnNfdG9wX2J1aWxkZGlyQCYkYWNfYWJzX3Rv cF9idWlsZGRpciY7dCB0DQpzJkBJTlNUQUxMQCYkYWNfSU5TVEFMTCY7dCB0DQpzJkBNS0RJUl9Q QCYkYWNfTUtESVJfUCY7dCB0DQokYWNfZGF0YXJvb3RkaXJfaGFjaw0KIg0KZXZhbCBzZWQgXCJc JGFjX3NlZF9leHRyYVwiICIkYWNfZmlsZV9pbnB1dHMiIHwgJEFXSyAtZiAiJGFjX3RtcC9zdWJz LmF3ayIgXA0KICA+JGFjX3RtcC9vdXQgfHwgYXNfZm5fZXJyb3IgJD8gImNvdWxkIG5vdCBjcmVh dGUgJGFjX2ZpbGUiICIkTElORU5PIiA1DQoNCnRlc3QgLXogIiRhY19kYXRhcm9vdGRpcl9oYWNr JGFjX2RhdGFyb290ZGlyX3NlZW4iICYmDQogIHsgYWNfb3V0PWBzZWQgLW4gJy9cJHtkYXRhcm9v dGRpcn0vcCcgIiRhY190bXAvb3V0ImA7IHRlc3QgLW4gIiRhY19vdXQiOyB9ICYmDQogIHsgYWNf b3V0PWBzZWQgLW4gJy9eWwkgXSpkYXRhcm9vdGRpclsJIF0qOio9L3AnIFwNCiAgICAgICIkYWNf dG1wL291dCJgOyB0ZXN0IC16ICIkYWNfb3V0IjsgfSAmJg0KICB7ICRhc19lY2hvICIkYXNfbWU6 JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6ICRhY19maWxlIGNvbnRhaW5zIGEgcmVmZXJl bmNlIHRvIHRoZSB2YXJpYWJsZSBcYGRhdGFyb290ZGlyJw0Kd2hpY2ggc2VlbXMgdG8gYmUgdW5k ZWZpbmVkLiAgUGxlYXNlIG1ha2Ugc3VyZSBpdCBpcyBkZWZpbmVkIiA+JjUNCiRhc19lY2hvICIk YXNfbWU6IFdBUk5JTkc6ICRhY19maWxlIGNvbnRhaW5zIGEgcmVmZXJlbmNlIHRvIHRoZSB2YXJp YWJsZSBcYGRhdGFyb290ZGlyJw0Kd2hpY2ggc2VlbXMgdG8gYmUgdW5kZWZpbmVkLiAgUGxlYXNl IG1ha2Ugc3VyZSBpdCBpcyBkZWZpbmVkIiA+JjI7fQ0KDQogIHJtIC1mICIkYWNfdG1wL3N0ZGlu Ig0KICBjYXNlICRhY19maWxlIGluDQogIC0pIGNhdCAiJGFjX3RtcC9vdXQiICYmIHJtIC1mICIk YWNfdG1wL291dCI7Ow0KICAqKSBybSAtZiAiJGFjX2ZpbGUiICYmIG12ICIkYWNfdG1wL291dCIg IiRhY19maWxlIjs7DQogIGVzYWMgXA0KICB8fCBhc19mbl9lcnJvciAkPyAiY291bGQgbm90IGNy ZWF0ZSAkYWNfZmlsZSIgIiRMSU5FTk8iIDUNCiA7Ow0KICA6SCkNCiAgIw0KICAjIENPTkZJR19I RUFERVINCiAgIw0KICBpZiB0ZXN0IHgiJGFjX2ZpbGUiICE9IHgtOyB0aGVuDQogICAgew0KICAg ICAgJGFzX2VjaG8gIi8qICRjb25maWd1cmVfaW5wdXQgICovIiBcDQogICAgICAmJiBldmFsICck QVdLIC1mICIkYWNfdG1wL2RlZmluZXMuYXdrIicgIiRhY19maWxlX2lucHV0cyINCiAgICB9ID4i JGFjX3RtcC9jb25maWcuaCIgXA0KICAgICAgfHwgYXNfZm5fZXJyb3IgJD8gImNvdWxkIG5vdCBj cmVhdGUgJGFjX2ZpbGUiICIkTElORU5PIiA1DQogICAgaWYgZGlmZiAiJGFjX2ZpbGUiICIkYWNf dG1wL2NvbmZpZy5oIiA+L2Rldi9udWxsIDI+JjE7IHRoZW4NCiAgICAgIHsgJGFzX2VjaG8gIiRh c19tZToke2FzX2xpbmVuby0kTElORU5PfTogJGFjX2ZpbGUgaXMgdW5jaGFuZ2VkIiA+JjUNCiRh c19lY2hvICIkYXNfbWU6ICRhY19maWxlIGlzIHVuY2hhbmdlZCIgPiY2O30NCiAgICBlbHNlDQog ICAgICBybSAtZiAiJGFjX2ZpbGUiDQogICAgICBtdiAiJGFjX3RtcC9jb25maWcuaCIgIiRhY19m aWxlIiBcDQoJfHwgYXNfZm5fZXJyb3IgJD8gImNvdWxkIG5vdCBjcmVhdGUgJGFjX2ZpbGUiICIk TElORU5PIiA1DQogICAgZmkNCiAgZWxzZQ0KICAgICRhc19lY2hvICIvKiAkY29uZmlndXJlX2lu cHV0ICAqLyIgXA0KICAgICAgJiYgZXZhbCAnJEFXSyAtZiAiJGFjX3RtcC9kZWZpbmVzLmF3ayIn ICIkYWNfZmlsZV9pbnB1dHMiIFwNCiAgICAgIHx8IGFzX2ZuX2Vycm9yICQ/ICJjb3VsZCBub3Qg Y3JlYXRlIC0iICIkTElORU5PIiA1DQogIGZpDQojIENvbXB1dGUgIiRhY19maWxlIidzIGluZGV4 IGluICRjb25maWdfaGVhZGVycy4NCl9hbV9hcmc9IiRhY19maWxlIg0KX2FtX3N0YW1wX2NvdW50 PTENCmZvciBfYW1faGVhZGVyIGluICRjb25maWdfaGVhZGVycyA6OyBkbw0KICBjYXNlICRfYW1f aGVhZGVyIGluDQogICAgJF9hbV9hcmcgfCAkX2FtX2FyZzoqICkNCiAgICAgIGJyZWFrIDs7DQog ICAgKiApDQogICAgICBfYW1fc3RhbXBfY291bnQ9YGV4cHIgJF9hbV9zdGFtcF9jb3VudCArIDFg IDs7DQogIGVzYWMNCmRvbmUNCmVjaG8gInRpbWVzdGFtcCBmb3IgJF9hbV9hcmciID5gJGFzX2Rp cm5hbWUgLS0gIiRfYW1fYXJnIiB8fA0KJGFzX2V4cHIgWCIkX2FtX2FyZyIgOiAnWFwoLipbXi9d XCkvLypbXi9dW14vXSovKiQnIFx8IFwNCgkgWCIkX2FtX2FyZyIgOiAnWFwoLy9cKVteL10nIFx8 IFwNCgkgWCIkX2FtX2FyZyIgOiAnWFwoLy9cKSQnIFx8IFwNCgkgWCIkX2FtX2FyZyIgOiAnWFwo L1wpJyBcfCAuIDI+L2Rldi9udWxsIHx8DQokYXNfZWNobyBYIiRfYW1fYXJnIiB8DQogICAgc2Vk ICcvXlhcKC4qW14vXVwpXC9cLypbXi9dW14vXSpcLyokL3sNCgkgICAgcy8vXDEvDQoJICAgIHEN CgkgIH0NCgkgIC9eWFwoXC9cL1wpW14vXS4qL3sNCgkgICAgcy8vXDEvDQoJICAgIHENCgkgIH0N CgkgIC9eWFwoXC9cL1wpJC97DQoJICAgIHMvL1wxLw0KCSAgICBxDQoJICB9DQoJICAvXlhcKFwv XCkuKi97DQoJICAgIHMvL1wxLw0KCSAgICBxDQoJICB9DQoJICBzLy4qLy4vOyBxJ2Avc3RhbXAt aCRfYW1fc3RhbXBfY291bnQNCiA7Ow0KICA6TCkNCiAgIw0KICAjIENPTkZJR19MSU5LDQogICMN Cg0KICBpZiB0ZXN0ICIkYWNfc291cmNlIiA9ICIkYWNfZmlsZSIgJiYgdGVzdCAiJHNyY2RpciIg PSAnLic7IHRoZW4NCiAgICA6DQogIGVsc2UNCiAgICAjIFByZWZlciB0aGUgZmlsZSBmcm9tIHRo ZSBzb3VyY2UgdHJlZSBpZiBuYW1lcyBhcmUgaWRlbnRpY2FsLg0KICAgIGlmIHRlc3QgIiRhY19z b3VyY2UiID0gIiRhY19maWxlIiB8fCB0ZXN0ICEgLXIgIiRhY19zb3VyY2UiOyB0aGVuDQogICAg ICBhY19zb3VyY2U9JHNyY2Rpci8kYWNfc291cmNlDQogICAgZmkNCg0KICAgIHsgJGFzX2VjaG8g IiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogbGlua2luZyAkYWNfc291cmNlIHRvICRhY19m aWxlIiA+JjUNCiRhc19lY2hvICIkYXNfbWU6IGxpbmtpbmcgJGFjX3NvdXJjZSB0byAkYWNfZmls ZSIgPiY2O30NCg0KICAgIGlmIHRlc3QgISAtciAiJGFjX3NvdXJjZSI7IHRoZW4NCiAgICAgIGFz X2ZuX2Vycm9yICQ/ICIkYWNfc291cmNlOiBmaWxlIG5vdCBmb3VuZCIgIiRMSU5FTk8iIDUNCiAg ICBmaQ0KICAgIHJtIC1mICIkYWNfZmlsZSINCg0KICAgICMgVHJ5IGEgcmVsYXRpdmUgc3ltbGlu aywgdGhlbiBhIGhhcmQgbGluaywgdGhlbiBhIGNvcHkuDQogICAgY2FzZSAkYWNfc291cmNlIGlu DQogICAgW1xcLyRdKiB8ID86W1xcL10qICkgYWNfcmVsX3NvdXJjZT0kYWNfc291cmNlIDs7DQoJ KikgYWNfcmVsX3NvdXJjZT0kYWNfdG9wX2J1aWxkX3ByZWZpeCRhY19zb3VyY2UgOzsNCiAgICBl c2FjDQogICAgbG4gLXMgIiRhY19yZWxfc291cmNlIiAiJGFjX2ZpbGUiIDI+L2Rldi9udWxsIHx8 DQogICAgICBsbiAiJGFjX3NvdXJjZSIgIiRhY19maWxlIiAyPi9kZXYvbnVsbCB8fA0KICAgICAg Y3AgLXAgIiRhY19zb3VyY2UiICIkYWNfZmlsZSIgfHwNCiAgICAgIGFzX2ZuX2Vycm9yICQ/ICJj YW5ub3QgbGluayBvciBjb3B5ICRhY19zb3VyY2UgdG8gJGFjX2ZpbGUiICIkTElORU5PIiA1DQog IGZpDQogOzsNCiAgOkMpICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306 IGV4ZWN1dGluZyAkYWNfZmlsZSBjb21tYW5kcyIgPiY1DQokYXNfZWNobyAiJGFzX21lOiBleGVj dXRpbmcgJGFjX2ZpbGUgY29tbWFuZHMiID4mNjt9DQogOzsNCiAgZXNhYw0KDQoNCiAgY2FzZSAk YWNfZmlsZSRhY19tb2RlIGluDQogICAgImRlcGZpbGVzIjpDKSB0ZXN0IHgiJEFNREVQX1RSVUUi ICE9IHgiIiB8fCB7DQogICMgQXV0b2NvbmYgMi42MiBxdW90ZXMgLS1maWxlIGFyZ3VtZW50cyBm b3IgZXZhbCwgYnV0IG5vdCB3aGVuIGZpbGVzDQogICMgYXJlIGxpc3RlZCB3aXRob3V0IC0tZmls ZS4gIExldCdzIHBsYXkgc2FmZSBhbmQgb25seSBlbmFibGUgdGhlIGV2YWwNCiAgIyBpZiB3ZSBk ZXRlY3QgdGhlIHF1b3RpbmcuDQogIGNhc2UgJENPTkZJR19GSUxFUyBpbg0KICAqXCcqKSBldmFs IHNldCB4ICIkQ09ORklHX0ZJTEVTIiA7Ow0KICAqKSAgIHNldCB4ICRDT05GSUdfRklMRVMgOzsN CiAgZXNhYw0KICBzaGlmdA0KICBmb3IgbWYNCiAgZG8NCiAgICAjIFN0cmlwIE1GIHNvIHdlIGVu ZCB1cCB3aXRoIHRoZSBuYW1lIG9mIHRoZSBmaWxlLg0KICAgIG1mPWBlY2hvICIkbWYiIHwgc2Vk IC1lICdzLzouKiQvLydgDQogICAgIyBDaGVjayB3aGV0aGVyIHRoaXMgaXMgYW4gQXV0b21ha2Ug Z2VuZXJhdGVkIE1ha2VmaWxlIG9yIG5vdC4NCiAgICAjIFdlIHVzZWQgdG8gbWF0Y2ggb25seSB0 aGUgZmlsZXMgbmFtZWQgYE1ha2VmaWxlLmluJywgYnV0DQogICAgIyBzb21lIHBlb3BsZSByZW5h bWUgdGhlbTsgc28gaW5zdGVhZCB3ZSBsb29rIGF0IHRoZSBmaWxlIGNvbnRlbnQuDQogICAgIyBH cmVwJ2luZyB0aGUgZmlyc3QgbGluZSBpcyBub3QgZW5vdWdoOiBzb21lIHBlb3BsZSBwb3N0LXBy b2Nlc3MNCiAgICAjIGVhY2ggTWFrZWZpbGUuaW4gYW5kIGFkZCBhIG5ldyBsaW5lIG9uIHRvcCBv ZiBlYWNoIGZpbGUgdG8gc2F5IHNvLg0KICAgICMgR3JlcCdpbmcgdGhlIHdob2xlIGZpbGUgaXMg bm90IGdvb2QgZWl0aGVyOiBBSVggZ3JlcCBoYXMgYSBsaW5lDQogICAgIyBsaW1pdCBvZiAyMDQ4 LCBidXQgYWxsIHNlZCdzIHdlIGtub3cgaGF2ZSB1bmRlcnN0YW5kIGF0IGxlYXN0IDQwMDAuDQog ICAgaWYgc2VkIC1uICdzLF4jLipnZW5lcmF0ZWQgYnkgYXV0b21ha2UuKixYLHAnICIkbWYiIHwg Z3JlcCBYID4vZGV2L251bGwgMj4mMTsgdGhlbg0KICAgICAgZGlycGFydD1gJGFzX2Rpcm5hbWUg LS0gIiRtZiIgfHwNCiRhc19leHByIFgiJG1mIiA6ICdYXCguKlteL11cKS8vKlteL11bXi9dKi8q JCcgXHwgXA0KCSBYIiRtZiIgOiAnWFwoLy9cKVteL10nIFx8IFwNCgkgWCIkbWYiIDogJ1hcKC8v XCkkJyBcfCBcDQoJIFgiJG1mIiA6ICdYXCgvXCknIFx8IC4gMj4vZGV2L251bGwgfHwNCiRhc19l Y2hvIFgiJG1mIiB8DQogICAgc2VkICcvXlhcKC4qW14vXVwpXC9cLypbXi9dW14vXSpcLyokL3sN CgkgICAgcy8vXDEvDQoJICAgIHENCgkgIH0NCgkgIC9eWFwoXC9cL1wpW14vXS4qL3sNCgkgICAg cy8vXDEvDQoJICAgIHENCgkgIH0NCgkgIC9eWFwoXC9cL1wpJC97DQoJICAgIHMvL1wxLw0KCSAg ICBxDQoJICB9DQoJICAvXlhcKFwvXCkuKi97DQoJICAgIHMvL1wxLw0KCSAgICBxDQoJICB9DQoJ ICBzLy4qLy4vOyBxJ2ANCiAgICBlbHNlDQogICAgICBjb250aW51ZQ0KICAgIGZpDQogICAgIyBF eHRyYWN0IHRoZSBkZWZpbml0aW9uIG9mIERFUERJUiwgYW1fX2luY2x1ZGUsIGFuZCBhbV9fcXVv dGUNCiAgICAjIGZyb20gdGhlIE1ha2VmaWxlIHdpdGhvdXQgcnVubmluZyBgbWFrZScuDQogICAg REVQRElSPWBzZWQgLW4gJ3MvXkRFUERJUiA9IC8vcCcgPCAiJG1mImANCiAgICB0ZXN0IC16ICIk REVQRElSIiAmJiBjb250aW51ZQ0KICAgIGFtX19pbmNsdWRlPWBzZWQgLW4gJ3MvXmFtX19pbmNs dWRlID0gLy9wJyA8ICIkbWYiYA0KICAgIHRlc3QgLXogImFtX19pbmNsdWRlIiAmJiBjb250aW51 ZQ0KICAgIGFtX19xdW90ZT1gc2VkIC1uICdzL15hbV9fcXVvdGUgPSAvL3AnIDwgIiRtZiJgDQog ICAgIyBXaGVuIHVzaW5nIGFuc2kya25yLCBVIG1heSBiZSBlbXB0eSBvciBhbiB1bmRlcnNjb3Jl OyBleHBhbmQgaXQNCiAgICBVPWBzZWQgLW4gJ3MvXlUgPSAvL3AnIDwgIiRtZiJgDQogICAgIyBG aW5kIGFsbCBkZXBlbmRlbmN5IG91dHB1dCBmaWxlcywgdGhleSBhcmUgaW5jbHVkZWQgZmlsZXMg d2l0aA0KICAgICMgJChERVBESVIpIGluIHRoZWlyIG5hbWVzLiAgV2UgaW52b2tlIHNlZCB0d2lj ZSBiZWNhdXNlIGl0IGlzIHRoZQ0KICAgICMgc2ltcGxlc3QgYXBwcm9hY2ggdG8gY2hhbmdpbmcg JChERVBESVIpIHRvIGl0cyBhY3R1YWwgdmFsdWUgaW4gdGhlDQogICAgIyBleHBhbnNpb24uDQog ICAgZm9yIGZpbGUgaW4gYHNlZCAtbiAiDQogICAgICBzL14kYW1fX2luY2x1ZGUgJGFtX19xdW90 ZVwoLiooREVQRElSKS4qXCkkYW1fX3F1b3RlIickL1wxL3AnIDwiJG1mIiB8IFwNCgkgc2VkIC1l ICdzL1wkKERFUERJUikvJyIkREVQRElSIicvZycgLWUgJ3MvXCRVLyciJFUiJy9nJ2A7IGRvDQog ICAgICAjIE1ha2Ugc3VyZSB0aGUgZGlyZWN0b3J5IGV4aXN0cy4NCiAgICAgIHRlc3QgLWYgIiRk aXJwYXJ0LyRmaWxlIiAmJiBjb250aW51ZQ0KICAgICAgZmRpcj1gJGFzX2Rpcm5hbWUgLS0gIiRm aWxlIiB8fA0KJGFzX2V4cHIgWCIkZmlsZSIgOiAnWFwoLipbXi9dXCkvLypbXi9dW14vXSovKiQn IFx8IFwNCgkgWCIkZmlsZSIgOiAnWFwoLy9cKVteL10nIFx8IFwNCgkgWCIkZmlsZSIgOiAnWFwo Ly9cKSQnIFx8IFwNCgkgWCIkZmlsZSIgOiAnWFwoL1wpJyBcfCAuIDI+L2Rldi9udWxsIHx8DQok YXNfZWNobyBYIiRmaWxlIiB8DQogICAgc2VkICcvXlhcKC4qW14vXVwpXC9cLypbXi9dW14vXSpc LyokL3sNCgkgICAgcy8vXDEvDQoJICAgIHENCgkgIH0NCgkgIC9eWFwoXC9cL1wpW14vXS4qL3sN CgkgICAgcy8vXDEvDQoJICAgIHENCgkgIH0NCgkgIC9eWFwoXC9cL1wpJC97DQoJICAgIHMvL1wx Lw0KCSAgICBxDQoJICB9DQoJICAvXlhcKFwvXCkuKi97DQoJICAgIHMvL1wxLw0KCSAgICBxDQoJ ICB9DQoJICBzLy4qLy4vOyBxJ2ANCiAgICAgIGFzX2Rpcj0kZGlycGFydC8kZmRpcjsgYXNfZm5f bWtkaXJfcA0KICAgICAgIyBlY2hvICJjcmVhdGluZyAkZGlycGFydC8kZmlsZSINCiAgICAgIGVj aG8gJyMgZHVtbXknID4gIiRkaXJwYXJ0LyRmaWxlIg0KICAgIGRvbmUNCiAgZG9uZQ0KfQ0KIDs7 DQogICAgInBvLWRpcmVjdG9yaWVzIjpDKQ0KICAgIGZvciBhY19maWxlIGluICRDT05GSUdfRklM RVM7IGRvDQogICAgICAjIFN1cHBvcnQgIm91dGZpbGVbOmluZmlsZVs6aW5maWxlLi4uXV0iDQog ICAgICBjYXNlICIkYWNfZmlsZSIgaW4NCiAgICAgICAgKjoqKSBhY19maWxlPWBlY2hvICIkYWNf ZmlsZSJ8c2VkICdzJTouKiUlJ2AgOzsNCiAgICAgIGVzYWMNCiAgICAgICMgUE8gZGlyZWN0b3Jp ZXMgaGF2ZSBhIE1ha2VmaWxlLmluIGdlbmVyYXRlZCBmcm9tIE1ha2VmaWxlLmluLmluLg0KICAg ICAgY2FzZSAiJGFjX2ZpbGUiIGluICovTWFrZWZpbGUuaW4pDQogICAgICAgICMgQWRqdXN0IGEg cmVsYXRpdmUgc3JjZGlyLg0KICAgICAgICBhY19kaXI9YGVjaG8gIiRhY19maWxlInxzZWQgJ3Ml L1teL11bXi9dKiQlJSdgDQogICAgICAgIGFjX2Rpcl9zdWZmaXg9Ii9gZWNobyAiJGFjX2RpciJ8 c2VkICdzJV5cLi8lJSdgIg0KICAgICAgICBhY19kb3RzPWBlY2hvICIkYWNfZGlyX3N1ZmZpeCJ8 c2VkICdzJS9bXi9dKiUuLi8lZydgDQogICAgICAgICMgSW4gYXV0b2NvbmYtMi4xMyBpdCBpcyBj YWxsZWQgJGFjX2dpdmVuX3NyY2Rpci4NCiAgICAgICAgIyBJbiBhdXRvY29uZi0yLjUwIGl0IGlz IGNhbGxlZCAkc3JjZGlyLg0KICAgICAgICB0ZXN0IC1uICIkYWNfZ2l2ZW5fc3JjZGlyIiB8fCBh Y19naXZlbl9zcmNkaXI9IiRzcmNkaXIiDQogICAgICAgIGNhc2UgIiRhY19naXZlbl9zcmNkaXIi IGluDQogICAgICAgICAgLikgIHRvcF9zcmNkaXI9YGVjaG8gJGFjX2RvdHN8c2VkICdzJS8kJSUn YCA7Ow0KICAgICAgICAgIC8qKSB0b3Bfc3JjZGlyPSIkYWNfZ2l2ZW5fc3JjZGlyIiA7Ow0KICAg ICAgICAgICopICB0b3Bfc3JjZGlyPSIkYWNfZG90cyRhY19naXZlbl9zcmNkaXIiIDs7DQogICAg ICAgIGVzYWMNCiAgICAgICAgIyBUcmVhdCBhIGRpcmVjdG9yeSBhcyBhIFBPIGRpcmVjdG9yeSBp ZiBhbmQgb25seSBpZiBpdCBoYXMgYQ0KICAgICAgICAjIFBPVEZJTEVTLmluIGZpbGUuIFRoaXMg YWxsb3dzIHBhY2thZ2VzIHRvIGhhdmUgbXVsdGlwbGUgUE8NCiAgICAgICAgIyBkaXJlY3Rvcmll cyB1bmRlciBkaWZmZXJlbnQgbmFtZXMgb3IgaW4gZGlmZmVyZW50IGxvY2F0aW9ucy4NCiAgICAg ICAgaWYgdGVzdCAtZiAiJGFjX2dpdmVuX3NyY2Rpci8kYWNfZGlyL1BPVEZJTEVTLmluIjsgdGhl bg0KICAgICAgICAgIHJtIC1mICIkYWNfZGlyL1BPVEZJTEVTIg0KICAgICAgICAgIHRlc3QgLW4g IiRhc19tZSIgJiYgZWNobyAiJGFzX21lOiBjcmVhdGluZyAkYWNfZGlyL1BPVEZJTEVTIiB8fCBl Y2hvICJjcmVhdGluZyAkYWNfZGlyL1BPVEZJTEVTIg0KICAgICAgICAgIGNhdCAiJGFjX2dpdmVu X3NyY2Rpci8kYWNfZGlyL1BPVEZJTEVTLmluIiB8IHNlZCAtZSAiL14jL2QiIC1lICIvXlsgCV0q XCQvZCIgLWUgInMsLiosICAgICAkdG9wX3NyY2Rpci8mIFxcXFwsIiB8IHNlZCAtZSAiXCRzL1wo LipcKSBcXFxcL1wxLyIgPiAiJGFjX2Rpci9QT1RGSUxFUyINCiAgICAgICAgICBQT01BS0VGSUxF REVQUz0iUE9URklMRVMuaW4iDQogICAgICAgICAgIyBBTExfTElOR1VBUywgUE9GSUxFUywgVVBE QVRFUE9GSUxFUywgRFVNTVlQT0ZJTEVTLCBHTU9GSUxFUyBkZXBlbmQNCiAgICAgICAgICAjIG9u ICRhY19kaXIgYnV0IGRvbid0IGRlcGVuZCBvbiB1c2VyLXNwZWNpZmllZCBjb25maWd1cmF0aW9u DQogICAgICAgICAgIyBwYXJhbWV0ZXJzLg0KICAgICAgICAgIGlmIHRlc3QgLWYgIiRhY19naXZl bl9zcmNkaXIvJGFjX2Rpci9MSU5HVUFTIjsgdGhlbg0KICAgICAgICAgICAgIyBUaGUgTElOR1VB UyBmaWxlIGNvbnRhaW5zIHRoZSBzZXQgb2YgYXZhaWxhYmxlIGxhbmd1YWdlcy4NCiAgICAgICAg ICAgIGlmIHRlc3QgLW4gIiRPQlNPTEVURV9BTExfTElOR1VBUyI7IHRoZW4NCiAgICAgICAgICAg ICAgdGVzdCAtbiAiJGFzX21lIiAmJiBlY2hvICIkYXNfbWU6IHNldHRpbmcgQUxMX0xJTkdVQVMg aW4gY29uZmlndXJlLmluIGlzIG9ic29sZXRlIiB8fCBlY2hvICJzZXR0aW5nIEFMTF9MSU5HVUFT IGluIGNvbmZpZ3VyZS5pbiBpcyBvYnNvbGV0ZSINCiAgICAgICAgICAgIGZpDQogICAgICAgICAg ICBBTExfTElOR1VBU189YHNlZCAtZSAiL14jL2QiIC1lICJzLyMuKi8vIiAiJGFjX2dpdmVuX3Ny Y2Rpci8kYWNfZGlyL0xJTkdVQVMiYA0KICAgICAgICAgICAgIyBIaWRlIHRoZSBBTExfTElOR1VB UyBhc3NpZ21lbnQgZnJvbSBhdXRvbWFrZSA8IDEuNS4NCiAgICAgICAgICAgIGV2YWwgJ0FMTF9M SU5HVUFTJyc9JEFMTF9MSU5HVUFTXycNCiAgICAgICAgICAgIFBPTUFLRUZJTEVERVBTPSIkUE9N QUtFRklMRURFUFMgTElOR1VBUyINCiAgICAgICAgICBlbHNlDQogICAgICAgICAgICAjIFRoZSBz ZXQgb2YgYXZhaWxhYmxlIGxhbmd1YWdlcyB3YXMgZ2l2ZW4gaW4gY29uZmlndXJlLmluLg0KICAg ICAgICAgICAgIyBIaWRlIHRoZSBBTExfTElOR1VBUyBhc3NpZ21lbnQgZnJvbSBhdXRvbWFrZSA8 IDEuNS4NCiAgICAgICAgICAgIGV2YWwgJ0FMTF9MSU5HVUFTJyc9JE9CU09MRVRFX0FMTF9MSU5H VUFTJw0KICAgICAgICAgIGZpDQogICAgICAgICAgIyBDb21wdXRlIFBPRklMRVMNCiAgICAgICAg ICAjIGFzICAgICAgJChmb3JlYWNoIGxhbmcsICQoQUxMX0xJTkdVQVMpLCAkKHNyY2RpcikvJChs YW5nKS5wbykNCiAgICAgICAgICAjIENvbXB1dGUgVVBEQVRFUE9GSUxFUw0KICAgICAgICAgICMg YXMgICAgICAkKGZvcmVhY2ggbGFuZywgJChBTExfTElOR1VBUyksICQobGFuZykucG8tdXBkYXRl KQ0KICAgICAgICAgICMgQ29tcHV0ZSBEVU1NWVBPRklMRVMNCiAgICAgICAgICAjIGFzICAgICAg JChmb3JlYWNoIGxhbmcsICQoQUxMX0xJTkdVQVMpLCAkKGxhbmcpLm5vcCkNCiAgICAgICAgICAj IENvbXB1dGUgR01PRklMRVMNCiAgICAgICAgICAjIGFzICAgICAgJChmb3JlYWNoIGxhbmcsICQo QUxMX0xJTkdVQVMpLCAkKHNyY2RpcikvJChsYW5nKS5nbW8pDQogICAgICAgICAgY2FzZSAiJGFj X2dpdmVuX3NyY2RpciIgaW4NCiAgICAgICAgICAgIC4pIHNyY2RpcnByZT0gOzsNCiAgICAgICAg ICAgICopIHNyY2RpcnByZT0nJChzcmNkaXIpLycgOzsNCiAgICAgICAgICBlc2FjDQogICAgICAg ICAgUE9GSUxFUz0NCiAgICAgICAgICBVUERBVEVQT0ZJTEVTPQ0KICAgICAgICAgIERVTU1ZUE9G SUxFUz0NCiAgICAgICAgICBHTU9GSUxFUz0NCiAgICAgICAgICBmb3IgbGFuZyBpbiAkQUxMX0xJ TkdVQVM7IGRvDQogICAgICAgICAgICBQT0ZJTEVTPSIkUE9GSUxFUyAkc3JjZGlycHJlJGxhbmcu cG8iDQogICAgICAgICAgICBVUERBVEVQT0ZJTEVTPSIkVVBEQVRFUE9GSUxFUyAkbGFuZy5wby11 cGRhdGUiDQogICAgICAgICAgICBEVU1NWVBPRklMRVM9IiREVU1NWVBPRklMRVMgJGxhbmcubm9w Ig0KICAgICAgICAgICAgR01PRklMRVM9IiRHTU9GSUxFUyAkc3JjZGlycHJlJGxhbmcuZ21vIg0K ICAgICAgICAgIGRvbmUNCiAgICAgICAgICAjIENBVEFMT0dTIGRlcGVuZHMgb24gYm90aCAkYWNf ZGlyIGFuZCB0aGUgdXNlcidzIExJTkdVQVMNCiAgICAgICAgICAjIGVudmlyb25tZW50IHZhcmlh YmxlLg0KICAgICAgICAgIElOU1RfTElOR1VBUz0NCiAgICAgICAgICBpZiB0ZXN0IC1uICIkQUxM X0xJTkdVQVMiOyB0aGVuDQogICAgICAgICAgICBmb3IgcHJlc2VudGxhbmcgaW4gJEFMTF9MSU5H VUFTOyBkbw0KICAgICAgICAgICAgICB1c2VpdD1ubw0KICAgICAgICAgICAgICBpZiB0ZXN0ICIl VU5TRVQlIiAhPSAiJExJTkdVQVMiOyB0aGVuDQogICAgICAgICAgICAgICAgZGVzaXJlZGxhbmd1 YWdlcz0iJExJTkdVQVMiDQogICAgICAgICAgICAgIGVsc2UNCiAgICAgICAgICAgICAgICBkZXNp cmVkbGFuZ3VhZ2VzPSIkQUxMX0xJTkdVQVMiDQogICAgICAgICAgICAgIGZpDQogICAgICAgICAg ICAgIGZvciBkZXNpcmVkbGFuZyBpbiAkZGVzaXJlZGxhbmd1YWdlczsgZG8NCiAgICAgICAgICAg ICAgICAjIFVzZSB0aGUgcHJlc2VudGxhbmcgY2F0YWxvZyBpZiBkZXNpcmVkbGFuZyBpcw0KICAg ICAgICAgICAgICAgICMgICBhLiBlcXVhbCB0byBwcmVzZW50bGFuZywgb3INCiAgICAgICAgICAg ICAgICAjICAgYi4gYSB2YXJpYW50IG9mIHByZXNlbnRsYW5nIChiZWNhdXNlIGluIHRoaXMgY2Fz ZSwNCiAgICAgICAgICAgICAgICAjICAgICAgcHJlc2VudGxhbmcgY2FuIGJlIHVzZWQgYXMgYSBm YWxsYmFjayBmb3IgbWVzc2FnZXMNCiAgICAgICAgICAgICAgICAjICAgICAgd2hpY2ggYXJlIG5v dCB0cmFuc2xhdGVkIGluIHRoZSBkZXNpcmVkbGFuZyBjYXRhbG9nKS4NCiAgICAgICAgICAgICAg ICBjYXNlICIkZGVzaXJlZGxhbmciIGluDQogICAgICAgICAgICAgICAgICAiJHByZXNlbnRsYW5n IiopIHVzZWl0PXllczs7DQogICAgICAgICAgICAgICAgZXNhYw0KICAgICAgICAgICAgICBkb25l DQogICAgICAgICAgICAgIGlmIHRlc3QgJHVzZWl0ID0geWVzOyB0aGVuDQogICAgICAgICAgICAg ICAgSU5TVF9MSU5HVUFTPSIkSU5TVF9MSU5HVUFTICRwcmVzZW50bGFuZyINCiAgICAgICAgICAg ICAgZmkNCiAgICAgICAgICAgIGRvbmUNCiAgICAgICAgICBmaQ0KICAgICAgICAgIENBVEFMT0dT PQ0KICAgICAgICAgIGlmIHRlc3QgLW4gIiRJTlNUX0xJTkdVQVMiOyB0aGVuDQogICAgICAgICAg ICBmb3IgbGFuZyBpbiAkSU5TVF9MSU5HVUFTOyBkbw0KICAgICAgICAgICAgICBDQVRBTE9HUz0i JENBVEFMT0dTICRsYW5nLmdtbyINCiAgICAgICAgICAgIGRvbmUNCiAgICAgICAgICBmaQ0KICAg ICAgICAgIHRlc3QgLW4gIiRhc19tZSIgJiYgZWNobyAiJGFzX21lOiBjcmVhdGluZyAkYWNfZGly L01ha2VmaWxlIiB8fCBlY2hvICJjcmVhdGluZyAkYWNfZGlyL01ha2VmaWxlIg0KICAgICAgICAg IHNlZCAtZSAiL15QT1RGSUxFUyA9L3IgJGFjX2Rpci9QT1RGSUxFUyIgLWUgIi9eIyBNYWtldmFy cy9yICRhY19naXZlbl9zcmNkaXIvJGFjX2Rpci9NYWtldmFycyIgLWUgInN8QFBPRklMRVNAfCRQ T0ZJTEVTfGciIC1lICJzfEBVUERBVEVQT0ZJTEVTQHwkVVBEQVRFUE9GSUxFU3xnIiAtZSAic3xA RFVNTVlQT0ZJTEVTQHwkRFVNTVlQT0ZJTEVTfGciIC1lICJzfEBHTU9GSUxFU0B8JEdNT0ZJTEVT fGciIC1lICJzfEBDQVRBTE9HU0B8JENBVEFMT0dTfGciIC1lICJzfEBQT01BS0VGSUxFREVQU0B8 JFBPTUFLRUZJTEVERVBTfGciICIkYWNfZGlyL01ha2VmaWxlLmluIiA+ICIkYWNfZGlyL01ha2Vm aWxlIg0KICAgICAgICAgIGZvciBmIGluICIkYWNfZ2l2ZW5fc3JjZGlyLyRhY19kaXIiL1J1bGVz LSo7IGRvDQogICAgICAgICAgICBpZiB0ZXN0IC1mICIkZiI7IHRoZW4NCiAgICAgICAgICAgICAg Y2FzZSAiJGYiIGluDQogICAgICAgICAgICAgICAgKi5vcmlnIHwgKi5iYWsgfCAqfikgOzsNCiAg ICAgICAgICAgICAgICAqKSBjYXQgIiRmIiA+PiAiJGFjX2Rpci9NYWtlZmlsZSIgOzsNCiAgICAg ICAgICAgICAgZXNhYw0KICAgICAgICAgICAgZmkNCiAgICAgICAgICBkb25lDQogICAgICAgIGZp DQogICAgICAgIDs7DQogICAgICBlc2FjDQogICAgZG9uZSA7Ow0KDQogIGVzYWMNCmRvbmUgIyBm b3IgYWNfdGFnDQoNCg0KYXNfZm5fZXhpdCAwDQpfQUNFT0YNCmFjX2NsZWFuX2ZpbGVzPSRhY19j bGVhbl9maWxlc19zYXZlDQoNCnRlc3QgJGFjX3dyaXRlX2ZhaWwgPSAwIHx8DQogIGFzX2ZuX2Vy cm9yICQ/ICJ3cml0ZSBmYWlsdXJlIGNyZWF0aW5nICRDT05GSUdfU1RBVFVTIiAiJExJTkVOTyIg NQ0KDQoNCiMgY29uZmlndXJlIGlzIHdyaXRpbmcgdG8gY29uZmlnLmxvZywgYW5kIHRoZW4gY2Fs bHMgY29uZmlnLnN0YXR1cy4NCiMgY29uZmlnLnN0YXR1cyBkb2VzIGl0cyBvd24gcmVkaXJlY3Rp b24sIGFwcGVuZGluZyB0byBjb25maWcubG9nLg0KIyBVbmZvcnR1bmF0ZWx5LCBvbiBET1MgdGhp cyBmYWlscywgYXMgY29uZmlnLmxvZyBpcyBzdGlsbCBrZXB0IG9wZW4NCiMgYnkgY29uZmlndXJl LCBzbyBjb25maWcuc3RhdHVzIHdvbid0IGJlIGFibGUgdG8gd3JpdGUgdG8gaXQ7IGl0cw0KIyBv dXRwdXQgaXMgc2ltcGx5IGRpc2NhcmRlZC4gIFNvIHdlIGV4ZWMgdGhlIEZEIHRvIC9kZXYvbnVs bCwNCiMgZWZmZWN0aXZlbHkgY2xvc2luZyBjb25maWcubG9nLCBzbyBpdCBjYW4gYmUgcHJvcGVy bHkgKHJlKW9wZW5lZCBhbmQNCiMgYXBwZW5kZWQgdG8gYnkgY29uZmlnLnN0YXR1cy4gIFdoZW4g Y29taW5nIGJhY2sgdG8gY29uZmlndXJlLCB3ZQ0KIyBuZWVkIHRvIG1ha2UgdGhlIEZEIGF2YWls YWJsZSBhZ2Fpbi4NCmlmIHRlc3QgIiRub19jcmVhdGUiICE9IHllczsgdGhlbg0KICBhY19jc19z dWNjZXNzPToNCiAgYWNfY29uZmlnX3N0YXR1c19hcmdzPQ0KICB0ZXN0ICIkc2lsZW50IiA9IHll cyAmJg0KICAgIGFjX2NvbmZpZ19zdGF0dXNfYXJncz0iJGFjX2NvbmZpZ19zdGF0dXNfYXJncyAt LXF1aWV0Ig0KICBleGVjIDU+L2Rldi9udWxsDQogICRTSEVMTCAkQ09ORklHX1NUQVRVUyAkYWNf Y29uZmlnX3N0YXR1c19hcmdzIHx8IGFjX2NzX3N1Y2Nlc3M9ZmFsc2UNCiAgZXhlYyA1Pj5jb25m aWcubG9nDQogICMgVXNlIHx8LCBub3QgJiYsIHRvIGF2b2lkIGV4aXRpbmcgZnJvbSB0aGUgaWYg d2l0aCAkPyA9IDEsIHdoaWNoDQogICMgd291bGQgbWFrZSBjb25maWd1cmUgZmFpbCBpZiB0aGlz IGlzIHRoZSBsYXN0IGluc3RydWN0aW9uLg0KICAkYWNfY3Nfc3VjY2VzcyB8fCBhc19mbl9leGl0 IDENCmZpDQppZiB0ZXN0IC1uICIkYWNfdW5yZWNvZ25pemVkX29wdHMiICYmIHRlc3QgIiRlbmFi bGVfb3B0aW9uX2NoZWNraW5nIiAhPSBubzsgdGhlbg0KICB7ICRhc19lY2hvICIkYXNfbWU6JHth c19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6IHVucmVjb2duaXplZCBvcHRpb25zOiAkYWNfdW5y ZWNvZ25pemVkX29wdHMiID4mNQ0KJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogdW5yZWNvZ25p emVkIG9wdGlvbnM6ICRhY191bnJlY29nbml6ZWRfb3B0cyIgPiYyO30NCmZpDQoNCg== --0016e65b4b8a30741204aef23131-- From unknown Sun Jun 15 08:24:10 2025 X-Loop: help-debbugs@gnu.org Subject: bug#9715: Error while compiling coreutils-8.12 Resent-From: Paul Eggert Original-Sender: debbugs-submit-bounces@debbugs.gnu.org Resent-CC: bug-coreutils@gnu.org Resent-Date: Mon, 10 Oct 2011 17:45:01 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 9715 X-GNU-PR-Package: coreutils X-GNU-PR-Keywords: To: basavaraj b Cc: 9715@debbugs.gnu.org Received: via spool by 9715-submit@debbugs.gnu.org id=B9715.13182686981573 (code B ref 9715); Mon, 10 Oct 2011 17:45:01 +0000 Received: (at 9715) by debbugs.gnu.org; 10 Oct 2011 17:44:58 +0000 Received: from localhost ([127.0.0.1] helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.69) (envelope-from ) id 1RDJuM-0000PK-1k for submit@debbugs.gnu.org; Mon, 10 Oct 2011 13:44:58 -0400 Received: from smtp.cs.ucla.edu ([131.179.128.62]) by debbugs.gnu.org with esmtp (Exim 4.69) (envelope-from ) id 1RDJuI-0000P4-M5 for 9715@debbugs.gnu.org; Mon, 10 Oct 2011 13:44:56 -0400 Received: from localhost (localhost.localdomain [127.0.0.1]) by smtp.cs.ucla.edu (Postfix) with ESMTP id 24B3CA60251; Mon, 10 Oct 2011 10:44:36 -0700 (PDT) X-Virus-Scanned: amavisd-new at smtp.cs.ucla.edu Received: from smtp.cs.ucla.edu ([127.0.0.1]) by localhost (smtp.cs.ucla.edu [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id MqF1rpCuNUB8; Mon, 10 Oct 2011 10:44:35 -0700 (PDT) Received: from [131.179.64.200] (Penguin.CS.UCLA.EDU [131.179.64.200]) by smtp.cs.ucla.edu (Postfix) with ESMTPSA id 6385DA60031; Mon, 10 Oct 2011 10:44:35 -0700 (PDT) Message-ID: <4E932F03.501@cs.ucla.edu> Date: Mon, 10 Oct 2011 10:44:35 -0700 From: Paul Eggert Organization: UCLA Computer Science Department User-Agent: Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.2.23) Gecko/20110928 Fedora/3.1.15-1.fc14 Thunderbird/3.1.15 MIME-Version: 1.0 References: In-Reply-To: Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Spam-Score: -3.1 (---) X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.11 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: debbugs-submit-bounces@debbugs.gnu.org Errors-To: debbugs-submit-bounces@debbugs.gnu.org X-Spam-Score: -3.1 (---) Thanks for the bug report. >From the 'configure' file you sent, it appears that you're using a modified version of coreutils, along with some other files (e.g., ) that aren't part of the coreutils distribution. The "configure" file is generated automatically, so if it's not working for you, we need to fix the source code for "configure" rather than patching it by hand. The source code can be found in "configure.in" as well as in the m4/*.m4 files. Also, if any other source code is needed to build coreutils, we'd need that. I expect that this would include (which declares alloca and floss_getmntent) and perhaps the code for floss_getmntent. It puzzles me that any of these changes are needed, as I thought that coreutils already ran on Tandem. Perhaps Tandem has changed? or it's an issue of which compiler or library is being used? One other thing: it's better to use the latest version of coreutils (currently this is 8.13). Sometimes this fixes your problem without any further effort on your part; and even when it doesn't, any patches are easier to merge in. From debbugs-submit-bounces@debbugs.gnu.org Fri Oct 14 15:36:37 2011 Received: (at control) by debbugs.gnu.org; 14 Oct 2011 19:36:37 +0000 Received: from localhost ([127.0.0.1] helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.69) (envelope-from ) id 1REnYa-00012y-QL for submit@debbugs.gnu.org; Fri, 14 Oct 2011 15:36:37 -0400 Received: from mx.meyering.net ([88.168.87.75]) by debbugs.gnu.org with esmtp (Exim 4.69) (envelope-from ) id 1REnYY-00012n-Ps for control@debbugs.gnu.org; Fri, 14 Oct 2011 15:36:35 -0400 Received: from rho.meyering.net (localhost.localdomain [127.0.0.1]) by rho.meyering.net (Acme Bit-Twister) with ESMTP id 87C19616FB for ; Fri, 14 Oct 2011 21:35:57 +0200 (CEST) From: Jim Meyering To: control@debbugs.gnu.org Subject: Re: bug#9715: Error while compiling coreutils-8.12 In-Reply-To: <4E932F03.501@cs.ucla.edu> (Paul Eggert's message of "Mon, 10 Oct 2011 10:44:35 -0700") References: <4E932F03.501@cs.ucla.edu> Date: Fri, 14 Oct 2011 21:35:57 +0200 Message-ID: <874nzbmkma.fsf@rho.meyering.net> Lines: 3 MIME-Version: 1.0 Content-Type: text/plain X-Spam-Score: -2.9 (--) X-Debbugs-Envelope-To: control X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.11 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: debbugs-submit-bounces@debbugs.gnu.org Errors-To: debbugs-submit-bounces@debbugs.gnu.org X-Spam-Score: -2.9 (--) retitle 9715 coreutils-8.12/tandem build failure, with local patches tags 9715 + moreinfo thanks From unknown Sun Jun 15 08:24:10 2025 X-Loop: help-debbugs@gnu.org Subject: bug#9715: Error while compiling coreutils-8.12 Resent-From: Assaf Gordon Original-Sender: "Debbugs-submit" Resent-CC: bug-coreutils@gnu.org Resent-Date: Tue, 23 Oct 2018 03:14:01 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 9715 X-GNU-PR-Package: coreutils X-GNU-PR-Keywords: moreinfo Cc: 9715@debbugs.gnu.org Received: via spool by 9715-submit@debbugs.gnu.org id=B9715.154026443031448 (code B ref 9715); Tue, 23 Oct 2018 03:14:01 +0000 Received: (at 9715) by debbugs.gnu.org; 23 Oct 2018 03:13:50 +0000 Received: from localhost ([127.0.0.1]:36914 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1gEn8f-0008B4-Rq for submit@debbugs.gnu.org; Mon, 22 Oct 2018 23:13:50 -0400 Received: from mail-pf1-f177.google.com ([209.85.210.177]:37800) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1gEn8e-0008Am-16; Mon, 22 Oct 2018 23:13:48 -0400 Received: by mail-pf1-f177.google.com with SMTP id j23-v6so20924959pfi.4; Mon, 22 Oct 2018 20:13:48 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=subject:cc:references:from:message-id:date:user-agent:mime-version :in-reply-to:content-language:content-transfer-encoding; bh=YGoXIrv5jR821S8d85Ggl35owepNHvkQBnHFOF9XA/0=; b=nQAZhQmFUsZjRZVXi+aUO3GyKQ3rA3z9Fhp2DgTQwhCPCLNY22CUCn7JjoZkgypRSI oda8+gQzGXTgS9cFFw+zCeEoovnlHZW+ARDupXwf20g4zfU8udlZGqXImcg9okEH/65S Dbpab7xcmWTK8p7RVAldnQUjhsIb4XTQt3SubO7V2Mvsu9nR+dikTm7RD/y2eXxSK7X0 Zuvv9Dm+z76ttA7j/HKaOuneTJanjLv33k8DGerQWLGG1ZzBaFCnXr+toh3sQcgjZlCP 7WihFBM6CZ9T/9nI8CcMA6EtMHMHGP1mgsRxs4awqFBZZ3aPxeDF5xkSFYTN0GdM3cet xmIg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:subject:cc:references:from:message-id:date :user-agent:mime-version:in-reply-to:content-language :content-transfer-encoding; bh=YGoXIrv5jR821S8d85Ggl35owepNHvkQBnHFOF9XA/0=; b=HyOTTALbxaDxHj+6nCE7LblXj55PJMtibsSag4EAiuixb2wTk4Nz8q4fQq4xkvb836 +nm/B8jVA0aPodpVbdufBToAcUiViHK20P7syRQosbYaMl/L1nnzghfYh0RBngu6AQ4r jDF6Uoz/zJPkdgV5ISjQgCMXg9M8ufhiY2y5DlRih1Xipq9JTqSmIFXShqP2Mt1GvYPw ncLsWJMoY9zlAWLOjBXir9AmGwByIHp3Zc1jmmOetJNAu/OvzFTtkkM5/3Pq1d+SuTPn vYUuWJfScdtcioLhDyj0ZFu8l43cj5xgnT8AQGs2RrlHFmexeezzOsCGRURahj6QLiXP q25w== X-Gm-Message-State: AGRZ1gIS/hr1bI+KuTwUrLikibeo5h74EfuKfPi9eovXbFXGW2x6LsyS Tgg2hFare5QGZaNN10St5DuXc+GPryc= X-Google-Smtp-Source: AJdET5dJ/FTOggkppm48CAM12R6X5OZoQw9LjznpWkU1iYzYLbU8RBz81lI94zLa0orS50Lsy5Jp9Q== X-Received: by 2002:a63:d905:: with SMTP id r5-v6mr8576409pgg.314.1540264421324; Mon, 22 Oct 2018 20:13:41 -0700 (PDT) Received: from tomato.housegordon.com (moose.housegordon.com. [184.68.105.38]) by smtp.googlemail.com with ESMTPSA id s184-v6sm56160pfb.46.2018.10.22.20.13.39 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Mon, 22 Oct 2018 20:13:40 -0700 (PDT) References: <4E932F03.501@cs.ucla.edu> From: Assaf Gordon Message-ID: Date: Mon, 22 Oct 2018 21:13:38 -0600 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Thunderbird/52.9.1 MIME-Version: 1.0 In-Reply-To: <4E932F03.501@cs.ucla.edu> Content-Type: text/plain; charset=utf-8; format=flowed Content-Language: en-US Content-Transfer-Encoding: 7bit X-Spam-Score: 1.2 (+) X-Spam-Report: Spam detection software, running on the system "debbugs.gnu.org", has NOT identified this incoming email as spam. The original message has been attached to this so you can view it or label similar future email. If you have any questions, see the administrator of that system for details. Content preview: close 9715 stop (triaging old bugs) On 10/10/11 11:44 AM, Paul Eggert wrote: > Thanks for the bug report. > > From the 'configure' file you sent, it appears that you're > using a modified version of coreutils, along with some other > files (e.g., ) that aren't part of the coreutils > distribution. > [...] > One other thing: it's better to use the latest version of > coreutils (currently this is 8.13). Sometimes this fixes > your problem without any further effort on your part; and > even when it doesn't, any patches are easier to merge in. > [...] Content analysis details: (1.2 points, 10.0 required) pts rule name description ---- ---------------------- -------------------------------------------------- -0.0 RCVD_IN_DNSWL_NONE RBL: Sender listed at http://www.dnswl.org/, no trust [209.85.210.177 listed in list.dnswl.org] -0.0 SPF_PASS SPF: sender matches SPF record 0.0 FREEMAIL_FROM Sender email is commonly abused enduser mail provider (assafgordon[at]gmail.com) 1.2 MISSING_HEADERS Missing To: header 0.0 RCVD_IN_MSPIKE_H3 RBL: Good reputation (+3) [209.85.210.177 listed in wl.mailspike.net] 0.0 RCVD_IN_MSPIKE_WL Mailspike good senders X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: 0.2 (/) close 9715 stop (triaging old bugs) On 10/10/11 11:44 AM, Paul Eggert wrote: > Thanks for the bug report. > > From the 'configure' file you sent, it appears that you're > using a modified version of coreutils, along with some other > files (e.g., ) that aren't part of the coreutils > distribution. > [...] > One other thing: it's better to use the latest version of > coreutils (currently this is 8.13). Sometimes this fixes > your problem without any further effort on your part; and > even when it doesn't, any patches are easier to merge in. > With no further follow-ups in 7 years, I'm closing this bug. -assaf