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 1pVaNo-0003N8-AK for pgsql-hackers@arkaria.postgresql.org; Fri, 24 Feb 2023 15:53:16 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1pVaNm-00040x-QB for pgsql-hackers@arkaria.postgresql.org; Fri, 24 Feb 2023 15:53:14 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1pVaNm-0003ps-1y for pgsql-hackers@lists.postgresql.org; Fri, 24 Feb 2023 15:53:14 +0000 Received: from mail-ed1-x52f.google.com ([2a00:1450:4864:20::52f]) by makus.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.92) (envelope-from ) id 1pVaNh-0003ak-GS for pgsql-hackers@lists.postgresql.org; Fri, 24 Feb 2023 15:53:12 +0000 Received: by mail-ed1-x52f.google.com with SMTP id cy6so50999135edb.5 for ; Fri, 24 Feb 2023 07:53:09 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=enterprisedb.com; s=google; h=in-reply-to:references:cc:to:from:content-language:subject :user-agent:mime-version:date:message-id:from:to:cc:subject:date :message-id:reply-to; bh=DVhLg6zFlPZ+cZwmDA5vtkN4lzJggIrPAZI8VBcEoYE=; b=ImsR5XekvzTbGrsLpwuUoRcUL0vpAZoSwTYmXHqnA27fXjDCaEdeSa5BF/ldu54bKo hGYZHdcGzTS04wgNW42EEJDJJHdHr/WhYUqwqLT75CfLtLIwGZozfDiCe+Xvy2D/9XBp 6+Hb1JDZVQbtp7rshAWy1W74JrbfE7s+p3eOBYyeiCUtKTr2CBXNsFkT5Z4t+/Afdp2h TXjIPRPQRKLSwHBXChrRT5fLA+AmFFmaAzd+DQ2E8AP46M2JwiOTQy0Ik+Xo/l94XLMI HAQFygaShv2jjkYU7Kt0fwhcCFWLg0OKqQBvu7FlYsZzJkm5eHkn2I1AiRGAkxL+B+mK 5SJg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=in-reply-to:references:cc:to:from:content-language:subject :user-agent:mime-version:date:message-id:x-gm-message-state:from:to :cc:subject:date:message-id:reply-to; bh=DVhLg6zFlPZ+cZwmDA5vtkN4lzJggIrPAZI8VBcEoYE=; b=Zk+s6dG/m4qKmVn1M/5LhtzbWHbWhbHq9/9JPPil50bnz5XRavuN8o3bYsAPdSd2a8 8savwLTCkd/HK6zmlp0FsZ2t1/bBRSyYVS1LAcOshV2hJCIVK3MliRCCN7GhwRUJoZre 0LSOQL/H1ty7XWZBSxqUwMhLLPCvN4oKFIbrxJu19g4nUv+Uwy+JzEpZLYFyAhxroM1K BAMCDdPYprvkcUDiX4b+qQ0BRBDD/MzRv0AOS55CNmChuEylCbtPaFt8euKqD5hsjKUD N3RwpKv2vhO5JCQtY9CrksyxJ2EdpjRXmMsovkBE2LQMZQQ8haGCtMm6XPsx7vBEawo6 IO4A== X-Gm-Message-State: AO0yUKXyMJegDLsm+DBTAMUqYzE4kOCYyBol67gg8q1WyI/K2w39tZXO 0IXafO9f4zEk2Uxp2kVzIlL8pXfKyUAdgVZ6djA98PJlhMd6jF21HUYjIKKGC/HfNqpYm8rkA/M cp9rNrqzH2uomI1r6ZO/ELnKCKsHGeeo7cSpGp+GGzpnkiNAVW/7lWGQp+Wvvh/pV+GKGJWLG/D g/AM/rc4wEkkB+IvCENsNKfNCalrSyIY8H7aZDYq6vig36V4K7AYDV X-Google-Smtp-Source: AK7set/MO3+BUOe8YY81z+6YuRxRDV4AT2DTISigH1FZpVhKWF4T4ldqqrEiCWD6mLRxt0dTDWLDDg== X-Received: by 2002:a05:6402:1653:b0:4ae:eab6:9ff8 with SMTP id s19-20020a056402165300b004aeeab69ff8mr22404518edx.13.1677253987383; Fri, 24 Feb 2023 07:53:07 -0800 (PST) Received: from [10.137.0.17] (static-84-42-175-93.bb.vodafone.cz. [84.42.175.93]) by smtp.gmail.com with ESMTPSA id q18-20020a50c352000000b004ad601533a3sm5657543edb.55.2023.02.24.07.53.06 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Fri, 24 Feb 2023 07:53:06 -0800 (PST) Content-Type: multipart/mixed; boundary="------------L1SG10kT0ZUc0hCgDIv70udx" Message-ID: <2c1c637b-3334-b0e3-b84a-324fd462646a@enterprisedb.com> Date: Fri, 24 Feb 2023 16:53:04 +0100 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:102.0) Gecko/20100101 Thunderbird/102.8.0 Subject: Re: Missing update of all_hasnulls in BRIN opclasses Content-Language: en-US From: Tomas Vondra To: Justin Pryzby Cc: Alvaro Herrera , Matthias van de Meent , pgsql-hackers@lists.postgresql.org References: <20221022080036.34git3yeyudlhalk@alvherre.pgsql> <84573b7d-f1bf-5138-2f2c-fb7dfdc53ebc@enterprisedb.com> <20221129203808.GB24131@telsasoft.com> <8a085e86-2d54-e944-3a8c-7c43fea6647b@enterprisedb.com> <20230107003754.GB7216@telsasoft.com> In-Reply-To: X-CLOUD-SEC-AV-Info: enterprisedb,google_mail,monitor X-CLOUD-SEC-AV-Sent: true X-Gm-Spam: 0 X-Gm-Phishy: 0 List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk This is a multi-part message in MIME format. --------------L1SG10kT0ZUc0hCgDIv70udx Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit On 1/9/23 00:34, Tomas Vondra wrote: > > I've been working on this over the past couple days, trying to polish > and commit it over the weekend - both into master and backbranches. > Sadly, the backpatching part turned out to be a bit more complicated > than I expected, because of the BRIN reworks in PG14 (done by me, as > foundation for the new opclasses, so ... well). > > Anyway, I got it done, but it's a bit uglier than I hoped for and I > don't feel like pushing this on Sunday midnight. I think it's correct, > but maybe another pass to polish it a bit more is better. > > So here are two patches - one for 11-13, the other for 14-master. > I spent a bit more time on this fix. I realized there are two more places that need fixes. Firstly, the placeholder tuple needs to be marked as "empty" too, so that it can be correctly updated by other backends etc. Secondly, union_tuples had a couple bugs in handling empty ranges (this is related to the placeholder tuple changes). I wonder what's the best way to test this in an automated way - it's very dependent on timing of the concurrent updated. For example we need to do something like this: T1: run pg_summarize_range() until it inserts the placeholder tuple T2: do an insert into the page range (updates placeholder) T1: continue pg_summarize_range() to merge into the placeholder But there are no convenient ways to do this, I think. I had to check the various cases using breakpoints in gdb etc. I'm not very happy with the union_tuples() changes - it's quite verbose, perhaps a bit too verbose. We have to check for empty ranges first, and then various combinations of allnulls/hasnulls flags for both BRIN tuples. There are 9 combinations, and the current code just checks them one by one - I was getting repeatedly confused by the original code, but maybe it's too much. As for the backpatch, I tried to keep it as close to the 14+ fixes as possible, but it effectively backports some of the 14+ BRIN changes. In particular, 14+ moved most of the NULL-handling logic from opclasses to brin.c, and I think it's reasonable to do that for the backbranches too. The alternative is to apply the same fix to every BRIN_PROCNUM_UNION opclass procedure out there. I guess doing that for minmax+inclusion is not a huge deal, but what about external opclasses? And without the fix the indexes are effectively broken. Fixing this outside in brin.c (in the union procedure) fixes this for every opclass procedure, without any actual limitation of functinality (14+ does that anyway). But maybe someone thinks this is a bad idea and we should do something else in the backbranches? regards -- Tomas Vondra EnterpriseDB: http://www.enterprisedb.com The Enterprise PostgreSQL Company --------------L1SG10kT0ZUc0hCgDIv70udx Content-Type: text/x-patch; charset=UTF-8; name="0001-Fix-handling-of-NULLs-in-BRIN-ind-14-master-20230224.patch" Content-Disposition: attachment; filename*0="0001-Fix-handling-of-NULLs-in-BRIN-ind-14-master-20230224.pa"; filename*1="tch" Content-Transfer-Encoding: base64 RnJvbSAwYWJmNDdmMzExYmZiMGIwM2U1MzQ5YjEyYzhlNjdhZDNkNWMwODQyIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBUb21hcyBWb25kcmEgPHRvbWFzLnZvbmRyYUBwb3N0 Z3Jlc3FsLm9yZz4KRGF0ZTogU3VuLCA4IEphbiAyMDIzIDE2OjQzOjA2ICswMTAwClN1Ympl Y3Q6IFtQQVRDSF0gRml4IGhhbmRsaW5nIG9mIE5VTExzIGluIEJSSU4gaW5kZXhlcwoKQlJJ TiBpbmRleGVzIGRpZCBub3QgcHJvcGVybHkgZGlzdGluZ3Vpc2ggYmV0d2VlbiBzdW1tYXJp ZXMgZm9yIGVtcHR5CihubyByb3dzKSBhbmQgYWxsLU5VTEwgcmFuZ2VzLiBBbGwgc3VtbWFy aWVzIHdlcmUgaW5pdGlhbGl6ZWQgd2l0aAphbGxudWxscz10cnVlLCBhbmQgdGhlIG9wY2xh c3NlcyBzaW1wbHkgcmVzZXQgYWxsbnVsbHMgdG8gZmFsc2Ugd2hlbgpwcm9jZXNzaW5nIHRo ZSBmaXJzdCBub24tTlVMTCB2YWx1ZS4gVGhpcyBob3dldmVyIGZhaWxzIGlmIHRoZSByYW5n ZQpzdGFydHMgd2l0aCBhIE5VTEwgdmFsdWUgKG9yIGEgc2VxdWVuY2Ugb2YgTlVMTCB2YWx1 ZXMpLCBpbiB3aGljaCBjYXNlCndlIGZvcmdldCB0aGUgcmFuZ2UgY29udGFpbnMgTlVMTCB2 YWx1ZXMuCgpUaGlzIGhhcHBlbnMgYmVjYXVzZSB0aGUgYWxsbnVsbHMgZmxhZyBpcyB1c2Vk IGZvciB0d28gc2VwYXJhdGUKcHVycG9zZXMgLSB0byBtYXJrIGVtcHR5IHJhbmdlcyAobm90 IHJlcHJlc2VudGluZyBhbnkgcm93cyB5ZXQpIGFuZApyYW5nZXMgY29udGFpbmluZyBvbmx5 IE5VTEwgdmFsdWVzLgoKT3BjbGFzc2VzIGRvbid0IGtub3cgd2hpY2ggb2YgdGhlc2UgY2Fz ZXMgaXQgaXMsIGFuZCBzbyBkb24ndCBrbm93CndoZXRoZXIgdG8gc2V0IGhhc251bGxzPXRy dWUuIFNldHRpbmcgaGFzbnVsbHM9dHJ1ZSBpbiBib3RoIGNhc2VzIHdvdWxkCm1ha2UgaXQg Y29ycmVjdCwgYnV0IGl0IHdvdWxkIGFsc28gbWFrZSBCUklOIGluZGV4ZXMgdXNlbGVzcyBm b3IgcXVlcmllcwp3aXRoIElTIE5VTEwgY2xhdXNlcyAtIGFsbCByYW5nZXMgc3RhcnQgZW1w dHkgKGFuZCB0aHVzIGFsbG51bGxzPXRydWUpLApzbyBhbGwgcmFuZ2VzIHdvdWxkIGVuZCB1 cCB3aXRoIGVpdGhlciBhbGxudWxscz10cnVlIG9yIGhhc251bGxzPXRydWUuCgpUaGUgc2V2 ZXJpdHkgb2YgdGhlIGlzc3VlIGlzIHNvbWV3aGF0IHJlZHVjZWQgYnkgdGhlIGZhY3QgdGhh dCBpdCBvbmx5CmhhcHBlbnMgd2hlbiBhZGRpbmcgdmFsdWVzIHRvIGFuIGV4aXN0aW5nIHN1 bW1hcnkgd2l0aCBhbGxudWxscz10cnVlLApub3Qgd2hlbiB0aGUgc3VtbWFyaXphdGlvbiBp cyBwcm9jZXNzaW5nIHZhbHVlcyBpbiBidWxrIChlLmcuIGR1cmluZwpDUkVBVEUgSU5ERVgg b3IgYXV0b21hdGljIHN1bW1hcml6YXRpb24pLiBJbiB0aGlzIGNhc2UgdGhlIGZsYWdzIHdl cmUKdXBkYXRlZCBpbiBhIHNsaWdodGx5IGRpZmZlcmVudCB3YXksIG5vdCBmb3JnZXR0aW5n IHRoZSBOVUxMIHZhbHVlcy4KClRoZSBiZXN0IHNvbHV0aW9uIHdvdWxkIGJlIHRvIGludHJv ZHVjZSBhIG5ldyBmbGFnIG1hcmtpbmcgaW5kZXggdHVwbGVzCnJlcHJlc2VudGluZyByYW5n ZXMgd2l0aCBubyByb3dzLCBidXQgdGhhdCB3b3VsZCBicmVhayBvbi1kaXNrIGZvcm1hdAph bmQvb3IgQUJJLCBkZXBlbmRpbmcgb24gd2hlcmUgd2UgcHV0IHRoZSBmbGFnLiBDb25zaWRl cmluZyB3ZSBuZWVkIHRvCmJhY2twYXRjaCB0aGlzLCB0aGF0J3Mgbm90IGFjY2VwdGFibGUu CgpTbyBpbnN0ZWFkIHdlIHVzZSBhbiAiaW1wb3NzaWJsZSIgY29tYmluYXRpb24gb2YgYm90 aCBmbGFncyAoYWxsbnVsbHMKYW5kIGhhc251bGxzKSBzZXQgdG8gdHJ1ZSwgdG8gbWFyayAi ZW1wdHkiIHJhbmdlcyB3aXRoIG5vIHJvd3MuIEluCnByaW5jaXBsZSAiZW1wdHkiIGlzIGEg ZmVhdHVyZSBvZiB0aGUgd2hvbGUgaW5kZXggdHVwbGUsIHdoaWNoIG1heQpjb250YWluIG11 bHRpcGxlIHN1bW1hcmllcyBpbiBhIG11bHRpLWNvbHVtbiBpbmRleCwgYnV0IHRoaXMgaXMg d2hlcmUKdGhlIGZsYWdzIGFyZSwgdW5mb3J0dW5hdGVseS4KCldlIGNvdWxkIGFsc28gc2tp cCBzdG9yaW5nIGluZGV4IHR1cGxlcyBmb3IgZW1wdHkgc3VtbWFyaWVzLCBidXQgdGhlbgp3 ZSdkIGhhdmUgdG8gYWx3YXlzIHByb2Nlc3Mgc3VjaCByYW5nZXMgLSBldmVuIGlmIHRoZXJl IGFyZSBubyByb3dzIGluCmxhcmdlIHBhcnRzIG9mIHRoZSB0YWJsZSAoZS5nLiBhZnRlciBh IGJ1bGsgREVMRVRFKSwgaXQgd291bGQgc3RpbGwKcmVxdWlyZSByZWFkaW5nIHRoZSBwYWdl cyBldGMuIFNvIHdlIHN0b3JlIHRoZW0sIGJ1dCBpZ25vcmUgdGhlbSB3aGVuCmJ1aWxkaW5n IHRoZSBiaXRtYXAuCgpCYWNrcGF0Y2ggdG8gMTEuIFRoZSBpc3N1ZSBleGlzdHMgc2luY2Ug QlJJTiBpbmRleGVzIHdlcmUgaW50cm9kdWNlZCBpbgo5LjUsIGJ1dCBvbGRlciByZWxlYXNl cyBhcmUgYWxyZWFkeSBFT0wuCgpCYWNrcGF0Y2gtdGhyb3VnaDogMTEKUmV2aWV3ZWQtYnk6 IEp1c3RpbiBQcnl6YnksIE1hdHRoaWFzIHZhbiBkZSBNZWVudApEaXNjdXNzaW9uOiBodHRw czovL3Bvc3Rnci5lcy9tLzQwMjQzMGU0LTdkOWQtNmNmMS0wOWVmLTQ2NGQ4MGFmZmYzYkBl bnRlcnByaXNlZGIuY29tCi0tLQogc3JjL2JhY2tlbmQvYWNjZXNzL2JyaW4vYnJpbi5jICAg ICAgICAgICAgICAgIHwgMjIzICsrKysrKysrKysrKysrKysrLQogc3JjL2JhY2tlbmQvYWNj ZXNzL2JyaW4vYnJpbl90dXBsZS5jICAgICAgICAgIHwgIDMxICsrLQogLi4uc3VtbWFyaXph dGlvbi1hbmQtaW5wcm9ncmVzcy1pbnNlcnRpb24ub3V0IHwgICA4ICstCiAuLi51bW1hcml6 YXRpb24tYW5kLWlucHJvZ3Jlc3MtaW5zZXJ0aW9uLnNwZWMgfCAgIDEgKwogNCBmaWxlcyBj aGFuZ2VkLCAyNDQgaW5zZXJ0aW9ucygrKSwgMTkgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0 IGEvc3JjL2JhY2tlbmQvYWNjZXNzL2JyaW4vYnJpbi5jIGIvc3JjL2JhY2tlbmQvYWNjZXNz L2JyaW4vYnJpbi5jCmluZGV4IGI1YTVmYTdiMzM0Li5hN2MyYzA3MmJkNCAxMDA2NDQKLS0t IGEvc3JjL2JhY2tlbmQvYWNjZXNzL2JyaW4vYnJpbi5jCisrKyBiL3NyYy9iYWNrZW5kL2Fj Y2Vzcy9icmluL2JyaW4uYwpAQCAtNzAsNiArNzAsOCBAQCB0eXBlZGVmIHN0cnVjdCBCcmlu T3BhcXVlCiAKICNkZWZpbmUgQlJJTl9BTExfQkxPQ0tSQU5HRVMJSW52YWxpZEJsb2NrTnVt YmVyCiAKKyNkZWZpbmUgQlJJTl9SQU5HRV9JU19FTVBUWShjb2wpICgoY29sKS0+YnZfYWxs bnVsbHMgJiYgKGNvbCktPmJ2X2hhc251bGxzKQorCiBzdGF0aWMgQnJpbkJ1aWxkU3RhdGUg KmluaXRpYWxpemVfYnJpbl9idWlsZHN0YXRlKFJlbGF0aW9uIGlkeFJlbCwKIAkJCQkJCQkJ CQkJCSAgQnJpblJldm1hcCAqcmV2bWFwLCBCbG9ja051bWJlciBwYWdlc1BlclJhbmdlKTsK IHN0YXRpYyB2b2lkIHRlcm1pbmF0ZV9icmluX2J1aWxkc3RhdGUoQnJpbkJ1aWxkU3RhdGUg KnN0YXRlKTsKQEAgLTU5MSw2ICs1OTMsMTcgQEAgYnJpbmdldGJpdG1hcChJbmRleFNjYW5E ZXNjIHNjYW4sIFRJREJpdG1hcCAqdGJtKQogCiAJCQkJCWJ2YWwgPSAmZHR1cC0+YnRfY29s dW1uc1thdHRubyAtIDFdOwogCisJCQkJCS8qCisJCQkJCSAqIElmIHRoZSByYW5nZSBoYXMg Ym90aCBhbGxudWxscyBhbmQgaGFzbnVsbHMgc2V0LCBpdCBtZWFucworCQkJCQkgKiB0aGVy ZSBhcmUgbm8gcm93cyBpbiB0aGUgcmFuZ2UsIHNvIHdlIGNhbiBza2lwIGl0ICh3ZSBrbm93 CisJCQkJCSAqIHRoZXJlJ3Mgbm90aGluZyB0byBtYXRjaCkuCisJCQkJCSAqLworCQkJCQlp ZiAoQlJJTl9SQU5HRV9JU19FTVBUWShidmFsKSkKKwkJCQkJeworCQkJCQkJYWRkcmFuZ2Ug PSBmYWxzZTsKKwkJCQkJCWJyZWFrOworCQkJCQl9CisKIAkJCQkJLyoKIAkJCQkJICogRmly c3QgY2hlY2sgaWYgdGhlcmUgYXJlIGFueSBJUyBbTk9UXSBOVUxMIHNjYW4ga2V5cywKIAkJ CQkJICogYW5kIGlmIHdlJ3JlIHZpb2xhdGluZyB0aGVtLiBJbiB0aGF0IGNhc2Ugd2UgY2Fu CkBAIC0xNjE1LDI2ICsxNjI4LDk5IEBAIHVuaW9uX3R1cGxlcyhCcmluRGVzYyAqYmRlc2Ms IEJyaW5NZW1UdXBsZSAqYSwgQnJpblR1cGxlICpiKQogCiAJCWlmIChvcGNpbmZvLT5vaV9y ZWd1bGFyX251bGxzKQogCQl7Ci0JCQkvKiBBZGp1c3QgImhhc251bGxzIi4gKi8KLQkJCWlm ICghY29sX2EtPmJ2X2hhc251bGxzICYmIGNvbF9iLT5idl9oYXNudWxscykKLQkJCQljb2xf YS0+YnZfaGFzbnVsbHMgPSB0cnVlOworCQkJLyoKKwkJCSAqIElmIEIgaXMgZW1wdHkgKHJl cHJlc2VudHMgbm8gcm93cyksIGlnbm9yZSBpdCBhbmQganVzdCBrZWVwCisJCQkgKiBBIGFz IGlzIChtaWdodCBiZSBlbXB0eSBldGMuKS4KKwkJCSAqLworCQkJaWYgKEJSSU5fUkFOR0Vf SVNfRU1QVFkoY29sX2IpKQorCQkJCWNvbnRpbnVlOworCisJCQkvKgorCQkJICogTm93IHdl IGtub3cgQiBpcyBub3QgZW1wdHkgLSBpdCBoYXMgZWl0aGVyIE5VTExzIG9yIGRhdGEsIG9y CisJCQkgKiBzb21lIGNvbWJpbmF0aW9uIG9mIGl0LiBXZSBuZWVkIHRvIG1lcmdlIGl0IGlu dG8gQSBzb21laG93LgorCQkJICoKKwkJCSAqIElmIEEgaXMgZW1wdHksIHdlIHNpbXBseSBj b3B5IGFsbCB0aGUgZmxhZ3MgYW5kIGRhdGEgZnJvbSBCLgorCQkJICovCisJCQlpZiAoQlJJ Tl9SQU5HRV9JU19FTVBUWShjb2xfYSkpCisJCQl7CisJCQkJaW50CQlpOworCisJCQkJY29s X2EtPmJ2X2FsbG51bGxzID0gY29sX2ItPmJ2X2FsbG51bGxzOworCQkJCWNvbF9hLT5idl9o YXNudWxscyA9IGNvbF9iLT5idl9oYXNudWxsczsKKworCQkJCS8qIElmIEIgaGFzIG5vIGRh dGEsIHdlJ3JlIGRvbmUuICovCisJCQkJaWYgKGNvbF9iLT5idl9hbGxudWxscykKKwkJCQkJ Y29udGludWU7CisKKwkJCQlmb3IgKGkgPSAwOyBpIDwgb3BjaW5mby0+b2lfbnN0b3JlZDsg aSsrKQorCQkJCQljb2xfYS0+YnZfdmFsdWVzW2ldID0KKwkJCQkJCWRhdHVtQ29weShjb2xf Yi0+YnZfdmFsdWVzW2ldLAorCQkJCQkJCQkgIG9wY2luZm8tPm9pX3R5cGNhY2hlW2ldLT50 eXBieXZhbCwKKwkJCQkJCQkJICBvcGNpbmZvLT5vaV90eXBjYWNoZVtpXS0+dHlwbGVuKTsK IAotCQkJLyogSWYgdGhlcmUgYXJlIG5vIHZhbHVlcyBpbiBCLCB0aGVyZSdzIG5vdGhpbmcg bGVmdCB0byBkby4gKi8KLQkJCWlmIChjb2xfYi0+YnZfYWxsbnVsbHMpCiAJCQkJY29udGlu dWU7CisJCQl9CiAKIAkJCS8qCi0JCQkgKiBBZGp1c3QgImFsbG51bGxzIi4gIElmIEEgZG9l c24ndCBoYXZlIHZhbHVlcywganVzdCBjb3B5IHRoZQotCQkJICogdmFsdWVzIGZyb20gQiBp bnRvIEEsIGFuZCB3ZSdyZSBkb25lLiAgV2UgY2Fubm90IHJ1biB0aGUKLQkJCSAqIG9wZXJh dG9ycyBpbiB0aGlzIGNhc2UsIGJlY2F1c2UgdmFsdWVzIGluIEEgbWlnaHQgY29udGFpbgot CQkJICogZ2FyYmFnZS4gIE5vdGUgd2UgYWxyZWFkeSBlc3RhYmxpc2hlZCB0aGF0IEIgY29u dGFpbnMgdmFsdWVzLgorCQkJICogQm90aCBBIGFuZCBCIGFyZSBub3QgZW1wdHksIGFuZCB3 ZSBuZWVkIHRvIG1lcmdlIEIgaW50byBBLgorCQkJICogVGhlcmUgYXJlIG11bHRpcGxlIGNv bWJpbmF0aW9ucyBvZiBhbGxudWxscy9oYXNudWxscyBmbGFncy4KKwkJCSAqIFdlJ3ZlIGhh bmRsZWQgdGhlICJlbXB0eSIgY2FzZSBvbiBlaXRoZXIgc2lkZSBhYm92ZSwgc28gd2UKKwkJ CSAqIGNhbiBpZ25vcmUgdGhvc2UgY2FzZXMgLSB3aGljaCBsZWF2ZXMgMyBmbGFnIGNvbWJp bmF0aW9ucworCQkJICogb24gZWFjaCBzaWRlLCBzbyA5IGNvbWJpbmF0aW9ucyBpbiB0b3Rh bC4KKwkJCSAqCisJCQkgKiBBOmFsbCAgQTpoYXMgIEI6YWxsICBCOmhhcworCQkJICogdHJ1 ZSAgIGZhbHNlICB0cnVlICAgZmFsc2UgIC0gbm90aGluZyB0byBkbworCQkJICogdHJ1ZSAg IGZhbHNlICBmYWxzZSAgdHJ1ZSAgIC0gc2V0IEE6aGFzPXRydWUsIGNvcHkgZnJvbSBCCisJ CQkgKiB0cnVlICAgZmFsc2UgIGZhbHNlICBmYWxzZSAgLSBzZXQgQTpoYXM9dHJ1ZSwgY29w eSBmcm9tIEIKKwkJCSAqCisJCQkgKiBmYWxzZSAgdHJ1ZSAgIHRydWUgICBmYWxzZSAgLSBu b3RoaW5nIHRvIGRvCisJCQkgKiBmYWxzZSAgdHJ1ZSAgIGZhbHNlICB0cnVlICAgLSBmbGFn cyBPSywgY2FsbCB1bmlvbiBwcm9jCisJCQkgKiBmYWxzZSAgdHJ1ZSAgIGZhbHNlICBmYWxz ZSAgLSBmbGFncyBPSywgY2FsbCB1bmlvbiBwcm9jCisJCQkgKgorCQkJICogZmFsc2UgIGZh bHNlICB0cnVlICAgZmFsc2UgIC0gc2V0IEE6aGFzPXRydWUKKwkJCSAqIGZhbHNlICBmYWxz ZSAgZmFsc2UgIHRydWUgICAtIHNldCBBOmhhcz10cnVlLCBjYWxsIHVuaW9uIHByb2MKKwkJ CSAqIGZhbHNlICBmYWxzZSAgZmFsc2UgIGZhbHNlICAtIGZsYWdzIE9LLCBjYWxsIHVuaW9u IHByb2MKIAkJCSAqLwotCQkJaWYgKGNvbF9hLT5idl9hbGxudWxscykKKwkJCWlmIChjb2xf YS0+YnZfYWxsbnVsbHMgJiYgY29sX2ItPmJ2X2FsbG51bGxzKQorCQkJeworCQkJCS8qIG5v dGhpbmcgdG8gZG8gLSBib3RoIHNpZGVzIGFyZSBOVUxMLW9ubHkgKi8KKwkJCQljb250aW51 ZTsKKwkJCX0KKwkJCWVsc2UgaWYgKGNvbF9hLT5idl9hbGxudWxscyAmJiBjb2xfYi0+YnZf aGFzbnVsbHMpCiAJCQl7Ci0JCQkJaW50CQkJaTsKKwkJCQlpbnQJCWk7CisJCQkJLyoKKwkJ CQkgKiBBIGlzIE5VTEwtb25seSwgYnV0IEIgaGFzIHNvbWUgbm9uLU5VTEwgdmFsdWVzIHRv by4gU28gdGhlCisJCQkJICogcmVzdWx0IGhhcyBib3RoIE5VTExzIGFuZCBub24tTlVMTCB2 YWx1ZXMuCisJCQkJICovCisJCQkJY29sX2EtPmJ2X2FsbG51bGxzID0gZmFsc2U7CisJCQkJ Y29sX2EtPmJ2X2hhc251bGxzID0gdHJ1ZTsKIAorCQkJCS8qIGNvcHkgZGF0YSBmcm9tIEIg dG8gQSAqLworCQkJCWZvciAoaSA9IDA7IGkgPCBvcGNpbmZvLT5vaV9uc3RvcmVkOyBpKysp CisJCQkJCWNvbF9hLT5idl92YWx1ZXNbaV0gPQorCQkJCQkJZGF0dW1Db3B5KGNvbF9iLT5i dl92YWx1ZXNbaV0sCisJCQkJCQkJCSAgb3BjaW5mby0+b2lfdHlwY2FjaGVbaV0tPnR5cGJ5 dmFsLAorCQkJCQkJCQkgIG9wY2luZm8tPm9pX3R5cGNhY2hlW2ldLT50eXBsZW4pOworCisJ CQkJY29udGludWU7CisJCQl9CisJCQllbHNlIGlmIChjb2xfYS0+YnZfYWxsbnVsbHMpCS8q IEIgaGFzIG5vIE5VTExzICovCisJCQl7CisJCQkJaW50CQlpOworCisJCQkJLyoKKwkJCQkg KiBBIGlzIE5VTEwtb25seSwgYnV0IEIgaGFzIHNvbWUgbm9uLU5VTEwgdmFsdWVzIHRvby4g U28gdGhlCisJCQkJICogcmVzdWx0IGhhcyBib3RoIE5VTExzIGFuZCBub24tTlVMTCB2YWx1 ZXMuCisJCQkJICoKKwkJCQkgKiBYWFggVGhpcyBpcyB0aGUgc2FtZSBhcyB0aGUgcHJlY2Vk aW5nIGJyYW5jaCwgYnV0IEkndmUgbGVmdAorCQkJCSAqIGl0IGhlcmUgdG8ga2VlcCB0aGUg YnJhbmNoZXMgbWFwcGVkIDE6MSB0byB0aGUgdGFibGUgb2YKKwkJCQkgKiBjb21iaW5hdGlv bnMuCisJCQkJICovCiAJCQkJY29sX2EtPmJ2X2FsbG51bGxzID0gZmFsc2U7CisJCQkJY29s X2EtPmJ2X2hhc251bGxzID0gdHJ1ZTsKIAorCQkJCS8qIGNvcHkgZGF0YSBmcm9tIEIgdG8g QSAqLwogCQkJCWZvciAoaSA9IDA7IGkgPCBvcGNpbmZvLT5vaV9uc3RvcmVkOyBpKyspCiAJ CQkJCWNvbF9hLT5idl92YWx1ZXNbaV0gPQogCQkJCQkJZGF0dW1Db3B5KGNvbF9iLT5idl92 YWx1ZXNbaV0sCkBAIC0xNjQzLDYgKzE3MjksNTUgQEAgdW5pb25fdHVwbGVzKEJyaW5EZXNj ICpiZGVzYywgQnJpbk1lbVR1cGxlICphLCBCcmluVHVwbGUgKmIpCiAKIAkJCQljb250aW51 ZTsKIAkJCX0KKwkJCWVsc2UgaWYgKGNvbF9hLT5idl9oYXNudWxscyAmJiBjb2xfYi0+YnZf YWxsbnVsbHMpCisJCQl7CisJCQkJLyogTm90aGluZyB0byBkbyAoZmxhZ3MgYXJlIGNvcnJl Y3QsIG5vIGRhdGEgdG8gY29weSkuICovCisJCQkJY29udGludWU7CisJCQl9CisJCQllbHNl IGlmIChjb2xfYS0+YnZfaGFzbnVsbHMgJiYgY29sX2ItPmJ2X2hhc251bGxzKQorCQkJewor CQkJCS8qCisJCQkJICogRmxhZ3MgYXJlIGNvcnJlY3QsIGJ1dCBib3RoIEEgYW5kIEIgaGF2 ZSBub24tTlVMTCB2YWx1ZXMuCisJCQkJICogU28gd2UgaGF2ZSB0byBjYWxsIHRoZSBzdXBw b3J0IHByb2MgQlJJTl9QUk9DTlVNX1VOSU9OCisJCQkJICogKHNvIG5vICdjb250aW51ZScg aGVyZSkuCisJCQkJICovCisJCQl9CisJCQllbHNlIGlmIChjb2xfYS0+YnZfaGFzbnVsbHMp CS8qIEIgaGFzIG5vIE5VTExzICovCisJCQl7CisJCQkJLyoKKwkJCQkgKiBCIGhhcyBubyBO VUxMIHZhbHVlcywgc28gZmxhZ3MgYXJlIE9LLiBCdXQgYm90aCBzaWRlcyBoYXZlCisJCQkJ ICogc29tZSBub24tTlVMTCB2YWx1ZXMsIHNvIHdlIGhhdmUgdG8gY2FsbCB0aGUgc3VwcG9y dCBwcm9jCisJCQkJICogKHNvIG5vICdjb250aW51ZScgaGVyZSkuCisJCQkJICoKKwkJCQkg KiBYWFggU2FtZSBhcyB0aGUgcHJlY2VkaW5nIGJyYW5jaCwgYnV0IGtlcHQgZm9yIDE6MSBt YXBwaW5nLgorCQkJCSAqLworCQkJfQorCQkJZWxzZSBpZiAoY29sX2ItPmJ2X2FsbG51bGxz KQkvKiBBIGhhcyBubyBOVUxMcyAqLworCQkJeworCQkJCS8qCisJCQkJICogSnVzdCB1cGRh dGUgdGhlIGhhc251bGxzIGZsYWcgdG8gcmVtZW1iZXIgQiBoYXMgTlVMTCB2YWx1ZXMKKwkJ CQkgKiBhbmQgd2UncmUgZG9uZSAobm8gZGF0YSBub24tTlVMTCB2YWx1ZXMgdG8gY29weS9t ZXJnZSkuCisJCQkJICovCisJCQkJY29sX2EtPmJ2X2hhc251bGxzID0gdHJ1ZTsKKwkJCQlj b250aW51ZTsKKwkJCX0KKwkJCWVsc2UgaWYgKGNvbF9iLT5idl9oYXNudWxscykJLyogQSBo YXMgbm8gTlVMTHMgKi8KKwkJCXsKKwkJCQkvKgorCQkJCSAqIFVwZGF0ZSB0aGUgaGFzbnVs bHMgZmxhZyB0byByZW1lbWJlciBCIGhhcyBOVUxMIHZhbHVlcywgYnV0CisJCQkJICogYm90 aCBzaWRlcyBoYXZlIHNvbWUgbm9uLU5VTEwgZGF0YSBzbyB3ZSBuZWVkdG8gY2FsbCB0aGUK KwkJCQkgKiBCUklOX1BST0NOVU1fVU5JT04gcHJvY2VkdXJlIChzbyBubyAnY29udGludWUn IGhlcmUpLgorCQkJCSAqLworCQkJCWNvbF9hLT5idl9oYXNudWxscyA9IHRydWU7CisJCQl9 CisJCQllbHNlCisJCQl7CisJCQkJLyoKKwkJCQkgKiBOZWl0aGVyIHNpZGUgaGFzIGFueSBO VUxMIHZhbHVlcywgYm90aCBzaWRlcyBoYXZlIG5vbi1OVUxMCisJCQkJICogdmFsdWVzLCBz byB3ZSBuZWVkIHRvIGNhbGwgdGhlIEJSSU5fUFJPQ05VTV9VTklPTiBwcm9jIChzbworCQkJ CSAqIG5vICdjb250aW51ZScgaGVyZSkuCisJCQkJICovCisJCQl9CiAJCX0KIAogCQl1bmlv bkZuID0gaW5kZXhfZ2V0cHJvY2luZm8oYmRlc2MtPmJkX2luZGV4LCBrZXlubyArIDEsCkBA IC0xNzE3LDE5ICsxODUyLDY3IEBAIGFkZF92YWx1ZXNfdG9fcmFuZ2UoUmVsYXRpb24gaWR4 UmVsLCBCcmluRGVzYyAqYmRlc2MsIEJyaW5NZW1UdXBsZSAqZHR1cCwKIAkJRGF0dW0JCXJl c3VsdDsKIAkJQnJpblZhbHVlcyAqYnZhbDsKIAkJRm1nckluZm8gICAqYWRkVmFsdWU7CisJ CWJvb2wJCWhhc251bGxzOwogCiAJCWJ2YWwgPSAmZHR1cC0+YnRfY29sdW1uc1trZXlub107 CiAKKwkJLyoKKwkJICogRG9lcyB0aGUgcmFuZ2UgaGF2ZSBhY3R1YWwgTlVMTCB2YWx1ZXM/ IEVpdGhlciBvZiB0aGUgZmxhZ3MgY2FuCisJCSAqIGJlIHNldCwgYnV0IHdlIGlnbm9yZSB0 aGUgc3RhdGUgYmVmb3JlIGFkZGluZyBmaXJzdCByb3cuCisJCSAqCisJCSAqIFdlIGhhdmUg dG8gcmVtZW1iZXIgdGhpcywgYmVjYXVzZSB3ZSdsbCBtb2RpZnkgdGhlIGZsYWdzIGFuZCB3 ZQorCQkgKiBuZWVkIHRvIGtub3cgaWYgdGhlIHJhbmdlIHN0YXJ0ZWQgYXMgZW1wdHkuCisJ CSAqLworCQloYXNudWxscyA9ICghQlJJTl9SQU5HRV9JU19FTVBUWShidmFsKSkgJiYKKwkJ CQkgICAoYnZhbC0+YnZfaGFzbnVsbHMgfHwgYnZhbC0+YnZfYWxsbnVsbHMpOworCisJCS8q CisJCSAqIFdlIG5lZWQgdG8gY29uc2lkZXIgd2hldGhlciB0aGUgcmFuZ2UgaXMgZW1wdHkg KG5vdCByZXByZXNlbnRpbmcKKwkJICogYW55IHJvd3MgeWV0KSwgaS5lLiBpZiBpdCBoYXMg Ym90aCBmbGFncyAoYWxsbnVsbHMgaGFzbnVsbHMpIHNldAorCQkgKiB0byB0cnVlLgorCQkg KgorCQkgKiBJZiB0aGUgcmFuZ2UgaXMgZW1wdHksIHdlIGNsZWFyIHRoZSBoYXNudWxscyBm bGFnIC0gYWZ0ZXIgYWRkaW5nCisJCSAqIGEgdmFsdWUgaXQgd29uJ3QgYmUgZW1wdHkgYW55 bW9yZS4gRWl0aGVyIGl0J2xsIGJlIGFsbC1OVUxMIChhbmQKKwkJICogbGVhdmluZyBhbGxu dWxscz10cnVlIGNvdmVycyB0aGF0KSwgb3IgaXQgd2lsbCBoYXZlIG5vIE5VTExzIGF0CisJ CSAqIGFsbCAoYnV0IGJ1aWxkaW5nIHRoZSBzdGF0ZSBpcyB1cCB0byB0aGUgb3BjbGFzcyku CisJCSAqCisJCSAqIElmIHRoZSByYW5nZSBpcyBub3QgZW1wdHksIHdlIHJlbWVtYmVyIGlm IHRoZXJlIGFyZSBOVUxMIHZhbHVlcy4KKwkJICogSW4gdGhpcyBjYXNlIGJvdGggZmxhZ3Mg Y2FuJ3QgYmUgc2V0IHRvIHRydWUgKHRoYXQnZCBiZSBlbXB0eQorCQkgKiByYW5nZSksIHNv IGl0J3MgZWl0aGVyIGFsbG51bGxzPXRydWUgb3IgaGFzbnVsbHM9dHJ1ZS4gQnV0IHRoZQor CQkgKiBvcGNsYXNzZXMgY2xlYXIgYWxsbnVsbHMgd2hlbiBhZGRpbmcgdGhlIGZpcnN0IG5v bi1OVUxMIHZhbHVlLAorCQkgKiBzbyB3ZSBuZWVkIHRvIHJlbWVtYmVyIHRoaXMuCisJCSAq CisJCSAqIFdoZW4gYWRkaW5nIGEgbnVsbCB2YWx1ZSB3ZSBjYW4gZG8gZXZlcnl0aGluZyBs b2NhbGx5LCB3aXRob3V0CisJCSAqIGNhbGxpbmcgQlJJTl9QUk9DTlVNX0FERFZBTFVFLgor CQkgKi8KKwkJaWYgKEJSSU5fUkFOR0VfSVNfRU1QVFkoYnZhbCkpCisJCXsKKwkJCWJ2YWwt PmJ2X2hhc251bGxzID0gZmFsc2U7CisJCQltb2RpZmllZCA9IHRydWU7CisJCX0KKworCQkv KgorCQkgKiBJZiB0aGUgdmFsdWUgd2UncmUgYWRkaW5nIGlzIE5VTEwsIGhhbmRsZSBpdCBs b2NhbGx5LiBPdGhlcndpc2UKKwkJICogY2FsbCB0aGUgQlJJTl9QUk9DTlVNX0FERFZBTFVF IHByb2NlZHVyZS4KKwkJICovCiAJCWlmIChiZGVzYy0+YmRfaW5mb1trZXlub10tPm9pX3Jl Z3VsYXJfbnVsbHMgJiYgbnVsbHNba2V5bm9dKQogCQl7CiAJCQkvKgogCQkJICogSWYgdGhl IG5ldyB2YWx1ZSBpcyBudWxsLCB3ZSByZWNvcmQgdGhhdCB3ZSBzYXcgaXQgaWYgaXQncyB0 aGUKIAkJCSAqIGZpcnN0IG9uZTsgb3RoZXJ3aXNlLCB0aGVyZSdzIG5vdGhpbmcgdG8gZG8u CisJCQkgKgorCQkJICogV2UgY2FuJ3QgY2hlY2sgImJ2X2hhc251bGxzIiBiZWNhdXNlIHRo ZW4gd2UgbWlnaHQgZW5kIHVwIHdpdGgKKwkJCSAqIGJvdGggZmxhZ3Mgc2V0IHRvIHRydWUs IHdoaWNoIGlzIGludGVycHJldGVkIGFzIGVtcHR5IHJhbmdlLgorCQkJICogQnV0IHRoYXQn ZCBiZSB3cm9uZywgYmVjYXVzZSB3ZSd2ZSBqdXN0IGFkZGVkIGEgdmFsdWUuCisJCQkgKgor CQkJICogU28gZWl0aGVyIHRoZSByYW5nZSBoYXMgYWxsbnVsbHM9dHJ1ZSwgb3Igd2UgaGF2 ZSB0byBzZXQgdGhlCisJCQkgKiBoYXNudWxscyBmbGFnLiBDaGVjayBpZiB3ZSdyZSBjaGFu Z2luZyB0aGUgdmFsdWUgdG8gZGV0ZXJtaW5lCisJCQkgKiBpZiB0aGUgaW5kZXggdHVwbGUg d2FzIG1vZGlmaWVkLgogCQkJICovCi0JCQlpZiAoIWJ2YWwtPmJ2X2hhc251bGxzKQorCQkJ aWYgKCFidmFsLT5idl9hbGxudWxscykKIAkJCXsKKwkJCQltb2RpZmllZCB8PSAoIWJ2YWwt PmJ2X2hhc251bGxzKTsKIAkJCQlidmFsLT5idl9oYXNudWxscyA9IHRydWU7Ci0JCQkJbW9k aWZpZWQgPSB0cnVlOwogCQkJfQogCiAJCQljb250aW51ZTsKQEAgLTE3NDUsNiArMTkyOCwy MCBAQCBhZGRfdmFsdWVzX3RvX3JhbmdlKFJlbGF0aW9uIGlkeFJlbCwgQnJpbkRlc2MgKmJk ZXNjLCBCcmluTWVtVHVwbGUgKmR0dXAsCiAJCQkJCQkJCSAgIG51bGxzW2tleW5vXSk7CiAJ CS8qIGlmIHRoYXQgcmV0dXJuZWQgdHJ1ZSwgd2UgbmVlZCB0byBpbnNlcnQgdGhlIHVwZGF0 ZWQgdHVwbGUgKi8KIAkJbW9kaWZpZWQgfD0gRGF0dW1HZXRCb29sKHJlc3VsdCk7CisKKwkJ LyoKKwkJICogSWYgdGhlIHJhbmdlIHdhcyBub3QgZW1wdHkgYW5kIGhhZCBOVUxMIHZhbHVl cywgbWFrZSBzdXJlIHdlIGRvbid0CisJCSAqIGZvcmdldCBhYm91dCB0aGUgTlVMTCB2YWx1 ZXMuIEVpdGhlciB0aGUgYWxsbnVsbHMgZmxhZyBpcyBzdGlsbCBzZXQKKwkJICogdG8gdHJ1 ZSwgb3IgKGlmIHRoZSBvcGNsYXNzIGNsZWFyZWQgaXQpIHdlIG5lZWQgdG8gc2V0IGhhc251 bGxzPXRydWUuCisJCSAqLworCQlpZiAoaGFzbnVsbHMgJiYgIWJ2YWwtPmJ2X2FsbG51bGxz KQorCQl7CisJCQltb2RpZmllZCB8PSAoIWJ2YWwtPmJ2X2hhc251bGxzKTsKKwkJCWJ2YWwt PmJ2X2hhc251bGxzID0gdHJ1ZTsKKwkJfQorCisJCS8qIFdlJ3ZlIGFkZGVkIGEgcm93LCBz byB0aGUgc3VtbWFyeSBzaG91bGQgbm90IGJlIGVtcHR5LiAqLworCQlBc3NlcnQoIUJSSU5f UkFOR0VfSVNfRU1QVFkoYnZhbCkpOwogCX0KIAogCXJldHVybiBtb2RpZmllZDsKZGlmZiAt LWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9icmluL2JyaW5fdHVwbGUuYyBiL3NyYy9iYWNr ZW5kL2FjY2Vzcy9icmluL2JyaW5fdHVwbGUuYwppbmRleCA4NGI3OWRiZmMwZC4uYjIyOTJh MGMxYTkgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9icmluL2JyaW5fdHVwbGUu YworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvYnJpbi9icmluX3R1cGxlLmMKQEAgLTQxNyw3 ICs0MTcsMjAgQEAgYnJpbl9mb3JtX3BsYWNlaG9sZGVyX3R1cGxlKEJyaW5EZXNjICpicmRl c2MsIEJsb2NrTnVtYmVyIGJsa25vLCBTaXplICpzaXplKQogCiAJCSpiaXRQIHw9IGJpdG1h c2s7CiAJfQotCS8qIG5vIG5lZWQgdG8gc2V0IGhhc251bGxzICovCisJLyogc2V0IGhhc251 bGxzIHRydWUgZm9yIGFsbCBhdHRyaWJ1dGVzICovCisJZm9yIChrZXlubyA9IDA7IGtleW5v IDwgYnJkZXNjLT5iZF90dXBkZXNjLT5uYXR0czsga2V5bm8rKykKKwl7CisJCWlmIChiaXRt YXNrICE9IEhJR0hCSVQpCisJCQliaXRtYXNrIDw8PSAxOworCQllbHNlCisJCXsKKwkJCWJp dFAgKz0gMTsKKwkJCSpiaXRQID0gMHgwOworCQkJYml0bWFzayA9IDE7CisJCX0KKworCQkq Yml0UCB8PSBiaXRtYXNrOworCX0KIAogCSpzaXplID0gbGVuOwogCXJldHVybiByZXR0dXBs ZTsKQEAgLTUxNiw4ICs1MjksMTUgQEAgYnJpbl9tZW10dXBsZV9pbml0aWFsaXplKEJyaW5N ZW1UdXBsZSAqZHR1cGxlLCBCcmluRGVzYyAqYnJkZXNjKQogCWZvciAoaSA9IDA7IGkgPCBi cmRlc2MtPmJkX3R1cGRlc2MtPm5hdHRzOyBpKyspCiAJewogCQlkdHVwbGUtPmJ0X2NvbHVt bnNbaV0uYnZfYXR0bm8gPSBpICsgMTsKKworCQkvKgorCQkgKiBFYWNoIG1lbXR1cGxlIHN0 YXJ0cyBhcyBpZiBpdCByZXByZXNlbnRzIG5vIHJvd3MsIHdoaWNoIGlzIGluZGljYXRlZAor CQkgKiBieSBoYXZpbmcgYm90IGFsbG51bGxzIGFuZCBoYXNudWxscyBzZXQgdG8gdHJ1ZS4g V2UgdHJhY2sgdGhpcyBmb3IKKwkJICogYWxsIGNvbHVtbnMsIGJlY2F1c2Ugd2UgZG9uJ3Qg aGF2ZSBhIGZsYWcgZm9yIHRoZSB3aG9sZSBtZW10dXBsZS4KKwkJICovCiAJCWR0dXBsZS0+ YnRfY29sdW1uc1tpXS5idl9hbGxudWxscyA9IHRydWU7Ci0JCWR0dXBsZS0+YnRfY29sdW1u c1tpXS5idl9oYXNudWxscyA9IGZhbHNlOworCQlkdHVwbGUtPmJ0X2NvbHVtbnNbaV0uYnZf aGFzbnVsbHMgPSB0cnVlOworCiAJCWR0dXBsZS0+YnRfY29sdW1uc1tpXS5idl92YWx1ZXMg PSAoRGF0dW0gKikgY3VycmRhdHVtOwogCiAJCWR0dXBsZS0+YnRfY29sdW1uc1tpXS5idl9t ZW1fdmFsdWUgPSBQb2ludGVyR2V0RGF0dW0oTlVMTCk7CkBAIC01ODUsNiArNjA1LDEzIEBA IGJyaW5fZGVmb3JtX3R1cGxlKEJyaW5EZXNjICpicmRlc2MsIEJyaW5UdXBsZSAqdHVwbGUs IEJyaW5NZW1UdXBsZSAqZE1lbXR1cGxlKQogCXsKIAkJaW50CQkJaTsKIAorCQkvKgorCQkg KiBNYWtlIHN1cmUgdG8gb3ZlcndyaXRlIHRoZSBoYXNudWxscyBmbGFnLCBiZWNhdXNlIGl0 IHdhcyBpbml0aWFsaXplZAorCQkgKiB0byB0cnVlIGJ5IGJyaW5fbWVtdHVwbGVfaW5pdGlh bGl6ZSBhbmQgd2UgZG9uJ3Qgd2FudCB0byBza2lwIGl0IGlmCisJCSAqIGFsbG51bGxzPXRy dWUuCisJCSAqLworCQlkdHVwLT5idF9jb2x1bW5zW2tleW5vXS5idl9oYXNudWxscyA9IGhh c251bGxzW2tleW5vXTsKKwogCQlpZiAoYWxsbnVsbHNba2V5bm9dKQogCQl7CiAJCQl2YWx1 ZW5vICs9IGJyZGVzYy0+YmRfaW5mb1trZXlub10tPm9pX25zdG9yZWQ7CmRpZmYgLS1naXQg YS9zcmMvdGVzdC9tb2R1bGVzL2JyaW4vZXhwZWN0ZWQvc3VtbWFyaXphdGlvbi1hbmQtaW5w cm9ncmVzcy1pbnNlcnRpb24ub3V0IGIvc3JjL3Rlc3QvbW9kdWxlcy9icmluL2V4cGVjdGVk L3N1bW1hcml6YXRpb24tYW5kLWlucHJvZ3Jlc3MtaW5zZXJ0aW9uLm91dAppbmRleCAyYTQ3 NTVkMDk5OC4uNTg0YWMyNjAyZjcgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L21vZHVsZXMvYnJp bi9leHBlY3RlZC9zdW1tYXJpemF0aW9uLWFuZC1pbnByb2dyZXNzLWluc2VydGlvbi5vdXQK KysrIGIvc3JjL3Rlc3QvbW9kdWxlcy9icmluL2V4cGVjdGVkL3N1bW1hcml6YXRpb24tYW5k LWlucHJvZ3Jlc3MtaW5zZXJ0aW9uLm91dApAQCAtNCw3ICs0LDcgQEAgc3RhcnRpbmcgcGVy bXV0YXRpb246IHMyY2hlY2sgczFiIHMyYiBzMWkgczJzdW1tIHMxYyBzMmMgczJjaGVjawog c3RlcCBzMmNoZWNrOiBTRUxFQ1QgKiBGUk9NIGJyaW5fcGFnZV9pdGVtcyhnZXRfcmF3X3Bh Z2UoJ2JyaW5pZHgnLCAyKSwgJ2JyaW5pZHgnOjpyZWdjbGFzcyk7CiBpdGVtb2Zmc2V0fGJs a251bXxhdHRudW18YWxsbnVsbHN8aGFzbnVsbHN8cGxhY2Vob2xkZXJ8dmFsdWUgICAKIC0t LS0tLS0tLS0rLS0tLS0tKy0tLS0tLSstLS0tLS0tLSstLS0tLS0tLSstLS0tLS0tLS0tLSst LS0tLS0tLQotICAgICAgICAgMXwgICAgIDB8ICAgICAxfGYgICAgICAgfGYgICAgICAgfGYg ICAgICAgICAgfHsxIC4uIDF9CisgICAgICAgICAxfCAgICAgMHwgICAgIDF8ZiAgICAgICB8 dCAgICAgICB8ZiAgICAgICAgICB8ezEgLi4gMX0KICgxIHJvdykKIAogc3RlcCBzMWI6IEJF R0lOIElTT0xBVElPTiBMRVZFTCBSRVBFQVRBQkxFIFJFQUQ7CkBAIC0yNiw3ICsyNiw3IEBA IHN0ZXAgczJjOiBDT01NSVQ7CiBzdGVwIHMyY2hlY2s6IFNFTEVDVCAqIEZST00gYnJpbl9w YWdlX2l0ZW1zKGdldF9yYXdfcGFnZSgnYnJpbmlkeCcsIDIpLCAnYnJpbmlkeCc6OnJlZ2Ns YXNzKTsKIGl0ZW1vZmZzZXR8YmxrbnVtfGF0dG51bXxhbGxudWxsc3xoYXNudWxsc3xwbGFj ZWhvbGRlcnx2YWx1ZSAgICAgIAogLS0tLS0tLS0tLSstLS0tLS0rLS0tLS0tKy0tLS0tLS0t Ky0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tCi0gICAgICAgICAxfCAgICAgMHwg ICAgIDF8ZiAgICAgICB8ZiAgICAgICB8ZiAgICAgICAgICB8ezEgLi4gMX0gICAKKyAgICAg ICAgIDF8ICAgICAwfCAgICAgMXxmICAgICAgIHx0ICAgICAgIHxmICAgICAgICAgIHx7MSAu LiAxfSAgIAogICAgICAgICAgMnwgICAgIDF8ICAgICAxfGYgICAgICAgfGYgICAgICAgfGYg ICAgICAgICAgfHsxIC4uIDEwMDB9CiAoMiByb3dzKQogCkBAIC0zNSw3ICszNSw3IEBAIHN0 YXJ0aW5nIHBlcm11dGF0aW9uOiBzMmNoZWNrIHMxYiBzMWkgczJ2YWN1dW0gczFjIHMyY2hl Y2sKIHN0ZXAgczJjaGVjazogU0VMRUNUICogRlJPTSBicmluX3BhZ2VfaXRlbXMoZ2V0X3Jh d19wYWdlKCdicmluaWR4JywgMiksICdicmluaWR4Jzo6cmVnY2xhc3MpOwogaXRlbW9mZnNl dHxibGtudW18YXR0bnVtfGFsbG51bGxzfGhhc251bGxzfHBsYWNlaG9sZGVyfHZhbHVlICAg CiAtLS0tLS0tLS0tKy0tLS0tLSstLS0tLS0rLS0tLS0tLS0rLS0tLS0tLS0rLS0tLS0tLS0t LS0rLS0tLS0tLS0KLSAgICAgICAgIDF8ICAgICAwfCAgICAgMXxmICAgICAgIHxmICAgICAg IHxmICAgICAgICAgIHx7MSAuLiAxfQorICAgICAgICAgMXwgICAgIDB8ICAgICAxfGYgICAg ICAgfHQgICAgICAgfGYgICAgICAgICAgfHsxIC4uIDF9CiAoMSByb3cpCiAKIHN0ZXAgczFi OiBCRUdJTiBJU09MQVRJT04gTEVWRUwgUkVQRUFUQUJMRSBSRUFEOwpAQCAtNDUsNyArNDUs NyBAQCBzdGVwIHMxYzogQ09NTUlUOwogc3RlcCBzMmNoZWNrOiBTRUxFQ1QgKiBGUk9NIGJy aW5fcGFnZV9pdGVtcyhnZXRfcmF3X3BhZ2UoJ2JyaW5pZHgnLCAyKSwgJ2JyaW5pZHgnOjpy ZWdjbGFzcyk7CiBpdGVtb2Zmc2V0fGJsa251bXxhdHRudW18YWxsbnVsbHN8aGFzbnVsbHN8 cGxhY2Vob2xkZXJ8dmFsdWUgICAgICAKIC0tLS0tLS0tLS0rLS0tLS0tKy0tLS0tLSstLS0t LS0tLSstLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tLQotICAgICAgICAgMXwgICAg IDB8ICAgICAxfGYgICAgICAgfGYgICAgICAgfGYgICAgICAgICAgfHsxIC4uIDF9ICAgCisg ICAgICAgICAxfCAgICAgMHwgICAgIDF8ZiAgICAgICB8dCAgICAgICB8ZiAgICAgICAgICB8 ezEgLi4gMX0gICAKICAgICAgICAgIDJ8ICAgICAxfCAgICAgMXxmICAgICAgIHxmICAgICAg IHxmICAgICAgICAgIHx7MSAuLiAxMDAwfQogKDIgcm93cykKIApkaWZmIC0tZ2l0IGEvc3Jj L3Rlc3QvbW9kdWxlcy9icmluL3NwZWNzL3N1bW1hcml6YXRpb24tYW5kLWlucHJvZ3Jlc3Mt aW5zZXJ0aW9uLnNwZWMgYi9zcmMvdGVzdC9tb2R1bGVzL2JyaW4vc3BlY3Mvc3VtbWFyaXph dGlvbi1hbmQtaW5wcm9ncmVzcy1pbnNlcnRpb24uc3BlYwppbmRleCAxOWFjMThhMmU4OC4u MThiYTkyYjdiYTEgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L21vZHVsZXMvYnJpbi9zcGVjcy9z dW1tYXJpemF0aW9uLWFuZC1pbnByb2dyZXNzLWluc2VydGlvbi5zcGVjCisrKyBiL3NyYy90 ZXN0L21vZHVsZXMvYnJpbi9zcGVjcy9zdW1tYXJpemF0aW9uLWFuZC1pbnByb2dyZXNzLWlu c2VydGlvbi5zcGVjCkBAIC05LDYgKzksNyBAQCBzZXR1cAogICAgICkgV0lUSCAoZmlsbGZh Y3Rvcj0xMCk7CiAgICAgQ1JFQVRFIElOREVYIGJyaW5pZHggT04gYnJpbl9pc28gVVNJTkcg YnJpbiAodmFsdWUpIFdJVEggKHBhZ2VzX3Blcl9yYW5nZT0xKTsKICAgICAtLSB0aGlzIGZp bGxzIHRoZSBmaXJzdCBwYWdlCisgICAgSU5TRVJUIElOVE8gYnJpbl9pc28gVkFMVUVTIChO VUxMKTsKICAgICBETyAkJAogICAgIERFQ0xBUkUgY3VydGlkIHRpZDsKICAgICBCRUdJTgot LSAKMi4zOS4yCgo= --------------L1SG10kT0ZUc0hCgDIv70udx Content-Type: text/x-patch; charset=UTF-8; name="0001-Fix-handling-of-NULLs-in-BRIN-indexes-11-13-20230224.patch" Content-Disposition: attachment; filename*0="0001-Fix-handling-of-NULLs-in-BRIN-indexes-11-13-20230224.pa"; filename*1="tch" Content-Transfer-Encoding: base64 RnJvbSBmZDVmMzdlYWZjMjdmNDI2NzQ3NjhlYTU1OTNlMzMwOWY1YWQwN2E3IE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBUb21hcyBWb25kcmEgPHRvbWFzLnZvbmRyYUBwb3N0 Z3Jlc3FsLm9yZz4KRGF0ZTogU3VuLCA4IEphbiAyMDIzIDIyOjA0OjQxICswMTAwClN1Ympl Y3Q6IFtQQVRDSF0gRml4IGhhbmRsaW5nIG9mIE5VTExzIGluIEJSSU4gaW5kZXhlcwoKQlJJ TiBpbmRleGVzIGRpZCBub3QgcHJvcGVybHkgZGlzdGluZ3Vpc2ggYmV0d2VlbiBzdW1tYXJp ZXMgZm9yIGVtcHR5CihubyByb3dzKSBhbmQgYWxsLU5VTEwgcmFuZ2VzLiBBbGwgc3VtbWFy aWVzIHdlcmUgaW5pdGlhbGl6ZWQgd2l0aAphbGxudWxscz10cnVlLCBhbmQgdGhlIG9wY2xh c3NlcyBzaW1wbHkgcmVzZXQgYWxsbnVsbHMgdG8gZmFsc2Ugd2hlbgpwcm9jZXNzaW5nIHRo ZSBmaXJzdCBub24tTlVMTCB2YWx1ZS4gVGhpcyBob3dldmVyIGZhaWxzIGlmIHRoZSByYW5n ZQpzdGFydHMgd2l0aCBhIE5VTEwgdmFsdWUgKG9yIGEgc2VxdWVuY2Ugb2YgTlVMTCB2YWx1 ZXMpLCBpbiB3aGljaCBjYXNlCndlIGZvcmdldCB0aGUgcmFuZ2UgY29udGFpbnMgTlVMTCB2 YWx1ZXMuCgpUaGlzIGhhcHBlbnMgYmVjYXVzZSB0aGUgYWxsbnVsbHMgZmxhZyBpcyB1c2Vk IGZvciB0d28gc2VwYXJhdGUKcHVycG9zZXMgLSB0byBtYXJrIGVtcHR5IHJhbmdlcyAobm90 IHJlcHJlc2VudGluZyBhbnkgcm93cyB5ZXQpIGFuZApyYW5nZXMgY29udGFpbmluZyBvbmx5 IE5VTEwgdmFsdWVzLgoKT3BjbGFzc2VzIGRvbid0IGtub3cgd2hpY2ggb2YgdGhlc2UgY2Fz ZXMgaXQgaXMsIGFuZCBzbyBkb24ndCBrbm93CndoZXRoZXIgdG8gc2V0IGhhc251bGxzPXRy dWUuIFNldHRpbmcgaGFzbnVsbHM9dHJ1ZSBpbiBib3RoIGNhc2VzIHdvdWxkCm1ha2UgaXQg Y29ycmVjdCwgYnV0IGl0IHdvdWxkIGFsc28gbWFrZSBCUklOIGluZGV4ZXMgdXNlbGVzcyBm b3IgcXVlcmllcwp3aXRoIElTIE5VTEwgY2xhdXNlcyAtIGFsbCByYW5nZXMgc3RhcnQgZW1w dHkgKGFuZCB0aHVzIGFsbG51bGxzPXRydWUpLApzbyBhbGwgcmFuZ2VzIHdvdWxkIGVuZCB1 cCB3aXRoIGVpdGhlciBhbGxudWxscz10cnVlIG9yIGhhc251bGxzPXRydWUuCgpUaGUgc2V2 ZXJpdHkgb2YgdGhlIGlzc3VlIGlzIHNvbWV3aGF0IHJlZHVjZWQgYnkgdGhlIGZhY3QgdGhh dCBpdCBvbmx5CmhhcHBlbnMgd2hlbiBhZGRpbmcgdmFsdWVzIHRvIGFuIGV4aXN0aW5nIHN1 bW1hcnkgd2l0aCBhbGxudWxscz10cnVlLApub3Qgd2hlbiB0aGUgc3VtbWFyaXphdGlvbiBp cyBwcm9jZXNzaW5nIHZhbHVlcyBpbiBidWxrIChlLmcuIGR1cmluZwpDUkVBVEUgSU5ERVgg b3IgYXV0b21hdGljIHN1bW1hcml6YXRpb24pLiBJbiB0aGlzIGNhc2UgdGhlIGZsYWdzIHdl cmUKdXBkYXRlZCBpbiBhIHNsaWdodGx5IGRpZmZlcmVudCB3YXksIG5vdCBmb3JnZXR0aW5n IHRoZSBOVUxMIHZhbHVlcy4KClRoZSBiZXN0IHNvbHV0aW9uIHdvdWxkIGJlIHRvIGludHJv ZHVjZSBhIG5ldyBmbGFnIG1hcmtpbmcgaW5kZXggdHVwbGVzCnJlcHJlc2VudGluZyByYW5n ZXMgd2l0aCBubyByb3dzLCBidXQgdGhhdCB3b3VsZCBicmVhayBvbi1kaXNrIGZvcm1hdAph bmQvb3IgQUJJLCBkZXBlbmRpbmcgb24gd2hlcmUgd2UgcHV0IHRoZSBmbGFnLiBDb25zaWRl cmluZyB3ZSBuZWVkIHRvCmJhY2twYXRjaCB0aGlzLCB0aGF0J3Mgbm90IGFjY2VwdGFibGUu CgpTbyBpbnN0ZWFkIHdlIHVzZSBhbiAiaW1wb3NzaWJsZSIgY29tYmluYXRpb24gb2YgYm90 aCBmbGFncyAoYWxsbnVsbHMKYW5kIGhhc251bGxzKSBzZXQgdG8gdHJ1ZSwgdG8gbWFyayAi ZW1wdHkiIHJhbmdlcyB3aXRoIG5vIHJvd3MuIEluCnByaW5jaXBsZSAiZW1wdHkiIGlzIGEg ZmVhdHVyZSBvZiB0aGUgd2hvbGUgaW5kZXggdHVwbGUsIHdoaWNoIG1heQpjb250YWluIG11 bHRpcGxlIHN1bW1hcmllcyBpbiBhIG11bHRpLWNvbHVtbiBpbmRleCwgYnV0IHRoaXMgaXMg d2hlcmUKdGhlIGZsYWdzIGFyZSwgdW5mb3J0dW5hdGVseS4KCldlIGNvdWxkIGFsc28gc2tp cCBzdG9yaW5nIGluZGV4IHR1cGxlcyBmb3IgZW1wdHkgc3VtbWFyaWVzLCBidXQgdGhlbgp3 ZSdkIGhhdmUgdG8gYWx3YXlzIHByb2Nlc3Mgc3VjaCByYW5nZXMgLSBldmVuIGlmIHRoZXJl IGFyZSBubyByb3dzIGluCmxhcmdlIHBhcnRzIG9mIHRoZSB0YWJsZSAoZS5nLiBhZnRlciBh IGJ1bGsgREVMRVRFKSwgaXQgd291bGQgc3RpbGwKcmVxdWlyZSByZWFkaW5nIHRoZSBwYWdl cyBldGMuIFNvIHdlIHN0b3JlIHRoZW0sIGJ1dCBpZ25vcmUgdGhlbSB3aGVuCmJ1aWxkaW5n IHRoZSBiaXRtYXAuCgpCYWNrcGF0Y2ggdG8gMTEuIFRoZSBpc3N1ZSBleGlzdHMgc2luY2Ug QlJJTiBpbmRleGVzIHdlcmUgaW50cm9kdWNlZCBpbgo5LjUsIGJ1dCBvbGRlciByZWxlYXNl cyBhcmUgYWxyZWFkeSBFT0wuCgpCYWNrcGF0Y2gtdGhyb3VnaDogMTEKUmV2aWV3ZWQtYnk6 IEp1c3RpbiBQcnl6YnksIE1hdHRoaWFzIHZhbiBkZSBNZWVudApEaXNjdXNzaW9uOiBodHRw czovL3Bvc3Rnci5lcy9tLzQwMjQzMGU0LTdkOWQtNmNmMS0wOWVmLTQ2NGQ4MGFmZmYzYkBl bnRlcnByaXNlZGIuY29tCi0tLQogc3JjL2JhY2tlbmQvYWNjZXNzL2JyaW4vYnJpbi5jICAg ICAgICAgICAgICAgIHwgMzM3ICsrKysrKysrKysrKysrKysrLQogc3JjL2JhY2tlbmQvYWNj ZXNzL2JyaW4vYnJpbl9pbmNsdXNpb24uYyAgICAgIHwgIDQ2ICstLQogc3JjL2JhY2tlbmQv YWNjZXNzL2JyaW4vYnJpbl9taW5tYXguYyAgICAgICAgIHwgIDQzICstLQogc3JjL2JhY2tl bmQvYWNjZXNzL2JyaW4vYnJpbl90dXBsZS5jICAgICAgICAgIHwgIDMxICstCiAuLi5zdW1t YXJpemF0aW9uLWFuZC1pbnByb2dyZXNzLWluc2VydGlvbi5vdXQgfCAgIDggKy0KIC4uLnVt bWFyaXphdGlvbi1hbmQtaW5wcm9ncmVzcy1pbnNlcnRpb24uc3BlYyB8ICAgMSArCiA2IGZp bGVzIGNoYW5nZWQsIDM2OSBpbnNlcnRpb25zKCspLCA5NyBkZWxldGlvbnMoLSkKCmRpZmYg LS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvYnJpbi9icmluLmMgYi9zcmMvYmFja2VuZC9h Y2Nlc3MvYnJpbi9icmluLmMKaW5kZXggMGJlY2ZkZTExMzMuLjVlZGU1YTg4MzY3IDEwMDY0 NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvYnJpbi9icmluLmMKKysrIGIvc3JjL2JhY2tl bmQvYWNjZXNzL2JyaW4vYnJpbi5jCkBAIC0zNSw2ICszNSw3IEBACiAjaW5jbHVkZSAic3Rv cmFnZS9mcmVlc3BhY2UuaCIKICNpbmNsdWRlICJ1dGlscy9hY2wuaCIKICNpbmNsdWRlICJ1 dGlscy9idWlsdGlucy5oIgorI2luY2x1ZGUgInV0aWxzL2RhdHVtLmgiCiAjaW5jbHVkZSAi dXRpbHMvaW5kZXhfc2VsZnVuY3MuaCIKICNpbmNsdWRlICJ1dGlscy9tZW11dGlscy5oIgog I2luY2x1ZGUgInV0aWxzL3JlbC5oIgpAQCAtNjgsNiArNjksOCBAQCB0eXBlZGVmIHN0cnVj dCBCcmluT3BhcXVlCiAKICNkZWZpbmUgQlJJTl9BTExfQkxPQ0tSQU5HRVMJSW52YWxpZEJs b2NrTnVtYmVyCiAKKyNkZWZpbmUgQlJJTl9SQU5HRV9JU19FTVBUWShjb2wpICgoY29sKS0+ YnZfYWxsbnVsbHMgJiYgKGNvbCktPmJ2X2hhc251bGxzKQorCiBzdGF0aWMgQnJpbkJ1aWxk U3RhdGUgKmluaXRpYWxpemVfYnJpbl9idWlsZHN0YXRlKFJlbGF0aW9uIGlkeFJlbCwKIAkJ CQkJCQkJCQkJCSAgQnJpblJldm1hcCAqcmV2bWFwLCBCbG9ja051bWJlciBwYWdlc1BlclJh bmdlKTsKIHN0YXRpYyB2b2lkIHRlcm1pbmF0ZV9icmluX2J1aWxkc3RhdGUoQnJpbkJ1aWxk U3RhdGUgKnN0YXRlKTsKQEAgLTI1MywxOCArMjU2LDk0IEBAIGJyaW5pbnNlcnQoUmVsYXRp b24gaWR4UmVsLCBEYXR1bSAqdmFsdWVzLCBib29sICpudWxscywKIAkJCURhdHVtCQlyZXN1 bHQ7CiAJCQlCcmluVmFsdWVzICpidmFsOwogCQkJRm1nckluZm8gICAqYWRkVmFsdWU7CisJ CQlib29sCQloYXNudWxsczsKIAogCQkJYnZhbCA9ICZkdHVwLT5idF9jb2x1bW5zW2tleW5v XTsKLQkJCWFkZFZhbHVlID0gaW5kZXhfZ2V0cHJvY2luZm8oaWR4UmVsLCBrZXlubyArIDEs Ci0JCQkJCQkJCQkJIEJSSU5fUFJPQ05VTV9BRERWQUxVRSk7Ci0JCQlyZXN1bHQgPSBGdW5j dGlvbkNhbGw0Q29sbChhZGRWYWx1ZSwKLQkJCQkJCQkJCSAgIGlkeFJlbC0+cmRfaW5kY29s bGF0aW9uW2tleW5vXSwKLQkJCQkJCQkJCSAgIFBvaW50ZXJHZXREYXR1bShiZGVzYyksCi0J CQkJCQkJCQkgICBQb2ludGVyR2V0RGF0dW0oYnZhbCksCi0JCQkJCQkJCQkgICB2YWx1ZXNb a2V5bm9dLAotCQkJCQkJCQkJICAgbnVsbHNba2V5bm9dKTsKLQkJCS8qIGlmIHRoYXQgcmV0 dXJuZWQgdHJ1ZSwgd2UgbmVlZCB0byBpbnNlcnQgdGhlIHVwZGF0ZWQgdHVwbGUgKi8KLQkJ CW5lZWRfaW5zZXJ0IHw9IERhdHVtR2V0Qm9vbChyZXN1bHQpOworCisJCQkvKgorCQkJICog RG9lcyB0aGUgcmFuZ2UgaGF2ZSBhY3R1YWwgTlVMTCB2YWx1ZXM/IEVpdGhlciBvZiB0aGUg ZmxhZ3MgY2FuCisJCQkgKiBiZSBzZXQsIGJ1dCB3ZSBpZ25vcmUgdGhlIHN0YXRlIGJlZm9y ZSBhZGRpbmcgZmlyc3Qgcm93LgorCQkJICoKKwkJCSAqIFdlIGhhdmUgdG8gcmVtZW1iZXIg dGhpcywgYmVjYXVzZSB3ZSdsbCBtb2RpZnkgdGhlIGZsYWdzIGFuZCB3ZQorCQkJICogbmVl ZCB0byBrbm93IGlmIHRoZSByYW5nZSBzdGFydGVkIGFzIGVtcHR5LgorCQkJICovCisJCQlo YXNudWxscyA9ICghQlJJTl9SQU5HRV9JU19FTVBUWShidmFsKSkgJiYKKwkJCQkJICAgKGJ2 YWwtPmJ2X2hhc251bGxzIHx8IGJ2YWwtPmJ2X2FsbG51bGxzKTsKKworCQkJLyoKKwkJCSAq IFdlIG5lZWQgdG8gY29uc2lkZXIgd2hldGhlciB0aGUgcmFuZ2UgaXMgZW1wdHkgKG5vdCBy ZXByZXNlbnRpbmcKKwkJCSAqIGFueSByb3dzIHlldCksIGkuZS4gaWYgaXQgaGFzIGJvdGgg ZmxhZ3MgKGFsbG51bGxzIGhhc251bGxzKSBzZXQKKwkJCSAqIHRvIHRydWUuCisJCQkgKgor CQkJICogSWYgdGhlIHJhbmdlIGlzIGVtcHR5LCB3ZSBjbGVhciB0aGUgaGFzbnVsbHMgZmxh ZyAtIGFmdGVyIGFkZGluZworCQkJICogYSB2YWx1ZSBpdCB3b24ndCBiZSBlbXB0eSBhbnlt b3JlLiBFaXRoZXIgaXQnbGwgYmUgYWxsLU5VTEwgKGFuZAorCQkJICogbGVhdmluZyBhbGxu dWxscz10cnVlIGNvdmVycyB0aGF0KSwgb3IgaXQgd2lsbCBoYXZlIG5vIE5VTExzIGF0CisJ CQkgKiBhbGwgKGJ1dCBidWlsZGluZyB0aGUgc3RhdGUgaXMgdXAgdG8gdGhlIG9wY2xhc3Mp LgorCQkJICoKKwkJCSAqIElmIHRoZSByYW5nZSBpcyBub3QgZW1wdHksIHdlIHJlbWVtYmVy IGlmIHRoZXJlIGFyZSBOVUxMIHZhbHVlcy4KKwkJCSAqIEluIHRoaXMgY2FzZSBib3RoIGZs YWdzIGNhbid0IGJlIHNldCB0byB0cnVlICh0aGF0J2QgYmUgZW1wdHkKKwkJCSAqIHJhbmdl KSwgc28gaXQncyBlaXRoZXIgYWxsbnVsbHM9dHJ1ZSBvciBoYXNudWxscz10cnVlLiBCdXQg dGhlCisJCQkgKiBvcGNsYXNzZXMgY2xlYXIgYWxsbnVsbHMgd2hlbiBhZGRpbmcgdGhlIGZp cnN0IG5vbi1OVUxMIHZhbHVlLAorCQkJICogc28gd2UgbmVlZCB0byByZW1lbWJlciB0aGlz LgorCQkJICoKKwkJCSAqIFdoZW4gYWRkaW5nIGEgbnVsbCB2YWx1ZSB3ZSBjYW4gZG8gZXZl cnl0aGluZyBsb2NhbGx5LCB3aXRob3V0CisJCQkgKiBjYWxsaW5nIEJSSU5fUFJPQ05VTV9B RERWQUxVRS4KKwkJCSAqLworCQkJaWYgKEJSSU5fUkFOR0VfSVNfRU1QVFkoYnZhbCkpCisJ CQl7CisJCQkJYnZhbC0+YnZfaGFzbnVsbHMgPSBmYWxzZTsKKwkJCQluZWVkX2luc2VydCA9 IHRydWU7CisJCQl9CisKKwkJCS8qCisJCQkgKiBJZiB0aGUgdmFsdWUgd2UncmUgYWRkaW5n IGlzIE5VTEwsIGhhbmRsZSBpdCBsb2NhbGx5LiBPdGhlcndpc2UKKwkJCSAqIGNhbGwgdGhl IEJSSU5fUFJPQ05VTV9BRERWQUxVRSBwcm9jZWR1cmUuCisJCQkgKi8KKwkJCWlmIChudWxs c1trZXlub10pCisJCQl7CisJCQkJLyoKKwkJCQkgKiBXZSBjYW4ndCBjaGVjayAiYnZfaGFz bnVsbHMiIGJlY2F1c2UgdGhlbiB3ZSBtaWdodCBlbmQgdXAgd2l0aAorCQkJCSAqIGJvdGgg ZmxhZ3Mgc2V0IHRvIHRydWUsIHdoaWNoIGlzIGludGVycHJldGVkIGFzIGVtcHR5IHJhbmdl LgorCQkJCSAqIEJ1dCB0aGF0J2QgYmUgd3JvbmcsIGJlY2F1c2Ugd2UndmUganVzdCBhZGRl ZCBhIHZhbHVlLgorCQkJCSAqCisJCQkJICogU28gZWl0aGVyIHRoZSByYW5nZSBoYXMgYWxs bnVsbHM9dHJ1ZSwgb3Igd2UgaGF2ZSB0byBzZXQgdGhlCisJCQkJICogaGFzbnVsbHMgZmxh Zy4gQ2hlY2sgaWYgd2UncmUgY2hhbmdpbmcgdGhlIHZhbHVlIHRvIGRldGVybWluZQorCQkJ CSAqIGlmIHRoZSBpbmRleCB0dXBsZSB3YXMgbW9kaWZpZWQuCisJCQkJICovCisJCQkJaWYg KCFidmFsLT5idl9hbGxudWxscykKKwkJCQl7CisJCQkJCS8qIEFyZSB3ZSBjaGFuZ2luZyB0 aGUgdHVwbGU/ICovCisJCQkJCW5lZWRfaW5zZXJ0IHw9ICghYnZhbC0+YnZfaGFzbnVsbHMp OworCQkJCQlidmFsLT5idl9oYXNudWxscyA9IHRydWU7CisJCQkJfQorCQkJfQorCQkJZWxz ZQorCQkJeworCQkJCWFkZFZhbHVlID0gaW5kZXhfZ2V0cHJvY2luZm8oaWR4UmVsLCBrZXlu byArIDEsCisJCQkJCQkJCQkJCSBCUklOX1BST0NOVU1fQUREVkFMVUUpOworCQkJCXJlc3Vs dCA9IEZ1bmN0aW9uQ2FsbDRDb2xsKGFkZFZhbHVlLAorCQkJCQkJCQkJCSAgIGlkeFJlbC0+ cmRfaW5kY29sbGF0aW9uW2tleW5vXSwKKwkJCQkJCQkJCQkgICBQb2ludGVyR2V0RGF0dW0o YmRlc2MpLAorCQkJCQkJCQkJCSAgIFBvaW50ZXJHZXREYXR1bShidmFsKSwKKwkJCQkJCQkJ CQkgICB2YWx1ZXNba2V5bm9dLAorCQkJCQkJCQkJCSAgIG51bGxzW2tleW5vXSk7CisJCQkJ LyogaWYgdGhhdCByZXR1cm5lZCB0cnVlLCB3ZSBuZWVkIHRvIGluc2VydCB0aGUgdXBkYXRl ZCB0dXBsZSAqLworCQkJCW5lZWRfaW5zZXJ0IHw9IERhdHVtR2V0Qm9vbChyZXN1bHQpOwor CQkJfQorCisJCQkvKgorCQkJICogSWYgdGhlIHJhbmdlIHdhcyBub3QgYW4gZW1wdHkgcmFu Z2UgKGl0J2QgaGF2ZSBoYXNudWxscz1mYWxzZSksCisJCQkgKiBtYWtlIHN1cmUgd2UgcmVt ZW1iZXIgdGhlcmUgd2VyZSBOVUxMIHZhbHVlcy4gRWl0aGVyIHRoZSBhbGxudWxscworCQkJ ICogZmxhZyBpcyBzdGlsbCBzZXQgdG8gdHJ1ZSwgb3Igd2UgbmVlZCB0byBzZXQgdGhlIGhh c251bGxzIGZsYWcuCisJCQkgKi8KKwkJCWlmIChoYXNudWxscyAmJiAhYnZhbC0+YnZfYWxs bnVsbHMpCisJCQl7CisJCQkJbmVlZF9pbnNlcnQgfD0gKCFidmFsLT5idl9oYXNudWxscyk7 CisJCQkJYnZhbC0+YnZfaGFzbnVsbHMgPSB0cnVlOworCQkJfQorCisJCQkvKiBXZSd2ZSBh ZGRlZCBhIHJvdywgc28gdGhlIHN1bW1hcnkgc2hvdWxkIG5vdCBiZSBlbXB0eS4gKi8KKwkJ CUFzc2VydCghQlJJTl9SQU5HRV9JU19FTVBUWShidmFsKSk7CiAJCX0KIAogCQlpZiAoIW5l ZWRfaW5zZXJ0KQpAQCAtNTA4LDYgKzU4NywxNyBAQCBicmluZ2V0Yml0bWFwKEluZGV4U2Nh bkRlc2Mgc2NhbiwgVElEQml0bWFwICp0Ym0pCiAJCQkJCQkJCQkgICBDdXJyZW50TWVtb3J5 Q29udGV4dCk7CiAJCQkJCX0KIAorCQkJCQkvKgorCQkJCQkgKiBJZiB0aGUgcmFuZ2UgaGFz IGJvdGggYWxsbnVsbHMgYW5kIGhhc251bGxzIHNldCwgaXQgbWVhbnMKKwkJCQkJICogdGhl cmUgYXJlIG5vIHJvd3MgaW4gdGhlIHJhbmdlLCBzbyB3ZSBjYW4gc2tpcCBpdCAod2Uga25v dworCQkJCQkgKiB0aGVyZSdzIG5vdGhpbmcgdG8gbWF0Y2gpLgorCQkJCQkgKi8KKwkJCQkJ aWYgKEJSSU5fUkFOR0VfSVNfRU1QVFkoYnZhbCkpCisJCQkJCXsKKwkJCQkJCWFkZHJhbmdl ID0gZmFsc2U7CisJCQkJCQlicmVhazsKKwkJCQkJfQorCiAJCQkJCS8qCiAJCQkJCSAqIENo ZWNrIHdoZXRoZXIgdGhlIHNjYW4ga2V5IGlzIGNvbnNpc3RlbnQgd2l0aCB0aGUgcGFnZQog CQkJCQkgKiByYW5nZSB2YWx1ZXM7IGlmIHNvLCBoYXZlIHRoZSBwYWdlcyBpbiB0aGUgcmFu Z2UgYWRkZWQKQEAgLTY0NSwxOSArNzM1LDgwIEBAIGJyaW5idWlsZENhbGxiYWNrKFJlbGF0 aW9uIGluZGV4LAogCQlGbWdySW5mbyAgICphZGRWYWx1ZTsKIAkJQnJpblZhbHVlcyAqY29s OwogCQlGb3JtX3BnX2F0dHJpYnV0ZSBhdHRyID0gVHVwbGVEZXNjQXR0cihzdGF0ZS0+YnNf YmRlc2MtPmJkX3R1cGRlc2MsIGkpOworCQlib29sCQloYXNudWxsczsKIAogCQljb2wgPSAm c3RhdGUtPmJzX2R0dXBsZS0+YnRfY29sdW1uc1tpXTsKLQkJYWRkVmFsdWUgPSBpbmRleF9n ZXRwcm9jaW5mbyhpbmRleCwgaSArIDEsCi0JCQkJCQkJCQkgQlJJTl9QUk9DTlVNX0FERFZB TFVFKTsKKyAKKwkJLyoKKwkJICogRG9lcyB0aGUgcmFuZ2UgaGF2ZSBhY3R1YWwgTlVMTCB2 YWx1ZXM/IEVpdGhlciBvZiB0aGUgZmxhZ3MgY2FuCisJCSAqIGJlIHNldCwgYnV0IHdlIGln bm9yZSB0aGUgc3RhdGUgYmVmb3JlIGFkZGluZyBmaXJzdCByb3cuCisJCSAqCisJCSAqIFdl IGhhdmUgdG8gcmVtZW1iZXIgdGhpcywgYmVjYXVzZSB3ZSdsbCBtb2RpZnkgdGhlIGZsYWdz IGFuZCB3ZQorCQkgKiBuZWVkIHRvIGtub3cgaWYgdGhlIHJhbmdlIHN0YXJ0ZWQgYXMgZW1w dHkuCisJCSAqLworCQloYXNudWxscyA9ICghQlJJTl9SQU5HRV9JU19FTVBUWShjb2wpKSAm JgorCQkJCSAgIChjb2wtPmJ2X2hhc251bGxzIHx8IGNvbC0+YnZfYWxsbnVsbHMpOworCisJ CS8qCisJCSAqIFdlIG5lZWQgdG8gY29uc2lkZXIgd2hldGhlciB0aGUgcmFuZ2UgaXMgZW1w dHkgKG5vdCByZXByZXNlbnRpbmcKKwkJICogYW55IHJvd3MgeWV0KSwgaS5lLiBpZiBpdCBo YXMgYm90aCBmbGFncyAoYWxsbnVsbHMgaGFzbnVsbHMpIHNldAorCQkgKiB0byB0cnVlLgor CQkgKgorCQkgKiBJZiB0aGUgcmFuZ2UgaXMgZW1wdHksIHdlIGNsZWFyIHRoZSBoYXNudWxs cyBmbGFnIC0gYWZ0ZXIgYWRkaW5nCisJCSAqIGEgdmFsdWUgaXQgd29uJ3QgYmUgZW1wdHkg YW55bW9yZS4gRWl0aGVyIGl0J2xsIGJlIGFsbC1OVUxMIChhbmQKKwkJICogbGVhdmluZyBh bGxudWxscz10cnVlIGNvdmVycyB0aGF0KSwgb3IgaXQgd2lsbCBoYXZlIG5vIE5VTExzIGF0 CisJCSAqIGFsbCAoYnV0IGJ1aWxkaW5nIHRoZSBzdGF0ZSBpcyB1cCB0byB0aGUgb3BjbGFz cykuCisJCSAqCisJCSAqIElmIHRoZSByYW5nZSBpcyBub3QgZW1wdHksIHdlIHJlbWVtYmVy IGlmIHRoZXJlIGFyZSBOVUxMIHZhbHVlcy4KKwkJICogSW4gdGhpcyBjYXNlIGJvdGggZmxh Z3MgY2FuJ3QgYmUgc2V0IHRvIHRydWUgKHRoYXQnZCBiZSBlbXB0eQorCQkgKiByYW5nZSks IHNvIGl0J3MgZWl0aGVyIGFsbG51bGxzPXRydWUgb3IgaGFzbnVsbHM9dHJ1ZS4gQnV0IHRo ZQorCQkgKiBvcGNsYXNzZXMgY2xlYXIgYWxsbnVsbHMgd2hlbiBhZGRpbmcgdGhlIGZpcnN0 IG5vbi1OVUxMIHZhbHVlLAorCQkgKiBzbyB3ZSBuZWVkIHRvIHJlbWVtYmVyIHRoaXMuCisJ CSAqCisJCSAqIFdoZW4gYWRkaW5nIGEgbnVsbCB2YWx1ZSB3ZSBjYW4gZG8gZXZlcnl0aGlu ZyBsb2NhbGx5LCB3aXRob3V0CisJCSAqIGNhbGxpbmcgQlJJTl9QUk9DTlVNX0FERFZBTFVF LgorCQkgKi8KKwkJaWYgKEJSSU5fUkFOR0VfSVNfRU1QVFkoY29sKSkKKwkJCWNvbC0+YnZf aGFzbnVsbHMgPSBmYWxzZTsKKworCQlpZiAoaXNudWxsW2ldKQorCQl7CisJCQkvKgorCQkJ ICogV2UgY2FuJ3QgY2hlY2sgImJ2X2hhc251bGxzIiBiZWNhdXNlIHRoZW4gd2UgbWlnaHQg ZW5kIHVwIHdpdGgKKwkJCSAqIGJvdGggZmxhZ3Mgc2V0IHRvIHRydWUsIHdoaWNoIGlzIGlu dGVycHJldGVkIGFzIGVtcHR5IHJhbmdlLgorCQkJICogQnV0IHRoYXQnZCBiZSB3cm9uZywg YmVjYXVzZSB3ZSd2ZSBqdXN0IGFkZGVkIGEgdmFsdWUuCisJCQkgKgorCQkJICogU28gZWl0 aGVyIHRoZSByYW5nZSBoYXMgYWxsbnVsbHM9dHJ1ZSwgb3Igd2UgaGF2ZSB0byBzZXQgdGhl CisJCQkgKiBoYXNudWxscyBmbGFnLgorCQkJICovCisJCQlpZiAoIWNvbC0+YnZfYWxsbnVs bHMpCisJCQkJY29sLT5idl9oYXNudWxscyA9IHRydWU7CisJCX0KKwkJZWxzZQorCQl7CisJ CQlhZGRWYWx1ZSA9IGluZGV4X2dldHByb2NpbmZvKGluZGV4LCBpICsgMSwKKwkJCQkJCQkJ CQkgQlJJTl9QUk9DTlVNX0FERFZBTFVFKTsKKworCQkJLyoKKwkJCSAqIFVwZGF0ZSBkdHVw bGUgc3RhdGUsIGlmIGFuZCBhcyBuZWNlc3NhcnkuCisJCQkgKi8KKwkJCUZ1bmN0aW9uQ2Fs bDRDb2xsKGFkZFZhbHVlLAorCQkJCQkJCSAgYXR0ci0+YXR0Y29sbGF0aW9uLAorCQkJCQkJ CSAgUG9pbnRlckdldERhdHVtKHN0YXRlLT5ic19iZGVzYyksCisJCQkJCQkJICBQb2ludGVy R2V0RGF0dW0oY29sKSwKKwkJCQkJCQkgIHZhbHVlc1tpXSwgaXNudWxsW2ldKTsKKwkJfQog CiAJCS8qCi0JCSAqIFVwZGF0ZSBkdHVwbGUgc3RhdGUsIGlmIGFuZCBhcyBuZWNlc3Nhcnku CisJCSAqIElmIHRoZSByYW5nZSB3YXMgbm90IGFuIGVtcHR5IHJhbmdlIChpdCdkIGhhdmUg aGFzbnVsbHM9ZmFsc2UpLAorCQkgKiBtYWtlIHN1cmUgd2UgcmVtZW1iZXIgdGhlcmUgd2Vy ZSBOVUxMIHZhbHVlcy4gRWl0aGVyIHRoZSBhbGxudWxscworCQkgKiBmbGFnIGlzIHN0aWxs IHNldCB0byB0cnVlLCBvciB3ZSBuZWVkIHRvIHNldCB0aGUgaGFzbnVsbHMgZmxhZy4KIAkJ ICovCi0JCUZ1bmN0aW9uQ2FsbDRDb2xsKGFkZFZhbHVlLAotCQkJCQkJICBhdHRyLT5hdHRj b2xsYXRpb24sCi0JCQkJCQkgIFBvaW50ZXJHZXREYXR1bShzdGF0ZS0+YnNfYmRlc2MpLAot CQkJCQkJICBQb2ludGVyR2V0RGF0dW0oY29sKSwKLQkJCQkJCSAgdmFsdWVzW2ldLCBpc251 bGxbaV0pOworCQlpZiAoaGFzbnVsbHMgJiYgIWNvbC0+YnZfYWxsbnVsbHMpCisJCQljb2wt PmJ2X2hhc251bGxzID0gdHJ1ZTsKKworCQkvKiBXZSd2ZSBhZGRlZCBhIHJvdywgc28gdGhl IHN1bW1hcnkgc2hvdWxkIG5vdCBiZSBlbXB0eS4gKi8KKwkJQXNzZXJ0KCFCUklOX1JBTkdF X0lTX0VNUFRZKGNvbCkpOwogCX0KIH0KIApAQCAtMTQ2OCw5ICsxNjE5LDE1OSBAQCB1bmlv bl90dXBsZXMoQnJpbkRlc2MgKmJkZXNjLCBCcmluTWVtVHVwbGUgKmEsIEJyaW5UdXBsZSAq YikKIAlmb3IgKGtleW5vID0gMDsga2V5bm8gPCBiZGVzYy0+YmRfdHVwZGVzYy0+bmF0dHM7 IGtleW5vKyspCiAJewogCQlGbWdySW5mbyAgICp1bmlvbkZuOworCQlCcmluT3BjSW5mbyAq b3BjaW5mbyA9IGJkZXNjLT5iZF9pbmZvW2tleW5vXTsKIAkJQnJpblZhbHVlcyAqY29sX2Eg PSAmYS0+YnRfY29sdW1uc1trZXlub107CiAJCUJyaW5WYWx1ZXMgKmNvbF9iID0gJmRiLT5i dF9jb2x1bW5zW2tleW5vXTsKIAorCQkvKgorCQkgKiBJZiBCIGlzIGVtcHR5IChyZXByZXNl bnRzIG5vIHJvd3MpLCBpZ25vcmUgaXQgYW5kIGp1c3Qga2VlcAorCQkgKiBBIGFzIGlzICht aWdodCBiZSBlbXB0eSBldGMuKS4KKwkJICovCisJCWlmIChCUklOX1JBTkdFX0lTX0VNUFRZ KGNvbF9iKSkKKwkJCWNvbnRpbnVlOworCisJCS8qCisJCSAqIE5vdyB3ZSBrbm93IEIgaXMg bm90IGVtcHR5IC0gaXQgaGFzIGVpdGhlciBOVUxMcyBvciBkYXRhLCBvcgorCQkgKiBzb21l IGNvbWJpbmF0aW9uIG9mIGl0LiBXZSBuZWVkIHRvIG1lcmdlIGl0IGludG8gQSBzb21laG93 LgorCQkgKgorCQkgKiBJZiBBIGlzIGVtcHR5LCB3ZSBzaW1wbHkgY29weSBhbGwgdGhlIGZs YWdzIGFuZCBkYXRhIGZyb20gQi4KKwkJICovCisJCWlmIChCUklOX1JBTkdFX0lTX0VNUFRZ KGNvbF9hKSkKKwkJeworCQkJaW50CQlpOworCisJCQljb2xfYS0+YnZfYWxsbnVsbHMgPSBj b2xfYi0+YnZfYWxsbnVsbHM7CisJCQljb2xfYS0+YnZfaGFzbnVsbHMgPSBjb2xfYi0+YnZf aGFzbnVsbHM7CisKKwkJCS8qIElmIEIgaGFzIG5vIGRhdGEsIHdlJ3JlIGRvbmUuICovCisJ CQlpZiAoY29sX2ItPmJ2X2FsbG51bGxzKQorCQkJCWNvbnRpbnVlOworCisJCQlmb3IgKGkg PSAwOyBpIDwgb3BjaW5mby0+b2lfbnN0b3JlZDsgaSsrKQorCQkJCWNvbF9hLT5idl92YWx1 ZXNbaV0gPQorCQkJCQlkYXR1bUNvcHkoY29sX2ItPmJ2X3ZhbHVlc1tpXSwKKwkJCQkJCQkg IG9wY2luZm8tPm9pX3R5cGNhY2hlW2ldLT50eXBieXZhbCwKKwkJCQkJCQkgIG9wY2luZm8t Pm9pX3R5cGNhY2hlW2ldLT50eXBsZW4pOworCQl9CisKKwkJLyoKKwkJICogQm90aCBBIGFu ZCBCIGFyZSBub3QgZW1wdHksIGFuZCB3ZSBuZWVkIHRvIG1lcmdlIEIgaW50byBBLgorCQkg KiBUaGVyZSBhcmUgbXVsdGlwbGUgY29tYmluYXRpb25zIG9mIGFsbG51bGxzL2hhc251bGxz IGZsYWdzLgorCQkgKiBXZSd2ZSBoYW5kbGVkIHRoZSAiZW1wdHkiIGNhc2Ugb24gZWl0aGVy IHNpZGUgYWJvdmUsIHNvIHdlCisJCSAqIGNhbiBpZ25vcmUgdGhvc2UgY2FzZXMgLSB3aGlj aCBsZWF2ZXMgMyBmbGFnIGNvbWJpbmF0aW9ucworCQkgKiBvbiBlYWNoIHNpZGUsIHNvIDkg Y29tYmluYXRpb25zIGluIHRvdGFsLgorCQkgKgorCQkgKiBBOmFsbCAgQTpoYXMgIEI6YWxs ICBCOmhhcworCQkgKiB0cnVlICAgZmFsc2UgIHRydWUgICBmYWxzZSAgLSBub3RoaW5nIHRv IGRvCisJCSAqIHRydWUgICBmYWxzZSAgZmFsc2UgIHRydWUgICAtIHNldCBBOmhhcz10cnVl LCBjb3B5IGZyb20gQgorCQkgKiB0cnVlICAgZmFsc2UgIGZhbHNlICBmYWxzZSAgLSBzZXQg QTpoYXM9dHJ1ZSwgY29weSBmcm9tIEIKKwkJICoKKwkJICogZmFsc2UgIHRydWUgICB0cnVl ICAgZmFsc2UgIC0gbm90aGluZyB0byBkbworCQkgKiBmYWxzZSAgdHJ1ZSAgIGZhbHNlICB0 cnVlICAgLSBmbGFncyBPSywgY2FsbCB1bmlvbiBwcm9jCisJCSAqIGZhbHNlICB0cnVlICAg ZmFsc2UgIGZhbHNlICAtIGZsYWdzIE9LLCBjYWxsIHVuaW9uIHByb2MKKwkJICoKKwkJICog ZmFsc2UgIGZhbHNlICB0cnVlICAgZmFsc2UgIC0gc2V0IEE6aGFzPXRydWUKKwkJICogZmFs c2UgIGZhbHNlICBmYWxzZSAgdHJ1ZSAgIC0gc2V0IEE6aGFzPXRydWUsIGNhbGwgdW5pb24g cHJvYworCQkgKiBmYWxzZSAgZmFsc2UgIGZhbHNlICBmYWxzZSAgLSBmbGFncyBPSywgY2Fs bCB1bmlvbiBwcm9jCisJCSAqLworCQlpZiAoY29sX2EtPmJ2X2FsbG51bGxzICYmIGNvbF9i LT5idl9hbGxudWxscykKKwkJeworCQkJLyogbm90aGluZyB0byBkbyAtIGJvdGggc2lkZXMg YXJlIE5VTEwtb25seSAqLworCQkJY29udGludWU7CisJCX0KKwkJZWxzZSBpZiAoY29sX2Et PmJ2X2FsbG51bGxzICYmIGNvbF9iLT5idl9oYXNudWxscykKKwkJeworCQkJaW50CQlpOwor CQkJLyoKKwkJCSAqIEEgaXMgTlVMTC1vbmx5LCBidXQgQiBoYXMgc29tZSBub24tTlVMTCB2 YWx1ZXMgdG9vLiBTbyB0aGUKKwkJCSAqIHJlc3VsdCBoYXMgYm90aCBOVUxMcyBhbmQgbm9u LU5VTEwgdmFsdWVzLgorCQkJICovCisJCQljb2xfYS0+YnZfYWxsbnVsbHMgPSBmYWxzZTsK KwkJCWNvbF9hLT5idl9oYXNudWxscyA9IHRydWU7CisKKwkJCS8qIGNvcHkgZGF0YSBmcm9t IEIgdG8gQSAqLworCQkJZm9yIChpID0gMDsgaSA8IG9wY2luZm8tPm9pX25zdG9yZWQ7IGkr KykKKwkJCQljb2xfYS0+YnZfdmFsdWVzW2ldID0KKwkJCQkJZGF0dW1Db3B5KGNvbF9iLT5i dl92YWx1ZXNbaV0sCisJCQkJCQkJICBvcGNpbmZvLT5vaV90eXBjYWNoZVtpXS0+dHlwYnl2 YWwsCisJCQkJCQkJICBvcGNpbmZvLT5vaV90eXBjYWNoZVtpXS0+dHlwbGVuKTsKKworCQkJ Y29udGludWU7CisJCX0KKwkJZWxzZSBpZiAoY29sX2EtPmJ2X2FsbG51bGxzKQkvKiBCIGhh cyBubyBOVUxMcyAqLworCQl7CisJCQlpbnQJCWk7CisKKwkJCS8qCisJCQkgKiBBIGlzIE5V TEwtb25seSwgYnV0IEIgaGFzIHNvbWUgbm9uLU5VTEwgdmFsdWVzIHRvby4gU28gdGhlCisJ CQkgKiByZXN1bHQgaGFzIGJvdGggTlVMTHMgYW5kIG5vbi1OVUxMIHZhbHVlcy4KKwkJCSAq CisJCQkgKiBYWFggVGhpcyBpcyB0aGUgc2FtZSBhcyB0aGUgcHJlY2VkaW5nIGJyYW5jaCwg YnV0IEkndmUgbGVmdAorCQkJICogaXQgaGVyZSB0byBrZWVwIHRoZSBicmFuY2hlcyBtYXBw ZWQgMToxIHRvIHRoZSB0YWJsZSBvZgorCQkJICogY29tYmluYXRpb25zLgorCQkJICovCisJ CQljb2xfYS0+YnZfYWxsbnVsbHMgPSBmYWxzZTsKKwkJCWNvbF9hLT5idl9oYXNudWxscyA9 IHRydWU7CisKKwkJCS8qIGNvcHkgZGF0YSBmcm9tIEIgdG8gQSAqLworCQkJZm9yIChpID0g MDsgaSA8IG9wY2luZm8tPm9pX25zdG9yZWQ7IGkrKykKKwkJCQljb2xfYS0+YnZfdmFsdWVz W2ldID0KKwkJCQkJZGF0dW1Db3B5KGNvbF9iLT5idl92YWx1ZXNbaV0sCisJCQkJCQkJICBv cGNpbmZvLT5vaV90eXBjYWNoZVtpXS0+dHlwYnl2YWwsCisJCQkJCQkJICBvcGNpbmZvLT5v aV90eXBjYWNoZVtpXS0+dHlwbGVuKTsKKworCQkJY29udGludWU7CisJCX0KKwkJZWxzZSBp ZiAoY29sX2EtPmJ2X2hhc251bGxzICYmIGNvbF9iLT5idl9hbGxudWxscykKKwkJeworCQkJ LyogTm90aGluZyB0byBkbyAoZmxhZ3MgYXJlIGNvcnJlY3QsIG5vIGRhdGEgdG8gY29weSku ICovCisJCQljb250aW51ZTsKKwkJfQorCQllbHNlIGlmIChjb2xfYS0+YnZfaGFzbnVsbHMg JiYgY29sX2ItPmJ2X2hhc251bGxzKQorCQl7CisJCQkvKgorCQkJICogRmxhZ3MgYXJlIGNv cnJlY3QsIGJ1dCBib3RoIEEgYW5kIEIgaGF2ZSBub24tTlVMTCB2YWx1ZXMuCisJCQkgKiBT byB3ZSBoYXZlIHRvIGNhbGwgdGhlIHN1cHBvcnQgcHJvYyBCUklOX1BST0NOVU1fVU5JT04K KwkJCSAqIChzbyBubyAnY29udGludWUnIGhlcmUpLgorCQkJICovCisJCX0KKwkJZWxzZSBp ZiAoY29sX2EtPmJ2X2hhc251bGxzKQkvKiBCIGhhcyBubyBOVUxMcyAqLworCQl7CisJCQkv KgorCQkJICogQiBoYXMgbm8gTlVMTCB2YWx1ZXMsIHNvIGZsYWdzIGFyZSBPSy4gQnV0IGJv dGggc2lkZXMgaGF2ZQorCQkJICogc29tZSBub24tTlVMTCB2YWx1ZXMsIHNvIHdlIGhhdmUg dG8gY2FsbCB0aGUgc3VwcG9ydCBwcm9jCisJCQkgKiAoc28gbm8gJ2NvbnRpbnVlJyBoZXJl KS4KKwkJCSAqCisJCQkgKiBYWFggU2FtZSBhcyB0aGUgcHJlY2VkaW5nIGJyYW5jaCwgYnV0 IGtlcHQgZm9yIDE6MSBtYXBwaW5nLgorCQkJICovCisJCX0KKwkJZWxzZSBpZiAoY29sX2It PmJ2X2FsbG51bGxzKQkvKiBBIGhhcyBubyBOVUxMcyAqLworCQl7CisJCQkvKgorCQkJICog SnVzdCB1cGRhdGUgdGhlIGhhc251bGxzIGZsYWcgdG8gcmVtZW1iZXIgQiBoYXMgTlVMTCB2 YWx1ZXMKKwkJCSAqIGFuZCB3ZSdyZSBkb25lIChubyBkYXRhIG5vbi1OVUxMIHZhbHVlcyB0 byBjb3B5L21lcmdlKS4KKwkJCSAqLworCQkJY29sX2EtPmJ2X2hhc251bGxzID0gdHJ1ZTsK KwkJCWNvbnRpbnVlOworCQl9CisJCWVsc2UgaWYgKGNvbF9iLT5idl9oYXNudWxscykJLyog QSBoYXMgbm8gTlVMTHMgKi8KKwkJeworCQkJLyoKKwkJCSAqIFVwZGF0ZSB0aGUgaGFzbnVs bHMgZmxhZyB0byByZW1lbWJlciBCIGhhcyBOVUxMIHZhbHVlcywgYnV0CisJCQkgKiBib3Ro IHNpZGVzIGhhdmUgc29tZSBub24tTlVMTCBkYXRhIHNvIHdlIG5lZWR0byBjYWxsIHRoZQor CQkJICogQlJJTl9QUk9DTlVNX1VOSU9OIHByb2NlZHVyZSAoc28gbm8gJ2NvbnRpbnVlJyBo ZXJlKS4KKwkJCSAqLworCQkJY29sX2EtPmJ2X2hhc251bGxzID0gdHJ1ZTsKKwkJfQorCQll bHNlCisJCXsKKwkJCS8qCisJCQkgKiBOZWl0aGVyIHNpZGUgaGFzIGFueSBOVUxMIHZhbHVl cywgYm90aCBzaWRlcyBoYXZlIG5vbi1OVUxMCisJCQkgKiB2YWx1ZXMsIHNvIHdlIG5lZWQg dG8gY2FsbCB0aGUgQlJJTl9QUk9DTlVNX1VOSU9OIHByb2MgKHNvCisJCQkgKiBubyAnY29u dGludWUnIGhlcmUpLgorCQkJICovCisJCX0KKwogCQl1bmlvbkZuID0gaW5kZXhfZ2V0cHJv Y2luZm8oYmRlc2MtPmJkX2luZGV4LCBrZXlubyArIDEsCiAJCQkJCQkJCQlCUklOX1BST0NO VU1fVU5JT04pOwogCQlGdW5jdGlvbkNhbGwzQ29sbCh1bmlvbkZuLApkaWZmIC0tZ2l0IGEv c3JjL2JhY2tlbmQvYWNjZXNzL2JyaW4vYnJpbl9pbmNsdXNpb24uYyBiL3NyYy9iYWNrZW5k L2FjY2Vzcy9icmluL2JyaW5faW5jbHVzaW9uLmMKaW5kZXggN2UzODBkNjZlZDUuLmY5MjE3 Y2E4MjU0IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvYnJpbi9icmluX2luY2x1 c2lvbi5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9icmluL2JyaW5faW5jbHVzaW9uLmMK QEAgLTE0NywxOCArMTQ3LDggQEAgYnJpbl9pbmNsdXNpb25fYWRkX3ZhbHVlKFBHX0ZVTkNU SU9OX0FSR1MpCiAJQXR0ck51bWJlcglhdHRubzsKIAlGb3JtX3BnX2F0dHJpYnV0ZSBhdHRy OwogCi0JLyoKLQkgKiBJZiB0aGUgbmV3IHZhbHVlIGlzIG51bGwsIHdlIHJlY29yZCB0aGF0 IHdlIHNhdyBpdCBpZiBpdCdzIHRoZSBmaXJzdAotCSAqIG9uZTsgb3RoZXJ3aXNlLCB0aGVy ZSdzIG5vdGhpbmcgdG8gZG8uCi0JICovCi0JaWYgKGlzbnVsbCkKLQl7Ci0JCWlmIChjb2x1 bW4tPmJ2X2hhc251bGxzKQotCQkJUEdfUkVUVVJOX0JPT0woZmFsc2UpOwotCi0JCWNvbHVt bi0+YnZfaGFzbnVsbHMgPSB0cnVlOwotCQlQR19SRVRVUk5fQk9PTCh0cnVlKTsKLQl9CisJ LyogV2UncmUgbm90IHBhc3NpbmcgTlVMTCB2YWx1ZXMgdG8gdGhlIG9wY2xhc3MgYW55bW9y ZS4gKi8KKwlBc3NlcnQoIWlzbnVsbCk7CiAKIAlhdHRubyA9IGNvbHVtbi0+YnZfYXR0bm87 CiAJYXR0ciA9IFR1cGxlRGVzY0F0dHIoYmRlc2MtPmJkX3R1cGRlc2MsIGF0dG5vIC0gMSk7 CkBAIC01MTcsMzYgKzUwNywxNiBAQCBicmluX2luY2x1c2lvbl91bmlvbihQR19GVU5DVElP Tl9BUkdTKQogCiAJQXNzZXJ0KGNvbF9hLT5idl9hdHRubyA9PSBjb2xfYi0+YnZfYXR0bm8p OwogCi0JLyogQWRqdXN0ICJoYXNudWxscyIuICovCi0JaWYgKCFjb2xfYS0+YnZfaGFzbnVs bHMgJiYgY29sX2ItPmJ2X2hhc251bGxzKQotCQljb2xfYS0+YnZfaGFzbnVsbHMgPSB0cnVl OwotCi0JLyogSWYgdGhlcmUgYXJlIG5vIHZhbHVlcyBpbiBCLCB0aGVyZSdzIG5vdGhpbmcg bGVmdCB0byBkby4gKi8KLQlpZiAoY29sX2ItPmJ2X2FsbG51bGxzKQotCQlQR19SRVRVUk5f Vk9JRCgpOworCS8qCisJICogQWxsLW51bGwgc3VtbWFyaWVzIGFyZSBubyBsb25nZXIgcGFz c2VkIHRvIHRoZSB1bmlvbiBwcm9jICh0aGlzIGFsc28KKwkgKiBpbXBsaWVzIHRoZSBzdW1t YXJpZXMgYXJlIG5vdCBlbXB0eSkuCisJICovCisJQXNzZXJ0KCFjb2xfYS0+YnZfYWxsbnVs bHMpOworCUFzc2VydCghY29sX2ItPmJ2X2FsbG51bGxzKTsKIAogCWF0dG5vID0gY29sX2Et PmJ2X2F0dG5vOwogCWF0dHIgPSBUdXBsZURlc2NBdHRyKGJkZXNjLT5iZF90dXBkZXNjLCBh dHRubyAtIDEpOwogCi0JLyoKLQkgKiBBZGp1c3QgImFsbG51bGxzIi4gIElmIEEgZG9lc24n dCBoYXZlIHZhbHVlcywganVzdCBjb3B5IHRoZSB2YWx1ZXMgZnJvbQotCSAqIEIgaW50byBB LCBhbmQgd2UncmUgZG9uZS4gIFdlIGNhbm5vdCBydW4gdGhlIG9wZXJhdG9ycyBpbiB0aGlz IGNhc2UsCi0JICogYmVjYXVzZSB2YWx1ZXMgaW4gQSBtaWdodCBjb250YWluIGdhcmJhZ2Uu ICBOb3RlIHdlIGFscmVhZHkgZXN0YWJsaXNoZWQKLQkgKiB0aGF0IEIgY29udGFpbnMgdmFs dWVzLgotCSAqLwotCWlmIChjb2xfYS0+YnZfYWxsbnVsbHMpCi0JewotCQljb2xfYS0+YnZf YWxsbnVsbHMgPSBmYWxzZTsKLQkJY29sX2EtPmJ2X3ZhbHVlc1tJTkNMVVNJT05fVU5JT05d ID0KLQkJCWRhdHVtQ29weShjb2xfYi0+YnZfdmFsdWVzW0lOQ0xVU0lPTl9VTklPTl0sCi0J CQkJCSAgYXR0ci0+YXR0Ynl2YWwsIGF0dHItPmF0dGxlbik7Ci0JCWNvbF9hLT5idl92YWx1 ZXNbSU5DTFVTSU9OX1VOTUVSR0VBQkxFXSA9Ci0JCQljb2xfYi0+YnZfdmFsdWVzW0lOQ0xV U0lPTl9VTk1FUkdFQUJMRV07Ci0JCWNvbF9hLT5idl92YWx1ZXNbSU5DTFVTSU9OX0NPTlRB SU5TX0VNUFRZXSA9Ci0JCQljb2xfYi0+YnZfdmFsdWVzW0lOQ0xVU0lPTl9DT05UQUlOU19F TVBUWV07Ci0JCVBHX1JFVFVSTl9WT0lEKCk7Ci0JfQotCiAJLyogSWYgQiBpbmNsdWRlcyBl bXB0eSBlbGVtZW50cywgbWFyayBBIHNpbWlsYXJseSwgaWYgbmVlZGVkLiAqLwogCWlmICgh RGF0dW1HZXRCb29sKGNvbF9hLT5idl92YWx1ZXNbSU5DTFVTSU9OX0NPTlRBSU5TX0VNUFRZ XSkgJiYKIAkJRGF0dW1HZXRCb29sKGNvbF9iLT5idl92YWx1ZXNbSU5DTFVTSU9OX0NPTlRB SU5TX0VNUFRZXSkpCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvYnJpbi9icmlu X21pbm1heC5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2JyaW4vYnJpbl9taW5tYXguYwppbmRl eCA0YjVkNmE3MjEzNS4uZjI3NDhkMmUyNjcgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2Fj Y2Vzcy9icmluL2JyaW5fbWlubWF4LmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2JyaW4v YnJpbl9taW5tYXguYwpAQCAtNzUsMTggKzc1LDggQEAgYnJpbl9taW5tYXhfYWRkX3ZhbHVl KFBHX0ZVTkNUSU9OX0FSR1MpCiAJRm9ybV9wZ19hdHRyaWJ1dGUgYXR0cjsKIAlBdHRyTnVt YmVyCWF0dG5vOwogCi0JLyoKLQkgKiBJZiB0aGUgbmV3IHZhbHVlIGlzIG51bGwsIHdlIHJl Y29yZCB0aGF0IHdlIHNhdyBpdCBpZiBpdCdzIHRoZSBmaXJzdAotCSAqIG9uZTsgb3RoZXJ3 aXNlLCB0aGVyZSdzIG5vdGhpbmcgdG8gZG8uCi0JICovCi0JaWYgKGlzbnVsbCkKLQl7Ci0J CWlmIChjb2x1bW4tPmJ2X2hhc251bGxzKQotCQkJUEdfUkVUVVJOX0JPT0woZmFsc2UpOwot Ci0JCWNvbHVtbi0+YnZfaGFzbnVsbHMgPSB0cnVlOwotCQlQR19SRVRVUk5fQk9PTCh0cnVl KTsKLQl9CisJLyogV2UncmUgbm90IHBhc3NpbmcgTlVMTCB2YWx1ZXMgdG8gdGhlIG9wY2xh c3MgYW55bW9yZS4gKi8KKwlBc3NlcnQoIWlzbnVsbCk7CiAKIAlhdHRubyA9IGNvbHVtbi0+ YnZfYXR0bm87CiAJYXR0ciA9IFR1cGxlRGVzY0F0dHIoYmRlc2MtPmJkX3R1cGRlc2MsIGF0 dG5vIC0gMSk7CkBAIC0yNTAsMzMgKzI0MCwxNiBAQCBicmluX21pbm1heF91bmlvbihQR19G VU5DVElPTl9BUkdTKQogCiAJQXNzZXJ0KGNvbF9hLT5idl9hdHRubyA9PSBjb2xfYi0+YnZf YXR0bm8pOwogCi0JLyogQWRqdXN0ICJoYXNudWxscyIgKi8KLQlpZiAoIWNvbF9hLT5idl9o YXNudWxscyAmJiBjb2xfYi0+YnZfaGFzbnVsbHMpCi0JCWNvbF9hLT5idl9oYXNudWxscyA9 IHRydWU7Ci0KLQkvKiBJZiB0aGVyZSBhcmUgbm8gdmFsdWVzIGluIEIsIHRoZXJlJ3Mgbm90 aGluZyBsZWZ0IHRvIGRvICovCi0JaWYgKGNvbF9iLT5idl9hbGxudWxscykKLQkJUEdfUkVU VVJOX1ZPSUQoKTsKKwkvKgorCSAqIEFsbC1udWxsIHN1bW1hcmllcyBhcmUgbm8gbG9uZ2Vy IHBhc3NlZCB0byB0aGUgdW5pb24gcHJvYyAodGhpcyBhbHNvCisJICogaW1wbGllcyB0aGUg c3VtbWFyaWVzIGFyZSBub3QgZW1wdHkpLgorCSAqLworCUFzc2VydCghY29sX2EtPmJ2X2Fs bG51bGxzKTsKKwlBc3NlcnQoIWNvbF9iLT5idl9hbGxudWxscyk7CiAKIAlhdHRubyA9IGNv bF9hLT5idl9hdHRubzsKIAlhdHRyID0gVHVwbGVEZXNjQXR0cihiZGVzYy0+YmRfdHVwZGVz YywgYXR0bm8gLSAxKTsKIAotCS8qCi0JICogQWRqdXN0ICJhbGxudWxscyIuICBJZiBBIGRv ZXNuJ3QgaGF2ZSB2YWx1ZXMsIGp1c3QgY29weSB0aGUgdmFsdWVzIGZyb20KLQkgKiBCIGlu dG8gQSwgYW5kIHdlJ3JlIGRvbmUuICBXZSBjYW5ub3QgcnVuIHRoZSBvcGVyYXRvcnMgaW4g dGhpcyBjYXNlLAotCSAqIGJlY2F1c2UgdmFsdWVzIGluIEEgbWlnaHQgY29udGFpbiBnYXJi YWdlLiAgTm90ZSB3ZSBhbHJlYWR5IGVzdGFibGlzaGVkCi0JICogdGhhdCBCIGNvbnRhaW5z IHZhbHVlcy4KLQkgKi8KLQlpZiAoY29sX2EtPmJ2X2FsbG51bGxzKQotCXsKLQkJY29sX2Et PmJ2X2FsbG51bGxzID0gZmFsc2U7Ci0JCWNvbF9hLT5idl92YWx1ZXNbMF0gPSBkYXR1bUNv cHkoY29sX2ItPmJ2X3ZhbHVlc1swXSwKLQkJCQkJCQkJCQlhdHRyLT5hdHRieXZhbCwgYXR0 ci0+YXR0bGVuKTsKLQkJY29sX2EtPmJ2X3ZhbHVlc1sxXSA9IGRhdHVtQ29weShjb2xfYi0+ YnZfdmFsdWVzWzFdLAotCQkJCQkJCQkJCWF0dHItPmF0dGJ5dmFsLCBhdHRyLT5hdHRsZW4p OwotCQlQR19SRVRVUk5fVk9JRCgpOwotCX0KLQogCS8qIEFkanVzdCBtaW5pbXVtLCBpZiBC J3MgbWluIGlzIGxlc3MgdGhhbiBBJ3MgbWluICovCiAJZmluZm8gPSBtaW5tYXhfZ2V0X3N0 cmF0ZWd5X3Byb2NpbmZvKGJkZXNjLCBhdHRubywgYXR0ci0+YXR0dHlwaWQsCiAJCQkJCQkJ CQkJIEJUTGVzc1N0cmF0ZWd5TnVtYmVyKTsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2Fj Y2Vzcy9icmluL2JyaW5fdHVwbGUuYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9icmluL2JyaW5f dHVwbGUuYwppbmRleCBiM2I0NTNhZWQxMi4uODYxZGM3NmI3ZDMgMTAwNjQ0Ci0tLSBhL3Ny Yy9iYWNrZW5kL2FjY2Vzcy9icmluL2JyaW5fdHVwbGUuYworKysgYi9zcmMvYmFja2VuZC9h Y2Nlc3MvYnJpbi9icmluX3R1cGxlLmMKQEAgLTM5NCw3ICszOTQsMjAgQEAgYnJpbl9mb3Jt X3BsYWNlaG9sZGVyX3R1cGxlKEJyaW5EZXNjICpicmRlc2MsIEJsb2NrTnVtYmVyIGJsa25v LCBTaXplICpzaXplKQogCiAJCSpiaXRQIHw9IGJpdG1hc2s7CiAJfQotCS8qIG5vIG5lZWQg dG8gc2V0IGhhc251bGxzICovCisJLyogc2V0IGhhc251bGxzIHRydWUgZm9yIGFsbCBhdHRy aWJ1dGVzICovCisJZm9yIChrZXlubyA9IDA7IGtleW5vIDwgYnJkZXNjLT5iZF90dXBkZXNj LT5uYXR0czsga2V5bm8rKykKKwl7CisJCWlmIChiaXRtYXNrICE9IEhJR0hCSVQpCisJCQli aXRtYXNrIDw8PSAxOworCQllbHNlCisJCXsKKwkJCWJpdFAgKz0gMTsKKwkJCSpiaXRQID0g MHgwOworCQkJYml0bWFzayA9IDE7CisJCX0KKworCQkqYml0UCB8PSBiaXRtYXNrOworCX0K IAogCSpzaXplID0gbGVuOwogCXJldHVybiByZXR0dXBsZTsKQEAgLTQ5Myw4ICs1MDYsMTUg QEAgYnJpbl9tZW10dXBsZV9pbml0aWFsaXplKEJyaW5NZW1UdXBsZSAqZHR1cGxlLCBCcmlu RGVzYyAqYnJkZXNjKQogCWZvciAoaSA9IDA7IGkgPCBicmRlc2MtPmJkX3R1cGRlc2MtPm5h dHRzOyBpKyspCiAJewogCQlkdHVwbGUtPmJ0X2NvbHVtbnNbaV0uYnZfYXR0bm8gPSBpICsg MTsKKworCQkvKgorCQkgKiBFYWNoIG1lbXR1cGxlIHN0YXJ0cyBhcyBpZiBpdCByZXByZXNl bnRzIG5vIHJvd3MsIHdoaWNoIGlzIGluZGljYXRlZAorCQkgKiBieSBoYXZpbmcgYm90IGFs bG51bGxzIGFuZCBoYXNudWxscyBzZXQgdG8gdHJ1ZS4gV2UgdHJhY2sgdGhpcyBmb3IKKwkJ ICogYWxsIGNvbHVtbnMsIGJlY2F1c2Ugd2UgZG9uJ3QgaGF2ZSBhIGZsYWcgZm9yIHRoZSB3 aG9sZSBtZW10dXBsZS4KKwkJICovCiAJCWR0dXBsZS0+YnRfY29sdW1uc1tpXS5idl9hbGxu dWxscyA9IHRydWU7Ci0JCWR0dXBsZS0+YnRfY29sdW1uc1tpXS5idl9oYXNudWxscyA9IGZh bHNlOworCQlkdHVwbGUtPmJ0X2NvbHVtbnNbaV0uYnZfaGFzbnVsbHMgPSB0cnVlOworCiAJ CWR0dXBsZS0+YnRfY29sdW1uc1tpXS5idl92YWx1ZXMgPSAoRGF0dW0gKikgY3VycmRhdHVt OwogCQljdXJyZGF0dW0gKz0gc2l6ZW9mKERhdHVtKSAqIGJyZGVzYy0+YmRfaW5mb1tpXS0+ b2lfbnN0b3JlZDsKIAl9CkBAIC01NTcsNiArNTc3LDEzIEBAIGJyaW5fZGVmb3JtX3R1cGxl KEJyaW5EZXNjICpicmRlc2MsIEJyaW5UdXBsZSAqdHVwbGUsIEJyaW5NZW1UdXBsZSAqZE1l bXR1cGxlKQogCXsKIAkJaW50CQkJaTsKIAorCQkvKgorCQkgKiBNYWtlIHN1cmUgdG8gb3Zl cndyaXRlIHRoZSBoYXNudWxscyBmbGFnLCBiZWNhdXNlIGl0IHdhcyBpbml0aWFsaXplZAor CQkgKiB0byB0cnVlIGJ5IGJyaW5fbWVtdHVwbGVfaW5pdGlhbGl6ZSBhbmQgd2UgZG9uJ3Qg d2FudCB0byBza2lwIGl0IGlmCisJCSAqIGFsbG51bGxzPXRydWUuCisJCSAqLworCQlkdHVw LT5idF9jb2x1bW5zW2tleW5vXS5idl9oYXNudWxscyA9IGhhc251bGxzW2tleW5vXTsKKwog CQlpZiAoYWxsbnVsbHNba2V5bm9dKQogCQl7CiAJCQl2YWx1ZW5vICs9IGJyZGVzYy0+YmRf aW5mb1trZXlub10tPm9pX25zdG9yZWQ7CmRpZmYgLS1naXQgYS9zcmMvdGVzdC9tb2R1bGVz L2JyaW4vZXhwZWN0ZWQvc3VtbWFyaXphdGlvbi1hbmQtaW5wcm9ncmVzcy1pbnNlcnRpb24u b3V0IGIvc3JjL3Rlc3QvbW9kdWxlcy9icmluL2V4cGVjdGVkL3N1bW1hcml6YXRpb24tYW5k LWlucHJvZ3Jlc3MtaW5zZXJ0aW9uLm91dAppbmRleCAyYTQ3NTVkMDk5OC4uNTg0YWMyNjAy ZjcgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L21vZHVsZXMvYnJpbi9leHBlY3RlZC9zdW1tYXJp emF0aW9uLWFuZC1pbnByb2dyZXNzLWluc2VydGlvbi5vdXQKKysrIGIvc3JjL3Rlc3QvbW9k dWxlcy9icmluL2V4cGVjdGVkL3N1bW1hcml6YXRpb24tYW5kLWlucHJvZ3Jlc3MtaW5zZXJ0 aW9uLm91dApAQCAtNCw3ICs0LDcgQEAgc3RhcnRpbmcgcGVybXV0YXRpb246IHMyY2hlY2sg czFiIHMyYiBzMWkgczJzdW1tIHMxYyBzMmMgczJjaGVjawogc3RlcCBzMmNoZWNrOiBTRUxF Q1QgKiBGUk9NIGJyaW5fcGFnZV9pdGVtcyhnZXRfcmF3X3BhZ2UoJ2JyaW5pZHgnLCAyKSwg J2JyaW5pZHgnOjpyZWdjbGFzcyk7CiBpdGVtb2Zmc2V0fGJsa251bXxhdHRudW18YWxsbnVs bHN8aGFzbnVsbHN8cGxhY2Vob2xkZXJ8dmFsdWUgICAKIC0tLS0tLS0tLS0rLS0tLS0tKy0t LS0tLSstLS0tLS0tLSstLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLQotICAgICAgICAg MXwgICAgIDB8ICAgICAxfGYgICAgICAgfGYgICAgICAgfGYgICAgICAgICAgfHsxIC4uIDF9 CisgICAgICAgICAxfCAgICAgMHwgICAgIDF8ZiAgICAgICB8dCAgICAgICB8ZiAgICAgICAg ICB8ezEgLi4gMX0KICgxIHJvdykKIAogc3RlcCBzMWI6IEJFR0lOIElTT0xBVElPTiBMRVZF TCBSRVBFQVRBQkxFIFJFQUQ7CkBAIC0yNiw3ICsyNiw3IEBAIHN0ZXAgczJjOiBDT01NSVQ7 CiBzdGVwIHMyY2hlY2s6IFNFTEVDVCAqIEZST00gYnJpbl9wYWdlX2l0ZW1zKGdldF9yYXdf cGFnZSgnYnJpbmlkeCcsIDIpLCAnYnJpbmlkeCc6OnJlZ2NsYXNzKTsKIGl0ZW1vZmZzZXR8 YmxrbnVtfGF0dG51bXxhbGxudWxsc3xoYXNudWxsc3xwbGFjZWhvbGRlcnx2YWx1ZSAgICAg IAogLS0tLS0tLS0tLSstLS0tLS0rLS0tLS0tKy0tLS0tLS0tKy0tLS0tLS0tKy0tLS0tLS0t LS0tKy0tLS0tLS0tLS0tCi0gICAgICAgICAxfCAgICAgMHwgICAgIDF8ZiAgICAgICB8ZiAg ICAgICB8ZiAgICAgICAgICB8ezEgLi4gMX0gICAKKyAgICAgICAgIDF8ICAgICAwfCAgICAg MXxmICAgICAgIHx0ICAgICAgIHxmICAgICAgICAgIHx7MSAuLiAxfSAgIAogICAgICAgICAg MnwgICAgIDF8ICAgICAxfGYgICAgICAgfGYgICAgICAgfGYgICAgICAgICAgfHsxIC4uIDEw MDB9CiAoMiByb3dzKQogCkBAIC0zNSw3ICszNSw3IEBAIHN0YXJ0aW5nIHBlcm11dGF0aW9u OiBzMmNoZWNrIHMxYiBzMWkgczJ2YWN1dW0gczFjIHMyY2hlY2sKIHN0ZXAgczJjaGVjazog U0VMRUNUICogRlJPTSBicmluX3BhZ2VfaXRlbXMoZ2V0X3Jhd19wYWdlKCdicmluaWR4Jywg MiksICdicmluaWR4Jzo6cmVnY2xhc3MpOwogaXRlbW9mZnNldHxibGtudW18YXR0bnVtfGFs bG51bGxzfGhhc251bGxzfHBsYWNlaG9sZGVyfHZhbHVlICAgCiAtLS0tLS0tLS0tKy0tLS0t LSstLS0tLS0rLS0tLS0tLS0rLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0KLSAgICAg ICAgIDF8ICAgICAwfCAgICAgMXxmICAgICAgIHxmICAgICAgIHxmICAgICAgICAgIHx7MSAu LiAxfQorICAgICAgICAgMXwgICAgIDB8ICAgICAxfGYgICAgICAgfHQgICAgICAgfGYgICAg ICAgICAgfHsxIC4uIDF9CiAoMSByb3cpCiAKIHN0ZXAgczFiOiBCRUdJTiBJU09MQVRJT04g TEVWRUwgUkVQRUFUQUJMRSBSRUFEOwpAQCAtNDUsNyArNDUsNyBAQCBzdGVwIHMxYzogQ09N TUlUOwogc3RlcCBzMmNoZWNrOiBTRUxFQ1QgKiBGUk9NIGJyaW5fcGFnZV9pdGVtcyhnZXRf cmF3X3BhZ2UoJ2JyaW5pZHgnLCAyKSwgJ2JyaW5pZHgnOjpyZWdjbGFzcyk7CiBpdGVtb2Zm c2V0fGJsa251bXxhdHRudW18YWxsbnVsbHN8aGFzbnVsbHN8cGxhY2Vob2xkZXJ8dmFsdWUg ICAgICAKIC0tLS0tLS0tLS0rLS0tLS0tKy0tLS0tLSstLS0tLS0tLSstLS0tLS0tLSstLS0t LS0tLS0tLSstLS0tLS0tLS0tLQotICAgICAgICAgMXwgICAgIDB8ICAgICAxfGYgICAgICAg fGYgICAgICAgfGYgICAgICAgICAgfHsxIC4uIDF9ICAgCisgICAgICAgICAxfCAgICAgMHwg ICAgIDF8ZiAgICAgICB8dCAgICAgICB8ZiAgICAgICAgICB8ezEgLi4gMX0gICAKICAgICAg ICAgIDJ8ICAgICAxfCAgICAgMXxmICAgICAgIHxmICAgICAgIHxmICAgICAgICAgIHx7MSAu LiAxMDAwfQogKDIgcm93cykKIApkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvbW9kdWxlcy9icmlu L3NwZWNzL3N1bW1hcml6YXRpb24tYW5kLWlucHJvZ3Jlc3MtaW5zZXJ0aW9uLnNwZWMgYi9z cmMvdGVzdC9tb2R1bGVzL2JyaW4vc3BlY3Mvc3VtbWFyaXphdGlvbi1hbmQtaW5wcm9ncmVz cy1pbnNlcnRpb24uc3BlYwppbmRleCAxOWFjMThhMmU4OC4uMThiYTkyYjdiYTEgMTAwNjQ0 Ci0tLSBhL3NyYy90ZXN0L21vZHVsZXMvYnJpbi9zcGVjcy9zdW1tYXJpemF0aW9uLWFuZC1p bnByb2dyZXNzLWluc2VydGlvbi5zcGVjCisrKyBiL3NyYy90ZXN0L21vZHVsZXMvYnJpbi9z cGVjcy9zdW1tYXJpemF0aW9uLWFuZC1pbnByb2dyZXNzLWluc2VydGlvbi5zcGVjCkBAIC05 LDYgKzksNyBAQCBzZXR1cAogICAgICkgV0lUSCAoZmlsbGZhY3Rvcj0xMCk7CiAgICAgQ1JF QVRFIElOREVYIGJyaW5pZHggT04gYnJpbl9pc28gVVNJTkcgYnJpbiAodmFsdWUpIFdJVEgg KHBhZ2VzX3Blcl9yYW5nZT0xKTsKICAgICAtLSB0aGlzIGZpbGxzIHRoZSBmaXJzdCBwYWdl CisgICAgSU5TRVJUIElOVE8gYnJpbl9pc28gVkFMVUVTIChOVUxMKTsKICAgICBETyAkJAog ICAgIERFQ0xBUkUgY3VydGlkIHRpZDsKICAgICBCRUdJTgotLSAKMi4zOS4yCgo= --------------L1SG10kT0ZUc0hCgDIv70udx--