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 1vvqtn-0069FN-0p for pgsql-hackers@arkaria.postgresql.org; Fri, 27 Feb 2026 06:00:27 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1vvqtm-0012A3-0F for pgsql-hackers@arkaria.postgresql.org; Fri, 27 Feb 2026 06:00:26 +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 1vvqtl-00129p-2C for pgsql-hackers@lists.postgresql.org; Fri, 27 Feb 2026 06:00:25 +0000 Received: from mail-ej1-x62b.google.com ([2a00:1450:4864:20::62b]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1vvqti-00000001W90-2Ti7 for pgsql-hackers@lists.postgresql.org; Fri, 27 Feb 2026 06:00:25 +0000 Received: by mail-ej1-x62b.google.com with SMTP id a640c23a62f3a-b935b8dcab7so259867066b.1 for ; Thu, 26 Feb 2026 22:00:23 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1772172022; cv=none; d=google.com; s=arc-20240605; b=ffNx/f6cf1CnfoWMq14BrYSVgYE3j+aWzY80DvwybjsahfVdFrrn2Xw4Amj48/xGir xn9Uov286OBIC1lmJwHkciL0bKeykEXLg07K/zyYxXqFvBEyEKiTWl3n5YHIFoBLmNps V5ccmtq8FcuGIbL8nXlazcClIgNIfMd1rehpRvG0nAVRVU5iWOe8h6+ZYDtnA1nqkqLg Uiq7rkOzR8ILKtBVYilzTM+99GKf4tFuq5Fs6rZl+Wyj9oBFG4MyzfhZWn2QsUfjObAB HKUsLzTKPm4wosNsyWQRm4bFb2+GfG/Kx9baWF+jiTX06V7ISCVtS9VzFPcqY0R5glyg pDUg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20240605; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:dkim-signature; bh=KYVDcaxsbK0oKFkTSnJIXMdrsc7fxjYLtRJI3mCJLCs=; fh=C1+lIqWjIlktG8y34pYS2L6k4IhXDzvRou+xOGnMz2Q=; b=GvFfV2uRg3/Md6ctuGq3u3NqXBjq2DoJarAElWztjI2dy6/J7EcMMMIIBJU2iE+hbF bnIPWofK0I33nWZdlaIIp8/ryEF35ZEhkqw0YUFXSp9O84nHx6rEQklO5Hn1RckxiiUN 6E5RsDI/nwXn0bk/aZPcoru8ItY2LvJjZWJ4xgJRRG7XcklEQyygLe0mjQ4X1edFyrpX p8rHxkPww3pfqKtyKMU8NM2YMqa0r4w24/V25nbDrWEH2z9mzwm3HhKmiCCmIZ8LbBpY 5hzkOmn2CJY/htjsUXB/fwgeBpIFZRx/uWMdtR8MdJzTx5vUnJLED3UEtFW9SXJuDw6P RMaQ==; darn=lists.postgresql.org ARC-Authentication-Results: i=1; mx.google.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1772172022; x=1772776822; 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=KYVDcaxsbK0oKFkTSnJIXMdrsc7fxjYLtRJI3mCJLCs=; b=aIwoDSd4D/mBidiwt7vv+ViYzPSU2ioDvVnu9aLsusO22KYnoZv1kn3fZKqrGS8gAm iU7MuwqJSLXWkMw6N+NUPE8vLvimmakLyzMW/84qP6q9filI99iQEXdKWP16esu2bbcu geHpo0tpYGdjujdXEt8A/S8qx8DnWRXu+18I8Clz8AhAryLCsBzt5BfdwaM9AfmigxDb 0oVRjwAJiqIwfTHuRHPy7YJzw/hp3uDBNyUErPAfmbBavkRA+viRrCke55z/VYCqitlF n5HsrAWpSpPrD2s6td2ADbEZ8OdoQQ4SWdFhFLJtIh2RlDUZolqmJGuShM1obGkd0dh8 qjKA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1772172022; x=1772776822; 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=KYVDcaxsbK0oKFkTSnJIXMdrsc7fxjYLtRJI3mCJLCs=; b=WOhDNi7F2FLAOfoyL1h9L09R3IlDZ7GwfnkhlX62euWUQ/LFa7Bw76LkTUgP/mjN21 tk0ulE44j3mxyGCwQQ1C1ju8m4RML3PJMFxi16aqIy6H3HIysOnsUa6NedWz8MzMl+9+ lBpJyUHtvL/Jff7N2aeoYt9Zf5cdw8GXCprrnojRD3I9LfE9baSpaGSabhhWYDxAw5U2 Jfj+FxuglksuzasMaaBw0WQp6Ap06zky24rf6OBd6yo5izLjZxvvWZXJHiiqYWw7BPPm TO6grJreFZ7BDrnN9dz63a0mWF5MW/QeZcGIzOgYLSvHN3VDt9YLpgYhcTvf5WEyBNKC d/Qg== X-Gm-Message-State: AOJu0Yy6vkCRMUgMR5HHGnr1pyYUyF2ZMwogaDsxlngNQZB4/sKGR+Z1 fcTXr8lDz2PW6oPeGRSSHfew5th0Kr/rdU6BJ43Xtdyl11PQwex9lvJ03o3/TD3q9SwI6slcEYp PzcGIyZ9LZV3ojWMbPdS/5eq35WzdvMNsIQrO X-Gm-Gg: ATEYQzzfFVZJsC9UYH1/YglAKlTzyIgWLO36DuKQBTX7Kng9O1G9Z77rd5qR7xiw0x+ tCtDxIpE1oGROVhpldC5iHcSSQHdq+uSHywftAJ4t/NkWXqWAk9CK9bz5IXnylR4h/vFGj/HAZX 4itYNVVTOaNzj8DXa3lxnRnwV+Ew2gublMrR/KQjtocaN9iiihH/gRfR2Yipg4/jZTkS/2YU25K lUwxxFbq9uolcgCi06PuQDCBrQ4iNDzUhDYT7HOeGUtUXixxgr83xFDnyhO1NONLFqN3wUEL1SJ ou4gJs7vCABYBNkap6P5qTQ5ns6FyV8r4lE/W/BQA0D0l3BuVKTLtS+i7Y89+i9N5kOFcgkQzBx PbGMQL0pg3Fd6WIxcIaVdi7+Mcet9 X-Received: by 2002:a17:907:6d0b:b0:b8d:bf4d:7458 with SMTP id a640c23a62f3a-b93763b8264mr78218466b.24.1772172019150; Thu, 26 Feb 2026 22:00:19 -0800 (PST) MIME-Version: 1.0 References: In-Reply-To: From: Florents Tselai Date: Fri, 27 Feb 2026 07:59:38 +0200 X-Gm-Features: AaiRm536uvROGYNPEAVMvauBnTQI3-k7fE5K1bOXhe3puxhC_BSvQEAblh_y8Fo Message-ID: Subject: Re: Patch: Add tsmatch JSONPath operator for granular Full Text Search To: Chao Li Cc: pgsql-hackers Content-Type: multipart/mixed; boundary="000000000000af2b29064bc7f381" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000af2b29064bc7f381 Content-Type: multipart/alternative; boundary="000000000000af2b28064bc7f37f" --000000000000af2b28064bc7f37f Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Thu, Feb 26, 2026 at 8:48=E2=80=AFAM Chao Li wr= ote: > > > > On Feb 1, 2026, at 19:02, Florents Tselai > wrote: > > > > > > > > > > On Mon, Jan 26, 2026 at 7:22=E2=80=AFPM Florents Tselai < > florents.tselai@gmail.com> wrote: > > Hi, > > > > in real-life I work a lot with json & fts search, here's a feature I've > always wished I had, > > but never tackle it. Until yesterday that is. > > > > SELECT jsonb_path_query(doc, '$.comments[*] ? (@.user =3D=3D "Alice" && > @.body tsmatch "performance")'); > > > > This patch introduces a tsmatch boolean operator to the JSONPath engine= . > > By integrating FTS natively into path expressions, > > this operator allows for high-precision filtering of nested JSONB > structures=E2=80=94 > > solving issues with structural ambiguity and query complexity. > > > > Currently, users must choose between two suboptimal paths for FTS-ing > nested JSON: > > - Imprecise Global Indexing > > jsonb_to_tsvector aggregates text into a flat vector. > > This ignores JSON boundaries, leading to false positives when the same > key (e.g., "body") > > appears in different contexts (e.g., a "Product Description" vs. a > "Customer Review"). > > > > - Complex SQL Workarounds > > Achieving 100% precision requires unnesting the document via > jsonb_array_elements and LATERAL joins. > > This leads to verbose SQL and high memory overhead from generating > intermediate heap tuples. > > > > One of the most significant advantages of tsmatch is its ability to > participate in multi-condition predicates > > within the same JSON object - something jsonb_to_tsvector cannot do. > > > > SELECT jsonb_path_query(doc, '$.comments[*] ? (@.user =3D=3D "Alice" && > @.body tsmatch "performance")'); > > > > In a flat vector, the association between "Alice" and "performance" is > lost. > > tsmatch preserves this link by evaluating the FTS predicate in-place > during path traversal. > > > > While the SQL/JSON standard (ISO/IEC 9075-2) does not explicitly define > an FTS operator, > > tsmatch is architecturally modeled after the standard-defined like_rege= x. > > > > The implementation follows the like_regex precedent: > > it is a non-indexable predicate that relies on GIN path-matching for > pruning and heap re-checks for precision. > > Caching is scoped to the JsonPathExecContext, > > ensuring 'compile-once' efficiency per execution without violating the > stability requirements of prepared statements. > > > > This initial implementation uses plainto_tsquery. > > However, the grammar is designed to support a "mode" flag (similar to > like_regex flags) > > in future iterations to toggle between to_tsquery, websearch_to_tsquery= , > and phraseto_tsquery. > > > > Here's a v2, that implements the tsqparser clause > > > > So this should now work too > > > > select jsonb_path_query_array('["fast car", "slow car", "fast and > furious"]', '$[*] ? (@ tsmatch "fast car" tsqparser "w") > > > Hi Florents, > > Grant pinged me about this. I can review it in coming days. Can you pleas= e > rebase it? I failed to apply to current master. Also, the CF reported a > failure test case, please take a look. Hi Evan, thanks for having a look. The conflict was due to the intro of pg_fallthrough. Not related to this patch . I noticed the failure too, but I'm having a hard time reproducing it tbh. This fails for Debian Trixie with Meson. The same with Autoconf passes... https://github.com/Florents-Tselai/postgres/runs/65098077968 --000000000000af2b28064bc7f37f Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable


On T= hu, Feb 26, 2026 at 8:48=E2=80=AFAM Chao Li <li.evan.chao@gmail.com> wrote:


> On Feb 1, 2026, at 19:02, Florents Tselai <florents.tselai@gmail.com> wr= ote:
>
>
>
>
> On Mon, Jan 26, 2026 at 7:22=E2=80=AFPM Florents Tselai <florents.tselai@gmail.= com> wrote:
> Hi,
>
> in real-life I work a lot with json & fts search, here's a fea= ture I've always wished I had,
> but never tackle it. Until yesterday that is.
>
> SELECT jsonb_path_query(doc, '$.comments[*] ? (@.user =3D=3D "= ;Alice" && @.body tsmatch "performance")');
>
> This patch introduces a tsmatch boolean operator to the JSONPath engin= e.
> By integrating FTS natively into path expressions,
> this operator allows for high-precision filtering of nested JSONB stru= ctures=E2=80=94
> solving issues with structural ambiguity and query complexity.
>
> Currently, users must choose between two suboptimal paths for FTS-ing = nested JSON:
> - Imprecise Global Indexing
> jsonb_to_tsvector aggregates text into a flat vector.
> This ignores JSON boundaries, leading to false positives when the same= key (e.g., "body")
> appears in different contexts (e.g., a "Product Description"= vs. a "Customer Review").
>
> - Complex SQL Workarounds
> Achieving 100% precision requires unnesting the document via jsonb_arr= ay_elements and LATERAL joins.
> This leads to verbose SQL and high memory overhead from generating int= ermediate heap tuples.
>
> One of the most significant advantages of tsmatch is its ability to pa= rticipate in multi-condition predicates
> within the same JSON object - something jsonb_to_tsvector cannot do. >
> SELECT jsonb_path_query(doc, '$.comments[*] ? (@.user =3D=3D "= ;Alice" && @.body tsmatch "performance")');
>
> In a flat vector, the association between "Alice" and "= performance" is lost.
> tsmatch preserves this link by evaluating the FTS predicate in-place d= uring path traversal.
>
> While the SQL/JSON standard (ISO/IEC 9075-2) does not explicitly defin= e an FTS operator,
> tsmatch is architecturally modeled after the standard-defined like_reg= ex.
>
> The implementation follows the like_regex precedent:
> it is a non-indexable predicate that relies on GIN path-matching for p= runing and heap re-checks for precision.
> Caching is scoped to the JsonPathExecContext,
> ensuring 'compile-once' efficiency per execution without viola= ting the stability requirements of prepared statements.
>
> This initial implementation uses plainto_tsquery.
> However, the grammar is designed to support a "mode" flag (s= imilar to like_regex flags)
> in future iterations to toggle between to_tsquery, websearch_to_tsquer= y, and phraseto_tsquery.
>
> Here's a v2, that implements the tsqparser clause
>
> So this should now work too
>
> select jsonb_path_query_array('["fast car", "slow c= ar", "fast and furious"]', '$[*] ? (@ tsmatch "= fast car" tsqparser "w") <v2-0001-Add-tsmatch-JSONPath-op= erator-for-granular-Full-T.patch>

Hi Florents,

Grant pinged me about this. I can review it in coming days. Can you please = rebase it? I failed to apply to current master. Also, the CF reported a fai= lure test case, please take a look.

=C2=A0H= i Evan,=C2=A0
thanks for having a look. The conflict was due to t= he intro of pg_fallthrough. Not related to this patch .

I noticed the failure too, but I'm having a hard time reproducing= it tbh.
This fails for Debian Trixie with Meson. The same with A= utoconf passes...



=

--000000000000af2b28064bc7f37f-- --000000000000af2b29064bc7f381 Content-Type: application/octet-stream; name="v3-0001-Add-tsmatch-JSONPath-operator-for-granular-Full-T.patch" Content-Disposition: attachment; filename="v3-0001-Add-tsmatch-JSONPath-operator-for-granular-Full-T.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mm4hfjka0 RnJvbSA1NjQ0NzM0MGZlZGRjYmNlZjJhODRhNzZhOWJlM2U3MGU3Zjk2NGY1IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBGbG9yZW50cyBUc2VsYWkgPGZsb3JlbnRzLnRzZWxhaUBnbWFp bC5jb20+CkRhdGU6IEZyaSwgMjcgRmViIDIwMjYgMDc6Mzc6NDkgKzAyMDAKU3ViamVjdDogW1BB VENIIHYzXSBBZGQgdHNtYXRjaCBKU09OUGF0aCBvcGVyYXRvciBmb3IgZ3JhbnVsYXIgRnVsbCBU ZXh0IAogU2VhcmNoCk1JTUUtVmVyc2lvbjogMS4wCkNvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsg Y2hhcnNldD1VVEYtOApDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0CgogVGhpcyBwYXRj aCBpbnRyb2R1Y2VzIHRoZSB0c21hdGNoIGJvb2xlYW4gb3BlcmF0b3IgdG8gdGhlIEpTT05QYXRo IGVuZ2luZS4KIEJ5IGludGVncmF0aW5nIEZUUyBuYXRpdmVseSBpbnRvIHBhdGggZXhwcmVzc2lv bnMsIHRoaXMgb3BlcmF0b3IgYWxsb3dzCiBmb3IgaGlnaC1wcmVjaXNpb24gZmlsdGVyaW5nIG9m IG5lc3RlZCBKU09OQiBzdHJ1Y3R1cmVz4oCUc29sdmluZyBpc3N1ZXMKIHdpdGggc3RydWN0dXJh bCBhbWJpZ3VpdHkgYW5kIHF1ZXJ5IGNvbXBsZXhpdHkuCgogQ3VycmVudGx5LCB1c2VycyBtdXN0 IGNob29zZSBiZXR3ZWVuIHR3byBzdWJvcHRpbWFsIHBhdGhzIGZvciBzZWFyY2hpbmcKIG5lc3Rl ZCBKU09OOgoKIDEuIEltcHJlY2lzZSBHbG9iYWwgSW5kZXhpbmcKICAgIGpzb25iX3RvX3RzdmVj dG9yIGFnZ3JlZ2F0ZXMgdGV4dCBpbnRvIGEgZmxhdCB2ZWN0b3IuIFRoaXMgaWdub3JlcwogICAg SlNPTiBib3VuZGFyaWVzLCBsZWFkaW5nIHRvIGZhbHNlIHBvc2l0aXZlcyB3aGVuIHRoZSBzYW1l IGtleQogICAgKGUuZy4sICJib2R5IikgYXBwZWFycyBpbiBkaWZmZXJlbnQgY29udGV4dHMgKGUu Zy4sIGEgIlByb2R1Y3QKICAgIERlc2NyaXB0aW9uIiB2cy4gYSAiQ3VzdG9tZXIgUmV2aWV3Iiku CgogMi4gQ29tcGxleCBTUUwgV29ya2Fyb3VuZHMKICAgIEFjaGlldmluZyAxMDAlIHByZWNpc2lv biByZXF1aXJlcyAiZXhwbG9kaW5nIiB0aGUgZG9jdW1lbnQgdmlhCiAgICBqc29uYl9hcnJheV9l bGVtZW50cyBhbmQgTEFURVJBTCBqb2lucy4gVGhpcyBsZWFkcyB0byB2ZXJib3NlIFNRTAogICAg YW5kIGhpZ2ggbWVtb3J5IG92ZXJoZWFkIGZyb20gZ2VuZXJhdGluZyBpbnRlcm1lZGlhdGUgaGVh cCB0dXBsZXMuCgogT25lIG9mIHRoZSBtb3N0IHNpZ25pZmljYW50IGFkdmFudGFnZXMgb2YgdHNt YXRjaCBpcyBpdHMgYWJpbGl0eSB0bwogcGFydGljaXBhdGUgaW4gbXVsdGktY29uZGl0aW9uIHBy ZWRpY2F0ZXMgd2l0aGluIHRoZSBzYW1lIEpTT04gb2JqZWN04oCUCiBzb21ldGhpbmcganNvbmJf dG9fdHN2ZWN0b3IgY2Fubm90IGRvLgoKICAgU0VMRUNUIGpzb25iX3BhdGhfcXVlcnkoZG9jLCAn JC5jb21tZW50c1sqXSA/IChALnVzZXIgPT0gIkFsaWNlIiAmJiBALmJvZHkgdHNtYXRjaCAicGVy Zm9ybWFuY2UiKScpOwoKIEluIGEgZmxhdCB2ZWN0b3IsIHRoZSBhc3NvY2lhdGlvbiBiZXR3ZWVu ICJBbGljZSIgYW5kICJwZXJmb3JtYW5jZSIgaXMKIGxvc3QuIHRzbWF0Y2ggcHJlc2VydmVzIHRo aXMgbGluayBieSBldmFsdWF0aW5nIHRoZSBGVFMgcHJlZGljYXRlCiBpbi1wbGFjZSBkdXJpbmcg cGF0aCB0cmF2ZXJzYWwuCgogV2hpbGUgdGhlIFNRTC9KU09OIHN0YW5kYXJkIChJU08vSUVDIDkw NzUtMikgZG9lcyBub3QgZXhwbGljaXRseSBkZWZpbmUKIGFuIEZUUyBvcGVyYXRvciwgdHNtYXRj aCBpcyBhcmNoaXRlY3R1cmFsbHkgbW9kZWxlZCBhZnRlciB0aGUKIHN0YW5kYXJkLWRlZmluZWQg bGlrZV9yZWdleC4KCiBUaGUgb3BlcmF0b3Igc3VwcG9ydHMgb3B0aW9uYWwgY29uZmlndXJhdGlv biBmb3IgYm90aCB0aGUgZGljdGlvbmFyeSBhbmQKIHRoZSBxdWVyeSBwYXJzZXI6CgogICBAIHRz bWF0Y2ggInF1ZXJ5IiBbIHRzY29uZmlnICJyZWdjb25maWciIF0gWyB0c3FwYXJzZXIgIm1vZGUi IF0KCiBTdXBwb3J0ZWQgcGFyc2VyIG1vZGVzIGFyZToKICAtICJwbCI6IHBsYWludG9fdHNxdWVy eSAobm8gb3BlcmF0b3JzIHJlcXVpcmVkKQogIC0gInBoIjogcGhyYXNldG9fdHNxdWVyeQogIC0g InciOiAgd2Vic2VhcmNoX3RvX3RzcXVlcnkKICAtIE9taXR0ZWQ6IERlZmF1bHRzIHRvIHRvX3Rz cXVlcnkgKHN0cmljdCBtb2RlKQoKIFRoZSBpbXBsZW1lbnRhdGlvbiByZWxpZXMgb24gR0lOIHBh dGgtbWF0Y2hpbmcgZm9yIGluZGV4IHBydW5pbmcgYW5kCiBoZWFwIHJlLWNoZWNrcyBmb3IgcHJl Y2lzaW9uLiBDYWNoaW5nIGlzIHNjb3BlZCB0byB0aGUKIEpzb25QYXRoRXhlY0NvbnRleHQsIGVu c3VyaW5nICdjb21waWxlLW9uY2UnIGVmZmljaWVuY3kgZm9yIHRoZQogdHNxdWVyeSBhbmQgT0lE IGxvb2t1cCBwZXIgZXhlY3V0aW9uLCByZXNwZWN0aW5nIHRoZSBzdGFiaWxpdHkKIHJlcXVpcmVt ZW50cyBvZiBwcmVwYXJlZCBzdGF0ZW1lbnRzLgotLS0KIGRvYy9zcmMvc2dtbC9mdW5jL2Z1bmMt anNvbi5zZ21sICAgICAgICAgICAgIHwgIDM0ICsrKysrCiBzcmMvYmFja2VuZC91dGlscy9hZHQv anNvbnBhdGguYyAgICAgICAgICAgICB8IDEzNiArKysrKysrKysrKysrKysrKystCiBzcmMvYmFj a2VuZC91dGlscy9hZHQvanNvbnBhdGhfZXhlYy5jICAgICAgICB8IDEzMCArKysrKysrKysrKysr KysrKy0KIHNyYy9iYWNrZW5kL3V0aWxzL2FkdC9qc29ucGF0aF9ncmFtLnkgICAgICAgIHwgIDk5 ICsrKysrKysrKysrKystCiBzcmMvYmFja2VuZC91dGlscy9hZHQvanNvbnBhdGhfc2Nhbi5sICAg ICAgICB8ICAgMyArCiBzcmMvaW5jbHVkZS91dGlscy9qc29ucGF0aC5oICAgICAgICAgICAgICAg ICB8ICAxOSArKysKIHNyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvanNvbmJfanNvbnBhdGgub3V0 IHwgIDU4ICsrKysrKysrCiBzcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2pzb25wYXRoLm91dCAg ICAgICB8ICA2MCArKysrKysrKwogc3JjL3Rlc3QvcmVncmVzcy9zcWwvanNvbmJfanNvbnBhdGgu c3FsICAgICAgfCAgMTMgKysKIHNyYy90ZXN0L3JlZ3Jlc3Mvc3FsL2pzb25wYXRoLnNxbCAgICAg ICAgICAgIHwgIDE5ICsrKwogMTAgZmlsZXMgY2hhbmdlZCwgNTY3IGluc2VydGlvbnMoKyksIDQg ZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvZG9jL3NyYy9zZ21sL2Z1bmMvZnVuYy1qc29uLnNn bWwgYi9kb2Mvc3JjL3NnbWwvZnVuYy9mdW5jLWpzb24uc2dtbAppbmRleCAxZWM3M2NmZjQ2NC4u ZjVkNmRhMzgyNGQgMTAwNjQ0Ci0tLSBhL2RvYy9zcmMvc2dtbC9mdW5jL2Z1bmMtanNvbi5zZ21s CisrKyBiL2RvYy9zcmMvc2dtbC9mdW5jL2Z1bmMtanNvbi5zZ21sCkBAIC0zMTA3LDYgKzMxMDcs NDAgQEAgRVJST1I6ICBqc29ucGF0aCBtZW1iZXIgYWNjZXNzb3IgY2FuIG9ubHkgYmUgYXBwbGll ZCB0byBhbiBvYmplY3QKICAgICAgICAgPHJldHVybnZhbHVlPltdPC9yZXR1cm52YWx1ZT4KICAg ICAgICA8L3BhcmE+PC9lbnRyeT4KICAgICAgIDwvcm93PgorICAgICAgPHJvdz4KKyAgICAgICA8 ZW50cnkgcm9sZT0iZnVuY190YWJsZV9lbnRyeSI+PHBhcmEgcm9sZT0iZnVuY19zaWduYXR1cmUi PgorICAgICAgICA8cmVwbGFjZWFibGU+c3RyaW5nPC9yZXBsYWNlYWJsZT4gPGxpdGVyYWw+dHNt YXRjaDwvbGl0ZXJhbD4gPHJlcGxhY2VhYmxlPnN0cmluZzwvcmVwbGFjZWFibGU+CisgICAgICAg IDxvcHRpb25hbD4gPGxpdGVyYWw+dHNjb25maWc8L2xpdGVyYWw+IDxyZXBsYWNlYWJsZT5zdHJp bmc8L3JlcGxhY2VhYmxlPiA8L29wdGlvbmFsPgorICAgICAgICA8b3B0aW9uYWw+IDxsaXRlcmFs PnRzcXBhcnNlcjwvbGl0ZXJhbD4gPHJlcGxhY2VhYmxlPnN0cmluZzwvcmVwbGFjZWFibGU+IDwv b3B0aW9uYWw+CisgICAgICAgIDxyZXR1cm52YWx1ZT5ib29sZWFuPC9yZXR1cm52YWx1ZT4KKyAg ICAgICA8L3BhcmE+CisgICAgICAgIDxwYXJhPgorICAgICAgICAgVGVzdHMgd2hldGhlciB0aGUg SlNPTiBzdHJpbmcgKGZpcnN0IG9wZXJhbmQpIG1hdGNoZXMgdGhlIGZ1bGwtdGV4dCBzZWFyY2gg cXVlcnkKKyAgICAgICAgIChzZWNvbmQgb3BlcmFuZCkuIFRoZSBtYXRjaGluZyBiZWhhdmlvciBj YW4gYmUgY3VzdG9taXplZCB1c2luZyB0aGUgb3B0aW9uYWwKKyAgICAgICAgIDxsaXRlcmFsPnRz Y29uZmlnPC9saXRlcmFsPiBhbmQgPGxpdGVyYWw+dHNxcGFyc2VyPC9saXRlcmFsPiBjbGF1c2Vz LgorICAgICAgICAgSWYgPGxpdGVyYWw+dHNjb25maWc8L2xpdGVyYWw+IGlzIG9taXR0ZWQsIHRo ZSBjdXJyZW50IHNlc3Npb24ncyBkZWZhdWx0IHRleHQgc2VhcmNoIGNvbmZpZ3VyYXRpb24KKyAg ICAgICAgIGlzIHVzZWQgKHNlZSA8eHJlZiBsaW5rZW5kPSJndWMtZGVmYXVsdC10ZXh0LXNlYXJj aC1jb25maWciLz4pLgorICAgICAgICAgVGhlIDxsaXRlcmFsPnRzcXBhcnNlcjwvbGl0ZXJhbD4g Y2xhdXNlIGRldGVybWluZXMgaG93IHRoZSBxdWVyeSBzdHJpbmcgaXMgcGFyc2VkCisgICAgICAg ICAoc2VlIDx4cmVmIGxpbmtlbmQ9InRleHRzZWFyY2gtcGFyc2luZy1xdWVyaWVzIi8+KS4KKyAg ICAgICAgIFZhbGlkIG9wdGlvbnMgYXJlIDxsaXRlcmFsPiJwbCI8L2xpdGVyYWw+ICg8ZnVuY3Rp b24+cGxhaW50b190c3F1ZXJ5PC9mdW5jdGlvbj4pLAorICAgICAgICAgPGxpdGVyYWw+InBoIjwv bGl0ZXJhbD4gKDxmdW5jdGlvbj5waHJhc2V0b190c3F1ZXJ5PC9mdW5jdGlvbj4pLCBhbmQKKyAg ICAgICAgIDxsaXRlcmFsPiJ3IjwvbGl0ZXJhbD4gKDxmdW5jdGlvbj53ZWJzZWFyY2hfdG9fdHNx dWVyeTwvZnVuY3Rpb24+KS4KKyAgICAgICAgIElmIDxsaXRlcmFsPnRzcXBhcnNlcjwvbGl0ZXJh bD4gaXMgb21pdHRlZCwgdGhlIHF1ZXJ5IGlzIHBhcnNlZCB1c2luZyA8ZnVuY3Rpb24+dG9fdHNx dWVyeTwvZnVuY3Rpb24+LgorICAgICAgICA8L3BhcmE+CisgICAgICAgIDxwYXJhPgorICAgICAg ICAgPGxpdGVyYWw+anNvbmJfcGF0aF9xdWVyeV9hcnJheSgnWyJydW5uaW5nIiwgInJ1bnMiLCAi cmFuIiwgImpvZ2dpbmciXScsICckWypdID8gKEAgdHNtYXRjaCAicnVuIiB0c2NvbmZpZyAiZW5n bGlzaCIpJyk8L2xpdGVyYWw+CisgICAgICAgICA8cmV0dXJudmFsdWU+WyJydW5uaW5nIiwgInJ1 bnMiXTwvcmV0dXJudmFsdWU+CisgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPHBhcmE+CisgICAg ICAgICA8bGl0ZXJhbD5qc29uYl9wYXRoX3F1ZXJ5X2FycmF5KCdbImZhc3QgY2FyIiwgInNsb3cg Y2FyIiwgImZhc3QgYW5kIGZ1cmlvdXMiXScsICckWypdID8gKEAgdHNtYXRjaCAiZmFzdCAmYW1w OyBjYXIiKScpPC9saXRlcmFsPgorICAgICAgICAgPHJldHVybnZhbHVlPlsiZmFzdCBjYXIiXTwv cmV0dXJudmFsdWU+CisgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPHBhcmE+CisgICAgICAgICA8 bGl0ZXJhbD5qc29uYl9wYXRoX3F1ZXJ5X2FycmF5KCdbImZhc3QgY2FyIiwgInNsb3cgY2FyIiwg ImZhc3QgYW5kIGZ1cmlvdXMiXScsICckWypdID8gKEAgdHNtYXRjaCAiZmFzdCBjYXIiIHRzcXBh cnNlciAidyIpJyk8L2xpdGVyYWw+CisgICAgICAgICA8cmV0dXJudmFsdWU+WyJmYXN0IGNhciJd PC9yZXR1cm52YWx1ZT4KKyAgICAgICAgPC9wYXJhPgorICAgICAgIDwvZW50cnk+CisgICAgICA8 L3Jvdz4KICAgICAgPC90Ym9keT4KICAgICA8L3Rncm91cD4KICAgIDwvdGFibGU+CmRpZmYgLS1n aXQgYS9zcmMvYmFja2VuZC91dGlscy9hZHQvanNvbnBhdGguYyBiL3NyYy9iYWNrZW5kL3V0aWxz L2FkdC9qc29ucGF0aC5jCmluZGV4IGQ3MGZmMWVhYTU0Li42MWYyOTljMThmZiAxMDA2NDQKLS0t IGEvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L2pzb25wYXRoLmMKKysrIGIvc3JjL2JhY2tlbmQvdXRp bHMvYWR0L2pzb25wYXRoLmMKQEAgLTM0OSw2ICszNDksNjYgQEAgZmxhdHRlbkpzb25QYXRoUGFy c2VJdGVtKFN0cmluZ0luZm8gYnVmLCBpbnQgKnJlc3VsdCwgc3RydWN0IE5vZGUgKmVzY29udGV4 dCwKIAkJCQkqKGludDMyICopIChidWYtPmRhdGEgKyBvZmZzKSA9IGNobGQgLSBwb3M7CiAJCQl9 CiAJCQlicmVhazsKKwkJY2FzZSBqcGlUc01hdGNoOgorCQkJeworCQkJCWludDMyCQlleHByX29m ZjsKKwkJCQlpbnQzMgkJdHNjb25maWdfb2ZmOworCisJCQkJLyogUmVzZXJ2ZSBzbG90cyBmb3Ig Y2hpbGQgbm9kZSBvZmZzZXRzICovCisJCQkJZXhwcl9vZmYgPSByZXNlcnZlU3BhY2VGb3JJdGVt UG9pbnRlcihidWYpOworCQkJCXRzY29uZmlnX29mZiA9IHJlc2VydmVTcGFjZUZvckl0ZW1Qb2lu dGVyKGJ1Zik7CisKKwkJCQkvKiBXcml0ZSB0aGUgTWFpbiBRdWVyeSBTdHJpbmcgKi8KKwkJCQlh cHBlbmRCaW5hcnlTdHJpbmdJbmZvKGJ1ZiwKKwkJCQkJCQkJCSAgICZpdGVtLT52YWx1ZS50c21h dGNoLnRzcXVlcnlsZW4sCisJCQkJCQkJCQkgICBzaXplb2YoaXRlbS0+dmFsdWUudHNtYXRjaC50 c3F1ZXJ5bGVuKSk7CisJCQkJYXBwZW5kQmluYXJ5U3RyaW5nSW5mbyhidWYsCisJCQkJCQkJCQkg ICBpdGVtLT52YWx1ZS50c21hdGNoLnRzcXVlcnksCisJCQkJCQkJCQkgICBpdGVtLT52YWx1ZS50 c21hdGNoLnRzcXVlcnlsZW4pOworCQkJCWFwcGVuZFN0cmluZ0luZm9DaGFyKGJ1ZiwgJ1wwJyk7 CisKKwkJCQkvKiBXcml0ZSB0aGUgUGFyc2VyIEZsYWcgKi8KKwkJCQlpZiAoaXRlbS0+dmFsdWUu dHNtYXRjaC50c3FwYXJzZXIpCisJCQkJeworCQkJCQlhcHBlbmRCaW5hcnlTdHJpbmdJbmZvKGJ1 ZiwKKwkJCQkJCQkJCQkgICAmaXRlbS0+dmFsdWUudHNtYXRjaC50c3FwYXJzZXJfbGVuLAorCQkJ CQkJCQkJCSAgIHNpemVvZihpdGVtLT52YWx1ZS50c21hdGNoLnRzcXBhcnNlcl9sZW4pKTsKKwkJ CQkJYXBwZW5kQmluYXJ5U3RyaW5nSW5mbyhidWYsCisJCQkJCQkJCQkJICAgaXRlbS0+dmFsdWUu dHNtYXRjaC50c3FwYXJzZXIsCisJCQkJCQkJCQkJICAgaXRlbS0+dmFsdWUudHNtYXRjaC50c3Fw YXJzZXJfbGVuKTsKKwkJCQkJYXBwZW5kU3RyaW5nSW5mb0NoYXIoYnVmLCAnXDAnKTsKKwkJCQl9 CisJCQkJZWxzZQorCQkJCXsKKwkJCQkJdWludDMyCQl6ZXJvID0gMDsKKworCQkJCQlhcHBlbmRC aW5hcnlTdHJpbmdJbmZvKGJ1ZiwgJnplcm8sIHNpemVvZih1aW50MzIpKTsKKwkJCQkJYXBwZW5k U3RyaW5nSW5mb0NoYXIoYnVmLCAnXDAnKTsKKwkJCQl9CisKKwkJCQlpZiAoIWZsYXR0ZW5Kc29u UGF0aFBhcnNlSXRlbShidWYsICZjaGxkLCBlc2NvbnRleHQsCisJCQkJCQkJCQkJCSAgaXRlbS0+ dmFsdWUudHNtYXRjaC5kb2MsCisJCQkJCQkJCQkJCSAgbmVzdGluZ0xldmVsLAorCQkJCQkJCQkJ CQkgIGluc2lkZUFycmF5U3Vic2NyaXB0KSkKKwkJCQkJcmV0dXJuIGZhbHNlOworCQkJCSooaW50 MzIgKikgKGJ1Zi0+ZGF0YSArIGV4cHJfb2ZmKSA9IGNobGQgLSBwb3M7CisKKwkJCQkvKiBUU0Nv bmZpZyAoT3B0aW9uYWwpICovCisJCQkJaWYgKGl0ZW0tPnZhbHVlLnRzbWF0Y2gudHNjb25maWcp CisJCQkJeworCQkJCQlpZiAoIWZsYXR0ZW5Kc29uUGF0aFBhcnNlSXRlbShidWYsICZjaGxkLCBl c2NvbnRleHQsCisJCQkJCQkJCQkJCQkgIGl0ZW0tPnZhbHVlLnRzbWF0Y2gudHNjb25maWcsCisJ CQkJCQkJCQkJCQkgIG5lc3RpbmdMZXZlbCwKKwkJCQkJCQkJCQkJCSAgaW5zaWRlQXJyYXlTdWJz Y3JpcHQpKQorCQkJCQkJcmV0dXJuIGZhbHNlOworCQkJCQkqKGludDMyICopIChidWYtPmRhdGEg KyB0c2NvbmZpZ19vZmYpID0gY2hsZCAtIHBvczsKKwkJCQl9CisJCQkJZWxzZQorCQkJCXsKKwkJ CQkJKihpbnQzMiAqKSAoYnVmLT5kYXRhICsgdHNjb25maWdfb2ZmKSA9IDA7CisJCQkJfQorCQkJ fQorCQkJYnJlYWs7CiAJCWNhc2UganBpRmlsdGVyOgogCQkJYXJnTmVzdGluZ0xldmVsKys7CiAJ CQlwZ19mYWxsdGhyb3VnaDsKQEAgLTc1OSw2ICs4MTksNTggQEAgcHJpbnRKc29uUGF0aEl0ZW0o U3RyaW5nSW5mbyBidWYsIEpzb25QYXRoSXRlbSAqdiwgYm9vbCBpbktleSwKIAkJCQlhcHBlbmRT dHJpbmdJbmZvQ2hhcihidWYsICciJyk7CiAJCQl9CiAKKwkJCWlmIChwcmludEJyYWNrZXRlcykK KwkJCQlhcHBlbmRTdHJpbmdJbmZvQ2hhcihidWYsICcpJyk7CisJCQlicmVhazsKKwkJY2FzZSBq cGlUc01hdGNoOgorCQkJaWYgKHByaW50QnJhY2tldGVzKQorCQkJCWFwcGVuZFN0cmluZ0luZm9D aGFyKGJ1ZiwgJygnKTsKKworCQkJanNwSW5pdEJ5QnVmZmVyKCZlbGVtLCB2LT5iYXNlLCB2LT5j b250ZW50LnRzbWF0Y2guZG9jKTsKKwkJCXByaW50SnNvblBhdGhJdGVtKGJ1ZiwgJmVsZW0sIGZh bHNlLAorCQkJCQkJCSAgb3BlcmF0aW9uUHJpb3JpdHkoZWxlbS50eXBlKSA8PQorCQkJCQkJCSAg b3BlcmF0aW9uUHJpb3JpdHkodi0+dHlwZSkpOworCisJCQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5n KGJ1ZiwgIiB0c21hdGNoICIpOworCisJCQllc2NhcGVfanNvbl93aXRoX2xlbihidWYsCisJCQkJ CQkJCSB2LT5jb250ZW50LnRzbWF0Y2gudHNxdWVyeSwKKwkJCQkJCQkJIHYtPmNvbnRlbnQudHNt YXRjaC50c3F1ZXJ5bGVuKTsKKworCQkJLyogUHJpbnQgVFNDb25maWcgaWYgcHJlc2VudCAqLwor CQkJaWYgKHYtPmNvbnRlbnQudHNtYXRjaC50c2NvbmZpZykKKwkJCXsKKwkJCQlKc29uUGF0aEl0 ZW0gY29uZmlnX2l0ZW07CisJCQkJaW50MzIJCWNvbmZpZ19sZW47CisJCQkJY2hhcgkgICAqY29u ZmlnX3N0cjsKKworCQkJCWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoYnVmLCAiIHRzY29uZmlnICIp OworCQkJCWpzcEluaXRCeUJ1ZmZlcigmY29uZmlnX2l0ZW0sIHYtPmJhc2UsIHYtPmNvbnRlbnQu dHNtYXRjaC50c2NvbmZpZyk7CisJCQkJY29uZmlnX3N0ciA9IGpzcEdldFN0cmluZygmY29uZmln X2l0ZW0sICZjb25maWdfbGVuKTsKKwkJCQlhcHBlbmRTdHJpbmdJbmZvQ2hhcihidWYsICciJyk7 CisJCQkJYXBwZW5kQmluYXJ5U3RyaW5nSW5mbyhidWYsIGNvbmZpZ19zdHIsIGNvbmZpZ19sZW4p OworCQkJCWFwcGVuZFN0cmluZ0luZm9DaGFyKGJ1ZiwgJyInKTsKKwkJCX0KKworCQkJaWYgKHYt PmNvbnRlbnQudHNtYXRjaC50c3FwYXJzZXJfbGVuID4gMCkKKwkJCXsKKwkJCQlhcHBlbmRTdHJp bmdJbmZvU3RyaW5nKGJ1ZiwgIiB0c3FwYXJzZXIgIik7CisJCQkJYXBwZW5kU3RyaW5nSW5mb0No YXIoYnVmLCAnIicpOworCisJCQkJLyoKKwkJCQkgKiBVc2Ugc2ltcGxlIGJpbmFyeSBhcHBlbmQg c2luY2UgZmxhZ3MgbGlrZSAicGwiIGRvbid0IG5lZWQKKwkJCQkgKiBKU09OIGVzY2FwaW5nCisJ CQkJICovCisJCQkJYXBwZW5kQmluYXJ5U3RyaW5nSW5mbyhidWYsCisJCQkJCQkJCQkgICB2LT5j b250ZW50LnRzbWF0Y2gudHNxcGFyc2VyLAorCQkJCQkJCQkJICAgdi0+Y29udGVudC50c21hdGNo LnRzcXBhcnNlcl9sZW4pOworCQkJCWFwcGVuZFN0cmluZ0luZm9DaGFyKGJ1ZiwgJyInKTsKKwkJ CX0KKworCQkJaWYgKHByaW50QnJhY2tldGVzKQorCQkJCWFwcGVuZFN0cmluZ0luZm9DaGFyKGJ1 ZiwgJyknKTsKKwkJCWJyZWFrOworCiAJCQlpZiAocHJpbnRCcmFja2V0ZXMpCiAJCQkJYXBwZW5k U3RyaW5nSW5mb0NoYXIoYnVmLCAnKScpOwogCQkJYnJlYWs7CkBAIC05MTQsNiArMTAyNiw4IEBA IGpzcE9wZXJhdGlvbk5hbWUoSnNvblBhdGhJdGVtVHlwZSB0eXBlKQogCQkJcmV0dXJuICJ0aW1l c3RhbXAiOwogCQljYXNlIGpwaVRpbWVzdGFtcFR6OgogCQkJcmV0dXJuICJ0aW1lc3RhbXBfdHoi OworCQljYXNlIGpwaVRzTWF0Y2g6CisJCQlyZXR1cm4gInRzbWF0Y2giOwogCQlkZWZhdWx0Ogog CQkJZWxvZyhFUlJPUiwgInVucmVjb2duaXplZCBqc29ucGF0aCBpdGVtIHR5cGU6ICVkIiwgdHlw ZSk7CiAJCQlyZXR1cm4gTlVMTDsKQEAgLTEwNzIsNiArMTE4NiwyMSBAQCBqc3BJbml0QnlCdWZm ZXIoSnNvblBhdGhJdGVtICp2LCBjaGFyICpiYXNlLCBpbnQzMiBwb3MpCiAJCQlyZWFkX2ludDMy KHYtPmNvbnRlbnQubGlrZV9yZWdleC5wYXR0ZXJubGVuLCBiYXNlLCBwb3MpOwogCQkJdi0+Y29u dGVudC5saWtlX3JlZ2V4LnBhdHRlcm4gPSBiYXNlICsgcG9zOwogCQkJYnJlYWs7CisJCWNhc2Ug anBpVHNNYXRjaDoKKwkJCXJlYWRfaW50MzIodi0+Y29udGVudC50c21hdGNoLmRvYywgYmFzZSwg cG9zKTsKKwkJCXJlYWRfaW50MzIodi0+Y29udGVudC50c21hdGNoLnRzY29uZmlnLCBiYXNlLCBw b3MpOworCisJCQkvKiBSZWFkIFF1ZXJ5IFN0cmluZyAqLworCQkJcmVhZF9pbnQzMih2LT5jb250 ZW50LnRzbWF0Y2gudHNxdWVyeWxlbiwgYmFzZSwgcG9zKTsKKwkJCXYtPmNvbnRlbnQudHNtYXRj aC50c3F1ZXJ5ID0gYmFzZSArIHBvczsKKwkJCS8qIFNraXAgcGFzdCBxdWVyeSBzdHJpbmcgKyBu dWxsIHRlcm1pbmF0b3IgKi8KKwkJCXBvcyArPSB2LT5jb250ZW50LnRzbWF0Y2gudHNxdWVyeWxl biArIDE7CisKKwkJCS8qIFJlYWQgUGFyc2VyIEZsYWcgKi8KKwkJCXJlYWRfaW50MzIodi0+Y29u dGVudC50c21hdGNoLnRzcXBhcnNlcl9sZW4sIGJhc2UsIHBvcyk7CisJCQl2LT5jb250ZW50LnRz bWF0Y2gudHNxcGFyc2VyID0gYmFzZSArIHBvczsKKwkJCXBvcyArPSB2LT5jb250ZW50LnRzbWF0 Y2gudHNxcGFyc2VyX2xlbiArIDE7CisJCQlicmVhazsKIAkJZGVmYXVsdDoKIAkJCWVsb2coRVJS T1IsICJ1bnJlY29nbml6ZWQganNvbnBhdGggaXRlbSB0eXBlOiAlZCIsIHYtPnR5cGUpOwogCX0K QEAgLTExNDIsNiArMTI3MSw3IEBAIGpzcEdldE5leHQoSnNvblBhdGhJdGVtICp2LCBKc29uUGF0 aEl0ZW0gKmEpCiAJCQkgICB2LT50eXBlID09IGpwaUxhc3QgfHwKIAkJCSAgIHYtPnR5cGUgPT0g anBpU3RhcnRzV2l0aCB8fAogCQkJICAgdi0+dHlwZSA9PSBqcGlMaWtlUmVnZXggfHwKKwkJCSAg IHYtPnR5cGUgPT0ganBpVHNNYXRjaCB8fAogCQkJICAgdi0+dHlwZSA9PSBqcGlCaWdpbnQgfHwK IAkJCSAgIHYtPnR5cGUgPT0ganBpQm9vbGVhbiB8fAogCQkJICAgdi0+dHlwZSA9PSBqcGlEYXRl IHx8CkBAIC0xNDc0LDcgKzE2MDQsMTEgQEAganNwSXNNdXRhYmxlV2Fsa2VyKEpzb25QYXRoSXRl bSAqanBpLCBzdHJ1Y3QgSnNvblBhdGhNdXRhYmxlQ29udGV4dCAqY3h0KQogCQkJCWpzcEluaXRC eUJ1ZmZlcigmYXJnLCBqcGktPmJhc2UsIGpwaS0+Y29udGVudC5saWtlX3JlZ2V4LmV4cHIpOwog CQkJCWpzcElzTXV0YWJsZVdhbGtlcigmYXJnLCBjeHQpOwogCQkJCWJyZWFrOwotCisJCQljYXNl IGpwaVRzTWF0Y2g6CisJCQkJQXNzZXJ0KHN0YXR1cyA9PSBqcGRzTm9uRGF0ZVRpbWUpOworCQkJ CWpzcEluaXRCeUJ1ZmZlcigmYXJnLCBqcGktPmJhc2UsIGpwaS0+Y29udGVudC50c21hdGNoLmRv Yyk7CisJCQkJanNwSXNNdXRhYmxlV2Fsa2VyKCZhcmcsIGN4dCk7CisJCQkJYnJlYWs7CiAJCQkJ LyogbGl0ZXJhbHMgKi8KIAkJCWNhc2UganBpTnVsbDoKIAkJCWNhc2UganBpU3RyaW5nOgpkaWZm IC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L2pzb25wYXRoX2V4ZWMuYyBiL3NyYy9iYWNr ZW5kL3V0aWxzL2FkdC9qc29ucGF0aF9leGVjLmMKaW5kZXggNTJhZTBiYTRjZjcuLjhiOTMyNTE4 YTA1IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91dGlscy9hZHQvanNvbnBhdGhfZXhlYy5jCisr KyBiL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9qc29ucGF0aF9leGVjLmMKQEAgLTEyMyw2ICsxMjMs MTMgQEAgdHlwZWRlZiBzdHJ1Y3QgSnNvbkxpa2VSZWdleENvbnRleHQKIAlpbnQJCQljZmxhZ3M7 CiB9IEpzb25MaWtlUmVnZXhDb250ZXh0OwogCit0eXBlZGVmIHN0cnVjdCBKc29uVHNNYXRjaENv bnRleHQKK3sKKwlEYXR1bQkJcXVlcnlEYXR1bTsJCS8qIENhY2hlIHRoZSBjb21waWxlZCBiaW5h cnkgVFNRdWVyeSAqLworCU9pZAkJCXRzY29uZmlnSWQ7CQkvKiBDYWNoZSB0aGUgZGljdGlvbmFy eSBPSUQgKi8KKwlib29sCQlpbml0aWFsaXplZDsJLyogRmxhZyB0byBydW4gc2V0dXAgb25seSBv bmNlICovCit9CQkJSnNvblRzTWF0Y2hDb250ZXh0OworCiAvKiBSZXN1bHQgb2YganNvbnBhdGgg cHJlZGljYXRlIGV2YWx1YXRpb24gKi8KIHR5cGVkZWYgZW51bSBKc29uUGF0aEJvb2wKIHsKQEAg LTMwNiw2ICszMTMsNyBAQCBzdGF0aWMgSnNvblBhdGhFeGVjUmVzdWx0IGV4ZWN1dGVLZXlWYWx1 ZU1ldGhvZChKc29uUGF0aEV4ZWNDb250ZXh0ICpjeHQsCiAJCQkJCQkJCQkJCQlKc29uUGF0aEl0 ZW0gKmpzcCwgSnNvbmJWYWx1ZSAqamIsIEpzb25WYWx1ZUxpc3QgKmZvdW5kKTsKIHN0YXRpYyBK c29uUGF0aEV4ZWNSZXN1bHQgYXBwZW5kQm9vbFJlc3VsdChKc29uUGF0aEV4ZWNDb250ZXh0ICpj eHQsCiAJCQkJCQkJCQkJICAgSnNvblBhdGhJdGVtICpqc3AsIEpzb25WYWx1ZUxpc3QgKmZvdW5k LCBKc29uUGF0aEJvb2wgcmVzKTsKK3N0YXRpYyBKc29uUGF0aEJvb2wgZXhlY3V0ZVRzTWF0Y2go SnNvblBhdGhJdGVtICpqc3AsIEpzb25iVmFsdWUgKnN0ciwgSnNvbmJWYWx1ZSAqcmFyZywgdm9p ZCAqcGFyYW0pOwogc3RhdGljIHZvaWQgZ2V0SnNvblBhdGhJdGVtKEpzb25QYXRoRXhlY0NvbnRl eHQgKmN4dCwgSnNvblBhdGhJdGVtICppdGVtLAogCQkJCQkJCUpzb25iVmFsdWUgKnZhbHVlKTsK IHN0YXRpYyBKc29uYlZhbHVlICpHZXRKc29uUGF0aFZhcih2b2lkICpjeHQsIGNoYXIgKnZhck5h bWUsIGludCB2YXJOYW1lTGVuLApAQCAtODAwLDYgKzgwOCw3IEBAIGV4ZWN1dGVJdGVtT3B0VW53 cmFwVGFyZ2V0KEpzb25QYXRoRXhlY0NvbnRleHQgKmN4dCwgSnNvblBhdGhJdGVtICpqc3AsCiAJ CWNhc2UganBpRXhpc3RzOgogCQljYXNlIGpwaVN0YXJ0c1dpdGg6CiAJCWNhc2UganBpTGlrZVJl Z2V4OgorCQljYXNlIGpwaVRzTWF0Y2g6CiAJCQl7CiAJCQkJSnNvblBhdGhCb29sIHN0ID0gZXhl Y3V0ZUJvb2xJdGVtKGN4dCwganNwLCBqYiwgdHJ1ZSk7CiAKQEAgLTE4NjgsNiArMTg3NywxNiBA QCBleGVjdXRlQm9vbEl0ZW0oSnNvblBhdGhFeGVjQ29udGV4dCAqY3h0LCBKc29uUGF0aEl0ZW0g KmpzcCwKIAkJCQlyZXR1cm4gZXhlY3V0ZVByZWRpY2F0ZShjeHQsIGpzcCwgJmxhcmcsIE5VTEws IGpiLCBmYWxzZSwKIAkJCQkJCQkJCQlleGVjdXRlTGlrZVJlZ2V4LCAmbHJjeHQpOwogCQkJfQor CQljYXNlIGpwaVRzTWF0Y2g6CisJCQl7CisJCQkJSnNvblRzTWF0Y2hDb250ZXh0IGxyY3h0ID0g ezB9OworCisJCQkJanNwSW5pdEJ5QnVmZmVyKCZsYXJnLCBqc3AtPmJhc2UsCisJCQkJCQkJCWpz cC0+Y29udGVudC50c21hdGNoLmRvYyk7CisKKwkJCQlyZXR1cm4gZXhlY3V0ZVByZWRpY2F0ZShj eHQsIGpzcCwgJmxhcmcsIE5VTEwsIGpiLCBmYWxzZSwKKwkJCQkJCQkJCQlleGVjdXRlVHNNYXRj aCwgJmxyY3h0KTsKKwkJCX0KIAogCQljYXNlIGpwaUV4aXN0czoKIAkJCWpzcEdldEFyZyhqc3As ICZsYXJnKTsKQEAgLTE4OTksNyArMTkxOCw2IEBAIGV4ZWN1dGVCb29sSXRlbShKc29uUGF0aEV4 ZWNDb250ZXh0ICpjeHQsIEpzb25QYXRoSXRlbSAqanNwLAogCiAJCQkJcmV0dXJuIHJlcyA9PSBq cGVyT2sgPyBqcGJUcnVlIDoganBiRmFsc2U7CiAJCQl9Ci0KIAkJZGVmYXVsdDoKIAkJCWVsb2co RVJST1IsICJpbnZhbGlkIGJvb2xlYW4ganNvbnBhdGggaXRlbSB0eXBlOiAlZCIsIGpzcC0+dHlw ZSk7CiAJCQlyZXR1cm4ganBiVW5rbm93bjsKQEAgLTI5MjIsNiArMjk0MCwxMTYgQEAgZXhlY3V0 ZUtleVZhbHVlTWV0aG9kKEpzb25QYXRoRXhlY0NvbnRleHQgKmN4dCwgSnNvblBhdGhJdGVtICpq c3AsCiAKIAlyZXR1cm4gcmVzOwogfQorI2luY2x1ZGUgInRzZWFyY2gvdHNfdXRpbHMuaCIKKyNp bmNsdWRlICJ0c2VhcmNoL3RzX2NhY2hlLmgiCisjaW5jbHVkZSAidXRpbHMvcmVncHJvYy5oIgor I2luY2x1ZGUgImNhdGFsb2cvbmFtZXNwYWNlLmgiCisKK3N0YXRpYyBKc29uUGF0aEJvb2wKK2V4 ZWN1dGVUc01hdGNoKEpzb25QYXRoSXRlbSAqanNwLCBKc29uYlZhbHVlICpzdHIsIEpzb25iVmFs dWUgKnJhcmcsCisJCQkgICB2b2lkICpwYXJhbSkKK3sKKwlKc29uVHNNYXRjaENvbnRleHQgKmN4 dCA9IHBhcmFtOworCXRleHQJICAgKmRvY190ZXh0OworCURhdHVtCQl0c3ZlY3Rvcl9kYXR1bTsK Kwlib29sCQltYXRjaDsKKworCWlmICghKHN0ciA9IGdldFNjYWxhcihzdHIsIGpidlN0cmluZykp KQorCQlyZXR1cm4ganBiVW5rbm93bjsKKworCS8qIFNldHVwIENvbnRleHQgKFJ1biBPTkxZIG9u Y2UgcGVyIHByZWRpY2F0ZSkgKi8KKwlpZiAoIWN4dC0+aW5pdGlhbGl6ZWQpCisJeworCQl0ZXh0 CSAgICpxdWVyeV90ZXh0OworCQljaGFyCSAgICpwYXJzZXJfbW9kZTsKKwkJdWludDMyCQlwYXJz ZXJfbGVuOworCisJCWlmIChqc3AtPmNvbnRlbnQudHNtYXRjaC50c2NvbmZpZyAhPSAwKQorCQl7 CisJCQlKc29uUGF0aEl0ZW0gY29uZmlnX2l0ZW07CisJCQlpbnQzMgkJY29uZmlnX2xlbjsKKwkJ CWNoYXIJICAgKmNvbmZpZ19zdHI7CisKKwkJCWpzcEluaXRCeUJ1ZmZlcigmY29uZmlnX2l0ZW0s IGpzcC0+YmFzZSwganNwLT5jb250ZW50LnRzbWF0Y2gudHNjb25maWcpOworCQkJY29uZmlnX3N0 ciA9IGpzcEdldFN0cmluZygmY29uZmlnX2l0ZW0sICZjb25maWdfbGVuKTsKKworCQkJY3h0LT50 c2NvbmZpZ0lkID0gZ2V0X3RzX2NvbmZpZ19vaWQoc3RyaW5nVG9RdWFsaWZpZWROYW1lTGlzdChj b25maWdfc3RyLCBOVUxMKSwgdHJ1ZSk7CisJCX0KKwkJZWxzZQorCQl7CisJCQljeHQtPnRzY29u ZmlnSWQgPSBnZXRUU0N1cnJlbnRDb25maWcodHJ1ZSk7CisJCX0KKworCQkvKiBQcmVwYXJlIFF1 ZXJ5IFRleHQgKi8KKwkJcXVlcnlfdGV4dCA9IGNzdHJpbmdfdG9fdGV4dF93aXRoX2xlbihqc3At PmNvbnRlbnQudHNtYXRjaC50c3F1ZXJ5LAorCQkJCQkJCQkJCQkgIGpzcC0+Y29udGVudC50c21h dGNoLnRzcXVlcnlsZW4pOworCisJCS8qIFNlbGVjdCBQYXJzZXIgYW5kIENvbXBpbGUgUXVlcnkg Ki8KKwkJcGFyc2VyX21vZGUgPSBqc3AtPmNvbnRlbnQudHNtYXRjaC50c3FwYXJzZXI7CisJCXBh cnNlcl9sZW4gPSBqc3AtPmNvbnRlbnQudHNtYXRjaC50c3FwYXJzZXJfbGVuOworCisJCWlmIChw YXJzZXJfbGVuID4gMCkKKwkJeworCQkJLyogRGlzcGF0Y2ggYmFzZWQgb24gZmxhZyAqLworCQkJ aWYgKHBnX3N0cm5jYXNlY21wKHBhcnNlcl9tb2RlLCAicGwiLCBwYXJzZXJfbGVuKSA9PSAwKQor CQkJeworCQkJCWN4dC0+cXVlcnlEYXR1bSA9IERpcmVjdEZ1bmN0aW9uQ2FsbDIocGxhaW50b190 c3F1ZXJ5X2J5aWQsCisJCQkJCQkJCQkJCQkJICBPYmplY3RJZEdldERhdHVtKGN4dC0+dHNjb25m aWdJZCksCisJCQkJCQkJCQkJCQkJICBQb2ludGVyR2V0RGF0dW0ocXVlcnlfdGV4dCkpOworCQkJ fQorCQkJZWxzZSBpZiAocGdfc3RybmNhc2VjbXAocGFyc2VyX21vZGUsICJwaCIsIHBhcnNlcl9s ZW4pID09IDApCisJCQl7CisJCQkJY3h0LT5xdWVyeURhdHVtID0gRGlyZWN0RnVuY3Rpb25DYWxs MihwaHJhc2V0b190c3F1ZXJ5X2J5aWQsCisJCQkJCQkJCQkJCQkJICBPYmplY3RJZEdldERhdHVt KGN4dC0+dHNjb25maWdJZCksCisJCQkJCQkJCQkJCQkJICBQb2ludGVyR2V0RGF0dW0ocXVlcnlf dGV4dCkpOworCQkJfQorCQkJZWxzZSBpZiAocGdfc3RybmNhc2VjbXAocGFyc2VyX21vZGUsICJ3 IiwgcGFyc2VyX2xlbikgPT0gMCkKKwkJCXsKKwkJCQljeHQtPnF1ZXJ5RGF0dW0gPSBEaXJlY3RG dW5jdGlvbkNhbGwyKHdlYnNlYXJjaF90b190c3F1ZXJ5X2J5aWQsCisJCQkJCQkJCQkJCQkJICBP YmplY3RJZEdldERhdHVtKGN4dC0+dHNjb25maWdJZCksCisJCQkJCQkJCQkJCQkJICBQb2ludGVy R2V0RGF0dW0ocXVlcnlfdGV4dCkpOworCQkJfQorCQkJZWxzZQorCQkJeworCQkJCS8qCisJCQkJ ICogRmFsbGJhY2sgb3IgRXJyb3IgZm9yIHVua25vd24gZmxhZ3MgKHNob3VsZCBiZSBjYXVnaHQg YnkKKwkJCQkgKiBwYXJzZXIpCisJCQkJICovCisJCQkJZXJlcG9ydChFUlJPUiwKKwkJCQkJCShl cnJjb2RlKEVSUkNPREVfU1lOVEFYX0VSUk9SKSwKKwkJCQkJCSBlcnJtc2coInVucmVjb2duaXpl ZCB0c3FwYXJzZXIgZmxhZyIpKSk7CisJCQl9CisJCX0KKwkJZWxzZQorCQl7CisJCQkvKgorCQkJ ICogRGVmYXVsdDogdG9fdHNxdWVyeSAoU3RhbmRhcmQgTW9kZSkgTm90ZTogVGhpcyBleHBlY3Rz CisJCQkgKiBvcGVyYXRvcnMgbGlrZSAnJicgb3IgJ3wnIGluIHRoZSBxdWVyeSBzdHJpbmcKKwkJ CSAqLworCQkJY3h0LT5xdWVyeURhdHVtID0gRGlyZWN0RnVuY3Rpb25DYWxsMih0b190c3F1ZXJ5 X2J5aWQsCisJCQkJCQkJCQkJCQkgIE9iamVjdElkR2V0RGF0dW0oY3h0LT50c2NvbmZpZ0lkKSwK KwkJCQkJCQkJCQkJCSAgUG9pbnRlckdldERhdHVtKHF1ZXJ5X3RleHQpKTsKKwkJfQorCisJCWN4 dC0+aW5pdGlhbGl6ZWQgPSB0cnVlOworCX0KKworCS8qIFJ1bnRpbWU6IENvbnZlcnQgRG9jIHRv IFZlY3RvciBhbmQgTWF0Y2ggKi8KKworCWRvY190ZXh0ID0gY3N0cmluZ190b190ZXh0X3dpdGhf bGVuKHN0ci0+dmFsLnN0cmluZy52YWwsCisJCQkJCQkJCQkJc3RyLT52YWwuc3RyaW5nLmxlbik7 CisKKwl0c3ZlY3Rvcl9kYXR1bSA9IERpcmVjdEZ1bmN0aW9uQ2FsbDIodG9fdHN2ZWN0b3JfYnlp ZCwKKwkJCQkJCQkJCQkgT2JqZWN0SWRHZXREYXR1bShjeHQtPnRzY29uZmlnSWQpLAorCQkJCQkJ CQkJCSBQb2ludGVyR2V0RGF0dW0oZG9jX3RleHQpKTsKKworCW1hdGNoID0gRGF0dW1HZXRCb29s KERpcmVjdEZ1bmN0aW9uQ2FsbDIodHNfbWF0Y2hfdnEsCisJCQkJCQkJCQkJCSB0c3ZlY3Rvcl9k YXR1bSwKKwkJCQkJCQkJCQkJIGN4dC0+cXVlcnlEYXR1bSkpOworCisJcmV0dXJuIG1hdGNoID8g anBiVHJ1ZSA6IGpwYkZhbHNlOworfQorCiAKIC8qCiAgKiBDb252ZXJ0IGJvb2xlYW4gZXhlY3V0 aW9uIHN0YXR1cyAncmVzJyB0byBhIGJvb2xlYW4gSlNPTiBpdGVtIGFuZCBleGVjdXRlCmRpZmYg LS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9hZHQvanNvbnBhdGhfZ3JhbS55IGIvc3JjL2JhY2tl bmQvdXRpbHMvYWR0L2pzb25wYXRoX2dyYW0ueQppbmRleCA4NzA3MDIzNWQxMS4uYTJhY2YyNjYw ZjYgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9qc29ucGF0aF9ncmFtLnkKKysr IGIvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L2pzb25wYXRoX2dyYW0ueQpAQCAtNDMsNyArNDMsMTIg QEAgc3RhdGljIGJvb2wgbWFrZUl0ZW1MaWtlUmVnZXgoSnNvblBhdGhQYXJzZUl0ZW0gKmV4cHIs CiAJCQkJCQkJICBKc29uUGF0aFN0cmluZyAqZmxhZ3MsCiAJCQkJCQkJICBKc29uUGF0aFBhcnNl SXRlbSAqKiByZXN1bHQsCiAJCQkJCQkJICBzdHJ1Y3QgTm9kZSAqZXNjb250ZXh0KTsKLQorc3Rh dGljIGJvb2wgbWFrZUl0ZW1Uc01hdGNoKEpzb25QYXRoUGFyc2VJdGVtICpkb2MsCisJCQkJCQkJ ICBKc29uUGF0aFN0cmluZyAqdHNxdWVyeSwKKwkJCQkJCQkgIEpzb25QYXRoU3RyaW5nICp0c2Nv bmZpZywKKwkJCQkJCQkgIEpzb25QYXRoU3RyaW5nICp0c3F1ZXJ5X3BhcnNlciwKKwkJCQkJCQkg IEpzb25QYXRoUGFyc2VJdGVtICoqIHJlc3VsdCwKKwkJCQkJCQkgIHN0cnVjdCBOb2RlICplc2Nv bnRleHQpOwogLyoKICAqIEJpc29uIGRvZXNuJ3QgYWxsb2NhdGUgYW55dGhpbmcgdGhhdCBuZWVk cyB0byBsaXZlIGFjcm9zcyBwYXJzZXIgY2FsbHMsCiAgKiBzbyB3ZSBjYW4gZWFzaWx5IGhhdmUg aXQgdXNlIHBhbGxvYyBpbnN0ZWFkIG9mIG1hbGxvYy4gIFRoaXMgcHJldmVudHMKQEAgLTgxLDcg Kzg2LDcgQEAgc3RhdGljIGJvb2wgbWFrZUl0ZW1MaWtlUmVnZXgoSnNvblBhdGhQYXJzZUl0ZW0g KmV4cHIsCiAldG9rZW4JPHN0cj4JCUlERU5UX1AgU1RSSU5HX1AgTlVNRVJJQ19QIElOVF9QIFZB UklBQkxFX1AKICV0b2tlbgk8c3RyPgkJT1JfUCBBTkRfUCBOT1RfUAogJXRva2VuCTxzdHI+CQlM RVNTX1AgTEVTU0VRVUFMX1AgRVFVQUxfUCBOT1RFUVVBTF9QIEdSRUFURVJFUVVBTF9QIEdSRUFU RVJfUAotJXRva2VuCTxzdHI+CQlBTllfUCBTVFJJQ1RfUCBMQVhfUCBMQVNUX1AgU1RBUlRTX1Ag V0lUSF9QIExJS0VfUkVHRVhfUCBGTEFHX1AKKyV0b2tlbgk8c3RyPgkJQU5ZX1AgU1RSSUNUX1Ag TEFYX1AgTEFTVF9QIFNUQVJUU19QIFdJVEhfUCBMSUtFX1JFR0VYX1AgRkxBR19QIFRTTUFUQ0hf UCBUU0NPTkZJR19QIFRTUVVFUllQQVJTRVJfUAogJXRva2VuCTxzdHI+CQlBQlNfUCBTSVpFX1Ag VFlQRV9QIEZMT09SX1AgRE9VQkxFX1AgQ0VJTElOR19QIEtFWVZBTFVFX1AKICV0b2tlbgk8c3Ry PgkJREFURVRJTUVfUAogJXRva2VuCTxzdHI+CQlCSUdJTlRfUCBCT09MRUFOX1AgREFURV9QIERF Q0lNQUxfUCBJTlRFR0VSX1AgTlVNQkVSX1AKQEAgLTE4Nyw2ICsxOTIsMzcgQEAgcHJlZGljYXRl OgogCQkJWVlBQk9SVDsKIAkJJCQgPSBqcHBpdGVtOwogCX0KKwl8IGV4cHIgVFNNQVRDSF9QIFNU UklOR19QCisJeworCQlKc29uUGF0aFBhcnNlSXRlbSAqanBwaXRlbTsKKwkJLyogUGFzcyBOVUxM IGZvciB0c2NvbmZpZyAoM3JkKSBhbmQgTlVMTCBmb3IgdHNxdWVyeV9wYXJzZXIgKDR0aCkgKi8K KwkJaWYgKCEgbWFrZUl0ZW1Uc01hdGNoKCQxLCAmJDMsIE5VTEwsIE5VTEwsICZqcHBpdGVtLCBl c2NvbnRleHQpKQorCQkgICBZWUFCT1JUOworCQkkJCA9IGpwcGl0ZW07CisJfQorCXwgZXhwciBU U01BVENIX1AgU1RSSU5HX1AgVFNDT05GSUdfUCBTVFJJTkdfUAorCXsKKwkJSnNvblBhdGhQYXJz ZUl0ZW0gKmpwcGl0ZW07CisJCS8qIFBhc3MgTlVMTCBmb3IgdHNxdWVyeV9wYXJzZXIgKDR0aCkg Ki8KKwkJaWYgKCEgbWFrZUl0ZW1Uc01hdGNoKCQxLCAmJDMsICYkNSwgTlVMTCwgJmpwcGl0ZW0s IGVzY29udGV4dCkpCisJCSAgIFlZQUJPUlQ7CisJCSQkID0ganBwaXRlbTsKKwl9CisJfCBleHBy IFRTTUFUQ0hfUCBTVFJJTkdfUCBUU1FVRVJZUEFSU0VSX1AgU1RSSU5HX1AKKwl7CisJCUpzb25Q YXRoUGFyc2VJdGVtICpqcHBpdGVtOworCQkvKiBQYXNzIE5VTEwgZm9yIHRzY29uZmlnICgzcmQp ICovCisJCWlmICghIG1ha2VJdGVtVHNNYXRjaCgkMSwgJiQzLCBOVUxMLCAmJDUsICZqcHBpdGVt LCBlc2NvbnRleHQpKQorCQkgICBZWUFCT1JUOworCQkkJCA9IGpwcGl0ZW07CisJfQorCXwgZXhw ciBUU01BVENIX1AgU1RSSU5HX1AgVFNDT05GSUdfUCBTVFJJTkdfUCBUU1FVRVJZUEFSU0VSX1Ag U1RSSU5HX1AKKwl7CisJCUpzb25QYXRoUGFyc2VJdGVtICpqcHBpdGVtOworCQlpZiAoISBtYWtl SXRlbVRzTWF0Y2goJDEsICYkMywgJiQ1LCAmJDcsICZqcHBpdGVtLCBlc2NvbnRleHQpKQorCQkg ICBZWUFCT1JUOworCQkkJCA9IGpwcGl0ZW07CisJfQogCTsKIAogc3RhcnRzX3dpdGhfaW5pdGlh bDoKQEAgLTM1Nyw2ICszOTMsOSBAQCBrZXlfbmFtZToKIAl8IFRJTUVfVFpfUAogCXwgVElNRVNU QU1QX1AKIAl8IFRJTUVTVEFNUF9UWl9QCisJfCBUU0NPTkZJR19QCisJfCBUU01BVENIX1AKKwl8 IFRTUVVFUllQQVJTRVJfUAogCTsKIAogbWV0aG9kOgpAQCAtNjg0LDMgKzcyMyw1OSBAQCBqc3BD b252ZXJ0UmVnZXhGbGFncyh1aW50MzIgeGZsYWdzLCBpbnQgKnJlc3VsdCwgc3RydWN0IE5vZGUg KmVzY29udGV4dCkKIAogCXJldHVybiB0cnVlOwogfQorCitzdGF0aWMgYm9vbAorbWFrZUl0ZW1U c01hdGNoKEpzb25QYXRoUGFyc2VJdGVtICpkb2MsCisJCQkgSnNvblBhdGhTdHJpbmcgKnRzcXVl cnksCisJCQkgSnNvblBhdGhTdHJpbmcgKnRzY29uZmlnLAorCQkJIEpzb25QYXRoU3RyaW5nICp0 c3F1ZXJ5X3BhcnNlciwKKwkJCSBKc29uUGF0aFBhcnNlSXRlbSAqKnJlc3VsdCwKKwkJCSBzdHJ1 Y3QgTm9kZSAqZXNjb250ZXh0KQoreworCUpzb25QYXRoUGFyc2VJdGVtICp2ID0gbWFrZUl0ZW1U eXBlKGpwaVRzTWF0Y2gpOworCisJdi0+dmFsdWUudHNtYXRjaC5kb2MgPSBkb2M7CisKKwl2LT52 YWx1ZS50c21hdGNoLnRzcXVlcnkgPSB0c3F1ZXJ5LT52YWw7CisJdi0+dmFsdWUudHNtYXRjaC50 c3F1ZXJ5bGVuID0gdHNxdWVyeS0+bGVuOworCisJLyogSGFuZGxlIHRoZSBDb25maWd1cmF0aW9u IChTdG9yZWQgYXMgYSBOb2RlKSAqLworCWlmICh0c2NvbmZpZykKKwl7CisJICAgSnNvblBhdGhQ YXJzZUl0ZW0gKmNvbmYgPSBtYWtlSXRlbVR5cGUoanBpU3RyaW5nKTsKKwkgICBjb25mLT52YWx1 ZS5zdHJpbmcudmFsID0gdHNjb25maWctPnZhbDsKKwkgICBjb25mLT52YWx1ZS5zdHJpbmcubGVu ID0gdHNjb25maWctPmxlbjsKKwkgICB2LT52YWx1ZS50c21hdGNoLnRzY29uZmlnID0gY29uZjsK Kwl9CisJZWxzZQorCXsKKwkgICB2LT52YWx1ZS50c21hdGNoLnRzY29uZmlnID0gTlVMTDsKKwl9 CisKKwkvKiBIYW5kbGUgdGhlIFRTUXVlcnkgUGFyc2VyIEZsYWcgKi8KKwlpZiAodHNxdWVyeV9w YXJzZXIpCisJeworCQkvKiBDaGVjayBmb3IgInBsIiwgInBoIiwgInciIGhlcmUgdG8gdGhyb3cg YSBzeW50YXggZXJyb3IgaW1tZWRpYXRlbHkgKi8KKwkJaWYgKHBnX3N0cm5jYXNlY21wKHRzcXVl cnlfcGFyc2VyLT52YWwsICJwbCIsIHRzcXVlcnlfcGFyc2VyLT5sZW4pICE9IDAgJiYKKwkJCXBn X3N0cm5jYXNlY21wKHRzcXVlcnlfcGFyc2VyLT52YWwsICJwaCIsIHRzcXVlcnlfcGFyc2VyLT5s ZW4pICE9IDAgJiYKKwkJCXBnX3N0cm5jYXNlY21wKHRzcXVlcnlfcGFyc2VyLT52YWwsICJ3Iiwg IHRzcXVlcnlfcGFyc2VyLT5sZW4pICE9IDApCisJCXsKKwkJCSBlcmVwb3J0KEVSUk9SLAorCQkJ CQkgKGVycmNvZGUoRVJSQ09ERV9TWU5UQVhfRVJST1IpLAorCQkJCQkgIGVycm1zZygiaW52YWxp ZCB0c3F1ZXJ5X3BhcnNlciB2YWx1ZTogXCIlc1wiIiwgdHNxdWVyeV9wYXJzZXItPnZhbCksCisJ CQkJCSAgZXJyaGludCgiVmFsaWQgdmFsdWVzIGFyZSBcInBsXCIsIFwicGhcIiwgYW5kIFwid1wi LiIpKSk7CisJCX0KKworCQl2LT52YWx1ZS50c21hdGNoLnRzcXBhcnNlciA9IHRzcXVlcnlfcGFy c2VyLT52YWw7CisJCXYtPnZhbHVlLnRzbWF0Y2gudHNxcGFyc2VyX2xlbiA9IHRzcXVlcnlfcGFy c2VyLT5sZW47CisJfQorCWVsc2UKKwl7CisJCXYtPnZhbHVlLnRzbWF0Y2gudHNxcGFyc2VyID0g TlVMTDsKKwkJdi0+dmFsdWUudHNtYXRjaC50c3FwYXJzZXJfbGVuID0gMDsKKwl9CisKKwkvKiBT dWNjZXNzICovCisJKnJlc3VsdCA9IHY7CisJcmV0dXJuIHRydWU7Cit9CmRpZmYgLS1naXQgYS9z cmMvYmFja2VuZC91dGlscy9hZHQvanNvbnBhdGhfc2Nhbi5sIGIvc3JjL2JhY2tlbmQvdXRpbHMv YWR0L2pzb25wYXRoX3NjYW4ubAppbmRleCAzOGM1ODQxZTg3OS4uODA5YzY2ZWMwODUgMTAwNjQ0 Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9qc29ucGF0aF9zY2FuLmwKKysrIGIvc3JjL2Jh Y2tlbmQvdXRpbHMvYWR0L2pzb25wYXRoX3NjYW4ubApAQCAtNDI3LDEwICs0MjcsMTMgQEAgc3Rh dGljIGNvbnN0IEpzb25QYXRoS2V5d29yZCBrZXl3b3Jkc1tdID0gewogCXs3LCBmYWxzZSwgREVD SU1BTF9QLCAiZGVjaW1hbCJ9LAogCXs3LCBmYWxzZSwgSU5URUdFUl9QLCAiaW50ZWdlciJ9LAog CXs3LCBmYWxzZSwgVElNRV9UWl9QLCAidGltZV90eiJ9LAorCXs3LCBmYWxzZSwgVFNNQVRDSF9Q LCAidHNtYXRjaCJ9LAogCXs3LCBmYWxzZSwgVU5LTk9XTl9QLCAidW5rbm93biJ9LAogCXs4LCBm YWxzZSwgREFURVRJTUVfUCwgImRhdGV0aW1lIn0sCiAJezgsIGZhbHNlLCBLRVlWQUxVRV9QLCAi a2V5dmFsdWUifSwKKwl7OCwgZmFsc2UsIFRTQ09ORklHX1AsICJ0c2NvbmZpZyJ9LAogCXs5LCBm YWxzZSwgVElNRVNUQU1QX1AsICJ0aW1lc3RhbXAifSwKKwl7OSwgZmFsc2UsIFRTUVVFUllQQVJT RVJfUCwgInRzcXBhcnNlciJ9LAogCXsxMCwgZmFsc2UsIExJS0VfUkVHRVhfUCwgImxpa2VfcmVn ZXgifSwKIAl7MTIsIGZhbHNlLCBUSU1FU1RBTVBfVFpfUCwgInRpbWVzdGFtcF90eiJ9LAogfTsK ZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3V0aWxzL2pzb25wYXRoLmggYi9zcmMvaW5jbHVkZS91 dGlscy9qc29ucGF0aC5oCmluZGV4IDZmNTI5ZDc0ZGNkLi4wMDc1MjMyMWZmNiAxMDA2NDQKLS0t IGEvc3JjL2luY2x1ZGUvdXRpbHMvanNvbnBhdGguaAorKysgYi9zcmMvaW5jbHVkZS91dGlscy9q c29ucGF0aC5oCkBAIC0xMDQsNiArMTA0LDcgQEAgdHlwZWRlZiBlbnVtIEpzb25QYXRoSXRlbVR5 cGUKIAlqcGlMYXN0LAkJCQkJLyogTEFTVCBhcnJheSBzdWJzY3JpcHQgKi8KIAlqcGlTdGFydHNX aXRoLAkJCQkvKiBTVEFSVFMgV0lUSCBwcmVkaWNhdGUgKi8KIAlqcGlMaWtlUmVnZXgsCQkJCS8q IExJS0VfUkVHRVggcHJlZGljYXRlICovCisJanBpVHNNYXRjaCwJCQkJCS8qIFRTTUFUQ0ggcHJl ZGljYXRlICovCiAJanBpQmlnaW50LAkJCQkJLyogLmJpZ2ludCgpIGl0ZW0gbWV0aG9kICovCiAJ anBpQm9vbGVhbiwJCQkJCS8qIC5ib29sZWFuKCkgaXRlbSBtZXRob2QgKi8KIAlqcGlEYXRlLAkJ CQkJLyogLmRhdGUoKSBpdGVtIG1ldGhvZCAqLwpAQCAtMTg4LDYgKzE4OSwxNSBAQCB0eXBlZGVm IHN0cnVjdCBKc29uUGF0aEl0ZW0KIAkJCWludDMyCQlwYXR0ZXJubGVuOwogCQkJdWludDMyCQlm bGFnczsKIAkJfQkJCWxpa2VfcmVnZXg7CisJCXN0cnVjdAorCQl7CisJCQlpbnQzMgkJZG9jOwor CQkJY2hhcgkgICAqdHNxdWVyeTsKKwkJCXVpbnQzMgkJdHNxdWVyeWxlbjsKKwkJCWludDMyCQl0 c2NvbmZpZzsKKwkJCWNoYXIJICAgKnRzcXBhcnNlcjsKKwkJCXVpbnQzMgkJdHNxcGFyc2VyX2xl bjsKKwkJfQkJCXRzbWF0Y2g7CiAJfQkJCWNvbnRlbnQ7CiB9IEpzb25QYXRoSXRlbTsKIApAQCAt MjY2LDYgKzI3NiwxNSBAQCBzdHJ1Y3QgSnNvblBhdGhQYXJzZUl0ZW0KIAkJCXVpbnQzMgkJbGVu OwogCQkJY2hhcgkgICAqdmFsOwkvKiBjb3VsZCBub3QgYmUgbm90IG51bGwtdGVybWluYXRlZCAq LwogCQl9CQkJc3RyaW5nOworCQlzdHJ1Y3QKKwkJeworCQkJSnNvblBhdGhQYXJzZUl0ZW0gKmRv YzsKKwkJCWNoYXIJICAgKnRzcXVlcnk7CisJCQl1aW50MzIJCXRzcXVlcnlsZW47CisJCQlKc29u UGF0aFBhcnNlSXRlbSAqdHNjb25maWc7CisJCQljaGFyCSAgICp0c3FwYXJzZXI7CisJCQl1aW50 MzIJCXRzcXBhcnNlcl9sZW47CisJCX0JCQl0c21hdGNoOwogCX0JCQl2YWx1ZTsKIH07CiAKZGlm ZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvanNvbmJfanNvbnBhdGgub3V0IGIv c3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9qc29uYl9qc29ucGF0aC5vdXQKaW5kZXggNGJjZDRl OTFhMjkuLjM1NTU4YWYwNGU1IDEwMDY0NAotLS0gYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVk L2pzb25iX2pzb25wYXRoLm91dAorKysgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2pzb25i X2pzb25wYXRoLm91dApAQCAtNDUxMCwzICs0NTEwLDYxIEBAIE9SREVSIEJZIHMxLm51bSwgczIu bnVtOwogIHsicyI6ICJCIn0gICAgfCB7InMiOiAiQiJ9ICAgIHwgZmFsc2UgfCB0cnVlICB8IHRy dWUgIHwgdHJ1ZSAgfCBmYWxzZQogKDE0NCByb3dzKQogCitzZWxlY3QganNvbmJfcGF0aF9xdWVy eSgnW251bGwsIDEsICJydW5uaW5nIiwgInJ1bnMiLCAicmFuIiwgInJ1biIsICJydW5uZXIiLCAi am9nZ2luZyJdJywgJ2xheCAkWypdID8gKEAgdHNtYXRjaCAiZmx5IiB0c2NvbmZpZyAiZW5nbGlz aCIpJyk7CisganNvbmJfcGF0aF9xdWVyeSAKKy0tLS0tLS0tLS0tLS0tLS0tLQorKDAgcm93cykK Kworc2VsZWN0IGpzb25iX3BhdGhfcXVlcnkoJ1tudWxsLCAxLCAicnVubmluZyIsICJydW5zIiwg InJhbiIsICJydW4iLCAicnVubmVyIiwgImpvZ2dpbmciXScsICdsYXggJFsqXSA/IChAIHRzbWF0 Y2ggInJ1biIgdHNjb25maWcgImVuZ2xpc2giKScpOworIGpzb25iX3BhdGhfcXVlcnkgCistLS0t LS0tLS0tLS0tLS0tLS0KKyAicnVubmluZyIKKyAicnVucyIKKyAicnVuIgorKDMgcm93cykKKwor c2VsZWN0IGpzb25iX3BhdGhfcXVlcnkoJ1tudWxsLCAxLCAicnVubmluZyIsICJydW5zIiwgInJh biIsICJydW4iLCAicnVubmVyIiwgImpvZ2dpbmciXScsICdsYXggJFsqXSA/IChAIHRzbWF0Y2gg InJ1biIgdHNjb25maWcgInNpbXBsZSIpJyk7CisganNvbmJfcGF0aF9xdWVyeSAKKy0tLS0tLS0t LS0tLS0tLS0tLQorICJydW4iCisoMSByb3cpCisKK3NlbGVjdCBqc29uYl9wYXRoX3F1ZXJ5KCdb bnVsbCwgMSwgIlBvc3RncmVTUUwiLCAicG9zdGdyZXMiLCAiUE9TVEdSRVMiLCAiZGF0YWJhc2Ui XScsICdsYXggJFsqXSA/IChAIHRzbWF0Y2ggIlBvc3RncmVzIiB0c2NvbmZpZyAiZW5nbGlzaCIp Jyk7CisganNvbmJfcGF0aF9xdWVyeSAKKy0tLS0tLS0tLS0tLS0tLS0tLQorICJwb3N0Z3JlcyIK KyAiUE9TVEdSRVMiCisoMiByb3dzKQorCitzZWxlY3QganNvbmJfcGF0aF9xdWVyeSgnW251bGws IDEsICJQb3N0Z3JlU1FMIiwgInBvc3RncmVzIiwgIlBPU1RHUkVTIiwgImRhdGFiYXNlIl0nLCAn bGF4ICRbKl0gPyAoQCB0c21hdGNoICJQb3N0Z3JlcyIgdHNjb25maWcgInNpbXBsZSIpJyk7Cisg anNvbmJfcGF0aF9xdWVyeSAKKy0tLS0tLS0tLS0tLS0tLS0tLQorICJwb3N0Z3JlcyIKKyAiUE9T VEdSRVMiCisoMiByb3dzKQorCistLSBpbiB0aGUgZGVmYXVsdCB0c3FwYXJzZXIgKHRvX3RzcXVl cnkpIHNwYWNlcyBhcmUgbm90IGFsbG93ZWQsIHNvIHRoaXMgc2hvdWxkIGZhaWwgZm9yIHN5bnRh eAorc2VsZWN0IGpzb25iX3BhdGhfcXVlcnkoJ1siZmFzdCBjYXIiLCAic3VwZXIgZmFzdCBjYXIi LCAiZmFzdCBhbmQgZnVyaW91cyIsICJzbG93IGNhciJdJywgJ2xheCAkWypdID8gKEAgdHNtYXRj aCAiZmFzdCBjYXIiIHRzY29uZmlnICJlbmdsaXNoIiknKTsKK0VSUk9SOiAgc3ludGF4IGVycm9y IGluIHRzcXVlcnk6ICJmYXN0IGNhciIKKy0tIGlmIHdlIHNwZWNpZnkgInciIGhvd2V2ZXIgaXQg c2hvdWxkIGJlIG9rCitzZWxlY3QganNvbmJfcGF0aF9xdWVyeSgnWyJmYXN0IGNhciIsICJzdXBl ciBmYXN0IGNhciIsICJmYXN0IGFuZCBmdXJpb3VzIiwgInNsb3cgY2FyIl0nLCAnbGF4ICRbKl0g PyAoQCB0c21hdGNoICJmYXN0IGNhciIgdHNjb25maWcgImVuZ2xpc2giIHRzcXBhcnNlciAidyIp Jyk7CisganNvbmJfcGF0aF9xdWVyeSAKKy0tLS0tLS0tLS0tLS0tLS0tLQorICJmYXN0IGNhciIK KyAic3VwZXIgZmFzdCBjYXIiCisoMiByb3dzKQorCistLSBpdCBzaG91bGQgYWxzbyBiZSBvayBp ZiB3ZSBjaGFuZ2UgdG8gYSB2YWxpZCB0b190c3F1ZXJ5CitzZWxlY3QganNvbmJfcGF0aF9xdWVy eSgnWyJmYXN0IGNhciIsICJzdXBlciBmYXN0IGNhciIsICJmYXN0IGFuZCBmdXJpb3VzIiwgInNs b3cgY2FyIl0nLCAnbGF4ICRbKl0gPyAoQCB0c21hdGNoICJmYXN0ICYgY2FyIiB0c2NvbmZpZyAi ZW5nbGlzaCIpJyk7CisganNvbmJfcGF0aF9xdWVyeSAKKy0tLS0tLS0tLS0tLS0tLS0tLQorICJm YXN0IGNhciIKKyAic3VwZXIgZmFzdCBjYXIiCisoMiByb3dzKQorCitzZWxlY3QganNvbmJfcGF0 aF9xdWVyeSgnWyJmYXQgY2F0IiwgImNhdCBmYXQiLCAiZmF0IHJhdHMiXScsICdsYXggJFsqXSA/ IChAIHRzbWF0Y2ggImZhdCAmIHJhdCIgdHNjb25maWcgImVuZ2xpc2giKScpOworIGpzb25iX3Bh dGhfcXVlcnkgCistLS0tLS0tLS0tLS0tLS0tLS0KKyAiZmF0IHJhdHMiCisoMSByb3cpCisKZGlm ZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvanNvbnBhdGgub3V0IGIvc3JjL3Rl c3QvcmVncmVzcy9leHBlY3RlZC9qc29ucGF0aC5vdXQKaW5kZXggZmQ5YmQ3NTVmNTIuLjAyZmVj ZWNiMmE5IDEwMDY0NAotLS0gYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2pzb25wYXRoLm91 dAorKysgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2pzb25wYXRoLm91dApAQCAtMTI5NCwz ICsxMjk0LDYzIEBAIEZST00gdW5uZXN0KEFSUkFZWyckID8gKEAgbGlrZV9yZWdleCAicGF0dGVy biIgZmxhZyAic21peHEiKSc6OnRleHQsCiAgMWEgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgfCBmICB8IDQyNjAxICAgICAgICAgIHwgdHJhaWxpbmcganVuayBhZnRlciBu dW1lcmljIGxpdGVyYWwgYXQgb3IgbmVhciAiMWEiIG9mIGpzb25wYXRoIGlucHV0IHwgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAKICg1 IHJvd3MpCiAKKy0tIHRzbWF0Y2ggKEZ1bGwgVGV4dCBTZWFyY2gpCistLSBiYXNpYyBzdWNjZXNz CitzZWxlY3QgJyQgPyAoQCB0c21hdGNoICJzaW1wbGUiKSc6Ompzb25wYXRoOworICAgICAgICBq c29ucGF0aCAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAkPyhAIHRzbWF0Y2gg InNpbXBsZSIpCisoMSByb3cpCisKK3NlbGVjdCAnJCA/IChAIHRzbWF0Y2ggInJ1bm5pbmciIHRz Y29uZmlnICJlbmdsaXNoIiknOjpqc29ucGF0aDsKKyAgICAgICAgICAgICAgICAgIGpzb25wYXRo ICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLQorICQ/KEAgdHNtYXRjaCAicnVubmluZyIgdHNjb25maWcgImVuZ2xpc2giKQorKDEg cm93KQorCistLSB3L291dCB0c2NvbmZpZyBhbmQgdHNxcGFyc2VyCitzZWxlY3QgJyQgPyAoQCB0 c21hdGNoICJmYXN0ICYgZnVyaW91cyIgdHNjb25maWcgInNpbXBsZSIpJzo6anNvbnBhdGg7Cisg ICAgICAgICAgICAgICAgICAgICBqc29ucGF0aCAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAkPyhAIHRzbWF0 Y2ggImZhc3QgJiBmdXJpb3VzIiB0c2NvbmZpZyAic2ltcGxlIikKKygxIHJvdykKKworc2VsZWN0 ICckID8gKEAgdHNtYXRjaCAiZmFzdCAmIGZ1cmlvdXMiIHRzY29uZmlnICJzaW1wbGUiIHRzcXBh cnNlciAidyIpJzo6anNvbnBhdGg7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAganNvbnBh dGggICAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgJD8oQCB0c21hdGNoICJm YXN0ICYgZnVyaW91cyIgdHNjb25maWcgInNpbXBsZSIgdHNxcGFyc2VyICJ3IikKKygxIHJvdykK KworLS0gdHNjb25maWcgbXVzdCBiZSBzcGVjaWZpZWQgZmlyc3QgYW5kIHRoZW4gdHNxcGFyc2Vy CitzZWxlY3QgJyQgPyAoQCB0c21hdGNoICJmYXN0ICYgZnVyaW91cyIgdHNxcGFyc2VyICJ3IiB0 c2NvbmZpZyAic2ltcGxlIiApJzo6anNvbnBhdGg7CitFUlJPUjogIHN5bnRheCBlcnJvciBhdCBv ciBuZWFyICIgIiBvZiBqc29ucGF0aCBpbnB1dAorTElORSAxOiBzZWxlY3QgJyQgPyAoQCB0c21h dGNoICJmYXN0ICYgZnVyaW91cyIgdHNxcGFyc2VyICJ3IiB0c2NvbmYuLi4KKyAgICAgICAgICAg ICAgIF4KK3NlbGVjdCAnJCA/IChAIHRzbWF0Y2ggImZhc3QgJiBmdXJpb3VzIiB0c3FwYXJzZXIg InciKSc6Ompzb25wYXRoOworICAgICAgICAgICAgICAgICAgIGpzb25wYXRoICAgICAgICAgICAg ICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQor ICQ/KEAgdHNtYXRjaCAiZmFzdCAmIGZ1cmlvdXMiIHRzcXBhcnNlciAidyIpCisoMSByb3cpCisK K3NlbGVjdCAnJFsqXSA/IChALnRpdGxlIHRzbWF0Y2ggImdvZCIgJiYgQC5yYXRpbmcgPiA1KSc6 Ompzb25wYXRoOworICAgICAgICAgICAgICAgICAgICAganNvbnBhdGggICAgICAgICAgICAgICAg ICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t CisgJFsqXT8oQC4idGl0bGUiIHRzbWF0Y2ggImdvZCIgJiYgQC4icmF0aW5nIiA+IDUpCisoMSBy b3cpCisKK3NlbGVjdCAnJCA/IChAIHRzbWF0Y2ggJHBhdHRlcm4pJzo6anNvbnBhdGg7CitFUlJP UjogIHN5bnRheCBlcnJvciBhdCBvciBuZWFyICIkcGF0dGVybiIgb2YganNvbnBhdGggaW5wdXQK K0xJTkUgMTogc2VsZWN0ICckID8gKEAgdHNtYXRjaCAkcGF0dGVybiknOjpqc29ucGF0aDsKKyAg ICAgICAgICAgICAgIF4KKy0tIG9ubHkgc3RyaW5nIGxpdGVyYWxzIChubyB2YXJpYWJsZXMpIGFy ZSBhbGxvd2VkIGZvciB0c3F1ZXJ5CitzZWxlY3QgJyQgPyAoQCB0c21hdGNoICR2YXIgdHNjb25m aWcgImVuZ2xpc2giKSc6Ompzb25wYXRoOworRVJST1I6ICBzeW50YXggZXJyb3IgYXQgb3IgbmVh ciAiJHZhciIgb2YganNvbnBhdGggaW5wdXQKK0xJTkUgMTogc2VsZWN0ICckID8gKEAgdHNtYXRj aCAkdmFyIHRzY29uZmlnICJlbmdsaXNoIiknOjpqc29ucGF0aDsKKyAgICAgICAgICAgICAgIF4K Ky0tIGlmIGEgdHNjb25maWcgZG9lc24ndCBleGlzdCBpdCBzaG91bGQgcGFyc2Ugbm9uZXRoZWxl c3MgKGV4ZWN1dG9yIHdpbGwgZmFpbCBpdCkKK3NlbGVjdCAnJCA/IChAIHRzbWF0Y2ggInJ1bm5p bmciIHRzY29uZmlnICJ3cm9uZ2NvbmZpZyIpJzo6anNvbnBhdGg7CisgICAgICAgICAgICAgICAg ICAgIGpzb25wYXRoICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICQ/KEAgdHNtYXRjaCAicnVubmluZyIgdHNjb25m aWcgIndyb25nY29uZmlnIikKKygxIHJvdykKKwpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVncmVz cy9zcWwvanNvbmJfanNvbnBhdGguc3FsIGIvc3JjL3Rlc3QvcmVncmVzcy9zcWwvanNvbmJfanNv bnBhdGguc3FsCmluZGV4IDNlODkyOWE1MjY5Li45YzcyMjllYjM4MiAxMDA2NDQKLS0tIGEvc3Jj L3Rlc3QvcmVncmVzcy9zcWwvanNvbmJfanNvbnBhdGguc3FsCisrKyBiL3NyYy90ZXN0L3JlZ3Jl c3Mvc3FsL2pzb25iX2pzb25wYXRoLnNxbApAQCAtMTE0NywzICsxMTQ3LDE2IEBAIFNFTEVDVAog CWpzb25iX3BhdGhfcXVlcnlfZmlyc3QoczEuaiwgJyQucyA+ICRzJywgdmFycyA9PiBzMi5qKSBn dAogRlJPTSBzdHIgczEsIHN0ciBzMgogT1JERVIgQlkgczEubnVtLCBzMi5udW07CisKK3NlbGVj dCBqc29uYl9wYXRoX3F1ZXJ5KCdbbnVsbCwgMSwgInJ1bm5pbmciLCAicnVucyIsICJyYW4iLCAi cnVuIiwgInJ1bm5lciIsICJqb2dnaW5nIl0nLCAnbGF4ICRbKl0gPyAoQCB0c21hdGNoICJmbHki IHRzY29uZmlnICJlbmdsaXNoIiknKTsKK3NlbGVjdCBqc29uYl9wYXRoX3F1ZXJ5KCdbbnVsbCwg MSwgInJ1bm5pbmciLCAicnVucyIsICJyYW4iLCAicnVuIiwgInJ1bm5lciIsICJqb2dnaW5nIl0n LCAnbGF4ICRbKl0gPyAoQCB0c21hdGNoICJydW4iIHRzY29uZmlnICJlbmdsaXNoIiknKTsKK3Nl bGVjdCBqc29uYl9wYXRoX3F1ZXJ5KCdbbnVsbCwgMSwgInJ1bm5pbmciLCAicnVucyIsICJyYW4i LCAicnVuIiwgInJ1bm5lciIsICJqb2dnaW5nIl0nLCAnbGF4ICRbKl0gPyAoQCB0c21hdGNoICJy dW4iIHRzY29uZmlnICJzaW1wbGUiKScpOworc2VsZWN0IGpzb25iX3BhdGhfcXVlcnkoJ1tudWxs LCAxLCAiUG9zdGdyZVNRTCIsICJwb3N0Z3JlcyIsICJQT1NUR1JFUyIsICJkYXRhYmFzZSJdJywg J2xheCAkWypdID8gKEAgdHNtYXRjaCAiUG9zdGdyZXMiIHRzY29uZmlnICJlbmdsaXNoIiknKTsK K3NlbGVjdCBqc29uYl9wYXRoX3F1ZXJ5KCdbbnVsbCwgMSwgIlBvc3RncmVTUUwiLCAicG9zdGdy ZXMiLCAiUE9TVEdSRVMiLCAiZGF0YWJhc2UiXScsICdsYXggJFsqXSA/IChAIHRzbWF0Y2ggIlBv c3RncmVzIiB0c2NvbmZpZyAic2ltcGxlIiknKTsKKy0tIGluIHRoZSBkZWZhdWx0IHRzcXBhcnNl ciAodG9fdHNxdWVyeSkgc3BhY2VzIGFyZSBub3QgYWxsb3dlZCwgc28gdGhpcyBzaG91bGQgZmFp bCBmb3Igc3ludGF4CitzZWxlY3QganNvbmJfcGF0aF9xdWVyeSgnWyJmYXN0IGNhciIsICJzdXBl ciBmYXN0IGNhciIsICJmYXN0IGFuZCBmdXJpb3VzIiwgInNsb3cgY2FyIl0nLCAnbGF4ICRbKl0g PyAoQCB0c21hdGNoICJmYXN0IGNhciIgdHNjb25maWcgImVuZ2xpc2giKScpOworLS0gaWYgd2Ug c3BlY2lmeSAidyIgaG93ZXZlciBpdCBzaG91bGQgYmUgb2sKK3NlbGVjdCBqc29uYl9wYXRoX3F1 ZXJ5KCdbImZhc3QgY2FyIiwgInN1cGVyIGZhc3QgY2FyIiwgImZhc3QgYW5kIGZ1cmlvdXMiLCAi c2xvdyBjYXIiXScsICdsYXggJFsqXSA/IChAIHRzbWF0Y2ggImZhc3QgY2FyIiB0c2NvbmZpZyAi ZW5nbGlzaCIgdHNxcGFyc2VyICJ3IiknKTsKKy0tIGl0IHNob3VsZCBhbHNvIGJlIG9rIGlmIHdl IGNoYW5nZSB0byBhIHZhbGlkIHRvX3RzcXVlcnkKK3NlbGVjdCBqc29uYl9wYXRoX3F1ZXJ5KCdb ImZhc3QgY2FyIiwgInN1cGVyIGZhc3QgY2FyIiwgImZhc3QgYW5kIGZ1cmlvdXMiLCAic2xvdyBj YXIiXScsICdsYXggJFsqXSA/IChAIHRzbWF0Y2ggImZhc3QgJiBjYXIiIHRzY29uZmlnICJlbmds aXNoIiknKTsKK3NlbGVjdCBqc29uYl9wYXRoX3F1ZXJ5KCdbImZhdCBjYXQiLCAiY2F0IGZhdCIs ICJmYXQgcmF0cyJdJywgJ2xheCAkWypdID8gKEAgdHNtYXRjaCAiZmF0ICYgcmF0IiB0c2NvbmZp ZyAiZW5nbGlzaCIpJyk7CmRpZmYgLS1naXQgYS9zcmMvdGVzdC9yZWdyZXNzL3NxbC9qc29ucGF0 aC5zcWwgYi9zcmMvdGVzdC9yZWdyZXNzL3NxbC9qc29ucGF0aC5zcWwKaW5kZXggNjFhNTI3MGQ0 ZTguLjlmNThmNDY2NjI2IDEwMDY0NAotLS0gYS9zcmMvdGVzdC9yZWdyZXNzL3NxbC9qc29ucGF0 aC5zcWwKKysrIGIvc3JjL3Rlc3QvcmVncmVzcy9zcWwvanNvbnBhdGguc3FsCkBAIC0yNjUsMyAr MjY1LDIyIEBAIEZST00gdW5uZXN0KEFSUkFZWyckID8gKEAgbGlrZV9yZWdleCAicGF0dGVybiIg ZmxhZyAic21peHEiKSc6OnRleHQsCiAgICAgICAgICAgICAgICAgICAnMDAnLAogICAgICAgICAg ICAgICAgICAgJzFhJ10pIHN0ciwKICAgICAgTEFURVJBTCBwZ19pbnB1dF9lcnJvcl9pbmZvKHN0 ciwgJ2pzb25wYXRoJykgYXMgZXJyaW5mbzsKKworLS0gdHNtYXRjaCAoRnVsbCBUZXh0IFNlYXJj aCkKKworLS0gYmFzaWMgc3VjY2Vzcworc2VsZWN0ICckID8gKEAgdHNtYXRjaCAic2ltcGxlIikn Ojpqc29ucGF0aDsKK3NlbGVjdCAnJCA/IChAIHRzbWF0Y2ggInJ1bm5pbmciIHRzY29uZmlnICJl bmdsaXNoIiknOjpqc29ucGF0aDsKKy0tIHcvb3V0IHRzY29uZmlnIGFuZCB0c3FwYXJzZXIKK3Nl bGVjdCAnJCA/IChAIHRzbWF0Y2ggImZhc3QgJiBmdXJpb3VzIiB0c2NvbmZpZyAic2ltcGxlIikn Ojpqc29ucGF0aDsKK3NlbGVjdCAnJCA/IChAIHRzbWF0Y2ggImZhc3QgJiBmdXJpb3VzIiB0c2Nv bmZpZyAic2ltcGxlIiB0c3FwYXJzZXIgInciKSc6Ompzb25wYXRoOworLS0gdHNjb25maWcgbXVz dCBiZSBzcGVjaWZpZWQgZmlyc3QgYW5kIHRoZW4gdHNxcGFyc2VyCitzZWxlY3QgJyQgPyAoQCB0 c21hdGNoICJmYXN0ICYgZnVyaW91cyIgdHNxcGFyc2VyICJ3IiB0c2NvbmZpZyAic2ltcGxlIiAp Jzo6anNvbnBhdGg7CitzZWxlY3QgJyQgPyAoQCB0c21hdGNoICJmYXN0ICYgZnVyaW91cyIgdHNx cGFyc2VyICJ3IiknOjpqc29ucGF0aDsKK3NlbGVjdCAnJFsqXSA/IChALnRpdGxlIHRzbWF0Y2gg ImdvZCIgJiYgQC5yYXRpbmcgPiA1KSc6Ompzb25wYXRoOworc2VsZWN0ICckID8gKEAgdHNtYXRj aCAkcGF0dGVybiknOjpqc29ucGF0aDsKKworLS0gb25seSBzdHJpbmcgbGl0ZXJhbHMgKG5vIHZh cmlhYmxlcykgYXJlIGFsbG93ZWQgZm9yIHRzcXVlcnkKK3NlbGVjdCAnJCA/IChAIHRzbWF0Y2gg JHZhciB0c2NvbmZpZyAiZW5nbGlzaCIpJzo6anNvbnBhdGg7CistLSBpZiBhIHRzY29uZmlnIGRv ZXNuJ3QgZXhpc3QgaXQgc2hvdWxkIHBhcnNlIG5vbmV0aGVsZXNzIChleGVjdXRvciB3aWxsIGZh aWwgaXQpCitzZWxlY3QgJyQgPyAoQCB0c21hdGNoICJydW5uaW5nIiB0c2NvbmZpZyAid3Jvbmdj b25maWciKSc6Ompzb25wYXRoOwotLSAKMi41My4wCgo= --000000000000af2b29064bc7f381--