From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.org!not-for-mail From: rsharman@pobox.com Newsgroups: gmane.emacs.devel Subject: Re: highlight-changes-mode Date: Sun, 26 Nov 2006 20:57:15 -0500 Message-ID: <17770.17915.319182.723314@cube.homenetwork> References: <17721.60660.980363.609046@kahikatea.snap.net.nz> <17725.23383.490888.442550@cube.homenetwork> NNTP-Posting-Host: main.gmane.org Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="tv4TbZFz49" Content-Transfer-Encoding: 7bit X-Trace: sea.gmane.org 1164608400 13621 80.91.229.2 (27 Nov 2006 06:20:00 GMT) X-Complaints-To: usenet@sea.gmane.org NNTP-Posting-Date: Mon, 27 Nov 2006 06:20:00 +0000 (UTC) Cc: nickrob@snap.net.nz, rsharman@pobox.com, emacs-devel@gnu.org Original-X-From: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Mon Nov 27 07:19:59 2006 Return-path: Envelope-to: ged-emacs-devel@m.gmane.org Original-Received: from lists.gnu.org ([199.232.76.165]) by ciao.gmane.org with esmtp (Exim 4.43) id 1GoZqJ-0002US-M0 for ged-emacs-devel@m.gmane.org; Mon, 27 Nov 2006 07:19:58 +0100 Original-Received: from localhost ([127.0.0.1] helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1GoZqH-0002mz-QR for ged-emacs-devel@m.gmane.org; Mon, 27 Nov 2006 01:19:49 -0500 Original-Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1GoVkR-00048g-I4 for emacs-devel@gnu.org; Sun, 26 Nov 2006 20:57:31 -0500 Original-Received: from exim by lists.gnu.org with spam-scanned (Exim 4.43) id 1GoVkN-00044v-KX for emacs-devel@gnu.org; Sun, 26 Nov 2006 20:57:30 -0500 Original-Received: from [199.232.76.173] (helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1GoVkL-00043n-R7 for emacs-devel@gnu.org; Sun, 26 Nov 2006 20:57:26 -0500 Original-Received: from [209.217.78.162] (helo=mx2-3.spamtrap.magma.ca) by monty-python.gnu.org with esmtps (TLS-1.0:DHE_RSA_AES_256_CBC_SHA:32) (Exim 4.52) id 1GoVkI-0008WJ-M6; Sun, 26 Nov 2006 20:57:23 -0500 Original-Received: from mail1.magma.ca (mail1.internal.magma.ca [10.0.10.11]) by mx2-3.spamtrap.magma.ca (8.13.1/8.13.1) with ESMTP id kAR1vHaB025438; Sun, 26 Nov 2006 20:57:17 -0500 Original-Received: from cube.homenetwork (ottawa-hs-209-217-93-51.d-ip.magma.ca [209.217.93.51]) by mail1.magma.ca (Magma's Mail Server) with ESMTP id kAR1vGtR002828; Sun, 26 Nov 2006 20:57:17 -0500 Original-Received: by cube.homenetwork (Postfix, from userid 1000) id 6B74290DAD; Sun, 26 Nov 2006 20:57:15 -0500 (EST) Original-To: rms@gnu.org In-Reply-To: X-Mailer: VM 7.19 under Emacs 21.4.1 X-magma-MailScanner-Information: Magma Mailscanner Service X-magma-MailScanner: Clean X-Mailman-Approved-At: Mon, 27 Nov 2006 01:19:21 -0500 X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Original-Sender: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Errors-To: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Xref: news.gmane.org gmane.emacs.devel:62834 Archived-At: --tv4TbZFz49 Content-Type: text/plain; charset=us-ascii Content-Description: message body text Content-Transfer-Encoding: 7bit Richard Stallman writes: > I'm sure there's no good reason that it has to work the way it does. > I think it just "seemed like a good idea at the time", but as you say > it isn't consistent with other modes. > > I can take a look into it in a couple of days. > > That would be appreciated; thanks in advance. I have made the changes so that command highlight-changes-mode simply toggles the mode on and off, and so have introduced a new command highlight-changes-toggle-visibility to toggle between what was previously called active and passive modes. At first I wasn't very happy with the changes, because now toggling the main highlight changes mode loses information [the changes]. However, I now think it does seem a reasonable way of doing things. A side effect of the new highlight-changes-toggle-visibility command is that it enables highlight changes mode. I was going to correct this "bug" by making it only operate if the mode was active, but then realized that the current behaviour is better. People that wanted the old method of one function to turn it on and toggle between active and passive can basically just use the new command. Attached is the new version; please let me know what you think. As well as the above change and some minor cleanup is a new command highlight-compare-buffers that I think is occasionally useful. --tv4TbZFz49 Content-Type: application/octet-stream Content-Description: hilit-chg.el Content-Disposition: attachment; filename="hilit-chg.el" Content-Transfer-Encoding: base64 Ozs7IGhpbGl0LWNoZy5lbCAtLS0gbWlub3IgbW9kZSBkaXNwbGF5aW5nIGJ1ZmZlciBjaGFuZ2Vz IHdpdGggc3BlY2lhbCBmYWNlCgo7OyBDb3B5cmlnaHQgKEMpIDE5OTgsIDIwMDAsIDIwMDYgRnJl ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCjs7IEF1dGhvcjogUmljaGFyZCBTaGFybWFuIDxy c2hhcm1hbkBwb2JveC5jb20+Cjs7IEtleXdvcmRzOiBmYWNlcwoKOzsgVGhpcyBmaWxlIGlzIHBh cnQgb2YgR05VIEVtYWNzLgoKOzsgR05VIEVtYWNzIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g cmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKOzsgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo ZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKOzsgdGhlIEZyZWUg U29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9u KQo7OyBhbnkgbGF0ZXIgdmVyc2lvbi4KCjs7IEdOVSBFbWFjcyBpcyBkaXN0cmlidXRlZCBpbiB0 aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAo7OyBidXQgV0lUSE9VVCBBTlkgV0FSUkFO VFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgo7OyBNRVJDSEFOVEFCSUxJ VFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCjs7IEdOVSBH ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCgo7OyBZb3Ugc2hvdWxkIGhh dmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQo7OyBh bG9uZyB3aXRoIEdOVSBFbWFjczsgc2VlIHRoZSBmaWxlIENPUFlJTkcuICBJZiBub3QsIHdyaXRl IHRvIHRoZQo7OyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFj ZSAtIFN1aXRlIDMzMCwKOzsgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCgo7OzsgQ29tbWVu dGFyeToKCjs7IEEgbWlub3IgbW9kZTogIkhpZ2hsaWdodCBDaGFuZ2VzIG1vZGUiLgoKOzsgV2hl biBIaWdobGlnaHQgQ2hhbmdlcyBtb2RlIGlzIGVuYWJsZWQgY2hhbmdlcyB0byB0aGUgYnVmZmVy IGFyZQo7OyByZWNvcmRlZCB3aXRoIGEgdGV4dCBwcm9wZXJ0eS4gIE5vcm1hbGx5IHRoZXNlIHJh bmdlcyBvZiB0ZXh0IGFyZQo7OyBkaXNwbGF5ZWQgaW4gYSBkaXN0aW5jdGl2ZSBmYWNlLiAgSG93 ZXZlciwgc29tZXRpbWVzIGl0IGlzCjs7IGRlc2lyYWJsZSB0byB0ZW1wb3JhcmlseSBub3Qgc2Vl IHRoZXNlIGNoYW5nZXMuICBSYXRoZXIgdGhhbgo7OyBkaXNhYmxpbmcgSGlnaGxpZ2h0IENoYW5n ZXMgbW9kZSAod2hpY2ggcmVtb3ZlcyB0aGUgdGV4dCBwcm9wZXJ0eSkKOzsgdGhlIGNvbW1hbmQg aGlnaGxpZ2h0LWNoYW5nZXMtdG9nZ2xlLXZpc2liaWxpdHkgdG9nZ2xlcyB0aGUgdXNlIG9mCjs7 IGRpc3RpbmN0aXZlIGZhY2UgZm9yIHRoZSBjaGFuZ2VkIHRleHQgcmFuZ2VzLgoKOzsgVHdvIGZh Y2VzIGFyZSBzdXBwb3J0ZWQ6IG9uZSBmb3IgY2hhbmdlZCBvciBpbnNlcnRlZCB0ZXh0IGFuZAo7 OyBhbm90aGVyIGZvciB0aGUgZmlyc3QgY2hhcmFjdGVyIGFmdGVyIHRleHQgaGFzIGJlZW4gZGVs ZXRlZC4KCjs7IFdoZW4gSGlnaGxpZ2h0IENoYW5nZXMgbW9kZSBpcyBvbiAoZXZlbiBpZiBjaGFu Z2VzIGFyZSBub3QgdmlzaWJsZSkgCjs7IHlvdSBjYW4gZ28gdG8gdGhlIG5leHQgb3IgcHJldmlv dXMgY2hhbmdlIHdpdGgKOzsgYGhpZ2hsaWdodC1jaGFuZ2VzLW5leHQtY2hhbmdlJyBvciBgaGln aGxpZ2h0LWNoYW5nZXMtcHJldmlvdXMtY2hhbmdlJy4KCjs7IENvbW1hbmQgaGlnaGxpZ2h0LWNv bXBhcmUtd2l0aC1maWxlIHNob3dzIGNoYW5nZXMgaW4gdGhpcyBmaWxlCjs7IGNvbXBhcmVkIHdp dGggYW5vdGhlciBmaWxlIChieSBkZWZhdWx0IHRoZSBwcmV2aW91cyB2ZXJzaW9uIG9mIHRoZQo7 OyBmaWxlKS4gIAo7Owo7OyBUaGUgY29tbWFuZCBoaWdobGlnaHQtY29tcGFyZS1idWZmZXJzIGNv bXBhcmVzIHR3byBidWZmZXJzIGJ5Cjs7IGhpZ2hsaWdodGluZyB0aGVpciBkaWZmZXJlbmNlcy4K Cjs7IFlvdSBjYW4gImFnZSIgZGlmZmVyZW50IHNldHMgb2YgY2hhbmdlcyBieSB1c2luZwo7OyBg aGlnaGxpZ2h0LWNoYW5nZXMtcm90YXRlLWZhY2VzJy4gIFRoaXMgcm90YXRlcyB0aHJvdWdoIGEg c2VyaWVzCjs7IG9mIGRpZmZlcmVudCBmYWNlcywgc28geW91IGNhbiBkaXN0aW5ndWlzaCAibmV3 IiBjaGFuZ2VzIGZyb20gIm9sZGVyIgo7OyBjaGFuZ2VzLiAgWW91IGNhbiBjdXN0b21pemUgdGhl c2UgInJvdGF0ZWQiIGZhY2VzIGluIHR3byB3YXlzLiAgWW91IGNhbgo7OyBlaXRoZXIgZXhwbGlj aXRseSBkZWZpbmUgZWFjaCBmYWNlIGJ5IGN1c3RvbWl6aW5nCjs7IGBoaWdobGlnaHQtY2hhbmdl cy1mYWNlLWxpc3QnLiAgSWYsIGhvd2V2ZXIsIHRoZSBmYWNlcyBkaWZmZXIgZnJvbQo7OyBgaGln aGxpZ2h0LWNoYW5nZXMtZmFjZScgb25seSBpbiB0aGUgZm9yZWdyb3VuZCBjb2xvciwgeW91IGNh biBzaW1wbHkgc2V0Cjs7IGBoaWdobGlnaHQtY2hhbmdlcy1jb2xvdXJzJy4gIElmIGBoaWdobGln aHQtY2hhbmdlcy1mYWNlLWxpc3QnIGlzIG5pbCB3aGVuCjs7IHRoZSBmYWNlcyBhcmUgcmVxdWly ZWQgdGhleSB3aWxsIGJlIGNvbnN0cnVjdGVkIGZyb20KOzsgYGhpZ2hsaWdodC1jaGFuZ2VzLWNv bG91cnMnLgoKOzsgWW91IGNhbiBhdXRvbWF0aWNhbGx5IHJvdGF0ZSBmYWNlcyB3aGVuIHRoZSBi dWZmZXIgaXMgc2F2ZWQ7Cjs7IHNlZSBmdW5jdGlvbiBgaGlnaGxpZ2h0LWNoYW5nZXMtcm90YXRl LWZhY2VzJyBmb3IgaG93IHRvIGRvIHRoaXMuCgo7OyBUaGVyZSBhcmUgY3VycmVudGx5IHR3byBo b29rcyBydW4gYnkgYGhpZ2hsaWdodC1jaGFuZ2VzLW1vZGUnOgo7OyBgaGlnaGxpZ2h0LWNoYW5n ZXMtZW5hYmxlLWhvb2snICAtIGlzIHJ1biB3aGVuIEhpZ2hsaWdodCBDaGFuZ2VzIG1vZGUKOzsJ CQkJICAgIGlzIGluaXRpYWxseSBlbmFibGVkIGZvciBhIGJ1ZmZlci4KOzsgYGhpZ2hsaWdodC1j aGFuZ2VzLWRpc2FibGUtaG9vaycgLSBpcyBydW4gd2hlbiBIaWdobGlnaHQgQ2hhbmdlcyBtb2Rl Cgo7OyBFeGFtcGxlIHVzYWdlOgo7OyAoZGVmdW4gbXktaGlnaGxpZ2h0LWNoYW5nZXMtZW5hYmxl LWhvb2sgKCkKOzsgICAoYWRkLWhvb2sgJ2xvY2FsLXdyaXRlLWZpbGUtaG9va3MgJ2hpZ2hsaWdo dC1jaGFuZ2VzLXJvdGF0ZS1mYWNlcykKOzsgKQo7Owo7OyAoZGVmdW4gbXktaGlnaGxpZ2h0LWNo YW5nZXMtZGlzYWJsZS1ob29rICgpCjs7ICAgKHJlbW92ZS1ob29rICdsb2NhbC13cml0ZS1maWxl LWhvb2tzICdoaWdobGlnaHQtY2hhbmdlcy1yb3RhdGUtZmFjZXMpCjs7ICkKOzsKOzsgKGFkZC1o b29rICdoaWdobGlnaHQtY2hhbmdlcy1lbmFibGUtaG9vayAnbXktaGlnaGxpZ2h0LWNoYW5nZXMt ZW5hYmxlLWhvb2spCjs7IChhZGQtaG9vayAnaGlnaGxpZ2h0LWNoYW5nZXMtZGlzYWJsZS1ob29r Cjs7CQknbXktaGlnaGxpZ2h0LWNoYW5nZXMtZGlzYWJsZS1ob29rKQoKCgo7OyAgICAgICAgICAg QXV0b21hdGljYWxseSBlbmFibGluZyBIaWdobGlnaHQgQ2hhbmdlcyBtb2RlCgoKOzsgTm9ybWFs bHksIEhpZ2hsaWdodCBDaGFuZ2VzIG1vZGUgaXMgdHVybmVkIG9uIGV4cGxpY2l0bHkgaW4gYSBi dWZmZXIuCgo7OyBJZiB5b3UgcHJlZmVyIHRvIGhhdmUgaXQgYXV0b21hdGljYWxseSBpbnZva2Vk IHlvdSBjYW4gZG8gaXQgYXMKOzsgZm9sbG93cy4KCjs7IDEuIE1vc3QgbW9kZXMgaGF2ZSBhIG1h am9yLWhvb2ssIHR5cGljYWxseSBjYWxsZWQgTU9ERS1ob29rLiAgWW91Cjs7IGNhbiB1c2UgYGFk ZC1ob29rJyB0byBjYWxsIGBoaWdobGlnaHQtY2hhbmdlcy1tb2RlJy4KCjs7ICAgRXhhbXBsZToK OzsJKGFkZC1ob29rICdjLW1vZGUtaG9vayAnaGlnaGxpZ2h0LWNoYW5nZXMtbW9kZSkKCjs7IEhv d2V2ZXIsIHRoaXMgY2Fubm90IGJlIGRvbmUgZm9yIEZ1bmRhbWVudGFsIG1vZGUgZm9yIHRoZXJl IGlzIG5vCjs7IHN1Y2ggaG9vay4KCjs7IDIuIFlvdSBjYW4gdXNlIHRoZSBmdW5jdGlvbiBgZ2xv YmFsLWhpZ2hsaWdodC1jaGFuZ2VzJwoKOzsgVGhpcyBmdW5jdGlvbiwgd2hpY2ggaXMgZmFzaGlv bmVkIGFmdGVyIHRoZSB3YXkgYGdsb2JhbC1mb250LWxvY2snIHdvcmtzLAo7OyB0b2dnbGVzIG9u IG9yIG9mZiBnbG9iYWwgSGlnaGxpZ2h0IENoYW5nZXMgbW9kZS4gIFdoZW4gYWN0aXZhdGVkLCBp dCB0dXJucwo7OyBvbiBIaWdobGlnaHQgQ2hhbmdlcyBtb2RlIGluIGFsbCAic3VpdGFibGUiIGV4 aXN0aW5nIGJ1ZmZlcnMgYW5kIHdpbGwgdHVybgo7OyBpdCBvbiBpbiBuZXcgInN1aXRhYmxlIiBi dWZmZXJzIHRvIGJlIGNyZWF0ZWQuCgo7OyBBIGJ1ZmZlcidzICJzdWl0YWJpbGl0eSIgaXMgZGV0 ZXJtaW5lZCBieSB2YXJpYWJsZQo7OyBgaGlnaGxpZ2h0LWNoYW5nZXMtZ2xvYmFsLW1vZGVzJyBh cyBmb2xsb3dzLiAgSWYgdGhpcyB2YXJpYWJsZSBpcwo7OyAqIG5pbCAgLS0gdGhlbiBubyBidWZm ZXJzIGFyZSBzdWl0YWJsZTsKOzsgKiBhIGZ1bmN0aW9uIC0tIHRoaXMgZnVuY3Rpb24gaXMgY2Fs bGVkIGFuZCB0aGUgcmVzdWx0IGlzIHVzZWQuICBBcwo7OyAgIGFuIGV4YW1wbGUsIGlmIHRoZSB2 YWx1ZSBpcyBgYnVmZmVyLWZpbGUtbmFtZScgdGhlbiBhbGwgYnVmZmVycwo7OyAgIHdobyBhcmUg dmlzaXRpbmcgZmlsZXMgYXJlIHN1aXRhYmxlLCBidXQgb3RoZXJzIChsaWtlIGRpcmVkCjs7ICAg YnVmZmVycykgYXJlIG5vdDsKOzsgKiBhIGxpc3QgLS0gdGhlbiB0aGUgYnVmZmVyIGlzIHN1aXRh YmxlIGlmIGFuZCBvbmx5IGlmIGl0cyBtb2RlIGlzIGluIHRoZQo7OyAgIGxpc3QsIHVubGVzcyB0 aGUgZmlyc3QgZWxlbWVudCBpcyBgbm90JyBpbiB3aGljaCBjYXNlIHRoZSB0ZXN0Cjs7ICAgaXMg cmV2ZXJzZWQgKGkuZS4gaXQgaXMgYSBsaXN0IG9mIHVuc3VpdGFibGUgbW9kZXMpLgo7OyAqIE90 aGVyd2lzZSwgdGhlIGJ1ZmZlciBpcyBzdWl0YWJsZSBpZiBpdHMgbmFtZSBkb2VzIG5vdCBiZWdp biB3aXRoCjs7ICAgYCAnIG9yIGAqJyBhbmQgaWYgYGJ1ZmZlci1maWxlLW5hbWUnIHJldHVybnMg dHJ1ZS4KCjs7IE5vcm1hbGx5IHRvZ2dsaW5nIG9uIG9yIG9mZiBHbG9iYWwgSGlnaGxpZ2h0IENo YW5nZXMgbW9kZSBkb2VzIG5vdAo7OyBjaGFuZ2Ugd2hldGhlciBIaWdobGlnaHQgQ2hhbmdlcyBt b2RlIGlzIHR1cm5lZCBvbiBvciBvZmYgZm9yCjs7IGV4aXN0aW5nIGJ1ZmZlcnMsIGJ1dCBhIHVz ZXIgb3B0aW9uIGNhbiBjYXVzZSBpdCB0byBkbyBzby4KCjs7IFRvIGVuYWJsZSBpdCBmb3IgZnV0 dXJlIHNlc3Npb25zIHB1dCB0aGlzIGluIHlvdXIgfi8uZW1hY3MgZmlsZToKOzsJCShnbG9iYWwt aGlnaGxpZ2h0LWNoYW5nZXMgdCkKCgo7OwlQb3NzaWJsZSBiaW5kaW5nczoKCjs7IChnbG9iYWwt c2V0LWtleSAnW0MtcmlnaHRdICdoaWdobGlnaHQtY2hhbmdlcy1uZXh0LWNoYW5nZSkKOzsgKGds b2JhbC1zZXQta2V5ICdbQy1sZWZ0XSAgJ2hpZ2hsaWdodC1jaGFuZ2VzLXByZXZpb3VzLWNoYW5n ZSkKOzsKOzsgICAgIE90aGVyIGludGVyYWN0aXZlIGZ1bmN0aW9ucyAodGhhdCBjb3VsZCBiZSBi b3VuZCBpZiBkZXNpcmVkKToKOzsgaGlnaGxpZ2h0LWNoYW5nZXMtbW9kZQo7OyBoaWdobGlnaHQt Y2hhbmdlcy10b2dnbGUtdmlzaWJpbGl0eQo7OyBoaWdobGlnaHQtY2hhbmdlcy1yZW1vdmUtaGln aGxpZ2h0Cjs7IGhpZ2hsaWdodC1jb21wYXJlLXdpdGgtZmlsZQo7OyBoaWdobGlnaHQtY29tcGFy ZS1idWZmZXJzCjs7IGhpZ2hsaWdodC1jaGFuZ2VzLXJvdGF0ZS1mYWNlcwoKCjs7OyBCdWdzOgoK OzsgLSB0aGUgbmV4dC1jaGFuZ2UgYW5kIHByZXZpb3VzLWNoYW5nZSBmdW5jdGlvbnMgYXJlIHRv byBsaXRlcmFsOwo7OyAgIHRoZXkgc2hvdWxkIGZpbmQgdGhlIG5leHQgInJlYWwiIGNoYW5nZSwg aW4gb3RoZXIgd29yZHMgdHJlYXQKOzsgICBjb25zZWN1dGl2ZSBjaGFuZ2VzIGFzIG9uZS4KCgo7 OzsgVG8gZG8gKG1heWJlKSwgbm90ZXMsIC4uLgoKOzsgLSBoYXZpbmcgZGlmZmVyZW50IGZhY2Vz IGZvciBkZWxldGlvbiBhbmQgbm9uLWRlbGV0aW9uOiBpcyBpdAo7OyAgIHJlYWxseSB3b3J0aCB0 aGUgaGFzc2xlPwo7OyAtIGhpZ2hsaWdodC1jb21wYXJlLXdpdGgtZmlsZSBzaG91bGQgYWxsb3cg UkNTIGZpbGVzIC0gZS5nLiBuaWNlIHRvIGJlCjs7ICAgYWJsZSB0byBzYXkgc2hvdyBjaGFuZ2Vz IGNvbXBhcmVkIHdpdGggdmVyc2lvbiAyLjEuCgoKOzs7IEhpc3Rvcnk6Cgo7OyBSIFNoYXJtYW4g KHJzaGFybWFuQHBvYm94LmNvbSkgRmViIDE5OTg6Cjs7IC0gaW5pdGlhbCByZWxlYXNlIGFzIGNo YW5nZS1tb2RlLgo7OyBKYXJpIEFhbHRvIDxqYXJpLmFhbHRvQG50Yy5ub2tpYS5jb20+IE1hciAx OTk4Cjs7IC0gZml4ZXMgZm9yIGJ5dGUgY29tcGlsZSBlcnJvcnMKOzsgLSB1c2UgZXZhbC1hbmQt Y29tcGlsZSBmb3IgYXV0b2xvYWQKOzsgTWFyaWpuIFJvcyA8Si5NLlJvc0BmeXMucnV1Lm5sPiBN YXIgOTgKOzsgLSBzdWdnZXN0ZWQgdHVybmluZyBpdCBvbiBieSBkZWZhdWx0Cjs7IEVyaWMgTHVk bGFtIDx6YXBwb0BnbnUub3JnPiBTdWdnZXN0ZWQgdXNpbmcgb3ZlcmxheXMuCjs7IEp1bHkgOTgK OzsgLSBnbG9iYWwgbW9kZSBhbmQgdmFyaW91cyBzdHVmZiBhZGRlZAo7OyAtIENoYW5nZWQgdG8g dXNlIG92ZXJsYXlzCjs7IEF1Z3VzdCA5OAo7OyAtIHJlbmFtZWQgdG8gSGlnaGxpZ2h0IENoYW5n ZXMgbW9kZS4KOzsgRGVjIDIwMDMKOzsgLSBVc2UgcmVxdWlyZSBmb3IgZWRpZmYgc3R1ZmYgdG8g cHJldmVudCBwcm9ibGVtcyB3aXRoCjs7IGhpZ2hsaWdodC1jb21wYXJlLXdpdGgtZmlsZSB3aGVu IGJ5dGUgY29tcGlsZWQgaW4gc3RkIGRpcmVjdG9yeQo7OyBOb3YgMjAwNgo7OyAtIE1hZGUgaGln aGxpZ2h0LWNoYW5nZXMtbW9kZSBsaWtlIG90aGVyIG1vZGVzICh0b2dnbGUgb24vb2ZmKQo7OyAt IEFkZGVkIG5ldyBjb21tYW5kIGhpZ2hsaWdodC1jaGFuZ2VzLXRvZ2dsZS12aXNpYmlsaXR5IHRv IHJlcGxhY2UgdGhlCjs7ICAgcHJldmlvdXMgYWN0aXZlL3Bhc3NpdmUgYXNwZWN0IG9mIGhpZ2hs aWdodC1jaGFuZ2VzLW1vZGUuCjs7IC0gUmVtb3ZlZCBoaWdobGlnaHQtY2hhbmdlcy10b2dnbGUt aG9vawo7OyAtIEFkZGVkIGhpZ2hsaWdodC1jb21wYXJlLWJ1ZmZlcnMKCjs7OyBDb2RlOgoKKHJl cXVpcmUgJ3dpZC1lZGl0KQoKOzsgPT09PT09PT09PT09PT09PT09PT09PSBDdXN0b21pemF0aW9u ID09PT09PT09PT09PT09PT09PT09PT09CihkZWZncm91cCBoaWdobGlnaHQtY2hhbmdlcyBuaWwK ICAiSGlnaGxpZ2h0IENoYW5nZXMgbW9kZS4iCiAgOnZlcnNpb24gIjIwLjQiCiAgOmdyb3VwICdm YWNlcykKCgo7OyBGYWNlIGluZm9ybWF0aW9uOiBIb3cgdGhlIGNoYW5nZXMgYXBwZWFyLgoKOzsg RGVmYXVsdHMgZm9yIGZhY2U6IHJlZCBmb3JlZ3JvdW5kLCBubyBjaGFuZ2UgdG8gYmFja2dyb3Vu ZCwKOzsgYW5kIHVuZGVybGluZWQgaWYgYSBjaGFuZ2UgaXMgYmVjYXVzZSBvZiBhIGRlbGV0aW9u Lgo7OyBOb3RlOiB1bmRlcmxpbmluZyBpcyBoZWxwZnVsIGluIHRoYXQgaXQgc2hvd3MgdXAgY2hh bmdlcyBpbiB3aGl0ZSBzcGFjZS4KOzsgSG93ZXZlciwgaGF2aW5nIGl0IHNldCBmb3Igbm9uLWRl bGV0ZSBjaGFuZ2VzIGNhbiBiZSBhbm5veWluZyBiZWNhdXNlIGFsbAo7OyBpbmRlbnRhdGlvbiBv biBpbnNlcnRzIGdldHMgdW5kZXJsaW5lZCAod2hpY2ggY2FuIGxvb2sgcHJldHR5IHVnbHkhKS4K CihkZWZmYWNlIGhpZ2hsaWdodC1jaGFuZ2VzLWZhY2UKICAnKCgoKGNsYXNzIGNvbG9yKSkgKDpm b3JlZ3JvdW5kICJyZWQiICkpCiAgICAodCAoOmludmVyc2UtdmlkZW8gdCkpKQogICJGYWNlIHVz ZWQgZm9yIGhpZ2hsaWdodGluZyBjaGFuZ2VzLiIKICA6Z3JvdXAgJ2hpZ2hsaWdodC1jaGFuZ2Vz KQoKOzsgVGhpcyBsb29rcyBwcmV0dHkgdWdseSwgYWN0dWFsbHkuICBNYXliZSB0aGUgdW5kZXJs aW5lIHNob3VsZCBiZSByZW1vdmVkLgooZGVmZmFjZSBoaWdobGlnaHQtY2hhbmdlcy1kZWxldGUt ZmFjZQogICcoKCgoY2xhc3MgY29sb3IpKSAoOmZvcmVncm91bmQgInJlZCIgOnVuZGVybGluZSB0 KSkKICAgICh0ICg6aW52ZXJzZS12aWRlbyB0KSkpCiAgIkZhY2UgdXNlZCBmb3IgaGlnaGxpZ2h0 aW5nIGRlbGV0aW9ucy4iCiAgOmdyb3VwICdoaWdobGlnaHQtY2hhbmdlcykKCgoKOzsgQSAobm90 IHZlcnkgZ29vZCkgZGVmYXVsdCBsaXN0IG9mIGNvbG91cnMgdG8gcm90YXRlIHRocm91Z2guCjs7 CihkZWZjdXN0b20gaGlnaGxpZ2h0LWNoYW5nZXMtY29sb3VycwogIChpZiAoZXEgKGZyYW1lLXBh cmFtZXRlciBuaWwgJ2JhY2tncm91bmQtbW9kZSkgJ2xpZ2h0KQogICAgICA7OyBkZWZhdWx0cyBm b3IgbGlnaHQgYmFja2dyb3VuZDoKICAgICAgJyggIm1hZ2VudGEiICJibHVlIiAiZGFya2dyZWVu IiAiY2hvY29sYXRlIiAic2llbm5hNCIgIk5hdnlCbHVlIikKICAgICAgOzsgZGVmYXVsdHMgZm9y IGRhcmsgYmFja2dyb3VuZDoKICAgICcoInllbGxvdyIgIm1hZ2VudGEiICJibHVlIiAibWFyb29u IiAiZmlyZWJyaWNrIiAiZ3JlZW40IiAiRGFya09yY2hpZCIpKQogICIqQ29sb3VycyB1c2VkIGJ5 IGBoaWdobGlnaHQtY2hhbmdlcy1yb3RhdGUtZmFjZXMnLgpUaGUgbmV3ZXN0IHJvdGF0ZWQgY2hh bmdlIHdpbGwgYmUgZGlzcGxheWVkIGluIHRoZSBmaXJzdCBlbGVtZW50IG9mIHRoaXMgbGlzdCwK dGhlIG5leHQgb2xkZXIgd2lsbCBiZSBpbiB0aGUgc2Vjb25kIGVsZW1lbnQgZXRjLgoKVGhpcyBs aXN0IGlzIHVzZWQgaWYgYGhpZ2hsaWdodC1jaGFuZ2VzLWZhY2UtbGlzdCcgaXMgbmlsLCBvdGhl cndpc2UgdGhhdAp2YXJpYWJsZSBvdmVycmlkZXMgdGhpcyBsaXN0LiAgSWYgeW91IG9ubHkgY2Fy ZSBhYm91dCBmb3JlZ3JvdW5kCmNvbG91cnMgdGhlbiB1c2UgdGhpcywgaWYgeW91IHdhbnQgZmFu Y2llciBmYWNlcyB0aGVuIHNldApgaGlnaGxpZ2h0LWNoYW5nZXMtZmFjZS1saXN0Jy4iCiAgOnR5 cGUgJyhyZXBlYXQgY29sb3IpCiAgOmdyb3VwICdoaWdobGlnaHQtY2hhbmdlcykKCgoKOzsgaGln aGxpZ2h0LWNoYW5nZXMtaW5pdGlhbC1zdGF0ZSBoYXMgYmVlbiByZW1vdmVkCgo7OyBoaWdobGln aHQtY2hhbmdlcy1nbG9iYWwtaW5pdGlhbC1zdGF0ZSBoYXMgYmVlbiByZW1vdmVkCgo7OyBUaGUg c3RyaW5ncyBkaXNwbGF5ZWQgaW4gdGhlIG1vZGUtbGluZSBmb3IgdGhlIG1pbm9yIG1vZGU6Cihk ZWZjdXN0b20gaGlnaGxpZ2h0LWNoYW5nZXMtYWN0aXZlLXN0cmluZyBuaWwKICAiKlRoZSBzdHJp bmcgdXNlZCB3aGVuIEhpZ2hsaWdodCBDaGFuZ2VzIG1vZGUgYW5kIGNoYW5nZXMgYXJlIHZpc2li bGUuClRoaXMgc2hvdWxkIGJlIHNldCB0byBuaWwgaWYgbm8gaW5kaWNhdGlvbiBpcyBkZXNpcmVk LCBvciB0bwphIHN0cmluZyB3aXRoIGEgbGVhZGluZyBzcGFjZS4iCiAgOnR5cGUgJyhjaG9pY2Ug c3RyaW5nCgkJIChjb25zdCA6dGFnICJOb25lIiAgbmlsKSkKICA6Z3JvdXAgJ2hpZ2hsaWdodC1j aGFuZ2VzKQoKKGRlZmN1c3RvbSBoaWdobGlnaHQtY2hhbmdlcy1wYXNzaXZlLXN0cmluZyAiIENo ZyIKICAiKlRoZSBzdHJpbmcgdXNlZCB3aGVuIEhpZ2hsaWdodCBDaGFuZ2VzIG1vZGUgYnV0IGNo YW5nZXMgYXJlIG5vdCB2aXNpYmxlLgpUaGlzIHNob3VsZCBiZSBzZXQgdG8gbmlsIGlmIG5vIGlu ZGljYXRpb24gaXMgZGVzaXJlZCwgb3IgdG8KYSBzdHJpbmcgd2l0aCBhIGxlYWRpbmcgc3BhY2Uu IgogIDp0eXBlICcoY2hvaWNlIHN0cmluZwoJCSAoY29uc3QgOnRhZyAiTm9uZSIgIG5pbCkpCiAg Omdyb3VwICdoaWdobGlnaHQtY2hhbmdlcykKCihkZWZjdXN0b20gaGlnaGxpZ2h0LWNoYW5nZXMt Z2xvYmFsLW1vZGVzIHQKICAiKkRldGVybWluZSB3aGV0aGVyIGEgYnVmZmVyIGlzIHN1aXRhYmxl IGZvciBnbG9iYWwgSGlnaGxpZ2h0IENoYW5nZXMgbW9kZS4KCkEgZnVuY3Rpb24gbWVhbnMgdGhh dCBmdW5jdGlvbiBpcyBjYWxsZWQ6ICBpZiBpdCByZXR1cm5zIG5vbi1uaWwsIHRoZQpidWZmZXIg aXMgc3VpdGFibGUuCgpBIGxpc3QgaXMgYSBsaXN0IG9mIG1vZGVzIGZvciB3aGljaCBpdCBpcyBz dWl0YWJsZSwgb3IgYSBsaXN0IHdob3NlCmZpcnN0IGVsZW1lbnQgaXMgYG5vdCcgZm9sbG93ZWQg YnkgbW9kZXMgd2hpY2ggYXJlIG5vdCBzdWl0YWJsZS4KCnQgbWVhbnMgdGhlIGJ1ZmZlciBpcyBz dWl0YWJsZSBpZiBpdHMgbmFtZSBkb2VzIG5vdCBiZWdpbiB3aXRoIGAgJyBub3IKYConIGFuZCB0 aGUgYnVmZmVyIGhhcyBhIGZpbGVuYW1lLgoKQSB2YWx1ZSBvZiBuaWwgbWVhbnMgbm8gYnVmZmVy cyBhcmUgc3VpdGFibGUgZm9yCmBnbG9iYWwtaGlnaGxpZ2h0LWNoYW5nZXMtbW9kZScgKGVmZmVj dGl2ZWx5IGRpc2FibGluZyB0aGUgbW9kZSkuCgpFeGFtcGxlczoKICAgICAgICAoYy1tb2RlIGMr Ky1tb2RlKQptZWFucyB0aGF0IEhpZ2hsaWdodCBDaGFuZ2VzIG1vZGUgaXMgdHVybmVkIG9uIGZv ciBidWZmZXJzIGluIEMgYW5kIEMrKwptb2RlcyBvbmx5LiIKICA6dHlwZSAnKGNob2ljZQoJICAo Y29uc3QgOnRhZyAiYWxsIG5vbi1zcGVjaWFsIGJ1ZmZlcnMgdmlzaXRpbmcgZmlsZXMiIHQpCgkg IChzZXQgOm1lbnUtdGFnICJzcGVjaWZpYyBtb2RlcyIgOnRhZyAibW9kZXMiCgkgICAgICAgOnZh bHVlIChub3QpCgkgICAgICAgKGNvbnN0IDp0YWcgIkFsbCBleGNlcHQgdGhlc2UiIG5vdCkKCSAg ICAgICAocmVwZWF0IDp0YWcgIk1vZGVzIiA6aW5saW5lIHQgKHN5bWJvbCA6dGFnICJtb2RlIikp KQoJICAoZnVuY3Rpb24gOm1lbnUtdGFnICJkZXRlcm1pbmVkIGJ5IGZ1bmN0aW9uIgoJCQkgICA6 dmFsdWUgYnVmZmVyLWZpbGUtbmFtZSkKCSAgKGNvbnN0IDp0YWcgIm5vbmUiIG5pbCkKCSAgKQog IDpncm91cCAnaGlnaGxpZ2h0LWNoYW5nZXMpCgooZGVmdmFyIGdsb2JhbC1oaWdobGlnaHQtY2hh bmdlcyBuaWwpCgooZGVmY3VzdG9tIGhpZ2hsaWdodC1jaGFuZ2VzLWdsb2JhbC1jaGFuZ2VzLWV4 aXN0aW5nLWJ1ZmZlcnMgbmlsCiAgIipJZiBub24tbmlsLCB0b2dnbGluZyBnbG9iYWwgSGlnaGxp Z2h0IENoYW5nZXMgbW9kZSBhZmZlY3RzIGV4aXN0aW5nIGJ1ZmZlcnMuCk5vcm1hbGx5LCBgZ2xv YmFsLWhpZ2hsaWdodC1jaGFuZ2VzJyBhZmZlY3RzIG9ubHkgbmV3IGJ1ZmZlcnMgKHRvIGJlCmNy ZWF0ZWQpLiAgSG93ZXZlciwgaWYgYGhpZ2hsaWdodC1jaGFuZ2VzLWdsb2JhbC1jaGFuZ2VzLWV4 aXN0aW5nLWJ1ZmZlcnMnCmlzIG5vbi1uaWwsIHRoZW4gdHVybmluZyBvbiBgZ2xvYmFsLWhpZ2hs aWdodC1jaGFuZ2VzJyB3aWxsIHR1cm4gb24KSGlnaGxpZ2h0IENoYW5nZXMgbW9kZSBpbiBzdWl0 YWJsZSBidWZmZXJzLCBhbmQgdHVybmluZyB0aGUgbW9kZSBvZmYgd2lsbApyZW1vdmUgaXQgZnJv bSBleGlzdGluZyBidWZmZXJzLiIKICA6dHlwZSAnYm9vbGVhbgogIDpncm91cCAnaGlnaGxpZ2h0 LWNoYW5nZXMpCgooZGVmdW4gaGlsaXQtY2hnLWN1c3QtZml4LWNoYW5nZXMtZmFjZS1saXN0ICh3 IHdjICZvcHRpb25hbCBldmVudCkKICA7OyBXaGVuIGN1c3RvbWl6YXRpb24gZnVuY3Rpb24gYGhp Z2hsaWdodC1jaGFuZ2VzLWZhY2UtbGlzdCcgaW5zZXJ0cyBhIG5ldwogIDs7IGZhY2UgaXQgdXNl cyB0aGUgZGVmYXVsdCBmYWNlLiAgIFdlIGRvbid0IHdhbnQgdGhlIHVzZXIgdG8gbW9kaWZ5IHRo aXMKICA7OyBmYWNlLCBzbyB3ZSByZW5hbWUgdGhlIGZhY2VzIGluIHRoZSBsaXN0IG9uIGFuIGlu c2VydC4gIFRoZSByZW5hbWUgaXMKICA7OyBhY3R1YWxseSBkb25lIGJ5IGNvcHlpbmcgdGhlIGZh Y2VzIHNvIHVzZXItZGVmaW5lZCBmYWNlcyBzdGlsbCByZW1haW4KICA7OyBpbiB0aGUgc2FtZSBv cmRlci4KICA7OyBUaGUgbm90aWZ5aW5nIHRoZSBwYXJlbnQgaXMgbmVlZGVkIGJlY2F1c2Ugd2l0 aG91dCBpdCBjaGFuZ2VzIHRvIHRoZQogIDs7IGZhY2VzIGFyZSBzYXZlZCBidXQgbm90IHRvIHRo ZSBhY3R1YWwgbGlzdCBpdHNlbGYuCiAgKGxldCAoKG9sZC1saXN0ICh3aWRnZXQtdmFsdWUgdykp KQogICAgKGlmIChtZW1iZXIgJ2RlZmF1bHQgb2xkLWxpc3QpCgkobGV0CgkgICAgKChwIChyZXZl cnNlIG9sZC1saXN0KSkKCSAgICAgKG4gKGxlbmd0aCBvbGQtbGlzdCkpCgkgICAgIG5ldy1uYW1l IG9sZC1uYW1lCgkgICAgIChuZXctbGlzdCBuaWwpCgkgICAgICkKCSAgKHdoaWxlIHAKCSAgICAo c2V0cSBvbGQtbmFtZSAoY2FyIHApKQoJICAgIChzZXRxIG5ldy1uYW1lIChpbnRlcm4gKGZvcm1h dCAiaGlnaGxpZ2h0LWNoYW5nZXMtZmFjZS0lZCIgbikpKQoJICAgIChpZiAoZXEgb2xkLW5hbWUg bmV3LW5hbWUpCgkJbmlsCgkgICAgICA7OyBBIG5ldyBmYWNlIGhhcyBiZWVuIGluc2VydGVkOiB3 ZSBkb24ndCB3YW50IHRvIG1vZGlmeSB0aGUKCSAgICAgIDs7IGRlZmF1bHQgZmFjZSBzbyBjb3B5 IGl0LiAgIEJldHRlciwgdGhvdWdoLCAoSSB0aGluaykgaXMgdG8KCSAgICAgIDs7IG1ha2UgYSBu ZXcgZmFjZSBoYXZlIHRoZSBzYW1lIGF0dHJpYnV0ZXMgYXMKCSAgICAgIDs7IGhpZ2hsaWdodC1j aGFuZ2VzLWZhY2UgLgoJICAgICAgKGlmIChlcSBvbGQtbmFtZSAnZGVmYXVsdCkKCQkgIChjb3B5 LWZhY2UgJ2hpZ2hsaWdodC1jaGFuZ2VzLWZhY2UgIG5ldy1uYW1lKQoJCShjb3B5LWZhY2Ugb2xk LW5hbWUgbmV3LW5hbWUpCgkJKSkKCSAgICAoc2V0cSBuZXctbGlzdCAoYXBwZW5kICAobGlzdCBu ZXctbmFtZSkgbmV3LWxpc3QpKQoJICAgIChzZXRxIG4gKDEtIG4pKQoJICAgIChzZXRxIHAgKGNk ciBwKSkpCgkgIChpZiAoZXF1YWwgbmV3LWxpc3QgKHdpZGdldC12YWx1ZSB3KSkKCSAgICAgIG5p bCA7OyAobWVzc2FnZSAibm90aWZ5OiBubyBjaGFuZ2UhIikKCSAgICAod2lkZ2V0LXZhbHVlLXNl dCB3IG5ldy1saXN0KQoJICAgICh3aWRnZXQtc2V0dXApCgkgICAgKQoJICApCiAgICAgIDs7ICht ZXNzYWdlICJub3RpZnk6IG5vIGRlZmF1bHQgaGVyZSEiKQogICAgICApKQogIChsZXQgKChwYXJl bnQgKHdpZGdldC1nZXQgdyA6cGFyZW50KSkpCiAgICAod2hlbiBwYXJlbnQKICAgICAgKHdpZGdl dC1hcHBseSBwYXJlbnQgOm5vdGlmeSB3IGV2ZW50KSkpKQoKCihkZWZjdXN0b20gaGlnaGxpZ2h0 LWNoYW5nZXMtZmFjZS1saXN0IG5pbAogICIqQSBsaXN0IG9mIGZhY2VzIHVzZWQgd2hlbiByb3Rh dGluZyBjaGFuZ2VzLgpOb3JtYWxseSB0aGUgdmFyaWFibGUgaXMgaW5pdGlhbGl6ZWQgdG8gbmls IGFuZCB0aGUgbGlzdCBpcyBjcmVhdGVkIGZyb20KYGhpZ2hsaWdodC1jaGFuZ2VzLWNvbG91cnMn IHdoZW4gbmVlZGVkLiAgSG93ZXZlciwgeW91IGNhbiBzZXQgdGhpcyB2YXJpYWJsZQp0byBhbnkg bGlzdCBvZiBmYWNlcy4gIFlvdSB3aWxsIGhhdmUgdG8gZG8gdGhpcyBpZiB5b3Ugd2FudCBmYWNl cyB3aGljaApkb24ndCBqdXN0IGRpZmZlciBmcm9tIGBoaWdobGlnaHQtY2hhbmdlcy1mYWNlJyBi eSB0aGUgZm9yZWdyb3VuZCBjb2xvdXIuCk90aGVyd2lzZSwgdGhpcyBsaXN0IHdpbGwgYmUgY29u c3RydWN0ZWQgd2hlbiBuZWVkZWQgZnJvbQpgaGlnaGxpZ2h0LWNoYW5nZXMtY29sb3VycycuIgog IDp0eXBlICcoY2hvaWNlCgkgIChyZXBlYXQKCSAgICA6bm90aWZ5IGhpbGl0LWNoZy1jdXN0LWZp eC1jaGFuZ2VzLWZhY2UtbGlzdAoJICAgIGZhY2UgICkKCSAgKGNvbnN0IDp0YWcgIkRlcml2ZSBm cm9tIGhpZ2hsaWdodC1jaGFuZ2VzLWNvbG91cnMiICBuaWwpCgkgICkKICA6Z3JvdXAgJ2hpZ2hs aWdodC1jaGFuZ2VzKQoKKGRlZnZhciBoaWdobGlnaHQtY2hhbmdlcy12aXNpYmxlLXAgdAogICIq VGhpcyBjb250cm9scyB0aGUgYXBwZWFyYW5jZSBvZiBjaGFuZ2VzIHdoZW4gSGlnaGxpZ2h0IENo YW5nZXMgbW9kZSBpcyBvbi4KSWYgbm9uLW5pbCwgdGhlIGNoYW5nZXMgYXJlIGRpc3BsYXllZCB1 c2luZyBkaXN0aW5jdGl2ZSBmYWNlcy4KClRoaXMgdmFyaWFibGUgaXMgYnVmZmVyLWxvY2FsIHdo ZW4gc2V0LgoKRG8gbm90IHNldCB0aGlzIHZhcmlhYmxlIGRpcmVjdGx5LiAgSW5zdGVhZCwgIHVz ZQpcXFtoaWdobGlnaHQtY2hhbmdlcy10b2dnbGUtdmlzaWJpbGl0eV0gdG8gY2hhbmdlIHRoaXMg dmFyaWFibGUgaW4gYQpidWZmZXIsICBvciB1c2UgdGhlIExpc3AgZnVuY3Rpb24gYHNldHEtZGVm YXVsdCcgdG8gY2hhbmdlIHRoZSBkZWZhdWx0CnZhbHVlIHRoYXQgaXMgdXNlZCBmb3IgbmV3IGJ1 ZmZlcnMgdmlzaXRlZCB3aGVuIEdsb2JhbCBIaWdobGlnaHQgQ2hhbmdlcwptb2RlIGlzIGFjdGl2 ZS4iKQoKOzsgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09Cgo7OyBUaGVzZSBzaG91bGRuJ3QgYmUgY2hhbmdlZCEK Cjs7IEF1dG9sb2FkIGZvciB0aGUgYmVuZWZpdCBvZiBgbWFrZS1tb2RlLWxpbmUtbW91c2Utc2Vu c2l0aXZlJy4KOzs7IyMjYXV0b2xvYWQKKGRlZnZhciBoaWdobGlnaHQtY2hhbmdlcy1tb2RlIG5p bCkKCihkZWZ2YXIgaGlsaXQtY2hnLWxpc3QgbmlsKQooZGVmdmFyIGhpbGl0LWNoZy1zdHJpbmcg IiA/PyIpCihvciAoYXNzcSAnaGlnaGxpZ2h0LWNoYW5nZXMtbW9kZSBtaW5vci1tb2RlLWFsaXN0 KQogICAgKHNldHEgbWlub3ItbW9kZS1hbGlzdAoJICAoY29ucyAnKGhpZ2hsaWdodC1jaGFuZ2Vz LW1vZGUgaGlsaXQtY2hnLXN0cmluZykgbWlub3ItbW9kZS1hbGlzdCkKCSAgKSkKKG1ha2UtdmFy aWFibGUtYnVmZmVyLWxvY2FsICdoaWdobGlnaHQtY2hhbmdlcy1tb2RlKQoobWFrZS12YXJpYWJs ZS1idWZmZXItbG9jYWwgJ2hpZ2hsaWdodC1jaGFuZ2VzLXZpc2libGUtcCkKKG1ha2UtdmFyaWFi bGUtYnVmZmVyLWxvY2FsICdoaWxpdC1jaGctc3RyaW5nKQoKCgo7OzsgRnVuY3Rpb25zLi4uCgoo ZGVmdW4gaGlsaXQtY2hnLW1hcC1jaGFuZ2VzICAoZnVuYyAmb3B0aW9uYWwgc3RhcnQtcG9zaXRp b24gZW5kLXBvc2l0aW9uKQogICJDYWxsIGZ1bmN0aW9uIEZVTkMgZm9yIGVhY2ggcmVnaW9uIHVz ZWQgYnkgSGlnaGxpZ2h0IENoYW5nZXMgbW9kZS4KSWYgU1RBUlQtUE9TSVRJT04gaXMgbmlsLCAo cG9pbnQtbWluKSBpcyB1c2VkLgpJZiBFTkQtUE9TSVRJT04gaXMgbmlsLCAocG9pbnQtbWF4KSBp cyB1c2VkLgpGVU5DIGlzIGNhbGxlZCB3aXRoIDMgcGFyYW1zOiBQUk9QRVJUWSBTVEFSVCBTVE9Q LiIKICAobGV0ICgoc3RhcnQgKG9yIHN0YXJ0LXBvc2l0aW9uIChwb2ludC1taW4pKSkKCShsaW1p dCAob3IgZW5kLXBvc2l0aW9uIChwb2ludC1tYXgpKSkKCXByb3AgZW5kKQogICAgKHdoaWxlIChh bmQgc3RhcnQgKDwgc3RhcnQgbGltaXQpKQogICAgICAoc2V0cSBwcm9wIChnZXQtdGV4dC1wcm9w ZXJ0eSBzdGFydCAnaGlsaXQtY2hnKSkKICAgICAgKHNldHEgZW5kICh0ZXh0LXByb3BlcnR5LW5v dC1hbGwgc3RhcnQgbGltaXQgJ2hpbGl0LWNoZyBwcm9wKSkKICAgICAgKGlmIHByb3AKCSAgKGZ1 bmNhbGwgZnVuYyBwcm9wIHN0YXJ0IChvciBlbmQgbGltaXQpKSkKICAgICAgKHNldHEgc3RhcnQg ZW5kKSkpKQoKCihkZWZ1biBoaWxpdC1jaGctZGlzcGxheS1jaGFuZ2VzICgmb3B0aW9uYWwgYmVn IGVuZCkKICAiRGlzcGxheSBmYWNlIGluZm9ybWF0aW9uIGZvciBIaWdobGlnaHQgQ2hhbmdlcyBt b2RlLgoKQW4gb3ZlcmxheSBmcm9tIEJFRyB0byBFTkQgY29udGFpbmluZyBhIGNoYW5nZSBmYWNl IGlzIGFkZGVkIGZyb20gdGhlCmluZm9ybWF0aW9uIGluIHRoZSB0ZXh0IHByb3BlcnR5IG9mIHR5 cGUgYGhpbGl0LWNoZycuCgpUaGlzIGlzIHRoZSBvcHBvc2l0ZSBvZiBgaGlsaXQtY2hnLWhpZGUt Y2hhbmdlcycuIgogIChoaWxpdC1jaGctbWFwLWNoYW5nZXMgJ2hpbGl0LWNoZy1tYWtlLW92IGJl ZyBlbmQpKQoKCihkZWZ1biBoaWxpdC1jaGctbWFrZS1vdiAocHJvcCBzdGFydCBlbmQpCiAgOzsg UHV0IGEgaGlnaGxpZ2h0LWNoYW5nZXMgb3ZlcmxheSBpbiB0aGUgcmVnaW9uLgogIDs7IFBST1Ag aXMgdGhlIHByb3BlcnR5IHR5cGUsIGVpdGhlciAnaGlsaXQtY2hnIG9yICdoaWxpdC1jaGctZGVs ZXRlLlwKICA7OyBUaGUgZmFjZSB1c2VkIGlzIGRldGVybWluZWQgZnJvbSBQUk9QLgogIDs7IHRo ZSB0ZXh0IHByb3BlcnR5ICdoaWxpdC1jaGcKICAobGV0ICgob3YgKG1ha2Utb3ZlcmxheSBzdGFy dCBlbmQpKQoJZmFjZSkKICAgIChvciBwcm9wCgkoZXJyb3IgImhpbGl0LWNoZy1tYWtlLW92OiBw cm9wIGlzIG5pbCIpKQogICAgKGlmIChlcSBwcm9wICdoaWxpdC1jaGctZGVsZXRlKQoJKHNldHEg ZmFjZSAnaGlnaGxpZ2h0LWNoYW5nZXMtZGVsZXRlLWZhY2UpCiAgICAgIChzZXRxIGZhY2UgKG50 aCAxIChtZW1iZXIgcHJvcCBoaWxpdC1jaGctbGlzdCkpKSkKICAgIChpZiBmYWNlCgkocHJvZ24K CSAgOzsgV2UgbXVzdCBtYXJrIHRoZSBmYWNlLCB0aGF0IGlzIHRoZSBwdXJwb3NlIG9mIHRoZSBv dmVybGF5CgkgIChvdmVybGF5LXB1dCBvdiAnZmFjZSBmYWNlKQoJICA7OyBJIGRvbid0IHRoaW5r IHdlIG5lZWQgdG8gc2V0IGV2YXBvcmF0ZSBzaW5jZSB3ZSBzaG91bGQKCSAgOzsgYmUgY29udHJv bGxpbmcgdGhlbSEKCSAgKG92ZXJsYXktcHV0IG92ICdldmFwb3JhdGUgdCkKCSAgOzsgV2Ugc2V0 IHRoZSBjaGFuZ2UgcHJvcGVydHkgc28gd2UgY2FuIHRlbGwgdGhpcyBpcyBvbmUKCSAgOzsgb2Yg b3VyIG92ZXJsYXlzIChzbyB3ZSBkb24ndCBkZWxldGUgc29tZW9uZSBlbHNlJ3MpLgoJICAob3Zl cmxheS1wdXQgb3YgJ2hpbGl0LWNoZyB0KQoJICApCiAgICAgIChlcnJvciAiaGlsaXQtY2hnLW1h a2Utb3Y6IG5vIGZhY2UgZm9yIHByb3A6ICVzIiBwcm9wKSkpKQoKKGRlZnVuIGhpbGl0LWNoZy1o aWRlLWNoYW5nZXMgKCZvcHRpb25hbCBiZWcgZW5kKQogICJSZW1vdmUgZmFjZSBpbmZvcm1hdGlv biBmb3IgSGlnaGxpZ2h0IENoYW5nZXMgbW9kZS4KClRoZSBvdmVybGF5IGNvbnRhaW5pbmcgdGhl IGZhY2UgaXMgcmVtb3ZlZCwgYnV0IHRoZSB0ZXh0IHByb3BlcnR5CmNvbnRhaW5pbmcgdGhlIGNo YW5nZSBpbmZvcm1hdGlvbiBpcyByZXRhaW5lZC4KClRoaXMgaXMgdGhlIG9wcG9zaXRlIG9mIGBo aWxpdC1jaGctZGlzcGxheS1jaGFuZ2VzJy4iCiAgKGxldCAoKHN0YXJ0IChvciBiZWcgKHBvaW50 LW1pbikpKQoJKGxpbWl0IChvciBlbmQgKHBvaW50LW1heCkpKQoJcCkKICAgIChzZXRxIHAgKG92 ZXJsYXlzLWluIHN0YXJ0IGxpbWl0KSkKICAgICh3aGlsZSBwCiAgICAgIDs7IGRvbid0IGRlbGV0 ZSB0aGUgb3ZlcmxheSBpZiBpdCBpc24ndCBvdXJzIQogICAgICAoaWYgKG92ZXJsYXktZ2V0IChj YXIgcCkgJ2hpbGl0LWNoZykKCSAgKGRlbGV0ZS1vdmVybGF5IChjYXIgcCkpKQogICAgICAoc2V0 cSBwIChjZHIgcCkpKSkpCgooZGVmdW4gaGlsaXQtY2hnLWZpeHVwIChiZWcgZW5kKQogICJGaXgg Y2hhbmdlIG92ZXJsYXlzIGluIHJlZ2lvbiBiZXR3ZWVuIEJFRyBhbmQgRU5ELgoKRW5zdXJlIHRo ZSBvdmVybGF5cyBhZ3JlZSB3aXRoIHRoZSBjaGFuZ2VzIGFzIGRldGVybWluZWQgZnJvbQp0aGUg dGV4dCBwcm9wZXJ0aWVzIG9mIHR5cGUgYGhpbGl0LWNoZycgLiIKICA7OyBSZW1vdmUgb3IgYWx0 ZXIgb3ZlcmxheXMgaW4gcmVnaW9uIGJlZy4uZW5kCiAgKGxldCAocCBvdiBvdi1zdGFydCBvdi1l bmQKCSBwcm9wcyBxKQogICAgKHNldHEgcCAob3ZlcmxheXMtaW4gYmVnIGVuZCkpCiAgICA7OyB0 ZW1wIGZvciBkZWJ1Z2dpbmc6CiAgICAodW5sZXNzIChhbmQgaGlnaGxpZ2h0LWNoYW5nZXMtbW9k ZQoJCSBoaWdobGlnaHQtY2hhbmdlcy12aXNpYmxlLXApCiAgICAgIDs7IFRoaXMgY2FuIGhhcHBl biBpZiB0aGUgaGlnaGxpZ2h0LWNoYW5nZXMtbW9kZSB2YXJpYWJsZSB3YXMKICAgICAgOzsgbWFu dWFsbHkgc2V0IHRvIG5pbCB3aXRob3V0IHVzaW5nIHRoZSBjb21tYW5kIAogICAgICAoZXJyb3Ig ImhpbGl0LWNoZy1maXh1cCBjYWxsZWQgYnV0IEhpZ2hsaWdodCBDaGFuZ2VzIG1vZGUgbm90IGFj dGl2ZSIpKQogICAgKHdoaWxlIHAKICAgICAgKHNldHEgb3YgKGNhciBwKSkKICAgICAgKHNldHEg b3Ytc3RhcnQgKG92ZXJsYXktc3RhcnQgb3YpKQogICAgICAoc2V0cSBvdi1lbmQgKG92ZXJsYXkt ZW5kIG92KSkKICAgICAgKGlmICg8IG92LXN0YXJ0IGJlZykKCSAgKHByb2duCgkgICAgKG1vdmUt b3ZlcmxheSBvdiBvdi1zdGFydCBiZWcpCgkgICAgKGlmICg+IG92LWVuZCBlbmQpCgkJKHByb2du CgkJICAoc2V0cSBwcm9wcyAob3ZlcmxheS1wcm9wZXJ0aWVzIG92KSkKCQkgIChzZXRxIG92ICht YWtlLW92ZXJsYXkgZW5kIG92LWVuZCkpCgkJICAod2hpbGUgcHJvcHMKCQkgICAgKG92ZXJsYXkt cHV0IG92IChjYXIgcHJvcHMpKGNhciAoY2RyIHByb3BzKSkpCgkJICAgIChzZXRxIHByb3BzIChj ZHIgKGNkciBwcm9wcykpKSkpKSkKCShpZiAoPiBvdi1lbmQgZW5kKQoJICAgIChtb3ZlLW92ZXJs YXkgb3YgZW5kIG92LWVuZCkKCSAgKGRlbGV0ZS1vdmVybGF5IG92KSkpCiAgICAgIChzZXRxIHAg KGNkciBwKSkpCiAgICAoaGlsaXQtY2hnLWRpc3BsYXktY2hhbmdlcyBiZWcgZW5kKSkpCgo7Ozsj IyNhdXRvbG9hZAooZGVmdW4gaGlnaGxpZ2h0LWNoYW5nZXMtcmVtb3ZlLWhpZ2hsaWdodCAoYmVn IGVuZCkKICAiUmVtb3ZlIHRoZSBjaGFuZ2UgZmFjZSBmcm9tIHRoZSByZWdpb24gYmV0d2VlbiBC RUcgYW5kIEVORC4KVGhpcyBhbGxvd3MgeW91IHRvIG1hbnVhbGx5IHJlbW92ZSBoaWdobGlnaHRp bmcgZnJvbSB1bmludGVyZXN0aW5nIGNoYW5nZXMuIgogIChpbnRlcmFjdGl2ZSAiciIpCiAgKGxl dCAoKGFmdGVyLWNoYW5nZS1mdW5jdGlvbnMgbmlsKSkKICAgIChyZW1vdmUtdGV4dC1wcm9wZXJ0 aWVzIGJlZyBlbmQgICcoaGlsaXQtY2hnIG5pbCkpCiAgICAoaGlsaXQtY2hnLWZpeHVwIGJlZyBl bmQpKSkKCihkZWZ1biBoaWxpdC1jaGctc2V0LWZhY2Utb24tY2hhbmdlIChiZWcgZW5kIGxlbmct YmVmb3JlCgkmb3B0aW9uYWwgbm8tcHJvZXJ0eS1jaGFuZ2UpCiAgIlJlY29yZCBjaGFuZ2VzIGFu ZCBvcHRpb25hbGx5IGRpc3BsYXkgdGhlbSBpbiBhIGRpc3RpbmN0aXZlIGZhY2UuCmBoaWxpdC1j aGctc2V0JyBhZGRzIHRoaXMgZnVuY3Rpb24gdG8gdGhlIGBhZnRlci1jaGFuZ2UtZnVuY3Rpb25z JyBob29rLiIKICA7OwogIDs7IFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGJ5IHRoZSBgYWZ0ZXIt Y2hhbmdlLWZ1bmN0aW9ucycgaG9vaywgd2hpY2gKICA7OyBpcyBob3cgd2UgYXJlIG5vdGlmaWVk IHdoZW4gdGV4dCBpcyBjaGFuZ2VkLgogIDs7IEl0IGlzIGFsc28gY2FsbGVkIGZyb20gYGhpZ2hs aWdodC1jb21wYXJlLXdpdGgtZmlsZScuCiAgOzsKICA7OyBXZSBkbyBOT1Qgd2FudCB0byBzaW1w bHkgZG8gdGhpcyBpZiB0aGlzIGlzIGFuIHVuZG8gY29tbWFuZCwgYmVjYXVzZQogIDs7IG90aGVy d2lzZSBhbiB1bmRvbmUgY2hhbmdlIHNob3dzIHVwIGFzIGNoYW5nZWQuICBXaGlsZSB0aGUgcHJv cGVydGllcwogIDs7IGFyZSBhdXRvbWF0aWNhbGx5IHJlc3RvcmVkIGJ5IHVuZG8sIHdlIG11c3Qg Zml4IHVwIHRoZSBvdmVybGF5LgogIChzYXZlLW1hdGNoLWRhdGEKICAgIChsZXQgKChiZWctZGVj ciAxKSAoZW5kLWluY3IgMSkKCSAgKHR5cGUgJ2hpbGl0LWNoZykKCSAgb2xkKQogICAgICAoaWYg dW5kby1pbi1wcm9ncmVzcwoJICAoaWYgKGFuZCBoaWdobGlnaHQtY2hhbmdlcy1tb2RlCgkJICAg aGlnaGxpZ2h0LWNoYW5nZXMtdmlzaWJsZS1wKQoJICAgICAgKGhpbGl0LWNoZy1maXh1cCBiZWcg ZW5kKSkKCShpZiAoYW5kICg9IGJlZyBlbmQpICg+IGxlbmctYmVmb3JlIDApKQoJICAgIDs7IGRl bGV0aW9uCgkgICAgKHByb2duCgkgICAgICA7OyBUaGUgZW9scCBhbmQgYm9scCB0ZXN0cyBhcmUg YSBrbHVkZ2UhICBCdXQgdGhleSBwcmV2ZW50CgkgICAgICA7OyByYXRoZXIgbmFzdHkgbG9va2lu ZyBkaXNwbGF5cyB3aGVuIGRlbGV0aW5nIHRleHQgYXQgdGhlIGVuZAoJICAgICAgOzsgb2YgbGlu ZSwgc3VjaCBhcyBub3JtYWwgY29ycmVjdGlvbnMgYXMgb25lIGlzIHR5cGluZyBhbmQKCSAgICAg IDs7IGltbWVkaWF0ZWx5IG1ha2VzIGEgY29ycmVjdGlvbiwgYW5kIHdoZW4gZGVsZXRpbmcgZmly c3QKCSAgICAgIDs7IGNoYXJhY3RlciBvZiBhIGxpbmUuCjs7OwkgICAgICAoaWYgKD0gbGVuZy1i ZWZvcmUgMSkKOzs7CQkgIChpZiAoZW9scCkKOzs7CQkgICAgICAoc2V0cSBiZWctZGVjciAwIGVu ZC1pbmNyIDApCjs7OwkJICAgIChpZiAoYm9scCkKOzs7CQkJKHNldHEgYmVnLWRlY3IgMCkpKSkK Ozs7CSAgICAgIChzZXRxIGJlZyAobWF4ICgtIGJlZyBiZWctZGVjcikgKHBvaW50LW1pbikpKQoJ ICAgICAgKHNldHEgZW5kIChtaW4gKCsgZW5kIGVuZC1pbmNyKSAocG9pbnQtbWF4KSkpCgkgICAg ICAoc2V0cSB0eXBlICdoaWxpdC1jaGctZGVsZXRlKSkKCSAgOzsgTm90IGEgZGVsZXRpb24uCgkg IDs7IE1vc3Qgb2YgdGhlIHRpbWUgdGhlIGZvbGxvd2luZyBpcyBub3QgbmVjZXNzYXJ5LCBidXQK CSAgOzsgaWYgdGhlIGN1cnJlbnQgdGV4dCB3YXMgbWFya2VkIGFzIGEgZGVsZXRpb24gdGhlbgoJ ICA7OyB0aGUgb2xkIG92ZXJsYXkgaXMgc3RpbGwgaW4gZWZmZWN0LCBzbyBpZiB3ZSBhZGQgc29t ZQoJICA7OyB0ZXh0IHRoZW4gcmVtb3ZlIHRoZSBkZWxldGlvbiBtYXJraW5nLCBidXQgc2V0IGl0 IHRvCgkgIDs7IGNoYW5nZWQgb3RoZXJ3aXNlIGl0cyBoaWdobGlnaHRpbmcgZGlzYXBwZWFycy4K CSAgKGlmIChlcSAoZ2V0LXRleHQtcHJvcGVydHkgZW5kICdoaWxpdC1jaGcpICdoaWxpdC1jaGct ZGVsZXRlKQoJICAgICAgKHByb2duCgkJKHJlbW92ZS10ZXh0LXByb3BlcnRpZXMgZW5kICgrIGVu ZCAxKSAnKGhpbGl0LWNoZyBuaWwpKQoJCShwdXQtdGV4dC1wcm9wZXJ0eSBlbmQgKCsgZW5kIDEp ICdoaWxpdC1jaGcgJ2hpbGl0LWNoZykKCQkoaWYgaGlnaGxpZ2h0LWNoYW5nZXMtdmlzaWJsZS1w CgkJICAgIChoaWxpdC1jaGctZml4dXAgYmVnICgrIGVuZCAxKSkpKSkpCgkodW5sZXNzIG5vLXBy b2VydHktY2hhbmdlCgkJKHB1dC10ZXh0LXByb3BlcnR5IGJlZyBlbmQgJ2hpbGl0LWNoZyB0eXBl KSkKCShpZiAob3IgaGlnaGxpZ2h0LWNoYW5nZXMtdmlzaWJsZS1wIG5vLXByb2VydHktY2hhbmdl KQoJICAgIChoaWxpdC1jaGctbWFrZS1vdiB0eXBlIGJlZyBlbmQpKSkpKSkKCihkZWZ1biBoaWxp dC1jaGctc2V0ICgpCiAgIlR1cm4gb24gSGlnaGxpZ2h0IENoYW5nZXMgbW9kZSBmb3IgdGhpcyBi dWZmZXIuIgogIChyZW1vdmUtaG9vayAnYWZ0ZXItY2hhbmdlLWZ1bmN0aW9ucyAnaGlsaXQtY2hn LXNldC1mYWNlLW9uLWNoYW5nZSB0KQogIChoaWxpdC1jaGctbWFrZS1saXN0KQogIChzZXRxIGhp Z2hsaWdodC1jaGFuZ2VzLW1vZGUgdCkKICAoaWYgaGlnaGxpZ2h0LWNoYW5nZXMtdmlzaWJsZS1w CiAgICAgIChwcm9nbgoJKHNldHEgaGlsaXQtY2hnLXN0cmluZyBoaWdobGlnaHQtY2hhbmdlcy1h Y3RpdmUtc3RyaW5nKQoJKG9yIGJ1ZmZlci1yZWFkLW9ubHkKCSAgICAoaGlsaXQtY2hnLWRpc3Bs YXktY2hhbmdlcykpKQogICAgOzsgY2hhbmdlcyBhcmUgaW52aXNpYmxlCiAgICAoc2V0cSBoaWxp dC1jaGctc3RyaW5nIGhpZ2hsaWdodC1jaGFuZ2VzLXBhc3NpdmUtc3RyaW5nKQogICAgKG9yIGJ1 ZmZlci1yZWFkLW9ubHkKCShoaWxpdC1jaGctaGlkZS1jaGFuZ2VzKSkpCiAgKGZvcmNlLW1vZGUt bGluZS11cGRhdGUpCiAgKG1ha2UtbG9jYWwtaG9vayAnYWZ0ZXItY2hhbmdlLWZ1bmN0aW9ucykK ICAoYWRkLWhvb2sgJ2FmdGVyLWNoYW5nZS1mdW5jdGlvbnMgJ2hpbGl0LWNoZy1zZXQtZmFjZS1v bi1jaGFuZ2UgbmlsIHQpCiAgKHJ1bi1ob29rcyAnaGlnaGxpZ2h0LWNoYW5nZXMtZW5hYmxlLWhv b2spCiAgKQoKKGRlZnVuIGhpbGl0LWNoZy1jbGVhciAoKQogICJSZW1vdmUgSGlnaGxpZ2h0IENo YW5nZXMgbW9kZSBmb3IgdGhpcyBidWZmZXIuClRoaXMgcmVtb3ZlcyBhbGwgc2F2ZWQgY2hhbmdl IGluZm9ybWF0aW9uLiIKICAoaWYgYnVmZmVyLXJlYWQtb25seQogICAgICA7OyBXZSBwcmludCB0 aGUgYnVmZmVyIG5hbWUgYmVjYXVzZSB0aGlzIGZ1bmN0aW9uIGNvdWxkIGJlIGNhbGxlZAogICAg ICA7OyBvbiBtYW55IGJ1ZmZlcnMgZnJvbSBgZ2xvYmFsLWhpZ2hsaWdodC1jaGFuZ2VzJy4KICAg ICAgKG1lc3NhZ2UgIkNhbm5vdCByZW1vdmUgaGlnaGxpZ2h0aW5nIGZyb20gcmVhZC1vbmx5IG1v ZGUgYnVmZmVyICVzIgoJICAgICAgIChidWZmZXItbmFtZSkpCiAgICAocmVtb3ZlLWhvb2sgJ2Fm dGVyLWNoYW5nZS1mdW5jdGlvbnMgJ2hpbGl0LWNoZy1zZXQtZmFjZS1vbi1jaGFuZ2UgdCkKICAg IChsZXQgKChhZnRlci1jaGFuZ2UtZnVuY3Rpb25zIG5pbCkpCiAgICAgIChoaWxpdC1jaGctaGlk ZS1jaGFuZ2VzKQogICAgICAoaGlsaXQtY2hnLW1hcC1jaGFuZ2VzCiAgICAgICAnKGxhbWJkYSAo cHJvcCBzdGFydCBzdG9wKQoJICAocmVtb3ZlLXRleHQtcHJvcGVydGllcyBzdGFydCBzdG9wICco aGlsaXQtY2hnIG5pbCkpKSkKICAgICAgKQogICAgKHNldHEgaGlnaGxpZ2h0LWNoYW5nZXMtbW9k ZSBuaWwpCiAgICAoZm9yY2UtbW9kZS1saW5lLXVwZGF0ZSkKICAgIDs7IElmIHdlIHR5cGU6ICBD LXUgLTEgTS14IGhpZ2hsaWdodC1jaGFuZ2VzLW1vZGUKICAgIDs7IHdlIHdhbnQgdG8gdHVybiBp dCBvZmYsIGJ1dCBoaWxpdC1jaGctcG9zdC1jb21tYW5kLWhvb2sKICAgIDs7IHJ1bnMgYW5kIHRo YXQgdHVybnMgaXQgYmFjayBvbiEKICAgIChyZW1vdmUtaG9vayAncG9zdC1jb21tYW5kLWhvb2sg J2hpbGl0LWNoZy1wb3N0LWNvbW1hbmQtaG9vaykpCiAgKHJ1bi1ob29rcyAnaGlnaGxpZ2h0LWNo YW5nZXMtZGlzYWJsZS1ob29rKQogICkKCjs7OyMjI2F1dG9sb2FkCihkZWZ1biBoaWdobGlnaHQt Y2hhbmdlcy1tb2RlICgmb3B0aW9uYWwgYXJnKQogICJUb2dnbGUgSGlnaGxpZ2h0IENoYW5nZXMg bW9kZS4KCldpdGggQVJHLCB0dXJuIEhpZ2hsaWdodCBDaGFuZ2VzIG1vZGUgb24gaWYgYW5kIG9u bHkgaWYgYXJnIGlzIHBvc2l0aXZlLgoKSW4gSGlnaGxpZ2h0IENoYW5nZXMgbW9kZSBjaGFuZ2Vz IGFyZSByZWNvcmRlZCB3aXRoIGEgdGV4dCBwcm9wZXJ0eS4KTm9ybWFsbHkgdGhleSBhcmUgZGlz cGxheWVkIGluIGEgZGlzdGluY3RpdmUgZmFjZSwgYnV0IGNvbW1hbmQKXFxbaGlnaGxpZ2h0LWNo YW5nZXMtdG9nZ2xlLXZpc2liaWxpdHldIGNhbiBiZSB1c2VkIHRvIHRvZ2dsZXMgdGhpcwpvbiBh bmQgb2ZmLgoKT3RoZXIgZnVuY3Rpb25zIGZvciBidWZmZXJzIGluIHRoaXMgbW9kZSBpbmNsdWRl OgpcXFtoaWdobGlnaHQtY2hhbmdlcy1uZXh0LWNoYW5nZV0gLSBtb3ZlIHBvaW50IHRvIGJlZ2lu bmluZyBvZiBuZXh0IGNoYW5nZQpcXFtoaWdobGlnaHQtY2hhbmdlcy1wcmV2aW91cy1jaGFuZ2Vd IC0gbW92ZSB0byBiZWdpbm5pbmcgb2YgcHJldmlvdXMgY2hhbmdlClxcW2hpZ2hsaWdodC1jaGFu Z2VzLXJlbW92ZS1oaWdobGlnaHRdIC0gcmVtb3ZlIHRoZSBjaGFuZ2UgZmFjZSBmcm9tIHRoZSBy ZWdpb24KXFxbaGlnaGxpZ2h0LWNoYW5nZXMtcm90YXRlLWZhY2VzXSAtIHJvdGF0ZSBkaWZmZXJl bnQgXCJhZ2VzXCIgb2YgY2hhbmdlcwp0aHJvdWdoCXZhcmlvdXMgZmFjZXMuClxcW2hpZ2hsaWdo dC1jb21wYXJlLXdpdGgtZmlsZV0gLSBtYXJrIHRleHQgYXMgY2hhbmdlZCBieSBjb21wYXJpbmcg dGhpcwpidWZmZXIgd2l0aCB0aGUgY29udGVudHMgb2YgYSBmaWxlClxcW2hpZ2hsaWdodC1jb21w YXJlLWJ1ZmZlcnNdIGhpZ2hsaWdodHMgZGlmZmVyZW5jZXMgYmV0d2VlbiB0d28gYnVmZmVycy4K Ckhvb2sgdmFyaWFibGVzOgpgaGlnaGxpZ2h0LWNoYW5nZXMtZW5hYmxlLWhvb2snICAtIGNhbGxl ZCB3aGVuIGVuYWJsaW5nIEhpZ2hsaWdodCBDaGFuZ2VzIG1vZGUuCmBoaWdobGlnaHQtY2hhbmdl cy1kaXNhYmxlLWhvb2snIC0gY2FsbGVkIHdoZW4gZGlzYWJsaW5nIG9mZiBIaWdobGlnaHQgQ2hh bmdlcyBtb2RlLiIKICAoaW50ZXJhY3RpdmUgIlAiKQogIChpZiAob3IgKGRpc3BsYXktY29sb3It cCkKCSAgKGFuZCAoZmJvdW5kcCAneC1kaXNwbGF5LWdyYXlzY2FsZS1wKSAoeC1kaXNwbGF5LWdy YXlzY2FsZS1wKSkpCiAgICAgIChsZXQgKCh3YXMtb24gaGlnaGxpZ2h0LWNoYW5nZXMtbW9kZSkp Cgkoc2V0cSBoaWdobGlnaHQtY2hhbmdlcy1tb2RlCgkgICAgICAoaWYgKG51bGwgYXJnKQoJCSAg KG5vdCBoaWdobGlnaHQtY2hhbmdlcy1tb2RlKQoJCSg+IChwcmVmaXgtbnVtZXJpYy12YWx1ZSBh cmcpIDApKSkKCShpZiAoZXEgd2FzLW9uIGhpZ2hsaWdodC1jaGFuZ2VzLW1vZGUpCgkgICAgKG1l c3NhZ2UgImhpZ2hsaWdodC1jaGFuZ2VzLW1vZGUgLSBhbHJlYWR5ICVzIgoJCSAgICAgKGlmIGhp Z2hsaWdodC1jaGFuZ2VzLW1vZGUgIm9uIiAib2ZmIikpCgkgIChtZXNzYWdlICJoaWdobGlnaHQt Y2hhbmdlcy1tb2RlIGlzIG5vdyAlcyIKCQkgICAoaWYgaGlnaGxpZ2h0LWNoYW5nZXMtbW9kZSAi b24iICJvZmYiKSkKCSAgKGlmIGhpZ2hsaWdodC1jaGFuZ2VzLW1vZGUKCSAgICAgIDs7IGl0IGlz IGJlaW5nIHR1cm5lZCBvbgoJICAgICAgOzsgdGhlIGhvb2sgaGFzIGJlZW4gbW92ZWQgaW50byBo aWxpdC1jaGctc2V0CgkgICAgICA7OyAocnVuLWhvb2tzICdoaWdobGlnaHQtY2hhbmdlcy1lbmFi bGUtaG9vaykpCgkgICAgICAoaGlsaXQtY2hnLXNldCkKCSAgICA7OyBtb2RlIGlzIHR1cm5lZCBv ZmYKCSAgKGhpbGl0LWNoZy1jbGVhcikpKSkKICAgIChtZXNzYWdlICJIaWdobGlnaHQgQ2hhbmdl cyBtb2RlIHJlcXVpcmVzIGNvbG9yIG9yIGdyYXlzY2FsZSBkaXNwbGF5IikpKQoKOzs7IyMjYXV0 b2xvYWQKKGRlZnVuIGhpZ2hsaWdodC1jaGFuZ2VzLW5leHQtY2hhbmdlICgpCiAgIk1vdmUgdG8g dGhlIGJlZ2lubmluZyBvZiB0aGUgbmV4dCBjaGFuZ2UsIGlmIGluIEhpZ2hsaWdodCBDaGFuZ2Vz IG1vZGUuIgogIChpbnRlcmFjdGl2ZSkKICAoaWYgaGlnaGxpZ2h0LWNoYW5nZXMtbW9kZQogICAg ICAobGV0ICgoc3RhcnQgKHBvaW50KSkKCSAgICBwcm9wKQoJKHNldHEgcHJvcCAoZ2V0LXRleHQt cHJvcGVydHkgKHBvaW50KSAnaGlsaXQtY2hnKSkKCShpZiBwcm9wCgkgICAgOzsgd2UgYXJlIGlu IGEgY2hhbmdlCgkgICAgKHNldHEgc3RhcnQgKG5leHQtc2luZ2xlLXByb3BlcnR5LWNoYW5nZSAo cG9pbnQpICdoaWxpdC1jaGcpKSkKCShpZiBzdGFydAoJICAgIChzZXRxIHN0YXJ0IChuZXh0LXNp bmdsZS1wcm9wZXJ0eS1jaGFuZ2Ugc3RhcnQgJ2hpbGl0LWNoZykpKQoJKGlmIHN0YXJ0CgkgICAg KGdvdG8tY2hhciBzdGFydCkKCSAgKG1lc3NhZ2UgIm5vIG5leHQgY2hhbmdlIikpKQogICAgKG1l c3NhZ2UgIlRoaXMgYnVmZmVyIGlzIG5vdCBpbiBIaWdobGlnaHQgQ2hhbmdlcyBtb2RlLiIpKSkK Cgo7OzsjIyNhdXRvbG9hZAooZGVmdW4gaGlnaGxpZ2h0LWNoYW5nZXMtcHJldmlvdXMtY2hhbmdl ICgpCiAgIk1vdmUgdG8gdGhlIGJlZ2lubmluZyBvZiB0aGUgcHJldmlvdXMgY2hhbmdlLCBpZiBp biBIaWdobGlnaHQgQ2hhbmdlcyBtb2RlLiIKICAoaW50ZXJhY3RpdmUpCiAgKGlmIGhpZ2hsaWdo dC1jaGFuZ2VzLW1vZGUKICAgICAgKGxldCAoIChzdGFydCAocG9pbnQpKSAocHJvcCBuaWwpICkK CShvciAoYm9icCkKCSAgICAoc2V0cSBwcm9wIChnZXQtdGV4dC1wcm9wZXJ0eSAoMS0gKHBvaW50 KSkgJ2hpbGl0LWNoZykpKQoJKGlmIHByb3AKCSAgICA7OyB3ZSBhcmUgaW4gYSBjaGFuZ2UKCSAg ICAoc2V0cSBzdGFydCAocHJldmlvdXMtc2luZ2xlLXByb3BlcnR5LWNoYW5nZSAocG9pbnQpICdo aWxpdC1jaGcpKSkKCShpZiBzdGFydAoJICAgIChzZXRxIHN0YXJ0IChwcmV2aW91cy1zaW5nbGUt cHJvcGVydHktY2hhbmdlIHN0YXJ0ICdoaWxpdC1jaGcpKSkKCTs7IHNwZWNpYWwgaGFuZGxpbmcg Zm9yIHRoZSBjYXNlIHdoZXJlIChwb2ludC1taW4pIGlzIGEgY2hhbmdlCgkoaWYgc3RhcnQKCSAg ICAoc2V0cSBzdGFydCAob3IgKHByZXZpb3VzLXNpbmdsZS1wcm9wZXJ0eS1jaGFuZ2Ugc3RhcnQg J2hpbGl0LWNoZykKCQkJICAgIChpZiAoZ2V0LXRleHQtcHJvcGVydHkgKHBvaW50LW1pbikgJ2hp bGl0LWNoZykKCQkJCShwb2ludC1taW4pKSkpKQoJKGlmIHN0YXJ0CgkgICAgKGdvdG8tY2hhciBz dGFydCkKCSAgKG1lc3NhZ2UgIm5vIHByZXZpb3VzIGNoYW5nZSIpKSkKICAgIChtZXNzYWdlICJU aGlzIGJ1ZmZlciBpcyBub3QgaW4gSGlnaGxpZ2h0IENoYW5nZXMgbW9kZS4iKSkpCgoKOzs7IyMj YXV0b2xvYWQKKGRlZnVuIGhpZ2hsaWdodC1jaGFuZ2VzLXRvZ2dsZS12aXNpYmlsaXR5ICgmb3B0 aW9uYWwgYXJnKQogICJUb2dnbGUgd2hldGhlciBjaGFuZ2VzIGFyZSB2aXNpYmxlIGluIEhpZ2hs aWdodCBDaGFuZ2VzIG1vZGVzLgpXaGlsZSB0aGUgY2hhbmdlcyBhcmUgc3RpbGwga2VwdCAoYW5k IG5ldyBvbmVzIHJlY29yZGVkKSBhcyBsb25nIGFzCkhpZ2hsaWdodCBDaGFuZ2VzIG1vZGVzIGlz IG9uLCB0aGVpciBkaXN0aW5jdGl2ZSBkaXNwbGF5IGNhbiBiZQp0b2dnbGVkIG9uIGFuZCBvZmYg dXNpbmcgdGhpcyBjb21tYW5kLiAgV2l0aCBBUkcsICBlbmFibGUgdGhlCmRpc3RpbmN0aXZlIGRp c3BsYXkgaWYgYW5kIG9ubHkgaWYgdGhlIGFyZyBpcyBwb3NpdGl2ZS4KClNldCB2YXJpYWJsZSBg aGlnaGxpZ2h0LWNoYW5nZXMtdmlzaWJsZS1wJyBpZiB5b3Ugd2FudCB0byBjaGFuZ2UgdGhlIGRl ZmF1bHQKYmVoYXZpb3VyLgoKVGhpcyBjb21tYW5kIHR1cm5zIG9uIGhpZ2hsaWdodC1jaGFuZ2Vz IG1vZGUuIgogIChpbnRlcmFjdGl2ZSAiUCIpCiAgKGxldCAoKG9sZC12YWx1ZSBoaWdobGlnaHQt Y2hhbmdlcy12aXNpYmxlLXApKQogICAgKHNldHEgaGlnaGxpZ2h0LWNoYW5nZXMtdmlzaWJsZS1w CgkgIChpZiAobnVsbCBhcmcpCgkgICAgICAobm90IGhpZ2hsaWdodC1jaGFuZ2VzLXZpc2libGUt cCkKCSAgICAoPiAocHJlZml4LW51bWVyaWMtdmFsdWUgYXJnKSAwKSkpCiAgICAodW5sZXNzIChl cSBvbGQtdmFsdWUgaGlnaGxpZ2h0LWNoYW5nZXMtdmlzaWJsZS1wKQogICAgICAobWVzc2FnZSAi Y2hhbmdlcyB3aWxsIG5vdyBiZSAlcyIKCSAgICAgICAoaWYgaGlnaGxpZ2h0LWNoYW5nZXMtdmlz aWJsZS1wICJ2aXNpYmxlIiAiaW52aXNpYmxlIikpCiAgICAgIChoaWxpdC1jaGctc2V0KSkKICAg ICkpCgkgIAogICAgICAKOzsgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CgooZGVmdW4gaGlsaXQtY2hnLW1ha2Ut bGlzdCAoJm9wdGlvbmFsIGZvcmNlKQogICJDb25zdHJ1Y3QgYGhpbGl0LWNoZy1saXN0JyBhbmQg YGhpZ2hsaWdodC1jaGFuZ2VzLWZhY2UtbGlzdCcuIgogIDs7IENvbnN0cnVjdHMgaGlnaGxpZ2h0 LWNoYW5nZXMtZmFjZS1saXN0IGlmIG5lY2Vzc2FyeSwKICA7OyBhbmQgaGlsaXQtY2hnLWxpc3Qg YWx3YXlzOgogIDs7IE1heWJlIHRoaXMgc2hvdWxkIGFsd2F5cyBiZSBjYWxsZWQgd2hlbiByb3Rh dGluZyBhIGZhY2UKICA7OyBzbyB3ZSBwaWNrIHVwIGFueSBjaGFuZ2VzPwogIChpZiAob3IgKG51 bGwgaGlnaGxpZ2h0LWNoYW5nZXMtZmFjZS1saXN0KSAgOyBEb24ndCBkbyBpdCBpZiBpdAoJICBm b3JjZSkgOyBhbHJlYWR5IGV4aXN0cyB1bmxlc3MgRk9SQ0Ugbm9uLW5pbC4KICAgICAgKGxldCAo KHAgaGlnaGxpZ2h0LWNoYW5nZXMtY29sb3VycykKCSAgICAobiAxKSBuYW1lKQoJKHNldHEgaGln aGxpZ2h0LWNoYW5nZXMtZmFjZS1saXN0IG5pbCkKCSh3aGlsZSBwCgkgIChzZXRxIG5hbWUgKGlu dGVybiAoZm9ybWF0ICJoaWdobGlnaHQtY2hhbmdlcy1mYWNlLSVkIiBuKSkpCgkgIChjb3B5LWZh Y2UgJ2hpZ2hsaWdodC1jaGFuZ2VzLWZhY2UgbmFtZSkKCSAgKHNldC1mYWNlLWZvcmVncm91bmQg bmFtZSAoY2FyIHApKQoJICAoc2V0cSBoaWdobGlnaHQtY2hhbmdlcy1mYWNlLWxpc3QKCQkoYXBw ZW5kIGhpZ2hsaWdodC1jaGFuZ2VzLWZhY2UtbGlzdCAobGlzdCBuYW1lKSkpCgkgIChzZXRxIHAg KGNkciBwKSkKCSAgKHNldHEgbiAoMSsgbikpKSkpCiAgKHNldHEgaGlsaXQtY2hnLWxpc3QgKGxp c3QgJ2hpbGl0LWNoZyAnaGlnaGxpZ2h0LWNoYW5nZXMtZmFjZSkpCiAgKGxldCAoKHAgaGlnaGxp Z2h0LWNoYW5nZXMtZmFjZS1saXN0KQoJKG4gMSkKCWxhc3QtY2F0ZWdvcnkgbGFzdC1mYWNlKQog ICAgKHdoaWxlIHAKICAgICAgKHNldHEgbGFzdC1jYXRlZ29yeSAoaW50ZXJuIChmb3JtYXQgImNo YW5nZS0lZCIgbikpKQogICAgICA7OyAoc2V0cSBsYXN0LWZhY2UgKGludGVybiAoZm9ybWF0ICJo aWdobGlnaHQtY2hhbmdlcy1mYWNlLSVkIiBuKSkpCiAgICAgIChzZXRxIGxhc3QtZmFjZSAoY2Fy IHApKQogICAgICAoc2V0cSBoaWxpdC1jaGctbGlzdAoJICAgIChhcHBlbmQgaGlsaXQtY2hnLWxp c3QKCQkgICAgKGxpc3QgbGFzdC1jYXRlZ29yeSBsYXN0LWZhY2UpKSkKICAgICAgKHNldHEgcCAo Y2RyIHApKQogICAgICAoc2V0cSBuICgxKyBuKSkpCiAgICAoc2V0cSBoaWxpdC1jaGctbGlzdAoJ ICAoYXBwZW5kIGhpbGl0LWNoZy1saXN0CgkJICAobGlzdCBsYXN0LWNhdGVnb3J5IGxhc3QtZmFj ZSkpKSkpCgooZGVmdW4gaGlsaXQtY2hnLWJ1bXAtY2hhbmdlIChwcm9wIHN0YXJ0IGVuZCkKICAi SW5jcmVtZW50IChhZ2UpIHRoZSBIaWdobGlnaHQgQ2hhbmdlcyBtb2RlIHRleHQgcHJvcGVydHku IgogIChsZXQgKCBuZXctcHJvcCApCiAgICAoaWYgKGVxIHByb3AgJ2hpbGl0LWNoZy1kZWxldGUp Cgkoc2V0cSBuZXctcHJvcCAobnRoIDIgaGlsaXQtY2hnLWxpc3QpKQogICAgICAoc2V0cSBuZXct cHJvcCAobnRoIDIgKG1lbWJlciBwcm9wIGhpbGl0LWNoZy1saXN0KSkpKQogICAgKGlmIHByb3AK CShwdXQtdGV4dC1wcm9wZXJ0eSBzdGFydCBlbmQgJ2hpbGl0LWNoZyBuZXctcHJvcCkKICAgICAg KG1lc3NhZ2UgIiVkLSVkIHVua25vd24gcHJvcGVydHkgJXMgbm90IGNoYW5nZWQiIHN0YXJ0IGVu ZCBwcm9wKSkpKQoKOzs7IyMjYXV0b2xvYWQKKGRlZnVuIGhpZ2hsaWdodC1jaGFuZ2VzLXJvdGF0 ZS1mYWNlcyAoKQogICJSb3RhdGUgdGhlIGZhY2VzIHVzZWQgYnkgSGlnaGxpZ2h0IENoYW5nZXMg bW9kZS4KCkN1cnJlbnQgY2hhbmdlcyBhcmUgZGlzcGxheWVkIGluIHRoZSBmYWNlIGRlc2NyaWJl ZCBieSB0aGUgZmlyc3QgZWxlbWVudApvZiBgaGlnaGxpZ2h0LWNoYW5nZXMtZmFjZS1saXN0Jywg b25lIGxldmVsIG9sZGVyIGNoYW5nZXMgYXJlIHNob3duIGluCmZhY2UgZGVzY3JpYmVkIGJ5IHRo ZSBzZWNvbmQgZWxlbWVudCwgYW5kIHNvIG9uLiAgVmVyeSBvbGQgY2hhbmdlcyByZW1haW4Kc2hv d24gaW4gdGhlIGxhc3QgZmFjZSBpbiB0aGUgbGlzdC4KCllvdSBjYW4gYXV0b21hdGljYWxseSBy b3RhdGUgY29sb3VycyB3aGVuIHRoZSBidWZmZXIgaXMgc2F2ZWQKYnkgYWRkaW5nIHRoZSBmb2xs b3dpbmcgdG8gYGxvY2FsLXdyaXRlLWZpbGUtaG9va3MnLCBieSBldmFsaW5nIGl0IGluIHRoZQpi dWZmZXIgdG8gYmUgc2F2ZWQpOgoKICBcKGFkZC1ob29rICdsb2NhbC13cml0ZS1maWxlLWhvb2tz ICdoaWdobGlnaHQtY2hhbmdlcy1yb3RhdGUtZmFjZXMpIgogIChpbnRlcmFjdGl2ZSkKICA7OyBJ ZiBub3QgaW4gYWN0aXZlIG1vZGUgZG8gbm90aGluZyBidXQgZG9uJ3QgY29tcGxhaW4gYmVjYXVz ZSB0aGlzCiAgOzsgbWF5IGJlIGJvdW5kIHRvIGEgaG9vay4KICAoaWYgKGFuZCBoaWdobGlnaHQt Y2hhbmdlcy1tb2RlCgkgICBoaWdobGlnaHQtY2hhbmdlcy12aXNpYmxlLXApCiAgICAgIChsZXQg KChhZnRlci1jaGFuZ2UtZnVuY3Rpb25zIG5pbCkpCgk7OyBlbnN1cmUgaGlsaXQtY2hnLWxpc3Qg aXMgbWFkZSBhbmQgdXAgdG8gZGF0ZQoJKGhpbGl0LWNoZy1tYWtlLWxpc3QpCgk7OyByZW1vdmUg b3VyIGV4aXN0aW5nIG92ZXJsYXlzCgkoaGlsaXQtY2hnLWhpZGUtY2hhbmdlcykKCTs7IGZvciBl YWNoIGNoYW5nZSB0ZXh0IHByb3BlcnR5LCBpbmNyZW1lbnQgaXQKCShoaWxpdC1jaGctbWFwLWNo YW5nZXMgJ2hpbGl0LWNoZy1idW1wLWNoYW5nZSkKCTs7IGFuZCBkaXNwbGF5IHRoZW0gYWxsIGlm IHZpc2libGUKCShpZiBoaWdobGlnaHQtY2hhbmdlcy12aXNpYmxlLXAKCSAgICAoaGlsaXQtY2hn LWRpc3BsYXktY2hhbmdlcykpKSkKICA7OyBUaGlzIGFsd2F5cyByZXR1cm5zIG5pbCBzbyBpdCBp cyBzYWZlIHRvIHVzZSBpbgogIDs7IGxvY2FsLXdyaXRlLWZpbGUtaG9vawogIG5pbCkKCjs7ID09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PQo7OyBDb21wYXJpbmcgYnVmZmVycy9maWxlcwo7OyBUaGVzZSB1c2UgZWRp ZmYgdG8gZmluZCB0aGUgZGlmZmVyZW5jZXMuCgooZGVmdW4gaGlnaGxpZ2h0LW1hcmt1cC1idWZm ZXJzCiAgKGJ1Zi1hIGZpbGUtYSBidWYtYiBmaWxlLWIgJm9wdGlvbmFsIG1hcmt1cC1hLW9ubHkp CiAgIkdldCBkaWZmZXJlbmNlcyBiZXR3ZWVuIHR3byBidWZmZXJzIGFuZCBzZXQgaGlnaGxpZ2h0 IGNoYW5nZXMuCkJvdGggYnVmZmVycyBhcmUgZG9uZSB1bmxlc3Mgb3B0aW9uYWwgcGFyYW1ldGVy IE1BUktVUC1BLU9OTFkKaXMgbm9uLW5pbC4iCiAgKHJlcXVpcmUgJ2VkaWZmLXV0aWwpCiAgKHNh dmUtd2luZG93LWV4Y3Vyc2lvbgogICAgKGxldCogKGNoYW5nZS1pbmZvCgkgICBjaGFuZ2UtYSBj aGFuZ2UtYgoJICAgYS1zdGFydCBhLWVuZCBsZW4tYQoJICAgYi1zdGFydCBiLWVuZCBsZW4tYgoJ ICAgKGJ1ZmEtbW9kaWZpZWQgKGJ1ZmZlci1tb2RpZmllZC1wIGJ1Zi1hKSkKCSAgIChidWZiLW1v ZGlmaWVkIChidWZmZXItbW9kaWZpZWQtcCBidWYtYikpCgkgICAoYnVmLWEtcmVhZC1vbmx5ICh3 aXRoLWN1cnJlbnQtYnVmZmVyIGJ1Zi1hIGJ1ZmZlci1yZWFkLW9ubHkpKQoJICAgKGJ1Zi1iLXJl YWQtb25seSAod2l0aC1jdXJyZW50LWJ1ZmZlciBidWYtYiBidWZmZXItcmVhZC1vbmx5KSkKCSAg IHRlbXAtYSB0ZW1wLWIpCiAgICAgIChpZiAoYW5kIGZpbGUtYSBidWZhLW1vZGlmaWVkKQoJICAo aWYgKHktb3Itbi1wIChmb3JtYXQgIlNhdmUgYnVmZmVyICVzPyAgIiBidWYtYSkpCgkgICAgICAo d2l0aC1jdXJyZW50LWJ1ZmZlciBidWYtYQoJCShzYXZlLWJ1ZmZlcikKCQkoc2V0cSBidWZhLW1v ZGlmaWVkIChidWZmZXItbW9kaWZpZWQtcCBidWYtYSkpKQoJICAgIChzZXRxIGZpbGUtYSBuaWwp KSkKICAgICAgKG9yIGZpbGUtYQoJICAoc2V0cSB0ZW1wLWEgKHNldHEgZmlsZS1hIChlZGlmZi1t YWtlLXRlbXAtZmlsZSBidWYtYSBuaWwpKSkpCgogICAgICAoaWYgKGFuZCBmaWxlLWIgYnVmYi1t b2RpZmllZCkKCSAgKGlmICh5LW9yLW4tcCAoZm9ybWF0ICJTYXZlIGJ1ZmZlciAlcz8gICIgYnVm LWIpKQoJICAgICAgKHdpdGgtY3VycmVudC1idWZmZXIgYnVmLWIKCQkoc2F2ZS1idWZmZXIpCgkJ KHNldHEgYnVmYi1tb2RpZmllZCAoYnVmZmVyLW1vZGlmaWVkLXAgYnVmLWIpKSkKCSAgICAoc2V0 cSBmaWxlLWIgbmlsKSkpCiAgICAgIChvciBmaWxlLWIKCSAgKHNldHEgdGVtcC1iIChzZXRxIGZp bGUtYiAoZWRpZmYtbWFrZS10ZW1wLWZpbGUgYnVmLWIgbmlsKSkpKQogICAgICAoc2V0LWJ1ZmZl ciBidWYtYSkKICAgICAgKGhpZ2hsaWdodC1jaGFuZ2VzLW1vZGUgJ2FjdGl2ZSkKICAgICAgKG9y IG1hcmt1cC1hLW9ubHkgKHdpdGgtY3VycmVudC1idWZmZXIgYnVmLWIKCQkJICAoaGlnaGxpZ2h0 LWNoYW5nZXMtbW9kZSAnYWN0aXZlKSkpCiAgICAgIChzZXRxIGNoYW5nZS1pbmZvIChoaWxpdC1j aGctZ2V0LWRpZmYtaW5mbyBidWYtYSBmaWxlLWEgYnVmLWIgZmlsZS1iKSkKCgogICAgICAoc2V0 cSBjaGFuZ2UtYSAoY2FyIGNoYW5nZS1pbmZvKSkKICAgICAgKHNldHEgY2hhbmdlLWIgKGNhciAo Y2RyIGNoYW5nZS1pbmZvKSkpCiAgICAgIAogICAgICAoaGlsaXQtY2hnLW1ha2UtbGlzdCkKICAg ICAgKHdoaWxlIGNoYW5nZS1hCgkoc2V0cSBhLXN0YXJ0IChudGggMCAoY2FyIGNoYW5nZS1hKSkp Cgkoc2V0cSBhLWVuZCAobnRoIDEgKGNhciBjaGFuZ2UtYSkpKQoJKHNldHEgYi1zdGFydCAobnRo IDAgKGNhciBjaGFuZ2UtYikpKQoJKHNldHEgYi1lbmQgKG50aCAxIChjYXIgY2hhbmdlLWIpKSkK CShzZXRxIGxlbi1hICgtIGEtZW5kIGEtc3RhcnQpKQoJKHNldHEgbGVuLWIgKC0gYi1lbmQgYi1z dGFydCkpCgkoc2V0LWJ1ZmZlciBidWYtYSkKCShoaWxpdC1jaGctc2V0LWZhY2Utb24tY2hhbmdl IGEtc3RhcnQgYS1lbmQgbGVuLWIgYnVmLWEtcmVhZC1vbmx5KQoJKG9yIG1hcmt1cC1hLW9ubHkK CSAgICAod2l0aC1jdXJyZW50LWJ1ZmZlciBidWYtYgoJICAgICAgKGhpbGl0LWNoZy1zZXQtZmFj ZS1vbi1jaGFuZ2UgYi1zdGFydCBiLWVuZCBsZW4tYQoJCQkJCSAgICBidWYtYi1yZWFkLW9ubHkp CgkgICAgICApKQoJKHNldHEgY2hhbmdlLWEgKGNkciBjaGFuZ2UtYSkpCgkoc2V0cSBjaGFuZ2Ut YiAoY2RyIGNoYW5nZS1iKSkpCiAgICAgIChvciBidWZhLW1vZGlmaWVkCgkgICh3aXRoLWN1cnJl bnQtYnVmZmVyIGJ1Zi1hIChzZXQtYnVmZmVyLW1vZGlmaWVkLXAgbmlsKSkpCiAgICAgIChvciBi dWZiLW1vZGlmaWVkCgkgICh3aXRoLWN1cnJlbnQtYnVmZmVyIGJ1Zi1iIChzZXQtYnVmZmVyLW1v ZGlmaWVkLXAgbmlsKSkpCiAgICAgIChpZiB0ZW1wLWEKCSAgKGRlbGV0ZS1maWxlIHRlbXAtYSkp CiAgICAgIChpZiB0ZW1wLWIKCSAgKGRlbGV0ZS1maWxlIHRlbXAtYikpKQogICAgKSkKCjs7OyMj I2F1dG9sb2FkCihkZWZ1biBoaWdobGlnaHQtY29tcGFyZS1idWZmZXJzIChidWYtYSBidWYtYikK IkNvbXBhcmUgdHdvIGJ1ZmZlcnMgYW5kIGhpZ2hsaWdodCB0aGUgZGlmZmVyZW5jZXMuCgpUaGUg ZGVmYXVsdCBpcyB0aGUgY3VycmVudCBidWZmZXIgYW5kIHRoZSBvbmUgaW4gdGhlIG5leHQgd2lu ZG93LgoKSWYgZWl0aGVyIGJ1ZmZlciBpcyBtb2RpZmllZCBhbmQgaXMgdmlzaXRpbmcgYSBmaWxl LCB5b3UgYXJlIHByb21wdGVkCnRvIHNhdmUgdGhlIGZpbGUuCgpVbmxlc3MgdGhlIGJ1ZmZlciBp cyB1bm1vZGlmaWVkIGFuZCB2aXNpdGluZyBhIGZpbGUsICB0aGUgYnVmZmVyIGlzCndyaXR0ZW4g dG8gYSB0ZW1wb3JhcnkgZmlsZSBmb3IgY29tcGFyaXNvbi4KCklmIGEgYnVmZmVyIGlzIHJlYWQt b25seSwgZGlmZmVyZW5jZXMgd2lsbCBiZSBoaWdobGlnaHRlZCBidXQgbm8gcHJvcGVydHkKY2hh bmdlcyBhcmUgbWFkZSwgc28gXFxbaGlnaGxpZ2h0LWNoYW5nZXMtbmV4dC1jaGFuZ2VdIGFuZApc XFtoaWdobGlnaHQtY2hhbmdlcy1wcmV2aW91cy1jaGFuZ2VdIHdpbGwgbm90IHdvcmsuIgogIChp bnRlcmFjdGl2ZQogICAobGlzdAogICAgKGdldC1idWZmZXIgKHJlYWQtYnVmZmVyICJidWZmZXIt YSAiIChjdXJyZW50LWJ1ZmZlcikgdCkpCiAgICAoZ2V0LWJ1ZmZlcgogICAgIChyZWFkLWJ1ZmZl ciAiYnVmZmVyLWIgIgoJCSAgKHdpbmRvdy1idWZmZXIgKG5leHQtd2luZG93IChzZWxlY3RlZC13 aW5kb3cpKSkgdCkpKSkKICAobGV0ICgoZmlsZS1hIChidWZmZXItZmlsZS1uYW1lIGJ1Zi1hKSkK CShmaWxlLWIgKGJ1ZmZlci1maWxlLW5hbWUgYnVmLWIpKSkKICAgIChoaWdobGlnaHQtbWFya3Vw LWJ1ZmZlcnMgYnVmLWEgZmlsZS1hIGJ1Zi1iIGZpbGUtYikKICAgICkpCgo7OzsjIyNhdXRvbG9h ZAooZGVmdW4gaGlnaGxpZ2h0LWNvbXBhcmUtd2l0aC1maWxlIChmaWxlLWIpCiAgIkNvbXBhcmUg dGhpcyBidWZmZXIgd2l0aCBhIGZpbGUsIGFuZCBoaWdobGlnaHQgZGlmZmVyZW5jZXMuCgpJZiB0 aGUgYnVmZmVyIGhhcyBhIGJhY2t1cCBmaWxlbmFtZSwgaXQgaXMgdXNlZCBhcyB0aGUgZGVmYXVs dCB3aGVuCnRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGludGVyYWN0aXZlbHkuCgpJZiB0aGUgY3Vy cmVudCBidWZmZXIgaXMgdmlzaXRpbmcgdGhlIGZpbGUgYmVpbmcgY29tcGFyZWQgYWdhaW5zdCwg aXQKYWxzbyB3aWxsIGhhdmUgaXRzIGRpZmZlcmVuY2VzIGhpZ2hsaWdodGVkLiAgT3RoZXJ3aXNl LCB0aGUgZmlsZSBpcwpyZWFkIGluIHRlbXBvcmFyaWx5IGJ1dCB0aGUgYnVmZmVyIGlzIGRlbGV0 ZWQuCgpJZiB0aGUgYnVmZmVyIGlzIHJlYWQtb25seSwgZGlmZmVyZW5jZXMgd2lsbCBiZSBoaWdo bGlnaHRlZCBidXQgbm8gcHJvcGVydHkKY2hhbmdlcyBhcmUgbWFkZSwgc28gXFxbaGlnaGxpZ2h0 LWNoYW5nZXMtbmV4dC1jaGFuZ2VdIGFuZApcXFtoaWdobGlnaHQtY2hhbmdlcy1wcmV2aW91cy1j aGFuZ2VdIHdpbGwgbm90IHdvcmsuIgogIChpbnRlcmFjdGl2ZSAobGlzdAoJICAgICAgKHJlYWQt ZmlsZS1uYW1lCgkgICAgICAgIkZpbGUgdG8gY29tcGFyZSB3aXRoPyAiIDs7IHByb21wdAoJICAg ICAgICIiCQkJOzsgZGlyZWN0b3J5CgkgICAgICAgbmlsCQkJOzsgZGVmYXVsdAoJICAgICAgICd5 ZXMJCQk7OyBtdXN0IGV4aXN0CgkgICAgICAgKGxldCAoKGYgKGJ1ZmZlci1maWxlLW5hbWUgKGN1 cnJlbnQtYnVmZmVyKSkpKSA7OyBpbml0aWFsCgkJIChpZiBmCgkJICAgICAocHJvZ24KCQkgICAg ICAgKHNldHEgZiAobWFrZS1iYWNrdXAtZmlsZS1uYW1lIGYpKQoJCSAgICAgICAob3IgKGZpbGUt ZXhpc3RzLXAgZikKCQkJICAgKHNldHEgZiBuaWwpKSkpCgkJIGYpKSkpCiAgKGxldCogKChidWYt YSAoY3VycmVudC1idWZmZXIpKQoJIChmaWxlLWEgKGJ1ZmZlci1maWxlLW5hbWUpKQoJIChleGlz dGluZy1idWYgKGdldC1maWxlLWJ1ZmZlciBmaWxlLWIpKQoJIChidWYtYiAob3IgZXhpc3Rpbmct YnVmCgkJICAgIChmaW5kLWZpbGUtbm9zZWxlY3QgZmlsZS1iKSkpCgkgKGJ1Zi1iLXJlYWQtb25s eSAod2l0aC1jdXJyZW50LWJ1ZmZlciBidWYtYiBidWZmZXItcmVhZC1vbmx5KSkpCiAgICAoaGln aGxpZ2h0LW1hcmt1cC1idWZmZXJzIGJ1Zi1hIGZpbGUtYSBidWYtYiBmaWxlLWIgKG5vdCBleGlz dGluZy1idWYpKQogICAgKHVubGVzcyBleGlzdGluZy1idWYKICAgICAgKGtpbGwtYnVmZmVyIGJ1 Zi1iKSkKICAgICkpCgoKKGRlZnVuIGhpbGl0LWNoZy1nZXQtZGlmZi1pbmZvIChidWYtYSBmaWxl LWEgYnVmLWIgZmlsZS1iKQogIChsZXQgKChlIG5pbCkgeCB5KSAgIDs7IGUgaXMgc2V0IGJ5IGZ1 bmN0aW9uIGhpbGl0LWNoZy1nZXQtZGlmZi1saXN0LWhrCiAgICAoZWRpZmYtc2V0dXAgYnVmLWEg ZmlsZS1hIGJ1Zi1iIGZpbGUtYgoJICAgICAgIG5pbCBuaWwgICA7IGJ1Zi1jIGZpbGUtQwoJICAg ICAgICdoaWxpdC1jaGctZ2V0LWRpZmYtbGlzdC1oawoJICAgICAgIChsaXN0IChjb25zICdlZGlm Zi1qb2ItbmFtZSAnc29tZXRoaW5nKSkKCSAgICAgICApCiAgICAoZWRpZmYtd2l0aC1jdXJyZW50 LWJ1ZmZlciBlIChlZGlmZi1yZWFsbHktcXVpdCBuaWwpKQogICAgKGxpc3QgeCB5KSkpCgoKKGRl ZnVuIGhpbGl0LWNoZy1nZXQtZGlmZi1saXN0LWhrICgpCiAgOzsgeCBhbmQgeSBhcmUgZHluYW1p Y2FsbHkgYm91bmQgYnkgaGlsaXQtY2hnLWdldC1kaWZmLWluZm8KICA7OyB3aGljaCBjYWxscyB0 aGlzIGZ1bmN0aW9uIGFzIGEgaG9vawogIChkZWZ2YXIgeCkgIDs7IHBsYWNhdGUgdGhlIGJ5dGUt Y29tcGlsZXIKICAoZGVmdmFyIHkpCiAgKHNldHEgIGUgKGN1cnJlbnQtYnVmZmVyKSkKICAobGV0 ICgobiAwKSBleHRlbnQgcCB2YSB2YiBhIGIpCiAgICAoc2V0cSAgeCBuaWwgIHkgbmlsKSAgICA7 OyB4IGFuZCB5IGFyZSBib3VuZCBieSBoaWxpdC1jaGctZ2V0LWRpZmYtaW5mbwogICAgKHdoaWxl ICg8IG4gZWRpZmYtbnVtYmVyLW9mLWRpZmZlcmVuY2VzKQogICAgICAoZWRpZmYtbWFrZS1maW5l LWRpZmZzIG4pCiAgICAgIChzZXRxIHZhIChlZGlmZi1nZXQtZmluZS1kaWZmLXZlY3RvciBuICdB KSkKICAgICAgOzsgdmEgaXMgYSB2ZWN0b3IgaWYgdGhlcmUgYXJlIGZpbmUgZGlmZmVyZW5jZXMK ICAgICAgKGlmIHZhCgkgIChzZXRxIGEgKGFwcGVuZCB2YSBuaWwpKQoJOzsgaWYgbm90LCBnZXQg dGhlIHVucmVmaW5lZCBkaWZmZXJlbmNlCgkoc2V0cSB2YSAoZWRpZmYtZ2V0LWRpZmZlcmVuY2Ug biAnQSkpCgkoc2V0cSBhIChsaXN0IChlbHQgdmEgMCkpKSkKICAgICAgOzsgYSBsaXN0IGEgbGlz dAogICAgICAoc2V0cSBwIGEpCiAgICAgICh3aGlsZSBwCgkoc2V0cSBleHRlbnQgKGxpc3QgKG92 ZXJsYXktc3RhcnQgKGNhciBwKSkKCQkJICAgKG92ZXJsYXktZW5kIChjYXIgcCkpKSkKCShzZXRx IHAgKGNkciBwKSkKCShzZXRxIHggKGFwcGVuZCB4IChsaXN0IGV4dGVudCkgKSkpOzsgd2hpbGUg cAogICAgICA7OwogICAgICAoc2V0cSB2YiAoZWRpZmYtZ2V0LWZpbmUtZGlmZi12ZWN0b3IgbiAn QikpCiAgICAgIDs7IHZiIGlzIGEgdmVjdG9yCiAgICAgIChpZiB2YgoJICAoc2V0cSBiIChhcHBl bmQgdmIgbmlsKSkKCTs7IGlmIG5vdCwgZ2V0IHRoZSB1bnJlZmluZWQgZGlmZmVyZW5jZQoJKHNl dHEgdmIgKGVkaWZmLWdldC1kaWZmZXJlbmNlIG4gJ0IpKQoJKHNldHEgYiAobGlzdCAoZWx0IHZi IDApKSkpCiAgICAgIDs7IGIgbGlzdCBhIGxpc3QKICAgICAgKHNldHEgcCBiKQogICAgICAod2hp bGUgcAoJKHNldHEgZXh0ZW50IChsaXN0IChvdmVybGF5LXN0YXJ0IChjYXIgcCkpCgkJCSAgIChv dmVybGF5LWVuZCAoY2FyIHApKSkpCgkoc2V0cSBwIChjZHIgcCkpCgkoc2V0cSB5IChhcHBlbmQg eSAobGlzdCBleHRlbnQpICkpKQogICAgICAoc2V0cSBuICgxKyBuKSkpOzsgd2hpbGUKICAgIDs7 IGVkaWZmLXF1aXQgZG9lc24ndCB3b3JrIGhlcmUuCiAgICA7OyBObyBwb2ludCBpbiByZXR1cm5p bmcgYSB2YWx1ZSwgc2luY2UgdGhpcyBpcyBhIGhvb2sgZnVuY3Rpb24uCiAgICApKQoKOzsgPT09 PT09PT09PT09PT09PT09PT09PT0gYXV0b21hdGljIHN0dWZmID09PT09PT09PT09PT09Cgo7OyBH bG9iYWwgSGlnaGxpZ2h0IENoYW5nZXMgbW9kZSBpcyBtb2RlbGVkIGFmdGVyIEdsb2JhbCBGb250 LWxvY2sgbW9kZS4KOzsgVGhyZWUgaG9va3MgYXJlIHVzZWQgdG8gZ2FpbiBjb250cm9sLiAgV2hl biBHbG9iYWwgQ2hhbmdlcyBNb2RlIGlzCjs7IGVuYWJsZWQsIGBmaW5kLWZpbGUtaG9va3MnIGFu ZCBgY2hhbmdlLW1ham9yLW1vZGUtaG9vaycgYXJlIHNldC4KOzsgYGZpbmQtZmlsZS1ob29rcycg aXMgY2FsbGVkIHdoZW4gdmlzaXRpbmcgYSBmaWxlLCB0aGUgbmV3IG1vZGUgaXMKOzsga25vd24g YXQgdGhpcyB0aW1lLgo7OyBgY2hhbmdlLW1ham9yLW1vZGUtaG9vaycgaXMgY2FsbGVkIHdoZW4g YSBidWZmZXIgaXMgY2hhbmdpbmcgbW9kZS4KOzsgVGhpcyBjb3VsZCBiZSBiZWNhdXNlIG9mIGZp bmRpbmcgYSBmaWxlIGluIHdoaWNoIGNhc2UKOzsgYGZpbmQtZmlsZS1ob29rcycgaGFzIGFscmVh ZHkgYmVlbiBjYWxsZWQgYW5kIGhhcyBkb25lIGl0cyB3b3JrLgo7OyBIb3dldmVyLCBpdCBhbHNv IGNhdGNoZXMgdGhlIGNhc2Ugd2hlcmUgYSBuZXcgbW9kZSBpcyBiZWluZyBzZXQgYnkKOzsgdGhl IHVzZXIuICBIb3dldmVyLCBpdCBpcyBjYWxsZWQgZnJvbSBga2lsbC1hbGwtdmFyaWFibGVzJyBh bmQgYXQKOzsgdGhpcyB0aW1lIHRoZSBtb2RlIGlzIHRoZSBvbGQgbW9kZSwgd2hpY2ggaXMgbm90 IHdoYXQgd2Ugd2FudC4KOzsgU28sIG91ciBmdW5jdGlvbiB0ZW1wb3JhcmlseSBzZXRzIGBwb3N0 LWNvbW1hbmQtaG9vaycgd2hpY2ggd2lsbAo7OyBiZSBjYWxsZWQgYWZ0ZXIgdGhlIGJ1ZmZlciBo YXMgYmVlbiBjb21wbGV0ZWx5IHNldCB1cCAod2l0aCB0aGUgbmV3Cjs7IG1vZGUpLiAgSXQgdGhl biByZW1vdmVzIHRoZSBgcG9zdC1jb21tYW5kLWhvb2snLgo7OyBPbmUgb3RoZXIgd3JpbmtsZSAt IGV2ZXJ5IE0teCBjb21tYW5kIHJ1bnMgdGhlIGBjaGFuZ2UtbWFqb3ItbW9kZS1ob29rJwo7OyBz byB3ZSBpZ25vcmUgdGhpcyBieSBleGFtaW5pbmcgdGhlIGJ1ZmZlciBuYW1lLgoKCihkZWZ1biBo aWxpdC1jaGctbWFqb3ItbW9kZS1ob29rICgpCiAgKGFkZC1ob29rICdwb3N0LWNvbW1hbmQtaG9v ayAnaGlsaXQtY2hnLXBvc3QtY29tbWFuZC1ob29rKSkKCihkZWZ1biBoaWxpdC1jaGctcG9zdC1j b21tYW5kLWhvb2sgKCkKICA7OyBUaGlzIGlzIGNhbGxlZCBhZnRlciBjaGFuZ2luZyBhIG1ham9y IG1vZGUsIGJ1dCBhbHNvIGFmdGVyIGVhY2gKICA7OyBNLXggY29tbWFuZCwgaW4gd2hpY2ggY2Fz ZSB0aGUgY3VycmVudCBidWZmZXIgaXMgYSBtaW5pYnVmZmVyLgogIDs7IEluIHRoYXQgY2FzZSwg ZG8gbm90IGFjdCBvbiBpdCBoZXJlLCBidXQgZG9uJ3QgdHVybiBpdCBvZmYKICA7OyBlaXRoZXIs IHdlIHdpbGwgZ2V0IGNhbGxlZCBoZXJlIGFnYWluIHNvb24tYWZ0ZXIuCiAgOzsgQWxzbywgZG9u J3QgZW5hYmxlIGl0IGZvciBvdGhlciBzcGVjaWFsIGJ1ZmZlcnMuCiAgKGlmIChzdHJpbmctbWF0 Y2ggIl5bICpdIiAgKGJ1ZmZlci1uYW1lKSkKICAgICAgbmlsIDs7IChtZXNzYWdlICJpZ25vcmlu ZyB0aGlzIHBvc3QtY29tbWFuZC1ob29rIikKICAgIChyZW1vdmUtaG9vayAncG9zdC1jb21tYW5k LWhvb2sgJ2hpbGl0LWNoZy1wb3N0LWNvbW1hbmQtaG9vaykKICAgIDs7IFRoZSBmb2xsb3dpbmcg Y2hlY2sgaXNuJ3QgbmVjZXNzYXJ5LCBzaW5jZQogICAgOzsgaGlsaXQtY2hnLXR1cm4tb24tbWF5 YmUgbWFrZXMgdGhpcyBjaGVjayB0b28uCiAgICAob3IgaGlnaGxpZ2h0LWNoYW5nZXMtbW9kZQk7 OyBkb24ndCB0dXJuIGl0IG9uIGlmIGl0IGFscmVhZHkgaXMKCShoaWxpdC1jaGctdHVybi1vbi1t YXliZSkpKSkKCihkZWZ1biBoaWxpdC1jaGctY2hlY2stZ2xvYmFsICgpCiAgOzsgVGhpcyBpcyBj YWxsZWQgZnJvbSB0aGUgZmluZCBmaWxlIGhvb2suCiAgKGhpbGl0LWNoZy10dXJuLW9uLW1heWJl KSkKCgo7OzsjIyNhdXRvbG9hZAooZGVmdW4gZ2xvYmFsLWhpZ2hsaWdodC1jaGFuZ2VzICgmb3B0 aW9uYWwgYXJnKQogICJUdXJuIG9uIG9yIG9mZiBHbG9iYWwgSGlnaGxpZ2h0IENoYW5nZXMgbW9k ZS4KV2l0aCBBUkcsIHR1cm4gR2xvYmFsIEhpZ2hsaWdodCBDaGFuZ2VzIG1vZGUgb24gaWYgYW5k IG9ubHkgaWYgYXJnIGlzIHBvc2l0aXZlLgpXaGVuIGdsb2JhbCBIaWdobGlnaHQgQ2hhbmdlcyBt b2RlIGlzIGVuYWJsZWQsIEhpZ2hsaWdodCBDaGFuZ2VzIG1vZGUgaXMgdHVybmVkCm9uIGZvciBm dXR1cmUgXCJzdWl0YWJsZVwiIGJ1ZmZlcnMgKGFuZCBmb3IgXCJzdWl0YWJsZVwiIGV4aXN0aW5n IGJ1ZmZlcnMgaWYKdmFyaWFibGUgYGhpZ2hsaWdodC1jaGFuZ2VzLWdsb2JhbC1jaGFuZ2VzLWV4 aXN0aW5nLWJ1ZmZlcnMnIGlzIG5vbi1uaWwpLgpcIlN1aXRhYmlsaXR5XCIgaXMgZGV0ZXJtaW5l ZCBieSB2YXJpYWJsZSBgaGlnaGxpZ2h0LWNoYW5nZXMtZ2xvYmFsLW1vZGVzJy4iCiAgKGludGVy YWN0aXZlICJQIikKICAoc2V0cSBnbG9iYWwtaGlnaGxpZ2h0LWNoYW5nZXMKCShpZiAobnVsbCBh cmcpCgkgICAgKG5vdCBnbG9iYWwtaGlnaGxpZ2h0LWNoYW5nZXMpCgkgICg+IChwcmVmaXgtbnVt ZXJpYy12YWx1ZSBhcmcpIDApKSkKICAoaWYgZ2xvYmFsLWhpZ2hsaWdodC1jaGFuZ2VzCiAgICAg IChwcm9nbgoJKG1lc3NhZ2UgIlR1cm5pbmcgT04gR2xvYmFsIEhpZ2hsaWdodCBDaGFuZ2VzIG1v ZGUiKQoJKGFkZC1ob29rICdoaWxpdC1jaGctbWFqb3ItbW9kZS1ob29rICdoaWxpdC1jaGctbWFq b3ItbW9kZS1ob29rKQoJKGFkZC1ob29rICdmaW5kLWZpbGUtaG9va3MgJ2hpbGl0LWNoZy1jaGVj ay1nbG9iYWwpCgkoaWYgaGlnaGxpZ2h0LWNoYW5nZXMtZ2xvYmFsLWNoYW5nZXMtZXhpc3Rpbmct YnVmZmVycwoJICAgIChoaWxpdC1jaGctdXBkYXRlLWFsbC1idWZmZXJzIHQpKSkKICAgIChtZXNz YWdlICJUdXJuaW5nIE9GRiBnbG9iYWwgSGlnaGxpZ2h0IENoYW5nZXMgbW9kZSIpCiAgICAocmVt b3ZlLWhvb2sgJ2hpbGl0LWNoZy1tYWpvci1tb2RlLWhvb2sgJ2hpbGl0LWNoZy1tYWpvci1tb2Rl LWhvb2spCiAgICAocmVtb3ZlLWhvb2sgJ2ZpbmQtZmlsZS1ob29rcyAnaGlsaXQtY2hnLWNoZWNr LWdsb2JhbCkKICAgIChyZW1vdmUtaG9vayAncG9zdC1jb21tYW5kLWhvb2sKCQkgJ2hpbGl0LWNo Zy1wb3N0LWNvbW1hbmQtaG9vaykKICAgIChyZW1vdmUtaG9vayAnZmluZC1maWxlLWhvb2tzICdo aWxpdC1jaGctY2hlY2stZ2xvYmFsKQogICAgKGlmIGhpZ2hsaWdodC1jaGFuZ2VzLWdsb2JhbC1j aGFuZ2VzLWV4aXN0aW5nLWJ1ZmZlcnMKCShoaWxpdC1jaGctdXBkYXRlLWFsbC1idWZmZXJzIG5p bCkpKSkKCgooZGVmdW4gaGlsaXQtY2hnLXR1cm4tb24tbWF5YmUgKCkKICAiVHVybiBvbiBIaWdo bGlnaHQgQ2hhbmdlcyBtb2RlIGlmIGl0IGlzIGFwcHJvcHJpYXRlIGZvciB0aGlzIGJ1ZmZlci4K CkEgYnVmZmVyIGlzIGFwcHJvcHJpYXRlIGZvciBIaWdobGlnaHQgQ2hhbmdlcyBtb2RlIGlmIGFs bCB0aGVzZSBhcmUgdHJ1ZToKLSB0aGUgYnVmZmVyIGlzIG5vdCBhIHNwZWNpYWwgYnVmZmVyIChv bmUgd2hvc2UgbmFtZSBiZWdpbnMgd2l0aAogIGAqJyBvciBgICcpCi0gdGhlIGJ1ZmZlcidzIG1v ZGUgaXMgc3VpdGFibGUgYXMgcGVyIHZhcmlhYmxlCiAgYGhpZ2hsaWdodC1jaGFuZ2VzLWdsb2Jh bC1tb2RlcycKLSBIaWdobGlnaHQgQ2hhbmdlcyBtb2RlIGlzIG5vdCBhbHJlYWR5IG9uIGZvciB0 aGlzIGJ1ZmZlci4KClRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGZyb20gYGhpbGl0LWNoZy11cGRh dGUtYWxsLWJ1ZmZlcnMnIG9yCmZyb20gYGdsb2JhbC1oaWdobGlnaHQtY2hhbmdlcycgd2hlbiB0 dXJuaW5nIG9uIGdsb2JhbCBIaWdobGlnaHQgQ2hhbmdlcyBtb2RlLiIKICAob3IgaGlnaGxpZ2h0 LWNoYW5nZXMtbW9kZQkJCTsgZG8gbm90aGluZyBpZiBhbHJlYWR5IG9uCiAgICAgIChpZgoJICAo Y29uZAoJICAgKChudWxsIGhpZ2hsaWdodC1jaGFuZ2VzLWdsb2JhbC1tb2RlcykKCSAgICBuaWwp CgkgICAoKGZ1bmN0aW9ucCBoaWdobGlnaHQtY2hhbmdlcy1nbG9iYWwtbW9kZXMpCgkgICAgKGZ1 bmNhbGwgaGlnaGxpZ2h0LWNoYW5nZXMtZ2xvYmFsLW1vZGVzKSkKCSAgICAoKGxpc3RwIGhpZ2hs aWdodC1jaGFuZ2VzLWdsb2JhbC1tb2RlcykKCSAgICAgKGlmIChlcSAoY2FyLXNhZmUgaGlnaGxp Z2h0LWNoYW5nZXMtZ2xvYmFsLW1vZGVzKSAnbm90KQoJCSAobm90IChtZW1xIG1ham9yLW1vZGUg KGNkciBoaWdobGlnaHQtY2hhbmdlcy1nbG9iYWwtbW9kZXMpKSkKCSAgICAgICAobWVtcSBtYWpv ci1tb2RlIGhpZ2hsaWdodC1jaGFuZ2VzLWdsb2JhbC1tb2RlcykpKQoJICAgICh0CgkgICAgIChh bmQKCSAgICAgIChub3QgKHN0cmluZy1tYXRjaCAiXlsgKl0iICAoYnVmZmVyLW5hbWUpKSkKCSAg ICAgIChidWZmZXItZmlsZS1uYW1lKSkpKQoJICAocHJvZ24KCSAgICAoaGlsaXQtY2hnLXNldCkp CgkpKSkKCgooZGVmdW4gaGlsaXQtY2hnLXR1cm4tb2ZmLW1heWJlICgpCiAgKGlmIGhpZ2hsaWdo dC1jaGFuZ2VzLW1vZGUKICAgICAgKGhpbGl0LWNoZy1jbGVhcikpKQoKCihkZWZ1biBoaWxpdC1j aGctdXBkYXRlLWFsbC1idWZmZXJzICh2YWx1ZSkKICAobWFwY2FyCiAgIChmdW5jdGlvbiAobGFt YmRhIChidWZmZXIpCgkgICAgICAgKHdpdGgtY3VycmVudC1idWZmZXIgYnVmZmVyCgkJIChpZiB2 YWx1ZQoJCSAgICAgKGhpbGl0LWNoZy10dXJuLW9uLW1heWJlKQoJCSAgIChoaWxpdC1jaGctdHVy bi1vZmYtbWF5YmUpKQoJCSApKSkKICAgKGJ1ZmZlci1saXN0KSkpCgo7OyA9PT09PT09PT09PT09 PT09PT09PT0gZGVidWcgPT09PT09PT09PT09PT09PT09Cjs7IEZvciBkZWJ1ZyAmIHRlc3QgdXNl Ogo7Owo7OyAoZGVmdW4gaGlsaXQtY2hnLWRlYnVnLXNob3cgKCZvcHRpb25hbCBiZWcgZW5kKQo7 OyAgIChpbnRlcmFjdGl2ZSkKOzsgICAobWVzc2FnZSAiLS0tIGhpbGl0LWNoZy1kZWJ1Zy1zaG93 IC0tLSIpCjs7ICAgKGhpbGl0LWNoZy1tYXAtY2hhbmdlcyAnKGxhbWJkYSAocHJvcCBzdGFydCBl bmQpCjs7IAkJCSAgICAgIChtZXNzYWdlICIlZC0lZDogJXMiIHN0YXJ0IGVuZCBwcm9wKQo7OyAJ CQkgICAgICApCjs7IAkJCSAgIGJlZyBlbmQKOzsgCQkJICAgKSkKOzsKOzsgPT09PT09PT09PT09 PT09PT09IGVuZCBvZiBkZWJ1ZyA9PT09PT09PT09PT09PT0KCihwcm92aWRlICdoaWxpdC1jaGcp Cgo7OzsgaGlsaXQtY2hnLmVsIGVuZHMgaGVyZQo= --tv4TbZFz49 Content-Type: text/plain; charset=us-ascii Content-Description: message body text Content-Transfer-Encoding: 7bit Richard --tv4TbZFz49 Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Disposition: inline _______________________________________________ Emacs-devel mailing list Emacs-devel@gnu.org http://lists.gnu.org/mailman/listinfo/emacs-devel --tv4TbZFz49--