Mail Archives: cygwin/2010/10/22/04:22:46
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: | <AANLkTincRaGyPuUmm5x5jXuL3sNLTa3N32ST_7BB=Qzw@mail.gmail.com>
|
References: | <AANLkTikYLWCqgX1tTwApb49wdn_tv_6pjWP6HR9upsPK AT mail DOT gmail DOT com> <AANLkTincRaGyPuUmm5x5jXuL3sNLTa3N32ST_7BB=Qzw AT mail DOT gmail DOT com>
|
From: | Gwen Morse <gwen DOT morse AT gmail DOT com>
|
Date: | Fri, 22 Oct 2010 04:21:53 -0400
|
Message-ID: | <AANLkTinKikCdwJV5dN__x61g+wj36EX5dhvcJqbSdWR8@mail.gmail.com>
|
Subject: | Re: tinyfugue with python won't compile under cygwin (1.7.7) on Windows XP
|
To: | cygwin AT cygwin DOT com
|
X-IsSubscribed: | yes
|
Mailing-List: | contact cygwin-help AT cygwin DOT com; run by ezmlm
|
List-Id: | <cygwin.cygwin.com>
|
List-Unsubscribe: | <mailto:cygwin-unsubscribe-archive-cygwin=delorie DOT com AT cygwin DOT com>
|
List-Subscribe: | <mailto:cygwin-subscribe AT cygwin DOT com>
|
List-Archive: | <http://sourceware.org/ml/cygwin/>
|
List-Post: | <mailto:cygwin AT cygwin DOT com>
|
List-Help: | <mailto:cygwin-help AT cygwin DOT com>, <http://sourceware.org/ml/#faqs>
|
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--
- Raw text -