From mboxrd@z Thu Jan 1 00:00:00 1970 Path: main.gmane.org!not-for-mail From: Stephen Berman Newsgroups: gmane.emacs.bugs Subject: [PATCH] todo-mode extensions and bug fixes Date: 29 May 2002 01:03:15 +0200 Sender: bug-gnu-emacs-admin@gnu.org Message-ID: NNTP-Posting-Host: localhost.gmane.org Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="=-=-=" X-Trace: main.gmane.org 1022660812 28195 127.0.0.1 (29 May 2002 08:26:52 GMT) X-Complaints-To: usenet@main.gmane.org NNTP-Posting-Date: Wed, 29 May 2002 08:26:52 +0000 (UTC) Return-path: Original-Received: from fencepost.gnu.org ([199.232.76.164]) by main.gmane.org with esmtp (Exim 3.33 #1 (Debian)) id 17CynD-0007Ke-00 for ; Wed, 29 May 2002 10:26:51 +0200 Original-Received: from localhost ([127.0.0.1] helo=fencepost.gnu.org) by fencepost.gnu.org with esmtp (Exim 3.34 #1 (Debian)) id 17Cynw-0003tF-00; Wed, 29 May 2002 04:27:36 -0400 Original-Received: from steve.ims.uni-stuttgart.de ([141.58.127.232]) by fencepost.gnu.org with esmtp (Exim 3.34 #1 (Debian)) id 17Cykv-0003XW-00 for ; Wed, 29 May 2002 04:24:29 -0400 Original-Received: (from steve@localhost) by steve.ims.uni-stuttgart.de (8.10.2/8.10.2/SuSE Linux 8.10.0-0.3) id g4T8ORX01046; Wed, 29 May 2002 10:24:27 +0200 X-Authentication-Warning: steve.ims.uni-stuttgart.de: steve set sender to steve@ims.uni-stuttgart.de using -f X-Gnus-Agent-Meta-Information: mail nil Original-To: bug-gnu-emacs@gnu.org User-Agent: Gnus/5.09 (Gnus v5.9.0) Emacs/21.2 Original-Lines: 31 Errors-To: bug-gnu-emacs-admin@gnu.org X-BeenThere: bug-gnu-emacs@gnu.org X-Mailman-Version: 2.0.9 Precedence: bulk List-Help: List-Post: List-Subscribe: , List-Id: Bug reports for GNU Emacs, the Swiss army knife of text editors List-Unsubscribe: , List-Archive: Xref: main.gmane.org gmane.emacs.bugs:1662 X-Report-Spam: http://spam.gmane.org/gmane.emacs.bugs:1662 --=-=-= I have implemented a fair amount of additional functionality for todo-mode and in the process fixed several bugs persisting in version 1.50, which is the current CVS version as well as the one included in the released Emacs 21.2. A diff against this version and a ChangeLog are attached below. This patch also corrects and hence supercedes previous todo-mode patches I posted here on 26 November 2001 and 24 January 2002 (neither has been applied to the CVS source as of today). I've tested the changes with Emacs 21.2 and 20.7, under both X and tty. Since the diff is rather long, it may be helpful to point out the most significant changes (IMO): I've added functions to rename and to delete TODO categories, to display a clickable list of categories, to move TODO items from one category to another, to file items within their category and display these under their category buffer, to add a customizable string to separate items within a category, to change the TODO item prefix string and to toggle its display within the category buffer. I welcome and would be grateful for any feedback about the new functionality and any suggestions for improving the implementation. --Steve Berman --=-=-= Content-Type: application/octet-stream Content-Disposition: attachment; filename=ChangeLog_for_geb Content-Description: todo-mode ChangeLog 2002-05-28 Stephen Berman * todo-mode-srb.el: Additions and some changes to the initial commentary. New defcustoms: todo-categories-mode-hook, todo-filed-mode-hook, todo-item-separator. New defvars: todo-filed-categories, todo-filed-mode-map, todo-categories-mode-map, todo-categories-buffer, todo-filed-buffer, todo-category-filed, todo-buffer-read-only, todo-disabled-functions. New defuns: todo-rename-category, todo-delete-category, todo-display-categories, todo-file-item-under-cat, todo-display-filed-items-under-cat, todo-move-item, todo-change-item-sep-in-cat, todo-change-todo-prefix, todo-toggle-item-header, todo-jump-to-category-noninteractively, todo-category-click, todo-category-return, todo-item-separator-p, todo-item-string-p, todo-first-in-category-p, todo-last-in-category-p, todo-count-items, todo-advice, todo-categories-mode, todo-filed-mode, todo-kill-buffer. New menu: todo-filed-menu. Require cl.el for pre-21.1 Emacsen. Load user's custom-file if it exists. (todo-mode-map): Add new and rebind some old key bindings. (todo-remove-separator): Improve docstring. (todo-category-select): Make it display only unfiled items, accommodate todo-item-separator. (todo-backward-item): Take account of todo-item-separator and fix backwards movement from within an item. (todo-forward-item): Don't go forward to empty last line. (todo-edit-item): Accommodate buffer-read-only status, accommodate todo-item-separator, make cursor position after editing the same as before editing, update docstring to include filed items. (todo-edit-multiline): Accommodate filed multiline items, update docstring to reflect this. (todo-add-category): Accommodate buffer-read-only status, add some error checking, and make it properly display newly added category. (todo-add-item-non-interactively): Accommodate buffer-read-only status, accommodate new functionality (todo-item-separator, todo-move-item), fix bug in calculation of new item's priority involving multiline items, make cursor move to new item rather than point-min. (todo-insert-item): Remove save-excursion in order to put cursor on new item, make the prefix argument do what the docstring says. (todo-insert-item-here): Accommodate buffer-read-only status, accommodate filed items, accommodate todo-item-separator, make item insertion behave more naturally. (todo-more-important-p): Substitute todo-forward-item for forward-line. (todo-delete-item): Accommodate buffer-read-only status, accommodate todo-item-separator, correct cursor placement. (todo-raise-item): Accommodate buffer-read-only status, accommodate todo-item-separator. (todo-lower-item): Accommodate buffer-read-only status, accommodate todo-item-separator, fix behavior with empty category. (todo-file-item): Accommodate buffer-read-only status, change filed item comment format, remove comment solicitation from interactive call, add functionality to file items that are filed under their category in todo-file-done, update docstring. (todo-item-end, todo-remove-item): Accommodate todo-item-separator. (todo-menu): New entries and corrections to existing entries. (todo-mode): Call kill-all-local-variables, make and set local variables next-line-add-newlines and buffer-read-only, call todo-advice. (todo-edit-mode): Substitute key-binding `q' to todo-kill-buffer for key-binding `C-c C-c' to todo-edit-done. (todo-show): Remove call to toggle-read-only. (todo-initial-setup): Eliminate default "Todo" category to allow user specified initial category, call write-file on todo-file-do to prevent three instances of the initial category in the todo-categories list. --=-=-= Content-Type: application/octet-stream Content-Disposition: attachment; filename=diff_280502 Content-Transfer-Encoding: base64 Content-Description: todo-mode diff KioqIHRvZG8tbW9kZS5lbH4JVHVlIEphbiAxNSAxNTo1ODo0OSAyMDAyCi0tLSB0b2RvLW1vZGUu ZWwJVHVlIE1heSAyOCAyMjo1Nzo1MiAyMDAyCioqKioqKioqKioqKioqKgoqKiogNSwxMSAqKioq CiAgOzsgQXV0aG9yOiBPbGl2ZXIgU2VpZGVsIDxvczEwMDAwQHNlaWRlbC1zcGFjZS5kZT4KICA7 OyAgIFtOb3QgY2xlYXIgdGhlIGFib3ZlIHdvcmtzLCBKdWx5IDIwMDBdCiAgOzsgQ3JlYXRlZDog MiBBdWcgMTk5NwohIDs7IFZlcnNpb246ICRJZDogdG9kby1tb2RlLmVsLHYgMS41MCAyMDAxLzEy LzExIDA3OjM2OjMwIHBqIEV4cCAkCiAgOzsgS2V5d29yZHM6IGNhbGVuZGFyLCB0b2RvCiAgCiAg OzsgVGhpcyBmaWxlIGlzIHBhcnQgb2YgR05VIEVtYWNzLgotLS0gNSwxMSAtLS0tCiAgOzsgQXV0 aG9yOiBPbGl2ZXIgU2VpZGVsIDxvczEwMDAwQHNlaWRlbC1zcGFjZS5kZT4KICA7OyAgIFtOb3Qg Y2xlYXIgdGhlIGFib3ZlIHdvcmtzLCBKdWx5IDIwMDBdCiAgOzsgQ3JlYXRlZDogMiBBdWcgMTk5 NwohIDs7IFZlcnNpb246ICRJZDogdG9kby1tb2RlLmVsLHYgMS41MSAyMDAyLzA1LzI4IDE5OjE2 OjAwIHN0ZXZlIEV4cCAkCiAgOzsgS2V5d29yZHM6IGNhbGVuZGFyLCB0b2RvCiAgCiAgOzsgVGhp cyBmaWxlIGlzIHBhcnQgb2YgR05VIEVtYWNzLgoqKioqKioqKioqKioqKioKKioqIDk3LDEwMyAq KioqCiAgOzsKICA7OyAgICAgIFdoaWNoIHZlcnNpb24gb2YgdG9kby1tb2RlLmVsIGRvZXMgdGhp cyBkb2N1bWVudGF0aW9uIHJlZmVyIHRvPwogIDs7CiEgOzsgICAgICAkSWQ6IHRvZG8tbW9kZS5l bCx2IDEuNTAgMjAwMS8xMi8xMSAwNzozNjozMCBwaiBFeHAgJAogIDs7CiAgOzsgIFByZS1SZXF1 aXNpdGVzCiAgOzsKLS0tIDk3LDEwNSAtLS0tCiAgOzsKICA7OyAgICAgIFdoaWNoIHZlcnNpb24g b2YgdG9kby1tb2RlLmVsIGRvZXMgdGhpcyBkb2N1bWVudGF0aW9uIHJlZmVyIHRvPwogIDs7CiEg OzsgICAgICAkSWQ6IHRvZG8tbW9kZS5lbCx2IDEuNTEgMjAwMi8wNS8yOCAxOToxNjowMCBzdGV2 ZSBFeHAgJAohIDs7CiEgOzsgICAgICBDb21tZW50YXJ5IG1hcmtlZCB3aXRoIGBbc3JiXScgd2Fz IGFkZGVkIGJ5IFN0ZXZlIEJlcm1hbi4gW3NyYl0KICA7OwogIDs7ICBQcmUtUmVxdWlzaXRlcwog IDs7CioqKioqKioqKioqKioqKgoqKiogMTA2LDE1MCAqKioqCiAgOzsKICA7OyAgICAgICAgICB0 aW1lLXN0YW1wCiAgOzsgICAgICAgICAgZWFzeW1lbnUKICA7OwogIDs7ICBPcGVyYXRpb24KICA7 OwogIDs7CVlvdSB3aWxsIGhhdmUgdGhlIGZvbGxvd2luZyBmYWNpbGl0aWVzIGF2YWlsYWJsZToK ICA7OwohIDs7CSAgICBNLXggdG9kby1zaG93ICAgd2lsbCBlbnRlciB0aGUgdG9kbyBsaXN0IHNj cmVlbiwgaGVyZSB0eXBlCiAgOzsKICA7OwkgICAgKyAgdG8gZ28gdG8gbmV4dCBjYXRlZ29yeQog IDs7ICAgICAgICAgIC0gIHRvIGdvIHRvIHByZXZpb3VzIGNhdGVnb3J5CiEgOzsgICAgICAgICAg ZCAgdG8gZmlsZSB0aGUgY3VycmVudCBlbnRyeSwgaW5jbHVkaW5nIGEKISA7OyAgICAgICAgICAg IAkJCSAgICBjb21tZW50IGFuZCB0aW1lc3RhbXAKICA7OyAgICAgICAgICBlICB0byBlZGl0IHRo ZSBjdXJyZW50IGVudHJ5CiAgOzsgICAgICAgICAgRSAgdG8gZWRpdCBhIG11bHRpLWxpbmUgZW50 cnkKICA7OyAgICAgICAgICBmICB0byBmaWxlIHRoZSBjdXJyZW50IGVudHJ5LCBpbmNsdWRpbmcg YQogIDs7ICAgICAgICAgICAgCQkJICAgIGNvbW1lbnQgYW5kIHRpbWVzdGFtcAohIDs7ICAgICAg ICAgIGkgIHRvIGluc2VydCBhIG5ldyBlbnRyeSwgd2l0aCBwcmVmaXgsIG9taXQgY2F0ZWdvcnkK ICA7OyAgICAgICAgICBJICB0byBpbnNlcnQgYSBuZXcgZW50cnkgYXQgY3VycmVudCBjdXJzb3Ig cG9zaXRpb24KICA7OwkgICAgaiAganVtcCB0byBjYXRlZ29yeQogIDs7ICAgICAgICAgIGsgIHRv IGtpbGwgdGhlIGN1cnJlbnQgZW50cnkKICA7OyAgICAgICAgICBsICB0byBsb3dlciB0aGUgY3Vy cmVudCBlbnRyeSdzIHByaW9yaXR5CiAgOzsgICAgICAgICAgbiAgZm9yIHRoZSBuZXh0IGVudHJ5 CiAgOzsgICAgICAgICAgcCAgZm9yIHRoZSBwcmV2aW91cyBlbnRyeQogIDs7CSAgICBQICBwcmlu dAogIDs7ICAgICAgICAgIHEgIHRvIHNhdmUgdGhlIGxpc3QgYW5kIGV4aXQgdGhlIGJ1ZmZlcgog IDs7ICAgICAgICAgIHIgIHRvIHJhaXNlIHRoZSBjdXJyZW50IGVudHJ5J3MgcHJpb3JpdHkKICA7 OyAgICAgICAgICBzICB0byBzYXZlIHRoZSBsaXN0CiAgOzsgICAgICAgICAgUyAgdG8gc2F2ZSB0 aGUgbGlzdCBvZiB0b3AgcHJpb3JpdGllcwogIDs7CSAgICB0ICBzaG93IHRvcCBwcmlvcml0eSBp dGVtcyBmb3IgZWFjaCBjYXRlZ29yeQogIDs7CiEgOzsJV2hlbiB5b3UgYWRkIGEgbmV3IGVudHJ5 LCB5b3UgYXJlIGFza2VkIGZvciB0aGUgdGV4dCBhbmQgdGhlbgohIDs7CWZvciB0aGUgY2F0ZWdv cnkuICBJIGZvciBleGFtcGxlIGhhdmUgY2F0ZWdvcmllcyBmb3IgdGhpbmdzCiEgOzsJdGhhdCBJ IHdhbnQgdG8gZG8gaW4gdGhlIG9mZmljZSAobGlrZSBtYWlsIG15IG11bSksIHRoYXQgSQohIDs7 CXdhbnQgdG8gZG8gaW4gdG93biAobGlrZSBidXkgY29ybmZsYWtlcykgYW5kIHRoaW5ncyBJIHdh bnQgdG8KICA7OwlkbyBhdCBob21lIChtb3ZlIG15IHN1aXRjYXNlcykuICBUaGUgY2F0ZWdvcmll cyBjYW4gYmUKICA7OwlzZWxlY3RlZCB3aXRoIHRoZSBjdXJzb3Iga2V5cyBhbmQgaWYgeW91IHR5 cGUgaW4gdGhlIG5hbWUgb2YgYQogIDs7CWNhdGVnb3J5IHdoaWNoIGRpZG4ndCBleGlzdCBiZWZv cmUsIGFuIGVtcHR5IGNhdGVnb3J5IG9mIHRoZQogIDs7CWRlc2lyZWQgbmFtZSB3aWxsIGJlIGFk ZGVkIGFuZCBmaWxsZWQgd2l0aCB0aGUgbmV3IGVudHJ5LgohIDs7CiEgOzsgIENvbmZpZ3VyYXRp b24KICA7OwogIDs7ICBWYXJpYWJsZSB0b2RvLXByZWZpeAogIDs7Ci0tLSAxMDgsMTkwIC0tLS0K ICA7OwogIDs7ICAgICAgICAgIHRpbWUtc3RhbXAKICA7OyAgICAgICAgICBlYXN5bWVudQorIDs7 ICAgICAgICAgIGNsICh1bmxlc3MgRW1hY3MgMjEuMSBvciBsYXRlcikgW3NyYl0KICA7OwogIDs7 ICBPcGVyYXRpb24KICA7OwogIDs7CVlvdSB3aWxsIGhhdmUgdGhlIGZvbGxvd2luZyBmYWNpbGl0 aWVzIGF2YWlsYWJsZToKICA7OwohIDs7CSAgICBNLXggdG9kby1zaG93ICAgd2lsbCBlbnRlciB0 b2RvLW1vZGUgYW5kIGRpc3BsYXkgdGhlIHRvZG8gCiEgOzsgICAgICAgICAgICAgICAgICAgICAg ICAgIGxpc3Qgc2NyZWVuLiAgVGhlIGZ1bmN0aW9ucyBvZiB0aGlzIG1vZGUgCiEgOzsgICAgICAg ICAgICAgICAgICAgICAgICAgIGNhbiBiZSBpbnZva2VkIGJ5IGNsaWNraW5nIG9uIGFuIGl0ZW0g ZnJvbQohIDs7ICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgIlRvZG8iIG1lbnUgaW4gdGhl IG1lbnViYXIsIG9yIGJ5IHR5cGluZzoKICA7OwogIDs7CSAgICArICB0byBnbyB0byBuZXh0IGNh dGVnb3J5CiAgOzsgICAgICAgICAgLSAgdG8gZ28gdG8gcHJldmlvdXMgY2F0ZWdvcnkKISA7OyAg ICAgICAgICBBICB0byBhZGQgYSBuZXcgdG9kbyBjYXRlZ29yeSBbc3JiXQohIDs7ICAgICAgICAg IGMgIHRvIGRpc3BsYXkgYSBjbGlja2FibGUgbGlzdCBvZiBhbGwgdG9kbyBjYXRlZ29yaWVzIFtz cmJdCiEgOzsgICAgICAgICAgQyAgdG8gY2hhbmdlIHRoZSBzdHJpbmcgc2VwYXJhdGluZyBlbnRy aWVzIGluIAohIDs7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBjdXJyZW50 IGNhdGVnb3J5IFtzcmJdCiEgOzsgICAgICAgICAgZCAgdG8gZGlzcGxheSB0aGUgZmlsZWQgZW50 cmllcyBvZiB0aGUgY3VycmVudCBjYXRlZ29yeSBbc3JiXQohIDs7ICAgICAgICAgIEQgIHRvIGRl bGV0ZSB0aGUgY3VycmVudCBjYXRlZ29yeSBbc3JiXQogIDs7ICAgICAgICAgIGUgIHRvIGVkaXQg dGhlIGN1cnJlbnQgZW50cnkKICA7OyAgICAgICAgICBFICB0byBlZGl0IGEgbXVsdGktbGluZSBl bnRyeQogIDs7ICAgICAgICAgIGYgIHRvIGZpbGUgdGhlIGN1cnJlbnQgZW50cnksIGluY2x1ZGlu ZyBhCiAgOzsgICAgICAgICAgICAJCQkgICAgY29tbWVudCBhbmQgdGltZXN0YW1wCiEgOzsgICAg ICAgICAgRiAgdG8gZmlsZSB0aGUgY3VycmVudCBlbnRyeSB1bmRlciBpdHMgY2F0ZWdvcnksIAoh IDs7ICAgICAgICAgICAgCQkJICAgIGluY2x1ZGluZyBhIGNvbW1lbnQgYW5kIHRpbWVzdGFtcCBb c3JiXQohIDs7ICAgICAgICAgIGggIHRvIHRvZ2dsZSBkaXNwbGF5IG9mIGl0ZW0gcHJlZml4IG9y IHRpbWVzdGFtcCBhbmQgaW5pdGlhbHMgW3NyYl0KISA7OyAgICAgICAgICBpICB0byBpbnNlcnQg YSBuZXcgZW50cnksIHdpdGggcHJlZml4LCBzb2xpY2l0IGNhdGVnb3J5CiAgOzsgICAgICAgICAg SSAgdG8gaW5zZXJ0IGEgbmV3IGVudHJ5IGF0IGN1cnJlbnQgY3Vyc29yIHBvc2l0aW9uCiAgOzsJ ICAgIGogIGp1bXAgdG8gY2F0ZWdvcnkKICA7OyAgICAgICAgICBrICB0byBraWxsIHRoZSBjdXJy ZW50IGVudHJ5CiAgOzsgICAgICAgICAgbCAgdG8gbG93ZXIgdGhlIGN1cnJlbnQgZW50cnkncyBw cmlvcml0eQorIDs7ICAgICAgICAgIG0gIHRvIG1vdmUgdGhlIGN1cnJlbnQgZW50cnkgdG8gYW5v dGhlciBjYXRlZ29yeQogIDs7ICAgICAgICAgIG4gIGZvciB0aGUgbmV4dCBlbnRyeQogIDs7ICAg ICAgICAgIHAgIGZvciB0aGUgcHJldmlvdXMgZW50cnkKICA7OwkgICAgUCAgcHJpbnQKICA7OyAg ICAgICAgICBxICB0byBzYXZlIHRoZSBsaXN0IGFuZCBleGl0IHRoZSBidWZmZXIKICA7OyAgICAg ICAgICByICB0byByYWlzZSB0aGUgY3VycmVudCBlbnRyeSdzIHByaW9yaXR5CisgOzsgICAgICAg ICAgUiAgdG8gcmVuYW1lIHRoZSBjdXJyZW50IGNhdGVnb3J5IFtzcmJdCiAgOzsgICAgICAgICAg cyAgdG8gc2F2ZSB0aGUgbGlzdAogIDs7ICAgICAgICAgIFMgIHRvIHNhdmUgdGhlIGxpc3Qgb2Yg dG9wIHByaW9yaXRpZXMKICA7OwkgICAgdCAgc2hvdyB0b3AgcHJpb3JpdHkgaXRlbXMgZm9yIGVh Y2ggY2F0ZWdvcnkKKyA7OyAgICAgICAgICBYICB0byBjaGFuZ2UgdGhlIHRvZG8gcHJlZml4IHN0 cmluZyBbc3JiXQogIDs7CiEgOzsJV2hlbiB5b3UgYWRkIGEgbmV3IGVudHJ5LCB5b3UgYXJlIGFz a2VkIGZvciB0aGUgdGV4dCBhbmQKISA7OwlvcHRpb25hbGx5IGZvciB0aGUgY2F0ZWdvcnkuICBJ IGZvciBleGFtcGxlIGhhdmUgY2F0ZWdvcmllcyBmb3IgCiEgOzsJdGhpbmdzIHRoYXQgSSB3YW50 IHRvIGRvIGluIHRoZSBvZmZpY2UgKGxpa2UgbWFpbCBteSBtdW0pLCB0aGF0CiEgOzsJSSB3YW50 IHRvIGRvIGluIHRvd24gKGxpa2UgYnV5IGNvcm5mbGFrZXMpIGFuZCB0aGluZ3MgSSB3YW50IHRv CiAgOzsJZG8gYXQgaG9tZSAobW92ZSBteSBzdWl0Y2FzZXMpLiAgVGhlIGNhdGVnb3JpZXMgY2Fu IGJlCiAgOzsJc2VsZWN0ZWQgd2l0aCB0aGUgY3Vyc29yIGtleXMgYW5kIGlmIHlvdSB0eXBlIGlu IHRoZSBuYW1lIG9mIGEKICA7OwljYXRlZ29yeSB3aGljaCBkaWRuJ3QgZXhpc3QgYmVmb3JlLCBh biBlbXB0eSBjYXRlZ29yeSBvZiB0aGUKICA7OwlkZXNpcmVkIG5hbWUgd2lsbCBiZSBhZGRlZCBh bmQgZmlsbGVkIHdpdGggdGhlIG5ldyBlbnRyeS4KISA7OyAgICAgIAohIDs7ICAgICAgVG9kbyBs aXN0IGl0ZW1zIGNhbiBiZSBlZGl0ZWQgYXMgbm9ybWFsIHRleHQsIGFuZCB0aGV5IGNhbiBiZQoh IDs7ICAgICAgcmVwcmlvcml0aXplZCBieSBtb3ZpbmcgdGhlbSB1cCBhbmQgZG93biB3aXRoaW4g dGhlaXIgY2F0ZWdvcnkuCiEgOzsgICAgICBJdGVtcyBjYW4gYWxzbyBiZSBtb3ZlZCBmcm9tIG9u ZSBjYXRlZ29yeSB0byBhbm90aGVyLiAgSWYgeW91CiEgOzsgICAgICB3YW50IHRvIHJlbW92ZSBh IHRvZG8gbGlzdCBlbnRyeSwgeW91IGNhbiBlaXRoZXIgcGVybWFuZW50bHkKISA7OyAgICAgIGRl bGV0ZSBpdCBvciBmaWxlIGl0LiAgWW91IGNhbiBmaWxlIGl0IGVpdGhlciBpbiBhIHNlcGFyYXRl CiEgOzsgICAgICBmaWxlIGZvciBkb25lIGl0ZW1zIChzZWUgYmVsb3cpIG9yIHdpdGhpbiBpdHMg Y2F0ZWdvcnkuICBJbiB0aGUKISA7OyAgICAgIGxhdHRlciBjYXNlLCBpdCBpcyBkaXNwbGF5ZWQg aW4gc2VwYXJhdGUgd2luZG93IGJlbG93IHRoZQohIDs7ICAgICAgdW5maWxlZCBpdGVtcyBpbiB0 aGF0IGNhdGVnb3J5LiAgVGhlIGJ1ZmZlciBmb3IgZmlsZWQgaXRlbXMgaGFzCiEgOzsgICAgICBp dHMgb3duIG1vZGUsIGZvciB3aGljaCBhIHJlc3RyaWN0ZWQgc3Vic2V0IG9mIHRvZG8tbW9kZQoh IDs7ICAgICAgY29tbWFuZHMgaXMgYXZhaWxhYmxlLiBbc3JiXQohIDs7CiEgOzsgICAgICBUb2Rv IGNhdGVnb3JpZXMgY2FuIGJlIGRpc3BsYXllZCBpbiBhIGJ1ZmZlciBhcyBhbgohIDs7ICAgICAg YWxwaGFiZXRpemVkIGxpc3QsIGFuZCBjbGlja2luZyBvciBwcmVzc2luZyB0aGUgcmV0dXJuIGtl eSBvbgohIDs7ICAgICAgYSBjYXRlZ29yeSBuYW1lIGluIHRoZSBsaXN0IHBvcHMgdXAgdGhlIGJ1 ZmZlciBvZiB0aGF0CiEgOzsgICAgICBjYXRlZ29yeS4gIENhdGVnb3JpZXMgY2FuIGJlIHJlbmFt ZWQgYW5kLCBhcyBsb25nIGFzIHRoZXkgYXJlCiEgOzsgICAgICBlbXB0eSAoaS5lLiwgY29udGFp biBuZWl0aGVyIHVuZmlsZWQgbm9yIGZpbGVkIGl0ZW1zKSwgY2FuCiEgOzsgICAgICBhbHNvIGJl IGRlbGV0ZWQuIFtzcmJdCiEgOzsKISA7OyAgQ29uZmlndXJhdGlvbiBbc3JiIGZvciB0aGUgZm9s bG93aW5nIHRocmVlIHNlbnRlbmNlc10KISA7OwohIDs7ICAgICAgTWFueSBvZiB0b2RvLW1vZGUn cyBvcHRpb25zIGNhbiBiZSBjdXN0b21pemVkIGJ5IHRoZSB1c2VyOwohIDs7ICAgICAgdG8gZG8g c28gY2xpY2sgb24gIkN1c3RvbWl6ZSIgaW4gdGhlICJUb2RvIiBtZW51LiAgSWYgeW91IHNhdmUK ISA7OyAgICAgIHlvdXIgY3VzdG9taXphdGlvbnMgZm9yIGZ1dHVyZSBzZXNzaW9ucywgdGhleSB3 aWxsIGJlIGxvYWRlZAohIDs7ICAgICAgdGhlIG5leHQgdGltZSB5b3UgaW52b2tlIHRvZG8tbW9k ZS4gIFRoZSBjdXN0b21pemFibGUgdmFyaWFibGVzCiEgOzsgICAgICBpbmNsdWRlOgogIDs7CiAg OzsgIFZhcmlhYmxlIHRvZG8tcHJlZml4CiAgOzsKKioqKioqKioqKioqKioqCioqKiAxNzUsMTgw ICoqKioKLS0tIDIxNSwyMjIgLS0tLQogIDs7ICAgICAgQ2Fyc3RlbiBhbHNvIHdyaXRlcyB0aGF0 IHRoYXQgKmNoYW5naW5nKiB0aGUgcHJlZml4IGFmdGVyIHRoZQogIDs7ICAgICAgdG9kbyBsaXN0 IGlzIGFscmVhZHkgZXN0YWJsaXNoZWQgaXMgbm90IGFzIHNpbXBsZSBhcyBjaGFuZ2luZwogIDs7 ICAgICAgdGhlIHZhcmlhYmxlIC0gdGhlIHRvZG8gZmlsZXMgaGF2ZSB0byBiZSBjaGFuZ2VkIGJ5 IGhhbmQuCisgOzsgICAgICAoVGhlIGNvbW1hbmQgYHRvZG8tY2hhbmdlLXRvZG8tcHJlZml4JyBo YXMgbm93IGJlZW4gYWRkZWQgdG8gCisgOzsgICAgICBkbyB0aGlzLiBbc3JiXSkKICA7OwogIDs7 ICBWYXJpYWJsZSB0b2RvLWZpbGUtZG8KICA7OwoqKioqKioqKioqKioqKioKKioqIDIyMywyMjgg KioqKgotLS0gMjY1LDI4MSAtLS0tCiAgOzsgICAgIAljb3JyZWN0ZWQgc29tZSBvZiBteSBhd2Z1 bCBjb2RpbmcgYW5kIHBvaW50ZWQgbWUgdG93YXJkcyBzb21lCiAgOzsgICAgIAlnb29kIHJlYWRp bmcuICBUaGFua3MgVHJleSEKICA7OworIDs7ICBWYXJpYWJsZSB0b2RvLWl0ZW0tc2VwYXJhdG9y IFtzcmJdCisgOzsKKyA7OyAgICAgIFRoaXMgdmFyaWFibGUgc3RvcmVzIHRoZSBzdHJpbmcgdXNl ZCB0byBzZXBhcmF0ZSBlbnRyaWVzIGluCisgOzsgICAgICB0aGUgdG9kbyBsaXN0LiAgSXQgbWF5 IGltcHJvdmUgdGhlIHJlYWRhYmlsaXR5IG9mIGEgY3Jvd2RlZCAKKyA7OyAgICAgIGNhdGVnb3J5 LCBhbmQgbWF5IHZhcnkgYmV0d2VlbiBjYXRlZ29yaWVzIHRvIHZpc3VhbGx5CisgOzsgICAgICBk aXN0aW5ndWlzaCB0aGVtLiAgVG8gaW5zdXJlIHByb3BlciBiZWhhdmlvciBpdCBtdXN0IGJlZ2lu IGFuZCAKKyA7OyAgICAgIGVuZCB3aXRoIGEgbmV3bGluZSAoaGVuY2UgbWluaW1hbGx5ICJcbiIs IHRoZSBkZWZhdWx0IHZhbHVlKQorIDs7ICAgICAgYW5kIG5vdCBjb250YWluIGFscGhhbnVtZXJp YyBjaGFyYWN0ZXJzLiAgSXRzIHZhbHVlIGNhbiBhbHNvIAorIDs7ICAgICAgYmUgY2hhbmdlZCB3 aXRoaW4gYSB0b2RvLWNhdGVnb3J5IGJ1ZmZlciBieSAKKyA7OyAgICAgIGBNLXggdG9kby1jaGFu Z2UtaXRlbS1zZXAtaW4tY2F0Jy4KKyA7OwogIDs7ICBUaGluZ3MgdG8gZG8KICA7OwogIDs7ICAg ICAgVGhlc2Ugb3JpZ2luYWxseSB3ZXJlIG15IGlkZWFzLCBidXQgbm93IGFsc28gaW5jbHVkZSBh bGwgdGhlCioqKioqKioqKioqKioqKgoqKiogMjMwLDIzNyAqKioqCiAgOzsKICA7OyAgICAgIG8g ICBGYW5jeSBmb250cyBmb3IgdG9kby90b3AtcHJpb3JpdHkgYnVmZmVyCiAgOzsgICAgICBvICAg UmVtb3ZlIHRvZG8tcHJlZml4IG9wdGlvbiBpbiB0b2RvLXRvcC1wcmlvcml0aWVzCiEgOzsgICAg ICBvICAgUmVuYW1lIGNhdGVnb3J5CiEgOzsgICAgICBvICAgTW92ZSBlbnRyeSBmcm9tIG9uZSBj YXRlZ29yeSB0byBhbm90aGVyIG9uZQogIDs7ICAgICAgbyAgIEVudHJpZXMgd2hpY2ggYm90aCBo YXZlIHRoZSBnZW5lcmljICovKiBwcmVmaXggYW5kIGEKICA7OyAgICAgICAgICAiZGVhZGxpbmUi IGVudHJ5IHdoaWNoIGFyZSB1bmRlcnN0b29kIGJ5IGRpYXJ5LCBpbmRpY2F0aW5nCiAgOzsgICAg ICAgICAgYW4gZXZlbnQgKHVubGVzcyBtYXJrZWQgYnkgJikKLS0tIDI4MywyOTAgLS0tLQogIDs7 CiAgOzsgICAgICBvICAgRmFuY3kgZm9udHMgZm9yIHRvZG8vdG9wLXByaW9yaXR5IGJ1ZmZlcgog IDs7ICAgICAgbyAgIFJlbW92ZSB0b2RvLXByZWZpeCBvcHRpb24gaW4gdG9kby10b3AtcHJpb3Jp dGllcwohIDs7ICAgICAgbyAgIFJlbmFtZSBjYXRlZ29yeSBbRG9uZSBbc3JiXV0KISA7OyAgICAg IG8gICBNb3ZlIGVudHJ5IGZyb20gb25lIGNhdGVnb3J5IHRvIGFub3RoZXIgb25lIFtEb25lIFtz cmJdXQogIDs7ICAgICAgbyAgIEVudHJpZXMgd2hpY2ggYm90aCBoYXZlIHRoZSBnZW5lcmljICov KiBwcmVmaXggYW5kIGEKICA7OyAgICAgICAgICAiZGVhZGxpbmUiIGVudHJ5IHdoaWNoIGFyZSB1 bmRlcnN0b29kIGJ5IGRpYXJ5LCBpbmRpY2F0aW5nCiAgOzsgICAgICAgICAgYW4gZXZlbnQgKHVu bGVzcyBtYXJrZWQgYnkgJikKKioqKioqKioqKioqKioqCioqKiAyNjEsMjcyICoqKioKICA7Owog IDs7CU9saXZlciBTZWlkZWwKICA7OwkoTGVzc2luZ3N0ci4gOCwgNjU3NjAgRXNjaGJvcm4sIEZl ZGVyYWwgUmVwdWJsaWMgb2YgR2VybWFueSkKICAKICA7OzsgQ29kZToKICAKICAocmVxdWlyZSAn dGltZS1zdGFtcCkKICAKLSAKICA7OyBVc2VyLWNvbmZpZ3VyYWJsZSB2YXJpYWJsZXM6CiAgCiAg KGRlZmdyb3VwIHRvZG8gbmlsCi0tLSAzMTQsMzI1IC0tLS0KICA7OwogIDs7CU9saXZlciBTZWlk ZWwKICA7OwkoTGVzc2luZ3N0ci4gOCwgNjU3NjAgRXNjaGJvcm4sIEZlZGVyYWwgUmVwdWJsaWMg b2YgR2VybWFueSkKKyA7OwogIAogIDs7OyBDb2RlOgogIAogIChyZXF1aXJlICd0aW1lLXN0YW1w KQogIAogIDs7IFVzZXItY29uZmlndXJhYmxlIHZhcmlhYmxlczoKICAKICAoZGVmZ3JvdXAgdG9k byBuaWwKKioqKioqKioqKioqKioqCioqKiAzMDYsMzExICoqKioKLS0tIDM1OSwzNzkgLS0tLQog ICAgIipUT0RPIEVkaXQgbW9kZSBob29rcy4iCiAgICA6dHlwZSAnaG9vawogICAgOmdyb3VwICd0 b2RvKQorIChkZWZjdXN0b20gdG9kby1jYXRlZ29yaWVzLW1vZGUtaG9vayBuaWwKKyAgICIqVE9E TyBDYXRlZ29yaWVzIG1vZGUgaG9va3MuIgorICAgOnR5cGUgJ2hvb2sKKyAgIDpncm91cCAndG9k bykKKyAoZGVmY3VzdG9tIHRvZG8tZmlsZWQtbW9kZS1ob29rIG5pbAorICAgIipUT0RPIEZpbGVk IG1vZGUgaG9va3MuIgorICAgOnR5cGUgJ2hvb2sKKyAgIDpncm91cCAndG9kbykKKyAoZGVmY3Vz dG9tIHRvZG8taXRlbS1zZXBhcmF0b3IgIlxuIgorICAgIipTdHJpbmcgZm9yIHNlcGFyYXRpbmcg dG9kbyBlbnRyaWVzIHdpdGhpbiBhIGNhdGVnb3J5LgorIFRvIGluc3VyZSBwcm9wZXIgYmVoYXZp b3IgbXVzdCBiZWdpbiBhbmQgZW5kIHdpdGggYSBuZXdsaW5lIGFuZCBub3QgY29udGFpbiAKKyBh bHBoYW51bWVyaWMgY2hhcmFjdGVycy4gIENhbiBhbHNvIGJlIGNoYW5nZWQgd2l0aGluIGEgdG9k by1jYXRlZ29yeSBidWZmZXIKKyBieSBcXFt0b2RvLWNoYW5nZS1pdGVtLXNlcC1pbi1jYXRdLiIK KyAgIDp0eXBlICdzdHJpbmcKKyAgIDpncm91cCAndG9kbykKICAoZGVmY3VzdG9tIHRvZG8taW5z ZXJ0LXRocmVzaG9sZCAwCiAgICAiKlRPRE8gbW9kZSBpbnNlcnRpb24gYWNjdXJhY3kuCiAgCioq KioqKioqKioqKioqKgoqKiogMzIyLDMyOSAqKioqCiAgd2luZG93LiIKICAgIDp0eXBlICdpbnRl Z2VyCiAgICA6Z3JvdXAgJ3RvZG8pCi0gKGRlZnZhciB0b2RvLWVkaXQtYnVmZmVyICIgKlRPRE8g RWRpdCoiCi0gICAiVE9ETyBFZGl0IGJ1ZmZlciBuYW1lLiIpCiAgKGRlZmN1c3RvbSB0b2RvLWZp bGUtdG9wICJ+Ly50b2RvLXRvcCIKICAgICIqVE9ETyBtb2RlIHRvcCBwcmlvcml0aWVzIGZpbGUu CiAgCi0tLSAzOTAsMzk1IC0tLS0KKioqKioqKioqKioqKioqCioqKiAzNDcsMzU0ICoqKioKICAg IDp0eXBlICdpbnRlZ2VyCiAgICA6Z3JvdXAgJ3RvZG8pCiAgKGRlZmN1c3RvbSB0b2RvLXJlbW92 ZS1zZXBhcmF0b3IgdAohICAgIipOb24tbmlsIHRvIHJlbW92ZSBjYXRlZ29yeSBzZXBhcmF0b3Jz IGluXAohIFxcW3RvZG8tdG9wLXByaW9yaXRpZXNdIGFuZCBcXFt0b2RvLXByaW50XS4iCiAgICA6 dHlwZSAnYm9vbGVhbgogICAgOmdyb3VwICd0b2RvKQogIChkZWZjdXN0b20gdG9kby1zYXZlLXRv cC1wcmlvcml0aWVzLXRvbyB0Ci0tLSA0MTMsNDE5IC0tLS0KICAgIDp0eXBlICdpbnRlZ2VyCiAg ICA6Z3JvdXAgJ3RvZG8pCiAgKGRlZmN1c3RvbSB0b2RvLXJlbW92ZS1zZXBhcmF0b3IgdAohICAg IipOb24tbmlsIHRvIHJlbW92ZSBjYXRlZ29yeSBzZXBhcmF0b3JzIGluIG91dHB1dCBvZiBcXFt0 b2RvLXRvcC1wcmlvcml0aWVzXSBhbmQgXFxbdG9kby1wcmludF0uIgogICAgOnR5cGUgJ2Jvb2xl YW4KICAgIDpncm91cCAndG9kbykKICAoZGVmY3VzdG9tIHRvZG8tc2F2ZS10b3AtcHJpb3JpdGll cy10b28gdAoqKioqKioqKioqKioqKioKKioqIDM5MSwzOTYgKioqKgotLS0gNDU2LDQ2NCAtLS0t CiAgICAiT2xkIHZhcmlhYmxlIGZvciBob2xkaW5nIHRoZSBUT0RPIGNhdGVnb3JpZXMuCiAgVXNl IGB0b2RvLWNhdGVnb3JpZXMnIGluc3RlYWQuIikKICAKKyAoZGVmdmFyIHRvZG8tZmlsZWQtY2F0 ZWdvcmllcyB0b2RvLWNhdGVnb3JpZXMKKyAgICJWYXJpYWJsZSBmb3IgVE9ETyBjYXRlZ29yaWVz IGluIHRvZG8tZmlsZWQtbW9kZS4iKQorIAogIChkZWZ2YXIgdG9kby1wcmV2aW91cy1saW5lIDAK ICAgICJQcmV2aW91cyBsaW5lIGFza2VkIGFib3V0LiIpCiAgCioqKioqKioqKioqKioqKgoqKiog NDAyLDQ0MyAqKioqCiAgICAgIChzdXBwcmVzcy1rZXltYXAgbWFwIHQpCiAgICAgIChkZWZpbmUt a2V5IG1hcCAiKyIgJ3RvZG8tZm9yd2FyZC1jYXRlZ29yeSkKICAgICAgKGRlZmluZS1rZXkgbWFw ICItIiAndG9kby1iYWNrd2FyZC1jYXRlZ29yeSkKISAgICAgKGRlZmluZS1rZXkgbWFwICJkIiAn dG9kby1maWxlLWl0ZW0pIDtkb25lL2RlbGV0ZQogICAgICAoZGVmaW5lLWtleSBtYXAgImUiICd0 b2RvLWVkaXQtaXRlbSkKICAgICAgKGRlZmluZS1rZXkgbWFwICJFIiAndG9kby1lZGl0LW11bHRp bGluZSkKICAgICAgKGRlZmluZS1rZXkgbWFwICJmIiAndG9kby1maWxlLWl0ZW0pCiAgICAgIChk ZWZpbmUta2V5IG1hcCAiaSIgJ3RvZG8taW5zZXJ0LWl0ZW0pCiAgICAgIChkZWZpbmUta2V5IG1h cCAiSSIgJ3RvZG8taW5zZXJ0LWl0ZW0taGVyZSkKICAgICAgKGRlZmluZS1rZXkgbWFwICJqIiAn dG9kby1qdW1wLXRvLWNhdGVnb3J5KQogICAgICAoZGVmaW5lLWtleSBtYXAgImsiICd0b2RvLWRl bGV0ZS1pdGVtKQogICAgICAoZGVmaW5lLWtleSBtYXAgImwiICd0b2RvLWxvd2VyLWl0ZW0pCiAg ICAgIChkZWZpbmUta2V5IG1hcCAibiIgJ3RvZG8tZm9yd2FyZC1pdGVtKQogICAgICAoZGVmaW5l LWtleSBtYXAgInAiICd0b2RvLWJhY2t3YXJkLWl0ZW0pCiAgICAgIChkZWZpbmUta2V5IG1hcCAi UCIgJ3RvZG8tcHJpbnQpCiAgICAgIChkZWZpbmUta2V5IG1hcCAicSIgJ3RvZG8tcXVpdCkKICAg ICAgKGRlZmluZS1rZXkgbWFwICJyIiAndG9kby1yYWlzZS1pdGVtKQogICAgICAoZGVmaW5lLWtl eSBtYXAgInMiICd0b2RvLXNhdmUpCiAgICAgIChkZWZpbmUta2V5IG1hcCAiUyIgJ3RvZG8tc2F2 ZS10b3AtcHJpb3JpdGllcykKICAgICAgKGRlZmluZS1rZXkgbWFwICJ0IiAndG9kby10b3AtcHJp b3JpdGllcykKICAgICAgbWFwKQogICAgIlRPRE8gbW9kZSBrZXltYXAuIikKICAKICAoZGVmdmFy IHRvZG8tY2F0ZWdvcnktbnVtYmVyIDAgIlRPRE8gY2F0ZWdvcnkgbnVtYmVyLiIpCiAgCiAgKGRl ZnZhciB0b2RvLXRtcC1idWZmZXItbmFtZSAiICp0b2RvIHRtcCoiKQogIAogIChkZWZ2YXIgdG9k by1jYXRlZ29yeS1zZXAgKG1ha2Utc3RyaW5nIDc1ID8tKQogICAgIkNhdGVnb3J5IHNlcGFyYXRv ci4iKQogIAogIChkZWZ2YXIgdG9kby1jYXRlZ29yeS1iZWcgIiAtLS0gIgogICAgIkNhdGVnb3J5 IHN0YXJ0IHNlcGFyYXRvciB0byBiZSBwcmVwZW5kZWQgb250byBjYXRlZ29yeSBuYW1lLiIpCiAg CiAgKGRlZnZhciB0b2RvLWNhdGVnb3J5LWVuZCAiLS0tIEVuZCIKICAgICJTZXBhcmF0b3IgYWZ0 ZXIgYSBjYXRlZ29yeS4iKQogIAogIChkZWZ2YXIgdG9kby1oZWFkZXIgIi0qLSBtb2RlOiB0b2Rv OyAiCiAgICAiSGVhZGVyIG9mIHRvZG8gZmlsZXMuIikKICAKICA7OyAtLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0KICAKICAoZGVmdW4gdG9kby1jYXRlZ29yeS1zZWxlY3QgKCkKLS0tIDQ3MCw1NjAgLS0tLQog ICAgICAoc3VwcHJlc3Mta2V5bWFwIG1hcCB0KQogICAgICAoZGVmaW5lLWtleSBtYXAgIisiICd0 b2RvLWZvcndhcmQtY2F0ZWdvcnkpCiAgICAgIChkZWZpbmUta2V5IG1hcCAiLSIgJ3RvZG8tYmFj a3dhcmQtY2F0ZWdvcnkpCiEgICAgIChkZWZpbmUta2V5IG1hcCAiQSIgJ3RvZG8tYWRkLWNhdGVn b3J5KQohICAgICAoZGVmaW5lLWtleSBtYXAgImMiICd0b2RvLWRpc3BsYXktY2F0ZWdvcmllcykK ISAgICAgKGRlZmluZS1rZXkgbWFwICJDIiAndG9kby1jaGFuZ2UtaXRlbS1zZXAtaW4tY2F0KQoh ICAgICAoZGVmaW5lLWtleSBtYXAgImQiICd0b2RvLWRpc3BsYXktZmlsZWQtaXRlbXMtdW5kZXIt Y2F0KQohICAgICAoZGVmaW5lLWtleSBtYXAgIkQiICd0b2RvLWRlbGV0ZS1jYXRlZ29yeSkKICAg ICAgKGRlZmluZS1rZXkgbWFwICJlIiAndG9kby1lZGl0LWl0ZW0pCiAgICAgIChkZWZpbmUta2V5 IG1hcCAiRSIgJ3RvZG8tZWRpdC1tdWx0aWxpbmUpCiAgICAgIChkZWZpbmUta2V5IG1hcCAiZiIg J3RvZG8tZmlsZS1pdGVtKQorICAgICAoZGVmaW5lLWtleSBtYXAgIkYiICd0b2RvLWZpbGUtaXRl bS11bmRlci1jYXQpCisgICAgIChkZWZpbmUta2V5IG1hcCAiaCIgJ3RvZG8tdG9nZ2xlLWl0ZW0t aGVhZGVyKQogICAgICAoZGVmaW5lLWtleSBtYXAgImkiICd0b2RvLWluc2VydC1pdGVtKQogICAg ICAoZGVmaW5lLWtleSBtYXAgIkkiICd0b2RvLWluc2VydC1pdGVtLWhlcmUpCiAgICAgIChkZWZp bmUta2V5IG1hcCAiaiIgJ3RvZG8tanVtcC10by1jYXRlZ29yeSkKICAgICAgKGRlZmluZS1rZXkg bWFwICJrIiAndG9kby1kZWxldGUtaXRlbSkKICAgICAgKGRlZmluZS1rZXkgbWFwICJsIiAndG9k by1sb3dlci1pdGVtKQorICAgICAoZGVmaW5lLWtleSBtYXAgIm0iICd0b2RvLW1vdmUtaXRlbSkK ICAgICAgKGRlZmluZS1rZXkgbWFwICJuIiAndG9kby1mb3J3YXJkLWl0ZW0pCiAgICAgIChkZWZp bmUta2V5IG1hcCAicCIgJ3RvZG8tYmFja3dhcmQtaXRlbSkKICAgICAgKGRlZmluZS1rZXkgbWFw ICJQIiAndG9kby1wcmludCkKICAgICAgKGRlZmluZS1rZXkgbWFwICJxIiAndG9kby1xdWl0KQog ICAgICAoZGVmaW5lLWtleSBtYXAgInIiICd0b2RvLXJhaXNlLWl0ZW0pCisgICAgIChkZWZpbmUt a2V5IG1hcCAiUiIgJ3RvZG8tcmVuYW1lLWNhdGVnb3J5KQogICAgICAoZGVmaW5lLWtleSBtYXAg InMiICd0b2RvLXNhdmUpCiAgICAgIChkZWZpbmUta2V5IG1hcCAiUyIgJ3RvZG8tc2F2ZS10b3At cHJpb3JpdGllcykKICAgICAgKGRlZmluZS1rZXkgbWFwICJ0IiAndG9kby10b3AtcHJpb3JpdGll cykKKyAgICAgKGRlZmluZS1rZXkgbWFwICJYIiAndG9kby1jaGFuZ2UtdG9kby1wcmVmaXgpCiAg ICAgIG1hcCkKICAgICJUT0RPIG1vZGUga2V5bWFwLiIpCiAgCisgKGRlZnZhciB0b2RvLWZpbGVk LW1vZGUtbWFwCisgICAobGV0ICgobWFwIChtYWtlLXNwYXJzZS1rZXltYXApKSkKKyAgICAgKHNl dC1rZXltYXAtcGFyZW50IG1hcCB0b2RvLW1vZGUtbWFwKQorICAgICAoc3VwcHJlc3Mta2V5bWFw IG1hcCB0KQorICAgICAoZGVmaW5lLWtleSBtYXAgIkMiICd0b2RvLWNoYW5nZS1pdGVtLXNlcC1p bi1jYXQpCisgICAgIChkZWZpbmUta2V5IG1hcCAiZSIgJ3RvZG8tZWRpdC1pdGVtKQorICAgICAo ZGVmaW5lLWtleSBtYXAgIkUiICd0b2RvLWVkaXQtbXVsdGlsaW5lKQorICAgICAoZGVmaW5lLWtl eSBtYXAgImYiICd0b2RvLWZpbGUtaXRlbSkKKyAgICAgKGRlZmluZS1rZXkgbWFwICJoIiAndG9k by10b2dnbGUtaXRlbS1oZWFkZXIpCisgICAgIChkZWZpbmUta2V5IG1hcCAiayIgJ3RvZG8tZGVs ZXRlLWl0ZW0pCisgICAgIChkZWZpbmUta2V5IG1hcCAibiIgJ3RvZG8tZm9yd2FyZC1pdGVtKQor ICAgICAoZGVmaW5lLWtleSBtYXAgInAiICd0b2RvLWJhY2t3YXJkLWl0ZW0pCisgICAgIChkZWZp bmUta2V5IG1hcCAicSIgJ3RvZG8ta2lsbC1idWZmZXIpCisgICAgIChkZWZpbmUta2V5IG1hcCAi cyIgJ3RvZG8tc2F2ZSkKKyAgICAgbWFwKQorICAgIlRPRE8gZmlsZWQgbW9kZSBrZXltYXAuIikK KyAKKyAoZGVmdmFyIHRvZG8tY2F0ZWdvcmllcy1tb2RlLW1hcAorICAgKGxldCAoKG1hcCAobWFr ZS1zcGFyc2Uta2V5bWFwKSkpCisgICAgIChkZWZpbmUta2V5IG1hcCAicSIgJ3RvZG8ta2lsbC1i dWZmZXIpCisgICAgIChkZWZpbmUta2V5IG1hcCBbbW91c2UtMl0gJ3RvZG8tY2F0ZWdvcnktY2xp Y2spCisgICAgIChkZWZpbmUta2V5IG1hcCAiXHIiICd0b2RvLWNhdGVnb3J5LXJldHVybikKKyAg ICAgbWFwKQorICAgIlRPRE8gY2F0ZWdvcmllcyBtb2RlIGtleW1hcC4iKQorIAogIChkZWZ2YXIg dG9kby1jYXRlZ29yeS1udW1iZXIgMCAiVE9ETyBjYXRlZ29yeSBudW1iZXIuIikKICAKICAoZGVm dmFyIHRvZG8tdG1wLWJ1ZmZlci1uYW1lICIgKnRvZG8gdG1wKiIpCiAgCisgKGRlZnZhciB0b2Rv LWVkaXQtYnVmZmVyICIgKlRPRE8gRWRpdCoiCisgICAiVE9ETyBFZGl0IGJ1ZmZlciBuYW1lLiIp CisgCisgKGRlZnZhciB0b2RvLWNhdGVnb3JpZXMtYnVmZmVyICJUb2RvIENhdGVnb3JpZXMiCisg ICAiVE9ETyBjYXRlZ29yaWVzIGJ1ZmZlciBuYW1lLiIpCisgCisgKGRlZnZhciB0b2RvLWZpbGVk LWJ1ZmZlciAiRmlsZWQgaXRlbXM6IgorICAgIk5hbWUgb2YgYnVmZmVyIGRpc3BsYXlpbmcgZmls ZWQgaXRlbXMgaW4gdGhlIGN1cnJlbnQgY2F0ZWdvcnkuIikKKyAKICAoZGVmdmFyIHRvZG8tY2F0 ZWdvcnktc2VwIChtYWtlLXN0cmluZyA3NSA/LSkKICAgICJDYXRlZ29yeSBzZXBhcmF0b3IuIikK ICAKICAoZGVmdmFyIHRvZG8tY2F0ZWdvcnktYmVnICIgLS0tICIKICAgICJDYXRlZ29yeSBzdGFy dCBzZXBhcmF0b3IgdG8gYmUgcHJlcGVuZGVkIG9udG8gY2F0ZWdvcnkgbmFtZS4iKQogIAorIChk ZWZ2YXIgdG9kby1jYXRlZ29yeS1maWxlZCAiLS0tIEZpbGVkIgorICAgIlNlcGFyYXRvciBmb3Ig ZmlsZWQgY2F0ZWdvcnkgaXRlbXMsIGluc2VydGVkIGJlZm9yZSB0b2RvLWNhdGVnb3J5LWVuZC4i KQorIAogIChkZWZ2YXIgdG9kby1jYXRlZ29yeS1lbmQgIi0tLSBFbmQiCiAgICAiU2VwYXJhdG9y IGFmdGVyIGEgY2F0ZWdvcnkuIikKICAKICAoZGVmdmFyIHRvZG8taGVhZGVyICItKi0gbW9kZTog dG9kbzsgIgogICAgIkhlYWRlciBvZiB0b2RvIGZpbGVzLiIpCiAgCisgKGRlZnZhciB0b2RvLWJ1 ZmZlci1yZWFkLW9ubHkgdCA7IHNldCB0byBuaWwgdG8gbWFrZSB0b2RvLW1vZGUgYnVmZmVyIHdy aXRhYmxlCisgICAiRm9yIHNldHRpbmcgcmVhZC1vbmx5IHN0YXR1cyBvZiB0b2RvLW1vZGUuICBE ZWZhdWx0IGlzIHJlYWQtb25seS4iKQorIAogIDs7IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogIAogIChk ZWZ1biB0b2RvLWNhdGVnb3J5LXNlbGVjdCAoKQoqKioqKioqKioqKioqKioKKioqIDQ1Miw0NjEg KioqKgogICAgICAgKGNvbmNhdCAiXiIKICAgICAgICAgICAgICAgKHJlZ2V4cC1xdW90ZSAoY29u Y2F0IHRvZG8tcHJlZml4IHRvZG8tY2F0ZWdvcnktYmVnIG5hbWUpKQogICAgICAgICAgICAgICAi JCIpKQohICAgICAobGV0ICgoYmVnaW4gKDErIChsaW5lLWVuZC1wb3NpdGlvbikpKSkKISAgICAg ICAoc2VhcmNoLWZvcndhcmQtcmVnZXhwIChjb25jYXQgIl4iIHRvZG8tY2F0ZWdvcnktZW5kKSkK ISAgICAgICAobmFycm93LXRvLXJlZ2lvbiBiZWdpbiAobGluZS1iZWdpbm5pbmctcG9zaXRpb24p KQohICAgICAgIChnb3RvLWNoYXIgKHBvaW50LW1pbikpKSkpCiAgKGRlZmFsaWFzICd0b2RvLWNh dC1zbGN0ICd0b2RvLWNhdGVnb3J5LXNlbGVjdCkKICAKICAoZGVmdW4gdG9kby1mb3J3YXJkLWNh dGVnb3J5ICgpCi0tLSA1NjksNTkzIC0tLS0KICAgICAgIChjb25jYXQgIl4iCiAgICAgICAgICAg ICAgIChyZWdleHAtcXVvdGUgKGNvbmNhdCB0b2RvLXByZWZpeCB0b2RvLWNhdGVnb3J5LWJlZyBu YW1lKSkKICAgICAgICAgICAgICAgIiQiKSkKISAgICAgOzsgZGlzcGxheSBvbmx5IHVuZmlsZWQg aXRlbXMgCiEgICAgIChsZXQqICgoYmVnaW4gKDErIChsaW5lLWVuZC1wb3NpdGlvbikpKQohIAkg ICAoZW5kMCAocHJvZ24KISAJCSAgIChyZS1zZWFyY2gtZm9yd2FyZCAoY29uY2F0ICJeIiB0b2Rv LWNhdGVnb3J5LWVuZCkpCiEgCQkgICAobWF0Y2gtYmVnaW5uaW5nIDApKSkKISAJICAgKGZpbGVk LWJlZyAocmUtc2VhcmNoLWJhY2t3YXJkIAohIAkJICAgICAgIChjb25jYXQgIl4iIHRvZG8tY2F0 ZWdvcnktZmlsZWQgIiQiKSBiZWdpbiB0KSkKISAJICAgKGVuZCAob3IgZmlsZWQtYmVnIGVuZDAp KSkKISAgICAgICAobmFycm93LXRvLXJlZ2lvbiBiZWdpbiBlbmQpCiEgICAgICAgKGdvdG8tY2hh ciAocG9pbnQtbWluKSkpCiEgICAgIDs7IHNldCB0aGUgdmFsdWUgb2YgdG9kby1pdGVtLXNlcGFy YXRvciB0byB0aGUgYWN0dWFsIHN0cmluZyB1c2VkIGluCiEgICAgIDs7IHRoaXMgY2F0ZWdvcnkg KG5lZWRlZCBlLmcuIGZvciB0b2RvLWNoYW5nZS1pdGVtLXNlcC1pbi1jYXQpCiEgICAgIChzZXRx IHRvZG8taXRlbS1zZXBhcmF0b3IgKHNhdmUtZXhjdXJzaW9uIAohIAkJCQkoZ290by1jaGFyIChw b2ludC1taW4pKQohIAkJCQkoaWYgKHJlLXNlYXJjaC1mb3J3YXJkIAohIAkJCQkgICAgIChjb25j YXQgIlxcKFxuW15BLUJhLXowLTldKlxcKSIgCiEgCQkJCQkgICAgIChyZWdleHAtcXVvdGUgdG9k by1wcmVmaXgpKSBuaWwgdCkKISAJCQkJICAgIChtYXRjaC1zdHJpbmcgMSkKISAJCQkJICAiXG4i KSkpKSkKICAoZGVmYWxpYXMgJ3RvZG8tY2F0LXNsY3QgJ3RvZG8tY2F0ZWdvcnktc2VsZWN0KQog IAogIChkZWZ1biB0b2RvLWZvcndhcmQtY2F0ZWdvcnkgKCkKKioqKioqKioqKioqKioqCioqKiA0 NzcsNDgzICoqKioKICAoZGVmdW4gdG9kby1iYWNrd2FyZC1pdGVtICgpCiAgICAiU2VsZWN0IHBy ZXZpb3VzIGVudHJ5IG9mIFRPRE8gbGlzdC4iCiAgICAoaW50ZXJhY3RpdmUpCiEgICAoc2VhcmNo LWJhY2t3YXJkLXJlZ2V4cCAoY29uY2F0ICJeIiAocmVnZXhwLXF1b3RlIHRvZG8tcHJlZml4KSkg bmlsIHQpCiAgICAobWVzc2FnZSAiIikpCiAgKGRlZmFsaWFzICd0b2RvLWNtZC1wcmV2ICd0b2Rv LWJhY2t3YXJkLWl0ZW0pCiAgCi0tLSA2MDksNjIxIC0tLS0KICAoZGVmdW4gdG9kby1iYWNrd2Fy ZC1pdGVtICgpCiAgICAiU2VsZWN0IHByZXZpb3VzIGVudHJ5IG9mIFRPRE8gbGlzdC4iCiAgICAo aW50ZXJhY3RpdmUpCiEgICAoaWYgKG9yIChsb29raW5nLWF0IChjb25jYXQgIl4iIChyZWdleHAt cXVvdGUgdG9kby1wcmVmaXgpKSkKISAJICAodG9kby1pdGVtLXNlcGFyYXRvci1wKQohIAkgIChl b2JwKSkKISAgICAgICAoc2VhcmNoLWJhY2t3YXJkLXJlZ2V4cCAoY29uY2F0ICJeIiAocmVnZXhw LXF1b3RlIHRvZG8tcHJlZml4KSkgbmlsIHQpCiEgICAgIDs7IGdvIHVwIHRvIHByZXZpb3VzIGl0 ZW0gYWxzbyBmcm9tIGFueXdoZXJlIHdpdGhpbiB0aGUgY3VycmVudCBpdGVtCiEgICAgIChnb3Rv LWNoYXIgKHRvZG8taXRlbS1zdGFydCkpCiEgICAgIChzZWFyY2gtYmFja3dhcmQtcmVnZXhwIChj b25jYXQgIl4iIChyZWdleHAtcXVvdGUgdG9kby1wcmVmaXgpKSBuaWwgdCkpCiAgICAobWVzc2Fn ZSAiIikpCiAgKGRlZmFsaWFzICd0b2RvLWNtZC1wcmV2ICd0b2RvLWJhY2t3YXJkLWl0ZW0pCiAg CioqKioqKioqKioqKioqKgoqKiogNDg4LDQ5MyAqKioqCi0tLSA2MjYsNjMzIC0tLS0KICAgIChl bmQtb2YtbGluZSkKICAgIChzZWFyY2gtZm9yd2FyZC1yZWdleHAgKGNvbmNhdCAiXiIgKHJlZ2V4 cC1xdW90ZSB0b2RvLXByZWZpeCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgIG5pbCAnZ290 by1lbmQgY291bnQpCisgICA7OyBlbXB0eSBsYXN0IGxpbmUgaXMgbm90IGFuIGl0ZW0KKyAgIChp ZiAoYW5kIChlb2JwKSAobG9va2luZy1hdCAiXiQiKSkgKGJhY2t3YXJkLWNoYXIgMSkpCiAgICAo YmVnaW5uaW5nLW9mLWxpbmUpCiAgICAobWVzc2FnZSAiIikpCiAgKGRlZmFsaWFzICd0b2RvLWNt ZC1uZXh0ICd0b2RvLWZvcndhcmQtaXRlbSkKKioqKioqKioqKioqKioqCioqKiA1MTEsNTk1ICoq KioKICAoZGVmYWxpYXMgJ3RvZG8tY21kLWRvbmUgJ3RvZG8tcXVpdCkKICAKICAoZGVmdW4gdG9k by1lZGl0LWl0ZW0gKCkKISAgICJFZGl0IGN1cnJlbnQgVE9ETyBsaXN0IGVudHJ5LiIKICAgIChp bnRlcmFjdGl2ZSkKISAgIChsZXQgKChpdGVtICh0b2RvLWl0ZW0tc3RyaW5nKSkpCiEgICAgIChp ZiAodG9kby1zdHJpbmctbXVsdGlsaW5lLXAgaXRlbSkKISAgICAgICAgICh0b2RvLWVkaXQtbXVs dGlsaW5lKQohICAgICAgIChsZXQgKChuZXcgKHJlYWQtZnJvbS1taW5pYnVmZmVyICJFZGl0OiAi IGl0ZW0pKSkKISAgICAgICAgICh0b2RvLXJlbW92ZS1pdGVtKQohICAgICAgICAgKGluc2VydCBu ZXcgIlxuIikKISAgICAgICAgICh0b2RvLWJhY2t3YXJkLWl0ZW0pCiEgICAgICAgICAobWVzc2Fn ZSAiIikpKSkpCiAgKGRlZmFsaWFzICd0b2RvLWNtZC1lZGl0ICd0b2RvLWVkaXQtaXRlbSkKICAK ICAoZGVmdW4gdG9kby1lZGl0LW11bHRpbGluZSAoKQohICAgIlNldCB1cCBhIGJ1ZmZlciBmb3Ig ZWRpdGluZyBhIG11bHRpbGluZSBUT0RPIGxpc3QgZW50cnkuIgogICAgKGludGVyYWN0aXZlKQoh ICAgKGxldCAoKGJ1ZmZlci1uYW1lIChnZW5lcmF0ZS1uZXctYnVmZmVyLW5hbWUgdG9kby1lZGl0 LWJ1ZmZlcikpKQohICAgICAoc3dpdGNoLXRvLWJ1ZmZlcgohICAgICAgKG1ha2UtaW5kaXJlY3Qt YnVmZmVyCiEgICAgICAgKGZpbGUtbmFtZS1ub25kaXJlY3RvcnkgdG9kby1maWxlLWRvKSBidWZm ZXItbmFtZSkpCiEgICAgIChtZXNzYWdlICJUbyBleGl0LCBzaW1wbHkga2lsbCB0aGlzIGJ1ZmZl ciBhbmQgcmV0dXJuIHRvIGxpc3QuIikKISAgICAgKHRvZG8tZWRpdC1tb2RlKQohICAgICAobmFy cm93LXRvLXJlZ2lvbiAodG9kby1pdGVtLXN0YXJ0KSAodG9kby1pdGVtLWVuZCkpKSkKICAKICA7 OzsjIyNhdXRvbG9hZAogIChkZWZ1biB0b2RvLWFkZC1jYXRlZ29yeSAoY2F0KQogICAgIkFkZCBu ZXcgY2F0ZWdvcnkgQ0FUIHRvIHRoZSBUT0RPIGxpc3QuIgogICAgKGludGVyYWN0aXZlICJzQ2F0 ZWdvcnk6ICIpCiAgICAoc2F2ZS13aW5kb3ctZXhjdXJzaW9uCiAgICAgIChzZXRxIHRvZG8tY2F0 ZWdvcmllcyAoY29ucyBjYXQgdG9kby1jYXRlZ29yaWVzKSkKICAgICAgKGZpbmQtZmlsZSB0b2Rv LWZpbGUtZG8pCiEgICAgICh3aWRlbikKISAgICAgKGdvdG8tY2hhciAocG9pbnQtbWluKSkKISAg ICAgKGxldCAoKHBvc24gKHNlYXJjaC1mb3J3YXJkICItKi0gbW9kZTogdG9kbzsgIiAxNyB0KSkp CiEgICAgICAgKGlmIChub3QgKG51bGwgcG9zbikpIChnb3RvLWNoYXIgcG9zbikpCiEgICAgICAg KGlmIChlcXVhbCBwb3NuIG5pbCkKISAgICAgICAgICAgKHByb2duCiEgICAgICAgICAgICAgKGlu c2VydCAiLSotIG1vZGU6IHRvZG87IFxuIikKISAgICAgICAgICAgICAoZm9yd2FyZC1jaGFyIC0x KSkKISAgICAgICAgIChraWxsLWxpbmUpKSkKISAgICAgKGluc2VydCAoZm9ybWF0ICJ0b2RvLWNh dGVnb3JpZXM6ICVTOyAtKi0iIHRvZG8tY2F0ZWdvcmllcykpCiEgICAgIChmb3J3YXJkLWNoYXIg MSkKISAgICAgKGluc2VydCAoZm9ybWF0ICIlcyVzJXNcbiVzXG4lcyAlc1xuIgohICAgICAgICAg ICAgICAgICAgICAgdG9kby1wcmVmaXggdG9kby1jYXRlZ29yeS1iZWcgY2F0CiEgICAgICAgICAg ICAgICAgICAgICB0b2RvLWNhdGVnb3J5LWVuZAohICAgICAgICAgICAgICAgICAgICAgdG9kby1w cmVmaXggdG9kby1jYXRlZ29yeS1zZXApKSkKISAgIDApCiAgCiAgOzs7IyMjYXV0b2xvYWQKICAo ZGVmdW4gdG9kby1hZGQtaXRlbS1ub24taW50ZXJhY3RpdmVseSAobmV3LWl0ZW0gY2F0ZWdvcnkp CiAgICAiSW5zZXJ0IE5FVy1JVEVNIGluIFRPRE8gbGlzdCBhcyBhIG5ldyBlbnRyeSBpbiBDQVRF R09SWS4iCiAgICAoc2F2ZS1leGN1cnNpb24KICAgICAgKHRvZG8tc2hvdykpCiEgICAoc2F2ZS1l eGN1cnNpb24KISAgICAgKGlmIChzdHJpbmc9ICIiIGNhdGVnb3J5KQohICAgICAgICAgKHNldHEg Y2F0ZWdvcnkgKG50aCB0b2RvLWNhdGVnb3J5LW51bWJlciB0b2RvLWNhdGVnb3JpZXMpKSkKISAg ICAgKGxldCAoKGNhdC1leGlzdHMgKG1lbWJlciBjYXRlZ29yeSB0b2RvLWNhdGVnb3JpZXMpKSkK ISAgICAgICAoc2V0cSB0b2RvLWNhdGVnb3J5LW51bWJlcgohICAgICAgICAgICAgIChpZiBjYXQt ZXhpc3RzCiEgICAgICAgICAgICAgICAgICgtIChsZW5ndGggdG9kby1jYXRlZ29yaWVzKSAobGVu Z3RoIGNhdC1leGlzdHMpKQohICAgICAgICAgICAgICAgKHRvZG8tYWRkLWNhdGVnb3J5IGNhdGVn b3J5KSkpKQohICAgICAodG9kby1zaG93KQohICAgICAoc2V0cSB0b2RvLXByZXZpb3VzLWxpbmUg MCkKISAgICAgKGxldCAoKHRvcCAxKQohIAkgIChib3R0b20gKDErIChjb3VudC1saW5lcyAocG9p bnQtbWluKSAocG9pbnQtbWF4KSkpKSkKISAgICAgICAod2hpbGUgKD4gKC0gYm90dG9tIHRvcCkg dG9kby1pbnNlcnQtdGhyZXNob2xkKQohIAkobGV0KiAoKGN1cnJlbnQgKC8gKCsgdG9wIGJvdHRv bSkgMikpCiEgCSAgICAgICAoYW5zd2VyIChpZiAoPCBjdXJyZW50IGJvdHRvbSkKISAJCQkgICAo dG9kby1tb3JlLWltcG9ydGFudC1wIGN1cnJlbnQpIG5pbCkpKQohIAkgIChpZiBhbnN3ZXIKISAJ ICAgICAgKHNldHEgYm90dG9tIGN1cnJlbnQpCiEgCSAgICAoc2V0cSB0b3AgKDErIGN1cnJlbnQp KSkpKQohICAgICAgIChzZXRxIHRvcCAoLyAoKyB0b3AgYm90dG9tKSAyKSkKISAgICAgICA7OyBn b3RvLWxpbmUgZG9lc24ndCBoYXZlIHRoZSBkZXNpcmVkIGJlaGF2aW9yIGluIGEgbmFycm93ZWQg YnVmZmVyCiEgICAgICAgKGdvdG8tY2hhciAocG9pbnQtbWluKSkKISAgICAgICAoZm9yd2FyZC1s aW5lICgxLSB0b3ApKSkKISAgICAgKGluc2VydCBuZXctaXRlbSAiXG4iKQohICAgICAodG9kby1i YWNrd2FyZC1pdGVtKQohICAgICAodG9kby1zYXZlKQohICAgICAobWVzc2FnZSAiIikpKQogIAog IDs7OyMjI2F1dG9sb2FkCiAgKGRlZnVuIHRvZG8taW5zZXJ0LWl0ZW0gKGFyZykKLS0tIDY1MSw5 MTAgLS0tLQogIChkZWZhbGlhcyAndG9kby1jbWQtZG9uZSAndG9kby1xdWl0KQogIAogIChkZWZ1 biB0b2RvLWVkaXQtaXRlbSAoKQohICAgIkVkaXQgY3VycmVudCB1bmZpbGVkIG9yIGZpbGVkIFRP RE8gbGlzdCBlbnRyeS4iCiAgICAoaW50ZXJhY3RpdmUpCiEgICAoaWYgKHRvZG8taXRlbS1zdHJp bmctcCkKISAgICAgICAobGV0ICgoaXRlbSAodG9kby1pdGVtLXN0cmluZykpKQohIAkoaWYgKHRv ZG8tc3RyaW5nLW11bHRpbGluZS1wIGl0ZW0pCiEgCSAgICAodG9kby1lZGl0LW11bHRpbGluZSkK ISAJICAobGV0KiAoKGJ1ZmZlci1yZWFkLW9ubHkgbmlsKQohIAkJIDs7IGN1cnNvciBwb3NpdGlv biB3aXRoaW4gaXRlbSBwcmlvciB0byBlZGl0aW5nCiEgCQkgKGhlcmUgKC0gKHBvaW50KSAodG9k by1pdGVtLXN0YXJ0KSAtMSkpCiEgCQkgKG5ldyAocmVhZC1mcm9tLW1pbmlidWZmZXIgCiEgCQkg ICAgICAgIkVkaXQ6ICIgKGNvbnMgaXRlbSBoZXJlKSkpKSA7IHN0YXJ0IGVkaXRpbmcgYXQgcG9p bnQKISAJICAgICh0b2RvLXJlbW92ZS1pdGVtKQohIAkgICAgKGluc2VydCBuZXcgdG9kby1pdGVt LXNlcGFyYXRvcikKISAJICAgICh0b2RvLWJhY2t3YXJkLWl0ZW0pCiEgCSAgICA7OyBtYWtlIGN1 cnNvciBwb3NpdGlvbiBhZnRlciBlZGl0aW5nIHRoZSBzYW1lIGFzIGJlZm9yZSBlZGl0aW5nCiEg CSAgICAoZm9yd2FyZC1jaGFyICgxLSBoZXJlKSkgCiEgCSAgICAobWVzc2FnZSAiIikpKSkKISAg ICAgKGVycm9yICJObyBUT0RPIGxpc3QgZW50cnkgdG8gZWRpdCIpKSkKICAoZGVmYWxpYXMgJ3Rv ZG8tY21kLWVkaXQgJ3RvZG8tZWRpdC1pdGVtKQogIAogIChkZWZ1biB0b2RvLWVkaXQtbXVsdGls aW5lICgpCiEgICAiU2V0IHVwIGEgYnVmZmVyIGZvciBlZGl0aW5nIGFuIHVuZmlsZWQgb3IgZmls ZWQgbXVsdGlsaW5lIFRPRE8gbGlzdCBlbnRyeS4iCiAgICAoaW50ZXJhY3RpdmUpCiEgICAoaWYg KHRvZG8taXRlbS1zdHJpbmctcCkKISAgICAgICAobGV0ICgoYnVmZmVyLW5hbWUgKGdlbmVyYXRl LW5ldy1idWZmZXItbmFtZSB0b2RvLWVkaXQtYnVmZmVyKSkKISAJICAgIChoZXJlIChwb2ludCkp KSA7IHRvIGVuYWJsZSBlZGl0aW5nIGZpbGVkIG11bHRpbGluZSBpdGVtcwohIAkoc3dpdGNoLXRv LWJ1ZmZlcgohIAkgKG1ha2UtaW5kaXJlY3QtYnVmZmVyCiEgIAkgIChmaWxlLW5hbWUtbm9uZGly ZWN0b3J5IHRvZG8tZmlsZS1kbykgYnVmZmVyLW5hbWUpKQohIAkodG9kby1lZGl0LW1vZGUpCiEg CShtZXNzYWdlICJUbyBmaW5pc2ggZWRpdGluZyBhbmQgcmV0dXJuIHRvIFRPRE8gaXRlbSBsaXN0 LCB0eXBlIHEuIikKISAJKHdpZGVuKSA7IGluIGNhc2UgdGhlIGl0ZW0gaXMgZmlsZWQKISAJKGdv dG8tY2hhciBoZXJlKQohIAk7OyBUaGlzIGJpdCBvZiBjb2RlIGluc3VyZXMgdGhhdCwgaWYgdGhl IGxhc3QgdW5maWxlZCBvciBmaWxlZCBpdGVtCiEgCTs7IGluIHRoZSBjYXRlZ29yeSBpcyBpbnNl cnRlZCBpbnRvIHRoZSBlZGl0aW5nIGJ1ZmZlciwgdGhlIAohIAk7OyB0b2RvLWNhdGVnb3J5LWZp bGVkIG9yIHRvZG8tY2F0ZWdvcnktZW5kIHN0cmluZywgcmVzcGVjdGl2ZWx5LCAKISAJOzsgaXMg bm90IGRpc3BsYXllZCB3aXRoIGl0LgohIAkobGV0KiAoKGJlZ2luIChzYXZlLWV4Y3Vyc2lvbgoh IAkJCShzZWFyY2gtYmFja3dhcmQtcmVnZXhwCiEgCQkJIChjb25jYXQgIl4iIChyZWdleHAtcXVv dGUgCiEgCQkJCSAgICAgIChjb25jYXQgdG9kby1wcmVmaXggdG9kby1jYXRlZ29yeS1iZWcpKSkp CiEgCQkJKDErIChsaW5lLWVuZC1wb3NpdGlvbikpKSkKISAJICAgICAgIChlbmQgKHNhdmUtZXhj dXJzaW9uCiEgCQkgICAgICAocmUtc2VhcmNoLWZvcndhcmQgKGNvbmNhdCAiXiIgdG9kby1jYXRl Z29yeS1lbmQpKQohIAkJICAgICAgKG1hdGNoLWJlZ2lubmluZyAwKSkpCiEgCSAgICAgICAoZmls ZWQtYmVnIChzYXZlLWV4Y3Vyc2lvbgohIAkJCSAgICAoaWYgKHJlLXNlYXJjaC1mb3J3YXJkCiEg CQkJCSAoY29uY2F0ICJeIiB0b2RvLWNhdGVnb3J5LWZpbGVkICIkIikgZW5kIHQpCiEgCQkJCSht YXRjaC1iZWdpbm5pbmcgMCkpKSkKISAJICAgICAgIChmaWxlZC1lbmQgKHNhdmUtZXhjdXJzaW9u CiEgCQkJICAgIChpZiAocmUtc2VhcmNoLWJhY2t3YXJkIAohIAkJCQkgKGNvbmNhdCAiXiIgdG9k by1jYXRlZ29yeS1maWxlZCAiJCIpIGJlZ2luIHQpCiEgCQkJCShtYXRjaC1lbmQgMCkpKSkpCiEg CSAgKGNvbmQgKGZpbGVkLWVuZCAobmFycm93LXRvLXJlZ2lvbiBmaWxlZC1lbmQgZW5kKSkKISAJ CShmaWxlZC1iZWcgKG5hcnJvdy10by1yZWdpb24gYmVnaW4gZmlsZWQtYmVnKSkKISAJCSh0IChu YXJyb3ctdG8tcmVnaW9uIGJlZ2luIGVuZCkpKSkKISAJKG5hcnJvdy10by1yZWdpb24gKHRvZG8t aXRlbS1zdGFydCkgKHRvZG8taXRlbS1lbmQpKSkKISAgICAgKGVycm9yICJObyBUT0RPIGxpc3Qg ZW50cnkgdG8gZWRpdCIpKSkKICAKICA7OzsjIyNhdXRvbG9hZAogIChkZWZ1biB0b2RvLWFkZC1j YXRlZ29yeSAoY2F0KQogICAgIkFkZCBuZXcgY2F0ZWdvcnkgQ0FUIHRvIHRoZSBUT0RPIGxpc3Qu IgogICAgKGludGVyYWN0aXZlICJzQ2F0ZWdvcnk6ICIpCisgICAoaWYgKHN0cmluZz0gIiIgY2F0 KSAoZXJyb3IgIkEgY2F0ZWdvcnkgbmFtZSBtdXN0IGJlIHN1cHBsaWVkIikpCisgICAoaWYgKG1l bWJlciBjYXQgdG9kby1jYXRlZ29yaWVzKQorICAgICAgIChlcnJvciAiQ2F0ZWdvcnkgYWxyZWFk eSBleGlzdHMgLS0gY2hvb3NlIGFub3RoZXIgbmFtZSIpKQogICAgKHNhdmUtd2luZG93LWV4Y3Vy c2lvbgogICAgICAoc2V0cSB0b2RvLWNhdGVnb3JpZXMgKGNvbnMgY2F0IHRvZG8tY2F0ZWdvcmll cykpCiAgICAgIChmaW5kLWZpbGUgdG9kby1maWxlLWRvKQohICAgICAobGV0ICgoYnVmZmVyLXJl YWQtb25seSBuaWwpKQohICAgICAgICh3aWRlbikKISAgICAgICAoZ290by1jaGFyIChwb2ludC1t aW4pKQohICAgICAgIChsZXQgKChwb3NuIChzZWFyY2gtZm9yd2FyZCAiLSotIG1vZGU6IHRvZG87 ICIgMTcgdCkpKQohIAkoaWYgKG5vdCAobnVsbCBwb3NuKSkgKGdvdG8tY2hhciBwb3NuKSkKISAJ KGlmIChlcXVhbCBwb3NuIG5pbCkKISAJICAgIChwcm9nbgohIAkgICAgICAoaW5zZXJ0ICItKi0g bW9kZTogdG9kbzsgXG4iKQohIAkgICAgICAoZm9yd2FyZC1jaGFyIC0xKSkKISAJICAoa2lsbC1s aW5lKSkpCiEgICAgICAgKGluc2VydCAoZm9ybWF0ICJ0b2RvLWNhdGVnb3JpZXM6ICVTOyAtKi0i IHRvZG8tY2F0ZWdvcmllcykpCiEgICAgICAgKGZvcndhcmQtY2hhciAxKQohICAgICAgIChpbnNl cnQgKGZvcm1hdCAiJXMlcyVzXG4lc1xuJXMgJXNcbiIKISAJCSAgICAgIHRvZG8tcHJlZml4IHRv ZG8tY2F0ZWdvcnktYmVnIGNhdAohIAkJICAgICAgdG9kby1jYXRlZ29yeS1lbmQKISAJCSAgICAg IHRvZG8tcHJlZml4IHRvZG8tY2F0ZWdvcnktc2VwKSkpKQohICAgOzsgc2hvdyB0aGUgbmV3bHkg YWRkZWQgY2F0ZWdvcnkKISAgIChzZXRxIHRvZG8tY2F0ZWdvcnktbnVtYmVyIDApCiEgICAodG9k by1jYXRlZ29yeS1zZWxlY3QpKQohIAohIChkZWZ1biB0b2RvLXJlbmFtZS1jYXRlZ29yeSAobmV3 KQohICAgIlJlbmFtZSBjdXJyZW50IHRvZG8gY2F0ZWdvcnkuIgohICAgKGludGVyYWN0aXZlICJz TmV3IGNhdGVnb3J5IG5hbWU6ICIpCiEgICAobGV0ICgoY2F0IChudGggdG9kby1jYXRlZ29yeS1u dW1iZXIgdG9kby1jYXRlZ29yaWVzKSkKISAJKHZlYyAodmNvbmNhdCB0b2RvLWNhdGVnb3JpZXMp KQohIAkoYnVmZmVyLXJlYWQtb25seSBuaWwpKQohICAgICAoaWYgKHN0cmluZz0gIiIgbmV3KSAo ZXJyb3IgIkEgY2F0ZWdvcnkgbmFtZSBtdXN0IGJlIHN1cHBsaWVkIikpCiEgICAgIChhc2V0IHZl YyB0b2RvLWNhdGVnb3J5LW51bWJlciBuZXcpCiEgICAgIChzZXRxIHRvZG8tY2F0ZWdvcmllcyAo YXBwZW5kIHZlYyBuaWwpKQohICAgICAoc2F2ZS1leGN1cnNpb24KISAgICAgICAod2lkZW4pCiEg ICAgICAgKHNlYXJjaC1iYWNrd2FyZCAoY29uY2F0IHRvZG8tcHJlZml4IHRvZG8tY2F0ZWdvcnkt YmVnKSkKISAgICAgICAoZ290by1jaGFyIChtYXRjaC1lbmQgMCkpCiEgICAgICAgKHdoZW4gKGxv b2tpbmctYXQgKHJlZ2V4cC1xdW90ZSBjYXQpKQohIAkocmVwbGFjZS1tYXRjaCBuZXcgdCkpCiEg ICAgICAgKGdvdG8tY2hhciAocG9pbnQtbWluKSkKISAgICAgICAod2hlbiAobG9va2luZy1hdCAo cmVnZXhwLXF1b3RlIHRvZG8taGVhZGVyKSkKISAJKGdvdG8tY2hhciAobWF0Y2gtZW5kIDApKQoh IAkoa2lsbC1saW5lKQohIAkoaW5zZXJ0IChmb3JtYXQgInRvZG8tY2F0ZWdvcmllczogJVM7IC0q LSIgdG9kby1jYXRlZ29yaWVzKSkpCiEgICAgICAgKHNldHEgbW9kZS1saW5lLWJ1ZmZlci1pZGVu dGlmaWNhdGlvbgohIAkgICAgKGNvbmNhdCAiQ2F0ZWdvcnk6ICIgKGZvcm1hdCAiJTE4cyIgbmV3 KSkpKSkKISAgICh0b2RvLWNhdGVnb3J5LXNlbGVjdCkpCiEgCiEgKGRlZnVuIHRvZG8tZGVsZXRl LWNhdGVnb3J5ICgpCiEgICAiRGVsZXRlIGN1cnJlbnQgVE9ETyBjYXRlZ29yeSBpZiBpdCBjb250 YWlucyBubyBmaWxlZCBvciB1bmZpbGVkIGl0ZW1zLiIKISAgIChpbnRlcmFjdGl2ZSkKISAgICh3 aWRlbikKISAgIChsZXQqICgoY2F0IChudGggdG9kby1jYXRlZ29yeS1udW1iZXIgdG9kby1jYXRl Z29yaWVzKSkKISAJIChiZWdpbjAgKHNlYXJjaC1iYWNrd2FyZCAoY29uY2F0IHRvZG8tcHJlZml4 IHRvZG8tY2F0ZWdvcnktYmVnIGNhdCkpKQohIAkgKGJlZ2luICgxKyAobWF0Y2gtZW5kIDApKSkK ISAJIChlbmQgKHByb2duCiEgCQkocmUtc2VhcmNoLWZvcndhcmQgKGNvbmNhdCAiXiIgdG9kby1j YXRlZ29yeS1lbmQgIiQiKSkKISAJCShtYXRjaC1iZWdpbm5pbmcgMCkpKQohIAkgKGNhdC1lbmQg KDErIChzZWFyY2gtZm9yd2FyZCAKISAJCSAgICAgICAoY29uY2F0IHRvZG8tcHJlZml4ICIgIiB0 b2RvLWNhdGVnb3J5LXNlcCkpKSkKISAJIChmaWxlZC1iZWcgKHJlLXNlYXJjaC1iYWNrd2FyZCAK ISAJCSAgICAgKGNvbmNhdCAiXiIgdG9kby1jYXRlZ29yeS1maWxlZCAiJCIpIGJlZ2luIHQpKQoh IAkgKGZpbGVkLWVuZCAoaWYgKG5vdCAobnVsbCBmaWxlZC1iZWcpKSAoMSsgKG1hdGNoLWVuZCAw KSkpKQohIAkgKGJ1ZmZlci1yZWFkLW9ubHkgbmlsKSkKISAgICAgICAgICAgOzsgQSBkZWxldGFi bGUgY2F0ZWdvcnkgbXVzdCBjb250YWluIG5laXRoZXIgdW5maWxlZCBpdGVtcy4uLgohICAgICAo Y29uZCAoKG9yIChhbmQgKG5vdCAobnVsbCBmaWxlZC1iZWcpKSAobm90IChlcXVhbCBiZWdpbiBm aWxlZC1iZWcpKSkKISAJICAgICAgIChhbmQgKG51bGwgZmlsZWQtYmVnKSAobm90IChlcXVhbCBi ZWdpbiBlbmQpKSkpCiEgCSAgICh0b2RvLWNhdGVnb3J5LXNlbGVjdCkKISAJICAgKGVycm9yICJD YW5ub3QgZGVsZXRlIG5vbmVtcHR5IGNhdGVnb3J5IikpCiEgCSAgOzsgLi4ubm9yIGZpbGVkIGl0 ZW1zLgohIAkgICgoYW5kIChub3QgKG51bGwgZmlsZWQtYmVnKSkgKG5vdCAoZXF1YWwgZmlsZWQt ZW5kIGVuZCkpKQohIAkgICAodG9kby1jYXRlZ29yeS1zZWxlY3QpCiEgCSAgICh0b2RvLWRpc3Bs YXktZmlsZWQtaXRlbXMtdW5kZXItY2F0KQohIAkgICAoZXJyb3IgIkNhbm5vdCBkZWxldGUgY2F0 ZWdvcnkgd2l0aCBmaWxlZCBpdGVtcyIpKQohIAkgIDs7IGNhdGVnb3J5IGlzIGVtcHR5LCBzbyBy ZXF1ZXN0IGRlbGV0aW9uIGNvbmZpcm1hdGlvbgohIAkgICh0IChpZiAoZXF1YWwgZmlsZWQtZW5k IGVuZCkgKHNldHEgYmVnaW4gZmlsZWQtZW5kKSkKISAJICAgICAodG9kby1jYXRlZ29yeS1zZWxl Y3QpCiEgCSAgICAgKGlmICh5LW9yLW4tcCAoY29uY2F0ICJQZXJtYW5lbnRseSByZW1vdmUgJyIg Y2F0ICInPyAiKSkKISAJCSAocHJvZ24KISAJCSAgICh3aWRlbikKISAJCSAgIChraWxsLXJlZ2lv biBiZWdpbjAgY2F0LWVuZCkKISAJCSAgIChnb3RvLWNoYXIgKHBvaW50LW1pbikpCiEgCQkgICAo d2hlbiAobG9va2luZy1hdCAocmVnZXhwLXF1b3RlIHRvZG8taGVhZGVyKSkKISAJCSAgICAgKHNl dHEgdG9kby1jYXRlZ29yaWVzIAohIAkJCSAgIChkZWxldGUgY2F0IHRvZG8tY2F0ZWdvcmllcykp CiEgCQkgICAgIChnb3RvLWNoYXIgKG1hdGNoLWVuZCAwKSkKISAJCSAgICAgKGtpbGwtbGluZSkK ISAJCSAgICAgKGluc2VydCAoZm9ybWF0ICJ0b2RvLWNhdGVnb3JpZXM6ICVTOyAtKi0iIAohIAkJ CQkgICAgIHRvZG8tY2F0ZWdvcmllcykpCiEgCQkgICAgICh0b2RvLWNhdGVnb3J5LXNlbGVjdCkK ISAJCSAgICAgKG1lc3NhZ2UgIkRlbGV0ZWQgY2F0ZWdvcnkgXCIlc1wiIiBjYXQpKSkKISAJICAg ICAgICh0b2RvLWNhdGVnb3J5LXNlbGVjdCkpKSkpKQohIAohIChkZWZ1biB0b2RvLWRpc3BsYXkt Y2F0ZWdvcmllcyAoKQohICAgIkRpc3BsYXkgY2xpY2thYmxlIGFscGhhYmV0aWNhbCBsaXN0IG9m IFRPRE8gY2F0ZWdvcmllcy4KISBDbGljayBvciB0eXBlIFJFVCBvbiBhIGNhdGVnb3J5IG5hbWUg dG8gZ28gdG8gaXQuIgohICAgKGludGVyYWN0aXZlKQohICAgKGxldCAoKGNhdC1saXN0IHRvZG8t Y2F0ZWdvcmllcykKISAJKGJ1ZmZlci1uYW1lIChjb25jYXQgIioiIHRvZG8tY2F0ZWdvcmllcy1i dWZmZXIgIioiKSkpCiEgICAgICh3aXRoLWN1cnJlbnQtYnVmZmVyIChnZXQtYnVmZmVyLWNyZWF0 ZSBidWZmZXItbmFtZSkKISAgICAgICAocG9wLXRvLWJ1ZmZlciAoY3VycmVudC1idWZmZXIpKQoh ICAgICAgIChsZXQgKChidWZmZXItcmVhZC1vbmx5IG5pbCkpCiEgCShlcmFzZS1idWZmZXIpCiEg CShraWxsLWFsbC1sb2NhbC12YXJpYWJsZXMpCiEgCTs7IGluc2VydCB0aGUgY2F0ZWdvcnkgbmFt ZXMgYXMgY2xpY2thYmxlIHRleHQKISAJKHdoaWxlIGNhdC1saXN0CiEgCSAgKHNldHEgY2F0IChj YXIgY2F0LWxpc3QpKQohIAkgIChpbnNlcnQgY2F0KQohIAkgIChhZGQtdGV4dC1wcm9wZXJ0aWVz IChsaW5lLWJlZ2lubmluZy1wb3NpdGlvbikgKGxpbmUtZW5kLXBvc2l0aW9uKQohIAkJCSAgICAg ICAobGlzdCAnbW91c2UtZmFjZSAnaGlnaGxpZ2h0KSkKISAJICAoaW5zZXJ0ICJcbiIpCiEgCSAg KHNldHEgY2F0LWxpc3QgKGNkciBjYXQtbGlzdCkpKQohIAk7OyBkaXNwbGF5IGNhdGVnb3JpZXMg aW4gY2FzZS1pbnNlbnNpdGl2ZSBhbHBoYWJldGljYWwgb3JkZXIKISAJKG1ha2UtbG9jYWwtdmFy aWFibGUgJ3NvcnQtZm9sZC1jYXNlKQohIAkobGV0ICgoYmVnaW4gKHBvaW50LW1pbikpCiEgCSAg ICAgIChlbmQgKHBvaW50LW1heCkpCiEgCSAgICAgIChzb3J0LWZvbGQtY2FzZSB0KSkKISAJICAo c29ydC1saW5lcyBuaWwgYmVnaW4gZW5kKSkKISAJKGdvdG8tY2hhciAocG9pbnQtbWluKSkpCiEg ICAgICAgKHRvZG8tY2F0ZWdvcmllcy1tb2RlKQohICAgICAgIDs7IHRvIGVuYWJsZSB0b2RvLWNh dGVnb3J5LWNsaWNrIHVuZGVyIHR0eSAoYnV0IHVzZWxlc3MgaWYgdGhlIHR0eQohICAgICAgIDs7 IGRvZXNuJ3QgZW11bGF0ZSBhbiB4dGVybSB3aXRoIG1vdXNlIHN1cHBvcnQsIGUuZy4gTGludXgg Y29uc29sZQohICAgICAgIDs7IHdpdGhvdXQgZ3BtIGVuYWJsZWQpCiEgICAgICAgKGlmIChudWxs IHdpbmRvdy1zeXN0ZW0pIChmdW5jYWxsICd4dGVybS1tb3VzZS1tb2RlIDEpKQohICAgICAgICht ZXNzYWdlICJDbGljayBvciB0eXBlIFJFVCBvbiBhIGNhdGVnb3J5IHRvIGdvIHRvIGl0LiAgVHlw ZSBcInFcIiB0byBxdWl0LiIpKSkpCiAgCiAgOzs7IyMjYXV0b2xvYWQKICAoZGVmdW4gdG9kby1h ZGQtaXRlbS1ub24taW50ZXJhY3RpdmVseSAobmV3LWl0ZW0gY2F0ZWdvcnkpCiAgICAiSW5zZXJ0 IE5FVy1JVEVNIGluIFRPRE8gbGlzdCBhcyBhIG5ldyBlbnRyeSBpbiBDQVRFR09SWS4iCiAgICAo c2F2ZS1leGN1cnNpb24KICAgICAgKHRvZG8tc2hvdykpCiEgICAoaWYgKHN0cmluZz0gIiIgY2F0 ZWdvcnkpCiEgICAgICAgKHNldHEgY2F0ZWdvcnkgKG50aCB0b2RvLWNhdGVnb3J5LW51bWJlciB0 b2RvLWNhdGVnb3JpZXMpKSkKISAgIChsZXQgKChjYXQtZXhpc3RzIChtZW1iZXIgY2F0ZWdvcnkg dG9kby1jYXRlZ29yaWVzKSkKISAJKGJ1ZmZlci1yZWFkLW9ubHkgbmlsKSkKISAgICAgKHNldHEg dG9kby1jYXRlZ29yeS1udW1iZXIKISAJICAoaWYgY2F0LWV4aXN0cwohIAkgICAgICAoLSAobGVu Z3RoIHRvZG8tY2F0ZWdvcmllcykgKGxlbmd0aCBjYXQtZXhpc3RzKSkKISAJICAgICh0b2RvLWFk ZC1jYXRlZ29yeSBjYXRlZ29yeSkpKQohICAgICA7OyAodG9kby1zaG93KSBpcyBuZWVkZWQgaGVy ZSBmb3IgdG9kby1pdGVtLW1vdmUsIGJ1dCB3aXRoIGEgbmV3CiEgICAgIDs7IGNhdGVnb3J5IHBy b2R1Y2VzIGEgYGxldDogV3JvbmcgdHlwZSBhcmd1bWVudDogaW50ZWdlcnAsICJeSiInIAohICAg ICA7OyBlcnJvciwgdGhlIHNvdXJjZSBvZiB3aGljaCBjdXJyZW50bHkgZXNjYXBlcyBtZS4KISAg ICAgKHVubGVzcyAoZXEgKHBvaW50LW1pbikgKHBvaW50LW1heCkpCiEgICAgICAgKHRvZG8tc2hv dykpCiEgICAgIDs7IG5lZWQgdG8gbWFrZSBzZXBhcmF0b3IgIlxuIiB0byBjYWxjdWxhdGUgcHJp b3JpdHksIAohICAgICA7OyBzbyBzYXZlIGN1cnJlbnQgc2VwYXJhdG9yIGZvciBsYXRlciByZWlu c2VydGlvbgohICAgICAobGV0ICgob2xkLXNlcCAoc2F2ZS1leGN1cnNpb24gCiEgCQkgICAgIChn b3RvLWNoYXIgKHBvaW50LW1pbikpCiEgCQkgICAgIChpZiAocmUtc2VhcmNoLWZvcndhcmQgCiEg CQkJICAoY29uY2F0ICJcXChcblteQS1CYS16MC05XSpcXCkiIAohIAkJCQkgIChyZWdleHAtcXVv dGUgdG9kby1wcmVmaXgpKSBuaWwgdCkKISAJCQkgKG1hdGNoLXN0cmluZyAxKQohIAkJICAgICAg ICJcbiIpKSkpCiEgICAgICAgKHVubGVzcyAoZXEgKHBvaW50LW1pbikgKHBvaW50LW1heCkpCiEg CShmdW5jYWxsICd0b2RvLWNoYW5nZS1pdGVtLXNlcC1pbi1jYXQgIlxuIikpCiEgICAgICAgOzsg SWYgdGhlIGNhdGVnb3J5IGlzIHN0aWxsIGVtcHR5LCBqdXN0IGluc2VydCB0aGUgbmV3IGl0ZW0u Li4KISAgICAgICAoaWYgKGVxIDAgKHRvZG8tY291bnQtaXRlbXMpKQohIAkgIChwcm9nbgohIAkg ICAgKGluc2VydCBuZXctaXRlbSB0b2RvLWl0ZW0tc2VwYXJhdG9yKQohIAkgICAgOzsgV2l0aG91 dCB0aGUgZm9sbG93aW5nLCBgV3JvbmcgdHlwZSBhcmd1bWVudCcgZXJyb3JzIHJlc3VsdCwKISAg ICAgICAgICAgICA7OyBmb3IgcmVhc29ucyBJIGN1cnJlbnRseSBkb24ndCB1bmRlcnN0YW5kLiAg KEhvd2V2ZXIsIGl0CiEgCSAgICA7OyBhbHNvIGNhdXNlcyB0b2RvLWl0ZW0tbW92ZSB0byBmYWls IGlmIGl0IGlzIHVzZWQgdG8gY3JlYXRlCiEgCSAgICA7OyBhIG5ldyBjYXRlZ29yeSwgc28gZm9y IG5vdyBJJ3ZlIGhhZCB0byBleGNsdWRlIHRoYXQKISAJICAgIDs7IHBvc3NpYmlsaXR5IGZyb20g dG9kby1pdGVtLW1vdmUuKQohIAkgICAgKHRvZG8tanVtcC10by1jYXRlZ29yeS1ub25pbnRlcmFj dGl2ZWx5IGNhdGVnb3J5KSkKISAJOzsgLi4ub3RoZXJ3aXNlLCBjYWxjdWxhdGUgdGhlIG5ldyBp dGVtJ3MgcHJpb3JpdHkgYW5kIHRoZW4gaW5zZXJ0IGl0LgohIAkoc2V0cSB0b2RvLXByZXZpb3Vz LWxpbmUgMCkKISAJKGxldCAoKHRvcCAxKQohIAkgICAgICAoYm90dG9tICgxKyAodG9kby1jb3Vu dC1pdGVtcykpKQohIAkgICAgICAobGFzdCAxKSkKISAJICAod2hpbGUgKD4gKC0gYm90dG9tIHRv cCkgdG9kby1pbnNlcnQtdGhyZXNob2xkKQohIAkgICAgKGxldCogKChjdXJyZW50ICgvICgrIHRv cCBib3R0b20pIDIpKQohIAkJICAgKGFuc3dlciAoaWYgKDwgY3VycmVudCBib3R0b20pCiEgCQkJ ICAgICAgICh0b2RvLW1vcmUtaW1wb3J0YW50LXAgY3VycmVudCkgbmlsKSkpCiEgCSAgICAgIChp ZiBhbnN3ZXIKISAJCSAgKHNldHEgYm90dG9tIGN1cnJlbnQpCiEgCQkoc2V0cSB0b3AgKDErIGN1 cnJlbnQpKSkKISAJICAgICAgKHNldHEgbGFzdCBjdXJyZW50KSkpCiEgCSAgKGlmICh0b2RvLW1v cmUtaW1wb3J0YW50LXAgbGFzdCkKISAJICAgICAgKGluc2VydCBuZXctaXRlbSB0b2RvLWl0ZW0t c2VwYXJhdG9yKQohIAkgICAgKGdvdG8tY2hhciAoMSsgKHRvZG8taXRlbS1lbmQpKSkKISAJICAg IChpbnNlcnQgbmV3LWl0ZW0gdG9kby1pdGVtLXNlcGFyYXRvcikpKSkKISAgICAgICAodG9kby1i YWNrd2FyZC1pdGVtKQohICAgICAgIChmdW5jYWxsICd0b2RvLWNoYW5nZS1pdGVtLXNlcC1pbi1j YXQgb2xkLXNlcCkKISA7CSh0b2RvLXNhdmUpCiEgICAgICAgKG1lc3NhZ2UgIiIpKSkpCiEgOzsg dG9kby1zaG93IHB1dHMgY3Vyc29yIGF0IChwb2ludC1taW4pIHJhdGhlciB0aGFuIGxlYXZpbmcg aXQgYXQgdGhlCiEgOzsgYmVnaW5uaW5nIG9mIHRoZSBuZXcgaXRlbQohIDsJKHRvZG8tc2hvdykp KSkKICAKICA7OzsjIyNhdXRvbG9hZAogIChkZWZ1biB0b2RvLWluc2VydC1pdGVtIChhcmcpCioq KioqKioqKioqKioqKgoqKiogNTk3LDYzMyAqKioqCiAgV2l0aCBhIHByZWZpeCBhcmd1bWVudCBz b2xpY2l0IHRoZSBjYXRlZ29yeSwgb3RoZXJ3aXNlIHVzZSB0aGUgY3VycmVudAogIGNhdGVnb3J5 LiIKICAgIChpbnRlcmFjdGl2ZSAiUCIpCiEgICAoc2F2ZS1leGN1cnNpb24KISAgICAgKGlmIChu b3QgKHN0cmluZy1lcXVhbCBtb2RlLW5hbWUgIlRPRE8iKSkgKHRvZG8tc2hvdykpCiEgICAgIChs ZXQqICgobmV3LWl0ZW0gKGNvbmNhdCB0b2RvLXByZWZpeCAiICIKISAJCQkgICAgIChyZWFkLWZy b20tbWluaWJ1ZmZlcgohIAkJCSAgICAgICJOZXcgVE9ETyBlbnRyeTogIgohIAkJCSAgICAgIChp ZiB0b2RvLWVudHJ5LXByZWZpeC1mdW5jdGlvbgohIAkJCQkgIChmdW5jYWxsIHRvZG8tZW50cnkt cHJlZml4LWZ1bmN0aW9uKSkpKSkKISAJICAgKGNhdGVnb3JpZXMgdG9kby1jYXRlZ29yaWVzKQoh IAkgICAoaGlzdG9yeSAoY29ucyAnY2F0ZWdvcmllcyAoMSsgdG9kby1jYXRlZ29yeS1udW1iZXIp KSkKISAJICAgKGN1cnJlbnQtY2F0ZWdvcnkgKG50aCB0b2RvLWNhdGVnb3J5LW51bWJlciB0b2Rv LWNhdGVnb3JpZXMpKQohIAkgICAoY2F0ZWdvcnkKISAJICAgIChpZiBhcmcKISAJCWN1cnJlbnQt Y2F0ZWdvcnkKICAJICAgICAgKGNvbXBsZXRpbmctcmVhZCAoY29uY2F0ICJDYXRlZ29yeSBbIiBj dXJyZW50LWNhdGVnb3J5ICJdOiAiKQogIAkJCSAgICAgICAodG9kby1jYXRlZ29yeS1hbGlzdCkg bmlsIG5pbCBuaWwKISAJCQkgICAgICAgaGlzdG9yeSBjdXJyZW50LWNhdGVnb3J5KSkpKQohICAg ICAgICh0b2RvLWFkZC1pdGVtLW5vbi1pbnRlcmFjdGl2ZWx5IG5ldy1pdGVtIGNhdGVnb3J5KSkp KQohIAogIChkZWZhbGlhcyAndG9kby1jbWQtaW5zdCAndG9kby1pbnNlcnQtaXRlbSkKICAKICAo ZGVmdW4gdG9kby1pbnNlcnQtaXRlbS1oZXJlICgpCiAgICAiSW5zZXJ0IG5ldyBUT0RPIGxpc3Qg ZW50cnkgdW5kZXIgdGhlIGN1cnNvci4iCiEgICAoaW50ZXJhY3RpdmUgIiIpCiEgICAoc2F2ZS1l eGN1cnNpb24KISAgICAgKGlmIChub3QgKHN0cmluZy1lcXVhbCBtb2RlLW5hbWUgIlRPRE8iKSkg KHRvZG8tc2hvdykpCiEgICAgIChsZXQqICgobmV3LWl0ZW0gKGNvbmNhdCB0b2RvLXByZWZpeCAi ICIKISAJCQkgICAgIChyZWFkLWZyb20tbWluaWJ1ZmZlcgohIAkJCSAgICAgICJOZXcgVE9ETyBl bnRyeTogIgohIAkJCSAgICAgIChpZiB0b2RvLWVudHJ5LXByZWZpeC1mdW5jdGlvbgohIAkJCQkg IChmdW5jYWxsIHRvZG8tZW50cnktcHJlZml4LWZ1bmN0aW9uKSkpKSkpCiEgICAgICAgKGluc2Vy dCAoY29uY2F0IG5ldy1pdGVtICJcbiIpKSkpKQogIAogIChkZWZ1biB0b2RvLW1vcmUtaW1wb3J0 YW50LXAgKGxpbmUpCiAgICAiQXNrIHdoZXRoZXIgZW50cnkgaXMgbW9yZSBpbXBvcnRhbnQgdGhh biB0aGUgb25lIGF0IExJTkUuIgotLS0gOTEyLDk3MiAtLS0tCiAgV2l0aCBhIHByZWZpeCBhcmd1 bWVudCBzb2xpY2l0IHRoZSBjYXRlZ29yeSwgb3RoZXJ3aXNlIHVzZSB0aGUgY3VycmVudAogIGNh dGVnb3J5LiIKICAgIChpbnRlcmFjdGl2ZSAiUCIpCiEgICAoaWYgKG5vdCAoc3RyaW5nLWVxdWFs IG1vZGUtbmFtZSAiVE9ETyIpKSAodG9kby1zaG93KSkKISAgIChsZXQqICgobmV3LWl0ZW0gKGNv bmNhdCB0b2RvLXByZWZpeCAiICIKISAJCQkgICAocmVhZC1mcm9tLW1pbmlidWZmZXIKISAJCQkg ICAgIk5ldyBUT0RPIGVudHJ5OiAiCiEgCQkJICAgIChpZiB0b2RvLWVudHJ5LXByZWZpeC1mdW5j dGlvbgohIAkJCQkoZnVuY2FsbCB0b2RvLWVudHJ5LXByZWZpeC1mdW5jdGlvbikpKSkpCiEgCSAo Y2F0ZWdvcmllcyB0b2RvLWNhdGVnb3JpZXMpCiEgCSAoaGlzdG9yeSAoY29ucyAnY2F0ZWdvcmll cyAoMSsgdG9kby1jYXRlZ29yeS1udW1iZXIpKSkKISAJIChjdXJyZW50LWNhdGVnb3J5IChudGgg dG9kby1jYXRlZ29yeS1udW1iZXIgdG9kby1jYXRlZ29yaWVzKSkKISAJIChjYXRlZ29yeQohIAkg IChpZiBhcmcKICAJICAgICAgKGNvbXBsZXRpbmctcmVhZCAoY29uY2F0ICJDYXRlZ29yeSBbIiBj dXJyZW50LWNhdGVnb3J5ICJdOiAiKQogIAkJCSAgICAgICAodG9kby1jYXRlZ29yeS1hbGlzdCkg bmlsIG5pbCBuaWwKISAJCQkgICAgICAgaGlzdG9yeSBjdXJyZW50LWNhdGVnb3J5KQohIAkgICAg Y3VycmVudC1jYXRlZ29yeSkpKQohICAgICAodG9kby1hZGQtaXRlbS1ub24taW50ZXJhY3RpdmVs eSBuZXctaXRlbSBjYXRlZ29yeSkpKQogIChkZWZhbGlhcyAndG9kby1jbWQtaW5zdCAndG9kby1p bnNlcnQtaXRlbSkKICAKICAoZGVmdW4gdG9kby1pbnNlcnQtaXRlbS1oZXJlICgpCiAgICAiSW5z ZXJ0IG5ldyBUT0RPIGxpc3QgZW50cnkgdW5kZXIgdGhlIGN1cnNvci4iCiEgICAoaW50ZXJhY3Rp dmUpCiEgICAoaWYgKG5vdCAoc3RyaW5nLWVxdWFsIG1vZGUtbmFtZSAiVE9ETyIpKSAodG9kby1z aG93KSkKISAgIChsZXQqICgobmV3LWl0ZW0gKGNvbmNhdCB0b2RvLXByZWZpeCAiICIKISAJCQkg ICAocmVhZC1mcm9tLW1pbmlidWZmZXIKISAJCQkgICAgIk5ldyBUT0RPIGVudHJ5OiAiCiEgCQkJ ICAgIChpZiB0b2RvLWVudHJ5LXByZWZpeC1mdW5jdGlvbgohIAkJCQkoZnVuY2FsbCB0b2RvLWVu dHJ5LXByZWZpeC1mdW5jdGlvbikpKSkpCiEgCSAoYnVmZmVyLXJlYWQtb25seSBuaWwpKQohICAg ICA7OyBJZiB0aGUgY3Vyc29yIGlzIG9uIHRoZSBmaXJzdCBpdGVtIGluIHRoZSBjYXRlZ29yeSwg aW5zZXJ0IHRoaXMKISAgICAgOzsgaXRlbSBpbW1lZGlhdGVseSBhYm92ZSwgbWFraW5nIGl0IHRo ZSBuZXcgZmlyc3QgaXRlbSwgYW5kIGFkZAohICAgICA7OyBhbiBpdGVtIHNlcGFyYXRvciBiZWxv dyBpdDsgaWYgdGhlIGN1cnNvciBpcyBvbiBhbnkgb3RoZXIgaXRlbSwgCiEgICAgIDs7IGluc2Vy dCB0aGlzIGl0ZW0gZGlyZWN0bHkgYmVsb3csIHB1dHRpbmcgYSBzZXBhcmF0b3IgaW4gYmV0d2Vl bjsgCiEgICAgIDs7IGlmIHRoZSBjdXJzb3IgaXMgYmV0d2VlbiB0d28gaXRlbXMgKGkuZS4gb24g YSBzZXBhcmF0b3Igc3RyaW5nKSwgCiEgICAgIDs7IGluc2VydCB0aGlzIGl0ZW0gaW4gYmV0d2Vl bi4gIFB1dHMgdGhlIGN1cnNvciBhdCB0aGUgYmVnaW5uaW5nIG9mCiEgICAgIDs7IHRoZSBuZXcg aXRlbS4KISAgICAgKGNvbmQgKChlcSAocG9pbnQtbWluKSAocG9pbnQtbWF4KSkgOyBjYXRlZ29y eSBoYXMgbm8gdW5maWxlZCBpdGVtcwohIAkgICAoaW5zZXJ0IChjb25jYXQgbmV3LWl0ZW0gdG9k by1pdGVtLXNlcGFyYXRvcikpKQohIAkgICgodG9kby1maXJzdC1pbi1jYXRlZ29yeS1wKQohIAkg ICAoZ290by1jaGFyIChwb2ludC1taW4pKQohIAkgICAoaW5zZXJ0IChjb25jYXQgbmV3LWl0ZW0g dG9kby1pdGVtLXNlcGFyYXRvcikpCiEgCSAgIChnb3RvLWNoYXIgKHBvaW50LW1pbikpKQohIAkg ICgoYW5kICh0b2RvLWl0ZW0tc3RyaW5nLXApIChub3QgKHRvZG8tbGFzdC1pbi1jYXRlZ29yeS1w KSkpCiEgCSAgIChnb3RvLWNoYXIgKHRvZG8taXRlbS1lbmQpKQohIAkgICAoaW5zZXJ0IChjb25j YXQgdG9kby1pdGVtLXNlcGFyYXRvciBuZXctaXRlbSkpKQohIAkgICgoYW5kICh0b2RvLWl0ZW0t c2VwYXJhdG9yLXApIChub3QgKGVvYnApKSkKISAJICAgKHJlLXNlYXJjaC1mb3J3YXJkIChyZWdl eHAtcXVvdGUgdG9kby1wcmVmaXgpIG5pbCAxIG5pbCkKISAJICAgKGdvdG8tY2hhciAoMS0gKG1h dGNoLWJlZ2lubmluZyAwKSkpCiEgCSAgIChpbnNlcnQgKGNvbmNhdCAiXG4iIG5ldy1pdGVtIHRv ZG8taXRlbS1zZXBhcmF0b3IpKQohIAkgICAoZGVsZXRlLWJhY2t3YXJkLWNoYXIgMSkpCiEgCSAg KChvciAodG9kby1sYXN0LWluLWNhdGVnb3J5LXApIChlb2JwKSkKISAJICAgKGdvdG8tY2hhciAo cG9pbnQtbWF4KSkKISAJICAgKGlmIChsb29raW5nLWF0ICJeJCIpIChkZWxldGUtYmFja3dhcmQt Y2hhciAxKSkKISAJICAgKGZvcndhcmQtbGluZSkKISAJICAgKGluc2VydCAoY29uY2F0IHRvZG8t aXRlbS1zZXBhcmF0b3IgbmV3LWl0ZW0gIlxuIikpKSkpCiEgICAoZ290by1jaGFyICh0b2RvLWl0 ZW0tc3RhcnQpKSkKICAKICAoZGVmdW4gdG9kby1tb3JlLWltcG9ydGFudC1wIChsaW5lKQogICAg IkFzayB3aGV0aGVyIGVudHJ5IGlzIG1vcmUgaW1wb3J0YW50IHRoYW4gdGhlIG9uZSBhdCBMSU5F LiIKKioqKioqKioqKioqKioqCioqKiA2MzUsNjQxICoqKioKICAgICAgICAocHJvZ24KICAgICAg ICAgIChzZXRxIHRvZG8tcHJldmlvdXMtbGluZSBsaW5lKQogICAgICAgICAgKGdvdG8tY2hhciAo cG9pbnQtbWluKSkKISAgICAgICAgIChmb3J3YXJkLWxpbmUgKDEtIHRvZG8tcHJldmlvdXMtbGlu ZSkpCiAgICAgICAgICAobGV0ICgoaXRlbSAodG9kby1pdGVtLXN0cmluZy1zdGFydCkpKQogICAg ICAgICAgICAoc2V0cSB0b2RvLXByZXZpb3VzLWFuc3dlcgogICAgICAgICAgICAgICAgICAoeS1v ci1uLXAgKGNvbmNhdCAiTW9yZSBpbXBvcnRhbnQgdGhhbiAnIiBpdGVtICInPyAiKSkpKSkpCi0t LSA5NzQsOTgwIC0tLS0KICAgICAgICAocHJvZ24KICAgICAgICAgIChzZXRxIHRvZG8tcHJldmlv dXMtbGluZSBsaW5lKQogICAgICAgICAgKGdvdG8tY2hhciAocG9pbnQtbWluKSkKISAJKHRvZG8t Zm9yd2FyZC1pdGVtICgxLSB0b2RvLXByZXZpb3VzLWxpbmUpKQogICAgICAgICAgKGxldCAoKGl0 ZW0gKHRvZG8taXRlbS1zdHJpbmctc3RhcnQpKSkKICAgICAgICAgICAgKHNldHEgdG9kby1wcmV2 aW91cy1hbnN3ZXIKICAgICAgICAgICAgICAgICAgKHktb3Itbi1wIChjb25jYXQgIk1vcmUgaW1w b3J0YW50IHRoYW4gJyIgaXRlbSAiJz8gIikpKSkpKQoqKioqKioqKioqKioqKioKKioqIDY0NSw3 MTcgKioqKgogIChkZWZ1biB0b2RvLWRlbGV0ZS1pdGVtICgpCiAgICAiRGVsZXRlIGN1cnJlbnQg VE9ETyBsaXN0IGVudHJ5LiIKICAgIChpbnRlcmFjdGl2ZSkKISAgIChpZiAoPiAoY291bnQtbGlu ZXMgKHBvaW50LW1pbikgKHBvaW50LW1heCkpIDApCiAgICAgICAgKGxldCogKCh0b2RvLWVudHJ5 ICh0b2RvLWl0ZW0tc3RyaW5nLXN0YXJ0KSkKISAgICAgICAgICAgICAgKHRvZG8tYW5zd2VyICh5 LW9yLW4tcCAoY29uY2F0ICJQZXJtYW5lbnRseSByZW1vdmUgJyIKISAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvZG8tZW50cnkgIic/ICIpKSkpCiEgICAgICAg ICAoaWYgdG9kby1hbnN3ZXIKISAgICAgICAgICAgICAocHJvZ24KISAgICAgICAgICAgICAgICh0 b2RvLXJlbW92ZS1pdGVtKQohICAgICAgICAgICAgICAgKHRvZG8tYmFja3dhcmQtaXRlbSkpKQoh ICAgICAgICAgKG1lc3NhZ2UgIiIpKQogICAgICAoZXJyb3IgIk5vIFRPRE8gbGlzdCBlbnRyeSB0 byBkZWxldGUiKSkpCiAgKGRlZmFsaWFzICd0b2RvLWNtZC1raWxsICd0b2RvLWRlbGV0ZS1pdGVt KQogIAogIChkZWZ1biB0b2RvLXJhaXNlLWl0ZW0gKCkKICAgICJSYWlzZSBwcmlvcml0eSBvZiBj dXJyZW50IGVudHJ5LiIKICAgIChpbnRlcmFjdGl2ZSkKISAgIChpZiAoPiAoY291bnQtbGluZXMg KHBvaW50LW1pbikgKHBvaW50KSkgMCkKISAgICAgICAobGV0ICgoaXRlbSAodG9kby1pdGVtLXN0 cmluZykpKQohICAgICAgICAgKHRvZG8tcmVtb3ZlLWl0ZW0pCiEgICAgICAgICAodG9kby1iYWNr d2FyZC1pdGVtKQohICAgICAgICAgKHNhdmUtZXhjdXJzaW9uCiEgICAgICAgICAgIChpbnNlcnQg aXRlbSAiXG4iKSkKISAgICAgICAgIChtZXNzYWdlICIiKSkKISAgICAgKGVycm9yICJObyBUT0RP IGxpc3QgZW50cnkgdG8gcmFpc2UiKSkpCiAgKGRlZmFsaWFzICd0b2RvLWNtZC1yYWlzICd0b2Rv LXJhaXNlLWl0ZW0pCiAgCiAgKGRlZnVuIHRvZG8tbG93ZXItaXRlbSAoKQogICAgIkxvd2VyIHBy aW9yaXR5IG9mIGN1cnJlbnQgZW50cnkuIgogICAgKGludGVyYWN0aXZlKQohICAgKGlmICg+IChj b3VudC1saW5lcyAocG9pbnQpIChwb2ludC1tYXgpKSAxKQogICAgICAgIDs7IEFzc3VtZSB0aGVy ZSBpcyBhIGZpbmFsIG5ld2xpbmUKISAgICAgICAobGV0ICgoaXRlbSAodG9kby1pdGVtLXN0cmlu ZykpKQogICAgICAgICAgKHRvZG8tcmVtb3ZlLWl0ZW0pCiEgICAgICAgICAodG9kby1mb3J3YXJk LWl0ZW0pCiEgICAgICAgICAoc2F2ZS1leGN1cnNpb24KISAgICAgICAgICAgKGluc2VydCBpdGVt ICJcbiIpKQogICAgICAgICAgKG1lc3NhZ2UgIiIpKQogICAgICAoZXJyb3IgIk5vIFRPRE8gbGlz dCBlbnRyeSB0byBsb3dlciIpKSkKICAoZGVmYWxpYXMgJ3RvZG8tY21kLWxvd3IgJ3RvZG8tbG93 ZXItaXRlbSkKICAKISAoZGVmdW4gdG9kby1maWxlLWl0ZW0gKCZvcHRpb25hbCBjb21tZW50KQoh ICAgIkZpbGUgdGhlIGN1cnJlbnQgVE9ETyBsaXN0IGVudHJ5IGF3YXksIGFubm90YXRlZCB3aXRo IGFuIG9wdGlvbmFsIENPTU1FTlQuIgohICAgKGludGVyYWN0aXZlICJzQ29tbWVudDogIikKICAg IChvciAoPiAoY291bnQtbGluZXMgKHBvaW50LW1pbikgKHBvaW50LW1heCkpIDApCiAgICAgICAg KGVycm9yICJObyBUT0RPIGxpc3QgZW50cnkgdG8gZmlsZSBhd2F5IikpCiEgICAobGV0ICgodGlt ZS1zdGFtcC1mb3JtYXQgdG9kby10aW1lLXN0cmluZy1mb3JtYXQpKQohICAgICAoaWYgKGFuZCBj b21tZW50ICg+IChsZW5ndGggY29tbWVudCkgMCkpCiAgCShwcm9nbgohIAkgIChnb3RvLWNoYXIg KHRvZG8taXRlbS1lbmQpKQohIAkgIChpbnNlcnQKISAJICAgKGlmIChzYXZlLWV4Y3Vyc2lvbiAo YmVnaW5uaW5nLW9mLWxpbmUpCiEgCQkJICAgICAgIChsb29raW5nLWF0IChyZWdleHAtcXVvdGUg dG9kby1wcmVmaXgpKSkKISAJICAgICAgICIgIgohIAkgICAgICJcblx0IikKISAJICAgIigiIGNv bW1lbnQgIikiKSkpCiAgICAgIChnb3RvLWNoYXIgKHRvZG8taXRlbS1lbmQpKQohICAgICAoaW5z ZXJ0ICIgWyIgKG50aCB0b2RvLWNhdGVnb3J5LW51bWJlciB0b2RvLWNhdGVnb3JpZXMpICJdIikK ISAgICAgKGdvdG8tY2hhciAodG9kby1pdGVtLXN0YXJ0KSkKISAgICAgKGxldCAoKHRlbXAtcG9p bnQgKHBvaW50KSkpCiEgICAgICAgKGlmIChsb29raW5nLWF0IChyZWdleHAtcXVvdGUgdG9kby1w cmVmaXgpKQohIAkgIChyZXBsYWNlLW1hdGNoICh0aW1lLXN0YW1wLXN0cmluZykpCiEgCTs7IFN0 YW5kYXJkIHByZWZpeCAtPiB0aW1lc3RhbXAKISAJOzsgRWxzZSBwcmVmaXggbm9uLXN0YW5kYXJk IGl0ZW0gc3RhcnQgd2l0aCB0aW1lc3RhbXAKISAJKGluc2VydCAodGltZS1zdGFtcC1zdHJpbmcp KSkKISAgICAgICAoYXBwZW5kLXRvLWZpbGUgdGVtcC1wb2ludCAoMSsgKHRvZG8taXRlbS1lbmQp KSB0b2RvLWZpbGUtZG9uZSkKISAgICAgICAoZGVsZXRlLXJlZ2lvbiB0ZW1wLXBvaW50ICgxKyAo dG9kby1pdGVtLWVuZCkpKSkKISAgICAgKHRvZG8tYmFja3dhcmQtaXRlbSkKISAgICAgKG1lc3Nh Z2UgIiIpKSkKICAKICA7OyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAKLS0tIDk4NCwxMzM2IC0tLS0K ICAoZGVmdW4gdG9kby1kZWxldGUtaXRlbSAoKQogICAgIkRlbGV0ZSBjdXJyZW50IFRPRE8gbGlz dCBlbnRyeS4iCiAgICAoaW50ZXJhY3RpdmUpCiEgICAoaWYgKGFuZCAodG9kby1pdGVtLXN0cmlu Zy1wKQohIAkgICAoPiAoY291bnQtbGluZXMgKHBvaW50LW1pbikgKHBvaW50LW1heCkpIDApKQog ICAgICAgIChsZXQqICgodG9kby1lbnRyeSAodG9kby1pdGVtLXN0cmluZy1zdGFydCkpCiEgCSAg ICAgKHRvZG8tYW5zd2VyICh5LW9yLW4tcCAoY29uY2F0ICJQZXJtYW5lbnRseSByZW1vdmUgJyIK ISAJCQkJCSAgICB0b2RvLWVudHJ5ICInPyAiKSkpCiEgCSAgICAgKGJ1ZmZlci1yZWFkLW9ubHkg bmlsKSkKISAJKGlmIHRvZG8tYW5zd2VyCiEgCSAgICAoaWYgKHRvZG8tbGFzdC1pbi1jYXRlZ29y eS1wKQohIAkJKHByb2duCiEgCQkgICh0b2RvLXJlbW92ZS1pdGVtKQohIAkJICAoaWYgKHNlYXJj aC1iYWNrd2FyZCB0b2RvLWl0ZW0tc2VwYXJhdG9yIChwb2ludC1taW4pIHQpCiEgCQkgICAgICAo cHJvZ24KISAJCQkoZGVsZXRlLXJlZ2lvbiAocG9pbnQpIChwb2ludC1tYXgpKQohIAkJCShuZXds aW5lKQohIAkJCSh0b2RvLWJhY2t3YXJkLWl0ZW0pKSkpCiEgCSAgICAgICh0b2RvLXJlbW92ZS1p dGVtKSkpCiEgCTs7IHVuY29tbWVudCB0byBtYWtlIHRoZSBjdXJzb3IgbW92ZSB0byB0aGUgaXRl bSBpbW1lZGlhdGVseQohIAk7OyBwcmVjZWRpbmcgdGhlIGRlbGV0ZWQgaXRlbQohIDsJKHRvZG8t YmFja3dhcmQtaXRlbSkpKQohIAkobWVzc2FnZSAiIikpCiAgICAgIChlcnJvciAiTm8gVE9ETyBs aXN0IGVudHJ5IHRvIGRlbGV0ZSIpKSkKICAoZGVmYWxpYXMgJ3RvZG8tY21kLWtpbGwgJ3RvZG8t ZGVsZXRlLWl0ZW0pCiAgCiAgKGRlZnVuIHRvZG8tcmFpc2UtaXRlbSAoKQogICAgIlJhaXNlIHBy aW9yaXR5IG9mIGN1cnJlbnQgZW50cnkuIgogICAgKGludGVyYWN0aXZlKQohICAgKGlmIChhbmQg KD4gKGNvdW50LWxpbmVzIChwb2ludC1taW4pIChwb2ludCkpIDApCiEgCSAgIChhbmQgKHRvZG8t aXRlbS1zdHJpbmctcCkgKG5vdCAoZW9icCkpKQohIAkgICAobm90ICh0b2RvLWZpcnN0LWluLWNh dGVnb3J5LXApKSkKISAgICAgICAobGV0ICgoaXRlbSAodG9kby1pdGVtLXN0cmluZykpCiEgCSAg ICAoYnVmZmVyLXJlYWQtb25seSBuaWwpKQohIAkodG9kby1yZW1vdmUtaXRlbSkKISAJKHRvZG8t YmFja3dhcmQtaXRlbSkKISAJKGlmICh0b2RvLWxhc3QtaW4tY2F0ZWdvcnktcCkKISAJICAgIChz YXZlLWV4Y3Vyc2lvbgohIAkgICAgICAoZ290by1jaGFyICh0b2RvLWl0ZW0tZW5kKSkKISAJICAg ICAgKG5ld2xpbmUpCiEgCSAgICAgIDs7IGRvbid0IGxlYXZlIGl0ZW0gc2VwYXJhdG9yIGRhbmds aW5nIGFmdGVyIHRoZSBsYXN0IGl0ZW0KISAJICAgICAgKGxldCAoKGJvdW5kIChzYXZlLWV4Y3Vy c2lvbiAoc2VhcmNoLWJhY2t3YXJkIHRvZG8tcHJlZml4KQohIAkJCQkJICAgKG1hdGNoLWVuZCAw KSkpKQohIAkJKGlmIChzZWFyY2gtYmFja3dhcmQgdG9kby1pdGVtLXNlcGFyYXRvciBib3VuZCB0 KQohIAkJICAgIG5pbCkKISAJCShkZWxldGUtcmVnaW9uIChwb2ludCkgKHBvaW50LW1heCkpCiEg CQkobmV3bGluZSkpKSkKISAJICAoc2F2ZS1leGN1cnNpb24gKGluc2VydCBpdGVtIHRvZG8taXRl bS1zZXBhcmF0b3IpKQohIAkgIChtZXNzYWdlICIiKSkKISAgICAgICAoZXJyb3IgIk5vIFRPRE8g bGlzdCBlbnRyeSB0byByYWlzZSIpKSkKICAoZGVmYWxpYXMgJ3RvZG8tY21kLXJhaXMgJ3RvZG8t cmFpc2UtaXRlbSkKICAKICAoZGVmdW4gdG9kby1sb3dlci1pdGVtICgpCiAgICAiTG93ZXIgcHJp b3JpdHkgb2YgY3VycmVudCBlbnRyeS4iCiAgICAoaW50ZXJhY3RpdmUpCiEgICAoaWYgKGFuZCAo PiAoY291bnQtbGluZXMgKHBvaW50KSAocG9pbnQtbWF4KSkgMSkKISAJICAgKHRvZG8taXRlbS1z dHJpbmctcCkgKG5vdCAodG9kby1sYXN0LWluLWNhdGVnb3J5LXApKSkKICAgICAgICA7OyBBc3N1 bWUgdGhlcmUgaXMgYSBmaW5hbCBuZXdsaW5lCiEgICAgICAgKGxldCAoKGl0ZW0gKHRvZG8taXRl bS1zdHJpbmcpKQohIAkgICAgKGJ1ZmZlci1yZWFkLW9ubHkgbmlsKSkKICAgICAgICAgICh0b2Rv LXJlbW92ZS1pdGVtKQohIAkoaWYgKHRvZG8tbGFzdC1pbi1jYXRlZ29yeS1wKSAKISAJICAgIChn b3RvLWNoYXIgKHBvaW50LW1heCkpIAohIAkgICh0b2RvLWZvcndhcmQtaXRlbSkpCiEgCShpZiAo ZW9icCkgKHByb2duIChkZWxldGUtYmFja3dhcmQtY2hhciAxKQohIAkJCSAgKGluc2VydCB0b2Rv LWl0ZW0tc2VwYXJhdG9yIGl0ZW0pKQohIAkgIChpbnNlcnQgaXRlbSB0b2RvLWl0ZW0tc2VwYXJh dG9yKQohIAkgIChyZS1zZWFyY2gtYmFja3dhcmQgKHJlZ2V4cC1xdW90ZSB0b2RvLXByZWZpeCkp KQohIAkoaWYgKGVxdWFsIChwb2ludCkgKHBvaW50LW1heCkpCiEgCSAgICAocHJvZ24gKGF1dG8t ZmlsbC1tb2RlIG5pbCkgKG5ld2xpbmUpIChmb3J3YXJkLWxpbmUgLTEpCiEgCQkgICAoYXV0by1m aWxsLW1vZGUgdCkpKQogICAgICAgICAgKG1lc3NhZ2UgIiIpKQogICAgICAoZXJyb3IgIk5vIFRP RE8gbGlzdCBlbnRyeSB0byBsb3dlciIpKSkKICAoZGVmYWxpYXMgJ3RvZG8tY21kLWxvd3IgJ3Rv ZG8tbG93ZXItaXRlbSkKICAKISAoZGVmdW4gdG9kby1maWxlLWl0ZW0gKCkKISAgICJGaWxlIHRo ZSBjdXJyZW50IFRPRE8gbGlzdCBlbnRyeSBhd2F5LCBhbm5vdGF0ZWQgd2l0aCBhbiBvcHRpb25h bCBjb21tZW50LiIKISAgIChpbnRlcmFjdGl2ZSkKICAgIChvciAoPiAoY291bnQtbGluZXMgKHBv aW50LW1pbikgKHBvaW50LW1heCkpIDApCiAgICAgICAgKGVycm9yICJObyBUT0RPIGxpc3QgZW50 cnkgdG8gZmlsZSBhd2F5IikpCiEgICAoaWYgKHRvZG8taXRlbS1zdHJpbmctcCkKISAgICAgICAo aWYgKHktb3Itbi1wICJQdXQgdGhpcyBpdGVtIGluIHRoZSBkb25lIGl0ZW1zIGZpbGU/ICIpCiEg CSAgKGxldCAoKHRpbWUtc3RhbXAtZm9ybWF0IHRvZG8tdGltZS1zdHJpbmctZm9ybWF0KQohIAkJ KGNhdCAobnRoIHRvZG8tY2F0ZWdvcnktbnVtYmVyIHRvZG8tY2F0ZWdvcmllcykpCiEgCQkoYmFy ZS1pdGVtIChidWZmZXItc3Vic3RyaW5nCiEgCQkJICAgIChwcm9nbgohIAkJCSAgICAgIChnb3Rv LWNoYXIgKHRvZG8taXRlbS1zdGFydCkpCiEgCQkJICAgICAgKHNlYXJjaC1mb3J3YXJkIHRvZG8t aW5pdGlhbHMpKQohIAkJCSAgICAodG9kby1pdGVtLWVuZCkpKQohIAkJKG9sZC10aW1lc3RhbXAg KGJ1ZmZlci1zdWJzdHJpbmcKISAJCQkJKDErIChwcm9nbiAoZ290by1jaGFyICh0b2RvLWl0ZW0t c3RhcnQpKQohIAkJCQkJICAgKHNlYXJjaC1mb3J3YXJkIHRvZG8tcHJlZml4KSkpCiEgCQkJCShz ZWFyY2gtZm9yd2FyZCB0b2RvLWluaXRpYWxzKSkpCiEgCQkoZmlsbC1wcmVmaXggIiAiKQohIAkJ KGJ1ZmZlci1yZWFkLW9ubHkgbmlsKSkKISAJICAgIDs7IElmIGl0ZW0gaXMgYWxyZWFkeSBmaWxl ZCB1bmRlciBpdHMgY2F0ZWdvcnkuLi4KISAJICAgIChpZiAoZXEgbWFqb3ItbW9kZSAndG9kby1m aWxlZC1tb2RlKQohIAkJKHNhdmUtZXhjdXJzaW9uCiEgCQkgIChzYXZlLXJlc3RyaWN0aW9uCiEg CQkgICAgKHdpZGVuKQohIAkJICAgIDs7IC4uLmZpcnN0IGZpbmQgdGhlIGNhdGVnb3J5IG5hbWUK ISAJCSAgICAobGV0ICgoZmNhdCAoc2F2ZS1leGN1cnNpb24KISAJCQkJICAocmUtc2VhcmNoLWJh Y2t3YXJkIAohIAkJCQkgICAoY29uY2F0ICJeIiAocmVnZXhwLXF1b3RlIHRvZG8tcHJlZml4KQoh IAkJCQkJICAgKHJlZ2V4cC1xdW90ZSB0b2RvLWNhdGVnb3J5LWJlZykKISAJCQkJCSAgICJcXCgu K1xcKSIgIiQiKSkKISAJCQkJICAobWF0Y2gtc3RyaW5nIDEpKSkKISAJCQkgIDs7IC4uLnRoZW4g dXBkYXRlIHRoZSBmaWxlZCBpdGVtJ3MgdGltZXN0YW1wIGJ1dAohIAkJCSAgOzsgZG9uJ3QgYWRk ZWQgYSAobmV3KSBjb21tZW50IGJlZm9yZSBmaWxpbmcgYXdheS4KISAJCQkgIChmaXRlbSAoYnVm ZmVyLXN1YnN0cmluZyAKISAJCQkJICAocHJvZ24KISAJCQkJICAgIChnb3RvLWNoYXIgKHRvZG8t aXRlbS1zdGFydCkpCiEgCQkJCSAgICAocmUtc2VhcmNoLWZvcndhcmQgCiEgCQkJCSAgICAgKGNv bmNhdCAocmVnZXhwLXF1b3RlIHRvZG8tcHJlZml4KSAKISAJCQkJCSAgICAgIlteXFxbXSpcXFsi KSkKISAJCQkJICAgIChwb2ludCkpCiEgCQkJCSAgKHByb2duCiEgCQkJCSAgICAoZ290by1jaGFy ICh0b2RvLWl0ZW0tZW5kKSkKISAJCQkJICAgIChiZWdpbm5pbmctb2YtbGluZSkKISAJCQkJICAg IDs7IGxhc3QgZmlsZWQgaXRlbSBzaG91bGQgbm90IGdyYWIKISAJCQkJICAgIDs7IHRvZG8tY2F0 ZWdvcnktZW5kCiEgCQkJCSAgICAoaWYgKGxvb2tpbmctYXQgdG9kby1jYXRlZ29yeS1lbmQpICAK ISAJCQkJCSgxLSAocG9pbnQpKQohIAkJCQkgICAgICAodG9kby1pdGVtLWVuZCkpKSkpKQohIAkJ ICAgICAgKHdyaXRlLXJlZ2lvbiAoY29uY2F0ICh0aW1lLXN0YW1wLXN0cmluZykgCiEgCQkJCQkg ICAgIiBbIiBmY2F0ICI6ICIgZml0ZW0gIlxuIikKISAJCQkJICAgICdlbmQgdG9kby1maWxlLWRv bmUgdCAtMSkpKSkKISAJICAgICAgOzsgSWYgaXRlbSBpcyB1bmZpbGVkLCBzb2xpY2l0IGNvbW1l bnQgYmVmb3JlIGZpbGluZy4KISAJICAgICAgKGxldCAoKGNvbW1lbnQgKHJlYWQtZnJvbS1taW5p YnVmZmVyICJDb21tZW50OiAiKSkpCiEgCQkod3JpdGUtcmVnaW9uIChjb25jYXQgKHRpbWUtc3Rh bXAtc3RyaW5nKSAiIFsiIGNhdAohIAkJCQkgICAgICAiOiAiIG9sZC10aW1lc3RhbXAgIl0iIGJh cmUtaXRlbQohIAkJCQkgICAgICAiIFtDb21tZW50OiAiIGNvbW1lbnQgIl1cbiIpCiEgCQkJICAg ICAgJ2VuZCB0b2RvLWZpbGUtZG9uZSB0IC0xKSkpCiEgCSAgICAodG9kby1yZW1vdmUtaXRlbSkK ISAJICAgIChtZXNzYWdlICJJdGVtIGZpbGVkIGluICVzLiIgdG9kby1maWxlLWRvbmUpKQohIAko bWVzc2FnZSAiIikpCiEgICAgIChlcnJvciAiTm90IGEgVE9ETyBsaXN0IGVudHJ5IikpKQohIAoh IAohIChkZWZ1biB0b2RvLWZpbGUtaXRlbS11bmRlci1jYXQgKCkKISAgICAiRmlsZSB0aGUgY3Vy cmVudCBUT0RPIGxpc3QgZW50cnkgdW5kZXIgaXRzIGNhdGVnb3J5LCBjb21tZW50IG9wdGlvbmFs LgohIAohIFRoZSBmaWxlZCBpdGVtcyBhcmUga2VwdCBpbiBhIHNlcGFyYXRlIHJlZ2lvbiBvZiB0 aGUgY2F0ZWdvcnksIGFuZCBjYW4gYmUKISBkaXNwbGF5ZWQgYnkgdHlwaW5nIFxcW3RvZG8tZGlz cGxheS1maWxlZC1pdGVtcy11bmRlci1jYXRdLiIKISAgICAoaW50ZXJhY3RpdmUpCiEgICAgKG9y ICg+IChjb3VudC1saW5lcyAocG9pbnQtbWluKSAocG9pbnQtbWF4KSkgMCkKISAgICAgICAgKGVy cm9yICJObyBUT0RPIGxpc3QgZW50cnkgdG8gZmlsZSBhd2F5IikpCiEgICAgKGlmICh0b2RvLWl0 ZW0tc3RyaW5nLXApCiEgICAgICAgIChpZiAoeS1vci1uLXAgIkZpbGUgdGhpcyBpdGVtIHVuZGVy IGl0cyBjYXRlZ29yeT8gIikKISAJICAgKGxldCAoKHRpbWUtc3RhbXAtZm9ybWF0IHRvZG8tdGlt ZS1zdHJpbmctZm9ybWF0KQohIAkJIChjYXQgKG50aCB0b2RvLWNhdGVnb3J5LW51bWJlciB0b2Rv LWNhdGVnb3JpZXMpKQohIAkJIChiYXJlLWl0ZW0gKGJ1ZmZlci1zdWJzdHJpbmcKISAJCQkgICAg IChwcm9nbgohIAkJCSAgICAgICAoZ290by1jaGFyICh0b2RvLWl0ZW0tc3RhcnQpKQohIAkJCSAg ICAgICAoc2VhcmNoLWZvcndhcmQgdG9kby1pbml0aWFscykpCiEgCQkJICAgICAodG9kby1pdGVt LWVuZCkpKQohIAkJIChvbGQtdGltZXN0YW1wIChidWZmZXItc3Vic3RyaW5nCiEgCQkJCSAoMSsg KHByb2duIChnb3RvLWNoYXIgKHRvZG8taXRlbS1zdGFydCkpCiEgCQkJCQkgICAgKHNlYXJjaC1m b3J3YXJkIHRvZG8tcHJlZml4KSkpCiEgCQkJCSAoc2VhcmNoLWZvcndhcmQgdG9kby1pbml0aWFs cykpKQohIAkJIChjb21tZW50IChyZWFkLWZyb20tbWluaWJ1ZmZlciAiQ29tbWVudDogIikpCiEg CQkgKGZpbGwtcHJlZml4ICIgIikKISAJCSAoYnVmZmVyLXJlYWQtb25seSBuaWwpKQohIAkgICAg IChzYXZlLWV4Y3Vyc2lvbgohIAkgICAgICAgKHNhdmUtcmVzdHJpY3Rpb24KISAJCSAod2lkZW4p CiEgCQkgOzsgbWFrZSBzdXJlIGNhdGVnb3J5IGlzIHNldCB1cCB0byBmaWxlIGl0ZW1zCiEgCQkg KGxldCAoKGVuZCAoc2F2ZS1leGN1cnNpb24KISAJCQkgICAgICAocmUtc2VhcmNoLWZvcndhcmQg CiEgCQkJICAgICAgIChjb25jYXQgIl4iIHRvZG8tY2F0ZWdvcnktZW5kICIkIikpCiEgCQkJICAg ICAgKG1hdGNoLWJlZ2lubmluZyAwKSkpKQohIAkJICAgKGlmIChyZS1zZWFyY2gtZm9yd2FyZCAK ISAJCQkoY29uY2F0ICJeIiB0b2RvLWNhdGVnb3J5LWZpbGVkICIkIikgZW5kIHQpCiEgCQkgICAg ICAgKG5ld2xpbmUpCiEgCQkgICAgIChnb3RvLWNoYXIgZW5kKQohIAkJICAgICAoaW5zZXJ0IHRv ZG8tY2F0ZWdvcnktZmlsZWQgIlxuIikpKQohIAkJIChpbnNlcnQgdG9kby1wcmVmaXggIiAiICh0 aW1lLXN0YW1wLXN0cmluZykKISAJCQkgIiBbIiBvbGQtdGltZXN0YW1wICJdIiBiYXJlLWl0ZW0p CiEgCQkgKGlmIChhbmQgY29tbWVudCAoPiAobGVuZ3RoIGNvbW1lbnQpIDApKQohIAkJICAgICAo aW5zZXJ0ICIgW0NvbW1lbnQ6ICIgY29tbWVudCAiXSIpKQohIAkJIChpZiAobG9va2luZy1hdCB0 b2RvLWNhdGVnb3J5LWVuZCkgKGluc2VydCAiXG4iKSkKISAJCSAoZmlsbC1yZWdpb24gKHRvZG8t aXRlbS1zdGFydCkgKHBvaW50KSkpKQohIAkgICAgICh0b2RvLXJlbW92ZS1pdGVtKQohIAkgICAg ICh0b2RvLWNhdGVnb3J5LXNlbGVjdCkKISAJICAgICAobWVzc2FnZSAiSXRlbSBmaWxlZC4gIFBy ZXNzIGBkJyB0byB2aWV3IGZpbGVkIGl0ZW1zIGluIHRoaXMgY2F0ZWdvcnkuIikpCiEgCSAobWVz c2FnZSAiIikpCiEgICAgICAoZXJyb3IgIk5vdCBhIFRPRE8gbGlzdCBlbnRyeSIpKSkKISAKISAo ZGVmdW4gdG9kby1kaXNwbGF5LWZpbGVkLWl0ZW1zLXVuZGVyLWNhdCAoKQohICAgIkRpc3BsYXkg YSBidWZmZXIgb2YgdGhlIGZpbGVkIFRPRE8gaXRlbXMgaW4gdGhlIGN1cnJlbnQgY2F0ZWdvcnku CiEgCiEgVGhlIGZpbGVkIGl0ZW1zIGFyZSBkaXNwbGF5ZWQgaW4gYSB3aW5kb3cgYmVsb3cgdGhl IHVuZmlsZWQgaXRlbXMKISBvZiB0aGF0IGNhdGVnb3J5LiAgVGhpcyBkaXNwbGF5IHVzZXMgYSBz cGVjaWFsIG1ham9yIG1vZGUsIHdoaWNoIGNvbnRhaW5zCiEgYSBwcm9wZXIgc3Vic2V0IG9mIHRo ZSB0b2RvLW1vZGUga2V5IGJpbmRpbmdzLiIKISAgIChpbnRlcmFjdGl2ZSkKISAgIChnb3RvLWNo YXIgKHBvaW50LW1pbikpCiEgICAod2lkZW4pCiEgICAobGV0KiAoKGNhdCAobnRoIHRvZG8tY2F0 ZWdvcnktbnVtYmVyIHRvZG8tY2F0ZWdvcmllcykpCiEgCSAoZW5kIChzYXZlLWV4Y3Vyc2lvbiAK ISAJCShyZS1zZWFyY2gtZm9yd2FyZCAoY29uY2F0ICJeIiB0b2RvLWNhdGVnb3J5LWVuZCAiJCIp KQohIAkJKG1hdGNoLWJlZ2lubmluZyAwKSkpCiEgCSAoYmVnaW4gKHJlLXNlYXJjaC1mb3J3YXJk IAohIAkJIChjb25jYXQgIl4iIHRvZG8tY2F0ZWdvcnktZmlsZWQgIiQiKSBlbmQgdCkpCiEgCSAo bmFtZSAoZ2VuZXJhdGUtbmV3LWJ1ZmZlci1uYW1lIHRvZG8tZmlsZWQtYnVmZmVyKSkKISAJIChi dWZmZXIgKG1ha2UtaW5kaXJlY3QtYnVmZmVyCiEgCQkgIChmaWxlLW5hbWUtbm9uZGlyZWN0b3J5 IHRvZG8tZmlsZS1kbykgbmFtZSkpKQohICAgICAoaWYgKG9yIChudWxsIGJlZ2luKSAoZXF1YWwg KDErIGJlZ2luKSBlbmQpKQogIAkocHJvZ24KISAJICAodG9kby1jYXRlZ29yeS1zZWxlY3QpCiEg CSAgKGRlbGV0ZS1vdGhlci13aW5kb3dzKQohIAkgIChlcnJvciAiTm8gZmlsZWQgaXRlbXMgaW4g dGhpcyBjYXRlZ29yeSIpKQohICAgICAgICh0b2RvLWNhdGVnb3J5LXNlbGVjdCkKISAgICAgICAo c2V0LWJ1ZmZlciBidWZmZXIpCiEgICAgICAgKHRvZG8tZmlsZWQtbW9kZSkKISAgICAgICAobmFy cm93LXRvLXJlZ2lvbiAoMSsgYmVnaW4pIGVuZCkKISAgICAgICAoc2V0cSBtb2RlLWxpbmUtYnVm ZmVyLWlkZW50aWZpY2F0aW9uCiEgCSAgICAoY29uY2F0IHRvZG8tZmlsZWQtYnVmZmVyIChmb3Jt YXQgIiUxOHMiIGNhdCkpKQohICAgICAgIChkaXNwbGF5LWJ1ZmZlciBidWZmZXIpCiEgICAgICAg KG1lc3NhZ2UgIlR5cGUgQy14IG8gQy1oIG0gdG8gbGlzdCB0aGUgZnVuY3Rpb25zIGF2YWlsYWJs ZSBpbiB0b2RvLWZpbGVkLW1vZGUuIikpKSkKISA7ICAgICAgIChtZXNzYWdlICJUeXBlIEMteCAx IHRvIHJlbW92ZSBmaWxlZCBpdGVtcyBvciBNLUMtdiB0byBzY3JvbGwgdGhlbS4iKSkpKQohIAoh IChkZWZ1biB0b2RvLW1vdmUtaXRlbSAoKQohICAgIk1vdmUgdGhlIGN1cnJlbnQgdG9kbyBpdGVt IHRvIGFub3RoZXIgY2F0ZWdvcnkuIgohICAgKGludGVyYWN0aXZlKQohICAgKGlmICh0b2RvLWl0 ZW0tc3RyaW5nLXApCiEgICAgICAgKGxldCogKChpdGVtICh0b2RvLWl0ZW0tc3RyaW5nKSkKISAJ ICAgICAoY2F0ZWdvcmllcyB0b2RvLWNhdGVnb3JpZXMpCiEgCSAgICAgKGhpc3RvcnkgKGNvbnMg J2NhdGVnb3JpZXMgKDErIHRvZG8tY2F0ZWdvcnktbnVtYmVyKSkpCiEgCSAgICAgKGNhdGVnb3J5 IChjb21wbGV0aW5nLXJlYWQgKGNvbmNhdCAiTW92ZSB0byBjYXRlZ29yeTogIikKISAJCQkJCSh0 b2RvLWNhdGVnb3J5LWFsaXN0KSBuaWwgbmlsIG5pbAohIAkJCQkJaGlzdG9yeSkpCiEgCSAgICAg KGJ1ZmZlci1yZWFkLW9ubHkgbmlsKSkKISAJKGlmICh0b2RvLWxhc3QtaW4tY2F0ZWdvcnktcCkK ISAJICAgIChwcm9nbgohIAkgICAgICAodG9kby1yZW1vdmUtaXRlbSkKISAJICAgICAgOzsgZG9u J3QgbGVhdmUgaXRlbSBzZXBhcmF0b3IgZGFuZ2xpbmcgYXQgdGhlIGJvdHRvbQohIAkgICAgICAo aWYgKHNlYXJjaC1iYWNrd2FyZCB0b2RvLWl0ZW0tc2VwYXJhdG9yIChwb2ludC1taW4pIHQpCiEg CQkgIChwcm9nbgohIAkJICAgIChkZWxldGUtcmVnaW9uIChwb2ludCkgKHBvaW50LW1heCkpCiEg CQkgICAgKG5ld2xpbmUpCiEgCQkgICAgKHRvZG8tYmFja3dhcmQtaXRlbSkpKSkKISAJICAodG9k by1yZW1vdmUtaXRlbSkpCiEgCTs7IGN1cnJlbnRseSBjYW4ndCBjcmVhdGUgYSBjYXRlZ29yeSBi eSBtb3ZpbmcgaW50byBpdCAoZmFpbHMKISAJOzsgd2hlbiB0b2RvLWFkZC1pdGVtLW5vbi1pbnRl cmFjdGl2ZWx5IGlzIGNhbGxlZCwgYnV0IHRoZQohIAk7OyBzb3VyY2Ugb2YgdGhlIHByb2JsZW0g Y3VycmVudGx5IGVzY2FwZXMgbWUpCiEgCShpZiAobWVtYmVyIGNhdGVnb3J5IHRvZG8tY2F0ZWdv cmllcykKISAJICAgICh0b2RvLWp1bXAtdG8tY2F0ZWdvcnktbm9uaW50ZXJhY3RpdmVseSBjYXRl Z29yeSkKISAJICAoc2F2ZS1leGN1cnNpb24gKGluc2VydCBpdGVtIHRvZG8taXRlbS1zZXBhcmF0 b3IpKQohIAkgIChlcnJvciAiQ2Fubm90IG1vdmUgaXRlbSB0byBhIG5vbmV4aXN0aW5nIGNhdGVn b3J5IikpCiEgCSh0b2RvLWFkZC1pdGVtLW5vbi1pbnRlcmFjdGl2ZWx5IGl0ZW0gY2F0ZWdvcnkp CiEgCShtZXNzYWdlICIiKSkKISAgICAgKGVycm9yICJDdXJzb3IgbXVzdCBiZSBvbiBhIFRPRE8g ZW50cnkgdG8gbW92ZSBpdCIpKSkKISAKISA7OyBUaGlzIGZ1bmN0aW9uIHdhcyBpbnNwaXJlZCBi eSBhIGZlYXR1cmUgcmVxdWVzdCBmcm9tIERhbmllbCBPcnRtYW5uCiEgOzsgb24gZ251LmVtYWNz LmJ1ZyBbc3JiXQohIChkZWZ1biB0b2RvLWNoYW5nZS1pdGVtLXNlcC1pbi1jYXQgKCZvcHRpb25h bCBuZXcpCiEgICAiQ2hhbmdlIHRoZSB0b2RvIGl0ZW0gc2VwYXJhdG9yIGluIHRoZSBjdXJyZW50 IGNhdGVnb3J5LiIKISAgIChpbnRlcmFjdGl2ZSkKISAgIChzYXZlLWV4Y3Vyc2lvbiAKISAgICAg OzsgdGhlIGN1cnJlbnQgc2VwYXJhdG9yIHN0cmluZyBpbiB0aGlzIGNhdGVnb3J5IChhc3N1bWlu ZyB0aGUgc2VwYXJhdG9yIAohICAgICA7OyBzdHJpbmcgZG9lcyBub3QgY29udGFpbiBhbnkgYWxw aGFudW1lcmljIGNoYXJhY3RlciBhbmQgdGhlIGxhc3QgbGluZSAKISAgICAgOzsgb2YgYSB0b2Rv IGl0ZW0gZG9lcyBjb250YWluIGF0IGxlYXN0IG9uZSBhbHBoYW51bWVyaWMgY2hhcmFjdGVyKQoh ICAgICAobGV0ICgoc2VwIChzYXZlLWV4Y3Vyc2lvbiAKISAJCSAoZ290by1jaGFyIChwb2ludC1t aW4pKQohIAkJIChpZiAocmUtc2VhcmNoLWZvcndhcmQgCiEgCQkgICAgICAoY29uY2F0ICJcXChc blteQS1CYS16MC05XSpcXCkiIAohIAkJCSAgICAgIChyZWdleHAtcXVvdGUgdG9kby1wcmVmaXgp KSBuaWwgdCkKISAJCSAgICAgKG1hdGNoLXN0cmluZyAxKQohIAkJICAgIlxuIikpKSkKISAgICAg ICAodW5sZXNzIChzdHJpbmctZXF1YWwgdG9kby1pdGVtLXNlcGFyYXRvciBzZXApCiEgCShzZXRx IHRvZG8taXRlbS1zZXBhcmF0b3Igc2VwKSkpCiEgICAgIChzYXZlLWV4Y3Vyc2lvbiAKISAgICAg ICAoZ290by1jaGFyIChwb2ludC1taW4pKQohICAgICAgICh3aGVuIChpbnRlcmFjdGl2ZS1wKQoh IAkodW5sZXNzIChzZWFyY2gtZm9yd2FyZCB0b2RvLXByZWZpeCBuaWwgdCAyKQohIAkgIChlcnJv ciAiVGhlcmUgbXVzdCBiZSBhdCBsZWFzdCB0d28gaXRlbXMgdG8gY2hhbmdlIHRoZSBzZXBhcmF0 b3IiKSkpKQohICAgICA7OyB0aGUgbmV3IHNlcGFyYXRvciBzdHJpbmcKISAgICAgKHVubGVzcyBu ZXcKISAgICAgICAoc2V0cSBuZXcgKHJlYWQtZnJvbS1taW5pYnVmZmVyIAohIAkJIChjb25jYXQg IkN1cnJlbnQgaXRlbSBzZXBhcmF0b3Igc3RyaW5nIGlzICIgCiEgCQkJIHRvZG8taXRlbS1zZXBh cmF0b3IgIi4gIFJlcGxhY2Ugd2l0aDogIikpKSkKISAgICAgKGxldCAoKGJ1ZmZlci1yZWFkLW9u bHkgbmlsKSkKISAgICAgICAodW5sZXNzIChzdHJpbmctbWF0Y2ggIlxcKF5cbiRcXHxeXG4uKlxu JFxcKSIgbmV3KQohIAkoZXJyb3IgIlNlcGFyYXRvciBzdHJpbmcgbXVzdCBiZWdpbiBhbmQgZW5k IHdpdGggYSBuZXdsaW5lIikpCiEgICAgICAgKGdvdG8tY2hhciAocG9pbnQtbWluKSkKISAgICAg ICAod2hpbGUgKG5vdCAodG9kby1sYXN0LWluLWNhdGVnb3J5LXApKSA7IG5vIHNlcGFyYXRvciBi ZWxvdyBsYXN0IGl0ZW0KISAJKGdvdG8tY2hhciAodG9kby1pdGVtLWVuZCkpCiEgCShpZiAocmUt c2VhcmNoLWZvcndhcmQgdG9kby1pdGVtLXNlcGFyYXRvcikgCiEgCSAgICAocmVwbGFjZS1tYXRj aCBuZXcpCiEgCSAgKHJlLXNlYXJjaC1mb3J3YXJkIChjb25jYXQgIlxcKFxuLipcXCkiIAohIAkJ CQkgICAgIChyZWdleHAtcXVvdGUgdG9kby1wcmVmaXgpKSkKISAJICAoZ290by1jaGFyIChtYXRj aC1iZWdpbm5pbmcgMCkpCiEgCSAgKHJlcGxhY2UtbWF0Y2ggbmV3IG5pbCBuaWwgbmlsIDEpCiEg CSAgKGZvcndhcmQtY2hhcikpKQohICAgICAgIChzZXRxIHRvZG8taXRlbS1zZXBhcmF0b3IgbmV3 KSkKISAgICAgKG1lc3NhZ2UgIk5ldyBzZXBhcmF0b3Igc3RyaW5nOiAlcyIgdG9kby1pdGVtLXNl cGFyYXRvcikpKQohIAohIChkZWZ1biB0b2RvLWNoYW5nZS10b2RvLXByZWZpeCAoKQohICAgIkNo YW5nZSB0aGUgVE9ETyBwcmVmaXggdG8gYSBuZXcgc3RyaW5nLgohIAohIEFmdGVyd2FyZHMsIGEg Y3VzdG9taXphdGlvbiBidWZmZXIgZm9yIFRvZG8gUHJlZml4IGlzIHZpc2l0ZWQsIHNvIHlvdQoh IGNhbiBzYXZlIHRoZSBjaGFuZ2UgZm9yIGZ1dHVyZSBzZXNzaW9ucy4gIElmIHlvdSBxdWl0IEVt YWNzIHdpdGhvdXQgZG9pbmcKISB0aGlzLCBwcm9ibGVtcyB3aWxsIHJlc3VsdCBpbiB0aGUgbmV4 dCBUT0RPIHNlc3Npb24uIgohICAgKGludGVyYWN0aXZlKQohICAgKGxldCogKChuZXcgKHJlYWQt ZnJvbS1taW5pYnVmZmVyIAohIAkgICAgICAgKGNvbmNhdCAiQ3VycmVudCBpdGVtIHByZWZpeCBz dHJpbmcgaXMgIiAKISAJCSAgICAgICB0b2RvLXByZWZpeCAiLiAgUmVwbGFjZSB3aXRoOiAiKSkp CiEgCSAoYnVmZmVyLXJlYWQtb25seSBuaWwpKQohICAgICAoc2F2ZS1leGN1cnNpb24gCiEgICAg ICAgKHNhdmUtcmVzdHJpY3Rpb24KISAJKHdpZGVuKQohIAkoZ290by1jaGFyIChwb2ludC1taW4p KQohIAkod2hpbGUgKHJlLXNlYXJjaC1mb3J3YXJkIHRvZG8tcHJlZml4IG5pbCB0KQohIAkgIChy ZXBsYWNlLW1hdGNoIG5ldyBuaWwgbmlsKSkpKQohICAgICAoc2V0cSB0b2RvLXByZWZpeCBuZXcp CiEgICAgICh0b2RvLWNhdGVnb3J5LXNlbGVjdCkpCiEgICAoY3VzdG9taXplLWFwcm9wb3MgInRv ZG8tcHJlZml4IikKISAgIChzZWFyY2gtZm9yd2FyZCAiVG9kbyBQcmVmaXgiKQohICAgKGdvdG8t Y2hhciAobWF0Y2gtYmVnaW5uaW5nIDApKQohICAgKG1lc3NhZ2UgIlNhdmUgZm9yIGZ1dHVyZSBz ZXNzaW9ucyB0byBtYWtlIGF2YWlsYWJsZSBpbiBuZXh0IFRPRE8gc2Vzc2lvbi4iKSkKISAKISA7 OyBUaGlzIGZ1bmN0aW9uIHdhcyBpbnNwaXJlZCBieSBhIHF1ZXN0aW9uIHBvc3RlZCBieSBLYWkg R3Jv32pvaGFubgohIDs7IG9uIGdudS5lbWFjcy5oZWxwIFtzcmJdCiEgKGRlZnVuIHRvZG8tdG9n Z2xlLWl0ZW0taGVhZGVyIChhcmcpCiEgICAiVG9nZ2xlIGRpc3BsYXkgb2YgVE9ETyBpdGVtIHRp bWVzdGFtcCBhbmQgaW5pdGlhbHMuCiEgV2l0aCBwcmVmaXggYXJndW1lbnQgdG9nZ2xlIGRpc3Bs YXkgb2YgVE9ETyBpdGVtIHByZWZpeC4iCiEgICAoaW50ZXJhY3RpdmUgIlAiKQohICAgKGdvdG8t Y2hhciAocG9pbnQtbWluKSkKISAgICh3aGlsZSAobm90IChlb2JwKSkKISAgICAgKGxldCAoKGJl Z2luIChpZiBhcmcgCiEgCQkgICAgIChwcm9nbiAob3IgKHNlYXJjaC1mb3J3YXJkIHRvZG8tcHJl Zml4IG5pbCB0KSAKISAJCQkJKGVycm9yICJEb25lIikpCiEgCQkJICAgIChtYXRjaC1iZWdpbm5p bmcgMCkpCiEgCQkgICAob3IgKHJlLXNlYXJjaC1mb3J3YXJkIAohIAkJCShjb25jYXQgKHJlZ2V4 cC1xdW90ZSB0b2RvLXByZWZpeCkgCiEgCQkJCSJcXCguKlswLTldK1xcKSAiIAohIAkJCQkocmVn ZXhwLXF1b3RlIHRvZG8taW5pdGlhbHMpIAohIAkJCQkiXFwoXT86IFxcKSIpIG5pbCB0KQohIAkJ ICAgICAgIChlcnJvciAiRG9uZSIpKQohIAkJICAgKG1hdGNoLWJlZ2lubmluZyAxKSkpCiEgCSAg KGVuZCAoaWYgYXJnIAohIAkJICAgKDErIChtYXRjaC1lbmQgMCkpCiEgCQkgKDEtIChtYXRjaC1l bmQgMikpKSkKISAJICAoYnVmZmVyLXJlYWQtb25seSBuaWwpKQohICAgICAgIChvciAodW5sZXNz IChub3QgKG5leHQtc2luZ2xlLXByb3BlcnR5LWNoYW5nZSAocG9pbnQpICcoaW52aXNpYmxlIHQp IAohIAkJCQkJCSAgICBuaWwgZW5kKSkKISAJICAgIChhZGQtdGV4dC1wcm9wZXJ0aWVzIGJlZ2lu IGVuZCAnKGludmlzaWJsZSB0KSkpCiEgCSAgKHJlbW92ZS10ZXh0LXByb3BlcnRpZXMgYmVnaW4g ZW5kICcoaW52aXNpYmxlIHQpKSkpCiAgICAgIChnb3RvLWNoYXIgKHRvZG8taXRlbS1lbmQpKQoh ICAgICAoc2F2ZS1idWZmZXIgMCkpKQogIAogIDs7IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogIAoqKioq KioqKioqKioqKioKKioqIDgyNyw4MzIgKioqKgotLS0gMTQ0NiwxNDg2IC0tLS0KICAgICAgICAg ICAgICAodG9kby1hZGQtY2F0ZWdvcnkgY2F0ZWdvcnkpKSkKICAgICAgKHRvZG8tc2hvdykpKQog IAorIDs7IGNhbGxlZCBieSB0b2RvLWNhdGVnb3J5LWNsaWNrIGFuZCB0b2RvLWNhdGVnb3J5LXJl dHVybiwgYW5kIGFsc28gCisgOzsgbmVlZGVkICh0byBhdm9pZCBteXN0ZXJpb3VzIGVycm9ycyBJ IGN1cnJlbnRseSBkb24ndCB1bmRlcnN0YW5kKSBieSAKKyA7OyB0b2RvLWFkZC1pdGVtLW5vbi1p bnRlcmFjdGl2ZWx5IGFuZCB0b2RvLW1vdmUtaXRlbQorIChkZWZ1biB0b2RvLWp1bXAtdG8tY2F0 ZWdvcnktbm9uaW50ZXJhY3RpdmVseSAoY2F0KQorICAgKGxldCAoKG5hbWUgKGNvbmNhdCAiKiIg dG9kby1jYXRlZ29yaWVzLWJ1ZmZlciAiKiIpKSkKKyAgICAgKGlmIChzdHJpbmc9IChidWZmZXIt bmFtZSkgbmFtZSkKKyAJKGtpbGwtYnVmZmVyIG5hbWUpKSkKKyAgIChzd2l0Y2gtdG8tYnVmZmVy IChmaWxlLW5hbWUtbm9uZGlyZWN0b3J5IHRvZG8tZmlsZS1kbykpCisgICAoZGVsZXRlLW90aGVy LXdpbmRvd3MpCisgICAod2lkZW4pCisgICAoZ290by1jaGFyIChwb2ludC1taW4pKQorICAgKHNl dHEgdG9kby1jYXRlZ29yeS1udW1iZXIgKC0gKGxlbmd0aCB0b2RvLWNhdGVnb3JpZXMpCisgCQkJ CShsZW5ndGggKG1lbWJlciBjYXQgdG9kby1jYXRlZ29yaWVzKSkpKQorICAgKHRvZG8tY2F0ZWdv cnktc2VsZWN0KSkKKyAKKyAoZGVmdW4gdG9kby1jYXRlZ29yeS1jbGljayAoZXZlbnQpCisgICAo aW50ZXJhY3RpdmUgImUiKQorICAgKGxldCAoY2F0KQorICAgICAoc2F2ZS1leGN1cnNpb24KKyAg ICAgICAoc2V0LWJ1ZmZlciAod2luZG93LWJ1ZmZlciAocG9zbi13aW5kb3cgKGV2ZW50LWVuZCBl dmVudCkpKSkKKyAgICAgICAoc2F2ZS1leGN1cnNpb24KKyAJKGdvdG8tY2hhciAocG9zbi1wb2lu dCAoZXZlbnQtZW5kIGV2ZW50KSkpCisgCShzZXRxIGNhdCAoYnVmZmVyLXN1YnN0cmluZyAobGlu ZS1iZWdpbm5pbmctcG9zaXRpb24pIAorIAkJCQkgICAgKGxpbmUtZW5kLXBvc2l0aW9uKSkpKQor ICAgICAgIChzZWxlY3Qtd2luZG93IChwb3NuLXdpbmRvdyAoZXZlbnQtZW5kIGV2ZW50KSkpCisg ICAgICAgKHRvZG8tanVtcC10by1jYXRlZ29yeS1ub25pbnRlcmFjdGl2ZWx5IGNhdCkpKSkKKyAK KyAoZGVmdW4gdG9kby1jYXRlZ29yeS1yZXR1cm4gKCkKKyAgIChpbnRlcmFjdGl2ZSkKKyAgIChs ZXQgKChjYXQgKGJ1ZmZlci1zdWJzdHJpbmcgKGxpbmUtYmVnaW5uaW5nLXBvc2l0aW9uKSAobGlu ZS1lbmQtcG9zaXRpb24pKSkpCisgICAgIChzYXZlLWV4Y3Vyc2lvbgkJCTsgYWx0ZXJuYXRpdmVs eToKKyAgICAgICAoYmVnaW5uaW5nLW9mLWxpbmUpCQk7IChyZXF1aXJlICd0aGluZ2F0cHQpCisg ICAgICAgKGlmIChsb29raW5nLWF0IGNhdCkJCTsgKGlmICh0aGluZy1hdC1wb2ludC1sb29raW5n LWF0IGNhdCkKKyAJKHRvZG8tanVtcC10by1jYXRlZ29yeS1ub25pbnRlcmFjdGl2ZWx5IGNhdCkp KSkpCisgCiAgKGRlZnVuIHRvZG8tbGluZS1zdHJpbmcgKCkKICAgICJSZXR1cm4gY3VycmVudCBs aW5lIGluIGJ1ZmZlciBhcyBhIHN0cmluZy4iCiAgICAoYnVmZmVyLXN1YnN0cmluZyAobGluZS1i ZWdpbm5pbmctcG9zaXRpb24pIChsaW5lLWVuZC1wb3NpdGlvbikpKQoqKioqKioqKioqKioqKioK KioqIDg1Miw4NjQgKioqKgogICAgIlJldHVybiBwb2ludCBhdCBlbmQgb2YgY3VycmVudCBUT0RP IGxpc3QgaXRlbS4iCiAgICAoc2F2ZS1leGN1cnNpb24KICAgICAgKGVuZC1vZi1saW5lKQohICAg ICAoc2VhcmNoLWZvcndhcmQtcmVnZXhwCiEgICAgICAoY29uY2F0ICJeIiAocmVnZXhwLXF1b3Rl IHRvZG8tcHJlZml4KSkgbmlsICdnb3RvLWVuZCkKISAgICAgKDEtIChsaW5lLWJlZ2lubmluZy1w b3NpdGlvbikpKSkKICAKICAoZGVmdW4gdG9kby1yZW1vdmUtaXRlbSAoKQogICAgIkRlbGV0ZSB0 aGUgY3VycmVudCBlbnRyeSBmcm9tIHRoZSBUT0RPIGxpc3QuIgohICAgKGRlbGV0ZS1yZWdpb24g KHRvZG8taXRlbS1zdGFydCkgKDErICh0b2RvLWl0ZW0tZW5kKSkpKQogIAogIChkZWZ1biB0b2Rv LWl0ZW0tc3RyaW5nICgpCiAgICAiUmV0dXJuIGN1cnJlbnQgVE9ETyBsaXN0IGVudHJ5IGFzIGEg c3RyaW5nLiIKLS0tIDE1MDYsMTUyNiAtLS0tCiAgICAiUmV0dXJuIHBvaW50IGF0IGVuZCBvZiBj dXJyZW50IFRPRE8gbGlzdCBpdGVtLiIKICAgIChzYXZlLWV4Y3Vyc2lvbgogICAgICAoZW5kLW9m LWxpbmUpCiEgICAgIChvciAoaWYgKHJlLXNlYXJjaC1mb3J3YXJkIAohIAkgICAgIChjb25jYXQg KHJlZ2V4cC1xdW90ZSB0b2RvLWl0ZW0tc2VwYXJhdG9yKQohIDsJCSAgICAgICAiXiIgIDsgc2Vl IEVsaXNwIG1hbnVhbCwgUmVnZXhwIFNwZWNpYWwKISAJCSAgICAgKHJlZ2V4cC1xdW90ZSB0b2Rv LXByZWZpeCkpIG5pbCB0KQohIAkgICAgKGdvdG8tY2hhciAobWF0Y2gtYmVnaW5uaW5nIDApKSkg CiEgCShnb3RvLWNoYXIgKDEtIChwb2ludC1tYXgpKSkpKSkgOyBubyBzZXBhcmF0b3IgYWZ0ZXIg bGFzdCBpdGVtCiAgCiAgKGRlZnVuIHRvZG8tcmVtb3ZlLWl0ZW0gKCkKICAgICJEZWxldGUgdGhl IGN1cnJlbnQgZW50cnkgZnJvbSB0aGUgVE9ETyBsaXN0LiIKISAgIChpZiAoc3RyaW5nLWVxdWFs IHRvZG8taXRlbS1zZXBhcmF0b3IgIlxuIikKISAgICAgICAoZGVsZXRlLXJlZ2lvbiAodG9kby1p dGVtLXN0YXJ0KSAoMSsgKHRvZG8taXRlbS1lbmQpKSkKISAgICAgKGlmICh0b2RvLWxhc3QtaW4t Y2F0ZWdvcnktcCkKISAJKGRlbGV0ZS1yZWdpb24gKHRvZG8taXRlbS1zdGFydCkgKHBvaW50LW1h eCkpCiEgICAgICAgKGRlbGV0ZS1yZWdpb24gKHRvZG8taXRlbS1zdGFydCkgCiEgCQkgICAgIChy ZS1zZWFyY2gtZm9yd2FyZCAocmVnZXhwLXF1b3RlIHRvZG8taXRlbS1zZXBhcmF0b3IpKSkpKSkK ICAKICAoZGVmdW4gdG9kby1pdGVtLXN0cmluZyAoKQogICAgIlJldHVybiBjdXJyZW50IFRPRE8g bGlzdCBlbnRyeSBhcyBhIHN0cmluZy4iCioqKioqKioqKioqKioqKgoqKiogODc2LDkwOSAqKioq CiAgICAiR2VuZXJhdGUgYW4gYWxpc3QgZm9yIHVzZSBpbiBgY29tcGxldGluZy1yZWFkJyBmcm9t IGB0b2RvLWNhdGVnb3JpZXMnLiIKICAgIChtYXBjYXIgIydsaXN0IHRvZG8tY2F0ZWdvcmllcykp CiAgCiAgOzsgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgCiAgKGVhc3ktbWVudS1kZWZpbmUgdG9kby1t ZW51IHRvZG8tbW9kZS1tYXAgIlRvZG8gTWVudSIKICAgICAgICAgICAgICAgICAgICAnKCJUb2Rv IgohICAgICAgICAgICAgICAgICAgICAgWyJOZXh0IGNhdGVnb3J5IiAgICAgICAgdG9kby1mb3J3 YXJkLWNhdGVnb3J5IHRdCiEgICAgICAgICAgICAgICAgICAgICBbIlByZXZpb3VzIGNhdGVnb3J5 IiAgICB0b2RvLWJhY2t3YXJkLWNhdGVnb3J5IHRdCiEgICAgICAgICAgICAgICAgICAgICBbIkp1 bXAgdG8gY2F0ZWdvcnkiICAgICB0b2RvLWp1bXAtdG8tY2F0ZWdvcnkgdF0KISAgICAgICAgICAg ICAgICAgICAgIFsiU2hvdyB0b3AgcHJpb3JpdHkgaXRlbXMiIHRvZG8tdG9wLXByaW9yaXRpZXMg dF0KISAgICAgICAgICAgICAgICAgICAgIFsiUHJpbnQgY2F0ZWdvcmllcyIgICAgIHRvZG8tcHJp bnQgdF0KICAgICAgICAgICAgICAgICAgICAgICItLS0iCiEgICAgICAgICAgICAgICAgICAgICBb IkVkaXQgaXRlbSIgICAgICAgICAgICB0b2RvLWVkaXQtaXRlbSB0XQohICAgICAgICAgICAgICAg ICAgICAgWyJGaWxlIGl0ZW0iICAgICAgICAgICAgdG9kby1maWxlLWl0ZW0gdF0KISAgICAgICAg ICAgICAgICAgICAgIFsiSW5zZXJ0IG5ldyBpdGVtIiAgICAgIHRvZG8taW5zZXJ0LWl0ZW0gdF0K ISAgICAgICAgICAgICAgICAgICAgIFsiSW5zZXJ0IGl0ZW0gaGVyZSIgICAgIHRvZG8taW5zZXJ0 LWl0ZW0taGVyZSB0XQohICAgICAgICAgICAgICAgICAgICAgWyJLaWxsIGl0ZW0iICAgICAgICAg ICAgdG9kby1kZWxldGUtaXRlbSB0XQogICAgICAgICAgICAgICAgICAgICAgIi0tLSIKISAgICAg ICAgICAgICAgICAgICAgIFsiTG93ZXIgaXRlbSBwcmlvcml0eSIgIHRvZG8tbG93ZXItaXRlbSB0 XQohICAgICAgICAgICAgICAgICAgICAgWyJSYWlzZSBpdGVtIHByaW9yaXR5IiAgdG9kby1yYWlz ZS1pdGVtIHRdCiAgICAgICAgICAgICAgICAgICAgICAiLS0tIgohICAgICAgICAgICAgICAgICAg ICAgWyJOZXh0IGl0ZW0iICAgICAgICAgICAgdG9kby1mb3J3YXJkLWl0ZW0gdF0KISAgICAgICAg ICAgICAgICAgICAgIFsiUHJldmlvdXMgaXRlbSIgICAgICAgIHRvZG8tYmFja3dhcmQtaXRlbSB0 XQogICAgICAgICAgICAgICAgICAgICAgIi0tLSIKICAgICAgICAgICAgICAgICAgICAgIFsiU2F2 ZSIgICAgICAgICAgICAgICAgIHRvZG8tc2F2ZSB0XQogICAgICAgICAgICAgICAgICAgICAgWyJT YXZlIFRvcCBQcmlvcml0aWVzIiAgdG9kby1zYXZlLXRvcC1wcmlvcml0aWVzIHRdCiAgICAgICAg ICAgICAgICAgICAgICAiLS0tIgogICAgICAgICAgICAgICAgICAgICAgWyJRdWl0IiAgICAgICAg ICAgICAgICAgdG9kby1xdWl0IHRdCiAgICAgICAgICAgICAgICAgICAgICApKQogIAogIDs7IEFz IGNhbGVuZGFyIHJlYWRzIC50b2RvLWRvIGJlZm9yZSB0b2RvLW1vZGUgaXMgbG9hZGVkLgogIDs7 OyMjI2F1dG9sb2FkCiAgKGRlZnVuIHRvZG8tbW9kZSAoKQotLS0gMTUzOCwxNjM4IC0tLS0KICAg ICJHZW5lcmF0ZSBhbiBhbGlzdCBmb3IgdXNlIGluIGBjb21wbGV0aW5nLXJlYWQnIGZyb20gYHRv ZG8tY2F0ZWdvcmllcycuIgogICAgKG1hcGNhciAjJ2xpc3QgdG9kby1jYXRlZ29yaWVzKSkKICAK KyAoZGVmdW4gdG9kby1pdGVtLXNlcGFyYXRvci1wICgpCisgICAiUmV0dXJuIG5vbi1uaWwgaWYg cG9pbnQgaXMgd2l0aGluIGEgVE9ETyBpdGVtIHNlcGFyYXRvciBzdHJpbmcuIgorICAgKHVubGVz cyAoc3RyaW5nLWVxdWFsIHRvZG8taXRlbS1zZXBhcmF0b3IgIlxuIikKKyAgICAgKHN0cmluZy1t YXRjaCB0b2RvLWl0ZW0tc2VwYXJhdG9yICh0b2RvLWl0ZW0tc3RyaW5nKSAwKSkpCisgCisgKGRl ZnVuIHRvZG8taXRlbS1zdHJpbmctcCAoKQorICAgIlJldHVybiBub24tbmlsIGlmIHBvaW50IGlz IG9uIGEgVE9ETyBpdGVtLiIKKyAgICh1bmxlc3MgKG9yICh0b2RvLWl0ZW0tc2VwYXJhdG9yLXAp IChlb2JwKSkKKyAgICAgKG9yIChsb29raW5nLWF0IChyZWdleHAtcXVvdGUgdG9kby1wcmVmaXgp KQorIAkoc2F2ZS1leGN1cnNpb24KKyAJICAoZ290by1jaGFyICh0b2RvLWl0ZW0tZW5kKSkKKyAJ ICAobG9va2luZy1hdCAocmVnZXhwLXF1b3RlIHRvZG8taXRlbS1zZXBhcmF0b3IpKSkKKyAJKHRv ZG8tbGFzdC1pbi1jYXRlZ29yeS1wKSkpKQorIAorIChkZWZ1biB0b2RvLWZpcnN0LWluLWNhdGVn b3J5LXAgKCkKKyAgICJSZXR1cm4gbm9uLW5pbCBpZiBwb2ludCBpcyBvbiB0aGUgY3VycmVudCBm aXJzdCBpdGVtIGluIHRoZSBjYXRlZ29yeS4iCisgICAoYW5kICh0b2RvLWl0ZW0tc3RyaW5nLXAp CisgICAgICAgIChzYXZlLWV4Y3Vyc2lvbgorIAkgKGVuZC1vZi1saW5lKQorIAkgKGFuZCAocmUt c2VhcmNoLWJhY2t3YXJkIChyZWdleHAtcXVvdGUgdG9kby1wcmVmaXgpIG5pbCB0KQorIAkgICAg ICAobm90IChyZS1zZWFyY2gtYmFja3dhcmQgKHJlZ2V4cC1xdW90ZSB0b2RvLXByZWZpeCkgbmls IHQpKSkpKSkKKyAKKyAoZGVmdW4gdG9kby1sYXN0LWluLWNhdGVnb3J5LXAgKCkKKyAgICJSZXR1 cm4gbm9uLW5pbCBpZiBwb2ludCBpcyBvbiB0aGUgY3VycmVudCBsYXN0IGl0ZW0gaW4gdGhlIGNh dGVnb3J5LiIKKyAgICh1bmxlc3MgKGVvYnApCisgICAgIChzYXZlLWV4Y3Vyc2lvbgorICAgICAg IChlbmQtb2YtbGluZSkKKyAgICAgICAocmUtc2VhcmNoLWJhY2t3YXJkIChyZWdleHAtcXVvdGUg dG9kby1wcmVmaXgpIG5pbCB0KQorICAgICAgIChlbmQtb2YtbGluZSkKKyAgICAgICAobm90IChy ZS1zZWFyY2gtZm9yd2FyZCAocmVnZXhwLXF1b3RlIHRvZG8tcHJlZml4KSBuaWwgdCkpKSkpCisg CisgKGRlZnVuIHRvZG8tY291bnQtaXRlbXMgKCkKKyAgICJSZXR1cm4gbnVtYmVyIG9mIHVuZmls ZWQgaXRlbXMgaW4gdGhlIGN1cnJlbnQgY2F0ZWdvcnkuIgorICAgKGdvdG8tY2hhciAocG9pbnQt bWluKSkKKyAgIChsZXQgKChjb3VudCAwKSkKKyAgICAgKHNhdmUtZXhjdXJzaW9uCisgICAgICAg KHdoaWxlIChub3QgKGVvYnApKQorIAkocmUtc2VhcmNoLWZvcndhcmQgKGNvbmNhdCAiXiIgdG9k by1wcmVmaXgpKQorIAkoc2V0cSBjb3VudCAoMSsgY291bnQpKQorIAkoZ290by1jaGFyICgxKyAo dG9kby1pdGVtLWVuZCkpKSkKKyAgICAgY291bnQpKSkKKyAKICA7OyAtLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0KICAKICAoZWFzeS1tZW51LWRlZmluZSB0b2RvLW1lbnUgdG9kby1tb2RlLW1hcCAiVG9kbyBN ZW51IgogICAgICAgICAgICAgICAgICAgICcoIlRvZG8iCiEgCQkgICAgWyJTaG93IENhdGVnb3Jp ZXMiICAgICAgdG9kby1kaXNwbGF5LWNhdGVnb3JpZXMgdF0KISAgICAgICAgICAgICAgICAgICAg IFsiTmV4dCBDYXRlZ29yeSIgICAgICAgIHRvZG8tZm9yd2FyZC1jYXRlZ29yeSB0XQohICAgICAg ICAgICAgICAgICAgICAgWyJQcmV2aW91cyBDYXRlZ29yeSIgICAgdG9kby1iYWNrd2FyZC1jYXRl Z29yeSB0XQohICAgICAgICAgICAgICAgICAgICAgWyJKdW1wIHRvIENhdGVnb3J5IiAgICAgdG9k by1qdW1wLXRvLWNhdGVnb3J5IHRdCiEgCQkgICAgWyJSZW5hbWUgQ2F0ZWdvcnkiICAgICAgdG9k by1yZW5hbWUtY2F0ZWdvcnkgdF0KISAJCSAgICBbIkFkZCBOZXcgQ2F0ZWdvcnkiICAgICB0b2Rv LWFkZC1jYXRlZ29yeSB0XQohIAkJICAgIFsiRGVsZXRlIENhdGVnb3J5IiAgICAgIHRvZG8tZGVs ZXRlLWNhdGVnb3J5IHRdCiEgICAgICAgICAgICAgICAgICAgICBbIlNob3cgVG9wIFByaW9yaXR5 IEl0ZW1zIiB0b2RvLXRvcC1wcmlvcml0aWVzIHRdCiEgICAgICAgICAgICAgICAgICAgICBbIlBy aW50IENhdGVnb3JpZXMiICAgICB0b2RvLXByaW50IHRdCiAgICAgICAgICAgICAgICAgICAgICAi LS0tIgohICAgICAgICAgICAgICAgICAgICAgWyJFZGl0IEl0ZW0iICAgICAgICAgICAgdG9kby1l ZGl0LWl0ZW0gdF0KISAgICAgICAgICAgICAgICAgICAgIFsiRmlsZSBJdGVtIiAgICAgICAgICAg IHRvZG8tZmlsZS1pdGVtIHRdCiEgICAgICAgICAgICAgICAgICAgICBbIkZpbGUgSXRlbSB1bmRl ciBDYXRlZ29yeSIgdG9kby1maWxlLWl0ZW0tdW5kZXItY2F0IHRdCiEgCQkgICAgWyJEaXNwbGF5 IEZpbGVkIEl0ZW1zIGluIENhdGVnb3J5IiB0b2RvLWRpc3BsYXktZmlsZWQtaXRlbXMtdW5kZXIt Y2F0IHRdCiEgICAgICAgICAgICAgICAgICAgICBbIkluc2VydCBOZXcgSXRlbSIgICAgICB0b2Rv LWluc2VydC1pdGVtIHRdCiEgICAgICAgICAgICAgICAgICAgICBbIkluc2VydCBOZXcgSXRlbSBI ZXJlIiB0b2RvLWluc2VydC1pdGVtLWhlcmUgdF0KISAJCSAgICBbIk1vdmUgSXRlbSB0byBDYXRl Z29yeSIgdG9kby1tb3ZlLWl0ZW0gdF0KISAJCSAgICBbIkNoYW5nZSBJdGVtIFNlcGFyYXRvciIg dG9kby1jaGFuZ2UtaXRlbS1zZXAtaW4tY2F0IHRdCiEgCQkgICAgWyJDaGFuZ2UgSXRlbSBQcmVm aXgiICAgdG9kby1jaGFuZ2UtdG9kby1wcmVmaXggdF0KISAJCSAgICBbIlRvZ2dsZSBJdGVtIEhl YWRlciIgICB0b2RvLXRvZ2dsZS1pdGVtLWhlYWRlciB0XQohICAgICAgICAgICAgICAgICAgICAg WyJLaWxsIEl0ZW0iICAgICAgICAgICAgdG9kby1kZWxldGUtaXRlbSB0XQogICAgICAgICAgICAg ICAgICAgICAgIi0tLSIKISAgICAgICAgICAgICAgICAgICAgIFsiTG93ZXIgSXRlbSBQcmlvcml0 eSIgIHRvZG8tbG93ZXItaXRlbSB0XQohICAgICAgICAgICAgICAgICAgICAgWyJSYWlzZSBJdGVt IFByaW9yaXR5IiAgdG9kby1yYWlzZS1pdGVtIHRdCiAgICAgICAgICAgICAgICAgICAgICAiLS0t IgohICAgICAgICAgICAgICAgICAgICAgWyJOZXh0IEl0ZW0iICAgICAgICAgICAgdG9kby1mb3J3 YXJkLWl0ZW0gdF0KISAgICAgICAgICAgICAgICAgICAgIFsiUHJldmlvdXMgSXRlbSIgICAgICAg IHRvZG8tYmFja3dhcmQtaXRlbSB0XQogICAgICAgICAgICAgICAgICAgICAgIi0tLSIKICAgICAg ICAgICAgICAgICAgICAgIFsiU2F2ZSIgICAgICAgICAgICAgICAgIHRvZG8tc2F2ZSB0XQogICAg ICAgICAgICAgICAgICAgICAgWyJTYXZlIFRvcCBQcmlvcml0aWVzIiAgdG9kby1zYXZlLXRvcC1w cmlvcml0aWVzIHRdCiAgICAgICAgICAgICAgICAgICAgICAiLS0tIgorICAgICAgICAgICAgICAg ICAgICAgWyJDdXN0b21pemUiIChjdXN0b21pemUtZ3JvdXAgInRvZG8iKSB0XQorICAgICAgICAg ICAgICAgICAgICAgIi0tLSIKICAgICAgICAgICAgICAgICAgICAgIFsiUXVpdCIgICAgICAgICAg ICAgICAgIHRvZG8tcXVpdCB0XQogICAgICAgICAgICAgICAgICAgICAgKSkKICAKKyAoZWFzeS1t ZW51LWRlZmluZSB0b2RvLWZpbGVkLW1lbnUgdG9kby1maWxlZC1tb2RlLW1hcCAiVG9kbyBGaWxl ZCBNZW51IgorICAgICAgICAgICAgICAgICAgICcoIlRvZG8iCisgICAgICAgICAgICAgICAgICAg ICBbIkVkaXQgSXRlbSIgICAgICAgICAgICB0b2RvLWVkaXQtaXRlbSB0XQorICAgICAgICAgICAg ICAgICAgICAgWyJGaWxlIEl0ZW0iICAgICAgICAgICAgdG9kby1maWxlLWl0ZW0gdF0KKyAJCSAg ICBbIkNoYW5nZSBJdGVtIFNlcGFyYXRvciIgdG9kby1jaGFuZ2UtaXRlbS1zZXAtaW4tY2F0IHRd CisgCQkgICAgWyJUb2dnbGUgSXRlbSBIZWFkZXIiICAgdG9kby10b2dnbGUtaXRlbS1oZWFkZXIg dF0KKyAgICAgICAgICAgICAgICAgICAgIFsiS2lsbCBJdGVtIiAgICAgICAgICAgIHRvZG8tZGVs ZXRlLWl0ZW0gdF0KKyAgICAgICAgICAgICAgICAgICAgIFsiTmV4dCBJdGVtIiAgICAgICAgICAg IHRvZG8tZm9yd2FyZC1pdGVtIHRdCisgICAgICAgICAgICAgICAgICAgICBbIlByZXZpb3VzIEl0 ZW0iICAgICAgICB0b2RvLWJhY2t3YXJkLWl0ZW0gdF0KKyAgICAgICAgICAgICAgICAgICAgIFsi U2F2ZSIgICAgICAgICAgICAgICAgIHRvZG8tc2F2ZSB0XQorICAgICAgICAgICAgICAgICAgICAg WyJRdWl0IiAgICAgICAgICAgICAgICAgdG9kby1raWxsLWJ1ZmZlciB0XQorICAgICAgICAgICAg ICAgICAgICAgKSkKKyAKICA7OyBBcyBjYWxlbmRhciByZWFkcyAudG9kby1kbyBiZWZvcmUgdG9k by1tb2RlIGlzIGxvYWRlZC4KICA7OzsjIyNhdXRvbG9hZAogIChkZWZ1biB0b2RvLW1vZGUgKCkK KioqKioqKioqKioqKioqCioqKiA5MTEsOTIyICoqKioKLS0tIDE2NDAsMTY3OSAtLS0tCiAgCiAg XFx7dG9kby1tb2RlLW1hcH0iCiAgICAoaW50ZXJhY3RpdmUpCisgICAoa2lsbC1hbGwtbG9jYWwt dmFyaWFibGVzKQogICAgKHNldHEgbWFqb3ItbW9kZSAndG9kby1tb2RlKQogICAgKHNldHEgbW9k ZS1uYW1lICJUT0RPIikKKyAgIChtYWtlLWxvY2FsLXZhcmlhYmxlICduZXh0LWxpbmUtYWRkLW5l d2xpbmVzKQorICAgKHNldHEgbmV4dC1saW5lLWFkZC1uZXdsaW5lcyB0KQorICAgKG1ha2UtbG9j YWwtdmFyaWFibGUgJ2J1ZmZlci1yZWFkLW9ubHkpCisgICAoc2V0cSBidWZmZXItcmVhZC1vbmx5 IHRvZG8tYnVmZmVyLXJlYWQtb25seSkKICAgICh1c2UtbG9jYWwtbWFwIHRvZG8tbW9kZS1tYXAp CiAgICAoZWFzeS1tZW51LWFkZCB0b2RvLW1lbnUpCisgICAodG9kby1hZHZpY2UpCiAgICAocnVu LWhvb2tzICd0b2RvLW1vZGUtaG9vaykpCiAgCisgKGRlZnZhciB0b2RvLWRpc2FibGVkLWZ1bmN0 aW9ucyAnKHRvZG8tYWRkLWNhdGVnb3J5IHRvZG8tYmFja3dhcmQtY2F0ZWdvcnkgdG9kby1kZWxl dGUtY2F0ZWdvcnkgdG9kby1kaXNwbGF5LWZpbGVkLWl0ZW1zLXVuZGVyLWNhdCB0b2RvLWRpc3Bs YXktY2F0ZWdvcmllcyB0b2RvLWZpbGUtaXRlbS11bmRlci1jYXQgdG9kby1mb3J3YXJkLWNhdGVn b3J5IHRvZG8taW5zZXJ0LWl0ZW0gdG9kby1pbnNlcnQtaXRlbS1oZXJlIHRvZG8tanVtcC10by1j YXRlZ29yeSB0b2RvLWxvd2VyLWl0ZW0gdG9kby1tb3ZlLWl0ZW0gdG9kby1yYWlzZS1pdGVtIHRv ZG8tcmVuYW1lLWNhdGVnb3J5KQorICAgIkxpc3Qgb2YgVE9ETyBmdW5jdGlvbnMgdG8gYmUgZGlz YWJsZWQgb3V0c2lkZSBvZiB0b2RvLW1vZGUuIikKKyAKKyA7OyBBcyBvZiBFbWFjcyAyMS4xIGBk b2xpc3QnIGlzIGRlZmluZWQgaW4gc3Vici5lbCBpbnN0ZWFkIG9mIGNsLmVsCisgKGlmICg8IGVt YWNzLW1ham9yLXZlcnNpb24gMjEpIChldmFsLXdoZW4tY29tcGlsZSAocmVxdWlyZSAnY2wpKSkK KyAKKyA7OyBUaGFua3MgdG8gQmFycnkgTWFyZ29saW4gPGJhcm1hckBnZW51aXR5Lm5ldD4gYW5k IEtldmluIFJvZGdlcnMKKyA7OyA8a2V2aW5yQGlocy5jb20+LCByZXNwZWN0aXZlbHksIGZvciBo ZWxwIHdpdGggdGhlIGZvcm11bGF0aW9uIG9mCisgOzsgdGhpcyBmdW5jdGlvbiBhbmQgdGhlIGFk dmljZSBpdCBjb250YWlucy4gW3NyYl0KKyA7OzsjIyNhdXRvbG9hZAorIChkZWZ1biB0b2RvLWFk dmljZSAoKQorICAgIkRpc2FibGUgc3BlY2lmaWVkIGZ1bmN0aW9ucyB3aGVuIGNhbGxlZCBvdXRz aWRlIHRvZG8tbW9kZS4iCisgICAoZG9saXN0IChmbiB0b2RvLWRpc2FibGVkLWZ1bmN0aW9ucykK KyAgICAgKGV2YWwgYChkZWZhZHZpY2UgLGZuIChhcm91bmQgdG9kby1kaXNhYmxlIGZpcnN0ICgm cmVzdCBhcmdzKSBhY3RpdmF0ZSkKKyAJICAgICAoaW50ZXJhY3RpdmUpCisgCSAgICAgKGNvbmQg KChub3QgKGVxIG1ham9yLW1vZGUgJ3RvZG8tbW9kZSkpCisgCQkgICAgKGVycm9yICJEaXNhYmxl ZCBpbiAlcyBtb2RlIiBtb2RlLW5hbWUpKQorIAkJICAgKChpbnRlcmFjdGl2ZS1wKQorIAkJICAg IChsZXQgKChwcmVmaXgtYXJnIGN1cnJlbnQtcHJlZml4LWFyZykpCisgCQkgICAgICAoY2FsbC1p bnRlcmFjdGl2ZWx5IChhZC1tYWtlLW9yaWduYW1lIChxdW90ZSAsZm4pKSkpKQorIAkJICAgKHQg YWQtZG8taXQpKSkpKSkKKyAKICAoZXZhbC13aGVuLWNvbXBpbGUKICAgIChkZWZ2YXIgZGF0ZSkK ICAgIChkZWZ2YXIgZW50cnkpKQoqKioqKioqKioqKioqKioKKioqIDkzMSw5MzggKioqKgogIChk ZWZpbmUtZGVyaXZlZC1tb2RlIHRvZG8tZWRpdC1tb2RlIHRleHQtbW9kZSAiVE9ETyBFZGl0Igog ICAgIk1ham9yIG1vZGUgZm9yIGVkaXRpbmcgaXRlbXMgaW4gdGhlIFRPRE8gbGlzdC4KICAKISBc XHt0b2RvLWVkaXQtbW9kZS1tYXB9IikKICAKICA7OzsjIyNhdXRvbG9hZAogIChkZWZ1biB0b2Rv LXNob3cgKCkKICAgICJTaG93IFRPRE8gbGlzdC4iCi0tLSAxNjg4LDE3MzQgLS0tLQogIChkZWZp bmUtZGVyaXZlZC1tb2RlIHRvZG8tZWRpdC1tb2RlIHRleHQtbW9kZSAiVE9ETyBFZGl0IgogICAg Ik1ham9yIG1vZGUgZm9yIGVkaXRpbmcgaXRlbXMgaW4gdGhlIFRPRE8gbGlzdC4KICAKISBcXHt0 b2RvLWVkaXQtbW9kZS1tYXB9IgohICAgKGxvY2FsLXNldC1rZXkgKGtiZCAicSIpICd0b2RvLWtp bGwtYnVmZmVyKQohICAgKGFkZC1ob29rICd0b2RvLWVkaXQtbW9kZS1ob29rICd0dXJuLW9uLWF1 dG8tZmlsbCkpCiEgCiEgKGRlZnVuIHRvZG8tY2F0ZWdvcmllcy1tb2RlICgpCiEgICAiTWFqb3Ig bW9kZSBmb3IgZGlzcGxheWluZyBUT0RPIGNhdGVnb3JpZXMgYW5kIGNob29zaW5nIG9uZSB0byB2 aXNpdC4KICAKKyBcXHt0b2RvLWNhdGVnb3JpZXMtbW9kZS1tYXB9IgorICAgKGludGVyYWN0aXZl KQorICAgKGtpbGwtYWxsLWxvY2FsLXZhcmlhYmxlcykKKyAgICh1c2UtbG9jYWwtbWFwIHRvZG8t Y2F0ZWdvcmllcy1tb2RlLW1hcCkKKyAgIChzZXRxIG1ham9yLW1vZGUgJ3RvZG8tY2F0ZWdvcmll cy1tb2RlKQorICAgKHNldHEgbW9kZS1uYW1lICJUT0RPIGNhdGVnb3JpZXMiKQorICAgKHNldHEg YnVmZmVyLXJlYWQtb25seSB0b2RvLWJ1ZmZlci1yZWFkLW9ubHkpKQorIAorIChkZWZ1biB0b2Rv LWZpbGVkLW1vZGUgKCkKKyAgICJNYWpvciBtb2RlIGZvciBoYW5kbGluZyBmaWxlZCBUT0RPIGl0 ZW1zLgorIAorIFxce3RvZG8tZmlsZWQtbW9kZS1tYXB9IgorICAgKGtpbGwtYWxsLWxvY2FsLXZh cmlhYmxlcykKKyAgIChzZXRxIG1ham9yLW1vZGUgJ3RvZG8tZmlsZWQtbW9kZSkKKyAgIChzZXRx IG1vZGUtbmFtZSAiVE9ETyBGaWxlZCIpCisgICAoc2V0cSBidWZmZXItcmVhZC1vbmx5IHRvZG8t YnVmZmVyLXJlYWQtb25seSkKKyAgICh1c2UtbG9jYWwtbWFwIHRvZG8tZmlsZWQtbW9kZS1tYXAp CisgICAoZWFzeS1tZW51LWFkZCB0b2RvLWZpbGVkLW1lbnUpKQorIAorIChkZWZ1biB0b2RvLWtp bGwtYnVmZmVyICgmcmVzdCBpZ25vcmUpCisgICAiS2lsbCB0aGUgY3VycmVudCBidWZmZXIgYW5k IHJldHVybiB0byB0aGUgVE9ETyBpdGVtIGxpc3QuCisgVXNlZCBieSBgdG9kby1jYXRlZ29yaWVz LW1vZGUnLCBgdG9kby1lZGl0LW1vZGUnLCBhbmQgYHRvZG8tZmlsZWQtbW9kZScuCisgSUdOT1JF IGFyZ3VtZW50cy4iCisgICAoaW50ZXJhY3RpdmUpCisgICAoaWYgKG9yIChlcSBtYWpvci1tb2Rl ICd0b2RvLWNhdGVnb3JpZXMtbW9kZSkKKyAJICAoZXEgbWFqb3ItbW9kZSAndG9kby1lZGl0LW1v ZGUpCisgCSAgKGVxIG1ham9yLW1vZGUgJ3RvZG8tZmlsZWQtbW9kZSkpCisgICAgICAgKHByb2du CisgCShraWxsLWJ1ZmZlciAoY3VycmVudC1idWZmZXIpKQorIAkoc3dpdGNoLXRvLWJ1ZmZlciAo ZmlsZS1uYW1lLW5vbmRpcmVjdG9yeSB0b2RvLWZpbGUtZG8pKQorIAkoZGVsZXRlLW90aGVyLXdp bmRvd3MpCisgCShtZXNzYWdlICIiKSkKKyAgICAgKGVycm9yICIlcyBjYW5ub3QgYmUgZXhlY3V0 ZWQgaW4gJXMiIHRoaXMtY29tbWFuZCBtYWpvci1tb2RlKSkpCisgIAogIDs7OyMjI2F1dG9sb2Fk CiAgKGRlZnVuIHRvZG8tc2hvdyAoKQogICAgIlNob3cgVE9ETyBsaXN0LiIKKioqKioqKioqKioq KioqCioqKiA5NTYsOTYzICoqKioKICAgICJTZXQgdXAgdGhpbmdzIHRvIHdvcmsgcHJvcGVybHkg aW4gVE9ETyBtb2RlLiIKICAgIChmaW5kLWZpbGUgdG9kby1maWxlLWRvKQogICAgKGVyYXNlLWJ1 ZmZlcikKISAgICh0b2RvLW1vZGUpCiEgICAodG9kby1hZGQtY2F0ZWdvcnkgIlRvZG8iKSkKICAK ICAocHJvdmlkZSAndG9kby1tb2RlKQogIAotLS0gMTc1MiwxNzY0IC0tLS0KICAgICJTZXQgdXAg dGhpbmdzIHRvIHdvcmsgcHJvcGVybHkgaW4gVE9ETyBtb2RlLiIKICAgIChmaW5kLWZpbGUgdG9k by1maWxlLWRvKQogICAgKGVyYXNlLWJ1ZmZlcikKISAgIChsZXQgKChmaXJzdCAocmVhZC1mcm9t LW1pbmlidWZmZXIgIkVudGVyIGEgbmV3IGNhdGVnb3J5OiAiKSkpCiEgICAgICh0b2RvLWFkZC1j YXRlZ29yeSBmaXJzdCkpCiEgICAod3JpdGUtZmlsZSB0b2RvLWZpbGUtZG8pCiEgICAodG9kby1t b2RlKSkKISAKISA7OyBtYWtlIHN1cmUgdXNlcidzIHRvZG8tbW9kZSBjdXN0b21pemF0aW9ucyBh cmUgdXNlZAohICh1bmxlc3MgKG51bGwgY3VzdG9tLWZpbGUpIChsb2FkLWZpbGUgY3VzdG9tLWZp bGUpKQogIAogIChwcm92aWRlICd0b2RvLW1vZGUpCiAgCg== --=-=-=--