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 1w5Itk-0036xP-1u for pgsql-hackers@arkaria.postgresql.org; Wed, 25 Mar 2026 07:43:28 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1w5Iti-00Ckv7-3C for pgsql-hackers@arkaria.postgresql.org; Wed, 25 Mar 2026 07:43:27 +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 1w5Iti-00Ckuy-21 for pgsql-hackers@lists.postgresql.org; Wed, 25 Mar 2026 07:43:27 +0000 Received: from mail-oa1-x36.google.com ([2001:4860:4864:20::36]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1w5Itg-000000011mD-1wOv for pgsql-hackers@lists.postgresql.org; Wed, 25 Mar 2026 07:43:26 +0000 Received: by mail-oa1-x36.google.com with SMTP id 586e51a60fabf-409de4132b5so2759715fac.1 for ; Wed, 25 Mar 2026 00:43:24 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1774424603; cv=none; d=google.com; s=arc-20240605; b=VhOMeRzP7e0RhuZzGWntdIvaB1BceYnnMLIWrS2KtQbKQDqFYShh+toiQCXQkJm0Ic cNko8HLsVPRGIz0BWweKsmU8qQvg2ujivr+xyEX29oyn0xCzucAaC9f3Ir9H9lR6j5hv wguVebrlIXRYkpvq9s5fKZUJ3AiOeTm5Xz69ggaAjl0/YQ3TSlpbsiaUyyxyEvapBAFl OovC8c16BlFGf9qRJr5UGQWaF0AjwfNF/+nhFYVpBKoDe7glYGD1ytu5z32DjHmpyFeT aU2fkgVWe2OVkS590IRB5Qhv3Zcu2WBk3nTSsptgXQm4MbLJaPqBBm04wMDR8AVUCU82 95Gw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20240605; h=to:subject:message-id:date:from:in-reply-to:references:mime-version :dkim-signature; bh=rXndUGugHcONYegNDhtTNyUs739/JYvDfOJmJcjF/uk=; fh=pmBMntjmyx6XYOkmIq7jCPL8+6Ex8nEv6KGKxj4+8uc=; b=kB1QK1IpJGUFQosVsumfiERdabDQnkwvYAlPXGEEAO3hy0EoZronO5+q6KpXafHLww P+AK5XIgAaiJVV/4pBtLA9Fk7kUTlEHhmbnOnrwl6wMzmGJBgkqjv7IP0waa9NE9rM78 egtrLHvonvTErP59o95DypqZS4V+1GxWPqOz3VqwARCqe2Js4ireVM4A70dOP/Yd0qvC pCAx8HPeup5pZtzWhekHun5isuKxTvZqufnkKxDhFo6ReszvZ/fJQClNmVNazG+vNmPF zQ/6zVwmvEiv2zvXA/qaGL+AO5ubvMhn6MbWr+NcJQ8yiHv71O7v/DVa/8mQE8TSAzX+ qPpw==; 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=20251104; t=1774424603; x=1775029403; darn=lists.postgresql.org; h=to:subject:message-id:date:from:in-reply-to:references:mime-version :from:to:cc:subject:date:message-id:reply-to; bh=rXndUGugHcONYegNDhtTNyUs739/JYvDfOJmJcjF/uk=; b=RTTEkPrEOgomEt0vGcjrVmL3yJ62us8oxILQh+DvQ097GO/jaIbAu88kTWDTZGqLoL VYFWEpdKc34Qki6xmIsBu0tqW5bR1chmMwdKL1h9sDqtuO1zCS2hhalnNExfm4W4BdnO 07d/6uIChPlc1f+Tmx8SbEH6rqGxLUVyZDJjMuSmBDGJXp/zpjAJmkbnFfgR+rYyz5Of F29Z8aagzt2TV2xQuzN6h12Mx61tOmxJQB/+9rbMwJdHJD/f+HM6JDSkQ6IkxhX0PzwK MGO7j/DmyBJSXL/NVF9+bRQIbGiS0JQeONS+/VVZW5DXBAko/fZzeiZjXtzATN9a0ap9 OEIg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1774424603; x=1775029403; h=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=rXndUGugHcONYegNDhtTNyUs739/JYvDfOJmJcjF/uk=; b=I95aEYBI+bylQIEep0eQJZkKnlSrIoTLeijdjr5HDz+LlliwlpxGfI0jv/yDhqoyAl ItklLYPOYC4IPEhbcimuLoCUlgR19KfvBo4w//Oy9gxHoevCI2Bw9/t5Mnm1YbeakVZf T5Gvj4u/A+e3Z4XqxENR31U4pY87dZyPeh/TuDSwS+s2Xl5qDS2impKwwiQdl6cXrQWN k3/uGZPE3CbVGFpbGtD3yZWjWrFe0lbb7c+iXyHijkAteMSFKpQb91wo6j06GgWzEJH9 XW2cYWc5wWmXoLUAWF/wTBd2uS+MwohUsyvLiwqzycU5O0AsNUO5EwXCPOf1RdJXp1k1 vCFA== X-Gm-Message-State: AOJu0YyzMz8qy+KweeY4ladKU5zgPPfX6YduUhp0erIYeBz46wJYl7NU j1xADLyiWQw7DiT0vsqtXvh5BXIAsquiHXXxOsR6gQonbRTe6bKAFtfyh/TDW2KZMbw9QoeeQt+ CiKJ50VQMHWF7xI59L5Et3lOduQ6mZpzdgsEmCZU= X-Gm-Gg: ATEYQzyaRbJpb7l5BmdGIQEo87ocsSSdO5ezd6ZiaAuJKDJr5+3/uBjQIEG2vWJAPd0 PCLbGvsRN7oWP5A8JsrObZ13wsr7wZVrSxhQY7wOhhBqfXYrTzXBiQPlgqeZhRt1GSknjKsuwSc MGuZfT4k1AUXBQrJkUFf32m+gILT959zKZNwuUyAfmIoy+VL2aouvwLvwrSY3+CZV9mVKHYxzwl vS6AH/ZPCu44UyRE9s1aJp0ydO/PM1GGUcMeCrGL2LoPB+j1fpcb3k9484iPgW30FGQRqoH02zd dJvR1vNr X-Received: by 2002:a05:6870:9625:b0:415:ea02:9632 with SMTP id 586e51a60fabf-41ca703dcd9mr1366565fac.20.1774424602865; Wed, 25 Mar 2026 00:43:22 -0700 (PDT) MIME-Version: 1.0 References: In-Reply-To: From: Richard Guo Date: Wed, 25 Mar 2026 16:43:11 +0900 X-Gm-Features: AaiRm538FkpQaEPZarjFIC-q2sst1-h28BzlG8QZURaV550m-7iiz8ZVzf2fH7M Message-ID: Subject: Re: Convert ALL SubLinks to ANY SubLinks To: Pg Hackers Content-Type: multipart/mixed; boundary="000000000000229094064dd46cdb" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000229094064dd46cdb Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Thu, Feb 26, 2026 at 4:11=E2=80=AFPM Richard Guo wrote: > Attached is a draft patch illustrating the idea. Any thoughts or > interest in this transformation? Here is an updated version of the patch, with better comments and a commit message. Considering where we are in the current release cycle, I am targeting this for v20. - Richard --000000000000229094064dd46cdb Content-Type: application/octet-stream; name="v2-0001-Convert-ALL-SubLinks-to-ANY-SubLinks.patch" Content-Disposition: attachment; filename="v2-0001-Convert-ALL-SubLinks-to-ANY-SubLinks.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mn5qkysz0 RnJvbSBhZTFlZjZiOGY1YWQ4YjRiYmJmMjhiZjg1NjVhMDg4ZmY5Yjg1NGRlIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBSaWNoYXJkIEd1byA8Z3VvZmVuZ2xpbnV4QGdtYWlsLmNvbT4K RGF0ZTogVGh1LCAyNiBGZWIgMjAyNiAwOTo1MTo1NyArMDkwMApTdWJqZWN0OiBbUEFUQ0ggdjJd IENvbnZlcnQgQUxMIFN1YkxpbmtzIHRvIEFOWSBTdWJMaW5rcwoKUG9zdGdyZVNRTCdzIHBsYW5u ZXIgaXMgaGlnaGx5IG9wdGltaXplZCBmb3IgQU5ZIFN1YkxpbmtzLCBvZmZlcmluZwpmZWF0dXJl cyBsaWtlIGhhc2hlZCBTdWJQbGFucyBhbmQgdGhlIGFiaWxpdHkgdG8gZmxhdHRlbiB0aGVtIGlu dG8Kc2VtaWpvaW5zIG9yIGFudGktc2VtaWpvaW5zLiAgQUxMIFN1YkxpbmtzLCBob3dldmVyLCBo YXZlIGhpc3RvcmljYWxseQpiZWVuIGV4Y2x1ZGVkIGZyb20gdGhlc2Ugb3B0aW1pemF0aW9ucy4K ClRoaXMgcGF0Y2ggdGVhY2hlcyB0aGUgcGxhbm5lciB0byBjb252ZXJ0IEFMTCBTdWJMaW5rcyB0 byBBTlkgU3ViTGlua3MKYnkgYXBwbHlpbmcgb3BlcmF0b3IgbmVnYXRpb24gYW5kIERlIE1vcmdh bidzIGxhd3MuICBTcGVjaWZpY2FsbHk6CgogIGZvbyBvcCBBTEwgKHN1Yi1TRUxFQ1QpID0+IE5P VCAoZm9vIG5lZ2F0b3Jfb3AgQU5ZIChzdWItU0VMRUNUKSkKICBOT1QgKGZvbyBvcCBBTEwgKHN1 Yi1TRUxFQ1QpKSA9PiBmb28gbmVnYXRvcl9vcCBBTlkgKHN1Yi1TRUxFQ1QpCgpUaGlzIHVubG9j a3MgYSByaWNoZXIgc2V0IG9mIG9wdGltaXphdGlvbnMuICBBdCBhIG1pbmltdW0sIHRoaXMgbWFr ZXMKaXQgcG9zc2libGUgZm9yIHRoZSBleGVjdXRvciB0byBldmFsdWF0ZSB0aGUgdW5mbGF0dGVu ZWQgc3VibGluayB1c2luZwphIGhhc2hlZCBTdWJQbGFuLiAgRnVydGhlcm1vcmUsIGl0IGV4cG9z ZXMgdGhlIHN1YmxpbmsgdG8gdGhlIHN0YW5kYXJkCnB1bGwtdXAgbWFjaGluZXJ5LCBwb3RlbnRp YWxseSBmbGF0dGVuaW5nIGl0IGludG8gYSBzZW1pam9pbiBvcgphbnRpLXNlbWlqb2luLgoKSW4g dGhlIHdvcnN0LWNhc2Ugc2NlbmFyaW8gd2hlcmUgdGhlIHRyYW5zZm9ybWVkIEFOWSBzdWJsaW5r IGNhbm5vdCBiZQpwdWxsZWQgdXAgYW5kIGNhbm5vdCBiZSBoYXNoZWQsIGV4ZWN1dGlvbiBmYWxs cyBiYWNrIHRvIGEgbmVzdGVkLWxvb3AKU3ViUGxhbi4gIFBlcmZvcm1hbmNlIGluIHRoaXMgc2Nl bmFyaW8gaXMgZWZmZWN0aXZlbHkgaWRlbnRpY2FsIHRvIHRoZQpsZWdhY3kgQUxMIFN1YlBsYW4s IGVuc3VyaW5nIG5vIHJlZ3Jlc3Npb25zLiAgQmVjYXVzZSB0aGUgb3BlcmF0b3IgaXMKbmVnYXRl ZCwgdGhlIEFOWSBzdWJwbGFuIHdpbGwgc2hvcnQtY2lyY3VpdCBvbiB0aGUgZXhhY3Qgc2FtZSBp bm5lcgp0dXBsZSB0aGF0IHRoZSBBTEwgc3VicGxhbiB3b3VsZCBoYXZlIHNob3J0LWNpcmN1aXRl ZCBvbi4gIFRoZSBvbmx5CmFkZGVkIG92ZXJoZWFkIGlzIGEgc2luZ2xlIGJvb2xlYW4gTk9UIGlu dmVyc2lvbiBwZXIgb3V0ZXIgdHVwbGUsCndoaWNoIGlzIG5lZ2xpZ2libGUgY29tcGFyZWQgdG8g dGhlIGNvc3Qgb2YgdGhlIG5lc3RlZC1sb29wIGV4ZWN1dGlvbgppdHNlbGYuCi0tLQogc3JjL2Jh Y2tlbmQvb3B0aW1pemVyL3ByZXAvcHJlcGpvaW50cmVlLmMgfCAxOTggKysrKysrKysrKysrKysr KysrKysrLQogc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9zdWJzZWxlY3Qub3V0ICAgfCAxNjMg KysrKysrKysrKysrKysrKystCiBzcmMvdGVzdC9yZWdyZXNzL3NxbC9zdWJzZWxlY3Quc3FsICAg ICAgICB8ICA3MCArKysrKysrLQogMyBmaWxlcyBjaGFuZ2VkLCA0MjIgaW5zZXJ0aW9ucygrKSwg OSBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcHJlcC9w cmVwam9pbnRyZWUuYyBiL3NyYy9iYWNrZW5kL29wdGltaXplci9wcmVwL3ByZXBqb2ludHJlZS5j CmluZGV4IGQ1ZTEwNDFmZmEzLi4wZDJkM2YxMjFlMSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQv b3B0aW1pemVyL3ByZXAvcHJlcGpvaW50cmVlLmMKKysrIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVy L3ByZXAvcHJlcGpvaW50cmVlLmMKQEAgLTQ0LDYgKzQ0LDcgQEAKICNpbmNsdWRlICJwYXJzZXIv cGFyc2V0cmVlLmgiCiAjaW5jbHVkZSAicmV3cml0ZS9yZXdyaXRlSGFuZGxlci5oIgogI2luY2x1 ZGUgInJld3JpdGUvcmV3cml0ZU1hbmlwLmgiCisjaW5jbHVkZSAidXRpbHMvbHN5c2NhY2hlLmgi CiAjaW5jbHVkZSAidXRpbHMvcmVsLmgiCiAKIApAQCAtMTEzLDYgKzExNCw3IEBAIHN0YXRpYyBO b2RlICpwdWxsX3VwX3N1YmxpbmtzX2pvaW50cmVlX3JlY3Vyc2UoUGxhbm5lckluZm8gKnJvb3Qs IE5vZGUgKmp0bm9kZSwKIHN0YXRpYyBOb2RlICpwdWxsX3VwX3N1YmxpbmtzX3F1YWxfcmVjdXJz ZShQbGFubmVySW5mbyAqcm9vdCwgTm9kZSAqbm9kZSwKIAkJCQkJCQkJCQkgICBOb2RlICoqanRs aW5rMSwgUmVsaWRzIGF2YWlsYWJsZV9yZWxzMSwKIAkJCQkJCQkJCQkgICBOb2RlICoqanRsaW5r MiwgUmVsaWRzIGF2YWlsYWJsZV9yZWxzMik7CitzdGF0aWMgTm9kZSAqbmVnYXRlX3N1Ymxpbmtf dGVzdGV4cHIoTm9kZSAqdGVzdGV4cHIpOwogc3RhdGljIE5vZGUgKnB1bGxfdXBfc3VicXVlcmll c19yZWN1cnNlKFBsYW5uZXJJbmZvICpyb290LCBOb2RlICpqdG5vZGUsCiAJCQkJCQkJCQkJSm9p bkV4cHIgKmxvd2VzdF9vdXRlcl9qb2luLAogCQkJCQkJCQkJCUFwcGVuZFJlbEluZm8gKmNvbnRh aW5pbmdfYXBwZW5kcmVsKTsKQEAgLTYyMiw3ICs2MjQsOSBAQCByZXBsYWNlX2VtcHR5X2pvaW50 cmVlKFF1ZXJ5ICpwYXJzZSkKIC8qCiAgKiBwdWxsX3VwX3N1YmxpbmtzCiAgKgkJQXR0ZW1wdCB0 byBwdWxsIHVwIEFOWSBhbmQgRVhJU1RTIFN1YkxpbmtzIHRvIGJlIHRyZWF0ZWQgYXMKLSAqCQlz ZW1pam9pbnMgb3IgYW50aS1zZW1pam9pbnMuCisgKgkJc2VtaWpvaW5zIG9yIGFudGktc2VtaWpv aW5zLiAgV2UgYWxzbyB0cmFuc2Zvcm0gQUxMIFN1YkxpbmtzCisgKgkJdG8gQU5ZIFN1Ykxpbmtz IGlmIHBvc3NpYmxlIHRvIHVubG9jayBoYXNoZWQgU3ViUGxhbiBleGVjdXRpb24KKyAqCQlhbmQg ZW5hYmxlIHBvdGVudGlhbCBwdWxsLXVwLgogICoKICAqIEEgY2xhdXNlICJmb28gb3AgQU5ZIChz dWItU0VMRUNUKSIgY2FuIGJlIHByb2Nlc3NlZCBieSBwdWxsaW5nIHRoZQogICogc3ViLVNFTEVD VCB1cCB0byBiZWNvbWUgYSByYW5nZXRhYmxlIGVudHJ5IGFuZCB0cmVhdGluZyB0aGUgaW1wbGll ZApAQCAtNjM5LDYgKzY0MywyMCBAQCByZXBsYWNlX2VtcHR5X2pvaW50cmVlKFF1ZXJ5ICpwYXJz ZSkKICAqIFVuZGVyIHNpbWlsYXIgY29uZGl0aW9ucywgRVhJU1RTIGFuZCBOT1QgRVhJU1RTIGNs YXVzZXMgY2FuIGJlIGhhbmRsZWQKICAqIGJ5IHB1bGxpbmcgdXAgdGhlIHN1Yi1TRUxFQ1QgYW5k IGNyZWF0aW5nIGEgc2VtaWpvaW4gb3IgYW50aS1zZW1pam9pbi4KICAqCisgKiBBIG5lZ2F0ZWQg Y2xhdXNlICJOT1QgKGZvbyBvcCBBTlkgKHN1Yi1TRUxFQ1QpKSIgY2FuIGJlIGhhbmRsZWQKKyAq IHNpbWlsYXJseSBieSBjcmVhdGluZyBhbiBhbnRpLXNlbWlqb2luLiAgSG93ZXZlciwgdGhpcyB0 cmFuc2Zvcm1hdGlvbgorICogaXMgbXVjaCBtb3JlIHJlc3RyaWN0ZWQgdGhhbiBhIHBvc2l0aXZl IEFOWSBwdWxsLXVwOiB0byBzYWZlbHkgYnlwYXNzCisgKiBzdGFuZGFyZCBTUUwncyAzLXZhbHVl ZCBsb2dpYywgd2UgbXVzdCByaWdpZGx5IHByb3ZlIHRoYXQgYm90aCB0aGUKKyAqIG91dGVyIHRl c3QgZXhwcmVzc2lvbiBhbmQgdGhlIHN1YnF1ZXJ5J3Mgb3V0cHV0IGV4cHJlc3Npb24gYXJlIHN0 cmljdGx5CisgKiBub24tbnVsbGFibGUsIGFuZCB0aGF0IHRoZSBvcGVyYXRvciBpdHNlbGYgY2Fu bm90IHJldHVybiBOVUxMIGZvcgorICogbm9uLW51bGwgaW5wdXRzLgorICoKKyAqIEEgY2xhdXNl ICJmb28gb3AgQUxMIChzdWItU0VMRUNUKSIgY2FuIGJlIGxvZ2ljYWxseSByZXdyaXR0ZW4gaW50 byAiTk9UCisgKiAoZm9vIG5lZ2F0b3Jfb3AgQU5ZIChzdWItU0VMRUNUKSkiLiAgVGhpcyBjb252 ZXJzaW9uIG1ha2VzIGl0IHBvc3NpYmxlCisgKiBmb3IgdGhlIGV4ZWN1dG9yIHRvIGV2YWx1YXRl IHRoZSB1bmZsYXR0ZW5lZCBzdWJsaW5rIHVzaW5nIGEgaGFzaGVkCisgKiBTdWJQbGFuLiAgRnVy dGhlcm1vcmUsIGl0IGV4cG9zZXMgdGhlIHN1YmxpbmsgdG8gdGhlIHN0YW5kYXJkIHB1bGwtdXAK KyAqIG1hY2hpbmVyeSwgcG90ZW50aWFsbHkgZmxhdHRlbmluZyBpdCBpbnRvIGEgc2VtaWpvaW4g b3IgYW50aS1zZW1pam9pbi4KKyAqCiAgKiBUaGlzIHJvdXRpbmUgc2VhcmNoZXMgZm9yIHN1Y2gg Y2xhdXNlcyBhbmQgZG9lcyB0aGUgbmVjZXNzYXJ5IHBhcnNldHJlZQogICogdHJhbnNmb3JtYXRp b25zIGlmIGFueSBhcmUgZm91bmQuCiAgKgpAQCAtODQ0LDcgKzg2Miw3IEBAIHB1bGxfdXBfc3Vi bGlua3NfcXVhbF9yZWN1cnNlKFBsYW5uZXJJbmZvICpyb290LCBOb2RlICpub2RlLAogCQlKb2lu RXhwciAgICpqOwogCQlSZWxpZHMJCWNoaWxkX3JlbHM7CiAKLQkJLyogSXMgaXQgYSBjb252ZXJ0 aWJsZSBBTlkgb3IgRVhJU1RTIGNsYXVzZT8gKi8KKwkJLyogSXMgaXQgYSBjb252ZXJ0aWJsZSBB TlksIEVYSVNUUyBvciBBTEwgY2xhdXNlPyAqLwogCQlpZiAoc3VibGluay0+c3ViTGlua1R5cGUg PT0gQU5ZX1NVQkxJTkspCiAJCXsKIAkJCVNjYWxhckFycmF5T3BFeHByICpzYW9wOwpAQCAtOTY2 LDEyICs5ODQsNDUgQEAgcHVsbF91cF9zdWJsaW5rc19xdWFsX3JlY3Vyc2UoUGxhbm5lckluZm8g KnJvb3QsIE5vZGUgKm5vZGUsCiAJCQkJcmV0dXJuIE5VTEw7CiAJCQl9CiAJCX0KKwkJZWxzZSBp ZiAoc3VibGluay0+c3ViTGlua1R5cGUgPT0gQUxMX1NVQkxJTkspCisJCXsKKwkJCU5vZGUJICAg Km5lZ2F0ZWRfZXhwciA9IG5lZ2F0ZV9zdWJsaW5rX3Rlc3RleHByKHN1YmxpbmstPnRlc3RleHBy KTsKKworCQkJaWYgKG5lZ2F0ZWRfZXhwciAhPSBOVUxMKQorCQkJeworCQkJCVN1YkxpbmsgICAg KmFueV9zdWJsaW5rOworCQkJCU5vZGUJICAgKm5vdF9leHByOworCisJCQkJYW55X3N1Ymxpbmsg PSBtYWtlTm9kZShTdWJMaW5rKTsKKwkJCQlhbnlfc3VibGluay0+c3ViTGlua1R5cGUgPSBBTllf U1VCTElOSzsKKwkJCQlhbnlfc3VibGluay0+c3ViTGlua0lkID0gMDsKKwkJCQlhbnlfc3VibGlu ay0+dGVzdGV4cHIgPSBuZWdhdGVkX2V4cHI7CisJCQkJYW55X3N1YmxpbmstPm9wZXJOYW1lID0g c3VibGluay0+b3Blck5hbWU7CisJCQkJYW55X3N1YmxpbmstPnN1YnNlbGVjdCA9IHN1Ymxpbmst PnN1YnNlbGVjdDsKKwkJCQlhbnlfc3VibGluay0+bG9jYXRpb24gPSBzdWJsaW5rLT5sb2NhdGlv bjsKKwkJCQkvKiBYWFggc2hvdWxkIHdlIHVwZGF0ZSBvcGVyTmFtZSBhY2NvcmRpbmdseSAqLwor CisJCQkJbm90X2V4cHIgPSAoTm9kZSAqKSBtYWtlQm9vbEV4cHIoTk9UX0VYUFIsCisJCQkJCQkJ CQkJCQkgbGlzdF9tYWtlMShhbnlfc3VibGluayksCisJCQkJCQkJCQkJCQkgYW55X3N1Ymxpbmst PmxvY2F0aW9uKTsKKworCQkJCXJldHVybiBwdWxsX3VwX3N1YmxpbmtzX3F1YWxfcmVjdXJzZShy b290LAorCQkJCQkJCQkJCQkJCSBub3RfZXhwciwKKwkJCQkJCQkJCQkJCQkganRsaW5rMSwKKwkJ CQkJCQkJCQkJCQkgYXZhaWxhYmxlX3JlbHMxLAorCQkJCQkJCQkJCQkJCSBqdGxpbmsyLAorCQkJ CQkJCQkJCQkJCSBhdmFpbGFibGVfcmVsczIpOworCQkJfQorCQl9CiAJCS8qIEVsc2UgcmV0dXJu IGl0IHVubW9kaWZpZWQgKi8KIAkJcmV0dXJuIG5vZGU7CiAJfQogCWlmIChpc19ub3RjbGF1c2Uo bm9kZSkpCiAJewotCQkvKiBJZiB0aGUgaW1tZWRpYXRlIGFyZ3VtZW50IG9mIE5PVCBpcyBBTlkg b3IgRVhJU1RTLCB0cnkgdG8gY29udmVydCAqLworCQkvKgorCQkgKiBJZiB0aGUgaW1tZWRpYXRl IGFyZ3VtZW50IG9mIE5PVCBpcyBBTlksIEVYSVNUUyBvciBBTEwsIHRyeSB0bworCQkgKiBjb252 ZXJ0LgorCQkgKi8KIAkJU3ViTGluayAgICAqc3VibGluayA9IChTdWJMaW5rICopIGdldF9ub3Rj bGF1c2VhcmcoKEV4cHIgKikgbm9kZSk7CiAJCUpvaW5FeHByICAgKmo7CiAJCVJlbGlkcwkJY2hp bGRfcmVsczsKQEAgLTEwODYsNiArMTEzNywzMSBAQCBwdWxsX3VwX3N1YmxpbmtzX3F1YWxfcmVj dXJzZShQbGFubmVySW5mbyAqcm9vdCwgTm9kZSAqbm9kZSwKIAkJCQkJcmV0dXJuIE5VTEw7CiAJ CQkJfQogCQkJfQorCQkJZWxzZSBpZiAoc3VibGluay0+c3ViTGlua1R5cGUgPT0gQUxMX1NVQkxJ TkspCisJCQl7CisJCQkJTm9kZQkgICAqbmVnYXRlZF9leHByID0gbmVnYXRlX3N1YmxpbmtfdGVz dGV4cHIoc3VibGluay0+dGVzdGV4cHIpOworCisJCQkJaWYgKG5lZ2F0ZWRfZXhwciAhPSBOVUxM KQorCQkJCXsKKwkJCQkJU3ViTGluayAgICAqYW55X3N1Ymxpbms7CisKKwkJCQkJYW55X3N1Ymxp bmsgPSBtYWtlTm9kZShTdWJMaW5rKTsKKwkJCQkJYW55X3N1YmxpbmstPnN1YkxpbmtUeXBlID0g QU5ZX1NVQkxJTks7CisJCQkJCWFueV9zdWJsaW5rLT5zdWJMaW5rSWQgPSAwOworCQkJCQlhbnlf c3VibGluay0+dGVzdGV4cHIgPSBuZWdhdGVkX2V4cHI7CisJCQkJCWFueV9zdWJsaW5rLT5vcGVy TmFtZSA9IHN1YmxpbmstPm9wZXJOYW1lOworCQkJCQlhbnlfc3VibGluay0+c3Vic2VsZWN0ID0g c3VibGluay0+c3Vic2VsZWN0OworCQkJCQlhbnlfc3VibGluay0+bG9jYXRpb24gPSBzdWJsaW5r LT5sb2NhdGlvbjsKKwkJCQkJLyogWFhYIHNob3VsZCB3ZSB1cGRhdGUgb3Blck5hbWUgYWNjb3Jk aW5nbHkgKi8KKworCQkJCQlyZXR1cm4gcHVsbF91cF9zdWJsaW5rc19xdWFsX3JlY3Vyc2Uocm9v dCwKKwkJCQkJCQkJCQkJCQkJIChOb2RlICopIGFueV9zdWJsaW5rLAorCQkJCQkJCQkJCQkJCQkg anRsaW5rMSwKKwkJCQkJCQkJCQkJCQkJIGF2YWlsYWJsZV9yZWxzMSwKKwkJCQkJCQkJCQkJCQkJ IGp0bGluazIsCisJCQkJCQkJCQkJCQkJCSBhdmFpbGFibGVfcmVsczIpOworCQkJCX0KKwkJCX0K IAkJfQogCQkvKiBFbHNlIHJldHVybiBpdCB1bm1vZGlmaWVkICovCiAJCXJldHVybiBub2RlOwpA QCAtMTEyMiw2ICsxMTk4LDEyMiBAQCBwdWxsX3VwX3N1YmxpbmtzX3F1YWxfcmVjdXJzZShQbGFu bmVySW5mbyAqcm9vdCwgTm9kZSAqbm9kZSwKIAlyZXR1cm4gbm9kZTsKIH0KIAorLyoKKyAqIG5l Z2F0ZV9zdWJsaW5rX3Rlc3RleHByCisgKgkJQXR0ZW1wdCB0byBsb2dpY2FsbHkgbmVnYXRlIHRo ZSB0ZXN0ZXhwciBvZiBhbiBBTExfU1VCTElOSy4KKyAqCisgKiBUaGlzIGhlbHBlciBpcyB1c2Vk IHRvIHRyYW5zZm9ybSBBTEwgc3VibGlua3MgaW50byBBTlkgc3VibGlua3MuICBJdCByZXR1cm5z CisgKiBhIG5ld2x5IGFsbG9jYXRlZCBuZWdhdGVkIGV4cHJlc3Npb24gdHJlZSwgb3IgTlVMTCBp ZiBuZWdhdGlvbiBpcyBub3QKKyAqIHBvc3NpYmxlLgorICovCitzdGF0aWMgTm9kZSAqCituZWdh dGVfc3VibGlua190ZXN0ZXhwcihOb2RlICp0ZXN0ZXhwcikKK3sKKwlpZiAodGVzdGV4cHIgPT0g TlVMTCkKKwkJcmV0dXJuIE5VTEw7CisJaWYgKElzQSh0ZXN0ZXhwciwgT3BFeHByKSkKKwl7CisJ CS8qIHNpbmdsZS1jb2x1bW4gY29tcGFyaXNvbiAqLworCQlPcEV4cHIJICAgKm9wZXhwciA9IChP cEV4cHIgKikgdGVzdGV4cHI7CisJCU9pZAkJCW5lZ2F0b3IgPSBnZXRfbmVnYXRvcihvcGV4cHIt Pm9wbm8pOworCisJCWlmIChPaWRJc1ZhbGlkKG5lZ2F0b3IpKQorCQl7CisJCQlPcEV4cHIJICAg Km5ld29wZXhwciA9IG1ha2VOb2RlKE9wRXhwcik7CisKKwkJCW5ld29wZXhwci0+b3BubyA9IG5l Z2F0b3I7CisJCQluZXdvcGV4cHItPm9wZnVuY2lkID0gSW52YWxpZE9pZDsKKwkJCW5ld29wZXhw ci0+b3ByZXN1bHR0eXBlID0gb3BleHByLT5vcHJlc3VsdHR5cGU7CisJCQluZXdvcGV4cHItPm9w cmV0c2V0ID0gb3BleHByLT5vcHJldHNldDsKKwkJCW5ld29wZXhwci0+b3Bjb2xsaWQgPSBvcGV4 cHItPm9wY29sbGlkOworCQkJbmV3b3BleHByLT5pbnB1dGNvbGxpZCA9IG9wZXhwci0+aW5wdXRj b2xsaWQ7CisJCQluZXdvcGV4cHItPmFyZ3MgPSBvcGV4cHItPmFyZ3M7CisJCQluZXdvcGV4cHIt PmxvY2F0aW9uID0gb3BleHByLT5sb2NhdGlvbjsKKwkJCXJldHVybiAoTm9kZSAqKSBuZXdvcGV4 cHI7CisJCX0KKwl9CisJZWxzZSBpZiAoaXNfYW5kY2xhdXNlKHRlc3RleHByKSB8fCBpc19vcmNs YXVzZSh0ZXN0ZXhwcikpCisJeworCQkvKiBtdWx0aS1jb2x1bW4gZXF1YWxpdHkgb3IgaW5lcXVh bGl0eSBjaGVja3MgKi8KKwkJQm9vbEV4cHIgICAqYmV4cHIgPSAoQm9vbEV4cHIgKikgdGVzdGV4 cHI7CisJCUxpc3QJICAgKm5hcmdzID0gTklMOworCisJCS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0K KwkJICogQXBwbHkgRGVNb3JnYW4ncyBMYXdzOgorCQkgKgkJKE5PVCAoQU5EIEEgQikpID0+IChP UiAoTk9UIEEpIChOT1QgQikpCisJCSAqCQkoTk9UIChPUiBBIEIpKQk9PiAoQU5EIChOT1QgQSkg KE5PVCBCKSkKKwkJICogaS5lLiwgc3dhcCBBTkQgZm9yIE9SIGFuZCBuZWdhdGUgZWFjaCBzdWJj bGF1c2UuCisJCSAqLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwkJICovCisJCWZvcmVhY2hfcHRyKE5v ZGUsIGFyZywgYmV4cHItPmFyZ3MpCisJCXsKKwkJCU5vZGUJICAgKm5lZ2F0ZWRfYXJnID0gbmVn YXRlX3N1YmxpbmtfdGVzdGV4cHIoYXJnKTsKKworCQkJaWYgKG5lZ2F0ZWRfYXJnID09IE5VTEwp CisJCQkJcmV0dXJuIE5VTEw7CisKKwkJCW5hcmdzID0gbGFwcGVuZChuYXJncywgbmVnYXRlZF9h cmcpOworCQl9CisKKwkJcmV0dXJuIChiZXhwci0+Ym9vbG9wID09IEFORF9FWFBSKSA/CisJCQko Tm9kZSAqKSBtYWtlQm9vbEV4cHIoT1JfRVhQUiwgbmFyZ3MsIGJleHByLT5sb2NhdGlvbikgOgor CQkJKE5vZGUgKikgbWFrZUJvb2xFeHByKEFORF9FWFBSLCBuYXJncywgYmV4cHItPmxvY2F0aW9u KTsKKwl9CisJZWxzZSBpZiAoSXNBKHRlc3RleHByLCBSb3dDb21wYXJlRXhwcikpCisJeworCQkv KiBtdWx0aS1jb2x1bW4gb3JkZXJpbmcgY2hlY2tzICovCisJCVJvd0NvbXBhcmVFeHByICpyY2V4 cHIgPSAoUm93Q29tcGFyZUV4cHIgKikgdGVzdGV4cHI7CisJCVJvd0NvbXBhcmVFeHByICpuZXdy Y2V4cHI7CisJCUxpc3QJICAgKm5lZ2F0ZWRfb3Bub3MgPSBOSUw7CisJCUNvbXBhcmVUeXBlIG5l Z2F0ZWRfY21wdHlwZTsKKworCQlmb3JlYWNoX29pZChvcG5vLCByY2V4cHItPm9wbm9zKQorCQl7 CisJCQlPaWQJCQluZWdhdG9yID0gZ2V0X25lZ2F0b3Iob3Bubyk7CisKKwkJCWlmICghT2lkSXNW YWxpZChuZWdhdG9yKSkKKwkJCQlyZXR1cm4gTlVMTDsKKworCQkJbmVnYXRlZF9vcG5vcyA9IGxh cHBlbmRfb2lkKG5lZ2F0ZWRfb3Bub3MsIG5lZ2F0b3IpOworCQl9CisKKwkJc3dpdGNoIChyY2V4 cHItPmNtcHR5cGUpCisJCXsKKwkJCWNhc2UgQ09NUEFSRV9MVDoKKwkJCQluZWdhdGVkX2NtcHR5 cGUgPSBDT01QQVJFX0dFOworCQkJCWJyZWFrOworCQkJY2FzZSBDT01QQVJFX0xFOgorCQkJCW5l Z2F0ZWRfY21wdHlwZSA9IENPTVBBUkVfR1Q7CisJCQkJYnJlYWs7CisJCQljYXNlIENPTVBBUkVf R0U6CisJCQkJbmVnYXRlZF9jbXB0eXBlID0gQ09NUEFSRV9MVDsKKwkJCQlicmVhazsKKwkJCWNh c2UgQ09NUEFSRV9HVDoKKwkJCQluZWdhdGVkX2NtcHR5cGUgPSBDT01QQVJFX0xFOworCQkJCWJy ZWFrOworCQkJZGVmYXVsdDoKKwkJCQkvKiBFUSBhbmQgTkUgY2FzZXMgYXJlbid0IGFsbG93ZWQg aGVyZSAqLworCQkJCWVsb2coRVJST1IsICJ1bnJlY29nbml6ZWQgY29tcGFyZSB0eXBlOiAlZCIs CisJCQkJCSAoaW50KSByY2V4cHItPmNtcHR5cGUpOworCQkJCW5lZ2F0ZWRfY21wdHlwZSA9IENP TVBBUkVfSU5WQUxJRDsJLyoga2VlcCBjb21waWxlciBxdWlldCAqLworCQkJCWJyZWFrOworCQl9 CisKKwkJbmV3cmNleHByID0gbWFrZU5vZGUoUm93Q29tcGFyZUV4cHIpOworCisJCW5ld3JjZXhw ci0+Y21wdHlwZSA9IG5lZ2F0ZWRfY21wdHlwZTsKKwkJbmV3cmNleHByLT5vcG5vcyA9IG5lZ2F0 ZWRfb3Bub3M7CisJCW5ld3JjZXhwci0+b3BmYW1pbGllcyA9IHJjZXhwci0+b3BmYW1pbGllczsK KwkJbmV3cmNleHByLT5pbnB1dGNvbGxpZHMgPSByY2V4cHItPmlucHV0Y29sbGlkczsKKwkJbmV3 cmNleHByLT5sYXJncyA9IHJjZXhwci0+bGFyZ3M7CisJCW5ld3JjZXhwci0+cmFyZ3MgPSByY2V4 cHItPnJhcmdzOworCisJCXJldHVybiAoTm9kZSAqKSBuZXdyY2V4cHI7CisJfQorCisJcmV0dXJu IE5VTEw7Cit9CisKIC8qCiAgKiBwcmVwcm9jZXNzX2Z1bmN0aW9uX3J0ZXMKICAqCQlDb25zdGFu dC1zaW1wbGlmeSBhbnkgRlVOQ1RJT04gUlRFcyBpbiB0aGUgRlJPTSBjbGF1c2UsIGFuZCB0aGVu CmRpZmYgLS1naXQgYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3N1YnNlbGVjdC5vdXQgYi9z cmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3N1YnNlbGVjdC5vdXQKaW5kZXggMjAwMjM2YTBhNjku LmE0NmM2OGY5ZDFkIDEwMDY0NAotLS0gYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3N1YnNl bGVjdC5vdXQKKysrIGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9zdWJzZWxlY3Qub3V0CkBA IC0zMzI0LDEzICszMzI0LDE2IEBAIFNFTEVDVCB0ZW4gRlJPTSBvbmVrIHQgV0hFUkUgMS4wOjpp bnRlZ2VyIElOICgoVkFMVUVTICgxKSwgKDMpKSk7CiAoMSByb3cpCiAKIC0tCi0tLSBDaGVjayBO T1QgSU4gcGVyZm9ybXMgYW4gQU5USSBKT0lOIHdoZW4gYm90aCB0aGUgb3V0ZXIgcXVlcnkncyBl eHByZXNzaW9ucwotLS0gYW5kIHRoZSBzdWItc2VsZWN0J3Mgb3V0cHV0IGNvbHVtbnMgYXJlIHBy b3ZhYmx5IG5vbi1udWxsYWJsZSwgYW5kIHRoZQotLS0gb3BlcmF0b3IgaXRzZWxmIGNhbm5vdCBy ZXR1cm4gTlVMTCBmb3Igbm9uLW51bGwgaW5wdXRzLgorLS0gVGVzdCBjYXNlcyBmb3IgTk9UIEFO WSB0cmFuc2Zvcm1hdGlvbnMgYW5kIEFMTCB0cmFuc2Zvcm1hdGlvbnMKIC0tCiBCRUdJTjsKIENS RUFURSBURU1QIFRBQkxFIG5vdF9udWxsX3RhYiAoaWQgaW50IE5PVCBOVUxMLCB2YWwgaW50IE5P VCBOVUxMKTsKIENSRUFURSBURU1QIFRBQkxFIG51bGxfdGFiIChpZCBpbnQsIHZhbCBpbnQpOwor LS0KKy0tIENoZWNrIE5PVCBJTiBwZXJmb3JtcyBhbiBBTlRJIEpPSU4gd2hlbiBib3RoIHRoZSBv dXRlciBxdWVyeSdzIGV4cHJlc3Npb25zCistLSBhbmQgdGhlIHN1Yi1zZWxlY3QncyBvdXRwdXQg Y29sdW1ucyBhcmUgcHJvdmFibHkgbm9uLW51bGxhYmxlLCBhbmQgdGhlCistLSBvcGVyYXRvciBp dHNlbGYgY2Fubm90IHJldHVybiBOVUxMIGZvciBub24tbnVsbCBpbnB1dHMuCistLQogLS0gQU5U SSBKT0lOOiBib3RoIHNpZGVzIGFyZSBkZWZpbmVkIE5PVCBOVUxMCiBFWFBMQUlOIChDT1NUUyBP RkYpCiBTRUxFQ1QgKiBGUk9NIG5vdF9udWxsX3RhYgpAQCAtMzc2MSw0ICszNzY0LDE1OCBAQCBX SEVSRSBOT1QgaWQgPz0gQU5ZIChTRUxFQ1QgaWQgRlJPTSBub3RfbnVsbF90YWIpOwogICAgICAg ICAgICAtPiAgU2VxIFNjYW4gb24gbm90X251bGxfdGFiIG5vdF9udWxsX3RhYl8xCiAoNSByb3dz KQogCistLQorLS0gQ2hlY2sgQUxMIFN1YkxpbmsgaXMgY29udmVydGVkIHRvIEFOWSBTdWJMaW5r IGlmIG5lZ2F0ZWQgdGVzdGV4cHIgZXhpc3RzCistLQorLS0gRW5zdXJlIHdlIGdldCBhIGhhc2hl ZCBBTlkgU3ViUGxhbgorRVhQTEFJTiAoQ09TVFMgT0ZGKQorU0VMRUNUICogRlJPTSBub3RfbnVs bF90YWIKK1dIRVJFIGlkIDw+IEFMTCAoU0VMRUNUIGlkIEZST00gbnVsbF90YWIpOworICAgICAg ICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAgIAorLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQor IFNlcSBTY2FuIG9uIG5vdF9udWxsX3RhYgorICAgRmlsdGVyOiAoTk9UIChBTlkgKGlkID0gKGhh c2hlZCBTdWJQbGFuIGFueV8xKS5jb2wxKSkpCisgICBTdWJQbGFuIGFueV8xCisgICAgIC0+ICBT ZXEgU2NhbiBvbiBudWxsX3RhYgorKDQgcm93cykKKworLS0gRW5zdXJlIHdlIGdldCBhIGhhc2hl ZCBBTlkgU3ViUGxhbgorRVhQTEFJTiAoQ09TVFMgT0ZGKQorU0VMRUNUICogRlJPTSBub3RfbnVs bF90YWIKK1dIRVJFIChpZCwgdmFsKSA8PiBBTEwgKFNFTEVDVCBpZCwgdmFsIEZST00gbnVsbF90 YWIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkg UExBTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIFNlcSBTY2FuIG9uIG5vdF9u dWxsX3RhYgorICAgRmlsdGVyOiAoTk9UIChBTlkgKChpZCA9IChoYXNoZWQgU3ViUGxhbiBhbnlf MSkuY29sMSkgQU5EICh2YWwgPSAoaGFzaGVkIFN1YlBsYW4gYW55XzEpLmNvbDIpKSkpCisgICBT dWJQbGFuIGFueV8xCisgICAgIC0+ICBTZXEgU2NhbiBvbiBudWxsX3RhYgorKDQgcm93cykKKwor LS0gRW5zdXJlIHdlIGdldCBhbiBBTlkgU3ViUGxhbgorRVhQTEFJTiAoQ09TVFMgT0ZGKQorU0VM RUNUICogRlJPTSBub3RfbnVsbF90YWIKK1dIRVJFIChpZCwgdmFsKSA+IEFMTCAoU0VMRUNUIGlk LCB2YWwgRlJPTSBudWxsX3RhYik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAor LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBTZXEgU2NhbiBvbiBub3RfbnVsbF90 YWIKKyAgIEZpbHRlcjogKE5PVCAoQU5ZIChST1coaWQsIHZhbCkgPD0gUk9XKChTdWJQbGFuIGFu eV8xKS5jb2wxLCAoU3ViUGxhbiBhbnlfMSkuY29sMikpKSkKKyAgIFN1YlBsYW4gYW55XzEKKyAg ICAgLT4gIE1hdGVyaWFsaXplCisgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBudWxsX3RhYgor KDUgcm93cykKKworLS0gRW5zdXJlIHdlIGdldCBhbiBhbnRpLWpvaW4KK0VYUExBSU4gKENPU1RT IE9GRikKK1NFTEVDVCAqIEZST00gbm90X251bGxfdGFiCitXSEVSRSBpZCA8PiBBTEwgKFNFTEVD VCBpZCBGUk9NIG5vdF9udWxsX3RhYik7CisgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFO ICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBIYXNoIEFudGkgSm9pbgorICAgSGFzaCBDb25kOiAobm90 X251bGxfdGFiLmlkID0gbm90X251bGxfdGFiXzEuaWQpCisgICAtPiAgU2VxIFNjYW4gb24gbm90 X251bGxfdGFiCisgICAtPiAgSGFzaAorICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIG5vdF9udWxs X3RhYiBub3RfbnVsbF90YWJfMQorKDUgcm93cykKKworLS0gRW5zdXJlIHdlIGdldCBhbiBhbnRp LWpvaW4KK0VYUExBSU4gKENPU1RTIE9GRikKK1NFTEVDVCAqIEZST00gbm90X251bGxfdGFiCitX SEVSRSAoaWQsIHZhbCkgPD4gQUxMIChTRUxFQ1QgaWQsIHZhbCBGUk9NIG5vdF9udWxsX3RhYik7 CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIE1lcmdlIEFudGkgSm9pbgorICAgTWVy Z2UgQ29uZDogKChub3RfbnVsbF90YWIuaWQgPSBub3RfbnVsbF90YWJfMS5pZCkgQU5EIChub3Rf bnVsbF90YWIudmFsID0gbm90X251bGxfdGFiXzEudmFsKSkKKyAgIC0+ICBTb3J0CisgICAgICAg ICBTb3J0IEtleTogbm90X251bGxfdGFiLmlkLCBub3RfbnVsbF90YWIudmFsCisgICAgICAgICAt PiAgU2VxIFNjYW4gb24gbm90X251bGxfdGFiCisgICAtPiAgU29ydAorICAgICAgICAgU29ydCBL ZXk6IG5vdF9udWxsX3RhYl8xLmlkLCBub3RfbnVsbF90YWJfMS52YWwKKyAgICAgICAgIC0+ICBT ZXEgU2NhbiBvbiBub3RfbnVsbF90YWIgbm90X251bGxfdGFiXzEKKyg4IHJvd3MpCisKKy0tIEVu c3VyZSB3ZSBnZXQgYW4gYW50aS1qb2luCitFWFBMQUlOIChDT1NUUyBPRkYpCitTRUxFQ1QgKiBG Uk9NIG5vdF9udWxsX3RhYgorV0hFUkUgKGlkLCB2YWwpID4gQUxMIChTRUxFQ1QgaWQsIHZhbCBG Uk9NIG5vdF9udWxsX3RhYik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t CisgTmVzdGVkIExvb3AgQW50aSBKb2luCisgICBKb2luIEZpbHRlcjogKFJPVyhub3RfbnVsbF90 YWIuaWQsIG5vdF9udWxsX3RhYi52YWwpIDw9IFJPVyhub3RfbnVsbF90YWJfMS5pZCwgbm90X251 bGxfdGFiXzEudmFsKSkKKyAgIC0+ICBTZXEgU2NhbiBvbiBub3RfbnVsbF90YWIKKyAgIC0+ICBN YXRlcmlhbGl6ZQorICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIG5vdF9udWxsX3RhYiBub3RfbnVs bF90YWJfMQorKDUgcm93cykKKworLS0gRW5zdXJlIHdlIGdldCBhIHNlbWktam9pbgorRVhQTEFJ TiAoQ09TVFMgT0ZGKQorU0VMRUNUICogRlJPTSBudWxsX3RhYgorV0hFUkUgTk9UIGlkIDw+IEFM TCAoU0VMRUNUIGlkIEZST00gbnVsbF90YWIpOworICAgICAgICAgICAgICAgICAgICBRVUVSWSBQ TEFOICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBIYXNoIEpvaW4KKyAgIEhhc2ggQ29uZDogKG51bGxfdGFi LmlkID0gbnVsbF90YWJfMS5pZCkKKyAgIC0+ICBTZXEgU2NhbiBvbiBudWxsX3RhYgorICAgLT4g IEhhc2gKKyAgICAgICAgIC0+ICBIYXNoQWdncmVnYXRlCisgICAgICAgICAgICAgICBHcm91cCBL ZXk6IG51bGxfdGFiXzEuaWQKKyAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBudWxsX3Rh YiBudWxsX3RhYl8xCisoNyByb3dzKQorCistLSBFbnN1cmUgd2UgZ2V0IGEgaGFzaGVkIEFOWSBT dWJQbGFuCitFWFBMQUlOIChDT1NUUyBPRkYpCitTRUxFQ1QgKiBGUk9NIG51bGxfdGFiIHQxCitM RUZUIEpPSU4gbnVsbF90YWIgdDIKK09OIE5PVCB0MS5pZCA8PiBBTEwgKFNFTEVDVCBpZCBGUk9N IG51bGxfdGFiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAg ICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgTmVzdGVkIExvb3AgTGVmdCBKb2luCisgICBKb2luIEZp bHRlcjogKEFOWSAodDEuaWQgPSAoaGFzaGVkIFN1YlBsYW4gYW55XzEpLmNvbDEpKQorICAgLT4g IFNlcSBTY2FuIG9uIG51bGxfdGFiIHQxCisgICAtPiAgTWF0ZXJpYWxpemUKKyAgICAgICAgIC0+ ICBTZXEgU2NhbiBvbiBudWxsX3RhYiB0MgorICAgU3ViUGxhbiBhbnlfMQorICAgICAtPiAgU2Vx IFNjYW4gb24gbnVsbF90YWIKKyg3IHJvd3MpCisKKy0tIEVuc3VyZSB3ZSBnZXQgYSBzZW1pLWpv aW4KK0VYUExBSU4gKENPU1RTIE9GRikKK1NFTEVDVCAqIEZST00gbnVsbF90YWIKK1dIRVJFIE5P VCAoaWQsIHZhbCkgPD4gQUxMIChTRUxFQ1QgaWQsIHZhbCBGUk9NIG51bGxfdGFiKTsKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBIYXNoIEpv aW4KKyAgIEhhc2ggQ29uZDogKChudWxsX3RhYi5pZCA9IG51bGxfdGFiXzEuaWQpIEFORCAobnVs bF90YWIudmFsID0gbnVsbF90YWJfMS52YWwpKQorICAgLT4gIFNlcSBTY2FuIG9uIG51bGxfdGFi CisgICAtPiAgSGFzaAorICAgICAgICAgLT4gIEhhc2hBZ2dyZWdhdGUKKyAgICAgICAgICAgICAg IEdyb3VwIEtleTogbnVsbF90YWJfMS5pZCwgbnVsbF90YWJfMS52YWwKKyAgICAgICAgICAgICAg IC0+ICBTZXEgU2NhbiBvbiBudWxsX3RhYiBudWxsX3RhYl8xCisoNyByb3dzKQorCistLSBFbnN1 cmUgd2UgZ2V0IGEgc2VtaS1qb2luCitFWFBMQUlOIChDT1NUUyBPRkYpCitTRUxFQ1QgKiBGUk9N IG51bGxfdGFiCitXSEVSRSBOT1QgKGlkLCB2YWwpID4gQUxMIChTRUxFQ1QgaWQsIHZhbCBGUk9N IG51bGxfdGFiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkg UExBTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tCisgTmVzdGVkIExvb3AgU2VtaSBKb2luCisgICBKb2luIEZpbHRl cjogKFJPVyhudWxsX3RhYi5pZCwgbnVsbF90YWIudmFsKSA8PSBST1cobnVsbF90YWJfMS5pZCwg bnVsbF90YWJfMS52YWwpKQorICAgLT4gIFNlcSBTY2FuIG9uIG51bGxfdGFiCisgICAtPiAgTWF0 ZXJpYWxpemUKKyAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBudWxsX3RhYiBudWxsX3RhYl8xCiso NSByb3dzKQorCistLSBFbnN1cmUgd2UgZ2V0IEFMTCBTdWJQbGFuLCBhcyB0aGUgb3BlcmF0b3Ig aGFzIG5vIG5lZ2F0b3IKK0VYUExBSU4gKENPU1RTIE9GRikKK1NFTEVDVCAqIEZST00gbm90X251 bGxfdGFiCitXSEVSRSBpZCA/PSBBTEwgKFNFTEVDVCBpZCBGUk9NIG5vdF9udWxsX3RhYik7Cisg ICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAgCist LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisg U2VxIFNjYW4gb24gbm90X251bGxfdGFiCisgICBGaWx0ZXI6IChBTEwgKGlkID89IChTdWJQbGFu IGFsbF8xKS5jb2wxKSkKKyAgIFN1YlBsYW4gYWxsXzEKKyAgICAgLT4gIE1hdGVyaWFsaXplCisg ICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBub3RfbnVsbF90YWIgbm90X251bGxfdGFiXzEKKyg1 IHJvd3MpCisKIFJPTExCQUNLOwpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVncmVzcy9zcWwvc3Vi c2VsZWN0LnNxbCBiL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL3N1YnNlbGVjdC5zcWwKaW5kZXggNGNk MDE2ZjRhYzMuLjU4ZDk5M2YwNDIyIDEwMDY0NAotLS0gYS9zcmMvdGVzdC9yZWdyZXNzL3NxbC9z dWJzZWxlY3Quc3FsCisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL3N1YnNlbGVjdC5zcWwKQEAg LTE0NTAsOSArMTQ1MCw3IEBAIEVYUExBSU4gKENPU1RTIE9GRikKIFNFTEVDVCB0ZW4gRlJPTSBv bmVrIHQgV0hFUkUgMS4wOjppbnRlZ2VyIElOICgoVkFMVUVTICgxKSwgKDMpKSk7CiAKIC0tCi0t LSBDaGVjayBOT1QgSU4gcGVyZm9ybXMgYW4gQU5USSBKT0lOIHdoZW4gYm90aCB0aGUgb3V0ZXIg cXVlcnkncyBleHByZXNzaW9ucwotLS0gYW5kIHRoZSBzdWItc2VsZWN0J3Mgb3V0cHV0IGNvbHVt bnMgYXJlIHByb3ZhYmx5IG5vbi1udWxsYWJsZSwgYW5kIHRoZQotLS0gb3BlcmF0b3IgaXRzZWxm IGNhbm5vdCByZXR1cm4gTlVMTCBmb3Igbm9uLW51bGwgaW5wdXRzLgorLS0gVGVzdCBjYXNlcyBm b3IgTk9UIEFOWSB0cmFuc2Zvcm1hdGlvbnMgYW5kIEFMTCB0cmFuc2Zvcm1hdGlvbnMKIC0tCiAK IEJFR0lOOwpAQCAtMTQ2MCw2ICsxNDU4LDEyIEBAIEJFR0lOOwogQ1JFQVRFIFRFTVAgVEFCTEUg bm90X251bGxfdGFiIChpZCBpbnQgTk9UIE5VTEwsIHZhbCBpbnQgTk9UIE5VTEwpOwogQ1JFQVRF IFRFTVAgVEFCTEUgbnVsbF90YWIgKGlkIGludCwgdmFsIGludCk7CiAKKy0tCistLSBDaGVjayBO T1QgSU4gcGVyZm9ybXMgYW4gQU5USSBKT0lOIHdoZW4gYm90aCB0aGUgb3V0ZXIgcXVlcnkncyBl eHByZXNzaW9ucworLS0gYW5kIHRoZSBzdWItc2VsZWN0J3Mgb3V0cHV0IGNvbHVtbnMgYXJlIHBy b3ZhYmx5IG5vbi1udWxsYWJsZSwgYW5kIHRoZQorLS0gb3BlcmF0b3IgaXRzZWxmIGNhbm5vdCBy ZXR1cm4gTlVMTCBmb3Igbm9uLW51bGwgaW5wdXRzLgorLS0KKwogLS0gQU5USSBKT0lOOiBib3Ro IHNpZGVzIGFyZSBkZWZpbmVkIE5PVCBOVUxMCiBFWFBMQUlOIChDT1NUUyBPRkYpCiBTRUxFQ1Qg KiBGUk9NIG5vdF9udWxsX3RhYgpAQCAtMTYzMiw0ICsxNjM2LDY0IEBAIEVYUExBSU4gKENPU1RT IE9GRikKIFNFTEVDVCAqIEZST00gbm90X251bGxfdGFiCiBXSEVSRSBOT1QgaWQgPz0gQU5ZIChT RUxFQ1QgaWQgRlJPTSBub3RfbnVsbF90YWIpOwogCistLQorLS0gQ2hlY2sgQUxMIFN1Ykxpbmsg aXMgY29udmVydGVkIHRvIEFOWSBTdWJMaW5rIGlmIG5lZ2F0ZWQgdGVzdGV4cHIgZXhpc3RzCist LQorCistLSBFbnN1cmUgd2UgZ2V0IGEgaGFzaGVkIEFOWSBTdWJQbGFuCitFWFBMQUlOIChDT1NU UyBPRkYpCitTRUxFQ1QgKiBGUk9NIG5vdF9udWxsX3RhYgorV0hFUkUgaWQgPD4gQUxMIChTRUxF Q1QgaWQgRlJPTSBudWxsX3RhYik7CisKKy0tIEVuc3VyZSB3ZSBnZXQgYSBoYXNoZWQgQU5ZIFN1 YlBsYW4KK0VYUExBSU4gKENPU1RTIE9GRikKK1NFTEVDVCAqIEZST00gbm90X251bGxfdGFiCitX SEVSRSAoaWQsIHZhbCkgPD4gQUxMIChTRUxFQ1QgaWQsIHZhbCBGUk9NIG51bGxfdGFiKTsKKwor LS0gRW5zdXJlIHdlIGdldCBhbiBBTlkgU3ViUGxhbgorRVhQTEFJTiAoQ09TVFMgT0ZGKQorU0VM RUNUICogRlJPTSBub3RfbnVsbF90YWIKK1dIRVJFIChpZCwgdmFsKSA+IEFMTCAoU0VMRUNUIGlk LCB2YWwgRlJPTSBudWxsX3RhYik7CisKKy0tIEVuc3VyZSB3ZSBnZXQgYW4gYW50aS1qb2luCitF WFBMQUlOIChDT1NUUyBPRkYpCitTRUxFQ1QgKiBGUk9NIG5vdF9udWxsX3RhYgorV0hFUkUgaWQg PD4gQUxMIChTRUxFQ1QgaWQgRlJPTSBub3RfbnVsbF90YWIpOworCistLSBFbnN1cmUgd2UgZ2V0 IGFuIGFudGktam9pbgorRVhQTEFJTiAoQ09TVFMgT0ZGKQorU0VMRUNUICogRlJPTSBub3RfbnVs bF90YWIKK1dIRVJFIChpZCwgdmFsKSA8PiBBTEwgKFNFTEVDVCBpZCwgdmFsIEZST00gbm90X251 bGxfdGFiKTsKKworLS0gRW5zdXJlIHdlIGdldCBhbiBhbnRpLWpvaW4KK0VYUExBSU4gKENPU1RT IE9GRikKK1NFTEVDVCAqIEZST00gbm90X251bGxfdGFiCitXSEVSRSAoaWQsIHZhbCkgPiBBTEwg KFNFTEVDVCBpZCwgdmFsIEZST00gbm90X251bGxfdGFiKTsKKworLS0gRW5zdXJlIHdlIGdldCBh IHNlbWktam9pbgorRVhQTEFJTiAoQ09TVFMgT0ZGKQorU0VMRUNUICogRlJPTSBudWxsX3RhYgor V0hFUkUgTk9UIGlkIDw+IEFMTCAoU0VMRUNUIGlkIEZST00gbnVsbF90YWIpOworCistLSBFbnN1 cmUgd2UgZ2V0IGEgaGFzaGVkIEFOWSBTdWJQbGFuCitFWFBMQUlOIChDT1NUUyBPRkYpCitTRUxF Q1QgKiBGUk9NIG51bGxfdGFiIHQxCitMRUZUIEpPSU4gbnVsbF90YWIgdDIKK09OIE5PVCB0MS5p ZCA8PiBBTEwgKFNFTEVDVCBpZCBGUk9NIG51bGxfdGFiKTsKKworLS0gRW5zdXJlIHdlIGdldCBh IHNlbWktam9pbgorRVhQTEFJTiAoQ09TVFMgT0ZGKQorU0VMRUNUICogRlJPTSBudWxsX3RhYgor V0hFUkUgTk9UIChpZCwgdmFsKSA8PiBBTEwgKFNFTEVDVCBpZCwgdmFsIEZST00gbnVsbF90YWIp OworCistLSBFbnN1cmUgd2UgZ2V0IGEgc2VtaS1qb2luCitFWFBMQUlOIChDT1NUUyBPRkYpCitT RUxFQ1QgKiBGUk9NIG51bGxfdGFiCitXSEVSRSBOT1QgKGlkLCB2YWwpID4gQUxMIChTRUxFQ1Qg aWQsIHZhbCBGUk9NIG51bGxfdGFiKTsKKworLS0gRW5zdXJlIHdlIGdldCBBTEwgU3ViUGxhbiwg YXMgdGhlIG9wZXJhdG9yIGhhcyBubyBuZWdhdG9yCitFWFBMQUlOIChDT1NUUyBPRkYpCitTRUxF Q1QgKiBGUk9NIG5vdF9udWxsX3RhYgorV0hFUkUgaWQgPz0gQUxMIChTRUxFQ1QgaWQgRlJPTSBu b3RfbnVsbF90YWIpOworCiBST0xMQkFDSzsKLS0gCjIuMzkuNSAoQXBwbGUgR2l0LTE1NCkKCg== --000000000000229094064dd46cdb--