Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1vyYMj-000CyW-0w for pgsql-hackers@arkaria.postgresql.org; Fri, 06 Mar 2026 16:49:29 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1vyYMh-0068ZA-1O for pgsql-hackers@arkaria.postgresql.org; Fri, 06 Mar 2026 16:49:27 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1vyYMh-0068Z2-07 for pgsql-hackers@lists.postgresql.org; Fri, 06 Mar 2026 16:49:27 +0000 Received: from lahtoruutu.iki.fi ([185.185.170.37]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.98.2) (envelope-from ) id 1vyYMe-00000001DJl-45Uq for pgsql-hackers@lists.postgresql.org; Fri, 06 Mar 2026 16:49:27 +0000 Received: from [10.0.2.15] (unknown [130.41.208.2]) (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits) key-exchange x25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) (Authenticated sender: hlinnaka) by lahtoruutu.iki.fi (Postfix) with ESMTPSA id 4fSC6q0gvMz49PtL; Fri, 06 Mar 2026 18:49:23 +0200 (EET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=iki.fi; s=lahtoruutu; t=1772815763; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: in-reply-to:in-reply-to:references:references; bh=85Wayd02ssxfZr/x7PUjHK6o5l8tecBc3W6rTsTjQsM=; b=jPEaZgK0CStXcOFF9r0diYOxWHKH5CjwqKy+gjv+RFNcbUE6MpFevc5ua5fVy/88bN69Xd vvYAzqlEuWXkLetA2k1rbR1+eYdSe/kBBlQrMk8pCjevYvhVbddGACEksmuixi++1gBjK5 xH5gcEbjClMSzso1bKHpRC9hLixHLzObKWdWzdauk6FDd14r00/C1F4MikXvmypWDKKAFU RFrOT8cWCKAsNZPp14TtB1joRfn7mOK1qLfDAYlbSOCgru40YrRGK+IlvHofvnUUGxBy11 HsDeU9CFV5qBgHBQDai8YllGNF9cFt5MIi3IHowyJ03crItX3FKAdQrjrvaEEA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=iki.fi; s=lahtoruutu; t=1772815763; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: in-reply-to:in-reply-to:references:references; bh=85Wayd02ssxfZr/x7PUjHK6o5l8tecBc3W6rTsTjQsM=; b=CvLH+5zz+oZst1FXBhemfk4N4tA2DHzioXCAnf4c7nv2pnnS+kwiG3+ezLxmZErEZW2Mu/ ZIXf58B4d2l1HQu3eU3eX99QS3yxgaVkHlcrXIuHa0HW8JH/3AhTCnZiKTWxrIlNjk4PaD 3qK1KM0yHFf87UBy0Qkt2yfQQSzfLtveqKtjpJm6zcEX031FwEJO/irKOCXdnp7v21YsLY iodL51ys8OpfpUsaPLGEU+n41gD3Retd2WQrMPR2r7Fm+TfAp4szKsSz+I61ut1j3bbodT t/cFSI5uzpc00lsHYe0SU3uFhwkz5iDi3v2bHt7wjzPwcIb/iWM8ebtIC7J2rg== ARC-Authentication-Results: i=1; ORIGINATING; auth=pass smtp.auth=hlinnaka smtp.mailfrom=hlinnaka@iki.fi ARC-Seal: i=1; a=rsa-sha256; d=iki.fi; s=lahtoruutu; cv=none; t=1772815763; b=U22TXKs75vQoBl5IOtzxSQdXHRrOQbw1klDN6mfwzS80Eck6/55XzY2Kvjvx9Ie5vDr0gi XmQSeesQ7I5yNjjYghnm/zHkJoO+Fs8j0b9rZFfUOnaZc9VSTWrk4+mMvURiQvInW1lw2f nJYVnJUM+s5o3sbbbLHhZYL33Y/bizjBkHIy4ZCk+rzp78zyWKilPiGWivNHF/wnew51q0 pPvHNzU3PKmfnxlOmZGWTo5kCmksLf4hj232nXzRFR830mMkeXcCjbvGxhWowTs/C9SfgR z+0nBSPtSUDbldY9kn4ZOo4tCneyHtnB+/p+I3XnNJ30WzwWvz6a3SYIZeADhQ== Content-Type: multipart/mixed; boundary="------------06GUYohMUcQ8CuS7BtxV0x2P" Message-ID: Date: Fri, 6 Mar 2026 18:49:22 +0200 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: Rework SLRU I/O errors handle From: Heikki Linnakangas To: =?UTF-8?Q?=C3=81lvaro_Herrera?= Cc: Maxim Orlov , Postgres hackers References: <202603061507.6ynh6qimlcma@alvherre.pgsql> <74f5dc14-29fd-46d9-ba8b-2844328d7bdf@iki.fi> Content-Language: en-US In-Reply-To: List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk This is a multi-part message in MIME format. --------------06GUYohMUcQ8CuS7BtxV0x2P Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit On 06/03/2026 18:38, Heikki Linnakangas wrote: > On 06/03/2026 18:22, Heikki Linnakangas wrote: >> On 06/03/2026 17:33, Álvaro Herrera wrote: >>> The comment added in 0005 is bogus too.  It mentions >>> InvalidTransactionId, >>> but the problem is not that the value is 0 but rather that we get no >>> pointer.  Also, in all other callbacks the pointer is asserted to not be >>> NULL, so why don't we do the same here, and avoid an error message >>> that's not going to help anyone?  I see however that in the patch we're >>> passing a NULL to SlruReportIOError(), which means if you get an IO >>> error with any SLRU other than xact, you're going to get either a crash >>> on the assertion, or (on non-debug builds) a crash on dereferencing the >>> NULL pointer. >> >> Hmm, I thought we could just never pass a NULL pointer, but if a Write >> fails, slru.c has no context where to pull that opaque_data. Perhaps >> we should just not call the callback in that case. >> >> I'm starting to feel that what SlruReportIOError() currently uses as >> the errdetail, could well be the main error message, and the callback >> could provide the errdetail. I.e. swap the errmsg and errdetail we >> have now. That way, we can just leave out the errdetail for Write >> failures. The current errmsg we have for Write failures is pretty bad: >> "ERROR: could not access status of transaction 0". What's currently >> the errdetail, e.g. "Could not read from file \"%s\" at offset %d: >> %m", is a lot more informative. > > Attached version that does that. That version was a little rushed, with wrong message styles etc. leftovers. Sorry about that, here's yet another, more cleaned-up version. - Heikki --------------06GUYohMUcQ8CuS7BtxV0x2P Content-Type: text/x-patch; charset=UTF-8; name="v4-0001-Add-a-callback-for-I-O-error-messages-in-SLRUs.patch" Content-Disposition: attachment; filename*0="v4-0001-Add-a-callback-for-I-O-error-messages-in-SLRUs.patch" Content-Transfer-Encoding: base64 RnJvbSA4Y2U1NWVlNWY1OTU3YzgxMGRhZDlkMGUwNzZkYmZmMzM1NGZmZDQ1IE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBIZWlra2kgTGlubmFrYW5nYXMgPGhlaWtraS5saW5u YWthbmdhc0Bpa2kuZmk+CkRhdGU6IEZyaSwgNiBNYXIgMjAyNiAxODo0NToyMyArMDIwMApT dWJqZWN0OiBbUEFUQ0ggdjQgMS8xXSBBZGQgYSBjYWxsYmFjayBmb3IgSS9PIGVycm9yIG1l c3NhZ2VzIGluIFNMUlVzCk1JTUUtVmVyc2lvbjogMS4wCkNvbnRlbnQtVHlwZTogdGV4dC9w bGFpbjsgY2hhcnNldD1VVEYtOApDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0CgpI aXN0b3JpY2FsbHksIGFsbCBTTFJVcyB3ZXJlIGFkZHJlc3NlZCBieSB0cmFuc2FjdGlvbiBJ RHMsIGJ1dCB0aGF0Cmhhc24ndCBiZWVuIHRydWUgZm9yIGxvbmcgdGltZS4gSG93ZXZlciwg dGhlIGVycm9yIG1lc3NhZ2Ugb24gSS9PCmVycm9yIHN0aWxsIGFsd2F5cyB0YWxrZWQgYWJv dXQgYWNjZXNzaW5nIGEgdHJhbnNhY3Rpb24gSUQuCgpUaGlzIGNvbW1pdCBhZGRzIGEgY2Fs bGJhY2sgdGhhdCBhbGxvdyBzdWJzeXN0ZW1zIHRvIGNvbnN0cnVjdCB0aGVpcgpvd24gZXJy b3IgbWVzc2FnZXMsIHdoaWNoIGNhbiB0aGVuIGNvcnJlY3RseSByZWZlciB0byBhIHRyYW5z YWN0aW9uCklELCBhIG11bHRpeGlkIG9yIHdoYXRldmVyIGVsc2UgaXMgdXNlZCB0byBhZGRy ZXNzIHRoZSBTTFJVLgoKQXV0aG9yOiBNYXhpbSBPcmxvdiA8b3Jsb3ZtZ0BnbWFpbC5jb20+ ClJldmlld2VkLWJ5OiDDgWx2YXJvIEhlcnJlcmEgPGFsdmhlcnJlQGt1cmlsZW11LmRlPgpE aXNjdXNzaW9uOiBodHRwczovL3d3dy5wb3N0Z3Jlc3FsLm9yZy9tZXNzYWdlLWlkL0NBQ0c9 ZXpaWmZ1cmhZVis2NmNldWJ4UUF5V3F2OXZhVWkweW9PNC10NDhPRTV4YzBEUUBtYWlsLmdt YWlsLmNvbQotLS0KIHNyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL2Nsb2cuYyAgICAgICAg ICAgICB8IDE3ICsrKystCiBzcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS9jb21taXRfdHMu YyAgICAgICAgfCAxMyArKystCiBzcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS9tdWx0aXhh Y3QuYyAgICAgICAgfCA0MiArKysrKysrLS0tCiBzcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNh bS9zbHJ1LmMgICAgICAgICAgICAgfCA3NiArKysrKysrKysrLS0tLS0tLS0tCiBzcmMvYmFj a2VuZC9hY2Nlc3MvdHJhbnNhbS9zdWJ0cmFucy5jICAgICAgICAgfCAxNCArKystCiBzcmMv YmFja2VuZC9jb21tYW5kcy9hc3luYy5jICAgICAgICAgICAgICAgICAgfCAyMCArKystLQog c3JjL2JhY2tlbmQvc3RvcmFnZS9sbWdyL3ByZWRpY2F0ZS5jICAgICAgICAgIHwgMTQgKysr LQogc3JjL2luY2x1ZGUvYWNjZXNzL3NscnUuaCAgICAgICAgICAgICAgICAgICAgIHwgMTUg KysrLQogLi4uL21vZHVsZXMvdGVzdF9zbHJ1L2V4cGVjdGVkL3Rlc3Rfc2xydS5vdXQgIHwg IDQgKwogc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X3NscnUvc3FsL3Rlc3Rfc2xydS5zcWwgIHwg IDMgKwogc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X3NscnUvdGVzdF9zbHJ1LS0xLjAuc3FsIHwg IDIgKy0KIHNyYy90ZXN0L21vZHVsZXMvdGVzdF9zbHJ1L3Rlc3Rfc2xydS5jICAgICAgICB8 IDE1ICsrKy0KIDEyIGZpbGVzIGNoYW5nZWQsIDE2OCBpbnNlcnRpb25zKCspLCA2NyBkZWxl dGlvbnMoLSkKCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS9jbG9n LmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS9jbG9nLmMKaW5kZXggYjVjMzhiYmIx NjIuLjllZDdmMmY3NDc3IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNh bS9jbG9nLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0vY2xvZy5jCkBAIC0x MTEsNiArMTExLDcgQEAgc3RhdGljIFNscnVDdGxEYXRhIFhhY3RDdGxEYXRhOwogCiAKIHN0 YXRpYyBib29sIENMT0dQYWdlUHJlY2VkZXMoaW50NjQgcGFnZTEsIGludDY0IHBhZ2UyKTsK K3N0YXRpYyBpbnQJY2xvZ19lcnJkZXRhaWxfZm9yX2lvX2Vycm9yKGNvbnN0IHZvaWQgKm9w YXF1ZV9kYXRhKTsKIHN0YXRpYyB2b2lkIFdyaXRlVHJ1bmNhdGVYbG9nUmVjKGludDY0IHBh Z2VubywgVHJhbnNhY3Rpb25JZCBvbGRlc3RYYWN0LAogCQkJCQkJCQkgT2lkIG9sZGVzdFhh Y3REYik7CiBzdGF0aWMgdm9pZCBUcmFuc2FjdGlvbklkU2V0UGFnZVN0YXR1cyhUcmFuc2Fj dGlvbklkIHhpZCwgaW50IG5zdWJ4aWRzLApAQCAtMzgxLDggKzM4Miw3IEBAIFRyYW5zYWN0 aW9uSWRTZXRQYWdlU3RhdHVzSW50ZXJuYWwoVHJhbnNhY3Rpb25JZCB4aWQsIGludCBuc3Vi eGlkcywKIAkgKiB3cml0ZS1idXN5LCBzaW5jZSB3ZSBkb24ndCBjYXJlIGlmIHRoZSB1cGRh dGUgcmVhY2hlcyBkaXNrIHNvb25lciB0aGFuCiAJICogd2UgdGhpbmsuCiAJICovCi0Jc2xv dG5vID0gU2ltcGxlTHJ1UmVhZFBhZ2UoWGFjdEN0bCwgcGFnZW5vLCAhWExvZ1JlY1B0cklz VmFsaWQobHNuKSwKLQkJCQkJCQkgICB4aWQpOworCXNsb3RubyA9IFNpbXBsZUxydVJlYWRQ YWdlKFhhY3RDdGwsIHBhZ2VubywgIVhMb2dSZWNQdHJJc1ZhbGlkKGxzbiksICZ4aWQpOwog CiAJLyoKIAkgKiBTZXQgdGhlIG1haW4gdHJhbnNhY3Rpb24gaWQsIGlmIGFueS4KQEAgLTc0 Myw3ICs3NDMsNyBAQCBUcmFuc2FjdGlvbklkR2V0U3RhdHVzKFRyYW5zYWN0aW9uSWQgeGlk LCBYTG9nUmVjUHRyICpsc24pCiAKIAkvKiBsb2NrIGlzIGFjcXVpcmVkIGJ5IFNpbXBsZUxy dVJlYWRQYWdlX1JlYWRPbmx5ICovCiAKLQlzbG90bm8gPSBTaW1wbGVMcnVSZWFkUGFnZV9S ZWFkT25seShYYWN0Q3RsLCBwYWdlbm8sIHhpZCk7CisJc2xvdG5vID0gU2ltcGxlTHJ1UmVh ZFBhZ2VfUmVhZE9ubHkoWGFjdEN0bCwgcGFnZW5vLCAmeGlkKTsKIAlieXRlcHRyID0gWGFj dEN0bC0+c2hhcmVkLT5wYWdlX2J1ZmZlcltzbG90bm9dICsgYnl0ZW5vOwogCiAJc3RhdHVz ID0gKCpieXRlcHRyID4+IGJzaGlmdCkgJiBDTE9HX1hBQ1RfQklUTUFTSzsKQEAgLTgwNyw2 ICs4MDcsNyBAQCBDTE9HU2htZW1Jbml0KHZvaWQpCiAJQXNzZXJ0KHRyYW5zYWN0aW9uX2J1 ZmZlcnMgIT0gMCk7CiAKIAlYYWN0Q3RsLT5QYWdlUHJlY2VkZXMgPSBDTE9HUGFnZVByZWNl ZGVzOworCVhhY3RDdGwtPmVycmRldGFpbF9mb3JfaW9fZXJyb3IgPSBjbG9nX2VycmRldGFp bF9mb3JfaW9fZXJyb3I7CiAJU2ltcGxlTHJ1SW5pdChYYWN0Q3RsLCAidHJhbnNhY3Rpb24i LCBDTE9HU2htZW1CdWZmZXJzKCksIENMT0dfTFNOU19QRVJfUEFHRSwKIAkJCQkgICJwZ194 YWN0IiwgTFdUUkFOQ0hFX1hBQ1RfQlVGRkVSLAogCQkJCSAgTFdUUkFOQ0hFX1hBQ1RfU0xS VSwgU1lOQ19IQU5ETEVSX0NMT0csIGZhbHNlKTsKQEAgLTg4Miw3ICs4ODMsNyBAQCBUcmlt Q0xPRyh2b2lkKQogCQlpbnQJCQlzbG90bm87CiAJCWNoYXIJICAgKmJ5dGVwdHI7CiAKLQkJ c2xvdG5vID0gU2ltcGxlTHJ1UmVhZFBhZ2UoWGFjdEN0bCwgcGFnZW5vLCBmYWxzZSwgeGlk KTsKKwkJc2xvdG5vID0gU2ltcGxlTHJ1UmVhZFBhZ2UoWGFjdEN0bCwgcGFnZW5vLCBmYWxz ZSwgJnhpZCk7CiAJCWJ5dGVwdHIgPSBYYWN0Q3RsLT5zaGFyZWQtPnBhZ2VfYnVmZmVyW3Ns b3Rub10gKyBieXRlbm87CiAKIAkJLyogWmVybyBzby1mYXItdW51c2VkIHBvc2l0aW9ucyBp biB0aGUgY3VycmVudCBieXRlICovCkBAIC0xMDMzLDYgKzEwMzQsMTQgQEAgQ0xPR1BhZ2VQ cmVjZWRlcyhpbnQ2NCBwYWdlMSwgaW50NjQgcGFnZTIpCiAJCQlUcmFuc2FjdGlvbklkUHJl Y2VkZXMoeGlkMSwgeGlkMiArIENMT0dfWEFDVFNfUEVSX1BBR0UgLSAxKSk7CiB9CiAKK3N0 YXRpYyBpbnQKK2Nsb2dfZXJyZGV0YWlsX2Zvcl9pb19lcnJvcihjb25zdCB2b2lkICpvcGFx dWVfZGF0YSkKK3sKKwlUcmFuc2FjdGlvbklkIHhpZCA9ICooY29uc3QgVHJhbnNhY3Rpb25J ZCAqKSBvcGFxdWVfZGF0YTsKKworCXJldHVybiBlcnJkZXRhaWwoIkNvdWxkIG5vdCBhY2Nl c3MgY29tbWl0IHN0YXR1cyBvZiB0cmFuc2FjdGlvbiAldS4iLCB4aWQpOworfQorCiAKIC8q CiAgKiBXcml0ZSBhIFRSVU5DQVRFIHhsb2cgcmVjb3JkCmRpZmYgLS1naXQgYS9zcmMvYmFj a2VuZC9hY2Nlc3MvdHJhbnNhbS9jb21taXRfdHMuYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy90 cmFuc2FtL2NvbW1pdF90cy5jCmluZGV4IDZmYTIxNzhmMWRkLi4zNjIxOWRkMTNjYyAxMDA2 NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0vY29tbWl0X3RzLmMKKysrIGIv c3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0vY29tbWl0X3RzLmMKQEAgLTExNSw2ICsxMTUs NyBAQCBzdGF0aWMgdm9pZCBUcmFuc2FjdGlvbklkU2V0Q29tbWl0VHMoVHJhbnNhY3Rpb25J ZCB4aWQsIFRpbWVzdGFtcFR6IHRzLAogCQkJCQkJCQkJIFJlcGxPcmlnaW5JZCBub2RlaWQs IGludCBzbG90bm8pOwogc3RhdGljIHZvaWQgZXJyb3JfY29tbWl0X3RzX2Rpc2FibGVkKHZv aWQpOwogc3RhdGljIGJvb2wgQ29tbWl0VHNQYWdlUHJlY2VkZXMoaW50NjQgcGFnZTEsIGlu dDY0IHBhZ2UyKTsKK3N0YXRpYyBpbnQJY29tbWl0X3RzX2VycmRldGFpbF9mb3JfaW9fZXJy b3IoY29uc3Qgdm9pZCAqb3BhcXVlX2RhdGEpOwogc3RhdGljIHZvaWQgQWN0aXZhdGVDb21t aXRUcyh2b2lkKTsKIHN0YXRpYyB2b2lkIERlYWN0aXZhdGVDb21taXRUcyh2b2lkKTsKIHN0 YXRpYyB2b2lkIFdyaXRlVHJ1bmNhdGVYbG9nUmVjKGludDY0IHBhZ2VubywgVHJhbnNhY3Rp b25JZCBvbGRlc3RYaWQpOwpAQCAtMjI3LDcgKzIyOCw3IEBAIFNldFhpZENvbW1pdFRzSW5Q YWdlKFRyYW5zYWN0aW9uSWQgeGlkLCBpbnQgbnN1YnhpZHMsCiAKIAlMV0xvY2tBY3F1aXJl KGxvY2ssIExXX0VYQ0xVU0lWRSk7CiAKLQlzbG90bm8gPSBTaW1wbGVMcnVSZWFkUGFnZShD b21taXRUc0N0bCwgcGFnZW5vLCB0cnVlLCB4aWQpOworCXNsb3RubyA9IFNpbXBsZUxydVJl YWRQYWdlKENvbW1pdFRzQ3RsLCBwYWdlbm8sIHRydWUsICZ4aWQpOwogCiAJVHJhbnNhY3Rp b25JZFNldENvbW1pdFRzKHhpZCwgdHMsIG5vZGVpZCwgc2xvdG5vKTsKIAlmb3IgKGkgPSAw OyBpIDwgbnN1YnhpZHM7IGkrKykKQEAgLTMzMiw3ICszMzMsNyBAQCBUcmFuc2FjdGlvbklk R2V0Q29tbWl0VHNEYXRhKFRyYW5zYWN0aW9uSWQgeGlkLCBUaW1lc3RhbXBUeiAqdHMsCiAJ fQogCiAJLyogbG9jayBpcyBhY3F1aXJlZCBieSBTaW1wbGVMcnVSZWFkUGFnZV9SZWFkT25s eSAqLwotCXNsb3RubyA9IFNpbXBsZUxydVJlYWRQYWdlX1JlYWRPbmx5KENvbW1pdFRzQ3Rs LCBwYWdlbm8sIHhpZCk7CisJc2xvdG5vID0gU2ltcGxlTHJ1UmVhZFBhZ2VfUmVhZE9ubHko Q29tbWl0VHNDdGwsIHBhZ2VubywgJnhpZCk7CiAJbWVtY3B5KCZlbnRyeSwKIAkJICAgQ29t bWl0VHNDdGwtPnNoYXJlZC0+cGFnZV9idWZmZXJbc2xvdG5vXSArCiAJCSAgIFNpemVPZkNv bW1pdFRpbWVzdGFtcEVudHJ5ICogZW50cnlubywKQEAgLTU1MSw2ICs1NTIsNyBAQCBDb21t aXRUc1NobWVtSW5pdCh2b2lkKQogCUFzc2VydChjb21taXRfdGltZXN0YW1wX2J1ZmZlcnMg IT0gMCk7CiAKIAlDb21taXRUc0N0bC0+UGFnZVByZWNlZGVzID0gQ29tbWl0VHNQYWdlUHJl Y2VkZXM7CisJQ29tbWl0VHNDdGwtPmVycmRldGFpbF9mb3JfaW9fZXJyb3IgPSBjb21taXRf dHNfZXJyZGV0YWlsX2Zvcl9pb19lcnJvcjsKIAlTaW1wbGVMcnVJbml0KENvbW1pdFRzQ3Rs LCAiY29tbWl0X3RpbWVzdGFtcCIsIENvbW1pdFRzU2htZW1CdWZmZXJzKCksIDAsCiAJCQkJ ICAicGdfY29tbWl0X3RzIiwgTFdUUkFOQ0hFX0NPTU1JVFRTX0JVRkZFUiwKIAkJCQkgIExX VFJBTkNIRV9DT01NSVRUU19TTFJVLApAQCAtOTU5LDYgKzk2MSwxMyBAQCBDb21taXRUc1Bh Z2VQcmVjZWRlcyhpbnQ2NCBwYWdlMSwgaW50NjQgcGFnZTIpCiAJCQlUcmFuc2FjdGlvbklk UHJlY2VkZXMoeGlkMSwgeGlkMiArIENPTU1JVF9UU19YQUNUU19QRVJfUEFHRSAtIDEpKTsK IH0KIAorc3RhdGljIGludAorY29tbWl0X3RzX2VycmRldGFpbF9mb3JfaW9fZXJyb3IoY29u c3Qgdm9pZCAqb3BhcXVlX2RhdGEpCit7CisJVHJhbnNhY3Rpb25JZCB4aWQgPSAqKGNvbnN0 IFRyYW5zYWN0aW9uSWQgKikgb3BhcXVlX2RhdGE7CisKKwlyZXR1cm4gZXJyZGV0YWlsKCJD b3VsZCBub3QgYWNjZXNzIGNvbW1pdCB0aW1lc3RhbXAgb2YgdHJhbnNhY3Rpb24gJXUuIiwg eGlkKTsKK30KIAogLyoKICAqIFdyaXRlIGEgVFJVTkNBVEUgeGxvZyByZWNvcmQKZGlmZiAt LWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL211bHRpeGFjdC5jIGIvc3JjL2Jh Y2tlbmQvYWNjZXNzL3RyYW5zYW0vbXVsdGl4YWN0LmMKaW5kZXggOGE1Yzk4MThlZDYuLjJh ZTI1MmZkMDVhIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS9tdWx0 aXhhY3QuYworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS9tdWx0aXhhY3QuYwpA QCAtMzE1LDYgKzMxNSw4IEBAIHN0YXRpYyB2b2lkIG1YYWN0Q2FjaGVQdXQoTXVsdGlYYWN0 SWQgbXVsdGksIGludCBubWVtYmVycywKIC8qIG1hbmFnZW1lbnQgb2YgU0xSVSBpbmZyYXN0 cnVjdHVyZSAqLwogc3RhdGljIGJvb2wgTXVsdGlYYWN0T2Zmc2V0UGFnZVByZWNlZGVzKGlu dDY0IHBhZ2UxLCBpbnQ2NCBwYWdlMik7CiBzdGF0aWMgYm9vbCBNdWx0aVhhY3RNZW1iZXJQ YWdlUHJlY2VkZXMoaW50NjQgcGFnZTEsIGludDY0IHBhZ2UyKTsKK3N0YXRpYyBpbnQJTXVs dGlYYWN0T2Zmc2V0SW9FcnJvckRldGFpbChjb25zdCB2b2lkICpvcGFxdWVfZGF0YSk7Citz dGF0aWMgaW50CU11bHRpWGFjdE1lbWJlcklvRXJyb3JEZXRhaWwoY29uc3Qgdm9pZCAqb3Bh cXVlX2RhdGEpOwogc3RhdGljIHZvaWQgRXh0ZW5kTXVsdGlYYWN0T2Zmc2V0KE11bHRpWGFj dElkIG11bHRpKTsKIHN0YXRpYyB2b2lkIEV4dGVuZE11bHRpWGFjdE1lbWJlcihNdWx0aVhh Y3RPZmZzZXQgb2Zmc2V0LCBpbnQgbm1lbWJlcnMpOwogc3RhdGljIHZvaWQgU2V0T2xkZXN0 T2Zmc2V0KHZvaWQpOwpAQCAtODM2LDcgKzgzOCw3IEBAIFJlY29yZE5ld011bHRpWGFjdChN dWx0aVhhY3RJZCBtdWx0aSwgTXVsdGlYYWN0T2Zmc2V0IG9mZnNldCwKIAkgKiBlbm91Z2gg dGhhdCBhIE11bHRpWGFjdElkIGlzIHJlYWxseSBpbnZvbHZlZC4gIFBlcmhhcHMgc29tZWRh eSB3ZSdsbAogCSAqIHRha2UgdGhlIHRyb3VibGUgdG8gZ2VuZXJhbGl6ZSB0aGUgc2xydS5j IGVycm9yIHJlcG9ydGluZyBjb2RlLgogCSAqLwotCXNsb3RubyA9IFNpbXBsZUxydVJlYWRQ YWdlKE11bHRpWGFjdE9mZnNldEN0bCwgcGFnZW5vLCB0cnVlLCBtdWx0aSk7CisJc2xvdG5v ID0gU2ltcGxlTHJ1UmVhZFBhZ2UoTXVsdGlYYWN0T2Zmc2V0Q3RsLCBwYWdlbm8sIHRydWUs ICZtdWx0aSk7CiAJb2ZmcHRyID0gKE11bHRpWGFjdE9mZnNldCAqKSBNdWx0aVhhY3RPZmZz ZXRDdGwtPnNoYXJlZC0+cGFnZV9idWZmZXJbc2xvdG5vXTsKIAlvZmZwdHIgKz0gZW50cnlu bzsKIApAQCAtODY1LDcgKzg2Nyw3IEBAIFJlY29yZE5ld011bHRpWGFjdChNdWx0aVhhY3RJ ZCBtdWx0aSwgTXVsdGlYYWN0T2Zmc2V0IG9mZnNldCwKIAkJbG9jayA9IFNpbXBsZUxydUdl dEJhbmtMb2NrKE11bHRpWGFjdE9mZnNldEN0bCwgbmV4dF9wYWdlbm8pOwogCQlMV0xvY2tB Y3F1aXJlKGxvY2ssIExXX0VYQ0xVU0lWRSk7CiAKLQkJc2xvdG5vID0gU2ltcGxlTHJ1UmVh ZFBhZ2UoTXVsdGlYYWN0T2Zmc2V0Q3RsLCBuZXh0X3BhZ2VubywgdHJ1ZSwgbmV4dCk7CisJ CXNsb3RubyA9IFNpbXBsZUxydVJlYWRQYWdlKE11bHRpWGFjdE9mZnNldEN0bCwgbmV4dF9w YWdlbm8sIHRydWUsICZuZXh0KTsKIAkJbmV4dF9vZmZwdHIgPSAoTXVsdGlYYWN0T2Zmc2V0 ICopIE11bHRpWGFjdE9mZnNldEN0bC0+c2hhcmVkLT5wYWdlX2J1ZmZlcltzbG90bm9dOwog CQluZXh0X29mZnB0ciArPSBuZXh0X2VudHJ5bm87CiAJfQpAQCAtOTE5LDcgKzkyMSw4IEBA IFJlY29yZE5ld011bHRpWGFjdChNdWx0aVhhY3RJZCBtdWx0aSwgTXVsdGlYYWN0T2Zmc2V0 IG9mZnNldCwKIAkJCQlMV0xvY2tBY3F1aXJlKGxvY2ssIExXX0VYQ0xVU0lWRSk7CiAJCQkJ cHJldmxvY2sgPSBsb2NrOwogCQkJfQotCQkJc2xvdG5vID0gU2ltcGxlTHJ1UmVhZFBhZ2Uo TXVsdGlYYWN0TWVtYmVyQ3RsLCBwYWdlbm8sIHRydWUsIG11bHRpKTsKKwkJCXNsb3RubyA9 IFNpbXBsZUxydVJlYWRQYWdlKE11bHRpWGFjdE1lbWJlckN0bCwgcGFnZW5vLCB0cnVlLAor CQkJCQkJCQkJICAgJm9mZnNldCk7CiAJCQlwcmV2X3BhZ2VubyA9IHBhZ2VubzsKIAkJfQog CkBAIC0xMjQ0LDcgKzEyNDcsNyBAQCBHZXRNdWx0aVhhY3RJZE1lbWJlcnMoTXVsdGlYYWN0 SWQgbXVsdGksIE11bHRpWGFjdE1lbWJlciAqKm1lbWJlcnMsCiAJTFdMb2NrQWNxdWlyZShs b2NrLCBMV19FWENMVVNJVkUpOwogCiAJLyogcmVhZCB0aGlzIG11bHRpJ3Mgb2Zmc2V0ICov Ci0Jc2xvdG5vID0gU2ltcGxlTHJ1UmVhZFBhZ2UoTXVsdGlYYWN0T2Zmc2V0Q3RsLCBwYWdl bm8sIHRydWUsIG11bHRpKTsKKwlzbG90bm8gPSBTaW1wbGVMcnVSZWFkUGFnZShNdWx0aVhh Y3RPZmZzZXRDdGwsIHBhZ2VubywgdHJ1ZSwgJm11bHRpKTsKIAlvZmZwdHIgPSAoTXVsdGlY YWN0T2Zmc2V0ICopIE11bHRpWGFjdE9mZnNldEN0bC0+c2hhcmVkLT5wYWdlX2J1ZmZlcltz bG90bm9dOwogCW9mZnB0ciArPSBlbnRyeW5vOwogCW9mZnNldCA9ICpvZmZwdHI7CkBAIC0x MjgyLDcgKzEyODUsNyBAQCBHZXRNdWx0aVhhY3RJZE1lbWJlcnMoTXVsdGlYYWN0SWQgbXVs dGksIE11bHRpWGFjdE1lbWJlciAqKm1lbWJlcnMsCiAJCQkJTFdMb2NrQWNxdWlyZShuZXds b2NrLCBMV19FWENMVVNJVkUpOwogCQkJCWxvY2sgPSBuZXdsb2NrOwogCQkJfQotCQkJc2xv dG5vID0gU2ltcGxlTHJ1UmVhZFBhZ2UoTXVsdGlYYWN0T2Zmc2V0Q3RsLCBwYWdlbm8sIHRy dWUsIHRtcE1YYWN0KTsKKwkJCXNsb3RubyA9IFNpbXBsZUxydVJlYWRQYWdlKE11bHRpWGFj dE9mZnNldEN0bCwgcGFnZW5vLCB0cnVlLCAmdG1wTVhhY3QpOwogCQl9CiAKIAkJb2ZmcHRy ID0gKE11bHRpWGFjdE9mZnNldCAqKSBNdWx0aVhhY3RPZmZzZXRDdGwtPnNoYXJlZC0+cGFn ZV9idWZmZXJbc2xvdG5vXTsKQEAgLTEzNDcsNyArMTM1MCw4IEBAIEdldE11bHRpWGFjdElk TWVtYmVycyhNdWx0aVhhY3RJZCBtdWx0aSwgTXVsdGlYYWN0TWVtYmVyICoqbWVtYmVycywK IAkJCQlsb2NrID0gbmV3bG9jazsKIAkJCX0KIAotCQkJc2xvdG5vID0gU2ltcGxlTHJ1UmVh ZFBhZ2UoTXVsdGlYYWN0TWVtYmVyQ3RsLCBwYWdlbm8sIHRydWUsIG11bHRpKTsKKwkJCXNs b3RubyA9IFNpbXBsZUxydVJlYWRQYWdlKE11bHRpWGFjdE1lbWJlckN0bCwgcGFnZW5vLCB0 cnVlLAorCQkJCQkJCQkJICAgJm9mZnNldCk7CiAJCQlwcmV2X3BhZ2VubyA9IHBhZ2VubzsK IAkJfQogCkBAIC0xNzc5LDYgKzE3ODMsOSBAQCBNdWx0aVhhY3RTaG1lbUluaXQodm9pZCkK IAlNdWx0aVhhY3RPZmZzZXRDdGwtPlBhZ2VQcmVjZWRlcyA9IE11bHRpWGFjdE9mZnNldFBh Z2VQcmVjZWRlczsKIAlNdWx0aVhhY3RNZW1iZXJDdGwtPlBhZ2VQcmVjZWRlcyA9IE11bHRp WGFjdE1lbWJlclBhZ2VQcmVjZWRlczsKIAorCU11bHRpWGFjdE9mZnNldEN0bC0+ZXJyZGV0 YWlsX2Zvcl9pb19lcnJvciA9IE11bHRpWGFjdE9mZnNldElvRXJyb3JEZXRhaWw7CisJTXVs dGlYYWN0TWVtYmVyQ3RsLT5lcnJkZXRhaWxfZm9yX2lvX2Vycm9yID0gTXVsdGlYYWN0TWVt YmVySW9FcnJvckRldGFpbDsKKwogCVNpbXBsZUxydUluaXQoTXVsdGlYYWN0T2Zmc2V0Q3Rs LAogCQkJCSAgIm11bHRpeGFjdF9vZmZzZXQiLCBtdWx0aXhhY3Rfb2Zmc2V0X2J1ZmZlcnMs IDAsCiAJCQkJICAicGdfbXVsdGl4YWN0L29mZnNldHMiLCBMV1RSQU5DSEVfTVVMVElYQUNU T0ZGU0VUX0JVRkZFUiwKQEAgLTE5MjgsNyArMTkzNSw3IEBAIFRyaW1NdWx0aVhhY3Qodm9p ZCkKIAkJaWYgKGVudHJ5bm8gPT0gMCB8fCBuZXh0TVhhY3QgPT0gRmlyc3RNdWx0aVhhY3RJ ZCkKIAkJCXNsb3RubyA9IFNpbXBsZUxydVplcm9QYWdlKE11bHRpWGFjdE9mZnNldEN0bCwg cGFnZW5vKTsKIAkJZWxzZQotCQkJc2xvdG5vID0gU2ltcGxlTHJ1UmVhZFBhZ2UoTXVsdGlY YWN0T2Zmc2V0Q3RsLCBwYWdlbm8sIHRydWUsIG5leHRNWGFjdCk7CisJCQlzbG90bm8gPSBT aW1wbGVMcnVSZWFkUGFnZShNdWx0aVhhY3RPZmZzZXRDdGwsIHBhZ2VubywgdHJ1ZSwgJm5l eHRNWGFjdCk7CiAJCW9mZnB0ciA9IChNdWx0aVhhY3RPZmZzZXQgKikgTXVsdGlYYWN0T2Zm c2V0Q3RsLT5zaGFyZWQtPnBhZ2VfYnVmZmVyW3Nsb3Rub107CiAJCW9mZnB0ciArPSBlbnRy eW5vOwogCkBAIC0xOTYzLDcgKzE5NzAsNyBAQCBUcmltTXVsdGlYYWN0KHZvaWQpCiAKIAkJ TFdMb2NrQWNxdWlyZShsb2NrLCBMV19FWENMVVNJVkUpOwogCQltZW1iZXJvZmYgPSBNWE9m ZnNldFRvTWVtYmVyT2Zmc2V0KG9mZnNldCk7Ci0JCXNsb3RubyA9IFNpbXBsZUxydVJlYWRQ YWdlKE11bHRpWGFjdE1lbWJlckN0bCwgcGFnZW5vLCB0cnVlLCBvZmZzZXQpOworCQlzbG90 bm8gPSBTaW1wbGVMcnVSZWFkUGFnZShNdWx0aVhhY3RNZW1iZXJDdGwsIHBhZ2VubywgdHJ1 ZSwgJm9mZnNldCk7CiAJCXhpZHB0ciA9IChUcmFuc2FjdGlvbklkICopCiAJCQkoTXVsdGlY YWN0TWVtYmVyQ3RsLT5zaGFyZWQtPnBhZ2VfYnVmZmVyW3Nsb3Rub10gKyBtZW1iZXJvZmYp OwogCkBAIC0yNDk3LDcgKzI1MDQsNyBAQCBmaW5kX211bHRpeGFjdF9zdGFydChNdWx0aVhh Y3RJZCBtdWx0aSwgTXVsdGlYYWN0T2Zmc2V0ICpyZXN1bHQpCiAJCXJldHVybiBmYWxzZTsK IAogCS8qIGxvY2sgaXMgYWNxdWlyZWQgYnkgU2ltcGxlTHJ1UmVhZFBhZ2VfUmVhZE9ubHkg Ki8KLQlzbG90bm8gPSBTaW1wbGVMcnVSZWFkUGFnZV9SZWFkT25seShNdWx0aVhhY3RPZmZz ZXRDdGwsIHBhZ2VubywgbXVsdGkpOworCXNsb3RubyA9IFNpbXBsZUxydVJlYWRQYWdlX1Jl YWRPbmx5KE11bHRpWGFjdE9mZnNldEN0bCwgcGFnZW5vLCAmbXVsdGkpOwogCW9mZnB0ciA9 IChNdWx0aVhhY3RPZmZzZXQgKikgTXVsdGlYYWN0T2Zmc2V0Q3RsLT5zaGFyZWQtPnBhZ2Vf YnVmZmVyW3Nsb3Rub107CiAJb2ZmcHRyICs9IGVudHJ5bm87CiAJb2Zmc2V0ID0gKm9mZnB0 cjsKQEAgLTI4MDgsNiArMjgxNSwyMyBAQCBNdWx0aVhhY3RNZW1iZXJQYWdlUHJlY2VkZXMo aW50NjQgcGFnZTEsIGludDY0IHBhZ2UyKQogCXJldHVybiBwYWdlMSA8IHBhZ2UyOwogfQog CitzdGF0aWMgaW50CitNdWx0aVhhY3RPZmZzZXRJb0Vycm9yRGV0YWlsKGNvbnN0IHZvaWQg Km9wYXF1ZV9kYXRhKQoreworCU11bHRpWGFjdElkIG11bHRpeGlkID0gKihjb25zdCBNdWx0 aVhhY3RJZCAqKSBvcGFxdWVfZGF0YTsKKworCXJldHVybiBlcnJkZXRhaWwoIkNvdWxkIG5v dCBhY2Nlc3Mgb2Zmc2V0IG9mIG11bHRpeGFjdCAldS4iLCBtdWx0aXhpZCk7Cit9CisKK3N0 YXRpYyBpbnQKK011bHRpWGFjdE1lbWJlcklvRXJyb3JEZXRhaWwoY29uc3Qgdm9pZCAqb3Bh cXVlX2RhdGEpCit7CisJTXVsdGlYYWN0T2Zmc2V0IG14b2ZmID0gKihjb25zdCBNdWx0aVhh Y3RPZmZzZXQgKikgb3BhcXVlX2RhdGE7CisKKwlyZXR1cm4gZXJyZGV0YWlsKCJDb3VsZCBu b3QgYWNjZXNzIG11bHRpeGFjdCBtZW1iZXIgYXQgb2Zmc2V0ICUiIFBSSXU2NCAiLiIsCisJ CQkJCSBteG9mZik7Cit9CisKIC8qCiAgKiBEZWNpZGUgd2hpY2ggb2YgdHdvIE11bHRpWGFj dElkcyBpcyBlYXJsaWVyLgogICoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy90 cmFuc2FtL3NscnUuYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL3NscnUuYwppbmRl eCA1NDljN2UzZTY0Yi4uNWQxMjdjYjkxNWUgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2Fj Y2Vzcy90cmFuc2FtL3NscnUuYworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS9z bHJ1LmMKQEAgLTE4MSw3ICsxODEsOCBAQCBzdGF0aWMgdm9pZCBTbHJ1SW50ZXJuYWxXcml0 ZVBhZ2UoU2xydUN0bCBjdGwsIGludCBzbG90bm8sIFNscnVXcml0ZUFsbCBmZGF0YSk7CiBz dGF0aWMgYm9vbCBTbHJ1UGh5c2ljYWxSZWFkUGFnZShTbHJ1Q3RsIGN0bCwgaW50NjQgcGFn ZW5vLCBpbnQgc2xvdG5vKTsKIHN0YXRpYyBib29sIFNscnVQaHlzaWNhbFdyaXRlUGFnZShT bHJ1Q3RsIGN0bCwgaW50NjQgcGFnZW5vLCBpbnQgc2xvdG5vLAogCQkJCQkJCQkgIFNscnVX cml0ZUFsbCBmZGF0YSk7Ci1zdGF0aWMgdm9pZCBTbHJ1UmVwb3J0SU9FcnJvcihTbHJ1Q3Rs IGN0bCwgaW50NjQgcGFnZW5vLCBUcmFuc2FjdGlvbklkIHhpZCk7CitzdGF0aWMgdm9pZCBT bHJ1UmVwb3J0SU9FcnJvcihTbHJ1Q3RsIGN0bCwgaW50NjQgcGFnZW5vLAorCQkJCQkJCSAg Y29uc3Qgdm9pZCAqb3BhcXVlX2RhdGEpOwogc3RhdGljIGludAlTbHJ1U2VsZWN0TFJVUGFn ZShTbHJ1Q3RsIGN0bCwgaW50NjQgcGFnZW5vKTsKIAogc3RhdGljIGJvb2wgU2xydVNjYW5E aXJDYkRlbGV0ZUN1dG9mZihTbHJ1Q3RsIGN0bCwgY2hhciAqZmlsZW5hbWUsCkBAIC01MTUs OCArNTE2LDkgQEAgU2ltcGxlTHJ1V2FpdElPKFNscnVDdGwgY3RsLCBpbnQgc2xvdG5vKQog ICogdGhhdCBtb2RpZmljYXRpb24gb2YgdGhlIHBhZ2UgaXMgc2FmZS4gIElmIHdyaXRlX29r IGlzIGZhbHNlIHRoZW4gd2UKICAqIHdpbGwgbm90IHJldHVybiB0aGUgcGFnZSB1bnRpbCBp dCBpcyBub3QgdW5kZXJnb2luZyBhY3RpdmUgSS9PLgogICoKLSAqIFRoZSBwYXNzZWQtaW4g eGlkIGlzIHVzZWQgb25seSBmb3IgZXJyb3IgcmVwb3J0aW5nLCBhbmQgbWF5IGJlCi0gKiBJ bnZhbGlkVHJhbnNhY3Rpb25JZCBpZiBubyBzcGVjaWZpYyB4aWQgaXMgYXNzb2NpYXRlZCB3 aXRoIHRoZSBhY3Rpb24uCisgKiBPbiBlcnJvciwgdGhlIHBhc3NlZC1pbiAnb3BhcXVlX2Rh dGEnIGlzIHBhc3NlZCB0byB0aGUKKyAqICdlcnJkZXRhaWxfZm9yX2lvX2Vycm9yJyBjYWxs YmFjaywgdG8gcHJvdmlkZSBkZXRhaWxzIG9uIHRoZSBvcGVyYXRpb24gdGhhdAorICogZmFp bGVkLiAgSXQgaXMgb25seSB1c2VkIGZvciBlcnJvciByZXBvcnRpbmcuCiAgKgogICogUmV0 dXJuIHZhbHVlIGlzIHRoZSBzaGFyZWQtYnVmZmVyIHNsb3QgbnVtYmVyIG5vdyBob2xkaW5n IHRoZSBwYWdlLgogICogVGhlIGJ1ZmZlcidzIExSVSBhY2Nlc3MgaW5mbyBpcyB1cGRhdGVk LgpAQCAtNTI1LDcgKzUyNyw3IEBAIFNpbXBsZUxydVdhaXRJTyhTbHJ1Q3RsIGN0bCwgaW50 IHNsb3RubykKICAqLwogaW50CiBTaW1wbGVMcnVSZWFkUGFnZShTbHJ1Q3RsIGN0bCwgaW50 NjQgcGFnZW5vLCBib29sIHdyaXRlX29rLAotCQkJCSAgVHJhbnNhY3Rpb25JZCB4aWQpCisJ CQkJICBjb25zdCB2b2lkICpvcGFxdWVfZGF0YSkKIHsKIAlTbHJ1U2hhcmVkCXNoYXJlZCA9 IGN0bC0+c2hhcmVkOwogCUxXTG9jawkgICAqYmFua2xvY2sgPSBTaW1wbGVMcnVHZXRCYW5r TG9jayhjdGwsIHBhZ2Vubyk7CkBAIC02MDEsNyArNjAzLDcgQEAgU2ltcGxlTHJ1UmVhZFBh Z2UoU2xydUN0bCBjdGwsIGludDY0IHBhZ2VubywgYm9vbCB3cml0ZV9vaywKIAogCQkvKiBO b3cgaXQncyBva2F5IHRvIGVyZXBvcnQgaWYgd2UgZmFpbGVkICovCiAJCWlmICghb2spCi0J CQlTbHJ1UmVwb3J0SU9FcnJvcihjdGwsIHBhZ2VubywgeGlkKTsKKwkJCVNscnVSZXBvcnRJ T0Vycm9yKGN0bCwgcGFnZW5vLCBvcGFxdWVfZGF0YSk7CiAKIAkJU2xydVJlY2VudGx5VXNl ZChzaGFyZWQsIHNsb3Rubyk7CiAKQEAgLTYxNyw4ICs2MTksOSBAQCBTaW1wbGVMcnVSZWFk UGFnZShTbHJ1Q3RsIGN0bCwgaW50NjQgcGFnZW5vLCBib29sIHdyaXRlX29rLAogICogVGhl IHBhZ2UgbnVtYmVyIG11c3QgY29ycmVzcG9uZCB0byBhbiBhbHJlYWR5LWluaXRpYWxpemVk IHBhZ2UuCiAgKiBUaGUgY2FsbGVyIG11c3QgaW50ZW5kIG9ubHkgcmVhZC1vbmx5IGFjY2Vz cyB0byB0aGUgcGFnZS4KICAqCi0gKiBUaGUgcGFzc2VkLWluIHhpZCBpcyB1c2VkIG9ubHkg Zm9yIGVycm9yIHJlcG9ydGluZywgYW5kIG1heSBiZQotICogSW52YWxpZFRyYW5zYWN0aW9u SWQgaWYgbm8gc3BlY2lmaWMgeGlkIGlzIGFzc29jaWF0ZWQgd2l0aCB0aGUgYWN0aW9uLgor ICogT24gZXJyb3IsIHRoZSBwYXNzZWQtaW4gJ29wYXF1ZV9kYXRhJyBpcyBwYXNzZWQgdG8g dGhlCisgKiAnZXJyZGV0YWlsX2Zvcl9pb19lcnJvcicgY2FsbGJhY2ssIHRvIHByb3ZpZGUg ZGV0YWlscyBvbiB0aGUgb3BlcmF0aW9uIHRoYXQKKyAqIGZhaWxlZC4gIEl0IGlzIG9ubHkg dXNlZCBmb3IgZXJyb3IgcmVwb3J0aW5nLgogICoKICAqIFJldHVybiB2YWx1ZSBpcyB0aGUg c2hhcmVkLWJ1ZmZlciBzbG90IG51bWJlciBub3cgaG9sZGluZyB0aGUgcGFnZS4KICAqIFRo ZSBidWZmZXIncyBMUlUgYWNjZXNzIGluZm8gaXMgdXBkYXRlZC4KQEAgLTYyNyw3ICs2MzAs NyBAQCBTaW1wbGVMcnVSZWFkUGFnZShTbHJ1Q3RsIGN0bCwgaW50NjQgcGFnZW5vLCBib29s IHdyaXRlX29rLAogICogSXQgaXMgdW5zcGVjaWZpZWQgd2hldGhlciB0aGUgbG9jayB3aWxs IGJlIHNoYXJlZCBvciBleGNsdXNpdmUuCiAgKi8KIGludAotU2ltcGxlTHJ1UmVhZFBhZ2Vf UmVhZE9ubHkoU2xydUN0bCBjdGwsIGludDY0IHBhZ2VubywgVHJhbnNhY3Rpb25JZCB4aWQp CitTaW1wbGVMcnVSZWFkUGFnZV9SZWFkT25seShTbHJ1Q3RsIGN0bCwgaW50NjQgcGFnZW5v LCBjb25zdCB2b2lkICpvcGFxdWVfZGF0YSkKIHsKIAlTbHJ1U2hhcmVkCXNoYXJlZCA9IGN0 bC0+c2hhcmVkOwogCUxXTG9jawkgICAqYmFua2xvY2sgPSBTaW1wbGVMcnVHZXRCYW5rTG9j ayhjdGwsIHBhZ2Vubyk7CkBAIC02NTksNyArNjYyLDcgQEAgU2ltcGxlTHJ1UmVhZFBhZ2Vf UmVhZE9ubHkoU2xydUN0bCBjdGwsIGludDY0IHBhZ2VubywgVHJhbnNhY3Rpb25JZCB4aWQp CiAJTFdMb2NrUmVsZWFzZShiYW5rbG9jayk7CiAJTFdMb2NrQWNxdWlyZShiYW5rbG9jaywg TFdfRVhDTFVTSVZFKTsKIAotCXJldHVybiBTaW1wbGVMcnVSZWFkUGFnZShjdGwsIHBhZ2Vu bywgdHJ1ZSwgeGlkKTsKKwlyZXR1cm4gU2ltcGxlTHJ1UmVhZFBhZ2UoY3RsLCBwYWdlbm8s IHRydWUsIG9wYXF1ZV9kYXRhKTsKIH0KIAogLyoKQEAgLTczOSw3ICs3NDIsNyBAQCBTbHJ1 SW50ZXJuYWxXcml0ZVBhZ2UoU2xydUN0bCBjdGwsIGludCBzbG90bm8sIFNscnVXcml0ZUFs bCBmZGF0YSkKIAogCS8qIE5vdyBpdCdzIG9rYXkgdG8gZXJlcG9ydCBpZiB3ZSBmYWlsZWQg Ki8KIAlpZiAoIW9rKQotCQlTbHJ1UmVwb3J0SU9FcnJvcihjdGwsIHBhZ2VubywgSW52YWxp ZFRyYW5zYWN0aW9uSWQpOworCQlTbHJ1UmVwb3J0SU9FcnJvcihjdGwsIHBhZ2VubywgTlVM TCk7CiAKIAkvKiBJZiBwYXJ0IG9mIGEgY2hlY2twb2ludCwgY291bnQgdGhpcyBhcyBhIFNM UlUgYnVmZmVyIHdyaXR0ZW4uICovCiAJaWYgKGZkYXRhKQpAQCAtNzkzLDE0ICs3OTYsMTQg QEAgU2ltcGxlTHJ1RG9lc1BoeXNpY2FsUGFnZUV4aXN0KFNscnVDdGwgY3RsLCBpbnQ2NCBw YWdlbm8pCiAJCS8qIHJlcG9ydCBlcnJvciBub3JtYWxseSAqLwogCQlzbHJ1X2VycmNhdXNl ID0gU0xSVV9PUEVOX0ZBSUxFRDsKIAkJc2xydV9lcnJubyA9IGVycm5vOwotCQlTbHJ1UmVw b3J0SU9FcnJvcihjdGwsIHBhZ2VubywgMCk7CisJCVNscnVSZXBvcnRJT0Vycm9yKGN0bCwg cGFnZW5vLCBOVUxMKTsKIAl9CiAKIAlpZiAoKGVuZHBvcyA9IGxzZWVrKGZkLCAwLCBTRUVL X0VORCkpIDwgMCkKIAl7CiAJCXNscnVfZXJyY2F1c2UgPSBTTFJVX1NFRUtfRkFJTEVEOwog CQlzbHJ1X2Vycm5vID0gZXJybm87Ci0JCVNscnVSZXBvcnRJT0Vycm9yKGN0bCwgcGFnZW5v LCAwKTsKKwkJU2xydVJlcG9ydElPRXJyb3IoY3RsLCBwYWdlbm8sIE5VTEwpOwogCX0KIAog CXJlc3VsdCA9IGVuZHBvcyA+PSAob2ZmX3QpIChvZmZzZXQgKyBCTENLU1opOwpAQCAtMTA3 MCw3ICsxMDczLDcgQEAgU2xydVBoeXNpY2FsV3JpdGVQYWdlKFNscnVDdGwgY3RsLCBpbnQ2 NCBwYWdlbm8sIGludCBzbG90bm8sIFNscnVXcml0ZUFsbCBmZGF0YSkKICAqIFNscnVQaHlz aWNhbFdyaXRlUGFnZS4gIENhbGwgdGhpcyBhZnRlciBjbGVhbmluZyB1cCBzaGFyZWQtbWVt b3J5IHN0YXRlLgogICovCiBzdGF0aWMgdm9pZAotU2xydVJlcG9ydElPRXJyb3IoU2xydUN0 bCBjdGwsIGludDY0IHBhZ2VubywgVHJhbnNhY3Rpb25JZCB4aWQpCitTbHJ1UmVwb3J0SU9F cnJvcihTbHJ1Q3RsIGN0bCwgaW50NjQgcGFnZW5vLCBjb25zdCB2b2lkICpvcGFxdWVfZGF0 YSkKIHsKIAlpbnQ2NAkJc2Vnbm8gPSBwYWdlbm8gLyBTTFJVX1BBR0VTX1BFUl9TRUdNRU5U OwogCWludAkJCXJwYWdlbm8gPSBwYWdlbm8gJSBTTFJVX1BBR0VTX1BFUl9TRUdNRU5UOwpA QCAtMTA4NCw1NCArMTA4Nyw1NSBAQCBTbHJ1UmVwb3J0SU9FcnJvcihTbHJ1Q3RsIGN0bCwg aW50NjQgcGFnZW5vLCBUcmFuc2FjdGlvbklkIHhpZCkKIAkJY2FzZSBTTFJVX09QRU5fRkFJ TEVEOgogCQkJZXJlcG9ydChFUlJPUiwKIAkJCQkJKGVycmNvZGVfZm9yX2ZpbGVfYWNjZXNz KCksCi0JCQkJCSBlcnJtc2coImNvdWxkIG5vdCBhY2Nlc3Mgc3RhdHVzIG9mIHRyYW5zYWN0 aW9uICV1IiwgeGlkKSwKLQkJCQkJIGVycmRldGFpbCgiQ291bGQgbm90IG9wZW4gZmlsZSBc IiVzXCI6ICVtLiIsIHBhdGgpKSk7CisJCQkJCSBlcnJtc2coImNvdWxkIG5vdCBvcGVuIGZp bGUgXCIlc1wiOiAlbSIsIHBhdGgpLAorCQkJCQkgb3BhcXVlX2RhdGEgPyBjdGwtPmVycmRl dGFpbF9mb3JfaW9fZXJyb3Iob3BhcXVlX2RhdGEpIDogMCkpOwogCQkJYnJlYWs7CiAJCWNh c2UgU0xSVV9TRUVLX0ZBSUxFRDoKIAkJCWVyZXBvcnQoRVJST1IsCiAJCQkJCShlcnJjb2Rl X2Zvcl9maWxlX2FjY2VzcygpLAotCQkJCQkgZXJybXNnKCJjb3VsZCBub3QgYWNjZXNzIHN0 YXR1cyBvZiB0cmFuc2FjdGlvbiAldSIsIHhpZCksCi0JCQkJCSBlcnJkZXRhaWwoIkNvdWxk IG5vdCBzZWVrIGluIGZpbGUgXCIlc1wiIHRvIG9mZnNldCAlZDogJW0uIiwKLQkJCQkJCQkg ICBwYXRoLCBvZmZzZXQpKSk7CisJCQkJCSBlcnJtc2coImNvdWxkIG5vdCBzZWVrIGluIGZp bGUgXCIlc1wiIHRvIG9mZnNldCAlZDogJW0iLAorCQkJCQkJCXBhdGgsIG9mZnNldCksCisJ CQkJCSBvcGFxdWVfZGF0YSA/IGN0bC0+ZXJyZGV0YWlsX2Zvcl9pb19lcnJvcihvcGFxdWVf ZGF0YSkgOiAwKSk7CiAJCQlicmVhazsKIAkJY2FzZSBTTFJVX1JFQURfRkFJTEVEOgogCQkJ aWYgKGVycm5vKQogCQkJCWVyZXBvcnQoRVJST1IsCiAJCQkJCQkoZXJyY29kZV9mb3JfZmls ZV9hY2Nlc3MoKSwKLQkJCQkJCSBlcnJtc2coImNvdWxkIG5vdCBhY2Nlc3Mgc3RhdHVzIG9m IHRyYW5zYWN0aW9uICV1IiwgeGlkKSwKLQkJCQkJCSBlcnJkZXRhaWwoIkNvdWxkIG5vdCBy ZWFkIGZyb20gZmlsZSBcIiVzXCIgYXQgb2Zmc2V0ICVkOiAlbS4iLAotCQkJCQkJCQkgICBw YXRoLCBvZmZzZXQpKSk7CisJCQkJCQkgZXJybXNnKCJjb3VsZCBub3QgcmVhZCBmcm9tIGZp bGUgXCIlc1wiIGF0IG9mZnNldCAlZDogJW0iLAorCQkJCQkJCQlwYXRoLCBvZmZzZXQpLAor CQkJCQkJIG9wYXF1ZV9kYXRhID8gY3RsLT5lcnJkZXRhaWxfZm9yX2lvX2Vycm9yKG9wYXF1 ZV9kYXRhKSA6IDApKTsKIAkJCWVsc2UKIAkJCQllcmVwb3J0KEVSUk9SLAotCQkJCQkJKGVy cm1zZygiY291bGQgbm90IGFjY2VzcyBzdGF0dXMgb2YgdHJhbnNhY3Rpb24gJXUiLCB4aWQp LAotCQkJCQkJIGVycmRldGFpbCgiQ291bGQgbm90IHJlYWQgZnJvbSBmaWxlIFwiJXNcIiBh dCBvZmZzZXQgJWQ6IHJlYWQgdG9vIGZldyBieXRlcy4iLCBwYXRoLCBvZmZzZXQpKSk7CisJ CQkJCQkoZXJybXNnKCJjb3VsZCBub3QgcmVhZCBmcm9tIGZpbGUgXCIlc1wiIGF0IG9mZnNl dCAlZDogcmVhZCB0b28gZmV3IGJ5dGVzIiwKKwkJCQkJCQkJcGF0aCwgb2Zmc2V0KSwKKwkJ CQkJCSBvcGFxdWVfZGF0YSA/IGN0bC0+ZXJyZGV0YWlsX2Zvcl9pb19lcnJvcihvcGFxdWVf ZGF0YSkgOiAwKSk7CiAJCQlicmVhazsKIAkJY2FzZSBTTFJVX1dSSVRFX0ZBSUxFRDoKIAkJ CWlmIChlcnJubykKIAkJCQllcmVwb3J0KEVSUk9SLAogCQkJCQkJKGVycmNvZGVfZm9yX2Zp bGVfYWNjZXNzKCksCi0JCQkJCQkgZXJybXNnKCJjb3VsZCBub3QgYWNjZXNzIHN0YXR1cyBv ZiB0cmFuc2FjdGlvbiAldSIsIHhpZCksCi0JCQkJCQkgZXJyZGV0YWlsKCJDb3VsZCBub3Qg d3JpdGUgdG8gZmlsZSBcIiVzXCIgYXQgb2Zmc2V0ICVkOiAlbS4iLAotCQkJCQkJCQkgICBw YXRoLCBvZmZzZXQpKSk7CisJCQkJCQkgZXJybXNnKCJDb3VsZCBub3Qgd3JpdGUgdG8gZmls ZSBcIiVzXCIgYXQgb2Zmc2V0ICVkOiAlbSIsCisJCQkJCQkJCXBhdGgsIG9mZnNldCksCisJ CQkJCQkgb3BhcXVlX2RhdGEgPyBjdGwtPmVycmRldGFpbF9mb3JfaW9fZXJyb3Iob3BhcXVl X2RhdGEpIDogMCkpOwogCQkJZWxzZQogCQkJCWVyZXBvcnQoRVJST1IsCi0JCQkJCQkoZXJy bXNnKCJjb3VsZCBub3QgYWNjZXNzIHN0YXR1cyBvZiB0cmFuc2FjdGlvbiAldSIsIHhpZCks Ci0JCQkJCQkgZXJyZGV0YWlsKCJDb3VsZCBub3Qgd3JpdGUgdG8gZmlsZSBcIiVzXCIgYXQg b2Zmc2V0ICVkOiB3cm90ZSB0b28gZmV3IGJ5dGVzLiIsCi0JCQkJCQkJCSAgIHBhdGgsIG9m ZnNldCkpKTsKKwkJCQkJCShlcnJtc2coIkNvdWxkIG5vdCB3cml0ZSB0byBmaWxlIFwiJXNc IiBhdCBvZmZzZXQgJWQ6IHdyb3RlIHRvbyBmZXcgYnl0ZXMuIiwKKwkJCQkJCQkJcGF0aCwg b2Zmc2V0KSwKKwkJCQkJCSBvcGFxdWVfZGF0YSA/IGN0bC0+ZXJyZGV0YWlsX2Zvcl9pb19l cnJvcihvcGFxdWVfZGF0YSkgOiAwKSk7CiAJCQlicmVhazsKIAkJY2FzZSBTTFJVX0ZTWU5D X0ZBSUxFRDoKIAkJCWVyZXBvcnQoZGF0YV9zeW5jX2VsZXZlbChFUlJPUiksCiAJCQkJCShl cnJjb2RlX2Zvcl9maWxlX2FjY2VzcygpLAotCQkJCQkgZXJybXNnKCJjb3VsZCBub3QgYWNj ZXNzIHN0YXR1cyBvZiB0cmFuc2FjdGlvbiAldSIsIHhpZCksCi0JCQkJCSBlcnJkZXRhaWwo IkNvdWxkIG5vdCBmc3luYyBmaWxlIFwiJXNcIjogJW0uIiwKLQkJCQkJCQkgICBwYXRoKSkp OworCQkJCQkgZXJybXNnKCJjb3VsZCBub3QgZnN5bmMgZmlsZSBcIiVzXCI6ICVtIiwKKwkJ CQkJCQlwYXRoKSwKKwkJCQkJIG9wYXF1ZV9kYXRhID8gY3RsLT5lcnJkZXRhaWxfZm9yX2lv X2Vycm9yKG9wYXF1ZV9kYXRhKSA6IDApKTsKIAkJCWJyZWFrOwogCQljYXNlIFNMUlVfQ0xP U0VfRkFJTEVEOgogCQkJZXJlcG9ydChFUlJPUiwKIAkJCQkJKGVycmNvZGVfZm9yX2ZpbGVf YWNjZXNzKCksCi0JCQkJCSBlcnJtc2coImNvdWxkIG5vdCBhY2Nlc3Mgc3RhdHVzIG9mIHRy YW5zYWN0aW9uICV1IiwgeGlkKSwKLQkJCQkJIGVycmRldGFpbCgiQ291bGQgbm90IGNsb3Nl IGZpbGUgXCIlc1wiOiAlbS4iLAotCQkJCQkJCSAgIHBhdGgpKSk7CisJCQkJCSBlcnJtc2co ImNvdWxkIG5vdCBjbG9zZSBmaWxlIFwiJXNcIjogJW0iLAorCQkJCQkJCXBhdGgpLAorCQkJ CQkgb3BhcXVlX2RhdGEgPyBjdGwtPmVycmRldGFpbF9mb3JfaW9fZXJyb3Iob3BhcXVlX2Rh dGEpIDogMCkpOwogCQkJYnJlYWs7CiAJCWRlZmF1bHQ6CiAJCQkvKiBjYW4ndCBnZXQgaGVy ZSwgd2UgdHJ1c3QgKi8KQEAgLTE0MTEsNyArMTQxNSw3IEBAIFNpbXBsZUxydVdyaXRlQWxs KFNscnVDdGwgY3RsLCBib29sIGFsbG93X3JlZGlydGllZCkKIAkJfQogCX0KIAlpZiAoIW9r KQotCQlTbHJ1UmVwb3J0SU9FcnJvcihjdGwsIHBhZ2VubywgSW52YWxpZFRyYW5zYWN0aW9u SWQpOworCQlTbHJ1UmVwb3J0SU9FcnJvcihjdGwsIHBhZ2VubywgTlVMTCk7CiAKIAkvKiBF bnN1cmUgdGhhdCBkaXJlY3RvcnkgZW50cmllcyBmb3IgbmV3IGZpbGVzIGFyZSBvbiBkaXNr LiAqLwogCWlmIChjdGwtPnN5bmNfaGFuZGxlciAhPSBTWU5DX0hBTkRMRVJfTk9ORSkKZGlm ZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL3N1YnRyYW5zLmMgYi9zcmMv YmFja2VuZC9hY2Nlc3MvdHJhbnNhbS9zdWJ0cmFucy5jCmluZGV4IGMwOTg3ZjQzZjExLi5j NmNlNzFmYzcwMyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0vc3Vi dHJhbnMuYworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS9zdWJ0cmFucy5jCkBA IC03NSw2ICs3NSw3IEBAIHN0YXRpYyBTbHJ1Q3RsRGF0YSBTdWJUcmFuc0N0bERhdGE7CiAK IAogc3RhdGljIGJvb2wgU3ViVHJhbnNQYWdlUHJlY2VkZXMoaW50NjQgcGFnZTEsIGludDY0 IHBhZ2UyKTsKK3N0YXRpYyBpbnQJc3VidHJhbnNfZXJyZGV0YWlsX2Zvcl9pb19lcnJvcihj b25zdCB2b2lkICpvcGFxdWVfZGF0YSk7CiAKIAogLyoKQEAgLTk1LDcgKzk2LDcgQEAgU3Vi VHJhbnNTZXRQYXJlbnQoVHJhbnNhY3Rpb25JZCB4aWQsIFRyYW5zYWN0aW9uSWQgcGFyZW50 KQogCWxvY2sgPSBTaW1wbGVMcnVHZXRCYW5rTG9jayhTdWJUcmFuc0N0bCwgcGFnZW5vKTsK IAlMV0xvY2tBY3F1aXJlKGxvY2ssIExXX0VYQ0xVU0lWRSk7CiAKLQlzbG90bm8gPSBTaW1w bGVMcnVSZWFkUGFnZShTdWJUcmFuc0N0bCwgcGFnZW5vLCB0cnVlLCB4aWQpOworCXNsb3Ru byA9IFNpbXBsZUxydVJlYWRQYWdlKFN1YlRyYW5zQ3RsLCBwYWdlbm8sIHRydWUsICZ4aWQp OwogCXB0ciA9IChUcmFuc2FjdGlvbklkICopIFN1YlRyYW5zQ3RsLT5zaGFyZWQtPnBhZ2Vf YnVmZmVyW3Nsb3Rub107CiAJcHRyICs9IGVudHJ5bm87CiAKQEAgLTEzNSw3ICsxMzYsNyBA QCBTdWJUcmFuc0dldFBhcmVudChUcmFuc2FjdGlvbklkIHhpZCkKIAogCS8qIGxvY2sgaXMg YWNxdWlyZWQgYnkgU2ltcGxlTHJ1UmVhZFBhZ2VfUmVhZE9ubHkgKi8KIAotCXNsb3RubyA9 IFNpbXBsZUxydVJlYWRQYWdlX1JlYWRPbmx5KFN1YlRyYW5zQ3RsLCBwYWdlbm8sIHhpZCk7 CisJc2xvdG5vID0gU2ltcGxlTHJ1UmVhZFBhZ2VfUmVhZE9ubHkoU3ViVHJhbnNDdGwsIHBh Z2VubywgJnhpZCk7CiAJcHRyID0gKFRyYW5zYWN0aW9uSWQgKikgU3ViVHJhbnNDdGwtPnNo YXJlZC0+cGFnZV9idWZmZXJbc2xvdG5vXTsKIAlwdHIgKz0gZW50cnlubzsKIApAQCAtMjQw LDYgKzI0MSw3IEBAIFNVQlRSQU5TU2htZW1Jbml0KHZvaWQpCiAJQXNzZXJ0KHN1YnRyYW5z YWN0aW9uX2J1ZmZlcnMgIT0gMCk7CiAKIAlTdWJUcmFuc0N0bC0+UGFnZVByZWNlZGVzID0g U3ViVHJhbnNQYWdlUHJlY2VkZXM7CisJU3ViVHJhbnNDdGwtPmVycmRldGFpbF9mb3JfaW9f ZXJyb3IgPSBzdWJ0cmFuc19lcnJkZXRhaWxfZm9yX2lvX2Vycm9yOwogCVNpbXBsZUxydUlu aXQoU3ViVHJhbnNDdGwsICJzdWJ0cmFuc2FjdGlvbiIsIFNVQlRSQU5TU2htZW1CdWZmZXJz KCksIDAsCiAJCQkJICAicGdfc3VidHJhbnMiLCBMV1RSQU5DSEVfU1VCVFJBTlNfQlVGRkVS LAogCQkJCSAgTFdUUkFOQ0hFX1NVQlRSQU5TX1NMUlUsIFNZTkNfSEFORExFUl9OT05FLCBm YWxzZSk7CkBAIC00MTksMyArNDIxLDExIEBAIFN1YlRyYW5zUGFnZVByZWNlZGVzKGludDY0 IHBhZ2UxLCBpbnQ2NCBwYWdlMikKIAlyZXR1cm4gKFRyYW5zYWN0aW9uSWRQcmVjZWRlcyh4 aWQxLCB4aWQyKSAmJgogCQkJVHJhbnNhY3Rpb25JZFByZWNlZGVzKHhpZDEsIHhpZDIgKyBT VUJUUkFOU19YQUNUU19QRVJfUEFHRSAtIDEpKTsKIH0KKworc3RhdGljIGludAorc3VidHJh bnNfZXJyZGV0YWlsX2Zvcl9pb19lcnJvcihjb25zdCB2b2lkICpvcGFxdWVfZGF0YSkKK3sK KwlUcmFuc2FjdGlvbklkIHhpZCA9ICooY29uc3QgVHJhbnNhY3Rpb25JZCAqKSBvcGFxdWVf ZGF0YTsKKworCXJldHVybiBlcnJkZXRhaWwoIkNvdWxkIG5vdCBhY2Nlc3Mgc3VidHJhbnNh Y3Rpb24gc3RhdHVzIG9mIHRyYW5zYWN0aW9uICV1LiIsIHhpZCk7Cit9CmRpZmYgLS1naXQg YS9zcmMvYmFja2VuZC9jb21tYW5kcy9hc3luYy5jIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMv YXN5bmMuYwppbmRleCAwYjZkMTE5ZGFkMC4uNWM5YTU2YzNkNDAgMTAwNjQ0Ci0tLSBhL3Ny Yy9iYWNrZW5kL2NvbW1hbmRzL2FzeW5jLmMKKysrIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMv YXN5bmMuYwpAQCAtNTcwLDYgKzU3MCw3IEBAIGJvb2wJCVRyYWNlX25vdGlmeSA9IGZhbHNl OwogaW50CQkJbWF4X25vdGlmeV9xdWV1ZV9wYWdlcyA9IDEwNDg1NzY7CiAKIC8qIGxvY2Fs IGZ1bmN0aW9uIHByb3RvdHlwZXMgKi8KK3N0YXRpYyBpbnQJYXN5bmNRdWV1ZUVycmRldGFp bEZvcklvRXJyb3IoY29uc3Qgdm9pZCAqb3BhcXVlX2RhdGEpOwogc3RhdGljIGlubGluZSBp bnQ2NCBhc3luY1F1ZXVlUGFnZURpZmYoaW50NjQgcCwgaW50NjQgcSk7CiBzdGF0aWMgaW5s aW5lIGJvb2wgYXN5bmNRdWV1ZVBhZ2VQcmVjZWRlcyhpbnQ2NCBwLCBpbnQ2NCBxKTsKIHN0 YXRpYyBpbmxpbmUgdm9pZCBHbG9iYWxDaGFubmVsS2V5SW5pdChHbG9iYWxDaGFubmVsS2V5 ICprZXksIE9pZCBkYm9pZCwKQEAgLTYxMCw2ICs2MTEsMTUgQEAgc3RhdGljIHVpbnQzMiBu b3RpZmljYXRpb25faGFzaChjb25zdCB2b2lkICprZXksIFNpemUga2V5c2l6ZSk7CiBzdGF0 aWMgaW50CW5vdGlmaWNhdGlvbl9tYXRjaChjb25zdCB2b2lkICprZXkxLCBjb25zdCB2b2lk ICprZXkyLCBTaXplIGtleXNpemUpOwogc3RhdGljIHZvaWQgQ2xlYXJQZW5kaW5nQWN0aW9u c0FuZE5vdGlmaWVzKHZvaWQpOwogCitzdGF0aWMgaW50Cithc3luY1F1ZXVlRXJyZGV0YWls Rm9ySW9FcnJvcihjb25zdCB2b2lkICpvcGFxdWVfZGF0YSkKK3sKKwljb25zdCBRdWV1ZVBv c2l0aW9uICpwb3NpdGlvbiA9IG9wYXF1ZV9kYXRhOworCisJcmV0dXJuIGVycmRldGFpbCgi Q291bGQgbm90IGFjY2VzcyBhc3luYyBxdWV1ZSBhdCBwYWdlICUiIFBSSWQ2NCAiLCBvZmZz ZXQgJWQuIiwKKwkJCQkJIHBvc2l0aW9uLT5wYWdlLCBwb3NpdGlvbi0+b2Zmc2V0KTsKK30K KwogLyoKICAqIENvbXB1dGUgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiB0d28gcXVldWUgcGFn ZSBudW1iZXJzLgogICogUHJldmlvdXNseSB0aGlzIGZ1bmN0aW9uIGFjY291bnRlZCBmb3Ig YSB3cmFwYXJvdW5kLgpAQCAtODMwLDYgKzg0MCw3IEBAIEFzeW5jU2htZW1Jbml0KHZvaWQp CiAJICogbmFtZXMgYXJlIHVzZWQgaW4gb3JkZXIgdG8gYXZvaWQgd3JhcGFyb3VuZC4KIAkg Ki8KIAlOb3RpZnlDdGwtPlBhZ2VQcmVjZWRlcyA9IGFzeW5jUXVldWVQYWdlUHJlY2VkZXM7 CisJTm90aWZ5Q3RsLT5lcnJkZXRhaWxfZm9yX2lvX2Vycm9yID0gYXN5bmNRdWV1ZUVycmRl dGFpbEZvcklvRXJyb3I7CiAJU2ltcGxlTHJ1SW5pdChOb3RpZnlDdGwsICJub3RpZnkiLCBu b3RpZnlfYnVmZmVycywgMCwKIAkJCQkgICJwZ19ub3RpZnkiLCBMV1RSQU5DSEVfTk9USUZZ X0JVRkZFUiwgTFdUUkFOQ0hFX05PVElGWV9TTFJVLAogCQkJCSAgU1lOQ19IQU5ETEVSX05P TkUsIHRydWUpOwpAQCAtMjA2OCw4ICsyMDc5LDcgQEAgYXN5bmNRdWV1ZUFkZEVudHJpZXMo TGlzdENlbGwgKm5leHROb3RpZnkpCiAJaWYgKFFVRVVFX1BPU19JU19aRVJPKHF1ZXVlX2hl YWQpKQogCQlzbG90bm8gPSBTaW1wbGVMcnVaZXJvUGFnZShOb3RpZnlDdGwsIHBhZ2Vubyk7 CiAJZWxzZQotCQlzbG90bm8gPSBTaW1wbGVMcnVSZWFkUGFnZShOb3RpZnlDdGwsIHBhZ2Vu bywgdHJ1ZSwKLQkJCQkJCQkJICAgSW52YWxpZFRyYW5zYWN0aW9uSWQpOworCQlzbG90bm8g PSBTaW1wbGVMcnVSZWFkUGFnZShOb3RpZnlDdGwsIHBhZ2VubywgdHJ1ZSwgJnF1ZXVlX2hl YWQpOwogCiAJLyogTm90ZSB3ZSBtYXJrIHRoZSBwYWdlIGRpcnR5IGJlZm9yZSB3cml0aW5n IGluIGl0ICovCiAJTm90aWZ5Q3RsLT5zaGFyZWQtPnBhZ2VfZGlydHlbc2xvdG5vXSA9IHRy dWU7CkBAIC0yNzM5LDggKzI3NDksNyBAQCBhc3luY1F1ZXVlUHJvY2Vzc1BhZ2VFbnRyaWVz KFF1ZXVlUG9zaXRpb24gKmN1cnJlbnQsCiAJYWxpZ25hcyhBc3luY1F1ZXVlRW50cnkpIGNo YXIgbG9jYWxfYnVmW1FVRVVFX1BBR0VTSVpFXTsKIAljaGFyCSAgICpsb2NhbF9idWZfZW5k ID0gbG9jYWxfYnVmOwogCi0Jc2xvdG5vID0gU2ltcGxlTHJ1UmVhZFBhZ2VfUmVhZE9ubHko Tm90aWZ5Q3RsLCBjdXJwYWdlLAotCQkJCQkJCQkJCUludmFsaWRUcmFuc2FjdGlvbklkKTsK KwlzbG90bm8gPSBTaW1wbGVMcnVSZWFkUGFnZV9SZWFkT25seShOb3RpZnlDdGwsIGN1cnBh Z2UsIGN1cnJlbnQpOwogCXBhZ2VfYnVmZmVyID0gTm90aWZ5Q3RsLT5zaGFyZWQtPnBhZ2Vf YnVmZmVyW3Nsb3Rub107CiAKIAlkbwpAQCAtMjk5OCw4ICszMDA3LDcgQEAgQXN5bmNOb3Rp ZnlGcmVlemVYaWRzKFRyYW5zYWN0aW9uSWQgbmV3RnJvemVuWGlkKQogCiAJCQlsb2NrID0g U2ltcGxlTHJ1R2V0QmFua0xvY2soTm90aWZ5Q3RsLCBwYWdlbm8pOwogCQkJTFdMb2NrQWNx dWlyZShsb2NrLCBMV19FWENMVVNJVkUpOwotCQkJc2xvdG5vID0gU2ltcGxlTHJ1UmVhZFBh Z2UoTm90aWZ5Q3RsLCBwYWdlbm8sIHRydWUsCi0JCQkJCQkJCQkgICBJbnZhbGlkVHJhbnNh Y3Rpb25JZCk7CisJCQlzbG90bm8gPSBTaW1wbGVMcnVSZWFkUGFnZShOb3RpZnlDdGwsIHBh Z2VubywgdHJ1ZSwgJnBvcyk7CiAJCQlwYWdlX2J1ZmZlciA9IE5vdGlmeUN0bC0+c2hhcmVk LT5wYWdlX2J1ZmZlcltzbG90bm9dOwogCQkJY3VycGFnZSA9IHBhZ2VubzsKIAkJfQpkaWZm IC0tZ2l0IGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9sbWdyL3ByZWRpY2F0ZS5jIGIvc3JjL2Jh Y2tlbmQvc3RvcmFnZS9sbWdyL3ByZWRpY2F0ZS5jCmluZGV4IGZlNzVlYWQzNTAxLi5lNzJl YjgwYTAzZiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9sbWdyL3ByZWRpY2F0 ZS5jCisrKyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2UvbG1nci9wcmVkaWNhdGUuYwpAQCAtNDQy LDYgKzQ0Miw3IEBAIHN0YXRpYyB2b2lkIFJlbGVhc2VSV0NvbmZsaWN0KFJXQ29uZmxpY3Qg Y29uZmxpY3QpOwogc3RhdGljIHZvaWQgRmxhZ1N4YWN0VW5zYWZlKFNFUklBTElaQUJMRVhB Q1QgKnN4YWN0KTsKIAogc3RhdGljIGJvb2wgU2VyaWFsUGFnZVByZWNlZGVzTG9naWNhbGx5 KGludDY0IHBhZ2UxLCBpbnQ2NCBwYWdlMik7CitzdGF0aWMgaW50CXNlcmlhbF9lcnJkZXRh aWxfZm9yX2lvX2Vycm9yKGNvbnN0IHZvaWQgKm9wYXF1ZV9kYXRhKTsKIHN0YXRpYyB2b2lk IFNlcmlhbEluaXQodm9pZCk7CiBzdGF0aWMgdm9pZCBTZXJpYWxBZGQoVHJhbnNhY3Rpb25J ZCB4aWQsIFNlckNvbW1pdFNlcU5vIG1pbkNvbmZsaWN0Q29tbWl0U2VxTm8pOwogc3RhdGlj IFNlckNvbW1pdFNlcU5vIFNlcmlhbEdldE1pbkNvbmZsaWN0Q29tbWl0U2VxTm8oVHJhbnNh Y3Rpb25JZCB4aWQpOwpAQCAtNzQyLDYgKzc0MywxNCBAQCBTZXJpYWxQYWdlUHJlY2VkZXNM b2dpY2FsbHkoaW50NjQgcGFnZTEsIGludDY0IHBhZ2UyKQogCQkJVHJhbnNhY3Rpb25JZFBy ZWNlZGVzKHhpZDEsIHhpZDIgKyBTRVJJQUxfRU5UUklFU1BFUlBBR0UgLSAxKSk7CiB9CiAK K3N0YXRpYyBpbnQKK3NlcmlhbF9lcnJkZXRhaWxfZm9yX2lvX2Vycm9yKGNvbnN0IHZvaWQg Km9wYXF1ZV9kYXRhKQoreworCVRyYW5zYWN0aW9uSWQgeGlkID0gKihjb25zdCBUcmFuc2Fj dGlvbklkICopIG9wYXF1ZV9kYXRhOworCisJcmV0dXJuIGVycmRldGFpbCgiQ291bGQgbm90 IGFjY2VzcyBzZXJpYWxpemFibGUgQ1NOIG9mIHRyYW5zYWN0aW9uICV1LiIsIHhpZCk7Cit9 CisKICNpZmRlZiBVU0VfQVNTRVJUX0NIRUNLSU5HCiBzdGF0aWMgdm9pZAogU2VyaWFsUGFn ZVByZWNlZGVzTG9naWNhbGx5VW5pdFRlc3RzKHZvaWQpCkBAIC04MTEsNiArODIwLDcgQEAg U2VyaWFsSW5pdCh2b2lkKQogCSAqIFNldCB1cCBTTFJVIG1hbmFnZW1lbnQgb2YgdGhlIHBn X3NlcmlhbCBkYXRhLgogCSAqLwogCVNlcmlhbFNscnVDdGwtPlBhZ2VQcmVjZWRlcyA9IFNl cmlhbFBhZ2VQcmVjZWRlc0xvZ2ljYWxseTsKKwlTZXJpYWxTbHJ1Q3RsLT5lcnJkZXRhaWxf Zm9yX2lvX2Vycm9yID0gc2VyaWFsX2VycmRldGFpbF9mb3JfaW9fZXJyb3I7CiAJU2ltcGxl THJ1SW5pdChTZXJpYWxTbHJ1Q3RsLCAic2VyaWFsaXphYmxlIiwKIAkJCQkgIHNlcmlhbGl6 YWJsZV9idWZmZXJzLCAwLCAicGdfc2VyaWFsIiwKIAkJCQkgIExXVFJBTkNIRV9TRVJJQUxf QlVGRkVSLCBMV1RSQU5DSEVfU0VSSUFMX1NMUlUsCkBAIC05MzAsNyArOTQwLDcgQEAgU2Vy aWFsQWRkKFRyYW5zYWN0aW9uSWQgeGlkLCBTZXJDb21taXRTZXFObyBtaW5Db25mbGljdENv bW1pdFNlcU5vKQogCWVsc2UKIAl7CiAJCUxXTG9ja0FjcXVpcmUobG9jaywgTFdfRVhDTFVT SVZFKTsKLQkJc2xvdG5vID0gU2ltcGxlTHJ1UmVhZFBhZ2UoU2VyaWFsU2xydUN0bCwgdGFy Z2V0UGFnZSwgdHJ1ZSwgeGlkKTsKKwkJc2xvdG5vID0gU2ltcGxlTHJ1UmVhZFBhZ2UoU2Vy aWFsU2xydUN0bCwgdGFyZ2V0UGFnZSwgdHJ1ZSwgJnhpZCk7CiAJfQogCiAJU2VyaWFsVmFs dWUoc2xvdG5vLCB4aWQpID0gbWluQ29uZmxpY3RDb21taXRTZXFObzsKQEAgLTk3NCw3ICs5 ODQsNyBAQCBTZXJpYWxHZXRNaW5Db25mbGljdENvbW1pdFNlcU5vKFRyYW5zYWN0aW9uSWQg eGlkKQogCSAqIGJ1dCB3aWxsIHJldHVybiB3aXRoIHRoYXQgbG9jayBoZWxkLCB3aGljaCBt dXN0IHRoZW4gYmUgcmVsZWFzZWQuCiAJICovCiAJc2xvdG5vID0gU2ltcGxlTHJ1UmVhZFBh Z2VfUmVhZE9ubHkoU2VyaWFsU2xydUN0bCwKLQkJCQkJCQkJCQlTZXJpYWxQYWdlKHhpZCks IHhpZCk7CisJCQkJCQkJCQkJU2VyaWFsUGFnZSh4aWQpLCAmeGlkKTsKIAl2YWwgPSBTZXJp YWxWYWx1ZShzbG90bm8sIHhpZCk7CiAJTFdMb2NrUmVsZWFzZShTaW1wbGVMcnVHZXRCYW5r TG9jayhTZXJpYWxTbHJ1Q3RsLCBTZXJpYWxQYWdlKHhpZCkpKTsKIAlyZXR1cm4gdmFsOwpk aWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvYWNjZXNzL3NscnUuaCBiL3NyYy9pbmNsdWRlL2Fj Y2Vzcy9zbHJ1LmgKaW5kZXggNGNiOGY0NzhmY2UuLmRjYjU5ZWY4NzYxIDEwMDY0NAotLS0g YS9zcmMvaW5jbHVkZS9hY2Nlc3Mvc2xydS5oCisrKyBiL3NyYy9pbmNsdWRlL2FjY2Vzcy9z bHJ1LmgKQEAgLTEzLDYgKzEzLDcgQEAKICNpZm5kZWYgU0xSVV9ICiAjZGVmaW5lIFNMUlVf SAogCisjaW5jbHVkZSAiYWNjZXNzL3RyYW5zYW0uaCIKICNpbmNsdWRlICJhY2Nlc3MveGxv Z2RlZnMuaCIKICNpbmNsdWRlICJzdG9yYWdlL2x3bG9jay5oIgogI2luY2x1ZGUgInN0b3Jh Z2Uvc3luYy5oIgpAQCAtMTQxLDYgKzE0MiwxNiBAQCB0eXBlZGVmIHN0cnVjdCBTbHJ1Q3Rs RGF0YQogCSAqLwogCWJvb2wJCSgqUGFnZVByZWNlZGVzKSAoaW50NjQsIGludDY0KTsKIAor CS8qCisJICogQ2FsbGJhY2sgdG8gcHJvdmlkZSBtb3JlIGRldGFpbHMgb24gYW4gSS9PIGVy cm9yLiAgVGhpcyBpcyBjYWxsZWQgYXMKKwkgKiBwYXJ0IG9mIGVyZXBvcnQoKSwgYW5kIHRo ZSBjYWxsYmFjayBmdW5jdGlvbiBpcyBleHBlY3RlZCB0byBjYWxsCisJICogZXJyZGV0YWls KCkgdG8gcHJvdmlkZSBtb3JlIGRldGFpbHMuCisJICoKKwkgKiBUaGUgb3BhcXVlX2RhdGEg YXJndW1lbnQgaGVyZSBpcyB0aGUgYXJndW1lbnQgcGFzc2VkIHRvIHRoZQorCSAqIFNpbXBs ZUxydVJlYWRQYWdlKCkgZnVuY3Rpb24uCisJICovCisJaW50CQkJKCplcnJkZXRhaWxfZm9y X2lvX2Vycm9yKSAoY29uc3Qgdm9pZCAqb3BhcXVlX2RhdGEpOworCiAJLyoKIAkgKiBEaXIg aXMgc2V0IGR1cmluZyBTaW1wbGVMcnVJbml0IGFuZCBkb2VzIG5vdCBjaGFuZ2UgdGhlcmVh ZnRlci4gU2luY2UKIAkgKiBpdCdzIGFsd2F5cyB0aGUgc2FtZSwgaXQgZG9lc24ndCBuZWVk IHRvIGJlIGluIHNoYXJlZCBtZW1vcnkuCkBAIC0xNzQsOSArMTg1LDkgQEAgZXh0ZXJuIHZv aWQgU2ltcGxlTHJ1SW5pdChTbHJ1Q3RsIGN0bCwgY29uc3QgY2hhciAqbmFtZSwgaW50IG5z bG90cywgaW50IG5sc25zLAogZXh0ZXJuIGludAlTaW1wbGVMcnVaZXJvUGFnZShTbHJ1Q3Rs IGN0bCwgaW50NjQgcGFnZW5vKTsKIGV4dGVybiB2b2lkIFNpbXBsZUxydVplcm9BbmRXcml0 ZVBhZ2UoU2xydUN0bCBjdGwsIGludDY0IHBhZ2Vubyk7CiBleHRlcm4gaW50CVNpbXBsZUxy dVJlYWRQYWdlKFNscnVDdGwgY3RsLCBpbnQ2NCBwYWdlbm8sIGJvb2wgd3JpdGVfb2ssCi0J CQkJCQkJICBUcmFuc2FjdGlvbklkIHhpZCk7CisJCQkJCQkJICBjb25zdCB2b2lkICpvcGFx dWVfZGF0YSk7CiBleHRlcm4gaW50CVNpbXBsZUxydVJlYWRQYWdlX1JlYWRPbmx5KFNscnVD dGwgY3RsLCBpbnQ2NCBwYWdlbm8sCi0JCQkJCQkJCQkgICBUcmFuc2FjdGlvbklkIHhpZCk7 CisJCQkJCQkJCQkgICBjb25zdCB2b2lkICpvcGFxdWVfZGF0YSk7CiBleHRlcm4gdm9pZCBT aW1wbGVMcnVXcml0ZVBhZ2UoU2xydUN0bCBjdGwsIGludCBzbG90bm8pOwogZXh0ZXJuIHZv aWQgU2ltcGxlTHJ1V3JpdGVBbGwoU2xydUN0bCBjdGwsIGJvb2wgYWxsb3dfcmVkaXJ0aWVk KTsKICNpZmRlZiBVU0VfQVNTRVJUX0NIRUNLSU5HCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9t b2R1bGVzL3Rlc3Rfc2xydS9leHBlY3RlZC90ZXN0X3NscnUub3V0IGIvc3JjL3Rlc3QvbW9k dWxlcy90ZXN0X3NscnUvZXhwZWN0ZWQvdGVzdF9zbHJ1Lm91dAppbmRleCAxODVjNTZlNWQ2 Mi4uN2FlMWIwZDRhOTggMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9zbHJ1 L2V4cGVjdGVkL3Rlc3Rfc2xydS5vdXQKKysrIGIvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X3Ns cnUvZXhwZWN0ZWQvdGVzdF9zbHJ1Lm91dApAQCAtMjMsNiArMjMsMTAgQEAgU0VMRUNUIHRl c3Rfc2xydV9wYWdlX2V4aXN0cygxMjM0NSk7CiAgdAogKDEgcm93KQogCistLSBUZXN0IHJl YWQgZmFpbHVyZQorU0VMRUNUIHRlc3Rfc2xydV9wYWdlX3JlYWQoNTQzMjEsIGZhbHNlLCAn MTIzJzo6eGlkKTsKK0VSUk9SOiAgY291bGQgbm90IG9wZW4gZmlsZSAicGdfdGVzdF9zbHJ1 LzAwMDAwMDAwMDAwMDZBMSI6IE5vIHN1Y2ggZmlsZSBvciBkaXJlY3RvcnkKK0RFVEFJTDog IENvdWxkIG5vdCBhY2Nlc3MgdGVzdF9zbHJ1IGVudHJ5IDEyMy4KIC0tIDQ4IGV4dHJhIHBh Z2VzCiBTRUxFQ1QgY291bnQodGVzdF9zbHJ1X3BhZ2Vfd3JpdGUoYSwgJ1Rlc3QgU0xSVScp KQogICBGUk9NIGdlbmVyYXRlX3NlcmllcygxMjM0NiwgMTIzOTMsIDEpIGFzIGE7CmRpZmYg LS1naXQgYS9zcmMvdGVzdC9tb2R1bGVzL3Rlc3Rfc2xydS9zcWwvdGVzdF9zbHJ1LnNxbCBi L3NyYy90ZXN0L21vZHVsZXMvdGVzdF9zbHJ1L3NxbC90ZXN0X3NscnUuc3FsCmluZGV4IGIx YjM3NjU4MWFiLi5jNjQ1NGM1YmY4MiAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvbW9kdWxlcy90 ZXN0X3NscnUvc3FsL3Rlc3Rfc2xydS5zcWwKKysrIGIvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0 X3NscnUvc3FsL3Rlc3Rfc2xydS5zcWwKQEAgLTUsNiArNSw5IEBAIFNFTEVDVCB0ZXN0X3Ns cnVfcGFnZV93cml0ZSgxMjM0NSwgJ1Rlc3QgU0xSVScpOwogU0VMRUNUIHRlc3Rfc2xydV9w YWdlX3JlYWQoMTIzNDUpOwogU0VMRUNUIHRlc3Rfc2xydV9wYWdlX2V4aXN0cygxMjM0NSk7 CiAKKy0tIFRlc3QgcmVhZCBmYWlsdXJlCitTRUxFQ1QgdGVzdF9zbHJ1X3BhZ2VfcmVhZCg1 NDMyMSwgZmFsc2UsICcxMjMnOjp4aWQpOworCiAtLSA0OCBleHRyYSBwYWdlcwogU0VMRUNU IGNvdW50KHRlc3Rfc2xydV9wYWdlX3dyaXRlKGEsICdUZXN0IFNMUlUnKSkKICAgRlJPTSBn ZW5lcmF0ZV9zZXJpZXMoMTIzNDYsIDEyMzkzLCAxKSBhcyBhOwpkaWZmIC0tZ2l0IGEvc3Jj L3Rlc3QvbW9kdWxlcy90ZXN0X3NscnUvdGVzdF9zbHJ1LS0xLjAuc3FsIGIvc3JjL3Rlc3Qv bW9kdWxlcy90ZXN0X3NscnUvdGVzdF9zbHJ1LS0xLjAuc3FsCmluZGV4IGFiZWNiNWUyMTgz Li4yMTQ4ZTcyMDRlYyAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X3NscnUv dGVzdF9zbHJ1LS0xLjAuc3FsCisrKyBiL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9zbHJ1L3Rl c3Rfc2xydS0tMS4wLnNxbApAQCAtNyw3ICs3LDcgQEAgQ1JFQVRFIE9SIFJFUExBQ0UgRlVO Q1RJT04gdGVzdF9zbHJ1X3BhZ2Vfd3JpdGVhbGwoKSBSRVRVUk5TIFZPSUQKICAgQVMgJ01P RFVMRV9QQVRITkFNRScsICd0ZXN0X3NscnVfcGFnZV93cml0ZWFsbCcgTEFOR1VBR0UgQzsK IENSRUFURSBPUiBSRVBMQUNFIEZVTkNUSU9OIHRlc3Rfc2xydV9wYWdlX3N5bmMoYmlnaW50 KSBSRVRVUk5TIFZPSUQKICAgQVMgJ01PRFVMRV9QQVRITkFNRScsICd0ZXN0X3NscnVfcGFn ZV9zeW5jJyBMQU5HVUFHRSBDOwotQ1JFQVRFIE9SIFJFUExBQ0UgRlVOQ1RJT04gdGVzdF9z bHJ1X3BhZ2VfcmVhZChiaWdpbnQsIGJvb2wgREVGQVVMVCB0cnVlKSBSRVRVUk5TIHRleHQK K0NSRUFURSBPUiBSRVBMQUNFIEZVTkNUSU9OIHRlc3Rfc2xydV9wYWdlX3JlYWQoYmlnaW50 LCBib29sIERFRkFVTFQgdHJ1ZSwgeGlkIERFRkFVTFQgJzAnKSBSRVRVUk5TIHRleHQKICAg QVMgJ01PRFVMRV9QQVRITkFNRScsICd0ZXN0X3NscnVfcGFnZV9yZWFkJyBMQU5HVUFHRSBD OwogQ1JFQVRFIE9SIFJFUExBQ0UgRlVOQ1RJT04gdGVzdF9zbHJ1X3BhZ2VfcmVhZG9ubHko YmlnaW50KSBSRVRVUk5TIHRleHQKICAgQVMgJ01PRFVMRV9QQVRITkFNRScsICd0ZXN0X3Ns cnVfcGFnZV9yZWFkb25seScgTEFOR1VBR0UgQzsKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L21v ZHVsZXMvdGVzdF9zbHJ1L3Rlc3Rfc2xydS5jIGIvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X3Ns cnUvdGVzdF9zbHJ1LmMKaW5kZXggNGRjNzRlMTk2MjAuLmU0YmQyYWYwYmY1IDEwMDY0NAot LS0gYS9zcmMvdGVzdC9tb2R1bGVzL3Rlc3Rfc2xydS90ZXN0X3NscnUuYworKysgYi9zcmMv dGVzdC9tb2R1bGVzL3Rlc3Rfc2xydS90ZXN0X3NscnUuYwpAQCAtOTMsMTQgKzkzLDE0IEBA IHRlc3Rfc2xydV9wYWdlX3JlYWQoUEdfRlVOQ1RJT05fQVJHUykKIHsKIAlpbnQ2NAkJcGFn ZW5vID0gUEdfR0VUQVJHX0lOVDY0KDApOwogCWJvb2wJCXdyaXRlX29rID0gUEdfR0VUQVJH X0JPT0woMSk7CisJVHJhbnNhY3Rpb25JZCB4aWQgPSBQR19HRVRBUkdfVFJBTlNBQ1RJT05J RCgyKTsKIAljaGFyCSAgICpkYXRhID0gTlVMTDsKIAlpbnQJCQlzbG90bm87CiAJTFdMb2Nr CSAgICpsb2NrID0gU2ltcGxlTHJ1R2V0QmFua0xvY2soVGVzdFNscnVDdGwsIHBhZ2Vubyk7 CiAKIAkvKiBmaW5kIHBhZ2UgaW4gYnVmZmVycywgcmVhZGluZyBpdCBpZiBuZWNlc3Nhcnkg Ki8KIAlMV0xvY2tBY3F1aXJlKGxvY2ssIExXX0VYQ0xVU0lWRSk7Ci0Jc2xvdG5vID0gU2lt cGxlTHJ1UmVhZFBhZ2UoVGVzdFNscnVDdGwsIHBhZ2VubywKLQkJCQkJCQkgICB3cml0ZV9v aywgSW52YWxpZFRyYW5zYWN0aW9uSWQpOworCXNsb3RubyA9IFNpbXBsZUxydVJlYWRQYWdl KFRlc3RTbHJ1Q3RsLCBwYWdlbm8sIHdyaXRlX29rLCAmeGlkKTsKIAlkYXRhID0gKGNoYXIg KikgVGVzdFNscnVDdGwtPnNoYXJlZC0+cGFnZV9idWZmZXJbc2xvdG5vXTsKIAlMV0xvY2tS ZWxlYXNlKGxvY2spOwogCkBAIC0xMTgsNyArMTE4LDcgQEAgdGVzdF9zbHJ1X3BhZ2VfcmVh ZG9ubHkoUEdfRlVOQ1RJT05fQVJHUykKIAkvKiBmaW5kIHBhZ2UgaW4gYnVmZmVycywgcmVh ZGluZyBpdCBpZiBuZWNlc3NhcnkgKi8KIAlzbG90bm8gPSBTaW1wbGVMcnVSZWFkUGFnZV9S ZWFkT25seShUZXN0U2xydUN0bCwKIAkJCQkJCQkJCQlwYWdlbm8sCi0JCQkJCQkJCQkJSW52 YWxpZFRyYW5zYWN0aW9uSWQpOworCQkJCQkJCQkJCU5VTEwpOwogCUFzc2VydChMV0xvY2tI ZWxkQnlNZShsb2NrKSk7CiAJZGF0YSA9IChjaGFyICopIFRlc3RTbHJ1Q3RsLT5zaGFyZWQt PnBhZ2VfYnVmZmVyW3Nsb3Rub107CiAJTFdMb2NrUmVsZWFzZShsb2NrKTsKQEAgLTIxMCw2 ICsyMTAsMTQgQEAgdGVzdF9zbHJ1X3BhZ2VfcHJlY2VkZXNfbG9naWNhbGx5KGludDY0IHBh Z2UxLCBpbnQ2NCBwYWdlMikKIAlyZXR1cm4gcGFnZTEgPCBwYWdlMjsKIH0KIAorc3RhdGlj IGludAordGVzdF9zbHJ1X2VycmRldGFpbF9mb3JfaW9fZXJyb3IoY29uc3Qgdm9pZCAqb3Bh cXVlX2RhdGEpCit7CisJVHJhbnNhY3Rpb25JZCB4aWQgPSAqKGNvbnN0IFRyYW5zYWN0aW9u SWQgKikgb3BhcXVlX2RhdGE7CisKKwlyZXR1cm4gZXJyZGV0YWlsKCJDb3VsZCBub3QgYWNj ZXNzIHRlc3Rfc2xydSBlbnRyeSAldS4iLCB4aWQpOworfQorCiBzdGF0aWMgdm9pZAogdGVz dF9zbHJ1X3NobWVtX3N0YXJ0dXAodm9pZCkKIHsKQEAgLTI0NSw2ICsyNTMsNyBAQCB0ZXN0 X3NscnVfc2htZW1fc3RhcnR1cCh2b2lkKQogCX0KIAogCVRlc3RTbHJ1Q3RsLT5QYWdlUHJl Y2VkZXMgPSB0ZXN0X3NscnVfcGFnZV9wcmVjZWRlc19sb2dpY2FsbHk7CisJVGVzdFNscnVD dGwtPmVycmRldGFpbF9mb3JfaW9fZXJyb3IgPSB0ZXN0X3NscnVfZXJyZGV0YWlsX2Zvcl9p b19lcnJvcjsKIAlTaW1wbGVMcnVJbml0KFRlc3RTbHJ1Q3RsLCAiVGVzdFNMUlUiLAogCQkJ CSAgTlVNX1RFU1RfQlVGRkVSUywgMCwgc2xydV9kaXJfbmFtZSwKIAkJCQkgIHRlc3RfYnVm ZmVyX3RyYW5jaGVfaWQsIHRlc3RfdHJhbmNoZV9pZCwgU1lOQ19IQU5ETEVSX05PTkUsCi0t IAoyLjQ3LjMKCg== --------------06GUYohMUcQ8CuS7BtxV0x2P--