Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1vWR85-0016Tw-1G for pgsql-hackers@arkaria.postgresql.org; Fri, 19 Dec 2025 03:26:10 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1vWR84-005jFU-00 for pgsql-hackers@arkaria.postgresql.org; Fri, 19 Dec 2025 03:26:08 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1vWR83-005jFM-1p for pgsql-hackers@lists.postgresql.org; Fri, 19 Dec 2025 03:26:08 +0000 Received: from mail-lf1-x12a.google.com ([2a00:1450:4864:20::12a]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.96) (envelope-from ) id 1vWR81-001WpJ-2H for pgsql-hackers@lists.postgresql.org; Fri, 19 Dec 2025 03:26:08 +0000 Received: by mail-lf1-x12a.google.com with SMTP id 2adb3069b0e04-598eaafa587so1450472e87.3 for ; Thu, 18 Dec 2025 19:26:05 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1766114763; x=1766719563; darn=lists.postgresql.org; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=MOqMqHpKZy+y8UTNed2fCjydyxfLhQ0s12lNHQxvAjE=; b=NZEOZJCstkLJDRmq0uXhEJGTm+uix1T4N8y6ICctpo584ZtKdJF/oQBcp/X73pyGlo CC55ZD9bEVtr8TMn/r6zw/8O1urZB/Y8ks3N0yMRhwVMuzR+W6QSDkBtSc8Uea5MVQG5 ANYg70aq4BILwa9C5I3oHjHk3Qu/Vxk3ubmLSr6J7rJDgE2F8ZV5QQ6lThyseXN0EpBW fz74Kl8HyC4LHshw76EZK/qeyYsX8nX24EqYUgyN4ASo6BHfLiayajvEDZ2kqORbpp8b fYsIsdUeSU+dGPRc173rY+WAi7ToDhyXl5MQTcORhVntUmsR1HnPDEGv/XhPUiS3l/sN lHNg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1766114763; x=1766719563; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-gg:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=MOqMqHpKZy+y8UTNed2fCjydyxfLhQ0s12lNHQxvAjE=; b=s+b5JHcffUG3P6VYvUNRPg0krbbBitWT9HAOFJEyDb1pqzzHbfvos7UlphtyKSgg7H KhIuspPfep2225cTSwXeyK06skA355nOmyfHuNAx5HNlgaAh6/vv7JXMhMZYTpVTHI7F HPaJklzJRwYm19HqEg++sgNtIPwO40M1+t5d3hPpNYMB4vkCvDiN1MvvWCn7Qnamho/p a5eMKr5E5FJUGeWv3eBlUPmHSN9mShxmyE5CNK5OA35G6ApGpZulQeKY0irAoMtKKJ08 AMAh4fzu9HFY2FKP5v3BN+Ns7+nE3YG8ztYUveVB67om0ilBNbAYfifbvX9s3tyZrVgR JUUg== X-Gm-Message-State: AOJu0YwwDvhR2P6tz3JJxcywu+UzowbIkBJ5XwkUFzYm0V5DB6nqGmE8 /yht1PvzRed+oEDM+FnUqnRJvVEDpnKtXzXaR4LlZ1E4l1fm+CXSQajqNNWnq9ldsKtQiLrCx6A unxMzWFgxGPCT/6Fm6PavQJ/yAA7hfOY= X-Gm-Gg: AY/fxX5SPP/PNAGRUobBIAVEa439ywV6RtBvHMp9FCPx0CsmlAq7aYiKK5/FXAeWr2W VzZfsxYOyS0dqHf4hlzpUi3AVmBUzo5g3D8CQTs+YhZRayqHoX9J954tglbvBImEfmkE/rlQE1/ KB1xIvecMhonkx2vG7SPhwDIbDS+bBKfWFuqC1syYlAIaf/AC5MW/MChW6qDOCwjsDbRvUlKDPN 6Vya27YNWsmkKC0d+N5uiMTEsZszoNvrQsFs8NUQOwNk/lQVPksHQITjAg96dBbbr//8caBuWKY FZbRzUiEku3uWqB9vvDjdYXSM+k8 X-Google-Smtp-Source: AGHT+IGQ3rfXgtSZ/+36zvW5tV1Qo9NUDjFNuz7Y1GDmDVYeaWftuUNiuU5RtAH53v+FYnfDCqmwcZfGVssc79JSP9Q= X-Received: by 2002:a05:6512:3b0d:b0:57d:1082:e103 with SMTP id 2adb3069b0e04-59a17d8d08dmr543985e87.16.1766114762926; Thu, 18 Dec 2025 19:26:02 -0800 (PST) MIME-Version: 1.0 References: In-Reply-To: From: Marcos Magueta Date: Fri, 19 Dec 2025 00:25:51 -0300 X-Gm-Features: AQt7F2ouKgCGV7lvje38H7ksv_ACgWdjD4ywAM9jNUA3BJWOWVb7wBVXAySYxTc Message-ID: Subject: Re: WIP - xmlvalidate implementation from TODO list To: Kirill Reshke Cc: pgsql-hackers@lists.postgresql.org Content-Type: multipart/mixed; boundary="00000000000013df16064645a3bd" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --00000000000013df16064645a3bd Content-Type: multipart/alternative; boundary="00000000000013df15064645a3bb" --00000000000013df15064645a3bb Content-Type: text/plain; charset="UTF-8" Hello again! I took some time to actually finish this feature. I think the answers for the previous questions are now clearer. I checked the initialization and the protections are indeed in place since commit a4b0c0aaf093a015bebe83a24c183e10a66c8c39, which specifically states: > Prevent access to external files/URLs via XML entity references. > xml_parse() would attempt to fetch external files or URLs as needed to > resolve DTD and entity references in an XML value, thus allowing > unprivileged database users to attempt to fetch data with the privileges > of the database server. While the external data wouldn't get returned > directly to the user, portions of it could be exposed in error messages > if the data didn't parse as valid XML; and in any case the mere ability > to check existence of a file might be useful to an attacker. > > The ideal solution to this would still allow fetching of references that > are listed in the host system's XML catalogs, so that documents can be > validated according to installed DTDs. However, doing that with the > available libxml2 APIs appears complex and error-prone, so we're not going > to risk it in a security patch that necessarily hasn't gotten wide review. > So this patch merely shuts off all access, causing any external fetch to > silently expand to an empty string. A future patch may improve this. With that, the obvious affordance on the xmlvalidate implementation was to not rely on external schema sources on the host catalog. Therefore the implementation relies solely on expressions that necessarily evaluate to a schema in plain text. I added the requested documentation and a bunch of tests for each scenario. I would appreciate another round of reviews whenever someone has the time and patience. At last, to nourish the curiosity: I had issues with make check, as stated above on the e-mail thread. These got resolved when I changed `execl` to `execlp` on `pg_regress.c`. I of course did not commit such, but more people I know have had the very same issue while relying on immutable package managers. --00000000000013df15064645a3bb Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable
Hello again!

I took some time to actually finish th= is feature. I think the answers
for the previous questions are now clear= er. I checked the
initialization and the protections are indeed in place= since commit
a4b0c0aaf093a015bebe83a24c183e10a66c8c39, which specifical= ly states:

> Prevent access to external files/URLs via XML entity= references.

> xml_parse() would attempt to fetch external files = or URLs as needed to
> resolve DTD and entity references in an XML va= lue, thus allowing
> unprivileged database users to attempt to fetch = data with the privileges
> of the database server.=C2=A0 While the ex= ternal data wouldn't get returned
> directly to the user, portion= s of it could be exposed in error messages
> if the data didn't p= arse as valid XML; and in any case the mere ability
> to check existe= nce of a file might be useful to an attacker.
>
> The ideal so= lution to this would still allow fetching of references that
> are li= sted in the host system's XML catalogs, so that documents can be
>= ; validated according to installed DTDs.=C2=A0 However, doing that with the=
> available libxml2 APIs appears complex and error-prone, so we'= re not going
> to risk it in a security patch that necessarily hasn&#= 39;t gotten wide review.
> So this patch merely shuts off all access,= causing any external fetch to
> silently expand to an empty string.= =C2=A0 A future patch may improve this.

With that, the obvious affor= dance on the xmlvalidate implementation
was to not rely on external sche= ma sources on the host
catalog. Therefore the implementation relies sole= ly on expressions
that necessarily evaluate to a schema in plain text.
I added the requested documentation and a bunch of tests for each
= scenario. I would appreciate another round of reviews whenever someone
h= as the time and patience.

At last, to nourish the curiosity: I had i= ssues with make check, as
stated above on the e-mail thread. These got r= esolved when I changed
`execl` to `execlp` on `pg_regress.c`. I of cours= e did not commit
such, but more people I know have had the very same iss= ue while
relying on immutable package managers.
--00000000000013df15064645a3bb-- --00000000000013df16064645a3bd Content-Type: application/octet-stream; name="0001-full-xmlvalidate-text-schema-implementation.patch" Content-Disposition: attachment; filename="0001-full-xmlvalidate-text-schema-implementation.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mjcaio2z0 RnJvbSBmYjU2YzkwZGEzY2FiOWQ4NWUyZjYyNjJmZGFmMWYxNmQ1Nzc4ZDI4IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBNYXJjb3MgTWFndWV0YSA8bWFndWV0YW1hcmNvc0BnbWFpbC5j b20+CkRhdGU6IFRodSwgMTggRGVjIDIwMjUgMjM6MTc6MjYgLTAzMDAKU3ViamVjdDogW1BBVENI IDEvMV0gZnVsbCB4bWx2YWxpZGF0ZSB0ZXh0IHNjaGVtYSBpbXBsZW1lbnRhdGlvbgoKLS0tCiBk b2Mvc3JjL3NnbWwvZnVuYy9mdW5jLXhtbC5zZ21sICAgICAgIHwgMTE5ICsrKysrKysrKysrCiBz cmMvYmFja2VuZC9leGVjdXRvci9leGVjRXhwckludGVycC5jIHwgIDI0ICsrKwogc3JjL2JhY2tl bmQvbm9kZXMvbm9kZUZ1bmNzLmMgICAgICAgICB8ICAgMiArCiBzcmMvYmFja2VuZC9wYXJzZXIv Z3JhbS55ICAgICAgICAgICAgIHwgIDIxICstCiBzcmMvYmFja2VuZC9wYXJzZXIvcGFyc2VfZXhw ci5jICAgICAgIHwgICA4ICsKIHNyYy9iYWNrZW5kL3BhcnNlci9wYXJzZV90YXJnZXQuYyAgICAg fCAgIDMgKwogc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3J1bGV1dGlscy5jICAgICB8ICAxNiArLQog c3JjL2JhY2tlbmQvdXRpbHMvYWR0L3htbC5jICAgICAgICAgICB8IDEwOCArKysrKysrKystCiBz cmMvaW5jbHVkZS9ub2Rlcy9wcmltbm9kZXMuaCAgICAgICAgIHwgICAxICsKIHNyYy9pbmNsdWRl L3BhcnNlci9rd2xpc3QuaCAgICAgICAgICAgfCAgIDMgKwogc3JjL2luY2x1ZGUvdXRpbHMveG1s LmggICAgICAgICAgICAgICB8ICAgMSArCiBzcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3htbC5v dXQgICAgIHwgMjgwICsrKysrKysrKysrKysrKysrKysrKysrKysrCiBzcmMvdGVzdC9yZWdyZXNz L3NxbC94bWwuc3FsICAgICAgICAgIHwgMjE2ICsrKysrKysrKysrKysrKysrKysrCiAxMyBmaWxl cyBjaGFuZ2VkLCA3OTggaW5zZXJ0aW9ucygrKSwgNCBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQg YS9kb2Mvc3JjL3NnbWwvZnVuYy9mdW5jLXhtbC5zZ21sIGIvZG9jL3NyYy9zZ21sL2Z1bmMvZnVu Yy14bWwuc2dtbAppbmRleCA1MTFiYzkwODUyYS4uYjAyZGI2YzliNWIgMTAwNjQ0Ci0tLSBhL2Rv Yy9zcmMvc2dtbC9mdW5jL2Z1bmMteG1sLnNnbWwKKysrIGIvZG9jL3NyYy9zZ21sL2Z1bmMvZnVu Yy14bWwuc2dtbApAQCAtMTAxMCw2ICsxMDEwLDEyNSBAQCBTRUxFQ1QgeG1sdGFibGUuKgogXV0+ PC9zY3JlZW4+CiAgICAgPC9wYXJhPgogICAgPC9zZWN0Mz4KKworICAgPHNlY3QzIGlkPSJmdW5j dGlvbnMteG1sLXByb2Nlc3NpbmcteG1sdmFsaWRhdGUiPgorICAgIDx0aXRsZT48bGl0ZXJhbD54 bWx2YWxpZGF0ZTwvbGl0ZXJhbD48L3RpdGxlPgorCisgICAgPGluZGV4dGVybT4KKyAgICAgPHBy aW1hcnk+eG1sdmFsaWRhdGU8L3ByaW1hcnk+CisgICAgPC9pbmRleHRlcm0+CisKKzxzeW5vcHNp cz4KKzxmdW5jdGlvbj5YTUxWQUxJREFURTwvZnVuY3Rpb24+ICggezxsaXRlcmFsPkRPQ1VNRU5U PC9saXRlcmFsPnw8bGl0ZXJhbD5DT05URU5UPC9saXRlcmFsPn0gPHJlcGxhY2VhYmxlPnhtbF92 YWx1ZTwvcmVwbGFjZWFibGU+IDxsaXRlcmFsPkFDQ09SRElORyBUTyBYTUxTQ0hFTUE8L2xpdGVy YWw+IDxyZXBsYWNlYWJsZT5zY2hlbWFfdGV4dDwvcmVwbGFjZWFibGU+ICkgPHJldHVybnZhbHVl PmJvb2xlYW48L3JldHVybnZhbHVlPgorPC9zeW5vcHNpcz4KKworICAgIDxwYXJhPgorICAgICBU aGUgPGZ1bmN0aW9uPnhtbHZhbGlkYXRlPC9mdW5jdGlvbj4gZnVuY3Rpb24gdmFsaWRhdGVzIGFu IFhNTCB2YWx1ZQorICAgICBhZ2FpbnN0IGFuIFhNTCBTY2hlbWEgKFhTRCkuIEl0IHJldHVybnMg PGxpdGVyYWw+dHJ1ZTwvbGl0ZXJhbD4gaWYgdGhlCisgICAgIFhNTCBpcyB2YWxpZCBhY2NvcmRp bmcgdG8gdGhlIHNjaGVtYSwgPGxpdGVyYWw+ZmFsc2U8L2xpdGVyYWw+IGlmIGl0IGlzCisgICAg IGludmFsaWQsIG9yIDxsaXRlcmFsPk5VTEw8L2xpdGVyYWw+IGlmIGVpdGhlciBhcmd1bWVudCBp cworICAgICA8bGl0ZXJhbD5OVUxMPC9saXRlcmFsPi4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFy YT4KKyAgICAgVGhlIGZpcnN0IGFyZ3VtZW50IHNwZWNpZmllcyB3aGV0aGVyIHRvIHZhbGlkYXRl IHRoZSBYTUwgYXMgYQorICAgICA8bGl0ZXJhbD5ET0NVTUVOVDwvbGl0ZXJhbD4gKGEgY29tcGxl dGUgWE1MIGRvY3VtZW50IHdpdGggYSBzaW5nbGUgcm9vdAorICAgICBlbGVtZW50KSBvciBhcyA8 bGl0ZXJhbD5DT05URU5UPC9saXRlcmFsPiAoYW4gWE1MIGNvbnRlbnQgZnJhZ21lbnQpLgorICAg IDwvcGFyYT4KKworICAgIDxwYXJhPgorICAgICBUaGUgPHJlcGxhY2VhYmxlPnNjaGVtYV90ZXh0 PC9yZXBsYWNlYWJsZT4gYXJndW1lbnQgc2hvdWxkIGJlIGEKKyAgICAgPHR5cGU+dGV4dDwvdHlw ZT4gdmFsdWUgY29udGFpbmluZyBhIHZhbGlkIFhNTCBTY2hlbWEgRGVmaW5pdGlvbiAoWFNEKS4K KyAgICAgRm9yIHNlY3VyaXR5IHJlYXNvbnMsIHRoZSBzY2hlbWEgaXMgdHJlYXRlZCBhcyBwbGFp biB0ZXh0IGFuZCBwYXJzZWQKKyAgICAgaW4tbWVtb3J5IG9ubHkuIFRoaXMgcHJldmVudHMgbWFs aWNpb3VzIGltcG9ydHMgb3IgZXh0ZXJuYWwgZmlsZSBhY2Nlc3MKKyAgICAgdGhyb3VnaCBzY2hl bWEgbG9jYXRpb24gcmVmZXJlbmNlcyAoc3VjaCBhcyA8bGl0ZXJhbD54czppbXBvcnQ8L2xpdGVy YWw+LAorICAgICA8bGl0ZXJhbD54czppbmNsdWRlPC9saXRlcmFsPiwgb3IgPGxpdGVyYWw+c2No ZW1hTG9jYXRpb248L2xpdGVyYWw+CisgICAgIGF0dHJpYnV0ZXMpLiBBbnkgYXR0ZW1wdHMgdG8g cmVmZXJlbmNlIGV4dGVybmFsIHJlc291cmNlcyB3aWxsIGJlCisgICAgIGlnbm9yZWQsIHJlc3Vs dGluZyBpbiBhbiBlbXB0eSBzY2hlbWEgcmVmZXJlbmNlLgorICAgIDwvcGFyYT4KKworICAgIDxw YXJhPgorICAgICBFeGFtcGxlczoKKzxzY3JlZW4+PCFbQ0RBVEFbCitTRUxFQ1QgeG1sdmFsaWRh dGUoRE9DVU1FTlQgJzxwZXJzb24+PG5hbWU+Sm9objwvbmFtZT48YWdlPjMwPC9hZ2U+PC9wZXJz b24+JworICBBQ0NPUkRJTkcgVE8gWE1MU0NIRU1BICc8P3htbCB2ZXJzaW9uPSIxLjAiPz4KKzx4 czpzY2hlbWEgeG1sbnM6eHM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIj4KKyAg PHhzOmVsZW1lbnQgbmFtZT0icGVyc29uIj4KKyAgICA8eHM6Y29tcGxleFR5cGU+CisgICAgICA8 eHM6c2VxdWVuY2U+CisgICAgICAgIDx4czplbGVtZW50IG5hbWU9Im5hbWUiIHR5cGU9InhzOnN0 cmluZyIvPgorICAgICAgICA8eHM6ZWxlbWVudCBuYW1lPSJhZ2UiIHR5cGU9InhzOmludGVnZXIi Lz4KKyAgICAgIDwveHM6c2VxdWVuY2U+CisgICAgPC94czpjb21wbGV4VHlwZT4KKyAgPC94czpl bGVtZW50PgorPC94czpzY2hlbWE+Jyk7CisKKyB4bWx2YWxpZGF0ZQorLS0tLS0tLS0tLS0tLQor IHQKKygxIHJvdykKK11dPjwvc2NyZWVuPgorICAgIDwvcGFyYT4KKworICAgIDxwYXJhPgorICAg ICBUaGlzIGV4YW1wbGUgc2hvd3MgYSB2YWxpZGF0aW9uIGZhaWx1cmUgZHVlIHRvIGEgbWlzc2lu ZyByZXF1aXJlZCBlbGVtZW50OgorPHNjcmVlbj48IVtDREFUQVsKK1NFTEVDVCB4bWx2YWxpZGF0 ZShET0NVTUVOVCAnPHBlcnNvbj48bmFtZT5Kb2huPC9uYW1lPjwvcGVyc29uPicKKyAgQUNDT1JE SU5HIFRPIFhNTFNDSEVNQSAnPD94bWwgdmVyc2lvbj0iMS4wIj8+Cis8eHM6c2NoZW1hIHhtbG5z OnhzPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSI+CisgIDx4czplbGVtZW50IG5h bWU9InBlcnNvbiI+CisgICAgPHhzOmNvbXBsZXhUeXBlPgorICAgICAgPHhzOnNlcXVlbmNlPgor ICAgICAgICA8eHM6ZWxlbWVudCBuYW1lPSJuYW1lIiB0eXBlPSJ4czpzdHJpbmciLz4KKyAgICAg ICAgPHhzOmVsZW1lbnQgbmFtZT0iYWdlIiB0eXBlPSJ4czppbnRlZ2VyIi8+CisgICAgICA8L3hz OnNlcXVlbmNlPgorICAgIDwveHM6Y29tcGxleFR5cGU+CisgIDwveHM6ZWxlbWVudD4KKzwveHM6 c2NoZW1hPicpOworCisgeG1sdmFsaWRhdGUKKy0tLS0tLS0tLS0tLS0KKyBmCisoMSByb3cpCitd XT48L3NjcmVlbj4KKyAgICA8L3BhcmE+CisKKyAgICA8cGFyYT4KKyAgICAgVGhlIHNjaGVtYSBj YW4gYWxzbyB2YWxpZGF0ZSBhdHRyaWJ1dGVzOgorPHNjcmVlbj48IVtDREFUQVsKK1NFTEVDVCB4 bWx2YWxpZGF0ZShET0NVTUVOVCAnPHByb2R1Y3QgaWQ9IjEyMyI+PG5hbWU+V2lkZ2V0PC9uYW1l PjxwcmljZT45Ljk5PC9wcmljZT48L3Byb2R1Y3Q+JworICBBQ0NPUkRJTkcgVE8gWE1MU0NIRU1B ICc8P3htbCB2ZXJzaW9uPSIxLjAiPz4KKzx4czpzY2hlbWEgeG1sbnM6eHM9Imh0dHA6Ly93d3cu dzMub3JnLzIwMDEvWE1MU2NoZW1hIj4KKyAgPHhzOmVsZW1lbnQgbmFtZT0icHJvZHVjdCI+Cisg ICAgPHhzOmNvbXBsZXhUeXBlPgorICAgICAgPHhzOnNlcXVlbmNlPgorICAgICAgICA8eHM6ZWxl bWVudCBuYW1lPSJuYW1lIiB0eXBlPSJ4czpzdHJpbmciLz4KKyAgICAgICAgPHhzOmVsZW1lbnQg bmFtZT0icHJpY2UiIHR5cGU9InhzOmRlY2ltYWwiLz4KKyAgICAgIDwveHM6c2VxdWVuY2U+Cisg ICAgICA8eHM6YXR0cmlidXRlIG5hbWU9ImlkIiB0eXBlPSJ4czpzdHJpbmciIHVzZT0icmVxdWly ZWQiLz4KKyAgICA8L3hzOmNvbXBsZXhUeXBlPgorICA8L3hzOmVsZW1lbnQ+Cis8L3hzOnNjaGVt YT4nKTsKKworIHhtbHZhbGlkYXRlCistLS0tLS0tLS0tLS0tCisgdAorKDEgcm93KQorXV0+PC9z Y3JlZW4+CisgICAgPC9wYXJhPgorCisgICAgPG5vdGU+CisgICAgIDxwYXJhPgorICAgICAgRm9y IHNlY3VyaXR5LCA8ZnVuY3Rpb24+eG1sdmFsaWRhdGU8L2Z1bmN0aW9uPiBwcm9jZXNzZXMgdGhl IFhNTCBTY2hlbWEKKyAgICAgIGFzIGFuIGluLW1lbW9yeSB0ZXh0IHZhbHVlLiBFeHRlcm5hbCBy ZXNvdXJjZSByZWZlcmVuY2VzIHN1Y2ggYXMKKyAgICAgIDxsaXRlcmFsPnNjaGVtYUxvY2F0aW9u PC9saXRlcmFsPiBpbiA8bGl0ZXJhbD54czppbXBvcnQ8L2xpdGVyYWw+IG9yCisgICAgICA8bGl0 ZXJhbD54czppbmNsdWRlPC9saXRlcmFsPiBkaXJlY3RpdmVzIGFyZSBub3QgZm9sbG93ZWQgYW5k IGFyZQorICAgICAgdHJlYXRlZCBhcyBlbXB0eSBzY2hlbWEgcmVmZXJlbmNlcy4gVGhpcyBkZXNp Z24gcHJldmVudHMgcG90ZW50aWFsCisgICAgICBzZWN1cml0eSB2dWxuZXJhYmlsaXRpZXMgd2hl cmUgbWFsaWNpb3VzIHNjaGVtYXMgY291bGQgYXR0ZW1wdCB0bworICAgICAgYWNjZXNzIGV4dGVy bmFsIGZpbGVzIG9yIG5ldHdvcmsgcmVzb3VyY2VzLgorICAgICA8L3BhcmE+CisgICAgPC9ub3Rl PgorICAgPC9zZWN0Mz4KICAgPC9zZWN0Mj4KIAogICA8c2VjdDIgaWQ9ImZ1bmN0aW9ucy14bWwt bWFwcGluZyI+CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9leGVjdXRvci9leGVjRXhwckludGVy cC5jIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY0V4cHJJbnRlcnAuYwppbmRleCA1ZTdiZDkz M2FmYy4uZTFhZWQ0ZjdmZjQgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNF eHBySW50ZXJwLmMKKysrIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY0V4cHJJbnRlcnAuYwpA QCAtNDYyNiw2ICs0NjI2LDMwIEBAIEV4ZWNFdmFsWG1sRXhwcihFeHByU3RhdGUgKnN0YXRlLCBF eHByRXZhbFN0ZXAgKm9wKQogCQkJfQogCQkJYnJlYWs7CiAKKwkJY2FzZSBJU19YTUxWQUxJREFU RToKKwkJCXsKKwkJCQlEYXR1bQkgICAqYXJndmFsdWUgPSBvcC0+ZC54bWxleHByLmFyZ3ZhbHVl OworCQkJCWJvb2wJICAgKmFyZ251bGwgPSBvcC0+ZC54bWxleHByLmFyZ251bGw7CisJCQkJeG1s dHlwZSAgICAqZGF0YTsKKwkJCQl0ZXh0CSAgICpzY2hlbWE7CisKKwkJCQkvKiBhcmd1bWVudHMg YXJlIGtub3duIHRvIGJlIHhtbCwgdGV4dCAqLworCQkJCUFzc2VydChsaXN0X2xlbmd0aCh4ZXhw ci0+YXJncykgPT0gMik7CisKKwkJCQlpZiAoYXJnbnVsbFswXSB8fCBhcmdudWxsWzFdKQorCQkJ CXsKKwkJCQkJKm9wLT5yZXNudWxsID0gdHJ1ZTsKKwkJCQkJcmV0dXJuOworCQkJCX0KKworCQkJ CWRhdGEgPSBEYXR1bUdldFhtbFAoYXJndmFsdWVbMF0pOworCQkJCXNjaGVtYSA9IERhdHVtR2V0 VGV4dFBQKGFyZ3ZhbHVlWzFdKTsKKworCQkJCSpvcC0+cmVzdmFsdWUgPSBCb29sR2V0RGF0dW0o eG1sdmFsaWRhdGVfdGV4dF9zY2hlbWEoZGF0YSwgc2NoZW1hKSk7CisJCQkJKm9wLT5yZXNudWxs ID0gZmFsc2U7CisJCQl9CisJCQlicmVhazsKKwogCQljYXNlIElTX0RPQ1VNRU5UOgogCQkJewog CQkJCURhdHVtCSAgICphcmd2YWx1ZSA9IG9wLT5kLnhtbGV4cHIuYXJndmFsdWU7CmRpZmYgLS1n aXQgYS9zcmMvYmFja2VuZC9ub2Rlcy9ub2RlRnVuY3MuYyBiL3NyYy9iYWNrZW5kL25vZGVzL25v ZGVGdW5jcy5jCmluZGV4IDAyNGEyYjJmZDg0Li5hY2I2N2YzOGI4MiAxMDA2NDQKLS0tIGEvc3Jj L2JhY2tlbmQvbm9kZXMvbm9kZUZ1bmNzLmMKKysrIGIvc3JjL2JhY2tlbmQvbm9kZXMvbm9kZUZ1 bmNzLmMKQEAgLTIxOCw2ICsyMTgsOCBAQCBleHByVHlwZShjb25zdCBOb2RlICpleHByKQogCQlj YXNlIFRfWG1sRXhwcjoKIAkJCWlmICgoKGNvbnN0IFhtbEV4cHIgKikgZXhwciktPm9wID09IElT X0RPQ1VNRU5UKQogCQkJCXR5cGUgPSBCT09MT0lEOworCQkJZWxzZSBpZiAoKChjb25zdCBYbWxF eHByICopIGV4cHIpLT5vcCA9PSBJU19YTUxWQUxJREFURSkKKwkJCQl0eXBlID0gQk9PTE9JRDsK IAkJCWVsc2UgaWYgKCgoY29uc3QgWG1sRXhwciAqKSBleHByKS0+b3AgPT0gSVNfWE1MU0VSSUFM SVpFKQogCQkJCXR5cGUgPSBURVhUT0lEOwogCQkJZWxzZQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tl bmQvcGFyc2VyL2dyYW0ueSBiL3NyYy9iYWNrZW5kL3BhcnNlci9ncmFtLnkKaW5kZXggNzg1NmNl OWQ3OGYuLmQxZTg3OGE5NmVkIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9wYXJzZXIvZ3JhbS55 CisrKyBiL3NyYy9iYWNrZW5kL3BhcnNlci9ncmFtLnkKQEAgLTcwNCw3ICs3MDQsNyBAQCBzdGF0 aWMgTm9kZSAqbWFrZVJlY3Vyc2l2ZVZpZXdTZWxlY3QoY2hhciAqcmVsbmFtZSwgTGlzdCAqYWxp YXNlcywgTm9kZSAqcXVlcnkpOwogICovCiAKIC8qIG9yZGluYXJ5IGtleSB3b3JkcyBpbiBhbHBo YWJldGljYWwgb3JkZXIgKi8KLSV0b2tlbiA8a2V5d29yZD4gQUJPUlRfUCBBQlNFTlQgQUJTT0xV VEVfUCBBQ0NFU1MgQUNUSU9OIEFERF9QIEFETUlOIEFGVEVSCisldG9rZW4gPGtleXdvcmQ+IEFC T1JUX1AgQUJTRU5UIEFCU09MVVRFX1AgQUNDRVNTIEFDQ09SRElORyBBQ1RJT04gQUREX1AgQURN SU4gQUZURVIKIAlBR0dSRUdBVEUgQUxMIEFMU08gQUxURVIgQUxXQVlTIEFOQUxZU0UgQU5BTFla RSBBTkQgQU5ZIEFSUkFZIEFTIEFTQwogCUFTRU5TSVRJVkUgQVNTRVJUSU9OIEFTU0lHTk1FTlQg QVNZTU1FVFJJQyBBVE9NSUMgQVQgQVRUQUNIIEFUVFJJQlVURSBBVVRIT1JJWkFUSU9OCiAKQEAg LTc5NSw3ICs3OTUsNyBAQCBzdGF0aWMgTm9kZSAqbWFrZVJlY3Vyc2l2ZVZpZXdTZWxlY3QoY2hh ciAqcmVsbmFtZSwgTGlzdCAqYWxpYXNlcywgTm9kZSAqcXVlcnkpOwogCVdBSVQgV0hFTiBXSEVS RSBXSElURVNQQUNFX1AgV0lORE9XIFdJVEggV0lUSElOIFdJVEhPVVQgV09SSyBXUkFQUEVSIFdS SVRFCiAKIAlYTUxfUCBYTUxBVFRSSUJVVEVTIFhNTENPTkNBVCBYTUxFTEVNRU5UIFhNTEVYSVNU UyBYTUxGT1JFU1QgWE1MTkFNRVNQQUNFUwotCVhNTFBBUlNFIFhNTFBJIFhNTFJPT1QgWE1MU0VS SUFMSVpFIFhNTFRBQkxFCisJWE1MUEFSU0UgWE1MUEkgWE1MUk9PVCBYTUxTQ0hFTUEgWE1MU0VS SUFMSVpFIFhNTFRBQkxFIFhNTFZBTElEQVRFCiAKIAlZRUFSX1AgWUVTX1AKIApAQCAtMTYyMzEs NiArMTYyMzEsMTcgQEAgZnVuY19leHByX2NvbW1vbl9zdWJleHByOgogCQkJCQluLT5sb2NhdGlv biA9IEAxOwogCQkJCQkkJCA9IChOb2RlICopIG47CiAJCQkJfQorCQkJfCBYTUxWQUxJREFURSAn KCcgZG9jdW1lbnRfb3JfY29udGVudCBhX2V4cHIgQUNDT1JESU5HIFRPIFhNTFNDSEVNQSBhX2V4 cHIgJyknCisJCQkJeworCQkJCQlYbWxFeHByICp4ID0gKFhtbEV4cHIgKikKKwkJCQkJCW1ha2VY bWxFeHByKElTX1hNTFZBTElEQVRFLCBOVUxMLCBOSUwsCisJCQkJCQkJCQlsaXN0X21ha2UyKCQ0 LCAkOCksCisJCQkJCQkJCQlAMSk7CisKKwkJCQkJeC0+eG1sb3B0aW9uID0gJDM7CisJCQkJCXgt PmxvY2F0aW9uID0gQDE7CisJCQkJCSQkID0gKE5vZGUgKikgeDsKKwkJCQl9CiAJCQl8IEpTT05f T0JKRUNUICcoJyBmdW5jX2FyZ19saXN0ICcpJwogCQkJCXsKIAkJCQkJLyogU3VwcG9ydCBmb3Ig bGVnYWN5IChub24tc3RhbmRhcmQpIGpzb25fb2JqZWN0KCkgKi8KQEAgLTE3ODQxLDYgKzE3ODUy LDcgQEAgdW5yZXNlcnZlZF9rZXl3b3JkOgogCQkJfCBBQlNFTlQKIAkJCXwgQUJTT0xVVEVfUAog CQkJfCBBQ0NFU1MKKwkJCXwgQUNDT1JESU5HCiAJCQl8IEFDVElPTgogCQkJfCBBRERfUAogCQkJ fCBBRE1JTgpAQCAtMTgxNjgsNiArMTgxODAsNyBAQCB1bnJlc2VydmVkX2tleXdvcmQ6CiAJCQl8 IFdSQVBQRVIKIAkJCXwgV1JJVEUKIAkJCXwgWE1MX1AKKwkJCXwgWE1MU0NIRU1BCiAJCQl8IFlF QVJfUAogCQkJfCBZRVNfUAogCQkJfCBaT05FCkBAIC0xODI0Nyw2ICsxODI2MCw3IEBAIGNvbF9u YW1lX2tleXdvcmQ6CiAJCQl8IFhNTFJPT1QKIAkJCXwgWE1MU0VSSUFMSVpFCiAJCQl8IFhNTFRB QkxFCisJCQl8IFhNTFZBTElEQVRFCiAJCTsKIAogLyogVHlwZS9mdW5jdGlvbiBpZGVudGlmaWVy IC0tLSBrZXl3b3JkcyB0aGF0IGNhbiBiZSB0eXBlIG9yIGZ1bmN0aW9uIG5hbWVzLgpAQCAtMTgz ODYsNiArMTg0MDAsNyBAQCBiYXJlX2xhYmVsX2tleXdvcmQ6CiAJCQl8IEFCU0VOVAogCQkJfCBB QlNPTFVURV9QCiAJCQl8IEFDQ0VTUworCQkJfCBBQ0NPUkRJTkcKIAkJCXwgQUNUSU9OCiAJCQl8 IEFERF9QCiAJCQl8IEFETUlOCkBAIC0xODgzNSw4ICsxODg1MCwxMCBAQCBiYXJlX2xhYmVsX2tl eXdvcmQ6CiAJCQl8IFhNTFBBUlNFCiAJCQl8IFhNTFBJCiAJCQl8IFhNTFJPT1QKKwkJCXwgWE1M U0NIRU1BCiAJCQl8IFhNTFNFUklBTElaRQogCQkJfCBYTUxUQUJMRQorCQkJfCBYTUxWQUxJREFU RQogCQkJfCBZRVNfUAogCQkJfCBaT05FCiAJCTsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3Bh cnNlci9wYXJzZV9leHByLmMgYi9zcmMvYmFja2VuZC9wYXJzZXIvcGFyc2VfZXhwci5jCmluZGV4 IDZiOGZhMTVmY2EzLi45N2M4NGFjYzE3YyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvcGFyc2Vy L3BhcnNlX2V4cHIuYworKysgYi9zcmMvYmFja2VuZC9wYXJzZXIvcGFyc2VfZXhwci5jCkBAIC0y NDcxLDYgKzI0NzEsMTQgQEAgdHJhbnNmb3JtWG1sRXhwcihQYXJzZVN0YXRlICpwc3RhdGUsIFht bEV4cHIgKngpCiAJCQkJLyogbm90IGhhbmRsZWQgaGVyZSAqLwogCQkJCUFzc2VydChmYWxzZSk7 CiAJCQkJYnJlYWs7CisJCQljYXNlIElTX1hNTFZBTElEQVRFOgorCQkJCWlmIChpID09IDApCisJ CQkJCW5ld2UgPSBjb2VyY2VfdG9fc3BlY2lmaWNfdHlwZShwc3RhdGUsIG5ld2UsIFhNTE9JRCwK KwkJCQkJCQkJCQkJCSAgICJYTUxWQUxJREFURSIpOworCQkJCWVsc2UKKwkJCQkJbmV3ZSA9IGNv ZXJjZV90b19zcGVjaWZpY190eXBlKHBzdGF0ZSwgbmV3ZSwgVEVYVE9JRCwKKwkJCQkJCQkJCQkJ CSAgICJYTUxWQUxJREFURSIpOworCQkJCWJyZWFrOwogCQkJY2FzZSBJU19ET0NVTUVOVDoKIAkJ CQluZXdlID0gY29lcmNlX3RvX3NwZWNpZmljX3R5cGUocHN0YXRlLCBuZXdlLCBYTUxPSUQsCiAJ CQkJCQkJCQkJCSAgICJJUyBET0NVTUVOVCIpOwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvcGFy c2VyL3BhcnNlX3RhcmdldC5jIGIvc3JjL2JhY2tlbmQvcGFyc2VyL3BhcnNlX3RhcmdldC5jCmlu ZGV4IDkwNWM5NzVkODNiLi45MzFkZjFlNThiOSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvcGFy c2VyL3BhcnNlX3RhcmdldC5jCisrKyBiL3NyYy9iYWNrZW5kL3BhcnNlci9wYXJzZV90YXJnZXQu YwpAQCAtMTk3Niw2ICsxOTc2LDkgQEAgRmlndXJlQ29sbmFtZUludGVybmFsKE5vZGUgKm5vZGUs IGNoYXIgKipuYW1lKQogCQkJCWNhc2UgSVNfWE1MU0VSSUFMSVpFOgogCQkJCQkqbmFtZSA9ICJ4 bWxzZXJpYWxpemUiOwogCQkJCQlyZXR1cm4gMjsKKwkJCQljYXNlIElTX1hNTFZBTElEQVRFOgor CQkJCQkqbmFtZSA9ICJ4bWx2YWxpZGF0ZSI7CisJCQkJCXJldHVybiAyOwogCQkJCWNhc2UgSVNf RE9DVU1FTlQ6CiAJCQkJCS8qIG5vdGhpbmcgKi8KIAkJCQkJYnJlYWs7CmRpZmYgLS1naXQgYS9z cmMvYmFja2VuZC91dGlscy9hZHQvcnVsZXV0aWxzLmMgYi9zcmMvYmFja2VuZC91dGlscy9hZHQv cnVsZXV0aWxzLmMKaW5kZXggOWY4NWViODZkYTEuLjNjNDFjZWFlNjEwIDEwMDY0NAotLS0gYS9z cmMvYmFja2VuZC91dGlscy9hZHQvcnVsZXV0aWxzLmMKKysrIGIvc3JjL2JhY2tlbmQvdXRpbHMv YWR0L3J1bGV1dGlscy5jCkBAIC0xMDExOSwxMCArMTAxMTksMTMgQEAgZ2V0X3J1bGVfZXhwcihO b2RlICpub2RlLCBkZXBhcnNlX2NvbnRleHQgKmNvbnRleHQsCiAJCQkJCWNhc2UgSVNfWE1MU0VS SUFMSVpFOgogCQkJCQkJYXBwZW5kU3RyaW5nSW5mb1N0cmluZyhidWYsICJYTUxTRVJJQUxJWkUo Iik7CiAJCQkJCQlicmVhazsKKwkJCQkJY2FzZSBJU19YTUxWQUxJREFURToKKwkJCQkJCWFwcGVu ZFN0cmluZ0luZm9TdHJpbmcoYnVmLCAiWE1MVkFMSURBVEUoIik7CisJCQkJCQlicmVhazsKIAkJ CQkJY2FzZSBJU19ET0NVTUVOVDoKIAkJCQkJCWJyZWFrOwogCQkJCX0KLQkJCQlpZiAoeGV4cHIt Pm9wID09IElTX1hNTFBBUlNFIHx8IHhleHByLT5vcCA9PSBJU19YTUxTRVJJQUxJWkUpCisJCQkJ aWYgKHhleHByLT5vcCA9PSBJU19YTUxQQVJTRSB8fCB4ZXhwci0+b3AgPT0gSVNfWE1MU0VSSUFM SVpFIHx8IHhleHByLT5vcCA9PSBJU19YTUxWQUxJREFURSkKIAkJCQl7CiAJCQkJCWlmICh4ZXhw ci0+eG1sb3B0aW9uID09IFhNTE9QVElPTl9ET0NVTUVOVCkKIAkJCQkJCWFwcGVuZFN0cmluZ0lu Zm9TdHJpbmcoYnVmLCAiRE9DVU1FTlQgIik7CkBAIC0xMDIyNiw2ICsxMDIyOSwxNyBAQCBnZXRf cnVsZV9leHByKE5vZGUgKm5vZGUsIGRlcGFyc2VfY29udGV4dCAqY29udGV4dCwKIAkJCQkJCQkJ fQogCQkJCQkJCX0KIAkJCQkJCQlicmVhazsKKwkJCQkJCWNhc2UgSVNfWE1MVkFMSURBVEU6CisJ CQkJCQkJQXNzZXJ0KGxpc3RfbGVuZ3RoKHhleHByLT5hcmdzKSA9PSAyKTsKKworCQkJCQkJCWdl dF9ydWxlX2V4cHIoKE5vZGUgKikgbGluaXRpYWwoeGV4cHItPmFyZ3MpLAorCQkJCQkJCQkJCSAg Y29udGV4dCwgdHJ1ZSk7CisKKwkJCQkJCQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKGJ1ZiwgIiBB Q0NPUkRJTkcgVE8gWE1MU0NIRU1BICIpOworCisJCQkJCQkJZ2V0X3J1bGVfZXhwcigoTm9kZSAq KSBsc2Vjb25kKHhleHByLT5hcmdzKSwKKwkJCQkJCQkJCQkgIGNvbnRleHQsIHRydWUpOworCQkJ CQkJCWJyZWFrOwogCQkJCQkJY2FzZSBJU19ET0NVTUVOVDoKIAkJCQkJCQlnZXRfcnVsZV9leHBy X3BhcmVuKChOb2RlICopIHhleHByLT5hcmdzLCBjb250ZXh0LCBmYWxzZSwgbm9kZSk7CiAJCQkJ CQkJYnJlYWs7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9hZHQveG1sLmMgYi9zcmMv YmFja2VuZC91dGlscy9hZHQveG1sLmMKaW5kZXggYzhhYjlkNjFjNjguLjcyOTNjMzFkYzk3IDEw MDY0NAotLS0gYS9zcmMvYmFja2VuZC91dGlscy9hZHQveG1sLmMKKysrIGIvc3JjL2JhY2tlbmQv dXRpbHMvYWR0L3htbC5jCkBAIC01OCw2ICs1OCw3IEBACiAjaW5jbHVkZSA8bGlieG1sL3htbHdy aXRlci5oPgogI2luY2x1ZGUgPGxpYnhtbC94cGF0aC5oPgogI2luY2x1ZGUgPGxpYnhtbC94cGF0 aEludGVybmFscy5oPgorI2luY2x1ZGUgPGxpYnhtbC94bWxzY2hlbWFzLmg+CiAKIC8qCiAgKiBX ZSB1c2VkIHRvIGNoZWNrIGZvciB4bWxTdHJ1Y3R1cmVkRXJyb3JDb250ZXh0IHZpYSBhIGNvbmZp Z3VyZSB0ZXN0OyBidXQKQEAgLTExNTgsMTAgKzExNTksMTE2IEBAIHhtbHZhbGlkYXRlKFBHX0ZV TkNUSU9OX0FSR1MpCiB7CiAJZXJlcG9ydChFUlJPUiwKIAkJCShlcnJjb2RlKEVSUkNPREVfRkVB VFVSRV9OT1RfU1VQUE9SVEVEKSwKLQkJCSBlcnJtc2coInhtbHZhbGlkYXRlIGlzIG5vdCBpbXBs ZW1lbnRlZCIpKSk7CisJCQkgZXJybXNnKCJ4bWx2YWxpZGF0ZSBpcyBub3QgaW1wbGVtZW50ZWQg YWdhaW5zdCBnZW5lcmFsaXplZCBzY2hlbWEgZGVmaW5pdGlvbnMiKSkpOwogCXJldHVybiAwOwog fQogCisvKgorICogeG1sdmFsaWRhdGUgLSB2YWxpZGF0ZSBYTUwgYWdhaW5zdCBhbiBYTUwgcHJv dmlkZWQgU2NoZW1hIChYU0QpCisgKgorICogUmV0dXJucyB0cnVlIGlmIHRoZSBYTUwgaXMgdmFs aWQgYWNjb3JkaW5nIHRvIHRoZSB4bWwgc2NoZW1hLAorICogZmFsc2UgaWYgaXQgZG9lc24ndCBh bmQgTlVMTCBpZiBhbnkgKHhtbCBzY2hlbWEgb3IgeG1sKSBhcmUgTlVMTC4KKyAqIFRoaXMgaW1w bGVtZW50cyB0aGUgU1FMOjIwMDggWE1MVkFMSURBVEUgZnVuY3Rpb24gd2l0aCB0aGUgbGltaXRh dGlvbiBvZgorICogbm90IGxvb2tpbmcgYXQgaW1wb3J0IHJlZmVyZW5jZXMuIFRoaXMgZnVuY3Rp b24gcmVsaWVzIG9uIHRoZSBwcm90ZWN0aW9ucworICogZW5mb3JjZWQgYnkgcGdfeG1sX2luaXQu CisgKi8KK2Jvb2wKK3htbHZhbGlkYXRlX3RleHRfc2NoZW1hKHhtbHR5cGUgKmRhdGEsIHRleHQg KnNjaGVtYSkKK3sKKyNpZmRlZiBVU0VfTElCWE1MCisJeG1sRG9jUHRyCWRvYyA9IE5VTEw7CisJ eG1sU2NoZW1hUGFyc2VyQ3R4dFB0ciBzY2hlbWFfcGFyc2VyX2N0eHQgPSBOVUxMOworCXhtbFNj aGVtYVB0ciBzY2hlbWFfcHRyID0gTlVMTDsKKwl4bWxTY2hlbWFWYWxpZEN0eHRQdHIgdmFsaWRf Y3R4dCA9IE5VTEw7CisJY2hhcgkgICAqZGF0YXN0cjsKKwljaGFyCSAgICpzY2hlbWFzdHI7CisJ aW50CQkJcmVzdWx0OworCVBnWG1sRXJyb3JDb250ZXh0ICp4bWxlcnJjeHQ7CisKKwlkYXRhc3Ry ID0gdGV4dF90b19jc3RyaW5nKCh0ZXh0ICopIGRhdGEpOworCXNjaGVtYXN0ciA9IHRleHRfdG9f Y3N0cmluZyhzY2hlbWEpOworCXhtbGVycmN4dCA9IHBnX3htbF9pbml0KFBHX1hNTF9TVFJJQ1RO RVNTX1dFTExGT1JNRUQpOworCisJUEdfVFJZKCk7CisJeworCQlkb2MgPSB4bWxSZWFkTWVtb3J5 KGRhdGFzdHIsIHN0cmxlbihkYXRhc3RyKSwgTlVMTCwgTlVMTCwgMCk7CisJCWlmIChkb2MgPT0g TlVMTCkKKwkJeworCQkJeG1sX2VyZXBvcnQoeG1sZXJyY3h0LCBFUlJPUiwgRVJSQ09ERV9JTlZB TElEX1hNTF9ET0NVTUVOVCwKKwkJCQkJCSJpbnZhbGlkIFhNTCBkb2N1bWVudCIpOworCQl9CisK KwkJc2NoZW1hX3BhcnNlcl9jdHh0ID0geG1sU2NoZW1hTmV3TWVtUGFyc2VyQ3R4dChzY2hlbWFz dHIsIHN0cmxlbihzY2hlbWFzdHIpKTsKKwkJaWYgKHNjaGVtYV9wYXJzZXJfY3R4dCA9PSBOVUxM KQorCQl7CisJCQl4bWxfZXJlcG9ydCh4bWxlcnJjeHQsIEVSUk9SLCBFUlJDT0RFX0lOVkFMSURf WE1MX0RPQ1VNRU5ULAorCQkJCQkJImZhaWxlZCB0byBjcmVhdGUgc2NoZW1hIHBhcnNlciBjb250 ZXh0Iik7CisJCX0KKworCQlzY2hlbWFfcHRyID0geG1sU2NoZW1hUGFyc2Uoc2NoZW1hX3BhcnNl cl9jdHh0KTsKKwkJaWYgKHNjaGVtYV9wdHIgPT0gTlVMTCkKKwkJeworCQkJeG1sX2VyZXBvcnQo eG1sZXJyY3h0LCBFUlJPUiwgRVJSQ09ERV9JTlZBTElEX1hNTF9ET0NVTUVOVCwKKwkJCQkJCSJm YWlsZWQgdG8gcGFyc2UgWE1MIHNjaGVtYSIpOworCQl9CisKKwkJdmFsaWRfY3R4dCA9IHhtbFNj aGVtYU5ld1ZhbGlkQ3R4dChzY2hlbWFfcHRyKTsKKwkJaWYgKHZhbGlkX2N0eHQgPT0gTlVMTCkK KwkJeworCQkJeG1sX2VyZXBvcnQoeG1sZXJyY3h0LCBFUlJPUiwgRVJSQ09ERV9PVVRfT0ZfTUVN T1JZLAorCQkJCQkJImZhaWxlZCB0byBjcmVhdGUgc2NoZW1hIHZhbGlkYXRpb24gY29udGV4dCIp OworCQl9CisKKwkJLyogVmFsaWRhdGUgdGhlIGRvY3VtZW50IC0gcmV0dXJucyAwIGlmIHZhbGlk LAorCQkgICBncmVhdGVyIHRoYW4gMCBpZiBpbnZhbGlkIGFuZCA8IDAgaWYgZXJyb3IgKi8KKwkJ cmVzdWx0ID0geG1sU2NoZW1hVmFsaWRhdGVEb2ModmFsaWRfY3R4dCwgZG9jKTsKKwkJaWYgKHJl c3VsdCA8IDApCisJCXsKKwkJCXhtbF9lcmVwb3J0KHhtbGVycmN4dCwgRVJST1IsIEVSUkNPREVf SU5URVJOQUxfRVJST1IsCisJCQkJCQkiaW50ZXJuYWwgZXJyb3IgZHVyaW5nIHNjaGVtYSB2YWxp ZGF0aW9uIik7CisJCX0gZWxzZSBpZiAocmVzdWx0ID09IDApIHsKKwkJCXJldHVybiB0cnVlOwor CQl9IGVsc2UgeworCQkJcmV0dXJuIGZhbHNlOworCQl9CisJfQorCVBHX0NBVENIKCk7CisJewor CQlpZiAodmFsaWRfY3R4dCkKKwkJCXhtbFNjaGVtYUZyZWVWYWxpZEN0eHQodmFsaWRfY3R4dCk7 CisJCWlmIChzY2hlbWFfcHRyKQorCQkJeG1sU2NoZW1hRnJlZShzY2hlbWFfcHRyKTsKKwkJaWYg KHNjaGVtYV9wYXJzZXJfY3R4dCkKKwkJCXhtbFNjaGVtYUZyZWVQYXJzZXJDdHh0KHNjaGVtYV9w YXJzZXJfY3R4dCk7CisJCWlmIChkb2MpCisJCQl4bWxGcmVlRG9jKGRvYyk7CisJCXBnX3htbF9k b25lKHhtbGVycmN4dCwgdHJ1ZSk7CisJCXBmcmVlKGRhdGFzdHIpOworCQlwZnJlZShzY2hlbWFz dHIpOworCQlQR19SRV9USFJPVygpOworCX0KKwlQR19FTkRfVFJZKCk7CisJaWYgKHZhbGlkX2N0 eHQpCisJCXhtbFNjaGVtYUZyZWVWYWxpZEN0eHQodmFsaWRfY3R4dCk7CisJaWYgKHNjaGVtYV9w dHIpCisJCXhtbFNjaGVtYUZyZWUoc2NoZW1hX3B0cik7CisJaWYgKHNjaGVtYV9wYXJzZXJfY3R4 dCkKKwkJeG1sU2NoZW1hRnJlZVBhcnNlckN0eHQoc2NoZW1hX3BhcnNlcl9jdHh0KTsKKwlpZiAo ZG9jKQorCQl4bWxGcmVlRG9jKGRvYyk7CisKKwlwZ194bWxfZG9uZSh4bWxlcnJjeHQsIGZhbHNl KTsKKworCXBmcmVlKGRhdGFzdHIpOworCXBmcmVlKHNjaGVtYXN0cik7CisJLy8gRGVmYXVsdCBj YXNlIHNpbmNlIG5vdGhpbmcgZ290IHJldHVybmVkCisJLy8gb3V0IG9mIHRoZSBub3JtYWwgcGF0 aCBmb3IgdmFsaWRhdGlvbiBjYWxscyB0byBsaWJ4bWwKKwlyZXR1cm4gZmFsc2U7CisjZWxzZQor CU5PX1hNTF9TVVBQT1JUKCk7CisJcmV0dXJuIE5VTEw7CisjZW5kaWYKK30KIAogYm9vbAogeG1s X2lzX2RvY3VtZW50KHhtbHR5cGUgKmFyZykKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL25vZGVz L3ByaW1ub2Rlcy5oIGIvc3JjL2luY2x1ZGUvbm9kZXMvcHJpbW5vZGVzLmgKaW5kZXggMWI0NDM2 ZjJmZjYuLjUzNjVhMDAxMmMxIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9ub2Rlcy9wcmltbm9k ZXMuaAorKysgYi9zcmMvaW5jbHVkZS9ub2Rlcy9wcmltbm9kZXMuaApAQCAtMTYxMCw2ICsxNjEw LDcgQEAgdHlwZWRlZiBlbnVtIFhtbEV4cHJPcAogCUlTX1hNTFJPT1QsCQkJCQkvKiBYTUxST09U KHhtbCwgdmVyc2lvbiwgc3RhbmRhbG9uZSkgKi8KIAlJU19YTUxTRVJJQUxJWkUsCQkJLyogWE1M U0VSSUFMSVpFKGlzX2RvY3VtZW50LCB4bWx2YWwsIGluZGVudCkgKi8KIAlJU19ET0NVTUVOVCwJ CQkJLyogeG1sdmFsIElTIERPQ1VNRU5UICovCisJSVNfWE1MVkFMSURBVEUsCQkJCS8qIFhNTFZB TElEQVRFKHhtbHZhbCwgc2NoZW1hX3RleHQpICovCiB9IFhtbEV4cHJPcDsKIAogdHlwZWRlZiBl bnVtIFhtbE9wdGlvblR5cGUKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3BhcnNlci9rd2xpc3Qu aCBiL3NyYy9pbmNsdWRlL3BhcnNlci9rd2xpc3QuaAppbmRleCA1ZDRmZTI3ZWY5Ni4uYmU3ZThi YWIzZjYgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3BhcnNlci9rd2xpc3QuaAorKysgYi9zcmMv aW5jbHVkZS9wYXJzZXIva3dsaXN0LmgKQEAgLTI5LDYgKzI5LDcgQEAgUEdfS0VZV09SRCgiYWJv cnQiLCBBQk9SVF9QLCBVTlJFU0VSVkVEX0tFWVdPUkQsIEJBUkVfTEFCRUwpCiBQR19LRVlXT1JE KCJhYnNlbnQiLCBBQlNFTlQsIFVOUkVTRVJWRURfS0VZV09SRCwgQkFSRV9MQUJFTCkKIFBHX0tF WVdPUkQoImFic29sdXRlIiwgQUJTT0xVVEVfUCwgVU5SRVNFUlZFRF9LRVlXT1JELCBCQVJFX0xB QkVMKQogUEdfS0VZV09SRCgiYWNjZXNzIiwgQUNDRVNTLCBVTlJFU0VSVkVEX0tFWVdPUkQsIEJB UkVfTEFCRUwpCitQR19LRVlXT1JEKCJhY2NvcmRpbmciLCBBQ0NPUkRJTkcsIFVOUkVTRVJWRURf S0VZV09SRCwgQkFSRV9MQUJFTCkKIFBHX0tFWVdPUkQoImFjdGlvbiIsIEFDVElPTiwgVU5SRVNF UlZFRF9LRVlXT1JELCBCQVJFX0xBQkVMKQogUEdfS0VZV09SRCgiYWRkIiwgQUREX1AsIFVOUkVT RVJWRURfS0VZV09SRCwgQkFSRV9MQUJFTCkKIFBHX0tFWVdPUkQoImFkbWluIiwgQURNSU4sIFVO UkVTRVJWRURfS0VZV09SRCwgQkFSRV9MQUJFTCkKQEAgLTUxOCw4ICs1MTksMTAgQEAgUEdfS0VZ V09SRCgieG1sbmFtZXNwYWNlcyIsIFhNTE5BTUVTUEFDRVMsIENPTF9OQU1FX0tFWVdPUkQsIEJB UkVfTEFCRUwpCiBQR19LRVlXT1JEKCJ4bWxwYXJzZSIsIFhNTFBBUlNFLCBDT0xfTkFNRV9LRVlX T1JELCBCQVJFX0xBQkVMKQogUEdfS0VZV09SRCgieG1scGkiLCBYTUxQSSwgQ09MX05BTUVfS0VZ V09SRCwgQkFSRV9MQUJFTCkKIFBHX0tFWVdPUkQoInhtbHJvb3QiLCBYTUxST09ULCBDT0xfTkFN RV9LRVlXT1JELCBCQVJFX0xBQkVMKQorUEdfS0VZV09SRCgieG1sc2NoZW1hIiwgWE1MU0NIRU1B LCBVTlJFU0VSVkVEX0tFWVdPUkQsIEJBUkVfTEFCRUwpCiBQR19LRVlXT1JEKCJ4bWxzZXJpYWxp emUiLCBYTUxTRVJJQUxJWkUsIENPTF9OQU1FX0tFWVdPUkQsIEJBUkVfTEFCRUwpCiBQR19LRVlX T1JEKCJ4bWx0YWJsZSIsIFhNTFRBQkxFLCBDT0xfTkFNRV9LRVlXT1JELCBCQVJFX0xBQkVMKQor UEdfS0VZV09SRCgieG1sdmFsaWRhdGUiLCBYTUxWQUxJREFURSwgQ09MX05BTUVfS0VZV09SRCwg QkFSRV9MQUJFTCkKIFBHX0tFWVdPUkQoInllYXIiLCBZRUFSX1AsIFVOUkVTRVJWRURfS0VZV09S RCwgQVNfTEFCRUwpCiBQR19LRVlXT1JEKCJ5ZXMiLCBZRVNfUCwgVU5SRVNFUlZFRF9LRVlXT1JE LCBCQVJFX0xBQkVMKQogUEdfS0VZV09SRCgiem9uZSIsIFpPTkUsIFVOUkVTRVJWRURfS0VZV09S RCwgQkFSRV9MQUJFTCkKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3V0aWxzL3htbC5oIGIvc3Jj L2luY2x1ZGUvdXRpbHMveG1sLmgKaW5kZXggNzMyZGFjNDdiYzQuLjZhNjRmZDA5MmEwIDEwMDY0 NAotLS0gYS9zcmMvaW5jbHVkZS91dGlscy94bWwuaAorKysgYi9zcmMvaW5jbHVkZS91dGlscy94 bWwuaApAQCAtNzYsNiArNzYsNyBAQCBleHRlcm4geG1sdHlwZSAqeG1sZWxlbWVudChYbWxFeHBy ICp4ZXhwciwKIGV4dGVybiB4bWx0eXBlICp4bWxwYXJzZSh0ZXh0ICpkYXRhLCBYbWxPcHRpb25U eXBlIHhtbG9wdGlvbl9hcmcsIGJvb2wgcHJlc2VydmVfd2hpdGVzcGFjZSk7CiBleHRlcm4geG1s dHlwZSAqeG1scGkoY29uc3QgY2hhciAqdGFyZ2V0LCB0ZXh0ICphcmcsIGJvb2wgYXJnX2lzX251 bGwsIGJvb2wgKnJlc3VsdF9pc19udWxsKTsKIGV4dGVybiB4bWx0eXBlICp4bWxyb290KHhtbHR5 cGUgKmRhdGEsIHRleHQgKnZlcnNpb24sIGludCBzdGFuZGFsb25lKTsKK2V4dGVybiBib29sIHht bHZhbGlkYXRlX3RleHRfc2NoZW1hKHhtbHR5cGUgKmRhdGEsIHRleHQgKnNjaGVtYSk7CiBleHRl cm4gYm9vbCB4bWxfaXNfZG9jdW1lbnQoeG1sdHlwZSAqYXJnKTsKIGV4dGVybiB0ZXh0ICp4bWx0 b3RleHRfd2l0aF9vcHRpb25zKHhtbHR5cGUgKmRhdGEsIFhtbE9wdGlvblR5cGUgeG1sb3B0aW9u X2FyZywKIAkJCQkJCQkJCWJvb2wgaW5kZW50KTsKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jl c3MvZXhwZWN0ZWQveG1sLm91dCBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQveG1sLm91dApp bmRleCAxMDNhMjJhM2IxZC4uN2VhODAyNDEyYTUgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3JlZ3Jl c3MvZXhwZWN0ZWQveG1sLm91dAorKysgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3htbC5v dXQKQEAgLTE4ODEsMyArMTg4MSwyODMgQEAgU0VMRUNUIHhtbHRleHQoJ3gnfHwgJzxQPjczPC9Q Pic6OnhtbCB8fCAuNDIgfHwgdHJ1ZSB8fCAnaic6OmNoYXIpOwogIHgmbHQ7UCZndDs3MyZsdDsv UCZndDswLjQydHJ1ZWoKICgxIHJvdykKIAorU0VMRUNUIHhtbHZhbGlkYXRlKERPQ1VNRU5UICc8 cGVyc29uPjxuYW1lPkpvaG48L25hbWU+PGFnZT4zMDwvYWdlPjwvcGVyc29uPicKKyAgQUNDT1JE SU5HIFRPIFhNTFNDSEVNQSAnPD94bWwgdmVyc2lvbj0iMS4wIj8+Cis8eHM6c2NoZW1hIHhtbG5z OnhzPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSI+CisgIDx4czplbGVtZW50IG5h bWU9InBlcnNvbiI+CisgICAgPHhzOmNvbXBsZXhUeXBlPgorICAgICAgPHhzOnNlcXVlbmNlPgor ICAgICAgICA8eHM6ZWxlbWVudCBuYW1lPSJuYW1lIiB0eXBlPSJ4czpzdHJpbmciLz4KKyAgICAg ICAgPHhzOmVsZW1lbnQgbmFtZT0iYWdlIiB0eXBlPSJ4czppbnRlZ2VyIi8+CisgICAgICA8L3hz OnNlcXVlbmNlPgorICAgIDwveHM6Y29tcGxleFR5cGU+CisgIDwveHM6ZWxlbWVudD4KKzwveHM6 c2NoZW1hPicpOworIHhtbHZhbGlkYXRlIAorLS0tLS0tLS0tLS0tLQorIHQKKygxIHJvdykKKwor U0VMRUNUIHhtbHZhbGlkYXRlKERPQ1VNRU5UICc8cGVyc29uPjxuYW1lPkpvaG48L25hbWU+PC9w ZXJzb24+JworICBBQ0NPUkRJTkcgVE8gWE1MU0NIRU1BICc8P3htbCB2ZXJzaW9uPSIxLjAiPz4K Kzx4czpzY2hlbWEgeG1sbnM6eHM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIj4K KyAgPHhzOmVsZW1lbnQgbmFtZT0icGVyc29uIj4KKyAgICA8eHM6Y29tcGxleFR5cGU+CisgICAg ICA8eHM6c2VxdWVuY2U+CisgICAgICAgIDx4czplbGVtZW50IG5hbWU9Im5hbWUiIHR5cGU9Inhz OnN0cmluZyIvPgorICAgICAgICA8eHM6ZWxlbWVudCBuYW1lPSJhZ2UiIHR5cGU9InhzOmludGVn ZXIiLz4KKyAgICAgIDwveHM6c2VxdWVuY2U+CisgICAgPC94czpjb21wbGV4VHlwZT4KKyAgPC94 czplbGVtZW50PgorPC94czpzY2hlbWE+Jyk7CisgeG1sdmFsaWRhdGUgCistLS0tLS0tLS0tLS0t CisgZgorKDEgcm93KQorCitTRUxFQ1QgeG1sdmFsaWRhdGUoRE9DVU1FTlQgJzxwZXJzb24+PG5h bWU+Sm9objwvbmFtZT48YWdlPm5vdC1hLW51bWJlcjwvYWdlPjwvcGVyc29uPicKKyAgQUNDT1JE SU5HIFRPIFhNTFNDSEVNQSAnPD94bWwgdmVyc2lvbj0iMS4wIj8+Cis8eHM6c2NoZW1hIHhtbG5z OnhzPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSI+CisgIDx4czplbGVtZW50IG5h bWU9InBlcnNvbiI+CisgICAgPHhzOmNvbXBsZXhUeXBlPgorICAgICAgPHhzOnNlcXVlbmNlPgor ICAgICAgICA8eHM6ZWxlbWVudCBuYW1lPSJuYW1lIiB0eXBlPSJ4czpzdHJpbmciLz4KKyAgICAg ICAgPHhzOmVsZW1lbnQgbmFtZT0iYWdlIiB0eXBlPSJ4czppbnRlZ2VyIi8+CisgICAgICA8L3hz OnNlcXVlbmNlPgorICAgIDwveHM6Y29tcGxleFR5cGU+CisgIDwveHM6ZWxlbWVudD4KKzwveHM6 c2NoZW1hPicpOworIHhtbHZhbGlkYXRlIAorLS0tLS0tLS0tLS0tLQorIGYKKygxIHJvdykKKwor U0VMRUNUIHhtbHZhbGlkYXRlKENPTlRFTlQgJzxib29rPjx0aXRsZT5Qb3N0Z3JlU1FMIEludGVy bmFsczwvdGl0bGU+PC9ib29rPicKKyAgQUNDT1JESU5HIFRPIFhNTFNDSEVNQSAnPD94bWwgdmVy c2lvbj0iMS4wIj8+Cis8eHM6c2NoZW1hIHhtbG5zOnhzPSJodHRwOi8vd3d3LnczLm9yZy8yMDAx L1hNTFNjaGVtYSI+CisgIDx4czplbGVtZW50IG5hbWU9ImJvb2siPgorICAgIDx4czpjb21wbGV4 VHlwZT4KKyAgICAgIDx4czpzZXF1ZW5jZT4KKyAgICAgICAgPHhzOmVsZW1lbnQgbmFtZT0idGl0 bGUiIHR5cGU9InhzOnN0cmluZyIvPgorICAgICAgPC94czpzZXF1ZW5jZT4KKyAgICA8L3hzOmNv bXBsZXhUeXBlPgorICA8L3hzOmVsZW1lbnQ+Cis8L3hzOnNjaGVtYT4nKTsKKyB4bWx2YWxpZGF0 ZSAKKy0tLS0tLS0tLS0tLS0KKyB0CisoMSByb3cpCisKK1NFTEVDVCB4bWx2YWxpZGF0ZShET0NV TUVOVCBOVUxMCisgIEFDQ09SRElORyBUTyBYTUxTQ0hFTUEgJzw/eG1sIHZlcnNpb249IjEuMCI/ PgorPHhzOnNjaGVtYSB4bWxuczp4cz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEi PgorICA8eHM6ZWxlbWVudCBuYW1lPSJ0ZXN0IiB0eXBlPSJ4czpzdHJpbmciLz4KKzwveHM6c2No ZW1hPicpOworIHhtbHZhbGlkYXRlIAorLS0tLS0tLS0tLS0tLQorIAorKDEgcm93KQorCitTRUxF Q1QgeG1sdmFsaWRhdGUoRE9DVU1FTlQgJzx0ZXN0PnZhbHVlPC90ZXN0PicKKyAgQUNDT1JESU5H IFRPIFhNTFNDSEVNQSBOVUxMKTsKKyB4bWx2YWxpZGF0ZSAKKy0tLS0tLS0tLS0tLS0KKyAKKygx IHJvdykKKworU0VMRUNUIHhtbHZhbGlkYXRlKERPQ1VNRU5UIE5VTEwgQUNDT1JESU5HIFRPIFhN TFNDSEVNQSBOVUxMKTsKKyB4bWx2YWxpZGF0ZSAKKy0tLS0tLS0tLS0tLS0KKyAKKygxIHJvdykK KworU0VMRUNUIHhtbHZhbGlkYXRlKERPQ1VNRU5UICc8cHJvZHVjdCBpZD0iMTIzIj48bmFtZT5X aWRnZXQ8L25hbWU+PHByaWNlPjkuOTk8L3ByaWNlPjwvcHJvZHVjdD4nCisgIEFDQ09SRElORyBU TyBYTUxTQ0hFTUEgJzw/eG1sIHZlcnNpb249IjEuMCI/PgorPHhzOnNjaGVtYSB4bWxuczp4cz0i aHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiPgorICA8eHM6ZWxlbWVudCBuYW1lPSJw cm9kdWN0Ij4KKyAgICA8eHM6Y29tcGxleFR5cGU+CisgICAgICA8eHM6c2VxdWVuY2U+CisgICAg ICAgIDx4czplbGVtZW50IG5hbWU9Im5hbWUiIHR5cGU9InhzOnN0cmluZyIvPgorICAgICAgICA8 eHM6ZWxlbWVudCBuYW1lPSJwcmljZSIgdHlwZT0ieHM6ZGVjaW1hbCIvPgorICAgICAgPC94czpz ZXF1ZW5jZT4KKyAgICAgIDx4czphdHRyaWJ1dGUgbmFtZT0iaWQiIHR5cGU9InhzOnN0cmluZyIg dXNlPSJyZXF1aXJlZCIvPgorICAgIDwveHM6Y29tcGxleFR5cGU+CisgIDwveHM6ZWxlbWVudD4K KzwveHM6c2NoZW1hPicpOworIHhtbHZhbGlkYXRlIAorLS0tLS0tLS0tLS0tLQorIHQKKygxIHJv dykKKworU0VMRUNUIHhtbHZhbGlkYXRlKERPQ1VNRU5UICc8cHJvZHVjdD48bmFtZT5XaWRnZXQ8 L25hbWU+PHByaWNlPjkuOTk8L3ByaWNlPjwvcHJvZHVjdD4nCisgIEFDQ09SRElORyBUTyBYTUxT Q0hFTUEgJzw/eG1sIHZlcnNpb249IjEuMCI/PgorPHhzOnNjaGVtYSB4bWxuczp4cz0iaHR0cDov L3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiPgorICA8eHM6ZWxlbWVudCBuYW1lPSJwcm9kdWN0 Ij4KKyAgICA8eHM6Y29tcGxleFR5cGU+CisgICAgICA8eHM6c2VxdWVuY2U+CisgICAgICAgIDx4 czplbGVtZW50IG5hbWU9Im5hbWUiIHR5cGU9InhzOnN0cmluZyIvPgorICAgICAgICA8eHM6ZWxl bWVudCBuYW1lPSJwcmljZSIgdHlwZT0ieHM6ZGVjaW1hbCIvPgorICAgICAgPC94czpzZXF1ZW5j ZT4KKyAgICAgIDx4czphdHRyaWJ1dGUgbmFtZT0iaWQiIHR5cGU9InhzOnN0cmluZyIgdXNlPSJy ZXF1aXJlZCIvPgorICAgIDwveHM6Y29tcGxleFR5cGU+CisgIDwveHM6ZWxlbWVudD4KKzwveHM6 c2NoZW1hPicpOworIHhtbHZhbGlkYXRlIAorLS0tLS0tLS0tLS0tLQorIGYKKygxIHJvdykKKwor U0VMRUNUIHhtbHZhbGlkYXRlKERPQ1VNRU5UCisgICc8Y29tcGFueT4KKyAgICA8ZW1wbG95ZWU+ CisgICAgICA8bmFtZT5BbGljZTwvbmFtZT4KKyAgICAgIDxwb3NpdGlvbj5EZXZlbG9wZXI8L3Bv c2l0aW9uPgorICAgICAgPHNhbGFyeT43NTAwMDwvc2FsYXJ5PgorICAgIDwvZW1wbG95ZWU+Cisg IDwvY29tcGFueT4nCisgIEFDQ09SRElORyBUTyBYTUxTQ0hFTUEgJzw/eG1sIHZlcnNpb249IjEu MCI/PgorPHhzOnNjaGVtYSB4bWxuczp4cz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hl bWEiPgorICA8eHM6ZWxlbWVudCBuYW1lPSJjb21wYW55Ij4KKyAgICA8eHM6Y29tcGxleFR5cGU+ CisgICAgICA8eHM6c2VxdWVuY2U+CisgICAgICAgIDx4czplbGVtZW50IG5hbWU9ImVtcGxveWVl IiBtYXhPY2N1cnM9InVuYm91bmRlZCI+CisgICAgICAgICAgPHhzOmNvbXBsZXhUeXBlPgorICAg ICAgICAgICAgPHhzOnNlcXVlbmNlPgorICAgICAgICAgICAgICA8eHM6ZWxlbWVudCBuYW1lPSJu YW1lIiB0eXBlPSJ4czpzdHJpbmciLz4KKyAgICAgICAgICAgICAgPHhzOmVsZW1lbnQgbmFtZT0i cG9zaXRpb24iIHR5cGU9InhzOnN0cmluZyIvPgorICAgICAgICAgICAgICA8eHM6ZWxlbWVudCBu YW1lPSJzYWxhcnkiIHR5cGU9InhzOmRlY2ltYWwiLz4KKyAgICAgICAgICAgIDwveHM6c2VxdWVu Y2U+CisgICAgICAgICAgPC94czpjb21wbGV4VHlwZT4KKyAgICAgICAgPC94czplbGVtZW50Pgor ICAgICAgPC94czpzZXF1ZW5jZT4KKyAgICA8L3hzOmNvbXBsZXhUeXBlPgorICA8L3hzOmVsZW1l bnQ+Cis8L3hzOnNjaGVtYT4nKTsKKyB4bWx2YWxpZGF0ZSAKKy0tLS0tLS0tLS0tLS0KKyB0Ciso MSByb3cpCisKK0NSRUFURSBUQUJMRSB4bWxfdmFsaWRhdGlvbl90ZXN0ICgKKyAgeG1sX2RhdGEg eG1sLAorICB4c2Rfc2NoZW1hIHRleHQKKyk7CitJTlNFUlQgSU5UTyB4bWxfdmFsaWRhdGlvbl90 ZXN0IFZBTFVFUworICAoJzxudW1iZXI+NDI8L251bWJlcj4nLAorICAgJzw/eG1sIHZlcnNpb249 IjEuMCI/PgorPHhzOnNjaGVtYSB4bWxuczp4cz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxT Y2hlbWEiPgorICA8eHM6ZWxlbWVudCBuYW1lPSJudW1iZXIiIHR5cGU9InhzOmludGVnZXIiLz4K KzwveHM6c2NoZW1hPicpLAorICAoJzxudW1iZXI+bm90LWEtbnVtYmVyPC9udW1iZXI+JywKKyAg ICc8P3htbCB2ZXJzaW9uPSIxLjAiPz4KKzx4czpzY2hlbWEgeG1sbnM6eHM9Imh0dHA6Ly93d3cu dzMub3JnLzIwMDEvWE1MU2NoZW1hIj4KKyAgPHhzOmVsZW1lbnQgbmFtZT0ibnVtYmVyIiB0eXBl PSJ4czppbnRlZ2VyIi8+Cis8L3hzOnNjaGVtYT4nKSwKKyAgKCc8dGV4dD5IZWxsbyBXb3JsZDwv dGV4dD4nLAorICAgJzw/eG1sIHZlcnNpb249IjEuMCI/PgorPHhzOnNjaGVtYSB4bWxuczp4cz0i aHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiPgorICA8eHM6ZWxlbWVudCBuYW1lPSJ0 ZXh0IiB0eXBlPSJ4czpzdHJpbmciLz4KKzwveHM6c2NoZW1hPicpOworU0VMRUNUIHhtbHZhbGlk YXRlKERPQ1VNRU5UIHhtbF9kYXRhIEFDQ09SRElORyBUTyBYTUxTQ0hFTUEgeHNkX3NjaGVtYSkg QVMgaXNfdmFsaWQKK0ZST00geG1sX3ZhbGlkYXRpb25fdGVzdDsKKyBpc192YWxpZCAKKy0tLS0t LS0tLS0KKyB0CisgZgorIHQKKygzIHJvd3MpCisKK0RST1AgVEFCTEUgeG1sX3ZhbGlkYXRpb25f dGVzdDsKK1NFTEVDVCB4bWx2YWxpZGF0ZShET0NVTUVOVCAnPHRlc3Q+dmFsdWU8L3Rlc3Q+Jwor ICBBQ0NPUkRJTkcgVE8gWE1MU0NIRU1BICc8dGhpcy1pcy1ub3QtdmFsaWQteHNkPicpOworRVJS T1I6ICBmYWlsZWQgdG8gcGFyc2UgWE1MIHNjaGVtYQorREVUQUlMOiAgbGluZSAxOiBQcmVtYXR1 cmUgZW5kIG9mIGRhdGEgaW4gdGFnIHRoaXMtaXMtbm90LXZhbGlkLXhzZCBsaW5lIDEKKzx0aGlz LWlzLW5vdC12YWxpZC14c2Q+CisgICAgICAgICAgICAgICAgICAgICAgIF4KK1NFTEVDVCB4bWx2 YWxpZGF0ZShET0NVTUVOVCAnPHVuY2xvc2VkLXRhZz4nCisgIEFDQ09SRElORyBUTyBYTUxTQ0hF TUEgJzw/eG1sIHZlcnNpb249IjEuMCI/PgorPHhzOnNjaGVtYSB4bWxuczp4cz0iaHR0cDovL3d3 dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiPgorICA8eHM6ZWxlbWVudCBuYW1lPSJ0ZXN0IiB0eXBl PSJ4czpzdHJpbmciLz4KKzwveHM6c2NoZW1hPicpOworRVJST1I6ICBpbnZhbGlkIFhNTCBjb250 ZW50CitMSU5FIDE6IFNFTEVDVCB4bWx2YWxpZGF0ZShET0NVTUVOVCAnPHVuY2xvc2VkLXRhZz4n CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBeCitERVRBSUw6ICBsaW5lIDE6 IFByZW1hdHVyZSBlbmQgb2YgZGF0YSBpbiB0YWcgdW5jbG9zZWQtdGFnIGxpbmUgMQorPHVuY2xv c2VkLXRhZz4KKyAgICAgICAgICAgICAgXgorLS0geHM6aW1wb3J0IHdpdGggZXh0ZXJuYWwgVVJM IHNob3VsZCBiZSBibG9ja2VkCitTRUxFQ1QgeG1sdmFsaWRhdGUoCisgICAgRE9DVU1FTlQgJzx0 ZXN0PnZhbHVlPC90ZXN0PicKKyAgICBBQ0NPUkRJTkcgVE8gWE1MU0NIRU1BICc8P3htbCB2ZXJz aW9uPSIxLjAiPz4KKzx4czpzY2hlbWEgeG1sbnM6eHM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEv WE1MU2NoZW1hIj4KKyAgPHhzOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly9leGFtcGxlLmNvbS9l eHRlcm5hbCIgc2NoZW1hTG9jYXRpb249Imh0dHA6Ly9leGFtcGxlLmNvbS9tYWxpY2lvdXMueHNk Ii8+CisgIDx4czplbGVtZW50IG5hbWU9InRlc3QiIHR5cGU9InhzOnN0cmluZyIvPgorPC94czpz Y2hlbWE+Jyk7CitFUlJPUjogIGZhaWxlZCB0byBwYXJzZSBYTUwgc2NoZW1hCitERVRBSUw6ICBs aW5lIDE6IERvY3VtZW50IGlzIGVtcHR5CisKK14KKy0tIHhzOmluY2x1ZGUgd2l0aCBleHRlcm5h bCBVUkwgc2hvdWxkIGJlIGJsb2NrZWQKK1NFTEVDVCB4bWx2YWxpZGF0ZSgKKyAgICBET0NVTUVO VCAnPHRlc3Q+dmFsdWU8L3Rlc3Q+JworICAgIEFDQ09SRElORyBUTyBYTUxTQ0hFTUEgJzw/eG1s IHZlcnNpb249IjEuMCI/PgorPHhzOnNjaGVtYSB4bWxuczp4cz0iaHR0cDovL3d3dy53My5vcmcv MjAwMS9YTUxTY2hlbWEiPgorICA8eHM6aW5jbHVkZSBzY2hlbWFMb2NhdGlvbj0iaHR0cDovL2V4 YW1wbGUuY29tL2V4dGVybmFsLXNjaGVtYS54c2QiLz4KKyAgPHhzOmVsZW1lbnQgbmFtZT0idGVz dCIgdHlwZT0ieHM6c3RyaW5nIi8+Cis8L3hzOnNjaGVtYT4nKTsKK0VSUk9SOiAgZmFpbGVkIHRv IHBhcnNlIFhNTCBzY2hlbWEKK0RFVEFJTDogIGxpbmUgMTogRG9jdW1lbnQgaXMgZW1wdHkKKwor XgorLS0gZmlsZTovLyBVUkwgc2hvdWxkIGJlIGJsb2NrZWQKK1NFTEVDVCB4bWx2YWxpZGF0ZSgK KyAgICBET0NVTUVOVCAnPHRlc3Q+dmFsdWU8L3Rlc3Q+JworICAgIEFDQ09SRElORyBUTyBYTUxT Q0hFTUEgJzw/eG1sIHZlcnNpb249IjEuMCI/PgorPHhzOnNjaGVtYSB4bWxuczp4cz0iaHR0cDov L3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiPgorICA8eHM6aW5jbHVkZSBzY2hlbWFMb2NhdGlv bj0iZmlsZTovLy9ldGMvcGFzc3dkIi8+CisgIDx4czplbGVtZW50IG5hbWU9InRlc3QiIHR5cGU9 InhzOnN0cmluZyIvPgorPC94czpzY2hlbWE+Jyk7CitFUlJPUjogIGZhaWxlZCB0byBwYXJzZSBY TUwgc2NoZW1hCitERVRBSUw6ICBsaW5lIDE6IERvY3VtZW50IGlzIGVtcHR5CisKK14KKy0tIFRl c3QgYV9leHByIHdpdGggc3VicXVlcmllcworQ1JFQVRFIFRFTVAgVEFCTEUgeG1sX2RvY3MgKGlk IHNtYWxsaW50LCBkb2MgeG1sKTsKK0NSRUFURSBURU1QIFRBQkxFIHhzZF9zY2hlbWFzIChpZCBz bWFsbGludCwgc2NoZW1hIHRleHQpOworSU5TRVJUIElOVE8geG1sX2RvY3MgVkFMVUVTCisgICgx LCAnPHByb2R1Y3Q+PG5hbWU+V2lkZ2V0PC9uYW1lPjxwcmljZT4xOS45OTwvcHJpY2U+PC9wcm9k dWN0PicpLAorICAoMiwgJzxwcm9kdWN0PjxuYW1lPkdhZGdldDwvbmFtZT48cHJpY2U+bm90LWEt bnVtYmVyPC9wcmljZT48L3Byb2R1Y3Q+Jyk7CitJTlNFUlQgSU5UTyB4c2Rfc2NoZW1hcyBWQUxV RVMKKyAgKDEsICc8P3htbCB2ZXJzaW9uPSIxLjAiPz4KKzx4czpzY2hlbWEgeG1sbnM6eHM9Imh0 dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIj4KKyAgPHhzOmVsZW1lbnQgbmFtZT0icHJv ZHVjdCI+CisgICAgPHhzOmNvbXBsZXhUeXBlPgorICAgICAgPHhzOnNlcXVlbmNlPgorICAgICAg ICA8eHM6ZWxlbWVudCBuYW1lPSJuYW1lIiB0eXBlPSJ4czpzdHJpbmciLz4KKyAgICAgICAgPHhz OmVsZW1lbnQgbmFtZT0icHJpY2UiIHR5cGU9InhzOmRlY2ltYWwiLz4KKyAgICAgIDwveHM6c2Vx dWVuY2U+CisgICAgPC94czpjb21wbGV4VHlwZT4KKyAgPC94czplbGVtZW50PgorPC94czpzY2hl bWE+Jyk7CistLSBzdWJxdWVyeSBmb3IgZG9jdW1lbnQgYXJndW1lbnQKK1NFTEVDVCB4bWx2YWxp ZGF0ZSgKKyAgICBET0NVTUVOVCAoU0VMRUNUIGRvYyBGUk9NIHhtbF9kb2NzIFdIRVJFIGlkID0g MSkKKyAgICBBQ0NPUkRJTkcgVE8gWE1MU0NIRU1BIChTRUxFQ1Qgc2NoZW1hIEZST00geHNkX3Nj aGVtYXMgV0hFUkUgaWQgPSAxKQorKSBBUyBzdWJxdWVyeV90ZXN0X3ZhbGlkOworIHN1YnF1ZXJ5 X3Rlc3RfdmFsaWQgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyB0CisoMSByb3cpCisKKy0tIHN1 YnF1ZXJ5IGZvciBhbiBpbnZhbGlkIGRvY3VtZW50CitTRUxFQ1QgeG1sdmFsaWRhdGUoCisgICAg RE9DVU1FTlQgKFNFTEVDVCBkb2MgRlJPTSB4bWxfZG9jcyBXSEVSRSBpZCA9IDIpCisgICAgQUND T1JESU5HIFRPIFhNTFNDSEVNQSAoU0VMRUNUIHNjaGVtYSBGUk9NIHhzZF9zY2hlbWFzIFdIRVJF IGlkID0gMSkKKykgQVMgc3VicXVlcnlfdGVzdF9pbnZhbGlkOworIHN1YnF1ZXJ5X3Rlc3RfaW52 YWxpZCAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgZgorKDEgcm93KQorCitEUk9QIFRBQkxF IHhtbF9kb2NzOworRFJPUCBUQUJMRSB4c2Rfc2NoZW1hczsKZGlmZiAtLWdpdCBhL3NyYy90ZXN0 L3JlZ3Jlc3Mvc3FsL3htbC5zcWwgYi9zcmMvdGVzdC9yZWdyZXNzL3NxbC94bWwuc3FsCmluZGV4 IDBlYTRmNTA4ODM3Li5jOGVhMjk5NGViMiAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvcmVncmVzcy9z cWwveG1sLnNxbAorKysgYi9zcmMvdGVzdC9yZWdyZXNzL3NxbC94bWwuc3FsCkBAIC02NzksMyAr Njc5LDIxOSBAQCBTRUxFQ1QgeG1sdGV4dCgnICAnKTsKIFNFTEVDVCB4bWx0ZXh0KCdmb28gYCRf LSs/PSpeJSF8L1woKVtde30nKTsKIFNFTEVDVCB4bWx0ZXh0KCdmb28gJiA8ImJhciI+Jyk7CiBT RUxFQ1QgeG1sdGV4dCgneCd8fCAnPFA+NzM8L1A+Jzo6eG1sIHx8IC40MiB8fCB0cnVlIHx8ICdq Jzo6Y2hhcik7CisKK1NFTEVDVCB4bWx2YWxpZGF0ZShET0NVTUVOVCAnPHBlcnNvbj48bmFtZT5K b2huPC9uYW1lPjxhZ2U+MzA8L2FnZT48L3BlcnNvbj4nCisgIEFDQ09SRElORyBUTyBYTUxTQ0hF TUEgJzw/eG1sIHZlcnNpb249IjEuMCI/PgorPHhzOnNjaGVtYSB4bWxuczp4cz0iaHR0cDovL3d3 dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiPgorICA8eHM6ZWxlbWVudCBuYW1lPSJwZXJzb24iPgor ICAgIDx4czpjb21wbGV4VHlwZT4KKyAgICAgIDx4czpzZXF1ZW5jZT4KKyAgICAgICAgPHhzOmVs ZW1lbnQgbmFtZT0ibmFtZSIgdHlwZT0ieHM6c3RyaW5nIi8+CisgICAgICAgIDx4czplbGVtZW50 IG5hbWU9ImFnZSIgdHlwZT0ieHM6aW50ZWdlciIvPgorICAgICAgPC94czpzZXF1ZW5jZT4KKyAg ICA8L3hzOmNvbXBsZXhUeXBlPgorICA8L3hzOmVsZW1lbnQ+Cis8L3hzOnNjaGVtYT4nKTsKKwor U0VMRUNUIHhtbHZhbGlkYXRlKERPQ1VNRU5UICc8cGVyc29uPjxuYW1lPkpvaG48L25hbWU+PC9w ZXJzb24+JworICBBQ0NPUkRJTkcgVE8gWE1MU0NIRU1BICc8P3htbCB2ZXJzaW9uPSIxLjAiPz4K Kzx4czpzY2hlbWEgeG1sbnM6eHM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIj4K KyAgPHhzOmVsZW1lbnQgbmFtZT0icGVyc29uIj4KKyAgICA8eHM6Y29tcGxleFR5cGU+CisgICAg ICA8eHM6c2VxdWVuY2U+CisgICAgICAgIDx4czplbGVtZW50IG5hbWU9Im5hbWUiIHR5cGU9Inhz OnN0cmluZyIvPgorICAgICAgICA8eHM6ZWxlbWVudCBuYW1lPSJhZ2UiIHR5cGU9InhzOmludGVn ZXIiLz4KKyAgICAgIDwveHM6c2VxdWVuY2U+CisgICAgPC94czpjb21wbGV4VHlwZT4KKyAgPC94 czplbGVtZW50PgorPC94czpzY2hlbWE+Jyk7CisKK1NFTEVDVCB4bWx2YWxpZGF0ZShET0NVTUVO VCAnPHBlcnNvbj48bmFtZT5Kb2huPC9uYW1lPjxhZ2U+bm90LWEtbnVtYmVyPC9hZ2U+PC9wZXJz b24+JworICBBQ0NPUkRJTkcgVE8gWE1MU0NIRU1BICc8P3htbCB2ZXJzaW9uPSIxLjAiPz4KKzx4 czpzY2hlbWEgeG1sbnM6eHM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIj4KKyAg PHhzOmVsZW1lbnQgbmFtZT0icGVyc29uIj4KKyAgICA8eHM6Y29tcGxleFR5cGU+CisgICAgICA8 eHM6c2VxdWVuY2U+CisgICAgICAgIDx4czplbGVtZW50IG5hbWU9Im5hbWUiIHR5cGU9InhzOnN0 cmluZyIvPgorICAgICAgICA8eHM6ZWxlbWVudCBuYW1lPSJhZ2UiIHR5cGU9InhzOmludGVnZXIi Lz4KKyAgICAgIDwveHM6c2VxdWVuY2U+CisgICAgPC94czpjb21wbGV4VHlwZT4KKyAgPC94czpl bGVtZW50PgorPC94czpzY2hlbWE+Jyk7CisKK1NFTEVDVCB4bWx2YWxpZGF0ZShDT05URU5UICc8 Ym9vaz48dGl0bGU+UG9zdGdyZVNRTCBJbnRlcm5hbHM8L3RpdGxlPjwvYm9vaz4nCisgIEFDQ09S RElORyBUTyBYTUxTQ0hFTUEgJzw/eG1sIHZlcnNpb249IjEuMCI/PgorPHhzOnNjaGVtYSB4bWxu czp4cz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiPgorICA8eHM6ZWxlbWVudCBu YW1lPSJib29rIj4KKyAgICA8eHM6Y29tcGxleFR5cGU+CisgICAgICA8eHM6c2VxdWVuY2U+Cisg ICAgICAgIDx4czplbGVtZW50IG5hbWU9InRpdGxlIiB0eXBlPSJ4czpzdHJpbmciLz4KKyAgICAg IDwveHM6c2VxdWVuY2U+CisgICAgPC94czpjb21wbGV4VHlwZT4KKyAgPC94czplbGVtZW50Pgor PC94czpzY2hlbWE+Jyk7CisKK1NFTEVDVCB4bWx2YWxpZGF0ZShET0NVTUVOVCBOVUxMCisgIEFD Q09SRElORyBUTyBYTUxTQ0hFTUEgJzw/eG1sIHZlcnNpb249IjEuMCI/PgorPHhzOnNjaGVtYSB4 bWxuczp4cz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiPgorICA8eHM6ZWxlbWVu dCBuYW1lPSJ0ZXN0IiB0eXBlPSJ4czpzdHJpbmciLz4KKzwveHM6c2NoZW1hPicpOworCitTRUxF Q1QgeG1sdmFsaWRhdGUoRE9DVU1FTlQgJzx0ZXN0PnZhbHVlPC90ZXN0PicKKyAgQUNDT1JESU5H IFRPIFhNTFNDSEVNQSBOVUxMKTsKKworU0VMRUNUIHhtbHZhbGlkYXRlKERPQ1VNRU5UIE5VTEwg QUNDT1JESU5HIFRPIFhNTFNDSEVNQSBOVUxMKTsKKworU0VMRUNUIHhtbHZhbGlkYXRlKERPQ1VN RU5UICc8cHJvZHVjdCBpZD0iMTIzIj48bmFtZT5XaWRnZXQ8L25hbWU+PHByaWNlPjkuOTk8L3By aWNlPjwvcHJvZHVjdD4nCisgIEFDQ09SRElORyBUTyBYTUxTQ0hFTUEgJzw/eG1sIHZlcnNpb249 IjEuMCI/PgorPHhzOnNjaGVtYSB4bWxuczp4cz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxT Y2hlbWEiPgorICA8eHM6ZWxlbWVudCBuYW1lPSJwcm9kdWN0Ij4KKyAgICA8eHM6Y29tcGxleFR5 cGU+CisgICAgICA8eHM6c2VxdWVuY2U+CisgICAgICAgIDx4czplbGVtZW50IG5hbWU9Im5hbWUi IHR5cGU9InhzOnN0cmluZyIvPgorICAgICAgICA8eHM6ZWxlbWVudCBuYW1lPSJwcmljZSIgdHlw ZT0ieHM6ZGVjaW1hbCIvPgorICAgICAgPC94czpzZXF1ZW5jZT4KKyAgICAgIDx4czphdHRyaWJ1 dGUgbmFtZT0iaWQiIHR5cGU9InhzOnN0cmluZyIgdXNlPSJyZXF1aXJlZCIvPgorICAgIDwveHM6 Y29tcGxleFR5cGU+CisgIDwveHM6ZWxlbWVudD4KKzwveHM6c2NoZW1hPicpOworCitTRUxFQ1Qg eG1sdmFsaWRhdGUoRE9DVU1FTlQgJzxwcm9kdWN0PjxuYW1lPldpZGdldDwvbmFtZT48cHJpY2U+ OS45OTwvcHJpY2U+PC9wcm9kdWN0PicKKyAgQUNDT1JESU5HIFRPIFhNTFNDSEVNQSAnPD94bWwg dmVyc2lvbj0iMS4wIj8+Cis8eHM6c2NoZW1hIHhtbG5zOnhzPSJodHRwOi8vd3d3LnczLm9yZy8y MDAxL1hNTFNjaGVtYSI+CisgIDx4czplbGVtZW50IG5hbWU9InByb2R1Y3QiPgorICAgIDx4czpj b21wbGV4VHlwZT4KKyAgICAgIDx4czpzZXF1ZW5jZT4KKyAgICAgICAgPHhzOmVsZW1lbnQgbmFt ZT0ibmFtZSIgdHlwZT0ieHM6c3RyaW5nIi8+CisgICAgICAgIDx4czplbGVtZW50IG5hbWU9InBy aWNlIiB0eXBlPSJ4czpkZWNpbWFsIi8+CisgICAgICA8L3hzOnNlcXVlbmNlPgorICAgICAgPHhz OmF0dHJpYnV0ZSBuYW1lPSJpZCIgdHlwZT0ieHM6c3RyaW5nIiB1c2U9InJlcXVpcmVkIi8+Cisg ICAgPC94czpjb21wbGV4VHlwZT4KKyAgPC94czplbGVtZW50PgorPC94czpzY2hlbWE+Jyk7CisK K1NFTEVDVCB4bWx2YWxpZGF0ZShET0NVTUVOVAorICAnPGNvbXBhbnk+CisgICAgPGVtcGxveWVl PgorICAgICAgPG5hbWU+QWxpY2U8L25hbWU+CisgICAgICA8cG9zaXRpb24+RGV2ZWxvcGVyPC9w b3NpdGlvbj4KKyAgICAgIDxzYWxhcnk+NzUwMDA8L3NhbGFyeT4KKyAgICA8L2VtcGxveWVlPgor ICA8L2NvbXBhbnk+JworICBBQ0NPUkRJTkcgVE8gWE1MU0NIRU1BICc8P3htbCB2ZXJzaW9uPSIx LjAiPz4KKzx4czpzY2hlbWEgeG1sbnM6eHM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2No ZW1hIj4KKyAgPHhzOmVsZW1lbnQgbmFtZT0iY29tcGFueSI+CisgICAgPHhzOmNvbXBsZXhUeXBl PgorICAgICAgPHhzOnNlcXVlbmNlPgorICAgICAgICA8eHM6ZWxlbWVudCBuYW1lPSJlbXBsb3ll ZSIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiPgorICAgICAgICAgIDx4czpjb21wbGV4VHlwZT4KKyAg ICAgICAgICAgIDx4czpzZXF1ZW5jZT4KKyAgICAgICAgICAgICAgPHhzOmVsZW1lbnQgbmFtZT0i bmFtZSIgdHlwZT0ieHM6c3RyaW5nIi8+CisgICAgICAgICAgICAgIDx4czplbGVtZW50IG5hbWU9 InBvc2l0aW9uIiB0eXBlPSJ4czpzdHJpbmciLz4KKyAgICAgICAgICAgICAgPHhzOmVsZW1lbnQg bmFtZT0ic2FsYXJ5IiB0eXBlPSJ4czpkZWNpbWFsIi8+CisgICAgICAgICAgICA8L3hzOnNlcXVl bmNlPgorICAgICAgICAgIDwveHM6Y29tcGxleFR5cGU+CisgICAgICAgIDwveHM6ZWxlbWVudD4K KyAgICAgIDwveHM6c2VxdWVuY2U+CisgICAgPC94czpjb21wbGV4VHlwZT4KKyAgPC94czplbGVt ZW50PgorPC94czpzY2hlbWE+Jyk7CisKK0NSRUFURSBUQUJMRSB4bWxfdmFsaWRhdGlvbl90ZXN0 ICgKKyAgeG1sX2RhdGEgeG1sLAorICB4c2Rfc2NoZW1hIHRleHQKKyk7CisKK0lOU0VSVCBJTlRP IHhtbF92YWxpZGF0aW9uX3Rlc3QgVkFMVUVTCisgICgnPG51bWJlcj40MjwvbnVtYmVyPicsCisg ICAnPD94bWwgdmVyc2lvbj0iMS4wIj8+Cis8eHM6c2NoZW1hIHhtbG5zOnhzPSJodHRwOi8vd3d3 LnczLm9yZy8yMDAxL1hNTFNjaGVtYSI+CisgIDx4czplbGVtZW50IG5hbWU9Im51bWJlciIgdHlw ZT0ieHM6aW50ZWdlciIvPgorPC94czpzY2hlbWE+JyksCisgICgnPG51bWJlcj5ub3QtYS1udW1i ZXI8L251bWJlcj4nLAorICAgJzw/eG1sIHZlcnNpb249IjEuMCI/PgorPHhzOnNjaGVtYSB4bWxu czp4cz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiPgorICA8eHM6ZWxlbWVudCBu YW1lPSJudW1iZXIiIHR5cGU9InhzOmludGVnZXIiLz4KKzwveHM6c2NoZW1hPicpLAorICAoJzx0 ZXh0PkhlbGxvIFdvcmxkPC90ZXh0PicsCisgICAnPD94bWwgdmVyc2lvbj0iMS4wIj8+Cis8eHM6 c2NoZW1hIHhtbG5zOnhzPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSI+CisgIDx4 czplbGVtZW50IG5hbWU9InRleHQiIHR5cGU9InhzOnN0cmluZyIvPgorPC94czpzY2hlbWE+Jyk7 CisKK1NFTEVDVCB4bWx2YWxpZGF0ZShET0NVTUVOVCB4bWxfZGF0YSBBQ0NPUkRJTkcgVE8gWE1M U0NIRU1BIHhzZF9zY2hlbWEpIEFTIGlzX3ZhbGlkCitGUk9NIHhtbF92YWxpZGF0aW9uX3Rlc3Q7 CisKK0RST1AgVEFCTEUgeG1sX3ZhbGlkYXRpb25fdGVzdDsKKworU0VMRUNUIHhtbHZhbGlkYXRl KERPQ1VNRU5UICc8dGVzdD52YWx1ZTwvdGVzdD4nCisgIEFDQ09SRElORyBUTyBYTUxTQ0hFTUEg Jzx0aGlzLWlzLW5vdC12YWxpZC14c2Q+Jyk7CisKK1NFTEVDVCB4bWx2YWxpZGF0ZShET0NVTUVO VCAnPHVuY2xvc2VkLXRhZz4nCisgIEFDQ09SRElORyBUTyBYTUxTQ0hFTUEgJzw/eG1sIHZlcnNp b249IjEuMCI/PgorPHhzOnNjaGVtYSB4bWxuczp4cz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9Y TUxTY2hlbWEiPgorICA8eHM6ZWxlbWVudCBuYW1lPSJ0ZXN0IiB0eXBlPSJ4czpzdHJpbmciLz4K KzwveHM6c2NoZW1hPicpOworCistLSB4czppbXBvcnQgd2l0aCBleHRlcm5hbCBVUkwgc2hvdWxk IGJlIGJsb2NrZWQKK1NFTEVDVCB4bWx2YWxpZGF0ZSgKKyAgICBET0NVTUVOVCAnPHRlc3Q+dmFs dWU8L3Rlc3Q+JworICAgIEFDQ09SRElORyBUTyBYTUxTQ0hFTUEgJzw/eG1sIHZlcnNpb249IjEu MCI/PgorPHhzOnNjaGVtYSB4bWxuczp4cz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hl bWEiPgorICA8eHM6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL2V4YW1wbGUuY29tL2V4dGVybmFs IiBzY2hlbWFMb2NhdGlvbj0iaHR0cDovL2V4YW1wbGUuY29tL21hbGljaW91cy54c2QiLz4KKyAg PHhzOmVsZW1lbnQgbmFtZT0idGVzdCIgdHlwZT0ieHM6c3RyaW5nIi8+Cis8L3hzOnNjaGVtYT4n KTsKKworLS0geHM6aW5jbHVkZSB3aXRoIGV4dGVybmFsIFVSTCBzaG91bGQgYmUgYmxvY2tlZAor U0VMRUNUIHhtbHZhbGlkYXRlKAorICAgIERPQ1VNRU5UICc8dGVzdD52YWx1ZTwvdGVzdD4nCisg ICAgQUNDT1JESU5HIFRPIFhNTFNDSEVNQSAnPD94bWwgdmVyc2lvbj0iMS4wIj8+Cis8eHM6c2No ZW1hIHhtbG5zOnhzPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSI+CisgIDx4czpp bmNsdWRlIHNjaGVtYUxvY2F0aW9uPSJodHRwOi8vZXhhbXBsZS5jb20vZXh0ZXJuYWwtc2NoZW1h LnhzZCIvPgorICA8eHM6ZWxlbWVudCBuYW1lPSJ0ZXN0IiB0eXBlPSJ4czpzdHJpbmciLz4KKzwv eHM6c2NoZW1hPicpOworCistLSBmaWxlOi8vIFVSTCBzaG91bGQgYmUgYmxvY2tlZAorU0VMRUNU IHhtbHZhbGlkYXRlKAorICAgIERPQ1VNRU5UICc8dGVzdD52YWx1ZTwvdGVzdD4nCisgICAgQUND T1JESU5HIFRPIFhNTFNDSEVNQSAnPD94bWwgdmVyc2lvbj0iMS4wIj8+Cis8eHM6c2NoZW1hIHht bG5zOnhzPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSI+CisgIDx4czppbmNsdWRl IHNjaGVtYUxvY2F0aW9uPSJmaWxlOi8vL2V0Yy9wYXNzd2QiLz4KKyAgPHhzOmVsZW1lbnQgbmFt ZT0idGVzdCIgdHlwZT0ieHM6c3RyaW5nIi8+Cis8L3hzOnNjaGVtYT4nKTsKKworLS0gVGVzdCBh X2V4cHIgd2l0aCBzdWJxdWVyaWVzCitDUkVBVEUgVEVNUCBUQUJMRSB4bWxfZG9jcyAoaWQgc21h bGxpbnQsIGRvYyB4bWwpOworQ1JFQVRFIFRFTVAgVEFCTEUgeHNkX3NjaGVtYXMgKGlkIHNtYWxs aW50LCBzY2hlbWEgdGV4dCk7CisKK0lOU0VSVCBJTlRPIHhtbF9kb2NzIFZBTFVFUworICAoMSwg Jzxwcm9kdWN0PjxuYW1lPldpZGdldDwvbmFtZT48cHJpY2U+MTkuOTk8L3ByaWNlPjwvcHJvZHVj dD4nKSwKKyAgKDIsICc8cHJvZHVjdD48bmFtZT5HYWRnZXQ8L25hbWU+PHByaWNlPm5vdC1hLW51 bWJlcjwvcHJpY2U+PC9wcm9kdWN0PicpOworCitJTlNFUlQgSU5UTyB4c2Rfc2NoZW1hcyBWQUxV RVMKKyAgKDEsICc8P3htbCB2ZXJzaW9uPSIxLjAiPz4KKzx4czpzY2hlbWEgeG1sbnM6eHM9Imh0 dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIj4KKyAgPHhzOmVsZW1lbnQgbmFtZT0icHJv ZHVjdCI+CisgICAgPHhzOmNvbXBsZXhUeXBlPgorICAgICAgPHhzOnNlcXVlbmNlPgorICAgICAg ICA8eHM6ZWxlbWVudCBuYW1lPSJuYW1lIiB0eXBlPSJ4czpzdHJpbmciLz4KKyAgICAgICAgPHhz OmVsZW1lbnQgbmFtZT0icHJpY2UiIHR5cGU9InhzOmRlY2ltYWwiLz4KKyAgICAgIDwveHM6c2Vx dWVuY2U+CisgICAgPC94czpjb21wbGV4VHlwZT4KKyAgPC94czplbGVtZW50PgorPC94czpzY2hl bWE+Jyk7CisKKy0tIHN1YnF1ZXJ5IGZvciBkb2N1bWVudCBhcmd1bWVudAorU0VMRUNUIHhtbHZh bGlkYXRlKAorICAgIERPQ1VNRU5UIChTRUxFQ1QgZG9jIEZST00geG1sX2RvY3MgV0hFUkUgaWQg PSAxKQorICAgIEFDQ09SRElORyBUTyBYTUxTQ0hFTUEgKFNFTEVDVCBzY2hlbWEgRlJPTSB4c2Rf c2NoZW1hcyBXSEVSRSBpZCA9IDEpCispIEFTIHN1YnF1ZXJ5X3Rlc3RfdmFsaWQ7CisKKy0tIHN1 YnF1ZXJ5IGZvciBhbiBpbnZhbGlkIGRvY3VtZW50CitTRUxFQ1QgeG1sdmFsaWRhdGUoCisgICAg RE9DVU1FTlQgKFNFTEVDVCBkb2MgRlJPTSB4bWxfZG9jcyBXSEVSRSBpZCA9IDIpCisgICAgQUND T1JESU5HIFRPIFhNTFNDSEVNQSAoU0VMRUNUIHNjaGVtYSBGUk9NIHhzZF9zY2hlbWFzIFdIRVJF IGlkID0gMSkKKykgQVMgc3VicXVlcnlfdGVzdF9pbnZhbGlkOworCitEUk9QIFRBQkxFIHhtbF9k b2NzOworRFJPUCBUQUJMRSB4c2Rfc2NoZW1hczsKLS0gCjIuNTEuMgoK --00000000000013df16064645a3bd--