Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1qIkYm-00062S-Qf for pgsql-bugs@arkaria.postgresql.org; Mon, 10 Jul 2023 06:39:49 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1qIkYl-0000bT-M9 for pgsql-bugs@arkaria.postgresql.org; Mon, 10 Jul 2023 06:39:47 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1qIkYl-0000bK-BF for pgsql-bugs@lists.postgresql.org; Mon, 10 Jul 2023 06:39:47 +0000 Received: from mail-yb1-xb2f.google.com ([2607:f8b0:4864:20::b2f]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.94.2) (envelope-from ) id 1qIkYe-003EHe-O4 for pgsql-bugs@lists.postgresql.org; Mon, 10 Jul 2023 06:39:46 +0000 Received: by mail-yb1-xb2f.google.com with SMTP id 3f1490d57ef6-bd61dd9a346so5128021276.2 for ; Sun, 09 Jul 2023 23:39:40 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20221208; t=1688971179; x=1691563179; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=giglrYlcogLjgDsF2y+X/8nNo/v2MJW/7VueZc944Ac=; b=q3ESqRZGmJI+WOwXK9rSkkmsyS2jLgWKlMLjuSLvhAB3+ldCTI6hMJMg0wnIS9Bshv EVlKk3nR1jOQy9kiarTaypGJcISlyqjK9AznF9NpKufAPdyXnpxN0zmHz9T/SSPAav1n 9rzYasZ6F/fPSKVsIXPG6SNkD4bhoUqwxIf1U6kvWdEzxnIKhlBqHJ3fb9XG/ZzW7CnD YQx9SKB6kToVB/MZzWKv5xWdUcBfw3SD1331I6Is5HLTSf3dcTBJFxCNSYvRk1a3SmNv 2s/UmuNDJUa2/vWy9YXBAr6PTsc9Vshpl6/bcrsywxDSzdCYxccxSyFctHc/zTTFmT8V XSdQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1688971179; x=1691563179; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=giglrYlcogLjgDsF2y+X/8nNo/v2MJW/7VueZc944Ac=; b=a3Va819ogulaKSoW3g85QFSZBEaWlakgbNlty5nmPdukImjoYS9zUNd/1jJxcH62kF m8iha5yHLOU9R5Se4zIGse9P1SCZidtdu2q7FqF4Gq1grSvpgLbBYZm+ikmVbfEhtaNr 8JlBzJZelnVVv1kYIyf6u7BdZFvcxv04SNlyIo2Ug/dTsc4JKcWuQOuELAoJ0cys42pT wwan64pfzXUHTAWY639YY8ErJ/31jxue6YEZXCGWDrW+AUrukjphb3Woy6i+EyGm296R 3biupATLlGm9Mk40x/QDhDcKW8EixY3QSVTrxKU5yIM4mZZll3+ljIfmnYMT/OEgn7IR iIJg== X-Gm-Message-State: ABy/qLbgiX9rghSHBNro7Cl5K11OGHjZbemdS0q33A3whfAEBn9hi3un pbBWZWV5T9MfI4xTuizOF+8kl9jmgRCiCro5EJY= X-Google-Smtp-Source: APBJJlHNm37A45FTf6IfSp9ERboc62SUMWVCW3eMGfbbKhuoM7dQfV4q+n5OVVwFzVLcbJ2rjRPiKgoiXQ9hXHUFs+g= X-Received: by 2002:a5b:250:0:b0:c70:d138:51b2 with SMTP id g16-20020a5b0250000000b00c70d13851b2mr6012013ybp.25.1688971178970; Sun, 09 Jul 2023 23:39:38 -0700 (PDT) MIME-Version: 1.0 References: <17540-7aa1855ad5ec18b4@postgresql.org> <2732256.1657163219@sss.pgh.pa.us> <2740652.1657165848@sss.pgh.pa.us> In-Reply-To: From: Richard Guo Date: Mon, 10 Jul 2023 14:39:27 +0800 Message-ID: Subject: Re: BUG #17540: Prepared statement: PG switches to a generic query plan which is consistently much slower To: David Rowley Cc: Tom Lane , william.duclot@gmail.com, PostgreSQL mailing lists Content-Type: multipart/mixed; boundary="00000000000028aacf06001c3fec" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --00000000000028aacf06001c3fec Content-Type: multipart/alternative; boundary="00000000000028aacd06001c3fea" --00000000000028aacd06001c3fea Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Mon, Jul 10, 2023 at 10:14=E2=80=AFAM David Rowley wrote: > On Fri, 7 Jul 2023 at 19:03, Richard Guo wrote: > > Attached is what I have in mind. The patch extends the logic from two > > points. > > > > * it also checks OR clauses to see if it is always true. > > > > * it also checks for join clauses by additionally testing if the nullin= g > > bitmap is empty. > > Do you mind writing some regression tests for this? > > I don't really see an existing test file that would suit, maybe it's > worth adding something like predicate.sql Here is v3 patch with regression tests. I add the new test into the group where stats test is in, but I'm not sure if this is the right place. Thanks Richard --00000000000028aacd06001c3fea Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable

On Mon, Jul 10, 2023 at 10:14=E2=80=AFAM = David Rowley <dgrowleyml@gmail.c= om> wrote:
guofenglinux@gmail.com> wrote:
> Attached is what I have in mind.=C2=A0 The patch extends the logic fro= m two
> points.
>
> * it also checks OR clauses to see if it is always true.
>
> * it also checks for join clauses by additionally testing if the nulli= ng
> bitmap is empty.

Do you mind writing some regression tests for this?

I don't really see an existing test file that would suit, maybe it'= s
worth adding something like predicate.sql

H= ere is v3 patch with regression tests.=C2=A0 I add the new test into thegroup where stats test is in, but I'm not sure if this is the rightplace.

Thanks
Richard
--00000000000028aacd06001c3fea-- --00000000000028aacf06001c3fec Content-Type: application/octet-stream; name="v3-0001-ignore-is-not-null-quals-on-not-null-columns.patch" Content-Disposition: attachment; filename="v3-0001-ignore-is-not-null-quals-on-not-null-columns.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_ljwhtlvl0 RnJvbSBhNDVjZGJlMWQ0NDBhYjI2NDJjOGNjMzEyZGQ2MDliNGI5OTM5Y2E4IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBSaWNoYXJkIEd1byA8Z3VvZmVuZ2xpbnV4QGdtYWlsLmNvbT4K RGF0ZTogTW9uLCAxMCBKdWwgMjAyMyAxNDoyNDo0MiArMDgwMApTdWJqZWN0OiBbUEFUQ0ggdjNd IGlnbm9yZSBpcyBub3QgbnVsbCBxdWFscyBvbiBub3QgbnVsbCBjb2x1bW5zCgotLS0KIHNyYy9i YWNrZW5kL29wdGltaXplci9wbGFuL2luaXRzcGxhbi5jICB8IDE3OSArKysrKysrKysrKysrKysr Ky0tLS0tLS0KIHNyYy9iYWNrZW5kL29wdGltaXplci91dGlsL2pvaW5pbmZvLmMgICB8ICAgNSAr CiBzcmMvYmFja2VuZC9vcHRpbWl6ZXIvdXRpbC9wbGFuY2F0LmMgICAgfCAgIDkgKysKIHNyYy9i YWNrZW5kL29wdGltaXplci91dGlsL3JlbG5vZGUuYyAgICB8ICAgMiArCiBzcmMvaW5jbHVkZS9u b2Rlcy9wYXRobm9kZXMuaCAgICAgICAgICAgfCAgIDIgKwogc3JjL2luY2x1ZGUvb3B0aW1pemVy L3BsYW5tYWluLmggICAgICAgIHwgICAyICsKIHNyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvcHJl ZGljYXRlLm91dCB8IDEwNyArKysrKysrKysrKysrKwogc3JjL3Rlc3QvcmVncmVzcy9wYXJhbGxl bF9zY2hlZHVsZSAgICAgIHwgICAyICstCiBzcmMvdGVzdC9yZWdyZXNzL3NxbC9wcmVkaWNhdGUu c3FsICAgICAgfCAgNDggKysrKysrKwogOSBmaWxlcyBjaGFuZ2VkLCAzMDggaW5zZXJ0aW9ucygr KSwgNDggZGVsZXRpb25zKC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL3Rlc3QvcmVncmVzcy9l eHBlY3RlZC9wcmVkaWNhdGUub3V0CiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL3Rlc3QvcmVncmVz cy9zcWwvcHJlZGljYXRlLnNxbAoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL29wdGltaXplci9w bGFuL2luaXRzcGxhbi5jIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vaW5pdHNwbGFuLmMK aW5kZXggYjMxZDg5MjEyMS4uOTgwNDI5ZDQ2OSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvb3B0 aW1pemVyL3BsYW4vaW5pdHNwbGFuLmMKKysrIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4v aW5pdHNwbGFuLmMKQEAgLTI2MTgsNiArMjYxOCwxMTAgQEAgY2hlY2tfcmVkdW5kYW50X251bGxh YmlsaXR5X3F1YWwoUGxhbm5lckluZm8gKnJvb3QsIE5vZGUgKmNsYXVzZSkKIAlyZXR1cm4gZmFs c2U7CiB9CiAKKy8qCisgKiBhZGRfYmFzZXJlc3RyaWN0aW5mb190b19yZWwKKyAqCQlBZGQgJ3Jl c3RyaWN0aW5mbycgYXMgYSBiYXNlcmVzdHJpY3RpbmZvIHRvIHRoZSBiYXNlIHJlbGF0aW9uIGRl bm90ZWQgYnkKKyAqCQkncmVsaWQnIHdpdGggc29tZSBwcmVjaGVja3MgdG8gdHJ5IHRvIGRldGVy bWluZSBpZiB0aGUgcXVhbCBpcyBhbHdheXMKKyAqCQl0cnVlLCBpbiB3aGljaCBjYXNlIHdlIGln bm9yZSBpdCByYXRoZXIgdGhhbiBhZGQgaXQuCisgKi8KK3N0YXRpYyB2b2lkCithZGRfYmFzZXJl c3RyaWN0aW5mb190b19yZWwoUGxhbm5lckluZm8gKnJvb3QsIEluZGV4IHJlbGlkLAorCQkJCQkJ CVJlc3RyaWN0SW5mbyAqcmVzdHJpY3RpbmZvKQoreworCVJlbE9wdEluZm8gKnJlbCA9IGZpbmRf YmFzZV9yZWwocm9vdCwgcmVsaWQpOworCisJQXNzZXJ0KGJtc19tZW1iZXJzaGlwKHJlc3RyaWN0 aW5mby0+cmVxdWlyZWRfcmVsaWRzKSA9PSBCTVNfU0lOR0xFVE9OKTsKKworCS8qIERvbid0IGFk ZCB0aGUgY2xhdXNlIGlmIGl0IGlzIGFsd2F5cyB0cnVlICovCisJaWYgKHJlc3RyaWN0aW9uX2lz X2Fsd2F5c190cnVlKHJvb3QsIHJlc3RyaWN0aW5mbykpCisJCXJldHVybjsKKworCS8qIEFkZCBj bGF1c2UgdG8gcmVsJ3MgcmVzdHJpY3Rpb24gbGlzdCAqLworCXJlbC0+YmFzZXJlc3RyaWN0aW5m byA9IGxhcHBlbmQocmVsLT5iYXNlcmVzdHJpY3RpbmZvLCByZXN0cmljdGluZm8pOworCisJLyog VXBkYXRlIHNlY3VyaXR5IGxldmVsIGluZm8gKi8KKwlyZWwtPmJhc2VyZXN0cmljdF9taW5fc2Vj dXJpdHkgPSBNaW4ocmVsLT5iYXNlcmVzdHJpY3RfbWluX3NlY3VyaXR5LAorCQkJCQkJCQkJCSBy ZXN0cmljdGluZm8tPnNlY3VyaXR5X2xldmVsKTsKK30KKworLyoKKyAqIG51bGx0ZXN0X2lzX2Fs d2F5c190cnVlCisgKgkgIENoZWNrIHRvIHNlZSBpZiB0aGUgTnVsbFRlc3QgcXVhbCBpcyBhbHdh eXMgdHJ1ZS4KKyAqCisgKiBJZiB0aGUgTnVsbFRlc3QgaXMgYW4gSVNfTk9UX05VTEwgcXVhbCBv biBhIE5PVCBOVUxMIGNvbHVtbiwgYW5kIG1lYW53aGlsZQorICogaXRzIFZhciBpcyBub3QgbnVs bGVkIGJ5IGFueSBvdXRlciBqb2lucywgdGhlbiB3ZSBjYW4ga25vdyB0aGF0IGl0IHdvdWxkIGJl CisgKiBhbHdheXMgdHJ1ZS4KKyAqLworc3RhdGljIGJvb2wKK251bGx0ZXN0X2lzX2Fsd2F5c190 cnVlKFBsYW5uZXJJbmZvICpyb290LCBOdWxsVGVzdCAqbnVsbHRlc3QpCit7CisJUmVsT3B0SW5m byAqcmVsOworCVZhcgkJICAgKnZhcjsKKworCUFzc2VydChJc0EobnVsbHRlc3QsIE51bGxUZXN0 KSk7CisKKwkvKiBpcyB0aGlzIE51bGxUZXN0IGFuIElTX05PVF9OVUxMIHF1YWw/ICovCisJaWYg KG51bGx0ZXN0LT5udWxsdGVzdHR5cGUgIT0gSVNfTk9UX05VTEwpCisJCXJldHVybiBmYWxzZTsK KworCWlmICghSXNBKG51bGx0ZXN0LT5hcmcsIFZhcikpCisJCXJldHVybiBmYWxzZTsKKworCXZh ciA9IChWYXIgKikgbnVsbHRlc3QtPmFyZzsKKworCS8qIGNvdWxkIHRoZSBWYXIgYmUgbnVsbGVk IGJ5IGFueSBvdXRlciBqb2lucz8gKi8KKwlpZiAoIWJtc19pc19lbXB0eSh2YXItPnZhcm51bGxp bmdyZWxzKSkKKwkJcmV0dXJuIGZhbHNlOworCisJLyogc3lzdGVtIGNvbHVtbnMgY2Fubm90IGJl IE5VTEwgKi8KKwlpZiAodmFyLT52YXJhdHRubyA8IDApCisJCXJldHVybiB0cnVlOworCisJLyog aXMgdGhlIGNvbHVtbiBkZWZpbmVkIE5PVCBOVUxMPyAqLworCXJlbCA9IGZpbmRfYmFzZV9yZWwo cm9vdCwgdmFyLT52YXJubyk7CisJaWYgKHZhci0+dmFyYXR0bm8gPiAwICYmCisJCWJtc19pc19t ZW1iZXIodmFyLT52YXJhdHRubywgcmVsLT5ub3RudWxsYXR0bnVtcykpCisJCXJldHVybiB0cnVl OworCisJcmV0dXJuIGZhbHNlOworfQorCisvKgorICogcmVzdHJpY3Rpb25faXNfYWx3YXlzX3Ry dWUKKyAqCSAgQ2hlY2sgdG8gc2VlIGlmIHRoZSBSZXN0cmljdEluZm8gaXMgYWx3YXlzIHRydWUu CisgKgorICogQ3VycmVudGx5IHdlIG9ubHkgY2hlY2sgZm9yIE51bGxUZXN0IHF1YWxzIGFuZCBP UiBjbGF1c2VzIHRoYXQgaW5jbHVkZQorICogTnVsbFRlc3QgcXVhbHMuICBXZSBtYXkgZXh0ZW5k IGl0IGluIHRoZSBmdXR1cmUuCisgKi8KK2Jvb2wKK3Jlc3RyaWN0aW9uX2lzX2Fsd2F5c190cnVl KFBsYW5uZXJJbmZvICpyb290LAorCQkJCQkJICAgUmVzdHJpY3RJbmZvICpyZXN0cmljdGluZm8p Cit7CisJLyogQ2hlY2sgZm9yIE51bGxUZXN0IHF1YWwgKi8KKwlpZiAoSXNBKHJlc3RyaWN0aW5m by0+Y2xhdXNlLCBOdWxsVGVzdCkpCisJCXJldHVybiBudWxsdGVzdF9pc19hbHdheXNfdHJ1ZShy b290LCAoTnVsbFRlc3QgKikgcmVzdHJpY3RpbmZvLT5jbGF1c2UpOworCisJLyogSWYgaXQncyBh biBPUiwgY2hlY2sgaXRzIHN1Yi1jbGF1c2VzICovCisJaWYgKHJlc3RyaWN0aW9uX2lzX29yX2Ns YXVzZShyZXN0cmljdGluZm8pKQorCXsKKwkJTGlzdENlbGwgICAqbGM7CisKKwkJQXNzZXJ0KGlz X29yY2xhdXNlKHJlc3RyaWN0aW5mby0+b3JjbGF1c2UpKTsKKwkJZm9yZWFjaChsYywgKChCb29s RXhwciAqKSByZXN0cmljdGluZm8tPm9yY2xhdXNlKS0+YXJncykKKwkJeworCQkJTm9kZSAgICpv cmFyZyA9IChOb2RlICopIGxmaXJzdChsYyk7CisKKwkJCWlmICghSXNBKG9yYXJnLCBSZXN0cmlj dEluZm8pKQorCQkJCWNvbnRpbnVlOworCisJCQlpZiAocmVzdHJpY3Rpb25faXNfYWx3YXlzX3Ry dWUocm9vdCwgKFJlc3RyaWN0SW5mbyAqKSBvcmFyZykpCisJCQkJcmV0dXJuIHRydWU7CisJCX0K Kwl9CisKKwlyZXR1cm4gZmFsc2U7Cit9CisKIC8qCiAgKiBkaXN0cmlidXRlX3Jlc3RyaWN0aW5m b190b19yZWxzCiAgKgkgIFB1c2ggYSBjb21wbGV0ZWQgUmVzdHJpY3RJbmZvIGludG8gdGhlIHBy b3BlciByZXN0cmljdGlvbiBvciBqb2luCkBAIC0yNjMyLDU4ICsyNzM2LDM5IEBAIGRpc3RyaWJ1 dGVfcmVzdHJpY3RpbmZvX3RvX3JlbHMoUGxhbm5lckluZm8gKnJvb3QsCiAJCQkJCQkJCVJlc3Ry aWN0SW5mbyAqcmVzdHJpY3RpbmZvKQogewogCVJlbGlkcwkJcmVsaWRzID0gcmVzdHJpY3RpbmZv LT5yZXF1aXJlZF9yZWxpZHM7Ci0JUmVsT3B0SW5mbyAqcmVsOworCWludAkJCXJlbGlkOwogCi0J c3dpdGNoIChibXNfbWVtYmVyc2hpcChyZWxpZHMpKQorCWlmIChyZWxpZHMgPT0gTlVMTCkKIAl7 Ci0JCWNhc2UgQk1TX1NJTkdMRVRPTjoKLQotCQkJLyoKLQkJCSAqIFRoZXJlIGlzIG9ubHkgb25l IHJlbGF0aW9uIHBhcnRpY2lwYXRpbmcgaW4gdGhlIGNsYXVzZSwgc28gaXQKLQkJCSAqIGlzIGEg cmVzdHJpY3Rpb24gY2xhdXNlIGZvciB0aGF0IHJlbGF0aW9uLgotCQkJICovCi0JCQlyZWwgPSBm aW5kX2Jhc2VfcmVsKHJvb3QsIGJtc19zaW5nbGV0b25fbWVtYmVyKHJlbGlkcykpOwotCi0JCQkv KiBBZGQgY2xhdXNlIHRvIHJlbCdzIHJlc3RyaWN0aW9uIGxpc3QgKi8KLQkJCXJlbC0+YmFzZXJl c3RyaWN0aW5mbyA9IGxhcHBlbmQocmVsLT5iYXNlcmVzdHJpY3RpbmZvLAotCQkJCQkJCQkJCQly ZXN0cmljdGluZm8pOwotCQkJLyogVXBkYXRlIHNlY3VyaXR5IGxldmVsIGluZm8gKi8KLQkJCXJl bC0+YmFzZXJlc3RyaWN0X21pbl9zZWN1cml0eSA9IE1pbihyZWwtPmJhc2VyZXN0cmljdF9taW5f c2VjdXJpdHksCi0JCQkJCQkJCQkJCQkgcmVzdHJpY3RpbmZvLT5zZWN1cml0eV9sZXZlbCk7Ci0J CQlicmVhazsKLQkJY2FzZSBCTVNfTVVMVElQTEU6Ci0KLQkJCS8qCi0JCQkgKiBUaGUgY2xhdXNl IGlzIGEgam9pbiBjbGF1c2UsIHNpbmNlIHRoZXJlIGlzIG1vcmUgdGhhbiBvbmUgcmVsCi0JCQkg KiBpbiBpdHMgcmVsaWQgc2V0LgotCQkJICovCi0KLQkJCS8qCi0JCQkgKiBDaGVjayBmb3IgaGFz aGpvaW5hYmxlIG9wZXJhdG9ycy4gIChXZSBkb24ndCBib3RoZXIgc2V0dGluZyB0aGUKLQkJCSAq IGhhc2hqb2luIGluZm8gZXhjZXB0IGluIHRydWUgam9pbiBjbGF1c2VzLikKLQkJCSAqLwotCQkJ Y2hlY2tfaGFzaGpvaW5hYmxlKHJlc3RyaWN0aW5mbyk7CisJCS8qCisJCSAqIGNsYXVzZSByZWZl cmVuY2VzIG5vIHJlbHMsIGFuZCB0aGVyZWZvcmUgd2UgaGF2ZSBubyBwbGFjZSB0bworCQkgKiBh dHRhY2ggaXQuICBTaG91bGRuJ3QgZ2V0IGhlcmUgaWYgY2FsbGVycyBhcmUgd29ya2luZyBwcm9w ZXJseS4KKwkJICovCisJCWVsb2coRVJST1IsICJjYW5ub3QgY29wZSB3aXRoIHZhcmlhYmxlLWZy ZWUgY2xhdXNlIik7CisJfQorCWVsc2UgaWYgKGJtc19nZXRfc2luZ2xldG9uX21lbWJlcihyZWxp ZHMsICZyZWxpZCkpCisJCWFkZF9iYXNlcmVzdHJpY3RpbmZvX3RvX3JlbChyb290LCByZWxpZCwg cmVzdHJpY3RpbmZvKTsKKwllbHNlCisJeworCQkvKgorCQkgKiBUaGUgY2xhdXNlIGlzIGEgam9p biBjbGF1c2UsIHNpbmNlIHRoZXJlIGlzIG1vcmUgdGhhbiBvbmUgcmVsIGluCisJCSAqIGl0cyBy ZWxpZCBzZXQuCisJCSAqLwogCi0JCQkvKgotCQkJICogTGlrZXdpc2UsIGNoZWNrIGlmIHRoZSBj bGF1c2UgaXMgc3VpdGFibGUgdG8gYmUgdXNlZCB3aXRoIGEKLQkJCSAqIE1lbW9pemUgbm9kZSB0 byBjYWNoZSBpbm5lciB0dXBsZXMgZHVyaW5nIGEgcGFyYW1ldGVyaXplZAotCQkJICogbmVzdGVk IGxvb3AuCi0JCQkgKi8KLQkJCWNoZWNrX21lbW9pemFibGUocmVzdHJpY3RpbmZvKTsKKwkJLyoK KwkJICogQ2hlY2sgZm9yIGhhc2hqb2luYWJsZSBvcGVyYXRvcnMuICAoV2UgZG9uJ3QgYm90aGVy IHNldHRpbmcgdGhlCisJCSAqIGhhc2hqb2luIGluZm8gZXhjZXB0IGluIHRydWUgam9pbiBjbGF1 c2VzLikKKwkJICovCisJCWNoZWNrX2hhc2hqb2luYWJsZShyZXN0cmljdGluZm8pOwogCi0JCQkv KgotCQkJICogQWRkIGNsYXVzZSB0byB0aGUgam9pbiBsaXN0cyBvZiBhbGwgdGhlIHJlbGV2YW50 IHJlbGF0aW9ucy4KLQkJCSAqLwotCQkJYWRkX2pvaW5fY2xhdXNlX3RvX3JlbHMocm9vdCwgcmVz dHJpY3RpbmZvLCByZWxpZHMpOwotCQkJYnJlYWs7Ci0JCWRlZmF1bHQ6CisJCS8qCisJCSAqIExp a2V3aXNlLCBjaGVjayBpZiB0aGUgY2xhdXNlIGlzIHN1aXRhYmxlIHRvIGJlIHVzZWQgd2l0aCBh IE1lbW9pemUKKwkJICogbm9kZSB0byBjYWNoZSBpbm5lciB0dXBsZXMgZHVyaW5nIGEgcGFyYW1l dGVyaXplZCBuZXN0ZWQgbG9vcC4KKwkJICovCisJCWNoZWNrX21lbW9pemFibGUocmVzdHJpY3Rp bmZvKTsKIAotCQkJLyoKLQkJCSAqIGNsYXVzZSByZWZlcmVuY2VzIG5vIHJlbHMsIGFuZCB0aGVy ZWZvcmUgd2UgaGF2ZSBubyBwbGFjZSB0bwotCQkJICogYXR0YWNoIGl0LiAgU2hvdWxkbid0IGdl dCBoZXJlIGlmIGNhbGxlcnMgYXJlIHdvcmtpbmcgcHJvcGVybHkuCi0JCQkgKi8KLQkJCWVsb2co RVJST1IsICJjYW5ub3QgY29wZSB3aXRoIHZhcmlhYmxlLWZyZWUgY2xhdXNlIik7Ci0JCQlicmVh azsKKwkJLyogQWRkIGNsYXVzZSB0byB0aGUgam9pbiBsaXN0cyBvZiBhbGwgdGhlIHJlbGV2YW50 IHJlbGF0aW9ucy4gKi8KKwkJYWRkX2pvaW5fY2xhdXNlX3RvX3JlbHMocm9vdCwgcmVzdHJpY3Rp bmZvLCByZWxpZHMpOwogCX0KIH0KIApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvb3B0aW1pemVy L3V0aWwvam9pbmluZm8uYyBiL3NyYy9iYWNrZW5kL29wdGltaXplci91dGlsL2pvaW5pbmZvLmMK aW5kZXggOTY4YTVhNDg4ZS4uYWRkMTI0ZTM5NSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvb3B0 aW1pemVyL3V0aWwvam9pbmluZm8uYworKysgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvdXRpbC9q b2luaW5mby5jCkBAIC0xNyw2ICsxNyw3IEBACiAjaW5jbHVkZSAib3B0aW1pemVyL2pvaW5pbmZv LmgiCiAjaW5jbHVkZSAib3B0aW1pemVyL3BhdGhub2RlLmgiCiAjaW5jbHVkZSAib3B0aW1pemVy L3BhdGhzLmgiCisjaW5jbHVkZSAib3B0aW1pemVyL3BsYW5tYWluLmgiCiAKIAogLyoKQEAgLTk4 LDYgKzk5LDEwIEBAIGFkZF9qb2luX2NsYXVzZV90b19yZWxzKFBsYW5uZXJJbmZvICpyb290LAog ewogCWludAkJCWN1cl9yZWxpZDsKIAorCS8qIERvbid0IGFkZCB0aGUgY2xhdXNlIGlmIGl0IGlz IGFsd2F5cyB0cnVlICovCisJaWYgKHJlc3RyaWN0aW9uX2lzX2Fsd2F5c190cnVlKHJvb3QsIHJl c3RyaWN0aW5mbykpCisJCXJldHVybjsKKwogCWN1cl9yZWxpZCA9IC0xOwogCXdoaWxlICgoY3Vy X3JlbGlkID0gYm1zX25leHRfbWVtYmVyKGpvaW5fcmVsaWRzLCBjdXJfcmVsaWQpKSA+PSAwKQog CXsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL29wdGltaXplci91dGlsL3BsYW5jYXQuYyBiL3Ny Yy9iYWNrZW5kL29wdGltaXplci91dGlsL3BsYW5jYXQuYwppbmRleCAzOTkzMmQzYzJkLi5kODEw YWQ4MTI3IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvdXRpbC9wbGFuY2F0LmMK KysrIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3V0aWwvcGxhbmNhdC5jCkBAIC0xNjMsNiArMTYz LDE1IEBAIGdldF9yZWxhdGlvbl9pbmZvKFBsYW5uZXJJbmZvICpyb290LCBPaWQgcmVsYXRpb25P YmplY3RJZCwgYm9vbCBpbmhwYXJlbnQsCiAJcmVsLT5hdHRyX3dpZHRocyA9IChpbnQzMiAqKQog CQlwYWxsb2MwKChyZWwtPm1heF9hdHRyIC0gcmVsLT5taW5fYXR0ciArIDEpICogc2l6ZW9mKGlu dDMyKSk7CiAKKwkvKiByZWNvcmQgd2hpY2ggY29sdW1ucyBhcmUgZGVmaW5lZCBhcyBOT1QgTlVM TCAqLworCWZvciAoaW50IGkgPSAwOyBpIDwgcmVsYXRpb24tPnJkX2F0dC0+bmF0dHM7IGkrKykK Kwl7CisJCUZvcm1EYXRhX3BnX2F0dHJpYnV0ZSAqYXR0ciA9ICZyZWxhdGlvbi0+cmRfYXR0LT5h dHRyc1tpXTsKKworCQlpZiAoYXR0ci0+YXR0bm90bnVsbCkKKwkJCXJlbC0+bm90bnVsbGF0dG51 bXMgPSBibXNfYWRkX21lbWJlcihyZWwtPm5vdG51bGxhdHRudW1zLCBhdHRyLT5hdHRudW0pOwor CX0KKwogCS8qCiAJICogRXN0aW1hdGUgcmVsYXRpb24gc2l6ZSAtLS0gdW5sZXNzIGl0J3MgYW4g aW5oZXJpdGFuY2UgcGFyZW50LCBpbiB3aGljaAogCSAqIGNhc2UgdGhlIHNpemUgd2Ugd2FudCBp cyBub3QgdGhlIHJlbCdzIG93biBzaXplIGJ1dCB0aGUgc2l6ZSBvZiBpdHMKZGlmZiAtLWdpdCBh L3NyYy9iYWNrZW5kL29wdGltaXplci91dGlsL3JlbG5vZGUuYyBiL3NyYy9iYWNrZW5kL29wdGlt aXplci91dGlsL3JlbG5vZGUuYwppbmRleCAxNWUzOTEwYjc5Li45YjJiMzkwYzQ2IDEwMDY0NAot LS0gYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvdXRpbC9yZWxub2RlLmMKKysrIGIvc3JjL2JhY2tl bmQvb3B0aW1pemVyL3V0aWwvcmVsbm9kZS5jCkBAIC0yMjEsNiArMjIxLDcgQEAgYnVpbGRfc2lt cGxlX3JlbChQbGFubmVySW5mbyAqcm9vdCwgaW50IHJlbGlkLCBSZWxPcHRJbmZvICpwYXJlbnQp CiAJcmVsLT5yZWxpZCA9IHJlbGlkOwogCXJlbC0+cnRla2luZCA9IHJ0ZS0+cnRla2luZDsKIAkv KiBtaW5fYXR0ciwgbWF4X2F0dHIsIGF0dHJfbmVlZGVkLCBhdHRyX3dpZHRocyBhcmUgc2V0IGJl bG93ICovCisJcmVsLT5ub3RudWxsYXR0bnVtcyA9IE5VTEw7CiAJcmVsLT5sYXRlcmFsX3ZhcnMg PSBOSUw7CiAJcmVsLT5pbmRleGxpc3QgPSBOSUw7CiAJcmVsLT5zdGF0bGlzdCA9IE5JTDsKQEAg LTcwNyw2ICs3MDgsNyBAQCBidWlsZF9qb2luX3JlbChQbGFubmVySW5mbyAqcm9vdCwKIAlqb2lu cmVsLT5tYXhfYXR0ciA9IDA7CiAJam9pbnJlbC0+YXR0cl9uZWVkZWQgPSBOVUxMOwogCWpvaW5y ZWwtPmF0dHJfd2lkdGhzID0gTlVMTDsKKwlqb2lucmVsLT5ub3RudWxsYXR0bnVtcyA9IE5VTEw7 CiAJam9pbnJlbC0+bnVsbGluZ19yZWxpZHMgPSBOVUxMOwogCWpvaW5yZWwtPmxhdGVyYWxfdmFy cyA9IE5JTDsKIAlqb2lucmVsLT5sYXRlcmFsX3JlZmVyZW5jZXJzID0gTlVMTDsKZGlmZiAtLWdp dCBhL3NyYy9pbmNsdWRlL25vZGVzL3BhdGhub2Rlcy5oIGIvc3JjL2luY2x1ZGUvbm9kZXMvcGF0 aG5vZGVzLmgKaW5kZXggYzE3YjUzZjdhZC4uYTBiNjAyYzliZSAxMDA2NDQKLS0tIGEvc3JjL2lu Y2x1ZGUvbm9kZXMvcGF0aG5vZGVzLmgKKysrIGIvc3JjL2luY2x1ZGUvbm9kZXMvcGF0aG5vZGVz LmgKQEAgLTkxMyw2ICs5MTMsOCBAQCB0eXBlZGVmIHN0cnVjdCBSZWxPcHRJbmZvCiAJUmVsaWRz CSAgICphdHRyX25lZWRlZCBwZ19ub2RlX2F0dHIocmVhZF93cml0ZV9pZ25vcmUpOwogCS8qIGFy cmF5IGluZGV4ZWQgW21pbl9hdHRyIC4uIG1heF9hdHRyXSAqLwogCWludDMyCSAgICphdHRyX3dp ZHRocyBwZ19ub2RlX2F0dHIocmVhZF93cml0ZV9pZ25vcmUpOworCS8qIHplcm8tYmFzZWQgc2V0 IGNvbnRhaW5pbmcgYXR0bnVtcyBvZiBOT1QgTlVMTCBjb2x1bW5zICovCisJQml0bWFwc2V0ICAq bm90bnVsbGF0dG51bXM7CiAJLyogcmVsaWRzIG9mIG91dGVyIGpvaW5zIHRoYXQgY2FuIG51bGwg dGhpcyBiYXNlcmVsICovCiAJUmVsaWRzCQludWxsaW5nX3JlbGlkczsKIAkvKiBMQVRFUkFMIFZh cnMgYW5kIFBIVnMgcmVmZXJlbmNlZCBieSByZWwgKi8KZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRl L29wdGltaXplci9wbGFubWFpbi5oIGIvc3JjL2luY2x1ZGUvb3B0aW1pemVyL3BsYW5tYWluLmgK aW5kZXggNWZjOTAwNzM3ZC4uYzg1ODI3OTJkNCAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvb3B0 aW1pemVyL3BsYW5tYWluLmgKKysrIGIvc3JjL2luY2x1ZGUvb3B0aW1pemVyL3BsYW5tYWluLmgK QEAgLTc1LDYgKzc1LDggQEAgZXh0ZXJuIHZvaWQgYWRkX3ZhcnNfdG9fdGFyZ2V0bGlzdChQbGFu bmVySW5mbyAqcm9vdCwgTGlzdCAqdmFycywKIGV4dGVybiB2b2lkIGZpbmRfbGF0ZXJhbF9yZWZl cmVuY2VzKFBsYW5uZXJJbmZvICpyb290KTsKIGV4dGVybiB2b2lkIGNyZWF0ZV9sYXRlcmFsX2pv aW5faW5mbyhQbGFubmVySW5mbyAqcm9vdCk7CiBleHRlcm4gTGlzdCAqZGVjb25zdHJ1Y3Rfam9p bnRyZWUoUGxhbm5lckluZm8gKnJvb3QpOworZXh0ZXJuIGJvb2wgcmVzdHJpY3Rpb25faXNfYWx3 YXlzX3RydWUoUGxhbm5lckluZm8gKnJvb3QsCisJCQkJCQkJCQkgICBSZXN0cmljdEluZm8gKnJl c3RyaWN0aW5mbyk7CiBleHRlcm4gdm9pZCBkaXN0cmlidXRlX3Jlc3RyaWN0aW5mb190b19yZWxz KFBsYW5uZXJJbmZvICpyb290LAogCQkJCQkJCQkJCQlSZXN0cmljdEluZm8gKnJlc3RyaWN0aW5m byk7CiBleHRlcm4gUmVzdHJpY3RJbmZvICpwcm9jZXNzX2ltcGxpZWRfZXF1YWxpdHkoUGxhbm5l ckluZm8gKnJvb3QsCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3ByZWRp Y2F0ZS5vdXQgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3ByZWRpY2F0ZS5vdXQKbmV3IGZp bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMC4uNDNjODk4NTA0MgotLS0gL2Rldi9udWxs CisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvcHJlZGljYXRlLm91dApAQCAtMCwwICsx LDEwNyBAQAorLS0KKy0tIFRlc3RzIGZvciBwcmVkaWNhdGUgaGFuZGxpbmcKKy0tCistLQorLS0g dGVzdCB0aGF0IHJlc3RyaWN0aW9ucyB0aGF0IGFyZSBhbHdheXMgdHJ1ZSBhcmUgaWdub3JlZAor LS0KKy0tIGN1cnJlbnRseSB3ZSBvbmx5IGNoZWNrIGZvciBOdWxsVGVzdCBxdWFscyBhbmQgT1Ig Y2xhdXNlcyB0aGF0IGluY2x1ZGUKKy0tIE51bGxUZXN0IHF1YWxzLiAgV2UgbWF5IGV4dGVuZCBp dCBpbiB0aGUgZnV0dXJlLgorLS0KK2NyZWF0ZSB0YWJsZSBwcmVkX3RhYiAoYSBpbnQgbm90IG51 bGwsIGIgaW50KTsKKy0tIEFuIElTX05PVF9OVUxMIHF1YWwgaW4gcmVzdHJpY3Rpb24gY2xhdXNl cyBjYW4gYmUgaWdub3JlZCBpZiBpdCdzIG9uIGEgTk9UCistLSBOVUxMIGNvbHVtbgorZXhwbGFp biAoY29zdHMgb2ZmKQorc2VsZWN0ICogZnJvbSBwcmVkX3RhYiB0IHdoZXJlIHQuYSBpcyBub3Qg bnVsbDsKKyAgICAgICBRVUVSWSBQTEFOICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t CisgU2VxIFNjYW4gb24gcHJlZF90YWIgdAorKDEgcm93KQorCistLSBPbiB0aGUgY29udHJhcnks IGFuIElTX05PVF9OVUxMIHF1YWwgaW4gcmVzdHJpY3Rpb24gY2xhdXNlcyBjYW4gbm90IGJlCist LSBpZ25vcmVkIGlmIGl0J3Mgbm90IG9uIGEgTk9UIE5VTEwgY29sdW1uCitleHBsYWluIChjb3N0 cyBvZmYpCitzZWxlY3QgKiBmcm9tIHByZWRfdGFiIHQgd2hlcmUgdC5iIGlzIG5vdCBudWxsOwor ICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K KyBTZXEgU2NhbiBvbiBwcmVkX3RhYiB0CisgICBGaWx0ZXI6IChiIElTIE5PVCBOVUxMKQorKDIg cm93cykKKworLS0gVGVzdHMgZm9yIE9SIGNsYXVzZXMgaW4gcmVzdHJpY3Rpb24gY2xhdXNlcwor ZXhwbGFpbiAoY29zdHMgb2ZmKQorc2VsZWN0ICogZnJvbSBwcmVkX3RhYiB0IHdoZXJlIHQuYSBp cyBub3QgbnVsbCBvciB0LmIgPSAxOworICAgICAgIFFVRVJZIFBMQU4gICAgICAgCistLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0KKyBTZXEgU2NhbiBvbiBwcmVkX3RhYiB0CisoMSByb3cpCisKK2V4 cGxhaW4gKGNvc3RzIG9mZikKK3NlbGVjdCAqIGZyb20gcHJlZF90YWIgdCB3aGVyZSB0LmIgaXMg bm90IG51bGwgb3IgdC5hID0gMTsKKyAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAg ICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBTZXEgU2Nh biBvbiBwcmVkX3RhYiB0CisgICBGaWx0ZXI6ICgoYiBJUyBOT1QgTlVMTCkgT1IgKGEgPSAxKSkK KygyIHJvd3MpCisKKy0tIEFuIElTX05PVF9OVUxMIHF1YWwgaW4gam9pbiBjbGF1c2VzIGNhbiBi ZSBpZ25vcmVkIGlmCistLSBhKSBpdCdzIG9uIGEgTk9UIE5VTEwgY29sdW1uLCBhbmQKKy0tIGIp IGl0cyBWYXIgaXMgbm90IG51bGxlZCBieSBhbnkgb3V0ZXIgam9pbnMKK2V4cGxhaW4gKGNvc3Rz IG9mZikKK3NlbGVjdCAqIGZyb20gcHJlZF90YWIgdDEgbGVmdCBqb2luIHByZWRfdGFiIHQyIG9u IHRydWUgbGVmdCBqb2luIHByZWRfdGFiIHQzIG9uIHQyLmEgaXMgbm90IG51bGw7CisgICAgICAg ICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgTmVzdGVkIExvb3AgTGVmdCBK b2luCisgICAtPiAgU2VxIFNjYW4gb24gcHJlZF90YWIgdDEKKyAgIC0+ICBNYXRlcmlhbGl6ZQor ICAgICAgICAgLT4gIE5lc3RlZCBMb29wIExlZnQgSm9pbgorICAgICAgICAgICAgICAgLT4gIFNl cSBTY2FuIG9uIHByZWRfdGFiIHQyCisgICAgICAgICAgICAgICAtPiAgTWF0ZXJpYWxpemUKKyAg ICAgICAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwcmVkX3RhYiB0MworKDcgcm93cykK KworLS0gT3RoZXJ3aXNlIHRoZSBJU19OT1RfTlVMTCBxdWFsIGluIGpvaW4gY2xhdXNlcyBjYW5u b3QgYmUgaWdub3JlZAorZXhwbGFpbiAoY29zdHMgb2ZmKQorc2VsZWN0ICogZnJvbSBwcmVkX3Rh YiB0MSBsZWZ0IGpvaW4gcHJlZF90YWIgdDIgb24gdDEuYSA9IDEgbGVmdCBqb2luIHByZWRfdGFi IHQzIG9uIHQyLmEgaXMgbm90IG51bGw7CisgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAg ICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t CisgTmVzdGVkIExvb3AgTGVmdCBKb2luCisgICBKb2luIEZpbHRlcjogKHQyLmEgSVMgTk9UIE5V TEwpCisgICAtPiAgTmVzdGVkIExvb3AgTGVmdCBKb2luCisgICAgICAgICBKb2luIEZpbHRlcjog KHQxLmEgPSAxKQorICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHByZWRfdGFiIHQxCisgICAgICAg ICAtPiAgTWF0ZXJpYWxpemUKKyAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwcmVkX3Rh YiB0MgorICAgLT4gIE1hdGVyaWFsaXplCisgICAgICAgICAtPiAgU2VxIFNjYW4gb24gcHJlZF90 YWIgdDMKKyg5IHJvd3MpCisKKy0tIFRlc3RzIGZvciBPUiBjbGF1c2VzIGluIGpvaW4gY2xhdXNl cworZXhwbGFpbiAoY29zdHMgb2ZmKQorc2VsZWN0ICogZnJvbSBwcmVkX3RhYiB0MSBsZWZ0IGpv aW4gcHJlZF90YWIgdDIgb24gdHJ1ZSBsZWZ0IGpvaW4gcHJlZF90YWIgdDMgb24gdDIuYSBpcyBu b3QgbnVsbCBvciB0Mi5iID0gMTsKKyAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAg ICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0KKyBOZXN0ZWQgTG9vcCBMZWZ0IEpvaW4KKyAgIC0+ICBTZXEgU2NhbiBvbiBwcmVk X3RhYiB0MQorICAgLT4gIE1hdGVyaWFsaXplCisgICAgICAgICAtPiAgTmVzdGVkIExvb3AgTGVm dCBKb2luCisgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gcHJlZF90YWIgdDIKKyAgICAg ICAgICAgICAgIC0+ICBNYXRlcmlhbGl6ZQorICAgICAgICAgICAgICAgICAgICAgLT4gIFNlcSBT Y2FuIG9uIHByZWRfdGFiIHQzCisoNyByb3dzKQorCitleHBsYWluIChjb3N0cyBvZmYpCitzZWxl Y3QgKiBmcm9tIHByZWRfdGFiIHQxIGxlZnQgam9pbiBwcmVkX3RhYiB0MiBvbiB0MS5hID0gMSBs ZWZ0IGpvaW4gcHJlZF90YWIgdDMgb24gdDIuYSBpcyBub3QgbnVsbCBvciB0Mi5iID0gMTsKKyAg ICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgTmVzdGVkIExv b3AgTGVmdCBKb2luCisgICBKb2luIEZpbHRlcjogKCh0Mi5hIElTIE5PVCBOVUxMKSBPUiAodDIu YiA9IDEpKQorICAgLT4gIE5lc3RlZCBMb29wIExlZnQgSm9pbgorICAgICAgICAgSm9pbiBGaWx0 ZXI6ICh0MS5hID0gMSkKKyAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwcmVkX3RhYiB0MQorICAg ICAgICAgLT4gIE1hdGVyaWFsaXplCisgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gcHJl ZF90YWIgdDIKKyAgIC0+ICBNYXRlcmlhbGl6ZQorICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHBy ZWRfdGFiIHQzCisoOSByb3dzKQorCitkcm9wIHRhYmxlIHByZWRfdGFiOwpkaWZmIC0tZ2l0IGEv c3JjL3Rlc3QvcmVncmVzcy9wYXJhbGxlbF9zY2hlZHVsZSBiL3NyYy90ZXN0L3JlZ3Jlc3MvcGFy YWxsZWxfc2NoZWR1bGUKaW5kZXggY2Y0NmZhMzM1OS4uMjVmMDU5Njk3MSAxMDA2NDQKLS0tIGEv c3JjL3Rlc3QvcmVncmVzcy9wYXJhbGxlbF9zY2hlZHVsZQorKysgYi9zcmMvdGVzdC9yZWdyZXNz L3BhcmFsbGVsX3NjaGVkdWxlCkBAIC0xMTksNyArMTE5LDcgQEAgdGVzdDogcGxhbmNhY2hlIGxp bWl0IHBscGdzcWwgY29weTIgdGVtcCBkb21haW4gcmFuZ2VmdW5jcyBwcmVwYXJlIGNvbnZlcnNp b24gdHIKICMgVGhlIHN0YXRzIHRlc3QgcmVzZXRzIHN0YXRzLCBzbyBub3RoaW5nIGVsc2UgbmVl ZGluZyBzdGF0cyBhY2Nlc3MgY2FuIGJlIGluCiAjIHRoaXMgZ3JvdXAuCiAjIC0tLS0tLS0tLS0K LXRlc3Q6IHBhcnRpdGlvbl9qb2luIHBhcnRpdGlvbl9wcnVuZSByZWxvcHRpb25zIGhhc2hfcGFy dCBpbmRleGluZyBwYXJ0aXRpb25fYWdncmVnYXRlIHBhcnRpdGlvbl9pbmZvIHR1cGxlc29ydCBl eHBsYWluIGNvbXByZXNzaW9uIG1lbW9pemUgc3RhdHMKK3Rlc3Q6IHBhcnRpdGlvbl9qb2luIHBh cnRpdGlvbl9wcnVuZSByZWxvcHRpb25zIGhhc2hfcGFydCBpbmRleGluZyBwYXJ0aXRpb25fYWdn cmVnYXRlIHBhcnRpdGlvbl9pbmZvIHR1cGxlc29ydCBleHBsYWluIGNvbXByZXNzaW9uIG1lbW9p emUgc3RhdHMgcHJlZGljYXRlCiAKICMgZXZlbnRfdHJpZ2dlciBjYW5ub3QgcnVuIGNvbmN1cnJl bnRseSB3aXRoIGFueSB0ZXN0IHRoYXQgcnVucyBEREwKICMgb2lkam9pbnMgaXMgcmVhZC1vbmx5 LCB0aG91Z2gsIGFuZCBzaG91bGQgcnVuIGxhdGUgZm9yIGJlc3QgY292ZXJhZ2UKZGlmZiAtLWdp dCBhL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL3ByZWRpY2F0ZS5zcWwgYi9zcmMvdGVzdC9yZWdyZXNz L3NxbC9wcmVkaWNhdGUuc3FsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAu LjBiMmU0Y2QwYTYKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGVzdC9yZWdyZXNzL3NxbC9wcmVk aWNhdGUuc3FsCkBAIC0wLDAgKzEsNDggQEAKKy0tCistLSBUZXN0cyBmb3IgcHJlZGljYXRlIGhh bmRsaW5nCistLQorCistLQorLS0gdGVzdCB0aGF0IHJlc3RyaWN0aW9ucyB0aGF0IGFyZSBhbHdh eXMgdHJ1ZSBhcmUgaWdub3JlZAorLS0KKy0tIGN1cnJlbnRseSB3ZSBvbmx5IGNoZWNrIGZvciBO dWxsVGVzdCBxdWFscyBhbmQgT1IgY2xhdXNlcyB0aGF0IGluY2x1ZGUKKy0tIE51bGxUZXN0IHF1 YWxzLiAgV2UgbWF5IGV4dGVuZCBpdCBpbiB0aGUgZnV0dXJlLgorLS0KK2NyZWF0ZSB0YWJsZSBw cmVkX3RhYiAoYSBpbnQgbm90IG51bGwsIGIgaW50KTsKKworLS0gQW4gSVNfTk9UX05VTEwgcXVh bCBpbiByZXN0cmljdGlvbiBjbGF1c2VzIGNhbiBiZSBpZ25vcmVkIGlmIGl0J3Mgb24gYSBOT1QK Ky0tIE5VTEwgY29sdW1uCitleHBsYWluIChjb3N0cyBvZmYpCitzZWxlY3QgKiBmcm9tIHByZWRf dGFiIHQgd2hlcmUgdC5hIGlzIG5vdCBudWxsOworCistLSBPbiB0aGUgY29udHJhcnksIGFuIElT X05PVF9OVUxMIHF1YWwgaW4gcmVzdHJpY3Rpb24gY2xhdXNlcyBjYW4gbm90IGJlCistLSBpZ25v cmVkIGlmIGl0J3Mgbm90IG9uIGEgTk9UIE5VTEwgY29sdW1uCitleHBsYWluIChjb3N0cyBvZmYp CitzZWxlY3QgKiBmcm9tIHByZWRfdGFiIHQgd2hlcmUgdC5iIGlzIG5vdCBudWxsOworCistLSBU ZXN0cyBmb3IgT1IgY2xhdXNlcyBpbiByZXN0cmljdGlvbiBjbGF1c2VzCitleHBsYWluIChjb3N0 cyBvZmYpCitzZWxlY3QgKiBmcm9tIHByZWRfdGFiIHQgd2hlcmUgdC5hIGlzIG5vdCBudWxsIG9y IHQuYiA9IDE7CisKK2V4cGxhaW4gKGNvc3RzIG9mZikKK3NlbGVjdCAqIGZyb20gcHJlZF90YWIg dCB3aGVyZSB0LmIgaXMgbm90IG51bGwgb3IgdC5hID0gMTsKKworLS0gQW4gSVNfTk9UX05VTEwg cXVhbCBpbiBqb2luIGNsYXVzZXMgY2FuIGJlIGlnbm9yZWQgaWYKKy0tIGEpIGl0J3Mgb24gYSBO T1QgTlVMTCBjb2x1bW4sIGFuZAorLS0gYikgaXRzIFZhciBpcyBub3QgbnVsbGVkIGJ5IGFueSBv dXRlciBqb2lucworZXhwbGFpbiAoY29zdHMgb2ZmKQorc2VsZWN0ICogZnJvbSBwcmVkX3RhYiB0 MSBsZWZ0IGpvaW4gcHJlZF90YWIgdDIgb24gdHJ1ZSBsZWZ0IGpvaW4gcHJlZF90YWIgdDMgb24g dDIuYSBpcyBub3QgbnVsbDsKKworLS0gT3RoZXJ3aXNlIHRoZSBJU19OT1RfTlVMTCBxdWFsIGlu IGpvaW4gY2xhdXNlcyBjYW5ub3QgYmUgaWdub3JlZAorZXhwbGFpbiAoY29zdHMgb2ZmKQorc2Vs ZWN0ICogZnJvbSBwcmVkX3RhYiB0MSBsZWZ0IGpvaW4gcHJlZF90YWIgdDIgb24gdDEuYSA9IDEg bGVmdCBqb2luIHByZWRfdGFiIHQzIG9uIHQyLmEgaXMgbm90IG51bGw7CisKKy0tIFRlc3RzIGZv ciBPUiBjbGF1c2VzIGluIGpvaW4gY2xhdXNlcworZXhwbGFpbiAoY29zdHMgb2ZmKQorc2VsZWN0 ICogZnJvbSBwcmVkX3RhYiB0MSBsZWZ0IGpvaW4gcHJlZF90YWIgdDIgb24gdHJ1ZSBsZWZ0IGpv aW4gcHJlZF90YWIgdDMgb24gdDIuYSBpcyBub3QgbnVsbCBvciB0Mi5iID0gMTsKKworZXhwbGFp biAoY29zdHMgb2ZmKQorc2VsZWN0ICogZnJvbSBwcmVkX3RhYiB0MSBsZWZ0IGpvaW4gcHJlZF90 YWIgdDIgb24gdDEuYSA9IDEgbGVmdCBqb2luIHByZWRfdGFiIHQzIG9uIHQyLmEgaXMgbm90IG51 bGwgb3IgdDIuYiA9IDE7CisKK2Ryb3AgdGFibGUgcHJlZF90YWI7CisKLS0gCjIuMzEuMAoK --00000000000028aacf06001c3fec--