X-Recipient: archive-cygwin AT delorie DOT com X-SWARE-Spam-Status: No, hits=-1.8 required=5.0 tests=AWL,BAYES_00,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,FREEMAIL_FROM,RCVD_IN_DNSWL_NONE,T_TO_NO_BRKTS_FREEMAIL X-Spam-Check-By: sourceware.org MIME-Version: 1.0 In-Reply-To: References: From: Gwen Morse Date: Fri, 22 Oct 2010 04:21:53 -0400 Message-ID: Subject: Re: tinyfugue with python won't compile under cygwin (1.7.7) on Windows XP To: cygwin AT cygwin DOT com Content-Type: multipart/mixed; boundary=001485eba798f6513604933056d1 X-IsSubscribed: yes Mailing-List: contact cygwin-help AT cygwin DOT com; run by ezmlm Precedence: bulk List-Id: List-Unsubscribe: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: cygwin-owner AT cygwin DOT com Mail-Followup-To: cygwin AT cygwin DOT com Delivered-To: mailing list cygwin AT cygwin DOT com --001485eba798f6513604933056d1 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable On Wed, Oct 6, 2010 at 4:21 AM, Csaba Raduly wrote: > On Sat, Sep 25, 2010 at 12:33 PM, Gwen Morse =A0wrote: >>> On Wed, Sep 15, 2010 at 5:46 AM, Gwen Morse =A0wrote: >> I'm trying to build tinyfugue with python from source, > (snip) > In line 157 of /usr/include/wchar.h there's the declaration of wprintf. > I suspect there's a > > #define wprintf tf_wprintf > > in Tinyfuge somewhere. This sounds like a bad idea and it finally bit > you: there is no wprintf in wchar.h of Cygwin 1.5, but there *is* one > in Cygwin 1.7 and now it clashes with Tinyfuge's macro. > > I'd suggest removing the wprintf macro in Tinyfuge and manually > replacing all occurrences of wprintf with tf_wprintf. Thank you for your answer, I edited your email address out of the reply above by hand. Recap: I'm having trouble compiling tinyfuge, a mud client, under cygwin 1.7, with an add-on patch that allows the inclusion of a python library. I was getting some error messages, posted them here, and was told it was probably an issue with using "wprinttf" instead of "tf_wprinttf". I understand that much, so, I went back to the tinyfugue source and the python patch and ran the patch with --dry-run to see what would happen. The dry run shows me a bunch of successful-looking "patching" lines. patching file configure patching file configure.in patching file help/commands/python_call.html patching file help/commands/python.html patching file help/commands/python_kill.html patching file help/commands/python_load.html patching file help/topics/tf_module.html patching file help/topics/tf_python.html patching file README.python patching file src/cmdlist.h patching file src/command.c patching file src/command.h patching file src/expr.c patching file src/funclist.h patching file src/main.c patching file src/malloc.c patching file src/socket.c patching file src/tfio.h patching file src/tfpython.c patching file src/tfpython.h patching file src/vars.mak patching file tf-lib/config.py patching file tf-lib/diffedit.py patching file tf-lib/tf4.py patching file tf-lib/tf.py patching file tf-lib/tfutil.py patching file tf-lib/urlwatch.py patching file .tfrc I just wanted to make sure the unedited patch is still good and it looks like it is. So, I opened the patch file, and found these lines: +// wprintf is already in /usr/include/wchar.h, which python includes +#define wprintf tf_wprintf extern void wprintf(const char *fmt, ...) format_printf(1, 2); I removed the top two and left the last (the top looks like a comment but I removed it just to be safe). Then, I also did a search/replace and replaced all "wprinttf" with "tf_wprintf" so, I ended up with: extern void tf_wprintf(const char *fmt, ...) format_printf(1, 2); and then all the other occurrences of wprinttf had tf_ in front of them as = well. I get a series of "n of x hunks FAILED" messages when I do a dry run with the edited patch. I also tried keeping the define (thinking maybe tf_wprinttf still needs to be defined). +#define tf_wprintf extern void tf_wprintf(const char *fmt, ...) format_printf(1, 2); I get the same hunks messages at that point. Now it looks like this: $ patch -p 1 -u -N --dry-run < tf-python-patch.txt patching file configure patching file configure.in patching file help/commands/python_call.html patching file help/commands/python.html patching file help/commands/python_kill.html patching file help/commands/python_load.html patching file help/topics/tf_module.html patching file help/topics/tf_python.html patching file README.python patching file src/cmdlist.h patching file src/command.c Hunk #3 FAILED at 524. Hunk #4 FAILED at 532. Hunk #6 FAILED at 591. 3 out of 7 hunks FAILED -- saving rejects to file src/command.c.rej patching file src/command.h patching file src/expr.c patching file src/funclist.h patching file src/main.c patching file src/malloc.c patching file src/socket.c patching file src/tfio.h patch: **** malformed patch at line 696: diff -rNu -x .svn -x config.log -x= conf ig.status -x tf-help -x Makefile -x chartables.c -x tfconfig.h -x tfdefs.h = -x '* .build' -x '*.bak' -x '*.idx' -x '*.o' -x '*.pyc' -x html2tf -x default -x = makeh elp -x tf -x dftables -x 'libpcre*' -x html2tif tf-50b8-clean/src/tfpython.= c tf- 50b8-py/src/tfpython.c I'm pretty sure the problem is that I'm editing the original patch incorrectly. I don't really know how to edit patches, *applying* them is as fancy as I get :) . I don't know any C. The original author of the patch does not respond to email. I attached a copy of the patch. I would appreciate any pointers on editing the wprintf macro correctly to tf_wprintf . Alternately, I have another set of source code with the patch pre-applied. Is there a reasonably painless way to edit the already-patched files and change them that way? It just seemed to me that it would be easier to work with one file (the patch) than multiple files (the patched source code). If I need to ask on a different list (because this has turned into a question about C macros) it would really help if someone could point me to a mailing list that would be likely to answer. --001485eba798f6513604933056d1 Content-Type: application/octet-stream; name=tf-python-patch Content-Disposition: attachment; filename=tf-python-patch Content-Transfer-Encoding: base64 X-Attachment-Id: f_gfkprwyh0 ZGlmZiAtck51IC14IC5zdm4gLXggY29uZmlnLmxvZyAteCBjb25maWcuc3Rh dHVzIC14IHRmLWhlbHAgLXggTWFrZWZpbGUgLXggY2hhcnRhYmxlcy5jIC14 IHRmY29uZmlnLmggLXggdGZkZWZzLmggLXggJyouYnVpbGQnIC14ICcqLmJh aycgLXggJyouaWR4JyAteCAnKi5vJyAteCAnKi5weWMnIC14IGh0bWwydGYg LXggZGVmYXVsdCAteCBtYWtlaGVscCAteCB0ZiAteCBkZnRhYmxlcyAteCAn bGlicGNyZSonIC14IGh0bWwydGlmIHRmLTUwYjgtY2xlYW4vY29uZmlndXJl IHRmLTUwYjgtcHkvY29uZmlndXJlCi0tLSB0Zi01MGI4LWNsZWFuL2NvbmZp Z3VyZQkyMDA4LTAxLTA1IDE1OjM5OjQwLjAwMDAwMDAwMCAtMDgwMAorKysg dGYtNTBiOC1weS9jb25maWd1cmUJMjAwOC0wMS0xMSAxNToxNjozMy4wMDAw MDAwMDAgLTA4MDAKQEAgLTg1Nyw2ICs4NTcsNyBAQAogICAgICAgICAgICAg ICAgICAgICAgICAgICBOQU1FPUJJTkRJUi90ZgogICAtLWVuYWJsZS1jb3Jl ICAgICAgICAgICBlbmFibGUgZGVidWdnaW5nIGNvcmUgZmlsZXMKICAgLS1k aXNhYmxlLXNzbCAgICAgICAgICAgZGlzYWJsZSBTU0wgc3VwcG9ydAorICAt LWRpc2FibGUtcHl0aG9uICAgICAgICBkaXNhYmxlIHB5dGhvbiBzY3JpcHRp bmcgc3VwcG9ydAogICAtLWVuYWJsZS1nZXRhZGRyaW5mbyAgICBlbmFibGUg Z2V0YWRkcmluZm8oKSAoaWYgY29uZmlndXJlIGNvbXBsYWlucykKICAgLS1k aXNhYmxlLWdldGFkZHJpbmZvICAgZGlzYWJsZSBnZXRhZGRyaW5mbygpIChp bXBsaWVzIC0tZGlzYWJsZS1pbmV0NikKICAgLS1kaXNhYmxlLWluZXQ2ICAg ICAgICAgZGlzYWJsZSBJUHY2IHN1cHBvcnQKQEAgLTEzNzMsNiArMTM3NCwx MyBAQAogZWxzZQogICBlbmFibGVfc3NsPXllcwogZmk7CisjIENoZWNrIHdo ZXRoZXIgLS1lbmFibGUtcHl0aG9uIG9yIC0tZGlzYWJsZS1weXRob24gd2Fz IGdpdmVuLgoraWYgdGVzdCAiJHtlbmFibGVfcHl0aG9uK3NldH0iID0gc2V0 OyB0aGVuCisgIGVuYWJsZXZhbD0iJGVuYWJsZV9weXRob24iCisKK2Vsc2UK KyAgZW5hYmxlX3B5dGhvbj15ZXMKK2ZpOwogIyBDaGVjayB3aGV0aGVyIC0t ZW5hYmxlLWdldGFkZHJpbmZvIG9yIC0tZGlzYWJsZS1nZXRhZGRyaW5mbyB3 YXMgZ2l2ZW4uCiBpZiB0ZXN0ICIke2VuYWJsZV9nZXRhZGRyaW5mbytzZXR9 IiA9IHNldDsgdGhlbgogICBlbmFibGV2YWw9IiRlbmFibGVfZ2V0YWRkcmlu Zm8iCkBAIC01NTAwLDYgKzU1MDgsMTQgQEAKICAgICBmaQogZmkKIAoraWYg dGVzdCAiJGVuYWJsZV9weXRob24iID0gInllcyI7IHRoZW4KKyAgIENGTEFH Uz0iJENGTEFHUyAtRFRGUFlUSE9OIgorICAgcHlpbmM9YHB5dGhvbiAtYyAi aW1wb3J0IGRpc3R1dGlscy5zeXNjb25maWc7IHByaW50IGRpc3R1dGlscy5z eXNjb25maWcuZ2V0X3B5dGhvbl9pbmMoKSJgCisgICBweXZlcj1gcHl0aG9u IC1jICJpbXBvcnQgZGlzdHV0aWxzLnN5c2NvbmZpZzsgcHJpbnQgZGlzdHV0 aWxzLnN5c2NvbmZpZy5nZXRfcHl0aG9uX3ZlcnNpb24oKSJgCisgICBDUFBG TEFHUz0iJENQUEZMQUdTIC1JJHB5aW5jIgorICAgTElCUz0iJExJQlMgLWxw eXRob24ke3B5dmVyfSIKK2ZpCisKIAogdGVybWluYWxfaGFyZGNvZGU9IlRF Uk1fdnQxMDAiOwogCmRpZmYgLXJOdSAteCAuc3ZuIC14IGNvbmZpZy5sb2cg LXggY29uZmlnLnN0YXR1cyAteCB0Zi1oZWxwIC14IE1ha2VmaWxlIC14IGNo YXJ0YWJsZXMuYyAteCB0ZmNvbmZpZy5oIC14IHRmZGVmcy5oIC14ICcqLmJ1 aWxkJyAteCAnKi5iYWsnIC14ICcqLmlkeCcgLXggJyoubycgLXggJyoucHlj JyAteCBodG1sMnRmIC14IGRlZmF1bHQgLXggbWFrZWhlbHAgLXggdGYgLXgg ZGZ0YWJsZXMgLXggJ2xpYnBjcmUqJyAteCBodG1sMnRpZiB0Zi01MGI4LWNs ZWFuL2NvbmZpZ3VyZS5pbiB0Zi01MGI4LXB5L2NvbmZpZ3VyZS5pbgotLS0g dGYtNTBiOC1jbGVhbi9jb25maWd1cmUuaW4JMjAwOC0wMS0wNSAxNTozOTo0 MC4wMDAwMDAwMDAgLTA4MDAKKysrIHRmLTUwYjgtcHkvY29uZmlndXJlLmlu CTIwMDgtMDEtMTEgMTU6MTY6MzMuMDAwMDAwMDAwIC0wODAwCkBAIC01NCw2 ICs1NCwxMCBAQAogQUNfQVJHX0VOQUJMRShzc2wsCiBbICAtLWRpc2FibGUt c3NsICAgICAgICAgICBkaXNhYmxlIFNTTCBzdXBwb3J0XSwKICAgICAsIGVu YWJsZV9zc2w9eWVzKQorIyBURlBZVEhPTiBwYXRjaAorQUNfQVJHX0VOQUJM RShweXRob24sCitbICAtLWRpc2FibGUtcHl0aG9uICAgICAgICBkaXNhYmxl IHB5dGhvbiBpbnRlcnByZXRlcl0sCisgICAgLCBlbmFibGVfcHl0aG9uPXll cykKIEFDX0FSR19FTkFCTEUoZ2V0YWRkcmluZm8sCiBbICAtLWVuYWJsZS1n ZXRhZGRyaW5mbyAgICBlbmFibGUgZ2V0YWRkcmluZm8oKSAoaWYgY29uZmln dXJlIGNvbXBsYWlucykKICAgLS1kaXNhYmxlLWdldGFkZHJpbmZvICAgZGlz YWJsZSBnZXRhZGRyaW5mbygpIChpbXBsaWVzIC0tZGlzYWJsZS1pbmV0Nild LApAQCAtODUsNyArODksNiBAQAogQUNfQVJHX0VOQUJMRShmbG9hdCwKIFsg IC0tZGlzYWJsZS1mbG9hdCAgICAgICAgIGRpc2FibGUgZmxvYXRpbmcgcG9p bnQgYXJpdGhtZXRpYyBhbmQgZnVuY3Rpb25zXSwKICAgICAsIGVuYWJsZV9m bG9hdD15ZXMpCi0KIEFDX0FSR19XSVRIKGluY2RpcnMsCiBbICAtLXdpdGgt aW5jZGlycz1ESVJTICAgICBzZWFyY2ggZm9yIGluY2x1ZGUgZmlsZXMgaW4g RElSU10pCiBBQ19BUkdfV0lUSChsaWJkaXJzLApAQCAtMzI0LDYgKzMyNywx OSBAQAogICAgIGZpCiBmaQogCisjIHB5dGhvbiBwYXRjaAoraWYgdGVzdCAi JGVuYWJsZV9weXRob24iID0gInllcyI7IHRoZW4KKyAgIEFDX01TR19OT1RJ Q0UoWy9weXRob24gZW5hYmxlZF0pCisgICBBQ19DSEVDS19IRUFERVIoIFB5 dGhvbi5oLCAsIGJyZWFrICkKKyAgIENGTEFHUz0iJENGTEFHUyAtRFRGUFlU SE9OIgorICAgcHlpbmM9YHB5dGhvbiAtYyAiaW1wb3J0IGRpc3R1dGlscy5z eXNjb25maWc7IHByaW50IGRpc3R1dGlscy5zeXNjb25maWcuZ2V0X3B5dGhv bl9pbmMoKSJgCisgICBweXZlcj1gcHl0aG9uIC1jICJpbXBvcnQgZGlzdHV0 aWxzLnN5c2NvbmZpZzsgcHJpbnQgZGlzdHV0aWxzLnN5c2NvbmZpZy5nZXRf cHl0aG9uX3ZlcnNpb24oKSJgCisgICBDUFBGTEFHUz0iJENQUEZMQUdTIC1J JHB5aW5jIgorICAgTElCUz0iJExJQlMgLWxweXRob24ke3B5dmVyfSIKK2Vs c2UKKyAgIEFDX01TR19OT1RJQ0UoWy9weXRob24gZGlzYWJsZWRdKQorZmkK KwogZG5sICMjIyB0ZXN0IHRlcm1jYXAuCiBkbmwgIyBBdCBsZWFzdCBvbmUg c3lzdGVtIChSZWQgSGF0IExpbnV4KSBoYXMgYSBicm9rZW4gbmN1cnNlcyBh bmQgYSB3b3JraW5nCiBkbmwgIyB0ZXJtY2FwLCBzbyB3ZSB0cnkgdGVybWNh cCBiZWZvcmUgbmN1cnNlcy4KZGlmZiAtck51IC14IC5zdm4gLXggY29uZmln LmxvZyAteCBjb25maWcuc3RhdHVzIC14IHRmLWhlbHAgLXggTWFrZWZpbGUg LXggY2hhcnRhYmxlcy5jIC14IHRmY29uZmlnLmggLXggdGZkZWZzLmggLXgg JyouYnVpbGQnIC14ICcqLmJhaycgLXggJyouaWR4JyAteCAnKi5vJyAteCAn Ki5weWMnIC14IGh0bWwydGYgLXggZGVmYXVsdCAteCBtYWtlaGVscCAteCB0 ZiAteCBkZnRhYmxlcyAteCAnbGlicGNyZSonIC14IGh0bWwydGlmIHRmLTUw YjgtY2xlYW4vaGVscC9jb21tYW5kcy9weXRob25fY2FsbC5odG1sIHRmLTUw YjgtcHkvaGVscC9jb21tYW5kcy9weXRob25fY2FsbC5odG1sCi0tLSB0Zi01 MGI4LWNsZWFuL2hlbHAvY29tbWFuZHMvcHl0aG9uX2NhbGwuaHRtbAkxOTY5 LTEyLTMxIDE2OjAwOjAwLjAwMDAwMDAwMCAtMDgwMAorKysgdGYtNTBiOC1w eS9oZWxwL2NvbW1hbmRzL3B5dGhvbl9jYWxsLmh0bWwJMjAwOC0wMS0xMSAx NToxNjozMi4wMDAwMDAwMDAgLTA4MDAKQEAgLTAsMCArMSw0MyBAQAorPHRp dGxlPlRpbnlGdWd1ZTogL3B5dGhvbl9jYWxsPC90aXRsZT4KKzwhLS0iQC9w eXRob25fY2FsbCItLT4KKzxoMT4vcHl0aG9uX2NhbGw8L2gxPgorCis8cD4K KyAgVXNhZ2U6CisKKzxwPgorICA8YSBocmVmPSIuLi9jb21tYW5kcy9weXRo b25fY2FsbC5odG1sIj4vcHl0aG9uX2NhbGw8L2E+IDxpPm1vZHVsZTwvaT4u PGk+ZnVuY3Rpb248L2k+IDxpPmFyZ3VtZW50PC9pPgorCis8cD4KKyAgVGhp cyBjYWxscyBhIGZ1bmN0aW9uIGluIGEgcHl0aG9uIG1vZHVsZSB5b3UgaGF2 ZSBsb2FkZWQgd2l0aAorICA8YSBocmVmPSIuLi9jb21tYW5kcy9weXRob25f bG9hZC5odG1sIj4vcHl0aG9uX2xvYWQ8L2E+LgorICBTaW5jZSB0aGUgY29k ZSBpcyBhbHJlYWR5IGJ5dGUgY29tcGlsZWQsIHRoaXMgaXMgdGhlIGZhc3Rl c3Qgd2F5IHRvIGV4ZWN1dGUKKyAgcHl0aG9uLiBBbmQgc2luY2UgdGhlIGVu dGlyZSByZXN0IG9mIHRoZSBsaW5lIGlzIGNvbnNpZGVyZWQgdGhlIGFyZ3Vt ZW50LAorICB5b3UgZG9uJ3QgaGF2ZSB0byB3b3JyeSBhYm91dCBxdW90aW5n IGlzc3Vlcy4KKworPHA+CisgIEV4YW1wbGU6PGJyPgorICA8Y29kZT48YSBo cmVmPSIuLi9jb21tYW5kcy9weXRob25fbG9hZC5odG1sIj4vcHl0aG9uX2xv YWQ8L2E+IG15bW9kdWxlPC9jb2RlPjxicj4KKyAgPGNvZGU+PGEgaHJlZj0i Li4vY29tbWFuZHMvZGVmLmh0bWwiPi9kZWY8L2E+IC1tZ2xvYiAtcDlGcSAt dGhvd2R5IGhvd2R5ID0gCisgIDxhIGhyZWY9Ii4uL2NvbW1hbmRzL3B5dGhv bl9jYWxsLmh0bWwiPi9weXRob25fY2FsbDwvYT4gbXltb2R1bGUuaG93ZHkg JXsqfTwvY29kZT4KKworPHA+CisgIFRoaXMgd2lsbCBjYWxsIG15bW9kdWxl Lmhvd2R5KCkgd2l0aCB0aGUgZW50aXJlIGNvbnRlbnRzIG9mIHRoZSB0cmln Z2VyaW5nCisgIGxpbmUgYXMgdGhlIGFyZ3VtZW50IHdoZW5ldmVyIGl0IG1h dGNoZXMgYSAnaG93ZHknIGluIGEgbGluZS4gVGhlIHJlYWwgcG93ZXIKKyAg Y29tZXMgd2hlbiB1c2luZyBUaW55RnVndWUncyBwb3dlcmZ1bCB0cmlnZ2Vy aW5nIGFuZCBtYXRjaGluZyBzeXN0ZW1zIGFuZAorICB1c2luZyBhIGRpZmZl cmVudCBtZXRob2QgZm9yIGVhY2ggdHJpZ2dlciB0eXBlLgorCis8cD4KKyAg Rm9yIGEgbW9yZSBjb21wbGV4IGV4YW1wbGUsIHNlZSB0aGUgaW5jbHVkZWQg PGI+dGYtbGliL3VybHdhdGNoLnB5PC9iPiB3aGljaCBjYXRjaGVzCisgIGFs bCB1cmxzIGdvaW5nIGJ5IGFuZCB3cml0ZXMgYSB1cmwgbGF1bmNoaW5nIHBh Z2UuCisKKzxwPgorICBTZWUgPGEgaHJlZj0iLi4vdG9waWNzL3RmX3B5dGhv bi5odG1sIj50ZiBweXRob248L2E+IGZvciBjYWxsaW5nIGJhY2sgaW50byBU aW55RnVndWUuCisKKzxwPgorPCEtLSBFTkQgLS0+Cis8aHI+CisgIDxhIGhy ZWY9Ii4vIj5CYWNrIHRvIGluZGV4PC9hPjxicj4KKyAgPGEgaHJlZj0iaHR0 cDovL3RpbnlmdWd1ZS5zb3VyY2Vmb3JnZS5uZXQvIj5CYWNrIHRvIHRmIGhv bWUgcGFnZTwvYT4KKzxocj4KKyAgPGEgaHJlZj0iLi4vdG9waWNzL2NvcHly aWdodC5odG1sIj5Db3B5cmlnaHQ8L2E+ICZjb3B5OyAxOTk1LCAxOTk2LCAx OTk3LCAxOTk4LCAxOTk5LCAyMDAyLCAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2 LTIwMDcgPGEgaHJlZj0iaHR0cDovL3NvdXJjZWZvcmdlLm5ldC91c2Vycy9r ZW5rZXlzLyI+S2VuIEtleXM8L2E+CmRpZmYgLXJOdSAteCAuc3ZuIC14IGNv bmZpZy5sb2cgLXggY29uZmlnLnN0YXR1cyAteCB0Zi1oZWxwIC14IE1ha2Vm aWxlIC14IGNoYXJ0YWJsZXMuYyAteCB0ZmNvbmZpZy5oIC14IHRmZGVmcy5o IC14ICcqLmJ1aWxkJyAteCAnKi5iYWsnIC14ICcqLmlkeCcgLXggJyoubycg LXggJyoucHljJyAteCBodG1sMnRmIC14IGRlZmF1bHQgLXggbWFrZWhlbHAg LXggdGYgLXggZGZ0YWJsZXMgLXggJ2xpYnBjcmUqJyAteCBodG1sMnRpZiB0 Zi01MGI4LWNsZWFuL2hlbHAvY29tbWFuZHMvcHl0aG9uLmh0bWwgdGYtNTBi OC1weS9oZWxwL2NvbW1hbmRzL3B5dGhvbi5odG1sCi0tLSB0Zi01MGI4LWNs ZWFuL2hlbHAvY29tbWFuZHMvcHl0aG9uLmh0bWwJMTk2OS0xMi0zMSAxNjow MDowMC4wMDAwMDAwMDAgLTA4MDAKKysrIHRmLTUwYjgtcHkvaGVscC9jb21t YW5kcy9weXRob24uaHRtbAkyMDA4LTAxLTExIDE1OjE2OjMyLjAwMDAwMDAw MCAtMDgwMApAQCAtMCwwICsxLDYxIEBACis8dGl0bGU+VGlueUZ1Z3VlOiAv cHl0aG9uPC90aXRsZT4KKzwhLS0iQHB5dGhvbiItLT4KKzwhLS0iQC9weXRo b24iLS0+Cis8aDE+cHl0aG9uKCk8L2gxPgorCis8cD4KKyAgRnVuY3Rpb24g VXNhZ2U6CisgIAorPHA+CisgIDxhIGhyZWY9Ii4uL2NvbW1hbmRzL3B5dGhv bi5odG1sIj5weXRob248L2E+KCA8aT5jb21tYW5kPC9pPiApPGJyPgorCis8 cD4KKyAgVGhpcyBleGVjdXRlcyBhIHNpbmdsZSBweXRob24gZXhwcmVzc2lv bi4gSXQgbXVzdCBiZSBhbiBleHByZXNzaW9uIHdpdGggYQorICByZXR1cm4g Y29kZSwgbm90IGEgc3RhdGVtZW50LiBGb3IgaW5zdGFuY2UgJzErMScgaXMg YSBleHByZXNzaW9uIHRoYXQgcmV0dXJucworICAyLCBidXQgJ3ByaW50IDEr MScgaXMgYSBzdGF0ZW1lbnQgYW5kIHdvdWxkIGJlIGlsbGVnYWwuIEl0IHdp bGwgY29udmVydAorICBzdHJpbmcsIGZsb2F0LCBpbnRlZ2VyLCBvciBib29s ZWFuIHJldHVybiB2YWx1ZXMgdG8gZXF1aXZhbGVudCBURiB2YWx1ZXMuCisK KzxwPgorICBFeGFtcGxlOjxicj4gIAorICA8Y29kZT4vdGVzdCBlY2hvKCA8 YSBocmVmPSIuLi9jb21tYW5kcy9weXRob24uaHRtbCI+cHl0aG9uPC9hPigg c3RyY2F0KCInVGhlIGN1cnJlbnQgd29ybGQgaXMgIiwgJHt3b3JsZF9uYW1l fSwgICIuJyIpICkgKTwvY29kZT48YnI+CisgIDxjb2RlPlRoZSBjdXJyZW50 IHdvcmxkIGlzICh1bm5hbWVkMSkuPC9jb2RlPjxicj4KKyAgPGJyPgorICBO b3RlIHRoYXQgcXVvdGluZyBpcyBzbGlnaHRseSB0cmlja3kgaGVyZSAtIHlv dSBoYXZlIHRvIHF1b3RlIG9uY2UgZm9yIFRGJ3Mgc2FrZSwgdGhlbgorICBv bmNlIGZvciBweXRob24uCisKKzxwPgorICBDb21tYW5kIHVzYWdlOgorCis8 cD4KKyAgPGEgaHJlZj0iLi4vY29tbWFuZHMvcHl0aG9uLmh0bWwiPi9QWVRI T048L2E+IFs8aT5jb21tYW5kPC9pPl08YnI+CisKKzxwPgorICBUaGlzIGlu dm9rZXMgdGhlIHB5dGhvbiBpbnRlcnByZXRlciBqdXN0IGFzIGlmIHlvdSB3 ZXJlIGVudGVyaW5nIGNvbW1hbmRzIGF0IGEKKyAgYXQgYSBweXRob24gY2xp LiBFYWNoIGNvbW1hbmQgbXVzdCBiZSBzdGFuZGFsb25lLCBidXQgdGhleSBj YW4gYmUgc3RhdGVtZW50cworICBhbmQgdGhlcmUgaXMgYSBwZXJzaXN0ZW50 IGVudmlyb25tZW50LCBzbyB5b3UgY2FuIGRvIHRoaW5ncyBsaWtlCisKKzxw PgorICA8Y29kZT4vcHl0aG9uIGltcG9ydCBnbG9iPC9jb2RlPjxicj4KKyAg PGNvZGU+L3B5dGhvbiB0Zi5vdXQoICJMb2dmaWxlczogIiArICIsICIuam9p bihnbG9iLmdsb2IoIioubG9nIikpICk8L2NvZGU+PGJyPgorICA8Y29kZT5M b2dmaWxlczogbmF1Z2h0eS5sb2csIG5pY2UubG9nPC9jb2RlPjxicj4KKyAg Cis8cD4KKyAgR2VuZXJhbGx5IHRoaXMgaXMgb25seSB1c2VmdWwgaW4geW91 ciAudGZyYyAtIG9yIG90aGVyIHNjcmlwdCBzZXR1cC4gSXQgaXMgc2xvdyBz aW5jZQorICB0aGUgY29tbWFuZCBoYXMgdG8gYmUgcmVjb21waWxlZCBldmVy eSB0aW1lLCBhbmQgeW91IGRvbid0IGdldCBhbnkgcmV0dXJuIHZhbHVlcy4K KyAgWW91IHdvbid0IHNlZSBhbnkgb3V0cHV0IHVubGVzcyB0aGVyZSdzIGFu IGVycm9yIG9yIHlvdSBleHBsY2l0bHkgaW52b2tlIHRmLm91dCgpLgorCis8 cD4KKyAgU2VlIDxhIGhyZWY9Ii4uL2NvbW1hbmRzL3B5dGhvbl9sb2FkLmh0 bWwiPi9weXRob25fbG9hZDwvYT4gYW5kCisgIDxhIGhyZWY9Ii4uL2NvbW1h bmRzL3B5dGhvbl9jYWxsLmh0bWwiPi9weXRob25fY2FsbDwvYT4gaW5zdGVh ZC4KKworPHA+CisgIFNlZSAvaGVscCA8YSBocmVmPSIuLi90b3BpY3MvdGZf cHl0aG9uLmh0bWwiPnRmIHB5dGhvbjwvYT4gZm9yIGNhbGxpbmcgYmFjayBp bnRvIFRpbnlGdWd1ZQorICBhbmQgZm9yIG92ZXJhbGwgaXNzdWVzIG9mIHBl cmZvcm1hbmNlIGFuZCBwZXJzaXN0ZW5jZS4KKworPHA+Cis8IS0tIEVORCAt LT4KKzxocj4KKyAgPGEgaHJlZj0iLi8iPkJhY2sgdG8gaW5kZXg8L2E+PGJy PgorICA8YSBocmVmPSJodHRwOi8vdGlueWZ1Z3VlLnNvdXJjZWZvcmdlLm5l dC8iPkJhY2sgdG8gdGYgaG9tZSBwYWdlPC9hPgorPGhyPgorICA8YSBocmVm PSIuLi90b3BpY3MvY29weXJpZ2h0Lmh0bWwiPkNvcHlyaWdodDwvYT4gJmNv cHk7IDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksIDIwMDIsIDIwMDMs IDIwMDQsIDIwMDUsIDIwMDYtMjAwNyA8YSBocmVmPSJodHRwOi8vc291cmNl Zm9yZ2UubmV0L3VzZXJzL2tlbmtleXMvIj5LZW4gS2V5czwvYT4KZGlmZiAt ck51IC14IC5zdm4gLXggY29uZmlnLmxvZyAteCBjb25maWcuc3RhdHVzIC14 IHRmLWhlbHAgLXggTWFrZWZpbGUgLXggY2hhcnRhYmxlcy5jIC14IHRmY29u ZmlnLmggLXggdGZkZWZzLmggLXggJyouYnVpbGQnIC14ICcqLmJhaycgLXgg JyouaWR4JyAteCAnKi5vJyAteCAnKi5weWMnIC14IGh0bWwydGYgLXggZGVm YXVsdCAteCBtYWtlaGVscCAteCB0ZiAteCBkZnRhYmxlcyAteCAnbGlicGNy ZSonIC14IGh0bWwydGlmIHRmLTUwYjgtY2xlYW4vaGVscC9jb21tYW5kcy9w eXRob25fa2lsbC5odG1sIHRmLTUwYjgtcHkvaGVscC9jb21tYW5kcy9weXRo b25fa2lsbC5odG1sCi0tLSB0Zi01MGI4LWNsZWFuL2hlbHAvY29tbWFuZHMv cHl0aG9uX2tpbGwuaHRtbAkxOTY5LTEyLTMxIDE2OjAwOjAwLjAwMDAwMDAw MCAtMDgwMAorKysgdGYtNTBiOC1weS9oZWxwL2NvbW1hbmRzL3B5dGhvbl9r aWxsLmh0bWwJMjAwOC0wMS0xMSAxNToxNjozMi4wMDAwMDAwMDAgLTA4MDAK QEAgLTAsMCArMSwyNiBAQAorPHRpdGxlPlRpbnlGdWd1ZTogL3B5dGhvbl9r aWxsPC90aXRsZT4KKzwhLS0iQC9weXRob25fa2lsbCItLT4KKzxoMT4vcHl0 aG9uX2tpbGw8L2gxPgorCis8cD4KKyAgVXNhZ2U6CisKKzxwPgorICA8YSBo cmVmPSIuLi9jb21tYW5kcy9weXRob25fa2lsbC5odG1sIj4vcHl0aG9uX2tp bGw8L2E+IDxpPm1vZHVsZTwvaT4KKworPHA+CisgIFRoaXMgZHVtcHMgdGhl IHB5dGhvbiBpbnRlcnByZXRlciBhbmQgYW55IGxvYWRlZCBweXRob24gbW9k dWxlcy4gVGhlIG5leHQKKyAgdGltZSBhbnkgb2YgdGhlIG90aGVyIDxhIGhy ZWY9Ii4uL3RvcGljcy90Zl9weXRob24uaHRtbCI+cHl0aG9uPC9hPiBjb21t YW5kcworICBhcmUgdXNlZCBpdCB3aWxsIGJlIHJlbG9hZGVkIGFuZCByZWlu aXRpYWxpemVkLgorCis8cD4KKyAgVGhpcyBpcyBpbnRlbmRlZCBhcyBkZWFk LW1hbiBzd2l0Y2ggdG8gcHJldmVudCBhIHJlcXVpcmVkIHJlc3RhcnQgVGlu eUZ1Z3VlCisgIGlmIGFueXRoaW5nIGdvZXMgd3Jvbmcgd2l0aCB0aGlzIGJl dGEtbGV2ZWwgcHl0aG9uIHN1cHBvcnQuCisKKzxwPgorPCEtLSBFTkQgLS0+ Cis8aHI+CisgIDxhIGhyZWY9Ii4vIj5CYWNrIHRvIGluZGV4PC9hPjxicj4K KyAgPGEgaHJlZj0iaHR0cDovL3RpbnlmdWd1ZS5zb3VyY2Vmb3JnZS5uZXQv Ij5CYWNrIHRvIHRmIGhvbWUgcGFnZTwvYT4KKzxocj4KKyAgPGEgaHJlZj0i Li4vdG9waWNzL2NvcHlyaWdodC5odG1sIj5Db3B5cmlnaHQ8L2E+ICZjb3B5 OyAxOTk1LCAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LCAyMDAyLCAyMDAzLCAy MDA0LCAyMDA1LCAyMDA2LTIwMDcgPGEgaHJlZj0iaHR0cDovL3NvdXJjZWZv cmdlLm5ldC91c2Vycy9rZW5rZXlzLyI+S2VuIEtleXM8L2E+CmRpZmYgLXJO dSAteCAuc3ZuIC14IGNvbmZpZy5sb2cgLXggY29uZmlnLnN0YXR1cyAteCB0 Zi1oZWxwIC14IE1ha2VmaWxlIC14IGNoYXJ0YWJsZXMuYyAteCB0ZmNvbmZp Zy5oIC14IHRmZGVmcy5oIC14ICcqLmJ1aWxkJyAteCAnKi5iYWsnIC14ICcq LmlkeCcgLXggJyoubycgLXggJyoucHljJyAteCBodG1sMnRmIC14IGRlZmF1 bHQgLXggbWFrZWhlbHAgLXggdGYgLXggZGZ0YWJsZXMgLXggJ2xpYnBjcmUq JyAteCBodG1sMnRpZiB0Zi01MGI4LWNsZWFuL2hlbHAvY29tbWFuZHMvcHl0 aG9uX2xvYWQuaHRtbCB0Zi01MGI4LXB5L2hlbHAvY29tbWFuZHMvcHl0aG9u X2xvYWQuaHRtbAotLS0gdGYtNTBiOC1jbGVhbi9oZWxwL2NvbW1hbmRzL3B5 dGhvbl9sb2FkLmh0bWwJMTk2OS0xMi0zMSAxNjowMDowMC4wMDAwMDAwMDAg LTA4MDAKKysrIHRmLTUwYjgtcHkvaGVscC9jb21tYW5kcy9weXRob25fbG9h ZC5odG1sCTIwMDgtMDEtMTEgMTU6MTY6MzIuMDAwMDAwMDAwIC0wODAwCkBA IC0wLDAgKzEsMzAgQEAKKzx0aXRsZT5UaW55RnVndWU6IC9weXRob25fbG9h ZDwvdGl0bGU+Cis8IS0tIkAvcHl0aG9uX2xvYWQiLS0+Cis8aDE+L3B5dGhv bl9sb2FkPC9oMT4KKworPHA+CisgIFVzYWdlOgorCis8cD4KKyAgPGEgaHJl Zj0iLi4vY29tbWFuZHMvcHl0aG9uX2xvYWQuaHRtbCI+L3B5dGhvbl9sb2Fk PC9hPiA8aT5tb2R1bGU8L2k+CisKKzxwPgorICBUaGlzIChyZSlpbXBvcnRz IGEgcHl0aG9uIG1vZHVsZSBmb3IgeW91IGZyb20geW91ciBjdXJyZW50IFBZ VEhPTlBBVEgsIFRGUEFUSCwKKyAgYW5kIFRGTElCRElSLiBVc2UgdGhpcyBp bnN0ZWFkIG9mIGp1c3QKKyAgJzxhIGhyZWY9Ii4uL2NvbW1hbmRzL3B5dGhv bi5odG1sIj4vcHl0aG9uPC9hPiBpbXBvcnQgbXltb2R1bGUnCisgIGJlY2F1 c2UgaXQgd2lsbCBhbHNvIGZvcmNlIGEgcmVsb2FkIG9mIHRoZSBtb2R1bGUg Zm9yIHlvdSBpbiBjYXNlIGl0IGhhcyBiZWVuCisgIGNoYW5nZWQuIEFueSBm dW5jdGlvbnMgaW4gdGhlIG1vZHVsZSBhcmUgbm93IHJlYWR5IHRvIHVzZSB3 aXRoCisgIDxhIGhyZWY9Ii4uL2NvbW1hbmRzL3B5dGhvbl9jYWxsLmh0bWwi Pi9weXRob25fY2FsbDwvYT4uCisKKzxwPgorICBFeGFtcGxlOjxicj4KKyAg PGNvZGU+PGEgaHJlZj0iLi4vY29tbWFuZHMvcHl0aG9uX2xvYWQuaHRtbCI+ L3B5dGhvbl9sb2FkPC9hPiBteW1vZHVsZTwvY29kZT48YnI+CisgIDxjb2Rl PjxhIGhyZWY9Ii4uL2NvbW1hbmRzL3B5dGhvbl9jYWxsLmh0bWwiPi9weXRo b25fY2FsbDwvYT4gbXltb2R1bGUuZG90aGlzIDEgMiAzPC9jb2RlPjxicj4K KworPHA+Cis8IS0tIEVORCAtLT4KKzxocj4KKyAgPGEgaHJlZj0iLi8iPkJh Y2sgdG8gaW5kZXg8L2E+PGJyPgorICA8YSBocmVmPSJodHRwOi8vdGlueWZ1 Z3VlLnNvdXJjZWZvcmdlLm5ldC8iPkJhY2sgdG8gdGYgaG9tZSBwYWdlPC9h PgorPGhyPgorICA8YSBocmVmPSIuLi90b3BpY3MvY29weXJpZ2h0Lmh0bWwi PkNvcHlyaWdodDwvYT4gJmNvcHk7IDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgs IDE5OTksIDIwMDIsIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYtMjAwNyA8YSBo cmVmPSJodHRwOi8vc291cmNlZm9yZ2UubmV0L3VzZXJzL2tlbmtleXMvIj5L ZW4gS2V5czwvYT4KZGlmZiAtck51IC14IC5zdm4gLXggY29uZmlnLmxvZyAt eCBjb25maWcuc3RhdHVzIC14IHRmLWhlbHAgLXggTWFrZWZpbGUgLXggY2hh cnRhYmxlcy5jIC14IHRmY29uZmlnLmggLXggdGZkZWZzLmggLXggJyouYnVp bGQnIC14ICcqLmJhaycgLXggJyouaWR4JyAteCAnKi5vJyAteCAnKi5weWMn IC14IGh0bWwydGYgLXggZGVmYXVsdCAteCBtYWtlaGVscCAteCB0ZiAteCBk ZnRhYmxlcyAteCAnbGlicGNyZSonIC14IGh0bWwydGlmIHRmLTUwYjgtY2xl YW4vaGVscC90b3BpY3MvdGZfbW9kdWxlLmh0bWwgdGYtNTBiOC1weS9oZWxw L3RvcGljcy90Zl9tb2R1bGUuaHRtbAotLS0gdGYtNTBiOC1jbGVhbi9oZWxw L3RvcGljcy90Zl9tb2R1bGUuaHRtbAkxOTY5LTEyLTMxIDE2OjAwOjAwLjAw MDAwMDAwMCAtMDgwMAorKysgdGYtNTBiOC1weS9oZWxwL3RvcGljcy90Zl9t b2R1bGUuaHRtbAkyMDA4LTAxLTIxIDAwOjAyOjE3LjAwMDAwMDAwMCAtMDgw MApAQCAtMCwwICsxLDU3IEBACis8dGl0bGU+VGlueUZ1Z3VlOiBURiBQeXRo b248L3RpdGxlPgorPCEtLSJAdGYuZXJyIi0tPgorPCEtLSJAdGYuZXZhbCIt LT4KKzwhLS0iQHRmLmdldHZhciItLT4KKzwhLS0iQHRmLm91dCItLT4KKzwh LS0iQHRmLnNlbmQiLS0+Cis8IS0tIkB0Zi50ZnJjIi0tPgorPCEtLSJAdGYu d29ybGQiLS0+Cis8IS0tIkB0ZiBtb2R1bGUiLS0+Cis8aDE+VEYgUHl0aG9u IE1vZHVsZTwvaDE+CisKKzxwPgorICBUaGUgVEYgUHl0aG9uIG1vZHVsZSBs ZXRzIHlvdXIgcHl0aG9uIG1vZHVsZSBkbyB1c2VmdWwgdGhpbmdzIHdpdGgg VGlueUZ1Z3VlLgorICBXaGVuIHVzaW5nIDxhIGhyZWY9Ii4uL2NvbW1hbmRz L3B5dGhvbi5odG1sIj4vcHl0aG9uPC9hPiBvciAKKyAgPGEgaHJlZj0iLi4v Y29tbWFuZHMvcHl0aG9uLmh0bWwiPnB5dGhvbigpPC9hPiBtb2R1bGUgdGYg aXMgYWxyZWFkeSBwcmVzZW50IGluIHRoZQorICBsb2NhbCBuYW1lc3BhY2Us IGJ1dCBhbnkgPGEgaHJlZj0iLi4vY29tbWFuZHMvcHl0aG9uX2xvYWQuaHRt bCI+L3B5dGhvbl9sb2FkPC9hPgorICBzY3JpcHQgbmVlZHMgdG8gJ2ltcG9y dCB0ZicuCisKKzxwPgorICA8Yj50Zi5lcnI8L2I+KCA8aT50ZXh0PC9pPiAp IC0gc2VuZHMgPGk+dGV4dDwvaT4gdG8geW91ciBzY3JlZW4gKHRmZXJyIHN0 cmVhbSkuCis8cD4KKyAgPGI+dGYuZXZhbDwvYj4oIDxpPnN0cmluZyBhcmc8 L2k+ICkgLSBpcyB0aGUgc2FtZSBhcyA8YSBocmVmPSIuLi9jb21tYW5kcy9l dmFsLmh0bWwiPi9ldmFsPC9hPiA8aT5zdHJpbmcgYXJnPC9pPi4KKzxwPgor ICA8Yj50Zi5nZXR2YXI8L2I+KCA8aT52YXI8L2k+LCAoPGk+ZGVmYXVsdDwv aT4gKSAtIGdldHMgdmFsdWUgb2YgPGk+dmFyPC9pPiBvciA8aT5kZWZhdWx0 PC9pPiBpZiBpdCdzIG5vdCBzZXQuCis8cD4KKyAgPGI+dGYub3V0PC9iPigg PGk+dGV4dDwvaT4gKSAtIHNlbmRzIDxpPnRleHQ8L2k+IHRvIHlvdXIgc2Ny ZWVuICh0Zm91dCBzdHJlYW0pLgorPHA+CisgIDxiPnRmLnNlbmQ8L2I+KCA8 aT50ZXh0PC9pPiwgKDxpPndvcmxkPC9pPiApIC0gc2VuZHMgPGk+dGV4dDwv aT4gdG8gPGk+d29ybGQ8L2k+IChkZWZhdWx0IGN1cnJlbnQpCisgICAgd2l0 aG91dCB3b3JyeWluZyBhYm91dCB0aGUgZmxhZy9xdW90aW5nIHByb2JsZW1z IG9mIHRmLmV2YWwoKQorPHA+CisgIDxiPnRmLnRmcmM8L2I+KCkgLSByZXR1 cm5zIHRoZSBmaWxlIG5hbWUgb2YgdGhlIGxvYWRlZCAudGZyYyBmaWxlIChv ciBlbXB0eSBzdHJpbmcgaWYgbm9uZSkKKzxwPgorICA8Yj50Zi53b3JsZDwv Yj4oKSAtIHJldHVybnMgdGhlIG5hbWUgb2YgdGhlIGN1cnJlbnQgd29ybGQg b3IgZW1wdHkgc3RyaW5nIGlmIG5vbmUuCisKKzxwPgorICA8Yj5BcmJpdHJh cnkgZGF0YSBmcm9tIFRGPC9iPjogWW91ciBwcm9ncmFtIGNhbiByZXRyaWV2 ZSBhbnkgaW5mb3JtYXRpb24gaXQgbmVlZHMKKyAgZnJvbSBUaW55RnVndWUg YnkgZG9pbmcgdGhlIGZvbGxvd2luZyAoZm9yIGV4YW1wbGUpOjxicj4KKyAg PGNvZGU+dGYuZXZhbCggJy90ZXN0ICIke3dvcmxkX25hbWV9IicgKTwvY29k ZT48YnI+CisgIHdpbGwgcmV0dXJuIGEgc3RyaW5nIGNvbnRhaW5pbmcgdGhl IG5hbWUgb2YgdGhlIGN1cnJlbnQgd29ybGQgb3I6PGJyPgorICA8Y29kZT50 Zi5ldmFsKCAnL3Rlc3QgY29sdW1ucygpJyApPC9jb2RlPjxicj4KKyAgd2ls bCByZXR1cm4gYW4gaW50ZWdlciB3aXRoIHRoZSBudW1iZXIgb2Ygc2NyZWVu IGNvbHVtbnMuIE5vdGljZSB0aGUKKyAgcXVvdGluZyBpcyBzbGlnaHRseSBk ZXBlbmRpbmcgb24gd2hhdCB3ZSBleHBlY3QgaXQgdG8gcmV0dXJuLgorCis8 cD4KKyAgU2VlIHRoZSBpbmNsdWRlZCA8Yj50Zi1saWIvdXJsd2F0Y2gucHk8 L2I+IGFuZCA8Yj50Zi1saWIvY29uZmlnLnB5PC9iPiBmb3IgZmFpcmx5IGNv bXBsZXgKKyAgZXhhbXBsZXMuCisKKzxwPgorICBTZWUgYWxzbzogPGEgaHJl Zj0iLi90Zl9weXRob24uaHRtbCI+dGYgcHl0aG9uPC9hPiBmb3Igb3ZlcmFs bCBpbmZvLjwvcD4KKworPHA+Cis8IS0tIEVORCAtLT4KKzxocj4KKyAgPGEg aHJlZj0iLi8iPkJhY2sgdG8gaW5kZXg8L2E+PGJyPgorICA8YSBocmVmPSJo dHRwOi8vdGlueWZ1Z3VlLnNvdXJjZWZvcmdlLm5ldC8iPkJhY2sgdG8gdGYg aG9tZSBwYWdlPC9hPgorPGhyPgorICA8YSBocmVmPSIuLi90b3BpY3MvY29w eXJpZ2h0Lmh0bWwiPkNvcHlyaWdodDwvYT4gJmNvcHk7IDE5OTUsIDE5OTYs IDE5OTcsIDE5OTgsIDE5OTksIDIwMDIsIDIwMDMsIDIwMDQsIDIwMDUsIDIw MDYtMjAwNyA8YSBocmVmPSJodHRwOi8vc291cmNlZm9yZ2UubmV0L3VzZXJz L2tlbmtleXMvIj5LZW4gS2V5czwvYT4KZGlmZiAtck51IC14IC5zdm4gLXgg Y29uZmlnLmxvZyAteCBjb25maWcuc3RhdHVzIC14IHRmLWhlbHAgLXggTWFr ZWZpbGUgLXggY2hhcnRhYmxlcy5jIC14IHRmY29uZmlnLmggLXggdGZkZWZz LmggLXggJyouYnVpbGQnIC14ICcqLmJhaycgLXggJyouaWR4JyAteCAnKi5v JyAteCAnKi5weWMnIC14IGh0bWwydGYgLXggZGVmYXVsdCAteCBtYWtlaGVs cCAteCB0ZiAteCBkZnRhYmxlcyAteCAnbGlicGNyZSonIC14IGh0bWwydGlm IHRmLTUwYjgtY2xlYW4vaGVscC90b3BpY3MvdGZfcHl0aG9uLmh0bWwgdGYt NTBiOC1weS9oZWxwL3RvcGljcy90Zl9weXRob24uaHRtbAotLS0gdGYtNTBi OC1jbGVhbi9oZWxwL3RvcGljcy90Zl9weXRob24uaHRtbAkxOTY5LTEyLTMx IDE2OjAwOjAwLjAwMDAwMDAwMCAtMDgwMAorKysgdGYtNTBiOC1weS9oZWxw L3RvcGljcy90Zl9weXRob24uaHRtbAkyMDA4LTAxLTIxIDAwOjAyOjExLjAw MDAwMDAwMCAtMDgwMApAQCAtMCwwICsxLDU5IEBACis8dGl0bGU+VGlueUZ1 Z3VlOiBURiBQeXRob248L3RpdGxlPgorPCEtLSJAdGYgcHl0aG9uIi0tPgor PGgxPlRGIFB5dGhvbjwvaDE+CisKKzxwPgorICBURiBQeXRob24gaXMgYSBw YXRjaCAod2hpY2ggeW91IGFwcGFyZW50bHkgaGF2ZSBpbnN0YWxsZWQpIGZv ciBUaW55RnVndWUgNS4wOGIKKyAgd2hpY2ggYWxsb3dzIFRpbnlGdWd1ZSB0 byB1c2UgUHl0aG9uIGZvciBzY3JpcHRpbmcuCisKKzxwPgorICBUaW55RnVn dWUgQ29tbWFuZHMgKHNlZSBlYWNoIGZvciBkZXRhaWxzKTo8YnI+CisgIDxh IGhyZWY9Ii4uL2NvbW1hbmRzL3B5dGhvbi5odG1sIj4vcHl0aG9uPC9hPiA8 aT5jb21tYW5kPC9pPjxicj4KKyAgPGEgaHJlZj0iLi4vY29tbWFuZHMvcHl0 aG9uLmh0bWwiPnB5dGhvbjwvYT4oIDxpPmNvbW1hbmQ8L2k+ICk8YnI+Cisg IDxhIGhyZWY9Ii4uL2NvbW1hbmRzL3B5dGhvbl9sb2FkLmh0bWwiPi9weXRo b25fbG9hZDwvYT4gPGk+bW9kdWxlPC9pPjxicj4KKyAgPGEgaHJlZj0iLi4v Y29tbWFuZHMvcHl0aG9uX2NhbGwuaHRtbCI+L3B5dGhvbl9jYWxsPC9hPiA8 aT5tb2R1bGU8L2k+LjxpPmZ1bmN0aW9uPC9pPiA8aT5hcmd1bWVudDwvaT48 YnI+CisgIDxhIGhyZWY9Ii4uL2NvbW1hbmRzL3B5dGhvbl9raWxsLmh0bWwi Pi9weXRob25fa2lsbDwvYT4KKworPHA+CisgIDxiPkNhbGxpbmcgYmFjayBp bnRvIFRpbnlGdWd1ZTwvYj46IFRGIFB5dGhvbiBwcm92aWRlcyBQeXRob24g c2NyaXB0cyB3aXRoIGEgJ3RmJworICBtb2R1bGUgdGhhdCBoYXMgc2V2ZXJh bCBtZXRob2RzIC0gd2l0aG91dCB0aGVzZSBpdCdzIGFsbCBmYWlybHkgdXNl bGVzcy4KKyAgUGxlYXNlIHNlZSA8Yj4vaGVscDwvYj4gPGEgaHJlZj0iLi90 Zl9tb2R1bGUuaHRtbCI+dGYgbW9kdWxlPC9hPiBmb3IgaW5mbyBvbiB0aGlz LjwvcD4KKworPHA+CisgIDxiPlNwZWVkPC9iPjogVGhlIHB5dGhvbiBpbnRl cnByZXRlciBpcyAoZHluYW1pY2FsbHkpIGVtYmVkZGVkIGluIFRpbnlGdWd1 ZSB0bworICByZWR1Y2Ugb3ZlcmhlYWQgYW5kIGFsbG93IHRpZ2h0ZXIgY291 cGxpbmcuIFdoZW4gdXNpbmcKKyAgPGEgaHJlZj0iLi4vY29tbWFuZHMvcHl0 aG9uX2xvYWQuaHRtbCI+L3B5dGhvbl9sb2FkPC9hPiBhbmQKKyAgPGEgaHJl Zj0iLi4vY29tbWFuZHMvcHl0aG9uX2NhbGwuaHRtbCI+L3B5dGhvbl9jYWxs PC9hPgorICBhbGwgdGhlIGNvZGUgaXMgYnl0ZSBjb21waWxlZCBvbiBsb2Fk LCBzbyBpdCdzIHF1aXRlIHNuYXBweS4KKworPHA+CisgIDxiPkVudmlyb25t ZW50PC9iPjogVGhlIGVudmlyb25tZW50IGlzIHBlcnNpc3RlbnQsIHNvIGFm dGVyICcvcHl0aG9uIGltcG9ydCBnbG9iJworICBzdWJzZXF1ZW50IGNvbW1h bmRzIHdpbGwgYmUgYWJsZSB0byByZWZlcmVuY2UgbW9kdWxlIGdsb2IuIE1v cmUgaW1wb3J0YW50bHkKKyAgaXQgbWVhbnMgdGhhdCBhZnRlciAnL3B5dGhv bl9sb2FkIG15bW9kdWxlJyAgbXltb2R1bGUgd2lsbCBoYXZlIHBlcnNpc3Rl bnQKKyAgdmFyaWFibGVzIGJldHdlZW4gL3B5dGhvbl9jYWxsIGludm9jYXRp b25zLgorCis8cD4KKyAgPGI+QXJiaXRyYXJ5IGRhdGEgZnJvbSBURjwvYj46 IFlvdXIgcHJvZ3JhbSBjYW4gcmV0cmlldmUgYW55IGluZm9ybWF0aW9uIGl0 IG5lZWRzCisgIGZyb20gVGlueUZ1Z3VlIGJ5IHVzaW5nIHRmLmV2YWwuCisg IFBsZWFzZSBzZWUgPGI+L2hlbHA8L2I+IDxhIGhyZWY9Ii4vdGZfbW9kdWxl Lmh0bWwiPnRmIG1vZHVsZTwvYT4gZm9yIGluZm8gb24gdGhpcy48L3A+CisK KzxwPgorICA8Yj5zdGRvdXQgYW5kIHN0ZGVycjwvYj46IGJ5IGRlZmF1bHQs IHN0ZG91dCBpcyBkaXNjYXJkZWQgKHNvIHlvdSBkb24ndCBzZWUgdGhlCisg IG91dHB1dCBvZiBldmVyeSA8YSBocmVmPSIuLi9jb21tYW5kcy9weXRob24u aHRtbCI+L3B5dGhvbjwvYT4gY29tbWFuZCkgYW5kIHN0ZGVycgorICBpcyBz ZW50IHRvIHRmZXJyLiBZb3UgY2FuIG1ha2Ugc3Rkb3V0IGFjdGl2ZSBhZ2Fp biB3aXRoOjxicj4KKyAgPGNvZGU+PGEgaHJlZj0iLi4vY29tbWFuZHMvcHl0 aG9uLmh0bWwiPi9weXRob248L2E+IHN5cy5zdGRvdXQub3V0cHV0ID0gdGYu b3V0PC9jb2RlPjxicj4KKyAgYW5kIHNodXQgaXQgdXAgYWdhaW4gd2l0aDo8 YnI+CisgIDxjb2RlPjxhIGhyZWY9Ii4uL2NvbW1hbmRzL3B5dGhvbi5odG1s Ij4vcHl0aG9uPC9hPiBzeXMuc3Rkb3V0Lm91dHB1dCA9IE5vbmU8L2NvZGU+ PGJyPgorICBZb3UgY2FuIGRvIHRoZSBzYW1lIHdpdGggc3lzLnN0ZGVyci5v dXRwdXQsIGJ1dCB1c2UgdGYuZXJyIGluc3RlYWQuCisKKzxwPgorICBTZWUg dGhlIGluY2x1ZGVkIDxiPnRmLWxpYi91cmx3YXRjaC5weTwvYj4gYW5kIDxi PnRmLWxpYi9jb25maWcucHk8L2I+IGZvciBmYWlybHkgY29tcGxleAorICBl eGFtcGxlcy4KKworPHA+Cis8IS0tIEVORCAtLT4KKzxocj4KKyAgPGEgaHJl Zj0iLi8iPkJhY2sgdG8gaW5kZXg8L2E+PGJyPgorICA8YSBocmVmPSJodHRw Oi8vdGlueWZ1Z3VlLnNvdXJjZWZvcmdlLm5ldC8iPkJhY2sgdG8gdGYgaG9t ZSBwYWdlPC9hPgorPGhyPgorICA8YSBocmVmPSIuLi90b3BpY3MvY29weXJp Z2h0Lmh0bWwiPkNvcHlyaWdodDwvYT4gJmNvcHk7IDE5OTUsIDE5OTYsIDE5 OTcsIDE5OTgsIDE5OTksIDIwMDIsIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYt MjAwNyA8YSBocmVmPSJodHRwOi8vc291cmNlZm9yZ2UubmV0L3VzZXJzL2tl bmtleXMvIj5LZW4gS2V5czwvYT4KZGlmZiAtck51IC14IC5zdm4gLXggY29u ZmlnLmxvZyAteCBjb25maWcuc3RhdHVzIC14IHRmLWhlbHAgLXggTWFrZWZp bGUgLXggY2hhcnRhYmxlcy5jIC14IHRmY29uZmlnLmggLXggdGZkZWZzLmgg LXggJyouYnVpbGQnIC14ICcqLmJhaycgLXggJyouaWR4JyAteCAnKi5vJyAt eCAnKi5weWMnIC14IGh0bWwydGYgLXggZGVmYXVsdCAteCBtYWtlaGVscCAt eCB0ZiAteCBkZnRhYmxlcyAteCAnbGlicGNyZSonIC14IGh0bWwydGlmIHRm LTUwYjgtY2xlYW4vUkVBRE1FLnB5dGhvbiB0Zi01MGI4LXB5L1JFQURNRS5w eXRob24KLS0tIHRmLTUwYjgtY2xlYW4vUkVBRE1FLnB5dGhvbgkxOTY5LTEy LTMxIDE2OjAwOjAwLjAwMDAwMDAwMCAtMDgwMAorKysgdGYtNTBiOC1weS9S RUFETUUucHl0aG9uCTIwMDktMDYtMjUgMDA6Mjc6MzguMDAwMDAwMDAwIC0w NzAwCkBAIC0wLDAgKzEsODIgQEAKKz0gVEYgUHl0aG9uIChUaW55RnVndWUg NSBiZXRhIHB5dGhvbiBzY3JpcHRpbmcgcGF0Y2gpCistCistIENvcHJpZ2h0 IDIwMDggUm9uIERpcHBvbGQgLSBNb2RpZnkgYXQgd2lsbCwganVzdCBhZGQg eW91ciBjaGFuZ2VzIGhlcmUKKy0KKy0gVjEuMTAgSnVuIDI1LTA5IEppbXVu IEJhdHR5J3MgcGF0Y2ggdG8gZml4IGEgbWlzc2luZyBQeV9JTkNSRUYuCist ICAgICAgICAgICAgICAgICBKZXNzaWNhIEJsYW5rJ3MgZml4IHRvIG1ha2Ug dGhpcyBjb21waWxlIHVuZGVyIE9TWC4KKy0gdjEuMDkgSmFuLTI1LTA4IEFk ZCB0Zi0+cHl0aG9uIGNvbnZlcnNpb24gZm9yIFRZUEVfRU5VTSwgVFlQRV9Q T1MKKy0gICAgICAgICAgICAgICAgIGFkZCB0ZnV0aWwucHksIGNvbnZlcnQg Y29uZmlnLnB5IHRvIHVzZSBpdAorLSAgICAgICAgICAgICAgICAgYWRkIHRm NC5weSBhcyBhIHJlYWxseSBvYnNjZW5lIGV4YW1wbGUKKy0gdjEuMDggSmFu LTIxLTA4IGRvbid0IHNhdmUgdmlydHVhbCB3b3JsZHMgYXQgYWxsCistIHYx LjA3IEphbi0yMS0wOCBjb25maWcucHkgb3V0cHV0IG1vcmUgcmVhZGFibGUg c29ydGVkIC9hZGR3b3JsZCBmb3JtYXQKKy0gICAgICAgICAgICAgICAgIGZp eCB2YWxpZGF0aW9uIG9mIFNyYyBIb3N0CistICAgICAgICAgICAgICAgICBB ZGQgc3BlY2lhbCBzYXZlIGZvciBkZWZhdWx0L3ZpcnR1YWwgd29ybGRzCist IHYxLjA2IEphbi0xOS0wOCBBZGQgdGYudGZyYygpIGZ1bmN0aW9uCistICAg ICAgICAgICAgICAgICBhZGQgdGYtbGliL2NvbmZpZy5weQorLSAgICAgICAg ICAgICAgICAgc3BsaXQgb3V0IC9oZWxwIHRmIG1vZHVsZSB0byBpdHMgb3du IGZpbGUKKy0gdjEuMDUgSmFuLTEzLTA4IEFkZCBjb252ZW5pZW5jZSB0Zi5n ZXR2YXIoKS4KKy0gICAgICAgICAgICAgICAgIEFkZCB0Zi5zZW5kKCkgdG8g YXZvaWQgdGYuZXZhbCgpIHF1b3RpbmcgaGFzc2xlcworLSAgICAgICAgICAg ICAgICAgQWRkIHRmLWxpYi9kaWZmZWRpdC5weSB1dGlsaXR5L2V4YW1wbGUK Ky0gdjEuMDQgSmFuLTEwLTA4IEFkZCB0Zi53b3JsZCgpIGZ1bmN0aW9uIC0g aXQncyB0b28gdXNlZnVsCistICAgICAgICAgICAgICAgICBEb2MgcmV0cmll dmluZyBhbnkgdmFyIHVzaW5nIHRmLmV2YWwKKy0gICAgICAgICAgICAgICAg IEZpeCBidWcgcmV0dXJuaW5nIHN0cmluZyB2YWx1ZXMgZnJvbSB0Zi5ldmFs CistIHYxLjAzIEphbi0xMC0wOCBBZGQgZHVtbXkgc3lzLmFyZ3YgLSBzb21l IGxpYnJhcmllcyBleHBlY3QgaXQKKy0gICAgICAgICAgICAgICAgIEJlIHNt YXJ0ZXIgYWJvdXQgaW1wb3J0L3JlbG9hZCB0byBwcmV2ZW50IGRvdWJsZSBp bml0CistIHYxLjAyIEphbi0xMC0wOCBEb2N1bWVudCBzdGRvdXQvc3RkZXJy IHN3aXRjaGluZyBpbiAvaGVscCB0ZiBweXRob24KKy0gdjEuMDEgSmFuLTEw LTA4IERvY3VtZW50IHRoYXQgdGhlIC50Z3pzIHdvbid0IHdvcmssIGh0bWwy dGYgcHJvYmxlbQorLSB2MS4wMCBKYW4tMTAtMDggSW5pdGlhbCByZWxlYXNl CisKK0luc3RhbGxhdGlvbjoKKworICAtIEluc3RhbGwgcHl0aG9uMi40IG9y IHB5dGhvbjIuNSAoaGF2ZW4ndCB0cmllZCAyLjMpIGFuZCB0aGUKKyAgICBk ZXZlbG9wZXIgaGVhZGVycyAoaWYgeW91IGRvbid0IGRvIHRoaXMgeW91IHdp bGwgZ2V0IGVycm9ycyBhYm91dCBubworICAgIFB5dGhvbi5oIGZvdW5kKS4g VGhpcyBpcyB1c3VhbGx5IGVhc2llc3QgYXMgYSBwYWNrYWdlLCBmb3IgaW5z dGFuY2UKKyAgICAnYXB0LWdldCBpbnN0YWxsIHB5dGhvbjIuNS1kZXYnIGZv ciBkZWJpYW4sIGJ1dCBvdGhlcndpc2U6CisgICAgICAgICBodHRwOi8vcHl0 aG9uLm9yZworICAgIElmIHlvdSdyZSBidWlsZGluZyBmcm9tIHNvdXJjZSBt YWtlIHN1cmUgeW91IGNvbmZpZ3VyZSB3aXRoCisgICAgICAgICAuL2NvbmZp Z3VyZSAtLWVuYWJsZS1zaGFyZWQgCisKKyAgLSBORVc6IHlvdSBjYW4gc2tp cCB0aGUgbmV4dCB0d28gc3RlcHMganVzdCBieSBjaGVja2luZyBvdXQgdGhl IGFscmVhZHkKKyAgICBwYXRjaGVkIHNvdXJjZSBjb2RlIGFub255bW91c2x5 IHdpdGg6CisgICAgICBzdm4gY28gc3ZuOi8vc2l6ZXI5OS5jb20vdGYtNTBi OC1weQorCisgIC0gSWYgeW91IGRpZG4ndCBkbyB0aGUgc3ZuIGNoZWNrb3V0 OgorICAgIEdldCB0aGUgVGlueUZ1Z3VlIDUuMDhiIHNvdXJjZSBmcm9tIGh0 dHA6Ly90aW55ZnVndWUuc291cmNlZm9yZ2UubmV0LworCisgICAgWW91IG5l ZWQgdGhlIHppcCB2ZXJzaW9uLCB3aGljaCBoYXMgZXZlcnl0aGluZyBpbiBp dC4gVGhlIC50YXIuZ3ogdmVyc2lvbnMKKyAgICBhcmUgbWlzc2luZyBzb21l IGZpbGVzIG5lY2Vzc2FyeSB0byBidWlsZCB0aGUgaGVscC4KKyAgICAgICAj IHVuemlwIC1hIHRmLTUwYjguemlwCisgICAgICAgIyBybSB0Zi01MGI4L2hl bHAvaHRtbDJ0ZgorICAgICh0aGUgLnppcCB2ZXJzaW9uIGNvbWVzIHdpdGgg YSBwcmVidWlsdCBodG1sMnRmIHdoaWNoIHdpbGwgY29yZSBkdW1wIG9uCisg ICAgbWFueSBzeXN0ZW1zLCBzbyB0aGlzIHdpbGwgY2F1c2UgaXQgdG8gYmUg cmVidWlsdCkKKworICAtIElmIHlvdSBkaWRuJ3QgZG8gdGhlIHN2biBjaGVj a291dDoKKyAgICBUZXN0IHRoZSBwYXRjaCwgdGhlbiBhcHBseSBpdDoKKyAg ICAgICMgY2QgdGYtNTA4YgorICAgICAgIyBwYXRjaCAtcCAxIC11IC1OIC0t ZHJ5LXJ1biA8IHRmLXB5dGhvbi1wYXRjaAorICAgICAgIyBwYXRjaCAtcCAx IC11IC1OIDwgdGYtcHl0aG9uLXBhdGNoCisKKyAgLSBSdW4gY29uZmlndXJl LCB3aGljaCBub3cgaGFzIC0tZW5hYmxlLXB5dGhvbiBieSBkZWZhdWx0LiBB ZGQgYW55IGV4dHJhCisgICAgb3B0aW9ucyB5b3Ugd2FudCwgaWYgYW55ICh1 c3VhbGx5IG5vdCkuIElGIFlPVSBBTFJFQURZIFJBTiBDT05GSUdVUkUKKyAg ICBiZWZvcmUgeW91IGFwcGxpZWQgdGhlIHBhdGNoLCB0aGF0J3Mgb2theSwg YnV0IHlvdSBtdXN0IGRvIGl0IGFnYWluLgorICAgICAgIyAuL2NvbmZpZ3Vy ZQorCisgIC0gQ29tcGlsZQorICAgICAgIyBtYWtlCisgICAgRG9uJ3Qgd29y cnkgYWJvdXQgd2FybmluZ3MgYWJvdXQgSEFWRV9JTkVUX1BUT04gb3IgX1BP U0lYX0NfU09VUkNFLgorCisgIC0gSW5zdGFsbAorICAgICAgIyBtYWtlIGlu c3RhbGwKKworCitVc2FnZToKKyAKKyAgIC0gcnVuIFRpbnlGdWd1ZSAodGYp IGFuZCB0aGVuIAorICAgICAgIC9oZWxwIHRmIHB5dGhvbgorCisgICAtIENo ZWNrIG91dCB0Zi1saWIvdXJsd2F0Y2gucHkgZm9yIGEgc2ltcGxlIHNjcmlw dGluZyBleGFtcGxlLiBUaGlzIHVzZXMKKyAgICAgb25seSBhIHRpbnkgZnJh Y3Rpb24gb2Ygd2hhdCB5b3UgY2FuIGRvLCBidXQgSSd2ZSBiZWVuIHNvIGJ1 c3kgbWFraW5nCisgICAgIHRoaXMgcGF0Y2ggSSBoYXZlbid0IGhhZCB0aW1l IHRvIHdyaXRlIGFsbCB0aGUgc2NyaXB0cyBJIHdhbnQhCisKK1Jvbgorc2l6 ZXJAc2FuLnJyLmNvbQpkaWZmIC1yTnUgLXggLnN2biAteCBjb25maWcubG9n IC14IGNvbmZpZy5zdGF0dXMgLXggdGYtaGVscCAteCBNYWtlZmlsZSAteCBj aGFydGFibGVzLmMgLXggdGZjb25maWcuaCAteCB0ZmRlZnMuaCAteCAnKi5i dWlsZCcgLXggJyouYmFrJyAteCAnKi5pZHgnIC14ICcqLm8nIC14ICcqLnB5 YycgLXggaHRtbDJ0ZiAteCBkZWZhdWx0IC14IG1ha2VoZWxwIC14IHRmIC14 IGRmdGFibGVzIC14ICdsaWJwY3JlKicgLXggaHRtbDJ0aWYgdGYtNTBiOC1j bGVhbi9zcmMvY21kbGlzdC5oIHRmLTUwYjgtcHkvc3JjL2NtZGxpc3QuaAot LS0gdGYtNTBiOC1jbGVhbi9zcmMvY21kbGlzdC5oCTIwMDgtMDEtMDUgMTU6 Mzk6NDAuMDAwMDAwMDAwIC0wODAwCisrKyB0Zi01MGI4LXB5L3NyYy9jbWRs aXN0LmgJMjAwOC0wMS0xMSAxNToxNjozMS4wMDAwMDAwMDAgLTA4MDAKQEAg LTYyLDYgKzYyLDEyIEBACiBkZWZjbWQoIkxPRyIgICAgICAgICAsIGhhbmRs ZV9sb2dfY29tbWFuZCAgICAgICAgICwgMCkKIGRlZmNtZCgiUFMiICAgICAg ICAgICwgaGFuZGxlX3BzX2NvbW1hbmQgICAgICAgICAgLCAwKQogZGVmY21k KCJQVVJHRSIgICAgICAgLCBoYW5kbGVfcHVyZ2VfY29tbWFuZCAgICAgICAs IDApCisjaWZkZWYgVEZQWVRIT04KK2RlZmNtZCgiUFlUSE9OIiAgICAgICwg aGFuZGxlX3B5dGhvbl9jb21tYW5kICAgICAgLCAwKQorZGVmY21kKCJQWVRI T05fQ0FMTCIgLCBoYW5kbGVfcHl0aG9uX2NhbGxfY29tbWFuZCAsIDApCitk ZWZjbWQoIlBZVEhPTl9LSUxMIiAsIGhhbmRsZV9weXRob25fa2lsbF9jb21t YW5kICwgMCkKK2RlZmNtZCgiUFlUSE9OX0xPQUQiICwgaGFuZGxlX3B5dGhv bl9sb2FkX2NvbW1hbmQgLCAwKQorI2VuZGlmCiBkZWZjbWQoIlFVSVQiICAg ICAgICAsIGhhbmRsZV9xdWl0X2NvbW1hbmQgICAgICAgICwgMCkKIGRlZmNt ZCgiUVVPVEUiICAgICAgICwgaGFuZGxlX3F1b3RlX2NvbW1hbmQgICAgICAg LCAwKQogZGVmY21kKCJSRUNBTEwiICAgICAgLCBoYW5kbGVfcmVjYWxsX2Nv bW1hbmQgICAgICAsIDApCmRpZmYgLXJOdSAteCAuc3ZuIC14IGNvbmZpZy5s b2cgLXggY29uZmlnLnN0YXR1cyAteCB0Zi1oZWxwIC14IE1ha2VmaWxlIC14 IGNoYXJ0YWJsZXMuYyAteCB0ZmNvbmZpZy5oIC14IHRmZGVmcy5oIC14ICcq LmJ1aWxkJyAteCAnKi5iYWsnIC14ICcqLmlkeCcgLXggJyoubycgLXggJyou cHljJyAteCBodG1sMnRmIC14IGRlZmF1bHQgLXggbWFrZWhlbHAgLXggdGYg LXggZGZ0YWJsZXMgLXggJ2xpYnBjcmUqJyAteCBodG1sMnRpZiB0Zi01MGI4 LWNsZWFuL3NyYy9jb21tYW5kLmMgdGYtNTBiOC1weS9zcmMvY29tbWFuZC5j Ci0tLSB0Zi01MGI4LWNsZWFuL3NyYy9jb21tYW5kLmMJMjAwOC0wMS0wNSAx NTozOTo0MC4wMDAwMDAwMDAgLTA4MDAKKysrIHRmLTUwYjgtcHkvc3JjL2Nv bW1hbmQuYwkyMDA5LTA2LTI1IDAwOjQzOjQ1LjAwMDAwMDAwMCAtMDcwMApA QCAtMzAsNiArMzAsNyBAQAogI2luY2x1ZGUgImV4cGFuZC5oIiAgICAgLyog bWFjcm9fcnVuKCkgKi8KICNpbmNsdWRlICJzaWduYWxzLmgiICAgIC8qIHN1 c3BlbmQoKSwgc2hlbGwoKSAqLwogI2luY2x1ZGUgInZhcmlhYmxlLmgiCisj aW5jbHVkZSAidGZweXRob24uaCIKIAogaW50IGV4aXRpbmcgPSAwOwogCkBA IC00OTEsOSArNDkyLDEwIEBACiAgKioqKioqKioqKioqKioqKioqKiovICAg CiAKIC8qIFJldHVybnMgLTEgaWYgZmlsZSBjYW4ndCBiZSByZWFkLCAwIGZv ciBhbiBlcnJvciB3aXRoaW4gdGhlIGZpbGUsIG9yIDEgZm9yCi0gKiBzdWNj ZXNzLgorICogc3VjY2Vzcy4gSWYgc2F2ZW5hbWUhPU5VTEwgYW5kIHRoZSBm aWxlIGlzIGZvdW5kLCAqc2F2ZW5hbWUgd2lsbCBiZSBzZXQgdG8KKyAqIHN0 cmR1cChmaWxlLT5uYW1lKSBhbmQgaXQncyB1cCB0byB5b3UgdG8gZnJlZSgp IGl0LgogICovCi1pbnQgZG9fZmlsZV9sb2FkKGNvbnN0IGNoYXIgKmFyZ3Ms IGludCB0aW55dGFsaykKK2ludCBkb19maWxlX2xvYWQoY29uc3QgY2hhciAq YXJncywgaW50IHRpbnl0YWxrLCBjaGFyICoqc2F2ZW5hbWUpCiB7CiAgICAg QVVUT19CVUZGRVIobGluZSk7CiAgICAgQVVUT19CVUZGRVIoY21kKTsKQEAg LTUyMiw3ICs1MjQsNyBAQAogCQkgICAgU3RyaW5nYWRkKGxpYmZpbGUsICpw YXRoKyspOwogCQl9CiAJCWlmICghaXNfYWJzb2x1dGVfcGF0aChsaWJmaWxl LT5kYXRhKSkgewotCQkgICAgd3ByaW50ZigiaW52YWxpZCBkaXJlY3Rvcnkg aW4gVEZQQVRIOiAlUyIsIGxpYmZpbGUpOworCQkgICAgd3ByaW50ZigoY29u c3Qgd2NoYXJfdCAqKSJpbnZhbGlkIGRpcmVjdG9yeSBpbiBURlBBVEg6ICVT IiwgbGliZmlsZSk7CiAJCX0gZWxzZSB7CiAJCSAgICBTYXBwZW5kZihsaWJm aWxlLCAiLyVzIiwgYXJncyk7CiAJCSAgICBmaWxlID0gdGZvcGVuKGV4cGFu ZF9maWxlbmFtZShsaWJmaWxlLT5kYXRhKSwgInIiKTsKQEAgLTUzMCw3ICs1 MzIsNyBAQAogCSAgICB9IHdoaWxlICghZmlsZSAmJiAqcGF0aCk7CiAJfSBl bHNlIHsKIAkgICAgaWYgKCFpc19hYnNvbHV0ZV9wYXRoKFRGTElCRElSKSkg ewotCQl3cHJpbnRmKCJpbnZhbGlkIFRGTElCRElSOiAlcyIsIFRGTElCRElS KTsKKwkJd3ByaW50ZigoY29uc3Qgd2NoYXJfdCAqKSJpbnZhbGlkIFRGTElC RElSOiAlcyIsIFRGTElCRElSKTsKIAkgICAgfSBlbHNlIHsKIAkJU3ByaW50 ZihsaWJmaWxlLCAiJXMvJXMiLCBURkxJQkRJUiwgYXJncyk7CiAJCWZpbGUg PSB0Zm9wZW4oZXhwYW5kX2ZpbGVuYW1lKGxpYmZpbGUtPmRhdGEpLCAiciIp OwpAQCAtNTQ2LDYgKzU0OCw4IEBACiAKICAgICBkb19ob29rKEhfTE9BRCwg cXVpZXRsb2FkID8gTlVMTCA6ICIlJSBMb2FkaW5nIGNvbW1hbmRzIGZyb20g JXMuIiwKICAgICAgICAgIiVzIiwgZmlsZS0+bmFtZSk7CisJaWYoIHNhdmVu YW1lICkKKwkJKnNhdmVuYW1lID0gc3RyZHVwKCBmaWxlLT5uYW1lICk7CiAg ICAgb2ZsdXNoKCk7ICAvKiBMb2FkIGNvdWxkIHRha2UgYXdoaWxlLCBzbyBm bHVzaCBwZW5kaW5nIG91dHB1dCBmaXJzdC4gKi8KIAogICAgIFN0cmluZ25p bml0KGxpbmUsIDgwKTsKQEAgLTU4Nyw3ICs1OTEsNyBAQAogICAgICAgICAg ICAgICAgIGkgPSBsaW5lLT5sZW4gLSAxOwogICAgICAgICAgICAgICAgIHdo aWxlIChpID4gMCAmJiBpc19zcGFjZShsaW5lLT5kYXRhW2ldKSkgaS0tOwog ICAgICAgICAgICAgICAgIGlmIChsaW5lLT5kYXRhW2ldID09ICdcXCcpCi0g ICAgICAgICAgICAgICAgICAgIHdwcmludGYoIndoaXRlc3BhY2UgZm9sbG93 aW5nIGZpbmFsICdcXCciKTsKKyAgICAgICAgICAgICAgICAgICAgd3ByaW50 ZigoY29uc3Qgd2NoYXJfdCAqKSJ3aGl0ZXNwYWNlIGZvbGxvd2luZyBmaW5h bCAnXFwnIik7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0gZWxzZSB7CiAg ICAgICAgICAgICBsYXN0X2NtZF9saW5lID0gMDsKQEAgLTcxMCw3ICs3MTQs NyBAQAogCiAgICAgcXVpZXRsb2FkICs9IHF1aWV0OwogICAgIGlmIChhcmdz LT5sZW4gLSBvZmZzZXQpCi0gICAgICAgIHJlc3VsdCA9IChkb19maWxlX2xv YWQoc3RyaXBzdHIoYXJncy0+ZGF0YSArIG9mZnNldCksIEZBTFNFKSA+IDAp OworICAgICAgICByZXN1bHQgPSAoZG9fZmlsZV9sb2FkKHN0cmlwc3RyKGFy Z3MtPmRhdGEgKyBvZmZzZXQpLCBGQUxTRSwgTlVMTCkgPiAwKTsKICAgICBl bHNlIGVwcmludGYoIm1pc3NpbmcgZmlsZW5hbWUiKTsKICAgICBxdWlldGxv YWQgLT0gcXVpZXQ7CiAgICAgcmV0dXJuIG5ld2ludChyZXN1bHQpOwpkaWZm IC1yTnUgLXggLnN2biAteCBjb25maWcubG9nIC14IGNvbmZpZy5zdGF0dXMg LXggdGYtaGVscCAteCBNYWtlZmlsZSAteCBjaGFydGFibGVzLmMgLXggdGZj b25maWcuaCAteCB0ZmRlZnMuaCAteCAnKi5idWlsZCcgLXggJyouYmFrJyAt eCAnKi5pZHgnIC14ICcqLm8nIC14ICcqLnB5YycgLXggaHRtbDJ0ZiAteCBk ZWZhdWx0IC14IG1ha2VoZWxwIC14IHRmIC14IGRmdGFibGVzIC14ICdsaWJw Y3JlKicgLXggaHRtbDJ0aWYgdGYtNTBiOC1jbGVhbi9zcmMvY29tbWFuZC5o IHRmLTUwYjgtcHkvc3JjL2NvbW1hbmQuaAotLS0gdGYtNTBiOC1jbGVhbi9z cmMvY29tbWFuZC5oCTIwMDgtMDEtMDUgMTU6Mzk6NDAuMDAwMDAwMDAwIC0w ODAwCisrKyB0Zi01MGI4LXB5L3NyYy9jb21tYW5kLmgJMjAwOC0wMS0yMCAy MzozNzozNi4wMDAwMDAwMDAgLTA4MDAKQEAgLTIzLDcgKzIzLDcgQEAKIAog ZXh0ZXJuIGludCAgICAgIGhhbmRsZV9jb21tYW5kKGNvbnN0IGNvblN0cmlu ZyAqY21kX2xpbmUpOwogZXh0ZXJuIEJ1aWx0aW5DbWQgKmZpbmRfYnVpbHRp bl9jbWQoY29uc3QgY2hhciAqY21kKTsKLWV4dGVybiBpbnQgICAgICBkb19m aWxlX2xvYWQoY29uc3QgY2hhciAqYXJncywgaW50IHRpbnl0YWxrKTsKK2V4 dGVybiBpbnQgICAgICBkb19maWxlX2xvYWQoY29uc3QgY2hhciAqYXJncywg aW50IHRpbnl0YWxrLCBjaGFyKipmb3VuZG5hbWUpOwogZXh0ZXJuIGludCAg ICAgIGhhbmRsZV9lY2hvX2Z1bmMoY29uU3RyaW5nICpzdHJpbmcsIGNvbnN0 IGNoYXIgKmF0dHJzdHIsCiAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5s aW5lX2ZsYWcsIGNvbnN0IGNoYXIgKmRlc3QpOwogZXh0ZXJuIGludCAgICAg IGhhbmRsZV9zdWJzdGl0dXRlX2Z1bmMoY29uU3RyaW5nICpzdHJpbmcsCmRp ZmYgLXJOdSAteCAuc3ZuIC14IGNvbmZpZy5sb2cgLXggY29uZmlnLnN0YXR1 cyAteCB0Zi1oZWxwIC14IE1ha2VmaWxlIC14IGNoYXJ0YWJsZXMuYyAteCB0 ZmNvbmZpZy5oIC14IHRmZGVmcy5oIC14ICcqLmJ1aWxkJyAteCAnKi5iYWsn IC14ICcqLmlkeCcgLXggJyoubycgLXggJyoucHljJyAteCBodG1sMnRmIC14 IGRlZmF1bHQgLXggbWFrZWhlbHAgLXggdGYgLXggZGZ0YWJsZXMgLXggJ2xp YnBjcmUqJyAteCBodG1sMnRpZiB0Zi01MGI4LWNsZWFuL3NyYy9leHByLmMg dGYtNTBiOC1weS9zcmMvZXhwci5jCi0tLSB0Zi01MGI4LWNsZWFuL3NyYy9l eHByLmMJMjAwOC0wMS0wNSAxNTozOTo0MC4wMDAwMDAwMDAgLTA4MDAKKysr IHRmLTUwYjgtcHkvc3JjL2V4cHIuYwkyMDA4LTAxLTExIDE1OjE2OjMxLjAw MDAwMDAwMCAtMDgwMApAQCAtMzksNiArMzksNyBAQAogI2luY2x1ZGUgInR0 eS5oIgkvKiBub190dHkgKi8KICNpbmNsdWRlICJoaXN0b3J5LmgiCS8qIGxv Z19jb3VudCAqLwogI2luY2x1ZGUgIndvcmxkLmgiCS8qIG5ld193b3JsZCgp ICovCisjaW5jbHVkZSAidGZweXRob24uaCIKIAogCiAjZGVmaW5lIFNUQUNL U0laRSA1MTIKQEAgLTk2Nyw2ICs5NjgsMTggQEAKIAkJcmV0dXJuIHNoYXJl dmFsKHZhbF96ZXJvKTsKIAkgICAgcmV0dXJuX3VzZXJfcmVzdWx0KCk7CiAK KyNpZmRlZiBURlBZVEhPTgorICAgICAgICBjYXNlIEZOX3B5dGhvbjoKKwkJ eworCQkJc3RydWN0IFZhbHVlICpydiA9IGhhbmRsZV9weXRob25fZnVuY3Rp b24oIG9wZHN0cihuLTApICk7CisJCQlpZiggIXJ2ICkgeworCQkJCXJldHVy biBzaGFyZXZhbCh2YWxfemVybyk7CisJCQl9IGVsc2UgeworCQkJCXJldHVy biBydjsKKwkJCX0KKwkJfQorI2VuZGlmCisKICAgICAgICAgY2FzZSBGTl9z ZW5kOgogICAgICAgICAgICAgaSA9IGhhbmRsZV9zZW5kX2Z1bmN0aW9uKG9w ZHN0cihuKSwgKG4+MSA/IG9wZHN0ZChuLTEpIDogTlVMTCksIAogCQkobj4y ID8gb3Bkc3RkKG4tMikgOiAiIikpOwpkaWZmIC1yTnUgLXggLnN2biAteCBj b25maWcubG9nIC14IGNvbmZpZy5zdGF0dXMgLXggdGYtaGVscCAteCBNYWtl ZmlsZSAteCBjaGFydGFibGVzLmMgLXggdGZjb25maWcuaCAteCB0ZmRlZnMu aCAteCAnKi5idWlsZCcgLXggJyouYmFrJyAteCAnKi5pZHgnIC14ICcqLm8n IC14ICcqLnB5YycgLXggaHRtbDJ0ZiAteCBkZWZhdWx0IC14IG1ha2VoZWxw IC14IHRmIC14IGRmdGFibGVzIC14ICdsaWJwY3JlKicgLXggaHRtbDJ0aWYg dGYtNTBiOC1jbGVhbi9zcmMvZnVuY2xpc3QuaCB0Zi01MGI4LXB5L3NyYy9m dW5jbGlzdC5oCi0tLSB0Zi01MGI4LWNsZWFuL3NyYy9mdW5jbGlzdC5oCTIw MDgtMDEtMDUgMTU6Mzk6NDAuMDAwMDAwMDAwIC0wODAwCisrKyB0Zi01MGI4 LXB5L3NyYy9mdW5jbGlzdC5oCTIwMDgtMDEtMTEgMTU6MTY6MzEuMDAwMDAw MDAwIC0wODAwCkBAIC02NSw2ICs2NSw5IEBACiBmdW5jY29kZShwYWQsCQkx LAkxLCAgKHVuc2lnbmVkKS0xKSwKIGZ1bmNjb2RlKHBvdywJCTEsCTIsICAy KSwKIGZ1bmNjb2RlKHByb21wdCwJMCwJMSwgIDEpLAorI2lmZGVmIFRGUFlU SE9OCitmdW5jY29kZShweXRob24sCTAsCTEsICAxKSwKKyNlbmRpZgogZnVu Y2NvZGUocmFuZCwJCTAsCTAsICAyKSwKIGZ1bmNjb2RlKHJlYWQsCQkwLAkw LCAgMCksCiBmdW5jY29kZShyZWdtYXRjaCwJMCwJMiwgIDIpLCAvKiAhcHVy ZTogc2V0cyBQbiAqLwpkaWZmIC1yTnUgLXggLnN2biAteCBjb25maWcubG9n IC14IGNvbmZpZy5zdGF0dXMgLXggdGYtaGVscCAteCBNYWtlZmlsZSAteCBj aGFydGFibGVzLmMgLXggdGZjb25maWcuaCAteCB0ZmRlZnMuaCAteCAnKi5i dWlsZCcgLXggJyouYmFrJyAteCAnKi5pZHgnIC14ICcqLm8nIC14ICcqLnB5 YycgLXggaHRtbDJ0ZiAteCBkZWZhdWx0IC14IG1ha2VoZWxwIC14IHRmIC14 IGRmdGFibGVzIC14ICdsaWJwY3JlKicgLXggaHRtbDJ0aWYgdGYtNTBiOC1j bGVhbi9zcmMvbWFpbi5jIHRmLTUwYjgtcHkvc3JjL21haW4uYwotLS0gdGYt NTBiOC1jbGVhbi9zcmMvbWFpbi5jCTIwMDgtMDEtMDUgMTU6Mzk6NDAuMDAw MDAwMDAwIC0wODAwCisrKyB0Zi01MGI4LXB5L3NyYy9tYWluLmMJMjAwOC0w MS0yMCAyMzozNjo1My4wMDAwMDAwMDAgLTA4MDAKQEAgLTY5LDYgKzY5LDgg QEAKIHN0YXRpYyB2b2lkIHJlYWRfY29uZmlndXJhdGlvbihjb25zdCBjaGFy ICpmbmFtZSk7CiBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpOwog CitjaGFyICptYWluX2NvbmZpZ2ZpbGU9TlVMTDsKKwogaW50IG1haW4oaW50 IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKIHsKICAgICBjaGFyICpvcHQsICphcmd2 MCA9IGFyZ3ZbMF07CkBAIC0yNTAsMjUgKzI1MiwyNSBAQAogc3RhdGljIHZv aWQgcmVhZF9jb25maWd1cmF0aW9uKGNvbnN0IGNoYXIgKmZuYW1lKQogewog I2lmIDEgLyogWFhYICovCi0gICAgaWYgKGRvX2ZpbGVfbG9hZChnZXR2YXIo IlRGTElCUkFSWSIpLCBGQUxTRSkgPCAwKQorICAgIGlmIChkb19maWxlX2xv YWQoZ2V0dmFyKCJURkxJQlJBUlkiKSwgRkFMU0UsIE5VTEwpIDwgMCkKICAg ICAgICAgZGllKCJDYW4ndCByZWFkIHJlcXVpcmVkIGxpYnJhcnkuIiwgMCk7 CiAjZW5kaWYKIAogICAgIGlmIChmbmFtZSkgewotICAgICAgICBpZiAoKmZu YW1lKSBkb19maWxlX2xvYWQoZm5hbWUsIEZBTFNFKTsKKyAgICAgICAgaWYg KCpmbmFtZSkgZG9fZmlsZV9sb2FkKGZuYW1lLCBGQUxTRSwgJm1haW5fY29u ZmlnZmlsZSk7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0KKwkKICAgICAo dm9pZCkoICAgLyogaWdub3JlIHZhbHVlIG9mIGV4cHJlc3Npb24gKi8KIAkv KiBUcnkgdGhlIG5leHQgZmlsZSBpZiBhIGZpbGUgY2FuJ3QgYmUgcmVhZCwg YnV0IG5vdCBpZiB0aGVyZSdzCiAJICogYW4gZXJyb3IgX3dpdGhpbl8gYSBm aWxlLiAqLwotICAgICAgICBkb19maWxlX2xvYWQoIn4vLnRmcmMiLCBUUlVF KSA+PSAwIHx8Ci0gICAgICAgIGRvX2ZpbGVfbG9hZCgifi90ZnJjIiwgIFRS VUUpID49IDAgfHwKLSAgICAgICAgZG9fZmlsZV9sb2FkKCIuLy50ZnJjIiwg VFJVRSkgPj0gMCB8fAotICAgICAgICBkb19maWxlX2xvYWQoIi4vdGZyYyIs ICBUUlVFKQorICAgICAgICBkb19maWxlX2xvYWQoIn4vLnRmcmMiLCBUUlVF LCAmbWFpbl9jb25maWdmaWxlKSA+PSAwIHx8CisgICAgICAgIGRvX2ZpbGVf bG9hZCgifi90ZnJjIiwgIFRSVUUsICZtYWluX2NvbmZpZ2ZpbGUpID49IDAg fHwKKyAgICAgICAgZG9fZmlsZV9sb2FkKCIuLy50ZnJjIiwgVFJVRSwgJm1h aW5fY29uZmlnZmlsZSkgPj0gMCB8fAorICAgICAgICBkb19maWxlX2xvYWQo Ii4vdGZyYyIsICBUUlVFLCAmbWFpbl9jb25maWdmaWxlKQogICAgICk7CiAK ICAgICAvKiBzdXBwb3J0IGZvciBvbGQgZmFzaGlvbmVkIC50aW55dGFsayBm aWxlcyAqLwotICAgIGRvX2ZpbGVfbG9hZCgoZm5hbWUgPSBnZXR2YXIoIlRJ TllUQUxLIikpID8gZm5hbWUgOiAifi8udGlueXRhbGsiLCBUUlVFKTsKKyAg ICBkb19maWxlX2xvYWQoKGZuYW1lID0gZ2V0dmFyKCJUSU5ZVEFMSyIpKSA/ IGZuYW1lIDogIn4vLnRpbnl0YWxrIiwgVFJVRSwgJm1haW5fY29uZmlnZmls ZSk7CiB9CiAKZGlmZiAtck51IC14IC5zdm4gLXggY29uZmlnLmxvZyAteCBj b25maWcuc3RhdHVzIC14IHRmLWhlbHAgLXggTWFrZWZpbGUgLXggY2hhcnRh Ymxlcy5jIC14IHRmY29uZmlnLmggLXggdGZkZWZzLmggLXggJyouYnVpbGQn IC14ICcqLmJhaycgLXggJyouaWR4JyAteCAnKi5vJyAteCAnKi5weWMnIC14 IGh0bWwydGYgLXggZGVmYXVsdCAteCBtYWtlaGVscCAteCB0ZiAteCBkZnRh YmxlcyAteCAnbGlicGNyZSonIC14IGh0bWwydGlmIHRmLTUwYjgtY2xlYW4v c3JjL21hbGxvYy5jIHRmLTUwYjgtcHkvc3JjL21hbGxvYy5jCi0tLSB0Zi01 MGI4LWNsZWFuL3NyYy9tYWxsb2MuYwkyMDA4LTAxLTA1IDE1OjM5OjQwLjAw MDAwMDAwMCAtMDgwMAorKysgdGYtNTBiOC1weS9zcmMvbWFsbG9jLmMJMjAw OS0wNi0yNSAwMDo0MTowNS4wMDAwMDAwMDAgLTA3MDAKQEAgLTEyLDcgKzEy LDkgQEAKICNpbmNsdWRlICJzaWduYWxzLmgiCiAjaW5jbHVkZSAibWFsbG9j LmgiCiAKKyNpZm5kZWYgX19BUFBMRV9fCiBjYWRkcl90IG1tYWxsb2NfYmFz ZSA9IE5VTEw7CisjZW5kaWYKIGludCBsb3dfbWVtb3J5X3dhcm5pbmcgPSAw Owogc3RhdGljIGNoYXIgKnJlc2VydmUgPSBOVUxMOwogCmRpZmYgLXJOdSAt eCAuc3ZuIC14IGNvbmZpZy5sb2cgLXggY29uZmlnLnN0YXR1cyAteCB0Zi1o ZWxwIC14IE1ha2VmaWxlIC14IGNoYXJ0YWJsZXMuYyAteCB0ZmNvbmZpZy5o IC14IHRmZGVmcy5oIC14ICcqLmJ1aWxkJyAteCAnKi5iYWsnIC14ICcqLmlk eCcgLXggJyoubycgLXggJyoucHljJyAteCBodG1sMnRmIC14IGRlZmF1bHQg LXggbWFrZWhlbHAgLXggdGYgLXggZGZ0YWJsZXMgLXggJ2xpYnBjcmUqJyAt eCBodG1sMnRpZiB0Zi01MGI4LWNsZWFuL3NyYy9zb2NrZXQuYyB0Zi01MGI4 LXB5L3NyYy9zb2NrZXQuYwotLS0gdGYtNTBiOC1jbGVhbi9zcmMvc29ja2V0 LmMJMjAwOC0wMS0wNSAxNTozOTo0MC4wMDAwMDAwMDAgLTA4MDAKKysrIHRm LTUwYjgtcHkvc3JjL3NvY2tldC5jCTIwMDgtMDEtMjUgMjM6MjY6NTYuMDAw MDAwMDAwIC0wODAwCkBAIC0xMDI5LDcgKzEwMjksNyBAQAogICAgIGNvbnN0 IGNoYXIgKm1maWxlOwogICAgIGlmIChyZXN0cmljdGlvbiA+PSBSRVNUUklD VF9GSUxFKSByZXR1cm47CiAgICAgaWYgKChtZmlsZSA9IHdvcmxkX21maWxl KHcpKSkKLSAgICAgICAgZG9fZmlsZV9sb2FkKG1maWxlLCBGQUxTRSk7Cisg ICAgICAgIGRvX2ZpbGVfbG9hZChtZmlsZSwgRkFMU0UsIE5VTEwpOwogfQog CiBpbnQgd29ybGRfaG9vayhjb25zdCBjaGFyICpmbXQsIGNvbnN0IGNoYXIg Km5hbWUpCmRpZmYgLXJOdSAteCAuc3ZuIC14IGNvbmZpZy5sb2cgLXggY29u ZmlnLnN0YXR1cyAteCB0Zi1oZWxwIC14IE1ha2VmaWxlIC14IGNoYXJ0YWJs ZXMuYyAteCB0ZmNvbmZpZy5oIC14IHRmZGVmcy5oIC14ICcqLmJ1aWxkJyAt eCAnKi5iYWsnIC14ICcqLmlkeCcgLXggJyoubycgLXggJyoucHljJyAteCBo dG1sMnRmIC14IGRlZmF1bHQgLXggbWFrZWhlbHAgLXggdGYgLXggZGZ0YWJs ZXMgLXggJ2xpYnBjcmUqJyAteCBodG1sMnRpZiB0Zi01MGI4LWNsZWFuL3Ny Yy90ZmlvLmggdGYtNTBiOC1weS9zcmMvdGZpby5oCi0tLSB0Zi01MGI4LWNs ZWFuL3NyYy90ZmlvLmgJMjAwOC0wMS0wNSAxNTozOTo0MC4wMDAwMDAwMDAg LTA4MDAKKysrIHRmLTUwYjgtcHkvc3JjL3RmaW8uaAkyMDA5LTA2LTI1IDAw OjQwOjM1LjAwMDAwMDAwMCAtMDcwMApAQCAtMTUzLDcgKzE1MywxMyBAQAog ICAgICAgICAgICAgICAgICAgICAgZm9ybWF0X3ByaW50ZigyLCAzKTsKIGV4 dGVybiB2b2lkICAgZXByZWZpeChTdHJpbmcgKmJ1ZmZlcik7CiBleHRlcm4g dm9pZCAgIGVwcmludGYoY29uc3QgY2hhciAqZm10LCAuLi4pIGZvcm1hdF9w cmludGYoMSwgMik7CisjaWZuZGVmIF9fQVBQTEVfXworI2lmZGVmIFRGUFlU SE9OCisvLyB3cHJpbnRmIGlzIGFscmVhZHkgaW4gL3Vzci9pbmNsdWRlL3dj aGFyLmgsIHdoaWNoIHB5dGhvbiBpbmNsdWRlcworI2RlZmluZSB3cHJpbnRm IHRmX3dwcmludGYKIGV4dGVybiB2b2lkICAgd3ByaW50Zihjb25zdCBjaGFy ICpmbXQsIC4uLikgZm9ybWF0X3ByaW50ZigxLCAyKTsKKyNlbmRpZgorI2Vu ZGlmCiBleHRlcm4gY2hhciAgIGlnZXRjaGFyKHZvaWQpOwogZXh0ZXJuIGlu dCAgICBoYW5kbGVfdGZvcGVuX2Z1bmMoY29uc3QgY2hhciAqbmFtZSwgY29u c3QgY2hhciAqbW9kZSk7CiBleHRlcm4gVEZJTEUgKmZpbmRfdGZpbGUoY29u c3QgY2hhciAqaGFuZGxlKTsKZGlmZiAtck51IC14IC5zdm4gLXggY29uZmln LmxvZyAteCBjb25maWcuc3RhdHVzIC14IHRmLWhlbHAgLXggTWFrZWZpbGUg LXggY2hhcnRhYmxlcy5jIC14IHRmY29uZmlnLmggLXggdGZkZWZzLmggLXgg JyouYnVpbGQnIC14ICcqLmJhaycgLXggJyouaWR4JyAteCAnKi5vJyAteCAn Ki5weWMnIC14IGh0bWwydGYgLXggZGVmYXVsdCAteCBtYWtlaGVscCAteCB0 ZiAteCBkZnRhYmxlcyAteCAnbGlicGNyZSonIC14IGh0bWwydGlmIHRmLTUw YjgtY2xlYW4vc3JjL3RmcHl0aG9uLmMgdGYtNTBiOC1weS9zcmMvdGZweXRo b24uYwotLS0gdGYtNTBiOC1jbGVhbi9zcmMvdGZweXRob24uYwkxOTY5LTEy LTMxIDE2OjAwOjAwLjAwMDAwMDAwMCAtMDgwMAorKysgdGYtNTBiOC1weS9z cmMvdGZweXRob24uYwkyMDA5LTA2LTI1IDAwOjEyOjMyLjAwMDAwMDAwMCAt MDcwMApAQCAtMCwwICsxLDQzMSBAQAorLy8gLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gUHl0aG9uIHN1cHBvcnQgZm9y IFRpbnlGdWd1ZSA1IGJldGEKKy8vCisvLyBDb3B5cmlnaHQgMjAwOCBSb24g RGlwcG9sZCAtIE1vZGlmeSBhdCB3aWxsLCBqdXN0IGFkZCB5b3VyIGNoYW5n ZXMgaW4gUkVBRE1FLnB5dGhvbgorLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLQorCisvLyBJZiB0aGlzIGlzbid0IGRlZmlu ZWQsIHRoZSB3aG9sZSBmaWxlIGlzIG51bGwKKyNpZmRlZiBURlBZVEhPTgor CisjaW5jbHVkZSAidGZweXRob24uaCIKKworLy8gQ2hhbmdlIHRoaXMgMCB0 byAxIHRvIGFkZCBkZWJ1ZyBwcmludGZzCisjaWYgMAorI2RlZmluZSBEUFJJ TlRGIG9wcmludGYKKyNlbHNlCisjZGVmaW5lIERQUklOVEYoLi4uKQorI2Vu ZGlmCisKKworc3RhdGljIFB5T2JqZWN0KiB0ZnZhcl90b19weXZhciggY29u c3Qgc3RydWN0IFZhbHVlICpyYyApOworc3RhdGljIHN0cnVjdCBWYWx1ZSog cHl2YXJfdG9fdGZ2YXIoIFB5T2JqZWN0ICpwUmMgKTsKKworLy8gLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gVGhlIHRm ICdtb2R1bGUnIGFzIHNlZW4gYnkgcHl0aG9uIHNjcmlwdHMKKy8vIC0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworLy8gZGVm IHRmLmV2YWwoIGFyZ3N0cmluZyApOgorc3RhdGljIFB5T2JqZWN0ICp0Zl9l dmFsKCBQeU9iamVjdCAqcFNlbGYsIFB5T2JqZWN0ICpwQXJncyApCit7CisJ c3RydWN0IFN0cmluZyAqY21kOworCWNvbnN0IGNoYXIgKmNhcmdzOworCXN0 cnVjdCBWYWx1ZSAqcmM7CisKKwlpZiggIVB5QXJnX1BhcnNlVHVwbGUoIHBB cmdzLCAicyIsICZjYXJncyApICkgeworCQllcHV0cyggInRmLmV2YWwgY2Fs bGVkIHdpdGggbm9uLXN0cmluZyBhcmd1bWVudCIgKTsKKwkJUHlfUkVUVVJO X05PTkU7CisKKwl9CisKKwkvLyBhc2sgdGlueWZ1Z3VlIHRvIGV2YWwgdGhl IHN0cmluZworCSggY21kID0gU3RyaW5nbmV3KCBjYXJncywgLTEsIDAgKSAp LT5saW5rcysrOworCXJjID0gaGFuZGxlX2V2YWxfY29tbWFuZCggY21kLCAw ICk7CisJU3RyaW5nZnJlZSggY21kICk7CisKKwlyZXR1cm4gdGZ2YXJfdG9f cHl2YXIoIHJjICk7Cit9CisKKy8vZGVmIHRmLm91dCggc3RyaW5nICk6Citz dGF0aWMgUHlPYmplY3QgKnRmX291dCggUHlPYmplY3QgKnBTZWxmLCBQeU9i amVjdCAqcEFyZ3MgKQoreworCWNvbnN0IGNoYXIgKmNhcmdzOworCWlmKCAh UHlBcmdfUGFyc2VUdXBsZSggcEFyZ3MsICJzIiwgJmNhcmdzICkgKSB7CisJ CWVwdXRzKCAidGYub3V0IGNhbGxlZCB3aXRoIG5vbi1zdHJpbmcgYXJndW1l bnQiICk7CisJfSBlbHNlIHsKKwkJb3B1dHMoIGNhcmdzICk7CisJfQorCVB5 X1JFVFVSTl9OT05FOworfQorCisvL2RlZiB0Zi5lcnIoIHN0cmluZyApOgor c3RhdGljIFB5T2JqZWN0ICp0Zl9lcnIoIFB5T2JqZWN0ICpwU2VsZiwgUHlP YmplY3QgKnBBcmdzICkKK3sKKwljb25zdCBjaGFyICpjYXJnczsKKwlpZigg IVB5QXJnX1BhcnNlVHVwbGUoIHBBcmdzLCAicyIsICZjYXJncyApICkgewor CQllcHV0cyggInRmLmVyciBjYWxsZWQgd2l0aCBub24tc3RyaW5nIGFyZ3Vt ZW50IiApOworCX0gZWxzZSB7CisJCWVwdXRzKCBjYXJncyApOworCX0KKwlQ eV9SRVRVUk5fTk9ORTsKK30KKworLy8gdGYuc2VuZCggPHN0cmluZz4sIDx3 b3JsZD49Tm9uZSApCitzdGF0aWMgUHlPYmplY3QgKnRmX3NlbmQoIFB5T2Jq ZWN0ICpwU2VsZiwgUHlPYmplY3QgKnBBcmdzICkKK3sKKwljb25zdCBjaGFy ICpzdHJpbmcsICp3b3JsZG5hbWU9TlVMTDsKKworCWlmKCAhUHlBcmdfUGFy c2VUdXBsZSggcEFyZ3MsICJzfHMiLCAmc3RyaW5nLCAmd29ybGRuYW1lICkg KSB7CisJCWVwdXRzKCAidGYuc2VuZCBjYWxsZWQgd2l0aCBiYWQgYXJndW1l bnRzIiApOworCX0gZWxzZSB7CisJCVN0cmluZyAqYnVmID0gU3RyaW5nbmV3 KCBzdHJpbmcsIC0xLCAwICk7CisJCWhhbmRsZV9zZW5kX2Z1bmN0aW9uKCBD UyhidWYpLCB3b3JsZG5hbWUgPyB3b3JsZG5hbWUgOiAiIiAsICIiICk7CisJ fQorCVB5X1JFVFVSTl9OT05FOworfQorCisvL2RlZiB0Zi50ZnJjKCkKK3N0 YXRpYyBQeU9iamVjdCAqdGZfdGZyYyggUHlPYmplY3QgKnBTZWxmLCBQeU9i amVjdCAqcEFyZ3MgKQoreworCWV4dGVybiBjaGFyICptYWluX2NvbmZpZ2Zp bGU7CisJcmV0dXJuIFB5X0J1aWxkVmFsdWUoICJzIiwgbWFpbl9jb25maWdm aWxlID8gbWFpbl9jb25maWdmaWxlIDogIiIgKTsKK30KKworLy9kZWYgdGYu d29ybGQoKToKK3N0YXRpYyBQeU9iamVjdCAqdGZfd29ybGQoIFB5T2JqZWN0 ICpwU2VsZiwgUHlPYmplY3QgKnBBcmdzICkKK3sKKwlXb3JsZCAqd29ybGQg PSBuYW1lZF9vcl9jdXJyZW50X3dvcmxkKCAiIiApOworCXJldHVybiBQeV9C dWlsZFZhbHVlKCAicyIsIHdvcmxkID8gd29ybGQtPm5hbWUgOiAiIik7Cit9 CisKKy8vIHRmLmdldHZhciggdmFybmFtZSwgZGVmYXVsdCApCitzdGF0aWMg UHlPYmplY3QgKnRmX2dldHZhciggUHlPYmplY3QgKnBTZWxmLCBQeU9iamVj dCAqcEFyZ3MgKQoreworCWNvbnN0IGNoYXIgKmNhcmdzOworCVB5T2JqZWN0 ICpkZWYgPSBOVUxMOworCVZhciAqdmFyID0gTlVMTDsKKworCWlmKCAhUHlB cmdfUGFyc2VUdXBsZSggcEFyZ3MsICJzfE8iLCAmY2FyZ3MsICZkZWYgKSAp IHsKKwkJZXB1dHMoICJ0Zi5nZXR2YXIgY2FsbGVkIHdpdGggYmFkIGFyZ3Vt ZW50cyIgKTsKKwl9IGVsc2UgeworCQl2YXIgPSBmZmluZGdsb2JhbHZhcigg Y2FyZ3MgKTsKKwl9CisKKwlpZiggdmFyICkgeworCQlyZXR1cm4gdGZ2YXJf dG9fcHl2YXIoICZ2YXItPnZhbCApOworCX0gZWxzZSBpZiAoIGRlZiApIHsK KwkJUHlfSU5DUkVGKCBkZWYgKTsKKwkJcmV0dXJuIGRlZjsKKwl9IGVsc2Ug eworCQlQeV9SRVRVUk5fTk9ORTsKKwl9Cit9CisKKy8vIE91ciB0ZiAnbW9k dWxlJworc3RhdGljIFB5TWV0aG9kRGVmIHRmTWV0aG9kc1tdID0geworCXsK KwkJImVyciIsIHRmX2VyciwgTUVUSF9WQVJBUkdTLAorCQkidGYuZXJyKCA8 c3RyaW5nPiApXG4iCisJCSJTaG93cyBlcnJvciA8c3RyaW5nPiBsb2NhbGx5 ICh0byB0aGUgdGZlcnIgc3RyZWFtKS5cbiIKKwl9LAorCXsKKwkJImV2YWwi LCB0Zl9ldmFsLCBNRVRIX1ZBUkFSR1MsCisJCSJ0Zi5ldmFsKCA8c3RyaW5n PiApXG4iCisJCSJDYWxscyBUaW55RnVndWUncyAvZXZhbCB3aXRoIDxzdHJp bmc+LlxuIgorCQkiUmV0dXJucyB0aGUgcmV0dXJuIGNvZGUgb2YgdGhlIGV2 YWx1YXRpb24gaWYgYW55LiIKKwl9LAorCXsKKwkJImdldHZhciIsIHRmX2dl dHZhciwgTUVUSF9WQVJBUkdTLAorCQkidGYuZ2V0dmFyKCA8dmFybmFtZT4s ICg8ZGVmYXVsdD4pIClcbiIKKwkJInVzZSB0Zi5ldmFsKCkgZm9yIHNldHZh ciBmdW5jdGlvbmFsaXR5XG4iCisJCSJSZXR1cm5zIHRoZSB2YWx1ZSBvZiA8 dmFybmFtZT4gaWYgaXQgZXhpc3RzLCBvciBkZWZhdWx0LiIKKwl9LAorCXsK KwkJIm91dCIsIHRmX291dCwgTUVUSF9WQVJBUkdTLAorCQkidGYub3V0KCA8 c3RyaW5nPiApXG4iCisJCSJTaG93cyA8c3RyaW5nPiBsb2NhbGx5ICh0byB0 aGUgdGZvdXQgc3RyZWFtKS5cbiIKKwl9LAorCXsKKwkJInNlbmQiLCB0Zl9z ZW5kLCBNRVRIX1ZBUkFSR1MsCisJCSJ0Zi5zZW5kKCA8c3RyaW5nPiwgKDx3 b3JsZD4pIClcbiIKKwkJIlNlbmQgPHN0cmluZz4gdG8gPHdvcmxkPiAoZGVm YXVsdDogY3VycmVudCB3b3JsZCkiCisJfSwKKwl7CSJ0ZnJjIiwgdGZfdGZy YywgTUVUSF9WQVJBUkdTLAorCQkidGYudGZyYygpXG4iCisJCSJyZXR1cm5z IHRoZSBmaWxlIG5hbWUgb2YgdGhlIC50ZnJjIGZpbGUgKG9yIGVtcHR5IHN0 cmluZykiCisJfSwKKwl7CisJCSJ3b3JsZCIsIHRmX3dvcmxkLCBNRVRIX1ZB UkFSR1MsCisJCSJ0Zi53b3JsZCgpXG4iCisJCSJSZXR1cm5zIHRoZSBuYW1l IG9mIHRoZSBjdXJyZW50IHdvcmxkLCBvciBhIGJsYW5rIHN0cmluZy4iCisJ fSwKKwl7IE5VTEwsIE5VTEwsIDAsIE5VTEwgfQorfTsKKworCisvLyAtLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBIZWxw ZXJzCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tCisKKy8vIHJ1biB0aGUgY29tbWFuZCBpbiB0aGUgY29udGV4dCBvZiB0 aGUgX19tYWluX18gZGljdGlvbmFyeQorc3RhdGljIFB5T2JqZWN0ICptYWlu X21vZHVsZSwgKm1haW5fZGljdD1OVUxMOworc3RhdGljIFB5T2JqZWN0ICpj b21tb25fcnVuKCBjb25zdCBjaGFyICpjbWQsIGludCBzdGFydCApCit7CisJ cmV0dXJuIFB5UnVuX1N0cmluZyggY21kLCBzdGFydCwgbWFpbl9kaWN0LCBt YWluX2RpY3QgKTsKK30KKworCisvLyBDb252ZXJ0IGludCwgZmxvYXQsIGFu ZCBzdHJpbmcgdG8gcHl0aG9uIG9iamVjdHMgZm9yIHJldHVybgorLy8gT3Ro ZXJ3aXNlLCBqdXN0IHJldHVybiBOb25lCitzdGF0aWMgUHlPYmplY3QqIHRm dmFyX3RvX3B5dmFyKCBjb25zdCBzdHJ1Y3QgVmFsdWUgKnJjICkKK3sKKwlz d2l0Y2goIHJjLT50eXBlICkgeworCWNhc2UgVFlQRV9JTlQ6CisJY2FzZSBU WVBFX1BPUzoKKwkJRFBSSU5URiggIlRZUEVfSU5UOiAlZCIsIHJjLT51Lml2 YWwgKTsKKwkJcmV0dXJuIFB5X0J1aWxkVmFsdWUoICJpIiwgcmMtPnUuaXZh bCApOworCWNhc2UgVFlQRV9GTE9BVDoKKwkJRFBSSU5URiggIlRZUEVfRkxP QVQ6ICVmIiwgcmMtPnUuZnZhbCApOworCQlyZXR1cm4gUHlfQnVpbGRWYWx1 ZSggImYiLCByYy0+dS5mdmFsICk7CisJY2FzZSBUWVBFX1NUUjoKKwljYXNl IFRZUEVfRU5VTToKKwkJRFBSSU5URiggIlRZUEVfU1RSOiAlcyIsIHJjLT5z dmFsLT5kYXRhICk7CisJCXJldHVybiBQeV9CdWlsZFZhbHVlKCAicyIsIHJj LT5zdmFsLT5kYXRhICk7CisJZGVmYXVsdDoKKwkJRFBSSU5URiggIlRZUEUg Pz8/ICVkIiwgcmMtPnR5cGUgKTsKKwkJUHlfUkVUVVJOX05PTkU7CisJfQor fQorCisvLyBIZWxwZXIgLSB0YWtlIGEgcHl0aG9uIHJldHVybiBvYmplY3Qg YW5kIGNvdmVydCBpdCB0byBhIHRmIHJldHVybiBvYmplY3QuCisvLyBXZSBz dXBwcnQgc3RyaW5ncywgaW50ZWdlcnMsIGJvb2xlYW5zIChGYWxzZS0+MCwg VHJ1ZS0+MSApLCBhbmQgZmxvYXRzCitzdGF0aWMgc3RydWN0IFZhbHVlKiBw eXZhcl90b190ZnZhciggUHlPYmplY3QgKnBSYyApCit7CisJc3RydWN0IFZh bHVlICpyYzsKKwljaGFyICpjc3RyOworCWludCBsZW47IC8vIFB5X3NzaXpl X3QgbGVuOworCisJLy8gY2FuIGJlIG51bGwgaWYgZXhjZXB0aW9uIHdhcyB0 aHJvd24KKwlpZiggIXBSYyApIHsKKwkJUHlFcnJfUHJpbnQoKTsKKwkJcmV0 dXJuIG5ld3N0ciggIiIsIDAgKTsgIAorCX0KKworCS8vIENvbnZlcnQgc3Ry aW5nIGJhY2sgaW50byB0ZiBzdHJpbmcKKwlpZiggUHlTdHJpbmdfQ2hlY2so IHBSYyApICYmICggUHlTdHJpbmdfQXNTdHJpbmdBbmRTaXplKCBwUmMsICZj c3RyLCAmbGVuICkgIT0gLTEgKSApIHsKKwkJRFBSSU5URiggIiAgcmMgc3Ry aW5nOiAlcyIsIGNzdHIgKTsKKwkJcmMgPSBuZXdzdHIoIGNzdHIsIGxlbiAp OworCX0gZWxzZSBpZiggUHlJbnRfQ2hlY2soIHBSYyApICkgeworCQlEUFJJ TlRGKCAiICByYyBpbnQ6ICVsZCIsIFB5SW50X0FzTG9uZyggcFJjICkgKTsK KwkJcmMgPSBuZXdpbnQoIFB5SW50X0FzTG9uZyggcFJjICkgKTsKKwl9IGVs c2UgaWYoIFB5TG9uZ19DaGVjayggcFJjICkgKSB7CisJCURQUklOVEYoICIg IHJjIGxvbmc6ICVsZCIsIFB5TG9uZ19Bc0xvbmcoIHBSYyApICk7CisJCXJj ID0gbmV3aW50KCBQeUxvbmdfQXNMb25nKCBwUmMgKSApOworCX0gZWxzZSBp ZiggUHlGbG9hdF9DaGVjayggcFJjICkgKSB7CisJCURQUklOVEYoICIgIHJj IGZsb2F0OiAlbGYiLCBQeUZsb2F0X0FzRG91YmxlKCBwUmMgKSApOworCQly YyA9IG5ld2Zsb2F0KCBQeUZsb2F0X0FzRG91YmxlKCBwUmMgKSApOworCX0g ZWxzZSBpZiggUHlCb29sX0NoZWNrKCBwUmMgKSApIHsKKwkJRFBSSU5URigg IiAgcmMgYm9vbDogJWxmIiwgcFJjID09IFB5X1RydWUgPyAxIDogMCApOwor CQlyYyA9IG5ld2ludCggcFJjID09IFB5X1RydWUgPyAxIDogMCApOworCX0g ZWxzZSB7CisJCURQUklOVEYoICIgIHJjIE5vbmUiICk7CisJCXJjID0gbmV3 c3RyKCAiIiwgMCApOworCX0KKwlQeV9ERUNSRUYoIHBSYyApOworCisJLy8g QW5kIHJldHVybgorCXJldHVybiByYzsKK30KKworLy8gLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gU3RydWN0dXJhbCB3 b3JrIC0gaW5pdGlhbGl6ZSB0aGUgaW50ZXJwcmV0ZXIgaWYgbmVjZXNzYXJ5 CisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t CitzdGF0aWMgaW50IHB5X2luaXRlZD0wOworCisvLyBBbGwgdGhpcyBpcyBl eGVjdXRlZCBvbiBmaXJzdCBsb2FkLiBOb3RlIC0geW91IGNhbiBjaGFuZ2Ug dGhlIGJlaGF2aW9yIG9mIHRoaXMKKy8vIG9uIHRoZSBmbHksIGZvciBpbnN0 YW5jZSB0byB0dXJuIG9uIHN0ZG91dCwgYnkgZG9pbmcKKy8vICAgIC9weXRo b24gc3lzLnN0ZG91dC5vdXRwdXQ9dGYub3V0CisvLyB0aGVuIHJldHVybmlu ZyBpdCB3aXRoCisvLyAgICAvcHl0aG9uIHN5cy5zdGRvdXQub3V0cHV0PU5v bmUKKy8vCitzdGF0aWMgY29uc3QgY2hhciAqaW5pdF9zcmMgPQorCSJjbGFz cyBfX2R1bW15b3V0OlxuIgorCSIJYnVmPScnXG4iCisJIlxuIgorCSIJZGVm IF9faW5pdF9fKCBzZWxmLCBvdXRwdXQgKTpcbiIKKwkiCQkncGFzcyBpbiBO b25lIGZvciBubyBvdXRwdXQnXG4iCisJIgkJc2VsZi5vdXRwdXQgPSBvdXRw dXRcbiIKKwkiCWRlZiB3cml0ZSggc2VsZiwgYXJnICk6XG4iCisJIgkJaWYg bm90IHNlbGYub3V0cHV0OlxuIgorCSIJCQlyZXR1cm5cbiIKKwkiCQlzZWxm LmJ1Zis9YXJnXG4iCisJIgkJd2hpbGUgJ1xcbicgaW4gc2VsZi5idWY6XG4i CisJIgkJCWEsIHNlbGYuYnVmID0gc2VsZi5idWYuc3BsaXQoJ1xcbicsMSlc biIKKwkiCQkJc2VsZi5vdXRwdXQoIGEgKVxuIgorCSJcbiIKKwkic3lzLnN0 ZG91dCA9IF9fZHVtbXlvdXQoIE5vbmUgKVxuIiAgCS8vIHRoaXMgY291bGQg YmUgdG8gdGYub3V0CisJInN5cy5zdGRlcnIgPSBfX2R1bW15b3V0KCB0Zi5l cnIgKVxuIgorCSJcbiIKKwkic3lzLmFyZ3Y9WyAndGYnIF1cbiIKKzsKKwor c3RhdGljIHZvaWQgcHl0aG9uX2luaXQoKQoreworCWlmKCBweV9pbml0ZWQg KQorCQlyZXR1cm47CisKKwkvLyBJbml0aWFsaXplIHB5dGhvbgorCVB5X0lu aXRpYWxpemUoKTsKKwkKKwkvLyBUZWxsIGl0IGFib3V0IG91ciB0Zl9ldmFs CisJUHlfSW5pdE1vZHVsZSggInRmIiwgdGZNZXRob2RzICk7CisKKwkvLyBn ZXQgdGhlIGJhc2ljIG1vZHVsZXMKKwlQeVJ1bl9TaW1wbGVTdHJpbmcoICJp bXBvcnQgb3MsIHN5cywgdGYiICk7CisJUHlSdW5fU2ltcGxlU3RyaW5nKCAi c3lzLnBhdGguYXBwZW5kKCAnLicgKSIgKTsKKworCS8vIG1vZGlmeSBweXRo b24gcGF0aAorCWlmKCBURlBBVEggJiYgKlRGUEFUSCApIHsKKwkJU3RyaW5n ICpidWYgPSBTdHJpbmduZXcoIE5VTEwsIDAsIDAgKTsKKwkJU3ByaW50Zigg YnVmLCAic3lzLnBhdGguZXh0ZW5kKCBcIiVzXCIuc3BsaXQoKSApIiwgVEZQ QVRIICk7CisJCVB5UnVuX1NpbXBsZVN0cmluZyggYnVmLT5kYXRhICk7CisJ fQorCWlmKCBURkxJQkRJUiAmJiAqVEZMSUJESVIgKSB7CisJCVN0cmluZyAq YnVmID0gU3RyaW5nbmV3KCBOVUxMLCAwLCAwICk7CisJCVNwcmludGYoIGJ1 ZiwgInN5cy5wYXRoLmFwcGVuZCggXCIlc1wiICkiLCBURkxJQkRJUiApOwor CQlQeVJ1bl9TaW1wbGVTdHJpbmcoIGJ1Zi0+ZGF0YSApOworCX0KKworCVB5 UnVuX1NpbXBsZVN0cmluZyggaW5pdF9zcmMgKTsKKworCS8vIFRoZXNlIGFy ZSBib3RoIGJvcnJvd2VkIHJlZnMsIHdlIGRvbid0IGhhdmUgdG8gREVDUkVG CisJbWFpbl9tb2R1bGUgPSBQeUltcG9ydF9BZGRNb2R1bGUoICJfX21haW5f XyIpOworCW1haW5fZGljdCA9IFB5TW9kdWxlX0dldERpY3QoIG1haW5fbW9k dWxlICk7CisKKworCXB5X2luaXRlZCA9IDE7Cit9CisKK3N0YXRpYyB2b2lk IHB5dGhvbl9raWxsKCkKK3sKKwlpZiggcHlfaW5pdGVkICkgeworCQlQeV9G aW5hbGl6ZSgpOworCQlweV9pbml0ZWQgPSAwOworCX0KK30KKworCisvLyAt LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisvLyBj IC0+IHB5dGhvbiBjYWxscworLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLQorCisKKy8vIEhhbmRsZSBhIHB5dGhvbiBjYWxs IHdpdGggYXJndW1lbnRzCitzdHJ1Y3QgVmFsdWUgKmhhbmRsZV9weXRob25f Y2FsbF9jb21tYW5kKCBTdHJpbmcgKmFyZ3MsIGludCBvZmZzZXQgKQorewor CWNoYXIgKmZ1bmNzdHIsICphcmdzdHI7CisJUHlPYmplY3QgKnBSYz1OVUxM LCAqZnVuY3Rpb249TlVMTCwgKmFyZ2xpc3Q9TlVMTDsKKwkvL1N0cmluZyAq YnVmOworCisJaWYoICFweV9pbml0ZWQgKQorCQlweXRob25faW5pdCgpOwor CisJRFBSSU5URiggImhhbmRsZV9weXRob25fY2FsbF9jb21tYW5kOiAlcyIs IGFyZ3MtPmRhdGEgKyBvZmZzZXQgKTsKKworCS8vIExvb2sgZm9yIHN0cmlu ZyBzcGxpdHRpbmcgZnVuY3Rpb24gbmFtZSBhbmQgYXJndW1lbnRzCisJZnVu Y3N0ciA9IHN0cmR1cCggYXJncy0+ZGF0YSArIG9mZnNldCApOworCWlmKCAo IGFyZ3N0ciA9IHN0cmNociggZnVuY3N0ciwgJyAnICkgKSApIHsKKwkJKmFy Z3N0cisrID0gJ1wwJzsKKwl9IGVsc2UgeworCQlhcmdzdHIgPSAiIjsKKwl9 CisKKwkvLyBMb29rIHVwIHRoZSBmdW5jdGlvbiBpbiB0aGUgbmFtZXNwYWNl LCBtYWtlIHN1cmUgaXQncyBjYWxsYWJsZQorCWZ1bmN0aW9uID0gY29tbW9u X3J1biggZnVuY3N0ciwgUHlfZXZhbF9pbnB1dCApOworCWlmKCAhZnVuY3Rp b24gKSB7CisJCWdvdG8gYmFpbDsKKwl9CisJaWYoICFQeUNhbGxhYmxlX0No ZWNrKCBmdW5jdGlvbiApKSB7CisJCVB5RXJyX1NldFN0cmluZyhQeUV4Y19U eXBlRXJyb3IsICJwYXJhbWV0ZXIgbXVzdCBiZSBjYWxsYWJsZSIgKTsKKwkJ Z290byBiYWlsOworCX0KKworCS8vIE9rYXksIHNvIG5vdyBpdCdzIGNhbGxh YmxlLCBnaXZlIGl0IHRoZSBzdHJpbmcuCisJLy8gV2UgZ28gdGhyb3VnaCBh bGwgdGhpcyBiZWNhdXNlIG90aGVyd2lzZSB0aGUgcXVvdGluZyBwcm9ibGVt IGlzIGluc2FuZS4KKwlhcmdsaXN0ID0gUHlfQnVpbGRWYWx1ZSggIihzKSIs IGFyZ3N0ciApOworCXBSYyA9IFB5RXZhbF9DYWxsT2JqZWN0KCBmdW5jdGlv biwgYXJnbGlzdCApOworCitiYWlsOgorCVB5X1hERUNSRUYoIGZ1bmN0aW9u ICk7CisJUHlfWERFQ1JFRiggYXJnbGlzdCApOworCWZyZWUoIGZ1bmNzdHIg KTsKKwlyZXR1cm4gcHl2YXJfdG9fdGZ2YXIoIHBSYyApOworfQorCisvLyBK dXN0IGtpbGwgdGhlIGludGVycHJldGVyCitzdHJ1Y3QgVmFsdWUgKmhhbmRs ZV9weXRob25fa2lsbF9jb21tYW5kKCBTdHJpbmcgKmFyZ3MsIGludCBvZmZz ZXQgKQoreworCXB5dGhvbl9raWxsKCk7CisJcmV0dXJuIG5ld2ludCggMCAp OworfQorCisvLyBJbXBvcnQvcmVsb2FkIGEgcHl0aG9uIG1vZHVsZQkgIAor c3RydWN0IFZhbHVlICpoYW5kbGVfcHl0aG9uX2xvYWRfY29tbWFuZCggU3Ry aW5nICphcmdzLCBpbnQgb2Zmc2V0ICkKK3sKKwlQeU9iamVjdCAqcFJjOwor CXN0cnVjdCBWYWx1ZSAqcnY7CisJU3RyaW5nICpidWY7CisJY29uc3QgY2hh ciAqbmFtZSA9IGFyZ3MtPmRhdGEgKyBvZmZzZXQ7CisKKwlpZiggIXB5X2lu aXRlZCApCisJCXB5dGhvbl9pbml0KCk7CisJCisJRFBSSU5URiggImhhbmRs ZV9weXRob25fbG9hZF9jb21tYW5kOiAlcyIsIG5hbWUgKTsKKworCS8vIG1v ZHVsZSBjb3VsZCBpbnZva2UgdGYuZXZhbCwgc28gbWFyayBpdCBhcyB1c2Vk CisJKCBidWYgPSBTdHJpbmduZXcoIE5VTEwsIDAsIDAgKSApLT5saW5rcysr OworCVNwcmludGYoIGJ1ZiwKKwkJLy8gaWYgaXQgZXhpc3RzLCByZWxvYWQg aXQsIG90aGVyd2lzZSBpbXBvcnQgaXQKKwkJInRyeTpcbiIKKwkJIiAgcmVs b2FkKCAlcyApXG4iCisJCSJleGNlcHQgKCBOYW1lRXJyb3IsIFR5cGVFcnJv ciApOlxuIgorCQkiICBpbXBvcnQgJXNcbiIsCisJCW5hbWUsIG5hbWUgKTsK KworCXBSYyA9IGNvbW1vbl9ydW4oIGJ1Zi0+ZGF0YSwgUHlfZmlsZV9pbnB1 dCApOworCWlmKCBwUmMgKSB7CisJCVB5X0RFQ1JFRiggcFJjICk7CisJCXJ2 ID0gbmV3aW50KCAwICk7CisJfSBlbHNlIHsKKwkJUHlFcnJfUHJpbnQoKTsK KwkJcnYgPSBuZXdpbnQoIDEgKTsKKwl9CisJU3RyaW5nZnJlZSggYnVmICk7 CisJcmV0dXJuIHJ2OworfQorCisvLyBSdW4gYXJiaXRyYXJ5IGNvZGUKK3N0 cnVjdCBWYWx1ZSAqaGFuZGxlX3B5dGhvbl9jb21tYW5kKCBTdHJpbmcgKmFy Z3MsIGludCBvZmZzZXQgKQoreworCVB5T2JqZWN0ICpwUmM7CisKKwlpZigg IXB5X2luaXRlZCApCisJCXB5dGhvbl9pbml0KCk7CisKKwlEUFJJTlRGKCAi aGFuZGxlX3B5dGhvbl9jb21tYW5kOiAlcyIsIGFyZ3MtPmRhdGEgKyBvZmZz ZXQgKTsKKwlwUmMgPSBjb21tb25fcnVuKCBhcmdzLT5kYXRhICsgb2Zmc2V0 LCBQeV9zaW5nbGVfaW5wdXQgKTsKKwlyZXR1cm4gcHl2YXJfdG9fdGZ2YXIo IHBSYyApOworfQorCitzdHJ1Y3QgVmFsdWUgKmhhbmRsZV9weXRob25fZnVu Y3Rpb24oIGNvblN0cmluZyAqYXJncyApCit7CisJUHlPYmplY3QgKnBSYzsK KworCWlmKCAhcHlfaW5pdGVkICkKKwkJcHl0aG9uX2luaXQoKTsKKworCURQ UklOVEYoICJoYW5kbGVfcHl0aG9uX2V4cHJlc3Npb246ICVzIiwgYXJncy0+ ZGF0YSApOworCXBSYyA9IGNvbW1vbl9ydW4oIGFyZ3MtPmRhdGEsIFB5X2V2 YWxfaW5wdXQgKTsKKwlyZXR1cm4gcHl2YXJfdG9fdGZ2YXIoIHBSYyApOwor fQorCisjZW5kaWYKZGlmZiAtck51IC14IC5zdm4gLXggY29uZmlnLmxvZyAt eCBjb25maWcuc3RhdHVzIC14IHRmLWhlbHAgLXggTWFrZWZpbGUgLXggY2hh cnRhYmxlcy5jIC14IHRmY29uZmlnLmggLXggdGZkZWZzLmggLXggJyouYnVp bGQnIC14ICcqLmJhaycgLXggJyouaWR4JyAteCAnKi5vJyAteCAnKi5weWMn IC14IGh0bWwydGYgLXggZGVmYXVsdCAteCBtYWtlaGVscCAteCB0ZiAteCBk ZnRhYmxlcyAteCAnbGlicGNyZSonIC14IGh0bWwydGlmIHRmLTUwYjgtY2xl YW4vc3JjL3RmcHl0aG9uLmggdGYtNTBiOC1weS9zcmMvdGZweXRob24uaAot LS0gdGYtNTBiOC1jbGVhbi9zcmMvdGZweXRob24uaAkxOTY5LTEyLTMxIDE2 OjAwOjAwLjAwMDAwMDAwMCAtMDgwMAorKysgdGYtNTBiOC1weS9zcmMvdGZw eXRob24uaAkyMDA4LTAxLTExIDE1OjE2OjMxLjAwMDAwMDAwMCAtMDgwMApA QCAtMCwwICsxLDM0IEBACisjaWZuZGVmIFRGUFlUSE9OX0gKKyNkZWZpbmUg VEZQWVRIT05fSAorCisjaWZkZWYgVEZQWVRIT04KKworI2luY2x1ZGUgIlB5 dGhvbi5oIgorI2luY2x1ZGUgInRmY29uZmlnLmgiCisjaW5jbHVkZSAicG9y dC5oIgorI2luY2x1ZGUgInRmLmgiCisjaW5jbHVkZSAidXRpbC5oIgorI2lu Y2x1ZGUgInBhdHRlcm4uaCIKKyNpbmNsdWRlICJzZWFyY2guaCIKKyNpbmNs dWRlICJ0ZmlvLmgiCisjaW5jbHVkZSAiY21kbGlzdC5oIgorI2luY2x1ZGUg ImNvbW1hbmQuaCIKKyNpbmNsdWRlICJ3b3JsZC5oIgkvKiBXb3JsZCwgZmlu ZF93b3JsZCgpICovCisjaW5jbHVkZSAic29ja2V0LmgiCS8qIG9wZW53b3Js ZCgpICovCisjaW5jbHVkZSAib3V0cHV0LmgiCS8qIG9mbHVzaCgpLCBkb2Jl bGwoKSAqLworI2luY2x1ZGUgImF0dHIuaCIKKyNpbmNsdWRlICJtYWNyby5o IgorI2luY2x1ZGUgImtleWJvYXJkLmgiCS8qIGZpbmRfa2V5KCksIGZpbmRf ZWZ1bmMoKSAqLworI2luY2x1ZGUgImV4cGFuZC5oIiAgICAgLyogbWFjcm9f cnVuKCkgKi8KKyNpbmNsdWRlICJzaWduYWxzLmgiICAgIC8qIHN1c3BlbmQo KSwgc2hlbGwoKSAqLworI2luY2x1ZGUgInZhcmlhYmxlLmgiCisKK3N0cnVj dCBWYWx1ZSAqaGFuZGxlX3B5dGhvbl9mdW5jdGlvbiggY29uU3RyaW5nICph cmdzICk7CitzdHJ1Y3QgVmFsdWUgKmhhbmRsZV9weXRob25fY29tbWFuZCgg U3RyaW5nICphcmdzLCBpbnQgb2Zmc2V0ICk7CitzdHJ1Y3QgVmFsdWUgKmhh bmRsZV9weXRob25fa2lsbF9jb21tYW5kKCBTdHJpbmcgKmFyZ3MsIGludCBv ZmZzZXQgKTsKK3N0cnVjdCBWYWx1ZSAqaGFuZGxlX3B5dGhvbl9jYWxsX2Nv bW1hbmQoIFN0cmluZyAqYXJncywgaW50IG9mZnNldCApOworc3RydWN0IFZh bHVlICpoYW5kbGVfcHl0aG9uX2xvYWRfY29tbWFuZCggU3RyaW5nICphcmdz LCBpbnQgb2Zmc2V0ICk7CisKKyNlbmRpZgorCisjZW5kaWYKZGlmZiAtck51 IC14IC5zdm4gLXggY29uZmlnLmxvZyAteCBjb25maWcuc3RhdHVzIC14IHRm LWhlbHAgLXggTWFrZWZpbGUgLXggY2hhcnRhYmxlcy5jIC14IHRmY29uZmln LmggLXggdGZkZWZzLmggLXggJyouYnVpbGQnIC14ICcqLmJhaycgLXggJyou aWR4JyAteCAnKi5vJyAteCAnKi5weWMnIC14IGh0bWwydGYgLXggZGVmYXVs dCAteCBtYWtlaGVscCAteCB0ZiAteCBkZnRhYmxlcyAteCAnbGlicGNyZSon IC14IGh0bWwydGlmIHRmLTUwYjgtY2xlYW4vc3JjL3ZhcnMubWFrIHRmLTUw YjgtcHkvc3JjL3ZhcnMubWFrCi0tLSB0Zi01MGI4LWNsZWFuL3NyYy92YXJz Lm1hawkyMDA4LTAxLTA1IDE1OjM5OjQwLjAwMDAwMDAwMCAtMDgwMAorKysg dGYtNTBiOC1weS9zcmMvdmFycy5tYWsJMjAwOC0wMS0xMSAxNToxNjozMS4w MDAwMDAwMDAgLTA4MDAKQEAgLTIwLDEwICsyMCwxMSBAQAogCiBTT1VSQ0Ug PSBhdHRyLmMgY29tbWFuZC5jIGRzdHJpbmcuYyBleHBhbmQuYyBleHByLmMg aGVscC5jIGhpc3RvcnkuYyBcCiAgIGtleWJvYXJkLmMgbWFjcm8uYyBtYWlu LmMgbWFsbG9jLmMgb3V0cHV0LmMgcHJvY2Vzcy5jIHNlYXJjaC5jIFwKLSAg c2lnbmFscy5jIHNvY2tldC5jIHRmaW8uYyB0dHkuYyB1dGlsLmMgdmFyaWFi bGUuYyB3b3JsZC5jCisgIHNpZ25hbHMuYyBzb2NrZXQuYyB0ZmlvLmMgdHR5 LmMgdXRpbC5jIHZhcmlhYmxlLmMgd29ybGQuYyBcCisgIHRmcHl0aG9uLmMK IAogT0JKUyA9IGF0dHIuJE8gY29tbWFuZC4kTyBkc3RyaW5nLiRPIGV4cGFu ZC4kTyBleHByLiRPIGhlbHAuJE8gaGlzdG9yeS4kTyBcCiAgIGtleWJvYXJk LiRPIG1hY3JvLiRPIG1haW4uJE8gbWFsbG9jLiRPIG91dHB1dC4kTyBwYXR0 ZXJuLiRPIHByb2Nlc3MuJE8gXAogICBzZWFyY2guJE8gc2lnbmFscy4kTyBz b2NrZXQuJE8gdGZpby4kTyB0dHkuJE8gdXRpbC4kTyB2YXJpYWJsZS4kTyB3 b3JsZC4kTyBcCi0gICQoT1RIRVJfT0JKUykKKyAgdGZweXRob24uJE8gJChP VEhFUl9PQkpTKQogCmRpZmYgLXJOdSAteCAuc3ZuIC14IGNvbmZpZy5sb2cg LXggY29uZmlnLnN0YXR1cyAteCB0Zi1oZWxwIC14IE1ha2VmaWxlIC14IGNo YXJ0YWJsZXMuYyAteCB0ZmNvbmZpZy5oIC14IHRmZGVmcy5oIC14ICcqLmJ1 aWxkJyAteCAnKi5iYWsnIC14ICcqLmlkeCcgLXggJyoubycgLXggJyoucHlj JyAteCBodG1sMnRmIC14IGRlZmF1bHQgLXggbWFrZWhlbHAgLXggdGYgLXgg ZGZ0YWJsZXMgLXggJ2xpYnBjcmUqJyAteCBodG1sMnRpZiB0Zi01MGI4LWNs ZWFuL3RmLWxpYi9jb25maWcucHkgdGYtNTBiOC1weS90Zi1saWIvY29uZmln LnB5Ci0tLSB0Zi01MGI4LWNsZWFuL3RmLWxpYi9jb25maWcucHkJMTk2OS0x Mi0zMSAxNjowMDowMC4wMDAwMDAwMDAgLTA4MDAKKysrIHRmLTUwYjgtcHkv dGYtbGliL2NvbmZpZy5weQkyMDA4LTAxLTI2IDAwOjA0OjMyLjAwMDAwMDAw MCAtMDgwMApAQCAtMCwwICsxLDU4NSBAQAorIworIyBjb25maWcucHkKKyMK KyMgVGhpcyBhdHRlbXB0cyB0byBtYW5hZ2UgeW91ciBUaW55RnVndWUgY29u ZmlndXJhdGlvbiwgbGV0dGluZyB5b3Ugc2VsZWN0LAorIyBlZGl0LCBhbmQg c2F2ZSB5b3VyIHdvcmxkcyB1c2luZyAvY29tbWFuZHMuIFdpbGwgZXhwYW5k IHRoaXMgdG8ga2V5IGJpbmRpbmdzCisjIGxhdGVyLiBUaGlzIGlzIG15IGZp cnN0IGN1cnNlcyBwcm9ncmFtLCBzbyBpdCdzIHByZXR0eSB1dXV1dWdseSwg c29ycnkuCisjCisjIFVzYWdlOgorIyAgIC9weXRob25fbG9hZCBjb25maWcK KyMgICAvcHl0aG9uX2NhbGwgY29uZmlnLndvcmxkc2ZpbGUgfi8udGYvd29y bGRzICAgICAgKG9wdGlvbmFsKQorIyAgIC93b3JsZHMKKyMKKyMgSWYgeW91 IGRvbid0IGRvIHRoZSBjb25maWcud29ybGRzZmlsZSgpIHRvIHRlbGwgaXQg d2hlcmUgeW91ciB3b3JsZHMgYXJlCisjIGxvY2F0ZWQgaXQgd2lsbCBhdHRl bXB0IHRvIGZpZ3VyZSBpdCBvdXQgYnkgbG9va2luZyBmb3IgYSAvbG9hZHdv cmxkcyBpbgorIyB5b3VyIC50ZnJjLiBPciBpZiBpdCBmaW5kcyBhZGR3b3Js ZCBjb21tYW5kcyBpbiB5b3VyIC50ZnJjIGl0IHdpbGwgYXNzdW1lCisjIGl0 IHNob3VsZCBqdXN0IGR1bXAgdGhlbSBpbiB0aGVyZS4KKyMKKyMKKyMgQ29w eXJpZ2h0IDIwMDggUm9uIERpcHBvbGQgc2l6ZXJAc2FuLnJyLmNvbQorIwor IyB2MS4wMSAtIEphbiAyMyAnMDggLSBDb252ZXJ0IHRvIHVzaW5nIHRmdXRp bAorIyB2MS4wMCAtIEphbiAyMCAnMDggLSBGaXJzdCB2ZXJzaW9uCisjCitp bXBvcnQgY3Vyc2VzLCBvcworaW1wb3J0IHRmLCB0ZnV0aWwKKworIyAtLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0KKyMgV2hlcmUncyB0aGUgd29ybGRzZmlsZT8KKyMgLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t CisKK1dPUkxEU0ZJTEU9Tm9uZQorZGVmIHdvcmxkc2ZpbGUoIGZuYW1lICk6 CisJZ2xvYmFsIFdPUkxEU0ZJTEUKKwlXT1JMRFNGSUxFPWZuYW1lCisKK2Rl ZiBfZmluZF93b3JsZHNmaWxlKCk6CisJIyBhbHJlYWR5IGZvdW5kCisJZ2xv YmFsIFdPUkxEU0ZJTEUKKwlpZiBXT1JMRFNGSUxFOgorCQlyZXR1cm4gV09S TERTRklMRQorCisJIyBsb29rIGluIHRmcmMKKwl0ZnJjID0gdGYudGZyYygp CisJaWYgbm90IHRmcmM6CisJCXJldHVybiBOb25lCisKKwkjIHNlYXJjaCB0 aHJvdWdoIHRmcmMKKwlmID0gb3BlbiggdGZyYywgInJVIiApCisJZm9yIGxp bmUgaW4gZjoKKwkJaWYgbGluZS5zdGFydHN3aXRoKCAiL2xvYWR3b3JsZCAi ICk6CisJCQlXT1JMRFNGSUxFPWxpbmUuc3BsaXQoKVsxXS5zdHJpcCgpCisJ CQlicmVhaworCQlpZiAiYWRkd29ybGQiIGluIGxpbmU6CisJCQlXT1JMRFNG SUxFID0gdGZyYworCQkJYnJlYWsKKwlmLmNsb3NlKCkKKwlpZiBXT1JMRFNG SUxFOgorCQlXT1JMRFNGSUxFID0gb3MucGF0aC5hYnNwYXRoKCBvcy5wYXRo LmV4cGFuZHVzZXIoIFdPUkxEU0ZJTEUgKSApCisJcmV0dXJuIFdPUkxEU0ZJ TEUKKwkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tCisjIGhlbHBlcnMKKyMgLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisK KworIyBzaG93IGhlbHAgbGluZSB3aXRoIFtmXW9vIGFzIDxiPmY8L2I+b28K K2RlZiBfc2hvd2tleXMoIHdpbmRvdywgeSwgeCwgZmllbGRzICk6CisKKwlt YXh5LCBtYXh4ID0gd2luZG93LmdldG1heHl4KCkKKwl3aW5kb3cuYWRkbnN0 ciggeSwgeCwgIiAiKjEzMiwgbWF4eC14LTIgKQorCisJd2luZG93LmFkZHN0 ciggeSwgeCwgZmllbGRzLnJlcGxhY2UoJ1snLCcnKS5yZXBsYWNlKCddJywn JykgKQorCW9mZnNldCwgcG9zPSAwLCAwCisJd2hpbGUgVHJ1ZToKKwkJcG9z ID0gZmllbGRzLmZpbmQoICdbJywgcG9zICkKKwkJaWYgcG9zPDA6IGJyZWFr CisJCW9mZnNldCArPSAxCisJCWVuZCA9IGZpZWxkcy5maW5kKCAnXScsIHBv cyApCisJCWlmIGVuZDwwOiBicmVhaworCQl3aW5kb3cuYWRkc3RyKCB5LCB4 K3Bvcy1vZmZzZXQrMSwgZmllbGRzW3BvcysxOmVuZF0sIGN1cnNlcy5BX0JP TEQgKQorCQlwb3MgPSBlbmQKKwkJb2Zmc2V0ICs9IDEKKworIyAtLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLQorIyBFZGl0IHRoZSB3b3JsZHMKKyMgLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworZGVmIHdvcmxkcyggYXJnc3Ry ICk6CisJIyB3cmFwIHRoZSBmdW5jdGlvbiBpbiBjYXNlIGl0IGNyYXNoZXMK KwljdXJzZXMud3JhcHBlciggX3dvcmxkcyApCisJIyBzY3JlZW4gaXMgYWxs IG1lc3NlZCB1cCwgcmVkcmF3IGl0CisJdGYuZXZhbCggIi9kb2tleSBSRURS QVciICkKKworZGVmIF9uZXdfdW5kbyggdW5kbywgd2RpY3QsIG1lc3NhZ2Us IHNhdmVkICk6CisJdW5kby5hcHBlbmQoICggbWVzc2FnZSwgZGljdCggWyAo IGtleSwgdGZ1dGlsLldvcmxkKHZhbCkgKSBcCisJCQkJCQkJCQlmb3Iga2V5 LCB2YWwgaW4gd2RpY3QuaXRlbXMoKSBdICksIHNhdmVkICkgKQorCitTQVZF RCA9IFRydWUKK2RlZiBfY2hhbmdlX3dvcmxkcyggb2xkLCB3ZGljdCApOgor CSMgcmVtb3ZlIG9sZCB3b3JsZHMKKwlmb3IgbmFtZSwgaXRlbSBpbiBvbGQu aXRlbXMoKToKKwkJaWYgbmFtZSBub3QgaW4gd2RpY3Q6CisJCQl0Zi5ldmFs KCAiL3Vud29ybGQgIiArIG5hbWUgKQorCisJIyBhZGQgbmV3IG9yIGNoYW5n ZWQgd29ybGRzCisJZm9yIG5hbWUsIGl0ZW0gaW4gd2RpY3QuaXRlbXMoKToK KwkJY21kID0gaXRlbS5hZGR3b3JsZF9jb21tYW5kKCBmdW5jPVRydWUsIGZ1 bGw9VHJ1ZSApCisJCWlmIG5hbWUgbm90IGluIG9sZDoKKwkJCWlmIGNtZDog dGYuZXZhbCggY21kICkKKwkJZWxpZiBpdGVtLmNoYW5nZWRfZnJvbShvbGRb bmFtZV0pOgorCQkJdGYuZXZhbCggIi91bndvcmxkICIgKyBuYW1lICkKKwkJ CWlmIGNtZDogdGYuZXZhbCggY21kICkKKworZGVmIF9zYXZlX3dvcmxkczIo IGZvdXQsIHdkaWN0ICk6CisJZm9yIG5hbWUsIGl0ZW0gaW4gc29ydGVkKHdk aWN0Lml0ZW1zKCkpOgorCQljbWQgPSBpdGVtLmFkZHdvcmxkX2NvbW1hbmQo IGZ1bmM9RmFsc2UsIGZ1bGw9VHJ1ZSApCisJCWlmIGNtZDoKKwkJCWZvdXQu d3JpdGUoICBjbWQgKyAnXG4nICkKKwlyZXR1cm4gVHJ1ZQorCitkZWYgX3Nh dmVfd29ybGRzKCB3ZGljdCApOgorCWZuYW1lID0gX2ZpbmRfd29ybGRzZmls ZSgpCisJaWYgbm90IGZuYW1lOgorCQlyZXR1cm4gRmFsc2UsICJDYW4ndCBm aW5kIHdvcmxkIGZpbGUuIFVzZSAnL3B5dGhvbl9jYWxsIGNvbmZpZy53b3Js ZHNmaWxlIDxmaWxlbmFtZT4nIgorCisJIyBSZWFkIHRoZSBvbGQgbGluZXMg ZXhjZXB0IGZvciBhZGR3b3JsZCwgd3JpdGUgdG8gbmV3IGZpbGUKKwl0cnk6 CisJCWZvdXQgPSBvcGVuKCBmbmFtZSsiLnh4eCIsICJ3dCIsIDA2MDAgKQor CWV4Y2VwdCBJT0Vycm9yLCBlOgorCQlyZXR1cm4gRmFsc2UsICJFcnJvciBv cGVuaW5nICVzIGZvciB3cml0ZTogJXMiICUgKCBlLmZpbGVuYW1lLCBlLnN0 cmVycm9yICkKKworCWZpbiA9IG9wZW4oIGZuYW1lLCAiclUiICkKKwl3cml0 dGVuID0gRmFsc2UKKwkKKwlmb3IgbGluZSBpbiBmaW46CisJCWlmICJhZGR3 b3JsZCIgaW4gbGluZToKKwkJCWlmIG5vdCB3cml0dGVuOgorCQkJCXdyaXR0 ZW4gPSBfc2F2ZV93b3JsZHMyKCBmb3V0LCB3ZGljdCApCisJCQljb250aW51 ZQorCQkjIHdyaXRlLCBjb252ZXJ0aW5nIGxpbmUgZW5kaW5ncworCQlmb3V0 LndyaXRlKCBsaW5lICApCisJZmluLmNsb3NlKCkKKworCSMgd3JpdGUgYWxs IHRoZSB3b3JsZHMgdG8gdGhlIGVuZCBvZiB0aGUgZmlsZSBpZiBoYXZlbid0 IGRvbmUgaXQgeWV0CisJaWYgbm90IHdyaXR0ZW46CisJCXdyaXR0ZW4gPSBf c2F2ZV93b3JsZHMyKCBmb3V0LCB3ZGljdCApCisJZm91dC5jbG9zZSgpCisK KwkjIG1vdmUgdGhlIG5ldyBmaWxlIG92ZXIgdGhlIG9sZCBvbmUKKwlvcy5y ZW5hbWUoIGZpbi5uYW1lLCBmaW4ubmFtZSsiLmJhayIgKQorCW9zLnJlbmFt ZSggZm91dC5uYW1lLCBmaW4ubmFtZSApCisJdGYub3V0KCAiLSBzYXZlZCAv d29ybGRzIHRvICVzIiAlIGZpbi5uYW1lICkKKworCXJldHVybiBUcnVlLCBO b25lCisKKyMgVGhpcyBpcyB0aGUgcmVhbCB3b3JsZHMgZnVuY3Rpb24sIGlu dm9rZWQgYnkgY3Vyc2VzIHNhZmV0eSB3cmFwcGVyCitkZWYgX3dvcmxkcygg c3Rkc2NyICk6CisKKwkjIGdldCBkaWN0aW9uYXJ5IG9mIGN1cnJlbnQgd29y bGRzCisJd2RpY3QgPSB0ZnV0aWwubGlzdHdvcmxkcyggYXNkaWN0PVRydWUg KQorCisJY29scywgbGluZXMgPSB0ZnV0aWwuc2NyZWVuc2l6ZSgpCisJY29s b3JzID0gY3Vyc2VzLmNhbl9jaGFuZ2VfY29sb3IoKQorCisJIyBEcmF3IHRo ZSBib3JkZXIgYW5kIGNyZWF0ZSBhIHdvcmxkIHdpbmRvdworCXN0ZHNjci5j bGVhcigpCisJc3Rkc2NyLmJvcmRlcigpCisJc3Rkc2NyLmFkZHN0ciggMCwg NCwgInwgVGlueUZ1Z3VlIFdvcmxkcyB8IiwgY3Vyc2VzLkFfQk9MRCApCisJ d3BvcywgbGFzdHdwb3MgPSAwLCA5OTk5CisKKwl3b3JsZHdpbiwgc2Nyb2xs d2luID0gX3dvcmxkd2luKCBzdGRzY3IsIGxpbmVzLTQsIGNvbHMtNCwgMiwg MiApCisJI3dvcmxkd2luLCBzY3JvbGx3aW4gPSBfd29ybGR3aW4oIHN0ZHNj ciwgMTUsIGNvbHMtNCwgMiwgMiApCisJd29ybGR3aW4ucmVmcmVzaCgpCisK KwkjIHN0YXJ0IGFuIHVuZG8gc3RhY2sKKwl1bmRvLCByZWRvID0gW10sIFtd CisJZ2xvYmFsIFNBVkVECisKKwkjIG5vdyBsb29wCisJbWVzc2FnZSwgbGFz dG1lc3NhZ2UgPSBOb25lLCAiZHVtbXkiCisJd2hpbGUgVHJ1ZToKKworCQkj IHNvcnQgYnkgbmFtZQorCQl3bGlzdCA9IHNvcnRlZCggd2RpY3QudmFsdWVz KCkgKQorCisJCSMgZHJhdyB0aGUgbGlzdCwgZ2V0IGEgY29tbWFuZAorCQlf ZHJhd3dvcmxkcyggd2xpc3QsIHNjcm9sbHdpbiwgd3BvcywgbGFzdHdwb3Mg KQorCQlsYXN0d3BvcyA9IHdwb3MKKworCQkjCisJCSMgcGFyc2Uga2V5cwor CQkjCisJCWMgPSBzY3JvbGx3aW4uZ2V0a2V5KCkKKworCQkjIE1vdmVtZW50 CisJCWlmIGMgaW4gKCAnaScsICdLRVlfVVAnLCAnXHgxMCcgKToKKwkJCWlm IHdwb3M+MDoKKwkJCQl3cG9zIC09IDEKKworCQllbGlmIGMgaW4gKCAnaics ICdLRVlfRE9XTicsICdceDBlJyApIDoKKwkJCWlmICh3cG9zKzEpIDwgbGVu KCB3bGlzdCApOgorCQkJCXdwb3MgKz0gMQorCisJCSMgYWN0dWFsIGVkaXRp bmcKKwkJZWxpZiB3bGlzdCBhbmQgYyBpbiAoICdkJywgJ0tFWV9EQycgKToK KwkJCW1lc3NhZ2UgPSAnRGVsZXRlZCB3b3JsZCAlcycgJSB3bGlzdFt3cG9z XS5uYW1lCisJCQlfbmV3X3VuZG8oIHVuZG8sIHdkaWN0LCBtZXNzYWdlLCBT QVZFRCApCisJCQlkZWwgd2RpY3RbIHdsaXN0W3dwb3NdLm5hbWUgXQorCQkJ d3BvcyA9IG1pbiggd3BvcywgbGVuKHdkaWN0KS0xICkKKwkJCVNBVkVELCBs YXN0d3BvcyA9IEZhbHNlLCA5OTk5CisKKwkJZWxpZiB3bGlzdCBhbmQgYyBp biAoICdjJywgKToKKwkJCXcgPSB3bGlzdFt3cG9zXQorCQkJZm9yIGkgaW4g cmFuZ2UoIDIsIDk5ICk6CisJCQkJbmV3bmFtZSA9ICclcyglZCknICUgKCB3 Lm5hbWUsIGkgKQorCQkJCWlmIG5vdCBuZXduYW1lIGluIHdkaWN0OgorCQkJ CQltZXNzYWdlID0gJ0NvcGllZCB3b3JsZCAlcycgJSBuZXduYW1lCisJCQkJ CV9uZXdfdW5kbyggdW5kbywgd2RpY3QsIG1lc3NhZ2UsIFNBVkVEICkKKwkJ CQkJbmV3d29ybGQgPSB0ZnV0aWwuV29ybGQodykKKwkJCQkJbmV3d29ybGQu bmFtZSA9IG5ld25hbWUKKwkJCQkJd2RpY3RbbmV3bmFtZV0gPSBuZXd3b3Js ZAorCQkJCQlTQVZFRCwgbGFzdHdwb3MgPSBGYWxzZSwgOTk5OQorCQkJCQli cmVhaworCisJCWVsaWYgYyBpbiAoICdhJywgJ0tFWV9JTlMnICk6CisJCQl3 ID0gX2VkaXR3b3JsZCggd29ybGR3aW4sIHdkaWN0LmtleXMoKSwgTm9uZSAp CisJCQlpZiB3OgorCQkJCW1lc3NhZ2UgPSAnQWRkZWQgd29ybGQgJXMnICUg dy5uYW1lCisJCQkJX25ld191bmRvKCB1bmRvLCB3ZGljdCwgbWVzc2FnZSwg U0FWRUQgKQorCQkJCXdkaWN0WyB3Lm5hbWUgXSA9IHcKKwkJCQlTQVZFRCA9 IEZhbHNlCisJCQlsYXN0d3BvcyA9IDk5OTkKKwkJCV93b3JsZHdpbl9yZWRy YXcoIHdvcmxkd2luICkKKworCQllbGlmIHdsaXN0IGFuZCBjIGluICggJ2Un LCApOgorCQkJb2xkbmFtZSA9IHdsaXN0W3dwb3NdLm5hbWUKKwkJCXcgPSBf ZWRpdHdvcmxkKCB3b3JsZHdpbiwgd2RpY3Qua2V5cygpLCB0ZnV0aWwuV29y bGQod2xpc3Rbd3Bvc10pICkKKwkJCWlmIHc6CisJCQkJbWVzc2FnZSA9ICdF ZGl0ZWQgd29ybGQgJXMnICUgdy5uYW1lCisJCQkJX25ld191bmRvKCB1bmRv LCB3ZGljdCwgbWVzc2FnZSwgU0FWRUQgKQorCQkJCWlmIG9sZG5hbWUhPXcu bmFtZToKKwkJCQkJZGVsIHdkaWN0W29sZG5hbWVdCisJCQkJd2RpY3RbIHcu bmFtZSBdID0gdworCQkJCVNBVkVEID0gRmFsc2UKKwkJCWxhc3R3cG9zID0g OTk5OQorCQkJX3dvcmxkd2luX3JlZHJhdyggd29ybGR3aW4gKQorCisJCSMg dW5kby9yZWRvCisJCWVsaWYgYyA9PSAndSc6CisJCQlpZiB1bmRvOgorCQkJ CW1lc3NhZ2UsIHdkaWN0MiwgU0FWRUQyID0gdW5kby5wb3AoKQorCQkJCV9u ZXdfdW5kbyggcmVkbywgd2RpY3QsIG1lc3NhZ2UsIFNBVkVEICkKKwkJCQl3 ZGljdCwgU0FWRUQgPSB3ZGljdDIsIFNBVkVEMgorCQkJCW1lc3NhZ2UgPSAi VW5kaWQ6ICIgKyBtZXNzYWdlCisJCQkJbGFzdHdwb3MgPSA5OTk5CisJCQll bHNlOgorCQkJCW1lc3NhZ2UgPSAnTm90aGluZyB0byB1bmRvJworCisJCWVs aWYgYyA9PSAncic6CisJCQlpZiByZWRvOgorCQkJCW1lc3NhZ2UsIHdkaWN0 MiwgU0FWRUQyID0gcmVkby5wb3AoKQorCQkJCV9uZXdfdW5kbyggdW5kbywg d2RpY3QsIG1lc3NhZ2UsIFNBVkVEICkKKwkJCQl3ZGljdCwgU0FWRUQgPSB3 ZGljdDIsIFNBVkVEMgorCQkJCW1lc3NhZ2UgPSAiUmVkaWQ6ICIgKyBtZXNz YWdlCisJCQkJbGFzdHdwb3MgPSA5OTk5CisJCQllbHNlOgorCQkJCW1lc3Nh Z2UgPSAnTm90aGluZyB0byByZWRvJworCisKKwkJIyBBbnl0aGluZyB0aGF0 IHRlcm1pbmF0ZXMgdXMKKwkJZWxpZiB3bGlzdCBhbmQgYyBpbiAoICdcbics ICdLRVlfRU5URVInLCAnUScgKToKKwkJCWlmIHVuZG86CisJCQkJX2NoYW5n ZV93b3JsZHMoIHVuZG9bMF1bMV0sIHdkaWN0ICkKKwkJCWlmIGMgIT0gJ1En OgorCQkJCXRmLmV2YWwoICIvY29ubmVjdCAlcyIgJSB3bGlzdFt3cG9zXS5u YW1lICkKKwkJCWlmIG5vdCBTQVZFRDoKKwkJCQl0Zi5lcnIoICIqIFdhcm5p bmc6IHlvdXIgL3dvcmxkcyBoYXZlbid0IGJlZW4gc2F2ZWQgeWV0IiApCisJ CQlicmVhaworCQkJCisJCWVsaWYgYyA9PSAnUyc6CisJCQlpZiB1bmRvOgor CQkJCV9jaGFuZ2Vfd29ybGRzKCB1bmRvWzBdWzFdLCB3ZGljdCApCisJCQlp ZiBub3QgU0FWRUQ6CisJCQkJU0FWRUQsIG1lc3NhZ2UgPSBfc2F2ZV93b3Js ZHMoIHdkaWN0ICkKKwkJCWlmIFNBVkVEOgorCQkJCWJyZWFrCisKKwkJZWxp ZiBjID09ICdBJzoKKwkJCWlmIG5vdCBTQVZFRDoKKwkJCQl0Zi5lcnIoICIq IGFsbCAvd29ybGRzIGNoYW5nZXMgYWJvcnRlZCIgKQorCQkJU0FWRUQgPSBG YWxzZQorCQkJYnJlYWsKKworCQltZXNzYWdlLCBsYXN0bWVzc2FnZSA9IF9z aG93X21lc3NhZ2UoIHN0ZHNjciwgbWVzc2FnZSwgbGFzdG1lc3NhZ2UgKQor CisKK2RlZiBfc2hvd19tZXNzYWdlKCB3aW5kb3csIG1lc3NhZ2UsIGxhc3Rt ZXNzYWdlICk6CisJeSwgeCA9IHdpbmRvdy5nZXRtYXh5eCgpCisJaWYgbWVz c2FnZToKKwkJd2luZG93LmFkZG5zdHIoIDEsIDEsICIgIiArIG1lc3NhZ2Ug KyAiICIqeCwgeC0yLCBjdXJzZXMuQV9SRVZFUlNFICkKKwkJbGFzdG1lc3Nh Z2UgPSBtZXNzYWdlCisJCXdpbmRvdy5yZWZyZXNoKCkKKwllbGlmIGxhc3Rt ZXNzYWdlOgkKKwkJd2luZG93LmFkZG5zdHIoIDEsIDEsICIgIip4LCB4LTIs IGN1cnNlcy5BX05PUk1BTCApCisJCXdpbmRvdy5yZWZyZXNoKCkKKwkJbGFz dG1lc3NhZ2UgPSBOb25lCisJcmV0dXJuIE5vbmUsIGxhc3RtZXNzYWdlCisJ CQkKKworZGVmIF93b3JsZHdpbl9yZWRyYXcoIHdpbmRvdyApOgorCWxpbmVz LCBjb2xzID0gd2luZG93LmdldG1heHl4KCkKKwl3aW5kb3cuZXJhc2UoKQor CisJIyB0aXRsZQorCXdpbmRvdy5hZGRuc3RyKCAwLCAwLCAiV29ybGQgICAg ICBDaGFyYWN0ZXIgICAgICAgICBIb3N0ICAgICAgICAgICAgICAgICAgUG9y dCIsCisJCQkJCWNvbHMsIGN1cnNlcy5BX0JPTEQgKQorCSMgaGVscCBsaW5l CisJX3Nob3drZXlzKCB3aW5kb3csIGxpbmVzLTEsIDAsCisJCQkgICAnW2Vu dGVyXSAtIFthXWRkIFtjXW9weSBbZF1lbCBbZV1kaXQgLSBbdV1uZG8vW3Jd ZWRvIC0gW1NdYXZlIFtRXXVpdCBbQV1ib3J0JyApCisKKworZGVmIF93b3Js ZHdpbiggcGFyZW50LCBsaW5lcywgY29scywgeSwgeCApOgorCWxpbmVzIC09 IDQKKwljb2xzIC09IDQKKwl3aW5kb3cgPSBwYXJlbnQuZGVyd2luKCBsaW5l cywgY29scywgMiwgMiApCisJd2luZG93LmtleXBhZCgxKQorCisJX3dvcmxk d2luX3JlZHJhdyggd2luZG93ICkKKwkKKwlzY3JvbGx3aW4gPSB3aW5kb3cu ZGVyd2luKCBsaW5lcy0yLCBjb2xzLCAxLCAwICkKKwlzY3JvbGx3aW4ua2V5 cGFkKDEpCisJc2Nyb2xsd2luLmVyYXNlKCkKKworCXJldHVybiB3aW5kb3cs IHNjcm9sbHdpbgorCitkZWYgX2RyYXd3b3JsZHMoIHdsaXN0LCB3aW5kb3cs IHdwb3MsIGxhc3R3cG9zICk6CisKKwkjIGZpZ3VyZSBvdXQgdGhlIHRvcCB3 b3JsZCB3ZSdyZSBzaG93aW5nCisJbGluZXMsIGNvbHMgPSB3aW5kb3cuZ2V0 bWF4eXgoKQorCXRvcCA9IHdwb3MgLSBsaW5lcyArIDEKKwlpZiB0b3A8MDog dG9wID0gMAorCisJbGFzdHRvcCA9IGxhc3R3cG9zIC0gbGluZXMgKyAxCisJ aWYgbGFzdHRvcDwwOiBsYXN0dG9wPTAKKworCSMgVHJ5IHRvIGF2b2lkIHJl ZHJhd2luZyB0aGUgd2hvbGUgdGhpbmcKKwlzdGFydCwgZW5kID0gbWluKCBs YXN0d3Bvcywgd3BvcyApLCBtYXgoIGxhc3R3cG9zLCB3cG9zICkrMQorCWlm IHRvcCA9PSBsYXN0dG9wOgorCQlwYXNzCisJZWxpZiB0b3AgPT0gKGxhc3R0 b3ArMSk6CisJCXdpbmRvdy5tb3ZlKCAwLCAwICkKKwkJd2luZG93LmRlbGV0 ZWxuKCkKKwllbHNlOgorCQlzdGFydCwgZW5kID0gMCwgbGVuKCB3bGlzdCAp CisKKwkjIGxpc3QgZWFjaCB2aXNpYmxlIHdvcmxkCisJZm9yIHkgaW4gcmFu Z2UoIGxpbmVzICk6CisJCXdpbmRvdy5tb3ZlKCB5LCAwICkKKwkJaSA9IHRv cCArIHkKKwkJaWYgaSA+PSBsZW4oIHdsaXN0ICk6CisJCQl3aW5kb3cuY2xy dG9lb2woKQorCQllbHNlOgorCQkJaWYgaTxzdGFydCBvciBpPj1lbmQ6CisJ CQkJY29udGludWUKKwkJCWF0dHJpYiA9ICh3cG9zID09IGkpIGFuZCBjdXJz ZXMuQV9SRVZFUlNFIG9yIGN1cnNlcy5BX05PUk1BTAorCQkJaXRlbSA9IHds aXN0W2ldCisJCQlzc2wgPSAoICd4JyBpbiBpdGVtLmZsYWdzICkgYW5kICcq JyBvciAnICcKKwkJCXdpbmRvdy5hZGRuc3RyKCAiJS0xMHMgJS0xNnMgJXMl LTIwcyAlNXMiICUgXAorCQkJCQkJCSggaXRlbS5uYW1lLCBpdGVtLmNoYXJh Y3Rlciwgc3NsLCBpdGVtLmhvc3QsIGl0ZW0ucG9ydCApLAorCQkJCQkJCWNv bHMsIGF0dHJpYiApCisJCisJd2luZG93Lm1vdmUoIHdwb3MtdG9wLCAwICkK Kwl3aW5kb3cucmVmcmVzaCgpCisKKyMgRGVmaW5lIG91ciBmdW5jdGlvbnMK K3RmLmV2YWwoICIvZGVmIHdvcmxkcz0vcHl0aG9uX2NhbGwgY29uZmlnLndv cmxkcyIgKQorCisKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t CisjIEVkaXRpbmcgYSB3b3JsZAorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0KKworZGVmIF92YWxpZGF0ZV9wb3J0KCB3b3JsZCwgd29ybGRu YW1lcywgdmFsdWUgKToKKwl0cnk6CisJCWlmIGludCh2YWx1ZSk+MCBhbmQg aW50KHZhbHVlKTw2NTUzNjoKKwkJCXJldHVybiBOb25lCisJZXhjZXB0Ogor CQlwYXNzCisJcmV0dXJuICJQb3J0IG51bWJlciBtdXN0IGJlIGZyb20gMSBh bmQgNjU1MzUuIgorCitkZWYgX3ZhbGlkYXRlX25hbWUoIHdvcmxkLCB3b3Js ZG5hbWVzLCB2YWx1ZSApOgorCWlmIG5vdCB2YWx1ZToKKwkJcmV0dXJuICJU aGUgd29ybGQgbmFtZSBtYXkgbm90IGJlIGJsYW5rLiIKKwlpZiB2YWx1ZSBp biB3b3JsZG5hbWVzOgorCQlyZXR1cm4gIlRoZXJlIGlzIGFscmVhZHkgYSB3 b3JsZCB3aXRoIHRoYXQgbmFtZS4iCisJcmV0dXJuIE5vbmUKKworIyBSZXF1 aXJlZDoKKyMgICAnbmFtZScgOiBsYWJlbAorIyAgICdoZWxwJyA6IGhlbHAg ZmllbGQKKyMgRWl0aGVyICdrZXknIG9yICdnZXQnLydzZXQnIG11c3QgYmUg c2V0OgorIyAgICdrZXknICA6IG5hbWUgb2YgZGljdCBrZXkKKyMgICAnZ2V0 JyAgOiBmdW5jdGlvbiB0aGF0IHJldHVybnMgdmFsdWUgZnJvbSAoIHdvcmxk ICkKKyMgICAnc2V0JyAgOiBmdW5jdGlvbiB0aGF0IHNldHMgdmFsIGluIHdv cmxkIGZyb20gKCB3b3JsZCwgdmFsICkKKyMgT3B0aW9uYWw6CisjICAgJ2Vk aXQnIDogZnVuY3Rpb24gdG8gZWRpdCB2YWwgZnJvbSAoIHdvcmxkLCB2YWwg KSBpZiB5b3UgZG9uJ3Qgd2FudCB0ZXh0cGFkCisjICAgJ3ZhbGlkYXRlJzog ZnVuY3Rpb24gcGFzc2VkICggd29ybGQsIHdvcmxkbmFtZXMsIHZhbHVlICkg YW5kIHJldHVybnMgZXJyb3IKKyMgICAgICAgICAgICAgICBtZXNzYWdlLCBv ciBOb25lIGlmIGl0IHBhc3NlcyB2YWxpZGF0aW9uCitFRElURklFTERTID0g WworCXsgJ25hbWUnOgknV29ybGQnLAorCSAgJ2hlbHAnOgknTmFtZSBvZiB0 aGUgd29ybGQsIHVzZWQgZm9yIC93b3JsZCcsCisJICAna2V5JzoJJ25hbWUn LAorCSAgJ3ZhbGlkYXRlJzogX3ZhbGlkYXRlX25hbWUsCisJICB9LAorCXsg J25hbWUnOgknVHlwZScsCisJICAnaGVscCc6CSdNdSogdHlwZTogYWJlciwg ZGlrdSwgbHAsIGxwcCwgdGVsbmV0LCB0aW55JywKKwkgICdrZXknOgkndHlw ZScsCisJICB9LAorCXsgJ25hbWUnOgknSG9zdCcsCisJICAnaGVscCc6CSdI b3N0IG5hbWUgb3IgSVAgYWRkcmVzcycsCisJICAna2V5JzoJJ2hvc3QnLAor CSAgfSwKKwl7ICduYW1lJzoJJ1BvcnQnLAorCSAgJ2hlbHAnOgknUG9ydCBu dW1iZXIgLSAxIHRvIDY1NTM1JywKKwkgICdrZXknOgkncG9ydCcsCisJICAn dmFsaWRhdGUnOiBfdmFsaWRhdGVfcG9ydCwKKwkgIH0sCisJeyAnbmFtZSc6 CSdDaGFyYWN0ZXInLAorCSAgJ2hlbHAnOgknQ2hhcmFjdGVyIG5hbWUgZm9y IGF1dG8tbG9nb24nLAorCSAgJ2tleSc6CSdjaGFyYWN0ZXInLAorCSAgfSwK Kwl7ICduYW1lJzoJJ1Bhc3N3b3JkJywKKwkgICdoZWxwJzoJJ0NoYXJhY3Rl ciBwYXNzd29yZCBmb3IgYXV0by1sb2dvbicsCisJICAna2V5JzoJJ3Bhc3N3 b3JkJywKKwkgIH0sCisJeyAnbmFtZSc6CSdVc2UgU1NMJywKKwkgICdoZWxw JzoJJ1VzZSBTU0wgdG8gY29ubmVjdCB0byB0aGUgd29ybGQgKGlmIGNvbXBp bGVkIGluKScsCisJICAneWVzbm8nOglUcnVlLAorCSAgJ2VkaXQnOglsYW1i ZGEgdyx2OiB2ID09ICdZZXMnIGFuZCAnTm8nIG9yICdZZXMnLAorCSAgJ2dl dCc6CWxhbWJkYSB3OiAoICd4JyBpbiB3LmZsYWdzICkgYW5kICdZZXMnIG9y ICdObycsCisJICAnc2V0JzoJbGFtYmRhIHcsdjogX3NldGZsYWcoIHcsICd4 JywgdiApLAorCSAgfSwKKwl7ICduYW1lJzoJJ0lnbm9yZSBQcm94eScsCisJ ICAnaGVscCc6CSdpZ25vcmUgJXtwcm94eV9ob3N0fSBpZiBzZXQnLAorCSAg J3llc25vJzoJVHJ1ZSwKKwkgICdlZGl0JzoJbGFtYmRhIHcsdjogdiA9PSAn WWVzJyBhbmQgJ05vJyBvciAnWWVzJywKKwkgICdnZXQnOglsYW1iZGEgdzog KCAncCcgaW4gdy5mbGFncyApIGFuZCAnWWVzJyBvciAnTm8nLAorCSAgJ3Nl dCc6CWxhbWJkYSB3LHY6IF9zZXRmbGFnKCB3LCAncCcsIHYgKSwKKwkgIH0s CisJeyAnbmFtZSc6CSdFY2hvIGlucHV0JywKKwkgICdoZWxwJzoJJ0VjaG8g YmFjayBhbGwgdGV4dCBzZW50IHRvIHRoZSB3b3JsZCcsCisJICAneWVzbm8n OglUcnVlLAorCSAgJ2VkaXQnOglsYW1iZGEgdyx2OiB2ID09ICdZZXMnIGFu ZCAnTm8nIG9yICdZZXMnLAorCSAgJ2dldCc6CWxhbWJkYSB3OiAoICdlJyBp biB3LmZsYWdzICkgYW5kICdZZXMnIG9yICdObycsCisJICAnc2V0JzoJbGFt YmRhIHcsdjogX3NldGZsYWcoIHcsICdlJywgdiApLAorCSAgfSwKKwl7ICdu YW1lJzoJJ01hY3JvIGZpbGUnLAorCSAgJ2hlbHAnOgknTWFjcm8gZmlsZSB0 byAvbG9hZCBvbiBjb25uZWN0JywKKwkgICdrZXknOgknZmlsZScsCisJICB9 LAorCXsgJ25hbWUnOgknU3JjIEhvc3QnLAorCSAgJ2hlbHAnOgknU2V0IHNv dXJjZSBJUCB0byBiaW5kIHRvIGEgc3BlY2lmaWMgaW50ZXJmYWNlJywKKwkg ICdrZXknOgknc3JjaG9zdCcsCisJICB9LAorCV0KKworZGVmIF9zZXRmbGFn KCB3b3JsZCwgZmxhZywgdmFsICk6CisJYWRkID0gdmFsLmxvd2VyKCkuc3Rh cnRzd2l0aCgieSIpIGFuZCBmbGFnIG9yICIiCisJd29ybGQuZmxhZ3MgPSB3 b3JsZC5mbGFncy5yZXBsYWNlKGZsYWcsJycpICsgYWRkCisKKworZGVmIF9n ZXRmaWVsZCggd29ybGQsIGZpZWxkICk6CisJaWYgJ2dldCcgaW4gZmllbGQ6 CisJCXJldHVybiBmaWVsZFsnZ2V0J10od29ybGQpCisJZWxzZToKKwkJcmV0 dXJuIGdldGF0dHIoIHdvcmxkLCBmaWVsZFsna2V5J10gKQorCitkZWYgX3Nl dGZpZWxkKCB3b3JsZCwgZmllbGQsIHZhbHVlICk6CisJaWYgJ3NldCcgaW4g ZmllbGQ6CisJCWZpZWxkWydzZXQnXSh3b3JsZCx2YWx1ZSkKKwllbHNlOgor CQlzZXRhdHRyKCB3b3JsZCwgZmllbGRbJ2tleSddLCB2YWx1ZSApCisKK2Rl ZiBfZWRpdHdvcmxkKCB3b3JsZHdpbiwgd29ybGRuYW1lcywgd29ybGQgKToK KworCWltcG9ydCBjdXJzZXMudGV4dHBhZAorCisJIyBpZiB0aGUgd29ybGQg aXMgZW1wdHksIGNyZWF0ZSBhIGRlZmF1bHQgd29ybGQKKwlpZiBub3Qgd29y bGQ6CisJCXdvcmxkID0gV29ybGQoKQorCWVsc2U6CisJCXdvcmxkbmFtZXMu cmVtb3ZlKCB3b3JsZC5uYW1lICkKKworCSMgY3JlYXRlIGEgbmV3IHdpbmRv dyBhcyBhIHN1YndpbmRvdyBvZiB0aGUgb2xkCisJbGluZXMwLCBjb2xzMCA9 IHdvcmxkd2luLmdldG1heHl4KCkKKwlsaW5lcyA9IG1pbiggbGluZXMwLTQs IDE3ICkKKwljb2xzID0gY29sczAtNAorCXkgPSAobGluZXMwLWxpbmVzKS8y CisJZWRpdHdpbiA9IHdvcmxkd2luLmRlcndpbiggbGluZXMsIGNvbHMsIHks IDIgKQorCWVkaXR3aW4ua2V5cGFkKCAxICkKKwllZGl0d2luLmVyYXNlKCkK KwllZGl0d2luLmJvcmRlcigpCisJZWRpdHdpbi5hZGRzdHIoIDAsIDQsICJ8 IEVkaXRpbmcgV29ybGQ6ICVzIHwiICUgKHdvcmxkLm5hbWUgYW5kIHdvcmxk Lm5hbWUgb3IgJzxuZXc+JyksIFwKKwkJCQkJY3Vyc2VzLkFfQk9MRCApCisK Kwlfc2hvd2tleXMoIGVkaXR3aW4sIGxpbmVzLTIsIDIsCisJCQkgICAnW2Rd ZWxldGUgW2VudGVyXS9bZV1kaXQgLSBbUV0vW1NdYXZlIFtBXWJvcnQnICkK KworCSMgbm93IGxvb3AKKwlwb3M9MAorCW1lc3NhZ2UsIGxhc3RtZXNzYWdl ID0gTm9uZSwgTm9uZQorCXdoaWxlIFRydWU6CisKKwkJIyBQYWludCBhbGwg dGhlIGZpZWxkcworCQl5LCB4ID0gMiwgMgorCQlmb3IgaSwgZmllbGQgaW4g ZW51bWVyYXRlKCBFRElURklFTERTICk6CisJCQllZGl0d2luLmFkZHN0cigg eSwgeCwgZmllbGRbJ25hbWUnXSsnOicsIGN1cnNlcy5BX0JPTEQgKQorCQkJ ZWRpdHdpbi5hZGRuc3RyKCB5LCB4KzE1LCBfZ2V0ZmllbGQoIHdvcmxkLCBm aWVsZCApICsgIiAiKjgwLCBjb2xzLTE5LAorCQkJCQkJCWk9PXBvcyBhbmQg Y3Vyc2VzLkFfUkVWRVJTRSBvciBjdXJzZXMuQV9OT1JNQUwgKQorCQkJeSAr PSAxCisKKworCQkjIGdldCBpbnB1dAorCQl3aGlsZSBUcnVlOgorCisJCQkj IHNob3cgdGhlIGhlbHAgZm9yIHRoZSBjdXJyZW50IGl0ZW0KKwkJCWZpZWxk ID0gRURJVEZJRUxEU1twb3NdCisJCQllZGl0d2luLmFkZG5zdHIoIHkrMSwg MiwgZmllbGRbJ2hlbHAnXSsoIiAiKjgwKSwgY29scy00ICkKKworCQkJIyBn ZXQgaW5wdXQKKwkJCWVkaXR3aW4ubW92ZSggMitwb3MsIDE3ICkKKwkJCWVk aXR3aW4ucmVmcmVzaCgpCisJCQljID0gZWRpdHdpbi5nZXRrZXkoKQorCisJ CQlpZiBjIGluICggJ2knLCAnS0VZX1VQJywgJ1x4MTAnICk6CisJCQkJaWYg cG9zPjA6CisJCQkJCXBvcyAtPSAxCisJCQkJCWJyZWFrCisJCQllbGlmIGMg aW4gKCAnaicsICdLRVlfRE9XTicsICdceDBlJyApOgorCQkJCWlmIChwb3Mr MSkgPCBsZW4oIEVESVRGSUVMRFMgKToKKwkJCQkJcG9zICs9IDEKKwkJCQkJ YnJlYWsKKwkJCWVsaWYgYyBpbiAoICdlJywgJ0tFWV9FTlRFUicsICcgJywg J1xuJywgJ2QnLCAnS0VZX0RDJyApOgorCQkJCXZhbHVlID0gX2dldGZpZWxk KCB3b3JsZCwgZmllbGQgKQorCQkJCWlmIGMgaW4gKCAnZCcsICdLRVlfREMn ICk6CisJCQkJCXZhbHVlID0gJycKKwkJCQllbGlmICdlZGl0JyBpbiBmaWVs ZDoKKwkJCQkJdmFsdWUgPSBmaWVsZFsnZWRpdCddKHdvcmxkLCB2YWx1ZSAp CisJCQkJZWxzZToKKwkJCQkJIyBjcmVhdGUgYSB0ZXh0IGVkaXRpbmcgYm94 CisJCQkJCWxpbmV3aW4gPSBlZGl0d2luLmRlcndpbiggMSwgY29scy0xOSwg Mitwb3MsIDE3ICkKKwkJCQkJbGluZXdpbi5lcmFzZSgpCisJCQkJCWlmIGMg IT0gJyAnOgorCQkJCQkJbGluZXdpbi5hZGRzdHIoIDAsIDAsIHZhbHVlICkK KwkJCQkJdGV4dHBhZCA9IGN1cnNlcy50ZXh0cGFkLlRleHRib3goIGxpbmV3 aW4gKQorCQkJCQljdXJzZXMubm9lY2hvKCkKKwkJCQkJdmFsdWUgPSB0ZXh0 cGFkLmVkaXQoKS5zdHJpcCgpCisJCQkJaWYgJyAnIGluIHZhbHVlOgorCQkJ CQltZXNzYWdlID0gJ05vIHNwYWNlcyBhbGxvd2VkIGluIHZhbHVlcycKKwkJ CQllbGlmICd2YWxpZGF0ZScgaW4gZmllbGQ6CisJCQkJCW1lc3NhZ2UgPSBm aWVsZFsndmFsaWRhdGUnXSggd29ybGQsIHdvcmxkbmFtZXMsIHZhbHVlICkK KwkJCQkJaWYgbm90IG1lc3NhZ2U6CisJCQkJCQlfc2V0ZmllbGQoIHdvcmxk LCBmaWVsZCwgdmFsdWUgKQorCQkJCQkJCisJCQkJZWxzZToKKwkJCQkJX3Nl dGZpZWxkKCB3b3JsZCwgZmllbGQsIHZhbHVlICkKKwkJCQlicmVhaworCQkJ ZWxpZiBjIGluICggJ3knLCAnbicsICdZJywgJ04nICk6CisJCQkJaWYgJ3ll c25vJyBpbiBmaWVsZDoKKwkJCQkJX3NldGZpZWxkKCB3b3JsZCwgZmllbGQs IGMgKQorCQkJCQlicmVhaworCQkJZWxpZiBjIGluICggJ1MnLCAnUScgKToK KwkJCQkjIHJldHVybiB3b3JsZCBvbmx5IGlmIGl0IGhhcyBhIG5hbWUKKwkJ CQlpZiB3b3JsZC5jYXRlZ29yeSE9d29ybGQuSU5WQUxJRDoKKwkJCQkJcmV0 dXJuIHdvcmxkCisJCQkJZWxzZToKKwkJCQkJcmV0dXJuIE5vbmUKKwkJCWVs aWYgYyBpbiAoICdBJywgJ0tFWV9FU0MnICk6CisJCQkJcmV0dXJuIE5vbmUK KworCisJCW1lc3NhZ2UsIGxhc3RtZXNzYWdlID0gX3Nob3dfbWVzc2FnZSgg ZWRpdHdpbiwgbWVzc2FnZSwgbGFzdG1lc3NhZ2UgKQorCisKK3RmLm91dCgg IiUgY29uZmlnLnB5IGxvYWRlZDogdXNlICcvd29ybGRzJyB0byBlZGl0IHlv dXIgd29ybGRzIiApCmRpZmYgLXJOdSAteCAuc3ZuIC14IGNvbmZpZy5sb2cg LXggY29uZmlnLnN0YXR1cyAteCB0Zi1oZWxwIC14IE1ha2VmaWxlIC14IGNo YXJ0YWJsZXMuYyAteCB0ZmNvbmZpZy5oIC14IHRmZGVmcy5oIC14ICcqLmJ1 aWxkJyAteCAnKi5iYWsnIC14ICcqLmlkeCcgLXggJyoubycgLXggJyoucHlj JyAteCBodG1sMnRmIC14IGRlZmF1bHQgLXggbWFrZWhlbHAgLXggdGYgLXgg ZGZ0YWJsZXMgLXggJ2xpYnBjcmUqJyAteCBodG1sMnRpZiB0Zi01MGI4LWNs ZWFuL3RmLWxpYi9kaWZmZWRpdC5weSB0Zi01MGI4LXB5L3RmLWxpYi9kaWZm ZWRpdC5weQotLS0gdGYtNTBiOC1jbGVhbi90Zi1saWIvZGlmZmVkaXQucHkJ MTk2OS0xMi0zMSAxNjowMDowMC4wMDAwMDAwMDAgLTA4MDAKKysrIHRmLTUw YjgtcHkvdGYtbGliL2RpZmZlZGl0LnB5CTIwMDgtMDMtMjQgMTc6NTE6NTIu MDAwMDAwMDAwIC0wNzAwCkBAIC0wLDAgKzEsMzk2IEBACisjCisjIGRpZmZl ZGl0LnB5CisjCisjIFRoaXMgYXR0ZW1wdHMgdG8gaGVscCB0aGUgcHJvYmxl bSBvZiBjaGFuZ2luZyB0aHJlZSBsaW5lcyBpbiBhIDEwMDAgbGluZQorIyBw cm9ncmFtIGFuZCB0aGVuIGhhdmluZyB0byBwYWluZnVsbHkgcmVjcmVhdGUg aXQgbGluZSBieSBsaW5lIG9yIHJldXBsb2FkCisjIHRoZSB3aG9sZSB0aGlu Zy4KKyMKKyMgSXQgd2lsbCByZW1lbWJlciB0aGUgbGFzdCB2ZXJzaW9uIG9m IHlvdXIgd29ybGQvb2JqZWN0IGFuZCB0aGVuIGRpZmYgaXQKKyMgYWdhaW5z dCB0aGUgbmV3IG9uZSBhbmQgb25seSB1cGxvYWQgdGhlIGRpZmZlcmVuY2Vz LiBJdCB3aWxsIHJlY29nbml6ZQorIyB0aGF0IHRoZSBzYW1lIG9iamVjdCBp biB0d28gZGlmZmVyZW50IHdvcmxkcyBpcyBhIGRpZmZlcmVudCB0aGluZywg YnV0CisjIGl0IHdpbGwgZ2V0IGNvbmZ1c2VkIGlmIHlvdSB0cnkgdG8gZG8g ZGlmZmVkaXRzIGZyb20gdHdvIGRpZmZlcmVudAorIyBjb21wdXRlcnMgb24g dGhlIHNhbWUgb2JqZWN0IChiZWNhdXNlIGl0IHdpbGwgYXBwbHkgY2hhbmdl cyB0d2ljZSkgc28KKyMgdXNlIHRoZSAtciAocmF3KSBmbGFnIHRvIHN5bmNo cm9uaXplIHRvIGEga25vd24gc3RhdGUgYXQgbGVhc3Qgb25jZS4KKyMKKyMg VGhlcmUgbmVlZHMgdG8gYmUgYSBjbGFzcyBkZWZpbmVkIGZvciBlYWNoIHR5 cGUgb2YgZWRpdG9yIHN1cHBvcnRlZC4KKyMgSSBoYXZlIHN1cHBsaWVkIGVk aXRvcnMgZm9yICdsc2VkaXQnIGFuZCAnbXVmJyBvbiBGdXp6QmFsbCBtdWNr cy4KKyMKKyMgQ29weXJpZ2h0IDIwMDggUm9uIERpcHBvbGQgc2l6ZXJAc2Fu LnJyLmNvbQorIworIyB2MS4wMiAtIE1hciAwNiAwOCAtIGZpeCBidWcgd2l0 aCBubyBwcm9ncmVzcyBzaG93bgorIyB2MS4wMSAtIEphbiAxMyAwOCAtIENs ZWFuIHVwIGRvY3MsIG1ha2UgTElORVNfUEVSX1NFQ09ORCBzZXR0YWJsZQor IyB2MS4wMCAtIEphbiAxMyAwOCAtIEZpcnN0IHZlcnNpb24KKworIyBZb3Ug bWlnaHQgd2FudCB0byBjb25maWd1cmUgdGhlc2UgdHdvCitMQVNURElSPScv dG1wL2RpZmZlZGl0JworVEFCU0laRT00CitMSU5FU19QRVJfU0VDT05EPTUw CisKKyMgcmVhbCBzdHVmZiBzdGFydHMgaGVyZQoraW1wb3J0IHRmLCBkaWZm bGliLCBvcywgc2h1dGlsCisKK2RlZiBoZWxwKCBkdW1teT1Ob25lICk6CisJ Zm9yIGxpbmUgaW4gIiIiCitkaWZmZWRpdCB1c2FnZToKKworICAvcHl0aG9u X2NhbGwgZGlmZmVkaXQudXBsb2FkICgtPGxpbmVzPikgKC1yKSA8ZWRpdG9y PiA8cmVtb3RlPiA8ZmlsZW5hbWU+CisKKyAgVXBsb2FkcyBtaW5pbWFsIGNv bW1hbmRzIG5lY2Vzc2FyeSB0byB0dXJuIGNlbnRlbnRzIG9mIDxyZW1vdGU+ IGludG8KKyAgPGZpbGVuYW1lPiBieSBkaWZmLWluZyBhZ2FpbnN0IHRoZSBs YXN0IHZlcnNpb24uIFRoaXMgaXMgcGVyIDxyZW1vdGU+CisgIHBlciB3b3Js ZC4KKworICBvcHRpb25zOgorICAgIC08bGluZXM+ICBJZiAtUyBvciAtMCwg c2VuZCBhbGwgY29tbWFuZHMgaW1tZWRpYXRlbHkuIE90aGVyd2lzZSBzZW5k cworICAgICAgICAgICAgICA8bGluZXM+IHBlciBzZWNvbmQuIERlZmF1bHQ6 IDUwLgorICAgIC1yICAgICAgICBKdXN0IHVwbG9hZCB0aGUgZW50aXJlIHRo aW5nLiBVc2VmdWwgaWYgeW91IHRoaW5rIHRoaW5ncyBtaWdodAorICAgICAg ICAgICAgICBiZSBvdXQgb2Ygc3luYywgb3IgdG8gc3RhcnQgZnJlc2guIFRo ZSBmaXJzdCB0aW1lIHlvdSBlZGl0IGEKKyAgICAgICAgICAgICAgPHJlbW90 ZT4gZm9yIGEgc3BlY2lmaWMgd29ybGQgLXIgaXMgaW1wbGllZC4KKyAgICAt cCg8bj4pICAgU2hvdyBwcm9ncmVzcyBldmVyeSA8bj4gbGluZXMuIERlZmF1 bHQgMTAwIGlmIC1wIHByZXNlbnQuCisKKyAgYXJndW1lbnRzOgorICAgIDxl ZGl0b3I+ICBXaGljaCBlZGl0b3IgY2xhc3MgdG8gdXBsb2FkIHdpdGguIEN1 cnJlbnQgY2hvaWNlcyBhcmU6CisgICAgICAgICAgICAgICggbHNlZGl0IHwg bXVmICkKKyAgICA8cmVtb3RlPiAgV2hpY2ggJ3RoaW5nJyB0byB1cGxvYWQg aXQgdG8uCisgICAgICAgICAgICAgIGxzZWRpdDogPGRicmVmPj08bGlzdCBu YW1lPiAgICAgICBleDogIzEyMzQ9bXlkZXNjCisgICAgICAgICAgICAgIG11 ZjogICAgPGRicmVmPiAgICAgICAgICAgICAgICAgICBleDogIzEyMzQKKyAg ICA8Zm5hbWU+ICAgVGhlIGZpbGVuYW1lIHRoYXQgY29udGFpbnMgdGhlIGNv bnRlbnQgeW91IHdhbnQgb24gdGhlIG9iamVjdC4KKworRXhhbXBsZToKKyAg IFRvIHdvcmsgb24gbXkgaHVnZSBzY3JlYW0ubXVmIHByb2dhbSBJIHVzZToK KyAgICAgL3B5dGhvbl9jYWxsIGRpZmZlZGl0LnVwbG9hZCBtdWYgLXAgc2Ny ZWFtLm11ZiB+L211Zi9zY3JlYW0ubXVmCisgICBTaW5jZSB0aGlzIHdvdWxk IGJlIGFubm95aW5nIHRvIHR5cGUgZXZlcnkgdGltZSBJJ2QgcmVhbGx5IHVz ZToKKyAgICAgL2RlZiBzY3JlYW09L3B5dGhvbl9jYWxsIGRpZmZlZGl0LnVw bG9hZCBtdWYgLXAgc2NyZWFtLm11ZiB+L211Zi9zY3JlYW0ubXVmCisgICBz byBJIGNhbiBqdXN0IHR5cGUgJy9zY3JlYW0nIGluIFRGIGFmdGVyIEkgbWFr ZSBsb2NhbCBjaGFuZ2VzLgorCitPdGhlciBmdW5jdGlvbnM6CisgICAvcHl0 aG9uX2NhbGwgZGlmZmVkaXQuYWJvcnQKKyAgICAgICBFbWVyZ2VuY3kgYWJv cnQgYWxsIGluLXByb2dyZXNzIHVwbG9hZHMuCisgICAvcHl0aG9uX2NhbGwg ZGlmZmVkaXQubGFzdGRpciA8ZGlyZWN0b3J5PgorICAgICAgIFNldCB3aGVy ZSB0aGUgZGlmZmVkaXQga2VlcHMgdGhlIGxhc3Qga25vd24gdmVyc2lvbiBv ZiBlYWNoIGZpbGUgZm9yIGEKKwkgICA8d29ybGQ+XzxyZW1vdGU+IHRvIGNv bXBhcmUgbmV3IHZlcnNpb25zIGFnYWluc3QuIERlZmF1bHQ6IC90bXAvZGlm ZmVkaXQKKyAgIC9weXRob25fY2FsbCBkaWZmZWRpdC50YWJzaXplIDggCisg ICAgICAgU2V0IHRoZSB0YWIgdG8gc3BhY2UgZXhwYW5zaW9uIHNpemUuIDAg bWVhbnMgbm8gZXhwYW5zaW9uLiBEZWZhdWx0OiA0CisgICAvcHl0aG9uX2Nh bGwgZGlmZmVkaXQubGluZXNfcGVyX3NlY29uZCAxMDAKKyAgICAgICBTZXQg bGluZXMgcGVyIHNlY29uZCB0byBzZW5kIGlmIG5vIC08c2l6ZT4uIERlZmF1 bHQ6IDUwCisgICAKKyIiIi5zcGxpdCgiXG4iKToKKwkJdGYub3V0KCBsaW5l ICkKKworIworIyBDb25maWd1cmF0aW9uCisjCitkZWYgbGFzdGRpciggZGly bmFtZSApOgorCWdsb2JhbCBMQVNURElSCisJTEFTVERJUj1kaXJuYW1lCisK K2RlZiB0YWJzaXplKCBzaXplICk6CisJZ2xvYmFsIFRBQlNJWkUKKwlUQUJT SVpFID0gaW50KCBzaXplICkKKworZGVmIGxpbmVzX3Blcl9zZWNvbmQoIGxw cyApOgorCWdsb2JhbCBMSU5FU19QRVJfU0VDT05ECisJTElORVNfUEVSX1NF Q09ORCA9IGludCggbHBzICkKKworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBVcGxvYWRlcnMK KyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0KK2NsYXNzIHVwbG9hZGVyKCBvYmplY3QgKToKKworCWRl ZiBfX2luaXRfXyggc2VsZiwgcmVtb3RlLCBuYW1lMiwgcmF3PUZhbHNlICk6 CisJCXNlbGYud29ybGQgPSB0Zi53b3JsZCgpCisJCQorCQlzZWxmLnJlbW90 ZSA9IHJlbW90ZQorCQlzZWxmLm5hbWUyID0gbmFtZTIKKworCQkjIGxvb2sg Zm9yIG9sZCBuYW1lCisJCXNlbGYua2V5bmFtZSA9ICIlc18leCIgJSAoIHNl bGYud29ybGQsIGFicyggaGFzaCggc2VsZi5yZW1vdGUpICkgKQorCQlzZWxm Lm5hbWUxID0gb3MucGF0aC5qb2luKCBMQVNURElSLCBzZWxmLmtleW5hbWUg KQorCQlpZiBub3Qgb3MucGF0aC5pc2RpciggTEFTVERJUiApOgorCQkJb3Mu bWFrZWRpcnMoIExBU1RESVIsIDA3NTUgKQorCisJCSMgV2UgaGF2ZSB0byBi ZSByYXcgaWYgdGhlIG9sZCB2ZXJzaW9uIGRvZXNuJ3QgZXhpc3QKKwkJc2Vs Zi5yYXcgPSByYXcgb3Igbm90IG9zLnBhdGguaXNmaWxlKCBzZWxmLm5hbWUx ICkKKworCSMgc2VlIGdlbmVyYXRlX2NvbW1hbmRzIGZvciBhIGRlc2NyaXB0 aW9uIG9mIHRoZSBvcGNvZGVzCisJZGVmIGZpbmRfZGlmZnMoIHNlbGYgKToK KworCQkjIGdldCBjb250ZW50cyBvZiBuZXcgYW5kIG9sZAorCQlzZWxmLmxp bmVzMiA9IG9wZW4oIHNlbGYubmFtZTIsICJydCIgKS5yZWFkbGluZXMoKQor CQlpZiBzZWxmLnJhdzoKKwkJCWxpbmVzMSA9IFtdCisJCQkjIHJhdyBoYXMg YW4gaW1wbGllZCBkZWxldGUgZXZlcnl0aGluZyBleGlzdGluZyBmaXJzdAor CQkJZGlmZnMgPSBbIFsgJ2RlbGV0ZScsIDAsIDk5OTk5LCAwLCAwIF0gXQor CQllbHNlOgorCQkJbGluZXMxID0gb3Blbiggc2VsZi5uYW1lMSwgInJ0IiAp LnJlYWRsaW5lcygpCisJCQlkaWZmcyA9IFsgXQorCisJCSMgV2UgbmVlZCB0 byBkbyBpdCBpbiByZXZlcnNlZCBzbyB3ZSBnZXQgdGhlIHJpZ2h0IGxpbmUg bnVtYmVycworCQlkaWZmcyArPSByZXZlcnNlZCggZGlmZmxpYi5TZXF1ZW5j ZU1hdGNoZXIoIE5vbmUsIGxpbmVzMSwgc2VsZi5saW5lczIgKS5nZXRfb3Bj b2RlcygpICkKKworCQkjIGlmIGV2ZXJ5dGhpbmcncyBlcXVhbCB0aGVuIGl0 J3MganVzdCBhbiAnZW1wdHknIGRpZmYKKwkJaWYgbGVuKGRpZmZzKT09MSBh bmQgZGlmZnNbMF1bMF09PSdlcXVhbCc6CisJCQlyZXR1cm4gW10KKwkJZWxz ZToKKwkJCXJldHVybiBkaWZmcworCisJIyBnZW5lcmF0ZSBzdHJlYW1saW5l ZCBzZXRzIG9mIG9wY29kZXMgZnJvbSBTZXF1ZW5jZU1hdGNoZXIgb3Bjb2Rl cworCWRlZiBtYXNzYWdlX29wY29kZXMoIHNlbGYsIG9wcyApOgorCQlmb3Ig b3Bjb2RlLCBpMSwgaTIsIGoxLCBqMiBpbiBvcHM6CisJCQlpZiBvcGNvZGUg PT0gJ2VxdWFsJzoKKwkJCQljb250aW51ZQorCQkJaWYgb3Bjb2RlIGluICgg J2RlbGV0ZScsICdyZXBsYWNlJyApOgorCQkJCXlpZWxkIFsgJ2QnLCBpMSsx LCAwLCBpMi1pMSBdCisJCQlpZiBvcGNvZGUgaW4gKCAnaW5zZXJ0JywgJ3Jl cGxhY2UnICk6CisJCQkJeWllbGQgWyAnaScsIGkxKzEsIGoxKzEsIGoyLWox IF0KKworCSMgVGhpcyBpcyBhbGwgeW91IGhhdmUgdG8gb3ZlcnJpZGUsIGdl bmVyYWxseS4KKwkjIFlvdSBnZXQgYSBsaXN0IG9mOgorCSMgICBbIFsgb3Bj b2RlLCBwb3MxLCBwb3MyLCBuIF0sIF0KKwkjIEFsbCBsaW5lIG51bWJlcnMg YXJlIDEgYmFzZWQuCisJIyAgICdkJzogZGVsZXRlIG4gbGluZXMgYXQgcG9z aXRpb24gcG9zMS4gaWdub3JlIHBvczIKKwkjICAgJ2knOiBpbnNlcnQgbiBs aW5lcyAob2YgZmlsZTIpIGZyb20gcG9zMiBhdCBwb3NpdGlvbiBwb3MxCisJ ZGVmIGdlbmVyYXRlX2NvbW1hbmRzKCBzZWxmLCBvcGNvZGVzICk6CisJCXJh aXNlIEV4Y2VwdGlvbiggInlvdXIgdXBsb2FkZXIgY2xhc3MgbmVlZHMgdG8g ZGVmIGdlbmVyYXRlX2NvbW1hbmRzKCkiICkKKworCSMgRmluYWxseSBzZW5k IHRoZW0gdG8gdGhlIHdvcmxkCisJZGVmIHVwbG9hZF9jb21tYW5kcyggc2Vs ZiwgbHBzLCBwcm9nLCBjbWRzICk6CisJCXNlbGYudXAgPSBzZWxmLmNodW5r cyggbHBzLCBjbWRzICkKKwkJc2VsZi5saW5lc19zZW50LCBzZWxmLmxpbmVz X3NlbnQwID0gMCwgMAorCQlzZWxmLnByb2dyZXNzX3NpemUgPSBwcm9nCisJ CQorCQlzZWxmLnVwbG9hZF9jaHVuaygpCisKKwkjIHJldHVybnMgbHBzIGNo dW5rcyBvZiBjbWRzIGF0IGEgdGltZSAtIG9yIGFsbCBpZiBubyBjaHVua2lu ZworCWRlZiBjaHVua3MoIHNlbGYsIGxwcywgY21kcyApOgorCQkjIGlmIGxw cyBpcyAwIGp1c3Qgc2VuZCB0aGUgd2hvbGUgdGhpbmcgYXQgb25jZQorCQlp ZiBub3QgbHBzOgorCQkJeWllbGQgVHJ1ZSwgY21kcworCisJCSMgZ2VuZXJh dGUgY2h1bmtzIG9mIGxwcyBsaW5lcyBhdCBhIHRpbWUKKwkJY2h1bmsgPSBb XQorCQl3aGlsZSBUcnVlOgorCQkJdHJ5OgorCQkJCWNodW5rLmFwcGVuZCgg Y21kcy5uZXh0KCkgKQorCQkJZXhjZXB0IFN0b3BJdGVyYXRpb246CisJCQkJ eWllbGQgVHJ1ZSwgY2h1bmsKKworCQkJaWYgbGVuKCBjaHVuayApID49IGxw czoKKwkJCQl5aWVsZCBGYWxzZSwgY2h1bmsKKwkJCQljaHVuayA9IFtdCisK KwkjIHVwbG9hZCB0aGUgbmV4dCBjaHVuayBvZiBscHMgbGluZXMKKwlkZWYg dXBsb2FkX2NodW5rKCBzZWxmICk6CisKKwkJZG9uZSwgY2h1bmsgPSBzZWxm LnVwLm5leHQoKQorCisJCWZvciBjbWQgaW4gY2h1bms6CisJCQljbWQgPSBj bWQucnN0cmlwKCkKKwkJCSMgY29udmVydCB0YWJzIHRvIHNwYWNlcworCQkJ aWYgVEFCU0laRT4wOgorCQkJCWNtZCA9IGNtZC5leHBhbmR0YWJzKCBUQUJT SVpFICkKKwkJCSMgL3NlbmQgYmxhbmsgZG9lcyBub3RoaW5nLCBzbyBzZW5k IGEgc3BhY2UKKwkJCWlmIG5vdCBjbWQ6CisJCQkJY21kID0gIiAiCisKKwkJ CSMgYW5kIHNlbmQgaXQKKwkJCXRmLnNlbmQoIGNtZCwgc2VsZi53b3JsZCAp CisJCQlzZWxmLmxpbmVzX3NlbnQgKz0gMQorCisJCSMgY2xlYW4gdXAgYW5k IGZpbmlzaCwgb3Igc2NoZWR1bGUgZnVydGhlciB1cGxvYWQKKwkJaWYgZG9u ZToKKwkJCXNlbGYuZG9uZSgpCisJCQlkZWwgc2VsZi51cAorCQllbHNlOgor CQkJIyBzaG93IHByb2dyZXNzCisJCQlpZiBzZWxmLnByb2dyZXNzX3NpemUg YW5kICggc2VsZi5saW5lc19zZW50IC0gc2VsZi5saW5lc19zZW50MCk+PXNl bGYucHJvZ3Jlc3Nfc2l6ZToKKwkJCQl0Zi5vdXQoICItIGRpZmZlZGl0LnVw bG9hZCAtPiAlcyAlcyAtICU0ZCBjbWRzIHNlbnQiICUgXAorCQkJCQkJKCBz ZWxmLndvcmxkLCBzZWxmLnJlbW90ZSwgc2VsZi5saW5lc19zZW50ICkgKQor CQkJCXNlbGYubGluZXNfc2VudDAgPSBzZWxmLmxpbmVzX3NlbnQgLSAoIHNl bGYubGluZXNfc2VudCAlIHNlbGYucHJvZ3Jlc3Nfc2l6ZSApCisJCQkjIHNj aGVkdWxlIGEgY2FsbGJhY2sgaW4gMSBzZWNvbmQKKwkJCUlOUFJPR1JFU1Nb c2VsZi5rZXluYW1lXSA9IHNlbGYKKwkJCXRmLmV2YWwoICcvcmVwZWF0IC13 JXMgLTEgMSAvcHl0aG9uX2NhbGwgZGlmZmVkaXQuX19tb3JlICVzJyAlICgK KwkJCQlzZWxmLndvcmxkLCBzZWxmLmtleW5hbWUgKSApCisKKwlkZWYgZG9u ZSggc2VsZiApOgorCQkiIiJjb3B5IG5ldyBmaWxlIHRvIG9sZCBmaWxlLCBw cmludCBkb25lIG1lc3NhZ2UiIiIKKworCQkjIG5vIGxvbmdlciBydW5uaW5n CisJCWlmIHNlbGYua2V5bmFtZSBpbiBJTlBST0dSRVNTOgorCQkJZGVsIElO UFJPR1JFU1Nbc2VsZi5rZXluYW1lXQorCisJCSMgbGV0IHRoaXMganVzdCBJ T0Vycm9yIG91dCBpZiBpdCB3YW50cywgdGhlbiB1c2VyIHNlZXMgZXJyb3IK KwkJc2h1dGlsLmNvcHkyKCBzZWxmLm5hbWUyLCBzZWxmLm5hbWUxICkKKwor CQkjIHRlbGwgdXNlciB3aGF0IHdlIGRpZAorCQlwcmludCAiJSUgZGlmZmVk aXQudXBsb2FkIC0+ICVzICVzIC0gJTRkIGNtZHMgc2VudCAtIGRvbmUiICUg XAorCQkJICAoIHNlbGYud29ybGQsIHNlbGYucmVtb3RlLCBzZWxmLmxpbmVz X3NlbnQgKQorCisjCisjIGxzZWRpdCB1cGxvYWRlcgorIworY2xhc3MgdXBf bHNlZGl0KCB1cGxvYWRlciApOgorCWRlZiBfX2luaXRfXyggKmFyZ3MgKToK KwkJdXBsb2FkZXIuX19pbml0X18oICphcmdzICkKKworCSMgc2VlIGNsYXNz IHVwbG9hZGVyIGZvciBvcGNvZGVzIGZvcm1hdAorCWRlZiBnZW5lcmF0ZV9j b21tYW5kcyggc2VsZiwgb3Bjb2RlcyApOgorCQl5aWVsZCAibHNlZGl0ICVz IiAlIHNlbGYucmVtb3RlCisKKwkJZm9yIG9wY29kZSwgcG9zMSwgcG9zMiwg biBpbiBvcGNvZGVzOgorCQkJaWYgb3Bjb2RlID09ICdkJzoKKwkJCQl5aWVs ZCAiLmRlbCAlZCAlZCIgJSAoIHBvczEsIHBvczErbi0xICkKKwkJCWVsaWYg b3Bjb2RlID09ICdpJzoKKwkJCQl5aWVsZCAiLmkgJWQiICUgKCBwb3MxICkK KwkJCQlmb3IgaSBpbiB4cmFuZ2UoIHBvczIsIHBvczIrbiApOgorCQkJCQl5 aWVsZCBzZWxmLmxpbmVzMltpLTFdCisKKwkJeWllbGQgIi5lbmQiCisJCQkK KyMKKyMgbXVmIHVwbG9hZGVyCisjCitjbGFzcyB1cF9tdWYoIHVwbG9hZGVy ICk6CisJZGVmIF9faW5pdF9fKCAqYXJncyApOgorCQl1cGxvYWRlci5fX2lu aXRfXyggKmFyZ3MgKQorCisJIyBzZWUgY2xhc3MgdXBsb2FkZXIgZm9yIG9w Y29kZXMgZm9ybWF0CisJZGVmIGdlbmVyYXRlX2NvbW1hbmRzKCBzZWxmLCBv cGNvZGVzICk6CisJCXlpZWxkICJAZWRpdCAlcyIgJSBzZWxmLnJlbW90ZQor CisJCWZvciBvcGNvZGUsIHBvczEsIHBvczIsIG4gaW4gb3Bjb2RlczoKKwkJ CWlmIG9wY29kZSA9PSAnZCc6CisJCQkJeWllbGQgIiVkICVkIGQiICUgKCBw b3MxLCBwb3MxK24tMSApCisJCQllbGlmIG9wY29kZSA9PSAnaSc6CisJCQkJ eWllbGQgIiVkIGkiICUgKCBwb3MxICkKKwkJCQlmb3IgaSBpbiB4cmFuZ2Uo IHBvczIsIHBvczIrbiApOgorCQkJCQl5aWVsZCBzZWxmLmxpbmVzMltpLTFd CisJCQkJeWllbGQgIi4iCisJCQkJCisJCXlpZWxkICJjIgorCQl5aWVsZCAi cSIKKworCQkJCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIE1haW4gbG9naWMKKyMgLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0KKworIyBLZWVwIHVwbG9hZGluZyBzb21ldGhpbmcgd2Ugc3RhcnRlZAor ZGVmIF9fbW9yZSggYXJnc3RyICk6CisJZWRpdG9yID0gSU5QUk9HUkVTUy5n ZXQoIGFyZ3N0ciwgTm9uZSApCisJaWYgbm90IGVkaXRvcjoKKwkJcmV0dXJu CisKKwkjcHJpbnQgInVwbG9hZGluZyBtb3JlIGZvciAlcyIgJSAoIGVkaXRv ci5uYW1lMiApCisJZWRpdG9yLnVwbG9hZF9jaHVuaygpCisKKyMgYWJvcnQg YWxsIHVwbG9hZHMhIG9vZ2FoLCBvb2dhaCEKK2RlZiBhYm9ydCggYXJnc3Ry ICk6CisJdGYub3V0KCAiKiBkaWZmZWRpdC5hYm9ydCAtIGFib3J0aW5nIGFs bCBpbiBwcm9ncmVzcyB1cGxvYWRzIiApCisJZ2xvYmFsIElOUFJPR1JFU1MK KwlJTlBST0dSRVNTID0ge30KKworIyBzdGFydCBhIG5ldyB1cGxvYWQKK2Rl ZiB1cGxvYWQoIGFyZ3N0ciApOgorCisJIyAKKwkjIGFyZ3VtZW50IHBhcnNp bmcgaXMgbXVjaCBsYXJnZXIgdGhhbiBhY3R1YWwgbG9naWMhCisJIworCisJ aWYgbm90IGFyZ3N0cjoKKwkJcmV0dXJuIGhlbHAoKQorCisJYXJncyA9IGFy Z3N0ci5zcGxpdCgpCisKKwkjIGNoZWNrIGZvciByYXcgZmxhZworCWlmICIt ciIgaW4gYXJnczoKKwkJcmF3ID0gVHJ1ZQorCQlhcmdzLnJlbW92ZSggIi1y IiApCisJZWxzZToKKwkJcmF3ID0gRmFsc2UKKworCSMgbGluZXMgcGVyIHNl Y29uZCBhbmQgcHJvZ3Jlc3MKKwlscHMsIHByb2cgPSBMSU5FU19QRVJfU0VD T05ELCAwCisJYXJnczIgPSBbXQorCWZvciBpLCBhcmcgaW4gZW51bWVyYXRl KCBhcmdzICk6CisKKwkJIyBwcm9ncmVzcworCQlpZiBhcmcuc3RhcnRzd2l0 aCggIi1wIiApOgorCQkJcHJvZyA9IDEwMAorCQkJaWYgbGVuKGFyZykgPiAy OgorCQkJCXRyeToKKwkJCQkJcHJvZyA9IGludChhcmdbMjpdKQorCQkJCWV4 Y2VwdCBWYWx1ZUVycm9yOgorCQkJCQlyZXR1cm4gaGVscCgpCisKKwkJIyBu byB3YWl0aW5nCisJCWVsaWYgYXJnIGluICggJy1TJywgJy0wJyApOgorCQkJ bHBzID0gMAorCisJCSMgZnJhY3Rpb25hbCBzZWNvbmRzCisJCWVsaWYgYXJn LnN0YXJ0c3dpdGgoIi0iKToKKwkJCXRyeToKKwkJCQlscHMgPSBmbG9hdChh cmdbMTpdKQorCQkJCWlmIGxwczwwOgorCQkJCQlscHMgPSBhYnMoIGxwcyAp CisJCQkJaWYgbHBzPDE6CisJCQkJCWxwcyA9IDEvbHBzCisJCQlleGNlcHQg VmFsdWVFcnJvcjoKKwkJCQlwYXNzCisKKwkJZWxzZToKKwkJCWFyZ3MyLmFw cGVuZCggYXJnICkKKworCSMgd2hhdCdzIGxlZnQ/CisJYXJncyA9IGFyZ3My CisJaWYgbGVuKCBhcmdzICkgIT0gMyA6CisJCXJldHVybiBoZWxwKCkKKwor CSMgd2hpY2ggdHlwZQorCWlmIGFyZ3NbMF0gPT0gJ211Zic6CisJCWVkaXRv ciA9IHVwX211ZgorCWVsaWYgYXJnc1swXSA9PSAnbHNlZGl0JzoKKwkJZWRp dG9yID0gdXBfbHNlZGl0CisJZWxzZToKKwkJdGYuZXJyKCAiKiBkaWZmZWRp dC51cGxvYWQ6IGtub3duIGVkaXRvcnMgYXJlICdtdWYnIGFuZCAnbHNlZGl0 JyIgKQorCQlyZXR1cm4gLTEKKworCSMgQ2hlY2sgZm9yIHRoZSBmaWxlCisJ aWYgbm90IG9zLnBhdGguaXNmaWxlKCBhcmdzWzJdICk6CisJCXRmLmVycigg IiogZGlmZmVkaXQudXBsb2FkOiBmaWxlICVzIG5vdCBmb3VuZCIgJSBhcmdz WzJdICkKKwkJcmV0dXJuIC0xCisKKwkjCisJIyBPa2F5LCBoZXJlJ3Mgd2Ug d2UgYWN0dWFsbHkgZG8gc29tZSB3b3JrCisJIworCisJIyBDcmVhdGUgdGhl IG9iamVjdAorCWVkaXRvciA9IGVkaXRvciggYXJnc1sxXSwgYXJnc1syXSwg cmF3ICkKKworCSMgQ2hlY2sgdG8gbWFrZSBzdXJlIHdlJ3JlIG5vdCBhbHJl YWR5IHJ1bm5pbmcKKwlpZiBlZGl0b3Iua2V5bmFtZSBpbiBJTlBST0dSRVNT OgorCQl0Zi5lcnIoICIqIGRpZmZlZGl0LnVwbG9hZDogdXBsb2FkIGZvciAn JXM6JXMnIGFscmVhZHkgcnVubmluZy4iICUgKAorCQkJZWRpdG9yLndvcmxk LCBlZGl0b3IucmVtb3RlICkgKQorCQl0Zi5lcnIoICIqICAgICB1c2UgJy9w eXRob25fY2FsbCBkaWZmZWRpdC5hYm9ydCcgdG8gcmVzZXQgaWYgdGhpcyBp cyB3cm9uZy4iICkKKwkJcmV0dXJuCisKKwkjIGZpbmQgdGhlIGRpZmZzCisJ ZGlmZnMgPSBlZGl0b3IuZmluZF9kaWZmcygpCisKKwkjIG9ubHkgZG8gdGhl IHJlc3QgaWYgd2UgbmVlZCB0bworCWlmIGRpZmZzOgorCQkKKwkJIyBnZW5l cmF0ZSB0aGUgZWRpdG9yIGNvbW1hbmRzCisJCWNtZHMgPSBlZGl0b3IuZ2Vu ZXJhdGVfY29tbWFuZHMoIGVkaXRvci5tYXNzYWdlX29wY29kZXMoIGRpZmZz ICkgKQorCisJCSMgdXBsb2FkIHRoZW0KKwkJZWRpdG9yLnVwbG9hZF9jb21t YW5kcyggbHBzLCBwcm9nLCBjbWRzICkKKworCWVsc2U6CisJCQorCQkjIGFs bCBkb25lCisJCWVkaXRvci5saW5lc19zZW50ID0gMAorCQllZGl0b3IuZG9u ZSgpCisKKworIyBhbnkgdXBsb2FkcyBpbiBwcm9ncmVzcz8KK0lOUFJPR1JF U1MgPSB7fQpkaWZmIC1yTnUgLXggLnN2biAteCBjb25maWcubG9nIC14IGNv bmZpZy5zdGF0dXMgLXggdGYtaGVscCAteCBNYWtlZmlsZSAteCBjaGFydGFi bGVzLmMgLXggdGZjb25maWcuaCAteCB0ZmRlZnMuaCAteCAnKi5idWlsZCcg LXggJyouYmFrJyAteCAnKi5pZHgnIC14ICcqLm8nIC14ICcqLnB5YycgLXgg aHRtbDJ0ZiAteCBkZWZhdWx0IC14IG1ha2VoZWxwIC14IHRmIC14IGRmdGFi bGVzIC14ICdsaWJwY3JlKicgLXggaHRtbDJ0aWYgdGYtNTBiOC1jbGVhbi90 Zi1saWIvdGY0LnB5IHRmLTUwYjgtcHkvdGYtbGliL3RmNC5weQotLS0gdGYt NTBiOC1jbGVhbi90Zi1saWIvdGY0LnB5CTE5NjktMTItMzEgMTY6MDA6MDAu MDAwMDAwMDAwIC0wODAwCisrKyB0Zi01MGI4LXB5L3RmLWxpYi90ZjQucHkJ MjAwOC0wMS0yNSAyMzozMTo1Ny4wMDAwMDAwMDAgLTA4MDAKQEAgLTAsMCAr MSw0NjIgQEAKKyMKKyMgQ29udmVydHMgeW91ciBURjUgdG8gYWN0IChzb3J0 IG9mKSBsaWtlIFRGNC4KKyMKKyMgV2l0bmVzcyB0aGUgcG93ZXIgb2YgdGhp cyBmdWxseSBvcGVyYXRpb25hbCBkZWF0aCBzdGFyISBUaGlzIGRlbW9uc3Ry YXRlcworIyBqdXN0IGhvdyBwb3dlcmZ1bCBUaW55RnVndWUncyB0cmlnZ2Vy cyBhcmUuIFdpdGggZW5vdWdoIGhvb2tzIHlvdSBjYW4KKyMgcmVhbGx5IHRy YW5zZm9ybSB0aGUgYmVoYXZpb3IsIHRob3VnaCB0aGlzIGlzIGFkbWl0dGVk bHkgcHJldHR5IG9ic2NlbmUuCisjIEkganVzdCB3YW50ZWQgdG8gcHJvdmUg dGhhdCBpdCB3YXMgKG1vc3RseSkgcG9zc2libGUuCisjCisjIFdoYXQgdGhp cyBkb2VzIGlzIGNyZWF0ZSBhIGZha2Ugd29ybGQgdGhlbiByb3V0ZSBhbGwg aW5wdXQvb3V0cHV0IHRocm91Z2gKKyMgdGhhdCB3b3JsZC4gVGhpcyBhcHBy b2FjaCB3b24ndCB3b3JrIGlmIHlvdSdyZSBkb2luZyBhbnl0aGluZyB0b28g ZmFuY3kgd2l0aAorIyB5b3VyIG93biBtYWNyb3MuIFVuZm9ydHVuYXRlbHkg YmVjYXVzZSBvZiB0aGUgd2F5IFRGIGhhbmRsZXMgY29sb3Igd2UgY2FuJ3QK KyMgZG8gYW55dGhpbmcgd2l0aCB0aGF0IC0gdGV4dCBjb2xvciBhcmUgaGlk ZGVuIGF0dHJpYnV0ZXMsIHlvdSBjYW4ndCBqdXN0CisjIHBhc3MgYWxvbmcg YXNjaWkgY29kZXMuCisjCisjIE5PVEU6IFRoaXMgc2VlbXMgdG8gYmxvdyB1 cCBvbiBQeXRob24gMi41LjAgKDIuNS4xIGlzIGZpbmUpIGJlY2F1c2UgaXQg Y2hva2VzCisjICAgICAgIG9uIHRoZSBrZXk9dmFsIGFyZ3VtZW50IGNhbGxz IGZvciBubyByZWFzb24gSSBjYW4gZmluZCB3aXRoIGEgTm9uZQorIyAgICAg ICBvYmplY3QgZXJyb3IuCisjCisjIFVzYWdlOgorIyAgICAvcHl0aG9uX2xv YWQgdGY0CisjICAgIC90ZjQgaGVscAorIworIyBDb3B5cmlnaHQgMjAwOCBS b24gRGlwcG9sZAorIworIyB2MS4wMCAtIEphbiAyNSAnMDggLSBJbml0aWFs IHZlcnNpb24KKworaW1wb3J0IHRmLCB0ZnV0aWwKKworIy0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0KKyMgQSBnbG9yaW91cyByZWFsIHdvcmxkIC0gd2hpY2ggd2UncmUgaGlk aW5nCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLQorY2xhc3MgV29ybGQoIG9iamVjdCApOgor CisJZGVmIF9faW5pdF9fKCBzZWxmLCBuYW1lICk6CisJCXNlbGYubmFtZSA9 IG5hbWUKKwkJc2VsZi5zb2NrZXQgPSBub3Qgbm90IG5hbWUKKworCQlnbG9i YWwgV0RJQ1QsIFdMSVNUCisJCVdESUNUW3NlbGYubmFtZS5sb3dlcigpXSA9 IHNlbGYKKwkJaWYgc2VsZi5zb2NrZXQ6CisJCQlXTElTVC5hcHBlbmQoIHNl bGYgKQorCQlzZWxmLmJ1ZmZlciA9IFtdCisKKwkjIHNlbmQgYSBsaW5lIHRv IHRoZSB3b3JsZAorCWRlZiBzZW5kKCBzZWxmLCB0ZXh0ICk6CisJCWlmIHNl bGYuc29ja2V0OgorCQkJdGYuc2VuZCggdGV4dCwgc2VsZi5uYW1lICkKKwor CSMgY2FsbGVkIHdoZW4gcmVjZWl2aW5nIGEgbGluZSBmcm9tIHRoZSB3b3Js ZAorCWRlZiByeCggc2VsZiwgdGV4dCApOgorCQlnbG9iYWwgRkcsIE1PREUK KworCQkjIGp1c3QgYWNjdW11bGF0ZSBpbiBidWZmZXIKKwkJaWYgTU9ERSA9 PSBNT0RFX09OIGFuZCBGRyAhPSBzZWxmOgorCQkJaWYgbm90IHNlbGYuYnVm ZmVyOgorCQkJCXRmLm91dCggIiUlIEFjdGl2aXR5IGluIHdvcmxkICVzIiAl IHNlbGYubmFtZSApCisJCQkJQUNUSVZJVFkuYXBwZW5kKCBzZWxmICkKKwkJ CQlfYWN0aXZpdHlfc3RhdHVzKCkKKwkJCXNlbGYuYnVmZmVyLmFwcGVuZCgg dGV4dCApCisJCQlyZXR1cm4KKworCQlpZiBNT0RFID09IE1PREVfU1dJVENI OgorCQkJc2VsZi5hY3RpdmF0ZSgpCisKKwkJZWxpZiBNT0RFID09IE1PREVf TUlYOgorCQkJc2VsZi5jaGVja19sYXN0KCkKKwkJCQorCQl0Zi5vdXQoIHRl eHQgKQorCisJZGVmIGRpdmlkZXIoIHNlbGYgKToKKwkJIyBzaG93IGRpdmlk ZXIKKwkJaWYgc2VsZi5uYW1lOgorCQkJdGYub3V0KCAiLS0tLSBXb3JsZCAl cyAtLS0tIiAlIHNlbGYubmFtZSApCisJCWVsc2U6CisJCQl0Zi5vdXQoICIt LS0tIE5vIHdvcmxkIC0tLS0iICkKKworCWRlZiBjaGVja19sYXN0KCBzZWxm ICk6CisJCWdsb2JhbCBMQVNUX09VVAorCQlpZiBMQVNUX09VVCAhPSBzZWxm OgorCQkJc2VsZi5kaXZpZGVyKCkKKwkJCXNlbGYuZHVtcF9idWZmZXIoKQor CQkJTEFTVF9PVVQgPSBzZWxmCisKKwkjIGFjdGl2YXRlIHRoaXMgd29ybGQK KwlkZWYgYWN0aXZhdGUoIHNlbGYgKToKKwkJc2VsZi5jaGVja19sYXN0KCkK KworCQlnbG9iYWwgRkcKKwkJaWYgc2VsZiAhPSBGRzoKKwkJCUZHID0gc2Vs ZgorCQkJdGYuZXZhbCggIi9zZXQgX3RmNHdvcmxkPSVzIiAlIHNlbGYubmFt ZSApCisKKwlkZWYgZHVtcF9idWZmZXIoIHNlbGYgKToKKwkJIyBjbGVhbiBv dXQgYnVmZmVyLCBubyBsb25nZXIgYWN0aXZlIHdvcmxkCisJCQorCQlpZiBu b3Qgc2VsZi5idWZmZXI6CisJCQlyZXR1cm4KKwkJZm9yIGxpbmUgaW4gc2Vs Zi5idWZmZXI6CisJCQl0Zi5vdXQoIGxpbmUgKQorCQlzZWxmLmJ1ZmZlciA9 IFtdCisKKwkJZ2xvYmFsIEFDVElWSVRZCisJCWlmIHNlbGYgaW4gQUNUSVZJ VFk6CisJCQlBQ1RJVklUWS5yZW1vdmUoIHNlbGYgKQorCQkJX2FjdGl2aXR5 X3N0YXR1cygpCisKKwlkZWYgY29ubmVjdCggc2VsZiApOgorCQlnbG9iYWwg V0xJU1QKKwkJc2VsZi5zb2NrZXQgPSBUcnVlCisJCWlmIG5vdCBzZWxmIGlu IFdMSVNUOgorCQkJV0xJU1QuYXBwZW5kKCBzZWxmICkKKwkJCisJCXNlbGYu YWN0aXZhdGUoKSAjPz8/CisKKwlkZWYgZGlzY29ubmVjdCggc2VsZiwgcmVh c29uICk6CisJCXRyeToKKwkJCVdMSVNULnJlbW92ZSggc2VsZiApCisJCWV4 Y2VwdCBWYWx1ZUVycm9yOiBwYXNzCisJCXNlbGYuc29ja2V0ID0gRmFsc2UK KwkJCisKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMg R2xvYmFsIGRhdGEgc3RydWN0dXJlcworIyAtLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLQorCisjIEtub3duIHdvcmxkcyAtIGluIGRpY3QgZm9y bWF0IGZvciBmYXN0IGxvb2t1cCBhbmQgbGlzdCBmb3JtYXQgZm9yIG9yZGVy aW5nLgorIyBTaW5jZSBldmVyeXRoaW5nIGlzIGJ5IHJlZmVyZW5jZSwgdGhp cyBpcyBjaGVhcC4KK1dESUNUID0ge30KK1dMSVNUID0gW10KKworIyBUaGUg d29ybGQgd2UncmUgcHJldGVuZGluZyBpcyBmb3JlZ3JvdW5kCitGRz1Xb3Js ZCggJycgKQorCisjIFdvcmxkIHdlIGxhc3Qgc2hvd2VkIG91dHB1dCBmb3IK K0xBU1RfT1VUPUZHCisKKyMgcXVldWUgb2Ygd29ybGRzIHdpdGggYWN0aXZp dHkKK0FDVElWSVRZID0gW10KKworIyBPdXIgY3VycmVudCBzdGF0ZQorTU9E RV9PRkYsIE1PREVfT04sIE1PREVfTUlYLCBNT0RFX1NXSVRDSCA9ICggMCwg MSwgMiwgMyApCitNT0RFID0gTU9ERV9PRkYKKworIyAtLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgSGVscGVyIGZ1bmNzCisjIC0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisjIHN0YXRlIHNpbmds ZXRvbgorU1RBVEUgPSBOb25lCitkZWYgZ2V0c3RhdGUoKToKKwlnbG9iYWwg U1RBVEUKKwlpZiBub3QgU1RBVEU6CisJCVNUQVRFID0gdGZ1dGlsLlN0YXRl KCkKKwlyZXR1cm4gU1RBVEUKKworCitkZWYgX2FjdGl2aXR5X3N0YXR1cygp OgorCWlmIEFDVElWSVRZOgorCQl0ZXh0ID0gIihBY3RpdmU6JTJkKSIgJSBs ZW4oQUNUSVZJVFkpCisJZWxzZToKKwkJdGV4dCA9ICIiCisJdGYuZXZhbCgg Ii9zZXQgX3RmNGFjdGl2aXR5PSIrdGV4dCApCisJCisjIC0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBPdXIgL3B5dGhvbl9jYWxsIGZ1 bmN0aW9ucworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K KworIyBDYWxsZWQgd2hlbmV2ZXIgd2UgZ2V0IGEgbGluZSBmcm9tIGEgd29y bGQKK2RlZiByeCggYXJnc3RyICk6CisJbmFtZSwgdGV4dCA9IGFyZ3N0ci5z cGxpdCggJyAnLCAxICkKKwl3b3JsZCA9IFdESUNULmdldChuYW1lLmxvd2Vy KCkpCisJaWYgbm90IHdvcmxkOgorCQl3b3JsZCA9IFdvcmxkKCBuYW1lICkK KwkJV0RJQ1RbbmFtZS5sb3dlcigpXSA9IHdvcmxkCisJd29ybGQucngoIHRl eHQgKQorCisjIERpc3BhdGNoZXIKK2RlZiB0eCggYXJnc3RyICk6CisJRkcu c2VuZCggYXJnc3RyICkKKworIyBEbyBhIC9kYyAtIGp1c3QgZG9uJ3QgbGV0 IGl0IC9kYyBvdXIgX3RmNCB3b3JsZCEKK2RlZiBkYyggYXJnc3RyICk6CisJ YXJnc3RyID0gYXJnc3RyLmxvd2VyKCkuc3RyaXAoKQorCisJIyBkbyB0aGVt IGFsbAorCWlmIGFyZ3N0ciA9PSAiLWFsbCI6CisJCWZvciB3b3JsZCBpbiBX TElTVDoKKwkJCXRmLm91dCggIi9AZGMgJXMiICUgd29ybGQubmFtZSApCisJ CQl0Zi5ldmFsKCAiL0BkYyAlcyIgJSB3b3JsZC5uYW1lICkKKwkJCWRpc2No b29rKCB3b3JsZC5uYW1lICsgIiB0ZjQiICkKKwkJcmV0dXJuCisKKwkjIG90 aGVyd2lzZSBkbyBmb3JlZ3JvdW5kIHdvcmxkCisJaWYgYXJnc3RyOgorCQl3 b3JsZCA9IFdESUNULmdldChhcmdzdHIpCisJZWxzZToKKwkJd29ybGQgPSBG RworCisJaWYgd29ybGQ6CisJCXRmLmV2YWwoICIvQGRjICVzIiAlIHdvcmxk Lm5hbWUgKQorCQlkaXNjaG9vayggd29ybGQubmFtZSArICIgdGY0IiApCisK KyMgY2hhbmdlIHdvcmxkCitkZWYgZmcoIGFyZ3N0ciApOgorCWNtZCwgb3B0 cywgYXJnc3RyID0gdGZ1dGlsLmNtZF9wYXJzZSggYXJnc3RyLCAibnM8PmM6 fHEiICkKKwlpZiBub3Qgb3B0cyBhbmQgbm90IGFyZ3N0cjoKKwkJcmV0dXJu CisKKwkjIG5vIG9wdHMsIGp1c3QgYSB3b3JsZCBuYW1lCisJaWYgbm90IG9w dHM6CisJCWZnID0gV0RJQ1QuZ2V0KCBhcmdzdHIubG93ZXIoKSApCisJCWlm IGZnOgorCQkJZmcuYWN0aXZhdGUoKQorCQllbHNlOgorCQkJdGYub3V0KCAi JSUgZmc6IG5vdCBjb25uZWN0ZWQgdG8gJyVzJyIgJSBhcmdzdHIgKQorCQly ZXR1cm4KKworCSMgaGFuZGxlIG9wdHMKKwlmZyA9IE5vbmUKKworCSMgZWFz eSwganVzdCBuZXh0IGFjdGl2aXR5IHdvcmxkCisJaWYgJ2EnIGluIG9wdHMg YW5kIEFDVElWSVRZOgorCQlmZyA9IEFDVElWSVRZWzBdCisJCWZnLmFjdGl2 YXRlKCkKKwkJcmV0dXJuCisKKwkjIHJlbGF0aXZlIG1vdmVtZW50CisJYyA9 IDAKKwlpZiAnYycgaW4gb3B0czoKKwkJdHJ5OgorCQkJYyA9IGludCggb3B0 c1snYyddICkKKwkJZXhjZXB0OgorCQkJYyA9IDEKKwllbGlmICc8JyBpbiBv cHRzIG9yICdhJyBpbiBvcHRzOgorCQljID0gLTEKKwllbGlmICc+JyBpbiBv cHRzOgorCQljID0gMQorCQkKKwlpZiBjICE9IDA6CisJCWlmIFdMSVNUOgor CQkJaWYgRkcgaW4gV0xJU1Q6CisJCQkJZmcgPSBXTElTVFsoV0xJU1QuaW5k ZXgoIEZHICkgKyBjKSAlIGxlbiggV0xJU1QgKV0KKwkJCWVsc2U6CisJCQkJ ZmcgPSBXTElTVFswXQorCQllbHNlOgorCQkJZmcgPSBXRElDVFsnJ10KKwll bGlmICduJyBpbiBvcHRzOgorCQlmZyA9IFdESUNUWycnXQorCQkKKwlpZiBm ZzoKKwkJZmcuYWN0aXZhdGUoKQorCisKKyMgcGVuZGluZyBob29rLCBqdXN0 IHNob3cgbG9jYWxseQorZGVmIG90aGVyaG9vayggYXJnc3RyICk6CisJdGYu b3V0KCBhcmdzdHIgKQorCisjIHdvcmxkIGNvbm5lY3RlZCBob29rCitkZWYg Y29uaG9vayggYXJnc3RyICk6CisJbmFtZSA9IGFyZ3N0ci5zcGxpdCgpWzBd CisJd29ybGQgPSBXRElDVC5nZXQoIG5hbWUubG93ZXIoKSApCisJaWYgbm90 IHdvcmxkOgorCQkjIGNyZWF0ZSBhIG5ldyB3b3JsZCAtIGFkZHMgaXRzZWxm IHRvIFdESUNULCBXTElTVAorCQl3b3JsZCA9IFdvcmxkKCBuYW1lICkKKwor CXRmLmV2YWwoICIvQGZnIF90ZjQiICkgIyBqdXN0IGluIGNhc2UKKwl3b3Js ZC5jb25uZWN0KCkKKwkJCisKKyMgd29ybGQgZGlzY29ubmVjdGVkIGhvb2sK K2RlZiBkaXNjaG9vayggYXJnc3RyICk6CisJc3BsaXQgPSBhcmdzdHIuc3Bs aXQoTm9uZSwxKQorCW5hbWUgPSBzcGxpdFswXS5sb3dlcigpCisJcmVhc29u ID0gbGVuKHNwbGl0KT4xIGFuZCBzcGxpdFsxXSBvciAnJworCWlmIG5hbWUg aW4gV0RJQ1Q6CisJCVdESUNUW25hbWVdLmRpc2Nvbm5lY3QoIHJlYXNvbiAp CisJaWYgcmVhc29uICE9ICd0ZjQnOgorCQl0Zi5vdXQoICIlJSBDb25uZWN0 aW9uIHRvICVzIGNsb3NlZC4iICUgbmFtZSApCisJd29ybGQoICItYSIgKQor CQorIyBjb25uZWN0aW9uIHJlcXVlc3QgLSBqdXN0IG1ha2Ugc3VyZSB3ZSBz dGFydCBpbiBiYWNrZ3JvdW5kCitkZWYgY29ubmVjdCggYXJnc3RyICk6CisJ Y21kLCBvcHRzLCBhcmdzdHIgPSB0ZnV0aWwuY21kX3BhcnNlKCBhcmdzdHIs ICJscXhmYiIgKQorCW9wdHNbJ2InXSA9ICcnCisJaWYgJ2YnIGluIG9wdHM6 CisJCWRlbCBvcHRzWydmJ10KKworCXRmLm91dCggdGZ1dGlsLmNtZF91bnBh cnNlKCAiL0Bjb25uZWN0Iiwgb3B0cywgYXJnc3RyICkgKQorCXRmLmV2YWwo IHRmdXRpbC5jbWRfdW5wYXJzZSggIi9AY29ubmVjdCIsIG9wdHMsIGFyZ3N0 ciApICkKKworIyB3b3JsZCBpcyBhIGh5YnJpZCBvZiBjb25uZWN0IGFuZCBm ZworZGVmIHdvcmxkKCBhcmdzdHIgKToKKwljbWQsIG9wdHMsIGFyZ3N0ciA9 IHRmdXRpbC5jbWRfcGFyc2UoIGFyZ3N0ciwgImxxeGZiIiApCisJbmFtZSA9 IGFyZ3N0ci5sb3dlcigpCisJaWYgbmFtZSBhbmQgbmFtZSBpbiBXRElDVDoK KwkJbmFtZS5hY3RpdmF0ZSgpCisJZWxpZiBvcHRzOgorCQlmZyggYXJnc3Ry ICkKKwllbHNlOgorCQljb25uZWN0KCBhcmdzdHIgKQorCisjIEp1c3QgbWFr ZSBzdXJlIHdlIGhhdmUgYSBzcGVjaWZpYyB3b3JsZAorZGVmIHJlY2FsbCgg YXJnc3RyICk6CisJY21kLCBvcHRzLCBhcmdzdHIgPSB0ZnV0aWwuY21kX3Bh cnNlKCBhcmdzdHIsICd3OmxpZ3Z0OmE6bTpBOkI6QzonICkKKworCWlmIG5v dCAndycgaW4gb3B0cyBvciBub3Qgb3B0c1sndyddOgorCQlvcHRzWyd3J10g PSBGRy5uYW1lCisKKwl0Zi5ldmFsKCB0ZnV0aWwuY21kX3VucGFyc2UoICIv QHJlY2FsbCIsIG9wdHMsIGFyZ3N0ciApICkKKworZGVmIHF1aXQoIGFyZ3N0 ciApOgorCWNtZCwgb3B0cywgYXJnc3RyID0gdGZ1dGlsLmNtZF9wYXJzZSgg YXJnc3RyLCAneScgKQorCisJaWYgbm90IEFDVElWSVRZOgorCQlvcHRzWyd5 J10gPSAnJworCisJdGYuZXZhbCggdGZ1dGlsLmNtZF91bnBhcnNlKCAiL0Bx dWl0Iiwgb3B0cywgYXJnc3RyICkgKQorCisjIC0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0KKyMgSW5pdGlhbCBzZXR1cAorIyAtLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK2RlZiBteWhlbHAoKToKKwlmb3Ig bGluZSBpbiAiIiIKKy90ZjQgKE9OfG1peHxzd2l0Y2h8b2ZmKQorCitvbjog IFR1cm5zIG9uIFRpbnlGdWd1ZSA0IGVtdWxhdGlvbiBtb2RlIHdoZXJlIGFs bCB3b3JsZCBhY3Rpdml0eSBpcyBzaG93bgorICBpbiBhIHNpbmdsZSB3b3Js ZCBzZXBhcmF0ZWQgYnkgLS0tLSBXb3JsZCBGb28gLS0tLSBtYXJrZXJzLiBU aGlzIGlzCisgIGVtdWxhdGVkIHdpdGggaG9va3MgYW5kIHNjcmlwdHMsIHNv IGlmIHlvdXIgb3duIHNjcmlwdHMgZ2V0IHRvbyBmYW5jeQorICBpdCB3aWxs IGJyZWFrLCBidXQgaXQgc2VlbXMgdG8gd29yayBwcmV0dHkgd2VsbCB3aXRo IG1pbmUuCisKK21peDogTGlrZSAnb24nLCBidXQgb3V0cHV0IGluIGJhY2tn cm91bmQgd29ybGRzIHdpbGwgYmUgaW1tZWRpYXRlbHkgc2hvd24KKyAgKHdp dGggYSBkaXZpZGVyKSBzbyB5b3UgY2FuIGp1c3Qgd2F0Y2ggdGhlIG91dHB1 dCBvZiBhbGwgd29ybGRzIHNjcm9sbAorICBieS4gSG93ZXZlciB0aGUgd29y bGQgZG9lcyBub3QgYmVjb21lIHRoZSBmb3JlZ3JvdW5kIHdvcmxkISBXaXRo b3V0CisgIC92aXN1YWwgb24geW91IHdvbid0IHJlYWxseSBoYXZlIGFueSBp bmRpY2F0aW9uIG9mIHdoYXQgdGhlIGZvcmVncm91bmQKKyAgd29ybGQgaXMg c28geW91IHdvbid0IGtub3cgd2hlcmUgeW91J3JlIHNlbmRpbmcgdGV4dC4K Kworc3dpdGNoOiBMaWtlICdtaXgnIGJ1dCBpbW1lZGlhdGVseSBzd2l0Y2hl cyB5b3UgdG8gd2hhdGV2ZXIgd29ybGQgaGFzIG91dHB1dC4KKyAgT2J2aW91 c2x5IHRoaXMgbWFrZXMgaXQgdG91Z2ggdG8gZ3VhcmFudGVlIHRoYXQgYW55 IHRleHQgeW91J3JlIHNlbmRpbmcKKyAgd2lsbCBnbyB0byB0aGUgcmlnaHQg d29ybGQgdW5sZXNzIHlvdSBkbyBhIC9zZW5kIC13Zm9vIHRleHQsIHNpbmNl IGl0CisgIGNvdWxkIHN3aXRjaCBqdXN0IGJlZm9yZSB5b3UgaGl0IGVudGVy LgorIAorb2ZmOiBUdXJuIG9mZiBUaW55RnVndWUgNCBlbXVsYXRpb24gbW9k ZSwgcmV2ZXJ0IGFsbCB5b3VyIGtleWJpbmRpbmdzIGFuZAorICBtYWNybyBk ZWZpbml0aW9ucyBiYWNrIHRvIHRoZSB3YXkgdGhleSB3ZXJlLgorIiIiLnNw bGl0KCJcbiIpOgorCQl0Zi5vdXQoIGxpbmUgKQorCitkZWYgdGY0KCBhcmdz dHIgKToKKworCSMgQ3JlYXRlIGEgbmV3IGJhc2Ugc3RhdGUgaWYgd2UgZG9u J3QgaGF2ZSBvbmUKKwlzdGF0ZSA9IGdldHN0YXRlKCkKKworCisJIyBKdXN0 IHBhcnNlIHRoZSBjb21tYW5kCisJZ2xvYmFsIE1PREUKKwlhcmdzdHIgPSBh cmdzdHIubG93ZXIoKQorCWlmIG5vdCBhcmdzdHIgb3IgJ29uJyBpbiBhcmdz dHI6CisJCW5ld21vZGUgPSBNT0RFX09OCisJCQorCWVsaWYgJ2hlbHAnIGlu IGFyZ3N0cjoKKwkJcmV0dXJuIG15aGVscCgpCisKKwllbGlmICdvZmYnIGlu IGFyZ3N0cjoKKwkJbmV3bW9kZSA9IE1PREVfT0ZGCisKKwllbGlmICdtaXgn IGluIGFyZ3N0cjoKKwkJbmV3bW9kZSA9IE1PREVfTUlYCisKKwllbGlmICdz d2l0Y2gnIGluIGFyZ3N0cjoKKwkJbmV3bW9kZSA9IE1PREVfU1dJVENICisK KwllbHNlOgorCQlyZXR1cm4gbXloZWxwKCkKKworCSMgTm93IGRvIHdoYXQg d2UgbmVlZCB0bworCWlmIG5ld21vZGUgPT0gTU9ERV9PRkY6CisJCWlmIG5l d21vZGUgIT0gTU9ERToKKwkJCXN0YXRlLnJldmVydCgpCisJCQl0Zi5ldmFs KCAiL2RjIF90ZjQiICkKKwkJCXRmLmV2YWwoICIvdW53b3JsZCBfdGY0IiAp CisJCQlzb2NrZXRzID0gdGZ1dGlsLmxpc3Rzb2NrZXRzKCkKKwkJCWZvciBu YW1lIGluIHNvY2tldHM6CisJCQkJdGYuZXZhbCggIi9AZmcgLXEgIiArIG5h bWUgKQorCQkJTU9ERSA9IE1PREVfT0ZGCisJCXRmLm91dCggIiUgdGY0IG1v ZGUgaXMgbm93IG9mZi4gJy90ZjQnIHRvIHJlLWVuYWJsZSBpdCIgKQorCQly ZXR1cm4KKwkJCisJaWYgTU9ERSA9PSBNT0RFX09GRjoKKwkJIyBDcmVhdGUg YSB2aXJ0dWFsIHdvcmxkIHRvIGhvbGQgb3VyIHRleHQKKwkJc29ja2V0cyA9 IHRmdXRpbC5saXN0c29ja2V0cygpCisJCWlmIG5vdCAiX3RmNCIgaW4gc29j a2V0czoKKwkJCXRmLmV2YWwoICIvYWRkd29ybGQgX3RmNCIgKQorCQkJdGYu ZXZhbCggIi9jb25uZWN0IF90ZjQiICkKKworCQkJIyBXZSB3YW50IGJhY2tn cm91bmQgcHJvY2Vzc2luZyBhbmQgdHJpZ2dlcnMKKwkJCXN0YXRlLnNldHZh ciggJ2JhY2tncm91bmQnLCAnb24nICkKKwkJCXN0YXRlLnNldHZhciggJ2Jn X291dHB1dCcsICdvZmYnICkKKwkJCXN0YXRlLnNldHZhciggJ2JvcmcnLCAn b24nICkKKwkJCXN0YXRlLnNldHZhciggJ2dhZycsICdvbicgKQorCQkJc3Rh dGUuc2V0dmFyKCAnaG9vaycsICdvbicgKQorCisJCQkjIGNoYW5nZSB0aGUg c3RhdHVzIGJhcgorCQkJc3RhdGUuc2V0dmFyKCAnX3RmNHdvcmxkJywgdGYu ZXZhbCggJy90ZXN0IGZnX3dvcmxkKCknICkgKQorCQkJc3RhdGUuc2V0dmFy KCAnX3RmNGFjdGl2aXR5JywgJycgKQorCQkJc3RhdGUuc3RhdHVzKCAicm0g QHdvcmxkIiApCisJCQlzdGF0ZS5zdGF0dXMoICJhZGQgLUFAbW9yZSBfdGY0 d29ybGQiICkKKwkJCXN0YXRlLnN0YXR1cyggInJtIEBhY3RpdmUiICkKKwkJ CXN0YXRlLnN0YXR1cyggImFkZCAtQUByZWFkIF90ZjRhY3Rpdml0eToxMSIg KQorCisJCQkjIEdyYWIgdGV4dCBmcm9tIGFueSB3b3JsZCBleGNlcHQgb3Vy IGR1bW15IHdvcmxkIC0gd2UgdXNlIGEgcmVnZXhwIGluc3RlYWQgb2YgYSBn bG9iCisJCQkjIGJlY2F1c2UgdGhlIGdsb2IgZG9lcyBub3QgcHJlc2VydmUg dGhlIHNwYWNpbmcKKwkJCXN0YXRlLmRlZmluZSggZmxhZ3M9Ii1wOTk5OTkg LXdfdGY0IC1hZyAtbWdsb2IgLXQqIiApCisJCQlzdGF0ZS5kZWZpbmUoIGJv ZHk9Ii9weXRob25fY2FsbCB0ZjQucnggJFt3b3JsZF9pbmZvKCldICVQMSIs CisJCQkJCQkgIGZsYWdzPSItRnBtYXhwcmkgLXEgLW1yZWdleHAgLXQoLiop IiApCisJCQkKKwkJCSMgYWRkIGEgdHJpZ2dlciBmb3IgYW55dGhpbmcgYmVp bmcgc2VudCB0byB0aGUgZ2VuZXJpYyB3b3JsZCwgc28gd2UgY2FuIHJlcm91 dGUKKwkJCSMgaXQgdG8gdGhlIHJpZ2h0IHdvcmxkCisJCQlzdGF0ZS5kZWZp bmUoIGJvZHk9Ii9weXRob25fY2FsbCB0ZjQudHggJXsqfSIsIGZsYWdzPSIt cG1heHByaSAtd190ZjQgLWhTRU5EIiApCisKKwkJCSMgQWRkIG91ciBob29r cworCQkJc3RhdGUuZGVmaW5lKCBib2R5PSIvcHl0aG9uX2NhbGwgdGY0LmRp c2Nob29rICV7Kn0iLAorCQkJCQkJICBmbGFncz0iLUZwbWF4cHJpIC1hZyAt bXNpbXBsZSAtaERJU0NPTk5FQ1QiICkKKwkJCXN0YXRlLmRlZmluZSggYm9k eT0iL3B5dGhvbl9jYWxsIHRmNC5jb25ob29rICV7Kn0iLAorCQkJCQkJICBm bGFncz0iLUZwbWF4cHJpIC1hZyAtbXNpbXBsZSAtaENPTk5FQ1QiICkKKwkJ CXN0YXRlLmRlZmluZSggYm9keT0iL3B5dGhvbl9jYWxsIHRmNC5vdGhlcmhv b2sgJXsqfSIsCisJCQkJCQkgIGZsYWdzPSctcDk5OSAtYWcgLW1zaW1wbGUg LWhDT05GQUlMfElDT05GQUlMfFBFTkRJTkd8RElTQ09OTkVDVCcgKQorCQkJ c3RhdGUuZGVmaW5lKCBib2R5PSIiLCBmbGFncz0iLXBtYXhwcmkgLWFnIC1t c2ltcGxlIC1oQkdUUklHIiApCisJCQlzdGF0ZS5kZWZpbmUoIGJvZHk9IiIs IGZsYWdzPSItcG1heHByaSAtYWcgLW1zaW1wbGUgLWhBQ1RJVklUWSIgKQor CisJCQkjIEJpbmQgRXNjLWIsIEVzYy1mIHRvIGNhbGwgdXMgaW5zdGVhZAor CQkJc3RhdGUuYmluZCgga2V5PSJeW2IiLCBib2R5PSIvcHl0aG9uX2NhbGwg dGY0LmZnIC08IiwgZmxhZ3M9ImkiICkKKwkJCXN0YXRlLmJpbmQoIGtleT0i XltmIiwgYm9keT0iL3B5dGhvbl9jYWxsIHRmNC5mZyAtPiIsIGZsYWdzPSJp IiApCisJCQlzdGF0ZS5iaW5kKCBrZXk9Il5bdyIsIGJvZHk9Ii9weXRob25f Y2FsbCB0ZjQuZmcgLWEiLCBmbGFncz0iaSIgKQorCisJCQkjIGRlZiB0aGVz ZSBjb21tYW5kcyB0byBnbyB0byB1cworCQkJc3RhdGUuZGVmaW5lKCAiYmci LCAiL3B5dGhvbl9jYWxsIHRmNC5mZyAtbiIgKQorCQkJc3RhdGUuZGVmaW5l KCAiY29ubmVjdCIsICIvcHl0aG9uX2NhbGwgdGY0LmNvbm5lY3QgJXsqfSIg KQorCQkJc3RhdGUuZGVmaW5lKCAiZGMiLCAiL3B5dGhvbl9jYWxsIHRmNC5k YyIgKQorCQkJc3RhdGUuZGVmaW5lKCAiZmciLCAiL3B5dGhvbl9jYWxsIHRm NC5mZyAleyp9IiApCisJCQlzdGF0ZS5kZWZpbmUoICJxdWl0IiwgIi9weXRo b25fY2FsbCB0ZjQucXVpdCAkeyp9IiApCisJCQlzdGF0ZS5kZWZpbmUoICJy ZWNhbGwiLCAiL3B5dGhvbl9jYWxsIHRmNC5yZWNhbGwgJXsqfSIgKQorCQkJ c3RhdGUuZGVmaW5lKCAidG9fYWN0aXZlX29yX3ByZXZfd29ybGQiLCAiL3B5 dGhvbl9jYWxsIHRmNC5mZyAtYSIgKQorCQkJc3RhdGUuZGVmaW5lKCAidG9f YWN0aXZlX3dvcmxkIiwgIi9weXRob25fY2FsbCB0ZjQuZmcgLWEiICkgIyBj bG9zZSBlbm91Z2gKKwkJCXN0YXRlLmRlZmluZSggIndvcmxkIiwgIi9weXRo b25fY2FsbCB0ZjQud29ybGQgJXsqfSIgKQorCisJTU9ERSA9IG5ld21vZGUK KwlpZiBuZXdtb2RlID09IE1PREVfU1dJVENIOgorCQl0Zi5vdXQoICIlIFRp bnlGdWd1ZSA0IGVtdWxhdGlvbiBtb2RlIHdpdGggYXV0b3N3aXRjaCB0byBv dXRwdXQgd29ybGQuIiApCisJZWxpZiBuZXdtb2RlID09IE1PREVfTUlYOgor CQl0Zi5vdXQoICIlIFRpbnlGdWd1ZSA0IGVtdWxhdGlvbiBtb2RlIHdpdGgg YmFja2dyb3VuZCBvdXRwdXQgc2hvd24uIiApCisJZWxzZToKKwkJdGYub3V0 KCAiJSBUaW55RnVndWUgNCBlbXVsYXRpb24gbW9kZSBpcyBvbi4iICkKKwl0 Zi5vdXQoICIlICcvdGY0IG9mZicgdG8gZGlzYWJsZSwgJy90ZjQgaGVscCcg Zm9yIGhlbHAuIiApCisKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLQorIyBXaGVuIGZpcnN0IGxvYWRlZAorIyAtLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyMgcmVnaXN0ZXIgb3Vy c2VsZgorc3RhdGUgPSBnZXRzdGF0ZSgpCitzdGF0ZS5kZWZpbmUoIG5hbWU9 InRmNCIsIGJvZHk9Ii9weXRob25fY2FsbCB0ZjQudGY0ICUqIiwgZmxhZ3M9 Ii1xIiApCit0Zi5vdXQoICIlICcvdGY0IGhlbHAnIGZvciBob3cgdG8gaW52 b2tlIFRpbnlGdWd1ZSA0IGVtdWxhdGlvbiBtb2RlLiIgKQpkaWZmIC1yTnUg LXggLnN2biAteCBjb25maWcubG9nIC14IGNvbmZpZy5zdGF0dXMgLXggdGYt aGVscCAteCBNYWtlZmlsZSAteCBjaGFydGFibGVzLmMgLXggdGZjb25maWcu aCAteCB0ZmRlZnMuaCAteCAnKi5idWlsZCcgLXggJyouYmFrJyAteCAnKi5p ZHgnIC14ICcqLm8nIC14ICcqLnB5YycgLXggaHRtbDJ0ZiAteCBkZWZhdWx0 IC14IG1ha2VoZWxwIC14IHRmIC14IGRmdGFibGVzIC14ICdsaWJwY3JlKicg LXggaHRtbDJ0aWYgdGYtNTBiOC1jbGVhbi90Zi1saWIvdGYucHkgdGYtNTBi OC1weS90Zi1saWIvdGYucHkKLS0tIHRmLTUwYjgtY2xlYW4vdGYtbGliL3Rm LnB5CTE5NjktMTItMzEgMTY6MDA6MDAuMDAwMDAwMDAwIC0wODAwCisrKyB0 Zi01MGI4LXB5L3RmLWxpYi90Zi5weQkyMDA4LTAxLTIxIDAyOjM5OjMzLjAw MDAwMDAwMCAtMDgwMApAQCAtMCwwICsxLDI1IEBACisjIFRoaXMgaXMgYSBk dW1teSB0ZiBtb2R1bGUgdG8gYWxsb3cgbW9kdWxlIHRlc3Rpbmcgb3V0c2lk ZSBvZiBUaW55RnVndWUuCisjCisjIElmIHlvdSBhcmUgYWN0dWFsbHkgL3B5 dGhvbl9sb2FkLWluZyBvciBpbXBvcnQtaW5nIHRoZSBtb2R1bGUgaW4gVEYK KyMgdGhlbiB0aGlzIGZpbGUgaXMgTk9UIExPQURFRCwgaXQgaXMgb25seSBh IHN0dWIgZm9yIGRlYnVnZ2luZy4KKworZGVmIGVyciggYXJnc3RyICk6CisJ cHJpbnQgInRmLmVyciAgfCIsIGFyZ3N0cgorCitkZWYgZXZhbCggYXJnc3Ry ICk6CisJcHJpbnQgInRmLmV2YWwgfCIsIGFyZ3N0cgorCXJldHVybiAiIgor CitkZWYgZ2V0dmFyKCB2YXIsIGRlZmF1bHQ9IiIgKToKKwlwcmludCAidGYu Z2V0dmFyIHwiLCB2YXIsIGRlZmF1bHQKKwlyZXR1cm4gZGVmYXVsdAorCitk ZWYgb3V0KCBhcmdzdHIgKToKKwlwcmludCAidGYub3V0ICB8IiwgYXJnc3Ry CisKK2RlZiBzZW5kKCB0ZXh0LCB3b3JsZD0iPGN1cnJlbnQ+IiApOgorCXBy aW50ICJ0Zi5zZW5kICVzIHwiICUgdGVzdAorCQorZGVmIHdvcmxkKCk6CisJ cmV0dXJuICJEdW1teSIKKwpkaWZmIC1yTnUgLXggLnN2biAteCBjb25maWcu bG9nIC14IGNvbmZpZy5zdGF0dXMgLXggdGYtaGVscCAteCBNYWtlZmlsZSAt eCBjaGFydGFibGVzLmMgLXggdGZjb25maWcuaCAteCB0ZmRlZnMuaCAteCAn Ki5idWlsZCcgLXggJyouYmFrJyAteCAnKi5pZHgnIC14ICcqLm8nIC14ICcq LnB5YycgLXggaHRtbDJ0ZiAteCBkZWZhdWx0IC14IG1ha2VoZWxwIC14IHRm IC14IGRmdGFibGVzIC14ICdsaWJwY3JlKicgLXggaHRtbDJ0aWYgdGYtNTBi OC1jbGVhbi90Zi1saWIvdGZ1dGlsLnB5IHRmLTUwYjgtcHkvdGYtbGliL3Rm dXRpbC5weQotLS0gdGYtNTBiOC1jbGVhbi90Zi1saWIvdGZ1dGlsLnB5CTE5 NjktMTItMzEgMTY6MDA6MDAuMDAwMDAwMDAwIC0wODAwCisrKyB0Zi01MGI4 LXB5L3RmLWxpYi90ZnV0aWwucHkJMjAwOC0wMS0yNiAwMDowOToxNi4wMDAw MDAwMDAgLTA4MDAKQEAgLTAsMCArMSw0NTUgQEAKKyMKKyMgVmFyaW91cyBo ZWxwZXIgZnVuY3MvY2xhc3NlcyBmb3IgVEYgUHl0aG9uIHRoYXQgYXJlIG1v cmUgc3VpdGVkIHRvIHdyaXRpbmcKKyMgaW4gcHl0aG9uIHRoYW4gaW4gQyAo c28gYXJlbid0IGluIHRoZSBiYXNlIHRmIG1vZHVsZSkKKyMKKyMgQ29weXJp Z2h0IDIwMDggUm9uIERpcHBvbGQKKworaW1wb3J0IHRmCisKKyMgLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIE1pc2MgaGVscGVyIGZ1bmN0 aW9ucworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworZGVm IHNjcmVlbnNpemUoKToKKwkiIiIKKwlSZXR1cm5zICggcm93cywgY29sdW1u cyApCisJIiIiCisJcmV0dXJuICggdGYuZXZhbCggIi90ZXN0IGNvbHVtbnMo KSIgKSwgdGYuZXZhbCggIi90ZXN0IGxpbmVzKCkiICkgKQorCitkZWYgdmlz dWFsKCk6CisJIiIiCisJaWYgdmlzdWFsIGlzIG9mZiwgcmV0dXJucyAwLCBv dGhlcndpc2UgcmV0dXJucyBudW1iZXIgb2YgaW5wdXQgbGluZXMKKwkiIiIK KwkKKwlpZiB0Zi5nZXR2YXIoICJ2aXN1YWwiLCAib2ZmIiApID09ICJvbiI6 CisJCXJldHVybiB0Zi5nZXR2YXIoICJpc2l6ZSIsIDMgKQorCWVsc2U6CisJ CXJldHVybiAwCisKK2RlZiBldmFsX2VzY2FwZSggdGV4dCApOgorCSIiIgor CXJldHVybnMgdGV4dCB3aXRoICUsIFwsIGFuZCAkIGRvdWJsZWQKKwkiIiIK KwlyZXR1cm4gdGV4dC5yZXBsYWNlKCclJywnJSUnKS5yZXBsYWNlKCAnXFwn LCdcXFxcJykucmVwbGFjZSgiJCIsIiQkIikKKworZGVmIGNtZF9wYXJzZSgg YXJnc3RyLCBvcHRzICk6CisJIiIiCisJUGFyc2UgdGYtc3R5bGUgY29tbWFu ZCBsaW5lcyBpbnRvIGFyZ3MgYW5kIG9wdHMtIGxpa2UgZ2V0b3B0LCBidXQg Zm9yCisJVGlueUZ1Z3VlIHN0eWxlIHdoZXJlIC13PHg+IG1heSBoYXZlIDx4 PiBvciBub3QsIGFuZCA8eD4gbXVzdCBiZSBuZXh0CisJdG8gLXcsIG5vdCBz ZXBhcmF0ZWQgYnkgYSBzcGFjZS4KKworCWFyZ3N0ciBpcyB0aGUgY29tbWFu ZCBsaW5lLCBvcHRzIGlzIGEgbGlzdCBvZiAndzpsaWd2dDphOm06QTpCOkM6 Iycgd2hlcmUKKwk6IG1lYW5zIGFuIGFyZ3VtZW50IC0gd2UgZG9uJ3QgY2Fy ZSBpZiBpdCdzIG9wdGlvbmFsIG9yIG5vdC4gIyBpcyBhCisJbnVtYmVyIG9w dGlvbiBsaWtlICctNDInIHN1Y2ggYXMgaW4gdGhlIC9xdW90ZSBjb21tYW5k LgorCisJVGhlIGFyZ3VtZW50cyBhcmUgY29uc2lkZXJlZCBvdmVyIHdoZW4g d2UgaGl0IGFueSBub24tZmxhZyBvciAnLS0nIG9yICctJworCisJUmV0dXJu cyAoIGNtZCwgb3B0ZGljdCwgcmVzdCApIHdoZXJlIGNtZCBpcyAnL3JlY2Fs bCcgKG9yIGJsYW5rIGlmIHRoZXJlCisJd2Fzbid0IGEgY29tbWFuZCBwcmVz ZW50KSwgb3B0ZGljdCBpcyB7ICd3JzonZm9vJywgJ2wnOicnLCAuLi4gfQor CWFuZCByZXN0IGlzIGEgc3RyaW5nIHdpdGggdGhlIHJlc3Qgb2YgdGhlIGxp bmUgKHVubGlrZSBnZXRvcHQsIHdlIG5lZWQgdG8KKwlwcmVzZXJ2ZSB0aGUg c3BhY2luZyBpbiB0aGUgcmVzdCBvZiB0aGUgbGluZSkuCisKKwlTZWUgYWxz byBjbWRfdW5wYXJzZSAtIHlvdSBjYW4gcHV0IHRoZSBjb21tYW5kIGJhY2sg dG9nZXRoZXIgYWZ0ZXIgY2hhbmdpbmcKKwl0aGUgYXJncy4KKwkiIiIKKwor CSMgcGFydHMgb3B0cyBpbnRvIGFuIGZsYWdzZGljdCAtIGd1ZXNzIHdlIGNv dWxkIGNhY2hlIHRoZXNlCisJZmxhZ3NkaWN0ID0ge30KKwlpLCBvbGVuID0g MCwgbGVuKG9wdHMpCisJd2hpbGUgaTxvbGVuOgorCQlpZiBpKzE8b2xlbiBh bmQgb3B0c1tpKzFdID09ICI6IjoKKwkJCWZsYWdzZGljdFtvcHRzW2ldXSA9 IG9wdHNbaSsxXQorCQkJaSArPSAyCisJCWVsc2U6CisJCQlmbGFnc2RpY3Rb b3B0c1tpXV0gPSAnJworCQkJaSArPSAxCisKKwkjIGdyYWIgdGhlIGNvbW1h bmQgb2ZmIHRoZSBmcm9udCAoaWYgYW55KQorCWlmIGFyZ3N0ci5zdGFydHN3 aXRoKCAiLyIgKToKKwkJY21kLCBhcmdzdHIgPSBhcmdzdHIuc3BsaXQoTm9u ZSwxKQorCWVsc2U6CisJCWNtZCA9ICcnCisKKwkjIHJ1biB0aHJvdWdoIG9w dHMgb24gY29tbWFuZCBsaW5lCisJb3V0ZGljdCA9IHt9CisJd2hpbGUgVHJ1 ZToKKwkJYXJnc3RyID0gYXJnc3RyLmxzdHJpcCgpCisJCWlmIG5vdCBhcmdz dHIuc3RhcnRzd2l0aCggJy0nICk6CisJCQlicmVhaworCisJCWlmICcgJyBp biBhcmdzdHI6CisJCQlhcmcsIGFyZ3N0ciA9IGFyZ3N0clsxOl0uc3BsaXQo IE5vbmUsIDEgKQorCQllbHNlOgorCQkJYXJnLCBhcmdzdHIgPSBhcmdzdHIs ICcnCisJCWlmIGFyZyA9PSAnJyBvciBhcmcgPT0gJy0nOiAjIC0tIGVuZHMg YXJndW1lbnRzCisJCQlicmVhaworCisJCSMgY2hlY2sgZWFjaCBmbGFnIGlu IHRoaXMgd29yZAorCQlpLCBhbGVuID0gMCwgbGVuKCBhcmcgKQorCQl3aGls ZSBpPGFsZW46CisJCQlmbGFnID0gYXJnW2ldCisJCQlpZiBmbGFnLmlzZGln aXQoKSBhbmQgIiMiIGluIGZsYWdzZGljdDoKKwkJCQlvdXRkaWN0WycjJ10g PSBhcmdbaTpdCisJCQkJYnJlYWsKKwkJCWZvcm0gPSBmbGFnc2RpY3QuZ2V0 KCBmbGFnLCAnJyApCisJCQlpZiBmb3JtID09ICcnOgorCQkJCW91dGRpY3Rb ZmxhZ10gPSBmb3JtCisJCQkJaSArPSAxCisJCQllbGlmIGZvcm0gPT0gJzon OgorCQkJCW91dGRpY3RbZmxhZ10gPSBhcmdbaSsxOl0KKwkJCQlicmVhawor CisJIyBhbGwgZG9uZSEKKwlyZXR1cm4gKCBjbWQsIG91dGRpY3QsIGFyZ3N0 ciApCisKK2RlZiBjbWRfdW5wYXJzZSggY21kLCBvcHRzZGljdCwgYXJnc3Ry ICk6CisJIiIiCisJVGFrZXMgb3B0aW9uYWwgY21kICgnL3JlY2FsbCcpLCBv cHRzIGRpY3QgYXMgY3JlYXRlZCBieSBjbWRfcGFyc2UsCisJYW5kIHRoZSBy ZXN0IG9mIHRoZSBjb21tYW5kIGFuZCByZWNyZWF0ZXMgYSB0Zi5ldmFsKCkg bGluZToKKworCXRmdXRpbC5jbWRfdW5wYXJzZSggJy9yZWNhbGwnLCB7ICd3 JzonZm9vJywgJyMnOicxMicgfSwgJzMwMCcgKQorCS9yZWNhbGwgLXdmb28g LTEyIDMwMAorCQorCXRmdXRpbC5jbWRfdW5wYXJzZSggJycsIHsgJ2knOicn LCAncSc6JycgXSwgJzMwMCcgKQorCS1xIC1pIDMwMAorCSIiIgorCisJZnVs bGNtZCA9IFtdCisJaWYgY21kOgorCQlmdWxsY21kLmFwcGVuZCggY21kICkK KworCWZvciBmbGFnLCBhcmcgaW4gb3B0c2RpY3QuaXRlbXMoKToKKwkJZnVs bGNtZC5hcHBlbmQoICctJXMlcycgJSAoIGZsYWcsIGFyZyApICkKKworCSMg bWFrZSBzdXJlIHdlIHRlcm1pbmF0ZSBhcmdzIGJlZm9yZSBhZGRpbmcgY29t bWFuZAorCWlmIGFyZ3N0ci5zdGFydHN3aXRoKCctJyk6CisJCWZ1bGxjbWQu YXBwZW5kKCAnLScgKQorCWZ1bGxjbWQuYXBwZW5kKCBhcmdzdHIgKQorCQor CXJldHVybiAnICcuam9pbiggZnVsbGNtZCApCisKKyMgLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tCisjIC9vdXRwdXQgaGVscGVycyAtIHRoZXJl IGRvZXNuJ3Qgc2VlbSB0byBiZSBhIHdheSBJIGNhbiBmaW5kIHRvIHJlbGlh Ymx5CisjIGdldCB0aGUgJXwgcGlwZXMgdG8gd29yaywgZXZlbiBpbiB0aGUg dGZpbyBleGFtcGxlcyAoSSBtYXkgYmUgbWlzc2luZworIyBzb21ldGhpbmcp IHNvIHRoZXNlIGRvIHRoZSBqb2Igb2Ygc2NyZWVuIHNjcmFwaW5nIGFyYml0 cmFyeSBjb21tYW5kcy4KKyMgTHVja2lseSB0aGlzIGlzIHByZXR0eSBmYXN0 LgorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworX2NhdWdo dCA9IFtdCitkZWYgX3NjcmFwZSggbGluZSApOgorCV9jYXVnaHQuYXBwZW5k KCBsaW5lICkKKworZGVmIHNjcmVlbnNjcmFwZSggY29tbWFuZCApOgorCSIi IgorCUV4ZWN1dGUgYW4gYXJiaXRyYXJ5IGNvbW1hbmQgYW5kIHJldHVybnMg dGhlIG91dHB1dCBhcyBhIGxpc3QuCisJIiIiCisJX2NhdWdodFs6XSA9IFtd CisJeCA9IHRmLmV2YWwoICIvZGVmIC1pcSBfdGZzY3JhcGUgPSAvcHl0aG9u X2NhbGwgdGZ1dGlsLl9zY3JhcGUgXCUqIiApCisJdGYuZXZhbCggIi9xdW90 ZSAtUyAvX3Rmc2NyYXBlIGAlcyIgJSBjb21tYW5kICkKKwl0Zi5ldmFsKCAi L3VuZGVmbiAlcyIgJSB4ICkKKwlyZXR1cm4gX2NhdWdodFs6XQorCitkZWYg bGlzdHNvY2tldHMoKToKKwkiIiIKKwlSZXR1cm5zIGEgbGlzdCBvZiBzb2Nr ZXQgbmFtZXMgKGFzIHN0cmluZ3MpLgorCVdlIGNvdWxkIGdldCBmYW5jaWVy IGxhdGVyIGFuZCBjcmVhdGUgU29ja2V0IGNsYXNzZXMgd2l0aCBtb3JlCisJ ICAgIGluZm8sIGJ1dCBkb24ndCBuZWVkIGl0IG5vdy4KKwkiIiIKKworCXJl dHVybiBzY3JlZW5zY3JhcGUoICIvbGlzdHNvY2tldHMgLXMgIiApCisKK2Rl ZiBsaXN0d29ybGRzKCBhc2RpY3QgPSBGYWxzZSApOgorCSIiIgorCVJldHVy bnMgYSBsaXN0IG9mIHRmdXRpbC5Xb3JsZCBjbGFzc2VzLgorCUlmIGFzZGlj dCwgdGhlbiBhcyBhIGRpY3Rpb25hcnkJd2l0aCB0aGUgV29ybGQubmFtZSBh cyBrZXkuCisJIiIiCisJbCA9IFsgV29ybGQoIGxpbmUgKSBmb3IgbGluZSBp biBzY3JlZW5zY3JhcGUoICIvbGlzdHdvcmxkcyAtYyIgKSBdCisJaWYgYXNk aWN0OgorCQlyZXR1cm4gZGljdCggWyAoIHcubmFtZSwgdyApIGZvciB3IGlu IGwgXSApCisJZWxzZToKKwkJcmV0dXJuIGwKKworIyAtLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K KyMgV29ybGQgY2xhc3MgLSBpbmZvIGFib3V0IGVhY2ggL2FkZHdvcmxkCisj IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLQorCitjbGFzcyBXb3JsZCggb2JqZWN0ICk6CisJIiIi CisJQSBXb3JsZCgpIGNsYXNzIGNvbnRhaW5zIGluZm8gYWJvdXQgYSBrbm93 biB3b3JsZHMgKC9saXN0d29ybGRzKS4KKwlUaGlzIGlzIG5vdCBxdWl0ZSB0 aGUgc2FtZSBhcyBhIHNvY2tldCwgYmVjYXVzZSBpdCBvbmx5IGluY2x1ZGVz CisJbm9uLXZpcnR1YWwgd29ybGRzLCBhbmQgdW5jb25uZWN0ZWQgd29ybGRz IGFzIHdlbGwuCisJIiIiCisKKwkjIFRoZXNlIGFyZSB0aGUgYXR0cmlidXRl cyBvbiB0aGUgV29ybGQgeW91IGNhbiBnZXQvc2V0IC0gaW4gc2FtZSBvcmRl cgorCSMgYXMgbGlzdHdvcmxkcyBjb21tYW5kIGZvcm1hdAorCUtFWVM9KCAn bmFtZScsICd0eXBlJywgJ2hvc3QnLCAncG9ydCcsICdjaGFyYWN0ZXInLCAn cGFzc3dvcmQnLCAnZmlsZScsICdmbGFncycsICdzcmNob3N0JyApCisKKwkj IFNlZSBjYXRlZ29yeSgpIGJlbG93CisJSU5WQUxJRCwgTk9STUFMLCBERUZB VUxULCBWSVJUVUFMID0gKCAwLCAxLCAyLCAzICkKKworCSMgSWYgd2UgZG9u J3QgaGF2ZSBhIHBvcnQsIHVzZSB0aGlzIG9uZQorCURFRlBPUlQgPSAyMwor CisJZGVmIF9faW5pdF9fKCBzZWxmLCBhcmcgKToKKwkJIiIiCisJCVlvdSBj YW4gcGFzcyBvbmUgb2YgdGhyZWUgYXJndW1lbnRzIHRvIGluaXQgdGhlIGNs YXNzOgorCQkgICBlbXB0eSBzdHJpbmc6ICAgICAgICBuZXcgZW1wdHkgKElO VkFMSUQpIHdvcmxkCisJCSAgIHN0cmluZzogICAgICAgICAgICAgIG5ldyB3 b3JsZCBmcm9tIC9saXN0d29ybGRzIC1jIGZvcm1hdAorCQkgICBXb3JsZDog ICAgICAgICAgICAgICBjb3B5IG9mIGFub3RoZXIgd29ybGQKKwkJIiIiCisK KwkJIyBjb3B5IG9mIGFub3RoZXIgV29ybGQKKwkJaWYgaXNpbnN0YW5jZSgg YXJnLCBXb3JsZCApOgorCQkJZm9yIGtleSBpbiBXb3JsZC5LRVlTOgorCQkJ CXNldGF0dHIoIHNlbGYsIGtleSwgZ2V0YXR0ciggYXJnLCBrZXksICcnICkg KQorCQkJcmV0dXJuCisJCQkKKwkJIyBlbXB0eSBzdHJpbmcKKwkJaWYgbm90 IGFyZzoKKwkJCWZvciBrZXkgaW4gV29ybGQuS0VZUzoKKwkJCQlzZXRhdHRy KCBzZWxmLCBrZXksICcnICkKKwkJCXNlbGYucG9ydCA9IFdvcmxkLkRFRlBP UlQKKwkJCXJldHVybgorCisJCSMgL2xpc3R3b3JsZHMgLWMgZm9ybWF0CisJ CWlmIGFyZy5zdGFydHN3aXRoKCAiL3Rlc3QgYWRkd29ybGQiICk6CisJCQlh cmdzdHIgPSBhcmdbIGFyZy5maW5kKCIoIikrMSA6IC0xIF0KKwkJCXNwbGl0 ID0gYXJnc3RyLnNwbGl0KCIsICIpICsgWycnXSAqIDEwCisJCQlmb3IgaSwg a2V5IGluIGVudW1lcmF0ZSggV29ybGQuS0VZUyApOgorCQkJCXNldGF0dHIo IHNlbGYsIGtleSwgc3BsaXRbaV0uc3RyaXAoJyInKSApCisJCQlpZiBub3Qg c2VsZi5wb3J0OgorCQkJCXNlbGYucG9ydCA9IFdvcmxkLkRFRlBPUlQKKwkJ CXJldHVybgorCisJCXJhaXNlIEV4Y2VwdGlvbiggIldvcmxkKCkgLSBpbnZh bGlkIGluaXQgc3RyaW5nIiApCisKKwkjIHNvbWUgc3BlY2lhbCBmdW5jcyAt IGNvbXBhcmlzb24gaXMgZG9uZSBieSBuYW1lLCBhcyBpcyBub256ZXJvIGNo ZWNrCisJZGVmIF9fY21wX18oIHNlbGYsIG90aGVyICk6CisJCWlmIGlzaW5z dGFuY2UoIG90aGVyLCBXb3JsZCApOgorCQkJcmV0dXJuIGNtcCggc2VsZi5u YW1lLmxvd2VyKCksIG90aGVyLm5hbWUubG93ZXIoKSApCisJCWVsc2U6CisJ CQlyZXR1cm4gY21wKCBzZWxmLm5hbWUubG93ZXIoKSwgb3RoZXIubG93ZXIo KSApCisJZGVmIF9fbm9uemVyb19fKCBzZWxmICk6CisJCXJldHVybiBzZWxm Lm5hbWUhPScnCisJZGVmIF9fc3RyX18oIHNlbGYgKToKKwkJcmV0dXJuIHNl bGYuYWRkd29ybGRfY29tbWFuZCgpCisJZGVmIF9fcmVwcl9fKCBzZWxmICk6 CisJCXJldHVybiAidGZ1dGlsLldvcmxkKCAnJXMnICkiICUgc2VsZi5hZGR3 b3JsZF9jb21tYW5kKCBUcnVlICkKKworCSMgb2theSwgcmVhbGx5IGRpZmZl cmVudAorCWRlZiBjaGFuZ2VkX2Zyb20oIHNlbGYsIG90aGVyICk6CisJCWZv ciBrZXkgaW4gV29ybGQuS0VZUzoKKwkJCWlmIGdldGF0dHIoIHNlbGYsIGtl eSApICE9IGdldGF0dHIoIG90aGVyLCBrZXkgKToKKwkJCQlyZXR1cm4gVHJ1 ZQorCQlyZXR1cm4gRmFsc2UKKworCWRlZiBjYXRlZ29yeSggc2VsZiApOgor CQkiIiIKKwkJV29ybGRzIGNhbiBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZzoK KwkJICAgV29ybGQuSU5WQUxJRCAgICAgIC0gbmFtZSBpcyBub3Qgc2V0CisJ CSAgIFdvcmxkLk5PUk1BTCAgICAgICAtIG5vcm1hbCBXb3JsZCB3aXRoIGhv c3QgbmFtZQorCQkgICBXb3JsZC5ERUZBVUxUICAgICAgLSBXb3JsZCBuYW1l IGlzICdkZWZhdWx0Jywgc2VlIC9oZWxwIGFkZHdvcmxkCisJCSAgIFdPcmxk LlZJUlRVQUwgICAgICAtIFdvcmxkIHdpdGhvdXQgYSBob3N0CisJCSIiIgor CQlpZiBub3Qgc2VsZi5uYW1lOgorCQkJcmV0dXJuIFdvcmxkLklOVkFMSUQK KwkJaWYgbm90IHNlbGYuaG9zdDoKKwkJCXJldHVybiBXb3JsZC5WSVJUVUFM CisJCWlmIHNlbGYubmFtZS5sb3dlcigpID09ICdkZWZhdWx0JzoKKwkJCXJl dHVybiBXb3JsZC5ERUZBVUxUCisJCXJldHVybiBXb3JsZC5OT1JNQUwKKwor CWRlZiBzZW5kKCBzZWxmLCB0ZXh0ICk6CisJCSIiIgorCQlTZW5kIHRleHQg dG8gdGhpcyB3b3JsZCwgZXZlbiBpZiBpdCdzIG5vdCBmb3JlZ3JvdW5kLiBO b3RlIHRoYXQgYSB3b3JsZAorCQlleGlzdGluZyBkb2VzIG5vdCBndWFyYW50 ZWUgdGhhdCBpdCBjdXJyZW50IGlzIGNvbm5lY3RlZC4KKwkJIiIiCisJCWlm IHNlbGYubmFtZToKKwkJCXRmLnNlbmQoIHRleHQsIHNlbGYubmFtZSApCisK KwlkZWYgYWRkd29ybGRfY29tbWFuZCggc2VsZiwgZnVuYz1GYWxzZSwgZnVs bD1UcnVlICk6CisJCSIiIgorCQlSZXR1cm4gYW4gYWRkd29ybGQgY29tbWFu ZCBmb3IgdGhpcyB3b3JsZC4KKwkJSWYgV29ybGQuY2F0ZWdvcnkoKSBpcyBX b3JsZC5JTlZBTElELCB0aGlzIHJldHVybnMgYW4gZW1wdHkgc3RyaW5nIQor CisJCUlmIEZ1bmMgaXMgVHJ1ZSBpdCB3aWxsIHJldHVybiBhCisJCQkvdGVz dCBhZGR3b3JsZCggLi4uICkKKwkJbGluZSwgb3RoZXJ3aXNlIGl0IHdpbGwg cmV0dXJuIGFuCisJCQkvYWRkd29ybGQgLi4uCisJICAgIAorCQlJZiBmdWxs IGlzIEZhbHNlIHRoZW4gaXQgd2lsbCBqdXN0IHJldHVybiB0aGUgYWRkd29y bGQoIC4uLiApIHBhcnQKKwkJd2l0aG91dCB0aGUgL3Rlc3Qgb3IgdGhlIC4u LiB3aXRob3V0IHRoZSAvYWRkd29ybGQuCisJCQorCQkiIiIKKworCQl3aGlj aCA9IHNlbGYuY2F0ZWdvcnkoKQorCQlpZiB3aGljaCA9PSBXb3JsZC5JTlZB TElEOgorCQkJcmV0dXJuICcnCisKKwkJIyBmdW5jdGlvbiBmb3JtYXQKKwkJ aWYgZnVuYzoKKwkJCWNtZCA9IFsgJyIlcyInICUgZ2V0YXR0cihzZWxmLGtl eSwnJykgZm9yIGtleSBpbiBXb3JsZC5LRVlTIF0KKwkJCXdoaWxlIGNtZCBh bmQgY21kWy0xXT09JyIiJzoKKwkJCQlkZWwgY21kWy0xXQorCQkJaWYgZnVs bDoKKwkJCQlyZXR1cm4gIi90ZXN0IGFkZHdvcmxkKCAlcyApIiAlICIsICIu am9pbiggY21kICkKKwkJCWVsc2U6CisJCQkJcmV0dXJuICJhZGR3b3JsZCgg JXMgKSIgJSAiLCAiLmpvaW4oIGNtZCApCisKKwkJIyBhZGR3b3JsZCBmb3Jt YXQKKwkJaWYgZnVsbDoKKwkJCWNtZCA9IFsgJy9hZGR3b3JsZCcgXQorCQll bHNlOgorCQkJY21kID0gW10KKwkJCisJCWlmIHdoaWNoPT1Xb3JsZC5OT1JN QUwgYW5kIHNlbGYuZmxhZ3M6CisJCQljbWQuYXBwZW5kKCAnLScgKyBzZWxm LmZsYWdzICkKKwkJaWYgc2VsZi50eXBlOgorCQkJY21kLmFwcGVuZCggJy1U JyArIHNlbGYudHlwZSApCisJCWlmIHdoaWNoIT1Xb3JsZC5ERUZBVUxUIGFu ZCBzZWxmLnNyY2hvc3Q6CisJCQljbWQuYXBwZW5kKCAnLXMnICsgc2VsZi5z cmNob3N0ICkKKwkJY21kLmFwcGVuZCggc2VsZi5uYW1lICkKKwkJaWYgd2hp Y2ghPVdvcmxkLlZJUlRVQUwgYW5kIHNlbGYuY2hhcmFjdGVyIGFuZCBzZWxm LnBhc3N3b3JkOgorCQkJY21kLmFwcGVuZCggc2VsZi5jaGFyYWN0ZXIgKQor CQkJY21kLmFwcGVuZCggc2VsZi5wYXNzd29yZCApCisJCWlmIHdoaWNoPT1X b3JsZC5OT1JNQUw6CisJCQljbWQuYXBwZW5kKCBzZWxmLmhvc3QgKQorCQkJ Y21kLmFwcGVuZCggc2VsZi5wb3J0ICkKKwkJaWYgd2hpY2ghPVdvcmxkLlZJ UlRVQUwgYW5kIHNlbGYuZmlsZToKKwkJCWNtZC5hcHBlbmQoIHNlbGYuZmls ZSApCisKKwkJcmV0dXJuICcgJy5qb2luKCBjbWQgKQorCQkKKworIyAtLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0KKyMgU3RhdGUgY2xhc3MKKyMgLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK2Ns YXNzIFN0YXRlKCBvYmplY3QgKToKKwkiIiIKKwlUaGlzIGNsYXNzIGxldHMg eW91IGRvIHZhcmlvdXMgYmluZHMgYW5kIHNldHMgYW5kIHRoZW4gKHRoZSBr ZXkpIHJldmVydAorCVRGJ3MgY29uZmlndXJhdGlvbiB0byB1bmRvIHRoZSBj aGFuZ2VzIHlvdSBtYWRlLgorCSIiIgorCisJZGVmIF9faW5pdF9fKCBzZWxm ICk6CisJCXNlbGYubG9zZV9jaGFuZ2VzKCkKKworCWRlZiBzZXR2YXIoIHNl bGYsIHZhciwgdmFsdWUgKToKKwkJIiIiCisJCW9sZCA9IFN0YXRlLnNldHZh ciggPHZhcj4sIDx2YWx1ZT4gKQorCQkKKwkJc2V0IFRGIHZhcmlhYmxlIDx2 YXI+IHRvIDx2YWx1ZT4sIHJldHVybnMgdGhlIG9sZCB2YWx1ZS4KKwkJU2F2 ZXMgdGhlIG9sZCB2YWx1ZSBmb3Igd2hlbiByZXZlcnRpbmcgU3RhdGUuCisJ CSIiIgorCQlvbGQgPSB0Zi5nZXR2YXIoIHZhciApCisJCXRmLmV2YWwoICIv c2V0ICVzPSVzIiAlICggdmFyLCB2YWx1ZSApICkKKwkJaWYgbm90IHZhciBp biBzZWxmLm9sZHZhcjoKKwkJCXNlbGYub2xkdmFyWyB2YXIgXSA9IG9sZAor CQlyZXR1cm4gb2xkCisKKwlkZWYgZGVmaW5lKCBzZWxmLCBuYW1lPSIiLCBi b2R5PSIiLCBmbGFncz0iIiApOgorCQkiIiIKKwkJbiA9IFN0YXRlLmRlZmlu ZSggbmFtZT0nPG5hbWU+JywgYm9keT0nPGJvZHk+JywgZmxhZ3M9JzxmbGFn cz4nICkKKworCQlBZGRzIGEgbmV3IC9kZWYsIHJldHVybnMgdGhlIG51bWJl ciBvZiB0aGUgbmV3IC9kZWYuIEFsbCBhcmdzIG9wdGlvbmFsLgorCQlTYXZl cyB0aGUgb2xkIHZhbHVlIG9mIG5hbWVkIC9kZWYgaWYgaXQgZXhpc3RzLCBm b3IgcmV2ZXJ0aW5nIFN0YXRlLgorCisJCU5vdCBuYW1lZCBkZWYoKSBiZWNh dXNlIHRoYXQncyBhIFB5dGhvbiBrZXl3b3JkLgorCQkiIiIKKworIAkJaWYg bmFtZSBhbmQgbm90IG5hbWUgaW4gc2VsZi5vbGRkZWY6CisJCQl4ID0gc2Ny ZWVuc2NyYXBlKCAiL2xpc3QgLWkgLW1zaW1wbGUgJXMiICUgbmFtZSApCisJ CQlpZiB4OgorCQkJCXNlbGYub2xkZGVmW25hbWVdID0geFswXQorCisJCWlm IGZsYWdzIGFuZCBub3QgZmxhZ3Muc3RhcnRzd2l0aCgiLSIpOgorCQkJZmxh Z3MgPSAiLSIrZmxhZ3MKKworCQluID0gdGYuZXZhbCggIi9kZWYgJXMgJXMg PSAlcyIgJSAoIGZsYWdzLCBuYW1lLCBldmFsX2VzY2FwZShib2R5KSApICkK KwkJc2VsZi5uZXdkZWYuYXBwZW5kKCBuICkKKwkJCisJCXJldHVybiBuCisK KwlkZWYgYmluZCggc2VsZiwga2V5LCBib2R5PSIiLCBmbGFncz0iIiApOgor CQkiIiIKKwkJbiA9IFN0YXRlLmJpbmQoIGtleT0nPGtleT4nLCBib2R5PSc8 Ym9keT4nLCBmbGFncz0nPGZsYWdzPicgKQorCisJCUNyZWF0ZSBhIG5ldyBr ZXkgYmluZGluZyBmb3IgPGtleT4uIFJldHVybnMgdGhlIG51bWJlciBvZiB0 aGUgbmV3IC9kZWYuCisJCUJvZHkgYW5kIGZsYWdzIGFyZSBvcHRpb25hbC4g U2F2ZXMgb2xkIGJpbmRpbmcgZm9yIHJldmVydGluZyBTdGF0ZS4KKwkJIiIi CisKKwkJaWYgbm90IGtleToKKwkJCXJhaXNlIEV4Y2VwdGlvbiggInRmdXRp bC5iaW5kOiBlbXB0eSBrZXkgbmFtZSIgKQorCQkKKwkJaWYgbm90IGtleSBp biBzZWxmLm9sZGtleToKKwkJCXggPSBzY3JlZW5zY3JhcGUoICIvbGlzdCAt aSAtbXNpbXBsZSAtYiclcyciICUga2V5ICkKKwkJCWlmIHg6CisJCQkJc2Vs Zi5vbGRrZXlba2V5XSA9IHhbMF0KKworCQlpZiBmbGFncyBhbmQgbm90IGZs YWdzLnN0YXJ0c3dpdGgoIi0iKToKKwkJCWZsYWdzID0gIi0iK2ZsYWdzCisJ CWtleSA9ICItYiclcyciICUga2V5LnN0cmlwKCInIikKKworCQluID0gdGYu ZXZhbCggIi9kZWYgJXMgJXMgPSAlcyIgJSAoIGZsYWdzLCBrZXksIGV2YWxf ZXNjYXBlKGJvZHkpICkgKQorCQlzZWxmLm5ld2tleS5hcHBlbmQoIG4gKQor CQkKKwkJcmV0dXJuIG4KKworCWRlZiBzdGF0dXMoIHNlbGYsIGFyZ3N0ciAp OgorCQkjIHNhdmUgY3VycmVudCBmaWVsZHMKKwkJaWYgbm90IHNlbGYuc3Rh dHVzX3NhdmVkOgorCQkJdGYuZXZhbCggIi9zdGF0dXNfc2F2ZSBfdGY0c3Rh dHVzIiApCisJCQlzZWxmLnN0YXR1c19zYXZlZCA9IFRydWUKKworCQlpZiBu b3QgYXJnc3RyLnN0YXJ0c3dpdGgoIi8iKToKKwkJCWFyZ3N0ciA9ICIvc3Rh dHVzXyIrYXJnc3RyCisJCXRmLmV2YWwoIGFyZ3N0ciApCisJCQorCisJZGVm IGxvc2VfY2hhbmdlcyggc2VsZiApOgorCQkiIiIKKwkJTG9zZSB0cmFjayBv ZiBhbGwgdGhlIGNoYW5nZXMgeW91J3ZlIG1hZGUgc2luY2UgY3JlYXRpbmcg dGhpcyBvYmplY3QuCisJCSIiIgorCQlzZWxmLm9sZHZhciA9IHt9ICAgICMg eyA8bmFtZT4gOiA8b2xkdmFsdWU+IH0KKwkJc2VsZi5vbGRkZWYgPSB7fSAg ICAjIHsgPG5hbWU+IDogPG9sZHZhbHVlPiB9CisJCXNlbGYubmV3ZGVmID0g W10gICAgIyBbIDxuPiBdCisJCXNlbGYub2xka2V5ID0ge30gICAgIyB7IDxr ZXk+ICA6IDxvbGR2YWx1ZT4gfQorCQlzZWxmLm5ld2tleSA9IFtdICAgICMg WyA8bj4gXQorCQlzZWxmLnN0YXR1c19zYXZlZCA9IEZhbHNlCisKKwlkZWYg cmV2ZXJ0KCBzZWxmICk6CisJCSIiIgorCQlSZXZlcnQgdG8gcHJldmlvdXMg c3RhdGUgLSB0aGlzIHdpbGwgdW5kbyBhbGwgdGhlIHNldHZhcigpLCBkZWZp bmUoKSwgYW5kCisJCWJpbmQoKXMgeW91J3ZlIGRvbmUuCisJCSIiIgorCisJ CSMgdmFyaWFibGVzIGFyZSBlYXN5CisJCWZvciB2YXIsIHZhbHVlIGluIHNl bGYub2xkdmFyLml0ZW1zKCk6CisJCQl0Zi5ldmFsKCAiL3NldCAlcz0lcyIg JSAoIHZhciwgdmFsdWUgKSApCisKKwkJIyBnZXQgcmlkIG9mIG91ciBuZXcg ZGVmaW5pdGlvbnMKKwkJaWYgc2VsZi5uZXdkZWY6CisJCQl0Zi5ldmFsKCAi L3VuZGVmbiAlcyIgJSAiICIuam9pbiggWyBzdHIobikgZm9yIG4gaW4gc2Vs Zi5uZXdkZWYgXSApICkKKwkJIyByZXN0b3JlIHRoZSBvbGQgb25lcworCQlm b3IgbmFtZSwgb2xkZGVmIGluIHNlbGYub2xkZGVmLml0ZW1zKCk6CisJCQkj ICclIDgyOTogL2RlZiAtcDIgYmxhaD0gIGJsYWgnCisJCQl0Zi5ldmFsKCBl dmFsX2VzY2FwZSggb2xkZGVmLnNwbGl0KCAiOiIsIDEgKVsxXS5sc3RyaXAo KSApICkKKworCQkjIGdldCByaWQgb2Ygb3VyIG5ldyBiaW5kaW5ncworCQlp ZiBzZWxmLm5ld2tleToKKwkJCXRmLmV2YWwoICIvdW5kZWZuICVzIiAlICIg Ii5qb2luKCBbIHN0cihuKSBmb3IgbiBpbiBzZWxmLm5ld2tleSBdICkgKQor CQkjIHJlc3RvcmUgdGhlIG9sZCBvbmVzCisJCWZvciBuYW1lLCBvbGRrZXkg aW4gc2VsZi5vbGRrZXkuaXRlbXMoKToKKwkJCXRmLmV2YWwoIGV2YWxfZXNj YXBlKCBvbGRkZWYuc3BsaXQoICI6IiwgMSApWzFdLmxzdHJpcCgpICkgKQor CisJCSMgcmV2ZXJ0IHN0YXR1cyBsaW5lCisJCWlmIHNlbGYuc3RhdHVzX3Nh dmVkOgorCQkJdGYuZXZhbCggIi9zdGF0dXNfcmVzdG9yZSBfdGY0c3RhdHVz IiApCisJCQorCQkjIG5vdyBmb3JnZXQgYWxsIG91ciBjaGFuZ2VzCisJCXNl bGYubG9zZV9jaGFuZ2VzKCkKKworIyBXZSBuZWVkIHRoaXMgZm9yIHRoZSBz Y3JlZW5zY3JhcGUgaG9vawordGYuZXZhbCggIi9weXRob25fbG9hZCB0ZnV0 aWwiICkKKworCmRpZmYgLXJOdSAteCAuc3ZuIC14IGNvbmZpZy5sb2cgLXgg Y29uZmlnLnN0YXR1cyAteCB0Zi1oZWxwIC14IE1ha2VmaWxlIC14IGNoYXJ0 YWJsZXMuYyAteCB0ZmNvbmZpZy5oIC14IHRmZGVmcy5oIC14ICcqLmJ1aWxk JyAteCAnKi5iYWsnIC14ICcqLmlkeCcgLXggJyoubycgLXggJyoucHljJyAt eCBodG1sMnRmIC14IGRlZmF1bHQgLXggbWFrZWhlbHAgLXggdGYgLXggZGZ0 YWJsZXMgLXggJ2xpYnBjcmUqJyAteCBodG1sMnRpZiB0Zi01MGI4LWNsZWFu L3RmLWxpYi91cmx3YXRjaC5weSB0Zi01MGI4LXB5L3RmLWxpYi91cmx3YXRj aC5weQotLS0gdGYtNTBiOC1jbGVhbi90Zi1saWIvdXJsd2F0Y2gucHkJMTk2 OS0xMi0zMSAxNjowMDowMC4wMDAwMDAwMDAgLTA4MDAKKysrIHRmLTUwYjgt cHkvdGYtbGliL3VybHdhdGNoLnB5CTIwMDgtMDEtMTEgMTU6MTY6MzMuMDAw MDAwMDAwIC0wODAwCkBAIC0wLDAgKzEsMTY0IEBACisjLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tCisjIFB5dGhvbiBVUkwgV2F0Y2hlciB2Mi4w MCAtIEJ5IFZhc2hAQW5pbWVNVUNLICggc2l6ZXJAc2FuLnJyLmNvbSApCisj CisjICAgIERpc3RyaWJ1dGUgYXQgd2lsbCEgVGhvdWdoIEknZCBsaWtlIHRv IGhlYXIgb2YgaW1wcm92ZW1lbnRzLgorIworIyBUaGlzIGlzIGZvcm1hdHRl ZCBmb3IgNC1zcGFjZSB0YWJzLgorIworIyBUaGlzIHdpbGwgd2F0Y2ggeW91 ciB3b3JsZHMgYW5kIHdyaXRlIGFuIGh0bWwgZmlsZSB3aXRoIHRoZSB1cmxz IGl0IHNlZXMKKyMgZ28gYnkuIFRoZW4geW91IGNhbiBwb2ludCB5b3VyIGJy b3dzZXIgYXQgdGhlIGZpbGUgYW5kIGxhdW5jaCB0aGUgdXJscworIyBmcm9t IHRoZXJlLiBJdCBwdXRzIHRoZSBuZXdlc3QgdXJscyBhdCB0aGUgdG9wLgor IworIyBUSElTIFJFUVVJUkVTIFRIRSBURjUgUFlUSE9OIFBBVENIIGZyb20g aHR0cDovL3NpemVyOTkuY29tL3RmcHl0aG9uLworIworIyAtLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgLS0gSU5TVEFMTAorIyAtIFNldCB0 aGUgQ09ORklHIHZhcmlhYmxlcyBqdXN0IGJlbG93LgorIyAtIGluIHlvdXIg LnRmcmMgZmlsZSBwdXQgYQorIyAgICAgICAvcHl0aG9uX2xvYWQgL3BhdGgv dG8vdXJsd2F0Y2gucHkKKyMgLSBhbmQgb3B0aW9uYWxseSBkbyBhCisjICAg ICAgIC9weXRob25fY2FsbCB1cmx3YXRjaC5jb25maWcgZmlsZT0vdG1wL3Rm dXJscy5odG1sCisjICAgaWYgeW91IHdhbnQgdG8gb3ZlcnJpZGUgd2hlcmUg dGhlIGh0bWwgZmlsZSBpcyB3cml0dGVuCisjIC0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLQorIyAtLSBWRVJTSU9OUworIyAtIFYgMi4wMCAtIEph biAwOSAnMDggLSBDb252ZXJ0IHRvIHB5dGhvbiBmcm9tIHRmc2NyaXB0Cisj IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisjIC0tIENPTkZJ R1VSQVRJT04KKworIyBZb3UgY2FuIHVzZSAnL3B5dGhvbl9jYWxsIHVybHdh dGNoLmNvbmZpZyA8a2V5Pj08dmFsdWU+JyB0byBjaGFuZ2UgYW55IG9mCisj IHRoZXNlIGlzIHdlbGwgLSBidXQgaXQgd29uJ3QgZG8gYW55IGVycm9yIGNo ZWNraW5nLgorCitDT05GSUcgPSB7CisKKwkjIFRoaXMgaXMgdGhlIGZpbGUg d2hpY2ggZ2V0cyB3cml0dGVuIGFuZCB5b3UgbmVlZCB0byB2aWV3IGluIHlv dXIgYnJvd3Nlci4KKwkjICBJbiBGaXJlZm94LCBGaWxlIC0+IE9wZW4gRmls ZS4uLiwgaW4gSUUsICBGaWxlIC0+IE9wZW4gLT4gQnJvd3NlCisJJ2ZpbGUn OgkJJy90bXAvdGZ1cmxzLmh0bWwnLAorCisJIyBjaGFuZ2UgdGFyZ2V0IHRv ICcnIGlmIHlvdSBkb24ndCB3YW50IHVybHMgb3BlbmluZyBpbiBhIG5ldyB3 aW5kb3cvdGFiCisJJ3RhcmdldCc6CSdfYmxhbmsnLAorCisJIyBUaXRsZSBm b3IgdGhlIGJyb3dzZXIgdGl0bGUgYmFyL3RhYiB0aXRsZQorCSd0aXRsZSc6 CSdUaW55RnVndWUgVVJMcycsCisKKwkjIERlZmluZSB5b3VyIG93biBzdHls ZSBzaGVldCBpbmZvIGhlcmUKKwknY3NzJzoJCSIiIgordGQgeyBwYWRkaW5n OiAwLjVlbSAxZW07IH0KKy5vZGQgeyBiYWNrZ3JvdW5kOiAjZjBmZmYwOyB9 CisuZXZlbiB7IGJhY2tncm91bmQ6ICNmMGYwZmY7IH0KKyIiIiwKKworCSMg SG93IG1hbnkgdXJscyB5b3Ugd2FudCB0byBzYXZlIGZvciB0aGUgcGFnZSwg ZGVmYXVsdCAyMAorCSdtYXgnOgkJMjAsCisKKwkjIEhvdyBvZnRlbiB5b3Ug d2FudCB0aGUgcGFnZSB0byBhdXRvLXJlbG9hZCwgaW4gc2Vjb25kcyAob3Ig MCBmb3Igbm90KQorCSdyZWxvYWQnOgkzMCwKKworCSMgYW55dGhpbmcgZWxz ZSB5b3Ugd2FudCBiZWZvcmUgdGhlIHRhYmxlIG9mIHVybHMKKwknaGVhZGVy JzoJJzxhIGhyZWY9ImphdmFzY3JpcHQ6d2luZG93LmxvY2F0aW9uLnJlbG9h ZCgpIiBjbGFzcz0icmVsb2FkIj5yZWxvYWQgcGFnZTwvYT4nLAorfQorCisj IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBCZWxvdyBoZXJl IGlzIHRoZSBhY3R1YWwgY29kZQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0KKworIyByZWdleHAgZm9yIG1hdGNoaW5nCitpbXBvcnQgcmUs IGNnaSwgdGYKK1BBVFRFUk4gPSByJyhodHRwfGZ0cHxodHRwcyk6Ly9cUytb MC05QS1aYS16L10nCitDUEFUVEVSTiA9IHJlLmNvbXBpbGUoIFBBVFRFUk4g KQorCisjIG91ciBsaXN0IG9mIHVybHMgLSBlYWNoIFVSTCBpcyAoIHdvcmxk LCB0ZXh0ICkKK1VSTFMgPSBbXQorCitkZWYgdHJpZ2dlciggYXJnICk6CisJ IkNhbGxlZCBmcm9tIG91ciB0aW55ZnVndWUgdHJpZ2dlciB0byBkbyB0aGUg cmVhbCB3b3JrIgorCisJIyBwYXJzZSB0aGUgcmVzdCBhcyBsb25nIGFzIHdl IGtlZXAgZmluZGluZyB1cmxzCisJbGluZSA9IGFyZworCW91dHB1dD1bXQor CXdoaWxlIFRydWU6CisJCWZvdW5kID0gQ1BBVFRFUk4uc2VhcmNoKCBsaW5l ICkKKwkJaWYgbm90IGZvdW5kOiBicmVhaworCQlzdGFydCwgZW5kID0gZm91 bmQuc3BhbigpCisJCXVybCA9IGNnaS5lc2NhcGUoIGxpbmVbc3RhcnQ6ZW5k XSApCisJCW91dHB1dC5hcHBlbmQoIGNnaS5lc2NhcGUoIGxpbmVbOnN0YXJ0 XSApICkKKwkJb3V0cHV0LmFwcGVuZCggJzxhIGhyZWY9IiVzIiAlcz4lczwv YT4nICUgKCB1cmwsIENPTkZJR1sndGFyZ2V0J10sIHVybCApICkKKwkJbGlu ZSA9IGxpbmVbZW5kOl0KKwkjIGFkZCB0aGUgcmVtYWluaW5nIHRvIHRoZSBl bmQKKwlpZiBsaW5lOgorCQlvdXRwdXQuYXBwZW5kKCBjZ2kuZXNjYXBlKCBs aW5lICkgKQorCisJIyBhZGQgdGhlIG91dHB1dCB0byB0aGUgVVJMUywgdGhl biB0cnVuY2F0ZSB0aGUgbGlzdAorCWdsb2JhbCBVUkxTCisJVVJMUy5hcHBl bmQoICggdGYud29ybGQoKSwgIiIuam9pbiggb3V0cHV0ICkgKSApCisJVVJM UyA9IFVSTFNbIDpDT05GSUdbJ21heCddIF0KKworCSMgZmluYWxseSwgd3Jp dGUgdGhlIGZpbGUKKwl3cml0ZV9maWxlKCkKKworZGVmIHdyaXRlX2ZpbGUo ICk6CisJIldyaXRlIHRoZSBmaWxlIHVzaW5nIHRoZSBrbm93biBVUkwgZW50 cmllcyIKKworCWYgPSBvcGVuKCBDT05GSUdbJ2ZpbGUnXSwgJ3d0JyApCisJ Zi53cml0ZSggJzxoZWFkPjx0aXRsZT4lczwvdGl0bGU+XG4nICUgQ09ORklH LmdldCgndGl0bGUnKSApCisJaWYgQ09ORklHLmdldCggJ3JlbG9hZCcgKToK KwkJZi53cml0ZSggJzxtZXRhIGh0dHAtZXF1aXY9InJlZnJlc2giIGNvbnRl bnQ9IiVzIiAvPicgJSBDT05GSUdbJ3JlbG9hZCddICkKKwlpZiBDT05GSUcu Z2V0KCAnY3NzJyApOgorCQlmLndyaXRlKCAnPHN0eWxlIHR5cGU9InRleHQv Y3NzIj4lczwvc3R5bGU+XG4nICUgQ09ORklHWydjc3MnXSApCisJZi53cml0 ZSggJzwvaGVhZD48Ym9keT5cbicgKQorCWYud3JpdGUoIENPTkZJRy5nZXQo ICdoZWFkZXInLCAnJyApICkKKworCSMgd3JpdGUgZWFjaCBVUkwKKwlpZiBV UkxTOgorCQlmLndyaXRlKCAnPHRhYmxlPlxuJyApCisJCW9kZCA9IFRydWUK KwkJZm9yIHdvcmxkLCB1cmwgaW4gcmV2ZXJzZWQoIFVSTFMgKToKKwkJCWNs YXNzbmFtZSA9IG9kZCBhbmQgIm9kZCIgb3IgImV2ZW4iCisJCQlvZGQgPSBu b3Qgb2RkCisJCQlmLndyaXRlKCAnICA8dHIgY2xhc3M9IiVzIj48dGQ+JXM8 L3RkPjx0ZD4lczwvdGQ+PC90cj5cbicgJSAoIGNsYXNzbmFtZSwgd29ybGQs IHVybCApICkKKwkJZi53cml0ZSggJzwvdGFibGU+XG4nICkKKwllbHNlOgor CQlmLndyaXRlKCAiPGJyLz5ObyBVUkxzIGNhdWdodCB5ZXQuPGJyLz5cbiIg KQorCWYud3JpdGUoICc8L2JvZHk+XG4nICkKKwkJCisJZi5jbG9zZSgpCisJ CQorCitkZWYgY29uZmlnX21hc3NhZ2UoKToKKyAgICAJIkRvIGEgbGl0dGxl IENPTkZJRyBmaXh1cC4iCisJaWYgQ09ORklHLmdldCgndGFyZ2V0Jyk6CisJ CUNPTkZJR1sndGFyZ2V0J10gPSAndGFyZ2V0PSIlcyInICUgQ09ORklHWyd0 YXJnZXQnXQorCWVsc2U6CisJCUNPTkZJR1sndGFyZ2V0J10gPSAnJworCisJ dHJ5OgorICAgICAgICAgICAgICAgIENPTkZJR1snbWF4J10gPSBpbnQoIENP TkZJR1snbWF4J10gKQorCWV4Y2VwdDoKKwkJQ09ORklHWydtYXgnXSA9IDIw CisKKyMgWW91IGNvdWxkIGFsc28ganVzdCBkbyB0aGlzIHdpdGgKKyMgICAg IC9weXRob24gdXJsd2F0Y2guQ09ORklHWydmaWxlJ109J3ZhbHVlJworIyBi dXQgdGhhdCBzZWVtcyBhIGxpdHRsZSB0b28gZmluZ2Vycy1pbi1waWVzCitk ZWYgY29uZmlnKCBrZXl2YWwgKToKKwlpZiAnPScgaW4ga2V5dmFsOgorCQlr ZXksIHZhbCA9IGtleXZhbC5zcGxpdCggJz0nLCAxKQorCQlDT05GSUdbIGtl eSBdID0gdmFsCisJCWNvbmZpZ19tYXNzYWdlKCkKKwllbHNlOgorCQl0Zi5l Y2hvKCAidXNlOiAvcHl0aG9uX2NhbGwgdXJsd2F0Y2guY29uZmlnIDxrZXk+ PTx2YWx1ZT4iICkKKwkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tCisjIEluaXRpYWxpemF0aW9uCQorIyAtLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0KKworIyBEbyBzb21lIENPTkZJRyBtYXNzYWdpbmcKK2Nv bmZpZ19tYXNzYWdlKCkKKwkKKyMgY3JlYXRlIHRoZSB0cmlnZ2VyCit0Zi5l dmFsKCAiL2RlZiAtbXJlZ2V4cCAtcDkgLUYgLXEgLXQlcyB1cmx3YXRjaCA9 IC9weXRob25fY2FsbCB1cmx3YXRjaC50cmlnZ2VyIFxcJSUqIiAlCisJCSBQ QVRURVJOLnJlcGxhY2UoJy8vJywnLy8vJykucmVwbGFjZSgnXFwnLCdcXFxc JykKKwkJICkKKworIyB3cml0ZSBhbiBlbXB0eSBmaWxlIHNvIHRoZXJlJ3Mg YXQgbGVhc3Qgc29tZXRoaW5nIHRoZXJlCit3cml0ZV9maWxlKCkKKwpkaWZm IC1yTnUgLXggLnN2biAteCBjb25maWcubG9nIC14IGNvbmZpZy5zdGF0dXMg LXggdGYtaGVscCAteCBNYWtlZmlsZSAteCBjaGFydGFibGVzLmMgLXggdGZj b25maWcuaCAteCB0ZmRlZnMuaCAteCAnKi5idWlsZCcgLXggJyouYmFrJyAt eCAnKi5pZHgnIC14ICcqLm8nIC14ICcqLnB5YycgLXggaHRtbDJ0ZiAteCBk ZWZhdWx0IC14IG1ha2VoZWxwIC14IHRmIC14IGRmdGFibGVzIC14ICdsaWJw Y3JlKicgLXggaHRtbDJ0aWYgdGYtNTBiOC1jbGVhbi8udGZyYyB0Zi01MGI4 LXB5Ly50ZnJjCi0tLSB0Zi01MGI4LWNsZWFuLy50ZnJjCTE5NjktMTItMzEg MTY6MDA6MDAuMDAwMDAwMDAwIC0wODAwCisrKyB0Zi01MGI4LXB5Ly50ZnJj CTIwMDgtMDEtMjUgMjI6MTY6MTQuMDAwMDAwMDAwIC0wODAwCkBAIC0wLDAg KzEsMjggQEAKKy9weXRob24gc3lzLnN0ZG91dC5vdXRwdXQ9dGYub3V0Cisv YWRkd29ybGQgX2R1bW15IGxvY2FsaG9zdCA5OTk5CisvYWRkd29ybGQgTDEg bG9jYWxob3N0IDIwMzUKKy9hZGR3b3JsZCBMMiBsb2NhbGhvc3QgMjAzNQor L2FkZHdvcmxkIC14IC1UdGlueS5tdWNrIEZTYSBTYXJ1c2Egd3ViYmEgbXVj ay5mdXJyeS5jb20gODg5OQorL2RlZiBjb249L2Nvbm5lY3QgJXsqfQorCisv ZGVmIC1QQ2N5YW4gLXQnXig9PSApJworL2RlZiAtUENjeWFuIC10J15cW1sw LTldKjpbMC05XSpbYXBdbVxdJworL2RlZiAtUEJDbWFnZW50YSAtdCdeXCNc IyAnCisvZGVmIC1wOSAtUDBCQ2dyZWVuIC10J1Zhc2gnIC1GIF9oaXZhc2gK Ky9kZWYgLXA5IC1QMGhCQ2dyZWVuIC10J1NhcnVzYScgLUYgX2hpc2FydXNh CisKKzsgU2NyZWFtIENoYW5uZWxzCisvZGVmIC1wMiAtYUNtYWdlbnRhIC1t Z2xvYiAtdCdcW3B1YmxpY1w6KlxdKicgX2hpcHVibGljCisvZGVmIC1wMiAt YWhDbWFnZW50YSAtbWdsb2IgLXQnXFtwdWJcOipcXSonIF9oaXB1YgorL2Rl ZiAtcDIgLWFCaENyZWQgLW1nbG9iIC10J1xbcGVhbnV0XDoqXF0qJyBfaGlw ZWFudXQKKy9kZWYgLXAyIC1haEJDY3lhbiAtbWdsb2IgLXQnXFt1bml4Z2Vl a3NcOipcXSonIF9oaXVuaXgKKy9kZWYgLXAyIC1haEJDZ3JlZW4gLW1nbG9i IC10J1xbcHJvZ3JhbW1lcnNcOipcXSonIF9oaXByb2cKKy9kZWYgLXAyIC1h aEJDZ3JlZW4gLW1nbG9iIC10J1xbY2x1XDoqXF0qJyBfaGljbHUKKy9kZWYg LXAyIC1haEJDZ3JlZW4gLW1nbG9iIC10J1xbZmI2XDoqXF0qJyBfaGlmYjYK Ky9kZWYgLXAyIC1haEJDcmVkIC1tZ2xvYiAtdCdcW2dhbWVyc1w6KlxdKicg X2hpZ2FtZXJzCisvZGVmIC1wMiAtYUN5ZWxsb3cgLW1nbG9iIC10J1xbZ2Ft ZXJcOipcXSonIF9oaWdhbWVyCisvZGVmIC1wMiAtYWhCQ3llbGxvdyAtbWds b2IgLXQnXFtiYWZ1clw6KlxdKicgX2hpYmEKKy9kZWYgLXAyIC1haEJDZ3Jl ZW4gLW1nbG9iIC10J1xbd2luZG93c2hlbHBcOipcXSonIF9oaXdpbgorL2Rl ZiAtcDIgLWFoQkNjeWFuIC1tZ2xvYiAtdCdcW0dQQ2hhdFw6KlxdKicgX2hp Z3AKKworL3B5dGhvbl9sb2FkIHRmNAo= --001485eba798f6513604933056d1 Content-Type: text/plain; charset=us-ascii -- Problem reports: http://cygwin.com/problems.html FAQ: http://cygwin.com/faq/ Documentation: http://cygwin.com/docs.html Unsubscribe info: http://cygwin.com/ml/#unsubscribe-simple --001485eba798f6513604933056d1--