Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1v6DLQ-0014ZP-2m for pgsql-hackers@arkaria.postgresql.org; Tue, 07 Oct 2025 19:27:32 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.94.2) (envelope-from ) id 1v6DLN-002oQr-F8 for pgsql-hackers@arkaria.postgresql.org; Tue, 07 Oct 2025 19:27:30 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1v6DLM-002oQj-Sy for pgsql-hackers@lists.postgresql.org; Tue, 07 Oct 2025 19:27:30 +0000 Received: from flow-a5-smtp.messagingengine.com ([103.168.172.140]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1v6DLL-000ubj-0l for pgsql-hackers@postgresql.org; Tue, 07 Oct 2025 19:27:29 +0000 Received: from phl-compute-04.internal (phl-compute-04.internal [10.202.2.44]) by mailflow.phl.internal (Postfix) with ESMTP id F1EA913800B5; Tue, 7 Oct 2025 15:27:24 -0400 (EDT) Received: from phl-imap-03 ([10.202.2.93]) by phl-compute-04.internal (MEProxy); Tue, 07 Oct 2025 15:27:24 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=compiler.org; h= cc:cc:content-type:content-type:date:date:from:from:in-reply-to :in-reply-to:message-id:mime-version:references:reply-to:subject :subject:to:to; s=fm2; t=1759865244; x=1759872444; bh=2EIiMzgkNe vNtxDVnTfeHhI68PjnDEX0E4lhsZllYtk=; b=ZIl6L+TXQ0VLQaDORDJi+d+aio nO6TmvNiEcVheGbK98k726bIi9j3mqLHGa9E/9yslMGhJPJNeHRaJZYFxIoz/3hV zuRpHKsZUuOfSFGB1Pc5oR7HUJYS6e1e2f9hrGM/CGbF+lO0QuKCw88Ut3gAG2Sr JXzFyOyJn8hth262pJCrbPqpK+P1YHuFjRMeowiwOzSyja81ei5w7P0SwYtRrHaX krlfhx4QGN1FZtw8/f60zoSa8y8lgHiQizPmkwwM01iOI3azAVn2XN1vWBj4SGSX DteC+RBCWhdTyDc1zUMD/tuicB/kuSK62JSVzg21Vj6KbKXrcqT4+PR3voKQ== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc:cc:content-type:content-type:date:date :feedback-id:feedback-id:from:from:in-reply-to:in-reply-to :message-id:mime-version:references:reply-to:subject:subject:to :to:x-me-proxy:x-me-sender:x-me-sender:x-sasl-enc; s=fm2; t= 1759865244; x=1759872444; bh=2EIiMzgkNevNtxDVnTfeHhI68PjnDEX0E4l hsZllYtk=; b=GfmTsQa7IyIWZg6hmlO4/XhRBRm6w+cixyBcfFfuylnSu9n90nE rnSVS2Jxa8jGSgb7tToc80AQC74gdOHIy8ctmMWE+vRz4aQhAX0cnbMYSvbzBmlf geO5Uf9ICqjNMm+s7yKO+OYjHdBCpahqDqcX+xI//IzhDpu/Zdp8/WWOvYI00SUH 1HFGz3OSxJ+XjobmOigltnBNEwhMbA+XMqkuMmraHsHfgxJygH1USrv4Oq5ACkR7 n0asOWcO4wsEoIjwBzHxSsWp4FRvLfwcBCtVifufLpVQBLLH+Qg6HDVrg2k6MMPF 419JbD266h56Rqve8BUASAuNjPzCRJvIpHg== X-ME-Sender: X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgeeffedrtdeggddutdduvdehucetufdoteggodetrf dotffvucfrrhhofhhilhgvmecuhfgrshhtofgrihhlpdfurfetoffkrfgpnffqhgenuceu rghilhhouhhtmecufedttdenucenucfjughrpefoggffhffvvefkjghfufgtsehmtderre ertddtnecuhfhrohhmpedflfhovghlucflrggtohgsshhonhdfuceojhhovghlsegtohhm phhilhgvrhdrohhrgheqnecuggftrfgrthhtvghrnhepfffgleffffdvhefhieegfeeije dujedvieeuveeugefgveeukeevieethefhteeinecuvehluhhsthgvrhfuihiivgeptden ucfrrghrrghmpehmrghilhhfrhhomhepjhhovghlsegtohhmphhilhgvrhdrohhrghdpnh gspghrtghpthhtohepfedpmhhouggvpehsmhhtphhouhhtpdhrtghpthhtohepmhgrthhh vghushhsshhilhhvleejsehgmhgrihhlrdgtohhmpdhrtghpthhtohepphhgshhqlhdqhh grtghkvghrshesphhoshhtghhrvghsqhhlrdhorhhgpdhrtghpthhtohepthhglhesshhs shdrphhghhdrphgrrdhush X-ME-Proxy: Feedback-ID: ic6394509:Fastmail Received: by mailuser.phl.internal (Postfix, from userid 501) id 9C7A318E0063; Tue, 7 Oct 2025 15:27:24 -0400 (EDT) X-Mailer: MessagingEngine.com Webmail Interface MIME-Version: 1.0 X-ThreadId: AZ7XRsRLdGms Date: Tue, 07 Oct 2025 21:26:31 +0200 From: "Joel Jacobson" To: "Tom Lane" Cc: "Matheus Alcantara" , pgsql-hackers Message-Id: <8aeae418-92a6-4bbd-9c06-9574c79e59f7@app.fastmail.com> In-Reply-To: <2495353.1759860890@sss.pgh.pa.us> References: <6899c044-4a82-49be-8117-e6f669765f7e@app.fastmail.com> <165530.1752362320@sss.pgh.pa.us> <02a7cd37-e2fc-4212-8b19-f8c239c95fb8@app.fastmail.com> <96f00bf1-cc9d-4520-9d02-9e14e7767c88@app.fastmail.com> <30c2aa7d-dd6c-4b68-a2e4-f217a1a34acf@app.fastmail.com> <0b4d402a-9ac2-4aa8-acf8-8231dbe579ea@app.fastmail.com> <3095599.1758644879@sss.pgh.pa.us> <0dc6a2cc-5216-4dc1-9dd2-430cafc6095b@app.fastmail.com> <52CC167F-763B-4ECA-B0B4-DAB381816828@gmail.com> <9186C6D0-F7A9-482A-9183-89E530B57E36@gmail.com> <1073593.1759423179@sss.pgh.pa.us> <4bd5e6c4-6fa7-44bb-869d-59a32a331fa8@app.fastmail.com> <85828f29-e72e-4400-94f3-9a69bc8dc239@app.fastmail.com> <2495353.1759860890@sss.pgh.pa.us> Subject: Re: Optimize LISTEN/NOTIFY Content-Type: multipart/mixed; boundary=7d410dd9664d4fb08c1071460b96d7f1 List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --7d410dd9664d4fb08c1071460b96d7f1 Content-Type: text/plain Content-Transfer-Encoding: 7bit On Tue, Oct 7, 2025, at 20:14, Tom Lane wrote: > "Joel Jacobson" writes: >>> 7. I'm wondering if we could add some TAP tests for this? I think that >>> adding a case to ensure that we can grown the dshash correctly and also >>> we manage multiple backends to the same channel properly. This CF [1] >>> has some examples of how TAP tests can be created to test LISTEN/NOTIFY > >> I will look over the tests. Maybe we should add some elog DEBUG at the >> new code paths, and ensure the tests at least cover all of them? > > I went to do a coverage test on v10, and found that it does not get > through the existing async-notify isolation test: it panics with > "cannot abort transaction %u, it was already committed". It's a bit > premature to worry about adding new tests if you're not passing the > ones that are there. Ops, I see I got the list_member() code wrong. I've changed it to now create String nodes, and then use strVal(). I also changed back to dshash_find(..., false) in SignalBackends(), since that makes more sense to me, since we're not modifying entry. (This was the code change due to me being fooled by the false alarm from the NetBSD animal.) /Joel --7d410dd9664d4fb08c1071460b96d7f1 Content-Disposition: attachment; filename="optimize_listen_notify-v11.patch" Content-Type: application/octet-stream; name="optimize_listen_notify-v11.patch" Content-Transfer-Encoding: base64 RnJvbSAzYjBjYzU2OGFlNWVhOTJmNjUyOGIwMDYyMDE3MGU4ODc1OWRkZTM5IE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBKb2VsIEphY29ic29uIDxqb2VsQGNvbXBpbGVyLm9y Zz4KRGF0ZTogVHVlLCA3IE9jdCAyMDI1IDIwOjU2OjQ3ICswMjAwClN1YmplY3Q6IFtQQVRD SF0gT3B0aW1pemUgTElTVEVOL05PVElGWSB3aXRoIGNoYW5uZWwtc3BlY2lmaWMgbGlzdGVu ZXIKIHRyYWNraW5nCgpDdXJyZW50bHksIGlkbGUgbGlzdGVuaW5nIGJhY2tlbmRzIGNhdXNl IGEgZHJhbWF0aWMgc2xvd2Rvd24gZHVlIHRvCmNvbnRleHQgc3dpdGNoaW5nIHdoZW4gdGhl eSBhcmUgc2lnbmFsZWQgYW5kIHdha2UgdXAuIFRoaXMgaXMgd2FzdGVmdWwKd2hlbiB0aGV5 IGFyZSBub3QgbGlzdGVuaW5nIHRvIHRoZSBjaGFubmVsIGJlaW5nIG5vdGlmaWVkLgoKSnVz dCAxMCBleHRyYSBpZGxlIGxpc3RlbmluZyBjb25uZWN0aW9ucyBjYXVzZSBhIHNsb3dkb3du IGZyb20gODcwMCBUUFMKdG8gNjEwMCBUUFMsIDEwMCBleHRyYSBjYXVzZSBpdCB0byBkcm9w IHRvIDIwMDAgVFBTLCBhbmQgYXQgMTAwMCBleHRyYQppdCBmYWxscyB0byAyNTAgVFBTLgoK VGhpcyBwYXRjaCBpbnRyb2R1Y2VzIHRhcmdldGVkIHNpZ25hbGluZyBmb3IgTElTVEVOL05P VElGWSwgaW1wcm92aW5nCnNjYWxhYmlsaXR5IGluIHdvcmtsb2FkcyB3aXRoIG1hbnkgaWRs ZSBsaXN0ZW5lcnMuCgpBIGR5bmFtaWMgc2hhcmVkIGhhc2ggdGFibGUgbm93IHRyYWNrcyB3 aGljaCBiYWNrZW5kcyBsaXN0ZW4gb24gZWFjaAooZGF0YWJhc2UsIGNoYW5uZWwpIHBhaXIs IHdoaWNoIFNpZ25hbEJhY2tlbmRzKCkgdXNlcyB0byBwZXJmb3JtCnRhcmdldGVkIHNpZ25h bGluZy4gIEluIGFkZGl0aW9uLCBpdCBzdGFnZ2VycyB3YWtldXBzIGJ5IHNpZ25hbGluZyBv bmUKYmFja2VuZCBhdCB0aGUgZ2xvYmFsIHRhaWwgdG8gaGVscCBpdCBhZHZhbmNlIGdyYWR1 YWxseSwgYW5kIGZvcmNlcyBhbnkKZXhjZXNzaXZlbHkgbGFnZ2luZyBiYWNrZW5kcyB0byBj YXRjaCB1cC4gIEEgcGVyLWJhY2tlbmQgd2FrZXVwX3BlbmRpbmcKZmxhZyBhdm9pZHMgcmVk dW5kYW50IHNpZ25hbHMuCi0tLQogc3JjL2JhY2tlbmQvY29tbWFuZHMvYXN5bmMuYyAgICAg ICAgICAgICAgICAgIHwgNDY2ICsrKysrKysrKysrKysrKystLQogLi4uL3V0aWxzL2FjdGl2 aXR5L3dhaXRfZXZlbnRfbmFtZXMudHh0ICAgICAgIHwgICAxICsKIHNyYy9pbmNsdWRlL3N0 b3JhZ2UvbHdsb2NrbGlzdC5oICAgICAgICAgICAgICB8ICAgMSArCiBzcmMvdG9vbHMvcGdp bmRlbnQvdHlwZWRlZnMubGlzdCAgICAgICAgICAgICAgfCAgIDIgKwogNCBmaWxlcyBjaGFu Z2VkLCA0MzIgaW5zZXJ0aW9ucygrKSwgMzggZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEv c3JjL2JhY2tlbmQvY29tbWFuZHMvYXN5bmMuYyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2Fz eW5jLmMKaW5kZXggNGJkMzdkNWJlYjUuLmJlNWEzOTRmYzRmIDEwMDY0NAotLS0gYS9zcmMv YmFja2VuZC9jb21tYW5kcy9hc3luYy5jCisrKyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2Fz eW5jLmMKQEAgLTI0LDggKzI0LDEwIEBACiAgKgkgIEFsbCBub3RpZmljYXRpb24gbWVzc2Fn ZXMgYXJlIHBsYWNlZCBpbiB0aGUgcXVldWUgYW5kIGxhdGVyIHJlYWQgb3V0CiAgKgkgIGJ5 IGxpc3RlbmluZyBiYWNrZW5kcy4KICAqCi0gKgkgIFRoZXJlIGlzIG5vIGNlbnRyYWwga25v d2xlZGdlIG9mIHdoaWNoIGJhY2tlbmQgbGlzdGVucyBvbiB3aGljaCBjaGFubmVsOwotICoJ ICBldmVyeSBiYWNrZW5kIGhhcyBpdHMgb3duIGxpc3Qgb2YgaW50ZXJlc3RpbmcgY2hhbm5l bHMuCisgKgkgIFdlIGFsc28gbWFpbnRhaW4gYSBkeW5hbWljIHNoYXJlZCBoYXNoIHRhYmxl IChkc2hhc2gpIHRoYXQgbWFwcyBjaGFubmVsCisgKgkgIG5hbWVzIHRvIHRoZSBzZXQgb2Yg YmFja2VuZHMgbGlzdGVuaW5nIG9uIGVhY2ggY2hhbm5lbC4gVGhpcyB0YWJsZSBpcworICoJ ICBjcmVhdGVkIGxhemlseSBvbiB0aGUgZmlyc3QgTElTVEVOIGNvbW1hbmQgYW5kIGdyb3dz IGR5bmFtaWNhbGx5IGFzCisgKgkgIG5lZWRlZC4KICAqCiAgKgkgIEFsdGhvdWdoIHRoZXJl IGlzIG9ubHkgb25lIHF1ZXVlLCBub3RpZmljYXRpb25zIGFyZSB0cmVhdGVkIGFzIGJlaW5n CiAgKgkgIGRhdGFiYXNlLWxvY2FsOyB0aGlzIGlzIGRvbmUgYnkgaW5jbHVkaW5nIHRoZSBz ZW5kZXIncyBkYXRhYmFzZSBPSUQKQEAgLTcxLDEzICs3MywxNyBAQAogICoJICBtYWtlIGFu eSBhY3R1YWwgdXBkYXRlcyB0byB0aGUgZWZmZWN0aXZlIGxpc3RlbiBzdGF0ZSAobGlzdGVu Q2hhbm5lbHMpLgogICoJICBUaGVuIHdlIHNpZ25hbCBhbnkgYmFja2VuZHMgdGhhdCBtYXkg YmUgaW50ZXJlc3RlZCBpbiBvdXIgbWVzc2FnZXMKICAqCSAgKGluY2x1ZGluZyBvdXIgb3du IGJhY2tlbmQsIGlmIGxpc3RlbmluZykuICBUaGlzIGlzIGRvbmUgYnkKLSAqCSAgU2lnbmFs QmFja2VuZHMoKSwgd2hpY2ggc2NhbnMgdGhlIGxpc3Qgb2YgbGlzdGVuaW5nIGJhY2tlbmRz IGFuZCBzZW5kcyBhCi0gKgkgIFBST0NTSUdfTk9USUZZX0lOVEVSUlVQVCBzaWduYWwgdG8g ZXZlcnkgbGlzdGVuaW5nIGJhY2tlbmQgKHdlIGRvbid0Ci0gKgkgIGtub3cgd2hpY2ggYmFj a2VuZCBpcyBsaXN0ZW5pbmcgb24gd2hpY2ggY2hhbm5lbCBzbyB3ZSBtdXN0IHNpZ25hbCB0 aGVtCi0gKgkgIGFsbCkuICBXZSBjYW4gZXhjbHVkZSBiYWNrZW5kcyB0aGF0IGFyZSBhbHJl YWR5IHVwIHRvIGRhdGUsIHRob3VnaCwgYW5kCi0gKgkgIHdlIGNhbiBhbHNvIGV4Y2x1ZGUg YmFja2VuZHMgdGhhdCBhcmUgaW4gb3RoZXIgZGF0YWJhc2VzICh1bmxlc3MgdGhleQotICoJ ICBhcmUgd2F5IGJlaGluZCBhbmQgc2hvdWxkIGJlIGtpY2tlZCB0byBtYWtlIHRoZW0gYWR2 YW5jZSB0aGVpcgotICoJICBwb2ludGVycykuCisgKgkgIFNpZ25hbEJhY2tlbmRzKCksIHdo aWNoIGNvbnN1bHRzIHRoZSBzaGFyZWQgY2hhbm5lbCBoYXNoIHRhYmxlIHRvCisgKgkgIGlk ZW50aWZ5IGxpc3RlbmVycyBmb3IgdGhlIGNoYW5uZWxzIHRoYXQgaGF2ZSBwZW5kaW5nIG5v dGlmaWNhdGlvbnMKKyAqCSAgaW4gdGhlIGN1cnJlbnQgZGF0YWJhc2UuICBFYWNoIHNlbGVj dGVkIGJhY2tlbmQgaXMgbWFya2VkIGFzIGhhdmluZyBhCisgKgkgIHdha2V1cCBwZW5kaW5n IHRvIGF2b2lkIGR1cGxpY2F0ZSBzaWduYWxzLCBhbmQgYSBQUk9DU0lHX05PVElGWV9JTlRF UlJVUFQKKyAqCSAgc2lnbmFsIGlzIHNlbnQgdG8gaXQuCisgKgorICoJICBUbyBtYWludGFp biBxdWV1ZSBoZWFsdGgsIFNpZ25hbEJhY2tlbmRzKCkgYWxzbyB3YWtlcyBvbmUgYmFja2Vu ZAorICoJICBwb3NpdGlvbmVkIGF0IHRoZSBnbG9iYWwgcXVldWUgdGFpbCB0byBoZWxwIGFk dmFuY2UgaXQsIGFuZCBzaWduYWxzCisgKgkgIGFueSBiYWNrZW5kIHRoYXQgaGFzIGZhbGxl biB0b28gZmFyIGJlaGluZCB0byBjYXRjaCB1cC4gIFRoZXNlIG1lYXN1cmVzCisgKgkgIHBy ZXZlbnQgdGhlIG5vdGlmaWNhdGlvbiBxdWV1ZSBmcm9tIGdyb3dpbmcgaW5kZWZpbml0ZWx5 LCB3aGlsZSBtb3N0bHkKKyAqCSAgbGltaXRpbmcgd2FrZXVwcyB0byB0aGUgYmFja2VuZHMg dGhhdCBhY3R1YWxseSBuZWVkIHRoZW0uCiAgKgogICoJICBGaW5hbGx5LCBhZnRlciB3ZSBh cmUgb3V0IG9mIHRoZSB0cmFuc2FjdGlvbiBhbHRvZ2V0aGVyIGFuZCBhYm91dCB0byBnbwog ICoJICBpZGxlLCB3ZSBzY2FuIHRoZSBxdWV1ZSBmb3IgbWVzc2FnZXMgdGhhdCBuZWVkIHRv IGJlIHNlbnQgdG8gb3VyCkBAIC0xMjgsNiArMTM0LDcgQEAKICNpbmNsdWRlIDxsaW1pdHMu aD4KICNpbmNsdWRlIDx1bmlzdGQuaD4KICNpbmNsdWRlIDxzaWduYWwuaD4KKyNpbmNsdWRl IDxzdHJpbmcuaD4KIAogI2luY2x1ZGUgImFjY2Vzcy9wYXJhbGxlbC5oIgogI2luY2x1ZGUg ImFjY2Vzcy9zbHJ1LmgiCkBAIC0xMzcsMTQgKzE0NCwxOCBAQAogI2luY2x1ZGUgImNvbW1h bmRzL2FzeW5jLmgiCiAjaW5jbHVkZSAiY29tbW9uL2hhc2hmbi5oIgogI2luY2x1ZGUgImZ1 bmNhcGkuaCIKKyNpbmNsdWRlICJsaWIvZHNoYXNoLmgiCiAjaW5jbHVkZSAibGlicHEvbGli cHEuaCIKICNpbmNsdWRlICJsaWJwcS9wcWZvcm1hdC5oIgogI2luY2x1ZGUgIm1pc2NhZG1p bi5oIgorI2luY2x1ZGUgIm5vZGVzL3ZhbHVlLmgiCisjaW5jbHVkZSAic3RvcmFnZS9kc21f cmVnaXN0cnkuaCIKICNpbmNsdWRlICJzdG9yYWdlL2lwYy5oIgogI2luY2x1ZGUgInN0b3Jh Z2UvbG1nci5oIgogI2luY2x1ZGUgInN0b3JhZ2UvcHJvY3NpZ25hbC5oIgogI2luY2x1ZGUg InRjb3AvdGNvcHByb3QuaCIKICNpbmNsdWRlICJ1dGlscy9idWlsdGlucy5oIgorI2luY2x1 ZGUgInV0aWxzL2RzYS5oIgogI2luY2x1ZGUgInV0aWxzL2d1Y19ob29rcy5oIgogI2luY2x1 ZGUgInV0aWxzL21lbXV0aWxzLmgiCiAjaW5jbHVkZSAidXRpbHMvcHNfc3RhdHVzLmgiCkBA IC0xNjIsNiArMTczLDI5IEBACiAgKi8KICNkZWZpbmUgTk9USUZZX1BBWUxPQURfTUFYX0xF TkdUSAkoQkxDS1NaIC0gTkFNRURBVEFMRU4gLSAxMjgpCiAKKy8qCisgKiBDaGFubmVsIGhh c2ggdGFibGUgZGVmaW5pdGlvbnMKKyAqCisgKiBUaGlzIGhhc2ggdGFibGUgbWFwcyAoZGF0 YWJhc2UgT0lELCBjaGFubmVsIG5hbWUpIGtleXMgdG8gYXJyYXlzIG9mCisgKiBQcm9jTnVt YmVycyByZXByZXNlbnRpbmcgdGhlIGJhY2tlbmRzIGxpc3RlbmluZyBvbiBlYWNoIGNoYW5u ZWwuCisgKi8KKworI2RlZmluZSBJTklUSUFMX0xJU1RFTkVSU19BUlJBWV9TSVpFIDQKKwor dHlwZWRlZiBzdHJ1Y3QgQ2hhbm5lbEhhc2hLZXkKK3sKKwlPaWQJCQlkYm9pZDsKKwljaGFy CQljaGFubmVsW05BTUVEQVRBTEVOXTsKK30gQ2hhbm5lbEhhc2hLZXk7CisKK3R5cGVkZWYg c3RydWN0IENoYW5uZWxFbnRyeQoreworCUNoYW5uZWxIYXNoS2V5IGtleTsKKwlkc2FfcG9p bnRlciBsaXN0ZW5lcnNfYXJyYXk7CS8qIERTQSBwb2ludGVyIHRvIFByb2NOdW1iZXIgYXJy YXkgKi8KKwlpbnQJCQludW1fbGlzdGVuZXJzOwkvKiBOdW1iZXIgb2YgbGlzdGVuZXJzIGN1 cnJlbnRseSBzdG9yZWQgKi8KKwlpbnQJCQlhbGxvY2F0ZWRfbGlzdGVuZXJzOwkvKiBBbGxv Y2F0ZWQgc2l6ZSBvZiBhcnJheSAqLworfSBDaGFubmVsRW50cnk7CisKIC8qCiAgKiBTdHJ1 Y3QgcmVwcmVzZW50aW5nIGFuIGVudHJ5IGluIHRoZSBnbG9iYWwgbm90aWZ5IHF1ZXVlCiAg KgpAQCAtMjI3LDggKzI2MSw4IEBAIHR5cGVkZWYgc3RydWN0IFF1ZXVlUG9zaXRpb24KIC8q CiAgKiBQYXJhbWV0ZXIgZGV0ZXJtaW5pbmcgaG93IG9mdGVuIHdlIHRyeSB0byBhZHZhbmNl IHRoZSB0YWlsIHBvaW50ZXI6CiAgKiB3ZSBkbyB0aGF0IGFmdGVyIGV2ZXJ5IFFVRVVFX0NM RUFOVVBfREVMQVkgcGFnZXMgb2YgTk9USUZZIGRhdGEuICBUaGlzIGlzCi0gKiBhbHNvIHRo ZSBkaXN0YW5jZSBieSB3aGljaCBhIGJhY2tlbmQgaW4gYW5vdGhlciBkYXRhYmFzZSBuZWVk cyB0byBiZQotICogYmVoaW5kIGJlZm9yZSB3ZSdsbCBkZWNpZGUgd2UgbmVlZCB0byB3YWtl IGl0IHVwIHRvIGFkdmFuY2UgaXRzIHBvaW50ZXIuCisgKiBhbHNvIHRoZSBkaXN0YW5jZSBi eSB3aGljaCBhIGJhY2tlbmQgbmVlZHMgdG8gYmUgYmVoaW5kIGJlZm9yZSB3ZSdsbAorICog ZGVjaWRlIHdlIG5lZWQgdG8gd2FrZSBpdCB1cCB0byBhZHZhbmNlIGl0cyBwb2ludGVyLgog ICoKICAqIFJlc2lzdCB0aGUgdGVtcHRhdGlvbiB0byBtYWtlIHRoaXMgcmVhbGx5IGxhcmdl LiAgV2hpbGUgdGhhdCB3b3VsZCBzYXZlCiAgKiB3b3JrIGluIHNvbWUgcGxhY2VzLCBpdCB3 b3VsZCBhZGQgY29zdCBpbiBvdGhlcnMuICBJbiBwYXJ0aWN1bGFyLCB0aGlzCkBAIC0yNDYs NiArMjgwLDcgQEAgdHlwZWRlZiBzdHJ1Y3QgUXVldWVCYWNrZW5kU3RhdHVzCiAJT2lkCQkJ ZGJvaWQ7CQkJLyogYmFja2VuZCdzIGRhdGFiYXNlIE9JRCwgb3IgSW52YWxpZE9pZCAqLwog CVByb2NOdW1iZXIJbmV4dExpc3RlbmVyOwkvKiBpZCBvZiBuZXh0IGxpc3RlbmVyLCBvciBJ TlZBTElEX1BST0NfTlVNQkVSICovCiAJUXVldWVQb3NpdGlvbiBwb3M7CQkJLyogYmFja2Vu ZCBoYXMgcmVhZCBxdWV1ZSB1cCB0byBoZXJlICovCisJYm9vbAkJd2FrZXVwX3BlbmRpbmc7 IC8qIHNpZ25hbCBzZW50IGJ1dCBub3QgeWV0IHByb2Nlc3NlZCAqLwogfSBRdWV1ZUJhY2tl bmRTdGF0dXM7CiAKIC8qCkBAIC0yODgsMTEgKzMyMyw5MSBAQCB0eXBlZGVmIHN0cnVjdCBB c3luY1F1ZXVlQ29udHJvbAogCVByb2NOdW1iZXIJZmlyc3RMaXN0ZW5lcjsJLyogaWQgb2Yg Zmlyc3QgbGlzdGVuZXIsIG9yCiAJCQkJCQkJCSAqIElOVkFMSURfUFJPQ19OVU1CRVIgKi8K IAlUaW1lc3RhbXBUeiBsYXN0UXVldWVGaWxsV2FybjsJLyogdGltZSBvZiBsYXN0IHF1ZXVl LWZ1bGwgbXNnICovCisJZHNhX2hhbmRsZQljaGFubmVsX2hhc2hfZHNhOworCWRzaGFzaF90 YWJsZV9oYW5kbGUgY2hhbm5lbF9oYXNoX2RzaDsKIAlRdWV1ZUJhY2tlbmRTdGF0dXMgYmFj a2VuZFtGTEVYSUJMRV9BUlJBWV9NRU1CRVJdOwogfSBBc3luY1F1ZXVlQ29udHJvbDsKIAog c3RhdGljIEFzeW5jUXVldWVDb250cm9sICphc3luY1F1ZXVlQ29udHJvbDsKIAorc3RhdGlj IGRzYV9hcmVhICpjaGFubmVsX2RzYSA9IE5VTEw7CitzdGF0aWMgZHNoYXNoX3RhYmxlICpj aGFubmVsX2hhc2ggPSBOVUxMOworc3RhdGljIGRzaGFzaF9oYXNoIGNoYW5uZWxfaGFzaF9m dW5jKGNvbnN0IHZvaWQgKmtleSwgc2l6ZV90IHNpemUsIHZvaWQgKmFyZyk7CisKKy8qIHBh cmFtZXRlcnMgZm9yIHRoZSBjaGFubmVsIGhhc2ggdGFibGUgKi8KK3N0YXRpYyBjb25zdCBk c2hhc2hfcGFyYW1ldGVycyBjaGFubmVsX2RzaF9wYXJhbXMgPSB7CisJc2l6ZW9mKENoYW5u ZWxIYXNoS2V5KSwKKwlzaXplb2YoQ2hhbm5lbEVudHJ5KSwKKwlkc2hhc2hfbWVtY21wLAor CWNoYW5uZWxfaGFzaF9mdW5jLAorCWRzaGFzaF9tZW1jcHksCisJTFdUUkFOQ0hFX05PVElG WV9DSEFOTkVMX0hBU0gKK307CisKKy8qCisgKiBjaGFubmVsX2hhc2hfZnVuYworICoJCUhh c2ggZnVuY3Rpb24gZm9yIGNoYW5uZWwga2V5cy4KKyAqLworc3RhdGljIGRzaGFzaF9oYXNo CitjaGFubmVsX2hhc2hfZnVuYyhjb25zdCB2b2lkICprZXksIHNpemVfdCBzaXplLCB2b2lk ICphcmcpCit7CisJY29uc3QgQ2hhbm5lbEhhc2hLZXkgKmsgPSAoY29uc3QgQ2hhbm5lbEhh c2hLZXkgKikga2V5OworCWRzaGFzaF9oYXNoIGg7CisKKwloID0gRGF0dW1HZXRVSW50MzIo aGFzaF91aW50MzIoay0+ZGJvaWQpKTsKKwloIF49IERhdHVtR2V0VUludDMyKGhhc2hfYW55 KChjb25zdCB1bnNpZ25lZCBjaGFyICopIGstPmNoYW5uZWwsCisJCQkJCQkJCSBzdHJubGVu KGstPmNoYW5uZWwsIE5BTUVEQVRBTEVOKSkpOworCisJcmV0dXJuIGg7Cit9CisKKy8qCisg KiBpbml0X2NoYW5uZWxfaGFzaAorICoJCUxhenkgaW5pdGlhbGl6YXRpb24gb2YgdGhlIGNo YW5uZWwgaGFzaCB0YWJsZS4KKyAqLworc3RhdGljIHZvaWQKK2luaXRfY2hhbm5lbF9oYXNo KHZvaWQpCit7CisJTWVtb3J5Q29udGV4dCBvbGRjb250ZXh0OworCisJLyogUXVpY2sgZXhp dCBpZiB3ZSBhbHJlYWR5IGRpZCB0aGlzICovCisJaWYgKGFzeW5jUXVldWVDb250cm9sLT5j aGFubmVsX2hhc2hfZHNoICE9IERTSEFTSF9IQU5ETEVfSU5WQUxJRCAmJgorCQljaGFubmVs X2hhc2ggIT0gTlVMTCkKKwkJcmV0dXJuOworCisJLyogT3RoZXJ3aXNlLCB1c2UgYSBsb2Nr IHRvIGVuc3VyZSBvbmx5IG9uZSBwcm9jZXNzIGNyZWF0ZXMgdGhlIHRhYmxlICovCisJTFdM b2NrQWNxdWlyZShOb3RpZnlRdWV1ZUxvY2ssIExXX0VYQ0xVU0lWRSk7CisKKwkvKiBCZSBz dXJlIGFueSBsb2NhbCBtZW1vcnkgYWxsb2NhdGVkIGJ5IERTQSByb3V0aW5lcyBpcyBwZXJz aXN0ZW50ICovCisJb2xkY29udGV4dCA9IE1lbW9yeUNvbnRleHRTd2l0Y2hUbyhUb3BNZW1v cnlDb250ZXh0KTsKKworCWlmIChhc3luY1F1ZXVlQ29udHJvbC0+Y2hhbm5lbF9oYXNoX2Rz aCA9PSBEU0hBU0hfSEFORExFX0lOVkFMSUQpCisJeworCQkvKiBJbml0aWFsaXplIGR5bmFt aWMgc2hhcmVkIGhhc2ggdGFibGUgZm9yIGNoYW5uZWwgaGFzaCAqLworCQljaGFubmVsX2Rz YSA9IGRzYV9jcmVhdGUoTFdUUkFOQ0hFX05PVElGWV9DSEFOTkVMX0hBU0gpOworCQlkc2Ff cGluKGNoYW5uZWxfZHNhKTsKKwkJZHNhX3Bpbl9tYXBwaW5nKGNoYW5uZWxfZHNhKTsKKwkJ Y2hhbm5lbF9oYXNoID0gZHNoYXNoX2NyZWF0ZShjaGFubmVsX2RzYSwgJmNoYW5uZWxfZHNo X3BhcmFtcywgTlVMTCk7CisKKwkJLyogU3RvcmUgaGFuZGxlcyBpbiBzaGFyZWQgbWVtb3J5 IGZvciBvdGhlciBiYWNrZW5kcyB0byB1c2UgKi8KKwkJYXN5bmNRdWV1ZUNvbnRyb2wtPmNo YW5uZWxfaGFzaF9kc2EgPSBkc2FfZ2V0X2hhbmRsZShjaGFubmVsX2RzYSk7CisJCWFzeW5j UXVldWVDb250cm9sLT5jaGFubmVsX2hhc2hfZHNoID0KKwkJCWRzaGFzaF9nZXRfaGFzaF90 YWJsZV9oYW5kbGUoY2hhbm5lbF9oYXNoKTsKKwl9CisJZWxzZSBpZiAoIWNoYW5uZWxfaGFz aCkKKwl7CisJCS8qIEF0dGFjaCB0byBleGlzdGluZyBkeW5hbWljIHNoYXJlZCBoYXNoIHRh YmxlICovCisJCWNoYW5uZWxfZHNhID0gZHNhX2F0dGFjaChhc3luY1F1ZXVlQ29udHJvbC0+ Y2hhbm5lbF9oYXNoX2RzYSk7CisJCWRzYV9waW5fbWFwcGluZyhjaGFubmVsX2RzYSk7CisJ CWNoYW5uZWxfaGFzaCA9IGRzaGFzaF9hdHRhY2goY2hhbm5lbF9kc2EsICZjaGFubmVsX2Rz aF9wYXJhbXMsCisJCQkJCQkJCQkgYXN5bmNRdWV1ZUNvbnRyb2wtPmNoYW5uZWxfaGFzaF9k c2gsCisJCQkJCQkJCQkgTlVMTCk7CisJfQorCisJTWVtb3J5Q29udGV4dFN3aXRjaFRvKG9s ZGNvbnRleHQpOworCUxXTG9ja1JlbGVhc2UoTm90aWZ5UXVldWVMb2NrKTsKK30KKwogI2Rl ZmluZSBRVUVVRV9IRUFECQkJCQkoYXN5bmNRdWV1ZUNvbnRyb2wtPmhlYWQpCiAjZGVmaW5l IFFVRVVFX1RBSUwJCQkJCShhc3luY1F1ZXVlQ29udHJvbC0+dGFpbCkKICNkZWZpbmUgUVVF VUVfU1RPUF9QQUdFCQkJCShhc3luY1F1ZXVlQ29udHJvbC0+c3RvcFBhZ2UpCkBAIC0zMDEs NiArNDE2LDcgQEAgc3RhdGljIEFzeW5jUXVldWVDb250cm9sICphc3luY1F1ZXVlQ29udHJv bDsKICNkZWZpbmUgUVVFVUVfQkFDS0VORF9EQk9JRChpKQkJKGFzeW5jUXVldWVDb250cm9s LT5iYWNrZW5kW2ldLmRib2lkKQogI2RlZmluZSBRVUVVRV9ORVhUX0xJU1RFTkVSKGkpCQko YXN5bmNRdWV1ZUNvbnRyb2wtPmJhY2tlbmRbaV0ubmV4dExpc3RlbmVyKQogI2RlZmluZSBR VUVVRV9CQUNLRU5EX1BPUyhpKQkJKGFzeW5jUXVldWVDb250cm9sLT5iYWNrZW5kW2ldLnBv cykKKyNkZWZpbmUgUVVFVUVfQkFDS0VORF9XQUtFVVBfUEVORElORyhpKQkoYXN5bmNRdWV1 ZUNvbnRyb2wtPmJhY2tlbmRbaV0ud2FrZXVwX3BlbmRpbmcpCiAKIC8qCiAgKiBUaGUgU0xS VSBidWZmZXIgYXJlYSB0aHJvdWdoIHdoaWNoIHdlIGFjY2VzcyB0aGUgbm90aWZpY2F0aW9u IHF1ZXVlCkBAIC00NTcsNiArNTczLDEwIEBAIHN0YXRpYyB2b2lkIEFkZEV2ZW50VG9QZW5k aW5nTm90aWZpZXMoTm90aWZpY2F0aW9uICpuKTsKIHN0YXRpYyB1aW50MzIgbm90aWZpY2F0 aW9uX2hhc2goY29uc3Qgdm9pZCAqa2V5LCBTaXplIGtleXNpemUpOwogc3RhdGljIGludAlu b3RpZmljYXRpb25fbWF0Y2goY29uc3Qgdm9pZCAqa2V5MSwgY29uc3Qgdm9pZCAqa2V5Miwg U2l6ZSBrZXlzaXplKTsKIHN0YXRpYyB2b2lkIENsZWFyUGVuZGluZ0FjdGlvbnNBbmROb3Rp Zmllcyh2b2lkKTsKK3N0YXRpYyBpbmxpbmUgdm9pZCBDaGFubmVsSGFzaFByZXBhcmVLZXko Q2hhbm5lbEhhc2hLZXkgKmtleSwgT2lkIGRib2lkLCBjb25zdCBjaGFyICpjaGFubmVsKTsK K3N0YXRpYyB2b2lkIENoYW5uZWxIYXNoQWRkTGlzdGVuZXIoY29uc3QgY2hhciAqY2hhbm5l bCk7CitzdGF0aWMgdm9pZCBDaGFubmVsSGFzaFJlbW92ZUxpc3RlbmVyKGNvbnN0IGNoYXIg KmNoYW5uZWwpOworc3RhdGljIExpc3QgKkdldFBlbmRpbmdOb3RpZnlDaGFubmVscyh2b2lk KTsKIAogLyoKICAqIENvbXB1dGUgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiB0d28gcXVldWUg cGFnZSBudW1iZXJzLgpAQCAtNTIxLDEyICs2NDEsMTYgQEAgQXN5bmNTaG1lbUluaXQodm9p ZCkKIAkJUVVFVUVfU1RPUF9QQUdFID0gMDsKIAkJUVVFVUVfRklSU1RfTElTVEVORVIgPSBJ TlZBTElEX1BST0NfTlVNQkVSOwogCQlhc3luY1F1ZXVlQ29udHJvbC0+bGFzdFF1ZXVlRmls bFdhcm4gPSAwOworCQlhc3luY1F1ZXVlQ29udHJvbC0+Y2hhbm5lbF9oYXNoX2RzYSA9IERT QV9IQU5ETEVfSU5WQUxJRDsKKwkJYXN5bmNRdWV1ZUNvbnRyb2wtPmNoYW5uZWxfaGFzaF9k c2ggPSBEU0hBU0hfSEFORExFX0lOVkFMSUQ7CisKIAkJZm9yIChpbnQgaSA9IDA7IGkgPCBN YXhCYWNrZW5kczsgaSsrKQogCQl7CiAJCQlRVUVVRV9CQUNLRU5EX1BJRChpKSA9IEludmFs aWRQaWQ7CiAJCQlRVUVVRV9CQUNLRU5EX0RCT0lEKGkpID0gSW52YWxpZE9pZDsKIAkJCVFV RVVFX05FWFRfTElTVEVORVIoaSkgPSBJTlZBTElEX1BST0NfTlVNQkVSOwogCQkJU0VUX1FV RVVFX1BPUyhRVUVVRV9CQUNLRU5EX1BPUyhpKSwgMCwgMCk7CisJCQlRVUVVRV9CQUNLRU5E X1dBS0VVUF9QRU5ESU5HKGkpID0gZmFsc2U7CiAJCX0KIAl9CiAKQEAgLTExNTIsNiArMTI3 Niw3IEBAIEV4ZWNfTGlzdGVuQ29tbWl0KGNvbnN0IGNoYXIgKmNoYW5uZWwpCiAJb2xkY29u dGV4dCA9IE1lbW9yeUNvbnRleHRTd2l0Y2hUbyhUb3BNZW1vcnlDb250ZXh0KTsKIAlsaXN0 ZW5DaGFubmVscyA9IGxhcHBlbmQobGlzdGVuQ2hhbm5lbHMsIHBzdHJkdXAoY2hhbm5lbCkp OwogCU1lbW9yeUNvbnRleHRTd2l0Y2hUbyhvbGRjb250ZXh0KTsKKwlDaGFubmVsSGFzaEFk ZExpc3RlbmVyKGNoYW5uZWwpOwogfQogCiAvKgpAQCAtMTE3NSw2ICsxMzAwLDcgQEAgRXhl Y19Vbmxpc3RlbkNvbW1pdChjb25zdCBjaGFyICpjaGFubmVsKQogCQl7CiAJCQlsaXN0ZW5D aGFubmVscyA9IGZvcmVhY2hfZGVsZXRlX2N1cnJlbnQobGlzdGVuQ2hhbm5lbHMsIHEpOwog CQkJcGZyZWUobGNoYW4pOworCQkJQ2hhbm5lbEhhc2hSZW1vdmVMaXN0ZW5lcihjaGFubmVs KTsKIAkJCWJyZWFrOwogCQl9CiAJfQpAQCAtMTE5Myw5ICsxMzE5LDE4IEBAIEV4ZWNfVW5s aXN0ZW5Db21taXQoY29uc3QgY2hhciAqY2hhbm5lbCkKIHN0YXRpYyB2b2lkCiBFeGVjX1Vu bGlzdGVuQWxsQ29tbWl0KHZvaWQpCiB7CisJTGlzdENlbGwgICAqbGM7CisKIAlpZiAoVHJh Y2Vfbm90aWZ5KQogCQllbG9nKERFQlVHMSwgIkV4ZWNfVW5saXN0ZW5BbGxDb21taXQoJWQp IiwgTXlQcm9jUGlkKTsKIAorCWZvcmVhY2gobGMsIGxpc3RlbkNoYW5uZWxzKQorCXsKKwkJ Y2hhcgkgICAqY2hhbm5lbCA9IChjaGFyICopIGxmaXJzdChsYyk7CisKKwkJQ2hhbm5lbEhh c2hSZW1vdmVMaXN0ZW5lcihjaGFubmVsKTsKKwl9CisKIAlsaXN0X2ZyZWVfZGVlcChsaXN0 ZW5DaGFubmVscyk7CiAJbGlzdGVuQ2hhbm5lbHMgPSBOSUw7CiB9CkBAIC0xNTY1LDEyICsx NzAwLDE2IEBAIGFzeW5jUXVldWVGaWxsV2FybmluZyh2b2lkKQogLyoKICAqIFNlbmQgc2ln bmFscyB0byBsaXN0ZW5pbmcgYmFja2VuZHMuCiAgKgotICogTm9ybWFsbHkgd2Ugc2lnbmFs IG9ubHkgYmFja2VuZHMgaW4gb3VyIG93biBkYXRhYmFzZSwgc2luY2Ugb25seSB0aG9zZQot ICogYmFja2VuZHMgY291bGQgYmUgaW50ZXJlc3RlZCBpbiBub3RpZmllcyB3ZSBzZW5kLiAg SG93ZXZlciwgaWYgdGhlcmUncwotICogbm90aWZ5IHRyYWZmaWMgaW4gb3VyIGRhdGFiYXNl IGJ1dCBubyB0cmFmZmljIGluIGFub3RoZXIgZGF0YWJhc2UgdGhhdAotICogZG9lcyBoYXZl IGxpc3RlbmVyKHMpLCB0aG9zZSBsaXN0ZW5lcnMgd2lsbCBmYWxsIGZ1cnRoZXIgYW5kIGZ1 cnRoZXIKLSAqIGJlaGluZC4gIFdha2VuIHRoZW0gYW55d2F5IGlmIHRoZXkncmUgZmFyIGVu b3VnaCBiZWhpbmQsIHNvIHRoYXQgdGhleSdsbAotICogYWR2YW5jZSB0aGVpciBxdWV1ZSBw b3NpdGlvbiBwb2ludGVycywgYWxsb3dpbmcgdGhlIGdsb2JhbCB0YWlsIHRvIGFkdmFuY2Uu CisgKiBOb3JtYWxseSB3ZSBzaWduYWwgb25seSBiYWNrZW5kcyByZWdpc3RlcmVkIGFzIGxp c3RlbmVycyBmb3IgY2hhbm5lbHMKKyAqIHdpdGggcGVuZGluZyBub3RpZmljYXRpb25zLiAg SG93ZXZlciwgd2hlbiB0aGVyZSBpcyBubyB0cmFmZmljIG9uIHNvbWUKKyAqIGNoYW5uZWxz LCBsaXN0ZW5lcnMgb24gc3VjaCBjaGFubmVscyB3aWxsIGZhbGwgZnVydGhlciBhbmQgZnVy dGhlcgorICogYmVoaW5kLiAgV2FrZW4gdGhlbSBpZiB0aGV5IGFyZSB0b28gZmFyIGJlaGlu ZCwgc28gdGhhdCB0aGV5J2xsCisgKiBhZHZhbmNlIHRoZWlyIHF1ZXVlIHBvc2l0aW9uIHBv aW50ZXJzLCBhbGxvd2luZyB0aGUgZ2xvYmFsIHRhaWwgdG8KKyAqIGFkdmFuY2UuCisgKgor ICogVG8gc3RhZ2dlciB3YWtldXBzIG9mIGxhZ2dpbmcgYmFja2VuZHMsIHdha2UgdGhlIGJh Y2tlbmQgZnVydGhlc3QKKyAqIGJlaGluZCAoYXQgdGhlIHRhaWwpLCBhbW9ydGl6aW5nIHRo ZSBjb250ZXh0LXN3aXRjaGluZyBjb3N0IGFjcm9zcworICogc3VjY2Vzc2l2ZSBub3RpZmlj YXRpb25zIGluc3RlYWQgb2YgcGF5aW5nIGl0IGFsbCBhdCBvbmNlLgogICoKICAqIFNpbmNl IHdlIGtub3cgdGhlIFByb2NOdW1iZXIgYW5kIHRoZSBQaWQgdGhlIHNpZ25hbGluZyBpcyBx dWl0ZSBjaGVhcC4KICAqCkBAIC0xNTgzLDYgKzE3MjIsMTAgQEAgU2lnbmFsQmFja2VuZHMo dm9pZCkKIAlpbnQzMgkgICAqcGlkczsKIAlQcm9jTnVtYmVyICpwcm9jbm9zOwogCWludAkJ CWNvdW50OworCUxpc3QJICAgKmNoYW5uZWxzOworCUxpc3RDZWxsICAgKmxjOworCWJvb2wJ ICAgKnNpZ25hbGVkOworCWludDY0CQlxdWV1ZV9sZW5ndGg7CiAKIAkvKgogCSAqIElkZW50 aWZ5IGJhY2tlbmRzIHRoYXQgd2UgbmVlZCB0byBzaWduYWwuICBXZSBkb24ndCB3YW50IHRv IHNlbmQKQEAgLTE1OTQsMzkgKzE3MzcsMTE3IEBAIFNpZ25hbEJhY2tlbmRzKHZvaWQpCiAJ ICovCiAJcGlkcyA9IChpbnQzMiAqKSBwYWxsb2MoTWF4QmFja2VuZHMgKiBzaXplb2YoaW50 MzIpKTsKIAlwcm9jbm9zID0gKFByb2NOdW1iZXIgKikgcGFsbG9jKE1heEJhY2tlbmRzICog c2l6ZW9mKFByb2NOdW1iZXIpKTsKKwlzaWduYWxlZCA9IChib29sICopIHBhbGxvYzAoTWF4 QmFja2VuZHMgKiBzaXplb2YoYm9vbCkpOwogCWNvdW50ID0gMDsKIAorCWNoYW5uZWxzID0g R2V0UGVuZGluZ05vdGlmeUNoYW5uZWxzKCk7CisKIAlMV0xvY2tBY3F1aXJlKE5vdGlmeVF1 ZXVlTG9jaywgTFdfRVhDTFVTSVZFKTsKLQlmb3IgKFByb2NOdW1iZXIgaSA9IFFVRVVFX0ZJ UlNUX0xJU1RFTkVSOyBpICE9IElOVkFMSURfUFJPQ19OVU1CRVI7IGkgPSBRVUVVRV9ORVhU X0xJU1RFTkVSKGkpKQorCWZvcmVhY2gobGMsIGNoYW5uZWxzKQogCXsKLQkJaW50MzIJCXBp ZCA9IFFVRVVFX0JBQ0tFTkRfUElEKGkpOwotCQlRdWV1ZVBvc2l0aW9uIHBvczsKKwkJY2hh cgkgICAqY2hhbm5lbCA9IHN0clZhbChsZmlyc3QobGMpKTsKKwkJQ2hhbm5lbEVudHJ5ICpl bnRyeTsKKwkJUHJvY051bWJlciAqbGlzdGVuZXJzOworCQlDaGFubmVsSGFzaEtleSBrZXk7 CiAKLQkJQXNzZXJ0KHBpZCAhPSBJbnZhbGlkUGlkKTsKLQkJcG9zID0gUVVFVUVfQkFDS0VO RF9QT1MoaSk7Ci0JCWlmIChRVUVVRV9CQUNLRU5EX0RCT0lEKGkpID09IE15RGF0YWJhc2VJ ZCkKKwkJaWYgKGNoYW5uZWxfaGFzaCA9PSBOVUxMKQorCQkJZW50cnkgPSBOVUxMOworCQll bHNlCiAJCXsKLQkJCS8qCi0JCQkgKiBBbHdheXMgc2lnbmFsIGxpc3RlbmVycyBpbiBvdXIg b3duIGRhdGFiYXNlLCB1bmxlc3MgdGhleSdyZQotCQkJICogYWxyZWFkeSBjYXVnaHQgdXAg KHVubGlrZWx5LCBidXQgcG9zc2libGUpLgotCQkJICovCisJCQlDaGFubmVsSGFzaFByZXBh cmVLZXkoJmtleSwgTXlEYXRhYmFzZUlkLCBjaGFubmVsKTsKKwkJCWVudHJ5ID0gZHNoYXNo X2ZpbmQoY2hhbm5lbF9oYXNoLCAma2V5LCBmYWxzZSk7CisJCX0KKworCQlpZiAoZW50cnkg PT0gTlVMTCkKKwkJCWNvbnRpbnVlOwkJCS8qIE5vIGxpc3RlbmVycyByZWdpc3RlcmVkIGZv ciB0aGlzIGNoYW5uZWwgKi8KKworCQlsaXN0ZW5lcnMgPSAoUHJvY051bWJlciAqKSBkc2Ff Z2V0X2FkZHJlc3MoY2hhbm5lbF9kc2EsCisJCQkJCQkJCQkJCQkgICBlbnRyeS0+bGlzdGVu ZXJzX2FycmF5KTsKKworCQlmb3IgKGludCBqID0gMDsgaiA8IGVudHJ5LT5udW1fbGlzdGVu ZXJzOyBqKyspCisJCXsKKwkJCVByb2NOdW1iZXIJaSA9IGxpc3RlbmVyc1tqXTsKKwkJCWlu dDMyCQlwaWQ7CisJCQlRdWV1ZVBvc2l0aW9uIHBvczsKKworCQkJaWYgKHNpZ25hbGVkW2ld IHx8IFFVRVVFX0JBQ0tFTkRfV0FLRVVQX1BFTkRJTkcoaSkpCisJCQkJY29udGludWU7CisK KwkJCXBvcyA9IFFVRVVFX0JBQ0tFTkRfUE9TKGkpOworCQkJcGlkID0gUVVFVUVfQkFDS0VO RF9QSUQoaSk7CisKKwkJCS8qIFNraXAgaWYgY2F1Z2h0IHVwIG9yIHdyb25nIGRhdGFiYXNl ICovCiAJCQlpZiAoUVVFVUVfUE9TX0VRVUFMKHBvcywgUVVFVUVfSEVBRCkpCiAJCQkJY29u dGludWU7CisJCQlpZiAoUVVFVUVfQkFDS0VORF9EQk9JRChpKSAhPSBNeURhdGFiYXNlSWQp CisJCQkJY29udGludWU7CisKKwkJCUFzc2VydChwaWQgIT0gSW52YWxpZFBpZCk7CisKKwkJ CVFVRVVFX0JBQ0tFTkRfV0FLRVVQX1BFTkRJTkcoaSkgPSB0cnVlOworCisJCQlwaWRzW2Nv dW50XSA9IHBpZDsKKwkJCXByb2Nub3NbY291bnRdID0gaTsKKwkJCXNpZ25hbGVkW2ldID0g dHJ1ZTsKKwkJCWNvdW50Kys7CiAJCX0KLQkJZWxzZQorCisJCWRzaGFzaF9yZWxlYXNlX2xv Y2soY2hhbm5lbF9oYXNoLCBlbnRyeSk7CisJfQorCisJcXVldWVfbGVuZ3RoID0gYXN5bmNR dWV1ZVBhZ2VEaWZmKFFVRVVFX1BPU19QQUdFKFFVRVVFX0hFQUQpLAorCQkJCQkJCQkJICBR VUVVRV9QT1NfUEFHRShRVUVVRV9UQUlMKSk7CisKKwkvKiBDaGVjayBmb3IgbGFnZ2luZyBi YWNrZW5kcyB3aGVuIHRoZSBxdWV1ZSBzcGFucyBtdWx0aXBsZSBwYWdlcyAqLworCWlmIChx dWV1ZV9sZW5ndGggPiAwKQorCXsKKwkJYm9vbAkJdGFpbF93b2tlbiA9IGZhbHNlOworCisJ CWZvciAoUHJvY051bWJlciBpID0gUVVFVUVfRklSU1RfTElTVEVORVI7CisJCQkgaSAhPSBJ TlZBTElEX1BST0NfTlVNQkVSOworCQkJIGkgPSBRVUVVRV9ORVhUX0xJU1RFTkVSKGkpKQog CQl7Ci0JCQkvKgotCQkJICogTGlzdGVuZXJzIGluIG90aGVyIGRhdGFiYXNlcyBzaG91bGQg YmUgc2lnbmFsZWQgb25seSBpZiB0aGV5Ci0JCQkgKiBhcmUgZmFyIGJlaGluZC4KLQkJCSAq LwotCQkJaWYgKGFzeW5jUXVldWVQYWdlRGlmZihRVUVVRV9QT1NfUEFHRShRVUVVRV9IRUFE KSwKLQkJCQkJCQkJICAgUVVFVUVfUE9TX1BBR0UocG9zKSkgPCBRVUVVRV9DTEVBTlVQX0RF TEFZKQorCQkJUXVldWVQb3NpdGlvbiBwb3M7CisJCQlpbnQ2NAkJbGFnOworCQkJaW50MzIJ CXBpZDsKKworCQkJaWYgKHNpZ25hbGVkW2ldIHx8IFFVRVVFX0JBQ0tFTkRfV0FLRVVQX1BF TkRJTkcoaSkpCiAJCQkJY29udGludWU7CisKKwkJCXBvcyA9IFFVRVVFX0JBQ0tFTkRfUE9T KGkpOworCisJCQkvKiBTaWduYWwgb25lIGJhY2tlbmQgcG9zaXRpb25lZCBhdCB0aGUgZ2xv YmFsIHRhaWwgKi8KKwkJCWlmICghdGFpbF93b2tlbiAmJiBhc3luY1F1ZXVlUGFnZURpZmYo UVVFVUVfUE9TX1BBR0UoUVVFVUVfVEFJTCksCisJCQkJCQkJCQkJCQkgIFFVRVVFX1BPU19Q QUdFKHBvcykpID09IDApCisJCQl7CisJCQkJcGlkID0gUVVFVUVfQkFDS0VORF9QSUQoaSk7 CisJCQkJQXNzZXJ0KHBpZCAhPSBJbnZhbGlkUGlkKTsKKworCQkJCVFVRVVFX0JBQ0tFTkRf V0FLRVVQX1BFTkRJTkcoaSkgPSB0cnVlOworCQkJCXBpZHNbY291bnRdID0gcGlkOworCQkJ CXByb2Nub3NbY291bnRdID0gaTsKKwkJCQlzaWduYWxlZFtpXSA9IHRydWU7CisJCQkJY291 bnQrKzsKKwkJCQl0YWlsX3dva2VuID0gdHJ1ZTsKKwkJCQljb250aW51ZTsKKwkJCX0KKwor CQkJbGFnID0gYXN5bmNRdWV1ZVBhZ2VEaWZmKFFVRVVFX1BPU19QQUdFKFFVRVVFX0hFQUQp LAorCQkJCQkJCQkJIFFVRVVFX1BPU19QQUdFKHBvcykpOworCisJCQkvKiBOZWVkIHRvIHNp Z25hbCBpZiBhIGJhY2tlbmQgaGFzIGZhbGxlbiB0b28gZmFyIGJlaGluZCAqLworCQkJaWYg KGxhZyA+PSBRVUVVRV9DTEVBTlVQX0RFTEFZKQorCQkJeworCQkJCXBpZCA9IFFVRVVFX0JB Q0tFTkRfUElEKGkpOworCQkJCUFzc2VydChwaWQgIT0gSW52YWxpZFBpZCk7CisKKwkJCQlR VUVVRV9CQUNLRU5EX1dBS0VVUF9QRU5ESU5HKGkpID0gdHJ1ZTsKKwkJCQlwaWRzW2NvdW50 XSA9IHBpZDsKKwkJCQlwcm9jbm9zW2NvdW50XSA9IGk7CisJCQkJc2lnbmFsZWRbaV0gPSB0 cnVlOworCQkJCWNvdW50Kys7CisJCQl9CiAJCX0KLQkJLyogT0ssIG5lZWQgdG8gc2lnbmFs IHRoaXMgb25lICovCi0JCXBpZHNbY291bnRdID0gcGlkOwotCQlwcm9jbm9zW2NvdW50XSA9 IGk7Ci0JCWNvdW50Kys7CiAJfQogCUxXTG9ja1JlbGVhc2UoTm90aWZ5UXVldWVMb2NrKTsK IApAQCAtMTY1Nyw2ICsxODc4LDcgQEAgU2lnbmFsQmFja2VuZHModm9pZCkKIAogCXBmcmVl KHBpZHMpOwogCXBmcmVlKHByb2Nub3MpOworCXBmcmVlKHNpZ25hbGVkKTsKIH0KIAogLyoK QEAgLTE4NjUsNiArMjA4Nyw3IEBAIGFzeW5jUXVldWVSZWFkQWxsTm90aWZpY2F0aW9ucyh2 b2lkKQogCUxXTG9ja0FjcXVpcmUoTm90aWZ5UXVldWVMb2NrLCBMV19TSEFSRUQpOwogCS8q IEFzc2VydCBjaGVja3MgdGhhdCB3ZSBoYXZlIGEgdmFsaWQgc3RhdGUgZW50cnkgKi8KIAlB c3NlcnQoTXlQcm9jUGlkID09IFFVRVVFX0JBQ0tFTkRfUElEKE15UHJvY051bWJlcikpOwor CVFVRVVFX0JBQ0tFTkRfV0FLRVVQX1BFTkRJTkcoTXlQcm9jTnVtYmVyKSA9IGZhbHNlOwog CXBvcyA9IFFVRVVFX0JBQ0tFTkRfUE9TKE15UHJvY051bWJlcik7CiAJaGVhZCA9IFFVRVVF X0hFQUQ7CiAJTFdMb2NrUmVsZWFzZShOb3RpZnlRdWV1ZUxvY2spOwpAQCAtMjM5NSwzICsy NjE4LDE3MCBAQCBjaGVja19ub3RpZnlfYnVmZmVycyhpbnQgKm5ld3ZhbCwgdm9pZCAqKmV4 dHJhLCBHdWNTb3VyY2Ugc291cmNlKQogewogCXJldHVybiBjaGVja19zbHJ1X2J1ZmZlcnMo Im5vdGlmeV9idWZmZXJzIiwgbmV3dmFsKTsKIH0KKworCisvKgorICogQ2hhbm5lbEhhc2hQ cmVwYXJlS2V5CisgKgkJUHJlcGFyZSBhIGNoYW5uZWwga2V5IGZvciB1c2UgYXMgYSBoYXNo IGtleS4KKyAqLworc3RhdGljIGlubGluZSB2b2lkCitDaGFubmVsSGFzaFByZXBhcmVLZXko Q2hhbm5lbEhhc2hLZXkgKmtleSwgT2lkIGRib2lkLCBjb25zdCBjaGFyICpjaGFubmVsKQor eworCW1lbXNldChrZXksIDAsIHNpemVvZihDaGFubmVsSGFzaEtleSkpOworCWtleS0+ZGJv aWQgPSBkYm9pZDsKKwlzdHJsY3B5KGtleS0+Y2hhbm5lbCwgY2hhbm5lbCwgTkFNRURBVEFM RU4pOworfQorCisvKgorICogQ2hhbm5lbEhhc2hBZGRMaXN0ZW5lcgorICogICAgIFJlZ2lz dGVyIGFzIGEgbGlzdGVuZXIgZm9yIHRoZSBzcGVjaWZpZWQgY2hhbm5lbC4KKyAqLworc3Rh dGljIHZvaWQKK0NoYW5uZWxIYXNoQWRkTGlzdGVuZXIoY29uc3QgY2hhciAqY2hhbm5lbCkK K3sKKwlDaGFubmVsSGFzaEtleSBrZXk7CisJQ2hhbm5lbEVudHJ5ICplbnRyeTsKKwlib29s CQlmb3VuZDsKKwlQcm9jTnVtYmVyICpsaXN0ZW5lcnM7CisKKwlpbml0X2NoYW5uZWxfaGFz aCgpOworCisJQ2hhbm5lbEhhc2hQcmVwYXJlS2V5KCZrZXksIE15RGF0YWJhc2VJZCwgY2hh bm5lbCk7CisKKwkvKgorCSAqIEZvciBuZXcgZW50cmllcywgd2UgaW5pdGlhbGl6ZSBsaXN0 ZW5lcnNfYXJyYXkgdG8gSW52YWxpZERzYVBvaW50ZXIgYXMKKwkgKiBhIG1hcmtlci4gVGhp cyBoYW5kbGVzIGJvdGggdGhlIGluaXRpYWwgY3JlYXRpb24gYW5kIHBvdGVudGlhbCByZXRy eQorCSAqIGFmdGVyIE9PTS4KKwkgKi8KKwllbnRyeSA9IGRzaGFzaF9maW5kX29yX2luc2Vy dChjaGFubmVsX2hhc2gsICZrZXksICZmb3VuZCk7CisKKwlpZiAoIWZvdW5kKQorCQllbnRy eS0+bGlzdGVuZXJzX2FycmF5ID0gSW52YWxpZERzYVBvaW50ZXI7CisKKwlpZiAoIURzYVBv aW50ZXJJc1ZhbGlkKGVudHJ5LT5saXN0ZW5lcnNfYXJyYXkpKQorCXsKKwkJLyogRmlyc3Qg bGlzdGVuZXIgZm9yIHRoaXMgY2hhbm5lbCAqLworCQllbnRyeS0+bGlzdGVuZXJzX2FycmF5 ID0gZHNhX2FsbG9jYXRlKGNoYW5uZWxfZHNhLAorCQkJCQkJCQkJCQkgIHNpemVvZihQcm9j TnVtYmVyKSAqIElOSVRJQUxfTElTVEVORVJTX0FSUkFZX1NJWkUpOworCQllbnRyeS0+bnVt X2xpc3RlbmVycyA9IDA7CisJCWVudHJ5LT5hbGxvY2F0ZWRfbGlzdGVuZXJzID0gSU5JVElB TF9MSVNURU5FUlNfQVJSQVlfU0laRTsKKwl9CisKKwlsaXN0ZW5lcnMgPSAoUHJvY051bWJl ciAqKSBkc2FfZ2V0X2FkZHJlc3MoY2hhbm5lbF9kc2EsCisJCQkJCQkJCQkJCSAgIGVudHJ5 LT5saXN0ZW5lcnNfYXJyYXkpOworCisJZm9yIChpbnQgaSA9IDA7IGkgPCBlbnRyeS0+bnVt X2xpc3RlbmVyczsgaSsrKQorCXsKKwkJaWYgKGxpc3RlbmVyc1tpXSA9PSBNeVByb2NOdW1i ZXIpCisJCXsKKwkJCWRzaGFzaF9yZWxlYXNlX2xvY2soY2hhbm5lbF9oYXNoLCBlbnRyeSk7 CisJCQlyZXR1cm47CQkJCS8qIEFscmVhZHkgcmVnaXN0ZXJlZCAqLworCQl9CisJfQorCisJ LyogTmVlZCB0byBhZGQgdGhpcyBsaXN0ZW5lciAqLworCWlmIChlbnRyeS0+bnVtX2xpc3Rl bmVycyA+PSBlbnRyeS0+YWxsb2NhdGVkX2xpc3RlbmVycykKKwl7CisJCS8qIEdyb3cgdGhl IGFycmF5IChkb3VibGUgdGhlIHNpemUpICovCisJCWludAkJCW5ld19zaXplID0gZW50cnkt PmFsbG9jYXRlZF9saXN0ZW5lcnMgKiAyOworCQlkc2FfcG9pbnRlciBuZXdfYXJyYXkgPSBk c2FfYWxsb2NhdGUoY2hhbm5lbF9kc2EsCisJCQkJCQkJCQkJCSBzaXplb2YoUHJvY051bWJl cikgKiBuZXdfc2l6ZSk7CisJCVByb2NOdW1iZXIgKm5ld19saXN0ZW5lcnMgPSAoUHJvY051 bWJlciAqKSBkc2FfZ2V0X2FkZHJlc3MoY2hhbm5lbF9kc2EsCisJCQkJCQkJCQkJCQkJCQkJ ICAgbmV3X2FycmF5KTsKKworCQkvKiBDb3B5IGV4aXN0aW5nIGxpc3RlbmVycyAqLworCQlt ZW1jcHkobmV3X2xpc3RlbmVycywgbGlzdGVuZXJzLAorCQkJICAgc2l6ZW9mKFByb2NOdW1i ZXIpICogZW50cnktPm51bV9saXN0ZW5lcnMpOworCisJCS8qIEZyZWUgb2xkIGFycmF5IGFu ZCB1cGRhdGUgZW50cnkgKi8KKwkJZHNhX2ZyZWUoY2hhbm5lbF9kc2EsIGVudHJ5LT5saXN0 ZW5lcnNfYXJyYXkpOworCQllbnRyeS0+bGlzdGVuZXJzX2FycmF5ID0gbmV3X2FycmF5Owor CQllbnRyeS0+YWxsb2NhdGVkX2xpc3RlbmVycyA9IG5ld19zaXplOworCQlsaXN0ZW5lcnMg PSBuZXdfbGlzdGVuZXJzOworCX0KKworCS8qIEFkZCB0aGUgbmV3IGxpc3RlbmVyICovCisJ bGlzdGVuZXJzW2VudHJ5LT5udW1fbGlzdGVuZXJzXSA9IE15UHJvY051bWJlcjsKKwllbnRy eS0+bnVtX2xpc3RlbmVycysrOworCisJZHNoYXNoX3JlbGVhc2VfbG9jayhjaGFubmVsX2hh c2gsIGVudHJ5KTsKK30KKworLyoKKyAqIENoYW5uZWxIYXNoUmVtb3ZlTGlzdGVuZXIKKyAq CQlVbnJlZ2lzdGVyIGFzIGEgbGlzdGVuZXIgZm9yIHRoZSBzcGVjaWZpZWQgY2hhbm5lbC4K KyAqLworc3RhdGljIHZvaWQKK0NoYW5uZWxIYXNoUmVtb3ZlTGlzdGVuZXIoY29uc3QgY2hh ciAqY2hhbm5lbCkKK3sKKwlDaGFubmVsSGFzaEtleSBrZXk7CisJQ2hhbm5lbEVudHJ5ICpl bnRyeTsKKwlQcm9jTnVtYmVyICpsaXN0ZW5lcnM7CisJaW50CQkJaTsKKworCWlmIChjaGFu bmVsX2hhc2ggPT0gTlVMTCkKKwkJcmV0dXJuOworCisJQ2hhbm5lbEhhc2hQcmVwYXJlS2V5 KCZrZXksIE15RGF0YWJhc2VJZCwgY2hhbm5lbCk7CisKKwllbnRyeSA9IGRzaGFzaF9maW5k KGNoYW5uZWxfaGFzaCwgJmtleSwgdHJ1ZSk7CisJaWYgKGVudHJ5ID09IE5VTEwpCisJCXJl dHVybjsKKworCWxpc3RlbmVycyA9IChQcm9jTnVtYmVyICopIGRzYV9nZXRfYWRkcmVzcyhj aGFubmVsX2RzYSwKKwkJCQkJCQkJCQkJICAgZW50cnktPmxpc3RlbmVyc19hcnJheSk7CisK Kwlmb3IgKGkgPSAwOyBpIDwgZW50cnktPm51bV9saXN0ZW5lcnM7IGkrKykKKwl7CisJCWlm IChsaXN0ZW5lcnNbaV0gPT0gTXlQcm9jTnVtYmVyKQorCQl7CisJCQkvKiBGb3VuZCBpdCwg cmVtb3ZlIGJ5IHNoaWZ0aW5nIHJlbWFpbmluZyBlbGVtZW50cyAqLworCQkJZW50cnktPm51 bV9saXN0ZW5lcnMtLTsKKwkJCWlmIChpIDwgZW50cnktPm51bV9saXN0ZW5lcnMpCisJCQl7 CisJCQkJbWVtbW92ZSgmbGlzdGVuZXJzW2ldLCAmbGlzdGVuZXJzW2kgKyAxXSwKKwkJCQkJ CXNpemVvZihQcm9jTnVtYmVyKSAqIChlbnRyeS0+bnVtX2xpc3RlbmVycyAtIGkpKTsKKwkJ CX0KKworCQkJaWYgKGVudHJ5LT5udW1fbGlzdGVuZXJzID09IDApCisJCQl7CisJCQkJZHNh X2ZyZWUoY2hhbm5lbF9kc2EsIGVudHJ5LT5saXN0ZW5lcnNfYXJyYXkpOworCQkJCWRzaGFz aF9kZWxldGVfZW50cnkoY2hhbm5lbF9oYXNoLCBlbnRyeSk7CisJCQl9CisJCQllbHNlCisJ CQl7CisJCQkJZHNoYXNoX3JlbGVhc2VfbG9jayhjaGFubmVsX2hhc2gsIGVudHJ5KTsKKwkJ CX0KKwkJCXJldHVybjsKKwkJfQorCX0KKworCS8qIE5vdCBmb3VuZCBpbiBsaXN0ICovCisJ ZHNoYXNoX3JlbGVhc2VfbG9jayhjaGFubmVsX2hhc2gsIGVudHJ5KTsKK30KKworLyoKKyAq IEdldFBlbmRpbmdOb3RpZnlDaGFubmVscworICoJCUdldCBsaXN0IG9mIHVuaXF1ZSBjaGFu bmVsIG5hbWVzIGZyb20gcGVuZGluZyBub3RpZmljYXRpb25zLgorICovCitzdGF0aWMgTGlz dCAqCitHZXRQZW5kaW5nTm90aWZ5Q2hhbm5lbHModm9pZCkKK3sKKwlMaXN0CSAgICpjaGFu bmVscyA9IE5JTDsKKwlMaXN0Q2VsbCAgICpsYzsKKworCWlmICghcGVuZGluZ05vdGlmaWVz KQorCQlyZXR1cm4gTklMOworCisJZm9yZWFjaChsYywgcGVuZGluZ05vdGlmaWVzLT5ldmVu dHMpCisJeworCQlOb3RpZmljYXRpb24gKm4gPSAoTm90aWZpY2F0aW9uICopIGxmaXJzdChs Yyk7CisJCWNoYXIJICAgKmNoYW5uZWwgPSBuLT5kYXRhOworCQlTdHJpbmcJICAgKmNoYW5u ZWxfc3RyID0gbWFrZVN0cmluZyhjaGFubmVsKTsKKworCQlpZiAoIWxpc3RfbWVtYmVyKGNo YW5uZWxzLCBjaGFubmVsX3N0cikpCisJCQljaGFubmVscyA9IGxhcHBlbmQoY2hhbm5lbHMs IGNoYW5uZWxfc3RyKTsKKwl9CisKKwlyZXR1cm4gY2hhbm5lbHM7Cit9CmRpZmYgLS1naXQg YS9zcmMvYmFja2VuZC91dGlscy9hY3Rpdml0eS93YWl0X2V2ZW50X25hbWVzLnR4dCBiL3Ny Yy9iYWNrZW5kL3V0aWxzL2FjdGl2aXR5L3dhaXRfZXZlbnRfbmFtZXMudHh0CmluZGV4IDc1 NTNmNmVhY2VmLi5hNGZhZGJkMDc2NyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvdXRpbHMv YWN0aXZpdHkvd2FpdF9ldmVudF9uYW1lcy50eHQKKysrIGIvc3JjL2JhY2tlbmQvdXRpbHMv YWN0aXZpdHkvd2FpdF9ldmVudF9uYW1lcy50eHQKQEAgLTM2Niw2ICszNjYsNyBAQCBTdWJ0 cmFuc0J1ZmZlcgkiV2FpdGluZyBmb3IgSS9PIG9uIGEgc3ViLXRyYW5zYWN0aW9uIFNMUlUg YnVmZmVyLiIKIE11bHRpWGFjdE9mZnNldEJ1ZmZlcgkiV2FpdGluZyBmb3IgSS9PIG9uIGEg bXVsdGl4YWN0IG9mZnNldCBTTFJVIGJ1ZmZlci4iCiBNdWx0aVhhY3RNZW1iZXJCdWZmZXIJ IldhaXRpbmcgZm9yIEkvTyBvbiBhIG11bHRpeGFjdCBtZW1iZXIgU0xSVSBidWZmZXIuIgog Tm90aWZ5QnVmZmVyCSJXYWl0aW5nIGZvciBJL08gb24gYSA8Y29tbWFuZD5OT1RJRlk8L2Nv bW1hbmQ+IG1lc3NhZ2UgU0xSVSBidWZmZXIuIgorTm90aWZ5Q2hhbm5lbEhhc2gJIldhaXRp bmcgdG8gYWNjZXNzIHRoZSA8Y29tbWFuZD5OT1RJRlk8L2NvbW1hbmQ+IGNoYW5uZWwgaGFz aCB0YWJsZS4iCiBTZXJpYWxCdWZmZXIJIldhaXRpbmcgZm9yIEkvTyBvbiBhIHNlcmlhbGl6 YWJsZSB0cmFuc2FjdGlvbiBjb25mbGljdCBTTFJVIGJ1ZmZlci4iCiBXQUxJbnNlcnQJIldh aXRpbmcgdG8gaW5zZXJ0IFdBTCBkYXRhIGludG8gYSBtZW1vcnkgYnVmZmVyLiIKIEJ1ZmZl ckNvbnRlbnQJIldhaXRpbmcgdG8gYWNjZXNzIGEgZGF0YSBwYWdlIGluIG1lbW9yeS4iCmRp ZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9zdG9yYWdlL2x3bG9ja2xpc3QuaCBiL3NyYy9pbmNs dWRlL3N0b3JhZ2UvbHdsb2NrbGlzdC5oCmluZGV4IDA2YTFmZmQ0YjA4Li4yNzY4ZGRmNDQx NCAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvc3RvcmFnZS9sd2xvY2tsaXN0LmgKKysrIGIv c3JjL2luY2x1ZGUvc3RvcmFnZS9sd2xvY2tsaXN0LmgKQEAgLTEwMCw2ICsxMDAsNyBAQCBQ R19MV0xPQ0tUUkFOQ0hFKFNVQlRSQU5TX0JVRkZFUiwgU3VidHJhbnNCdWZmZXIpCiBQR19M V0xPQ0tUUkFOQ0hFKE1VTFRJWEFDVE9GRlNFVF9CVUZGRVIsIE11bHRpWGFjdE9mZnNldEJ1 ZmZlcikKIFBHX0xXTE9DS1RSQU5DSEUoTVVMVElYQUNUTUVNQkVSX0JVRkZFUiwgTXVsdGlY YWN0TWVtYmVyQnVmZmVyKQogUEdfTFdMT0NLVFJBTkNIRShOT1RJRllfQlVGRkVSLCBOb3Rp ZnlCdWZmZXIpCitQR19MV0xPQ0tUUkFOQ0hFKE5PVElGWV9DSEFOTkVMX0hBU0gsIE5vdGlm eUNoYW5uZWxIYXNoKQogUEdfTFdMT0NLVFJBTkNIRShTRVJJQUxfQlVGRkVSLCBTZXJpYWxC dWZmZXIpCiBQR19MV0xPQ0tUUkFOQ0hFKFdBTF9JTlNFUlQsIFdBTEluc2VydCkKIFBHX0xX TE9DS1RSQU5DSEUoQlVGRkVSX0NPTlRFTlQsIEJ1ZmZlckNvbnRlbnQpCmRpZmYgLS1naXQg YS9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdCBiL3NyYy90b29scy9wZ2luZGVu dC90eXBlZGVmcy5saXN0CmluZGV4IDM3ZjI2ZjZjNmI3Li4yZDllMmFlMmIwMiAxMDA2NDQK LS0tIGEvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QKKysrIGIvc3JjL3Rvb2xz L3BnaW5kZW50L3R5cGVkZWZzLmxpc3QKQEAgLTQxMSw2ICs0MTEsOCBAQCBDYXRhbG9nSWRN YXBFbnRyeQogQ2F0YWxvZ0luZGV4U3RhdGUKIENoYW5nZVZhck5vZGVzX2NhbGxiYWNrCiBD aGFuZ2VWYXJOb2Rlc19jb250ZXh0CitDaGFubmVsRW50cnkKK0NoYW5uZWxIYXNoS2V5CiBD aGVja1BvaW50CiBDaGVja1BvaW50U3RtdAogQ2hlY2twb2ludFN0YXRzRGF0YQotLSAKMi41 MC4xCgo= --7d410dd9664d4fb08c1071460b96d7f1--