From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.org!.POSTED!not-for-mail From: Rubey Martin Newsgroups: gmane.emacs.bugs Subject: bug#24754: problems with footnotes and a bug with links in emacs info Date: Fri, 21 Oct 2016 06:42:23 +0000 Message-ID: <99fa22144e664e0884aaef96c6e81e94@mbx13b.intern.tuwien.ac.at> References: , <83funrt463.fsf@gnu.org> <5eae4209ab1e4e8d8e716453c00b5d22@mbx13b.intern.tuwien.ac.at>, <83a8dyu8yk.fsf@gnu.org>, <6849fd8187dc4d119fdb2b6f4fbdc0b4@mbx13b.intern.tuwien.ac.at> NNTP-Posting-Host: blaine.gmane.org Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="_002_99fa22144e664e0884aaef96c6e81e94mbx13binterntuwienacat_" X-Trace: blaine.gmane.org 1477064188 30695 195.159.176.226 (21 Oct 2016 15:36:28 GMT) X-Complaints-To: usenet@blaine.gmane.org NNTP-Posting-Date: Fri, 21 Oct 2016 15:36:28 +0000 (UTC) To: 24754@debbugs.gnu.org Original-X-From: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane.org@gnu.org Fri Oct 21 17:36:15 2016 Return-path: Envelope-to: geb-bug-gnu-emacs@m.gmane.org Original-Received: from lists.gnu.org ([208.118.235.17]) by blaine.gmane.org with esmtp (Exim 4.84_2) (envelope-from ) id 1bxbrE-00030q-Ju for geb-bug-gnu-emacs@m.gmane.org; Fri, 21 Oct 2016 17:35:45 +0200 Original-Received: from localhost ([::1]:33038 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1bxbrG-00087m-TL for geb-bug-gnu-emacs@m.gmane.org; Fri, 21 Oct 2016 11:35:46 -0400 Original-Received: from eggs.gnu.org ([2001:4830:134:3::10]:52163) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1bxbqp-0007xM-6f for bug-gnu-emacs@gnu.org; Fri, 21 Oct 2016 11:35:35 -0400 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1bxbqZ-0005Eo-3w for bug-gnu-emacs@gnu.org; Fri, 21 Oct 2016 11:35:19 -0400 Original-Received: from debbugs.gnu.org ([208.118.235.43]:57945) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1bxbqY-0005Ed-O9 for bug-gnu-emacs@gnu.org; Fri, 21 Oct 2016 11:35:03 -0400 Original-Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.84_2) (envelope-from ) id 1bxbqY-0006lW-DZ for bug-gnu-emacs@gnu.org; Fri, 21 Oct 2016 11:35:02 -0400 X-Loop: help-debbugs@gnu.org Resent-From: Rubey Martin Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Fri, 21 Oct 2016 15:35:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: report 24754 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: X-Debbugs-Original-To: "bug-gnu-emacs@gnu.org" Original-Received: via spool by submit@debbugs.gnu.org id=B.147706409225981 (code B ref -1); Fri, 21 Oct 2016 15:35:02 +0000 Original-Received: (at submit) by debbugs.gnu.org; 21 Oct 2016 15:34:52 +0000 Original-Received: from localhost ([127.0.0.1]:45112 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1bxbqO-0006kz-53 for submit@debbugs.gnu.org; Fri, 21 Oct 2016 11:34:52 -0400 Original-Received: from eggs.gnu.org ([208.118.235.92]:55177) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1bxU1G-0006E8-Fi for submit@debbugs.gnu.org; Fri, 21 Oct 2016 03:13:34 -0400 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1bxU0u-0000SL-MH for submit@debbugs.gnu.org; Fri, 21 Oct 2016 03:13:29 -0400 Original-Received: from lists.gnu.org ([2001:4830:134:3::11]:35850) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1bxU0u-0000SC-Fq for submit@debbugs.gnu.org; Fri, 21 Oct 2016 03:13:12 -0400 Original-Received: from eggs.gnu.org ([2001:4830:134:3::10]:46070) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1bxU0c-00018D-VD for bug-gnu-emacs@gnu.org; Fri, 21 Oct 2016 03:13:12 -0400 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1bxU0J-0000Ab-2l for bug-gnu-emacs@gnu.org; Fri, 21 Oct 2016 03:12:54 -0400 Original-Received: from edge13a.intern.tuwien.ac.at ([128.130.30.66]:49081) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1bxU0H-00008Z-Vj for bug-gnu-emacs@gnu.org; Fri, 21 Oct 2016 03:12:34 -0400 Original-Received: from mbx13d.intern.tuwien.ac.at (2001:629:1005:30::64) by edge13a.intern.tuwien.ac.at (2001:629:1005:30::66) with Microsoft SMTP Server (TLS) id 15.0.1178.4; Fri, 21 Oct 2016 08:42:24 +0200 Original-Received: from mbx13b.intern.tuwien.ac.at (2001:629:1005:30::62) by mbx13d.intern.tuwien.ac.at (2001:629:1005:30::64) with Microsoft SMTP Server (TLS) id 15.0.1178.4; Fri, 21 Oct 2016 08:42:24 +0200 Original-Received: from mbx13b.intern.tuwien.ac.at ([fe80::f0e9:7c2:196e:5846]) by mbx13b.intern.tuwien.ac.at ([fe80::f0e9:7c2:196e:5846%20]) with mapi id 15.00.1178.000; Fri, 21 Oct 2016 08:42:24 +0200 Thread-Topic: problems with footnotes and a bug with links in emacs info Thread-Index: AQHSK2ZHfgg4er7TrEWj6TJO7qPF7Q== In-Reply-To: <6849fd8187dc4d119fdb2b6f4fbdc0b4@mbx13b.intern.tuwien.ac.at> Accept-Language: de-AT, en-US Content-Language: de-AT X-MS-Has-Attach: yes X-MS-TNEF-Correlator: x-ms-exchange-transport-fromentityheader: Hosted x-originating-ip: [128.130.30.11] X-detected-operating-system: by eggs.gnu.org: Windows 7 or 8 [fuzzy] X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.6.x X-Mailman-Approved-At: Fri, 21 Oct 2016 11:34:51 -0400 X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] X-Received-From: 208.118.235.43 X-BeenThere: bug-gnu-emacs@gnu.org List-Id: "Bug reports for GNU Emacs, the Swiss army knife of text editors" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane.org@gnu.org Original-Sender: "bug-gnu-emacs" Xref: news.gmane.org gmane.emacs.bugs:124778 Archived-At: --_002_99fa22144e664e0884aaef96c6e81e94mbx13binterntuwienacat_ Content-Type: text/plain; charset="Windows-1252" Content-Transfer-Encoding: quoted-printable (a previous version of this bug report was sent to bug-texinfo, but it turn= s out to be a bug in emacs, not in info...) Dear all, I have two problems with info in emacs. Find attached a .texi file that ex= hibits both. Note that none of the two problems exists in the standalone i= nfo reader! After compiling this file with makeinfo, and viewing it in emacs with "C-u = C-h i filename", please do the following: 1.) problem with footnotes: select the fourth menu node The On-Line Encyclopedia of Integer Sequences (OEIS) right at the beginning you will see =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D AUTHORS: - Thierry Monteil (2012-02-10 =96 2013-06-21): initial version. - Vincent Delecroix (2014): modifies continued fractions because of trac ticket #14567(1) - Moritz Firsching (2016): modifies handling of dead sequence, see trac ticket #17330(2) =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D and both (2014) and (2016) are interpreted by emacs-info as links. I learned that this is actually mandated by the specification, but I think = it would be important to be able to switch off footnote links, or, even bet= ter, improve them such that makeinfo either escapes non-footnote occurrence= s of "(12345)", or uses a less easily confused markup. Note that in this project (sagemath, a large gpl computer algebra system) n= on-footnote occurrences of (1), (2) and (3) are very very frequent, but foo= tnotes are used, too. Therefore, navigating to footnote (1) and clicking o= n it will send you anywhere. 2.) A bug with links. Go back to top, and then visit the node FindStat - the Combinatorial Statistic Finder you should see in line 29 the link To access the database, use *note findstat: 7a.: but clicking on it does not send me to the line beginning with Class sage.databases.findstat.FindStat but a little below. This problem is much worse in other, larger examples. I tested both problems on two versions of makeinfo and emacs, without notic= ing any difference. The later version is martin@convex63:~/sage-master/local/share/doc/sage/texinfo/en/reference/com= binat$ makeinfo --version texi2any (GNU texinfo) 6.1 Copyright (C) 2016 Free Software Foundation, Inc. License GPLv3+: GNU GPL version 3 or later This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law. martin@convex63:~/sage-master/local/share/doc/sage/texinfo/en/reference/com= binat$ emacs --version GNU Emacs 24.5.1 Copyright (C) 2015 Free Software Foundation, Inc. GNU Emacs comes with ABSOLUTELY NO WARRANTY. You may redistribute copies of Emacs under the terms of the GNU General Public License. For more information about these matters, see the file named COPYING. In any case, thanks for looking into this! Martin --_002_99fa22144e664e0884aaef96c6e81e94mbx13binterntuwienacat_ Content-Type: text/x-texinfo; name="sagereferencemanualdatabases.texi" Content-Description: sagereferencemanualdatabases.texi Content-Disposition: attachment; filename="sagereferencemanualdatabases.texi"; size=182698; creation-date="Thu, 20 Oct 2016 19:59:40 GMT"; modification-date="Thu, 20 Oct 2016 20:10:40 GMT" Content-Transfer-Encoding: base64 XGlucHV0IHRleGluZm8gICBAYyAtKi10ZXhpbmZvLSotCkBjICUqKnN0YXJ0IG9mIGhlYWRlcgpA c2V0ZmlsZW5hbWUgc2FnZXJlZmVyZW5jZW1hbnVhbGRhdGFiYXNlcy5pbmZvCkBkb2N1bWVudGVu Y29kaW5nIFVURi04CkBpZmluZm8KQCpHZW5lcmF0ZWQgYnkgU3BoaW54IDEuNC40LkAqCkBlbmQg aWZpbmZvCkBzZXR0aXRsZSBTYWdlIFJlZmVyZW5jZSBNYW51YWwgRGF0YWJhc2VzCkBkZWZpbmRl eCBnZQpAcGFyYWdyYXBoaW5kZW50IDAKQGV4YW1wbGVpbmRlbnQgNApAZmluYWxvdXQKQGRpcmNh dGVnb3J5IFB5dGhvbgpAZGlyZW50cnkKKiBTYWdlUmVmZXJlbmNlTWFudWFsRGF0YWJhc2VzOiAo c2FnZXJlZmVyZW5jZW1hbnVhbGRhdGFiYXNlcy5pbmZvKS4gVGhlIFNhZ2VSZWZlcmVuY2VNYW51 YWxEYXRhYmFzZXMgcmVmZXJlbmNlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFu dWFsLgpAZW5kIGRpcmVudHJ5CgpAZGVmaW5mb2VuY2xvc2Ugc3Ryb25nLGAsJwpAZGVmaW5mb2Vu Y2xvc2UgZW1waCxgLCcKQGMgJSoqZW5kIG9mIGhlYWRlcgoKQGNvcHlpbmcKQHF1b3RhdGlvbgpT YWdlIFJlZmVyZW5jZSBNYW51YWw6IERhdGFiYXNlcyA3LjQsIE9jdCAyMCwgMjAxNgoKCgpDb3B5 cmlnaHQgQGNvcHlyaWdodHt9IDIwMDUtLTIwMTYsIFRoZSBTYWdlIERldmVsb3BtZW50IFRlYW0K QGVuZCBxdW90YXRpb24KCkBlbmQgY29weWluZwoKQHRpdGxlcGFnZQpAdGl0bGUgU2FnZSBSZWZl cmVuY2UgTWFudWFsIERhdGFiYXNlcwpAaW5zZXJ0Y29weWluZwpAZW5kIHRpdGxlcGFnZQpAY29u dGVudHMKCkBjICUqKiBzdGFydCBvZiB1c2VyIHByZWFtYmxlCgpAYyAlKiogZW5kIG9mIHVzZXIg cHJlYW1ibGUKCkBpZm5vdHRleApAbm9kZSBUb3AKQHRvcCBTYWdlIFJlZmVyZW5jZSBNYW51YWwg RGF0YWJhc2VzCkBpbnNlcnRjb3B5aW5nCkBlbmQgaWZub3R0ZXgKCkBjICUqKnN0YXJ0IG9mIGJv ZHkKQGFuY2hvcntpbmRleCBkb2N9QGFuY2hvcntjfQpUaGVyZSBhcmUgbnVtZXJvdXMgc3BlY2lm aWMgbWF0aGVtYXRpY2FsIGRhdGFiYXNlcyBlaXRoZXIgaW5jbHVkZWQKaW4gU2FnZSBvciBhdmFp bGFibGUgYXMgb3B0aW9uYWwgcGFja2FnZXMuIEFsc28sIFNhZ2UgaW5jbHVkZXMgdHdvCnBvd2Vy ZnVsIGdlbmVyYWwgZGF0YWJhc2UgcGFja2FnZXMuCgpTYWdlIGluY2x1ZGVzIHRoZSBaT1BFIG9i amVjdCBvcmllbnRlZCBkYXRhYmFzZSBaT0RCLCB3aGljaAoiaXMgYSBQeXRob24gb2JqZWN0IHBl cnNpc3RlbmNlIHN5c3RlbS4gSXQgcHJvdmlkZXMgdHJhbnNwYXJlbnQgb2JqZWN0LW9yaWVudGVk IHBlcnNpc3RlbmN5LiIKClNhZ2UgYWxzbyBpbmNsdWRlcyB0aGUgcG93ZXJmdWwgcmVsYXRpb25h bCBkYXRhYmFzZSBTUUxpdGUsIGFsb25nCndpdGggYSBQeXRob24gaW50ZXJmYWNlIHRvIFNRTGl0 ZS4gU1FsaXRlIGlzIGEgc21hbGwgQyBsaWJyYXJ5IHRoYXQKaW1wbGVtZW50cyBhIHNlbGYtY29u dGFpbmVkLCBlbWJlZGRhYmxlLCB6ZXJvLWNvbmZpZ3VyYXRpb24gU1FMCmRhdGFiYXNlIGVuZ2lu ZS4KCgpAaXRlbWl6ZSAtCgpAaXRlbSAKVHJhbnNhY3Rpb25zIGFyZSBhdG9taWMsIGNvbnNpc3Rl bnQsIGlzb2xhdGVkLCBhbmQgZHVyYWJsZQooQUNJRCkgZXZlbiBhZnRlciBzeXN0ZW0gY3Jhc2hl cyBhbmQgcG93ZXIgZmFpbHVyZXMuCgpAaXRlbSAKWmVyby1jb25maWd1cmF0aW9uIC0gbm8gc2V0 dXAgb3IgYWRtaW5pc3RyYXRpb24gbmVlZGVkLgoKQGl0ZW0gCkltcGxlbWVudHMgbW9zdCBvZiBT UUw5Mi4gKEZlYXR1cmVzIG5vdCBzdXBwb3J0ZWQpCgpAaXRlbSAKQSBjb21wbGV0ZSBkYXRhYmFz ZSBpcyBzdG9yZWQgaW4gYSBzaW5nbGUgZGlzayBmaWxlLgoKQGl0ZW0gCkRhdGFiYXNlIGZpbGVz IGNhbiBiZSBmcmVlbHkgc2hhcmVkIGJldHdlZW4gbWFjaGluZXMgd2l0aApkaWZmZXJlbnQgYnl0 ZSBvcmRlcnMuCgpAaXRlbSAKU3VwcG9ydHMgZGF0YWJhc2VzIHVwIHRvIDIgdGViaWJ5dGVzICgy XjQxIGJ5dGVzKSBpbiBzaXplLgoKQGl0ZW0gClN0cmluZ3MgYW5kIEJMT0JzIHVwIHRvIDIgZ2li aWJ5dGVzICgyXjMxIGJ5dGVzKSBpbiBzaXplLgoKQGl0ZW0gClNtYWxsIGNvZGUgZm9vdHByaW50 OiBsZXNzIHRoYW4gMjUwS2lCIGZ1bGx5IGNvbmZpZ3VyZWQgb3IgbGVzcwp0aGFuIDE1MEtpQiB3 aXRoIG9wdGlvbmFsIGZlYXR1cmVzIG9taXR0ZWQuCgpAaXRlbSAKRmFzdGVyIHRoYW4gcG9wdWxh ciBjbGllbnQvc2VydmVyIGRhdGFiYXNlIGVuZ2luZXMgZm9yIG1vc3QKY29tbW9uIG9wZXJhdGlv bnMuCgpAaXRlbSAKU2ltcGxlLCBlYXN5IHRvIHVzZSBBUEkuCgpAaXRlbSAKVENMIGJpbmRpbmdz IGluY2x1ZGVkLiBCaW5kaW5ncyBmb3IgbWFueSBvdGhlciBsYW5ndWFnZXMKYXZhaWxhYmxlIHNl cGFyYXRlbHkuCgpAaXRlbSAKV2VsbC1jb21tZW50ZWQgc291cmNlIGNvZGUgd2l0aCBvdmVyIDk1 JSB0ZXN0IGNvdmVyYWdlLgoKQGl0ZW0gClNlbGYtY29udGFpbmVkOiBubyBleHRlcm5hbCBkZXBl bmRlbmNpZXMuCgpAaXRlbSAKU291cmNlcyBhcmUgaW4gdGhlIHB1YmxpYyBkb21haW4uIFVzZSBm b3IgYW55IHB1cnBvc2UuCkBlbmQgaXRlbWl6ZQoKQGMgbm9kb2N0ZXN0CgpAbWVudQoqIENyZW1v bmEncyB0YWJsZXMgb2YgZWxsaXB0aWMgY3VydmVzOjogCiogVGhlIFN0ZWluLVdhdGtpbnMgdGFi bGUgb2YgZWxsaXB0aWMgY3VydmVzOjogCiogSm9obiBKb25lcydzIHRhYmxlcyBvZiBudW1iZXIg ZmllbGRzOjogCiogVGhlIE9uLUxpbmUgRW5jeWNsb3BlZGlhIG9mIEludGVnZXIgU2VxdWVuY2Vz IChPRUlTKTogVGhlIE9uLUxpbmUgRW5jeWNsb3BlZGlhIG9mIEludGVnZXIgU2VxdWVuY2VzIE9F SVMuIAoqIExvY2FsIGNvcHkgb2YgU2xvYW5lIE9uLUxpbmUgRW5jeWNsb3BlZGlhIG9mIEludGVn ZXIgU2VxdWVuY2VzOjogCiogRmluZFN0YXQgLSB0aGUgQ29tYmluYXRvcmlhbCBTdGF0aXN0aWMg RmluZGVyLjogRmluZFN0YXQgLSB0aGUgQ29tYmluYXRvcmlhbCBTdGF0aXN0aWMgRmluZGVyLiAK KiBGcmFuayBMdWViZWNrJ3MgdGFibGVzIG9mIENvbndheSBwb2x5bm9taWFscyBvdmVyIGZpbml0 ZSBmaWVsZHM6OiAKKiBUYWJsZXMgb2YgemVyb3Mgb2YgdGhlIFJpZW1hbm4tWmV0YSBmdW5jdGlv bjo6IAoqIElkZWFscyBmcm9tIHRoZSBTeW1ib2xpYyBEYXRhIHByb2plY3Q6OiAKKiBDdW5uaW5n aGFtIHRhYmxlOjogCiogRGF0YWJhc2Ugb2YgSGlsYmVydCBQb2x5bm9taWFsczo6IAoqIERhdGFi YXNlIG9mIE1vZHVsYXIgUG9seW5vbWlhbHM6OiAKKiBJbmRpY2VzIGFuZCBUYWJsZXM6OiAKKiBQ eXRob24gTW9kdWxlIEluZGV4OjogCiogSW5kZXg6OiAKCkBlbmQgbWVudQoKQG5vZGUgQ3JlbW9u YSdzIHRhYmxlcyBvZiBlbGxpcHRpYyBjdXJ2ZXMsVGhlIFN0ZWluLVdhdGtpbnMgdGFibGUgb2Yg ZWxsaXB0aWMgY3VydmVzLFRvcCxUb3AKQGFuY2hvcntzYWdlL2RhdGFiYXNlcy9jcmVtb25hIGNy ZW1vbmEtcy10YWJsZXMtb2YtZWxsaXB0aWMtY3VydmVzfUBhbmNob3J7ZH1AYW5jaG9ye3NhZ2Uv ZGF0YWJhc2VzL2NyZW1vbmEgc2FnZS1kYXRhYmFzZXMtY3JlbW9uYX1AYW5jaG9ye2V9QGFuY2hv cntzYWdlL2RhdGFiYXNlcy9jcmVtb25hIGRvY31AYW5jaG9ye2Z9QGFuY2hvcntzYWdlL2RhdGFi YXNlcy9jcmVtb25hIGRhdGFiYXNlc31AYW5jaG9yezEwfQpAY2hhcHRlciBDcmVtb25hJ3MgdGFi bGVzIG9mIGVsbGlwdGljIGN1cnZlcwoKCkBjIFRoaXMgZmlsZSBoYXMgYmVlbiBhdXRvZ2VuZXJh dGVkLgpAYW5jaG9ye3NhZ2UvZGF0YWJhc2VzL2NyZW1vbmEgbW9kdWxlLXNhZ2UgZGF0YWJhc2Vz IGNyZW1vbmF9QGFuY2hvcnsxfQpAZ2VpbmRleCBzYWdlLmRhdGFiYXNlcy5jcmVtb25hIChtb2R1 bGUpCgpTYWdlIGluY2x1ZGVzIEpvaG4gQ3JlbW9uYSdzIHRhYmxlcyBvZiBlbGxpcHRpYyBjdXJ2 ZXMgaW4gYW4KZWFzeS10by11c2UgZm9ybWF0LiBBbiBpbnN0YW5jZSBvZiB0aGUgY2xhc3MgQ3Jl bW9uYURhdGFiYXNlKCkKZ2l2ZXMgYWNjZXNzIHRvIHRoZSBkYXRhYmFzZS4KCklmIHRoZSBvcHRp b25hbCBmdWxsIENyZW1vbmFEYXRhYmFzZSBpcyBub3QgaW5zdGFsbGVkLCBhIG1pbmktdmVyc2lv bgppcyBpbmNsdWRlZCBieSBkZWZhdWx0IHdpdGggU2FnZS4gIEl0IGNvbnRhaW5zIFdlaWVyc3Ry YXNzIGVxdWF0aW9ucywKcmFuaywgYW5kIHRvcnNpb24gZm9yIGN1cnZlcyB1cCB0byBjb25kdWN0 b3IgMTAwMDAuCgpUaGUgbGFyZ2UgZGF0YWJhc2UgaW5jbHVkZXMgYWxsIGN1cnZlcyBpbiBKb2hu IENyZW1vbmEncyB0YWJsZXMuIEl0CmFsc28gaW5jbHVkZXMgZGF0YSByZWxhdGVkIHRvIHRoZSBC U0QgY29uamVjdHVyZSBhbmQgbW9kdWxhciBkZWdyZWVzCmZvciBhbGwgb2YgdGhlc2UgY3VydmVz LCBhbmQgZ2VuZXJhdG9ycyBmb3IgdGhlIE1vcmRlbGwtV2VpbApncm91cHMuIFRvIGluc3RhbGwg aXQsIHJ1biB0aGUgZm9sbG93aW5nIGluIHRoZSBzaGVsbDoKCkBleGFtcGxlCnNhZ2UgLWkgZGF0 YWJhc2VfY3JlbW9uYV9lbGxjdXJ2ZQpAZW5kIGV4YW1wbGUKClRoaXMgY2F1c2VzIHRoZSBsYXRl c3QgdmVyc2lvbiBvZiB0aGUgZGF0YWJhc2UgdG8gYmUgZG93bmxvYWRlZCBmcm9tCnRoZSBpbnRl cm5ldC4KCkJvdGggdGhlIG1pbmkgYW5kIGZ1bGwgdmVyc2lvbnMgb2YgSm9obiBDcmVtb25hJ3Mg dGFibGVzIGFyZSBzdG9yZWQgaW4KU0FHRV9TSEFSRS9jcmVtb25hIGFzIFNRTGl0ZSBkYXRhYmFz ZXMuIFRoZSBtaW5pIHZlcnNpb24gaGFzIHRoZSBsYXlvdXQ6CgpAZXhhbXBsZQpDUkVBVEUgVEFC TEUgdF9jbGFzcyhjb25kdWN0b3IgSU5URUdFUiwgY2xhc3MgVEVYVCBQUklNQVJZIEtFWSwgcmFu ayBJTlRFR0VSKTsKQ1JFQVRFIFRBQkxFIHRfY3VydmUoY2xhc3MgVEVYVCwgY3VydmUgVEVYVCBQ UklNQVJZIEtFWSwgZXFuIFRFWFQgVU5JUVVFLCB0b3JzIElOVEVHRVIpOwpDUkVBVEUgSU5ERVgg aV90X2NsYXNzX2NvbmR1Y3RvciBPTiB0X2NsYXNzKGNvbmR1Y3Rvcik7CkNSRUFURSBJTkRFWCBp X3RfY3VydmVfY2xhc3MgT04gdF9jdXJ2ZShjbGFzcyk7CkBlbmQgZXhhbXBsZQoKd2hpbGUgdGhl IGZ1bGwgdmVyc2lvbiBoYXMgdGhlIGxheW91dDoKCkBleGFtcGxlCkNSRUFURSBUQUJMRSB0X2Ns YXNzKGNvbmR1Y3RvciBJTlRFR0VSLCBjbGFzcyBURVhUIFBSSU1BUlkgS0VZLCByYW5rIElOVEVH RVIsIEwgUkVBTCwgZGVnIElOVEVHRVIpOwpDUkVBVEUgVEFCTEUgdF9jdXJ2ZShjbGFzcyBURVhU LCBjdXJ2ZSBURVhUIFBSSU1BUlkgS0VZLCBlcW4gVEVYVCBVTklRVUUsIGdlbnMgVEVYVCwgdG9y cyBJTlRFR0VSLCBjcCBJTlRFR0VSLCBvbSBSRUFMLCByZWcgUkVBTCwgc2hhKTsKQ1JFQVRFIElO REVYIGlfdF9jbGFzc19jb25kdWN0b3IgT04gdF9jbGFzcyhjb25kdWN0b3IpOwpDUkVBVEUgSU5E RVggaV90X2N1cnZlX2NsYXNzIE9OIHRfY3VydmUoY2xhc3MpOwpAZW5kIGV4YW1wbGUKCkBnZWlu ZGV4IENyZW1vbmFEYXRhYmFzZSgpIChpbiBtb2R1bGUgc2FnZS5kYXRhYmFzZXMuY3JlbW9uYSkK QGFuY2hvcntzYWdlL2RhdGFiYXNlcy9jcmVtb25hIHNhZ2UgZGF0YWJhc2VzIGNyZW1vbmEgQ3Jl bW9uYURhdGFiYXNlfUBhbmNob3J7MTF9CkBkZWZmbiB7RnVuY3Rpb259IHNhZ2UuZGF0YWJhc2Vz LmNyZW1vbmEuQ3JlbW9uYURhdGFiYXNlIChuYW1lPU5vbmUsIG1pbmk9Tm9uZSwgc2V0X2dsb2Jh bD1Ob25lKQoKSW5pdGlhbGl6ZXMgdGhlIENyZW1vbmEgZGF0YWJhc2Ugd2l0aCBuYW1lIEBjb2Rl e25hbWV9LiBJZiBAY29kZXtuYW1lfSBpcwpAY29kZXtOb25lfSBpdCBpbnN0ZWFkIGluaXRpYWxp emVzIGxhcmdlIENyZW1vbmEgZGF0YWJhc2UgKG5hbWVkICdjcmVtb25hJyksCmlmIGF2YWlsYWJs ZSBvciBkZWZhdWx0IG1pbmkgQ3JlbW9uYSBkYXRhYmFzZSAobmFtZWQgJ2NyZW1vbmEgbWluaScp LgoKSWYgdGhlIENyZW1vbmEgZGF0YWJhc2UgaW4gcXVlc3Rpb24gaXMgaW4gdGhlIGZvcm1hdCBv ZiB0aGUgbWluaSBkYXRhYmFzZSwKeW91IG11c3Qgc2V0IEBjb2Rle21pbmk9VHJ1ZX0sIG90aGVy d2lzZSBpdCBtdXN0IGJlIHNldCB0byBAY29kZXtGYWxzZX0uCgpJZiB5b3Ugd291bGQgbGlrZSBv dGhlciBjb21wb25lbnRzIG9mIFNhZ2UgdG8gdXNlIHRoaXMgZGF0YWJhc2UsIG1hcmsKQGNvZGV7 c2V0X2dsb2JhbD1UcnVlfS4KClRFU1RTOgoKQGV4YW1wbGUKc2FnZTogYyA9IENyZW1vbmFEYXRh YmFzZSgpCnNhZ2U6IGlzaW5zdGFuY2UoYywgc2FnZS5kYXRhYmFzZXMuY3JlbW9uYS5NaW5pQ3Jl bW9uYURhdGFiYXNlKQpUcnVlCnNhZ2U6IGlzaW5zdGFuY2UoYywgc2FnZS5kYXRhYmFzZXMuY3Jl bW9uYS5MYXJnZUNyZW1vbmFEYXRhYmFzZSkgICMgb3B0aW9uYWwgLSBkYXRhYmFzZV9jcmVtb25h X2VsbGN1cnZlClRydWUKQGVuZCBleGFtcGxlCgpWZXJpZnkgdGhhdCB0cmFjIHRpY2tldCAjMTIz NDFAZm9vdG5vdGV7aHR0cHM6Ly90cmFjLnNhZ2VtYXRoLm9yZy8xMjM0MX0gaGFzIGJlZW4gcmVz b2x2ZWQ6CgpAZXhhbXBsZQpzYWdlOiBjID0gQ3JlbW9uYURhdGFiYXNlKCdzaG91bGQgbm90IGV4 aXN0JyxtaW5pPVRydWUpClRyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KToKLi4uClZh bHVlRXJyb3I6IERlc2lyZWQgZGF0YWJhc2UgKD0nc2hvdWxkIG5vdCBleGlzdCcpIGRvZXMgbm90 IGV4aXN0CnNhZ2U6IGMgPSBDcmVtb25hRGF0YWJhc2UoJ3Nob3VsZCBub3QgZXhpc3QnLG1pbmk9 RmFsc2UpClRyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KToKLi4uClZhbHVlRXJyb3I6 IERlc2lyZWQgZGF0YWJhc2UgKD0nc2hvdWxkIG5vdCBleGlzdCcpIGRvZXMgbm90IGV4aXN0CnNh Z2U6IGZyb20gc2FnZS5lbnYgaW1wb3J0IFNBR0VfU0hBUkUKc2FnZTogb3MucGF0aC5pc2ZpbGUo b3MucGF0aC5qb2luKFNBR0VfU0hBUkUsJ2NyZW1vbmEnLCdzaG91bGRfbm90X2V4aXN0LmRiJykp CkZhbHNlCkBlbmQgZXhhbXBsZQpAZW5kIGRlZmZuCgpAZ2VpbmRleCBMYXJnZUNyZW1vbmFEYXRh YmFzZSAoY2xhc3MgaW4gc2FnZS5kYXRhYmFzZXMuY3JlbW9uYSkKQGFuY2hvcntzYWdlL2RhdGFi YXNlcy9jcmVtb25hIHNhZ2UgZGF0YWJhc2VzIGNyZW1vbmEgTGFyZ2VDcmVtb25hRGF0YWJhc2V9 QGFuY2hvcnsxMn0KQGRlZmZuIHtDbGFzc30gc2FnZS5kYXRhYmFzZXMuY3JlbW9uYS5MYXJnZUNy ZW1vbmFEYXRhYmFzZSAobmFtZSwgcmVhZF9vbmx5PVRydWUsIGJ1aWxkPUZhbHNlKQoKQmFzZXM6 IEByZWZ7MTMsLHNhZ2UuZGF0YWJhc2VzLmNyZW1vbmEuTWluaUNyZW1vbmFEYXRhYmFzZX0KClRo ZSBDcmVtb25hIGRhdGFiYXNlIG9mIGVsbGlwdGljIGN1cnZlcy4KCkVYQU1QTEVTOgoKQGV4YW1w bGUKc2FnZTogYyA9IENyZW1vbmFEYXRhYmFzZSgnY3JlbW9uYScpICAjIG9wdGlvbmFsIC0gZGF0 YWJhc2VfY3JlbW9uYV9lbGxjdXJ2ZQpzYWdlOiBjLmFsbGN1cnZlcygxMSkgICAgICAgICAgICAg ICAgICMgb3B0aW9uYWwgLSBkYXRhYmFzZV9jcmVtb25hX2VsbGN1cnZlCkB7J2ExJzogW1swLCAt MSwgMSwgLTEwLCAtMjBdLCAwLCA1XSwKJ2EyJzogW1swLCAtMSwgMSwgLTc4MjAsIC0yNjM1ODBd LCAwLCAxXSwKJ2EzJzogW1swLCAtMSwgMSwgMCwgMF0sIDAsIDVdQH0KQGVuZCBleGFtcGxlCgpA Z2VpbmRleCBhbGxic2QoKSAoc2FnZS5kYXRhYmFzZXMuY3JlbW9uYS5MYXJnZUNyZW1vbmFEYXRh YmFzZSBtZXRob2QpCkBhbmNob3J7c2FnZS9kYXRhYmFzZXMvY3JlbW9uYSBzYWdlIGRhdGFiYXNl cyBjcmVtb25hIExhcmdlQ3JlbW9uYURhdGFiYXNlIGFsbGJzZH1AYW5jaG9yezE0fQpAZGVmZm4g e01ldGhvZH0gYWxsYnNkIChOKQoKUmV0dXJuIHRoZSBhbGxic2QgdGFibGUgZm9yIGNvbmR1Y3Rv ciBOLiBUaGUgZW50cmllcyBhcmU6CgpAZXhhbXBsZQpbaWQsIHRhbWFnYXdhX3Byb2R1Y3QsIE9t ZWdhX0UsIEwsIFJlZ19FLCBTaGFfYW4oRSldCkBlbmQgZXhhbXBsZQoKd2hlcmUgaWQgaXMgdGhl IGlzb2dlbnkgY2xhc3MgKGxldHRlcikgZm9sbG93ZWQgYnkgYSBudW1iZXIsIGUuZy4sCmIzLCBh bmQgTCBpcyBAbWF0aHtMXnIoRUBjb21tYXt9MSkvciF9LCB3aGVyZSBFIGhhcyByYW5rIHIuCgpJ TlBVVDoKCgpAaXRlbWl6ZSAtCgpAaXRlbSAKQGNvZGV7Tn0gLSBpbnQsIHRoZSBjb25kdWN0b3IK QGVuZCBpdGVtaXplCgpPVVRQVVQ6IGRpY3QgY29udGFpbmluZyB0aGUgYWxsYnNkIHRhYmxlIGZv ciBlYWNoIGlzb2dlbnkgY2xhc3MKaW4gY29uZHVjdG9yIE4KCkVYQU1QTEVTOgoKQGV4YW1wbGUK c2FnZTogYyA9IENyZW1vbmFEYXRhYmFzZSgpCnNhZ2U6IGMuYWxsYnNkKDEyKSAgICAgICAgICAg ICMgb3B0aW9uYWwgLSBkYXRhYmFzZV9jcmVtb25hX2VsbGN1cnZlCkB7QH0Kc2FnZTogYy5hbGxi c2QoMTkpWydhMyddICAgICAgIyBvcHRpb25hbCAtIGRhdGFiYXNlX2NyZW1vbmFfZWxsY3VydmUK WzEsIDQuMDc5Mjc5MjAwNDY0OTMsIDAuNDUzMjUzMjQ0NDk2MTA0LCAxLjAsIDFdCnNhZ2U6IGMu YWxsYnNkKDEyMDAxKVsnYTEnXSAgICMgb3B0aW9uYWwgLSBkYXRhYmFzZV9jcmVtb25hX2VsbGN1 cnZlClsyLCAzLjI3NjA4MTM1MjQ4NzIyLCAxLjU0OTEwMTQzMDkwNTA2LCAwLjIzNjQyNTk3MTE4 Nzk1MiwgMS4wXQpAZW5kIGV4YW1wbGUKQGVuZCBkZWZmbgoKQGdlaW5kZXggYWxsZ2VucygpIChz YWdlLmRhdGFiYXNlcy5jcmVtb25hLkxhcmdlQ3JlbW9uYURhdGFiYXNlIG1ldGhvZCkKQGFuY2hv cntzYWdlL2RhdGFiYXNlcy9jcmVtb25hIHNhZ2UgZGF0YWJhc2VzIGNyZW1vbmEgTGFyZ2VDcmVt b25hRGF0YWJhc2UgYWxsZ2Vuc31AYW5jaG9yezE1fQpAZGVmZm4ge01ldGhvZH0gYWxsZ2VucyAo TikKClJldHVybiB0aGUgYWxsZ2VucyB0YWJsZSBmb3IgY29uZHVjdG9yIE4uCgpJTlBVVDoKCgpA aXRlbWl6ZSAtCgpAaXRlbSAKQGNvZGV7Tn0gLSBpbnQsIHRoZSBjb25kdWN0b3IKQGVuZCBpdGVt aXplCgpPVVRQVVQ6CgoKQGl0ZW1pemUgLQoKQGl0ZW0gCkBjb2Rle2RpY3R9IC0gaWQ6W3BvaW50 cywgLi4uXSwgLi4uCkBlbmQgaXRlbWl6ZQoKRVhBTVBMRVM6CgpAZXhhbXBsZQpzYWdlOiBjID0g Q3JlbW9uYURhdGFiYXNlKCkKc2FnZTogYy5hbGxnZW5zKDEyKSAgICAgICAgICAgICMgb3B0aW9u YWwgLSBkYXRhYmFzZV9jcmVtb25hX2VsbGN1cnZlCkB7QH0Kc2FnZTogYy5hbGxnZW5zKDEwMDEp WydhMSddICAgICMgb3B0aW9uYWwgLSBkYXRhYmFzZV9jcmVtb25hX2VsbGN1cnZlCltbNjEsIDE4 MSwgMV1dCnNhZ2U6IGMuYWxsZ2VucygxMjAwMSlbJ2ExJ10gICAjIG9wdGlvbmFsIC0gZGF0YWJh c2VfY3JlbW9uYV9lbGxjdXJ2ZQpbWzcsIDIsIDFdXQpAZW5kIGV4YW1wbGUKQGVuZCBkZWZmbgoK QGdlaW5kZXggZGVncGhpKCkgKHNhZ2UuZGF0YWJhc2VzLmNyZW1vbmEuTGFyZ2VDcmVtb25hRGF0 YWJhc2UgbWV0aG9kKQpAYW5jaG9ye3NhZ2UvZGF0YWJhc2VzL2NyZW1vbmEgc2FnZSBkYXRhYmFz ZXMgY3JlbW9uYSBMYXJnZUNyZW1vbmFEYXRhYmFzZSBkZWdwaGl9QGFuY2hvcnsxNn0KQGRlZmZu IHtNZXRob2R9IGRlZ3BoaSAoTikKClJldHVybiB0aGUgZGVncGhpIHRhYmxlIGZvciBjb25kdWN0 b3IgTi4KCklOUFVUOgoKCkBpdGVtaXplIC0KCkBpdGVtIApAY29kZXtOfSAtIGludCwgdGhlIGNv bmR1Y3RvcgpAZW5kIGl0ZW1pemUKCk9VVFBVVDoKCgpAaXRlbWl6ZSAtCgpAaXRlbSAKQGNvZGV7 ZGljdH0gLSBpZDpkZWdwaGksIC4uLgpAZW5kIGl0ZW1pemUKCkVYQU1QTEVTOgoKQGV4YW1wbGUK c2FnZTogYyA9IENyZW1vbmFEYXRhYmFzZSgpCnNhZ2U6IGMuZGVncGhpKDExKSAgICAgICAgICAg ICMgb3B0aW9uYWwgLSBkYXRhYmFzZV9jcmVtb25hX2VsbGN1cnZlCkB7J2ExJzogMUB9CnNhZ2U6 IGMuZGVncGhpKDEyMDAxKVsnYzEnXSAgICMgb3B0aW9uYWwgLSBkYXRhYmFzZV9jcmVtb25hX2Vs bGN1cnZlCjE2NDAKQGVuZCBleGFtcGxlCkBlbmQgZGVmZm4KQGVuZCBkZWZmbgoKQGdlaW5kZXgg TWluaUNyZW1vbmFEYXRhYmFzZSAoY2xhc3MgaW4gc2FnZS5kYXRhYmFzZXMuY3JlbW9uYSkKQGFu Y2hvcntzYWdlL2RhdGFiYXNlcy9jcmVtb25hIHNhZ2UgZGF0YWJhc2VzIGNyZW1vbmEgTWluaUNy ZW1vbmFEYXRhYmFzZX1AYW5jaG9yezEzfQpAZGVmZm4ge0NsYXNzfSBzYWdlLmRhdGFiYXNlcy5j cmVtb25hLk1pbmlDcmVtb25hRGF0YWJhc2UgKG5hbWUsIHJlYWRfb25seT1UcnVlLCBidWlsZD1G YWxzZSkKCkJhc2VzOiBzYWdlLmRhdGFiYXNlcy5zcWxfZGIuU1FMRGF0YWJhc2VAZm9vdG5vdGV7 Li4vLi4vLi4vLi4vLi4vLi4vaHRtbC9lbi9yZWZlcmVuY2UvbWlzYy9zYWdlL2RhdGFiYXNlcy9z cWxfZGIuaHRtbCNzYWdlLmRhdGFiYXNlcy5zcWxfZGIuU1FMRGF0YWJhc2V9CgpUaGUgQ3JlbW9u YSBkYXRhYmFzZSBvZiBlbGxpcHRpYyBjdXJ2ZXMuCgpFWEFNUExFUzoKCkBleGFtcGxlCnNhZ2U6 IGMgPSBDcmVtb25hRGF0YWJhc2UoKQpzYWdlOiBjLmFsbGN1cnZlcygxMSkKQHsnYTEnOiBbWzAs IC0xLCAxLCAtMTAsIC0yMF0sIDAsIDVdLAogJ2EyJzogW1swLCAtMSwgMSwgLTc4MjAsIC0yNjM1 ODBdLCAwLCAxXSwKICdhMyc6IFtbMCwgLTEsIDEsIDAsIDBdLCAwLCA1XUB9CkBlbmQgZXhhbXBs ZQoKQGdlaW5kZXggYWxsY3VydmVzKCkgKHNhZ2UuZGF0YWJhc2VzLmNyZW1vbmEuTWluaUNyZW1v bmFEYXRhYmFzZSBtZXRob2QpCkBhbmNob3J7c2FnZS9kYXRhYmFzZXMvY3JlbW9uYSBzYWdlIGRh dGFiYXNlcyBjcmVtb25hIE1pbmlDcmVtb25hRGF0YWJhc2UgYWxsY3VydmVzfUBhbmNob3J7MTd9 CkBkZWZmbiB7TWV0aG9kfSBhbGxjdXJ2ZXMgKE4pCgpSZXR1cm5zIHRoZSBhbGxjdXJ2ZXMgdGFi bGUgb2YgY3VydmVzIG9mIGNvbmR1Y3RvciBOLgoKSU5QVVQ6CgoKQGl0ZW1pemUgLQoKQGl0ZW0g CkBjb2Rle059IC0gaW50LCB0aGUgY29uZHVjdG9yCkBlbmQgaXRlbWl6ZQoKT1VUUFVUOgoKCkBp dGVtaXplIC0KCkBpdGVtIApAY29kZXtkaWN0fSAtIGlkOlthaW52cywgcmFuaywgdG9yXSwgLi4u CkBlbmQgaXRlbWl6ZQoKRVhBTVBMRVM6CgpAZXhhbXBsZQpzYWdlOiBjID0gQ3JlbW9uYURhdGFi YXNlKCkKc2FnZTogYy5hbGxjdXJ2ZXMoMTEpWydhMyddCltbMCwgLTEsIDEsIDAsIDBdLCAwLCA1 XQpzYWdlOiBjLmFsbGN1cnZlcygxMikKQHtAfQpzYWdlOiBjLmFsbGN1cnZlcygxMjAwMSlbJ2Ex J10gICAjIG9wdGlvbmFsIC0gZGF0YWJhc2VfY3JlbW9uYV9lbGxjdXJ2ZQpbWzEsIDAsIDAsIC0x MDEsIDM4Ml0sIDEsIDFdCkBlbmQgZXhhbXBsZQpAZW5kIGRlZmZuCgpAZ2VpbmRleCBjb2VmZmlj aWVudHNfYW5kX2RhdGEoKSAoc2FnZS5kYXRhYmFzZXMuY3JlbW9uYS5NaW5pQ3JlbW9uYURhdGFi YXNlIG1ldGhvZCkKQGFuY2hvcntzYWdlL2RhdGFiYXNlcy9jcmVtb25hIHNhZ2UgZGF0YWJhc2Vz IGNyZW1vbmEgTWluaUNyZW1vbmFEYXRhYmFzZSBjb2VmZmljaWVudHNfYW5kX2RhdGF9QGFuY2hv cnsxOH0KQGRlZmZuIHtNZXRob2R9IGNvZWZmaWNpZW50c19hbmRfZGF0YSAobGFiZWwpCgpSZXR1 cm4gdGhlIFdlaWVyc3RyYXNzIGNvZWZmaWNpZW50cyBhbmQgb3RoZXIgZGF0YSBmb3IgdGhlCmN1 cnZlIHdpdGggZ2l2ZW4gbGFiZWwuCgpFWEFNUExFUzoKCkBleGFtcGxlCnNhZ2U6IGMsIGQgPSBD cmVtb25hRGF0YWJhc2UoKS5jb2VmZmljaWVudHNfYW5kX2RhdGEoJzE0NGIxJykKc2FnZTogYwpb MCwgMCwgMCwgNiwgN10Kc2FnZTogZFsnY29uZHVjdG9yJ10KMTQ0CnNhZ2U6IGRbJ2NyZW1vbmFf bGFiZWwnXQonMTQ0YjEnCnNhZ2U6IGRbJ3JhbmsnXQowCnNhZ2U6IGRbJ3RvcnNpb25fb3JkZXIn XQoyCkBlbmQgZXhhbXBsZQoKQ2hlY2sgdGhhdCB0cmFjIHRpY2tldCAjMTc5MDRAZm9vdG5vdGV7 aHR0cHM6Ly90cmFjLnNhZ2VtYXRoLm9yZy8xNzkwNH0gaXMgZml4ZWQ6CgpAZXhhbXBsZQpzYWdl OiAnZ2VucycgaW4gQ3JlbW9uYURhdGFiYXNlKCkuY29lZmZpY2llbnRzX2FuZF9kYXRhKCcxMDA0 NjdhMicpWzFdICMgb3B0aW9uYWwgLSBkYXRhYmFzZV9jcmVtb25hX2VsbGN1cnZlClRydWUKQGVu ZCBleGFtcGxlCkBlbmQgZGVmZm4KCkBnZWluZGV4IGNvbmR1Y3Rvcl9yYW5nZSgpIChzYWdlLmRh dGFiYXNlcy5jcmVtb25hLk1pbmlDcmVtb25hRGF0YWJhc2UgbWV0aG9kKQpAYW5jaG9ye3NhZ2Uv ZGF0YWJhc2VzL2NyZW1vbmEgc2FnZSBkYXRhYmFzZXMgY3JlbW9uYSBNaW5pQ3JlbW9uYURhdGFi YXNlIGNvbmR1Y3Rvcl9yYW5nZX1AYW5jaG9yezE5fQpAZGVmZm4ge01ldGhvZH0gY29uZHVjdG9y X3JhbmdlICgpCgpSZXR1cm4gdGhlIHJhbmdlIG9mIGNvbmR1Y3RvcnMgdGhhdCBhcmUgY292ZXJl ZCBieSB0aGUgZGF0YWJhc2UuCgpPVVRQVVQ6IHR1cGxlIG9mIGludHMgKE4xLE4yKzEpIHdoZXJl IE4xIGlzIHRoZSBzbWFsbGVzdCBhbmQKTjIgdGhlIGxhcmdlc3QgY29uZHVjdG9yIGZvciB3aGlj aCB0aGUgZGF0YWJhc2UgaXMgY29tcGxldGUuCgpFWEFNUExFUzoKCkBleGFtcGxlCnNhZ2U6IGMg PSBDcmVtb25hRGF0YWJhc2UoJ2NyZW1vbmEgbWluaScpCnNhZ2U6IGMuY29uZHVjdG9yX3Jhbmdl KCkKKDEsIDEwMDAwKQpAZW5kIGV4YW1wbGUKQGVuZCBkZWZmbgoKQGdlaW5kZXggY3VydmVzKCkg KHNhZ2UuZGF0YWJhc2VzLmNyZW1vbmEuTWluaUNyZW1vbmFEYXRhYmFzZSBtZXRob2QpCkBhbmNo b3J7c2FnZS9kYXRhYmFzZXMvY3JlbW9uYSBzYWdlIGRhdGFiYXNlcyBjcmVtb25hIE1pbmlDcmVt b25hRGF0YWJhc2UgY3VydmVzfUBhbmNob3J7MWF9CkBkZWZmbiB7TWV0aG9kfSBjdXJ2ZXMgKE4p CgpSZXR1cm5zIHRoZSBjdXJ2ZXMgdGFibGUgb2YgYWxsIEBlbXBoe29wdGltYWx9IGN1cnZlcyBv ZiBjb25kdWN0b3IgTi4KCklOUFVUOgoKCkBpdGVtaXplIC0KCkBpdGVtIApAY29kZXtOfSAtIGlu dCwgdGhlIGNvbmR1Y3RvcgpAZW5kIGl0ZW1pemUKCk9VVFBVVDoKCgpAaXRlbWl6ZSAtCgpAaXRl bSAKQGNvZGV7ZGljdH0gLSBpZDpbYWludnMsIHJhbmssIHRvcl0sIC4uLgpAZW5kIGl0ZW1pemUK CkVYQU1QTEVTOgoKT3B0aW1hbCBjdXJ2ZXMgb2YgY29uZHVjdG9yIDM3OgoKQGV4YW1wbGUKc2Fn ZTogQ3JlbW9uYURhdGFiYXNlKCkuY3VydmVzKDM3KQpAeydhMSc6IFtbMCwgMCwgMSwgLTEsIDBd LCAxLCAxXSwgJ2IxJzogW1swLCAxLCAxLCAtMjMsIC01MF0sIDAsIDNdQH0KQGVuZCBleGFtcGxl CgpOb3RlIHRoZSAnaDMnLCB3aGljaCBpcyB0aGUgdW5pcXVlIGNhc2UgaW4gdGhlIHRhYmxlcyB3 aGVyZQp0aGUgb3B0aW1hbCBjdXJ2ZSBkb2Vzbid0IGhhdmUgbGFiZWwgZW5kaW5nIGluIDE6CgpA ZXhhbXBsZQpzYWdlOiBsaXN0KHNvcnRlZChDcmVtb25hRGF0YWJhc2UoKS5jdXJ2ZXMoOTkwKS5r ZXlzKCkpKQpbJ2ExJywgJ2IxJywgJ2MxJywgJ2QxJywgJ2UxJywgJ2YxJywgJ2cxJywgJ2gzJywg J2kxJywgJ2oxJywgJ2sxJywgJ2wxJ10KQGVuZCBleGFtcGxlCgpURVNUUzoKCkBleGFtcGxlCnNh Z2U6IGMgPSBDcmVtb25hRGF0YWJhc2UoKQpzYWdlOiBjLmN1cnZlcygxMjAwMSlbJ2ExJ10gICAj IG9wdGlvbmFsIC0gZGF0YWJhc2VfY3JlbW9uYV9lbGxjdXJ2ZQpbWzEsIDAsIDAsIC0xMDEsIDM4 Ml0sIDEsIDFdCkBlbmQgZXhhbXBsZQpAZW5kIGRlZmZuCgpAZ2VpbmRleCBkYXRhX2Zyb21fY29l ZmZpY2llbnRzKCkgKHNhZ2UuZGF0YWJhc2VzLmNyZW1vbmEuTWluaUNyZW1vbmFEYXRhYmFzZSBt ZXRob2QpCkBhbmNob3J7c2FnZS9kYXRhYmFzZXMvY3JlbW9uYSBzYWdlIGRhdGFiYXNlcyBjcmVt b25hIE1pbmlDcmVtb25hRGF0YWJhc2UgZGF0YV9mcm9tX2NvZWZmaWNpZW50c31AYW5jaG9yezFi fQpAZGVmZm4ge01ldGhvZH0gZGF0YV9mcm9tX2NvZWZmaWNpZW50cyAoYWludnMpCgpSZXR1cm4g ZWxsaXB0aWMgY3VydmUgZGF0YSBmb3IgdGhlIGN1cnZlIHdpdGggZ2l2ZW4KV2VpZXJzdHJhc3Mg Y29lZmZpY2llbnRzLgoKRVhBTVBMRVM6CgpAZXhhbXBsZQpzYWdlOiBkID0gQ3JlbW9uYURhdGFi YXNlKCkuZGF0YV9mcm9tX2NvZWZmaWNpZW50cyhbMSwgLTEsIDEsIDMxLCAxMjhdKQpzYWdlOiBk Wydjb25kdWN0b3InXQoxOTUzCnNhZ2U6IGRbJ2NyZW1vbmFfbGFiZWwnXQonMTk1M2MxJwpzYWdl OiBkWydyYW5rJ10KMQpzYWdlOiBkWyd0b3JzaW9uX29yZGVyJ10KMgpAZW5kIGV4YW1wbGUKCkNo ZWNrIHRoYXQgdHJhYyB0aWNrZXQgIzE3OTA0QGZvb3Rub3Rle2h0dHBzOi8vdHJhYy5zYWdlbWF0 aC5vcmcvMTc5MDR9IGlzIGZpeGVkOgoKQGV4YW1wbGUKc2FnZTogYWkgPSBFbGxpcHRpY0N1cnZl KCcxMDA0NjdhMicpLmFpbnZzKCkgIyBvcHRpb25hbCAtIGRhdGFiYXNlX2NyZW1vbmFfZWxsY3Vy dmUKc2FnZTogJ2dlbnMnIGluIENyZW1vbmFEYXRhYmFzZSgpLmRhdGFfZnJvbV9jb2VmZmljaWVu dHMoYWkpICMgb3B0aW9uYWwgLSBkYXRhYmFzZV9jcmVtb25hX2VsbGN1cnZlClRydWUKQGVuZCBl eGFtcGxlCkBlbmQgZGVmZm4KCkBnZWluZGV4IGVsbGlwdGljX2N1cnZlKCkgKHNhZ2UuZGF0YWJh c2VzLmNyZW1vbmEuTWluaUNyZW1vbmFEYXRhYmFzZSBtZXRob2QpCkBhbmNob3J7c2FnZS9kYXRh YmFzZXMvY3JlbW9uYSBzYWdlIGRhdGFiYXNlcyBjcmVtb25hIE1pbmlDcmVtb25hRGF0YWJhc2Ug ZWxsaXB0aWNfY3VydmV9QGFuY2hvcnsxY30KQGRlZmZuIHtNZXRob2R9IGVsbGlwdGljX2N1cnZl IChsYWJlbCkKClJldHVybiBhbiBlbGxpcHRpYyBjdXJ2ZSB3aXRoIGdpdmVuIGxhYmVsIHdpdGgg c29tZSBkYXRhIGFib3V0IGl0CmZyb20gdGhlIGRhdGFiYXNlIHByZS1maWxsZWQgaW4uCgpJTlBV VDoKCgpAaXRlbWl6ZSAtCgpAaXRlbSAKQGNvZGV7bGFiZWx9IC0gc3RyIChDcmVtb25hIG9yIExN RkRCIGxhYmVsKQpAZW5kIGl0ZW1pemUKCk9VVFBVVDoKCgpAaXRlbWl6ZSAtCgpAaXRlbSAKYW4g c2FnZS5zY2hlbWVzLmVsbGlwdGljX2N1cnZlcy5lbGxfcmF0aW9uYWxfZmllbGQuRWxsaXB0aWND dXJ2ZV9yYXRpb25hbF9maWVsZEBmb290bm90ZXsuLi8uLi8uLi8uLi8uLi8uLi9odG1sL2VuL3Jl ZmVyZW5jZS9jdXJ2ZXMvc2FnZS9zY2hlbWVzL2VsbGlwdGljX2N1cnZlcy9lbGxfcmF0aW9uYWxf ZmllbGQuaHRtbCNzYWdlLnNjaGVtZXMuZWxsaXB0aWNfY3VydmVzLmVsbF9yYXRpb25hbF9maWVs ZC5FbGxpcHRpY0N1cnZlX3JhdGlvbmFsX2ZpZWxkfQpAZW5kIGl0ZW1pemUKCkBjYXJ0b3VjaGUK QHF1b3RhdGlvbiBOb3RlIApGb3IgbW9yZSBkZXRhaWxzIG9uIExNRkRCIGxhYmVscyBzZWUgQHJl ZnsxZCwscGFyc2VfbG1mZGJfbGFiZWwoKX0uCkBlbmQgcXVvdGF0aW9uCkBlbmQgY2FydG91Y2hl CgpFWEFNUExFUzoKCkBleGFtcGxlCnNhZ2U6IGMgPSBDcmVtb25hRGF0YWJhc2UoKQpzYWdlOiBj LmVsbGlwdGljX2N1cnZlKCcxMWExJykKRWxsaXB0aWMgQ3VydmUgZGVmaW5lZCBieSB5XjIgKyB5 ID0geF4zIC0geF4yIC0gMTAqeCAtIDIwIG92ZXIgUmF0aW9uYWwgRmllbGQKc2FnZTogYy5lbGxp cHRpY19jdXJ2ZSgnMTIwMDFhMScpICAgICMgb3B0aW9uYWwgLSBkYXRhYmFzZV9jcmVtb25hX2Vs bGN1cnZlCkVsbGlwdGljIEN1cnZlIGRlZmluZWQgYnkgeV4yICsgeCp5ID0geF4zIC0gMTAxKngg KyAzODIgb3ZlciBSYXRpb25hbCBGaWVsZApzYWdlOiBjLmVsbGlwdGljX2N1cnZlKCc0OGMxJykK VHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgouLi4KVmFsdWVFcnJvcjogVGhlcmUg aXMgbm8gZWxsaXB0aWMgY3VydmUgd2l0aCBsYWJlbCA0OGMxIGluIHRoZSBkYXRhYmFzZQpAZW5k IGV4YW1wbGUKCllvdSBjYW4gYWxzbyB1c2UgTE1GREIgbGFiZWxzOgoKQGV4YW1wbGUKc2FnZTog Yy5lbGxpcHRpY19jdXJ2ZSgnNDYyLmYzJykKRWxsaXB0aWMgQ3VydmUgZGVmaW5lZCBieSB5XjIg KyB4KnkgPSB4XjMgLSAzNjMqeCArIDEzMDUgb3ZlciBSYXRpb25hbCBGaWVsZApAZW5kIGV4YW1w bGUKQGVuZCBkZWZmbgoKQGdlaW5kZXggZWxsaXB0aWNfY3VydmVfZnJvbV9haW52cygpIChzYWdl LmRhdGFiYXNlcy5jcmVtb25hLk1pbmlDcmVtb25hRGF0YWJhc2UgbWV0aG9kKQpAYW5jaG9ye3Nh Z2UvZGF0YWJhc2VzL2NyZW1vbmEgc2FnZSBkYXRhYmFzZXMgY3JlbW9uYSBNaW5pQ3JlbW9uYURh dGFiYXNlIGVsbGlwdGljX2N1cnZlX2Zyb21fYWludnN9QGFuY2hvcnsxZX0KQGRlZmZuIHtNZXRo b2R9IGVsbGlwdGljX2N1cnZlX2Zyb21fYWludnMgKGFpbnZzKQoKUmV0dXJucyB0aGUgZWxsaXB0 aWMgY3VydmUgaW4gdGhlIGRhdGFiYXNlIG9mIHdpdGggbWluaW1hbAphaW52cywgaWYgaXQgZXhp c3RzLCBvciByYWlzZXMgYSBSdW50aW1lRXJyb3IgZXhjZXB0aW9uCm90aGVyd2lzZS4KCklOUFVU OgoKCkBpdGVtaXplIC0KCkBpdGVtIApAY29kZXthaW52c30gLSBsaXN0ICg1LXR1cGxlIG9mIGlu dCdzKTsgdGhlIG1pbmltYWwKV2VpZXJzdHJhc3MgbW9kZWwgZm9yIGFuIGVsbGlwdGljIGN1cnZl CkBlbmQgaXRlbWl6ZQoKT1VUUFVUOiBFbGxpcHRpY0N1cnZlCgpFWEFNUExFUzoKCkBleGFtcGxl CnNhZ2U6IGMgPSBDcmVtb25hRGF0YWJhc2UoKQpzYWdlOiBjLmVsbGlwdGljX2N1cnZlX2Zyb21f YWludnMoWzAsIC0xLCAxLCAtMTAsIC0yMF0pCkVsbGlwdGljIEN1cnZlIGRlZmluZWQgYnkgeV4y ICsgeSA9IHheMyAtIHheMiAtIDEwKnggLSAyMCBvdmVyIFJhdGlvbmFsIEZpZWxkCnNhZ2U6IGMu ZWxsaXB0aWNfY3VydmVfZnJvbV9haW52cyhbMSwgMCwgMCwgLTEwMSwgMzgyXSkgICMgb3B0aW9u YWwgLSBkYXRhYmFzZV9jcmVtb25hX2VsbGN1cnZlCkVsbGlwdGljIEN1cnZlIGRlZmluZWQgYnkg eV4yICsgeCp5ID0geF4zIC0gMTAxKnggKyAzODIgb3ZlciBSYXRpb25hbCBGaWVsZApAZW5kIGV4 YW1wbGUKCk9sZCAocHJlLTIwMDYpIENyZW1vbmEgbGFiZWxzIGFyZSBhbHNvIGFsbG93ZWQ6CgpA ZXhhbXBsZQpzYWdlOiBjLmVsbGlwdGljX2N1cnZlKCc5NDUwS0tLSzEnKQpFbGxpcHRpYyBDdXJ2 ZSBkZWZpbmVkIGJ5IHleMiArIHgqeSArIHkgPSB4XjMgLSB4XjIgLSA1KnggKyA3IG92ZXIgUmF0 aW9uYWwgRmllbGQKQGVuZCBleGFtcGxlCgpNYWtlIHN1cmUgdHJhYyB0aWNrZXQgIzEyNTY1QGZv b3Rub3Rle2h0dHBzOi8vdHJhYy5zYWdlbWF0aC5vcmcvMTI1NjV9IGlzIGZpeGVkOgoKQGV4YW1w bGUKc2FnZTogYy5lbGxpcHRpY19jdXJ2ZSgnMTBhMScpClRyYWNlYmFjayAobW9zdCByZWNlbnQg Y2FsbCBsYXN0KToKLi4uClZhbHVlRXJyb3I6IFRoZXJlIGlzIG5vIGVsbGlwdGljIGN1cnZlIHdp dGggbGFiZWwgMTBhMSBpbiB0aGUgZGF0YWJhc2UKQGVuZCBleGFtcGxlCkBlbmQgZGVmZm4KCkBn ZWluZGV4IGlzb2dlbnlfY2xhc3MoKSAoc2FnZS5kYXRhYmFzZXMuY3JlbW9uYS5NaW5pQ3JlbW9u YURhdGFiYXNlIG1ldGhvZCkKQGFuY2hvcntzYWdlL2RhdGFiYXNlcy9jcmVtb25hIHNhZ2UgZGF0 YWJhc2VzIGNyZW1vbmEgTWluaUNyZW1vbmFEYXRhYmFzZSBpc29nZW55X2NsYXNzfUBhbmNob3J7 MWZ9CkBkZWZmbiB7TWV0aG9kfSBpc29nZW55X2NsYXNzIChsYWJlbCkKClJldHVybnMgdGhlIGlz b2dlbnkgY2xhc3Mgb2YgZWxsaXB0aWMgY3VydmVzIHRoYXQgYXJlCmlzb2dlbm91cyB0byB0aGUg Y3VydmUgd2l0aCBnaXZlbiBDcmVtb25hIGxhYmVsLgoKSU5QVVQ6CgoKQGl0ZW1pemUgLQoKQGl0 ZW0gCkBjb2Rle2xhYmVsfSAtIHN0cmluZwpAZW5kIGl0ZW1pemUKCk9VVFBVVDoKCgpAaXRlbWl6 ZSAtCgpAaXRlbSAKQGNvZGV7bGlzdH0gLSBsaXN0IG9mIEVsbGlwdGljQ3VydmUgb2JqZWN0cy4K QGVuZCBpdGVtaXplCgpFWEFNUExFUzoKCkBleGFtcGxlCnNhZ2U6IGMgPSBDcmVtb25hRGF0YWJh c2UoKQpzYWdlOiBjLmlzb2dlbnlfY2xhc3MoJzExYTEnKQpbRWxsaXB0aWMgQ3VydmUgZGVmaW5l ZCBieSB5XjIgKyB5ID0geF4zIC0geF4yIC0gMTAqeCAtIDIwIG92ZXIgUmF0aW9uYWwgRmllbGQs CiBFbGxpcHRpYyBDdXJ2ZSBkZWZpbmVkIGJ5IHleMiArIHkgPSB4XjMgLSB4XjIgLSA3ODIwKngg LSAyNjM1ODAgb3ZlciBSYXRpb25hbCBGaWVsZCwKIEVsbGlwdGljIEN1cnZlIGRlZmluZWQgYnkg eV4yICsgeSA9IHheMyAtIHheMiBvdmVyIFJhdGlvbmFsIEZpZWxkXQpzYWdlOiBjLmlzb2dlbnlf Y2xhc3MoJzEyMDAxYTEnKSAgICMgb3B0aW9uYWwgLSBkYXRhYmFzZV9jcmVtb25hX2VsbGN1cnZl CltFbGxpcHRpYyBDdXJ2ZSBkZWZpbmVkIGJ5IHleMiArIHgqeSA9IHheMyAtIDEwMSp4ICsgMzgy IG92ZXIgUmF0aW9uYWwgRmllbGRdCkBlbmQgZXhhbXBsZQpAZW5kIGRlZmZuCgpAZ2VpbmRleCBp c29nZW55X2NsYXNzZXMoKSAoc2FnZS5kYXRhYmFzZXMuY3JlbW9uYS5NaW5pQ3JlbW9uYURhdGFi YXNlIG1ldGhvZCkKQGFuY2hvcntzYWdlL2RhdGFiYXNlcy9jcmVtb25hIHNhZ2UgZGF0YWJhc2Vz IGNyZW1vbmEgTWluaUNyZW1vbmFEYXRhYmFzZSBpc29nZW55X2NsYXNzZXN9QGFuY2hvcnsyMH0K QGRlZmZuIHtNZXRob2R9IGlzb2dlbnlfY2xhc3NlcyAoY29uZHVjdG9yKQoKUmV0dXJuIHRoZSBh bGxjdXJ2ZXMgZGF0YSAoYWludmFyaWFudHMsIHJhbmsgYW5kIHRvcnNpb24pIGZvciB0aGUKZWxs aXB0aWMgY3VydmVzIGluIHRoZSBkYXRhYmFzZSBvZiBnaXZlbiBjb25kdWN0b3IgYXMgYSBsaXN0 IG9mCmxpc3RzLCBvbmUgZm9yIGVhY2ggaXNvZ2VueSBjbGFzcy4gVGhlIGN1cnZlIHdpdGggbnVt YmVyIDEgaXMKYWx3YXlzIGxpc3RlZCBmaXJzdC4KCkVYQU1QTEVTOgoKQGV4YW1wbGUKc2FnZTog YyA9IENyZW1vbmFEYXRhYmFzZSgpCnNhZ2U6IGMuaXNvZ2VueV9jbGFzc2VzKDExKQpbW1tbMCwg LTEsIDEsIC0xMCwgLTIwXSwgMCwgNV0sCiBbWzAsIC0xLCAxLCAtNzgyMCwgLTI2MzU4MF0sIDAs IDFdLAogW1swLCAtMSwgMSwgMCwgMF0sIDAsIDVdXV0Kc2FnZTogYy5pc29nZW55X2NsYXNzZXMo MTIwMDEpICAgIyBvcHRpb25hbCAtIGRhdGFiYXNlX2NyZW1vbmFfZWxsY3VydmUKW1tbWzEsIDAs IDAsIC0xMDEsIDM4Ml0sIDEsIDFdXSwKIFtbWzAsIDAsIDEsIC0yNDcsIDE0OTRdLCAxLCAxXV0s CiBbW1swLCAwLCAxLCAtNCwgLTE4XSwgMSwgMV1dLAogW1tbMCwgMSwgMSwgLTEwLCAxOF0sIDEs IDFdXV0KQGVuZCBleGFtcGxlCkBlbmQgZGVmZm4KCkBnZWluZGV4IGl0ZXIoKSAoc2FnZS5kYXRh YmFzZXMuY3JlbW9uYS5NaW5pQ3JlbW9uYURhdGFiYXNlIG1ldGhvZCkKQGFuY2hvcntzYWdlL2Rh dGFiYXNlcy9jcmVtb25hIHNhZ2UgZGF0YWJhc2VzIGNyZW1vbmEgTWluaUNyZW1vbmFEYXRhYmFz ZSBpdGVyfUBhbmNob3J7MjF9CkBkZWZmbiB7TWV0aG9kfSBpdGVyIChjb25kdWN0b3JzKQoKUmV0 dXJuIGFuIGl0ZXJhdG9yIHRocm91Z2ggYWxsIGN1cnZlcyBpbiB0aGUgZGF0YWJhc2Ugd2l0aCBn aXZlbgpjb25kdWN0b3JzLgoKSU5QVVQ6CgoKQGl0ZW1pemUgLQoKQGl0ZW0gCkBjb2Rle2NvbmR1 Y3RvcnN9IC0gbGlzdCBvciBnZW5lcmF0b3Igb2YgaW50cwpAZW5kIGl0ZW1pemUKCk9VVFBVVDog Z2VuZXJhdG9yIHRoYXQgaXRlcmF0ZXMgb3ZlciBFbGxpcHRpY0N1cnZlIG9iamVjdHMuCgpFWEFN UExFUzoKCkBleGFtcGxlCnNhZ2U6IFtlLmNyZW1vbmFfbGFiZWwoKSBmb3IgZSBpbiBDcmVtb25h RGF0YWJhc2UoKS5pdGVyKFsxMS4uMTVdKV0KWycxMWExJywgJzExYTInLCAnMTFhMycsICcxNGEx JywgJzE0YTInLCAnMTRhMycsICcxNGE0JywgJzE0YTUnLAogJzE0YTYnLCAnMTVhMScsICcxNWEy JywgJzE1YTMnLCAnMTVhNCcsICcxNWE1JywgJzE1YTYnLCAnMTVhNycsICcxNWE4J10KQGVuZCBl eGFtcGxlCkBlbmQgZGVmZm4KCkBnZWluZGV4IGl0ZXJfb3B0aW1hbCgpIChzYWdlLmRhdGFiYXNl cy5jcmVtb25hLk1pbmlDcmVtb25hRGF0YWJhc2UgbWV0aG9kKQpAYW5jaG9ye3NhZ2UvZGF0YWJh c2VzL2NyZW1vbmEgc2FnZSBkYXRhYmFzZXMgY3JlbW9uYSBNaW5pQ3JlbW9uYURhdGFiYXNlIGl0 ZXJfb3B0aW1hbH1AYW5jaG9yezIyfQpAZGVmZm4ge01ldGhvZH0gaXRlcl9vcHRpbWFsIChjb25k dWN0b3JzKQoKUmV0dXJuIGFuIGl0ZXJhdG9yIHRocm91Z2ggYWxsIG9wdGltYWwgY3VydmVzIGlu IHRoZSBkYXRhYmFzZSB3aXRoIGdpdmVuIGNvbmR1Y3RvcnMuCgpJTlBVVDoKCgpAaXRlbWl6ZSAt CgpAaXRlbSAKQGNvZGV7Y29uZHVjdG9yc30gLSBsaXN0IG9yIGdlbmVyYXRvciBvZiBpbnRzCkBl bmQgaXRlbWl6ZQoKT1VUUFVUOgoKZ2VuZXJhdG9yIHRoYXQgaXRlcmF0ZXMgb3ZlciBFbGxpcHRp Y0N1cnZlIG9iamVjdHMuCgpFWEFNUExFUzoKCldlIGxpc3Qgb3B0aW1hbCBjdXJ2ZXMgd2l0aCBj b25kdWN0b3IgdXAgdG8gMjA6CgpAZXhhbXBsZQpzYWdlOiBbZS5jcmVtb25hX2xhYmVsKCkgZm9y IGUgaW4gQ3JlbW9uYURhdGFiYXNlKCkuaXRlcl9vcHRpbWFsKFsxMS4uMjBdKV0KWycxMWExJywg JzE0YTEnLCAnMTVhMScsICcxN2ExJywgJzE5YTEnLCAnMjBhMSddCkBlbmQgZXhhbXBsZQoKTm90 ZSB0aGUgdW5mb3J0dW5hdGUgOTkwaDMgc3BlY2lhbCBjYXNlOgoKQGV4YW1wbGUKc2FnZTogW2Uu Y3JlbW9uYV9sYWJlbCgpIGZvciBlIGluIENyZW1vbmFEYXRhYmFzZSgpLml0ZXJfb3B0aW1hbChb OTkwXSldClsnOTkwYTEnLCAnOTkwYjEnLCAnOTkwYzEnLCAnOTkwZDEnLCAnOTkwZTEnLCAnOTkw ZjEnLCAnOTkwZzEnLCAnOTkwaDMnLCAnOTkwaTEnLCAnOTkwajEnLCAnOTkwazEnLCAnOTkwbDEn XQpAZW5kIGV4YW1wbGUKQGVuZCBkZWZmbgoKQGdlaW5kZXggbGFyZ2VzdF9jb25kdWN0b3IoKSAo c2FnZS5kYXRhYmFzZXMuY3JlbW9uYS5NaW5pQ3JlbW9uYURhdGFiYXNlIG1ldGhvZCkKQGFuY2hv cntzYWdlL2RhdGFiYXNlcy9jcmVtb25hIHNhZ2UgZGF0YWJhc2VzIGNyZW1vbmEgTWluaUNyZW1v bmFEYXRhYmFzZSBsYXJnZXN0X2NvbmR1Y3Rvcn1AYW5jaG9yezIzfQpAZGVmZm4ge01ldGhvZH0g bGFyZ2VzdF9jb25kdWN0b3IgKCkKClRoZSBsYXJnZXN0IGNvbmR1Y3RvciBmb3Igd2hpY2ggdGhl IGRhdGFiYXNlIGlzIGNvbXBsZXRlLgoKT1VUUFVUOgoKCkBpdGVtaXplIC0KCkBpdGVtIApAY29k ZXtpbnR9IC0gbGFyZ2VzdCBjb25kdWN0b3IKQGVuZCBpdGVtaXplCgpFWEFNUExFUzoKCkBleGFt cGxlCnNhZ2U6IGMgPSBDcmVtb25hRGF0YWJhc2UoJ2NyZW1vbmEgbWluaScpCnNhZ2U6IGMubGFy Z2VzdF9jb25kdWN0b3IoKQo5OTk5CkBlbmQgZXhhbXBsZQpAZW5kIGRlZmZuCgpAZ2VpbmRleCBs aXN0KCkgKHNhZ2UuZGF0YWJhc2VzLmNyZW1vbmEuTWluaUNyZW1vbmFEYXRhYmFzZSBtZXRob2Qp CkBhbmNob3J7c2FnZS9kYXRhYmFzZXMvY3JlbW9uYSBzYWdlIGRhdGFiYXNlcyBjcmVtb25hIE1p bmlDcmVtb25hRGF0YWJhc2UgbGlzdH1AYW5jaG9yezI0fQpAZGVmZm4ge01ldGhvZH0gbGlzdCAo Y29uZHVjdG9ycykKClJldHVybnMgYSBsaXN0IG9mIGFsbCBjdXJ2ZXMgd2l0aCBnaXZlbiBjb25k dWN0b3JzLgoKSU5QVVQ6CgoKQGl0ZW1pemUgLQoKQGl0ZW0gCkBjb2Rle2NvbmR1Y3RvcnN9IC0g bGlzdCBvciBnZW5lcmF0b3Igb2YgaW50cwpAZW5kIGl0ZW1pemUKCk9VVFBVVDoKCgpAaXRlbWl6 ZSAtCgpAaXRlbSAKbGlzdCBvZiBFbGxpcHRpY0N1cnZlIG9iamVjdHMuCkBlbmQgaXRlbWl6ZQoK RVhBTVBMRVM6CgpAZXhhbXBsZQpzYWdlOiBDcmVtb25hRGF0YWJhc2UoKS5saXN0KFszN10pCltF bGxpcHRpYyBDdXJ2ZSBkZWZpbmVkIGJ5IHleMiArIHkgPSB4XjMgLSB4IG92ZXIgUmF0aW9uYWwg RmllbGQsCiBFbGxpcHRpYyBDdXJ2ZSBkZWZpbmVkIGJ5IHleMiArIHkgPSB4XjMgKyB4XjIgLSAy Myp4IC0gNTAgb3ZlciBSYXRpb25hbCBGaWVsZCwKIEVsbGlwdGljIEN1cnZlIGRlZmluZWQgYnkg eV4yICsgeSA9IHheMyArIHheMiAtIDE4NzMqeCAtIDMxODMzIG92ZXIgUmF0aW9uYWwgRmllbGQs CiBFbGxpcHRpYyBDdXJ2ZSBkZWZpbmVkIGJ5IHleMiArIHkgPSB4XjMgKyB4XjIgLSAzKnggKyAx IG92ZXIgUmF0aW9uYWwgRmllbGRdCkBlbmQgZXhhbXBsZQpAZW5kIGRlZmZuCgpAZ2VpbmRleCBs aXN0X29wdGltYWwoKSAoc2FnZS5kYXRhYmFzZXMuY3JlbW9uYS5NaW5pQ3JlbW9uYURhdGFiYXNl IG1ldGhvZCkKQGFuY2hvcntzYWdlL2RhdGFiYXNlcy9jcmVtb25hIHNhZ2UgZGF0YWJhc2VzIGNy ZW1vbmEgTWluaUNyZW1vbmFEYXRhYmFzZSBsaXN0X29wdGltYWx9QGFuY2hvcnsyNX0KQGRlZmZu IHtNZXRob2R9IGxpc3Rfb3B0aW1hbCAoY29uZHVjdG9ycykKClJldHVybnMgYSBsaXN0IG9mIGFs bCBvcHRpbWFsIGN1cnZlcyB3aXRoIGdpdmVuIGNvbmR1Y3RvcnMuCgpJTlBVVDoKCgpAaXRlbWl6 ZSAtCgpAaXRlbSAKCkB0YWJsZSBAYXNpcwoKQGl0ZW0gQGNvZGV7Y29uZHVjdG9yc30gLSBsaXN0 IG9yIGdlbmVyYXRvciBvZiBpbnRzCgpsaXN0IG9mIEVsbGlwdGljQ3VydmUgb2JqZWN0cy4KQGVu ZCB0YWJsZQpAZW5kIGl0ZW1pemUKCk9VVFBVVDoKCmxpc3Qgb2YgRWxsaXB0aWNDdXJ2ZSBvYmpl Y3RzLgoKRVhBTVBMRVM6CgpAZXhhbXBsZQpzYWdlOiBDcmVtb25hRGF0YWJhc2UoKS5saXN0X29w dGltYWwoWzM3XSkKW0VsbGlwdGljIEN1cnZlIGRlZmluZWQgYnkgeV4yICsgeSA9IHheMyAtIHgg b3ZlciBSYXRpb25hbCBGaWVsZCwKIEVsbGlwdGljIEN1cnZlIGRlZmluZWQgYnkgeV4yICsgeSA9 IHheMyArIHheMiAtIDIzKnggLSA1MCBvdmVyIFJhdGlvbmFsIEZpZWxkXQpAZW5kIGV4YW1wbGUK QGVuZCBkZWZmbgoKQGdlaW5kZXggbnVtYmVyX29mX2N1cnZlcygpIChzYWdlLmRhdGFiYXNlcy5j cmVtb25hLk1pbmlDcmVtb25hRGF0YWJhc2UgbWV0aG9kKQpAYW5jaG9ye3NhZ2UvZGF0YWJhc2Vz L2NyZW1vbmEgc2FnZSBkYXRhYmFzZXMgY3JlbW9uYSBNaW5pQ3JlbW9uYURhdGFiYXNlIG51bWJl cl9vZl9jdXJ2ZXN9QGFuY2hvcnsyNn0KQGRlZmZuIHtNZXRob2R9IG51bWJlcl9vZl9jdXJ2ZXMg KE49MCwgaT0wKQoKUmV0dXJucyB0aGUgbnVtYmVyIG9mIGN1cnZlcyBzdG9yZWQgaW4gdGhlIGRh dGFiYXNlIHdpdGggY29uZHVjdG9yCk4uIElmIE4gPSAwLCByZXR1cm5zIHRoZSB0b3RhbCBudW1i ZXIgb2YgY3VydmVzIGluIHRoZSBkYXRhYmFzZS4KCklmIGkgaXMgbm9uemVybywgcmV0dXJucyB0 aGUgbnVtYmVyIG9mIGN1cnZlcyBpbiB0aGUgaS10aCBpc29nZW55CmNsYXNzLiBJZiBpIGlzIGEg Q3JlbW9uYSBsZXR0ZXIgY29kZSwgZS5nLiwgJ2EnIG9yICdiYycsIGl0IGlzCmNvbnZlcnRlZCB0 byB0aGUgY29ycmVzcG9uZGluZyBudW1iZXIuCgpJTlBVVDoKCgpAaXRlbWl6ZSAtCgpAaXRlbSAK QGNvZGV7Tn0gLSBpbnQKCkBpdGVtIApAY29kZXtpfSAtIGludCBvciBzdHIKQGVuZCBpdGVtaXpl CgpPVVRQVVQ6IGludAoKRVhBTVBMRVM6CgpAZXhhbXBsZQpzYWdlOiBjID0gQ3JlbW9uYURhdGFi YXNlKCkKc2FnZTogYy5udW1iZXJfb2ZfY3VydmVzKDExKQozCnNhZ2U6IGMubnVtYmVyX29mX2N1 cnZlcygzNykKNApzYWdlOiBjLm51bWJlcl9vZl9jdXJ2ZXMoOTkwKQo0MgpzYWdlOiBudW0gPSBj Lm51bWJlcl9vZl9jdXJ2ZXMoKQpAZW5kIGV4YW1wbGUKQGVuZCBkZWZmbgoKQGdlaW5kZXggbnVt YmVyX29mX2lzb2dlbnlfY2xhc3NlcygpIChzYWdlLmRhdGFiYXNlcy5jcmVtb25hLk1pbmlDcmVt b25hRGF0YWJhc2UgbWV0aG9kKQpAYW5jaG9ye3NhZ2UvZGF0YWJhc2VzL2NyZW1vbmEgc2FnZSBk YXRhYmFzZXMgY3JlbW9uYSBNaW5pQ3JlbW9uYURhdGFiYXNlIG51bWJlcl9vZl9pc29nZW55X2Ns YXNzZXN9QGFuY2hvcnsyN30KQGRlZmZuIHtNZXRob2R9IG51bWJlcl9vZl9pc29nZW55X2NsYXNz ZXMgKE49MCkKClJldHVybnMgdGhlIG51bWJlciBvZiBpc29nZW55IGNsYXNzZXMgb2YgY3VydmVz IGluIHRoZSBkYXRhYmFzZSBvZgpjb25kdWN0b3IgTi4gSWYgTiBpcyAwLCByZXR1cm4gdGhlIHRv dGFsIG51bWJlciBvZiBpc29nZW55IGNsYXNzZXMKb2YgY3VydmVzIGluIHRoZSBkYXRhYmFzZS4K CklOUFVUOgoKCkBpdGVtaXplIC0KCkBpdGVtIApAY29kZXtOfSAtIGludApAZW5kIGl0ZW1pemUK Ck9VVFBVVDogaW50CgpFWEFNUExFUzoKCkBleGFtcGxlCnNhZ2U6IGMgPSBDcmVtb25hRGF0YWJh c2UoKQpzYWdlOiBjLm51bWJlcl9vZl9pc29nZW55X2NsYXNzZXMoMTEpCjEKc2FnZTogYy5udW1i ZXJfb2ZfaXNvZ2VueV9jbGFzc2VzKDM3KQoyCnNhZ2U6IG51bSA9IGMubnVtYmVyX29mX2lzb2dl bnlfY2xhc3NlcygpCkBlbmQgZXhhbXBsZQpAZW5kIGRlZmZuCgpAZ2VpbmRleCByYW5kb20oKSAo c2FnZS5kYXRhYmFzZXMuY3JlbW9uYS5NaW5pQ3JlbW9uYURhdGFiYXNlIG1ldGhvZCkKQGFuY2hv cntzYWdlL2RhdGFiYXNlcy9jcmVtb25hIHNhZ2UgZGF0YWJhc2VzIGNyZW1vbmEgTWluaUNyZW1v bmFEYXRhYmFzZSByYW5kb219QGFuY2hvcnsyOH0KQGRlZmZuIHtNZXRob2R9IHJhbmRvbSAoKQoK UmV0dXJucyBhIHJhbmRvbSBjdXJ2ZSBmcm9tIHRoZSBkYXRhYmFzZS4KCkVYQU1QTEVTOgoKQGV4 YW1wbGUKc2FnZTogQ3JlbW9uYURhdGFiYXNlKCkucmFuZG9tKCkgIyByYW5kb20gLS0gZGVwZW5k cyBvbiBkYXRhYmFzZSBpbnN0YWxsZWQKRWxsaXB0aWMgQ3VydmUgZGVmaW5lZCBieSB5XjIgKyB4 KnkgID0geF4zIC0geF4yIC0gMjI0KnggKyAzMDcyIG92ZXIgUmF0aW9uYWwgRmllbGQKQGVuZCBl eGFtcGxlCkBlbmQgZGVmZm4KCkBnZWluZGV4IHNtYWxsZXN0X2NvbmR1Y3RvcigpIChzYWdlLmRh dGFiYXNlcy5jcmVtb25hLk1pbmlDcmVtb25hRGF0YWJhc2UgbWV0aG9kKQpAYW5jaG9ye3NhZ2Uv ZGF0YWJhc2VzL2NyZW1vbmEgc2FnZSBkYXRhYmFzZXMgY3JlbW9uYSBNaW5pQ3JlbW9uYURhdGFi YXNlIHNtYWxsZXN0X2NvbmR1Y3Rvcn1AYW5jaG9yezI5fQpAZGVmZm4ge01ldGhvZH0gc21hbGxl c3RfY29uZHVjdG9yICgpCgpUaGUgc21hbGxlc3QgY29uZHVjdG9yIGZvciB3aGljaCB0aGUgZGF0 YWJhc2UgaXMgY29tcGxldGU6IGFsd2F5cyAxLgoKT1VUUFVUOgoKCkBpdGVtaXplIC0KCkBpdGVt IApAY29kZXtpbnR9IC0gc21hbGxlc3QgY29uZHVjdG9yCkBlbmQgaXRlbWl6ZQoKQGNhcnRvdWNo ZQpAcXVvdGF0aW9uIE5vdGUgClRoaXMgYWx3YXlzIHJldHVybnMgdGhlIGludGVnZXIgMSwgc2lu Y2UgdGhhdCBpcyB0aGUKc21hbGxlc3QgY29uZHVjdG9yIGZvciB3aGljaCB0aGUgZGF0YWJhc2Ug aXMgY29tcGxldGUsCmFsdGhvdWdoIHRoZXJlIGFyZSBubyBlbGxpcHRpYyBjdXJ2ZXMgb2YgY29u ZHVjdG9yIDEuICBUaGUKc21hbGxlc3QgY29uZHVjdG9yIG9mIGEgY3VydmUgaW4gdGhlIGRhdGFi YXNlIGlzIDExLgpAZW5kIHF1b3RhdGlvbgpAZW5kIGNhcnRvdWNoZQoKRVhBTVBMRVM6CgpAZXhh bXBsZQpzYWdlOiBDcmVtb25hRGF0YWJhc2UoKS5zbWFsbGVzdF9jb25kdWN0b3IoKQoxCkBlbmQg ZXhhbXBsZQpAZW5kIGRlZmZuCkBlbmQgZGVmZm4KCkBnZWluZGV4IGJ1aWxkKCkgKGluIG1vZHVs ZSBzYWdlLmRhdGFiYXNlcy5jcmVtb25hKQpAYW5jaG9ye3NhZ2UvZGF0YWJhc2VzL2NyZW1vbmEg c2FnZSBkYXRhYmFzZXMgY3JlbW9uYSBidWlsZH1AYW5jaG9yezJhfQpAZGVmZm4ge0Z1bmN0aW9u fSBzYWdlLmRhdGFiYXNlcy5jcmVtb25hLmJ1aWxkIChuYW1lLCBkYXRhX3RneiwgbGFyZ2VzdF9j b25kdWN0b3I9MCwgbWluaT1GYWxzZSwgZGVjb21wcmVzcz1UcnVlKQoKQnVpbGQgdGhlIENyZW1v bmFEYXRhYmFzZSB3aXRoIGdpdmVuIG5hbWUgZnJvbSBzY3JhdGNoCnVzaW5nIHRoZSBkYXRhX3Rn eiB0YXJiYWxsLgoKQGNhcnRvdWNoZQpAcXVvdGF0aW9uIE5vdGUgCkZvciBkYXRhIHVwIHRvIGxl dmVsIDM1MDAwMCwgdGhpcyBmdW5jdGlvbiB0YWtlcyBhYm91dAozbTQwcy4gIFRoZSByZXN1bHRp bmcgZGF0YWJhc2Ugb2NjdXBpZXMgNDI2TUIgZGlzayBzcGFjZS4KQGVuZCBxdW90YXRpb24KQGVu ZCBjYXJ0b3VjaGUKClRvIGNyZWF0ZSB0aGUgbGFyZ2UgQ3JlbW9uYSBkYXRhYmFzZSBmcm9tIENy ZW1vbmEncyBkYXRhX3Rnegp0YXJiYWxsLCBvYnRhaW5hYmxlIGZyb20KQGluZGljYXRldXJse2h0 dHA6Ly9ob21lcGFnZXMud2Fyd2ljay5hYy51ay9zdGFmZi9KLkUuQ3JlbW9uYS9mdHAvZGF0YS99 LCBydW4KdGhlIGZvbGxvd2luZyBjb21tYW5kOgoKQGV4YW1wbGUKc2FnZTogZCA9IHNhZ2UuZGF0 YWJhc2VzLmNyZW1vbmEuYnVpbGQoJ2NyZW1vbmEnLCdlY2RhdGEudGd6JykgICAjIG5vdCB0ZXN0 ZWQKQGVuZCBleGFtcGxlCkBlbmQgZGVmZm4KCkBnZWluZGV4IGNsYXNzX3RvX2ludCgpIChpbiBt b2R1bGUgc2FnZS5kYXRhYmFzZXMuY3JlbW9uYSkKQGFuY2hvcntzYWdlL2RhdGFiYXNlcy9jcmVt b25hIHNhZ2UgZGF0YWJhc2VzIGNyZW1vbmEgY2xhc3NfdG9faW50fUBhbmNob3J7MmJ9CkBkZWZm biB7RnVuY3Rpb259IHNhZ2UuZGF0YWJhc2VzLmNyZW1vbmEuY2xhc3NfdG9faW50IChrKQoKQ29u dmVydHMgY2xhc3MgaWQgc3RyaW5nIGludG8gYW4gaW50ZWdlci4gTm90ZSB0aGF0IHRoaXMgaXMg dGhlCmludmVyc2Ugb2YgY3JlbW9uYV9sZXR0ZXJfY29kZS4KCkVYQU1QTEVTOgoKQGV4YW1wbGUK c2FnZTogaW1wb3J0IHNhZ2UuZGF0YWJhc2VzLmNyZW1vbmEgYXMgY3JlbW9uYQpzYWdlOiBjcmVt b25hLmNsYXNzX3RvX2ludCgnYmEnKQoyNgpzYWdlOiBjcmVtb25hLmNsYXNzX3RvX2ludCgnY3Jl bW9uYScpCjgyMTg2MzU2MgpzYWdlOiBjcmVtb25hLmNyZW1vbmFfbGV0dGVyX2NvZGUoODIxODYz NTYyKQonY3JlbW9uYScKQGVuZCBleGFtcGxlCkBlbmQgZGVmZm4KCkBnZWluZGV4IGNyZW1vbmFf bGV0dGVyX2NvZGUoKSAoaW4gbW9kdWxlIHNhZ2UuZGF0YWJhc2VzLmNyZW1vbmEpCkBhbmNob3J7 c2FnZS9kYXRhYmFzZXMvY3JlbW9uYSBzYWdlIGRhdGFiYXNlcyBjcmVtb25hIGNyZW1vbmFfbGV0 dGVyX2NvZGV9QGFuY2hvcnsyY30KQGRlZmZuIHtGdW5jdGlvbn0gc2FnZS5kYXRhYmFzZXMuY3Jl bW9uYS5jcmVtb25hX2xldHRlcl9jb2RlIChuKQoKUmV0dXJucyB0aGUgQ3JlbW9uYSBsZXR0ZXIg Y29kZSBjb3JyZXNwb25kaW5nIHRvIGFuIGludGVnZXIuIEZvcgpleGFtcGxlLCAwIC0gYSAyNSAt IHogMjYgLSBiYSA1MSAtIGJ6IDUyIC0gY2EgNTMgLSBjYiBldGMuCgpAY2FydG91Y2hlCkBxdW90 YXRpb24gTm90ZSAKVGhpcyBpcyBqdXN0IHRoZSBiYXNlIDI2IHJlcHJlc2VudGF0aW9uIG9mIG4s IHdoZXJlIGE9MCwgYj0xLAouLi4sIHo9MjUuIFRoaXMgZXh0ZW5kcyB0aGUgb2xkIENyZW1vbmEg bm90YXRpb24gKGNvdW50aW5nIGZyb20KMCkgZm9yIHRoZSBmaXJzdCAyNiBjbGFzc2VzLCBhbmQg aXMgZGlmZmVyZW50IGZvciBjbGFzc2VzIGFib3ZlCjI2LgpAZW5kIHF1b3RhdGlvbgpAZW5kIGNh cnRvdWNoZQoKSU5QVVQ6CgoKQGl0ZW1pemUgLQoKQGl0ZW0gCkBjb2Rle259IChpbnQpIC0tIGEg bm9uLW5lZ2F0aXZlIGludGVnZXIKQGVuZCBpdGVtaXplCgpPVVRQVVQ6IHN0cgoKRVhBTVBMRVM6 CgpAZXhhbXBsZQpzYWdlOiBmcm9tIHNhZ2UuZGF0YWJhc2VzLmNyZW1vbmEgaW1wb3J0IGNyZW1v bmFfbGV0dGVyX2NvZGUKc2FnZTogY3JlbW9uYV9sZXR0ZXJfY29kZSgwKQonYScKc2FnZTogY3Jl bW9uYV9sZXR0ZXJfY29kZSgyNikKJ2JhJwpzYWdlOiBjcmVtb25hX2xldHRlcl9jb2RlKDI3KQon YmInCnNhZ2U6IGNyZW1vbmFfbGV0dGVyX2NvZGUoNTIxKQondWInCnNhZ2U6IGNyZW1vbmFfbGV0 dGVyX2NvZGUoNTMpCidjYicKc2FnZTogY3JlbW9uYV9sZXR0ZXJfY29kZSgyMDA1KQonY3pkJwpA ZW5kIGV4YW1wbGUKClRFU1RTOgoKQGV4YW1wbGUKc2FnZTogY3JlbW9uYV9sZXR0ZXJfY29kZShR USkKVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgouLi4KVmFsdWVFcnJvcjogQ3Jl bW9uYSBsZXR0ZXIgY29kZXMgYXJlIG9ubHkgZGVmaW5lZCBmb3Igbm9uLW5lZ2F0aXZlIGludGVn ZXJzCnNhZ2U6IGNyZW1vbmFfbGV0dGVyX2NvZGUoeCkKVHJhY2ViYWNrIChtb3N0IHJlY2VudCBj YWxsIGxhc3QpOgouLi4KVmFsdWVFcnJvcjogQ3JlbW9uYSBsZXR0ZXIgY29kZXMgYXJlIG9ubHkg ZGVmaW5lZCBmb3Igbm9uLW5lZ2F0aXZlIGludGVnZXJzCnNhZ2U6IGNyZW1vbmFfbGV0dGVyX2Nv ZGUoLTEpClRyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KToKLi4uClZhbHVlRXJyb3I6 IENyZW1vbmEgbGV0dGVyIGNvZGVzIGFyZSBvbmx5IGRlZmluZWQgZm9yIG5vbi1uZWdhdGl2ZSBp bnRlZ2VycwpzYWdlOiBjcmVtb25hX2xldHRlcl9jb2RlKDMuMTQxNTkpClRyYWNlYmFjayAobW9z dCByZWNlbnQgY2FsbCBsYXN0KToKLi4uClZhbHVlRXJyb3I6IENyZW1vbmEgbGV0dGVyIGNvZGVz IGFyZSBvbmx5IGRlZmluZWQgZm9yIG5vbi1uZWdhdGl2ZSBpbnRlZ2VycwpAZW5kIGV4YW1wbGUK QGVuZCBkZWZmbgoKQGdlaW5kZXggY3JlbW9uYV90b19sbWZkYigpIChpbiBtb2R1bGUgc2FnZS5k YXRhYmFzZXMuY3JlbW9uYSkKQGFuY2hvcntzYWdlL2RhdGFiYXNlcy9jcmVtb25hIHNhZ2UgZGF0 YWJhc2VzIGNyZW1vbmEgY3JlbW9uYV90b19sbWZkYn1AYW5jaG9yezJkfQpAZGVmZm4ge0Z1bmN0 aW9ufSBzYWdlLmRhdGFiYXNlcy5jcmVtb25hLmNyZW1vbmFfdG9fbG1mZGIgKGNyZW1vbmFfbGFi ZWwsIENEQj1Ob25lKQoKQ29udmVydHMgYSBDcmVtb25hIGxhYmVsIGludG8gYW4gTE1GREIgbGFi ZWwuCgpTZWUgQHJlZnsxZCwscGFyc2VfbG1mZGJfbGFiZWwoKX0gZm9yIGFuIGV4cGxhbmF0aW9u IG9mIExNRkRCIGxhYmVscy4KCklOUFVUOgoKCkBpdGVtaXplIC0KCkBpdGVtIApAY29kZXtjcmVt b25hX2xhYmVsfSAtLSBhIHN0cmluZywgdGhlIENyZW1vbmEgbGFiZWwgb2YgYSBjdXJ2ZS4KVGhp cyBjYW4gYmUgdGhlIGxhYmVsIG9mIGEgY3VydmUgKGUuZy4gJzk5MGoxJykgb3Igb2YgYW4gaXNv Z2VueQpjbGFzcyAoZS5nLiAnOTkwaicpCgpAaXRlbSAKQGNvZGV7Q0RCfSAtLSB0aGUgQ3JlbW9u YSBkYXRhYmFzZSBpbiB3aGljaCB0byBsb29rIHVwIHRoZSBpc29nZW55CmNsYXNzZXMgb2YgdGhl IHNhbWUgY29uZHVjdG9yLgpAZW5kIGl0ZW1pemUKCk9VVFBVVDoKCgpAaXRlbWl6ZSAtCgpAaXRl bSAKQGNvZGV7bG1mZGJfbGFiZWx9IC0tIGEgc3RyaW5nLCB0aGUgY29ycmVzcG9uZGluZyBMTUZE QiBsYWJlbC4KQGVuZCBpdGVtaXplCgpFWEFNUExFUzoKCkBleGFtcGxlCnNhZ2U6IGZyb20gc2Fn ZS5kYXRhYmFzZXMuY3JlbW9uYSBpbXBvcnQgY3JlbW9uYV90b19sbWZkYiwgbG1mZGJfdG9fY3Jl bW9uYQpzYWdlOiBjcmVtb25hX3RvX2xtZmRiKCc5OTBqMScpCic5OTAuaDMnCnNhZ2U6IGxtZmRi X3RvX2NyZW1vbmEoJzk5MC5oMycpCic5OTBqMScKQGVuZCBleGFtcGxlCgpURVNUUzoKCkBleGFt cGxlCnNhZ2U6IGZvciBsYWJlbCBpbiBbJzUwNzdhMScsJzY2YTMnLCcxMDJiJywnNDIwYzInXToK Li4uICAgICAgIGFzc2VydChsbWZkYl90b19jcmVtb25hKGNyZW1vbmFfdG9fbG1mZGIobGFiZWwp KSA9PSBsYWJlbCkKc2FnZTogZm9yIGxhYmVsIGluIFsnNDM4LmMyJywnMzA2LmInLCc0NjIuZjMn XToKLi4uICAgICAgIGFzc2VydChjcmVtb25hX3RvX2xtZmRiKGxtZmRiX3RvX2NyZW1vbmEobGFi ZWwpKSA9PSBsYWJlbCkKQGVuZCBleGFtcGxlCkBlbmQgZGVmZm4KCkBnZWluZGV4IGlzX29wdGlt YWxfaWQoKSAoaW4gbW9kdWxlIHNhZ2UuZGF0YWJhc2VzLmNyZW1vbmEpCkBhbmNob3J7c2FnZS9k YXRhYmFzZXMvY3JlbW9uYSBzYWdlIGRhdGFiYXNlcyBjcmVtb25hIGlzX29wdGltYWxfaWR9QGFu Y2hvcnsyZX0KQGRlZmZuIHtGdW5jdGlvbn0gc2FnZS5kYXRhYmFzZXMuY3JlbW9uYS5pc19vcHRp bWFsX2lkIChpZCkKClJldHVybnMgdHJ1ZSBpZiB0aGUgQ3JlbW9uYSBpZCByZWZlcnMgdG8gYW4g b3B0aW1hbCBjdXJ2ZSwgYW5kCmZhbHNlIG90aGVyd2lzZS4gVGhlIGN1cnZlIGlzIG9wdGltYWwg aWYgdGhlIGlkLCB3aGljaCBpcyBvZiB0aGUKZm9ybSBbbGV0dGVyIGNvZGVdW251bWJlcl0gaGFz IG51bWJlciAxLgoKQGNhcnRvdWNoZQpAcXVvdGF0aW9uIE5vdGUgCjk5MGgzIGlzIHRoZSBvcHRp bWFsIGN1cnZlIGluIHRoYXQgY2xhc3MsIHNvIGRvZXNuJ3Qgb2JleQp0aGlzIHJ1bGUuCkBlbmQg cXVvdGF0aW9uCkBlbmQgY2FydG91Y2hlCgpJTlBVVDoKCgpAaXRlbWl6ZSAtCgpAaXRlbSAKQGNv ZGV7aWR9IC0gc3RyIG9mIGZvcm0gbGV0dGVyIGNvZGUgZm9sbG93ZWQgYnkgYW4KaW50ZWdlciwg ZS5nLiwgYTMsIGJiNSwgZXRjLgpAZW5kIGl0ZW1pemUKCk9VVFBVVDogYm9vbAoKRVhBTVBMRVM6 CgpAZXhhbXBsZQpzYWdlOiBmcm9tIHNhZ2UuZGF0YWJhc2VzLmNyZW1vbmEgaW1wb3J0IGlzX29w dGltYWxfaWQKc2FnZTogaXNfb3B0aW1hbF9pZCgnYjEnKQpUcnVlCnNhZ2U6IGlzX29wdGltYWxf aWQoJ2JiMScpClRydWUKc2FnZTogaXNfb3B0aW1hbF9pZCgnYzEnKQpUcnVlCnNhZ2U6IGlzX29w dGltYWxfaWQoJ2MyJykKRmFsc2UKQGVuZCBleGFtcGxlCkBlbmQgZGVmZm4KCkBnZWluZGV4IGxt ZmRiX3RvX2NyZW1vbmEoKSAoaW4gbW9kdWxlIHNhZ2UuZGF0YWJhc2VzLmNyZW1vbmEpCkBhbmNo b3J7c2FnZS9kYXRhYmFzZXMvY3JlbW9uYSBzYWdlIGRhdGFiYXNlcyBjcmVtb25hIGxtZmRiX3Rv X2NyZW1vbmF9QGFuY2hvcnsyZn0KQGRlZmZuIHtGdW5jdGlvbn0gc2FnZS5kYXRhYmFzZXMuY3Jl bW9uYS5sbWZkYl90b19jcmVtb25hIChsbWZkYl9sYWJlbCwgQ0RCPU5vbmUpCgpDb252ZXJ0cyBh biBMTUZEQiBsYWJlIGludG8gYSBDcmVtb25hIGxhYmVsLgoKU2VlIEByZWZ7MWQsLHBhcnNlX2xt ZmRiX2xhYmVsKCl9IGZvciBhbiBleHBsYW5hdGlvbiBvZiBMTUZEQiBsYWJlbHMuCgpJTlBVVDoK CgpAaXRlbWl6ZSAtCgpAaXRlbSAKQGNvZGV7bG1mZGJfbGFiZWx9IC0tIGEgc3RyaW5nLCB0aGUg TE1GREIgbGFiZWwgb2YgYSBjdXJ2ZS4KVGhpcyBjYW4gYmUgdGhlIGxhYmVsIG9mIGEgY3VydmUg KGUuZy4gJzk5MC5qMScpIG9yIG9mIGFuIGlzb2dlbnkKY2xhc3MgKGUuZy4gJzk5MC5qJykKCkBp dGVtIApAY29kZXtDREJ9IC0tIHRoZSBDcmVtb25hIGRhdGFiYXNlIGluIHdoaWNoIHRvIGxvb2sg dXAgdGhlIGlzb2dlbnkKY2xhc3NlcyBvZiB0aGUgc2FtZSBjb25kdWN0b3IuCkBlbmQgaXRlbWl6 ZQoKT1VUUFVUOgoKCkBpdGVtaXplIC0KCkBpdGVtIApAY29kZXtjcmVtb25hX2xhYmVsfSAtLSBh IHN0cmluZywgdGhlIGNvcnJlc3BvbmRpbmcgQ3JlbW9uYSBsYWJlbC4KQGVuZCBpdGVtaXplCgpF WEFNUExFUzoKCkBleGFtcGxlCnNhZ2U6IGZyb20gc2FnZS5kYXRhYmFzZXMuY3JlbW9uYSBpbXBv cnQgY3JlbW9uYV90b19sbWZkYiwgbG1mZGJfdG9fY3JlbW9uYQpzYWdlOiBsbWZkYl90b19jcmVt b25hKCc5OTAuaDMnKQonOTkwajEnCnNhZ2U6IGNyZW1vbmFfdG9fbG1mZGIoJzk5MGoxJykKJzk5 MC5oMycKQGVuZCBleGFtcGxlCkBlbmQgZGVmZm4KCkBnZWluZGV4IG9sZF9jcmVtb25hX2xldHRl cl9jb2RlKCkgKGluIG1vZHVsZSBzYWdlLmRhdGFiYXNlcy5jcmVtb25hKQpAYW5jaG9ye3NhZ2Uv ZGF0YWJhc2VzL2NyZW1vbmEgc2FnZSBkYXRhYmFzZXMgY3JlbW9uYSBvbGRfY3JlbW9uYV9sZXR0 ZXJfY29kZX1AYW5jaG9yezMwfQpAZGVmZm4ge0Z1bmN0aW9ufSBzYWdlLmRhdGFiYXNlcy5jcmVt b25hLm9sZF9jcmVtb25hX2xldHRlcl9jb2RlIChuKQoKUmV0dXJucyB0aGUgQGVtcGh7b2xkfSBD cmVtb25hIGxldHRlciBjb2RlIGNvcnJlc3BvbmRpbmcgdG8gYW4gaW50ZWdlci4KaW50ZWdlci4K CkZvciBleGFtcGxlOgoKQGV4YW1wbGUKMSAgLS0+IEEKMjYgLS0+IFoKMjcgLS0+IEFBCjUyIC0t PiBaWgo1MyAtLT4gQUFBCmV0Yy4KQGVuZCBleGFtcGxlCgpJTlBVVDoKCgpAaXRlbWl6ZSAtCgpA aXRlbSAKQGNvZGV7bn0gLSBpbnQKQGVuZCBpdGVtaXplCgpPVVRQVVQ6IHN0cgoKRVhBTVBMRVM6 CgpAZXhhbXBsZQpzYWdlOiBmcm9tIHNhZ2UuZGF0YWJhc2VzLmNyZW1vbmEgaW1wb3J0IG9sZF9j cmVtb25hX2xldHRlcl9jb2RlCnNhZ2U6IG9sZF9jcmVtb25hX2xldHRlcl9jb2RlKDEpCidBJwpz YWdlOiBvbGRfY3JlbW9uYV9sZXR0ZXJfY29kZSgyNikKJ1onCnNhZ2U6IG9sZF9jcmVtb25hX2xl dHRlcl9jb2RlKDI3KQonQUEnCnNhZ2U6IG9sZF9jcmVtb25hX2xldHRlcl9jb2RlKDUyMSkKJ0FB QUFBQUFBQUFBQUFBQUFBQUFBQScKc2FnZTogb2xkX2NyZW1vbmFfbGV0dGVyX2NvZGUoNTMpCidB QUEnCnNhZ2U6IG9sZF9jcmVtb25hX2xldHRlcl9jb2RlKDIwMDUpCidDQ0NDQ0NDQ0NDQ0NDQ0ND Q0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0ND Q0NDQ0MnCkBlbmQgZXhhbXBsZQpAZW5kIGRlZmZuCgpAZ2VpbmRleCBwYXJzZV9jcmVtb25hX2xh YmVsKCkgKGluIG1vZHVsZSBzYWdlLmRhdGFiYXNlcy5jcmVtb25hKQpAYW5jaG9ye3NhZ2UvZGF0 YWJhc2VzL2NyZW1vbmEgc2FnZSBkYXRhYmFzZXMgY3JlbW9uYSBwYXJzZV9jcmVtb25hX2xhYmVs fUBhbmNob3J7MzF9CkBkZWZmbiB7RnVuY3Rpb259IHNhZ2UuZGF0YWJhc2VzLmNyZW1vbmEucGFy c2VfY3JlbW9uYV9sYWJlbCAobGFiZWwpCgpHaXZlbiBhIENyZW1vbmEgbGFiZWwgdGhhdCBkZWZp bmVzIGFuIGVsbGlwdGljCmN1cnZlLCBlLmcuLCAxMWExIG9yIDM3YjMsIHBhcnNlIHRoZSBsYWJl bCBhbmQgcmV0dXJuIHRoZQpjb25kdWN0b3IsIGlzb2dlbnkgY2xhc3MgbGFiZWwsIGFuZCBudW1i ZXIuCgpGb3IgdGhpcyBmdW5jdGlvbiwgdGhlIGN1cnZlIG51bWJlciBtYXkgYmUgb21pdHRlZCwg aW4gd2hpY2ggY2FzZQppdCBkZWZhdWx0cyB0byAxLiAgSWYgdGhlIGN1cnZlIG51bWJlciBhbmQg aXNvZ2VueSBjbGFzcyBhcmUgYm90aApvbWl0dGVkIChsYWJlbCBpcyBqdXN0IGEgc3RyaW5nIHJl cHJlc2VudGluZyBhIGNvbmR1Y3RvciksIHRoZW4KdGhlIGlzb2dlbnkgY2xhc3MgZGVmYXVsdHMg dG8gJ2EnIGFuZCB0aGUgbnVtYmVyIHRvIDEuICBWYWxpZApsYWJlbHMgY29uc2lzdCBvZiBvbmUg b3IgbW9yZSBkaWdpdHMsIGZvbGxvd2VkIGJ5IHplcm8gb3IgbW9yZQpsZXR0ZXJzIChlaXRoZXIg YWxsIGluIHVwcGVyIGNhc2UgZm9yIGFuIG9sZCBDcmVtb25hIGxhYmVsLCBvciBhbGwKaW4gbG93 ZXIgY2FzZSksIGZvbGxvd2VkIGJ5IHplcm8gb3IgbW9yZSBkaWdpdHMuCgpJTlBVVDoKCgpAaXRl bWl6ZSAtCgpAaXRlbSAKQGNvZGV7bGFiZWx9IC0gc3RyCkBlbmQgaXRlbWl6ZQoKT1VUUFVUOgoK CkBpdGVtaXplIC0KCkBpdGVtIApAY29kZXtpbnR9IC0gdGhlIGNvbmR1Y3RvcgoKQGl0ZW0gCkBj b2Rle3N0cn0gLSB0aGUgaXNvZ2VueSBjbGFzcyBsYWJlbAoKQGl0ZW0gCkBjb2Rle2ludH0gLSB0 aGUgbnVtYmVyCkBlbmQgaXRlbWl6ZQoKRVhBTVBMRVM6CgpAZXhhbXBsZQpzYWdlOiBmcm9tIHNh Z2UuZGF0YWJhc2VzLmNyZW1vbmEgaW1wb3J0IHBhcnNlX2NyZW1vbmFfbGFiZWwKc2FnZTogcGFy c2VfY3JlbW9uYV9sYWJlbCgnMzdhMicpCigzNywgJ2EnLCAyKQpzYWdlOiBwYXJzZV9jcmVtb25h X2xhYmVsKCczN2IxJykKKDM3LCAnYicsIDEpCnNhZ2U6IHBhcnNlX2NyZW1vbmFfbGFiZWwoJzEw YmIyJykKKDEwLCAnYmInLCAyKQpzYWdlOiBwYXJzZV9jcmVtb25hX2xhYmVsKCcxMWEnKQooMTEs ICdhJywgMSkKc2FnZTogcGFyc2VfY3JlbW9uYV9sYWJlbCgnMTEnKQooMTEsICdhJywgMSkKQGVu ZCBleGFtcGxlCgpWYWxpZCBvbGQgQ3JlbW9uYSBsYWJlbHMgYXJlIGFsbG93ZWQ6CgpAZXhhbXBs ZQpzYWdlOiBwYXJzZV9jcmVtb25hX2xhYmVsKCcxN0NDQ0MnKQooMTcsICdkYycsIDEpCnNhZ2U6 IHBhcnNlX2NyZW1vbmFfbGFiZWwoJzVBQjInKQpUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwg bGFzdCk6Ci4uLgpWYWx1ZUVycm9yOiA1QUIyIGlzIG5vdCBhIHZhbGlkIENyZW1vbmEgbGFiZWwK QGVuZCBleGFtcGxlCgpURVNUUzoKCkBleGFtcGxlCnNhZ2U6IGZyb20gc2FnZS5kYXRhYmFzZXMu Y3JlbW9uYSBpbXBvcnQgcGFyc2VfY3JlbW9uYV9sYWJlbApzYWdlOiBwYXJzZV9jcmVtb25hX2xh YmVsKCd4MTEnKQpUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6Ci4uLgpWYWx1ZUVy cm9yOiB4MTEgaXMgbm90IGEgdmFsaWQgQ3JlbW9uYSBsYWJlbApAZW5kIGV4YW1wbGUKQGVuZCBk ZWZmbgoKQGdlaW5kZXggcGFyc2VfbG1mZGJfbGFiZWwoKSAoaW4gbW9kdWxlIHNhZ2UuZGF0YWJh c2VzLmNyZW1vbmEpCkBhbmNob3J7c2FnZS9kYXRhYmFzZXMvY3JlbW9uYSBzYWdlIGRhdGFiYXNl cyBjcmVtb25hIHBhcnNlX2xtZmRiX2xhYmVsfUBhbmNob3J7MWR9CkBkZWZmbiB7RnVuY3Rpb259 IHNhZ2UuZGF0YWJhc2VzLmNyZW1vbmEucGFyc2VfbG1mZGJfbGFiZWwgKGxhYmVsKQoKR2l2ZW4g YW4gTE1GREIgbGFiZWwgdGhhdCBkZWZpbmVzIGFuIGVsbGlwdGljIGN1cnZlLCBlLmcuLCAxMS5h MQpvciAzNy5iMywgcGFyc2UgdGhlIGxhYmVsIGFuZCByZXR1cm4gdGhlIGNvbmR1Y3RvciwgaXNv Z2VueSBjbGFzcwpsYWJlbCwgYW5kIG51bWJlci4KClRoZSBMTUZEQiBsYWJlbCAobmFtZWQgYWZ0 ZXIgdGhlIEwtZnVuY3Rpb25zIGFuZCBtb2R1bGFyIGZvcm1zCmRhdGFiYXNlKSwgaXMgZGV0ZXJt aW5lZCBieSB0aGUgZm9sbG93aW5nIHR3byBvcmRlcnM6CgoKQGl0ZW1pemUgLQoKQGl0ZW0gCklz b2dlbnkgY2xhc3NlcyB3aXRoIHRoZSBzYW1lIGNvbmR1Y3RvciBhcmUgb3JkZXJlZApsZXhpY29n cmFwaGljYWxseSBieSB0aGUgY29lZmZpY2llbnRzIGluIHRoZSBxLWV4cGFuc2lvbiBvZiB0aGUK YXNzb2NpYXRlZCBtb2R1bGFyIGZvcm0uCgpAaXRlbSAKQ3VydmVzIHdpdGhpbiB0aGUgc2FtZSBp c29nZW55IGNsYXNzIGFyZSBvcmRlcmVkCmxleGljb2dyYXBoaWNhbGx5IGJ5IHRoZSBhLWludmFy aWFudHMgb2YgdGhlIG1pbmltYWwgbW9kZWwuCkBlbmQgaXRlbWl6ZQoKVGhlIGZvcm1hdCBpcyA8 Y29uZHVjdG9yPi48aXNvPjxjdXJ2ZT4sIHdoZXJlIHRoZSBpc29nZW55IGNsYXNzIGlzCmVuY29k ZWQgdXNpbmcgdGhlIHNhbWUgYmFzZS0yNiBlbmNvZGluZyBpbnRvIGxldHRlcnMgdXNlZCBpbgpD cmVtb25hJ3MgbGFiZWxzLiAgRm9yIGV4YW1wbGUsIDk5MC5oMyBpcyB0aGUgc2FtZSBhcyBDcmVt b25hJ3MgOTkwajEKCkZvciB0aGlzIGZ1bmN0aW9uLCB0aGUgY3VydmUgbnVtYmVyIG1heSBiZSBv bWl0dGVkLCBpbiB3aGljaCBjYXNlCml0IGRlZmF1bHRzIHRvIDEuICBJZiB0aGUgY3VydmUgbnVt YmVyIGFuZCBpc29nZW55IGNsYXNzIGFyZSBib3RoCm9taXR0ZWQgKGxhYmVsIGlzIGp1c3QgYSBz dHJpbmcgcmVwcmVzZW50aW5nIGEgY29uZHVjdG9yKSwgdGhlbgp0aGUgaXNvZ2VueSBjbGFzcyBk ZWZhdWx0cyB0byAnYScgYW5kIHRoZSBudW1iZXIgdG8gMS4KCklOUFVUOgoKCkBpdGVtaXplIC0K CkBpdGVtIApAY29kZXtsYWJlbH0gLSBzdHIKQGVuZCBpdGVtaXplCgpPVVRQVVQ6CgoKQGl0ZW1p emUgLQoKQGl0ZW0gCkBjb2Rle2ludH0gLSB0aGUgY29uZHVjdG9yCgpAaXRlbSAKQGNvZGV7c3Ry fSAtIHRoZSBpc29nZW55IGNsYXNzIGxhYmVsCgpAaXRlbSAKQGNvZGV7aW50fSAtIHRoZSBudW1i ZXIKQGVuZCBpdGVtaXplCgpFWEFNUExFUzoKCkBleGFtcGxlCnNhZ2U6IGZyb20gc2FnZS5kYXRh YmFzZXMuY3JlbW9uYSBpbXBvcnQgcGFyc2VfbG1mZGJfbGFiZWwKc2FnZTogcGFyc2VfbG1mZGJf bGFiZWwoJzM3LmEyJykKKDM3LCAnYScsIDIpCnNhZ2U6IHBhcnNlX2xtZmRiX2xhYmVsKCczNy5i JykKKDM3LCAnYicsIDEpCnNhZ2U6IHBhcnNlX2xtZmRiX2xhYmVsKCcxMC5iYjInKQooMTAsICdi YicsIDIpCkBlbmQgZXhhbXBsZQpAZW5kIGRlZmZuCgpAZ2VpbmRleCBzb3J0X2tleSgpIChpbiBt b2R1bGUgc2FnZS5kYXRhYmFzZXMuY3JlbW9uYSkKQGFuY2hvcntzYWdlL2RhdGFiYXNlcy9jcmVt b25hIHNhZ2UgZGF0YWJhc2VzIGNyZW1vbmEgc29ydF9rZXl9QGFuY2hvcnszMn0KQGRlZmZuIHtG dW5jdGlvbn0gc2FnZS5kYXRhYmFzZXMuY3JlbW9uYS5zb3J0X2tleSAoa2V5MSkKCkNvbXBhcmlz b24ga2V5IGZvciBjdXJ2ZSBpZCBzdHJpbmdzLgoKQGNhcnRvdWNoZQpAcXVvdGF0aW9uIE5vdGUg Ck5vdCB0aGUgc2FtZSBhcyBzdGFuZGFyZCBsZXhpY29ncmFwaGljIG9yZGVyIQpAZW5kIHF1b3Rh dGlvbgpAZW5kIGNhcnRvdWNoZQoKRVhBTVBMRVM6CgpAZXhhbXBsZQpzYWdlOiBmcm9tIHNhZ2Uu ZGF0YWJhc2VzLmNyZW1vbmEgaW1wb3J0IHNvcnRfa2V5CnNhZ2U6IGwgPSBbJ2JhMScsICd6MSdd CnNhZ2U6IHNvcnRlZChsLCBrZXk9c29ydF9rZXkpClsnejEnLCAnYmExJ10KQGVuZCBleGFtcGxl CkBlbmQgZGVmZm4KCkBnZWluZGV4IHNwbGl0X2NvZGUoKSAoaW4gbW9kdWxlIHNhZ2UuZGF0YWJh c2VzLmNyZW1vbmEpCkBhbmNob3J7c2FnZS9kYXRhYmFzZXMvY3JlbW9uYSBzYWdlIGRhdGFiYXNl cyBjcmVtb25hIHNwbGl0X2NvZGV9QGFuY2hvcnszM30KQGRlZmZuIHtGdW5jdGlvbn0gc2FnZS5k YXRhYmFzZXMuY3JlbW9uYS5zcGxpdF9jb2RlIChrZXkpCgpTcGxpdHMgY2xhc3MrY3VydmUgaWQg c3RyaW5nIGludG8gaXRzIHR3byBwYXJ0cy4KCkVYQU1QTEVTOgoKQGV4YW1wbGUKc2FnZTogaW1w b3J0IHNhZ2UuZGF0YWJhc2VzLmNyZW1vbmEgYXMgY3JlbW9uYQpzYWdlOiBjcmVtb25hLnNwbGl0 X2NvZGUoJ2JhMicpCignYmEnLCAnMicpCkBlbmQgZXhhbXBsZQpAZW5kIGRlZmZuCgpAYyBub2Rv Y3Rlc3QKCkBub2RlIFRoZSBTdGVpbi1XYXRraW5zIHRhYmxlIG9mIGVsbGlwdGljIGN1cnZlcyxK b2huIEpvbmVzJ3MgdGFibGVzIG9mIG51bWJlciBmaWVsZHMsQ3JlbW9uYSdzIHRhYmxlcyBvZiBl bGxpcHRpYyBjdXJ2ZXMsVG9wCkBhbmNob3J7c2FnZS9kYXRhYmFzZXMvc3RlaW5fd2F0a2lucyB0 aGUtc3RlaW4td2F0a2lucy10YWJsZS1vZi1lbGxpcHRpYy1jdXJ2ZXN9QGFuY2hvcnszNH1AYW5j aG9ye3NhZ2UvZGF0YWJhc2VzL3N0ZWluX3dhdGtpbnMgc2FnZS1kYXRhYmFzZXMtc3RlaW4td2F0 a2luc31AYW5jaG9yezM1fUBhbmNob3J7c2FnZS9kYXRhYmFzZXMvc3RlaW5fd2F0a2lucyBkb2N9 QGFuY2hvcnszNn0KQGNoYXB0ZXIgVGhlIFN0ZWluLVdhdGtpbnMgdGFibGUgb2YgZWxsaXB0aWMg Y3VydmVzCgoKQGMgVGhpcyBmaWxlIGhhcyBiZWVuIGF1dG9nZW5lcmF0ZWQuCkBhbmNob3J7c2Fn ZS9kYXRhYmFzZXMvc3RlaW5fd2F0a2lucyBtb2R1bGUtc2FnZSBkYXRhYmFzZXMgc3RlaW5fd2F0 a2luc31AYW5jaG9ye2F9CkBnZWluZGV4IHNhZ2UuZGF0YWJhc2VzLnN0ZWluX3dhdGtpbnMgKG1v ZHVsZSkKClNhZ2UgZ2l2ZXMgYWNjZXNzIHRvIHRoZSBTdGVpbi1XYXRraW5zIHRhYmxlIG9mIGVs bGlwdGljIGN1cnZlcywgdmlhIGFuCm9wdGlvbmFsIHBhY2thZ2UgdGhhdCB5b3UgbXVzdCBpbnN0 YWxsLiBUaGlzIGlzIGEgaHVnZSBkYXRhYmFzZSBvZiBlbGxpcHRpYwpjdXJ2ZXMuIFlvdSBjYW4g aW5zdGFsbCB0aGUgZGF0YWJhc2UgKGEgMi42R0IgcGFja2FnZSkgd2l0aCB0aGUgY29tbWFuZAoK QGV4YW1wbGUKc2FnZSAtaSBkYXRhYmFzZV9zdGVpbl93YXRraW5zCkBlbmQgZXhhbXBsZQoKWW91 IGNhbiBhbHNvIGF1dG9tYXRpY2FsbHkgZG93bmxvYWQgYSBzbWFsbCB2ZXJzaW9uLCB3aGljaCB0 YWtlcyBtdWNoIGxlc3MKdGltZSwgdXNpbmcgdGhlIGNvbW1hbmQKCkBleGFtcGxlCnNhZ2UgLWkg ZGF0YWJhc2Vfc3RlaW5fd2F0a2luc19taW5pCkBlbmQgZXhhbXBsZQoKVGhpcyBkYXRhYmFzZSBj b3ZlcnMgYSB3aWRlIHJhbmdlIG9mIGNvbmR1Y3RvcnMsIGJ1dCB1bmxpa2UgdGhlCkByZWZ7MSws Q3JlbW9uYSBkYXRhYmFzZX0sIHRoaXMgZGF0YWJhc2UgbmVlZCBub3QgbGlzdAphbGwgY3VydmVz IG9mIGEgZ2l2ZW4gY29uZHVjdG9yLiBJdCBsaXN0cyB0aGUgY3VydmVzIHdob3NlIGNvZWZmaWNp ZW50cyBhcmUgbm90CiJ0b28gbGFyZ2UiIChzZWUgQHJlZnszNywsW1N0ZWluV2F0a2luc119KS4K CgpAaXRlbWl6ZSAtCgpAaXRlbSAKVGhlIGNvbW1hbmQgQGNvZGV7U3RlaW5XYXRraW5zQWxsRGF0 YShuKX0gcmV0dXJucyBhbiBpdGVyYXRvciBvdmVyIHRoZSBjdXJ2ZXMKaW4gdGhlIEBtYXRoe259 LXRoIFN0ZWluLVdhdGtpbnMgdGFibGUsIHdoaWNoIGNvbnRhaW5zIGVsbGlwdGljIGN1cnZlcyBv Zgpjb25kdWN0b3IgYmV0d2VlbiBAbWF0aHtuMTBeNX0gYW5kIEBtYXRoeyhuKzEpMTBeNX0uIEhl cmUgQG1hdGh7bn0gY2FuIGJlIGJldHdlZW4gMCBhbmQKOTk5LCBpbmNsdXNpdmUuCgpAaXRlbSAK VGhlIGNvbW1hbmQgQGNvZGV7U3RlaW5XYXRraW5zUHJpbWVEYXRhKG4pfSByZXR1cm5zIGFuIGl0 ZXJhdG9yIG92ZXIgdGhlIGN1cnZlcwppbiB0aGUgQG1hdGh7bl5Ae3RoQH19IFN0ZWluLVdhdGtp bnMgcHJpbWUgdGFibGUsIHdoaWNoIGNvbnRhaW5zIHByaW1lIGNvbmR1Y3RvcgplbGxpcHRpYyBj dXJ2ZXMgb2YgY29uZHVjdG9yIGJldHdlZW4gQG1hdGh7bjEwXjZ9IGFuZCBAbWF0aHsobisxKTEw XjZ9LiBIZXJlIEBtYXRoe259CnZhcmllcyBiZXR3ZWVuIDAgYW5kIDk5LCBpbmNsdXNpdmUuCkBl bmQgaXRlbWl6ZQoKRVhBTVBMRVM6IFdlIG9idGFpbiB0aGUgZmlyc3QgdGFibGUgb2YgZWxsaXB0 aWMgY3VydmVzLgoKQGV4YW1wbGUKc2FnZTogZCA9IFN0ZWluV2F0a2luc0FsbERhdGEoMCkKc2Fn ZTogZApTdGVpbi1XYXRraW5zIERhdGFiYXNlIGEuMCBJdGVyYXRvcgpAZW5kIGV4YW1wbGUKCldl IHR5cGUgQGNvZGV7bmV4dChkKX0gdG8gZ2V0IGVhY2ggaXNvZ2VueSBjbGFzcyBvZgpjdXJ2ZXMg ZnJvbSBAY29kZXtkfToKCkBleGFtcGxlCnNhZ2U6IEMgPSBuZXh0KGQpICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAjIG9wdGlvbmFsIC0gZGF0YWJhc2Vfc3RlaW5fd2F0a2lucwpz YWdlOiBDICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBvcHRp b25hbCAtIGRhdGFiYXNlX3N0ZWluX3dhdGtpbnMKU3RlaW4tV2F0a2lucyBpc29nZW55IGNsYXNz IG9mIGNvbmR1Y3RvciAxMQpzYWdlOiBuZXh0KGQpICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIyBvcHRpb25hbCAtIGRhdGFiYXNlX3N0ZWluX3dhdGtpbnMKU3RlaW4tV2F0 a2lucyBpc29nZW55IGNsYXNzIG9mIGNvbmR1Y3RvciAxNApzYWdlOiBuZXh0KGQpICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBvcHRpb25hbCAtIGRhdGFiYXNlX3N0ZWlu X3dhdGtpbnMKU3RlaW4tV2F0a2lucyBpc29nZW55IGNsYXNzIG9mIGNvbmR1Y3RvciAxNQpAZW5k IGV4YW1wbGUKCkFuIGlzb2dlbnkgY2xhc3MgaGFzIGEgbnVtYmVyIG9mIGF0dHJpYnV0ZXMgdGhh dCBnaXZlIGRhdGEgYWJvdXQKdGhlIGlzb2dlbnkgY2xhc3MsIHN1Y2ggYXMgdGhlIHJhbmssIGVx dWF0aW9ucyBvZiBjdXJ2ZXMsCmNvbmR1Y3RvciwgbGVhZGluZyBjb2VmZmljaWVudCBvZiBAbWF0 aHtMfS1mdW5jdGlvbiwgZXRjLgoKQGV4YW1wbGUKc2FnZTogQy5kYXRhICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAjIG9wdGlvbmFsIC0gZGF0YWJhc2Vfc3RlaW5fd2F0 a2lucwpbJzExJywgJ1sxMV0nLCAnMCcsICcwLjI1Mzg0MicsICcyNScsICcrKjEnXQpzYWdlOiBD LmN1cnZlcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgb3B0aW9uYWwg LSBkYXRhYmFzZV9zdGVpbl93YXRraW5zCltbWzAsIC0xLCAxLCAwLCAwXSwgJygxKScsICcxJywg JzUnXSwKIFtbMCwgLTEsIDEsIC0xMCwgLTIwXSwgJyg1KScsICcxJywgJzUnXSwKIFtbMCwgLTEs IDEsIC03ODIwLCAtMjYzNTgwXSwgJygxKScsICcxJywgJzEnXV0Kc2FnZTogQy5jb25kdWN0b3Ig ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIG9wdGlvbmFsIC0gZGF0YWJhc2Vf c3RlaW5fd2F0a2lucwoxMQpzYWdlOiBDLmxlYWRpbmdfY29lZmZpY2llbnQgICAgICAgICAgICAg ICAgICAgICAgICAgICMgb3B0aW9uYWwgLSBkYXRhYmFzZV9zdGVpbl93YXRraW5zCicwLjI1Mzg0 MicKc2FnZTogQy5tb2R1bGFyX2RlZ3JlZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAj IG9wdGlvbmFsIC0gZGF0YWJhc2Vfc3RlaW5fd2F0a2lucwonKyoxJwpzYWdlOiBDLnJhbmsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgb3B0aW9uYWwgLSBkYXRhYmFz ZV9zdGVpbl93YXRraW5zCjAKc2FnZTogQy5pc29nZW55X251bWJlciAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAjIG9wdGlvbmFsIC0gZGF0YWJhc2Vfc3RlaW5fd2F0a2lucwonMjUnCkBl bmQgZXhhbXBsZQoKSWYgd2Ugd2VyZSB0byBjb250aW51ZSB0eXBpbmcgQGNvZGV7bmV4dChkKX0g d2Ugd291bGQKaXRlcmF0ZSBvdmVyIGFsbCBjdXJ2ZXMgaW4gdGhlIFN0ZWluLVdhdGtpbnMgZGF0 YWJhc2UgdXAgdG8KY29uZHVjdG9yIEBtYXRoezEwXjV9LiBXZSBjb3VsZCBhbHNvIHR5cGUgQGNv ZGV7Zm9yIEMgaW4gZDoKLi4ufQoKVG8gYWNjZXNzIHRoZSBkYXRhIGZpbGUgc3RhcnRpbmcgYXQg QG1hdGh7MTBeNX0gZG8gdGhlCmZvbGxvd2luZzoKCkBleGFtcGxlCnNhZ2U6IGQgPSBTdGVpbldh dGtpbnNBbGxEYXRhKDEpCnNhZ2U6IEMgPSBuZXh0KGQpICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICMgb3B0aW9uYWwgLSBkYXRhYmFzZV9zdGVpbl93YXRraW5zCnNhZ2U6IEMgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgb3B0aW9uYWwgLSBkYXRh YmFzZV9zdGVpbl93YXRraW5zClN0ZWluLVdhdGtpbnMgaXNvZ2VueSBjbGFzcyBvZiBjb25kdWN0 b3IgMTAwMDAyCnNhZ2U6IEMuY3VydmVzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICMgb3B0aW9uYWwgLSBkYXRhYmFzZV9zdGVpbl93YXRraW5zCltbWzEsIDEsIDAsIDExMiwg MF0sICcoOCwxLDIsMSknLCAnWCcsICcyJ10sCiBbWzEsIDEsIDAsIC00NDgsIC01NjBdLCAnWzQs MiwxLDJdJywgJ1gnLCAnMiddXQpAZW5kIGV4YW1wbGUKCk5leHQgd2UgYWNjZXNzIHRoZSBwcmlt ZS1jb25kdWN0b3IgZGF0YToKCkBleGFtcGxlCnNhZ2U6IGQgPSBTdGVpbldhdGtpbnNQcmltZURh dGEoMCkKc2FnZTogQyA9IG5leHQoZCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IyBvcHRpb25hbCAtIGRhdGFiYXNlX3N0ZWluX3dhdGtpbnMKc2FnZTogQyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBvcHRpb25hbCAtIGRhdGFiYXNlX3N0ZWlu X3dhdGtpbnMKU3RlaW4tV2F0a2lucyBpc29nZW55IGNsYXNzIG9mIGNvbmR1Y3RvciAxMQpAZW5k IGV4YW1wbGUKCkVhY2ggY2FsbCBAY29kZXtuZXh0KGQpfSBnaXZlcyBhbm90aGVyIGVsbGlwdGlj IGN1cnZlIG9mCnByaW1lIGNvbmR1Y3RvcjoKCkBleGFtcGxlCnNhZ2U6IEMgPSBuZXh0KGQpICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgb3B0aW9uYWwgLSBkYXRhYmFzZV9zdGVp bl93YXRraW5zCnNhZ2U6IEMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICMgb3B0aW9uYWwgLSBkYXRhYmFzZV9zdGVpbl93YXRraW5zClN0ZWluLVdhdGtpbnMgaXNv Z2VueSBjbGFzcyBvZiBjb25kdWN0b3IgMTcKc2FnZTogQy5jdXJ2ZXMgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIyBvcHRpb25hbCAtIGRhdGFiYXNlX3N0ZWluX3dhdGtpbnMK W1tbMSwgLTEsIDEsIC0xLCAwXSwgJ1sxXScsICcxJywgJzQnXSwKIFtbMSwgLTEsIDEsIC02LCAt NF0sICdbMl0nLCAnMScsICcyeCddLAogW1sxLCAtMSwgMSwgLTEsIC0xNF0sICcoNCknLCAnMScs ICc0J10sCiBbWzEsIC0xLCAxLCAtOTEsIC0zMTBdLCAnWzFdJywgJzEnLCAnMiddXQpzYWdlOiBD ID0gbmV4dChkKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIG9wdGlvbmFsIC0g ZGF0YWJhc2Vfc3RlaW5fd2F0a2lucwpzYWdlOiBDICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAjIG9wdGlvbmFsIC0gZGF0YWJhc2Vfc3RlaW5fd2F0a2lucwpTdGVp bi1XYXRraW5zIGlzb2dlbnkgY2xhc3Mgb2YgY29uZHVjdG9yIDE5CkBlbmQgZXhhbXBsZQoKUkVG RVJFTkNFOgpAYW5jaG9ye3NhZ2UvZGF0YWJhc2VzL3N0ZWluX3dhdGtpbnMgc3RlaW53YXRraW5z fUBhbmNob3J7Mzd9QHd7KFN0ZWluV2F0a2lucyl9IApXaWxsaWFtIFN0ZWluIGFuZCBNYXJrIFdh dGtpbnMsIEBlbXBoe0EgZGF0YWJhc2Ugb2YgZWxsaXB0aWMKY3VydmVzLS0tZmlyc3QgcmVwb3J0 fS4gSW4gQGVtcGh7QWxnb3JpdGhtaWMgbnVtYmVyIHRoZW9yeSAoQU5UUyBWKSwgU3lkbmV5LAoy MDAyfSwgTGVjdHVyZSBOb3RlcyBpbiBDb21wdXRlciBTY2llbmNlIDIzNjksIFNwcmluZ2VyLCAy MDAyLCBwMjY3LS0yNzUuCkBpbmRpY2F0ZXVybHtodHRwOi8vbW9kdWxhci5tYXRoLndhc2hpbmd0 b24uZWR1L3BhcGVycy9zdGVpbi13YXRraW5zL30KCkBnZWluZGV4IFN0ZWluV2F0a2luc0FsbERh dGEgKGNsYXNzIGluIHNhZ2UuZGF0YWJhc2VzLnN0ZWluX3dhdGtpbnMpCkBhbmNob3J7c2FnZS9k YXRhYmFzZXMvc3RlaW5fd2F0a2lucyBzYWdlIGRhdGFiYXNlcyBzdGVpbl93YXRraW5zIFN0ZWlu V2F0a2luc0FsbERhdGF9QGFuY2hvcnszOH0KQGRlZmZuIHtDbGFzc30gc2FnZS5kYXRhYmFzZXMu c3RlaW5fd2F0a2lucy5TdGVpbldhdGtpbnNBbGxEYXRhIChudW0pCgpDbGFzcyBmb3IgaXRlcmF0 aW5nIHRocm91Z2ggb25lIG9mIHRoZSBTdGVpbi1XYXRraW5zIGRhdGFiYXNlIGZpbGVzCmZvciBh bGwgY29uZHVjdG9ycy4KCkBnZWluZGV4IGl0ZXJfbGV2ZWxzKCkgKHNhZ2UuZGF0YWJhc2VzLnN0 ZWluX3dhdGtpbnMuU3RlaW5XYXRraW5zQWxsRGF0YSBtZXRob2QpCkBhbmNob3J7c2FnZS9kYXRh YmFzZXMvc3RlaW5fd2F0a2lucyBzYWdlIGRhdGFiYXNlcyBzdGVpbl93YXRraW5zIFN0ZWluV2F0 a2luc0FsbERhdGEgaXRlcl9sZXZlbHN9QGFuY2hvcnszOX0KQGRlZmZuIHtNZXRob2R9IGl0ZXJf bGV2ZWxzICgpCgpJdGVyYXRlIHRocm91Z2ggdGhlIGN1cnZlIGNsYXNzZXMsIGJ1dCBncm91cGVk IGludG8gbGlzdHMgYnkKbGV2ZWwuCgpFWEFNUExFOgoKQGV4YW1wbGUKc2FnZTogZCA9IFN0ZWlu V2F0a2luc0FsbERhdGEoMSkKc2FnZTogRSA9IGQuaXRlcl9sZXZlbHMoKQpzYWdlOiBuZXh0KEUp ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIG9wdGlvbmFsIC0gZGF0YWJhc2Vfc3RlaW5f d2F0a2lucwpbU3RlaW4tV2F0a2lucyBpc29nZW55IGNsYXNzIG9mIGNvbmR1Y3RvciAxMDAwMDJd CnNhZ2U6IG5leHQoRSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgb3B0aW9uYWwgLSBk YXRhYmFzZV9zdGVpbl93YXRraW5zCltTdGVpbi1XYXRraW5zIGlzb2dlbnkgY2xhc3Mgb2YgY29u ZHVjdG9yIDEwMDAwNSwKU3RlaW4tV2F0a2lucyBpc29nZW55IGNsYXNzIG9mIGNvbmR1Y3RvciAx MDAwMDVdCnNhZ2U6IG5leHQoRSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgb3B0aW9u YWwgLSBkYXRhYmFzZV9zdGVpbl93YXRraW5zCltTdGVpbi1XYXRraW5zIGlzb2dlbnkgY2xhc3Mg b2YgY29uZHVjdG9yIDEwMDAwN10KQGVuZCBleGFtcGxlCkBlbmQgZGVmZm4KCkBnZWluZGV4IG5l eHQoKSAoc2FnZS5kYXRhYmFzZXMuc3RlaW5fd2F0a2lucy5TdGVpbldhdGtpbnNBbGxEYXRhIG1l dGhvZCkKQGFuY2hvcntzYWdlL2RhdGFiYXNlcy9zdGVpbl93YXRraW5zIHNhZ2UgZGF0YWJhc2Vz IHN0ZWluX3dhdGtpbnMgU3RlaW5XYXRraW5zQWxsRGF0YSBuZXh0fUBhbmNob3J7M2F9CkBkZWZm biB7TWV0aG9kfSBuZXh0ICgpCkBlbmQgZGVmZm4KQGVuZCBkZWZmbgoKQGdlaW5kZXggU3RlaW5X YXRraW5zSXNvZ2VueUNsYXNzIChjbGFzcyBpbiBzYWdlLmRhdGFiYXNlcy5zdGVpbl93YXRraW5z KQpAYW5jaG9ye3NhZ2UvZGF0YWJhc2VzL3N0ZWluX3dhdGtpbnMgc2FnZSBkYXRhYmFzZXMgc3Rl aW5fd2F0a2lucyBTdGVpbldhdGtpbnNJc29nZW55Q2xhc3N9QGFuY2hvcnszYn0KQGRlZmZuIHtD bGFzc30gc2FnZS5kYXRhYmFzZXMuc3RlaW5fd2F0a2lucy5TdGVpbldhdGtpbnNJc29nZW55Q2xh c3MgKGNvbmR1Y3RvcikKQGVuZCBkZWZmbgoKQGdlaW5kZXggU3RlaW5XYXRraW5zUHJpbWVEYXRh IChjbGFzcyBpbiBzYWdlLmRhdGFiYXNlcy5zdGVpbl93YXRraW5zKQpAYW5jaG9ye3NhZ2UvZGF0 YWJhc2VzL3N0ZWluX3dhdGtpbnMgc2FnZSBkYXRhYmFzZXMgc3RlaW5fd2F0a2lucyBTdGVpbldh dGtpbnNQcmltZURhdGF9QGFuY2hvcnszY30KQGRlZmZuIHtDbGFzc30gc2FnZS5kYXRhYmFzZXMu c3RlaW5fd2F0a2lucy5TdGVpbldhdGtpbnNQcmltZURhdGEgKG51bSkKCkJhc2VzOiBAcmVmezM4 LCxzYWdlLmRhdGFiYXNlcy5zdGVpbl93YXRraW5zLlN0ZWluV2F0a2luc0FsbERhdGF9CkBlbmQg ZGVmZm4KCkBnZWluZGV4IGVjZGJfbnVtX2N1cnZlcygpIChpbiBtb2R1bGUgc2FnZS5kYXRhYmFz ZXMuc3RlaW5fd2F0a2lucykKQGFuY2hvcntzYWdlL2RhdGFiYXNlcy9zdGVpbl93YXRraW5zIHNh Z2UgZGF0YWJhc2VzIHN0ZWluX3dhdGtpbnMgZWNkYl9udW1fY3VydmVzfUBhbmNob3J7M2R9CkBk ZWZmbiB7RnVuY3Rpb259IHNhZ2UuZGF0YWJhc2VzLnN0ZWluX3dhdGtpbnMuZWNkYl9udW1fY3Vy dmVzIChtYXhfbGV2ZWw9MjAwMDAwKQoKUmV0dXJuIGEgbGlzdCB3aG9zZSBAbWF0aHtOfS10aCBl bnRyeSwgZm9yIEBjb2RlezAgPD0gTiA8PSBtYXhfbGV2ZWx9LCBpcyB0aGUKbnVtYmVyIG9mIGVs bGlwdGljIGN1cnZlcyBvZiBjb25kdWN0b3IgQG1hdGh7Tn0gaW4gdGhlIGRhdGFiYXNlLgoKRVhB TVBMRVM6CgpAZXhhbXBsZQpzYWdlOiBzYWdlLmRhdGFiYXNlcy5zdGVpbl93YXRraW5zLmVjZGJf bnVtX2N1cnZlcygxMDApICMgb3B0aW9uYWwgLSBkYXRhYmFzZV9zdGVpbl93YXRraW5zClswLCAw LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAzLCAwLCAwLCA2LCA4LCAwLCA0LCAwLCAzLCA0 LCA2LCAwLCAwLAogNiwgMCwgNSwgNCwgMCwgMCwgOCwgMCwgNCwgNCwgNCwgMywgNCwgNCwgNSwg NCwgNCwgMCwgNiwgMSwgMiwgOCwgMiwgMCwKIDYsIDQsIDgsIDIsIDIsIDEsIDYsIDQsIDYsIDcs IDMsIDAsIDAsIDEsIDQsIDYsIDQsIDIsIDEyLCAxLCAwLCAyLCA0LCAwLAogNiwgMiwgMCwgMTIs IDEsIDYsIDQsIDEsIDgsIDAsIDIsIDEsIDYsIDIsIDAsIDAsIDEsIDMsIDE2LCA0LCAzLCAwLCAy LAogMCwgOCwgMCwgNiwgMTEsIDRdCkBlbmQgZXhhbXBsZQpAZW5kIGRlZmZuCgpAYyBub2RvY3Rl c3QKCkBub2RlIEpvaG4gSm9uZXMncyB0YWJsZXMgb2YgbnVtYmVyIGZpZWxkcyxUaGUgT24tTGlu ZSBFbmN5Y2xvcGVkaWEgb2YgSW50ZWdlciBTZXF1ZW5jZXMgT0VJUyxUaGUgU3RlaW4tV2F0a2lu cyB0YWJsZSBvZiBlbGxpcHRpYyBjdXJ2ZXMsVG9wCkBhbmNob3J7c2FnZS9kYXRhYmFzZXMvam9u ZXMgc2FnZS1kYXRhYmFzZXMtam9uZXN9QGFuY2hvcnszZX1AYW5jaG9ye3NhZ2UvZGF0YWJhc2Vz L2pvbmVzIGRvY31AYW5jaG9yezNmfUBhbmNob3J7c2FnZS9kYXRhYmFzZXMvam9uZXMgam9obi1q b25lcy1zLXRhYmxlcy1vZi1udW1iZXItZmllbGRzfUBhbmNob3J7NDB9CkBjaGFwdGVyIEpvaG4g Sm9uZXMncyB0YWJsZXMgb2YgbnVtYmVyIGZpZWxkcwoKCkBjIFRoaXMgZmlsZSBoYXMgYmVlbiBh dXRvZ2VuZXJhdGVkLgpAYW5jaG9ye3NhZ2UvZGF0YWJhc2VzL2pvbmVzIG1vZHVsZS1zYWdlIGRh dGFiYXNlcyBqb25lc31AYW5jaG9yezZ9CkBnZWluZGV4IHNhZ2UuZGF0YWJhc2VzLmpvbmVzICht b2R1bGUpCgpJbiBvcmRlciB0byB1c2UgdGhlIEpvbmVzIGRhdGFiYXNlLCB0aGUgb3B0aW9uYWwg ZGF0YWJhc2UgcGFja2FnZQptdXN0IGJlIGluc3RhbGxlZCB1c2luZyB0aGUgU2FnZSBjb21tYW5k ICFzYWdlIC1pCmRhdGFiYXNlX2pvbmVzX251bWZpZWxkCgpUaGlzIGlzIGEgdGFibGUgb2YgbnVt YmVyIGZpZWxkcyB3aXRoIGJvdW5kZWQgcmFtaWZpY2F0aW9uIGFuZApkZWdyZWUgQG1hdGh7XGxl cSA2fS4gWW91IGNhbiBxdWVyeSB0aGUgZGF0YWJhc2UgZm9yIGFsbCBudW1iZXIKZmllbGRzIGlu IEpvbmVzJ3MgdGFibGVzIHdpdGggYm91bmRlZCByYW1pZmljYXRpb24gYW5kIGRlZ3JlZS4KCkVY QU1QTEVTOiBGaXJzdCBsb2FkIHRoZSBkYXRhYmFzZToKCkBleGFtcGxlCnNhZ2U6IEogPSBKb25l c0RhdGFiYXNlKCkKc2FnZTogSgpKb2huIEpvbmVzJ3MgdGFibGUgb2YgbnVtYmVyIGZpZWxkcyB3 aXRoIGJvdW5kZWQgcmFtaWZpY2F0aW9uIGFuZCBkZWdyZWUgPD0gNgpAZW5kIGV4YW1wbGUKCkxp c3QgdGhlIGRlZ3JlZSBhbmQgZGlzY3JpbWluYW50IG9mIGFsbCBmaWVsZHMgaW4gdGhlIGRhdGFi YXNlIHRoYXQKaGF2ZSByYW1pZmljYXRpb24gYXQgbW9zdCBhdCAyOgoKQGV4YW1wbGUKc2FnZTog WyhrLmRlZ3JlZSgpLCBrLmRpc2MoKSkgZm9yIGsgaW4gSi51bnJhbWlmaWVkX291dHNpZGUoWzJd KV0gICAgIyBvcHRpb25hbCAtIGRhdGFiYXNlX2pvbmVzX251bWZpZWxkClsoMSwgMSksICgyLCAt NCksICgyLCAtOCksICgyLCA4KSwgKDQsIDI1NiksICg0LCA1MTIpLCAoNCwgLTEwMjQpLCAoNCwg LTIwNDgpLCAoNCwgMjA0OCksICg0LCAyMDQ4KSwgKDQsIDIwNDgpXQpAZW5kIGV4YW1wbGUKCkxp c3QgdGhlIGRpc2NyaW1pbmFudHMgb2YgdGhlIGZpZWxkcyBvZiBkZWdyZWUgZXhhY3RseSAyIHVu cmFtaWZpZWQKb3V0c2lkZSAyOgoKQGV4YW1wbGUKc2FnZTogW2suZGlzYygpIGZvciBrIGluIEou dW5yYW1pZmllZF9vdXRzaWRlKFsyXSwyKV0gICAgICAgICAgICAgICAgIyBvcHRpb25hbCAtIGRh dGFiYXNlX2pvbmVzX251bWZpZWxkClstNCwgLTgsIDhdCkBlbmQgZXhhbXBsZQoKTGlzdCB0aGUg ZGlzY3JpbWluYW50cyBvZiBjdWJpYyBmaWVsZCBpbiB0aGUgZGF0YWJhc2UgcmFtaWZpZWQKZXhh Y3RseSBhdCAzIGFuZCA1OgoKQGV4YW1wbGUKc2FnZTogW2suZGlzYygpIGZvciBrIGluIEoucmFt aWZpZWRfYXQoWzMsNV0sMyldICAgICAgICAgICAgICAgICAgICAgIyBvcHRpb25hbCAtIGRhdGFi YXNlX2pvbmVzX251bWZpZWxkClstMTM1LCAtNjc1LCAtNjA3NSwgLTYwNzVdCnNhZ2U6IGZhY3Rv cig2MDc1KQozXjUgKiA1XjIKc2FnZTogZmFjdG9yKDY3NSkKM14zICogNV4yCnNhZ2U6IGZhY3Rv cigxMzUpCjNeMyAqIDUKQGVuZCBleGFtcGxlCgpMaXN0IGFsbCBmaWVsZHMgaW4gdGhlIGRhdGFi YXNlIHJhbWlmaWVkIGF0IDEwMToKCkBleGFtcGxlCnNhZ2U6IEoucmFtaWZpZWRfYXQoMTAxKSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgb3B0aW9uYWwgLSBk YXRhYmFzZV9qb25lc19udW1maWVsZApbTnVtYmVyIEZpZWxkIGluIGEgd2l0aCBkZWZpbmluZyBw b2x5bm9taWFsIHheMiAtIDEwMSwKIE51bWJlciBGaWVsZCBpbiBhIHdpdGggZGVmaW5pbmcgcG9s eW5vbWlhbCB4XjQgLSB4XjMgKyAxMyp4XjIgLSAxOSp4ICsgMzYxLAogTnVtYmVyIEZpZWxkIGlu IGEgd2l0aCBkZWZpbmluZyBwb2x5bm9taWFsIHheNSArIDIqeF40ICsgNyp4XjMgKyA0KnheMiAr IDExKnggLSA2LAogTnVtYmVyIEZpZWxkIGluIGEgd2l0aCBkZWZpbmluZyBwb2x5bm9taWFsIHhe NSArIHheNCAtIDYqeF4zIC0geF4yICsgMTgqeCArIDQsCiBOdW1iZXIgRmllbGQgaW4gYSB3aXRo IGRlZmluaW5nIHBvbHlub21pYWwgeF41IC0geF40IC0gNDAqeF4zIC0gOTMqeF4yIC0gMjEqeCAr IDE3XQpAZW5kIGV4YW1wbGUKCkBnZWluZGV4IEpvbmVzRGF0YWJhc2UgKGNsYXNzIGluIHNhZ2Uu ZGF0YWJhc2VzLmpvbmVzKQpAYW5jaG9ye3NhZ2UvZGF0YWJhc2VzL2pvbmVzIHNhZ2UgZGF0YWJh c2VzIGpvbmVzIEpvbmVzRGF0YWJhc2V9QGFuY2hvcns0MX0KQGRlZmZuIHtDbGFzc30gc2FnZS5k YXRhYmFzZXMuam9uZXMuSm9uZXNEYXRhYmFzZQoKQGdlaW5kZXggZ2V0KCkgKHNhZ2UuZGF0YWJh c2VzLmpvbmVzLkpvbmVzRGF0YWJhc2UgbWV0aG9kKQpAYW5jaG9ye3NhZ2UvZGF0YWJhc2VzL2pv bmVzIHNhZ2UgZGF0YWJhc2VzIGpvbmVzIEpvbmVzRGF0YWJhc2UgZ2V0fUBhbmNob3J7NDJ9CkBk ZWZmbiB7TWV0aG9kfSBnZXQgKFMsIHZhcj0nYScpCgpSZXR1cm4gYWxsIGZpZWxkcyBpbiB0aGUg ZGF0YWJhc2UgcmFtaWZpZWQgZXhhY3RseSBhdAp0aGUgcHJpbWVzIGluIFMuCgpJTlBVVDoKCgpA aXRlbWl6ZSAtCgpAaXRlbSAKQGNvZGV7U30gLSBsaXN0IG9yIHNldCBvZiBwcmltZXMsIG9yIGEg c2luZ2xlIHByaW1lCgpAaXRlbSAKQGNvZGV7dmFyfSAtIHRoZSBuYW1lIHVzZWQgZm9yIHRoZSBn ZW5lcmF0b3Igb2YgdGhlIG51bWJlciBmaWVsZHMgKGRlZmF1bHQgJ2EnKS4KQGVuZCBpdGVtaXpl CgpFWEFNUExFUzoKCkBleGFtcGxlCnNhZ2U6IEogPSBKb25lc0RhdGFiYXNlKCkgICAgICAgICAg ICAgICMgb3B0aW9uYWwgLSBkYXRhYmFzZV9qb25lc19udW1maWVsZApzYWdlOiBKLmdldCgxNjMs IHZhcj0neicpICAgICAgICAgICAgICAjIG9wdGlvbmFsIC0gZGF0YWJhc2Vfam9uZXNfbnVtZmll bGQKW051bWJlciBGaWVsZCBpbiB6IHdpdGggZGVmaW5pbmcgcG9seW5vbWlhbCB4XjIgKyAxNjMs CiBOdW1iZXIgRmllbGQgaW4geiB3aXRoIGRlZmluaW5nIHBvbHlub21pYWwgeF4zIC0geF4yIC0g NTQqeCArIDE2OSwKIE51bWJlciBGaWVsZCBpbiB6IHdpdGggZGVmaW5pbmcgcG9seW5vbWlhbCB4 XjQgLSB4XjMgLSA3KnheMiArIDIqeCArIDldCnNhZ2U6IEouZ2V0KFszLCA0XSkgICAgICAgICAg ICAgICAgICAgICMgb3B0aW9uYWwgLSBkYXRhYmFzZV9qb25lc19udW1maWVsZApUcmFjZWJhY2sg KG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6Ci4uLgpWYWx1ZUVycm9yOiBTIG11c3QgYmUgYSBsaXN0 IG9mIHByaW1lcwpAZW5kIGV4YW1wbGUKQGVuZCBkZWZmbgoKQGdlaW5kZXggcmFtaWZpZWRfYXQo KSAoc2FnZS5kYXRhYmFzZXMuam9uZXMuSm9uZXNEYXRhYmFzZSBtZXRob2QpCkBhbmNob3J7c2Fn ZS9kYXRhYmFzZXMvam9uZXMgc2FnZSBkYXRhYmFzZXMgam9uZXMgSm9uZXNEYXRhYmFzZSByYW1p ZmllZF9hdH1AYW5jaG9yezQzfQpAZGVmZm4ge01ldGhvZH0gcmFtaWZpZWRfYXQgKFMsIGQ9Tm9u ZSwgdmFyPSdhJykKClJldHVybiBhbGwgZmllbGRzIGluIHRoZSBkYXRhYmFzZSBvZiBkZWdyZWUg ZCByYW1pZmllZCBleGFjdGx5IGF0CnRoZSBwcmltZXMgaW4gUy4gIFRoZSBmaWVsZHMgYXJlIG9y ZGVyZWQgYnkgZGVncmVlIGFuZCBkaXNjcmltaW5hbnQuCgpJTlBVVDoKCgpAaXRlbWl6ZSAtCgpA aXRlbSAKQGNvZGV7U30gLSBsaXN0IG9yIHNldCBvZiBwcmltZXMKCkBpdGVtIApAY29kZXtkfSAt IE5vbmUgKGRlZmF1bHQsIGluIHdoaWNoIGNhc2UgYWxsIGZpZWxkcyBvZiBkZWdyZWUgPD0gNiBh cmUgcmV0dXJuZWQpCm9yIGEgcG9zaXRpdmUgaW50ZWdlciBnaXZpbmcgdGhlIGRlZ3JlZSBvZiB0 aGUgbnVtYmVyIGZpZWxkcyByZXR1cm5lZC4KCkBpdGVtIApAY29kZXt2YXJ9IC0gdGhlIG5hbWUg dXNlZCBmb3IgdGhlIGdlbmVyYXRvciBvZiB0aGUgbnVtYmVyIGZpZWxkcyAoZGVmYXVsdCAnYScp LgpAZW5kIGl0ZW1pemUKCkVYQU1QTEVTOgoKQGV4YW1wbGUKc2FnZTogSiA9IEpvbmVzRGF0YWJh c2UoKSAgICAgICAgICAgICAgIyBvcHRpb25hbCAtIGRhdGFiYXNlX2pvbmVzX251bWZpZWxkCnNh Z2U6IEoucmFtaWZpZWRfYXQoWzEwMSwxMDldKSAgICAgICAgICMgb3B0aW9uYWwgLSBkYXRhYmFz ZV9qb25lc19udW1maWVsZApbXQpzYWdlOiBKLnJhbWlmaWVkX2F0KFsxMDldKSAgICAgICAgICAg ICAjIG9wdGlvbmFsIC0gZGF0YWJhc2Vfam9uZXNfbnVtZmllbGQKW051bWJlciBGaWVsZCBpbiBh IHdpdGggZGVmaW5pbmcgcG9seW5vbWlhbCB4XjIgLSAxMDksCiBOdW1iZXIgRmllbGQgaW4gYSB3 aXRoIGRlZmluaW5nIHBvbHlub21pYWwgeF4zIC0geF4yIC0gMzYqeCArIDQsCiBOdW1iZXIgRmll bGQgaW4gYSB3aXRoIGRlZmluaW5nIHBvbHlub21pYWwgeF40IC0geF4zICsgMTQqeF4yICsgMzQq eCArIDM5M10Kc2FnZTogSi5yYW1pZmllZF9hdCgxMDEpICAgICAgICAgICAgICAgIyBvcHRpb25h bCAtIGRhdGFiYXNlX2pvbmVzX251bWZpZWxkCltOdW1iZXIgRmllbGQgaW4gYSB3aXRoIGRlZmlu aW5nIHBvbHlub21pYWwgeF4yIC0gMTAxLAogTnVtYmVyIEZpZWxkIGluIGEgd2l0aCBkZWZpbmlu ZyBwb2x5bm9taWFsIHheNCAtIHheMyArIDEzKnheMiAtIDE5KnggKyAzNjEsCiBOdW1iZXIgRmll bGQgaW4gYSB3aXRoIGRlZmluaW5nIHBvbHlub21pYWwgeF41ICsgMip4XjQgKyA3KnheMyArIDQq eF4yICsgMTEqeCAtIDYsCiBOdW1iZXIgRmllbGQgaW4gYSB3aXRoIGRlZmluaW5nIHBvbHlub21p YWwgeF41ICsgeF40IC0gNip4XjMgLSB4XjIgKyAxOCp4ICsgNCwKIE51bWJlciBGaWVsZCBpbiBh IHdpdGggZGVmaW5pbmcgcG9seW5vbWlhbCB4XjUgLSB4XjQgLSA0MCp4XjMgLSA5Myp4XjIgLSAy MSp4ICsgMTddCnNhZ2U6IEoucmFtaWZpZWRfYXQoKDIsIDUsIDI5KSwgMywgJ2MnKSAjIG9wdGlv bmFsIC0gZGF0YWJhc2Vfam9uZXNfbnVtZmllbGQKW051bWJlciBGaWVsZCBpbiBjIHdpdGggZGVm aW5pbmcgcG9seW5vbWlhbCB4XjMgLSB4XjIgLSA4KnggLSAyOCwKIE51bWJlciBGaWVsZCBpbiBj IHdpdGggZGVmaW5pbmcgcG9seW5vbWlhbCB4XjMgLSB4XjIgKyAxMCp4ICsgMTAyLAogTnVtYmVy IEZpZWxkIGluIGMgd2l0aCBkZWZpbmluZyBwb2x5bm9taWFsIHheMyAtIHheMiArIDk3KnggLSAz MzMsCiBOdW1iZXIgRmllbGQgaW4gYyB3aXRoIGRlZmluaW5nIHBvbHlub21pYWwgeF4zIC0geF4y IC0gNDgqeCAtIDE4OF0KQGVuZCBleGFtcGxlCkBlbmQgZGVmZm4KCkBnZWluZGV4IHVucmFtaWZp ZWRfb3V0c2lkZSgpIChzYWdlLmRhdGFiYXNlcy5qb25lcy5Kb25lc0RhdGFiYXNlIG1ldGhvZCkK QGFuY2hvcntzYWdlL2RhdGFiYXNlcy9qb25lcyBzYWdlIGRhdGFiYXNlcyBqb25lcyBKb25lc0Rh dGFiYXNlIHVucmFtaWZpZWRfb3V0c2lkZX1AYW5jaG9yezQ0fQpAZGVmZm4ge01ldGhvZH0gdW5y YW1pZmllZF9vdXRzaWRlIChTLCBkPU5vbmUsIHZhcj0nYScpCgpSZXR1cm4gYWxsIGZpZWxkcyBp biB0aGUgZGF0YWJhc2Ugb2YgZGVncmVlIGQgdW5yYW1pZmllZApvdXRzaWRlIFMuIElmIGQgaXMg b21pdHRlZCwgcmV0dXJuIGZpZWxkcyBvZiBhbnkgZGVncmVlIHVwIHRvIDYuClRoZSBmaWVsZHMg YXJlIG9yZGVyZWQgYnkgZGVncmVlIGFuZCBkaXNjcmltaW5hbnQuCgpJTlBVVDoKCgpAaXRlbWl6 ZSAtCgpAaXRlbSAKQGNvZGV7U30gLSBsaXN0IG9yIHNldCBvZiBwcmltZXMsIG9yIGEgc2luZ2xl IHByaW1lCgpAaXRlbSAKQGNvZGV7ZH0gLSBOb25lIChkZWZhdWx0LCBpbiB3aGljaCBjYXNlIGFs bCBmaWVsZHMgb2YgZGVncmVlIDw9IDYgYXJlIHJldHVybmVkKQpvciBhIHBvc2l0aXZlIGludGVn ZXIgZ2l2aW5nIHRoZSBkZWdyZWUgb2YgdGhlIG51bWJlciBmaWVsZHMgcmV0dXJuZWQuCgpAaXRl bSAKQGNvZGV7dmFyfSAtIHRoZSBuYW1lIHVzZWQgZm9yIHRoZSBnZW5lcmF0b3Igb2YgdGhlIG51 bWJlciBmaWVsZHMgKGRlZmF1bHQgJ2EnKS4KQGVuZCBpdGVtaXplCgpFWEFNUExFUzoKCkBleGFt cGxlCnNhZ2U6IEogPSBKb25lc0RhdGFiYXNlKCkgICAgICAgICAgICAgIyBvcHRpb25hbCAtIGRh dGFiYXNlX2pvbmVzX251bWZpZWxkCnNhZ2U6IEoudW5yYW1pZmllZF9vdXRzaWRlKFsxMDEsMTA5 XSkgIyBvcHRpb25hbCAtIGRhdGFiYXNlX2pvbmVzX251bWZpZWxkCltOdW1iZXIgRmllbGQgaW4g YSB3aXRoIGRlZmluaW5nIHBvbHlub21pYWwgeCAtIDEsCiBOdW1iZXIgRmllbGQgaW4gYSB3aXRo IGRlZmluaW5nIHBvbHlub21pYWwgeF4yIC0gMTAxLAogTnVtYmVyIEZpZWxkIGluIGEgd2l0aCBk ZWZpbmluZyBwb2x5bm9taWFsIHheMiAtIDEwOSwKIE51bWJlciBGaWVsZCBpbiBhIHdpdGggZGVm aW5pbmcgcG9seW5vbWlhbCB4XjMgLSB4XjIgLSAzNip4ICsgNCwKIE51bWJlciBGaWVsZCBpbiBh IHdpdGggZGVmaW5pbmcgcG9seW5vbWlhbCB4XjQgLSB4XjMgKyAxMyp4XjIgLSAxOSp4ICsgMzYx LAogTnVtYmVyIEZpZWxkIGluIGEgd2l0aCBkZWZpbmluZyBwb2x5bm9taWFsIHheNCAtIHheMyAr IDE0KnheMiArIDM0KnggKyAzOTMsCiBOdW1iZXIgRmllbGQgaW4gYSB3aXRoIGRlZmluaW5nIHBv bHlub21pYWwgeF41ICsgMip4XjQgKyA3KnheMyArIDQqeF4yICsgMTEqeCAtIDYsCiBOdW1iZXIg RmllbGQgaW4gYSB3aXRoIGRlZmluaW5nIHBvbHlub21pYWwgeF41ICsgeF40IC0gNip4XjMgLSB4 XjIgKyAxOCp4ICsgNCwKIE51bWJlciBGaWVsZCBpbiBhIHdpdGggZGVmaW5pbmcgcG9seW5vbWlh bCB4XjUgLSB4XjQgLSA0MCp4XjMgLSA5Myp4XjIgLSAyMSp4ICsgMTddCkBlbmQgZXhhbXBsZQpA ZW5kIGRlZmZuCkBlbmQgZGVmZm4KCkBjIG5vZG9jdGVzdAoKQG5vZGUgVGhlIE9uLUxpbmUgRW5j eWNsb3BlZGlhIG9mIEludGVnZXIgU2VxdWVuY2VzIE9FSVMsTG9jYWwgY29weSBvZiBTbG9hbmUg T24tTGluZSBFbmN5Y2xvcGVkaWEgb2YgSW50ZWdlciBTZXF1ZW5jZXMsSm9obiBKb25lcydzIHRh YmxlcyBvZiBudW1iZXIgZmllbGRzLFRvcApAYW5jaG9ye3NhZ2UvZGF0YWJhc2VzL29laXMgdGhl LW9uLWxpbmUtZW5jeWNsb3BlZGlhLW9mLWludGVnZXItc2VxdWVuY2VzLW9laXN9QGFuY2hvcns0 NX1AYW5jaG9ye3NhZ2UvZGF0YWJhc2VzL29laXMgZG9jfUBhbmNob3J7NDZ9QGFuY2hvcntzYWdl L2RhdGFiYXNlcy9vZWlzIHNhZ2UtZGF0YWJhc2VzLW9laXN9QGFuY2hvcns0N30KQGNoYXB0ZXIg VGhlIE9uLUxpbmUgRW5jeWNsb3BlZGlhIG9mIEludGVnZXIgU2VxdWVuY2VzIChPRUlTKQoKCkBj IFRoaXMgZmlsZSBoYXMgYmVlbiBhdXRvZ2VuZXJhdGVkLgpAYW5jaG9ye3NhZ2UvZGF0YWJhc2Vz L29laXMgbW9kdWxlLXNhZ2UgZGF0YWJhc2VzIG9laXN9QGFuY2hvcns4fQpAZ2VpbmRleCBzYWdl LmRhdGFiYXNlcy5vZWlzIChtb2R1bGUpCgpZb3UgY2FuIHF1ZXJ5IHRoZSBPRUlTIChPbmxpbmUg RGF0YWJhc2Ugb2YgSW50ZWdlciBTZXF1ZW5jZXMpIHRocm91Z2ggU2FnZSBpbgpvcmRlciB0bzoK CkBxdW90YXRpb24KCgpAaXRlbWl6ZSAtCgpAaXRlbSAKaWRlbnRpZnkgYSBzZXF1ZW5jZSBmcm9t IGl0cyBmaXJzdCB0ZXJtcy4KCkBpdGVtIApvYnRhaW4gbW9yZSB0ZXJtcywgZm9ybXVsYWUsIHJl ZmVyZW5jZXMsIGV0Yy4gZm9yIGEgZ2l2ZW4gc2VxdWVuY2UuCkBlbmQgaXRlbWl6ZQpAZW5kIHF1 b3RhdGlvbgoKQVVUSE9SUzoKCgpAaXRlbWl6ZSAtCgpAaXRlbSAKVGhpZXJyeSBNb250ZWlsICgy MDEyLTAyLTEwIC0tIDIwMTMtMDYtMjEpOiBpbml0aWFsIHZlcnNpb24uCgpAaXRlbSAKVmluY2Vu dCBEZWxlY3JvaXggKDIwMTQpOiBtb2RpZmllcyBjb250aW51ZWQgZnJhY3Rpb25zIGJlY2F1c2Ug b2YgdHJhYyB0aWNrZXQgIzE0NTY3QGZvb3Rub3Rle2h0dHBzOi8vdHJhYy5zYWdlbWF0aC5vcmcv MTQ1Njd9CgpAaXRlbSAKTW9yaXR6IEZpcnNjaGluZyAoMjAxNik6IG1vZGlmaWVzIGhhbmRsaW5n IG9mIGRlYWQgc2VxdWVuY2UsIHNlZSB0cmFjIHRpY2tldCAjMTczMzBAZm9vdG5vdGV7aHR0cHM6 Ly90cmFjLnNhZ2VtYXRoLm9yZy8xNzMzMH0KQGVuZCBpdGVtaXplCgpFWEFNUExFUzoKCkBleGFt cGxlCnNhZ2U6IG9laXMKVGhlIE9uLUxpbmUgRW5jeWNsb3BlZGlhIG9mIEludGVnZXIgU2VxdWVu Y2VzIChodHRwOi8vb2Vpcy5vcmcvKQpAZW5kIGV4YW1wbGUKCldoYXQgYWJvdXQgYSBzZXF1ZW5j ZSBzdGFydGluZyB3aXRoIEBtYXRoezNAY29tbWF7fSA3QGNvbW1he30gMTVAY29tbWF7fSAxfSA/ CgpAZXhhbXBsZQpzYWdlOiBzZWFyY2ggPSBvZWlzKFszLCA3LCAxNSwgMV0sIG1heF9yZXN1bHRz PTQpIDsgc2VhcmNoICAjIG9wdGlvbmFsIC0tIGludGVybmV0CjA6IEEwMDEyMDM6IENvbnRpbnVl ZCBmcmFjdGlvbiBleHBhbnNpb24gb2YgUGkuCjE6IEEwODI0OTU6IGEobikgPSAoMl5uIC0gMSkg bW9kIG4uCjI6IEExNjU0MTY6IElycmVndWxhciBhcnJheSByZWFkIGJ5IHJvd3M6IFRoZSBuLXRo IHJvdyBjb250YWlucyB0aG9zZSBkaXN0aW5jdCBwb3NpdGl2ZSBpbnRlZ2VycyB0aGF0IGVhY2gs IHdoZW4gd3JpdHRlbiBpbiBiaW5hcnksIG9jY3VycyBhcyBhIHN1YnN0cmluZyBpbiBiaW5hcnkg bi4KMzogQTI0NjY3NDogUnVuIExlbmd0aCBUcmFuc2Zvcm0gb2YgQTAwMDIyNS4KCnNhZ2U6IFt1 LmlkKCkgZm9yIHUgaW4gc2VhcmNoXSAgICAgICAgICAgICAgICAgICAgICAjIG9wdGlvbmFsIC0t IGludGVybmV0ClsnQTAwMTIwMycsICdBMDgyNDk1JywgJ0ExNjU0MTYnLCAnQTI0NjY3NCddCnNh Z2U6IGMgPSBzZWFyY2hbMF0gOyBjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIG9wdGlv bmFsIC0tIGludGVybmV0CkEwMDEyMDM6IENvbnRpbnVlZCBmcmFjdGlvbiBleHBhbnNpb24gb2Yg UGkuCkBlbmQgZXhhbXBsZQoKQGV4YW1wbGUKc2FnZTogYy5maXJzdF90ZXJtcygxNSkgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICMgb3B0aW9uYWwgLS0gaW50ZXJuZXQKKDMsIDcsIDE1LCAx LCAyOTIsIDEsIDEsIDEsIDIsIDEsIDMsIDEsIDE0LCAyLCAxKQoKc2FnZTogYy5leGFtcGxlcygp ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgb3B0aW9uYWwgLS0gaW50ZXJuZXQK MDogUGkgPSAzLjE0MTU5MjY1MzU4OTc5MzIzODQuLi4KMTogICAgPSAzICsgMS8oNyArIDEvKDE1 ICsgMS8oMSArIDEvKDI5MiArIC4uLikpKSkKMjogICAgPSBbYV8wOyBhXzEsIGFfMiwgYV8zLCAu Li5dID0gWzM7IDcsIDE1LCAxLCAyOTIsIC4uLl0KCnNhZ2U6IGMuY29tbWVudHMoKSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAjIG9wdGlvbmFsIC0tIGludGVybmV0CjA6IFRoZSBm aXJzdCA1LDgyMSw1NjksNDI1IHRlcm1zIHdlcmUgY29tcHV0ZWQgYnkgX0VyaWMgVy4gV2Vpc3N0 ZWluXyBvbiBTZXAgMTggMjAxMS4KMTogVGhlIGZpcnN0IDEwLDY3Miw5MDUsNTAxIHRlcm1zIHdl cmUgY29tcHV0ZWQgYnkgX0VyaWMgVy4gV2Vpc3N0ZWluXyBvbiBKdWwgMTcgMjAxMy4KMjogVGhl IGZpcnN0IDE1LDAwMCwwMDAsMDAwIHRlcm1zIHdlcmUgY29tcHV0ZWQgYnkgX0VyaWMgVy4gV2Vp c3N0ZWluXyBvbiBKdWwgMjcgMjAxMy4KQGVuZCBleGFtcGxlCgpAZXhhbXBsZQpzYWdlOiB4ID0g Yy5uYXR1cmFsX29iamVjdCgpIDsgdHlwZSh4KSAgICAgICAgICAgICAgIyBvcHRpb25hbCAtLSBp bnRlcm5ldAo8Y2xhc3MgJ3NhZ2UucmluZ3MuY29udGludWVkX2ZyYWN0aW9uLkNvbnRpbnVlZEZy YWN0aW9uX3BlcmlvZGljJz4KCnNhZ2U6IHguY29udmVyZ2VudHMoKVs6N10gICAgICAgICAgICAg ICAgICAgICAgICAgICAjIG9wdGlvbmFsIC0tIGludGVybmV0ClszLCAyMi83LCAzMzMvMTA2LCAz NTUvMTEzLCAxMDM5OTMvMzMxMDIsIDEwNDM0OC8zMzIxNSwgMjA4MzQxLzY2MzE3XQoKc2FnZTog UlIoeC52YWx1ZSgpKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgb3B0aW9uYWwg LS0gaW50ZXJuZXQKMy4xNDE1OTI2NTM1ODk3OQpzYWdlOiBSUih4LnZhbHVlKCkpID09IFJSKHBp KSAgICAgICAgICAgICAgICAgICAgICAgIyBvcHRpb25hbCAtLSBpbnRlcm5ldApUcnVlCkBlbmQg ZXhhbXBsZQoKV2hhdCBhYm91dCBwb3NldHMgPyBBcmUgdGhleSBoYXJkIHRvIGNvdW50ID8gVG8g d2hpY2ggb3RoZXIgc3RydWN0dXJlcyBhcmUgdGhleQpyZWxhdGVkID8KCkBleGFtcGxlCnNhZ2U6 IFtQb3NldHMoaSkuY2FyZGluYWxpdHkoKSBmb3IgaSBpbiByYW5nZSgxMCldClsxLCAxLCAyLCA1 LCAxNiwgNjMsIDMxOCwgMjA0NSwgMTY5OTksIDE4MzIzMV0Kc2FnZTogb2VpcyhfKSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgb3B0aW9uYWwgLS0gaW50ZXJuZXQKMDog QTAwMDExMjogTnVtYmVyIG9mIHBhcnRpYWxseSBvcmRlcmVkIHNldHMgKCJwb3NldHMiKSB3aXRo IG4gdW5sYWJlbGVkIGVsZW1lbnRzLgpzYWdlOiBwID0gX1swXSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIyBvcHRpb25hbCAtLSBpbnRlcm5ldApAZW5kIGV4YW1wbGUKCkBl eGFtcGxlCnNhZ2U6ICdoYXJkJyBpbiBwLmtleXdvcmRzKCkgICAgICAgICAgICAgICAgICAgICAg ICAjIG9wdGlvbmFsIC0tIGludGVybmV0ClRydWUKc2FnZTogbGVuKHAuZm9ybXVsYXMoKSkgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICMgb3B0aW9uYWwgLS0gaW50ZXJuZXQKMApzYWdlOiBs ZW4ocC5maXJzdF90ZXJtcygpKSAgICAgICAgICAgICAgICAgICAgICAgICAgIyBvcHRpb25hbCAt LSBpbnRlcm5ldAoxNwpAZW5kIGV4YW1wbGUKCkBleGFtcGxlCnNhZ2U6IHAuY3Jvc3NfcmVmZXJl bmNlcyhmZXRjaD1UcnVlKSAgICAgICAgICAgICAgICAjIG9wdGlvbmFsIC0tIGludGVybmV0CjA6 IEEwMDA3OTg6IE51bWJlciBvZiBkaWZmZXJlbnQgcXVhc2ktb3JkZXJzIChvciB0b3BvbG9naWVz LCBvciB0cmFuc2l0aXZlIGRpZ3JhcGhzKSB3aXRoIG4gbGFiZWxlZCBlbGVtZW50cy4KMTogQTAw MTAzNTogTnVtYmVyIG9mIHBhcnRpYWxseSBvcmRlcmVkIHNldHMgKCJwb3NldHMiKSB3aXRoIG4g bGFiZWxlZCBlbGVtZW50cyAob3IgbGFiZWxlZCBhY3ljbGljIHRyYW5zaXRpdmUgZGlncmFwaHMp LgoyOiBBMDAxOTMwOiBOdW1iZXIgb2YgdG9wb2xvZ2llcywgb3IgdHJhbnNpdGl2ZSBkaWdyYXBo cyB3aXRoIG4gdW5sYWJlbGVkIG5vZGVzLgozOiBBMDA2MDU3OiBOdW1iZXIgb2YgdG9wb2xvZ2ll cyBvbiBuIGxhYmVsZWQgcG9pbnRzIHNhdGlzZnlpbmcgYXhpb21zIFRfMC1UXzQuCjQ6IEEwNzky NjM6IE51bWJlciBvZiBjb25zdHJhaW5lZCBtaXhlZCBtb2RlbHMgd2l0aCBuIGZhY3RvcnMuCjU6 IEEwNzkyNjU6IE51bWJlciBvZiBhbnRpc3ltbWV0cmljIHRyYW5zaXRpdmUgYmluYXJ5IHJlbGF0 aW9ucyBvbiBuIHVubGFiZWxlZCBwb2ludHMuCkBlbmQgZXhhbXBsZQoKV2hhdCBkb2VzIHRoZSBU YXlsb3IgZXhwYW5zaW9uIG9mIHRoZSBAbWF0aHtlXihlXngtMSlgfSBmdW5jdGlvbiBoYXZlIHRv IGRvIHdpdGgKcHJpbWVzID8KCkBleGFtcGxlCnNhZ2U6IHggPSB2YXIoJ3gnKSA7IGYoeCkgPSBl XihlXnggLSAxKQpzYWdlOiBMID0gW2EqZmFjdG9yaWFsKGIpIGZvciBhLGIgaW4gdGF5bG9yKGYo eCksIHgsIDAsIDIwKS5jb2VmZmljaWVudHMoKV0gOyBMClsxLCAxLCAyLCA1LCAxNSwgNTIsIDIw MywgODc3LCA0MTQwLCAyMTE0NywgMTE1OTc1LCA2Nzg1NzAsIDQyMTM1OTcsCjI3NjQ0NDM3LCAx OTA4OTkzMjIsIDEzODI5NTg1NDUsIDEwNDgwMTQyMTQ3LCA4Mjg2NDg2OTgwNCwgNjgyMDc2ODA2 MTU5LAo1ODMyNzQyMjA1MDU3LCA1MTcyNDE1ODIzNTM3Ml0KCnNhZ2U6IG9laXMoTCkgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIG9wdGlvbmFsIC0tIGludGVybmV0CjA6 IEEwMDAxMTA6IEJlbGwgb3IgZXhwb25lbnRpYWwgbnVtYmVyczogbnVtYmVyIG9mIHdheXMgdG8g cGFydGl0aW9uIGEgc2V0IG9mIG4gbGFiZWxlZCBlbGVtZW50cy4KCnNhZ2U6IGIgPSBfWzBdICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIG9wdGlvbmFsIC0tIGludGVybmV0 CgpzYWdlOiBiLmZvcm11bGFzKClbMF0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBv cHRpb25hbCAtLSBpbnRlcm5ldAonRS5nLmYuOiBleHAoZXhwKHgpIC0gMSkuJwoKc2FnZTogW2kg Zm9yIGkgaW4gYi5jb21tZW50cygpIGlmICdwcmltZScgaW4gaV1bLTFdICAgICAjIG9wdGlvbmFs IC0tIGludGVybmV0CidOdW1iZXIgbiBpcyBwcmltZSBpZiBtb2QoYShuKS0yLG4pID0gMC4gLV9E bWl0cnkgS3J1Y2hpbmluXywgRmViIDE0IDIwMTInCgpzYWdlOiBbbiBmb3IgbiBpbiByYW5nZSgy LCAyMCkgaWYgKGIobiktMikgJSBuID09IDBdICAgICMgb3B0aW9uYWwgLS0gaW50ZXJuZXQKWzIs IDMsIDUsIDcsIDExLCAxMywgMTcsIDE5XQpAZW5kIGV4YW1wbGUKCgpAc3Vic3ViaGVhZGluZyBT ZWUgYWxzbwoKCgpAaXRlbWl6ZSAtCgpAaXRlbSAKSWYgeW91IHBsYW4gdG8gZG8gYSBsb3Qgb2Yg YXV0b21hdGljIHNlYXJjaGVzIGZvciBzdWJzZXF1ZW5jZXMsIHlvdQpzaG91bGQgY29uc2lkZXIg aW5zdGFsbGluZyBAcmVmezksLFNsb2FuZUVuY3ljbG9wZWRpYX0sIGEgbG9jYWwgcGFydGlhbCBj b3B5IG9mIHRoZSBPRUlTLgoKQGl0ZW0gClNvbWUgaW5maW5pdGUgT0VJUyBzZXF1ZW5jZXMgYXJl IGltcGxlbWVudGVkIGluIFNhZ2UsIHZpYSB0aGUKc2xvYW5lX2Z1bmN0aW9uc0Bmb290bm90ZXsu Li8uLi8uLi8uLi8uLi8uLi9odG1sL2VuL3JlZmVyZW5jZS9jb21iaW5hdC9zYWdlL2NvbWJpbmF0 L3Nsb2FuZV9mdW5jdGlvbnMuaHRtbCNtb2R1bGUtc2FnZS5jb21iaW5hdC5zbG9hbmVfZnVuY3Rp b25zfSBtb2R1bGUuCkBlbmQgaXRlbWl6ZQoKCkBjYXJ0b3VjaGUKQHF1b3RhdGlvbiBUb2RvIAoK QGl0ZW1pemUgLQoKQGl0ZW0gCmluIGNhc2Ugb2YgZmxvb2QsIHN1Z2dlc3QgdGhlIHVzZXIgdG8g aW5zdGFsbCB0aGUgb2ZmLWxpbmUgZGF0YWJhc2UgaW5zdGVhZC4KCkBpdGVtIAppbnRlcmZhY2Ug d2l0aCB0aGUgb2ZmLWxpbmUgZGF0YWJhc2UgKG9yIHJlaW1wbGVtZW50IGl0KS4KQGVuZCBpdGVt aXplCkBlbmQgcXVvdGF0aW9uCkBlbmQgY2FydG91Y2hlCgpAbWVudQoqIENsYXNzZXMgYW5kIG1l dGhvZHM6OiAKCkBlbmQgbWVudQoKQG5vZGUgQ2xhc3NlcyBhbmQgbWV0aG9kcywsLFRoZSBPbi1M aW5lIEVuY3ljbG9wZWRpYSBvZiBJbnRlZ2VyIFNlcXVlbmNlcyBPRUlTCkBhbmNob3J7c2FnZS9k YXRhYmFzZXMvb2VpcyBjbGFzc2VzLWFuZC1tZXRob2RzfUBhbmNob3J7NDh9CkBzZWN0aW9uIENs YXNzZXMgYW5kIG1ldGhvZHMKCgpAZ2VpbmRleCBGYW5jeVR1cGxlIChjbGFzcyBpbiBzYWdlLmRh dGFiYXNlcy5vZWlzKQpAYW5jaG9ye3NhZ2UvZGF0YWJhc2VzL29laXMgc2FnZSBkYXRhYmFzZXMg b2VpcyBGYW5jeVR1cGxlfUBhbmNob3J7NDl9CkBkZWZmbiB7Q2xhc3N9IHNhZ2UuZGF0YWJhc2Vz Lm9laXMuRmFuY3lUdXBsZQoKQmFzZXM6IHR1cGxlQGZvb3Rub3Rle2h0dHBzOi8vZG9jcy5weXRo b24ub3JnL2xpYnJhcnkvZnVuY3Rpb25zLmh0bWwjdHVwbGV9CgpUaGlzIGNsYXNzIGluaGVyaXRz IGZyb20gQGNvZGV7dHVwbGV9LCBpdCBhbGxvd3MgdG8gbmljZWx5IHByaW50IHR1cGxlcyB3aG9z ZQplbGVtZW50cyBoYXZlIGEgb25lIGxpbmUgcmVwcmVzZW50YXRpb24uCgpFWEFNUExFUzoKCkBl eGFtcGxlCnNhZ2U6IGZyb20gc2FnZS5kYXRhYmFzZXMub2VpcyBpbXBvcnQgRmFuY3lUdXBsZQpz YWdlOiB0ID0gRmFuY3lUdXBsZShbJ3plcm8nLCAnb25lJywgJ3R3bycsICd0aHJlZScsIDRdKSA7 IHQKMDogemVybwoxOiBvbmUKMjogdHdvCjM6IHRocmVlCjQ6IDQKCnNhZ2U6IHRbMl0KJ3R3bycK QGVuZCBleGFtcGxlCkBlbmQgZGVmZm4KCkBnZWluZGV4IE9FSVMgKGNsYXNzIGluIHNhZ2UuZGF0 YWJhc2VzLm9laXMpCkBhbmNob3J7c2FnZS9kYXRhYmFzZXMvb2VpcyBzYWdlIGRhdGFiYXNlcyBv ZWlzIE9FSVN9QGFuY2hvcns0YX0KQGRlZmZuIHtDbGFzc30gc2FnZS5kYXRhYmFzZXMub2Vpcy5P RUlTCgpUaGUgT24tTGluZSBFbmN5Y2xvcGVkaWEgb2YgSW50ZWdlciBTZXF1ZW5jZXMuCgpAY29k ZXtPRUlTfSBpcyBhIGNsYXNzIHJlcHJlc2VudGluZyB0aGUgT24tTGluZSBFbmN5Y2xvcGVkaWEg b2YgSW50ZWdlcgpTZXF1ZW5jZXMuIFlvdSBjYW4gcXVlcnkgaXQgdXNpbmcgaXRzIG1ldGhvZHMs IGJ1dCBAY29kZXtPRUlTfSBjYW4gYWxzbyBiZQpjYWxsZWQgZGlyZWN0bHkgd2l0aCB0aHJlZSBh cmd1bWVudHM6CgoKQGl0ZW1pemUgLQoKQGl0ZW0gCkBjb2Rle3F1ZXJ5fSAtIGl0IGNhbiBiZToK CgpAaXRlbWl6ZSAtCgpAaXRlbSAKYSBzdHJpbmcgcmVwcmVzZW50aW5nIGFuIE9FSVMgSUQgKGUu Zy4gJ0EwMDAwNDUnKS4KCkBpdGVtIAphbiBpbnRlZ2VyIHJlcHJlc2VudGluZyBhbiBPRUlTIElE IChlLmcuIDQ1KS4KCkBpdGVtIAphIGxpc3QgcmVwcmVzZW50aW5nIGEgc2VxdWVuY2Ugb2YgaW50 ZWdlcnMuCgpAaXRlbSAKYSBzdHJpbmcsIHJlcHJlc2VudGluZyBhIHRleHQgc2VhcmNoLgpAZW5k IGl0ZW1pemUKCkBpdGVtIApAY29kZXttYXhfcmVzdWx0c30gLSAoaW50ZWdlciwgZGVmYXVsdDog MzApIHRoZSBtYXhpbXVtIG51bWJlciBvZgpyZXN1bHRzIHRvIHJldHVybiwgdGhleSBhcmUgc29y dGVkIGFjY29yZGluZyB0byB0aGVpciByZWxldmFuY2UuIEluCmFueSBjYXNlcywgdGhlIE9FSVMg d2Vic2l0ZSB3aWxsIG5ldmVyIHByb3ZpZGUgbW9yZSB0aGFuIDEwMCByZXN1bHRzLgoKQGl0ZW0g CkBjb2Rle2ZpcnN0X3Jlc3VsdH0gLSAoaW50ZWdlciwgZGVmYXVsdDogMCkgYWxsb3cgdG8gc2tp cCB0aGUKQGNvZGV7Zmlyc3RfcmVzdWx0fSBmaXJzdCByZXN1bHRzIGluIHRoZSBzZWFyY2gsIHRv IGdvIGZ1cnRoZXIuClRoaXMgaXMgdXNlZnVsIGlmIHlvdSBhcmUgbG9va2luZyBmb3IgYSBzZXF1 ZW5jZSB0aGF0IG1heSBhcHBlYXIKYWZ0ZXIgdGhlIDEwMCBmaXJzdCBmb3VuZCBzZXF1ZW5jZXMu CkBlbmQgaXRlbWl6ZQoKT1VUUFVUOgoKCkBpdGVtaXplIC0KCkBpdGVtIAppZiBAY29kZXtxdWVy eX0gaXMgYW4gaW50ZWdlciBvciBhbiBPRUlTIElEIChlLmcuICdBMDAwMDQ1JyksIHJldHVybnMK dGhlIGFzc29jaWF0ZWQgT0VJUyBzZXF1ZW5jZS4KCkBpdGVtIAppZiBAY29kZXtxdWVyeX0gaXMg YSBzdHJpbmcsIHJldHVybnMgYSB0dXBsZSBvZiBPRUlTIHNlcXVlbmNlcyB3aG9zZQpkZXNjcmlw dGlvbiBjb3JyZXNwb25kcyB0byB0aGUgcXVlcnkuIFRob3NlIHNlcXVlbmNlcyBjYW4gYmUgdXNl ZAp3aXRob3V0IHRoZSBuZWVkIHRvIGZldGNoIHRoZSBkYXRhYmFzZSBhZ2Fpbi4KCkBpdGVtIApp ZiBAY29kZXtxdWVyeX0gaXMgYSBsaXN0IG9mIGludGVnZXJzLCByZXR1cm5zIGEgdHVwbGUgb2Yg T0VJUyBzZXF1ZW5jZXMKY29udGFpbmluZyBpdCBhcyBhIHN1YnNlcXVlbmNlLiBUaG9zZSBzZXF1 ZW5jZXMgY2FuIGJlIHVzZWQgd2l0aG91dAp0aGUgbmVlZCB0byBmZXRjaCB0aGUgZGF0YWJhc2Ug YWdhaW4uCkBlbmQgaXRlbWl6ZQoKRVhBTVBMRVM6CgpAZXhhbXBsZQpzYWdlOiBvZWlzClRoZSBP bi1MaW5lIEVuY3ljbG9wZWRpYSBvZiBJbnRlZ2VyIFNlcXVlbmNlcyAoaHR0cDovL29laXMub3Jn LykKQGVuZCBleGFtcGxlCgpBIHBhcnRpY3VsYXIgc2VxdWVuY2UgY2FuIGJlIGNhbGxlZCBieSBp dHMgQS1udW1iZXIgb3IgbnVtYmVyOgoKQGV4YW1wbGUKc2FnZTogb2VpcygnQTAwMDA0MCcpICAg ICAgICAgICAgICAgICAgICAgICAgICAgIyBvcHRpb25hbCAtLSBpbnRlcm5ldApBMDAwMDQwOiBU aGUgcHJpbWUgbnVtYmVycy4KCnNhZ2U6IG9laXMoNDUpICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICMgb3B0aW9uYWwgLS0gaW50ZXJuZXQKQTAwMDA0NTogRmlib25hY2NpIG51bWJl cnM6IEYobikgPSBGKG4tMSkgKyBGKG4tMikgd2l0aCBGKDApID0gMCBhbmQgRigxKSA9IDEuCkBl bmQgZXhhbXBsZQoKVGhlIGRhdGFiYXNlIGNhbiBiZSBzZWFyY2hlZCBieSBzdWJzZXF1ZW5jZToK CkBleGFtcGxlCnNhZ2U6IHNlYXJjaCA9IG9laXMoWzEsMiwzLDUsOCwxM10pIDsgc2VhcmNoICAg ICMgb3B0aW9uYWwgLS0gaW50ZXJuZXQKMDogQTAwMDA0NTogRmlib25hY2NpIG51bWJlcnM6IEYo bikgPSBGKG4tMSkgKyBGKG4tMikgd2l0aCBGKDApID0gMCBhbmQgRigxKSA9IDEuCjE6IEEwMjc5 MjY6IFRyaWFuZ3VsYXIgYXJyYXkgVCByZWFkIGJ5IHJvd3M6IFQobiwwKSA9IFQobiwybikgPSAx IGZvciBuID49IDA7IFQobiwxKSA9IDEgZm9yIG4gPj0gMTsgVChuLGspID0gVChuLTEsay0yKSAr IFQobi0xLGstMSkgZm9yIGsgPSAyLi4ybi0xLCBuID49IDIuCjI6IEEwMDExMjk6IEljY2Fub2Jp ZiBudW1iZXJzOiByZXZlcnNlIGRpZ2l0cyBvZiB0d28gcHJldmlvdXMgdGVybXMgYW5kIGFkZC4K CnNhZ2U6IGZpYm8gPSBzZWFyY2hbMF0gICAgICAgICAgICAgICAgICAgICAgICAgIyBvcHRpb25h bCAtLSBpbnRlcm5ldAoKc2FnZTogZmliby5uYW1lKCkgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIyBvcHRpb25hbCAtLSBpbnRlcm5ldAonRmlib25hY2NpIG51bWJlcnM6IEYobikgPSBG KG4tMSkgKyBGKG4tMikgd2l0aCBGKDApID0gMCBhbmQgRigxKSA9IDEuJwoKc2FnZTogZmliby5m aXJzdF90ZXJtcygpICAgICAgICAgICAgICAgICAgICAgICAgIyBvcHRpb25hbCAtLSBpbnRlcm5l dAooMCwgMSwgMSwgMiwgMywgNSwgOCwgMTMsIDIxLCAzNCwgNTUsIDg5LCAxNDQsIDIzMywgMzc3 LCA2MTAsIDk4NywKMTU5NywgMjU4NCwgNDE4MSwgNjc2NSwgMTA5NDYsIDE3NzExLCAyODY1Nywg NDYzNjgsIDc1MDI1LCAxMjEzOTMsCjE5NjQxOCwgMzE3ODExLCA1MTQyMjksIDgzMjA0MCwgMTM0 NjI2OSwgMjE3ODMwOSwgMzUyNDU3OCwgNTcwMjg4NywKOTIyNzQ2NSwgMTQ5MzAzNTIsIDI0MTU3 ODE3LCAzOTA4ODE2OSkKCnNhZ2U6IGZpYm8uY3Jvc3NfcmVmZXJlbmNlcygpWzBdICAgICAgICAg ICAgICAgICMgb3B0aW9uYWwgLS0gaW50ZXJuZXQKJ0EwMzk4MzQnCgpzYWdlOiBmaWJvID09IG9l aXMoNDUpICAgICAgICAgICAgICAgICAgICAgICAgICAjIG9wdGlvbmFsIC0tIGludGVybmV0ClRy dWUKCnNhZ2U6IHNmaWJvID0gb2VpcygnQTAzOTgzNCcpICAgICAgICAgICAgICAgICAgICMgb3B0 aW9uYWwgLS0gaW50ZXJuZXQKc2FnZTogc2ZpYm8uZmlyc3RfdGVybXMoKSAgICAgICAgICAgICAg ICAgICAgICAgIyBvcHRpb25hbCAtLSBpbnRlcm5ldAooMSwgMSwgMCwgMSwgLTEsIDIsIC0zLCA1 LCAtOCwgMTMsIC0yMSwgMzQsIC01NSwgODksIC0xNDQsIDIzMywKLTM3NywgNjEwLCAtOTg3LCAx NTk3LCAtMjU4NCwgNDE4MSwgLTY3NjUsIDEwOTQ2LCAtMTc3MTEsIDI4NjU3LAotNDYzNjgsIDc1 MDI1LCAtMTIxMzkzLCAxOTY0MTgsIC0zMTc4MTEsIDUxNDIyOSwgLTgzMjA0MCwgMTM0NjI2OSwK LTIxNzgzMDksIDM1MjQ1NzgsIC01NzAyODg3LCA5MjI3NDY1LCAtMTQ5MzAzNTIsIDI0MTU3ODE3 KQoKc2FnZTogc2ZpYm8uZmlyc3RfdGVybXMoYWJzb2x1dGVfdmFsdWU9VHJ1ZSlbMjoyMF0gPT0g Zmliby5maXJzdF90ZXJtcygpWzoxOF0gICAjIG9wdGlvbmFsIC0tIGludGVybmV0ClRydWUKCnNh Z2U6IGZpYm8uZm9ybXVsYXMoKVs0XSAgICAgICAgICAgICAgICAgICAgICAgICMgb3B0aW9uYWwg LS0gaW50ZXJuZXQKJ0YobikgPSBGKG4tMSkgKyBGKG4tMikgPSAtKC0xKV5uIEYoLW4pLicKCnNh Z2U6IGZpYm8uY29tbWVudHMoKVsxXSAgICAgICAgICAgICAgICAgICAgICAgICMgb3B0aW9uYWwg LS0gaW50ZXJuZXQKIkYobisyKSA9IG51bWJlciBvZiBiaW5hcnkgc2VxdWVuY2VzIG9mIGxlbmd0 aCBuIHRoYXQgaGF2ZSBubwpjb25zZWN1dGl2ZSAwJ3MuIgoKc2FnZTogZmliby5saW5rcygpWzBd ICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBvcHRpb25hbCAtLSBpbnRlcm5ldAonaHR0cDov L29laXMub3JnL0EwMDAwNDUvYjAwMDA0NS50eHQnCkBlbmQgZXhhbXBsZQoKVGhlIGRhdGFiYXNl IGNhbiBiZSBzZWFyY2hlZCBieSBkZXNjcmlwdGlvbjoKCkBleGFtcGxlCnNhZ2U6IG9laXMoJ3By aW1lIGdhcCBmYWN0b3JpemF0aW9uJywgbWF4X3Jlc3VsdHM9NCkgICAgICAgICAgICAgICAgIyBv cHRpb25hbCAtLSBpbnRlcm5ldAowOiBBMDczNDkxOiBOdW1iZXJzIGhhdmluZyBubyBwcmltZSBn YXBzIGluIHRoZWlyIGZhY3Rvcml6YXRpb24uCjE6IEEwNzM0OTA6IE51bWJlciBvZiBwcmltZSBn YXBzIGluIGZhY3Rvcml6YXRpb24gb2Ygbi4KMjogQTA3MzQ5MjogTnVtYmVycyBoYXZpbmcgYXQg bGVhc3Qgb25lIHByaW1lIGdhcCBpbiB0aGVpciBmYWN0b3JpemF0aW9uLgozOiBBMDczNDkzOiBO dW1iZXJzIGhhdmluZyBleGFjdGx5IG9uZSBwcmltZSBnYXAgaW4gdGhlaXIgZmFjdG9yaXphdGlv bi4KQGVuZCBleGFtcGxlCgpAY2FydG91Y2hlCkBxdW90YXRpb24gV2FybmluZyAKVGhlIGZvbGxv d2luZyB3aWxsIGZldGNoIHRoZSBPRUlTIGRhdGFiYXNlIHR3aWNlIChvbmNlIGZvciBzZWFyY2hp bmcgdGhlCmRhdGFiYXNlLCBhbmQgb25jZSBhZ2FpbiBmb3IgY3JlYXRpbmcgdGhlIHNlcXVlbmNl IEBjb2Rle2ZpYm99KToKCkBleGFtcGxlCnNhZ2U6IG9laXMoWzEsMiwzLDUsOCwxM10pICAgICAg ICAgICAgICAgICAgIyBvcHRpb25hbCAtLSBpbnRlcm5ldAowOiBBMDAwMDQ1OiBGaWJvbmFjY2kg bnVtYmVyczogRihuKSA9IEYobi0xKSArIEYobi0yKSB3aXRoIEYoMCkgPSAwIGFuZCBGKDEpID0g MS4KMTogQTAyNzkyNjogVHJpYW5ndWxhciBhcnJheSBUIHJlYWQgYnkgcm93czogVChuLDApID0g VChuLDJuKSA9IDEgZm9yIG4gPj0gMDsgVChuLDEpID0gMSBmb3IgbiA+PSAxOyBUKG4saykgPSBU KG4tMSxrLTIpICsgVChuLTEsay0xKSBmb3IgayA9IDIuLjJuLTEsIG4gPj0gMi4KMjogQTAwMTEy OTogSWNjYW5vYmlmIG51bWJlcnM6IHJldmVyc2UgZGlnaXRzIG9mIHR3byBwcmV2aW91cyB0ZXJt cyBhbmQgYWRkLgoKc2FnZTogZmlibyA9IG9laXMoJ0EwMDAwNDUnKSAgICAgICAgICAgICAgICAj IG9wdGlvbmFsIC0tIGludGVybmV0CkBlbmQgZXhhbXBsZQoKRG8gbm90IGRvIHRoaXMsIGl0IGlz IHNsb3csIGl0IGNvc3RzIGJhbmR3aWR0aCBhbmQgc2VydmVyIHJlc291cmNlcyAhCkluc3RlYWQs IGRvIHRoZSBmb2xsb3dpbmcsIHRvIHJldXNlIHRoZSByZXN1bHQgb2YgdGhlIHNlYXJjaCB0byBj cmVhdGUKdGhlIHNlcXVlbmNlOgoKQGV4YW1wbGUKc2FnZTogb2VpcyhbMSwyLDMsNSw4LDEzXSkg ICAgICAgICAgICAgICAgICAjIG9wdGlvbmFsIC0tIGludGVybmV0CjA6IEEwMDAwNDU6IEZpYm9u YWNjaSBudW1iZXJzOiBGKG4pID0gRihuLTEpICsgRihuLTIpIHdpdGggRigwKSA9IDAgYW5kIEYo MSkgPSAxLgoxOiBBMDI3OTI2OiBUcmlhbmd1bGFyIGFycmF5IFQgcmVhZCBieSByb3dzOiBUKG4s MCkgPSBUKG4sMm4pID0gMSBmb3IgbiA+PSAwOyBUKG4sMSkgPSAxIGZvciBuID49IDE7IFQobixr KSA9IFQobi0xLGstMikgKyBUKG4tMSxrLTEpIGZvciBrID0gMi4uMm4tMSwgbiA+PSAyLgoyOiBB MDAxMTI5OiBJY2Nhbm9iaWYgbnVtYmVyczogcmV2ZXJzZSBkaWdpdHMgb2YgdHdvIHByZXZpb3Vz IHRlcm1zIGFuZCBhZGQuCgpzYWdlOiBmaWJvID0gX1swXSAgICAgICAgICAgICAgICAgICAgICAg ICAgICMgb3B0aW9uYWwgLS0gaW50ZXJuZXQKQGVuZCBleGFtcGxlCkBlbmQgcXVvdGF0aW9uCkBl bmQgY2FydG91Y2hlCgpAZ2VpbmRleCBicm93c2UoKSAoc2FnZS5kYXRhYmFzZXMub2Vpcy5PRUlT IG1ldGhvZCkKQGFuY2hvcntzYWdlL2RhdGFiYXNlcy9vZWlzIHNhZ2UgZGF0YWJhc2VzIG9laXMg T0VJUyBicm93c2V9QGFuY2hvcns0Yn0KQGRlZmZuIHtNZXRob2R9IGJyb3dzZSAoKQoKT3BlbiB0 aGUgT0VJUyB3ZWIgcGFnZSBpbiBhIGJyb3dzZXIuCgpFWEFNUExFUzoKCkBleGFtcGxlCnNhZ2U6 IG9laXMuYnJvd3NlKCkgICAgICAgICAgICAgICAgICAgICAgICAgIyBvcHRpb25hbCAtLSB3ZWJi cm93c2VyCkBlbmQgZXhhbXBsZQpAZW5kIGRlZmZuCgpAZ2VpbmRleCBmaW5kX2J5X2Rlc2NyaXB0 aW9uKCkgKHNhZ2UuZGF0YWJhc2VzLm9laXMuT0VJUyBtZXRob2QpCkBhbmNob3J7c2FnZS9kYXRh YmFzZXMvb2VpcyBzYWdlIGRhdGFiYXNlcyBvZWlzIE9FSVMgZmluZF9ieV9kZXNjcmlwdGlvbn1A YW5jaG9yezRjfQpAZGVmZm4ge01ldGhvZH0gZmluZF9ieV9kZXNjcmlwdGlvbiAoZGVzY3JpcHRp b24sIG1heF9yZXN1bHRzPTMsIGZpcnN0X3Jlc3VsdD0wKQoKU2VhcmNoIGZvciBPRUlTIHNlcXVl bmNlcyBjb3JyZXNwb25kaW5nIHRvIHRoZSBkZXNjcmlwdGlvbi4KCklOUFVUOgoKCkBpdGVtaXpl IC0KCkBpdGVtIApAY29kZXtkZXNjcmlwdGlvbn0gLSAoc3RyaW5nKSB0aGUgZGVzY3JpcHRpb24g dGhlIHNlYXJjaGVkIHNlcXVlbmNlcy4KCkBpdGVtIApAY29kZXttYXhfcmVzdWx0c30gLSAoaW50 ZWdlciwgZGVmYXVsdDogMykgdGhlIG1heGltdW0gbnVtYmVyIG9mIHJlc3VsdHMKd2Ugd2FudC4g SW4gYW55IGNhc2UsIHRoZSBvbi1saW5lIGVuY3ljbG9wZWRpYSB3aWxsIG5vdCByZXR1cm4gbW9y ZQp0aGFuIDEwMCByZXN1bHRzLgoKQGl0ZW0gCkBjb2Rle2ZpcnN0X3Jlc3VsdH0gLSAoaW50ZWdl ciwgZGVmYXVsdDogMCkgYWxsb3cgdG8gc2tpcCB0aGUKQGNvZGV7Zmlyc3RfcmVzdWx0fSBmaXJz dCByZXN1bHRzIGluIHRoZSBzZWFyY2gsIHRvIGdvIGZ1cnRoZXIuClRoaXMgaXMgdXNlZnVsIGlm IHlvdSBhcmUgbG9va2luZyBmb3IgYSBzZXF1ZW5jZSB0aGF0IG1heSBhcHBlYXIKYWZ0ZXIgdGhl IDEwMCBmaXJzdCBmb3VuZCBzZXF1ZW5jZXMuCkBlbmQgaXRlbWl6ZQoKT1VUUFVUOgoKCkBpdGVt aXplIC0KCkBpdGVtIAphIHR1cGxlICh3aXRoIGZhbmN5IGZvcm1hdHRpbmcpIG9mIGF0IG1vc3Qg QGNvZGV7bWF4X3Jlc3VsdHN9IE9FSVMKc2VxdWVuY2VzLiBUaG9zZSBzZXF1ZW5jZXMgY2FuIGJl IHVzZWQgd2l0aG91dCB0aGUgbmVlZCB0byBmZXRjaCB0aGUKZGF0YWJhc2UgYWdhaW4uCkBlbmQg aXRlbWl6ZQoKRVhBTVBMRVM6CgpAZXhhbXBsZQpzYWdlOiBvZWlzLmZpbmRfYnlfZGVzY3JpcHRp b24oJ3ByaW1lIGdhcCBmYWN0b3JpemF0aW9uJykgICAgICAgIyBvcHRpb25hbCAtLSBpbnRlcm5l dAowOiBBMDczNDkxOiBOdW1iZXJzIGhhdmluZyBubyBwcmltZSBnYXBzIGluIHRoZWlyIGZhY3Rv cml6YXRpb24uCjE6IEEwNzM0OTA6IE51bWJlciBvZiBwcmltZSBnYXBzIGluIGZhY3Rvcml6YXRp b24gb2Ygbi4KMjogQTA3MzQ5MjogTnVtYmVycyBoYXZpbmcgYXQgbGVhc3Qgb25lIHByaW1lIGdh cCBpbiB0aGVpciBmYWN0b3JpemF0aW9uLgoKc2FnZTogcHJpbWVfZ2FwcyA9IF9bMV0gOyBwcmlt ZV9nYXBzICAgICAgICAjIG9wdGlvbmFsIC0tIGludGVybmV0CkEwNzM0OTA6IE51bWJlciBvZiBw cmltZSBnYXBzIGluIGZhY3Rvcml6YXRpb24gb2Ygbi4KQGVuZCBleGFtcGxlCgpAZXhhbXBsZQpz YWdlOiBvZWlzKCdiZWF2ZXInKSAgICAgICAgICAgICAgICAgICAgICAgICMgb3B0aW9uYWwgLS0g aW50ZXJuZXQKMDogQTAyODQ0NDogQnVzeSBCZWF2ZXIgc2VxdWVuY2UsIG9yIFJhZG8ncyBzaWdt YSBmdW5jdGlvbjogLi4uCjE6IEEwNjA4NDM6IEJ1c3kgQmVhdmVyIHByb2JsZW06IGEobikgPSBt YXhpbWFsIG51bWJlciBvZiBzdGVwcyAuLi4KMjogQTEzMTk1NjogQnVzeSBCZWF2ZXIgdmFyaWF0 aW9uOiBtYXhpbXVtIG51bWJlciBvZiBzdGVwcyBmb3IgLi4uCgpzYWdlOiBvZWlzKCdiZWF2ZXIn LCBtYXhfcmVzdWx0cz00LCBmaXJzdF9yZXN1bHQ9MikgICAgICMgb3B0aW9uYWwgLS0gaW50ZXJu ZXQKMDogQTEzMTk1NjogQnVzeSBCZWF2ZXIgdmFyaWF0aW9uOiBtYXhpbXVtIG51bWJlciBvZiBz dGVwcyBmb3IgLi4uCjE6IEExNDE0NzU6IE51bWJlciBvZiBUdXJpbmcgbWFjaGluZXMgd2l0aCBu IHN0YXRlcyBmb2xsb3dpbmcgLi4uCjI6IEExMzE5NTc6IEJ1c3kgQmVhdmVyIHNpZ21hIHZhcmlh dGlvbjogbWF4aW11bSBudW1iZXIgb2YgMSdzIC4uLgozOiBBMDUyMjAwOiBOdW1iZXIgb2Ygbi1z dGF0ZSwgMi1zeW1ib2wsIGQrIGluIEB7TEVGVCwgUklHSFRAfSwgLi4uCkBlbmQgZXhhbXBsZQpA ZW5kIGRlZmZuCgpAZ2VpbmRleCBmaW5kX2J5X2lkKCkgKHNhZ2UuZGF0YWJhc2VzLm9laXMuT0VJ UyBtZXRob2QpCkBhbmNob3J7c2FnZS9kYXRhYmFzZXMvb2VpcyBzYWdlIGRhdGFiYXNlcyBvZWlz IE9FSVMgZmluZF9ieV9pZH1AYW5jaG9yezRkfQpAZGVmZm4ge01ldGhvZH0gZmluZF9ieV9pZCAo aWRlbnQpCgpJTlBVVDoKCgpAaXRlbWl6ZSAtCgpAaXRlbSAKQGNvZGV7aWRlbnR9IC0gYSBzdHJp bmcgcmVwcmVzZW50aW5nIHRoZSBBLW51bWJlciBvZiB0aGUgc2VxdWVuY2UKb3IgYW4gaW50ZWdl ciByZXByZXNlbnRpbmcgaXRzIG51bWJlci4KQGVuZCBpdGVtaXplCgpPVVRQVVQ6CgoKQGl0ZW1p emUgLQoKQGl0ZW0gClRoZSBPRUlTIHNlcXVlbmNlIHdob3NlIEEtbnVtYmVyIG9yIG51bWJlciBj b3JyZXNwb25kcyB0bwpAY29kZXtpZGVudH0uCkBlbmQgaXRlbWl6ZQoKRVhBTVBMRVM6CgpAZXhh bXBsZQpzYWdlOiBvZWlzLmZpbmRfYnlfaWQoJ0EwMDAwNDAnKSAgICAgICAgICAgICMgb3B0aW9u YWwgLS0gaW50ZXJuZXQKQTAwMDA0MDogVGhlIHByaW1lIG51bWJlcnMuCgpzYWdlOiBvZWlzLmZp bmRfYnlfaWQoNDApICAgICAgICAgICAgICAgICAgICMgb3B0aW9uYWwgLS0gaW50ZXJuZXQKQTAw MDA0MDogVGhlIHByaW1lIG51bWJlcnMuCkBlbmQgZXhhbXBsZQpAZW5kIGRlZmZuCgpAZ2VpbmRl eCBmaW5kX2J5X3N1YnNlcXVlbmNlKCkgKHNhZ2UuZGF0YWJhc2VzLm9laXMuT0VJUyBtZXRob2Qp CkBhbmNob3J7c2FnZS9kYXRhYmFzZXMvb2VpcyBzYWdlIGRhdGFiYXNlcyBvZWlzIE9FSVMgZmlu ZF9ieV9zdWJzZXF1ZW5jZX1AYW5jaG9yezRlfQpAZGVmZm4ge01ldGhvZH0gZmluZF9ieV9zdWJz ZXF1ZW5jZSAoc3Vic2VxdWVuY2UsIG1heF9yZXN1bHRzPTMsIGZpcnN0X3Jlc3VsdD0wKQoKU2Vh cmNoIGZvciBPRUlTIHNlcXVlbmNlcyBjb250YWluaW5nIHRoZSBnaXZlbiBzdWJzZXF1ZW5jZS4K CklOUFVUOgoKCkBpdGVtaXplIC0KCkBpdGVtIApAY29kZXtzdWJzZXF1ZW5jZX0gLSBhIGxpc3Qg b2YgaW50ZWdlcnMuCgpAaXRlbSAKQGNvZGV7bWF4X3Jlc3VsdHN9IC0gKGludGVnZXIsIGRlZmF1 bHQ6IDMpLCB0aGUgbWF4aW11bSBvZiByZXN1bHRzIHJlcXVlc3RlZC4KCkBpdGVtIApAY29kZXtm aXJzdF9yZXN1bHR9IC0gKGludGVnZXIsIGRlZmF1bHQ6IDApIGFsbG93IHRvIHNraXAgdGhlCkBj b2Rle2ZpcnN0X3Jlc3VsdH0gZmlyc3QgcmVzdWx0cyBpbiB0aGUgc2VhcmNoLCB0byBnbyBmdXJ0 aGVyLgpUaGlzIGlzIHVzZWZ1bCBpZiB5b3UgYXJlIGxvb2tpbmcgZm9yIGEgc2VxdWVuY2UgdGhh dCBtYXkgYXBwZWFyCmFmdGVyIHRoZSAxMDAgZmlyc3QgZm91bmQgc2VxdWVuY2VzLgpAZW5kIGl0 ZW1pemUKCk9VVFBVVDoKCgpAaXRlbWl6ZSAtCgpAaXRlbSAKYSB0dXBsZSAod2l0aCBmYW5jeSBm b3JtYXR0aW5nKSBvZiBhdCBtb3N0IEBjb2Rle21heF9yZXN1bHRzfSBPRUlTCnNlcXVlbmNlcy4g VGhvc2Ugc2VxdWVuY2VzIGNhbiBiZSB1c2VkIHdpdGhvdXQgdGhlIG5lZWQgdG8gZmV0Y2ggdGhl CmRhdGFiYXNlIGFnYWluLgpAZW5kIGl0ZW1pemUKCkVYQU1QTEVTOgoKQGV4YW1wbGUKc2FnZTog b2Vpcy5maW5kX2J5X3N1YnNlcXVlbmNlKFsyLCAzLCA1LCA4LCAxMywgMjEsIDM0LCA1NSwgODks IDE0NCwgMjMzLCAzNzddKSAjIG9wdGlvbmFsIC0tIGludGVybmV0CjA6IEEwMDAwNDU6IEZpYm9u YWNjaSBudW1iZXJzOiBGKG4pID0gRihuLTEpICsgRihuLTIpIHdpdGggRigwKSA9IDAgYW5kIEYo MSkgPSAxLgoxOiBBMTc3MTk0OiBGaWJvbmFjY2kgbnVtYmVycyB3aG9zZSBkZWNpbWFsIGV4cHJl c3Npb24gZG9lcyBub3QgY29udGFpbiBhbnkgZGlnaXQgMC4KMjogQTIxMjgwNDogRXhwYW5zaW9u IG9mICgxLXgpLygxLXgteF4yKS4KCnNhZ2U6IGZpYm8gPSBfWzBdIDsgZmlibyAgICAgICAgICAg ICAgICAgICAgIyBvcHRpb25hbCAtLSBpbnRlcm5ldApBMDAwMDQ1OiBGaWJvbmFjY2kgbnVtYmVy czogRihuKSA9IEYobi0xKSArIEYobi0yKSB3aXRoIEYoMCkgPSAwIGFuZCBGKDEpID0gMS4KQGVu ZCBleGFtcGxlCkBlbmQgZGVmZm4KQGVuZCBkZWZmbgoKQGdlaW5kZXggT0VJU1NlcXVlbmNlIChj bGFzcyBpbiBzYWdlLmRhdGFiYXNlcy5vZWlzKQpAYW5jaG9ye3NhZ2UvZGF0YWJhc2VzL29laXMg c2FnZSBkYXRhYmFzZXMgb2VpcyBPRUlTU2VxdWVuY2V9QGFuY2hvcns0Zn0KQGRlZmZuIHtDbGFz c30gc2FnZS5kYXRhYmFzZXMub2Vpcy5PRUlTU2VxdWVuY2UgKGVudHJ5KQoKQmFzZXM6IHNhZ2Uu c3RydWN0dXJlLnNhZ2Vfb2JqZWN0LlNhZ2VPYmplY3RAZm9vdG5vdGV7Li4vLi4vLi4vLi4vLi4v Li4vaHRtbC9lbi9yZWZlcmVuY2Uvc3RydWN0dXJlL3NhZ2Uvc3RydWN0dXJlL3NhZ2Vfb2JqZWN0 Lmh0bWwjc2FnZS5zdHJ1Y3R1cmUuc2FnZV9vYmplY3QuU2FnZU9iamVjdH0KClRoZSBjbGFzcyBv ZiBPRUlTIHNlcXVlbmNlcy4KClRoaXMgY2xhc3MgaW1wbGVtZW50cyBPRUlTIHNlcXVlbmNlcy4g U3VjaCBzZXF1ZW5jZXMgYXJlIHByb2R1Y2VkIGZyb20gYQpzdHJpbmcgaW4gdGhlIE9FSVMgZm9y bWF0LiBUaGV5IGFyZSB1c3VhbGx5IHByb2R1Y2VkIGJ5IGNhbGxzIHRvIHRoZQpPbi1MaW5lIEVu Y3ljbG9wZWRpYSBvZiBJbnRlZ2VyIFNlcXVlbmNlcywgcmVwcmVzZW50ZWQgYnkgdGhlIGNsYXNz CkByZWZ7NGEsLE9FSVN9LgoKQGNhcnRvdWNoZQpAcXVvdGF0aW9uIE5vdGUgClNpbmNlIHNvbWUg c2VxdWVuY2VzIGRvIG5vdCBzdGFydCB3aXRoIGluZGV4IDAsIHRoZXJlIGlzIGEgZGlmZmVyZW5j ZQpiZXR3ZWVuIGNhbGxpbmcgYW5kIGdldHRpbmcgaXRlbSwgc2VlIEByZWZ7NTAsLF9fY2FsbF9f KCl9IGZvciBtb3JlIGRldGFpbHMKCkBleGFtcGxlCnNhZ2U6IHNmaWJvID0gb2VpcygnQTAzOTgz NCcpICAgICAgICAgICAgICAgIyBvcHRpb25hbCAtLSBpbnRlcm5ldApzYWdlOiBzZmliby5maXJz dF90ZXJtcygpWzoxMF0gICAgICAgICAgICAgICMgb3B0aW9uYWwgLS0gaW50ZXJuZXQKKDEsIDEs IDAsIDEsIC0xLCAyLCAtMywgNSwgLTgsIDEzKQoKc2FnZTogc2ZpYm8oLTIpICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAjIG9wdGlvbmFsIC0tIGludGVybmV0CjEKc2FnZTogc2ZpYm8oMykg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIG9wdGlvbmFsIC0tIGludGVybmV0CjIKc2Fn ZTogc2ZpYm8ub2Zmc2V0cygpICAgICAgICAgICAgICAgICAgICAgICAjIG9wdGlvbmFsIC0tIGlu dGVybmV0CigtMiwgNikKCnNhZ2U6IHNmaWJvWzBdICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIyBvcHRpb25hbCAtLSBpbnRlcm5ldAoxCnNhZ2U6IHNmaWJvWzZdICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIyBvcHRpb25hbCAtLSBpbnRlcm5ldAotMwpAZW5kIGV4YW1wbGUKQGVu ZCBxdW90YXRpb24KQGVuZCBjYXJ0b3VjaGUKCkBnZWluZGV4IF9fY2FsbF9fKCkgKHNhZ2UuZGF0 YWJhc2VzLm9laXMuT0VJU1NlcXVlbmNlIG1ldGhvZCkKQGFuY2hvcntzYWdlL2RhdGFiYXNlcy9v ZWlzIHNhZ2UgZGF0YWJhc2VzIG9laXMgT0VJU1NlcXVlbmNlIF9fY2FsbF9ffUBhbmNob3J7NTB9 CkBkZWZmbiB7TWV0aG9kfSBfX2NhbGxfXyAoaykKClJldHVybiB0aGUgZWxlbWVudCBvZiB0aGUg c2VxdWVuY2UgQGNvZGV7c2VsZn0gd2l0aCBpbmRleCBAY29kZXtrfS4KCklOUFVUOgoKCkBpdGVt aXplIC0KCkBpdGVtIApAY29kZXtrfSAtIGludGVnZXIuCkBlbmQgaXRlbWl6ZQoKT1VUUFVUOgoK CkBpdGVtaXplIC0KCkBpdGVtIAppbnRlZ2VyLgpAZW5kIGl0ZW1pemUKCkBjYXJ0b3VjaGUKQHF1 b3RhdGlvbiBOb3RlIApUaGUgZmlyc3QgaW5kZXggb2YgdGhlIHNlcXVlbmNlIEBjb2Rle3NlbGZ9 IGlzIG5vdCBuZWNlc3NhcmlseSB6ZXJvLAppdCBkZXBlbmRzIG9uIHRoZSBmaXJzdCBvZmZzZXQg b2YgQGNvZGV7c2VsZn0uIElmIHRoZSBzZXF1ZW5jZQpyZXByZXNlbnRzIHRoZSBkZWNpbWFsIGV4 cGFuc2lvbiBvZiBhIHJlYWwgbnVtYmVyLCB0aGUgaW5kZXggMApjb3JyZXNwb25kcyB0byB0aGUg ZGlnaXQgcmlnaHQgYWZ0ZXIgdGhlIGRlY2ltYWwgcG9pbnQuCkBlbmQgcXVvdGF0aW9uCkBlbmQg Y2FydG91Y2hlCgpFWEFNUExFUzoKCkBleGFtcGxlCnNhZ2U6IGYgPSBvZWlzKDQ1KSAgICAgICAg ICAgICAgICAgICAgICAgICAgIyBvcHRpb25hbCAtLSBpbnRlcm5ldApzYWdlOiBmLmZpcnN0X3Rl cm1zKClbOjEwXSAgICAgICAgICAgICAgICAgICMgb3B0aW9uYWwgLS0gaW50ZXJuZXQKKDAsIDEs IDEsIDIsIDMsIDUsIDgsIDEzLCAyMSwgMzQpCgpzYWdlOiBmKDQpICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICMgb3B0aW9uYWwgLS0gaW50ZXJuZXQKMwpAZW5kIGV4YW1wbGUKCkBl eGFtcGxlCnNhZ2U6IHNmaWJvID0gb2VpcygnQTAzOTgzNCcpICAgICAgICAgICAgICAgIyBvcHRp b25hbCAtLSBpbnRlcm5ldApzYWdlOiBzZmliby5maXJzdF90ZXJtcygpWzoxMF0gICAgICAgICAg ICAgICMgb3B0aW9uYWwgLS0gaW50ZXJuZXQKKDEsIDEsIDAsIDEsIC0xLCAyLCAtMywgNSwgLTgs IDEzKQoKc2FnZTogc2ZpYm8oLTIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIG9wdGlv bmFsIC0tIGludGVybmV0CjEKc2FnZTogc2ZpYm8oNCkgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAjIG9wdGlvbmFsIC0tIGludGVybmV0Ci0zCnNhZ2U6IHNmaWJvLm9mZnNldHMoKSAgICAg ICAgICAgICAgICAgICAgICAgIyBvcHRpb25hbCAtLSBpbnRlcm5ldAooLTIsIDYpCkBlbmQgZXhh bXBsZQoKVEVTVFM6CgpAZXhhbXBsZQpzYWdlOiBzID0gb2Vpcy5faW1hZ2luYXJ5X3NlcXVlbmNl KCkKc2FnZTogcygzOCkKMQpzYWdlOiBzKDQyKQotMQpzYWdlOiBzKDIpClRyYWNlYmFjayAobW9z dCByZWNlbnQgY2FsbCBsYXN0KToKLi4uClZhbHVlRXJyb3I6IFNlcXVlbmNlIEE5OTk5OTkgaXMg bm90IGRlZmluZWQgKG9yIGtub3duKSBmb3IgaW5kZXggMgpAZW5kIGV4YW1wbGUKQGVuZCBkZWZm bgoKQGdlaW5kZXggYXV0aG9yKCkgKHNhZ2UuZGF0YWJhc2VzLm9laXMuT0VJU1NlcXVlbmNlIG1l dGhvZCkKQGFuY2hvcntzYWdlL2RhdGFiYXNlcy9vZWlzIHNhZ2UgZGF0YWJhc2VzIG9laXMgT0VJ U1NlcXVlbmNlIGF1dGhvcn1AYW5jaG9yezUxfQpAZGVmZm4ge01ldGhvZH0gYXV0aG9yICgpCgpS ZXR1cm5zIHRoZSBhdXRob3Igb2YgdGhlIHNlcXVlbmNlIGluIHRoZSBlbmN5Y2xvcGVkaWEuCgpP VVRQVVQ6CgoKQGl0ZW1pemUgLQoKQGl0ZW0gCnN0cmluZy4KQGVuZCBpdGVtaXplCgpFWEFNUExF UzoKCkBleGFtcGxlCnNhZ2U6IGYgPSBvZWlzKDQ1KSA7IGYgICAgICAgICAgICAgICAgICAgICAg IyBvcHRpb25hbCAtLSBpbnRlcm5ldApBMDAwMDQ1OiBGaWJvbmFjY2kgbnVtYmVyczogRihuKSA9 IEYobi0xKSArIEYobi0yKSB3aXRoIEYoMCkgPSAwIGFuZCBGKDEpID0gMS4KCnNhZ2U6IGYuYXV0 aG9yKCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBvcHRpb25hbCAtLSBpbnRlcm5ldAon X04uIEouIEEuIFNsb2FuZV8sIEFwciAzMCAxOTkxJwpAZW5kIGV4YW1wbGUKClRFU1RTOgoKQGV4 YW1wbGUKc2FnZTogcyA9IG9laXMuX2ltYWdpbmFyeV9zZXF1ZW5jZSgpCnNhZ2U6IHMuYXV0aG9y KCkKJ0Fub255bW91cy4nCkBlbmQgZXhhbXBsZQpAZW5kIGRlZmZuCgpAZ2VpbmRleCBicm93c2Uo KSAoc2FnZS5kYXRhYmFzZXMub2Vpcy5PRUlTU2VxdWVuY2UgbWV0aG9kKQpAYW5jaG9ye3NhZ2Uv ZGF0YWJhc2VzL29laXMgc2FnZSBkYXRhYmFzZXMgb2VpcyBPRUlTU2VxdWVuY2UgYnJvd3NlfUBh bmNob3J7NTJ9CkBkZWZmbiB7TWV0aG9kfSBicm93c2UgKCkKCk9wZW4gdGhlIE9FSVMgd2ViIHBh Z2UgYXNzb2NpYXRlZCB0byB0aGUgc2VxdWVuY2UgQGNvZGV7c2VsZn0gaW4gYSBicm93c2VyLgoK RVhBTVBMRVM6CgpAZXhhbXBsZQpzYWdlOiBmID0gb2Vpcyg0NSkgOyBmICAgICAgICAgICAgICAg ICAgICAgICMgb3B0aW9uYWwgLS0gaW50ZXJuZXQgd2ViYnJvd3NlcgpBMDAwMDQ1OiBGaWJvbmFj Y2kgbnVtYmVyczogRihuKSA9IEYobi0xKSArIEYobi0yKSB3aXRoIEYoMCkgPSAwIGFuZCBGKDEp ID0gMS4KCnNhZ2U6IGYuYnJvd3NlKCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBvcHRp b25hbCAtLSBpbnRlcm5ldCB3ZWJicm93c2VyCkBlbmQgZXhhbXBsZQoKVEVTVFM6CgpAZXhhbXBs ZQpzYWdlOiBzID0gb2Vpcy5faW1hZ2luYXJ5X3NlcXVlbmNlKCkgICAgICAgICMgb3B0aW9uYWwg LS0gd2ViYnJvd3NlcgpzYWdlOiBzLmJyb3dzZSgpICAgICAgICAgICAgICAgICAgICAgICAgICAg ICMgb3B0aW9uYWwgLS0gd2ViYnJvd3NlcgpAZW5kIGV4YW1wbGUKQGVuZCBkZWZmbgoKQGdlaW5k ZXggY29tbWVudHMoKSAoc2FnZS5kYXRhYmFzZXMub2Vpcy5PRUlTU2VxdWVuY2UgbWV0aG9kKQpA YW5jaG9ye3NhZ2UvZGF0YWJhc2VzL29laXMgc2FnZSBkYXRhYmFzZXMgb2VpcyBPRUlTU2VxdWVu Y2UgY29tbWVudHN9QGFuY2hvcns1M30KQGRlZmZuIHtNZXRob2R9IGNvbW1lbnRzICgpCgpSZXR1 cm4gYSB0dXBsZSBvZiBjb21tZW50cyBhc3NvY2lhdGVkIHRvIHRoZSBzZXF1ZW5jZSBAY29kZXtz ZWxmfS4KCk9VVFBVVDoKCgpAaXRlbWl6ZSAtCgpAaXRlbSAKdHVwbGUgb2Ygc3RyaW5ncyAod2l0 aCBmYW5jeSBmb3JtYXR0aW5nKS4KQGVuZCBpdGVtaXplCgpFWEFNUExFUzoKCkBleGFtcGxlCnNh Z2U6IGYgPSBvZWlzKDQ1KSA7IGYgICAgICAgICAgICAgICAgICAgICAgIyBvcHRpb25hbCAtLSBp bnRlcm5ldApBMDAwMDQ1OiBGaWJvbmFjY2kgbnVtYmVyczogRihuKSA9IEYobi0xKSArIEYobi0y KSB3aXRoIEYoMCkgPSAwIGFuZCBGKDEpID0gMS4KCnNhZ2U6IGYuY29tbWVudHMoKVs6M10gICAg ICAgICAgICAgICAgICAgICAgIyBvcHRpb25hbCAtLSBpbnRlcm5ldAowOiBBbHNvIHNvbWV0aW1l cyBjYWxsZWQgTGFtw6kncyBzZXF1ZW5jZS4KMTogRihuKzIpID0gbnVtYmVyIG9mIGJpbmFyeSBz ZXF1ZW5jZXMgb2YgbGVuZ3RoIG4gdGhhdCBoYXZlIG5vIGNvbnNlY3V0aXZlIDAncy4KMjogRihu KzIpID0gbnVtYmVyIG9mIHN1YnNldHMgb2YgQHsxLDIsLi4uLG5AfSB0aGF0IGNvbnRhaW4gbm8g Y29uc2VjdXRpdmUgaW50ZWdlcnMuCkBlbmQgZXhhbXBsZQoKVEVTVFM6CgpAZXhhbXBsZQpzYWdl OiBzID0gb2Vpcy5faW1hZ2luYXJ5X3NlcXVlbmNlKCkKc2FnZTogcy5jb21tZW50cygpCjA6IDQy IGlzIHRoZSBwcm9kdWN0IG9mIHRoZSBmaXJzdCA0IHByaW1lIG51bWJlcnMsIGV4Y2VwdCA1IGFu ZCBwZXJoYXBzIDEuCjE6IEFwYXJ0IGZyb20gdGhhdCwgaSBoYXZlIG5vIGNvbW1lbnQuCkBlbmQg ZXhhbXBsZQpAZW5kIGRlZmZuCgpAZ2VpbmRleCBjcm9zc19yZWZlcmVuY2VzKCkgKHNhZ2UuZGF0 YWJhc2VzLm9laXMuT0VJU1NlcXVlbmNlIG1ldGhvZCkKQGFuY2hvcntzYWdlL2RhdGFiYXNlcy9v ZWlzIHNhZ2UgZGF0YWJhc2VzIG9laXMgT0VJU1NlcXVlbmNlIGNyb3NzX3JlZmVyZW5jZXN9QGFu Y2hvcns1NH0KQGRlZmZuIHtNZXRob2R9IGNyb3NzX3JlZmVyZW5jZXMgKGZldGNoPUZhbHNlKQoK UmV0dXJuIGEgdHVwbGUgb2YgY3Jvc3MgcmVmZXJlbmNlcyBhc3NvY2lhdGVkIHRvIHRoZSBzZXF1 ZW5jZQpAY29kZXtzZWxmfS4KCklOUFVUOgoKCkBpdGVtaXplIC0KCkBpdGVtIApAY29kZXtmZXRj aH0gLSBib29sZWFuIChkZWZhdWx0OiBAY29kZXtGYWxzZX0pLgpAZW5kIGl0ZW1pemUKCk9VVFBV VDoKCgpAaXRlbWl6ZSAtCgpAaXRlbSAKaWYgQGNvZGV7ZmV0Y2h9IGlzIEBjb2Rle0ZhbHNlfSwg cmV0dXJuIGEgbGlzdCBvZiBPRUlTIElEcyAoc3RyaW5ncykuCgpAaXRlbSAKaWYgQGNvZGV7ZmV0 Y2h9IGlmIEBjb2Rle1RydWV9LCByZXR1cm4gYSB0dXBsZSBvZiBPRUlTIHNlcXVlbmNlcy4KQGVu ZCBpdGVtaXplCgpFWEFNUExFUzoKCkBleGFtcGxlCnNhZ2U6IG5iYWxhbmNlZCA9IG9laXMoIkEw MDU1OTgiKSA7IG5iYWxhbmNlZCAgICMgb3B0aW9uYWwgLS0gaW50ZXJuZXQKQTAwNTU5ODogYShu KT0xK3N1bSgobi1pKzEpKnBoaShpKSxpPTEuLm4pLgoKc2FnZTogbmJhbGFuY2VkLmNyb3NzX3Jl ZmVyZW5jZXMoKSAgICAgICAgICAgICAgIyBvcHRpb25hbCAtLSBpbnRlcm5ldAooJ0EwNDk3MDMn LCAnQTA0OTY5NScsICdBMTAzMTE2JywgJ0EwMDAwMTAnKQoKc2FnZTogbmJhbGFuY2VkLmNyb3Nz X3JlZmVyZW5jZXMoZmV0Y2g9VHJ1ZSkgICAgIyBvcHRpb25hbCAtLSBpbnRlcm5ldAowOiBBMDQ5 NzAzOiBhKDApID0gMDsgZm9yIG4+MCwgYShuKSA9IEEwMDU1OTgobikvMi4KMTogQTA0OTY5NTog QXJyYXkgVCByZWFkIGJ5IGRpYWdvbmFsczsgVChpLGopPW51bWJlciBvZiBub25uZWdhdGl2ZSBz bG9wZXMgb2YgbGluZXMgZGV0ZXJtaW5lZCBieSAyIGxhdHRpY2UgcG9pbnRzIGluIFsgMCxpIF0g WCBbIDAsaiBdIGlmIGk+MDsgVCgwLGopPTEgaWYgaj4wOyBUKDAsMCk9MC4KMjogQTEwMzExNjog QTAwNTU5OChuKSAtIDEuCjM6IEEwMDAwMTA6IEV1bGVyIHRvdGllbnQgZnVuY3Rpb24gcGhpKG4p OiBjb3VudCBudW1iZXJzIDw9IG4gYW5kIHByaW1lIHRvIG4uCgpzYWdlOiBwaGkgPSBfWzNdICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIG9wdGlvbmFsIC0tIGludGVybmV0CkBlbmQg ZXhhbXBsZQoKVEVTVFM6CgpAZXhhbXBsZQpzYWdlOiBzID0gb2Vpcy5faW1hZ2luYXJ5X3NlcXVl bmNlKCkKc2FnZTogcy5jcm9zc19yZWZlcmVuY2VzKCkKKCdBMDAwMDQyJywgJ0EwMDAwMjQnKQpA ZW5kIGV4YW1wbGUKQGVuZCBkZWZmbgoKQGdlaW5kZXggZXhhbXBsZXMoKSAoc2FnZS5kYXRhYmFz ZXMub2Vpcy5PRUlTU2VxdWVuY2UgbWV0aG9kKQpAYW5jaG9ye3NhZ2UvZGF0YWJhc2VzL29laXMg c2FnZSBkYXRhYmFzZXMgb2VpcyBPRUlTU2VxdWVuY2UgZXhhbXBsZXN9QGFuY2hvcns1NX0KQGRl ZmZuIHtNZXRob2R9IGV4YW1wbGVzICgpCgpSZXR1cm4gYSB0dXBsZSBvZiBleGFtcGxlcyBhc3Nv Y2lhdGVkIHRvIHRoZSBzZXF1ZW5jZSBAY29kZXtzZWxmfS4KCk9VVFBVVDoKCgpAaXRlbWl6ZSAt CgpAaXRlbSAKdHVwbGUgb2Ygc3RyaW5ncyAod2l0aCBmYW5jeSBmb3JtYXR0aW5nKS4KQGVuZCBp dGVtaXplCgpFWEFNUExFUzoKCkBleGFtcGxlCnNhZ2U6IGMgPSBvZWlzKDEyMDMpIDsgYyAgICAg ICAgICAgICAgICAgICAgIyBvcHRpb25hbCAtLSBpbnRlcm5ldApBMDAxMjAzOiBDb250aW51ZWQg ZnJhY3Rpb24gZXhwYW5zaW9uIG9mIFBpLgoKc2FnZTogYy5leGFtcGxlcygpICAgICAgICAgICAg ICAgICAgICAgICAgICAjIG9wdGlvbmFsIC0tIGludGVybmV0CjA6IFBpID0gMy4xNDE1OTI2NTM1 ODk3OTMyMzg0Li4uCjE6ICAgID0gMyArIDEvKDcgKyAxLygxNSArIDEvKDEgKyAxLygyOTIgKyAu Li4pKSkpCjI6ICAgID0gW2FfMDsgYV8xLCBhXzIsIGFfMywgLi4uXSA9IFszOyA3LCAxNSwgMSwg MjkyLCAuLi5dCkBlbmQgZXhhbXBsZQoKVEVTVFM6CgpAZXhhbXBsZQpzYWdlOiBzID0gb2Vpcy5f aW1hZ2luYXJ5X3NlcXVlbmNlKCkKc2FnZTogcy5leGFtcGxlcygpCjA6IHMoNDIpICsgcyg0Mykg PSAwLgpAZW5kIGV4YW1wbGUKQGVuZCBkZWZmbgoKQGdlaW5kZXggZXh0ZW5zaW9uc19vcl9lcnJv cnMoKSAoc2FnZS5kYXRhYmFzZXMub2Vpcy5PRUlTU2VxdWVuY2UgbWV0aG9kKQpAYW5jaG9ye3Nh Z2UvZGF0YWJhc2VzL29laXMgc2FnZSBkYXRhYmFzZXMgb2VpcyBPRUlTU2VxdWVuY2UgZXh0ZW5z aW9uc19vcl9lcnJvcnN9QGFuY2hvcns1Nn0KQGRlZmZuIHtNZXRob2R9IGV4dGVuc2lvbnNfb3Jf ZXJyb3JzICgpCgpSZXR1cm4gYSB0dXBsZSBvZiBleHRlbnNpb25zIG9yIGVycm9ycyBhc3NvY2lh dGVkIHRvIHRoZQpzZXF1ZW5jZSBAY29kZXtzZWxmfS4KCk9VVFBVVDoKCgpAaXRlbWl6ZSAtCgpA aXRlbSAKdHVwbGUgb2Ygc3RyaW5ncyAod2l0aCBmYW5jeSBmb3JtYXR0aW5nKS4KQGVuZCBpdGVt aXplCgpFWEFNUExFUzoKCkBleGFtcGxlCnNhZ2U6IHNmaWJvID0gb2VpcygnQTAzOTgzNCcpIDsg c2ZpYm8gICAgICAgIyBvcHRpb25hbCAtLSBpbnRlcm5ldApBMDM5ODM0OiBhKG4rMikgPSAtYShu KzEpK2EobikgKHNpZ25lZCBGaWJvbmFjY2kgbnVtYmVycyk7IG9yIEZpYm9uYWNjaSBudW1iZXJz IChBMDAwMDQ1KSBleHRlbmRlZCB0byBuZWdhdGl2ZSBpbmRpY2VzLgoKc2FnZTogc2ZpYm8uZXh0 ZW5zaW9uc19vcl9lcnJvcnMoKVswXSAgICAgICAjIG9wdGlvbmFsIC0tIGludGVybmV0CidTaWdu cyBjb3JyZWN0ZWQgYnkgX0xlbiBTbWlsZXlfIGFuZCBfTi4gSi4gQS4gU2xvYW5lXy4nCkBlbmQg ZXhhbXBsZQoKVEVTVFM6CgpAZXhhbXBsZQpzYWdlOiBzID0gb2Vpcy5faW1hZ2luYXJ5X3NlcXVl bmNlKCkKc2FnZTogcy5leHRlbnNpb25zX29yX2Vycm9ycygpCjA6IFRoaXMgc2VxdWVuY2UgZG9l cyBub3QgY29udGFpbiBlcnJvcnMuCkBlbmQgZXhhbXBsZQpAZW5kIGRlZmZuCgpAZ2VpbmRleCBm aXJzdF90ZXJtcygpIChzYWdlLmRhdGFiYXNlcy5vZWlzLk9FSVNTZXF1ZW5jZSBtZXRob2QpCkBh bmNob3J7c2FnZS9kYXRhYmFzZXMvb2VpcyBzYWdlIGRhdGFiYXNlcyBvZWlzIE9FSVNTZXF1ZW5j ZSBmaXJzdF90ZXJtc31AYW5jaG9yezU3fQpAZGVmZm4ge01ldGhvZH0gZmlyc3RfdGVybXMgKG51 bWJlcj1Ob25lLCBhYnNvbHV0ZV92YWx1ZT1GYWxzZSkKCklOUFVUOgoKCkBpdGVtaXplIC0KCkBp dGVtIApAY29kZXtudW1iZXJ9IC0gKGludGVnZXIgb3IgQGNvZGV7Tm9uZX0sIGRlZmF1bHQ6IEBj b2Rle05vbmV9KSB0aGUgbnVtYmVyIG9mCnRlcm1zIHJldHVybmVkIChpZiBsZXNzIHRoYW4gdGhl IG51bWJlciBvZiBhdmFpbGFibGUgdGVybXMpLiBXaGVuIHNldAp0byBOb25lLCByZXR1cm5zIGFs bCB0aGUga25vd24gdGVybXMuCgpAaXRlbSAKQGNvZGV7YWJzb2x1dGVfdmFsdWV9IC0gKGJvb2ws IGRlZmF1bHQ6IEBjb2Rle0ZhbHNlfSkgd2hlbiBhIHNlcXVlbmNlIGhhcwpuZWdhdGl2ZSBlbnRy aWVzLCBPRUlTIGFsc28gc3RvcmVzIHRoZSBhYnNvbHV0ZSB2YWx1ZXMgb2YgaXRzIGZpcnN0CnRl cm1zLCB3aGVuIEBjb2Rle2Fic29sdXRlX3ZhbHVlfSBpcyBzZXQgdG8gQGNvZGV7VHJ1ZX0sIHlv dSB3aWxsIGdldCB0aGVtLgpAZW5kIGl0ZW1pemUKCk9VVFBVVDoKCgpAaXRlbWl6ZSAtCgpAaXRl bSAKdHVwbGUgb2YgaW50ZWdlcnMuCkBlbmQgaXRlbWl6ZQoKRVhBTVBMRVM6CgpAZXhhbXBsZQpz YWdlOiBmID0gb2Vpcyg0NSkgOyBmICAgICAgICAgICAgICAgICAgICAgICMgb3B0aW9uYWwgLS0g aW50ZXJuZXQKQTAwMDA0NTogRmlib25hY2NpIG51bWJlcnM6IEYobikgPSBGKG4tMSkgKyBGKG4t Mikgd2l0aCBGKDApID0gMCBhbmQgRigxKSA9IDEuCgpzYWdlOiBmLmZpcnN0X3Rlcm1zKClbOjEw XSAgICAgICAgICAgICAgICAgICMgb3B0aW9uYWwgLS0gaW50ZXJuZXQKKDAsIDEsIDEsIDIsIDMs IDUsIDgsIDEzLCAyMSwgMzQpCkBlbmQgZXhhbXBsZQoKSGFuZGxlIGRlYWQgc2VxdWVuY2VzOiBz ZWUgIHRyYWMgdGlja2V0ICMxNzMzMEBmb290bm90ZXtodHRwczovL3RyYWMuc2FnZW1hdGgub3Jn LzE3MzMwfQoKQGV4YW1wbGUKc2FnZTogb2VpcygxNykuZmlyc3RfdGVybXMoMTIpICAgICAgICAg ICAgICAjIG9wdGlvbmFsIC0tIGludGVybmV0ICAKb2VpcygxNykuZmlyc3RfdGVybXMoMTIpCi4u IFJ1bnRpbWVXYXJuaW5nOiBUaGlzIHNlcXVlbmNlIGlzIGRlYWQgICJBMDAwMDE3OiBFcnJvbmVv dXMgdmVyc2lvbiBvZiBBMDMyNTIyLiIKd2FybignVGhpcyBzZXF1ZW5jZSBpcyBkZWFkICAiJytz ZWxmLmlkKCkrIjogIitzZWxmLm5hbWUoKSsnIicsIFJ1bnRpbWVXYXJuaW5nKQooMSwgMCwgMCwg MiwgMiwgNCwgOCwgNCwgMTYsIDEyLCA0OCwgODApICAgICAgICAgICAgCkBlbmQgZXhhbXBsZQoK VEVTVFM6CgpAZXhhbXBsZQpzYWdlOiBzID0gb2Vpcy5faW1hZ2luYXJ5X3NlcXVlbmNlKCkKc2Fn ZTogcy5maXJzdF90ZXJtcygpCigxLCAxLCAxLCAxLCAtMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwg MSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSkKc2FnZTogcy5maXJzdF90 ZXJtcyg1KQooMSwgMSwgMSwgMSwgLTEpCnNhZ2U6IHMuZmlyc3RfdGVybXMoNSwgYWJzb2x1dGVf dmFsdWU9VHJ1ZSkKKDEsIDEsIDEsIDEsIDEpCgpzYWdlOiBzID0gb2Vpcy5faW1hZ2luYXJ5X3Nl cXVlbmNlKGtleXdvcmRzPSdmdWxsJykKc2FnZTogcyg0MCkKVHJhY2ViYWNrIChtb3N0IHJlY2Vu dCBjYWxsIGxhc3QpOgouLi4KVHlwZUVycm9yOiBZb3UgZm91bmQgYSBzaWduIGluY29uc2lzdGVu Y3ksIHBsZWFzZSBjb250YWN0IE9FSVMKCnNhZ2U6IHMgPSBvZWlzLl9pbWFnaW5hcnlfc2VxdWVu Y2Uoa2V5d29yZHM9J3NpZ24sZnVsbCcpCnNhZ2U6IHMoNDApCjEKCnNhZ2U6IHMgPSBvZWlzLl9p bWFnaW5hcnlfc2VxdWVuY2Uoa2V5d29yZHM9J25vbm4sZnVsbCcpCnNhZ2U6IHMoNDIpCjEKQGVu ZCBleGFtcGxlCkBlbmQgZGVmZm4KCkBnZWluZGV4IGZvcm11bGFzKCkgKHNhZ2UuZGF0YWJhc2Vz Lm9laXMuT0VJU1NlcXVlbmNlIG1ldGhvZCkKQGFuY2hvcntzYWdlL2RhdGFiYXNlcy9vZWlzIHNh Z2UgZGF0YWJhc2VzIG9laXMgT0VJU1NlcXVlbmNlIGZvcm11bGFzfUBhbmNob3J7NTh9CkBkZWZm biB7TWV0aG9kfSBmb3JtdWxhcyAoKQoKUmV0dXJuIGEgdHVwbGUgb2YgZm9ybXVsYXMgYXNzb2Np YXRlZCB0byB0aGUgc2VxdWVuY2UgQGNvZGV7c2VsZn0uCgpPVVRQVVQ6CgoKQGl0ZW1pemUgLQoK QGl0ZW0gCnR1cGxlIG9mIHN0cmluZ3MgKHdpdGggZmFuY3kgZm9ybWF0dGluZykuCkBlbmQgaXRl bWl6ZQoKRVhBTVBMRVM6CgpAZXhhbXBsZQpzYWdlOiBmID0gb2Vpcyg0NSkgOyBmICAgICAgICAg ICAgICAgICAgICAgICMgb3B0aW9uYWwgLS0gaW50ZXJuZXQKQTAwMDA0NTogRmlib25hY2NpIG51 bWJlcnM6IEYobikgPSBGKG4tMSkgKyBGKG4tMikgd2l0aCBGKDApID0gMCBhbmQgRigxKSA9IDEu CgpzYWdlOiBmLmZvcm11bGFzKClbMl0gICAgICAgICAgICAgICAgICAgICAgICMgb3B0aW9uYWwg LS0gaW50ZXJuZXQKJ0YobikgPSAoKDErc3FydCg1KSlebi0oMS1zcXJ0KDUpKV5uKS8oMl5uKnNx cnQoNSkpLicKQGVuZCBleGFtcGxlCgpURVNUUzoKCkBleGFtcGxlCnNhZ2U6IHMgPSBvZWlzLl9p bWFnaW5hcnlfc2VxdWVuY2UoKQpzYWdlOiBzLmZvcm11bGFzKCkKMDogRm9yIG4gYmlnIGVub3Vn aCwgcyhuKzEpIC0gcyhuKSA9IDAuCkBlbmQgZXhhbXBsZQpAZW5kIGRlZmZuCgpAZ2VpbmRleCBp ZCgpIChzYWdlLmRhdGFiYXNlcy5vZWlzLk9FSVNTZXF1ZW5jZSBtZXRob2QpCkBhbmNob3J7c2Fn ZS9kYXRhYmFzZXMvb2VpcyBzYWdlIGRhdGFiYXNlcyBvZWlzIE9FSVNTZXF1ZW5jZSBpZH1AYW5j aG9yezU5fQpAZGVmZm4ge01ldGhvZH0gaWQgKGZvcm1hdD0nQScpCgpUaGUgSUQgb2YgdGhlIHNl cXVlbmNlIEBjb2Rle3NlbGZ9IGlzIHRoZSBBLW51bWJlciB0aGF0IGlkZW50aWZpZXMKQGNvZGV7 c2VsZn0uCgpJTlBVVDoKCgpAaXRlbWl6ZSAtCgpAaXRlbSAKQGNvZGV7Zm9ybWF0fSAtIChzdHJp bmcsIGRlZmF1bHQ6ICdBJykuCkBlbmQgaXRlbWl6ZQoKT1VUUFVUOgoKCkBpdGVtaXplIC0KCkBp dGVtIAppZiBAY29kZXtmb3JtYXR9IGlzIHNldCB0byAnQScsIHJldHVybnMgYSBzdHJpbmcgb2Yg dGhlIGZvcm0gJ0EwMDAxMjMnLgoKQGl0ZW0gCmlmIEBjb2Rle2Zvcm1hdH0gaXMgc2V0IHRvICdp bnQnIHJldHVybnMgYW4gaW50ZWdlciBvZiB0aGUgZm9ybSAxMjMuCkBlbmQgaXRlbWl6ZQoKRVhB TVBMRVM6CgpAZXhhbXBsZQpzYWdlOiBmID0gb2Vpcyg0NSkgOyBmICAgICAgICAgICAgICAgICAg ICAgICMgb3B0aW9uYWwgLS0gaW50ZXJuZXQKQTAwMDA0NTogRmlib25hY2NpIG51bWJlcnM6IEYo bikgPSBGKG4tMSkgKyBGKG4tMikgd2l0aCBGKDApID0gMCBhbmQgRigxKSA9IDEuCgpzYWdlOiBm LmlkKCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgb3B0aW9uYWwgLS0gaW50ZXJu ZXQKJ0EwMDAwNDUnCgpzYWdlOiBmLmlkKGZvcm1hdD0naW50JykgICAgICAgICAgICAgICAgICAg ICMgb3B0aW9uYWwgLS0gaW50ZXJuZXQKNDUKQGVuZCBleGFtcGxlCgpURVNUUzoKCkBleGFtcGxl CnNhZ2U6IHMgPSBvZWlzLl9pbWFnaW5hcnlfc2VxdWVuY2UoKQpzYWdlOiBzLmlkKCkKJ0E5OTk5 OTknCnNhZ2U6IHMuaWQoZm9ybWF0PSdpbnQnKQo5OTk5OTkKQGVuZCBleGFtcGxlCkBlbmQgZGVm Zm4KCkBnZWluZGV4IGlzX2Zpbml0ZSgpIChzYWdlLmRhdGFiYXNlcy5vZWlzLk9FSVNTZXF1ZW5j ZSBtZXRob2QpCkBhbmNob3J7c2FnZS9kYXRhYmFzZXMvb2VpcyBzYWdlIGRhdGFiYXNlcyBvZWlz IE9FSVNTZXF1ZW5jZSBpc19maW5pdGV9QGFuY2hvcns1YX0KQGRlZmZuIHtNZXRob2R9IGlzX2Zp bml0ZSAoKQoKVGVsbHMgd2hldGhlciB0aGUgc2VxdWVuY2UgaXMgZmluaXRlLgoKQ3VycmVudGx5 LCBPRUlTIG9ubHkgcHJvdmlkZXMgYSBrZXl3b3JkIHdoZW4gdGhlIHNlcXVlbmNlIGlzIGtub3du IHRvCmJlIGZpbml0ZS4gU28sIHdoZW4gdGhpcyBrZXl3b3JkIGlzIG5vdCB0aGVyZSwgd2UgZG8g bm90IGtub3cgd2hldGhlcgppdCBpcyBpbmZpbml0ZSBvciBub3QuCgpPVVRQVVQ6CgoKQGl0ZW1p emUgLQoKQGl0ZW0gClJldHVybnMgQGNvZGV7VHJ1ZX0gd2hlbiB0aGUgc2VxdWVuY2UgaXMga25v d24gdG8gYmUgZmluaXRlLgoKQGl0ZW0gClJldHVybnMgQGNvZGV7VW5rbm93bn0gb3RoZXJ3aXNl LgpAZW5kIGl0ZW1pemUKCkBjYXJ0b3VjaGUKQHF1b3RhdGlvbiBUb2RvIApBc2sgT0VJUyBmb3Ig YSBrZXl3b3JkIGVuc3VyaW5nIHRoYXQgYSBzZXF1ZW5jZSBpcyBpbmZpbml0ZS4KQGVuZCBxdW90 YXRpb24KQGVuZCBjYXJ0b3VjaGUKCkVYQU1QTEVTOgoKQGV4YW1wbGUKc2FnZTogcyA9IG9laXMo J0ExMTQyODgnKSA7IHMgICAgICAgICAgICAgICAjIG9wdGlvbmFsIC0tIGludGVybmV0CkExMTQy ODg6IExleGljb2dyYXBoaWNhbGx5IGVhcmxpZXN0IHNvbHV0aW9uIG9mIGFueSA5IFggOSBzdWRv a3UsIHJlYWQgYnkgcm93cy4KCnNhZ2U6IHMuaXNfZmluaXRlKCkgICAgICAgICAgICAgICAgICAg ICAgICAgIyBvcHRpb25hbCAtLSBpbnRlcm5ldApUcnVlCkBlbmQgZXhhbXBsZQoKQGV4YW1wbGUK c2FnZTogZiA9IG9laXMoNDUpIDsgZiAgICAgICAgICAgICAgICAgICAgICAjIG9wdGlvbmFsIC0t IGludGVybmV0CkEwMDAwNDU6IEZpYm9uYWNjaSBudW1iZXJzOiBGKG4pID0gRihuLTEpICsgRihu LTIpIHdpdGggRigwKSA9IDAgYW5kIEYoMSkgPSAxLgoKc2FnZTogZi5pc19maW5pdGUoKSAgICAg ICAgICAgICAgICAgICAgICAgICAjIG9wdGlvbmFsIC0tIGludGVybmV0ClVua25vd24KQGVuZCBl eGFtcGxlCgpURVNUUzoKCkBleGFtcGxlCnNhZ2U6IHMgPSBvZWlzLl9pbWFnaW5hcnlfc2VxdWVu Y2UoKQpzYWdlOiBzLmlzX2Zpbml0ZSgpClVua25vd24KCnNhZ2U6IHMgPSBvZWlzLl9pbWFnaW5h cnlfc2VxdWVuY2UoJ25vbm4sZmluaXQnKQpzYWdlOiBzLmlzX2Zpbml0ZSgpClRydWUKQGVuZCBl eGFtcGxlCkBlbmQgZGVmZm4KCkBnZWluZGV4IGlzX2Z1bGwoKSAoc2FnZS5kYXRhYmFzZXMub2Vp cy5PRUlTU2VxdWVuY2UgbWV0aG9kKQpAYW5jaG9ye3NhZ2UvZGF0YWJhc2VzL29laXMgc2FnZSBk YXRhYmFzZXMgb2VpcyBPRUlTU2VxdWVuY2UgaXNfZnVsbH1AYW5jaG9yezVifQpAZGVmZm4ge01l dGhvZH0gaXNfZnVsbCAoKQoKVGVsbHMgd2hldGhlciB0aGUgc2VxdWVuY2UgQGNvZGV7c2VsZn0g aXMgZnVsbCwgdGhhdCBpcywgaWYgYWxsIGl0cwplbGVtZW50cyBhcmUgbGlzdGVkIGluIEBjb2Rl e3NlbGYuZmlyc3RfdGVybXMoKX0uCgpDdXJyZW50bHksIE9FSVMgb25seSBwcm92aWRlcyBhIGtl eXdvcmQgd2hlbiB0aGUgc2VxdWVuY2UgaXMga25vd24gdG8KYmUgZnVsbC4gU28sIHdoZW4gdGhp cyBrZXl3b3JkIGlzIG5vdCB0aGVyZSwgd2UgZG8gbm90IGtub3cgd2hldGhlcgpzb21lIGVsZW1l bnRzIGFyZSBtaXNzaW5nIG9yIG5vdC4KCk9VVFBVVDoKCgpAaXRlbWl6ZSAtCgpAaXRlbSAKUmV0 dXJucyBAY29kZXtUcnVlfSB3aGVuIHRoZSBzZXF1ZW5jZSBpcyBrbm93biB0byBiZSBmdWxsLgoK QGl0ZW0gClJldHVybnMgQGNvZGV7VW5rbm93bn0gb3RoZXJ3aXNlLgpAZW5kIGl0ZW1pemUKCkVY QU1QTEVTOgoKQGV4YW1wbGUKc2FnZTogcyA9IG9laXMoJ0ExMTQyODgnKSA7IHMgICAgICAgICAg ICAgICAjIG9wdGlvbmFsIC0tIGludGVybmV0CkExMTQyODg6IExleGljb2dyYXBoaWNhbGx5IGVh cmxpZXN0IHNvbHV0aW9uIG9mIGFueSA5IFggOSBzdWRva3UsIHJlYWQgYnkgcm93cy4KCnNhZ2U6 IHMuaXNfZnVsbCgpICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBvcHRpb25hbCAtLSBpbnRl cm5ldApUcnVlCkBlbmQgZXhhbXBsZQoKQGV4YW1wbGUKc2FnZTogZiA9IG9laXMoNDUpIDsgZiAg ICAgICAgICAgICAgICAgICAgICAjIG9wdGlvbmFsIC0tIGludGVybmV0CkEwMDAwNDU6IEZpYm9u YWNjaSBudW1iZXJzOiBGKG4pID0gRihuLTEpICsgRihuLTIpIHdpdGggRigwKSA9IDAgYW5kIEYo MSkgPSAxLgoKc2FnZTogZi5pc19mdWxsKCkgICAgICAgICAgICAgICAgICAgICAgICAgICAjIG9w dGlvbmFsIC0tIGludGVybmV0ClVua25vd24KQGVuZCBleGFtcGxlCgpURVNUUzoKCkBleGFtcGxl CnNhZ2U6IHMgPSBvZWlzLl9pbWFnaW5hcnlfc2VxdWVuY2UoKQpzYWdlOiBzLmlzX2Z1bGwoKQpV bmtub3duCgpzYWdlOiBzID0gb2Vpcy5faW1hZ2luYXJ5X3NlcXVlbmNlKCdub25uLGZ1bGwsZmlu aXQnKQpzYWdlOiBzLmlzX2Z1bGwoKQpUcnVlCkBlbmQgZXhhbXBsZQpAZW5kIGRlZmZuCgpAZ2Vp bmRleCBrZXl3b3JkcygpIChzYWdlLmRhdGFiYXNlcy5vZWlzLk9FSVNTZXF1ZW5jZSBtZXRob2Qp CkBhbmNob3J7c2FnZS9kYXRhYmFzZXMvb2VpcyBzYWdlIGRhdGFiYXNlcyBvZWlzIE9FSVNTZXF1 ZW5jZSBrZXl3b3Jkc31AYW5jaG9yezVjfQpAZGVmZm4ge01ldGhvZH0ga2V5d29yZHMgKCkKClJl dHVybiB0aGUga2V5d29yZHMgYXNzb2NpYXRlZCB0byB0aGUgc2VxdWVuY2UgQGNvZGV7c2VsZn0u CgpPVVRQVVQ6CgoKQGl0ZW1pemUgLQoKQGl0ZW0gCnR1cGxlIG9mIHN0cmluZ3MuCkBlbmQgaXRl bWl6ZQoKRVhBTVBMRVM6CgpAZXhhbXBsZQpzYWdlOiBmID0gb2Vpcyg1MykgOyBmICAgICAgICAg ICAgICAgICAgICAgICMgb3B0aW9uYWwgLS0gaW50ZXJuZXQKQTAwMDA1MzogTG9jYWwgc3RvcHMg b24gTmV3IFlvcmsgQ2l0eSBCcm9hZHdheSBsaW5lIChJUlQgIzEpIHN1YndheS4KCnNhZ2U6IGYu a2V5d29yZHMoKSAgICAgICAgICAgICAgICAgICAgICAgICAgIyBvcHRpb25hbCAtLSBpbnRlcm5l dAooJ25vbm4nLCAnZmluaScsICdmdWxsJykKQGVuZCBleGFtcGxlCgpURVNUUzoKCkBleGFtcGxl CnNhZ2U6IHMgPSBvZWlzLl9pbWFnaW5hcnlfc2VxdWVuY2UoKQpzYWdlOiBzLmtleXdvcmRzKCkK KCdzaWduJywgJ2Vhc3knKQoKc2FnZTogcyA9IG9laXMuX2ltYWdpbmFyeV9zZXF1ZW5jZShrZXl3 b3Jkcz0nbm9ubixoYXJkJykKc2FnZTogcy5rZXl3b3JkcygpCignbm9ubicsICdoYXJkJykKQGVu ZCBleGFtcGxlCkBlbmQgZGVmZm4KCkBnZWluZGV4IGxpbmtzKCkgKHNhZ2UuZGF0YWJhc2VzLm9l aXMuT0VJU1NlcXVlbmNlIG1ldGhvZCkKQGFuY2hvcntzYWdlL2RhdGFiYXNlcy9vZWlzIHNhZ2Ug ZGF0YWJhc2VzIG9laXMgT0VJU1NlcXVlbmNlIGxpbmtzfUBhbmNob3J7NWR9CkBkZWZmbiB7TWV0 aG9kfSBsaW5rcyAoYnJvd3NlPU5vbmUsIGZvcm1hdD0nZ3Vlc3MnKQoKUmV0dXJuLCBkaXNwbGF5 IG9yIGJyb3dzZSBsaW5rcyBhc3NvY2lhdGVkIHRvIHRoZSBzZXF1ZW5jZSBAY29kZXtzZWxmfS4K CklOUFVUOgoKCkBpdGVtaXplIC0KCkBpdGVtIApAY29kZXticm93c2V9IC0gYW4gaW50ZWdlciwg YSBsaXN0IG9mIGludGVnZXJzLCBvciB0aGUgd29yZCAnYWxsJwooZGVmYXVsdDogQGNvZGV7Tm9u ZX0pIDogd2hpY2ggbGlua3MgdG8gb3BlbiBpbiBhIHdlYiBicm93c2VyLgoKQGl0ZW0gCkBjb2Rl e2Zvcm1hdH0gLSBzdHJpbmcgKGRlZmF1bHQ6ICdndWVzcycpIDogaG93IHRvIGRpc3BsYXkgdGhl IGxpbmtzLgpAZW5kIGl0ZW1pemUKCk9VVFBVVDoKCgpAaXRlbWl6ZSAtCgpAaXRlbSAKCkB0YWJs ZSBAYXNpcwoKQGl0ZW0gdHVwbGUgb2Ygc3RyaW5ncyAod2l0aCBmYW5jeSBmb3JtYXR0aW5nKToK CgpAaXRlbWl6ZSAtCgpAaXRlbSAKaWYgQGNvZGV7Zm9ybWF0fSBpcyBAY29kZXt1cmx9LCByZXR1 cm5zIGEgdHVwbGUgb2YgYWJzb2x1dGUgbGlua3Mgd2l0aG91dCBkZXNjcmlwdGlvbi4KCkBpdGVt IAppZiBAY29kZXtmb3JtYXR9IGlzIEBjb2Rle2h0bWx9LCByZXR1cm5zIG5vdGhpbmcgYnV0IHBy aW50cyBhIHR1cGxlIG9mIGNsaWNrYWJsZSBhYnNvbHV0ZSBsaW5rcyBpbiB0aGVpciBjb250ZXh0 LgoKQGl0ZW0gCmlmIEBjb2Rle2Zvcm1hdH0gaXMgQGNvZGV7Z3Vlc3N9LCBhZGFwdHMgdGhlIG91 dHB1dCB0byB0aGUgY29udGV4dCAoY29tbWFuZCBsaW5lIG9yIG5vdGVib29rKS4KCkBpdGVtIApp ZiBAY29kZXtmb3JtYXR9IGlzIEBjb2Rle3Jhd30sIHRoZSBsaW5rcyBhcyB0aGV5IGFwcGVhciBp biB0aGUgZGF0YWJhc2UsIHJlbGF0aXZlIGxpbmtzIGFyZSBub3QgbWFkZSBhYnNvbHV0ZS4KQGVu ZCBpdGVtaXplCkBlbmQgdGFibGUKQGVuZCBpdGVtaXplCgpFWEFNUExFUzoKCkBleGFtcGxlCnNh Z2U6IGYgPSBvZWlzKDQ1KSA7IGYgICAgICAgICAgICAgICAgICAgICAgIyBvcHRpb25hbCAtLSBp bnRlcm5ldApBMDAwMDQ1OiBGaWJvbmFjY2kgbnVtYmVyczogRihuKSA9IEYobi0xKSArIEYobi0y KSB3aXRoIEYoMCkgPSAwIGFuZCBGKDEpID0gMS4KCnNhZ2U6IGYubGlua3MoZm9ybWF0PSd1cmwn KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBvcHRpb25hbCAtLSBpbnRlcm5ldAowOiBo dHRwOi8vb2Vpcy5vcmcvQTAwMDA0NS9iMDAwMDQ1LnR4dAoxOiBodHRwOi8vd3d3LnNjaG9vbG5l dC5jYS92cC1wdi9hbW9mL2VfZmlib0kuaHRtCi4uLgoKc2FnZTogZi5saW5rcyhmb3JtYXQ9J3Jh dycpICAgICAgICAgICAgICAgICAjIG9wdGlvbmFsIC0tIGludGVybmV0CjA6IE4uIEouIEEuIFNs b2FuZSwgPGEgaHJlZj0iL0EwMDAwNDUvYjAwMDA0NS50eHQiPlRoZSBmaXJzdCAyMDAwIEZpYm9u YWNjaSBudW1iZXJzOiBUYWJsZSBvZiBuLCBGKG4pIGZvciBuID0gMC4uMjAwMDwvYT4KMTogQW1h emluZyBNYXRoZW1hdGljYWwgT2JqZWN0IEZhY3RvcnksIDxhIGhyZWY9Imh0dHA6Ly93d3cuc2No b29sbmV0LmNhL3ZwLXB2L2Ftb2YvZV9maWJvSS5odG0iPkluZm9ybWF0aW9uIG9uIHRoZSBGaWJv bmFjY2kgc2VxdWVuY2VzPC9hPgouLi4KQGVuZCBleGFtcGxlCgpURVNUUzoKCkBleGFtcGxlCnNh Z2U6IHMgPSBvZWlzLl9pbWFnaW5hcnlfc2VxdWVuY2UoKQpzYWdlOiBzLmxpbmtzKGZvcm1hdD0n cmF3JylbMl0KJ0RvIG5vdCBjb25mdXNlIHdpdGggdGhlIHNlcXVlbmNlIDxhIGhyZWY9Ii9BMDAw MDQyIj5BMDAwMDQyPC9hPiBvciB0aGUgc2VxdWVuY2UgPGEgaHJlZj0iL0EwMDAwMjQiPkEwMDAw MjQ8L2E+JwoKc2FnZTogcy5saW5rcyhmb3JtYXQ9J3VybCcpWzNdCidodHRwOi8vb2Vpcy5vcmcv QTAwMDAyNCcKCnNhZ2U6IEhUTUwgPSBzLmxpbmtzKGZvcm1hdD0iaHRtbCIpOyAgSFRNTAowOiBX aWtpcGVkaWEsIDxhIGhyZWY9Imh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvNDJfKG51bWJl cikiPjQyIChudW1iZXIpPC9hPgoxOiBTZWUuIGFsc28gPGEgaHJlZj0iaHR0cHM6Ly90cmFjLnNh Z2VtYXRoLm9yZy9zYWdlX3RyYWMvdGlja2V0LzQyIj50cmFjIHRpY2tldCAjNDI8L2E+Ci4uLgpz YWdlOiB0eXBlKEhUTUwpCjxjbGFzcyAnc2FnZS5taXNjLmh0bWwuSHRtbEZyYWdtZW50Jz4KQGVu ZCBleGFtcGxlCkBlbmQgZGVmZm4KCkBnZWluZGV4IG5hbWUoKSAoc2FnZS5kYXRhYmFzZXMub2Vp cy5PRUlTU2VxdWVuY2UgbWV0aG9kKQpAYW5jaG9ye3NhZ2UvZGF0YWJhc2VzL29laXMgc2FnZSBk YXRhYmFzZXMgb2VpcyBPRUlTU2VxdWVuY2UgbmFtZX1AYW5jaG9yezVlfQpAZGVmZm4ge01ldGhv ZH0gbmFtZSAoKQoKUmV0dXJuIHRoZSBuYW1lIG9mIHRoZSBzZXF1ZW5jZSBAY29kZXtzZWxmfS4K Ck9VVFBVVDoKCgpAaXRlbWl6ZSAtCgpAaXRlbSAKc3RyaW5nLgpAZW5kIGl0ZW1pemUKCkVYQU1Q TEVTOgoKQGV4YW1wbGUKc2FnZTogZiA9IG9laXMoNDUpIDsgZiAgICAgICAgICAgICAgICAgICAg ICAjIG9wdGlvbmFsIC0tIGludGVybmV0CkEwMDAwNDU6IEZpYm9uYWNjaSBudW1iZXJzOiBGKG4p ID0gRihuLTEpICsgRihuLTIpIHdpdGggRigwKSA9IDAgYW5kIEYoMSkgPSAxLgoKc2FnZTogZi5u YW1lKCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIG9wdGlvbmFsIC0tIGludGVybmV0 CidGaWJvbmFjY2kgbnVtYmVyczogRihuKSA9IEYobi0xKSArIEYobi0yKSB3aXRoIEYoMCkgPSAw IGFuZCBGKDEpID0gMS4nCkBlbmQgZXhhbXBsZQoKVEVTVFM6CgpAZXhhbXBsZQpzYWdlOiBzID0g b2Vpcy5faW1hZ2luYXJ5X3NlcXVlbmNlKCkKc2FnZTogcy5uYW1lKCkKJ1RoZSBvcHBvc2l0ZSBv ZiB0d2ljZSB0aGUgY2hhcmFjdGVyaXN0aWMgc2VxdWVuY2Ugb2YgNDIgcGx1cyBvbmUsIHN0YXJ0 aW5nIGZyb20gMzguJwpAZW5kIGV4YW1wbGUKQGVuZCBkZWZmbgoKQGdlaW5kZXggbmF0dXJhbF9v YmplY3QoKSAoc2FnZS5kYXRhYmFzZXMub2Vpcy5PRUlTU2VxdWVuY2UgbWV0aG9kKQpAYW5jaG9y e3NhZ2UvZGF0YWJhc2VzL29laXMgc2FnZSBkYXRhYmFzZXMgb2VpcyBPRUlTU2VxdWVuY2UgbmF0 dXJhbF9vYmplY3R9QGFuY2hvcns1Zn0KQGRlZmZuIHtNZXRob2R9IG5hdHVyYWxfb2JqZWN0ICgp CgpSZXR1cm4gdGhlIG5hdHVyYWwgb2JqZWN0IGFzc29jaWF0ZWQgdG8gdGhlIHNlcXVlbmNlIEBj b2Rle3NlbGZ9LgoKT1VUUFVUOgoKCkBpdGVtaXplIC0KCkBpdGVtIAoKQHRhYmxlIEBhc2lzCgpA aXRlbSBJZiB0aGUgc2VxdWVuY2UgQGNvZGV7c2VsZn0gY29ycmVzcG9uZHMgdG8gdGhlIGRpZ2l0 cyBvZiBhIHJlYWwKCm51bWJlciwgcmV0dXJucyB0aGUgYXNzb2NpYXRlZCByZWFsIG51bWJlciAo YXMgYW4gZWxlbWVudCBvZgpSZWFsTGF6eUZpZWxkKCkpLgpAZW5kIHRhYmxlCgpAaXRlbSAKCkB0 YWJsZSBAYXNpcwoKQGl0ZW0gSWYgdGhlIHNlcXVlbmNlIEBjb2Rle3NlbGZ9IGNvcnJlc3BvbmRz IHRvIHRoZSBjb252ZXJnZW50cyBvZiBhCgpjb250aW51ZWQgZnJhY3Rpb24sIHJldHVybnMgdGhl IGFzc29jaWF0ZWQgY29udGludWVkIGZyYWN0aW9uLgpAZW5kIHRhYmxlCkBlbmQgaXRlbWl6ZQoK QGNhcnRvdWNoZQpAcXVvdGF0aW9uIFdhcm5pbmcgClRoaXMgbWV0aG9kIGZvcmdldHMgdGhlIGZh Y3QgdGhhdCB0aGUgcmV0dXJuZWQgc2VxdWVuY2UgbWF5IG5vdCBiZQpjb21wbGV0ZS4KQGVuZCBx dW90YXRpb24KQGVuZCBjYXJ0b3VjaGUKCkBjYXJ0b3VjaGUKQHF1b3RhdGlvbiBUb2RvIAoKQGl0 ZW1pemUgLQoKQGl0ZW0gCmFzayBPRUlTIHRvIGFkZCBhIGtleXdvcmQgdGVsbGluZyB3aGV0aGVy IHRoZSBzZXF1ZW5jZSBjb21lcyBmcm9tCmEgcG93ZXIgc2VyaWVzLCBlLmcuIGZvciBAaW5kaWNh dGV1cmx7aHR0cDovL29laXMub3JnL0EwMDAxODJ9CgpAaXRlbSAKZGlzY292ZXIgb3RoZXIgcG9z c2libGUgY29udmVyc2lvbnMuCkBlbmQgaXRlbWl6ZQpAZW5kIHF1b3RhdGlvbgpAZW5kIGNhcnRv dWNoZQoKRVhBTVBMRVM6CgpAZXhhbXBsZQpzYWdlOiBnID0gb2VpcygiQTAwMjg1MiIpIDsgZyAg ICAgICAgICAgICAgICMgb3B0aW9uYWwgLS0gaW50ZXJuZXQKQTAwMjg1MjogQ29udGludWVkIGZy YWN0aW9uIGZvciBFdWxlcidzIGNvbnN0YW50IChvciBFdWxlci1NYXNjaGVyb25pIGNvbnN0YW50 KSBnYW1tYS4KCnNhZ2U6IHggPSBnLm5hdHVyYWxfb2JqZWN0KCkgOyB0eXBlKHgpICAgICAgIyBv cHRpb25hbCAtLSBpbnRlcm5ldAo8Y2xhc3MgJ3NhZ2UucmluZ3MuY29udGludWVkX2ZyYWN0aW9u LkNvbnRpbnVlZEZyYWN0aW9uX3BlcmlvZGljJz4KCnNhZ2U6IFJERih4KSA9PSBSREYoZXVsZXJf Z2FtbWEpICAgICAgICAgICAgIyBvcHRpb25hbCAtLSBpbnRlcm5ldApUcnVlCgpzYWdlOiBjZmcg PSBjb250aW51ZWRfZnJhY3Rpb24oZXVsZXJfZ2FtbWEpCnNhZ2U6IHhbOjkwXSA9PSBjZmdbOjkw XSAgICAgICAgICAgICAgICAgICAgIyBvcHRpb25hbCAtLSBpbnRlcm5ldApUcnVlCkBlbmQgZXhh bXBsZQoKQGV4YW1wbGUKc2FnZTogZWUgPSBvZWlzKCdBMDAxMTEzJykgOyBlZSAgICAgICAgICAg ICAjIG9wdGlvbmFsIC0tIGludGVybmV0CkEwMDExMTM6IERlY2ltYWwgZXhwYW5zaW9uIG9mIGUu CgpzYWdlOiB4ID0gZWUubmF0dXJhbF9vYmplY3QoKSA7IHggICAgICAgICAgICMgb3B0aW9uYWwg LS0gaW50ZXJuZXQKMi43MTgyODE4Mjg0NTkwNDY/CgpzYWdlOiB4LnBhcmVudCgpICAgICAgICAg ICAgICAgICAgICAgICAgICAgICMgb3B0aW9uYWwgLS0gaW50ZXJuZXQKUmVhbCBMYXp5IEZpZWxk CgpzYWdlOiB4ID09IFJSKGUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgb3B0aW9uYWwg LS0gaW50ZXJuZXQKVHJ1ZQpAZW5kIGV4YW1wbGUKCkBleGFtcGxlCnNhZ2U6IGF2ID0gb2Vpcygn QTA4Nzc3OCcpIDsgYXYgICAgICAgICAgICAgIyBvcHRpb25hbCAtLSBpbnRlcm5ldApBMDg3Nzc4 OiBEZWNpbWFsIGV4cGFuc2lvbiBvZiBBdm9nYWRybydzIGNvbnN0YW50LgoKc2FnZTogYXYubmF0 dXJhbF9vYmplY3QoKSAgICAgICAgICAgICAgICAgICAjIG9wdGlvbmFsIC0tIGludGVybmV0CjYu MDIyMTQxMDAwMDAwMDAwP2UyMwpAZW5kIGV4YW1wbGUKCkBleGFtcGxlCnNhZ2U6IGZpYiA9IG9l aXMoJ0EwMDAwNDUnKSA7IGZpYiAgICAgICAgICAgIyBvcHRpb25hbCAtLSBpbnRlcm5ldApBMDAw MDQ1OiBGaWJvbmFjY2kgbnVtYmVyczogRihuKSA9IEYobi0xKSArIEYobi0yKSB3aXRoIEYoMCkg PSAwIGFuZCBGKDEpID0gMS4KCnNhZ2U6IHggPSBmaWIubmF0dXJhbF9vYmplY3QoKSA7IHgudW5p dmVyc2UoKSAgICAgICAgICMgb3B0aW9uYWwgLS0gaW50ZXJuZXQKTm9uIG5lZ2F0aXZlIGludGVn ZXIgc2VtaXJpbmcKQGVuZCBleGFtcGxlCgpAZXhhbXBsZQpzYWdlOiBzZmliID0gb2VpcygnQTAz OTgzNCcpIDsgc2ZpYiAgICAgICAgICMgb3B0aW9uYWwgLS0gaW50ZXJuZXQKQTAzOTgzNDogYShu KzIpID0gLWEobisxKSthKG4pIChzaWduZWQgRmlib25hY2NpIG51bWJlcnMpOyBvciBGaWJvbmFj Y2kgbnVtYmVycyAoQTAwMDA0NSkgZXh0ZW5kZWQgdG8gbmVnYXRpdmUgaW5kaWNlcy4KCnNhZ2U6 IHggPSBzZmliLm5hdHVyYWxfb2JqZWN0KCkgOyB4LnVuaXZlcnNlKCkgICAgIyBvcHRpb25hbCAt LSBpbnRlcm5ldApJbnRlZ2VyIFJpbmcKQGVuZCBleGFtcGxlCgpURVNUUzoKCkBleGFtcGxlCnNh Z2U6IHMgPSBvZWlzLl9pbWFnaW5hcnlfc2VxdWVuY2UoJ25vbm4sY29mcicpCnNhZ2U6IHR5cGUo cy5uYXR1cmFsX29iamVjdCgpKQo8Y2xhc3MgJ3NhZ2UucmluZ3MuY29udGludWVkX2ZyYWN0aW9u LkNvbnRpbnVlZEZyYWN0aW9uX3BlcmlvZGljJz4KCnNhZ2U6IHMgPSBvZWlzLl9pbWFnaW5hcnlf c2VxdWVuY2UoJ25vbm4nKQpzYWdlOiBzLm5hdHVyYWxfb2JqZWN0KCkudW5pdmVyc2UoKQpOb24g bmVnYXRpdmUgaW50ZWdlciBzZW1pcmluZwoKc2FnZTogcyA9IG9laXMuX2ltYWdpbmFyeV9zZXF1 ZW5jZSgpCnNhZ2U6IHMubmF0dXJhbF9vYmplY3QoKS51bml2ZXJzZSgpCkludGVnZXIgUmluZwpA ZW5kIGV4YW1wbGUKQGVuZCBkZWZmbgoKQGdlaW5kZXggb2Zmc2V0cygpIChzYWdlLmRhdGFiYXNl cy5vZWlzLk9FSVNTZXF1ZW5jZSBtZXRob2QpCkBhbmNob3J7c2FnZS9kYXRhYmFzZXMvb2VpcyBz YWdlIGRhdGFiYXNlcyBvZWlzIE9FSVNTZXF1ZW5jZSBvZmZzZXRzfUBhbmNob3J7NjB9CkBkZWZm biB7TWV0aG9kfSBvZmZzZXRzICgpCgpSZXR1cm4gdGhlIG9mZnNldHMgb2YgdGhlIHNlcXVlbmNl IEBjb2Rle3NlbGZ9LgoKVGhlIGZpcnN0IG9mZnNldCBpcyB0aGUgc3Vic2NyaXB0IG9mIHRoZSBm aXJzdCB0ZXJtIGluIHRoZSBzZXF1ZW5jZQpAY29kZXtzZWxmfS4gV2hlbiwgdGhlIHNlcXVlbmNl IHJlcHJlc2VudHMgdGhlIGRlY2ltYWwgZXhwYW5zaW9uIG9mIGEgcmVhbApudW1iZXIsIGl0IGNv cnJlc3BvbmRzIHRvIHRoZSBudW1iZXIgb2YgZGlnaXRzIG9mIGl0cyBpbnRlZ2VyIHBhcnQuCgpU aGUgc2Vjb25kIG9mZnNldCBpcyB0aGUgZmlyc3QgdGVybSBpbiB0aGUgc2VxdWVuY2UgQGNvZGV7 c2VsZn0gKHN0YXJ0aW5nCmZyb20gMSkgd2hvc2UgYWJzb2x1dGUgdmFsdWUgaXMgZ3JlYXRlciB0 aGFuIDEuIFRoaXMgaXMgc2V0IHRvIDEgaWYgYWxsCnRoZSB0ZXJtcyBhcmUgMCBvciArLTEuCgpP VVRQVVQ6CgoKQGl0ZW1pemUgLQoKQGl0ZW0gCnR1cGxlIG9mIHR3byBlbGVtZW50cy4KQGVuZCBp dGVtaXplCgpFWEFNUExFUzoKCkBleGFtcGxlCnNhZ2U6IGYgPSBvZWlzKDQ1KSA7IGYgICAgICAg ICAgICAgICAgICAgICAgIyBvcHRpb25hbCAtLSBpbnRlcm5ldApBMDAwMDQ1OiBGaWJvbmFjY2kg bnVtYmVyczogRihuKSA9IEYobi0xKSArIEYobi0yKSB3aXRoIEYoMCkgPSAwIGFuZCBGKDEpID0g MS4KCnNhZ2U6IGYub2Zmc2V0cygpICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBvcHRpb25h bCAtLSBpbnRlcm5ldAooMCwgNCkKCnNhZ2U6IGYuZmlyc3RfdGVybXMoKVs6NF0gICAgICAgICAg ICAgICAgICAgIyBvcHRpb25hbCAtLSBpbnRlcm5ldAooMCwgMSwgMSwgMikKQGVuZCBleGFtcGxl CgpURVNUUzoKCkBleGFtcGxlCnNhZ2U6IHMgPSBvZWlzLl9pbWFnaW5hcnlfc2VxdWVuY2UoKQpz YWdlOiBzLm9mZnNldHMoKQooMzgsIDQpCkBlbmQgZXhhbXBsZQpAZW5kIGRlZmZuCgpAZ2VpbmRl eCBvbGRfSURzKCkgKHNhZ2UuZGF0YWJhc2VzLm9laXMuT0VJU1NlcXVlbmNlIG1ldGhvZCkKQGFu Y2hvcntzYWdlL2RhdGFiYXNlcy9vZWlzIHNhZ2UgZGF0YWJhc2VzIG9laXMgT0VJU1NlcXVlbmNl IG9sZF9JRHN9QGFuY2hvcns2MX0KQGRlZmZuIHtNZXRob2R9IG9sZF9JRHMgKCkKClJldHVybnMg dGhlIElEcyBvZiB0aGUgc2VxdWVuY2UgQGNvZGV7c2VsZn0gY29ycmVzcG9uZGluZyB0byBhbmNl c3RvcnMgb2YgT0VJUy4KCk9VVFBVVDoKCgpAaXRlbWl6ZSAtCgpAaXRlbSAKYSB0dXBsZSBvZiBh dCBtb3N0IHR3byBzdHJpbmdzLiBXaGVuIHRoZSBzdHJpbmcgc3RhcnRzIHdpdGggQG1hdGh7TX0s IGl0CmNvcnJlc3BvbmRzIHRvIHRoZSBJRCBvZiAiVGhlIEVuY3ljbG9wZWRpYSBvZiBJbnRlZ2Vy IFNlcXVlbmNlcyIgb2YKMTk5NS4gV2hlbiB0aGUgc3RyaW5nIHN0YXJ0cyB3aXRoIEBtYXRoe059 LCBpdCBjb3JyZXNwb25kcyB0byB0aGUgSUQgb2YKdGhlICJIYW5kYm9vayBvZiBJbnRlZ2VyIFNl cXVlbmNlcyIgb2YgMTk3My4KQGVuZCBpdGVtaXplCgpFWEFNUExFUzoKCkBleGFtcGxlCnNhZ2U6 IGYgPSBvZWlzKDQ1KSA7IGYgICAgICAgICAgICAgICAgICAgICAgIyBvcHRpb25hbCAtLSBpbnRl cm5ldApBMDAwMDQ1OiBGaWJvbmFjY2kgbnVtYmVyczogRihuKSA9IEYobi0xKSArIEYobi0yKSB3 aXRoIEYoMCkgPSAwIGFuZCBGKDEpID0gMS4KCnNhZ2U6IGYub2xkX0lEcygpICAgICAgICAgICAg ICAgICAgICAgICAgICAgIyBvcHRpb25hbCAtLSBpbnRlcm5ldAooJ00wNjkyJywgJ04wMjU2JykK QGVuZCBleGFtcGxlCgpURVNUUzoKCkBleGFtcGxlCnNhZ2U6IHMgPSBvZWlzLl9pbWFnaW5hcnlf c2VxdWVuY2UoKQpzYWdlOiBzLm9sZF9JRHMoKQooJ005OTk5JywgJ045OTk5JykKQGVuZCBleGFt cGxlCkBlbmQgZGVmZm4KCkBnZWluZGV4IHByb2dyYW1zKCkgKHNhZ2UuZGF0YWJhc2VzLm9laXMu T0VJU1NlcXVlbmNlIG1ldGhvZCkKQGFuY2hvcntzYWdlL2RhdGFiYXNlcy9vZWlzIHNhZ2UgZGF0 YWJhc2VzIG9laXMgT0VJU1NlcXVlbmNlIHByb2dyYW1zfUBhbmNob3J7NjJ9CkBkZWZmbiB7TWV0 aG9kfSBwcm9ncmFtcyAobGFuZ3VhZ2U9J290aGVyJykKClJldHVybnMgcHJvZ3JhbXMgaW1wbGVt ZW50aW5nIHRoZSBzZXF1ZW5jZSBAY29kZXtzZWxmfSBpbiB0aGUgZ2l2ZW4gQGNvZGV7bGFuZ3Vh Z2V9LgoKSU5QVVQ6CgoKQGl0ZW1pemUgLQoKQGl0ZW0gCkBjb2Rle2xhbmd1YWdlfSAtIHN0cmlu ZyAoZGVmYXVsdDogJ290aGVyJykgLSB0aGUgbGFuZ3VhZ2Ugb2YgdGhlCnByb2dyYW0uIEN1cnJl bnQgdmFsdWVzIGFyZTogJ21hcGxlJywgJ21hdGhlbWF0aWNhJyBhbmQgJ290aGVyJy4KQGVuZCBp dGVtaXplCgpPVVRQVVQ6CgoKQGl0ZW1pemUgLQoKQGl0ZW0gCnR1cGxlIG9mIHN0cmluZ3MgKHdp dGggZmFuY3kgZm9ybWF0dGluZykuCkBlbmQgaXRlbWl6ZQoKQGNhcnRvdWNoZQpAcXVvdGF0aW9u IFRvZG8gCmFzayBPRUlTIHRvIGFkZCBhICJTYWdlIHByb2dyYW0iIGZpZWxkIGluIHRoZSBkYXRh YmFzZSA7KQpAZW5kIHF1b3RhdGlvbgpAZW5kIGNhcnRvdWNoZQoKRVhBTVBMRVM6CgpAZXhhbXBs ZQpzYWdlOiBlZSA9IG9laXMoJ0EwMDExMTMnKSA7IGVlICAgICAgICAgICAgICMgb3B0aW9uYWwg LS0gaW50ZXJuZXQKQTAwMTExMzogRGVjaW1hbCBleHBhbnNpb24gb2YgZS4KCnNhZ2U6IGVlLnBy b2dyYW1zKClbMF0gICAgICAgICAgICAgICAgICAgICAgIyBvcHRpb25hbCAtLSBpbnRlcm5ldAon KFBBUkkpIEB7IGRlZmF1bHQocmVhbHByZWNpc2lvbiwgNTAwODApOyB4PWV4cCgxKTsgZm9yIChu PTEsIDUwMDAwLCBkPWZsb29yKHgpOyB4PSh4LWQpKjEwOyB3cml0ZSgiYjAwMTExMy50eHQiLCBu LCAiICIsIGQpKTsgQH0gXFxcXCBfSGFycnkgSi4gU21pdGhfLCBBcHIgMTUgMjAwOScKQGVuZCBl eGFtcGxlCgpURVNUUzoKCkBleGFtcGxlCnNhZ2U6IHMgPSBvZWlzLl9pbWFnaW5hcnlfc2VxdWVu Y2UoKQpzYWdlOiBzLnByb2dyYW1zKCkKMDogKFB5dGhvbikKMTogZGVmIEE5OTk5OTkobik6CjI6 ICAgICBhc3NlcnQoaXNpbnN0YW5jZShuLCAoaW50LCBJbnRlZ2VyKSkpLCAibiBtdXN0IGJlIGFu IGludGVnZXIuIgozOiAgICAgaWYgbiA8IDM4Ogo0OiAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3Io IlRoZSB2YWx1ZSAlcyBpcyBub3QgYWNjZXB0ZWQuIiAlc3RyKG4pKSkKNTogICAgIGVsaWYgbiA9 PSA0MjoKNjogICAgICAgICByZXR1cm4gLTEKNzogICAgIGVsc2U6Cjg6ICAgICAgICAgcmV0dXJu IDEKCnNhZ2U6IHMucHJvZ3JhbXMoJ21hcGxlJykKMDogRG8gbm90IGV2ZW4gdHJ5LCBNYXBsZSBp cyBub3QgYWJsZSB0byBwcm9kdWNlIHN1Y2ggYSBzZXF1ZW5jZS4KCnNhZ2U6IHMucHJvZ3JhbXMo J21hdGhlbWF0aWNhJykKMDogTWF0aGVtYXRpY2EgbmVpdGhlci4KQGVuZCBleGFtcGxlCkBlbmQg ZGVmZm4KCkBnZWluZGV4IHJhd19lbnRyeSgpIChzYWdlLmRhdGFiYXNlcy5vZWlzLk9FSVNTZXF1 ZW5jZSBtZXRob2QpCkBhbmNob3J7c2FnZS9kYXRhYmFzZXMvb2VpcyBzYWdlIGRhdGFiYXNlcyBv ZWlzIE9FSVNTZXF1ZW5jZSByYXdfZW50cnl9QGFuY2hvcns2M30KQGRlZmZuIHtNZXRob2R9IHJh d19lbnRyeSAoKQoKUmV0dXJuIHRoZSByYXcgZW50cnkgb2YgdGhlIHNlcXVlbmNlIEBjb2Rle3Nl bGZ9LCBpbiB0aGUgT0VJUyBmb3JtYXQuCgpPVVRQVVQ6CgoKQGl0ZW1pemUgLQoKQGl0ZW0gCnN0 cmluZy4KQGVuZCBpdGVtaXplCgpFWEFNUExFUzoKCkBleGFtcGxlCnNhZ2U6IGYgPSBvZWlzKDQ1 KSA7IGYgICAgICAgICAgICAgICAgICAgICAgIyBvcHRpb25hbCAtLSBpbnRlcm5ldApBMDAwMDQ1 OiBGaWJvbmFjY2kgbnVtYmVyczogRihuKSA9IEYobi0xKSArIEYobi0yKSB3aXRoIEYoMCkgPSAw IGFuZCBGKDEpID0gMS4KCnNhZ2U6IHByaW50KGYucmF3X2VudHJ5KCkpICAgICAgICAgICAgICAg ICAgIyBvcHRpb25hbCAtLSBpbnRlcm5ldAolSSBBMDAwMDQ1IE0wNjkyIE4wMjU2CiVTIEEwMDAw NDUgMCwxLDEsMiwzLDUsOCwxMywyMSwzNCw1NSw4OSwxNDQsLi4uCiVUIEEwMDAwNDUgMTA5NDYs MTc3MTEsMjg2NTcsNDYzNjgsLi4uCi4uLgpAZW5kIGV4YW1wbGUKClRFU1RTOgoKQGV4YW1wbGUK c2FnZTogcyA9IG9laXMuX2ltYWdpbmFyeV9zZXF1ZW5jZSgpCnNhZ2U6IHMucmF3X2VudHJ5KCkg PT0gb2Vpcy5faW1hZ2luYXJ5X2VudHJ5KCdzaWduLGVhc3knKQpUcnVlCkBlbmQgZXhhbXBsZQpA ZW5kIGRlZmZuCgpAZ2VpbmRleCByZWZlcmVuY2VzKCkgKHNhZ2UuZGF0YWJhc2VzLm9laXMuT0VJ U1NlcXVlbmNlIG1ldGhvZCkKQGFuY2hvcntzYWdlL2RhdGFiYXNlcy9vZWlzIHNhZ2UgZGF0YWJh c2VzIG9laXMgT0VJU1NlcXVlbmNlIHJlZmVyZW5jZXN9QGFuY2hvcns2NH0KQGRlZmZuIHtNZXRo b2R9IHJlZmVyZW5jZXMgKCkKClJldHVybiBhIHR1cGxlIG9mIHJlZmVyZW5jZXMgYXNzb2NpYXRl ZCB0byB0aGUgc2VxdWVuY2UgQGNvZGV7c2VsZn0uCgpPVVRQVVQ6CgoKQGl0ZW1pemUgLQoKQGl0 ZW0gCnR1cGxlIG9mIHN0cmluZ3MgKHdpdGggZmFuY3kgZm9ybWF0dGluZykuCkBlbmQgaXRlbWl6 ZQoKRVhBTVBMRVM6CgpAZXhhbXBsZQpzYWdlOiB3ID0gb2Vpcyg3NTQwKSA7IHcgICAgICAgICAg ICAgICAgICAgICMgb3B0aW9uYWwgLS0gaW50ZXJuZXQKQTAwNzU0MDogV2lsc29uIHByaW1lczog cHJpbWVzIHAgc3VjaCB0aGF0IChwLTEpISA9PSAtMSAobW9kIHBeMikuCgpzYWdlOiB3LnJlZmVy ZW5jZXMoKSAgICAgICAgICAgICAgICAgICAgICAgICMgb3B0aW9uYWwgLS0gaW50ZXJuZXQKMDog QS4gSC4gQmVpbGVyLCBSZWNyZWF0aW9ucyBpbiB0aGUgVGhlb3J5IG9mIE51bWJlcnMsIERvdmVy LCBOWSwgMTk2NCwgcC4gNTIuCjE6IEMuIENsYXdzb24sIE1hdGhlbWF0aWNhbCBNeXN0ZXJpZXMs IFBsZW51bSBQcmVzcywgMTk5NiwgcC4gMTgwLgoyOiBSLiBDcmFuZGFsbCBhbmQgQy4gUG9tZXJh bmNlLCBQcmltZSBOdW1iZXJzOiBBIENvbXB1dGF0aW9uYWwgUGVyc3BlY3RpdmUsIFNwcmluZ2Vy LCBOWSwgMjAwMTsgc2VlIHAuIDI5LgozOiBHLiBILiBIYXJkeSBhbmQgRS4gTS4gV3JpZ2h0LCBB biBJbnRyb2R1Y3Rpb24gdG8gdGhlIFRoZW9yeSBvZiBOdW1iZXJzLCA1dGggZWQuLCBPeGZvcmQg VW5pdi4gUHJlc3MsIDE5NzksIHRoLiA4MC4KLi4uCgpzYWdlOiBfWzBdICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICMgb3B0aW9uYWwgLS0gaW50ZXJuZXQKJ0EuIEguIEJlaWxlciwg UmVjcmVhdGlvbnMgaW4gdGhlIFRoZW9yeSBvZiBOdW1iZXJzLCBEb3ZlciwgTlksIDE5NjQsIHAu IDUyLicKQGVuZCBleGFtcGxlCgpURVNUUzoKCkBleGFtcGxlCnNhZ2U6IHMgPSBvZWlzLl9pbWFn aW5hcnlfc2VxdWVuY2UoKQpzYWdlOiBzLnJlZmVyZW5jZXMoKVsxXQonTGV3aXMgQ2Fycm9sbCwg VGhlIEh1bnRpbmcgb2YgdGhlIFNuYXJrLicKQGVuZCBleGFtcGxlCkBlbmQgZGVmZm4KCkBnZWlu ZGV4IHNob3coKSAoc2FnZS5kYXRhYmFzZXMub2Vpcy5PRUlTU2VxdWVuY2UgbWV0aG9kKQpAYW5j aG9ye3NhZ2UvZGF0YWJhc2VzL29laXMgc2FnZSBkYXRhYmFzZXMgb2VpcyBPRUlTU2VxdWVuY2Ug c2hvd31AYW5jaG9yezY1fQpAZGVmZm4ge01ldGhvZH0gc2hvdyAoKQoKRGlzcGxheSBtb3N0IGF2 YWlsYWJsZSBpbmZvcm1hdGlvbnMgYWJvdXQgdGhlIHNlcXVlbmNlIEBjb2Rle3NlbGZ9LgoKRVhB TVBMRVM6CgpAZXhhbXBsZQpzYWdlOiBzID0gb2VpcygxMjM0NSkgICAgICAgICAgICAgICAgICAg ICAgICMgb3B0aW9uYWwgLS0gaW50ZXJuZXQKc2FnZTogcy5zaG93KCkgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAjIG9wdGlvbmFsIC0tIGludGVybmV0CklECkEwMTIzNDUKPEJMQU5LTElO RT4KTkFNRQpDb2VmZmljaWVudHMgaW4gdGhlIGV4cGFuc2lvbiBzaW5oKGFyY3Npbih4KSphcmNz aW4oeCkpID0gMip4XjIvMiErOCp4XjQvNCErMjQ4KnheNi82ISsxMTMyOCp4XjgvOCErLi4uCjxC TEFOS0xJTkU+CkZJUlNUIFRFUk1TCigyLCA4LCAyNDgsIDExMzI4LCA4NDkzMTIsIDk0ODU3NjAw LCAxNDgxOTIxNDcyMCwgMzA5MTkzNjUxMjAwMCwgODMxNjU3NjU1MzQ5NzYwLCAyODA0NzM3NTYx OTc1Mjk2MDAsIDExNTk2NzU5Nzk2NTQzMDA3NzQ0MCwgNTc3MTIyNTc4OTI0NTY5MTE5MTI5NjAs IDM0MDM5NzY1ODAxMDc5NDkzMzY5NTY5MjgwKQo8QkxBTktMSU5FPgpGT1JNVUxBUwouLi4KT0ZG U0VUUwooMCwgMSkKPEJMQU5LTElORT4KVVJMCmh0dHA6Ly9vZWlzLm9yZy9BMDEyMzQ1CjxCTEFO S0xJTkU+CkFVVEhPUgpQYXRyaWNrIERlbWljaGVsIChwYXRyaWNrLmRlbWljaGVsKEFUKWhwLmNv bSkKPEJMQU5LTElORT4KQGVuZCBleGFtcGxlCgpURVNUUzoKCkBleGFtcGxlCnNhZ2U6IHMgPSBv ZWlzLl9pbWFnaW5hcnlfc2VxdWVuY2UoKQpzYWdlOiBzLnNob3coKQpJRApBOTk5OTk5CjxCTEFO S0xJTkU+Ck5BTUUKVGhlIG9wcG9zaXRlIG9mIHR3aWNlIHRoZSBjaGFyYWN0ZXJpc3RpYyBzZXF1 ZW5jZSBvZiA0MiBwbHVzIC4uLgpGSVJTVCBURVJNUwooMSwgMSwgMSwgMSwgLTEsIDEsIDEsIDEs IDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIC4uLgo8QkxBTktMSU5FPgpDT01N RU5UUwowOiA0MiBpcyB0aGUgcHJvZHVjdCBvZiB0aGUgZmlyc3QgNCBwcmltZSBudW1iZXJzLCBl eGNlcHQgLi4uCjE6IEFwYXJ0IGZyb20gdGhhdCwgaSBoYXZlIG5vIGNvbW1lbnQuCi4uLgpAZW5k IGV4YW1wbGUKQGVuZCBkZWZmbgoKQGdlaW5kZXggdXJsKCkgKHNhZ2UuZGF0YWJhc2VzLm9laXMu T0VJU1NlcXVlbmNlIG1ldGhvZCkKQGFuY2hvcntzYWdlL2RhdGFiYXNlcy9vZWlzIHNhZ2UgZGF0 YWJhc2VzIG9laXMgT0VJU1NlcXVlbmNlIHVybH1AYW5jaG9yezY2fQpAZGVmZm4ge01ldGhvZH0g dXJsICgpCgpSZXR1cm4gdGhlIFVSTCBvZiB0aGUgcGFnZSBhc3NvY2lhdGVkIHRvIHRoZSBzZXF1 ZW5jZSBAY29kZXtzZWxmfS4KCk9VVFBVVDoKCgpAaXRlbWl6ZSAtCgpAaXRlbSAKc3RyaW5nLgpA ZW5kIGl0ZW1pemUKCkVYQU1QTEVTOgoKQGV4YW1wbGUKc2FnZTogZiA9IG9laXMoNDUpIDsgZiAg ICAgICAgICAgICAgICAgICAgICAjIG9wdGlvbmFsIC0tIGludGVybmV0CkEwMDAwNDU6IEZpYm9u YWNjaSBudW1iZXJzOiBGKG4pID0gRihuLTEpICsgRihuLTIpIHdpdGggRigwKSA9IDAgYW5kIEYo MSkgPSAxLgoKc2FnZTogZi51cmwoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIG9w dGlvbmFsIC0tIGludGVybmV0CidodHRwOi8vb2Vpcy5vcmcvQTAwMDA0NScKQGVuZCBleGFtcGxl CgpURVNUUzoKCkBleGFtcGxlCnNhZ2U6IHMgPSBvZWlzLl9pbWFnaW5hcnlfc2VxdWVuY2UoKQpz YWdlOiBzLnVybCgpCidodHRwOi8vb2Vpcy5vcmcvQTk5OTk5OScKQGVuZCBleGFtcGxlCkBlbmQg ZGVmZm4KQGVuZCBkZWZmbgoKQGdlaW5kZXggdG9fdHVwbGUoKSAoaW4gbW9kdWxlIHNhZ2UuZGF0 YWJhc2VzLm9laXMpCkBhbmNob3J7c2FnZS9kYXRhYmFzZXMvb2VpcyBzYWdlIGRhdGFiYXNlcyBv ZWlzIHRvX3R1cGxlfUBhbmNob3J7Njd9CkBkZWZmbiB7RnVuY3Rpb259IHNhZ2UuZGF0YWJhc2Vz Lm9laXMudG9fdHVwbGUgKHN0cmluZykKQGVuZCBkZWZmbgoKQGMgbm9kb2N0ZXN0CgpAbm9kZSBM b2NhbCBjb3B5IG9mIFNsb2FuZSBPbi1MaW5lIEVuY3ljbG9wZWRpYSBvZiBJbnRlZ2VyIFNlcXVl bmNlcyxGaW5kU3RhdCAtIHRoZSBDb21iaW5hdG9yaWFsIFN0YXRpc3RpYyBGaW5kZXIsVGhlIE9u LUxpbmUgRW5jeWNsb3BlZGlhIG9mIEludGVnZXIgU2VxdWVuY2VzIE9FSVMsVG9wCkBhbmNob3J7 c2FnZS9kYXRhYmFzZXMvc2xvYW5lIHNhZ2UtZGF0YWJhc2VzLXNsb2FuZX1AYW5jaG9yezY4fUBh bmNob3J7c2FnZS9kYXRhYmFzZXMvc2xvYW5lIGRvY31AYW5jaG9yezY5fUBhbmNob3J7c2FnZS9k YXRhYmFzZXMvc2xvYW5lIGxvY2FsLWNvcHktb2Ytc2xvYW5lLW9uLWxpbmUtZW5jeWNsb3BlZGlh LW9mLWludGVnZXItc2VxdWVuY2VzfUBhbmNob3J7NmF9CkBjaGFwdGVyIExvY2FsIGNvcHkgb2Yg U2xvYW5lIE9uLUxpbmUgRW5jeWNsb3BlZGlhIG9mIEludGVnZXIgU2VxdWVuY2VzCgoKQGMgVGhp cyBmaWxlIGhhcyBiZWVuIGF1dG9nZW5lcmF0ZWQuCkBhbmNob3J7c2FnZS9kYXRhYmFzZXMvc2xv YW5lIG1vZHVsZS1zYWdlIGRhdGFiYXNlcyBzbG9hbmV9QGFuY2hvcns5fQpAZ2VpbmRleCBzYWdl LmRhdGFiYXNlcy5zbG9hbmUgKG1vZHVsZSkKClRoZSBTbG9hbmVFbmN5Y2xvcGVkaWEgb2JqZWN0 IHByb3ZpZGVzIGFjY2VzcyB0byBhIGxvY2FsIGNvcHkgb2YgdGhlIGRhdGFiYXNlCmNvbnRhaW5p bmcgb25seSB0aGUgc2VxdWVuY2VzIGFuZCB0aGVpciBuYW1lcy4gVG8gdXNlIHRoaXMgeW91IG11 c3QgZG93bmxvYWQKYW5kIGluc3RhbGwgdGhlIGRhdGFiYXNlIHVzaW5nIEBjb2Rle1Nsb2FuZUVu Y3ljbG9wZWRpYS5pbnN0YWxsKCl9LCBvcgpAY29kZXtTbG9hbmVFbmN5Y2xvcGVkaWEuaW5zdGFs bF9mcm9tX2d6KCl9IGlmIHlvdSBoYXZlIGFscmVhZHkgZG93bmxvYWRlZCB0aGUKZGF0YWJhc2Ug bWFudWFsbHkuCgpUbyBsb29rIHVwIGEgc2VxdWVuY2UsIHR5cGUKCkBleGFtcGxlCnNhZ2U6IFNs b2FuZUVuY3ljbG9wZWRpYVs2MDg0M10gICAgICAgICAgICAgICAjIG9wdGlvbmFsIC0gc2xvYW5l X2RhdGFiYXNlClsxLCA2LCAyMSwgMTA3XQpAZW5kIGV4YW1wbGUKClRvIGdldCB0aGUgbmFtZSBv ZiBhIHNlcXVlbmNlLCB0eXBlCgpAZXhhbXBsZQpzYWdlOiBTbG9hbmVFbmN5Y2xvcGVkaWEuc2Vx dWVuY2VfbmFtZSgxKSAgICAgIyBvcHRpb25hbCAtIHNsb2FuZV9kYXRhYmFzZQonTnVtYmVyIG9m IGdyb3VwcyBvZiBvcmRlciBuLicKQGVuZCBleGFtcGxlCgpUbyBzZWFyY2ggbG9jYWxseSBmb3Ig YSBwYXJ0aWN1bGFyIHN1YnNlcXVlbmNlLCB0eXBlCgpAZXhhbXBsZQpzYWdlOiBTbG9hbmVFbmN5 Y2xvcGVkaWEuZmluZChbMSwyLDMsNCw1XSwgMSkgICAgIyBvcHRpb25hbCAtIHNsb2FuZV9kYXRh YmFzZQpbKDE1LCBbMSwgMiwgMywgNCwgNSwgNywgNywgOCwgOSwgMTEsIDExLCAxMywgMTMsIDE2 LCAxNiwgMTYsIDE3LCAxOSwgMTksIDIzLCAyMywgMjMsIDIzLCAyNSwgMjUsIDI3LCAyNywgMjks IDI5LCAzMSwgMzEsIDMyLCAzNywgMzcsIDM3LCAzNywgMzcsIDQxLCA0MSwgNDEsIDQxLCA0Mywg NDMsIDQ3LCA0NywgNDcsIDQ3LCA0OSwgNDksIDUzLCA1MywgNTMsIDUzLCA1OSwgNTksIDU5LCA1 OSwgNTksIDU5LCA2MSwgNjEsIDY0LCA2NCwgNjQsIDY3LCA2NywgNjcsIDcxLCA3MSwgNzEsIDcx LCA3M10pXQpAZW5kIGV4YW1wbGUKClRoZSBkZWZhdWx0IG1heGltdW0gbnVtYmVyIG9mIHJlc3Vs dHMgaXMgMzAsIGJ1dCB0byByZXR1cm4gdXAgdG8KMTAwLCB0eXBlCgpAZXhhbXBsZQpzYWdlOiBT bG9hbmVFbmN5Y2xvcGVkaWEuZmluZChbMSwyLDMsNCw1XSwgMTAwKSAgICAjIG9wdGlvbmFsIC0g c2xvYW5lX2RhdGFiYXNlClsoMTUsIFsxLCAyLCAzLCA0LCA1LCA3LCA3LCA4LCA5LCAxMSwgMTEs IC4uLgpAZW5kIGV4YW1wbGUKClJlc3VsdHMgaW4gZWl0aGVyIGNhc2UgYXJlIG9mIHRoZSBmb3Jt IFsgKG51bWJlciwgbGlzdCkgXS4KCgpAc3Vic3ViaGVhZGluZyBTZWUgYWxzbwoKCgpAaXRlbWl6 ZSAtCgpAaXRlbSAKSWYgeW91IHdhbnQgdG8gZ2V0IG1vcmUgaW5mb3JtYXRpb25zIHJlbGF0aXZl IHRvIGEgc2VxdWVuY2UgKHJlZmVyZW5jZXMsCmxpbmtzLCBleGFtcGxlcywgcHJvZ3JhbXMsIC4u LiksIHlvdSBjYW4gdXNlIHRoZSBPbi1MaW5lIEVuY3ljbG9wZWRpYSBvZgpJbnRlZ2VyIFNlcXVl bmNlcyBwcm92aWRlZCBieSB0aGUgQHJlZns4LCxPRUlTfQptb2R1bGUuCgpAaXRlbSAKU29tZSBp bmZpbml0ZSBPRUlTIHNlcXVlbmNlcyBhcmUgaW1wbGVtZW50ZWQgaW4gU2FnZSwgdmlhIHRoZQpz bG9hbmVfZnVuY3Rpb25zQGZvb3Rub3Rley4uLy4uLy4uLy4uLy4uLy4uL2h0bWwvZW4vcmVmZXJl bmNlL2NvbWJpbmF0L3NhZ2UvY29tYmluYXQvc2xvYW5lX2Z1bmN0aW9ucy5odG1sI21vZHVsZS1z YWdlLmNvbWJpbmF0LnNsb2FuZV9mdW5jdGlvbnN9IG1vZHVsZS4KQGVuZCBpdGVtaXplCgoKQVVU SE9SUzoKCgpAaXRlbWl6ZSAtCgpAaXRlbSAKU3RldmVuIFNpdmVrICgyMDA1LTEyLTIyKTogZmly c3QgdmVyc2lvbgoKQGl0ZW0gClN0ZXZlbiBTaXZlayAoMjAwNi0wMi0wNyk6IHVwZGF0ZWQgdG8g Y29ycmVjdGx5IGhhbmRsZSB0aGUgbmV3CnNlYXJjaCBmb3JtIG9uIHRoZSBTbG9hbmUgd2Vic2l0 ZSwgYW5kIGl0J3Mgbm93IGFsc28gc21hcnRlciBhYm91dApsb2FkaW5nIHRoZSBsb2NhbCBkYXRh YmFzZSBpbiB0aGF0IGl0IGRvZXNuJ3QgY29udmVydCBhIHNlcXVlbmNlCmZyb20gc3RyaW5nIGZv cm0gdG8gYSBsaXN0IG9mIGludGVnZXJzIHVudGlsIGFic29sdXRlbHkgbmVjZXNzYXJ5LgpUaGlz IHNlZW1zIHRvIGN1dCB0aGUgbG9hZGluZyB0aW1lIHJvdWdobHkgaW4gaGFsZi4KCkBpdGVtIApT dGV2ZW4gU2l2ZWsgKDIwMDktMTItMjIpOiBhZGRlZCB0aGUgU2xvYW5lRW5jeWNsb3BlZGlhIGZ1 bmN0aW9ucwppbnN0YWxsKCkgYW5kIGluc3RhbGxfZnJvbV9neigpIHNvIHVzZXJzIGNhbiBnZXQg dGhlIGxhdGVzdCB2ZXJzaW9ucwpvZiB0aGUgT0VJUyB3aXRob3V0IGhhdmluZyB0byBnZXQgYW4g dXBkYXRlZCBzcGtnOyBhZGRlZApzZXF1ZW5jZV9uYW1lKCkgdG8gcmV0dXJuIHRoZSBkZXNjcmlw dGlvbiBvZiBhIHNlcXVlbmNlOyBhbmQgY2hhbmdlZAp0aGUgZGF0YSB0eXBlIGZvciBlbGVtZW50 cyBvZiBlYWNoIHNlcXVlbmNlIGZyb20gaW50IHRvIEludGVnZXIuCgpAaXRlbSAKVGhpZXJyeSBN b250ZWlsICgyMDEyLTAyLTEwKTogZGVwcmVjYXRlIGRlYWQgY29kZSBhbmQgdXBkYXRlIHJlbGF0 ZWQgZG9jIGFuZAp0ZXN0cy4KQGVuZCBpdGVtaXplCgpAbWVudQoqIENsYXNzZXMgYW5kIG1ldGhv ZHM6IENsYXNzZXMgYW5kIG1ldGhvZHM8Mj4uIAoKQGVuZCBtZW51CgpAbm9kZSBDbGFzc2VzIGFu ZCBtZXRob2RzPDI+LCwsTG9jYWwgY29weSBvZiBTbG9hbmUgT24tTGluZSBFbmN5Y2xvcGVkaWEg b2YgSW50ZWdlciBTZXF1ZW5jZXMKQGFuY2hvcntzYWdlL2RhdGFiYXNlcy9zbG9hbmUgY2xhc3Nl cy1hbmQtbWV0aG9kc31AYW5jaG9yezZifQpAc2VjdGlvbiBDbGFzc2VzIGFuZCBtZXRob2RzCgoK QGdlaW5kZXggU2xvYW5lRW5jeWNsb3BlZGlhQ2xhc3MgKGNsYXNzIGluIHNhZ2UuZGF0YWJhc2Vz LnNsb2FuZSkKQGFuY2hvcntzYWdlL2RhdGFiYXNlcy9zbG9hbmUgc2FnZSBkYXRhYmFzZXMgc2xv YW5lIFNsb2FuZUVuY3ljbG9wZWRpYUNsYXNzfUBhbmNob3J7NmN9CkBkZWZmbiB7Q2xhc3N9IHNh Z2UuZGF0YWJhc2VzLnNsb2FuZS5TbG9hbmVFbmN5Y2xvcGVkaWFDbGFzcwoKQSBsb2NhbCBjb3B5 IG9mIHRoZSBTbG9hbmUgT25saW5lIEVuY3ljbG9wZWRpYSBvZiBJbnRlZ2VyIFNlcXVlbmNlcwp0 aGF0IGNvbnRhaW5zIG9ubHkgdGhlIHNlcXVlbmNlIG51bWJlcnMgYW5kIHRoZSBzZXF1ZW5jZXMK dGhlbXNlbHZlcy4KCkBnZWluZGV4IGZpbmQoKSAoc2FnZS5kYXRhYmFzZXMuc2xvYW5lLlNsb2Fu ZUVuY3ljbG9wZWRpYUNsYXNzIG1ldGhvZCkKQGFuY2hvcntzYWdlL2RhdGFiYXNlcy9zbG9hbmUg c2FnZSBkYXRhYmFzZXMgc2xvYW5lIFNsb2FuZUVuY3ljbG9wZWRpYUNsYXNzIGZpbmR9QGFuY2hv cns2ZH0KQGRlZmZuIHtNZXRob2R9IGZpbmQgKHNlcSwgbWF4cmVzdWx0cz0zMCkKClJldHVybiBh IGxpc3Qgb2YgYWxsIHNlcXVlbmNlcyB3aGljaCBoYXZlIHNlcSBhcyBhIHN1YnNlcXVlbmNlLCB1 cAp0byBtYXhyZXN1bHRzIHJlc3VsdHMuIFNlcXVlbmNlcyBhcmUgcmV0dXJuZWQgaW4gdGhlIGZv cm0gKG51bWJlciwKbGlzdCkuCgpJTlBVVDoKCgpAaXRlbWl6ZSAtCgpAaXRlbSAKQGNvZGV7c2Vx fSAtIGxpc3QKCkBpdGVtIApAY29kZXttYXhyZXN1bHRzfSAtIGludApAZW5kIGl0ZW1pemUKCk9V VFBVVDogbGlzdCBvZiAyLXR1cGxlcyAoaSwgdiksIHdoZXJlIHYgaXMgYSBzZXF1ZW5jZSB3aXRo IHNlcSBhcwphIHN1YnNlcXVlbmNlLgpAZW5kIGRlZmZuCgpAZ2VpbmRleCBpbnN0YWxsKCkgKHNh Z2UuZGF0YWJhc2VzLnNsb2FuZS5TbG9hbmVFbmN5Y2xvcGVkaWFDbGFzcyBtZXRob2QpCkBhbmNo b3J7c2FnZS9kYXRhYmFzZXMvc2xvYW5lIHNhZ2UgZGF0YWJhc2VzIHNsb2FuZSBTbG9hbmVFbmN5 Y2xvcGVkaWFDbGFzcyBpbnN0YWxsfUBhbmNob3J7NmV9CkBkZWZmbiB7TWV0aG9kfSBpbnN0YWxs IChvZWlzX3VybD0naHR0cDovL29laXMub3JnL3N0cmlwcGVkLmd6JywgbmFtZXNfdXJsPSdodHRw Oi8vb2Vpcy5vcmcvbmFtZXMuZ3onLCBvdmVyd3JpdGU9RmFsc2UpCgpEb3dubG9hZCBhbmQgaW5z dGFsbCB0aGUgb25saW5lIGVuY3ljbG9wZWRpYSwgcmFpc2luZyBhbiBJT0Vycm9yIGlmCmVpdGhl ciBzdGVwIGZhaWxzLgoKSU5QVVQ6CgoKQGl0ZW1pemUgLQoKQGl0ZW0gCkBjb2Rle29laXNfdXJs fSAtIHN0cmluZyAoZGVmYXVsdDogIkBpbmRpY2F0ZXVybHtodHRwOi8vb2Vpcy5vcmd9Li4uIikK VGhlIFVSTCBvZiB0aGUgc3RyaXBwZWQuZ3ogZW5jeWNsb3BlZGlhIGZpbGUuCgpAaXRlbSAKQGNv ZGV7bmFtZXNfdXJsfSAtIHN0cmluZyAoZGVmYXVsdDogIkBpbmRpY2F0ZXVybHtodHRwOi8vb2Vp cy5vcmd9Li4uIikKVGhlIFVSTCBvZiB0aGUgbmFtZXMuZ3ogZW5jeWNsb3BlZGlhIGZpbGUuICBJ ZiB5b3UgZG8gbm90IHdhbnQgdG8KZG93bmxvYWQgdGhpcyBmaWxlLCBzZXQgbmFtZXNfdXJsPU5v bmUuCgpAaXRlbSAKQGNvZGV7b3ZlcndyaXRlfSAtIGJvb2xlYW4gKGRlZmF1bHQ6IEZhbHNlKSBJ ZiB0aGUgZW5jeWNsb3BlZGlhIGlzCmFscmVhZHkgaW5zdGFsbGVkIGFuZCBvdmVyd3JpdGU9VHJ1 ZSwgZG93bmxvYWQgYW5kIGluc3RhbGwgdGhlIGxhdGVzdAp2ZXJzaW9uIG92ZXIgdGhlIGluc3Rh bGxlZCBvbmUuCkBlbmQgaXRlbWl6ZQpAZW5kIGRlZmZuCgpAZ2VpbmRleCBpbnN0YWxsX2Zyb21f Z3ooKSAoc2FnZS5kYXRhYmFzZXMuc2xvYW5lLlNsb2FuZUVuY3ljbG9wZWRpYUNsYXNzIG1ldGhv ZCkKQGFuY2hvcntzYWdlL2RhdGFiYXNlcy9zbG9hbmUgc2FnZSBkYXRhYmFzZXMgc2xvYW5lIFNs b2FuZUVuY3ljbG9wZWRpYUNsYXNzIGluc3RhbGxfZnJvbV9nen1AYW5jaG9yezZmfQpAZGVmZm4g e01ldGhvZH0gaW5zdGFsbF9mcm9tX2d6IChzdHJpcHBlZF9maWxlLCBuYW1lc19maWxlLCBvdmVy d3JpdGU9RmFsc2UpCgpJbnN0YWxsIHRoZSBvbmxpbmUgZW5jeWNsb3BlZGlhIGZyb20gYSBsb2Nh bCBzdHJpcHBlZC5neiBmaWxlLgoKSU5QVVQ6CgoKQGl0ZW1pemUgLQoKQGl0ZW0gCkBjb2Rle3N0 cmlwcGVkX2ZpbGV9IC0gc3RyaW5nLiBUaGUgbmFtZSBvZiB0aGUgc3RyaXBwZWQuZ3ogT0VJUyBm aWxlLgoKQGl0ZW0gCkBjb2Rle25hbWVzX2ZpbGV9IC0gc3RyaW5nLiAgVGhlIG5hbWUgb2YgdGhl IG5hbWVzLmd6IE9FSVMgZmlsZSwgb3IKTm9uZSBpZiB0aGUgdXNlciBkb2VzIG5vdCB3YW50IGl0 IGluc3RhbGxlZC4KCkBpdGVtIApAY29kZXtvdmVyd3JpdGV9IC0gYm9vbGVhbiAoZGVmYXVsdDog RmFsc2UpIElmIHRoZSBlbmN5Y2xvcGVkaWEgaXMKYWxyZWFkeSBpbnN0YWxsZWQgYW5kIG92ZXJ3 cml0ZT1UcnVlLCBpbnN0YWxsICdmaWxlbmFtZScgb3ZlciB0aGUKb2xkIGVuY3ljbG9wZWRpYS4K QGVuZCBpdGVtaXplCkBlbmQgZGVmZm4KCkBnZWluZGV4IGxvYWQoKSAoc2FnZS5kYXRhYmFzZXMu c2xvYW5lLlNsb2FuZUVuY3ljbG9wZWRpYUNsYXNzIG1ldGhvZCkKQGFuY2hvcntzYWdlL2RhdGFi YXNlcy9zbG9hbmUgc2FnZSBkYXRhYmFzZXMgc2xvYW5lIFNsb2FuZUVuY3ljbG9wZWRpYUNsYXNz IGxvYWR9QGFuY2hvcns3MH0KQGRlZmZuIHtNZXRob2R9IGxvYWQgKCkKCkxvYWQgdGhlIGVudGly ZSBlbmN5Y2xvcGVkaWEgaW50byBtZW1vcnkgZnJvbSBhIGZpbGUuIFRoaXMgaXMgZG9uZQphdXRv bWF0aWNhbGx5IGlmIHRoZSB1c2VyIHRyaWVzIHRvIHBlcmZvcm0gYSBsb29rdXAgb3IgYSBzZWFy Y2guCkBlbmQgZGVmZm4KCkBnZWluZGV4IHNlcXVlbmNlX25hbWUoKSAoc2FnZS5kYXRhYmFzZXMu c2xvYW5lLlNsb2FuZUVuY3ljbG9wZWRpYUNsYXNzIG1ldGhvZCkKQGFuY2hvcntzYWdlL2RhdGFi YXNlcy9zbG9hbmUgc2FnZSBkYXRhYmFzZXMgc2xvYW5lIFNsb2FuZUVuY3ljbG9wZWRpYUNsYXNz IHNlcXVlbmNlX25hbWV9QGFuY2hvcns3MX0KQGRlZmZuIHtNZXRob2R9IHNlcXVlbmNlX25hbWUg KE4pCgpSZXR1cm4gdGhlIG5hbWUgb2Ygc2VxdWVuY2UgTiBpbiB0aGUgZW5jeWNsb3BlZGlhLiBJ ZiBzZXF1ZW5jZSBOCmRvZXMgbm90IGV4aXN0LCByZXR1cm4gJ0B3eyd9LiAgSWYgdGhlIG5hbWVz IGRhdGFiYXNlIGlzIG5vdCBpbnN0YWxsZWQsCnJhaXNlIGFuIElPRXJyb3IuCgpJTlBVVDoKCgpA aXRlbWl6ZSAtCgpAaXRlbSAKQGNvZGV7Tn0gLSBpbnQKQGVuZCBpdGVtaXplCgpPVVRQVVQ6IHN0 cmluZwoKRVhBTVBMRVM6CgpzYWdlOiBTbG9hbmVFbmN5Y2xvcGVkaWEuc2VxdWVuY2VfbmFtZSgx KSAjIG9wdGlvbmFsIC0gc2xvYW5lX2RhdGFiYXNlCidOdW1iZXIgb2YgZ3JvdXBzIG9mIG9yZGVy IG4uJwpAZW5kIGRlZmZuCgpAZ2VpbmRleCB1bmxvYWQoKSAoc2FnZS5kYXRhYmFzZXMuc2xvYW5l LlNsb2FuZUVuY3ljbG9wZWRpYUNsYXNzIG1ldGhvZCkKQGFuY2hvcntzYWdlL2RhdGFiYXNlcy9z bG9hbmUgc2FnZSBkYXRhYmFzZXMgc2xvYW5lIFNsb2FuZUVuY3ljbG9wZWRpYUNsYXNzIHVubG9h ZH1AYW5jaG9yezcyfQpAZGVmZm4ge01ldGhvZH0gdW5sb2FkICgpCgpSZW1vdmUgdGhlIGRhdGFi YXNlIGZyb20gbWVtb3J5LgpAZW5kIGRlZmZuCkBlbmQgZGVmZm4KCkBnZWluZGV4IGNvcHlfZ3pf ZmlsZSgpIChpbiBtb2R1bGUgc2FnZS5kYXRhYmFzZXMuc2xvYW5lKQpAYW5jaG9ye3NhZ2UvZGF0 YWJhc2VzL3Nsb2FuZSBzYWdlIGRhdGFiYXNlcyBzbG9hbmUgY29weV9nel9maWxlfUBhbmNob3J7 NzN9CkBkZWZmbiB7RnVuY3Rpb259IHNhZ2UuZGF0YWJhc2VzLnNsb2FuZS5jb3B5X2d6X2ZpbGUg KGd6X3NvdXJjZSwgYnpfZGVzdGluYXRpb24pCgpEZWNvbXByZXNzIGEgZ3ppcHBlZCBmaWxlIGFu ZCBpbnN0YWxsIHRoZSBiemlwcGVkIHZlcnNvbi4gIFRoaXMgaXMKdXNlZCBieSBTbG9hbmVFbmN5 Y2xvcGVkaWEuaW5zdGFsbF9mcm9tX2d6IHRvIGluc3RhbGwgc2V2ZXJhbApnemlwcGVkIE9FSVMg ZGF0YWJhc2UgZmlsZXMuCgpJTlBVVDoKCgpAaXRlbWl6ZSAtCgpAaXRlbSAKQGNvZGV7Z3pfc291 cmNlfSAtIHN0cmluZy4gVGhlIG5hbWUgb2YgdGhlIGd6aXBwZWQgZmlsZS4KCkBpdGVtIApAY29k ZXtiel9kZXN0aW5hdGlvbn0gLSBzdHJpbmcuICBUaGUgbmFtZSBvZiB0aGUgbmV3bHkgY29tcHJl c3NlZCBmaWxlLgpAZW5kIGl0ZW1pemUKQGVuZCBkZWZmbgoKQGdlaW5kZXggcGFyc2Vfc2VxdWVu Y2UoKSAoaW4gbW9kdWxlIHNhZ2UuZGF0YWJhc2VzLnNsb2FuZSkKQGFuY2hvcntzYWdlL2RhdGFi YXNlcy9zbG9hbmUgc2FnZSBkYXRhYmFzZXMgc2xvYW5lIHBhcnNlX3NlcXVlbmNlfUBhbmNob3J7 NzR9CkBkZWZmbiB7RnVuY3Rpb259IHNhZ2UuZGF0YWJhc2VzLnNsb2FuZS5wYXJzZV9zZXF1ZW5j ZSAodGV4dD0nQHd7J30pCgpUaGlzIGludGVybmFsIGZ1bmN0aW9uIHdhcyBvbmx5IHVzZWQgYnkg dGhlIHNsb2FuZV9maW5kIGZ1bmN0aW9uLAp3aGljaCBpcyBub3cgZGVwcmVjYXRlZC4KClRFU1RT OgoKQGV4YW1wbGUKc2FnZTogZnJvbSBzYWdlLmRhdGFiYXNlcy5zbG9hbmUgaW1wb3J0IHBhcnNl X3NlcXVlbmNlCnNhZ2U6IHBhcnNlX3NlcXVlbmNlKCkKZG9jdGVzdDouLi46IERlcHJlY2F0aW9u V2FybmluZzogVGhlIGZ1bmN0aW9uIHBhcnNlX3NlcXVlbmNlIGlzIG5vdCB1c2VkIGFueW1vcmUg KDIwMTItMDEtMDEpLgpTZWUgaHR0cDovL3RyYWMuc2FnZW1hdGgub3JnLzEwMzU4IGZvciBkZXRh aWxzLgpAZW5kIGV4YW1wbGUKQGVuZCBkZWZmbgoKQGdlaW5kZXggc2xvYW5lX2ZpbmQoKSAoaW4g bW9kdWxlIHNhZ2UuZGF0YWJhc2VzLnNsb2FuZSkKQGFuY2hvcntzYWdlL2RhdGFiYXNlcy9zbG9h bmUgc2FnZSBkYXRhYmFzZXMgc2xvYW5lIHNsb2FuZV9maW5kfUBhbmNob3J7NzV9CkBkZWZmbiB7 RnVuY3Rpb259IHNhZ2UuZGF0YWJhc2VzLnNsb2FuZS5zbG9hbmVfZmluZCAobGlzdD1bXSwgbnJl c3VsdHM9MzAsIHZlcmJvc2U9VHJ1ZSkKClRoaXMgZnVuY3Rpb24gaXMgYnJva2VuLiBJdCBpcyBy ZXBsYWNlZCBieSB0aGUKQHJlZns4LCxPRUlTfSBtb2R1bGUuCgpUeXBlIEBjb2Rle29laXM/fSBm b3IgbW9yZSBpbmZvcm1hdGlvbi4KClRFU1RTOgoKQGV4YW1wbGUKc2FnZTogc2xvYW5lX2ZpbmQo WzEsMiwzXSkKZG9jdGVzdDouLi46IERlcHJlY2F0aW9uV2FybmluZzogVGhlIGZ1bmN0aW9uIHNs b2FuZV9maW5kIGlzIGRlcHJlY2F0ZWQuIFVzZSBvZWlzKCkgaW5zdGVhZCAoMjAxMi0wMS0wMSku ClNlZSBodHRwOi8vdHJhYy5zYWdlbWF0aC5vcmcvMTAzNTggZm9yIGRldGFpbHMuCkBlbmQgZXhh bXBsZQpAZW5kIGRlZmZuCgpAZ2VpbmRleCBzbG9hbmVfc2VxdWVuY2UoKSAoaW4gbW9kdWxlIHNh Z2UuZGF0YWJhc2VzLnNsb2FuZSkKQGFuY2hvcntzYWdlL2RhdGFiYXNlcy9zbG9hbmUgc2FnZSBk YXRhYmFzZXMgc2xvYW5lIHNsb2FuZV9zZXF1ZW5jZX1AYW5jaG9yezc2fQpAZGVmZm4ge0Z1bmN0 aW9ufSBzYWdlLmRhdGFiYXNlcy5zbG9hbmUuc2xvYW5lX3NlcXVlbmNlIChudW1iZXI9MSwgdmVy Ym9zZT1UcnVlKQoKVGhpcyBmdW5jdGlvbiBpcyBicm9rZW4uIEl0IGlzIHJlcGxhY2VkIGJ5IHRo ZQpAcmVmezgsLE9FSVN9IG1vZHVsZS4KClR5cGUgQGNvZGV7b2Vpcz99IGZvciBtb3JlIGluZm9y bWF0aW9uLgoKVEVTVFM6CgpAZXhhbXBsZQpzYWdlOiBzbG9hbmVfc2VxdWVuY2UoMTIzKQpkb2N0 ZXN0Oi4uLjogRGVwcmVjYXRpb25XYXJuaW5nOiBUaGUgZnVuY3Rpb24gc2xvYW5lX3NlcXVlbmNl IGlzIGRlcHJlY2F0ZWQuIFVzZSBvZWlzKCkgaW5zdGVhZCAoMjAxMi0wMS0wMSkuClNlZSBodHRw Oi8vdHJhYy5zYWdlbWF0aC5vcmcvMTAzNTggZm9yIGRldGFpbHMuCkBlbmQgZXhhbXBsZQpAZW5k IGRlZmZuCgpAYyBub2RvY3Rlc3QKCkBub2RlIEZpbmRTdGF0IC0gdGhlIENvbWJpbmF0b3JpYWwg U3RhdGlzdGljIEZpbmRlcixGcmFuayBMdWViZWNrJ3MgdGFibGVzIG9mIENvbndheSBwb2x5bm9t aWFscyBvdmVyIGZpbml0ZSBmaWVsZHMsTG9jYWwgY29weSBvZiBTbG9hbmUgT24tTGluZSBFbmN5 Y2xvcGVkaWEgb2YgSW50ZWdlciBTZXF1ZW5jZXMsVG9wCkBhbmNob3J7c2FnZS9kYXRhYmFzZXMv ZmluZHN0YXQgc2FnZS1kYXRhYmFzZXMtZmluZHN0YXR9QGFuY2hvcns3N31AYW5jaG9ye3NhZ2Uv ZGF0YWJhc2VzL2ZpbmRzdGF0IGRvY31AYW5jaG9yezc4fUBhbmNob3J7c2FnZS9kYXRhYmFzZXMv ZmluZHN0YXQgZmluZHN0YXQtdGhlLWNvbWJpbmF0b3JpYWwtc3RhdGlzdGljLWZpbmRlcn1AYW5j aG9yezc5fQpAY2hhcHRlciBGaW5kU3RhdCAtIHRoZSBDb21iaW5hdG9yaWFsIFN0YXRpc3RpYyBG aW5kZXIuCgoKQGMgVGhpcyBmaWxlIGhhcyBiZWVuIGF1dG9nZW5lcmF0ZWQuCkBhbmNob3J7c2Fn ZS9kYXRhYmFzZXMvZmluZHN0YXQgbW9kdWxlLXNhZ2UgZGF0YWJhc2VzIGZpbmRzdGF0fUBhbmNo b3J7NX0KQGdlaW5kZXggc2FnZS5kYXRhYmFzZXMuZmluZHN0YXQgKG1vZHVsZSkKClRoZSBGaW5k U3RhdCBkYXRhYmFzZSBjYW4gYmUgZm91bmQgYXQgQGluZGljYXRldXJse2h0dHA6Ly93d3cuZmlu ZHN0YXQub3JnfSAuCgpGaXggdGhlIGZvbGxvd2luZyB0aHJlZSBub3Rpb25zOgoKCkBpdGVtaXpl IC0KCkBpdGVtIApBIEBlbXBoe2NvbWJpbmF0b3JpYWwgY29sbGVjdGlvbn0gaXMgYSBzZXQgQG1h dGh7U30gd2l0aCBpbnRlcmVzdGluZyBjb21iaW5hdG9yaWFsIHByb3BlcnRpZXMsCgpAaXRlbSAK YSBAZW1waHtjb21iaW5hdG9yaWFsIG1hcH0gaXMgYSBjb21iaW5hdG9yaWFsbHkgaW50ZXJlc3Rp bmcgbWFwIEBtYXRoe2Y6IFMgXHRvIFMnfSBiZXR3ZWVuIGNvbWJpbmF0b3JpYWwgY29sbGVjdGlv bnMsIGFuZAoKQGl0ZW0gCmEgQGVtcGh7Y29tYmluYXRvcmlhbCBzdGF0aXN0aWN9IGlzIGEgY29t YmluYXRvcmlhbGx5IGludGVyZXN0aW5nIG1hcCBAbWF0aHtzOiBTIFx0byBcWlp9LgpAZW5kIGl0 ZW1pemUKCllvdSBjYW4gdXNlIHRoZSBzYWdlIGludGVyZmFjZSB0byBGaW5kU3RhdCB0bzoKCgpA aXRlbWl6ZSAtCgpAaXRlbSAKaWRlbnRpZnkgYSBjb21iaW5hdG9yaWFsIHN0YXRpc3RpYyBmcm9t IHRoZSB2YWx1ZXMgb24gYSBmZXcgc21hbGwgb2JqZWN0cywKCkBpdGVtIApvYnRhaW4gbW9yZSB0 ZXJtcywgZm9ybXVsYWUsIHJlZmVyZW5jZXMsIGV0Yy4gZm9yIGEgZ2l2ZW4gc3RhdGlzdGljLAoK QGl0ZW0gCmVkaXQgc3RhdGlzdGljcyBhbmQgc3VibWl0IG5ldyBzdGF0aXN0aWNzLgpAZW5kIGl0 ZW1pemUKClRvIGFjY2VzcyB0aGUgZGF0YWJhc2UsIHVzZSBAcmVmezdhLCxmaW5kc3RhdH06CgpA ZXhhbXBsZQpzYWdlOiBmaW5kc3RhdApUaGUgQ29tYmluYXRvcmlhbCBTdGF0aXN0aWMgRmluZGVy IChodHRwOi8vd3d3LmZpbmRzdGF0Lm9yZy8pCkBlbmQgZXhhbXBsZQoKQVVUSE9SUzoKCgpAaXRl bWl6ZSAtCgpAaXRlbSAKTWFydGluIFJ1YmV5ICgyMDE1KTogaW5pdGlhbCB2ZXJzaW9uLgpAZW5k IGl0ZW1pemUKCkBtZW51CiogQSBndWlkZWQgdG91cjo6IAoqIENsYXNzZXMgYW5kIG1ldGhvZHM6 IENsYXNzZXMgYW5kIG1ldGhvZHM8Mz4uIAoKQGVuZCBtZW51CgpAbm9kZSBBIGd1aWRlZCB0b3Vy LENsYXNzZXMgYW5kIG1ldGhvZHM8Mz4sLEZpbmRTdGF0IC0gdGhlIENvbWJpbmF0b3JpYWwgU3Rh dGlzdGljIEZpbmRlcgpAYW5jaG9ye3NhZ2UvZGF0YWJhc2VzL2ZpbmRzdGF0IGEtZ3VpZGVkLXRv dXJ9QGFuY2hvcns3Yn0KQHNlY3Rpb24gQSBndWlkZWQgdG91cgoKCkBtZW51CiogUmV0cmlldmlu ZyBpbmZvcm1hdGlvbjo6IAoqIEVkaXRpbmcgYW5kIHN1Ym1pdHRpbmcgc3RhdGlzdGljczo6IAoK QGVuZCBtZW51CgpAbm9kZSBSZXRyaWV2aW5nIGluZm9ybWF0aW9uLEVkaXRpbmcgYW5kIHN1Ym1p dHRpbmcgc3RhdGlzdGljcywsQSBndWlkZWQgdG91cgpAYW5jaG9ye3NhZ2UvZGF0YWJhc2VzL2Zp bmRzdGF0IHJldHJpZXZpbmctaW5mb3JtYXRpb259QGFuY2hvcns3Y30KQHN1YnNlY3Rpb24gUmV0 cmlldmluZyBpbmZvcm1hdGlvbgoKClRoZSBtb3N0IHN0cmFpZ2h0Zm9yd2FyZCBhcHBsaWNhdGlv biBvZiB0aGUgRmluZFN0YXQgaW50ZXJmYWNlIGlzIHRvCmdhdGhlciBpbmZvcm1hdGlvbiBhYm91 dCBhIGNvbWJpbmF0b3JpYWwgc3RhdGlzdGljLiAgVG8gZG8gdGhpcywgd2UKc3VwcGx5IEByZWZ7 N2EsLGZpbmRzdGF0fSB3aXRoIGEgbGlzdCBvZiBAbWF0aHsob2JqZWN0QGNvbW1he30gdmFsdWUp fQpwYWlycy4gIEZvciBleGFtcGxlOgoKQGV4YW1wbGUKc2FnZTogUE04ID0gUGVyZmVjdE1hdGNo aW5ncyg4KQpzYWdlOiByID0gZmluZHN0YXQoWyhtLCBtLm51bWJlcl9vZl9uZXN0aW5ncygpKSBm b3IgbSBpbiBQTThdKTsgciAgICAgICAgICAgIyBvcHRpb25hbCAtLSBpbnRlcm5ldCxyYW5kb20K MDogKFN0MDAwMDQxOiBUaGUgbnVtYmVyIG9mIG5lc3RpbmdzIG9mIGEgcGVyZmVjdCBtYXRjaGlu Zy4gLCBbXSwgMTA1KQouLi4KQGVuZCBleGFtcGxlCgpUaGUgcmVzdWx0IG9mIHRoaXMgcXVlcnkg aXMgYSBsaXN0IChwcmVzZW50ZWQgYXMgYQpAcmVmezQ5LCxzYWdlLmRhdGFiYXNlcy5vZWlzLkZh bmN5VHVwbGV9KSBvZiB0cmlwbGVzLiAgVGhlIGZpcnN0CmVsZW1lbnQgb2YgZWFjaCB0cmlwbGUg aXMgYSBAcmVmezdkLCxGaW5kU3RhdFN0YXRpc3RpY30gQG1hdGh7czogUyBcdG8gXFpafSwgdGhl IHNlY29uZCBlbGVtZW50IGEgbGlzdCBvZiBAcmVmezdlLCxGaW5kU3RhdE1hcH0ncyBAbWF0aHtm X2k6IFNfaSBcdG8gU19Ae2krMUB9fSwgYW5kIHRoZSB0aGlyZCBlbGVtZW50IGlzIGFuIGludGVn ZXI6CgpAZXhhbXBsZQpzYWdlOiAocywgbGlzdF9mLCBxdWFsaXR5KSA9IHJbMF0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBvcHRpb25hbCAtLSBpbnRlcm5ldApA ZW5kIGV4YW1wbGUKClRoZSBwcmVjaXNlIG1lYW5pbmcgb2YgdGhlIHJlc3VsdCBpcyBhcyBmb2xs b3dzOgoKQHF1b3RhdGlvbgoKVGhlIGNvbXBvc2l0aW9uIEBtYXRoe2ZfbiBcY2lyYyAuLi4gXGNp cmMgZl8yIFxjaXJjIGZfMX0gYXBwbGllZCB0bwp0aGUgb2JqZWN0cyBzZW50IHRvIEZpbmRTdGF0 IGFncmVlcyB3aXRoIEBtYXRoe3F1YWxpdHl9IG1hbnkgQG1hdGh7KG9iamVjdEBjb21tYXt9IHZh bHVlKX0gcGFpcnMgb2YgQG1hdGh7c30gaW4gdGhlIGRhdGFiYXNlLiAgTW9yZW92ZXIsIHRoZXJl IGFyZSBubwpvdGhlciBAbWF0aHsob2JqZWN0QGNvbW1he30gdmFsdWUpfSBwYWlycyBvZiBAbWF0 aHtzfSBzdG9yZWQgaW4gdGhlIGRhdGFiYXNlLAppLmUuLCB0aGVyZSBpcyBubyBkaXNhZ3JlZW1l bnQgb2YgdmFsdWVzLgpAZW5kIHF1b3RhdGlvbgoKUHV0IGRpZmZlcmVudGx5LCBpZiBAbWF0aHtx dWFsaXR5fSBpcyBub3QgdG9vIHNtYWxsIGl0IGlzIGxpa2VseSB0aGF0IHRoZQpzdGF0aXN0aWMg c2VudCB0byBGaW5kU3RhdCBlcXVhbHMgQG1hdGh7cyBcY2lyYyBmX24gXGNpcmMgLi4uIFxjaXJj IGZfMiBcY2lyYyBmXzF9LgoKSW4gdGhlIGNhc2UgYXQgaGFuZCwgdGhlIGxpc3Qgb2YgbWFwcyBp cyBlbXB0eSBhbmQgdGhlIGludGVnZXIKQG1hdGh7cXVhbGl0eX0gZXF1YWxzIHRoZSBudW1iZXIg b2YgQG1hdGh7KG9iamVjdEBjb21tYXt9IHZhbHVlKX0gcGFpcnMgcGFzc2VkIHRvCkZpbmRTdGF0 LiAgVGhpcyBtZWFucywgdGhhdCB0aGUgc2V0IG9mIEBtYXRoeyhvYmplY3RAY29tbWF7fSB2YWx1 ZSl9IHBhaXJzIG9mIHRoZQpzdGF0aXN0aWMgQG1hdGh7c30gYXMgc3RvcmVkIGluIHRoZSBGaW5k U3RhdCBkYXRhYmFzZSBpcyBhIHN1cGVyc2V0IG9mIHRoZQpkYXRhIHNlbnQuICBXZSBjYW4gbm93 IHJldHJpZXZlIHRoZSBkZXNjcmlwdGlvbiBmcm9tIHRoZSBkYXRhYmFzZToKCkBleGFtcGxlCnNh Z2U6IHByaW50KHMuZGVzY3JpcHRpb24oKSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICMgb3B0aW9uYWwgLS0gaW50ZXJuZXQscmFuZG9tClRoZSBudW1iZXIgb2YgbmVz dGluZ3Mgb2YgYSBwZXJmZWN0IG1hdGNoaW5nLgo8QkxBTktMSU5FPgo8QkxBTktMSU5FPgpUaGlz IGlzIHRoZSBudW1iZXIgb2YgcGFpcnMgb2YgZWRnZXMgJCgoYSxiKSwgKGMsZCkpJCBzdWNoIHRo YXQgJGFcbGUgY1xsZSBkXGxlIGIkLiBpLmUuLCB0aGUgZWRnZSAkKGMsZCkkIGlzIG5lc3RlZCBp bnNpZGUgJChhLGIpJC4KQGVuZCBleGFtcGxlCgphbmQgY2hlY2sgdGhlIHJlZmVyZW5jZXM6CgpA ZXhhbXBsZQpzYWdlOiBzLnJlZmVyZW5jZXMoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBvcHRpb25hbCAtLSBpbnRlcm5ldCxyYW5kb20K MDogWzFdIFtbTWF0aFNjaU5ldDoxMjg4ODAyXV0KMTogWzJdIFtbTWF0aFNjaU5ldDoxNDE4NzYz XV0KQGVuZCBleGFtcGxlCgpJZiB5b3UgcHJlZmVyLCB5b3UgY2FuIGxvb2sgYXQgdGhpcyBpbmZv cm1hdGlvbiBhbHNvIGluIHlvdXIgYnJvd3NlcjoKCkBleGFtcGxlCnNhZ2U6IGZpbmRzdGF0KDQx KS5icm93c2UoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAjIG9wdGlvbmFsIC0tIHdlYmJyb3dzZXIKQGVuZCBleGFtcGxlCgpBbm90aGVyIGludGVyZXN0 aW5nIHBvc3NpYmlsaXR5IGlzIHRvIGxvb2sgZm9yIGVxdWlkaXN0cmlidXRlZApzdGF0aXN0aWNz LiAgSW5zdGVhZCBvZiBzdWJtaXR0aW5nIGEgbGlzdCBvZiBwYWlycywgd2UgcGFzcyBhIHBhaXIg b2YKbGlzdHM6CgpAZXhhbXBsZQpzYWdlOiByID0gZmluZHN0YXQoKFBNOCwgW20ubnVtYmVyX29m X25lc3RpbmdzKCkgZm9yIG0gaW4gUE04XSkpOyByICAgICAgICAgIyBvcHRpb25hbCAtLSBpbnRl cm5ldCxyYW5kb20KMDogKFN0MDAwMDQxOiBUaGUgbnVtYmVyIG9mIG5lc3RpbmdzIG9mIGEgcGVy ZmVjdCBtYXRjaGluZy4gLCBbXSwgMTA1KQoxOiAoU3QwMDAwNDI6IFRoZSBudW1iZXIgb2YgY3Jv c3NpbmdzIG9mIGEgcGVyZmVjdCBtYXRjaGluZy4gLCBbXSwgMTA1KQouLi4KQGVuZCBleGFtcGxl CgpUaGlzIHJlc3VsdHMgdGVsbHMgdXMgdGhhdCB0aGUgZGF0YWJhc2UgY29udGFpbnMgYW5vdGhl ciBlbnRyaXkgdGhhdCBpcwplcXVpZGlzdHJpYnV0ZWQgd2l0aCB0aGUgbnVtYmVyIG9mIG5lc3Rp bmdzIG9uIHBlcmZlY3QgbWF0Y2hpbmdzIG9mCmxlbmd0aCBAbWF0aHs4fSwgbmFtZWx5IHRoZSBu dW1iZXIgb2YgY3Jvc3NpbmdzLgoKTGV0IHVzIG5vdyBsb29rIGF0IGEgc2xpZ2h0bHkgbW9yZSBj b21wbGljYXRlZCBleGFtcGxlLCB3aGVyZSB0aGUKc3VibWl0dGVkIHN0YXRpc3RpYyBpcyB0aGUg Y29tcG9zaXRpb24gb2YgYSBzZXF1ZW5jZSBvZiBjb21iaW5hdG9yaWFsCm1hcHMgYW5kIGEgc3Rh dGlzdGljIGtub3duIHRvIEZpbmRTdGF0LiAgV2UgdXNlIHRoZSBvY2Nhc2lvbiB0bwphZHZlcnRp c2UgeWV0IGFub3RoZXIgd2F5IHRvIHBhc3MgdmFsdWVzIHRvIEZpbmRTdGF0OgoKQGV4YW1wbGUK c2FnZTogciA9IGZpbmRzdGF0KFBlcm11dGF0aW9ucyg0KSwgbGFtYmRhIHBpOiBwaS5zYWxpYW5j ZXMoKVswXSk7IHIgICAgICAgICMgb3B0aW9uYWwgLS0gaW50ZXJuZXQscmFuZG9tCjA6IChTdDAw MDA1MTogVGhlIHNpemUgb2YgdGhlIGxlZnQgc3VidHJlZS4gLCBbTXAwMDA2OTogY29tcGxlbWVu dCwgTXAwMDA2MTogdG8gaW5jcmVhc2luZyB0cmVlXSwgMjQpCi4uLgpzYWdlOiAocywgbGlzdF9m LCBxdWFsaXR5KSA9IHJbMF0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIyBvcHRpb25hbCAtLSBpbnRlcm5ldApAZW5kIGV4YW1wbGUKClRvIG9idGFpbiB0aGUgdmFs dWUgb2YgdGhlIHN0YXRpc3RpYyBzZW50IHRvIEZpbmRTdGF0IG9uIGEgZ2l2ZW4Kb2JqZWN0LCBh cHBseSB0aGUgbWFwcyBpbiB0aGUgbGlzdCBpbiB0aGUgZ2l2ZW4gb3JkZXIgdG8gdGhpcyBvYmpl Y3QsCmFuZCBldmFsdWF0ZSB0aGUgc3RhdGlzdGljIG9uIHRoZSByZXN1bHQuICBGb3IgZXhhbXBs ZSwgbGV0IHVzIGNoZWNrCnRoYXQgdGhlIHJlc3VsdCBnaXZlbiBieSBGaW5kU3RhdCBhZ3JlZXMg d2l0aCBvdXIgc3RhdGlzdGljIG9uIHRoZQpmb2xsb3dpbmcgcGVybXV0YXRpb246CgpAZXhhbXBs ZQpzYWdlOiBwaSA9IFBlcm11dGF0aW9uKFszLDEsNCw1LDJdKTsgcGkuc2FsaWFuY2VzKClbMF0K MwpAZW5kIGV4YW1wbGUKCldlIGZpcnN0IGhhdmUgdG8gZmluZCBvdXQsIHdoYXQgdGhlIG1hcHMg YW5kIHRoZSBzdGF0aXN0aWMgYWN0dWFsbHkgZG86CgpAZXhhbXBsZQpzYWdlOiBwcmludChzLmRl c2NyaXB0aW9uKCkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAj IG9wdGlvbmFsIC0tIGludGVybmV0LHJhbmRvbQpUaGUgc2l6ZSBvZiB0aGUgbGVmdCBzdWJ0cmVl LgoKc2FnZTogcHJpbnQocy5jb2RlKCkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICMgb3B0aW9uYWwgLS0gaW50ZXJuZXQscmFuZG9tCmRlZiBzdGF0aXN0 aWMoVCk6CiAgICByZXR1cm4gVFswXS5ub2RlX251bWJlcigpCgpzYWdlOiBwcmludChsaXN0X2Zb MF0uY29kZSgpICsgIlxyXG4iICsgbGlzdF9mWzFdLmNvZGUoKSkgICAgICAgICAgICAgICAjIG9w dGlvbmFsIC0tIGludGVybmV0LHJhbmRvbQpkZWYgY29tcGxlbWVudChlbHQpOgogICAgbiA9IGxl bihlbHQpCiAgICByZXR1cm4gZWx0Ll9fY2xhc3NfXyhlbHQucGFyZW50KCksIG1hcChsYW1iZGEg eDogbiAtIHggKyAxLCBlbHQpICkKPEJMQU5LTElORT4KZGVmIGluY3JlYXNpbmdfdHJlZV9zaGFw ZShlbHQsIGNvbXBhcmU9bWluKToKICAgIHJldHVybiBlbHQuaW5jcmVhc2luZ190cmVlKGNvbXBh cmUpLnNoYXBlKCkKQGVuZCBleGFtcGxlCgpTbywgdGhlIGZvbGxvd2luZyBzaG91bGQgY29pbmNp ZGUgd2l0aCB3aGF0IHdlIHNlbnQgRmluZFN0YXQ6CgpAZXhhbXBsZQpzYWdlOiBwaS5jb21wbGVt ZW50KCkuaW5jcmVhc2luZ190cmVlX3NoYXBlKClbMF0ubm9kZV9udW1iZXIoKQozCkBlbmQgZXhh bXBsZQoKQG5vZGUgRWRpdGluZyBhbmQgc3VibWl0dGluZyBzdGF0aXN0aWNzLCxSZXRyaWV2aW5n IGluZm9ybWF0aW9uLEEgZ3VpZGVkIHRvdXIKQGFuY2hvcntzYWdlL2RhdGFiYXNlcy9maW5kc3Rh dCBlZGl0aW5nLWFuZC1zdWJtaXR0aW5nLXN0YXRpc3RpY3N9QGFuY2hvcns3Zn0KQHN1YnNlY3Rp b24gRWRpdGluZyBhbmQgc3VibWl0dGluZyBzdGF0aXN0aWNzCgoKT2YgY291cnNlLCBvZnRlbiBh IHN0YXRpc3RpYyB3aWxsIG5vdCBiZSBpbiB0aGUgZGF0YWJhc2U6CgpAZXhhbXBsZQpzYWdlOiBm aW5kc3RhdChbKGQsIHJhbmRpbnQoMSwxMDAwKSkgZm9yIGQgaW4gRHlja1dvcmRzKDQpXSkgICAg ICAgICAgICAgICAgIyBvcHRpb25hbCAtLSBpbnRlcm5ldAphIG5ldyBzdGF0aXN0aWMgb24gQ2Mw MDA1OiBEeWNrIHBhdGhzCkBlbmQgZXhhbXBsZQoKSW4gdGhpcyBjYXNlLCBhbmQgaWYgdGhlIHN0 YXRpc3RpYyBtaWdodCBiZSAiaW50ZXJlc3RpbmciLCBwbGVhc2UKY29uc2lkZXIgc3VibWl0dGlu ZyBpdCB0byB0aGUgZGF0YWJhc2UgdXNpbmcKQHJlZns4MCwsRmluZFN0YXRTdGF0aXN0aWMuc3Vi bWl0KCl9LgoKQWxzbywgeW91IG1heSBub3RpY2Ugb21pc3Npb25zLCB0eXBvcyBvciBldmVuIG1p c3Rha2VzIGluIHRoZQpkZXNjcmlwdGlvbiwgdGhlIGNvZGUgYW5kIHRoZSByZWZlcmVuY2VzLiAg SW4gdGhpcyBjYXNlLCBzaW1wbHkKcmVwbGFjZSB0aGUgdmFsdWUgYnkgdXNpbmcgQHJlZns4MSws RmluZFN0YXRTdGF0aXN0aWMuc2V0X2Rlc2NyaXB0aW9uKCl9LApAcmVmezgyLCxGaW5kU3RhdFN0 YXRpc3RpYy5zZXRfY29kZSgpfSBvcgpAcmVmezgzLCxGaW5kU3RhdFN0YXRpc3RpYy5zZXRfcmVm ZXJlbmNlcygpfSwgYW5kIHRoZW4KQHJlZns4MCwsRmluZFN0YXRTdGF0aXN0aWMuc3VibWl0KCl9 IHlvdXIgY2hhbmdlcyBmb3IgcmV2aWV3IGJ5IHRoZQpGaW5kU3RhdCB0ZWFtLgoKQG5vZGUgQ2xh c3NlcyBhbmQgbWV0aG9kczwzPiwsQSBndWlkZWQgdG91cixGaW5kU3RhdCAtIHRoZSBDb21iaW5h dG9yaWFsIFN0YXRpc3RpYyBGaW5kZXIKQGFuY2hvcntzYWdlL2RhdGFiYXNlcy9maW5kc3RhdCBj bGFzc2VzLWFuZC1tZXRob2RzfUBhbmNob3J7ODR9CkBzZWN0aW9uIENsYXNzZXMgYW5kIG1ldGhv ZHMKCgpAZ2VpbmRleCBGaW5kU3RhdCAoY2xhc3MgaW4gc2FnZS5kYXRhYmFzZXMuZmluZHN0YXQp CkBhbmNob3J7c2FnZS9kYXRhYmFzZXMvZmluZHN0YXQgc2FnZSBkYXRhYmFzZXMgZmluZHN0YXQg RmluZFN0YXR9QGFuY2hvcns3YX0KQGRlZmZuIHtDbGFzc30gc2FnZS5kYXRhYmFzZXMuZmluZHN0 YXQuRmluZFN0YXQKCkJhc2VzOiBzYWdlLnN0cnVjdHVyZS5zYWdlX29iamVjdC5TYWdlT2JqZWN0 QGZvb3Rub3Rley4uLy4uLy4uLy4uLy4uLy4uL2h0bWwvZW4vcmVmZXJlbmNlL3N0cnVjdHVyZS9z YWdlL3N0cnVjdHVyZS9zYWdlX29iamVjdC5odG1sI3NhZ2Uuc3RydWN0dXJlLnNhZ2Vfb2JqZWN0 LlNhZ2VPYmplY3R9CgpUaGUgQ29tYmluYXRvcmlhbCBTdGF0aXN0aWMgRmluZGVyLgoKQHJlZns3 YSwsRmluZFN0YXR9IGlzIGEgY2xhc3MgcmVwcmVzZW50aW5nIHJlc3VsdHMgb2YgcXVlcmllcyB0 bwp0aGUgRmluZFN0YXQgZGF0YWJhc2UuICBUaGlzIGNsYXNzIGlzIGFsc28gdGhlIGVudHJ5IHBv aW50IHRvCmVkaXQgc3RhdGlzdGljcyBhbmQgbmV3IHN1Ym1pc3Npb25zLiAgVXNlIHRoZSBzaG9y dGhhbmQKQHJlZns3YSwsZmluZHN0YXR9IHRvIGNhbGwgaXQuCgpJTlBVVDoKCk9uZSBvZiB0aGUg Zm9sbG93aW5nOgoKCkBpdGVtaXplIC0KCkBpdGVtIAphbiBpbnRlZ2VyIG9yIGEgc3RyaW5nIHJl cHJlc2VudGluZyBhIHZhbGlkIEZpbmRTdGF0IGlkZW50aWZpZXIKKGUuZy4gNDUgb3IgJ1N0MDAw MDQ1JykuICBUaGUga2V5d29yZCBhcmd1bWVudHMgQGNvZGV7ZGVwdGh9IGFuZApAY29kZXttYXhf dmFsdWVzfSBhcmUgaWdub3JlZC4KCkBpdGVtIAphIGxpc3Qgb2YgcGFpcnMgb2YgdGhlIGZvcm0g KG9iamVjdCwgdmFsdWUpLCBvciBhIGRpY3Rpb25hcnkKZnJvbSBzYWdlIG9iamVjdHMgdG8gaW50 ZWdlciB2YWx1ZXMuICBUaGUga2V5d29yZCBhcmd1bWVudHMKQGNvZGV7ZGVwdGh9IGFuZCBAY29k ZXttYXhfdmFsdWVzfSBhcmUgcGFzc2VkIHRvIHRoZSBmaW5kZXIuCgpAaXRlbSAKYSBsaXN0IG9m IHBhaXJzIG9mIHRoZSBmb3JtIChsaXN0IG9mIG9iamVjdHMsIGxpc3Qgb2YgdmFsdWVzKSwKb3Ig YSBzaW5nbGUgcGFpciBvZiB0aGUgZm9ybSAobGlzdCBvZiBvYmplY3RzLCBsaXN0IG9mIHZhbHVl cykuCkluIGVhY2ggcGFpciB0aGVyZSBzaG91bGQgYmUgYXMgbWFueSBvYmplY3RzIGFzIHZhbHVl cy4gIFRoZQprZXl3b3JkIGFyZ3VtZW50cyBAY29kZXtkZXB0aH0gYW5kIEBjb2Rle21heF92YWx1 ZXN9IGFyZSBwYXNzZWQgdG8KdGhlIGZpbmRlci4KCkBpdGVtIAphIGNvbGxlY3Rpb24gYW5kIGEg bGlzdCBvZiBwYWlycyBvZiB0aGUgZm9ybSAoc3RyaW5nLCB2YWx1ZSksCm9yIGEgZGljdGlvbmFy eSBmcm9tIHN0cmluZ3MgdG8gaW50ZWdlciB2YWx1ZXMuICBUaGUga2V5d29yZAphcmd1bWVudHMg QGNvZGV7ZGVwdGh9IGFuZCBAY29kZXttYXhfdmFsdWVzfSBhcmUgcGFzc2VkIHRvIHRoZQpmaW5k ZXIuICBUaGlzIHNob3VsZCBvbmx5IGJlIHVzZWQgaWYgdGhlIGNvbGxlY3Rpb24gaXMgbm90IHll dApzdXBwb3J0ZWQuCgpAaXRlbSAKYSBjb2xsZWN0aW9uIGFuZCBhIGxpc3Qgb2YgcGFpcnMgb2Yg dGhlIGZvcm0gKGxpc3Qgb2Ygc3RyaW5ncywKbGlzdCBvZiB2YWx1ZXMpLCBvciBhIHNpbmdsZSBw YWlyIG9mIHRoZSBmb3JtIChsaXN0IG9mIHN0cmluZ3MsCmxpc3Qgb2YgdmFsdWVzKS4gIEluIGVh Y2ggcGFpciB0aGVyZSBzaG91bGQgYmUgYXMgbWFueSBzdHJpbmdzCmFzIHZhbHVlcy4gIFRoZSBr ZXl3b3JkIGFyZ3VtZW50cyBAY29kZXtkZXB0aH0gYW5kIEBjb2Rle21heF92YWx1ZXN9CmFyZSBw YXNzZWQgdG8gdGhlIGZpbmRlci4gIFRoaXMgc2hvdWxkIG9ubHkgYmUgdXNlZCBpZiB0aGUKY29s bGVjdGlvbiBpcyBub3QgeWV0IHN1cHBvcnRlZC4KCkBpdGVtIAphIGNvbGxlY3Rpb24gYW5kIGEg Y2FsbGFibGUuICBUaGUgY2FsbGFibGUgaXMgdXNlZCB0byBnZW5lcmF0ZQpAY29kZXttYXhfdmFs dWVzfSAob2JqZWN0LCB2YWx1ZSkgcGFpcnMuICBUaGUgbnVtYmVyIG9mIHRlcm1zCmdlbmVyYXRl ZCBtYXkgYWxzbyBiZSBjb250cm9sbGVkIGJ5IHBhc3NpbmcgYW4gaXRlcmFibGUKY29sbGVjdGlv biwgc3VjaCBhcyBAY29kZXtQZXJtdXRhdGlvbnMoMyl9LiAgVGhlIGtleXdvcmQgYXJndW1lbnRz CkBjb2Rle2RlcHRofSBhbmQgQGNvZGV7bWF4X3ZhbHVlc30gYXJlIHBhc3NlZCB0byB0aGUgZmlu ZGVyLgpAZW5kIGl0ZW1pemUKCk9VVFBVVDoKCkFuIGluc3RhbmNlIG9mIGEgQHJlZns3ZCwsRmlu ZFN0YXRTdGF0aXN0aWN9LCByZXByZXNlbnRlZCBieQoKCkBpdGVtaXplIC0KCkBpdGVtIAp0aGUg RmluZFN0YXQgaWRlbnRpZmllciB0b2dldGhlciB3aXRoIGl0cyBuYW1lLCBvcgoKQGl0ZW0gCmEg bGlzdCBvZiB0cmlwbGVzLCBlYWNoIGNvbnNpc3Rpbmcgb2YKCkBxdW90YXRpb24KCgpAaXRlbWl6 ZSAtCgpAaXRlbSAKdGhlIHN0YXRpc3RpYwoKQGl0ZW0gCmEgbGlzdCBvZiBzdHJpbmdzIG5hbWlu ZyBjZXJ0YWluIG1hcHMKCkBpdGVtIAphIG51bWJlciB3aGljaCBzYXlzIGhvdyBtYW55IG9mIHRo ZSB2YWx1ZXMgc3VibWl0dGVkIGFncmVlCndpdGggdGhlIHZhbHVlcyBpbiB0aGUgZGF0YWJhc2Us IHdoZW4gYXBwbHlpbmcgdGhlIG1hcHMgaW4KdGhlIGdpdmVuIG9yZGVyIHRvIHRoZSBvYmplY3Qg YW5kIHRoZW4gY29tcHV0aW5nIHRoZQpzdGF0aXN0aWMgb24gdGhlIHJlc3VsdC4KQGVuZCBpdGVt aXplCkBlbmQgcXVvdGF0aW9uCkBlbmQgaXRlbWl6ZQoKRVhBTVBMRVM6CgpBIHBhcnRpY3VsYXIg c3RhdGlzdGljIGNhbiBiZSByZXRyaWV2ZWQgYnkgaXRzIFN0LWlkZW50aWZpZXIgb3IKbnVtYmVy OgoKQGV4YW1wbGUKc2FnZTogZmluZHN0YXQoJ1N0MDAwMDQxJykgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBvcHRpb25hbCAtLSBpbnRlcm5ldCxyYW5kb20K U3QwMDAwNDE6IFRoZSBudW1iZXIgb2YgbmVzdGluZ3Mgb2YgYSBwZXJmZWN0IG1hdGNoaW5nLgoK c2FnZTogZmluZHN0YXQoNTEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIyBvcHRpb25hbCAtLSBpbnRlcm5ldCxyYW5kb20KU3QwMDAwNTE6IFRo ZSBzaXplIG9mIHRoZSBsZWZ0IHN1YnRyZWUuCkBlbmQgZXhhbXBsZQoKVGhlIGRhdGFiYXNlIGNh biBiZSBzZWFyY2hlZCBieSBwcm92aWRpbmcgYSBsaXN0IG9mIHBhaXJzOgoKQGV4YW1wbGUKc2Fn ZTogcSA9IGZpbmRzdGF0KFsocGksIHBpLmxlbmd0aCgpKSBmb3IgcGkgaW4gUGVybXV0YXRpb25z KDQpXSk7IHEgICAgIyBvcHRpb25hbCAtLSBpbnRlcm5ldCxyYW5kb20KMDogKFN0MDAwMDE4OiBU aGUgW1svUGVybXV0YXRpb25zL0ludmVyc2lvbnN8bnVtYmVyIG9mIGludmVyc2lvbnNdXSBvZiBh IHBlcm11dGF0aW9uLiwgW10sIDI0KQoxOiAoU3QwMDAwMDQ6IFRoZSBbWy9QZXJtdXRhdGlvbnMv RGVzY2VudHMtTWFqb3J8bWFqb3IgaW5kZXhdXSBvZiBhIHBlcm11dGF0aW9uLiwgW01wMDAwNjI6 IGludmVyc2lvbi1udW1iZXIgdG8gbWFqb3ItaW5kZXggYmlqZWN0aW9uXSwgMjQpCi4uLgpAZW5k IGV4YW1wbGUKCm9yIGEgZGljdGlvbmFyeToKCkBleGFtcGxlCnNhZ2U6IHAgPSBmaW5kc3RhdChA e3BpOiBwaS5sZW5ndGgoKSBmb3IgcGkgaW4gUGVybXV0YXRpb25zKDQpQH0pOyBwICAgICAgIyBv cHRpb25hbCAtLSBpbnRlcm5ldCxyYW5kb20KMDogKFN0MDAwMDE4OiBUaGUgW1svUGVybXV0YXRp b25zL0ludmVyc2lvbnN8bnVtYmVyIG9mIGludmVyc2lvbnNdXSBvZiBhIHBlcm11dGF0aW9uLiwg W10sIDI0KQoxOiAoU3QwMDAwMDQ6IFRoZSBbWy9QZXJtdXRhdGlvbnMvRGVzY2VudHMtTWFqb3J8 bWFqb3IgaW5kZXhdXSBvZiBhIHBlcm11dGF0aW9uLiwgW01wMDAwNjI6IGludmVyc2lvbi1udW1i ZXIgdG8gbWFqb3ItaW5kZXggYmlqZWN0aW9uXSwgMjQpCi4uLgpAZW5kIGV4YW1wbGUKCk5vdGUg aG93ZXZlciwgdGhhdCB0aGUgcmVzdWx0cyBvZiB0aGVzZSB0d28gcXVlcmllcyBhcmUgbm90Cm5l Y2Vzc2FyaWx5IHRoZSBzYW1lLCBiZWNhdXNlIHdlIGNvbXBhcmUgcXVlcmllcyBieSB0aGUgZGF0 YQpzZW50LCBhbmQgdGhlIG9yZGVyaW5nIG9mIHRoZSBkYXRhIG1pZ2h0IGJlIGRpZmZlcmVudDoK CkBleGFtcGxlCnNhZ2U6IHAgPT0gcSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICMgb3B0aW9uYWwgLS0gaW50ZXJuZXQKRmFsc2UKQGVu ZCBleGFtcGxlCgpBbm90aGVyIHBvc3NpYmlsaXR5IGlzIHRvIHNlbmQgYSBjb2xsZWN0aW9uIGFu ZCBhIGZ1bmN0aW9uLiAgSW4KdGhpcyBjYXNlLCB0aGUgZnVuY3Rpb24gaXMgYXBwbGllZCB0byB0 aGUgZmlyc3QgZmV3IG9iamVjdHMgb2YKdGhlIGNvbGxlY3Rpb246CgpAZXhhbXBsZQpzYWdlOiBm aW5kc3RhdCgiUGVybXV0YXRpb25zIiwgbGFtYmRhIHBpOiBwaS5sZW5ndGgoKSkgICAgICAgICAg ICAgICAgICAjIG9wdGlvbmFsIC0tIGludGVybmV0LHJhbmRvbQowOiAoU3QwMDAwMTg6IFRoZSBb Wy9QZXJtdXRhdGlvbnMvSW52ZXJzaW9uc3xudW1iZXIgb2YgaW52ZXJzaW9uc11dIG9mIGEgcGVy bXV0YXRpb24uLCBbXSwgMjAwKQouLi4KQGVuZCBleGFtcGxlCgpUbyBzZWFyY2ggZm9yIGEgZGlz dHJpYnV0aW9uLCBzZW5kIGEgbGlzdCBvZiBsaXN0cywgb3IgYSBzaW5nbGUgcGFpcjoKCkBleGFt cGxlCnNhZ2U6IFM0ID0gUGVybXV0YXRpb25zKDQpOyBmaW5kc3RhdCgoUzQsIFtwaS5sZW5ndGgo KSBmb3IgcGkgaW4gUzRdKSkgICMgb3B0aW9uYWwgLS0gaW50ZXJuZXQscmFuZG9tCjA6IChTdDAw MDAwNDogVGhlIFtbL1Blcm11dGF0aW9ucy9EZXNjZW50cy1NYWpvcnxtYWpvciBpbmRleF1dIG9m IGEgcGVybXV0YXRpb24uLCBbXSwgMjQpCjE6IChTdDAwMDAxODogVGhlIFtbL1Blcm11dGF0aW9u cy9JbnZlcnNpb25zfG51bWJlciBvZiBpbnZlcnNpb25zXV0gb2YgYSBwZXJtdXRhdGlvbi4sIFtd LCAyNCkKLi4uCkBlbmQgZXhhbXBsZQoKTm90ZSB0aGF0IHRoZXJlIGlzIGEgbGltaXQsIEBjb2Rl e0ZJTkRTVEFUX01BWF9ERVBUSH0sIG9uIHRoZSBudW1iZXIKb2YgZWxlbWVudHMgdGhhdCBtYXkg YmUgc3VibWl0dGVkIHRvIEZpbmRTdGF0LCB3aGljaCBpcyBjdXJyZW50bHkKMjAwLiAgVGhlcmVm b3JlLCB0aGUgaW50ZXJmYWNlIHRyaWVzIHRvIHRydW5jYXRlIHF1ZXJpZXMKYXBwcm9wcmlhdGVs eSwgYnV0IHRoaXMgbWF5IGJlIGltcG9zc2libGUsIGVzcGVjaWFsbHkgd2l0aApkaXN0cmlidXRp b24gc2VhcmNoZXM6CgpAZXhhbXBsZQpzYWdlOiBTNiA9IFBlcm11dGF0aW9ucyg2KTsgUzYuY2Fy ZGluYWxpdHkoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIG9wdGlvbmFsIC0tIGludGVy bmV0CjcyMApzYWdlOiBmaW5kc3RhdCgoUzYsIFsxIGZvciBhIGluIFM2XSkpICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAjIG9wdGlvbmFsIC0tIGludGVybmV0ClRyYWNlYmFjayAo bW9zdCByZWNlbnQgY2FsbCBsYXN0KToKLi4uClZhbHVlRXJyb3I6IEFmdGVyIGRpc2NhcmRpbmcg ZWxlbWVudHMgbm90IGluIHRoZSByYW5nZSwgdG9vIGZldyAoPTApIHZhbHVlcyByZW1haW5lZCB0 byBzZW5kIHRvIEZpbmRTdGF0LgpAZW5kIGV4YW1wbGUKCkBnZWluZGV4IGJyb3dzZSgpIChzYWdl LmRhdGFiYXNlcy5maW5kc3RhdC5GaW5kU3RhdCBtZXRob2QpCkBhbmNob3J7c2FnZS9kYXRhYmFz ZXMvZmluZHN0YXQgc2FnZSBkYXRhYmFzZXMgZmluZHN0YXQgRmluZFN0YXQgYnJvd3NlfUBhbmNo b3J7ODV9CkBkZWZmbiB7TWV0aG9kfSBicm93c2UgKCkKCk9wZW4gdGhlIEZpbmRTdGF0IHdlYiBw YWdlIGluIGEgYnJvd3Nlci4KCkVYQU1QTEVTOgoKQGV4YW1wbGUKc2FnZTogZmluZHN0YXQuYnJv d3NlKCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIG9wdGlv bmFsIC0tIHdlYmJyb3dzZXIKQGVuZCBleGFtcGxlCkBlbmQgZGVmZm4KCkBnZWluZGV4IGxvZ2lu KCkgKHNhZ2UuZGF0YWJhc2VzLmZpbmRzdGF0LkZpbmRTdGF0IG1ldGhvZCkKQGFuY2hvcntzYWdl L2RhdGFiYXNlcy9maW5kc3RhdCBzYWdlIGRhdGFiYXNlcyBmaW5kc3RhdCBGaW5kU3RhdCBsb2dp bn1AYW5jaG9yezg2fQpAZGVmZm4ge01ldGhvZH0gbG9naW4gKCkKCk9wZW4gdGhlIEZpbmRTdGF0 IGxvZ2luIHBhZ2UgaW4gYSBicm93c2VyLgoKRVhBTVBMRVM6CgpAZXhhbXBsZQpzYWdlOiBmaW5k c3RhdC5sb2dpbigpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICMgb3B0aW9uYWwgLS0gd2ViYnJvd3NlcgpAZW5kIGV4YW1wbGUKQGVuZCBkZWZmbgoKQGdlaW5k ZXggc2V0X3VzZXIoKSAoc2FnZS5kYXRhYmFzZXMuZmluZHN0YXQuRmluZFN0YXQgbWV0aG9kKQpA YW5jaG9ye3NhZ2UvZGF0YWJhc2VzL2ZpbmRzdGF0IHNhZ2UgZGF0YWJhc2VzIGZpbmRzdGF0IEZp bmRTdGF0IHNldF91c2VyfUBhbmNob3J7ODd9CkBkZWZmbiB7TWV0aG9kfSBzZXRfdXNlciAobmFt ZT1Ob25lLCBlbWFpbD1Ob25lKQoKU2V0IHRoZSB1c2VyIGZvciB0aGlzIHNlc3Npb24uCgpJTlBV VDoKCgpAaXRlbWl6ZSAtCgpAaXRlbSAKQGNvZGV7bmFtZX0gLS0gdGhlIG5hbWUgb2YgdGhlIHVz ZXIuCgpAaXRlbSAKQGNvZGV7ZW1haWx9IC0tIGFuIGVtYWlsIGFkZHJlc3Mgb2YgdGhlIHVzZXIu CkBlbmQgaXRlbWl6ZQoKVGhpcyBpbmZvcm1hdGlvbiBpcyB1c2VkIHdoZW4gc3VibWl0dGluZyBh IHN0YXRpc3RpYyB3aXRoCkByZWZ7ODAsLEZpbmRTdGF0U3RhdGlzdGljLnN1Ym1pdCgpfS4KCkVY QU1QTEVTOgoKQGV4YW1wbGUKc2FnZTogZmluZHN0YXQuc2V0X3VzZXIobmFtZT0iQW5vbnltb3Vz IiwgZW1haWw9ImludmFsaWRAQG9yZyIpCkBlbmQgZXhhbXBsZQoKQGNhcnRvdWNoZQpAcXVvdGF0 aW9uIE5vdGUgCkl0IGlzIHVzdWFsbHkgbW9yZSBjb252ZW5pZW50IHRvIGxvZ2luIGludG8gdGhl IEZpbmRTdGF0CndlYiBwYWdlIHVzaW5nIHRoZSBAcmVmezg2LCxsb2dpbigpfSBtZXRob2QuCkBl bmQgcXVvdGF0aW9uCkBlbmQgY2FydG91Y2hlCkBlbmQgZGVmZm4KQGVuZCBkZWZmbgoKQGdlaW5k ZXggRmluZFN0YXRDb2xsZWN0aW9uIChjbGFzcyBpbiBzYWdlLmRhdGFiYXNlcy5maW5kc3RhdCkK QGFuY2hvcntzYWdlL2RhdGFiYXNlcy9maW5kc3RhdCBzYWdlIGRhdGFiYXNlcyBmaW5kc3RhdCBG aW5kU3RhdENvbGxlY3Rpb259QGFuY2hvcns4OH0KQGRlZmZuIHtDbGFzc30gc2FnZS5kYXRhYmFz ZXMuZmluZHN0YXQuRmluZFN0YXRDb2xsZWN0aW9uIChwYXJlbnQsIGlkLCBjLCBzYWdlY29uc3Ry dWN0b3Jfb3ZlcnJpZGRlbikKCkJhc2VzOiBzYWdlLnN0cnVjdHVyZS5lbGVtZW50LkVsZW1lbnRA Zm9vdG5vdGV7Li4vLi4vLi4vLi4vLi4vLi4vaHRtbC9lbi9yZWZlcmVuY2Uvc3RydWN0dXJlL3Nh Z2Uvc3RydWN0dXJlL2VsZW1lbnQuaHRtbCNzYWdlLnN0cnVjdHVyZS5lbGVtZW50LkVsZW1lbnR9 CgpBIEZpbmRTdGF0IGNvbGxlY3Rpb24uCgpAcmVmezg4LCxGaW5kU3RhdENvbGxlY3Rpb259IGlz IGEgY2xhc3MgcmVwcmVzZW50aW5nIGEKY29tYmluYXRvcmlhbCBjb2xsZWN0aW9uIGF2YWlsYWJs ZSBpbiB0aGUgRmluZFN0YXQgZGF0YWJhc2UuCgpJdHMgbWFpbiB1c2UgaXMgdG8gYWxsb3cgZWFz eSBzcGVjaWZpY2F0aW9uIG9mIHRoZSBjb21iaW5hdG9yaWFsCmNvbGxlY3Rpb24gd2hlbiB1c2lu ZyBAcmVmezdhLCxmaW5kc3RhdH0uICBJdCBhbHNvCnByb3ZpZGVzIG1ldGhvZHMgdG8gcXVpY2ts eSBhY2Nlc3MgaXRzIEZpbmRTdGF0IHdlYiBwYWdlCihAcmVmezg5LCxicm93c2UoKX0pLCBjaGVj ayB3aGV0aGVyIGEgcGFydGljdWxhciBlbGVtZW50IGlzIGFjdHVhbGx5CmluIHRoZSByYW5nZSBj b25zaWRlcmVkIGJ5IEZpbmRTdGF0IChAcmVmezhhLCxpbl9yYW5nZSgpfSksIGV0Yy4KCklOUFVU OgoKT25lIG9mIHRoZSBmb2xsb3dpbmc6CgoKQGl0ZW1pemUgLQoKQGl0ZW0gCmEgc3RyaW5nIGVn LiAnRHljayBwYXRocycgb3IgJ0R5Y2tQYXRocycsIGNhc2UtaW5zZW5zaXRpdmUsIG9yCgpAaXRl bSAKYW4gaW50ZWdlciBkZXNpZ25hdGluZyB0aGUgRmluZFN0YXQgaWQgb2YgdGhlIGNvbGxlY3Rp b24sIG9yCgpAaXRlbSAKYSBzYWdlIG9iamVjdCBiZWxvbmdpbmcgdG8gYSBjb2xsZWN0aW9uLCBv cgoKQGl0ZW0gCmFuIGl0ZXJhYmxlIHByb2R1Y2luZyBhIHNhZ2Ugb2JqZWN0IGJlbG9uZ2luZyB0 byBhIGNvbGxlY3Rpb24uCkBlbmQgaXRlbWl6ZQoKRVhBTVBMRVM6CgpAZXhhbXBsZQpzYWdlOiBm cm9tIHNhZ2UuZGF0YWJhc2VzLmZpbmRzdGF0IGltcG9ydCBGaW5kU3RhdENvbGxlY3Rpb24Kc2Fn ZTogRmluZFN0YXRDb2xsZWN0aW9uKCJEeWNrIHBhdGhzIikgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIyBvcHRpb25hbCAtLSBpbnRlcm5ldApDYzAwMDU6IER5Y2sgcGF0aHMKCnNh Z2U6IEZpbmRTdGF0Q29sbGVjdGlvbig1KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICMgb3B0aW9uYWwgLS0gaW50ZXJuZXQKQ2MwMDA1OiBEeWNrIHBhdGhzCgpz YWdlOiBGaW5kU3RhdENvbGxlY3Rpb24oRHlja1dvcmQoWzEsMCwxLDBdKSkgICAgICAgICAgICAg ICAgICAgICAgICAgICAjIG9wdGlvbmFsIC0tIGludGVybmV0CkNjMDAwNTogRHljayBwYXRocwoK c2FnZTogRmluZFN0YXRDb2xsZWN0aW9uKER5Y2tXb3JkcygyKSkgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIyBvcHRpb25hbCAtLSBpbnRlcm5ldApDYzAwMDU6IER5Y2sgcGF0aHMK QGVuZCBleGFtcGxlCgpTRUVBTFNPOgoKQHJlZns4YiwsRmluZFN0YXRDb2xsZWN0aW9uc30KCkBn ZWluZGV4IGJyb3dzZSgpIChzYWdlLmRhdGFiYXNlcy5maW5kc3RhdC5GaW5kU3RhdENvbGxlY3Rp b24gbWV0aG9kKQpAYW5jaG9ye3NhZ2UvZGF0YWJhc2VzL2ZpbmRzdGF0IHNhZ2UgZGF0YWJhc2Vz IGZpbmRzdGF0IEZpbmRTdGF0Q29sbGVjdGlvbiBicm93c2V9QGFuY2hvcns4OX0KQGRlZmZuIHtN ZXRob2R9IGJyb3dzZSAoKQoKT3BlbiB0aGUgRmluZFN0YXQgd2ViIHBhZ2Ugb2YgdGhlIGNvbGxl Y3Rpb24gaW4gYSBicm93c2VyLgoKRVhBTVBMRVM6CgpAZXhhbXBsZQpzYWdlOiBmcm9tIHNhZ2Uu ZGF0YWJhc2VzLmZpbmRzdGF0IGltcG9ydCBGaW5kU3RhdENvbGxlY3Rpb24Kc2FnZTogRmluZFN0 YXRDb2xsZWN0aW9uKCJQZXJtdXRhdGlvbnMiKS5icm93c2UoKSAgICAgICAgICAgICAgICAgICAj IG9wdGlvbmFsIC0tIHdlYmJyb3dzZXIKQGVuZCBleGFtcGxlCkBlbmQgZGVmZm4KCkBnZWluZGV4 IGZpcnN0X3Rlcm1zKCkgKHNhZ2UuZGF0YWJhc2VzLmZpbmRzdGF0LkZpbmRTdGF0Q29sbGVjdGlv biBtZXRob2QpCkBhbmNob3J7c2FnZS9kYXRhYmFzZXMvZmluZHN0YXQgc2FnZSBkYXRhYmFzZXMg ZmluZHN0YXQgRmluZFN0YXRDb2xsZWN0aW9uIGZpcnN0X3Rlcm1zfUBhbmNob3J7OGN9CkBkZWZm biB7TWV0aG9kfSBmaXJzdF90ZXJtcyAoc3RhdGlzdGljLCBtYXhfdmFsdWVzPTEyMDApCgpDb21w dXRlIHRoZSBmaXJzdCBmZXcgdGVybXMgb2YgdGhlIGdpdmVuIHN0YXRpc3RpYy4KCklOUFVUOgoK CkBpdGVtaXplIC0KCkBpdGVtIApAY29kZXtzdGF0aXN0aWN9IC0tIGEgY2FsbGFibGUuCgpAaXRl bSAKQGNvZGV7bWF4X3ZhbHVlc30gLS0gdGhlIG51bWJlciBvZiB0ZXJtcyB0byBjb21wdXRlIGF0 IG1vc3QuCkBlbmQgaXRlbWl6ZQoKT1VUUFVUOgoKQSBsaXN0IG9mIHBhaXJzIG9mIHRoZSBmb3Jt IChvYmplY3QsIHZhbHVlKS4KCkVYQU1QTEVTOgoKQGV4YW1wbGUKc2FnZTogZnJvbSBzYWdlLmRh dGFiYXNlcy5maW5kc3RhdCBpbXBvcnQgRmluZFN0YXRDb2xsZWN0aW9uCnNhZ2U6IGMgPSBGaW5k U3RhdENvbGxlY3Rpb24oIkdlbGZhbmRUc2V0bGluUGF0dGVybnMiKSAgICAgICAgICAgICAgIyBv cHRpb25hbCAtLSBpbnRlcm5ldApzYWdlOiBjLmZpcnN0X3Rlcm1zKGxhbWJkYSB4OiAxLCBtYXhf dmFsdWVzPTEwKSAgICAgICAgICAgICAgICAgICAgICMgb3B0aW9uYWwgLS0gaW50ZXJuZXQscmFu ZG9tClsoW1swXV0sIDEpLAogKFtbMV1dLCAxKSwKIChbWzJdXSwgMSksCiAoW1szXV0sIDEpLAog KFtbMCwgMF0sIFswXV0sIDEpLAogKFtbMSwgMF0sIFswXV0sIDEpLAogKFtbMSwgMF0sIFsxXV0s IDEpLAogKFtbMSwgMV0sIFsxXV0sIDEpLAogKFtbMiwgMF0sIFswXV0sIDEpLAogKFtbMiwgMF0s IFsxXV0sIDEpXQpAZW5kIGV4YW1wbGUKQGVuZCBkZWZmbgoKQGdlaW5kZXggZnJvbV9zdHJpbmco KSAoc2FnZS5kYXRhYmFzZXMuZmluZHN0YXQuRmluZFN0YXRDb2xsZWN0aW9uIG1ldGhvZCkKQGFu Y2hvcntzYWdlL2RhdGFiYXNlcy9maW5kc3RhdCBzYWdlIGRhdGFiYXNlcyBmaW5kc3RhdCBGaW5k U3RhdENvbGxlY3Rpb24gZnJvbV9zdHJpbmd9QGFuY2hvcns4ZH0KQGRlZmZuIHtNZXRob2R9IGZy b21fc3RyaW5nICgpCgpSZXR1cm4gYSBmdW5jdGlvbiB0aGF0IHJldHVybnMgdGhlIG9iamVjdCBn aXZlbiB0aGUgRmluZFN0YXQKbm9ybWFsIHJlcHJlc2VudGF0aW9uLgoKT1VUUFVUOgoKVGhlIGZ1 bmN0aW9uIHRoYXQgcHJvZHVjZXMgdGhlIHNhZ2Ugb2JqZWN0IGdpdmVuIGl0cyBGaW5kU3RhdApu b3JtYWwgcmVwcmVzZW50YXRpb24gYXMgYSBzdHJpbmcuCgpFWEFNUExFUzoKCkBleGFtcGxlCnNh Z2U6IGZyb20gc2FnZS5kYXRhYmFzZXMuZmluZHN0YXQgaW1wb3J0IEZpbmRTdGF0Q29sbGVjdGlv bgpzYWdlOiBjID0gRmluZFN0YXRDb2xsZWN0aW9uKCJQb3NldHMiKSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICMgb3B0aW9uYWwgLS0gaW50ZXJuZXQKc2FnZTogcCA9IGMuZnJvbV9zdHJp bmcoKSgnKFsoMCwgMiksICgyLCAxKV0sIDMpJykgICAgICAgICAgICAgICAgICAjIG9wdGlvbmFs IC0tIGludGVybmV0CnNhZ2U6IHAuY292ZXJfcmVsYXRpb25zKCkgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIyBvcHRpb25hbCAtLSBpbnRlcm5ldApbWzAsIDJdLCBb MiwgMV1dCgpzYWdlOiBjID0gRmluZFN0YXRDb2xsZWN0aW9uKCJCaW5hcnkgV29yZHMiKSAgICAg ICAgICAgICAgICAgICAgICAgICMgb3B0aW9uYWwgLS0gaW50ZXJuZXQKc2FnZTogdyA9IGMuZnJv bV9zdHJpbmcoKSgnMDEwMTAxJykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIG9w dGlvbmFsIC0tIGludGVybmV0CnNhZ2U6IHcgaW4gYy5fc2FnZWNvbnN0cnVjdG9yKDYpICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBvcHRpb25hbCAtLSBpbnRlcm5ldApUcnVl CkBlbmQgZXhhbXBsZQpAZW5kIGRlZmZuCgpAZ2VpbmRleCBpZCgpIChzYWdlLmRhdGFiYXNlcy5m aW5kc3RhdC5GaW5kU3RhdENvbGxlY3Rpb24gbWV0aG9kKQpAYW5jaG9ye3NhZ2UvZGF0YWJhc2Vz L2ZpbmRzdGF0IHNhZ2UgZGF0YWJhc2VzIGZpbmRzdGF0IEZpbmRTdGF0Q29sbGVjdGlvbiBpZH1A YW5jaG9yezhlfQpAZGVmZm4ge01ldGhvZH0gaWQgKCkKClJldHVybiB0aGUgRmluZFN0YXQgaWRl bnRpZmllciBvZiB0aGUgY29sbGVjdGlvbi4KCk9VVFBVVDoKClRoZSBGaW5kU3RhdCBpZGVudGlm aWVyIG9mIHRoZSBjb2xsZWN0aW9uIGFzIGFuIGludGVnZXIuCgpFWEFNUExFUzoKCkBleGFtcGxl CnNhZ2U6IGZyb20gc2FnZS5kYXRhYmFzZXMuZmluZHN0YXQgaW1wb3J0IEZpbmRTdGF0Q29sbGVj dGlvbgpzYWdlOiBjID0gRmluZFN0YXRDb2xsZWN0aW9uKCJHZWxmYW5kVHNldGxpblBhdHRlcm5z IikgICAgICAgICAgICAgICMgb3B0aW9uYWwgLS0gaW50ZXJuZXQKc2FnZTogYy5pZCgpICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIG9wdGlv bmFsIC0tIGludGVybmV0CjE4CkBlbmQgZXhhbXBsZQpAZW5kIGRlZmZuCgpAZ2VpbmRleCBpZF9z dHIoKSAoc2FnZS5kYXRhYmFzZXMuZmluZHN0YXQuRmluZFN0YXRDb2xsZWN0aW9uIG1ldGhvZCkK QGFuY2hvcntzYWdlL2RhdGFiYXNlcy9maW5kc3RhdCBzYWdlIGRhdGFiYXNlcyBmaW5kc3RhdCBG aW5kU3RhdENvbGxlY3Rpb24gaWRfc3RyfUBhbmNob3J7OGZ9CkBkZWZmbiB7TWV0aG9kfSBpZF9z dHIgKCkKClJldHVybiB0aGUgRmluZFN0YXQgaWRlbnRpZmllciBvZiB0aGUgY29sbGVjdGlvbi4K Ck9VVFBVVDoKClRoZSBGaW5kU3RhdCBpZGVudGlmaWVyIG9mIHRoZSBjb2xsZWN0aW9uIGFzIGEg c3RyaW5nLgoKRVhBTVBMRVM6CgpAZXhhbXBsZQpzYWdlOiBmcm9tIHNhZ2UuZGF0YWJhc2VzLmZp bmRzdGF0IGltcG9ydCBGaW5kU3RhdENvbGxlY3Rpb24Kc2FnZTogYyA9IEZpbmRTdGF0Q29sbGVj dGlvbigiR2VsZmFuZFRzZXRsaW5QYXR0ZXJucyIpICAgICAgICAgICAgICAjIG9wdGlvbmFsIC0t IGludGVybmV0CnNhZ2U6IGMuaWRfc3RyKCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIyBvcHRpb25hbCAtLSBpbnRlcm5ldAonQ2MwMDE4JwpAZW5k IGV4YW1wbGUKQGVuZCBkZWZmbgoKQGdlaW5kZXggaW5fcmFuZ2UoKSAoc2FnZS5kYXRhYmFzZXMu ZmluZHN0YXQuRmluZFN0YXRDb2xsZWN0aW9uIG1ldGhvZCkKQGFuY2hvcntzYWdlL2RhdGFiYXNl cy9maW5kc3RhdCBzYWdlIGRhdGFiYXNlcyBmaW5kc3RhdCBGaW5kU3RhdENvbGxlY3Rpb24gaW5f cmFuZ2V9QGFuY2hvcns4YX0KQGRlZmZuIHtNZXRob2R9IGluX3JhbmdlIChlbGVtZW50KQoKQ2hl Y2sgd2hldGhlciBhbiBlbGVtZW50IG9mIHRoZSBjb2xsZWN0aW9uIGlzIGluIEZpbmRTdGF0J3Mg cHJlY29tcHV0ZWQgcmFuZ2UuCgpJTlBVVDoKCgpAaXRlbWl6ZSAtCgpAaXRlbSAKQGNvZGV7ZWxl bWVudH0gLS0gYSBzYWdlIG9iamVjdCB0aGF0IGJlbG9uZ3MgdG8gdGhlIGNvbGxlY3Rpb24uCkBl bmQgaXRlbWl6ZQoKT1VUUFVUOgoKQGNvZGV7VHJ1ZX0sIGlmIEBjb2Rle2VsZW1lbnR9IGlzIHVz ZWQgYnkgdGhlIEZpbmRTdGF0IHNlYXJjaAplbmdpbmUsIGFuZCBAY29kZXtGYWxzZX0gaWYgaXQg aXMgaWdub3JlZC4KCkVYQU1QTEVTOgoKQGV4YW1wbGUKc2FnZTogZnJvbSBzYWdlLmRhdGFiYXNl cy5maW5kc3RhdCBpbXBvcnQgRmluZFN0YXRDb2xsZWN0aW9uCnNhZ2U6IGMgPSBGaW5kU3RhdENv bGxlY3Rpb24oIkdlbGZhbmRUc2V0bGluUGF0dGVybnMiKSAgICAgICAgICAgICAgIyBvcHRpb25h bCAtLSBpbnRlcm5ldApzYWdlOiBjLmluX3JhbmdlKEdlbGZhbmRUc2V0bGluUGF0dGVybihbWzIs IDFdLCBbMV1dKSkgICAgICAgICAgICAgICMgb3B0aW9uYWwgLS0gaW50ZXJuZXQKVHJ1ZQpzYWdl OiBjLmluX3JhbmdlKEdlbGZhbmRUc2V0bGluUGF0dGVybihbWzMsIDFdLCBbMV1dKSkgICAgICAg ICAgICAgICMgb3B0aW9uYWwgLS0gaW50ZXJuZXQKVHJ1ZQpzYWdlOiBjLmluX3JhbmdlKEdlbGZh bmRUc2V0bGluUGF0dGVybihbWzQsIDFdLCBbMV1dKSkgICAgICAgICAgICAgICMgb3B0aW9uYWwg LS0gaW50ZXJuZXQscmFuZG9tCkZhbHNlCkBlbmQgZXhhbXBsZQoKVEVTVFM6CgpAZXhhbXBsZQpz YWdlOiBmcm9tIHNhZ2UuZGF0YWJhc2VzLmZpbmRzdGF0IGltcG9ydCBGaW5kU3RhdENvbGxlY3Rp b25zCnNhZ2U6IGwgPSBGaW5kU3RhdENvbGxlY3Rpb25zKCkgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIyBvcHRpb25hbCAtLSBpbnRlcm5ldApzYWdlOiBsb25nID0gWzksIDEy LCAxNCwgMjBdCnNhZ2U6IGZvciBjIGluIGw6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIyBvcHRpb25hbCAtLSBpbnRlcm5ldCwgcmFuZG9tCi4uLi46 ICAgICBpZiBjLmlkKCkgbm90IGluIGxvbmcgYW5kIGMuaXNfc3VwcG9ydGVkKCk6Ci4uLi46ICAg ICAgICAgZiA9IGMuZmlyc3RfdGVybXMobGFtYmRhIHg6IDEsIG1heF92YWx1ZXM9MTAwMDApCi4u Li46ICAgICAgICAgcHJpbnQoIkB7QH0gQHtAfSBAe0B9Ii5mb3JtYXQoYywgbGVuKGYpLCBhbGwo Yy5pbl9yYW5nZShlKSBmb3IgZSwgXyBpbiBmKSkpCi4uLi46CkNjMDAwMTogUGVybXV0YXRpb25z IDEwMDAwIFRydWUKQ2MwMDAyOiBJbnRlZ2VyIHBhcnRpdGlvbnMgMjcwIFRydWUKQ2MwMDA1OiBE eWNrIHBhdGhzIDIwNTQgVHJ1ZQpDYzAwMDY6IEludGVnZXIgY29tcG9zaXRpb25zIDUxMCBUcnVl CkNjMDAwNzogU3RhbmRhcmQgdGFibGVhdXggMzczNCBUcnVlCkNjMDAxMDogQmluYXJ5IHRyZWVz IDIwNTQgVHJ1ZQpDYzAwMTM6IENvcmVzIDEwMCBUcnVlCkNjMDAxNzogQWx0ZXJuYXRpbmcgc2ln biBtYXRyaWNlcyA3OTE2IFRydWUKQ2MwMDE4OiBHZWxmYW5kLVRzZXRsaW4gcGF0dGVybnMgOTM0 IFRydWUKQ2MwMDE5OiBTZW1pc3RhbmRhcmQgdGFibGVhdXggMTAwMDAgVHJ1ZQpDYzAwMjE6IE9y ZGVyZWQgdHJlZXMgMjA1NSBUcnVlCkNjMDAyMjogRmluaXRlIENhcnRhbiB0eXBlcyAzMSBUcnVl CkNjMDAyMzogUGFya2luZyBmdW5jdGlvbnMgMTAwMDAgVHJ1ZQpAZW5kIGV4YW1wbGUKQGVuZCBk ZWZmbgoKQGdlaW5kZXggaXNfc3VwcG9ydGVkKCkgKHNhZ2UuZGF0YWJhc2VzLmZpbmRzdGF0LkZp bmRTdGF0Q29sbGVjdGlvbiBtZXRob2QpCkBhbmNob3J7c2FnZS9kYXRhYmFzZXMvZmluZHN0YXQg c2FnZSBkYXRhYmFzZXMgZmluZHN0YXQgRmluZFN0YXRDb2xsZWN0aW9uIGlzX3N1cHBvcnRlZH1A YW5jaG9yezkwfQpAZGVmZm4ge01ldGhvZH0gaXNfc3VwcG9ydGVkICgpCgpDaGVjayB3aGV0aGVy IHRoZSBjb2xsZWN0aW9uIGlzIGZ1bGx5IHN1cHBvcnRlZCBieSB0aGUgaW50ZXJmYWNlLgoKRVhB TVBMRVM6CgpAZXhhbXBsZQpzYWdlOiBmcm9tIHNhZ2UuZGF0YWJhc2VzLmZpbmRzdGF0IGltcG9y dCBGaW5kU3RhdENvbGxlY3Rpb24Kc2FnZTogRmluZFN0YXRDb2xsZWN0aW9uKDEpLmlzX3N1cHBv cnRlZCgpICAgICAgICAgICAgICAgICAgICAgICAgICAjIG9wdGlvbmFsIC0tIGludGVybmV0ClRy dWUKCnNhZ2U6IEZpbmRTdGF0Q29sbGVjdGlvbigyNCkuaXNfc3VwcG9ydGVkKCkgICAgICAgICAg ICAgICAgICAgICAgICAgIyBvcHRpb25hbCAtLSBpbnRlcm5ldCwgcmFuZG9tCkZhbHNlCkBlbmQg ZXhhbXBsZQpAZW5kIGRlZmZuCgpAZ2VpbmRleCBuYW1lKCkgKHNhZ2UuZGF0YWJhc2VzLmZpbmRz dGF0LkZpbmRTdGF0Q29sbGVjdGlvbiBtZXRob2QpCkBhbmNob3J7c2FnZS9kYXRhYmFzZXMvZmlu ZHN0YXQgc2FnZSBkYXRhYmFzZXMgZmluZHN0YXQgRmluZFN0YXRDb2xsZWN0aW9uIG5hbWV9QGFu Y2hvcns5MX0KQGRlZmZuIHtNZXRob2R9IG5hbWUgKHN0eWxlPSdzaW5ndWxhcicpCgpSZXR1cm4g dGhlIG5hbWUgb2YgdGhlIEZpbmRTdGF0IGNvbGxlY3Rpb24uCgpJTlBVVDoKCgpAaXRlbWl6ZSAt CgpAaXRlbSAKYSBzdHJpbmcgLS0gKGRlZmF1bHQ6InNpbmd1bGFyIikgY2FuIGJlCiJzaW5ndWxh ciIsIG9yICJwbHVyYWwiLgpAZW5kIGl0ZW1pemUKCk9VVFBVVDoKClRoZSBuYW1lIG9mIHRoZSBG aW5kU3RhdCBjb2xsZWN0aW9uLCBpbiBzaW5ndWxhciBvciBpbiBwbHVyYWwuCgpFWEFNUExFUzoK CkBleGFtcGxlCnNhZ2U6IGZyb20gc2FnZS5kYXRhYmFzZXMuZmluZHN0YXQgaW1wb3J0IEZpbmRT dGF0Q29sbGVjdGlvbgpzYWdlOiBGaW5kU3RhdENvbGxlY3Rpb24oIkJpbmFyeSB0cmVlcyIpLm5h bWUoKSAgICAgICAgICAgICAgICAgICAgICMgb3B0aW9uYWwgLS0gaW50ZXJuZXQKdSdCaW5hcnkg dHJlZScKCnNhZ2U6IEZpbmRTdGF0Q29sbGVjdGlvbigiQmluYXJ5IHRyZWVzIikubmFtZShzdHls ZT0icGx1cmFsIikgICAgICAgIyBvcHRpb25hbCAtLSBpbnRlcm5ldAp1J0JpbmFyeSB0cmVlcycK QGVuZCBleGFtcGxlCkBlbmQgZGVmZm4KCkBnZWluZGV4IHRvX3N0cmluZygpIChzYWdlLmRhdGFi YXNlcy5maW5kc3RhdC5GaW5kU3RhdENvbGxlY3Rpb24gbWV0aG9kKQpAYW5jaG9ye3NhZ2UvZGF0 YWJhc2VzL2ZpbmRzdGF0IHNhZ2UgZGF0YWJhc2VzIGZpbmRzdGF0IEZpbmRTdGF0Q29sbGVjdGlv biB0b19zdHJpbmd9QGFuY2hvcns5Mn0KQGRlZmZuIHtNZXRob2R9IHRvX3N0cmluZyAoKQoKUmV0 dXJuIGEgZnVuY3Rpb24gdGhhdCByZXR1cm5zIHRoZSBGaW5kU3RhdCBub3JtYWwKcmVwcmVzZW50 YXRpb24gZ2l2ZW4gYW4gb2JqZWN0LgoKT1VUUFVUOgoKVGhlIGZ1bmN0aW9uIHRoYXQgcHJvZHVj ZXMgdGhlIHN0cmluZyByZXByZXNlbnRhdGlvbiBhcwpuZWVkZWQgYnkgdGhlIEZpbmRTdGF0IHNl YXJjaCB3ZWJwYWdlLgoKRVhBTVBMRVM6CgpAZXhhbXBsZQpzYWdlOiBmcm9tIHNhZ2UuZGF0YWJh c2VzLmZpbmRzdGF0IGltcG9ydCBGaW5kU3RhdENvbGxlY3Rpb24Kc2FnZTogcCA9IFBvc2V0KChy YW5nZSgzKSwgW1swLCAxXSwgWzEsIDJdXSkpICAgICAgICAgICAgICAgICAgICAgICAjIG9wdGlv bmFsIC0tIGludGVybmV0CnNhZ2U6IGMgPSBGaW5kU3RhdENvbGxlY3Rpb24oIlBvc2V0cyIpICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBvcHRpb25hbCAtLSBpbnRlcm5ldApzYWdlOiBj LnRvX3N0cmluZygpKHApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICMgb3B0aW9uYWwgLS0gaW50ZXJuZXQKJyhbKDAsIDIpLCAoMiwgMSldLCAzKScKQGVuZCBl eGFtcGxlCkBlbmQgZGVmZm4KQGVuZCBkZWZmbgoKQGdlaW5kZXggRmluZFN0YXRDb2xsZWN0aW9u cyAoY2xhc3MgaW4gc2FnZS5kYXRhYmFzZXMuZmluZHN0YXQpCkBhbmNob3J7c2FnZS9kYXRhYmFz ZXMvZmluZHN0YXQgc2FnZSBkYXRhYmFzZXMgZmluZHN0YXQgRmluZFN0YXRDb2xsZWN0aW9uc31A YW5jaG9yezhifQpAZGVmZm4ge0NsYXNzfSBzYWdlLmRhdGFiYXNlcy5maW5kc3RhdC5GaW5kU3Rh dENvbGxlY3Rpb25zCgpCYXNlczogc2FnZS5zdHJ1Y3R1cmUucGFyZW50LlBhcmVudEBmb290bm90 ZXsuLi8uLi8uLi8uLi8uLi8uLi9odG1sL2VuL3JlZmVyZW5jZS9zdHJ1Y3R1cmUvc2FnZS9zdHJ1 Y3R1cmUvcGFyZW50Lmh0bWwjc2FnZS5zdHJ1Y3R1cmUucGFyZW50LlBhcmVudH0sIHNhZ2Uuc3Ry dWN0dXJlLnVuaXF1ZV9yZXByZXNlbnRhdGlvbi5VbmlxdWVSZXByZXNlbnRhdGlvbkBmb290bm90 ZXsuLi8uLi8uLi8uLi8uLi8uLi9odG1sL2VuL3JlZmVyZW5jZS9zdHJ1Y3R1cmUvc2FnZS9zdHJ1 Y3R1cmUvdW5pcXVlX3JlcHJlc2VudGF0aW9uLmh0bWwjc2FnZS5zdHJ1Y3R1cmUudW5pcXVlX3Jl cHJlc2VudGF0aW9uLlVuaXF1ZVJlcHJlc2VudGF0aW9ufQoKVGhlIGNsYXNzIG9mIEZpbmRTdGF0 IGNvbGxlY3Rpb25zLgoKVGhlIGVsZW1lbnRzIG9mIHRoaXMgY2xhc3MgYXJlIGNvbWJpbmF0b3Jp YWwgY29sbGVjdGlvbnMgaW4KRmluZFN0YXQgYXMgb2YgQXVndXN0IDIwMTUuICBJZiBhIG5ldyBj b2xsZWN0aW9uIHdhcyBhZGRlZCB0byB0aGUKd2ViIHNlcnZpY2Ugc2luY2UgdGhlbiwgdGhlIGRp Y3Rpb25hcnkgQGNvZGV7X2ZpbmRzdGF0X2NvbGxlY3Rpb25zfQppbiB0aGlzIGNsYXNzIGhhcyB0 byBiZSB1cGRhdGVkIGFjY29yZGluZ2x5LgoKRVhBTVBMRVM6CgpAZXhhbXBsZQpzYWdlOiBmcm9t IHNhZ2UuZGF0YWJhc2VzLmZpbmRzdGF0IGltcG9ydCBGaW5kU3RhdENvbGxlY3Rpb25zCnNhZ2U6 IHNvcnRlZChjIGZvciBjIGluIEZpbmRTdGF0Q29sbGVjdGlvbnMoKSkgICAgICAgICAgICAgICAg ICAgICAgICAgICMgb3B0aW9uYWwgLS0gaW50ZXJuZXQsIHJhbmRvbQpbQ2MwMDAxOiBQZXJtdXRh dGlvbnMsCiBDYzAwMDI6IEludGVnZXIgcGFydGl0aW9ucywKIENjMDAwNTogRHljayBwYXRocywK IENjMDAwNjogSW50ZWdlciBjb21wb3NpdGlvbnMsCiBDYzAwMDc6IFN0YW5kYXJkIHRhYmxlYXV4 LAogQ2MwMDA5OiBTZXQgcGFydGl0aW9ucywKIENjMDAxMDogQmluYXJ5IHRyZWVzLAogQ2MwMDEy OiBQZXJmZWN0IG1hdGNoaW5ncywKIENjMDAxMzogQ29yZXMsCiBDYzAwMTQ6IFBvc2V0cywKIENj MDAxNzogQWx0ZXJuYXRpbmcgc2lnbiBtYXRyaWNlcywKIENjMDAxODogR2VsZmFuZC1Uc2V0bGlu IHBhdHRlcm5zLAogQ2MwMDE5OiBTZW1pc3RhbmRhcmQgdGFibGVhdXgsCiBDYzAwMjA6IEdyYXBo cywKIENjMDAyMTogT3JkZXJlZCB0cmVlcywKIENjMDAyMjogRmluaXRlIENhcnRhbiB0eXBlcywK IENjMDAyMzogUGFya2luZyBmdW5jdGlvbnNdCkBlbmQgZXhhbXBsZQoKQGdlaW5kZXggRWxlbWVu dCAoc2FnZS5kYXRhYmFzZXMuZmluZHN0YXQuRmluZFN0YXRDb2xsZWN0aW9ucyBhdHRyaWJ1dGUp CkBhbmNob3J7c2FnZS9kYXRhYmFzZXMvZmluZHN0YXQgc2FnZSBkYXRhYmFzZXMgZmluZHN0YXQg RmluZFN0YXRDb2xsZWN0aW9ucyBFbGVtZW50fUBhbmNob3J7OTN9CkBkZWZmbiB7QXR0cmlidXRl fSBFbGVtZW50CgphbGlhcyBvZiBAcmVmezg4LCxGaW5kU3RhdENvbGxlY3Rpb259CkBlbmQgZGVm Zm4KQGVuZCBkZWZmbgoKQGdlaW5kZXggRmluZFN0YXRNYXAgKGNsYXNzIGluIHNhZ2UuZGF0YWJh c2VzLmZpbmRzdGF0KQpAYW5jaG9ye3NhZ2UvZGF0YWJhc2VzL2ZpbmRzdGF0IHNhZ2UgZGF0YWJh c2VzIGZpbmRzdGF0IEZpbmRTdGF0TWFwfUBhbmNob3J7N2V9CkBkZWZmbiB7Q2xhc3N9IHNhZ2Uu ZGF0YWJhc2VzLmZpbmRzdGF0LkZpbmRTdGF0TWFwIChwYXJlbnQsIGVudHJ5KQoKQmFzZXM6IHNh Z2Uuc3RydWN0dXJlLmVsZW1lbnQuRWxlbWVudEBmb290bm90ZXsuLi8uLi8uLi8uLi8uLi8uLi9o dG1sL2VuL3JlZmVyZW5jZS9zdHJ1Y3R1cmUvc2FnZS9zdHJ1Y3R1cmUvZWxlbWVudC5odG1sI3Nh Z2Uuc3RydWN0dXJlLmVsZW1lbnQuRWxlbWVudH0KCkEgRmluZFN0YXQgbWFwLgoKQHJlZns3ZSws RmluZFN0YXRNYXB9IGlzIGEgY2xhc3MgcmVwcmVzZW50aW5nIGEgY29tYmluYXRvcmlhbAptYXAg YXZhaWxhYmxlIGluIHRoZSBGaW5kU3RhdCBkYXRhYmFzZS4KClRoZSByZXN1bHQgb2YgYSBAcmVm ezdhLCxmaW5kc3RhdH0gcXVlcnkgY29udGFpbnMgYQoocG9zc2libHkgZW1wdHkpIGxpc3Qgb2Yg c3VjaCBtYXBzLiAgVGhpcyBjbGFzcyBwcm92aWRlcyBtZXRob2RzCnRvIGluc3BlY3QgdmFyaW91 cyBwcm9wZXJ0aWVzIG9mIHRoZXNlIG1hcHMsIGluIHBhcnRpY3VsYXIKQHJlZns5NCwsY29kZSgp fS4KCklOUFVUOgoKCkBpdGVtaXplIC0KCkBpdGVtIAphIHN0cmluZyBjb250YWluaW5nIHRoZSBG aW5kU3RhdCBuYW1lIG9mIHRoZSBtYXAsIG9yIGFuIGludGVnZXIKcmVwcmVzZW50aW5nIGl0cyBG aW5kU3RhdCBpZC4KQGVuZCBpdGVtaXplCgpFWEFNUExFUzoKCkBleGFtcGxlCnNhZ2U6IGZyb20g c2FnZS5kYXRhYmFzZXMuZmluZHN0YXQgaW1wb3J0IEZpbmRTdGF0TWFwCnNhZ2U6IEZpbmRTdGF0 TWFwKDcxKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICMgb3B0aW9uYWwgLS0gaW50ZXJuZXQKTXAwMDA3MTogZGVzY2VudCBjb21wb3NpdGlvbgpzYWdl OiBGaW5kU3RhdE1hcCgiZGVzY2VudCBjb21wb3NpdGlvbiIpICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAjIG9wdGlvbmFsIC0tIGludGVybmV0Ck1wMDAwNzE6IGRlc2NlbnQgY29tcG9z aXRpb24KQGVuZCBleGFtcGxlCgpTRUVBTFNPOgoKQHJlZns5NSwsRmluZFN0YXRNYXBzfQoKQGdl aW5kZXggY29kZSgpIChzYWdlLmRhdGFiYXNlcy5maW5kc3RhdC5GaW5kU3RhdE1hcCBtZXRob2Qp CkBhbmNob3J7c2FnZS9kYXRhYmFzZXMvZmluZHN0YXQgc2FnZSBkYXRhYmFzZXMgZmluZHN0YXQg RmluZFN0YXRNYXAgY29kZX1AYW5jaG9yezk0fQpAZGVmZm4ge01ldGhvZH0gY29kZSAoKQoKUmV0 dXJuIHRoZSBjb2RlIGFzc29jaWF0ZWQgd2l0aCB0aGUgbWFwLgoKT1VUUFVUOgoKQSBzdHJpbmcu CgpFWEFNUExFUzoKCkBleGFtcGxlCnNhZ2U6IGZyb20gc2FnZS5kYXRhYmFzZXMuZmluZHN0YXQg aW1wb3J0IEZpbmRTdGF0TWFwICAgICAgICAgICAgICAgIyBvcHRpb25hbCAtLSBpbnRlcm5ldApz YWdlOiBwcmludChGaW5kU3RhdE1hcCg3MSkuY29kZSgpKSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICMgb3B0aW9uYWwgLS0gaW50ZXJuZXQKZGVmIGRlc2NlbnRzX2NvbXBvc2l0aW9uKGVs dCk6CiAgICBpZiBsZW4oZWx0KSA9PSAwOgogICAgICAgIHJldHVybiBDb21wb3NpdGlvbihbXSkK ICAgIGQgPSBbLTFdICsgZWx0LmRlc2NlbnRzKCkgKyBbbGVuKGVsdCktMV0KICAgIHJldHVybiBD b21wb3NpdGlvbihbIGRbaSsxXS1kW2ldIGZvciBpIGluIHJhbmdlKGxlbihkKS0xKV0pCkBlbmQg ZXhhbXBsZQpAZW5kIGRlZmZuCgpAZ2VpbmRleCBjb2RlX25hbWUoKSAoc2FnZS5kYXRhYmFzZXMu ZmluZHN0YXQuRmluZFN0YXRNYXAgbWV0aG9kKQpAYW5jaG9ye3NhZ2UvZGF0YWJhc2VzL2ZpbmRz dGF0IHNhZ2UgZGF0YWJhc2VzIGZpbmRzdGF0IEZpbmRTdGF0TWFwIGNvZGVfbmFtZX1AYW5jaG9y ezk2fQpAZGVmZm4ge01ldGhvZH0gY29kZV9uYW1lICgpCgpSZXR1cm4gdGhlIG5hbWUgb2YgdGhl IGZ1bmN0aW9uIGRlZmluZWQgYnkgQHJlZns5NCwsY29kZSgpfS4KCk9VVFBVVDoKCkEgc3RyaW5n LgoKRVhBTVBMRVM6CgpAZXhhbXBsZQpzYWdlOiBmcm9tIHNhZ2UuZGF0YWJhc2VzLmZpbmRzdGF0 IGltcG9ydCBGaW5kU3RhdE1hcCAgICAgICAgICAgICAgICMgb3B0aW9uYWwgLS0gaW50ZXJuZXQK c2FnZTogcHJpbnQoRmluZFN0YXRNYXAoNzEpLmNvZGVfbmFtZSgpKSAgICAgICAgICAgICAgICAg ICAgICAjIG9wdGlvbmFsIC0tIGludGVybmV0CmRlc2NlbnRzX2NvbXBvc2l0aW9uCkBlbmQgZXhh bXBsZQpAZW5kIGRlZmZuCgpAZ2VpbmRleCBjb2RvbWFpbigpIChzYWdlLmRhdGFiYXNlcy5maW5k c3RhdC5GaW5kU3RhdE1hcCBtZXRob2QpCkBhbmNob3J7c2FnZS9kYXRhYmFzZXMvZmluZHN0YXQg c2FnZSBkYXRhYmFzZXMgZmluZHN0YXQgRmluZFN0YXRNYXAgY29kb21haW59QGFuY2hvcns5N30K QGRlZmZuIHtNZXRob2R9IGNvZG9tYWluICgpCgpSZXR1cm4gdGhlIEZpbmRTdGF0IGNvbGxlY3Rp b24gd2hpY2ggaXMgdGhlIGNvZG9tYWluIG9mIHRoZSBtYXAuCgpPVVRQVVQ6CgpUaGUgY29kb21h aW4gb2YgdGhlIG1hcCBhcyBhIEByZWZ7ODgsLEZpbmRTdGF0Q29sbGVjdGlvbn0uCgpFWEFNUExF UzoKCkBleGFtcGxlCnNhZ2U6IGZyb20gc2FnZS5kYXRhYmFzZXMuZmluZHN0YXQgaW1wb3J0IEZp bmRTdGF0TWFwICAgICAgICAgICAgICAgIyBvcHRpb25hbCAtLSBpbnRlcm5ldApzYWdlOiBGaW5k U3RhdE1hcCg3MSkuY29kb21haW4oKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICMgb3B0aW9uYWwgLS0gaW50ZXJuZXQKQ2MwMDA2OiBJbnRlZ2VyIGNvbXBvc2l0aW9ucwpAZW5k IGV4YW1wbGUKQGVuZCBkZWZmbgoKQGdlaW5kZXggZGVzY3JpcHRpb24oKSAoc2FnZS5kYXRhYmFz ZXMuZmluZHN0YXQuRmluZFN0YXRNYXAgbWV0aG9kKQpAYW5jaG9ye3NhZ2UvZGF0YWJhc2VzL2Zp bmRzdGF0IHNhZ2UgZGF0YWJhc2VzIGZpbmRzdGF0IEZpbmRTdGF0TWFwIGRlc2NyaXB0aW9ufUBh bmNob3J7OTh9CkBkZWZmbiB7TWV0aG9kfSBkZXNjcmlwdGlvbiAoKQoKUmV0dXJuIHRoZSBGaW5k U3RhdCBkZXNjcmlwdGlvbiBvZiB0aGUgbWFwLgoKT1VUUFVUOgoKVGhlIGRlc2NyaXB0aW9uIGFz IGEgc3RyaW5nLgoKRVhBTVBMRVM6CgpAZXhhbXBsZQpzYWdlOiBtID0gZmluZHN0YXQoIlBlcm11 dGF0aW9ucyIsIGxhbWJkYSBwaTogcGkubGVuZ3RoKCkpWzFdWzFdWzBdICMgb3B0aW9uYWwgLS0g aW50ZXJuZXQKc2FnZTogcHJpbnQobS5kZXNjcmlwdGlvbigpKSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICMgb3B0aW9uYWwgLS0gaW50ZXJuZXQscmFuZG9tCkxldCAkXHNpZ21h IFxpbiBcbWF0aGNhbEB7U0B9X24kIGJlIGEgcGVybXV0YXRpb24uCjxCTEFOS0xJTkU+Ck1hcHMg JFxzaWdtYSQgdG8gdGhlIHBlcm11dGF0aW9uICRcdGF1JCBzdWNoIHRoYXQgdGhlIG1ham9yIGNv ZGUgb2YgJFx0YXUkIGlzIGdpdmVuIGJ5IHRoZSBMZWhtZXIgY29kZSBvZiAkXHNpZ21hJC4KPEJM QU5LTElORT4KSW4gcGFydGljdWxhciwgdGhlIG51bWJlciBvZiBpbnZlcnNpb25zIG9mICRcc2ln bWEkIGVxdWFscyB0aGUgbWFqb3IgaW5kZXggb2YgJFx0YXUkLgo8QkxBTktMSU5FPgpFWEFNUExF UzoKPEJMQU5LTElORT4KJFszLDQsMSwyXSBcbWFwc3RvIFszLDEsNCwyXSQKQGVuZCBleGFtcGxl CkBlbmQgZGVmZm4KCkBnZWluZGV4IGRvbWFpbigpIChzYWdlLmRhdGFiYXNlcy5maW5kc3RhdC5G aW5kU3RhdE1hcCBtZXRob2QpCkBhbmNob3J7c2FnZS9kYXRhYmFzZXMvZmluZHN0YXQgc2FnZSBk YXRhYmFzZXMgZmluZHN0YXQgRmluZFN0YXRNYXAgZG9tYWlufUBhbmNob3J7OTl9CkBkZWZmbiB7 TWV0aG9kfSBkb21haW4gKCkKClJldHVybiB0aGUgRmluZFN0YXQgY29sbGVjdGlvbiB3aGljaCBp cyB0aGUgZG9tYWluIG9mIHRoZSBtYXAuCgpPVVRQVVQ6CgpUaGUgZG9tYWluIG9mIHRoZSBtYXAg YXMgYSBAcmVmezg4LCxGaW5kU3RhdENvbGxlY3Rpb259LgoKRVhBTVBMRVM6CgpAZXhhbXBsZQpz YWdlOiBmcm9tIHNhZ2UuZGF0YWJhc2VzLmZpbmRzdGF0IGltcG9ydCBGaW5kU3RhdE1hcCAgICAg ICAgICAgICAgICMgb3B0aW9uYWwgLS0gaW50ZXJuZXQKc2FnZTogRmluZFN0YXRNYXAoNzEpLmRv bWFpbigpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIG9wdGlvbmFsIC0t IGludGVybmV0CkNjMDAwMTogUGVybXV0YXRpb25zCkBlbmQgZXhhbXBsZQpAZW5kIGRlZmZuCgpA Z2VpbmRleCBpZCgpIChzYWdlLmRhdGFiYXNlcy5maW5kc3RhdC5GaW5kU3RhdE1hcCBtZXRob2Qp CkBhbmNob3J7c2FnZS9kYXRhYmFzZXMvZmluZHN0YXQgc2FnZSBkYXRhYmFzZXMgZmluZHN0YXQg RmluZFN0YXRNYXAgaWR9QGFuY2hvcns5YX0KQGRlZmZuIHtNZXRob2R9IGlkICgpCgpSZXR1cm4g dGhlIEZpbmRTdGF0IGlkZW50aWZpZXIgb2YgdGhlIG1hcC4KCk9VVFBVVDoKClRoZSBGaW5kU3Rh dCBpZGVudGlmaWVyIG9mIHRoZSBtYXAgYXMgYW4gaW50ZWdlci4KCkVYQU1QTEVTOgoKQGV4YW1w bGUKc2FnZTogbSA9IGZpbmRzdGF0KCJQZXJtdXRhdGlvbnMiLCBsYW1iZGEgcGk6IHBpLmxlbmd0 aCgpKVsxXVsxXVswXSAjIG9wdGlvbmFsIC0tIGludGVybmV0CnNhZ2U6IG0uaWQoKSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBvcHRpb25h bCAtLSBpbnRlcm5ldAo2MgpAZW5kIGV4YW1wbGUKQGVuZCBkZWZmbgoKQGdlaW5kZXggaWRfc3Ry KCkgKHNhZ2UuZGF0YWJhc2VzLmZpbmRzdGF0LkZpbmRTdGF0TWFwIG1ldGhvZCkKQGFuY2hvcntz YWdlL2RhdGFiYXNlcy9maW5kc3RhdCBzYWdlIGRhdGFiYXNlcyBmaW5kc3RhdCBGaW5kU3RhdE1h cCBpZF9zdHJ9QGFuY2hvcns5Yn0KQGRlZmZuIHtNZXRob2R9IGlkX3N0ciAoKQoKUmV0dXJuIHRo ZSBGaW5kU3RhdCBpZGVudGlmaWVyIG9mIHRoZSBtYXAuCgpPVVRQVVQ6CgpUaGUgRmluZFN0YXQg aWRlbnRpZmllciBvZiB0aGUgbWFwIGFzIGEgc3RyaW5nLgoKRVhBTVBMRVM6CgpAZXhhbXBsZQpz YWdlOiBtID0gZmluZHN0YXQoIlBlcm11dGF0aW9ucyIsIGxhbWJkYSBwaTogcGkubGVuZ3RoKCkp WzFdWzFdWzBdICMgb3B0aW9uYWwgLS0gaW50ZXJuZXQKc2FnZTogbS5pZF9zdHIoKSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIG9wdGlvbmFsIC0t IGludGVybmV0CidNcDAwMDYyJwpAZW5kIGV4YW1wbGUKQGVuZCBkZWZmbgoKQGdlaW5kZXggbmFt ZSgpIChzYWdlLmRhdGFiYXNlcy5maW5kc3RhdC5GaW5kU3RhdE1hcCBtZXRob2QpCkBhbmNob3J7 c2FnZS9kYXRhYmFzZXMvZmluZHN0YXQgc2FnZSBkYXRhYmFzZXMgZmluZHN0YXQgRmluZFN0YXRN YXAgbmFtZX1AYW5jaG9yezljfQpAZGVmZm4ge01ldGhvZH0gbmFtZSAoKQoKUmV0dXJuIHRoZSBG aW5kU3RhdCBuYW1lIG9mIHRoZSBtYXAuCgpPVVRQVVQ6CgpUaGUgbmFtZSBvZiB0aGUgbWFwIGFz IGEgc3RyaW5nLCBhcyB1c2VkIGJ5IEZpbmRTdGF0LgoKRVhBTVBMRVM6CgpAZXhhbXBsZQpzYWdl OiBtID0gZmluZHN0YXQoIlBlcm11dGF0aW9ucyIsIGxhbWJkYSBwaTogcGkubGVuZ3RoKCkpWzFd WzFdWzBdICMgb3B0aW9uYWwgLS0gaW50ZXJuZXQKc2FnZTogbS5uYW1lKCkgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIG9wdGlvbmFsIC0tIGlu dGVybmV0CnUnaW52ZXJzaW9uLW51bWJlciB0byBtYWpvci1pbmRleCBiaWplY3Rpb24nCkBlbmQg ZXhhbXBsZQpAZW5kIGRlZmZuCkBlbmQgZGVmZm4KCkBnZWluZGV4IEZpbmRTdGF0TWFwcyAoY2xh c3MgaW4gc2FnZS5kYXRhYmFzZXMuZmluZHN0YXQpCkBhbmNob3J7c2FnZS9kYXRhYmFzZXMvZmlu ZHN0YXQgc2FnZSBkYXRhYmFzZXMgZmluZHN0YXQgRmluZFN0YXRNYXBzfUBhbmNob3J7OTV9CkBk ZWZmbiB7Q2xhc3N9IHNhZ2UuZGF0YWJhc2VzLmZpbmRzdGF0LkZpbmRTdGF0TWFwcwoKQmFzZXM6 IHNhZ2Uuc3RydWN0dXJlLnBhcmVudC5QYXJlbnRAZm9vdG5vdGV7Li4vLi4vLi4vLi4vLi4vLi4v aHRtbC9lbi9yZWZlcmVuY2Uvc3RydWN0dXJlL3NhZ2Uvc3RydWN0dXJlL3BhcmVudC5odG1sI3Nh Z2Uuc3RydWN0dXJlLnBhcmVudC5QYXJlbnR9LCBzYWdlLnN0cnVjdHVyZS51bmlxdWVfcmVwcmVz ZW50YXRpb24uVW5pcXVlUmVwcmVzZW50YXRpb25AZm9vdG5vdGV7Li4vLi4vLi4vLi4vLi4vLi4v aHRtbC9lbi9yZWZlcmVuY2Uvc3RydWN0dXJlL3NhZ2Uvc3RydWN0dXJlL3VuaXF1ZV9yZXByZXNl bnRhdGlvbi5odG1sI3NhZ2Uuc3RydWN0dXJlLnVuaXF1ZV9yZXByZXNlbnRhdGlvbi5VbmlxdWVS ZXByZXNlbnRhdGlvbn0KClRoZSBjbGFzcyBvZiBGaW5kU3RhdCBtYXBzLgoKVGhlIGVsZW1lbnRz IG9mIHRoaXMgY2xhc3MgYXJlIGNvbWJpbmF0b3JpYWwgbWFwcyBjdXJyZW50bHkgaW4KRmluZFN0 YXQuCgpFWEFNUExFUzoKCldlIGNhbiBwcmludCBhIG5pY2UgbGlzdCBvZiBtYXBzIGN1cnJlbnRs eSBpbiBGaW5kU3RhdCwgc29ydGVkIGJ5CmRvbWFpbiBhbmQgY29kb21haW46CgpAZXhhbXBsZQpz YWdlOiBmcm9tIHNhZ2UuZGF0YWJhc2VzLmZpbmRzdGF0IGltcG9ydCBGaW5kU3RhdE1hcCwgRmlu ZFN0YXRNYXBzCnNhZ2U6IGZvciBtIGluIHNvcnRlZChGaW5kU3RhdE1hcHMoKSwga2V5PWxhbWJk YSBtOiAobS5kb21haW4oKSwgbS5jb2RvbWFpbikpOiAgICAjIG9wdGlvbmFsIC0tIGludGVybmV0 LHJhbmRvbQouLi4uOiAgICAgcHJpbnQobS5kb21haW4oKS5uYW1lKCkubGp1c3QoMzApKyIgIitt LmNvZG9tYWluKCkubmFtZSgpLmxqdXN0KDMwKSsiICIrbS5uYW1lKCkpClBlcm11dGF0aW9uICAg ICAgICAgICAgICAgICAgICBTdGFuZGFyZCB0YWJsZWF1ICAgICAgICAgICAgICAgUm9iaW5zb24t U2NoZW5zdGVkIGluc2VydGlvbiB0YWJsZWF1ClBlcm11dGF0aW9uICAgICAgICAgICAgICAgICAg ICBJbnRlZ2VyIHBhcnRpdGlvbiAgICAgICAgICAgICAgUm9iaW5zb24tU2NoZW5zdGVkIHRhYmxl YXUgc2hhcGUKUGVybXV0YXRpb24gICAgICAgICAgICAgICAgICAgIEJpbmFyeSB0cmVlICAgICAg ICAgICAgICAgICAgICB0byBpbmNyZWFzaW5nIHRyZWUKLi4uCkBlbmQgZXhhbXBsZQoKQGdlaW5k ZXggRWxlbWVudCAoc2FnZS5kYXRhYmFzZXMuZmluZHN0YXQuRmluZFN0YXRNYXBzIGF0dHJpYnV0 ZSkKQGFuY2hvcntzYWdlL2RhdGFiYXNlcy9maW5kc3RhdCBzYWdlIGRhdGFiYXNlcyBmaW5kc3Rh dCBGaW5kU3RhdE1hcHMgRWxlbWVudH1AYW5jaG9yezlkfQpAZGVmZm4ge0F0dHJpYnV0ZX0gRWxl bWVudAoKYWxpYXMgb2YgQHJlZns3ZSwsRmluZFN0YXRNYXB9CkBlbmQgZGVmZm4KQGVuZCBkZWZm bgoKQGdlaW5kZXggRmluZFN0YXRTdGF0aXN0aWMgKGNsYXNzIGluIHNhZ2UuZGF0YWJhc2VzLmZp bmRzdGF0KQpAYW5jaG9ye3NhZ2UvZGF0YWJhc2VzL2ZpbmRzdGF0IHNhZ2UgZGF0YWJhc2VzIGZp bmRzdGF0IEZpbmRTdGF0U3RhdGlzdGljfUBhbmNob3J7N2R9CkBkZWZmbiB7Q2xhc3N9IHNhZ2Uu ZGF0YWJhc2VzLmZpbmRzdGF0LkZpbmRTdGF0U3RhdGlzdGljIChpZCwgZmlyc3RfdGVybXM9Tm9u ZSwgZGF0YT1Ob25lLCBmdW5jdGlvbj1Ob25lLCBjb2RlPSdAd3snfSwgY29sbGVjdGlvbj1Ob25l LCBkZXB0aD1Ob25lKQoKQmFzZXM6IHNhZ2Uuc3RydWN0dXJlLnNhZ2Vfb2JqZWN0LlNhZ2VPYmpl Y3RAZm9vdG5vdGV7Li4vLi4vLi4vLi4vLi4vLi4vaHRtbC9lbi9yZWZlcmVuY2Uvc3RydWN0dXJl L3NhZ2Uvc3RydWN0dXJlL3NhZ2Vfb2JqZWN0Lmh0bWwjc2FnZS5zdHJ1Y3R1cmUuc2FnZV9vYmpl Y3QuU2FnZU9iamVjdH0KClRoZSBjbGFzcyBvZiBGaW5kU3RhdCBzdGF0aXN0aWNzLgoKRG8gbm90 IGluc3RhbnRpYXRlIHRoaXMgY2xhc3MgZGlyZWN0bHkuICBJbnN0ZWFkLCB1c2UKQHJlZns3YSws ZmluZHN0YXR9LgoKQGdlaW5kZXggYnJvd3NlKCkgKHNhZ2UuZGF0YWJhc2VzLmZpbmRzdGF0LkZp bmRTdGF0U3RhdGlzdGljIG1ldGhvZCkKQGFuY2hvcntzYWdlL2RhdGFiYXNlcy9maW5kc3RhdCBz YWdlIGRhdGFiYXNlcyBmaW5kc3RhdCBGaW5kU3RhdFN0YXRpc3RpYyBicm93c2V9QGFuY2hvcns5 ZX0KQGRlZmZuIHtNZXRob2R9IGJyb3dzZSAoKQoKT3BlbiB0aGUgRmluZFN0YXQgd2ViIHBhZ2Ug b2YgdGhlIHN0YXRpc3RpYyBpbiBhIGJyb3dzZXIuCgpFWEFNUExFUzoKCkBleGFtcGxlCnNhZ2U6 IGZpbmRzdGF0KDQxKS5icm93c2UoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIyBvcHRpb25hbCAtLSB3ZWJicm93c2VyCkBlbmQgZXhhbXBsZQpAZW5kIGRlZmZuCgpA Z2VpbmRleCBjb2RlKCkgKHNhZ2UuZGF0YWJhc2VzLmZpbmRzdGF0LkZpbmRTdGF0U3RhdGlzdGlj IG1ldGhvZCkKQGFuY2hvcntzYWdlL2RhdGFiYXNlcy9maW5kc3RhdCBzYWdlIGRhdGFiYXNlcyBm aW5kc3RhdCBGaW5kU3RhdFN0YXRpc3RpYyBjb2RlfUBhbmNob3J7OWZ9CkBkZWZmbiB7TWV0aG9k fSBjb2RlICgpCgpSZXR1cm4gdGhlIGNvZGUgYXNzb2NpYXRlZCB3aXRoIHRoZSBzdGF0aXN0aWMu CgpPVVRQVVQ6CgpBIHN0cmluZy4gIENvbnRyaWJ1dG9ycyBhcmUgZW5jb3VyYWdlZCB0byBzdWJt aXQgc2FnZSBjb2RlIGluIHRoZSBmb3JtOgoKQGV4YW1wbGUKZGVmIHN0YXRpc3RpYyh4KToKICAg IC4uLgpAZW5kIGV4YW1wbGUKCmJ1dCB0aGUgc3RyaW5nIG1heSBhbHNvIGNvbnRhaW4gY29kZSBm b3Igb3RoZXIgY29tcHV0ZXIKYWxnZWJyYSBzeXN0ZW1zLgoKRVhBTVBMRVM6CgpAZXhhbXBsZQpz YWdlOiBwcmludChmaW5kc3RhdCgxKS5jb2RlKCkpICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAjIG9wdGlvbmFsIC0tIGludGVybmV0LHJhbmRvbQpkZWYgc3RhdGlzdGljKHgpOgog ICAgcmV0dXJuIGxlbih4LnJlZHVjZWRfd29yZHMoKSkKCnNhZ2U6IHByaW50KGZpbmRzdGF0KDEx OCkuY29kZSgpKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgb3B0aW9uYWwgLS0g aW50ZXJuZXQscmFuZG9tCigqIGluIE1hdGhlbWF0aWNhICopCnRyZWUgPSBAe0B7QHtAe0B9LCBA e0B9QH0sIEB7QHtAfSwgQHtAfUB9QH0sIEB7QHtAe0B9LCBAe0B9QH0sIEB7QHtAfSwgQHtAfUB9 QH1AfTsKQ291bnRbdHJlZSwgQHtAe19fX0B9LCBAe0B7X19fQH0sIEB7QHtfX19AfSwgQHtfX19A fUB9QH1AfSwgQHswLCBJbmZpbml0eUB9XQpAZW5kIGV4YW1wbGUKQGVuZCBkZWZmbgoKQGdlaW5k ZXggY29sbGVjdGlvbigpIChzYWdlLmRhdGFiYXNlcy5maW5kc3RhdC5GaW5kU3RhdFN0YXRpc3Rp YyBtZXRob2QpCkBhbmNob3J7c2FnZS9kYXRhYmFzZXMvZmluZHN0YXQgc2FnZSBkYXRhYmFzZXMg ZmluZHN0YXQgRmluZFN0YXRTdGF0aXN0aWMgY29sbGVjdGlvbn1AYW5jaG9ye2EwfQpAZGVmZm4g e01ldGhvZH0gY29sbGVjdGlvbiAoKQoKUmV0dXJuIHRoZSBGaW5kU3RhdCBjb2xsZWN0aW9uIG9m IHRoZSBzdGF0aXN0aWMuCgpPVVRQVVQ6CgpUaGUgRmluZFN0YXQgY29sbGVjdGlvbiBvZiB0aGUg c3RhdGlzdGljIGFzIGFuIGluc3RhbmNlIG9mCkByZWZ7ODgsLEZpbmRTdGF0Q29sbGVjdGlvbn0u CgpFWEFNUExFUzoKCkBleGFtcGxlCnNhZ2U6IGZpbmRzdGF0KDEpLmNvbGxlY3Rpb24oKSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBvcHRpb25hbCAtLSBpbnRlcm5ldApD YzAwMDE6IFBlcm11dGF0aW9ucwpAZW5kIGV4YW1wbGUKQGVuZCBkZWZmbgoKQGdlaW5kZXggZGF0 YSgpIChzYWdlLmRhdGFiYXNlcy5maW5kc3RhdC5GaW5kU3RhdFN0YXRpc3RpYyBtZXRob2QpCkBh bmNob3J7c2FnZS9kYXRhYmFzZXMvZmluZHN0YXQgc2FnZSBkYXRhYmFzZXMgZmluZHN0YXQgRmlu ZFN0YXRTdGF0aXN0aWMgZGF0YX1AYW5jaG9ye2ExfQpAZGVmZm4ge01ldGhvZH0gZGF0YSAoKQoK UmV0dXJuIHRoZSBkYXRhIHVzZWQgZm9yIHF1ZXJ5aW5nIHRoZSBGaW5kU3RhdCBkYXRhYmFzZS4K Ck9VVFBVVDoKClRoZSBkYXRhIHByb3ZpZGVkIGJ5IHRoZSB1c2VyIHRvIHF1ZXJ5IHRoZSBGaW5k U3RhdCBkYXRhYmFzZS4KV2hlbiB0aGUgZGF0YWJhc2Ugd2FzIHNlYXJjaGVkIHVzaW5nIGFuIGlk ZW50aWZpZXIsIEBjb2Rle2RhdGF9CmlzIEBjb2Rle05vbmV9LgoKRVhBTVBMRVM6CgpAZXhhbXBs ZQpzYWdlOiBTNCA9IFBlcm11dGF0aW9ucyg0KTsgZmluZHN0YXQoKFM0LCBbcGkubGVuZ3RoKCkg Zm9yIHBpIGluIFM0XSkpLmRhdGEoKSAjIG9wdGlvbmFsIC0tIGludGVybmV0ClsoU3RhbmRhcmQg cGVybXV0YXRpb25zIG9mIDQsCiAgWydbMSwgMiwgMywgNF0nLAogICAnWzEsIDIsIDQsIDNdJywK ICAgJ1sxLCAzLCAyLCA0XScsCiAgICdbMSwgMywgNCwgMl0nLAogICAnWzEsIDQsIDIsIDNdJywK ICAgJ1sxLCA0LCAzLCAyXScsCiAgICdbMiwgMSwgMywgNF0nLAogICAnWzIsIDEsIDQsIDNdJywK ICAgJ1syLCAzLCAxLCA0XScsCiAgICdbMiwgMywgNCwgMV0nLAogICAnWzIsIDQsIDEsIDNdJywK ICAgJ1syLCA0LCAzLCAxXScsCiAgICdbMywgMSwgMiwgNF0nLAogICAnWzMsIDEsIDQsIDJdJywK ICAgJ1szLCAyLCAxLCA0XScsCiAgICdbMywgMiwgNCwgMV0nLAogICAnWzMsIDQsIDEsIDJdJywK ICAgJ1szLCA0LCAyLCAxXScsCiAgICdbNCwgMSwgMiwgM10nLAogICAnWzQsIDEsIDMsIDJdJywK ICAgJ1s0LCAyLCAxLCAzXScsCiAgICdbNCwgMiwgMywgMV0nLAogICAnWzQsIDMsIDEsIDJdJywK ICAgJ1s0LCAzLCAyLCAxXSddLAogIFswLCAxLCAxLCAyLCAyLCAzLCAxLCAyLCAyLCAzLCAzLCA0 LCAyLCAzLCAzLCA0LCA0LCA1LCAzLCA0LCA0LCA1LCA1LCA2XSldCkBlbmQgZXhhbXBsZQpAZW5k IGRlZmZuCgpAZ2VpbmRleCBkZXNjcmlwdGlvbigpIChzYWdlLmRhdGFiYXNlcy5maW5kc3RhdC5G aW5kU3RhdFN0YXRpc3RpYyBtZXRob2QpCkBhbmNob3J7c2FnZS9kYXRhYmFzZXMvZmluZHN0YXQg c2FnZSBkYXRhYmFzZXMgZmluZHN0YXQgRmluZFN0YXRTdGF0aXN0aWMgZGVzY3JpcHRpb259QGFu Y2hvcnthMn0KQGRlZmZuIHtNZXRob2R9IGRlc2NyaXB0aW9uICgpCgpSZXR1cm4gdGhlIGRlc2Ny aXB0aW9uIG9mIHRoZSBzdGF0aXN0aWMuCgpPVVRQVVQ6CgpBIHN0cmluZywgd2hvc2UgZmlyc3Qg bGluZSBpcyB1c2VkIGFzIHRoZSBuYW1lIG9mIHRoZQpzdGF0aXN0aWMuCgpFWEFNUExFUzoKCkBl eGFtcGxlCnNhZ2U6IHByaW50KGZpbmRzdGF0KDEpLmRlc2NyaXB0aW9uKCkpICAgICMgb3B0aW9u YWwgLS0gaW50ZXJuZXQscmFuZG9tClRoZSBudW1iZXIgb2Ygd2F5cyB0byB3cml0ZSBhIHBlcm11 dGF0aW9uIGFzIGEgbWluaW1hbCBsZW5ndGggcHJvZHVjdCBvZiBzaW1wbGUgdHJhbnNwb3NpdGlv bnMuCjxCTEFOS0xJTkU+ClRoYXQgaXMsIHRoZSBudW1iZXIgb2YgcmVkdWNlZCB3b3JkcyBmb3Ig dGhlIHBlcm11dGF0aW9uLiAgRS5nLiwgdGhlcmUgYXJlIHR3byByZWR1Y2VkIHdvcmRzIGZvciAk WzMsMiwxXSA9ICgxLDIpKDIsMykoMSwyKSA9ICgyLDMpKDEsMikoMiwzKSQuCkBlbmQgZXhhbXBs ZQpAZW5kIGRlZmZuCgpAZ2VpbmRleCBlZGl0KCkgKHNhZ2UuZGF0YWJhc2VzLmZpbmRzdGF0LkZp bmRTdGF0U3RhdGlzdGljIG1ldGhvZCkKQGFuY2hvcntzYWdlL2RhdGFiYXNlcy9maW5kc3RhdCBz YWdlIGRhdGFiYXNlcyBmaW5kc3RhdCBGaW5kU3RhdFN0YXRpc3RpYyBlZGl0fUBhbmNob3J7YTN9 CkBkZWZmbiB7TWV0aG9kfSBlZGl0IChtYXhfdmFsdWVzPTEyMDApCgpPcGVuIHRoZSBGaW5kU3Rh dCB3ZWIgcGFnZSBmb3IgZWRpdGluZyB0aGUgc3RhdGlzdGljIGluIGEgYnJvd3Nlci4KCklOUFVU OgoKCkBpdGVtaXplIC0KCkBpdGVtIApAY29kZXttYXhfdmFsdWVzfSAtLSBpbnRlZ2VyIChkZWZh dWx0OgpAY29kZXtGSU5EU1RBVF9NQVhfU1VCTUlTU0lPTl9WQUxVRVN9KTsgaWYgQHJlZnthNCws ZnVuY3Rpb24oKX0gaXMKZGVmaW5lZCBhbmQgdGhlIHN0YXRpc3RpYyBpcyBhIG5ldyBzdGF0aXN0 aWMsIHVzZQpAcmVmezhjLCxGaW5kU3RhdENvbGxlY3Rpb24uZmlyc3RfdGVybXMoKX0gdG8gcHJv ZHVjZSBhdCBtb3N0CkBjb2Rle21heF92YWx1ZXN9IHRlcm1zLgpAZW5kIGl0ZW1pemUKCk9VVFBV VDoKCgpAaXRlbWl6ZSAtCgpAaXRlbSAKUmFpc2UgYW4gZXJyb3IgaWYgdGhlIHF1ZXJ5IGhhcyBh IG1hdGNoIHdpdGggbm8KaW50ZXJtZWRpYXRlIGNvbWJpbmF0b3JpYWwgbWFwcy4KQGVuZCBpdGVt aXplCgpFWEFNUExFUzoKCkBleGFtcGxlCnNhZ2U6IHMgPSBmaW5kc3RhdChEeWNrV29yZHMoNCks IGxhbWJkYSB4OiByYW5kaW50KDEsMTAwMCkpOyBzICAgICAgIyBvcHRpb25hbCAtLSBpbnRlcm5l dAphIG5ldyBzdGF0aXN0aWMgb24gQ2MwMDA1OiBEeWNrIHBhdGhzCkBlbmQgZXhhbXBsZQoKVGhl IGZvbGxvd2luZyB1c2VzIEBjb2Rle2xhbWJkYSB4OiByYW5kaW50KDEsMTAwMCl9IHRvIHByb2R1 Y2UKMTQgdGVybXMsIGJlY2F1c2UgQGNvZGV7bWluKER5Y2tXb3Jkcyg0KS5jYXJkaW5hbGl0eSgp LApGSU5EU1RBVF9NQVhfU1VCTUlTU0lPTl9WQUxVRVMpfSBpcyAxNDoKCkBleGFtcGxlCnNhZ2U6 IHMuc3VibWl0KCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIyBvcHRpb25hbCAtLSB3ZWJicm93c2VyCkBlbmQgZXhhbXBsZQpAZW5kIGRlZmZuCgpA Z2VpbmRleCBmaXJzdF90ZXJtcygpIChzYWdlLmRhdGFiYXNlcy5maW5kc3RhdC5GaW5kU3RhdFN0 YXRpc3RpYyBtZXRob2QpCkBhbmNob3J7c2FnZS9kYXRhYmFzZXMvZmluZHN0YXQgc2FnZSBkYXRh YmFzZXMgZmluZHN0YXQgRmluZFN0YXRTdGF0aXN0aWMgZmlyc3RfdGVybXN9QGFuY2hvcnthNX0K QGRlZmZuIHtNZXRob2R9IGZpcnN0X3Rlcm1zICgpCgpSZXR1cm4gdGhlIGZpcnN0IHRlcm1zIG9m IHRoZSBzdGF0aXN0aWMuCgpPVVRQVVQ6CgpBIGxpc3Qgb2YgcGFpcnMgb2YgdGhlIGZvcm0gQGNv ZGV7KG9iamVjdCwgdmFsdWUpfSB3aGVyZQpAY29kZXtvYmplY3R9IGlzIGEgc2FnZSBvYmplY3Qg cmVwcmVzZW50aW5nIGFuIGVsZW1lbnQgb2YgdGhlCmFwcHJvcHJpYXRlIGNvbGxlY3Rpb24gYW5k IEBjb2Rle3ZhbHVlfSBpcyBhbiBpbnRlZ2VyLiAgSWYgdGhlCnN0YXRpc3RpYyBpcyBpbiB0aGUg RmluZFN0YXQgZGF0YWJhc2UsIHRoZSBsaXN0IGNvbnRhaW5zCmV4YWN0bHkgdGhlIHBhaXJzIGlu IHRoZSBkYXRhYmFzZS4KCkVYQU1QTEVTOgoKQGV4YW1wbGUKc2FnZTogZmluZHN0YXQoMSkuZmly c3RfdGVybXMoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIG9wdGlvbmFs IC0tIGludGVybmV0LHJhbmRvbQpbKFsxXSwgMSksCiAoWzEsIDJdLCAxKSwKIChbMiwgMV0sIDEp LAogKFsxLCAyLCAzXSwgMSksCiAoWzEsIDMsIDJdLCAxKSwKIChbMiwgMSwgM10sIDEpLAogLi4u CkBlbmQgZXhhbXBsZQoKVEVTVFM6CgpAZXhhbXBsZQpzYWdlOiByID0gZmluZHN0YXQoQHtkOiBy YW5kaW50KDEsMTAwMCkgZm9yIGQgaW4gRHlja1dvcmRzKDQpQH0pOyByICAgIyBvcHRpb25hbCAt LSBpbnRlcm5ldAphIG5ldyBzdGF0aXN0aWMgb24gQ2MwMDA1OiBEeWNrIHBhdGhzCgpzYWdlOiBp c2luc3RhbmNlKHIuZmlyc3RfdGVybXMoKSwgbGlzdCkgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICMgb3B0aW9uYWwgLS0gaW50ZXJuZXQKVHJ1ZQpzYWdlOiBhbGwoaXNpbnN0YW5jZShlLCB0 dXBsZSkgYW5kIGxlbihlKT09MiBhbmQgaXNpbnN0YW5jZShlWzFdLCAoWlosIEludGVnZXIsIGlu dCkpIGZvciBlIGluIHIuZmlyc3RfdGVybXMoKSkgICAgICAjIG9wdGlvbmFsIC0tIGludGVybmV0 ClRydWUKQGVuZCBleGFtcGxlCkBlbmQgZGVmZm4KCkBnZWluZGV4IGZpcnN0X3Rlcm1zX3N0cigp IChzYWdlLmRhdGFiYXNlcy5maW5kc3RhdC5GaW5kU3RhdFN0YXRpc3RpYyBtZXRob2QpCkBhbmNo b3J7c2FnZS9kYXRhYmFzZXMvZmluZHN0YXQgc2FnZSBkYXRhYmFzZXMgZmluZHN0YXQgRmluZFN0 YXRTdGF0aXN0aWMgZmlyc3RfdGVybXNfc3RyfUBhbmNob3J7YTZ9CkBkZWZmbiB7TWV0aG9kfSBm aXJzdF90ZXJtc19zdHIgKCkKClJldHVybiB0aGUgZmlyc3QgdGVybXMgb2YgdGhlIHN0YXRpc3Rp YyBpbiB0aGUgZm9ybWF0IG5lZWRlZApmb3IgYSBGaW5kU3RhdCBxdWVyeS4KCk9VVFBVVDoKCkEg c3RyaW5nLCB3aGVyZSBlYWNoIGxpbmUgaXMgb2YgdGhlIGZvcm0gQGNvZGV7b2JqZWN0ID0+IHZh bHVlfSwKd2hlcmUgQGNvZGV7b2JqZWN0fSBpcyB0aGUgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9m IGFuIGVsZW1lbnQKb2YgdGhlIGFwcHJvcHJpYXRlIGNvbGxlY3Rpb24gYXMgdXNlZCBieSBGaW5k U3RhdCBhbmQgdmFsdWUKaXMgYW4gaW50ZWdlci4KCkVYQU1QTEVTOgoKQGV4YW1wbGUKc2FnZTog ZmluZHN0YXQoMSkuZmlyc3RfdGVybXNfc3RyKClbOjEwXSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAjIG9wdGlvbmFsIC0tIGludGVybmV0LHJhbmRvbQonWzFdID0+IDFcclxuJwpAZW5kIGV4 YW1wbGUKQGVuZCBkZWZmbgoKQGdlaW5kZXggZnVuY3Rpb24oKSAoc2FnZS5kYXRhYmFzZXMuZmlu ZHN0YXQuRmluZFN0YXRTdGF0aXN0aWMgbWV0aG9kKQpAYW5jaG9ye3NhZ2UvZGF0YWJhc2VzL2Zp bmRzdGF0IHNhZ2UgZGF0YWJhc2VzIGZpbmRzdGF0IEZpbmRTdGF0U3RhdGlzdGljIGZ1bmN0aW9u fUBhbmNob3J7YTR9CkBkZWZmbiB7TWV0aG9kfSBmdW5jdGlvbiAoKQoKUmV0dXJuIHRoZSBmdW5j dGlvbiB1c2VkIHRvIGNvbXB1dGUgdGhlIHZhbHVlcyBvZiB0aGUgc3RhdGlzdGljLgoKT1VUUFVU OgoKVGhlIGZ1bmN0aW9uIHVzZWQgdG8gY29tcHV0ZSB0aGUgdmFsdWVzIG9mIHRoZSBzdGF0aXN0 aWMsIG9yCkBjb2Rle05vbmV9LgoKRVhBTVBMRVM6CgpAZXhhbXBsZQpzYWdlOiBmaW5kc3RhdCgi UGVybXV0YXRpb25zIiwgbGFtYmRhIHBpOiBwaS5sZW5ndGgoKSkuZnVuY3Rpb24oKSAgICMgb3B0 aW9uYWwgLS0gaW50ZXJuZXQKLi4uCjxmdW5jdGlvbiA8bGFtYmRhPiBhdCAuLi4+CkBlbmQgZXhh bXBsZQpAZW5kIGRlZmZuCgpAZ2VpbmRleCBnZW5lcmF0aW5nX2Z1bmN0aW9ucygpIChzYWdlLmRh dGFiYXNlcy5maW5kc3RhdC5GaW5kU3RhdFN0YXRpc3RpYyBtZXRob2QpCkBhbmNob3J7c2FnZS9k YXRhYmFzZXMvZmluZHN0YXQgc2FnZSBkYXRhYmFzZXMgZmluZHN0YXQgRmluZFN0YXRTdGF0aXN0 aWMgZ2VuZXJhdGluZ19mdW5jdGlvbnN9QGFuY2hvcnthN30KQGRlZmZuIHtNZXRob2R9IGdlbmVy YXRpbmdfZnVuY3Rpb25zIChzdHlsZT0ncG9seW5vbWlhbCcpCgpSZXR1cm4gdGhlIGdlbmVyYXRp bmcgZnVuY3Rpb25zIG9mIEBjb2Rle3NlbGZ9IGluIGEgZGljdGlvbmFyeS4KClRoZSBrZXlzIG9m IHRoaXMgZGljdGlvbmFyeSBhcmUgdGhlIGxldmVscyBmb3Igd2hpY2ggdGhlCmdlbmVyYXRpbmcg ZnVuY3Rpb24gb2YgQGNvZGV7c2VsZn0gY2FuIGJlIGNvbXB1dGVkIGZyb20gdGhlIGRhdGEKb2Yg dGhpcyBzdGF0aXN0aWMsIGFuZCBlYWNoIHZhbHVlIHJlcHJlc2VudHMgYSBnZW5lcmF0aW5nCmZ1 bmN0aW9uIGZvciBvbmUgbGV2ZWwsIGFzIGEgcG9seW5vbWlhbCwgYXMgYSBkaWN0aW9uYXJ5LCBv ciBhcwphIGxpc3Qgb2YgY29lZmZpY2llbnRzLgoKSU5QVVQ6CgoKQGl0ZW1pemUgLQoKQGl0ZW0g CmEgc3RyaW5nIC0tIChkZWZhdWx0OiJwb2x5bm9taWFsIikgY2FuIGJlCiJwb2x5bm9taWFsIiwg ImRpY3Rpb25hcnkiLCBvciAibGlzdCIuCkBlbmQgaXRlbWl6ZQoKT1VUUFVUOgoKCkBpdGVtaXpl IC0KCkBpdGVtIAppZiBAY29kZXtzdHlsZX0gaXMgQGNvZGV7InBvbHlub21pYWwifSwgdGhlIGdl bmVyYXRpbmcgZnVuY3Rpb24gaXMKcmV0dXJuZWQgYXMgYSBwb2x5bm9taWFsLgoKQGl0ZW0gCmlm IEBjb2Rle3N0eWxlfSBpcyBAY29kZXsiZGljdGlvbmFyeSJ9LCB0aGUgZ2VuZXJhdGluZyBmdW5j dGlvbiBpcwpyZXR1cm5lZCBhcyBhIGRpY3Rpb25hcnkgcmVwcmVzZW50aW5nIHRoZSBtb25vbWlh bHMgb2YgdGhlCmdlbmVyYXRpbmcgZnVuY3Rpb24uCgpAaXRlbSAKaWYgQGNvZGV7c3R5bGV9IGlz IEBjb2RleyJsaXN0In0sIHRoZSBnZW5lcmF0aW5nIGZ1bmN0aW9uIGlzCnJldHVybmVkIGFzIGEg bGlzdCBvZiBjb2VmZmljaWVudHMgb2YgdGhlIGdlbmVyYXRpbmcgZnVuY3Rpb24uCkBlbmQgaXRl bWl6ZQoKRVhBTVBMRVM6CgpAZXhhbXBsZQpzYWdlOiBzdCA9IGZpbmRzdGF0KDE4KSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgb3B0aW9uYWwgLS0gaW50ZXJu ZXQKCnNhZ2U6IHN0LmdlbmVyYXRpbmdfZnVuY3Rpb25zKCkgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIyBvcHRpb25hbCAtLSBpbnRlcm5ldCxyYW5kb20KQHsyOiBxICsgMSwK IDM6IHFeMyArIDIqcV4yICsgMipxICsgMSwKIDQ6IHFeNiArIDMqcV41ICsgNSpxXjQgKyA2KnFe MyArIDUqcV4yICsgMypxICsgMSwKIDU6IHFeMTAgKyA0KnFeOSArIDkqcV44ICsgMTUqcV43ICsg MjAqcV42ICsgMjIqcV41ICsgMjAqcV40ICsgMTUqcV4zICsgOSpxXjIgKyA0KnEgKyAxLAogNjog cV4xNSArIDUqcV4xNCArIDE0KnFeMTMgKyAyOSpxXjEyICsgNDkqcV4xMSArIDcxKnFeMTAgKyA5 MCpxXjkgKyAxMDEqcV44ICsgMTAxKnFeNyArIDkwKnFeNiArIDcxKnFeNSArIDQ5KnFeNCArIDI5 KnFeMyArIDE0KnFeMiArIDUqcSArIDFAfQoKc2FnZTogc3QuZ2VuZXJhdGluZ19mdW5jdGlvbnMo c3R5bGU9ImRpY3Rpb25hcnkiKSAgICAgICAgICAgICAgICAgICAjIG9wdGlvbmFsIC0tIGludGVy bmV0LHJhbmRvbQpAezI6IEB7MDogMSwgMTogMUB9LAogMzogQHswOiAxLCAxOiAyLCAyOiAyLCAz OiAxQH0sCiA0OiBAezA6IDEsIDE6IDMsIDI6IDUsIDM6IDYsIDQ6IDUsIDU6IDMsIDY6IDFAfSwK IDU6IEB7MDogMSwgMTogNCwgMjogOSwgMzogMTUsIDQ6IDIwLCA1OiAyMiwgNjogMjAsIDc6IDE1 LCA4OiA5LCA5OiA0LCAxMDogMUB9LAogNjogQHswOiAxLAogIDE6IDUsCiAgMjogMTQsCiAgMzog MjksCiAgNDogNDksCiAgNTogNzEsCiAgNjogOTAsCiAgNzogMTAxLAogIDg6IDEwMSwKICA5OiA5 MCwKICAxMDogNzEsCiAgMTE6IDQ5LAogIDEyOiAyOSwKICAxMzogMTQsCiAgMTQ6IDUsCiAgMTU6 IDFAfUB9CgpzYWdlOiBzdC5nZW5lcmF0aW5nX2Z1bmN0aW9ucyhzdHlsZT0ibGlzdCIpICAgICAg ICAgICAgICAgICAgICAgICAgICMgb3B0aW9uYWwgLS0gaW50ZXJuZXQscmFuZG9tCkB7MjogWzEs IDFdLAogMzogWzEsIDIsIDIsIDFdLAogNDogWzEsIDMsIDUsIDYsIDUsIDMsIDFdLAogNTogWzEs IDQsIDksIDE1LCAyMCwgMjIsIDIwLCAxNSwgOSwgNCwgMV0sCiA2OiBbMSwgNSwgMTQsIDI5LCA0 OSwgNzEsIDkwLCAxMDEsIDEwMSwgOTAsIDcxLCA0OSwgMjksIDE0LCA1LCAxXUB9CkBlbmQgZXhh bXBsZQpAZW5kIGRlZmZuCgpAZ2VpbmRleCBpZCgpIChzYWdlLmRhdGFiYXNlcy5maW5kc3RhdC5G aW5kU3RhdFN0YXRpc3RpYyBtZXRob2QpCkBhbmNob3J7c2FnZS9kYXRhYmFzZXMvZmluZHN0YXQg c2FnZSBkYXRhYmFzZXMgZmluZHN0YXQgRmluZFN0YXRTdGF0aXN0aWMgaWR9QGFuY2hvcnthOH0K QGRlZmZuIHtNZXRob2R9IGlkICgpCgpSZXR1cm4gdGhlIEZpbmRTdGF0IGlkZW50aWZpZXIgb2Yg dGhlIHN0YXRpc3RpYy4KCk9VVFBVVDoKClRoZSBGaW5kU3RhdCBpZGVudGlmaWVyIG9mIHRoZSBz dGF0aXN0aWMgKG9yIDApLCBhcyBhbiBpbnRlZ2VyLgoKRVhBTVBMRVM6CgpAZXhhbXBsZQpzYWdl OiBmaW5kc3RhdCgxKS5pZCgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICMgb3B0aW9uYWwgLS0gaW50ZXJuZXQKMQpAZW5kIGV4YW1wbGUKQGVuZCBkZWZmbgoK QGdlaW5kZXggaWRfc3RyKCkgKHNhZ2UuZGF0YWJhc2VzLmZpbmRzdGF0LkZpbmRTdGF0U3RhdGlz dGljIG1ldGhvZCkKQGFuY2hvcntzYWdlL2RhdGFiYXNlcy9maW5kc3RhdCBzYWdlIGRhdGFiYXNl cyBmaW5kc3RhdCBGaW5kU3RhdFN0YXRpc3RpYyBpZF9zdHJ9QGFuY2hvcnthOX0KQGRlZmZuIHtN ZXRob2R9IGlkX3N0ciAoKQoKUmV0dXJuIHRoZSBGaW5kU3RhdCBpZGVudGlmaWVyIG9mIHRoZSBz dGF0aXN0aWMuCgpPVVRQVVQ6CgpUaGUgRmluZFN0YXQgaWRlbnRpZmllciBvZiB0aGUgc3RhdGlz dGljIChvciAnU3QwMDAwMDAnKSwgYXMgYSBzdHJpbmcuCgpFWEFNUExFUzoKCkBleGFtcGxlCnNh Z2U6IGZpbmRzdGF0KDEpLmlkX3N0cigpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIyBvcHRpb25hbCAtLSBpbnRlcm5ldAonU3QwMDAwMDEnCkBlbmQgZXhhbXBsZQpA ZW5kIGRlZmZuCgpAZ2VpbmRleCBtb2RpZmllZCgpIChzYWdlLmRhdGFiYXNlcy5maW5kc3RhdC5G aW5kU3RhdFN0YXRpc3RpYyBtZXRob2QpCkBhbmNob3J7c2FnZS9kYXRhYmFzZXMvZmluZHN0YXQg c2FnZSBkYXRhYmFzZXMgZmluZHN0YXQgRmluZFN0YXRTdGF0aXN0aWMgbW9kaWZpZWR9QGFuY2hv cnthYX0KQGRlZmZuIHtNZXRob2R9IG1vZGlmaWVkICgpCgpSZXR1cm4gd2hldGhlciB0aGUgc3Rh dGlzdGljIHdhcyBtb2RpZmllZC4KCk9VVFBVVDoKClRydWUsIGlmIHRoZSBzdGF0aXN0aWMgd2Fz IG1vZGlmaWVkIHVzaW5nCkByZWZ7ODEsLHNldF9kZXNjcmlwdGlvbigpfSwgQHJlZns4Miwsc2V0 X2NvZGUoKX0sCkByZWZ7ODMsLHNldF9yZWZlcmVuY2VzKCl9LCBldGMuICBGYWxzZSBvdGhlcndp c2UuCgpFWEFNUExFUzoKCkBleGFtcGxlCnNhZ2U6IGZpbmRzdGF0KDQxKS5zZXRfZGVzY3JpcHRp b24oIiIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBvcHRpb25hbCAtLSBpbnRlcm5l dApzYWdlOiBmaW5kc3RhdCg0MSkubW9kaWZpZWQoKSAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICMgb3B0aW9uYWwgLS0gaW50ZXJuZXQKVHJ1ZQpAZW5kIGV4YW1wbGUKQGVu ZCBkZWZmbgoKQGdlaW5kZXggbmFtZSgpIChzYWdlLmRhdGFiYXNlcy5maW5kc3RhdC5GaW5kU3Rh dFN0YXRpc3RpYyBtZXRob2QpCkBhbmNob3J7c2FnZS9kYXRhYmFzZXMvZmluZHN0YXQgc2FnZSBk YXRhYmFzZXMgZmluZHN0YXQgRmluZFN0YXRTdGF0aXN0aWMgbmFtZX1AYW5jaG9ye2FifQpAZGVm Zm4ge01ldGhvZH0gbmFtZSAoKQoKUmV0dXJuIHRoZSBuYW1lIG9mIHRoZSBzdGF0aXN0aWMuCgpP VVRQVVQ6CgpBIHN0cmluZywgd2hpY2ggaXMganVzdCB0aGUgZmlyc3QgbGluZSBvZiB0aGUgZGVz Y3JpcHRpb24gb2YKdGhlIHN0YXRpc3RpYy4KCkVYQU1QTEVTOgoKQGV4YW1wbGUKc2FnZTogZmlu ZHN0YXQoMSkubmFtZSgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAjIG9wdGlvbmFsIC0tIGludGVybmV0LHJhbmRvbQp1J1RoZSBudW1iZXIgb2Ygd2F5cyB0byB3 cml0ZSBhIHBlcm11dGF0aW9uIGFzIGEgbWluaW1hbCBsZW5ndGggcHJvZHVjdCBvZiBzaW1wbGUg dHJhbnNwb3NpdGlvbnMuJwpAZW5kIGV4YW1wbGUKQGVuZCBkZWZmbgoKQGdlaW5kZXggb2Vpc19z ZWFyY2goKSAoc2FnZS5kYXRhYmFzZXMuZmluZHN0YXQuRmluZFN0YXRTdGF0aXN0aWMgbWV0aG9k KQpAYW5jaG9ye3NhZ2UvZGF0YWJhc2VzL2ZpbmRzdGF0IHNhZ2UgZGF0YWJhc2VzIGZpbmRzdGF0 IEZpbmRTdGF0U3RhdGlzdGljIG9laXNfc2VhcmNofUBhbmNob3J7YWN9CkBkZWZmbiB7TWV0aG9k fSBvZWlzX3NlYXJjaCAoc2VhcmNoX3NpemU9MzIsIHZlcmJvc2U9VHJ1ZSkKClNlYXJjaCB0aGUg T0VJUyBmb3IgdGhlIGdlbmVyYXRpbmcgZnVuY3Rpb24gb2YgdGhlIHN0YXRpc3RpYy4KCklOUFVU OgoKCkBpdGVtaXplIC0KCkBpdGVtIApAY29kZXtzZWFyY2hfc2l6ZX0gKGRlZmF1bHQ6MzIpIHRo ZSBudW1iZXIgb2YgaW50ZWdlcnMgaW4gdGhlCnNlcXVlbmNlLiBJZiB0b28gYmlnLCB0aGUgT0VJ UyByZXN1bHQgaXMgY29ycnVwdGVkLgoKQGl0ZW0gCkBjb2Rle3ZlcmJvc2V9IChkZWZhdWx0OlRy dWUpIGlmIHRydWUsIHNvbWUgaW5mb3JtYXRpb24gYWJvdXQKdGhlIHNlYXJjaCBhcmUgcHJpbnRl ZC4KQGVuZCBpdGVtaXplCgpPVVRQVVQ6CgoKQGl0ZW1pemUgLQoKQGl0ZW0gCmEgdHVwbGUgb2Yg T0VJUyBzZXF1ZW5jZXMsIHNlZQpAcmVmezRjLCxzYWdlLmRhdGFiYXNlcy5vZWlzLk9FSVMuZmlu ZF9ieV9kZXNjcmlwdGlvbigpfSBmb3IgbW9yZQppbmZvcm1hdGlvbi4KQGVuZCBpdGVtaXplCgpF WEFNUExFUzoKCkBleGFtcGxlCnNhZ2U6IHN0ID0gZmluZHN0YXQoMTgpICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBvcHRpb25hbCAtLSBpbnRlcm5ldAoKc2Fn ZTogc3Qub2Vpc19zZWFyY2goKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAjIG9wdGlvbmFsIC0tIGludGVybmV0LHJhbmRvbQpTZWFyY2hpbmcgdGhlIE9FSVMg Zm9yICIxLDEgIDEsMiwyLDEgIDEsMyw1LDYsNSwzLDEgIDEsNCw5LDE1LDIwLDIyLDIwLDE1LDks NCwxICAxLDUsMTQsMjksNDksNzEsOTAsMTAxIgoKMDogQTAwODMwMjogVHJpYW5nbGUgb2YgTWFo b25pYW4gbnVtYmVycyBUKG4sayk6IGNvZWZmaWNpZW50cyBpbiBleHBhbnNpb24gb2YgUHJvZHVj dF9Ae2k9MC4ubi0xQH0gKDEgKyB4ICsgLi4uICsgeF5pKSwgd2hlcmUgayByYW5nZXMgZnJvbSAw IHRvIEEwMDAyMTcobi0xKS4KCnNhZ2U6IHN0Lm9laXNfc2VhcmNoKHNlYXJjaF9zaXplPTEzKSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBvcHRpb25hbCAtLSBpbnRlcm5ldCxyYW5k b20KU2VhcmNoaW5nIHRoZSBPRUlTIGZvciAiMSwxICAxLDIsMiwxICAxLDMsNSw2LDUsMywxIgoK MDogQTAwODMwMjogVHJpYW5nbGUgb2YgTWFob25pYW4gbnVtYmVycyBUKG4sayk6IGNvZWZmaWNp ZW50cyBpbiBleHBhbnNpb24gb2YgUHJvZHVjdF9Ae2k9MC4ubi0xQH0gKDEgKyB4ICsgLi4uICsg eF5pKSwgd2hlcmUgayByYW5nZXMgZnJvbSAwIHRvIEEwMDAyMTcobi0xKS4KMTogQTExNTU3MDog QXJyYXkgcmVhZCBieSByb3dzOiByb3cgbiAobj49IDEpIGdpdmVzIHRoZSBCZXR0aSBudW1iZXJz IGZvciB0aGUgbi10aCBlbGVtZW50IG9mIHRoZSBXZXlsIGdyb3VwIG9mIHR5cGUgQTMgKGluIEdv cmVza3kncyBzdGFuZGFyZCBvcmRlcmluZykuCjI6IEExODc0NDc6IEFycmF5IGZvciBhbGwgbXVs dGlzZXQgY2hvaWNlcyAobXVsdGlzZXQgcmVwZXRpdGlvbiBjbGFzcyByZXByZXNlbnRhdGl2ZXMg aW4gQWJyYW1vd2l0ei1TdGVndW4gb3JkZXIpLgpAZW5kIGV4YW1wbGUKQGVuZCBkZWZmbgoKQGdl aW5kZXggcmVmZXJlbmNlcygpIChzYWdlLmRhdGFiYXNlcy5maW5kc3RhdC5GaW5kU3RhdFN0YXRp c3RpYyBtZXRob2QpCkBhbmNob3J7c2FnZS9kYXRhYmFzZXMvZmluZHN0YXQgc2FnZSBkYXRhYmFz ZXMgZmluZHN0YXQgRmluZFN0YXRTdGF0aXN0aWMgcmVmZXJlbmNlc31AYW5jaG9ye2FkfQpAZGVm Zm4ge01ldGhvZH0gcmVmZXJlbmNlcyAoKQoKUmV0dXJuIHRoZSByZWZlcmVuY2VzIGFzc29jaWF0 ZWQgd2l0aCB0aGUgc3RhdGlzdGljLgoKT1VUUFVUOgoKQW4gaW5zdGFuY2Ugb2YgQHJlZns0OSws c2FnZS5kYXRhYmFzZXMub2Vpcy5GYW5jeVR1cGxlfSwgZWFjaAppdGVtIGNvcnJlc3BvbmRzIHRv IGEgcmVmZXJlbmNlLgoKQGNhcnRvdWNoZQpAcXVvdGF0aW9uIFRvZG8gClNpbmNlIHRoZSByZWZl cmVuY2VzIGluIHRoZSBkYXRhYmFzZSBhcmUgc29tZXRpbWVzIG5vdApmb3JtYXR0ZWQgcHJvcGVy bHksIHRoaXMgbWV0aG9kIGlzIHVucmVsaWFibGUuICBUaGUKc3RyaW5nIHJlcHJlc2VudGF0aW9u IGNhbiBiZSBvYnRhaW5lZCB2aWEKQGNvZGV7X3JlZmVyZW5jZXN9LgpAZW5kIHF1b3RhdGlvbgpA ZW5kIGNhcnRvdWNoZQoKRVhBTVBMRVM6CgpAZXhhbXBsZQpzYWdlOiBmaW5kc3RhdCgxKS5yZWZl cmVuY2VzKCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgb3B0aW9uYWwg LS0gaW50ZXJuZXQscmFuZG9tCjA6IFAuIEVkZWxtYW4gYW5kIEMuIEdyZWVuZSwgQmFsYW5jZWQg dGFibGVhdXgsIEFkdi4gaW4gTWF0aC4sIDYzICgxOTg3KSwgcHAuIDQyLTk5LgoxOiBbW09FSVM6 QTAwNTExOF1dCjI6IFtbb2VpczpBMjQ2ODY1XV0KQGVuZCBleGFtcGxlCkBlbmQgZGVmZm4KCkBn ZWluZGV4IHNldF9jb2RlKCkgKHNhZ2UuZGF0YWJhc2VzLmZpbmRzdGF0LkZpbmRTdGF0U3RhdGlz dGljIG1ldGhvZCkKQGFuY2hvcntzYWdlL2RhdGFiYXNlcy9maW5kc3RhdCBzYWdlIGRhdGFiYXNl cyBmaW5kc3RhdCBGaW5kU3RhdFN0YXRpc3RpYyBzZXRfY29kZX1AYW5jaG9yezgyfQpAZGVmZm4g e01ldGhvZH0gc2V0X2NvZGUgKHZhbHVlKQoKU2V0IHRoZSBjb2RlIGFzc29jaWF0ZWQgd2l0aCB0 aGUgc3RhdGlzdGljLgoKSU5QVVQ6CgoKQGl0ZW1pemUgLQoKQGl0ZW0gCmEgc3RyaW5nIC0tIGNv bnRyaWJ1dG9ycyBhcmUgZW5jb3VyYWdlZCB0byBzdWJtaXQgc2FnZSBjb2RlCmluIHRoZSBmb3Jt OgoKQGV4YW1wbGUKZGVmIHN0YXRpc3RpYyh4KToKICAgIC4uLgpAZW5kIGV4YW1wbGUKQGVuZCBp dGVtaXplCgpPVVRQVVQ6CgoKQGl0ZW1pemUgLQoKQGl0ZW0gClJhaXNlIGFuIGVycm9yIGlmIHRo ZSBxdWVyeSBoYXMgYSBtYXRjaCB3aXRoIG5vCmludGVybWVkaWF0ZSBjb21iaW5hdG9yaWFsIG1h cHMuCkBlbmQgaXRlbWl6ZQoKVGhpcyBpbmZvcm1hdGlvbiBpcyB1c2VkIHdoZW4gc3VibWl0dGlu ZyB0aGUgc3RhdGlzdGljIHdpdGgKQHJlZns4MCwsc3VibWl0KCl9LgoKRVhBTVBMRVM6CgpAZXhh bXBsZQpzYWdlOiBzID0gZmluZHN0YXQoWyhkLCByYW5kaW50KDEsMTAwMCkpIGZvciBkIGluIER5 Y2tXb3Jkcyg0KV0pICAgICMgb3B0aW9uYWwgLS0gaW50ZXJuZXQKc2FnZTogcy5zZXRfY29kZSgi ZGVmIHN0YXRpc3RpYyh4KTpcclxuICAgIHJldHVybiByYW5kaW50KDEsMTAwMCkiKSAjIG9wdGlv bmFsIC0tIGludGVybmV0CnNhZ2U6IHByaW50KHMuY29kZSgpKSAgICAgICAgICAgICAgICAgIyBv cHRpb25hbCAtLSBpbnRlcm5ldApkZWYgc3RhdGlzdGljKHgpOgogICAgcmV0dXJuIHJhbmRpbnQo MSwxMDAwKQpAZW5kIGV4YW1wbGUKQGVuZCBkZWZmbgoKQGdlaW5kZXggc2V0X2Rlc2NyaXB0aW9u KCkgKHNhZ2UuZGF0YWJhc2VzLmZpbmRzdGF0LkZpbmRTdGF0U3RhdGlzdGljIG1ldGhvZCkKQGFu Y2hvcntzYWdlL2RhdGFiYXNlcy9maW5kc3RhdCBzYWdlIGRhdGFiYXNlcyBmaW5kc3RhdCBGaW5k U3RhdFN0YXRpc3RpYyBzZXRfZGVzY3JpcHRpb259QGFuY2hvcns4MX0KQGRlZmZuIHtNZXRob2R9 IHNldF9kZXNjcmlwdGlvbiAodmFsdWUpCgpTZXQgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBzdGF0 aXN0aWMuCgpJTlBVVDoKCgpAaXRlbWl6ZSAtCgpAaXRlbSAKYSBzdHJpbmcgLS0gdGhlIG5hbWUg b2YgdGhlIHN0YXRpc3RpYyBmb2xsb3dlZCBieSBpdHMKZGVzY3JpcHRpb24gb24gYSBzZXBhcmF0 ZSBsaW5lLgpAZW5kIGl0ZW1pemUKCk9VVFBVVDoKCgpAaXRlbWl6ZSAtCgpAaXRlbSAKUmFpc2Ug YW4gZXJyb3IsIGlmIHRoZSBxdWVyeSBoYXMgYSBtYXRjaCB3aXRoIG5vCmludGVybWVkaWF0ZSBj b21iaW5hdG9yaWFsIG1hcHMuCkBlbmQgaXRlbWl6ZQoKVGhpcyBpbmZvcm1hdGlvbiBpcyB1c2Vk IHdoZW4gc3VibWl0dGluZyB0aGUgc3RhdGlzdGljIHdpdGgKQHJlZns4MCwsc3VibWl0KCl9LgoK RVhBTVBMRVM6CgpAZXhhbXBsZQpzYWdlOiBzID0gZmluZHN0YXQoWyhkLCByYW5kaW50KDEsMTAw MCkpIGZvciBkIGluIER5Y2tXb3Jkcyg0KV0pOyBzICMgb3B0aW9uYWwgLS0gaW50ZXJuZXQKYSBu ZXcgc3RhdGlzdGljIG9uIENjMDAwNTogRHljayBwYXRocwpzYWdlOiBzLnNldF9kZXNjcmlwdGlv bigiUmFuZG9tIHZhbHVlcyBvbiBEeWNrIHBhdGhzLlxyXG5Ob3QgZm9yIHN1Ym1pc3Npb24uIikg IyBvcHRpb25hbCAtLSBpbnRlcm5ldApzYWdlOiBzICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgb3B0aW9uYWwgLS0gaW50ZXJuZXQK YSBuZXcgc3RhdGlzdGljIG9uIENjMDAwNTogRHljayBwYXRocwpzYWdlOiBzLm5hbWUoKSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgb3B0aW9u YWwgLS0gaW50ZXJuZXQKJ1JhbmRvbSB2YWx1ZXMgb24gRHljayBwYXRocy4nCnNhZ2U6IHByaW50 KHMuZGVzY3JpcHRpb24oKSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIG9wdGlvbmFs IC0tIGludGVybmV0ClJhbmRvbSB2YWx1ZXMgb24gRHljayBwYXRocy4KTm90IGZvciBzdWJtaXNz aW9uLgpAZW5kIGV4YW1wbGUKQGVuZCBkZWZmbgoKQGdlaW5kZXggc2V0X3JlZmVyZW5jZXMoKSAo c2FnZS5kYXRhYmFzZXMuZmluZHN0YXQuRmluZFN0YXRTdGF0aXN0aWMgbWV0aG9kKQpAYW5jaG9y e3NhZ2UvZGF0YWJhc2VzL2ZpbmRzdGF0IHNhZ2UgZGF0YWJhc2VzIGZpbmRzdGF0IEZpbmRTdGF0 U3RhdGlzdGljIHNldF9yZWZlcmVuY2VzfUBhbmNob3J7ODN9CkBkZWZmbiB7TWV0aG9kfSBzZXRf cmVmZXJlbmNlcyAodmFsdWUpCgpTZXQgdGhlIHJlZmVyZW5jZXMgYXNzb2NpYXRlZCB3aXRoIHRo ZSBzdGF0aXN0aWMuCgpJTlBVVDoKCgpAaXRlbWl6ZSAtCgpAaXRlbSAKYSBzdHJpbmcgLS0gdGhl IGluZGl2aWR1YWwgcmVmZXJlbmNlcyBzaG91bGQgYmUgc2VwYXJhdGVkCmJ5IEZJTkRTVEFUX1NF UEFSQVRPUl9SRUZFUkVOQ0VTLCB3aGljaCBpcyAiXHJcbiIuCkBlbmQgaXRlbWl6ZQoKT1VUUFVU OgoKCkBpdGVtaXplIC0KCkBpdGVtIApSYWlzZSBhbiBlcnJvciwgaWYgdGhlIHF1ZXJ5IGhhcyBh IG1hdGNoIHdpdGggbm8KaW50ZXJtZWRpYXRlIGNvbWJpbmF0b3JpYWwgbWFwcy4KQGVuZCBpdGVt aXplCgpUaGlzIGluZm9ybWF0aW9uIGlzIHVzZWQgd2hlbiBzdWJtaXR0aW5nIHRoZSBzdGF0aXN0 aWMgd2l0aApAcmVmezgwLCxzdWJtaXQoKX0uCgpFWEFNUExFUzoKCkBleGFtcGxlCnNhZ2U6IHMg PSBmaW5kc3RhdChbKGQsIHJhbmRpbnQoMSwxMDAwKSkgZm9yIGQgaW4gRHlja1dvcmRzKDQpXSk7 IHMgIyBvcHRpb25hbCAtLSBpbnRlcm5ldAphIG5ldyBzdGF0aXN0aWMgb24gQ2MwMDA1OiBEeWNr IHBhdGhzCnNhZ2U6IHMuc2V0X3JlZmVyZW5jZXMoIlsxXSBUaGUgd29uZGVycyBvZiByYW5kb20g RHljayBwYXRocywgQW5vbnltb3VzIENvd2FyZCwgW1thclhpdjoxMTAyLjQyMjZdXS5cclxuWzJd IFtbb2VpczpBMDAwMDAxXV0iKSAgIyBvcHRpb25hbCAtLSBpbnRlcm5ldApzYWdlOiBzLnJlZmVy ZW5jZXMoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMg b3B0aW9uYWwgLS0gaW50ZXJuZXQKMDogWzFdIFRoZSB3b25kZXJzIG9mIHJhbmRvbSBEeWNrIHBh dGhzLCBBbm9ueW1vdXMgQ293YXJkLCBbW2FyWGl2OjExMDIuNDIyNl1dLgoxOiBbMl0gW1tvZWlz OkEwMDAwMDFdXQpAZW5kIGV4YW1wbGUKQGVuZCBkZWZmbgoKQGdlaW5kZXggc3VibWl0KCkgKHNh Z2UuZGF0YWJhc2VzLmZpbmRzdGF0LkZpbmRTdGF0U3RhdGlzdGljIG1ldGhvZCkKQGFuY2hvcntz YWdlL2RhdGFiYXNlcy9maW5kc3RhdCBzYWdlIGRhdGFiYXNlcyBmaW5kc3RhdCBGaW5kU3RhdFN0 YXRpc3RpYyBzdWJtaXR9QGFuY2hvcns4MH0KQGRlZmZuIHtNZXRob2R9IHN1Ym1pdCAobWF4X3Zh bHVlcz0xMjAwKQoKT3BlbiB0aGUgRmluZFN0YXQgd2ViIHBhZ2UgZm9yIGVkaXRpbmcgdGhlIHN0 YXRpc3RpYyBpbiBhIGJyb3dzZXIuCgpJTlBVVDoKCgpAaXRlbWl6ZSAtCgpAaXRlbSAKQGNvZGV7 bWF4X3ZhbHVlc30gLS0gaW50ZWdlciAoZGVmYXVsdDoKQGNvZGV7RklORFNUQVRfTUFYX1NVQk1J U1NJT05fVkFMVUVTfSk7IGlmIEByZWZ7YTQsLGZ1bmN0aW9uKCl9IGlzCmRlZmluZWQgYW5kIHRo ZSBzdGF0aXN0aWMgaXMgYSBuZXcgc3RhdGlzdGljLCB1c2UKQHJlZns4YywsRmluZFN0YXRDb2xs ZWN0aW9uLmZpcnN0X3Rlcm1zKCl9IHRvIHByb2R1Y2UgYXQgbW9zdApAY29kZXttYXhfdmFsdWVz fSB0ZXJtcy4KQGVuZCBpdGVtaXplCgpPVVRQVVQ6CgoKQGl0ZW1pemUgLQoKQGl0ZW0gClJhaXNl IGFuIGVycm9yIGlmIHRoZSBxdWVyeSBoYXMgYSBtYXRjaCB3aXRoIG5vCmludGVybWVkaWF0ZSBj b21iaW5hdG9yaWFsIG1hcHMuCkBlbmQgaXRlbWl6ZQoKRVhBTVBMRVM6CgpAZXhhbXBsZQpzYWdl OiBzID0gZmluZHN0YXQoRHlja1dvcmRzKDQpLCBsYW1iZGEgeDogcmFuZGludCgxLDEwMDApKTsg cyAgICAgICMgb3B0aW9uYWwgLS0gaW50ZXJuZXQKYSBuZXcgc3RhdGlzdGljIG9uIENjMDAwNTog RHljayBwYXRocwpAZW5kIGV4YW1wbGUKClRoZSBmb2xsb3dpbmcgdXNlcyBAY29kZXtsYW1iZGEg eDogcmFuZGludCgxLDEwMDApfSB0byBwcm9kdWNlCjE0IHRlcm1zLCBiZWNhdXNlIEBjb2Rle21p bihEeWNrV29yZHMoNCkuY2FyZGluYWxpdHkoKSwKRklORFNUQVRfTUFYX1NVQk1JU1NJT05fVkFM VUVTKX0gaXMgMTQ6CgpAZXhhbXBsZQpzYWdlOiBzLnN1Ym1pdCgpICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgb3B0aW9uYWwgLS0gd2ViYnJvd3Nl cgpAZW5kIGV4YW1wbGUKQGVuZCBkZWZmbgpAZW5kIGRlZmZuCgpAYyBub2RvY3Rlc3QKCkBub2Rl IEZyYW5rIEx1ZWJlY2sncyB0YWJsZXMgb2YgQ29ud2F5IHBvbHlub21pYWxzIG92ZXIgZmluaXRl IGZpZWxkcyxUYWJsZXMgb2YgemVyb3Mgb2YgdGhlIFJpZW1hbm4tWmV0YSBmdW5jdGlvbixGaW5k U3RhdCAtIHRoZSBDb21iaW5hdG9yaWFsIFN0YXRpc3RpYyBGaW5kZXIsVG9wCkBhbmNob3J7c2Fn ZS9kYXRhYmFzZXMvY29ud2F5IGZyYW5rLWx1ZWJlY2stcy10YWJsZXMtb2YtY29ud2F5LXBvbHlu b21pYWxzLW92ZXItZmluaXRlLWZpZWxkc31AYW5jaG9ye2FlfUBhbmNob3J7c2FnZS9kYXRhYmFz ZXMvY29ud2F5IHNhZ2UtZGF0YWJhc2VzLWNvbndheX1AYW5jaG9ye2FmfUBhbmNob3J7c2FnZS9k YXRhYmFzZXMvY29ud2F5IGRvY31AYW5jaG9ye2IwfQpAY2hhcHRlciBGcmFuayBMdWViZWNrJ3Mg dGFibGVzIG9mIENvbndheSBwb2x5bm9taWFscyBvdmVyIGZpbml0ZSBmaWVsZHMKCgpAYyBUaGlz IGZpbGUgaGFzIGJlZW4gYXV0b2dlbmVyYXRlZC4KQGFuY2hvcntzYWdlL2RhdGFiYXNlcy9jb253 YXkgbW9kdWxlLXNhZ2UgZGF0YWJhc2VzIGNvbndheX1AYW5jaG9yezB9CkBnZWluZGV4IHNhZ2Uu ZGF0YWJhc2VzLmNvbndheSAobW9kdWxlKQoKQGdlaW5kZXggQ29ud2F5UG9seW5vbWlhbHMgKGNs YXNzIGluIHNhZ2UuZGF0YWJhc2VzLmNvbndheSkKQGFuY2hvcntzYWdlL2RhdGFiYXNlcy9jb253 YXkgc2FnZSBkYXRhYmFzZXMgY29ud2F5IENvbndheVBvbHlub21pYWxzfUBhbmNob3J7YjF9CkBk ZWZmbiB7Q2xhc3N9IHNhZ2UuZGF0YWJhc2VzLmNvbndheS5Db253YXlQb2x5bm9taWFscwoKQmFz ZXM6IEBjb2Rle19hYmNvbGwuTWFwcGluZ30KCkluaXRpYWxpemUgdGhlIGRhdGFiYXNlLgoKVEVT VFM6CgpAZXhhbXBsZQpzYWdlOiBjID0gQ29ud2F5UG9seW5vbWlhbHMoKQpzYWdlOiBjCkZyYW5r IEx1ZWJlY2sncyBkYXRhYmFzZSBvZiBDb253YXkgcG9seW5vbWlhbHMKQGVuZCBleGFtcGxlCgpA Z2VpbmRleCBkZWdyZWVzKCkgKHNhZ2UuZGF0YWJhc2VzLmNvbndheS5Db253YXlQb2x5bm9taWFs cyBtZXRob2QpCkBhbmNob3J7c2FnZS9kYXRhYmFzZXMvY29ud2F5IHNhZ2UgZGF0YWJhc2VzIGNv bndheSBDb253YXlQb2x5bm9taWFscyBkZWdyZWVzfUBhbmNob3J7YjJ9CkBkZWZmbiB7TWV0aG9k fSBkZWdyZWVzIChwKQoKUmV0dXJuIHRoZSBsaXN0IG9mIGludGVnZXJzIEBjb2Rle259IGZvciB3 aGljaCB0aGUgZGF0YWJhc2Ugb2YgQ29ud2F5CnBvbHlub21pYWxzIGNvbnRhaW5zIHRoZSBwb2x5 bm9taWFsIG9mIGRlZ3JlZSBAY29kZXtufSBvdmVyIEBjb2Rle0dGKHApfS4KCkVYQU1QTEVTOgoK QGV4YW1wbGUKc2FnZTogYyA9IENvbndheVBvbHlub21pYWxzKCkKc2FnZTogYy5kZWdyZWVzKDYw ODIxKQpbMSwgMiwgMywgNF0Kc2FnZTogYy5kZWdyZWVzKG5leHRfcHJpbWUoMTBeNykpCltdCkBl bmQgZXhhbXBsZQpAZW5kIGRlZmZuCgpAZ2VpbmRleCBoYXNfcG9seW5vbWlhbCgpIChzYWdlLmRh dGFiYXNlcy5jb253YXkuQ29ud2F5UG9seW5vbWlhbHMgbWV0aG9kKQpAYW5jaG9ye3NhZ2UvZGF0 YWJhc2VzL2NvbndheSBzYWdlIGRhdGFiYXNlcyBjb253YXkgQ29ud2F5UG9seW5vbWlhbHMgaGFz X3BvbHlub21pYWx9QGFuY2hvcntiM30KQGRlZmZuIHtNZXRob2R9IGhhc19wb2x5bm9taWFsIChw LCBuKQoKUmV0dXJuIFRydWUgaWYgdGhlIGRhdGFiYXNlIG9mIENvbndheSBwb2x5bm9taWFscyBj b250YWlucyB0aGUKcG9seW5vbWlhbCBvZiBkZWdyZWUgQGNvZGV7bn0gb3ZlciBAY29kZXtHRihw KX0uCgpJTlBVVDoKCgpAaXRlbWl6ZSAtCgpAaXRlbSAKQGNvZGV7cH0gLS0gcHJpbWUgbnVtYmVy CgpAaXRlbSAKQGNvZGV7bn0gLS0gcG9zaXRpdmUgaW50ZWdlcgpAZW5kIGl0ZW1pemUKCkVYQU1Q TEVTOgoKQGV4YW1wbGUKc2FnZTogYyA9IENvbndheVBvbHlub21pYWxzKCkKc2FnZTogYy5oYXNf cG9seW5vbWlhbCg5NywgMTIpClRydWUKc2FnZTogYy5oYXNfcG9seW5vbWlhbCg2MDgyMSwgNSkK RmFsc2UKQGVuZCBleGFtcGxlCkBlbmQgZGVmZm4KCkBnZWluZGV4IHBvbHlub21pYWwoKSAoc2Fn ZS5kYXRhYmFzZXMuY29ud2F5LkNvbndheVBvbHlub21pYWxzIG1ldGhvZCkKQGFuY2hvcntzYWdl L2RhdGFiYXNlcy9jb253YXkgc2FnZSBkYXRhYmFzZXMgY29ud2F5IENvbndheVBvbHlub21pYWxz IHBvbHlub21pYWx9QGFuY2hvcntiNH0KQGRlZmZuIHtNZXRob2R9IHBvbHlub21pYWwgKHAsIG4p CgpSZXR1cm4gdGhlIENvbndheSBwb2x5bm9taWFsIG9mIGRlZ3JlZSBAY29kZXtufSBvdmVyIEBj b2Rle0dGKHApfSwKb3IgcmFpc2UgYSBSdW50aW1lRXJyb3IgaWYgdGhpcyBwb2x5bm9taWFsIGlz IG5vdCBpbiB0aGUKZGF0YWJhc2UuCgpAY2FydG91Y2hlCkBxdW90YXRpb24gTm90ZSAKU2VlIGFs c28gdGhlIGdsb2JhbCBmdW5jdGlvbiBAY29kZXtjb253YXlfcG9seW5vbWlhbH0gZm9yCmEgbW9y ZSB1c2VyLWZyaWVuZGx5IHdheSBvZiBhY2Nlc3NpbmcgdGhlIHBvbHlub21pYWwuCkBlbmQgcXVv dGF0aW9uCkBlbmQgY2FydG91Y2hlCgpJTlBVVDoKCgpAaXRlbWl6ZSAtCgpAaXRlbSAKQGNvZGV7 cH0gLS0gcHJpbWUgbnVtYmVyCgpAaXRlbSAKQGNvZGV7bn0gLS0gcG9zaXRpdmUgaW50ZWdlcgpA ZW5kIGl0ZW1pemUKCk9VVFBVVDoKCkxpc3Qgb2YgUHl0aG9uIGludCdzIGdpdmluZyB0aGUgY29l ZmZpY2llbnRzIG9mIHRoZSBjb3JyZXNwb25kaW5nCkNvbndheSBwb2x5bm9taWFsIGluIGFzY2Vu ZGluZyBvcmRlciBvZiBkZWdyZWUuCgpFWEFNUExFUzoKCkBleGFtcGxlCnNhZ2U6IGMgPSBDb253 YXlQb2x5bm9taWFscygpCnNhZ2U6IGMucG9seW5vbWlhbCgzLCAyMSkKKDEsIDIsIDAsIDIsIDAs IDEsIDIsIDAsIDIsIDAsIDIsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEpCnNhZ2U6 IGMucG9seW5vbWlhbCg5NywgMTI4KQpUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6 Ci4uLgpSdW50aW1lRXJyb3I6IENvbndheSBwb2x5bm9taWFsIG92ZXIgRl85NyBvZiBkZWdyZWUg MTI4IG5vdCBpbiBkYXRhYmFzZS4KQGVuZCBleGFtcGxlCkBlbmQgZGVmZm4KCkBnZWluZGV4IHBy aW1lcygpIChzYWdlLmRhdGFiYXNlcy5jb253YXkuQ29ud2F5UG9seW5vbWlhbHMgbWV0aG9kKQpA YW5jaG9ye3NhZ2UvZGF0YWJhc2VzL2NvbndheSBzYWdlIGRhdGFiYXNlcyBjb253YXkgQ29ud2F5 UG9seW5vbWlhbHMgcHJpbWVzfUBhbmNob3J7YjV9CkBkZWZmbiB7TWV0aG9kfSBwcmltZXMgKCkK ClJldHVybiB0aGUgbGlzdCBvZiBwcmltZSBudW1iZXJzIEBjb2Rle3B9IGZvciB3aGljaCB0aGUg ZGF0YWJhc2Ugb2YKQ29ud2F5IHBvbHlub21pYWxzIGNvbnRhaW5zIHBvbHlub21pYWxzIG92ZXIg QGNvZGV7R0YocCl9LgoKRVhBTVBMRVM6CgpAZXhhbXBsZQpzYWdlOiBjID0gQ29ud2F5UG9seW5v bWlhbHMoKQpzYWdlOiBQID0gYy5wcmltZXMoKQpzYWdlOiAyIGluIFAKVHJ1ZQpzYWdlOiBuZXh0 X3ByaW1lKDEwXjcpIGluIFAKRmFsc2UKQGVuZCBleGFtcGxlCkBlbmQgZGVmZm4KQGVuZCBkZWZm bgoKQGdlaW5kZXggRGljdEluTWFwcGluZyAoY2xhc3MgaW4gc2FnZS5kYXRhYmFzZXMuY29ud2F5 KQpAYW5jaG9ye3NhZ2UvZGF0YWJhc2VzL2NvbndheSBzYWdlIGRhdGFiYXNlcyBjb253YXkgRGlj dEluTWFwcGluZ31AYW5jaG9ye2I2fQpAZGVmZm4ge0NsYXNzfSBzYWdlLmRhdGFiYXNlcy5jb253 YXkuRGljdEluTWFwcGluZyAoZGljdCkKCkJhc2VzOiBAY29kZXtfYWJjb2xsLk1hcHBpbmd9CgpQ bGFjZXMgZGljdCBpbnRvIGEgbm9uLW11dGFibGUgbWFwcGluZy4KClRFU1RTOgoKQGV4YW1wbGUK c2FnZTogZnJvbSBzYWdlLmRhdGFiYXNlcy5jb253YXkgaW1wb3J0IERpY3RJbk1hcHBpbmcKc2Fn ZTogZCA9IEB7QH0Kc2FnZTogbSA9IERpY3RJbk1hcHBpbmcoZCk7IG0KQHtAfQpzYWdlOiBkWzBd ID0gMTsgbQpAezA6IDFAfQpzYWdlOiBtWzJdID0gMwpUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNh bGwgbGFzdCk6Ci4uLgpUeXBlRXJyb3I6ICdEaWN0SW5NYXBwaW5nJyBvYmplY3QgZG9lcyBub3Qg c3VwcG9ydCBpdGVtIGFzc2lnbm1lbnQKQGVuZCBleGFtcGxlCkBlbmQgZGVmZm4KCkBjIG5vZG9j dGVzdAoKQG5vZGUgVGFibGVzIG9mIHplcm9zIG9mIHRoZSBSaWVtYW5uLVpldGEgZnVuY3Rpb24s SWRlYWxzIGZyb20gdGhlIFN5bWJvbGljIERhdGEgcHJvamVjdCxGcmFuayBMdWViZWNrJ3MgdGFi bGVzIG9mIENvbndheSBwb2x5bm9taWFscyBvdmVyIGZpbml0ZSBmaWVsZHMsVG9wCkBhbmNob3J7 c2FnZS9kYXRhYmFzZXMvb2RseXprbyBzYWdlLWRhdGFiYXNlcy1vZGx5emtvfUBhbmNob3J7Yjd9 QGFuY2hvcntzYWdlL2RhdGFiYXNlcy9vZGx5emtvIGRvY31AYW5jaG9ye2I4fUBhbmNob3J7c2Fn ZS9kYXRhYmFzZXMvb2RseXprbyB0YWJsZXMtb2YtemVyb3Mtb2YtdGhlLXJpZW1hbm4temV0YS1m dW5jdGlvbn1AYW5jaG9ye2I5fQpAY2hhcHRlciBUYWJsZXMgb2YgemVyb3Mgb2YgdGhlIFJpZW1h bm4tWmV0YSBmdW5jdGlvbgoKCkBjIFRoaXMgZmlsZSBoYXMgYmVlbiBhdXRvZ2VuZXJhdGVkLgpA YW5jaG9ye3NhZ2UvZGF0YWJhc2VzL29kbHl6a28gbW9kdWxlLXNhZ2UgZGF0YWJhc2VzIG9kbHl6 a299QGFuY2hvcns3fQpAZ2VpbmRleCBzYWdlLmRhdGFiYXNlcy5vZGx5emtvIChtb2R1bGUpCgpB VVRIT1JTOgoKCkBpdGVtaXplIC0KCkBpdGVtIApXaWxsaWFtIFN0ZWluOiBpbml0aWFsIHZlcnNp b24KCkBpdGVtIApKZXJvZW4gRGVtZXllciAoMjAxNS0wMS0yMCk6IGNvbnZlcnQgQGNvZGV7ZGF0 YWJhc2Vfb2RseXprb196ZXRhfSB0bwpuZXctc3R5bGUgcGFja2FnZQpAZW5kIGl0ZW1pemUKCkBn ZWluZGV4IHpldGFfemVyb3MoKSAoaW4gbW9kdWxlIHNhZ2UuZGF0YWJhc2VzLm9kbHl6a28pCkBh bmNob3J7c2FnZS9kYXRhYmFzZXMvb2RseXprbyBzYWdlIGRhdGFiYXNlcyBvZGx5emtvIHpldGFf emVyb3N9QGFuY2hvcntiYX0KQGRlZmZuIHtGdW5jdGlvbn0gc2FnZS5kYXRhYmFzZXMub2RseXpr by56ZXRhX3plcm9zICgpCgpMaXN0IG9mIHRoZSBpbWFnaW5hcnkgcGFydHMgb2YgdGhlIGZpcnN0 IDIsMDAxLDA1MiB6ZXJvcyBvZiB0aGUKUmllbWFubiB6ZXRhIGZ1bmN0aW9uLCBhY2N1cmF0ZSB0 byB3aXRoaW4gNGUtOS4KCkluIG9yZGVyIHRvIHVzZSBAY29kZXt6ZXRhX3plcm9zKCl9LCB5b3Ug d2lsbCBuZWVkIHRvCmluc3RhbGwgdGhlIG9wdGlvbmFsIE9kbHl6a28gZGF0YWJhc2UgcGFja2Fn ZToKCkBleGFtcGxlCnNhZ2UgLWkgZGF0YWJhc2Vfb2RseXprb196ZXRhCkBlbmQgZXhhbXBsZQoK WW91IGNhbiBzZWUgYSBsaXN0IG9mIGFsbCBhdmFpbGFibGUgb3B0aW9uYWwgcGFja2FnZXMgd2l0 aApAY29kZXtzYWdlIC0tb3B0aW9uYWx9LgoKUkVGRVJFTkNFUzoKCgpAaXRlbWl6ZSAtCgpAaXRl bSAKQGluZGljYXRldXJse2h0dHA6Ly93d3cuZHRjLnVtbi5lZHUvfm9kbHl6a28vemV0YV90YWJs ZXMvaW5kZXguaHRtbH0KQGVuZCBpdGVtaXplCgpFWEFNUExFUzoKClRoZSBmb2xsb3dpbmcgZXhh bXBsZSBwcmludHMgdGhlIGltYWdpbmFyeSBwYXJ0IG9mIHRoZSAxM3RoCm5vbnRyaXZpYWwgemVy byBvZiB0aGUgUmllbWFubiB6ZXRhIGZ1bmN0aW9uOgoKQGV4YW1wbGUKc2FnZTogenogPSB6ZXRh X3plcm9zKCkgICMgb3B0aW9uYWwgLSBkYXRhYmFzZV9vZGx5emtvX3pldGEKc2FnZTogenpbMTJd ICAgICAgICAgICAgICMgb3B0aW9uYWwgLSBkYXRhYmFzZV9vZGx5emtvX3pldGEKNTkuMzQ3MDQ0 MDAzCnNhZ2U6IGxlbih6eikgICAgICAgICAgICAjIG9wdGlvbmFsIC0gZGF0YWJhc2Vfb2RseXpr b196ZXRhCjIwMDEwNTIKQGVuZCBleGFtcGxlCkBlbmQgZGVmZm4KCkBjIG5vZG9jdGVzdAoKQG5v ZGUgSWRlYWxzIGZyb20gdGhlIFN5bWJvbGljIERhdGEgcHJvamVjdCxDdW5uaW5naGFtIHRhYmxl LFRhYmxlcyBvZiB6ZXJvcyBvZiB0aGUgUmllbWFubi1aZXRhIGZ1bmN0aW9uLFRvcApAYW5jaG9y e3NhZ2UvZGF0YWJhc2VzL3N5bWJvbGljX2RhdGEgZG9jfUBhbmNob3J7YmJ9QGFuY2hvcntzYWdl L2RhdGFiYXNlcy9zeW1ib2xpY19kYXRhIGlkZWFscy1mcm9tLXRoZS1zeW1ib2xpYy1kYXRhLXBy b2plY3R9QGFuY2hvcntiY31AYW5jaG9ye3NhZ2UvZGF0YWJhc2VzL3N5bWJvbGljX2RhdGEgc2Fn ZS1kYXRhYmFzZXMtc3ltYm9saWMtZGF0YX1AYW5jaG9ye2JkfQpAY2hhcHRlciBJZGVhbHMgZnJv bSB0aGUgU3ltYm9saWMgRGF0YSBwcm9qZWN0CgoKQGMgVGhpcyBmaWxlIGhhcyBiZWVuIGF1dG9n ZW5lcmF0ZWQuCkBhbmNob3J7c2FnZS9kYXRhYmFzZXMvc3ltYm9saWNfZGF0YSBtb2R1bGUtc2Fn ZSBkYXRhYmFzZXMgc3ltYm9saWNfZGF0YX1AYW5jaG9ye2J9CkBnZWluZGV4IHNhZ2UuZGF0YWJh c2VzLnN5bWJvbGljX2RhdGEgKG1vZHVsZSkKClRoaXMgZmlsZSBpbXBsZW1lbnRzIGEgdGhpbiB3 cmFwcGVyIGZvciB0aGUgb3B0aW9uYWwgc3ltYm9saWMgZGF0YSBzZXQKb2YgaWRlYWxzIGFzIHB1 Ymxpc2hlZCBvbiBAaW5kaWNhdGV1cmx7aHR0cDovL3d3dy5zeW1ib2xpY2RhdGEub3JnfSAuIEZy b20gdGhlCnByb2plY3Qgd2Vic2l0ZToKCkBxdW90YXRpb24KCkZvciBkaWZmZXJlbnQgcHVycG9z ZXMgYWxnb3JpdGhtcyBhbmQgaW1wbGVtZW50YXRpb25zIGFyZSB0ZXN0ZWQKb24gY2VydGlmaWVk IGFuZCByZWxpYWJsZSBkYXRhLiBUaGUgZGV2ZWxvcG1lbnQgb2YgdG9vbHMgYW5kIGRhdGEKZm9y IHN1Y2ggdGVzdHMgaXMgdXN1YWxseSAnb3J0aG9nb25hbCcgdG8gdGhlIG1haW4KaW1wbGVtZW50 YXRpb24gZWZmb3J0cywgaXQgcmVxdWlyZXMgZGlmZmVyZW50IHNraWxscyBhbmQKdGVjaG5vbG9n aWVzIGFuZCBpcyBub3QgbG92ZWQgYnkgcHJvZ3JhbW1lcnMuIE9uIHRoZSBvdGhlciBoYW5kLApp biBtYW55IGNhc2VzIHRvb2xzIGFuZCBkYXRhIGNvdWxkIGVhc2lseSBiZSByZXVzZWQgLSB3aXRo IHNsaWdodAptb2RpZmljYXRpb25zIC0gYWNyb3NzIHNpbWlsYXIgcHJvamVjdHMuIFRoZSBTeW1i b2xpY0RhdGEgUHJvamVjdAppcyBzZXQgb3V0IHRvIGNvb3JkaW5hdGUgc3VjaCBlZmZvcnRzIHdp dGhpbiB0aGUgQ29tcHV0ZXIgQWxnZWJyYQpDb21tdW5pdHkuICBDb21tb25seSBjb2xsZWN0ZWQg Y2VydGlmaWVkIGFuZCByZWxpYWJsZSBkYXRhIGNhbgphbHNvIGJlIHVzZWQgdG8gY29tcGFyZSBv dGhlcndpc2UgaW5jb21wYXJhYmxlIGFwcHJvYWNoZXMsCmFsZ29yaXRobXMsIGFuZCBpbXBsZW1l bnRhdGlvbnMuIEJlbmNobWFyayBzdWl0ZXMgYW5kIENoYWxsZW5nZXMKZm9yIHN5bWJvbGljIGNv bXB1dGF0aW9ucyBhcmUgbm90IGFzIHdlbGwgZXN0YWJsaXNoZWQgYXMgaW4gb3RoZXIKYXJlYXMg b2YgY29tcHV0ZXIgc2NpZW5jZS4gVGhpcyBpcyBwcm9iYWJseSBkdWUgdG8gdGhlIGZhY3QgdGhh dAp0aGVyZSBhcmUgbm90IHlldCB3ZWxsIGFncmVlZCBhaW1zIG9mIHN1Y2ggYQpiZW5jaG1hcmtp bmcuIE5ldmVydGhlbGVzcyB2YXJpb3VzIChvZnRlbiBoaWdoIHF1YWxpdHkpIHNwZWNpYWwKYmVu Y2htYXJrcyBhcmUgc2NhdHRlcmVkIHRocm91Z2ggdGhlIGxpdGVyYXR1cmUuICBEdXJpbmcgdGhl IGxhc3QKeWVhcnMgZWZmb3J0cyB0b3dhcmQgY29sbGVjdGlvbiBvZiB0ZXN0IGRhdGEgZm9yIHN5 bWJvbGljCmNvbXB1dGF0aW9ucyB3ZXJlIGludGVuc2lmaWVkLiBUaGV5IGZvY3VzZWQgbWFpbmx5 IG9uIHRoZSBjcmVhdGlvbgpvZiBnZW5lcmFsIGJlbmNobWFya3MgZm9yIGRpZmZlcmVudCBhcmVh cyBvZiBzeW1ib2xpYyBjb21wdXRhdGlvbgphbmQgdGhlIGNvbGxlY3Rpb24gb2Ygc3VjaCBhY3Rp dml0aWVzIG9uIGRpZmZlcmVudCBXZWIgc2l0ZS4gIEZvcgpmdXJ0aGVyIHF1YWxpZmljYXRpb24g b2YgdGhlc2UgZWZmb3J0cyBpdCB3b3VsZCBiZSBvZiBncmVhdApiZW5lZml0IHRvIGNyZWF0ZSBh IGNvbW1vbmx5IGF2YWlsYWJsZSBkaWdpdGFsIGFyY2hpdmUgb2YgdGhlc2UKc3BlY2lhbCBiZW5j aG1hcmsgZGF0YSBzY2F0dGVyZWQgdGhyb3VnaCB0aGUgbGl0ZXJhdHVyZS4gVGhpcwp3b3VsZCBw cm92aWRlIHRoZSBjb21tdW5pdHkgd2l0aCBhbiBlbGVjdHJvbmljIHJlcG9zaXRvcnkgb2YKY2Vy dGlmaWVkIGRhdGEgdGhhdCBjb3VsZCBiZSBhZGRyZXNzZWQgYW5kIGV4dGVuZGVkIGR1cmluZyBm dXJ0aGVyCmRldmVsb3BtZW50LgpAZW5kIHF1b3RhdGlvbgoKRVhBTVBMRVM6CgpAZXhhbXBsZQpz YWdlOiBzZCA9IFN5bWJvbGljRGF0YSgpOyBzZCAjIG9wdGlvbmFsIC0gZGF0YWJhc2Vfc3ltYm9s aWNfZGF0YQpTeW1ib2xpY0RhdGEgd2l0aCAzNzIgaWRlYWxzCgpzYWdlOiBzZC5aZXJvRGltX19l eGFtcGxlXzEgIyBvcHRpb25hbCAtIGRhdGFiYXNlX3N5bWJvbGljX2RhdGEKSWRlYWwgKHgxXjIg KyB4Ml4yIC0gMTAsIHgxXjIgKyB4MSp4MiArIDIqeDJeMiAtIDE2KSBvZiBNdWx0aXZhcmlhdGUg UG9seW5vbWlhbCBSaW5nIGluIHgxLCB4MiBvdmVyIFJhdGlvbmFsIEZpZWxkCgpzYWdlOiBzZC5L YXRzdXJhXzMgIyBvcHRpb25hbCAtIGRhdGFiYXNlX3N5bWJvbGljX2RhdGEKSWRlYWwgKHUwICsg Mip1MSArIDIqdTIgKyAyKnUzIC0gMSwKICAgICAgIHUxXjIgKyAyKnUwKnUyICsgMip1MSp1MyAt IHUyLAogICAgICAgMip1MCp1MSArIDIqdTEqdTIgKyAyKnUyKnUzIC0gdTEsCiAgICAgICB1MF4y ICsgMip1MV4yICsgMip1Ml4yICsgMip1M14yIC0gdTApIG9mIE11bHRpdmFyaWF0ZSBQb2x5bm9t aWFsIFJpbmcgaW4gdTAsIHUxLCB1MiwgdTMgb3ZlciBSYXRpb25hbCBGaWVsZAoKc2FnZTogc2Qu Z2V0X2lkZWFsKCdLYXRzdXJhXzMnLEdGKDEyNyksJ2RlZ3JldmxleCcpICMgb3B0aW9uYWwgLSBk YXRhYmFzZV9zeW1ib2xpY19kYXRhCklkZWFsICh1MCArIDIqdTEgKyAyKnUyICsgMip1MyAtIDEs CiAgICAgICB1MV4yICsgMip1MCp1MiArIDIqdTEqdTMgLSB1MiwKICAgICAgIDIqdTAqdTEgKyAy KnUxKnUyICsgMip1Mip1MyAtIHUxLAogICAgICAgdTBeMiArIDIqdTFeMiArIDIqdTJeMiArIDIq dTNeMiAtIHUwKSBvZiBNdWx0aXZhcmlhdGUgUG9seW5vbWlhbCBSaW5nIGluIHUwLCB1MSwgdTIs IHUzIG92ZXIgRmluaXRlIEZpZWxkIG9mIHNpemUgMTI3CkBlbmQgZXhhbXBsZQoKQVVUSE9SUzoK CgpAaXRlbWl6ZSAtCgpAaXRlbSAKTWFydGluIEFsYnJlY2h0IDxAZW1haWx7bWFydGlucmFsYnJl Y2h0QEBnb29nbGVtYWlsLmNvbX0+CkBlbmQgaXRlbWl6ZQoKQGdlaW5kZXggU3ltYm9saWNEYXRh IChjbGFzcyBpbiBzYWdlLmRhdGFiYXNlcy5zeW1ib2xpY19kYXRhKQpAYW5jaG9ye3NhZ2UvZGF0 YWJhc2VzL3N5bWJvbGljX2RhdGEgc2FnZSBkYXRhYmFzZXMgc3ltYm9saWNfZGF0YSBTeW1ib2xp Y0RhdGF9QGFuY2hvcntiZX0KQGRlZmZuIHtDbGFzc30gc2FnZS5kYXRhYmFzZXMuc3ltYm9saWNf ZGF0YS5TeW1ib2xpY0RhdGEKCkRhdGFiYXNlIG9mIGlkZWFscyBhcyBkaXN0cmlidXRlZCBieSB0 aGUgVGhlIFN5bWJvbGljRGF0YSBQcm9qZWN0CihAaW5kaWNhdGV1cmx7aHR0cDovL3N5bWJvbGlj ZGF0YS5vcmd9KS4KClRoaXMgY2xhc3MgbmVlZHMgdGhlIG9wdGlvbmFsIEBjb2Rle2RhdGFiYXNl X3N5bWJvbGljX2RhdGF9IHBhY2thZ2UgdG8gYmUKaW5zdGFsbGVkLgoKQGdlaW5kZXggZ2V0X2lk ZWFsKCkgKHNhZ2UuZGF0YWJhc2VzLnN5bWJvbGljX2RhdGEuU3ltYm9saWNEYXRhIG1ldGhvZCkK QGFuY2hvcntzYWdlL2RhdGFiYXNlcy9zeW1ib2xpY19kYXRhIHNhZ2UgZGF0YWJhc2VzIHN5bWJv bGljX2RhdGEgU3ltYm9saWNEYXRhIGdldF9pZGVhbH1AYW5jaG9ye2JmfQpAZGVmZm4ge01ldGhv ZH0gZ2V0X2lkZWFsIChuYW1lLCBiYXNlX3Jpbmc9UmF0aW9uYWwgRmllbGQsIHRlcm1fb3JkZXI9 J2RlZ3JldmxleCcpCgpSZXR1cm5zIHRoZSBpZGVhbCBnaXZlbiBieSAnbmFtZScgb3ZlciB0aGUg YmFzZSByaW5nIGdpdmVuIGJ5CidiYXNlX3JpbmcnIGluIGEgcG9seW5vbWlhbCByaW5nIHdpdGgg dGhlIHRlcm0gb3JkZXIgZ2l2ZW4gYnkKJ3Rlcm1fb3JkZXInLgoKSU5QVVQ6CgoKQGl0ZW1pemUg LQoKQGl0ZW0gCkBjb2Rle25hbWV9IC0gbmFtZSBhcyBvbiB0aGUgc3ltYm9saWMgZGF0YSB3ZWJz aXRlCgpAaXRlbSAKQGNvZGV7YmFzZV9yaW5nfSAtIGJhc2UgcmluZyBmb3IgdGhlIHBvbHlub21p YWwgcmluZyAoZGVmYXVsdDogQGNvZGV7UVF9KQoKQGl0ZW0gCkBjb2Rle3Rlcm1fb3JkZXJ9IC0g dGVybSBvcmRlciBmb3IgdGhlIHBvbHlub21pYWwgcmluZyAoZGVmYXVsdDogQGNvZGV7ZGVncmV2 bGV4fSkKQGVuZCBpdGVtaXplCgpPVVRQVVQ6CgpAcXVvdGF0aW9uCgppZGVhbCBhcyBnaXZlbiBi eSBAY29kZXtuYW1lfSBpbiBAY29kZXtQb2x5bm9taWFsUmluZyhiYXNlX3JpbmcsdmFycyx0ZXJt X29yZGVyKX0KQGVuZCBxdW90YXRpb24KCkVYQU1QTEVTOgoKQGV4YW1wbGUKc2FnZTogc2QgPSBT eW1ib2xpY0RhdGEoKSAjIG9wdGlvbmFsIC0gZGF0YWJhc2Vfc3ltYm9saWNfZGF0YQpzYWdlOiBz ZC5nZXRfaWRlYWwoJ0thdHN1cmFfMycsR0YoMTI3KSwnZGVncmV2bGV4JykgIyBvcHRpb25hbCAt IGRhdGFiYXNlX3N5bWJvbGljX2RhdGEKSWRlYWwgKHUwICsgMip1MSArIDIqdTIgKyAyKnUzIC0g MSwKICAgICAgIHUxXjIgKyAyKnUwKnUyICsgMip1MSp1MyAtIHUyLAogICAgICAgMip1MCp1MSAr IDIqdTEqdTIgKyAyKnUyKnUzIC0gdTEsCiAgICAgICB1MF4yICsgMip1MV4yICsgMip1Ml4yICsg Mip1M14yIC0gdTApIG9mIE11bHRpdmFyaWF0ZSBQb2x5bm9taWFsIFJpbmcgaW4gdTAsIHUxLCB1 MiwgdTMgb3ZlciBGaW5pdGUgRmllbGQgb2Ygc2l6ZSAxMjcKQGVuZCBleGFtcGxlCkBlbmQgZGVm Zm4KCkBnZWluZGV4IHRyYWl0X25hbWVzKCkgKHNhZ2UuZGF0YWJhc2VzLnN5bWJvbGljX2RhdGEu U3ltYm9saWNEYXRhIG1ldGhvZCkKQGFuY2hvcntzYWdlL2RhdGFiYXNlcy9zeW1ib2xpY19kYXRh IHNhZ2UgZGF0YWJhc2VzIHN5bWJvbGljX2RhdGEgU3ltYm9saWNEYXRhIHRyYWl0X25hbWVzfUBh bmNob3J7YzB9CkBkZWZmbiB7TWV0aG9kfSB0cmFpdF9uYW1lcyAoKQoKRVhBTVBMRVM6CgpAZXhh bXBsZQpzYWdlOiBzZCA9IFN5bWJvbGljRGF0YSgpICMgb3B0aW9uYWwgLSBkYXRhYmFzZV9zeW1i b2xpY19kYXRhCnNhZ2U6IHNvcnRlZChzZC50cmFpdF9uYW1lcygpKVs6MTBdICMgb3B0aW9uYWwg LSBkYXRhYmFzZV9zeW1ib2xpY19kYXRhClsnQmpvZXJrXzgnLAogJ0Jyb25zdGVpbi04NicsCiAn QnVjaGJlcmdlci04NycsCiAnQnV0Y2hlcicsCiAnQ2FwcmFzc2UnLAogJ0Nhc3NvdScsCiAnQ29o bl8yJywKICdDdXJ2ZXNfX2N1cnZlMTBfMjAnLAogJ0N1cnZlc19fY3VydmUxMF8yMCcsCiAnQ3Vy dmVzX19jdXJ2ZTEwXzMwJ10KQGVuZCBleGFtcGxlCkBlbmQgZGVmZm4KQGVuZCBkZWZmbgoKQGMg bm9kb2N0ZXN0CgpAbm9kZSBDdW5uaW5naGFtIHRhYmxlLERhdGFiYXNlIG9mIEhpbGJlcnQgUG9s eW5vbWlhbHMsSWRlYWxzIGZyb20gdGhlIFN5bWJvbGljIERhdGEgcHJvamVjdCxUb3AKQGFuY2hv cntzYWdlL2RhdGFiYXNlcy9jdW5uaW5naGFtX3RhYmxlcyBzYWdlLWRhdGFiYXNlcy1jdW5uaW5n aGFtLXRhYmxlc31AYW5jaG9ye2MxfUBhbmNob3J7c2FnZS9kYXRhYmFzZXMvY3VubmluZ2hhbV90 YWJsZXMgZG9jfUBhbmNob3J7YzJ9QGFuY2hvcntzYWdlL2RhdGFiYXNlcy9jdW5uaW5naGFtX3Rh YmxlcyBjdW5uaW5naGFtLXRhYmxlfUBhbmNob3J7YzN9CkBjaGFwdGVyIEN1bm5pbmdoYW0gdGFi bGUKCgpAYyBUaGlzIGZpbGUgaGFzIGJlZW4gYXV0b2dlbmVyYXRlZC4KQGFuY2hvcntzYWdlL2Rh dGFiYXNlcy9jdW5uaW5naGFtX3RhYmxlcyBtb2R1bGUtc2FnZSBkYXRhYmFzZXMgY3VubmluZ2hh bV90YWJsZXN9QGFuY2hvcnsyfQpAZ2VpbmRleCBzYWdlLmRhdGFiYXNlcy5jdW5uaW5naGFtX3Rh YmxlcyAobW9kdWxlKQoKQGdlaW5kZXggY3VubmluZ2hhbV9wcmltZV9mYWN0b3JzKCkgKGluIG1v ZHVsZSBzYWdlLmRhdGFiYXNlcy5jdW5uaW5naGFtX3RhYmxlcykKQGFuY2hvcntzYWdlL2RhdGFi YXNlcy9jdW5uaW5naGFtX3RhYmxlcyBzYWdlIGRhdGFiYXNlcyBjdW5uaW5naGFtX3RhYmxlcyBj dW5uaW5naGFtX3ByaW1lX2ZhY3RvcnN9QGFuY2hvcntjNH0KQGRlZmZuIHtGdW5jdGlvbn0gc2Fn ZS5kYXRhYmFzZXMuY3VubmluZ2hhbV90YWJsZXMuY3VubmluZ2hhbV9wcmltZV9mYWN0b3JzICgp CgpMaXN0IG9mIGFsbCB0aGUgcHJpbWUgbnVtYmVycyBvY2N1cmluZyBpbiB0aGUgc28gY2FsbGVk IEN1bm5pbmdoYW0gdGFibGUuClRoZXkgb2NjdXIgaW4gdGhlIGZhY3Rvcml6YXRpb24gb2YgbnVt YmVycyBvZiB0eXBlIEBtYXRoe2JebisxfSBvciBAbWF0aHtiXm4tMX0gd2l0aCBAbWF0aHtiIFxp biBcQHsyQGNvbW1he30zQGNvbW1he301QGNvbW1he302QGNvbW1he303QGNvbW1he30xMEBjb21t YXt9MTFAY29tbWF7fTEyXEB9fS4KRGF0YSBmcm9tIEBpbmRpY2F0ZXVybHtodHRwOi8vY2FnZS51 Z2VudC5iZS9+amRlbWV5ZXIvY3VubmluZ2hhbS99CkBlbmQgZGVmZm4KCkBjIG5vZG9jdGVzdAoK QG5vZGUgRGF0YWJhc2Ugb2YgSGlsYmVydCBQb2x5bm9taWFscyxEYXRhYmFzZSBvZiBNb2R1bGFy IFBvbHlub21pYWxzLEN1bm5pbmdoYW0gdGFibGUsVG9wCkBhbmNob3J7c2FnZS9kYXRhYmFzZXMv ZGJfY2xhc3NfcG9seW5vbWlhbHMgc2FnZS1kYXRhYmFzZXMtZGItY2xhc3MtcG9seW5vbWlhbHN9 QGFuY2hvcntjNX1AYW5jaG9ye3NhZ2UvZGF0YWJhc2VzL2RiX2NsYXNzX3BvbHlub21pYWxzIGRv Y31AYW5jaG9ye2M2fUBhbmNob3J7c2FnZS9kYXRhYmFzZXMvZGJfY2xhc3NfcG9seW5vbWlhbHMg ZGF0YWJhc2Utb2YtaGlsYmVydC1wb2x5bm9taWFsc31AYW5jaG9ye2M3fQpAY2hhcHRlciBEYXRh YmFzZSBvZiBIaWxiZXJ0IFBvbHlub21pYWxzCgoKQGMgVGhpcyBmaWxlIGhhcyBiZWVuIGF1dG9n ZW5lcmF0ZWQuCkBhbmNob3J7c2FnZS9kYXRhYmFzZXMvZGJfY2xhc3NfcG9seW5vbWlhbHMgbW9k dWxlLXNhZ2UgZGF0YWJhc2VzIGRiX2NsYXNzX3BvbHlub21pYWxzfUBhbmNob3J7M30KQGdlaW5k ZXggc2FnZS5kYXRhYmFzZXMuZGJfY2xhc3NfcG9seW5vbWlhbHMgKG1vZHVsZSkKCkBnZWluZGV4 IEF0a2luQ2xhc3NQb2x5bm9taWFsRGF0YWJhc2UgKGNsYXNzIGluIHNhZ2UuZGF0YWJhc2VzLmRi X2NsYXNzX3BvbHlub21pYWxzKQpAYW5jaG9ye3NhZ2UvZGF0YWJhc2VzL2RiX2NsYXNzX3BvbHlu b21pYWxzIHNhZ2UgZGF0YWJhc2VzIGRiX2NsYXNzX3BvbHlub21pYWxzIEF0a2luQ2xhc3NQb2x5 bm9taWFsRGF0YWJhc2V9QGFuY2hvcntjOH0KQGRlZmZuIHtDbGFzc30gc2FnZS5kYXRhYmFzZXMu ZGJfY2xhc3NfcG9seW5vbWlhbHMuQXRraW5DbGFzc1BvbHlub21pYWxEYXRhYmFzZQoKQmFzZXM6 IEByZWZ7YzksLHNhZ2UuZGF0YWJhc2VzLmRiX2NsYXNzX3BvbHlub21pYWxzLkNsYXNzUG9seW5v bWlhbERhdGFiYXNlfQoKVGhlIGRhdGFiYXNlIG9mIEF0a2luIGNsYXNzIHBvbHlub21pYWxzLgpA ZW5kIGRlZmZuCgpAZ2VpbmRleCBDbGFzc1BvbHlub21pYWxEYXRhYmFzZSAoY2xhc3MgaW4gc2Fn ZS5kYXRhYmFzZXMuZGJfY2xhc3NfcG9seW5vbWlhbHMpCkBhbmNob3J7c2FnZS9kYXRhYmFzZXMv ZGJfY2xhc3NfcG9seW5vbWlhbHMgc2FnZSBkYXRhYmFzZXMgZGJfY2xhc3NfcG9seW5vbWlhbHMg Q2xhc3NQb2x5bm9taWFsRGF0YWJhc2V9QGFuY2hvcntjOX0KQGRlZmZuIHtDbGFzc30gc2FnZS5k YXRhYmFzZXMuZGJfY2xhc3NfcG9seW5vbWlhbHMuQ2xhc3NQb2x5bm9taWFsRGF0YWJhc2UKQGVu ZCBkZWZmbgoKQGdlaW5kZXggRGVkZWtpbmRFdGFDbGFzc1BvbHlub21pYWxEYXRhYmFzZSAoY2xh c3MgaW4gc2FnZS5kYXRhYmFzZXMuZGJfY2xhc3NfcG9seW5vbWlhbHMpCkBhbmNob3J7c2FnZS9k YXRhYmFzZXMvZGJfY2xhc3NfcG9seW5vbWlhbHMgc2FnZSBkYXRhYmFzZXMgZGJfY2xhc3NfcG9s eW5vbWlhbHMgRGVkZWtpbmRFdGFDbGFzc1BvbHlub21pYWxEYXRhYmFzZX1AYW5jaG9ye2NhfQpA ZGVmZm4ge0NsYXNzfSBzYWdlLmRhdGFiYXNlcy5kYl9jbGFzc19wb2x5bm9taWFscy5EZWRla2lu ZEV0YUNsYXNzUG9seW5vbWlhbERhdGFiYXNlCgpCYXNlczogQHJlZntjOSwsc2FnZS5kYXRhYmFz ZXMuZGJfY2xhc3NfcG9seW5vbWlhbHMuQ2xhc3NQb2x5bm9taWFsRGF0YWJhc2V9CgpUaGUgZGF0 YWJhc2Ugb2YgRGVkZWtpbmQgZXRhIGNsYXNzIHBvbHlub21pYWxzLgpAZW5kIGRlZmZuCgpAZ2Vp bmRleCBIaWxiZXJ0Q2xhc3NQb2x5bm9taWFsRGF0YWJhc2UgKGNsYXNzIGluIHNhZ2UuZGF0YWJh c2VzLmRiX2NsYXNzX3BvbHlub21pYWxzKQpAYW5jaG9ye3NhZ2UvZGF0YWJhc2VzL2RiX2NsYXNz X3BvbHlub21pYWxzIHNhZ2UgZGF0YWJhc2VzIGRiX2NsYXNzX3BvbHlub21pYWxzIEhpbGJlcnRD bGFzc1BvbHlub21pYWxEYXRhYmFzZX1AYW5jaG9ye2NifQpAZGVmZm4ge0NsYXNzfSBzYWdlLmRh dGFiYXNlcy5kYl9jbGFzc19wb2x5bm9taWFscy5IaWxiZXJ0Q2xhc3NQb2x5bm9taWFsRGF0YWJh c2UKCkJhc2VzOiBAcmVme2M5LCxzYWdlLmRhdGFiYXNlcy5kYl9jbGFzc19wb2x5bm9taWFscy5D bGFzc1BvbHlub21pYWxEYXRhYmFzZX0KClRoZSBkYXRhYmFzZSBvZiBIaWxiZXJ0IGNsYXNzIHBv bHlub21pYWxzLgoKRVhBTVBMRVM6CgpAZXhhbXBsZQpzYWdlOiBkYiA9IEhpbGJlcnRDbGFzc1Bv bHlub21pYWxEYXRhYmFzZSgpCnNhZ2U6IGRiWy00XSAgICAgICAgICAgICAgICAgICAgICMgb3B0 aW9uYWwgLSBkYXRhYmFzZV9rb2hlbAp4IC0gMTcyOApzYWdlOiBkYlstN10gICAgICAgICAgICAg ICAgICAgICAjIG9wdGlvbmFsIC0gZGF0YWJhc2Vfa29oZWwKeCArIDMzNzUKc2FnZTogZiA9IGRi Wy0yM107IGYgICAgICAgICAgICAgIyBvcHRpb25hbCAtIGRhdGFiYXNlX2tvaGVsCnheMyArIDM0 OTE3NTAqeF4yIC0gNTE1MTI5Njg3NSp4ICsgMTI3NzE4ODA4NTkzNzUKc2FnZTogZi5kaXNjcmlt aW5hbnQoKS5mYWN0b3IoKSAgIyBvcHRpb25hbCAtIGRhdGFiYXNlX2tvaGVsCi0xICogNV4xOCAq IDdeMTIgKiAxMV40ICogMTdeMiAqIDE5XjIgKiAyMwpzYWdlOiBkYlstMjNdICAgICAgICAgICAg ICAgICAgICAjIG9wdGlvbmFsIC0gZGF0YWJhc2Vfa29oZWwKeF4zICsgMzQ5MTc1MCp4XjIgLSA1 MTUxMjk2ODc1KnggKyAxMjc3MTg4MDg1OTM3NQpAZW5kIGV4YW1wbGUKQGVuZCBkZWZmbgoKQGdl aW5kZXggV2ViZXJDbGFzc1BvbHlub21pYWxEYXRhYmFzZSAoY2xhc3MgaW4gc2FnZS5kYXRhYmFz ZXMuZGJfY2xhc3NfcG9seW5vbWlhbHMpCkBhbmNob3J7c2FnZS9kYXRhYmFzZXMvZGJfY2xhc3Nf cG9seW5vbWlhbHMgc2FnZSBkYXRhYmFzZXMgZGJfY2xhc3NfcG9seW5vbWlhbHMgV2ViZXJDbGFz c1BvbHlub21pYWxEYXRhYmFzZX1AYW5jaG9ye2NjfQpAZGVmZm4ge0NsYXNzfSBzYWdlLmRhdGFi YXNlcy5kYl9jbGFzc19wb2x5bm9taWFscy5XZWJlckNsYXNzUG9seW5vbWlhbERhdGFiYXNlCgpC YXNlczogQHJlZntjOSwsc2FnZS5kYXRhYmFzZXMuZGJfY2xhc3NfcG9seW5vbWlhbHMuQ2xhc3NQ b2x5bm9taWFsRGF0YWJhc2V9CgpUaGUgZGF0YWJhc2Ugb2YgV2ViZXIgY2xhc3MgcG9seW5vbWlh bHMuCkBlbmQgZGVmZm4KCkBjIG5vZG9jdGVzdAoKQG5vZGUgRGF0YWJhc2Ugb2YgTW9kdWxhciBQ b2x5bm9taWFscyxJbmRpY2VzIGFuZCBUYWJsZXMsRGF0YWJhc2Ugb2YgSGlsYmVydCBQb2x5bm9t aWFscyxUb3AKQGFuY2hvcntzYWdlL2RhdGFiYXNlcy9kYl9tb2R1bGFyX3BvbHlub21pYWxzIGRh dGFiYXNlLW9mLW1vZHVsYXItcG9seW5vbWlhbHN9QGFuY2hvcntjZH1AYW5jaG9ye3NhZ2UvZGF0 YWJhc2VzL2RiX21vZHVsYXJfcG9seW5vbWlhbHMgZG9jfUBhbmNob3J7Y2V9QGFuY2hvcntzYWdl L2RhdGFiYXNlcy9kYl9tb2R1bGFyX3BvbHlub21pYWxzIHNhZ2UtZGF0YWJhc2VzLWRiLW1vZHVs YXItcG9seW5vbWlhbHN9QGFuY2hvcntjZn0KQGNoYXB0ZXIgRGF0YWJhc2Ugb2YgTW9kdWxhciBQ b2x5bm9taWFscwoKCkBjIFRoaXMgZmlsZSBoYXMgYmVlbiBhdXRvZ2VuZXJhdGVkLgpAYW5jaG9y e3NhZ2UvZGF0YWJhc2VzL2RiX21vZHVsYXJfcG9seW5vbWlhbHMgbW9kdWxlLXNhZ2UgZGF0YWJh c2VzIGRiX21vZHVsYXJfcG9seW5vbWlhbHN9QGFuY2hvcns0fQpAZ2VpbmRleCBzYWdlLmRhdGFi YXNlcy5kYl9tb2R1bGFyX3BvbHlub21pYWxzIChtb2R1bGUpCgpAZ2VpbmRleCBBdGtpbk1vZHVs YXJDb3JyZXNwb25kZW5jZURhdGFiYXNlIChjbGFzcyBpbiBzYWdlLmRhdGFiYXNlcy5kYl9tb2R1 bGFyX3BvbHlub21pYWxzKQpAYW5jaG9ye3NhZ2UvZGF0YWJhc2VzL2RiX21vZHVsYXJfcG9seW5v bWlhbHMgc2FnZSBkYXRhYmFzZXMgZGJfbW9kdWxhcl9wb2x5bm9taWFscyBBdGtpbk1vZHVsYXJD b3JyZXNwb25kZW5jZURhdGFiYXNlfUBhbmNob3J7ZDB9CkBkZWZmbiB7Q2xhc3N9IHNhZ2UuZGF0 YWJhc2VzLmRiX21vZHVsYXJfcG9seW5vbWlhbHMuQXRraW5Nb2R1bGFyQ29ycmVzcG9uZGVuY2VE YXRhYmFzZQoKQmFzZXM6IEByZWZ7ZDEsLHNhZ2UuZGF0YWJhc2VzLmRiX21vZHVsYXJfcG9seW5v bWlhbHMuTW9kdWxhckNvcnJlc3BvbmRlbmNlRGF0YWJhc2V9CkBlbmQgZGVmZm4KCkBnZWluZGV4 IEF0a2luTW9kdWxhclBvbHlub21pYWxEYXRhYmFzZSAoY2xhc3MgaW4gc2FnZS5kYXRhYmFzZXMu ZGJfbW9kdWxhcl9wb2x5bm9taWFscykKQGFuY2hvcntzYWdlL2RhdGFiYXNlcy9kYl9tb2R1bGFy X3BvbHlub21pYWxzIHNhZ2UgZGF0YWJhc2VzIGRiX21vZHVsYXJfcG9seW5vbWlhbHMgQXRraW5N b2R1bGFyUG9seW5vbWlhbERhdGFiYXNlfUBhbmNob3J7ZDJ9CkBkZWZmbiB7Q2xhc3N9IHNhZ2Uu ZGF0YWJhc2VzLmRiX21vZHVsYXJfcG9seW5vbWlhbHMuQXRraW5Nb2R1bGFyUG9seW5vbWlhbERh dGFiYXNlCgpCYXNlczogQHJlZntkMywsc2FnZS5kYXRhYmFzZXMuZGJfbW9kdWxhcl9wb2x5bm9t aWFscy5Nb2R1bGFyUG9seW5vbWlhbERhdGFiYXNlfQoKVGhlIGRhdGFiYXNlIG9mIG1vZHVsYXIg cG9seW5vbWlhbHMgUGhpKHgsaikgZm9yIEBtYXRoe1hfMChwKX0sIHdoZXJlCnggaXMgYSBmdW5j dGlvbiBvbiBpbnZhcmlhbnQgdW5kZXIgdGhlIEF0a2luLUxlaG5lciBpbnZhcmlhbnQsCndpdGgg cG9sZSBvZiBtaW5pbWFsIG9yZGVyIGF0IGluZmluaXR5LgpAZW5kIGRlZmZuCgpAZ2VpbmRleCBD bGFzc2ljYWxNb2R1bGFyUG9seW5vbWlhbERhdGFiYXNlIChjbGFzcyBpbiBzYWdlLmRhdGFiYXNl cy5kYl9tb2R1bGFyX3BvbHlub21pYWxzKQpAYW5jaG9ye3NhZ2UvZGF0YWJhc2VzL2RiX21vZHVs YXJfcG9seW5vbWlhbHMgc2FnZSBkYXRhYmFzZXMgZGJfbW9kdWxhcl9wb2x5bm9taWFscyBDbGFz c2ljYWxNb2R1bGFyUG9seW5vbWlhbERhdGFiYXNlfUBhbmNob3J7ZDR9CkBkZWZmbiB7Q2xhc3N9 IHNhZ2UuZGF0YWJhc2VzLmRiX21vZHVsYXJfcG9seW5vbWlhbHMuQ2xhc3NpY2FsTW9kdWxhclBv bHlub21pYWxEYXRhYmFzZQoKQmFzZXM6IEByZWZ7ZDMsLHNhZ2UuZGF0YWJhc2VzLmRiX21vZHVs YXJfcG9seW5vbWlhbHMuTW9kdWxhclBvbHlub21pYWxEYXRhYmFzZX0KClRoZSBkYXRhYmFzZSBv ZiBjbGFzc2ljYWwgbW9kdWxhciBwb2x5bm9taWFscywgaS5lLiB0aGUgcG9seW5vbWlhbHMKUGhp X04oWCxZKSByZWxhdGluZyB0aGUgai1mdW5jdGlvbnMgaihxKSBhbmQgaihxXk4pLgpAZW5kIGRl ZmZuCgpAZ2VpbmRleCBEZWRla2luZEV0YU1vZHVsYXJDb3JyZXNwb25kZW5jZURhdGFiYXNlIChj bGFzcyBpbiBzYWdlLmRhdGFiYXNlcy5kYl9tb2R1bGFyX3BvbHlub21pYWxzKQpAYW5jaG9ye3Nh Z2UvZGF0YWJhc2VzL2RiX21vZHVsYXJfcG9seW5vbWlhbHMgc2FnZSBkYXRhYmFzZXMgZGJfbW9k dWxhcl9wb2x5bm9taWFscyBEZWRla2luZEV0YU1vZHVsYXJDb3JyZXNwb25kZW5jZURhdGFiYXNl fUBhbmNob3J7ZDV9CkBkZWZmbiB7Q2xhc3N9IHNhZ2UuZGF0YWJhc2VzLmRiX21vZHVsYXJfcG9s eW5vbWlhbHMuRGVkZWtpbmRFdGFNb2R1bGFyQ29ycmVzcG9uZGVuY2VEYXRhYmFzZQoKQmFzZXM6 IEByZWZ7ZDEsLHNhZ2UuZGF0YWJhc2VzLmRiX21vZHVsYXJfcG9seW5vbWlhbHMuTW9kdWxhckNv cnJlc3BvbmRlbmNlRGF0YWJhc2V9CgpUaGUgZGF0YWJhc2Ugb2YgbW9kdWxhciBjb3JyZXNwb25k ZW5jZXMgaW4gQG1hdGh7WF8wKHApIGltZXMgWF8wKHApfSwgd2hlcmUKdGhlIG1vZGVsIG9mIHRo ZSBjdXJ2ZXMgQG1hdGh7WF8wKHApID0gXEJvbGRAe1BAfV4xfSBhcmUgc3BlY2lmaWVkIGJ5IHF1 b3RpZW50cyBvZgpEZWRla2luZCdzIGV0YSBmdW5jdGlvbi4KQGVuZCBkZWZmbgoKQGdlaW5kZXgg RGVkZWtpbmRFdGFNb2R1bGFyUG9seW5vbWlhbERhdGFiYXNlIChjbGFzcyBpbiBzYWdlLmRhdGFi YXNlcy5kYl9tb2R1bGFyX3BvbHlub21pYWxzKQpAYW5jaG9ye3NhZ2UvZGF0YWJhc2VzL2RiX21v ZHVsYXJfcG9seW5vbWlhbHMgc2FnZSBkYXRhYmFzZXMgZGJfbW9kdWxhcl9wb2x5bm9taWFscyBE ZWRla2luZEV0YU1vZHVsYXJQb2x5bm9taWFsRGF0YWJhc2V9QGFuY2hvcntkNn0KQGRlZmZuIHtD bGFzc30gc2FnZS5kYXRhYmFzZXMuZGJfbW9kdWxhcl9wb2x5bm9taWFscy5EZWRla2luZEV0YU1v ZHVsYXJQb2x5bm9taWFsRGF0YWJhc2UKCkJhc2VzOiBAcmVme2QzLCxzYWdlLmRhdGFiYXNlcy5k Yl9tb2R1bGFyX3BvbHlub21pYWxzLk1vZHVsYXJQb2x5bm9taWFsRGF0YWJhc2V9CgpUaGUgZGF0 YWJhc2Ugb2YgbW9kdWxhciBwb2x5bm9taWFscyBQaGlfTihYLFkpIHJlbGF0aW5nIGEgcXVvdGll bnQKb2YgRGVkZWtpbmQgZXRhIGZ1bmN0aW9ucywgd2VsbC1kZWZpbmVkIG9uIFhfMChOKSwgcmVs YXRpbmcgeChxKSBhbmQKdGhlIGotZnVuY3Rpb24gaihxKS4KQGVuZCBkZWZmbgoKQGdlaW5kZXgg TW9kdWxhckNvcnJlc3BvbmRlbmNlRGF0YWJhc2UgKGNsYXNzIGluIHNhZ2UuZGF0YWJhc2VzLmRi X21vZHVsYXJfcG9seW5vbWlhbHMpCkBhbmNob3J7c2FnZS9kYXRhYmFzZXMvZGJfbW9kdWxhcl9w b2x5bm9taWFscyBzYWdlIGRhdGFiYXNlcyBkYl9tb2R1bGFyX3BvbHlub21pYWxzIE1vZHVsYXJD b3JyZXNwb25kZW5jZURhdGFiYXNlfUBhbmNob3J7ZDF9CkBkZWZmbiB7Q2xhc3N9IHNhZ2UuZGF0 YWJhc2VzLmRiX21vZHVsYXJfcG9seW5vbWlhbHMuTW9kdWxhckNvcnJlc3BvbmRlbmNlRGF0YWJh c2UKCkJhc2VzOiBAcmVme2QzLCxzYWdlLmRhdGFiYXNlcy5kYl9tb2R1bGFyX3BvbHlub21pYWxz Lk1vZHVsYXJQb2x5bm9taWFsRGF0YWJhc2V9CkBlbmQgZGVmZm4KCkBnZWluZGV4IE1vZHVsYXJQ b2x5bm9taWFsRGF0YWJhc2UgKGNsYXNzIGluIHNhZ2UuZGF0YWJhc2VzLmRiX21vZHVsYXJfcG9s eW5vbWlhbHMpCkBhbmNob3J7c2FnZS9kYXRhYmFzZXMvZGJfbW9kdWxhcl9wb2x5bm9taWFscyBz YWdlIGRhdGFiYXNlcyBkYl9tb2R1bGFyX3BvbHlub21pYWxzIE1vZHVsYXJQb2x5bm9taWFsRGF0 YWJhc2V9QGFuY2hvcntkM30KQGRlZmZuIHtDbGFzc30gc2FnZS5kYXRhYmFzZXMuZGJfbW9kdWxh cl9wb2x5bm9taWFscy5Nb2R1bGFyUG9seW5vbWlhbERhdGFiYXNlCkBlbmQgZGVmZm4KCkBub2Rl IEluZGljZXMgYW5kIFRhYmxlcyxQeXRob24gTW9kdWxlIEluZGV4LERhdGFiYXNlIG9mIE1vZHVs YXIgUG9seW5vbWlhbHMsVG9wCkBhbmNob3J7aW5kZXggaW5kaWNlcy1hbmQtdGFibGVzfUBhbmNo b3J7ZDd9CkB1bm51bWJlcmVkIEluZGljZXMgYW5kIFRhYmxlcwoKCgpAaXRlbWl6ZSAqCgpAaXRl bSAKSW5kZXhAZm9vdG5vdGV7Li4vZ2VuaW5kZXguaHRtbH0KCkBpdGVtIApNb2R1bGUgSW5kZXhA Zm9vdG5vdGV7Li4vcHktbW9kaW5kZXguaHRtbH0KCkBpdGVtIApTZWFyY2ggUGFnZUBmb290bm90 ZXsuLi9zZWFyY2guaHRtbH0KQGVuZCBpdGVtaXplCgpAbm9kZSBQeXRob24gTW9kdWxlIEluZGV4 LEluZGV4LEluZGljZXMgYW5kIFRhYmxlcyxUb3AKQHVubnVtYmVyZWQgUHl0aG9uIE1vZHVsZSBJ bmRleAoKCkBtZW51Ciogc2FnZS5kYXRhYmFzZXMuY29ud2F5OiAwLiAKKiBzYWdlLmRhdGFiYXNl cy5jcmVtb25hOiAxLiAKKiBzYWdlLmRhdGFiYXNlcy5jdW5uaW5naGFtX3RhYmxlczogMi4gCiog c2FnZS5kYXRhYmFzZXMuZGJfY2xhc3NfcG9seW5vbWlhbHM6IDMuIAoqIHNhZ2UuZGF0YWJhc2Vz LmRiX21vZHVsYXJfcG9seW5vbWlhbHM6IDQuIAoqIHNhZ2UuZGF0YWJhc2VzLmZpbmRzdGF0OiA1 LiAKKiBzYWdlLmRhdGFiYXNlcy5qb25lczogNi4gCiogc2FnZS5kYXRhYmFzZXMub2RseXprbzog Ny4gCiogc2FnZS5kYXRhYmFzZXMub2VpczogOC4gCiogc2FnZS5kYXRhYmFzZXMuc2xvYW5lOiA5 LiAKKiBzYWdlLmRhdGFiYXNlcy5zdGVpbl93YXRraW5zOiBhLiAKKiBzYWdlLmRhdGFiYXNlcy5z eW1ib2xpY19kYXRhOiBiLiAKQGVuZCBtZW51CgoKQG5vZGUgSW5kZXgsLFB5dGhvbiBNb2R1bGUg SW5kZXgsVG9wCkB1bm51bWJlcmVkIEluZGV4CgoKQHByaW50aW5kZXggZ2UKCgpAYyAlKiplbmQg b2YgYm9keQpAYnllCg== --_002_99fa22144e664e0884aaef96c6e81e94mbx13binterntuwienacat_--