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 1vDrWY-0009tJ-UK for pgsql-hackers@arkaria.postgresql.org; Tue, 28 Oct 2025 21:46:38 +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 1vDrWX-00FFwE-RU for pgsql-hackers@arkaria.postgresql.org; Tue, 28 Oct 2025 21:46:36 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1vDrWW-00FFvX-Rp for pgsql-hackers@lists.postgresql.org; Tue, 28 Oct 2025 21:46:36 +0000 Received: from fout-a2-smtp.messagingengine.com ([103.168.172.145]) by makus.postgresql.org with smtp (Exim 4.96) (envelope-from ) id 1vDrWT-004Gyr-2r for pgsql-hackers@postgresql.org; Tue, 28 Oct 2025 21:46:34 +0000 Received: from phl-compute-05.internal (phl-compute-05.internal [10.202.2.45]) by mailfout.phl.internal (Postfix) with ESMTP id 9D8B8EC02F4 for ; Tue, 28 Oct 2025 17:46:32 -0400 (EDT) Received: from phl-imap-03 ([10.202.2.93]) by phl-compute-05.internal (MEProxy); Tue, 28 Oct 2025 17:46:32 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=compiler.org; h= 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=fm3; t=1761687992; x=1761774392; bh=C5NtFgbDAt SGuQjvlYrGWv/UwmQ1x9G/3ag8HjcT5ys=; b=XmdYTAG0cAFVnRLnk4iCwrgQPW o3Lm1Gh31AQlwr26HKJvrozaqGUmppvph9I/8zDMP7sEycMGoecTJ7ryuFRy5qdL CUHtYSj5i85GBmO/xCN40LEpY3vTIObFewO+nk2HiQe13Wo4Z/JQT1PzP6rdCTik zJtTOxusnmdrTTNlY800hK4UR2F9L1KmROYMC1GZxVLE4//58fdaqzBW0QRkcUVv eXLxvjXM7fSUHVqRs2hkRr0d2JGJRaSChoq5ySd7fNDQiRQ2zGbCqtMVg5+Of6Qz ytBgyGaIelwl/LPOcE4GvROd+GGjzuw24XISAUZWYVMBvmH6TUxahbfEIb9Q== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=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=fm3; t= 1761687992; x=1761774392; bh=C5NtFgbDAtSGuQjvlYrGWv/UwmQ1x9G/3ag 8HjcT5ys=; b=PccLwhLpoSS7Uv9oieMYqp+4TJe7I3RUufJcDHblY0KOQpZwrtN yBpB5QEX/A5+7GmSMwAuJA6Ov/pJHjO4zM3exaYWrxxptrCg4fgRjQ6hgbl1fg2H XKdvwAM+gNvp/1S3oT3+Ej6e/OVFFPXBSjuS4qVK2GO8hUzRpxrKZ1nDkBcuLZs3 +Gs7ICNhvohFo2GZDDFEdGvfz0MsNhWjR3dbusgUbg6fqVkEQiv1Z1P9/cQjOFUh e0ueCNknshjLTLjD/fiz1pODjQJkOTdjUi+y7iB4XQFwkwrboAu438x25+7cm1mE 3cqyEyBaO7mp7z4aeU1dLKIKUUycZlN5BzQ== X-ME-Sender: X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgeeffedrtdeggdduieduleejucetufdoteggodetrf dotffvucfrrhhofhhilhgvmecuhfgrshhtofgrihhlpdfurfetoffkrfgpnffqhgenuceu rghilhhouhhtmecufedttdenucenucfjughrpefoggffhffvkfgjfhfutgesmhdtreerre dttdenucfhrhhomhepfdflohgvlhculfgrtghosghsohhnfdcuoehjohgvlhestghomhhp ihhlvghrrdhorhhgqeenucggtffrrghtthgvrhhnpeefheeutdegvdfgueeuueekieeuff ehkeeuleffveekkeegkeevhfekfffghfevleenucevlhhushhtvghrufhiiigvpedtnecu rfgrrhgrmhepmhgrihhlfhhrohhmpehjohgvlhestghomhhpihhlvghrrdhorhhgpdhnsg gprhgtphhtthhopedupdhmohguvgepshhmthhpohhuthdprhgtphhtthhopehpghhsqhhl qdhhrggtkhgvrhhssehpohhsthhgrhgvshhqlhdrohhrgh X-ME-Proxy: Feedback-ID: ic6394509:Fastmail Received: by mailuser.phl.internal (Postfix, from userid 501) id 1B72718E0069; Tue, 28 Oct 2025 17:46:32 -0400 (EDT) X-Mailer: MessagingEngine.com Webmail Interface MIME-Version: 1.0 X-ThreadId: AE1r89ybsZ1g Date: Tue, 28 Oct 2025 22:45:57 +0100 From: "Joel Jacobson" To: pgsql-hackers Message-Id: In-Reply-To: <87E40BF8-8877-4DBD-9040-99AF8A4E6358@gmail.com> 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> <8aeae418-92a6-4bbd-9c06-9574c79e59f7@app.fastmail.com> <2531672.1759868124@sss.pgh.pa.us> <474efa78-337c-41cd-a73a-f845a0115109@app.fastmail.com> <2749343.1759949176@sss.pgh.pa.us> <8bfca2be-1ec0-4e15-aafb-0b7b661fe936@app.fastmail.com> <9eba307f-f2fb-48f0-9507-2e197f39ef9e@app.fastmail.com> <8c71183a-0d28-4bcf-a806-78446ff95404@app.fastmail.com> <1009807.1760476747@sss.pgh.pa.us> <1F7227F5-C33D-4E2C-8511-33F1468590D0@gmail.com> <0a5a20d3-4621-46b3-b2ab-903f63a20dea@app.fastmail.com> <6F913129-ABEF-4004-AAF3-F22FC34!29AE8@gmail.com> <1547585.1760645808@sss.pgh.pa.us> <14865EB6-0BF4-462B-9072-10BDAC10C052@gmail.com> <0BCA1C2D-B92C-459E-B1A6-6D06BA4C62CF@gmail.com> <55d24cbb-e9ef-491f-a99b-b3dbd7cecdf9@app.fastmail.com> <38574cad-e90d-47b7-a015-753bb6bbc360@app.fastmail.com> <66631FB7-5BEA-4ED5-A694-9AD8B9CCFEE8@gmail.com> <4b7b49a5-5e1a-44a8-93e0-60457d15cb1d@app.fastmail.com> <82DEA2B6-6FC5-4A79-BDE3-1FD72F104A6E@gmail.com> <38de1036-d8cf-420c-b845-edb5a946b191@app.fastmail.com> <87E40BF8-8877-4DBD-9040-99AF8A4E6358@gmail.com> Subject: Re: Optimize LISTEN/NOTIFY Content-Type: multipart/mixed; boundary=f778e0c9bfbd44eca1869c41f90aeeb2 List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --f778e0c9bfbd44eca1869c41f90aeeb2 Content-Type: text/plain Content-Transfer-Encoding: 7bit On Tue, Oct 28, 2025, at 07:46, Chao Li wrote: >>> But anyway, we should run some load tests to verify every solution to >>> see how much they really improve. Do you already have or plan to work >>> on a load test script? >> >> Yes, I'm currently working on a combined benchmark / correctness test suite. >> > > Cool. Then we can run the benchmark and decide. I found a concurrency bug in v21 that could cause missed wakeup when a backend would UNLISTEN on the last channel, which called asyncQueueUnregister, and if wakeupPending was at that time already set, then it wouldn't get reset, since in ProcessIncomingNotify we return early if (listenChannels == NIL), so we would never clear wakeupPending which happens in asyncQueueReadAllNotifications. Fixed by clearing wakeupPending in asyncQueueUnregister: @@ -1597,6 +1597,7 @@ asyncQueueUnregister(void) /* Mark our entry as invalid */ QUEUE_BACKEND_PID(MyProcNumber) = InvalidPid; QUEUE_BACKEND_DBOID(MyProcNumber) = InvalidOid; + QUEUE_BACKEND_WAKEUP_PENDING(MyProcNumber) = false; /* and remove it from the list */ if (QUEUE_FIRST_LISTENER == MyProcNumber) QUEUE_FIRST_LISTENER = QUEUE_NEXT_LISTENER(MyProcNumber); /Joel --f778e0c9bfbd44eca1869c41f90aeeb2 Content-Disposition: attachment; filename*0="0001-optimize_listen_notify-v22.patch" Content-Type: application/octet-stream; name="=?UTF-8?Q?0001-optimize=5Flisten=5Fnotify-v22.patch?=" Content-Transfer-Encoding: base64 RnJvbSA0NDQ4NGEyYWQ4OGE1NTMyZDJlN2YyOGIyZThlZDkwOTU2MzRmMDg0IE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBKb2VsIEphY29ic29uIDxqb2VsQGNvbXBpbGVyLm9y Zz4KRGF0ZTogV2VkLCA4IE9jdCAyMDI1IDA5OjMwOjU0ICswMjAwClN1YmplY3Q6IFtQQVRD SCAxLzJdIEltcHJvdmUgTElTVEVOL05PVElGWSB0ZXN0IGNvdmVyYWdlCgpUaGlzIGFkZHMg aXNvbGF0aW9uIHRlc3RzIHRvIGNvdmVyIHByZXZpb3VzbHkgdW50ZXN0ZWQgY29kZSBwYXRo czoKCiogQ2hlY2sgc2ltcGxlIE5PVElGWSByZXBhcmVudGluZyB3aGVuIHBhcmVudCBoYXMg bm8gYWN0aW9uCiogQ2hlY2sgTElTVEVOIHJlcGFyZW50aW5nIGluIHN1YnRyYW5zYWN0aW9u CiogQ2hlY2sgTElTVEVOIG1lcmdlIHBhdGggd2hlbiBib3RoIG91dGVyIGFuZCBpbm5lciB0 cmFuc2FjdGlvbnMgaGF2ZSBhY3Rpb25zCiogQ2hlY2sgTElTVEVOIGFib3J0IHBhdGggKFJP TExCQUNLIFRPIFNBVkVQT0lOVCBkaXNjYXJkcyBwZW5kaW5nIGFjdGlvbnMpCiogQ2hlY2sg bm90aWZpY2F0aW9uX21hdGNoIGZ1bmN0aW9uICh0cmlnZ2VyZWQgYnkgaGFzaCB0YWJsZSBk dXBsaWNhdGUgZGV0ZWN0aW9uKQoqIENoZWNrIHRoYXQgbm90aWZpY2F0aW9ucyBzZW50IGZy b20gYSBiYWNrZW5kIHRoYXQgaGFzIG5vdCBkb25lIExJU1RFTgogIGFyZSBwcm9wZXJseSBk ZWxpdmVyZWQgdG8gYSBsaXN0ZW5lciBpbiBhbm90aGVyIGJhY2tlbmQKClRoaXMgYWxzbyBh ZGRzIGEgdGVzdCB0byBwcmVwYXJlIGZvciB0aGUgbmV4dCBwYXRjaDoKCiogQ2hlY2sgQ2hh bm5lbEhhc2hBZGRMaXN0ZW5lciBhcnJheSBncm93dGgKLS0tCiBzcmMvdGVzdC9pc29sYXRp b24vZXhwZWN0ZWQvYXN5bmMtbm90aWZ5Lm91dCB8IDExNCArKysrKysrKysrKysrKysrKyst CiBzcmMvdGVzdC9pc29sYXRpb24vc3BlY3MvYXN5bmMtbm90aWZ5LnNwZWMgICB8ICA2OCAr KysrKysrKysrKwogMiBmaWxlcyBjaGFuZ2VkLCAxODEgaW5zZXJ0aW9ucygrKSwgMSBkZWxl dGlvbigtKQoKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L2lzb2xhdGlvbi9leHBlY3RlZC9hc3lu Yy1ub3RpZnkub3V0IGIvc3JjL3Rlc3QvaXNvbGF0aW9uL2V4cGVjdGVkL2FzeW5jLW5vdGlm eS5vdXQKaW5kZXggNTU2ZTE4MDU4OTMuLjQ0M2E2ZWI2NjlmIDEwMDY0NAotLS0gYS9zcmMv dGVzdC9pc29sYXRpb24vZXhwZWN0ZWQvYXN5bmMtbm90aWZ5Lm91dAorKysgYi9zcmMvdGVz dC9pc29sYXRpb24vZXhwZWN0ZWQvYXN5bmMtbm90aWZ5Lm91dApAQCAtMSw0ICsxLDQgQEAK LVBhcnNlZCB0ZXN0IHNwZWMgd2l0aCAzIHNlc3Npb25zCitQYXJzZWQgdGVzdCBzcGVjIHdp dGggNyBzZXNzaW9ucwogCiBzdGFydGluZyBwZXJtdXRhdGlvbjogbGlzdGVuYyBub3RpZnkx IG5vdGlmeTIgbm90aWZ5MyBub3RpZnlmCiBzdGVwIGxpc3RlbmM6IExJU1RFTiBjMTsgTElT VEVOIGMyOwpAQCAtNDcsNiArNDcsMTA1IEBAIG5vdGlmaWVyOiBOT1RJRlkgImMyIiB3aXRo IHBheWxvYWQgInBheWxvYWQiIGZyb20gbm90aWZpZXIKIG5vdGlmaWVyOiBOT1RJRlkgImMx IiB3aXRoIHBheWxvYWQgInBheWxvYWRzIiBmcm9tIG5vdGlmaWVyCiBub3RpZmllcjogTk9U SUZZICJjMiIgd2l0aCBwYXlsb2FkICJwYXlsb2FkcyIgZnJvbSBub3RpZmllcgogCitzdGFy dGluZyBwZXJtdXRhdGlvbjogbGlzdGVuYyBub3RpZnlzX3NpbXBsZQorc3RlcCBsaXN0ZW5j OiBMSVNURU4gYzE7IExJU1RFTiBjMjsKK3N0ZXAgbm90aWZ5c19zaW1wbGU6IAorCUJFR0lO OworCVNBVkVQT0lOVCBzMTsKKwlOT1RJRlkgYzEsICdzaW1wbGUxJzsKKwlOT1RJRlkgYzIs ICdzaW1wbGUyJzsKKwlSRUxFQVNFIFNBVkVQT0lOVCBzMTsKKwlDT01NSVQ7CisKK25vdGlm aWVyOiBOT1RJRlkgImMxIiB3aXRoIHBheWxvYWQgInNpbXBsZTEiIGZyb20gbm90aWZpZXIK K25vdGlmaWVyOiBOT1RJRlkgImMyIiB3aXRoIHBheWxvYWQgInNpbXBsZTIiIGZyb20gbm90 aWZpZXIKKworc3RhcnRpbmcgcGVybXV0YXRpb246IGxzYmVnaW4gbHNzYXZlcG9pbnQgbHNs aXN0ZW4gbHNyZWxlYXNlIGxzY29tbWl0IGxzbm90aWZ5CitzdGVwIGxzYmVnaW46IEJFR0lO Oworc3RlcCBsc3NhdmVwb2ludDogU0FWRVBPSU5UIHMxOworc3RlcCBsc2xpc3RlbjogTElT VEVOIGMxOyBMSVNURU4gYzI7CitzdGVwIGxzcmVsZWFzZTogUkVMRUFTRSBTQVZFUE9JTlQg czE7CitzdGVwIGxzY29tbWl0OiBDT01NSVQ7CitzdGVwIGxzbm90aWZ5OiBOT1RJRlkgYzEs ICdzdWJ4YWN0X3Rlc3QnOworbGlzdGVuX3N1YnhhY3Q6IE5PVElGWSAiYzEiIHdpdGggcGF5 bG9hZCAic3VieGFjdF90ZXN0IiBmcm9tIGxpc3Rlbl9zdWJ4YWN0CisKK3N0YXJ0aW5nIHBl cm11dGF0aW9uOiBsc2JlZ2luIGxzbGlzdGVuX291dGVyIGxzc2F2ZXBvaW50IGxzbGlzdGVu IGxzcmVsZWFzZSBsc2NvbW1pdCBsc25vdGlmeQorc3RlcCBsc2JlZ2luOiBCRUdJTjsKK3N0 ZXAgbHNsaXN0ZW5fb3V0ZXI6IExJU1RFTiBjMzsKK3N0ZXAgbHNzYXZlcG9pbnQ6IFNBVkVQ T0lOVCBzMTsKK3N0ZXAgbHNsaXN0ZW46IExJU1RFTiBjMTsgTElTVEVOIGMyOworc3RlcCBs c3JlbGVhc2U6IFJFTEVBU0UgU0FWRVBPSU5UIHMxOworc3RlcCBsc2NvbW1pdDogQ09NTUlU Oworc3RlcCBsc25vdGlmeTogTk9USUZZIGMxLCAnc3VieGFjdF90ZXN0JzsKK2xpc3Rlbl9z dWJ4YWN0OiBOT1RJRlkgImMxIiB3aXRoIHBheWxvYWQgInN1YnhhY3RfdGVzdCIgZnJvbSBs aXN0ZW5fc3VieGFjdAorCitzdGFydGluZyBwZXJtdXRhdGlvbjogbHNiZWdpbiBsc3NhdmVw b2ludCBsc2xpc3RlbiBsc3JvbGxiYWNrIGxzY29tbWl0IGxzbm90aWZ5X2NoZWNrCitzdGVw IGxzYmVnaW46IEJFR0lOOworc3RlcCBsc3NhdmVwb2ludDogU0FWRVBPSU5UIHMxOworc3Rl cCBsc2xpc3RlbjogTElTVEVOIGMxOyBMSVNURU4gYzI7CitzdGVwIGxzcm9sbGJhY2s6IFJP TExCQUNLIFRPIFNBVkVQT0lOVCBzMTsKK3N0ZXAgbHNjb21taXQ6IENPTU1JVDsKK3N0ZXAg bHNub3RpZnlfY2hlY2s6IE5PVElGWSBjMSwgJ3Nob3VsZF9ub3RfcmVjZWl2ZSc7CisKK3N0 YXJ0aW5nIHBlcm11dGF0aW9uOiBsaXN0ZW5jIG5vdGlmeV9tYW55X3dpdGhfZHVwCitzdGVw IGxpc3RlbmM6IExJU1RFTiBjMTsgTElTVEVOIGMyOworc3RlcCBub3RpZnlfbWFueV93aXRo X2R1cDogCisJQkVHSU47CisJU0VMRUNUIHBnX25vdGlmeSgnYzEnLCAnbXNnJyB8fCBzOjp0 ZXh0KSBGUk9NIGdlbmVyYXRlX3NlcmllcygxLCAxNykgczsKKwlTRUxFQ1QgcGdfbm90aWZ5 KCdjMScsICdtc2cxJyk7CisJQ09NTUlUOworCitwZ19ub3RpZnkKKy0tLS0tLS0tLQorICAg ICAgICAgCisgICAgICAgICAKKyAgICAgICAgIAorICAgICAgICAgCisgICAgICAgICAKKyAg ICAgICAgIAorICAgICAgICAgCisgICAgICAgICAKKyAgICAgICAgIAorICAgICAgICAgCisg ICAgICAgICAKKyAgICAgICAgIAorICAgICAgICAgCisgICAgICAgICAKKyAgICAgICAgIAor ICAgICAgICAgCisgICAgICAgICAKKygxNyByb3dzKQorCitwZ19ub3RpZnkKKy0tLS0tLS0t LQorICAgICAgICAgCisoMSByb3cpCisKK25vdGlmaWVyOiBOT1RJRlkgImMxIiB3aXRoIHBh eWxvYWQgIm1zZzEiIGZyb20gbm90aWZpZXIKK25vdGlmaWVyOiBOT1RJRlkgImMxIiB3aXRo IHBheWxvYWQgIm1zZzIiIGZyb20gbm90aWZpZXIKK25vdGlmaWVyOiBOT1RJRlkgImMxIiB3 aXRoIHBheWxvYWQgIm1zZzMiIGZyb20gbm90aWZpZXIKK25vdGlmaWVyOiBOT1RJRlkgImMx IiB3aXRoIHBheWxvYWQgIm1zZzQiIGZyb20gbm90aWZpZXIKK25vdGlmaWVyOiBOT1RJRlkg ImMxIiB3aXRoIHBheWxvYWQgIm1zZzUiIGZyb20gbm90aWZpZXIKK25vdGlmaWVyOiBOT1RJ RlkgImMxIiB3aXRoIHBheWxvYWQgIm1zZzYiIGZyb20gbm90aWZpZXIKK25vdGlmaWVyOiBO T1RJRlkgImMxIiB3aXRoIHBheWxvYWQgIm1zZzciIGZyb20gbm90aWZpZXIKK25vdGlmaWVy OiBOT1RJRlkgImMxIiB3aXRoIHBheWxvYWQgIm1zZzgiIGZyb20gbm90aWZpZXIKK25vdGlm aWVyOiBOT1RJRlkgImMxIiB3aXRoIHBheWxvYWQgIm1zZzkiIGZyb20gbm90aWZpZXIKK25v dGlmaWVyOiBOT1RJRlkgImMxIiB3aXRoIHBheWxvYWQgIm1zZzEwIiBmcm9tIG5vdGlmaWVy Citub3RpZmllcjogTk9USUZZICJjMSIgd2l0aCBwYXlsb2FkICJtc2cxMSIgZnJvbSBub3Rp Zmllcgorbm90aWZpZXI6IE5PVElGWSAiYzEiIHdpdGggcGF5bG9hZCAibXNnMTIiIGZyb20g bm90aWZpZXIKK25vdGlmaWVyOiBOT1RJRlkgImMxIiB3aXRoIHBheWxvYWQgIm1zZzEzIiBm cm9tIG5vdGlmaWVyCitub3RpZmllcjogTk9USUZZICJjMSIgd2l0aCBwYXlsb2FkICJtc2cx NCIgZnJvbSBub3RpZmllcgorbm90aWZpZXI6IE5PVElGWSAiYzEiIHdpdGggcGF5bG9hZCAi bXNnMTUiIGZyb20gbm90aWZpZXIKK25vdGlmaWVyOiBOT1RJRlkgImMxIiB3aXRoIHBheWxv YWQgIm1zZzE2IiBmcm9tIG5vdGlmaWVyCitub3RpZmllcjogTk9USUZZICJjMSIgd2l0aCBw YXlsb2FkICJtc2cxNyIgZnJvbSBub3RpZmllcgorCitzdGFydGluZyBwZXJtdXRhdGlvbjog bGlzdGVuYyBsbGlzdGVuIGwybGlzdGVuIGwzbGlzdGVuIGxzbGlzdGVuCitzdGVwIGxpc3Rl bmM6IExJU1RFTiBjMTsgTElTVEVOIGMyOworc3RlcCBsbGlzdGVuOiBMSVNURU4gYzE7IExJ U1RFTiBjMjsKK3N0ZXAgbDJsaXN0ZW46IExJU1RFTiBjMTsKK3N0ZXAgbDNsaXN0ZW46IExJ U1RFTiBjMTsKK3N0ZXAgbHNsaXN0ZW46IExJU1RFTiBjMTsgTElTVEVOIGMyOworCiBzdGFy dGluZyBwZXJtdXRhdGlvbjogbGxpc3RlbiBub3RpZnkxIG5vdGlmeTIgbm90aWZ5MyBub3Rp ZnlmIGxjaGVjawogc3RlcCBsbGlzdGVuOiBMSVNURU4gYzE7IExJU1RFTiBjMjsKIHN0ZXAg bm90aWZ5MTogTk9USUZZIGMxOwpAQCAtOTUsNiArMTk0LDggQEAgbGlzdGVuZXI6IE5PVElG WSAiYzIiIHdpdGggcGF5bG9hZCAiIiBmcm9tIG5vdGlmaWVyCiAKIHN0YXJ0aW5nIHBlcm11 dGF0aW9uOiBsMmxpc3RlbiBsMmJlZ2luIG5vdGlmeTEgbGJlZ2lucyBsbGlzdGVuIGxjb21t aXQgbDJjb21taXQgbDJzdG9wCiBzdGVwIGwybGlzdGVuOiBMSVNURU4gYzE7CitsaXN0ZW5l cjI6IE5PVElGWSAiYzEiIHdpdGggcGF5bG9hZCAiIiBmcm9tIG5vdGlmaWVyCitsaXN0ZW5l cjI6IE5PVElGWSAiYzEiIHdpdGggcGF5bG9hZCAiIiBmcm9tIG5vdGlmaWVyCiBzdGVwIGwy YmVnaW46IEJFR0lOOwogc3RlcCBub3RpZnkxOiBOT1RJRlkgYzE7CiBzdGVwIGxiZWdpbnM6 IEJFR0lOIElTT0xBVElPTiBMRVZFTCBTRVJJQUxJWkFCTEU7CkBAIC0xMDQsNiArMjA1LDE3 IEBAIHN0ZXAgbDJjb21taXQ6IENPTU1JVDsKIGxpc3RlbmVyMjogTk9USUZZICJjMSIgd2l0 aCBwYXlsb2FkICIiIGZyb20gbm90aWZpZXIKIHN0ZXAgbDJzdG9wOiBVTkxJU1RFTiAqOwog CitzdGFydGluZyBwZXJtdXRhdGlvbjogbGNoX2xpc3RlbiBuY2hfbm90aWZ5IGxjaF9jaGVj aworc3RlcCBsY2hfbGlzdGVuOiBMSVNURU4gY2g7CitzdGVwIG5jaF9ub3RpZnk6IE5PVElG WSBjaCwgJ2FhJzsKK3N0ZXAgbGNoX2NoZWNrOiBTRUxFQ1QgMSBBUyB4OworeAorLQorMQor KDEgcm93KQorCitsaXN0ZW5lcl9jaDogTk9USUZZICJjaCIgd2l0aCBwYXlsb2FkICJhYSIg ZnJvbSBub3RpZmllcl9jaAorCiBzdGFydGluZyBwZXJtdXRhdGlvbjogbGxpc3RlbiBsYmVn aW4gdXNhZ2UgYmlnbm90aWZ5IHVzYWdlCiBzdGVwIGxsaXN0ZW46IExJU1RFTiBjMTsgTElT VEVOIGMyOwogc3RlcCBsYmVnaW46IEJFR0lOOwpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvaXNv bGF0aW9uL3NwZWNzL2FzeW5jLW5vdGlmeS5zcGVjIGIvc3JjL3Rlc3QvaXNvbGF0aW9uL3Nw ZWNzL2FzeW5jLW5vdGlmeS5zcGVjCmluZGV4IDBiOGNmZDkxMDgzLi4wYTAxZTc3N2I5OCAx MDA2NDQKLS0tIGEvc3JjL3Rlc3QvaXNvbGF0aW9uL3NwZWNzL2FzeW5jLW5vdGlmeS5zcGVj CisrKyBiL3NyYy90ZXN0L2lzb2xhdGlvbi9zcGVjcy9hc3luYy1ub3RpZnkuc3BlYwpAQCAt MzEsNiArMzEsMjAgQEAgc3RlcCBub3RpZnlzMQl7CiAJUk9MTEJBQ0sgVE8gU0FWRVBPSU5U IHMyOwogCUNPTU1JVDsKIH0KK3N0ZXAgbm90aWZ5c19zaW1wbGUJeworCUJFR0lOOworCVNB VkVQT0lOVCBzMTsKKwlOT1RJRlkgYzEsICdzaW1wbGUxJzsKKwlOT1RJRlkgYzIsICdzaW1w bGUyJzsKKwlSRUxFQVNFIFNBVkVQT0lOVCBzMTsKKwlDT01NSVQ7Cit9CitzdGVwIG5vdGlm eV9tYW55X3dpdGhfZHVwCXsKKwlCRUdJTjsKKwlTRUxFQ1QgcGdfbm90aWZ5KCdjMScsICdt c2cnIHx8IHM6OnRleHQpIEZST00gZ2VuZXJhdGVfc2VyaWVzKDEsIDE3KSBzOworCVNFTEVD VCBwZ19ub3RpZnkoJ2MxJywgJ21zZzEnKTsKKwlDT01NSVQ7Cit9CiBzdGVwIHVzYWdlCQl7 IFNFTEVDVCBwZ19ub3RpZmljYXRpb25fcXVldWVfdXNhZ2UoKSA+IDAgQVMgbm9uemVybzsg fQogc3RlcCBiaWdub3RpZnkJeyBTRUxFQ1QgY291bnQocGdfbm90aWZ5KCdjMScsIHM6OnRl eHQpKSBGUk9NIGdlbmVyYXRlX3NlcmllcygxLCAxMDAwKSBzOyB9CiB0ZWFyZG93bgkJeyBV TkxJU1RFTiAqOyB9CkBAIC01Myw2ICs2NywzOCBAQCBzdGVwIGwyYmVnaW4JeyBCRUdJTjsg fQogc3RlcCBsMmNvbW1pdAl7IENPTU1JVDsgfQogc3RlcCBsMnN0b3AJCXsgVU5MSVNURU4g KjsgfQogCisjIFRoaXJkIGxpc3RlbmVyIHNlc3Npb24gZm9yIHRlc3RpbmcgYXJyYXkgZ3Jv d3RoLgorCitzZXNzaW9uIGxpc3RlbmVyMworc3RlcCBsM2xpc3Rlbgl7IExJU1RFTiBjMTsg fQordGVhcmRvd24JCXsgVU5MSVNURU4gKjsgfQorCisjIExpc3RlbmVyIHNlc3Npb24gZm9y IGNyb3NzLXNlc3Npb24gbm90aWZpY2F0aW9uIHRlc3Qgd2l0aCBjaGFubmVsICdjaCcuCisK K3Nlc3Npb24gbGlzdGVuZXJfY2gKK3N0ZXAgbGNoX2xpc3Rlbgl7IExJU1RFTiBjaDsgfQor c3RlcCBsY2hfY2hlY2sJeyBTRUxFQ1QgMSBBUyB4OyB9Cit0ZWFyZG93bgkJeyBVTkxJU1RF TiAqOyB9CisKKyMgTm90aWZpZXIgc2Vzc2lvbiBmb3IgY3Jvc3Mtc2Vzc2lvbiBub3RpZmlj YXRpb24gdGVzdCB3aXRoIGNoYW5uZWwgJ2NoJy4KKworc2Vzc2lvbiBub3RpZmllcl9jaAor c3RlcCBuY2hfbm90aWZ5CXsgTk9USUZZIGNoLCAnYWEnOyB9CisKKyMgU2Vzc2lvbiBmb3Ig dGVzdGluZyBMSVNURU4gaW4gc3VidHJhbnNhY3Rpb24gd2l0aCBzZXBhcmF0ZSBzdGVwcy4K Kworc2Vzc2lvbiBsaXN0ZW5fc3VieGFjdAorc3RlcCBsc2JlZ2luCXsgQkVHSU47IH0KK3N0 ZXAgbHNsaXN0ZW5fb3V0ZXIJeyBMSVNURU4gYzM7IH0KK3N0ZXAgbHNzYXZlcG9pbnQJeyBT QVZFUE9JTlQgczE7IH0KK3N0ZXAgbHNsaXN0ZW4JeyBMSVNURU4gYzE7IExJU1RFTiBjMjsg fQorc3RlcCBsc3JlbGVhc2UJeyBSRUxFQVNFIFNBVkVQT0lOVCBzMTsgfQorc3RlcCBsc3Jv bGxiYWNrCXsgUk9MTEJBQ0sgVE8gU0FWRVBPSU5UIHMxOyB9CitzdGVwIGxzY29tbWl0CXsg Q09NTUlUOyB9CitzdGVwIGxzbm90aWZ5CXsgTk9USUZZIGMxLCAnc3VieGFjdF90ZXN0Jzsg fQorc3RlcCBsc25vdGlmeV9jaGVjawl7IE5PVElGWSBjMSwgJ3Nob3VsZF9ub3RfcmVjZWl2 ZSc7IH0KK3RlYXJkb3duCQl7IFVOTElTVEVOICo7IH0KKwogCiAjIFRyaXZpYWwgY2FzZXMu CiBwZXJtdXRhdGlvbiBsaXN0ZW5jIG5vdGlmeTEgbm90aWZ5MiBub3RpZnkzIG5vdGlmeWYK QEAgLTYwLDYgKzEwNiwyNCBAQCBwZXJtdXRhdGlvbiBsaXN0ZW5jIG5vdGlmeTEgbm90aWZ5 MiBub3RpZnkzIG5vdGlmeWYKICMgQ2hlY2sgc2ltcGxlIGFuZCBsZXNzLXNpbXBsZSBkZWR1 cGxpY2F0aW9uLgogcGVybXV0YXRpb24gbGlzdGVuYyBub3RpZnlkMSBub3RpZnlkMiBub3Rp ZnlzMQogCisjIENoZWNrIHNpbXBsZSBOT1RJRlkgcmVwYXJlbnRpbmcgd2hlbiBwYXJlbnQg aGFzIG5vIGFjdGlvbi4KK3Blcm11dGF0aW9uIGxpc3RlbmMgbm90aWZ5c19zaW1wbGUKKwor IyBDaGVjayBMSVNURU4gcmVwYXJlbnRpbmcgaW4gc3VidHJhbnNhY3Rpb24uCitwZXJtdXRh dGlvbiBsc2JlZ2luIGxzc2F2ZXBvaW50IGxzbGlzdGVuIGxzcmVsZWFzZSBsc2NvbW1pdCBs c25vdGlmeQorCisjIENoZWNrIExJU1RFTiBtZXJnZSBwYXRoIHdoZW4gYm90aCBvdXRlciBh bmQgaW5uZXIgdHJhbnNhY3Rpb25zIGhhdmUgYWN0aW9ucy4KK3Blcm11dGF0aW9uIGxzYmVn aW4gbHNsaXN0ZW5fb3V0ZXIgbHNzYXZlcG9pbnQgbHNsaXN0ZW4gbHNyZWxlYXNlIGxzY29t bWl0IGxzbm90aWZ5CisKKyMgQ2hlY2sgTElTVEVOIGFib3J0IHBhdGggKFJPTExCQUNLIFRP IFNBVkVQT0lOVCBkaXNjYXJkcyBwZW5kaW5nIGFjdGlvbnMpLgorcGVybXV0YXRpb24gbHNi ZWdpbiBsc3NhdmVwb2ludCBsc2xpc3RlbiBsc3JvbGxiYWNrIGxzY29tbWl0IGxzbm90aWZ5 X2NoZWNrCisKKyMgQ2hlY2sgbm90aWZpY2F0aW9uX21hdGNoIGZ1bmN0aW9uICh0cmlnZ2Vy ZWQgYnkgaGFzaCB0YWJsZSBkdXBsaWNhdGUgZGV0ZWN0aW9uKS4KK3Blcm11dGF0aW9uIGxp c3RlbmMgbm90aWZ5X21hbnlfd2l0aF9kdXAKKworIyBDaGVjayBDaGFubmVsSGFzaEFkZExp c3RlbmVyIGFycmF5IGdyb3d0aC4KK3Blcm11dGF0aW9uIGxpc3RlbmMgbGxpc3RlbiBsMmxp c3RlbiBsM2xpc3RlbiBsc2xpc3RlbgorCiAjIENyb3NzLWJhY2tlbmQgbm90aWZpY2F0aW9u IGRlbGl2ZXJ5LiAgV2UgdXNlIGEgInNlbGVjdCAxIiB0byBmb3JjZSB0aGUKICMgbGlzdGVu ZXIgc2Vzc2lvbiB0byBjaGVjayBmb3Igbm90aWZpZXMuICBJbiBwcmluY2lwbGUgd2UgY291 bGQganVzdCB3YWl0CiAjIGZvciBkZWxpdmVyeSwgYnV0IHRoYXQgd291bGQgcmVxdWlyZSBl eHRyYSBzdXBwb3J0IGluIGlzb2xhdGlvbnRlc3RlcgpAQCAtNzMsNiArMTM3LDEwIEBAIHBl cm11dGF0aW9uIGxpc3RlbmMgbGxpc3RlbiBub3RpZnkxIG5vdGlmeTIgbm90aWZ5MyBub3Rp ZnlmIGxjaGVjawogIyBhbmQgbm90aWZ5IHF1ZXVlIGlzIG5vdCBlbXB0eQogcGVybXV0YXRp b24gbDJsaXN0ZW4gbDJiZWdpbiBub3RpZnkxIGxiZWdpbnMgbGxpc3RlbiBsY29tbWl0IGwy Y29tbWl0IGwyc3RvcAogCisjIENoZWNrIHRoYXQgbm90aWZpY2F0aW9ucyBzZW50IGZyb20g YSBiYWNrZW5kIHRoYXQgaGFzIG5vdCBkb25lIExJU1RFTgorIyBhcmUgcHJvcGVybHkgZGVs aXZlcmVkIHRvIGEgbGlzdGVuZXIgaW4gYW5vdGhlciBiYWNrZW5kLgorcGVybXV0YXRpb24g bGNoX2xpc3RlbiBuY2hfbm90aWZ5IGxjaF9jaGVjaworCiAjIFZlcmlmeSB0aGF0IHBnX25v dGlmaWNhdGlvbl9xdWV1ZV91c2FnZSBjb3JyZWN0bHkgcmVwb3J0cyBhIG5vbi16ZXJvIHJl c3VsdCwKICMgYWZ0ZXIgc3VibWl0dGluZyBub3RpZmljYXRpb25zIHdoaWxlIGFub3RoZXIg Y29ubmVjdGlvbiBpcyBsaXN0ZW5pbmcgZm9yCiAjIHRob3NlIG5vdGlmaWNhdGlvbnMgYW5k IHdhaXRpbmcgaW5zaWRlIGFuIGFjdGl2ZSB0cmFuc2FjdGlvbi4gIFdlIGhhdmUgdG8KLS0g CjIuNTAuMQoK --f778e0c9bfbd44eca1869c41f90aeeb2 Content-Disposition: attachment; filename*0="0002-optimize_listen_notify-v22.patch" Content-Type: application/octet-stream; name="=?UTF-8?Q?0002-optimize=5Flisten=5Fnotify-v22.patch?=" Content-Transfer-Encoding: base64 RnJvbSA4NmQ4YzgzMjg4NjQ3MjU1ZWZlYzUzMjFmMDg3MjY5MjJjNTc2ZTE0IE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBKb2VsIEphY29ic29uIDxqb2VsQGNvbXBpbGVyLm9y Zz4KRGF0ZTogVHVlLCAxNCBPY3QgMjAyNSAwODowMzoxOSArMDIwMApTdWJqZWN0OiBbUEFU Q0ggMi8yXSBPcHRpbWl6ZSBMSVNURU4vTk9USUZZIHdpdGggc2hhcmVkIGNoYW5uZWwgbWFw IGFuZCBkaXJlY3QKIGFkdmFuY2VtZW50CgpUaGlzIHBhdGNoIHJld29ya3MgdGhlIExJU1RF Ti9OT1RJRlkgc2lnbmFsaW5nIHBhdGggdG8gYXZvaWQgdGhlCmxvbmctc3RhbmRpbmcgaW5l ZmZpY2llbmN5IHdoZXJlIGV2ZXJ5IGNvbW1pdCB3YWtlcyBhbGwgbGlzdGVuaW5nCmJhY2tl bmRzIGluIHRoZSBzYW1lIGRhdGFiYXNlLCBldmVuIHRob3NlIHRoYXQgYXJlIGxpc3Rlbmlu ZyBvbgpjb21wbGV0ZWx5IGRpZmZlcmVudCBjaGFubmVscy4KClByb2JsZW0KLS0tLS0tLQoK QXQgcHJlc2VudCwgU2lnbmFsQmFja2VuZHMgaGFzIG5vIGNlbnRyYWwga25vd2xlZGdlIG9m IHdoaWNoIGJhY2tlbmQKbGlzdGVucyBvbiB3aGljaCBjaGFubmVsLiBXaGVuIGEgYmFja2Vu ZCBjb21taXRzIGEgdHJhbnNhY3Rpb24gdGhhdAppc3N1ZWQgTk9USUZZLCBpdCBzaW1wbHkg aXRlcmF0ZXMgb3ZlciBhbGwgcmVnaXN0ZXJlZCBsaXN0ZW5lcnMgaW4gdGhlCnNhbWUgZGF0 YWJhc2UgYW5kIHNlbmRzIGVhY2ggb25lIGEgUFJPQ1NJR19OT1RJRllfSU5URVJSVVBUIHNp Z25hbC4KClRoYXQgYmVoYXZpb3IgaXMgZmluZSB3aGVuIGFsbCBsaXN0ZW5lcnMgYXJlIG9u IHRoZSBzYW1lIGNoYW5uZWwsIGJ1dAp3aGVuIG1hbnkgYmFja2VuZHMgYXJlIGxpc3Rlbmlu ZyBvbiBkaWZmZXJlbnQgY2hhbm5lbHMsIGVhY2ggTk9USUZZCnRyaWdnZXJzIGEgc3Rvcm0g b2YgdW5uZWNlc3Nhcnkgd2FrZXVwcyBhbmQgY29udGV4dCBzd2l0Y2hlcy4gQXMgdGhlCm51 bWJlciBvZiBpZGxlIGxpc3RlbmVycyBncm93cywgdGhpcyBvZnRlbiBiZWNvbWVzIHRoZSBi b3R0bGVuZWNrIGFuZAp0aHJvdWdocHV0IGRyb3BzIHNoYXJwbHkuCgpPdmVydmlldyBvZiB0 aGUgc29sdXRpb24KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgpUaGlzIHBhdGNoIGludHJv ZHVjZXMgYSBsYXppbHktY3JlYXRlZCBkeW5hbWljIHNoYXJlZCBoYXNoIChkc2hhc2gpCmJh Y2tlZCBieSBkeW5hbWljIHNoYXJlZCBtZW1vcnkgKERTQSkgdGhhdCBtYXBzIChkYm9pZCwg Y2hhbm5lbCkgdG8KYXJyYXlzIG9mIGxpc3RlbmluZyBiYWNrZW5kcyAoUHJvY051bWJlcnMp LiBUaGlzIGFsbG93cyB0aGUgc2VuZGVyIHRvCnRhcmdldCBvbmx5IHRob3NlIGJhY2tlbmRz IGFjdHVhbGx5IGxpc3RlbmluZyBvbiB0aGUgY2hhbm5lbHMgZm9yIHdoaWNoCml0IGhhcyBx dWV1ZWQgbm90aWZpY2F0aW9ucy4KCkF0IGNvbW1pdCB0aW1lOgoKKiBBdENvbW1pdF9Ob3Rp ZnkgdXBkYXRlcyB0aGUgc2hhcmVkIGNoYW5uZWxIYXNoIHRvIHJlZmxlY3QgYW55IExJU1RF TgogIG9yIFVOTElTVEVOIGFjdGlvbnMgcGVyZm9ybWVkIGluIHRoZSB0cmFuc2FjdGlvbi4K KiBTaWduYWxCYWNrZW5kcyBjb25zdWx0cyB0aGlzIGhhc2ggdG8gZmluZCB0aGUgYmFja2Vu ZHMgdGhhdCBhcmUKICBsaXN0ZW5pbmcgb24gdGhlIGNoYW5uZWxzIGJlaW5nIG5vdGlmaWVk IGluIHRoZSBjdXJyZW50IGRhdGFiYXNlLCBhbmQKICBzaWduYWxzIG9ubHkgdGhvc2UuCgpF YWNoIGJhY2tlbmQncyBlbnRyeSBpbiBBc3luY1F1ZXVlQ29udHJvbCBub3cgaW5jbHVkZXMg YSB3YWtldXBQZW5kaW5nCmZsYWcgdG8gcHJldmVudCBkdXBsaWNhdGUgc2lnbmFscyB3aGls ZSBhIHByZXZpb3VzIHdha2V1cCBpcyBzdGlsbCBiZWluZwpwcm9jZXNzZWQuCgpEaXJlY3Qg YWR2YW5jZW1lbnQKLS0tLS0tLS0tLS0tLS0tLS0tCgpBIGZ1cnRoZXIgb3B0aW1pemF0aW9u IGF2b2lkcyBzaWduYWxpbmcgaWRsZSBiYWNrZW5kcyB0aGF0IGFyZSBub3QKbGlzdGVuaW5n IG9uIGFueSBvZiB0aGUgY2hhbm5lbHMgbm90aWZpZWQgd2l0aGluIHRoZSB0cmFuc2FjdGlv bi4KCldoaWxlIHF1ZXVpbmcgbm90aWZpY2F0aW9ucywgUHJlQ29tbWl0X05vdGlmeSByZWNv cmRzIHRoZSBxdWV1ZSBoZWFkCnBvc2l0aW9uIGJvdGggYmVmb3JlIGFuZCBhZnRlciB3cml0 aW5nIGl0cyBub3RpZmljYXRpb25zLiBCZWNhdXNlIGFsbAp3cml0ZXJzIGFyZSBzZXJpYWxp emVkIGJ5IHRoZSBleGlzdGluZyBjbHVzdGVyLXdpZGUgaGVhdnl3ZWlnaHQgbG9jayBvbgoi ZGF0YWJhc2UgMCIsIG5vIGJhY2tlbmQgKGZyb20gYW55IGRhdGFiYXNlKSBjYW4gaW5zZXJ0 IGVudHJpZXMgYmV0d2Vlbgp0aG9zZSB0d28gcG9pbnRzLiBUaGlzIGd1YXJhbnRlZXMgdGhh dCB0aGUgcmVnaW9uIFtvbGRIZWFkLCBuZXdIZWFkKQpjb250YWlucyBvbmx5IHRoZSBlbnRy aWVzIHdyaXR0ZW4gYnkgb3VyIGNvbW1pdC4KClNpZ25hbEJhY2tlbmRzIHVzZXMgdGhpcyBm YWN0IHRvIGRpcmVjdGx5IGFkdmFuY2UgYW55IGJhY2tlbmQgc3RpbGwKcG9zaXRpb25lZCBh dCBvbGRIZWFkIHVwIHRvIG5ld0hlYWQsIGF2b2lkaW5nIGEgbmVlZGxlc3Mgd2FrZXVwIGZv cgpsaXN0ZW5lcnMgdGhhdCB3b3VsZCBvdGhlcndpc2Ugbm90IGZpbmQgYW55IG5vdGlmaWVz IG9mIGludGVyZXN0LgoKT3RoZXIgbm90ZXMKLS0tLS0tLS0tLS0KCiogTWFpbnRhaW5zIGR1 YWwgZGF0YSBzdHJ1Y3R1cmVzOiBhIHNoYXJlZCBjaGFubmVsSGFzaCBmb3IgZGV0ZXJtaW5p bmcKICB3aGljaCBiYWNrZW5kcyB0byBzaWduYWwsIGFuZCBhIGxvY2FsIHBlci1iYWNrZW5k IGxpc3RlbkNoYW5uZWxzIGxpc3QKICBmb3IgZmFzdCBsb2NrLWZyZWUgbG9va3VwcyBkdXJp bmcgbm90aWZpY2F0aW9uIHByb2Nlc3NpbmcuIFRoaXMgYXZvaWRzCiAgY29udGVudGlvbiBv biB0aGUgc2hhcmVkIGhhc2ggZHVyaW5nIHRoZSBoaWdoLWZyZXF1ZW5jeSBJc0xpc3Rlbmlu Z09uCiAgY2hlY2tzIHRoYXQgb2NjdXIgZm9yIGV2ZXJ5IG5vdGlmaWNhdGlvbiByZWFkIGZy b20gdGhlIHF1ZXVlLgoqIEJhY2tlbmRzIHJlbWFpbiByZWdpc3RlcmVkIGluIHRoZSBnbG9i YWwgbGlzdGVuZXIgbGlzdCBhcyBsb25nIGFzCiAgbGlzdGVuQ2hhbm5lbHMgaXMgbm9uLWVt cHR5LgoqIEFkZHMgTFdMb2NrIHRyYW5jaGUgTk9USUZZX0NIQU5ORUxfSEFTSCBhbmQgd2Fp dCBldmVudAogIE5vdGlmeUNoYW5uZWxIYXNoIGZvciB2aXNpYmlsaXR5LgoqIE5vIHVzZXIt dmlzaWJsZSBiZWhhdmlvcmFsIGNoYW5nZXM7IHRoaXMgaXMgYW4gaW50ZXJuYWwgb3B0aW1p emF0aW9uCiAgb25seS4KLS0tCiBzcmMvYmFja2VuZC9jb21tYW5kcy9hc3luYy5jICAgICAg ICAgICAgICAgICAgfCA2MTQgKysrKysrKysrKysrKysrKy0tCiAuLi4vdXRpbHMvYWN0aXZp dHkvd2FpdF9ldmVudF9uYW1lcy50eHQgICAgICAgfCAgIDEgKwogc3JjL2luY2x1ZGUvc3Rv cmFnZS9sd2xvY2tsaXN0LmggICAgICAgICAgICAgIHwgICAxICsKIHNyYy90b29scy9wZ2lu ZGVudC90eXBlZGVmcy5saXN0ICAgICAgICAgICAgICB8ICAgMiArCiA0IGZpbGVzIGNoYW5n ZWQsIDU2NyBpbnNlcnRpb25zKCspLCA1MSBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9z cmMvYmFja2VuZC9jb21tYW5kcy9hc3luYy5jIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvYXN5 bmMuYwppbmRleCA0YmQzN2Q1YmViNS4uZjE0NTcxOTc3OWQgMTAwNjQ0Ci0tLSBhL3NyYy9i YWNrZW5kL2NvbW1hbmRzL2FzeW5jLmMKKysrIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvYXN5 bmMuYwpAQCAtMjQsOCArMjQsMTAgQEAKICAqCSAgQWxsIG5vdGlmaWNhdGlvbiBtZXNzYWdl cyBhcmUgcGxhY2VkIGluIHRoZSBxdWV1ZSBhbmQgbGF0ZXIgcmVhZCBvdXQKICAqCSAgYnkg bGlzdGVuaW5nIGJhY2tlbmRzLgogICoKLSAqCSAgVGhlcmUgaXMgbm8gY2VudHJhbCBrbm93 bGVkZ2Ugb2Ygd2hpY2ggYmFja2VuZCBsaXN0ZW5zIG9uIHdoaWNoIGNoYW5uZWw7Ci0gKgkg IGV2ZXJ5IGJhY2tlbmQgaGFzIGl0cyBvd24gbGlzdCBvZiBpbnRlcmVzdGluZyBjaGFubmVs cy4KKyAqCSAgV2UgYWxzbyBtYWludGFpbiBhIGR5bmFtaWMgc2hhcmVkIGhhc2ggdGFibGUg KGRzaGFzaCkgdGhhdCBtYXBzIGNoYW5uZWwKKyAqCSAgbmFtZXMgdG8gdGhlIHNldCBvZiBi YWNrZW5kcyBsaXN0ZW5pbmcgb24gZWFjaCBjaGFubmVsLiBUaGlzIHRhYmxlIGlzCisgKgkg IGNyZWF0ZWQgbGF6aWx5IG9uIHRoZSBmaXJzdCBMSVNURU4gY29tbWFuZCBhbmQgZ3Jvd3Mg ZHluYW1pY2FsbHkgYXMKKyAqCSAgbmVlZGVkLgogICoKICAqCSAgQWx0aG91Z2ggdGhlcmUg aXMgb25seSBvbmUgcXVldWUsIG5vdGlmaWNhdGlvbnMgYXJlIHRyZWF0ZWQgYXMgYmVpbmcK ICAqCSAgZGF0YWJhc2UtbG9jYWw7IHRoaXMgaXMgZG9uZSBieSBpbmNsdWRpbmcgdGhlIHNl bmRlcidzIGRhdGFiYXNlIE9JRApAQCAtNjgsMTYgKzcwLDIxIEBACiAgKgkgIENvbW1pdFRy YW5zYWN0aW9uKCkgd2hpY2ggd2lsbCB0aGVuIGRvIHRoZSBhY3R1YWwgdHJhbnNhY3Rpb24g Y29tbWl0LgogICoKICAqCSAgQWZ0ZXIgY29tbWl0IHdlIGFyZSBjYWxsZWQgYW5vdGhlciB0 aW1lIChBdENvbW1pdF9Ob3RpZnkoKSkuIEhlcmUgd2UKLSAqCSAgbWFrZSBhbnkgYWN0dWFs IHVwZGF0ZXMgdG8gdGhlIGVmZmVjdGl2ZSBsaXN0ZW4gc3RhdGUgKGxpc3RlbkNoYW5uZWxz KS4KLSAqCSAgVGhlbiB3ZSBzaWduYWwgYW55IGJhY2tlbmRzIHRoYXQgbWF5IGJlIGludGVy ZXN0ZWQgaW4gb3VyIG1lc3NhZ2VzCi0gKgkgIChpbmNsdWRpbmcgb3VyIG93biBiYWNrZW5k LCBpZiBsaXN0ZW5pbmcpLiAgVGhpcyBpcyBkb25lIGJ5Ci0gKgkgIFNpZ25hbEJhY2tlbmRz KCksIHdoaWNoIHNjYW5zIHRoZSBsaXN0IG9mIGxpc3RlbmluZyBiYWNrZW5kcyBhbmQgc2Vu ZHMgYQotICoJICBQUk9DU0lHX05PVElGWV9JTlRFUlJVUFQgc2lnbmFsIHRvIGV2ZXJ5IGxp c3RlbmluZyBiYWNrZW5kICh3ZSBkb24ndAotICoJICBrbm93IHdoaWNoIGJhY2tlbmQgaXMg bGlzdGVuaW5nIG9uIHdoaWNoIGNoYW5uZWwgc28gd2UgbXVzdCBzaWduYWwgdGhlbQotICoJ ICBhbGwpLiAgV2UgY2FuIGV4Y2x1ZGUgYmFja2VuZHMgdGhhdCBhcmUgYWxyZWFkeSB1cCB0 byBkYXRlLCB0aG91Z2gsIGFuZAotICoJICB3ZSBjYW4gYWxzbyBleGNsdWRlIGJhY2tlbmRz IHRoYXQgYXJlIGluIG90aGVyIGRhdGFiYXNlcyAodW5sZXNzIHRoZXkKLSAqCSAgYXJlIHdh eSBiZWhpbmQgYW5kIHNob3VsZCBiZSBraWNrZWQgdG8gbWFrZSB0aGVtIGFkdmFuY2UgdGhl aXIKLSAqCSAgcG9pbnRlcnMpLgorICoJICBtYWtlIGFueSBhY3R1YWwgdXBkYXRlcyB0byB0 aGUgbG9jYWwgbGlzdGVuIHN0YXRlIChsaXN0ZW5DaGFubmVscykgYW5kCisgKgkgIHNoYXJl ZCBjaGFubmVsIGhhc2ggdGFibGUgKGNoYW5uZWxIYXNoKS4gIFRoZW4gd2Ugc2lnbmFsIGFu eSBiYWNrZW5kcworICoJICB0aGF0IG1heSBiZSBpbnRlcmVzdGVkIGluIG91ciBtZXNzYWdl cyAoaW5jbHVkaW5nIG91ciBvd24gYmFja2VuZCwKKyAqCSAgaWYgbGlzdGVuaW5nKS4gIFRo aXMgaXMgZG9uZSBieSBTaWduYWxCYWNrZW5kcygpLCB3aGljaCBjb25zdWx0cyB0aGUKKyAq CSAgc2hhcmVkIGNoYW5uZWwgaGFzaCB0YWJsZSB0byBpZGVudGlmeSBsaXN0ZW5lcnMgZm9y IHRoZSBjaGFubmVscyB0aGF0CisgKgkgIGhhdmUgcGVuZGluZyBub3RpZmljYXRpb25zIGlu IHRoZSBjdXJyZW50IGRhdGFiYXNlLiAgRWFjaCBzZWxlY3RlZAorICoJICBiYWNrZW5kIGlz IG1hcmtlZCBhcyBoYXZpbmcgYSB3YWtldXAgcGVuZGluZyB0byBhdm9pZCBkdXBsaWNhdGUg c2lnbmFscywKKyAqCSAgYW5kIGEgUFJPQ1NJR19OT1RJRllfSU5URVJSVVBUIHNpZ25hbCBp cyBzZW50IHRvIGl0LgorICoKKyAqCSAgV2hlbiB3cml0aW5nIG5vdGlmaWNhdGlvbnMsIFBy ZUNvbW1pdF9Ob3RpZnkoKSByZWNvcmRzIHRoZSBxdWV1ZSBoZWFkCisgKgkgIHBvc2l0aW9u IGJvdGggYmVmb3JlIGFuZCBhZnRlciB0aGUgd3JpdGUuICBCZWNhdXNlIGFsbCB3cml0ZXJz IHNlcmlhbGl6ZQorICoJICBvbiBhIGNsdXN0ZXItd2lkZSBoZWF2eXdlaWdodCBsb2NrLCBu byBiYWNrZW5kIGNhbiBpbnNlcnQgZW50cmllcyBiZXR3ZWVuCisgKgkgIHRoZXNlIHR3byBw b2ludHMuICBTaWduYWxCYWNrZW5kcygpIHVzZXMgdGhpcyBmYWN0IHRvIGRpcmVjdGx5IGFk dmFuY2UgYW55CisgKgkgIGJhY2tlbmQgdGhhdCBpcyBzdGlsbCBwb3NpdGlvbmVkIGF0IHRo ZSBvbGQgaGVhZCwgYXZvaWRpbmcgdW5uZWNlc3NhcnkKKyAqCSAgd2FrZXVwcyBmb3IgaWRs ZSBsaXN0ZW5lcnMgdGhhdCBoYXZlIG5vdGhpbmcgdG8gcmVhZC4KICAqCiAgKgkgIEZpbmFs bHksIGFmdGVyIHdlIGFyZSBvdXQgb2YgdGhlIHRyYW5zYWN0aW9uIGFsdG9nZXRoZXIgYW5k IGFib3V0IHRvIGdvCiAgKgkgIGlkbGUsIHdlIHNjYW4gdGhlIHF1ZXVlIGZvciBtZXNzYWdl cyB0aGF0IG5lZWQgdG8gYmUgc2VudCB0byBvdXIKQEAgLTEyOCw2ICsxMzUsNyBAQAogI2lu Y2x1ZGUgPGxpbWl0cy5oPgogI2luY2x1ZGUgPHVuaXN0ZC5oPgogI2luY2x1ZGUgPHNpZ25h bC5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgogCiAjaW5jbHVkZSAiYWNjZXNzL3BhcmFsbGVs LmgiCiAjaW5jbHVkZSAiYWNjZXNzL3NscnUuaCIKQEAgLTEzNywxNCArMTQ1LDE3IEBACiAj aW5jbHVkZSAiY29tbWFuZHMvYXN5bmMuaCIKICNpbmNsdWRlICJjb21tb24vaGFzaGZuLmgi CiAjaW5jbHVkZSAiZnVuY2FwaS5oIgorI2luY2x1ZGUgImxpYi9kc2hhc2guaCIKICNpbmNs dWRlICJsaWJwcS9saWJwcS5oIgogI2luY2x1ZGUgImxpYnBxL3BxZm9ybWF0LmgiCiAjaW5j bHVkZSAibWlzY2FkbWluLmgiCisjaW5jbHVkZSAic3RvcmFnZS9kc21fcmVnaXN0cnkuaCIK ICNpbmNsdWRlICJzdG9yYWdlL2lwYy5oIgogI2luY2x1ZGUgInN0b3JhZ2UvbG1nci5oIgog I2luY2x1ZGUgInN0b3JhZ2UvcHJvY3NpZ25hbC5oIgogI2luY2x1ZGUgInRjb3AvdGNvcHBy b3QuaCIKICNpbmNsdWRlICJ1dGlscy9idWlsdGlucy5oIgorI2luY2x1ZGUgInV0aWxzL2Rz YS5oIgogI2luY2x1ZGUgInV0aWxzL2d1Y19ob29rcy5oIgogI2luY2x1ZGUgInV0aWxzL21l bXV0aWxzLmgiCiAjaW5jbHVkZSAidXRpbHMvcHNfc3RhdHVzLmgiCkBAIC0xNjIsNiArMTcz LDI5IEBACiAgKi8KICNkZWZpbmUgTk9USUZZX1BBWUxPQURfTUFYX0xFTkdUSAkoQkxDS1Na IC0gTkFNRURBVEFMRU4gLSAxMjgpCiAKKy8qCisgKiBDaGFubmVsIGhhc2ggdGFibGUgZGVm aW5pdGlvbnMKKyAqCisgKiBUaGlzIGhhc2ggdGFibGUgbWFwcyAoZGF0YWJhc2UgT0lELCBj aGFubmVsIG5hbWUpIGtleXMgdG8gYXJyYXlzIG9mCisgKiBQcm9jTnVtYmVycyByZXByZXNl bnRpbmcgdGhlIGJhY2tlbmRzIGxpc3RlbmluZyBvbiBlYWNoIGNoYW5uZWwuCisgKi8KKwor I2RlZmluZSBJTklUSUFMX0xJU1RFTkVSU19BUlJBWV9TSVpFIDQKKwordHlwZWRlZiBzdHJ1 Y3QgQ2hhbm5lbEhhc2hLZXkKK3sKKwlPaWQJCQlkYm9pZDsKKwljaGFyCQljaGFubmVsW05B TUVEQVRBTEVOXTsKK30gQ2hhbm5lbEhhc2hLZXk7CisKK3R5cGVkZWYgc3RydWN0IENoYW5u ZWxFbnRyeQoreworCUNoYW5uZWxIYXNoS2V5IGtleTsKKwlkc2FfcG9pbnRlciBsaXN0ZW5l cnNBcnJheTsgLyogRFNBIHBvaW50ZXIgdG8gUHJvY051bWJlciBhcnJheSAqLworCWludAkJ CW51bUxpc3RlbmVyczsJLyogTnVtYmVyIG9mIGxpc3RlbmVycyBjdXJyZW50bHkgc3RvcmVk ICovCisJaW50CQkJYWxsb2NhdGVkTGlzdGVuZXJzOyAvKiBBbGxvY2F0ZWQgc2l6ZSBvZiBh cnJheSAqLworfSBDaGFubmVsRW50cnk7CisKIC8qCiAgKiBTdHJ1Y3QgcmVwcmVzZW50aW5n IGFuIGVudHJ5IGluIHRoZSBnbG9iYWwgbm90aWZ5IHF1ZXVlCiAgKgpAQCAtMjI0LDExICsy NTgsMTYgQEAgdHlwZWRlZiBzdHJ1Y3QgUXVldWVQb3NpdGlvbgogCSAoeCkucGFnZSAhPSAo eSkucGFnZSA/ICh4KSA6IFwKIAkgKHgpLm9mZnNldCA+ICh5KS5vZmZzZXQgPyAoeCkgOiAo eSkpCiAKKy8qIHJldHVybnMgdHJ1ZSBpZiB4IGNvbWVzIGJlZm9yZSB5IGluIHF1ZXVlIG9y ZGVyICovCisjZGVmaW5lIFFVRVVFX1BPU19QUkVDRURFUyh4LHkpIFwKKwkoYXN5bmNRdWV1 ZVBhZ2VQcmVjZWRlcygoeCkucGFnZSwgKHkpLnBhZ2UpIHx8IFwKKwkgKCh4KS5wYWdlID09 ICh5KS5wYWdlICYmICh4KS5vZmZzZXQgPCAoeSkub2Zmc2V0KSkKKwogLyoKICAqIFBhcmFt ZXRlciBkZXRlcm1pbmluZyBob3cgb2Z0ZW4gd2UgdHJ5IHRvIGFkdmFuY2UgdGhlIHRhaWwg cG9pbnRlcjoKICAqIHdlIGRvIHRoYXQgYWZ0ZXIgZXZlcnkgUVVFVUVfQ0xFQU5VUF9ERUxB WSBwYWdlcyBvZiBOT1RJRlkgZGF0YS4gIFRoaXMgaXMKLSAqIGFsc28gdGhlIGRpc3RhbmNl IGJ5IHdoaWNoIGEgYmFja2VuZCBpbiBhbm90aGVyIGRhdGFiYXNlIG5lZWRzIHRvIGJlCi0g KiBiZWhpbmQgYmVmb3JlIHdlJ2xsIGRlY2lkZSB3ZSBuZWVkIHRvIHdha2UgaXQgdXAgdG8g YWR2YW5jZSBpdHMgcG9pbnRlci4KKyAqIGFsc28gdGhlIGRpc3RhbmNlIGJ5IHdoaWNoIGEg YmFja2VuZCBuZWVkcyB0byBiZSBiZWhpbmQgYmVmb3JlIHdlJ2xsCisgKiBkZWNpZGUgd2Ug bmVlZCB0byB3YWtlIGl0IHVwIHRvIGFkdmFuY2UgaXRzIHBvaW50ZXIuCiAgKgogICogUmVz aXN0IHRoZSB0ZW1wdGF0aW9uIHRvIG1ha2UgdGhpcyByZWFsbHkgbGFyZ2UuICBXaGlsZSB0 aGF0IHdvdWxkIHNhdmUKICAqIHdvcmsgaW4gc29tZSBwbGFjZXMsIGl0IHdvdWxkIGFkZCBj b3N0IGluIG90aGVycy4gIEluIHBhcnRpY3VsYXIsIHRoaXMKQEAgLTI0Niw2ICsyODUsOSBA QCB0eXBlZGVmIHN0cnVjdCBRdWV1ZUJhY2tlbmRTdGF0dXMKIAlPaWQJCQlkYm9pZDsJCQkv KiBiYWNrZW5kJ3MgZGF0YWJhc2UgT0lELCBvciBJbnZhbGlkT2lkICovCiAJUHJvY051bWJl cgluZXh0TGlzdGVuZXI7CS8qIGlkIG9mIG5leHQgbGlzdGVuZXIsIG9yIElOVkFMSURfUFJP Q19OVU1CRVIgKi8KIAlRdWV1ZVBvc2l0aW9uIHBvczsJCQkvKiBiYWNrZW5kIGhhcyByZWFk IHF1ZXVlIHVwIHRvIGhlcmUgKi8KKwlib29sCQl3YWtldXBQZW5kaW5nOwkvKiBzaWduYWwg c2VudCBidXQgbm90IHlldCBwcm9jZXNzZWQgKi8KKwlRdWV1ZVBvc2l0aW9uIGFkdmlzb3J5 UG9zOwkvKiBzYWZlIHNraXAtYWhlYWQgcG9zaXRpb24gKi8KKwlib29sCQlhZHZhbmNpbmdQ b3M7CS8qIGJhY2tlbmQgaXMgcmVhZGluZyB0aGUgcXVldWUgKi8KIH0gUXVldWVCYWNrZW5k U3RhdHVzOwogCiAvKgpAQCAtMjYwLDkgKzMwMiwxMCBAQCB0eXBlZGVmIHN0cnVjdCBRdWV1 ZUJhY2tlbmRTdGF0dXMKICAqIChzaW5jZSBubyBvdGhlciBiYWNrZW5kIHdpbGwgaW5zcGVj dCBpdCkuCiAgKgogICogV2hlbiBob2xkaW5nIE5vdGlmeVF1ZXVlTG9jayBpbiBFWENMVVNJ VkUgbW9kZSwgYmFja2VuZHMgY2FuIGluc3BlY3QgdGhlCi0gKiBlbnRyaWVzIG9mIG90aGVy IGJhY2tlbmRzIGFuZCBhbHNvIGNoYW5nZSB0aGUgaGVhZCBwb2ludGVyLiBXaGVuIGhvbGRp bmcKLSAqIGJvdGggTm90aWZ5UXVldWVMb2NrIGFuZCBOb3RpZnlRdWV1ZVRhaWxMb2NrIGlu IEVYQ0xVU0lWRSBtb2RlLCBiYWNrZW5kcwotICogY2FuIGNoYW5nZSB0aGUgdGFpbCBwb2lu dGVycy4KKyAqIGVudHJpZXMgb2Ygb3RoZXIgYmFja2VuZHMgYW5kIGFsc28gY2hhbmdlIHRo ZSBoZWFkIHBvaW50ZXIuIFRoZXkgY2FuCisgKiBhbHNvIGFkdmFuY2Ugb3RoZXIgYmFja2Vu ZHMnIHF1ZXVlIHBvc2l0aW9ucywgdW5sZXNzIHRoZXkgYXJlIG5vdAorICogaW4gdGhlIHBy b2Nlc3Mgb2YgZG9pbmcgdGhhdCB0aGVtc2VsdmVzLiBXaGVuIGhvbGRpbmcgYm90aCBOb3Rp ZnlRdWV1ZUxvY2sgYW5kCisgKiBOb3RpZnlRdWV1ZVRhaWxMb2NrIGluIEVYQ0xVU0lWRSBt b2RlLCBiYWNrZW5kcyBjYW4gY2hhbmdlIHRoZSB0YWlsIHBvaW50ZXJzLgogICoKICAqIFNM UlUgYnVmZmVyIHBvb2wgaXMgZGl2aWRlZCBpbiBiYW5rcyBhbmQgYmFuayB3aXNlIFNMUlUg bG9jayBpcyB1c2VkIGFzCiAgKiB0aGUgY29udHJvbCBsb2NrIGZvciB0aGUgcGdfbm90aWZ5 IFNMUlUgYnVmZmVycy4KQEAgLTI4OCwxMSArMzMxLDE2IEBAIHR5cGVkZWYgc3RydWN0IEFz eW5jUXVldWVDb250cm9sCiAJUHJvY051bWJlcglmaXJzdExpc3RlbmVyOwkvKiBpZCBvZiBm aXJzdCBsaXN0ZW5lciwgb3IKIAkJCQkJCQkJICogSU5WQUxJRF9QUk9DX05VTUJFUiAqLwog CVRpbWVzdGFtcFR6IGxhc3RRdWV1ZUZpbGxXYXJuOwkvKiB0aW1lIG9mIGxhc3QgcXVldWUt ZnVsbCBtc2cgKi8KKwlkc2FfaGFuZGxlCWNoYW5uZWxIYXNoRFNBOworCWRzaGFzaF90YWJs ZV9oYW5kbGUgY2hhbm5lbEhhc2hEU0g7CiAJUXVldWVCYWNrZW5kU3RhdHVzIGJhY2tlbmRb RkxFWElCTEVfQVJSQVlfTUVNQkVSXTsKIH0gQXN5bmNRdWV1ZUNvbnRyb2w7CiAKIHN0YXRp YyBBc3luY1F1ZXVlQ29udHJvbCAqYXN5bmNRdWV1ZUNvbnRyb2w7CiAKK3N0YXRpYyBkc2Ff YXJlYSAqY2hhbm5lbERTQSA9IE5VTEw7CitzdGF0aWMgZHNoYXNoX3RhYmxlICpjaGFubmVs SGFzaCA9IE5VTEw7CisKICNkZWZpbmUgUVVFVUVfSEVBRAkJCQkJKGFzeW5jUXVldWVDb250 cm9sLT5oZWFkKQogI2RlZmluZSBRVUVVRV9UQUlMCQkJCQkoYXN5bmNRdWV1ZUNvbnRyb2wt PnRhaWwpCiAjZGVmaW5lIFFVRVVFX1NUT1BfUEFHRQkJCQkoYXN5bmNRdWV1ZUNvbnRyb2wt PnN0b3BQYWdlKQpAQCAtMzAxLDYgKzM0OSw5IEBAIHN0YXRpYyBBc3luY1F1ZXVlQ29udHJv bCAqYXN5bmNRdWV1ZUNvbnRyb2w7CiAjZGVmaW5lIFFVRVVFX0JBQ0tFTkRfREJPSUQoaSkJ CShhc3luY1F1ZXVlQ29udHJvbC0+YmFja2VuZFtpXS5kYm9pZCkKICNkZWZpbmUgUVVFVUVf TkVYVF9MSVNURU5FUihpKQkJKGFzeW5jUXVldWVDb250cm9sLT5iYWNrZW5kW2ldLm5leHRM aXN0ZW5lcikKICNkZWZpbmUgUVVFVUVfQkFDS0VORF9QT1MoaSkJCShhc3luY1F1ZXVlQ29u dHJvbC0+YmFja2VuZFtpXS5wb3MpCisjZGVmaW5lIFFVRVVFX0JBQ0tFTkRfV0FLRVVQX1BF TkRJTkcoaSkJKGFzeW5jUXVldWVDb250cm9sLT5iYWNrZW5kW2ldLndha2V1cFBlbmRpbmcp CisjZGVmaW5lIFFVRVVFX0JBQ0tFTkRfQURWSVNPUllfUE9TKGkpCShhc3luY1F1ZXVlQ29u dHJvbC0+YmFja2VuZFtpXS5hZHZpc29yeVBvcykKKyNkZWZpbmUgUVVFVUVfQkFDS0VORF9B RFZBTkNJTkdfUE9TKGkpCShhc3luY1F1ZXVlQ29udHJvbC0+YmFja2VuZFtpXS5hZHZhbmNp bmdQb3MpCiAKIC8qCiAgKiBUaGUgU0xSVSBidWZmZXIgYXJlYSB0aHJvdWdoIHdoaWNoIHdl IGFjY2VzcyB0aGUgbm90aWZpY2F0aW9uIHF1ZXVlCkBAIC0zOTEsNiArNDQyLDcgQEAgdHlw ZWRlZiBzdHJ1Y3QgTm90aWZpY2F0aW9uTGlzdAogCWludAkJCW5lc3RpbmdMZXZlbDsJLyog Y3VycmVudCB0cmFuc2FjdGlvbiBuZXN0aW5nIGRlcHRoICovCiAJTGlzdAkgICAqZXZlbnRz OwkJCS8qIGxpc3Qgb2YgTm90aWZpY2F0aW9uIHN0cnVjdHMgKi8KIAlIVEFCCSAgICpoYXNo dGFiOwkJLyogaGFzaCBvZiBOb3RpZmljYXRpb25IYXNoIHN0cnVjdHMsIG9yIE5VTEwgKi8K KwlIVEFCCSAgICpjaGFubmVsSGFzaHRhYjsgLyogaGFzaCBvZiB1bmlxdWUgY2hhbm5lbCBu YW1lcywgb3IgTlVMTCAqLwogCXN0cnVjdCBOb3RpZmljYXRpb25MaXN0ICp1cHBlcjsgLyog ZGV0YWlscyBmb3IgdXBwZXIgdHJhbnNhY3Rpb24gbGV2ZWxzICovCiB9IE5vdGlmaWNhdGlv bkxpc3Q7CiAKQEAgLTQwMSw2ICs0NTMsMTEgQEAgc3RydWN0IE5vdGlmaWNhdGlvbkhhc2gK IAlOb3RpZmljYXRpb24gKmV2ZW50OwkJLyogPT4gdGhlIGFjdHVhbCBOb3RpZmljYXRpb24g c3RydWN0ICovCiB9OwogCitzdHJ1Y3QgQ2hhbm5lbEhhc2gKK3sKKwljaGFyCQljaGFubmVs W05BTUVEQVRBTEVOXTsKK307CisKIHN0YXRpYyBOb3RpZmljYXRpb25MaXN0ICpwZW5kaW5n Tm90aWZpZXMgPSBOVUxMOwogCiAvKgpAQCAtNDE4LDYgKzQ3NSwyMCBAQCBzdGF0aWMgYm9v bCB1bmxpc3RlbkV4aXRSZWdpc3RlcmVkID0gZmFsc2U7CiAvKiBUcnVlIGlmIHdlJ3JlIGN1 cnJlbnRseSByZWdpc3RlcmVkIGFzIGEgbGlzdGVuZXIgaW4gYXN5bmNRdWV1ZUNvbnRyb2wg Ki8KIHN0YXRpYyBib29sIGFtUmVnaXN0ZXJlZExpc3RlbmVyID0gZmFsc2U7CiAKKy8qCisg KiBRdWV1ZSBoZWFkIHBvc2l0aW9ucyBmb3IgZGlyZWN0IGFkdmFuY2VtZW50LgorICogVGhl c2UgYXJlIGNhcHR1cmVkIGR1cmluZyBQcmVDb21taXRfTm90aWZ5IHdoaWxlIGhvbGRpbmcg dGhlIGhlYXZ5d2VpZ2h0CisgKiBsb2NrIG9uIGRhdGFiYXNlIDAsIGVuc3VyaW5nIG5vIG90 aGVyIGJhY2tlbmQgY2FuIGluc2VydCBub3RpZmljYXRpb25zCisgKiBiZXR3ZWVuIHRoZW0u ICBTaWduYWxCYWNrZW5kcyB1c2VzIHRoZXNlIHRvIGFkdmFuY2UgaWRsZSBiYWNrZW5kcy4K KyAqLworc3RhdGljIFF1ZXVlUG9zaXRpb24gcXVldWVIZWFkQmVmb3JlV3JpdGU7CitzdGF0 aWMgUXVldWVQb3NpdGlvbiBxdWV1ZUhlYWRBZnRlcldyaXRlOworCisvKgorICogTGlzdCBv ZiBjaGFubmVscyB3aXRoIHBlbmRpbmcgbm90aWZpY2F0aW9ucyBpbiB0aGUgY3VycmVudCB0 cmFuc2FjdGlvbi4KKyAqLworc3RhdGljIExpc3QgKnBlbmRpbmdOb3RpZnlDaGFubmVscyA9 IE5JTDsKKwogLyogaGF2ZSB3ZSBhZHZhbmNlZCB0byBhIHBhZ2UgdGhhdCdzIGEgbXVsdGlw bGUgb2YgUVVFVUVfQ0xFQU5VUF9ERUxBWT8gKi8KIHN0YXRpYyBib29sIHRyeUFkdmFuY2VU YWlsID0gZmFsc2U7CiAKQEAgLTQ1Nyw2ICs1MjgsOSBAQCBzdGF0aWMgdm9pZCBBZGRFdmVu dFRvUGVuZGluZ05vdGlmaWVzKE5vdGlmaWNhdGlvbiAqbik7CiBzdGF0aWMgdWludDMyIG5v dGlmaWNhdGlvbl9oYXNoKGNvbnN0IHZvaWQgKmtleSwgU2l6ZSBrZXlzaXplKTsKIHN0YXRp YyBpbnQJbm90aWZpY2F0aW9uX21hdGNoKGNvbnN0IHZvaWQgKmtleTEsIGNvbnN0IHZvaWQg KmtleTIsIFNpemUga2V5c2l6ZSk7CiBzdGF0aWMgdm9pZCBDbGVhclBlbmRpbmdBY3Rpb25z QW5kTm90aWZpZXModm9pZCk7CitzdGF0aWMgaW5saW5lIHZvaWQgQ2hhbm5lbEhhc2hQcmVw YXJlS2V5KENoYW5uZWxIYXNoS2V5ICprZXksIE9pZCBkYm9pZCwgY29uc3QgY2hhciAqY2hh bm5lbCk7CitzdGF0aWMgZHNoYXNoX2hhc2ggY2hhbm5lbEhhc2hGdW5jKGNvbnN0IHZvaWQg KmtleSwgc2l6ZV90IHNpemUsIHZvaWQgKmFyZyk7CitzdGF0aWMgdm9pZCBpbml0Q2hhbm5l bEhhc2godm9pZCk7CiAKIC8qCiAgKiBDb21wdXRlIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4g dHdvIHF1ZXVlIHBhZ2UgbnVtYmVycy4KQEAgLTQ3OCw2ICs1NTIsODAgQEAgYXN5bmNRdWV1 ZVBhZ2VQcmVjZWRlcyhpbnQ2NCBwLCBpbnQ2NCBxKQogCXJldHVybiBwIDwgcTsKIH0KIAor LyoKKyAqIGNoYW5uZWxIYXNoRnVuYworICoJCUhhc2ggZnVuY3Rpb24gZm9yIGNoYW5uZWwg a2V5cy4KKyAqLworc3RhdGljIGRzaGFzaF9oYXNoCitjaGFubmVsSGFzaEZ1bmMoY29uc3Qg dm9pZCAqa2V5LCBzaXplX3Qgc2l6ZSwgdm9pZCAqYXJnKQoreworCWNvbnN0IENoYW5uZWxI YXNoS2V5ICprID0gKGNvbnN0IENoYW5uZWxIYXNoS2V5ICopIGtleTsKKwlkc2hhc2hfaGFz aCBoOworCisJaCA9IERhdHVtR2V0VUludDMyKGhhc2hfdWludDMyKGstPmRib2lkKSk7CisJ aCBePSBEYXR1bUdldFVJbnQzMihoYXNoX2FueSgoY29uc3QgdW5zaWduZWQgY2hhciAqKSBr LT5jaGFubmVsLAorCQkJCQkJCQkgc3RybmxlbihrLT5jaGFubmVsLCBOQU1FREFUQUxFTikp KTsKKworCXJldHVybiBoOworfQorCisvKiBwYXJhbWV0ZXJzIGZvciB0aGUgY2hhbm5lbCBo YXNoIHRhYmxlICovCitzdGF0aWMgY29uc3QgZHNoYXNoX3BhcmFtZXRlcnMgY2hhbm5lbERT SFBhcmFtcyA9IHsKKwlzaXplb2YoQ2hhbm5lbEhhc2hLZXkpLAorCXNpemVvZihDaGFubmVs RW50cnkpLAorCWRzaGFzaF9tZW1jbXAsCisJY2hhbm5lbEhhc2hGdW5jLAorCWRzaGFzaF9t ZW1jcHksCisJTFdUUkFOQ0hFX05PVElGWV9DSEFOTkVMX0hBU0gKK307CisKKy8qCisgKiBp bml0Q2hhbm5lbEhhc2gKKyAqCQlMYXp5IGluaXRpYWxpemF0aW9uIG9mIHRoZSBjaGFubmVs IGhhc2ggdGFibGUuCisgKi8KK3N0YXRpYyB2b2lkCitpbml0Q2hhbm5lbEhhc2godm9pZCkK K3sKKwlNZW1vcnlDb250ZXh0IG9sZGNvbnRleHQ7CisKKwkvKiBRdWljayBleGl0IGlmIHdl IGFscmVhZHkgZGlkIHRoaXMgKi8KKwlpZiAoYXN5bmNRdWV1ZUNvbnRyb2wtPmNoYW5uZWxI YXNoRFNIICE9IERTSEFTSF9IQU5ETEVfSU5WQUxJRCAmJgorCQljaGFubmVsSGFzaCAhPSBO VUxMKQorCQlyZXR1cm47CisKKwkvKiBPdGhlcndpc2UsIHVzZSBhIGxvY2sgdG8gZW5zdXJl IG9ubHkgb25lIHByb2Nlc3MgY3JlYXRlcyB0aGUgdGFibGUgKi8KKwlMV0xvY2tBY3F1aXJl KE5vdGlmeVF1ZXVlTG9jaywgTFdfRVhDTFVTSVZFKTsKKworCS8qIEJlIHN1cmUgYW55IGxv Y2FsIG1lbW9yeSBhbGxvY2F0ZWQgYnkgRFNBIHJvdXRpbmVzIGlzIHBlcnNpc3RlbnQgKi8K KwlvbGRjb250ZXh0ID0gTWVtb3J5Q29udGV4dFN3aXRjaFRvKFRvcE1lbW9yeUNvbnRleHQp OworCisJaWYgKGFzeW5jUXVldWVDb250cm9sLT5jaGFubmVsSGFzaERTSCA9PSBEU0hBU0hf SEFORExFX0lOVkFMSUQpCisJeworCQkvKiBJbml0aWFsaXplIGR5bmFtaWMgc2hhcmVkIGhh c2ggdGFibGUgZm9yIGNoYW5uZWwgaGFzaCAqLworCQljaGFubmVsRFNBID0gZHNhX2NyZWF0 ZShMV1RSQU5DSEVfTk9USUZZX0NIQU5ORUxfSEFTSCk7CisJCWRzYV9waW4oY2hhbm5lbERT QSk7CisJCWRzYV9waW5fbWFwcGluZyhjaGFubmVsRFNBKTsKKwkJY2hhbm5lbEhhc2ggPSBk c2hhc2hfY3JlYXRlKGNoYW5uZWxEU0EsICZjaGFubmVsRFNIUGFyYW1zLCBOVUxMKTsKKwor CQkvKiBTdG9yZSBoYW5kbGVzIGluIHNoYXJlZCBtZW1vcnkgZm9yIG90aGVyIGJhY2tlbmRz IHRvIHVzZSAqLworCQlhc3luY1F1ZXVlQ29udHJvbC0+Y2hhbm5lbEhhc2hEU0EgPSBkc2Ff Z2V0X2hhbmRsZShjaGFubmVsRFNBKTsKKwkJYXN5bmNRdWV1ZUNvbnRyb2wtPmNoYW5uZWxI YXNoRFNIID0KKwkJCWRzaGFzaF9nZXRfaGFzaF90YWJsZV9oYW5kbGUoY2hhbm5lbEhhc2gp OworCX0KKwllbHNlIGlmICghY2hhbm5lbEhhc2gpCisJeworCQkvKiBBdHRhY2ggdG8gZXhp c3RpbmcgZHluYW1pYyBzaGFyZWQgaGFzaCB0YWJsZSAqLworCQljaGFubmVsRFNBID0gZHNh X2F0dGFjaChhc3luY1F1ZXVlQ29udHJvbC0+Y2hhbm5lbEhhc2hEU0EpOworCQlkc2FfcGlu X21hcHBpbmcoY2hhbm5lbERTQSk7CisJCWNoYW5uZWxIYXNoID0gZHNoYXNoX2F0dGFjaChj aGFubmVsRFNBLCAmY2hhbm5lbERTSFBhcmFtcywKKwkJCQkJCQkJCWFzeW5jUXVldWVDb250 cm9sLT5jaGFubmVsSGFzaERTSCwKKwkJCQkJCQkJCU5VTEwpOworCX0KKworCU1lbW9yeUNv bnRleHRTd2l0Y2hUbyhvbGRjb250ZXh0KTsKKwlMV0xvY2tSZWxlYXNlKE5vdGlmeVF1ZXVl TG9jayk7Cit9CisKIC8qCiAgKiBSZXBvcnQgc3BhY2UgbmVlZGVkIGZvciBvdXIgc2hhcmVk IG1lbW9yeSBhcmVhCiAgKi8KQEAgLTUyMSwxMiArNjY5LDE4IEBAIEFzeW5jU2htZW1Jbml0 KHZvaWQpCiAJCVFVRVVFX1NUT1BfUEFHRSA9IDA7CiAJCVFVRVVFX0ZJUlNUX0xJU1RFTkVS ID0gSU5WQUxJRF9QUk9DX05VTUJFUjsKIAkJYXN5bmNRdWV1ZUNvbnRyb2wtPmxhc3RRdWV1 ZUZpbGxXYXJuID0gMDsKKwkJYXN5bmNRdWV1ZUNvbnRyb2wtPmNoYW5uZWxIYXNoRFNBID0g RFNBX0hBTkRMRV9JTlZBTElEOworCQlhc3luY1F1ZXVlQ29udHJvbC0+Y2hhbm5lbEhhc2hE U0ggPSBEU0hBU0hfSEFORExFX0lOVkFMSUQ7CisKIAkJZm9yIChpbnQgaSA9IDA7IGkgPCBN YXhCYWNrZW5kczsgaSsrKQogCQl7CiAJCQlRVUVVRV9CQUNLRU5EX1BJRChpKSA9IEludmFs aWRQaWQ7CiAJCQlRVUVVRV9CQUNLRU5EX0RCT0lEKGkpID0gSW52YWxpZE9pZDsKIAkJCVFV RVVFX05FWFRfTElTVEVORVIoaSkgPSBJTlZBTElEX1BST0NfTlVNQkVSOwogCQkJU0VUX1FV RVVFX1BPUyhRVUVVRV9CQUNLRU5EX1BPUyhpKSwgMCwgMCk7CisJCQlTRVRfUVVFVUVfUE9T KFFVRVVFX0JBQ0tFTkRfQURWSVNPUllfUE9TKGkpLCAwLCAwKTsKKwkJCVFVRVVFX0JBQ0tF TkRfV0FLRVVQX1BFTkRJTkcoaSkgPSBmYWxzZTsKKwkJCVFVRVVFX0JBQ0tFTkRfQURWQU5D SU5HX1BPUyhpKSA9IGZhbHNlOwogCQl9CiAJfQogCkBAIC02NTcsNiArODExLDcgQEAgQXN5 bmNfTm90aWZ5KGNvbnN0IGNoYXIgKmNoYW5uZWwsIGNvbnN0IGNoYXIgKnBheWxvYWQpCiAJ CW5vdGlmaWVzLT5ldmVudHMgPSBsaXN0X21ha2UxKG4pOwogCQkvKiBXZSBjZXJ0YWlubHkg ZG9uJ3QgbmVlZCBhIGhhc2h0YWJsZSB5ZXQgKi8KIAkJbm90aWZpZXMtPmhhc2h0YWIgPSBO VUxMOworCQlub3RpZmllcy0+Y2hhbm5lbEhhc2h0YWIgPSBOVUxMOwogCQlub3RpZmllcy0+ dXBwZXIgPSBwZW5kaW5nTm90aWZpZXM7CiAJCXBlbmRpbmdOb3RpZmllcyA9IG5vdGlmaWVz OwogCX0KQEAgLTg5NCw2ICsxMDQ5LDM2IEBAIFByZUNvbW1pdF9Ob3RpZnkodm9pZCkKIAlp ZiAocGVuZGluZ05vdGlmaWVzKQogCXsKIAkJTGlzdENlbGwgICAqbmV4dE5vdGlmeTsKKwkJ Ym9vbAkJZmlyc3RJdGVyYXRpb24gPSB0cnVlOworCisJCS8qCisJCSAqIEJ1aWxkIGxpc3Qg b2YgdW5pcXVlIGNoYW5uZWxzIGZvciBTaWduYWxCYWNrZW5kcygpLgorCQkgKgorCQkgKiBJ ZiB3ZSBoYXZlIGEgY2hhbm5lbEhhc2h0YWIsIHVzZSBpdCB0byBlZmZpY2llbnRseSBnZXQg dGhlIHVuaXF1ZQorCQkgKiBjaGFubmVscy4gIE90aGVyd2lzZSwgZmFsbCBiYWNrIHRvIHRo ZSBsaW5lYXIgYXBwcm9hY2guCisJCSAqLworCQlwZW5kaW5nTm90aWZ5Q2hhbm5lbHMgPSBO SUw7CisJCWlmIChwZW5kaW5nTm90aWZpZXMtPmNoYW5uZWxIYXNodGFiICE9IE5VTEwpCisJ CXsKKwkJCUhBU0hfU0VRX1NUQVRVUyBzdGF0dXM7CisJCQlzdHJ1Y3QgQ2hhbm5lbEhhc2gg KmNoYW5uZWxFbnRyeTsKKworCQkJaGFzaF9zZXFfaW5pdCgmc3RhdHVzLCBwZW5kaW5nTm90 aWZpZXMtPmNoYW5uZWxIYXNodGFiKTsKKwkJCXdoaWxlICgoY2hhbm5lbEVudHJ5ID0gKHN0 cnVjdCBDaGFubmVsSGFzaCAqKSBoYXNoX3NlcV9zZWFyY2goJnN0YXR1cykpICE9IE5VTEwp CisJCQkJcGVuZGluZ05vdGlmeUNoYW5uZWxzID0gbGFwcGVuZChwZW5kaW5nTm90aWZ5Q2hh bm5lbHMsIGNoYW5uZWxFbnRyeS0+Y2hhbm5lbCk7CisJCX0KKwkJZWxzZQorCQl7CisJCQkv KiBMaW5lYXIgYXBwcm9hY2ggZm9yIHNtYWxsIG51bWJlciBvZiBub3RpZmljYXRpb25zICov CisJCQlmb3JlYWNoX3B0cihOb3RpZmljYXRpb24sIG4sIHBlbmRpbmdOb3RpZmllcy0+ZXZl bnRzKQorCQkJeworCQkJCWNoYXIJICAgKmNoYW5uZWwgPSBuLT5kYXRhOworCisJCQkJLyog QWRkIGlmIG5vdCBhbHJlYWR5IGluIGxpc3QgKi8KKwkJCQlpZiAoIWxpc3RfbWVtYmVyX3B0 cihwZW5kaW5nTm90aWZ5Q2hhbm5lbHMsIGNoYW5uZWwpKQorCQkJCQlwZW5kaW5nTm90aWZ5 Q2hhbm5lbHMgPSBsYXBwZW5kKHBlbmRpbmdOb3RpZnlDaGFubmVscywgY2hhbm5lbCk7CisJ CQl9CisJCX0KIAogCQkvKgogCQkgKiBNYWtlIHN1cmUgdGhhdCB3ZSBoYXZlIGFuIFhJRCBh c3NpZ25lZCB0byB0aGUgY3VycmVudCB0cmFuc2FjdGlvbi4KQEAgLTkyMSw2ICsxMTA2LDIx IEBAIFByZUNvbW1pdF9Ob3RpZnkodm9pZCkKIAkJICovCiAJCUxvY2tTaGFyZWRPYmplY3Qo RGF0YWJhc2VSZWxhdGlvbklkLCBJbnZhbGlkT2lkLCAwLAogCQkJCQkJIEFjY2Vzc0V4Y2x1 c2l2ZUxvY2spOworCQkvKgorCQkgKiBGb3IgdGhlIGRpcmVjdCBhZHZhbmNlbWVudCBvcHRp bWl6YXRpb24gaW4gU2lnbmFsQmFja2VuZHMoKSwgd2UKKwkJICogbmVlZCB0byBlbnN1cmUg dGhhdCBubyBvdGhlciBiYWNrZW5kIGNhbiBpbnNlcnQgcXVldWUgZW50cmllcworCQkgKiBi ZXR3ZWVuIHF1ZXVlSGVhZEJlZm9yZVdyaXRlIGFuZCBxdWV1ZUhlYWRBZnRlcldyaXRlLiAg VGhlCisJCSAqIGhlYXZ5d2VpZ2h0IGxvY2sgYWJvdmUgcHJvdmlkZXMgdGhpcyBndWFyYW50 ZWUsIHNpbmNlIGl0IHNlcmlhbGl6ZXMKKwkJICogYWxsIHdyaXRlcnMuCisJCSAqCisJCSAq IE5vdGU6IGlmIHRoZSBoZWF2eXdlaWdodCBsb2NrIHdlcmUgZXZlciByZW1vdmVkIGZvciBz Y2FsYWJpbGl0eQorCQkgKiByZWFzb25zLCB3ZSBjb3VsZCBhY2hpZXZlIHRoZSBzYW1lIGd1 YXJhbnRlZSBieSBob2xkaW5nCisJCSAqIE5vdGlmeVF1ZXVlTG9jayBpbiBFWENMVVNJVkUg bW9kZSBhY3Jvc3MgYWxsIG91ciBpbnNlcnRpb25zLCByYXRoZXIKKwkJICogdGhhbiByZWxl YXNpbmcgYW5kIHJlYWNxdWlyaW5nIGl0IGZvciBlYWNoIHBhZ2UgYXMgd2UgZG8gYmVsb3cu CisJCSAqLworCisJCS8qIEluaXRpYWxpemUgcXVldWVIZWFkQmVmb3JlV3JpdGUgdG8gYSBz YWZlIGRlZmF1bHQgKi8KKwkJU0VUX1FVRVVFX1BPUyhxdWV1ZUhlYWRCZWZvcmVXcml0ZSwg MCwgMCk7CiAKIAkJLyogTm93IHB1c2ggdGhlIG5vdGlmaWNhdGlvbnMgaW50byB0aGUgcXVl dWUgKi8KIAkJbmV4dE5vdGlmeSA9IGxpc3RfaGVhZChwZW5kaW5nTm90aWZpZXMtPmV2ZW50 cyk7CkBAIC05MzksMTIgKzExMzksMjAgQEAgUHJlQ29tbWl0X05vdGlmeSh2b2lkKQogCQkJ ICogcG9pbnQgaW4gdGltZSB3ZSBjYW4gc3RpbGwgcm9sbCB0aGUgdHJhbnNhY3Rpb24gYmFj ay4KIAkJCSAqLwogCQkJTFdMb2NrQWNxdWlyZShOb3RpZnlRdWV1ZUxvY2ssIExXX0VYQ0xV U0lWRSk7CisJCQlpZiAoZmlyc3RJdGVyYXRpb24pCisJCQl7CisJCQkJcXVldWVIZWFkQmVm b3JlV3JpdGUgPSBRVUVVRV9IRUFEOworCQkJCWZpcnN0SXRlcmF0aW9uID0gZmFsc2U7CisJ CQl9CisKIAkJCWFzeW5jUXVldWVGaWxsV2FybmluZygpOwogCQkJaWYgKGFzeW5jUXVldWVJ c0Z1bGwoKSkKIAkJCQllcmVwb3J0KEVSUk9SLAogCQkJCQkJKGVycmNvZGUoRVJSQ09ERV9Q Uk9HUkFNX0xJTUlUX0VYQ0VFREVEKSwKIAkJCQkJCSBlcnJtc2coInRvbyBtYW55IG5vdGlm aWNhdGlvbnMgaW4gdGhlIE5PVElGWSBxdWV1ZSIpKSk7CiAJCQluZXh0Tm90aWZ5ID0gYXN5 bmNRdWV1ZUFkZEVudHJpZXMobmV4dE5vdGlmeSk7CisJCQlxdWV1ZUhlYWRBZnRlcldyaXRl ID0gUVVFVUVfSEVBRDsKKwogCQkJTFdMb2NrUmVsZWFzZShOb3RpZnlRdWV1ZUxvY2spOwog CQl9CiAKQEAgLTExMzUsNiArMTM0MywxMCBAQCBFeGVjX0xpc3RlblByZUNvbW1pdCh2b2lk KQogc3RhdGljIHZvaWQKIEV4ZWNfTGlzdGVuQ29tbWl0KGNvbnN0IGNoYXIgKmNoYW5uZWwp CiB7CisJQ2hhbm5lbEhhc2hLZXkga2V5OworCUNoYW5uZWxFbnRyeSAqZW50cnk7CisJYm9v bAkJZm91bmQ7CisJUHJvY051bWJlciAqbGlzdGVuZXJzOwogCU1lbW9yeUNvbnRleHQgb2xk Y29udGV4dDsKIAogCS8qIERvIG5vdGhpbmcgaWYgd2UgYXJlIGFscmVhZHkgbGlzdGVuaW5n IG9uIHRoaXMgY2hhbm5lbCAqLwpAQCAtMTE1MiwyMSArMTM2NCw4NCBAQCBFeGVjX0xpc3Rl bkNvbW1pdChjb25zdCBjaGFyICpjaGFubmVsKQogCW9sZGNvbnRleHQgPSBNZW1vcnlDb250 ZXh0U3dpdGNoVG8oVG9wTWVtb3J5Q29udGV4dCk7CiAJbGlzdGVuQ2hhbm5lbHMgPSBsYXBw ZW5kKGxpc3RlbkNoYW5uZWxzLCBwc3RyZHVwKGNoYW5uZWwpKTsKIAlNZW1vcnlDb250ZXh0 U3dpdGNoVG8ob2xkY29udGV4dCk7CisKKwkvKiBOb3cgdXBkYXRlIHRoZSBzaGFyZWQgY2hh bm5lbEhhc2ggZm9yIFNpZ25hbEJhY2tlbmRzKCkgdG8gdXNlICovCisJaW5pdENoYW5uZWxI YXNoKCk7CisKKwlDaGFubmVsSGFzaFByZXBhcmVLZXkoJmtleSwgTXlEYXRhYmFzZUlkLCBj aGFubmVsKTsKKworCS8qCisJICogRm9yIG5ldyBlbnRyaWVzLCB3ZSBpbml0aWFsaXplIGxp c3RlbmVyc0FycmF5IHRvIEludmFsaWREc2FQb2ludGVyIGFzIGEKKwkgKiBtYXJrZXIuIFRo aXMgaGFuZGxlcyBib3RoIHRoZSBpbml0aWFsIGNyZWF0aW9uIGFuZCBwb3RlbnRpYWwgcmV0 cnkKKwkgKiBhZnRlciBPT00uCisJICovCisJZW50cnkgPSBkc2hhc2hfZmluZF9vcl9pbnNl cnQoY2hhbm5lbEhhc2gsICZrZXksICZmb3VuZCk7CisKKwlpZiAoIWZvdW5kKQorCQllbnRy eS0+bGlzdGVuZXJzQXJyYXkgPSBJbnZhbGlkRHNhUG9pbnRlcjsKKworCWlmICghRHNhUG9p bnRlcklzVmFsaWQoZW50cnktPmxpc3RlbmVyc0FycmF5KSkKKwl7CisJCS8qIEZpcnN0IGxp c3RlbmVyIGZvciB0aGlzIGNoYW5uZWwgKi8KKwkJZW50cnktPmxpc3RlbmVyc0FycmF5ID0g ZHNhX2FsbG9jYXRlKGNoYW5uZWxEU0EsCisJCQkJCQkJCQkJCSBzaXplb2YoUHJvY051bWJl cikgKiBJTklUSUFMX0xJU1RFTkVSU19BUlJBWV9TSVpFKTsKKwkJZW50cnktPm51bUxpc3Rl bmVycyA9IDA7CisJCWVudHJ5LT5hbGxvY2F0ZWRMaXN0ZW5lcnMgPSBJTklUSUFMX0xJU1RF TkVSU19BUlJBWV9TSVpFOworCX0KKworCWxpc3RlbmVycyA9IChQcm9jTnVtYmVyICopIGRz YV9nZXRfYWRkcmVzcyhjaGFubmVsRFNBLAorCQkJCQkJCQkJCQkgICBlbnRyeS0+bGlzdGVu ZXJzQXJyYXkpOworCisJZm9yIChpbnQgaSA9IDA7IGkgPCBlbnRyeS0+bnVtTGlzdGVuZXJz OyBpKyspCisJeworCQlpZiAobGlzdGVuZXJzW2ldID09IE15UHJvY051bWJlcikKKwkJewor CQkJZHNoYXNoX3JlbGVhc2VfbG9jayhjaGFubmVsSGFzaCwgZW50cnkpOworCQkJcmV0dXJu OwkJCQkvKiBBbHJlYWR5IHJlZ2lzdGVyZWQgKi8KKwkJfQorCX0KKworCWlmIChlbnRyeS0+ bnVtTGlzdGVuZXJzID49IGVudHJ5LT5hbGxvY2F0ZWRMaXN0ZW5lcnMpCisJeworCQlpbnQJ CQluZXdfc2l6ZSA9IGVudHJ5LT5hbGxvY2F0ZWRMaXN0ZW5lcnMgKiAyOworCQlkc2FfcG9p bnRlciBuZXdfYXJyYXkgPSBkc2FfYWxsb2NhdGUoY2hhbm5lbERTQSwKKwkJCQkJCQkJCQkJ IHNpemVvZihQcm9jTnVtYmVyKSAqIG5ld19zaXplKTsKKwkJUHJvY051bWJlciAqbmV3X2xp c3RlbmVycyA9IChQcm9jTnVtYmVyICopIGRzYV9nZXRfYWRkcmVzcyhjaGFubmVsRFNBLAor CQkJCQkJCQkJCQkJCQkJCSAgIG5ld19hcnJheSk7CisKKwkJbWVtY3B5KG5ld19saXN0ZW5l cnMsIGxpc3RlbmVycywKKwkJCSAgIHNpemVvZihQcm9jTnVtYmVyKSAqIGVudHJ5LT5udW1M aXN0ZW5lcnMpOworCisJCWRzYV9mcmVlKGNoYW5uZWxEU0EsIGVudHJ5LT5saXN0ZW5lcnNB cnJheSk7CisJCWVudHJ5LT5saXN0ZW5lcnNBcnJheSA9IG5ld19hcnJheTsKKwkJZW50cnkt PmFsbG9jYXRlZExpc3RlbmVycyA9IG5ld19zaXplOworCQlsaXN0ZW5lcnMgPSBuZXdfbGlz dGVuZXJzOworCX0KKworCWxpc3RlbmVyc1tlbnRyeS0+bnVtTGlzdGVuZXJzXSA9IE15UHJv Y051bWJlcjsKKwllbnRyeS0+bnVtTGlzdGVuZXJzKys7CisKKwlkc2hhc2hfcmVsZWFzZV9s b2NrKGNoYW5uZWxIYXNoLCBlbnRyeSk7CiB9CiAKIC8qCiAgKiBFeGVjX1VubGlzdGVuQ29t bWl0IC0tLSBzdWJyb3V0aW5lIGZvciBBdENvbW1pdF9Ob3RpZnkKICAqCi0gKiBSZW1vdmUg dGhlIHNwZWNpZmllZCBjaGFubmVsIG5hbWUgZnJvbSBsaXN0ZW5DaGFubmVscy4KKyAqCQlV bmxpc3RlbiB0aGUgc3BlY2lmaWVkIGNoYW5uZWwgZm9yIHRoaXMgYmFja2VuZC4KICAqLwog c3RhdGljIHZvaWQKIEV4ZWNfVW5saXN0ZW5Db21taXQoY29uc3QgY2hhciAqY2hhbm5lbCkK IHsKKwlDaGFubmVsSGFzaEtleSBrZXk7CisJQ2hhbm5lbEVudHJ5ICplbnRyeTsKKwlQcm9j TnVtYmVyICpsaXN0ZW5lcnM7CiAJTGlzdENlbGwgICAqcTsKKwlpbnQJCQlpOwogCiAJaWYg KFRyYWNlX25vdGlmeSkKIAkJZWxvZyhERUJVRzEsICJFeGVjX1VubGlzdGVuQ29tbWl0KCVz LCVkKSIsIGNoYW5uZWwsIE15UHJvY1BpZCk7CiAKKwkvKiBSZW1vdmUgZnJvbSBvdXIgbG9j YWwgY2FjaGUgKi8KIAlmb3JlYWNoKHEsIGxpc3RlbkNoYW5uZWxzKQogCXsKIAkJY2hhcgkg ICAqbGNoYW4gPSAoY2hhciAqKSBsZmlyc3QocSk7CkBAIC0xMTc5LDYgKzE0NTQsNDYgQEAg RXhlY19Vbmxpc3RlbkNvbW1pdChjb25zdCBjaGFyICpjaGFubmVsKQogCQl9CiAJfQogCisJ LyogTm93IHJlbW92ZSBmcm9tIHRoZSBzaGFyZWQgY2hhbm5lbEhhc2ggKi8KKwlpZiAoY2hh bm5lbEhhc2ggPT0gTlVMTCkKKwkJcmV0dXJuOworCisJQ2hhbm5lbEhhc2hQcmVwYXJlS2V5 KCZrZXksIE15RGF0YWJhc2VJZCwgY2hhbm5lbCk7CisKKwkvKiBMb29rIHVwIHRoZSBjaGFu bmVsIHdpdGggZXhjbHVzaXZlIGxvY2sgc28gd2UgY2FuIG1vZGlmeSBpdCAqLworCWVudHJ5 ID0gZHNoYXNoX2ZpbmQoY2hhbm5lbEhhc2gsICZrZXksIHRydWUpOworCWlmIChlbnRyeSA9 PSBOVUxMKQorCQlyZXR1cm47CisKKwlsaXN0ZW5lcnMgPSAoUHJvY051bWJlciAqKSBkc2Ff Z2V0X2FkZHJlc3MoY2hhbm5lbERTQSwKKwkJCQkJCQkJCQkJICAgZW50cnktPmxpc3RlbmVy c0FycmF5KTsKKworCWZvciAoaSA9IDA7IGkgPCBlbnRyeS0+bnVtTGlzdGVuZXJzOyBpKysp CisJeworCQlpZiAobGlzdGVuZXJzW2ldID09IE15UHJvY051bWJlcikKKwkJeworCQkJZW50 cnktPm51bUxpc3RlbmVycy0tOworCQkJaWYgKGkgPCBlbnRyeS0+bnVtTGlzdGVuZXJzKQor CQkJCW1lbW1vdmUoJmxpc3RlbmVyc1tpXSwgJmxpc3RlbmVyc1tpICsgMV0sCisJCQkJCQlz aXplb2YoUHJvY051bWJlcikgKiAoZW50cnktPm51bUxpc3RlbmVycyAtIGkpKTsKKworCQkJ aWYgKGVudHJ5LT5udW1MaXN0ZW5lcnMgPT0gMCkKKwkJCXsKKwkJCQkvKiBMYXN0IGxpc3Rl bmVyIGZvciB0aGlzIGNoYW5uZWwgKi8KKwkJCQlkc2FfZnJlZShjaGFubmVsRFNBLCBlbnRy eS0+bGlzdGVuZXJzQXJyYXkpOworCQkJCWRzaGFzaF9kZWxldGVfZW50cnkoY2hhbm5lbEhh c2gsIGVudHJ5KTsKKwkJCX0KKwkJCWVsc2UKKwkJCXsKKwkJCQlkc2hhc2hfcmVsZWFzZV9s b2NrKGNoYW5uZWxIYXNoLCBlbnRyeSk7CisJCQl9CisKKwkJCXJldHVybjsKKwkJfQorCX0K KworCWRzaGFzaF9yZWxlYXNlX2xvY2soY2hhbm5lbEhhc2gsIGVudHJ5KTsKKwogCS8qCiAJ ICogV2UgZG8gbm90IGNvbXBsYWluIGFib3V0IHVubGlzdGVuaW5nIHNvbWV0aGluZyBub3Qg YmVpbmcgbGlzdGVuZWQ7CiAJICogc2hvdWxkIHdlPwpAQCAtMTE5MywxMSArMTUwOCw1MSBA QCBFeGVjX1VubGlzdGVuQ29tbWl0KGNvbnN0IGNoYXIgKmNoYW5uZWwpCiBzdGF0aWMgdm9p ZAogRXhlY19Vbmxpc3RlbkFsbENvbW1pdCh2b2lkKQogeworCWRzaGFzaF9zZXFfc3RhdHVz IHN0YXR1czsKKwlDaGFubmVsRW50cnkgKmVudHJ5OworCiAJaWYgKFRyYWNlX25vdGlmeSkK IAkJZWxvZyhERUJVRzEsICJFeGVjX1VubGlzdGVuQWxsQ29tbWl0KCVkKSIsIE15UHJvY1Bp ZCk7CiAKKwkvKiBDbGVhciBvdXIgbG9jYWwgY2FjaGUgKi8KIAlsaXN0X2ZyZWVfZGVlcChs aXN0ZW5DaGFubmVscyk7CiAJbGlzdGVuQ2hhbm5lbHMgPSBOSUw7CisKKwkvKiBOb3cgcmVt b3ZlIGZyb20gdGhlIHNoYXJlZCBjaGFubmVsSGFzaCAqLworCWlmIChjaGFubmVsSGFzaCA9 PSBOVUxMKQorCQlyZXR1cm47CisKKwlkc2hhc2hfc2VxX2luaXQoJnN0YXR1cywgY2hhbm5l bEhhc2gsIHRydWUpOworCXdoaWxlICgoZW50cnkgPSBkc2hhc2hfc2VxX25leHQoJnN0YXR1 cykpICE9IE5VTEwpCisJeworCQlpZiAoZW50cnktPmtleS5kYm9pZCA9PSBNeURhdGFiYXNl SWQpCisJCXsKKwkJCVByb2NOdW1iZXIgKmxpc3RlbmVyczsKKwkJCWludAkJCWk7CisKKwkJ CWxpc3RlbmVycyA9IChQcm9jTnVtYmVyICopIGRzYV9nZXRfYWRkcmVzcyhjaGFubmVsRFNB LAorCQkJCQkJCQkJCQkJCSAgIGVudHJ5LT5saXN0ZW5lcnNBcnJheSk7CisKKwkJCWZvciAo aSA9IDA7IGkgPCBlbnRyeS0+bnVtTGlzdGVuZXJzOyBpKyspCisJCQl7CisJCQkJaWYgKGxp c3RlbmVyc1tpXSA9PSBNeVByb2NOdW1iZXIpCisJCQkJeworCQkJCQllbnRyeS0+bnVtTGlz dGVuZXJzLS07CisJCQkJCWlmIChpIDwgZW50cnktPm51bUxpc3RlbmVycykKKwkJCQkJCW1l bW1vdmUoJmxpc3RlbmVyc1tpXSwgJmxpc3RlbmVyc1tpICsgMV0sCisJCQkJCQkJCXNpemVv ZihQcm9jTnVtYmVyKSAqIChlbnRyeS0+bnVtTGlzdGVuZXJzIC0gaSkpOworCisJCQkJCWlm IChlbnRyeS0+bnVtTGlzdGVuZXJzID09IDApCisJCQkJCXsKKwkJCQkJCWRzYV9mcmVlKGNo YW5uZWxEU0EsIGVudHJ5LT5saXN0ZW5lcnNBcnJheSk7CisJCQkJCQlkc2hhc2hfZGVsZXRl X2N1cnJlbnQoJnN0YXR1cyk7CisJCQkJCX0KKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJfQor CQl9CisJfQorCWRzaGFzaF9zZXFfdGVybSgmc3RhdHVzKTsKIH0KIAogLyoKQEAgLTEyNDIs NiArMTU5Nyw3IEBAIGFzeW5jUXVldWVVbnJlZ2lzdGVyKHZvaWQpCiAJLyogTWFyayBvdXIg ZW50cnkgYXMgaW52YWxpZCAqLwogCVFVRVVFX0JBQ0tFTkRfUElEKE15UHJvY051bWJlcikg PSBJbnZhbGlkUGlkOwogCVFVRVVFX0JBQ0tFTkRfREJPSUQoTXlQcm9jTnVtYmVyKSA9IElu dmFsaWRPaWQ7CisJUVVFVUVfQkFDS0VORF9XQUtFVVBfUEVORElORyhNeVByb2NOdW1iZXIp ID0gZmFsc2U7CiAJLyogYW5kIHJlbW92ZSBpdCBmcm9tIHRoZSBsaXN0ICovCiAJaWYgKFFV RVVFX0ZJUlNUX0xJU1RFTkVSID09IE15UHJvY051bWJlcikKIAkJUVVFVUVfRklSU1RfTElT VEVORVIgPSBRVUVVRV9ORVhUX0xJU1RFTkVSKE15UHJvY051bWJlcik7CkBAIC0xNTY1LDEy ICsxOTIxLDE1IEBAIGFzeW5jUXVldWVGaWxsV2FybmluZyh2b2lkKQogLyoKICAqIFNlbmQg c2lnbmFscyB0byBsaXN0ZW5pbmcgYmFja2VuZHMuCiAgKgotICogTm9ybWFsbHkgd2Ugc2ln bmFsIG9ubHkgYmFja2VuZHMgaW4gb3VyIG93biBkYXRhYmFzZSwgc2luY2Ugb25seSB0aG9z ZQotICogYmFja2VuZHMgY291bGQgYmUgaW50ZXJlc3RlZCBpbiBub3RpZmllcyB3ZSBzZW5k LiAgSG93ZXZlciwgaWYgdGhlcmUncwotICogbm90aWZ5IHRyYWZmaWMgaW4gb3VyIGRhdGFi YXNlIGJ1dCBubyB0cmFmZmljIGluIGFub3RoZXIgZGF0YWJhc2UgdGhhdAotICogZG9lcyBo YXZlIGxpc3RlbmVyKHMpLCB0aG9zZSBsaXN0ZW5lcnMgd2lsbCBmYWxsIGZ1cnRoZXIgYW5k IGZ1cnRoZXIKLSAqIGJlaGluZC4gIFdha2VuIHRoZW0gYW55d2F5IGlmIHRoZXkncmUgZmFy IGVub3VnaCBiZWhpbmQsIHNvIHRoYXQgdGhleSdsbAotICogYWR2YW5jZSB0aGVpciBxdWV1 ZSBwb3NpdGlvbiBwb2ludGVycywgYWxsb3dpbmcgdGhlIGdsb2JhbCB0YWlsIHRvIGFkdmFu Y2UuCisgKiBOb3JtYWxseSB3ZSBzaWduYWwgb25seSBiYWNrZW5kcyBpbiBvdXIgb3duIGRh dGFiYXNlLCB0aGF0IGFyZQorICogbGlzdGVuaW5nIG9uIHRoZSBjaGFubmVscyB3aXRoIHBl bmRpbmcgbm90aWZpZXMsIHNpbmNlIG9ubHkgdGhvc2UKKyAqIGJhY2tlbmRzIGFyZSBpbnRl cmVzdGVkIGluIG5vdGlmaWVzIHdlIHNlbmQuCisgKgorICogQmFja2VuZHMgdGhhdCBhcmUg a25vd24gdG8gc3RpbGwgYmUgcG9zaXRpb25lZCBhdCB0aGUgcXVldWUgaGVhZAorICogZnJv bSBiZWZvcmUgb3VyIGNvbW1pdCBjYW4gYmUgc2FmZWx5IGFkdmFuY2VkIGRpcmVjdGx5IHRv IHRoZSBuZXcKKyAqIGhlYWQsIHNpbmNlIHRoZSBxdWV1ZSByZWdpb24gd2Ugd3JvdGUgaXMg a25vd24gdG8gY29udGFpbiBvbmx5IG91cgorICogb3duIG5vdGlmaWNhdGlvbnMuICBUaGlz IGF2b2lkcyB1bm5lY2Vzc2FyeSB3YWtldXBzIHdoZW4gdGhlcmUgaXMKKyAqIG5vdGhpbmcg b2YgaW50ZXJlc3QgdG8gdGhlbS4KICAqCiAgKiBTaW5jZSB3ZSBrbm93IHRoZSBQcm9jTnVt YmVyIGFuZCB0aGUgUGlkIHRoZSBzaWduYWxpbmcgaXMgcXVpdGUgY2hlYXAuCiAgKgpAQCAt MTU4Myw2ICsxOTQyLDEzIEBAIFNpZ25hbEJhY2tlbmRzKHZvaWQpCiAJaW50MzIJICAgKnBp ZHM7CiAJUHJvY051bWJlciAqcHJvY25vczsKIAlpbnQJCQljb3VudDsKKwlMaXN0Q2VsbCAg ICpsYzsKKworCS8qCisJICogQXR0YWNoIHRvIHRoZSBjaGFubmVsIGhhc2ggaWYgbmVlZGVk LiAgV2UgbWlnaHQgbm90IGhhdmUgb25lIGlmIHRoaXMKKwkgKiBiYWNrZW5kIGhhc24ndCBk b25lIExJU1RFTiwgYnV0IHdlIG5lZWQgaXQgdG8gZmluZCBsaXN0ZW5lcnMuCisJICovCisJ aW5pdENoYW5uZWxIYXNoKCk7CiAKIAkvKgogCSAqIElkZW50aWZ5IGJhY2tlbmRzIHRoYXQg d2UgbmVlZCB0byBzaWduYWwuICBXZSBkb24ndCB3YW50IHRvIHNlbmQKQEAgLTE1OTcsMzYg KzE5NjMsMTEwIEBAIFNpZ25hbEJhY2tlbmRzKHZvaWQpCiAJY291bnQgPSAwOwogCiAJTFdM b2NrQWNxdWlyZShOb3RpZnlRdWV1ZUxvY2ssIExXX0VYQ0xVU0lWRSk7Ci0JZm9yIChQcm9j TnVtYmVyIGkgPSBRVUVVRV9GSVJTVF9MSVNURU5FUjsgaSAhPSBJTlZBTElEX1BST0NfTlVN QkVSOyBpID0gUVVFVUVfTkVYVF9MSVNURU5FUihpKSkKKwlmb3JlYWNoKGxjLCBwZW5kaW5n Tm90aWZ5Q2hhbm5lbHMpCiAJewotCQlpbnQzMgkJcGlkID0gUVVFVUVfQkFDS0VORF9QSUQo aSk7Ci0JCVF1ZXVlUG9zaXRpb24gcG9zOworCQljaGFyCSAgICpjaGFubmVsID0gKGNoYXIg KikgbGZpcnN0KGxjKTsKKwkJQ2hhbm5lbEVudHJ5ICplbnRyeSA9IE5VTEw7CisJCVByb2NO dW1iZXIgKmxpc3RlbmVyczsKIAotCQlBc3NlcnQocGlkICE9IEludmFsaWRQaWQpOwotCQlw b3MgPSBRVUVVRV9CQUNLRU5EX1BPUyhpKTsKLQkJaWYgKFFVRVVFX0JBQ0tFTkRfREJPSUQo aSkgPT0gTXlEYXRhYmFzZUlkKQorCQlpZiAoY2hhbm5lbEhhc2ggIT0gTlVMTCkKIAkJewot CQkJLyoKLQkJCSAqIEFsd2F5cyBzaWduYWwgbGlzdGVuZXJzIGluIG91ciBvd24gZGF0YWJh c2UsIHVubGVzcyB0aGV5J3JlCi0JCQkgKiBhbHJlYWR5IGNhdWdodCB1cCAodW5saWtlbHks IGJ1dCBwb3NzaWJsZSkuCi0JCQkgKi8KKwkJCUNoYW5uZWxIYXNoS2V5IGtleTsKKworCQkJ Q2hhbm5lbEhhc2hQcmVwYXJlS2V5KCZrZXksIE15RGF0YWJhc2VJZCwgY2hhbm5lbCk7CisJ CQllbnRyeSA9IGRzaGFzaF9maW5kKGNoYW5uZWxIYXNoLCAma2V5LCBmYWxzZSk7CisJCX0K KworCQlpZiAoZW50cnkgPT0gTlVMTCkKKwkJCWNvbnRpbnVlOwkJCS8qIE5vIGxpc3RlbmVy cyByZWdpc3RlcmVkIGZvciB0aGlzIGNoYW5uZWwgKi8KKworCQlsaXN0ZW5lcnMgPSAoUHJv Y051bWJlciAqKSBkc2FfZ2V0X2FkZHJlc3MoY2hhbm5lbERTQSwKKwkJCQkJCQkJCQkJCSAg IGVudHJ5LT5saXN0ZW5lcnNBcnJheSk7CisKKwkJZm9yIChpbnQgaiA9IDA7IGogPCBlbnRy eS0+bnVtTGlzdGVuZXJzOyBqKyspCisJCXsKKwkJCVByb2NOdW1iZXIJaSA9IGxpc3RlbmVy c1tqXTsKKwkJCWludDMyCQlwaWQ7CisJCQlRdWV1ZVBvc2l0aW9uIHBvczsKKworCQkJaWYg KFFVRVVFX0JBQ0tFTkRfV0FLRVVQX1BFTkRJTkcoaSkpCisJCQkJY29udGludWU7CisKKwkJ CXBvcyA9IFFVRVVFX0JBQ0tFTkRfUE9TKGkpOworCQkJcGlkID0gUVVFVUVfQkFDS0VORF9Q SUQoaSk7CisKKwkJCS8qIFNraXAgaWYgY2F1Z2h0IHVwICovCiAJCQlpZiAoUVVFVUVfUE9T X0VRVUFMKHBvcywgUVVFVUVfSEVBRCkpCiAJCQkJY29udGludWU7CisKKwkJCUFzc2VydChw aWQgIT0gSW52YWxpZFBpZCk7CisKKwkJCVFVRVVFX0JBQ0tFTkRfV0FLRVVQX1BFTkRJTkco aSkgPSB0cnVlOworCQkJcGlkc1tjb3VudF0gPSBwaWQ7CisJCQlwcm9jbm9zW2NvdW50XSA9 IGk7CisJCQljb3VudCsrOwogCQl9Ci0JCWVsc2UKKworCQlkc2hhc2hfcmVsZWFzZV9sb2Nr KGNoYW5uZWxIYXNoLCBlbnRyeSk7CisJfQorCisJLyoKKwkgKiBEaXJlY3QgYWR2YW5jZW1l bnQ6IGF2b2lkIHdha2luZyBub24tY2F1Z2h0IHVwIGJhY2tlbmRzIHRoYXQKKwkgKiBhcmVu J3QgaW50ZXJlc3RlZCBpbiBvdXIgbm90aWZpY2F0aW9ucy4KKwkgKi8KKwlpZiAocGVuZGlu Z05vdGlmaWVzICE9IE5VTEwpCisJeworCQlmb3IgKFByb2NOdW1iZXIgaSA9IFFVRVVFX0ZJ UlNUX0xJU1RFTkVSOworCQkJIGkgIT0gSU5WQUxJRF9QUk9DX05VTUJFUjsKKwkJCSBpID0g UVVFVUVfTkVYVF9MSVNURU5FUihpKSkKIAkJewotCQkJLyoKLQkJCSAqIExpc3RlbmVycyBp biBvdGhlciBkYXRhYmFzZXMgc2hvdWxkIGJlIHNpZ25hbGVkIG9ubHkgaWYgdGhleQotCQkJ ICogYXJlIGZhciBiZWhpbmQuCi0JCQkgKi8KLQkJCWlmIChhc3luY1F1ZXVlUGFnZURpZmYo UVVFVUVfUE9TX1BBR0UoUVVFVUVfSEVBRCksCi0JCQkJCQkJCSAgIFFVRVVFX1BPU19QQUdF KHBvcykpIDwgUVVFVUVfQ0xFQU5VUF9ERUxBWSkKKwkJCVF1ZXVlUG9zaXRpb24gcG9zOwor CQkJaW50MzIJCXBpZDsKKwkJCVF1ZXVlUG9zaXRpb24gYWR2aXNvcnlQb3M7CisKKwkJCWlm IChRVUVVRV9CQUNLRU5EX1dBS0VVUF9QRU5ESU5HKGkpKQogCQkJCWNvbnRpbnVlOworCisJ CQlwb3MgPSBRVUVVRV9CQUNLRU5EX1BPUyhpKTsKKwkJCXBpZCA9IFFVRVVFX0JBQ0tFTkRf UElEKGkpOworCQkJYWR2aXNvcnlQb3MgPSBRVUVVRV9CQUNLRU5EX0FEVklTT1JZX1BPUyhp KTsKKworCQkJaWYgKFFVRVVFX1BPU19FUVVBTChwb3MsIHF1ZXVlSGVhZEJlZm9yZVdyaXRl KSkKKwkJCXsKKwkJCQkvKgorCQkJCSAqIFNhZmUgdG8gZGlyZWN0bHkgdXBkYXRlIGEgYmFj a2VuZCdzIHNoYXJlZCBwb3MgaWYgaXQgaXNuJ3QKKwkJCQkgKiBjdXJyZW50bHkgYWR2YW5j aW5nIGl0cyBwb3NpdGlvbi4gIE90aGVyd2lzZSwgc2V0CisJCQkJICogdGhlIGFkdmlzb3J5 IHBvcyBpZiBpdCdzIGJlaGluZCBvdXIgbmV3IHF1ZXVlIGhlYWQuCisJCQkJICovCisJCQkJ aWYgKCFRVUVVRV9CQUNLRU5EX0FEVkFOQ0lOR19QT1MoaSkpCisJCQkJCVFVRVVFX0JBQ0tF TkRfUE9TKGkpID0gcXVldWVIZWFkQWZ0ZXJXcml0ZTsKKwkJCQllbHNlIGlmIChRVUVVRV9Q T1NfUFJFQ0VERVMoYWR2aXNvcnlQb3MsIHF1ZXVlSGVhZEFmdGVyV3JpdGUpKQorCQkJCQlR VUVVRV9CQUNLRU5EX0FEVklTT1JZX1BPUyhpKSA9IHF1ZXVlSGVhZEFmdGVyV3JpdGU7CisJ CQl9CisJCQllbHNlIGlmIChRVUVVRV9QT1NfUFJFQ0VERVMocG9zLCBxdWV1ZUhlYWRCZWZv cmVXcml0ZSkpCisJCQl7CisJCQkJLyoKKwkJCQkgKiBOZWVkIHRvIHNpZ25hbCwgY2Fubm90 IHNraXAgb3Zlciwgc2luY2Ugd2UgZG9uJ3QKKwkJCQkgKiBrbm93IGlmIHRoZSBub3RpZmlj YXRpb25zIGJldHdlZW4gcG9zIGFuZCB0aGUgcXVldWUKKwkJCQkgKiBoZWFkIGJlZm9yZSBv dXIgd3JpdGUgYXJlIG9mIGludGVyZXN0IGZvciB0aGlzCisJCQkJICogYmFja2VuZCBvciBu b3QuCisJCQkJICovCisJCQkJQXNzZXJ0KHBpZCAhPSBJbnZhbGlkUGlkKTsKKworCQkJCVFV RVVFX0JBQ0tFTkRfV0FLRVVQX1BFTkRJTkcoaSkgPSB0cnVlOworCQkJCXBpZHNbY291bnRd ID0gcGlkOworCQkJCXByb2Nub3NbY291bnRdID0gaTsKKwkJCQljb3VudCsrOworCQkJfQor CQkJZWxzZQorCQkJeworCQkJCS8qCisJCQkJICogVGhlIGJhY2tlbmQgaXMgYWxyZWFkeSBh aGVhZCBvZiB0aGUgbm90aWZpY2F0aW9ucworCQkJCSAqIHdlIHdyb3RlLiBObyBuZWVkIHRv IGRvIGFueXRoaW5nLgorCQkJCSAqLworCQkJCUFzc2VydChRVUVVRV9QT1NfUFJFQ0VERVMo cXVldWVIZWFkQmVmb3JlV3JpdGUsIHBvcykpOworCQkJfQogCQl9Ci0JCS8qIE9LLCBuZWVk IHRvIHNpZ25hbCB0aGlzIG9uZSAqLwotCQlwaWRzW2NvdW50XSA9IHBpZDsKLQkJcHJvY25v c1tjb3VudF0gPSBpOwotCQljb3VudCsrOwogCX0KIAlMV0xvY2tSZWxlYXNlKE5vdGlmeVF1 ZXVlTG9jayk7CiAKQEAgLTE4NTEsNiArMjI5MSw3IEBAIHN0YXRpYyB2b2lkCiBhc3luY1F1 ZXVlUmVhZEFsbE5vdGlmaWNhdGlvbnModm9pZCkKIHsKIAl2b2xhdGlsZSBRdWV1ZVBvc2l0 aW9uIHBvczsKKwlRdWV1ZVBvc2l0aW9uIGFkdmlzb3J5UG9zOwogCVF1ZXVlUG9zaXRpb24g aGVhZDsKIAlTbmFwc2hvdAlzbmFwc2hvdDsKIApAQCAtMTg2MSwxOSArMjMwMiwzNCBAQCBh c3luY1F1ZXVlUmVhZEFsbE5vdGlmaWNhdGlvbnModm9pZCkKIAkJQXN5bmNRdWV1ZUVudHJ5 IGFsaWduOwogCX0JCQlwYWdlX2J1ZmZlcjsKIAotCS8qIEZldGNoIGN1cnJlbnQgc3RhdGUg Ki8KKwkvKgorCSAqIEZldGNoIGN1cnJlbnQgc3RhdGUsIGluZGljYXRlIHRvIG90aGVycyB0 aGF0IHdlIGhhdmUgd29rZW4gdXAsCisJICogYW5kIHRoYXQgd2Ugbm93IHdpbGwgYmUgYWR2 YW5jaW5nIG91ciBwb3NpdGlvbi4KKwkgKi8KIAlMV0xvY2tBY3F1aXJlKE5vdGlmeVF1ZXVl TG9jaywgTFdfU0hBUkVEKTsKIAkvKiBBc3NlcnQgY2hlY2tzIHRoYXQgd2UgaGF2ZSBhIHZh bGlkIHN0YXRlIGVudHJ5ICovCiAJQXNzZXJ0KE15UHJvY1BpZCA9PSBRVUVVRV9CQUNLRU5E X1BJRChNeVByb2NOdW1iZXIpKTsKKwlRVUVVRV9CQUNLRU5EX1dBS0VVUF9QRU5ESU5HKE15 UHJvY051bWJlcikgPSBmYWxzZTsKKwlRVUVVRV9CQUNLRU5EX0FEVkFOQ0lOR19QT1MoTXlQ cm9jTnVtYmVyKSA9IHRydWU7CiAJcG9zID0gUVVFVUVfQkFDS0VORF9QT1MoTXlQcm9jTnVt YmVyKTsKKwlhZHZpc29yeVBvcyA9IFFVRVVFX0JBQ0tFTkRfQURWSVNPUllfUE9TKE15UHJv Y051bWJlcik7CiAJaGVhZCA9IFFVRVVFX0hFQUQ7Ci0JTFdMb2NrUmVsZWFzZShOb3RpZnlR dWV1ZUxvY2spOworCisJaWYgKFFVRVVFX1BPU19QUkVDRURFUyhwb3MsIGFkdmlzb3J5UG9z KSkKKwl7CisJCS8qIEFkdmlzb3J5IHBvc2l0aW9uIGlzIGFoZWFkLCB1c2UgaXQgKi8KKwkJ cG9zID0gYWR2aXNvcnlQb3M7CisJCVFVRVVFX0JBQ0tFTkRfUE9TKE15UHJvY051bWJlcikg PSBwb3M7CisJfQogCiAJaWYgKFFVRVVFX1BPU19FUVVBTChwb3MsIGhlYWQpKQogCXsKIAkJ LyogTm90aGluZyB0byBkbywgd2UgaGF2ZSByZWFkIGFsbCBub3RpZmljYXRpb25zIGFscmVh ZHkuICovCisJCVFVRVVFX0JBQ0tFTkRfQURWQU5DSU5HX1BPUyhNeVByb2NOdW1iZXIpID0g ZmFsc2U7CisJCUxXTG9ja1JlbGVhc2UoTm90aWZ5UXVldWVMb2NrKTsKIAkJcmV0dXJuOwog CX0KKwlMV0xvY2tSZWxlYXNlKE5vdGlmeVF1ZXVlTG9jayk7CiAKIAkvKi0tLS0tLS0tLS0K IAkgKiBHZXQgc25hcHNob3Qgd2UnbGwgdXNlIHRvIGRlY2lkZSB3aGljaCB4YWN0cyBhcmUg c3RpbGwgaW4gcHJvZ3Jlc3MuCkBAIC0xOTg3LDcgKzI0NDMsMTUgQEAgYXN5bmNRdWV1ZVJl YWRBbGxOb3RpZmljYXRpb25zKHZvaWQpCiAJewogCQkvKiBVcGRhdGUgc2hhcmVkIHN0YXRl ICovCiAJCUxXTG9ja0FjcXVpcmUoTm90aWZ5UXVldWVMb2NrLCBMV19TSEFSRUQpOwotCQlR VUVVRV9CQUNLRU5EX1BPUyhNeVByb2NOdW1iZXIpID0gcG9zOworCisJCVFVRVVFX0JBQ0tF TkRfQURWQU5DSU5HX1BPUyhNeVByb2NOdW1iZXIpID0gZmFsc2U7CisJCWFkdmlzb3J5UG9z ID0gUVVFVUVfQkFDS0VORF9BRFZJU09SWV9QT1MoTXlQcm9jTnVtYmVyKTsKKworCQlpZiAo UVVFVUVfUE9TX1BSRUNFREVTKHBvcywgYWR2aXNvcnlQb3MpKQorCQkJUVVFVUVfQkFDS0VO RF9QT1MoTXlQcm9jTnVtYmVyKSA9IGFkdmlzb3J5UG9zOworCQllbHNlCisJCQlRVUVVRV9C QUNLRU5EX1BPUyhNeVByb2NOdW1iZXIpID0gcG9zOworCiAJCUxXTG9ja1JlbGVhc2UoTm90 aWZ5UXVldWVMb2NrKTsKIAl9CiAJUEdfRU5EX1RSWSgpOwpAQCAtMjI5MCwxMyArMjc1NCwx NSBAQCBBZGRFdmVudFRvUGVuZGluZ05vdGlmaWVzKE5vdGlmaWNhdGlvbiAqbikKIHsKIAlB c3NlcnQocGVuZGluZ05vdGlmaWVzLT5ldmVudHMgIT0gTklMKTsKIAotCS8qIENyZWF0ZSB0 aGUgaGFzaCB0YWJsZSBpZiBpdCdzIHRpbWUgdG8gKi8KKwkvKiBDcmVhdGUgdGhlIGhhc2gg dGFibGVzIGlmIGl0J3MgdGltZSB0byAqLwogCWlmIChsaXN0X2xlbmd0aChwZW5kaW5nTm90 aWZpZXMtPmV2ZW50cykgPj0gTUlOX0hBU0hBQkxFX05PVElGSUVTICYmCiAJCXBlbmRpbmdO b3RpZmllcy0+aGFzaHRhYiA9PSBOVUxMKQogCXsKIAkJSEFTSENUTAkJaGFzaF9jdGw7CiAJ CUxpc3RDZWxsICAgKmw7CiAKKwkJQXNzZXJ0KHBlbmRpbmdOb3RpZmllcy0+Y2hhbm5lbEhh c2h0YWIgPT0gTlVMTCk7CisKIAkJLyogQ3JlYXRlIHRoZSBoYXNoIHRhYmxlICovCiAJCWhh c2hfY3RsLmtleXNpemUgPSBzaXplb2YoTm90aWZpY2F0aW9uICopOwogCQloYXNoX2N0bC5l bnRyeXNpemUgPSBzaXplb2Yoc3RydWN0IE5vdGlmaWNhdGlvbkhhc2gpOwpAQCAtMjMwOSwx MCArMjc3NSwyMiBAQCBBZGRFdmVudFRvUGVuZGluZ05vdGlmaWVzKE5vdGlmaWNhdGlvbiAq bikKIAkJCQkJCSZoYXNoX2N0bCwKIAkJCQkJCUhBU0hfRUxFTSB8IEhBU0hfRlVOQ1RJT04g fCBIQVNIX0NPTVBBUkUgfCBIQVNIX0NPTlRFWFQpOwogCisJCS8qIENyZWF0ZSB0aGUgY2hh bm5lbCBoYXNoIHRhYmxlICovCisJCW1lbXNldCgmaGFzaF9jdGwsIDAsIHNpemVvZihoYXNo X2N0bCkpOworCQloYXNoX2N0bC5rZXlzaXplID0gTkFNRURBVEFMRU47CisJCWhhc2hfY3Rs LmVudHJ5c2l6ZSA9IHNpemVvZihzdHJ1Y3QgQ2hhbm5lbEhhc2gpOworCQloYXNoX2N0bC5o Y3h0ID0gQ3VyVHJhbnNhY3Rpb25Db250ZXh0OworCQlwZW5kaW5nTm90aWZpZXMtPmNoYW5u ZWxIYXNodGFiID0KKwkJCWhhc2hfY3JlYXRlKCJQZW5kaW5nIE5vdGlmeSBDaGFubmVscyIs CisJCQkJCQk2NEwsCisJCQkJCQkmaGFzaF9jdGwsCisJCQkJCQlIQVNIX0VMRU0gfCBIQVNI X1NUUklOR1MgfCBIQVNIX0NPTlRFWFQpOworCiAJCS8qIEluc2VydCBhbGwgdGhlIGFscmVh ZHktZXhpc3RpbmcgZXZlbnRzICovCiAJCWZvcmVhY2gobCwgcGVuZGluZ05vdGlmaWVzLT5l dmVudHMpCiAJCXsKIAkJCU5vdGlmaWNhdGlvbiAqb2xkbiA9IChOb3RpZmljYXRpb24gKikg bGZpcnN0KGwpOworCQkJY2hhcgkgICAqY2hhbm5lbCA9IG9sZG4tPmRhdGE7CiAJCQlib29s CQlmb3VuZDsKIAogCQkJKHZvaWQpIGhhc2hfc2VhcmNoKHBlbmRpbmdOb3RpZmllcy0+aGFz aHRhYiwKQEAgLTIzMjAsMjIgKzI3OTgsNDIgQEAgQWRkRXZlbnRUb1BlbmRpbmdOb3RpZmll cyhOb3RpZmljYXRpb24gKm4pCiAJCQkJCQkJICAgSEFTSF9FTlRFUiwKIAkJCQkJCQkgICAm Zm91bmQpOwogCQkJQXNzZXJ0KCFmb3VuZCk7CisKKwkJCS8qIEluc2VydCBjaGFubmVsIGlu dG8gY2hhbm5lbEhhc2h0YWIgKi8KKwkJCSh2b2lkKSBoYXNoX3NlYXJjaChwZW5kaW5nTm90 aWZpZXMtPmNoYW5uZWxIYXNodGFiLAorCQkJCQkJCSAgIGNoYW5uZWwsCisJCQkJCQkJICAg SEFTSF9FTlRFUiwKKwkJCQkJCQkgICAmZm91bmQpOworCQkJLyogZm91bmQgbWF5IGJlIHRy dWUgaWYgbXVsdGlwbGUgZXZlbnRzIG9uIHNhbWUgY2hhbm5lbCAqLwogCQl9CiAJfQogCiAJ LyogQWRkIG5ldyBldmVudCB0byB0aGUgbGlzdCwgaW4gb3JkZXIgKi8KIAlwZW5kaW5nTm90 aWZpZXMtPmV2ZW50cyA9IGxhcHBlbmQocGVuZGluZ05vdGlmaWVzLT5ldmVudHMsIG4pOwog Ci0JLyogQWRkIGV2ZW50IHRvIHRoZSBoYXNoIHRhYmxlIGlmIG5lZWRlZCAqLworCS8qIEFk ZCBldmVudCB0byB0aGUgaGFzaCB0YWJsZXMgaWYgbmVlZGVkICovCiAJaWYgKHBlbmRpbmdO b3RpZmllcy0+aGFzaHRhYiAhPSBOVUxMKQogCXsKIAkJYm9vbAkJZm91bmQ7CiAKKwkJQXNz ZXJ0KHBlbmRpbmdOb3RpZmllcy0+Y2hhbm5lbEhhc2h0YWIgIT0gTlVMTCk7CisKIAkJKHZv aWQpIGhhc2hfc2VhcmNoKHBlbmRpbmdOb3RpZmllcy0+aGFzaHRhYiwKIAkJCQkJCSAgICZu LAogCQkJCQkJICAgSEFTSF9FTlRFUiwKIAkJCQkJCSAgICZmb3VuZCk7CiAJCUFzc2VydCgh Zm91bmQpOworCisJCS8qIEFkZCBjaGFubmVsIHRvIGNoYW5uZWxIYXNodGFiICovCisJCXsK KwkJCWNoYXIJICAgKmNoYW5uZWwgPSBuLT5kYXRhOworCisJCQkodm9pZCkgaGFzaF9zZWFy Y2gocGVuZGluZ05vdGlmaWVzLT5jaGFubmVsSGFzaHRhYiwKKwkJCQkJCQkgICBjaGFubmVs LAorCQkJCQkJCSAgIEhBU0hfRU5URVIsCisJCQkJCQkJICAgJmZvdW5kKTsKKwkJCS8qIGZv dW5kIG1heSBiZSB0cnVlIGlmIHdlIGFscmVhZHkgaGF2ZSBhbiBldmVudCBvbiB0aGlzIGNo YW5uZWwgKi8KKwkJfQogCX0KIH0KIApAQCAtMjM3Myw3ICsyODcxLDcgQEAgbm90aWZpY2F0 aW9uX21hdGNoKGNvbnN0IHZvaWQgKmtleTEsIGNvbnN0IHZvaWQgKmtleTIsIFNpemUga2V5 c2l6ZSkKIAlyZXR1cm4gMTsJCQkJCS8qIG5vdCBlcXVhbCAqLwogfQogCi0vKiBDbGVhciB0 aGUgcGVuZGluZ0FjdGlvbnMgYW5kIHBlbmRpbmdOb3RpZmllcyBsaXN0cy4gKi8KKy8qIENs ZWFyIHRoZSBwZW5kaW5nQWN0aW9ucywgcGVuZGluZ05vdGlmaWVzLCBhbmQgcGVuZGluZ05v dGlmeUNoYW5uZWxzIGxpc3RzLiAqLwogc3RhdGljIHZvaWQKIENsZWFyUGVuZGluZ0FjdGlv bnNBbmROb3RpZmllcyh2b2lkKQogewpAQCAtMjM4NSw2ICsyODgzLDcgQEAgQ2xlYXJQZW5k aW5nQWN0aW9uc0FuZE5vdGlmaWVzKHZvaWQpCiAJICovCiAJcGVuZGluZ0FjdGlvbnMgPSBO VUxMOwogCXBlbmRpbmdOb3RpZmllcyA9IE5VTEw7CisJcGVuZGluZ05vdGlmeUNoYW5uZWxz ID0gTklMOwogfQogCiAvKgpAQCAtMjM5NSwzICsyODk0LDE2IEBAIGNoZWNrX25vdGlmeV9i dWZmZXJzKGludCAqbmV3dmFsLCB2b2lkICoqZXh0cmEsIEd1Y1NvdXJjZSBzb3VyY2UpCiB7 CiAJcmV0dXJuIGNoZWNrX3NscnVfYnVmZmVycygibm90aWZ5X2J1ZmZlcnMiLCBuZXd2YWwp OwogfQorCisKKy8qCisgKiBDaGFubmVsSGFzaFByZXBhcmVLZXkKKyAqCQlQcmVwYXJlIGEg Y2hhbm5lbCBrZXkgZm9yIHVzZSBhcyBhIGhhc2gga2V5LgorICovCitzdGF0aWMgaW5saW5l IHZvaWQKK0NoYW5uZWxIYXNoUHJlcGFyZUtleShDaGFubmVsSGFzaEtleSAqa2V5LCBPaWQg ZGJvaWQsIGNvbnN0IGNoYXIgKmNoYW5uZWwpCit7CisJbWVtc2V0KGtleSwgMCwgc2l6ZW9m KENoYW5uZWxIYXNoS2V5KSk7CisJa2V5LT5kYm9pZCA9IGRib2lkOworCXN0cmxjcHkoa2V5 LT5jaGFubmVsLCBjaGFubmVsLCBOQU1FREFUQUxFTik7Cit9CmRpZmYgLS1naXQgYS9zcmMv YmFja2VuZC91dGlscy9hY3Rpdml0eS93YWl0X2V2ZW50X25hbWVzLnR4dCBiL3NyYy9iYWNr ZW5kL3V0aWxzL2FjdGl2aXR5L3dhaXRfZXZlbnRfbmFtZXMudHh0CmluZGV4IDc1NTNmNmVh Y2VmLi5hNGZhZGJkMDc2NyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvdXRpbHMvYWN0aXZp dHkvd2FpdF9ldmVudF9uYW1lcy50eHQKKysrIGIvc3JjL2JhY2tlbmQvdXRpbHMvYWN0aXZp dHkvd2FpdF9ldmVudF9uYW1lcy50eHQKQEAgLTM2Niw2ICszNjYsNyBAQCBTdWJ0cmFuc0J1 ZmZlcgkiV2FpdGluZyBmb3IgSS9PIG9uIGEgc3ViLXRyYW5zYWN0aW9uIFNMUlUgYnVmZmVy LiIKIE11bHRpWGFjdE9mZnNldEJ1ZmZlcgkiV2FpdGluZyBmb3IgSS9PIG9uIGEgbXVsdGl4 YWN0IG9mZnNldCBTTFJVIGJ1ZmZlci4iCiBNdWx0aVhhY3RNZW1iZXJCdWZmZXIJIldhaXRp bmcgZm9yIEkvTyBvbiBhIG11bHRpeGFjdCBtZW1iZXIgU0xSVSBidWZmZXIuIgogTm90aWZ5 QnVmZmVyCSJXYWl0aW5nIGZvciBJL08gb24gYSA8Y29tbWFuZD5OT1RJRlk8L2NvbW1hbmQ+ IG1lc3NhZ2UgU0xSVSBidWZmZXIuIgorTm90aWZ5Q2hhbm5lbEhhc2gJIldhaXRpbmcgdG8g YWNjZXNzIHRoZSA8Y29tbWFuZD5OT1RJRlk8L2NvbW1hbmQ+IGNoYW5uZWwgaGFzaCB0YWJs ZS4iCiBTZXJpYWxCdWZmZXIJIldhaXRpbmcgZm9yIEkvTyBvbiBhIHNlcmlhbGl6YWJsZSB0 cmFuc2FjdGlvbiBjb25mbGljdCBTTFJVIGJ1ZmZlci4iCiBXQUxJbnNlcnQJIldhaXRpbmcg dG8gaW5zZXJ0IFdBTCBkYXRhIGludG8gYSBtZW1vcnkgYnVmZmVyLiIKIEJ1ZmZlckNvbnRl bnQJIldhaXRpbmcgdG8gYWNjZXNzIGEgZGF0YSBwYWdlIGluIG1lbW9yeS4iCmRpZmYgLS1n aXQgYS9zcmMvaW5jbHVkZS9zdG9yYWdlL2x3bG9ja2xpc3QuaCBiL3NyYy9pbmNsdWRlL3N0 b3JhZ2UvbHdsb2NrbGlzdC5oCmluZGV4IDA2YTFmZmQ0YjA4Li4yNzY4ZGRmNDQxNCAxMDA2 NDQKLS0tIGEvc3JjL2luY2x1ZGUvc3RvcmFnZS9sd2xvY2tsaXN0LmgKKysrIGIvc3JjL2lu Y2x1ZGUvc3RvcmFnZS9sd2xvY2tsaXN0LmgKQEAgLTEwMCw2ICsxMDAsNyBAQCBQR19MV0xP Q0tUUkFOQ0hFKFNVQlRSQU5TX0JVRkZFUiwgU3VidHJhbnNCdWZmZXIpCiBQR19MV0xPQ0tU UkFOQ0hFKE1VTFRJWEFDVE9GRlNFVF9CVUZGRVIsIE11bHRpWGFjdE9mZnNldEJ1ZmZlcikK IFBHX0xXTE9DS1RSQU5DSEUoTVVMVElYQUNUTUVNQkVSX0JVRkZFUiwgTXVsdGlYYWN0TWVt YmVyQnVmZmVyKQogUEdfTFdMT0NLVFJBTkNIRShOT1RJRllfQlVGRkVSLCBOb3RpZnlCdWZm ZXIpCitQR19MV0xPQ0tUUkFOQ0hFKE5PVElGWV9DSEFOTkVMX0hBU0gsIE5vdGlmeUNoYW5u ZWxIYXNoKQogUEdfTFdMT0NLVFJBTkNIRShTRVJJQUxfQlVGRkVSLCBTZXJpYWxCdWZmZXIp CiBQR19MV0xPQ0tUUkFOQ0hFKFdBTF9JTlNFUlQsIFdBTEluc2VydCkKIFBHX0xXTE9DS1RS QU5DSEUoQlVGRkVSX0NPTlRFTlQsIEJ1ZmZlckNvbnRlbnQpCmRpZmYgLS1naXQgYS9zcmMv dG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdCBiL3NyYy90b29scy9wZ2luZGVudC90eXBl ZGVmcy5saXN0CmluZGV4IDQzZmUzYmNkNTkzLi5hYTkxYzQ3ZmNiNSAxMDA2NDQKLS0tIGEv c3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QKKysrIGIvc3JjL3Rvb2xzL3BnaW5k ZW50L3R5cGVkZWZzLmxpc3QKQEAgLTQxMiw2ICs0MTIsOCBAQCBDYXRhbG9nSWRNYXBFbnRy eQogQ2F0YWxvZ0luZGV4U3RhdGUKIENoYW5nZVZhck5vZGVzX2NhbGxiYWNrCiBDaGFuZ2VW YXJOb2Rlc19jb250ZXh0CitDaGFubmVsRW50cnkKK0NoYW5uZWxIYXNoS2V5CiBDaGVja1Bv aW50CiBDaGVja1BvaW50U3RtdAogQ2hlY2twb2ludFN0YXRzRGF0YQotLSAKMi41MC4xCgo= --f778e0c9bfbd44eca1869c41f90aeeb2--