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 1wfbkk-005XKk-0j for pgsql-hackers@arkaria.postgresql.org; Fri, 03 Jul 2026 11:08:14 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1wfbkj-007BP5-0H for pgsql-hackers@arkaria.postgresql.org; Fri, 03 Jul 2026 11:08:13 +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 1wfbki-007BOx-2K for pgsql-hackers@lists.postgresql.org; Fri, 03 Jul 2026 11:08:12 +0000 Received: from mail-yw1-x1135.google.com ([2607:f8b0:4864:20::1135]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1wfbkg-00000001RoR-0QrO for pgsql-hackers@postgresql.org; Fri, 03 Jul 2026 11:08:12 +0000 Received: by mail-yw1-x1135.google.com with SMTP id 00721157ae682-80e2cfe6918so5141347b3.0 for ; Fri, 03 Jul 2026 04:08:10 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1783076888; cv=none; d=google.com; s=arc-20260327; b=cDmzOaoNle5GN1E6t7VJJxwWQ7X1R44mopIMSQUfsrbqE4p01IKRCl1Sx6vXqdHdUK KiC9dIRWaYT2QjB3sJLlo1jHvDtKyXjFjfPohuGtoc1rmlzi5iXJEQZfn4SYCmtjj6fy nRdpftAG+YP0ipWTu4QOKyrWBCIdRVvXw5F8G0/OmiIHoHLcL2K6w3zHPPLgVovT5AXT jCitoB494lbp3w6bJ75cEVnDx3sqel69K9D5aPtr7v2nn+z9bciLau37qSxZelNejAX+ Vnw6vaCLr2U8+HGK+r7YJY91djPrLL1yx0joEjTHod6U+wW3Zn5jHgtHVfIdoWUz3AJZ lKpg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20260327; h=cc:to:subject:message-id:date:from:mime-version:dkim-signature; bh=ApvQRTpUrDiwkB9q93llkaROf4Y5im0JiDsqbcYAqEo=; fh=DRczyaD8GptUrRZ1Z5FNd00vFBa2bcvtF/TzZHfJ/+U=; b=EqdNoTNKRY4IVoR2PLdW+n0NPl5IguKWXqWWGTp2yW0nsfIBkbSBPvPM+ocXuVpSU7 ebF1YB4cmVrDbu7uRS6o8IOpQU1hjJnVeddZExF5kbRLOR7UwncjDq2G95qUMUbLXWf6 lmi5jpL+Y9oVUlxMpXicmCN8sUtH+U9OhJKMam4OuE9vhE3dFHj+/g2Yhn4rUKqDP57X mT+WO0QC5sjny6OdoY2t6eB4C3Gy5cLmmhomzvXvOv5bhCIThNk6dy3CBHDR8rc3PpGi gJ3HRW3o8nH5cnYDseGlSFScGBBpDE7WiyfuJiHdmYCMY/nfUp/y05Qsuu0G5d3NRwc3 m5PA==; darn=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=20251104; t=1783076888; x=1783681688; darn=postgresql.org; h=content-type:cc:to:subject:message-id:date:from:mime-version:from :to:cc:subject:date:message-id:reply-to:content-type; bh=ApvQRTpUrDiwkB9q93llkaROf4Y5im0JiDsqbcYAqEo=; b=CW3TDXbje0cgXWgmhxT+KzFegVW1hm9EStGRB61NDWncungo4r+27GAB24oOEq2k9/ z3Pni50GlbemqXxepnUGPuZFwn0zxKwdqITFIVcUfxpRiqgyBlS1ENkD0yXCSpZj3xhN +4KWGXqDCAQD4oAZQ4/pgvjM8VKbnQt3EqkXEpsrrMIUEdLdDmwmiBPOlr5iPsrFFnWH 8wzjwbDBrch4Xw0bMrJehkmNkU6pDT1aASPCiyYZDLS5cC0jBOq6Ih5+d3MidePZqtsF AUepoxjq1+C7EYW7Fztc/FH69EOn2OCqip2PtMYu8DNZYsNM8LhtDG0WYHiOaq8oZEEn YYpg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1783076888; x=1783681688; h=content-type:cc:to:subject:message-id:date:from:mime-version :x-gm-gg:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to:content-type; bh=ApvQRTpUrDiwkB9q93llkaROf4Y5im0JiDsqbcYAqEo=; b=HI3PhX3wtZHCuphoxMuFTcYkGAmS8p1M0i8mB0cmeFIt0zaxOnYZVJEM7iUmLlzP6X KA9jHTqSOY2h8YMu7K+CPLCCCjW7cto4uAKJa4PrEOA4B8wlaDJrUG0IJ0WruUa/sbtR 3y2GUu1YprJtQgDlA3zBCFTSdoZaaJEC1aCbNjjLEJypUkkoXW2waS6F4gcFsPhZenhK TS09CK2yIJIP9INkLTMGW4Ju806eRp6acPkI8HCIpGaipw2zNnpN4zTTapw2GPJ4RM4v cC8pmX7mF9KTAnqMAGtmrMD1fFcRxIxFK5jUiPXOxwrxVymIHqyVgcJUlEXoHImyfdMe sl+A== X-Gm-Message-State: AOJu0Ywcf19aFPRE4mALsLY6Q7CTlcHCUAn7C2PulxUk/GGicxpLYqD1 GgZJJpuiGcvwjMGMPv5rVae9+z7clj18t3F1BLhRaLHiuTU+X2ByNRewL3z9Sx0zfqmgoEYffNm Lt7hwjHOz4BLEsjWsitrH8nMaHdFby3d7heuu4Xs= X-Gm-Gg: AfdE7cm5y/8X6xWRUVbcrIAOgdMHNiB0PR4+ZNk47abg+y/JSn3HTWxrvZGZr/qzXEZ Zc0snbKHNLBL63uw+e+T89mYzIz3QV/mXVmb6pUGZMEkmJb+iClQ7xHUTt3Xf86c7vxBTZ0nyGI 92Sac4XLxrbBEJiqsnGuiq8hdxWWVNYAkBK+WbUYw1h9dcZMNvm930xcHC83nsz40EwhwJfYsXl TivCqxesLuyxIV2T3EwgZNi4NdsVBBGNKqqObl/S3y47NDKf+vo9UVC4YqAYqvb6wisnrY= X-Received: by 2002:a05:690c:6905:b0:80b:e19d:b8b2 with SMTP id 00721157ae682-81383e18f22mr94961167b3.28.1783076888111; Fri, 03 Jul 2026 04:08:08 -0700 (PDT) MIME-Version: 1.0 From: Ayush Tiwari Date: Fri, 3 Jul 2026 16:37:55 +0530 X-Gm-Features: AVVi8Ceg5jcMcZj_mntQzZuX5gUNvXczscM5yFxKP8DH5R6TYXKKpxqLsz846vY Message-ID: Subject: Proposal: INSERT ... BY NAME To: PostgreSQL Hackers Cc: Peter Eisentraut Content-Type: multipart/mixed; boundary="00000000000086252a0655b2f06e" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --00000000000086252a0655b2f06e Content-Type: multipart/alternative; boundary="0000000000008625290655b2f06c" --0000000000008625290655b2f06c Content-Type: text/plain; charset="UTF-8" Hi, I wanted to take a stab at implementing INSERT ... BY NAME, which has been accepted into the SQL draft standard. I could not find an existing patch for PostgreSQL; apologies if this has already been proposed. I learned about the standardization update from Peter's recent blog post. Attached is a draft patch for INSERT ... BY NAME. It matches the result columns of a source query to target columns by name instead of by position, which is useful when the source and target columns are written in different orders. Similar syntax exists in DuckDB [1] and Oracle [2]: INSERT INTO t1 (c1, c2) BY NAME SELECT c1 * 10 AS c2, c2 + 5 AS c1 FROM t2; Here c1 gets c2 + 5 and c2 gets c1 * 10. BY POSITION remains the default and can also be written explicitly. Behavior that the patch exhibits: - Each source column must match exactly one target column. Unknown source names and duplicate matches are errors. - Target columns not named by the query get their default values. An explicit target column list narrows the candidate target columns; without one, all table columns are candidates. - BY NAME requires a query source and is rejected for VALUES and DEFAULT VALUES. BY POSITION is accepted with DEFAULT VALUES as a no-op. - BY NAME is rejected for target lists that assign to subfields or array elements, since matching on the base column name would be ambiguous. The implementation resolves BY NAME during parse analysis by reordering the target column/attribute-number lists to match the source column order. After that, the query tree is an ordinary positional INSERT, so no rule/view deparsing changes were needed in the patch. For comparison, DuckDB [1] and Oracle 23ai [2] implement the same core behavior: source names are matched against target columns, unmatched target columns default, and unknown source names are errors. It's still a WIP patch, I'm trying out different queries, but it would be great if I could get some reviews on the direction. Thoughts? [1] https://duckdb.org/docs/current/sql/statements/insert#insert-into--by-name [2] https://docs.oracle.com/en/database/oracle/oracle-database/23/sqlrf/INSERT.html Regards, Ayush --0000000000008625290655b2f06c Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable
Hi,

I wanted to take a stab at implementing IN= SERT ... BY NAME, which has been
accepted into the SQL draft standard.= =C2=A0 I could not find an existing patch for
PostgreSQL; apologies if t= his has already been proposed.=C2=A0 I learned about the
standardization= update from Peter's recent blog post.

Attache= d is a draft patch for INSERT ... BY NAME.=C2=A0 It matches the result
c= olumns of a source query to target columns by name instead of by position,<= br>which is useful when the source and target columns are written in differ= ent
orders.=C2=A0 Similar syntax exists in DuckDB [1] and Oracle [2]:
=C2=A0 =C2=A0 INSERT INTO t1 (c1, c2)
=C2=A0 =C2=A0 =C2=A0 =C2=A0 B= Y NAME
=C2=A0 =C2=A0 =C2=A0 =C2=A0 SELECT c1 * 10 AS c2, c2 + 5 AS c1 FR= OM t2;

Here c1 gets c2 + 5 and c2 gets c1 * 10.=C2=A0 BY POSITION re= mains the default
and can also be written explicitly.

Behavior th= at the patch exhibits:

=C2=A0 - Each source column must match exactl= y one target column.=C2=A0 Unknown source
=C2=A0 =C2=A0 names and duplic= ate matches are errors.

=C2=A0 - Target columns not named by the que= ry get their default values.=C2=A0 An
=C2=A0 =C2=A0 explicit target colu= mn list narrows the candidate target columns; without
=C2=A0 =C2=A0 one,= all table columns are candidates.

=C2=A0 - BY NAME requires a query= source and is rejected for VALUES and DEFAULT
=C2=A0 =C2=A0 VALUES.=C2= =A0 BY POSITION is accepted with DEFAULT VALUES as a no-op.

=C2=A0 -= BY NAME is rejected for target lists that assign to subfields or array
= =C2=A0 =C2=A0 elements, since matching on the base column name would be amb= iguous.

The implementation resolves BY NAME during parse analysis by= reordering the
target column/attribute-number lists to match the source= column order.=C2=A0 After
that, the query tree is an ordinary positiona= l INSERT, so no rule/view
deparsing changes were needed in the patch.
For comparison, DuckDB [1] and Oracle 23ai [2] implement the same core=
behavior: source names are matched against target columns, unmatched ta= rget
columns default, and unknown source names are errors.

It'= ;s still a WIP patch, I'm trying out different queries, but it would be= great if I=C2=A0
--0000000000008625290655b2f06c-- --00000000000086252a0655b2f06e Content-Type: application/octet-stream; name="v1-0001-Add-INSERT-.-BY-NAME-to-match-source-columns-by-n.patch" Content-Disposition: attachment; filename="v1-0001-Add-INSERT-.-BY-NAME-to-match-source-columns-by-n.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mr4tuka20 RnJvbSBmZDNjOTUzZDY5NzViN2QyY2Q1N2QxMjI0NTRkNDdiYmNiNDVkYjIyIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBeXVzaCBUaXdhcmkgPGF5dXNodGl3YXJpLnNsZzAxQGdtYWls LmNvbT4KRGF0ZTogRnJpLCAzIEp1bCAyMDI2IDA5OjE0OjExICswMDAwClN1YmplY3Q6IFtQQVRD SCB2MV0gQWRkIElOU0VSVCAuLi4gQlkgTkFNRSB0byBtYXRjaCBzb3VyY2UgY29sdW1ucyBieSBu YW1lCgpUaGUgU1FMIHN0YW5kYXJkJ3MgZm9ydGhjb21pbmcgQlkgTkFNRSBvcHRpb24gZm9yIElO U0VSVCBhbGxvd3MgdGhlIHJlc3VsdApjb2x1bW5zIG9mIHRoZSBzb3VyY2UgcXVlcnkgdG8gYmUg bWF0Y2hlZCB0byB0aGUgdGFyZ2V0IGNvbHVtbnMgYnkgbmFtZQppbnN0ZWFkIG9mIGJ5IHBvc2l0 aW9uLiAgVGhpcyBpcyBjb252ZW5pZW50IHdoZW4gYm90aCBzaWRlcyBhcmUga25vd24gYnkKbmFt ZSBidXQgbWF5IGJlIGxpc3RlZCBpbiBhIGRpZmZlcmVudCBvcmRlciwgZm9yIGV4YW1wbGU6Cgog ICAgSU5TRVJUIElOVE8gdDEgKGMxLCBjMikKICAgICAgICBCWSBOQU1FCiAgICAgICAgU0VMRUNU IGMxICogMTAgQVMgYzIsIGMyICsgNSBBUyBjMSBGUk9NIHQyOwoKd2hpY2ggYXNzaWducyBjMiAr IDUgdG8gYzEgYW5kIGMxICogMTAgdG8gYzIuICBUaGUgZGVmYXVsdCBwb3NpdGlvbmFsCm1hdGNo aW5nIGNhbiBhbHNvIGJlIHJlcXVlc3RlZCBleHBsaWNpdGx5IHdpdGggQlkgUE9TSVRJT04uCgpX aXRoIEJZIE5BTUUsIGVhY2ggcmVzdWx0IGNvbHVtbiBvZiB0aGUgc291cmNlIHF1ZXJ5IG11c3Qg bWF0Y2ggZXhhY3RseSBvbmUKdGFyZ2V0IGNvbHVtbiwgYW5kIG5vIHR3byByZXN1bHQgY29sdW1u cyBtYXkgbWF0Y2ggdGhlIHNhbWUgdGFyZ2V0IGNvbHVtbi4KVGFyZ2V0IGNvbHVtbnMgbm90IG5h bWVkIGJ5IHRoZSBxdWVyeSByZWNlaXZlIHRoZWlyIGRlZmF1bHQgdmFsdWVzLCBqdXN0IGFzCndo ZW4gdGhleSBhcmUgb21pdHRlZCBmcm9tIGFuIGV4cGxpY2l0IGNvbHVtbiBsaXN0LiAgQlkgTkFN RSByZXF1aXJlcyBhIHF1ZXJ5CnNvdXJjZSB3aXRoIG5hbWVkIGNvbHVtbnMgYW5kIGlzIHJlamVj dGVkIGZvciBWQUxVRVMgYW5kIERFRkFVTFQgVkFMVUVTLgpUYXJnZXQgY29sdW1uIGxpc3RzIHRo YXQgdXNlIHN1YmZpZWxkIG9yIGFycmF5IGFzc2lnbm1lbnRzIGFyZSBhbHNvIHJlamVjdGVkLApz aW5jZSBtYXRjaGluZyBieSBiYXNlIGNvbHVtbiBuYW1lIHdvdWxkIGJlIGFtYmlndW91cyB0aGVy ZS4KClRoZSBCWSBOQU1FL0JZIFBPU0lUSU9OIGNsYXVzZSBjYW4gYmUgd3JpdHRlbiBvbiBlaXRo ZXIgc2lkZSBvZiBhbiBPVkVSUklESU5HCmNsYXVzZSBiZWZvcmUgdGhlIHF1ZXJ5IHNvdXJjZS4g IEJZIFBPU0lUSU9OIGlzIGFsc28gYWNjZXB0ZWQgd2l0aCBERUZBVUxUClZBTFVFUyBhcyBhbiBl eHBsaWNpdCBuby1vcC4KClRoZSBtYXRjaGluZyBpcyBkb25lIGR1cmluZyBwYXJzZSBhbmFseXNp cyBieSByZW9yZGVyaW5nIHRoZSB0YXJnZXQgY29sdW1uCmFuZCBhdHRyaWJ1dGUtbnVtYmVyIGxp c3RzIHRvIGxpbmUgdXAgd2l0aCB0aGUgc291cmNlIGNvbHVtbnMsIHNvIEJZIE5BTUUgaXMKcmVz b2x2ZWQgaW50byBhbiBvcmRpbmFyeSBwb3NpdGlvbmFsIGNvbHVtbiBtYXBwaW5nIGluIHRoZSBx dWVyeSB0cmVlLiAgQXMgYQpyZXN1bHQgbm8gY2hhbmdlcyB0byBydWxlIG9yIHZpZXcgZGVwYXJz aW5nIGFyZSBuZWVkZWQuCi0tLQogZG9jL3NyYy9zZ21sL3JlZi9pbnNlcnQuc2dtbCAgICAgICAg IHwgIDUyICsrKysrKysrKwogc3JjL2JhY2tlbmQvcGFyc2VyL2FuYWx5emUuYyAgICAgICAgIHwg MTE5ICsrKysrKysrKysrKysrKysrKysKIHNyYy9iYWNrZW5kL3BhcnNlci9ncmFtLnkgICAgICAg ICAgICB8ICA2MyArKysrKysrKysrCiBzcmMvaW5jbHVkZS9ub2Rlcy9wYXJzZW5vZGVzLmggICAg ICAgfCAgIDIgKwogc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9pbnNlcnQub3V0IHwgMTY5ICsr KysrKysrKysrKysrKysrKysrKysrKysrKwogc3JjL3Rlc3QvcmVncmVzcy9zcWwvaW5zZXJ0LnNx bCAgICAgIHwgIDk4ICsrKysrKysrKysrKysrKysKIDYgZmlsZXMgY2hhbmdlZCwgNTAzIGluc2Vy dGlvbnMoKykKCmRpZmYgLS1naXQgYS9kb2Mvc3JjL3NnbWwvcmVmL2luc2VydC5zZ21sIGIvZG9j L3NyYy9zZ21sL3JlZi9pbnNlcnQuc2dtbAppbmRleCAxMjFhOWVkY2I5OS4uMGZkNDA0MTZhMzYg MTAwNjQ0Ci0tLSBhL2RvYy9zcmMvc2dtbC9yZWYvaW5zZXJ0LnNnbWwKKysrIGIvZG9jL3NyYy9z Z21sL3JlZi9pbnNlcnQuc2dtbApAQCAtMjMsNiArMjMsNyBAQCBQb3N0Z3JlU1FMIGRvY3VtZW50 YXRpb24KIDxzeW5vcHNpcz4KIFsgV0lUSCBbIFJFQ1VSU0lWRSBdIDxyZXBsYWNlYWJsZSBjbGFz cz0icGFyYW1ldGVyIj53aXRoX3F1ZXJ5PC9yZXBsYWNlYWJsZT4gWywgLi4uXSBdCiBJTlNFUlQg SU5UTyA8cmVwbGFjZWFibGUgY2xhc3M9InBhcmFtZXRlciI+dGFibGVfbmFtZTwvcmVwbGFjZWFi bGU+IFsgQVMgPHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPmFsaWFzPC9yZXBsYWNlYWJs ZT4gXSBbICggPHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPmNvbHVtbl9uYW1lPC9yZXBs YWNlYWJsZT4gWywgLi4uXSApIF0KKyAgICBbIEJZIHsgTkFNRSB8IFBPU0lUSU9OIH0gXQogICAg IFsgT1ZFUlJJRElORyB7IFNZU1RFTSB8IFVTRVIgfSBWQUxVRSBdCiAgICAgeyBERUZBVUxUIFZB TFVFUyB8IFZBTFVFUyAoIHsgPHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPmV4cHJlc3Np b248L3JlcGxhY2VhYmxlPiB8IERFRkFVTFQgfSBbLCAuLi5dICkgWywgLi4uXSB8IDxyZXBsYWNl YWJsZSBjbGFzcz0icGFyYW1ldGVyIj5xdWVyeTwvcmVwbGFjZWFibGU+IH0KICAgICBbIE9OIENP TkZMSUNUIFsgPHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPmNvbmZsaWN0X3RhcmdldDwv cmVwbGFjZWFibGU+IF0gPHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPmNvbmZsaWN0X2Fj dGlvbjwvcmVwbGFjZWFibGU+IF0KQEAgLTY1LDYgKzY2LDM0IEBAIElOU0VSVCBJTlRPIDxyZXBs YWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj50YWJsZV9uYW1lPC9yZXBsYWNlYWJsZT4gWyBBUyA8 cmVwbGFjCiAgICBhc3NvY2lhdGVkIHdpdGggdGhlIGV4cGxpY2l0IG9yIGltcGxpY2l0IGNvbHVt biBsaXN0IGxlZnQtdG8tcmlnaHQuCiAgIDwvcGFyYT4KIAorICA8cGFyYT4KKyAgIFdoZW4gdGhl IGRhdGEgc291cmNlIGlzIGEgPHJlcGxhY2VhYmxlPnF1ZXJ5PC9yZXBsYWNlYWJsZT4sIHRoZSBv cHRpb25hbAorICAgPGxpdGVyYWw+QlkgTkFNRTwvbGl0ZXJhbD4gY2xhdXNlIGNoYW5nZXMgaG93 IGl0cyByZXN1bHQgY29sdW1ucyBhcmUKKyAgIGFzc29jaWF0ZWQgd2l0aCB0aGUgdGFyZ2V0IGNv bHVtbnM6IGluc3RlYWQgb2YgYmVpbmcgbWF0Y2hlZAorICAgbGVmdC10by1yaWdodCAoPGxpdGVy YWw+QlkgUE9TSVRJT048L2xpdGVyYWw+LCB0aGUgZGVmYXVsdCksIGVhY2ggcmVzdWx0CisgICBj b2x1bW4gb2YgdGhlIDxyZXBsYWNlYWJsZT5xdWVyeTwvcmVwbGFjZWFibGU+IGlzIG1hdGNoZWQg dG8gdGhlIHRhcmdldAorICAgY29sdW1uIHRoYXQgaGFzIHRoZSBzYW1lIG5hbWUuICBUaGlzIGlz IGNvbnZlbmllbnQgd2hlbiB0aGUgc291cmNlIGFuZAorICAgdGFyZ2V0IGNvbHVtbnMgYXJlIGtu b3duIGJ5IG5hbWUgYnV0IG1pZ2h0IGJlIGxpc3RlZCBpbiBhIGRpZmZlcmVudCBvcmRlci4KKyAg IEZvciBleGFtcGxlOgorPHByb2dyYW1saXN0aW5nPgorSU5TRVJUIElOVE8gdDEgKGMxLCBjMikK KyAgICBCWSBOQU1FCisgICAgU0VMRUNUIGMxICogMTAgQVMgYzIsIGMyICsgNSBBUyBjMSBGUk9N IHQyOworPC9wcm9ncmFtbGlzdGluZz4KKyAgIGFzc2lnbnMgPGxpdGVyYWw+YzIgKyA1PC9saXRl cmFsPiB0byA8bGl0ZXJhbD5jMTwvbGl0ZXJhbD4gYW5kCisgICA8bGl0ZXJhbD5jMSAqIDEwPC9s aXRlcmFsPiB0byA8bGl0ZXJhbD5jMjwvbGl0ZXJhbD4uICBFdmVyeSByZXN1bHQgY29sdW1uIG9m CisgICB0aGUgPHJlcGxhY2VhYmxlPnF1ZXJ5PC9yZXBsYWNlYWJsZT4gbXVzdCBtYXRjaCBhIHRh cmdldCBjb2x1bW4sIGFuZCBubyB0d28KKyAgIHJlc3VsdCBjb2x1bW5zIG1heSBtYXRjaCB0aGUg c2FtZSB0YXJnZXQgY29sdW1uLiAgVGFyZ2V0IGNvbHVtbnMgbm90IG5hbWVkCisgICBieSB0aGUg PHJlcGxhY2VhYmxlPnF1ZXJ5PC9yZXBsYWNlYWJsZT4gcmVjZWl2ZSB0aGVpciBkZWZhdWx0IHZh bHVlcywganVzdCBhcworICAgaWYgdGhleSBoYWQgYmVlbiBvbWl0dGVkIGZyb20gdGhlIGNvbHVt biBsaXN0LiAgPGxpdGVyYWw+QlkgTkFNRTwvbGl0ZXJhbD4KKyAgIGNhbm5vdCBiZSB1c2VkIHdp dGggPGxpdGVyYWw+VkFMVUVTPC9saXRlcmFsPiBvcgorICAgPGxpdGVyYWw+REVGQVVMVCBWQUxV RVM8L2xpdGVyYWw+LCBzaW5jZSB0aG9zZSBoYXZlIG5vIGNvbHVtbiBuYW1lcyB0byBtYXRjaAor ICAgYWdhaW5zdC4gIDxsaXRlcmFsPkJZIFBPU0lUSU9OPC9saXRlcmFsPiBpcyB0aGUgZGVmYXVs dCBiZWhhdmlvcjsgd2l0aAorICAgPGxpdGVyYWw+REVGQVVMVCBWQUxVRVM8L2xpdGVyYWw+LCBp dCBoYXMgbm8gZWZmZWN0LgorICAgPGxpdGVyYWw+QlkgTkFNRTwvbGl0ZXJhbD4gY2Fubm90IGJl IHVzZWQgd2hlbiB0aGUgdGFyZ2V0IGNvbHVtbiBsaXN0CisgICBhc3NpZ25zIHRvIHN1YmZpZWxk cyBvciBhcnJheSBlbGVtZW50cy4KKyAgPC9wYXJhPgorCiAgIDxwYXJhPgogICAgRWFjaCBjb2x1 bW4gbm90IHByZXNlbnQgaW4gdGhlIGV4cGxpY2l0IG9yIGltcGxpY2l0IGNvbHVtbiBsaXN0IHdp bGwgYmUKICAgIGZpbGxlZCB3aXRoIGEgZGVmYXVsdCB2YWx1ZSwgZWl0aGVyIGl0cyBkZWNsYXJl ZCBkZWZhdWx0IHZhbHVlCkBAIC0yMTQsNiArMjQzLDI5IEBAIElOU0VSVCBJTlRPIDxyZXBsYWNl YWJsZSBjbGFzcz0icGFyYW1ldGVyIj50YWJsZV9uYW1lPC9yZXBsYWNlYWJsZT4gWyBBUyA8cmVw bGFjCiAgICAgICA8L2xpc3RpdGVtPgogICAgICA8L3Zhcmxpc3RlbnRyeT4KIAorICAgICA8dmFy bGlzdGVudHJ5PgorICAgICAgPHRlcm0+PGxpdGVyYWw+QlkgTkFNRTwvbGl0ZXJhbD48L3Rlcm0+ CisgICAgICA8dGVybT48bGl0ZXJhbD5CWSBQT1NJVElPTjwvbGl0ZXJhbD48L3Rlcm0+CisgICAg ICA8bGlzdGl0ZW0+CisgICAgICAgPHBhcmE+CisgICAgICAgIFNwZWNpZmllcyBob3cgdGhlIHJl c3VsdCBjb2x1bW5zIG9mIHRoZSBzb3VyY2UKKyAgICAgICAgPHJlcGxhY2VhYmxlIGNsYXNzPSJw YXJhbWV0ZXIiPnF1ZXJ5PC9yZXBsYWNlYWJsZT4gYXJlIG1hdGNoZWQgdG8gdGhlCisgICAgICAg IHRhcmdldCBjb2x1bW5zLiAgV2l0aCA8bGl0ZXJhbD5CWSBQT1NJVElPTjwvbGl0ZXJhbD4gKHRo ZSBkZWZhdWx0KSB0aGV5CisgICAgICAgIGFyZSBtYXRjaGVkIGxlZnQtdG8tcmlnaHQuICBXaXRo IDxsaXRlcmFsPkJZIE5BTUU8L2xpdGVyYWw+IGVhY2ggcmVzdWx0CisgICAgICAgIGNvbHVtbiBp cyBtYXRjaGVkIHRvIHRoZSB0YXJnZXQgY29sdW1uIG9mIHRoZSBzYW1lIG5hbWU7IHRoZSByZXN1 bHQKKyAgICAgICAgY29sdW1ucyBtYXkgdGhlbiBhcHBlYXIgaW4gYW55IG9yZGVyLCBhbmQgdGFy Z2V0IGNvbHVtbnMgbm90IG5hbWVkIGJ5CisgICAgICAgIHRoZSA8cmVwbGFjZWFibGUgY2xhc3M9 InBhcmFtZXRlciI+cXVlcnk8L3JlcGxhY2VhYmxlPiBhcmUgZmlsbGVkIHdpdGgKKyAgICAgICAg dGhlaXIgZGVmYXVsdCB2YWx1ZXMuICA8bGl0ZXJhbD5CWSBOQU1FPC9saXRlcmFsPiByZXF1aXJl cyBhCisgICAgICAgIDxyZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj5xdWVyeTwvcmVwbGFj ZWFibGU+IHNvdXJjZSBhbmQgY2Fubm90IGJlCisgICAgICAgIGNvbWJpbmVkIHdpdGggPGxpdGVy YWw+VkFMVUVTPC9saXRlcmFsPiBvcgorICAgICAgICA8bGl0ZXJhbD5ERUZBVUxUIFZBTFVFUzwv bGl0ZXJhbD4uICBXaXRoCisgICAgICAgIDxsaXRlcmFsPkRFRkFVTFQgVkFMVUVTPC9saXRlcmFs PiwgPGxpdGVyYWw+QlkgUE9TSVRJT048L2xpdGVyYWw+IGhhcyBubworICAgICAgICBlZmZlY3Qu ICA8bGl0ZXJhbD5CWSBOQU1FPC9saXRlcmFsPiBjYW5ub3QgYmUgdXNlZCB3aGVuIHRoZSB0YXJn ZXQKKyAgICAgICAgY29sdW1uIGxpc3QgYXNzaWducyB0byBzdWJmaWVsZHMgb3IgYXJyYXkgZWxl bWVudHMuCisgICAgICAgPC9wYXJhPgorICAgICAgPC9saXN0aXRlbT4KKyAgICAgPC92YXJsaXN0 ZW50cnk+CisKICAgICAgPHZhcmxpc3RlbnRyeT4KICAgICAgIDx0ZXJtPjxsaXRlcmFsPk9WRVJS SURJTkcgU1lTVEVNIFZBTFVFPC9saXRlcmFsPjwvdGVybT4KICAgICAgIDxsaXN0aXRlbT4KZGlm ZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3BhcnNlci9hbmFseXplLmMgYi9zcmMvYmFja2VuZC9wYXJz ZXIvYW5hbHl6ZS5jCmluZGV4IDI5MzJkMTdhMTA3Li44NjNjM2ZhMDI0MiAxMDA2NDQKLS0tIGEv c3JjL2JhY2tlbmQvcGFyc2VyL2FuYWx5emUuYworKysgYi9zcmMvYmFja2VuZC9wYXJzZXIvYW5h bHl6ZS5jCkBAIC03Niw2ICs3Niw5IEBAIHBvc3RfcGFyc2VfYW5hbHl6ZV9ob29rX3R5cGUgcG9z dF9wYXJzZV9hbmFseXplX2hvb2sgPSBOVUxMOwogc3RhdGljIFF1ZXJ5ICp0cmFuc2Zvcm1PcHRp b25hbFNlbGVjdEludG8oUGFyc2VTdGF0ZSAqcHN0YXRlLCBOb2RlICpwYXJzZVRyZWUpOwogc3Rh dGljIFF1ZXJ5ICp0cmFuc2Zvcm1EZWxldGVTdG10KFBhcnNlU3RhdGUgKnBzdGF0ZSwgRGVsZXRl U3RtdCAqc3RtdCk7CiBzdGF0aWMgUXVlcnkgKnRyYW5zZm9ybUluc2VydFN0bXQoUGFyc2VTdGF0 ZSAqcHN0YXRlLCBJbnNlcnRTdG10ICpzdG10KTsKK3N0YXRpYyB2b2lkIHRyYW5zZm9ybUluc2Vy dENvbHNCeU5hbWUoUGFyc2VTdGF0ZSAqcHN0YXRlLCBMaXN0ICpleHByTGlzdCwKKwkJCQkJCQkJ CSAgTGlzdCAqc3JjY29sbmFtZXMsIExpc3QgKippY29sdW1ucywKKwkJCQkJCQkJCSAgTGlzdCAq KmF0dHJub3MpOwogc3RhdGljIE9uQ29uZmxpY3RFeHByICp0cmFuc2Zvcm1PbkNvbmZsaWN0Q2xh dXNlKFBhcnNlU3RhdGUgKnBzdGF0ZSwKIAkJCQkJCQkJCQkJCSBPbkNvbmZsaWN0Q2xhdXNlICpv bkNvbmZsaWN0Q2xhdXNlKTsKIHN0YXRpYyBGb3JQb3J0aW9uT2ZFeHByICp0cmFuc2Zvcm1Gb3JQ b3J0aW9uT2ZDbGF1c2UoUGFyc2VTdGF0ZSAqcHN0YXRlLApAQCAtNjcxLDYgKzY3NCw3IEBAIHRy YW5zZm9ybUluc2VydFN0bXQoUGFyc2VTdGF0ZSAqcHN0YXRlLCBJbnNlcnRTdG10ICpzdG10KQog CUxpc3QJICAgKnN1Yl9uYW1lc3BhY2U7CiAJTGlzdAkgICAqaWNvbHVtbnM7CiAJTGlzdAkgICAq YXR0cm5vczsKKwlMaXN0CSAgICpzcmNjb2xuYW1lcyA9IE5JTDsKIAlQYXJzZU5hbWVzcGFjZUl0 ZW0gKm5zaXRlbTsKIAlSVEVQZXJtaXNzaW9uSW5mbyAqcGVybWluZm87CiAJTGlzdENlbGwgICAq aWNvbHM7CkBAIC03MTksNiArNzIzLDI1IEBAIHRyYW5zZm9ybUluc2VydFN0bXQoUGFyc2VTdGF0 ZSAqcHN0YXRlLCBJbnNlcnRTdG10ICpzdG10KQogCQkJCQkJCQkJICBzZWxlY3RTdG10LT5sb2Nr aW5nQ2xhdXNlICE9IE5JTCB8fAogCQkJCQkJCQkJICBzZWxlY3RTdG10LT53aXRoQ2xhdXNlICE9 IE5VTEwpKTsKIAorCS8qCisJICogSU5TRVJUIC4uLiBCWSBOQU1FIG1hdGNoZXMgdGhlIHNvdXJj ZSBjb2x1bW5zIHRvIHRoZSB0YXJnZXQgY29sdW1ucyBieQorCSAqIHRoZWlyIG5hbWVzLCBzbyBp dCByZXF1aXJlcyBhIHF1ZXJ5IHNvdXJjZSB0aGF0IHByb2R1Y2VzIG5hbWVkIGNvbHVtbnMuCisJ ICogVkFMVUVTIHJvd3MgYW5kIERFRkFVTFQgVkFMVUVTIGhhdmUgbm8gY29sdW1uIG5hbWVzIHRv IG1hdGNoIGFnYWluc3QuCisJICovCisJaWYgKHN0bXQtPmJ5TmFtZSkKKwl7CisJCWlmIChzZWxl Y3RTdG10ID09IE5VTEwpCisJCQllcmVwb3J0KEVSUk9SLAorCQkJCQkoZXJyY29kZShFUlJDT0RF X1NZTlRBWF9FUlJPUiksCisJCQkJCSBlcnJtc2coImNhbm5vdCB1c2UgQlkgTkFNRSB3aXRoIERF RkFVTFQgVkFMVUVTIiksCisJCQkJCSBlcnJoaW50KCJCWSBOQU1FIHJlcXVpcmVzIGEgcXVlcnks IHN1Y2ggYXMgYSBTRUxFQ1QsIGFzIHRoZSBkYXRhIHNvdXJjZS4iKSkpOworCQlpZiAoc2VsZWN0 U3RtdC0+dmFsdWVzTGlzdHMgIT0gTklMKQorCQkJZXJlcG9ydChFUlJPUiwKKwkJCQkJKGVycmNv ZGUoRVJSQ09ERV9TWU5UQVhfRVJST1IpLAorCQkJCQkgZXJybXNnKCJjYW5ub3QgdXNlIEJZIE5B TUUgd2l0aCBWQUxVRVMiKSwKKwkJCQkJIGVycmhpbnQoIkJZIE5BTUUgcmVxdWlyZXMgYSBxdWVy eSwgc3VjaCBhcyBhIFNFTEVDVCwgYXMgdGhlIGRhdGEgc291cmNlLiIpKSk7CisJfQorCiAJLyoK IAkgKiBJZiBhIG5vbi1uaWwgcmFuZ2V0YWJsZS9uYW1lc3BhY2Ugd2FzIHBhc3NlZCBpbiwgYW5k IHdlIGFyZSBkb2luZwogCSAqIElOU0VSVC9TRUxFQ1QsIGFycmFuZ2UgdG8gcGFzcyB0aGUgcmFu Z2V0YWJsZS9ydGVwZXJtaW5mb3MvbmFtZXNwYWNlCkBAIC04NTksOCArODgyLDIxIEBAIHRyYW5z Zm9ybUluc2VydFN0bXQoUGFyc2VTdGF0ZSAqcHN0YXRlLCBJbnNlcnRTdG10ICpzdG10KQogCQkJ CWV4cHIgPSAoRXhwciAqKSB2YXI7CiAJCQl9CiAJCQlleHByTGlzdCA9IGxhcHBlbmQoZXhwckxp c3QsIGV4cHIpOworCQkJaWYgKHN0bXQtPmJ5TmFtZSkKKwkJCQlzcmNjb2xuYW1lcyA9IGxhcHBl bmQoc3JjY29sbmFtZXMsIHRsZS0+cmVzbmFtZSk7CiAJCX0KIAorCQkvKgorCQkgKiBGb3IgSU5T RVJUIC4uLiBCWSBOQU1FLCBtYXRjaCB0aGUgc291cmNlIGNvbHVtbnMgdG8gdGhlIHRhcmdldAor CQkgKiBjb2x1bW5zIGJ5IG5hbWUgYW5kIHJlb3JkZXIgdGhlIHRhcmdldCBjb2x1bW4gYW5kIGF0 dHJpYnV0ZS1udW1iZXIKKwkJICogbGlzdHMgc28gdGhhdCB0aGV5IGxpbmUgdXAgcG9zaXRpb25h bGx5IHdpdGggdGhlIHNvdXJjZSBjb2x1bW5zLgorCQkgKiBUYXJnZXQgY29sdW1ucyBub3QgbmFt ZWQgYnkgdGhlIHNvdXJjZSBhcmUgZHJvcHBlZCBoZXJlIGFuZCB3aWxsIGJlCisJCSAqIGZpbGxl ZCB3aXRoIHRoZWlyIGRlZmF1bHQgdmFsdWVzLgorCQkgKi8KKwkJaWYgKHN0bXQtPmJ5TmFtZSkK KwkJCXRyYW5zZm9ybUluc2VydENvbHNCeU5hbWUocHN0YXRlLCBleHByTGlzdCwgc3JjY29sbmFt ZXMsCisJCQkJCQkJCQkgICZpY29sdW1ucywgJmF0dHJub3MpOworCiAJCS8qIFByZXBhcmUgcm93 IGZvciBhc3NpZ25tZW50IHRvIHRhcmdldCB0YWJsZSAqLwogCQlleHByTGlzdCA9IHRyYW5zZm9y bUluc2VydFJvdyhwc3RhdGUsIGV4cHJMaXN0LAogCQkJCQkJCQkJICBzdG10LT5jb2xzLApAQCAt MTIwNiw2ICsxMjQyLDg5IEBAIHRyYW5zZm9ybUluc2VydFJvdyhQYXJzZVN0YXRlICpwc3RhdGUs IExpc3QgKmV4cHJsaXN0LAogCXJldHVybiByZXN1bHQ7CiB9CiAKKy8qCisgKiB0cmFuc2Zvcm1J bnNlcnRDb2xzQnlOYW1lIC0KKyAqCSAgUmVvcmRlciB0aGUgSU5TRVJUIHRhcmdldC1jb2x1bW4g bGlzdHMgdG8gbWF0Y2ggdGhlIHNvdXJjZSBjb2x1bW5zIG9mIGFuCisgKgkgIElOU0VSVCAuLi4g QlkgTkFNRSBieSBuYW1lLgorICoKKyAqIGV4cHJMaXN0OiB0cmFuc2Zvcm1lZCBzb3VyY2UgZXhw cmVzc2lvbnMsIGluIHNvdXJjZS1jb2x1bW4gb3JkZXIKKyAqIHNyY2NvbG5hbWVzOiBzb3VyY2Ug Y29sdW1uIG5hbWVzIChsaXN0IG9mIGNoYXIgKiksIGFsaWduZWQgd2l0aCBleHByTGlzdAorICog aWNvbHVtbnM6IGluL291dDsgY2FuZGlkYXRlIHRhcmdldCBjb2x1bW5zIChsaXN0IG9mIFJlc1Rh cmdldCkKKyAqIGF0dHJub3M6IGluL291dDsgdGFyZ2V0IGF0dHJpYnV0ZSBudW1iZXJzLCBhbGln bmVkIHdpdGggKmljb2x1bW5zCisgKgorICogT24gcmV0dXJuLCAqaWNvbHVtbnMgYW5kICphdHRy bm9zIGFyZSByZXBsYWNlZCB3aXRoIG5ldyBsaXN0cyB0aGF0IGFyZQorICogYWxpZ25lZCBwb3Np dGlvbmFsbHkgd2l0aCBleHByTGlzdDogdGhlIE50aCBlbnRyeSBpcyB0aGUgdGFyZ2V0IGNvbHVt bgorICogd2hvc2UgbmFtZSBtYXRjaGVzIHRoZSBOdGggc291cmNlIGNvbHVtbi4gIEVhY2ggc291 cmNlIGNvbHVtbiBtdXN0IG1hdGNoCisgKiBleGFjdGx5IG9uZSB0YXJnZXQgY29sdW1uLiAgVGFy Z2V0IGNvbHVtbnMgdGhhdCBhcmUgbm90IG5hbWVkIGJ5IGFueSBzb3VyY2UKKyAqIGNvbHVtbiBh cmUgc2ltcGx5IG9taXR0ZWQsIGFuZCB3aWxsIGJlIGFzc2lnbmVkIHRoZWlyIGRlZmF1bHQgdmFs dWVzIHdoZW4KKyAqIHRoZSB0YXJnZXQgbGlzdCBpcyBsYXRlciBleHBhbmRlZC4KKyAqLworc3Rh dGljIHZvaWQKK3RyYW5zZm9ybUluc2VydENvbHNCeU5hbWUoUGFyc2VTdGF0ZSAqcHN0YXRlLCBM aXN0ICpleHByTGlzdCwKKwkJCQkJCSAgTGlzdCAqc3JjY29sbmFtZXMsIExpc3QgKippY29sdW1u cywgTGlzdCAqKmF0dHJub3MpCit7CisJTGlzdAkgICAqbmV3X2ljb2x1bW5zID0gTklMOworCUxp c3QJICAgKm5ld19hdHRybm9zID0gTklMOworCUJpdG1hcHNldCAgKm1hdGNoZWQgPSBOVUxMOwor CUxpc3RDZWxsICAgKmljb2xzOworCUxpc3RDZWxsICAgKmxjX2V4cHI7CisJTGlzdENlbGwgICAq bGNfbmFtZTsKKworCWZvcmVhY2goaWNvbHMsICppY29sdW1ucykKKwl7CisJCVJlc1RhcmdldCAg KmNvbCA9IGxmaXJzdF9ub2RlKFJlc1RhcmdldCwgaWNvbHMpOworCisJCWlmIChjb2wtPmluZGly ZWN0aW9uICE9IE5JTCkKKwkJCWVyZXBvcnQoRVJST1IsCisJCQkJCShlcnJjb2RlKEVSUkNPREVf RkVBVFVSRV9OT1RfU1VQUE9SVEVEKSwKKwkJCQkJIGVycm1zZygiY2Fubm90IHVzZSBCWSBOQU1F IHdpdGggc3ViZmllbGQgb3IgYXJyYXkgYXNzaWdubWVudHMiKSwKKwkJCQkJIHBhcnNlcl9lcnJw b3NpdGlvbihwc3RhdGUsIGNvbC0+bG9jYXRpb24pKSk7CisJfQorCisJZm9yYm90aChsY19leHBy LCBleHByTGlzdCwgbGNfbmFtZSwgc3JjY29sbmFtZXMpCisJeworCQlFeHByCSAgICpzZXhwciA9 IChFeHByICopIGxmaXJzdChsY19leHByKTsKKwkJY2hhcgkgICAqc25hbWUgPSAoY2hhciAqKSBs Zmlyc3QobGNfbmFtZSk7CisJCVJlc1RhcmdldCAgKm1hdGNoY29sID0gTlVMTDsKKwkJaW50CQkJ bWF0Y2hhdHRubyA9IDA7CisJCUxpc3RDZWxsICAgKmF0dG5vczsKKworCQlmb3Jib3RoKGljb2xz LCAqaWNvbHVtbnMsIGF0dG5vcywgKmF0dHJub3MpCisJCXsKKwkJCVJlc1RhcmdldCAgKmNvbCA9 IGxmaXJzdF9ub2RlKFJlc1RhcmdldCwgaWNvbHMpOworCisJCQlpZiAoc25hbWUgIT0gTlVMTCAm JiBjb2wtPm5hbWUgIT0gTlVMTCAmJgorCQkJCXN0cmNtcChzbmFtZSwgY29sLT5uYW1lKSA9PSAw KQorCQkJeworCQkJCW1hdGNoY29sID0gY29sOworCQkJCW1hdGNoYXR0bm8gPSBsZmlyc3RfaW50 KGF0dG5vcyk7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKworCQlpZiAobWF0Y2hjb2wgPT0gTlVM TCkKKwkJCWVyZXBvcnQoRVJST1IsCisJCQkJCShlcnJjb2RlKEVSUkNPREVfVU5ERUZJTkVEX0NP TFVNTiksCisJCQkJCSBlcnJtc2coInNvdXJjZSBjb2x1bW4gXCIlc1wiIGhhcyBubyBtYXRjaGlu ZyB0YXJnZXQgY29sdW1uIiwKKwkJCQkJCQlzbmFtZSA/IHNuYW1lIDogIj9jb2x1bW4/IiksCisJ CQkJCSBwYXJzZXJfZXJycG9zaXRpb24ocHN0YXRlLCBleHByTG9jYXRpb24oKE5vZGUgKikgc2V4 cHIpKSkpOworCisJCWlmIChibXNfaXNfbWVtYmVyKG1hdGNoYXR0bm8sIG1hdGNoZWQpKQorCQkJ ZXJlcG9ydChFUlJPUiwKKwkJCQkJKGVycmNvZGUoRVJSQ09ERV9EVVBMSUNBVEVfQ09MVU1OKSwK KwkJCQkJIGVycm1zZygiY29sdW1uIFwiJXNcIiBzcGVjaWZpZWQgbW9yZSB0aGFuIG9uY2UiLAor CQkJCQkJCW1hdGNoY29sLT5uYW1lKSwKKwkJCQkJIHBhcnNlcl9lcnJwb3NpdGlvbihwc3RhdGUs IGV4cHJMb2NhdGlvbigoTm9kZSAqKSBzZXhwcikpKSk7CisKKwkJbWF0Y2hlZCA9IGJtc19hZGRf bWVtYmVyKG1hdGNoZWQsIG1hdGNoYXR0bm8pOworCQluZXdfaWNvbHVtbnMgPSBsYXBwZW5kKG5l d19pY29sdW1ucywgbWF0Y2hjb2wpOworCQluZXdfYXR0cm5vcyA9IGxhcHBlbmRfaW50KG5ld19h dHRybm9zLCBtYXRjaGF0dG5vKTsKKwl9CisKKwkqaWNvbHVtbnMgPSBuZXdfaWNvbHVtbnM7CisJ KmF0dHJub3MgPSBuZXdfYXR0cm5vczsKK30KKwogLyoKICAqIHRyYW5zZm9ybU9uQ29uZmxpY3RD bGF1c2UgLQogICoJICB0cmFuc2Zvcm1zIGFuIE9uQ29uZmxpY3RDbGF1c2UgaW4gYW4gSU5TRVJU CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9wYXJzZXIvZ3JhbS55IGIvc3JjL2JhY2tlbmQvcGFy c2VyL2dyYW0ueQppbmRleCBmZjRlMTM4OGM1NS4uYzBmMTgxZjA0YzYgMTAwNjQ0Ci0tLSBhL3Ny Yy9iYWNrZW5kL3BhcnNlci9ncmFtLnkKKysrIGIvc3JjL2JhY2tlbmQvcGFyc2VyL2dyYW0ueQpA QCAtNjUwLDYgKzY1MCw3IEBAIHN0YXRpYyBOb2RlICptYWtlUmVjdXJzaXZlVmlld1NlbGVjdChj aGFyICpyZWxuYW1lLCBMaXN0ICphbGlhc2VzLCBOb2RlICpxdWVyeSk7CiAldHlwZSA8c3RyPgkJ b3B0X2V4aXN0aW5nX3dpbmRvd19uYW1lCiAldHlwZSA8Ym9vbGVhbj4gb3B0X2lmX25vdF9leGlz dHMKICV0eXBlIDxib29sZWFuPiBvcHRfdW5pcXVlX251bGxfdHJlYXRtZW50CisldHlwZSA8Ym9v bGVhbj4gaW5zZXJ0X2J5X2NsYXVzZQogJXR5cGUgPGl2YWw+CWdlbmVyYXRlZF93aGVuIG92ZXJy aWRlX2tpbmQgb3B0X3ZpcnR1YWxfb3Jfc3RvcmVkCiAldHlwZSA8cGFydHNwZWM+CVBhcnRpdGlv blNwZWMgT3B0UGFydGl0aW9uU3BlYwogJXR5cGUgPHBhcnRlbGVtPglwYXJ0X2VsZW0KQEAgLTEz MDM5LDYgKzEzMDQwLDI5IEBAIGluc2VydF9yZXN0OgogCQkJCQkkJC0+b3ZlcnJpZGUgPSAkMjsK IAkJCQkJJCQtPnNlbGVjdFN0bXQgPSAkNDsKIAkJCQl9CisJCQl8IE9WRVJSSURJTkcgb3ZlcnJp ZGVfa2luZCBWQUxVRV9QIGluc2VydF9ieV9jbGF1c2UgU2VsZWN0U3RtdAorCQkJCXsKKwkJCQkJ JCQgPSBtYWtlTm9kZShJbnNlcnRTdG10KTsKKwkJCQkJJCQtPmNvbHMgPSBOSUw7CisJCQkJCSQk LT5vdmVycmlkZSA9ICQyOworCQkJCQkkJC0+YnlOYW1lID0gJDQ7CisJCQkJCSQkLT5zZWxlY3RT dG10ID0gJDU7CisJCQkJfQorCQkJfCBpbnNlcnRfYnlfY2xhdXNlIFNlbGVjdFN0bXQKKwkJCQl7 CisJCQkJCSQkID0gbWFrZU5vZGUoSW5zZXJ0U3RtdCk7CisJCQkJCSQkLT5jb2xzID0gTklMOwor CQkJCQkkJC0+YnlOYW1lID0gJDE7CisJCQkJCSQkLT5zZWxlY3RTdG10ID0gJDI7CisJCQkJfQor CQkJfCBpbnNlcnRfYnlfY2xhdXNlIE9WRVJSSURJTkcgb3ZlcnJpZGVfa2luZCBWQUxVRV9QIFNl bGVjdFN0bXQKKwkJCQl7CisJCQkJCSQkID0gbWFrZU5vZGUoSW5zZXJ0U3RtdCk7CisJCQkJCSQk LT5jb2xzID0gTklMOworCQkJCQkkJC0+YnlOYW1lID0gJDE7CisJCQkJCSQkLT5vdmVycmlkZSA9 ICQzOworCQkJCQkkJC0+c2VsZWN0U3RtdCA9ICQ1OworCQkJCX0KIAkJCXwgJygnIGluc2VydF9j b2x1bW5fbGlzdCAnKScgU2VsZWN0U3RtdAogCQkJCXsKIAkJCQkJJCQgPSBtYWtlTm9kZShJbnNl cnRTdG10KTsKQEAgLTEzMDUyLDEyICsxMzA3Niw0MiBAQCBpbnNlcnRfcmVzdDoKIAkJCQkJJCQt Pm92ZXJyaWRlID0gJDU7CiAJCQkJCSQkLT5zZWxlY3RTdG10ID0gJDc7CiAJCQkJfQorCQkJfCAn KCcgaW5zZXJ0X2NvbHVtbl9saXN0ICcpJyBPVkVSUklESU5HIG92ZXJyaWRlX2tpbmQgVkFMVUVf UCBpbnNlcnRfYnlfY2xhdXNlIFNlbGVjdFN0bXQKKwkJCQl7CisJCQkJCSQkID0gbWFrZU5vZGUo SW5zZXJ0U3RtdCk7CisJCQkJCSQkLT5jb2xzID0gJDI7CisJCQkJCSQkLT5vdmVycmlkZSA9ICQ1 OworCQkJCQkkJC0+YnlOYW1lID0gJDc7CisJCQkJCSQkLT5zZWxlY3RTdG10ID0gJDg7CisJCQkJ fQorCQkJfCAnKCcgaW5zZXJ0X2NvbHVtbl9saXN0ICcpJyBpbnNlcnRfYnlfY2xhdXNlIFNlbGVj dFN0bXQKKwkJCQl7CisJCQkJCSQkID0gbWFrZU5vZGUoSW5zZXJ0U3RtdCk7CisJCQkJCSQkLT5j b2xzID0gJDI7CisJCQkJCSQkLT5ieU5hbWUgPSAkNDsKKwkJCQkJJCQtPnNlbGVjdFN0bXQgPSAk NTsKKwkJCQl9CisJCQl8ICcoJyBpbnNlcnRfY29sdW1uX2xpc3QgJyknIGluc2VydF9ieV9jbGF1 c2UgT1ZFUlJJRElORyBvdmVycmlkZV9raW5kIFZBTFVFX1AgU2VsZWN0U3RtdAorCQkJCXsKKwkJ CQkJJCQgPSBtYWtlTm9kZShJbnNlcnRTdG10KTsKKwkJCQkJJCQtPmNvbHMgPSAkMjsKKwkJCQkJ JCQtPmJ5TmFtZSA9ICQ0OworCQkJCQkkJC0+b3ZlcnJpZGUgPSAkNjsKKwkJCQkJJCQtPnNlbGVj dFN0bXQgPSAkODsKKwkJCQl9CiAJCQl8IERFRkFVTFQgVkFMVUVTCiAJCQkJewogCQkJCQkkJCA9 IG1ha2VOb2RlKEluc2VydFN0bXQpOwogCQkJCQkkJC0+Y29scyA9IE5JTDsKIAkJCQkJJCQtPnNl bGVjdFN0bXQgPSBOVUxMOwogCQkJCX0KKwkJCXwgaW5zZXJ0X2J5X2NsYXVzZSBERUZBVUxUIFZB TFVFUworCQkJCXsKKwkJCQkJJCQgPSBtYWtlTm9kZShJbnNlcnRTdG10KTsKKwkJCQkJJCQtPmNv bHMgPSBOSUw7CisJCQkJCSQkLT5ieU5hbWUgPSAkMTsKKwkJCQkJJCQtPnNlbGVjdFN0bXQgPSBO VUxMOworCQkJCX0KIAkJOwogCiBvdmVycmlkZV9raW5kOgpAQCAtMTMwNjUsNiArMTMxMTksMTUg QEAgb3ZlcnJpZGVfa2luZDoKIAkJCXwgU1lTVEVNX1AJeyAkJCA9IE9WRVJSSURJTkdfU1lTVEVN X1ZBTFVFOyB9CiAJCTsKIAorLyoKKyAqIEJZIE5BTUUgbWF0Y2hlcyB0aGUgc291cmNlIGNvbHVt bnMgdG8gdGhlIHRhcmdldCBjb2x1bW5zIGJ5IG5hbWU7IEJZCisgKiBQT1NJVElPTiByZXF1ZXN0 cyB0aGUgZGVmYXVsdCBwb3NpdGlvbmFsIG1hdGNoaW5nIGV4cGxpY2l0bHkuCisgKi8KK2luc2Vy dF9ieV9jbGF1c2U6CisJCQlCWSBOQU1FX1AJCXsgJCQgPSB0cnVlOyB9CisJCQl8IEJZIFBPU0lU SU9OCXsgJCQgPSBmYWxzZTsgfQorCQk7CisKIGluc2VydF9jb2x1bW5fbGlzdDoKIAkJCWluc2Vy dF9jb2x1bW5faXRlbQogCQkJCQl7ICQkID0gbGlzdF9tYWtlMSgkMSk7IH0KZGlmZiAtLWdpdCBh L3NyYy9pbmNsdWRlL25vZGVzL3BhcnNlbm9kZXMuaCBiL3NyYy9pbmNsdWRlL25vZGVzL3BhcnNl bm9kZXMuaAppbmRleCA0MTMzYzQwNGE2Yi4uOTUxZThiZDQ2ZGEgMTAwNjQ0Ci0tLSBhL3NyYy9p bmNsdWRlL25vZGVzL3BhcnNlbm9kZXMuaAorKysgYi9zcmMvaW5jbHVkZS9ub2Rlcy9wYXJzZW5v ZGVzLmgKQEAgLTIyMTMsNiArMjIxMyw4IEBAIHR5cGVkZWYgc3RydWN0IEluc2VydFN0bXQKIAlS ZXR1cm5pbmdDbGF1c2UgKnJldHVybmluZ0NsYXVzZTsJLyogUkVUVVJOSU5HIGNsYXVzZSAqLwog CVdpdGhDbGF1c2UgKndpdGhDbGF1c2U7CQkvKiBXSVRIIGNsYXVzZSAqLwogCU92ZXJyaWRpbmdL aW5kIG92ZXJyaWRlOwkvKiBPVkVSUklESU5HIGNsYXVzZSAqLworCWJvb2wJCWJ5TmFtZTsJCQkv KiBCWSBOQU1FOiBtYXRjaCBzb3VyY2UgY29sdW1ucyB0byB0YXJnZXQKKwkJCQkJCQkJICogY29s dW1ucyBieSBuYW1lIHJhdGhlciB0aGFuIGJ5IHBvc2l0aW9uICovCiB9IEluc2VydFN0bXQ7CiAK IC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3Mv ZXhwZWN0ZWQvaW5zZXJ0Lm91dCBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvaW5zZXJ0Lm91 dAppbmRleCA3NWI4ZGU3OWZjZS4uMDlkNmI0YjQ0MTkgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3Jl Z3Jlc3MvZXhwZWN0ZWQvaW5zZXJ0Lm91dAorKysgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVk L2luc2VydC5vdXQKQEAgLTEwOTYsMyArMTA5NiwxNzIgQEAgaW5zZXJ0IGludG8gcmV0dXJuaW5n d3J0ZXN0IHZhbHVlcyAoMiwgJ2ZvbycpIHJldHVybmluZyByZXR1cm5pbmd3cnRlc3Q7CiAoMSBy b3cpCiAKIGRyb3AgdGFibGUgcmV0dXJuaW5nd3J0ZXN0OworLS0gKioqKioqCistLSAqICBJTlNF UlQgLi4uIEJZIE5BTUUKKy0tICoqKioqKgorY3JlYXRlIHRhYmxlIGJ5bmFtZV90IChhIGludCwg YiBpbnQsIGMgaW50IGRlZmF1bHQgNDIpOworLS0gQlkgTkFNRSBtYXRjaGVzIHRoZSBxdWVyeSdz IHJlc3VsdCBjb2x1bW5zIHRvIHRhcmdldCBjb2x1bW5zIGJ5IG5hbWUsCistLSByZWdhcmRsZXNz IG9mIG9yZGVyCitpbnNlcnQgaW50byBieW5hbWVfdCAoYSwgYikgYnkgbmFtZSBzZWxlY3QgMiBh cyBiLCAxIGFzIGE7CitzZWxlY3QgYSwgYiwgYyBmcm9tIGJ5bmFtZV90IG9yZGVyIGJ5IGE7Cisg YSB8IGIgfCBjICAKKy0tLSstLS0rLS0tLQorIDEgfCAyIHwgNDIKKygxIHJvdykKKworLS0gV2l0 aG91dCBhbiBleHBsaWNpdCBjb2x1bW4gbGlzdCwgYWxsIHRhYmxlIGNvbHVtbnMgYXJlIGNhbmRp ZGF0ZXM7IGNvbHVtbnMKKy0tIG5vdCBuYW1lZCBieSB0aGUgcXVlcnkgcmVjZWl2ZSB0aGVpciBk ZWZhdWx0IHZhbHVlcwordHJ1bmNhdGUgYnluYW1lX3Q7CitpbnNlcnQgaW50byBieW5hbWVfdCBi eSBuYW1lIHNlbGVjdCAxMCBhcyBjLCAyMCBhcyBhOworc2VsZWN0IGEsIGIsIGMgZnJvbSBieW5h bWVfdCBvcmRlciBieSBhOworIGEgIHwgYiB8IGMgIAorLS0tLSstLS0rLS0tLQorIDIwIHwgICB8 IDEwCisoMSByb3cpCisKKy0tIFRoZSBzYW1lIHJ1bGUgYXBwbGllcyB3aGVuIGFuIGV4cGxpY2l0 IGNvbHVtbiBsaXN0IGlzIHByZXNlbnQKK3RydW5jYXRlIGJ5bmFtZV90OworaW5zZXJ0IGludG8g YnluYW1lX3QgKGEsIGIpIGJ5IG5hbWUgc2VsZWN0IDMwIGFzIGE7CitzZWxlY3QgYSwgYiwgYyBm cm9tIGJ5bmFtZV90IG9yZGVyIGJ5IGE7CisgYSAgfCBiIHwgYyAgCistLS0tKy0tLSstLS0tCisg MzAgfCAgIHwgNDIKKygxIHJvdykKKworLS0gQlkgUE9TSVRJT04gaXMgdGhlIGRlZmF1bHQsIHNw ZWxsZWQgb3V0IGV4cGxpY2l0bHkKK3RydW5jYXRlIGJ5bmFtZV90OworaW5zZXJ0IGludG8gYnlu YW1lX3QgKGEsIGIsIGMpIGJ5IHBvc2l0aW9uIHNlbGVjdCAxLCAyLCAzOworc2VsZWN0IGEsIGIs IGMgZnJvbSBieW5hbWVfdCBvcmRlciBieSBhOworIGEgfCBiIHwgYyAKKy0tLSstLS0rLS0tCisg MSB8IDIgfCAzCisoMSByb3cpCisKK3RydW5jYXRlIGJ5bmFtZV90OworaW5zZXJ0IGludG8gYnlu YW1lX3QgYnkgcG9zaXRpb24gdmFsdWVzICg0LCA1LCA2KTsKK3NlbGVjdCBhLCBiLCBjIGZyb20g YnluYW1lX3Qgb3JkZXIgYnkgYTsKKyBhIHwgYiB8IGMgCistLS0rLS0tKy0tLQorIDQgfCA1IHwg NgorKDEgcm93KQorCit0cnVuY2F0ZSBieW5hbWVfdDsKK2luc2VydCBpbnRvIGJ5bmFtZV90IGJ5 IHBvc2l0aW9uIGRlZmF1bHQgdmFsdWVzOworc2VsZWN0IGEsIGIsIGMgZnJvbSBieW5hbWVfdCBv cmRlciBieSBhOworIGEgfCBiIHwgYyAgCistLS0rLS0tKy0tLS0KKyAgIHwgICB8IDQyCisoMSBy b3cpCisKKy0tIHNvdXJjZSBjb2x1bW4gb3JkZXIgZG9lcyBub3QgbWF0dGVyIHdpdGggQlkgTkFN RQordHJ1bmNhdGUgYnluYW1lX3Q7CitpbnNlcnQgaW50byBieW5hbWVfdCBieSBuYW1lIHNlbGVj dCAzIGFzIGMsIDEgYXMgYSwgMiBhcyBiOworc2VsZWN0IGEsIGIsIGMgZnJvbSBieW5hbWVfdCBv cmRlciBieSBhOworIGEgfCBiIHwgYyAKKy0tLSstLS0rLS0tCisgMSB8IDIgfCAzCisoMSByb3cp CisKKy0tIEJZIE5BTUUgd29ya3Mgd2l0aCBhIGdlbmVyYWwgcXVlcnkgKENURSwgZXhwcmVzc2lv bnMpCit0cnVuY2F0ZSBieW5hbWVfdDsKK3dpdGggc3JjKHgsIHkpIGFzICh2YWx1ZXMgKDEwMCwg MjAwKSkKKyAgaW5zZXJ0IGludG8gYnluYW1lX3QgYnkgbmFtZSBzZWxlY3QgeSBhcyBiLCB4IGFz IGEgZnJvbSBzcmM7CitzZWxlY3QgYSwgYiwgYyBmcm9tIGJ5bmFtZV90IG9yZGVyIGJ5IGE7Cisg IGEgIHwgIGIgIHwgYyAgCistLS0tLSstLS0tLSstLS0tCisgMTAwIHwgMjAwIHwgNDIKKygxIHJv dykKKworLS0gQlkgTkFNRSBpcyBjYXNlIHNlbnNpdGl2ZSBhbmQgaG9ub3JzIHF1b3RlZCBpZGVu dGlmaWVycworY3JlYXRlIHRhYmxlIGJ5bmFtZV9jYXNlICgiQ29sIiBpbnQsIGNvbCBpbnQpOwor aW5zZXJ0IGludG8gYnluYW1lX2Nhc2UgYnkgbmFtZSBzZWxlY3QgMSBhcyAiQ29sIiwgMiBhcyBj b2w7CitzZWxlY3QgIkNvbCIsIGNvbCBmcm9tIGJ5bmFtZV9jYXNlOworIENvbCB8IGNvbCAKKy0t LS0tKy0tLS0tCisgICAxIHwgICAyCisoMSByb3cpCisKK2Ryb3AgdGFibGUgYnluYW1lX2Nhc2U7 CistLSBlcnJvcjogYSByZXN1bHQgY29sdW1uIGhhcyBubyBtYXRjaGluZyB0YXJnZXQgY29sdW1u CitpbnNlcnQgaW50byBieW5hbWVfdCBieSBuYW1lIHNlbGVjdCAxIGFzIGEsIDIgYXMgenp6Owor RVJST1I6ICBzb3VyY2UgY29sdW1uICJ6enoiIGhhcyBubyBtYXRjaGluZyB0YXJnZXQgY29sdW1u CitMSU5FIDE6IGluc2VydCBpbnRvIGJ5bmFtZV90IGJ5IG5hbWUgc2VsZWN0IDEgYXMgYSwgMiBh cyB6eno7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgXgorLS0gZXJyb3I6IGFuIGV4cGxpY2l0IHRhcmdldCBsaXN0IG5hcnJvd3MgdGhlIGNhbmRp ZGF0ZSBjb2x1bW5zCitpbnNlcnQgaW50byBieW5hbWVfdCAoYSwgYikgYnkgbmFtZSBzZWxlY3Qg MSBhcyBhLCAyIGFzIGM7CitFUlJPUjogIHNvdXJjZSBjb2x1bW4gImMiIGhhcyBubyBtYXRjaGlu ZyB0YXJnZXQgY29sdW1uCitMSU5FIDE6IGluc2VydCBpbnRvIGJ5bmFtZV90IChhLCBiKSBieSBu YW1lIHNlbGVjdCAxIGFzIGEsIDIgYXMgYzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXgorLS0gZXJyb3I6IHR3byByZXN1bHQgY29s dW1ucyBtYXAgdG8gdGhlIHNhbWUgdGFyZ2V0IGNvbHVtbgoraW5zZXJ0IGludG8gYnluYW1lX3Qg YnkgbmFtZSBzZWxlY3QgMSBhcyBhLCAyIGFzIGE7CitFUlJPUjogIGNvbHVtbiAiYSIgc3BlY2lm aWVkIG1vcmUgdGhhbiBvbmNlCitMSU5FIDE6IGluc2VydCBpbnRvIGJ5bmFtZV90IGJ5IG5hbWUg c2VsZWN0IDEgYXMgYSwgMiBhcyBhOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIF4KKy0tIGVycm9yOiBnZW5lcmF0ZWQgcmVzdWx0IGNvbHVtbiBu YW1lcyBzdGlsbCBuZWVkIGEgbWF0Y2hpbmcgdGFyZ2V0IGNvbHVtbgoraW5zZXJ0IGludG8gYnlu YW1lX3QgYnkgbmFtZSBzZWxlY3QgMSwgMjsKK0VSUk9SOiAgc291cmNlIGNvbHVtbiAiP2NvbHVt bj8iIGhhcyBubyBtYXRjaGluZyB0YXJnZXQgY29sdW1uCitMSU5FIDE6IGluc2VydCBpbnRvIGJ5 bmFtZV90IGJ5IG5hbWUgc2VsZWN0IDEsIDI7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIF4KKy0tIGVycm9yOiB0YXJnZXQgY29sdW1uIGluZGlyZWN0aW9uIGNh bm5vdCBiZSBtYXRjaGVkIHVuYW1iaWd1b3VzbHkgYnkgbmFtZQorY3JlYXRlIHR5cGUgYnluYW1l X3BhaXIgYXMgKHggaW50LCB5IGludCk7CitjcmVhdGUgdGFibGUgYnluYW1lX2NvbXAgKGMgYnlu YW1lX3BhaXIpOworaW5zZXJ0IGludG8gYnluYW1lX2NvbXAoYy54LCBjLnkpIGJ5IG5hbWUgc2Vs ZWN0IDEgYXMgYzsKK0VSUk9SOiAgY2Fubm90IHVzZSBCWSBOQU1FIHdpdGggc3ViZmllbGQgb3Ig YXJyYXkgYXNzaWdubWVudHMKK0xJTkUgMTogaW5zZXJ0IGludG8gYnluYW1lX2NvbXAoYy54LCBj LnkpIGJ5IG5hbWUgc2VsZWN0IDEgYXMgYzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgXgorZHJvcCB0YWJsZSBieW5hbWVfY29tcDsKK2Ryb3AgdHlwZSBieW5hbWVfcGFpcjsKKy0t IGVycm9yOiBCWSBOQU1FIHJlcXVpcmVzIGEgcXVlcnkgc291cmNlCitpbnNlcnQgaW50byBieW5h bWVfdCBieSBuYW1lIHZhbHVlcyAoMSwgMiwgMyk7CitFUlJPUjogIGNhbm5vdCB1c2UgQlkgTkFN RSB3aXRoIFZBTFVFUworSElOVDogIEJZIE5BTUUgcmVxdWlyZXMgYSBxdWVyeSwgc3VjaCBhcyBh IFNFTEVDVCwgYXMgdGhlIGRhdGEgc291cmNlLgoraW5zZXJ0IGludG8gYnluYW1lX3QgKGEsIGIp IGJ5IG5hbWUgdmFsdWVzICgxLCAyKTsKK0VSUk9SOiAgY2Fubm90IHVzZSBCWSBOQU1FIHdpdGgg VkFMVUVTCitISU5UOiAgQlkgTkFNRSByZXF1aXJlcyBhIHF1ZXJ5LCBzdWNoIGFzIGEgU0VMRUNU LCBhcyB0aGUgZGF0YSBzb3VyY2UuCitpbnNlcnQgaW50byBieW5hbWVfdCBieSBuYW1lIGRlZmF1 bHQgdmFsdWVzOworRVJST1I6ICBjYW5ub3QgdXNlIEJZIE5BTUUgd2l0aCBERUZBVUxUIFZBTFVF UworSElOVDogIEJZIE5BTUUgcmVxdWlyZXMgYSBxdWVyeSwgc3VjaCBhcyBhIFNFTEVDVCwgYXMg dGhlIGRhdGEgc291cmNlLgorZHJvcCB0YWJsZSBieW5hbWVfdDsKKy0tIEJZIE5BTUUgY29tYmlu ZWQgd2l0aCBPVkVSUklESU5HIGFuZCBhbiBpZGVudGl0eSBjb2x1bW4KK2NyZWF0ZSB0YWJsZSBi eW5hbWVfaWRlbnQgKGlkIGludCBnZW5lcmF0ZWQgYWx3YXlzIGFzIGlkZW50aXR5LAorCQkJCQkJ CXZhbCBpbnQsIG5vdGUgdGV4dCBkZWZhdWx0ICd4Jyk7CitpbnNlcnQgaW50byBieW5hbWVfaWRl bnQgKGlkLCB2YWwpIGJ5IG5hbWUgb3ZlcnJpZGluZyBzeXN0ZW0gdmFsdWUKKyAgc2VsZWN0IDk5 IGFzIHZhbCwgNSBhcyBpZDsKK2luc2VydCBpbnRvIGJ5bmFtZV9pZGVudCAoaWQsIHZhbCkgb3Zl cnJpZGluZyBzeXN0ZW0gdmFsdWUgYnkgbmFtZQorICBzZWxlY3QgMTAwIGFzIHZhbCwgNiBhcyBp ZDsKK3NlbGVjdCBpZCwgdmFsLCBub3RlIGZyb20gYnluYW1lX2lkZW50IG9yZGVyIGJ5IGlkOwor IGlkIHwgdmFsIHwgbm90ZSAKKy0tLS0rLS0tLS0rLS0tLS0tCisgIDUgfCAgOTkgfCB4CisgIDYg fCAxMDAgfCB4CisoMiByb3dzKQorCitkcm9wIHRhYmxlIGJ5bmFtZV9pZGVudDsKKy0tIEJZIE5B TUUgY29tYmluZWQgd2l0aCBPTiBDT05GTElDVCBhbmQgUkVUVVJOSU5HCitjcmVhdGUgdGFibGUg YnluYW1lX2NvbmZsaWN0IChpZCBpbnQgcHJpbWFyeSBrZXksIGEgaW50LCBiIGludCBkZWZhdWx0 IDkpOworaW5zZXJ0IGludG8gYnluYW1lX2NvbmZsaWN0IGJ5IG5hbWUgc2VsZWN0IDEgYXMgaWQs IDIgYXMgYTsKK2luc2VydCBpbnRvIGJ5bmFtZV9jb25mbGljdCBieSBuYW1lIHNlbGVjdCAxIGFz IGlkLCA5OSBhcyBhCisgIG9uIGNvbmZsaWN0IGRvIG5vdGhpbmc7CitzZWxlY3QgaWQsIGEsIGIg ZnJvbSBieW5hbWVfY29uZmxpY3Qgb3JkZXIgYnkgaWQ7CisgaWQgfCBhIHwgYiAKKy0tLS0rLS0t Ky0tLQorICAxIHwgMiB8IDkKKygxIHJvdykKKworaW5zZXJ0IGludG8gYnluYW1lX2NvbmZsaWN0 IGJ5IG5hbWUgc2VsZWN0IDUgYXMgYSwgMSBhcyBpZAorICBvbiBjb25mbGljdCAoaWQpIGRvIHVw ZGF0ZSBzZXQgYSA9IGV4Y2x1ZGVkLmE7CitpbnNlcnQgaW50byBieW5hbWVfY29uZmxpY3QgYnkg bmFtZSBzZWxlY3QgMiBhcyBpZCwgNyBhcyBhCisgIHJldHVybmluZyBpZCwgYSwgYjsKKyBpZCB8 IGEgfCBiIAorLS0tLSstLS0rLS0tCisgIDIgfCA3IHwgOQorKDEgcm93KQorCitzZWxlY3QgaWQs IGEsIGIgZnJvbSBieW5hbWVfY29uZmxpY3Qgb3JkZXIgYnkgaWQ7CisgaWQgfCBhIHwgYiAKKy0t LS0rLS0tKy0tLQorICAxIHwgNSB8IDkKKyAgMiB8IDcgfCA5CisoMiByb3dzKQorCitkcm9wIHRh YmxlIGJ5bmFtZV9jb25mbGljdDsKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL2lu c2VydC5zcWwgYi9zcmMvdGVzdC9yZWdyZXNzL3NxbC9pbnNlcnQuc3FsCmluZGV4IDJiMDg2ZWVi NmQ3Li40YjFjYjliNDljNyAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvcmVncmVzcy9zcWwvaW5zZXJ0 LnNxbAorKysgYi9zcmMvdGVzdC9yZWdyZXNzL3NxbC9pbnNlcnQuc3FsCkBAIC02NzQsMyArNjc0 LDEwMSBAQCBhbHRlciB0YWJsZSByZXR1cm5pbmd3cnRlc3QyIGRyb3AgYzsKIGFsdGVyIHRhYmxl IHJldHVybmluZ3dydGVzdCBhdHRhY2ggcGFydGl0aW9uIHJldHVybmluZ3dydGVzdDIgZm9yIHZh bHVlcyBpbiAoMik7CiBpbnNlcnQgaW50byByZXR1cm5pbmd3cnRlc3QgdmFsdWVzICgyLCAnZm9v JykgcmV0dXJuaW5nIHJldHVybmluZ3dydGVzdDsKIGRyb3AgdGFibGUgcmV0dXJuaW5nd3J0ZXN0 OworCistLSAqKioqKioKKy0tICogIElOU0VSVCAuLi4gQlkgTkFNRQorLS0gKioqKioqCitjcmVh dGUgdGFibGUgYnluYW1lX3QgKGEgaW50LCBiIGludCwgYyBpbnQgZGVmYXVsdCA0Mik7CisKKy0t IEJZIE5BTUUgbWF0Y2hlcyB0aGUgcXVlcnkncyByZXN1bHQgY29sdW1ucyB0byB0YXJnZXQgY29s dW1ucyBieSBuYW1lLAorLS0gcmVnYXJkbGVzcyBvZiBvcmRlcgoraW5zZXJ0IGludG8gYnluYW1l X3QgKGEsIGIpIGJ5IG5hbWUgc2VsZWN0IDIgYXMgYiwgMSBhcyBhOworc2VsZWN0IGEsIGIsIGMg ZnJvbSBieW5hbWVfdCBvcmRlciBieSBhOworCistLSBXaXRob3V0IGFuIGV4cGxpY2l0IGNvbHVt biBsaXN0LCBhbGwgdGFibGUgY29sdW1ucyBhcmUgY2FuZGlkYXRlczsgY29sdW1ucworLS0gbm90 IG5hbWVkIGJ5IHRoZSBxdWVyeSByZWNlaXZlIHRoZWlyIGRlZmF1bHQgdmFsdWVzCit0cnVuY2F0 ZSBieW5hbWVfdDsKK2luc2VydCBpbnRvIGJ5bmFtZV90IGJ5IG5hbWUgc2VsZWN0IDEwIGFzIGMs IDIwIGFzIGE7CitzZWxlY3QgYSwgYiwgYyBmcm9tIGJ5bmFtZV90IG9yZGVyIGJ5IGE7CisKKy0t IFRoZSBzYW1lIHJ1bGUgYXBwbGllcyB3aGVuIGFuIGV4cGxpY2l0IGNvbHVtbiBsaXN0IGlzIHBy ZXNlbnQKK3RydW5jYXRlIGJ5bmFtZV90OworaW5zZXJ0IGludG8gYnluYW1lX3QgKGEsIGIpIGJ5 IG5hbWUgc2VsZWN0IDMwIGFzIGE7CitzZWxlY3QgYSwgYiwgYyBmcm9tIGJ5bmFtZV90IG9yZGVy IGJ5IGE7CisKKy0tIEJZIFBPU0lUSU9OIGlzIHRoZSBkZWZhdWx0LCBzcGVsbGVkIG91dCBleHBs aWNpdGx5Cit0cnVuY2F0ZSBieW5hbWVfdDsKK2luc2VydCBpbnRvIGJ5bmFtZV90IChhLCBiLCBj KSBieSBwb3NpdGlvbiBzZWxlY3QgMSwgMiwgMzsKK3NlbGVjdCBhLCBiLCBjIGZyb20gYnluYW1l X3Qgb3JkZXIgYnkgYTsKK3RydW5jYXRlIGJ5bmFtZV90OworaW5zZXJ0IGludG8gYnluYW1lX3Qg YnkgcG9zaXRpb24gdmFsdWVzICg0LCA1LCA2KTsKK3NlbGVjdCBhLCBiLCBjIGZyb20gYnluYW1l X3Qgb3JkZXIgYnkgYTsKK3RydW5jYXRlIGJ5bmFtZV90OworaW5zZXJ0IGludG8gYnluYW1lX3Qg YnkgcG9zaXRpb24gZGVmYXVsdCB2YWx1ZXM7CitzZWxlY3QgYSwgYiwgYyBmcm9tIGJ5bmFtZV90 IG9yZGVyIGJ5IGE7CisKKy0tIHNvdXJjZSBjb2x1bW4gb3JkZXIgZG9lcyBub3QgbWF0dGVyIHdp dGggQlkgTkFNRQordHJ1bmNhdGUgYnluYW1lX3Q7CitpbnNlcnQgaW50byBieW5hbWVfdCBieSBu YW1lIHNlbGVjdCAzIGFzIGMsIDEgYXMgYSwgMiBhcyBiOworc2VsZWN0IGEsIGIsIGMgZnJvbSBi eW5hbWVfdCBvcmRlciBieSBhOworCistLSBCWSBOQU1FIHdvcmtzIHdpdGggYSBnZW5lcmFsIHF1 ZXJ5IChDVEUsIGV4cHJlc3Npb25zKQordHJ1bmNhdGUgYnluYW1lX3Q7Cit3aXRoIHNyYyh4LCB5 KSBhcyAodmFsdWVzICgxMDAsIDIwMCkpCisgIGluc2VydCBpbnRvIGJ5bmFtZV90IGJ5IG5hbWUg c2VsZWN0IHkgYXMgYiwgeCBhcyBhIGZyb20gc3JjOworc2VsZWN0IGEsIGIsIGMgZnJvbSBieW5h bWVfdCBvcmRlciBieSBhOworCistLSBCWSBOQU1FIGlzIGNhc2Ugc2Vuc2l0aXZlIGFuZCBob25v cnMgcXVvdGVkIGlkZW50aWZpZXJzCitjcmVhdGUgdGFibGUgYnluYW1lX2Nhc2UgKCJDb2wiIGlu dCwgY29sIGludCk7CitpbnNlcnQgaW50byBieW5hbWVfY2FzZSBieSBuYW1lIHNlbGVjdCAxIGFz ICJDb2wiLCAyIGFzIGNvbDsKK3NlbGVjdCAiQ29sIiwgY29sIGZyb20gYnluYW1lX2Nhc2U7Citk cm9wIHRhYmxlIGJ5bmFtZV9jYXNlOworCistLSBlcnJvcjogYSByZXN1bHQgY29sdW1uIGhhcyBu byBtYXRjaGluZyB0YXJnZXQgY29sdW1uCitpbnNlcnQgaW50byBieW5hbWVfdCBieSBuYW1lIHNl bGVjdCAxIGFzIGEsIDIgYXMgenp6OworCistLSBlcnJvcjogYW4gZXhwbGljaXQgdGFyZ2V0IGxp c3QgbmFycm93cyB0aGUgY2FuZGlkYXRlIGNvbHVtbnMKK2luc2VydCBpbnRvIGJ5bmFtZV90IChh LCBiKSBieSBuYW1lIHNlbGVjdCAxIGFzIGEsIDIgYXMgYzsKKworLS0gZXJyb3I6IHR3byByZXN1 bHQgY29sdW1ucyBtYXAgdG8gdGhlIHNhbWUgdGFyZ2V0IGNvbHVtbgoraW5zZXJ0IGludG8gYnlu YW1lX3QgYnkgbmFtZSBzZWxlY3QgMSBhcyBhLCAyIGFzIGE7CisKKy0tIGVycm9yOiBnZW5lcmF0 ZWQgcmVzdWx0IGNvbHVtbiBuYW1lcyBzdGlsbCBuZWVkIGEgbWF0Y2hpbmcgdGFyZ2V0IGNvbHVt bgoraW5zZXJ0IGludG8gYnluYW1lX3QgYnkgbmFtZSBzZWxlY3QgMSwgMjsKKworLS0gZXJyb3I6 IHRhcmdldCBjb2x1bW4gaW5kaXJlY3Rpb24gY2Fubm90IGJlIG1hdGNoZWQgdW5hbWJpZ3VvdXNs eSBieSBuYW1lCitjcmVhdGUgdHlwZSBieW5hbWVfcGFpciBhcyAoeCBpbnQsIHkgaW50KTsKK2Ny ZWF0ZSB0YWJsZSBieW5hbWVfY29tcCAoYyBieW5hbWVfcGFpcik7CitpbnNlcnQgaW50byBieW5h bWVfY29tcChjLngsIGMueSkgYnkgbmFtZSBzZWxlY3QgMSBhcyBjOworZHJvcCB0YWJsZSBieW5h bWVfY29tcDsKK2Ryb3AgdHlwZSBieW5hbWVfcGFpcjsKKworLS0gZXJyb3I6IEJZIE5BTUUgcmVx dWlyZXMgYSBxdWVyeSBzb3VyY2UKK2luc2VydCBpbnRvIGJ5bmFtZV90IGJ5IG5hbWUgdmFsdWVz ICgxLCAyLCAzKTsKK2luc2VydCBpbnRvIGJ5bmFtZV90IChhLCBiKSBieSBuYW1lIHZhbHVlcyAo MSwgMik7CitpbnNlcnQgaW50byBieW5hbWVfdCBieSBuYW1lIGRlZmF1bHQgdmFsdWVzOworCitk cm9wIHRhYmxlIGJ5bmFtZV90OworCistLSBCWSBOQU1FIGNvbWJpbmVkIHdpdGggT1ZFUlJJRElO RyBhbmQgYW4gaWRlbnRpdHkgY29sdW1uCitjcmVhdGUgdGFibGUgYnluYW1lX2lkZW50IChpZCBp bnQgZ2VuZXJhdGVkIGFsd2F5cyBhcyBpZGVudGl0eSwKKwkJCQkJCQl2YWwgaW50LCBub3RlIHRl eHQgZGVmYXVsdCAneCcpOworaW5zZXJ0IGludG8gYnluYW1lX2lkZW50IChpZCwgdmFsKSBieSBu YW1lIG92ZXJyaWRpbmcgc3lzdGVtIHZhbHVlCisgIHNlbGVjdCA5OSBhcyB2YWwsIDUgYXMgaWQ7 CitpbnNlcnQgaW50byBieW5hbWVfaWRlbnQgKGlkLCB2YWwpIG92ZXJyaWRpbmcgc3lzdGVtIHZh bHVlIGJ5IG5hbWUKKyAgc2VsZWN0IDEwMCBhcyB2YWwsIDYgYXMgaWQ7CitzZWxlY3QgaWQsIHZh bCwgbm90ZSBmcm9tIGJ5bmFtZV9pZGVudCBvcmRlciBieSBpZDsKK2Ryb3AgdGFibGUgYnluYW1l X2lkZW50OworCistLSBCWSBOQU1FIGNvbWJpbmVkIHdpdGggT04gQ09ORkxJQ1QgYW5kIFJFVFVS TklORworY3JlYXRlIHRhYmxlIGJ5bmFtZV9jb25mbGljdCAoaWQgaW50IHByaW1hcnkga2V5LCBh IGludCwgYiBpbnQgZGVmYXVsdCA5KTsKK2luc2VydCBpbnRvIGJ5bmFtZV9jb25mbGljdCBieSBu YW1lIHNlbGVjdCAxIGFzIGlkLCAyIGFzIGE7CitpbnNlcnQgaW50byBieW5hbWVfY29uZmxpY3Qg YnkgbmFtZSBzZWxlY3QgMSBhcyBpZCwgOTkgYXMgYQorICBvbiBjb25mbGljdCBkbyBub3RoaW5n Oworc2VsZWN0IGlkLCBhLCBiIGZyb20gYnluYW1lX2NvbmZsaWN0IG9yZGVyIGJ5IGlkOworaW5z ZXJ0IGludG8gYnluYW1lX2NvbmZsaWN0IGJ5IG5hbWUgc2VsZWN0IDUgYXMgYSwgMSBhcyBpZAor ICBvbiBjb25mbGljdCAoaWQpIGRvIHVwZGF0ZSBzZXQgYSA9IGV4Y2x1ZGVkLmE7CitpbnNlcnQg aW50byBieW5hbWVfY29uZmxpY3QgYnkgbmFtZSBzZWxlY3QgMiBhcyBpZCwgNyBhcyBhCisgIHJl dHVybmluZyBpZCwgYSwgYjsKK3NlbGVjdCBpZCwgYSwgYiBmcm9tIGJ5bmFtZV9jb25mbGljdCBv cmRlciBieSBpZDsKK2Ryb3AgdGFibGUgYnluYW1lX2NvbmZsaWN0OwotLSAKMi40My4wCgo= --00000000000086252a0655b2f06e--