Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.89) (envelope-from ) id 1hAP2H-0005jd-5i for pgsql-hackers@arkaria.postgresql.org; Sun, 31 Mar 2019 01:13:21 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.89) (envelope-from ) id 1hAP2E-0003we-T8 for pgsql-hackers@arkaria.postgresql.org; Sun, 31 Mar 2019 01:13:18 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.89) (envelope-from ) id 1hAP2D-0003qJ-Ua for pgsql-hackers@lists.postgresql.org; Sun, 31 Mar 2019 01:13:18 +0000 Received: from cyclops.postgrespro.ru ([93.174.131.138] helo=mail.postgrespro.ru) by makus.postgresql.org with esmtp (Exim 4.89) (envelope-from ) id 1hAP28-0006Rt-8Z for pgsql-hackers@postgresql.org; Sun, 31 Mar 2019 01:13:16 +0000 Received: from localhost (localhost [127.0.0.1]) by mail.postgrespro.ru (Postfix) with ESMTP id 8017021C27AC; Sun, 31 Mar 2019 04:13:08 +0300 (MSK) X-Virus-Scanned: Debian amavisd-new at postgrespro.ru X-Spam-Flag: NO X-Spam-Score: 0 X-Spam-Level: X-Spam-Status: No, score=x tagged_above=-99 required=4 WHITELISTED tests=[] autolearn=unavailable Received: from mail.postgrespro.ru (cyclops.l.postgrespro.ru [192.168.27.1]) by mail.postgrespro.ru (Postfix) with ESMTP id C72ED21C1F58; Sun, 31 Mar 2019 04:13:07 +0300 (MSK) MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="=_88cc961307de3421175af21993a11ff4" Date: Sun, 31 Mar 2019 04:13:07 +0300 From: s.cherkashin@postgrespro.ru To: Kyotaro HORIGUCHI Cc: n.gluhov@postgrespro.ru, david@pgmasters.net, michael@paquier.xyz, alvherre@2ndquadrant.com, pgsql-hackers@postgresql.org Subject: Re: Psql patch to show access methods info In-Reply-To: <20190326.201220.229385888.horiguchi.kyotaro@lab.ntt.co.jp> References: <20190308.135236.65082441.horiguchi.kyotaro@lab.ntt.co.jp> <20190326.201220.229385888.horiguchi.kyotaro@lab.ntt.co.jp> Message-ID: X-Sender: s.cherkashin@postgrespro.ru User-Agent: Roundcube Webmail/1.3.8 List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Precedence: bulk --=_88cc961307de3421175af21993a11ff4 Content-Transfer-Encoding: 7bit Content-Type: text/plain; charset=US-ASCII; format=flowed Thanks for review. >> With + it shows description: >> # \dA+ >> List of access methods >> Name | >> Type | Handler | Description >> --------+-------+----------------------+------------------------------- >> --------- >> brin | index | brinhandler | block range index (BRIN) >> access method >> btree | index | bthandler | b-tree index access method >> gin | index | ginhandler | GIN index access method >> gist | index | gisthandler | GiST index access method >> hash | index | hashhandler | hash index access method >> heap | table | heap_tableam_handler | heap table access method >> spgist | index | spghandler | SP-GiST index access method >> (7 rows) > > Looks nice, but this fails for 9.4 or 9.5 server. I'm not sure > how far back versions we should support, though. The command \dA initially displayed an error message when working on a server version below 9.6, and I did not change this logic. I'm not sure, but it probably makes sense for versions 9.4 and 9.5 to output something like this query does: SELECT a.amname AS "AM", d.description AS "Description" FROM pg_am a JOIN pg_description d ON a.oid = d.objoid ORDER BY 1; #\dA AM | Description --------+----------------------------- btree | b-tree index access method gin | GIN index access method gist | GiST index access method hash | hash index access method spgist | SP-GiST index access method SELECT a.amname AS "AM", CASE WHEN a.amcanorder THEN 'yes' ELSE 'no' END AS "Ordering", CASE WHEN a.amcanunique THEN 'yes' ELSE 'no' END AS "Unique indexes", CASE WHEN a.amcanmulticol THEN 'yes' ELSE 'no' END AS "Multicol indexes", CASE WHEN a.amsearchnulls THEN 'yes' ELSE 'no' END AS "Searching NULLs", CASE WHEN a.amclusterable THEN 'yes' ELSE 'no' END AS "Clusterale" FROM pg_am a JOIN pg_description d ON a.oid = d.objoid ORDER BY 1; #dA NAME AM | Ordering | Unique indexes | Multicol indexes | Searching NULLs | Clusterale --------+----------+----------------+------------------+-----------------+------------ btree | yes | yes | yes | yes | yes gin | no | no | yes | no | no gist | no | no | yes | yes | yes hash | no | no | no | no | no spgist | no | no | no | yes | no (5 rows) > >> The functionality of the \dAp command has been moved to \dA NAME. >> Now the user can query the properties of a particular AM (or several, >> using the search pattern) as follows: >> >> # \dA h* >> Index access >> method properties >> AM | Can order | Support unique indexes | Support indexes with >> multiple columns | Support exclusion constraints | Can include non-key >> columns >> ------+-----------+------------------------+--------------------------- >> ------------+-------------------------------+------------------------ >> ----- >> hash | no | no | >> no | yes >> | >> no >> (1 row) > > In the earlier patches they were "Can order", "Can unique", "Can > multi col", "Can exclude" and they indeed look > too-short. Nevertheless the current column names occupies the top > four places on the podium by their length. "Foreign-data wrapeer" > is on the fifth place. Most of them are just one noun. Some of > them are two-or-three-word nouns. Some of them are single-word > adjective followed by '?'. \dicp uses single-word adverbs or > a-few-words nouns without trailing '?'. How about the following? > > 8 Ordering yes/no > 14 Unique indexes yes/no > 16 Multicol indexes yes/no > 21 Exclusion constraints yes/no > 23 Include non-key columns yes/no > ===== > 20 Foreign-data wrapper > > > Does anyone have better wordings? Or, are the current wordings OK? I like this version. >> # \dAo gin jsonb_ops >> List operators of family related to access method >> AM | Opfamily Schema | Opfamily Name | Operator >> -----+-----------------+---------------+-------------------- >> gin | pg_catalog | jsonb_ops | @> (jsonb, jsonb) >> gin | pg_catalog | jsonb_ops | ? (jsonb, text) >> gin | pg_catalog | jsonb_ops | ?| (jsonb, text[]) >> gin | pg_catalog | jsonb_ops | ?& (jsonb, text[]) >> (4 rows) > > I'm not sure but couldn't we show the opfamily name in full > qualified? The schema is not a property of the AM. Now Opfamily Schema is shown if opfamily name is not visible in the current schema search path (check by pg_opfamily_is_visible(). > >> # \dAo+ gist circle_ops >> List operators of family related to access >> method >> AM | Opfamily Schema | Opfamily Name | Operator | >> Strategy | Purpose | Sort family >> ------+-----------------+---------------+----------------------+------- >> ---+----------+------------- >> gist | pg_catalog | circle_ops | << (circle, >> circle) | 1 | search | >> ... >> gist | pg_catalog | circle_ops | <-> (circle, >> point) | 15 | ordering | float_ops > > "Sort family" doesn't make sense. "Sort opfamily" or "Sort > operator family"? Renamed. >> The \dAop command has been renamed to \dAp. >> It displays list of support procedures associated with access method >> operator families. >> # \dAp hash array_ops >> List of operator family procedures >> AM | Family schema | Family name | Left | Right | Number >> ------+---------------+-------------+----------+----------+-------- >> hash | pg_catalog | array_ops | anyarray | anyarray | 1 >> hash | pg_catalog | array_ops | anyarray | anyarray | 2 >> (2 rows) >> >> # \dAp+ hash array_ops >> List of operator family procedures >> AM | Family schema | Family name | Left | Right | Number >> | Proc name >> ------+---------------+-------------+----------+----------+--------+--- >> ------------------ >> hash | pg_catalog | array_ops | anyarray | anyarray | 1 | >> hash_array >> hash | pg_catalog | array_ops | anyarray | anyarray | 2 | >> hash_array_extended >> (2 rows) >> >> It may be easier for the user to navigate in this list if the defining >> feature in addition to the number is also the procedure name. >> Even if it does not carry important information, it improves the >> readability of the list. Maybe it makes sense to return field "Proc >> name" to the main output? > > "Number", "Proc name" doens't seem descriptive enough. It is > mentioned as support function number in the documentation. The > "Left" and "Right" are not necessarily parameter types of "Proc > name". But I don't come up with better namings. It is a bit > different thing, but "Left/Right arg type" is used elsewhere as > parameter types. > > How about "AM", "Operator family", "Left arg type", "Right arg > type" and "Support function number", "Support function"? The > second from the last is 23 characters long. It could be "Support > number" instead. I have no better idea how to improve naming so I used the names you suggested. > >> 0002-psql_add_index_info-v5.patch >> > I'm fine with this, but fails for 9.4 and 9.5. Also \dicp fails. Maybe I missed something, but it works well on 9.4 and 9.5 for me. Regards, Sergey Cherkashin. --=_88cc961307de3421175af21993a11ff4 Content-Transfer-Encoding: base64 Content-Type: text/x-diff; name=0001-psql_add_am_info-v6.patch Content-Disposition: attachment; filename=0001-psql_add_am_info-v6.patch; size=29520 ZGlmZiAtLWdpdCBhL2RvYy9zcmMvc2dtbC9jYXRhbG9ncy5zZ21sIGIvZG9jL3NyYy9zZ21sL2Nh dGFsb2dzLnNnbWwKaW5kZXggZjRhYWJmNWRjNy4uOWVkMGY4Mzk5NiAxMDA2NDQKLS0tIGEvZG9j L3NyYy9zZ21sL2NhdGFsb2dzLnNnbWwKKysrIGIvZG9jL3NyYy9zZ21sL2NhdGFsb2dzLnNnbWwK QEAgLTY3NSw3ICs2NzUsNyBAQAogICAgc2VhcmNoIGFuZCBvcmRlcmluZyBwdXJwb3Nlcy4pCiAg IDwvcGFyYT4KIAotICA8dGFibGU+CisgIDx0YWJsZSBpZD0iY2F0YWxvZy1wZy1hbW9wLXRhYmxl Ij4KICAgIDx0aXRsZT48c3RydWN0bmFtZT5wZ19hbW9wPC9zdHJ1Y3RuYW1lPiBDb2x1bW5zPC90 aXRsZT4KIAogICAgPHRncm91cCBjb2xzPSI0Ij4KQEAgLTgxOCw3ICs4MTgsNyBAQAogICAgaXMg b25lIHJvdyBmb3IgZWFjaCBzdXBwb3J0IGZ1bmN0aW9uIGJlbG9uZ2luZyB0byBhbiBvcGVyYXRv ciBmYW1pbHkuCiAgIDwvcGFyYT4KIAotICA8dGFibGU+CisgIDx0YWJsZSBpZD0iY2F0YWxvZy1w Zy1hbXByb2MtdGFibGUiPgogICAgPHRpdGxlPjxzdHJ1Y3RuYW1lPnBnX2FtcHJvYzwvc3RydWN0 bmFtZT4gQ29sdW1uczwvdGl0bGU+CiAKICAgIDx0Z3JvdXAgY29scz0iNCI+CkBAIC00NDU4LDcg KzQ0NTgsNyBAQCBTQ1JBTS1TSEEtMjU2JDxyZXBsYWNlYWJsZT4mbHQ7aXRlcmF0aW9uIGNvdW50 Jmd0OzwvcmVwbGFjZWFibGU+OjxyZXBsYWNlYWJsZT4mbAogICAgT3BlcmF0b3IgY2xhc3NlcyBh cmUgZGVzY3JpYmVkIGF0IGxlbmd0aCBpbiA8eHJlZiBsaW5rZW5kPSJ4aW5kZXgiLz4uCiAgIDwv cGFyYT4KIAotICA8dGFibGU+CisgIDx0YWJsZSBpZD0iY2F0YWxvZy1wZy1vcGNsYXNzLXRhYmxl Ij4KICAgIDx0aXRsZT48c3RydWN0bmFtZT5wZ19vcGNsYXNzPC9zdHJ1Y3RuYW1lPiBDb2x1bW5z PC90aXRsZT4KIAogICAgPHRncm91cCBjb2xzPSI0Ij4KQEAgLTQ3MjAsNyArNDcyMCw3IEBAIFND UkFNLVNIQS0yNTYkPHJlcGxhY2VhYmxlPiZsdDtpdGVyYXRpb24gY291bnQmZ3Q7PC9yZXBsYWNl YWJsZT46PHJlcGxhY2VhYmxlPiZsCiAgICBPcGVyYXRvciBmYW1pbGllcyBhcmUgZGVzY3JpYmVk IGF0IGxlbmd0aCBpbiA8eHJlZiBsaW5rZW5kPSJ4aW5kZXgiLz4uCiAgIDwvcGFyYT4KIAotICA8 dGFibGU+CisgIDx0YWJsZSBpZD0iY2F0YWxvZy1wZy1vcGZhbWlseS10YWJsZSI+CiAgICA8dGl0 bGU+PHN0cnVjdG5hbWU+cGdfb3BmYW1pbHk8L3N0cnVjdG5hbWU+IENvbHVtbnM8L3RpdGxlPgog CiAgICA8dGdyb3VwIGNvbHM9IjQiPgpkaWZmIC0tZ2l0IGEvZG9jL3NyYy9zZ21sL3JlZi9wc3Fs LXJlZi5zZ21sIGIvZG9jL3NyYy9zZ21sL3JlZi9wc3FsLXJlZi5zZ21sCmluZGV4IDFiNWQ4MmVk OGUuLmRhODVmNjM0MDAgMTAwNjQ0Ci0tLSBhL2RvYy9zcmMvc2dtbC9yZWYvcHNxbC1yZWYuc2dt bAorKysgYi9kb2Mvc3JjL3NnbWwvcmVmL3BzcWwtcmVmLnNnbWwKQEAgLTEyMTksMTEgKzEyMTks ODIgQEAgdGVzdGRiPSZndDsKIAogICAgICAgICA8bGlzdGl0ZW0+CiAgICAgICAgIDxwYXJhPgot ICAgICAgICBMaXN0cyBhY2Nlc3MgbWV0aG9kcy4gSWYgPHJlcGxhY2VhYmxlCi0gICAgICAgIGNs YXNzPSJwYXJhbWV0ZXIiPnBhdHRlcm48L3JlcGxhY2VhYmxlPiBpcyBzcGVjaWZpZWQsIG9ubHkg YWNjZXNzCi0gICAgICAgIG1ldGhvZHMgd2hvc2UgbmFtZXMgbWF0Y2ggdGhlIHBhdHRlcm4gYXJl IHNob3duLiBJZgotICAgICAgICA8bGl0ZXJhbD4rPC9saXRlcmFsPiBpcyBhcHBlbmRlZCB0byB0 aGUgY29tbWFuZCBuYW1lLCBlYWNoIGFjY2VzcwotICAgICAgICBtZXRob2QgaXMgbGlzdGVkIHdp dGggaXRzIGFzc29jaWF0ZWQgaGFuZGxlciBmdW5jdGlvbiBhbmQgZGVzY3JpcHRpb24uCisgICAg ICAgIExpc3RzIGFjY2VzcyBtZXRob2RzIHdpdGggdGhlaXIgYXNzb2NpYXRlZCBoYW5kbGVyIGZ1 bmN0aW9uLiBJZgorICAgICAgICA8bGl0ZXJhbD4rPC9saXRlcmFsPiBpcyBhcHBlbmRlZCB0byB0 aGUgY29tbWFuZCBuYW1lLCBhZGRpdGlvbmFsCisgICAgICAgIGRlc2NyaXB0aW9uIGlzIHByb3Zp ZGVkLgorICAgICAgICBJZiA8cmVwbGFjZWFibGUgY2xhc3M9InBhcmFtZXRlciI+cGF0dGVybjwv cmVwbGFjZWFibGU+IGlzIHNwZWNpZmllZCwKKyAgICAgICAgdGhlIGNvbW1hbmQgZGlzcGxheXMg dGhlIHByb3BlcnRpZXMgb2YgdGhlIGFjY2VzcyBtZXRob2RzIHdob3NlIG5hbWVzCisgICAgICAg IG1hdGNoIHRoZSBzZWFyY2ggcGF0dGVybi4KKyAgICAgICAgPC9wYXJhPgorICAgICAgICA8L2xp c3RpdGVtPgorICAgICAgPC92YXJsaXN0ZW50cnk+CisKKyAgICAgIDx2YXJsaXN0ZW50cnk+Cisg ICAgICAgIDx0ZXJtPgorICAgICAgICAgIDxsaXRlcmFsPlxkQWNbK10KKyAgICAgICAgICAgIFs8 bGluayBsaW5rZW5kPSJhcHAtcHNxbC1wYXR0ZXJucyI+PHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJh bWV0ZXIiPmFjY2Vzcy1tZXRob2QtcGF0dGVybjwvcmVwbGFjZWFibGU+PC9saW5rPgorICAgICAg ICAgICAgICBbPGxpbmsgbGlua2VuZD0iYXBwLXBzcWwtcGF0dGVybnMiPjxyZXBsYWNlYWJsZSBj bGFzcz0icGFyYW1ldGVyIj5pbnB1dC10eXBlLXBhdHRlcm48L3JlcGxhY2VhYmxlPjwvbGluaz5d XQorICAgICAgICAgIDwvbGl0ZXJhbD4KKyAgICAgICAgPC90ZXJtPgorICAgICAgICA8bGlzdGl0 ZW0+CisgICAgICAgIDxwYXJhPgorICAgICAgICBTaG93cyBpbmZvIGluZGV4IGFjY2VzcyBtZXRo b2Qgb3BlcmF0b3IgY2xhc3NlcyBsaXN0ZWQgaW4KKyAgICAgICAgPHhyZWYgbGlua2VuZD0iY2F0 YWxvZy1wZy1vcGNsYXNzLXRhYmxlIi8+LgorICAgICAgICBJZiA8cmVwbGFjZWFibGUgY2xhc3M9 InBhcmFtZXRlciI+YWNjZXNzLW1ldGhvZC1wYXR0dGVybjwvcmVwbGFjZWFibGU+CisgICAgICAg IGlzIHNwZWNpZmllZCwgb25seSBvcGVyYXRvciBjbGFzc2VzIGFzc29jaWF0ZWQgd2l0aCBhY2Nl c3MgbWV0aG9kIHdob3NlCisgICAgICAgIG5hbWUgbWF0Y2hlcyBwYXR0ZXJuIGFyZSBzaG93bi4K KyAgICAgICAgSWYgPHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPmlucHV0LXR5cGUtcGF0 dGVybjwvcmVwbGFjZWFibGU+CisgICAgICAgIGlzIHNwZWNpZmllZCwgb25seSBwcm9jZWR1cmVz IGFzc29jaWF0ZWQgd2l0aCBmYW1pbGllcyB3aG9zZSBpbnB1dCB0eXBlCisgICAgICAgIG1hdGNo ZXMgdGhlIHBhdHRlcm4gYXJlIHNob3duLgorICAgICAgICBJZiA8bGl0ZXJhbD4rPC9saXRlcmFs PiBpcyBhcHBlbmRlZCB0byB0aGUgY29tbWFuZCBuYW1lLCBvcGVyYXRvciBmYW1pbHkKKyAgICAg ICAgYW5kIG93bmVyIGFyZSBsaXN0ZWQuCisgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9saXN0 aXRlbT4KKyAgICAgIDwvdmFybGlzdGVudHJ5PgorCisgICAgICA8dmFybGlzdGVudHJ5PgorICAg ICAgICA8dGVybT4KKyAgICAgICAgICA8bGl0ZXJhbD5cZEFvWytdCisgICAgICAgICAgICBbPGxp bmsgbGlua2VuZD0iYXBwLXBzcWwtcGF0dGVybnMiPjxyZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1l dGVyIj5hY2Nlc3MtbWV0aG9kLXBhdHRlcm48L3JlcGxhY2VhYmxlPjwvbGluaz4KKyAgICAgICAg ICAgICAgWzxsaW5rIGxpbmtlbmQ9ImFwcC1wc3FsLXBhdHRlcm5zIj48cmVwbGFjZWFibGUgY2xh c3M9InBhcmFtZXRlciI+b3BlcmF0b3ItZmFtaWx5LXBhdHRlcm48L3JlcGxhY2VhYmxlPjwvbGlu az5dXQorICAgICAgICAgIDwvbGl0ZXJhbD4KKyAgICAgICAgPC90ZXJtPgorCisgICAgICAgIDxs aXN0aXRlbT4KKyAgICAgICAgPHBhcmE+CisgICAgICAgIExpc3RzIG9wZXJhdG9ycyAoPHhyZWYg bGlua2VuZD0iY2F0YWxvZy1wZy1hbW9wLXRhYmxlIi8+KSBhc3NvY2lhdGVkCisgICAgICAgIHdp dGggYWNjZXNzIG1ldGhvZCBvcGVyYXRvciBmYW1pbGllcy4gSWYKKyAgICAgICAgPHJlcGxhY2Vh YmxlIGNsYXNzPSJwYXJhbWV0ZXIiPmFjY2Vzcy1tZXRob2QtcGF0dHRlcm48L3JlcGxhY2VhYmxl PiBpcworICAgICAgICBzcGVjaWZpZWQsIG9ubHkgb3BlcmF0b3JzIGFzc29jaWF0ZWQgd2l0aCBh Y2Nlc3MgbWV0aG9kIHdob3NlIG5hbWUKKyAgICAgICAgbWF0Y2hlcyBwYXR0ZXJuIGFyZSBzaG93 bi4gSWYKKyAgICAgICAgPHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPm9wZXJhdG9yLWZh bWlseS1wYXR0ZXJuPC9yZXBsYWNlYWJsZT4gaXMKKyAgICAgICAgc3BlY2lmaWVkLCBvbmx5IG9w ZXJhdG9ycyBhc3NvY2lhdGVkIHdpdGggZmFtaWxpZXMgd2hvc2UgbmFtZSBtYXRjaGVzCisgICAg ICAgIHRoZSBwYXR0ZXJuIGFyZSBzaG93bi4KKyAgICAgICAgSWYgPGxpdGVyYWw+KzwvbGl0ZXJh bD4gaXMgYXBwZW5kZWQgdG8gdGhlIGNvbW1hbmQgbmFtZSwgZGlzcGxheXMKKyAgICAgICAgYWRk aXRpb25hbCBpbmZvLgorICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvbGlzdGl0ZW0+CisgICAg ICA8L3Zhcmxpc3RlbnRyeT4KKworICAgICAgPHZhcmxpc3RlbnRyeT4KKyAgICAgICAgPHRlcm0+ CisgICAgICAgICAgPGxpdGVyYWw+XGRBcFsrXQorICAgICAgICAgICAgWzxsaW5rIGxpbmtlbmQ9 ImFwcC1wc3FsLXBhdHRlcm5zIj48cmVwbGFjZWFibGUgY2xhc3M9InBhcmFtZXRlciI+YWNjZXNz LW1ldGhvZC1wYXR0ZXJuPC9yZXBsYWNlYWJsZT48L2xpbms+CisgICAgICAgICAgICAgIFs8bGlu ayBsaW5rZW5kPSJhcHAtcHNxbC1wYXR0ZXJucyI+PHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0 ZXIiPm9wZXJhdG9yLWZhbWlseS1wYXR0ZXJuPC9yZXBsYWNlYWJsZT48L2xpbms+XV0KKyAgICAg ICAgICA8L2xpdGVyYWw+CisgICAgICAgIDwvdGVybT4KKyAgICAgICAgPGxpc3RpdGVtPgorICAg ICAgICA8cGFyYT4KKyAgICAgICAgTGlzdHMgcHJvY2VkdXJlcyAoPHhyZWYgbGlua2VuZD0iY2F0 YWxvZy1wZy1hbXByb2MtdGFibGUiLz4pIGFzc29jaWF0ZWQKKyAgICAgICAgd2l0aCBhY2Nlc3Mg bWV0aG9kIG9wZXJhdG9yIGZhbWlsaWVzLgorICAgICAgICBJZiA8cmVwbGFjZWFibGUgY2xhc3M9 InBhcmFtZXRlciI+YWNjZXNzLW1ldGhvZC1wYXR0dGVybjwvcmVwbGFjZWFibGU+CisgICAgICAg IGlzIHNwZWNpZmllZCwgb25seSBwcm9jZWR1cmVzIGFzc29jaWF0ZWQgd2l0aCBhY2Nlc3MgbWV0 aG9kIHdob3NlIG5hbWUKKyAgICAgICAgbWF0Y2hlcyBwYXR0ZXJuIGFyZSBzaG93bi4KKyAgICAg ICAgSWYgPHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPm9wZXJhdG9yLWZhbWlseS1wYXR0 ZXJuPC9yZXBsYWNlYWJsZT4KKyAgICAgICAgaXMgc3BlY2lmaWVkLCBvbmx5IHByb2NlZHVyZXMg YXNzb2NpYXRlZCB3aXRoIGZhbWlsaWVzIHdob3NlIG5hbWUKKyAgICAgICAgbWF0Y2hlcyB0aGUg cGF0dGVybiBhcmUgc2hvd24uCisgICAgICAgIElmIDxsaXRlcmFsPis8L2xpdGVyYWw+IGlzIGFw cGVuZGVkIHRvIHRoZSBjb21tYW5kIG5hbWUsIHByb2NlZHVyZXMKKyAgICAgICAgbGlzdGVkIHdp dGggaXRzIG5hbWVzLgogICAgICAgICA8L3BhcmE+CiAgICAgICAgIDwvbGlzdGl0ZW0+CiAgICAg ICA8L3Zhcmxpc3RlbnRyeT4KZGlmZiAtLWdpdCBhL3NyYy9iaW4vcHNxbC9jb21tYW5kLmMgYi9z cmMvYmluL3BzcWwvY29tbWFuZC5jCmluZGV4IGFiMjU5YzQ3M2EuLjdiNTdjN2NiNDkgMTAwNjQ0 Ci0tLSBhL3NyYy9iaW4vcHNxbC9jb21tYW5kLmMKKysrIGIvc3JjL2Jpbi9wc3FsL2NvbW1hbmQu YwpAQCAtNzE5LDcgKzcxOSwyNSBAQCBleGVjX2NvbW1hbmRfZChQc3FsU2NhblN0YXRlIHNjYW5f c3RhdGUsIGJvb2wgYWN0aXZlX2JyYW5jaCwgY29uc3QgY2hhciAqY21kKQogCQkJCQlzdWNjZXNz ID0gbGlzdFRhYmxlcygidHZtc0UiLCBOVUxMLCBzaG93X3ZlcmJvc2UsIHNob3dfc3lzdGVtKTsK IAkJCQlicmVhazsKIAkJCWNhc2UgJ0EnOgotCQkJCXN1Y2Nlc3MgPSBkZXNjcmliZUFjY2Vzc01l dGhvZHMocGF0dGVybiwgc2hvd192ZXJib3NlKTsKKwkJCQl7CisJCQkJCWNoYXIJICAgKnBhdHRl cm4yID0gTlVMTDsKKwkJCQkJaWYgKHBhdHRlcm4pCisJCQkJCQlwYXR0ZXJuMiA9IHBzcWxfc2Nh bl9zbGFzaF9vcHRpb24oc2Nhbl9zdGF0ZSwgT1RfTk9STUFMLCBOVUxMLCB0cnVlKTsKKworCQkJ CQlpZiAoc3RybmNtcChjbWQsICJkQW8iLCAzKSA9PSAwKQorCQkJCQkJc3VjY2VzcyA9IGxpc3RG YW1pbHlDbGFzc09wZXJhdG9ycyhwYXR0ZXJuLCBwYXR0ZXJuMiwgc2hvd192ZXJib3NlKTsKKwkJ CQkJZWxzZSBpZiAoc3RybmNtcChjbWQsICJkQXAiLCAzKSA9PSAwKQorCQkJCQkJc3VjY2VzcyA9 IGxpc3RPcGVyYXRvckZhbWlseVByb2NlZHVyZXMocGF0dGVybiwgcGF0dGVybjIsIHNob3dfdmVy Ym9zZSk7CisJCQkJCWVsc2UgaWYgKHN0cm5jbXAoY21kLCAiZEFjIiwgMykgPT0gMCkKKwkJCQkJ CXN1Y2Nlc3MgPSBkZXNjcmliZUFjY2Vzc01ldGhvZE9wZXJhdG9yQ2xhc3NlcyhwYXR0ZXJuLCBw YXR0ZXJuMiwgc2hvd192ZXJib3NlKTsKKwkJCQkJZWxzZSBpZiAocGF0dGVybikKKwkJCQkJCXN1 Y2Nlc3MgPSBkZXNjcmliZUFjY2Vzc01ldGhvZFByb3BlcnRpZXMocGF0dGVybik7CisJCQkJCWVs c2UKKwkJCQkJCXN1Y2Nlc3MgPSBsaXN0QWNjZXNzTWV0aG9kcyhzaG93X3ZlcmJvc2UpOworCisJ CQkJCWlmIChwYXR0ZXJuMikKKwkJCQkJCWZyZWUocGF0dGVybjIpOworCQkJCX0KIAkJCQlicmVh azsKIAkJCWNhc2UgJ2EnOgogCQkJCXN1Y2Nlc3MgPSBkZXNjcmliZUFnZ3JlZ2F0ZXMocGF0dGVy biwgc2hvd192ZXJib3NlLCBzaG93X3N5c3RlbSk7CmRpZmYgLS1naXQgYS9zcmMvYmluL3BzcWwv ZGVzY3JpYmUuYyBiL3NyYy9iaW4vcHNxbC9kZXNjcmliZS5jCmluZGV4IGY5NGE3YTljMzAuLmQz ZTM0OTQ5OGYgMTAwNjQ0Ci0tLSBhL3NyYy9iaW4vcHNxbC9kZXNjcmliZS5jCisrKyBiL3NyYy9i aW4vcHNxbC9kZXNjcmliZS5jCkBAIC0xNCw2ICsxNCw3IEBACiAKICNpbmNsdWRlIDxjdHlwZS5o PgogCisjaW5jbHVkZSAiY2F0YWxvZy9wZ19hbS5oIgogI2luY2x1ZGUgImNhdGFsb2cvcGdfYXR0 cmlidXRlX2QuaCIKICNpbmNsdWRlICJjYXRhbG9nL3BnX2Nhc3RfZC5oIgogI2luY2x1ZGUgImNh dGFsb2cvcGdfY2xhc3NfZC5oIgpAQCAtMTQ2LDcgKzE0Nyw3IEBAIGRlc2NyaWJlQWdncmVnYXRl cyhjb25zdCBjaGFyICpwYXR0ZXJuLCBib29sIHZlcmJvc2UsIGJvb2wgc2hvd1N5c3RlbSkKICAq IFRha2VzIGFuIG9wdGlvbmFsIHJlZ2V4cCB0byBzZWxlY3QgcGFydGljdWxhciBhY2Nlc3MgbWV0 aG9kcwogICovCiBib29sCi1kZXNjcmliZUFjY2Vzc01ldGhvZHMoY29uc3QgY2hhciAqcGF0dGVy biwgYm9vbCB2ZXJib3NlKQorbGlzdEFjY2Vzc01ldGhvZHMoYm9vbCB2ZXJib3NlKQogewogCVBR RXhwQnVmZmVyRGF0YSBidWY7CiAJUEdyZXN1bHQgICAqcmVzOwpAQCAtMTY4LDMxICsxNjksMjMg QEAgZGVzY3JpYmVBY2Nlc3NNZXRob2RzKGNvbnN0IGNoYXIgKnBhdHRlcm4sIGJvb2wgdmVyYm9z ZSkKIAlwcmludGZQUUV4cEJ1ZmZlcigmYnVmLAogCQkJCQkgICJTRUxFQ1QgYW1uYW1lIEFTIFwi JXNcIixcbiIKIAkJCQkJICAiICBDQVNFIGFtdHlwZSIKLQkJCQkJICAiIFdIRU4gJ2knIFRIRU4g JyVzJyIKLQkJCQkJICAiIFdIRU4gJ3QnIFRIRU4gJyVzJyIKLQkJCQkJICAiIEVORCBBUyBcIiVz XCIiLAorCQkJCQkgICIgICAgV0hFTiAnaScgVEhFTiAnJXMnIgorCQkJCQkgICIgICAgV0hFTiAn dCcgVEhFTiAnJXMnIgorCQkJCQkgICIgIEVORCBBUyBcIiVzXCIsXG4iCisJCQkJCSAgIiAgYW1o YW5kbGVyIEFTIFwiJXNcIiIsCiAJCQkJCSAgZ2V0dGV4dF9ub29wKCJOYW1lIiksCi0JCQkJCSAg Z2V0dGV4dF9ub29wKCJJbmRleCIpLAotCQkJCQkgIGdldHRleHRfbm9vcCgiVGFibGUiKSwKLQkJ CQkJICBnZXR0ZXh0X25vb3AoIlR5cGUiKSk7CisJCQkJCSAgZ2V0dGV4dF9ub29wKCJpbmRleCIp LAorCQkJCQkgIGdldHRleHRfbm9vcCgidGFibGUiKSwKKwkJCQkJICBnZXR0ZXh0X25vb3AoIlR5 cGUiKSwKKwkJCQkJICBnZXR0ZXh0X25vb3AoIkhhbmRsZXIiKSk7CiAKIAlpZiAodmVyYm9zZSkK LQl7CiAJCWFwcGVuZFBRRXhwQnVmZmVyKCZidWYsCi0JCQkJCQkgICIsXG4gIGFtaGFuZGxlciBB UyBcIiVzXCIsXG4iCi0JCQkJCQkgICIgIHBnX2NhdGFsb2cub2JqX2Rlc2NyaXB0aW9uKG9pZCwg J3BnX2FtJykgQVMgXCIlc1wiIiwKLQkJCQkJCSAgZ2V0dGV4dF9ub29wKCJIYW5kbGVyIiksCisJ CQkJCQkgICIsXG4gIHBnX2NhdGFsb2cub2JqX2Rlc2NyaXB0aW9uKG9pZCwgJ3BnX2FtJykgQVMg XCIlc1wiIiwKIAkJCQkJCSAgZ2V0dGV4dF9ub29wKCJEZXNjcmlwdGlvbiIpKTsKLQl9Ci0KIAlh cHBlbmRQUUV4cEJ1ZmZlclN0cigmYnVmLAotCQkJCQkJICJcbkZST00gcGdfY2F0YWxvZy5wZ19h bVxuIik7Ci0KLQlwcm9jZXNzU1FMTmFtZVBhdHRlcm4ocHNldC5kYiwgJmJ1ZiwgcGF0dGVybiwg ZmFsc2UsIGZhbHNlLAotCQkJCQkJICBOVUxMLCAiYW1uYW1lIiwgTlVMTCwKLQkJCQkJCSAgTlVM TCk7Ci0KLQlhcHBlbmRQUUV4cEJ1ZmZlclN0cigmYnVmLCAiT1JERVIgQlkgMTsiKTsKKwkJCQkJ CSAiXG5GUk9NIHBnX2NhdGFsb2cucGdfYW1cbiIKKwkJCQkJCSAiT1JERVIgQlkgMTsiKTsKIAog CXJlcyA9IFBTUUxleGVjKGJ1Zi5kYXRhKTsKIAl0ZXJtUFFFeHBCdWZmZXIoJmJ1Zik7CkBAIC01 NzQwLDMgKzU3MzMsMzg2IEBAIHByaW50QUNMQ29sdW1uKFBRRXhwQnVmZmVyIGJ1ZiwgY29uc3Qg Y2hhciAqY29sbmFtZSkKIAkJCQkJCSAgInBnX2NhdGFsb2cuYXJyYXlfdG9fc3RyaW5nKCVzLCAn XFxuJykgQVMgXCIlc1wiIiwKIAkJCQkJCSAgY29sbmFtZSwgZ2V0dGV4dF9ub29wKCJBY2Nlc3Mg cHJpdmlsZWdlcyIpKTsKIH0KKworLyoKKyAqIFxkQSBOQU1FCisgKiBEZXNjcmliZXMgYWNjZXNz IG1ldGhvZCBwcm9wZXJ0aWVzLgorICoKKyAqIFRha2VzIGFuIG9wdGlvbmFsIHJlZ2V4cCB0byBz ZWxlY3QgcGFydGljdWxhciBhY2Nlc3MgbWV0aG9kcworICovCitib29sCitkZXNjcmliZUFjY2Vz c01ldGhvZFByb3BlcnRpZXMoY29uc3QgY2hhciAqcGF0dGVybikKK3sKKwlQUUV4cEJ1ZmZlckRh dGEgYnVmOworCVBHcmVzdWx0CSAgICpyZXM7CisJYm9vbAkJCWZvdW5kX3Jlc3VsdCA9IGZhbHNl OworCXByaW50UXVlcnlPcHQgbXlvcHQgPSBwc2V0LnBvcHQ7CisJc3RhdGljIGNvbnN0IGJvb2wg dHJhbnNsYXRlX2NvbHVtbnNfaVtdID0ge3RydWUsIHRydWUsIHRydWUsIHRydWUsIHRydWUsIHRy dWV9OworCXN0YXRpYyBjb25zdCBib29sIHRyYW5zbGF0ZV9jb2x1bW5zX3RbXSA9IHt0cnVlLCB0 cnVlLCB0cnVlLCB0cnVlfTsKKworCWlmIChwc2V0LnN2ZXJzaW9uIDwgOTA2MDApCisJeworCQlj aGFyCQlzdmVyYnVmWzMyXTsKKworCQlwc3FsX2Vycm9yKCJUaGUgc2VydmVyICh2ZXJzaW9uICVz KSBkb2VzIG5vdCBzdXBwb3J0IGFjY2VzcyBtZXRob2RzLlxuIiwKKwkJCQkgICBmb3JtYXRQR1Zl cnNpb25OdW1iZXIocHNldC5zdmVyc2lvbiwgZmFsc2UsCisJCQkJCQkJCQkJIHN2ZXJidWYsIHNp emVvZihzdmVyYnVmKSkpOworCQlyZXR1cm4gdHJ1ZTsKKwl9CisKKwlpbml0UFFFeHBCdWZmZXIo JmJ1Zik7CisKKwlwcmludGZQUUV4cEJ1ZmZlcigmYnVmLAorCQkJCQkgIHBzZXQuc3ZlcnNpb24g Pj0gOTA2MDAgPworCQkJCQkgICJTRUxFQ1QgYS5hbW5hbWUgQVMgXCIlMSRzXCIsXG4iCisJCQkJ CSAgIiAgQ0FTRSBXSEVOIHBnX2NhdGFsb2cucGdfaW5kZXhhbV9oYXNfcHJvcGVydHkoYS5vaWQs ICdjYW5fb3JkZXInKVxuIgorCQkJCQkgICIgICAgVEhFTiAnJTIkcycgRUxTRSAnJTMkcycgRU5E IEFTIFwiJTQkc1wiLFxuIgorCQkJCQkgICIgIENBU0UgV0hFTiBwZ19jYXRhbG9nLnBnX2luZGV4 YW1faGFzX3Byb3BlcnR5KGEub2lkLCAnY2FuX3VuaXF1ZScpXG4iCisJCQkJCSAgIiAgICBUSEVO ICclMiRzJyBFTFNFICclMyRzJyBFTkQgQVMgXCIlNSRzXCIsXG4iCisJCQkJCSAgIiAgQ0FTRSBX SEVOIHBnX2NhdGFsb2cucGdfaW5kZXhhbV9oYXNfcHJvcGVydHkoYS5vaWQsICdjYW5fbXVsdGlf Y29sJylcbiIKKwkJCQkJICAiICAgIFRIRU4gJyUyJHMnIEVMU0UgJyUzJHMnIEVORCBBUyBcIiU2 JHNcIixcbiIKKwkJCQkJICAiICBDQVNFIFdIRU4gcGdfY2F0YWxvZy5wZ19pbmRleGFtX2hhc19w cm9wZXJ0eShhLm9pZCwgJ2Nhbl9leGNsdWRlJylcbiIKKwkJCQkJICAiICAgIFRIRU4gJyUyJHMn IEVMU0UgJyUzJHMnIEVORCBBUyBcIiU3JHNcIixcbiIKKwkJCQkJICA6CisJCQkJCSAgIlNFTEVD VCBhLmFtbmFtZSBBUyBcIiUxJHNcIixcbiIKKwkJCQkJICAiICBDQVNFIFdIRU4gYS5hbWNhbm9y ZGVyIFRIRU4gJyUyJHMnIEVMU0UgJyUzJHMnIEVORCBBUyBcIiU0JHNcIixcbiIKKwkJCQkJICAi ICBDQVNFIFdIRU4gYS5hbWNhbnVuaXF1ZSBUSEVOICclMiRzJyBFTFNFICclMyRzJyBFTkQgQVMg XCIlNSRzXCIsXG4iCisJCQkJCSAgIiAgQ0FTRSBXSEVOIGEuYW1jYW5tdWx0aWNvbCBUSEVOICcl MiRzJyBFTFNFICclMyRzJyBFTkQgQVMgXCIlNiRzXCIsXG4iCisJCQkJCSAgIiAgQ0FTRSBXSEVO IGEuYW1nZXR0dXBsZSA8PiAwIFRIRU4gJyUyJHMnIEVMU0UgJyUzJHMnIEVORCBBUyBcIiU3JHNc IixcbiIsCisJCQkJCSAgZ2V0dGV4dF9ub29wKCJBTSIpLAorCQkJCQkgIGdldHRleHRfbm9vcCgi eWVzIiksCisJCQkJCSAgZ2V0dGV4dF9ub29wKCJubyIpLAorCQkJCQkgIGdldHRleHRfbm9vcCgi T3JkZXJpbmciKSwKKwkJCQkJICBnZXR0ZXh0X25vb3AoIlVuaXF1ZSBpbmRleGVzIiksCisJCQkJ CSAgZ2V0dGV4dF9ub29wKCJNdWx0aWNvbCBpbmRleGVzIiksCisJCQkJCSAgZ2V0dGV4dF9ub29w KCJFeGNsdXNpb24gY29uc3RyYWludHMiKSk7CisKKwlhcHBlbmRQUUV4cEJ1ZmZlcigmYnVmLAor CQkJCQkgIHBzZXQuc3ZlcnNpb24gPj0gMTEwMDAwCisJCQkJCQk/ICIgIENBU0UgV0hFTiBwZ19j YXRhbG9nLnBnX2luZGV4YW1faGFzX3Byb3BlcnR5KGEub2lkLCAnY2FuX2luY2x1ZGUnKVxuIgor CQkJCQkJICAiICAgIFRIRU4gJyUxJHMnIEVMU0UgJyUyJHMnIEVORCBBUyBcIiUzJHNcIiIKKwkJ CQkJCTogIiAgQ0FTRSBXSEVOIGZhbHNlIFRIRU4gJyUxJHMnIEVMU0UgJyUyJHMnIEVORCBBUyBc IiUzJHNcIiIsCisJCQkJCSAgZ2V0dGV4dF9ub29wKCJ5ZXMiKSwgZ2V0dGV4dF9ub29wKCJubyIp LAorCQkJCQkgIGdldHRleHRfbm9vcCgiSW5jbHVkZSBub24ta2V5IGNvbHVtbnMiKSk7CisKKwlh cHBlbmRQUUV4cEJ1ZmZlclN0cigmYnVmLAorCQkJCQkJICJcbkZST00gcGdfY2F0YWxvZy5wZ19h bSBhXG4iCisJCQkJCQkgIiAgV0hFUkUgYS5hbXR5cGUgPSAnaSdcbiIpOworCisJcHJvY2Vzc1NR TE5hbWVQYXR0ZXJuKHBzZXQuZGIsICZidWYsIHBhdHRlcm4sIHRydWUsIGZhbHNlLAorCQkJCQkJ ICBOVUxMLCAiYW1uYW1lIiwgTlVMTCwgTlVMTCk7CisKKwlhcHBlbmRQUUV4cEJ1ZmZlclN0cigm YnVmLCAiT1JERVIgQlkgMTsiKTsKKwlyZXMgPSBQU1FMZXhlYyhidWYuZGF0YSk7CisJdGVybVBR RXhwQnVmZmVyKCZidWYpOworCWlmICghcmVzKQorCQlyZXR1cm4gZmFsc2U7CisKKwlteW9wdC5u dWxsUHJpbnQgPSBOVUxMOworCW15b3B0LnRpdGxlID0gXygiSW5kZXggYWNjZXNzIG1ldGhvZCBw cm9wZXJ0aWVzIik7CisJbXlvcHQudHJhbnNsYXRlX2hlYWRlciA9IHRydWU7CisJbXlvcHQudHJh bnNsYXRlX2NvbHVtbnMgPSB0cmFuc2xhdGVfY29sdW1uc19pOworCW15b3B0Lm5fdHJhbnNsYXRl X2NvbHVtbnMgPSBsZW5ndGhvZih0cmFuc2xhdGVfY29sdW1uc19pKTsKKworCWlmIChQUW50dXBs ZXMocmVzKSA+IDApCisJeworCQlwcmludFF1ZXJ5KHJlcywgJm15b3B0LCBwc2V0LnF1ZXJ5Rm91 dCwgZmFsc2UsIHBzZXQubG9nZmlsZSk7CisJCWZvdW5kX3Jlc3VsdCA9IHRydWU7CisJfQorCisJ UFFjbGVhcihyZXMpOworCisJLyogVGFibGUgQU0gKi8KKwlpbml0UFFFeHBCdWZmZXIoJmJ1Zik7 CisJcHJpbnRmUFFFeHBCdWZmZXIoJmJ1ZiwKKwkJCQkJICAiU0VMRUNUIGEuYW1uYW1lIEFTIFwi JXNcIixcbiIKKwkJCQkJICAiICAndGFibGUnIEFTIFwiJXNcIixcbiIKKwkJCQkJICAiICBhLmFt aGFuZGxlciBBUyBcIiVzXCIsXG4iCisJCQkJCSAgIiAgcGdfY2F0YWxvZy5vYmpfZGVzY3JpcHRp b24oYS5vaWQsICdwZ19hbScpIEFTIFwiJXNcIlxuIgorCQkJCQkgICJGUk9NIHBnX2NhdGFsb2cu cGdfYW0gYVxuIgorCQkJCQkgICIgIFdIRVJFIGEuYW10eXBlID0gJ3QnXG4iLAorCQkJCQkgIGdl dHRleHRfbm9vcCgiTmFtZSIpLAorCQkJCQkgIGdldHRleHRfbm9vcCgiVHlwZSIpLAorCQkJCQkg IGdldHRleHRfbm9vcCgiSGFuZGxlciIpLAorCQkJCQkgIGdldHRleHRfbm9vcCgiRGVzY3JpcHRp b24iKSk7CisKKwlwcm9jZXNzU1FMTmFtZVBhdHRlcm4ocHNldC5kYiwgJmJ1ZiwgcGF0dGVybiwg dHJ1ZSwgZmFsc2UsCisJCQkJCQkgIE5VTEwsICJhLmFtbmFtZSIsIE5VTEwsIE5VTEwpOworCWFw cGVuZFBRRXhwQnVmZmVyU3RyKCZidWYsICJPUkRFUiBCWSAxOyIpOworCisJcmVzID0gUFNRTGV4 ZWMoYnVmLmRhdGEpOworCXRlcm1QUUV4cEJ1ZmZlcigmYnVmKTsKKworCW15b3B0Lm51bGxQcmlu dCA9IE5VTEw7CisJbXlvcHQudGl0bGUgPSBfKCJUYWJsZSBhY2Nlc3MgbWV0aG9kIHByb3BlcnRp ZXMiKTsKKwlteW9wdC50cmFuc2xhdGVfaGVhZGVyID0gdHJ1ZTsKKwlteW9wdC50cmFuc2xhdGVf Y29sdW1ucyA9IHRyYW5zbGF0ZV9jb2x1bW5zX3Q7CisJbXlvcHQubl90cmFuc2xhdGVfY29sdW1u cyA9IGxlbmd0aG9mKHRyYW5zbGF0ZV9jb2x1bW5zX3QpOworCisJaWYgKFBRbnR1cGxlcyhyZXMp ID4gMCkKKwl7CisJCXByaW50UXVlcnkocmVzLCAmbXlvcHQsIHBzZXQucXVlcnlGb3V0LCBmYWxz ZSwgcHNldC5sb2dmaWxlKTsKKwkJZm91bmRfcmVzdWx0ID0gdHJ1ZTsKKwl9CisKKwlQUWNsZWFy KHJlcyk7CisKKwlpZiAoIWZvdW5kX3Jlc3VsdCkKKwkJcHNxbF9lcnJvcigiRGlkIG5vdCBmaW5k IGFueSBBTSBuYW1lZCBcIiVzXCIuXG4iLCBwYXR0ZXJuKTsKKworCXJldHVybiB0cnVlOworfQor CisvKgorICogXGRBbworICogTGlzdHMgb3BlcmF0b3JzIGFzc29jaWF0ZWQgd2l0aCBhY2Nlc3Mg bWV0aG9kIG9wZXJhdG9yIGZhbWlsaWVzLgorICoKKyAqIFRha2VzIGFuIG9wdGlvbmFsIHJlZ2V4 cCB0byBzZWxlY3QgcGFydGljdWxhciBhY2Nlc3MgbWV0aG9kcworICogYW5kIG9wZXJhdG9yIGZh bWlsaWVzCisgKi8KK2Jvb2wKK2xpc3RGYW1pbHlDbGFzc09wZXJhdG9ycyhjb25zdCBjaGFyICph Y2Nlc3NfbWV0aG9kX3BhdHRlcm4sCisJCQkJCQkgY29uc3QgY2hhciAqZmFtaWx5X3BhdHRlcm4s IGJvb2wgdmVyYm9zZSkKK3sKKwlQUUV4cEJ1ZmZlckRhdGEgYnVmOworCVBHcmVzdWx0ICAgKnJl czsKKwlwcmludFF1ZXJ5T3B0IG15b3B0ID0gcHNldC5wb3B0OworCWJvb2wJCWhhdmVfd2hlcmUg PSBmYWxzZTsKKworCXN0YXRpYyBjb25zdCBib29sIHRyYW5zbGF0ZV9jb2x1bW5zW10gPSB7ZmFs c2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLAorCQkJCQkJCQkJCQkgZmFsc2UsIGZhbHNl LCB0cnVlLCBmYWxzZX07CisKKwlpbml0UFFFeHBCdWZmZXIoJmJ1Zik7CisKKwlwcmludGZQUUV4 cEJ1ZmZlcigmYnVmLAorCQkJCQkgICJTRUxFQ1RcbiIKKwkJCQkJICAiICBhbS5hbW5hbWUgQVMg XCIlc1wiLFxuIgorCQkJCQkgICIgIENBU0VcbiIKKwkJCQkJICAiICAgIFdIRU4gcGdfY2F0YWxv Zy5wZ19vcGZhbWlseV9pc192aXNpYmxlKG9mLm9pZClcbiIKKwkJCQkJICAiICAgIFRIRU4gZm9y bWF0KCclJUknLCBvZi5vcGZuYW1lKVxuIgorCQkJCQkgICIgICAgRUxTRSBmb3JtYXQoJyUlSS4l JUknLCBuc2YubnNwbmFtZSwgb2Yub3BmbmFtZSlcbiIKKwkJCQkJICAiICBFTkQgQVMgXCIlc1wi LFxuIgorCQkJCQkgICIgIGZvcm1hdCAoJyUlcyAoJSVzLCAlJXMpJyxcbiIKKwkJCQkJICAiICAg IENBU0VcbiIKKwkJCQkJICAiICAgICAgV0hFTiBwZ19jYXRhbG9nLnBnX29wZXJhdG9yX2lzX3Zp c2libGUob3Aub2lkKSBcbiIKKwkJCQkJICAiICAgICAgVEhFTiBvcC5vcHJuYW1lOjpwZ19jYXRh bG9nLnRleHQgXG4iCisJCQkJCSAgIiAgICAgIEVMU0Ugby5hbW9wb3ByOjpwZ19jYXRhbG9nLnJl Z29wZXI6OnBnX2NhdGFsb2cudGV4dCBcbiIKKwkJCQkJICAiICAgIEVORCxcbiIKKwkJCQkJICAi ICAgIHBnX2NhdGFsb2cuZm9ybWF0X3R5cGUoby5hbW9wbGVmdHR5cGUsIE5VTEwpLFxuIgorCQkJ CQkgICIgICAgcGdfY2F0YWxvZy5mb3JtYXRfdHlwZShvLmFtb3ByaWdodHR5cGUsIE5VTEwpXG4i CisJCQkJCSAgIiAgKSBBUyBcIiVzXCJcbiIsCisJCQkJCSAgZ2V0dGV4dF9ub29wKCJBTSIpLAor CQkJCQkgIGdldHRleHRfbm9vcCgiT3BmYW1pbHkgTmFtZSIpLAorCQkJCQkgIGdldHRleHRfbm9v cCgiT3BlcmF0b3IiKSk7CisKKwlpZiAodmVyYm9zZSkKKwkJYXBwZW5kUFFFeHBCdWZmZXIoJmJ1 ZiwKKwkJCQkJICAiLCBvLmFtb3BzdHJhdGVneSBBUyBcIiVzXCIsXG4iCisJCQkJCSAgIiAgQ0FT RSBvLmFtb3BwdXJwb3NlXG4iCisJCQkJCSAgIiAgICBXSEVOICdvJyBUSEVOICclcydcbiIKKwkJ CQkJICAiICAgIFdIRU4gJ3MnIFRIRU4gJyVzJ1xuIgorCQkJCQkgICIgIEVORCBBUyBcIiVzXCIs XG4iCisJCQkJCSAgIiAgb2ZzLm9wZm5hbWUgQVMgXCIlc1wiXG4iLAorCQkJCQkgIGdldHRleHRf bm9vcCgiU3RyYXRlZ3kiKSwKKwkJCQkJICBnZXR0ZXh0X25vb3AoIm9yZGVyaW5nIiksCisJCQkJ CSAgZ2V0dGV4dF9ub29wKCJzZWFyY2giKSwKKwkJCQkJICBnZXR0ZXh0X25vb3AoIlB1cnBvc2Ui KSwKKwkJCQkJICBnZXR0ZXh0X25vb3AoIlNvcnQgb3BmYW1pbHkiKSk7CisJYXBwZW5kUFFFeHBC dWZmZXIoJmJ1ZiwKKwkJCQkJICAiRlJPTSBwZ19jYXRhbG9nLnBnX2Ftb3Agb1xuIgorCQkJCQkg ICIgIExFRlQgSk9JTiBwZ19jYXRhbG9nLnBnX29wZXJhdG9yIG9wIE9OIG9wLm9pZCA9IG8uYW1v cG9wclxuIgorCQkJCQkgICIgIExFRlQgSk9JTiBwZ19jYXRhbG9nLnBnX29wZmFtaWx5IG9mIE9O IG9mLm9pZCA9IG8uYW1vcGZhbWlseVxuIgorCQkJCQkgICIgIExFRlQgSk9JTiBwZ19jYXRhbG9n LnBnX2FtIGFtIE9OIGFtLm9pZCA9IG9mLm9wZm1ldGhvZCBBTkQgYW0ub2lkID0gby5hbW9wbWV0 aG9kXG4iCisJCQkJCSAgIiAgTEVGVCBKT0lOIHBnX2NhdGFsb2cucGdfbmFtZXNwYWNlIG5zZiBP TiBvZi5vcGZuYW1lc3BhY2UgPSBuc2Yub2lkXG4iKTsKKwlpZiAodmVyYm9zZSkKKwkJYXBwZW5k UFFFeHBCdWZmZXIoJmJ1ZiwKKwkJCQkJICAiICBMRUZUIEpPSU4gcGdfY2F0YWxvZy5wZ19vcGZh bWlseSBvZnMgT04gb2ZzLm9pZCA9IG8uYW1vcHNvcnRmYW1pbHlcbiIpOworCisJaWYgKGFjY2Vz c19tZXRob2RfcGF0dGVybikKKwkJaGF2ZV93aGVyZSA9IHByb2Nlc3NTUUxOYW1lUGF0dGVybihw c2V0LmRiLCAmYnVmLCBhY2Nlc3NfbWV0aG9kX3BhdHRlcm4sCisJCQkJCQkJCQkJICAgZmFsc2Us IGZhbHNlLCBOVUxMLCAiYW0uYW1uYW1lIiwKKwkJCQkJCQkJCQkgICBOVUxMLCBOVUxMKTsKKwor CWlmIChmYW1pbHlfcGF0dGVybikKKwkJcHJvY2Vzc1NRTE5hbWVQYXR0ZXJuKHBzZXQuZGIsICZi dWYsIGZhbWlseV9wYXR0ZXJuLCBoYXZlX3doZXJlLCBmYWxzZSwKKwkJCQkJCQkgICJuc2YubnNw bmFtZSIsICJvZi5vcGZuYW1lIiwgTlVMTCwgTlVMTCk7CisKKwlhcHBlbmRQUUV4cEJ1ZmZlclN0 cigmYnVmLCAiT1JERVIgQlkgMSwgMiwgby5hbW9wc3RyYXRlZ3ksIDM7Iik7CisKKwlyZXMgPSBQ U1FMZXhlYyhidWYuZGF0YSk7CisJdGVybVBRRXhwQnVmZmVyKCZidWYpOworCWlmICghcmVzKQor CQlyZXR1cm4gZmFsc2U7CisKKwlteW9wdC5udWxsUHJpbnQgPSBOVUxMOworCW15b3B0LnRpdGxl ID0gXygiTGlzdCBvcGVyYXRvcnMgb2YgZmFtaWx5IHJlbGF0ZWQgdG8gYWNjZXNzIG1ldGhvZCIp OworCW15b3B0LnRyYW5zbGF0ZV9oZWFkZXIgPSB0cnVlOworCW15b3B0LnRyYW5zbGF0ZV9jb2x1 bW5zID0gdHJhbnNsYXRlX2NvbHVtbnM7CisJbXlvcHQubl90cmFuc2xhdGVfY29sdW1ucyA9IGxl bmd0aG9mKHRyYW5zbGF0ZV9jb2x1bW5zKTsKKworCXByaW50UXVlcnkocmVzLCAmbXlvcHQsIHBz ZXQucXVlcnlGb3V0LCBmYWxzZSwgcHNldC5sb2dmaWxlKTsKKworCVBRY2xlYXIocmVzKTsKKwly ZXR1cm4gdHJ1ZTsKK30KKworLyoKKyAqIFxkQXAKKyAqIExpc3RzIHByb2NlZHVyZXMgYXNzb2Np YXRlZCB3aXRoIGFjY2VzcyBtZXRob2Qgb3BlcmF0b3IgZmFtaWxpZXMuCisgKgorICogVGFrZXMg YW4gb3B0aW9uYWwgcmVnZXhwIHRvIHNlbGVjdCBwYXJ0aWN1bGFyIGFjY2VzcyBtZXRob2RzCisg KiBhbmQgb3BlcmF0b3IgZmFtaWxpZXMKKyAqLworYm9vbAorbGlzdE9wZXJhdG9yRmFtaWx5UHJv Y2VkdXJlcyhjb25zdCBjaGFyICphY2Nlc3NfbWV0aG9kX3BhdHRlcm4sCisJCQkJCQkJIGNvbnN0 IGNoYXIgKmZhbWlseV9wYXR0ZXJuLCBib29sIHZlcmJvc2UpCit7CisJUFFFeHBCdWZmZXJEYXRh IGJ1ZjsKKwlQR3Jlc3VsdCAgICpyZXM7CisJcHJpbnRRdWVyeU9wdCBteW9wdCA9IHBzZXQucG9w dDsKKwlib29sCQloYXZlX3doZXJlID0gZmFsc2U7CisJc3RhdGljIGNvbnN0IGJvb2wgdHJhbnNs YXRlX2NvbHVtbnNbXSA9IHtmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNl LCBmYWxzZX07CisKKwlpbml0UFFFeHBCdWZmZXIoJmJ1Zik7CisKKwlwcmludGZQUUV4cEJ1ZmZl cigmYnVmLAorCQkJCQkgICJTRUxFQ1QgRElTVElOQ1RcbiIKKwkJCQkJICAiICBhbS5hbW5hbWUg QVMgXCIlc1wiLFxuIgorCQkJCQkgICIgIENBU0VcbiIKKwkJCQkJICAiICAgIFdIRU4gcGdfY2F0 YWxvZy5wZ19vcGZhbWlseV9pc192aXNpYmxlKG9mLm9pZClcbiIKKwkJCQkJICAiICAgIFRIRU4g Zm9ybWF0KCclJUknLCBvZi5vcGZuYW1lKVxuIgorCQkJCQkgICIgICAgRUxTRSBmb3JtYXQoJyUl SS4lJUknLCBucy5uc3BuYW1lLCBvZi5vcGZuYW1lKVxuIgorCQkJCQkgICIgIEVORCBBUyBcIiVz XCIsXG4iCisJCQkJCSAgIiAgcGdfY2F0YWxvZy5mb3JtYXRfdHlwZShhcC5hbXByb2NsZWZ0dHlw ZSwgTlVMTCkgQVMgXCIlc1wiLFxuIgorCQkJCQkgICIgIHBnX2NhdGFsb2cuZm9ybWF0X3R5cGUo YXAuYW1wcm9jcmlnaHR0eXBlLCBOVUxMKSBBUyBcIiVzXCIsXG4iCisJCQkJCSAgIiAgYXAuYW1w cm9jbnVtIEFTIFwiJXNcIlxuIiwKKwkJCQkJICBnZXR0ZXh0X25vb3AoIkFNIiksCisJCQkJCSAg Z2V0dGV4dF9ub29wKCJPcGVyYXRvciBmYW1pbHkiKSwKKwkJCQkJICBnZXR0ZXh0X25vb3AoIkxl ZnQgYXJnIHR5cGUiKSwKKwkJCQkJICBnZXR0ZXh0X25vb3AoIlJpZ2h0IGFyZyB0eXBlIiksCisJ CQkJCSAgZ2V0dGV4dF9ub29wKCJTdXBwb3J0IGZ1bmN0aW9uIikpOworCWlmICh2ZXJib3NlKQor CQlhcHBlbmRQUUV4cEJ1ZmZlcigmYnVmLAorCQkJCQkgICIsIGFwLmFtcHJvYzo6cGdfY2F0YWxv Zy5yZWdwcm9jOjpwZ19jYXRhbG9nLnRleHQgQVMgXCIlc1wiXG4iLAorCQkJCQkgIGdldHRleHRf bm9vcCgiUHJvYyBuYW1lIikpOworCWFwcGVuZFBRRXhwQnVmZmVyKCZidWYsCisJCQkJCSAgIkZS T00gcGdfY2F0YWxvZy5wZ19hbXByb2MgYXBcbiIKKwkJCQkJICAiICBMRUZUIEpPSU4gcGdfY2F0 YWxvZy5wZ19vcGZhbWlseSBvZiBPTiBvZi5vaWQgPSBhcC5hbXByb2NmYW1pbHlcbiIKKwkJCQkJ ICAiICBMRUZUIEpPSU4gcGdfY2F0YWxvZy5wZ19hbSBhbSBPTiBhbS5vaWQgPSBvZi5vcGZtZXRo b2RcbiIKKwkJCQkJICAiICBMRUZUIEpPSU4gcGdfY2F0YWxvZy5wZ19uYW1lc3BhY2UgbnMgT04g b2Yub3BmbmFtZXNwYWNlID0gbnMub2lkXG4iKTsKKworCWlmIChhY2Nlc3NfbWV0aG9kX3BhdHRl cm4pCisJCWhhdmVfd2hlcmUgPSBwcm9jZXNzU1FMTmFtZVBhdHRlcm4ocHNldC5kYiwgJmJ1Ziwg YWNjZXNzX21ldGhvZF9wYXR0ZXJuLAorCQkJCQkJCQkJCSAgIGZhbHNlLCBmYWxzZSwgTlVMTCwg ImFtLmFtbmFtZSIsCisJCQkJCQkJCQkJICAgTlVMTCwgTlVMTCk7CisJaWYgKGZhbWlseV9wYXR0 ZXJuKQorCQlwcm9jZXNzU1FMTmFtZVBhdHRlcm4ocHNldC5kYiwgJmJ1ZiwgZmFtaWx5X3BhdHRl cm4sIGhhdmVfd2hlcmUsIGZhbHNlLAorCQkJCQkJCSAgIm5zLm5zcG5hbWUiLCAib2Yub3BmbmFt ZSIsIE5VTEwsIE5VTEwpOworCisJYXBwZW5kUFFFeHBCdWZmZXJTdHIoJmJ1ZiwKKwkJCQkJCSAi T1JERVIgQlkgMSwgMiwgMywgNCwgNTsiKTsKKworCXJlcyA9IFBTUUxleGVjKGJ1Zi5kYXRhKTsK Kwl0ZXJtUFFFeHBCdWZmZXIoJmJ1Zik7CisJaWYgKCFyZXMpCisJCXJldHVybiBmYWxzZTsKKwor CW15b3B0Lm51bGxQcmludCA9IE5VTEw7CisJbXlvcHQudGl0bGUgPSBfKCJMaXN0IG9mIG9wZXJh dG9yIGZhbWlseSBwcm9jZWR1cmVzIik7CisJbXlvcHQudHJhbnNsYXRlX2hlYWRlciA9IHRydWU7 CisJbXlvcHQudHJhbnNsYXRlX2NvbHVtbnMgPSB0cmFuc2xhdGVfY29sdW1uczsKKwlteW9wdC5u X3RyYW5zbGF0ZV9jb2x1bW5zID0gbGVuZ3Rob2YodHJhbnNsYXRlX2NvbHVtbnMpOworCisJcHJp bnRRdWVyeShyZXMsICZteW9wdCwgcHNldC5xdWVyeUZvdXQsIGZhbHNlLCBwc2V0LmxvZ2ZpbGUp OworCisJUFFjbGVhcihyZXMpOworCXJldHVybiB0cnVlOworfQorCisvKgorICogXGRBYworICog TGlzdCBpbmRleCBhY2Nlc3MgbWV0aG9kIG9wZXJhdG9yIGNsYXNzZXMuCisgKiBUYWtlcyBhbiBv cHRpb25hbCByZWdleHAgdG8gc2VsZWN0IHBhcnRpY3VsYXIgYWNjZXNzIG1ldGhvZCBhbmQgb3Bl cmF0b3IgY2xhc3MuCisgKi8KK2Jvb2wKK2Rlc2NyaWJlQWNjZXNzTWV0aG9kT3BlcmF0b3JDbGFz c2VzKGNvbnN0IGNoYXIgKmFjY2Vzc19tZXRob2RfcGF0dGVybiwKKwkJCQkJCQkJCWNvbnN0IGNo YXIgKnR5cGVfcGF0dGVybiwgYm9vbCB2ZXJib3NlKQoreworCVBRRXhwQnVmZmVyRGF0YSBidWY7 CisJUEdyZXN1bHQgICAqcmVzOworCXByaW50UXVlcnlPcHQgbXlvcHQgPSBwc2V0LnBvcHQ7CisJ Ym9vbAkJaGF2ZV93aGVyZSA9IGZhbHNlOworCXN0YXRpYyBjb25zdCBib29sIHRyYW5zbGF0ZV9j b2x1bW5zW10gPSB7ZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLAorCQkJCQkJCQkJ CQkgZmFsc2UsIGZhbHNlLCBmYWxzZX07CisKKwlpbml0UFFFeHBCdWZmZXIoJmJ1Zik7CisKKwlw cmludGZQUUV4cEJ1ZmZlcigmYnVmLAorCQkJCQkgICJTRUxFQ1QgRElTVElOQ1QiCisJCQkJCSAg IiAgYW0uYW1uYW1lIEFTIFwiJXNcIixcbiIKKwkJCQkJICAiICBjLm9wY2ludHlwZTo6cGdfY2F0 YWxvZy5yZWd0eXBlIEFTIFwiJXNcIixcbiIKKwkJCQkJICAiICAoQ0FTRSBXSEVOIGMub3Bja2V5 dHlwZSA8PiAwIEFORCBjLm9wY2tleXR5cGUgPD4gYy5vcGNpbnR5cGVcbiIKKwkJCQkJICAiICAg IFRIRU4gYy5vcGNrZXl0eXBlXG4iCisJCQkJCSAgIiAgICBFTFNFIE5VTEwgLS0gYy5vcGNpbnR5 cGVcbiIKKwkJCQkJICAiICBFTkQpOjpwZ19jYXRhbG9nLnJlZ3R5cGUgQVMgXCIlc1wiLFxuIgor CQkJCQkgICIgIENBU0VcbiIKKwkJCQkJICAiICAgIFdIRU4gcGdfY2F0YWxvZy5wZ19vcGNsYXNz X2lzX3Zpc2libGUoYy5vaWQpXG4iCisJCQkJCSAgIiAgICBUSEVOIGZvcm1hdCgnJSVJJywgYy5v cGNuYW1lKVxuIgorCQkJCQkgICIgICAgRUxTRSBmb3JtYXQoJyUlSS4lJUknLCBuLm5zcG5hbWUs IGMub3BjbmFtZSlcbiIKKwkJCQkJICAiICBFTkQgQVMgXCIlc1wiLFxuIgorCQkJCQkgICIgIChD QVNFIFdIRU4gYy5vcGNkZWZhdWx0XG4iCisJCQkJCSAgIiAgICBUSEVOICclcydcbiIKKwkJCQkJ ICAiICAgIEVMU0UgJyVzJ1xuIgorCQkJCQkgICIgIEVORCkgQVMgXCIlc1wiIiwKKwkJCQkJICBn ZXR0ZXh0X25vb3AoIkFNIiksCisJCQkJCSAgZ2V0dGV4dF9ub29wKCJJbnB1dCB0eXBlIiksCisJ CQkJCSAgZ2V0dGV4dF9ub29wKCJTdG9yYWdlIHR5cGUiKSwKKwkJCQkJICBnZXR0ZXh0X25vb3Ao Ik9wZXJhdG9yIGNsYXNzIiksCisJCQkJCSAgZ2V0dGV4dF9ub29wKCJ5ZXMiKSwKKwkJCQkJICBn ZXR0ZXh0X25vb3AoIm5vIiksCisJCQkJCSAgZ2V0dGV4dF9ub29wKCJEZWZhdWx0PyIpKTsKKwlp ZiAodmVyYm9zZSkKKwkJYXBwZW5kUFFFeHBCdWZmZXIoJmJ1ZiwKKwkJCQkJCSAgIixcbiAgQ0FT RVxuIgorCQkJCQkJICAiICAgIFdIRU4gcGdfY2F0YWxvZy5wZ19vcGZhbWlseV9pc192aXNpYmxl KG9mLm9pZClcbiIKKwkJCQkJCSAgIiAgICBUSEVOIGZvcm1hdCgnJSVJJywgb2Yub3BmbmFtZSlc biIKKwkJCQkJCSAgIiAgICBFTFNFIGZvcm1hdCgnJSVJLiUlSScsIG9mbi5uc3BuYW1lLCBvZi5v cGZuYW1lKVxuIgorCQkJCQkJICAiICBFTkQgQVMgXCIlc1wiLFxuIgorCQkJCQkJICAiIHBnX2Nh dGFsb2cucGdfZ2V0X3VzZXJieWlkKGMub3Bjb3duZXIpIEFTIFwiJXNcIlxuIiwKKwkJCQkJCSAg Z2V0dGV4dF9ub29wKCJPcGVyYXRvciBmYW1pbHkiKSwKKwkJCQkJCSAgZ2V0dGV4dF9ub29wKCJP d25lciIpKTsKKwlhcHBlbmRQUUV4cEJ1ZmZlcigmYnVmLAorCQkJCQkgICJcbkZST00gcGdfY2F0 YWxvZy5wZ19vcGNsYXNzIGNcbiIKKwkJCQkJICAiICBMRUZUIEpPSU4gcGdfY2F0YWxvZy5wZ19h bSBhbSBvbiBhbS5vaWQgPSBjLm9wY21ldGhvZFxuIgorCQkJCQkgICIgIExFRlQgSk9JTiBwZ19j YXRhbG9nLnBnX25hbWVzcGFjZSBuIE9OIG4ub2lkID0gYy5vcGNuYW1lc3BhY2VcbiIKKwkJCQkJ ICAiICBMRUZUIEpPSU4gcGdfY2F0YWxvZy5wZ190eXBlIHQxIE9OIHQxLm9pZCA9IGMub3BjaW50 eXBlXG4iCisJCQkJCSAgKTsKKwlpZiAodmVyYm9zZSkKKwkJYXBwZW5kUFFFeHBCdWZmZXIoJmJ1 ZiwKKwkJCQkJCSAgIiAgTEVGVCBKT0lOIHBnX2NhdGFsb2cucGdfb3BmYW1pbHkgb2YgT04gb2Yu b2lkID0gYy5vcGNmYW1pbHlcbiIKKwkJCQkJCSAgIiAgTEVGVCBKT0lOIHBnX2NhdGFsb2cucGdf bmFtZXNwYWNlIG9mbiBPTiBvZm4ub2lkID0gb2Yub3BmbmFtZXNwYWNlXG4iKTsKKworCWlmIChh Y2Nlc3NfbWV0aG9kX3BhdHRlcm4pCisJCWhhdmVfd2hlcmUgPSBwcm9jZXNzU1FMTmFtZVBhdHRl cm4ocHNldC5kYiwgJmJ1ZiwgYWNjZXNzX21ldGhvZF9wYXR0ZXJuLAorCQkJCQkJCQkJCSAgIGZh bHNlLCBmYWxzZSwgTlVMTCwgImFtLmFtbmFtZSIsIE5VTEwsIE5VTEwpOworCWlmICh0eXBlX3Bh dHRlcm4pCisJCXByb2Nlc3NTUUxOYW1lUGF0dGVybihwc2V0LmRiLCAmYnVmLCB0eXBlX3BhdHRl cm4sIGhhdmVfd2hlcmUsIGZhbHNlLAorCQkJCQkJCSAgTlVMTCwgInQxLnR5cG5hbWUiLCBOVUxM LCBOVUxMKTsKKworCWFwcGVuZFBRRXhwQnVmZmVyU3RyKCZidWYsICJPUkRFUiBCWSAxLCAyLCA0 OyIpOworCXJlcyA9IFBTUUxleGVjKGJ1Zi5kYXRhKTsKKwl0ZXJtUFFFeHBCdWZmZXIoJmJ1Zik7 CisJaWYgKCFyZXMpCisJCXJldHVybiBmYWxzZTsKKworCW15b3B0Lm51bGxQcmludCA9IE5VTEw7 CisJbXlvcHQudGl0bGUgPSBfKCJJbmRleCBhY2Nlc3MgbWV0aG9kIG9wZXJhdG9yIGNsYXNzZXMi KTsKKwlteW9wdC50cmFuc2xhdGVfaGVhZGVyID0gdHJ1ZTsKKwlteW9wdC50cmFuc2xhdGVfY29s dW1ucyA9IHRyYW5zbGF0ZV9jb2x1bW5zOworCW15b3B0Lm5fdHJhbnNsYXRlX2NvbHVtbnMgPSBs ZW5ndGhvZih0cmFuc2xhdGVfY29sdW1ucyk7CisKKwlwcmludFF1ZXJ5KHJlcywgJm15b3B0LCBw c2V0LnF1ZXJ5Rm91dCwgZmFsc2UsIHBzZXQubG9nZmlsZSk7CisKKwlQUWNsZWFyKHJlcyk7CisJ cmV0dXJuIHRydWU7Cit9CmRpZmYgLS1naXQgYS9zcmMvYmluL3BzcWwvZGVzY3JpYmUuaCBiL3Ny Yy9iaW4vcHNxbC9kZXNjcmliZS5oCmluZGV4IDRmZjFmOTFmMzguLjZjY2U4MGYyNjAgMTAwNjQ0 Ci0tLSBhL3NyYy9iaW4vcHNxbC9kZXNjcmliZS5oCisrKyBiL3NyYy9iaW4vcHNxbC9kZXNjcmli ZS5oCkBAIC0xMyw3ICsxMyw3IEBACiBleHRlcm4gYm9vbCBkZXNjcmliZUFnZ3JlZ2F0ZXMoY29u c3QgY2hhciAqcGF0dGVybiwgYm9vbCB2ZXJib3NlLCBib29sIHNob3dTeXN0ZW0pOwogCiAvKiBc ZEEgKi8KLWV4dGVybiBib29sIGRlc2NyaWJlQWNjZXNzTWV0aG9kcyhjb25zdCBjaGFyICpwYXR0 ZXJuLCBib29sIHZlcmJvc2UpOworZXh0ZXJuIGJvb2wgbGlzdEFjY2Vzc01ldGhvZHMoYm9vbCB2 ZXJib3NlKTsKIAogLyogXGRiICovCiBleHRlcm4gYm9vbCBkZXNjcmliZVRhYmxlc3BhY2VzKGNv bnN0IGNoYXIgKnBhdHRlcm4sIGJvb2wgdmVyYm9zZSk7CkBAIC0xMTEsNCArMTExLDIxIEBAIGJv b2wJCWRlc2NyaWJlUHVibGljYXRpb25zKGNvbnN0IGNoYXIgKnBhdHRlcm4pOwogLyogXGRScyAq LwogYm9vbAkJZGVzY3JpYmVTdWJzY3JpcHRpb25zKGNvbnN0IGNoYXIgKnBhdHRlcm4sIGJvb2wg dmVyYm9zZSk7CiAKKy8qIFxkQSBmb28qLworZXh0ZXJuIGJvb2wgZGVzY3JpYmVBY2Nlc3NNZXRo b2RQcm9wZXJ0aWVzKGNvbnN0IGNoYXIgKnBhdHRlcm4pOworCisvKiBcZEFwICovCitleHRlcm4g Ym9vbCBsaXN0T3BlcmF0b3JGYW1pbHlQcm9jZWR1cmVzKGNvbnN0IGNoYXIgKmFjY2Vzc19tZXRo b2RfcGF0dGVybiwKKwkJCQkJCQkJCQkgY29uc3QgY2hhciAqZmFtaWx5X3BhdHRlcm4sCisJCQkJ CQkJCQkJIGJvb2wgdmVyYm9zZSk7CisKKy8qIFxkQW8gKi8KK2V4dGVybiBib29sIGxpc3RGYW1p bHlDbGFzc09wZXJhdG9ycyhjb25zdCBjaGFyICphY2Nlc3NNZXRob2RfcGF0dGVybiwKKwkJCQkJ CQkJCSBjb25zdCBjaGFyICpmYW1pbHlfcGF0dGVybiwgYm9vbCB2ZXJib3NlKTsKKworLyogXGRB YyAqLworZXh0ZXJuIGJvb2wgZGVzY3JpYmVBY2Nlc3NNZXRob2RPcGVyYXRvckNsYXNzZXMoY29u c3QgY2hhciAqYWNjZXNzX21ldGhvZF9wYXR0ZXJuLAorCQkJCQkJCQkJCQkJY29uc3QgY2hhciAq b3BjbGFzc19wYXR0ZXJuLAorCQkJCQkJCQkJCQkJYm9vbCB2ZXJib3NlKTsKKwogI2VuZGlmCQkJ CQkJCS8qIERFU0NSSUJFX0ggKi8KZGlmZiAtLWdpdCBhL3NyYy9iaW4vcHNxbC9oZWxwLmMgYi9z cmMvYmluL3BzcWwvaGVscC5jCmluZGV4IDZmYzRlYmFiMWUuLmE4ZDJiNTNiNjIgMTAwNjQ0Ci0t LSBhL3NyYy9iaW4vcHNxbC9oZWxwLmMKKysrIGIvc3JjL2Jpbi9wc3FsL2hlbHAuYwpAQCAtMjI0 LDcgKzIyNCwxMSBAQCBzbGFzaFVzYWdlKHVuc2lnbmVkIHNob3J0IGludCBwYWdlcikKIAlmcHJp bnRmKG91dHB1dCwgXygiICBcXGRbUytdICAgICAgICAgICAgICAgICBsaXN0IHRhYmxlcywgdmll d3MsIGFuZCBzZXF1ZW5jZXNcbiIpKTsKIAlmcHJpbnRmKG91dHB1dCwgXygiICBcXGRbUytdICBO QU1FICAgICAgICAgICBkZXNjcmliZSB0YWJsZSwgdmlldywgc2VxdWVuY2UsIG9yIGluZGV4XG4i KSk7CiAJZnByaW50ZihvdXRwdXQsIF8oIiAgXFxkYVtTXSAgW1BBVFRFUk5dICAgICAgbGlzdCBh Z2dyZWdhdGVzXG4iKSk7Ci0JZnByaW50ZihvdXRwdXQsIF8oIiAgXFxkQVsrXSAgW1BBVFRFUk5d ICAgICAgbGlzdCBhY2Nlc3MgbWV0aG9kc1xuIikpOworCWZwcmludGYob3V0cHV0LCBfKCIgIFxc ZEFbK10gICAgICAgICAgICAgICAgIGxpc3QgYWNjZXNzIG1ldGhvZHNcbiIpKTsKKwlmcHJpbnRm KG91dHB1dCwgXygiICBcXGRBICAgICBOQU1FICAgICAgICAgICBkZXNjcmliZSBwcm9wZXJ0aWVz IG9mIGFjY2VzcyBtZXRob2RcbiIpKTsKKwlmcHJpbnRmKG91dHB1dCwgXygiICBcXGRBY1srXSBb QU1QVFJOIFtUWVBFUFRSTl1dIGxpc3Qgb3BlcmF0b3IgY2xhc3NlcyBvZiBpbmRleCBhY2Nlc3Mg bWV0aG9kc1xuIikpOworCWZwcmludGYob3V0cHV0LCBfKCIgIFxcZEFvWytdIFtBTVBUUk4gW09Q RlBUUk5dXSBsaXN0IG9wZXJhdG9ycyBvZiBmYW1pbHkgcmVsYXRlZCB0byBhY2Nlc3MgbWV0aG9k XG4iKSk7CisJZnByaW50ZihvdXRwdXQsIF8oIiAgXFxkQXBbK10gW0FNUFRSTiBbT1BGUFRSTl1d IGxpc3QgcHJvY2VkdXJlcyBvZiBvcGVyYXRvciBmYW1pbHkgcmVsYXRlZCB0byBhY2Nlc3MgbWV0 aG9kXG4iKSk7CiAJZnByaW50ZihvdXRwdXQsIF8oIiAgXFxkYlsrXSAgW1BBVFRFUk5dICAgICAg bGlzdCB0YWJsZXNwYWNlc1xuIikpOwogCWZwcmludGYob3V0cHV0LCBfKCIgIFxcZGNbUytdIFtQ QVRURVJOXSAgICAgIGxpc3QgY29udmVyc2lvbnNcbiIpKTsKIAlmcHJpbnRmKG91dHB1dCwgXygi ICBcXGRDWytdICBbUEFUVEVSTl0gICAgICBsaXN0IGNhc3RzXG4iKSk7CmRpZmYgLS1naXQgYS9z cmMvYmluL3BzcWwvdGFiLWNvbXBsZXRlLmMgYi9zcmMvYmluL3BzcWwvdGFiLWNvbXBsZXRlLmMK aW5kZXggZDZkOGZkMDJmNS4uNzcwZDA4Zjg0MyAxMDA2NDQKLS0tIGEvc3JjL2Jpbi9wc3FsL3Rh Yi1jb21wbGV0ZS5jCisrKyBiL3NyYy9iaW4vcHNxbC90YWItY29tcGxldGUuYwpAQCAtNDcyLDYg KzQ3MiwyMyBAQCBzdGF0aWMgY29uc3QgU2NoZW1hUXVlcnkgUXVlcnlfZm9yX2xpc3Rfb2ZfcmVs YXRpb25zID0gewogCS5yZXN1bHQgPSAicGdfY2F0YWxvZy5xdW90ZV9pZGVudChjLnJlbG5hbWUp IiwKIH07CiAKK3N0YXRpYyBjb25zdCBTY2hlbWFRdWVyeSBRdWVyeV9mb3JfbGlzdF9vZl9vcGVy YXRvcl9mYW1pbGllcyA9IHsKKwkvKiBtaW5fc2VydmVyX3ZlcnNpb24gKi8KKwkwLAorCS8qIGNh dG5hbWUgKi8KKwkicGdfY2F0YWxvZy5wZ19vcGZhbWlseSBjIiwKKwkvKiBzZWxjb25kaXRpb24g Ki8KKwlOVUxMLAorCS8qIHZpc2NvbmRpdGlvbiAqLworCSJ0cnVlIiwKKwkvKiBuYW1lc3BhY2Ug Ki8KKwkiYy5vcGZuYW1lc3BhY2UiLAorCS8qIHJlc3VsdCAqLworCSJwZ19jYXRhbG9nLnF1b3Rl X2lkZW50KGMub3BmbmFtZSkiLAorCS8qIHF1YWxyZXN1bHQgKi8KKwlOVUxMCit9OworCiAvKiBS ZWxhdGlvbnMgc3VwcG9ydGluZyBJTlNFUlQsIFVQREFURSBvciBERUxFVEUgKi8KIHN0YXRpYyBj b25zdCBTY2hlbWFRdWVyeSBRdWVyeV9mb3JfbGlzdF9vZl91cGRhdGFibGVzID0gewogCS5jYXRu YW1lID0gInBnX2NhdGFsb2cucGdfY2xhc3MgYyIsCkBAIC0xMzc4LDcgKzEzOTUsOCBAQCBwc3Fs X2NvbXBsZXRpb24oY29uc3QgY2hhciAqdGV4dCwgaW50IHN0YXJ0LCBpbnQgZW5kKQogCQkiXFxh IiwKIAkJIlxcY29ubmVjdCIsICJcXGNvbm5pbmZvIiwgIlxcQyIsICJcXGNkIiwgIlxcY29weSIs CiAJCSJcXGNvcHlyaWdodCIsICJcXGNyb3NzdGFidmlldyIsCi0JCSJcXGQiLCAiXFxkYSIsICJc XGRBIiwgIlxcZGIiLCAiXFxkYyIsICJcXGRDIiwgIlxcZGQiLCAiXFxkZHAiLCAiXFxkRCIsCisJ CSJcXGQiLCAiXFxkYSIsICJcXGRBIiwgIlxcZEFwIiwgIlxcZEFvIiwgIlxcZEFwIiwgIlxcZEFj IiwKKwkJIlxcZGIiLCAiXFxkYyIsICJcXGRDIiwgIlxcZGQiLCAiXFxkZHAiLCAiXFxkRCIsCiAJ CSJcXGRlcyIsICJcXGRldCIsICJcXGRldSIsICJcXGRldyIsICJcXGRFIiwgIlxcZGYiLAogCQki XFxkRiIsICJcXGRGZCIsICJcXGRGcCIsICJcXGRGdCIsICJcXGRnIiwgIlxcZGkiLCAiXFxkbCIs ICJcXGRMIiwKIAkJIlxcZG0iLCAiXFxkbiIsICJcXGRvIiwgIlxcZE8iLCAiXFxkcCIsCkBAIC0z NDkyLDYgKzM1MTAsMTIgQEAgcHNxbF9jb21wbGV0aW9uKGNvbnN0IGNoYXIgKnRleHQsIGludCBz dGFydCwgaW50IGVuZCkKIAl9CiAJZWxzZSBpZiAoVGFpbE1hdGNoZXNDUygiXFxkYSoiKSkKIAkJ Q09NUExFVEVfV0lUSF9WRVJTSU9ORURfU0NIRU1BX1FVRVJZKFF1ZXJ5X2Zvcl9saXN0X29mX2Fn Z3JlZ2F0ZXMsIE5VTEwpOworCWVsc2UgaWYgKFRhaWxNYXRjaGVzQ1MoIlxcZEFwKiIsIE1hdGNo QW55KSkKKwkJQ09NUExFVEVfV0lUSF9TQ0hFTUFfUVVFUlkoUXVlcnlfZm9yX2xpc3Rfb2Zfb3Bl cmF0b3JfZmFtaWxpZXMsIE5VTEwpOworCWVsc2UgaWYgKFRhaWxNYXRjaGVzQ1MoIlxcZEFvKiIs IE1hdGNoQW55KSkKKwkJQ09NUExFVEVfV0lUSF9TQ0hFTUFfUVVFUlkoUXVlcnlfZm9yX2xpc3Rf b2Zfb3BlcmF0b3JfZmFtaWxpZXMsIE5VTEwpOworCWVsc2UgaWYgKFRhaWxNYXRjaGVzQ1MoIlxc ZEFjKiIsIE1hdGNoQW55KSkKKwkJQ09NUExFVEVfV0lUSF9TQ0hFTUFfUVVFUlkoUXVlcnlfZm9y X2xpc3Rfb2ZfZGF0YXR5cGVzLCBOVUxMKTsKIAllbHNlIGlmIChUYWlsTWF0Y2hlc0NTKCJcXGRB KiIpKQogCQlDT01QTEVURV9XSVRIX1FVRVJZKFF1ZXJ5X2Zvcl9saXN0X29mX2FjY2Vzc19tZXRo b2RzKTsKIAllbHNlIGlmIChUYWlsTWF0Y2hlc0NTKCJcXGRiKiIpKQpkaWZmIC0tZ2l0IGEvc3Jj L3Rlc3QvcmVncmVzcy9leHBlY3RlZC9wc3FsLm91dCBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0 ZWQvcHNxbC5vdXQKaW5kZXggYWExMDFkZTkwNi4uNzQ5NmVkZTI4MiAxMDA2NDQKLS0tIGEvc3Jj L3Rlc3QvcmVncmVzcy9leHBlY3RlZC9wc3FsLm91dAorKysgYi9zcmMvdGVzdC9yZWdyZXNzL2V4 cGVjdGVkL3BzcWwub3V0CkBAIC00NTc4LDMgKzQ1NzgsNTYgQEAgbGFzdCBlcnJvciBtZXNzYWdl OiBkaXZpc2lvbiBieSB6ZXJvCiBcZWNobyAnbGFzdCBlcnJvciBjb2RlOicgOkxBU1RfRVJST1Jf U1FMU1RBVEUKIGxhc3QgZXJyb3IgY29kZTogMjIwMTIKIFx1bnNldCBGRVRDSF9DT1VOVAorLS0g Y2hlY2sgcHJpbnRpbmcgaW5mbyBhYm91dCBhY2Nlc3MgbWV0aG9kcworXGRBIGdpbgorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5kZXggYWNjZXNzIG1ldGhvZCBwcm9wZXJ0 aWVzCisgQU0gIHwgT3JkZXJpbmcgfCBVbmlxdWUgaW5kZXhlcyB8IE11bHRpY29sIGluZGV4ZXMg fCBFeGNsdXNpb24gY29uc3RyYWludHMgfCBJbmNsdWRlIG5vbi1rZXkgY29sdW1ucyAKKy0tLS0t Ky0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIGdpbiB8IG5vICAgICAg IHwgbm8gICAgICAgICAgICAgfCB5ZXMgICAgICAgICAgICAgIHwgbm8gICAgICAgICAgICAgICAg ICAgIHwgbm8KKygxIHJvdykKKworXGRBbyBicmluIHV1aWRfbWlubWF4X29wcworTGlzdCBvcGVy YXRvcnMgb2YgZmFtaWx5IHJlbGF0ZWQgdG8gYWNjZXNzIG1ldGhvZAorICBBTSAgfCAgT3BmYW1p bHkgTmFtZSAgfCAgICBPcGVyYXRvciAgICAgCistLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0rLS0t LS0tLS0tLS0tLS0tLS0KKyBicmluIHwgdXVpZF9taW5tYXhfb3BzIHwgPCAodXVpZCwgdXVpZCkK KyBicmluIHwgdXVpZF9taW5tYXhfb3BzIHwgPD0gKHV1aWQsIHV1aWQpCisgYnJpbiB8IHV1aWRf bWlubWF4X29wcyB8ID0gKHV1aWQsIHV1aWQpCisgYnJpbiB8IHV1aWRfbWlubWF4X29wcyB8ID49 ICh1dWlkLCB1dWlkKQorIGJyaW4gfCB1dWlkX21pbm1heF9vcHMgfCA+ICh1dWlkLCB1dWlkKQor KDUgcm93cykKKworXGRBbyAqIHBnX2NhdGFsb2cuanNvbmJfcGF0aF9vcHMKK0xpc3Qgb3BlcmF0 b3JzIG9mIGZhbWlseSByZWxhdGVkIHRvIGFjY2VzcyBtZXRob2QKKyBBTSAgfCBPcGZhbWlseSBO YW1lICB8ICAgICBPcGVyYXRvciAgICAgIAorLS0tLS0rLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0t LS0tLS0tLS0tLS0tCisgZ2luIHwganNvbmJfcGF0aF9vcHMgfCBAPiAoanNvbmIsIGpzb25iKQor KDEgcm93KQorCitcZEFwIGJyaW4gdXVpZF9taW5tYXhfb3BzCisgICAgICAgICAgICAgICAgICAg ICBMaXN0IG9mIG9wZXJhdG9yIGZhbWlseSBwcm9jZWR1cmVzCisgIEFNICB8IE9wZXJhdG9yIGZh bWlseSB8IExlZnQgYXJnIHR5cGUgfCBSaWdodCBhcmcgdHlwZSB8IFN1cHBvcnQgZnVuY3Rpb24g CistLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0t LS0rLS0tLS0tLS0tLS0tLS0tLS0tCisgYnJpbiB8IHV1aWRfbWlubWF4X29wcyB8IHV1aWQgICAg ICAgICAgfCB1dWlkICAgICAgICAgICB8ICAgICAgICAgICAgICAgIDEKKyBicmluIHwgdXVpZF9t aW5tYXhfb3BzIHwgdXVpZCAgICAgICAgICB8IHV1aWQgICAgICAgICAgIHwgICAgICAgICAgICAg ICAgMgorIGJyaW4gfCB1dWlkX21pbm1heF9vcHMgfCB1dWlkICAgICAgICAgIHwgdXVpZCAgICAg ICAgICAgfCAgICAgICAgICAgICAgICAzCisgYnJpbiB8IHV1aWRfbWlubWF4X29wcyB8IHV1aWQg ICAgICAgICAgfCB1dWlkICAgICAgICAgICB8ICAgICAgICAgICAgICAgIDQKKyg0IHJvd3MpCisK K1xkQXAgKiBwZ19jYXRhbG9nLnV1aWRfb3BzCisgICAgICAgICAgICAgICAgICAgICBMaXN0IG9m IG9wZXJhdG9yIGZhbWlseSBwcm9jZWR1cmVzCisgIEFNICAgfCBPcGVyYXRvciBmYW1pbHkgfCBM ZWZ0IGFyZyB0eXBlIHwgUmlnaHQgYXJnIHR5cGUgfCBTdXBwb3J0IGZ1bmN0aW9uIAorLS0tLS0t LSstLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLSstLS0t LS0tLS0tLS0tLS0tLS0KKyBidHJlZSB8IHV1aWRfb3BzICAgICAgICB8IHV1aWQgICAgICAgICAg fCB1dWlkICAgICAgICAgICB8ICAgICAgICAgICAgICAgIDEKKyBidHJlZSB8IHV1aWRfb3BzICAg ICAgICB8IHV1aWQgICAgICAgICAgfCB1dWlkICAgICAgICAgICB8ICAgICAgICAgICAgICAgIDIK KyBoYXNoICB8IHV1aWRfb3BzICAgICAgICB8IHV1aWQgICAgICAgICAgfCB1dWlkICAgICAgICAg ICB8ICAgICAgICAgICAgICAgIDEKKyBoYXNoICB8IHV1aWRfb3BzICAgICAgICB8IHV1aWQgICAg ICAgICAgfCB1dWlkICAgICAgICAgICB8ICAgICAgICAgICAgICAgIDIKKyg0IHJvd3MpCisKK1xk QWMgYnJpbiBwZyoub2lkKgorICAgICAgICAgICAgIEluZGV4IGFjY2VzcyBtZXRob2Qgb3BlcmF0 b3IgY2xhc3NlcworICBBTSAgfCBJbnB1dCB0eXBlIHwgU3RvcmFnZSB0eXBlIHwgT3BlcmF0b3Ig Y2xhc3MgfCBEZWZhdWx0PyAKKy0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0rLS0t LS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tCisgYnJpbiB8IG9pZCAgICAgICAgfCAgICAgICAgICAg ICAgfCBvaWRfbWlubWF4X29wcyB8IHllcworKDEgcm93KQorCmRpZmYgLS1naXQgYS9zcmMvdGVz dC9yZWdyZXNzL3NxbC9wc3FsLnNxbCBiL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL3BzcWwuc3FsCmlu ZGV4IGZiN2QxN2ZjNzYuLjc0Y2M3MTQyZGEgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3JlZ3Jlc3Mv c3FsL3BzcWwuc3FsCisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL3BzcWwuc3FsCkBAIC0xMDMx LDMgKzEwMzEsMTEgQEAgc2VsZWN0IDEvKDE1LXVuaXF1ZTIpIGZyb20gdGVuazEgb3JkZXIgYnkg dW5pcXVlMiBsaW1pdCAxOTsKIFxlY2hvICdsYXN0IGVycm9yIGNvZGU6JyA6TEFTVF9FUlJPUl9T UUxTVEFURQogCiBcdW5zZXQgRkVUQ0hfQ09VTlQKKworLS0gY2hlY2sgcHJpbnRpbmcgaW5mbyBh Ym91dCBhY2Nlc3MgbWV0aG9kcworXGRBIGdpbgorXGRBbyBicmluIHV1aWRfbWlubWF4X29wcwor XGRBbyAqIHBnX2NhdGFsb2cuanNvbmJfcGF0aF9vcHMKK1xkQXAgYnJpbiB1dWlkX21pbm1heF9v cHMKK1xkQXAgKiBwZ19jYXRhbG9nLnV1aWRfb3BzCitcZEFjIGJyaW4gcGcqLm9pZCoK --=_88cc961307de3421175af21993a11ff4 Content-Transfer-Encoding: base64 Content-Type: text/x-diff; name=0002-psql_add_index_info-v6.patch Content-Disposition: attachment; filename=0002-psql_add_index_info-v6.patch; size=16987 ZGlmZiAtLWdpdCBhL2RvYy9zcmMvc2dtbC9yZWYvcHNxbC1yZWYuc2dtbCBiL2RvYy9zcmMvc2dt bC9yZWYvcHNxbC1yZWYuc2dtbAppbmRleCBkYTg1ZjYzNDAwLi4xNmQ0NWQ1YzQ5IDEwMDY0NAot LS0gYS9kb2Mvc3JjL3NnbWwvcmVmL3BzcWwtcmVmLnNnbWwKKysrIGIvZG9jL3NyYy9zZ21sL3Jl Zi9wc3FsLXJlZi5zZ21sCkBAIC0xNDQ2LDYgKzE0NDYsMzQgQEAgdGVzdGRiPSZndDsKICAgICAg ICAgPC9saXN0aXRlbT4KICAgICAgIDwvdmFybGlzdGVudHJ5PgogCisgICAgICA8dmFybGlzdGVu dHJ5PgorICAgICAgICA8dGVybT48bGl0ZXJhbD5cZGlwIFsgPGxpbmsgbGlua2VuZD0iYXBwLXBz cWwtcGF0dGVybnMiPjxyZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj5wYXR0ZXJuPC9yZXBs YWNlYWJsZT48L2xpbms+IF08L2xpdGVyYWw+PC90ZXJtPgorCisgICAgICAgIDxsaXN0aXRlbT4K KyAgICAgICAgPHBhcmE+CisgICAgICAgIFNob3dzIGluZGV4IHByb3BlcnRpZXMgbGlzdGVkIGlu CisgICAgICAgIDx4cmVmIGxpbmtlbmQ9ImZ1bmN0aW9ucy1pbmZvLWluZGV4LXByb3BzIi8+Lgor ICAgICAgICBJZiA8cmVwbGFjZWFibGUgY2xhc3M9InBhcmFtZXRlciI+cGF0dGVybjwvcmVwbGFj ZWFibGU+IGlzCisgICAgICAgIHNwZWNpZmllZCwgb25seSBhY2Nlc3MgbWV0aG9kcyB3aG9zZSBu YW1lcyBtYXRjaCB0aGUgcGF0dGVybiBhcmUgc2hvd24uCisgICAgICAgIDwvcGFyYT4KKyAgICAg ICAgPC9saXN0aXRlbT4KKyAgICAgIDwvdmFybGlzdGVudHJ5PgorCisgICAgICA8dmFybGlzdGVu dHJ5PgorICAgICAgICA8dGVybT4KKyAgICAgICAgICA8bGl0ZXJhbD5cZGljcCBbIDxsaW5rIGxp bmtlbmQ9ImFwcC1wc3FsLXBhdHRlcm5zIj48cmVwbGFjZWFibGUgY2xhc3M9InBhcmFtZXRlciI+ cGF0dGVybjwvcmVwbGFjZWFibGU+PC9saW5rPl0KKyAgICAgICAgICA8L2xpdGVyYWw+CisgICAg ICAgIDwvdGVybT4KKworICAgICAgICA8bGlzdGl0ZW0+CisgICAgICAgIDxwYXJhPgorICAgICAg ICBTaG93cyBpbmRleCBjb2x1bW4gcHJvcGVydGllcyBsaXN0ZWQgaW4KKyAgICAgICAgPHhyZWYg bGlua2VuZD0iZnVuY3Rpb25zLWluZm8taW5kZXgtY29sdW1uLXByb3BzIi8+LgorICAgICAgICBJ ZiA8cmVwbGFjZWFibGUgY2xhc3M9InBhcmFtZXRlciI+cGF0dGVybjwvcmVwbGFjZWFibGU+IGlz CisgICAgICAgIHNwZWNpZmllZCwgb25seSBhY2Nlc3MgbWV0aG9kcyB3aG9zZSBuYW1lcyBtYXRj aCB0aGUgcGF0dGVybiBhcmUgc2hvd24uCisgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9saXN0 aXRlbT4KKyAgICAgIDwvdmFybGlzdGVudHJ5PgogCiAgICAgICA8dmFybGlzdGVudHJ5PgogICAg ICAgICA8dGVybT48bGl0ZXJhbD5cZGVzWytdIFsgPGxpbmsgbGlua2VuZD0iYXBwLXBzcWwtcGF0 dGVybnMiPjxyZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj5wYXR0ZXJuPC9yZXBsYWNlYWJs ZT48L2xpbms+IF08L2xpdGVyYWw+PC90ZXJtPgpkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wc3FsL2Nv bW1hbmQuYyBiL3NyYy9iaW4vcHNxbC9jb21tYW5kLmMKaW5kZXggN2I1N2M3Y2I0OS4uMGFiNGE0 YzJhYiAxMDA2NDQKLS0tIGEvc3JjL2Jpbi9wc3FsL2NvbW1hbmQuYworKysgYi9zcmMvYmluL3Bz cWwvY29tbWFuZC5jCkBAIC04MDcsNiArODA3LDE2IEBAIGV4ZWNfY29tbWFuZF9kKFBzcWxTY2Fu U3RhdGUgc2Nhbl9zdGF0ZSwgYm9vbCBhY3RpdmVfYnJhbmNoLCBjb25zdCBjaGFyICpjbWQpCiAJ CQljYXNlICd2JzoKIAkJCWNhc2UgJ20nOgogCQkJY2FzZSAnaSc6CisJCQkJaWYgKHN0cm5jbXAo Y21kLCAiZGlwIiwgMykgPT0gMCkKKwkJCQl7CisJCQkJCXN1Y2Nlc3MgPSBkZXNjcmliZUluZGV4 UHJvcGVydGllcyhwYXR0ZXJuLCBzaG93X3N5c3RlbSk7CisJCQkJCWJyZWFrOworCQkJCX0KKwkJ CQllbHNlIGlmIChzdHJuY21wKGNtZCwgImRpY3AiLCA0KSA9PSAwKQorCQkJCXsKKwkJCQkJc3Vj Y2VzcyA9IGRlc2NyaWJlSW5kZXhDb2x1bW5Qcm9wZXJ0aWVzKHBhdHRlcm4sIHNob3dfc3lzdGVt KTsKKwkJCQkJYnJlYWs7CisJCQkJfQogCQkJY2FzZSAncyc6CiAJCQljYXNlICdFJzoKIAkJCQlz dWNjZXNzID0gbGlzdFRhYmxlcygmY21kWzFdLCBwYXR0ZXJuLCBzaG93X3ZlcmJvc2UsIHNob3df c3lzdGVtKTsKZGlmZiAtLWdpdCBhL3NyYy9iaW4vcHNxbC9kZXNjcmliZS5jIGIvc3JjL2Jpbi9w c3FsL2Rlc2NyaWJlLmMKaW5kZXggZDNlMzQ5NDk4Zi4uZGU2NjUzNDk3MyAxMDA2NDQKLS0tIGEv c3JjL2Jpbi9wc3FsL2Rlc2NyaWJlLmMKKysrIGIvc3JjL2Jpbi9wc3FsL2Rlc2NyaWJlLmMKQEAg LTE5LDYgKzE5LDcgQEAKICNpbmNsdWRlICJjYXRhbG9nL3BnX2Nhc3RfZC5oIgogI2luY2x1ZGUg ImNhdGFsb2cvcGdfY2xhc3NfZC5oIgogI2luY2x1ZGUgImNhdGFsb2cvcGdfZGVmYXVsdF9hY2xf ZC5oIgorI2luY2x1ZGUgImNhdGFsb2cvcGdfaW5kZXguaCIKICNpbmNsdWRlICJmZV91dGlscy9z dHJpbmdfdXRpbHMuaCIKIAogI2luY2x1ZGUgImNvbW1vbi5oIgpAQCAtNDUsNiArNDYsOSBAQCBz dGF0aWMgYm9vbCBkZXNjcmliZU9uZVRTQ29uZmlnKGNvbnN0IGNoYXIgKm9pZCwgY29uc3QgY2hh ciAqbnNwbmFtZSwKIAkJCQkJY29uc3QgY2hhciAqcG5zcG5hbWUsIGNvbnN0IGNoYXIgKnByc25h bWUpOwogc3RhdGljIHZvaWQgcHJpbnRBQ0xDb2x1bW4oUFFFeHBCdWZmZXIgYnVmLCBjb25zdCBj aGFyICpjb2xuYW1lKTsKIHN0YXRpYyBib29sIGxpc3RPbmVFeHRlbnNpb25Db250ZW50cyhjb25z dCBjaGFyICpleHRuYW1lLCBjb25zdCBjaGFyICpvaWQpOworc3RhdGljIGJvb2wgZGVzY3JpYmVP bmVJbmRleENvbHVtblByb3BlcnRpZXMoY29uc3QgY2hhciAqb2lkLCBjb25zdCBjaGFyICpuc3Bu YW1lLAorCQkJCQkJCQkgY29uc3QgY2hhciAqaWR4bmFtZSwgY29uc3QgY2hhciAqYW1uYW1lLAor CQkJCQkJCQkgY29uc3QgY2hhciAqdGFibmFtZSk7CiAKIAogLyotLS0tLS0tLS0tLS0tLS0tCkBA IC02MTE2LDMgKzYxMjAsMjg3IEBAIGRlc2NyaWJlQWNjZXNzTWV0aG9kT3BlcmF0b3JDbGFzc2Vz KGNvbnN0IGNoYXIgKmFjY2Vzc19tZXRob2RfcGF0dGVybiwKIAlQUWNsZWFyKHJlcyk7CiAJcmV0 dXJuIHRydWU7CiB9CisKKy8qCisgKiBcZGlwCisgKiBEZXNjcmliZXMgaW5kZXggcHJvcGVydGll cy4KKyAqCisgKiBUYWtlcyBhbiBvcHRpb25hbCByZWdleHAgdG8gc2VsZWN0IHBhcnRpY3VsYXIg aW5kZXguCisgKi8KK2Jvb2wKK2Rlc2NyaWJlSW5kZXhQcm9wZXJ0aWVzKGNvbnN0IGNoYXIgKnBh dHRlcm4sIGJvb2wgc2hvd1N5c3RlbSkKK3sKKwlQUUV4cEJ1ZmZlckRhdGEgYnVmOworCVBHcmVz dWx0ICAgKnJlczsKKwlwcmludFF1ZXJ5T3B0IG15b3B0ID0gcHNldC5wb3B0OworCisJc3RhdGlj IGNvbnN0IGJvb2wgdHJhbnNsYXRlX2NvbHVtbnNbXSA9IHtmYWxzZSwgZmFsc2UsIGZhbHNlLCBm YWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZX07CisKKwlpbml0UFFFeHBCdWZmZXIoJmJ1Zik7CisK KwlwcmludGZQUUV4cEJ1ZmZlcigmYnVmLAorCQkJCQkgICJTRUxFQ1QiCisJCQkJCSAgIiAgbi5u c3BuYW1lIEFTIFwiJXNcIixcbiIKKwkJCQkJICAiICBjLnJlbG5hbWUgQVMgXCIlc1wiLFxuIgor CQkJCQkgICIgIGFtLmFtbmFtZSBBUyBcIiVzXCIsXG4iLAorCQkJCQkgIGdldHRleHRfbm9vcCgi U2NoZW1hIiksCisJCQkJCSAgZ2V0dGV4dF9ub29wKCJOYW1lIiksCisJCQkJCSAgZ2V0dGV4dF9u b29wKCJBY2Nlc3MgbWV0aG9kIikpOworCWFwcGVuZFBRRXhwQnVmZmVyKCZidWYsCisJCQkJCXBz ZXQuc3ZlcnNpb24gPj0gOTA2MDAgPworCQkJCQkgICIgIENBU0UgV0hFTiBwZ19jYXRhbG9nLnBn X2luZGV4X2hhc19wcm9wZXJ0eShjLm9pZCwgJ2NsdXN0ZXJhYmxlJylcbiIKKwkJCQkJICAiICAg IFRIRU4gJyUxJHMnIEVMU0UgJyUyJHMnIEVORCBBUyBcIiUzJHNcIixcbiIKKwkJCQkJICAiICBD QVNFIFdIRU4gcGdfY2F0YWxvZy5wZ19pbmRleF9oYXNfcHJvcGVydHkoYy5vaWQsICdpbmRleF9z Y2FuJylcbiIKKwkJCQkJICAiICAgIFRIRU4gJyUxJHMnIEVMU0UgJyUyJHMnIEVORCBBUyBcIiU0 JHNcIixcbiIKKwkJCQkJICAiICBDQVNFIFdIRU4gcGdfY2F0YWxvZy5wZ19pbmRleF9oYXNfcHJv cGVydHkoYy5vaWQsICdiaXRtYXBfc2NhbicpXG4iCisJCQkJCSAgIiAgICBUSEVOICclMSRzJyBF TFNFICclMiRzJyBFTkQgQVMgXCIlNSRzXCIsXG4iCisJCQkJCSAgIiAgQ0FTRSBXSEVOIHBnX2Nh dGFsb2cucGdfaW5kZXhfaGFzX3Byb3BlcnR5KGMub2lkLCAnYmFja3dhcmRfc2NhbicpXG4iCisJ CQkJCSAgIiAgICBUSEVOICclMSRzJyBFTFNFICclMiRzJyBFTkQgQVMgXCIlNiRzXCJcbiIKKwkJ CQkJICA6CisJCQkJCSAgIiAgQ0FTRSBXSEVOIGFtLmFtY2x1c3RlcmFibGUgVEhFTiAnJTEkcycg RUxTRSAnJTIkcycgRU5EIEFTIFwiJTMkc1wiLFxuIgorCQkJCQkgICIgIENBU0UgV0hFTiBhbS5h bWdldHR1cGxlIDw+IDAgVEhFTiAnJTEkcycgRUxTRSAnJTIkcycgRU5EIEFTIFwiJTQkc1wiLFxu IgorCQkJCQkgICIgIENBU0UgV0hFTiBhbS5hbWdldGJpdG1hcCA8PiAwIFRIRU4gJyUxJHMnIEVM U0UgJyUyJHMnIEVORCBBUyBcIiU1JHNcIixcbiIKKwkJCQkJICAiICBDQVNFIFdIRU4gYW0uYW1j YW5iYWNrd2FyZCBUSEVOICclMSRzJyBFTFNFICclMiRzJyBFTkQgQVMgXCIlNiRzXCJcbiIsCisJ CQkJCSAgZ2V0dGV4dF9ub29wKCJ5ZXMiKSwKKwkJCQkJICBnZXR0ZXh0X25vb3AoIm5vIiksCisJ CQkJCSAgZ2V0dGV4dF9ub29wKCJDbHVzdGVyYWJsZSIpLAorCQkJCQkgIGdldHRleHRfbm9vcCgi SW5kZXggc2NhbiIpLAorCQkJCQkgIGdldHRleHRfbm9vcCgiQml0bWFwIHNjYW4iKSwKKwkJCQkJ ICBnZXR0ZXh0X25vb3AoIkJhY2t3YXJkIHNjYW4iKSk7CisJYXBwZW5kUFFFeHBCdWZmZXJTdHIo JmJ1ZiwKKwkJCQkJICAiRlJPTSBwZ19jYXRhbG9nLnBnX2NsYXNzIGNcbiIKKwkJCQkJICAiICBM RUZUIEpPSU4gcGdfY2F0YWxvZy5wZ19uYW1lc3BhY2UgbiBPTiBuLm9pZCA9IGMucmVsbmFtZXNw YWNlXG4iCisJCQkJCSAgIiAgTEVGVCBKT0lOIHBnX2NhdGFsb2cucGdfYW0gYW0gT04gYW0ub2lk ID0gYy5yZWxhbVxuIgorCQkJCQkgICJXSEVSRSBjLnJlbGtpbmQ9J2knXG4iCisJCQkJCSAgIiAg QU5EIG4ubnNwbmFtZSAhfiAncGdfdG9hc3QnXG4iKTsKKworCWlmICghc2hvd1N5c3RlbSAmJiAh cGF0dGVybikKKwkJYXBwZW5kUFFFeHBCdWZmZXJTdHIoJmJ1ZiwKKwkJCQkJCQkgIiAgQU5EIG4u bnNwbmFtZSA8PiAncGdfY2F0YWxvZydcbiIKKwkJCQkJCQkgIiAgQU5EIG4ubnNwbmFtZSA8PiAn aW5mb3JtYXRpb25fc2NoZW1hJ1xuIik7CisKKwlwcm9jZXNzU1FMTmFtZVBhdHRlcm4ocHNldC5k YiwgJmJ1ZiwgcGF0dGVybiwgdHJ1ZSwgZmFsc2UsCisJCQkJCQkgICJuLm5zcG5hbWUiLCAiYy5y ZWxuYW1lIiwgTlVMTCwgTlVMTCk7CisKKwlhcHBlbmRQUUV4cEJ1ZmZlclN0cigmYnVmLCAiT1JE RVIgQlkgMTsiKTsKKwlyZXMgPSBQU1FMZXhlYyhidWYuZGF0YSk7CisJdGVybVBRRXhwQnVmZmVy KCZidWYpOworCWlmICghcmVzKQorCQlyZXR1cm4gZmFsc2U7CisKKwlteW9wdC5udWxsUHJpbnQg PSBOVUxMOworCW15b3B0LnRpdGxlID0gXygiSW5kZXggcHJvcGVydGllcyIpOworCW15b3B0LnRy YW5zbGF0ZV9oZWFkZXIgPSB0cnVlOworCW15b3B0LnRyYW5zbGF0ZV9jb2x1bW5zID0gdHJhbnNs YXRlX2NvbHVtbnM7CisJbXlvcHQubl90cmFuc2xhdGVfY29sdW1ucyA9IGxlbmd0aG9mKHRyYW5z bGF0ZV9jb2x1bW5zKTsKKworCXByaW50UXVlcnkocmVzLCAmbXlvcHQsIHBzZXQucXVlcnlGb3V0 LCBmYWxzZSwgcHNldC5sb2dmaWxlKTsKKworCVBRY2xlYXIocmVzKTsKKwlyZXR1cm4gdHJ1ZTsK K30KKworLyoKKyAqIFxkaWNwCisgKiBEZXNjcmliZXMgaW5kZXggaW5kZXggY29sdW1uIHByb3Bl cnRpZXMuCisgKgorICogVGFrZXMgYW4gb3B0aW9uYWwgcmVnZXhwIHRvIHNlbGVjdCBwYXJ0aWN1 bGFyIGluZGV4LgorICovCitib29sCitkZXNjcmliZUluZGV4Q29sdW1uUHJvcGVydGllcyhjb25z dCBjaGFyICppbmRleF9wYXR0ZXJuLCBib29sIHNob3dTeXN0ZW0pCit7CisJUFFFeHBCdWZmZXJE YXRhIGJ1ZjsKKwlQR3Jlc3VsdCAgICpyZXM7CisJaW50CQkJaTsKKworCWluaXRQUUV4cEJ1ZmZl cigmYnVmKTsKKworCXByaW50ZlBRRXhwQnVmZmVyKCZidWYsCisJCQkJCSAgIlNFTEVDVCBESVNU SU5DVCBjLm9pZCxcbiIKKwkJCQkJICAiICBuLm5zcG5hbWUsXG4iCisJCQkJCSAgIiAgYy5yZWxu YW1lLFxuIgorCQkJCQkgICIgIGFtLmFtbmFtZSxcbiIKKwkJCQkJICAiICBjMi5yZWxuYW1lXG4i CisJCQkJCSAgIkZST00gcGdfY2F0YWxvZy5wZ19jbGFzcyBjXG4iCisJCQkJCSAgIiAgTEVGVCBK T0lOIHBnX2NhdGFsb2cucGdfbmFtZXNwYWNlIG4gT04gbi5vaWQgPSByZWxuYW1lc3BhY2VcbiIK KwkJCQkJICAiICBMRUZUIEpPSU4gcGdfY2F0YWxvZy5wZ19hbSBhbSBPTiBhbS5vaWQgPSBjLnJl bGFtXG4iCisJCQkJCSAgIiAgTEVGVCBKT0lOIHBnX2NhdGFsb2cucGdfaW5kZXggaSBPTiBpLmlu ZGV4cmVsaWQgPSBjLm9pZFxuIgorCQkJCQkgICIgIExFRlQgSk9JTiBwZ19jYXRhbG9nLnBnX2Ns YXNzIGMyIE9OIGkuaW5kcmVsaWQgPSBjMi5vaWRcbiIpOworCisJYXBwZW5kUFFFeHBCdWZmZXJT dHIoJmJ1ZiwgIldIRVJFIGMucmVsa2luZD0naSdcbiIpOworCisJaWYgKCFzaG93U3lzdGVtICYm ICFpbmRleF9wYXR0ZXJuKQorCQlhcHBlbmRQUUV4cEJ1ZmZlclN0cigmYnVmLCAiQU5EIG4ubnNw bmFtZSA8PiAncGdfY2F0YWxvZydcbiIKKwkJCQkJCQkgIkFORCBuLm5zcG5hbWUgPD4gJ2luZm9y bWF0aW9uX3NjaGVtYSdcbiIpOworCisJcHJvY2Vzc1NRTE5hbWVQYXR0ZXJuKHBzZXQuZGIsICZi dWYsIGluZGV4X3BhdHRlcm4sIHRydWUsIGZhbHNlLAorCQkJCQkJICAibi5uc3BuYW1lIiwgImMu cmVsbmFtZSIsIE5VTEwsCisJCQkJCQkgICJwZ19jYXRhbG9nLnBnX3RhYmxlX2lzX3Zpc2libGUo Yy5vaWQpIik7CisKKwlhcHBlbmRQUUV4cEJ1ZmZlclN0cigmYnVmLCAiT1JERVIgQlkgMiwgMzsi KTsKKworCXJlcyA9IFBTUUxleGVjKGJ1Zi5kYXRhKTsKKwl0ZXJtUFFFeHBCdWZmZXIoJmJ1Zik7 CisJaWYgKCFyZXMpCisJCXJldHVybiBmYWxzZTsKKworCWlmIChQUW50dXBsZXMocmVzKSA9PSAw KQorCXsKKwkJaWYgKCFwc2V0LnF1aWV0KQorCQl7CisJCQlpZiAoaW5kZXhfcGF0dGVybikKKwkJ CQlwc3FsX2Vycm9yKCJEaWQgbm90IGZpbmQgYW55IGluZGV4IG5hbWVkIFwiJXNcIlxuIiwKKwkJ CQkJCSAgIGluZGV4X3BhdHRlcm4pOworCQkJZWxzZQorCQkJCXBzcWxfZXJyb3IoIkRpZCBub3Qg ZmluZCBhbnkgcmVsYXRpb25zLlxuIik7CisJCX0KKwkJUFFjbGVhcihyZXMpOworCQlyZXR1cm4g ZmFsc2U7CisJfQorCisJZm9yIChpID0gMDsgaSA8IFBRbnR1cGxlcyhyZXMpOyBpKyspCisJewor CQljb25zdCBjaGFyICpvaWQgPSBQUWdldHZhbHVlKHJlcywgaSwgMCk7CisJCWNvbnN0IGNoYXIg Km5zcG5hbWUgPSBQUWdldHZhbHVlKHJlcywgaSwgMSk7CisJCWNvbnN0IGNoYXIgKmlkeG5hbWUg PSBQUWdldHZhbHVlKHJlcywgaSwgMik7CisJCWNvbnN0IGNoYXIgKmFtbmFtZSA9IFBRZ2V0dmFs dWUocmVzLCBpLCAzKTsKKwkJY29uc3QgY2hhciAqdGFibmFtZSA9IFBRZ2V0dmFsdWUocmVzLCBp LCA0KTsKKworCQlpZiAoIWRlc2NyaWJlT25lSW5kZXhDb2x1bW5Qcm9wZXJ0aWVzKG9pZCwgbnNw bmFtZSwgaWR4bmFtZSwgYW1uYW1lLAorCQkJCQkJCQkJCQkgIHRhYm5hbWUpKQorCQl7CisJCQlQ UWNsZWFyKHJlcyk7CisJCQlyZXR1cm4gZmFsc2U7CisJCX0KKwkJaWYgKGNhbmNlbF9wcmVzc2Vk KQorCQl7CisJCQlQUWNsZWFyKHJlcyk7CisJCQlyZXR1cm4gZmFsc2U7CisJCX0KKwl9CisKKwlQ UWNsZWFyKHJlcyk7CisJcmV0dXJuIHRydWU7Cit9CisKK3N0YXRpYyBib29sCitkZXNjcmliZU9u ZUluZGV4Q29sdW1uUHJvcGVydGllcyhjb25zdCBjaGFyICpvaWQsCisJCQkJCQkJCSBjb25zdCBj aGFyICpuc3BuYW1lLAorCQkJCQkJCQkgY29uc3QgY2hhciAqaWR4bmFtZSwKKwkJCQkJCQkJIGNv bnN0IGNoYXIgKmFtbmFtZSwKKwkJCQkJCQkJIGNvbnN0IGNoYXIgKnRhYm5hbWUpCit7CisJUFFF eHBCdWZmZXJEYXRhIGJ1ZjsKKwlQR3Jlc3VsdCAgICpyZXM7CisJcHJpbnRRdWVyeU9wdCBteW9w dCA9IHBzZXQucG9wdDsKKwljaGFyCSAgICpmb290ZXJzWzNdID0ge05VTEwsIE5VTEx9OworCXN0 YXRpYyBjb25zdCBib29sIHRyYW5zbGF0ZV9jb2x1bW5zW10gPSB7ZmFsc2UsIGZhbHNlLCBmYWxz ZSwgZmFsc2UsIGZhbHNlLAorCQkJCQkJCQkJCQkgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2Us IGZhbHNlfTsKKworCWluaXRQUUV4cEJ1ZmZlcigmYnVmKTsKKworCXByaW50ZlBRRXhwQnVmZmVy KCZidWYsCisJCQkJICAiU0VMRUNUXG4iCisJCQkJICAiICBhLmF0dG5hbWUgQVMgXCIlc1wiLFxu IgorCQkJCSAgIiAgcGdfY2F0YWxvZy5wZ19nZXRfaW5kZXhkZWYoaS5pbmRleHJlbGlkLCBhLmF0 dG51bSwgdHJ1ZSkgQVMgXCIlc1wiLFxuIgorCQkJCSAgIiAgQ0FTRSBXSEVOIHBnX2NhdGFsb2cu cGdfb3BjbGFzc19pc192aXNpYmxlKG8ub2lkKSBUSEVOICcnIEVMU0Ugbi5uc3BuYW1lIHx8ICcu JyBFTkQgfHwgby5vcGNuYW1lIEFTIFwiJXNcIixcbiIsCisJCQkJICBnZXR0ZXh0X25vb3AoIkNv bHVtbiBuYW1lIiksCisJCQkJICBnZXR0ZXh0X25vb3AoIkV4cHIiKSwKKwkJCQkgIGdldHRleHRf bm9vcCgiT3BjbGFzcyIpKTsKKworCWlmIChwc2V0LnN2ZXJzaW9uID49IDkwNjAwKQorCQlhcHBl bmRQUUV4cEJ1ZmZlcigmYnVmLAorCQkJCQkgICIgIENBU0VcbiIKKwkJCQkJICAiICAgIFdIRU4g cGdfY2F0YWxvZy5wZ19pbmRleF9jb2x1bW5faGFzX3Byb3BlcnR5KGMub2lkLCBhLmF0dG51bSwg J29yZGVyYWJsZScpID0gdHJ1ZSBcbiIKKwkJCQkJICAiICAgIFRIRU4gQ0FTRSBXSEVOIHBnX2Nh dGFsb2cucGdfaW5kZXhfY29sdW1uX2hhc19wcm9wZXJ0eShjLm9pZCwgYS5hdHRudW0sICdhc2Mn KVxuIgorCQkJCQkgICIgICAgICAgICBUSEVOICclMSRzJyBFTFNFICclMiRzJyBFTkQgXG4iCisJ CQkJCSAgIiAgICBFTFNFIE5VTEwiCisJCQkJCSAgIiAgRU5EIEFTIFwiJTMkc1wiLCIKKwkJCQkJ ICAiICBDQVNFXG4iCisJCQkJCSAgIiAgICBXSEVOIHBnX2NhdGFsb2cucGdfaW5kZXhfY29sdW1u X2hhc19wcm9wZXJ0eShjLm9pZCwgYS5hdHRudW0sICdvcmRlcmFibGUnKSA9IHRydWUgXG4iCisJ CQkJCSAgIiAgICBUSEVOIENBU0UgV0hFTiBwZ19jYXRhbG9nLnBnX2luZGV4X2NvbHVtbl9oYXNf cHJvcGVydHkoYy5vaWQsIGEuYXR0bnVtLCAnbnVsbHNfZmlyc3QnKVxuIgorCQkJCQkgICIgICAg ICAgICBUSEVOICclMSRzJyBFTFNFICclMiRzJyBFTkQgXG4iCisJCQkJCSAgIiAgICBFTFNFIE5V TEwiCisJCQkJCSAgIiAgRU5EIEFTIFwiJTQkc1wiLCIKKwkJCQkJICAiICBDQVNFIFdIRU4gcGdf Y2F0YWxvZy5wZ19pbmRleF9jb2x1bW5faGFzX3Byb3BlcnR5KGMub2lkLCBhLmF0dG51bSwgJ29y ZGVyYWJsZScpXG4iCisJCQkJCSAgIiAgICBUSEVOICclMSRzJyBFTFNFICclMiRzJyBFTkQgQVMg XCIlNSRzXCIsXG4iCisJCQkJCSAgIiAgQ0FTRSBXSEVOIHBnX2NhdGFsb2cucGdfaW5kZXhfY29s dW1uX2hhc19wcm9wZXJ0eShjLm9pZCwgYS5hdHRudW0sICdkaXN0YW5jZV9vcmRlcmFibGUnKVxu IgorCQkJCQkgICIgICAgVEhFTiAnJTEkcycgRUxTRSAnJTIkcycgRU5EIEFTIFwiJTYkc1wiLFxu IgorCQkJCQkgICIgIENBU0UgV0hFTiBwZ19jYXRhbG9nLnBnX2luZGV4X2NvbHVtbl9oYXNfcHJv cGVydHkoYy5vaWQsIGEuYXR0bnVtLCAncmV0dXJuYWJsZScpXG4iCisJCQkJCSAgIiAgICBUSEVO ICclMSRzJyBFTFNFICclMiRzJyBFTkQgQVMgXCIlNyRzXCIsXG4iCisJCQkJCSAgIiAgQ0FTRSBX SEVOIHBnX2NhdGFsb2cucGdfaW5kZXhfY29sdW1uX2hhc19wcm9wZXJ0eShjLm9pZCwgYS5hdHRu dW0sICdzZWFyY2hfYXJyYXknKVxuIgorCQkJCQkgICIgICAgVEhFTiAnJTEkcycgRUxTRSAnJTIk cycgRU5EIEFTIFwiJTgkc1wiLFxuIgorCQkJCQkgICIgIENBU0UgV0hFTiBwZ19jYXRhbG9nLnBn X2luZGV4X2NvbHVtbl9oYXNfcHJvcGVydHkoYy5vaWQsIGEuYXR0bnVtLCAnc2VhcmNoX251bGxz JylcbiIKKwkJCQkJICAiICAgIFRIRU4gJyUxJHMnIEVMU0UgJyUyJHMnIEVORCBBUyBcIiU5JHNc IlxuIiwKKwkJCQkJICBnZXR0ZXh0X25vb3AoInllcyIpLAorCQkJCQkgIGdldHRleHRfbm9vcCgi bm8iKSwKKwkJCQkJICBnZXR0ZXh0X25vb3AoIkFTQyIpLAorCQkJCQkgIGdldHRleHRfbm9vcCgi TnVsbHMgZmlyc3QiKSwKKwkJCQkJICBnZXR0ZXh0X25vb3AoIk9yZGVyYWJsZSIpLAorCQkJCQkg IGdldHRleHRfbm9vcCgiRGlzdGFuY2Ugb3JkZXJhYmxlIiksCisJCQkJCSAgZ2V0dGV4dF9ub29w KCJSZXR1cm5hYmxlIiksCisJCQkJCSAgZ2V0dGV4dF9ub29wKCJTZWFyY2ggYXJyYXkiKSwKKwkJ CQkJICBnZXR0ZXh0X25vb3AoIlNlYXJjaCBudWxscyIpKTsKKwllbHNlCisJCWFwcGVuZFBRRXhw QnVmZmVyKCZidWYsCisJCQkJCSAgIiAgQ0FTRSBXSEVOIGFtLmFtY2Fub3JkZXIgVEhFTiBDQVNF XG4iCisJCQkJCSAgIiAgICBXSEVOIChpLmluZG9wdGlvblthLmF0dG51bSAtIDFdICYgJTEkZCkg PSAgMFxuIiAvKiBJTkRPUFRJT05fREVTQyAqLworCQkJCQkgICIgICAgVEhFTiAnJTIkcycgRUxT RSAnJTMkcycgRU5EXG4iCisJCQkJCSAgIiAgRUxTRSBOVUxMIEVORCBBUyBcIiU0JHNcIixcbiIK KwkJCQkJICAiICBDQVNFIFdIRU4gYW0uYW1jYW5vcmRlciBUSEVOIENBU0VcbiIKKwkJCQkJICAi ICAgIFdIRU4gKGkuaW5kb3B0aW9uW2EuYXR0bnVtIC0gMV0gJiAlNSRkKSA8PiAwXG4iIC8qIElO RE9QVElPTl9OVUxMU19GSVJTVCAqLworCQkJCQkgICIgICAgVEhFTiAnJTIkcycgRUxTRSAnJTMk cycgRU5EXG4iCisJCQkJCSAgIiAgRUxTRSBOVUxMIEVORCBBUyBcIiU2JHNcIixcbiIKKwkJCQkJ ICAiICBDQVNFIFdIRU4gYW0uYW1jYW5vcmRlciBUSEVOICclMiRzJyBFTFNFICclMyRzJyBFTkQg QVMgXCIlNyRzXCIsXG4iCisJCQkJCSAgIiAgQ0FTRSBXSEVOIGFtLmFtY2Fub3JkZXJieW9wIFRI RU4gJyUyJHMnIEVMU0UgJyUzJHMnIEVORCBBUyBcIiU4JHNcIixcbiIKKwkJCQkJICAiICBDQVNF IFdIRU4gYW0uYW1zZWFyY2hhcnJheSBUSEVOICclMiRzJyBFTFNFICclMyRzJyBFTkQgQVMgXCIl OSRzXCIsXG4iCisJCQkJCSAgIiAgQ0FTRSBXSEVOIGFtLmFtc2VhcmNobnVsbHMgVEhFTiAnJTIk cycgRUxTRSAnJTMkcycgRU5EIEFTIFwiJTEwJHNcIlxuIiwKKwkJCQkJICBJTkRPUFRJT05fREVT QywKKwkJCQkJICBnZXR0ZXh0X25vb3AoInllcyIpLAorCQkJCQkgIGdldHRleHRfbm9vcCgibm8i KSwKKwkJCQkJICBnZXR0ZXh0X25vb3AoIkFTQyIpLAorCQkJCQkgIElORE9QVElPTl9OVUxMU19G SVJTVCwKKwkJCQkJICBnZXR0ZXh0X25vb3AoIk51bGxzIGZpcnN0IiksCisJCQkJCSAgZ2V0dGV4 dF9ub29wKCJPcmRlcmFibGUiKSwKKwkJCQkJICBnZXR0ZXh0X25vb3AoIkRpc3RhbmNlIG9yZGVy YWJsZSIpLAorCQkJCQkgIGdldHRleHRfbm9vcCgiU2VhcmNoIGFycmF5IiksCisJCQkJCSAgZ2V0 dGV4dF9ub29wKCJTZWFyY2ggbnVsbHMiKSk7CisKKwlhcHBlbmRQUUV4cEJ1ZmZlcigmYnVmLAor CQkJCQkgICJGUk9NIHBnX2NhdGFsb2cucGdfY2xhc3MgY1xuIgorCQkJCQkgICIgIExFRlQgSk9J TiBwZ19jYXRhbG9nLnBnX2luZGV4IGkgT04gaS5pbmRleHJlbGlkID0gYy5vaWRcbiIKKwkJCQkJ ICAiICBMRUZUIEpPSU4gcGdfY2F0YWxvZy5wZ19hdHRyaWJ1dGUgYSBPTiBhLmF0dHJlbGlkID0g Yy5vaWRcbiIKKwkJCQkJICAiICBMRUZUIEpPSU4gcGdfY2F0YWxvZy5wZ19vcGNsYXNzIG8gT04g by5vaWQgPSAoaS5pbmRjbGFzczo6cGdfY2F0YWxvZy5vaWRbXSlbYS5hdHRudW0gLSAxXVxuIgor CQkJCQkgICIgIExFRlQgSk9JTiBwZ19jYXRhbG9nLnBnX25hbWVzcGFjZSBuIE9OIG4ub2lkID0g by5vcGNuYW1lc3BhY2VcbiIpOworCWlmIChwc2V0LnN2ZXJzaW9uIDwgOTA2MDApCisJCWFwcGVu ZFBRRXhwQnVmZmVyKCZidWYsCisJCQkJCSAgIiAgTEVGVCBKT0lOIHBnX2NhdGFsb2cucGdfYW0g YW0gT04gYW0ub2lkID0gYy5yZWxhbVxuIik7CisJYXBwZW5kUFFFeHBCdWZmZXIoJmJ1ZiwKKwkJ CQkJICAiV0hFUkUgYy5vaWQgPSAlc1xuIgorCQkJCQkgICJPUkRFUiBCWSBhLmF0dG51bSIsCisJ CQkJCSAgb2lkKTsKKworCXJlcyA9IFBTUUxleGVjKGJ1Zi5kYXRhKTsKKwl0ZXJtUFFFeHBCdWZm ZXIoJmJ1Zik7CisJaWYgKCFyZXMpCisJCXJldHVybiBmYWxzZTsKKwlpZiAoUFFudHVwbGVzKHJl cykgPT0gMCkKKwl7CisJCVBRY2xlYXIocmVzKTsKKwkJcmV0dXJuIHRydWU7CisJfQorCisJbXlv cHQubnVsbFByaW50ID0gTlVMTDsKKwlteW9wdC50aXRsZSA9IHBzcHJpbnRmKF8oIkluZGV4ICVz LiVzIiksIG5zcG5hbWUsIGlkeG5hbWUpOworCWZvb3RlcnNbMF0gPSBwc3ByaW50ZihfKCJUYWJs ZTogJXMiKSwgdGFibmFtZSk7CisJZm9vdGVyc1sxXSA9IHBzcHJpbnRmKF8oIkFjY2VzcyBtZXRo b2Q6ICVzIiksIGFtbmFtZSk7CisJbXlvcHQuZm9vdGVycyA9IGZvb3RlcnM7CisJbXlvcHQudG9w dC5kZWZhdWx0X2Zvb3RlciA9IGZhbHNlOworCW15b3B0LnRyYW5zbGF0ZV9oZWFkZXIgPSB0cnVl OworCW15b3B0LnRyYW5zbGF0ZV9jb2x1bW5zID0gdHJhbnNsYXRlX2NvbHVtbnM7CisJbXlvcHQu bl90cmFuc2xhdGVfY29sdW1ucyA9IGxlbmd0aG9mKHRyYW5zbGF0ZV9jb2x1bW5zKTsKKworCXBy aW50UXVlcnkocmVzLCAmbXlvcHQsIHBzZXQucXVlcnlGb3V0LCBmYWxzZSwgcHNldC5sb2dmaWxl KTsKKwlQUWNsZWFyKHJlcyk7CisJcmV0dXJuIHRydWU7Cit9CmRpZmYgLS1naXQgYS9zcmMvYmlu L3BzcWwvZGVzY3JpYmUuaCBiL3NyYy9iaW4vcHNxbC9kZXNjcmliZS5oCmluZGV4IDZjY2U4MGYy NjAuLjg2Y2UxODA3MWIgMTAwNjQ0Ci0tLSBhL3NyYy9iaW4vcHNxbC9kZXNjcmliZS5oCisrKyBi L3NyYy9iaW4vcHNxbC9kZXNjcmliZS5oCkBAIC0xMjgsNCArMTI4LDExIEBAIGV4dGVybiBib29s IGRlc2NyaWJlQWNjZXNzTWV0aG9kT3BlcmF0b3JDbGFzc2VzKGNvbnN0IGNoYXIgKmFjY2Vzc19t ZXRob2RfcGF0dGVyCiAJCQkJCQkJCQkJCQljb25zdCBjaGFyICpvcGNsYXNzX3BhdHRlcm4sCiAJ CQkJCQkJCQkJCQlib29sIHZlcmJvc2UpOwogCisvKiBcZGlwICovCitleHRlcm4gYm9vbCBkZXNj cmliZUluZGV4UHJvcGVydGllcyhjb25zdCBjaGFyICpwYXR0ZXJuLCBib29sIHNob3dTeXN0ZW0p OworCisvKiBcZGljcCAqLworZXh0ZXJuIGJvb2wgZGVzY3JpYmVJbmRleENvbHVtblByb3BlcnRp ZXMoY29uc3QgY2hhciAqaW5kZXhQYXR0ZXJuLAorCQkJCQkJCQkJCSAgYm9vbCBzaG93U3lzdGVt KTsKKwogI2VuZGlmCQkJCQkJCS8qIERFU0NSSUJFX0ggKi8KZGlmZiAtLWdpdCBhL3NyYy9iaW4v cHNxbC9oZWxwLmMgYi9zcmMvYmluL3BzcWwvaGVscC5jCmluZGV4IGE4ZDJiNTNiNjIuLjFjOWEy NDJlMmUgMTAwNjQ0Ci0tLSBhL3NyYy9iaW4vcHNxbC9oZWxwLmMKKysrIGIvc3JjL2Jpbi9wc3Fs L2hlbHAuYwpAQCAtMjQ3LDYgKzI0Nyw4IEBAIHNsYXNoVXNhZ2UodW5zaWduZWQgc2hvcnQgaW50 IHBhZ2VyKQogCWZwcmludGYob3V0cHV0LCBfKCIgIFxcZEZ0WytdIFtQQVRURVJOXSAgICAgIGxp c3QgdGV4dCBzZWFyY2ggdGVtcGxhdGVzXG4iKSk7CiAJZnByaW50ZihvdXRwdXQsIF8oIiAgXFxk Z1tTK10gW1BBVFRFUk5dICAgICAgbGlzdCByb2xlc1xuIikpOwogCWZwcmludGYob3V0cHV0LCBf KCIgIFxcZGlbUytdIFtQQVRURVJOXSAgICAgIGxpc3QgaW5kZXhlc1xuIikpOworCWZwcmludGYo b3V0cHV0LCBfKCIgIFxcZGlwW1NdIFtQQVRURVJOXSAgICAgIGxpc3QgaW5kZXhlcyB3aXRoIHBy b3BlcnRpZXNcbiIpKTsKKwlmcHJpbnRmKG91dHB1dCwgXygiICBcXGRpY3BbU11bUEFUVEVSTl0g ICAgICBzaG93IGluZGV4IGNvbHVtbiBwcm9wZXJ0aWVzXG4iKSk7CiAJZnByaW50ZihvdXRwdXQs IF8oIiAgXFxkbCAgICAgICAgICAgICAgICAgICAgbGlzdCBsYXJnZSBvYmplY3RzLCBzYW1lIGFz IFxcbG9fbGlzdFxuIikpOwogCWZwcmludGYob3V0cHV0LCBfKCIgIFxcZExbUytdIFtQQVRURVJO XSAgICAgIGxpc3QgcHJvY2VkdXJhbCBsYW5ndWFnZXNcbiIpKTsKIAlmcHJpbnRmKG91dHB1dCwg XygiICBcXGRtW1MrXSBbUEFUVEVSTl0gICAgICBsaXN0IG1hdGVyaWFsaXplZCB2aWV3c1xuIikp OwpkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wc3FsL3RhYi1jb21wbGV0ZS5jIGIvc3JjL2Jpbi9wc3Fs L3RhYi1jb21wbGV0ZS5jCmluZGV4IDc3MGQwOGY4NDMuLjkzMjE4NzQxYzIgMTAwNjQ0Ci0tLSBh L3NyYy9iaW4vcHNxbC90YWItY29tcGxldGUuYworKysgYi9zcmMvYmluL3BzcWwvdGFiLWNvbXBs ZXRlLmMKQEAgLTEzOTgsOCArMTM5OCw4IEBAIHBzcWxfY29tcGxldGlvbihjb25zdCBjaGFyICp0 ZXh0LCBpbnQgc3RhcnQsIGludCBlbmQpCiAJCSJcXGQiLCAiXFxkYSIsICJcXGRBIiwgIlxcZEFw IiwgIlxcZEFvIiwgIlxcZEFwIiwgIlxcZEFjIiwKIAkJIlxcZGIiLCAiXFxkYyIsICJcXGRDIiwg IlxcZGQiLCAiXFxkZHAiLCAiXFxkRCIsCiAJCSJcXGRlcyIsICJcXGRldCIsICJcXGRldSIsICJc XGRldyIsICJcXGRFIiwgIlxcZGYiLAotCQkiXFxkRiIsICJcXGRGZCIsICJcXGRGcCIsICJcXGRG dCIsICJcXGRnIiwgIlxcZGkiLCAiXFxkbCIsICJcXGRMIiwKLQkJIlxcZG0iLCAiXFxkbiIsICJc XGRvIiwgIlxcZE8iLCAiXFxkcCIsCisJCSJcXGRGIiwgIlxcZEZkIiwgIlxcZEZwIiwgIlxcZEZ0 IiwgIlxcZGciLCAiXFxkaSIsICJcXGRpY3AiLCAiXFxkaXAiLAorCQkiXFxkbCIsICJcXGRMIiwg IlxcZG0iLCAiXFxkbiIsICJcXGRvIiwgIlxcZE8iLCAiXFxkcCIsCiAJCSJcXGRyZHMiLCAiXFxk UnMiLCAiXFxkUnAiLCAiXFxkcyIsICJcXGRTIiwKIAkJIlxcZHQiLCAiXFxkVCIsICJcXGR2Iiwg IlxcZHUiLCAiXFxkeCIsICJcXGR5IiwKIAkJIlxcZSIsICJcXGVjaG8iLCAiXFxlZiIsICJcXGVs aWYiLCAiXFxlbHNlIiwgIlxcZW5jb2RpbmciLApkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVncmVz cy9leHBlY3RlZC9wc3FsLm91dCBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvcHNxbC5vdXQK aW5kZXggNzQ5NmVkZTI4Mi4uMzMwMzZjYWRhZCAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvcmVncmVz cy9leHBlY3RlZC9wc3FsLm91dAorKysgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3BzcWwu b3V0CkBAIC00NjMxLDMgKzQ2MzEsMTkgQEAgTGlzdCBvcGVyYXRvcnMgb2YgZmFtaWx5IHJlbGF0 ZWQgdG8gYWNjZXNzIG1ldGhvZAogIGJyaW4gfCBvaWQgICAgICAgIHwgICAgICAgICAgICAgIHwg b2lkX21pbm1heF9vcHMgfCB5ZXMKICgxIHJvdykKIAorLS0gY2hlY2sgcHJpbnRpbmcgaW5mbyBh Ym91dCBpbmRleGVzCitcZGlwIHBnX2FtX25hbWVfaW5kZXgKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgSW5kZXggcHJvcGVydGllcworICAgU2NoZW1hICAgfCAg ICAgICBOYW1lICAgICAgIHwgQWNjZXNzIG1ldGhvZCB8IENsdXN0ZXJhYmxlIHwgSW5kZXggc2Nh biB8IEJpdG1hcCBzY2FuIHwgQmFja3dhcmQgc2NhbiAKKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0t LS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0t LS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tCisgcGdfY2F0YWxvZyB8IHBnX2FtX25hbWVfaW5kZXgg fCBidHJlZSAgICAgICAgIHwgeWVzICAgICAgICAgfCB5ZXMgICAgICAgIHwgeWVzICAgICAgICAg fCB5ZXMKKygxIHJvdykKKworXGRpY3AgcGdfYW1fbmFtZV9pbmRleAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5kZXggcGdfY2F0YWxvZy5wZ19hbV9u YW1lX2luZGV4CisgQ29sdW1uIG5hbWUgfCAgRXhwciAgfCBPcGNsYXNzICB8IEFTQyB8IE51bGxz IGZpcnN0IHwgT3JkZXJhYmxlIHwgRGlzdGFuY2Ugb3JkZXJhYmxlIHwgUmV0dXJuYWJsZSB8IFNl YXJjaCBhcnJheSB8IFNlYXJjaCBudWxscyAKKy0tLS0tLS0tLS0tLS0rLS0tLS0tLS0rLS0tLS0t LS0tLSstLS0tLSstLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0t Ky0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLQorIGFtbmFtZSAgICAg IHwgYW1uYW1lIHwgbmFtZV9vcHMgfCB5ZXMgfCBubyAgICAgICAgICB8IHllcyAgICAgICB8IG5v ICAgICAgICAgICAgICAgICB8IHllcyAgICAgICAgfCB5ZXMgICAgICAgICAgfCB5ZXMKK1RhYmxl OiBwZ19hbQorQWNjZXNzIG1ldGhvZDogYnRyZWUKKwpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVn cmVzcy9zcWwvcHNxbC5zcWwgYi9zcmMvdGVzdC9yZWdyZXNzL3NxbC9wc3FsLnNxbAppbmRleCA3 NGNjNzE0MmRhLi4wYjdkYWE1ZDBlIDEwMDY0NAotLS0gYS9zcmMvdGVzdC9yZWdyZXNzL3NxbC9w c3FsLnNxbAorKysgYi9zcmMvdGVzdC9yZWdyZXNzL3NxbC9wc3FsLnNxbApAQCAtMTAzOSwzICsx MDM5LDYgQEAgc2VsZWN0IDEvKDE1LXVuaXF1ZTIpIGZyb20gdGVuazEgb3JkZXIgYnkgdW5pcXVl MiBsaW1pdCAxOTsKIFxkQXAgYnJpbiB1dWlkX21pbm1heF9vcHMKIFxkQXAgKiBwZ19jYXRhbG9n LnV1aWRfb3BzCiBcZEFjIGJyaW4gcGcqLm9pZCoKKy0tIGNoZWNrIHByaW50aW5nIGluZm8gYWJv dXQgaW5kZXhlcworXGRpcCBwZ19hbV9uYW1lX2luZGV4CitcZGljcCBwZ19hbV9uYW1lX2luZGV4 Cg== --=_88cc961307de3421175af21993a11ff4--