From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.org!not-for-mail From: Lennart Borgman Newsgroups: gmane.emacs.bugs Subject: bug#6384: Teach rx explicitly numbered submatches Date: Wed, 9 Jun 2010 19:22:43 +0200 Message-ID: NNTP-Posting-Host: lo.gmane.org Mime-Version: 1.0 Content-Type: multipart/mixed; boundary=0016e68ea07e961d5f04889c28d5 X-Trace: dough.gmane.org 1276104557 1591 80.91.229.12 (9 Jun 2010 17:29:17 GMT) X-Complaints-To: usenet@dough.gmane.org NNTP-Posting-Date: Wed, 9 Jun 2010 17:29:17 +0000 (UTC) To: 6384@debbugs.gnu.org Original-X-From: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane.org@gnu.org Wed Jun 09 19:29:13 2010 connect(): No such file or directory Return-path: Envelope-to: geb-bug-gnu-emacs@m.gmane.org Original-Received: from lists.gnu.org ([199.232.76.165]) by lo.gmane.org with esmtp (Exim 4.69) (envelope-from ) id 1OMP59-0008SW-Pe for geb-bug-gnu-emacs@m.gmane.org; Wed, 09 Jun 2010 19:29:07 +0200 Original-Received: from localhost ([127.0.0.1]:58173 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1OMP58-0006eU-AI for geb-bug-gnu-emacs@m.gmane.org; Wed, 09 Jun 2010 13:28:50 -0400 Original-Received: from [140.186.70.92] (port=49457 helo=eggs.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1OMP4u-0006ak-I3 for bug-gnu-emacs@gnu.org; Wed, 09 Jun 2010 13:28:40 -0400 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.69) (envelope-from ) id 1OMP4r-00078v-LY for bug-gnu-emacs@gnu.org; Wed, 09 Jun 2010 13:28:36 -0400 Original-Received: from debbugs.gnu.org ([140.186.70.43]:46574) by eggs.gnu.org with esmtp (Exim 4.69) (envelope-from ) id 1OMP4r-00078o-JO for bug-gnu-emacs@gnu.org; Wed, 09 Jun 2010 13:28:33 -0400 Original-Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.69) (envelope-from ) id 1OMP1S-0001je-LU; Wed, 09 Jun 2010 13:25:02 -0400 X-Loop: help-debbugs@gnu.org Resent-From: Lennart Borgman Original-Sender: debbugs-submit-bounces@debbugs.gnu.org Resent-To: owner@debbugs.gnu.org Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Wed, 09 Jun 2010 17:25:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: report 6384 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: X-Debbugs-Original-To: Emacs Bugs Original-Received: via spool by submit@debbugs.gnu.org id=B.12761042516656 (code B ref -1); Wed, 09 Jun 2010 17:25:02 +0000 Original-Received: (at submit) by debbugs.gnu.org; 9 Jun 2010 17:24:11 +0000 Original-Received: from localhost ([127.0.0.1] helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.69) (envelope-from ) id 1OMP0b-0001jI-Oi for submit@debbugs.gnu.org; Wed, 09 Jun 2010 13:24:10 -0400 Original-Received: from mx10.gnu.org ([199.232.76.166]) by debbugs.gnu.org with esmtp (Exim 4.69) (envelope-from ) id 1OMOzz-0001is-3Z for submit@debbugs.gnu.org; Wed, 09 Jun 2010 13:24:07 -0400 Original-Received: from lists.gnu.org ([199.232.76.165]:54904) by monty-python.gnu.org with esmtps (TLS-1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.60) (envelope-from ) id 1OMOzr-0003vH-FR for submit@debbugs.gnu.org; Wed, 09 Jun 2010 13:23:23 -0400 Original-Received: from [140.186.70.92] (port=34030 helo=eggs.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1OMOzk-0004KF-1v for bug-gnu-emacs@gnu.org; Wed, 09 Jun 2010 13:23:22 -0400 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.69) (envelope-from ) id 1OMOzZ-0006EN-5g for bug-gnu-emacs@gnu.org; Wed, 09 Jun 2010 13:23:08 -0400 Original-Received: from mail-yw0-f187.google.com ([209.85.211.187]:50940) by eggs.gnu.org with esmtp (Exim 4.69) (envelope-from ) id 1OMOzY-0006EA-UP for bug-gnu-emacs@gnu.org; Wed, 09 Jun 2010 13:23:05 -0400 Original-Received: by ywh17 with SMTP id 17so1224889ywh.1 for ; Wed, 09 Jun 2010 10:23:04 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=domainkey-signature:received:mime-version:received:from:date :message-id:subject:to:content-type; bh=iBk4+UlLZlXNgw+NzorHK4AvXp09jxxa0WdMiodhVYQ=; b=CR2lGDUmOztt89gaeQMbZ1jWhRAUHBVBHUyercEQ1fkvYbHu8RpJmKVTjHJVUOKYj7 JqArdPzTcZ3vNuW3t2q+V27e7kDfpMCorrIlCTcOmL0+4ZOeZib/WuQEfGrSVkNk6BIV pEu3hVnATPVyCxbwriB1VMkOSJj+YbgY59WMw= DomainKey-Signature: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma; h=mime-version:from:date:message-id:subject:to:content-type; b=X3aU/q01WFNwjcsrRziqSQ4KrEvZ7XQls/FkxFP1wq6yX6Y1f7WsewDRzZlKfKFPQo HTNHd6J3nXEoOumjH866ZGrZVV9FceO2cQpHp42y5qldagSTO00Ws0/FBdayrSXNrg27 HuAYKr9qXiZvJrcufjMVkQvbBGZyEFa80sNm4= Original-Received: by 10.101.133.9 with SMTP id k9mr18644306ann.43.1276104184044; Wed, 09 Jun 2010 10:23:04 -0700 (PDT) Original-Received: by 10.100.154.15 with HTTP; Wed, 9 Jun 2010 10:22:43 -0700 (PDT) X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.6 (newer, 2) X-detected-operating-system: by monty-python.gnu.org: GNU/Linux 2.6, seldom 2.4 (older, 4) X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.11 Precedence: list Resent-Date: Wed, 09 Jun 2010 13:25:02 -0400 X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.6 (newer, 3) X-BeenThere: bug-gnu-emacs@gnu.org List-Id: "Bug reports for GNU Emacs, the Swiss army knife of text editors" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Original-Sender: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane.org@gnu.org Errors-To: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane.org@gnu.org Xref: news.gmane.org gmane.emacs.bugs:37633 Archived-At: --0016e68ea07e961d5f04889c28d5 Content-Type: text/plain; charset=UTF-8 Explicitly numbered groups are of the form \(?nn:...\) Here is a patch for it. Someone with good lisp fu might check it. --0016e68ea07e961d5f04889c28d5 Content-Type: text/x-patch; charset=US-ASCII; name="rx-submatch-n-1.diff" Content-Disposition: attachment; filename="rx-submatch-n-1.diff" Content-Transfer-Encoding: base64 X-Attachment-Id: f_ga8fg6js0 Ozs7IHJ4LmVsIC0tLSBzZXhwIG5vdGF0aW9uIGZvciByZWd1bGFyIGV4cHJlc3Npb25zCgo7OyBD b3B5cmlnaHQgKEMpIDIwMDEsIDIwMDIsIDIwMDMsIDIwMDQsIDIwMDUsCjs7ICAgMjAwNiwgMjAw NywgMjAwOCwgMjAwOSwgMjAxMCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KCjs7IEF1 dGhvcjogR2VyZCBNb2VsbG1hbm4gPGdlcmRAZ251Lm9yZz4KOzsgTWFpbnRhaW5lcjogRlNGCjs7 IEtleXdvcmRzOiBzdHJpbmdzLCByZWdleHBzLCBleHRlbnNpb25zCgo7OyBUaGlzIGZpbGUgaXMg cGFydCBvZiBHTlUgRW1hY3MuCgo7OyBHTlUgRW1hY3MgaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNh biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQo7OyBpdCB1bmRlciB0aGUgdGVybXMgb2Yg dGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQo7OyB0aGUgRnJl ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBv cgo7OyAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgoKOzsgR05VIEVtYWNzIGlz IGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCjs7IGJ1dCBX SVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9m Cjs7IE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4g IFNlZSB0aGUKOzsgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4K Cjs7IFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1 YmxpYyBMaWNlbnNlCjs7IGFsb25nIHdpdGggR05VIEVtYWNzLiAgSWYgbm90LCBzZWUgPGh0dHA6 Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgoKOzs7IENvbW1lbnRhcnk6Cgo7OyBUaGlzIGlzIGFu b3RoZXIgaW1wbGVtZW50YXRpb24gb2Ygc2V4cC1mb3JtIHJlZ3VsYXIgZXhwcmVzc2lvbnMuCjs7 IEl0IHdhcyB1bmZvcnR1bmF0ZWx5IHdyaXR0ZW4gd2l0aG91dCBiZWluZyBhd2FyZSBvZiB0aGUg U3JlZ2V4Cjs7IHBhY2thZ2UgY29taW5nIHdpdGggRW1hY3MsIGJ1dCBhcyB0aGluZ3Mgc3RhbmQs IFJ4IGNvbXBsZXRlbHkKOzsgY292ZXJzIGFsbCByZWdleHAgZmVhdHVyZXMsIHdoaWNoIFNyZWdl eCBkb2Vzbid0LCBkb2Vzbid0IHN1ZmZlcgo7OyBmcm9tIHRoZSBidWdzIG1lbnRpb25lZCBpbiB0 aGUgY29tbWVudGFyeSBzZWN0aW9uIG9mIFNyZWdleCwgYW5kCjs7IHVzZXMgYSBuaWNlciBzeW50 YXggKElNSE8sIG9mIGNvdXJzZSA6LSkuCgo7OyBUaGlzIHNpZ25pZmljYW50bHkgZXh0ZW5kZWQg dmVyc2lvbiBvZiB0aGUgb3JpZ2luYWwsIGlzIGFsbW9zdAo7OyBjb21wYXRpYmxlIHdpdGggU3Jl Z2V4LiAgVGhlIG9ubHkgaW5jb21wYXRpYmlsaXR5IEkgKGZ4KSBrbm93IG9mIGlzCjs7IHRoYXQg dGhlIGByZXBlYXQnIGZvcm0gY2FuJ3QgaGF2ZSBtdWx0aXBsZSByZWdleHAgYXJncy4KCjs7IE5v dyBhbHRlcm5hdGl2ZSBmb3JtcyBhcmUgcHJvdmlkZWQgZm9yIGEgZGVncmVlIG9mIGNvbXBhdGli aWxpdHkKOzsgd2l0aCBTaGl2ZXJzJyBhdHRlbXB0ZWQgZGVmaW5pdGl2ZSBTUkUgbm90YXRpb24K OzsgPFVSTDpodHRwOi8vd3d3LmFpLm1pdC5lZHUvfi9zaGl2ZXJzL3NyZS50eHQ+LiAgU1JFIGZv cm1zIG5vdAo7OyBjYXRlcmVkIGZvciBpbmNsdWRlOiBkc20sIHVuY2FzZSwgdy9jYXNlLCB3L25v Y2FzZSwgLEA8ZXhwPiwKOzsgLDxleHA+LCAod29yZCAuLi4pLCB3b3JkKywgcG9zaXgtc3RyaW5n LCBhbmQgY2hhcmFjdGVyIGNsYXNzIGZvcm1zLgo7OyBTb21lIGZvcm1zIGFyZSBpbmNvbnNpc3Rl bnQgd2l0aCBTUkUsIGVpdGhlciBmb3IgaGlzdG9yaWNhbCByZWFzb25zCjs7IG9yIGJlY2F1c2Ug b2YgdGhlIGltcGxlbWVudGF0aW9uIC0tIHNpbXBsZSB0cmFuc2xhdGlvbiBpbnRvIEVtYWNzCjs7 IHJlZ2V4cCBzdHJpbmdzLiAgVGhlc2UgaW5jbHVkZTogYW55LCB3b3JkLiAgQWxzbywgY2FzZS1z ZW5zaXRpdml0eQo7OyBhbmQgZ3JlZWRpbmVzcyBhcmUgY29udHJvbGxlZCBieSB2YXJpYWJsZXMg ZXh0ZXJuYWwgdG8gdGhlIHJlZ2V4cCwKOzsgYW5kIHlvdSBuZWVkIHRvIGZlZWQgdGhlIGZvcm1z IHRvIHRoZSBgcG9zaXgtJyBmdW5jdGlvbnMgdG8gZ2V0Cjs7IFNSRSdzIFBPU0lYIHNlbWFudGlj cy4gIFRoZXJlIGFyZSBwcm9iYWJseSBtb3JlIGRpZmZpY3VsdGllcy4KCjs7IFJ4IHRyYW5zbGF0 ZXMgYSBzZXhwIG5vdGF0aW9uIGZvciByZWd1bGFyIGV4cHJlc3Npb25zIGludG8gdGhlCjs7IHVz dWFsIHN0cmluZyBub3RhdGlvbi4gIFRoZSB0cmFuc2xhdGlvbiBjYW4gYmUgZG9uZSBhdCBjb21w aWxlLXRpbWUKOzsgYnkgdXNpbmcgdGhlIGByeCcgbWFjcm8uICBJdCBjYW4gYmUgZG9uZSBhdCBy dW4tdGltZSBieSBjYWxsaW5nCjs7IGZ1bmN0aW9uIGByeC10by1zdHJpbmcnLiAgU2VlIHRoZSBk b2N1bWVudGF0aW9uIG9mIGByeCcgZm9yIGEKOzsgY29tcGxldGUgZGVzY3JpcHRpb24gb2YgdGhl IHNleHAgbm90YXRpb24uCjs7Cjs7IFNvbWUgZXhhbXBsZXMgb2Ygc3RyaW5nIHJlZ2V4cHMgYW5k IHRoZWlyIHNleHAgY291bnRlcnBhcnRzOgo7Owo7OyAiXlthLXpdKiIKOzsgKHJ4IChhbmQgbGlu ZS1zdGFydCAoMCsgKGluICJhLXoiKSkpKQo7Owo7OyAiXG5bXiBcdF0iCjs7IChyeCAoYW5kICJc biIgKG5vdCBibGFuaykpKSwgb3IKOzsgKHJ4IChhbmQgIlxuIiAobm90IChhbnkgIiBcdCIpKSkp Cjs7Cjs7ICJcXCpcXCpcXCogRU9PSCBcXCpcXCpcXCpcbiIKOzsgKHJ4ICIqKiogRU9PSCAqKipc biIpCjs7Cjs7ICJcXDxcXChjYXRjaFxcfGZpbmFsbHlcXClcXD5bXl9dIgo7OyAocnggKGFuZCB3 b3JkLXN0YXJ0IChzdWJtYXRjaCAob3IgImNhdGNoIiAiZmluYWxseSIpKSB3b3JkLWVuZAo7OyAg ICAgICAgICAobm90IChhbnkgP18pKSkpCjs7Cjs7ICJbIFx0XG5dKjpcXChbXjpdK1xcfCRcXCki Cjs7IChyeCAoYW5kICh6ZXJvLW9yLW1vcmUgKGluICIgXHRcbiIpKSAiOiIKOzsgICAgICAgICAg KHN1Ym1hdGNoIChvciBsaW5lLWVuZCAob25lLW9yLW1vcmUgKG5vdCAoYW55ID86KSkpKSkpKQo7 Owo7OyAiXmNvbnRlbnQtdHJhbnNmZXItZW5jb2Rpbmc6XFwoXG4/W1x0IF1cXCkqcXVvdGVkLXBy aW50YWJsZVxcKFxuP1tcdCBdXFwpKiIKOzsgKHJ4IChhbmQgbGluZS1zdGFydAo7OyAgICAgICAg ICAiY29udGVudC10cmFuc2Zlci1lbmNvZGluZzoiCjs7ICAgICAgICAgICgrICg/ID9cbikpIGJs YW5rCjs7CSAgICAicXVvdGVkLXByaW50YWJsZSIKOzsJICAgICgrICg/ID9cbikpIGJsYW5rKSkK OzsKOzsgKGNvbmNhdCAiXlxcKD86IiBzb21ldGhpbmctZWxzZSAiXFwpIikKOzsgKHJ4IChhbmQg bGluZS1zdGFydCAoZXZhbCBzb21ldGhpbmctZWxzZSkpKSwgc3RhdGljYWxseSBvcgo7OyAocngt dG8tc3RyaW5nICcoYW5kIGxpbmUtc3RhcnQgLHNvbWV0aGluZy1lbHNlKSksIGR5bmFtaWNhbGx5 Lgo7Owo7OyAocmVnZXhwLW9wdCAnKFNUUklORzEgU1RSSU5HMiAuLi4pKQo7OyAocnggKG9yIFNU UklORzEgU1RSSU5HMiAuLi4pKSwgb3IgaW4gb3RoZXIgd29yZHMsIGBvcicgYXV0b21hdGljYWxs eQo7OyBjYWxscyBgcmVnZXhwLW9wdCcgYXMgbmVlZGVkLgo7Owo7OyAiXjs7XFxzLSpcblxcfF5c biIKOzsgKHJ4IChvciAoYW5kIGxpbmUtc3RhcnQgIjs7IiAoMCsgc3BhY2UpID9cbikKOzsgICAg ICAgICAoYW5kIGxpbmUtc3RhcnQgP1xuKSkpCjs7Cjs7ICJcXCRbSV1kOiBbXiBdKyBcXChbXiBd K1xcKSAiCjs7IChyeCAoYW5kICIkSWQ6ICIKOzsgICAgICAgICAgKDErIChub3QgKGluICIgIikp KQo7OyAgICAgICAgICAiICIKOzsgICAgICAgICAgKHN1Ym1hdGNoICgxKyAobm90IChpbiAiICIp KSkpCjs7ICAgICAgICAgICIgIikpCjs7Cjs7ICJcXFxcXFxcXFxcW1xcdysiCjs7IChyeCAoYW5k ID9cXCA/XFwgP1xbICgxKyB3b3JkKSkpCjs7Cjs7IGV0Yy4KCjs7OyBIaXN0b3J5Ogo7OwoKOzs7 IENvZGU6CgooZGVmY29uc3QgcngtY29uc3RpdHVlbnRzCiAgJygoYW5kCQkuIChyeC1hbmQgMSBu aWwpKQogICAgKHNlcQkJLiBhbmQpCQk7IFNSRQogICAgKDoJCQkuIGFuZCkJCTsgU1JFCiAgICAo c2VxdWVuY2UJCS4gYW5kKQkJOyBzcmVnZXgKICAgIChvcgkJCS4gKHJ4LW9yIDEgbmlsKSkKICAg ICh8CQkJLiBvcikJCTsgU1JFCiAgICAobm90LW5ld2xpbmUJLiAiLiIpCiAgICAobm9ubAkJLiBu b3QtbmV3bGluZSkJOyBTUkUKICAgIChhbnl0aGluZwkJLiAocngtYW55dGhpbmcgMCBuaWwpKQog ICAgKGFueQkJLiAocngtYW55IDEgbmlsIHJ4LWNoZWNrLWFueSkpIDsgaW5jb25zaXN0ZW50IHdp dGggU1JFCiAgICAoaW4JCQkuIGFueSkKICAgIChjaGFyCQkuIGFueSkJCTsgc3JlZ2V4CiAgICAo bm90LWNoYXIJCS4gKHJ4LW5vdC1jaGFyIDEgbmlsIHJ4LWNoZWNrLWFueSkpIDsgc3JlZ2V4CiAg ICAobm90CQkuIChyeC1ub3QgMSAxIHJ4LWNoZWNrLW5vdCkpCiAgICA7OyBQYXJ0aWFsbHkgY29u c2lzdGVudCB3aXRoIHNyZWdleCwgd2hvc2UgYHJlcGVhdCcgaXMgbGlrZSBvdXIKICAgIDs7IGAq KicuICAoYHJlcGVhdCcgd2l0aCBvcHRpb25hbCBtYXggYXJnIGFuZCBtdWx0aXBsZSBzZXhwIGZv cm1zCiAgICA7OyBpcyBhbWJpZ3VvdXMuKQogICAgKHJlcGVhdAkJLiAocngtcmVwZWF0IDIgMykp CiAgICAoPQkJCS4gKHJ4LT0gMiBuaWwpKQkgICA7IFNSRQogICAgKD49CQkJLiAocngtPj0gMiBu aWwpKSAgIDsgU1JFCiAgICAoKioJCQkuIChyeC0qKiAyIG5pbCkpICAgOyBTUkUKICAgIChzdWJt YXRjaAkJLiAocngtc3VibWF0Y2ggMSBuaWwpKSA7IFNSRQogICAgKHN1Ym1hdGNoLW4JCS4gKHJ4 LXN1Ym1hdGNoLW4gMiBuaWwpKQogICAgKGdyb3VwCQkuIHN1Ym1hdGNoKQogICAgKHplcm8tb3It bW9yZQkuIChyeC1rbGVlbmUgMSBuaWwpKQogICAgKG9uZS1vci1tb3JlCS4gKHJ4LWtsZWVuZSAx IG5pbCkpCiAgICAoemVyby1vci1vbmUJLiAocngta2xlZW5lIDEgbmlsKSkKICAgIChcPwkJCS4g emVyby1vci1vbmUpCTsgU1JFCiAgICAoXD8/CQkuIHplcm8tb3Itb25lKQogICAgKCoJCQkuIHpl cm8tb3ItbW9yZSkJOyBTUkUKICAgICgqPwkJCS4gemVyby1vci1tb3JlKQogICAgKDArCQkJLiB6 ZXJvLW9yLW1vcmUpCiAgICAoKwkJCS4gb25lLW9yLW1vcmUpCTsgU1JFCiAgICAoKz8JCQkuIG9u ZS1vci1tb3JlKQogICAgKDErCQkJLiBvbmUtb3ItbW9yZSkKICAgIChvcHRpb25hbAkJLiB6ZXJv LW9yLW9uZSkKICAgIChvcHQJCS4gemVyby1vci1vbmUpCTsgc3JlZ2V4CiAgICAobWluaW1hbC1t YXRjaAkuIChyeC1ncmVlZHkgMSAxKSkKICAgIChtYXhpbWFsLW1hdGNoCS4gKHJ4LWdyZWVkeSAx IDEpKQogICAgKGJhY2tyZWYJCS4gKHJ4LWJhY2tyZWYgMSAxIHJ4LWNoZWNrLWJhY2tyZWYpKQog ICAgKGxpbmUtc3RhcnQJCS4gIl4iKQogICAgKGJvbAkJLiBsaW5lLXN0YXJ0KQk7IFNSRQogICAg KGxpbmUtZW5kCQkuICIkIikKICAgIChlb2wJCS4gbGluZS1lbmQpCTsgU1JFCiAgICAoc3RyaW5n LXN0YXJ0CS4gIlxcYCIpCiAgICAoYm9zCQkuIHN0cmluZy1zdGFydCkJOyBTUkUKICAgIChib3QJ CS4gc3RyaW5nLXN0YXJ0KQk7IHNyZWdleAogICAgKHN0cmluZy1lbmQJCS4gIlxcJyIpCiAgICAo ZW9zCQkuIHN0cmluZy1lbmQpCTsgU1JFCiAgICAoZW90CQkuIHN0cmluZy1lbmQpCTsgc3JlZ2V4 CiAgICAoYnVmZmVyLXN0YXJ0CS4gIlxcYCIpCiAgICAoYnVmZmVyLWVuZAkJLiAiXFwnIikKICAg IChwb2ludAkJLiAiXFw9IikKICAgICh3b3JkLXN0YXJ0CQkuICJcXDwiKQogICAgKGJvdwkJLiB3 b3JkLXN0YXJ0KQk7IFNSRQogICAgKHdvcmQtZW5kCQkuICJcXD4iKQogICAgKGVvdwkJLiB3b3Jk LWVuZCkJOyBTUkUKICAgICh3b3JkLWJvdW5kYXJ5CS4gIlxcYiIpCiAgICAobm90LXdvcmQtYm91 bmRhcnkJLiAiXFxCIikJOyBzcmVnZXgKICAgIChzeW1ib2wtc3RhcnQgICAgICAgLiAiXFxfPCIp CiAgICAoc3ltYm9sLWVuZCAgICAgICAgIC4gIlxcXz4iKQogICAgKHN5bnRheAkJLiAocngtc3lu dGF4IDEgMSkpCiAgICAobm90LXN5bnRheAkJLiAocngtbm90LXN5bnRheCAxIDEpKSA7IHNyZWdl eAogICAgKGNhdGVnb3J5CQkuIChyeC1jYXRlZ29yeSAxIDEgcngtY2hlY2stY2F0ZWdvcnkpKQog ICAgKGV2YWwJCS4gKHJ4LWV2YWwgMSAxKSkKICAgIChyZWdleHAJCS4gKHJ4LXJlZ2V4cCAxIDEg c3RyaW5ncCkpCiAgICAoZGlnaXQJCS4gIltbOmRpZ2l0Ol1dIikKICAgIChudW1lcmljCQkuIGRp Z2l0KQk7IFNSRQogICAgKG51bQkJLiBkaWdpdCkJOyBTUkUKICAgIChjb250cm9sCQkuICJbWzpj bnRybDpdXSIpIDsgU1JFCiAgICAoY250cmwJCS4gY29udHJvbCkJIDsgU1JFCiAgICAoaGV4LWRp Z2l0CQkuICJbWzp4ZGlnaXQ6XV0iKSA7IFNSRQogICAgKGhleAkJLiBoZXgtZGlnaXQpCSAgOyBT UkUKICAgICh4ZGlnaXQJCS4gaGV4LWRpZ2l0KQkgIDsgU1JFCiAgICAoYmxhbmsJCS4gIltbOmJs YW5rOl1dIikgIDsgU1JFCiAgICAoZ3JhcGhpYwkJLiAiW1s6Z3JhcGg6XV0iKSAgOyBTUkUKICAg IChncmFwaAkJLiBncmFwaGljKQkgIDsgU1JFCiAgICAocHJpbnRpbmcJCS4gIltbOnByaW50Ol1d IikgIDsgU1JFCiAgICAocHJpbnQJCS4gcHJpbnRpbmcpCSAgOyBTUkUKICAgIChhbHBoYW51bWVy aWMJLiAiW1s6YWxudW06XV0iKSAgOyBTUkUKICAgIChhbG51bQkJLiBhbHBoYW51bWVyaWMpCSAg OyBTUkUKICAgIChsZXR0ZXIJCS4gIltbOmFscGhhOl1dIikKICAgIChhbHBoYWJldGljCQkuIGxl dHRlcikJOyBTUkUKICAgIChhbHBoYQkJLiBsZXR0ZXIpCTsgU1JFCiAgICAoYXNjaWkJCS4gIltb OmFzY2lpOl1dIikgOyBTUkUKICAgIChub25hc2NpaQkJLiAiW1s6bm9uYXNjaWk6XV0iKQogICAg KGxvd2VyCQkuICJbWzpsb3dlcjpdXSIpIDsgU1JFCiAgICAobG93ZXItY2FzZQkJLiBsb3dlcikJ IDsgU1JFCiAgICAocHVuY3R1YXRpb24JLiAiW1s6cHVuY3Q6XV0iKSA7IFNSRQogICAgKHB1bmN0 CQkuIHB1bmN0dWF0aW9uKQkgOyBTUkUKICAgIChzcGFjZQkJLiAiW1s6c3BhY2U6XV0iKSA7IFNS RQogICAgKHdoaXRlc3BhY2UJCS4gc3BhY2UpCSA7IFNSRQogICAgKHdoaXRlCQkuIHNwYWNlKQkg OyBTUkUKICAgICh1cHBlcgkJLiAiW1s6dXBwZXI6XV0iKSA7IFNSRQogICAgKHVwcGVyLWNhc2UJ CS4gdXBwZXIpCSA7IFNSRQogICAgKHdvcmQJCS4gIltbOndvcmQ6XV0iKQkgOyBpbmNvbnNpc3Rl bnQgd2l0aCBTUkUKICAgICh3b3JkY2hhcgkJLiB3b3JkKQkJIDsgc3JlZ2V4CiAgICAobm90LXdv cmRjaGFyCS4gIlxcVyIpKQogICJBbGlzdCBvZiBzZXhwIGZvcm0gcmVnZXhwIGNvbnN0aXR1ZW50 cy4KRWFjaCBlbGVtZW50IG9mIHRoZSBhbGlzdCBoYXMgdGhlIGZvcm0gKFNZTUJPTCAuIERFRk4p LgpTWU1CT0wgaXMgYSB2YWxpZCBjb25zdGl0dWVudCBvZiBzZXhwIHJlZ3VsYXIgZXhwcmVzc2lv bnMuCklmIERFRk4gaXMgYSBzdHJpbmcsIFNZTUJPTCBpcyB0cmFuc2xhdGVkIGludG8gREVGTi4K SWYgREVGTiBpcyBhIHN5bWJvbCwgdXNlIHRoZSBkZWZpbml0aW9uIG9mIERFRk4sIHJlY3Vyc2l2 ZWx5LgpPdGhlcndpc2UsIERFRk4gbXVzdCBiZSBhIGxpc3QgKEZVTkNUSU9OIE1JTi1BUkdTIE1B WC1BUkdTIFBSRURJQ0FURSkuCkZVTkNUSU9OIGlzIHVzZWQgdG8gcHJvZHVjZSBjb2RlIGZvciBT WU1CT0wuICBNSU4tQVJHUyBhbmQgTUFYLUFSR1MKYXJlIHRoZSBtaW5pbXVtIGFuZCBtYXhpbXVt IG51bWJlciBvZiBhcmd1bWVudHMgdGhlIGZ1bmN0aW9uLWZvcm0Kc2V4cCBjb25zdGl0dWVudCBT WU1CT0wgbWF5IGhhdmUgaW4gc2V4cCByZWd1bGFyIGV4cHJlc3Npb25zLgpNQVgtQVJHUyBuaWwg bWVhbnMgbm8gbGltaXQuICBQUkVESUNBVEUsIGlmIHNwZWNpZmllZCwgbWVhbnMgdGhhdAphbGwg YXJndW1lbnRzIG11c3Qgc2F0aXNmeSBQUkVESUNBVEUuIikKCgooZGVmY29uc3Qgcngtc3ludGF4 CiAgJygod2hpdGVzcGFjZQkJLiA/LSkKICAgIChwdW5jdHVhdGlvbgkuID8uKQogICAgKHdvcmQJ CS4gP3cpCiAgICAoc3ltYm9sCQkuID9fKQogICAgKG9wZW4tcGFyZW50aGVzaXMJLiA/XCgpCiAg ICAoY2xvc2UtcGFyZW50aGVzaXMJLiA/XCkpCiAgICAoZXhwcmVzc2lvbi1wcmVmaXgJLiA/XCcp CiAgICAoc3RyaW5nLXF1b3RlCS4gP1wiKQogICAgKHBhaXJlZC1kZWxpbWl0ZXIJLiA/JCkKICAg IChlc2NhcGUJCS4gP1xcKQogICAgKGNoYXJhY3Rlci1xdW90ZQkuID8vKQogICAgKGNvbW1lbnQt c3RhcnQJLiA/PCkKICAgIChjb21tZW50LWVuZAkuID8+KQogICAgKHN0cmluZy1kZWxpbWl0ZXIJ LiA/fCkKICAgIChjb21tZW50LWRlbGltaXRlcgkuID8hKSkKICAiQWxpc3QgbWFwcGluZyBSeCBz eW50YXggc3ltYm9scyB0byBzeW50YXggY2hhcmFjdGVycy4KRWFjaCBlbnRyeSBoYXMgdGhlIGZv cm0gKFNZTUJPTCAuIENIQVIpLCB3aGVyZSBTWU1CT0wgaXMgYSB2YWxpZApzeW1ib2wgaW4gYChz eW50YXggU1lNQk9MKScsIGFuZCBDSEFSIGlzIHRoZSBzeW50YXggY2hhcmFjdGVyCmNvcnJlc3Bv bmRpbmcgdG8gU1lNQk9MLCBhcyBpdCB3b3VsZCBiZSB1c2VkIHdpdGggXFxzIG9yIFxcUyBpbgpy ZWd1bGFyIGV4cHJlc3Npb25zLiIpCgoKKGRlZmNvbnN0IHJ4LWNhdGVnb3JpZXMKICAnKChjb25z b25hbnQJCQkuID8wKQogICAgKGJhc2Utdm93ZWwJCQkuID8xKQogICAgKHVwcGVyLWRpYWNyaXRp Y2FsLW1hcmsJLiA/MikKICAgIChsb3dlci1kaWFjcml0aWNhbC1tYXJrCS4gPzMpCiAgICAodG9u ZS1tYXJrCQkJLiA/NCkKICAgIChzeW1ib2wJCQkuID81KQogICAgKGRpZ2l0CQkJLiA/NikKICAg ICh2b3dlbC1tb2RpZnlpbmctZGlhY3JpdGljYWwtbWFyayAuID83KQogICAgKHZvd2VsLXNpZ24J CQkuID84KQogICAgKHNlbWl2b3dlbC1sb3dlcgkJLiA/OSkKICAgIChub3QtYXQtZW5kLW9mLWxp bmUJCS4gPzwpCiAgICAobm90LWF0LWJlZ2lubmluZy1vZi1saW5lCS4gPz4pCiAgICAoYWxwaGEt bnVtZXJpYy10d28tYnl0ZQkuID9BKQogICAgKGNoaW5zZS10d28tYnl0ZQkJLiA/QykKICAgIChn cmVlay10d28tYnl0ZQkJLiA/RykKICAgIChqYXBhbmVzZS1oaXJhZ2FuYS10d28tYnl0ZSAuID9I KQogICAgKGluZGlhbi10d28tYnl0ZQkJLiA/SSkKICAgIChqYXBhbmVzZS1rYXRha2FuYS10d28t Ynl0ZSAuID9LKQogICAgKGtvcmVhbi1oYW5ndWwtdHdvLWJ5dGUJLiA/TikKICAgIChjeXJpbGxp Yy10d28tYnl0ZQkJLiA/WSkKICAgIChjb21iaW5pbmctZGlhY3JpdGljCS4gP14pCiAgICAoYXNj aWkJCQkuID9hKQogICAgKGFyYWJpYwkJCS4gP2IpCiAgICAoY2hpbmVzZQkJCS4gP2MpCiAgICAo ZXRoaW9waWMJCQkuID9lKQogICAgKGdyZWVrCQkJLiA/ZykKICAgIChrb3JlYW4JCQkuID9oKQog ICAgKGluZGlhbgkJCS4gP2kpCiAgICAoamFwYW5lc2UJCQkuID9qKQogICAgKGphcGFuZXNlLWth dGFrYW5hCQkuID9rKQogICAgKGxhdGluCQkJLiA/bCkKICAgIChsYW8JCQkuID9vKQogICAgKHRp YmV0YW4JCQkuID9xKQogICAgKGphcGFuZXNlLXJvbWFuCQkuID9yKQogICAgKHRoYWkJCQkuID90 KQogICAgKHZpZXRuYW1lc2UJCQkuID92KQogICAgKGhlYnJldwkJCS4gP3cpCiAgICAoY3lyaWxs aWMJCQkuID95KQogICAgKGNhbi1icmVhawkJCS4gP3wpKQogICJBbGlzdCBtYXBwaW5nIHN5bWJv bHMgdG8gY2F0ZWdvcnkgY2hhcmFjdGVycy4KRWFjaCBlbnRyeSBoYXMgdGhlIGZvcm0gKFNZTUJP TCAuIENIQVIpLCB3aGVyZSBTWU1CT0wgaXMgYSB2YWxpZApzeW1ib2wgaW4gYChjYXRlZ29yeSBT WU1CT0wpJywgYW5kIENIQVIgaXMgdGhlIGNhdGVnb3J5IGNoYXJhY3Rlcgpjb3JyZXNwb25kaW5n IHRvIFNZTUJPTCwgYXMgaXQgd291bGQgYmUgdXNlZCB3aXRoIGBcXGMnIG9yIGBcXEMnIGluCnJl Z3VsYXIgZXhwcmVzc2lvbiBzdHJpbmdzLiIpCgoKKGRlZnZhciByeC1ncmVlZHktZmxhZyB0CiAg Ik5vbi1uaWwgbWVhbnMgcHJvZHVjZSBncmVlZHkgcmVndWxhciBleHByZXNzaW9ucyBmb3IgYHpl cm8tb3Itb25lJywKYHplcm8tb3ItbW9yZScsIGFuZCBgb25lLW9yLW1vcmUnLiAgRHluYW1pY2Fs bHkgYm91bmQuIikKCgooZGVmdW4gcngtaW5mbyAob3ApCiAgIlJldHVybiBwYXJzaW5nL2NvZGUg Z2VuZXJhdGlvbiBpbmZvIGZvciBPUC4KSWYgT1AgaXMgdGhlIHNwYWNlIGNoYXJhY3RlciBBU0NJ SSAzMiwgcmV0dXJuIGluZm8gZm9yIHRoZSBzeW1ib2wgYD8nLgpJZiBPUCBpcyB0aGUgY2hhcmFj dGVyIGA/JywgcmV0dXJuIGluZm8gZm9yIHRoZSBzeW1ib2wgYD8/Jy4KU2VlIGFsc28gYHJ4LWNv bnN0aXR1ZW50cycuIgogIChjb25kICgoZXEgb3AgPyApIChzZXRxIG9wICdcPykpCgkoKGVxIG9w ID8/KSAoc2V0cSBvcCAnXD8/KSkpCiAgKHdoaWxlIChhbmQgKG5vdCAobnVsbCBvcCkpIChzeW1i b2xwIG9wKSkKICAgIChzZXRxIG9wIChjZHIgKGFzc3Egb3AgcngtY29uc3RpdHVlbnRzKSkpKQog IG9wKQoKCihkZWZ1biByeC1jaGVjayAoZm9ybSkKICAiQ2hlY2sgRk9STSBhY2NvcmRpbmcgdG8g aXRzIGNhcidzIHBhcnNpbmcgaW5mby4iCiAgKHVubGVzcyAobGlzdHAgZm9ybSkKICAgIChlcnJv ciAicnggYCVzJyBuZWVkcyBhcmd1bWVudChzKSIgZm9ybSkpCiAgKGxldCogKChyeCAocngtaW5m byAoY2FyIGZvcm0pKSkKCSAobmFyZ3MgKDEtIChsZW5ndGggZm9ybSkpKQoJIChtaW4tYXJncyAo bnRoIDEgcngpKQoJIChtYXgtYXJncyAobnRoIDIgcngpKQoJICh0eXBlLXByZWQgKG50aCAzIHJ4 KSkpCiAgICAod2hlbiAoYW5kIChub3QgKG51bGwgbWluLWFyZ3MpKQoJICAgICAgICg8IG5hcmdz IG1pbi1hcmdzKSkKICAgICAgKGVycm9yICJyeCBmb3JtIGAlcycgcmVxdWlyZXMgYXQgbGVhc3Qg JWQgYXJncyIKCSAgICAgKGNhciBmb3JtKSBtaW4tYXJncykpCiAgICAod2hlbiAoYW5kIChub3Qg KG51bGwgbWF4LWFyZ3MpKQoJICAgICAgICg+IG5hcmdzIG1heC1hcmdzKSkKICAgICAgKGVycm9y ICJyeCBmb3JtIGAlcycgYWNjZXB0cyBhdCBtb3N0ICVkIGFyZ3MiCgkgICAgIChjYXIgZm9ybSkg bWF4LWFyZ3MpKQogICAgKHdoZW4gKG5vdCAobnVsbCB0eXBlLXByZWQpKQogICAgICAoZG9saXN0 IChzdWItZm9ybSAoY2RyIGZvcm0pKQoJKHVubGVzcyAoZnVuY2FsbCB0eXBlLXByZWQgc3ViLWZv cm0pCgkgIChlcnJvciAicnggZm9ybSBgJXMnIHJlcXVpcmVzIGFyZ3Mgc2F0aXNmeWluZyBgJXMn IgoJCSAoY2FyIGZvcm0pIHR5cGUtcHJlZCkpKSkpKQoKCihkZWZ1biByeC1ncm91cC1pZiAocmVn ZXhwIGdyb3VwKQogICJQdXQgc2h5IGdyb3VwcyBhcm91bmQgUkVHRVhQIGlmIHNlZW1pbmdseSBu ZWNlc3Nhcnkgd2hlbiBHUk9VUAppcyBub24tbmlsLiIKICAoY29uZAogICA7OyBmb3Igc29tZSBy ZXBldGl0aW9uCiAgICgoZXEgZ3JvdXAgJyopIChpZiAocngtYXRvbWljLXAgcmVnZXhwKSAoc2V0 cSBncm91cCBuaWwpKSkKICAgOzsgZm9yIGNvbmNhdGVuYXRpb24KICAgKChlcSBncm91cCAnOikK ICAgIChpZiAocngtYXRvbWljLXAKCSAoaWYgKHN0cmluZy1tYXRjaAoJICAgICAgIlxcKD86Wz8q K11cXD8/XFx8XFxcXHtbMC05XSosP1swLTldKlxcXFx9XFwpXFwnIiByZWdleHApCgkgICAgIChz dWJzdHJpbmcgcmVnZXhwIDAgKG1hdGNoLWJlZ2lubmluZyAwKSkKCSAgIHJlZ2V4cCkpCgkoc2V0 cSBncm91cCBuaWwpKSkKICAgOzsgZm9yIE9SCiAgICgoZXEgZ3JvdXAgJ3wpIChzZXRxIGdyb3Vw IG5pbCkpCiAgIDs7IGRvIGFueXdheQogICAoKGVxIGdyb3VwIHQpKQogICAoKHJ4LWF0b21pYy1w IHJlZ2V4cCB0KSAoc2V0cSBncm91cCBuaWwpKSkKICAoaWYgZ3JvdXAKICAgICAgKGNvbmNhdCAi XFwoPzoiIHJlZ2V4cCAiXFwpIikKICAgIHJlZ2V4cCkpCgoKKGRlZnZhciByeC1wYXJlbnQpCjs7 IGR5bmFtaWNhbGx5IGJvdW5kIGluIHNvbWUgZnVuY3Rpb25zLgoKCihkZWZ1biByeC1hbmQgKGZv cm0pCiAgIlBhcnNlIGFuZCBwcm9kdWNlIGNvZGUgZnJvbSBGT1JNLgpGT1JNIGlzIG9mIHRoZSBm b3JtIGAoYW5kIEZPUk0xIC4uLiknLiIKICAocngtY2hlY2sgZm9ybSkKICAocngtZ3JvdXAtaWYK ICAgKG1hcGNvbmNhdCAobGFtYmRhICh4KSAocngtZm9ybSB4ICc6KSkgKGNkciBmb3JtKSBuaWwp CiAgIChhbmQgKG1lbXEgcngtcGFyZW50ICcoKiB0KSkgcngtcGFyZW50KSkpCgoKKGRlZnVuIHJ4 LW9yIChmb3JtKQogICJQYXJzZSBhbmQgcHJvZHVjZSBjb2RlIGZyb20gRk9STSwgd2hpY2ggaXMg YChvciBGT1JNMSAuLi4pJy4iCiAgKHJ4LWNoZWNrIGZvcm0pCiAgKHJ4LWdyb3VwLWlmCiAgIChp ZiAobWVtcSBuaWwgKG1hcGNhciAnc3RyaW5ncCAoY2RyIGZvcm0pKSkKICAgICAgIChtYXBjb25j YXQgKGxhbWJkYSAoeCkgKHJ4LWZvcm0geCAnfCkpIChjZHIgZm9ybSkgIlxcfCIpCiAgICAgKHJl Z2V4cC1vcHQgKGNkciBmb3JtKSkpCiAgIChhbmQgKG1lbXEgcngtcGFyZW50ICcoOiAqIHQpKSBy eC1wYXJlbnQpKSkKCgooZGVmdW4gcngtYW55dGhpbmcgKGZvcm0pCiAgIk1hdGNoIGFueSBjaGFy YWN0ZXIuIgogIChpZiAoY29uc3AgZm9ybSkKICAgICAgKGVycm9yICJyeCBgYW55dGhuZycgc3lu dGF4IGVycm9yOiAlcyIgZm9ybSkpCiAgKHJ4LW9yIChsaXN0ICdvciAnbm90LW5ld2xpbmUgP1xu KSkpCgoKKGRlZnVuIHJ4LWFueS1kZWxldGUtZnJvbS1yYW5nZSAoY2hhciByYW5nZXMpCiAgIkRl bGV0ZSBieSBzaWRlIGVmZmVjdCBjaGFyYWN0ZXIgQ0hBUiBmcm9tIFJBTkdFUy4KT25seSBib3Ro IGVkZ2VzIG9mIGVhY2ggcmFuZ2UgaXMgY2hlY2tlZC4iCiAgKGxldCAobSkKICAgIChjb25kCiAg ICAgKChtZW1xIGNoYXIgcmFuZ2VzKSAoc2V0cSByYW5nZXMgKGRlbHEgY2hhciByYW5nZXMpKSkK ICAgICAoKHNldHEgbSAoYXNzcSBjaGFyIHJhbmdlcykpCiAgICAgIChpZiAoZXEgKDErIGNoYXIp IChjZHIgbSkpCgkgIChzZXRjYXIgKG1lbXEgbSByYW5nZXMpICgxKyBjaGFyKSkKCShzZXRjYXIg bSAoMSsgY2hhcikpKSkKICAgICAoKHNldHEgbSAocmFzc3EgY2hhciByYW5nZXMpKQogICAgICAo aWYgKGVxICgxLSBjaGFyKSAoY2FyIG0pKQoJICAoc2V0Y2FyIChtZW1xIG0gcmFuZ2VzKSAoMS0g Y2hhcikpCgkoc2V0Y2RyIG0gKDEtIGNoYXIpKSkpKQogICAgcmFuZ2VzKSkKCiAgICAKKGRlZnVu IHJ4LWFueS1jb25kZW5zZS1yYW5nZSAoYXJncykKICAiQ29uZGVuc2UgYnkgc2lkZSBlZmZlY3Qg QVJHUyBhcyByYW5nZSBmb3IgUnggYGFueScuIgogIChsZXQgKHN0cgoJbCkKICAgIDs7IHNldCBT VFIgbGlzdCBvZiBhbGwgc3RyaW5ncwogICAgOzsgc2V0IEwgbGlzdCBvZiBhbGwgcmFuZ2VzCiAg ICAobWFwYyAobGFtYmRhIChlKSAoY29uZCAoKHN0cmluZ3AgZSkgKHB1c2ggZSBzdHIpKQoJCQkg ICAgKChudW1iZXJwIGUpIChwdXNoIChjb25zIGUgZSkgbCkpCgkJCSAgICAodCAocHVzaCBlIGwp KSkpCgkgIGFyZ3MpCiAgICA7OyBjb25kZW5zZSBvdmVybGFwcGVkIHJhbmdlcyBpbiBMCiAgICAo bGV0ICgodGFpbCAoc2V0cSBsIChzb3J0IGwgIydjYXItbGVzcy10aGFuLWNhcikpKQoJICBkKQog ICAgICAod2hpbGUgKHNldHEgZCAoY2RyIHRhaWwpKQoJKGlmICg+PSAoY2RhciB0YWlsKSAoMS0g KGNhYXIgZCkpKQoJICAgIChwcm9nbgoJICAgICAgKHNldGNkciAoY2FyIHRhaWwpIChtYXggKGNk YXIgdGFpbCkgKGNkYXIgZCkpKQoJICAgICAgKHNldGNkciB0YWlsIChjZHIgZCkpKQoJICAoc2V0 cSB0YWlsIGQpKSkpCiAgICA7OyBTZXBhcmF0ZSBzbWFsbCByYW5nZXMgdG8gc2luZ2xlIG51bWJl ciwgYW5kIGRlbGV0ZSBkdXBzLgogICAgKG5jb25jCiAgICAgKGFwcGx5ICMnbmNvbmMKCSAgICAo bWFwY2FyIChsYW1iZGEgKGUpCgkJICAgICAgKGNvbmQKCQkgICAgICAgKCg9IChjYXIgZSkgKGNk ciBlKSkgKGxpc3QgKGNhciBlKSkpCgkJICAgICAgIDs7ICgoPSAoMSsgKGNhciBlKSkgKGNkciBl KSkgKGxpc3QgKGNhciBlKSAoY2RyIGUpKSkKCQkgICAgICAgKChsaXN0IGUpKSkpCgkJICAgIGwp KQogICAgIChkZWxldGUtZHVwcyBzdHIpKSkpCgoKKGRlZnVuIHJ4LWNoZWNrLWFueS1zdHJpbmcg KHN0cikKICAiQ2hlY2sgc3RyaW5nIGFyZ3VtZW50IFNUUiBmb3IgUnggYGFueScuIgogIChsZXQg KChpIDApCgljMSBjMiBsKQogICAgKGlmICg9IDAgKGxlbmd0aCBzdHIpKQoJKGVycm9yICJTdHJp bmcgYXJnIGZvciBSeCBgYW55JyBtdXN0IG5vdCBiZSBlbXB0eSIpKQogICAgKHdoaWxlIChzdHJp bmctbWF0Y2ggIi4tLiIgc3RyIGkpCiAgICAgIDs7IHN0cmluZyBiZWZvcmUgcmFuZ2U6IGNvbnZl cnQgaXQgdG8gY2hhcmFjdGVycwogICAgICAoaWYgKDwgaSAobWF0Y2gtYmVnaW5uaW5nIDApKQoJ ICAoc2V0cSBsIChuY29uYwoJCSAgIGwKCQkgICAoYXBwZW5kIChzdWJzdHJpbmcgc3RyIGkgKG1h dGNoLWJlZ2lubmluZyAwKSkgbmlsKSkpKQogICAgICA7OyByYW5nZQogICAgICAoc2V0cSBpICht YXRjaC1lbmQgMCkKCSAgICBjMSAoYXJlZiBzdHIgKG1hdGNoLWJlZ2lubmluZyAwKSkKCSAgICBj MiAoYXJlZiBzdHIgKDEtIGkpKSkKICAgICAgKGNvbmQKICAgICAgICgoPCBjMSBjMikgKHNldHEg bCAobmNvbmMgbCAobGlzdCAoY29ucyBjMSBjMikpKSkpCiAgICAgICAoKD0gYzEgYzIpIChzZXRx IGwgKG5jb25jIGwgKGxpc3QgYzEpKSkpKSkKICAgIDs7IHJlc3Q/CiAgICAoaWYgKDwgaSAobGVu Z3RoIHN0cikpCgkoc2V0cSBsIChuY29uYyBsIChhcHBlbmQgKHN1YnN0cmluZyBzdHIgaSkgbmls KSkpKQogICAgbCkpCgoKKGRlZnVuIHJ4LWNoZWNrLWFueSAoYXJnKQogICAiQ2hlY2sgYXJnIEFS RyBmb3IgUnggYGFueScuIgogICAoY29uZAogICAgKChpbnRlZ2VycCBhcmcpIChsaXN0IGFyZykp CiAgICAoKHN5bWJvbHAgYXJnKQogICAgIChsZXQgKCh0cmFuc2xhdGlvbiAoY29uZGl0aW9uLWNh c2UgbmlsCgkJCSAgICAocngtZm9ybSBhcmcpCgkJCSAgKGVycm9yIG5pbCkpKSkKICAgICAgIChp ZiAob3IgKG51bGwgdHJhbnNsYXRpb24pCgkgICAgICAgKG51bGwgKHN0cmluZy1tYXRjaCAiXFxg XFxbXFxbOlstYS16XSs6XFxdXFxdXFwnIiB0cmFuc2xhdGlvbikpKQoJICAgKGVycm9yICJJbnZh bGlkIGNoYXIgY2xhc3MgYCVzJyBpbiBSeCBgYW55JyIgYXJnKSkKICAgICAgIChsaXN0IChzdWJz dHJpbmcgdHJhbnNsYXRpb24gMSAtMSkpKSkgOyBzdHJpcCBvdXRlciBicmFja2V0cwogICAgKChh bmQgKGludGVnZXJwIChjYXItc2FmZSBhcmcpKSAoaW50ZWdlcnAgKGNkci1zYWZlIGFyZykpKQog ICAgIChsaXN0IGFyZykpCiAgICAoKHN0cmluZ3AgYXJnKSAocngtY2hlY2stYW55LXN0cmluZyBh cmcpKQogICAgKChlcnJvcgogICAgICAicnggYGFueScgcmVxdWlyZXMgc3RyaW5nLCBjaGFyYWN0 ZXIsIGNoYXIgcGFpciBvciBjaGFyIGNsYXNzIGFyZ3MiKSkpKQoKCihkZWZ1biByeC1hbnkgKGZv cm0pCiAgIlBhcnNlIGFuZCBwcm9kdWNlIGNvZGUgZnJvbSBGT1JNLCB3aGljaCBpcyBgKGFueSBB UkcgLi4uKScuCkFSRyBpcyBvcHRpb25hbC4iCiAgKHJ4LWNoZWNrIGZvcm0pCiAgKGxldCogKChh cmdzIChyeC1hbnktY29uZGVuc2UtcmFuZ2UKCQkoYXBwbHkKCQkgIyduY29uYwoJCSAobWFwY2Fy ICMncngtY2hlY2stYW55IChjZHIgZm9ybSkpKSkpCgkgbQoJIHMpCiAgICAoY29uZAogICAgIDs7 IHNpbmdsZSBjbG9zZSBicmFja2V0CiAgICAgOzsJID0+ICJbXS4uLi1dIiBvciAiW10uLi4tLS5d IgogICAgICgobWVtcSA/XF0gYXJncykKICAgICAgOzsgc2V0IF0gYXQgdGhlIGJlZ2lubmluZwog ICAgICAoc2V0cSBhcmdzIChjb25zID9cXSAoZGVscSA/XF0gYXJncykpKQogICAgICA7OyBzZXQg LSBhdCB0aGUgZW5kCiAgICAgIChpZiAob3IgKG1lbXEgPy0gYXJncykgKGFzc3EgPy0gYXJncykp CgkgIChzZXRxIGFyZ3MgKG5jb25jIChyeC1hbnktZGVsZXRlLWZyb20tcmFuZ2UgPy0gYXJncykK CQkJICAgIChsaXN0ID8tKSkpKSkKICAgICA7OyBjbG9zZSBicmFja2V0IHN0YXJ0cyBhIHJhbmdl CiAgICAgOzsgID0+ICJbXS0uLi4uLV0iIG9yICJbXS0uLS0uLi4uXSIKICAgICAoKHNldHEgbSAo YXNzcSA/XF0gYXJncykpCiAgICAgIDs7IGJyaW5nIGl0IHRvIHRoZSBiZWdpbm5pbmcKICAgICAg KHNldHEgYXJncyAoY29ucyBtIChkZWxxIG0gYXJncykpKQogICAgICAoY29uZCAoKG1lbXEgPy0g YXJncykKCSAgICAgOzsgdG8gdGhlIGVuZAoJICAgICAoc2V0cSBhcmdzIChuY29uYyAoZGVscSA/ LSBhcmdzKSAobGlzdCA/LSkpKSkKCSAgICAoKHNldHEgbSAoYXNzcSA/LSBhcmdzKSkKCSAgICAg OzsgbmV4dCB0byB0aGUgYnJhY2tldCdzIHJhbmdlLCBtYWtlIHRoZSBzZWNvbmQgcmFuZ2UKCSAg ICAgKHNldGNkciBhcmdzIChjb25zIG0gKGRlbHEgbSBhcmdzKSkpKSkpCiAgICAgOzsgYnJhY2tl dCBpbiB0aGUgZW5kIHJhbmdlCiAgICAgOzsJID0+ICJbXS4uLi1dIgogICAgICgoc2V0cSBtIChy YXNzcSA/XF0gYXJncykpCiAgICAgIDs7IHNldCBdIGF0IHRoZSBiZWdpbm5pbmcKICAgICAgKHNl dHEgYXJncyAoY29ucyA/XF0gKHJ4LWFueS1kZWxldGUtZnJvbS1yYW5nZSA/XF0gYXJncykpKQog ICAgICA7OyBzZXQgLSBhdCB0aGUgZW5kCiAgICAgIChpZiAob3IgKG1lbXEgPy0gYXJncykgKGFz c3EgPy0gYXJncykpCgkgIChzZXRxIGFyZ3MgKG5jb25jIChyeC1hbnktZGVsZXRlLWZyb20tcmFu Z2UgPy0gYXJncykKCQkJICAgIChsaXN0ID8tKSkpKSkKICAgICA7OyB7bm8gY2xvc2UgYnJhY2tl dCBhcHBlYXJzfQogICAgIDs7CiAgICAgOzsgYnJpbmcgc2luZ2xlIGJhciB0byB0aGUgYmVnaW5u aW5nCiAgICAgKChtZW1xID8tIGFyZ3MpCiAgICAgIChzZXRxIGFyZ3MgKGNvbnMgPy0gKGRlbHEg Py0gYXJncykpKSkKICAgICA7OyBiYXIgc3RhcnQgYSByYW5nZSwgYnJpbmcgaXQgdG8gdGhlIGJl Z2lubmluZwogICAgICgoc2V0cSBtIChhc3NxID8tIGFyZ3MpKQogICAgICAoc2V0cSBhcmdzIChj b25zIG0gKGRlbHEgbSBhcmdzKSkpKQogICAgIDs7CiAgICAgOzsgaGF0IGF0IHRoZSBiZWdpbm5p bmc/CiAgICAgKChvciAoZXEgKGNhciBhcmdzKSA/XikgKGVxIChjYXItc2FmZSAoY2FyIGFyZ3Mp KSA/XikpCiAgICAgIChzZXRxIGFyZ3MgKGlmIChjZHIgYXJncykKCQkgICAgIGAoLChjYWRyIGFy Z3MpICwoY2FyIGFyZ3MpICxAKGNkZHIgYXJncykpCgkJICAgKG5jb25jIChyeC1hbnktZGVsZXRl LWZyb20tcmFuZ2UgP14gYXJncykKCQkJICAobGlzdCA/XikpKSkpKQogICAgOzsgc29tZSAxLWNo YXI/CiAgICAoaWYgKGFuZCAobnVsbCAoY2RyIGFyZ3MpKSAobnVtYmVycCAoY2FyIGFyZ3MpKQoJ ICAgICAob3IgKD0gMSAobGVuZ3RoCgkJICAgICAgIChzZXRxIHMgKHJlZ2V4cC1xdW90ZSAoc3Ry aW5nIChjYXIgYXJncykpKSkpKQoJCSAoYW5kIChlcXVhbCAoY2FyIGFyZ3MpID9eKSA7OyB1bm5l Y2Vzc2FyeSBwcmVkaWNhdGU/CgkJICAgICAgKG51bGwgKGVxIHJ4LXBhcmVudCAnISkpKSkpCglz CiAgICAgIChjb25jYXQgIlsiCgkgICAgICAobWFwY29uY2F0CgkgICAgICAgKGxhbWJkYSAoZSkg KGNvbmQKCQkJICAgICgobnVtYmVycCBlKSAoc3RyaW5nIGUpKQoJCQkgICAgKChjb25zcCBlKQoJ CQkgICAgIChpZiAoYW5kICg9ICgxKyAoY2FyIGUpKSAoY2RyIGUpKQoJCQkJICAgICAgKG51bGwg KG1lbXEgKGNhciBlKSAnKD9cXSA/LSkpKSkKCQkJCSAoc3RyaW5nIChjYXIgZSkgKGNkciBlKSkK CQkJICAgICAgIChzdHJpbmcgKGNhciBlKSA/LSAoY2RyIGUpKSkpCgkJCSAgICAoZSkpKQoJICAg ICAgIGFyZ3MKCSAgICAgICBuaWwpCgkgICAgICAiXSIpKSkpCgoKKGRlZnVuIHJ4LWNoZWNrLW5v dCAoYXJnKQogICJDaGVjayBhcmcgQVJHIGZvciBSeCBgbm90Jy4iCiAgKHVubGVzcyAob3IgKGFu ZCAoc3ltYm9scCBhcmcpCgkJICAgKHN0cmluZy1tYXRjaCAiXFxgXFxbXFxbOlstYS16XSs6XFxd XFxdXFwnIgoJCQkJIChjb25kaXRpb24tY2FzZSBuaWwKCQkJCSAgICAgKHJ4LWZvcm0gYXJnKQoJ CQkJICAgKGVycm9yICIiKSkpKQoJICAgICAgKGVxIGFyZyAnd29yZC1ib3VuZGFyeSkgCgkgICAg ICAoYW5kIChjb25zcCBhcmcpCgkJICAgKG1lbXEgKGNhciBhcmcpICcobm90IGFueSBpbiBzeW50 YXggY2F0ZWdvcnkpKSkpCiAgICAoZXJyb3IgInJ4IGBub3QnIHN5bnRheCBlcnJvcjogJXMiIGFy ZykpCiAgdCkKCgooZGVmdW4gcngtbm90IChmb3JtKQogICJQYXJzZSBhbmQgcHJvZHVjZSBjb2Rl IGZyb20gRk9STS4gIEZPUk0gaXMgYChub3QgLi4uKScuIgogIChyeC1jaGVjayBmb3JtKQogIChs ZXQgKChyZXN1bHQgKHJ4LWZvcm0gKGNhZHIgZm9ybSkgJyEpKQoJY2FzZS1mb2xkLXNlYXJjaCkK ICAgIChjb25kICgoc3RyaW5nLW1hdGNoICJcXGBcXFteIiByZXN1bHQpCgkgICAoY29uZAoJICAg ICgoZXF1YWwgcmVzdWx0ICJbXl0iKSAiW15eXSIpCgkgICAgKChhbmQgKD0gKGxlbmd0aCByZXN1 bHQpIDQpIChudWxsIChlcSByeC1wYXJlbnQgJyEpKSkKCSAgICAgKHJlZ2V4cC1xdW90ZSAoc3Vi c3RyaW5nIHJlc3VsdCAyIDMpKSkKCSAgICAoKGNvbmNhdCAiWyIgKHN1YnN0cmluZyByZXN1bHQg MikpKSkpCgkgICgoZXEgP1xbIChhcmVmIHJlc3VsdCAwKSkKCSAgIChjb25jYXQgIlteIiAoc3Vi c3RyaW5nIHJlc3VsdCAxKSkpCgkgICgoc3RyaW5nLW1hdGNoICJcXGBcXFxcW3NjYnddIiByZXN1 bHQpCgkgICAoY29uY2F0ICh1cGNhc2UgKHN1YnN0cmluZyByZXN1bHQgMCAyKSkKCQkgICAoc3Vi c3RyaW5nIHJlc3VsdCAyKSkpCgkgICgoc3RyaW5nLW1hdGNoICJcXGBcXFxcW1NDQlddIiByZXN1 bHQpCgkgICAoY29uY2F0IChkb3duY2FzZSAoc3Vic3RyaW5nIHJlc3VsdCAwIDIpKQoJCSAgIChz dWJzdHJpbmcgcmVzdWx0IDIpKSkKCSAgKHQKCSAgIChjb25jYXQgIlteIiByZXN1bHQgIl0iKSkp KSkKCgooZGVmdW4gcngtbm90LWNoYXIgKGZvcm0pCiAgIlBhcnNlIGFuZCBwcm9kdWNlIGNvZGUg ZnJvbSBGT1JNLiAgRk9STSBpcyBgKG5vdC1jaGFyIC4uLiknLiIKICAocngtY2hlY2sgZm9ybSkK ICAocngtbm90IGAobm90IChpbiAsQChjZHIgZm9ybSkpKSkpCgoKKGRlZnVuIHJ4LW5vdC1zeW50 YXggKGZvcm0pCiAgIlBhcnNlIGFuZCBwcm9kdWNlIGNvZGUgZnJvbSBGT1JNLiAgRk9STSBpcyBg KG5vdC1zeW50YXggU1lOVEFYKScuIgogIChyeC1jaGVjayBmb3JtKQogIChyeC1ub3QgYChub3Qg KHN5bnRheCAsQChjZHIgZm9ybSkpKSkpCgoKKGRlZnVuIHJ4LXRyYW5zLWZvcm1zIChmb3JtICZv cHRpb25hbCBza2lwKQogICJJZiBGT1JNJ3MgbGVuZ3RoIGlzIGdyZWF0ZXIgdGhhbiB0d28sIHRy YW5zZm9ybSBpdCB0byBsZW5ndGggdHdvLgpBIGZvcm0gKEhFQUQgUkVTVCAuLi4pIGJlY29tZXMg KEhFQUQgKGFuZCBSRVNUIC4uLikpLgpJZiBTS0lQIGlzIG5vbi1uaWwsIGFsbG93IHRoYXQgbnVt YmVyIG9mIGl0ZW1zIGFmdGVyIHRoZSBoZWFkLCBpLmUuCmAoPSBOIFJFU1QgLi4uKScgYmVjb21l cyBgKD0gTiAoYW5kIFJFU1QgLi4uKSknIGlmIFNLSVAgaXMgMS4iCiAgKHVubGVzcyBza2lwIChz ZXRxIHNraXAgMCkpCiAgKGxldCAoKHRhaWwgKG50aGNkciAoMSsgc2tpcCkgZm9ybSkpKQogICAg KGlmICg9IChsZW5ndGggdGFpbCkgMSkKCWZvcm0KICAgICAgKGxldCAoKGZvcm0gKGNvcHktc2Vx dWVuY2UgZm9ybSkpKQoJKHNldGNkciAobnRoY2RyIHNraXAgZm9ybSkgKGxpc3QgKGNvbnMgJ2Fu ZCB0YWlsKSkpCglmb3JtKSkpKQoKCihkZWZ1biByeC09IChmb3JtKQogICJQYXJzZSBhbmQgcHJv ZHVjZSBjb2RlIGZyb20gRk9STSBgKD0gTiAuLi4pJy4iCiAgKHJ4LWNoZWNrIGZvcm0pCiAgKHNl dHEgZm9ybSAocngtdHJhbnMtZm9ybXMgZm9ybSAxKSkKICAodW5sZXNzIChhbmQgKGludGVnZXJw IChudGggMSBmb3JtKSkKCSAgICAgICAoPiAobnRoIDEgZm9ybSkgMCkpCiAgICAoZXJyb3IgInJ4 IGA9JyByZXF1aXJlcyBwb3NpdGl2ZSBpbnRlZ2VyIGZpcnN0IGFyZyIpKQogIChmb3JtYXQgIiVz XFx7JWRcXH0iIChyeC1mb3JtIChudGggMiBmb3JtKSAnKikgKG50aCAxIGZvcm0pKSkKCgooZGVm dW4gcngtPj0gKGZvcm0pCiAgIlBhcnNlIGFuZCBwcm9kdWNlIGNvZGUgZnJvbSBGT1JNIGAoPj0g TiAuLi4pJy4iCiAgKHJ4LWNoZWNrIGZvcm0pCiAgKHNldHEgZm9ybSAocngtdHJhbnMtZm9ybXMg Zm9ybSAxKSkKICAodW5sZXNzIChhbmQgKGludGVnZXJwIChudGggMSBmb3JtKSkKCSAgICAgICAo PiAobnRoIDEgZm9ybSkgMCkpCiAgICAoZXJyb3IgInJ4IGA+PScgcmVxdWlyZXMgcG9zaXRpdmUg aW50ZWdlciBmaXJzdCBhcmciKSkKICAoZm9ybWF0ICIlc1xceyVkLFxcfSIgKHJ4LWZvcm0gKG50 aCAyIGZvcm0pICcqKSAobnRoIDEgZm9ybSkpKQoKCihkZWZ1biByeC0qKiAoZm9ybSkKICAiUGFy c2UgYW5kIHByb2R1Y2UgY29kZSBmcm9tIEZPUk0gYCgqKiBOIE0gLi4uKScuIgogIChyeC1jaGVj ayBmb3JtKQogIChzZXRxIGZvcm0gKGNvbnMgJ3JlcGVhdCAoY2RyIChyeC10cmFucy1mb3JtcyBm b3JtIDIpKSkpCiAgKHJ4LWZvcm0gZm9ybSAnKikpCgoKKGRlZnVuIHJ4LXJlcGVhdCAoZm9ybSkK ICAiUGFyc2UgYW5kIHByb2R1Y2UgY29kZSBmcm9tIEZPUk0uCkZPUk0gaXMgZWl0aGVyIGAocmVw ZWF0IE4gRk9STTEpJyBvciBgKHJlcGVhdCBOIE0gRk9STTEpJy4iCiAgKHJ4LWNoZWNrIGZvcm0p CiAgKGNvbmQgKCg9IChsZW5ndGggZm9ybSkgMykKCSAodW5sZXNzIChhbmQgKGludGVnZXJwIChu dGggMSBmb3JtKSkKCQkgICAgICAoPiAobnRoIDEgZm9ybSkgMCkpCgkgICAoZXJyb3IgInJ4IGBy ZXBlYXQnIHJlcXVpcmVzIHBvc2l0aXZlIGludGVnZXIgZmlyc3QgYXJnIikpCgkgKGZvcm1hdCAi JXNcXHslZFxcfSIgKHJ4LWZvcm0gKG50aCAyIGZvcm0pICcqKSAobnRoIDEgZm9ybSkpKQoJKChv ciAobm90IChpbnRlZ2VycCAobnRoIDIgZm9ybSkpKQoJICAgICAoPCAobnRoIDIgZm9ybSkgMCkK CSAgICAgKG5vdCAoaW50ZWdlcnAgKG50aCAxIGZvcm0pKSkKCSAgICAgKDwgKG50aCAxIGZvcm0p IDApCgkgICAgICg8IChudGggMiBmb3JtKSAobnRoIDEgZm9ybSkpKQoJIChlcnJvciAicnggYHJl cGVhdCcgcmFuZ2UgZXJyb3IiKSkKCSh0CgkgKGZvcm1hdCAiJXNcXHslZCwlZFxcfSIgKHJ4LWZv cm0gKG50aCAzIGZvcm0pICcqKQoJCSAobnRoIDEgZm9ybSkgKG50aCAyIGZvcm0pKSkpKQoKCihk ZWZ1biByeC1zdWJtYXRjaCAoZm9ybSkKICAiUGFyc2UgYW5kIHByb2R1Y2UgY29kZSBmcm9tIEZP Uk0sIHdoaWNoIGlzIGAoc3VibWF0Y2ggLi4uKScuIgogIChjb25jYXQgIlxcKCIKICAgICAgICAg IChpZiAoPSAyIChsZW5ndGggZm9ybSkpCiAgICAgICAgICAgICAgOzsgT25seSBvbmUgc3ViLWZv cm0uCiAgICAgICAgICAgICAgKHJ4LWZvcm0gKGNhZHIgZm9ybSkpCiAgICAgICAgICAgIDs7IFNl dmVyYWwgc3ViLWZvcm1zIGltcGxpY2l0bHkgY29uY2F0ZW5hdGVkLgogICAgICAgICAgICAobWFw Y29uY2F0IChsYW1iZGEgKHJlKSAocngtZm9ybSByZSAnOikpIChjZHIgZm9ybSkgbmlsKSkKICAg ICAgICAgICJcXCkiKSkKCihkZWZ1biByeC1zdWJtYXRjaC1uIChmb3JtKQogICJQYXJzZSBhbmQg cHJvZHVjZSBjb2RlIGZyb20gRk9STSwgd2hpY2ggaXMgYChzdWJtYXRjaC1uIC4uLiknLiIKICAo dW5sZXNzIChhbmQgKGludGVnZXJwIChudGggMSBmb3JtKSkKICAgICAgICAgICAgICAgKD4gKG50 aCAxIGZvcm0pIDApKQogICAgKGVycm9yICJyeCBgc3VibWF0Y2gtbicgcmVxdWlyZXMgcG9zaXRp dmUgaW50ZWdlciBmaXJzdCBhcmciKSkKICAoY29uY2F0ICJcXChcPyIKICAgICAgICAgIChmb3Jt YXQgIiVkOiIgKG50aCAxIGZvcm0pKQogICAgICAgICAgKGlmICg9IDMgKGxlbmd0aCBmb3JtKSkK ICAgICAgICAgICAgICA7OyBPbmx5IG9uZSBzdWItZm9ybS4KICAgICAgICAgICAgICAocngtZm9y bSAoY2FkZHIgZm9ybSkpCiAgICAgICAgICAgIDs7IFNldmVyYWwgc3ViLWZvcm1zIGltcGxpY2l0 bHkgY29uY2F0ZW5hdGVkLgogICAgICAgICAgICAobWFwY29uY2F0IChsYW1iZGEgKHJlKSAocngt Zm9ybSByZSAnOikpIChjZGRyIGZvcm0pIG5pbCkpCiAgICAgICAgICAiXFwpIikpCgooZGVmdW4g cngtYmFja3JlZiAoZm9ybSkKICAiUGFyc2UgYW5kIHByb2R1Y2UgY29kZSBmcm9tIEZPUk0sIHdo aWNoIGlzIGAoYmFja3JlZiBOKScuIgogIChyeC1jaGVjayBmb3JtKQogIChmb3JtYXQgIlxcJWQi IChudGggMSBmb3JtKSkpCgooZGVmdW4gcngtY2hlY2stYmFja3JlZiAoYXJnKQogICJDaGVjayBh cmcgQVJHIGZvciBSeCBgYmFja3JlZicuIgogIChvciAoYW5kIChpbnRlZ2VycCBhcmcpICg+PSBh cmcgMSkgKDw9IGFyZyA5KSkKICAgICAgKGVycm9yICJyeCBgYmFja3JlZicgcmVxdWlyZXMgbnVt ZXJpYyAxPD1hcmc8PTk6ICVzIiBhcmcpKSkKCihkZWZ1biByeC1rbGVlbmUgKGZvcm0pCiAgIlBh cnNlIGFuZCBwcm9kdWNlIGNvZGUgZnJvbSBGT1JNLgpGT1JNIGlzIGAoT1AgRk9STTEpJywgd2hl cmUgT1AgaXMgb25lIG9mIHRoZSBgemVyby1vci1vbmUnLApgemVyby1vci1tb3JlJyBldGMuICBv cGVyYXRvcnMuCklmIE9QIGlzIG9uZSBvZiBgKicsIGArJywgYD8nLCBwcm9kdWNlIGEgZ3JlZWR5 IHJlZ2V4cC4KSWYgT1AgaXMgb25lIG9mIGAqPycsIGArPycsIGA/PycsIHByb2R1Y2UgYSBub24t Z3JlZWR5IHJlZ2V4cC4KSWYgT1AgaXMgYW55dGhpbmcgZWxzZSwgcHJvZHVjZSBhIGdyZWVkeSBy ZWdleHAgaWYgYHJ4LWdyZWVkeS1mbGFnJwppcyBub24tbmlsLiIKICAocngtY2hlY2sgZm9ybSkK ICAoc2V0cSBmb3JtIChyeC10cmFucy1mb3JtcyBmb3JtKSkKICAobGV0ICgoc3VmZml4IChjb25k ICgobWVtcSAoY2FyIGZvcm0pICcoKiArID9ccykpICIiKQoJCSAgICAgICgobWVtcSAoY2FyIGZv cm0pICcoKj8gKz8gPz8pKSAiPyIpCgkJICAgICAgKHJ4LWdyZWVkeS1mbGFnICIiKQoJCSAgICAg ICh0ICI/IikpKQoJKG9wIChjb25kICgobWVtcSAoY2FyIGZvcm0pICcoKiAqPyAwKyB6ZXJvLW9y LW1vcmUpKSAiKiIpCgkJICAoKG1lbXEgKGNhciBmb3JtKSAnKCsgKz8gMSsgb25lLW9yLW1vcmUp KSAgIisiKQoJCSAgKHQgIj8iKSkpKQogICAgKHJ4LWdyb3VwLWlmCiAgICAgKGNvbmNhdCAocngt Zm9ybSAoY2FkciBmb3JtKSAnKikgb3Agc3VmZml4KQogICAgIChhbmQgKG1lbXEgcngtcGFyZW50 ICcodCAqKSkgcngtcGFyZW50KSkpKQoKCihkZWZ1biByeC1hdG9taWMtcCAociAmb3B0aW9uYWwg bGF4KQogICJSZXR1cm4gbm9uLW5pbCBpZiByZWdleHAgc3RyaW5nIFIgaXMgYXRvbWljLgpBbiBh dG9taWMgcmVnZXhwIFIgaXMgb25lIHN1Y2ggdGhhdCBhIHN1ZmZpeCBvcGVyYXRvcgphcHBlbmRl ZCB0byBSIHdpbGwgYXBwbHkgdG8gYWxsIG9mIFIuICBGb3IgZXhhbXBsZSwgXCJhXCIKXCJbYWJj XVwiIGFuZCBcIlxcKGFiXFx8YWIqY1xcKVwiIGFyZSBhdG9taWMgYW5kIFwiYWJcIiwKXCJbYWJd Y1wiLCBhbmQgXCJhYlxcfGFiKmNcIiBhcmUgbm90IGF0b21pYy4KClRoaXMgZnVuY3Rpb24gbWF5 IHJldHVybiBmYWxzZSBuZWdhdGl2ZXMsIGJ1dCBpdCB3aWxsIG5vdApyZXR1cm4gZmFsc2UgcG9z aXRpdmVzLiAgSXQgaXMgbmV2ZXJ0aGVsZXNzIHVzZWZ1bCBpbgpzaXR1YXRpb25zIHdoZXJlIGFu IGVmZmljaWVuY3kgc2hvcnRjdXQgY2FuIGJlIHRha2VuIG9ubHkgaWYgYQpyZWdleHAgaXMgYXRv bWljLiAgVGhlIGZ1bmN0aW9uIGNhbiBiZSBpbXByb3ZlZCB0byBkZXRlY3QKbW9yZSBjYXNlcyBv ZiBhdG9taWMgcmVnZXhwcy4gIFByZXNlbnRseSwgdGhpcyBmdW5jdGlvbgpkZXRlY3RzIHRoZSBm b2xsb3dpbmcgY2F0ZWdvcmllcyBvZiBhdG9taWMgcmVnZXhwOwoKICBhIGdyb3VwIG9yIHNoeSBn cm91cDogIFxcKC4uLlxcKQogIGEgY2hhcmFjdGVyIGNsYXNzOiAgICAgWy4uLl0KICBhIHNpbmds ZSBjaGFyYWN0ZXI6ICAgIGEKCk9uIHRoZSBvdGhlciBoYW5kLCBmYWxzZSBuZWdhdGl2ZXMgd2ls bCBiZSByZXR1cm5lZCBmb3IKcmVnZXhwcyB0aGF0IGFyZSBhdG9taWMgYnV0IGVuZCBpbiBvcGVy YXRvcnMsIHN1Y2ggYXMKXCJhK1wiLiAgSSB0aGluayB0aGVzZSBhcmUgcmFyZS4gIFByb2JhYmx5 IHN1Y2ggY2FzZXMgY291bGQKYmUgZGV0ZWN0ZWQgd2l0aG91dCBtdWNoIGVmZm9ydC4gIEEgZ3Vh cmFudGVlIG9mIG5vIGZhbHNlCm5lZ2F0aXZlcyB3b3VsZCByZXF1aXJlIGEgdGhlb3JldGljIHNw ZWNpZmljYXRpb24gb2YgdGhlIHNldApvZiBhbGwgYXRvbWljIHJlZ2V4cHMuIgogIChsZXQgKChs IChsZW5ndGggcikpKQogICAgKGNvbmQKICAgICAoKDw9IGwgMSkpCiAgICAgKCg9IGwgMikgKD0g KGFyZWYgciAwKSA/XFwpKQogICAgICgoPSBsIDMpIChzdHJpbmctbWF0Y2ggIlxcYFxcKD86XFxc XFtjQ3NTX11cXHxcXFtbXl5dXFxdXFwpIiByKSkKICAgICAoKG51bGwgbGF4KQogICAgICAoY29u ZAogICAgICAgKChzdHJpbmctbWF0Y2ggIlxcYFxcW14/XF0/XFwoPzpcXFs6W2Etel0rOl1cXHxb XlxdXVxcKSpcXF1cXCciIHIpKQogICAgICAgKChzdHJpbmctbWF0Y2ggIlxcYFxcXFwoXFwoPzpb XlxcXVxcfFxcXFxbXlwpXVxcKSpcXFxcKVxcJyIgcikpKSkpKSkKCgooZGVmdW4gcngtc3ludGF4 IChmb3JtKQogICJQYXJzZSBhbmQgcHJvZHVjZSBjb2RlIGZyb20gRk9STSwgd2hpY2ggaXMgYChz eW50YXggU1lNQk9MKScuIgogIChyeC1jaGVjayBmb3JtKQogIChsZXQqICgoc3ltIChjYWRyIGZv cm0pKQoJIChzeW50YXggKGFzc3Egc3ltIHJ4LXN5bnRheCkpKQogICAgKHVubGVzcyBzeW50YXgK ICAgICAgOzsgVHJ5IHNyZWdleCBjb21wYXRpYmlsaXR5LgogICAgICAobGV0ICgobmFtZSAoc3lt Ym9sLW5hbWUgc3ltKSkpCgkoaWYgKD0gMSAobGVuZ3RoIG5hbWUpKQoJICAgIChzZXRxIHN5bnRh eCAocmFzc3EgKGFyZWYgbmFtZSAwKSByeC1zeW50YXgpKSkpCiAgICAgICh1bmxlc3Mgc3ludGF4 CgkoZXJyb3IgIlVua25vd24gcnggc3ludGF4IGAlcyciIChjYWRyIGZvcm0pKSkpCiAgICAoZm9y bWF0ICJcXHMlYyIgKGNkciBzeW50YXgpKSkpCgoKKGRlZnVuIHJ4LWNoZWNrLWNhdGVnb3J5IChm b3JtKQogICJDaGVjayB0aGUgYXJndW1lbnQgRk9STSBvZiBhIGAoY2F0ZWdvcnkgRk9STSknLiIK ICAodW5sZXNzIChvciAoaW50ZWdlcnAgZm9ybSkKCSAgICAgIChjZHIgKGFzc3EgZm9ybSByeC1j YXRlZ29yaWVzKSkpCiAgICAoZXJyb3IgIlVua25vd24gY2F0ZWdvcnkgYCVzJyIgZm9ybSkpCiAg dCkKCgooZGVmdW4gcngtY2F0ZWdvcnkgKGZvcm0pCiAgIlBhcnNlIGFuZCBwcm9kdWNlIGNvZGUg ZnJvbSBGT1JNLCB3aGljaCBpcyBgKGNhdGVnb3J5IFNZTUJPTCknLiIKICAocngtY2hlY2sgZm9y bSkKICAobGV0ICgoY2hhciAoaWYgKGludGVnZXJwIChjYWRyIGZvcm0pKQoJCSAgKGNhZHIgZm9y bSkKCQkoY2RyIChhc3NxIChjYWRyIGZvcm0pIHJ4LWNhdGVnb3JpZXMpKSkpKQogICAgKGZvcm1h dCAiXFxjJWMiIGNoYXIpKSkKCgooZGVmdW4gcngtZXZhbCAoZm9ybSkKICAiUGFyc2UgYW5kIHBy b2R1Y2UgY29kZSBmcm9tIEZPUk0sIHdoaWNoIGlzIGAoZXZhbCBGT1JNKScuIgogIChyeC1jaGVj ayBmb3JtKQogIChyeC1mb3JtIChldmFsIChjYWRyIGZvcm0pKSByeC1wYXJlbnQpKQoKCihkZWZ1 biByeC1ncmVlZHkgKGZvcm0pCiAgIlBhcnNlIGFuZCBwcm9kdWNlIGNvZGUgZnJvbSBGT1JNLgpJ ZiBGT1JNIGlzICcobWluaW1hbC1tYXRjaCBGT1JNMSknLCBub24tZ3JlZWR5IHZlcnNpb25zIG9m IGAqJywKYCsnLCBhbmQgYD8nIG9wZXJhdG9ycyB3aWxsIGJlIHVzZWQgaW4gRk9STTEuICBJZiBG T1JNIGlzCicobWF4aW1hbC1tYXRjaCBGT1JNMSknLCBncmVlZHkgb3BlcmF0b3JzIHdpbGwgYmUg dXNlZC4iCiAgKHJ4LWNoZWNrIGZvcm0pCiAgKGxldCAoKHJ4LWdyZWVkeS1mbGFnIChlcSAoY2Fy IGZvcm0pICdtYXhpbWFsLW1hdGNoKSkpCiAgICAocngtZm9ybSAoY2FkciBmb3JtKSByeC1wYXJl bnQpKSkKCgooZGVmdW4gcngtcmVnZXhwIChmb3JtKQogICJQYXJzZSBhbmQgcHJvZHVjZSBjb2Rl IGZyb20gRk9STSwgd2hpY2ggaXMgYChyZWdleHAgU1RSSU5HKScuIgogIChyeC1jaGVjayBmb3Jt KQogIChyeC1ncm91cC1pZiAoY2FkciBmb3JtKSByeC1wYXJlbnQpKQoKCihkZWZ1biByeC1mb3Jt IChmb3JtICZvcHRpb25hbCByeC1wYXJlbnQpCiAgIlBhcnNlIGFuZCBwcm9kdWNlIGNvZGUgZm9y IHJlZ3VsYXIgZXhwcmVzc2lvbiBGT1JNLgpGT1JNIGlzIGEgcmVndWxhciBleHByZXNzaW9uIGlu IHNleHAgZm9ybS4KUlgtUEFSRU5UIHNob3dzIHdoaWNoIHR5cGUgb2YgZXhwcmVzc2lvbiBjYWxs cyBhbmQgY29udHJvbHMgcHV0dGluZyBvZgpzaHkgZ3JvdXBzIGFyb3VuZCB0aGUgcmVzdWx0IGFu ZCBzb21lIG1vcmUgaW4gb3RoZXIgZnVuY3Rpb25zLiIKICAoaWYgKHN0cmluZ3AgZm9ybSkKICAg ICAgKHJ4LWdyb3VwLWlmIChyZWdleHAtcXVvdGUgZm9ybSkKCQkgICAoaWYgKGFuZCAoZXEgcngt cGFyZW50ICcqKSAoPCAxIChsZW5ndGggZm9ybSkpKQoJCSAgICAgICByeC1wYXJlbnQpKQogICAg KGNvbmQgKChpbnRlZ2VycCBmb3JtKQoJICAgKHJlZ2V4cC1xdW90ZSAoY2hhci10by1zdHJpbmcg Zm9ybSkpKQoJICAoKHN5bWJvbHAgZm9ybSkKCSAgIChsZXQgKChpbmZvIChyeC1pbmZvIGZvcm0p KSkKCSAgICAgKGNvbmQgKChzdHJpbmdwIGluZm8pCgkJICAgIGluZm8pCgkJICAgKChudWxsIGlu Zm8pCgkJICAgIChlcnJvciAiVW5rbm93biByeCBmb3JtIGAlcyciIGZvcm0pKQoJCSAgICh0CgkJ ICAgIChmdW5jYWxsIChudGggMCBpbmZvKSBmb3JtKSkpKSkKCSAgKChjb25zcCBmb3JtKQoJICAg KGxldCAoKGluZm8gKHJ4LWluZm8gKGNhciBmb3JtKSkpKQoJICAgICAodW5sZXNzIChjb25zcCBp bmZvKQoJICAgICAgIChlcnJvciAiVW5rbm93biByeCBmb3JtIGAlcyciIChjYXIgZm9ybSkpKQoJ ICAgICAoZnVuY2FsbCAobnRoIDAgaW5mbykgZm9ybSkpKQoJICAodAoJICAgKGVycm9yICJyeCBz eW50YXggZXJyb3IgYXQgYCVzJyIgZm9ybSkpKSkpCgoKOzs7IyMjYXV0b2xvYWQKKGRlZnVuIHJ4 LXRvLXN0cmluZyAoZm9ybSAmb3B0aW9uYWwgbm8tZ3JvdXApCiAgIlBhcnNlIGFuZCBwcm9kdWNl IGNvZGUgZm9yIHJlZ3VsYXIgZXhwcmVzc2lvbiBGT1JNLgpGT1JNIGlzIGEgcmVndWxhciBleHBy ZXNzaW9uIGluIHNleHAgZm9ybS4KTk8tR1JPVVAgbm9uLW5pbCBtZWFucyBkb24ndCBwdXQgc2h5 IGdyb3VwcyBhcm91bmQgdGhlIHJlc3VsdC4iCiAgKHJ4LWdyb3VwLWlmIChyeC1mb3JtIGZvcm0p IChudWxsIG5vLWdyb3VwKSkpCgoKOzs7IyMjYXV0b2xvYWQKKGRlZm1hY3JvIHJ4ICgmcmVzdCBy ZWdleHBzKQogICJUcmFuc2xhdGUgcmVndWxhciBleHByZXNzaW9ucyBSRUdFWFBTIGluIHNleHAg Zm9ybSB0byBhIHJlZ2V4cCBzdHJpbmcuClJFR0VYUFMgaXMgYSBub24tZW1wdHkgc2VxdWVuY2Ug b2YgZm9ybXMgb2YgdGhlIHNvcnQgbGlzdGVkIGJlbG93LgoKTm90ZSB0aGF0IGByeCcgaXMgYSBM aXNwIG1hY3JvOyB3aGVuIHVzZWQgaW4gYSBMaXNwIHByb2dyYW0gYmVpbmcKIGNvbXBpbGVkLCB0 aGUgdHJhbnNsYXRpb24gaXMgcGVyZm9ybWVkIGJ5IHRoZSBjb21waWxlci4KU2VlIGByeC10by1z dHJpbmcnIGZvciBob3cgdG8gZG8gc3VjaCBhIHRyYW5zbGF0aW9uIGF0IHJ1bi10aW1lLgoKVGhl IGZvbGxvd2luZyBhcmUgdmFsaWQgc3ViZm9ybXMgb2YgcmVndWxhciBleHByZXNzaW9ucyBpbiBz ZXhwCm5vdGF0aW9uLgoKU1RSSU5HCiAgICAgbWF0Y2hlcyBzdHJpbmcgU1RSSU5HIGxpdGVyYWxs eS4KCkNIQVIKICAgICBtYXRjaGVzIGNoYXJhY3RlciBDSEFSIGxpdGVyYWxseS4KCmBub3QtbmV3 bGluZScsIGBub25sJwogICAgIG1hdGNoZXMgYW55IGNoYXJhY3RlciBleGNlcHQgYSBuZXdsaW5l LgoKYGFueXRoaW5nJwogICAgIG1hdGNoZXMgYW55IGNoYXJhY3RlcgoKYChhbnkgU0VUIC4uLikn CmAoaW4gU0VUIC4uLiknCmAoY2hhciBTRVQgLi4uKScKICAgICBtYXRjaGVzIGFueSBjaGFyYWN0 ZXIgaW4gU0VUIC4uLi4gIFNFVCBtYXkgYmUgYSBjaGFyYWN0ZXIgb3Igc3RyaW5nLgogICAgIFJh bmdlcyBvZiBjaGFyYWN0ZXJzIGNhbiBiZSBzcGVjaWZpZWQgYXMgYEEtWicgaW4gc3RyaW5ncy4K ICAgICBSYW5nZXMgbWF5IGFsc28gYmUgc3BlY2lmaWVkIGFzIGNvbnNlcyBsaWtlIGAoP0EgLiA/ WiknLgoKICAgICBTRVQgbWF5IGFsc28gYmUgdGhlIG5hbWUgb2YgYSBjaGFyYWN0ZXIgY2xhc3M6 IGBkaWdpdCcsCiAgICAgYGNvbnRyb2wnLCBgaGV4LWRpZ2l0JywgYGJsYW5rJywgYGdyYXBoJywg YHByaW50JywgYGFsbnVtJywKICAgICBgYWxwaGEnLCBgYXNjaWknLCBgbm9uYXNjaWknLCBgbG93 ZXInLCBgcHVuY3QnLCBgc3BhY2UnLCBgdXBwZXInLAogICAgIGB3b3JkJywgb3Igb25lIG9mIHRo ZWlyIHN5bm9ueW1zLgoKYChub3QgKGFueSBTRVQgLi4uKSknCiAgICAgbWF0Y2hlcyBhbnkgY2hh cmFjdGVyIG5vdCBpbiBTRVQgLi4uCgpgbGluZS1zdGFydCcsIGBib2wnCiAgICAgbWF0Y2hlcyB0 aGUgZW1wdHkgc3RyaW5nLCBidXQgb25seSBhdCB0aGUgYmVnaW5uaW5nIG9mIGEgbGluZQogICAg IGluIHRoZSB0ZXh0IGJlaW5nIG1hdGNoZWQKCmBsaW5lLWVuZCcsIGBlb2wnCiAgICAgaXMgc2lt aWxhciB0byBgbGluZS1zdGFydCcgYnV0IG1hdGNoZXMgb25seSBhdCB0aGUgZW5kIG9mIGEgbGlu ZQoKYHN0cmluZy1zdGFydCcsIGBib3MnLCBgYm90JwogICAgIG1hdGNoZXMgdGhlIGVtcHR5IHN0 cmluZywgYnV0IG9ubHkgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUKICAgICBzdHJpbmcgYmVpbmcg bWF0Y2hlZCBhZ2FpbnN0LgoKYHN0cmluZy1lbmQnLCBgZW9zJywgYGVvdCcKICAgICBtYXRjaGVz IHRoZSBlbXB0eSBzdHJpbmcsIGJ1dCBvbmx5IGF0IHRoZSBlbmQgb2YgdGhlCiAgICAgc3RyaW5n IGJlaW5nIG1hdGNoZWQgYWdhaW5zdC4KCmBidWZmZXItc3RhcnQnCiAgICAgbWF0Y2hlcyB0aGUg ZW1wdHkgc3RyaW5nLCBidXQgb25seSBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZQogICAgIGJ1ZmZl ciBiZWluZyBtYXRjaGVkIGFnYWluc3QuICBBY3R1YWxseSBlcXVpdmFsZW50IHRvIGBzdHJpbmct c3RhcnQnLgoKYGJ1ZmZlci1lbmQnCiAgICAgbWF0Y2hlcyB0aGUgZW1wdHkgc3RyaW5nLCBidXQg b25seSBhdCB0aGUgZW5kIG9mIHRoZQogICAgIGJ1ZmZlciBiZWluZyBtYXRjaGVkIGFnYWluc3Qu ICBBY3R1YWxseSBlcXVpdmFsZW50IHRvIGBzdHJpbmctZW5kJy4KCmBwb2ludCcKICAgICBtYXRj aGVzIHRoZSBlbXB0eSBzdHJpbmcsIGJ1dCBvbmx5IGF0IHBvaW50LgoKYHdvcmQtc3RhcnQnLCBg Ym93JwogICAgIG1hdGNoZXMgdGhlIGVtcHR5IHN0cmluZywgYnV0IG9ubHkgYXQgdGhlIGJlZ2lu bmluZyBvZiBhIHdvcmQuCgpgd29yZC1lbmQnLCBgZW93JwogICAgIG1hdGNoZXMgdGhlIGVtcHR5 IHN0cmluZywgYnV0IG9ubHkgYXQgdGhlIGVuZCBvZiBhIHdvcmQuCgpgd29yZC1ib3VuZGFyeScK ICAgICBtYXRjaGVzIHRoZSBlbXB0eSBzdHJpbmcsIGJ1dCBvbmx5IGF0IHRoZSBiZWdpbm5pbmcg b3IgZW5kIG9mIGEKICAgICB3b3JkLgoKYChub3Qgd29yZC1ib3VuZGFyeSknCmBub3Qtd29yZC1i b3VuZGFyeScKICAgICBtYXRjaGVzIHRoZSBlbXB0eSBzdHJpbmcsIGJ1dCBub3QgYXQgdGhlIGJl Z2lubmluZyBvciBlbmQgb2YgYQogICAgIHdvcmQuCgpgc3ltYm9sLXN0YXJ0JwogICAgIG1hdGNo ZXMgdGhlIGVtcHR5IHN0cmluZywgYnV0IG9ubHkgYXQgdGhlIGJlZ2lubmluZyBvZiBhIHN5bWJv bC4KCmBzeW1ib2wtZW5kJwogICAgIG1hdGNoZXMgdGhlIGVtcHR5IHN0cmluZywgYnV0IG9ubHkg YXQgdGhlIGVuZCBvZiBhIHN5bWJvbC4KCmBkaWdpdCcsIGBudW1lcmljJywgYG51bScKICAgICBt YXRjaGVzIDAgdGhyb3VnaCA5LgoKYGNvbnRyb2wnLCBgY250cmwnCiAgICAgbWF0Y2hlcyBBU0NJ SSBjb250cm9sIGNoYXJhY3RlcnMuCgpgaGV4LWRpZ2l0JywgYGhleCcsIGB4ZGlnaXQnCiAgICAg bWF0Y2hlcyAwIHRocm91Z2ggOSwgYSB0aHJvdWdoIGYgYW5kIEEgdGhyb3VnaCBGLgoKYGJsYW5r JwogICAgIG1hdGNoZXMgc3BhY2UgYW5kIHRhYiBvbmx5LgoKYGdyYXBoaWMnLCBgZ3JhcGgnCiAg ICAgbWF0Y2hlcyBncmFwaGljIGNoYXJhY3RlcnMtLWV2ZXJ5dGhpbmcgZXhjZXB0IEFTQ0lJIGNv bnRyb2wgY2hhcnMsCiAgICAgc3BhY2UsIGFuZCBERUwuCgpgcHJpbnRpbmcnLCBgcHJpbnQnCiAg ICAgbWF0Y2hlcyBwcmludGluZyBjaGFyYWN0ZXJzLS1ldmVyeXRoaW5nIGV4Y2VwdCBBU0NJSSBj b250cm9sIGNoYXJzCiAgICAgYW5kIERFTC4KCmBhbHBoYW51bWVyaWMnLCBgYWxudW0nCiAgICAg bWF0Y2hlcyBsZXR0ZXJzIGFuZCBkaWdpdHMuICAoQnV0IGF0IHByZXNlbnQsIGZvciBtdWx0aWJ5 dGUgY2hhcmFjdGVycywKICAgICBpdCBtYXRjaGVzIGFueXRoaW5nIHRoYXQgaGFzIHdvcmQgc3lu dGF4LikKCmBsZXR0ZXInLCBgYWxwaGFiZXRpYycsIGBhbHBoYScKICAgICBtYXRjaGVzIGxldHRl cnMuICAoQnV0IGF0IHByZXNlbnQsIGZvciBtdWx0aWJ5dGUgY2hhcmFjdGVycywKICAgICBpdCBt YXRjaGVzIGFueXRoaW5nIHRoYXQgaGFzIHdvcmQgc3ludGF4LikKCmBhc2NpaScKICAgICBtYXRj aGVzIEFTQ0lJICh1bmlieXRlKSBjaGFyYWN0ZXJzLgoKYG5vbmFzY2lpJwogICAgIG1hdGNoZXMg bm9uLUFTQ0lJIChtdWx0aWJ5dGUpIGNoYXJhY3RlcnMuCgpgbG93ZXInLCBgbG93ZXItY2FzZScK ICAgICBtYXRjaGVzIGFueXRoaW5nIGxvd2VyLWNhc2UuCgpgdXBwZXInLCBgdXBwZXItY2FzZScK ICAgICBtYXRjaGVzIGFueXRoaW5nIHVwcGVyLWNhc2UuCgpgcHVuY3R1YXRpb24nLCBgcHVuY3Qn CiAgICAgbWF0Y2hlcyBwdW5jdHVhdGlvbi4gIChCdXQgYXQgcHJlc2VudCwgZm9yIG11bHRpYnl0 ZSBjaGFyYWN0ZXJzLAogICAgIGl0IG1hdGNoZXMgYW55dGhpbmcgdGhhdCBoYXMgbm9uLXdvcmQg c3ludGF4LikKCmBzcGFjZScsIGB3aGl0ZXNwYWNlJywgYHdoaXRlJwogICAgIG1hdGNoZXMgYW55 dGhpbmcgdGhhdCBoYXMgd2hpdGVzcGFjZSBzeW50YXguCgpgd29yZCcsIGB3b3JkY2hhcicKICAg ICBtYXRjaGVzIGFueXRoaW5nIHRoYXQgaGFzIHdvcmQgc3ludGF4LgoKYG5vdC13b3JkY2hhcicK ICAgICBtYXRjaGVzIGFueXRoaW5nIHRoYXQgaGFzIG5vbi13b3JkIHN5bnRheC4KCmAoc3ludGF4 IFNZTlRBWCknCiAgICAgbWF0Y2hlcyBhIGNoYXJhY3RlciB3aXRoIHN5bnRheCBTWU5UQVguICBT WU5UQVggbXVzdCBiZSBvbmUKICAgICBvZiB0aGUgZm9sbG93aW5nIHN5bWJvbHMsIG9yIGEgc3lt Ym9sIGNvcnJlc3BvbmRpbmcgdG8gdGhlIHN5bnRheAogICAgIGNoYXJhY3RlciwgZS5nLiBgXFwu JyBmb3IgYFxccy4nLgoKICAgICBgd2hpdGVzcGFjZScJCShcXHMtIGluIHN0cmluZyBub3RhdGlv bikKICAgICBgcHVuY3R1YXRpb24nCQkoXFxzLikKICAgICBgd29yZCcJCQkoXFxzdykKICAgICBg c3ltYm9sJwkJCShcXHNfKQogICAgIGBvcGVuLXBhcmVudGhlc2lzJwkJKFxccygpCiAgICAgYGNs b3NlLXBhcmVudGhlc2lzJwkoXFxzKSkKICAgICBgZXhwcmVzc2lvbi1wcmVmaXgnCShcXHMnKQog ICAgIGBzdHJpbmctcXVvdGUnCQkoXFxzXCIpCiAgICAgYHBhaXJlZC1kZWxpbWl0ZXInCQkoXFxz JCkKICAgICBgZXNjYXBlJwkJCShcXHNcXCkKICAgICBgY2hhcmFjdGVyLXF1b3RlJwkJKFxccy8p CiAgICAgYGNvbW1lbnQtc3RhcnQnCQkoXFxzPCkKICAgICBgY29tbWVudC1lbmQnCQkoXFxzPikK ICAgICBgc3RyaW5nLWRlbGltaXRlcicJCShcXHN8KQogICAgIGBjb21tZW50LWRlbGltaXRlcicJ KFxccyEpCgpgKG5vdCAoc3ludGF4IFNZTlRBWCkpJwogICAgIG1hdGNoZXMgYSBjaGFyYWN0ZXIg dGhhdCBkb2Vzbid0IGhhdmUgc3ludGF4IFNZTlRBWC4KCmAoY2F0ZWdvcnkgQ0FURUdPUlkpJwog ICAgIG1hdGNoZXMgYSBjaGFyYWN0ZXIgd2l0aCBjYXRlZ29yeSBDQVRFR09SWS4gIENBVEVHT1JZ IG11c3QgYmUKICAgICBlaXRoZXIgYSBjaGFyYWN0ZXIgdG8gdXNlIGZvciBDLCBvciBvbmUgb2Yg dGhlIGZvbGxvd2luZyBzeW1ib2xzLgoKICAgICBgY29uc29uYW50JwkJCShcXGMwIGluIHN0cmlu ZyBub3RhdGlvbikKICAgICBgYmFzZS12b3dlbCcJCQkoXFxjMSkKICAgICBgdXBwZXItZGlhY3Jp dGljYWwtbWFyaycJCShcXGMyKQogICAgIGBsb3dlci1kaWFjcml0aWNhbC1tYXJrJwkJKFxcYzMp CiAgICAgYHRvbmUtbWFyaycJCSAgICAgICAgKFxcYzQpCiAgICAgYHN5bWJvbCcJCQkgICAgICAg IChcXGM1KQogICAgIGBkaWdpdCcJCQkgICAgICAgIChcXGM2KQogICAgIGB2b3dlbC1tb2RpZnlp bmctZGlhY3JpdGljYWwtbWFyaycJKFxcYzcpCiAgICAgYHZvd2VsLXNpZ24nCQkJKFxcYzgpCiAg ICAgYHNlbWl2b3dlbC1sb3dlcicJCQkoXFxjOSkKICAgICBgbm90LWF0LWVuZC1vZi1saW5lJwkJ KFxcYzwpCiAgICAgYG5vdC1hdC1iZWdpbm5pbmctb2YtbGluZScJCShcXGM+KQogICAgIGBhbHBo YS1udW1lcmljLXR3by1ieXRlJwkJKFxcY0EpCiAgICAgYGNoaW5zZS10d28tYnl0ZScJCQkoXFxj QykKICAgICBgZ3JlZWstdHdvLWJ5dGUnCQkJKFxcY0cpCiAgICAgYGphcGFuZXNlLWhpcmFnYW5h LXR3by1ieXRlJwkoXFxjSCkKICAgICBgaW5kaWFuLXRvdy1ieXRlJwkJCShcXGNJKQogICAgIGBq YXBhbmVzZS1rYXRha2FuYS10d28tYnl0ZScJKFxcY0spCiAgICAgYGtvcmVhbi1oYW5ndWwtdHdv LWJ5dGUnCQkoXFxjTikKICAgICBgY3lyaWxsaWMtdHdvLWJ5dGUnCQkoXFxjWSkKICAgICBgY29t YmluaW5nLWRpYWNyaXRpYycJCShcXGNeKQogICAgIGBhc2NpaScJCQkJKFxcY2EpCiAgICAgYGFy YWJpYycJCQkJKFxcY2IpCiAgICAgYGNoaW5lc2UnCQkJCShcXGNjKQogICAgIGBldGhpb3BpYycJ CQkJKFxcY2UpCiAgICAgYGdyZWVrJwkJCQkoXFxjZykKICAgICBga29yZWFuJwkJCQkoXFxjaCkK ICAgICBgaW5kaWFuJwkJCQkoXFxjaSkKICAgICBgamFwYW5lc2UnCQkJCShcXGNqKQogICAgIGBq YXBhbmVzZS1rYXRha2FuYScJCShcXGNrKQogICAgIGBsYXRpbicJCQkJKFxcY2wpCiAgICAgYGxh bycJCQkJKFxcY28pCiAgICAgYHRpYmV0YW4nCQkJCShcXGNxKQogICAgIGBqYXBhbmVzZS1yb21h bicJCQkoXFxjcikKICAgICBgdGhhaScJCQkJKFxcY3QpCiAgICAgYHZpZXRuYW1lc2UnCQkJKFxc Y3YpCiAgICAgYGhlYnJldycJCQkJKFxcY3cpCiAgICAgYGN5cmlsbGljJwkJCQkoXFxjeSkKICAg ICBgY2FuLWJyZWFrJwkJCShcXGN8KQoKYChub3QgKGNhdGVnb3J5IENBVEVHT1JZKSknCiAgICAg bWF0Y2hlcyBhIGNoYXJhY3RlciB0aGF0IGRvZXNuJ3QgaGF2ZSBjYXRlZ29yeSBDQVRFR09SWS4K CmAoYW5kIFNFWFAxIFNFWFAyIC4uLiknCmAoOiBTRVhQMSBTRVhQMiAuLi4pJwpgKHNlcSBTRVhQ MSBTRVhQMiAuLi4pJwpgKHNlcXVlbmNlIFNFWFAxIFNFWFAyIC4uLiknCiAgICAgbWF0Y2hlcyB3 aGF0IFNFWFAxIG1hdGNoZXMsIGZvbGxvd2VkIGJ5IHdoYXQgU0VYUDIgbWF0Y2hlcywgZXRjLgoK YChzdWJtYXRjaCBTRVhQMSBTRVhQMiAuLi4pJwpgKGdyb3VwIFNFWFAxIFNFWFAyIC4uLiknCiAg ICAgbGlrZSBgYW5kJywgYnV0IG1ha2VzIHRoZSBtYXRjaCBhY2Nlc3NpYmxlIHdpdGggYG1hdGNo LWVuZCcsCiAgICAgYG1hdGNoLWJlZ2lubmluZycsIGFuZCBgbWF0Y2gtc3RyaW5nJy4KCmAoZ3Jv dXAgU0VYUDEgU0VYUDIgLi4uKScKICAgICBhbm90aGVyIG5hbWUgZm9yIGBzdWJtYXRjaCcuCgpg KG9yIFNFWFAxIFNFWFAyIC4uLiknCmAofCBTRVhQMSBTRVhQMiAuLi4pJwogICAgIG1hdGNoZXMg YW55dGhpbmcgdGhhdCBtYXRjaGVzIFNFWFAxIG9yIFNFWFAyLCBldGMuICBJZiBhbGwKICAgICBh cmdzIGFyZSBzdHJpbmdzLCB1c2UgYHJlZ2V4cC1vcHQnIHRvIG9wdGltaXplIHRoZSByZXN1bHRp bmcKICAgICByZWd1bGFyIGV4cHJlc3Npb24uCgpgKG1pbmltYWwtbWF0Y2ggU0VYUCknCiAgICAg cHJvZHVjZSBhIG5vbi1ncmVlZHkgcmVnZXhwIGZvciBTRVhQLiAgTm9ybWFsbHksIHJlZ2V4cHMg bWF0Y2hpbmcKICAgICB6ZXJvIG9yIG1vcmUgb2NjdXJyZW5jZXMgb2Ygc29tZXRoaW5nIGFyZSBc ImdyZWVkeVwiIGluIHRoYXQgdGhleQogICAgIG1hdGNoIGFzIG11Y2ggYXMgdGhleSBjYW4sIGFz IGxvbmcgYXMgdGhlIG92ZXJhbGwgcmVnZXhwIGNhbgogICAgIHN0aWxsIG1hdGNoLiAgQSBub24t Z3JlZWR5IHJlZ2V4cCBtYXRjaGVzIGFzIGxpdHRsZSBhcyBwb3NzaWJsZS4KCmAobWF4aW1hbC1t YXRjaCBTRVhQKScKICAgICBwcm9kdWNlIGEgZ3JlZWR5IHJlZ2V4cCBmb3IgU0VYUC4gIFRoaXMg aXMgdGhlIGRlZmF1bHQuCgpCZWxvdywgYFNFWFAgLi4uJyByZXByZXNlbnRzIGEgc2VxdWVuY2Ug b2YgcmVnZXhwIGZvcm1zLCB0cmVhdGVkIGFzIGlmCmVuY2xvc2VkIGluIGAoYW5kIC4uLiknLgoK YCh6ZXJvLW9yLW1vcmUgU0VYUCAuLi4pJwpgKDArIFNFWFAgLi4uKScKICAgICBtYXRjaGVzIHpl cm8gb3IgbW9yZSBvY2N1cnJlbmNlcyBvZiB3aGF0IFNFWFAgLi4uIG1hdGNoZXMuCgpgKCogU0VY UCAuLi4pJwogICAgIGxpa2UgYHplcm8tb3ItbW9yZScsIGJ1dCBhbHdheXMgcHJvZHVjZXMgYSBn cmVlZHkgcmVnZXhwLCBpbmRlcGVuZGVudAogICAgIG9mIGByeC1ncmVlZHktZmxhZycuCgpgKCo/ IFNFWFAgLi4uKScKICAgICBsaWtlIGB6ZXJvLW9yLW1vcmUnLCBidXQgYWx3YXlzIHByb2R1Y2Vz IGEgbm9uLWdyZWVkeSByZWdleHAsCiAgICAgaW5kZXBlbmRlbnQgb2YgYHJ4LWdyZWVkeS1mbGFn Jy4KCmAob25lLW9yLW1vcmUgU0VYUCAuLi4pJwpgKDErIFNFWFAgLi4uKScKICAgICBtYXRjaGVz IG9uZSBvciBtb3JlIG9jY3VycmVuY2VzIG9mIFNFWFAgLi4uCgpgKCsgU0VYUCAuLi4pJwogICAg IGxpa2UgYG9uZS1vci1tb3JlJywgYnV0IGFsd2F5cyBwcm9kdWNlcyBhIGdyZWVkeSByZWdleHAu CgpgKCs/IFNFWFAgLi4uKScKICAgICBsaWtlIGBvbmUtb3ItbW9yZScsIGJ1dCBhbHdheXMgcHJv ZHVjZXMgYSBub24tZ3JlZWR5IHJlZ2V4cC4KCmAoemVyby1vci1vbmUgU0VYUCAuLi4pJwpgKG9w dGlvbmFsIFNFWFAgLi4uKScKYChvcHQgU0VYUCAuLi4pJwogICAgIG1hdGNoZXMgemVybyBvciBv bmUgb2NjdXJyZW5jZXMgb2YgQS4KCmAoPyBTRVhQIC4uLiknCiAgICAgbGlrZSBgemVyby1vci1v bmUnLCBidXQgYWx3YXlzIHByb2R1Y2VzIGEgZ3JlZWR5IHJlZ2V4cC4KCmAoPz8gU0VYUCAuLi4p JwogICAgIGxpa2UgYHplcm8tb3Itb25lJywgYnV0IGFsd2F5cyBwcm9kdWNlcyBhIG5vbi1ncmVl ZHkgcmVnZXhwLgoKYChyZXBlYXQgTiBTRVhQKScKYCg9IE4gU0VYUCAuLi4pJwogICAgIG1hdGNo ZXMgTiBvY2N1cnJlbmNlcy4KCmAoPj0gTiBTRVhQIC4uLiknCiAgICAgbWF0Y2hlcyBOIG9yIG1v cmUgb2NjdXJyZW5jZXMuCgpgKHJlcGVhdCBOIE0gU0VYUCknCmAoKiogTiBNIFNFWFAgLi4uKScK ICAgICBtYXRjaGVzIE4gdG8gTSBvY2N1cnJlbmNlcy4KCmAoYmFja3JlZiBOKScKICAgICBtYXRj aGVzIHdoYXQgd2FzIG1hdGNoZWQgcHJldmlvdXNseSBieSBzdWJtYXRjaCBOLgoKYChldmFsIEZP Uk0pJwogICAgIGV2YWx1YXRlIEZPUk0gYW5kIGluc2VydCByZXN1bHQuICBJZiByZXN1bHQgaXMg YSBzdHJpbmcsCiAgICAgYHJlZ2V4cC1xdW90ZScgaXQuCgpgKHJlZ2V4cCBSRUdFWFApJwogICAg IGluY2x1ZGUgUkVHRVhQIGluIHN0cmluZyBub3RhdGlvbiBpbiB0aGUgcmVzdWx0LiIKICAoY29u ZCAoKG51bGwgcmVnZXhwcykKCSAoZXJyb3IgIk5vIHJlZ2V4cCIpKQoJKChjZHIgcmVnZXhwcykK CSAocngtdG8tc3RyaW5nIGAoYW5kICxAcmVnZXhwcykgdCkpCgkodAoJIChyeC10by1zdHJpbmcg KGNhciByZWdleHBzKSB0KSkpKQoMCjs7IDs7IHNyZWdleC5lbCByZXBsYWNlbWVudAoKOzsgOzs7 IyMjYXV0b2xvYWQgKHByb3ZpZGUgJ3NyZWdleCkKOzsgOzs7IyMjYXV0b2xvYWQgKGF1dG9sb2Fk ICdzcmVnZXggInJ4IikKOzsgKGRlZmFsaWFzICdzcmVnZXggJ3J4LXRvLXN0cmluZykKOzsgOzs7 IyMjYXV0b2xvYWQgKGF1dG9sb2FkICdzcmVnZXhxICJyeCIgbmlsIG5pbCAnbWFjcm8pCjs7IChk ZWZhbGlhcyAnc3JlZ2V4cSAncngpCgwKKHByb3ZpZGUgJ3J4KQoKOzsgYXJjaC10YWc6IDEyZDAx YTYzLTAwMDgtNDJiYi1hYjhjLTFjN2Q2M2JlMzcwYgo7OzsgcnguZWwgZW5kcyBoZXJlCg== --0016e68ea07e961d5f04889c28d5--