From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.org!not-for-mail From: martin rudalics Newsgroups: gmane.emacs.devel Subject: Re: New features in windowing Date: Tue, 20 Mar 2012 20:11:24 +0100 Message-ID: <4F68D65C.5020309@gmx.at> References: <4F683847.2010301@gmx.at> NNTP-Posting-Host: plane.gmane.org Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="------------080100070007060809070409" X-Trace: dough.gmane.org 1332270711 28663 80.91.229.3 (20 Mar 2012 19:11:51 GMT) X-Complaints-To: usenet@dough.gmane.org NNTP-Posting-Date: Tue, 20 Mar 2012 19:11:51 +0000 (UTC) Cc: emacs-devel@gnu.org To: Leo Original-X-From: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Tue Mar 20 20:11:48 2012 Return-path: Envelope-to: ged-emacs-devel@m.gmane.org Original-Received: from lists.gnu.org ([208.118.235.17]) by plane.gmane.org with esmtp (Exim 4.69) (envelope-from ) id 1SA4T7-0000yx-JA for ged-emacs-devel@m.gmane.org; Tue, 20 Mar 2012 20:11:42 +0100 Original-Received: from localhost ([::1]:57924 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1SA4T6-00066Q-PJ for ged-emacs-devel@m.gmane.org; Tue, 20 Mar 2012 15:11:40 -0400 Original-Received: from eggs.gnu.org ([208.118.235.92]:44044) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1SA4T2-00065h-LI for emacs-devel@gnu.org; Tue, 20 Mar 2012 15:11:38 -0400 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1SA4T0-0000Kd-Vk for emacs-devel@gnu.org; Tue, 20 Mar 2012 15:11:36 -0400 Original-Received: from mailout-de.gmx.net ([213.165.64.22]:59203) by eggs.gnu.org with smtp (Exim 4.71) (envelope-from ) id 1SA4Sz-0000KO-OI for emacs-devel@gnu.org; Tue, 20 Mar 2012 15:11:34 -0400 Original-Received: (qmail invoked by alias); 20 Mar 2012 19:11:29 -0000 Original-Received: from 62-47-58-32.adsl.highway.telekom.at (EHLO [62.47.58.32]) [62.47.58.32] by mail.gmx.net (mp002) with SMTP; 20 Mar 2012 20:11:29 +0100 X-Authenticated: #14592706 X-Provags-ID: V01U2FsdGVkX1/v0rgPdPbv9taCQgg8IJPiTUJ7D70bCYjWfR+m1l PKzuL3d7b0dIBD In-Reply-To: X-Y-GMX-Trusted: 0 X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 213.165.64.22 X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Original-Sender: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Xref: news.gmane.org gmane.emacs.devel:149145 Archived-At: This is a multi-part message in MIME format. --------------080100070007060809070409 Content-Type: text/plain; charset=ISO-8859-15; format=flowed Content-Transfer-Encoding: 7bit >>> I am playing with the new features in windows (as in emacs). I found >>> some window-parameters aren't documented such as window-side and >>> window-atom. >> Hopefully they will make it into Emacs 24.2. > > Do you mean those features are yet to be implemented? BTW, they were > mentioned in the elisp info file. The features that have to be re-implemented are the routines to set up the windows. Currently, you have to do that manually which works for cases like the one you describe but I want to handle multiple side windows on each frame. > Let me use this for illustration: > ______________________________________ > | ______ ____________________________ | > || || __________________________ || > || ||| ||| > || ||| ||| > || ||| ||| > || |||____________W4____________||| > || || __________________________ || > || ||| ||| > || ||| ||| > || |||____________W5____________||| > ||__W2__||_____________W3_____________ | > |__________________W1__________________| > > > If I put speedbar buffer in W2, I want those window operations to think > as if W3 is the ``frame root window''. So for example, C-x 1 should not > delete W2. C-x 0 should never have W2 occupy the whole frame. > > Is this currently possible? That's precisely what "making W2 a left side window" would stand for. > Unfortunately that would mean difficulty to try it out but I guess I can > wait until 24.1 is released. I attach a simple file you can load from your .emacs. You then should be able to create W2 via something like (display-buffer "SPEEDBAR" '(display-buffer-in-side-window (side . left) (slot . 0))) and tell me how it works. The sooner I get your feedback the sooner I will be able to adapt the concept appropriately. martin --------------080100070007060809070409 Content-Type: application/emacs-lisp; name="display-buffer.el" Content-Transfer-Encoding: base64 Content-Disposition: inline; filename="display-buffer.el" KGRlZnVuIGRpc3BsYXktYnVmZmVyLWluLXByZXZpb3VzLXdpbmRvdyAoYnVmZmVyIGFsaXN0 KQ0KICAiRGlzcGxheSBCVUZGRVIgaW4gYSB3aW5kb3cgcHJldmlvdXNseSBzaG93aW5nIGl0 Lg0KSWYgQUxJU1QgaGFzIGEgbm9uLW5pbCBgaW5oaWJpdC1zYW1lLXdpbmRvdycgZW50cnks IHRoZSBzZWxlY3RlZA0Kd2luZG93IGlzIG5vdCBlbGlnaWJsZSBmb3IgcmV1c2UuDQoNCklm IEFMSVNUIGNvbnRhaW5zIGEgYHJldXNhYmxlLWZyYW1lcycgZW50cnksIGl0cyB2YWx1ZSBk ZXRlcm1pbmVzDQp3aGljaCBmcmFtZXMgdG8gc2VhcmNoIGZvciBhIHJldXNhYmxlIHdpbmRv dzoNCiAgbmlsIC0tIHRoZSBzZWxlY3RlZCBmcmFtZSAoYWN0dWFsbHkgdGhlIGxhc3Qgbm9u LW1pbmlidWZmZXIgZnJhbWUpDQogIEEgZnJhbWUgICAtLSBqdXN0IHRoYXQgZnJhbWUNCiAg YHZpc2libGUnIC0tIGFsbCB2aXNpYmxlIGZyYW1lcw0KICAwICAgLS0gYWxsIGZyYW1lcyBv biB0aGUgY3VycmVudCB0ZXJtaW5hbA0KICB0ICAgLS0gYWxsIGZyYW1lcy4NCg0KSWYgQUxJ U1QgY29udGFpbnMgbm8gYHJldXNhYmxlLWZyYW1lcycgZW50cnksIHNlYXJjaCBqdXN0IHRo ZQ0Kc2VsZWN0ZWQgZnJhbWUgaWYgYGRpc3BsYXktYnVmZmVyLXJldXNlLWZyYW1lcycgYW5k DQpgcG9wLXVwLWZyYW1lcycgYXJlIGJvdGggbmlsOyBzZWFyY2ggYWxsIGZyYW1lcyBvbiB0 aGUgY3VycmVudA0KdGVybWluYWwgaWYgZWl0aGVyIG9mIHRob3NlIHZhcmlhYmxlcyBpcyBu b24tbmlsLiINCiAgKGxldCogKChhbGlzdC1lbnRyeSAoYXNzcSAncmV1c2FibGUtZnJhbWVz IGFsaXN0KSkNCgkgKGluaGliaXQtc2FtZS13aW5kb3cNCgkgIChjZHIgKGFzc3EgJ2luaGli aXQtc2FtZS13aW5kb3cgYWxpc3QpKSkNCgkgKGZyYW1lcyAoY29uZA0KCQkgIChhbGlzdC1l bnRyeSAoY2RyIGFsaXN0LWVudHJ5KSkNCgkJICAoKGlmIChlcSBwb3AtdXAtZnJhbWVzICdn cmFwaGljLW9ubHkpDQoJCSAgICAgICAoZGlzcGxheS1ncmFwaGljLXApDQoJCSAgICAgcG9w LXVwLWZyYW1lcykNCgkJICAgMCkNCgkJICAoZGlzcGxheS1idWZmZXItcmV1c2UtZnJhbWVz IDApDQoJCSAgKHQgKGxhc3Qtbm9ubWluaWJ1ZmZlci1mcmFtZSkpKSkNCgkgYmVzdC13aW5k b3cgc2Vjb25kLWJlc3Qtd2luZG93IHdpbmRvdykNCiAgICAoY2F0Y2ggJ2Jlc3QNCiAgICAg IChkb2xpc3QgKHdpbmRvdyAod2luZG93LWxpc3QtMSAoZnJhbWUtZmlyc3Qtd2luZG93KSAn bm9taW5pIGZyYW1lcykpDQoJKHdoZW4gKGFuZCAoYXNzcSBidWZmZXIgKHdpbmRvdy1wcmV2 LWJ1ZmZlcnMgd2luZG93KSkNCgkJICAgKG5vdCAod2luZG93LWRlZGljYXRlZC1wIHdpbmRv dykpKQ0KCSAgKGlmIChlcSB3aW5kb3cgKHNlbGVjdGVkLXdpbmRvdykpDQoJICAgICAgKHVu bGVzcyBpbmhpYml0LXNhbWUtd2luZG93DQoJCShzZXRxIHNlY29uZC1iZXN0LXdpbmRvdyB3 aW5kb3cpKQ0KCSAgICAoc2V0cSBiZXN0LXdpbmRvdyB3aW5kb3cpDQoJICAgICh0aHJvdyAn YmVzdCB0KSkpKSkNCg0KICAgICh3aGVuIChzZXRxIHdpbmRvdyAob3IgYmVzdC13aW5kb3cg c2Vjb25kLWJlc3Qtd2luZG93KSkNCiAgICAgIChkaXNwbGF5LWJ1ZmZlci1yZWNvcmQtd2lu ZG93ICdyZXVzZSB3aW5kb3cgYnVmZmVyKQ0KICAgICAgKHdpbmRvdy0tZGlzcGxheS1idWZm ZXItMiBidWZmZXIgd2luZG93IGRpc3BsYXktYnVmZmVyLW1hcmstZGVkaWNhdGVkKSkpKQ0K DQo7OyBGcm9tIHdpbmRvdy5lbC4NCihkZWZ1biBzcGxpdC13aW5kb3cgKCZvcHRpb25hbCB3 aW5kb3cgc2l6ZSBzaWRlKQ0KICAiTWFrZSBhIG5ldyB3aW5kb3cgYWRqYWNlbnQgdG8gV0lO RE9XLg0KV0lORE9XIGNhbiBiZSBhbnkgd2luZG93IGFuZCBkZWZhdWx0cyB0byB0aGUgc2Vs ZWN0ZWQgb25lLg0KUmV0dXJuIHRoZSBuZXcgd2luZG93IHdoaWNoIGlzIGFsd2F5cyBhIGxp dmUgd2luZG93Lg0KDQpPcHRpb25hbCBhcmd1bWVudCBTSVpFIGEgcG9zaXRpdmUgbnVtYmVy IG1lYW5zIG1ha2UgV0lORE9XIFNJWkUNCmxpbmVzIG9yIGNvbHVtbnMgdGFsbC4gIElmIFNJ WkUgaXMgbmVnYXRpdmUsIG1ha2UgdGhlIG5ldyB3aW5kb3cNCi1TSVpFIGxpbmVzIG9yIGNv bHVtbnMgdGFsbC4gIElmIGFuZCBvbmx5IGlmIFNJWkUgaXMgbm9uLW5pbCwgaXRzDQphYnNv bHV0ZSB2YWx1ZSBjYW4gYmUgbGVzcyB0aGFuIGB3aW5kb3ctbWluLWhlaWdodCcgb3INCmB3 aW5kb3ctbWluLXdpZHRoJzsgc28gdGhpcyBjb21tYW5kIGNhbiBtYWtlIGEgbmV3IHdpbmRv dyBhcw0Kc21hbGwgYXMgb25lIGxpbmUgb3IgdHdvIGNvbHVtbnMuICBTSVpFIGRlZmF1bHRz IHRvIGhhbGYgb2YNCldJTkRPVydzIHNpemUuICBJbnRlcmFjdGl2ZWx5LCBTSVpFIGlzIHRo ZSBwcmVmaXggYXJndW1lbnQuDQoNCk9wdGlvbmFsIHRoaXJkIGFyZ3VtZW50IFNJREUgbmls IChvciBgYmVsb3cnKSBzcGVjaWZpZXMgdGhhdCB0aGUNCm5ldyB3aW5kb3cgc2hhbGwgYmUg bG9jYXRlZCBiZWxvdyBXSU5ET1cuICBTSURFIGBhYm92ZScgbWVhbnMgdGhlDQpuZXcgd2lu ZG93IHNoYWxsIGJlIGxvY2F0ZWQgYWJvdmUgV0lORE9XLiAgSW4gYm90aCBjYXNlcyBTSVpF DQpzcGVjaWZpZXMgdGhlIG5ldyBudW1iZXIgb2YgbGluZXMgZm9yIFdJTkRPVyBcKG9yIHRo ZSBuZXcgd2luZG93DQppZiBTSVpFIGlzIG5lZ2F0aXZlKSBpbmNsdWRpbmcgc3BhY2UgcmVz ZXJ2ZWQgZm9yIHRoZSBtb2RlIGFuZC9vcg0KaGVhZGVyIGxpbmUuDQoNClNJREUgdCAob3Ig YHJpZ2h0Jykgc3BlY2lmaWVzIHRoYXQgdGhlIG5ldyB3aW5kb3cgc2hhbGwgYmUNCmxvY2F0 ZWQgb24gdGhlIHJpZ2h0IHNpZGUgb2YgV0lORE9XLiAgU0lERSBgbGVmdCcgbWVhbnMgdGhl IG5ldw0Kd2luZG93IHNoYWxsIGJlIGxvY2F0ZWQgb24gdGhlIGxlZnQgb2YgV0lORE9XLiAg SW4gYm90aCBjYXNlcw0KU0laRSBzcGVjaWZpZXMgdGhlIG5ldyBudW1iZXIgb2YgY29sdW1u cyBmb3IgV0lORE9XIFwob3IgdGhlIG5ldw0Kd2luZG93IHByb3ZpZGVkIFNJWkUgaXMgbmVn YXRpdmUpIGluY2x1ZGluZyBzcGFjZSByZXNlcnZlZCBmb3INCmZyaW5nZXMgYW5kIHRoZSBz Y3JvbGxiYXIgb3IgYSBkaXZpZGVyIGNvbHVtbi4gIEFueSBvdGhlciBub24tbmlsDQp2YWx1 ZSBmb3IgU0lERSBpcyBjdXJyZW50bHkgaGFuZGxlZCBsaWtlIHQgKG9yIGByaWdodCcpLg0K DQpJZiB0aGUgdmFyaWFibGUgYGlnbm9yZS13aW5kb3ctcGFyYW1ldGVycycgaXMgbm9uLW5p bCBvciB0aGUNCmBzcGxpdC13aW5kb3cnIHBhcmFtZXRlciBvZiBXSU5ET1cgZXF1YWxzIHQs IGRvIG5vdCBwcm9jZXNzIGFueQ0KcGFyYW1ldGVycyBvZiBXSU5ET1cuICBPdGhlcndpc2Us IGlmIHRoZSBgc3BsaXQtd2luZG93JyBwYXJhbWV0ZXINCm9mIFdJTkRPVyBzcGVjaWZpZXMg YSBmdW5jdGlvbiwgY2FsbCB0aGF0IGZ1bmN0aW9uIHdpdGggYWxsIHRocmVlDQphcmd1bWVu dHMgYW5kIHJldHVybiB0aGUgdmFsdWUgcmV0dXJuZWQgYnkgdGhhdCBmdW5jdGlvbi4NCg0K T3RoZXJ3aXNlLCBpZiBXSU5ET1cgaXMgcGFydCBvZiBhbiBhdG9taWMgd2luZG93LCBcInNw bGl0XCIgdGhlDQpyb290IG9mIHRoYXQgYXRvbWljIHdpbmRvdy4gIFRoZSBuZXcgd2luZG93 IGRvZXMgbm90IGJlY29tZSBhDQptZW1iZXIgb2YgdGhhdCBhdG9taWMgd2luZG93Lg0KDQpJ ZiBXSU5ET1cgaXMgbGl2ZSwgcHJvcGVydGllcyBvZiB0aGUgbmV3IHdpbmRvdyBsaWtlIG1h cmdpbnMgYW5kDQpzY3JvbGxiYXJzIGFyZSBpbmhlcml0ZWQgZnJvbSBXSU5ET1cuICBJZiBX SU5ET1cgaXMgYW4gaW50ZXJuYWwNCndpbmRvdywgdGhlc2UgcHJvcGVydGllcyBhcyB3ZWxs IGFzIHRoZSBidWZmZXIgZGlzcGxheWVkIGluIHRoZQ0KbmV3IHdpbmRvdyBhcmUgaW5oZXJp dGVkIGZyb20gdGhlIHdpbmRvdyBzZWxlY3RlZCBvbiBXSU5ET1cncw0KZnJhbWUuICBUaGUg c2VsZWN0ZWQgd2luZG93IGlzIG5vdCBjaGFuZ2VkIGJ5IHRoaXMgZnVuY3Rpb24uIg0KICAo aW50ZXJhY3RpdmUgImkiKQ0KICAoc2V0cSB3aW5kb3cgKHdpbmRvdy1ub3JtYWxpemUtd2lu ZG93IHdpbmRvdykpDQogIChsZXQqICgoc2lkZSAoY29uZA0KCQkoKG5vdCBzaWRlKSAnYmVs b3cpDQoJCSgobWVtcSBzaWRlICcoYmVsb3cgYWJvdmUgcmlnaHQgbGVmdCkpIHNpZGUpDQoJ CSh0ICdyaWdodCkpKQ0KCSAoaG9yaXpvbnRhbCAobm90IChtZW1xIHNpZGUgJyhiZWxvdyBh Ym92ZSkpKSkNCgkgKGZyYW1lICh3aW5kb3ctZnJhbWUgd2luZG93KSkNCgkgKHBhcmVudCAo d2luZG93LXBhcmVudCB3aW5kb3cpKQ0KCSAoZnVuY3Rpb24gKHdpbmRvdy1wYXJhbWV0ZXIg d2luZG93ICdzcGxpdC13aW5kb3cpKQ0KCSAod2luZG93LXNpZGUgKHdpbmRvdy1wYXJhbWV0 ZXIgd2luZG93ICd3aW5kb3ctc2lkZSkpDQoJIDs7IFJlYmluZCBgd2luZG93LWNvbWJpbmF0 aW9uLWxpbWl0JyBhbmQNCgkgOzsgYHdpbmRvdy1jb21iaW5hdGlvbi1yZXNpemUnIHNpbmNl IGluIHNvbWUgY2FzZXMgd2UgbWF5IGhhdmUNCgkgOzsgdG8gb3ZlcnJpZGUgdGhlaXIgdmFs dWUuDQoJICh3aW5kb3ctY29tYmluYXRpb24tbGltaXQgd2luZG93LWNvbWJpbmF0aW9uLWxp bWl0KQ0KCSAod2luZG93LWNvbWJpbmF0aW9uLXJlc2l6ZSB3aW5kb3ctY29tYmluYXRpb24t cmVzaXplKQ0KCSBhdG9tLXJvb3QpDQoNCiAgICAod2luZG93LS1jaGVjayBmcmFtZSkNCiAg ICAoY2F0Y2ggJ2RvbmUNCiAgICAgIChjb25kDQogICAgICAgOzsgSWdub3JlIHdpbmRvdyBw YXJhbWV0ZXJzIGlmIGVpdGhlciBgaWdub3JlLXdpbmRvdy1wYXJhbWV0ZXJzJw0KICAgICAg IDs7IGlzIHQgb3IgdGhlIGBzcGxpdC13aW5kb3cnIHBhcmFtZXRlciBlcXVhbHMgdC4NCiAg ICAgICAoKG9yIGlnbm9yZS13aW5kb3ctcGFyYW1ldGVycyAoZXEgZnVuY3Rpb24gdCkpKQ0K ICAgICAgICgoZnVuY3Rpb25wIGZ1bmN0aW9uKQ0KCTs7IFRoZSBgc3BsaXQtd2luZG93JyBw YXJhbWV0ZXIgc3BlY2lmaWVzIHRoZSBmdW5jdGlvbiB0byBjYWxsLg0KCTs7IElmIHRoYXQg ZnVuY3Rpb24gaXMgYGlnbm9yZScsIGRvIG5vdGhpbmcuDQoJKHRocm93ICdkb25lIChmdW5j YWxsIGZ1bmN0aW9uIHdpbmRvdyBzaXplIHNpZGUpKSkNCiAgICAgICA7OyBJZiBXSU5ET1cg aXMgcGFydCBvZiBhbiBhdG9taWMgd2luZG93LCBzcGxpdCB0aGUgcm9vdCB3aW5kb3cNCiAg ICAgICA7OyBvZiB0aGF0IGF0b21pYyB3aW5kb3cgaW5zdGVhZC4NCiAgICAgICAoKGFuZCAo d2luZG93LXBhcmFtZXRlciB3aW5kb3cgJ3dpbmRvdy1hdG9tKQ0KCSAgICAgKHNldHEgYXRv bS1yb290ICh3aW5kb3ctYXRvbS1yb290IHdpbmRvdykpDQoJICAgICAobm90IChlcSBhdG9t LXJvb3Qgd2luZG93KSkpDQoJKHRocm93ICdkb25lIChzcGxpdC13aW5kb3cgYXRvbS1yb290 IHNpemUgc2lkZSkpKQ0KICAgICAgIDs7IElmIFdJTkRPVyBpcyBhIHNpZGUgd2luZG93IG9y IGl0cyBmaXJzdCBvciBsYXN0IGNoaWxkIGlzIGENCiAgICAgICA7OyBzaWRlIHdpbmRvdywg dGhyb3cgYW4gZXJyb3IgdW5sZXNzIGB3aW5kb3ctY29tYmluYXRpb24tcmVzaXplJw0KICAg ICAgIDs7IGVxdWFscyAnc2lkZS4NCiAgICAgICAoKGFuZCAobm90IChlcSB3aW5kb3ctY29t YmluYXRpb24tcmVzaXplICdzaWRlKSkNCgkgICAgIChvciAod2luZG93LXBhcmFtZXRlciB3 aW5kb3cgJ3dpbmRvdy1zaWRlKQ0KCQkgKGFuZCAod2luZG93LWNoaWxkIHdpbmRvdykNCgkJ ICAgICAgKG9yICh3aW5kb3ctcGFyYW1ldGVyDQoJCQkgICAod2luZG93LWNoaWxkIHdpbmRv dykgJ3dpbmRvdy1zaWRlKQ0KCQkJICAod2luZG93LXBhcmFtZXRlcg0KCQkJICAgKHdpbmRv dy1sYXN0LWNoaWxkIHdpbmRvdykgJ3dpbmRvdy1zaWRlKSkpKSkNCgkoZXJyb3IgIkNhbm5v dCBzcGxpdCBzaWRlIHdpbmRvdyBvciBwYXJlbnQgb2Ygc2lkZSB3aW5kb3ciKSkNCiAgICAg ICA7OyBJZiBgd2luZG93LWNvbWJpbmF0aW9uLXJlc2l6ZScgaXMgJ3NpZGUgYW5kIHdpbmRv dyBoYXMgYSBzaWRlDQogICAgICAgOzsgd2luZG93IHNpYmxpbmcsIGJpbmQgYHdpbmRvdy1j b21iaW5hdGlvbi1saW1pdCcgdG8gdC4NCiAgICAgICAoKGFuZCAobm90IChlcSB3aW5kb3ct Y29tYmluYXRpb24tcmVzaXplICdzaWRlKSkNCgkgICAgIChvciAoYW5kICh3aW5kb3ctcHJl di1zaWJsaW5nIHdpbmRvdykNCgkJICAgICAgKHdpbmRvdy1wYXJhbWV0ZXINCgkJICAgICAg ICh3aW5kb3ctcHJldi1zaWJsaW5nIHdpbmRvdykgJ3dpbmRvdy1zaWRlKSkNCgkJIChhbmQg KHdpbmRvdy1uZXh0LXNpYmxpbmcgd2luZG93KQ0KCQkgICAgICAod2luZG93LXBhcmFtZXRl cg0KCQkgICAgICAgKHdpbmRvdy1uZXh0LXNpYmxpbmcgd2luZG93KSAnd2luZG93LXNpZGUp KSkpDQoJKHNldHEgd2luZG93LWNvbWJpbmF0aW9uLWxpbWl0IHQpKSkNCg0KICAgICAgOzsg SWYgYHdpbmRvdy1jb21iaW5hdGlvbi1yZXNpemUnIGlzIHQgYW5kIFNJWkUgaXMgbm9uLW5l Z2F0aXZlLA0KICAgICAgOzsgYmluZCBgd2luZG93LWNvbWJpbmF0aW9uLWxpbWl0JyB0byB0 Lg0KICAgICAgKHdoZW4gKGFuZCAoZXEgd2luZG93LWNvbWJpbmF0aW9uLXJlc2l6ZSB0KSBz aXplICg+IHNpemUgMCkpDQoJKHNldHEgd2luZG93LWNvbWJpbmF0aW9uLWxpbWl0IHQpKQ0K DQogICAgICAobGV0KiAoKHBhcmVudC1zaXplDQoJICAgICAgOzsgYHBhcmVudC1zaXplJyBp cyB0aGUgc2l6ZSBvZiBXSU5ET1cncyBwYXJlbnQsIHByb3ZpZGVkDQoJICAgICAgOzsgaXQg aGFzIG9uZS4NCgkgICAgICAod2hlbiBwYXJlbnQgKHdpbmRvdy10b3RhbC1zaXplIHBhcmVu dCBob3Jpem9udGFsKSkpDQoJICAgICA7OyBgcmVzaXplJyBub24tbmlsIG1lYW5zIHdlIGFy ZSBzdXBwb3NlZCB0byByZXNpemUgb3RoZXINCgkgICAgIDs7IHdpbmRvd3MgaW4gV0lORE9X J3MgY29tYmluYXRpb24uDQoJICAgICAocmVzaXplDQoJICAgICAgKGFuZCB3aW5kb3ctY29t YmluYXRpb24tcmVzaXplDQoJCSAgIChvciAod2luZG93LXBhcmFtZXRlciB3aW5kb3cgJ3dp bmRvdy1zaWRlKQ0KCQkgICAgICAgKG5vdCAoZXEgd2luZG93LWNvbWJpbmF0aW9uLXJlc2l6 ZSAnc2lkZSkpKQ0KCQkgICAobm90IHdpbmRvdy1jb21iaW5hdGlvbi1saW1pdCkNCgkJICAg OzsgUmVzaXplIG1ha2VzIHNlbnNlIGluIGlzby1jb21iaW5hdGlvbnMgb25seS4NCgkJICAg KHdpbmRvdy1jb21iaW5lZC1wIHdpbmRvdyBob3Jpem9udGFsKSkpDQoJICAgICA7OyBgb2xk LXNpemUnIGlzIHRoZSBjdXJyZW50IHNpemUgb2YgV0lORE9XLg0KCSAgICAgKG9sZC1zaXpl ICh3aW5kb3ctdG90YWwtc2l6ZSB3aW5kb3cgaG9yaXpvbnRhbCkpDQoJICAgICA7OyBgbmV3 LXNpemUnIGlzIHRoZSBzcGVjaWZpZWQgb3IgY2FsY3VsYXRlZCBzaXplIG9mIHRoZQ0KCSAg ICAgOzsgbmV3IHdpbmRvdy4NCgkgICAgIChuZXctc2l6ZQ0KCSAgICAgIChjb25kDQoJICAg ICAgICgobm90IHNpemUpDQoJCShtYXggKHdpbmRvdy1zcGxpdC1taW4tc2l6ZSBob3Jpem9u dGFsKQ0KCQkgICAgIChpZiByZXNpemUNCgkJCSA7OyBXaGVuIHJlc2l6aW5nIHRyeSB0byBn aXZlIHRoZSBuZXcgd2luZG93IHRoZQ0KCQkJIDs7IGF2ZXJhZ2Ugc2l6ZSBvZiBhIHdpbmRv dyBpbiBpdHMgY29tYmluYXRpb24uDQoJCQkgKG1pbiAoLSBwYXJlbnQtc2l6ZQ0KCQkJCSAo d2luZG93LW1pbi1zaXplIHBhcmVudCBob3Jpem9udGFsKSkNCgkJCSAgICAgICgvIHBhcmVu dC1zaXplDQoJCQkJICgxKyAod2luZG93LWNvbWJpbmF0aW9ucw0KCQkJCSAgICAgIHBhcmVu dCBob3Jpem9udGFsKSkpKQ0KCQkgICAgICAgOzsgRWxzZSB0cnkgdG8gZ2l2ZSB0aGUgbmV3 IHdpbmRvdyBoYWxmIHRoZSBzaXplDQoJCSAgICAgICA7OyBvZiBXSU5ET1cgKHBsdXMgYW4g ZXZlbnR1YWwgb2RkIGxpbmUpLg0KCQkgICAgICAgKCsgKC8gb2xkLXNpemUgMikgKCUgb2xk LXNpemUgMikpKSkpDQoJICAgICAgICgoPj0gc2l6ZSAwKQ0KCQk7OyBTSVpFIG5vbi1uZWdh dGl2ZSBzcGVjaWZpZXMgdGhlIG5ldyBzaXplIG9mIFdJTkRPVy4NCg0KCQk7OyBOb3RlOiBT cGVjaWZ5aW5nIGEgbm9uLW5lZ2F0aXZlIFNJWkUgaXMgcHJhY3RpY2FsbHkNCgkJOzsgYWx3 YXlzIGRvbmUgYXMgd29ya2Fyb3VuZCBmb3IgbWFraW5nIHRoZSBuZXcgd2luZG93DQoJCTs7 IGFwcGVhciBhYm92ZSBvciBvbiB0aGUgbGVmdCBvZiB0aGUgbmV3IHdpbmRvdyAodGhlDQoJ CTs7IGlzcGVsbCB3aW5kb3cgaXMgYSB0eXBpY2FsIGV4YW1wbGUgb2YgdGhhdCkuICBJbiBh bGwNCgkJOzsgdGhlc2UgY2FzZXMgdGhlIFNJREUgYXJndW1lbnQgc2hvdWxkIGJlIHNldCB0 byAnYWJvdmUNCgkJOzsgb3IgJ2xlZnQgaW4gb3JkZXIgdG8gc3VwcG9ydCB0aGUgJ3Jlc2l6 ZSBvcHRpb24uDQoJCTs7IEhlcmUgd2UgaGF2ZSB0byBuZXN0IHRoZSB3aW5kb3dzIGluc3Rl YWQsIHNlZSBhYm92ZS4NCgkJKC0gb2xkLXNpemUgc2l6ZSkpDQoJICAgICAgICh0DQoJCTs7 IFNJWkUgbmVnYXRpdmUgc3BlY2lmaWVzIHRoZSBzaXplIG9mIHRoZSBuZXcgd2luZG93Lg0K CQkoLSBzaXplKSkpKQ0KCSAgICAgbmV3LXBhcmVudCBuZXctbm9ybWFsKQ0KDQoJOzsgQ2hl Y2sgU0laRS4NCgkoY29uZA0KCSAoKG5vdCBzaXplKQ0KCSAgKGNvbmQNCgkgICAocmVzaXpl DQoJICAgIDs7IFNJWkUgdW5zcGVjaWZpZWQsIHJlc2l6aW5nLg0KCSAgICAod2hlbiAoYW5k IChub3QgKHdpbmRvdy1zaXphYmxlLXAgcGFyZW50ICgtIG5ldy1zaXplKSBob3Jpem9udGFs KSkNCgkJICAgICAgIDs7IFRyeSBhZ2FpbiB3aXRoIG1pbmltdW0gc3BsaXQgc2l6ZS4NCgkJ ICAgICAgIChzZXRxIG5ldy1zaXplDQoJCQkgICAgIChtYXggbmV3LXNpemUgKHdpbmRvdy1z cGxpdC1taW4tc2l6ZSBob3Jpem9udGFsKSkpDQoJCSAgICAgICAobm90ICh3aW5kb3ctc2l6 YWJsZS1wIHBhcmVudCAoLSBuZXctc2l6ZSkgaG9yaXpvbnRhbCkpKQ0KCSAgICAgIChlcnJv ciAiV2luZG93ICVzIHRvbyBzbWFsbCBmb3Igc3BsaXR0aW5nIiBwYXJlbnQpKSkNCgkgICAo KD4gKCsgbmV3LXNpemUgKHdpbmRvdy1taW4tc2l6ZSB3aW5kb3cgaG9yaXpvbnRhbCkpIG9s ZC1zaXplKQ0KCSAgICA7OyBTSVpFIHVuc3BlY2lmaWVkLCBubyByZXNpemluZy4NCgkgICAg KGVycm9yICJXaW5kb3cgJXMgdG9vIHNtYWxsIGZvciBzcGxpdHRpbmciIHdpbmRvdykpKSkN CgkgKChhbmQgKD49IHNpemUgMCkNCgkgICAgICAgKG9yICg+PSBzaXplIG9sZC1zaXplKQ0K CQkgICAoPCBuZXctc2l6ZSAoaWYgaG9yaXpvbnRhbA0KCQkJCSAgIHdpbmRvdy1zYWZlLW1p bi13aWR0aA0KCQkJCSB3aW5kb3ctc2FmZS1taW4td2lkdGgpKSkpDQoJICA7OyBTSVpFIHNw ZWNpZmllZCBhcyBuZXcgc2l6ZSBvZiBvbGQgd2luZG93LiAgSWYgdGhlIG5ldyBzaXplDQoJ ICA7OyBpcyBsYXJnZXIgdGhhbiB0aGUgb2xkIHNpemUgb3IgdGhlIHNpemUgb2YgdGhlIG5l dyB3aW5kb3cNCgkgIDs7IHdvdWxkIGJlIGxlc3MgdGhhbiB0aGUgc2FmZSBtaW5pbXVtLCBz aWduYWwgYW4gZXJyb3IuDQoJICAoZXJyb3IgIldpbmRvdyAlcyB0b28gc21hbGwgZm9yIHNw bGl0dGluZyIgd2luZG93KSkNCgkgKHJlc2l6ZQ0KCSAgOzsgU0laRSBzcGVjaWZpZWQsIHJl c2l6aW5nLg0KCSAgKHVubGVzcyAod2luZG93LXNpemFibGUtcCBwYXJlbnQgKC0gbmV3LXNp emUpIGhvcml6b250YWwpDQoJICAgIDs7IElmIHdlIGNhbm5vdCByZXNpemUgdGhlIHBhcmVu dCBnaXZlIHVwLg0KCSAgICAoZXJyb3IgIldpbmRvdyAlcyB0b28gc21hbGwgZm9yIHNwbGl0 dGluZyIgcGFyZW50KSkpDQoJICgob3IgKDwgbmV3LXNpemUNCgkJIChpZiBob3Jpem9udGFs IHdpbmRvdy1zYWZlLW1pbi13aWR0aCB3aW5kb3ctc2FmZS1taW4taGVpZ2h0KSkNCgkgICAg ICAoPCAoLSBvbGQtc2l6ZSBuZXctc2l6ZSkNCgkJIChpZiBob3Jpem9udGFsIHdpbmRvdy1z YWZlLW1pbi13aWR0aCB3aW5kb3ctc2FmZS1taW4taGVpZ2h0KSkpDQoJICA7OyBTSVpFIHNw ZWNpZmljYXRpb24gdmlvbGF0ZXMgbWluaW11bSBzaXplIHJlc3RyaWN0aW9ucy4NCgkgIChl cnJvciAiV2luZG93ICVzIHRvbyBzbWFsbCBmb3Igc3BsaXR0aW5nIiB3aW5kb3cpKSkNCg0K CSh3aW5kb3ctLXJlc2l6ZS1yZXNldCBmcmFtZSBob3Jpem9udGFsKQ0KDQoJKHNldHEgbmV3 LXBhcmVudA0KCSAgICAgIDs7IE1ha2UgbmV3LXBhcmVudCBub24tbmlsIGlmIHdlIG5lZWQg YSBuZXcgcGFyZW50IHdpbmRvdzsNCgkgICAgICA7OyBlaXRoZXIgYmVjYXVzZSB3ZSB3YW50 IHRvIG5lc3Qgb3IgYmVjYXVzZSBXSU5ET1cgaXMgbm90DQoJICAgICAgOzsgaXNvLWNvbWJp bmVkLg0KCSAgICAgIChvciB3aW5kb3ctY29tYmluYXRpb24tbGltaXQNCgkJICAobm90ICh3 aW5kb3ctY29tYmluZWQtcCB3aW5kb3cgaG9yaXpvbnRhbCkpKSkNCgkoc2V0cSBuZXctbm9y bWFsDQoJICAgICAgOzsgTWFrZSBuZXctbm9ybWFsIHRoZSBub3JtYWwgc2l6ZSBvZiB0aGUg bmV3IHdpbmRvdy4NCgkgICAgICAoY29uZA0KCSAgICAgICAoc2l6ZSAoLyAoZmxvYXQgbmV3 LXNpemUpIChpZiBuZXctcGFyZW50IG9sZC1zaXplIHBhcmVudC1zaXplKSkpDQoJICAgICAg IChuZXctcGFyZW50IDAuNSkNCgkgICAgICAgKHJlc2l6ZSAoLyAxLjAgKDErICh3aW5kb3ct Y29tYmluYXRpb25zIHBhcmVudCBob3Jpem9udGFsKSkpKQ0KCSAgICAgICAodCAoLyAod2lu ZG93LW5vcm1hbC1zaXplIHdpbmRvdyBob3Jpem9udGFsKSAyLjApKSkpDQoNCgkoaWYgcmVz aXplDQoJICAgIDs7IFRyeSB0byBnZXQgc3BhY2UgZnJvbSBPTEQncyBzaWJsaW5ncy4gIFdl IGNvdWxkIGdvICJ1cCIgYW5kDQoJICAgIDs7IHRyeSBnZXR0aW5nIGFkZGl0aW9uYWwgc3Bh Y2UgZnJvbSBzdXJyb3VuZGluZyB3aW5kb3dzIGJ1dA0KCSAgICA7OyB3ZSB3b24ndCBiZSBh YmxlIHRvIHJldHVybiBzcGFjZSB0byB0aG9zZSB3aW5kb3dzIHdoZW4gd2UNCgkgICAgOzsg ZGVsZXRlIHRoZSBvbmUgd2UgY3JlYXRlIGhlcmUuICBIZW5jZSB3ZSBkbyBub3QgZ28gdXAu DQoJICAgIChwcm9nbg0KCSAgICAgICh3aW5kb3ctLXJlc2l6ZS1jaGlsZC13aW5kb3dzIHBh cmVudCAoLSBuZXctc2l6ZSkgaG9yaXpvbnRhbCkNCgkgICAgICAobGV0KiAoKG5vcm1hbCAo LSAxLjAgbmV3LW5vcm1hbCkpDQoJCSAgICAgKHN1YiAod2luZG93LWNoaWxkIHBhcmVudCkp KQ0KCQkod2hpbGUgc3ViDQoJCSAgKHNldC13aW5kb3ctbmV3LW5vcm1hbA0KCQkgICBzdWIg KCogKHdpbmRvdy1ub3JtYWwtc2l6ZSBzdWIgaG9yaXpvbnRhbCkgbm9ybWFsKSkNCgkJICAo c2V0cSBzdWIgKHdpbmRvdy1yaWdodCBzdWIpKSkpKQ0KCSAgOzsgR2V0IGVudGlyZSBzcGFj ZSBmcm9tIFdJTkRPVy4NCgkgIChzZXQtd2luZG93LW5ldy10b3RhbCB3aW5kb3cgKC0gb2xk LXNpemUgbmV3LXNpemUpKQ0KCSAgKHdpbmRvdy0tcmVzaXplLXRoaXMtd2luZG93IHdpbmRv dyAoLSBuZXctc2l6ZSkgaG9yaXpvbnRhbCkNCgkgIChzZXQtd2luZG93LW5ldy1ub3JtYWwN CgkgICB3aW5kb3cgKC0gKGlmIG5ldy1wYXJlbnQgMS4wICh3aW5kb3ctbm9ybWFsLXNpemUg d2luZG93IGhvcml6b250YWwpKQ0KCQkgICAgIG5ldy1ub3JtYWwpKSkNCg0KCShsZXQqICgo bmV3IChzcGxpdC13aW5kb3ctaW50ZXJuYWwgd2luZG93IG5ldy1zaXplIHNpZGUgbmV3LW5v cm1hbCkpKQ0KCSAgOzsgQXNzaWduIHdpbmRvdy1zaWRlIHBhcmFtZXRlcnMsIGlmIGFueS4N CgkgICh3aGVuIChlcSB3aW5kb3ctY29tYmluYXRpb24tcmVzaXplICdzaWRlKQ0KCSAgICAo bGV0ICgod2luZG93LXNpZGUNCgkJICAgKGNvbmQNCgkJICAgICh3aW5kb3ctc2lkZSB3aW5k b3ctc2lkZSkNCgkJICAgICgoZXEgc2lkZSAnYWJvdmUpICd0b3ApDQoJCSAgICAoKGVxIHNp ZGUgJ2JlbG93KSAnYm90dG9tKQ0KCQkgICAgKHQgc2lkZSkpKSkNCgkgICAgICA7OyBXZSBt YWRlIGEgbmV3IHNpZGUgd2luZG93Lg0KCSAgICAgIChzZXQtd2luZG93LXBhcmFtZXRlciBu ZXcgJ3dpbmRvdy1zaWRlIHdpbmRvdy1zaWRlKQ0KCSAgICAgICh3aGVuIChhbmQgbmV3LXBh cmVudCAod2luZG93LXBhcmFtZXRlciB3aW5kb3cgJ3dpbmRvdy1zaWRlKSkNCgkJOzsgV2Un dmUgYmVlbiBzcGxpdHRpbmcgYSBzaWRlIHJvb3Qgd2luZG93LiAgR2l2ZSB0aGUNCgkJOzsg bmV3IHBhcmVudCB0aGUgc2FtZSB3aW5kb3ctc2lkZSBwYXJhbWV0ZXIuDQoJCShzZXQtd2lu ZG93LXBhcmFtZXRlcg0KCQkgKHdpbmRvdy1wYXJlbnQgbmV3KSAnd2luZG93LXNpZGUgd2lu ZG93LXNpZGUpKSkpDQoNCgkgIChydW4td2luZG93LWNvbmZpZ3VyYXRpb24tY2hhbmdlLWhv b2sgZnJhbWUpDQoJICAod2luZG93LS1jaGVjayBmcmFtZSkNCgkgIDs7IEFsd2F5cyByZXR1 cm4gdGhlIG5ldyB3aW5kb3cuDQoJICBuZXcpKSkpKQ0KDQooZGVmdW4gd2luZG93LWRlbGV0 YWJsZS1wICgmb3B0aW9uYWwgd2luZG93KQ0KICAiUmV0dXJuIHQgaWYgV0lORE9XIGNhbiBi ZSBzYWZlbHkgZGVsZXRlZCBmcm9tIGl0cyBmcmFtZS4NClJldHVybiBgZnJhbWUnIGlmIGRl bGV0aW5nIFdJTkRPVyBzaG91bGQgYWxzbyBkZWxldGUgaXRzDQpmcmFtZS4iDQogIChzZXRx IHdpbmRvdyAod2luZG93LW5vcm1hbGl6ZS13aW5kb3cgd2luZG93KSkNCg0KICAodW5sZXNz IGlnbm9yZS13aW5kb3ctcGFyYW1ldGVycw0KICAgIDs7IEhhbmRsZSBhdG9taWNpdHkuDQog ICAgKHdoZW4gKHdpbmRvdy1wYXJhbWV0ZXIgd2luZG93ICd3aW5kb3ctYXRvbSkNCiAgICAg IChzZXRxIHdpbmRvdyAod2luZG93LWF0b20tcm9vdCB3aW5kb3cpKSkpDQoNCiAgKGxldCog KChwYXJlbnQgKHdpbmRvdy1wYXJlbnQgd2luZG93KSkNCgkgKGZyYW1lICh3aW5kb3ctZnJh bWUgd2luZG93KSkNCgkgKGJ1ZmZlciAod2luZG93LWJ1ZmZlciB3aW5kb3cpKSkNCiAgICAo Y29uZA0KICAgICAoKGZyYW1lLXJvb3Qtd2luZG93LXAgd2luZG93KQ0KICAgICAgOzsgV0lO RE9XJ3MgZnJhbWUgY2FuIGJlIGRlbGV0ZWQgb25seSBpZiB0aGVyZSBhcmUgb3RoZXIgZnJh bWVzDQogICAgICA7OyBvbiB0aGUgc2FtZSB0ZXJtaW5hbC4NCiAgICAgICh1bmxlc3MgKGVx IGZyYW1lIChuZXh0LWZyYW1lIGZyYW1lIDApKQ0KCSdmcmFtZSkpDQogICAgICgob3IgaWdu b3JlLXdpbmRvdy1wYXJhbWV0ZXJzDQoJICAobm90IChlcSB3aW5kb3cgKHdpbmRvdy0tbWFq b3Itbm9uLXNpZGUtd2luZG93IGZyYW1lKSkpKQ0KICAgICAgOzsgV0lORE9XIGNhbiBiZSBk ZWxldGVkIHVubGVzcyBpdCBpcyB0aGUgbWFqb3Igbm9uLXNpZGUgd2luZG93IG9mDQogICAg ICA7OyBpdHMgZnJhbWUuDQogICAgICB0KSkpKQ0KDQooZGVmdW4gZGVsZXRlLXdpbmRvdyAo Jm9wdGlvbmFsIHdpbmRvdykNCiAgIkRlbGV0ZSBXSU5ET1cuDQpXSU5ET1cgY2FuIGJlIGFu IGFyYml0cmFyeSB3aW5kb3cgYW5kIGRlZmF1bHRzIHRvIHRoZSBzZWxlY3RlZA0Kb25lLiAg UmV0dXJuIG5pbC4NCg0KSWYgdGhlIHZhcmlhYmxlIGBpZ25vcmUtd2luZG93LXBhcmFtZXRl cnMnIGlzIG5vbi1uaWwgb3IgdGhlDQpgZGVsZXRlLXdpbmRvdycgcGFyYW1ldGVyIG9mIFdJ TkRPVyBlcXVhbHMgdCwgZG8gbm90IHByb2Nlc3MgYW55DQpwYXJhbWV0ZXJzIG9mIFdJTkRP Vy4gIE90aGVyd2lzZSwgaWYgdGhlIGBkZWxldGUtd2luZG93Jw0KcGFyYW1ldGVyIG9mIFdJ TkRPVyBzcGVjaWZpZXMgYSBmdW5jdGlvbiwgY2FsbCB0aGF0IGZ1bmN0aW9uIHdpdGgNCldJ TkRPVyBhcyBpdHMgc29sZSBhcmd1bWVudCBhbmQgcmV0dXJuIHRoZSB2YWx1ZSByZXR1cm5l ZCBieSB0aGF0DQpmdW5jdGlvbi4NCg0KT3RoZXJ3aXNlLCBpZiBXSU5ET1cgaXMgcGFydCBv ZiBhbiBhdG9taWMgd2luZG93LCBjYWxsDQpgZGVsZXRlLXdpbmRvdycgd2l0aCB0aGUgcm9v dCBvZiB0aGUgYXRvbWljIHdpbmRvdyBhcyBpdHMNCmFyZ3VtZW50LiAgU2lnbmFsIGFuIGVy cm9yIGlmIFdJTkRPVyBpcyBlaXRoZXIgdGhlIG9ubHkgd2luZG93IG9uDQppdHMgZnJhbWUs IHRoZSBsYXN0IG5vbi1zaWRlIHdpbmRvdywgb3IgcGFydCBvZiBhbiBhdG9taWMgd2luZG93 DQp0aGF0IGlzIGl0cyBmcmFtZSdzIHJvb3Qgd2luZG93LiINCiAgKGludGVyYWN0aXZlKQ0K ICAoc2V0cSB3aW5kb3cgKHdpbmRvdy1ub3JtYWxpemUtd2luZG93IHdpbmRvdykpDQogIChs ZXQqICgoZnJhbWUgKHdpbmRvdy1mcmFtZSB3aW5kb3cpKQ0KCSAoZnVuY3Rpb24gKHdpbmRv dy1wYXJhbWV0ZXIgd2luZG93ICdkZWxldGUtd2luZG93KSkNCgkgKHBhcmVudCAod2luZG93 LXBhcmVudCB3aW5kb3cpKQ0KCSBhdG9tLXJvb3QpDQogICAgKHdpbmRvdy0tY2hlY2sgZnJh bWUpDQogICAgKGNhdGNoICdkb25lDQogICAgICA7OyBIYW5kbGUgd2luZG93IHBhcmFtZXRl cnMuDQogICAgICAoY29uZA0KICAgICAgIDs7IElnbm9yZSB3aW5kb3cgcGFyYW1ldGVycyBp ZiBgaWdub3JlLXdpbmRvdy1wYXJhbWV0ZXJzJyB0ZWxscw0KICAgICAgIDs7IHVzIHNvIG9y IGBkZWxldGUtd2luZG93JyBlcXVhbHMgdC4NCiAgICAgICAoKG9yIGlnbm9yZS13aW5kb3ct cGFyYW1ldGVycyAoZXEgZnVuY3Rpb24gdCkpKQ0KICAgICAgICgoZnVuY3Rpb25wIGZ1bmN0 aW9uKQ0KCTs7IFRoZSBgZGVsZXRlLXdpbmRvdycgcGFyYW1ldGVyIHNwZWNpZmllcyB0aGUg ZnVuY3Rpb24gdG8gY2FsbC4NCgk7OyBJZiB0aGF0IGZ1bmN0aW9uIGlzIGBpZ25vcmUnIG5v dGhpbmcgaXMgZG9uZS4gIEl0J3MgdXAgdG8gdGhlDQoJOzsgZnVuY3Rpb24gY2FsbGVkIGhl cmUgdG8gYXZvaWQgaW5maW5pdGUgcmVjdXJzaW9uLg0KCSh0aHJvdyAnZG9uZSAoZnVuY2Fs bCBmdW5jdGlvbiB3aW5kb3cpKSkNCiAgICAgICAoKGFuZCAod2luZG93LXBhcmFtZXRlciB3 aW5kb3cgJ3dpbmRvdy1hdG9tKQ0KCSAgICAgKHNldHEgYXRvbS1yb290ICh3aW5kb3ctYXRv bS1yb290IHdpbmRvdykpDQoJICAgICAobm90IChlcSBhdG9tLXJvb3Qgd2luZG93KSkpDQoJ KGlmIChlcSBhdG9tLXJvb3QgKGZyYW1lLXJvb3Qtd2luZG93IGZyYW1lKSkNCgkgICAgKGVy cm9yICJSb290IG9mIGF0b21pYyB3aW5kb3cgaXMgZnJhbWUgcm9vdCB3aW5kb3ciKQ0KCSAg KHRocm93ICdkb25lIChkZWxldGUtd2luZG93IGF0b20tcm9vdCkpKSkNCiAgICAgICAoKG5v dCBwYXJlbnQpDQoJKGVycm9yICJBdHRlbXB0IHRvIGRlbGV0ZSBtaW5pYnVmZmVyIG9yIHNv bGUgb3JkaW5hcnkgd2luZG93IikpDQogICAgICAgKChlcSB3aW5kb3cgKHdpbmRvdy0tbWFq b3Itbm9uLXNpZGUtd2luZG93IGZyYW1lKSkNCgkoZXJyb3IgIkF0dGVtcHQgdG8gZGVsZXRl IGxhc3Qgbm9uLXNpZGUgd2luZG93IikpKQ0KDQogICAgICAobGV0KiAoKGhvcml6b250YWwg KHdpbmRvdy1sZWZ0LWNoaWxkIHBhcmVudCkpDQoJICAgICAoc2l6ZSAod2luZG93LXRvdGFs LXNpemUgd2luZG93IGhvcml6b250YWwpKQ0KCSAgICAgKGZyYW1lLXNlbGVjdGVkDQoJICAg ICAgKHdpbmRvdy0taW4tc3VidHJlZS1wIChmcmFtZS1zZWxlY3RlZC13aW5kb3cgZnJhbWUp IHdpbmRvdykpDQoJICAgICA7OyBFbWFjcyAyMyBwcmVmZXJhYmx5IGdpdmVzIFdJTkRPVydz IHNwYWNlIHRvIGl0cyBsZWZ0DQoJICAgICA7OyBzaWJsaW5nLg0KCSAgICAgKHNpYmxpbmcg KG9yICh3aW5kb3ctbGVmdCB3aW5kb3cpICh3aW5kb3ctcmlnaHQgd2luZG93KSkpKQ0KCSh3 aW5kb3ctLXJlc2l6ZS1yZXNldCBmcmFtZSBob3Jpem9udGFsKQ0KCShjb25kDQoJICgoYW5k IChub3Qgd2luZG93LWNvbWJpbmF0aW9uLXJlc2l6ZSkNCgkgICAgICAgc2libGluZyAod2lu ZG93LXNpemFibGUtcCBzaWJsaW5nIHNpemUpKQ0KCSAgOzsgUmVzaXplIFdJTkRPVydzIHNp YmxpbmcuDQoJICAod2luZG93LS1yZXNpemUtdGhpcy13aW5kb3cgc2libGluZyBzaXplIGhv cml6b250YWwgbmlsIHQpDQoJICAoc2V0LXdpbmRvdy1uZXctbm9ybWFsDQoJICAgc2libGlu ZyAoKyAod2luZG93LW5vcm1hbC1zaXplIHNpYmxpbmcgaG9yaXpvbnRhbCkNCgkJICAgICAg KHdpbmRvdy1ub3JtYWwtc2l6ZSB3aW5kb3cgaG9yaXpvbnRhbCkpKSkNCgkgKCh3aW5kb3ct LXJlc2l6YWJsZS1wIHdpbmRvdyAoLSBzaXplKSBob3Jpem9udGFsIG5pbCBuaWwgbmlsIHQp DQoJICA7OyBDYW4gZG8gd2l0aG91dCByZXNpemluZyBmaXhlZC1zaXplIHdpbmRvd3MuDQoJ ICAod2luZG93LS1yZXNpemUtc2libGluZ3Mgd2luZG93ICgtIHNpemUpIGhvcml6b250YWwp KQ0KCSAodA0KCSAgOzsgQ2FuJ3QgZG8gd2l0aG91dCByZXNpemluZyBmaXhlZC1zaXplIHdp bmRvd3MuDQoJICAod2luZG93LS1yZXNpemUtc2libGluZ3Mgd2luZG93ICgtIHNpemUpIGhv cml6b250YWwgdCkpKQ0KCTs7IEFjdHVhbGx5IGRlbGV0ZSBXSU5ET1cuDQoJKGRlbGV0ZS13 aW5kb3ctaW50ZXJuYWwgd2luZG93KQ0KCSh3aGVuIChhbmQgZnJhbWUtc2VsZWN0ZWQNCgkJ ICAgKHdpbmRvdy1wYXJhbWV0ZXINCgkJICAgIChmcmFtZS1zZWxlY3RlZC13aW5kb3cgZnJh bWUpICduby1vdGhlci13aW5kb3cpKQ0KCSAgOzsgYGRlbGV0ZS13aW5kb3ctaW50ZXJuYWwn IGhhcyBzZWxlY3RlZCBhIHdpbmRvdyB0aGF0IHNob3VsZA0KCSAgOzsgbm90IGJlIHNlbGVj dGVkLCBmaXggdGhpcyBoZXJlLg0KCSAgKG90aGVyLXdpbmRvdyAtMSBmcmFtZSkpDQoJKHJ1 bi13aW5kb3ctY29uZmlndXJhdGlvbi1jaGFuZ2UtaG9vayBmcmFtZSkNCgkod2luZG93LS1j aGVjayBmcmFtZSkNCgk7OyBBbHdheXMgcmV0dXJuIG5pbC4NCgluaWwpKSkpDQoNCihkZWZ1 biBkZWxldGUtb3RoZXItd2luZG93cyAoJm9wdGlvbmFsIHdpbmRvdykNCiAgIk1ha2UgV0lO RE9XIGZpbGwgaXRzIGZyYW1lLg0KV0lORE9XIG1heSBiZSBhbnkgd2luZG93IGFuZCBkZWZh dWx0cyB0byB0aGUgc2VsZWN0ZWQgb25lLg0KUmV0dXJuIG5pbC4NCg0KSWYgdGhlIHZhcmlh YmxlIGBpZ25vcmUtd2luZG93LXBhcmFtZXRlcnMnIGlzIG5vbi1uaWwgb3IgdGhlDQpgZGVs ZXRlLW90aGVyLXdpbmRvd3MnIHBhcmFtZXRlciBvZiBXSU5ET1cgZXF1YWxzIHQsIGRvIG5v dA0KcHJvY2VzcyBhbnkgcGFyYW1ldGVycyBvZiBXSU5ET1cuICBPdGhlcndpc2UsIGlmIHRo ZQ0KYGRlbGV0ZS1vdGhlci13aW5kb3dzJyBwYXJhbWV0ZXIgb2YgV0lORE9XIHNwZWNpZmll cyBhIGZ1bmN0aW9uLA0KY2FsbCB0aGF0IGZ1bmN0aW9uIHdpdGggV0lORE9XIGFzIGl0cyBz b2xlIGFyZ3VtZW50IGFuZCByZXR1cm4NCnRoZSB2YWx1ZSByZXR1cm5lZCBieSB0aGF0IGZ1 bmN0aW9uLg0KDQpPdGhlcndpc2UsIGlmIFdJTkRPVyBpcyBwYXJ0IG9mIGFuIGF0b21pYyB3 aW5kb3csIGNhbGwgdGhpcw0KZnVuY3Rpb24gd2l0aCB0aGUgcm9vdCBvZiB0aGUgYXRvbWlj IHdpbmRvdyBhcyBpdHMgYXJndW1lbnQuICBJZg0KV0lORE9XIGlzIGEgbm9uLXNpZGUgd2lu ZG93LCBtYWtlIFdJTkRPVyB0aGUgb25seSBub24tc2lkZSB3aW5kb3cNCm9uIHRoZSBmcmFt ZS4gIFNpZGUgd2luZG93cyBhcmUgbm90IGRlbGV0ZWQuICBJZiBXSU5ET1cgaXMgYSBzaWRl DQp3aW5kb3cgc2lnbmFsIGFuIGVycm9yLiINCiAgKGludGVyYWN0aXZlKQ0KICAoc2V0cSB3 aW5kb3cgKHdpbmRvdy1ub3JtYWxpemUtd2luZG93IHdpbmRvdykpDQogIChsZXQqICgoZnJh bWUgKHdpbmRvdy1mcmFtZSB3aW5kb3cpKQ0KCSAoZnVuY3Rpb24gKHdpbmRvdy1wYXJhbWV0 ZXIgd2luZG93ICdkZWxldGUtb3RoZXItd2luZG93cykpDQoJICh3aW5kb3ctc2lkZSAod2lu ZG93LXBhcmFtZXRlciB3aW5kb3cgJ3dpbmRvdy1zaWRlKSkNCgkgYXRvbS1yb290IHNpZGUt bWFpbikNCiAgICAod2luZG93LS1jaGVjayBmcmFtZSkNCiAgICAoY2F0Y2ggJ2RvbmUNCiAg ICAgIChjb25kDQogICAgICAgOzsgSWdub3JlIHdpbmRvdyBwYXJhbWV0ZXJzIGlmIGBpZ25v cmUtd2luZG93LXBhcmFtZXRlcnMnIGlzIHQgb3INCiAgICAgICA7OyBgZGVsZXRlLW90aGVy LXdpbmRvd3MnIGlzIHQuDQogICAgICAgKChvciBpZ25vcmUtd2luZG93LXBhcmFtZXRlcnMg KGVxIGZ1bmN0aW9uIHQpKSkNCiAgICAgICAoKGZ1bmN0aW9ucCBmdW5jdGlvbikNCgk7OyBU aGUgYGRlbGV0ZS1vdGhlci13aW5kb3dzJyBwYXJhbWV0ZXIgc3BlY2lmaWVzIHRoZSBmdW5j dGlvbg0KCTs7IHRvIGNhbGwuICBJZiB0aGUgZnVuY3Rpb24gaXMgYGlnbm9yZScgbm8gd2lu ZG93cyBhcmUgZGVsZXRlZC4NCgk7OyBJdCdzIHVwIHRvIHRoZSBmdW5jdGlvbiBjYWxsZWQg dG8gYXZvaWQgaW5maW5pdGUgcmVjdXJzaW9uLg0KCSh0aHJvdyAnZG9uZSAoZnVuY2FsbCBm dW5jdGlvbiB3aW5kb3cpKSkNCiAgICAgICAoKGFuZCAod2luZG93LXBhcmFtZXRlciB3aW5k b3cgJ3dpbmRvdy1hdG9tKQ0KCSAgICAgKHNldHEgYXRvbS1yb290ICh3aW5kb3ctYXRvbS1y b290IHdpbmRvdykpDQoJICAgICAobm90IChlcSBhdG9tLXJvb3Qgd2luZG93KSkpDQoJKGlm IChlcSBhdG9tLXJvb3QgKGZyYW1lLXJvb3Qtd2luZG93IGZyYW1lKSkNCgkgICAgKGVycm9y ICJSb290IG9mIGF0b21pYyB3aW5kb3cgaXMgZnJhbWUgcm9vdCB3aW5kb3ciKQ0KCSAgKHRo cm93ICdkb25lIChkZWxldGUtb3RoZXItd2luZG93cyBhdG9tLXJvb3QpKSkpDQogICAgICAg KChtZW1xIHdpbmRvdy1zaWRlIHdpbmRvdy1zaWRlcykNCgkoZXJyb3IgIkNhbm5vdCBtYWtl IHNpZGUgd2luZG93IHRoZSBvbmx5IHdpbmRvdyIpKSkNCg0KICAgICAgOzsgSWYgV0lORE9X IGlzIHRoZSBtYWpvciBub24tc2lkZSB3aW5kb3csIGRvIG5vdGhpbmcuDQogICAgICAoaWYg KHdpbmRvdy13aXRoLXBhcmFtZXRlciAnd2luZG93LXNpZGUpDQoJICAoc2V0cSBzaWRlLW1h aW4gKHdpbmRvdy0tbWFqb3Itbm9uLXNpZGUtd2luZG93IGZyYW1lKSkNCgkoc2V0cSBzaWRl LW1haW4gKGZyYW1lLXJvb3Qtd2luZG93IGZyYW1lKSkpDQogICAgICAodW5sZXNzIChlcSB3 aW5kb3cgc2lkZS1tYWluKQ0KCShkZWxldGUtb3RoZXItd2luZG93cy1pbnRlcm5hbCB3aW5k b3cgc2lkZS1tYWluKQ0KCShydW4td2luZG93LWNvbmZpZ3VyYXRpb24tY2hhbmdlLWhvb2sg ZnJhbWUpDQoJKHdpbmRvdy0tY2hlY2sgZnJhbWUpKQ0KICAgICAgOzsgQWx3YXlzIHJldHVy biBuaWwuDQogICAgICBuaWwpKSkNCg0KKGRlZnVuIHdpbmRvdy0tc2lkZS1jaGVjayAoJm9w dGlvbmFsIGZyYW1lKQ0KICAiQ2hlY2sgdGhlIHNpZGUgd2luZG93IGNvbmZpZ3VyYXRpb24g b2YgRlJBTUUuDQpGUkFNRSBkZWZhdWx0cyB0byB0aGUgc2VsZWN0ZWQgZnJhbWUuDQoNCkEg dmFsaWQgc2lkZSB3aW5kb3cgY29uZmlndXJhdGlvbiBwcmVzZXJ2ZXMgdGhlIGZvbGxvd2lu ZyB0d28NCmludmFyaWFudHM6DQoNCi0gSWYgdGhlcmUgZXhpc3RzIGEgd2luZG93IHdob3Nl IHdpbmRvdy1zaWRlIHBhcmFtZXRlciBpcw0KICBub24tbmlsLCB0aGVyZSBtdXN0IGV4aXN0 IGF0IGxlYXN0IG9uZSBsaXZlIHdpbmRvdyB3aG9zZQ0KICB3aW5kb3ctc2lkZSBwYXJhbWV0 ZXIgaXMgbmlsLg0KDQotIElmIGEgd2luZG93IFcgaGFzIGEgbm9uLW5pbCB3aW5kb3ctc2lk ZSBwYXJhbWV0ZXIgKGkpIGl0IG11c3QNCiAgaGF2ZSBhIHBhcmVudCB3aW5kb3cgYW5kIHRo YXQgcGFyZW50J3Mgd2luZG93LXNpZGUgcGFyYW1ldGVyDQogIG11c3QgYmUgZWl0aGVyIG5p bCBvciB0aGUgc2FtZSBhcyBmb3IgVywgYW5kIChpaSkgYW55IGNoaWxkDQogIHdpbmRvdyBv ZiBXIG11c3QgaGF2ZSB0aGUgc2FtZSB3aW5kb3ctc2lkZSBwYXJhbWV0ZXIgYXMgVy4NCg0K SWYgdGhlIGNvbmZpZ3VyYXRpb24gaXMgaW52YWxpZCwgcmVzZXQgdGhlIHdpbmRvdy1zaWRl IHBhcmFtZXRlcnMNCm9mIGFsbCB3aW5kb3dzIG9uIEZSQU1FIHRvIG5pbC4iDQogIChsZXQg KGxlZnQgdG9wIHJpZ2h0IGJvdHRvbSBub25lIHNpZGUgcGFyZW50IHBhcmVudC1zaWRlKQ0K ICAgICh3aGVuIChvciAoY2F0Y2ggJ3Jlc2V0DQoJCSh3YWxrLXdpbmRvdy10cmVlDQoJCSAo bGFtYmRhICh3aW5kb3cpDQoJCSAgIChzZXRxIHNpZGUgKHdpbmRvdy1wYXJhbWV0ZXIgd2lu ZG93ICd3aW5kb3ctc2lkZSkpDQoJCSAgIChzZXRxIHBhcmVudCAod2luZG93LXBhcmVudCB3 aW5kb3cpKQ0KCQkgICAoc2V0cSBwYXJlbnQtc2lkZQ0KCQkJIChhbmQgcGFyZW50ICh3aW5k b3ctcGFyYW1ldGVyIHBhcmVudCAnd2luZG93LXNpZGUpKSkNCgkJICAgOzsgVGhlIGZvbGxv d2luZyBgY29uZCcgc2VlbXMgYSBiaXQgdGVkaW91cywgYnV0IEknZA0KCQkgICA7OyByYXRo ZXIgc3RpY2sgdG8gdXNpbmcganVzdCB0aGUgc3RhY2suDQoJCSAgIChjb25kDQoJCSAgICAo cGFyZW50LXNpZGUNCgkJICAgICAod2hlbiAobm90IChlcSBwYXJlbnQtc2lkZSBzaWRlKSkN CgkJICAgICAgIDs7IEEgcGFyZW50IHdob3NlIHdpbmRvdy1zaWRlIGlzIG5vbi1uaWwgbXVz dA0KCQkgICAgICAgOzsgaGF2ZSBhIGNoaWxkIHdpdGggdGhlIHNhbWUgd2luZG93LXNpZGUu DQoJCSAgICAgICAodGhyb3cgJ3Jlc2V0IHQpKSkNCgkJICAgICgobm90IHNpZGUpDQoJCSAg ICAgKHdoZW4gKHdpbmRvdy1idWZmZXIgd2luZG93KQ0KCQkgICAgICAgOzsgUmVjb3JkIHRo YXQgd2UgaGF2ZSBhdCBsZWFzdCBvbmUgbm9uLXNpZGUsDQoJCSAgICAgICA7OyBsaXZlIHdp bmRvdy4NCgkJICAgICAgIChzZXRxIG5vbmUgdCkpKQ0KCQkgICAgKChpZiAobWVtcSBzaWRl ICcobGVmdCB0b3ApKQ0KCQkJICh3aW5kb3ctcHJldi1zaWJsaW5nIHdpbmRvdykNCgkJICAg ICAgICh3aW5kb3ctbmV4dC1zaWJsaW5nIHdpbmRvdykpDQoJCSAgICAgOzsgTGVmdCBhbmQg dG9wIG1ham9yIHNpZGUgd2luZG93cyBtdXN0IG5vdCBoYXZlIGENCgkJICAgICA7OyBwcmV2 aW91cyBzaWJsaW5nLCByaWdodCBhbmQgYm90dG9tIG1ham9yIHNpZGUNCgkJICAgICA7OyB3 aW5kb3dzIG11c3Qgbm90IGhhdmUgYSBuZXh0IHNpYmxpbmcuDQoJCSAgICAgKHRocm93ICdy ZXNldCB0KSkNCgkJICAgIDs7IE5vdyBjaGVjayB0aGF0IHRoZXJlJ3Mgbm8gbW9yZSB0aGFu IG9uZSBtYWpvcg0KCQkgICAgOzsgd2luZG93IGZvciBhbnkgb2YgbGVmdCwgdG9wLCByaWdo dCBhbmQgYm90dG9tLg0KCQkgICAgKChlcSBzaWRlICdsZWZ0KQ0KCQkgICAgIChpZiBsZWZ0 ICh0aHJvdyAncmVzZXQgdCkgKHNldHEgbGVmdCB0KSkpDQoJCSAgICAoKGVxIHNpZGUgJ3Rv cCkNCgkJICAgICAoaWYgdG9wICh0aHJvdyAncmVzZXQgdCkgKHNldHEgdG9wIHQpKSkNCgkJ ICAgICgoZXEgc2lkZSAncmlnaHQpDQoJCSAgICAgKGlmIHJpZ2h0ICh0aHJvdyAncmVzZXQg dCkgKHNldHEgcmlnaHQgdCkpKQ0KCQkgICAgKChlcSBzaWRlICdib3R0b20pDQoJCSAgICAg KGlmIGJvdHRvbSAodGhyb3cgJ3Jlc2V0IHQpIChzZXRxIGJvdHRvbSB0KSkpDQoJCSAgICAo dCANCgkJICAgICAodGhyb3cgJ3Jlc2V0IHQpKSkpDQoJCSBmcmFtZSB0KSkNCgkgICAgICA7 OyBJZiB0aGVyZSdzIGEgc2lkZSB3aW5kb3csIHRoZXJlIG11c3QgYmUgYXQgbGVhc3Qgb25l DQoJICAgICAgOzsgbm9uLXNpZGUgd2luZG93Lg0KCSAgICAgIChhbmQgKG9yIGxlZnQgdG9w IHJpZ2h0IGJvdHRvbSkgKG5vdCBub25lKSkpDQogICAgICAod2Fsay13aW5kb3ctdHJlZQ0K ICAgICAgIChsYW1iZGEgKHdpbmRvdykNCgkgKHNldC13aW5kb3ctcGFyYW1ldGVyIHdpbmRv dyAnd2luZG93LXNpZGUgbmlsKSkNCiAgICAgICBmcmFtZSB0KSkpKQ0KDQooZGVmdW4gd2lu ZG93LS1tYWpvci1ub24tc2lkZS13aW5kb3cgKCZvcHRpb25hbCBmcmFtZSkNCiAgIlJldHVy biB0aGUgbWFqb3Igbm9uLXNpZGUgd2luZG93IG9mIGZyYW1lIEZSQU1FLg0KVGhlIG9wdGlv bmFsIGFyZ3VtZW50IEZSQU1FIG11c3QgYmUgYSBsaXZlIGZyYW1lIGFuZCBkZWZhdWx0cyB0 bw0KdGhlIHNlbGVjdGVkIG9uZS4NCg0KSWYgRlJBTUUgaGFzIGF0IGxlYXN0IG9uZSBzaWRl IHdpbmRvdywgdGhlIG1ham9yIG5vbi1zaWRlIHdpbmRvdw0KaXMgZWl0aGVyIGFuIGludGVy bmFsIG5vbi1zaWRlIHdpbmRvdyBzdWNoIHRoYXQgYWxsIG90aGVyDQpub24tc2lkZSB3aW5k b3dzIG9uIEZSQU1FIGRlc2NlbmQgZnJvbSBpdCwgb3IgdGhlIHNpbmdsZSBsaXZlDQpub24t c2lkZSB3aW5kb3cgb2YgRlJBTUUuICBJZiBGUkFNRSBoYXMgbm8gc2lkZSB3aW5kb3dzLCBy ZXR1cm4NCml0cyByb290IHdpbmRvdy4iDQogIChsZXQgKChmcmFtZSAod2luZG93LW5vcm1h bGl6ZS1mcmFtZSBmcmFtZSkpDQoJbWFqb3Igc2libGluZykNCiAgICA7OyBTZXQgbWFqb3Ig dG8gdGhlIF9sYXN0XyB3aW5kb3cgZm91bmQgYnkgYHdhbGstd2luZG93LXRyZWUnIHRoYXQN CiAgICA7OyBpcyBub3QgYSBzaWRlIHdpbmRvdyBidXQgaGFzIGEgc2lkZSB3aW5kb3cgYXMg aXRzIHNpYmxpbmcuDQogICAgKHdhbGstd2luZG93LXRyZWUNCiAgICAgKGxhbWJkYSAod2lu ZG93KQ0KICAgICAgIChhbmQgKG5vdCAod2luZG93LXBhcmFtZXRlciB3aW5kb3cgJ3dpbmRv dy1zaWRlKSkNCgkgICAgKG9yIChhbmQgKHNldHEgc2libGluZyAod2luZG93LXByZXYtc2li bGluZyB3aW5kb3cpKQ0KCQkgICAgICh3aW5kb3ctcGFyYW1ldGVyIHNpYmxpbmcgJ3dpbmRv dy1zaWRlKSkNCgkJKGFuZCAoc2V0cSBzaWJsaW5nICh3aW5kb3ctbmV4dC1zaWJsaW5nIHdp bmRvdykpDQoJCSAgICAgKHdpbmRvdy1wYXJhbWV0ZXIgc2libGluZyAnd2luZG93LXNpZGUp KSkNCgkgICAgKHNldHEgbWFqb3Igd2luZG93KSkpDQogICAgIGZyYW1lIHQpDQogICAgKG9y IG1ham9yIChmcmFtZS1yb290LXdpbmRvdyBmcmFtZSkpKSkNCg0KOzsgKGRlZnZhciB3aW5k b3ctc2lkZXMgJyhsZWZ0IHRvcCByaWdodCBib3R0b20pDQogIDs7ICJXaW5kb3cgc2lkZXMu IikNCg0KOzsgKGRlZmN1c3RvbSB3aW5kb3ctc2lkZXMtYWxpc3QgbmlsDQo7OyAgICJBc3Nv Y2lhdGlvbiBsaXN0IGZvciBzaWRlIHdpbmRvd3MuDQo7OyBFYWNoIGVudHJ5IG9mIHRoaXMg bGlzdCBtdXN0IGJlIGEgbGlzdCB3aG9zZSBmaXJzdCBlbGVtZW50IGlzDQo7OyBlaXRoZXIg YGxlZnQnLCBgdG9wJywgYHJpZ2h0JyBvcmBib3R0b20nLiAgVGhlIHNlY29uZCBlbGVtZW50 IG9mDQo7OyBlYWNoIGVudHJ5IHNwZWNpZmllcyB0aGUgbWluaW11bSBzaXplIG9mIHdpbmRv d3Mgb24gdGhhdCBzaWRlDQo7OyBcKGVpdGhlciB0aGUgZGVmYXVsdCB2YWx1ZSwgYSBudW1i ZXIgb2YgbGluZXMgb3IgY29sdW1ucywgb3IgYQ0KOzsgZnJhY3Rpb24gb2YgdGhlIGZyYW1l IHNpemUpLiAgVGhlIHRoaXJkIGVsZW1lbnQgc3BlY2lmaWVzIHRoZQ0KOzsgZGVzaXJlZCBz aXplIG9mIHdpbmRvd3Mgb24gdGhhdCBzaWRlIFwoZWl0aGVyIHRoZSBkZWZhdWx0IHZhbHVl LA0KOzsgYSBudW1iZXIgb2YgbGluZXMgb3IgY29sdW1ucywgb3IgYSBmcmFjdGlvbiBvZiB0 aGUgZnJhbWUgc2l6ZSkuDQo7OyBUaGUgZm91cnRoIGVsZW1lbnQgc3BlY2lmaWVzIHRoZSB1 cHBlciBib3VuZCBvbiB0aGUgbnVtYmVyIG9mDQo7OyBzbG90cyBvbiB0aGF0IHNpZGUsIG5p bCBpZiB0aGVyZSdzIG5vIGJvdW5kLiINCjs7ICAgOnJpc2t5IHQNCjs7ICAgOnR5cGUNCjs7 ICAgJyhzZXQNCjs7ICAgICA7OzsgOmZvcm1hdCAiJXYgJXQiDQo7OyAgICAgOmlubGluZSB0 DQo7OyAgICAgOzsgTGVmdCBzaWRlIHdpbmRvdy4NCjs7ICAgICAobGlzdA0KOzsgICAgICA6 dmFsdWUgKGxlZnQgbmlsIG5pbCBuaWwpDQo7OyAgICAgIDpmb3JtYXQgIkxlZnQ6ICAgJXZc biINCjs7ICAgICAgKGNvbnN0IDpmb3JtYXQgIiIgbGVmdCkNCjs7ICAgICAgOzsgTWluaW11 bSB3aWR0aCBvZiBsZWZ0IHNpZGUgd2luZG93cy4NCjs7ICAgICAgKGNob2ljZQ0KOzsgICAg ICAgOnRhZyAiTWluaW11bSB3aWR0aCINCjs7ICAgICAgIDpoZWxwLWVjaG8gIlRoZSBtaW5p bXVtIHdpZHRoIG9mIGxlZnQgc2lkZSB3aW5kb3dzLiINCjs7ICAgICAgIDp2YWx1ZSBuaWwN Cjs7ICAgICAgIDpmb3JtYXQgIiVbTWluaW11bSVdICV2Ig0KOzsgICAgICAgKGNvbnN0IDp0 YWcgIkRlZmF1bHQiIDpmb3JtYXQgIiV0IiBuaWwpDQo7OyAgICAgICAoaW50ZWdlciA6dGFn ICJDb2x1bW5zIiA6dmFsdWUgMTIgOnNpemUgNSkNCjs7ICAgICAgIChmbG9hdCA6dGFnICJG cmFjdGlvbiIgOnZhbHVlIC4yNSA6c2l6ZSA1KSkNCjs7ICAgICAgOzsgRGVzaXJlZCB3aWR0 aCBvZiBsZWZ0IHNpZGUgd2luZG93cy4NCjs7ICAgICAgKGNob2ljZQ0KOzsgICAgICAgOnRh ZyAiRGVzaXJlZCB3aWR0aCINCjs7ICAgICAgIDpoZWxwLWVjaG8gIlRoZSBkZXNpcmVkIHdp ZHRoIG9mIGxlZnQgc2lkZSB3aW5kb3dzLiINCjs7ICAgICAgIDp2YWx1ZSBuaWwNCjs7ICAg ICAgIDpmb3JtYXQgIiAgJVtEZXNpcmVkJV0gJXYiDQo7OyAgICAgICAoY29uc3QgOnRhZyAi RGVmYXVsdCIgOmZvcm1hdCAiJXQiIG5pbCkNCjs7ICAgICAgIChpbnRlZ2VyIDp0YWcgIkNv bHVtbnMiIDp2YWx1ZSAxMiA6c2l6ZSA1KQ0KOzsgICAgICAgKGZsb2F0IDp0YWcgIkZyYWN0 aW9uIiA6dmFsdWUgLjI1IDpzaXplIDUpKQ0KOzsgICAgICA7OyBUaGUgbWF4aW11bSBudW1i ZXIgb2Ygc2xvdHMgb2YgbGVmdCBzaWRlIHdpbmRvd3MuDQo7OyAgICAgIChjaG9pY2UNCjs7 ICAgICAgIDp0YWcgIlNsb3RzIg0KOzsgICAgICAgOmhlbHAtZWNobyAiVGhlIG1heGltdW0g bnVtYmVyIG9mIHNsb3RzIGluIGxlZnQgc2lkZSB3aW5kb3dzLiINCjs7ICAgICAgIDp2YWx1 ZSBuaWwNCjs7ICAgICAgIDpmb3JtYXQgIiAgJVtTbG90cyVdICV2Ig0KOzsgICAgICAgKGNv bnN0IDp0YWcgIlVuc3BlY2lmaWVkIiA6Zm9ybWF0ICIldCIgbmlsKQ0KOzsgICAgICAgKGlu dGVnZXIgOnRhZyAiTnVtYmVyIiA6Zm9ybWF0ICIldiIgOnZhbHVlIDMgOnNpemUgNSkpKQ0K OzsgICAgIDs7IFRvcCBzaWRlIHdpbmRvd3MuDQo7OyAgICAgKGxpc3QNCjs7ICAgICAgOnZh bHVlICh0b3AgbmlsIG5pbCBuaWwpDQo7OyAgICAgIDpmb3JtYXQgIlRvcDogICAgJXZcbiIN Cjs7ICAgICAgKGNvbnN0IDpmb3JtYXQgIiIgdG9wKQ0KOzsgICAgICA7OyBNaW5pbXVtIGhl aWdodCBvZiB0b3Agd2luZG93cy4NCjs7ICAgICAgKGNob2ljZQ0KOzsgICAgICAgOnRhZyAi TWluaW11bSBoZWlnaHQiDQo7OyAgICAgICA6aGVscC1lY2hvICJUaGUgbWluaW11bSBoZWln aHQgb2YgdG9wIHdpbmRvd3MuIg0KOzsgICAgICAgOnZhbHVlIG5pbA0KOzsgICAgICAgOmZv cm1hdCAiJVtNaW5pbXVtJV0gICV2Ig0KOzsgICAgICAgKGNvbnN0IDp0YWcgIkRlZmF1bHQi IDpmb3JtYXQgIiV0IiBuaWwpDQo7OyAgICAgICAoaW50ZWdlciA6dGFnICJMaW5lcyIgOnZh bHVlIDYgOnNpemUgNSkNCjs7ICAgICAgIChmbG9hdCA6dGFnICJGcmFjdGlvbiIgOnZhbHVl IC4yNSA6c2l6ZSA1KSkNCjs7ICAgICAgOzsgRGVzaXJlZCBzaXplIG9mIGxlZnQgc2lkZSB3 aW5kb3dzLg0KOzsgICAgICAoY2hvaWNlDQo7OyAgICAgICA6dGFnICJEZXNpcmVkIGhlaWdo dCINCjs7ICAgICAgIDpoZWxwLWVjaG8gIlRoZSBkZXNpcmVkIGhlaWdodCBvZiB0b3Agd2lu ZG93cy4iDQo7OyAgICAgICA6dmFsdWUgbmlsDQo7OyAgICAgICA6Zm9ybWF0ICIgICVbRGVz aXJlZCVdICAldiINCjs7ICAgICAgIChjb25zdCA6dGFnICJEZWZhdWx0IiA6Zm9ybWF0ICIl dCIgbmlsKQ0KOzsgICAgICAgKGludGVnZXIgOnRhZyAiTGluZXMiIDp2YWx1ZSA2IDpzaXpl IDUpDQo7OyAgICAgICAoZmxvYXQgOnRhZyAiRnJhY3Rpb24iIDp2YWx1ZSAuMjUgOnNpemUg NSkpDQo7OyAgICAgIDs7IFRoZSBtYXhpbXVtIG51bWJlciBvZiBzbG90cyBvZiB0b3Agd2lu ZG93cy4NCjs7ICAgICAgKGNob2ljZQ0KOzsgICAgICAgOnRhZyAiU2xvdHMiDQo7OyAgICAg ICA6aGVscC1lY2hvICJUaGUgbWF4aW11bSBudW1iZXIgb2Ygc2xvdHMgaW4gdG9wIHdpbmRv d3MuIg0KOzsgICAgICAgOnZhbHVlIG5pbA0KOzsgICAgICAgOmZvcm1hdCAiICAlW1Nsb3Rz JV0gJXYiDQo7OyAgICAgICAoY29uc3QgOnRhZyAiVW5zcGVjaWZpZWQiIDpmb3JtYXQgIiV0 IiBuaWwpDQo7OyAgICAgICAoaW50ZWdlciA6dGFnICJOdW1iZXIiIDp2YWx1ZSAzIDpmb3Jt YXQgIiV2IiA6c2l6ZSA1KSkpDQo7OyAgICAgOzsgUmlnaHQgc2lkZSB3aW5kb3dzLg0KOzsg ICAgIChsaXN0DQo7OyAgICAgIDp2YWx1ZSAocmlnaHQgbmlsIG5pbCBuaWwpDQo7OyAgICAg IDpmb3JtYXQgIlJpZ2h0OiAgJXZcbiINCjs7ICAgICAgKGNvbnN0IDpmb3JtYXQgIiIgcmln aHQpDQo7OyAgICAgIDs7IE1pbmltdW0gd2lkdGggb2YgcmlnaHQgc2lkZSB3aW5kb3dzLg0K OzsgICAgICAoY2hvaWNlDQo7OyAgICAgICA6dGFnICJNaW5pbXVtIHdpZHRoIg0KOzsgICAg ICAgOmhlbHAtZWNobyAiVGhlIG1pbmltdW0gd2lkdGggb2Ygd2luZG93cyBvbiB0aGUgcmln aHQuIg0KOzsgICAgICAgOnZhbHVlIG5pbA0KOzsgICAgICAgOmZvcm1hdCAiJVtNaW5pbXVt JV0gICV2Ig0KOzsgICAgICAgKGNvbnN0IDp0YWcgIkRlZmF1bHQiIDpmb3JtYXQgIiV0IiBu aWwpDQo7OyAgICAgICAoaW50ZWdlciA6dGFnICJDb2x1bW5zIiA6dmFsdWUgMTIgOnNpemUg NSkNCjs7ICAgICAgIChmbG9hdCA6dGFnICJGcmFjdGlvbiIgOnZhbHVlIC4yNSA6c2l6ZSA1 KSkNCjs7ICAgICAgOzsgRGVzaXJlZCB3aWR0aCBvZiByaWdodCBzaWRlIHdpbmRvd3MuDQo7 OyAgICAgIChjaG9pY2UNCjs7ICAgICAgIDp0YWcgIkRlc2lyZWQgd2lkdGgiDQo7OyAgICAg ICA6aGVscC1lY2hvICJUaGUgZGVzaXJlZCB3aWR0aCBvZiB3aW5kb3dzIG9uIHRoZSBsZWZ0 LiINCjs7ICAgICAgIDp2YWx1ZSBuaWwNCjs7ICAgICAgIDpmb3JtYXQgIiAgJVtEZXNpcmVk JV0gICV2Ig0KOzsgICAgICAgKGNvbnN0IDp0YWcgIkRlZmF1bHQiIDpmb3JtYXQgIiV0IiBu aWwpDQo7OyAgICAgICAoaW50ZWdlciA6dGFnICJDb2x1bW5zIiA6dmFsdWUgMTIgOnNpemUg NSkNCjs7ICAgICAgIChmbG9hdCA6dGFnICJGcmFjdGlvbiIgOnZhbHVlIC4yNSA6c2l6ZSA1 KSkNCjs7ICAgICAgOzsgVGhlIG1heGltdW0gbnVtYmVyIG9mIHNsb3RzIG9mIHJpZ2h0IHNp ZGUgd2luZG93cy4NCjs7ICAgICAgKGNob2ljZQ0KOzsgICAgICAgOnRhZyAiU2xvdHMiDQo7 OyAgICAgICA6aGVscC1lY2hvICJUaGUgbWF4aW11bSBudW1iZXIgb2Ygc2xvdHMgaW4gcmln aHQgc2lkZSB3aW5kb3dzLiINCjs7ICAgICAgIDp2YWx1ZSBuaWwNCjs7ICAgICAgIDpmb3Jt YXQgIiAgJVtTbG90cyVdICV2Ig0KOzsgICAgICAgKGNvbnN0IDp0YWcgIlVuc3BlY2lmaWVk IiA6Zm9ybWF0ICIldCIgbmlsKQ0KOzsgICAgICAgKGludGVnZXIgOnRhZyAiTnVtYmVyIiA6 dmFsdWUgMyA6Zm9ybWF0ICIldiIgOnNpemUgNSkpKQ0KOzsgICAgIDs7IEJvdHRvbSBzaWRl IHdpbmRvd3MuDQo7OyAgICAgKGxpc3QNCjs7ICAgICAgOnZhbHVlIChib3R0b20gbmlsIG5p bCBuaWwpDQo7OyAgICAgIDpmb3JtYXQgIkJvdHRvbTogJXZcbiINCjs7ICAgICAgKGNvbnN0 IDpmb3JtYXQgIiIgYm90dG9tKQ0KOzsgICAgICA7OyBNaW5pbXVtIGhlaWdodCBvZiBib3R0 b20gd2luZG93cy4NCjs7ICAgICAgKGNob2ljZQ0KOzsgICAgICAgOnRhZyAiTWluaW11bSBo ZWlnaHQiDQo7OyAgICAgICA6aGVscC1lY2hvICJUaGUgbWluaW11bSBoZWlnaHQgb2YgYm90 dG9tIHdpbmRvd3MuIg0KOzsgICAgICAgOnZhbHVlIG5pbA0KOzsgICAgICAgOmZvcm1hdCAi JVtNaW5pbXVtJV0gICV2Ig0KOzsgICAgICAgKGNvbnN0IDp0YWcgIkRlZmF1bHQiIDpmb3Jt YXQgIiV0IiBuaWwpDQo7OyAgICAgICAoaW50ZWdlciA6dGFnICJMaW5lcyIgOnZhbHVlIDYg OnNpemUgNSkNCjs7ICAgICAgIChmbG9hdCA6dGFnICJGcmFjdGlvbiIgOnZhbHVlIC4yNSA6 c2l6ZSA1KSkNCjs7ICAgICAgOzsgRGVzaXJlZCBoZWlnaHQgb2YgYm90dG9tIHdpbmRvd3Mu DQo7OyAgICAgIChjaG9pY2UNCjs7ICAgICAgIDp0YWcgIkRlc2lyZWQgaGVpZ2h0Ig0KOzsg ICAgICAgOmhlbHAtZWNobyAiVGhlIGRlc2lyZWQgaGVpZ2h0IG9mIGJvdHRvbSB3aW5kb3dz LiINCjs7ICAgICAgIDp2YWx1ZSBuaWwNCjs7ICAgICAgIDpmb3JtYXQgIiAgJVtEZXNpcmVk JV0gICV2Ig0KOzsgICAgICAgKGNvbnN0IDp0YWcgIkRlZmF1bHQiIDpmb3JtYXQgIiV0IiBu aWwpDQo7OyAgICAgICAoaW50ZWdlciA6dGFnICJMaW5lcyIgOnZhbHVlIDYgOnNpemUgNSkN Cjs7ICAgICAgIChmbG9hdCA6dGFnICJGcmFjdGlvbiIgOnZhbHVlIC4yNSA6c2l6ZSA1KSkN Cjs7ICAgICAgOzsgVGhlIG1heGltdW0gbnVtYmVyIG9mIHNsb3RzIG9mIGJvdHRvbSB3aW5k b3dzLg0KOzsgICAgICAoY2hvaWNlDQo7OyAgICAgICA6dGFnICJTbG90cyINCjs7ICAgICAg IDpoZWxwLWVjaG8gIlRoZSBtYXhpbXVtIG51bWJlciBvZiBzbG90cyBpbiBib3RvbSB3aW5k b3dzLiINCjs7ICAgICAgIDp2YWx1ZSBuaWwNCjs7ICAgICAgIDpmb3JtYXQgIiAgJVtTbG90 cyVdICV2Ig0KOzsgICAgICAgKGNvbnN0IDp0YWcgIlVuc3BlY2lmaWVkIiA6Zm9ybWF0ICIl dCIgbmlsKQ0KOzsgICAgICAgKGludGVnZXIgOnRhZyAiTnVtYmVyIiA6dmFsdWUgMyA6Zm9y bWF0ICIldiIgOnNpemUgNSkpKSkNCjs7ICAgOmdyb3VwICd3aW5kb3dzKQ0KDQo7OyBTdXBw b3J0IGZvciBjcmVhdGluZyBhdG9taWMgYW5kIHNpZGUgd2luZG93cyB2aWEgYGRpc3BsYXkt YnVmZmVyJw0KOzsgKGV4cGVyaW1lbnRhbCBvbmx5KS4NCihkZWZ1biBkaXNwbGF5LWJ1ZmZl ci1pbi1hdG9tLXdpbmRvdyAoYnVmZmVyIGFsaXN0KQ0KICAiRGlzcGxheSBCVUZGRVIgaW4g YW4gYXRvbWljIHdpbmRvdy4NClRoaXMgZnVuY3Rpb24gZGlzcGxheXMgQlVGRkVSIGluIGEg bmV3IHdpbmRvdyB0aGF0IHdpbGwgYmUNCmNvbWJpbmVkIHdpdGggYW4gZXhpc3Rpbmcgd2lu ZG93IHRvIGZvcm0gYW4gYXRvbWljIHdpbmRvdy4gIElmDQp0aGUgZXhpc3Rpbmcgd2luZG93 IGlzIGFscmVhZHkgcGFydCBvZiBhbiBhdG9taWMgd2luZG93LCBhZGQgdGhlDQpuZXcgd2lu ZG93IHRvIHRoYXQgYXRvbWljIHdpbmRvdy4gIE9wZXJhdGlvbnMgbGlrZSBgc3BsaXQtd2lu ZG93Jw0Kb3IgYGRlbGV0ZS13aW5kb3cnLCB3aGVuIGFwcGxpZWQgdG8gYSBjb25zdGl0dWVu dCBvZiBhbiBhdG9taWMNCndpbmRvdywgYXJlIGFwcGxpZWQgYXRvbWljYWxseSB0byB0aGUg cm9vdCBvZiB0aGF0IGF0b21pYyB3aW5kb3cuDQoNCkFMSVNUIGlzIGFuIGFzc29jaWF0aW9u IGxpc3Qgb2Ygc3ltYm9scyBhbmQgdmFsdWVzLiAgVGhlDQpmb2xsb3dpbmcgc3ltYm9scyBj YW4gYmUgdXNlZC4NCg0KYHdpbmRvdycgc3BlY2lmaWVzIHRoZSBleGlzdGluZyB3aW5kb3cg dGhlIG5ldyB3aW5kb3cgc2hhbGwgYmUNCiAgY29tYmluZWQgd2l0aC4gIFVzZSBgd2luZG93 LWF0b20tcm9vdCcgdG8gbWFrZSB0aGUgbmV3IHdpbmRvdyBhDQogIHNpYmxpbmcgb2YgYW4g YXRvbWljIHdpbmRvdydzIHJvb3QuICBJZiBhbiBpbnRlcm5hbCB3aW5kb3cgaXMNCiAgc3Bl Y2lmaWVkIGhlcmUsIGFsbCBjaGlsZHJlbiBvZiB0aGF0IHdpbmRvdyBiZWNvbWUgcGFydCBv ZiB0aGUNCiAgYXRvbWljIHdpbmRvdyB0b28uICBJZiBubyB3aW5kb3cgaXMgc3BlY2lmaWVk LCB0aGUgbmV3IHdpbmRvdw0KICBiZWNvbWVzIGEgc2libGluZyBvZiB0aGUgc2VsZWN0ZWQg d2luZG93Lg0KDQpgc2lkZScgZGVub3RlcyB0aGUgc2lkZSBvZiB0aGUgZXhpc3Rpbmcgd2lu ZG93IHdoZXJlIHRoZSBuZXcNCiAgd2luZG93IHNoYWxsIGJlIGxvY2F0ZWQuICBWYWxpZCB2 YWx1ZXMgYXJlIGBiZWxvdycsIGByaWdodCcsDQogIGBhYm92ZScgYW5kIGBsZWZ0Jy4gIFRo ZSBkZWZhdWx0IGlzIGBiZWxvdycuDQoNClRoZSByZXR1cm4gdmFsdWUgaXMgdGhlIG5ldyB3 aW5kb3csIG5pbCB3aGVuIGNyZWF0aW5nIHRoYXQgd2luZG93DQpmYWlsZWQuIg0KICAobGV0 ICgoaWdub3JlLXdpbmRvdy1wYXJhbWV0ZXJzIHQpDQoJKHdpbmRvdy1jb21iaW5hdGlvbi1s aW1pdCB0KQ0KCSh3aW5kb3cgKGNkciAoYXNzcSAnd2luZG93IGFsaXN0KSkpDQoJKHNpZGUg KGNkciAoYXNzcSAnc2lkZSBhbGlzdCkpKQ0KCW5ldykNCiAgICAoc2V0cSB3aW5kb3cgKHdp bmRvdy1ub3JtYWxpemUtd2luZG93IHdpbmRvdykpDQogICAgOzsgU3BsaXQgb2ZmIG5ldyB3 aW5kb3cNCiAgICAod2hlbiAoc2V0cSBuZXcgKHNwbGl0LXdpbmRvdyB3aW5kb3cgbmlsIHNp ZGUpKQ0KICAgICAgOzsgTWFrZSBzdXJlIHdlIGhhdmUgYSB2YWxpZCBhdG9taWMgd2luZG93 Lg0KICAgICAgKHdpbmRvdy1tYWtlLWF0b20gKHdpbmRvdy1wYXJlbnQgd2luZG93KSkNCiAg ICAgIDs7IERpc3BsYXkgQlVGRkVSIGluIE5FVy4NCiAgICAgIChkaXNwbGF5LWJ1ZmZlci1y ZWNvcmQtd2luZG93ICd3aW5kb3cgbmV3IGJ1ZmZlcikNCiAgICAgICh3aW5kb3ctLWRpc3Bs YXktYnVmZmVyLTIgYnVmZmVyIG5ldyBkaXNwbGF5LWJ1ZmZlci1tYXJrLWRlZGljYXRlZCkN CiAgICAgIChzZXQtd2luZG93LXByZXYtYnVmZmVycyBuZXcgbmlsKQ0KICAgICAgOzsgUmV0 dXJuIE5FVy4NCiAgICAgIG5ldykpKQ0KDQooZGVmdW4gd2luZG93LS1tYWpvci1zaWRlLXdp bmRvdyAoc2lkZSkNCiAgIlJldHVybiBtYWpvciBzaWRlIHdpbmRvdyBvbiBTSURFLg0KU0lE RSBtdXN0IGJlIG9uZSBvZiB0aGUgc3ltYm9scyBgbGVmdCcsIGB0b3AnLCBgcmlnaHQnIG9y DQpgYm90dG9tJy4gIFJldHVybiBuaWwgaWYgbm8gc3VjaCB3aW5kb3cgZXhpc3RzLiINCiAg KGxldCAoKHJvb3QgKGZyYW1lLXJvb3Qtd2luZG93KSkNCgl3aW5kb3cpDQogICAgOzsgKDEp IElmIGEgd2luZG93IG9uIHRoZSBvcHBvc2l0ZSBzaWRlIGV4aXN0cywgcmV0dXJuIHRoYXQg d2luZG93J3MNCiAgICA7OyAgICAgc2libGluZy4NCiAgICA7OyAoMikgSWYgdGhlIG5ldyB3 aW5kb3cgc2hhbGwgc3BhbiB0aGUgZW50aXJlIHNpZGUsIHJldHVybiB0aGUNCiAgICA7OyAg ICAgZnJhbWUncyByb290IHdpbmRvdy4NCiAgICA7OyAoMykgSWYgYSB3aW5kb3cgb24gYW4g b3J0aG9nb25hbCBzaWRlIGV4aXN0cywgcmV0dXJuIHRoYXQNCiAgICA7OyAgICAgd2luZG93 J3Mgc2libGluZy4NCiAgICA7OyAoNCkgT3RoZXJ3aXNlIHJldHVybiB0aGUgZnJhbWUncyBy b290IHdpbmRvdy4NCiAgICAoY29uZA0KICAgICAoKG9yIChhbmQgKGVxIHNpZGUgJ2xlZnQp DQoJICAgICAgIChzZXRxIHdpbmRvdyAod2luZG93LXdpdGgtcGFyYW1ldGVyICd3aW5kb3ct c2lkZSAncmlnaHQgbmlsIHQpKSkNCgkgIChhbmQgKGVxIHNpZGUgJ3RvcCkNCgkgICAgICAg KHNldHEgd2luZG93ICh3aW5kb3ctd2l0aC1wYXJhbWV0ZXIgJ3dpbmRvdy1zaWRlICdib3R0 b20gbmlsIHQpKSkpDQogICAgICAod2luZG93LXByZXYtc2libGluZyB3aW5kb3cpKQ0KICAg ICAoKG9yIChhbmQgKGVxIHNpZGUgJ3JpZ2h0KQ0KCSAgICAgICAoc2V0cSB3aW5kb3cgKHdp bmRvdy13aXRoLXBhcmFtZXRlciAnd2luZG93LXNpZGUgJ2xlZnQgbmlsIHQpKSkNCgkgIChh bmQgKGVxIHNpZGUgJ2JvdHRvbSkNCgkgICAgICAgKHNldHEgd2luZG93ICh3aW5kb3ctd2l0 aC1wYXJhbWV0ZXIgJ3dpbmRvdy1zaWRlICd0b3AgbmlsIHQpKSkpDQogICAgICAod2luZG93 LW5leHQtc2libGluZyB3aW5kb3cpKQ0KICAgICAoKG1lbXEgc2lkZSAnKGxlZnQgcmlnaHQp KQ0KICAgICAgKGNvbmQNCiAgICAgICAod2luZG93LXNpZGVzLXZlcnRpY2FsDQoJcm9vdCkN CiAgICAgICAoKHNldHEgd2luZG93ICh3aW5kb3ctd2l0aC1wYXJhbWV0ZXIgJ3dpbmRvdy1z aWRlICd0b3AgbmlsIHQpKQ0KCSh3aW5kb3ctbmV4dC1zaWJsaW5nIHdpbmRvdykpDQogICAg ICAgKChzZXRxIHdpbmRvdyAod2luZG93LXdpdGgtcGFyYW1ldGVyICd3aW5kb3ctc2lkZSAn Ym90dG9tIG5pbCB0KSkNCgkod2luZG93LXByZXYtc2libGluZyB3aW5kb3cpKQ0KICAgICAg ICh0IHJvb3QpKSkNCiAgICAgKChtZW1xIHNpZGUgJyh0b3AgYm90dG9tKSkNCiAgICAgIChj b25kDQogICAgICAgKChub3Qgd2luZG93LXNpZGVzLXZlcnRpY2FsKQ0KCXJvb3QpDQogICAg ICAgKChzZXRxIHdpbmRvdyAod2luZG93LXdpdGgtcGFyYW1ldGVyICd3aW5kb3ctc2lkZSAn bGVmdCBuaWwgdCkpDQoJKHdpbmRvdy1uZXh0LXNpYmxpbmcgd2luZG93KSkNCiAgICAgICAo KHNldHEgd2luZG93ICh3aW5kb3ctd2l0aC1wYXJhbWV0ZXIgJ3dpbmRvdy1zaWRlICdyaWdo dCBuaWwgdCkpDQoJKHdpbmRvdy1wcmV2LXNpYmxpbmcgd2luZG93KSkNCiAgICAgICAodCBy b290KSkpKSkpDQoNCihkZWZ1biBkaXNwbGF5LWJ1ZmZlci1pbi1tYWpvci1zaWRlLXdpbmRv dyAoYnVmZmVyIHNpZGUgc2xvdCAmb3B0aW9uYWwgYWxpc3QpDQogICJEaXNwbGF5IEJVRkZF UiBpbiBhIG5ldyB3aW5kb3cgb24gU0lERSBvZiB0aGUgc2VsZWN0ZWQgZnJhbWUuDQpTSURF IG11c3QgYmUgb25lIG9mIGBsZWZ0JywgYHRvcCcsIGByaWdodCcgb3IgYGJvdHRvbScuICBT TE9UDQpzcGVjaWZpZXMgdGhlIHNsb3QgdG8gdXNlLiAgQUxJU1QgaXMgYW4gYXNzb2NpYXRp b24gbGlzdCBvZg0Kc3ltYm9scyBhbmQgdmFsdWVzIGFzIHBhc3NlZCB0byBgZGlzcGxheS1i dWZmZXItaW4tc2lkZS13aW5kb3cnLg0KVGhpcyBmdW5jdGlvbiBtYXkgYmUgY2FsbGVkIG9u bHkgaWYgbm8gd2luZG93IG9uIFNJREUgZXhpc3RzIHlldC4NClRoZSBuZXcgd2luZG93IGF1 dG9tYXRpY2FsbHkgYmVjb21lcyB0aGUgXCJtYWpvclwiIHNpZGUgd2luZG93IG9uDQpTSURF LiAgUmV0dXJuIHRoZSBuZXcgd2luZG93LCBuaWwgaWYgaXRzIGNyZWF0aW9uIHdpbmRvdyBm YWlsZWQuIg0KICAobGV0KiAoKHJvb3QgKGZyYW1lLXJvb3Qtd2luZG93KSkNCgkgKGxlZnQt b3ItcmlnaHQgKG1lbXEgc2lkZSAnKGxlZnQgcmlnaHQpKSkNCgkgKHNpemUgKG9yIChhc3Nx ICdzaXplIGFsaXN0KQ0KCQkgICAoLyAod2luZG93LXRvdGFsLXNpemUgKGZyYW1lLXJvb3Qt d2luZG93KSBsZWZ0LW9yLXJpZ2h0KQ0KCQkgICAgICA7OyBCeSBkZWZhdWx0IHVzZSBhIGZv dXJ0aCBvZiB0aGUgc2l6ZSBvZiB0aGUNCgkJICAgICAgOzsgZnJhbWUncyByb290IHdpbmRv dy4gIFRoaXMgaGFzIHRvIGJlIG1hZGUNCgkJICAgICAgOzsgY3VzdG9taXphYmxlIHZpYSBB TElTVC4NCgkJICAgICAgNCkpKQ0KCSAobWFqb3IgKHdpbmRvdy0tbWFqb3Itc2lkZS13aW5k b3cgc2lkZSkpDQoJIChzZWxlY3RlZC13aW5kb3cgKHNlbGVjdGVkLXdpbmRvdykpDQoJIChv bi1zaWRlIChjb25kDQoJCSAgICgoZXEgc2lkZSAndG9wKSAnYWJvdmUpDQoJCSAgICgoZXEg c2lkZSAnYm90dG9tKSAnYmVsb3cpDQoJCSAgICh0IHNpZGUpKSkNCgkgOzsgVGhlIGZvbGxv d2luZyB0d28gYmluZGluZ3Mgd2lsbCB0ZWxsIGBzcGxpdC13aW5kb3cnIHRvIHRha2UNCgkg OzsgdGhlIHNwYWNlIGZvciB0aGUgbmV3IHdpbmRvdyBmcm9tIGBtYWpvcicgYW5kIG5vdCBt YWtlIGEgbmV3DQoJIDs7IHBhcmVudCB3aW5kb3cgdW5sZXNzIG5lZWRlZC4NCgkgKHdpbmRv dy1jb21iaW5hdGlvbi1yZXNpemUgJ3NpZGUpDQoJICh3aW5kb3ctY29tYmluYXRpb24tbGlt aXQgbmlsKQ0KCSAobmV3IChzcGxpdC13aW5kb3cgbWFqb3IgKC0gc2l6ZSkgb24tc2lkZSkp DQoJIGZ1bikNCiAgICAod2hlbiBuZXcNCiAgICAgIDs7IEluaXRpYWxpemUgYHdpbmRvdy1z aWRlJyBwYXJhbWV0ZXIgb2YgbmV3IHdpbmRvdyB0byBTSURFLg0KICAgICAgKHNldC13aW5k b3ctcGFyYW1ldGVyIG5ldyAnd2luZG93LXNpZGUgc2lkZSkNCiAgICAgIDs7IEluc3RhbGwg YHdpbmRvdy1zbG90JyBwYXJhbWV0ZXIgb2YgbmV3IHdpbmRvdy4NCiAgICAgIChzZXQtd2lu ZG93LXBhcmFtZXRlciBuZXcgJ3dpbmRvdy1zbG90IHNsb3QpDQogICAgICA7OyBJbnN0YWxs IGBkZWxldGUtd2luZG93JyBwYXJhbWV0ZXIgdGh1cyBtYWtpbmcgc3VyZSB0aGF0IHdoZW4N CiAgICAgIDs7IHRoZSBuZXcgd2luZG93IGlzIGRlbGV0ZWQsIGEgc2lkZSB3aW5kb3cgb24g dGhlIG9wcG9zaXRlIHNpZGUNCiAgICAgIDs7IGRvZXMgbm90IGdldCByZXNpemVkLg0KICAg ICAgKHNldC13aW5kb3ctcGFyYW1ldGVyIG5ldyAnZGVsZXRlLXdpbmRvdyAnZGVsZXRlLXNp ZGUtd2luZG93KQ0KICAgICAgOzsgSW5zdGFsbCBCVUZGRVIgaW4gbmV3IHdpbmRvdy4NCiAg ICAgICh3aW5kb3ctLWRpc3BsYXktYnVmZmVyLTIgYnVmZmVyIG5ldyBkaXNwbGF5LWJ1ZmZl ci1tYXJrLWRlZGljYXRlZCkNCiAgICAgIDs7IFJlY29yZCB0aGF0IHdlIHBvcHBlZCB1cCBh IG5ldyB3aW5kb3cuDQogICAgICAoZGlzcGxheS1idWZmZXItcmVjb3JkLXdpbmRvdyAnd2lu ZG93IG5ldyBidWZmZXIpDQogICAgICA7OyBNYWtlIG5ldyB3aW5kb3cgZGVkaWNhdGVkLiAg VGhpcyBzaG91bGQgYmUgaGFuZGxlZCB2aWEgQUxJU1QNCiAgICAgIDs7IGV2ZW50dWFsbHku DQogICAgICAoc2V0LXdpbmRvdy1kZWRpY2F0ZWQtcCBuZXcgJ3NpZGUpDQogICAgICA7OyBS ZXNldCBsaXN0IG9mIG5ldyB3aW5kb3cncyBwcmV2aW91cyBidWZmZXJzIHRvIG5pbC4NCiAg ICAgIChzZXQtd2luZG93LXByZXYtYnVmZmVycyBuZXcgbmlsKQ0KICAgICAgOzsgUmV0dXJu IHRoZSBuZXcgd2luZG93Lg0KICAgICAgbmV3KSkpDQoNCihkZWZ1biBkZWxldGUtc2lkZS13 aW5kb3cgKHdpbmRvdykNCiAgIkRlbGV0ZSBzaWRlIHdpbmRvdyBXSU5ET1cuIg0KICAobGV0 ICgod2luZG93LWNvbWJpbmF0aW9uLXJlc2l6ZQ0KCSAod2luZG93LXBhcmFtZXRlciAod2lu ZG93LXBhcmVudCB3aW5kb3cpICd3aW5kb3ctc2lkZSkpDQoJKGlnbm9yZS13aW5kb3ctcGFy YW1ldGVycyB0KSkNCiAgICAoZGVsZXRlLXdpbmRvdyB3aW5kb3cpKSkNCg0KKGRlZnVuIGRp c3BsYXktYnVmZmVyLWluLXNpZGUtd2luZG93IChidWZmZXIgYWxpc3QpDQogICJEaXNwbGF5 IEJVRkZFUiBpbiBhIHdpbmRvdyBvbiBzaWRlIFNJREUgb2YgdGhlIHNlbGVjdGVkIGZyYW1l Lg0KQUxJU1QgaXMgYW4gYXNzb2NpYXRpb24gbGlzdCBvZiBzeW1ib2xzIGFuZCB2YWx1ZXMu ICBUaGUNCmZvbGxvd2luZyBzeW1ib2xzIGNhbiBiZSB1c2VkOg0KDQpgc2lkZScgZGVub3Rl cyB0aGUgc2lkZSBvZiB0aGUgZXhpc3Rpbmcgd2luZG93IHdoZXJlIHRoZSBuZXcNCiAgd2lu ZG93IHNoYWxsIGJlIGxvY2F0ZWQuICBWYWxpZCB2YWx1ZXMgYXJlIGBib3R0b20nLCBgcmln aHQnLA0KICBgdG9wJyBhbmQgYGxlZnQnLiAgVGhlIGRlZmF1bHQgaXMgYGJvdHRvbScuDQoN CmBzbG90JyBpZiBub24tbmlsLCBzcGVjaWZpZXMgdGhlIHdpbmRvdyBzbG90IHdoZXJlIHRv IGRpc3BsYXkNCiAgQlVGRkVSLiAgQSB2YWx1ZSBvZiB6ZXJvIG9yIG5pbCBtZWFucyB1c2Ug dGhlIG1pZGRsZSBzbG90IG9uDQogIHRoZSBzcGVjaWZpZWQgc2lkZS4gIEEgbmVnYXRpdmUg dmFsdWUgbWVhbnMgdXNlIGEgc2xvdA0KICBwcmVjZWRpbmcgKHRoYXQgaXMsIGFib3ZlIG9y IG9uIHRoZSBsZWZ0IG9mKSB0aGUgbWlkZGxlIHNsb3QuDQogIEEgcG9zaXRpdmUgdmFsdWUg bWVhbnMgdXNlIGEgc2xvdCBmb2xsb3dpbmcgKHRoYXQgaXMsIGJlbG93IG9yDQogIG9uIHRo ZSByaWdodCBvZikgdGhlIG1pZGRsZSBzbG90LiAgVGhlIGRlZmF1bHQgaXMgemVyby4iDQog IChsZXQgKChzaWRlIChvciAoY2RyIChhc3NxICdzaWRlIGFsaXN0KSkgJ2JvdHRvbSkpDQoJ KHNsb3QgKG9yIChjZHIgKGFzc3EgJ3Nsb3QgYWxpc3QpKSAwKSkNCgluZXcpDQogICAgKGNv bmQNCiAgICAgKChub3QgKG1lbXEgc2lkZSAnKHRvcCBib3R0b20gbGVmdCByaWdodCkpKQ0K ICAgICAgKGVycm9yICJJbnZhbGlkIHNpZGUgJXMgc3BlY2lmaWVkIiBzaWRlKSkNCiAgICAg KChub3QgKG51bWJlcnAgc2xvdCkpDQogICAgICAoZXJyb3IgIkludmFsaWQgc2xvdCAlcyBz cGVjaWZpZWQiIHNsb3QpKSkNCg0KICAgIChsZXQqICgobWFqb3IgKHdpbmRvdy13aXRoLXBh cmFtZXRlciAnd2luZG93LXNpZGUgc2lkZSBuaWwgdCkpDQoJICAgOzsgYG1ham9yJyBpcyB0 aGUgbWFqb3Igd2luZG93IG9uIFNJREUsIGB3aW5kb3dzJyB0aGUgbGlzdCBvZg0KCSAgIDs7 IGxpZmUgd2luZG93cyBvbiBTSURFLg0KCSAgICh3aW5kb3dzDQoJICAgICh3aGVuIG1ham9y DQoJICAgICAgKGxldCAod2luZG93cykNCgkJKHdhbGstd2luZG93LXRyZWUNCgkJIChsYW1i ZGEgKHdpbmRvdykNCgkJICAgKHdoZW4gKGVxICh3aW5kb3ctcGFyYW1ldGVyIHdpbmRvdyAn d2luZG93LXNpZGUpIHNpZGUpDQoJCSAgICAgKHNldHEgd2luZG93cyAoY29ucyB3aW5kb3cg d2luZG93cykpKSkpDQoJCShucmV2ZXJzZSB3aW5kb3dzKSkpKQ0KCSAgIChzbG90cyAod2hl biBtYWpvciAobWF4IDEgKHdpbmRvdy1jaGlsZC1jb3VudCBtYWpvcikpKSkNCgkgICAobWF4 LXNsb3RzDQoJICAgIChudGggKGNvbmQNCgkJICAoKGVxIHNpZGUgJ2xlZnQpIDApDQoJCSAg KChlcSBzaWRlICd0b3ApIDEpDQoJCSAgKChlcSBzaWRlICdyaWdodCkgMikNCgkJICAoKGVx IHNpZGUgJ2JvdHRvbSkgMykpDQoJCSB3aW5kb3ctc2lkZXMtc2xvdHMpKQ0KCSAgIChzZWxl Y3RlZC13aW5kb3cgKHNlbGVjdGVkLXdpbmRvdykpDQoJICAgd2luZG93IHRoaXMtd2luZG93 IHRoaXMtc2xvdCBwcmV2LXdpbmRvdyBuZXh0LXdpbmRvdw0KCSAgIGJlc3Qtd2luZG93IGJl c3Qtc2xvdCBhYnMtc2xvdCBuZXctd2luZG93KQ0KDQogICAgICAoY29uZA0KICAgICAgICgo YW5kIChudW1iZXJwIG1heC1zbG90cykgKDw9IG1heC1zbG90cyAwKSkNCgk7OyBObyBzaWRl LXNsb3RzIGF2YWlsYWJsZSBvbiB0aGlzIHNpZGUuICBEb24ndCBjcmVhdGUgYW4gZXJyb3Is DQoJOzsganVzdCByZXR1cm4gbmlsLg0KCW5pbCkNCiAgICAgICAoKG5vdCB3aW5kb3dzKQ0K CTs7IE5vIG1ham9yIHdpbmRvdyBleGlzdHMgb24gdGhpcyBzaWRlLCBtYWtlIG9uZS4NCgko ZGlzcGxheS1idWZmZXItaW4tbWFqb3Itc2lkZS13aW5kb3cgYnVmZmVyIHNpZGUgc2xvdCBh bGlzdCkpDQogICAgICAgKHQNCgk7OyBTY2FuIHdpbmRvd3Mgb24gU0lERS4NCgkoY2F0Y2gg J2ZvdW5kDQoJICAoZG9saXN0ICh3aW5kb3cgd2luZG93cykNCgkgICAgKHNldHEgdGhpcy1z bG90ICh3aW5kb3ctcGFyYW1ldGVyIHdpbmRvdyAnd2luZG93LXNsb3QpKQ0KCSAgICAoY29u ZA0KCSAgICAgOzsgVGhlIGZvbGxvd2luZyBzaG91bGQgbm90IGhhcHBlbiBhbmQgcHJvYmFi bHkgYmUgY2hlY2tlZA0KCSAgICAgOzsgYnkgd2luZG93LS1zaWRlLWNoZWNrLg0KCSAgICAg KChub3QgKG51bWJlcnAgdGhpcy1zbG90KSkpDQoJICAgICAoKD0gdGhpcy1zbG90IHNsb3Qp DQoJICAgICAgOzsgQSB3aW5kb3cgd2l0aCBhIG1hdGNoaW5nIHNsb3QgaGFzIGJlZW4gZm91 bmQuDQoJICAgICAgKHNldHEgdGhpcy13aW5kb3cgd2luZG93KQ0KCSAgICAgICh0aHJvdyAn Zm91bmQgdCkpDQoJICAgICAodA0KCSAgICAgIDs7IENoZWNrIGlmIHRoaXMgd2luZG93IGhh cyBhIGJldHRlciBzbG90IHZhbHVlIHdydCB0aGUNCgkgICAgICA7OyBzbG90IG9mIHRoZSB3 aW5kb3cgd2Ugd2FudC4NCgkgICAgICAoc2V0cSBhYnMtc2xvdA0KCQkgICAgKGlmIChvciAo YW5kICg+IHRoaXMtc2xvdCAwKSAoPiBzbG90IDApKQ0KCQkJICAgIChhbmQgKDwgdGhpcy1z bG90IDApICg8IHNsb3QgMCkpKQ0KCQkJKGFicyAoLSBzbG90IHRoaXMtc2xvdCkpDQoJCSAg ICAgICgrIChhYnMgc2xvdCkgKGFicyB0aGlzLXNsb3QpKSkpDQoJICAgICAgKHVubGVzcyAo YW5kIGJlc3Qtc2xvdCAoPD0gYmVzdC1zbG90IGFicy1zbG90KSkNCgkJKHNldHEgYmVzdC13 aW5kb3cgd2luZG93KQ0KCQkoc2V0cSBiZXN0LXNsb3QgYWJzLXNsb3QpKQ0KCSAgICAgIChj b25kDQoJICAgICAgICgoPD0gdGhpcy1zbG90IHNsb3QpDQoJCShzZXRxIHByZXYtd2luZG93 IHdpbmRvdykpDQoJICAgICAgICgobm90IG5leHQtd2luZG93KQ0KCQkoc2V0cSBuZXh0LXdp bmRvdyB3aW5kb3cpKSkpKSkpDQoNCgk7OyBgdGhpcy13aW5kb3cnIGlzIHRoZSBmaXJzdCB3 aW5kb3cgd2l0aCB0aGUgc2FtZSBTTE9ULg0KCTs7IGBwcmV2LXdpbmRvdycgaXMgdGhlIHdp bmRvdyB3aXRoIHRoZSBsYXJnZXN0IHNsb3QgPCBTTE9ULiAgQSBuZXcNCgk7OyB3aW5kb3cg d2lsbCBiZSBjcmVhdGVkIGFmdGVyIGl0Lg0KCTs7IGBuZXh0LXdpbmRvdycgaXMgdGhlIHdp bmRvdyB3aXRoIHRoZSBzbWFsbGVzdCBzbG90ID4gU0xPVC4gIEEgbmV3DQoJOzsgd2luZG93 IHdpbGwgYmUgY3JlYXRlZCBiZWZvcmUgaXQuDQoJOzsgYGJlc3Qtd2luZG93JyBpcyB0aGUg d2luZG93IHdpdGggdGhlIHNtYWxsZXN0IGFic29sdXRlIGRpZmZlcmVuY2UNCgk7OyBvZiBp dHMgc2xvdCBhbmQgU0xPVC4NCg0KCTs7IE5vdGU6IFdlIGRlZGljYXRlIHRoZSB3aW5kb3cg dXNlZCBzb2Z0bHkgdG8gaXRzIGJ1ZmZlciB0bw0KCTs7IGF2b2lkIHRoYXQgIm90aGVyIiAo bm9uLXNpZGUpIGJ1ZmZlciBkaXNwbGF5IGZ1bmN0aW9ucyBzdGVhbA0KCTs7IGl0IGZyb20g dXMuICBUaGlzIG11c3QgZXZlbnR1YWxseSBiZWNvbWUgY3VzdG9taXphYmxlIHZpYQ0KCTs7 IEFMSVNUIChvciwgYmV0dGVyLCBhdm9pZGVkIGluIHRoZSAib3RoZXIiIGZ1bmN0aW9ucyku DQoJKG9yIChhbmQgdGhpcy13aW5kb3cNCgkJIDs7IFJldXNlIGB0aGlzLXdpbmRvdycuDQoJ CSAocHJvZ24NCgkJICAgKGRpc3BsYXktYnVmZmVyLXJlY29yZC13aW5kb3cgJ3JldXNlIHRo aXMtd2luZG93IGJ1ZmZlcikNCgkJICAgKHNldC13aW5kb3ctZGVkaWNhdGVkLXAgdGhpcy13 aW5kb3cgbmlsKQ0KCQkgICAod2luZG93LS1kaXNwbGF5LWJ1ZmZlci0yIGJ1ZmZlciB0aGlz LXdpbmRvdyAnc2lkZSkpKQ0KCSAgICAoYW5kIChvciAobm90IG1heC1zbG90cykgKDwgc2xv dHMgbWF4LXNsb3RzKSkNCgkJIChvciAoYW5kIG5leHQtd2luZG93DQoJCQkgIDs7IE1ha2Ug bmV3IHdpbmRvdyBiZWZvcmUgYG5leHQtd2luZG93Jy4NCgkJCSAgKGxldCAoKG5leHQtc2lk ZQ0KCQkJCSAoaWYgKG1lbXEgc2lkZSAnKGxlZnQgcmlnaHQpKSAnYWJvdmUgJ2xlZnQpKQ0K CQkJCSh3aW5kb3ctY29tYmluYXRpb24tcmVzaXplICdzaWRlKSkNCgkJCSAgICAoc2V0cSB3 aW5kb3cgKHNwbGl0LXdpbmRvdyBuZXh0LXdpbmRvdyBuaWwgbmV4dC1zaWRlKSkNCgkJCSAg ICA7OyBXaGVuIHRoZSBuZXcgd2luZG93IGlzIGRlbGV0ZWQsIGl0cyBzcGFjZQ0KCQkJICAg IDs7IGlzIHJldHVybmVkIHRvIG90aGVyIHNpZGUgd2luZG93cy4NCgkJCSAgICAoc2V0LXdp bmRvdy1wYXJhbWV0ZXINCgkJCSAgICAgd2luZG93ICdkZWxldGUtd2luZG93ICdkZWxldGUt c2lkZS13aW5kb3cpDQoJCQkgICAgd2luZG93KSkNCgkJICAgICAoYW5kIHByZXYtd2luZG93 DQoJCQkgIDs7IE1ha2UgbmV3IHdpbmRvdyBhZnRlciBgcHJldi13aW5kb3cnLg0KCQkJICAo bGV0ICgocHJldi1zaWRlDQoJCQkJIChpZiAobWVtcSBzaWRlICcobGVmdCByaWdodCkpICdi ZWxvdyAncmlnaHQpKQ0KCQkJCSh3aW5kb3ctY29tYmluYXRpb24tcmVzaXplICdzaWRlKSkN CgkJCSAgICAoc2V0cSB3aW5kb3cgKHNwbGl0LXdpbmRvdyBwcmV2LXdpbmRvdyBuaWwgcHJl di1zaWRlKSkNCgkJCSAgICA7OyBXaGVuIHRoZSBuZXcgd2luZG93IGlzIGRlbGV0ZWQsIGl0 cyBzcGFjZQ0KCQkJICAgIDs7IGlzIHJldHVybmVkIHRvIG90aGVyIHNpZGUgd2luZG93cy4N CgkJCSAgICAoc2V0LXdpbmRvdy1wYXJhbWV0ZXINCgkJCSAgICAgd2luZG93ICdkZWxldGUt d2luZG93ICdkZWxldGUtc2lkZS13aW5kb3cpDQoJCQkgICAgd2luZG93KSkpDQoJCSAocHJv Z24NCgkJICAgKGRpc3BsYXktYnVmZmVyLXJlY29yZC13aW5kb3cgJ3dpbmRvdyB3aW5kb3cg YnVmZmVyKQ0KCQkgICAod2luZG93LS1kaXNwbGF5LWJ1ZmZlci0yIGJ1ZmZlciB3aW5kb3cg J3NpZGUpDQoJCSAgIChzZXQtd2luZG93LXBhcmFtZXRlciB3aW5kb3cgJ3dpbmRvdy1zbG90 IHNsb3QpDQoJCSAgIDs7IFJlc2V0IGxpc3Qgb2YgbmV3IHdpbmRvdydzIHByZXZpb3VzIGJ1 ZmZlcnMgdG8gbmlsLg0KCQkgICAoc2V0LXdpbmRvdy1wcmV2LWJ1ZmZlcnMgd2luZG93IG5p bCkNCgkJICAgd2luZG93KSkNCgkgICAgKGFuZCBiZXN0LXdpbmRvdw0KCQkgOzsgUmV1c2Ug YGJlc3Qtd2luZG93Jy4NCgkJIChwcm9nbg0KCQkgICAoZGlzcGxheS1idWZmZXItcmVjb3Jk LXdpbmRvdyAncmV1c2UgYmVzdC13aW5kb3cgYnVmZmVyKQ0KCQkgICAoc2V0LXdpbmRvdy1k ZWRpY2F0ZWQtcCBiZXN0LXdpbmRvdyBuaWwpDQoJCSAgICh3aW5kb3ctLWRpc3BsYXktYnVm ZmVyLTIgYnVmZmVyIGJlc3Qtd2luZG93ICdzaWRlKQ0KCQkgICA7OyBHaXZlIGJlc3Qtd2lu ZG93IHRoZSBuZXcgc2xvdCB2YWx1ZS4NCgkJICAgKHNldC13aW5kb3ctcGFyYW1ldGVyIGJl c3Qtd2luZG93ICd3aW5kb3ctc2xvdCBzbG90KQ0KCQkgICBiZXN0LXdpbmRvdykpKSkpKSkp DQoNCjs7IChjdXN0b21pemUtc2V0LXZhcmlhYmxlICd3aW5kb3ctc2lkZXMtc2xvdHMgJyhu aWwgMiAxIG5pbCkpDQoNCjs7IChkaXNwbGF5LWJ1ZmZlciAoZ2V0LWJ1ZmZlci1jcmVhdGUg IipzaWRlLXRvcC0xKiIpKQ0KOzsgKGRpc3BsYXktYnVmZmVyIChnZXQtYnVmZmVyLWNyZWF0 ZSAiKnNpZGUtdG9wKiIpKQ0KOzsgKGRpc3BsYXktYnVmZmVyIChnZXQtYnVmZmVyLWNyZWF0 ZSAiKnNpZGUtdG9wKzEqIikpDQo7OyAoZGlzcGxheS1idWZmZXIgKGdldC1idWZmZXItY3Jl YXRlICIqc2lkZS1ib3R0b20tMSoiKSkNCjs7IChkaXNwbGF5LWJ1ZmZlciAoZ2V0LWJ1ZmZl ci1jcmVhdGUgIipzaWRlLWJvdHRvbSoiKSkNCjs7IChkaXNwbGF5LWJ1ZmZlciAoZ2V0LWJ1 ZmZlci1jcmVhdGUgIipzaWRlLWJvdHRvbSsxKiIpKQ0KOzsgKGRpc3BsYXktYnVmZmVyIChn ZXQtYnVmZmVyLWNyZWF0ZSAiKnNpZGUtcmlnaHQtMSoiKSkNCjs7IChkaXNwbGF5LWJ1ZmZl ciAoZ2V0LWJ1ZmZlci1jcmVhdGUgIipzaWRlLXJpZ2h0KiIpKQ0KOzsgKGRpc3BsYXktYnVm ZmVyIChnZXQtYnVmZmVyLWNyZWF0ZSAiKnNpZGUtcmlnaHQrMSoiKSkNCjs7IChkaXNwbGF5 LWJ1ZmZlciAoZ2V0LWJ1ZmZlci1jcmVhdGUgIipzaWRlLWxlZnQtMSoiKSkNCjs7IChkaXNw bGF5LWJ1ZmZlciAoZ2V0LWJ1ZmZlci1jcmVhdGUgIipzaWRlLWxlZnQqIikpDQo7OyAoZGlz cGxheS1idWZmZXIgKGdldC1idWZmZXItY3JlYXRlICIqc2lkZS1sZWZ0KzEqIikpDQoNCjs7 IChkaXNwbGF5LWJ1ZmZlciAoZ2V0LWJ1ZmZlci1jcmVhdGUgIip0aWRlLXRvcC0xKiIpKQ0K OzsgKGRpc3BsYXktYnVmZmVyIChnZXQtYnVmZmVyLWNyZWF0ZSAiKnRpZGUtdG9wKiIpKQ0K OzsgKGRpc3BsYXktYnVmZmVyIChnZXQtYnVmZmVyLWNyZWF0ZSAiKnRpZGUtdG9wKzEqIikp DQo7OyAoZGlzcGxheS1idWZmZXIgKGdldC1idWZmZXItY3JlYXRlICIqdGlkZS1ib3R0b20t MSoiKSkNCjs7IChkaXNwbGF5LWJ1ZmZlciAoZ2V0LWJ1ZmZlci1jcmVhdGUgIip0aWRlLWJv dHRvbSoiKSkNCjs7IChkaXNwbGF5LWJ1ZmZlciAoZ2V0LWJ1ZmZlci1jcmVhdGUgIip0aWRl LWJvdHRvbSsxKiIpKQ0KOzsgKGRpc3BsYXktYnVmZmVyIChnZXQtYnVmZmVyLWNyZWF0ZSAi KnRpZGUtcmlnaHQtMSoiKSkNCjs7IChkaXNwbGF5LWJ1ZmZlciAoZ2V0LWJ1ZmZlci1jcmVh dGUgIip0aWRlLXJpZ2h0KiIpKQ0KOzsgKGRpc3BsYXktYnVmZmVyIChnZXQtYnVmZmVyLWNy ZWF0ZSAiKnRpZGUtcmlnaHQrMSoiKSkNCjs7IChkaXNwbGF5LWJ1ZmZlciAoZ2V0LWJ1ZmZl ci1jcmVhdGUgIip0aWRlLWxlZnQtMSoiKSkNCjs7IChkaXNwbGF5LWJ1ZmZlciAoZ2V0LWJ1 ZmZlci1jcmVhdGUgIip0aWRlLWxlZnQqIikpDQo7OyAoZGlzcGxheS1idWZmZXIgKGdldC1i dWZmZXItY3JlYXRlICIqdGlkZS1sZWZ0KzEqIikpDQo= --------------080100070007060809070409--