From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.org!.POSTED.blaine.gmane.org!not-for-mail From: Drew Adams Newsgroups: gmane.emacs.devel Subject: RE: PATCH: isearch-yank-until-char Date: Sun, 25 Aug 2019 18:14:50 -0700 (PDT) Message-ID: References: <87tvakfnv4.fsf@red-bean.com> <87lfvvjxjs.fsf@mail.linkov.net> <87sgq1r9rb.fsf@red-bean.com> <87lfvt6m1e.fsf@mail.linkov.net> <877e7256uc.fsf@red-bean.com> <604cbbef-7e25-486a-a97a-9bc1adf23928@default> <87r259nhby.fsf@mail.linkov.net> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="__15667820916015789abhmp0004.oracle.com" Injection-Info: blaine.gmane.org; posting-host="blaine.gmane.org:195.159.176.226"; logging-data="46063"; mail-complaints-to="usenet@blaine.gmane.org" Cc: Karl Fogel , Emacs developers To: Juri Linkov Original-X-From: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Mon Aug 26 03:17:00 2019 Return-path: Envelope-to: ged-emacs-devel@m.gmane.org Original-Received: from lists.gnu.org ([209.51.188.17]) by blaine.gmane.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.89) (envelope-from ) id 1i23cu-000BqJ-Kj for ged-emacs-devel@m.gmane.org; Mon, 26 Aug 2019 03:16:59 +0200 Original-Received: from localhost ([::1]:48988 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1i23ct-0002hV-Di for ged-emacs-devel@m.gmane.org; Sun, 25 Aug 2019 21:16:55 -0400 Original-Received: from eggs.gnu.org ([2001:470:142:3::10]:54257) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1i23b8-0002hL-Nm for emacs-devel@gnu.org; Sun, 25 Aug 2019 21:15:08 -0400 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1i23b4-0006oU-Li for emacs-devel@gnu.org; Sun, 25 Aug 2019 21:15:06 -0400 Original-Received: from aserp2120.oracle.com ([141.146.126.78]:60324) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1i23b0-0006mQ-Sj for emacs-devel@gnu.org; Sun, 25 Aug 2019 21:15:01 -0400 Original-Received: from pps.filterd (aserp2120.oracle.com [127.0.0.1]) by aserp2120.oracle.com (8.16.0.27/8.16.0.27) with SMTP id x7Q1E5xS122532; Mon, 26 Aug 2019 01:14:55 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.com; h=mime-version : message-id : date : from : sender : to : cc : subject : references : in-reply-to : content-type; s=corp-2019-08-05; bh=koVeRr0v4Bs4tog4H7AT3tQgufVGPpiaZkboESzoB8g=; b=XiefMoJ+LfqxVtWuTctxy6Hus4HVLwcBnvBSlWPbLZjrOAv9A/PxcAiB9vzSdnfJ8FhN tx/iaamreqY2/HG0z2tnTrePu8as8N/kQt7FN5dGP3gDqLX9UeC65mwHWl0GygPsFNPQ aK7/HrX4+FFTZRg34m1TF3SRHGgHGG65kmTJQW2ikJj4fNOd892fx8xqc5005Y+Eo/xP 6y8ZhO+L8UJN4JX8UM3+HxEgo1zqa/Y3CHYXr35I6HBTeeg3wGFSf2GLLuF2COT4YsIi 9wBg+J8msAIEnK/yXwSYHGpnY8mHR8r128+YopRWd/DbucJ+FCPNox91PSDYqFIFlef/ vg== Original-Received: from userp3030.oracle.com (userp3030.oracle.com [156.151.31.80]) by aserp2120.oracle.com with ESMTP id 2ujw6ywmn4-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Mon, 26 Aug 2019 01:14:54 +0000 Original-Received: from pps.filterd (userp3030.oracle.com [127.0.0.1]) by userp3030.oracle.com (8.16.0.27/8.16.0.27) with SMTP id x7Q1D8PL051795; Mon, 26 Aug 2019 01:14:53 GMT Original-Received: from aserv0122.oracle.com (aserv0122.oracle.com [141.146.126.236]) by userp3030.oracle.com with ESMTP id 2ujw6bp3t0-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Mon, 26 Aug 2019 01:14:53 +0000 Original-Received: from abhmp0004.oracle.com (abhmp0004.oracle.com [141.146.116.10]) by aserv0122.oracle.com (8.14.4/8.14.4) with ESMTP id x7Q1EpI7015451; Mon, 26 Aug 2019 01:14:51 GMT In-Reply-To: <87r259nhby.fsf@mail.linkov.net> X-Priority: 3 X-Mailer: Oracle Beehive Extensions for Outlook 2.0.1.9.1 (1003210) [OL 16.0.4873.0 (x86)] X-Proofpoint-Virus-Version: vendor=nai engine=6000 definitions=9360 signatures=668684 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 suspectscore=0 malwarescore=0 phishscore=0 bulkscore=0 spamscore=0 mlxscore=0 mlxlogscore=806 adultscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.0.1-1906280000 definitions=main-1908260010 X-Proofpoint-Virus-Version: vendor=nai engine=6000 definitions=9360 signatures=668684 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 priorityscore=1501 malwarescore=0 suspectscore=0 phishscore=0 bulkscore=0 spamscore=0 clxscore=1015 lowpriorityscore=0 mlxscore=0 impostorscore=0 mlxlogscore=870 adultscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.0.1-1906280000 definitions=main-1908260010 X-detected-operating-system: by eggs.gnu.org: GNU/Linux 3.x [generic] X-Received-From: 141.146.126.78 X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Original-Sender: "Emacs-devel" Xref: news.gmane.org gmane.emacs.devel:239563 Archived-At: --__15667820916015789abhmp0004.oracle.com Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: quoted-printable > > Commands like `isearch-yank-until-char', > > which yank consecutive buffer text at the > > search point, are better if they can also > > work with backward search. >=20 > Backward yanking is a separate feature unrelated > to isearch-yank-until-char. It's not unrelated. That's a new command. And it's essentially broken for yanking when searching backward. > Moreover, in my opinion backward yanking is too > awkward, That opinion is too vague. Unless you care to be specific about what it is that you find awkward. E.g., a recipe, and possibly an alternative, less awkward, behavior that you propose for yanking when searching backward, with an explanation for why you find it less awkward. Yanking text that's at the search point should be possible regardless of the direction of search. Why shouldn't it be? > and should not be enabled by default. That can be discussed. But your opinion that it's somehow vaguely awkward isn't a good reason, without elaboration. In addition, currently if you try to yank buffer text (e.g. `C-w' and kin) while searching backward the behavior is bizarre, not to mention awkward. The text yanked isn't even at the search point. It can be far away. Yet your eye is focused on the search point and the buffer text in "front" of it (in the backward direction). And there's little, perhaps no, use case for doing that, which likely prompted you to ask if I do it often (no). It's not something very useful or that would likely occur to someone. Put simply, it's wrong behavior. If you were to be faithful to your argument that yanking while searching backward makes little sense and is awkward, then you would remove that possibility right now - make `C-w' and kin do nothing when searching backward. If you really want to remove such behavior for the default case because you find it awkward, then that's the place to start. Nothing is lost, and a lot is gained (including consistency), by correcting the current yank-some-text-at-search-point behavior for backward search, making it parallel to the behavior for forward search. You call that enabling something new, but it's really fixing bad behavior that already exists. The fact that users have long ago learned to avoid that bad behavior, and thus never yank buffer text when searching backward, is an argument for fixing it, giving them the same useful behavior they have for forward search. `isearch-yank-until-char' is new. It need not ever have such bad (at best useless) behavior. You said: What I also like about isearch-yank-until-char is that an easy way to yank until the end of the line with just `C-M-c C-j' is a replacement of isearch-yank-line. The same is true for yanking until the beginning of the line when searching backward. Exact same key sequence (but the key should not be `C-M-c' - see my argument about that). Not that that's a big win. `isearch-yank-line' also works both in directions with my patch. And that's just as easy as using `C-j' with `isearch-yank-until-char'. I've attached an updated patch, which fixes two bugs in the previous patch I sent, one each in `isearch-yank-internal' and `isearch-yank-until-char'. I do hope you try it. I've also attached the result of patching, for anyone who wants to try it and doesn't want to bother downloading the Emacs 27 source file to patch (from 2019-08-19, when I grabbed it). --__15667820916015789abhmp0004.oracle.com Content-Type: application/octet-stream; name="isearch-2019-08-19e.patch" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="isearch-2019-08-19e.patch" ZGlmZiAtdSBpc2VhcmNoLTIwMTktMDgtMTlhLmVsIGlzZWFyY2gtMjAxOS0wOC0xOWUtUEFUQ0gu ZWwKLS0tIGlzZWFyY2gtMjAxOS0wOC0xOWEuZWwJMjAxOS0wOC0xOCAxNzoxMDoxMy42MDk0NDU4 MDAgLTA3MDAKKysrIGlzZWFyY2gtMjAxOS0wOC0xOWUtUEFUQ0guZWwJMjAxOS0wOC0yNSAxNzoz NDozNS44NzkyMTQ3MDAgLTA3MDAKQEAgLTE3Myw2ICsxNzMsMTAgQEAKIGNvbW1hbmQgaGlzdG9y eS4iCiAgIDp0eXBlICdib29sZWFuKQogCisoZGVmY3VzdG9tIGlzZWFyY2gtZGlyZWN0aW9uYWwt eWFuayB0CisgICJOb24tbmlsIGlmIHlhbmtpbmcgY29uc2VjdXRpdmUgdGV4dCBhdCBwb2ludCBy ZXNwZWN0cyBzZWFyY2ggZGlyZWN0aW9uLiIKKyAgOnR5cGUgJ2Jvb2xlYW4pCisKIChkZWZ2YXIg aXNlYXJjaC1tb2RlLWhvb2sgbmlsCiAgICJGdW5jdGlvbihzKSB0byBjYWxsIGFmdGVyIHN0YXJ0 aW5nIHVwIGFuIGluY3JlbWVudGFsIHNlYXJjaC4iKQogCkBAIC03MDYsNiArNzEwLDkgQEAKICAg ICAoZGVmaW5lLWtleSBtYXAgIlxNLVxDLXkiICdpc2VhcmNoLXlhbmstY2hhcikKICAgICAoZGVm aW5lLWtleSBtYXAgICAgIlxDLXkiICdpc2VhcmNoLXlhbmsta2lsbCkKICAgICAoZGVmaW5lLWtl eSBtYXAgIlxNLXNcQy1lIiAnaXNlYXJjaC15YW5rLWxpbmUpCisgICAgKGRlZmluZS1rZXkgbWFw IChrYmQgIkMtTS0uIikgJ2lzZWFyY2gteWFuay11bnRpbC1jaGFyKQorICAgIChkZWZpbmUta2V5 IG1hcCAoa2JkICJDLU0tbSIpICdpc2VhcmNoLXlhbmstdW50aWwtbWF0Y2gpCisgICAgKGRlZmlu ZS1rZXkgbWFwIChrYmQgIkMtTS1jIikgJ2lzZWFyY2gteWFuay10aHJvdWdoLW1vdmUpCiAKICAg ICAoZGVmaW5lLWtleSBtYXAgIlxNLXNcTS08IiAnaXNlYXJjaC1iZWdpbm5pbmctb2YtYnVmZmVy KQogICAgIChkZWZpbmUta2V5IG1hcCAiXE0tc1xNLT4iICdpc2VhcmNoLWVuZC1vZi1idWZmZXIp CkBAIC0xNzMxLDYgKzE3MzgsNjQgQEAKICAgICAgKGlzZWFyY2gtYWJvcnQpICA7OyBvdXRzaWRl IG9mIGxldCB0byByZXN0b3JlIG91dHNpZGUgZ2xvYmFsIHZhbHVlcwogICAgICApKSkKIAorKGRl Zm1hY3JvIGRlZmluZS1pc2VhcmNoLXlhbmstbW92ZW1lbnQtY29tbWFuZCAoY29tbWFuZCBhcmd1 bWVudHMgZG9jLXN0cmluZworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBpbnRlcmFjdGl2ZQorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiaW5kaW5ncyBhY3Rpb24pCisgICJEZWZpbmUg SXNlYXJjaCBDT01NQU5EIHRvIGFkanVzdCBzZWFyY2ggc3RyaW5nIGJhc2VkIG9uIGN1cnNvciBw b3NpdGlvbi4KK1RoZSBjb21tYW5kIHNob3VsZCBtb3ZlIHRoZSBjdXJzb3IsIHdoaWNoIGlzIGF0 IG9uZSBlbmQgb2YgdGhlIGN1cnJlbnQKK3NlYXJjaCBoaXQsIHRvIGEgbmV3IGxvY2F0aW9uLgor CitUaGUgZXhpc3Rpbmcgc2VhcmNoIHN0cmluZyBpcyBleHBhbmRlZCBvciByZWR1Y2VkIHRvIGlu Y2x1ZGUgdGhlCitidWZmZXIgdGV4dCBmcm9tIHRoZSBzZWFyY2ggaGl0IHRocm91Z2ggdGhlIG5l dyBjdXJzb3IgcG9zaXRpb24uCisKK0FSR1VNRU5UUyBpcyBhIGxpc3Qgb2YgYXJndW1lbnRzIHRv IHRoZSBjb21tYW5kLgorRE9DLVNUUklORyBpcyB0aGUgY29tbWFuZCdzIGRvYyBzdHJpbmcuCitJ TlRFUkFDVElWRSBpcyBgaW50ZXJhdGl2ZScgZm9ybS4KK0JJTkRJTkdTIGlzIGEgbGlzdCBvZiBg bGV0KicgYmluZGluZ3MgYWRkZWQgYXJvdW5kIHRoZSBjb21tYW5kIGNvZGUuCisgIExvY2FsIHZh cmlhYmxlIGBpc2VhcmNoLW5ldy1wb3NpdGlvbicgaXMgYWxzbyBib3VuZCwgYmVmb3JlIHRoZQor ICBCSU5ESU5HUyB5b3UgcHJvdmlkZSAtIHNlZSBBQ1RJT04sIGJlbG93LgorQklORElOR1MgaXMg bWFjcm9leHBhbmRlZCwgc28gaXQgY2FuIGFsc28gYmUgYSBtYWNybyBjYWxsIHRoYXQgZXhwYW5k cwordG8gYSBsaXN0IG9mIGJpbmRpbmdzLgorCitBQ1RJT04gaXMgeW91ciBjb2RlIHRoYXQgbW92 ZXMgdGhlIGN1cnNvci4gIEl0IHNob3VsZCBzZXQgdmFyaWFibGUKK2Bpc2VhcmNoLW5ldy1wb3Np dGlvbicgdG8gdGhlIG5ldyBjdXJzb3IgcG9zaXRpb24uIgorICAobGV0ICgoZndkICAgICAobWFr ZS1zeW1ib2wgImZ3ZCIpKQorICAgICAgICAoYmVnICAgICAobWFrZS1zeW1ib2wgImJlZyIpKQor ICAgICAgICAoZW5kICAgICAobWFrZS1zeW1ib2wgImVuZCIpKQorICAgICAgICAobWluLWJlICAo bWFrZS1zeW1ib2wgIm1pbi1iZSIpKQorICAgICAgICAobWF4LWJlICAobWFrZS1zeW1ib2wgIm1h eC1iZSIpKSkKKyAgICBgKGRlZnVuICxjb21tYW5kICxhcmd1bWVudHMgLGRvYy1zdHJpbmcKKyAg ICAgICAgICAgICxpbnRlcmFjdGl2ZQorICAgICAgICAgICAgKGxldCAoKCxmd2QgIGlzZWFyY2gt Zm9yd2FyZCkKKyAgICAgICAgICAgICAgICAgICgsYmVnICBpc2VhcmNoLW90aGVyLWVuZCkKKyAg ICAgICAgICAgICAgICAgICgsZW5kICAocG9pbnQpKQorICAgICAgICAgICAgICAgICAgaXNlYXJj aC1uZXctcG9zaXRpb24pCisgICAgICAgICAgICAgIChsZXQqICxiaW5kaW5ncworICAgICAgICAg ICAgICAgICxhY3Rpb24KKyAgICAgICAgICAgICAgICAobGV0ICgoLG1pbi1iZSAgKG1pbiAsYmVn ICxlbmQpKQorICAgICAgICAgICAgICAgICAgICAgICgsbWF4LWJlICAobWF4ICxiZWcgLGVuZCkp KQorICAgICAgICAgICAgICAgICAgKHNldHEgaXNlYXJjaC1zdHJpbmcgICAgIChpZiAoPCBpc2Vh cmNoLW5ldy1wb3NpdGlvbiAsYmVnKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAoYnVmZmVyLXN1YnN0cmluZworICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgKG1pbiBpc2VhcmNoLW5ldy1wb3NpdGlvbiAsbWF4LWJl KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG1heCBp c2VhcmNoLW5ldy1wb3NpdGlvbiAsbWF4LWJlKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIChidWZmZXItc3Vic3RyaW5nCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgKG1pbiBpc2VhcmNoLW5ldy1wb3NpdGlvbiAsbWlu LWJlKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChtYXgg aXNlYXJjaC1uZXctcG9zaXRpb24gLG1pbi1iZSkpKQorICAgICAgICAgICAgICAgICAgICAgICAg aXNlYXJjaC1tZXNzYWdlICAgIChtYXBjb25jYXQgJ2lzZWFyY2gtdGV4dC1jaGFyLWRlc2NyaXB0 aW9uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBpc2VhcmNoLXN0cmluZyAiIikKKyAgICAgICAgICAgICAgICAgICAgICAgIGlzZWFyY2gtYmFy cmllciAgICAoaWYgKG9yIChhbmQgLGZ3ZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAoPCBpc2VhcmNoLW5ldy1wb3NpdGlvbiAsYmVnKSkK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChhbmQg KG5vdCAsZndkKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAobm90ICg8IGlzZWFyY2gtbmV3LXBvc2l0aW9uICxiZWcpKSkpCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICxlbmQKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzZWFyY2gtbmV3LXBvc2l0aW9uKQor ICAgICAgICAgICAgICAgICAgICAgICAgaXNlYXJjaC1vdGhlci1lbmQgIChpZiAoPCBpc2VhcmNo LW5ldy1wb3NpdGlvbiAsYmVnKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAoaWYgLGZ3ZCBpc2VhcmNoLW5ldy1wb3NpdGlvbiAsYmVnKQorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGlmIChub3QgLGZ3ZCkgaXNlYXJj aC1uZXctcG9zaXRpb24gLGJlZykpKQorICAgICAgICAgICAgICAgICAgKGdvdG8tY2hhciBpc2Vh cmNoLWJhcnJpZXIpCisgICAgICAgICAgICAgICAgICAoaXNlYXJjaC1oaWdobGlnaHQgaXNlYXJj aC1vdGhlci1lbmQgaXNlYXJjaC1iYXJyaWVyKQorICAgICAgICAgICAgICAgICAgKHdoZW4gaXNl YXJjaC1sYXp5LWhpZ2hsaWdodCAoaXNlYXJjaC1sYXp5LWhpZ2hsaWdodC1uZXctbG9vcCkpKSkp KSkpCisKIChkZWZ2YXIgbWluaWJ1ZmZlci1oaXN0b3J5LXN5bWJvbCkgOzsgZnJvbSBleHRlcm5h bCBwYWNrYWdlIGdtaGlzdC5lbAogCiAoZGVmdW4gaXNlYXJjaC1lZGl0LXN0cmluZyAoKQpAQCAt MjQ0Nyw4ICsyNTEyLDkgQEAKICAgKGlzZWFyY2gtcHVzaC1zdGF0ZSkKICAgKGlzZWFyY2gtdXBk YXRlKSkKIAotKGRlZnVuIGlzZWFyY2gteWFuay1zdHJpbmcgKHN0cmluZykKLSAgIlB1bGwgU1RS SU5HIGludG8gc2VhcmNoIHN0cmluZy4iCisoZGVmdW4gaXNlYXJjaC15YW5rLXN0cmluZyAoc3Ry aW5nICZvcHRpb25hbCByZXNwZWN0LWRpcmVjdGlvbikKKyAgIlB1bGwgU1RSSU5HIGludG8gc2Vh cmNoIHN0cmluZy4KK05vbi1uaWwgUkVTUEVDVC1ESVJFQ1RJT04gbWVhbnMgcHJlcGVuZCBTVFJJ TkcgaWYgc2VhcmNoaW5nIGJhY2t3YXJkLiIKICAgOzsgRG93bmNhc2UgdGhlIHN0cmluZyBpZiBu b3Qgc3VwcG9zZWQgdG8gY2FzZS1mb2xkIHlhbmtlZCBzdHJpbmdzLgogICAoaWYgKGFuZCBpc2Vh cmNoLWNhc2UtZm9sZC1zZWFyY2gKIAkgICAoZXEgJ25vdC15YW5rcyBzZWFyY2gtdXBwZXItY2Fz ZSkpCkBAIC0yNDU2LDggKzI1MjIsOSBAQAogICAoaWYgaXNlYXJjaC1yZWdleHAgKHNldHEgc3Ry aW5nIChyZWdleHAtcXVvdGUgc3RyaW5nKSkpCiAgIDs7IERvbid0IG1vdmUgY3Vyc29yIGluIHJl dmVyc2Ugc2VhcmNoLgogICAoc2V0cSBpc2VhcmNoLXlhbmstZmxhZyB0KQotICAoaXNlYXJjaC1w cm9jZXNzLXNlYXJjaC1zdHJpbmcKLSAgIHN0cmluZyAobWFwY29uY2F0ICdpc2VhcmNoLXRleHQt Y2hhci1kZXNjcmlwdGlvbiBzdHJpbmcgIiIpKSkKKyAgKGlzZWFyY2gtcHJvY2Vzcy1zZWFyY2gt c3RyaW5nIHN0cmluZworCQkJCSAobWFwY29uY2F0ICdpc2VhcmNoLXRleHQtY2hhci1kZXNjcmlw dGlvbiBzdHJpbmcgIiIpCisJCQkJIHJlc3BlY3QtZGlyZWN0aW9uKSkKIAogKGRlZnVuIGlzZWFy Y2gteWFuay1raWxsICgpCiAgICJQdWxsIHN0cmluZyBmcm9tIGtpbGwgcmluZyBpbnRvIHNlYXJj aCBzdHJpbmcuIgpAQCAtMjUwOCwxNyArMjU3NSwyMCBAQAogICAoaW50ZXJhY3RpdmUpCiAgIChp c2VhcmNoLXlhbmstc3RyaW5nICh4dGVybS0tcGFzdGVkLXRleHQpKSkKIAotKGRlZnVuIGlzZWFy Y2gteWFuay1pbnRlcm5hbCAoanVtcGZvcm0pCi0gICJQdWxsIHRoZSB0ZXh0IGZyb20gcG9pbnQg dG8gdGhlIHBvaW50IHJlYWNoZWQgYnkgSlVNUEZPUk0uCi1KVU1QRk9STSBpcyBhIGxhbWJkYSBl eHByZXNzaW9uIHRoYXQgdGFrZXMgbm8gYXJndW1lbnRzIGFuZCByZXR1cm5zCi1hIGJ1ZmZlciBw b3NpdGlvbiwgcG9zc2libHkgaGF2aW5nIG1vdmVkIHBvaW50IHRvIHRoYXQgcG9zaXRpb24uCi1G b3IgZXhhbXBsZSwgaXQgbWlnaHQgbW92ZSBwb2ludCBmb3J3YXJkIGJ5IGEgd29yZCBhbmQgcmV0 dXJuIHBvaW50LAotb3IgaXQgbWlnaHQgcmV0dXJuIHRoZSBwb3NpdGlvbiBvZiB0aGUgZW5kIG9m IHRoZSBsaW5lLiIKKyhkZWZ1biBpc2VhcmNoLXlhbmstaW50ZXJuYWwgKGp1bXBmdW4gJm9wdGlv bmFsIHJlc3BlY3QtZGlyZWN0aW9uKQorICAiUHVsbCB0aGUgdGV4dCBmcm9tIHBvaW50IHRvIHRo ZSBwb2ludCByZWFjaGVkIGJ5IEpVTVBGVU4uCitKVU1QRlVOIGlzIGEgZnVuY3Rpb24gdGhhdCB0 YWtlcyBubyBhcmd1bWVudHMgYW5kIHJldHVybnMgYSBidWZmZXIKK3Bvc2l0aW9uLCBwb3NzaWJs eSBoYXZpbmcgbW92ZWQgcG9pbnQgdG8gdGhhdCBwb3NpdGlvbi4KKworRm9yIGV4YW1wbGUsIEpV TVBGVU4gbWlnaHQgbW92ZSBmb3J3YXJkIGJ5IGEgd29yZCBhbmQgcmV0dXJuIHBvaW50LCBvcgor aXQgbWlnaHQgcmV0dXJuIHRoZSBwb3NpdGlvbiBvZiB0aGUgZW5kIG9mIHRoZSBsaW5lLgorCitO b24tbmlsIFJFU1BFQ1QtRElSRUNUSU9OIG1lYW5zIHByZXBlbmQgdGV4dCBpZiBzZWFyY2hpbmcg YmFja3dhcmQuIgogICAoaXNlYXJjaC15YW5rLXN0cmluZwotICAgKHNhdmUtZXhjdXJzaW9uCi0g ICAgIChhbmQgKG5vdCBpc2VhcmNoLWZvcndhcmQpIGlzZWFyY2gtb3RoZXItZW5kCi0JICAoZ290 by1jaGFyIGlzZWFyY2gtb3RoZXItZW5kKSkKLSAgICAgKGJ1ZmZlci1zdWJzdHJpbmctbm8tcHJv cGVydGllcyAocG9pbnQpIChmdW5jYWxsIGp1bXBmb3JtKSkpKSkKKyAgIChzYXZlLWV4Y3Vyc2lv biAKKyAgICAgICAod2hlbiAoYW5kIChub3QgaXNlYXJjaC1mb3J3YXJkKSAgKG5vdCByZXNwZWN0 LWRpcmVjdGlvbikpIChnb3RvLWNoYXIgaXNlYXJjaC1vdGhlci1lbmQpKQorICAgICAgIChidWZm ZXItc3Vic3RyaW5nLW5vLXByb3BlcnRpZXMgKHBvaW50KSAoZnVuY2FsbCBqdW1wZnVuKSkpCisg ICByZXNwZWN0LWRpcmVjdGlvbikpCiAKIChkZWZ1biBpc2VhcmNoLXlhbmstY2hhci1pbi1taW5p YnVmZmVyICgmb3B0aW9uYWwgYXJnKQogICAiUHVsbCBuZXh0IGNoYXJhY3RlciBmcm9tIGJ1ZmZl ciBpbnRvIGVuZCBvZiBzZWFyY2ggc3RyaW5nIGluIG1pbmlidWZmZXIuIgpAQCAtMjUzMSw0NCAr MjYwMSwxODkgQEAKICAgICAoZm9yd2FyZC1jaGFyIGFyZykpKQogCiAoZGVmdW4gaXNlYXJjaC15 YW5rLWNoYXIgKCZvcHRpb25hbCBhcmcpCi0gICJQdWxsIG5leHQgY2hhcmFjdGVyIGZyb20gYnVm ZmVyIGludG8gc2VhcmNoIHN0cmluZy4KLUlmIG9wdGlvbmFsIEFSRyBpcyBub24tbmlsLCBwdWxs IGluIHRoZSBuZXh0IEFSRyBjaGFyYWN0ZXJzLiIKKyAgIlB1bGwgY2hhcmFjdGVyIGZyb20gYnVm ZmVyIGludG8gc2VhcmNoIHN0cmluZy4KK0lmIGBpc2VhcmNoLWRpcmVjdGlvbmFsLXlhbmsnIGlz IG5vbi1uaWwgdGhlbiB1c2UgbmV4dCBjaGFyIGZvcgorZm9yd2FyZCBzZWFyY2gsIHByZXZpb3Vz IGNoYXIgZm9yIGJhY2t3YXJkIHNlYXJjaC4KKworV2l0aCBhIG51bWVyaWMgcHJlZml4IEFSRywg cHVsbCBpbiBBUkcgY2hhcmFjdGVycy4iCiAgIChpbnRlcmFjdGl2ZSAicCIpCi0gIChpc2VhcmNo LXlhbmstaW50ZXJuYWwgKGxhbWJkYSAoKSAoZm9yd2FyZC1jaGFyIGFyZykgKHBvaW50KSkpKQor ICAoaXNlYXJjaC15YW5rLWludGVybmFsCisgICAobGFtYmRhICgpCisgICAgIChmdW5jYWxsIChp ZiAob3IgaXNlYXJjaC1mb3J3YXJkICAobm90IGlzZWFyY2gtZGlyZWN0aW9uYWwteWFuaykpCisg ICAgICAgICAgICAgICAgICAjJ2ZvcndhcmQtY2hhcgorICAgICAgICAgICAgICAgICMnYmFja3dh cmQtY2hhcikKKyAgICAgICAgICAgICAgYXJnKQorICAgICAocG9pbnQpKQorICAgaXNlYXJjaC1k aXJlY3Rpb25hbC15YW5rKSkKIAotKGRlZnVuIGlzZWFyY2gtLXlhbmstY2hhci1vci1zeW50YXgg KHN5bnRheC1saXN0IGZuKQorKGRlZnVuIGlzZWFyY2gtLXlhbmstY2hhci1vci1zeW50YXggKHN5 bnRheC1saXN0IGZuICZvcHRpb25hbCByZXNwZWN0LWRpcmVjdGlvbikKICAgKGlzZWFyY2gteWFu ay1pbnRlcm5hbAogICAgKGxhbWJkYSAoKQogICAgICAoaWYgKG9yIChtZW1xIChjaGFyLXN5bnRh eCAob3IgKGNoYXItYWZ0ZXIpIDApKSBzeW50YXgtbGlzdCkKICAgICAgICAgICAgICAobWVtcSAo Y2hhci1zeW50YXggKG9yIChjaGFyLWFmdGVyICgxKyAocG9pbnQpKSkgMCkpCiAgICAgICAgICAg ICAgICAgICAgc3ludGF4LWxpc3QpKQogCSAoZnVuY2FsbCBmbiAxKQotICAgICAgIChmb3J3YXJk LWNoYXIgMSkpCi0gICAgIChwb2ludCkpKSkKKyAgICAgICAoaWYgKG9yIGlzZWFyY2gtZm9yd2Fy ZCAgKG5vdCByZXNwZWN0LWRpcmVjdGlvbikpCisgICAgICAgICAgIChmb3J3YXJkLWNoYXIgMSkK KyAgICAgICAgIChiYWNrd2FyZC1jaGFyIDEpKSkKKyAgICAgKHBvaW50KSkKKyAgIHJlc3BlY3Qt ZGlyZWN0aW9uKSkKIAogKGRlZnVuIGlzZWFyY2gteWFuay13b3JkLW9yLWNoYXIgKCkKKyAgIlB1 bGwgY2hhcmFjdGVyIG9yIHdvcmQgZnJvbSBidWZmZXIgaW50byBzZWFyY2ggc3RyaW5nLgorSWYg YGlzZWFyY2gtZGlyZWN0aW9uYWwteWFuaycgaXMgbm9uLW5pbCB0aGVuIHlhbmsgbmV4dCBvbmUg Zm9yCitmb3J3YXJkIHNlYXJjaCwgcHJldmlvdXMgb25lIGZvciBiYWNrd2FyZCBzZWFyY2guIgor ICAoaW50ZXJhY3RpdmUpCisgIChpZiAob3IgaXNlYXJjaC1mb3J3YXJkICAobm90IGlzZWFyY2gt ZGlyZWN0aW9uYWwteWFuaykpCisgICAgICAoaXNlYXJjaC0teWFuay1jaGFyLW9yLXN5bnRheCAn KD93KSAnZm9yd2FyZC13b3JkIGlzZWFyY2gtZGlyZWN0aW9uYWwteWFuaykKKyAgICAoaXNlYXJj aC0teWFuay1jaGFyLW9yLXN5bnRheCAnKD93KSAnYmFja3dhcmQtd29yZCAnUkVTUEVDVC1ESVJF Q1RJT04pKSkKKworKGRlZnVuIGlzZWFyY2gteWFuay13b3JkLW9yLWNoYXItZm9yd2FyZCAoKQog ICAiUHVsbCBuZXh0IGNoYXJhY3RlciBvciB3b3JkIGZyb20gYnVmZmVyIGludG8gc2VhcmNoIHN0 cmluZy4iCiAgIChpbnRlcmFjdGl2ZSkKLSAgKGlzZWFyY2gtLXlhbmstY2hhci1vci1zeW50YXgg Jyg/dykgJ2ZvcndhcmQtd29yZCkpCisgIChpc2VhcmNoLS15YW5rLWNoYXItb3Itc3ludGF4ICco P3cpICdmb3J3YXJkLXdvcmQgaXNlYXJjaC1kaXJlY3Rpb25hbC15YW5rKSkKIAotKGRlZnVuIGlz ZWFyY2gteWFuay1zeW1ib2wtb3ItY2hhciAoKQotICAiUHVsbCBuZXh0IGNoYXJhY3RlciBvciBz eW1ib2wgZnJvbSBidWZmZXIgaW50byBzZWFyY2ggc3RyaW5nLiIKKyhkZWZ1biBpc2VhcmNoLXlh bmstd29yZC1vci1jaGFyLWJhY2t3YXJkICgpCisgICJQdWxsIHByZXZpb3VzIGNoYXJhY3RlciBv ciB3b3JkIGZyb20gYnVmZmVyIGludG8gc2VhcmNoIHN0cmluZy4iCiAgIChpbnRlcmFjdGl2ZSkK LSAgKGlzZWFyY2gtLXlhbmstY2hhci1vci1zeW50YXggJyg/dyA/XykgJ2ZvcndhcmQtc3ltYm9s KSkKKyAgKGlzZWFyY2gtLXlhbmstY2hhci1vci1zeW50YXggJyg/dykgJ2JhY2t3YXJkLXdvcmQg J1JFU1BFQ1QtRElSRUNUSU9OKSkKKworKGRlZnVuIGlzZWFyY2gteWFuay1zeW1ib2wtb3ItY2hh ciAoKQorICAiUHVsbCBjaGFyYWN0ZXIgb3Igc3ltYm9sIGZyb20gYnVmZmVyIGludG8gc2VhcmNo IHN0cmluZy4KK0lmIGBpc2VhcmNoLWRpcmVjdGlvbmFsLXlhbmsnIGlzIG5vbi1uaWwgdGhlbiBw dWxsIG5leHQgb25lIGZvcgorZm9yd2FyZCBzZWFyY2gsIHByZXZpb3VzIG9uZSBmb3IgYmFja3dh cmQgc2VhcmNoLiIKKyAgKGludGVyYWN0aXZlKQorICAoaWYgKG9yIGlzZWFyY2gtZm9yd2FyZCAg KG5vdCBpc2VhcmNoLWRpcmVjdGlvbmFsLXlhbmspKQorICAgICAgKGlzZWFyY2gtLXlhbmstY2hh ci1vci1zeW50YXggJyg/dyA/XykgJ2ZvcndhcmQtc3ltYm9sIGlzZWFyY2gtZGlyZWN0aW9uYWwt eWFuaykKKyAgICAoaXNlYXJjaC0teWFuay1jaGFyLW9yLXN5bnRheCAnKD93ID9fKSAnYmFja3dh cmQtc3ltYm9sICdSRVNQRUNULURJUkVDVElPTikpKQogCiAoZGVmdW4gaXNlYXJjaC15YW5rLXdv cmQgKCZvcHRpb25hbCBhcmcpCi0gICJQdWxsIG5leHQgd29yZCBmcm9tIGJ1ZmZlciBpbnRvIHNl YXJjaCBzdHJpbmcuCi1JZiBvcHRpb25hbCBBUkcgaXMgbm9uLW5pbCwgcHVsbCBpbiB0aGUgbmV4 dCBBUkcgd29yZHMuIgorICAiUHVsbCB3b3JkIGZyb20gYnVmZmVyIGludG8gc2VhcmNoIHN0cmlu Zy4KK0lmIGBpc2VhcmNoLWRpcmVjdGlvbmFsLXlhbmsnIGlzIG5vbi1uaWwgdGhlbiBwdWxsIG5l eHQgd29yZCBmb3IKK2ZvcndhcmQgc2VhcmNoLCBwcmV2aW91cyB3b3JkIGZvciBiYWNrd2FyZCBz ZWFyY2guCisKK1dpdGggYSBudW1lcmljIHByZWZpeCBBUkcsIHB1bGwgaW4gQVJHIHdvcmRzLiIK ICAgKGludGVyYWN0aXZlICJwIikKLSAgKGlzZWFyY2gteWFuay1pbnRlcm5hbCAobGFtYmRhICgp IChmb3J3YXJkLXdvcmQgYXJnKSAocG9pbnQpKSkpCisgIChpc2VhcmNoLXlhbmstaW50ZXJuYWwK KyAgIChsYW1iZGEgKCkKKyAgICAgKGZ1bmNhbGwgKGlmIChvciBpc2VhcmNoLWZvcndhcmQgIChu b3QgaXNlYXJjaC1kaXJlY3Rpb25hbC15YW5rKSkKKyAgICAgICAgICAgICAgICAgICMnZm9yd2Fy ZC13b3JkCisgICAgICAgICAgICAgICAgIydiYWNrd2FyZC13b3JkKQorICAgICAgICAgICAgICBh cmcpCisgICAgIChwb2ludCkpCisgICBpc2VhcmNoLWRpcmVjdGlvbmFsLXlhbmspKQogCiAoZGVm dW4gaXNlYXJjaC15YW5rLWxpbmUgKCZvcHRpb25hbCBhcmcpCiAgICJQdWxsIHJlc3Qgb2YgbGlu ZSBmcm9tIGJ1ZmZlciBpbnRvIHNlYXJjaCBzdHJpbmcuCi1JZiBvcHRpb25hbCBBUkcgaXMgbm9u LW5pbCwgeWFuayB0aGUgbmV4dCBBUkcgbGluZXMuIgorSWYgYGlzZWFyY2gtZGlyZWN0aW9uYWwt eWFuaycgaXMgbm9uLW5pbCB0aGVuIHB1bGwgaW4gcmVzdCBvZiBsaW5lIGluCitzZWFyY2ggZGly ZWN0aW9uLgorCitXaXRoIGEgbnVtZXJpYyBwcmVmaXggQVJHLCBwdWxsIGluIEFSRyBsaW5lcy4i CisgIChpbnRlcmFjdGl2ZSAicCIpCisgIChpZiAob3IgaXNlYXJjaC1mb3J3YXJkICAobm90IGlz ZWFyY2gtZGlyZWN0aW9uYWwteWFuaykpCisgICAgICAoaXNlYXJjaC15YW5rLWxpbmUtZm9yd2Fy ZCBhcmcpCisgICAgKGlzZWFyY2gteWFuay1saW5lLWJhY2t3YXJkIGFyZykpKQorCisoZGVmdW4g aXNlYXJjaC15YW5rLWxpbmUtZm9yd2FyZCAoJm9wdGlvbmFsIGFyZykKKyAgIlB1bGwgcmVzdCBv ZiBsaW5lLCBnb2luZyBmb3J3YXJkLCBmcm9tIGJ1ZmZlciBpbnRvIHNlYXJjaCBzdHJpbmcuCitX aXRoIGEgbnVtZXJpYyBwcmVmaXggQVJHLCBwdWxsIGluIHRoZSBuZXh0IEFSRyBsaW5lcy4iCisg IChpbnRlcmFjdGl2ZSAicCIpCisgIChpc2VhcmNoLXlhbmstaW50ZXJuYWwKKyAgIChsYW1iZGEg KCkKKyAgICAgKGxldCAoKGluaGliaXQtZmllbGQtdGV4dC1tb3Rpb24gIHQpKQorICAgICAgIChs aW5lLWVuZC1wb3NpdGlvbiAoaWYgKGVvbHApICgxKyBhcmcpIGFyZykpKSkpKQorCisoZGVmdW4g aXNlYXJjaC15YW5rLWxpbmUtYmFja3dhcmQgKCZvcHRpb25hbCBhcmcpCisgICJQdWxsIHJlc3Qg b2YgbGluZSwgZ29pbmcgYmFja3dhcmQsIGZyb20gYnVmZmVyIGludG8gc2VhcmNoIHN0cmluZy4K K1dpdGggYSBudW1lcmljIHByZWZpeCBBUkcsIHB1bGwgaW4gdGhlIHByZXZpb3VzIEFSRyBsaW5l cy4iCiAgIChpbnRlcmFjdGl2ZSAicCIpCiAgIChpc2VhcmNoLXlhbmstaW50ZXJuYWwKLSAgIChs YW1iZGEgKCkgKGxldCAoKGluaGliaXQtZmllbGQtdGV4dC1tb3Rpb24gdCkpCi0JCShsaW5lLWVu ZC1wb3NpdGlvbiAoaWYgKGVvbHApICgxKyBhcmcpIGFyZykpKSkpKQorICAgKGxhbWJkYSAoKQor ICAgICAobGV0ICgoaW5oaWJpdC1maWVsZC10ZXh0LW1vdGlvbiAgdCkKKwkgICAoYXJnMiAgICAg ICAgICAgICAgICAgICAgICAgKC0gMiBhcmcpKSkKKyAgICAgICAobGluZS1iZWdpbm5pbmctcG9z aXRpb24gKGlmIChib2xwKSAoMS0gYXJnMikgYXJnMikpKSkKKyAgICdSRVNQRUNULURJUkVDVElP TikpCisKKyhkZWZ1biBpc2VhcmNoLXlhbmstdW50aWwtY2hhciAoY2hhcikKKyAgIlB1bGwgYnVm ZmVyIHRleHQsIHVwIHRvIG5leHQgaW5zdGFuY2Ugb2YgQ0hBUiwgaW50byBzZWFyY2ggc3RyaW5n LgorWW91IGFyZSBwcm9tcHRlZCBmb3IgQ0hBUi4iCisgIChpbnRlcmFjdGl2ZSAiY1lhbmsgdW50 aWwgY2hhcmFjdGVyOiAiKQorICAoaXNlYXJjaC15YW5rLWludGVybmFsCisgICAobGFtYmRhICgp CisgICAgIChsZXQgKChpbmhpYml0LWZpZWxkLXRleHQtbW90aW9uICB0KQorICAgICAgICAgICAo ZndkICAgICAgICAgICAgICAgICAgICAgICAgKG9yIGlzZWFyY2gtZm9yd2FyZCAgKG5vdCBpc2Vh cmNoLWRpcmVjdGlvbmFsLXlhbmspKSkpCisgICAgICAgKGZ1bmNhbGwgKGlmIGZ3ZAorICAgICAg ICAgICAgICAgICAgICAjJ3NlYXJjaC1mb3J3YXJkCisgICAgICAgICAgICAgICAgICAjJ3NlYXJj aC1iYWNrd2FyZCkKKwkJKGNoYXItdG8tc3RyaW5nIGNoYXIpKQorICAgICAgIChpZiBmd2QgKGJh Y2t3YXJkLWNoYXIpIChmb3J3YXJkLWNoYXIpKQorICAgICAgIChwb2ludCkpKQorICAgaXNlYXJj aC1kaXJlY3Rpb25hbC15YW5rKSkKKworKGRlZnVuIGlzZWFyY2gteWFuay11bnRpbC1tYXRjaCAo YXJnKQorICAiUHVsbCB0ZXh0LCB0aHJvdWdoIG1hdGNoIGZvciBhbm90aGVyIHBhdHRlcm4sIGlu dG8gc2VhcmNoIHN0cmluZy4KK1lvdSBhcmUgcHJvbXB0ZWQgZm9yIHRoZSBwYXR0ZXJuLgorV2l0 aCBhIHByZWZpeCBhcmcsIG1hdGNoIHRoZSBwYXR0ZXJuIGFzIGEgcmVnZXhwLiIKKyAgKGludGVy YWN0aXZlICJQIikKKyAgKGxldCAoKGZ3ZCAgKG9yIGlzZWFyY2gtZm9yd2FyZCAgKG5vdCBpc2Vh cmNoLWRpcmVjdGlvbmFsLXlhbmspKSkKKyAgICAgICAgcGF0dGVybikKKyAgICAod2l0aC1pc2Vh cmNoLXN1c3BlbmRlZAorICAgICAoc2V0cSBwYXR0ZXJuICAoaWYgYXJnIChyZWFkLXJlZ2V4cCAi TWF0Y2ggcmVnZXhwOiAiKSAocmVhZC1zdHJpbmcgIk1hdGNoOiAiKSkpKQorICAgIChpc2VhcmNo LXlhbmstaW50ZXJuYWwKKyAgICAgKGxhbWJkYSAoKQorICAgICAgIChsZXQgKChpbmhpYml0LWZp ZWxkLXRleHQtbW90aW9uICB0KSkKKyAgICAgICAgIChmdW5jYWxsIChpZiBhcmcKKyAgICAgICAg ICAgICAgICAgICAgICAoaWYgZndkICMnc2VhcmNoLWZvcndhcmQtcmVnZXhwICMnc2VhcmNoLWJh Y2t3YXJkLXJlZ2V4cCkKKyAgICAgICAgICAgICAgICAgICAgKGlmIGZ3ZCAjJ3NlYXJjaC1mb3J3 YXJkICMnc2VhcmNoLWJhY2t3YXJkKSkKKyAgICAgICAgICAgICAgICAgIHBhdHRlcm4pCisgICAg ICAgICAocG9pbnQpKSkKKyAgICAgaXNlYXJjaC1kaXJlY3Rpb25hbC15YW5rKSkpCisKKyhkZWZp bmUtaXNlYXJjaC15YW5rLW1vdmVtZW50LWNvbW1hbmQgaXNlYXJjaC15YW5rLXRvLWtleS1kZXN0 aW5hdGlvbiAoa2V5KQorICAiQWRqdXN0IHNlYXJjaCB0byB1c2UgdGV4dCBmcm9tIHNlYXJjaCBo aXQgdGhyb3VnaCBhIGtleSBkZXN0aW5hdGlvbi4KK1lvdSBhcmUgcHJvbXB0ZWQgZm9yIGEga2V5 IHNlcXVlbmNlIHRoYXQgbW92ZXMgdGhlIGN1cnNvci4gIFRoZSBrZXkKK2NhbiBkbyBhbnl0aGlu ZyBlbHNlIGFzIHdlbGwsIGJ1dCBvbmx5IHRoZSBuZXcgY3Vyc29yIHBvc2l0aW9uIGlzIHVzZWQK K2J5IHRoZSBjb21tYW5kLgorCitJZiBpdCBtYWtlcyBzZW5zZSBmb3IgdGhlIGtleSwgeW91IGNh biB1c2UgYSBwcmVmaXggYXJnIHdpdGggYFxcPGlzZWFyY2gtbW9kZS1tYXA+XAorXFxbaXNlYXJj aC15YW5rLXRvLWtleS1kZXN0aW5hdGlvbl0nCit0byBhcHBseSB0aGUgcHJlZml4IGFyZyB0byB0 aGUga2V5LiAgRm9yIGV4YW1wbGUsIGBDLXUgNSBcCitcXFtpc2VhcmNoLXlhbmstdG8ta2V5LWRl c3RpbmF0aW9uXSBNLWYnCittb3ZlcyB0aGUgY3Vyc29yIGZvcndhcmQgNSB3b3JkcyBhbmQgYWRq dXN0cyB0aGUgc2VhcmNoIHN0cmluZworYWNjb3JkaW5nbHkuCisKK0lmIHRoZSBuZXcgcG9zaXRp b24gaXMgb3V0c2lkZSB0aGUgZXhpc3Rpbmcgc2VhcmNoIGhpdCB0aGVuIHRoZSB0ZXh0Citmcm9t IHRoZSBzZWFyY2ggaGl0IHRvIHRoZSBuZXcgcG9zaXRpb24gaXMgYWRkZWQgdG8gdGhlIHNlYXJj aCBzdHJpbmcuCitJZiB0aGUgcG9zaXRpb24gaXMgaW5zaWRlIHRoZSBoaXQsIHRoZW4gdGhlIHRl eHQgZnJvbSB0aGUgZWRnZSBvZiB0aGUKK2hpdCB0aHJvdWdoIHRoZSBuZXcgcG9zaXRpb24gaXMg cmVtb3ZlZCBmcm9tIHRoZSBzZWFyY2ggc3RyaW5nLiIKKyAgKGludGVyYWN0aXZlICJrS2V5IHNl cXVlbmNlICh0byBtb3ZlIGN1cnNvcik6ICIpCisgICgoaW5oaWJpdC1maWVsZC10ZXh0LW1vdGlv biAgdCkKKyAgIChpc2VhcmNoLW1vZGUtbWFwICAgICAgICAgICBuaWwpCisgICAoY29tbWFuZCAg ICAgICAgICAgICAgICAgICAgKGtleS1iaW5kaW5nIGtleSB0KSkpCisgIChzYXZlLWV4Y3Vyc2lv bgorICAgIChjYWxsLWludGVyYWN0aXZlbHkgY29tbWFuZCkKKyAgICAoc2V0cSBpc2VhcmNoLW5l dy1wb3NpdGlvbiAgKHBvaW50KSkpKQorCisoZGVmaW5lLWlzZWFyY2gteWFuay1tb3ZlbWVudC1j b21tYW5kIGlzZWFyY2gteWFuay10aHJvdWdoLW1vdmUgKCkKKyAgIkFkanVzdCBzZWFyY2ggdG8g dXNlIHRleHQgZnJvbSBzZWFyY2ggaGl0IHRocm91Z2ggYSBuZXcgY3Vyc29yIHBvc2l0aW9uLgor WW91IGVudGVyIGEgcmVjdXJzaXZlIGVkaXQgdG8gbW92ZSB0aGUgY3Vyc29yIGFueSB3YXkgeW91 IGxpa2UuCitVc2UgXFxbZXhpdC1yZWN1cnNpdmUtZWRpdF0gdG8gcmVzdW1lIHNlYXJjaCB3aXRo IHRoZSBhZGp1c3RlZCBzZWFyY2ggc3RyaW5nLgorCitJbiB0aGUgcmVjdXJzaXZlIGVkaXQgeW91 IGNhbiBkbyBhbnl0aGluZywgYnV0IHRoZSBlZmZlY3QgdXNlZCBieSB0aGUKK2NvbW1hbmQgaXMg b25seSBjdXJzb3IgbW92ZW1lbnQgdG8gYSBuZXcgcG9zaXRpb24uCisKK0lmIHRoZSBuZXcgcG9z aXRpb24gaXMgb3V0c2lkZSB0aGUgZXhpc3Rpbmcgc2VhcmNoIGhpLHQgdGhlbiB0aGUgdGV4dAor ZnJvbSB0aGUgc2VhcmNoIGhpdCB0byB0aGUgbmV3IHBvc2l0aW9uIGlzIGFkZGVkIHRvIHRoZSBz ZWFyY2ggc3RyaW5nLgorSWYgdGhlIHBvc2l0aW9uIGlzIGluc2lkZSB0aGUgaGl0LCB0aGVuIHRo ZSB0ZXh0IGZyb20gdGhlIGVkZ2Ugb2YgdGhlCitoaXQgdGhyb3VnaCB0aGUgbmV3IHBvc2l0aW9u IGlzIHJlbW92ZWQgZnJvbSB0aGUgc2VhcmNoIHN0cmluZy4iCisgIChpbnRlcmFjdGl2ZSkKKyAg KCkKKyAgKHdpdGgtaXNlYXJjaC1zdXNwZW5kZWQKKyAgIChzYXZlLWV4Y3Vyc2lvbgorICAgICAo bWVzc2FnZSAoc3Vic3RpdHV0ZS1jb21tYW5kLWtleXMKKyAgICAgICAgICAgICAgICJSRUNVUlNJ VkUgZWRpdC4gYFxcW2V4aXQtcmVjdXJzaXZlLWVkaXRdJyB0byByZXN1bWUgSXNlYXJjaCIpKQor ICAgICAocmVjdXJzaXZlLWVkaXQpCisgICAgIChzZXRxIGlzZWFyY2gtbmV3LXBvc2l0aW9uICAo cG9pbnQpKSkpKQogCiAoZGVmdW4gaXNlYXJjaC1jaGFyLWJ5LW5hbWUgKCZvcHRpb25hbCBjb3Vu dCkKICAgIlJlYWQgYSBjaGFyYWN0ZXIgYnkgaXRzIFVuaWNvZGUgbmFtZSBhbmQgYWRkIGl0IHRv IHRoZSBzZWFyY2ggc3RyaW5nLgpAQCAtMzAxNCw5ICszMjI5LDE2IEBACiAJCSAgICAobWFwY29u Y2F0ICdpc2VhcmNoLXRleHQtY2hhci1kZXNjcmlwdGlvbiBzdHJpbmcgIiIpKSkpCiAgICAgKGlz ZWFyY2gtcHJvY2Vzcy1zZWFyY2gtc3RyaW5nIHN0cmluZyBtZXNzYWdlKSkpCiAKLShkZWZ1biBp c2VhcmNoLXByb2Nlc3Mtc2VhcmNoLXN0cmluZyAoc3RyaW5nIG1lc3NhZ2UpCi0gIChzZXRxIGlz ZWFyY2gtc3RyaW5nIChjb25jYXQgaXNlYXJjaC1zdHJpbmcgc3RyaW5nKQotCWlzZWFyY2gtbWVz c2FnZSAoY29uY2F0IGlzZWFyY2gtbWVzc2FnZSBtZXNzYWdlKSkKKyhkZWZ1biBpc2VhcmNoLXBy b2Nlc3Mtc2VhcmNoLXN0cmluZyAoc3RyaW5nIG1lc3NhZ2UgJm9wdGlvbmFsIHJlc3BlY3QtZGly ZWN0aW9uKQorICAiQXBwZW5kIFNUUklORyB0byBgaXNlYXJjaC1zdHJpbmcnIGFuZCBNRVNTQUdF IHRvIGBpc2VhcmNoLW1lc3NhZ2UnLgorTm9uLW5pbCBSRVNQRUNULURJUkVDVElPTiBtZWFucyBw cmVwZW5kIFNUUklORyBpZiBzZWFyY2hpbmcgYmFja3dhcmQuIgorICAobGV0ICgoZndkICAob3Ig aXNlYXJjaC1mb3J3YXJkICAobm90IHJlc3BlY3QtZGlyZWN0aW9uKSkpKQorICAgIChzZXRxIGlz ZWFyY2gtc3RyaW5nICAgKGlmIGZ3ZAorCQkJICAgICAgIChjb25jYXQgaXNlYXJjaC1zdHJpbmcg c3RyaW5nKQorCQkJICAgICAoY29uY2F0IHN0cmluZyBpc2VhcmNoLXN0cmluZykpCisJICBpc2Vh cmNoLW1lc3NhZ2UgIChpZiBmd2QKKwkJCSAgICAgICAoY29uY2F0IGlzZWFyY2gtbWVzc2FnZSBt ZXNzYWdlKQorCQkJICAgICAoY29uY2F0IG1lc3NhZ2UgaXNlYXJjaC1tZXNzYWdlKSkpKQogICAo aXNlYXJjaC1zZWFyY2gtYW5kLXVwZGF0ZSkpCiAKIAwK --__15667820916015789abhmp0004.oracle.com Content-Type: application/octet-stream; name="isearch-2019-08-19e-PATCH.el" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="isearch-2019-08-19e-PATCH.el" Ozs7IGlzZWFyY2guZWwgLS0tIGluY3JlbWVudGFsIHNlYXJjaCBtaW5vciBtb2RlIC0qLSBsZXhp Y2FsLWJpbmRpbmc6IHQgLSotCgo7OyBDb3B5cmlnaHQgKEMpIDE5OTItMTk5NywgMTk5OS0yMDE5 IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgoKOzsgQXV0aG9yOiBEYW5pZWwgTGFMaWJl cnRlIDxsaWJlcnRlQGNzLnVpdWMuZWR1Pgo7OyBNYWludGFpbmVyOiBlbWFjcy1kZXZlbEBnbnUu b3JnCjs7IEtleXdvcmRzOiBtYXRjaGluZwo7OyBQYWNrYWdlOiBlbWFjcwoKOzsgVGhpcyBmaWxl IGlzIHBhcnQgb2YgR05VIEVtYWNzLgoKOzsgR05VIEVtYWNzIGlzIGZyZWUgc29mdHdhcmU6IHlv dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKOzsgaXQgdW5kZXIgdGhlIHRlcm1z IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKOzsgdGhl IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5z ZSwgb3IKOzsgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KCjs7IEdOVSBFbWFj cyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAo7OyBi dXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50 eSBvZgo7OyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP U0UuICBTZWUgdGhlCjs7IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFp bHMuCgo7OyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJh bCBQdWJsaWMgTGljZW5zZQo7OyBhbG9uZyB3aXRoIEdOVSBFbWFjcy4gIElmIG5vdCwgc2VlIDxo dHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCgo7OzsgQ29tbWVudGFyeToKCjs7IEluc3Ry dWN0aW9ucwoKOzsgRm9yIHByb2dyYW1tZWQgdXNlIG9mIGlzZWFyY2gtbW9kZSwgZS5nLiBjYWxs aW5nIChpc2VhcmNoLWZvcndhcmQpLAo7OyBpc2VhcmNoLW1vZGUgYmVoYXZlcyBtb2RhbGx5IGFu ZCBkb2VzIG5vdCByZXR1cm4gdW50aWwgdGhlIHNlYXJjaAo7OyBpcyBjb21wbGV0ZWQuICBJdCB1 c2VzIGEgcmVjdXJzaXZlLWVkaXQgdG8gYmVoYXZlIHRoaXMgd2F5LgoKOzsgVGhlIGtleSBiaW5k aW5ncyBhY3RpdmUgd2l0aGluIGlzZWFyY2gtbW9kZSBhcmUgZGVmaW5lZCBiZWxvdyBpbgo7OyBg aXNlYXJjaC1tb2RlLW1hcCcuICBBbHNvIHNlZSBtaW5pYnVmZmVyLWxvY2FsLWlzZWFyY2gtbWFw Cjs7IGZvciBiaW5kaW5ncyBhY3RpdmUgZHVyaW5nIGBpc2VhcmNoLWVkaXQtc3RyaW5nJy4KCjs7 IGlzZWFyY2gtbW9kZSBzaG91bGQgd29yayBldmVuIGlmIHlvdSBzd2l0Y2ggd2luZG93cyB3aXRo IHRoZSBtb3VzZSwKOzsgaW4gd2hpY2ggY2FzZSBpc2VhcmNoLW1vZGUgaXMgdGVybWluYXRlZCBh dXRvbWF0aWNhbGx5IGJlZm9yZSB0aGUKOzsgc3dpdGNoLgoKOzsgVGhlIHNlYXJjaCByaW5nIGFu ZCBjb21wbGV0aW9uIGNvbW1hbmRzIGF1dG9tYXRpY2FsbHkgcHV0IHlvdSBpbgo7OyB0aGUgbWlu aWJ1ZmZlciB0byBlZGl0IHRoZSBzdHJpbmcuICBUaGlzIGdpdmVzIHlvdSBhIGNoYW5jZSB0bwo7 OyBtb2RpZnkgdGhlIHNlYXJjaCBzdHJpbmcgYmVmb3JlIGV4ZWN1dGluZyB0aGUgc2VhcmNoLiAg VGhlcmUgYXJlCjs7IHRocmVlIGNvbW1hbmRzIHRvIHRlcm1pbmF0ZSB0aGUgZWRpdGluZzogQy1z IGFuZCBDLXIgZXhpdCB0aGUKOzsgbWluaWJ1ZmZlciBhbmQgc2VhcmNoIGZvcndhcmQgYW5kIHJl dmVyc2UgcmVzcGVjdGl2ZWx5LCB3aGlsZSBDLW0KOzsgZXhpdHMgYW5kIHNlYXJjaGVzIGluIHRo ZSBsYXN0IHNlYXJjaCBkaXJlY3Rpb24uCgo7OyBFeGl0aW5nIGltbWVkaWF0ZWx5IGZyb20gaXNl YXJjaCB1c2VzIGlzZWFyY2gtZWRpdC1zdHJpbmcgaW5zdGVhZAo7OyBvZiBub25pbmNyZW1lbnRh bC1zZWFyY2gsIGlmIHNlYXJjaC1ub25pbmNyZW1lbnRhbC1pbnN0ZWFkIGlzIG5vbi1uaWwuCjs7 IFRoZSBuYW1lIG9mIHRoaXMgb3B0aW9uIHNob3VsZCBwcm9iYWJseSBiZSBjaGFuZ2VkIGlmIHdl IGRlY2lkZSB0bwo7OyBrZWVwIHRoZSBiZWhhdmlvci4gIE5vIHBvaW50IGluIGZvcmNpbmcgbm9u aW5jcmVtZW50YWwgc2VhcmNoIHVudGlsCjs7IHRoZSBsYXN0IHBvc3NpYmxlIG1vbWVudC4KCjs7 OyBDb2RlOgoKKGV2YWwtd2hlbi1jb21waWxlIChyZXF1aXJlICdjbC1saWIpKQooZGVjbGFyZS1m dW5jdGlvbiB0bW0tbWVudWJhci1rZXltYXAgInRtbS5lbCIpCgwKOzsgU29tZSBhZGRpdGlvbmFs IG9wdGlvbnMgYW5kIGNvbnN0YW50cy4KCihkZWZncm91cCBpc2VhcmNoIG5pbAogICJJbmNyZW1l bnRhbCBzZWFyY2ggbWlub3IgbW9kZS4iCiAgOmxpbmsgJyhlbWFjcy1jb21tZW50YXJ5LWxpbmsg ImlzZWFyY2giKQogIDpsaW5rICcoY3VzdG9tLW1hbnVhbCAiKGVtYWNzKUluY3JlbWVudGFsIFNl YXJjaCIpCiAgOnByZWZpeCAiaXNlYXJjaC0iCiAgOnByZWZpeCAic2VhcmNoLSIKICA6Z3JvdXAg J21hdGNoaW5nKQoKCihkZWZjdXN0b20gc2VhcmNoLWV4aXQtb3B0aW9uIHQKICAiRGVmaW5lcyB3 aGF0IGNvbnRyb2wgY2hhcmFjdGVycyBkbyBpbiBpbmNyZW1lbnRhbCBzZWFyY2guCklmIHQsIHJh bmRvbSBjb250cm9sIGFuZCBtZXRhIGNoYXJhY3RlcnMgdGVybWluYXRlIHRoZSBzZWFyY2gKYW5k IGFyZSB0aGVuIGV4ZWN1dGVkIG5vcm1hbGx5LgpJZiBgZWRpdCcsIGVkaXQgdGhlIHNlYXJjaCBz dHJpbmcgaW5zdGVhZCBvZiBleGl0aW5nLgpJZiBgYXBwZW5kJywgdGhlIGNoYXJhY3RlcnMgd2hp Y2ggeW91IHR5cGUgdGhhdCBhcmUgbm90IGludGVycHJldGVkIGJ5CnRoZSBpbmNyZW1lbnRhbCBz ZWFyY2ggYXJlIHNpbXBseSBhcHBlbmRlZCB0byB0aGUgc2VhcmNoIHN0cmluZy4KSWYgbmlsLCBy dW4gdGhlIGNvbW1hbmQgd2l0aG91dCBleGl0aW5nIElzZWFyY2guIgogIDp0eXBlICcoY2hvaWNl IChjb25zdCA6dGFnICJUZXJtaW5hdGUgaW5jcmVtZW50YWwgc2VhcmNoIiB0KQogICAgICAgICAg ICAgICAgIChjb25zdCA6dGFnICJFZGl0IHRoZSBzZWFyY2ggc3RyaW5nIiBlZGl0KQogICAgICAg ICAgICAgICAgIChjb25zdCA6dGFnICJBcHBlbmQgY29udHJvbCBjaGFyYWN0ZXJzIHRvIHRoZSBz ZWFyY2ggc3RyaW5nIiBhcHBlbmQpCiAgICAgICAgICAgICAgICAgKGNvbnN0IDp0YWcgIkRvbid0 IHRlcm1pbmF0ZSBpbmNyZW1lbnRhbCBzZWFyY2giIG5pbCkpCiAgOnZlcnNpb24gIjI3LjEiKQoK KGRlZmN1c3RvbSBzZWFyY2gtc2xvdy13aW5kb3ctbGluZXMgMQogICJOdW1iZXIgb2YgbGluZXMg aW4gc2xvdyBzZWFyY2ggZGlzcGxheSB3aW5kb3dzLgpUaGVzZSBhcmUgdGhlIHNob3J0IHdpbmRv d3MgdXNlZCBkdXJpbmcgaW5jcmVtZW50YWwgc2VhcmNoIG9uIHNsb3cgdGVybWluYWxzLgpOZWdh dGl2ZSBtZWFucyBwdXQgdGhlIHNsb3cgc2VhcmNoIHdpbmRvdyBhdCB0aGUgdG9wIChub3JtYWxs eSBpdCdzIGF0IGJvdHRvbSkKYW5kIHRoZSB2YWx1ZSBpcyBtaW51cyB0aGUgbnVtYmVyIG9mIGxp bmVzLiIKICA6dHlwZSAnaW50ZWdlcikKCihkZWZjdXN0b20gc2VhcmNoLXNsb3ctc3BlZWQgMTIw MAogICJIaWdoZXN0IHRlcm1pbmFsIHNwZWVkIGF0IHdoaWNoIHRvIHVzZSBcInNsb3dcIiBzdHls ZSBpbmNyZW1lbnRhbCBzZWFyY2guClRoaXMgaXMgdGhlIHN0eWxlIHdoZXJlIGEgb25lLWxpbmUg d2luZG93IGlzIGNyZWF0ZWQgdG8gc2hvdyB0aGUgbGluZQp0aGF0IHRoZSBzZWFyY2ggaGFzIHJl YWNoZWQuIgogIDp0eXBlICdpbnRlZ2VyKQoKKGRlZmN1c3RvbSBzZWFyY2gtdXBwZXItY2FzZSAn bm90LXlhbmtzCiAgIklmIG5vbi1uaWwsIHVwcGVyIGNhc2UgY2hhcnMgZGlzYWJsZSBjYXNlIGZv bGQgc2VhcmNoaW5nLgpUaGF0IGlzLCB1cHBlciBhbmQgbG93ZXIgY2FzZSBjaGFycyBtdXN0IG1h dGNoIGV4YWN0bHkuClRoaXMgYXBwbGllcyBubyBtYXR0ZXIgd2hlcmUgdGhlIGNoYXJzIGNvbWUg ZnJvbSwgYnV0IGRvZXMgbm90CmFwcGx5IHRvIGNoYXJzIGluIHJlZ2V4cHMgdGhhdCBhcmUgcHJl Zml4ZWQgd2l0aCBgXFwnLgpJZiB0aGlzIHZhbHVlIGlzIGBub3QteWFua3MnLCB0ZXh0IHlhbmtl ZCBpbnRvIHRoZSBzZWFyY2ggc3RyaW5nCmluIElzZWFyY2ggbW9kZSBpcyBhbHdheXMgZG93bmNh c2VkLiIKICA6dHlwZSAnKGNob2ljZSAoY29uc3QgOnRhZyAib2ZmIiBuaWwpCgkJIChjb25zdCBu b3QteWFua3MpCgkJIChvdGhlciA6dGFnICJvbiIgdCkpKQoKKGRlZmN1c3RvbSBzZWFyY2gtbm9u aW5jcmVtZW50YWwtaW5zdGVhZCB0CiAgIklmIG5vbi1uaWwsIGRvIGEgbm9uaW5jcmVtZW50YWwg c2VhcmNoIGluc3RlYWQgb2YgZXhpdGluZyBpbW1lZGlhdGVseS4KVGhpcyBhZmZlY3RzIHRoZSBi ZWhhdmlvciBvZiBgaXNlYXJjaC1leGl0JyBhbmQgYW55IGtleSBib3VuZCB0byB0aGF0CmNvbW1h bmQ6IGlmIHRoaXMgdmFyaWFibGUgaXMgbmlsLCBgaXNlYXJjaC1leGl0JyBhbHdheXMgZXhpdHMg dGhlIHNlYXJjaDsKaWYgdGhlIHZhbHVlIGlzIG5vbi1uaWwsIGFuZCB0aGUgc2VhcmNoIHN0cmlu ZyBpcyBlbXB0eSwgYGlzZWFyY2gtZXhpdCcKc3RhcnRzIGEgbm9uaW5jcmVtZW50YWwgc2VhcmNo IGluc3RlYWQuICAoQWN0dWFsbHksIGBpc2VhcmNoLWVkaXQtc3RyaW5nJwppcyBjYWxsZWQgdG8g bGV0IHlvdSBlbnRlciB0aGUgc2VhcmNoIHN0cmluZywgYW5kIFJFVCB0ZXJtaW5hdGVzIGVkaXRp bmcKYW5kIGRvZXMgYSBub25pbmNyZW1lbnRhbCBzZWFyY2guKSIKICA6dHlwZSAnYm9vbGVhbikK CihkZWZjdXN0b20gc2VhcmNoLXdoaXRlc3BhY2UtcmVnZXhwIChwdXJlY29weSAiXFxzLSsiKQog ICJJZiBub24tbmlsLCByZWd1bGFyIGV4cHJlc3Npb24gdG8gbWF0Y2ggYSBzZXF1ZW5jZSBvZiB3 aGl0ZXNwYWNlIGNoYXJzLgpXaGVuIHlvdSBlbnRlciBhIHNwYWNlIG9yIHNwYWNlcyBpbiB0aGUg aW5jcmVtZW50YWwgc2VhcmNoLCBpdAp3aWxsIG1hdGNoIGFueSBzZXF1ZW5jZSBtYXRjaGVkIGJ5 IHRoaXMgcmVnZXhwLiAgQXMgYW4gZXhjZXB0aW9uLApzcGFjZXMgYXJlIHRyZWF0ZWQgbm9ybWFs bHkgaW4gcmVnZXhwIGluY3JlbWVudGFsIHNlYXJjaCBpZiB0aGV5Cm9jY3VyIGluIGEgcmVnZXhw IGNvbnN0cnVjdCBsaWtlIFsuLi5dIG9yICosICsgb3IgPy4KCklmIHRoZSB2YWx1ZSBpcyBhIHN0 cmluZywgaXQgYXBwbGllcyB0byBib3RoIG9yZGluYXJ5IGFuZApyZWdleHAgaW5jcmVtZW50YWwg c2VhcmNoLiAgSWYgdGhlIHZhbHVlIGlzIG5pbCwgb3IKYGlzZWFyY2gtbGF4LXdoaXRlc3BhY2Un IGlzIG5pbCBmb3Igb3JkaW5hcnkgaW5jcmVtZW50YWwgc2VhcmNoLCBvcgpgaXNlYXJjaC1yZWdl eHAtbGF4LXdoaXRlc3BhY2UnIGlzIG5pbCBmb3IgcmVnZXhwIGluY3JlbWVudGFsIHNlYXJjaCwK dGhlbiBlYWNoIHNwYWNlIHlvdSB0eXBlIG1hdGNoZXMgbGl0ZXJhbGx5LCBhZ2FpbnN0IG9uZSBz cGFjZS4KCllvdSBtaWdodCB3YW50IHRvIHVzZSBzb21ldGhpbmcgbGlrZSBcIlsgXFx0XFxyXFxu XStcIiBpbnN0ZWFkLgpJbiB0aGUgQ3VzdG9taXphdGlvbiBidWZmZXIsIHRoYXQgaXMgYFsnIGZv bGxvd2VkIGJ5IGEgc3BhY2UsIGEKdGFiLCBhIGNhcnJpYWdlIHJldHVybiAoY29udHJvbC1NKSwg YSBuZXdsaW5lLCBhbmQgYF0rJy4gIERvbid0CmFkZCBhbnkgY2FwdHVyaW5nIGdyb3VwcyBpbnRv IHRoaXMgdmFsdWU7IHRoYXQgY2FuIGNoYW5nZSB0aGUKbnVtYmVyaW5nIG9mIGV4aXN0aW5nIGNh cHR1cmUgZ3JvdXBzIGluIHVuZXhwZWN0ZWQgd2F5cy4iCiAgOnR5cGUgJyhjaG9pY2UgKGNvbnN0 IDp0YWcgIk1hdGNoIFNwYWNlcyBMaXRlcmFsbHkiIG5pbCkKCQkgcmVnZXhwKQogIDp2ZXJzaW9u ICIyNC4zIikKCihkZWZjdXN0b20gc2VhcmNoLWludmlzaWJsZSAnb3BlbgogICJJZiB0IGluY3Jl bWVudGFsIHNlYXJjaC9xdWVyeS1yZXBsYWNlIGNhbiBtYXRjaCBoaWRkZW4gdGV4dC4KQSBuaWwg dmFsdWUgbWVhbnMgZG9uJ3QgbWF0Y2ggaW52aXNpYmxlIHRleHQuCldoZW4gdGhlIHZhbHVlIGlz IGBvcGVuJywgaWYgdGhlIHRleHQgbWF0Y2hlZCBpcyBtYWRlIGludmlzaWJsZSBieQphbiBvdmVy bGF5IGhhdmluZyBhIG5vbi1uaWwgYGludmlzaWJsZScgcHJvcGVydHksIGFuZCB0aGF0IG92ZXJs YXkKaGFzIGEgbm9uLW5pbCBwcm9wZXJ0eSBgaXNlYXJjaC1vcGVuLWludmlzaWJsZScsIHRoZW4g aW5jcmVtZW50YWwKc2VhcmNoIHdpbGwgc2hvdyB0aGUgaGlkZGVuIHRleHQuICAoVGhpcyBhcHBs aWVzIHdoZW4gdXNpbmcgYG91dGxpbmUuZWwnCmFuZCBgaGlkZXNob3cuZWwnLikKClRvIHRlbXBv cmFyaWx5IGNoYW5nZSB0aGUgdmFsdWUgZm9yIGFuIGFjdGl2ZSBpbmNyZW1lbnRhbCBzZWFyY2gs CnVzZSBcXDxpc2VhcmNoLW1vZGUtbWFwPlxcW2lzZWFyY2gtdG9nZ2xlLWludmlzaWJsZV0uCgpT ZWUgYWxzbyB0aGUgcmVsYXRlZCBvcHRpb24gYGlzZWFyY2gtaGlkZS1pbW1lZGlhdGVseScuCgpT ZWUgYWxzbyBgcmV2ZWFsLW1vZGUnIGlmIHlvdSB3YW50IG92ZXJsYXlzIHRvIGF1dG9tYXRpY2Fs bHkgYmUgb3BlbmVkCndoZW5ldmVyIHBvaW50IGlzIGluIG9uZSBvZiB0aGVtLiIKICA6dHlwZSAn KGNob2ljZSAoY29uc3QgOnRhZyAiTWF0Y2ggaGlkZGVuIHRleHQiIHQpCgkJIChjb25zdCA6dGFn ICJPcGVuIG92ZXJsYXlzIiBvcGVuKQoJCSAoY29uc3QgOnRhZyAiRG9uJ3QgbWF0Y2ggaGlkZGVu IHRleHQiIG5pbCkpKQoKKGRlZmN1c3RvbSBpc2VhcmNoLWhpZGUtaW1tZWRpYXRlbHkgdAogICJJ ZiBub24tbmlsLCByZS1oaWRlIGFuIGludmlzaWJsZSBtYXRjaCByaWdodCBhd2F5LgpUaGlzIHZh cmlhYmxlIG1ha2VzIGEgZGlmZmVyZW5jZSB3aGVuIGBzZWFyY2gtaW52aXNpYmxlJyBpcyBzZXQg dG8gYG9wZW4nLgpJZiBub24tbmlsLCBpbnZpc2libGUgbWF0Y2hlcyBhcmUgcmUtaGlkZGVuIGFz IHNvb24gYXMgdGhlIG1hdGNoIG1vdmVzCm9mZiB0aGUgaW52aXNpYmxlIHRleHQgc3Vycm91bmRp bmcgdGhlIG1hdGNoLgpJZiBuaWwgdGhlbiBkbyBub3QgcmUtaGlkZSBvcGVuZWQgaW52aXNpYmxl IHRleHQgd2hlbiB0aGUgbWF0Y2ggbW92ZXMuCldoYXRldmVyIHRoZSB2YWx1ZSwgYWxsIG9wZW5l ZCBpbnZpc2libGUgdGV4dCBpcyBoaWRkZW4gYWdhaW4gYWZ0ZXIgZXhpdGluZwp0aGUgc2VhcmNo LCB3aXRoIHRoZSBleGNlcHRpb24gb2YgdGhlIGxhc3Qgc3VjY2Vzc2Z1bCBtYXRjaCwgaWYgYW55 LiIKICA6dHlwZSAnYm9vbGVhbikKCihkZWZjdXN0b20gaXNlYXJjaC1yZXN1bWUtaW4tY29tbWFu ZC1oaXN0b3J5IG5pbAogICJJZiBub24tbmlsLCBgaXNlYXJjaC1yZXN1bWUnIGNvbW1hbmRzIGFy ZSBhZGRlZCB0byB0aGUgY29tbWFuZCBoaXN0b3J5LgpUaGlzIGFsbG93cyB5b3UgdG8gcmVzdW1l IGVhcmxpZXIgSXNlYXJjaCBzZXNzaW9ucyB0aHJvdWdoIHRoZQpjb21tYW5kIGhpc3RvcnkuIgog IDp0eXBlICdib29sZWFuKQoKKGRlZmN1c3RvbSBpc2VhcmNoLWRpcmVjdGlvbmFsLXlhbmsgdAog ICJOb24tbmlsIGlmIHlhbmtpbmcgY29uc2VjdXRpdmUgdGV4dCBhdCBwb2ludCByZXNwZWN0cyBz ZWFyY2ggZGlyZWN0aW9uLiIKICA6dHlwZSAnYm9vbGVhbikKCihkZWZ2YXIgaXNlYXJjaC1tb2Rl LWhvb2sgbmlsCiAgIkZ1bmN0aW9uKHMpIHRvIGNhbGwgYWZ0ZXIgc3RhcnRpbmcgdXAgYW4gaW5j cmVtZW50YWwgc2VhcmNoLiIpCgooZGVmdmFyIGlzZWFyY2gtdXBkYXRlLXBvc3QtaG9vayBuaWwK ICAiRnVuY3Rpb24ocykgdG8gY2FsbCBhZnRlciBpc2VhcmNoIGhhcyBmb3VuZCBtYXRjaGVzIGlu IHRoZSBidWZmZXIuIikKCihkZWZ2YXIgaXNlYXJjaC1tb2RlLWVuZC1ob29rIG5pbAogICJGdW5j dGlvbihzKSB0byBjYWxsIGFmdGVyIHRlcm1pbmF0aW5nIGFuIGluY3JlbWVudGFsIHNlYXJjaC4K V2hlbiB0aGVzZSBmdW5jdGlvbnMgYXJlIGNhbGxlZCwgYGlzZWFyY2gtbW9kZS1lbmQtaG9vay1x dWl0JwppcyBub24tbmlsIGlmIHRoZSB1c2VyIHF1aXRzIHRoZSBzZWFyY2guIikKCihkZWZ2YXIg aXNlYXJjaC1tb2RlLWVuZC1ob29rLXF1aXQgbmlsCiAgIk5vbi1uaWwgd2hpbGUgcnVubmluZyBg aXNlYXJjaC1tb2RlLWVuZC1ob29rJyBpZiB0aGUgdXNlciBxdWl0cyB0aGUgc2VhcmNoLiIpCgoo ZGVmdmFyIGlzZWFyY2gtbWVzc2FnZS1mdW5jdGlvbiBuaWwKICAiRnVuY3Rpb24gdG8gY2FsbCB0 byBkaXNwbGF5IHRoZSBzZWFyY2ggcHJvbXB0LgpJZiBuaWwsIHVzZSBmdW5jdGlvbiBgaXNlYXJj aC1tZXNzYWdlJy4iKQoKKGRlZnZhciBpc2VhcmNoLXdyYXAtZnVuY3Rpb24gbmlsCiAgIkZ1bmN0 aW9uIHRvIGNhbGwgdG8gd3JhcCB0aGUgc2VhcmNoIHdoZW4gc2VhcmNoIGlzIGZhaWxlZC4KVGhl IGZ1bmN0aW9uIGlzIGNhbGxlZCB3aXRoIG5vIHBhcmFtZXRlcnMsIGFuZCB3b3VsZCB0eXBpY2Fs bHkKbW92ZSBwb2ludC4KCklmIG5pbCwgbW92ZSBwb2ludCB0byB0aGUgYmVnaW5uaW5nIG9mIHRo ZSBidWZmZXIgZm9yIGEgZm9yd2FyZApzZWFyY2gsIG9yIHRvIHRoZSBlbmQgb2YgdGhlIGJ1ZmZl ciBmb3IgYSBiYWNrd2FyZCBzZWFyY2guIikKCihkZWZ2YXIgaXNlYXJjaC1wdXNoLXN0YXRlLWZ1 bmN0aW9uIG5pbAogICJGdW5jdGlvbiB0byBzYXZlIGEgZnVuY3Rpb24gcmVzdG9yaW5nIHRoZSBt b2RlLXNwZWNpZmljIElzZWFyY2ggc3RhdGUKdG8gdGhlIHNlYXJjaCBzdGF0dXMgc3RhY2suIikK CihkZWZ2YXIgaXNlYXJjaC1maWx0ZXItcHJlZGljYXRlICMnaXNlYXJjaC1maWx0ZXItdmlzaWJs ZQogICJQcmVkaWNhdGUgdG8gZmlsdGVyIGhpdHMgb2YgSXNlYXJjaCBhbmQgcmVwbGFjZSBjb21t YW5kcy4KSXNlYXJjaCBoaXRzIHRoYXQgZG9uJ3Qgc2F0aXNmeSB0aGUgcHJlZGljYXRlIHdpbGwg YmUgc2tpcHBlZC4KVGhlIHZhbHVlIHNob3VsZCBiZSBhIGZ1bmN0aW9uIG9mIHR3byBhcmd1bWVu dHM7IGl0IHdpbGwgYmUKY2FsbGVkIHdpdGggdGhlIHRoZSBwb3NpdGlvbnMgb2YgdGhlIHN0YXJ0 IGFuZCB0aGUgZW5kIG9mIHRoZQp0ZXh0IG1hdGNoZWQgYnkgSXNlYXJjaCBhbmQgcmVwbGFjZSBj b21tYW5kcy4gIElmIHRoaXMgZnVuY3Rpb24KcmV0dXJucyBuaWwsIElzZWFyY2ggYW5kIHJlcGxh Y2UgY29tbWFuZHMgd2lsbCBjb250aW51ZSBzZWFyY2hpbmcKd2l0aG91dCBzdG9wcGluZyBhdCBy ZXNwLiByZXBsYWNpbmcgdGhpcyBtYXRjaC4KCklmIHlvdSB1c2UgYGFkZC1mdW5jdGlvbicgdG8g bW9kaWZ5IHRoaXMgdmFyaWFibGUsIHlvdSBjYW4gdXNlIHRoZQpgaXNlYXJjaC1tZXNzYWdlLXBy ZWZpeCcgYWR2aWNlIHByb3BlcnR5IHRvIHNwZWNpZnkgdGhlIHByZWZpeCBzdHJpbmcKZGlzcGxh eWVkIGluIHRoZSBzZWFyY2ggbWVzc2FnZS4iKQoKOzsgU2VhcmNoIHJpbmcuCgooZGVmdmFyIHNl YXJjaC1yaW5nIG5pbAogICJMaXN0IG9mIHNlYXJjaCBzdHJpbmcgc2VxdWVuY2VzLiIpCihkZWZ2 YXIgcmVnZXhwLXNlYXJjaC1yaW5nIG5pbAogICJMaXN0IG9mIHJlZ3VsYXIgZXhwcmVzc2lvbiBz ZWFyY2ggc3RyaW5nIHNlcXVlbmNlcy4iKQoKKGRlZmN1c3RvbSBzZWFyY2gtcmluZy1tYXggMTYK ICAiTWF4aW11bSBsZW5ndGggb2Ygc2VhcmNoIHJpbmcgYmVmb3JlIG9sZGVzdCBlbGVtZW50cyBh cmUgdGhyb3duIGF3YXkuIgogIDp0eXBlICdpbnRlZ2VyKQooZGVmY3VzdG9tIHJlZ2V4cC1zZWFy Y2gtcmluZy1tYXggMTYKICAiTWF4aW11bSBsZW5ndGggb2YgcmVnZXhwIHNlYXJjaCByaW5nIGJl Zm9yZSBvbGRlc3QgZWxlbWVudHMgYXJlIHRocm93biBhd2F5LiIKICA6dHlwZSAnaW50ZWdlcikK CihkZWZ2YXIgc2VhcmNoLXJpbmcteWFuay1wb2ludGVyIG5pbAogICJJbmRleCBpbiBgc2VhcmNo LXJpbmcnIG9mIGxhc3Qgc3RyaW5nIHJldXNlZC4KSXQgaXMgbmlsIGlmIG5vbmUgeWV0LiIpCihk ZWZ2YXIgcmVnZXhwLXNlYXJjaC1yaW5nLXlhbmstcG9pbnRlciBuaWwKICAiSW5kZXggaW4gYHJl Z2V4cC1zZWFyY2gtcmluZycgb2YgbGFzdCBzdHJpbmcgcmV1c2VkLgpJdCBpcyBuaWwgaWYgbm9u ZSB5ZXQuIikKCihkZWZjdXN0b20gc2VhcmNoLXJpbmctdXBkYXRlIG5pbAogICJOb24tbmlsIGlm IGFkdmFuY2luZyBvciByZXRyZWF0aW5nIGluIHRoZSBzZWFyY2ggcmluZyBzaG91bGQgY2F1c2Ug c2VhcmNoLgpEZWZhdWx0IHZhbHVlLCBuaWwsIG1lYW5zIGVkaXQgdGhlIHN0cmluZyBpbnN0ZWFk LiIKICA6dHlwZSAnYm9vbGVhbikKCihhdXRvbG9hZCAnY2hhci1mb2xkLXRvLXJlZ2V4cCAiY2hh ci1mb2xkIikKCihkZWZjdXN0b20gc2VhcmNoLWRlZmF1bHQtbW9kZSBuaWwKICAiRGVmYXVsdCBt b2RlIHRvIHVzZSB3aGVuIHN0YXJ0aW5nIGlzZWFyY2guClZhbHVlIGlzIG5pbCwgdCwgb3IgYSBm dW5jdGlvbi4KCklmIG5pbCwgZGVmYXVsdCB0byBsaXRlcmFsIHNlYXJjaGVzIChub3RlIHRoYXQg YGNhc2UtZm9sZC1zZWFyY2gnCmFuZCBgaXNlYXJjaC1sYXgtd2hpdGVzcGFjZScgbWF5IHN0aWxs IGJlIGFwcGxpZWQpLlxcPGlzZWFyY2gtbW9kZS1tYXA+CklmIHQsIGRlZmF1bHQgdG8gcmVnZXhw IHNlYXJjaGVzIChhcyBpZiB0eXBpbmcgYFxcW2lzZWFyY2gtdG9nZ2xlLXJlZ2V4cF0nIGR1cmlu Zwppc2VhcmNoKS4KCklmIGEgZnVuY3Rpb24sIHVzZSB0aGF0IGZ1bmN0aW9uIGFzIGFuIGBpc2Vh cmNoLXJlZ2V4cC1mdW5jdGlvbicuCkV4YW1wbGUgZnVuY3Rpb25zIChhbmQgdGhlIGtleXMgdG8g dG9nZ2xlIHRoZW0gZHVyaW5nIGlzZWFyY2gpCmFyZSBgd29yZC1zZWFyY2gtcmVnZXhwJyBcKGBc XFtpc2VhcmNoLXRvZ2dsZS13b3JkXScpLCBgaXNlYXJjaC1zeW1ib2wtcmVnZXhwJwpcKGBcXFtp c2VhcmNoLXRvZ2dsZS1zeW1ib2xdJyksIGFuZCBgY2hhci1mb2xkLXRvLXJlZ2V4cCcgXChgXFxb aXNlYXJjaC10b2dnbGUtY2hhci1mb2xkXScpLiIKICA7OyA6dHlwZSBpcyBzZXQgYmVsb3cgYnkg YGlzZWFyY2gtZGVmaW5lLW1vZGUtdG9nZ2xlJy4KICA6dHlwZSAnKGNob2ljZSAoY29uc3QgOnRh ZyAiTGl0ZXJhbCBzZWFyY2giIG5pbCkKICAgICAgICAgICAgICAgICAoY29uc3QgOnRhZyAiUmVn ZXhwIHNlYXJjaCIgdCkKICAgICAgICAgICAgICAgICAoZnVuY3Rpb24gOnRhZyAiT3RoZXIiKSkK ICA6dmVyc2lvbiAiMjUuMSIpCgo7OzsgaXNlYXJjaCBoaWdobGlnaHQgY3VzdG9taXphdGlvbi4K CihkZWZjdXN0b20gc2VhcmNoLWhpZ2hsaWdodCB0CiAgIk5vbi1uaWwgbWVhbnMgaW5jcmVtZW50 YWwgc2VhcmNoIGhpZ2hsaWdodHMgdGhlIGN1cnJlbnQgbWF0Y2guIgogIDp0eXBlICdib29sZWFu KQoKKGRlZmZhY2UgaXNlYXJjaAogICcoKCgoY2xhc3MgY29sb3IpIChtaW4tY29sb3JzIDg4KSAo YmFja2dyb3VuZCBsaWdodCkpCiAgICAgOzsgVGhlIGJhY2tncm91bmQgbXVzdCBub3QgYmUgdG9v IGRhcmssIGZvciB0aGF0IG1lYW5zCiAgICAgOzsgdGhlIGNoYXJhY3RlciBpcyBoYXJkIHRvIHNl ZSB3aGVuIHRoZSBjdXJzb3IgaXMgdGhlcmUuCiAgICAgKDpiYWNrZ3JvdW5kICJtYWdlbnRhMyIg OmZvcmVncm91bmQgImxpZ2h0c2t5Ymx1ZTEiKSkKICAgICgoKGNsYXNzIGNvbG9yKSAobWluLWNv bG9ycyA4OCkgKGJhY2tncm91bmQgZGFyaykpCiAgICAgKDpiYWNrZ3JvdW5kICJwYWxldmlvbGV0 cmVkMiIgOmZvcmVncm91bmQgImJyb3duNCIpKQogICAgKCgoY2xhc3MgY29sb3IpIChtaW4tY29s b3JzIDE2KSkKICAgICAoOmJhY2tncm91bmQgIm1hZ2VudGE0IiA6Zm9yZWdyb3VuZCAiY3lhbjEi KSkKICAgICgoKGNsYXNzIGNvbG9yKSAobWluLWNvbG9ycyA4KSkKICAgICAoOmJhY2tncm91bmQg Im1hZ2VudGE0IiA6Zm9yZWdyb3VuZCAiY3lhbjEiKSkKICAgICh0ICg6aW52ZXJzZS12aWRlbyB0 KSkpCiAgIkZhY2UgZm9yIGhpZ2hsaWdodGluZyBJc2VhcmNoIG1hdGNoZXMuIgogIDpncm91cCAn aXNlYXJjaAogIDpncm91cCAnYmFzaWMtZmFjZXMpCihkZWZ2YXIgaXNlYXJjaC1mYWNlICdpc2Vh cmNoKQoKKGRlZmZhY2UgaXNlYXJjaC1mYWlsCiAgJygoKChjbGFzcyBjb2xvcikgKG1pbi1jb2xv cnMgODgpIChiYWNrZ3JvdW5kIGxpZ2h0KSkKICAgICAoOmJhY2tncm91bmQgIlJvc3lCcm93bjEi KSkKICAgICgoKGNsYXNzIGNvbG9yKSAobWluLWNvbG9ycyA4OCkgKGJhY2tncm91bmQgZGFyaykp CiAgICAgKDpiYWNrZ3JvdW5kICJyZWQ0IikpCiAgICAoKChjbGFzcyBjb2xvcikgKG1pbi1jb2xv cnMgMTYpKQogICAgICg6YmFja2dyb3VuZCAicmVkIikpCiAgICAoKChjbGFzcyBjb2xvcikgKG1p bi1jb2xvcnMgOCkpCiAgICAgKDpiYWNrZ3JvdW5kICJyZWQiKSkKICAgICgoKGNsYXNzIGNvbG9y IGdyYXlzY2FsZSkpCiAgICAgOmZvcmVncm91bmQgImdyZXkiKQogICAgKHQgKDppbnZlcnNlLXZp ZGVvIHQpKSkKICAiRmFjZSBmb3IgaGlnaGxpZ2h0aW5nIGZhaWxlZCBwYXJ0IGluIElzZWFyY2gg ZWNoby1hcmVhIG1lc3NhZ2UuIgogIDp2ZXJzaW9uICIyMy4xIikKCihkZWZjdXN0b20gaXNlYXJj aC1sYXp5LWhpZ2hsaWdodCB0CiAgIkNvbnRyb2xzIHRoZSBsYXp5LWhpZ2hsaWdodGluZyBkdXJp bmcgaW5jcmVtZW50YWwgc2VhcmNoLgpXaGVuIG5vbi1uaWwsIGFsbCB0ZXh0IGN1cnJlbnRseSB2 aXNpYmxlIG9uIHRoZSBzY3JlZW4KbWF0Y2hpbmcgdGhlIGN1cnJlbnQgc2VhcmNoIHN0cmluZyBp cyBoaWdobGlnaHRlZCBsYXppbHkKKHNlZSBgbGF6eS1oaWdobGlnaHQtaW5pdGlhbC1kZWxheScg YW5kIGBsYXp5LWhpZ2hsaWdodC1pbnRlcnZhbCcpLgoKV2hlbiBtdWx0aXBsZSB3aW5kb3dzIGRp c3BsYXkgdGhlIGN1cnJlbnQgYnVmZmVyLCB0aGUKaGlnaGxpZ2h0aW5nIGlzIGRpc3BsYXllZCBv bmx5IG9uIHRoZSBzZWxlY3RlZCB3aW5kb3csIHVubGVzcwp0aGlzIHZhcmlhYmxlIGlzIHNldCB0 byB0aGUgc3ltYm9sIGBhbGwtd2luZG93cycuIgogIDp0eXBlICcoY2hvaWNlIGJvb2xlYW4KICAg ICAgICAgICAgICAgICAoY29uc3QgOnRhZyAiT24sIGFuZCBhcHBsaWVkIHRvIGFsbCB3aW5kb3dz IiBhbGwtd2luZG93cykpCiAgOmdyb3VwICdsYXp5LWhpZ2hsaWdodAogIDpncm91cCAnaXNlYXJj aCkKCihkZWZjdXN0b20gaXNlYXJjaC1sYXp5LWNvdW50IG5pbAogICJTaG93IG1hdGNoIG51bWJl cnMgaW4gdGhlIHNlYXJjaCBwcm9tcHQuCldoZW4gYm90aCB0aGlzIG9wdGlvbiBhbmQgYGlzZWFy Y2gtbGF6eS1oaWdobGlnaHQnIGFyZSBub24tbmlsLApzaG93IHRoZSBjdXJyZW50IG1hdGNoIG51 bWJlciBhbmQgdGhlIHRvdGFsIG51bWJlciBvZiBtYXRjaGVzCmluIHRoZSBidWZmZXIgKG9yIGl0 cyByZXN0cmljdGlvbikuIgogIDp0eXBlICdib29sZWFuCiAgOmdyb3VwICdsYXp5LWNvdW50CiAg Omdyb3VwICdpc2VhcmNoCiAgOnZlcnNpb24gIjI3LjEiKQoKOzs7IExhenkgaGlnaGxpZ2h0IGN1 c3RvbWl6YXRpb24uCgooZGVmZ3JvdXAgbGF6eS1oaWdobGlnaHQgbmlsCiAgIkxhenkgaGlnaGxp Z2h0aW5nIGZlYXR1cmUgZm9yIG1hdGNoaW5nIHN0cmluZ3MuIgogIDpwcmVmaXggImxhenktaGln aGxpZ2h0LSIKICA6dmVyc2lvbiAiMjEuMSIKICA6Z3JvdXAgJ2lzZWFyY2gKICA6Z3JvdXAgJ21h dGNoaW5nKQoKKGRlZmN1c3RvbSBsYXp5LWhpZ2hsaWdodC1jbGVhbnVwIHQKICAiQ29udHJvbHMg d2hldGhlciB0byByZW1vdmUgZXh0cmEgaGlnaGxpZ2h0aW5nIGFmdGVyIGEgc2VhcmNoLgpJZiB0 aGlzIGlzIG5pbCwgZXh0cmEgaGlnaGxpZ2h0aW5nIGNhbiBiZSBcIm1hbnVhbGx5XCIgcmVtb3Zl ZCB3aXRoClxcW2xhenktaGlnaGxpZ2h0LWNsZWFudXBdLiIKICA6dHlwZSAnYm9vbGVhbgogIDpn cm91cCAnbGF6eS1oaWdobGlnaHQpCgooZGVmY3VzdG9tIGxhenktaGlnaGxpZ2h0LWluaXRpYWwt ZGVsYXkgMC4yNQogICJTZWNvbmRzIHRvIHdhaXQgYmVmb3JlIGJlZ2lubmluZyB0byBsYXppbHkg aGlnaGxpZ2h0IGFsbCBtYXRjaGVzLiIKICA6dHlwZSAnbnVtYmVyCiAgOmdyb3VwICdsYXp5LWhp Z2hsaWdodCkKCihkZWZjdXN0b20gbGF6eS1oaWdobGlnaHQtaW50ZXJ2YWwgMCA7IDAuMDYyNQog ICJTZWNvbmRzIGJldHdlZW4gbGF6aWx5IGhpZ2hsaWdodGluZyBzdWNjZXNzaXZlIG1hdGNoZXMu IgogIDp0eXBlICdudW1iZXIKICA6Z3JvdXAgJ2xhenktaGlnaGxpZ2h0KQoKKGRlZmN1c3RvbSBs YXp5LWhpZ2hsaWdodC1tYXgtYXQtYS10aW1lIG5pbCA7IDIwIChidWcjMjU3NTEpCiAgIk1heGlt dW0gbWF0Y2hlcyB0byBoaWdobGlnaHQgYXQgYSB0aW1lIChmb3IgYGxhenktaGlnaGxpZ2h0Jyku CkxhcmdlciB2YWx1ZXMgbWF5IHJlZHVjZSBJc2VhcmNoJ3MgcmVzcG9uc2l2ZW5lc3MgdG8gdXNl ciBpbnB1dDsKc21hbGxlciB2YWx1ZXMgbWFrZSBtYXRjaGVzIGhpZ2hsaWdodCBzbG93bHkuCkEg dmFsdWUgb2YgbmlsIG1lYW5zIGhpZ2hsaWdodCBhbGwgbWF0Y2hlcyBzaG93biBvbiB0aGUgc2Ny ZWVuLiIKICA6dHlwZSAnKGNob2ljZSAoY29uc3QgOnRhZyAiQWxsIiBuaWwpCgkJIChpbnRlZ2Vy IDp0YWcgIlNvbWUiKSkKICA6Z3JvdXAgJ2xhenktaGlnaGxpZ2h0KQoKKGRlZmN1c3RvbSBsYXp5 LWhpZ2hsaWdodC1idWZmZXItbWF4LWF0LWEtdGltZSAyMAogICJNYXhpbXVtIG1hdGNoZXMgdG8g aGlnaGxpZ2h0IGF0IGEgdGltZSAoZm9yIGBsYXp5LWhpZ2hsaWdodC1idWZmZXInKS4KTGFyZ2Vy IHZhbHVlcyBtYXkgcmVkdWNlIElzZWFyY2gncyByZXNwb25zaXZlbmVzcyB0byB1c2VyIGlucHV0 OwpzbWFsbGVyIHZhbHVlcyBtYWtlIG1hdGNoZXMgaGlnaGxpZ2h0IHNsb3dseS4KQSB2YWx1ZSBv ZiBuaWwgbWVhbnMgaGlnaGxpZ2h0IGFsbCBtYXRjaGVzIGluIHRoZSBidWZmZXIuIgogIDp0eXBl ICcoY2hvaWNlIChjb25zdCA6dGFnICJBbGwiIG5pbCkKCQkgKGludGVnZXIgOnRhZyAiU29tZSIp KQogIDpncm91cCAnbGF6eS1oaWdobGlnaHQKICA6dmVyc2lvbiAiMjcuMSIpCgooZGVmY3VzdG9t IGxhenktaGlnaGxpZ2h0LWJ1ZmZlciBuaWwKICAiQ29udHJvbHMgdGhlIGxhenktaGlnaGxpZ2h0 aW5nIG9mIHRoZSBmdWxsIGJ1ZmZlci4KV2hlbiBub24tbmlsLCBhbGwgdGV4dCBpbiB0aGUgYnVm ZmVyIG1hdGNoaW5nIHRoZSBjdXJyZW50IHNlYXJjaApzdHJpbmcgaXMgaGlnaGxpZ2h0ZWQgbGF6 aWx5IChzZWUgYGxhenktaGlnaGxpZ2h0LWluaXRpYWwtZGVsYXknLApgbGF6eS1oaWdobGlnaHQt aW50ZXJ2YWwnIGFuZCBgbGF6eS1oaWdobGlnaHQtYnVmZmVyLW1heC1hdC1hLXRpbWUnKS4KVGhp cyBpcyB1c2VmdWwgd2hlbiBgbGF6eS1oaWdobGlnaHQtY2xlYW51cCcgaXMgY3VzdG9taXplZCB0 byBuaWwKYW5kIGRvZXNuJ3QgcmVtb3ZlIGZ1bGwtYnVmZmVyIGhpZ2hsaWdodGluZyBhZnRlciBh IHNlYXJjaC4iCiAgOnR5cGUgJ2Jvb2xlYW4KICA6Z3JvdXAgJ2xhenktaGlnaGxpZ2h0CiAgOnZl cnNpb24gIjI3LjEiKQoKKGRlZmZhY2UgbGF6eS1oaWdobGlnaHQKICAnKCgoKGNsYXNzIGNvbG9y KSAobWluLWNvbG9ycyA4OCkgKGJhY2tncm91bmQgbGlnaHQpKQogICAgICg6YmFja2dyb3VuZCAi cGFsZXR1cnF1b2lzZSIpKQogICAgKCgoY2xhc3MgY29sb3IpIChtaW4tY29sb3JzIDg4KSAoYmFj a2dyb3VuZCBkYXJrKSkKICAgICAoOmJhY2tncm91bmQgInBhbGV0dXJxdW9pc2U0IikpCiAgICAo KChjbGFzcyBjb2xvcikgKG1pbi1jb2xvcnMgMTYpKQogICAgICg6YmFja2dyb3VuZCAidHVycXVv aXNlMyIpKQogICAgKCgoY2xhc3MgY29sb3IpIChtaW4tY29sb3JzIDgpKQogICAgICg6YmFja2dy b3VuZCAidHVycXVvaXNlMyIpKQogICAgKHQgKDp1bmRlcmxpbmUgdCkpKQogICJGYWNlIGZvciBs YXp5IGhpZ2hsaWdodGluZyBvZiBtYXRjaGVzIG90aGVyIHRoYW4gdGhlIGN1cnJlbnQgb25lLiIK ICA6Z3JvdXAgJ2xhenktaGlnaGxpZ2h0CiAgOmdyb3VwICdiYXNpYy1mYWNlcykKCjs7OyBMYXp5 IGNvdW50IGN1c3RvbWl6YXRpb24uCgooZGVmZ3JvdXAgbGF6eS1jb3VudCBuaWwKICAiTGF6eSBj b3VudGluZyBmZWF0dXJlIGZvciByZXBvcnRpbmcgdGhlIG51bWJlciBvZiBtYXRjaGVzLiIKICA6 cHJlZml4ICJsYXp5LWNvdW50LSIKICA6dmVyc2lvbiAiMjcuMSIKICA6Z3JvdXAgJ2lzZWFyY2gK ICA6Z3JvdXAgJ21hdGNoaW5nKQoKKGRlZmN1c3RvbSBsYXp5LWNvdW50LXByZWZpeC1mb3JtYXQg IiVzLyVzICIKICAiRm9ybWF0IG9mIHRoZSBjdXJyZW50L3RvdGFsIG51bWJlciBvZiBtYXRjaGVz IGZvciB0aGUgcHJvbXB0IHByZWZpeC4iCiAgOnR5cGUgJyhjaG9pY2UgKGNvbnN0IDp0YWcgIk5v IHByZWZpeCIgbmlsKQogICAgICAgICAgICAgICAgIChzdHJpbmcgOnRhZyAiUHJlZml4IGZvcm1h dCBzdHJpbmciICIlcy8lcyAiKSkKICA6Z3JvdXAgJ2xhenktY291bnQKICA6dmVyc2lvbiAiMjcu MSIpCgooZGVmY3VzdG9tIGxhenktY291bnQtc3VmZml4LWZvcm1hdCBuaWwKICAiRm9ybWF0IG9m IHRoZSBjdXJyZW50L3RvdGFsIG51bWJlciBvZiBtYXRjaGVzIGZvciB0aGUgcHJvbXB0IHN1ZmZp eC4iCiAgOnR5cGUgJyhjaG9pY2UgKGNvbnN0IDp0YWcgIk5vIHN1ZmZpeCIgbmlsKQogICAgICAg ICAgICAgICAgIChzdHJpbmcgOnRhZyAiU3VmZml4IGZvcm1hdCBzdHJpbmciICIgWyVzIG9mICVz XSIpKQogIDpncm91cCAnbGF6eS1jb3VudAogIDp2ZXJzaW9uICIyNy4xIikKCgwKOzsgRGVmaW5l IGlzZWFyY2ggaGVscCBtYXAuCgooZGVmdmFyIGlzZWFyY2gtaGVscC1tYXAKICAobGV0ICgobWFw IChtYWtlLXNwYXJzZS1rZXltYXApKSkKICAgIChkZWZpbmUta2V5IG1hcCAoY2hhci10by1zdHJp bmcgaGVscC1jaGFyKSAnaXNlYXJjaC1oZWxwLWZvci1oZWxwKQogICAgKGRlZmluZS1rZXkgbWFw IFtoZWxwXSAnaXNlYXJjaC1oZWxwLWZvci1oZWxwKQogICAgKGRlZmluZS1rZXkgbWFwIFtmMV0g J2lzZWFyY2gtaGVscC1mb3ItaGVscCkKICAgIChkZWZpbmUta2V5IG1hcCAiPyIgJ2lzZWFyY2gt aGVscC1mb3ItaGVscCkKICAgIChkZWZpbmUta2V5IG1hcCAiYiIgJ2lzZWFyY2gtZGVzY3JpYmUt YmluZGluZ3MpCiAgICAoZGVmaW5lLWtleSBtYXAgImsiICdpc2VhcmNoLWRlc2NyaWJlLWtleSkK ICAgIChkZWZpbmUta2V5IG1hcCAibSIgJ2lzZWFyY2gtZGVzY3JpYmUtbW9kZSkKICAgIChkZWZp bmUta2V5IG1hcCAicSIgJ2hlbHAtcXVpdCkKICAgIG1hcCkKICAiS2V5bWFwIGZvciBjaGFyYWN0 ZXJzIGZvbGxvd2luZyB0aGUgSGVscCBrZXkgZm9yIElzZWFyY2ggbW9kZS4iKQoKKGV2YWwtd2hl bi1jb21waWxlIChyZXF1aXJlICdoZWxwLW1hY3JvKSkKCihtYWtlLWhlbHAtc2NyZWVuIGlzZWFy Y2gtaGVscC1mb3ItaGVscC1pbnRlcm5hbAogIChwdXJlY29weSAiVHlwZSBhIGhlbHAgb3B0aW9u OiBbYmttXSBvciA/IikKICAiWW91IGhhdmUgdHlwZWQgJVRISVMtS0VZJSwgdGhlIGhlbHAgY2hh cmFjdGVyLiAgVHlwZSBhIEhlbHAgb3B0aW9uOgpcKFR5cGUgXFw8aGVscC1tYXA+XFxbaGVscC1x dWl0XSB0byBleGl0IHRoZSBIZWxwIGNvbW1hbmQuKQoKYiAgICAgICAgICAgRGlzcGxheSBhbGwg SXNlYXJjaCBrZXkgYmluZGluZ3MuCmsgS0VZUyAgICAgIERpc3BsYXkgZnVsbCBkb2N1bWVudGF0 aW9uIG9mIElzZWFyY2gga2V5IHNlcXVlbmNlLgptICAgICAgICAgICBEaXNwbGF5IGRvY3VtZW50 YXRpb24gb2YgSXNlYXJjaCBtb2RlLgoKWW91IGNhbid0IHR5cGUgaGVyZSBvdGhlciBoZWxwIGtl eXMgYXZhaWxhYmxlIGluIHRoZSBnbG9iYWwgaGVscCBtYXAsCmJ1dCBvdXRzaWRlIG9mIHRoaXMg aGVscCB3aW5kb3cgd2hlbiB5b3UgdHlwZSB0aGVtIGluIElzZWFyY2ggbW9kZSwKdGhleSBleGl0 IElzZWFyY2ggbW9kZSBiZWZvcmUgZGlzcGxheWluZyBnbG9iYWwgaGVscC4iCiAgaXNlYXJjaC1o ZWxwLW1hcCkKCihkZWZ2YXIgaXNlYXJjaC0tZGlzcGxheS1oZWxwLWFjdGlvbiAnKG5pbCAoaW5o aWJpdC1zYW1lLXdpbmRvdyAuIHQpKSkKCihkZWZ1biBpc2VhcmNoLWhlbHAtZm9yLWhlbHAgKCkK ICAiRGlzcGxheSBJc2VhcmNoIGhlbHAgbWVudS4iCiAgKGludGVyYWN0aXZlKQogIChsZXQgKChk aXNwbGF5LWJ1ZmZlci1vdmVycmlkaW5nLWFjdGlvbiBpc2VhcmNoLS1kaXNwbGF5LWhlbHAtYWN0 aW9uKSkKICAgIChpc2VhcmNoLWhlbHAtZm9yLWhlbHAtaW50ZXJuYWwpKQogIChpc2VhcmNoLXVw ZGF0ZSkpCgooZGVmdW4gaXNlYXJjaC1kZXNjcmliZS1iaW5kaW5ncyAoKQogICJTaG93IGEgbGlz dCBvZiBhbGwga2V5cyBkZWZpbmVkIGluIElzZWFyY2ggbW9kZSwgYW5kIHRoZWlyIGRlZmluaXRp b25zLgpUaGlzIGlzIGxpa2UgYGRlc2NyaWJlLWJpbmRpbmdzJywgYnV0IGRpc3BsYXlzIG9ubHkg SXNlYXJjaCBrZXlzLiIKICAoaW50ZXJhY3RpdmUpCiAgKGxldCAoKGRpc3BsYXktYnVmZmVyLW92 ZXJyaWRpbmctYWN0aW9uIGlzZWFyY2gtLWRpc3BsYXktaGVscC1hY3Rpb24pKQogICAgKHdpdGgt aGVscC13aW5kb3cgIipIZWxwKiIKICAgICAgKHdpdGgtY3VycmVudC1idWZmZXIgc3RhbmRhcmQt b3V0cHV0CgkocHJpbmMgIklzZWFyY2ggTW9kZSBCaW5kaW5nczpcbiIpCgkocHJpbmMgKHN1YnN0 aXR1dGUtY29tbWFuZC1rZXlzICJcXHtpc2VhcmNoLW1vZGUtbWFwfSIpKSkpKSkKCihkZWZ1biBp c2VhcmNoLWRlc2NyaWJlLWtleSAoKQogICJEaXNwbGF5IGRvY3VtZW50YXRpb24gb2YgdGhlIGZ1 bmN0aW9uIGludm9rZWQgYnkgaXNlYXJjaCBrZXkuIgogIChpbnRlcmFjdGl2ZSkKICAobGV0ICgo ZGlzcGxheS1idWZmZXItb3ZlcnJpZGluZy1hY3Rpb24gaXNlYXJjaC0tZGlzcGxheS1oZWxwLWFj dGlvbikpCiAgICAoY2FsbC1pbnRlcmFjdGl2ZWx5ICdkZXNjcmliZS1rZXkpKQogIChpc2VhcmNo LXVwZGF0ZSkpCgooZGVmdW4gaXNlYXJjaC1kZXNjcmliZS1tb2RlICgpCiAgIkRpc3BsYXkgZG9j dW1lbnRhdGlvbiBvZiBJc2VhcmNoIG1vZGUuIgogIChpbnRlcmFjdGl2ZSkKICAobGV0ICgoZGlz cGxheS1idWZmZXItb3ZlcnJpZGluZy1hY3Rpb24gaXNlYXJjaC0tZGlzcGxheS1oZWxwLWFjdGlv bikpCiAgICAoZGVzY3JpYmUtZnVuY3Rpb24gJ2lzZWFyY2gtZm9yd2FyZCkpCiAgKGlzZWFyY2gt dXBkYXRlKSkKCihkZWZhbGlhcyAnaXNlYXJjaC1tb2RlLWhlbHAgJ2lzZWFyY2gtZGVzY3JpYmUt bW9kZSkKCgwKOzsgRGVmaW5lIGlzZWFyY2gtbW9kZSBrZXltYXAuCgooZGVmdW4gaXNlYXJjaC10 bW0tbWVudWJhciAoKQogICJSdW4gYHRtbS1tZW51YmFyJyB3aGlsZSBgaXNlYXJjaC1tb2RlJyBp cyBlbmFibGVkLiIKICAoaW50ZXJhY3RpdmUpCiAgKHJlcXVpcmUgJ3RtbSkKICAocnVuLWhvb2tz ICdtZW51LWJhci11cGRhdGUtaG9vaykKICAobGV0ICgoY29tbWFuZCBuaWwpKQogICAgKGxldCAo KG1lbnUtYmFyICh0bW0tbWVudWJhci1rZXltYXApKSkKICAgICAgKHdpdGgtaXNlYXJjaC1zdXNw ZW5kZWQKICAgICAgIChzZXRxIGNvbW1hbmQgKGxldCAoKGlzZWFyY2gtbW9kZSB0KSkgOyBTaG93 IGJpbmRpbmdzIGZyb20KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgOyBgaXNlYXJjaC1tb2RlLW1hcCcgaW4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgOyB0bW0ncyBwcm9tcHQuCiAgICAgICAgICAgICAgICAgICAgICAgKHRt bS1wcm9tcHQgbWVudS1iYXIgbmlsIG5pbCB0KSkpKSkKICAgIChjYWxsLWludGVyYWN0aXZlbHkg Y29tbWFuZCkpKQoKKGRlZnZhciBpc2VhcmNoLW1lbnUtYmFyLWNvbW1hbmRzCiAgJyhpc2VhcmNo LXRtbS1tZW51YmFyIG1lbnUtYmFyLW9wZW4gbW91c2UtbWlub3ItbW9kZS1tZW51KQogICJMaXN0 IG9mIGNvbW1hbmRzIHRoYXQgY2FuIG9wZW4gYSBtZW51IGR1cmluZyBJc2VhcmNoLiIpCgooZGVm dmFyIGlzZWFyY2gtbWVudS1iYXIteWFuay1tYXAKICAobGV0ICgobWFwIChtYWtlLXNwYXJzZS1r ZXltYXApKSkKICAgIChkZWZpbmUta2V5IG1hcCBbaXNlYXJjaC15YW5rLXBvcF0KICAgICAgJyht ZW51LWl0ZW0gIlByZXZpb3VzIGtpbGwiIGlzZWFyY2gteWFuay1wb3AKICAgICAgICAgICAgICAg ICAgOmhlbHAgIlJlcGxhY2UgcHJldmlvdXMgeWFua2VkIGtpbGwgb24gc2VhcmNoIHN0cmluZyIp KQogICAgKGRlZmluZS1rZXkgbWFwIFtpc2VhcmNoLXlhbmsta2lsbF0KICAgICAgJyhtZW51LWl0 ZW0gIkN1cnJlbnQga2lsbCIgaXNlYXJjaC15YW5rLWtpbGwKICAgICAgICAgICAgICAgICAgOmhl bHAgIkFwcGVuZCBjdXJyZW50IGtpbGwgdG8gc2VhcmNoIHN0cmluZyIpKQogICAgKGRlZmluZS1r ZXkgbWFwIFtpc2VhcmNoLXlhbmstbGluZV0KICAgICAgJyhtZW51LWl0ZW0gIlJlc3Qgb2YgbGlu ZSIgaXNlYXJjaC15YW5rLWxpbmUKICAgICAgICAgICAgICAgICAgOmhlbHAgIllhbmsgdGhlIHJl c3Qgb2YgdGhlIGN1cnJlbnQgbGluZSBvbiBzZWFyY2ggc3RyaW5nIikpCiAgICAoZGVmaW5lLWtl eSBtYXAgW2lzZWFyY2gteWFuay1zeW1ib2wtb3ItY2hhcl0KICAgICAgJyhtZW51LWl0ZW0gIlN5 bWJvbC9jaGFyIgogICAgICAgICAgICAgICAgICBpc2VhcmNoLXlhbmstc3ltYm9sLW9yLWNoYXIK ICAgICAgICAgICAgICAgICAgOmhlbHAgIllhbmsgbmV4dCBzeW1ib2wgb3IgY2hhciBvbiBzZWFy Y2ggc3RyaW5nIikpCiAgICAoZGVmaW5lLWtleSBtYXAgW2lzZWFyY2gteWFuay13b3JkLW9yLWNo YXJdCiAgICAgICcobWVudS1pdGVtICJXb3JkL2NoYXIiCiAgICAgICAgICAgICAgICAgIGlzZWFy Y2gteWFuay13b3JkLW9yLWNoYXIKICAgICAgICAgICAgICAgICAgOmhlbHAgIllhbmsgbmV4dCB3 b3JkIG9yIGNoYXIgb24gc2VhcmNoIHN0cmluZyIpKQogICAgKGRlZmluZS1rZXkgbWFwIFtpc2Vh cmNoLXlhbmstY2hhcl0KICAgICAgJyhtZW51LWl0ZW0gIkNoYXIiIGlzZWFyY2gteWFuay1jaGFy CiAgICAgICAgICAgICAgICAgIDpoZWxwICJZYW5rIGNoYXIgYXQgcG9pbnQgb24gc2VhcmNoIHN0 cmluZyIpKQogICAgbWFwKSkKCihkZWZ2YXIgaXNlYXJjaC1tZW51LWJhci1tYXAKICAobGV0ICgo bWFwIChtYWtlLXNwYXJzZS1rZXltYXAgIklzZWFyY2giKSkpCiAgICAoZGVmaW5lLWtleSBtYXAg W2lzZWFyY2gtY29tcGxldGVdCiAgICAgICcobWVudS1pdGVtICJDb21wbGV0ZSBjdXJyZW50IHNl YXJjaCBzdHJpbmciIGlzZWFyY2gtY29tcGxldGUKICAgICAgICAgICAgICAgICAgOmhlbHAgIkNv bXBsZXRlIGN1cnJlbnQgc2VhcmNoIHN0cmluZyBvdmVyIHNlYXJjaCBoaXN0b3J5IikpCiAgICAo ZGVmaW5lLWtleSBtYXAgW2lzZWFyY2gtY29tcGxldGUtc2VwYXJhdG9yXQogICAgICAnKG1lbnUt aXRlbSAiLS0iKSkKICAgIChkZWZpbmUta2V5IG1hcCBbaXNlYXJjaC1xdWVyeS1yZXBsYWNlLXJl Z2V4cF0KICAgICAgJyhtZW51LWl0ZW0gIlJlcGxhY2Ugc2VhcmNoIHN0cmluZyBhcyByZWdleHAi IGlzZWFyY2gtcXVlcnktcmVwbGFjZS1yZWdleHAKICAgICAgICAgICAgICAgICAgOmhlbHAgIlJl cGxhY2UgbWF0Y2hlcyBmb3IgY3VycmVudCBzZWFyY2ggc3RyaW5nIGFzIHJlZ2V4cCIpKQogICAg KGRlZmluZS1rZXkgbWFwIFtpc2VhcmNoLXF1ZXJ5LXJlcGxhY2VdCiAgICAgICcobWVudS1pdGVt ICJSZXBsYWNlIHNlYXJjaCBzdHJpbmciIGlzZWFyY2gtcXVlcnktcmVwbGFjZQogICAgICAgICAg ICAgICAgICA6aGVscCAiUmVwbGFjZSBtYXRjaGVzIGZvciBjdXJyZW50IHNlYXJjaCBzdHJpbmci KSkKICAgIChkZWZpbmUta2V5IG1hcCBbaXNlYXJjaC1vY2N1cl0KICAgICAgJyhtZW51LWl0ZW0g IlNob3cgYWxsIG1hdGNoZXMgZm9yIHNlYXJjaCBzdHJpbmciIGlzZWFyY2gtb2NjdXIKICAgICAg ICAgICAgICAgICAgOmhlbHAgIlNob3cgYWxsIG1hdGNoZXMgZm9yIGN1cnJlbnQgc2VhcmNoIHN0 cmluZyIpKQogICAgKGRlZmluZS1rZXkgbWFwIFtpc2VhcmNoLWhpZ2hsaWdodC1yZWdleHBdCiAg ICAgICcobWVudS1pdGVtICJIaWdobGlnaHQgYWxsIG1hdGNoZXMgZm9yIHNlYXJjaCBzdHJpbmci CiAgICAgICAgICAgICAgICAgIGlzZWFyY2gtaGlnaGxpZ2h0LXJlZ2V4cAogICAgICAgICAgICAg ICAgICA6aGVscCAiSGlnaGxpZ2h0IGFsbCBtYXRjaGVzIGZvciBjdXJyZW50IHNlYXJjaCBzdHJp bmciKSkKICAgIChkZWZpbmUta2V5IG1hcCBbaXNlYXJjaC1zZWFyY2gtcmVwbGFjZS1zZXBhcmF0 b3JdCiAgICAgICcobWVudS1pdGVtICItLSIpKQogICAgKGRlZmluZS1rZXkgbWFwIFtpc2VhcmNo LXRvZ2dsZS1zcGVjaWZpZWQtaW5wdXQtbWV0aG9kXQogICAgICAnKG1lbnUtaXRlbSAiVHVybiBv biBzcGVjaWZpYyBpbnB1dCBtZXRob2QiCiAgICAgICAgICAgICAgICAgIGlzZWFyY2gtdG9nZ2xl LXNwZWNpZmllZC1pbnB1dC1tZXRob2QKICAgICAgICAgICAgICAgICAgOmhlbHAgIlR1cm4gb24g c3BlY2lmaWMgaW5wdXQgbWV0aG9kIGZvciBzZWFyY2giKSkKICAgIChkZWZpbmUta2V5IG1hcCBb aXNlYXJjaC10b2dnbGUtaW5wdXQtbWV0aG9kXQogICAgICAnKG1lbnUtaXRlbSAiVG9nZ2xlIGlu cHV0IG1ldGhvZCIgaXNlYXJjaC10b2dnbGUtaW5wdXQtbWV0aG9kCiAgICAgICAgICAgICAgICAg IDpoZWxwICJUb2dnbGUgaW5wdXQgbWV0aG9kIGZvciBzZWFyY2giKSkKICAgIChkZWZpbmUta2V5 IG1hcCBbaXNlYXJjaC1pbnB1dC1tZXRob2Qtc2VwYXJhdG9yXQogICAgICAnKG1lbnUtaXRlbSAi LS0iKSkKICAgIChkZWZpbmUta2V5IG1hcCBbaXNlYXJjaC1jaGFyLWJ5LW5hbWVdCiAgICAgICco bWVudS1pdGVtICJTZWFyY2ggZm9yIGNoYXIgYnkgbmFtZSIgaXNlYXJjaC1jaGFyLWJ5LW5hbWUK ICAgICAgICAgICAgICAgICAgOmhlbHAgIlNlYXJjaCBmb3IgY2hhcmFjdGVyIGJ5IG5hbWUiKSkK ICAgIChkZWZpbmUta2V5IG1hcCBbaXNlYXJjaC1xdW90ZS1jaGFyXQogICAgICAnKG1lbnUtaXRl bSAiU2VhcmNoIGZvciBsaXRlcmFsIGNoYXIiIGlzZWFyY2gtcXVvdGUtY2hhcgogICAgICAgICAg ICAgICAgICA6aGVscCAiU2VhcmNoIGZvciBsaXRlcmFsIGNoYXIiKSkKICAgIChkZWZpbmUta2V5 IG1hcCBbaXNlYXJjaC1zcGVjaWFsLWNoYXItc2VwYXJhdG9yXQogICAgICAnKG1lbnUtaXRlbSAi LS0iKSkKICAgIChkZWZpbmUta2V5IG1hcCBbaXNlYXJjaC10b2dnbGUtd29yZF0KICAgICAgJyht ZW51LWl0ZW0gIldvcmQgbWF0Y2hpbmciIGlzZWFyY2gtdG9nZ2xlLXdvcmQKICAgICAgICAgICAg ICAgICAgOmhlbHAgIldvcmQgbWF0Y2hpbmciCiAgICAgICAgICAgICAgICAgIDpidXR0b24gKDp0 b2dnbGUKICAgICAgICAgICAgICAgICAgICAgICAgICAgLiAoZXEgaXNlYXJjaC1yZWdleHAtZnVu Y3Rpb24gJ3dvcmQtc2VhcmNoLXJlZ2V4cCkpKSkKICAgIChkZWZpbmUta2V5IG1hcCBbaXNlYXJj aC10b2dnbGUtc3ltYm9sXQogICAgICAnKG1lbnUtaXRlbSAiU3ltYm9sIG1hdGNoaW5nIiBpc2Vh cmNoLXRvZ2dsZS1zeW1ib2wKICAgICAgICAgICAgICAgICAgOmhlbHAgIlN5bWJvbCBtYXRjaGlu ZyIKICAgICAgICAgICAgICAgICAgOmJ1dHRvbiAoOnRvZ2dsZQogICAgICAgICAgICAgICAgICAg ICAgICAgICAuIChlcSBpc2VhcmNoLXJlZ2V4cC1mdW5jdGlvbgogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAnaXNlYXJjaC1zeW1ib2wtcmVnZXhwKSkpKQogICAgKGRlZmluZS1rZXkg bWFwIFtpc2VhcmNoLXRvZ2dsZS1yZWdleHBdCiAgICAgICcobWVudS1pdGVtICJSZWdleHAgbWF0 Y2hpbmciIGlzZWFyY2gtdG9nZ2xlLXJlZ2V4cAogICAgICAgICAgICAgICAgICA6aGVscCAiUmVn ZXhwIG1hdGNoaW5nIgogICAgICAgICAgICAgICAgICA6YnV0dG9uICg6dG9nZ2xlIC4gaXNlYXJj aC1yZWdleHApKSkKICAgIChkZWZpbmUta2V5IG1hcCBbaXNlYXJjaC10b2dnbGUtaW52aXNpYmxl XQogICAgICAnKG1lbnUtaXRlbSAiSW52aXNpYmxlIHRleHQgbWF0Y2hpbmciIGlzZWFyY2gtdG9n Z2xlLWludmlzaWJsZQogICAgICAgICAgICAgICAgICA6aGVscCAiSW52aXNpYmxlIHRleHQgbWF0 Y2hpbmciCiAgICAgICAgICAgICAgICAgIDpidXR0b24gKDp0b2dnbGUgLiBpc2VhcmNoLWludmlz aWJsZSkpKQogICAgKGRlZmluZS1rZXkgbWFwIFtpc2VhcmNoLXRvZ2dsZS1jaGFyLWZvbGRdCiAg ICAgICcobWVudS1pdGVtICJDaGFyYWN0ZXIgZm9sZGluZyBtYXRjaGluZyIgaXNlYXJjaC10b2dn bGUtY2hhci1mb2xkCiAgICAgICAgICAgICAgICAgIDpoZWxwICJDaGFyYWN0ZXIgZm9sZGluZyBt YXRjaGluZyIKICAgICAgICAgICAgICAgICAgOmJ1dHRvbiAoOnRvZ2dsZQogICAgICAgICAgICAg ICAgICAgICAgICAgICAuIChlcSBpc2VhcmNoLXJlZ2V4cC1mdW5jdGlvbgogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAnY2hhci1mb2xkLXRvLXJlZ2V4cCkpKSkKICAgIChkZWZpbmUt a2V5IG1hcCBbaXNlYXJjaC10b2dnbGUtY2FzZS1mb2xkXQogICAgICAnKG1lbnUtaXRlbSAiQ2Fz ZSBmb2xkaW5nIG1hdGNoaW5nIiBpc2VhcmNoLXRvZ2dsZS1jYXNlLWZvbGQKICAgICAgICAgICAg ICAgICAgOmhlbHAgIkNhc2UgZm9sZGluZyBtYXRjaGluZyIKICAgICAgICAgICAgICAgICAgOmJ1 dHRvbiAoOnRvZ2dsZSAuIGlzZWFyY2gtY2FzZS1mb2xkLXNlYXJjaCkpKQogICAgKGRlZmluZS1r ZXkgbWFwIFtpc2VhcmNoLXRvZ2dsZS1sYXgtd2hpdGVzcGFjZV0KICAgICAgJyhtZW51LWl0ZW0g IkxheCB3aGl0ZXNwYWNlIG1hdGNoaW5nIiBpc2VhcmNoLXRvZ2dsZS1sYXgtd2hpdGVzcGFjZQog ICAgICAgICAgICAgICAgICA6aGVscCAiTGF4IHdoaXRlc3BhY2UgbWF0Y2hpbmciCiAgICAgICAg ICAgICAgICAgIDpidXR0b24gKDp0b2dnbGUgLiBpc2VhcmNoLWxheC13aGl0ZXNwYWNlKSkpCiAg ICAoZGVmaW5lLWtleSBtYXAgW2lzZWFyY2gtdG9nZ2xlLXNlcGFyYXRvcl0KICAgICAgJyhtZW51 LWl0ZW0gIi0tIikpCiAgICAoZGVmaW5lLWtleSBtYXAgW2lzZWFyY2gteWFuay1tZW51XQogICAg ICBgKG1lbnUtaXRlbSAiWWFuayBvbiBzZWFyY2ggc3RyaW5nIiAsaXNlYXJjaC1tZW51LWJhci15 YW5rLW1hcCkpCiAgICAoZGVmaW5lLWtleSBtYXAgW2lzZWFyY2gtZWRpdC1zdHJpbmddCiAgICAg ICcobWVudS1pdGVtICJFZGl0IGN1cnJlbnQgc2VhcmNoIHN0cmluZyIgaXNlYXJjaC1lZGl0LXN0 cmluZwogICAgICAgICAgICAgICAgICA6aGVscCAiRWRpdCBjdXJyZW50IHNlYXJjaCBzdHJpbmci KSkKICAgIChkZWZpbmUta2V5IG1hcCBbaXNlYXJjaC1yaW5nLXJldHJlYXRdCiAgICAgICcobWVu dS1pdGVtICJFZGl0IHByZXZpb3VzIHNlYXJjaCBzdHJpbmciIGlzZWFyY2gtcmluZy1yZXRyZWF0 CiAgICAgICAgICAgICAgICAgIDpoZWxwICJFZGl0IHByZXZpb3VzIHNlYXJjaCBzdHJpbmcgaW4g SXNlYXJjaCBoaXN0b3J5IikpCiAgICAoZGVmaW5lLWtleSBtYXAgW2lzZWFyY2gtcmluZy1hZHZh bmNlXQogICAgICAnKG1lbnUtaXRlbSAiRWRpdCBuZXh0IHNlYXJjaCBzdHJpbmciIGlzZWFyY2gt cmluZy1hZHZhbmNlCiAgICAgICAgICAgICAgICAgIDpoZWxwICJFZGl0IG5leHQgc2VhcmNoIHN0 cmluZyBpbiBJc2VhcmNoIGhpc3RvcnkiKSkKICAgIChkZWZpbmUta2V5IG1hcCBbaXNlYXJjaC1k ZWwtY2hhcl0KICAgICAgJyhtZW51LWl0ZW0gIkRlbGV0ZSBsYXN0IGNoYXIgZnJvbSBzZWFyY2gg c3RyaW5nIiBpc2VhcmNoLWRlbC1jaGFyCiAgICAgICAgICAgICAgICAgIDpoZWxwICJEZWxldGUg bGFzdCBjaGFyYWN0ZXIgZnJvbSBzZWFyY2ggc3RyaW5nIikpCiAgICAoZGVmaW5lLWtleSBtYXAg W2lzZWFyY2gtZGVsZXRlLWNoYXJdCiAgICAgICcobWVudS1pdGVtICJVbmRvIGxhc3QgaW5wdXQg aXRlbSIgaXNlYXJjaC1kZWxldGUtY2hhcgogICAgICAgICAgICAgICAgICA6aGVscCAiVW5kbyB0 aGUgZWZmZWN0IG9mIHRoZSBsYXN0IElzZWFyY2ggY29tbWFuZCIpKQogICAgKGRlZmluZS1rZXkg bWFwIFtpc2VhcmNoLWVuZC1vZi1idWZmZXJdCiAgICAgICcobWVudS1pdGVtICJHbyB0byBsYXN0 IG1hdGNoIiBpc2VhcmNoLWVuZC1vZi1idWZmZXIKICAgICAgICAgICAgICAgICAgOmhlbHAgIkdv IHRvIGxhc3Qgb2NjdXJyZW5jZSBvZiBjdXJyZW50IHNlYXJjaCBzdHJpbmciKSkKICAgIChkZWZp bmUta2V5IG1hcCBbaXNlYXJjaC1iZWdpbm5pbmctb2YtYnVmZmVyXQogICAgICAnKG1lbnUtaXRl bSAiR28gdG8gZmlyc3QgbWF0Y2giIGlzZWFyY2gtYmVnaW5uaW5nLW9mLWJ1ZmZlcgogICAgICAg ICAgICAgICAgICA6aGVscCAiR28gdG8gZmlyc3Qgb2NjdXJyZW5jZSBvZiBjdXJyZW50IHNlYXJj aCBzdHJpbmciKSkKICAgIChkZWZpbmUta2V5IG1hcCBbaXNlYXJjaC1yZXBlYXQtYmFja3dhcmRd CiAgICAgICcobWVudS1pdGVtICJSZXBlYXQgc2VhcmNoIGJhY2t3YXJkIiBpc2VhcmNoLXJlcGVh dC1iYWNrd2FyZAogICAgICAgICAgICAgICAgICA6aGVscCAiUmVwZWF0IGN1cnJlbnQgc2VhcmNo IGJhY2t3YXJkIikpCiAgICAoZGVmaW5lLWtleSBtYXAgW2lzZWFyY2gtcmVwZWF0LWZvcndhcmRd CiAgICAgICcobWVudS1pdGVtICJSZXBlYXQgc2VhcmNoIGZvcndhcmQiIGlzZWFyY2gtcmVwZWF0 LWZvcndhcmQKICAgICAgICAgICAgICAgICAgOmhlbHAgIlJlcGVhdCBjdXJyZW50IHNlYXJjaCBm b3J3YXJkIikpCiAgICAoZGVmaW5lLWtleSBtYXAgW2lzZWFyY2gtbm9uaW5jcmVtZW50YWxdCiAg ICAgICcobWVudS1pdGVtICJOb25pbmNyZW1lbnRhbCBzZWFyY2giIGlzZWFyY2gtZXhpdAogICAg ICAgICAgICAgICAgICA6aGVscCAiU3RhcnQgbm9uaW5jcmVtZW50YWwgc2VhcmNoIgogICAgICAg ICAgICAgICAgICA6dmlzaWJsZSAoc3RyaW5nLWVxdWFsIGlzZWFyY2gtc3RyaW5nICIiKSkpCiAg ICAoZGVmaW5lLWtleSBtYXAgW2lzZWFyY2gtZXhpdF0KICAgICAgJyhtZW51LWl0ZW0gIkZpbmlz aCBzZWFyY2giIGlzZWFyY2gtZXhpdAogICAgICAgICAgICAgICAgICA6aGVscCAiRmluaXNoIHNl YXJjaCBsZWF2aW5nIHBvaW50IHdoZXJlIGl0IGlzIgogICAgICAgICAgICAgICAgICA6dmlzaWJs ZSAobm90IChzdHJpbmctZXF1YWwgaXNlYXJjaC1zdHJpbmcgIiIpKSkpCiAgICAoZGVmaW5lLWtl eSBtYXAgW2lzZWFyY2gtYWJvcnRdCiAgICAgICcobWVudS1pdGVtICJSZW1vdmUgY2hhcmFjdGVy cyBub3QgZm91bmQiIGlzZWFyY2gtYWJvcnQKICAgICAgICAgICAgICAgICAgOmhlbHAgIlF1aXQg Y3VycmVudCBzZWFyY2giCiAgICAgICAgICAgICAgICAgIDp2aXNpYmxlIChub3QgaXNlYXJjaC1z dWNjZXNzKSkpCiAgICAoZGVmaW5lLWtleSBtYXAgW2lzZWFyY2gtY2FuY2VsXQogICAgICBgKG1l bnUtaXRlbSAiQ2FuY2VsIHNlYXJjaCIgaXNlYXJjaC1jYW5jZWwKICAgICAgICAgICAgICAgICAg OmhlbHAgIkNhbmNlbCBjdXJyZW50IHNlYXJjaCBhbmQgcmV0dXJuIHRvIHN0YXJ0aW5nIHBvaW50 IgogICAgICAgICAgICAgICAgICA6ZmlsdGVyICwobGFtYmRhIChiaW5kaW5nKQogICAgICAgICAg ICAgICAgICAgICAgICAgICAgIChpZiBpc2VhcmNoLXN1Y2Nlc3MgJ2lzZWFyY2gtYWJvcnQgYmlu ZGluZykpKSkKICAgIG1hcCkpCgooZGVmdmFyIGlzZWFyY2gtbW9kZS1tYXAKICAobGV0ICgoaSAw KQoJKG1hcCAobWFrZS1rZXltYXApKSkKICAgIChvciAoY2hhci10YWJsZS1wIChudGggMSBtYXAp KQoJKGVycm9yICJUaGUgaW5pdGlhbGl6YXRpb24gb2YgaXNlYXJjaC1tb2RlLW1hcCBtdXN0IGJl IHVwZGF0ZWQiKSkKICAgIDs7IE1ha2UgYWxsIG11bHRpYnl0ZSBjaGFyYWN0ZXJzIHNlYXJjaCBm b3IgdGhlbXNlbHZlcy4KICAgIChzZXQtY2hhci10YWJsZS1yYW5nZSAobnRoIDEgbWFwKSAoY29u cyAjeDEwMCAobWF4LWNoYXIpKQoJCQkgICdpc2VhcmNoLXByaW50aW5nLWNoYXIpCgogICAgOzsg U2luZ2xlLWJ5dGUgcHJpbnRpbmcgY2hhcnMgZXh0ZW5kIHRoZSBzZWFyY2ggc3RyaW5nIGJ5IGRl ZmF1bHQuCiAgICAoc2V0cSBpID9ccykKICAgICh3aGlsZSAoPCBpIDI1NikKICAgICAgKGRlZmlu ZS1rZXkgbWFwICh2ZWN0b3IgaSkgJ2lzZWFyY2gtcHJpbnRpbmctY2hhcikKICAgICAgKHNldHEg aSAoMSsgaSkpKQoKICAgIDs7IFRvIGhhbmRsZSBsb2NhbCBiaW5kaW5ncyB3aXRoIG1ldGEgY2hh ciBwcmVmaXgga2V5cywgZGVmaW5lCiAgICA7OyBhbm90aGVyIGZ1bGwga2V5bWFwLiAgVGhpcyBt dXN0IGJlIGRvbmUgZm9yIGFueSBvdGhlciBwcmVmaXgKICAgIDs7IGtleXMgYXMgd2VsbCwgb25l IGZ1bGwga2V5bWFwIHBlciBjaGFyIG9mIHRoZSBwcmVmaXgga2V5LiAgSXQKICAgIDs7IHdvdWxk IGJlIHNpbXBsZXIgdG8gZGlzYWJsZSB0aGUgZ2xvYmFsIGtleW1hcCwgYW5kL29yIGhhdmUgYQog ICAgOzsgZGVmYXVsdCBsb2NhbCBrZXkgYmluZGluZyBmb3IgYW55IGtleSBub3Qgb3RoZXJ3aXNl IGJvdW5kLgogICAgKGxldCAoKG1ldGEtbWFwIChtYWtlLXNwYXJzZS1rZXltYXApKSkKICAgICAg KGRlZmluZS1rZXkgbWFwIChjaGFyLXRvLXN0cmluZyBtZXRhLXByZWZpeC1jaGFyKSBtZXRhLW1h cCkpCgogICAgOzsgU2V2ZXJhbCBub24tcHJpbnRpbmcgY2hhcnMgY2hhbmdlIHRoZSBzZWFyY2hp bmcgYmVoYXZpb3IuCiAgICAoZGVmaW5lLWtleSBtYXAgIlxDLXMiICdpc2VhcmNoLXJlcGVhdC1m b3J3YXJkKQogICAgKGRlZmluZS1rZXkgbWFwICJcQy1yIiAnaXNlYXJjaC1yZXBlYXQtYmFja3dh cmQpCiAgICA7OyBEZWZpbmUgTS1DLXMgYW5kIE0tQy1yIGxpa2UgQy1zIGFuZCBDLXIgc28gdGhh dCB0aGUgc2FtZSBrZXkKICAgIDs7IGNvbWJpbmF0aW9ucyBjYW4gYmUgdXNlZCB0byByZXBlYXQg cmVnZXhwIGlzZWFyY2hlcyB0aGF0IGNhbgogICAgOzsgYmUgdXNlZCB0byBzdGFydCB0aGVzZSBz ZWFyY2hlcy4KICAgIChkZWZpbmUta2V5IG1hcCAiXE0tXEMtcyIgJ2lzZWFyY2gtcmVwZWF0LWZv cndhcmQpCiAgICAoZGVmaW5lLWtleSBtYXAgIlxNLVxDLXIiICdpc2VhcmNoLXJlcGVhdC1iYWNr d2FyZCkKICAgIChkZWZpbmUta2V5IG1hcCAiXDE3NyIgJ2lzZWFyY2gtZGVsZXRlLWNoYXIpCiAg ICAoZGVmaW5lLWtleSBtYXAgW2JhY2tzcGFjZV0gJ3VuZGVmaW5lZCkgO2J1ZyMyMDQ2Ni4KICAg IChkZWZpbmUta2V5IG1hcCAiXEMtZyIgJ2lzZWFyY2gtYWJvcnQpCgogICAgOzsgVGhpcyBhc3N1 bWVzIFxlIGlzIHRoZSBtZXRhLXByZWZpeC1jaGFyLgogICAgKG9yICg9ID9cZSBtZXRhLXByZWZp eC1jaGFyKQoJKGVycm9yICJJbmNvbnNpc3RlbmN5IGluIGlzZWFyY2guZWwiKSkKICAgIChkZWZp bmUta2V5IG1hcCAiXGVcZVxlIiAnaXNlYXJjaC1jYW5jZWwpCgogICAgKGRlZmluZS1rZXkgbWFw ICJcQy1xIiAnaXNlYXJjaC1xdW90ZS1jaGFyKQoKICAgIChkZWZpbmUta2V5IG1hcCAiXHIiICdp c2VhcmNoLWV4aXQpCiAgICAoZGVmaW5lLWtleSBtYXAgW3JldHVybl0gJ2lzZWFyY2gtZXhpdCkK ICAgIChkZWZpbmUta2V5IG1hcCAiXEMtaiIgJ2lzZWFyY2gtcHJpbnRpbmctY2hhcikKICAgIChk ZWZpbmUta2V5IG1hcCAiXHQiICdpc2VhcmNoLXByaW50aW5nLWNoYXIpCiAgICAoZGVmaW5lLWtl eSBtYXAgWz9cUy1cIF0gJ2lzZWFyY2gtcHJpbnRpbmctY2hhcikKCiAgICAoZGVmaW5lLWtleSBt YXAgICAgIlxDLXciICdpc2VhcmNoLXlhbmstd29yZC1vci1jaGFyKQogICAgKGRlZmluZS1rZXkg bWFwICJcTS1cQy13IiAnaXNlYXJjaC15YW5rLXN5bWJvbC1vci1jaGFyKQogICAgKGRlZmluZS1r ZXkgbWFwICJcTS1cQy1kIiAnaXNlYXJjaC1kZWwtY2hhcikKICAgIChkZWZpbmUta2V5IG1hcCAi XE0tXEMteSIgJ2lzZWFyY2gteWFuay1jaGFyKQogICAgKGRlZmluZS1rZXkgbWFwICAgICJcQy15 IiAnaXNlYXJjaC15YW5rLWtpbGwpCiAgICAoZGVmaW5lLWtleSBtYXAgIlxNLXNcQy1lIiAnaXNl YXJjaC15YW5rLWxpbmUpCiAgICAoZGVmaW5lLWtleSBtYXAgKGtiZCAiQy1NLS4iKSAnaXNlYXJj aC15YW5rLXVudGlsLWNoYXIpCiAgICAoZGVmaW5lLWtleSBtYXAgKGtiZCAiQy1NLW0iKSAnaXNl YXJjaC15YW5rLXVudGlsLW1hdGNoKQogICAgKGRlZmluZS1rZXkgbWFwIChrYmQgIkMtTS1jIikg J2lzZWFyY2gteWFuay10aHJvdWdoLW1vdmUpCgogICAgKGRlZmluZS1rZXkgbWFwICJcTS1zXE0t PCIgJ2lzZWFyY2gtYmVnaW5uaW5nLW9mLWJ1ZmZlcikKICAgIChkZWZpbmUta2V5IG1hcCAiXE0t c1xNLT4iICdpc2VhcmNoLWVuZC1vZi1idWZmZXIpCgogICAgKGRlZmluZS1rZXkgbWFwIChjaGFy LXRvLXN0cmluZyBoZWxwLWNoYXIpIGlzZWFyY2gtaGVscC1tYXApCiAgICAoZGVmaW5lLWtleSBt YXAgW2hlbHBdIGlzZWFyY2gtaGVscC1tYXApCiAgICAoZGVmaW5lLWtleSBtYXAgW2YxXSBpc2Vh cmNoLWhlbHAtbWFwKQoKICAgIChkZWZpbmUta2V5IG1hcCAiXE0tbiIgJ2lzZWFyY2gtcmluZy1h ZHZhbmNlKQogICAgKGRlZmluZS1rZXkgbWFwICJcTS1wIiAnaXNlYXJjaC1yaW5nLXJldHJlYXQp CiAgICAoZGVmaW5lLWtleSBtYXAgIlxNLXkiICdpc2VhcmNoLXlhbmstcG9wKQoKICAgIChkZWZp bmUta2V5IG1hcCAiXE0tXHQiICdpc2VhcmNoLWNvbXBsZXRlKQoKICAgIDs7IFBhc3MgZnJhbWUg ZXZlbnRzIHRyYW5zcGFyZW50bHkgc28gdGhleSB3b24ndCBleGl0IHRoZSBzZWFyY2guCiAgICA7 OyBJbiBwYXJ0aWN1bGFyLCBpZiB3ZSBoYXZlIG1vcmUgdGhhbiBvbmUgZGlzcGxheSBvcGVuLCB0 aGVuIGEKICAgIDs7IHN3aXRjaC1mcmFtZSBtaWdodCBiZSBnZW5lcmF0ZWQgYnkgc29tZW9uZSB0 eXBpbmcgYXQgYW5vdGhlciBrZXlib2FyZC4KICAgIChkZWZpbmUta2V5IG1hcCBbc3dpdGNoLWZy YW1lXSBuaWwpCiAgICAoZGVmaW5lLWtleSBtYXAgW2RlbGV0ZS1mcmFtZV0gbmlsKQogICAgKGRl ZmluZS1rZXkgbWFwIFtpY29uaWZ5LWZyYW1lXSBuaWwpCiAgICAoZGVmaW5lLWtleSBtYXAgW21h a2UtZnJhbWUtdmlzaWJsZV0gbmlsKQogICAgKGRlZmluZS1rZXkgbWFwIFttb3VzZS1tb3ZlbWVu dF0gbmlsKQogICAgKGRlZmluZS1rZXkgbWFwIFtsYW5ndWFnZS1jaGFuZ2VdIG5pbCkKCiAgICA7 OyBGb3Igc2VhcmNoaW5nIG11bHRpbGluZ3VhbCB0ZXh0LgogICAgKGRlZmluZS1rZXkgbWFwICJc Qy1cXCIgJ2lzZWFyY2gtdG9nZ2xlLWlucHV0LW1ldGhvZCkKICAgIChkZWZpbmUta2V5IG1hcCAi XEMtXiIgJ2lzZWFyY2gtdG9nZ2xlLXNwZWNpZmllZC1pbnB1dC1tZXRob2QpCgogICAgOzsgUGVv cGxlIGV4cGVjdCB0byBiZSBhYmxlIHRvIHBhc3RlIHdpdGggdGhlIG1vdXNlLgogICAgKGRlZmlu ZS1rZXkgbWFwIFttb3VzZS0yXSAjJ2lzZWFyY2gtbW91c2UtMikKICAgIChkZWZpbmUta2V5IG1h cCBbZG93bi1tb3VzZS0yXSBuaWwpCiAgICAoZGVmaW5lLWtleSBtYXAgW3h0ZXJtLXBhc3RlXSAj J2lzZWFyY2gteHRlcm0tcGFzdGUpCgogICAgOzsgU29tZSBiaW5kaW5ncyB5b3UgbWF5IHdhbnQg dG8gcHV0IGluIHlvdXIgaXNlYXJjaC1tb2RlLWhvb2suCiAgICA7OyBTdWdnZXN0IHNvbWUgYWx0 ZXJuYXRlcy4uLgogICAgKGRlZmluZS1rZXkgbWFwICJcTS1jIiAnaXNlYXJjaC10b2dnbGUtY2Fz ZS1mb2xkKQogICAgKGRlZmluZS1rZXkgbWFwICJcTS1yIiAnaXNlYXJjaC10b2dnbGUtcmVnZXhw KQogICAgKGRlZmluZS1rZXkgbWFwICJcTS1lIiAnaXNlYXJjaC1lZGl0LXN0cmluZykKCiAgICAo cHV0ICdpc2VhcmNoLXRvZ2dsZS1jYXNlLWZvbGQgOmFkdmVydGlzZWQtYmluZGluZyAiXE0tc2Mi KQogICAgKHB1dCAnaXNlYXJjaC10b2dnbGUtcmVnZXhwICAgIDphZHZlcnRpc2VkLWJpbmRpbmcg IlxNLXNyIikKICAgIChwdXQgJ2lzZWFyY2gtZWRpdC1zdHJpbmcgICAgICA6YWR2ZXJ0aXNlZC1i aW5kaW5nICJcTS1zZSIpCgogICAgKGRlZmluZS1rZXkgbWFwICJcTS1zZSIgJ2lzZWFyY2gtZWRp dC1zdHJpbmcpCiAgICA7OyBNb3JlIHRvZ2dsZXMgZGVmaW5lZCBieSBgaXNlYXJjaC1kZWZpbmUt bW9kZS10b2dnbGUnLgoKICAgIChkZWZpbmUta2V5IG1hcCBbP1xNLSVdICdpc2VhcmNoLXF1ZXJ5 LXJlcGxhY2UpCiAgICAoZGVmaW5lLWtleSBtYXAgWz9cQy1cTS0lXSAnaXNlYXJjaC1xdWVyeS1y ZXBsYWNlLXJlZ2V4cCkKICAgIChkZWZpbmUta2V5IG1hcCAiXE0tc28iICdpc2VhcmNoLW9jY3Vy KQogICAgKGRlZmluZS1rZXkgbWFwICJcTS1zaHIiICdpc2VhcmNoLWhpZ2hsaWdodC1yZWdleHAp CiAgICAoZGVmaW5lLWtleSBtYXAgIlxNLXNobCIgJ2lzZWFyY2gtaGlnaGxpZ2h0LWxpbmVzLW1h dGNoaW5nLXJlZ2V4cCkKCiAgICA7OyBUaGUga2V5IHRyYW5zbGF0aW9ucyBkZWZpbmVkIGluIHRo ZSBDLXggOCBwcmVmaXggc2hvdWxkIGFkZAogICAgOzsgY2hhcmFjdGVycyB0byB0aGUgc2VhcmNo IHN0cmluZy4gIFNlZSBpc28tdHJhbnNsLmVsLgogICAgKGRlZmluZS1rZXkgbWFwICJcQy14OFxy IiAnaXNlYXJjaC1jaGFyLWJ5LW5hbWUpCgogICAgKGRlZmluZS1rZXkgbWFwIFttZW51LWJhciBz ZWFyY2gtbWVudV0KICAgICAgKGxpc3QgJ21lbnUtaXRlbSAiSXNlYXJjaCIgaXNlYXJjaC1tZW51 LWJhci1tYXApKQogICAgKGRlZmluZS1rZXkgbWFwIFtyZW1hcCB0bW0tbWVudWJhcl0gJ2lzZWFy Y2gtdG1tLW1lbnViYXIpCgogICAgbWFwKQogICJLZXltYXAgZm9yIGBpc2VhcmNoLW1vZGUnLiIp CgooZGVmdmFyIGlzZWFyY2gtdG9vbC1iYXItb2xkLW1hcCBuaWwKICAiVmFyaWFibGUgaG9sZGlu ZyB0aGUgb2xkIGxvY2FsIHZhbHVlIG9mIGB0b29sLWJhci1tYXAnLCBpZiBhbnkuIikKCihkZWZ1 biBpc2VhcmNoLXRvb2wtYmFyLWltYWdlIChpbWFnZS1uYW1lKQogICJSZXR1cm4gYW4gaW1hZ2Ug c3BlY2lmaWNhdGlvbiBmb3IgSU1BR0UtTkFNRS4iCiAgKGV2YWwgKHRvb2wtYmFyLS1pbWFnZS1l eHByZXNzaW9uIGltYWdlLW5hbWUpKSkKCihkZWZ2YXIgaXNlYXJjaC10b29sLWJhci1tYXAKICAo bGV0ICgobWFwIChtYWtlLXNwYXJzZS1rZXltYXApKSkKICAgIChkZWZpbmUta2V5IG1hcCBbaXNl YXJjaC1kZXNjcmliZS1tb2RlXQogICAgICAobGlzdCAnbWVudS1pdGVtICJIZWxwIiAnaXNlYXJj aC1kZXNjcmliZS1tb2RlCiAgICAgICAgICAgIDpoZWxwICJHZXQgaGVscCBmb3IgSXNlYXJjaCIK ICAgICAgICAgICAgOmltYWdlICcoaXNlYXJjaC10b29sLWJhci1pbWFnZSAiaGVscCIpKSkKICAg IChkZWZpbmUta2V5IG1hcCBbaXNlYXJjaC1vY2N1cl0KICAgICAgKGxpc3QgJ21lbnUtaXRlbSAi U2hvdyBoaXRzIiAnaXNlYXJjaC1vY2N1cgogICAgICAgICAgICA6aGVscCAiU2hvdyBlYWNoIHNl YXJjaCBoaXQiCiAgICAgICAgICAgIDppbWFnZSAnKGlzZWFyY2gtdG9vbC1iYXItaW1hZ2UgImlu ZGV4IikpKQogICAgKGRlZmluZS1rZXkgbWFwIFtpc2VhcmNoLXF1ZXJ5LXJlcGxhY2VdCiAgICAg IChsaXN0ICdtZW51LWl0ZW0gIlJlcGxhY2UiICdpc2VhcmNoLXF1ZXJ5LXJlcGxhY2UKICAgICAg ICAgICAgOmhlbHAgIlJlcGxhY2Ugc2VhcmNoIHN0cmluZyIKICAgICAgICAgICAgOmltYWdlICco aXNlYXJjaC10b29sLWJhci1pbWFnZSAic2VhcmNoLXJlcGxhY2UiKSkpCiAgICAoZGVmaW5lLWtl eSBtYXAgW2lzZWFyY2gtZGVsZXRlLWNoYXJdCiAgICAgIChsaXN0ICdtZW51LWl0ZW0gIlVuZG8i ICdpc2VhcmNoLWRlbGV0ZS1jaGFyCiAgICAgICAgICAgIDpoZWxwICJVbmRvIGxhc3QgaW5wdXQg aXRlbSIKICAgICAgICAgICAgOmltYWdlICcoaXNlYXJjaC10b29sLWJhci1pbWFnZSAidW5kbyIp KSkKICAgIChkZWZpbmUta2V5IG1hcCBbaXNlYXJjaC1leGl0XQogICAgICAobGlzdCAnbWVudS1p dGVtICJGaW5pc2giICdpc2VhcmNoLWV4aXQKICAgICAgICAgICAgOmhlbHAgIkZpbmlzaCBzZWFy Y2ggbGVhdmluZyBwb2ludCB3aGVyZSBpdCBpcyIKICAgICAgICAgICAgOmltYWdlICcoaXNlYXJj aC10b29sLWJhci1pbWFnZSAiZXhpdCIpCiAgICAgICAgICAgIDp2aXNpYmxlICcobm90IChzdHJp bmctZXF1YWwgaXNlYXJjaC1zdHJpbmcgIiIpKSkpCiAgICAoZGVmaW5lLWtleSBtYXAgW2lzZWFy Y2gtY2FuY2VsXQogICAgICAobGlzdCAnbWVudS1pdGVtICJBYm9ydCIgJ2lzZWFyY2gtY2FuY2Vs CiAgICAgICAgICAgIDpoZWxwICJBYm9ydCBzZWFyY2giCiAgICAgICAgICAgIDppbWFnZSAnKGlz ZWFyY2gtdG9vbC1iYXItaW1hZ2UgImNsb3NlIikKICAgICAgICAgICAgOmZpbHRlciAobGFtYmRh IChiaW5kaW5nKQogICAgICAgICAgICAgICAgICAgICAgKGlmIGlzZWFyY2gtc3VjY2VzcyAnaXNl YXJjaC1hYm9ydCBiaW5kaW5nKSkpKQogICAgKGRlZmluZS1rZXkgbWFwIFtpc2VhcmNoLXJlcGVh dC1mb3J3YXJkXQogICAgICAobGlzdCAnbWVudS1pdGVtICJSZXBlYXQgZm9yd2FyZCIgJ2lzZWFy Y2gtcmVwZWF0LWZvcndhcmQKICAgICAgICAgICAgOmhlbHAgIlJlcGVhdCBzZWFyY2ggZm9yd2Fy ZCIKICAgICAgICAgICAgOmltYWdlICcoaXNlYXJjaC10b29sLWJhci1pbWFnZSAicmlnaHQtYXJy b3ciKSkpCiAgICAoZGVmaW5lLWtleSBtYXAgW2lzZWFyY2gtcmVwZWF0LWJhY2t3YXJkXQogICAg ICAobGlzdCAnbWVudS1pdGVtICJSZXBlYXQgYmFja3dhcmQiICdpc2VhcmNoLXJlcGVhdC1iYWNr d2FyZAogICAgICAgICAgICA6aGVscCAiUmVwZWF0IHNlYXJjaCBiYWNrd2FyZCIKICAgICAgICAg ICAgOmltYWdlICcoaXNlYXJjaC10b29sLWJhci1pbWFnZSAibGVmdC1hcnJvdyIpKSkKICAgIG1h cCkpCgooZGVmdmFyIG1pbmlidWZmZXItbG9jYWwtaXNlYXJjaC1tYXAKICAobGV0ICgobWFwICht YWtlLXNwYXJzZS1rZXltYXApKSkKICAgIChzZXQta2V5bWFwLXBhcmVudCBtYXAgbWluaWJ1ZmZl ci1sb2NhbC1tYXApCiAgICAoZGVmaW5lLWtleSBtYXAgIlxyIiAgICAnZXhpdC1taW5pYnVmZmVy KQogICAgKGRlZmluZS1rZXkgbWFwICJcTS1cdCIgJ2lzZWFyY2gtY29tcGxldGUtZWRpdCkKICAg IChkZWZpbmUta2V5IG1hcCAiXEMtcyIgICdpc2VhcmNoLWZvcndhcmQtZXhpdC1taW5pYnVmZmVy KQogICAgKGRlZmluZS1rZXkgbWFwICJcQy1yIiAgJ2lzZWFyY2gtcmV2ZXJzZS1leGl0LW1pbmli dWZmZXIpCiAgICAoZGVmaW5lLWtleSBtYXAgIlxDLWYiICAnaXNlYXJjaC15YW5rLWNoYXItaW4t bWluaWJ1ZmZlcikKICAgIChkZWZpbmUta2V5IG1hcCBbcmlnaHRdICdpc2VhcmNoLXlhbmstY2hh ci1pbi1taW5pYnVmZmVyKQogICAgbWFwKQogICJLZXltYXAgZm9yIGVkaXRpbmcgSXNlYXJjaCBz dHJpbmdzIGluIHRoZSBtaW5pYnVmZmVyLiIpCgo7OyBJbnRlcm5hbCB2YXJpYWJsZXMgZGVjbGFy ZWQgZ2xvYmFsbHkgZm9yIGJ5dGUtY29tcGlsZXIuCjs7IFRoZXNlIGFyZSBhbGwgc2V0IHdpdGgg c2V0cSB3aGlsZSBpc2VhcmNoaW5nCjs7IGFuZCBib3VuZCBsb2NhbGx5IHdoaWxlIGVkaXRpbmcg dGhlIHNlYXJjaCBzdHJpbmcuCgooZGVmdmFyIGlzZWFyY2gtZm9yd2FyZCBuaWwpCTsgU2VhcmNo aW5nIGluIHRoZSBmb3J3YXJkIGRpcmVjdGlvbi4KKGRlZnZhciBpc2VhcmNoLXJlZ2V4cCBuaWwp CTsgU2VhcmNoaW5nIGZvciBhIHJlZ2V4cC4KOzsgV2Ugc3RpbGwgc3VwcG9ydCBzZXR0aW5nIHRo aXMgdG8gdCBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkuCihkZWZpbmUtb2Jzb2xldGUtdmFy aWFibGUtYWxpYXMgJ2lzZWFyY2gtd29yZAogICdpc2VhcmNoLXJlZ2V4cC1mdW5jdGlvbiAiMjUu MSIpCihkZWZ2YXIgaXNlYXJjaC1yZWdleHAtZnVuY3Rpb24gbmlsCiAgIlJlZ2V4cC1iYXNlZCBz ZWFyY2ggbW9kZSBmb3Igd29yZHMvc3ltYm9scy4KSWYgbm9uLW5pbCwgYSBmdW5jdGlvbiB0byBj b252ZXJ0IGEgc2VhcmNoIHN0cmluZyB0byBhIHJlZ2V4cAp1c2VkIGJ5IHJlZ2V4cCBzZWFyY2gg ZnVuY3Rpb25zLgoKVGhlIGZ1bmN0aW9uIHNob3VsZCBhY2NlcHQgMSBvciAyIGFyZ3VtZW50czog dGhlIG9yaWdpbmFsIHN0cmluZwp0byBjb252ZXJ0LCBhbmQgYSBmbGFnLCB3aG9zZSBub24tbmls IHZhbHVlIG1lYW5zIHRoZSBtYXRjaApkb2Vzbid0IGhhdmUgdG8gc3RhcnQgb3IgZW5kIG9uIGEg d29yZCBib3VuZGFyeS4gIFRoZSBmdW5jdGlvbgpzaG91bGQgcmV0dXJuIHRoZSBjb3JyZXNwb25k aW5nIHJlZ2V4cCwgYSBzdHJpbmcuCgpUaGUgc3ltYm9sIHByb3BlcnR5IGBpc2VhcmNoLW1lc3Nh Z2UtcHJlZml4JyBwdXQgb24gdGhpcyBmdW5jdGlvbgpzcGVjaWZpZXMgdGhlIHByZWZpeCBzdHJp bmcgZGlzcGxheWVkIGluIHRoZSBzZWFyY2ggbWVzc2FnZS4KCkV4aXN0aW5nIGZ1bmN0aW9ucyB5 b3UgY291bGQgdXNlIGFzIHZhbHVlcyBhcmUgYHdvcmQtc2VhcmNoLXJlZ2V4cCcsCmBpc2VhcmNo LXN5bWJvbC1yZWdleHAnLCBhbmQgYGNoYXItZm9sZC10by1yZWdleHAnLgoKVGhpcyB2YXJpYWJs ZSBpcyBzZXQgYW5kIGNoYW5nZWQgZHVyaW5nIGlzZWFyY2guICBUbyBjaGFuZ2UgdGhlCmRlZmF1 bHQgYmVoYXZpb3IgdXNlZCBmb3Igc2VhcmNoZXMsIHNlZSBgc2VhcmNoLWRlZmF1bHQtbW9kZScK aW5zdGVhZC4iKQoKKGRlZnZhciBpc2VhcmNoLWxheC13aGl0ZXNwYWNlIHQKICAiSWYgbm9uLW5p bCwgYSBzcGFjZSB3aWxsIG1hdGNoIGEgc2VxdWVuY2Ugb2Ygd2hpdGVzcGFjZSBjaGFycy4KV2hl biB5b3UgZW50ZXIgYSBzcGFjZSBvciBzcGFjZXMgaW4gb3JkaW5hcnkgaW5jcmVtZW50YWwgc2Vh cmNoLCBpdAp3aWxsIG1hdGNoIGFueSBzZXF1ZW5jZSBtYXRjaGVkIGJ5IHRoZSByZWdleHAgZGVm aW5lZCBieSB0aGUgdmFyaWFibGUKYHNlYXJjaC13aGl0ZXNwYWNlLXJlZ2V4cCcuICBJZiB0aGUg dmFsdWUgaXMgbmlsLCBlYWNoIHNwYWNlIHlvdSB0eXBlCm1hdGNoZXMgbGl0ZXJhbGx5LCBhZ2Fp bnN0IG9uZSBzcGFjZS4gIFlvdSBjYW4gdG9nZ2xlIHRoZSB2YWx1ZSBvZiB0aGlzCnZhcmlhYmxl IGJ5IHRoZSBjb21tYW5kIGBpc2VhcmNoLXRvZ2dsZS1sYXgtd2hpdGVzcGFjZScuIikKCihkZWZ2 YXIgaXNlYXJjaC1yZWdleHAtbGF4LXdoaXRlc3BhY2UgbmlsCiAgIklmIG5vbi1uaWwsIGEgc3Bh Y2Ugd2lsbCBtYXRjaCBhIHNlcXVlbmNlIG9mIHdoaXRlc3BhY2UgY2hhcnMuCldoZW4geW91IGVu dGVyIGEgc3BhY2Ugb3Igc3BhY2VzIGluIHJlZ2V4cCBpbmNyZW1lbnRhbCBzZWFyY2gsIGl0Cndp bGwgbWF0Y2ggYW55IHNlcXVlbmNlIG1hdGNoZWQgYnkgdGhlIHJlZ2V4cCBkZWZpbmVkIGJ5IHRo ZSB2YXJpYWJsZQpgc2VhcmNoLXdoaXRlc3BhY2UtcmVnZXhwJy4gIElmIHRoZSB2YWx1ZSBpcyBu aWwsIGVhY2ggc3BhY2UgeW91IHR5cGUKbWF0Y2hlcyBsaXRlcmFsbHksIGFnYWluc3Qgb25lIHNw YWNlLiAgWW91IGNhbiB0b2dnbGUgdGhlIHZhbHVlIG9mIHRoaXMKdmFyaWFibGUgYnkgdGhlIGNv bW1hbmQgYGlzZWFyY2gtdG9nZ2xlLWxheC13aGl0ZXNwYWNlJy4iKQoKKGRlZnZhciBpc2VhcmNo LWNtZHMgbmlsCiAgIlN0YWNrIG9mIHNlYXJjaCBzdGF0dXMgZWxlbWVudHMuCkVhY2ggZWxlbWVu dCBpcyBhbiBgaXNlYXJjaC0tc3RhdGUnIHN0cnVjdCB3aGVyZSB0aGUgc2xvdHMgYXJlCiBbU1RS SU5HIE1FU1NBR0UgUE9JTlQgU1VDQ0VTUyBGT1JXQVJEIE9USEVSLUVORCBXT1JEL1JFR0VYUC1G VU5DVElPTgogIEVSUk9SIFdSQVBQRUQgQkFSUklFUiBDQVNFLUZPTEQtU0VBUkNIIFBPUC1GVU5d IikKCihkZWZ2YXIgaXNlYXJjaC1zdHJpbmcgIiIpICA7IFRoZSBjdXJyZW50IHNlYXJjaCBzdHJp bmcuCihkZWZ2YXIgaXNlYXJjaC1tZXNzYWdlICIiKSA7IHRleHQtY2hhci1kZXNjcmlwdGlvbiB2 ZXJzaW9uIG9mIGlzZWFyY2gtc3RyaW5nCgooZGVmdmFyIGlzZWFyY2gtbWVzc2FnZS1wcmVmaXgt YWRkIG5pbCkgOyBBZGRpdGlvbmFsIHRleHQgZm9yIHRoZSBtZXNzYWdlIHByZWZpeAooZGVmdmFy IGlzZWFyY2gtbWVzc2FnZS1zdWZmaXgtYWRkIG5pbCkgOyBBZGRpdGlvbmFsIHRleHQgZm9yIHRo ZSBtZXNzYWdlIHN1ZmZpeAoKKGRlZnZhciBpc2VhcmNoLXN1Y2Nlc3MgdCkJOyBTZWFyY2hpbmcg aXMgY3VycmVudGx5IHN1Y2Nlc3NmdWwuCihkZWZ2YXIgaXNlYXJjaC1lcnJvciBuaWwpCTsgRXJy b3IgbWVzc2FnZSBmb3IgZmFpbGVkIHNlYXJjaC4KKGRlZnZhciBpc2VhcmNoLW90aGVyLWVuZCBu aWwpCTsgU3RhcnQgKGVuZCkgb2YgbWF0Y2ggaWYgZm9yd2FyZCAoYmFja3dhcmQpLgooZGVmdmFy IGlzZWFyY2gtd3JhcHBlZCBuaWwpCTsgU2VhcmNoaW5nIHJlc3RhcnRlZCBmcm9tIHRoZSB0b3Ag KGJvdHRvbSkuCihkZWZ2YXIgaXNlYXJjaC1iYXJyaWVyIDAKICAiUmVjb3JkZWQgbWluaW11bS9t YXhpbWFsIHBvaW50IGZvciB0aGUgY3VycmVudCBzZWFyY2guIikKKGRlZnZhciBpc2VhcmNoLWp1 c3Qtc3RhcnRlZCBuaWwpCihkZWZ2YXIgaXNlYXJjaC1zdGFydC1oc2Nyb2xsIDApCTsgaHNjcm9s bCB3aGVuIHN0YXJ0aW5nIHRoZSBzZWFyY2guCgo7OyBjYXNlLWZvbGQtc2VhcmNoIHdoaWxlIHNl YXJjaGluZy4KOzsgICBlaXRoZXIgbmlsLCB0LCBvciAneWVzLiAgJ3llcyBtZWFucyB0aGUgc2Ft ZSBhcyB0IGV4Y2VwdCB0aGF0IG1peGVkCjs7ICAgY2FzZSBpbiB0aGUgc2VhcmNoIHN0cmluZyBp cyBpZ25vcmVkLgooZGVmdmFyIGlzZWFyY2gtY2FzZS1mb2xkLXNlYXJjaCBuaWwpCgo7OyBzZWFy Y2gtaW52aXNpYmxlIHdoaWxlIHNlYXJjaGluZy4KOzsgICBlaXRoZXIgbmlsLCB0LCBvciAnb3Bl bi4gICdvcGVuIG1lYW5zIHRoZSBzYW1lIGFzIHQgZXhjZXB0IHRoYXQKOzsgICBvcGVucyBoaWRk ZW4gb3ZlcmxheXMuCihkZWZ2YXIgaXNlYXJjaC1pbnZpc2libGUgc2VhcmNoLWludmlzaWJsZSkK CihkZWZ2YXIgaXNlYXJjaC1sYXN0LWNhc2UtZm9sZC1zZWFyY2ggbmlsKQoKOzsgVXNlZCB0byBz YXZlIGRlZmF1bHQgdmFsdWUgd2hpbGUgaXNlYXJjaCBpcyBhY3RpdmUKKGRlZnZhciBpc2VhcmNo LW9yaWdpbmFsLW1pbmlidWZmZXItbWVzc2FnZS10aW1lb3V0IG5pbCkKCihkZWZ2YXIgaXNlYXJj aC1hZGp1c3RlZCBuaWwpCihkZWZ2YXIgaXNlYXJjaC1zbG93LXRlcm1pbmFsLW1vZGUgbmlsKQo7 OyBJZiB0LCB1c2luZyBhIHNtYWxsIHdpbmRvdy4KKGRlZnZhciBpc2VhcmNoLXNtYWxsLXdpbmRv dyBuaWwpCihkZWZ2YXIgaXNlYXJjaC1vcG9pbnQgMCkKOzsgVGhlIHdpbmRvdyBjb25maWd1cmF0 aW9uIGFjdGl2ZSBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBzZWFyY2guCihkZWZ2YXIgaXNlYXJj aC13aW5kb3ctY29uZmlndXJhdGlvbiBuaWwpCgo7OyBGbGFnIHRvIGluZGljYXRlIGEgeWFuayBv Y2N1cnJlZCwgc28gZG9uJ3QgbW92ZSB0aGUgY3Vyc29yLgooZGVmdmFyIGlzZWFyY2gteWFuay1m bGFnIG5pbCkKCjs7IEEgZnVuY3Rpb24gdG8gYmUgY2FsbGVkIGFmdGVyIGVhY2ggaW5wdXQgY2hh cmFjdGVyIGlzIHByb2Nlc3NlZC4KOzsgKEl0IGlzIG5vdCBjYWxsZWQgYWZ0ZXIgY2hhcmFjdGVy cyB0aGF0IGV4aXQgdGhlIHNlYXJjaC4pCjs7IEl0IGlzIG9ubHkgc2V0IGZyb20gYW4gb3B0aW9u YWwgYXJndW1lbnQgdG8gYGlzZWFyY2gtbW9kZScuCihkZWZ2YXIgaXNlYXJjaC1vcC1mdW4gbmls KQoKOzsgIElzIGlzZWFyY2gtbW9kZSBpbiBhIHJlY3Vyc2l2ZSBlZGl0IGZvciBtb2RhbCBzZWFy Y2hpbmcuCihkZWZ2YXIgaXNlYXJjaC1yZWN1cnNpdmUtZWRpdCBuaWwpCgo7OyBTaG91bGQgaXNl YXJjaCBiZSB0ZXJtaW5hdGVkIGFmdGVyIGRvaW5nIG9uZSBzZWFyY2g/CihkZWZ2YXIgaXNlYXJj aC1ub25pbmNyZW1lbnRhbCBuaWwpCgo7OyBOZXcgdmFsdWUgb2YgaXNlYXJjaC1ub25pbmNyZW1l bnRhbCBhZnRlciBpc2VhcmNoLWVkaXQtc3RyaW5nLgooZGVmdmFyIGlzZWFyY2gtbmV3LW5vbmlu Y3JlbWVudGFsIG5pbCkKCjs7IE5ldyB2YWx1ZSBvZiBpc2VhcmNoLWZvcndhcmQgYWZ0ZXIgaXNl YXJjaC1lZGl0LXN0cmluZy4KKGRlZnZhciBpc2VhcmNoLW5ldy1mb3J3YXJkIG5pbCkKCjs7IEFj Y3VtdWxhdGUgaGVyZSB0aGUgb3ZlcmxheXMgb3BlbmVkIGR1cmluZyBzZWFyY2hpbmcuCihkZWZ2 YXIgaXNlYXJjaC1vcGVuZWQtb3ZlcmxheXMgbmlsKQoKOzsgTm9uLW5pbCBpZiB0aGUgc3RyaW5n IGV4aXN0cyBidXQgaXMgaW52aXNpYmxlLgooZGVmdmFyIGlzZWFyY2gtaGlkZGVuIG5pbCkKCjs7 IFRoZSB2YWx1ZSBvZiBpbnB1dC1tZXRob2QtZnVuY3Rpb24gd2hlbiBpc2VhcmNoIGlzIGludm9r ZWQuCihkZWZ2YXIgaXNlYXJjaC1pbnB1dC1tZXRob2QtZnVuY3Rpb24gbmlsKQoKOzsgQSBmbGFn IHRvIHRlbGwgaWYgaW5wdXQtbWV0aG9kLWZ1bmN0aW9uIGlzIGxvY2FsbHkgYm91bmQgd2hlbgo7 OyBpc2VhcmNoIGlzIGludm9rZWQuCihkZWZ2YXIgaXNlYXJjaC1pbnB1dC1tZXRob2QtbG9jYWwt cCBuaWwpCgooZGVmdmFyIGlzZWFyY2gtLXNhdmVkLW92ZXJyaWRpbmctbG9jYWwtbWFwIG5pbCkK Cjs7IE1pbm9yLW1vZGUtYWxpc3QgY2hhbmdlcyAtIGtpbmQgb2YgcmVkdW5kYW50IHdpdGggdGhl Cjs7IGVjaG8gYXJlYSwgYnV0IGlmIGlzZWFyY2hpbmcgaW4gbXVsdGlwbGUgd2luZG93cywgaXQg Y2FuIGJlIHVzZWZ1bC4KOzsgQWxzbywgY2xpY2tpbmcgdGhlIG1vZGUtbGluZSBpbmRpY2F0b3Ig cG9wcyB1cAo7OyBgaXNlYXJjaC1tZW51LWJhci1tYXAnLgoKKG9yIChhc3NxICdpc2VhcmNoLW1v ZGUgbWlub3ItbW9kZS1hbGlzdCkKICAgIChuY29uYyBtaW5vci1tb2RlLWFsaXN0CgkgICAobGlz dCAnKGlzZWFyY2gtbW9kZSBpc2VhcmNoLW1vZGUpKSkpCgo7OyBXZSBhZGQgYW4gZW50cnkgZm9y IGBpc2VhcmNoLW1vZGUnIHRvIGBtaW5vci1tb2RlLW1hcC1hbGlzdCcgc28KOzsgdGhhdCBgaXNl YXJjaC1tZW51LWJhci1tYXAnIGNhbiBzaG93IG9uIHRoZSBtZW51IGJhci4KKG9yIChhc3NxICdp c2VhcmNoLW1vZGUgbWlub3ItbW9kZS1tYXAtYWxpc3QpCiAgICAobmNvbmMgbWlub3ItbW9kZS1t YXAtYWxpc3QKICAgICAgICAgICAobGlzdCAoY29ucyAnaXNlYXJjaC1tb2RlIGlzZWFyY2gtbW9k ZS1tYXApKSkpCgooZGVmdmFyLWxvY2FsIGlzZWFyY2gtbW9kZSBuaWwpIDs7IE5hbWUgb2YgdGhl IG1pbm9yIG1vZGUsIGlmIG5vbi1uaWwuCgooZGVmaW5lLWtleSBnbG9iYWwtbWFwICJcQy1zIiAn aXNlYXJjaC1mb3J3YXJkKQooZGVmaW5lLWtleSBlc2MtbWFwICJcQy1zIiAnaXNlYXJjaC1mb3J3 YXJkLXJlZ2V4cCkKKGRlZmluZS1rZXkgZ2xvYmFsLW1hcCAiXEMtciIgJ2lzZWFyY2gtYmFja3dh cmQpCihkZWZpbmUta2V5IGVzYy1tYXAgIlxDLXIiICdpc2VhcmNoLWJhY2t3YXJkLXJlZ2V4cCkK KGRlZmluZS1rZXkgc2VhcmNoLW1hcCAidyIgJ2lzZWFyY2gtZm9yd2FyZC13b3JkKQooZGVmaW5l LWtleSBzZWFyY2gtbWFwICJfIiAnaXNlYXJjaC1mb3J3YXJkLXN5bWJvbCkKKGRlZmluZS1rZXkg c2VhcmNoLW1hcCAiLiIgJ2lzZWFyY2gtZm9yd2FyZC1zeW1ib2wtYXQtcG9pbnQpCgo7OyBFbnRy eSBwb2ludHMgdG8gaXNlYXJjaC1tb2RlLgoKKGRlZnVuIGlzZWFyY2gtZm9yd2FyZCAoJm9wdGlv bmFsIHJlZ2V4cC1wIG5vLXJlY3Vyc2l2ZS1lZGl0KQogICJcCkRvIGluY3JlbWVudGFsIHNlYXJj aCBmb3J3YXJkLgpXaXRoIGEgcHJlZml4IGFyZ3VtZW50LCBkbyBhbiBpbmNyZW1lbnRhbCByZWd1 bGFyIGV4cHJlc3Npb24gc2VhcmNoIGluc3RlYWQuClxcPGlzZWFyY2gtbW9kZS1tYXA+CkFzIHlv dSB0eXBlIGNoYXJhY3RlcnMsIHRoZXkgYWRkIHRvIHRoZSBzZWFyY2ggc3RyaW5nIGFuZCBhcmUg Zm91bmQuClRoZSBmb2xsb3dpbmcgbm9uLXByaW50aW5nIGtleXMgYXJlIGJvdW5kIGluIGBpc2Vh cmNoLW1vZGUtbWFwJy4KClR5cGUgXFxbaXNlYXJjaC1kZWxldGUtY2hhcl0gdG8gY2FuY2VsIGxh c3QgaW5wdXQgaXRlbSBmcm9tIGVuZCBvZiBzZWFyY2ggc3RyaW5nLgpUeXBlIFxcW2lzZWFyY2gt ZXhpdF0gdG8gZXhpdCwgbGVhdmluZyBwb2ludCBhdCBsb2NhdGlvbiBmb3VuZC4KVHlwZSBMRkQg KEMtaikgdG8gbWF0Y2ggZW5kIG9mIGxpbmUuClR5cGUgXFxbaXNlYXJjaC1yZXBlYXQtZm9yd2Fy ZF0gdG8gc2VhcmNoIGFnYWluIGZvcndhcmQsXAogXFxbaXNlYXJjaC1yZXBlYXQtYmFja3dhcmRd IHRvIHNlYXJjaCBhZ2FpbiBiYWNrd2FyZC4KVHlwZSBcXFtpc2VhcmNoLWJlZ2lubmluZy1vZi1i dWZmZXJdIHRvIGdvIHRvIHRoZSBmaXJzdCBtYXRjaCxcCiBcXFtpc2VhcmNoLWVuZC1vZi1idWZm ZXJdIHRvIGdvIHRvIHRoZSBsYXN0IG1hdGNoLgpUeXBlIFxcW2lzZWFyY2gteWFuay13b3JkLW9y LWNoYXJdIHRvIHlhbmsgbmV4dCB3b3JkIG9yIGNoYXJhY3RlciBpbiBidWZmZXIKICBvbnRvIHRo ZSBlbmQgb2YgdGhlIHNlYXJjaCBzdHJpbmcsIGFuZCBzZWFyY2ggZm9yIGl0LgpUeXBlIFxcW2lz ZWFyY2gtZGVsLWNoYXJdIHRvIGRlbGV0ZSBjaGFyYWN0ZXIgZnJvbSBlbmQgb2Ygc2VhcmNoIHN0 cmluZy4KVHlwZSBcXFtpc2VhcmNoLXlhbmstY2hhcl0gdG8geWFuayBjaGFyIGZyb20gYnVmZmVy IG9udG8gZW5kIG9mIHNlYXJjaFwKIHN0cmluZyBhbmQgc2VhcmNoIGZvciBpdC4KVHlwZSBcXFtp c2VhcmNoLXlhbmstbGluZV0gdG8geWFuayByZXN0IG9mIGxpbmUgb250byBlbmQgb2Ygc2VhcmNo IHN0cmluZ1wKIGFuZCBzZWFyY2ggZm9yIGl0LgpUeXBlIFxcW2lzZWFyY2gteWFuay1raWxsXSB0 byB5YW5rIHRoZSBsYXN0IHN0cmluZyBvZiBraWxsZWQgdGV4dC4KVHlwZSBcXFtpc2VhcmNoLXlh bmstcG9wXSB0byByZXBsYWNlIHN0cmluZyBqdXN0IHlhbmtlZCBpbnRvIHNlYXJjaCBwcm9tcHQK IHdpdGggc3RyaW5nIGtpbGxlZCBiZWZvcmUgaXQuClR5cGUgXFxbaXNlYXJjaC1xdW90ZS1jaGFy XSB0byBxdW90ZSBjb250cm9sIGNoYXJhY3RlciB0byBzZWFyY2ggZm9yIGl0LgpUeXBlIFxcW2lz ZWFyY2gtY2hhci1ieS1uYW1lXSB0byBhZGQgYSBjaGFyYWN0ZXIgdG8gc2VhcmNoIGJ5IFVuaWNv ZGUgbmFtZSxcCiB3aXRoIGNvbXBsZXRpb24uClxcW2lzZWFyY2gtYWJvcnRdIHdoaWxlIHNlYXJj aGluZyBvciB3aGVuIHNlYXJjaCBoYXMgZmFpbGVkIGNhbmNlbHMgaW5wdXRcCiBiYWNrIHRvIHdo YXQgaGFzCiBiZWVuIGZvdW5kIHN1Y2Nlc3NmdWxseS4KXFxbaXNlYXJjaC1hYm9ydF0gd2hlbiBz ZWFyY2ggaXMgc3VjY2Vzc2Z1bCBhYm9ydHMgYW5kIG1vdmVzIHBvaW50IHRvXAogc3RhcnRpbmcg cG9pbnQuCgpJZiB5b3UgdHJ5IHRvIGV4aXQgd2l0aCB0aGUgc2VhcmNoIHN0cmluZyBzdGlsbCBl bXB0eSwgaXQgaW52b2tlcwogbm9uaW5jcmVtZW50YWwgc2VhcmNoLgoKVHlwZSBcXFtpc2VhcmNo LXRvZ2dsZS1jYXNlLWZvbGRdIHRvIHRvZ2dsZSBzZWFyY2ggY2FzZS1zZW5zaXRpdml0eS4KVHlw ZSBcXFtpc2VhcmNoLXRvZ2dsZS1pbnZpc2libGVdIHRvIHRvZ2dsZSBzZWFyY2ggaW4gaW52aXNp YmxlIHRleHQuClR5cGUgXFxbaXNlYXJjaC10b2dnbGUtcmVnZXhwXSB0byB0b2dnbGUgcmVndWxh ci1leHByZXNzaW9uIG1vZGUuClR5cGUgXFxbaXNlYXJjaC10b2dnbGUtd29yZF0gdG8gdG9nZ2xl IHdvcmQgbW9kZS4KVHlwZSBcXFtpc2VhcmNoLXRvZ2dsZS1zeW1ib2xdIHRvIHRvZ2dsZSBzeW1i b2wgbW9kZS4KVHlwZSBcXFtpc2VhcmNoLXRvZ2dsZS1jaGFyLWZvbGRdIHRvIHRvZ2dsZSBjaGFy YWN0ZXIgZm9sZGluZy4KClR5cGUgXFxbaXNlYXJjaC10b2dnbGUtbGF4LXdoaXRlc3BhY2VdIHRv IHRvZ2dsZSB3aGl0ZXNwYWNlIG1hdGNoaW5nLgpJbiBpbmNyZW1lbnRhbCBzZWFyY2hlcywgYSBz cGFjZSBvciBzcGFjZXMgbm9ybWFsbHkgbWF0Y2hlcyBhbnkgd2hpdGVzcGFjZQpkZWZpbmVkIGJ5 IHRoZSB2YXJpYWJsZSBgc2VhcmNoLXdoaXRlc3BhY2UtcmVnZXhwJzsgc2VlIGFsc28gdGhlIHZh cmlhYmxlcwpgaXNlYXJjaC1sYXgtd2hpdGVzcGFjZScgYW5kIGBpc2VhcmNoLXJlZ2V4cC1sYXgt d2hpdGVzcGFjZScuCgpUeXBlIFxcW2lzZWFyY2gtZWRpdC1zdHJpbmddIHRvIGVkaXQgdGhlIHNl YXJjaCBzdHJpbmcgaW4gdGhlIG1pbmlidWZmZXIuCgpBbHNvIHN1cHBvcnRlZCBpcyBhIHNlYXJj aCByaW5nIG9mIHRoZSBwcmV2aW91cyAxNiBzZWFyY2ggc3RyaW5ncy4KVHlwZSBcXFtpc2VhcmNo LXJpbmctYWR2YW5jZV0gdG8gc2VhcmNoIGZvciB0aGUgbmV4dCBpdGVtIGluIHRoZSBzZWFyY2gg cmluZy4KVHlwZSBcXFtpc2VhcmNoLXJpbmctcmV0cmVhdF0gdG8gc2VhcmNoIGZvciB0aGUgcHJl dmlvdXMgaXRlbSBpbiB0aGUgc2VhcmNoXAogcmluZy4KVHlwZSBcXFtpc2VhcmNoLWNvbXBsZXRl XSB0byBjb21wbGV0ZSB0aGUgc2VhcmNoIHN0cmluZyB1c2luZyB0aGUgc2VhcmNoIHJpbmcuCgpU eXBlIFxcW2lzZWFyY2gtcXVlcnktcmVwbGFjZV0gdG8gcnVuIGBxdWVyeS1yZXBsYWNlJyB3aXRo IHN0cmluZyB0b1wKIHJlcGxhY2UgZnJvbSBsYXN0IHNlYXJjaCBzdHJpbmcuClR5cGUgXFxbaXNl YXJjaC1xdWVyeS1yZXBsYWNlLXJlZ2V4cF0gdG8gcnVuIGBxdWVyeS1yZXBsYWNlLXJlZ2V4cCdc CiB3aXRoIHRoZSBsYXN0IHNlYXJjaCBzdHJpbmcuClR5cGUgXFxbaXNlYXJjaC1vY2N1cl0gdG8g cnVuIGBvY2N1cicgdGhhdCBzaG93c1wKIHRoZSBsYXN0IHNlYXJjaCBzdHJpbmcuClR5cGUgXFxb aXNlYXJjaC1oaWdobGlnaHQtcmVnZXhwXSB0byBydW4gYGhpZ2hsaWdodC1yZWdleHAnXAogdGhh dCBoaWdobGlnaHRzIHRoZSBsYXN0IHNlYXJjaCBzdHJpbmcuClR5cGUgXFxbaXNlYXJjaC1oaWdo bGlnaHQtbGluZXMtbWF0Y2hpbmctcmVnZXhwXSB0byBydW4KIGBoaWdobGlnaHQtbGluZXMtbWF0 Y2hpbmctcmVnZXhwJ1wgdGhhdCBoaWdobGlnaHRzIGxpbmVzCiBtYXRjaGluZyB0aGUgbGFzdCBz ZWFyY2ggc3RyaW5nLgoKVHlwZSBcXFtpc2VhcmNoLWRlc2NyaWJlLWJpbmRpbmdzXSB0byBkaXNw bGF5IGFsbCBJc2VhcmNoIGtleSBiaW5kaW5ncy4KVHlwZSBcXFtpc2VhcmNoLWRlc2NyaWJlLWtl eV0gdG8gZGlzcGxheSBkb2N1bWVudGF0aW9uIG9mIElzZWFyY2gga2V5LgpUeXBlIFxcW2lzZWFy Y2gtZGVzY3JpYmUtbW9kZV0gdG8gZGlzcGxheSBkb2N1bWVudGF0aW9uIG9mIElzZWFyY2ggbW9k ZS4KCklmIGFuIGlucHV0IG1ldGhvZCBpcyB0dXJuZWQgb24gaW4gdGhlIGN1cnJlbnQgYnVmZmVy LCB0aGF0IGlucHV0Cm1ldGhvZCBpcyBhbHNvIGFjdGl2ZSB3aGlsZSB5b3UgYXJlIHR5cGluZyBj aGFyYWN0ZXJzIHRvIHNlYXJjaC4KVG8gdG9nZ2xlIHRoZSBpbnB1dCBtZXRob2QsIHR5cGUgXFxb aXNlYXJjaC10b2dnbGUtaW5wdXQtbWV0aG9kXS4gIFwKSXQgYWxzbyB0b2dnbGVzIHRoZSBpbnB1 dAptZXRob2QgaW4gdGhlIGN1cnJlbnQgYnVmZmVyLgoKVG8gdXNlIGEgZGlmZmVyZW50IGlucHV0 IG1ldGhvZCBmb3Igc2VhcmNoaW5nLCB0eXBlIFwKXFxbaXNlYXJjaC10b2dnbGUtc3BlY2lmaWVk LWlucHV0LW1ldGhvZF0sCmFuZCBzcGVjaWZ5IGFuIGlucHV0IG1ldGhvZCB5b3Ugd2FudCB0byB1 c2UuCgpUaGUgYWJvdmUga2V5cywgYm91bmQgaW4gYGlzZWFyY2gtbW9kZS1tYXAnLCBhcmUgb2Z0 ZW4gY29udHJvbGxlZCBieQogb3B0aW9uczsgZG8gXFxbYXByb3Bvc10gb24gc2VhcmNoLS4qIHRv IGZpbmQgdGhlbS4KT3RoZXIgY29udHJvbCBhbmQgbWV0YSBjaGFyYWN0ZXJzIHRlcm1pbmF0ZSB0 aGUgc2VhcmNoCiBhbmQgYXJlIHRoZW4gZXhlY3V0ZWQgbm9ybWFsbHkgKGRlcGVuZGluZyBvbiBg c2VhcmNoLWV4aXQtb3B0aW9uJykuCkxpa2V3aXNlIGZvciBmdW5jdGlvbiBrZXlzIGFuZCBtb3Vz ZSBidXR0b24gZXZlbnRzLgoKSWYgdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgbm9uLWludGVyYWN0 aXZlbHkgd2l0aCBhIG5pbCBOTy1SRUNVUlNJVkUtRURJVCwKaXQgZG9lcyBub3QgcmV0dXJuIHRv IHRoZSBjYWxsaW5nIGZ1bmN0aW9uIHVudGlsIHRoZSBzZWFyY2ggaXMgZG9uZS4KU2VlIHRoZSBm dW5jdGlvbiBgaXNlYXJjaC1tb2RlJyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4iCgogIChpbnRlcmFj dGl2ZSAiUFxucCIpCiAgKGlzZWFyY2gtbW9kZSB0IChub3QgKG51bGwgcmVnZXhwLXApKSBuaWwg KG5vdCBuby1yZWN1cnNpdmUtZWRpdCkpKQoKKGRlZnVuIGlzZWFyY2gtZm9yd2FyZC1yZWdleHAg KCZvcHRpb25hbCBub3QtcmVnZXhwIG5vLXJlY3Vyc2l2ZS1lZGl0KQogICJEbyBpbmNyZW1lbnRh bCBzZWFyY2ggZm9yd2FyZCBmb3IgcmVndWxhciBleHByZXNzaW9uLgpXaXRoIGEgcHJlZml4IGFy Z3VtZW50LCBkbyBhIHJlZ3VsYXIgc3RyaW5nIHNlYXJjaCBpbnN0ZWFkLgpMaWtlIG9yZGluYXJ5 IGluY3JlbWVudGFsIHNlYXJjaCBleGNlcHQgdGhhdCB5b3VyIGlucHV0IGlzIHRyZWF0ZWQKYXMg YSByZWdleHAuICBTZWUgdGhlIGNvbW1hbmQgYGlzZWFyY2gtZm9yd2FyZCcgZm9yIG1vcmUgaW5m b3JtYXRpb24uCgpJbiBpbmNyZW1lbnRhbCBzZWFyY2hlcywgYSBzcGFjZSBvciBzcGFjZXMgbm9y bWFsbHkgbWF0Y2hlcyBhbnkKd2hpdGVzcGFjZSBkZWZpbmVkIGJ5IHRoZSB2YXJpYWJsZSBgc2Vh cmNoLXdoaXRlc3BhY2UtcmVnZXhwJy4KVG8gc2VhcmNoIGZvciBhIGxpdGVyYWwgc3BhY2UgYW5k IG5vdGhpbmcgZWxzZSwgZW50ZXIgQy1xIFNQQy4KVG8gdG9nZ2xlIHdoaXRlc3BhY2UgbWF0Y2hp bmcsIHVzZSBgaXNlYXJjaC10b2dnbGUtbGF4LXdoaXRlc3BhY2UnLgpUaGlzIGNvbW1hbmQgZG9l cyBub3Qgc3VwcG9ydCBjaGFyYWN0ZXIgZm9sZGluZy4iCiAgKGludGVyYWN0aXZlICJQXG5wIikK ICAoaXNlYXJjaC1tb2RlIHQgKG51bGwgbm90LXJlZ2V4cCkgbmlsIChub3Qgbm8tcmVjdXJzaXZl LWVkaXQpKSkKCihkZWZ1biBpc2VhcmNoLWZvcndhcmQtd29yZCAoJm9wdGlvbmFsIG5vdC13b3Jk IG5vLXJlY3Vyc2l2ZS1lZGl0KQogICJEbyBpbmNyZW1lbnRhbCBzZWFyY2ggZm9yd2FyZCBmb3Ig YSBzZXF1ZW5jZSBvZiB3b3Jkcy4KV2l0aCBhIHByZWZpeCBhcmd1bWVudCwgZG8gYSByZWd1bGFy IHN0cmluZyBzZWFyY2ggaW5zdGVhZC4KTGlrZSBvcmRpbmFyeSBpbmNyZW1lbnRhbCBzZWFyY2gg ZXhjZXB0IHRoYXQgeW91ciBpbnB1dCBpcyB0cmVhdGVkCmFzIGEgc2VxdWVuY2Ugb2Ygd29yZHMg d2l0aG91dCByZWdhcmQgdG8gaG93IHRoZSB3b3JkcyBhcmUgc2VwYXJhdGVkLgpTZWUgdGhlIGNv bW1hbmQgYGlzZWFyY2gtZm9yd2FyZCcgZm9yIG1vcmUgaW5mb3JtYXRpb24uClRoaXMgY29tbWFu ZCBkb2VzIG5vdCBzdXBwb3J0IGNoYXJhY3RlciBmb2xkaW5nLCBhbmQgbGF4IHNwYWNlIG1hdGNo aW5nCmhhcyBubyBlZmZlY3Qgb24gaXQuIgogIChpbnRlcmFjdGl2ZSAiUFxucCIpCiAgKGlzZWFy Y2gtbW9kZSB0IG5pbCBuaWwgKG5vdCBuby1yZWN1cnNpdmUtZWRpdCkgKG51bGwgbm90LXdvcmQp KSkKCihkZWZ1biBpc2VhcmNoLWZvcndhcmQtc3ltYm9sICgmb3B0aW9uYWwgX25vdC1zeW1ib2wg bm8tcmVjdXJzaXZlLWVkaXQpCiAgIkRvIGluY3JlbWVudGFsIHNlYXJjaCBmb3J3YXJkIGZvciBh IHN5bWJvbC4KVGhlIHByZWZpeCBhcmd1bWVudCBpcyBjdXJyZW50bHkgdW51c2VkLgpMaWtlIG9y ZGluYXJ5IGluY3JlbWVudGFsIHNlYXJjaCBleGNlcHQgdGhhdCB5b3VyIGlucHV0IGlzIHRyZWF0 ZWQKYXMgYSBzeW1ib2wgc3Vycm91bmRlZCBieSBzeW1ib2wgYm91bmRhcnkgY29uc3RydWN0cyBc XF88IGFuZCBcXF8+LgpTZWUgdGhlIGNvbW1hbmQgYGlzZWFyY2gtZm9yd2FyZCcgZm9yIG1vcmUg aW5mb3JtYXRpb24uClRoaXMgY29tbWFuZCBkb2VzIG5vdCBzdXBwb3J0IGNoYXJhY3RlciBmb2xk aW5nLCBhbmQgbGF4IHNwYWNlIG1hdGNoaW5nCmhhcyBubyBlZmZlY3Qgb24gaXQuIgogIChpbnRl cmFjdGl2ZSAiUFxucCIpCiAgKGlzZWFyY2gtbW9kZSB0IG5pbCBuaWwgKG5vdCBuby1yZWN1cnNp dmUtZWRpdCkgJ2lzZWFyY2gtc3ltYm9sLXJlZ2V4cCkpCgooZGVmdW4gaXNlYXJjaC1iYWNrd2Fy ZCAoJm9wdGlvbmFsIHJlZ2V4cC1wIG5vLXJlY3Vyc2l2ZS1lZGl0KQogICJEbyBpbmNyZW1lbnRh bCBzZWFyY2ggYmFja3dhcmQuCldpdGggYSBwcmVmaXggYXJndW1lbnQsIGRvIGEgcmVndWxhciBl eHByZXNzaW9uIHNlYXJjaCBpbnN0ZWFkLgpTZWUgdGhlIGNvbW1hbmQgYGlzZWFyY2gtZm9yd2Fy ZCcgZm9yIG1vcmUgaW5mb3JtYXRpb24uIgogIChpbnRlcmFjdGl2ZSAiUFxucCIpCiAgKGlzZWFy Y2gtbW9kZSBuaWwgKG5vdCAobnVsbCByZWdleHAtcCkpIG5pbCAobm90IG5vLXJlY3Vyc2l2ZS1l ZGl0KSkpCgooZGVmdW4gaXNlYXJjaC1iYWNrd2FyZC1yZWdleHAgKCZvcHRpb25hbCBub3QtcmVn ZXhwIG5vLXJlY3Vyc2l2ZS1lZGl0KQogICJEbyBpbmNyZW1lbnRhbCBzZWFyY2ggYmFja3dhcmQg Zm9yIHJlZ3VsYXIgZXhwcmVzc2lvbi4KV2l0aCBhIHByZWZpeCBhcmd1bWVudCwgZG8gYSByZWd1 bGFyIHN0cmluZyBzZWFyY2ggaW5zdGVhZC4KTGlrZSBvcmRpbmFyeSBpbmNyZW1lbnRhbCBzZWFy Y2ggZXhjZXB0IHRoYXQgeW91ciBpbnB1dCBpcyB0cmVhdGVkCmFzIGEgcmVnZXhwLiAgU2VlIHRo ZSBjb21tYW5kIGBpc2VhcmNoLWZvcndhcmQtcmVnZXhwJyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4i CiAgKGludGVyYWN0aXZlICJQXG5wIikKICAoaXNlYXJjaC1tb2RlIG5pbCAobnVsbCBub3QtcmVn ZXhwKSBuaWwgKG5vdCBuby1yZWN1cnNpdmUtZWRpdCkpKQoKKGRlZnVuIGlzZWFyY2gtZm9yd2Fy ZC1zeW1ib2wtYXQtcG9pbnQgKCZvcHRpb25hbCBhcmcpCiAgIkRvIGluY3JlbWVudGFsIHNlYXJj aCBmb3J3YXJkIGZvciBhIHN5bWJvbCBmb3VuZCBuZWFyIHBvaW50LgpMaWtlIG9yZGluYXJ5IGlu Y3JlbWVudGFsIHNlYXJjaCBleGNlcHQgdGhhdCB0aGUgc3ltYm9sIGZvdW5kIGF0IHBvaW50Cmlz IGFkZGVkIHRvIHRoZSBzZWFyY2ggc3RyaW5nIGluaXRpYWxseSBhcyBhIHJlZ2V4cCBzdXJyb3Vu ZGVkCmJ5IHN5bWJvbCBib3VuZGFyeSBjb25zdHJ1Y3RzIFxcXzwgYW5kIFxcXz4uClNlZSB0aGUg Y29tbWFuZCBgaXNlYXJjaC1mb3J3YXJkLXN5bWJvbCcgZm9yIG1vcmUgaW5mb3JtYXRpb24uCldp dGggYSBwcmVmaXggYXJndW1lbnQsIHNlYXJjaCBmb3IgQVJHdGggc3ltYm9sIGZvcndhcmQgaWYg QVJHIGlzCnBvc2l0aXZlLCBvciBzZWFyY2ggZm9yIEFSR3RoIHN5bWJvbCBiYWNrd2FyZCBpZiBB UkcgaXMgbmVnYXRpdmUuIgogIChpbnRlcmFjdGl2ZSAiUCIpCiAgKGlzZWFyY2gtZm9yd2FyZC1z eW1ib2wgbmlsIDEpCiAgKGxldCAoKGJvdW5kcyAoZmluZC10YWctZGVmYXVsdC1ib3VuZHMpKQog ICAgICAgIChjb3VudCAoYW5kIGFyZyAocHJlZml4LW51bWVyaWMtdmFsdWUgYXJnKSkpKQogICAg KGNvbmQKICAgICAoYm91bmRzCiAgICAgICh3aGVuICg8IChjYXIgYm91bmRzKSAocG9pbnQpKQoJ KGdvdG8tY2hhciAoY2FyIGJvdW5kcykpKQogICAgICAoaXNlYXJjaC15YW5rLXN0cmluZwogICAg ICAgKGJ1ZmZlci1zdWJzdHJpbmctbm8tcHJvcGVydGllcyAoY2FyIGJvdW5kcykgKGNkciBib3Vu ZHMpKSkKICAgICAgKHdoZW4gY291bnQKICAgICAgICAoaXNlYXJjaC1yZXBlYXQtZm9yd2FyZCBj b3VudCkpKQogICAgICh0CiAgICAgIChzZXRxIGlzZWFyY2gtZXJyb3IgIk5vIHN5bWJvbCBhdCBw b2ludCIpCiAgICAgIChpc2VhcmNoLXB1c2gtc3RhdGUpCiAgICAgIChpc2VhcmNoLXVwZGF0ZSkp KSkpCgoMCjs7IGlzZWFyY2gtbW9kZSBvbmx5IHNldHMgdXAgaW5jcmVtZW50YWwgc2VhcmNoIGZv ciB0aGUgbWlub3IgbW9kZS4KOzsgQWxsIHRoZSB3b3JrIGlzIGRvbmUgYnkgdGhlIGlzZWFyY2gt bW9kZSBjb21tYW5kcy4KCjs7IE5vdCB1c2VkIHlldDoKOzsoZGVmdmFyIGlzZWFyY2gtY29tbWFu ZHMgJyhpc2VhcmNoLWZvcndhcmQgaXNlYXJjaC1iYWNrd2FyZAo7OwkJCSAgICAgaXNlYXJjaC1m b3J3YXJkLXJlZ2V4cCBpc2VhcmNoLWJhY2t3YXJkLXJlZ2V4cCkKOzsgICJMaXN0IG9mIGNvbW1h bmRzIGZvciB3aGljaCBpc2VhcmNoLW1vZGUgZG9lcyBub3QgcmVjdXJzaXZlLWVkaXQuIikKCihk ZWZ1biBpc2VhcmNoLW1vZGUgKGZvcndhcmQgJm9wdGlvbmFsIHJlZ2V4cCBvcC1mdW4gcmVjdXJz aXZlLWVkaXQgcmVnZXhwLWZ1bmN0aW9uKQogICJTdGFydCBJc2VhcmNoIG1pbm9yIG1vZGUuCkl0 IGlzIGNhbGxlZCBieSB0aGUgZnVuY3Rpb24gYGlzZWFyY2gtZm9yd2FyZCcgYW5kIG90aGVyIHJl bGF0ZWQgZnVuY3Rpb25zLgoKVGhlIG5vbi1uaWwgYXJnIEZPUldBUkQgbWVhbnMgc2VhcmNoaW5n IGluIHRoZSBmb3J3YXJkIGRpcmVjdGlvbi4KClRoZSBub24tbmlsIGFyZyBSRUdFWFAgZG9lcyBh biBpbmNyZW1lbnRhbCByZWd1bGFyIGV4cHJlc3Npb24gc2VhcmNoLgoKVGhlIGFyZyBPUC1GVU4g aXMgYSBmdW5jdGlvbiB0byBiZSBjYWxsZWQgYWZ0ZXIgZWFjaCBpbnB1dCBjaGFyYWN0ZXIKaXMg cHJvY2Vzc2VkLiAgKEl0IGlzIG5vdCBjYWxsZWQgYWZ0ZXIgY2hhcmFjdGVycyB0aGF0IGV4aXQg dGhlIHNlYXJjaC4pCgpXaGVuIHRoZSBhcmcgUkVDVVJTSVZFLUVESVQgaXMgbm9uLW5pbCwgdGhp cyBmdW5jdGlvbiBiZWhhdmVzIG1vZGFsbHkgYW5kCmRvZXMgbm90IHJldHVybiB0byB0aGUgY2Fs bGluZyBmdW5jdGlvbiB1bnRpbCB0aGUgc2VhcmNoIGlzIGNvbXBsZXRlZC4KVG8gYmVoYXZlIHRo aXMgd2F5IGl0IGVudGVycyBhIHJlY3Vyc2l2ZS1lZGl0IGFuZCBleGl0cyBpdCB3aGVuIGRvbmUK aXNlYXJjaGluZy4KClRoZSBhcmcgUkVHRVhQLUZVTkNUSU9OLCBpZiBub24tbmlsLCBzaG91bGQg YmUgYSBmdW5jdGlvbi4gIEl0IGlzCnVzZWQgdG8gc2V0IHRoZSB2YWx1ZSBvZiBgaXNlYXJjaC1y ZWdleHAtZnVuY3Rpb24nLiIKCiAgOzsgSW5pdGlhbGl6ZSBnbG9iYWwgdmFycy4KICAoc2V0cSBp c2VhcmNoLWZvcndhcmQgZm9yd2FyZAoJaXNlYXJjaC1yZWdleHAgKG9yIHJlZ2V4cAogICAgICAg ICAgICAgICAgICAgICAgICAgICAoYW5kIChub3QgcmVnZXhwLWZ1bmN0aW9uKQogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIChlcSBzZWFyY2gtZGVmYXVsdC1tb2RlIHQpKSkKCWlzZWFy Y2gtcmVnZXhwLWZ1bmN0aW9uIChvciByZWdleHAtZnVuY3Rpb24KICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgKGFuZCAoZnVuY3Rpb25wIHNlYXJjaC1kZWZhdWx0LW1vZGUpCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG5vdCByZWdleHApCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VhcmNoLWRlZmF1bHQtbW9kZSkp Cglpc2VhcmNoLW9wLWZ1biBvcC1mdW4KCWlzZWFyY2gtbGFzdC1jYXNlLWZvbGQtc2VhcmNoIGlz ZWFyY2gtY2FzZS1mb2xkLXNlYXJjaAoJaXNlYXJjaC1jYXNlLWZvbGQtc2VhcmNoIGNhc2UtZm9s ZC1zZWFyY2gKCWlzZWFyY2gtaW52aXNpYmxlIHNlYXJjaC1pbnZpc2libGUKCWlzZWFyY2gtc3Ry aW5nICIiCglpc2VhcmNoLW1lc3NhZ2UgIiIKCWlzZWFyY2gtY21kcyBuaWwKCWlzZWFyY2gtc3Vj Y2VzcyB0Cglpc2VhcmNoLXdyYXBwZWQgbmlsCglpc2VhcmNoLWJhcnJpZXIgKHBvaW50KQoJaXNl YXJjaC1hZGp1c3RlZCBuaWwKCWlzZWFyY2gteWFuay1mbGFnIG5pbAoJaXNlYXJjaC1lcnJvciBu aWwKCWlzZWFyY2gtc2xvdy10ZXJtaW5hbC1tb2RlIChhbmQgKDw9IGJhdWQtcmF0ZSBzZWFyY2gt c2xvdy1zcGVlZCkKCQkJCQkoPiAod2luZG93LWhlaWdodCkKCQkJCQkgICAoKiA0CgkJCQkJICAg ICAgKGFicyBzZWFyY2gtc2xvdy13aW5kb3ctbGluZXMpKSkpCglpc2VhcmNoLW90aGVyLWVuZCBu aWwKCWlzZWFyY2gtc21hbGwtd2luZG93IG5pbAoJaXNlYXJjaC1qdXN0LXN0YXJ0ZWQgdAoJaXNl YXJjaC1zdGFydC1oc2Nyb2xsICh3aW5kb3ctaHNjcm9sbCkKCglpc2VhcmNoLW9wb2ludCAocG9p bnQpCglzZWFyY2gtcmluZy15YW5rLXBvaW50ZXIgbmlsCglpc2VhcmNoLW9wZW5lZC1vdmVybGF5 cyBuaWwKCWlzZWFyY2gtaW5wdXQtbWV0aG9kLWZ1bmN0aW9uIGlucHV0LW1ldGhvZC1mdW5jdGlv bgoJaXNlYXJjaC1pbnB1dC1tZXRob2QtbG9jYWwtcCAobG9jYWwtdmFyaWFibGUtcCAnaW5wdXQt bWV0aG9kLWZ1bmN0aW9uKQoJcmVnZXhwLXNlYXJjaC1yaW5nLXlhbmstcG9pbnRlciBuaWwKCglp c2VhcmNoLXByZS1zY3JvbGwtcG9pbnQgbmlsCglpc2VhcmNoLXByZS1tb3ZlLXBvaW50IG5pbAoK CTs7IFNhdmUgdGhlIG9yaWdpbmFsIHZhbHVlIG9mIGBtaW5pYnVmZmVyLW1lc3NhZ2UtdGltZW91 dCcsIGFuZAoJOzsgc2V0IGl0IHRvIG5pbCBzbyB0aGF0IGlzZWFyY2gncyBtZXNzYWdlcyBkb24n dCBnZXQgdGltZWQgb3V0LgoJaXNlYXJjaC1vcmlnaW5hbC1taW5pYnVmZmVyLW1lc3NhZ2UtdGlt ZW91dCBtaW5pYnVmZmVyLW1lc3NhZ2UtdGltZW91dAoJbWluaWJ1ZmZlci1tZXNzYWdlLXRpbWVv dXQgbmlsKQoKICAoaWYgKGxvY2FsLXZhcmlhYmxlLXAgJ3Rvb2wtYmFyLW1hcCkKICAgICAgKHNl dHEgaXNlYXJjaC10b29sLWJhci1vbGQtbWFwIHRvb2wtYmFyLW1hcCkpCiAgKHNldHEtbG9jYWwg dG9vbC1iYXItbWFwIGlzZWFyY2gtdG9vbC1iYXItbWFwKQoKICA7OyBXZSBtdXN0IGJ5cGFzcyBp bnB1dCBtZXRob2Qgd2hpbGUgcmVhZGluZyBrZXkuICBXaGVuIGEgdXNlciB0eXBlCiAgOzsgcHJp bnRhYmxlIGNoYXJhY3RlciwgYXBwcm9wcmlhdGUgaW5wdXQgbWV0aG9kIGlzIHR1cm5lZCBvbiBp bgogIDs7IG1pbmlidWZmZXIgdG8gcmVhZCBtdWx0aWJ5dGUgY2hhcmFjdGVycy4KICAob3IgaXNl YXJjaC1pbnB1dC1tZXRob2QtbG9jYWwtcAogICAgICAobWFrZS1sb2NhbC12YXJpYWJsZSAnaW5w dXQtbWV0aG9kLWZ1bmN0aW9uKSkKICAoc2V0cSBpbnB1dC1tZXRob2QtZnVuY3Rpb24gbmlsKQoK ICAobG9va2luZy1hdCAiIikKICAoc2V0cSBpc2VhcmNoLXdpbmRvdy1jb25maWd1cmF0aW9uCgko aWYgaXNlYXJjaC1zbG93LXRlcm1pbmFsLW1vZGUgKGN1cnJlbnQtd2luZG93LWNvbmZpZ3VyYXRp b24pIG5pbCkpCgogIDs7IE1heWJlIG1ha2UgbWluaWJ1ZmZlciBmcmFtZSB2aXNpYmxlIGFuZC9v ciByYWlzZSBpdC4KICAobGV0ICgoZnJhbWUgKHdpbmRvdy1mcmFtZSAobWluaWJ1ZmZlci13aW5k b3cpKSkpCiAgICAodW5sZXNzIChtZW1xIChmcmFtZS1saXZlLXAgZnJhbWUpICcobmlsIHQpKQog ICAgICAodW5sZXNzIChmcmFtZS12aXNpYmxlLXAgZnJhbWUpCgkobWFrZS1mcmFtZS12aXNpYmxl IGZyYW1lKSkKICAgICAgKGlmIG1pbmlidWZmZXItYXV0by1yYWlzZQoJICAocmFpc2UtZnJhbWUg ZnJhbWUpKSkpCgogIChzZXRxCWlzZWFyY2gtbW9kZSAiIElzZWFyY2giKSAgOzsgZm9yd2FyZD8g cmVnZXhwPwogIChmb3JjZS1tb2RlLWxpbmUtdXBkYXRlKQoKICAoc2V0cSBvdmVycmlkaW5nLXRl cm1pbmFsLWxvY2FsLW1hcCBpc2VhcmNoLW1vZGUtbWFwKQogIChydW4taG9va3MgJ2lzZWFyY2gt bW9kZS1ob29rKQogIDs7IFJlbWVtYmVyIHRoZSBpbml0aWFsIG1hcCBwb3NzaWJseSBtb2RpZmll ZAogIDs7IGJ5IGV4dGVybmFsIHBhY2thZ2VzIGluIGlzZWFyY2gtbW9kZS1ob29rLiAgKEJ1ZyMx NjAzNSkKICAoc2V0cSBpc2VhcmNoLS1zYXZlZC1vdmVycmlkaW5nLWxvY2FsLW1hcCBvdmVycmlk aW5nLXRlcm1pbmFsLWxvY2FsLW1hcCkKCiAgOzsgUHVzaGluZyB0aGUgaW5pdGlhbCBzdGF0ZSB1 c2VkIHRvIGJlIGJlZm9yZSBydW5uaW5nIGlzZWFyY2gtbW9kZS1ob29rLAogIDs7IGJ1dCBhIGhv b2sgbWlnaHQgc2V0IGBpc2VhcmNoLXB1c2gtc3RhdGUtZnVuY3Rpb24nIHVzZWQgaW4KICA7OyBg aXNlYXJjaC1wdXNoLXN0YXRlJyB0byBzYXZlIG1vZGUtc3BlY2lmaWMgaW5pdGlhbCBzdGF0ZS4g IChCdWcjNDk5NCkKICAoaXNlYXJjaC1wdXNoLXN0YXRlKQoKICAoaXNlYXJjaC11cGRhdGUpCgog IChhZGQtaG9vayAncHJlLWNvbW1hbmQtaG9vayAnaXNlYXJjaC1wcmUtY29tbWFuZC1ob29rKQog IChhZGQtaG9vayAncG9zdC1jb21tYW5kLWhvb2sgJ2lzZWFyY2gtcG9zdC1jb21tYW5kLWhvb2sp CiAgKGFkZC1ob29rICdtb3VzZS1sZWF2ZS1idWZmZXItaG9vayAnaXNlYXJjaC1tb3VzZS1sZWF2 ZS1idWZmZXIpCiAgKGFkZC1ob29rICdrYmQtbWFjcm8tdGVybWluYXRpb24taG9vayAnaXNlYXJj aC1kb25lKQoKICA7OyBpc2VhcmNoLW1vZGUgY2FuIGJlIG1hZGUgbW9kYWwgKGluIHRoZSBzZW5z ZSBvZiBub3QgcmV0dXJuaW5nIHRvCiAgOzsgdGhlIGNhbGxpbmcgZnVuY3Rpb24gdW50aWwgc2Vh cmNoaW5nIGlzIGNvbXBsZXRlZCkgYnkgZW50ZXJpbmcKICA7OyBhIHJlY3Vyc2l2ZS1lZGl0IGFu ZCBleGl0aW5nIGl0IHdoZW4gZG9uZSBpc2VhcmNoaW5nLgogIChpZiByZWN1cnNpdmUtZWRpdAog ICAgICAobGV0ICgoaXNlYXJjaC1yZWN1cnNpdmUtZWRpdCB0KSkKCShyZWN1cnNpdmUtZWRpdCkp KQogIGlzZWFyY2gtc3VjY2VzcykKCgo7OyBTb21lIGhpZ2ggbGV2ZWwgdXRpbGl0aWVzLiAgT3Ro ZXJzIGJlbG93LgooZGVmdmFyIGlzZWFyY2gtLWN1cnJlbnQtYnVmZmVyIG5pbCkKCihkZWZ1biBp c2VhcmNoLXVwZGF0ZSAoKQogICJUaGlzIGlzIGNhbGxlZCBhZnRlciBldmVyeSBpc2VhcmNoIGNv bW1hbmQgdG8gdXBkYXRlIHRoZSBkaXNwbGF5LgpUaGUgc2Vjb25kIGxhc3QgdGhpbmcgaXQgZG9l cyBpcyB0byBydW4gYGlzZWFyY2gtdXBkYXRlLXBvc3QtaG9vaycuClRoZSBsYXN0IHRoaW5nIGlz IHRvIHRyaWdnZXIgYSBuZXcgcm91bmQgb2YgbGF6eSBoaWdobGlnaHRpbmcuIgogICh1bmxlc3Mg KGVxIChjdXJyZW50LWJ1ZmZlcikgaXNlYXJjaC0tY3VycmVudC1idWZmZXIpCiAgICAod2hlbiAo YnVmZmVyLWxpdmUtcCBpc2VhcmNoLS1jdXJyZW50LWJ1ZmZlcikKICAgICAgKHdpdGgtY3VycmVu dC1idWZmZXIgaXNlYXJjaC0tY3VycmVudC1idWZmZXIKICAgICAgICAoc2V0cSBjdXJzb3Itc2Vu c29yLWluaGliaXQgKGRlbHEgJ2lzZWFyY2ggY3Vyc29yLXNlbnNvci1pbmhpYml0KSkpKQogICAg KHNldHEgaXNlYXJjaC0tY3VycmVudC1idWZmZXIgKGN1cnJlbnQtYnVmZmVyKSkKICAgIChtYWtl LWxvY2FsLXZhcmlhYmxlICdjdXJzb3Itc2Vuc29yLWluaGliaXQpCiAgICA7OyBTdXNwZW5kIHRo aW5ncyBsaWtlIGN1cnNvci1pbnRhbmdpYmxlIGR1cmluZyBJc2VhcmNoIHNvIHdlIGNhbiBzZWFy Y2gKICAgIDs7IGV2ZW4gd2l0aGluIGludGFuZ2libGUgdGV4dC4KICAgIChwdXNoICdpc2VhcmNo IGN1cnNvci1zZW5zb3ItaW5oaWJpdCkpCgogIChpZiAoYW5kIChudWxsIHVucmVhZC1jb21tYW5k LWV2ZW50cykKCSAgIChudWxsIGV4ZWN1dGluZy1rYmQtbWFjcm8pKQogICAgICAocHJvZ24KICAg ICAgICAoaWYgKG5vdCAoaW5wdXQtcGVuZGluZy1wKSkKICAgICAgICAgIChmdW5jYWxsIChvciBp c2VhcmNoLW1lc3NhZ2UtZnVuY3Rpb24gIydpc2VhcmNoLW1lc3NhZ2UpKSkKICAgICAgICAoaWYg KGFuZCBpc2VhcmNoLXNsb3ctdGVybWluYWwtbW9kZQogICAgICAgICAgICAgICAgIChub3QgKG9y IGlzZWFyY2gtc21hbGwtd2luZG93CiAgICAgICAgICAgICAgICAgICAgICAgICAgKHBvcy12aXNp YmxlLWluLXdpbmRvdy1ncm91cC1wKSkpKQogICAgICAgICAgICAobGV0ICgoZm91bmQtcG9pbnQg KHBvaW50KSkpCiAgICAgICAgICAgICAgKHNldHEgaXNlYXJjaC1zbWFsbC13aW5kb3cgdCkKICAg ICAgICAgICAgICAobW92ZS10by13aW5kb3ctbGluZSAwKQogICAgICAgICAgICAgIChsZXQgKCh3 aW5kb3ctbWluLWhlaWdodCAxKSkKICAgICAgICAgICAgICAgIChzcGxpdC13aW5kb3cgbmlsIChp ZiAoPCBzZWFyY2gtc2xvdy13aW5kb3ctbGluZXMgMCkKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAoMSsgKC0gc2VhcmNoLXNsb3ctd2luZG93LWxpbmVzKSkKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgKC0gKHdpbmRvdy1oZWlnaHQpCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxKyBzZWFyY2gtc2xvdy13aW5kb3ctbGluZXMp KSkpKQogICAgICAgICAgICAgIChpZiAoPCBzZWFyY2gtc2xvdy13aW5kb3ctbGluZXMgMCkKICAg ICAgICAgICAgICAgICAgKHByb2duICh2ZXJ0aWNhbC1tb3Rpb24gKC0gMSBzZWFyY2gtc2xvdy13 aW5kb3ctbGluZXMpKQogICAgICAgICAgICAgICAgICAgICAgICAgKHNldC13aW5kb3ctc3RhcnQg KG5leHQtd2luZG93KSAocG9pbnQpKQogICAgICAgICAgICAgICAgICAgICAgICAgKHNldC13aW5k b3ctaHNjcm9sbCAobmV4dC13aW5kb3cpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICh3aW5kb3ctaHNjcm9sbCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAo c2V0LXdpbmRvdy1oc2Nyb2xsIChzZWxlY3RlZC13aW5kb3cpIDApKQogICAgICAgICAgICAgICAg KG90aGVyLXdpbmRvdyAxKSkKICAgICAgICAgICAgICAoZ290by1jaGFyIGZvdW5kLXBvaW50KSkK CSAgOzsgS2VlcCBzYW1lIGhzY3JvbGxpbmcgYXMgYXQgdGhlIHN0YXJ0IG9mIHRoZSBzZWFyY2gg d2hlbiBwb3NzaWJsZQoJICAobGV0ICgoY3VycmVudC1zY3JvbGwgKHdpbmRvdy1oc2Nyb2xsKSkK CQl2aXNpYmxlLXApCgkgICAgKHNldC13aW5kb3ctaHNjcm9sbCAoc2VsZWN0ZWQtd2luZG93KSBp c2VhcmNoLXN0YXJ0LWhzY3JvbGwpCgkgICAgKHNldHEgdmlzaWJsZS1wIChwb3MtdmlzaWJsZS1p bi13aW5kb3ctZ3JvdXAtcCBuaWwgbmlsIHQpKQoJICAgIChpZiAob3IgKG5vdCB2aXNpYmxlLXAp CgkJICAgIDs7IFdoZW4gcG9pbnQgaXMgbm90IHZpc2libGUgYmVjYXVzZSBvZiBoc2Nyb2xsLAoJ CSAgICA7OyBwb3MtdmlzaWJsZS1pbi13aW5kb3ctZ3JvdXAtcCByZXR1cm5zIG5vbi1uaWwsIGJ1 dAoJCSAgICA7OyB0aGUgWCBjb29yZGluYXRlIGl0IHJldHVybnMgaXMgMSBwaXhlbCBiZXlvbmQK CQkgICAgOzsgdGhlIGxhc3QgdmlzaWJsZSBvbmUuCgkJICAgICg+PSAoY2FyIHZpc2libGUtcCkK ICAgICAgICAgICAgICAgICAgICAgICAgKCogKHdpbmRvdy1tYXgtY2hhcnMtcGVyLWxpbmUpIChm cmFtZS1jaGFyLXdpZHRoKSkpKQoJCShzZXQtd2luZG93LWhzY3JvbGwgKHNlbGVjdGVkLXdpbmRv dykgY3VycmVudC1zY3JvbGwpKSkpCgkoaWYgaXNlYXJjaC1vdGhlci1lbmQKICAgICAgICAgICAg KGlmICg8IGlzZWFyY2gtb3RoZXItZW5kIChwb2ludCkpIDsgaXNlYXJjaC1mb3J3YXJkPwogICAg ICAgICAgICAgICAgKGlzZWFyY2gtaGlnaGxpZ2h0IGlzZWFyY2gtb3RoZXItZW5kIChwb2ludCkp CiAgICAgICAgICAgICAgKGlzZWFyY2gtaGlnaGxpZ2h0IChwb2ludCkgaXNlYXJjaC1vdGhlci1l bmQpKQogICAgICAgICAgKGlzZWFyY2gtZGVoaWdobGlnaHQpKSkpCiAgKHNldHEgOzsgcXVpdC1m bGFnIG5pbCAgbm90IGZvciBpc2VhcmNoLW1vZGUKICAgaXNlYXJjaC1hZGp1c3RlZCBuaWwKICAg aXNlYXJjaC15YW5rLWZsYWcgbmlsKQogIDs7IFdlIG11c3QgcHJldmVudCB0aGUgcG9pbnQgbW92 aW5nIHRvIHRoZSBlbmQgb2YgY29tcG9zaXRpb24gd2hlbiBhCiAgOzsgcGFydCBvZiB0aGUgY29t cG9zaXRpb24gaGFzIGp1c3QgYmVlbiBzZWFyY2hlZC4KICAoc2V0cSBkaXNhYmxlLXBvaW50LWFk anVzdG1lbnQgdCkKICAocnVuLWhvb2tzICdpc2VhcmNoLXVwZGF0ZS1wb3N0LWhvb2spCiAgKHdo ZW4gaXNlYXJjaC1sYXp5LWhpZ2hsaWdodAogICAgKGlzZWFyY2gtbGF6eS1oaWdobGlnaHQtbmV3 LWxvb3ApKSkKCihkZWZ1biBpc2VhcmNoLWRvbmUgKCZvcHRpb25hbCBub3B1c2ggZWRpdCkKICAi RXhpdCBJc2VhcmNoIG1vZGUuCkZvciBzdWNjZXNzZnVsIHNlYXJjaCwgcGFzcyBubyBhcmdzLgpG b3IgYSBmYWlsaW5nIHNlYXJjaCwgTk9QVVNIIGlzIHQuCkZvciBnb2luZyB0byB0aGUgbWluaWJ1 ZmZlciB0byBlZGl0IHRoZSBzZWFyY2ggc3RyaW5nLApOT1BVU0ggaXMgdCBhbmQgRURJVCBpcyB0 LiIKCiAgKHdoZW4gaXNlYXJjaC1yZXN1bWUtaW4tY29tbWFuZC1oaXN0b3J5CiAgICAoYWRkLXRv LWhpc3RvcnkgJ2NvbW1hbmQtaGlzdG9yeQogICAgICAgICAgICAgICAgICAgIGAoaXNlYXJjaC1y ZXN1bWUgLGlzZWFyY2gtc3RyaW5nICxpc2VhcmNoLXJlZ2V4cAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgLGlzZWFyY2gtcmVnZXhwLWZ1bmN0aW9uICxpc2VhcmNoLWZvcndh cmQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICxpc2VhcmNoLW1lc3NhZ2UK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcsaXNlYXJjaC1jYXNlLWZvbGQt c2VhcmNoKSkpCgogIChyZW1vdmUtaG9vayAncHJlLWNvbW1hbmQtaG9vayAnaXNlYXJjaC1wcmUt Y29tbWFuZC1ob29rKQogIChyZW1vdmUtaG9vayAncG9zdC1jb21tYW5kLWhvb2sgJ2lzZWFyY2gt cG9zdC1jb21tYW5kLWhvb2spCiAgKHJlbW92ZS1ob29rICdtb3VzZS1sZWF2ZS1idWZmZXItaG9v ayAnaXNlYXJjaC1tb3VzZS1sZWF2ZS1idWZmZXIpCiAgKHJlbW92ZS1ob29rICdrYmQtbWFjcm8t dGVybWluYXRpb24taG9vayAnaXNlYXJjaC1kb25lKQogIChzZXRxIGlzZWFyY2gtbGF6eS1oaWdo bGlnaHQtc3RhcnQgbmlsKQogICh3aGVuIChidWZmZXItbGl2ZS1wIGlzZWFyY2gtLWN1cnJlbnQt YnVmZmVyKQogICAgKHdpdGgtY3VycmVudC1idWZmZXIgaXNlYXJjaC0tY3VycmVudC1idWZmZXIK ICAgICAgKHNldHEgaXNlYXJjaC0tY3VycmVudC1idWZmZXIgbmlsKQogICAgICAoc2V0cSBjdXJz b3Itc2Vuc29yLWluaGliaXQgKGRlbHEgJ2lzZWFyY2ggY3Vyc29yLXNlbnNvci1pbmhpYml0KSkp KQoKICA7OyBDYWxsZWQgYnkgYWxsIGNvbW1hbmRzIHRoYXQgdGVybWluYXRlIGlzZWFyY2gtbW9k ZS4KICA7OyBJZiBOT1BVU0ggaXMgbm9uLW5pbCwgd2UgZG9uJ3QgcHVzaCB0aGUgc3RyaW5nIG9u IHRoZSBzZWFyY2ggcmluZy4KICAoc2V0cSBvdmVycmlkaW5nLXRlcm1pbmFsLWxvY2FsLW1hcCBu aWwpCiAgOzsgKHNldHEgcHJlLWNvbW1hbmQtaG9vayBpc2VhcmNoLW9sZC1wcmUtY29tbWFuZC1o b29rKSA7IGZvciBsZW1hY3MKICAoc2V0cSBtaW5pYnVmZmVyLW1lc3NhZ2UtdGltZW91dCBpc2Vh cmNoLW9yaWdpbmFsLW1pbmlidWZmZXItbWVzc2FnZS10aW1lb3V0KQogIChpc2VhcmNoLWRlaGln aGxpZ2h0KQogIChsYXp5LWhpZ2hsaWdodC1jbGVhbnVwIGxhenktaGlnaGxpZ2h0LWNsZWFudXAp CiAgKHNldHEgaXNlYXJjaC1sYXp5LWhpZ2hsaWdodC1sYXN0LXN0cmluZyBuaWwpCiAgKGxldCAo KGZvdW5kLXN0YXJ0ICh3aW5kb3ctZ3JvdXAtc3RhcnQpKQoJKGZvdW5kLXBvaW50IChwb2ludCkp KQogICAgKHdoZW4gaXNlYXJjaC13aW5kb3ctY29uZmlndXJhdGlvbgogICAgICAoc2V0LXdpbmRv dy1jb25maWd1cmF0aW9uIGlzZWFyY2gtd2luZG93LWNvbmZpZ3VyYXRpb24pCiAgICAgIChpZiBp c2VhcmNoLXNtYWxsLXdpbmRvdwoJICAoZ290by1jaGFyIGZvdW5kLXBvaW50KQoJOzsgc2V0LXdp bmRvdy1jb25maWd1cmF0aW9uIGNsb2JiZXJzIHdpbmRvdy1zdGFydDsgcmVzdG9yZSBpdC4KCTs7 IFRoaXMgaGFzIGFuIGFubm95aW5nIHNpZGUgZWZmZWN0IG9mIGNsZWFyaW5nIHRoZSBsYXN0X21v ZGlmZgoJOzsgZmllbGQgb2YgdGhlIHdpbmRvdywgd2hpY2ggY2FuIGNhdXNlIHVud2FudGVkIHNj cm9sbGluZywKCTs7IHNvIGRvbid0IGRvIGl0IHVubGVzcyB0cnVseSBuZWNlc3NhcnkuCgkoc2V0 LXdpbmRvdy1ncm91cC1zdGFydCAoc2VsZWN0ZWQtd2luZG93KSBmb3VuZC1zdGFydCB0KSkpKQoK ICAoc2V0cSBpc2VhcmNoLW1vZGUgbmlsKQogIChpZiBpc2VhcmNoLWlucHV0LW1ldGhvZC1sb2Nh bC1wCiAgICAgIChzZXRxIGlucHV0LW1ldGhvZC1mdW5jdGlvbiBpc2VhcmNoLWlucHV0LW1ldGhv ZC1mdW5jdGlvbikKICAgIChraWxsLWxvY2FsLXZhcmlhYmxlICdpbnB1dC1tZXRob2QtZnVuY3Rp b24pKQoKICAoaWYgaXNlYXJjaC10b29sLWJhci1vbGQtbWFwCiAgICAgIChwcm9nbgogICAgICAg IChzZXRxLWxvY2FsIHRvb2wtYmFyLW1hcCBpc2VhcmNoLXRvb2wtYmFyLW9sZC1tYXApCiAgICAg ICAgKHNldHEgaXNlYXJjaC10b29sLWJhci1vbGQtbWFwIG5pbCkpCiAgICAoa2lsbC1sb2NhbC12 YXJpYWJsZSAndG9vbC1iYXItbWFwKSkKCiAgKGZvcmNlLW1vZGUtbGluZS11cGRhdGUpCgogIDs7 IElmIHdlIGVuZGVkIGluIHRoZSBtaWRkbGUgb2Ygc29tZSBpbnRhbmdpYmxlIHRleHQsCiAgOzsg bW92ZSB0byB0aGUgZnVydGhlciBlbmQgb2YgdGhhdCBpbnRhbmdpYmxlIHRleHQuCiAgKGxldCAo KGFmdGVyIChpZiAoZW9icCkgbmlsCgkJIChnZXQtdGV4dC1wcm9wZXJ0eSAocG9pbnQpICdpbnRh bmdpYmxlKSkpCgkoYmVmb3JlIChpZiAoYm9icCkgbmlsCgkJICAoZ2V0LXRleHQtcHJvcGVydHkg KDEtIChwb2ludCkpICdpbnRhbmdpYmxlKSkpKQogICAgKHdoZW4gKGFuZCBiZWZvcmUgYWZ0ZXIg KGVxIGJlZm9yZSBhZnRlcikpCiAgICAgIChnb3RvLWNoYXIKICAgICAgIChpZiBpc2VhcmNoLWZv cndhcmQKICAgICAgICAgICAobmV4dC1zaW5nbGUtcHJvcGVydHktY2hhbmdlIChwb2ludCkgJ2lu dGFuZ2libGUpCiAgICAgICAgIChwcmV2aW91cy1zaW5nbGUtcHJvcGVydHktY2hhbmdlIChwb2lu dCkgJ2ludGFuZ2libGUpKSkpKQoKICAoaWYgKGFuZCAoPiAobGVuZ3RoIGlzZWFyY2gtc3RyaW5n KSAwKSAobm90IG5vcHVzaCkpCiAgICAgIDs7IFVwZGF0ZSB0aGUgcmluZyBkYXRhLgogICAgICAo aXNlYXJjaC11cGRhdGUtcmluZyBpc2VhcmNoLXN0cmluZyBpc2VhcmNoLXJlZ2V4cCkpCgogIChs ZXQgKChpc2VhcmNoLW1vZGUtZW5kLWhvb2stcXVpdCAoYW5kIG5vcHVzaCAobm90IGVkaXQpKSkp CiAgICAocnVuLWhvb2tzICdpc2VhcmNoLW1vZGUtZW5kLWhvb2spKQoKICA7OyBJZiB0aGVyZSB3 YXMgbW92ZW1lbnQsIG1hcmsgdGhlIHN0YXJ0aW5nIHBvc2l0aW9uLgogIDs7IE1heWJlIHNob3Vs ZCB0ZXN0IGRpZmZlcmVuY2UgYmV0d2VlbiBhbmQgc2V0IG1hcmsgb25seSBpZiA+IHRocmVzaG9s ZC4KICAoaWYgKC89IChwb2ludCkgaXNlYXJjaC1vcG9pbnQpCiAgICAgIChvciAoYW5kIHRyYW5z aWVudC1tYXJrLW1vZGUgbWFyay1hY3RpdmUpCgkgIChwcm9nbgoJICAgIChwdXNoLW1hcmsgaXNl YXJjaC1vcG9pbnQgdCkKCSAgICAob3IgZXhlY3V0aW5nLWtiZC1tYWNybyAoPiAobWluaWJ1ZmZl ci1kZXB0aCkgMCkgZWRpdAoJCShtZXNzYWdlICJNYXJrIHNhdmVkIHdoZXJlIHNlYXJjaCBzdGFy dGVkIikpKSkpCgogIChhbmQgKG5vdCBlZGl0KSBpc2VhcmNoLXJlY3Vyc2l2ZS1lZGl0IChleGl0 LXJlY3Vyc2l2ZS1lZGl0KSkpCgooZGVmdmFyIGlzZWFyY2gtbW91c2UtY29tbWFuZHMgJyhtb3Vz ZS1taW5vci1tb2RlLW1lbnUpCiAgIkxpc3Qgb2YgbW91c2UgY29tbWFuZHMgdGhhdCBhcmUgYWxs b3dlZCBkdXJpbmcgSXNlYXJjaC4iKQoKKGRlZnVuIGlzZWFyY2gtbW91c2UtbGVhdmUtYnVmZmVy ICgpCiAgIkV4aXQgSXNlYXJjaCB1bmxlc3MgdGhlIG1vdXNlIGNvbW1hbmQgaXMgYWxsb3dlZCBp biBJc2VhcmNoLgoKTW91c2UgY29tbWFuZHMgYXJlIGFsbG93ZWQgaW4gSXNlYXJjaCBpZiB0aGV5 IGhhdmUgYSBub24tbmlsCmBpc2VhcmNoLXNjcm9sbCcgcHJvcGVydHkgb3IgaWYgdGhleSBhcmUg bGlzdGVkIGluCmBpc2VhcmNoLW1vdXNlLWNvbW1hbmRzJy4iCiAgKHVubGVzcyAob3IgKG1lbXEg dGhpcy1jb21tYW5kIGlzZWFyY2gtbW91c2UtY29tbWFuZHMpCiAgICAgICAgICAgICAgKGVxIChn ZXQgdGhpcy1jb21tYW5kICdpc2VhcmNoLXNjcm9sbCkgdCkpCiAgICAoaXNlYXJjaC1kb25lKSkp CgooZGVmdW4gaXNlYXJjaC11cGRhdGUtcmluZyAoc3RyaW5nICZvcHRpb25hbCByZWdleHApCiAg IkFkZCBTVFJJTkcgdG8gdGhlIGJlZ2lubmluZyBvZiB0aGUgc2VhcmNoIHJpbmcuClJFR0VYUCBp ZiBub24tbmlsIHNheXMgdXNlIHRoZSByZWdleHAgc2VhcmNoIHJpbmcuIgogIChsZXQgKChoaXN0 b3J5LWRlbGV0ZS1kdXBsaWNhdGVzIHQpKQogICAgKGFkZC10by1oaXN0b3J5CiAgICAgKGlmIHJl Z2V4cCAncmVnZXhwLXNlYXJjaC1yaW5nICdzZWFyY2gtcmluZykKICAgICAoaXNlYXJjaC1zdHJp bmctcHJvcGVydGl6ZSBzdHJpbmcpCiAgICAgKGlmIHJlZ2V4cCByZWdleHAtc2VhcmNoLXJpbmct bWF4IHNlYXJjaC1yaW5nLW1heCkKICAgICB0KSkpCgooZGVmdW4gaXNlYXJjaC1zdHJpbmctcHJv cGVydGl6ZSAoc3RyaW5nICZvcHRpb25hbCBwcm9wZXJ0aWVzKQogICJBZGQgaXNlYXJjaCBwcm9w ZXJ0aWVzIHRvIHRoZSBpc2VhcmNoIHN0cmluZy4iCiAgKHVubGVzcyBwcm9wZXJ0aWVzCiAgICAo c2V0cSBwcm9wZXJ0aWVzIGAoaXNlYXJjaC1jYXNlLWZvbGQtc2VhcmNoICxpc2VhcmNoLWNhc2Ut Zm9sZC1zZWFyY2gpKQogICAgKHVubGVzcyBpc2VhcmNoLXJlZ2V4cAogICAgICAoc2V0cSBwcm9w ZXJ0aWVzIChhcHBlbmQgcHJvcGVydGllcyBgKGlzZWFyY2gtcmVnZXhwLWZ1bmN0aW9uICxpc2Vh cmNoLXJlZ2V4cC1mdW5jdGlvbikpKSkpCiAgKGFwcGx5ICdwcm9wZXJ0aXplIHN0cmluZyBwcm9w ZXJ0aWVzKSkKCihkZWZ1biBpc2VhcmNoLXVwZGF0ZS1mcm9tLXN0cmluZy1wcm9wZXJ0aWVzIChz dHJpbmcpCiAgIlVwZGF0ZSBpc2VhcmNoIHByb3BlcnRpZXMgZnJvbSB0aGUgaXNlYXJjaCBzdHJp bmciCiAgKHdoZW4gKHBsaXN0LW1lbWJlciAodGV4dC1wcm9wZXJ0aWVzLWF0IDAgc3RyaW5nKSAn aXNlYXJjaC1jYXNlLWZvbGQtc2VhcmNoKQogICAgKHNldHEgaXNlYXJjaC1jYXNlLWZvbGQtc2Vh cmNoCgkgIChnZXQtdGV4dC1wcm9wZXJ0eSAwICdpc2VhcmNoLWNhc2UtZm9sZC1zZWFyY2ggc3Ry aW5nKSkpCiAgKHdoZW4gKHBsaXN0LW1lbWJlciAodGV4dC1wcm9wZXJ0aWVzLWF0IDAgc3RyaW5n KSAnaXNlYXJjaC1yZWdleHAtZnVuY3Rpb24pCiAgICAoc2V0cSBpc2VhcmNoLXJlZ2V4cC1mdW5j dGlvbgoJICAoZ2V0LXRleHQtcHJvcGVydHkgMCAnaXNlYXJjaC1yZWdleHAtZnVuY3Rpb24gc3Ry aW5nKSkpKQoKDAo7OyBUaGUgc2VhcmNoIHN0YXR1cyBzdHJ1Y3R1cmUgYW5kIHN0YWNrLgoKKGNs LWRlZnN0cnVjdCAoaXNlYXJjaC0tc3RhdGUKICAgICAgICAgICAgICAgKDpjb25zdHJ1Y3RvciBu aWwpCiAgICAgICAgICAgICAgICg6Y29waWVyIG5pbCkKICAgICAgICAgICAgICAgKDpjb25zdHJ1 Y3RvciBpc2VhcmNoLS1nZXQtc3RhdGUKICAgICAgICAgICAgICAgICgmYXV4CiAgICAgICAgICAg ICAgICAgKHN0cmluZyBpc2VhcmNoLXN0cmluZykKICAgICAgICAgICAgICAgICAobWVzc2FnZSBp c2VhcmNoLW1lc3NhZ2UpCiAgICAgICAgICAgICAgICAgKHBvaW50IChwb2ludCkpCiAgICAgICAg ICAgICAgICAgKHN1Y2Nlc3MgaXNlYXJjaC1zdWNjZXNzKQogICAgICAgICAgICAgICAgIChmb3J3 YXJkIGlzZWFyY2gtZm9yd2FyZCkKICAgICAgICAgICAgICAgICAob3RoZXItZW5kIGlzZWFyY2gt b3RoZXItZW5kKQogICAgICAgICAgICAgICAgICh3b3JkIGlzZWFyY2gtcmVnZXhwLWZ1bmN0aW9u KQogICAgICAgICAgICAgICAgIChlcnJvciBpc2VhcmNoLWVycm9yKQogICAgICAgICAgICAgICAg ICh3cmFwcGVkIGlzZWFyY2gtd3JhcHBlZCkKICAgICAgICAgICAgICAgICAoYmFycmllciBpc2Vh cmNoLWJhcnJpZXIpCiAgICAgICAgICAgICAgICAgKGNhc2UtZm9sZC1zZWFyY2ggaXNlYXJjaC1j YXNlLWZvbGQtc2VhcmNoKQogICAgICAgICAgICAgICAgIChwb3AtZnVuIChpZiBpc2VhcmNoLXB1 c2gtc3RhdGUtZnVuY3Rpb24KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGZ1bmNhbGwg aXNlYXJjaC1wdXNoLXN0YXRlLWZ1bmN0aW9uKSkpKSkpCiAgKHN0cmluZyBuaWwgOnJlYWQtb25s eSB0KQogIChtZXNzYWdlIG5pbCA6cmVhZC1vbmx5IHQpCiAgKHBvaW50IG5pbCA6cmVhZC1vbmx5 IHQpCiAgKHN1Y2Nlc3MgbmlsIDpyZWFkLW9ubHkgdCkKICAoZm9yd2FyZCBuaWwgOnJlYWQtb25s eSB0KQogIChvdGhlci1lbmQgbmlsIDpyZWFkLW9ubHkgdCkKICAod29yZCBuaWwgOnJlYWQtb25s eSB0KQogIChlcnJvciBuaWwgOnJlYWQtb25seSB0KQogICh3cmFwcGVkIG5pbCA6cmVhZC1vbmx5 IHQpCiAgKGJhcnJpZXIgbmlsIDpyZWFkLW9ubHkgdCkKICAoY2FzZS1mb2xkLXNlYXJjaCBuaWwg OnJlYWQtb25seSB0KQogIChwb3AtZnVuIG5pbCA6cmVhZC1vbmx5IHQpKQoKKGRlZnVuIGlzZWFy Y2gtLXNldC1zdGF0ZSAoY21kKQogIChzZXRxIGlzZWFyY2gtc3RyaW5nIChpc2VhcmNoLS1zdGF0 ZS1zdHJpbmcgY21kKQoJaXNlYXJjaC1tZXNzYWdlIChpc2VhcmNoLS1zdGF0ZS1tZXNzYWdlIGNt ZCkKCWlzZWFyY2gtc3VjY2VzcyAoaXNlYXJjaC0tc3RhdGUtc3VjY2VzcyBjbWQpCglpc2VhcmNo LWZvcndhcmQgKGlzZWFyY2gtLXN0YXRlLWZvcndhcmQgY21kKQoJaXNlYXJjaC1vdGhlci1lbmQg KGlzZWFyY2gtLXN0YXRlLW90aGVyLWVuZCBjbWQpCglpc2VhcmNoLXJlZ2V4cC1mdW5jdGlvbiAo aXNlYXJjaC0tc3RhdGUtd29yZCBjbWQpCglpc2VhcmNoLWVycm9yIChpc2VhcmNoLS1zdGF0ZS1l cnJvciBjbWQpCglpc2VhcmNoLXdyYXBwZWQgKGlzZWFyY2gtLXN0YXRlLXdyYXBwZWQgY21kKQoJ aXNlYXJjaC1iYXJyaWVyIChpc2VhcmNoLS1zdGF0ZS1iYXJyaWVyIGNtZCkKCWlzZWFyY2gtY2Fz ZS1mb2xkLXNlYXJjaCAoaXNlYXJjaC0tc3RhdGUtY2FzZS1mb2xkLXNlYXJjaCBjbWQpKQogIChp ZiAoZnVuY3Rpb25wIChpc2VhcmNoLS1zdGF0ZS1wb3AtZnVuIGNtZCkpCiAgICAgIChmdW5jYWxs IChpc2VhcmNoLS1zdGF0ZS1wb3AtZnVuIGNtZCkgY21kKSkKICAoZ290by1jaGFyIChpc2VhcmNo LS1zdGF0ZS1wb2ludCBjbWQpKSkKCihkZWZ1biBpc2VhcmNoLXBvcC1zdGF0ZSAoKQogIChzZXRx IGlzZWFyY2gtY21kcyAoY2RyIGlzZWFyY2gtY21kcykpCiAgKGlzZWFyY2gtLXNldC1zdGF0ZSAo Y2FyIGlzZWFyY2gtY21kcykpKQoKKGRlZnVuIGlzZWFyY2gtcHVzaC1zdGF0ZSAoKQogIChwdXNo IChpc2VhcmNoLS1nZXQtc3RhdGUpIGlzZWFyY2gtY21kcykpCgoMCjs7IENvbW1hbmRzIGFjdGl2 ZSB3aGlsZSBpbnNpZGUgb2YgdGhlIGlzZWFyY2ggbWlub3IgbW9kZS4KCihkZWZ1biBpc2VhcmNo LWV4aXQgKCkKICAiRXhpdCBzZWFyY2ggbm9ybWFsbHkuCkhvd2V2ZXIsIGlmIHRoaXMgaXMgdGhl IGZpcnN0IGNvbW1hbmQgYWZ0ZXIgc3RhcnRpbmcgaW5jcmVtZW50YWwKc2VhcmNoIGFuZCBgc2Vh cmNoLW5vbmluY3JlbWVudGFsLWluc3RlYWQnIGlzIG5vbi1uaWwsIGRvIGEKbm9uaW5jcmVtZW50 YWwgc2VhcmNoIGluc3RlYWQgdmlhIGBpc2VhcmNoLWVkaXQtc3RyaW5nJy4iCiAgKGludGVyYWN0 aXZlKQogIChpZiAoYW5kIHNlYXJjaC1ub25pbmNyZW1lbnRhbC1pbnN0ZWFkCgkgICAoPSAwIChs ZW5ndGggaXNlYXJjaC1zdHJpbmcpKSkKICAgICAgKGxldCAoKGlzZWFyY2gtbm9uaW5jcmVtZW50 YWwgdCkpCgkoaXNlYXJjaC1lZGl0LXN0cmluZykpIDs7IHRoaXMgY2FsbHMgaXNlYXJjaC1kb25l IGFzIHdlbGwKICAgIChpc2VhcmNoLWRvbmUpKQogIChpc2VhcmNoLWNsZWFuLW92ZXJsYXlzKSkK CihkZWZ1biBpc2VhcmNoLWZhaWwtcG9zICgmb3B0aW9uYWwgbXNnKQogICJSZXR1cm4gcG9zaXRp b24gb2YgZmlyc3QgbWlzbWF0Y2ggaW4gc2VhcmNoIHN0cmluZywgb3IgbmlsIGlmIG5vbmUuCklm IE1TRyBpcyBub24tbmlsLCB1c2UgdmFyaWFibGUgYGlzZWFyY2gtbWVzc2FnZScsIG90aGVyd2lz ZSBgaXNlYXJjaC1zdHJpbmcnLiIKICAobGV0ICgoY21kcyBpc2VhcmNoLWNtZHMpCgkoY3Vyci1t c2cgKGlmIG1zZyBpc2VhcmNoLW1lc3NhZ2UgaXNlYXJjaC1zdHJpbmcpKQoJc3VjYy1tc2cpCiAg ICAod2hlbiAob3IgKG5vdCBpc2VhcmNoLXN1Y2Nlc3MpIGlzZWFyY2gtZXJyb3IpCiAgICAgICh3 aGlsZSAoYW5kIGNtZHMKCQkgIChvciAobm90IChpc2VhcmNoLS1zdGF0ZS1zdWNjZXNzIChjYXIg Y21kcykpKQoJCSAgICAgIChpc2VhcmNoLS1zdGF0ZS1lcnJvciAoY2FyIGNtZHMpKSkpCiAgICAg ICAgKHBvcCBjbWRzKSkKICAgICAgKHNldHEgc3VjYy1tc2cgKGFuZCBjbWRzIChpZiBtc2cgKGlz ZWFyY2gtLXN0YXRlLW1lc3NhZ2UgKGNhciBjbWRzKSkKCQkJCSAoaXNlYXJjaC0tc3RhdGUtc3Ry aW5nIChjYXIgY21kcykpKSkpCiAgICAgIChpZiAoYW5kIChzdHJpbmdwIHN1Y2MtbXNnKQoJICAg ICAgICg8IChsZW5ndGggc3VjYy1tc2cpIChsZW5ndGggY3Vyci1tc2cpKQoJICAgICAgIChlcXVh bCBzdWNjLW1zZwoJCSAgICAgIChzdWJzdHJpbmcgY3Vyci1tc2cgMCAobGVuZ3RoIHN1Y2MtbXNn KSkpKQoJICAobGVuZ3RoIHN1Y2MtbXNnKQoJMCkpKSkKCihkZWZpbmUtb2Jzb2xldGUtdmFyaWFi bGUtYWxpYXMgJ2lzZWFyY2gtbmV3LXdvcmQKICAnaXNlYXJjaC1uZXctcmVnZXhwLWZ1bmN0aW9u ICIyNS4xIikKCihkZWZ2YXIgaXNlYXJjaC1uZXctcmVnZXhwLWZ1bmN0aW9uIG5pbAogICJIb2xk cyB0aGUgbmV4dCBgaXNlYXJjaC1yZWdleHAtZnVuY3Rpb24nIGluc2lkZSBgd2l0aC1pc2VhcmNo LXN1c3BlbmRlZCcuCklmIHRoaXMgaXMgc2V0IGluc2lkZSBjb2RlIHdyYXBwZWQgYnkgdGhlIG1h Y3JvCmB3aXRoLWlzZWFyY2gtc3VzcGVuZGVkJywgdGhlbiB0aGUgdmFsdWUgc2V0IHdpbGwgYmUg dXNlZCBhcyB0aGUKYGlzZWFyY2gtcmVnZXhwLWZ1bmN0aW9uJyBvbmNlIGlzZWFyY2ggcmVzdW1l cy4iKQoKKGRlZnZhciBpc2VhcmNoLXN1c3BlbmRlZCBuaWwpCgooZGVmbWFjcm8gd2l0aC1pc2Vh cmNoLXN1c3BlbmRlZCAoJnJlc3QgYm9keSkKICAiRXhpdCBJc2VhcmNoIG1vZGUsIHJ1biBCT0RZ LCBhbmQgcmVpbnZva2UgdGhlIHBlbmRpbmcgc2VhcmNoLgpZb3UgY2FuIHVwZGF0ZSB0aGUgZ2xv YmFsIGlzZWFyY2ggdmFyaWFibGVzIGJ5IHNldHRpbmcgbmV3IHZhbHVlcyB0bwpgaXNlYXJjaC1u ZXctc3RyaW5nJywgYGlzZWFyY2gtbmV3LW1lc3NhZ2UnLCBgaXNlYXJjaC1uZXctZm9yd2FyZCcs CmBpc2VhcmNoLW5ldy1yZWdleHAtZnVuY3Rpb24nLCBgaXNlYXJjaC1uZXctY2FzZS1mb2xkJywg YGlzZWFyY2gtbmV3LW5vbmluY3JlbWVudGFsJy4iCiAgOzsgVGhpcyBjb2RlIGlzIHZlcnkgaGFp cnkgZm9yIHNldmVyYWwgcmVhc29ucywgZXhwbGFpbmVkIGluIHRoZSBjb2RlLgogIDs7IE1haW5s eSwgaXNlYXJjaC1tb2RlIG11c3QgYmUgdGVybWluYXRlZCB3aGlsZSBlZGl0aW5nIGFuZCB0aGVu IHJlc3RhcnRlZC4KICA7OyBJZiB0aGVyZSB3ZXJlIGEgd2F5IHRvIGNhdGNoIGFueSBjaGFuZ2Ug b2YgYnVmZmVyIGZyb20gdGhlIG1pbmlidWZmZXIsCiAgOzsgdGhpcyBjb3VsZCBiZSBzaW1wbGlm aWVkIGdyZWF0bHkuCiAgOzsgRWRpdGluZyBkb2Vzbid0IGJhY2sgdXAgdGhlIHNlYXJjaCBwb2lu dC4gIFNob3VsZCBpdD8KICBgKGNvbmRpdGlvbi1jYXNlIG5pbAogICAgICAocHJvZ24KCShsZXQg KChpc2VhcmNoLW5ldy1ub25pbmNyZW1lbnRhbCBpc2VhcmNoLW5vbmluY3JlbWVudGFsKQoKCSAg ICAgIDs7IExvY2FsbHkgYmluZCBhbGwgaXNlYXJjaCBnbG9iYWwgdmFyaWFibGVzIHRvIHByb3Rl Y3QgdGhlbQoJICAgICAgOzsgZnJvbSByZWN1cnNpdmUgaXNlYXJjaGluZy4KCSAgICAgIDs7IGlz ZWFyY2gtc3RyaW5nIC1tZXNzYWdlIGFuZCAtZm9yd2FyZCBhcmUgbm90IGJvdW5kCgkgICAgICA7 OyBzbyB0aGV5IG1heSBiZSBjaGFuZ2VkLiAgSW5zdGVhZCwgc2F2ZSB0aGUgdmFsdWVzLgoJICAg ICAgKGlzZWFyY2gtbmV3LXN0cmluZyBpc2VhcmNoLXN0cmluZykKCSAgICAgIChpc2VhcmNoLW5l dy1tZXNzYWdlIGlzZWFyY2gtbWVzc2FnZSkKCSAgICAgIChpc2VhcmNoLW5ldy1mb3J3YXJkIGlz ZWFyY2gtZm9yd2FyZCkKCSAgICAgIChpc2VhcmNoLW5ldy1yZWdleHAtZnVuY3Rpb24gaXNlYXJj aC1yZWdleHAtZnVuY3Rpb24pCgkgICAgICAoaXNlYXJjaC1uZXctY2FzZS1mb2xkIGlzZWFyY2gt Y2FzZS1mb2xkLXNlYXJjaCkKCgkgICAgICAoaXNlYXJjaC1yZWdleHAgaXNlYXJjaC1yZWdleHAp CgkgICAgICAoaXNlYXJjaC1vcC1mdW4gaXNlYXJjaC1vcC1mdW4pCgkgICAgICAoaXNlYXJjaC1j bWRzIGlzZWFyY2gtY21kcykKCSAgICAgIChpc2VhcmNoLXN1Y2Nlc3MgaXNlYXJjaC1zdWNjZXNz KQoJICAgICAgKGlzZWFyY2gtd3JhcHBlZCBpc2VhcmNoLXdyYXBwZWQpCgkgICAgICAoaXNlYXJj aC1iYXJyaWVyIGlzZWFyY2gtYmFycmllcikKCSAgICAgIChpc2VhcmNoLWFkanVzdGVkIGlzZWFy Y2gtYWRqdXN0ZWQpCgkgICAgICAoaXNlYXJjaC15YW5rLWZsYWcgaXNlYXJjaC15YW5rLWZsYWcp CgkgICAgICAoaXNlYXJjaC1lcnJvciBpc2VhcmNoLWVycm9yKQoKCSAgICAgIChtdWx0aS1pc2Vh cmNoLWZpbGUtbGlzdC1uZXcgbXVsdGktaXNlYXJjaC1maWxlLWxpc3QpCgkgICAgICAobXVsdGkt aXNlYXJjaC1idWZmZXItbGlzdC1uZXcgbXVsdGktaXNlYXJjaC1idWZmZXItbGlzdCkKCSAgICAg IChtdWx0aS1pc2VhcmNoLW5leHQtYnVmZmVyLWZ1bmN0aW9uIG11bHRpLWlzZWFyY2gtbmV4dC1i dWZmZXItY3VycmVudC1mdW5jdGlvbikKCSAgICAgIChtdWx0aS1pc2VhcmNoLWN1cnJlbnQtYnVm ZmVyLW5ldyBtdWx0aS1pc2VhcmNoLWN1cnJlbnQtYnVmZmVyKQogIDs7OyBEb24ndCBiaW5kIHRo aXMuICBXZSB3YW50IGlzZWFyY2gtc2VhcmNoLCBiZWxvdywgdG8gc2V0IGl0LgogIDs7OyBBbmQg dGhlIG9sZCB2YWx1ZSB3b24ndCBtYXR0ZXIgYWZ0ZXIgdGhhdC4KICA7OzsJICAgIChpc2VhcmNo LW90aGVyLWVuZCBpc2VhcmNoLW90aGVyLWVuZCkKICA7OzsgUGVyaGFwcyBzb21lIG9mIHRoZXNl IG90aGVyIHZhcmlhYmxlcyBzaG91bGQgYmUgYm91bmQgZm9yIGEKICA7Ozsgc2hvcnRlciBwZXJp b2QsIGVuZGluZyBiZWZvcmUgdGhlIG5leHQgaXNlYXJjaC1zZWFyY2guCiAgOzs7IEJ1dCB0aGVy ZSBkb2Vzbid0IHNlZW0gdG8gYmUgYSByZWFsIGJ1Zywgc28gbGV0J3Mgbm90IHJpc2sgaXQgbm93 LgoJICAgICAgKGlzZWFyY2gtb3BvaW50IGlzZWFyY2gtb3BvaW50KQoJICAgICAgKGlzZWFyY2gt c2xvdy10ZXJtaW5hbC1tb2RlIGlzZWFyY2gtc2xvdy10ZXJtaW5hbC1tb2RlKQoJICAgICAgKGlz ZWFyY2gtc21hbGwtd2luZG93IGlzZWFyY2gtc21hbGwtd2luZG93KQoJICAgICAgKGlzZWFyY2gt cmVjdXJzaXZlLWVkaXQgaXNlYXJjaC1yZWN1cnNpdmUtZWRpdCkKCSAgICAgIDs7IFNhdmUgY3Vy cmVudCBjb25maWd1cmF0aW9uIHNvIHdlIGNhbiByZXN0b3JlIGl0IGhlcmUuCgkgICAgICAoaXNl YXJjaC13aW5kb3ctY29uZmlndXJhdGlvbiAoY3VycmVudC13aW5kb3ctY29uZmlndXJhdGlvbikp CgoJICAgICAgOzsgVGhpcyBjb3VsZCBwcm90ZWN0IHRoZSBpbmRleCBvZiB0aGUgc2VhcmNoIHJp bmdzLAoJICAgICAgOzsgYnV0IHdlIGNhbid0IHJlbGlhYmx5IGNvdW50IHRoZSBudW1iZXIgb2Yg dHlwZWQgTS1wCgkgICAgICA7OyBpbiBgcmVhZC1mcm9tLW1pbmlidWZmZXInIHRvIGFkanVzdCB0 aGUgaW5kZXggYWNjb3JkaW5nbHkuCgkgICAgICA7OyBTbyB3aGVuIHRoZSBmb2xsb3dpbmcgaXMg Y29tbWVudGVkIG91dCwgYGlzZWFyY2gtbW9kZScKCSAgICAgIDs7IGJlbG93IHJlc2V0cyB0aGUg aW5kZXggdG8gdGhlIHByZWRpY3RhYmxlIHZhbHVlIG5pbC4KCSAgICAgIDs7IChzZWFyY2gtcmlu Zy15YW5rLXBvaW50ZXIgc2VhcmNoLXJpbmcteWFuay1wb2ludGVyKQoJICAgICAgOzsgKHJlZ2V4 cC1zZWFyY2gtcmluZy15YW5rLXBvaW50ZXIgcmVnZXhwLXNlYXJjaC1yaW5nLXlhbmstcG9pbnRl cikKCgkgICAgICA7OyBUZW1wb3JhcmlseSByZXN0b3JlIGBtaW5pYnVmZmVyLW1lc3NhZ2UtdGlt ZW91dCcuCgkgICAgICAobWluaWJ1ZmZlci1tZXNzYWdlLXRpbWVvdXQKCSAgICAgICBpc2VhcmNo LW9yaWdpbmFsLW1pbmlidWZmZXItbWVzc2FnZS10aW1lb3V0KQoJICAgICAgKGlzZWFyY2gtb3Jp Z2luYWwtbWluaWJ1ZmZlci1tZXNzYWdlLXRpbWVvdXQKCSAgICAgICBpc2VhcmNoLW9yaWdpbmFs LW1pbmlidWZmZXItbWVzc2FnZS10aW1lb3V0KQoJICAgICAgb2xkLXBvaW50IG9sZC1vdGhlci1l bmQpCgogICAgICAgICAgKHNldHEgaXNlYXJjaC1zdXNwZW5kZWQgdCkKCgkgIDs7IEFjdHVhbGx5 IHRlcm1pbmF0ZSBpc2VhcmNoaW5nIHVudGlsIGVkaXRpbmcgaXMgZG9uZS4KCSAgOzsgVGhpcyBp cyBzbyB0aGF0IHRoZSB1c2VyIGNhbiBkbyBhbnl0aGluZyB3aXRob3V0IGZhaWx1cmUsCgkgIDs7 IGxpa2Ugc3dpdGNoIGJ1ZmZlcnMgYW5kIHN0YXJ0IGFub3RoZXIgaXNlYXJjaCwgYW5kIHJldHVy bi4KCSAgKGNvbmRpdGlvbi1jYXNlIG5pbAoJICAgICAgKGlzZWFyY2gtZG9uZSB0IHQpCgkgICAg KGV4aXQgbmlsKSkJCQk7IHdhcyByZWN1cnNpdmUgZWRpdGluZwoKCSAgOzsgU2F2ZSBvbGQgcG9p bnQgYW5kIGlzZWFyY2gtb3RoZXItZW5kIGJlZm9yZSByZWFkaW5nIGZyb20gbWluaWJ1ZmZlcgoJ ICA7OyB0aGF0IGNhbiBjaGFuZ2UgdGhlaXIgdmFsdWVzLgoJICAoc2V0cSBvbGQtcG9pbnQgKHBv aW50KSBvbGQtb3RoZXItZW5kIGlzZWFyY2gtb3RoZXItZW5kKQoKCSAgKHVud2luZC1wcm90ZWN0 CgkgICAgICAocHJvZ24gLEBib2R5KQoKICAgICAgICAgICAgKHNldHEgaXNlYXJjaC1zdXNwZW5k ZWQgbmlsKQoKCSAgICA7OyBBbHdheXMgcmVzdW1lIGlzZWFyY2hpbmcgYnkgcmVzdGFydGluZyBp dC4KCSAgICAoaXNlYXJjaC1tb2RlIGlzZWFyY2gtZm9yd2FyZAoJCQkgIGlzZWFyY2gtcmVnZXhw CgkJCSAgaXNlYXJjaC1vcC1mdW4KCQkJICBuaWwKCQkJICBpc2VhcmNoLXJlZ2V4cC1mdW5jdGlv bikKCgkgICAgOzsgQ29weSBuZXcgbG9jYWwgdmFsdWVzIHRvIGlzZWFyY2ggZ2xvYmFscwoJICAg IChzZXRxIGlzZWFyY2gtc3RyaW5nIGlzZWFyY2gtbmV3LXN0cmluZwoJCSAgaXNlYXJjaC1tZXNz YWdlIGlzZWFyY2gtbmV3LW1lc3NhZ2UKCQkgIGlzZWFyY2gtZm9yd2FyZCBpc2VhcmNoLW5ldy1m b3J3YXJkCgkJICBpc2VhcmNoLW5vbmluY3JlbWVudGFsIGlzZWFyY2gtbmV3LW5vbmluY3JlbWVu dGFsCgkJICBpc2VhcmNoLXJlZ2V4cC1mdW5jdGlvbiBpc2VhcmNoLW5ldy1yZWdleHAtZnVuY3Rp b24KCQkgIGlzZWFyY2gtY2FzZS1mb2xkLXNlYXJjaCBpc2VhcmNoLW5ldy1jYXNlLWZvbGQKCQkg IG11bHRpLWlzZWFyY2gtY3VycmVudC1idWZmZXIgbXVsdGktaXNlYXJjaC1jdXJyZW50LWJ1ZmZl ci1uZXcKCQkgIG11bHRpLWlzZWFyY2gtZmlsZS1saXN0IG11bHRpLWlzZWFyY2gtZmlsZS1saXN0 LW5ldwoJCSAgbXVsdGktaXNlYXJjaC1idWZmZXItbGlzdCBtdWx0aS1pc2VhcmNoLWJ1ZmZlci1s aXN0LW5ldykKCiAgICAgICAgICAgIChpc2VhcmNoLXVwZGF0ZS1mcm9tLXN0cmluZy1wcm9wZXJ0 aWVzIGlzZWFyY2gtc3RyaW5nKQoKCSAgICA7OyBSZXN0b3JlIHRoZSBtaW5pYnVmZmVyIG1lc3Nh Z2UgYmVmb3JlIG1vdmluZyBwb2ludC4KICAgICAgICAgICAgKGZ1bmNhbGwgKG9yIGlzZWFyY2gt bWVzc2FnZS1mdW5jdGlvbiAjJ2lzZWFyY2gtbWVzc2FnZSkgbmlsIHQpCgoJICAgIDs7IFNldCBw b2ludCBhdCB0aGUgc3RhcnQgKGVuZCkgb2Ygb2xkIG1hdGNoIGlmIGZvcndhcmQgKGJhY2t3YXJk KSwKCSAgICA7OyBzbyBhZnRlciBleGl0aW5nIG1pbmlidWZmZXIgaXNlYXJjaCByZXN1bWVzIGF0 IHRoZSBzdGFydCAoZW5kKQoJICAgIDs7IG9mIHRoaXMgbWF0Y2ggYW5kIGNhbiBmaW5kIGl0IGFn YWluLgoJICAgIChpZiAoYW5kIG9sZC1vdGhlci1lbmQgKGVxIG9sZC1wb2ludCAocG9pbnQpKQoJ CSAgICAgKGVxIGlzZWFyY2gtZm9yd2FyZCBpc2VhcmNoLW5ldy1mb3J3YXJkKSkKCQkoZ290by1j aGFyIG9sZC1vdGhlci1lbmQpKSkKCgkgIDs7IEVtcHR5IGlzZWFyY2gtc3RyaW5nIG1lYW5zIHVz ZSBkZWZhdWx0LgoJICAod2hlbiAoPSAwIChsZW5ndGggaXNlYXJjaC1zdHJpbmcpKQoJICAgIChz ZXRxIGlzZWFyY2gtc3RyaW5nIChvciAoY2FyIChpZiBpc2VhcmNoLXJlZ2V4cAoJCQkJCSAgICAg IHJlZ2V4cC1zZWFyY2gtcmluZwoJCQkJCSAgICBzZWFyY2gtcmluZykpCgkJCQkgICAgICIiKQoK CQkgIGlzZWFyY2gtbWVzc2FnZQoJCSAgKG1hcGNvbmNhdCAnaXNlYXJjaC10ZXh0LWNoYXItZGVz Y3JpcHRpb24KCQkJICAgICBpc2VhcmNoLXN0cmluZyAiIikpCgkgICAgOzsgQWZ0ZXIgdGFraW5n IHRoZSBsYXN0IGVsZW1lbnQsIGFkanVzdCByaW5nIHRvIHByZXZpb3VzIG9uZS4KCSAgICAoaXNl YXJjaC1yaW5nLWFkanVzdDEgbmlsKSkpCgoJOzsgVGhpcyB1c2VkIHRvIHB1c2ggdGhlIHN0YXRl IGFzIG9mIGJlZm9yZSB0aGlzIEMtcywgYnV0IGl0IGFkZHMKCTs7IGFuIGluY29uc2lzdGVudCBz dGF0ZSB3aGVyZSBwYXJ0IG9mIHZhcmlhYmxlcyBhcmUgZnJvbSB0aGUKCTs7IHByZXZpb3VzIHNl YXJjaCAoZS5nLiBgaXNlYXJjaC1zdWNjZXNzJyksIGFuZCBwYXJ0IG9mIHZhcmlhYmxlcwoJOzsg YXJlIGp1c3QgZW50ZXJlZCBmcm9tIHRoZSBtaW5pYnVmZmVyIChlLmcuIGBpc2VhcmNoLXN0cmlu ZycpLgoJOzsgKGlzZWFyY2gtcHVzaC1zdGF0ZSkKCgk7OyBSZWludm9rZSB0aGUgcGVuZGluZyBz ZWFyY2guCgkoaXNlYXJjaC1zZWFyY2gpCiAgICAgICAgOzsgSWYgbm8gY29kZSBoYXMgY2hhbmdl ZCB0aGUgc2VhcmNoIHBhcmFtZXRlcnMsIHRoZW4gcHVzaGluZwogICAgICAgIDs7IGEgbmV3IHN0 YXRlIG9mIElzZWFyY2ggc2hvdWxkIG5vdCBiZSBuZWNlc3NhcnkuCiAgICAgICAgKHVubGVzcyAo YW5kIGlzZWFyY2gtY21kcwogICAgICAgICAgICAgICAgICAgICAoZXF1YWwgKGNhciBpc2VhcmNo LWNtZHMpIChpc2VhcmNoLS1nZXQtc3RhdGUpKSkKICAgICAgICAgIChpc2VhcmNoLXB1c2gtc3Rh dGUpKSAgICAgICAgOyB0aGlzIHB1c2hlcyB0aGUgY29ycmVjdCBzdGF0ZQoJKGlzZWFyY2gtdXBk YXRlKQoJKGlmIGlzZWFyY2gtbm9uaW5jcmVtZW50YWwKCSAgICAocHJvZ24KCSAgICAgIDs7IChz aXQtZm9yIDEpIDs7IG5lZWRlZCBpZiBpc2VhcmNoLWRvbmUgZG9lczogKG1lc3NhZ2UgIiIpCgkg ICAgICAoaXNlYXJjaC1kb25lKQoJICAgICAgOzsgVGhlIHNlYXJjaCBkb25lIG1lc3NhZ2UgaXMg Y29uZnVzaW5nIHdoZW4gdGhlIHN0cmluZwoJICAgICAgOzsgaXMgZW1wdHksIHNvIGVyYXNlIGl0 LgoJICAgICAgKGlmIChlcXVhbCBpc2VhcmNoLXN0cmluZyAiIikKCQkgIChtZXNzYWdlICIiKSkp KSkKCiAgICAocXVpdCAgOyBoYW5kbGUgYWJvcnQtcmVjdXJzaXZlLWVkaXQKICAgICAoc2V0cSBp c2VhcmNoLXN1c3BlbmRlZCBuaWwpCiAgICAgKGlzZWFyY2gtYWJvcnQpICA7OyBvdXRzaWRlIG9m IGxldCB0byByZXN0b3JlIG91dHNpZGUgZ2xvYmFsIHZhbHVlcwogICAgICkpKQoKKGRlZm1hY3Jv IGRlZmluZS1pc2VhcmNoLXlhbmstbW92ZW1lbnQtY29tbWFuZCAoY29tbWFuZCBhcmd1bWVudHMg ZG9jLXN0cmluZwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGludGVyYWN0aXZlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgYmluZGluZ3MgYWN0aW9uKQogICJEZWZpbmUgSXNlYXJjaCBD T01NQU5EIHRvIGFkanVzdCBzZWFyY2ggc3RyaW5nIGJhc2VkIG9uIGN1cnNvciBwb3NpdGlvbi4K VGhlIGNvbW1hbmQgc2hvdWxkIG1vdmUgdGhlIGN1cnNvciwgd2hpY2ggaXMgYXQgb25lIGVuZCBv ZiB0aGUgY3VycmVudApzZWFyY2ggaGl0LCB0byBhIG5ldyBsb2NhdGlvbi4KClRoZSBleGlzdGlu ZyBzZWFyY2ggc3RyaW5nIGlzIGV4cGFuZGVkIG9yIHJlZHVjZWQgdG8gaW5jbHVkZSB0aGUKYnVm ZmVyIHRleHQgZnJvbSB0aGUgc2VhcmNoIGhpdCB0aHJvdWdoIHRoZSBuZXcgY3Vyc29yIHBvc2l0 aW9uLgoKQVJHVU1FTlRTIGlzIGEgbGlzdCBvZiBhcmd1bWVudHMgdG8gdGhlIGNvbW1hbmQuCkRP Qy1TVFJJTkcgaXMgdGhlIGNvbW1hbmQncyBkb2Mgc3RyaW5nLgpJTlRFUkFDVElWRSBpcyBgaW50 ZXJhdGl2ZScgZm9ybS4KQklORElOR1MgaXMgYSBsaXN0IG9mIGBsZXQqJyBiaW5kaW5ncyBhZGRl ZCBhcm91bmQgdGhlIGNvbW1hbmQgY29kZS4KICBMb2NhbCB2YXJpYWJsZSBgaXNlYXJjaC1uZXct cG9zaXRpb24nIGlzIGFsc28gYm91bmQsIGJlZm9yZSB0aGUKICBCSU5ESU5HUyB5b3UgcHJvdmlk ZSAtIHNlZSBBQ1RJT04sIGJlbG93LgpCSU5ESU5HUyBpcyBtYWNyb2V4cGFuZGVkLCBzbyBpdCBj YW4gYWxzbyBiZSBhIG1hY3JvIGNhbGwgdGhhdCBleHBhbmRzCnRvIGEgbGlzdCBvZiBiaW5kaW5n cy4KCkFDVElPTiBpcyB5b3VyIGNvZGUgdGhhdCBtb3ZlcyB0aGUgY3Vyc29yLiAgSXQgc2hvdWxk IHNldCB2YXJpYWJsZQpgaXNlYXJjaC1uZXctcG9zaXRpb24nIHRvIHRoZSBuZXcgY3Vyc29yIHBv c2l0aW9uLiIKICAobGV0ICgoZndkICAgICAobWFrZS1zeW1ib2wgImZ3ZCIpKQogICAgICAgIChi ZWcgICAgIChtYWtlLXN5bWJvbCAiYmVnIikpCiAgICAgICAgKGVuZCAgICAgKG1ha2Utc3ltYm9s ICJlbmQiKSkKICAgICAgICAobWluLWJlICAobWFrZS1zeW1ib2wgIm1pbi1iZSIpKQogICAgICAg IChtYXgtYmUgIChtYWtlLXN5bWJvbCAibWF4LWJlIikpKQogICAgYChkZWZ1biAsY29tbWFuZCAs YXJndW1lbnRzICxkb2Mtc3RyaW5nCiAgICAgICAgICAgICxpbnRlcmFjdGl2ZQogICAgICAgICAg ICAobGV0ICgoLGZ3ZCAgaXNlYXJjaC1mb3J3YXJkKQogICAgICAgICAgICAgICAgICAoLGJlZyAg aXNlYXJjaC1vdGhlci1lbmQpCiAgICAgICAgICAgICAgICAgICgsZW5kICAocG9pbnQpKQogICAg ICAgICAgICAgICAgICBpc2VhcmNoLW5ldy1wb3NpdGlvbikKICAgICAgICAgICAgICAobGV0KiAs YmluZGluZ3MKICAgICAgICAgICAgICAgICxhY3Rpb24KICAgICAgICAgICAgICAgIChsZXQgKCgs bWluLWJlICAobWluICxiZWcgLGVuZCkpCiAgICAgICAgICAgICAgICAgICAgICAoLG1heC1iZSAg KG1heCAsYmVnICxlbmQpKSkKICAgICAgICAgICAgICAgICAgKHNldHEgaXNlYXJjaC1zdHJpbmcg ICAgIChpZiAoPCBpc2VhcmNoLW5ldy1wb3NpdGlvbiAsYmVnKQogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIChidWZmZXItc3Vic3RyaW5nCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChtaW4gaXNlYXJjaC1uZXctcG9z aXRpb24gLG1heC1iZSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgKG1heCBpc2VhcmNoLW5ldy1wb3NpdGlvbiAsbWF4LWJlKSkKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGJ1ZmZlci1zdWJzdHJpbmcKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChtaW4gaXNlYXJjaC1uZXctcG9z aXRpb24gLG1pbi1iZSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIChtYXggaXNlYXJjaC1uZXctcG9zaXRpb24gLG1pbi1iZSkpKQogICAgICAgICAgICAgICAg ICAgICAgICBpc2VhcmNoLW1lc3NhZ2UgICAgKG1hcGNvbmNhdCAnaXNlYXJjaC10ZXh0LWNoYXIt ZGVzY3JpcHRpb24KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgaXNlYXJjaC1zdHJpbmcgIiIpCiAgICAgICAgICAgICAgICAgICAgICAgIGlzZWFy Y2gtYmFycmllciAgICAoaWYgKG9yIChhbmQgLGZ3ZAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICg8IGlzZWFyY2gtbmV3LXBvc2l0aW9uICxi ZWcpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAo YW5kIChub3QgLGZ3ZCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAobm90ICg8IGlzZWFyY2gtbmV3LXBvc2l0aW9uICxiZWcpKSkpCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLGVuZAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc2VhcmNoLW5ldy1wb3NpdGlvbikK ICAgICAgICAgICAgICAgICAgICAgICAgaXNlYXJjaC1vdGhlci1lbmQgIChpZiAoPCBpc2VhcmNo LW5ldy1wb3NpdGlvbiAsYmVnKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIChpZiAsZndkIGlzZWFyY2gtbmV3LXBvc2l0aW9uICxiZWcpCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpZiAobm90ICxmd2QpIGlzZWFyY2gt bmV3LXBvc2l0aW9uICxiZWcpKSkKICAgICAgICAgICAgICAgICAgKGdvdG8tY2hhciBpc2VhcmNo LWJhcnJpZXIpCiAgICAgICAgICAgICAgICAgIChpc2VhcmNoLWhpZ2hsaWdodCBpc2VhcmNoLW90 aGVyLWVuZCBpc2VhcmNoLWJhcnJpZXIpCiAgICAgICAgICAgICAgICAgICh3aGVuIGlzZWFyY2gt bGF6eS1oaWdobGlnaHQgKGlzZWFyY2gtbGF6eS1oaWdobGlnaHQtbmV3LWxvb3ApKSkpKSkpKQoK KGRlZnZhciBtaW5pYnVmZmVyLWhpc3Rvcnktc3ltYm9sKSA7OyBmcm9tIGV4dGVybmFsIHBhY2th Z2UgZ21oaXN0LmVsCgooZGVmdW4gaXNlYXJjaC1lZGl0LXN0cmluZyAoKQogICJFZGl0IHRoZSBz ZWFyY2ggc3RyaW5nIGluIHRoZSBtaW5pYnVmZmVyLgpUaGUgZm9sbG93aW5nIGFkZGl0aW9uYWwg Y29tbWFuZCBrZXlzIGFyZSBhY3RpdmUgd2hpbGUgZWRpdGluZy4KXFw8bWluaWJ1ZmZlci1sb2Nh bC1pc2VhcmNoLW1hcD4KXFxbZXhpdC1taW5pYnVmZmVyXSB0byByZXN1bWUgaW5jcmVtZW50YWwg c2VhcmNoaW5nIHdpdGggdGhlIGVkaXRlZCBzdHJpbmcuClxcW2lzZWFyY2gtZm9yd2FyZC1leGl0 LW1pbmlidWZmZXJdIHRvIHJlc3VtZSBpc2VhcmNoaW5nIGZvcndhcmQuClxcW2lzZWFyY2gtcmV2 ZXJzZS1leGl0LW1pbmlidWZmZXJdIHRvIHJlc3VtZSBpc2VhcmNoaW5nIGJhY2t3YXJkLgpcXFtp c2VhcmNoLWNvbXBsZXRlLWVkaXRdIHRvIGNvbXBsZXRlIHRoZSBzZWFyY2ggc3RyaW5nIHVzaW5n IHRoZSBzZWFyY2ggcmluZy4iCiAgKGludGVyYWN0aXZlKQogICh3aXRoLWlzZWFyY2gtc3VzcGVu ZGVkCiAgIChsZXQqICgobWVzc2FnZS1sb2ctbWF4IG5pbCkKCSAgOzsgRG9uJ3QgYWRkIGEgbmV3 IHNlYXJjaCBzdHJpbmcgdG8gdGhlIHNlYXJjaCByaW5nIGhlcmUKCSAgOzsgaW4gYHJlYWQtZnJv bS1taW5pYnVmZmVyJy4gSXQgc2hvdWxkIGJlIGFkZGVkIG9ubHkKCSAgOzsgYnkgYGlzZWFyY2gt dXBkYXRlLXJpbmcnIGNhbGxlZCBmcm9tIGBpc2VhcmNoLWRvbmUnLgoJICAoaGlzdG9yeS1hZGQt bmV3LWlucHV0IG5pbCkKCSAgOzsgQmluZGluZyBtaW5pYnVmZmVyLWhpc3Rvcnktc3ltYm9sIHRv IG5pbCBpcyBhIHdvcmstYXJvdW5kCgkgIDs7IGZvciBzb21lIGluY29tcGF0aWJpbGl0eSB3aXRo IGdtaGlzdC4KCSAgKG1pbmlidWZmZXItaGlzdG9yeS1zeW1ib2wpCgkgIDs7IFNlYXJjaCBzdHJp bmcgbWlnaHQgaGF2ZSBtZXRhIGluZm9ybWF0aW9uIG9uIHRleHQgcHJvcGVydGllcy4KCSAgKG1p bmlidWZmZXItYWxsb3ctdGV4dC1wcm9wZXJ0aWVzIHQpKQogICAgIChzZXRxIGlzZWFyY2gtbmV3 LXN0cmluZwoJICAgKHJlYWQtZnJvbS1taW5pYnVmZmVyCgkgICAgKGlzZWFyY2gtbWVzc2FnZS1w cmVmaXggbmlsIGlzZWFyY2gtbm9uaW5jcmVtZW50YWwpCgkgICAgKGNvbnMgaXNlYXJjaC1zdHJp bmcgKDErIChvciAoaXNlYXJjaC1mYWlsLXBvcykKCQkJCQkgKGxlbmd0aCBpc2VhcmNoLXN0cmlu ZykpKSkKCSAgICBtaW5pYnVmZmVyLWxvY2FsLWlzZWFyY2gtbWFwIG5pbAoJICAgIChpZiBpc2Vh cmNoLXJlZ2V4cAoJCShjb25zICdyZWdleHAtc2VhcmNoLXJpbmcKCQkgICAgICAoMSsgKG9yIHJl Z2V4cC1zZWFyY2gtcmluZy15YW5rLXBvaW50ZXIgLTEpKSkKCSAgICAgIChjb25zICdzZWFyY2gt cmluZwoJCSAgICAoMSsgKG9yIHNlYXJjaC1yaW5nLXlhbmstcG9pbnRlciAtMSkpKSkKCSAgICBu aWwgdCkKCSAgIGlzZWFyY2gtbmV3LW1lc3NhZ2UKCSAgIChtYXBjb25jYXQgJ2lzZWFyY2gtdGV4 dC1jaGFyLWRlc2NyaXB0aW9uCgkJICAgICAgaXNlYXJjaC1uZXctc3RyaW5nICIiKSkpKSkKCihk ZWZ1biBpc2VhcmNoLW5vbmluY3JlbWVudGFsLWV4aXQtbWluaWJ1ZmZlciAoKQogIChpbnRlcmFj dGl2ZSkKICAoc2V0cSBpc2VhcmNoLW5ldy1ub25pbmNyZW1lbnRhbCB0KQogIChleGl0LW1pbmli dWZmZXIpKQo7OyBJdCBtYWtlcyBubyBzZW5zZSB0byBjaGFuZ2UgdGhlIHZhbHVlIG9mIGBpc2Vh cmNoLW5ldy1ub25pbmNyZW1lbnRhbCcKOzsgZnJvbSBuaWwgdG8gdCBkdXJpbmcgYGlzZWFyY2gt ZWRpdC1zdHJpbmcnLiAgIFRodXMgbWFya2VkIGFzIG9ic29sZXRlLgoobWFrZS1vYnNvbGV0ZSAn aXNlYXJjaC1ub25pbmNyZW1lbnRhbC1leGl0LW1pbmlidWZmZXIgJ2V4aXQtbWluaWJ1ZmZlciAi MjQuNCIpCgooZGVmdW4gaXNlYXJjaC1mb3J3YXJkLWV4aXQtbWluaWJ1ZmZlciAoKQogICJSZXN1 bWUgaXNlYXJjaGluZyBmb3J3YXJkIGZyb20gdGhlIG1pbmlidWZmZXIgdGhhdCBlZGl0cyB0aGUg c2VhcmNoIHN0cmluZy4iCiAgKGludGVyYWN0aXZlKQogIChzZXRxIGlzZWFyY2gtbmV3LWZvcndh cmQgdCBpc2VhcmNoLW5ldy1ub25pbmNyZW1lbnRhbCBuaWwpCiAgKGV4aXQtbWluaWJ1ZmZlcikp CgooZGVmdW4gaXNlYXJjaC1yZXZlcnNlLWV4aXQtbWluaWJ1ZmZlciAoKQogICJSZXN1bWUgaXNl YXJjaGluZyBiYWNrd2FyZCBmcm9tIHRoZSBtaW5pYnVmZmVyIHRoYXQgZWRpdHMgdGhlIHNlYXJj aCBzdHJpbmcuIgogIChpbnRlcmFjdGl2ZSkKICAoc2V0cSBpc2VhcmNoLW5ldy1mb3J3YXJkIG5p bCBpc2VhcmNoLW5ldy1ub25pbmNyZW1lbnRhbCBuaWwpCiAgKGV4aXQtbWluaWJ1ZmZlcikpCgoo ZGVmdW4gaXNlYXJjaC1jYW5jZWwgKCkKICAiVGVybWluYXRlIHRoZSBzZWFyY2ggYW5kIGdvIGJh Y2sgdG8gdGhlIHN0YXJ0aW5nIHBvaW50LiIKICAoaW50ZXJhY3RpdmUpCiAgKGlmIChhbmQgaXNl YXJjaC1wdXNoLXN0YXRlLWZ1bmN0aW9uIGlzZWFyY2gtY21kcykKICAgICAgOzsgRm9yIGRlZmlu ZWQgcHVzaC1zdGF0ZSBmdW5jdGlvbiwgcmVzdG9yZSB0aGUgZmlyc3Qgc3RhdGUuCiAgICAgIDs7 IFRoaXMgY2FsbHMgcG9wLXN0YXRlIGZ1bmN0aW9uIGFuZCByZXN0b3JlcyBvcmlnaW5hbCBwb2lu dC4KICAgICAgKGxldCAoKGlzZWFyY2gtY21kcyAobGFzdCBpc2VhcmNoLWNtZHMpKSkKCShpc2Vh cmNoLS1zZXQtc3RhdGUgKGNhciBpc2VhcmNoLWNtZHMpKSkKICAgIChnb3RvLWNoYXIgaXNlYXJj aC1vcG9pbnQpKQogIChpc2VhcmNoLWRvbmUgdCkgICAgICAgICAgICAgICAgICAgICAgOyBFeGl0 IGlzZWFyY2guLgogIChpc2VhcmNoLWNsZWFuLW92ZXJsYXlzKQogIChzaWduYWwgJ3F1aXQgbmls KSkgICAgICAgICAgICAgICAgICAgOyAuLmFuZCBwYXNzIG9uIHF1aXQgc2lnbmFsLgoKKGRlZnVu IGlzZWFyY2gtYWJvcnQgKCkKICAiQWJvcnQgaW5jcmVtZW50YWwgc2VhcmNoIG1vZGUgaWYgc2Vh cmNoaW5nIGlzIHN1Y2Nlc3NmdWwsIHNpZ25hbGluZyBxdWl0LgpPdGhlcndpc2UsIHJldmVydCB0 byBwcmV2aW91cyBzdWNjZXNzZnVsIHNlYXJjaCBhbmQgY29udGludWUgc2VhcmNoaW5nLgpVc2Ug YGlzZWFyY2gtZXhpdCcgdG8gcXVpdCB3aXRob3V0IHNpZ25hbGluZy4iCiAgKGludGVyYWN0aXZl KQogIDs7IChkaW5nKSAgc2lnbmFsIGluc3RlYWQgYmVsb3csIGlmIHF1aXR0aW5nCiAgKGRpc2Nh cmQtaW5wdXQpCiAgKGlmIChhbmQgaXNlYXJjaC1zdWNjZXNzIChub3QgaXNlYXJjaC1lcnJvcikp CiAgICAgIDs7IElmIHNlYXJjaCBpcyBzdWNjZXNzZnVsIGFuZCBoYXMgbm8gaW5jb21wbGV0ZSBy ZWdleHAsCiAgICAgIDs7IG1vdmUgYmFjayB0byBzdGFydGluZyBwb2ludCBhbmQgcmVhbGx5IGRv IHF1aXQuCiAgICAgIChwcm9nbgogICAgICAgIChzZXRxIGlzZWFyY2gtc3VjY2VzcyBuaWwpCiAg ICAgICAgKGlzZWFyY2gtY2FuY2VsKSkKICAgIDs7IElmIHNlYXJjaCBpcyBmYWlsaW5nLCBvciBo YXMgYW4gaW5jb21wbGV0ZSByZWdleHAsCiAgICA7OyBydWIgb3V0IHVudGlsIGl0IGlzIG9uY2Ug bW9yZSBzdWNjZXNzZnVsLgogICAgKHdoaWxlIChvciAobm90IGlzZWFyY2gtc3VjY2VzcykgaXNl YXJjaC1lcnJvcikKICAgICAgKGlzZWFyY2gtcG9wLXN0YXRlKSkKICAgIChpc2VhcmNoLXVwZGF0 ZSkpKQoKKGRlZnVuIGlzZWFyY2gtcmVwZWF0IChkaXJlY3Rpb24gJm9wdGlvbmFsIGNvdW50KQog IDs7IFV0aWxpdHkgZm9yIGlzZWFyY2gtcmVwZWF0LWZvcndhcmQgYW5kIGlzZWFyY2gtcmVwZWF0 LWJhY2t3YXJkLgogIChpZiAoZXEgaXNlYXJjaC1mb3J3YXJkIChlcSBkaXJlY3Rpb24gJ2Zvcndh cmQpKQogICAgICA7OyBDLXMgaW4gZm9yd2FyZCBvciBDLXIgaW4gcmV2ZXJzZS4KICAgICAgKGlm IChlcXVhbCBpc2VhcmNoLXN0cmluZyAiIikKCSAgOzsgSWYgc2VhcmNoIHN0cmluZyBpcyBlbXB0 eSwgdXNlIGxhc3Qgb25lLgoJICAoaWYgKG51bGwgKGlmIGlzZWFyY2gtcmVnZXhwIHJlZ2V4cC1z ZWFyY2gtcmluZyBzZWFyY2gtcmluZykpCgkgICAgICAoc2V0cSBpc2VhcmNoLWVycm9yICJObyBw cmV2aW91cyBzZWFyY2ggc3RyaW5nIikKCSAgICAoc2V0cSBpc2VhcmNoLXN0cmluZwoJCSAgKGNh ciAoaWYgaXNlYXJjaC1yZWdleHAgcmVnZXhwLXNlYXJjaC1yaW5nIHNlYXJjaC1yaW5nKSkKCQkg IGlzZWFyY2gtbWVzc2FnZQoJCSAgKG1hcGNvbmNhdCAnaXNlYXJjaC10ZXh0LWNoYXItZGVzY3Jp cHRpb24KCQkJICAgICBpc2VhcmNoLXN0cmluZyAiIikKCQkgIGlzZWFyY2gtY2FzZS1mb2xkLXNl YXJjaCBpc2VhcmNoLWxhc3QtY2FzZS1mb2xkLXNlYXJjaCkKCSAgICA7OyBBZnRlciB0YWtpbmcg dGhlIGxhc3QgZWxlbWVudCwgYWRqdXN0IHJpbmcgdG8gcHJldmlvdXMgb25lLgoJICAgIChpc2Vh cmNoLXJpbmctYWRqdXN0MSBuaWwpKQoJOzsgSWYgYWxyZWFkeSBoYXZlIHdoYXQgdG8gc2VhcmNo IGZvciwgcmVwZWF0IGl0LgoJKG9yIGlzZWFyY2gtc3VjY2VzcwoJICAgIChwcm9nbgoJICAgICAg OzsgU2V0IGlzZWFyY2gtd3JhcHBlZCBiZWZvcmUgY2FsbGluZyBpc2VhcmNoLXdyYXAtZnVuY3Rp b24KCSAgICAgIChzZXRxIGlzZWFyY2gtd3JhcHBlZCB0KQoJICAgICAgKGlmIGlzZWFyY2gtd3Jh cC1mdW5jdGlvbgoJCSAgKGZ1bmNhbGwgaXNlYXJjaC13cmFwLWZ1bmN0aW9uKQoJICAgICAgICAo Z290by1jaGFyIChpZiBpc2VhcmNoLWZvcndhcmQgKHBvaW50LW1pbikgKHBvaW50LW1heCkpKSkp KSkKICAgIDs7IEMtcyBpbiByZXZlcnNlIG9yIEMtciBpbiBmb3J3YXJkLCBjaGFuZ2UgZGlyZWN0 aW9uLgogICAgKHNldHEgaXNlYXJjaC1mb3J3YXJkIChub3QgaXNlYXJjaC1mb3J3YXJkKQoJICBp c2VhcmNoLXN1Y2Nlc3MgdCkpCgogIChzZXRxIGlzZWFyY2gtYmFycmllciAocG9pbnQpKSA7IEZv ciBzdWJzZXF1ZW50IFx8IGlmIHJlZ2V4cC4KCiAgKGlmIChlcXVhbCBpc2VhcmNoLXN0cmluZyAi IikKICAgICAgKHNldHEgaXNlYXJjaC1zdWNjZXNzIHQpCiAgICA7OyBGb3IgdGhlIGNhc2Ugd2hl biBjb3VudCA+IDEsIGRvbid0IGtlZXAgaW50ZXJtZWRpYXRlIHN0YXRlcwogICAgOzsgYWRkZWQg dG8gaXNlYXJjaC1jbWRzIGJ5IGlzZWFyY2gtcHVzaC1zdGF0ZSBpbiB0aGlzIGxvb3AuCiAgICAo bGV0ICgoaXNlYXJjaC1jbWRzIGlzZWFyY2gtY21kcykpCiAgICAgICh3aGlsZSAoPD0gMCAoc2V0 cSBjb3VudCAoMS0gKG9yIGNvdW50IDEpKSkpCgkoaWYgKGFuZCBpc2VhcmNoLXN1Y2Nlc3MKCQkg KGVxdWFsIChwb2ludCkgaXNlYXJjaC1vdGhlci1lbmQpCgkJIChub3QgaXNlYXJjaC1qdXN0LXN0 YXJ0ZWQpKQoJICAgIDs7IElmIHJlcGVhdGluZyBhIHNlYXJjaCB0aGF0IGZvdW5kCgkgICAgOzsg YW4gZW1wdHkgc3RyaW5nLCBlbnN1cmUgd2UgYWR2YW5jZS4KCSAgICAoaWYgKGlmIGlzZWFyY2gt Zm9yd2FyZCAoZW9icCkgKGJvYnApKQoJCTs7IElmIHRoZXJlJ3Mgbm93aGVyZSB0byBhZHZhbmNl IHRvLCBmYWlsIChhbmQgd3JhcCBuZXh0IHRpbWUpLgoJCShwcm9nbgoJCSAgKHNldHEgaXNlYXJj aC1zdWNjZXNzIG5pbCkKCQkgIChkaW5nKSkKCSAgICAgIChmb3J3YXJkLWNoYXIgKGlmIGlzZWFy Y2gtZm9yd2FyZCAxIC0xKSkKCSAgICAgIChpc2VhcmNoLXNlYXJjaCkpCgkgIChpc2VhcmNoLXNl YXJjaCkpCgkod2hlbiAoPiBjb3VudCAwKQoJICA7OyBVcGRhdGUgaXNlYXJjaC1jbWRzLCBzbyBp ZiBpc2VhcmNoLXNlYXJjaCBmYWlscyBsYXRlciwKCSAgOzsgaXQgY2FuIHJlc3RvcmUgb2xkIHN1 Y2Nlc3NmdWwgc3RhdGUgZnJvbSBpc2VhcmNoLWNtZHMuCgkgIChpc2VhcmNoLXB1c2gtc3RhdGUp KQoJOzsgU3RvcCBsb29waW5nIG9uIGZhaWx1cmUuCgkod2hlbiAob3IgKG5vdCBpc2VhcmNoLXN1 Y2Nlc3MpIGlzZWFyY2gtZXJyb3IpCgkgIChzZXRxIGNvdW50IDApKSkpKQoKICAoaXNlYXJjaC1w dXNoLXN0YXRlKQogIChpc2VhcmNoLXVwZGF0ZSkpCgooZGVmdW4gaXNlYXJjaC1yZXBlYXQtZm9y d2FyZCAoJm9wdGlvbmFsIGFyZykKICAiUmVwZWF0IGluY3JlbWVudGFsIHNlYXJjaCBmb3J3YXJk cy4KV2l0aCBhIG51bWVyaWMgYXJndW1lbnQsIHJlcGVhdCB0aGUgc2VhcmNoIEFSRyB0aW1lcy4K QSBuZWdhdGl2ZSBhcmd1bWVudCBzZWFyY2hlcyBiYWNrd2FyZHMuClxcPGlzZWFyY2gtbW9kZS1t YXA+ClRoaXMgY29tbWFuZCBmaW5kcyB0aGUgbmV4dCByZWxhdGl2ZSBvY2N1cnJlbmNlIG9mIHRo ZSBjdXJyZW50CnNlYXJjaCBzdHJpbmcuICBUbyBmaW5kIHRoZSBhYnNvbHV0ZSBvY2N1cnJlbmNl IGZyb20gdGhlIGJlZ2lubmluZwpvZiB0aGUgYnVmZmVyLCB0eXBlIFxcW2lzZWFyY2gtYmVnaW5u aW5nLW9mLWJ1ZmZlcl0gd2l0aCBhIG51bWVyaWMgYXJndW1lbnQuIgogIChpbnRlcmFjdGl2ZSAi UCIpCiAgKGlmIGFyZwogICAgICAobGV0ICgoY291bnQgKHByZWZpeC1udW1lcmljLXZhbHVlIGFy ZykpKQogICAgICAgIChjb25kICgoPCBjb3VudCAwKQogICAgICAgICAgICAgICAoaXNlYXJjaC1y ZXBlYXQtYmFja3dhcmQgKGFicyBjb3VudCkpCiAgICAgICAgICAgICAgIDs7IFJldmVyc2UgdGhl IGRpcmVjdGlvbiBiYWNrCiAgICAgICAgICAgICAgIChpc2VhcmNoLXJlcGVhdCAnZm9yd2FyZCkp CiAgICAgICAgICAgICAgKHQKICAgICAgICAgICAgICAgOzsgVGFrZSBpbnRvIGFjY291bnQgb25l IGl0ZXJhdGlvbiB0byByZXZlcnNlIGRpcmVjdGlvbgogICAgICAgICAgICAgICAod2hlbiAobm90 IGlzZWFyY2gtZm9yd2FyZCkgKHNldHEgY291bnQgKDErIGNvdW50KSkpCiAgICAgICAgICAgICAg IChpc2VhcmNoLXJlcGVhdCAnZm9yd2FyZCBjb3VudCkpKSkKICAgIChpc2VhcmNoLXJlcGVhdCAn Zm9yd2FyZCkpKQoKKGRlZnVuIGlzZWFyY2gtcmVwZWF0LWJhY2t3YXJkICgmb3B0aW9uYWwgYXJn KQogICJSZXBlYXQgaW5jcmVtZW50YWwgc2VhcmNoIGJhY2t3YXJkcy4KV2l0aCBhIG51bWVyaWMg YXJndW1lbnQsIHJlcGVhdCB0aGUgc2VhcmNoIEFSRyB0aW1lcy4KQSBuZWdhdGl2ZSBhcmd1bWVu dCBzZWFyY2hlcyBmb3J3YXJkcy4KXFw8aXNlYXJjaC1tb2RlLW1hcD4KVGhpcyBjb21tYW5kIGZp bmRzIHRoZSBuZXh0IHJlbGF0aXZlIG9jY3VycmVuY2Ugb2YgdGhlIGN1cnJlbnQKc2VhcmNoIHN0 cmluZy4gIFRvIGZpbmQgdGhlIGFic29sdXRlIG9jY3VycmVuY2UgZnJvbSB0aGUgZW5kCm9mIHRo ZSBidWZmZXIsIHR5cGUgXFxbaXNlYXJjaC1lbmQtb2YtYnVmZmVyXSB3aXRoIGEgbnVtZXJpYyBh cmd1bWVudC4iCiAgKGludGVyYWN0aXZlICJQIikKICAoaWYgYXJnCiAgICAgIChsZXQgKChjb3Vu dCAocHJlZml4LW51bWVyaWMtdmFsdWUgYXJnKSkpCiAgICAgICAgKGNvbmQgKCg8IGNvdW50IDAp CiAgICAgICAgICAgICAgIChpc2VhcmNoLXJlcGVhdC1mb3J3YXJkIChhYnMgY291bnQpKQogICAg ICAgICAgICAgICA7OyBSZXZlcnNlIHRoZSBkaXJlY3Rpb24gYmFjawogICAgICAgICAgICAgICAo aXNlYXJjaC1yZXBlYXQgJ2JhY2t3YXJkKSkKICAgICAgICAgICAgICAodAogICAgICAgICAgICAg ICA7OyBUYWtlIGludG8gYWNjb3VudCBvbmUgaXRlcmF0aW9uIHRvIHJldmVyc2UgZGlyZWN0aW9u CiAgICAgICAgICAgICAgICh3aGVuIGlzZWFyY2gtZm9yd2FyZCAoc2V0cSBjb3VudCAoMSsgY291 bnQpKSkKICAgICAgICAgICAgICAgKGlzZWFyY2gtcmVwZWF0ICdiYWNrd2FyZCBjb3VudCkpKSkK ICAgIChpc2VhcmNoLXJlcGVhdCAnYmFja3dhcmQpKSkKCihkZWZ1biBpc2VhcmNoLWJlZ2lubmlu Zy1vZi1idWZmZXIgKCZvcHRpb25hbCBhcmcpCiAgIkdvIHRvIHRoZSBmaXJzdCBvY2N1cnJlbmNl IG9mIHRoZSBjdXJyZW50IHNlYXJjaCBzdHJpbmcuCk1vdmUgcG9pbnQgdG8gdGhlIGJlZ2lubmlu ZyBvZiB0aGUgYnVmZmVyIGFuZCBzZWFyY2ggZm9yd2FyZHMgZnJvbSB0aGUgdG9wLgpcXDxpc2Vh cmNoLW1vZGUtbWFwPgpXaXRoIGEgbnVtZXJpYyBhcmd1bWVudCwgZ28gdG8gdGhlIEFSR3RoIGFi c29sdXRlIG9jY3VycmVuY2UgY291bnRpbmcgZnJvbQp0aGUgYmVnaW5uaW5nIG9mIHRoZSBidWZm ZXIuICBUbyBmaW5kIHRoZSBuZXh0IHJlbGF0aXZlIG9jY3VycmVuY2UgZm9yd2FyZHMsCnR5cGUg XFxbaXNlYXJjaC1yZXBlYXQtZm9yd2FyZF0gd2l0aCBhIG51bWVyaWMgYXJndW1lbnQuIgogIChp bnRlcmFjdGl2ZSAicCIpCiAgKGlmIChhbmQgYXJnICg8IGFyZyAwKSkKICAgICAgKGlzZWFyY2gt ZW5kLW9mLWJ1ZmZlciAoYWJzIGFyZykpCiAgICA7OyBGb3IgdGhlIGNhc2Ugd2hlbiB0aGUgbWF0 Y2ggaXMgYXQgYm9icCwKICAgIDs7IGRvbid0IGZvcndhcmQgY2hhciBpbiBpc2VhcmNoLXJlcGVh dAogICAgKHNldHEgaXNlYXJjaC1qdXN0LXN0YXJ0ZWQgdCkKICAgIChnb3RvLWNoYXIgKHBvaW50 LW1pbikpCiAgICAoaXNlYXJjaC1yZXBlYXQgJ2ZvcndhcmQgYXJnKSkpCgooZGVmdW4gaXNlYXJj aC1lbmQtb2YtYnVmZmVyICgmb3B0aW9uYWwgYXJnKQogICJHbyB0byB0aGUgbGFzdCBvY2N1cnJl bmNlIG9mIHRoZSBjdXJyZW50IHNlYXJjaCBzdHJpbmcuCk1vdmUgcG9pbnQgdG8gdGhlIGVuZCBv ZiB0aGUgYnVmZmVyIGFuZCBzZWFyY2ggYmFja3dhcmRzIGZyb20gdGhlIGJvdHRvbS4KXFw8aXNl YXJjaC1tb2RlLW1hcD4KV2l0aCBhIG51bWVyaWMgYXJndW1lbnQsIGdvIHRvIHRoZSBBUkd0aCBh YnNvbHV0ZSBvY2N1cnJlbmNlIGNvdW50aW5nIGZyb20KdGhlIGVuZCBvZiB0aGUgYnVmZmVyLiAg VG8gZmluZCB0aGUgbmV4dCByZWxhdGl2ZSBvY2N1cnJlbmNlIGJhY2t3YXJkcywKdHlwZSBcXFtp c2VhcmNoLXJlcGVhdC1iYWNrd2FyZF0gd2l0aCBhIG51bWVyaWMgYXJndW1lbnQuIgogIChpbnRl cmFjdGl2ZSAicCIpCiAgKGlmIChhbmQgYXJnICg8IGFyZyAwKSkKICAgICAgKGlzZWFyY2gtYmVn aW5uaW5nLW9mLWJ1ZmZlciAoYWJzIGFyZykpCiAgICAoc2V0cSBpc2VhcmNoLWp1c3Qtc3RhcnRl ZCB0KQogICAgKGdvdG8tY2hhciAocG9pbnQtbWF4KSkKICAgIChpc2VhcmNoLXJlcGVhdCAnYmFj a3dhcmQgYXJnKSkpCgoMCjs7OyBUb2dnbGVzIGZvciBgaXNlYXJjaC1yZWdleHAtZnVuY3Rpb24n IGFuZCBgc2VhcmNoLWRlZmF1bHQtbW9kZScuCihkZWZtYWNybyBpc2VhcmNoLWRlZmluZS1tb2Rl LXRvZ2dsZSAobW9kZSBrZXkgZnVuY3Rpb24gJm9wdGlvbmFsIGRvY3N0cmluZyAmcmVzdCBib2R5 KQogICJEZWZpbmUgYSBjb21tYW5kIGNhbGxlZCBgaXNlYXJjaC10b2dnbGUtTU9ERScgYW5kIGJp bmQgaXQgdG8gYE0tcyBLRVknLgpUaGUgZmlyc3QgbGluZSBvZiB0aGUgY29tbWFuZCdzIGRvY3N0 cmluZyBpcyBhdXRvLWdlbmVyYXRlZCwgdGhlCnJlbWFpbmRlciBtYXkgYmUgcHJvdmlkZWQgaW4g RE9DU1RSSU5HLgpJZiBGVU5DVElPTiBpcyBhIHN5bWJvbCwgdGhpcyBjb21tYW5kIGZpcnN0IHRv Z2dsZXMgdGhlIHZhbHVlIG9mCmBpc2VhcmNoLXJlZ2V4cC1mdW5jdGlvbicgYmV0d2VlbiBuaWwg YW5kIEZVTkNUSU9OLiAgQWxzbyBzZXQgdGhlCmBpc2VhcmNoLW1lc3NhZ2UtcHJlZml4JyBwcm9w ZXJ0eSBvZiBGVU5DVElPTi4KVGhlIGNvbW1hbmQgdGhlbiBleGVjdXRlcyBCT0RZIGFuZCB1cGRh dGVzIHRoZSBpc2VhcmNoIHByb21wdC4iCiAgKGRlY2xhcmUgKGluZGVudCBkZWZ1bikpCiAgKGxl dCAoKGNvbW1hbmQtbmFtZSAoaW50ZXJuIChmb3JtYXQgImlzZWFyY2gtdG9nZ2xlLSVzIiBtb2Rl KSkpCiAgICAgICAgKGtleSAoY29uY2F0ICJcTS1zIiBrZXkpKSkKICAgIGAocHJvZ24KICAgICAg IChkZWZ1biAsY29tbWFuZC1uYW1lICgpCiAgICAgICAgICwoZm9ybWF0ICJUb2dnbGUgJXMgc2Vh cmNoaW5nIG9uIG9yIG9mZi4lcyIgbW9kZQogICAgICAgICAgICAgICAgICAoaWYgZG9jc3RyaW5n IChjb25jYXQgIlxuIiBkb2NzdHJpbmcpICIiKSkKICAgICAgICAgKGludGVyYWN0aXZlKQogICAg ICAgICAodW5sZXNzIGlzZWFyY2gtbW9kZSAoaXNlYXJjaC1tb2RlIHQpKQogICAgICAgICAsQCh3 aGVuIGZ1bmN0aW9uCiAgICAgICAgICAgICBgKChzZXRxIGlzZWFyY2gtcmVnZXhwLWZ1bmN0aW9u CiAgICAgICAgICAgICAgICAgICAgICh1bmxlc3MgKGVxIGlzZWFyY2gtcmVnZXhwLWZ1bmN0aW9u ICMnLGZ1bmN0aW9uKQogICAgICAgICAgICAgICAgICAgICAgICMnLGZ1bmN0aW9uKSkKICAgICAg ICAgICAgICAgKHNldHEgaXNlYXJjaC1yZWdleHAgbmlsKSkpCiAgICAgICAgICxAYm9keQogICAg ICAgICAoc2V0cSBpc2VhcmNoLXN1Y2Nlc3MgdCBpc2VhcmNoLWFkanVzdGVkIHQpCiAgICAgICAg IChpc2VhcmNoLXVwZGF0ZSkpCiAgICAgICAoZGVmaW5lLWtleSBpc2VhcmNoLW1vZGUtbWFwICxr ZXkgIycsY29tbWFuZC1uYW1lKQogICAgICAgLEAod2hlbiAoYW5kIGZ1bmN0aW9uIChzeW1ib2xw IGZ1bmN0aW9uKSkKICAgICAgICAgICBgKChwdXQgJyxmdW5jdGlvbiAnaXNlYXJjaC1tZXNzYWdl LXByZWZpeCAsKGZvcm1hdCAiJXMgIiBtb2RlKSkKICAgICAgICAgICAgIChwdXQgJyxmdW5jdGlv biA6YWR2ZXJ0aXNlZC1iaW5kaW5nICxrZXkpCiAgICAgICAgICAgICAoY2wtY2FsbGYgKGxhbWJk YSAodHlwZXMpIChjb25zICdjaG9pY2UKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIChjb25zICcoY29uc3QgOnRhZyAsKGNhcGl0YWxpemUgKGZvcm1hdCAiJXMgc2VhcmNo IiBtb2RlKSkgLGZ1bmN0aW9uKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgKGNkciB0eXBlcykpKSkKICAgICAgICAgICAgICAgICAoZ2V0ICdzZWFyY2gtZGVm YXVsdC1tb2RlICdjdXN0b20tdHlwZSkpKSkpKSkKCihpc2VhcmNoLWRlZmluZS1tb2RlLXRvZ2ds ZSB3b3JkICJ3IiB3b3JkLXNlYXJjaC1yZWdleHAgIlwKVHVybmluZyBvbiB3b3JkIHNlYXJjaCB0 dXJucyBvZmYgcmVnZXhwIG1vZGUuIikKKGlzZWFyY2gtZGVmaW5lLW1vZGUtdG9nZ2xlIHN5bWJv bCAiXyIgaXNlYXJjaC1zeW1ib2wtcmVnZXhwICJcClR1cm5pbmcgb24gc3ltYm9sIHNlYXJjaCB0 dXJucyBvZmYgcmVnZXhwIG1vZGUuIikKKGlzZWFyY2gtZGVmaW5lLW1vZGUtdG9nZ2xlIGNoYXIt Zm9sZCAiJyIgY2hhci1mb2xkLXRvLXJlZ2V4cCAiXApUdXJuaW5nIG9uIGNoYXJhY3Rlci1mb2xk aW5nIHR1cm5zIG9mZiByZWdleHAgbW9kZS4iKQoKKGlzZWFyY2gtZGVmaW5lLW1vZGUtdG9nZ2xl IHJlZ2V4cCAiciIgbmlsIG5pbAogIChzZXRxIGlzZWFyY2gtcmVnZXhwIChub3QgaXNlYXJjaC1y ZWdleHApKQogIChpZiBpc2VhcmNoLXJlZ2V4cCAoc2V0cSBpc2VhcmNoLXJlZ2V4cC1mdW5jdGlv biBuaWwpKSkKCihkZWZ2YXIgaXNlYXJjaC1tZXNzYWdlLXByb3BlcnRpZXMgbWluaWJ1ZmZlci1w cm9tcHQtcHJvcGVydGllcwogICJUZXh0IHByb3BlcnRpZXMgdGhhdCBhcmUgYWRkZWQgdG8gdGhl IGlzZWFyY2ggcHJvbXB0LiIpCgooZGVmdW4gaXNlYXJjaC0tbW9tZW50YXJ5LW1lc3NhZ2UgKHN0 cmluZykKICAiUHJpbnQgU1RSSU5HIGF0IHRoZSBlbmQgb2YgdGhlIGlzZWFyY2ggcHJvbXB0IGZv ciAxIHNlY29uZCIKICAobGV0ICgobWVzc2FnZS1sb2ctbWF4IG5pbCkpCiAgICAobWVzc2FnZSAi JXMlcyVzIgogICAgICAgICAgICAgKGlzZWFyY2gtbWVzc2FnZS1wcmVmaXggbmlsIGlzZWFyY2gt bm9uaW5jcmVtZW50YWwpCiAgICAgICAgICAgICBpc2VhcmNoLW1lc3NhZ2UKICAgICAgICAgICAg IChhcHBseSAjJ3Byb3BlcnRpemUgKGZvcm1hdCAiIFslc10iIHN0cmluZykKICAgICAgICAgICAg ICAgICAgICBpc2VhcmNoLW1lc3NhZ2UtcHJvcGVydGllcykpKQogIChzaXQtZm9yIDEpKQoKKGlz ZWFyY2gtZGVmaW5lLW1vZGUtdG9nZ2xlIGxheC13aGl0ZXNwYWNlICIgIiBuaWwKICAiSW4gb3Jk aW5hcnkgc2VhcmNoLCB0b2dnbGVzIHRoZSB2YWx1ZSBvZiB0aGUgdmFyaWFibGUKYGlzZWFyY2gt bGF4LXdoaXRlc3BhY2UnLiAgSW4gcmVnZXhwIHNlYXJjaCwgdG9nZ2xlcyB0aGUKdmFsdWUgb2Yg dGhlIHZhcmlhYmxlIGBpc2VhcmNoLXJlZ2V4cC1sYXgtd2hpdGVzcGFjZScuIgogIChpc2VhcmNo LS1tb21lbnRhcnktbWVzc2FnZQogICAoaWYgKGlmIGlzZWFyY2gtcmVnZXhwCiAgICAgICAgICAg KHNldHEgaXNlYXJjaC1yZWdleHAtbGF4LXdoaXRlc3BhY2UgKG5vdCBpc2VhcmNoLXJlZ2V4cC1s YXgtd2hpdGVzcGFjZSkpCiAgICAgICAgIChzZXRxIGlzZWFyY2gtbGF4LXdoaXRlc3BhY2UgKG5v dCBpc2VhcmNoLWxheC13aGl0ZXNwYWNlKSkpCiAgICAgICAibWF0Y2ggc3BhY2VzIGxvb3NlbHki CiAgICAgIm1hdGNoIHNwYWNlcyBsaXRlcmFsbHkiKSkpCgooaXNlYXJjaC1kZWZpbmUtbW9kZS10 b2dnbGUgY2FzZS1mb2xkICJjIiBuaWwKICAiVG9nZ2xlcyB0aGUgdmFsdWUgb2YgdGhlIHZhcmlh YmxlIGBpc2VhcmNoLWNhc2UtZm9sZC1zZWFyY2gnLiIKICAoaXNlYXJjaC0tbW9tZW50YXJ5LW1l c3NhZ2UKICAgKGlmIChzZXRxIGlzZWFyY2gtY2FzZS1mb2xkLXNlYXJjaAogICAgICAgICAgICAg KGlmIGlzZWFyY2gtY2FzZS1mb2xkLXNlYXJjaCBuaWwgJ3llcykpCiAgICAgICAiY2FzZSBpbnNl bnNpdGl2ZSIKICAgICAiY2FzZSBzZW5zaXRpdmUiKSkpCgooaXNlYXJjaC1kZWZpbmUtbW9kZS10 b2dnbGUgaW52aXNpYmxlICJpIiBuaWwKICAiVGhpcyBkZXRlcm1pbmVzIHdoZXRoZXIgdG8gc2Vh cmNoIGluc2lkZSBpbnZpc2libGUgdGV4dCBvciBub3QuClRvZ2dsZXMgdGhlIHZhcmlhYmxlIGBp c2VhcmNoLWludmlzaWJsZScgYmV0d2VlbiB2YWx1ZXMKbmlsIGFuZCBhIG5vbi1uaWwgdmFsdWUg b2YgdGhlIG9wdGlvbiBgc2VhcmNoLWludmlzaWJsZScKXChvciBgb3BlbicgaWYgYHNlYXJjaC1p bnZpc2libGUnIGlzIG5pbCkuIgogICJtYXRjaCAlc3Zpc2libGUgdGV4dCIKICAoaXNlYXJjaC0t bW9tZW50YXJ5LW1lc3NhZ2UKICAgKGlmIChzZXRxIGlzZWFyY2gtaW52aXNpYmxlCiAgICAgICAg ICAgICAoaWYgaXNlYXJjaC1pbnZpc2libGUKICAgICAgICAgICAgICAgICBuaWwgKG9yIHNlYXJj aC1pbnZpc2libGUgJ29wZW4pKSkKICAgICAgICJtYXRjaCBpbnZpc2libGUgdGV4dCIKICAgICAi bWF0Y2ggdmlzaWJsZSB0ZXh0IikpKQoKDAo7OyBXb3JkIHNlYXJjaAoKKGRlZnVuIHdvcmQtc2Vh cmNoLXJlZ2V4cCAoc3RyaW5nICZvcHRpb25hbCBsYXgpCiAgIlJldHVybiBhIHJlZ2V4cCB3aGlj aCBtYXRjaGVzIHdvcmRzLCBpZ25vcmluZyBwdW5jdHVhdGlvbi4KR2l2ZW4gU1RSSU5HLCBhIHN0 cmluZyBvZiB3b3JkcyBzZXBhcmF0ZWQgYnkgd29yZCBkZWxpbWl0ZXJzLApjb21wdXRlIGEgcmVn ZXhwIHRoYXQgbWF0Y2hlcyB0aG9zZSBleGFjdCB3b3JkcyBzZXBhcmF0ZWQgYnkKYXJiaXRyYXJ5 IHB1bmN0dWF0aW9uLiAgSWYgdGhlIHN0cmluZyBiZWdpbnMgb3IgZW5kcyBpbiB3aGl0ZXNwYWNl LAp0aGUgYmVnaW5uaW5nIG9yIHRoZSBlbmQgb2YgdGhlIHN0cmluZyBtYXRjaGVzIGFyYml0cmFy eSB3aGl0ZXNwYWNlLgpPdGhlcndpc2UgaWYgTEFYIGlzIG5vbi1uaWwsIHRoZSBiZWdpbm5pbmcg b3IgdGhlIGVuZCBvZiB0aGUgc3RyaW5nCm5lZWQgbm90IG1hdGNoIGEgd29yZCBib3VuZGFyeS4K ClVzZWQgaW4gYHdvcmQtc2VhcmNoLWZvcndhcmQnLCBgd29yZC1zZWFyY2gtYmFja3dhcmQnLApg d29yZC1zZWFyY2gtZm9yd2FyZC1sYXgnLCBgd29yZC1zZWFyY2gtYmFja3dhcmQtbGF4Jy4iCiAg KGNvbmQKICAgKChlcXVhbCBzdHJpbmcgIiIpICIiKQogICAoKHN0cmluZy1tYXRjaC1wICJcXGBc XFcrXFwnIiBzdHJpbmcpICJcXFcrIikKICAgKHQgKGNvbmNhdAogICAgICAgKGlmIChzdHJpbmct bWF0Y2gtcCAiXFxgXFxXIiBzdHJpbmcpICJcXFcrIgoJICJcXDwiKQogICAgICAgKG1hcGNvbmNh dCAncmVnZXhwLXF1b3RlIChzcGxpdC1zdHJpbmcgc3RyaW5nICJcXFcrIiB0KSAiXFxXKyIpCiAg ICAgICAoaWYgKHN0cmluZy1tYXRjaC1wICJcXFdcXCciIHN0cmluZykgIlxcVysiCgkgKHVubGVz cyBsYXggIlxcPiIpKSkpKSkKCihkZWZ1biB3b3JkLXNlYXJjaC1iYWNrd2FyZCAoc3RyaW5nICZv cHRpb25hbCBib3VuZCBub2Vycm9yIGNvdW50KQogICJTZWFyY2ggYmFja3dhcmQgZnJvbSBwb2lu dCBmb3IgU1RSSU5HLCBpZ25vcmluZyBkaWZmZXJlbmNlcyBpbiBwdW5jdHVhdGlvbi4KU2V0IHBv aW50IHRvIHRoZSBiZWdpbm5pbmcgb2YgdGhlIG9jY3VycmVuY2UgZm91bmQsIGFuZCByZXR1cm4g cG9pbnQuCkFuIG9wdGlvbmFsIHNlY29uZCBhcmd1bWVudCBib3VuZHMgdGhlIHNlYXJjaDsgaXQg aXMgYSBidWZmZXIgcG9zaXRpb24uCiAgVGhlIG1hdGNoIGZvdW5kIG11c3Qgbm90IGJlZ2luIGJl Zm9yZSB0aGF0IHBvc2l0aW9uLiAgQSB2YWx1ZSBvZiBuaWwKICBtZWFucyBzZWFyY2ggdG8gdGhl IGJlZ2lubmluZyBvZiB0aGUgYWNjZXNzaWJsZSBwb3J0aW9uIG9mIHRoZSBidWZmZXIuCk9wdGlv bmFsIHRoaXJkIGFyZ3VtZW50LCBpZiB0LCBtZWFucyBpZiBmYWlsIGp1c3QgcmV0dXJuIG5pbCAo bm8gZXJyb3IpLgogIElmIG5vdCBuaWwgYW5kIG5vdCB0LCBwb3NpdGlvbiBhdCBsaW1pdCBvZiBz ZWFyY2ggYW5kIHJldHVybiBuaWwuCk9wdGlvbmFsIGZvdXJ0aCBhcmd1bWVudCBDT1VOVCwgaWYg YSBwb3NpdGl2ZSBudW1iZXIsIG1lYW5zIHRvIHNlYXJjaAogIGZvciBDT1VOVCBzdWNjZXNzaXZl IG9jY3VycmVuY2VzLiAgSWYgQ09VTlQgaXMgbmVnYXRpdmUsIHNlYXJjaAogIGZvcndhcmQsIGlu c3RlYWQgb2YgYmFja3dhcmQsIGZvciAtQ09VTlQgb2NjdXJyZW5jZXMuICBBIHZhbHVlIG9mCiAg bmlsIG1lYW5zIHRoZSBzYW1lIGFzIDEuCldpdGggQ09VTlQgcG9zaXRpdmUsIHRoZSBtYXRjaCBm b3VuZCBpcyB0aGUgQ09VTlR0aCB0byBsYXN0IG9uZSAob3IKICBsYXN0LCBpZiBDT1VOVCBpcyAx IG9yIG5pbCkgaW4gdGhlIGJ1ZmZlciBsb2NhdGVkIGVudGlyZWx5IGJlZm9yZQogIHRoZSBvcmln aW4gb2YgdGhlIHNlYXJjaDsgY29ycmVzcG9uZGluZ2x5IHdpdGggQ09VTlQgbmVnYXRpdmUuCgpS ZWxpZXMgb24gdGhlIGZ1bmN0aW9uIGB3b3JkLXNlYXJjaC1yZWdleHAnIHRvIGNvbnZlcnQgYSBz ZXF1ZW5jZQpvZiB3b3JkcyBpbiBTVFJJTkcgdG8gYSByZWdleHAgdXNlZCB0byBzZWFyY2ggd29y ZHMgd2l0aG91dCByZWdhcmQKdG8gcHVuY3R1YXRpb24uClRoaXMgY29tbWFuZCBkb2VzIG5vdCBz dXBwb3J0IGNoYXJhY3RlciBmb2xkaW5nLCBhbmQgbGF4IHNwYWNlIG1hdGNoaW5nCmhhcyBubyBl ZmZlY3Qgb24gaXQuIgogIChpbnRlcmFjdGl2ZSAic1dvcmQgc2VhcmNoIGJhY2t3YXJkOiAiKQog IChyZS1zZWFyY2gtYmFja3dhcmQgKHdvcmQtc2VhcmNoLXJlZ2V4cCBzdHJpbmcgbmlsKSBib3Vu ZCBub2Vycm9yIGNvdW50KSkKCihkZWZ1biB3b3JkLXNlYXJjaC1mb3J3YXJkIChzdHJpbmcgJm9w dGlvbmFsIGJvdW5kIG5vZXJyb3IgY291bnQpCiAgIlNlYXJjaCBmb3J3YXJkIGZyb20gcG9pbnQg Zm9yIFNUUklORywgaWdub3JpbmcgZGlmZmVyZW5jZXMgaW4gcHVuY3R1YXRpb24uClNldCBwb2lu dCB0byB0aGUgZW5kIG9mIHRoZSBvY2N1cnJlbmNlIGZvdW5kLCBhbmQgcmV0dXJuIHBvaW50LgpB biBvcHRpb25hbCBzZWNvbmQgYXJndW1lbnQgYm91bmRzIHRoZSBzZWFyY2g7IGl0IGlzIGEgYnVm ZmVyIHBvc2l0aW9uLgogIFRoZSBtYXRjaCBmb3VuZCBtdXN0IG5vdCBlbmQgYWZ0ZXIgdGhhdCBw b3NpdGlvbi4gIEEgdmFsdWUgb2YgbmlsCiAgbWVhbnMgc2VhcmNoIHRvIHRoZSBlbmQgb2YgdGhl IGFjY2Vzc2libGUgcG9ydGlvbiBvZiB0aGUgYnVmZmVyLgpPcHRpb25hbCB0aGlyZCBhcmd1bWVu dCwgaWYgdCwgbWVhbnMgaWYgZmFpbCBqdXN0IHJldHVybiBuaWwgKG5vIGVycm9yKS4KICBJZiBu b3QgbmlsIGFuZCBub3QgdCwgbW92ZSB0byBsaW1pdCBvZiBzZWFyY2ggYW5kIHJldHVybiBuaWwu Ck9wdGlvbmFsIGZvdXJ0aCBhcmd1bWVudCBDT1VOVCwgaWYgYSBwb3NpdGl2ZSBudW1iZXIsIG1l YW5zIHRvIHNlYXJjaAogIGZvciBDT1VOVCBzdWNjZXNzaXZlIG9jY3VycmVuY2VzLiAgSWYgQ09V TlQgaXMgbmVnYXRpdmUsIHNlYXJjaAogIGJhY2t3YXJkLCBpbnN0ZWFkIG9mIGZvcndhcmQsIGZv ciAtQ09VTlQgb2NjdXJyZW5jZXMuICBBIHZhbHVlIG9mCiAgbmlsIG1lYW5zIHRoZSBzYW1lIGFz IDEuCldpdGggQ09VTlQgcG9zaXRpdmUsIHRoZSBtYXRjaCBmb3VuZCBpcyB0aGUgQ09VTlR0aCBv bmUgKG9yIGZpcnN0LAogIGlmIENPVU5UIGlzIDEgb3IgbmlsKSBpbiB0aGUgYnVmZmVyIGxvY2F0 ZWQgZW50aXJlbHkgYWZ0ZXIgdGhlCiAgb3JpZ2luIG9mIHRoZSBzZWFyY2g7IGNvcnJlc3BvbmRp bmdseSB3aXRoIENPVU5UIG5lZ2F0aXZlLgoKUmVsaWVzIG9uIHRoZSBmdW5jdGlvbiBgd29yZC1z ZWFyY2gtcmVnZXhwJyB0byBjb252ZXJ0IGEgc2VxdWVuY2UKb2Ygd29yZHMgaW4gU1RSSU5HIHRv IGEgcmVnZXhwIHVzZWQgdG8gc2VhcmNoIHdvcmRzIHdpdGhvdXQgcmVnYXJkCnRvIHB1bmN0dWF0 aW9uLgpUaGlzIGNvbW1hbmQgZG9lcyBub3Qgc3VwcG9ydCBjaGFyYWN0ZXIgZm9sZGluZywgYW5k IGxheCBzcGFjZSBtYXRjaGluZwpoYXMgbm8gZWZmZWN0IG9uIGl0LiIKICAoaW50ZXJhY3RpdmUg InNXb3JkIHNlYXJjaDogIikKICAocmUtc2VhcmNoLWZvcndhcmQgKHdvcmQtc2VhcmNoLXJlZ2V4 cCBzdHJpbmcgbmlsKSBib3VuZCBub2Vycm9yIGNvdW50KSkKCihkZWZ1biB3b3JkLXNlYXJjaC1i YWNrd2FyZC1sYXggKHN0cmluZyAmb3B0aW9uYWwgYm91bmQgbm9lcnJvciBjb3VudCkKICAiU2Vh cmNoIGJhY2t3YXJkIGZyb20gcG9pbnQgZm9yIFNUUklORywgaWdub3JpbmcgZGlmZmVyZW5jZXMg aW4gcHVuY3R1YXRpb24uClNldCBwb2ludCB0byB0aGUgYmVnaW5uaW5nIG9mIHRoZSBvY2N1cnJl bmNlIGZvdW5kLCBhbmQgcmV0dXJuIHBvaW50LgoKVW5saWtlIGB3b3JkLXNlYXJjaC1iYWNrd2Fy ZCcsIHRoZSBlbmQgb2YgU1RSSU5HIG5lZWQgbm90IG1hdGNoIGEgd29yZApib3VuZGFyeSwgdW5s ZXNzIFNUUklORyBlbmRzIGluIHdoaXRlc3BhY2UuCgpBbiBvcHRpb25hbCBzZWNvbmQgYXJndW1l bnQgYm91bmRzIHRoZSBzZWFyY2g7IGl0IGlzIGEgYnVmZmVyIHBvc2l0aW9uLgogIFRoZSBtYXRj aCBmb3VuZCBtdXN0IG5vdCBiZWdpbiBiZWZvcmUgdGhhdCBwb3NpdGlvbi4gIEEgdmFsdWUgb2Yg bmlsCiAgbWVhbnMgc2VhcmNoIHRvIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGFjY2Vzc2libGUgcG9y dGlvbiBvZiB0aGUgYnVmZmVyLgpPcHRpb25hbCB0aGlyZCBhcmd1bWVudCwgaWYgdCwgbWVhbnMg aWYgZmFpbCBqdXN0IHJldHVybiBuaWwgKG5vIGVycm9yKS4KICBJZiBub3QgbmlsIGFuZCBub3Qg dCwgcG9zaXRpb24gYXQgbGltaXQgb2Ygc2VhcmNoIGFuZCByZXR1cm4gbmlsLgpPcHRpb25hbCBm b3VydGggYXJndW1lbnQgQ09VTlQsIGlmIGEgcG9zaXRpdmUgbnVtYmVyLCBtZWFucyB0byBzZWFy Y2gKICBmb3IgQ09VTlQgc3VjY2Vzc2l2ZSBvY2N1cnJlbmNlcy4gIElmIENPVU5UIGlzIG5lZ2F0 aXZlLCBzZWFyY2gKICBmb3J3YXJkLCBpbnN0ZWFkIG9mIGJhY2t3YXJkLCBmb3IgLUNPVU5UIG9j Y3VycmVuY2VzLiAgQSB2YWx1ZSBvZgogIG5pbCBtZWFucyB0aGUgc2FtZSBhcyAxLgpXaXRoIENP VU5UIHBvc2l0aXZlLCB0aGUgbWF0Y2ggZm91bmQgaXMgdGhlIENPVU5UdGggdG8gbGFzdCBvbmUg KG9yCiAgbGFzdCwgaWYgQ09VTlQgaXMgMSBvciBuaWwpIGluIHRoZSBidWZmZXIgbG9jYXRlZCBl bnRpcmVseSBiZWZvcmUKICB0aGUgb3JpZ2luIG9mIHRoZSBzZWFyY2g7IGNvcnJlc3BvbmRpbmds eSB3aXRoIENPVU5UIG5lZ2F0aXZlLgoKUmVsaWVzIG9uIHRoZSBmdW5jdGlvbiBgd29yZC1zZWFy Y2gtcmVnZXhwJyB0byBjb252ZXJ0IGEgc2VxdWVuY2UKb2Ygd29yZHMgaW4gU1RSSU5HIHRvIGEg cmVnZXhwIHVzZWQgdG8gc2VhcmNoIHdvcmRzIHdpdGhvdXQgcmVnYXJkCnRvIHB1bmN0dWF0aW9u LgpUaGlzIGNvbW1hbmQgZG9lcyBub3Qgc3VwcG9ydCBjaGFyYWN0ZXIgZm9sZGluZywgYW5kIGxh eCBzcGFjZSBtYXRjaGluZwpoYXMgbm8gZWZmZWN0IG9uIGl0LiIKICAoaW50ZXJhY3RpdmUgInNX b3JkIHNlYXJjaCBiYWNrd2FyZDogIikKICAocmUtc2VhcmNoLWJhY2t3YXJkICh3b3JkLXNlYXJj aC1yZWdleHAgc3RyaW5nIHQpIGJvdW5kIG5vZXJyb3IgY291bnQpKQoKKGRlZnVuIHdvcmQtc2Vh cmNoLWZvcndhcmQtbGF4IChzdHJpbmcgJm9wdGlvbmFsIGJvdW5kIG5vZXJyb3IgY291bnQpCiAg IlNlYXJjaCBmb3J3YXJkIGZyb20gcG9pbnQgZm9yIFNUUklORywgaWdub3JpbmcgZGlmZmVyZW5j ZXMgaW4gcHVuY3R1YXRpb24uClNldCBwb2ludCB0byB0aGUgZW5kIG9mIHRoZSBvY2N1cnJlbmNl IGZvdW5kLCBhbmQgcmV0dXJuIHBvaW50LgoKVW5saWtlIGB3b3JkLXNlYXJjaC1mb3J3YXJkJywg dGhlIGVuZCBvZiBTVFJJTkcgbmVlZCBub3QgbWF0Y2ggYSB3b3JkCmJvdW5kYXJ5LCB1bmxlc3Mg U1RSSU5HIGVuZHMgaW4gd2hpdGVzcGFjZS4KCkFuIG9wdGlvbmFsIHNlY29uZCBhcmd1bWVudCBi b3VuZHMgdGhlIHNlYXJjaDsgaXQgaXMgYSBidWZmZXIgcG9zaXRpb24uCiAgVGhlIG1hdGNoIGZv dW5kIG11c3Qgbm90IGVuZCBhZnRlciB0aGF0IHBvc2l0aW9uLiAgQSB2YWx1ZSBvZiBuaWwKICBt ZWFucyBzZWFyY2ggdG8gdGhlIGVuZCBvZiB0aGUgYWNjZXNzaWJsZSBwb3J0aW9uIG9mIHRoZSBi dWZmZXIuCk9wdGlvbmFsIHRoaXJkIGFyZ3VtZW50LCBpZiB0LCBtZWFucyBpZiBmYWlsIGp1c3Qg cmV0dXJuIG5pbCAobm8gZXJyb3IpLgogIElmIG5vdCBuaWwgYW5kIG5vdCB0LCBtb3ZlIHRvIGxp bWl0IG9mIHNlYXJjaCBhbmQgcmV0dXJuIG5pbC4KT3B0aW9uYWwgZm91cnRoIGFyZ3VtZW50IENP VU5ULCBpZiBhIHBvc2l0aXZlIG51bWJlciwgbWVhbnMgdG8gc2VhcmNoCiAgZm9yIENPVU5UIHN1 Y2Nlc3NpdmUgb2NjdXJyZW5jZXMuICBJZiBDT1VOVCBpcyBuZWdhdGl2ZSwgc2VhcmNoCiAgYmFj a3dhcmQsIGluc3RlYWQgb2YgZm9yd2FyZCwgZm9yIC1DT1VOVCBvY2N1cnJlbmNlcy4gIEEgdmFs dWUgb2YKICBuaWwgbWVhbnMgdGhlIHNhbWUgYXMgMS4KV2l0aCBDT1VOVCBwb3NpdGl2ZSwgdGhl IG1hdGNoIGZvdW5kIGlzIHRoZSBDT1VOVHRoIG9uZSAob3IgZmlyc3QsCiAgaWYgQ09VTlQgaXMg MSBvciBuaWwpIGluIHRoZSBidWZmZXIgbG9jYXRlZCBlbnRpcmVseSBhZnRlciB0aGUKICBvcmln aW4gb2YgdGhlIHNlYXJjaDsgY29ycmVzcG9uZGluZ2x5IHdpdGggQ09VTlQgbmVnYXRpdmUuCgpS ZWxpZXMgb24gdGhlIGZ1bmN0aW9uIGB3b3JkLXNlYXJjaC1yZWdleHAnIHRvIGNvbnZlcnQgYSBz ZXF1ZW5jZQpvZiB3b3JkcyBpbiBTVFJJTkcgdG8gYSByZWdleHAgdXNlZCB0byBzZWFyY2ggd29y ZHMgd2l0aG91dCByZWdhcmQKdG8gcHVuY3R1YXRpb24uClRoaXMgY29tbWFuZCBkb2VzIG5vdCBz dXBwb3J0IGNoYXJhY3RlciBmb2xkaW5nLCBhbmQgbGF4IHNwYWNlIG1hdGNoaW5nCmhhcyBubyBl ZmZlY3Qgb24gaXQuIgogIChpbnRlcmFjdGl2ZSAic1dvcmQgc2VhcmNoOiAiKQogIChyZS1zZWFy Y2gtZm9yd2FyZCAod29yZC1zZWFyY2gtcmVnZXhwIHN0cmluZyB0KSBib3VuZCBub2Vycm9yIGNv dW50KSkKCjs7IFN5bWJvbCBzZWFyY2gKCihkZWZ1biBpc2VhcmNoLXN5bWJvbC1yZWdleHAgKHN0 cmluZyAmb3B0aW9uYWwgbGF4KQogICJSZXR1cm4gYSByZWdleHAgd2hpY2ggbWF0Y2hlcyBTVFJJ TkcgYXMgYSBzeW1ib2wuCkNyZWF0ZXMgYSByZWdleHAgd2hlcmUgU1RSSU5HIGlzIHN1cnJvdW5k ZWQgYnkgc3ltYm9sIGRlbGltaXRlcnMgXFxfPCBhbmQgXFxfPi4KSWYgdGhlcmUgYXJlIG1vcmUg dGhhbiBvbmUgc3ltYm9sLCB0aGVuIGNvbXB1dGUgYSByZWdleHAgdGhhdCBtYXRjaGVzCnRob3Nl IGV4YWN0IHN5bWJvbHMgc2VwYXJhdGVkIGJ5IG5vbi1zeW1ib2wgY2hhcmFjdGVycy4gIElmIHRo ZSBzdHJpbmcKYmVnaW5zIG9yIGVuZHMgaW4gd2hpdGVzcGFjZSwgdGhlIGJlZ2lubmluZyBvciB0 aGUgZW5kIG9mIHRoZSBzdHJpbmcKbWF0Y2hlcyBhcmJpdHJhcnkgbm9uLXN5bWJvbCB3aGl0ZXNw YWNlLiAgT3RoZXJ3aXNlIGlmIExBWCBpcyBub24tbmlsLAp0aGUgYmVnaW5uaW5nIG9yIHRoZSBl bmQgb2YgdGhlIHN0cmluZyBuZWVkIG5vdCBtYXRjaCBhIHN5bWJvbCBib3VuZGFyeS4iCiAgKGxl dCAoKG5vdC13b3JkLXN5bWJvbC1yZQoJIDs7IFRoaXMgcmVnZXhwIG1hdGNoZXMgYWxsIHN5bnRh eGVzIGV4Y2VwdCB3b3JkIGFuZCBzeW1ib2wgc3ludGF4LgoJICJcXCg/Olxccy1cXHxcXHMuXFx8 XFxzKFxcfFxccylcXHxcXHNcIlxcfFxcc1xcXFx8XFxzL1xcfFxccyRcXHxcXHMnXFx8XFxzPFxc fFxccz5cXHxcXHMhXFx8XFxzfFxcKSsiKSkKICAgIChjb25kCiAgICAgKChlcXVhbCBzdHJpbmcg IiIpICIiKQogICAgICgoc3RyaW5nLW1hdGNoLXAgKGZvcm1hdCAiXFxgJXNcXCciIG5vdC13b3Jk LXN5bWJvbC1yZSkgc3RyaW5nKQogICAgICBub3Qtd29yZC1zeW1ib2wtcmUpCiAgICAgKHQgKGNv bmNhdAoJIChpZiAoc3RyaW5nLW1hdGNoLXAgKGZvcm1hdCAiXFxgJXMiIG5vdC13b3JkLXN5bWJv bC1yZSkgc3RyaW5nKQoJICAgICBub3Qtd29yZC1zeW1ib2wtcmUKCSAgICJcXF88IikKCSAobWFw Y29uY2F0ICdyZWdleHAtcXVvdGUgKHNwbGl0LXN0cmluZyBzdHJpbmcgbm90LXdvcmQtc3ltYm9s LXJlIHQpCgkJICAgIG5vdC13b3JkLXN5bWJvbC1yZSkKCSAoaWYgKHN0cmluZy1tYXRjaC1wIChm b3JtYXQgIiVzXFwnIiBub3Qtd29yZC1zeW1ib2wtcmUpIHN0cmluZykKCSAgICAgbm90LXdvcmQt c3ltYm9sLXJlCgkgICAodW5sZXNzIGxheCAiXFxfPiIpKSkpKSkpCgo7OyBTZWFyY2ggd2l0aCBs YXggd2hpdGVzcGFjZQoKKGRlZnVuIHNlYXJjaC1mb3J3YXJkLWxheC13aGl0ZXNwYWNlIChzdHJp bmcgJm9wdGlvbmFsIGJvdW5kIG5vZXJyb3IgY291bnQpCiAgIlNlYXJjaCBmb3J3YXJkIGZvciBT VFJJTkcsIG1hdGNoaW5nIGEgc2VxdWVuY2Ugb2Ygd2hpdGVzcGFjZSBjaGFycy4iCiAgKGxldCAo KHNlYXJjaC1zcGFjZXMtcmVnZXhwIHNlYXJjaC13aGl0ZXNwYWNlLXJlZ2V4cCkpCiAgICAocmUt c2VhcmNoLWZvcndhcmQgKHJlZ2V4cC1xdW90ZSBzdHJpbmcpIGJvdW5kIG5vZXJyb3IgY291bnQp KSkKCihkZWZ1biBzZWFyY2gtYmFja3dhcmQtbGF4LXdoaXRlc3BhY2UgKHN0cmluZyAmb3B0aW9u YWwgYm91bmQgbm9lcnJvciBjb3VudCkKICAiU2VhcmNoIGJhY2t3YXJkIGZvciBTVFJJTkcsIG1h dGNoaW5nIGEgc2VxdWVuY2Ugb2Ygd2hpdGVzcGFjZSBjaGFycy4iCiAgKGxldCAoKHNlYXJjaC1z cGFjZXMtcmVnZXhwIHNlYXJjaC13aGl0ZXNwYWNlLXJlZ2V4cCkpCiAgICAocmUtc2VhcmNoLWJh Y2t3YXJkIChyZWdleHAtcXVvdGUgc3RyaW5nKSBib3VuZCBub2Vycm9yIGNvdW50KSkpCgooZGVm dW4gcmUtc2VhcmNoLWZvcndhcmQtbGF4LXdoaXRlc3BhY2UgKHJlZ2V4cCAmb3B0aW9uYWwgYm91 bmQgbm9lcnJvciBjb3VudCkKICAiU2VhcmNoIGZvcndhcmQgZm9yIFJFR0VYUCwgbWF0Y2hpbmcg YSBzZXF1ZW5jZSBvZiB3aGl0ZXNwYWNlIGNoYXJzLiIKICAobGV0ICgoc2VhcmNoLXNwYWNlcy1y ZWdleHAgc2VhcmNoLXdoaXRlc3BhY2UtcmVnZXhwKSkKICAgIChyZS1zZWFyY2gtZm9yd2FyZCBy ZWdleHAgYm91bmQgbm9lcnJvciBjb3VudCkpKQoKKGRlZnVuIHJlLXNlYXJjaC1iYWNrd2FyZC1s YXgtd2hpdGVzcGFjZSAocmVnZXhwICZvcHRpb25hbCBib3VuZCBub2Vycm9yIGNvdW50KQogICJT ZWFyY2ggYmFja3dhcmQgZm9yIFJFR0VYUCwgbWF0Y2hpbmcgYSBzZXF1ZW5jZSBvZiB3aGl0ZXNw YWNlIGNoYXJzLiIKICAobGV0ICgoc2VhcmNoLXNwYWNlcy1yZWdleHAgc2VhcmNoLXdoaXRlc3Bh Y2UtcmVnZXhwKSkKICAgIChyZS1zZWFyY2gtYmFja3dhcmQgcmVnZXhwIGJvdW5kIG5vZXJyb3Ig Y291bnQpKSkKCihkb2xpc3QgKG9sZCAnKHJlLXNlYXJjaC1mb3J3YXJkLWxheC13aGl0ZXNwYWNl IHNlYXJjaC1iYWNrd2FyZC1sYXgtd2hpdGVzcGFjZQogICAgICAgICAgICAgICBzZWFyY2gtZm9y d2FyZC1sYXgtd2hpdGVzcGFjZSByZS1zZWFyY2gtYmFja3dhcmQtbGF4LXdoaXRlc3BhY2UpKQog IChtYWtlLW9ic29sZXRlIG9sZAogICAgICAgICAgICAgICAgICJpbnN0ZWFkLCB1c2UgKGxldCAo KHNlYXJjaC1zcGFjZXMtcmVnZXhwIHNlYXJjaC13aGl0ZXNwYWNlLXJlZ2V4cCkpCiAgICAgICAg ICAgICAgIChyZS1zZWFyY2gtLi4uIC4uLikpIgogICAgICAgICAgICAgICAgICIyNS4xIikpCgoM CihkZWZ1biBpc2VhcmNoLXF1ZXJ5LXJlcGxhY2UgKCZvcHRpb25hbCBhcmcgcmVnZXhwLWZsYWcp CiAgIlN0YXJ0IGBxdWVyeS1yZXBsYWNlJyB3aXRoIHN0cmluZyB0byByZXBsYWNlIGZyb20gbGFz dCBzZWFyY2ggc3RyaW5nLgpUaGUgQVJHIChwcmVmaXggYXJnIGlmIGludGVyYWN0aXZlKSwgaWYg bm9uLW5pbCwgbWVhbnMgcmVwbGFjZQpvbmx5IG1hdGNoZXMgc3Vycm91bmRlZCBieSB3b3JkIGJv dW5kYXJpZXMuICBBIG5lZ2F0aXZlIHByZWZpeAphcmcgbWVhbnMgcmVwbGFjZSBiYWNrd2FyZC4g IE5vdGUgdGhhdCB1c2luZyB0aGUgcHJlZml4IGFyZwppcyBwb3NzaWJsZSBvbmx5IHdoZW4gYGlz ZWFyY2gtYWxsb3ctc2Nyb2xsJyBpcyBub24tbmlsIG9yCmBpc2VhcmNoLWFsbG93LXByZWZpeCcg aXMgbm9uLW5pbCwgYW5kIGl0IGRvZXNuJ3QgYWx3YXlzIHByb3ZpZGUgdGhlCmNvcnJlY3QgbWF0 Y2hlcyBmb3IgYHF1ZXJ5LXJlcGxhY2UnLCBzbyB0aGUgcHJlZmVycmVkIHdheSB0byBydW4gd29y ZApyZXBsYWNlbWVudHMgZnJvbSBJc2VhcmNoIGlzIGBNLXMgdyAuLi4gTS0lJy4iCiAgKGludGVy YWN0aXZlCiAgIChsaXN0IGN1cnJlbnQtcHJlZml4LWFyZykpCiAgKGJhcmYtaWYtYnVmZmVyLXJl YWQtb25seSkKICAoaWYgcmVnZXhwLWZsYWcgKHNldHEgaXNlYXJjaC1yZWdleHAgdCkpCiAgKGxl dCAoKGNhc2UtZm9sZC1zZWFyY2ggaXNlYXJjaC1jYXNlLWZvbGQtc2VhcmNoKQoJOzsgc2V0IGBz ZWFyY2gtdXBwZXItY2FzZScgdG8gbmlsIHRvIG5vdCBjYWxsCgk7OyBgaXNlYXJjaC1uby11cHBl ci1jYXNlLXAnIGluIGBwZXJmb3JtLXJlcGxhY2UnCgkoc2VhcmNoLXVwcGVyLWNhc2UgbmlsKQoJ KHNlYXJjaC1pbnZpc2libGUgaXNlYXJjaC1pbnZpc2libGUpCgkocmVwbGFjZS1sYXgtd2hpdGVz cGFjZQoJIGlzZWFyY2gtbGF4LXdoaXRlc3BhY2UpCgkocmVwbGFjZS1yZWdleHAtbGF4LXdoaXRl c3BhY2UKCSBpc2VhcmNoLXJlZ2V4cC1sYXgtd2hpdGVzcGFjZSkKCShkZWxpbWl0ZWQgKGFuZCBh cmcgKG5vdCAoZXEgYXJnICctKSkpKQoJKGJhY2t3YXJkIChhbmQgYXJnIChlcSBhcmcgJy0pKSkK CTs7IFNldCBgaXNlYXJjaC1yZWN1cnNpdmUtZWRpdCcgdG8gbmlsIHRvIHByZXZlbnQgY2FsbGlu ZwoJOzsgYGV4aXQtcmVjdXJzaXZlLWVkaXQnIGluIGBpc2VhcmNoLWRvbmUnIHRoYXQgdGVybWlu YXRlcwoJOzsgdGhlIGV4ZWN1dGlvbiBvZiB0aGlzIGNvbW1hbmQgd2hlbiBpdCBpcyBub24tbmls LgoJOzsgV2UgY2FsbCBgZXhpdC1yZWN1cnNpdmUtZWRpdCcgZXhwbGljaXRseSBhdCB0aGUgZW5k IGJlbG93LgoJKGlzZWFyY2gtcmVjdXJzaXZlLWVkaXQgbmlsKQoJKGlzZWFyY2gtc3RyaW5nLXBy b3BlcnRpemVkCiAgICAgICAgIChpc2VhcmNoLXN0cmluZy1wcm9wZXJ0aXplIGlzZWFyY2gtc3Ry aW5nKSkpCiAgICAoaXNlYXJjaC1kb25lIG5pbCB0KQogICAgKGlzZWFyY2gtY2xlYW4tb3Zlcmxh eXMpCiAgICAoaWYgKGFuZCBpc2VhcmNoLW90aGVyLWVuZAoJICAgICAoaWYgYmFja3dhcmQKCQkg KD4gaXNlYXJjaC1vdGhlci1lbmQgKHBvaW50KSkKCSAgICAgICAoPCBpc2VhcmNoLW90aGVyLWVu ZCAocG9pbnQpKSkKICAgICAgICAgICAgIChub3QgKGFuZCB0cmFuc2llbnQtbWFyay1tb2RlIG1h cmstYWN0aXZlCiAgICAgICAgICAgICAgICAgICAgICAgKGlmIGJhY2t3YXJkCgkJCSAgICg+ICht YXJrKSAocG9pbnQpKQoJCQkgKDwgKG1hcmspIChwb2ludCkpKSkpKQogICAgICAgIChnb3RvLWNo YXIgaXNlYXJjaC1vdGhlci1lbmQpKQogICAgKHNldCBxdWVyeS1yZXBsYWNlLWZyb20taGlzdG9y eS12YXJpYWJsZQogICAgICAgICAoY29ucyBpc2VhcmNoLXN0cmluZy1wcm9wZXJ0aXplZAogICAg ICAgICAgICAgICAoc3ltYm9sLXZhbHVlIHF1ZXJ5LXJlcGxhY2UtZnJvbS1oaXN0b3J5LXZhcmlh YmxlKSkpCiAgICAocGVyZm9ybS1yZXBsYWNlCiAgICAgaXNlYXJjaC1zdHJpbmctcHJvcGVydGl6 ZWQKICAgICAocXVlcnktcmVwbGFjZS1yZWFkLXRvCiAgICAgIGlzZWFyY2gtc3RyaW5nLXByb3Bl cnRpemVkCiAgICAgIChjb25jYXQgIlF1ZXJ5IHJlcGxhY2UiCiAgICAgICAgICAgICAgKGlzZWFy Y2gtLWRlc2NyaWJlLXJlZ2V4cC1tb2RlIChvciBkZWxpbWl0ZWQgaXNlYXJjaC1yZWdleHAtZnVu Y3Rpb24pIHQpCgkgICAgICAoaWYgYmFja3dhcmQgIiBiYWNrd2FyZCIgIiIpCgkgICAgICAoaWYg KHVzZS1yZWdpb24tcCkgIiBpbiByZWdpb24iICIiKSkKICAgICAgaXNlYXJjaC1yZWdleHApCiAg ICAgdCBpc2VhcmNoLXJlZ2V4cCAob3IgZGVsaW1pdGVkIGlzZWFyY2gtcmVnZXhwLWZ1bmN0aW9u KSBuaWwgbmlsCiAgICAgKGlmICh1c2UtcmVnaW9uLXApIChyZWdpb24tYmVnaW5uaW5nKSkKICAg ICAoaWYgKHVzZS1yZWdpb24tcCkgKHJlZ2lvbi1lbmQpKQogICAgIGJhY2t3YXJkKSkKICAoYW5k IGlzZWFyY2gtcmVjdXJzaXZlLWVkaXQgKGV4aXQtcmVjdXJzaXZlLWVkaXQpKSkKCihkZWZ1biBp c2VhcmNoLXF1ZXJ5LXJlcGxhY2UtcmVnZXhwICgmb3B0aW9uYWwgYXJnKQogICJTdGFydCBgcXVl cnktcmVwbGFjZS1yZWdleHAnIHdpdGggc3RyaW5nIHRvIHJlcGxhY2UgZnJvbSBsYXN0IHNlYXJj aCBzdHJpbmcuClNlZSBgaXNlYXJjaC1xdWVyeS1yZXBsYWNlJyBmb3IgbW9yZSBpbmZvcm1hdGlv bi4iCiAgKGludGVyYWN0aXZlCiAgIChsaXN0IGN1cnJlbnQtcHJlZml4LWFyZykpCiAgKGlzZWFy Y2gtcXVlcnktcmVwbGFjZSBhcmcgdCkpCgooZGVmdW4gaXNlYXJjaC1vY2N1ciAocmVnZXhwICZv cHRpb25hbCBubGluZXMpCiAgIlJ1biBgb2NjdXInIHVzaW5nIHRoZSBsYXN0IHNlYXJjaCBzdHJp bmcgYXMgdGhlIHJlZ2V4cC4KSW50ZXJhY3RpdmVseSwgUkVHRVhQIGlzIGNvbnN0cnVjdGVkIHVz aW5nIHRoZSBzZWFyY2ggc3RyaW5nIGZyb20gdGhlCmxhc3Qgc2VhcmNoIGNvbW1hbmQuICBOTElO RVMgaGFzIHRoZSBzYW1lIG1lYW5pbmcgYXMgaW4gYG9jY3VyJy4KCklmIHRoZSBsYXN0IHNlYXJj aCBjb21tYW5kIHdhcyBhIHdvcmQgc2VhcmNoLCBSRUdFWFAgaXMgY29tcHV0ZWQgZnJvbQp0aGUg c2VhcmNoIHdvcmRzLCBpZ25vcmluZyBwdW5jdHVhdGlvbi4gIElmIHRoZSBsYXN0IHNlYXJjaApj b21tYW5kIHdhcyBhIHJlZ3VsYXIgZXhwcmVzc2lvbiBzZWFyY2gsIFJFR0VYUCBpcyB0aGUgcmVn dWxhcgpleHByZXNzaW9uIHVzZWQgaW4gdGhhdCBzZWFyY2guICBJZiB0aGUgbGFzdCBzZWFyY2gg Y29tbWFuZCBzZWFyY2hlZApmb3IgYSBsaXRlcmFsIHN0cmluZywgUkVHRVhQIGlzIGNvbnN0cnVj dGVkIGJ5IHF1b3RpbmcgYWxsIHRoZSBzcGVjaWFsCmNoYXJhY3RlcnMgaW4gdGhhdCBzdHJpbmcu IgogIChpbnRlcmFjdGl2ZQogICAobGV0KiAoKHBlcmZvcm0tY29sbGVjdCAoY29uc3AgY3VycmVu dC1wcmVmaXgtYXJnKSkKCSAgKHJlZ2V4cCAoY29uZAoJCSAgICgoZnVuY3Rpb25wIGlzZWFyY2gt cmVnZXhwLWZ1bmN0aW9uKQoJCSAgICAoZnVuY2FsbCBpc2VhcmNoLXJlZ2V4cC1mdW5jdGlvbiBp c2VhcmNoLXN0cmluZykpCgkJICAgKGlzZWFyY2gtcmVnZXhwLWZ1bmN0aW9uICh3b3JkLXNlYXJj aC1yZWdleHAgaXNlYXJjaC1zdHJpbmcpKQoJCSAgIChpc2VhcmNoLXJlZ2V4cCBpc2VhcmNoLXN0 cmluZykKCQkgICAodCAocmVnZXhwLXF1b3RlIGlzZWFyY2gtc3RyaW5nKSkpKSkKICAgICAobGlz dCByZWdleHAKCSAgIChpZiBwZXJmb3JtLWNvbGxlY3QKCSAgICAgICA7OyBQZXJmb3JtIGNvbGxl Y3Qgb3BlcmF0aW9uCgkgICAgICAgKGlmICh6ZXJvcCAocmVnZXhwLW9wdC1kZXB0aCByZWdleHAp KQoJCSAgIDs7IE5vIHN1YmV4cHJlc3Npb24gc28gY29sbGVjdCB0aGUgZW50aXJlIG1hdGNoLgoJ CSAgICJcXCYiCgkJIDs7IEdldCB0aGUgcmVnZXhwIGZvciBjb2xsZWN0aW9uIHBhdHRlcm4uCgkJ IChsZXQgKChkZWZhdWx0IChjYXIgb2NjdXItY29sbGVjdC1yZWdleHAtaGlzdG9yeSkpCgkJICAg ICAgIHJlZ2V4cC1jb2xsZWN0KQoJCSAgICh3aXRoLWlzZWFyY2gtc3VzcGVuZGVkCgkJICAgIChz ZXRxIHJlZ2V4cC1jb2xsZWN0CgkJCSAgKHJlYWQtcmVnZXhwCgkJCSAgIChmb3JtYXQgIlJlZ2V4 cCB0byBjb2xsZWN0IChkZWZhdWx0ICVzKTogIiBkZWZhdWx0KQoJCQkgICBkZWZhdWx0ICdvY2N1 ci1jb2xsZWN0LXJlZ2V4cC1oaXN0b3J5KSkpCgkJICAgcmVnZXhwLWNvbGxlY3QpKQoJICAgICA7 OyBPdGhlcndpc2Ugbm9ybWFsIG9jY3VyIHRha2VzIG51bWVyaWNhbCBwcmVmaXggYXJndW1lbnQu CgkgICAgICh3aGVuIGN1cnJlbnQtcHJlZml4LWFyZwoJICAgICAgIChwcmVmaXgtbnVtZXJpYy12 YWx1ZSBjdXJyZW50LXByZWZpeC1hcmcpKSkpKSkKICAobGV0ICgoY2FzZS1mb2xkLXNlYXJjaCBp c2VhcmNoLWNhc2UtZm9sZC1zZWFyY2gpCgk7OyBTZXQgYHNlYXJjaC11cHBlci1jYXNlJyB0byBu aWwgdG8gbm90IGNhbGwKCTs7IGBpc2VhcmNoLW5vLXVwcGVyLWNhc2UtcCcgaW4gYG9jY3VyLTEn LgoJKHNlYXJjaC11cHBlci1jYXNlIG5pbCkKCShzZWFyY2gtc3BhY2VzLXJlZ2V4cAoJIChpZiAo aWYgaXNlYXJjaC1yZWdleHAKCQkgaXNlYXJjaC1yZWdleHAtbGF4LXdoaXRlc3BhY2UKCSAgICAg ICBpc2VhcmNoLWxheC13aGl0ZXNwYWNlKQoJICAgICBzZWFyY2gtd2hpdGVzcGFjZS1yZWdleHAp KSkKICAgIChvY2N1ciAoaWYgaXNlYXJjaC1yZWdleHAtZnVuY3Rpb24KCSAgICAgICAocHJvcGVy dGl6ZSByZWdleHAKCQkJICAgJ2lzZWFyY2gtc3RyaW5nIGlzZWFyY2gtc3RyaW5nCgkJCSAgICdp c2VhcmNoLXJlZ2V4cC1mdW5jdGlvbi1kZXNjcgogICAgICAgICAgICAgICAgICAgICAgICAgICAo aXNlYXJjaC0tZGVzY3JpYmUtcmVnZXhwLW1vZGUgaXNlYXJjaC1yZWdleHAtZnVuY3Rpb24pKQoJ ICAgICByZWdleHApCgkgICBubGluZXMKCSAgIChpZiAodXNlLXJlZ2lvbi1wKSAocmVnaW9uLWJv dW5kcykpKSkpCgooZGVjbGFyZS1mdW5jdGlvbiBoaS1sb2NrLXJlYWQtZmFjZS1uYW1lICJoaS1s b2NrIiAoKSkKCihkZWZ1biBpc2VhcmNoLS1oaWdobGlnaHQtcmVnZXhwLW9yLWxpbmVzIChoaS1s b2NrLWZ1bmMpCiAgIlJ1biBISS1MT0NLLUZVTkMgdG8gZXhpdCBpc2VhcmNoLCBsZWF2aW5nIHRo ZSBtYXRjaGVzIGhpZ2hsaWdodGVkLgpUaGlzIGlzIHRoZSBpbnRlcm5hbCBmdW5jdGlvbiB1c2Vk IGJ5IGBpc2VhcmNoLWhpZ2hsaWdodC1yZWdleHAnCmFuZCBgaXNlYXJjaC1oaWdobGlnaHQtbGlu ZXMtbWF0Y2hpbmctcmVnZXhwJyB0byBpbnZva2UKSEktTE9DSy1GVU5DIChlaXRoZXIgYGhpZ2hs aWdodC1yZWdleHAnIG9yIGBoaWdobGlnaHQtbGluZXMtbWF0Y2hpbmctcmVnZXhwJywKcmVzcGVj dGl2ZWx5KS4iCiAgKGxldCAoCgk7OyBTZXQgYGlzZWFyY2gtcmVjdXJzaXZlLWVkaXQnIHRvIG5p bCB0byBwcmV2ZW50IGNhbGxpbmcKCTs7IGBleGl0LXJlY3Vyc2l2ZS1lZGl0JyBpbiBgaXNlYXJj aC1kb25lJyB0aGF0IHRlcm1pbmF0ZXMKCTs7IHRoZSBleGVjdXRpb24gb2YgdGhpcyBjb21tYW5k IHdoZW4gaXQgaXMgbm9uLW5pbC4KCTs7IFdlIGNhbGwgYGV4aXQtcmVjdXJzaXZlLWVkaXQnIGV4 cGxpY2l0bHkgYXQgdGhlIGVuZCBiZWxvdy4KCShpc2VhcmNoLXJlY3Vyc2l2ZS1lZGl0IG5pbCkp CiAgICAoaXNlYXJjaC1kb25lIG5pbCB0KQogICAgKGlzZWFyY2gtY2xlYW4tb3ZlcmxheXMpKQog IChyZXF1aXJlICdoaS1sb2NrIG5pbCB0KQogIChsZXQgKChyZWdleHAgKGNvbmQgKChmdW5jdGlv bnAgaXNlYXJjaC1yZWdleHAtZnVuY3Rpb24pCiAgICAgICAgICAgICAgICAgICAgICAgKGZ1bmNh bGwgaXNlYXJjaC1yZWdleHAtZnVuY3Rpb24gaXNlYXJjaC1zdHJpbmcpKQoJCSAgICAgIChpc2Vh cmNoLXJlZ2V4cC1mdW5jdGlvbiAod29yZC1zZWFyY2gtcmVnZXhwIGlzZWFyY2gtc3RyaW5nKSkK CQkgICAgICAoaXNlYXJjaC1yZWdleHAgaXNlYXJjaC1zdHJpbmcpCgkJICAgICAgKChpZiAoYW5k IChlcSBpc2VhcmNoLWNhc2UtZm9sZC1zZWFyY2ggdCkKCQkJCXNlYXJjaC11cHBlci1jYXNlKQoJ CQkgICAoaXNlYXJjaC1uby11cHBlci1jYXNlLXAKCQkJICAgIGlzZWFyY2gtc3RyaW5nIGlzZWFy Y2gtcmVnZXhwKQoJCQkgaXNlYXJjaC1jYXNlLWZvbGQtc2VhcmNoKQoJCSAgICAgICA7OyBUdXJu IGlzZWFyY2gtc3RyaW5nIGludG8gYSBjYXNlLWluc2Vuc2l0aXZlCgkJICAgICAgIDs7IHJlZ2V4 cC4KCQkgICAgICAgKG1hcGNvbmNhdAoJCQkobGFtYmRhIChjKQoJCQkgIChsZXQgKChzIChzdHJp bmcgYykpKQoJCQkgICAgKGlmIChzdHJpbmctbWF0Y2ggIltbOmFscGhhOl1dIiBzKQoJCQkJKGZv cm1hdCAiWyVzJXNdIiAodXBjYXNlIHMpIChkb3duY2FzZSBzKSkKCQkJICAgICAgKHJlZ2V4cC1x dW90ZSBzKSkpKQoJCQlpc2VhcmNoLXN0cmluZyAiIikpCgkJICAgICAgKHQgKHJlZ2V4cC1xdW90 ZSBpc2VhcmNoLXN0cmluZykpKSkpCiAgICAoZnVuY2FsbCBoaS1sb2NrLWZ1bmMgcmVnZXhwICho aS1sb2NrLXJlYWQtZmFjZS1uYW1lKSkpCiAgKGFuZCBpc2VhcmNoLXJlY3Vyc2l2ZS1lZGl0IChl eGl0LXJlY3Vyc2l2ZS1lZGl0KSkpCgooZGVmdW4gaXNlYXJjaC1oaWdobGlnaHQtcmVnZXhwICgp CiAgIkV4aXQgSXNlYXJjaCBtb2RlIGFuZCBjYWxsIGBoaWdobGlnaHQtcmVnZXhwJy4KVGhlIGFy Z3VtZW50cyBwYXNzZWQgdG8gYGhpZ2hsaWdodC1yZWdleHAnIGFyZSB0aGUgcmVnZXhwIGZyb20K dGhlIGxhc3Qgc2VhcmNoIGFuZCB0aGUgZmFjZSBmcm9tIGBoaS1sb2NrLXJlYWQtZmFjZS1uYW1l Jy4iCiAgKGludGVyYWN0aXZlKQogIChpc2VhcmNoLS1oaWdobGlnaHQtcmVnZXhwLW9yLWxpbmVz ICdoaWdobGlnaHQtcmVnZXhwKSkKCihkZWZ1biBpc2VhcmNoLWhpZ2hsaWdodC1saW5lcy1tYXRj aGluZy1yZWdleHAgKCkKICAiRXhpdCBJc2VhcmNoIG1vZGUgYW5kIGNhbGwgYGhpZ2hsaWdodC1s aW5lcy1tYXRjaGluZy1yZWdleHAnLgpUaGUgYXJndW1lbnRzIHBhc3NlZCB0byBgaGlnaGxpZ2h0 LWxpbmVzLW1hdGNoaW5nLXJlZ2V4cCcgYXJlIHRoZQpyZWdleHAgZnJvbSB0aGUgbGFzdCBzZWFy Y2ggYW5kIHRoZSBmYWNlIGZyb20gYGhpLWxvY2stcmVhZC1mYWNlLW5hbWUnLiIKICAoaW50ZXJh Y3RpdmUpCiAgKGlzZWFyY2gtLWhpZ2hsaWdodC1yZWdleHAtb3ItbGluZXMgJ2hpZ2hsaWdodC1s aW5lcy1tYXRjaGluZy1yZWdleHApKQoKDAooZGVmdW4gaXNlYXJjaC1kZWxldGUtY2hhciAoKQog ICJVbmRvIGxhc3QgaW5wdXQgaXRlbSBkdXJpbmcgYSBzZWFyY2guCgpBbiBpbnB1dCBpdGVtIGlz IHRoZSByZXN1bHQgb2YgYSBjb21tYW5kIHRoYXQgcHVzaGVzIGEgbmV3IHN0YXRlCm9mIGlzZWFy Y2ggKGFzIHJlY29yZGVkIGJ5IHRoZSBgaXNlYXJjaC0tc3RhdGUnIHN0cnVjdHVyZSkgdG8KYGlz ZWFyY2gtY21kcycuICBJbmZvIG5vZGUgYChlbWFjcylCYXNpYyBJc2VhcmNoJyBleHBsYWlucyB3 aGVuCkVtYWNzIHJlY29yZHMgYSBuZXcgaW5wdXQgaXRlbS4KCklmIG5vIGlucHV0IGl0ZW1zIGhh dmUgYmVlbiBlbnRlcmVkIHlldCwganVzdCBiZWVwLiIKICAoaW50ZXJhY3RpdmUpCiAgKGlmIChu dWxsIChjZHIgaXNlYXJjaC1jbWRzKSkKICAgICAgKGRpbmcpCiAgICAoaXNlYXJjaC1wb3Atc3Rh dGUpKQogIChpc2VhcmNoLXVwZGF0ZSkpCgooZGVmdW4gaXNlYXJjaC1kZWwtY2hhciAoJm9wdGlv bmFsIGFyZykKICAiRGVsZXRlIGNoYXJhY3RlciBmcm9tIGVuZCBvZiBzZWFyY2ggc3RyaW5nIGFu ZCBzZWFyY2ggYWdhaW4uClVubGlrZSBgaXNlYXJjaC1kZWxldGUtY2hhcicsIGl0IG9ubHkgZGVs ZXRlcyB0aGUgbGFzdCBjaGFyYWN0ZXIsCmJ1dCBkb2Vzbid0IGNhbmNlbCB0aGUgZWZmZWN0IG9m IG90aGVyIGlzZWFyY2ggY29tbWFuZC4KSWYgc2VhcmNoIHN0cmluZyBpcyBlbXB0eSwganVzdCBi ZWVwLiIKICAoaW50ZXJhY3RpdmUgInAiKQogIChpZiAoPSAwIChsZW5ndGggaXNlYXJjaC1zdHJp bmcpKQogICAgICAoZGluZykKICAgIChzZXRxIGlzZWFyY2gtc3RyaW5nIChzdWJzdHJpbmcgaXNl YXJjaC1zdHJpbmcgMAoJCQkJICAgICgtIChtaW4gKG9yIGFyZyAxKQoJCQkJCSAgICAobGVuZ3Ro IGlzZWFyY2gtc3RyaW5nKSkpKQogICAgICAgICAgaXNlYXJjaC1tZXNzYWdlIChtYXBjb25jYXQg J2lzZWFyY2gtdGV4dC1jaGFyLWRlc2NyaXB0aW9uCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBpc2VhcmNoLXN0cmluZyAiIikpKQogIDs7IERvIHRoZSBmb2xsb3dpbmcgYmVm b3JlIG1vdmluZyBwb2ludC4KICAoZnVuY2FsbCAob3IgaXNlYXJjaC1tZXNzYWdlLWZ1bmN0aW9u ICMnaXNlYXJjaC1tZXNzYWdlKSBuaWwgdCkKICA7OyBVc2UgdGhlIGlzZWFyY2gtb3RoZXItZW5k IGFzIG5ldyBzdGFydGluZyBwb2ludCB0byBiZSBhYmxlCiAgOzsgdG8gZmluZCB0aGUgcmVtYWlu aW5nIHBhcnQgb2YgdGhlIHNlYXJjaCBzdHJpbmcgYWdhaW4uCiAgOzsgVGhpcyBpcyBsaWtlIHdo YXQgYGlzZWFyY2gtc2VhcmNoLWFuZC11cGRhdGUnIGRvZXMsCiAgOzsgYnV0IGN1cnJlbnRseSBp dCBkb2Vzbid0IHN1cHBvcnQgZGVsZXRpb24gb2YgY2hhcmFjdGVycwogIDs7IGZvciB0aGUgY2Fz ZSB3aGVyZSB1bnN1Y2Nlc3NmdWwgc2VhcmNoIG1heSBiZWNvbWUgc3VjY2Vzc2Z1bAogIDs7IGJ5 IGRlbGV0aW9uIG9mIGNoYXJhY3RlcnMuCiAgKGlmIGlzZWFyY2gtb3RoZXItZW5kIChnb3RvLWNo YXIgaXNlYXJjaC1vdGhlci1lbmQpKQogIChpc2VhcmNoLXNlYXJjaCkKICAoaXNlYXJjaC1wdXNo LXN0YXRlKQogIChpc2VhcmNoLXVwZGF0ZSkpCgooZGVmdW4gaXNlYXJjaC15YW5rLXN0cmluZyAo c3RyaW5nICZvcHRpb25hbCByZXNwZWN0LWRpcmVjdGlvbikKICAiUHVsbCBTVFJJTkcgaW50byBz ZWFyY2ggc3RyaW5nLgpOb24tbmlsIFJFU1BFQ1QtRElSRUNUSU9OIG1lYW5zIHByZXBlbmQgU1RS SU5HIGlmIHNlYXJjaGluZyBiYWNrd2FyZC4iCiAgOzsgRG93bmNhc2UgdGhlIHN0cmluZyBpZiBu b3Qgc3VwcG9zZWQgdG8gY2FzZS1mb2xkIHlhbmtlZCBzdHJpbmdzLgogIChpZiAoYW5kIGlzZWFy Y2gtY2FzZS1mb2xkLXNlYXJjaAoJICAgKGVxICdub3QteWFua3Mgc2VhcmNoLXVwcGVyLWNhc2Up KQogICAgICAoc2V0cSBzdHJpbmcgKGRvd25jYXNlIHN0cmluZykpKQogIChpZiBpc2VhcmNoLXJl Z2V4cCAoc2V0cSBzdHJpbmcgKHJlZ2V4cC1xdW90ZSBzdHJpbmcpKSkKICA7OyBEb24ndCBtb3Zl IGN1cnNvciBpbiByZXZlcnNlIHNlYXJjaC4KICAoc2V0cSBpc2VhcmNoLXlhbmstZmxhZyB0KQog IChpc2VhcmNoLXByb2Nlc3Mtc2VhcmNoLXN0cmluZyBzdHJpbmcKCQkJCSAobWFwY29uY2F0ICdp c2VhcmNoLXRleHQtY2hhci1kZXNjcmlwdGlvbiBzdHJpbmcgIiIpCgkJCQkgcmVzcGVjdC1kaXJl Y3Rpb24pKQoKKGRlZnVuIGlzZWFyY2gteWFuay1raWxsICgpCiAgIlB1bGwgc3RyaW5nIGZyb20g a2lsbCByaW5nIGludG8gc2VhcmNoIHN0cmluZy4iCiAgKGludGVyYWN0aXZlKQogICh1bmxlc3Mg aXNlYXJjaC1tb2RlIChpc2VhcmNoLW1vZGUgdCkpCiAgKGlzZWFyY2gteWFuay1zdHJpbmcgKGN1 cnJlbnQta2lsbCAwKSkpCgooZGVmdW4gaXNlYXJjaC15YW5rLXBvcCAoKQogICJSZXBsYWNlIGp1 c3QteWFua2VkIHNlYXJjaCBzdHJpbmcgd2l0aCBwcmV2aW91c2x5IGtpbGxlZCBzdHJpbmcuIgog IChpbnRlcmFjdGl2ZSkKICAoaWYgKG5vdCAobWVtcSBsYXN0LWNvbW1hbmQgJyhpc2VhcmNoLXlh bmsta2lsbCBpc2VhcmNoLXlhbmstcG9wKSkpCiAgICAgIDs7IEZhbGwgYmFjayBvbiBgaXNlYXJj aC15YW5rLWtpbGwnIGZvciB0aGUgYmVuZWZpdHMgb2YgcGVvcGxlCiAgICAgIDs7IHdobyBhcmUg dXNlZCB0byB0aGUgb2xkIGJlaGF2aW9yIG9mIGBNLXknIGluIGlzZWFyY2ggbW9kZS4gSW4KICAg ICAgOzsgZnV0dXJlLCB0aGlzIGZhbGxiYWNrIG1heSBiZSBjaGFuZ2VkIGlmIHdlIGV2ZXIgY2hh bmdlCiAgICAgIDs7IGB5YW5rLXBvcCcgdG8gZG8gc29tZXRoaW5nIGxpa2UgdGhlIGtpbGwtcmlu Zy1icm93c2VyLgogICAgICAoaXNlYXJjaC15YW5rLWtpbGwpCiAgICAoaXNlYXJjaC1wb3Atc3Rh dGUpCiAgICAoaXNlYXJjaC15YW5rLXN0cmluZyAoY3VycmVudC1raWxsIDEpKSkpCgooZGVmdW4g aXNlYXJjaC15YW5rLXgtc2VsZWN0aW9uICgpCiAgIlB1bGwgY3VycmVudCBYIHNlbGVjdGlvbiBp bnRvIHNlYXJjaCBzdHJpbmcuIgogIChpbnRlcmFjdGl2ZSkKICAoaXNlYXJjaC15YW5rLXN0cmlu ZyAoZ3VpLWdldC1zZWxlY3Rpb24pKQogIDs7IElmIGBndWktZ2V0LXNlbGVjdGlvbicgcmV0dXJu ZWQgdGhlIHRleHQgZnJvbSB0aGUgYWN0aXZlIHJlZ2lvbiwKICA7OyB0aGVuIGl0ICJ1c2VkIiB0 aGUgbWFyayB3aGljaCB3ZSBzaG91bGQgaGVuY2UgZGVhY3RpdmF0ZS4KICAod2hlbiBzZWxlY3Qt YWN0aXZlLXJlZ2lvbnMgKGRlYWN0aXZhdGUtbWFyaykpKQoKCihkZWZ1biBpc2VhcmNoLW1vdXNl LTIgKGNsaWNrKQogICJIYW5kbGUgbW91c2UtMiBpbiBJc2VhcmNoIG1vZGUuCkZvciBhIGNsaWNr IGluIHRoZSBlY2hvIGFyZWEsIGludm9rZSBgaXNlYXJjaC15YW5rLXgtc2VsZWN0aW9uJy4KT3Ro ZXJ3aXNlIGludm9rZSB3aGF0ZXZlciB0aGUgY2FsbGluZyBtb3VzZS0yIGNvbW1hbmQgc2VxdWVu Y2UKaXMgYm91bmQgdG8gb3V0c2lkZSBvZiBJc2VhcmNoLiIKICAoaW50ZXJhY3RpdmUgImUiKQog IChsZXQgKCh3IChwb3NuLXdpbmRvdyAoZXZlbnQtc3RhcnQgY2xpY2spKSkKICAgICAgICAoYmlu ZGluZyAobGV0ICgob3ZlcnJpZGluZy10ZXJtaW5hbC1sb2NhbC1tYXAgbmlsKSkKICAgICAgICAg ICAgICAgICAgIChrZXktYmluZGluZyAodGhpcy1jb21tYW5kLWtleXMtdmVjdG9yKSB0KSkpKQog ICAgKGlmIChhbmQgKHdpbmRvdy1taW5pYnVmZmVyLXAgdykKCSAgICAgKG5vdCAobWluaWJ1ZmZl ci13aW5kb3ctYWN0aXZlLXAgdykpKSA7IGluIGVjaG8gYXJlYQoJKGlzZWFyY2gteWFuay14LXNl bGVjdGlvbikKICAgICAgKHdoZW4gKGZ1bmN0aW9ucCBiaW5kaW5nKQoJKGNhbGwtaW50ZXJhY3Rp dmVseSBiaW5kaW5nKSkpKSkKCihkZWNsYXJlLWZ1bmN0aW9uIHh0ZXJtLS1wYXN0ZWQtdGV4dCAi dGVybS94dGVybSIgKCkpCgooZGVmdW4gaXNlYXJjaC14dGVybS1wYXN0ZSAoKQogICJQdWxsIHRl cm1pbmFsIHBhc3RlIGludG8gc2VhcmNoIHN0cmluZy4iCiAgKGludGVyYWN0aXZlKQogIChpc2Vh cmNoLXlhbmstc3RyaW5nICh4dGVybS0tcGFzdGVkLXRleHQpKSkKCihkZWZ1biBpc2VhcmNoLXlh bmstaW50ZXJuYWwgKGp1bXBmdW4gJm9wdGlvbmFsIHJlc3BlY3QtZGlyZWN0aW9uKQogICJQdWxs IHRoZSB0ZXh0IGZyb20gcG9pbnQgdG8gdGhlIHBvaW50IHJlYWNoZWQgYnkgSlVNUEZVTi4KSlVN UEZVTiBpcyBhIGZ1bmN0aW9uIHRoYXQgdGFrZXMgbm8gYXJndW1lbnRzIGFuZCByZXR1cm5zIGEg YnVmZmVyCnBvc2l0aW9uLCBwb3NzaWJseSBoYXZpbmcgbW92ZWQgcG9pbnQgdG8gdGhhdCBwb3Np dGlvbi4KCkZvciBleGFtcGxlLCBKVU1QRlVOIG1pZ2h0IG1vdmUgZm9yd2FyZCBieSBhIHdvcmQg YW5kIHJldHVybiBwb2ludCwgb3IKaXQgbWlnaHQgcmV0dXJuIHRoZSBwb3NpdGlvbiBvZiB0aGUg ZW5kIG9mIHRoZSBsaW5lLgoKTm9uLW5pbCBSRVNQRUNULURJUkVDVElPTiBtZWFucyBwcmVwZW5k IHRleHQgaWYgc2VhcmNoaW5nIGJhY2t3YXJkLiIKICAoaXNlYXJjaC15YW5rLXN0cmluZwogICAo c2F2ZS1leGN1cnNpb24gCiAgICAgICAod2hlbiAoYW5kIChub3QgaXNlYXJjaC1mb3J3YXJkKSAg KG5vdCByZXNwZWN0LWRpcmVjdGlvbikpIChnb3RvLWNoYXIgaXNlYXJjaC1vdGhlci1lbmQpKQog ICAgICAgKGJ1ZmZlci1zdWJzdHJpbmctbm8tcHJvcGVydGllcyAocG9pbnQpIChmdW5jYWxsIGp1 bXBmdW4pKSkKICAgcmVzcGVjdC1kaXJlY3Rpb24pKQoKKGRlZnVuIGlzZWFyY2gteWFuay1jaGFy LWluLW1pbmlidWZmZXIgKCZvcHRpb25hbCBhcmcpCiAgIlB1bGwgbmV4dCBjaGFyYWN0ZXIgZnJv bSBidWZmZXIgaW50byBlbmQgb2Ygc2VhcmNoIHN0cmluZyBpbiBtaW5pYnVmZmVyLiIKICAoaW50 ZXJhY3RpdmUgInAiKQogIChpZiAoZW9icCkKICAgICAgKGluc2VydAogICAgICAgKHdpdGgtY3Vy cmVudC1idWZmZXIgKGNhZHIgKGJ1ZmZlci1saXN0KSkKICAgICAgICAgKGJ1ZmZlci1zdWJzdHJp bmctbm8tcHJvcGVydGllcwogICAgICAgICAgKHBvaW50KSAocHJvZ24gKGZvcndhcmQtY2hhciBh cmcpIChwb2ludCkpKSkpCiAgICAoZm9yd2FyZC1jaGFyIGFyZykpKQoKKGRlZnVuIGlzZWFyY2gt eWFuay1jaGFyICgmb3B0aW9uYWwgYXJnKQogICJQdWxsIGNoYXJhY3RlciBmcm9tIGJ1ZmZlciBp bnRvIHNlYXJjaCBzdHJpbmcuCklmIGBpc2VhcmNoLWRpcmVjdGlvbmFsLXlhbmsnIGlzIG5vbi1u aWwgdGhlbiB1c2UgbmV4dCBjaGFyIGZvcgpmb3J3YXJkIHNlYXJjaCwgcHJldmlvdXMgY2hhciBm b3IgYmFja3dhcmQgc2VhcmNoLgoKV2l0aCBhIG51bWVyaWMgcHJlZml4IEFSRywgcHVsbCBpbiBB UkcgY2hhcmFjdGVycy4iCiAgKGludGVyYWN0aXZlICJwIikKICAoaXNlYXJjaC15YW5rLWludGVy bmFsCiAgIChsYW1iZGEgKCkKICAgICAoZnVuY2FsbCAoaWYgKG9yIGlzZWFyY2gtZm9yd2FyZCAg KG5vdCBpc2VhcmNoLWRpcmVjdGlvbmFsLXlhbmspKQogICAgICAgICAgICAgICAgICAjJ2Zvcndh cmQtY2hhcgogICAgICAgICAgICAgICAgIydiYWNrd2FyZC1jaGFyKQogICAgICAgICAgICAgIGFy ZykKICAgICAocG9pbnQpKQogICBpc2VhcmNoLWRpcmVjdGlvbmFsLXlhbmspKQoKKGRlZnVuIGlz ZWFyY2gtLXlhbmstY2hhci1vci1zeW50YXggKHN5bnRheC1saXN0IGZuICZvcHRpb25hbCByZXNw ZWN0LWRpcmVjdGlvbikKICAoaXNlYXJjaC15YW5rLWludGVybmFsCiAgIChsYW1iZGEgKCkKICAg ICAoaWYgKG9yIChtZW1xIChjaGFyLXN5bnRheCAob3IgKGNoYXItYWZ0ZXIpIDApKSBzeW50YXgt bGlzdCkKICAgICAgICAgICAgIChtZW1xIChjaGFyLXN5bnRheCAob3IgKGNoYXItYWZ0ZXIgKDEr IChwb2ludCkpKSAwKSkKICAgICAgICAgICAgICAgICAgIHN5bnRheC1saXN0KSkKCSAoZnVuY2Fs bCBmbiAxKQogICAgICAgKGlmIChvciBpc2VhcmNoLWZvcndhcmQgIChub3QgcmVzcGVjdC1kaXJl Y3Rpb24pKQogICAgICAgICAgIChmb3J3YXJkLWNoYXIgMSkKICAgICAgICAgKGJhY2t3YXJkLWNo YXIgMSkpKQogICAgIChwb2ludCkpCiAgIHJlc3BlY3QtZGlyZWN0aW9uKSkKCihkZWZ1biBpc2Vh cmNoLXlhbmstd29yZC1vci1jaGFyICgpCiAgIlB1bGwgY2hhcmFjdGVyIG9yIHdvcmQgZnJvbSBi dWZmZXIgaW50byBzZWFyY2ggc3RyaW5nLgpJZiBgaXNlYXJjaC1kaXJlY3Rpb25hbC15YW5rJyBp cyBub24tbmlsIHRoZW4geWFuayBuZXh0IG9uZSBmb3IKZm9yd2FyZCBzZWFyY2gsIHByZXZpb3Vz IG9uZSBmb3IgYmFja3dhcmQgc2VhcmNoLiIKICAoaW50ZXJhY3RpdmUpCiAgKGlmIChvciBpc2Vh cmNoLWZvcndhcmQgIChub3QgaXNlYXJjaC1kaXJlY3Rpb25hbC15YW5rKSkKICAgICAgKGlzZWFy Y2gtLXlhbmstY2hhci1vci1zeW50YXggJyg/dykgJ2ZvcndhcmQtd29yZCBpc2VhcmNoLWRpcmVj dGlvbmFsLXlhbmspCiAgICAoaXNlYXJjaC0teWFuay1jaGFyLW9yLXN5bnRheCAnKD93KSAnYmFj a3dhcmQtd29yZCAnUkVTUEVDVC1ESVJFQ1RJT04pKSkKCihkZWZ1biBpc2VhcmNoLXlhbmstd29y ZC1vci1jaGFyLWZvcndhcmQgKCkKICAiUHVsbCBuZXh0IGNoYXJhY3RlciBvciB3b3JkIGZyb20g YnVmZmVyIGludG8gc2VhcmNoIHN0cmluZy4iCiAgKGludGVyYWN0aXZlKQogIChpc2VhcmNoLS15 YW5rLWNoYXItb3Itc3ludGF4ICcoP3cpICdmb3J3YXJkLXdvcmQgaXNlYXJjaC1kaXJlY3Rpb25h bC15YW5rKSkKCihkZWZ1biBpc2VhcmNoLXlhbmstd29yZC1vci1jaGFyLWJhY2t3YXJkICgpCiAg IlB1bGwgcHJldmlvdXMgY2hhcmFjdGVyIG9yIHdvcmQgZnJvbSBidWZmZXIgaW50byBzZWFyY2gg c3RyaW5nLiIKICAoaW50ZXJhY3RpdmUpCiAgKGlzZWFyY2gtLXlhbmstY2hhci1vci1zeW50YXgg Jyg/dykgJ2JhY2t3YXJkLXdvcmQgJ1JFU1BFQ1QtRElSRUNUSU9OKSkKCihkZWZ1biBpc2VhcmNo LXlhbmstc3ltYm9sLW9yLWNoYXIgKCkKICAiUHVsbCBjaGFyYWN0ZXIgb3Igc3ltYm9sIGZyb20g YnVmZmVyIGludG8gc2VhcmNoIHN0cmluZy4KSWYgYGlzZWFyY2gtZGlyZWN0aW9uYWwteWFuaycg aXMgbm9uLW5pbCB0aGVuIHB1bGwgbmV4dCBvbmUgZm9yCmZvcndhcmQgc2VhcmNoLCBwcmV2aW91 cyBvbmUgZm9yIGJhY2t3YXJkIHNlYXJjaC4iCiAgKGludGVyYWN0aXZlKQogIChpZiAob3IgaXNl YXJjaC1mb3J3YXJkICAobm90IGlzZWFyY2gtZGlyZWN0aW9uYWwteWFuaykpCiAgICAgIChpc2Vh cmNoLS15YW5rLWNoYXItb3Itc3ludGF4ICcoP3cgP18pICdmb3J3YXJkLXN5bWJvbCBpc2VhcmNo LWRpcmVjdGlvbmFsLXlhbmspCiAgICAoaXNlYXJjaC0teWFuay1jaGFyLW9yLXN5bnRheCAnKD93 ID9fKSAnYmFja3dhcmQtc3ltYm9sICdSRVNQRUNULURJUkVDVElPTikpKQoKKGRlZnVuIGlzZWFy Y2gteWFuay13b3JkICgmb3B0aW9uYWwgYXJnKQogICJQdWxsIHdvcmQgZnJvbSBidWZmZXIgaW50 byBzZWFyY2ggc3RyaW5nLgpJZiBgaXNlYXJjaC1kaXJlY3Rpb25hbC15YW5rJyBpcyBub24tbmls IHRoZW4gcHVsbCBuZXh0IHdvcmQgZm9yCmZvcndhcmQgc2VhcmNoLCBwcmV2aW91cyB3b3JkIGZv ciBiYWNrd2FyZCBzZWFyY2guCgpXaXRoIGEgbnVtZXJpYyBwcmVmaXggQVJHLCBwdWxsIGluIEFS RyB3b3Jkcy4iCiAgKGludGVyYWN0aXZlICJwIikKICAoaXNlYXJjaC15YW5rLWludGVybmFsCiAg IChsYW1iZGEgKCkKICAgICAoZnVuY2FsbCAoaWYgKG9yIGlzZWFyY2gtZm9yd2FyZCAgKG5vdCBp c2VhcmNoLWRpcmVjdGlvbmFsLXlhbmspKQogICAgICAgICAgICAgICAgICAjJ2ZvcndhcmQtd29y ZAogICAgICAgICAgICAgICAgIydiYWNrd2FyZC13b3JkKQogICAgICAgICAgICAgIGFyZykKICAg ICAocG9pbnQpKQogICBpc2VhcmNoLWRpcmVjdGlvbmFsLXlhbmspKQoKKGRlZnVuIGlzZWFyY2gt eWFuay1saW5lICgmb3B0aW9uYWwgYXJnKQogICJQdWxsIHJlc3Qgb2YgbGluZSBmcm9tIGJ1ZmZl ciBpbnRvIHNlYXJjaCBzdHJpbmcuCklmIGBpc2VhcmNoLWRpcmVjdGlvbmFsLXlhbmsnIGlzIG5v bi1uaWwgdGhlbiBwdWxsIGluIHJlc3Qgb2YgbGluZSBpbgpzZWFyY2ggZGlyZWN0aW9uLgoKV2l0 aCBhIG51bWVyaWMgcHJlZml4IEFSRywgcHVsbCBpbiBBUkcgbGluZXMuIgogIChpbnRlcmFjdGl2 ZSAicCIpCiAgKGlmIChvciBpc2VhcmNoLWZvcndhcmQgIChub3QgaXNlYXJjaC1kaXJlY3Rpb25h bC15YW5rKSkKICAgICAgKGlzZWFyY2gteWFuay1saW5lLWZvcndhcmQgYXJnKQogICAgKGlzZWFy Y2gteWFuay1saW5lLWJhY2t3YXJkIGFyZykpKQoKKGRlZnVuIGlzZWFyY2gteWFuay1saW5lLWZv cndhcmQgKCZvcHRpb25hbCBhcmcpCiAgIlB1bGwgcmVzdCBvZiBsaW5lLCBnb2luZyBmb3J3YXJk LCBmcm9tIGJ1ZmZlciBpbnRvIHNlYXJjaCBzdHJpbmcuCldpdGggYSBudW1lcmljIHByZWZpeCBB UkcsIHB1bGwgaW4gdGhlIG5leHQgQVJHIGxpbmVzLiIKICAoaW50ZXJhY3RpdmUgInAiKQogIChp c2VhcmNoLXlhbmstaW50ZXJuYWwKICAgKGxhbWJkYSAoKQogICAgIChsZXQgKChpbmhpYml0LWZp ZWxkLXRleHQtbW90aW9uICB0KSkKICAgICAgIChsaW5lLWVuZC1wb3NpdGlvbiAoaWYgKGVvbHAp ICgxKyBhcmcpIGFyZykpKSkpKQoKKGRlZnVuIGlzZWFyY2gteWFuay1saW5lLWJhY2t3YXJkICgm b3B0aW9uYWwgYXJnKQogICJQdWxsIHJlc3Qgb2YgbGluZSwgZ29pbmcgYmFja3dhcmQsIGZyb20g YnVmZmVyIGludG8gc2VhcmNoIHN0cmluZy4KV2l0aCBhIG51bWVyaWMgcHJlZml4IEFSRywgcHVs bCBpbiB0aGUgcHJldmlvdXMgQVJHIGxpbmVzLiIKICAoaW50ZXJhY3RpdmUgInAiKQogIChpc2Vh cmNoLXlhbmstaW50ZXJuYWwKICAgKGxhbWJkYSAoKQogICAgIChsZXQgKChpbmhpYml0LWZpZWxk LXRleHQtbW90aW9uICB0KQoJICAgKGFyZzIgICAgICAgICAgICAgICAgICAgICAgICgtIDIgYXJn KSkpCiAgICAgICAobGluZS1iZWdpbm5pbmctcG9zaXRpb24gKGlmIChib2xwKSAoMS0gYXJnMikg YXJnMikpKSkKICAgJ1JFU1BFQ1QtRElSRUNUSU9OKSkKCihkZWZ1biBpc2VhcmNoLXlhbmstdW50 aWwtY2hhciAoY2hhcikKICAiUHVsbCBidWZmZXIgdGV4dCwgdXAgdG8gbmV4dCBpbnN0YW5jZSBv ZiBDSEFSLCBpbnRvIHNlYXJjaCBzdHJpbmcuCllvdSBhcmUgcHJvbXB0ZWQgZm9yIENIQVIuIgog IChpbnRlcmFjdGl2ZSAiY1lhbmsgdW50aWwgY2hhcmFjdGVyOiAiKQogIChpc2VhcmNoLXlhbmst aW50ZXJuYWwKICAgKGxhbWJkYSAoKQogICAgIChsZXQgKChpbmhpYml0LWZpZWxkLXRleHQtbW90 aW9uICB0KQogICAgICAgICAgIChmd2QgICAgICAgICAgICAgICAgICAgICAgICAob3IgaXNlYXJj aC1mb3J3YXJkICAobm90IGlzZWFyY2gtZGlyZWN0aW9uYWwteWFuaykpKSkKICAgICAgIChmdW5j YWxsIChpZiBmd2QKICAgICAgICAgICAgICAgICAgICAjJ3NlYXJjaC1mb3J3YXJkCiAgICAgICAg ICAgICAgICAgICMnc2VhcmNoLWJhY2t3YXJkKQoJCShjaGFyLXRvLXN0cmluZyBjaGFyKSkKICAg ICAgIChpZiBmd2QgKGJhY2t3YXJkLWNoYXIpIChmb3J3YXJkLWNoYXIpKQogICAgICAgKHBvaW50 KSkpCiAgIGlzZWFyY2gtZGlyZWN0aW9uYWwteWFuaykpCgooZGVmdW4gaXNlYXJjaC15YW5rLXVu dGlsLW1hdGNoIChhcmcpCiAgIlB1bGwgdGV4dCwgdGhyb3VnaCBtYXRjaCBmb3IgYW5vdGhlciBw YXR0ZXJuLCBpbnRvIHNlYXJjaCBzdHJpbmcuCllvdSBhcmUgcHJvbXB0ZWQgZm9yIHRoZSBwYXR0 ZXJuLgpXaXRoIGEgcHJlZml4IGFyZywgbWF0Y2ggdGhlIHBhdHRlcm4gYXMgYSByZWdleHAuIgog IChpbnRlcmFjdGl2ZSAiUCIpCiAgKGxldCAoKGZ3ZCAgKG9yIGlzZWFyY2gtZm9yd2FyZCAgKG5v dCBpc2VhcmNoLWRpcmVjdGlvbmFsLXlhbmspKSkKICAgICAgICBwYXR0ZXJuKQogICAgKHdpdGgt aXNlYXJjaC1zdXNwZW5kZWQKICAgICAoc2V0cSBwYXR0ZXJuICAoaWYgYXJnIChyZWFkLXJlZ2V4 cCAiTWF0Y2ggcmVnZXhwOiAiKSAocmVhZC1zdHJpbmcgIk1hdGNoOiAiKSkpKQogICAgKGlzZWFy Y2gteWFuay1pbnRlcm5hbAogICAgIChsYW1iZGEgKCkKICAgICAgIChsZXQgKChpbmhpYml0LWZp ZWxkLXRleHQtbW90aW9uICB0KSkKICAgICAgICAgKGZ1bmNhbGwgKGlmIGFyZwogICAgICAgICAg ICAgICAgICAgICAgKGlmIGZ3ZCAjJ3NlYXJjaC1mb3J3YXJkLXJlZ2V4cCAjJ3NlYXJjaC1iYWNr d2FyZC1yZWdleHApCiAgICAgICAgICAgICAgICAgICAgKGlmIGZ3ZCAjJ3NlYXJjaC1mb3J3YXJk ICMnc2VhcmNoLWJhY2t3YXJkKSkKICAgICAgICAgICAgICAgICAgcGF0dGVybikKICAgICAgICAg KHBvaW50KSkpCiAgICAgaXNlYXJjaC1kaXJlY3Rpb25hbC15YW5rKSkpCgooZGVmaW5lLWlzZWFy Y2gteWFuay1tb3ZlbWVudC1jb21tYW5kIGlzZWFyY2gteWFuay10by1rZXktZGVzdGluYXRpb24g KGtleSkKICAiQWRqdXN0IHNlYXJjaCB0byB1c2UgdGV4dCBmcm9tIHNlYXJjaCBoaXQgdGhyb3Vn aCBhIGtleSBkZXN0aW5hdGlvbi4KWW91IGFyZSBwcm9tcHRlZCBmb3IgYSBrZXkgc2VxdWVuY2Ug dGhhdCBtb3ZlcyB0aGUgY3Vyc29yLiAgVGhlIGtleQpjYW4gZG8gYW55dGhpbmcgZWxzZSBhcyB3 ZWxsLCBidXQgb25seSB0aGUgbmV3IGN1cnNvciBwb3NpdGlvbiBpcyB1c2VkCmJ5IHRoZSBjb21t YW5kLgoKSWYgaXQgbWFrZXMgc2Vuc2UgZm9yIHRoZSBrZXksIHlvdSBjYW4gdXNlIGEgcHJlZml4 IGFyZyB3aXRoIGBcXDxpc2VhcmNoLW1vZGUtbWFwPlwKXFxbaXNlYXJjaC15YW5rLXRvLWtleS1k ZXN0aW5hdGlvbl0nCnRvIGFwcGx5IHRoZSBwcmVmaXggYXJnIHRvIHRoZSBrZXkuICBGb3IgZXhh bXBsZSwgYEMtdSA1IFwKXFxbaXNlYXJjaC15YW5rLXRvLWtleS1kZXN0aW5hdGlvbl0gTS1mJwpt b3ZlcyB0aGUgY3Vyc29yIGZvcndhcmQgNSB3b3JkcyBhbmQgYWRqdXN0cyB0aGUgc2VhcmNoIHN0 cmluZwphY2NvcmRpbmdseS4KCklmIHRoZSBuZXcgcG9zaXRpb24gaXMgb3V0c2lkZSB0aGUgZXhp c3Rpbmcgc2VhcmNoIGhpdCB0aGVuIHRoZSB0ZXh0CmZyb20gdGhlIHNlYXJjaCBoaXQgdG8gdGhl IG5ldyBwb3NpdGlvbiBpcyBhZGRlZCB0byB0aGUgc2VhcmNoIHN0cmluZy4KSWYgdGhlIHBvc2l0 aW9uIGlzIGluc2lkZSB0aGUgaGl0LCB0aGVuIHRoZSB0ZXh0IGZyb20gdGhlIGVkZ2Ugb2YgdGhl CmhpdCB0aHJvdWdoIHRoZSBuZXcgcG9zaXRpb24gaXMgcmVtb3ZlZCBmcm9tIHRoZSBzZWFyY2gg c3RyaW5nLiIKICAoaW50ZXJhY3RpdmUgImtLZXkgc2VxdWVuY2UgKHRvIG1vdmUgY3Vyc29yKTog IikKICAoKGluaGliaXQtZmllbGQtdGV4dC1tb3Rpb24gIHQpCiAgIChpc2VhcmNoLW1vZGUtbWFw ICAgICAgICAgICBuaWwpCiAgIChjb21tYW5kICAgICAgICAgICAgICAgICAgICAoa2V5LWJpbmRp bmcga2V5IHQpKSkKICAoc2F2ZS1leGN1cnNpb24KICAgIChjYWxsLWludGVyYWN0aXZlbHkgY29t bWFuZCkKICAgIChzZXRxIGlzZWFyY2gtbmV3LXBvc2l0aW9uICAocG9pbnQpKSkpCgooZGVmaW5l LWlzZWFyY2gteWFuay1tb3ZlbWVudC1jb21tYW5kIGlzZWFyY2gteWFuay10aHJvdWdoLW1vdmUg KCkKICAiQWRqdXN0IHNlYXJjaCB0byB1c2UgdGV4dCBmcm9tIHNlYXJjaCBoaXQgdGhyb3VnaCBh IG5ldyBjdXJzb3IgcG9zaXRpb24uCllvdSBlbnRlciBhIHJlY3Vyc2l2ZSBlZGl0IHRvIG1vdmUg dGhlIGN1cnNvciBhbnkgd2F5IHlvdSBsaWtlLgpVc2UgXFxbZXhpdC1yZWN1cnNpdmUtZWRpdF0g dG8gcmVzdW1lIHNlYXJjaCB3aXRoIHRoZSBhZGp1c3RlZCBzZWFyY2ggc3RyaW5nLgoKSW4gdGhl IHJlY3Vyc2l2ZSBlZGl0IHlvdSBjYW4gZG8gYW55dGhpbmcsIGJ1dCB0aGUgZWZmZWN0IHVzZWQg YnkgdGhlCmNvbW1hbmQgaXMgb25seSBjdXJzb3IgbW92ZW1lbnQgdG8gYSBuZXcgcG9zaXRpb24u CgpJZiB0aGUgbmV3IHBvc2l0aW9uIGlzIG91dHNpZGUgdGhlIGV4aXN0aW5nIHNlYXJjaCBoaSx0 IHRoZW4gdGhlIHRleHQKZnJvbSB0aGUgc2VhcmNoIGhpdCB0byB0aGUgbmV3IHBvc2l0aW9uIGlz IGFkZGVkIHRvIHRoZSBzZWFyY2ggc3RyaW5nLgpJZiB0aGUgcG9zaXRpb24gaXMgaW5zaWRlIHRo ZSBoaXQsIHRoZW4gdGhlIHRleHQgZnJvbSB0aGUgZWRnZSBvZiB0aGUKaGl0IHRocm91Z2ggdGhl IG5ldyBwb3NpdGlvbiBpcyByZW1vdmVkIGZyb20gdGhlIHNlYXJjaCBzdHJpbmcuIgogIChpbnRl cmFjdGl2ZSkKICAoKQogICh3aXRoLWlzZWFyY2gtc3VzcGVuZGVkCiAgIChzYXZlLWV4Y3Vyc2lv bgogICAgIChtZXNzYWdlIChzdWJzdGl0dXRlLWNvbW1hbmQta2V5cwogICAgICAgICAgICAgICAi UkVDVVJTSVZFIGVkaXQuIGBcXFtleGl0LXJlY3Vyc2l2ZS1lZGl0XScgdG8gcmVzdW1lIElzZWFy Y2giKSkKICAgICAocmVjdXJzaXZlLWVkaXQpCiAgICAgKHNldHEgaXNlYXJjaC1uZXctcG9zaXRp b24gIChwb2ludCkpKSkpCgooZGVmdW4gaXNlYXJjaC1jaGFyLWJ5LW5hbWUgKCZvcHRpb25hbCBj b3VudCkKICAiUmVhZCBhIGNoYXJhY3RlciBieSBpdHMgVW5pY29kZSBuYW1lIGFuZCBhZGQgaXQg dG8gdGhlIHNlYXJjaCBzdHJpbmcuCkNvbXBsZXRpb24gaXMgYXZhaWxhYmxlIGxpa2UgaW4gYHJl YWQtY2hhci1ieS1uYW1lJyB1c2VkIGJ5IGBpbnNlcnQtY2hhcicuCldpdGggYXJndW1lbnQsIGFk ZCBDT1VOVCBjb3BpZXMgb2YgdGhlIGNoYXJhY3Rlci4iCiAgKGludGVyYWN0aXZlICJwIikKICAo d2l0aC1pc2VhcmNoLXN1c3BlbmRlZAogICAobGV0ICgoY2hhciAocmVhZC1jaGFyLWJ5LW5hbWUg IkFkZCBjaGFyYWN0ZXIgdG8gc2VhcmNoIChVbmljb2RlIG5hbWUgb3IgaGV4KTogIikpKQogICAg ICh3aGVuIGNoYXIKICAgICAgIChsZXQgKChzdHJpbmcgKGlmIChhbmQgKGludGVnZXJwIGNvdW50 KSAoPiBjb3VudCAxKSkKCQkJIChtYWtlLXN0cmluZyBjb3VudCBjaGFyKQoJCSAgICAgICAoY2hh ci10by1zdHJpbmcgY2hhcikpKSkKCSAoc2V0cSBpc2VhcmNoLW5ldy1zdHJpbmcgKGNvbmNhdCBp c2VhcmNoLXN0cmluZyBzdHJpbmcpCgkgICAgICAgaXNlYXJjaC1uZXctbWVzc2FnZSAoY29uY2F0 IGlzZWFyY2gtbWVzc2FnZQoJCQkJCSAgIChtYXBjb25jYXQgJ2lzZWFyY2gtdGV4dC1jaGFyLWRl c2NyaXB0aW9uCgkJCQkJCSAgICAgIHN0cmluZyAiIikpKSkpKSkpCgooZGVmdW4gaXNlYXJjaC1z ZWFyY2gtYW5kLXVwZGF0ZSAoKQogIDs7IERvIHRoZSBzZWFyY2ggYW5kIHVwZGF0ZSB0aGUgZGlz cGxheS4KICAod2hlbiAob3IgaXNlYXJjaC1zdWNjZXNzCgkgICAgOzsgVW5zdWNjZXNzZnVsIHJl Z2V4cCBzZWFyY2ggbWF5IGJlY29tZSBzdWNjZXNzZnVsIGJ5CgkgICAgOzsgYWRkaXRpb24gb2Yg Y2hhcmFjdGVycyB3aGljaCBtYWtlIGlzZWFyY2gtc3RyaW5nIHZhbGlkCgkgICAgaXNlYXJjaC1y ZWdleHAKCSAgICA7OyBJZiB0aGUgc3RyaW5nIHdhcyBmb3VuZCBidXQgd2FzIGNvbXBsZXRlbHkg aW52aXNpYmxlLAoJICAgIDs7IGl0IG1pZ2h0IG5vdyBiZSBwYXJ0bHkgdmlzaWJsZSwgc28gdHJ5 IGFnYWluLgoJICAgIChwcm9nMSBpc2VhcmNoLWhpZGRlbiAoc2V0cSBpc2VhcmNoLWhpZGRlbiBu aWwpKSkKICAgIDs7IEluIHJldmVyc2Ugc2VhcmNoLCBhZGRpbmcgc3R1ZmYgYXQKICAgIDs7IHRo ZSBlbmQgbWF5IGNhdXNlIHplcm8gb3IgbWFueSBtb3JlIGNoYXJzIHRvIGJlCiAgICA7OyBtYXRj aGVkLCBpbiB0aGUgc3RyaW5nIGZvbGxvd2luZyBwb2ludC4KICAgIDs7IEFsbG93IGFsbCB0aG9z ZSBwb3NzaWJpbGl0aWVzIHdpdGhvdXQgbW92aW5nIHBvaW50IGFzCiAgICA7OyBsb25nIGFzIHRo ZSBtYXRjaCBkb2VzIG5vdCBleHRlbmQgcGFzdCBzZWFyY2ggb3JpZ2luLgogICAgKGlmIChhbmQg KG5vdCBpc2VhcmNoLWZvcndhcmQpIChub3QgaXNlYXJjaC1hZGp1c3RlZCkKCSAgICAgKGNvbmRp dGlvbi1jYXNlICgpCgkJIChsZXQgKChjYXNlLWZvbGQtc2VhcmNoIGlzZWFyY2gtY2FzZS1mb2xk LXNlYXJjaCkpCgkJICAgKGlmIChhbmQgKGVxIGNhc2UtZm9sZC1zZWFyY2ggdCkgc2VhcmNoLXVw cGVyLWNhc2UpCgkJICAgICAgIChzZXRxIGNhc2UtZm9sZC1zZWFyY2gKCQkJICAgICAoaXNlYXJj aC1uby11cHBlci1jYXNlLXAgaXNlYXJjaC1zdHJpbmcgaXNlYXJjaC1yZWdleHApKSkKCQkgICAo bG9va2luZy1hdCAoY29uZAoJCQkJKChmdW5jdGlvbnAgaXNlYXJjaC1yZWdleHAtZnVuY3Rpb24p CgkJCQkgKGZ1bmNhbGwgaXNlYXJjaC1yZWdleHAtZnVuY3Rpb24gaXNlYXJjaC1zdHJpbmcgdCkp CgkJCQkoaXNlYXJjaC1yZWdleHAtZnVuY3Rpb24gKHdvcmQtc2VhcmNoLXJlZ2V4cCBpc2VhcmNo LXN0cmluZyB0KSkKCQkJCShpc2VhcmNoLXJlZ2V4cCBpc2VhcmNoLXN0cmluZykKCQkJCSh0IChy ZWdleHAtcXVvdGUgaXNlYXJjaC1zdHJpbmcpKSkpKQoJICAgICAgIChlcnJvciBuaWwpKQoJICAg ICAob3IgaXNlYXJjaC15YW5rLWZsYWcKCQkgKDw9IChtYXRjaC1lbmQgMCkKCQkgICAgIChtaW4g aXNlYXJjaC1vcG9pbnQgaXNlYXJjaC1iYXJyaWVyKSkpKQoJKHByb2duCgkgIChzZXRxIGlzZWFy Y2gtc3VjY2VzcyB0CgkJaXNlYXJjaC1lcnJvciBuaWwKCQlpc2VhcmNoLW90aGVyLWVuZCAobWF0 Y2gtZW5kIDApKQoJICAoaWYgKGFuZCAoZXEgaXNlYXJjaC1jYXNlLWZvbGQtc2VhcmNoIHQpIHNl YXJjaC11cHBlci1jYXNlKQoJICAgICAgKHNldHEgaXNlYXJjaC1jYXNlLWZvbGQtc2VhcmNoCgkJ ICAgIChpc2VhcmNoLW5vLXVwcGVyLWNhc2UtcCBpc2VhcmNoLXN0cmluZyBpc2VhcmNoLXJlZ2V4 cCkpKSkKICAgICAgOzsgTm90IHJlZ2V4cCwgbm90IHJldmVyc2UsIG9yIG5vIG1hdGNoIGF0IHBv aW50LgogICAgICA7OyBEbyB0aGUgZm9sbG93aW5nIGJlZm9yZSBtb3ZpbmcgcG9pbnQuCiAgICAg IChmdW5jYWxsIChvciBpc2VhcmNoLW1lc3NhZ2UtZnVuY3Rpb24gIydpc2VhcmNoLW1lc3NhZ2Up IG5pbCB0KQogICAgICAoaWYgKGFuZCBpc2VhcmNoLW90aGVyLWVuZCAobm90IGlzZWFyY2gtYWRq dXN0ZWQpKQoJICAoZ290by1jaGFyIChpZiBpc2VhcmNoLWZvcndhcmQgaXNlYXJjaC1vdGhlci1l bmQKCQkgICAgICAgKG1pbiBpc2VhcmNoLW9wb2ludAoJCQkgICAgaXNlYXJjaC1iYXJyaWVyCgkJ CSAgICAoMSsgaXNlYXJjaC1vdGhlci1lbmQpKSkpKQogICAgICAoaXNlYXJjaC1zZWFyY2gpCiAg ICAgICkpCiAgKGlzZWFyY2gtcHVzaC1zdGF0ZSkKICAoaWYgaXNlYXJjaC1vcC1mdW4gKGZ1bmNh bGwgaXNlYXJjaC1vcC1mdW4pKQogIChpc2VhcmNoLXVwZGF0ZSkpCgoKOzsgKiwgPywgfSwgYW5k IHwgY2hhcnMgY2FuIG1ha2UgYSByZWdleHAgbW9yZSBsaWJlcmFsLgo7OyBUaGV5IGNhbiBtYWtl IGEgcmVnZXhwIG1hdGNoIHNvb25lciBvciBtYWtlIGl0IHN1Y2NlZWQgaW5zdGVhZCBvZiBmYWls aW5nLgo7OyBTbyBnbyBiYWNrIHRvIHBsYWNlIGxhc3Qgc3VjY2Vzc2Z1bCBzZWFyY2ggc3RhcnRl ZAo7OyBvciB0byB0aGUgbGFzdCBeUy9eUiAoYmFycmllciksIHdoaWNoZXZlciBpcyBuZWFyZXIu Cjs7ICsgbmVlZHMgbm8gc3BlY2lhbCBoYW5kbGluZyBiZWNhdXNlIHRoZSBzdHJpbmcgbXVzdCBt YXRjaCBhdCBsZWFzdCBvbmNlLgoKKGRlZnVuIGlzZWFyY2gtYmFja3NsYXNoIChzdHIpCiAgIlJl dHVybiB0IGlmIFNUUiBlbmRzIGluIGFuIG9kZCBudW1iZXIgb2YgYmFja3NsYXNoZXMuIgogICg9 IChtb2QgKC0gKGxlbmd0aCBzdHIpIChzdHJpbmctbWF0Y2ggIlxcXFwqXFwnIiBzdHIpKSAyKSAx KSkKCihkZWZ1biBpc2VhcmNoLWZhbGxiYWNrICh3YW50LWJhY2tzbGFzaCAmb3B0aW9uYWwgYWxs b3ctaW52YWxpZCB0by1iYXJyaWVyKQogICJSZXR1cm4gcG9pbnQgdG8gcHJldmlvdXMgc3VjY2Vz c2Z1bCBtYXRjaCB0byBhbGxvdyByZWdleHAgbGliZXJhbGl6YXRpb24uClxcPGlzZWFyY2gtbW9k ZS1tYXA+ClJlc3BlY3RzIFxcW2lzZWFyY2gtcmVwZWF0LWZvcndhcmRdIGFuZCBcXFtpc2VhcmNo LXJlcGVhdC1iYWNrd2FyZF0gYnkgXApzdG9wcGluZyBhdCBgaXNlYXJjaC1iYXJyaWVyJyBhcyBu ZWVkZWQuCgpEbyBub3RoaW5nIGlmIGEgYmFja3NsYXNoIGlzIGVzY2FwaW5nIHRoZSBsaWJlcmFs aXppbmcgY2hhcmFjdGVyLgpJZiBXQU5ULUJBQ0tTTEFTSCBpcyBub24tbmlsLCBpbnZlcnQgdGhp cyBiZWhhdmlvciAoZm9yIFxcfSBhbmQgXFx8KS4KCkRvIG5vdGhpbmcgaWYgcmVnZXhwIGhhcyBy ZWNlbnRseSBiZWVuIGludmFsaWQgdW5sZXNzIG9wdGlvbmFsCkFMTE9XLUlOVkFMSUQgbm9uLW5p bC4KCklmIG9wdGlvbmFsIFRPLUJBUlJJRVIgbm9uLW5pbCwgaWdub3JlIHByZXZpb3VzIG1hdGNo ZXMgYW5kIGdvIGV4YWN0bHkKdG8gdGhlIGJhcnJpZXIuIgogIDs7IChlcSAobm90IGEpIChub3Qg YikpIG1ha2VzIGFsbCBub24tbmlsIHZhbHVlcyBlcXVpdmFsZW50CiAgKHdoZW4gKGFuZCBpc2Vh cmNoLXJlZ2V4cCAoZXEgKG5vdCAoaXNlYXJjaC1iYWNrc2xhc2ggaXNlYXJjaC1zdHJpbmcpKQoJ CQkJKG5vdCB3YW50LWJhY2tzbGFzaCkpCgkgICAgIDs7IFdlIGhhdmUgdG8gY2hlY2sgMiBzdGFj ayBmcmFtZXMgYmVjYXVzZSB0aGUgbGFzdCBtaWdodCBiZQoJICAgICA7OyBpbnZhbGlkIGp1c3Qg YmVjYXVzZSBvZiBhIGJhY2tzbGFzaC4KCSAgICAgKG9yIChub3QgaXNlYXJjaC1lcnJvcikKCQkg KG5vdCAoaXNlYXJjaC0tc3RhdGUtZXJyb3IgKGNhZHIgaXNlYXJjaC1jbWRzKSkpCgkJIGFsbG93 LWludmFsaWQpKQogICAgKGlmIHRvLWJhcnJpZXIKCShwcm9nbiAoZ290by1jaGFyIGlzZWFyY2gt YmFycmllcikKCSAgICAgICAoc2V0cSBpc2VhcmNoLWFkanVzdGVkIHQpKQogICAgICAobGV0KiAo KHN0YWNrIGlzZWFyY2gtY21kcykKCSAgICAgKHByZXZpb3VzIChjZHIgc3RhY2spKQk7IGxvb2ti ZWxvdyBpbiB0aGUgc3RhY2sKCSAgICAgKGZyYW1lIChjYXIgc3RhY2spKSkKCTs7IFdhbGsgZG93 biB0aGUgc3RhY2sgbG9va2luZyBmb3IgYSB2YWxpZCByZWdleHAgKGFzIG9mIGNvdXJzZSBvbmx5 Cgk7OyB0aGV5IGNhbiBiZSB0aGUgcHJldmlvdXMgc3VjY2Vzc2Z1bCBtYXRjaCk7IHRoaXMgY29u dmVuaWVudGx5Cgk7OyByZW1vdmVzIGFsbCBicmFja2V0LXNldHMgYW5kIGdyb3VwcyB0aGF0IG1p Z2h0IGJlIGluIHRoZSB3YXksIGFzCgk7OyB3ZWxsIGFzIHBhcnRpYWwgXHtcfSBjb25zdHJ1Y3Rz IHRoYXQgdGhlIGNvZGUgYmVsb3cgbGVhdmVzIGJlaGluZC4KCTs7IEFsc28gc2tpcCBvdmVyIHBv c3RmaXggb3BlcmF0b3JzIC0tIHRob3VnaCBob3JyaWQsCgk7OyAnYWI/XHs1LDZcfStcezEsMlx9 KicgaXMgcGVyZmVjdGx5IHZhbGlkLgoJKHdoaWxlIChhbmQgcHJldmlvdXMKCQkgICAgKG9yIChp c2VhcmNoLS1zdGF0ZS1lcnJvciBmcmFtZSkKCQkJKGxldCogKChzdHJpbmcgKGlzZWFyY2gtLXN0 YXRlLXN0cmluZyBmcmFtZSkpCgkJCSAgICAgICAobGNoYXIgKGFyZWYgc3RyaW5nICgxLSAobGVu Z3RoIHN0cmluZykpKSkpCgkJCSAgOzsgVGhlIG9wZXJhdG9ycyBhcmVuJ3QgYWx3YXlzIG9wZXJh dG9yczsgY2hlY2sKCQkJICA7OyBiYWNrc2xhc2hlcy4gIFRoaXMgZG9lc24ndCBoYW5kbGUgdGhl IGNhc2Ugb2YKCQkJICA7OyBvcGVyYXRvcnMgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgcmVnZXhw IG5vdAoJCQkgIDs7IGJlaW5nIHNwZWNpYWwsIGJ1dCB0aGVuIHdlIHNob3VsZCBmYWxsIGJhY2sg dG8KCQkJICA7OyB0aGUgYmFycmllciBhbnl3YXkgYmVjYXVzZSBpdCdzIGFsbCBvcHRpb25hbC4K CQkJICAoaWYgKGlzZWFyY2gtYmFja3NsYXNoCgkJCSAgICAgICAoaXNlYXJjaC0tc3RhdGUtc3Ry aW5nIChjYXIgcHJldmlvdXMpKSkKCQkJICAgICAgKGVxIGxjaGFyID9cfSkKCQkJICAgIChtZW1x IGxjaGFyICcoPyogPz8gPyspKSkpKSkKCSAgKHNldHEgc3RhY2sgcHJldmlvdXMgcHJldmlvdXMg KGNkciBwcmV2aW91cykgZnJhbWUgKGNhciBzdGFjaykpKQoJKHdoZW4gc3RhY2sKCSAgOzsgYHN0 YWNrJyBub3cgcmVmZXJzIHRoZSBtb3N0IHJlY2VudCB2YWxpZCByZWdleHAgdGhhdCBpcyBub3Qg YXQKCSAgOzsgYWxsIG9wdGlvbmFsIGluIGl0cyBsYXN0IHRlcm0uICBOb3cgZGlnIG9uZSBsZXZl bCBkZWVwZXIgYW5kIGZpbmQKCSAgOzsgd2hhdCBtYXRjaGVkIGJlZm9yZSB0aGF0LgoJICAobGV0 ICgobGFzdC1vdGhlci1lbmQKCQkgKG9yIChhbmQgKGNhciBwcmV2aW91cykKCQkJICAoaXNlYXJj aC0tc3RhdGUtb3RoZXItZW5kIChjYXIgcHJldmlvdXMpKSkKCQkgICAgIGlzZWFyY2gtYmFycmll cikpKQoJICAgIChnb3RvLWNoYXIgKGlmIGlzZWFyY2gtZm9yd2FyZAoJCQkgICAobWF4IGxhc3Qt b3RoZXItZW5kIGlzZWFyY2gtYmFycmllcikKCQkJIChtaW4gbGFzdC1vdGhlci1lbmQgaXNlYXJj aC1iYXJyaWVyKSkpCgkgICAgKHNldHEgaXNlYXJjaC1hZGp1c3RlZCB0KSkpKSkpKQoKOzs7Ozs7 Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7 Ozs7Ozs7Ozs7Ozs7Ozs7OzsKOzsgc2Nyb2xsaW5nIHdpdGhpbiBJc2VhcmNoIG1vZGUuICBBbGFu IE1hY2tlbnppZSAoYWNtQG11Yy5kZSksIDIwMDMvMi8yNAo7Owo7OyBUaGUgaWRlYSBoZXJlIGlz IHRoYXQgY2VydGFpbiB2ZXJ0aWNhbCBzY3JvbGxpbmcgY29tbWFuZHMgKGxpa2UgQy1sCjs7IGBy ZWNlbnRlcicpIHNob3VsZCBiZSB1c2FibGUgV0lUSElOIElzZWFyY2ggbW9kZS4gIEZvciBhIGNv bW1hbmQgdG8gYmUKOzsgc3VpdGFibGUsIGl0IG11c3QgTk9UIGFsdGVyIHRoZSBidWZmZXIsIHN3 YXAgdG8gYW5vdGhlciBidWZmZXIgb3IgZnJhbWUsCjs7IHRhbXBlciB3aXRoIGlzZWFyY2gncyBz dGF0ZSwgb3IgbW92ZSBwb2ludC4gIEl0IGlzIHVuYWNjZXB0YWJsZSBmb3IgdGhlCjs7IHNlYXJj aCBzdHJpbmcgdG8gYmUgc2Nyb2xsZWQgb3V0IG9mIHRoZSBjdXJyZW50IHdpbmRvdy4gIElmIGEg Y29tbWFuZAo7OyBhdHRlbXB0cyB0aGlzLCB3ZSBzY3JvbGwgdGhlIHRleHQgYmFjayBhZ2Fpbi4K OzsKOzsgV2UgaW1wbGVtZW50IHRoaXMgZmVhdHVyZSB3aXRoIGEgcHJvcGVydHkgY2FsbGVkIGBp c2VhcmNoLXNjcm9sbCcuCjs7IElmIGEgY29tbWFuZCdzIHN5bWJvbCBoYXMgdGhlIHZhbHVlIHQg Zm9yIHRoaXMgcHJvcGVydHkgb3IgZm9yIHRoZQo7OyBgc2Nyb2xsLWNvbW1hbmQnIHByb3BlcnR5 LCBpdCBpcyBhIHNjcm9sbGluZyBjb21tYW5kLiAgVGhlIGZlYXR1cmUKOzsgbmVlZHMgdG8gYmUg ZW5hYmxlZCBieSBzZXR0aW5nIHRoZSBjdXN0b21pemFibGUgdmFyaWFibGUKOzsgYGlzZWFyY2gt YWxsb3ctc2Nyb2xsJyB0byBhIG5vbi1uaWwgdmFsdWUuCjs7Cjs7IFRoZSB1bml2ZXJzYWwgYXJn dW1lbnQgY29tbWFuZHMgKGUuZy4gQy11KSBpbiBzaW1wbGUuZWwgYXJlIG1hcmtlZAo7OyBhcyBz Y3JvbGxpbmcgY29tbWFuZHMsIGFuZCBpc2VhcmNoLmVsIGhhcyBiZWVuIGFtZW5kZWQgdG8gYWxs b3cKOzsgcHJlZml4IGFyZ3VtZW50cyB0byBiZSBwYXNzZWQgdGhyb3VnaCB0byBzY3JvbGxpbmcg Y29tbWFuZHMuICBUaHVzCjs7IE0tMCBDLWwgd2lsbCBzY3JvbGwgcG9pbnQgdG8gdGhlIHRvcCBv ZiB0aGUgd2luZG93Lgo7Owo7OyBIb3Jpem9udGFsIHNjcm9sbGluZyBjb21tYW5kcyBhcmUgY3Vy cmVudGx5IG5vdCBjYXRlcmVkIGZvci4KOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7 Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OzsKCjs7IFNldCB0 aGUgaXNlYXJjaC1zY3JvbGwgcHJvcGVydHkgb24gc29tZSBzdGFuZGFyZCBmdW5jdGlvbnM6Cjs7 IFNjcm9sbC1iYXIgZnVuY3Rpb25zOgooaWYgKGZib3VuZHAgJ3Njcm9sbC1iYXItdG9vbGtpdC1z Y3JvbGwpCiAgICAocHV0ICdzY3JvbGwtYmFyLXRvb2xraXQtc2Nyb2xsICdpc2VhcmNoLXNjcm9s bCB0KSkKKGlmIChmYm91bmRwICd3MzItaGFuZGxlLXNjcm9sbC1iYXItZXZlbnQpCiAgICAocHV0 ICd3MzItaGFuZGxlLXNjcm9sbC1iYXItZXZlbnQgJ2lzZWFyY2gtc2Nyb2xsIHQpKQoKOzsgQ29t bWFuZHMgd2hpY2ggc2Nyb2xsIHRoZSB3aW5kb3cgKHNvbWUgc2Nyb2xsIGNvbW1hbmRzCjs7IGFs cmVhZHkgaGF2ZSB0aGUgYHNjcm9sbC1jb21tYW5kJyBwcm9wZXJ0eSBvbiB0aGVtKToKKHB1dCAn cmVjZW50ZXIgJ2lzZWFyY2gtc2Nyb2xsIHQpCihwdXQgJ3JlY2VudGVyLXRvcC1ib3R0b20gJ2lz ZWFyY2gtc2Nyb2xsIHQpCihwdXQgJ3JlcG9zaXRpb24td2luZG93ICdpc2VhcmNoLXNjcm9sbCB0 KQoKOzsgQ29tbWFuZHMgd2hpY2ggYWN0IG9uIHRoZSBvdGhlciB3aW5kb3cKKHB1dCAnbGlzdC1i dWZmZXJzICdpc2VhcmNoLXNjcm9sbCB0KQoocHV0ICdzY3JvbGwtb3RoZXItd2luZG93ICdpc2Vh cmNoLXNjcm9sbCB0KQoocHV0ICdzY3JvbGwtb3RoZXItd2luZG93LWRvd24gJ2lzZWFyY2gtc2Ny b2xsIHQpCihwdXQgJ2JlZ2lubmluZy1vZi1idWZmZXItb3RoZXItd2luZG93ICdpc2VhcmNoLXNj cm9sbCB0KQoocHV0ICdlbmQtb2YtYnVmZmVyLW90aGVyLXdpbmRvdyAnaXNlYXJjaC1zY3JvbGwg dCkKCjs7IENvbW1hbmRzIHdoaWNoIGNoYW5nZSB0aGUgd2luZG93IGxheW91dAoocHV0ICdkZWxl dGUtb3RoZXItd2luZG93cyAnaXNlYXJjaC1zY3JvbGwgdCkKKHB1dCAnYmFsYW5jZS13aW5kb3dz ICdpc2VhcmNoLXNjcm9sbCB0KQoocHV0ICdzcGxpdC13aW5kb3ctcmlnaHQgJ2lzZWFyY2gtc2Ny b2xsIHQpCihwdXQgJ3NwbGl0LXdpbmRvdy1iZWxvdyAnaXNlYXJjaC1zY3JvbGwgdCkKKHB1dCAn ZW5sYXJnZS13aW5kb3cgJ2lzZWFyY2gtc2Nyb2xsIHQpCihwdXQgJ2VubGFyZ2Utd2luZG93LWhv cml6b250YWxseSAnaXNlYXJjaC1zY3JvbGwgdCkKKHB1dCAnc2hyaW5rLXdpbmRvdy1ob3Jpem9u dGFsbHkgJ2lzZWFyY2gtc2Nyb2xsIHQpCihwdXQgJ3Nocmluay13aW5kb3cgJ2lzZWFyY2gtc2Ny b2xsIHQpCjs7IFRoZSBuZXh0IHR3byBjb21tYW5kcyBkb24ndCBleGl0IElzZWFyY2ggaW4gaXNl YXJjaC1tb3VzZS1sZWF2ZS1idWZmZXIKKHB1dCAnbW91c2UtZHJhZy1tb2RlLWxpbmUgJ2lzZWFy Y2gtc2Nyb2xsIHQpCihwdXQgJ21vdXNlLWRyYWctdmVydGljYWwtbGluZSAnaXNlYXJjaC1zY3Jv bGwgdCkKCjs7IEFsaWFzZXMgZm9yIHNwbGl0LXdpbmRvdy0qCihwdXQgJ3NwbGl0LXdpbmRvdy12 ZXJ0aWNhbGx5ICdpc2VhcmNoLXNjcm9sbCB0KQoocHV0ICdzcGxpdC13aW5kb3ctaG9yaXpvbnRh bGx5ICdpc2VhcmNoLXNjcm9sbCB0KQoKOzsgVW5pdmVyc2FsIGFyZ3VtZW50IGNvbW1hbmRzCihw dXQgJ3VuaXZlcnNhbC1hcmd1bWVudCAnaXNlYXJjaC1zY3JvbGwgdCkKKHB1dCAndW5pdmVyc2Fs LWFyZ3VtZW50LW1vcmUgJ2lzZWFyY2gtc2Nyb2xsIHQpCihwdXQgJ25lZ2F0aXZlLWFyZ3VtZW50 ICdpc2VhcmNoLXNjcm9sbCB0KQoocHV0ICdkaWdpdC1hcmd1bWVudCAnaXNlYXJjaC1zY3JvbGwg dCkKCihkZWZjdXN0b20gaXNlYXJjaC1hbGxvdy1zY3JvbGwgbmlsCiAgIldoZXRoZXIgc2Nyb2xs aW5nIGlzIGFsbG93ZWQgZHVyaW5nIGluY3JlbWVudGFsIHNlYXJjaC4KSWYgbm9uLW5pbCwgc2Ny b2xsaW5nIGNvbW1hbmRzIGNhbiBiZSB1c2VkIGluIElzZWFyY2ggbW9kZS4KSG93ZXZlciwgeW91 IGNhbm5vdCBzY3JvbGwgZmFyIGVub3VnaCB0aGF0IHRoZSBjdXJyZW50IG1hdGNoIGlzCm5vIGxv bmdlciB2aXNpYmxlIChpcyBvZmYgc2NyZWVuKS4gIEJ1dCBpZiB0aGUgdmFsdWUgaXMgYHVubGlt aXRlZCcKdGhhdCBsaW1pdGF0aW9uIGlzIHJlbW92ZWQgYW5kIHlvdSBjYW4gc2Nyb2xsIGFueSBk aXN0YW5jZSBvZmYgc2NyZWVuLgpJZiBuaWwsIHNjcm9sbGluZyBjb21tYW5kcyBleGl0IElzZWFy Y2ggbW9kZS4iCiAgOnR5cGUgJyhjaG9pY2UgKGNvbnN0IDp0YWcgIlNjcm9sbGluZyBleGl0cyBJ c2VhcmNoIiBuaWwpCiAgICAgICAgICAgICAgICAgKGNvbnN0IDp0YWcgIlNjcm9sbGluZyB3aXRo IGN1cnJlbnQgbWF0Y2ggb24gc2NyZWVuIiB0KQogICAgICAgICAgICAgICAgIChjb25zdCA6dGFn ICJTY3JvbGxpbmcgd2l0aCBjdXJyZW50IG1hdGNoIG9mZiBzY3JlZW4iIHVubGltaXRlZCkpCiAg Omdyb3VwICdpc2VhcmNoKQoKKGRlZmN1c3RvbSBpc2VhcmNoLWFsbG93LXByZWZpeCB0CiAgIldo ZXRoZXIgcHJlZml4IGFyZ3VtZW50cyBhcmUgYWxsb3dlZCBkdXJpbmcgaW5jcmVtZW50YWwgc2Vh cmNoLgpJZiBub24tbmlsLCBlbnRlcmluZyBhIHByZWZpeCBhcmd1bWVudCB3aWxsIG5vdCB0ZXJt aW5hdGUgdGhlCnNlYXJjaC4gIFRoaXMgb3B0aW9uIGlzIGlnbm9yZWQgXChwcmVzdW1lZCB0KSB3 aGVuCmBpc2VhcmNoLWFsbG93LXNjcm9sbCcgaXMgc2V0LiIKICA6dmVyc2lvbiAiMjQuNCIKICA6 dHlwZSAnYm9vbGVhbgogIDpncm91cCAnaXNlYXJjaCkKCihkZWZ1biBpc2VhcmNoLXN0cmluZy1v dXQtb2Ytd2luZG93IChpc2VhcmNoLXBvaW50KQogICJUZXN0IHdoZXRoZXIgdGhlIHNlYXJjaCBz dHJpbmcgaXMgY3VycmVudGx5IG91dHNpZGUgb2YgdGhlIHdpbmRvdy4KUmV0dXJuIG5pbCBpZiBp dCdzIGNvbXBsZXRlbHkgdmlzaWJsZSwgb3IgaWYgcG9pbnQgaXMgdmlzaWJsZSwKdG9nZXRoZXIg d2l0aCBhcyBtdWNoIG9mIHRoZSBzZWFyY2ggc3RyaW5nIGFzIHdpbGwgZml0OyB0aGUgc3ltYm9s CmBhYm92ZScgaWYgd2UgbmVlZCB0byBzY3JvbGwgdGhlIHRleHQgZG93bndhcmRzOyB0aGUgc3lt Ym9sIGBiZWxvdycsCmlmIHVwd2FyZHMuIgogIChsZXQgKCh3LXN0YXJ0ICh3aW5kb3ctZ3JvdXAt c3RhcnQpKQogICAgICAgICh3LWVuZCAod2luZG93LWdyb3VwLWVuZCBuaWwgdCkpCiAgICAgICAg KHctTDEgKHNhdmUtZXhjdXJzaW9uCiAgICAgICAgICAgICAgICAoc2F2ZS1zZWxlY3RlZC13aW5k b3cgKG1vdmUtdG8td2luZG93LWdyb3VwLWxpbmUgMSkgKHBvaW50KSkpKQogICAgICAgICh3LUwt MSAoc2F2ZS1leGN1cnNpb24KICAgICAgICAgICAgICAgICAoc2F2ZS1zZWxlY3RlZC13aW5kb3cg KG1vdmUtdG8td2luZG93LWdyb3VwLWxpbmUgLTEpIChwb2ludCkpKSkKICAgICAgICBzdGFydCBl bmQpICAgICAgICAgICAgICAgICAgOyBzdGFydCBhbmQgZW5kIG9mIHNlYXJjaCBzdHJpbmcgaW4g YnVmZmVyCiAgICAoaWYgaXNlYXJjaC1mb3J3YXJkCiAgICAgICAgKHNldHEgZW5kIGlzZWFyY2gt cG9pbnQgIHN0YXJ0IChvciBpc2VhcmNoLW90aGVyLWVuZCBpc2VhcmNoLXBvaW50KSkKICAgICAg KHNldHEgc3RhcnQgaXNlYXJjaC1wb2ludCAgZW5kIChvciBpc2VhcmNoLW90aGVyLWVuZCBpc2Vh cmNoLXBvaW50KSkpCiAgICAoY29uZCAoKG9yIChhbmQgKD49IHN0YXJ0IHctc3RhcnQpICg8PSBl bmQgdy1lbmQpKQogICAgICAgICAgICAgICAoaWYgaXNlYXJjaC1mb3J3YXJkCiAgICAgICAgICAg ICAgICAgICAoYW5kICg+PSBpc2VhcmNoLXBvaW50IHctTC0xKSAoPCBpc2VhcmNoLXBvaW50IHct ZW5kKSkgOyBwb2ludCBvbiBMaW5lIC0xCiAgICAgICAgICAgICAgICAgKGFuZCAoPj0gaXNlYXJj aC1wb2ludCB3LXN0YXJ0KSAoPCBpc2VhcmNoLXBvaW50IHctTDEpKSkpIDsgcG9pbnQgb24gTGlu ZSAwCiAgICAgICAgICAgbmlsKQogICAgICAgICAgKChhbmQgKDwgc3RhcnQgdy1zdGFydCkKICAg ICAgICAgICAgICAgICg8IGlzZWFyY2gtcG9pbnQgdy1MLTEpKQogICAgICAgICAgICdhYm92ZSkK ICAgICAgICAgICh0ICdiZWxvdykpKSkKCihkZWZ1biBpc2VhcmNoLWJhY2staW50by13aW5kb3cg KGFib3ZlIGlzZWFyY2gtcG9pbnQpCiAgIlNjcm9sbCB0aGUgd2luZG93IHRvIGJyaW5nIHRoZSBz ZWFyY2ggc3RyaW5nIGJhY2sgaW50byB2aWV3LgpSZXN0b3JlIHBvaW50IHRvIElTRUFSQ0gtUE9J TlQgaW4gdGhlIHByb2Nlc3MuICBBQk9WRSBpcyB0IHdoZW4gdGhlCnNlYXJjaCBzdHJpbmcgaXMg YWJvdmUgdGhlIHRvcCBvZiB0aGUgd2luZG93LCBuaWwgd2hlbiBpdCBpcyBiZW5lYXRoCnRoZSBi b3R0b20uIgogIChsZXQgKHN0YXJ0IGVuZCkKICAgIChpZiBpc2VhcmNoLWZvcndhcmQKICAgICAg ICAoc2V0cSBlbmQgaXNlYXJjaC1wb2ludCAgc3RhcnQgKG9yIGlzZWFyY2gtb3RoZXItZW5kIGlz ZWFyY2gtcG9pbnQpKQogICAgICAoc2V0cSBzdGFydCBpc2VhcmNoLXBvaW50ICBlbmQgKG9yIGlz ZWFyY2gtb3RoZXItZW5kIGlzZWFyY2gtcG9pbnQpKSkKICAgIChpZiBhYm92ZQogICAgICAgIChw cm9nbgogICAgICAgICAgKGdvdG8tY2hhciBzdGFydCkKICAgICAgICAgIChyZWNlbnRlci13aW5k b3ctZ3JvdXAgMCkKICAgICAgICAgICh3aGVuICg+PSBpc2VhcmNoLXBvaW50ICh3aW5kb3ctZ3Jv dXAtZW5kIG5pbCB0KSkKICAgICAgICAgICAgKGdvdG8tY2hhciBpc2VhcmNoLXBvaW50KQogICAg ICAgICAgICAocmVjZW50ZXItd2luZG93LWdyb3VwIC0xKSkpCiAgICAgIChnb3RvLWNoYXIgZW5k KQogICAgICAocmVjZW50ZXItd2luZG93LWdyb3VwIC0xKQogICAgICAod2hlbiAoPCBpc2VhcmNo LXBvaW50ICh3aW5kb3ctZ3JvdXAtc3RhcnQpKQogICAgICAgIChnb3RvLWNoYXIgaXNlYXJjaC1w b2ludCkKICAgICAgICAocmVjZW50ZXItd2luZG93LWdyb3VwIDApKSkpCiAgKGdvdG8tY2hhciBp c2VhcmNoLXBvaW50KSkKCihkZWZ2YXIgaXNlYXJjaC1wcmUtc2Nyb2xsLXBvaW50IG5pbCkKKGRl ZnZhciBpc2VhcmNoLXByZS1tb3ZlLXBvaW50IG5pbCkKCihkZWZjdXN0b20gaXNlYXJjaC15YW5r LW9uLW1vdmUgbmlsCiAgIk1vdGlvbiBrZXlzIHlhbmsgdGV4dCB0byB0aGUgc2VhcmNoIHN0cmlu ZyB3aGlsZSB5b3UgbW92ZSB0aGUgY3Vyc29yLgpJZiBgc2hpZnQnLCBleHRlbmQgdGhlIHNlYXJj aCBzdHJpbmcgYnkgbW90aW9uIGNvbW1hbmRzIHdoaWxlIGhvbGRpbmcgZG93bgp0aGUgc2hpZnQg a2V5LiAgVGhlIHNlYXJjaCBzdHJpbmcgaXMgZXh0ZW5kZWQgYnkgeWFua2luZyB0ZXh0IHRoYXQK ZW5kcyBhdCB0aGUgbmV3IHBvc2l0aW9uIGFmdGVyIG1vdmluZyBwb2ludCBpbiB0aGUgY3VycmVu dCBidWZmZXIuCklmIHQsIGV4dGVuZCB0aGUgc2VhcmNoIHN0cmluZyB3aXRob3V0IHRoZSBzaGlm dCBrZXkgcHJlc3NlZC4KVG8gZW5hYmxlIG1vdGlvbiBjb21tYW5kcywgcHV0IHRoZSBgaXNlYXJj aC1tb3ZlJyBwcm9wZXJ0eSBvbiB0aGVpcgpzeW1ib2xzIHRvIGBlbmFibGVkJywgb3IgdG8gZGlz YWJsZSBhbiBhdXRvbWF0aWNhbGx5IGRldGVjdGVkCnNoaWZ0LXRyYW5zbGF0ZWQgY29tbWFuZCwg dXNlIHRoZSBwcm9wZXJ0eSB2YWx1ZSBgZGlzYWJsZWQnLiIKICA6dHlwZSAnKGNob2ljZSAoY29u c3QgOnRhZyAiTW90aW9uIGtleXMgZXhpdCBJc2VhcmNoIiBuaWwpCiAgICAgICAgICAgICAgICAg KGNvbnN0IDp0YWcgIk1vdGlvbiBrZXlzIGV4dGVuZCB0aGUgc2VhcmNoIHN0cmluZyIgdCkKICAg ICAgICAgICAgICAgICAoY29uc3QgOnRhZyAiU2hpZnRlZCBtb3Rpb24ga2V5cyBleHRlbmQgdGhl IHNlYXJjaCBzdHJpbmciIHNoaWZ0KSkKICA6Z3JvdXAgJ2lzZWFyY2gKICA6dmVyc2lvbiAiMjcu MSIpCgooZGVmdW4gaXNlYXJjaC1wcmUtY29tbWFuZC1ob29rICgpCiAgIkRlY2lkZSB3aGV0aGVy IHRvIGV4aXQgSXNlYXJjaCBtb2RlIGJlZm9yZSBleGVjdXRpbmcgdGhlIGNvbW1hbmQuCkRvbid0 IGV4aXQgSXNlYXJjaCBpZiB0aGUga2V5IHNlcXVlbmNlIHRoYXQgaW52b2tlZCB0aGlzIGNvbW1h bmQKaXMgYm91bmQgaW4gYGlzZWFyY2gtbW9kZS1tYXAnLCBvciBpZiB0aGUgaW52b2tlZCBjb21t YW5kIGlzCmEgcHJlZml4IGFyZ3VtZW50IGNvbW1hbmQgKHdoZW4gYGlzZWFyY2gtYWxsb3ctcHJl Zml4JyBpcyBub24tbmlsKSwKb3IgaXQgaXMgYSBzY3JvbGxpbmcgY29tbWFuZCAod2hlbiBgaXNl YXJjaC1hbGxvdy1zY3JvbGwnIGlzIG5vbi1uaWwpLgpPdGhlcndpc2UsIGV4aXQgSXNlYXJjaCAo d2hlbiBgc2VhcmNoLWV4aXQtb3B0aW9uJyBpcyB0KQpiZWZvcmUgdGhlIGNvbW1hbmQgaXMgZXhl Y3V0ZWQgZ2xvYmFsbHkgd2l0aCB0ZXJtaW5hdGVkIElzZWFyY2guClNlZSBtb3JlIGZvciBvcHRp b25zIGluIGBzZWFyY2gtZXhpdC1vcHRpb24nLiIKICAobGV0KiAoKGtleSAodGhpcy1zaW5nbGUt Y29tbWFuZC1rZXlzKSkKCSAobWFpbi1ldmVudCAoYXJlZiBrZXkgMCkpKQogICAgKGNvbmQKICAg ICA7OyBEb24ndCBleGl0IElzZWFyY2ggaWYgd2UncmUgaW4gdGhlIG1pZGRsZSBvZiBzb21lCiAg ICAgOzsgYHNldC10cmFuc2llbnQtbWFwJyB0aGluZ3kgbGlrZSBgdW5pdmVyc2FsLWFyZ3VtZW50 LS1tb2RlJy4KICAgICAoKG5vdCAoZXEgb3ZlcnJpZGluZy10ZXJtaW5hbC1sb2NhbC1tYXAgaXNl YXJjaC0tc2F2ZWQtb3ZlcnJpZGluZy1sb2NhbC1tYXApKSkKICAgICA7OyBEb24ndCBleGl0IElz ZWFyY2ggZm9yIGlzZWFyY2gga2V5IGJpbmRpbmdzLgogICAgICgob3IgKGNvbW1hbmRwIChsb29r dXAta2V5IGlzZWFyY2gtbW9kZS1tYXAga2V5IG5pbCkpCiAgICAgICAgICAoY29tbWFuZHAKICAg ICAgICAgICAobG9va3VwLWtleQogICAgICAgICAgICBgKGtleW1hcCAodG9vbC1iYXIgbWVudS1p dGVtIG5pbCAsaXNlYXJjaC10b29sLWJhci1tYXApKSBrZXkpKSkpCiAgICAgOzsgQWxsb3cga2V5 IGJpbmRpbmdzIHRoYXQgb3BlbiBhIG1lbnViYXIuCiAgICAgKChtZW1xIHRoaXMtY29tbWFuZCBp c2VhcmNoLW1lbnUtYmFyLWNvbW1hbmRzKSkKICAgICA7OyBPcHRpb25hbGx5IGVkaXQgdGhlIHNl YXJjaCBzdHJpbmcgaW5zdGVhZCBvZiBleGl0aW5nLgogICAgICgoZXEgc2VhcmNoLWV4aXQtb3B0 aW9uICdlZGl0KQogICAgICAoc2V0cSB0aGlzLWNvbW1hbmQgJ2lzZWFyY2gtZWRpdC1zdHJpbmcp KQogICAgIDs7IEhhbmRsZSBhIHNjcm9sbGluZyBmdW5jdGlvbiBvciBwcmVmaXggYXJndW1lbnQu CiAgICAgKChvciAoYW5kIGlzZWFyY2gtYWxsb3ctcHJlZml4CiAgICAgICAgICAgICAgIChtZW1x IHRoaXMtY29tbWFuZCAnKHVuaXZlcnNhbC1hcmd1bWVudCB1bml2ZXJzYWwtYXJndW1lbnQtbW9y ZQoJCQkJICAgIGRpZ2l0LWFyZ3VtZW50IG5lZ2F0aXZlLWFyZ3VtZW50KSkpCgkgIChhbmQgaXNl YXJjaC1hbGxvdy1zY3JvbGwKCSAgICAgICAoc3ltYm9scCB0aGlzLWNvbW1hbmQpCgkgICAgICAg KG9yIChlcSAoZ2V0IHRoaXMtY29tbWFuZCAnaXNlYXJjaC1zY3JvbGwpIHQpCgkJICAgKGVxIChn ZXQgdGhpcy1jb21tYW5kICdzY3JvbGwtY29tbWFuZCkgdCkpKSkKICAgICAgKHdoZW4gaXNlYXJj aC1hbGxvdy1zY3JvbGwKCSh1bmxlc3MgKGVxIGlzZWFyY2gtYWxsb3ctc2Nyb2xsICd1bmxpbWl0 ZWQpCiAgICAgICAgICAoc2V0cSBpc2VhcmNoLXByZS1zY3JvbGwtcG9pbnQgKHBvaW50KSkpKSkK ICAgICA7OyBBIG1vdXNlIGNsaWNrIG9uIHRoZSBpc2VhcmNoIG1lc3NhZ2Ugc3RhcnRzIGVkaXRp bmcgdGhlIHNlYXJjaCBzdHJpbmcuCiAgICAgKChhbmQgKGVxIChjYXItc2FmZSBtYWluLWV2ZW50 KSAnZG93bi1tb3VzZS0xKQoJICAgKHdpbmRvdy1taW5pYnVmZmVyLXAgKHBvc24td2luZG93IChl dmVudC1zdGFydCBtYWluLWV2ZW50KSkpKQogICAgICA7OyBTd2FsbG93IHRoZSB1cC1ldmVudC4K ICAgICAgKHJlYWQtZXZlbnQpCiAgICAgIChzZXRxIHRoaXMtY29tbWFuZCAnaXNlYXJjaC1lZGl0 LXN0cmluZykpCiAgICAgOzsgRG9uJ3QgdGVybWluYXRlIHRoZSBzZWFyY2ggZm9yIG1vdGlvbiBj b21tYW5kcy4KICAgICAoKGFuZCBpc2VhcmNoLXlhbmstb24tbW92ZQogICAgICAgICAgIChzeW1i b2xwIHRoaXMtY29tbWFuZCkKICAgICAgICAgICAobm90IChlcSAoZ2V0IHRoaXMtY29tbWFuZCAn aXNlYXJjaC1tb3ZlKSAnZGlzYWJsZWQpKQogICAgICAgICAgIChvciAoZXEgKGdldCB0aGlzLWNv bW1hbmQgJ2lzZWFyY2gtbW92ZSkgJ2VuYWJsZWQpCiAgICAgICAgICAgICAgIChhbmQgKGVxIGlz ZWFyY2gteWFuay1vbi1tb3ZlIHQpCiAgICAgICAgICAgICAgICAgICAgKHN0cmluZ3AgKG50aCAx IChpbnRlcmFjdGl2ZS1mb3JtIHRoaXMtY29tbWFuZCkpKQogICAgICAgICAgICAgICAgICAgIChz dHJpbmctbWF0Y2gtcCAiXlxcXiIKCQkJCSAgICAobnRoIDEgKGludGVyYWN0aXZlLWZvcm0gdGhp cy1jb21tYW5kKSkpKQogICAgICAgICAgICAgICAoYW5kIChlcSBpc2VhcmNoLXlhbmstb24tbW92 ZSAnc2hpZnQpCiAgICAgICAgICAgICAgICAgICAgdGhpcy1jb21tYW5kLWtleXMtc2hpZnQtdHJh bnNsYXRlZCkpKQogICAgICAoc2V0cSB0aGlzLWNvbW1hbmQta2V5cy1zaGlmdC10cmFuc2xhdGVk IG5pbCkKICAgICAgKHNldHEgaXNlYXJjaC1wcmUtbW92ZS1wb2ludCAocG9pbnQpKSkKICAgICA7 OyBBcHBlbmQgY29udHJvbCBjaGFyYWN0ZXJzIHRvIHRoZSBzZWFyY2ggc3RyaW5nCiAgICAgKChl cSBzZWFyY2gtZXhpdC1vcHRpb24gJ2FwcGVuZCkKICAgICAgKHVubGVzcyAobWVtcSBuaWwgKG1h cGNhciAobGFtYmRhIChrKSAoY2hhcmFjdGVycCBrKSkga2V5KSkKICAgICAgICAoaXNlYXJjaC1w cm9jZXNzLXNlYXJjaC1zdHJpbmcga2V5IGtleSkpCiAgICAgIChzZXRxIHRoaXMtY29tbWFuZCAn aWdub3JlKSkKICAgICA7OyBPdGhlciBjaGFyYWN0ZXJzIHRlcm1pbmF0ZSB0aGUgc2VhcmNoIGFu ZCBhcmUgdGhlbiBleGVjdXRlZCBub3JtYWxseS4KICAgICAoc2VhcmNoLWV4aXQtb3B0aW9uCiAg ICAgIChpc2VhcmNoLWRvbmUpCiAgICAgIChpc2VhcmNoLWNsZWFuLW92ZXJsYXlzKSkpKSkKCihk ZWZ1biBpc2VhcmNoLXBvc3QtY29tbWFuZC1ob29rICgpCiAgICh3aGVuIGlzZWFyY2gtcHJlLXNj cm9sbC1wb2ludAogICAgIChsZXQgKChhYi1iZWwgKGlzZWFyY2gtc3RyaW5nLW91dC1vZi13aW5k b3cgaXNlYXJjaC1wcmUtc2Nyb2xsLXBvaW50KSkpCiAgICAgICAoaWYgYWItYmVsCgkgICAoaXNl YXJjaC1iYWNrLWludG8td2luZG93IChlcSBhYi1iZWwgJ2Fib3ZlKSBpc2VhcmNoLXByZS1zY3Jv bGwtcG9pbnQpCgkgKGdvdG8tY2hhciBpc2VhcmNoLXByZS1zY3JvbGwtcG9pbnQpKSkKICAgICAo c2V0cSBpc2VhcmNoLXByZS1zY3JvbGwtcG9pbnQgbmlsKQogICAgIChpc2VhcmNoLXVwZGF0ZSkp CiAgICh3aGVuIChlcSBpc2VhcmNoLWFsbG93LXNjcm9sbCAndW5saW1pdGVkKQogICAgICh3aGVu IGlzZWFyY2gtbGF6eS1oaWdobGlnaHQKICAgICAgIChpc2VhcmNoLWxhenktaGlnaGxpZ2h0LW5l dy1sb29wKSkpCiAgICh3aGVuIGlzZWFyY2gtcHJlLW1vdmUtcG9pbnQKICAgICAod2hlbiAobm90 IChlcSBpc2VhcmNoLXByZS1tb3ZlLXBvaW50IChwb2ludCkpKQogICAgICAgKGxldCAoKHN0cmlu ZyAoYnVmZmVyLXN1YnN0cmluZy1uby1wcm9wZXJ0aWVzCiAgICAgICAgICAgICAgICAgICAgICAo b3IgaXNlYXJjaC1vdGhlci1lbmQgaXNlYXJjaC1vcG9pbnQpIChwb2ludCkpKSkKICAgICAgICAg KGlmIGlzZWFyY2gtcmVnZXhwIChzZXRxIHN0cmluZyAocmVnZXhwLXF1b3RlIHN0cmluZykpKQog ICAgICAgICAoc2V0cSBpc2VhcmNoLXN0cmluZyBzdHJpbmcpCiAgICAgICAgIChzZXRxIGlzZWFy Y2gtbWVzc2FnZSAobWFwY29uY2F0ICdpc2VhcmNoLXRleHQtY2hhci1kZXNjcmlwdGlvbgogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJpbmcgIiIpKQogICAgICAg ICAoc2V0cSBpc2VhcmNoLXlhbmstZmxhZyB0KQogICAgICAgICAoc2V0cSBpc2VhcmNoLWZvcndh cmQgKDw9IChvciBpc2VhcmNoLW90aGVyLWVuZCBpc2VhcmNoLW9wb2ludCkgKHBvaW50KSkpCiAg ICAgICAgICh3aGVuIGlzZWFyY2gtZm9yd2FyZAogICAgICAgICAgIChnb3RvLWNoYXIgaXNlYXJj aC1wcmUtbW92ZS1wb2ludCkpCiAgICAgICAgIChpc2VhcmNoLXNlYXJjaC1hbmQtdXBkYXRlKSkp CiAgICAgKHNldHEgaXNlYXJjaC1wcmUtbW92ZS1wb2ludCBuaWwpKQogIChmb3JjZS1tb2RlLWxp bmUtdXBkYXRlKSkKCihkZWZ1biBpc2VhcmNoLXF1b3RlLWNoYXIgKCZvcHRpb25hbCBjb3VudCkK ICAiUXVvdGUgc3BlY2lhbCBjaGFyYWN0ZXJzIGZvciBpbmNyZW1lbnRhbCBzZWFyY2guCldpdGgg YXJndW1lbnQsIGFkZCBDT1VOVCBjb3BpZXMgb2YgdGhlIGNoYXJhY3Rlci4iCiAgKGludGVyYWN0 aXZlICJwIikKICAobGV0ICgoY2hhciAocmVhZC1xdW90ZWQtY2hhciAoaXNlYXJjaC1tZXNzYWdl IHQpKSkpCiAgICAodW5sZXNzIChjaGFyYWN0ZXJwIGNoYXIpCiAgICAgICh1c2VyLWVycm9yICIl cyBpcyBub3QgYSB2YWxpZCBjaGFyYWN0ZXIiCgkJICAoa2V5LWRlc2NyaXB0aW9uICh2ZWN0b3Ig Y2hhcikpKSkKICAgIDs7IEFzc3VtZSBjaGFyYWN0ZXIgY29kZXMgMDIwMCAtIDAzNzcgc3RhbmQg Zm9yIGNoYXJhY3RlcnMgaW4gc29tZQogICAgOzsgc2luZ2xlLWJ5dGUgY2hhcmFjdGVyIHNldCwg YW5kIGNvbnZlcnQgdGhlbSB0byBFbWFjcwogICAgOzsgY2hhcmFjdGVycy4KICAgIChpZiAoYW5k IGlzZWFyY2gtcmVnZXhwIGlzZWFyY2gtcmVnZXhwLWxheC13aGl0ZXNwYWNlICg9IGNoYXIgP1xz KSkKCShpZiAoc3VicmVnZXhwLWNvbnRleHQtcCBpc2VhcmNoLXN0cmluZyAobGVuZ3RoIGlzZWFy Y2gtc3RyaW5nKSkKCSAgICAoaXNlYXJjaC1wcm9jZXNzLXNlYXJjaC1zdHJpbmcgIlsgXSIgIiAi KQoJICAoaXNlYXJjaC1wcm9jZXNzLXNlYXJjaC1jaGFyIGNoYXIgY291bnQpKQogICAgICA7OyBU aGlzIHVzZWQgdG8gYXNzdW1lIGNoYXJhY3RlciBjb2RlcyAwMjQwIC0gMDM3NyBzdGFuZCBmb3IK ICAgICAgOzsgY2hhcmFjdGVycyBpbiBzb21lIHNpbmdsZS1ieXRlIGNoYXJhY3RlciBzZXQsIGFu ZCBjb252ZXJ0ZWQgdGhlbQogICAgICA7OyB0byBFbWFjcyBjaGFyYWN0ZXJzLiAgQnV0IGluIDIz LjEgdGhpcyBmZWF0dXJlIGlzIGRlcHJlY2F0ZWQKICAgICAgOzsgaW4gZmF2b3Igb2YgaW5zZXJ0 aW5nIHRoZSBjb3JyZXNwb25kaW5nIFVuaWNvZGUgY2hhcmFjdGVycy4KICAgICAgOzsgKGFuZCBl bmFibGUtbXVsdGlieXRlLWNoYXJhY3RlcnMKICAgICAgOzsgICAgICAoPj0gY2hhciA/XDIwMCkK ICAgICAgOzsgICAgICAoPD0gY2hhciA/XDM3NykKICAgICAgOzsgICAgICAoc2V0cSBjaGFyICh1 bmlieXRlLWNoYXItdG8tbXVsdGlieXRlIGNoYXIpKSkKICAgICAgKGlzZWFyY2gtcHJvY2Vzcy1z ZWFyY2gtY2hhciBjaGFyIGNvdW50KSkpKQoKKGRlZnVuIGlzZWFyY2gtcHJpbnRpbmctY2hhciAo Jm9wdGlvbmFsIGNoYXIgY291bnQpCiAgIkFkZCB0aGlzIG9yZGluYXJ5IHByaW50aW5nIENIQVIg dG8gdGhlIHNlYXJjaCBzdHJpbmcgYW5kIHNlYXJjaC4KV2l0aCBhcmd1bWVudCwgYWRkIENPVU5U IGNvcGllcyBvZiB0aGUgY2hhcmFjdGVyLiIKICAoaW50ZXJhY3RpdmUgKGxpc3QgbGFzdC1jb21t YW5kLWV2ZW50CgkJICAgICAocHJlZml4LW51bWVyaWMtdmFsdWUgY3VycmVudC1wcmVmaXgtYXJn KSkpCiAgKGxldCAoKGNoYXIgKG9yIGNoYXIgbGFzdC1jb21tYW5kLWV2ZW50KSkpCiAgICAoaWYg KD0gY2hhciA/XFMtXCApCgkoc2V0cSBjaGFyID9ccykpCiAgICAoaWYgY3VycmVudC1pbnB1dC1t ZXRob2QKCShpc2VhcmNoLXByb2Nlc3Mtc2VhcmNoLW11bHRpYnl0ZS1jaGFyYWN0ZXJzIGNoYXIg Y291bnQpCiAgICAgIChpc2VhcmNoLXByb2Nlc3Mtc2VhcmNoLWNoYXIgY2hhciBjb3VudCkpKSkK CihkZWZ1biBpc2VhcmNoLXByb2Nlc3Mtc2VhcmNoLWNoYXIgKGNoYXIgJm9wdGlvbmFsIGNvdW50 KQogICJBZGQgQ0hBUiB0byB0aGUgc2VhcmNoIHN0cmluZywgQ09VTlQgdGltZXMuClNlYXJjaCBp cyB1cGRhdGVkIGFjY29yZGluZ2x5LiIKICA7OyAqIGFuZCA/IGFyZSBzcGVjaWFsIGluIHJlZ2V4 cHMgd2hlbiBub3QgcHJlY2VkZWQgYnkgXC4KICA7OyB9IGFuZCB8IGFyZSBzcGVjaWFsIGluIHJl Z2V4cHMgd2hlbiBwcmVjZWRlZCBieSBcLgogIDs7IE5vdGhpbmcgc3BlY2lhbCBmb3IgKyBiZWNh dXNlIGl0IG1hdGNoZXMgYXQgbGVhc3Qgb25jZS4KICAoY29uZAogICAoKG1lbXEgY2hhciAnKD8q ID8/KSkgKGlzZWFyY2gtZmFsbGJhY2sgbmlsKSkKICAgKChlcSAgIGNoYXIgP1x9KSAgICAgIChp c2VhcmNoLWZhbGxiYWNrIHQgdCkpCiAgICgoZXEgICBjaGFyID98KSAgICAgICAoaXNlYXJjaC1m YWxsYmFjayB0IG5pbCB0KSkpCgogIDs7IEFwcGVuZCB0aGUgY2hhcihzKSB0byB0aGUgc2VhcmNo IHN0cmluZywKICA7OyB1cGRhdGUgdGhlIG1lc3NhZ2UgYW5kIHJlLXNlYXJjaC4KICAobGV0KiAo KHN0cmluZyAoaWYgKGFuZCAoaW50ZWdlcnAgY291bnQpICg+IGNvdW50IDEpKQoJCSAgICAgKG1h a2Utc3RyaW5nIGNvdW50IGNoYXIpCgkJICAgKGNoYXItdG8tc3RyaW5nIGNoYXIpKSkKCSAobWVz c2FnZSAoaWYgKD49IGNoYXIgP1wyMDApCgkJICAgICAgc3RyaW5nCgkJICAgIChtYXBjb25jYXQg J2lzZWFyY2gtdGV4dC1jaGFyLWRlc2NyaXB0aW9uIHN0cmluZyAiIikpKSkKICAgIChpc2VhcmNo LXByb2Nlc3Mtc2VhcmNoLXN0cmluZyBzdHJpbmcgbWVzc2FnZSkpKQoKKGRlZnVuIGlzZWFyY2gt cHJvY2Vzcy1zZWFyY2gtc3RyaW5nIChzdHJpbmcgbWVzc2FnZSAmb3B0aW9uYWwgcmVzcGVjdC1k aXJlY3Rpb24pCiAgIkFwcGVuZCBTVFJJTkcgdG8gYGlzZWFyY2gtc3RyaW5nJyBhbmQgTUVTU0FH RSB0byBgaXNlYXJjaC1tZXNzYWdlJy4KTm9uLW5pbCBSRVNQRUNULURJUkVDVElPTiBtZWFucyBw cmVwZW5kIFNUUklORyBpZiBzZWFyY2hpbmcgYmFja3dhcmQuIgogIChsZXQgKChmd2QgIChvciBp c2VhcmNoLWZvcndhcmQgIChub3QgcmVzcGVjdC1kaXJlY3Rpb24pKSkpCiAgICAoc2V0cSBpc2Vh cmNoLXN0cmluZyAgIChpZiBmd2QKCQkJICAgICAgIChjb25jYXQgaXNlYXJjaC1zdHJpbmcgc3Ry aW5nKQoJCQkgICAgIChjb25jYXQgc3RyaW5nIGlzZWFyY2gtc3RyaW5nKSkKCSAgaXNlYXJjaC1t ZXNzYWdlICAoaWYgZndkCgkJCSAgICAgICAoY29uY2F0IGlzZWFyY2gtbWVzc2FnZSBtZXNzYWdl KQoJCQkgICAgIChjb25jYXQgbWVzc2FnZSBpc2VhcmNoLW1lc3NhZ2UpKSkpCiAgKGlzZWFyY2gt c2VhcmNoLWFuZC11cGRhdGUpKQoKDAo7OyBTZWFyY2ggUmluZwoKKGRlZnVuIGlzZWFyY2gtcmlu Zy1hZGp1c3QxIChhZHZhbmNlKQogIDs7IEhlbHBlciBmb3IgaXNlYXJjaC1yaW5nLWFkanVzdAog IChsZXQqICgocmluZyAoaWYgaXNlYXJjaC1yZWdleHAgcmVnZXhwLXNlYXJjaC1yaW5nIHNlYXJj aC1yaW5nKSkKCSAobGVuZ3RoIChsZW5ndGggcmluZykpCgkgKHlhbmstcG9pbnRlci1uYW1lIChp ZiBpc2VhcmNoLXJlZ2V4cAoJCQkJJ3JlZ2V4cC1zZWFyY2gtcmluZy15YW5rLXBvaW50ZXIKCQkJ ICAgICAgJ3NlYXJjaC1yaW5nLXlhbmstcG9pbnRlcikpCgkgKHlhbmstcG9pbnRlciAoZXZhbCB5 YW5rLXBvaW50ZXItbmFtZSkpKQogICAgKGlmICh6ZXJvcCBsZW5ndGgpCgkoKQogICAgICAoc2V0 IHlhbmstcG9pbnRlci1uYW1lCgkgICAoc2V0cSB5YW5rLXBvaW50ZXIKCQkgKG1vZCAoKyAob3Ig eWFuay1wb2ludGVyIChpZiBhZHZhbmNlIDAgLTEpKQoJCQkgKGlmIGFkdmFuY2UgLTEgMSkpCgkJ ICAgICAgbGVuZ3RoKSkpCiAgICAgIChzZXRxIGlzZWFyY2gtc3RyaW5nIChudGggeWFuay1wb2lu dGVyIHJpbmcpCgkgICAgaXNlYXJjaC1tZXNzYWdlIChtYXBjb25jYXQgJ2lzZWFyY2gtdGV4dC1j aGFyLWRlc2NyaXB0aW9uCgkJCQkgICAgICAgaXNlYXJjaC1zdHJpbmcgIiIpKQogICAgICAoaXNl YXJjaC11cGRhdGUtZnJvbS1zdHJpbmctcHJvcGVydGllcyBpc2VhcmNoLXN0cmluZykpKSkKCihk ZWZ1biBpc2VhcmNoLXJpbmctYWRqdXN0IChhZHZhbmNlKQogIDs7IEhlbHBlciBmb3IgaXNlYXJj aC1yaW5nLWFkdmFuY2UgYW5kIGlzZWFyY2gtcmluZy1yZXRyZWF0CiAgKGlzZWFyY2gtcmluZy1h ZGp1c3QxIGFkdmFuY2UpCiAgKGlmIHNlYXJjaC1yaW5nLXVwZGF0ZQogICAgICAocHJvZ24KICAg ICAgICAoZnVuY2FsbCAob3IgaXNlYXJjaC1tZXNzYWdlLWZ1bmN0aW9uICMnaXNlYXJjaC1tZXNz YWdlKSBuaWwgdCkKCShpc2VhcmNoLXNlYXJjaCkKCShpc2VhcmNoLXB1c2gtc3RhdGUpCgkoaXNl YXJjaC11cGRhdGUpKQogICAgOzsgT3RoZXJ3aXNlLCBlZGl0IHRoZSBzZWFyY2ggc3RyaW5nIGlu c3RlYWQuICBOb3RlIHRoYXQgdGhlcmUgaXMKICAgIDs7IG5vIG5lZWQgdG8gcHVzaCB0aGUgc2Vh cmNoIHN0YXRlIGFmdGVyIGlzZWFyY2gtZWRpdC1zdHJpbmcgaGVyZQogICAgOzsgc2luY2UgaXNl YXJjaC1lZGl0LXN0cmluZyBhbHJlYWR5IHB1c2hlcyBpdHMgc3RhdGUKICAgIChpc2VhcmNoLWVk aXQtc3RyaW5nKSkpCgooZGVmdW4gaXNlYXJjaC1yaW5nLWFkdmFuY2UgKCkKICAiQWR2YW5jZSB0 byB0aGUgbmV4dCBzZWFyY2ggc3RyaW5nIGluIHRoZSByaW5nLiIKICA7OyBUaGlzIGNvdWxkIGJl IG1vcmUgZ2VuZXJhbCB0byBoYW5kbGUgYSBwcmVmaXggYXJnLCBidXQgd2hvIHdvdWxkIHVzZSBp dC4KICAoaW50ZXJhY3RpdmUpCiAgKGlzZWFyY2gtcmluZy1hZGp1c3QgJ2FkdmFuY2UpKQoKKGRl ZnVuIGlzZWFyY2gtcmluZy1yZXRyZWF0ICgpCiAgIlJldHJlYXQgdG8gdGhlIHByZXZpb3VzIHNl YXJjaCBzdHJpbmcgaW4gdGhlIHJpbmcuIgogIChpbnRlcmFjdGl2ZSkKICAoaXNlYXJjaC1yaW5n LWFkanVzdCBuaWwpKQoKKGRlZnVuIGlzZWFyY2gtY29tcGxldGUxICgpCiAgOzsgSGVscGVyIGZv ciBpc2VhcmNoLWNvbXBsZXRlIGFuZCBpc2VhcmNoLWNvbXBsZXRlLWVkaXQKICA7OyBSZXR1cm4g dCBpZiBjb21wbGV0aW9uIE9LLCBuaWwgaWYgbm8gY29tcGxldGlvbiBleGlzdHMuCiAgKGxldCog KChyaW5nIChpZiBpc2VhcmNoLXJlZ2V4cCByZWdleHAtc2VhcmNoLXJpbmcgc2VhcmNoLXJpbmcp KQogICAgICAgICAoY29tcGxldGlvbi1pZ25vcmUtY2FzZSBjYXNlLWZvbGQtc2VhcmNoKQogICAg ICAgICAoY29tcGxldGlvbiAodHJ5LWNvbXBsZXRpb24gaXNlYXJjaC1zdHJpbmcgcmluZykpKQog ICAgKGNvbmQKICAgICAoKGVxIGNvbXBsZXRpb24gdCkKICAgICAgOzsgaXNlYXJjaC1zdHJpbmcg c3RheXMgdGhlIHNhbWUKICAgICAgdCkKICAgICAoKG9yIGNvbXBsZXRpb24gOyBub3QgbmlsLCBt dXN0IGJlIGEgc3RyaW5nCgkgICg9IDAgKGxlbmd0aCBpc2VhcmNoLXN0cmluZykpKSA7IHNob3Vs ZG4ndCBoYXZlIHRvIHNheSB0aGlzCiAgICAgIChpZiAoZXF1YWwgY29tcGxldGlvbiBpc2VhcmNo LXN0cmluZykgIDs7IG5vIGV4dGVuc2lvbj8KCSAgKHByb2duCgkgICAgKGlmIGNvbXBsZXRpb24t YXV0by1oZWxwCgkJKHdpdGgtb3V0cHV0LXRvLXRlbXAtYnVmZmVyICIqSXNlYXJjaCBjb21wbGV0 aW9ucyoiCgkJICAoZGlzcGxheS1jb21wbGV0aW9uLWxpc3QKCQkgICAoYWxsLWNvbXBsZXRpb25z IGlzZWFyY2gtc3RyaW5nIHJpbmcpKSkpCgkgICAgdCkKCShhbmQgY29tcGxldGlvbgoJICAgICAo c2V0cSBpc2VhcmNoLXN0cmluZyBjb21wbGV0aW9uKSkpKQogICAgICh0CiAgICAgIChtZXNzYWdl ICJObyBjb21wbGV0aW9uIikgOyB3YWl0cyBhIHNlY29uZCBpZiBpbiBtaW5pYnVmZmVyCiAgICAg IG5pbCkpKSkKCihkZWZ1biBpc2VhcmNoLWNvbXBsZXRlICgpCiAgIkNvbXBsZXRlIHRoZSBzZWFy Y2ggc3RyaW5nIGZyb20gdGhlIHN0cmluZ3Mgb24gdGhlIHNlYXJjaCByaW5nLgpUaGUgY29tcGxl dGVkIHN0cmluZyBpcyB0aGVuIGVkaXRhYmxlIGluIHRoZSBtaW5pYnVmZmVyLgpJZiB0aGVyZSBp cyBubyBjb21wbGV0aW9uIHBvc3NpYmxlLCBzYXkgc28gYW5kIGNvbnRpbnVlIHNlYXJjaGluZy4i CiAgKGludGVyYWN0aXZlKQogIChpZiAoaXNlYXJjaC1jb21wbGV0ZTEpCiAgICAgIChwcm9nbiAo c2V0cSBpc2VhcmNoLW1lc3NhZ2UKCQkgICAobWFwY29uY2F0ICdpc2VhcmNoLXRleHQtY2hhci1k ZXNjcmlwdGlvbgoJCQkgICAgICBpc2VhcmNoLXN0cmluZyAiIikpCgkgICAgIChpc2VhcmNoLWVk aXQtc3RyaW5nKSkKICAgIDs7IGVsc2UKICAgIChzaXQtZm9yIDEpCiAgICAoaXNlYXJjaC11cGRh dGUpKSkKCihkZWZ1biBpc2VhcmNoLWNvbXBsZXRlLWVkaXQgKCkKICAiU2FtZSBhcyBgaXNlYXJj aC1jb21wbGV0ZScgZXhjZXB0IGluIHRoZSBtaW5pYnVmZmVyLiIKICAoaW50ZXJhY3RpdmUpCiAg KHNldHEgaXNlYXJjaC1zdHJpbmcgKGZpZWxkLXN0cmluZykpCiAgKGlmIChpc2VhcmNoLWNvbXBs ZXRlMSkKICAgICAgKHByb2duCgkoZGVsZXRlLWZpZWxkKQoJKGluc2VydCBpc2VhcmNoLXN0cmlu ZykpKSkKCgwKOzsgTWVzc2FnZSBzdHJpbmcKCihkZWZ1biBpc2VhcmNoLW1lc3NhZ2UgKCZvcHRp b25hbCBjLXEtaGFjayBlbGxpcHNpcykKICA7OyBHZW5lcmF0ZSBhbmQgcHJpbnQgdGhlIG1lc3Nh Z2Ugc3RyaW5nLgoKICA7OyBOLkIuOiBUaGlzIGZ1bmN0aW9uIHNob3VsZCBhbHdheXMgYmUgY2Fs bGVkIHdpdGggcG9pbnQgYXQgdGhlCiAgOzsgc2VhcmNoIHBvaW50LCBiZWNhdXNlIGluIGNlcnRh aW4gKHJhcmUpIGNpcmN1bXN0YW5jZXMsIHVuZGVzaXJlZAogIDs7IHNjcm9sbGluZyBjYW4gaGFw cGVuIHdoZW4gcG9pbnQgaXMgZWxzZXdoZXJlLiAgVGhlc2UKICA7OyBjaXJjdW1zdGFuY2VzIGFy ZSB3aGVuIGZvbGxvdy1tb2RlIGlzIGFjdGl2ZSwgdGhlIHNlYXJjaCBzdHJpbmcKICA7OyBzcGFu cyB0d28gKG9yIHNldmVyYWwpIHdpbmRvd3MsIGFuZCB0aGUgbWVzc2FnZSBhYm91dCB0byBiZQog IDs7IGRpc3BsYXllZCB3aWxsIGNhdXNlIHRoZSBlY2hvIGFyZWEgdG8gZXhwYW5kLgogIChsZXQg KChjdXJzb3ItaW4tZWNoby1hcmVhIGVsbGlwc2lzKQoJKG0gaXNlYXJjaC1tZXNzYWdlKQoJKGZh aWwtcG9zIChpc2VhcmNoLWZhaWwtcG9zIHQpKSkKICAgIDs7IEhpZ2hsaWdodCBmYWlsZWQgcGFy dAogICAgKHdoZW4gZmFpbC1wb3MKICAgICAgKHNldHEgbSAoY29weS1zZXF1ZW5jZSBtKSkKICAg ICAgKGFkZC10ZXh0LXByb3BlcnRpZXMgZmFpbC1wb3MgKGxlbmd0aCBtKSAnKGZhY2UgaXNlYXJj aC1mYWlsKSBtKQogICAgICA7OyBIaWdobGlnaHQgZmFpbGVkIHRyYWlsaW5nIHdoaXRlc3BhY2UK ICAgICAgKHdoZW4gKHN0cmluZy1tYXRjaCAiICskIiBtKQoJKGFkZC10ZXh0LXByb3BlcnRpZXMg KG1hdGNoLWJlZ2lubmluZyAwKSAobWF0Y2gtZW5kIDApCgkJCSAgICAgJyhmYWNlIHRyYWlsaW5n LXdoaXRlc3BhY2UpIG0pKSkKICAgIChzZXRxIG0gKGNvbmNhdAoJICAgICAoaXNlYXJjaC1tZXNz YWdlLXByZWZpeCBlbGxpcHNpcyBpc2VhcmNoLW5vbmluY3JlbWVudGFsKQoJICAgICBtCgkgICAg IChpc2VhcmNoLW1lc3NhZ2Utc3VmZml4IGMtcS1oYWNrKSkpCiAgICAoaWYgYy1xLWhhY2sgbSAo bGV0ICgobWVzc2FnZS1sb2ctbWF4IG5pbCkpIChtZXNzYWdlICIlcyIgbSkpKSkpCgooZGVmdW4g aXNlYXJjaC0tZGVzY3JpYmUtcmVnZXhwLW1vZGUgKHJlZ2V4cC1mdW5jdGlvbiAmb3B0aW9uYWwg c3BhY2UtYmVmb3JlKQogICJNYWtlIGEgc3RyaW5nIGZvciBkZXNjcmliaW5nIFJFR0VYUC1GVU5D VElPTi4KSWYgU1BBQ0UtQkVGT1JFIGlzIG5vbi1uaWwsIHB1dCBhIHNwYWNlIGJlZm9yZSwgaW5z dGVhZCBvZiBhZnRlciwKdGhlIHdvcmQgbW9kZS4iCiAgKHdoZW4gKGVxIHJlZ2V4cC1mdW5jdGlv biB0KQogICAgKHNldHEgcmVnZXhwLWZ1bmN0aW9uICMnd29yZC1zZWFyY2gtcmVnZXhwKSkKICAo bGV0ICgoZGVzY3JpcHRpb24KICAgICAgICAgKGNvbmQKICAgICAgICAgIDs7IDEuIERvIG5vdCB1 c2UgYSBkZXNjcmlwdGlvbiBvbiB0aGUgZGVmYXVsdCBzZWFyY2ggbW9kZSwKICAgICAgICAgIDs7 ICAgIGJ1dCBvbmx5IGlmIHRoZSBkZWZhdWx0IHNlYXJjaCBtb2RlIGlzIG5vbi1uaWwuCiAgICAg ICAgICAoKGFuZCAob3IgKGFuZCBzZWFyY2gtZGVmYXVsdC1tb2RlCiAgICAgICAgICAgICAgICAg ICAgICAgICAoZXF1YWwgc2VhcmNoLWRlZmF1bHQtbW9kZSByZWdleHAtZnVuY3Rpb24pKQogICAg ICAgICAgICAgICAgICAgIDs7IFNwZWNpYWwgY2FzZSB3aGVyZSBgc2VhcmNoLWRlZmF1bHQtbW9k ZScgaXMgdAogICAgICAgICAgICAgICAgICAgIDs7IChkZWZhdWx0cyB0byByZWdleHAgc2VhcmNo ZXMpLgogICAgICAgICAgICAgICAgICAgIChhbmQgKGVxIHNlYXJjaC1kZWZhdWx0LW1vZGUgdCkK ICAgICAgICAgICAgICAgICAgICAgICAgIChlcSBzZWFyY2gtZGVmYXVsdC1tb2RlIGlzZWFyY2gt cmVnZXhwKSkpCiAgICAgICAgICAgICAgICA7OyBBbHNvIGRvIG5vdCBvbWl0IGRlc2NyaXB0aW9u IGluIGNhc2Ugb2YgZXJyb3IKICAgICAgICAgICAgICAgIDs7IGluIGRlZmF1bHQgbm9uLWxpdGVy YWwgc2VhcmNoLgogICAgICAgICAgICAgICAgKG9yIGlzZWFyY2gtc3VjY2VzcyAobm90IChvciBy ZWdleHAtZnVuY3Rpb24gaXNlYXJjaC1yZWdleHApKSkpCiAgICAgICAgICAgIiIpCiAgICAgICAg ICA7OyAyLiBVc2UgdGhlIGBpc2VhcmNoLW1lc3NhZ2UtcHJlZml4JyBzZXQgZm9yCiAgICAgICAg ICA7OyAgICBgcmVnZXhwLWZ1bmN0aW9uJyBpZiBhdmFpbGFibGUuCiAgICAgICAgICAocmVnZXhw LWZ1bmN0aW9uCiAgICAgICAgICAgKGFuZCAoc3ltYm9scCByZWdleHAtZnVuY3Rpb24pCiAgICAg ICAgICAgICAgICAob3IgKGdldCByZWdleHAtZnVuY3Rpb24gJ2lzZWFyY2gtbWVzc2FnZS1wcmVm aXgpCiAgICAgICAgICAgICAgICAgICAgIiIpKSkKICAgICAgICAgIDs7IDMuIEVsc2UgaWYgYGlz ZWFyY2gtcmVnZXhwJyBpcyBub24tbmlsLCBzZXQgZGVzY3JpcHRpb24KICAgICAgICAgIDs7ICAg IHRvICJyZWdleHAgIi4KICAgICAgICAgIChpc2VhcmNoLXJlZ2V4cCAicmVnZXhwICIpCiAgICAg ICAgICA7OyA0LiBFbHNlIGlmIHdlJ3JlIGluIGxpdGVyYWwgbW9kZSAoYW5kIGlmIHRoZSBkZWZh dWx0CiAgICAgICAgICA7OyAgICBtb2RlIGlzIGFsc28gbm90IGxpdGVyYWwpLCBkZXNjcmliZSBp dC4KICAgICAgICAgICgoZnVuY3Rpb25wIHNlYXJjaC1kZWZhdWx0LW1vZGUpICJsaXRlcmFsICIp CiAgICAgICAgICA7OyA1LiBBbmQgZmluYWxseSwgaWYgbm9uZSBvZiB0aGUgYWJvdmUgaXMgdHJ1 ZSwgc2V0IHRoZQogICAgICAgICAgOzsgICAgZGVzY3JpcHRpb24gdG8gYW4gZW1wdHkgc3RyaW5n LgogICAgICAgICAgKHQgIiIpKSkpCiAgICAoaWYgc3BhY2UtYmVmb3JlCiAgICAgICAgOzsgTW92 ZSBzcGFjZSBmcm9tIHRoZSBlbmQgdG8gdGhlIGJlZ2lubmluZy4KICAgICAgICAocmVwbGFjZS1y ZWdleHAtaW4tc3RyaW5nICJcXCguKlxcKSBcXCciICIgXFwxIiBkZXNjcmlwdGlvbikKICAgICAg ZGVzY3JpcHRpb24pKSkKKGRlZmluZS1vYnNvbGV0ZS1mdW5jdGlvbi1hbGlhcyAnaXNlYXJjaC0t ZGVzY3JpYmUtd29yZC1tb2RlCiAgJ2lzZWFyY2gtLWRlc2NyaWJlLXJlZ2V4cC1tb2RlICIyNS4x IikKCihkZWZ1biBpc2VhcmNoLW1lc3NhZ2UtcHJlZml4ICgmb3B0aW9uYWwgZWxsaXBzaXMgbm9u aW5jcmVtZW50YWwpCiAgOzsgSWYgYWJvdXQgdG8gc2VhcmNoLCBhbmQgcHJldmlvdXMgc2VhcmNo IHJlZ2V4cCB3YXMgaW52YWxpZCwKICA7OyBjaGVjayB0aGF0IGl0IHN0aWxsIGlzLiAgSWYgaXQg aXMgdmFsaWQgbm93LAogIDs7IGxldCB0aGUgbWVzc2FnZSB3ZSBkaXNwbGF5IHdoaWxlIHNlYXJj aGluZyBzYXkgdGhhdCBpdCBpcyB2YWxpZC4KICAoYW5kIGlzZWFyY2gtZXJyb3IgZWxsaXBzaXMK ICAgICAgIChjb25kaXRpb24tY2FzZSAoKQoJICAgKHByb2duIChyZS1zZWFyY2gtZm9yd2FyZCBp c2VhcmNoLXN0cmluZyAocG9pbnQpIHQpCgkJICAoc2V0cSBpc2VhcmNoLWVycm9yIG5pbCkpCgkg KGVycm9yIG5pbCkpKQogIDs7IElmIGN1cnJlbnRseSBmYWlsaW5nLCBkaXNwbGF5IG5vIGVsbGlw c2lzLgogIChvciBpc2VhcmNoLXN1Y2Nlc3MgKHNldHEgZWxsaXBzaXMgbmlsKSkKICAobGV0ICgo bSAoY29uY2F0IChpZiBpc2VhcmNoLXN1Y2Nlc3MgIiIgImZhaWxpbmcgIikKCQkgICAoaWYgaXNl YXJjaC1hZGp1c3RlZCAicGVuZGluZyAiICIiKQoJCSAgIChpZiAoYW5kIGlzZWFyY2gtd3JhcHBl ZAoJCQkgICAgKG5vdCBpc2VhcmNoLXdyYXAtZnVuY3Rpb24pCgkJCSAgICAoaWYgaXNlYXJjaC1m b3J3YXJkCgkJCQkoPiAocG9pbnQpIGlzZWFyY2gtb3BvaW50KQoJCQkgICAgICAoPCAocG9pbnQp IGlzZWFyY2gtb3BvaW50KSkpCgkJICAgICAgICJvdmVyIikKCQkgICAoaWYgaXNlYXJjaC13cmFw cGVkICJ3cmFwcGVkICIpCiAgICAgICAgICAgICAgICAgICAoaWYgKGFuZCAobm90IGlzZWFyY2gt c3VjY2VzcykgKG5vdCBpc2VhcmNoLWNhc2UtZm9sZC1zZWFyY2gpKQogICAgICAgICAgICAgICAg ICAgICAgICJjYXNlLXNlbnNpdGl2ZSAiKQogICAgICAgICAgICAgICAgICAgKGxldCAoKHByZWZp eCAiIikpCiAgICAgICAgICAgICAgICAgICAgIChhZHZpY2UtZnVuY3Rpb24tbWFwYwogICAgICAg ICAgICAgICAgICAgICAgKGxhbWJkYSAoXyBwcm9wcykKICAgICAgICAgICAgICAgICAgICAgICAg KGxldCAoKG5wIChjZHIgKGFzc3EgJ2lzZWFyY2gtbWVzc2FnZS1wcmVmaXggcHJvcHMpKSkpCiAg ICAgICAgICAgICAgICAgICAgICAgICAgKGlmIG5wIChzZXRxIHByZWZpeCAoY29uY2F0IG5wIHBy ZWZpeCkpKSkpCiAgICAgICAgICAgICAgICAgICAgICBpc2VhcmNoLWZpbHRlci1wcmVkaWNhdGUp CiAgICAgICAgICAgICAgICAgICAgIHByZWZpeCkKICAgICAgICAgICAgICAgICAgIChpc2VhcmNo LS1kZXNjcmliZS1yZWdleHAtbW9kZSBpc2VhcmNoLXJlZ2V4cC1mdW5jdGlvbikKCQkgICAoY29u ZAoJCSAgICAobXVsdGktaXNlYXJjaC1maWxlLWxpc3QgIm11bHRpLWZpbGUgIikKCQkgICAgKG11 bHRpLWlzZWFyY2gtYnVmZmVyLWxpc3QgIm11bHRpLWJ1ZmZlciAiKQoJCSAgICAodCAiIikpCgkJ ICAgKG9yIGlzZWFyY2gtbWVzc2FnZS1wcmVmaXgtYWRkICIiKQoJCSAgIChpZiBub25pbmNyZW1l bnRhbCAic2VhcmNoIiAiSS1zZWFyY2giKQoJCSAgIChpZiBpc2VhcmNoLWZvcndhcmQgIiIgIiBi YWNrd2FyZCIpCgkJICAgKGlmIGN1cnJlbnQtaW5wdXQtbWV0aG9kCgkJICAgICAgIDs7IElucHV0 IG1ldGhvZHMgZm9yIFJUTCBsYW5ndWFnZXMgdXNlIFJUTAoJCSAgICAgICA7OyBjaGFyYWN0ZXJz IGZvciB0aGVpciB0aXRsZSwgYW5kIHRoYXQgbWVzc2VzCgkJICAgICAgIDs7IHVwIHRoZSBkaXNw bGF5IG9mIHNlYXJjaCB0ZXh0IGFmdGVyIHRoZSBwcm9tcHQuCgkJICAgICAgIChiaWRpLXN0cmlu Zy1tYXJrLWxlZnQtdG8tcmlnaHQKCQkJKGNvbmNhdCAiIFsiIGN1cnJlbnQtaW5wdXQtbWV0aG9k LXRpdGxlICJdOiAiKSkKCQkgICAgICI6ICIpCgkJICAgKSkpCiAgICAoYXBwbHkgIydwcm9wZXJ0 aXplIChjb25jYXQgKGlzZWFyY2gtbGF6eS1jb3VudC1mb3JtYXQpCiAgICAgICAgICAgICAgICAg ICAgICAgICh1cGNhc2UgKHN1YnN0cmluZyBtIDAgMSkpIChzdWJzdHJpbmcgbSAxKSkKCSAgIGlz ZWFyY2gtbWVzc2FnZS1wcm9wZXJ0aWVzKSkpCgooZGVmdW4gaXNlYXJjaC1tZXNzYWdlLXN1ZmZp eCAoJm9wdGlvbmFsIGMtcS1oYWNrKQogIChhcHBseSAjJ3Byb3BlcnRpemUgKGNvbmNhdCAoaWYg Yy1xLWhhY2sgIl5RIiAiIikKCQkgICAgICAoaXNlYXJjaC1sYXp5LWNvdW50LWZvcm1hdCAnc3Vm Zml4KQoJCSAgICAgIChpZiBpc2VhcmNoLWVycm9yCgkJCSAgKGNvbmNhdCAiIFsiIGlzZWFyY2gt ZXJyb3IgIl0iKQoJCQkiIikKCQkgICAgICAob3IgaXNlYXJjaC1tZXNzYWdlLXN1ZmZpeC1hZGQg IiIpKQoJIGlzZWFyY2gtbWVzc2FnZS1wcm9wZXJ0aWVzKSkKCihkZWZ1biBpc2VhcmNoLWxhenkt Y291bnQtZm9ybWF0ICgmb3B0aW9uYWwgc3VmZml4LXApCiAgIkZvcm1hdCB0aGUgY3VycmVudCBt YXRjaCBudW1iZXIgYW5kIHRoZSB0b3RhbCBudW1iZXIgb2YgbWF0Y2hlcy4KV2hlbiBTVUZGSVgt UCBpcyBub24tbmlsLCB0aGUgcmV0dXJuZWQgc3RyaW5nIGlzIGluZGVuZGVkIGZvcgppc2VhcmNo LW1lc3NhZ2Utc3VmZml4IHByb21wdC4gIE90aGVyd2lzZSwgZm9yIGlzZWFyY2gtbWVzc2FnZS1w cmVmaXguIgogIChsZXQgKChmb3JtYXQtc3RyaW5nIChpZiBzdWZmaXgtcAogICAgICAgICAgICAg ICAgICAgICAgICAgICBsYXp5LWNvdW50LXN1ZmZpeC1mb3JtYXQKICAgICAgICAgICAgICAgICAg ICAgICAgIGxhenktY291bnQtcHJlZml4LWZvcm1hdCkpKQogICAgKGlmIChhbmQgZm9ybWF0LXN0 cmluZwogICAgICAgICAgICAgaXNlYXJjaC1sYXp5LWNvdW50CiAgICAgICAgICAgICBpc2VhcmNo LWxhenktY291bnQtY3VycmVudAogICAgICAgICAgICAgKG5vdCBpc2VhcmNoLWVycm9yKQogICAg ICAgICAgICAgKG5vdCBpc2VhcmNoLXN1c3BlbmRlZCkpCiAgICAgICAgKGZvcm1hdCBmb3JtYXQt c3RyaW5nCiAgICAgICAgICAgICAgICAoaWYgaXNlYXJjaC1mb3J3YXJkCiAgICAgICAgICAgICAg ICAgICAgaXNlYXJjaC1sYXp5LWNvdW50LWN1cnJlbnQKICAgICAgICAgICAgICAgICAgKGlmIChl cSBpc2VhcmNoLWxhenktY291bnQtY3VycmVudCAwKQogICAgICAgICAgICAgICAgICAgICAgMAog ICAgICAgICAgICAgICAgICAgICgtIGlzZWFyY2gtbGF6eS1jb3VudC10b3RhbAogICAgICAgICAg ICAgICAgICAgICAgIGlzZWFyY2gtbGF6eS1jb3VudC1jdXJyZW50CiAgICAgICAgICAgICAgICAg ICAgICAgLTEpKSkKICAgICAgICAgICAgICAgIChvciBpc2VhcmNoLWxhenktY291bnQtdG90YWwg Ij8iKSkKICAgICAgIiIpKSkKCgwKOzsgU2VhcmNoaW5nCgooZGVmdmFyIGlzZWFyY2gtc2VhcmNo LWZ1bi1mdW5jdGlvbiAnaXNlYXJjaC1zZWFyY2gtZnVuLWRlZmF1bHQKICAiTm9uLWRlZmF1bHQg dmFsdWUgb3ZlcnJpZGVzIHRoZSBiZWhhdmlvciBvZiBgaXNlYXJjaC1zZWFyY2gtZnVuLWRlZmF1 bHQnLgpUaGlzIHZhcmlhYmxlJ3MgdmFsdWUgc2hvdWxkIGJlIGEgZnVuY3Rpb24sIHdoaWNoIHdp bGwgYmUgY2FsbGVkCndpdGggbm8gYXJndW1lbnRzLCBhbmQgc2hvdWxkIHJldHVybiBhIGZ1bmN0 aW9uIHRoYXQgdGFrZXMgdGhyZWUKYXJndW1lbnRzOiBTVFJJTkcsIEJPVU5ELCBhbmQgTk9FUlJP Ui4gIFNUUklORyBpcyB0aGUgc3RyaW5nIHRvCmJlIHNlYXJjaGVkIGZvci4gIFNlZSBgcmUtc2Vh cmNoLWZvcndhcmQnIGZvciB0aGUgbWVhbmluZyBvZgpCT1VORCBhbmQgTk9FUlJPUiBhcmd1bWVu dHMuCgpUaGlzIHJldHVybmVkIGZ1bmN0aW9uIHdpbGwgYmUgdXNlZCBieSBgaXNlYXJjaC1zZWFy Y2gtc3RyaW5nJyB0bwpzZWFyY2ggZm9yIHRoZSBmaXJzdCBvY2N1cnJlbmNlIG9mIFNUUklORy4i KQoKKGRlZnVuIGlzZWFyY2gtc2VhcmNoLWZ1biAoKQogICJSZXR1cm4gdGhlIGZ1bmN0aW9uIHRv IHVzZSBmb3IgdGhlIHNlYXJjaC4KQ2FuIGJlIGNoYW5nZWQgdmlhIGBpc2VhcmNoLXNlYXJjaC1m dW4tZnVuY3Rpb24nIGZvciBzcGVjaWFsIG5lZWRzLiIKICAoZnVuY2FsbCAob3IgaXNlYXJjaC1z ZWFyY2gtZnVuLWZ1bmN0aW9uICdpc2VhcmNoLXNlYXJjaC1mdW4tZGVmYXVsdCkpKQoKKGRlZnVu IGlzZWFyY2gtLWxheC1yZWdleHAtZnVuY3Rpb24tcCAoKQogICJOb24tbmlsIGlmIG5leHQgcmVn ZXhwLWZ1bmN0aW9uIGNhbGwgc2hvdWxkIGJlIGxheC4iCiAgKG9yIChtZW1xIHRoaXMtY29tbWFu ZCAnKGlzZWFyY2gtcHJpbnRpbmctY2hhciBpc2VhcmNoLWRlbC1jaGFyKSkKICAgICAgaXNlYXJj aC15YW5rLWZsYWcpKQoKKGRlZnVuIGlzZWFyY2gtc2VhcmNoLWZ1bi1kZWZhdWx0ICgpCiAgIlJl dHVybiBkZWZhdWx0IGZ1bmN0aW9ucyB0byB1c2UgZm9yIHRoZSBzZWFyY2guIgogIChsYW1iZGEg KHN0cmluZyAmb3B0aW9uYWwgYm91bmQgbm9lcnJvciBjb3VudCkKICAgIChsZXQgKDs7IEV2YWx1 YXRlIHRoaXMgYmVmb3JlIGJpbmRpbmcgYHNlYXJjaC1zcGFjZXMtcmVnZXhwJyB3aGljaAogICAg ICAgICAgOzsgY2FuIGJyZWFrIGFsbCBzb3J0cyBvZiByZWdleHAgc2VhcmNoZXMuICBJbiBwYXJ0 aWN1bGFyLAogICAgICAgICAgOzsgY2FsbGluZyBgaXNlYXJjaC1yZWdleHAtZnVuY3Rpb24nIGNh biB0cmlnZ2VyIGF1dG9sb2FkaW5nCiAgICAgICAgICA7OyAoQnVnIzM1ODAyKS4KICAgICAgICAg IChyZWdleHAKICAgICAgICAgICAoY29uZCAoaXNlYXJjaC1yZWdleHAtZnVuY3Rpb24KICAgICAg ICAgICAgICAgICAgKGxldCAoKGxheCAoYW5kIChub3QgYm91bmQpCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAoaXNlYXJjaC0tbGF4LXJlZ2V4cC1mdW5jdGlvbi1wKSkpKQogICAg ICAgICAgICAgICAgICAgICh3aGVuIGxheAogICAgICAgICAgICAgICAgICAgICAgKHNldHEgaXNl YXJjaC1hZGp1c3RlZCB0KSkKICAgICAgICAgICAgICAgICAgICAoaWYgKGZ1bmN0aW9ucCBpc2Vh cmNoLXJlZ2V4cC1mdW5jdGlvbikKICAgICAgICAgICAgICAgICAgICAgICAgKGZ1bmNhbGwgaXNl YXJjaC1yZWdleHAtZnVuY3Rpb24gc3RyaW5nIGxheCkKICAgICAgICAgICAgICAgICAgICAgICh3 b3JkLXNlYXJjaC1yZWdleHAgc3RyaW5nIGxheCkpKSkKICAgICAgICAgICAgICAgICAoaXNlYXJj aC1yZWdleHAgc3RyaW5nKQogICAgICAgICAgICAgICAgICh0IChyZWdleHAtcXVvdGUgc3RyaW5n KSkpKQogICAgICAgICAgOzsgVXNlIGxheCB2ZXJzaW9ucyB0byBub3QgZmFpbCBhdCB0aGUgZW5k IG9mIHRoZSB3b3JkIHdoaWxlCiAgICAgICAgICA7OyB0aGUgdXNlciBhZGRzIGFuZCByZW1vdmVz IGNoYXJhY3RlcnMgaW4gdGhlIHNlYXJjaCBzdHJpbmcKICAgICAgICAgIDs7IChvciB3aGVuIHVz aW5nIG5vbmluY3JlbWVudGFsIHdvcmQgaXNlYXJjaCkKICAgICAgICAgIChzZWFyY2gtc3BhY2Vz LXJlZ2V4cCAod2hlbiAoaWYgaXNlYXJjaC1yZWdleHAKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgaXNlYXJjaC1yZWdleHAtbGF4LXdoaXRlc3BhY2UKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzZWFyY2gtbGF4LXdoaXRlc3BhY2UpCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWFyY2gtd2hpdGVzcGFjZS1yZWdleHAp KSkKICAgICAgKGZ1bmNhbGwKICAgICAgIChpZiBpc2VhcmNoLWZvcndhcmQgIydyZS1zZWFyY2gt Zm9yd2FyZCAjJ3JlLXNlYXJjaC1iYWNrd2FyZCkKICAgICAgIHJlZ2V4cCBib3VuZCBub2Vycm9y IGNvdW50KSkpKQoKKGRlZnVuIGlzZWFyY2gtc2VhcmNoLXN0cmluZyAoc3RyaW5nIGJvdW5kIG5v ZXJyb3IpCiAgIlNlYXJjaCBmb3IgdGhlIGZpcnN0IG9jY3VycmVuY2Ugb2YgU1RSSU5HIG9yIGl0 cyB0cmFuc2xhdGlvbi4KU1RSSU5HJ3MgY2hhcmFjdGVycyBhcmUgdHJhbnNsYXRlZCB1c2luZyBg dHJhbnNsYXRpb24tdGFibGUtZm9yLWlucHV0JwppZiB0aGF0IGlzIG5vbi1uaWwuCklmIGZvdW5k LCBtb3ZlIHBvaW50IHRvIHRoZSBlbmQgb2YgdGhlIG9jY3VycmVuY2UsCnVwZGF0ZSB0aGUgbWF0 Y2ggZGF0YSwgYW5kIHJldHVybiBwb2ludC4KQW4gb3B0aW9uYWwgc2Vjb25kIGFyZ3VtZW50IGJv dW5kcyB0aGUgc2VhcmNoOyBpdCBpcyBhIGJ1ZmZlciBwb3NpdGlvbi4KVGhlIG1hdGNoIGZvdW5k IG11c3Qgbm90IGV4dGVuZCBhZnRlciB0aGF0IHBvc2l0aW9uLgpPcHRpb25hbCB0aGlyZCBhcmd1 bWVudCwgaWYgdCwgbWVhbnMgaWYgZmFpbCBqdXN0IHJldHVybiBuaWwgKG5vIGVycm9yKS4KICBJ ZiBub3QgbmlsIGFuZCBub3QgdCwgbW92ZSB0byBsaW1pdCBvZiBzZWFyY2ggYW5kIHJldHVybiBu aWwuIgogIChsZXQqICgoZnVuYyAoaXNlYXJjaC1zZWFyY2gtZnVuKSkKICAgICAgICAgKHBvczEg KHNhdmUtZXhjdXJzaW9uIChmdW5jYWxsIGZ1bmMgc3RyaW5nIGJvdW5kIG5vZXJyb3IpKSkKICAg ICAgICAgcG9zMikKICAgICh3aGVuIChhbmQKCSAgIDs7IEF2b2lkICJvYnNvbGV0ZSIgd2Fybmlu Z3MgZm9yIHRyYW5zbGF0aW9uLXRhYmxlLWZvci1pbnB1dC4KCSAgICh3aXRoLW5vLXdhcm5pbmdz CgkgICAgIChjaGFyLXRhYmxlLXAgdHJhbnNsYXRpb24tdGFibGUtZm9yLWlucHV0KSkKCSAgICht dWx0aWJ5dGUtc3RyaW5nLXAgc3RyaW5nKQoJICAgOzsgTWlub3Igb3B0aW1pemF0aW9uLgoJICAg KHN0cmluZy1tYXRjaC1wICJbXls6YXNjaWk6XV0iIHN0cmluZykpCiAgICAgIChsZXQgKCh0cmFu c2xhdGVkCiAgICAgICAgICAgICAoYXBwbHkgJ3N0cmluZwogICAgICAgICAgICAgICAgICAgICht YXBjYXIgKGxhbWJkYSAoYykKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG9yCgkJCSAg ICAgICA7OyBBdm9pZCAib2Jzb2xldGUiIHdhcm5pbmdzIGZvcgoJCQkgICAgICAgOzsgdHJhbnNs YXRpb24tdGFibGUtZm9yLWlucHV0LgoJCQkgICAgICAgKHdpdGgtbm8td2FybmluZ3MKCQkJCSAo YXJlZiB0cmFuc2xhdGlvbi10YWJsZS1mb3ItaW5wdXQgYykpCgkJCSAgICAgICBjKSkKICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHN0cmluZykpKQogICAgICAgICAgICBtYXRjaC1kYXRhKQog ICAgICAgICh3aGVuIHRyYW5zbGF0ZWQKICAgICAgICAgIChzYXZlLW1hdGNoLWRhdGEKICAgICAg ICAgICAgKHNhdmUtZXhjdXJzaW9uCiAgICAgICAgICAgICAgKGlmIChzZXRxIHBvczIgKGZ1bmNh bGwgZnVuYyB0cmFuc2xhdGVkIGJvdW5kIG5vZXJyb3IpKQogICAgICAgICAgICAgICAgICAoc2V0 cSBtYXRjaC1kYXRhIChtYXRjaC1kYXRhIHQpKSkpKQogICAgICAgICAgKHdoZW4gKGFuZCBwb3My CiAgICAgICAgICAgICAgICAgICAgIChvciAobm90IHBvczEpCiAgICAgICAgICAgICAgICAgICAg ICAgICAoaWYgaXNlYXJjaC1mb3J3YXJkICg8IHBvczIgcG9zMSkgKD4gcG9zMiBwb3MxKSkpKQog ICAgICAgICAgICAoc2V0cSBwb3MxIHBvczIpCiAgICAgICAgICAgIChzZXQtbWF0Y2gtZGF0YSBt YXRjaC1kYXRhKSkpKSkKICAgICh3aGVuIHBvczEKICAgICAgOzsgV2hlbiB1c2luZyBtdWx0aXBs ZSBidWZmZXJzIGlzZWFyY2gsIHN3aXRjaCB0byB0aGUgbmV3IGJ1ZmZlciBoZXJlLAogICAgICA7 OyBiZWNhdXNlIGBzYXZlLWV4Y3Vyc2lvbicgYWJvdmUgZG9lc24ndCBhbGxvdyBkb2luZyBpdCBp bnNpZGUgZnVuY2FsbC4KICAgICAgKGlmIChhbmQgbXVsdGktaXNlYXJjaC1uZXh0LWJ1ZmZlci1j dXJyZW50LWZ1bmN0aW9uCgkgICAgICAgKGJ1ZmZlci1saXZlLXAgbXVsdGktaXNlYXJjaC1jdXJy ZW50LWJ1ZmZlcikpCgkgIChzd2l0Y2gtdG8tYnVmZmVyIG11bHRpLWlzZWFyY2gtY3VycmVudC1i dWZmZXIpKQogICAgICAoZ290by1jaGFyIHBvczEpCiAgICAgIHBvczEpKSkKCihkZWZ1biBpc2Vh cmNoLXNlYXJjaCAoKQogIDs7IERvIHRoZSBzZWFyY2ggd2l0aCB0aGUgY3VycmVudCBzZWFyY2gg c3RyaW5nLgogIChpZiAoYW5kIChlcSBpc2VhcmNoLWNhc2UtZm9sZC1zZWFyY2ggdCkgc2VhcmNo LXVwcGVyLWNhc2UpCiAgICAgIChzZXRxIGlzZWFyY2gtY2FzZS1mb2xkLXNlYXJjaAoJICAgIChp c2VhcmNoLW5vLXVwcGVyLWNhc2UtcCBpc2VhcmNoLXN0cmluZyBpc2VhcmNoLXJlZ2V4cCkpKQog IChjb25kaXRpb24tY2FzZSBsb3NzYWdlCiAgICAgIChsZXQgKChpbmhpYml0LXBvaW50LW1vdGlv bi1ob29rcyBpc2VhcmNoLWludmlzaWJsZSkKCSAgICAoaW5oaWJpdC1xdWl0IG5pbCkKCSAgICAo Y2FzZS1mb2xkLXNlYXJjaCBpc2VhcmNoLWNhc2UtZm9sZC1zZWFyY2gpCgkgICAgKHNlYXJjaC1p bnZpc2libGUgaXNlYXJjaC1pbnZpc2libGUpCgkgICAgKHJldHJ5IHQpKQoJKHNldHEgaXNlYXJj aC1lcnJvciBuaWwpCgkod2hpbGUgcmV0cnkKCSAgKHNldHEgaXNlYXJjaC1zdWNjZXNzCgkJKGlz ZWFyY2gtc2VhcmNoLXN0cmluZyBpc2VhcmNoLXN0cmluZyBuaWwgdCkpCgkgIDs7IENsZWFyIFJF VFJZIHVubGVzcyB0aGUgc2VhcmNoIHByZWRpY2F0ZSBzYXlzCgkgIDs7IHRvIHNraXAgdGhpcyBz ZWFyY2ggaGl0LgoJICAoaWYgKG9yIChub3QgaXNlYXJjaC1zdWNjZXNzKQoJCSAgKGJvYnApIChl b2JwKQoJCSAgKD0gKG1hdGNoLWJlZ2lubmluZyAwKSAobWF0Y2gtZW5kIDApKQoJCSAgKGZ1bmNh bGwgaXNlYXJjaC1maWx0ZXItcHJlZGljYXRlCgkJCSAgIChtYXRjaC1iZWdpbm5pbmcgMCkgKG1h dGNoLWVuZCAwKSkpCgkgICAgICAoc2V0cSByZXRyeSBuaWwpKSkKCShzZXRxIGlzZWFyY2gtanVz dC1zdGFydGVkIG5pbCkKCShpZiBpc2VhcmNoLXN1Y2Nlc3MKCSAgICAoc2V0cSBpc2VhcmNoLW90 aGVyLWVuZAoJCSAgKGlmIGlzZWFyY2gtZm9yd2FyZCAobWF0Y2gtYmVnaW5uaW5nIDApIChtYXRj aC1lbmQgMCkpKSkpCgogICAgKHF1aXQgKGlzZWFyY2gtdW5yZWFkID9cQy1nKQoJICAoc2V0cSBp c2VhcmNoLXN1Y2Nlc3MgbmlsKSkKCiAgICAoaW52YWxpZC1yZWdleHAKICAgICAoc2V0cSBpc2Vh cmNoLWVycm9yIChjYXIgKGNkciBsb3NzYWdlKSkpCiAgICAgKGNvbmQKICAgICAgKChzdHJpbmct bWF0Y2gKCSJcXGBQcmVtYXR1cmUgXFx8XFxgVW5tYXRjaGVkICIKCWlzZWFyY2gtZXJyb3IpCiAg ICAgICAoc2V0cSBpc2VhcmNoLWVycm9yICJpbmNvbXBsZXRlIGlucHV0IikpCiAgICAgICgoYW5k IChub3QgaXNlYXJjaC1yZWdleHApCgkgICAgKHN0cmluZy1tYXRjaCAiXFxgUmVndWxhciBleHBy ZXNzaW9uIHRvbyBiaWciIGlzZWFyY2gtZXJyb3IpKQogICAgICAgKGNvbmQKCShpc2VhcmNoLXJl Z2V4cC1mdW5jdGlvbgoJIChzZXRxIGlzZWFyY2gtZXJyb3IgIlRvbyBtYW55IHdvcmRzIikpCgko KGFuZCBpc2VhcmNoLWxheC13aGl0ZXNwYWNlIHNlYXJjaC13aGl0ZXNwYWNlLXJlZ2V4cCkKCSAo c2V0cSBpc2VhcmNoLWVycm9yICJUb28gbWFueSBzcGFjZXMgZm9yIHdoaXRlc3BhY2UgbWF0Y2hp bmciKSkpKSkpCgogICAgKHNlYXJjaC1mYWlsZWQKICAgICAoc2V0cSBpc2VhcmNoLXN1Y2Nlc3Mg bmlsKQogICAgIChzZXRxIGlzZWFyY2gtZXJyb3IgKG50aCAyIGxvc3NhZ2UpKSkKCiAgICAoZXJy b3IKICAgICA7OyBzdGFjayBvdmVyZmxvdyBpbiByZWdleHAgc2VhcmNoLgogICAgIChzZXRxIGlz ZWFyY2gtZXJyb3IgKGZvcm1hdCAiJXMiIGxvc3NhZ2UpKSkpCgogIChpZiBpc2VhcmNoLXN1Y2Nl c3MKICAgICAgbmlsCiAgICA7OyBEaW5nIGlmIGZhaWxlZCB0aGlzIHRpbWUgYWZ0ZXIgc3VjY2Vl ZGluZyBsYXN0IHRpbWUuCiAgICAoYW5kIChpc2VhcmNoLS1zdGF0ZS1zdWNjZXNzIChjYXIgaXNl YXJjaC1jbWRzKSkKCSAoZGluZykpCiAgICAoaWYgKGZ1bmN0aW9ucCAoaXNlYXJjaC0tc3RhdGUt cG9wLWZ1biAoY2FyIGlzZWFyY2gtY21kcykpKQogICAgICAgIChmdW5jYWxsIChpc2VhcmNoLS1z dGF0ZS1wb3AtZnVuIChjYXIgaXNlYXJjaC1jbWRzKSkKICAgICAgICAgICAgICAgICAoY2FyIGlz ZWFyY2gtY21kcykpKQogICAgKGdvdG8tY2hhciAoaXNlYXJjaC0tc3RhdGUtcG9pbnQgKGNhciBp c2VhcmNoLWNtZHMpKSkpKQoKCjs7IENhbGxlZCB3aGVuIG9wZW5pbmcgYW4gb3ZlcmxheSwgYW5k IHdlIGFyZSBzdGlsbCBpbiBpc2VhcmNoLgooZGVmdW4gaXNlYXJjaC1vcGVuLW92ZXJsYXktdGVt cG9yYXJ5IChvdikKICAoaWYgKG5vdCAobnVsbCAob3ZlcmxheS1nZXQgb3YgJ2lzZWFyY2gtb3Bl bi1pbnZpc2libGUtdGVtcG9yYXJ5KSkpCiAgICAgIDs7IFNvbWUgbW9kZXMgd291bGQgd2FudCB0 byBvcGVuIHRoZSBvdmVybGF5cyB0ZW1wb3JhcnkgZHVyaW5nCiAgICAgIDs7IGlzZWFyY2ggaW4g dGhlaXIgb3duIHdheSwgdGhleSBzaG91bGQgc2V0IHRoZQogICAgICA7OyBgaXNlYXJjaC1vcGVu LWludmlzaWJsZS10ZW1wb3JhcnknIHRvIGEgZnVuY3Rpb24gZG9pbmcgdGhpcy4KICAgICAgKGZ1 bmNhbGwgIChvdmVybGF5LWdldCBvdiAnaXNlYXJjaC1vcGVuLWludmlzaWJsZS10ZW1wb3Jhcnkp ICBvdiBuaWwpCiAgICA7OyBTdG9yZSB0aGUgdmFsdWVzIGZvciB0aGUgYGludmlzaWJsZScgcHJv cGVydHksIGFuZCB0aGVuIHNldCBpdCB0byBuaWwuCiAgICA7OyBUaGlzIHdheSB0aGUgdGV4dCBo aWRkZW4gYnkgdGhpcyBvdmVybGF5IGJlY29tZXMgdmlzaWJsZS4KICAgIChvdmVybGF5LXB1dCBv diAnaXNlYXJjaC1pbnZpc2libGUgKG92ZXJsYXktZ2V0IG92ICdpbnZpc2libGUpKQogICAgKG92 ZXJsYXktcHV0IG92ICdpbnZpc2libGUgbmlsKSkpCgoKOzsgVGhpcyBpcyBjYWxsZWQgYXQgdGhl IGVuZCBvZiBpc2VhcmNoLiAgSXQgd2lsbCBvcGVuIHRoZSBvdmVybGF5cwo7OyB0aGF0IGNvbnRh aW4gdGhlIGxhdGVzdCBtYXRjaC4gIE9idmlvdXNseSBpbiBjYXNlIG9mIGEgQy1nIHRoZQo7OyBw b2ludCByZXR1cm5zIHRvIHRoZSBvcmlnaW5hbCBsb2NhdGlvbiB3aGljaCBzdXJlbHkgaXMgbm90 IGNvbnRhaW4KOzsgaW4gYW55IG9mIHRoZXNlIG92ZXJsYXlzLCBzZSB3ZSBhcmUgc2FmZSBpbiB0 aGlzIGNhc2UgdG9vLgooZGVmdW4gaXNlYXJjaC1vcGVuLW5lY2Vzc2FyeS1vdmVybGF5cyAob3Yp CiAgKGxldCAoKGluc2lkZS1vdmVybGF5IChhbmQgICg+IChwb2ludCkgKG92ZXJsYXktc3RhcnQg b3YpKQoJCQkgICAgICAoPD0gKHBvaW50KSAob3ZlcmxheS1lbmQgb3YpKSkpCgk7OyBJZiB0aGlz IGV4aXN0cyBpdCBtZWFucyB0aGF0IHRoZSBvdmVybGF5IHdhcyBvcGVuZWQgdXNpbmcKCTs7IHRo aXMgZnVuY3Rpb24sIG5vdCBieSB1cyB0d2Vha2luZyB0aGUgb3ZlcmxheSBwcm9wZXJ0aWVzLgoJ KGZjdC10ZW1wIChvdmVybGF5LWdldCBvdiAnaXNlYXJjaC1vcGVuLWludmlzaWJsZS10ZW1wb3Jh cnkpKSkKICAgICh3aGVuIChvciBpbnNpZGUtb3ZlcmxheSAobm90IGZjdC10ZW1wKSkKICAgICAg OzsgcmVzdG9yZSB0aGUgdmFsdWVzIGZvciB0aGUgYGludmlzaWJsZScgcHJvcGVydGllcy4KICAg ICAgKG92ZXJsYXktcHV0IG92ICdpbnZpc2libGUgKG92ZXJsYXktZ2V0IG92ICdpc2VhcmNoLWlu dmlzaWJsZSkpCiAgICAgIChvdmVybGF5LXB1dCBvdiAnaXNlYXJjaC1pbnZpc2libGUgbmlsKSkK ICAgIChpZiBpbnNpZGUtb3ZlcmxheQoJKGZ1bmNhbGwgKG92ZXJsYXktZ2V0IG92ICdpc2VhcmNo LW9wZW4taW52aXNpYmxlKSAgb3YpCiAgICAgIChpZiBmY3QtdGVtcAoJICAoZnVuY2FsbCBmY3Qt dGVtcCBvdiB0KSkpKSkKCjs7IFRoaXMgaXMgY2FsbGVkIHdoZW4gZXhpdGluZyBpc2VhcmNoLiBJ dCBjbG9zZXMgdGhlIHRlbXBvcmFyeQo7OyBvcGVuZWQgb3ZlcmxheXMsIGV4Y2VwdCB0aGUgb25l cyB0aGF0IGNvbnRhaW4gdGhlIGxhdGVzdCBtYXRjaC4KKGRlZnVuIGlzZWFyY2gtY2xlYW4tb3Zl cmxheXMgKCkKICAod2hlbiBpc2VhcmNoLW9wZW5lZC1vdmVybGF5cwogICAgKG1hcGMgJ2lzZWFy Y2gtb3Blbi1uZWNlc3Nhcnktb3ZlcmxheXMgaXNlYXJjaC1vcGVuZWQtb3ZlcmxheXMpCiAgICAo c2V0cSBpc2VhcmNoLW9wZW5lZC1vdmVybGF5cyBuaWwpKSkKCgooZGVmdW4gaXNlYXJjaC1pbnRl cnNlY3RzLXAgKHN0YXJ0MCBlbmQwIHN0YXJ0MSBlbmQxKQogICJSZXR1cm4gdCBpZiByZWdpb25z IFNUQVJUMC4uRU5EMCBhbmQgU1RBUlQxLi5FTkQxIGludGVyc2VjdC4iCiAgKG9yIChhbmQgKD49 IHN0YXJ0MCBzdGFydDEpICg8ICBzdGFydDAgZW5kMSkpCiAgICAgIChhbmQgKD4gIGVuZDAgc3Rh cnQxKSAgICg8PSBlbmQwIGVuZDEpKQogICAgICAoYW5kICg+PSBzdGFydDEgc3RhcnQwKSAoPCAg c3RhcnQxIGVuZDApKQogICAgICAoYW5kICg+ICBlbmQxIHN0YXJ0MCkgICAoPD0gZW5kMSBlbmQw KSkpKQoKCjs7IFZlcmlmeSBpZiB0aGUgY3VycmVudCBtYXRjaCBpcyBvdXRzaWRlIG9mIGVhY2gg ZWxlbWVudCBvZgo7OyBgaXNlYXJjaC1vcGVuZWQtb3ZlcmxheXMnLCBpZiBzbyBjbG9zZSB0aGF0 IG92ZXJsYXkuCgooZGVmdW4gaXNlYXJjaC1jbG9zZS11bm5lY2Vzc2FyeS1vdmVybGF5cyAoYmVn aW4gZW5kKQogIChsZXQgKChvdmVybGF5cyBpc2VhcmNoLW9wZW5lZC1vdmVybGF5cykpCiAgICAo c2V0cSBpc2VhcmNoLW9wZW5lZC1vdmVybGF5cyBuaWwpCiAgICAoZG9saXN0IChvdiBvdmVybGF5 cykKICAgICAgKGlmIChpc2VhcmNoLWludGVyc2VjdHMtcCBiZWdpbiBlbmQgKG92ZXJsYXktc3Rh cnQgb3YpIChvdmVybGF5LWVuZCBvdikpCgkgIChwdXNoIG92IGlzZWFyY2gtb3BlbmVkLW92ZXJs YXlzKQoJKGxldCAoKGZjdC10ZW1wIChvdmVybGF5LWdldCBvdiAnaXNlYXJjaC1vcGVuLWludmlz aWJsZS10ZW1wb3JhcnkpKSkKCSAgKGlmIGZjdC10ZW1wCgkgICAgICA7OyBJZiB0aGlzIGV4aXN0 cyBpdCBtZWFucyB0aGF0IHRoZSBvdmVybGF5IHdhcyBvcGVuZWQKCSAgICAgIDs7IHVzaW5nIHRo aXMgZnVuY3Rpb24sIG5vdCBieSB1cyB0d2Vha2luZyB0aGUgb3ZlcmxheQoJICAgICAgOzsgcHJv cGVydGllcy4KCSAgICAgIChmdW5jYWxsIGZjdC10ZW1wIG92IHQpCgkgICAgKG92ZXJsYXktcHV0 IG92ICdpbnZpc2libGUgKG92ZXJsYXktZ2V0IG92ICdpc2VhcmNoLWludmlzaWJsZSkpCgkgICAg KG92ZXJsYXktcHV0IG92ICdpc2VhcmNoLWludmlzaWJsZSBuaWwpKSkpKSkpCgoKKGRlZnVuIGlz ZWFyY2gtcmFuZ2UtaW52aXNpYmxlIChiZWcgZW5kKQogICJSZXR1cm4gdCBpZiBhbGwgdGhlIHRl eHQgZnJvbSBCRUcgdG8gRU5EIGlzIGludmlzaWJsZS4iCiAgKHdoZW4gKC89IGJlZyBlbmQpCiAg ICA7OyBDaGVjayB0aGF0IGludmlzaWJpbGl0eSBydW5zIHVwIHRvIEVORC4KICAgIChzYXZlLWV4 Y3Vyc2lvbgogICAgICAoZ290by1jaGFyIGJlZykKICAgICAgKGxldCAoOzsgY2FuLWJlLW9wZW5l ZCBrZWVwcyB0cmFjayBpZiB3ZSBjYW4gb3BlbiBzb21lIG92ZXJsYXlzLgoJICAgIChjYW4tYmUt b3BlbmVkIChlcSBzZWFyY2gtaW52aXNpYmxlICdvcGVuKSkKCSAgICA7OyB0aGUgbGlzdCBvZiBv dmVybGF5cyB0aGF0IGNvdWxkIGJlIG9wZW5lZAoJICAgIChjcnQtb3ZlcmxheXMgbmlsKSkKCSh3 aGVuIChhbmQgY2FuLWJlLW9wZW5lZCBpc2VhcmNoLWhpZGUtaW1tZWRpYXRlbHkpCgkgIChpc2Vh cmNoLWNsb3NlLXVubmVjZXNzYXJ5LW92ZXJsYXlzIGJlZyBlbmQpKQoJOzsgSWYgdGhlIGZvbGxv d2luZyBjaGFyYWN0ZXIgaXMgY3VycmVudGx5IGludmlzaWJsZSwKCTs7IHNraXAgYWxsIGNoYXJh Y3RlcnMgd2l0aCB0aGF0IHNhbWUgYGludmlzaWJsZScgcHJvcGVydHkgdmFsdWUuCgk7OyBEbyB0 aGF0IG92ZXIgYW5kIG92ZXIuCgkod2hpbGUgKGFuZCAoPCAocG9pbnQpIGVuZCkgKGludmlzaWJs ZS1wIChwb2ludCkpKQoJICAoaWYgKGludmlzaWJsZS1wIChnZXQtdGV4dC1wcm9wZXJ0eSAocG9p bnQpICdpbnZpc2libGUpKQoJICAgICAgKHByb2duCgkJKGdvdG8tY2hhciAobmV4dC1zaW5nbGUt cHJvcGVydHktY2hhbmdlIChwb2ludCkgJ2ludmlzaWJsZQoJCQkJCQkJbmlsIGVuZCkpCgkJOzsg aWYgdGV4dCBpcyBoaWRkZW4gYnkgYW4gYGludmlzaWJsZScgdGV4dCBwcm9wZXJ0eQoJCTs7IHdl IGNhbm5vdCBvcGVuIGl0IGF0IGFsbC4KCQkoc2V0cSBjYW4tYmUtb3BlbmVkIG5pbCkpCgkgICAg KHdoZW4gY2FuLWJlLW9wZW5lZAoJICAgICAgKGxldCAoKG92ZXJsYXlzIChvdmVybGF5cy1hdCAo cG9pbnQpKSkKCQkgICAgb3YtbGlzdAoJCSAgICBvCgkJICAgIGludmlzLXByb3ApCgkJKHdoaWxl IG92ZXJsYXlzCgkJICAoc2V0cSBvIChjYXIgb3ZlcmxheXMpCgkJCWludmlzLXByb3AgKG92ZXJs YXktZ2V0IG8gJ2ludmlzaWJsZSkpCgkJICAoaWYgKGludmlzaWJsZS1wIGludmlzLXByb3ApCgkJ ICAgICAgKGlmIChvdmVybGF5LWdldCBvICdpc2VhcmNoLW9wZW4taW52aXNpYmxlKQoJCQkgIChz ZXRxIG92LWxpc3QgKGNvbnMgbyBvdi1saXN0KSkKCQkJOzsgV2UgZm91bmQgb25lIG92ZXJsYXkg dGhhdCBjYW5ub3QgYmUKCQkJOzsgb3BlbmVkLCB0aGF0IG1lYW5zIHRoZSB3aG9sZSBjaHVuawoJ CQk7OyBjYW5ub3QgYmUgb3BlbmVkLgoJCQkoc2V0cSBjYW4tYmUtb3BlbmVkIG5pbCkpKQoJCSAg KHNldHEgb3ZlcmxheXMgKGNkciBvdmVybGF5cykpKQoJCShpZiBjYW4tYmUtb3BlbmVkCgkJICAg IDs7IEl0IG1ha2VzIHNlbnNlIHRvIGFwcGVuZCB0byB0aGUgb3BlbgoJCSAgICA7OyBvdmVybGF5 cyBsaXN0IG9ubHkgaWYgd2Uga25vdyB0aGF0IHRoaXMgaXMKCQkgICAgOzsgdC4KCQkgICAgKHNl dHEgY3J0LW92ZXJsYXlzIChhcHBlbmQgb3YtbGlzdCBjcnQtb3ZlcmxheXMpKSkpKQoJICAgIChn b3RvLWNoYXIgKG5leHQtb3ZlcmxheS1jaGFuZ2UgKHBvaW50KSkpKSkKCTs7IFNlZSBpZiBpbnZp c2liaWxpdHkgcmVhY2hlcyB1cCB0aHJ1IEVORC4KCShpZiAoPj0gKHBvaW50KSBlbmQpCgkgICAg KGlmIChhbmQgY2FuLWJlLW9wZW5lZCAoY29uc3AgY3J0LW92ZXJsYXlzKSkKCQkocHJvZ24KCQkg IChzZXRxIGlzZWFyY2gtb3BlbmVkLW92ZXJsYXlzCgkJCShhcHBlbmQgaXNlYXJjaC1vcGVuZWQt b3ZlcmxheXMgY3J0LW92ZXJsYXlzKSkKCQkgIChtYXBjICdpc2VhcmNoLW9wZW4tb3ZlcmxheS10 ZW1wb3JhcnkgY3J0LW92ZXJsYXlzKQoJCSAgbmlsKQoJICAgICAgKHNldHEgaXNlYXJjaC1oaWRk ZW4gdCkpKSkpKSkKCihkZWZ1biBpc2VhcmNoLWZpbHRlci12aXNpYmxlIChiZWcgZW5kKQogICJS ZXR1cm4gbm9uLW5pbCBpZiB0ZXh0IGJldHdlZW4gQkVHIGFuZCBFTkQgaXMgZGVlbWVkIHZpc2li bGUgYnkgSXNlYXJjaC4KVGhpcyBmdW5jdGlvbiBpcyBpbnRlbmRlZCB0byBiZSB1c2VkIGFzIGBp c2VhcmNoLWZpbHRlci1wcmVkaWNhdGUnLgpJdCByZXR1cm5zIG5vbi1uaWwgaWYgdGhlIHRleHQg YmV0d2VlbiBCRUcgYW5kIEVORCBpcyB2aXNpYmxlIHRvCklzZWFyY2gsIGF0IGxlYXN0IHBhcnRp YWxseSwgYXMgZGV0ZXJtaW5lZCBieSBgaXNlYXJjaC1yYW5nZS1pbnZpc2libGUnLgpJZiBgc2Vh cmNoLWludmlzaWJsZScgaXMgdCwgd2hpY2ggYWxsb3dzIElzZWFyY2ggbWF0Y2hlcyBpbnNpZGUK aW52aXNpYmxlIHRleHQsIHRoaXMgZnVuY3Rpb24gd2lsbCBhbHdheXMgcmV0dXJuIG5vbi1uaWws IHJlZ2FyZGxlc3MKb2Ygd2hhdCBgaXNlYXJjaC1yYW5nZS1pbnZpc2libGUnIHNheXMuIgogIChv ciAoZXEgc2VhcmNoLWludmlzaWJsZSB0KQogICAgICAobm90IChpc2VhcmNoLXJhbmdlLWludmlz aWJsZSBiZWcgZW5kKSkpKQoKDAo7OyBHZW5lcmFsIHV0aWxpdGllcwoKKGRlZnVuIGlzZWFyY2gt bm8tdXBwZXItY2FzZS1wIChzdHJpbmcgcmVnZXhwLWZsYWcpCiAgIlJldHVybiB0IGlmIHRoZXJl IGFyZSBubyB1cHBlciBjYXNlIGNoYXJzIGluIFNUUklORy4KSWYgUkVHRVhQLUZMQUcgaXMgbm9u LW5pbCwgZGlzcmVnYXJkIGxldHRlcnMgcHJlY2VkZWQgYnkgYFxcJyAoYnV0IG5vdCBgXFxcXCcp CnNpbmNlIHRoZXkgaGF2ZSBzcGVjaWFsIG1lYW5pbmcgaW4gYSByZWdleHAuIgogIChsZXQgKHF1 b3RlLWZsYWcgKGkgMCkgKGxlbiAobGVuZ3RoIHN0cmluZykpIGZvdW5kKQogICAgKHdoaWxlIChh bmQgKG5vdCBmb3VuZCkgKDwgaSBsZW4pKQogICAgICAobGV0ICgoY2hhciAoYXJlZiBzdHJpbmcg aSkpKQoJKGlmIChhbmQgcmVnZXhwLWZsYWcgKGVxIGNoYXIgP1xcKSkKCSAgICAoc2V0cSBxdW90 ZS1mbGFnIChub3QgcXVvdGUtZmxhZykpCgkgIChpZiAoYW5kIChub3QgcXVvdGUtZmxhZykgKG5v dCAoZXEgY2hhciAoZG93bmNhc2UgY2hhcikpKSkKCSAgICAgIChzZXRxIGZvdW5kIHQpKQoJICAo c2V0cSBxdW90ZS1mbGFnIG5pbCkpKQogICAgICAoc2V0cSBpICgxKyBpKSkpCiAgICAobm90IChv ciBmb3VuZAogICAgICAgICAgICAgOzsgRXZlbiBpZiB0aGVyZSdzIG5vIHVwcGVyY2FzZSBjaGFy LCB3ZSB3YW50IHRvIGRldGVjdCB0aGUgdXNlCiAgICAgICAgICAgICA7OyBvZiBbOnVwcGVyOl0g b3IgWzpsb3dlcjpdIGNoYXItY2xhc3MsIHdoaWNoIGluZGljYXRlcwogICAgICAgICAgICAgOzsg Y2xlYXJseSB0aGF0IHRoZSB1c2VyIGNhcmVzIGFib3V0IGNhc2UgZGlzdGluY3Rpb24uCiAgICAg ICAgICAgICAoYW5kIHJlZ2V4cC1mbGFnIChzdHJpbmctbWF0Y2ggIlxcWzpcXCh1cHBcXHxsb3dc XCllcjpdIiBzdHJpbmcpCiAgICAgICAgICAgICAgICAgIChjb25kaXRpb24tY2FzZSBlcnIKICAg ICAgICAgICAgICAgICAgICAgIChwcm9nbgogICAgICAgICAgICAgICAgICAgICAgICAoc3RyaW5n LW1hdGNoIChzdWJzdHJpbmcgc3RyaW5nIDAgKG1hdGNoLWJlZ2lubmluZyAwKSkKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIikKICAgICAgICAgICAgICAgICAgICAgICAg bmlsKQogICAgICAgICAgICAgICAgICAgIChpbnZhbGlkLXJlZ2V4cAogICAgICAgICAgICAgICAg ICAgICAoZXF1YWwgIlVubWF0Y2hlZCBbIG9yIFteIiAoY2FkciBlcnIpKSkpKSkpKSkKCjs7IFBv cnRhYmlsaXR5IGZ1bmN0aW9ucyB0byBzdXBwb3J0IHZhcmlvdXMgRW1hY3MgdmVyc2lvbnMuCgoo ZGVmdW4gaXNlYXJjaC10ZXh0LWNoYXItZGVzY3JpcHRpb24gKGMpCiAgKGNvbmQKICAgKCg8IGMg P1xzKSAocHJvcGVydGl6ZQoJICAgICAgIChjaGFyLXRvLXN0cmluZyBjKQoJICAgICAgICdkaXNw bGF5IChwcm9wZXJ0aXplIChmb3JtYXQgIl4lYyIgKCsgYyA2NCkpICdmYWNlICdlc2NhcGUtZ2x5 cGgpKSkKICAgKCg9IGMgP1xePykgKHByb3BlcnRpemUKCQkoY2hhci10by1zdHJpbmcgYykKCQkn ZGlzcGxheSAocHJvcGVydGl6ZSAiXj8iICdmYWNlICdlc2NhcGUtZ2x5cGgpKSkKICAgKHQgKGNo YXItdG8tc3RyaW5nIGMpKSkpCgo7OyBHZW5lcmFsIGZ1bmN0aW9uIHRvIHVucmVhZCBjaGFyYWN0 ZXJzIG9yIGV2ZW50cy4KOzsgQWxzbyBpbnNlcnQgdGhlbSBpbiBhIGtleWJvYXJkIG1hY3JvIGJl aW5nIGRlZmluZWQuCihkZWZ1biBpc2VhcmNoLXVucmVhZCAoJnJlc3QgY2hhci1vci1ldmVudHMp CiAgKG1hcGMgJ3N0b3JlLWtiZC1tYWNyby1ldmVudCBjaGFyLW9yLWV2ZW50cykKICAoc2V0cSB1 bnJlYWQtY29tbWFuZC1ldmVudHMKCShhcHBlbmQgY2hhci1vci1ldmVudHMgdW5yZWFkLWNvbW1h bmQtZXZlbnRzKSkpCgoMCjs7IEhpZ2hsaWdodGluZwoKKGRlZnZhciBpc2VhcmNoLW92ZXJsYXkg bmlsKQoKKGRlZnVuIGlzZWFyY2gtaGlnaGxpZ2h0IChiZWcgZW5kKQogIChpZiBzZWFyY2gtaGln aGxpZ2h0CiAgICAgIChpZiBpc2VhcmNoLW92ZXJsYXkKCSAgOzsgT3ZlcmxheSBhbHJlYWR5IGV4 aXN0cywganVzdCBtb3ZlIGl0LgoJICAobW92ZS1vdmVybGF5IGlzZWFyY2gtb3ZlcmxheSBiZWcg ZW5kIChjdXJyZW50LWJ1ZmZlcikpCgk7OyBPdmVybGF5IGRvZXNuJ3QgZXhpc3QsIGNyZWF0ZSBp dC4KCShzZXRxIGlzZWFyY2gtb3ZlcmxheSAobWFrZS1vdmVybGF5IGJlZyBlbmQpKQoJOzsgMTAw MSBpcyBoaWdoZXIgdGhhbiBsYXp5J3MgMTAwMCBhbmQgZWRpZmYncyAxMDArCgkob3ZlcmxheS1w dXQgaXNlYXJjaC1vdmVybGF5ICdwcmlvcml0eSAxMDAxKQoJKG92ZXJsYXktcHV0IGlzZWFyY2gt b3ZlcmxheSAnZmFjZSBpc2VhcmNoLWZhY2UpKSkpCgooZGVmdW4gaXNlYXJjaC1kZWhpZ2hsaWdo dCAoKQogICh3aGVuIGlzZWFyY2gtb3ZlcmxheQogICAgKGRlbGV0ZS1vdmVybGF5IGlzZWFyY2gt b3ZlcmxheSkpKQoMCjs7IGlzZWFyY2gtbGF6eS1oaWdobGlnaHQgZmVhdHVyZQo7OyBieSBCb2Ig R2xpY2tzdGVpbiA8aHR0cDovL3d3dy56YW5zaGluLmNvbS9+Ym9iZy8+Cgo7OyBXaGVuIGFjdGl2 ZSwgKmV2ZXJ5KiBtYXRjaCBmb3IgdGhlIGN1cnJlbnQgc2VhcmNoIHN0cmluZyBpcwo7OyBoaWdo bGlnaHRlZDogdGhlIGN1cnJlbnQgb25lIHVzaW5nIHRoZSBub3JtYWwgaXNlYXJjaCBtYXRjaCBj b2xvcgo7OyBhbmQgYWxsIHRoZSBvdGhlcnMgdXNpbmcgYGlzZWFyY2gtbGF6eS1oaWdobGlnaHQn LiAgVGhlIGV4dHJhCjs7IGhpZ2hsaWdodGluZyBtYWtlcyBpdCBlYXNpZXIgdG8gYW50aWNpcGF0 ZSB3aGVyZSB0aGUgY3Vyc29yIHdpbGwKOzsgbGFuZCBlYWNoIHRpbWUgeW91IHByZXNzIEMtcyBv ciBDLXIgdG8gcmVwZWF0IGEgcGVuZGluZyBzZWFyY2guCjs7IEhpZ2hsaWdodGluZyBvZiB0aGVz ZSBhZGRpdGlvbmFsIG1hdGNoZXMgaGFwcGVucyBpbiBhIGRlZmVycmVkCjs7IGZhc2hpb24gdXNp bmcgImlkbGUgdGltZXJzLCIgc28gdGhlIGN5Y2xlcyBuZWVkZWQgZG8gbm90IHJvYgo7OyBpc2Vh cmNoIG9mIGl0cyB1c3VhbCBzbmFwcHkgcmVzcG9uc2UuCgo7OyBJTVBMRU1FTlRBVElPTiBOT1RF OiBUaGlzIGRlcGVuZHMgb24gc29tZSBpc2VhcmNoIGludGVybmFscy4KOzsgU3BlY2lmaWNhbGx5 Ogo7OyAgLSBgaXNlYXJjaC11cGRhdGUnIGlzIGV4cGVjdGVkIHRvIGJlIGNhbGxlZCAoYXQgbGVh c3QpIGV2ZXJ5IHRpbWUKOzsgICAgdGhlIHNlYXJjaCBzdHJpbmcgb3Igd2luZG93LXN0YXJ0IGNo YW5nZXM7Cjs7ICAtIGBpc2VhcmNoLXN0cmluZycgaXMgZXhwZWN0ZWQgdG8gY29udGFpbiB0aGUg Y3VycmVudCBzZWFyY2gKOzsgICAgc3RyaW5nIGFzIGVudGVyZWQgYnkgdGhlIHVzZXI7Cjs7ICAt IHRoZSB0eXBlIG9mIHRoZSBjdXJyZW50IHNlYXJjaCBpcyBleHBlY3RlZCB0byBiZSBnaXZlbiBi eQo7OyAgICBgaXNlYXJjaC1yZWdleHAtZnVuY3Rpb24nIGFuZCBgaXNlYXJjaC1yZWdleHAnOwo7 OyAgLSB0aGUgZGlyZWN0aW9uIG9mIHRoZSBjdXJyZW50IHNlYXJjaCBpcyBleHBlY3RlZCB0byBi ZSBnaXZlbiBieQo7OyAgICBgaXNlYXJjaC1mb3J3YXJkJzsKOzsgIC0gdGhlIHZhcmlhYmxlIGBp c2VhcmNoLWVycm9yJyBpcyBleHBlY3RlZCB0byBiZSB0cnVlCjs7ICAgIG9ubHkgaWYgYGlzZWFy Y2gtc3RyaW5nJyBpcyBhbiBpbnZhbGlkIHJlZ2V4cC4KCihkZWZ2YXIgaXNlYXJjaC1sYXp5LWhp Z2hsaWdodC1vdmVybGF5cyBuaWwpCihkZWZ2YXIgaXNlYXJjaC1sYXp5LWhpZ2hsaWdodC13cmFw cGVkIG5pbCkKKGRlZnZhciBpc2VhcmNoLWxhenktaGlnaGxpZ2h0LXN0YXJ0LWxpbWl0IG5pbCkK KGRlZnZhciBpc2VhcmNoLWxhenktaGlnaGxpZ2h0LWVuZC1saW1pdCBuaWwpCihkZWZ2YXIgaXNl YXJjaC1sYXp5LWhpZ2hsaWdodC1zdGFydCBuaWwpCihkZWZ2YXIgaXNlYXJjaC1sYXp5LWhpZ2hs aWdodC1lbmQgbmlsKQooZGVmdmFyIGlzZWFyY2gtbGF6eS1oaWdobGlnaHQtdGltZXIgbmlsKQoo ZGVmdmFyIGlzZWFyY2gtbGF6eS1oaWdobGlnaHQtbGFzdC1zdHJpbmcgbmlsKQooZGVmdmFyIGlz ZWFyY2gtbGF6eS1oaWdobGlnaHQtd2luZG93IG5pbCkKKGRlZnZhciBpc2VhcmNoLWxhenktaGln aGxpZ2h0LXdpbmRvdy1ncm91cCBuaWwpCihkZWZ2YXIgaXNlYXJjaC1sYXp5LWhpZ2hsaWdodC13 aW5kb3ctc3RhcnQgbmlsKQooZGVmdmFyIGlzZWFyY2gtbGF6eS1oaWdobGlnaHQtd2luZG93LWVu ZCBuaWwpCihkZWZ2YXIgaXNlYXJjaC1sYXp5LWhpZ2hsaWdodC13aW5kb3ctc3RhcnQtY2hhbmdl ZCBuaWwpCihkZWZ2YXIgaXNlYXJjaC1sYXp5LWhpZ2hsaWdodC13aW5kb3ctZW5kLWNoYW5nZWQg bmlsKQooZGVmdmFyIGlzZWFyY2gtbGF6eS1oaWdobGlnaHQtcG9pbnQtbWluIG5pbCkKKGRlZnZh ciBpc2VhcmNoLWxhenktaGlnaGxpZ2h0LXBvaW50LW1heCBuaWwpCihkZWZ2YXIgaXNlYXJjaC1s YXp5LWhpZ2hsaWdodC1idWZmZXIgbmlsKQooZGVmdmFyIGlzZWFyY2gtbGF6eS1oaWdobGlnaHQt Y2FzZS1mb2xkLXNlYXJjaCBuaWwpCihkZWZ2YXIgaXNlYXJjaC1sYXp5LWhpZ2hsaWdodC1yZWdl eHAgbmlsKQooZGVmdmFyIGlzZWFyY2gtbGF6eS1oaWdobGlnaHQtbGF4LXdoaXRlc3BhY2Ugbmls KQooZGVmdmFyIGlzZWFyY2gtbGF6eS1oaWdobGlnaHQtcmVnZXhwLWxheC13aGl0ZXNwYWNlIG5p bCkKKGRlZmluZS1vYnNvbGV0ZS12YXJpYWJsZS1hbGlhcyAnaXNlYXJjaC1sYXp5LWhpZ2hsaWdo dC13b3JkCiAgJ2lzZWFyY2gtbGF6eS1oaWdobGlnaHQtcmVnZXhwLWZ1bmN0aW9uICIyNS4xIikK KGRlZnZhciBpc2VhcmNoLWxhenktaGlnaGxpZ2h0LXJlZ2V4cC1mdW5jdGlvbiBuaWwpCihkZWZ2 YXIgaXNlYXJjaC1sYXp5LWhpZ2hsaWdodC1mb3J3YXJkIG5pbCkKKGRlZnZhciBpc2VhcmNoLWxh enktaGlnaGxpZ2h0LWVycm9yIG5pbCkKKGRlZnZhciBpc2VhcmNoLWxhenktY291bnQtY3VycmVu dCBuaWwpCihkZWZ2YXIgaXNlYXJjaC1sYXp5LWNvdW50LXRvdGFsIG5pbCkKKGRlZnZhciBpc2Vh cmNoLWxhenktY291bnQtaGFzaCAobWFrZS1oYXNoLXRhYmxlKSkKCihkZWZ1biBsYXp5LWhpZ2hs aWdodC1jbGVhbnVwICgmb3B0aW9uYWwgZm9yY2UgcHJvY3Jhc3RpbmF0ZSkKICAiU3RvcCBsYXp5 IGhpZ2hsaWdodGluZyBhbmQgcmVtb3ZlIGV4dHJhIGhpZ2hsaWdodGluZyBmcm9tIGN1cnJlbnQg YnVmZmVyLgpGT1JDRSBub24tbmlsIG1lYW5zIGRvIGl0IHdoZXRoZXIgb3Igbm90IGBsYXp5LWhp Z2hsaWdodC1jbGVhbnVwJyBpcyBuaWwuClBST0NSQVNUSU5BVEUgbm9uLW5pbCBtZWFucyBwb3N0 cG9uZSBjbGVhbnVwIHRvIGEgbGF0ZXIgdGltZS4KVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgd2hl biBleGl0aW5nIGFuIGluY3JlbWVudGFsIHNlYXJjaCBpZgpgbGF6eS1oaWdobGlnaHQtY2xlYW51 cCcgaXMgbm9uLW5pbC4iCiAgKGludGVyYWN0aXZlICcodCkpCiAgKHdoZW4gKGFuZCAob3IgZm9y Y2UgbGF6eS1oaWdobGlnaHQtY2xlYW51cCkgKG5vdCBwcm9jcmFzdGluYXRlKSkKICAgICh3aGls ZSBpc2VhcmNoLWxhenktaGlnaGxpZ2h0LW92ZXJsYXlzCiAgICAgIChkZWxldGUtb3ZlcmxheSAo Y2FyIGlzZWFyY2gtbGF6eS1oaWdobGlnaHQtb3ZlcmxheXMpKQogICAgICAoc2V0cSBpc2VhcmNo LWxhenktaGlnaGxpZ2h0LW92ZXJsYXlzCiAgICAgICAgICAgIChjZHIgaXNlYXJjaC1sYXp5LWhp Z2hsaWdodC1vdmVybGF5cykpKSkKICAod2hlbiBpc2VhcmNoLWxhenktaGlnaGxpZ2h0LXRpbWVy CiAgICAoY2FuY2VsLXRpbWVyIGlzZWFyY2gtbGF6eS1oaWdobGlnaHQtdGltZXIpCiAgICAoc2V0 cSBpc2VhcmNoLWxhenktaGlnaGxpZ2h0LXRpbWVyIG5pbCkpKQoKKGRlZnVuIGlzZWFyY2gtbGF6 eS1oaWdobGlnaHQtbmV3LWxvb3AgKCZvcHRpb25hbCBiZWcgZW5kKQogICJDbGVhbnVwIGFueSBw cmV2aW91cyBgbGF6eS1oaWdobGlnaHQnIGxvb3AgYW5kIGJlZ2luIGEgbmV3IG9uZS4KQkVHIGFu ZCBFTkQgc3BlY2lmeSB0aGUgYm91bmRzIHdpdGhpbiB3aGljaCBoaWdobGlnaHRpbmcgc2hvdWxk IG9jY3VyLgpUaGlzIGlzIGNhbGxlZCB3aGVuIGBpc2VhcmNoLXVwZGF0ZScgaXMgaW52b2tlZCAo d2hpY2ggY2FuIGNhdXNlIHRoZQpzZWFyY2ggc3RyaW5nIHRvIGNoYW5nZSBvciB0aGUgd2luZG93 IHRvIHNjcm9sbCkuICBJdCBpcyBhbHNvIHVzZWQKYnkgb3RoZXIgRW1hY3MgZmVhdHVyZXMuIgog ICh3aGVuIChhbmQgKG51bGwgZXhlY3V0aW5nLWtiZC1tYWNybykKICAgICAgICAgICAgIChzaXQt Zm9yIDApICAgICAgICAgO21ha2Ugc3VyZSAod2luZG93LXN0YXJ0KSBpcyBjcmVkaWJsZQogICAg ICAgICAgICAgKG9yIChub3QgKGVxdWFsIGlzZWFyY2gtc3RyaW5nCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgaXNlYXJjaC1sYXp5LWhpZ2hsaWdodC1sYXN0LXN0cmluZykpCiAgICAgICAg ICAgICAgICAgKG5vdCAobWVtcSAoc2VsZWN0ZWQtd2luZG93KQogICAgICAgICAgICAgICAgICAg ICAgICAgICAgaXNlYXJjaC1sYXp5LWhpZ2hsaWdodC13aW5kb3ctZ3JvdXApKQoJCSAobm90IChl cSBpc2VhcmNoLWxhenktaGlnaGxpZ2h0LWNhc2UtZm9sZC1zZWFyY2gKCQkJICBpc2VhcmNoLWNh c2UtZm9sZC1zZWFyY2gpKQoJCSAobm90IChlcSBpc2VhcmNoLWxhenktaGlnaGxpZ2h0LXJlZ2V4 cAoJCQkgIGlzZWFyY2gtcmVnZXhwKSkKCQkgKG5vdCAoZXEgaXNlYXJjaC1sYXp5LWhpZ2hsaWdo dC1yZWdleHAtZnVuY3Rpb24KCQkJICBpc2VhcmNoLXJlZ2V4cC1mdW5jdGlvbikpCgkJIChub3Qg KGVxIGlzZWFyY2gtbGF6eS1oaWdobGlnaHQtbGF4LXdoaXRlc3BhY2UKCQkJICBpc2VhcmNoLWxh eC13aGl0ZXNwYWNlKSkKCQkgKG5vdCAoZXEgaXNlYXJjaC1sYXp5LWhpZ2hsaWdodC1yZWdleHAt bGF4LXdoaXRlc3BhY2UKCQkJICBpc2VhcmNoLXJlZ2V4cC1sYXgtd2hpdGVzcGFjZSkpCgkJIChu b3QgKGVxIGlzZWFyY2gtZm9yd2FyZAoJCQkgIGlzZWFyY2gtbGF6eS1oaWdobGlnaHQtZm9yd2Fy ZCkpCgkJIDs7IEluIGNhc2Ugd2UgYXJlIHJlY292ZXJpbmcgZnJvbSBhbiBlcnJvci4KCQkgKG5v dCAoZXF1YWwgaXNlYXJjaC1lcnJvcgoJCQkgICAgIGlzZWFyY2gtbGF6eS1oaWdobGlnaHQtZXJy b3IpKQoJCSAoaWYgbGF6eS1oaWdobGlnaHQtYnVmZmVyCgkJICAgICAobm90ICg9IChwb2ludC1t aW4pCgkJCSAgICAgaXNlYXJjaC1sYXp5LWhpZ2hsaWdodC1wb2ludC1taW4pKQoJCSAgIChzZXRx IGlzZWFyY2gtbGF6eS1oaWdobGlnaHQtd2luZG93LXN0YXJ0LWNoYW5nZWQKCQkJIChub3QgKD0g KHdpbmRvdy1ncm91cC1zdGFydCkKCQkJICAgICAgICAgaXNlYXJjaC1sYXp5LWhpZ2hsaWdodC13 aW5kb3ctc3RhcnQpKSkpCgkJIChpZiBsYXp5LWhpZ2hsaWdodC1idWZmZXIKCQkgICAgIChub3Qg KD0gKHBvaW50LW1heCkKCQkJICAgICBpc2VhcmNoLWxhenktaGlnaGxpZ2h0LXBvaW50LW1heCkp CgkJICAgKHNldHEgaXNlYXJjaC1sYXp5LWhpZ2hsaWdodC13aW5kb3ctZW5kLWNoYW5nZWQKCQkJ IChub3QgKD0gKHdpbmRvdy1ncm91cC1lbmQpIDsgV2luZG93IG1heSBoYXZlIGJlZW4gc3BsaXQv am9pbmVkLgoJCQkgICAgICAgICBpc2VhcmNoLWxhenktaGlnaGxpZ2h0LXdpbmRvdy1lbmQpKSkp KSkKICAgIDs7IHNvbWV0aGluZyBpbXBvcnRhbnQgZGlkIGluZGVlZCBjaGFuZ2UKICAgIChsYXp5 LWhpZ2hsaWdodC1jbGVhbnVwIHQgKG5vdCAoZXF1YWwgaXNlYXJjaC1zdHJpbmcgIiIpKSkgO3N0 b3Agb2xkIHRpbWVyCiAgICAod2hlbiBpc2VhcmNoLWxhenktY291bnQKICAgICAgKHdoZW4gKG9y IChlcXVhbCBpc2VhcmNoLXN0cmluZyAiIikKICAgICAgICAgICAgICAgIDs7IENoZWNrIGlmIHRo aXMgcGxhY2Ugd2FzIHJlYWNoZWQgYnkgYSBjb25kaXRpb24gYWJvdmUKICAgICAgICAgICAgICAg IDs7IG90aGVyIHRoYW4gY2hhbmdlZCB3aW5kb3cgYm91bmRhcmllcyAodGhhdCBzaG91bGRuJ3QK ICAgICAgICAgICAgICAgIDs7IHJlc2V0IHRoZSBjb3VudGVyKQogICAgICAgICAgICAgICAgKGFu ZCAobm90IGlzZWFyY2gtbGF6eS1oaWdobGlnaHQtd2luZG93LXN0YXJ0LWNoYW5nZWQpCiAgICAg ICAgICAgICAgICAgICAgIChub3QgaXNlYXJjaC1sYXp5LWhpZ2hsaWdodC13aW5kb3ctZW5kLWNo YW5nZWQpKQogICAgICAgICAgICAgICAgOzsgQWxzbyBjaGVjayBmb3IgY2hhbmdlcyBpbiBidWZm ZXIgYm91bmRhcmllcyBpbgogICAgICAgICAgICAgICAgOzsgYSBwb3NzaWJseSBuYXJyb3dlZCBi dWZmZXIgaW4gY2FzZSBsYXp5LWhpZ2hsaWdodC1idWZmZXIKICAgICAgICAgICAgICAgIDs7IGlz IG5pbCwgdGh1cyB0aGUgc2FtZSBjaGVjayB3YXMgbm90IHBlcmZvcm1lZCBhYm92ZQogICAgICAg ICAgICAgICAgKG5vdCAoPSAocG9pbnQtbWluKQogICAgICAgICAgICAgICAgICAgICAgICBpc2Vh cmNoLWxhenktaGlnaGxpZ2h0LXBvaW50LW1pbikpCiAgICAgICAgICAgICAgICAobm90ICg9IChw b2ludC1tYXgpCiAgICAgICAgICAgICAgICAgICAgICAgIGlzZWFyY2gtbGF6eS1oaWdobGlnaHQt cG9pbnQtbWF4KSkpCiAgICAgICAgOzsgUmVzZXQgb2xkIGNvdW50ZXIgYmVmb3JlIGdvaW5nIHRv IGNvdW50IG5ldyBudW1iZXJzCiAgICAgICAgKGNscmhhc2ggaXNlYXJjaC1sYXp5LWNvdW50LWhh c2gpCiAgICAgICAgKHNldHEgaXNlYXJjaC1sYXp5LWNvdW50LWN1cnJlbnQgbmlsCiAgICAgICAg ICAgICAgaXNlYXJjaC1sYXp5LWNvdW50LXRvdGFsIG5pbCkKICAgICAgICAoZnVuY2FsbCAob3Ig aXNlYXJjaC1tZXNzYWdlLWZ1bmN0aW9uICMnaXNlYXJjaC1tZXNzYWdlKSkpKQogICAgKHNldHEg aXNlYXJjaC1sYXp5LWhpZ2hsaWdodC13aW5kb3ctc3RhcnQtY2hhbmdlZCBuaWwpCiAgICAoc2V0 cSBpc2VhcmNoLWxhenktaGlnaGxpZ2h0LXdpbmRvdy1lbmQtY2hhbmdlZCBuaWwpCiAgICAoc2V0 cSBpc2VhcmNoLWxhenktaGlnaGxpZ2h0LWVycm9yIGlzZWFyY2gtZXJyb3IpCiAgICA7OyBJdCB1 c2VkIHRvIGNoZWNrIGZvciBgKG5vdCBpc2VhcmNoLWVycm9yKScgaGVyZSwgYnV0IGFjdHVhbGx5 CiAgICA7OyBsYXp5LWhpZ2hsaWdodGluZyBtaWdodCBmaW5kIG1hdGNoZXMgdG8gaGlnaGxpZ2h0 IGV2ZW4gd2hlbgogICAgOzsgYGlzZWFyY2gtZXJyb3InIGlzIG5vbi1uaWwuICAoQnVnIzk5MTgp CiAgICAoc2V0cSBpc2VhcmNoLWxhenktaGlnaGxpZ2h0LXN0YXJ0LWxpbWl0IGJlZwoJICBpc2Vh cmNoLWxhenktaGlnaGxpZ2h0LWVuZC1saW1pdCBlbmQpCiAgICAoc2V0cSBpc2VhcmNoLWxhenkt aGlnaGxpZ2h0LXdpbmRvdyAgICAgICAoc2VsZWN0ZWQtd2luZG93KQogICAgICAgICAgaXNlYXJj aC1sYXp5LWhpZ2hsaWdodC13aW5kb3ctZ3JvdXAgKHNlbGVjdGVkLXdpbmRvdy1ncm91cCkKCSAg aXNlYXJjaC1sYXp5LWhpZ2hsaWdodC13aW5kb3ctc3RhcnQgKHdpbmRvdy1ncm91cC1zdGFydCkK CSAgaXNlYXJjaC1sYXp5LWhpZ2hsaWdodC13aW5kb3ctZW5kICAgKHdpbmRvdy1ncm91cC1lbmQp CgkgIGlzZWFyY2gtbGF6eS1oaWdobGlnaHQtcG9pbnQtbWluICAgIChwb2ludC1taW4pCgkgIGlz ZWFyY2gtbGF6eS1oaWdobGlnaHQtcG9pbnQtbWF4ICAgIChwb2ludC1tYXgpCgkgIGlzZWFyY2gt bGF6eS1oaWdobGlnaHQtYnVmZmVyICAgICAgIGxhenktaGlnaGxpZ2h0LWJ1ZmZlcgoJICA7OyBT dGFydCBsYXp5LWhpZ2hsaWdodGluZyBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBmb3VuZAoJICA7 OyBtYXRjaCAoYGlzZWFyY2gtb3RoZXItZW5kJykuICBJZiBubyBtYXRjaCwgdXNlIHBvaW50LgoJ ICA7OyBPbmUgb2YgdGhlIG5leHQgdHdvIHZhcmlhYmxlcyAoZGVwZW5kaW5nIG9uIHNlYXJjaCBk aXJlY3Rpb24pCgkgIDs7IGlzIHVzZWQgdG8gZGVmaW5lIHRoZSBzdGFydGluZyBwb3NpdGlvbiBv ZiBsYXp5LWhpZ2hsaWdodGluZwoJICA7OyBhbmQgYWxzbyB0byByZW1lbWJlciB0aGUgY3VycmVu dCBwb3NpdGlvbiBvZiBwb2ludCBiZXR3ZWVuCgkgIDs7IGNhbGxzIG9mIGBpc2VhcmNoLWxhenkt aGlnaGxpZ2h0LXVwZGF0ZScsIGFuZCBhbm90aGVyIHZhcmlhYmxlCgkgIDs7IGlzIHVzZWQgdG8g ZGVmaW5lIHdoZXJlIHRoZSB3cmFwcGVkIHNlYXJjaCBtdXN0IHN0b3AuCgkgIGlzZWFyY2gtbGF6 eS1oaWdobGlnaHQtc3RhcnQgICAgICAgIChvciBpc2VhcmNoLW90aGVyLWVuZCAocG9pbnQpKQoJ ICBpc2VhcmNoLWxhenktaGlnaGxpZ2h0LWVuZCAgICAgICAgICAob3IgaXNlYXJjaC1vdGhlci1l bmQgKHBvaW50KSkKCSAgaXNlYXJjaC1sYXp5LWhpZ2hsaWdodC13cmFwcGVkICAgICAgbmlsCgkg IGlzZWFyY2gtbGF6eS1oaWdobGlnaHQtbGFzdC1zdHJpbmcgIGlzZWFyY2gtc3RyaW5nCgkgIGlz ZWFyY2gtbGF6eS1oaWdobGlnaHQtY2FzZS1mb2xkLXNlYXJjaCBpc2VhcmNoLWNhc2UtZm9sZC1z ZWFyY2gKCSAgaXNlYXJjaC1sYXp5LWhpZ2hsaWdodC1yZWdleHAgICAgICAgaXNlYXJjaC1yZWdl eHAKCSAgaXNlYXJjaC1sYXp5LWhpZ2hsaWdodC1sYXgtd2hpdGVzcGFjZSAgIGlzZWFyY2gtbGF4 LXdoaXRlc3BhY2UKCSAgaXNlYXJjaC1sYXp5LWhpZ2hsaWdodC1yZWdleHAtbGF4LXdoaXRlc3Bh Y2UgaXNlYXJjaC1yZWdleHAtbGF4LXdoaXRlc3BhY2UKCSAgaXNlYXJjaC1sYXp5LWhpZ2hsaWdo dC1yZWdleHAtZnVuY3Rpb24gIGlzZWFyY2gtcmVnZXhwLWZ1bmN0aW9uCgkgIGlzZWFyY2gtbGF6 eS1oaWdobGlnaHQtZm9yd2FyZCAgICAgIGlzZWFyY2gtZm9yd2FyZCkKICAgIDs7IEV4dGVuZCBz dGFydC9lbmQgdG8gbWF0Y2ggd2hvbGUgc3RyaW5nIGF0IHBvaW50IChidWcjMTkzNTMpCiAgICAo aWYgaXNlYXJjaC1sYXp5LWhpZ2hsaWdodC1mb3J3YXJkCiAgICAgICAgKHNldHEgaXNlYXJjaC1s YXp5LWhpZ2hsaWdodC1zdGFydAoJICAgICAgKG1pbiAoKyBpc2VhcmNoLWxhenktaGlnaGxpZ2h0 LXN0YXJ0CgkJICAgICAgKDEtIChsZW5ndGggaXNlYXJjaC1sYXp5LWhpZ2hsaWdodC1sYXN0LXN0 cmluZykpKQoJCSAgIChwb2ludC1tYXgpKSkKICAgICAgKHNldHEgaXNlYXJjaC1sYXp5LWhpZ2hs aWdodC1lbmQKCSAgICAobWF4ICgtIGlzZWFyY2gtbGF6eS1oaWdobGlnaHQtZW5kCgkJICAgICgx LSAobGVuZ3RoIGlzZWFyY2gtbGF6eS1oaWdobGlnaHQtbGFzdC1zdHJpbmcpKSkKCQkgKHBvaW50 LW1pbikpKSkKICAgICh1bmxlc3MgKGVxdWFsIGlzZWFyY2gtc3RyaW5nICIiKQogICAgICAoc2V0 cSBpc2VhcmNoLWxhenktaGlnaGxpZ2h0LXRpbWVyCiAgICAgICAgICAgIChydW4td2l0aC1pZGxl LXRpbWVyIGxhenktaGlnaGxpZ2h0LWluaXRpYWwtZGVsYXkgbmlsCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICdpc2VhcmNoLWxhenktaGlnaGxpZ2h0LXN0YXJ0KSkpKQogIDs7IFVw ZGF0ZSB0aGUgY3VycmVudCBtYXRjaCBudW1iZXIgb25seSBpbiBpc2VhcmNoLW1vZGUgYW5kCiAg OzsgdW5sZXNzIGlzZWFyY2gtbW9kZSBpcyB1c2VkIHNwZWNpYWxseSB3aXRoIGlzZWFyY2gtbWVz c2FnZS1mdW5jdGlvbgogICh3aGVuIChhbmQgaXNlYXJjaC1sYXp5LWNvdW50IGlzZWFyY2gtbW9k ZSAobnVsbCBpc2VhcmNoLW1lc3NhZ2UtZnVuY3Rpb24pKQogICAgOzsgVXBkYXRlIGlzZWFyY2gt bGF6eS1jb3VudC1jdXJyZW50IG9ubHkgd2hlbiBpdCB3YXMgYWxyZWFkeSBzZXQKICAgIDs7IGF0 IHRoZSBlbmQgb2YgaXNlYXJjaC1sYXp5LWhpZ2hsaWdodC1idWZmZXItdXBkYXRlCiAgICAod2hl biBpc2VhcmNoLWxhenktY291bnQtY3VycmVudAogICAgICAoc2V0cSBpc2VhcmNoLWxhenktY291 bnQtY3VycmVudAogICAgICAgICAgICAoZ2V0aGFzaCAocG9pbnQpIGlzZWFyY2gtbGF6eS1jb3Vu dC1oYXNoIDApKQogICAgICAoaXNlYXJjaC1tZXNzYWdlKSkpKQoKKGRlZnVuIGlzZWFyY2gtbGF6 eS1oaWdobGlnaHQtc2VhcmNoIChzdHJpbmcgYm91bmQpCiAgIlNlYXJjaCBhaGVhZCBmb3IgdGhl IG5leHQgb3IgcHJldmlvdXMgbWF0Y2gsIGZvciBsYXp5IGhpZ2hsaWdodGluZy4KQXR0ZW1wdCB0 byBkbyB0aGUgc2VhcmNoIGV4YWN0bHkgdGhlIHdheSB0aGUgcGVuZGluZyBJc2VhcmNoIHdvdWxk LiIKICAoY29uZGl0aW9uLWNhc2UgbmlsCiAgICAgIChsZXQgKChjYXNlLWZvbGQtc2VhcmNoIGlz ZWFyY2gtbGF6eS1oaWdobGlnaHQtY2FzZS1mb2xkLXNlYXJjaCkKCSAgICAoaXNlYXJjaC1yZWdl eHAgaXNlYXJjaC1sYXp5LWhpZ2hsaWdodC1yZWdleHApCgkgICAgKGlzZWFyY2gtcmVnZXhwLWZ1 bmN0aW9uIGlzZWFyY2gtbGF6eS1oaWdobGlnaHQtcmVnZXhwLWZ1bmN0aW9uKQoJICAgIChpc2Vh cmNoLWxheC13aGl0ZXNwYWNlCgkgICAgIGlzZWFyY2gtbGF6eS1oaWdobGlnaHQtbGF4LXdoaXRl c3BhY2UpCgkgICAgKGlzZWFyY2gtcmVnZXhwLWxheC13aGl0ZXNwYWNlCgkgICAgIGlzZWFyY2gt bGF6eS1oaWdobGlnaHQtcmVnZXhwLWxheC13aGl0ZXNwYWNlKQoJICAgIChpc2VhcmNoLWZvcndh cmQgaXNlYXJjaC1sYXp5LWhpZ2hsaWdodC1mb3J3YXJkKQoJICAgIChzZWFyY2gtaW52aXNpYmxl IG5pbCkJOyBkb24ndCBtYXRjaCBpbnZpc2libGUgdGV4dAoJICAgIChyZXRyeSB0KQoJICAgIChz dWNjZXNzIG5pbCkpCgk7OyBVc2UgYSBsb29wIGxpa2UgaW4gYGlzZWFyY2gtc2VhcmNoJy4KCSh3 aGlsZSByZXRyeQoJICAoc2V0cSBzdWNjZXNzIChpc2VhcmNoLXNlYXJjaC1zdHJpbmcgc3RyaW5n IGJvdW5kIHQpKQoJICA7OyBDbGVhciBSRVRSWSB1bmxlc3MgdGhlIHNlYXJjaCBwcmVkaWNhdGUg c2F5cwoJICA7OyB0byBza2lwIHRoaXMgc2VhcmNoIGhpdC4KCSAgKGlmIChvciAobm90IHN1Y2Nl c3MpCgkJICAoPSAocG9pbnQpIGJvdW5kKSA7IGxpa2UgKGJvYnApIChlb2JwKSBpbiBgaXNlYXJj aC1zZWFyY2gnLgoJCSAgKD0gKG1hdGNoLWJlZ2lubmluZyAwKSAobWF0Y2gtZW5kIDApKQoJCSAg KGZ1bmNhbGwgaXNlYXJjaC1maWx0ZXItcHJlZGljYXRlCgkJCSAgIChtYXRjaC1iZWdpbm5pbmcg MCkgKG1hdGNoLWVuZCAwKSkpCgkgICAgICAoc2V0cSByZXRyeSBuaWwpKSkKCXN1Y2Nlc3MpCiAg ICAoZXJyb3IgbmlsKSkpCgooZGVmdW4gaXNlYXJjaC1sYXp5LWhpZ2hsaWdodC1tYXRjaCAobWIg bWUpCiAgKGxldCAoKG92IChtYWtlLW92ZXJsYXkgbWIgbWUpKSkKICAgIChwdXNoIG92IGlzZWFy Y2gtbGF6eS1oaWdobGlnaHQtb3ZlcmxheXMpCiAgICA7OyAxMDAwIGlzIGhpZ2hlciB0aGFuIGVk aWZmJ3MgMTAwKywKICAgIDs7IGJ1dCBsb3dlciB0aGFuIGlzZWFyY2ggbWFpbiBvdmVybGF5J3Mg MTAwMQogICAgKG92ZXJsYXktcHV0IG92ICdwcmlvcml0eSAxMDAwKQogICAgKG92ZXJsYXktcHV0 IG92ICdmYWNlICdsYXp5LWhpZ2hsaWdodCkKICAgICh1bmxlc3MgKG9yIChlcSBpc2VhcmNoLWxh enktaGlnaGxpZ2h0ICdhbGwtd2luZG93cykKICAgICAgICAgICAgICAgIGlzZWFyY2gtbGF6eS1o aWdobGlnaHQtYnVmZmVyKQogICAgICAob3ZlcmxheS1wdXQgb3YgJ3dpbmRvdyAoc2VsZWN0ZWQt d2luZG93KSkpKSkKCihkZWZ1biBpc2VhcmNoLWxhenktaGlnaGxpZ2h0LXN0YXJ0ICgpCiAgIlN0 YXJ0IGEgbmV3IGxhenktaGlnaGxpZ2h0IHVwZGF0aW5nIGxvb3AuIgogIChsYXp5LWhpZ2hsaWdo dC1jbGVhbnVwIHQpIDtyZW1vdmUgb2xkIG92ZXJsYXlzCiAgKGlzZWFyY2gtbGF6eS1oaWdobGln aHQtdXBkYXRlKSkKCihkZWZ1biBpc2VhcmNoLWxhenktaGlnaGxpZ2h0LXVwZGF0ZSAoKQogICJV cGRhdGUgaGlnaGxpZ2h0aW5nIG9mIG90aGVyIG1hdGNoZXMgZm9yIGN1cnJlbnQgc2VhcmNoLiIK ICAobGV0ICgobWF4IGxhenktaGlnaGxpZ2h0LW1heC1hdC1hLXRpbWUpCiAgICAgICAgKGxvb3Bp bmcgdCkKICAgICAgICBub21vcmUgd2luZG93LXN0YXJ0IHdpbmRvdy1lbmQpCiAgICAod2l0aC1s b2NhbC1xdWl0CiAgICAgIChzYXZlLXNlbGVjdGVkLXdpbmRvdwoJKGlmIChhbmQgKHdpbmRvdy1s aXZlLXAgaXNlYXJjaC1sYXp5LWhpZ2hsaWdodC13aW5kb3cpCgkJIChub3QgKG1lbXEgKHNlbGVj dGVkLXdpbmRvdykgaXNlYXJjaC1sYXp5LWhpZ2hsaWdodC13aW5kb3ctZ3JvdXApKSkKCSAgICAo c2VsZWN0LXdpbmRvdyBpc2VhcmNoLWxhenktaGlnaGxpZ2h0LXdpbmRvdykpCgkoc2V0cSB3aW5k b3ctc3RhcnQgKHdpbmRvdy1ncm91cC1zdGFydCkpCgkoc2V0cSB3aW5kb3ctZW5kICh3aW5kb3ct Z3JvdXAtZW5kKSkKCShzYXZlLWV4Y3Vyc2lvbgoJICAoc2F2ZS1tYXRjaC1kYXRhCgkgICAgKGdv dG8tY2hhciAoaWYgaXNlYXJjaC1sYXp5LWhpZ2hsaWdodC1mb3J3YXJkCgkJCSAgIGlzZWFyY2gt bGF6eS1oaWdobGlnaHQtZW5kCgkJCSBpc2VhcmNoLWxhenktaGlnaGxpZ2h0LXN0YXJ0KSkKCSAg ICAod2hpbGUgbG9vcGluZwoJICAgICAgKGxldCogKChib3VuZCAoaWYgaXNlYXJjaC1sYXp5LWhp Z2hsaWdodC1mb3J3YXJkCgkJICAgICAgICAgICAgICAgIChtaW4gKG9yIGlzZWFyY2gtbGF6eS1o aWdobGlnaHQtZW5kLWxpbWl0IChwb2ludC1tYXgpKQoJCQkgICAgICAgICAgICAgKGlmIGlzZWFy Y2gtbGF6eS1oaWdobGlnaHQtd3JhcHBlZAoJCQkJICAgICAgICAgaXNlYXJjaC1sYXp5LWhpZ2hs aWdodC1zdGFydAoJCQkgICAgICAgICAgICAgICB3aW5kb3ctZW5kKSkKCQkgICAgICAgICAgICAg IChtYXggKG9yIGlzZWFyY2gtbGF6eS1oaWdobGlnaHQtc3RhcnQtbGltaXQgKHBvaW50LW1pbikp CgkJCSAgICAgICAgICAgKGlmIGlzZWFyY2gtbGF6eS1oaWdobGlnaHQtd3JhcHBlZAoJCQkgICAg ICAgICAgICAgICBpc2VhcmNoLWxhenktaGlnaGxpZ2h0LWVuZAoJCQkgICAgICAgICAgICAgd2lu ZG93LXN0YXJ0KSkpKQoJCSAgICAgKGZvdW5kIChpc2VhcmNoLWxhenktaGlnaGxpZ2h0LXNlYXJj aAoJCQkgICAgIGlzZWFyY2gtbGF6eS1oaWdobGlnaHQtbGFzdC1zdHJpbmcKCQkJICAgICBib3Vu ZCkpKQoJCSh3aGVuIG1heAoJCSAgKHNldHEgbWF4ICgxLSBtYXgpKQoJCSAgKGlmICg8PSBtYXgg MCkKCQkgICAgICAoc2V0cSBsb29waW5nIG5pbCkpKQoJCShpZiBmb3VuZAoJCSAgICAobGV0ICgo bWIgKG1hdGNoLWJlZ2lubmluZyAwKSkKCQkJICAobWUgKG1hdGNoLWVuZCAwKSkpCgkJICAgICAg KGlmICg9IG1iIG1lKQk7emVyby1sZW5ndGggbWF0Y2gKCQkJICAoaWYgaXNlYXJjaC1sYXp5LWhp Z2hsaWdodC1mb3J3YXJkCgkJCSAgICAgIChpZiAoPSBtYiAoaWYgaXNlYXJjaC1sYXp5LWhpZ2hs aWdodC13cmFwcGVkCgkJCQkJICAgIGlzZWFyY2gtbGF6eS1oaWdobGlnaHQtc3RhcnQKCQkJCQkg IHdpbmRvdy1lbmQpKQoJCQkJICAoc2V0cSBmb3VuZCBuaWwpCgkJCQkoZm9yd2FyZC1jaGFyIDEp KQoJCQkgICAgKGlmICg9IG1iIChpZiBpc2VhcmNoLWxhenktaGlnaGxpZ2h0LXdyYXBwZWQKCQkJ CQkgIGlzZWFyY2gtbGF6eS1oaWdobGlnaHQtZW5kCgkJCQkJd2luZG93LXN0YXJ0KSkKCQkJCShz ZXRxIGZvdW5kIG5pbCkKCQkJICAgICAgKGZvcndhcmQtY2hhciAtMSkpKQoKCQkJOzsgbm9uLXpl cm8tbGVuZ3RoIG1hdGNoCgkJCShpc2VhcmNoLWxhenktaGlnaGxpZ2h0LW1hdGNoIG1iIG1lKSkK CQkgICAgICA7OyBSZW1lbWJlciB0aGUgY3VycmVudCBwb3NpdGlvbiBvZiBwb2ludCBmb3IKCQkg ICAgICA7OyB0aGUgbmV4dCBjYWxsIG9mIGBpc2VhcmNoLWxhenktaGlnaGxpZ2h0LXVwZGF0ZScK CQkgICAgICA7OyB3aGVuIGBsYXp5LWhpZ2hsaWdodC1tYXgtYXQtYS10aW1lJyBpcyB0b28gc21h bGwuCgkJICAgICAgKGlmIGlzZWFyY2gtbGF6eS1oaWdobGlnaHQtZm9yd2FyZAoJCQkgIChzZXRx IGlzZWFyY2gtbGF6eS1oaWdobGlnaHQtZW5kIChwb2ludCkpCgkJCShzZXRxIGlzZWFyY2gtbGF6 eS1oaWdobGlnaHQtc3RhcnQgKHBvaW50KSkpKSkKCgkJOzsgbm90IGZvdW5kIG9yIHplcm8tbGVu Z3RoIG1hdGNoIGF0IHRoZSBzZWFyY2ggYm91bmQKCQkoaWYgKG5vdCBmb3VuZCkKCQkgICAgKGlm IGlzZWFyY2gtbGF6eS1oaWdobGlnaHQtd3JhcHBlZAoJCQkoc2V0cSBsb29waW5nIG5pbAoJCQkg ICAgICBub21vcmUgIHQpCgkJICAgICAgKHNldHEgaXNlYXJjaC1sYXp5LWhpZ2hsaWdodC13cmFw cGVkIHQpCgkJICAgICAgKGlmIGlzZWFyY2gtbGF6eS1oaWdobGlnaHQtZm9yd2FyZAoJCQkgIChw cm9nbgoJCQkgICAgKHNldHEgaXNlYXJjaC1sYXp5LWhpZ2hsaWdodC1lbmQgd2luZG93LXN0YXJ0 KQoJCQkgICAgKGdvdG8tY2hhciAobWF4IChvciBpc2VhcmNoLWxhenktaGlnaGxpZ2h0LXN0YXJ0 LWxpbWl0IChwb2ludC1taW4pKQoJCQkJCSAgICB3aW5kb3ctc3RhcnQpKSkKCQkJKHNldHEgaXNl YXJjaC1sYXp5LWhpZ2hsaWdodC1zdGFydCB3aW5kb3ctZW5kKQoJCQkoZ290by1jaGFyIChtaW4g KG9yIGlzZWFyY2gtbGF6eS1oaWdobGlnaHQtZW5kLWxpbWl0IChwb2ludC1tYXgpKQoJCQkJCXdp bmRvdy1lbmQpKSkpKSkpCgkgICAgKGlmIG5vbW9yZQoJCSh3aGVuIChvciBpc2VhcmNoLWxhenkt aGlnaGxpZ2h0LWJ1ZmZlcgoJCQkgIChhbmQgaXNlYXJjaC1sYXp5LWNvdW50IChudWxsIGlzZWFy Y2gtbGF6eS1jb3VudC1jdXJyZW50KSkpCgkJICAoaWYgaXNlYXJjaC1sYXp5LWhpZ2hsaWdodC1m b3J3YXJkCgkJICAgICAgKHNldHEgaXNlYXJjaC1sYXp5LWhpZ2hsaWdodC1lbmQgKHBvaW50LW1p bikpCgkJICAgIChzZXRxIGlzZWFyY2gtbGF6eS1oaWdobGlnaHQtc3RhcnQgKHBvaW50LW1heCkp KQoJCSAgKHJ1bi1hdC10aW1lIGxhenktaGlnaGxpZ2h0LWludGVydmFsIG5pbAoJCQkgICAgICAg J2lzZWFyY2gtbGF6eS1oaWdobGlnaHQtYnVmZmVyLXVwZGF0ZSkpCgkgICAgICAoc2V0cSBpc2Vh cmNoLWxhenktaGlnaGxpZ2h0LXRpbWVyCgkJICAgIChydW4tYXQtdGltZSBsYXp5LWhpZ2hsaWdo dC1pbnRlcnZhbCBuaWwKCQkJCSAnaXNlYXJjaC1sYXp5LWhpZ2hsaWdodC11cGRhdGUpKSkpKSkp KSkKCihkZWZ1biBpc2VhcmNoLWxhenktaGlnaGxpZ2h0LWJ1ZmZlci11cGRhdGUgKCkKICAiVXBk YXRlIGhpZ2hsaWdodGluZyBvZiBvdGhlciBtYXRjaGVzIGluIHRoZSBmdWxsIGJ1ZmZlci4iCiAg KGxldCAoKG1heCBsYXp5LWhpZ2hsaWdodC1idWZmZXItbWF4LWF0LWEtdGltZSkKICAgICAgICAo bG9vcGluZyB0KQogICAgICAgIG5vbW9yZSB3aW5kb3ctc3RhcnQgd2luZG93LWVuZAogICAgICAg IChvcG9pbnQgKHBvaW50KSkpCiAgICAod2l0aC1sb2NhbC1xdWl0CiAgICAgIChzYXZlLXNlbGVj dGVkLXdpbmRvdwoJKGlmIChhbmQgKHdpbmRvdy1saXZlLXAgaXNlYXJjaC1sYXp5LWhpZ2hsaWdo dC13aW5kb3cpCgkJIChub3QgKG1lbXEgKHNlbGVjdGVkLXdpbmRvdykgaXNlYXJjaC1sYXp5LWhp Z2hsaWdodC13aW5kb3ctZ3JvdXApKSkKCSAgICAoc2VsZWN0LXdpbmRvdyBpc2VhcmNoLWxhenkt aGlnaGxpZ2h0LXdpbmRvdykpCgkoc2V0cSB3aW5kb3ctc3RhcnQgKHdpbmRvdy1ncm91cC1zdGFy dCkpCgkoc2V0cSB3aW5kb3ctZW5kICh3aW5kb3ctZ3JvdXAtZW5kKSkKCShzYXZlLWV4Y3Vyc2lv bgoJICAoc2F2ZS1tYXRjaC1kYXRhCgkgICAgKGdvdG8tY2hhciAoaWYgaXNlYXJjaC1sYXp5LWhp Z2hsaWdodC1mb3J3YXJkCgkJCSAgIGlzZWFyY2gtbGF6eS1oaWdobGlnaHQtZW5kCgkJCSBpc2Vh cmNoLWxhenktaGlnaGxpZ2h0LXN0YXJ0KSkKCSAgICAod2hpbGUgbG9vcGluZwoJICAgICAgKGxl dCogKChib3VuZCAoaWYgaXNlYXJjaC1sYXp5LWhpZ2hsaWdodC1mb3J3YXJkCgkJCQkob3IgaXNl YXJjaC1sYXp5LWhpZ2hsaWdodC1lbmQtbGltaXQgKHBvaW50LW1heCkpCgkJCSAgICAgIChvciBp c2VhcmNoLWxhenktaGlnaGxpZ2h0LXN0YXJ0LWxpbWl0IChwb2ludC1taW4pKSkpCgkJICAgICAo Zm91bmQgKGlzZWFyY2gtbGF6eS1oaWdobGlnaHQtc2VhcmNoCgkJCSAgICAgaXNlYXJjaC1sYXp5 LWhpZ2hsaWdodC1sYXN0LXN0cmluZwoJCQkgICAgIGJvdW5kKSkpCgkJKHdoZW4gbWF4CgkJICAo c2V0cSBtYXggKDEtIG1heCkpCgkJICAoaWYgKDw9IG1heCAwKQoJCSAgICAgIChzZXRxIGxvb3Bp bmcgbmlsKSkpCgkJKGlmIGZvdW5kCgkJICAgIChsZXQgKChtYiAobWF0Y2gtYmVnaW5uaW5nIDAp KQoJCQkgIChtZSAobWF0Y2gtZW5kIDApKSkKCQkgICAgICAoaWYgKD0gbWIgbWUpCTt6ZXJvLWxl bmd0aCBtYXRjaAoJCQkgIChpZiBpc2VhcmNoLWxhenktaGlnaGxpZ2h0LWZvcndhcmQKCQkJICAg ICAgKGlmICg9IG1iIChwb2ludC1tYXgpKQoJCQkJICAoc2V0cSBmb3VuZCBuaWwpCgkJCQkoZm9y d2FyZC1jaGFyIDEpKQoJCQkgICAgKGlmICg9IG1iIChwb2ludC1taW4pKQoJCQkJKHNldHEgZm91 bmQgbmlsKQoJCQkgICAgICAoZm9yd2FyZC1jaGFyIC0xKSkpCgkJCSh3aGVuIGlzZWFyY2gtbGF6 eS1jb3VudAoJCQkgIChzZXRxIGlzZWFyY2gtbGF6eS1jb3VudC10b3RhbAoJCQkJKDErIChvciBp c2VhcmNoLWxhenktY291bnQtdG90YWwgMCkpKQoJCQkgIChwdXRoYXNoIChpZiBpc2VhcmNoLWxh enktaGlnaGxpZ2h0LWZvcndhcmQgbWUgbWIpCgkJCQkgICBpc2VhcmNoLWxhenktY291bnQtdG90 YWwKCQkJCSAgIGlzZWFyY2gtbGF6eS1jb3VudC1oYXNoKSkKCQkJOzsgRG9uJ3QgaGlnaGxpZ2h0 IHRoZSBtYXRjaCB3aGVuIHRoaXMgbG9vcCBpcyB1c2VkCgkJCTs7IG9ubHkgdG8gY291bnQgbWF0 Y2hlcyBvciB3aGVuIG1hdGNoZXMgd2VyZSBhbHJlYWR5CgkJCTs7IGhpZ2hsaWdodGVkIHdpdGhp biB0aGUgY3VycmVudCB3aW5kb3cgYm91bmRhcmllcwoJCQk7OyBieSBpc2VhcmNoLWxhenktaGln aGxpZ2h0LXVwZGF0ZQoJCQkodW5sZXNzIChvciAobm90IGlzZWFyY2gtbGF6eS1oaWdobGlnaHQt YnVmZmVyKQoJCQkJICAgIChhbmQgKD49IG1iIHdpbmRvdy1zdGFydCkgKDw9IG1lIHdpbmRvdy1l bmQpKSkKCQkJICA7OyBub24temVyby1sZW5ndGggbWF0Y2gKCQkJICAoaXNlYXJjaC1sYXp5LWhp Z2hsaWdodC1tYXRjaCBtYiBtZSkpKQoJCSAgICAgIDs7IFJlbWVtYmVyIHRoZSBjdXJyZW50IHBv c2l0aW9uIG9mIHBvaW50IGZvcgoJCSAgICAgIDs7IHRoZSBuZXh0IGNhbGwgb2YgYGlzZWFyY2gt bGF6eS1oaWdobGlnaHQtdXBkYXRlJwoJCSAgICAgIDs7IHdoZW4gYGxhenktaGlnaGxpZ2h0LWJ1 ZmZlci1tYXgtYXQtYS10aW1lJyBpcyB0b28gc21hbGwuCgkJICAgICAgKGlmIGlzZWFyY2gtbGF6 eS1oaWdobGlnaHQtZm9yd2FyZAoJCQkgIChzZXRxIGlzZWFyY2gtbGF6eS1oaWdobGlnaHQtZW5k IChwb2ludCkpCgkJCShzZXRxIGlzZWFyY2gtbGF6eS1oaWdobGlnaHQtc3RhcnQgKHBvaW50KSkp KSkKCgkJOzsgbm90IGZvdW5kIG9yIHplcm8tbGVuZ3RoIG1hdGNoIGF0IHRoZSBzZWFyY2ggYm91 bmQKCQkoaWYgKG5vdCBmb3VuZCkKCQkgICAgKHNldHEgbG9vcGluZyBuaWwKCQkJICBub21vcmUg IHQpKSkpCgkgICAgKGlmIG5vbW9yZQoJCSh3aGVuIChhbmQgaXNlYXJjaC1sYXp5LWNvdW50IGlz ZWFyY2gtbW9kZSAobnVsbCBpc2VhcmNoLW1lc3NhZ2UtZnVuY3Rpb24pKQoJCSAgKHVubGVzcyBp c2VhcmNoLWxhenktY291bnQtdG90YWwKCQkgICAgKHNldHEgaXNlYXJjaC1sYXp5LWNvdW50LXRv dGFsIDApKQoJCSAgKHNldHEgaXNlYXJjaC1sYXp5LWNvdW50LWN1cnJlbnQKCQkJKGdldGhhc2gg b3BvaW50IGlzZWFyY2gtbGF6eS1jb3VudC1oYXNoIDApKQoJCSAgKGlzZWFyY2gtbWVzc2FnZSkp CgkgICAgICAoc2V0cSBpc2VhcmNoLWxhenktaGlnaGxpZ2h0LXRpbWVyCgkJICAgIChydW4tYXQt dGltZSBsYXp5LWhpZ2hsaWdodC1pbnRlcnZhbCBuaWwKCQkJCSAnaXNlYXJjaC1sYXp5LWhpZ2hs aWdodC1idWZmZXItdXBkYXRlKSkpKSkpKSkpCgooZGVmdW4gaXNlYXJjaC1yZXN1bWUgKHN0cmlu ZyByZWdleHAgd29yZCBmb3J3YXJkIG1lc3NhZ2UgY2FzZS1mb2xkKQogICJSZXN1bWUgYW4gaW5j cmVtZW50YWwgc2VhcmNoLgpTVFJJTkcgaXMgdGhlIHN0cmluZyBvciByZWdleHAgc2VhcmNoZWQg Zm9yLgpSRUdFWFAgbm9uLW5pbCBtZWFucyB0aGUgcmVzdW1lZCBzZWFyY2ggd2FzIGEgcmVnZXhw IHNlYXJjaC4KV09SRCBub24tbmlsIG1lYW5zIHJlc3VtZSBhIHdvcmQgc2VhcmNoLgpGT1JXQVJE IG5vbi1uaWwgbWVhbnMgcmVzdW1lIGEgZm9yd2FyZCBzZWFyY2guCk1FU1NBR0UgaXMgdGhlIGVj aG8tYXJlYSBtZXNzYWdlIHJlY29yZGVkIGZvciB0aGUgc2VhcmNoIHJlc3VtZWQuCkNBU0UtRk9M RCBub24tbmlsIG1lYW5zIHRoZSBzZWFyY2ggd2FzIGNhc2UtaW5zZW5zaXRpdmUuIgogIChpc2Vh cmNoLW1vZGUgZm9yd2FyZCByZWdleHAgbmlsIG5pbCB3b3JkKQogIChzZXRxIGlzZWFyY2gtc3Ry aW5nIHN0cmluZwoJaXNlYXJjaC1tZXNzYWdlIG1lc3NhZ2UKCWlzZWFyY2gtY2FzZS1mb2xkLXNl YXJjaCBjYXNlLWZvbGQpCiAgKGlzZWFyY2gtc2VhcmNoKQogIChpc2VhcmNoLXVwZGF0ZSkpCgoo cHJvdmlkZSAnaXNlYXJjaCkKCjs7OyBpc2VhcmNoLmVsIGVuZHMgaGVyZQo= --__15667820916015789abhmp0004.oracle.com--