From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from smtp1.axis.com ([195.60.68.17]) by bombadil.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) id 1nSi4i-00HKlN-00 for linux-um@lists.infradead.org; Fri, 11 Mar 2022 16:25:13 +0000 From: Vincent Whitchurch Subject: [RFC v1 01/10] roadtest: import libvhost-user from QEMU Date: Fri, 11 Mar 2022 17:24:36 +0100 Message-ID: <20220311162445.346685-2-vincent.whitchurch@axis.com> In-Reply-To: <20220311162445.346685-1-vincent.whitchurch@axis.com> References: <20220311162445.346685-1-vincent.whitchurch@axis.com> MIME-Version: 1.0 List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Sender: "linux-um" Errors-To: linux-um-bounces+geert=linux-m68k.org@lists.infradead.org To: linux-kernel@vger.kernel.org Cc: kernel@axis.com, Vincent Whitchurch , devicetree@vger.kernel.org, linux-um@lists.infradead.org, shuah@kernel.org, brendanhiggins@google.com, linux-kselftest@vger.kernel.org, jic23@kernel.org, linux-iio@vger.kernel.org, lgirdwood@gmail.com, broonie@kernel.org, a.zummo@towertech.it, alexandre.belloni@bootlin.com, linux-rtc@vger.kernel.org, corbet@lwn.net, linux-doc@vger.kernel.org SW1wb3J0IHRoZSBsaWJ2aG9zdC11c2VyIGZyb20gUUVNVSBmb3IgdXNlIGluIHRoZSBpbXBsZW1l bnRhdGlvbiBvZiB0aGUKdmlydGlvIGRldmljZXMgaW4gdGhlIHJvYWR0ZXN0IGJhY2tlbmQuCgpU aGUgZmlsZXMgYXJlIGZyb20gdGhlIGZvbGxvd2luZyBwYXRocyBpbiB2Ni4yLjAgb2YgUUVNVToK CiBpbmNsdWRlL3FlbXUvYXRvbWljLmgKIHN1YnByb2plY3RzL2xpYnZob3N0LXVzZXIvbGlidmhv c3QtdXNlci5jCiBzdWJwcm9qZWN0cy9saWJ2aG9zdC11c2VyL2xpYnZob3N0LXVzZXIuaAoKSW4g b3JkZXIgdG8ga2VlcCBmdXJ0aGVyIGltcG9ydHMgc3RyaWdodGZvcndhcmQsIHRoZSBmaWxlcyBo YXZlIGJlZW4KY29waWVkIGFzLWlzIHdpdGggb25seSB0aGUgZm9sbG93aW5nIGVzc2VudGlhbCBt b2RpZmljYXRpb25zOgoKIC0gQWRkaXRpb24gb2YgU1BEWCBsaW5lcyAoR1BMLTIuMC1vci1sYXRl ciwgaW4gY29uZm9ybWFuY2Ugd2l0aCB0aGUKICAgZXhpc3RpbmcgY29weXJpZ2h0IG1lc3NhZ2Vz IGluIHRoZSBmaWxlcykKCiAtIENoYW5nZSBvZiAic3RhbmRhcmQtaGVhZGVycy9saW51eC92aXJ0 aW9fcmluZy5oIiB0bwogICA8bGludXgvdmlydGlvX3JpbmcuaD4gaW4gbGlidmhvc3QtdXNlci5o LiAgSXQgd2lsbCBiZSBidWlsdCB3aXRoIHRoZQogICBoZWFkZXJzIGZyb20gdGhlIGN1cnJlbnQg a2VybmVsLgoKU2lnbmVkLW9mZi1ieTogVmluY2VudCBXaGl0Y2h1cmNoIDx2aW5jZW50LndoaXRj aHVyY2hAYXhpcy5jb20+Ci0tLQogLi4uL3NyYy9saWJ2aG9zdC11c2VyL2luY2x1ZGUvYXRvbWlj LmggICAgICAgIHwgIDMxMCArKwogLi4uL3NyYy9saWJ2aG9zdC11c2VyL2xpYnZob3N0LXVzZXIu YyAgICAgICAgIHwgMjg4NSArKysrKysrKysrKysrKysrKwogLi4uL3NyYy9saWJ2aG9zdC11c2Vy L2xpYnZob3N0LXVzZXIuaCAgICAgICAgIHwgIDY5MSArKysrCiAzIGZpbGVzIGNoYW5nZWQsIDM4 ODYgaW5zZXJ0aW9ucygrKQogY3JlYXRlIG1vZGUgMTAwNjQ0IHRvb2xzL3Rlc3Rpbmcvcm9hZHRl c3Qvc3JjL2xpYnZob3N0LXVzZXIvaW5jbHVkZS9hdG9taWMuaAogY3JlYXRlIG1vZGUgMTAwNjQ0 IHRvb2xzL3Rlc3Rpbmcvcm9hZHRlc3Qvc3JjL2xpYnZob3N0LXVzZXIvbGlidmhvc3QtdXNlci5j CiBjcmVhdGUgbW9kZSAxMDA2NDQgdG9vbHMvdGVzdGluZy9yb2FkdGVzdC9zcmMvbGlidmhvc3Qt dXNlci9saWJ2aG9zdC11c2VyLmgKCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3JvYWR0ZXN0 L3NyYy9saWJ2aG9zdC11c2VyL2luY2x1ZGUvYXRvbWljLmggYi90b29scy90ZXN0aW5nL3JvYWR0 ZXN0L3NyYy9saWJ2aG9zdC11c2VyL2luY2x1ZGUvYXRvbWljLmgKbmV3IGZpbGUgbW9kZSAxMDA2 NDQKaW5kZXggMDAwMDAwMDAwMDAwLi42NTAyNmJmNTQ0MDYKLS0tIC9kZXYvbnVsbAorKysgYi90 b29scy90ZXN0aW5nL3JvYWR0ZXN0L3NyYy9saWJ2aG9zdC11c2VyL2luY2x1ZGUvYXRvbWljLmgK QEAgLTAsMCArMSwzMTAgQEAKKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9y LWxhdGVyCisvKgorICogU2ltcGxlIGludGVyZmFjZSBmb3IgYXRvbWljIG9wZXJhdGlvbnMuCisg KgorICogQ29weXJpZ2h0IChDKSAyMDEzIFJlZCBIYXQsIEluYy4KKyAqCisgKiBBdXRob3I6IFBh b2xvIEJvbnppbmkgPHBib256aW5pQHJlZGhhdC5jb20+CisgKgorICogVGhpcyB3b3JrIGlzIGxp Y2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdQTCwgdmVyc2lvbiAyIG9yIGxhdGVy LgorICogU2VlIHRoZSBDT1BZSU5HIGZpbGUgaW4gdGhlIHRvcC1sZXZlbCBkaXJlY3RvcnkuCisg KgorICogU2VlIGRvY3MvZGV2ZWwvYXRvbWljcy5yc3QgZm9yIGRpc2N1c3Npb24gYWJvdXQgdGhl IGd1YXJhbnRlZXMgZWFjaAorICogYXRvbWljIHByaW1pdGl2ZSBpcyBtZWFudCB0byBwcm92aWRl LgorICovCisKKyNpZm5kZWYgUUVNVV9BVE9NSUNfSAorI2RlZmluZSBRRU1VX0FUT01JQ19ICisK Ky8qIENvbXBpbGVyIGJhcnJpZXIgKi8KKyNkZWZpbmUgYmFycmllcigpICAgKHsgYXNtIHZvbGF0 aWxlKCIiIDo6OiAibWVtb3J5Iik7ICh2b2lkKTA7IH0pCisKKy8qIFRoZSB2YXJpYWJsZSB0aGF0 IHJlY2VpdmVzIHRoZSBvbGQgdmFsdWUgb2YgYW4gYXRvbWljYWxseS1hY2Nlc3NlZAorICogdmFy aWFibGUgbXVzdCBiZSBub24tcXVhbGlmaWVkLCBiZWNhdXNlIGF0b21pYyBidWlsdGlucyByZXR1 cm4gdmFsdWVzCisgKiB0aHJvdWdoIGEgcG9pbnRlci10eXBlIGFyZ3VtZW50IGFzIGluIF9fYXRv bWljX2xvYWQoJnZhciwgJm9sZCwgTU9ERUwpLgorICoKKyAqIFRoaXMgbWFjcm8gaGFzIHRvIGhh bmRsZSB0eXBlcyBzbWFsbGVyIHRoYW4gaW50IG1hbnVhbGx5LCBiZWNhdXNlIG9mCisgKiBpbXBs aWNpdCBwcm9tb3Rpb24uICBpbnQgYW5kIGxhcmdlciB0eXBlcywgYXMgd2VsbCBhcyBwb2ludGVy cywgY2FuIGJlCisgKiBjb252ZXJ0ZWQgdG8gYSBub24tcXVhbGlmaWVkIHR5cGUganVzdCBieSBh cHBseWluZyBhIGJpbmFyeSBvcGVyYXRvci4KKyAqLworI2RlZmluZSB0eXBlb2Zfc3RyaXBfcXVh bChleHByKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBcCisgIHR5cGVvZiggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBfX2J1aWx0aW5fY2hvb3NlX2V4 cHIoICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgXAorICAgICAgX19idWlsdGluX3R5cGVzX2NvbXBhdGlibGVfcCh0eXBlb2YoZXhwciksIGJv b2wpIHx8ICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIF9fYnVpbHRpbl90eXBl c19jb21wYXRpYmxlX3AodHlwZW9mKGV4cHIpLCBjb25zdCBib29sKSB8fCAgICAgICAgICAgICAg ICAgIFwKKyAgICAgICAgX19idWlsdGluX3R5cGVzX2NvbXBhdGlibGVfcCh0eXBlb2YoZXhwciks IHZvbGF0aWxlIGJvb2wpIHx8ICAgICAgICAgICAgICAgXAorICAgICAgICBfX2J1aWx0aW5fdHlw ZXNfY29tcGF0aWJsZV9wKHR5cGVvZihleHByKSwgY29uc3Qgdm9sYXRpbGUgYm9vbCksICAgICAg ICAgICBcCisgICAgICAgIChib29sKTEsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBfX2J1aWx0aW5fY2hvb3Nl X2V4cHIoICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgXAorICAgICAgX19idWlsdGluX3R5cGVzX2NvbXBhdGlibGVfcCh0eXBlb2YoZXhwciks IHNpZ25lZCBjaGFyKSB8fCAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIF9fYnVpbHRpbl90 eXBlc19jb21wYXRpYmxlX3AodHlwZW9mKGV4cHIpLCBjb25zdCBzaWduZWQgY2hhcikgfHwgICAg ICAgICAgIFwKKyAgICAgICAgX19idWlsdGluX3R5cGVzX2NvbXBhdGlibGVfcCh0eXBlb2YoZXhw ciksIHZvbGF0aWxlIHNpZ25lZCBjaGFyKSB8fCAgICAgICAgXAorICAgICAgICBfX2J1aWx0aW5f dHlwZXNfY29tcGF0aWJsZV9wKHR5cGVvZihleHByKSwgY29uc3Qgdm9sYXRpbGUgc2lnbmVkIGNo YXIpLCAgICBcCisgICAgICAgIChzaWduZWQgY2hhcikxLCAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBfX2J1aWx0aW5fY2hv b3NlX2V4cHIoICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgXAorICAgICAgX19idWlsdGluX3R5cGVzX2NvbXBhdGlibGVfcCh0eXBlb2YoZXhw ciksIHVuc2lnbmVkIGNoYXIpIHx8ICAgICAgICAgICAgICAgICBcCisgICAgICAgIF9fYnVpbHRp bl90eXBlc19jb21wYXRpYmxlX3AodHlwZW9mKGV4cHIpLCBjb25zdCB1bnNpZ25lZCBjaGFyKSB8 fCAgICAgICAgIFwKKyAgICAgICAgX19idWlsdGluX3R5cGVzX2NvbXBhdGlibGVfcCh0eXBlb2Yo ZXhwciksIHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIpIHx8ICAgICAgXAorICAgICAgICBfX2J1aWx0 aW5fdHlwZXNfY29tcGF0aWJsZV9wKHR5cGVvZihleHByKSwgY29uc3Qgdm9sYXRpbGUgdW5zaWdu ZWQgY2hhciksICBcCisgICAgICAgICh1bnNpZ25lZCBjaGFyKTEsICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBfX2J1aWx0aW5f Y2hvb3NlX2V4cHIoICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgXAorICAgICAgX19idWlsdGluX3R5cGVzX2NvbXBhdGlibGVfcCh0eXBlb2Yo ZXhwciksIHNpZ25lZCBzaG9ydCkgfHwgICAgICAgICAgICAgICAgICBcCisgICAgICAgIF9fYnVp bHRpbl90eXBlc19jb21wYXRpYmxlX3AodHlwZW9mKGV4cHIpLCBjb25zdCBzaWduZWQgc2hvcnQp IHx8ICAgICAgICAgIFwKKyAgICAgICAgX19idWlsdGluX3R5cGVzX2NvbXBhdGlibGVfcCh0eXBl b2YoZXhwciksIHZvbGF0aWxlIHNpZ25lZCBzaG9ydCkgfHwgICAgICAgXAorICAgICAgICBfX2J1 aWx0aW5fdHlwZXNfY29tcGF0aWJsZV9wKHR5cGVvZihleHByKSwgY29uc3Qgdm9sYXRpbGUgc2ln bmVkIHNob3J0KSwgICBcCisgICAgICAgIChzaWduZWQgc2hvcnQpMSwgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBfX2J1aWx0 aW5fY2hvb3NlX2V4cHIoICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgXAorICAgICAgX19idWlsdGluX3R5cGVzX2NvbXBhdGlibGVfcCh0eXBl b2YoZXhwciksIHVuc2lnbmVkIHNob3J0KSB8fCAgICAgICAgICAgICAgICBcCisgICAgICAgIF9f YnVpbHRpbl90eXBlc19jb21wYXRpYmxlX3AodHlwZW9mKGV4cHIpLCBjb25zdCB1bnNpZ25lZCBz aG9ydCkgfHwgICAgICAgIFwKKyAgICAgICAgX19idWlsdGluX3R5cGVzX2NvbXBhdGlibGVfcCh0 eXBlb2YoZXhwciksIHZvbGF0aWxlIHVuc2lnbmVkIHNob3J0KSB8fCAgICAgXAorICAgICAgICBf X2J1aWx0aW5fdHlwZXNfY29tcGF0aWJsZV9wKHR5cGVvZihleHByKSwgY29uc3Qgdm9sYXRpbGUg dW5zaWduZWQgc2hvcnQpLCBcCisgICAgICAgICh1bnNpZ25lZCBzaG9ydCkxLCAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIChl eHByKSswKSkpKSkpCisKKyNpZm5kZWYgX19BVE9NSUNfUkVMQVhFRAorI2Vycm9yICJFeHBlY3Rp bmcgQzExIGF0b21pYyBvcHMiCisjZW5kaWYKKworLyogTWFudWFsIG1lbW9yeSBiYXJyaWVycwor ICoKKyAqX19hdG9taWNfdGhyZWFkX2ZlbmNlIGRvZXMgbm90IGluY2x1ZGUgYSBjb21waWxlciBi YXJyaWVyOyBpbnN0ZWFkLAorICogdGhlIGJhcnJpZXIgaXMgcGFydCBvZiBfX2F0b21pY19sb2Fk L19fYXRvbWljX3N0b3JlJ3MgInZvbGF0aWxlLWxpa2UiCisgKiBzZW1hbnRpY3MuIElmIHNtcF93 bWIoKSBpcyBhIG5vLW9wLCBhYnNlbmNlIG9mIHRoZSBiYXJyaWVyIG1lYW5zIHRoYXQKKyAqIHRo ZSBjb21waWxlciBpcyBmcmVlIHRvIHJlb3JkZXIgc3RvcmVzIG9uIGVhY2ggc2lkZSBvZiB0aGUg YmFycmllci4KKyAqIEFkZCBvbmUgaGVyZSwgYW5kIHNpbWlsYXJseSBpbiBzbXBfcm1iKCkgYW5k IHNtcF9yZWFkX2JhcnJpZXJfZGVwZW5kcygpLgorICovCisKKyNkZWZpbmUgc21wX21iKCkgICAg ICAgICAgICAgICAgICAgICAoeyBiYXJyaWVyKCk7IF9fYXRvbWljX3RocmVhZF9mZW5jZShfX0FU T01JQ19TRVFfQ1NUKTsgfSkKKyNkZWZpbmUgc21wX21iX3JlbGVhc2UoKSAgICAgICAgICAgICAo eyBiYXJyaWVyKCk7IF9fYXRvbWljX3RocmVhZF9mZW5jZShfX0FUT01JQ19SRUxFQVNFKTsgfSkK KyNkZWZpbmUgc21wX21iX2FjcXVpcmUoKSAgICAgICAgICAgICAoeyBiYXJyaWVyKCk7IF9fYXRv bWljX3RocmVhZF9mZW5jZShfX0FUT01JQ19BQ1FVSVJFKTsgfSkKKworLyogTW9zdCBjb21waWxl cnMgY3VycmVudGx5IHRyZWF0IGNvbnN1bWUgYW5kIGFjcXVpcmUgdGhlIHNhbWUsIGJ1dCByZWFs bHkKKyAqIG5vIHByb2Nlc3NvcnMgZXhjZXB0IEFscGhhIG5lZWQgYSBiYXJyaWVyIGhlcmUuICBM ZWF2ZSBpdCBpbiBpZgorICogdXNpbmcgVGhyZWFkIFNhbml0aXplciB0byBhdm9pZCB3YXJuaW5n cywgb3RoZXJ3aXNlIG9wdGltaXplIGl0IGF3YXkuCisgKi8KKyNpZiBkZWZpbmVkKF9fU0FOSVRJ WkVfVEhSRUFEX18pCisjZGVmaW5lIHNtcF9yZWFkX2JhcnJpZXJfZGVwZW5kcygpICAgKHsgYmFy cmllcigpOyBfX2F0b21pY190aHJlYWRfZmVuY2UoX19BVE9NSUNfQ09OU1VNRSk7IH0pCisjZWxp ZiBkZWZpbmVkKF9fYWxwaGFfXykKKyNkZWZpbmUgc21wX3JlYWRfYmFycmllcl9kZXBlbmRzKCkg ICBhc20gdm9sYXRpbGUoIm1iIjo6OiJtZW1vcnkiKQorI2Vsc2UKKyNkZWZpbmUgc21wX3JlYWRf YmFycmllcl9kZXBlbmRzKCkgICBiYXJyaWVyKCkKKyNlbmRpZgorCisvKgorICogQSBzaWduYWwg YmFycmllciBmb3JjZXMgYWxsIHBlbmRpbmcgbG9jYWwgbWVtb3J5IG9wcyB0byBiZSBvYnNlcnZl ZCBiZWZvcmUKKyAqIGEgU0lHU0VHViBpcyBkZWxpdmVyZWQgdG8gdGhlICpzYW1lKiB0aHJlYWQu ICBJbiBwcmFjdGljZSB0aGlzIGlzIGV4YWN0bHkKKyAqIHRoZSBzYW1lIGFzIGJhcnJpZXIoKSwg YnV0IHNpbmNlIHdlIGhhdmUgdGhlIGNvcnJlY3QgYnVpbHRpbiwgdXNlIGl0LgorICovCisjZGVm aW5lIHNpZ25hbF9iYXJyaWVyKCkgICAgX19hdG9taWNfc2lnbmFsX2ZlbmNlKF9fQVRPTUlDX1NF UV9DU1QpCisKKy8qIFNhbml0eSBjaGVjayB0aGF0IHRoZSBzaXplIG9mIGFuIGF0b21pYyBvcGVy YXRpb24gaXNuJ3QgIm92ZXJseSBsYXJnZSIuCisgKiBEZXNwaXRlIHRoZSBmYWN0IHRoYXQgZS5n LiBpNjg2IGhhcyA2NC1iaXQgYXRvbWljIG9wZXJhdGlvbnMsIHdlIGRvIG5vdAorICogd2FudCB0 byB1c2UgdGhlbSBiZWNhdXNlIHdlIG91Z2h0IG5vdCBuZWVkIHRoZW0sIGFuZCB0aGlzIGxldHMg dXMgZG8gYQorICogYml0IG9mIHNhbml0eSBjaGVja2luZyB0aGF0IG90aGVyIDMyLWJpdCBob3N0 cyBtaWdodCBidWlsZC4KKyAqCisgKiBUaGF0IHNhaWQsIHdlIGhhdmUgYSBwcm9ibGVtIG9uIDY0 LWJpdCBJTFAzMiBob3N0cyBpbiB0aGF0IGluIG9yZGVyIHRvCisgKiBzeW5jIHdpdGggVENHX09W RVJTSVpFRF9HVUVTVCwgdGhpcyBtdXN0IG1hdGNoIFRDR19UQVJHRVRfUkVHX0JJVFMuCisgKiBX ZSdkIHByZWZlciBub3Qgd2FudCB0byBwdWxsIGluIGV2ZXJ5dGhpbmcgZWxzZSBUQ0cgcmVsYXRl ZCwgc28gaGFuZGxlCisgKiB0aG9zZSBmZXcgY2FzZXMgYnkgaGFuZC4KKyAqCisgKiBOb3RlIHRo YXQgeDMyIGlzIGZ1bGx5IGRldGVjdGVkIHdpdGggX194ODZfNjRfXyArIF9JTFAzMiwgYW5kIHRo YXQgZm9yCisgKiBTcGFyYyB3ZSBhbHdheXMgZm9yY2UgdGhlIHVzZSBvZiBzcGFyY3Y5IGluIGNv bmZpZ3VyZS4gTUlQUyBuMzIgKElMUDMyKSAmCisgKiBuNjQgKExQNjQpIEFCSXMgYXJlIGJvdGgg ZGV0ZWN0ZWQgdXNpbmcgX19taXBzNjQuCisgKi8KKyNpZiBkZWZpbmVkKF9feDg2XzY0X18pIHx8 IGRlZmluZWQoX19zcGFyY19fKSB8fCBkZWZpbmVkKF9fbWlwczY0KQorIyBkZWZpbmUgQVRPTUlD X1JFR19TSVpFICA4CisjZWxzZQorIyBkZWZpbmUgQVRPTUlDX1JFR19TSVpFICBzaXplb2Yodm9p ZCAqKQorI2VuZGlmCisKKy8qIFdlYWsgYXRvbWljIG9wZXJhdGlvbnMgcHJldmVudCB0aGUgY29t cGlsZXIgbW92aW5nIG90aGVyCisgKiBsb2Fkcy9zdG9yZXMgcGFzdCB0aGUgYXRvbWljIG9wZXJh dGlvbiBsb2FkL3N0b3JlLiBIb3dldmVyIHRoZXJlIGlzCisgKiBubyBleHBsaWNpdCBtZW1vcnkg YmFycmllciBmb3IgdGhlIHByb2Nlc3Nvci4KKyAqCisgKiBUaGUgQzExIG1lbW9yeSBtb2RlbCBz YXlzIHRoYXQgdmFyaWFibGVzIHRoYXQgYXJlIGFjY2Vzc2VkIGZyb20KKyAqIGRpZmZlcmVudCB0 aHJlYWRzIHNob3VsZCBhdCBsZWFzdCBiZSBkb25lIHdpdGggX19BVE9NSUNfUkVMQVhFRAorICog cHJpbWl0aXZlcyBvciB0aGUgcmVzdWx0IGlzIHVuZGVmaW5lZC4gR2VuZXJhbGx5IHRoaXMgaGFz IGxpdHRsZSB0bworICogbm8gZWZmZWN0IG9uIHRoZSBnZW5lcmF0ZWQgY29kZSBidXQgbm90IHVz aW5nIHRoZSBhdG9taWMgcHJpbWl0aXZlcworICogd2lsbCBnZXQgZmxhZ2dlZCBieSBzYW5pdGl6 ZXJzIGFzIGEgdmlvbGF0aW9uLgorICovCisjZGVmaW5lIHFhdG9taWNfcmVhZF9fbm9jaGVjayhw dHIpIFwKKyAgICBfX2F0b21pY19sb2FkX24ocHRyLCBfX0FUT01JQ19SRUxBWEVEKQorCisjZGVm aW5lIHFhdG9taWNfcmVhZChwdHIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAg ICh7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAg ICBRRU1VX0JVSUxEX0JVR19PTihzaXplb2YoKnB0cikgPiBBVE9NSUNfUkVHX1NJWkUpOyBcCisg ICAgcWF0b21pY19yZWFkX19ub2NoZWNrKHB0cik7ICAgICAgICAgICAgICAgICAgICAgICAgXAor ICAgIH0pCisKKyNkZWZpbmUgcWF0b21pY19zZXRfX25vY2hlY2socHRyLCBpKSBcCisgICAgX19h dG9taWNfc3RvcmVfbihwdHIsIGksIF9fQVRPTUlDX1JFTEFYRUQpCisKKyNkZWZpbmUgcWF0b21p Y19zZXQocHRyLCBpKSAgZG8geyAgICAgICAgICAgICAgICAgICAgICBcCisgICAgUUVNVV9CVUlM RF9CVUdfT04oc2l6ZW9mKCpwdHIpID4gQVRPTUlDX1JFR19TSVpFKTsgXAorICAgIHFhdG9taWNf c2V0X19ub2NoZWNrKHB0ciwgaSk7ICAgICAgICAgICAgICAgICAgICAgIFwKK30gd2hpbGUoMCkK KworLyogU2VlIGFib3ZlOiBtb3N0IGNvbXBpbGVycyBjdXJyZW50bHkgdHJlYXQgY29uc3VtZSBh bmQgYWNxdWlyZSB0aGUKKyAqIHNhbWUsIGJ1dCB0aGlzIHNsb3dzIGRvd24gcWF0b21pY19yY3Vf cmVhZCB1bm5lY2Vzc2FyaWx5LgorICovCisjaWZkZWYgX19TQU5JVElaRV9USFJFQURfXworI2Rl ZmluZSBxYXRvbWljX3JjdV9yZWFkX19ub2NoZWNrKHB0ciwgdmFscHRyKSAgICAgICAgICAgXAor ICAgIF9fYXRvbWljX2xvYWQocHRyLCB2YWxwdHIsIF9fQVRPTUlDX0NPTlNVTUUpOworI2Vsc2UK KyNkZWZpbmUgcWF0b21pY19yY3VfcmVhZF9fbm9jaGVjayhwdHIsIHZhbHB0cikgICAgICAgICAg IFwKKyAgICBfX2F0b21pY19sb2FkKHB0ciwgdmFscHRyLCBfX0FUT01JQ19SRUxBWEVEKTsgICAg ICAgIFwKKyAgICBzbXBfcmVhZF9iYXJyaWVyX2RlcGVuZHMoKTsKKyNlbmRpZgorCisjZGVmaW5l IHFhdG9taWNfcmN1X3JlYWQocHRyKSAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICh7 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBR RU1VX0JVSUxEX0JVR19PTihzaXplb2YoKnB0cikgPiBBVE9NSUNfUkVHX1NJWkUpOyBcCisgICAg dHlwZW9mX3N0cmlwX3F1YWwoKnB0cikgX3ZhbDsgICAgICAgICAgICAgICAgICAgICAgXAorICAg IHFhdG9taWNfcmN1X3JlYWRfX25vY2hlY2socHRyLCAmX3ZhbCk7ICAgICAgICAgICAgIFwKKyAg ICBfdmFsOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisg ICAgfSkKKworI2RlZmluZSBxYXRvbWljX3JjdV9zZXQocHRyLCBpKSBkbyB7ICAgICAgICAgICAg ICAgICAgIFwKKyAgICBRRU1VX0JVSUxEX0JVR19PTihzaXplb2YoKnB0cikgPiBBVE9NSUNfUkVH X1NJWkUpOyBcCisgICAgX19hdG9taWNfc3RvcmVfbihwdHIsIGksIF9fQVRPTUlDX1JFTEVBU0Up OyAgICAgICAgXAorfSB3aGlsZSgwKQorCisjZGVmaW5lIHFhdG9taWNfbG9hZF9hY3F1aXJlKHB0 cikgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAoeyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIFFFTVVfQlVJTERfQlVHX09OKHNpemVv ZigqcHRyKSA+IEFUT01JQ19SRUdfU0laRSk7ICBcCisgICAgdHlwZW9mX3N0cmlwX3F1YWwoKnB0 cikgX3ZhbDsgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBfX2F0b21pY19sb2FkKHB0ciwg Jl92YWwsIF9fQVRPTUlDX0FDUVVJUkUpOyAgICAgICAgXAorICAgIF92YWw7ICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgfSkKKworI2RlZmluZSBx YXRvbWljX3N0b3JlX3JlbGVhc2UocHRyLCBpKSAgZG8geyAgICAgICAgICAgICBcCisgICAgUUVN VV9CVUlMRF9CVUdfT04oc2l6ZW9mKCpwdHIpID4gQVRPTUlDX1JFR19TSVpFKTsgIFwKKyAgICBf X2F0b21pY19zdG9yZV9uKHB0ciwgaSwgX19BVE9NSUNfUkVMRUFTRSk7ICAgICAgICAgXAorfSB3 aGlsZSgwKQorCisKKy8qIEFsbCB0aGUgcmVtYWluaW5nIG9wZXJhdGlvbnMgYXJlIGZ1bGx5IHNl cXVlbnRpYWxseSBjb25zaXN0ZW50ICovCisKKyNkZWZpbmUgcWF0b21pY194Y2hnX19ub2NoZWNr KHB0ciwgaSkgICAgKHsgICAgICAgICAgICAgICAgIFwKKyAgICBfX2F0b21pY19leGNoYW5nZV9u KHB0ciwgKGkpLCBfX0FUT01JQ19TRVFfQ1NUKTsgICAgICAgIFwKK30pCisKKyNkZWZpbmUgcWF0 b21pY194Y2hnKHB0ciwgaSkgICAgKHsgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBR RU1VX0JVSUxEX0JVR19PTihzaXplb2YoKnB0cikgPiBBVE9NSUNfUkVHX1NJWkUpOyAgICAgIFwK KyAgICBxYXRvbWljX3hjaGdfX25vY2hlY2socHRyLCBpKTsgICAgICAgICAgICAgICAgICAgICAg ICAgIFwKK30pCisKKy8qIFJldHVybnMgdGhlIGV2ZW50dWFsIHZhbHVlLCBmYWlsZWQgb3Igbm90 ICovCisjZGVmaW5lIHFhdG9taWNfY21weGNoZ19fbm9jaGVjayhwdHIsIG9sZCwgbmV3KSAgICAo eyAgICAgICAgICAgICAgICAgICBcCisgICAgdHlwZW9mX3N0cmlwX3F1YWwoKnB0cikgX29sZCA9 IChvbGQpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgKHZvaWQpX19hdG9t aWNfY29tcGFyZV9leGNoYW5nZV9uKHB0ciwgJl9vbGQsIG5ldywgZmFsc2UsICAgICAgICAgICBc CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX0FUT01JQ19TRVFfQ1NULCBfX0FUT01J Q19TRVFfQ1NUKTsgICAgICBcCisgICAgX29sZDsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCit9KQorCisjZGVmaW5lIHFhdG9t aWNfY21weGNoZyhwdHIsIG9sZCwgbmV3KSAgICAoeyAgICAgICAgICAgICAgICAgICAgICAgICAg ICBcCisgICAgUUVNVV9CVUlMRF9CVUdfT04oc2l6ZW9mKCpwdHIpID4gQVRPTUlDX1JFR19TSVpF KTsgICAgICAgICAgICAgICAgICBcCisgICAgcWF0b21pY19jbXB4Y2hnX19ub2NoZWNrKHB0ciwg b2xkLCBuZXcpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCit9KQorCisvKiBQcm92aWRl IHNob3J0ZXIgbmFtZXMgZm9yIEdDQyBhdG9taWMgYnVpbHRpbnMsIHJldHVybiBvbGQgdmFsdWUg Ki8KKyNkZWZpbmUgcWF0b21pY19mZXRjaF9pbmMocHRyKSAgX19hdG9taWNfZmV0Y2hfYWRkKHB0 ciwgMSwgX19BVE9NSUNfU0VRX0NTVCkKKyNkZWZpbmUgcWF0b21pY19mZXRjaF9kZWMocHRyKSAg X19hdG9taWNfZmV0Y2hfc3ViKHB0ciwgMSwgX19BVE9NSUNfU0VRX0NTVCkKKworI2RlZmluZSBx YXRvbWljX2ZldGNoX2FkZChwdHIsIG4pIF9fYXRvbWljX2ZldGNoX2FkZChwdHIsIG4sIF9fQVRP TUlDX1NFUV9DU1QpCisjZGVmaW5lIHFhdG9taWNfZmV0Y2hfc3ViKHB0ciwgbikgX19hdG9taWNf ZmV0Y2hfc3ViKHB0ciwgbiwgX19BVE9NSUNfU0VRX0NTVCkKKyNkZWZpbmUgcWF0b21pY19mZXRj aF9hbmQocHRyLCBuKSBfX2F0b21pY19mZXRjaF9hbmQocHRyLCBuLCBfX0FUT01JQ19TRVFfQ1NU KQorI2RlZmluZSBxYXRvbWljX2ZldGNoX29yKHB0ciwgbikgIF9fYXRvbWljX2ZldGNoX29yKHB0 ciwgbiwgX19BVE9NSUNfU0VRX0NTVCkKKyNkZWZpbmUgcWF0b21pY19mZXRjaF94b3IocHRyLCBu KSBfX2F0b21pY19mZXRjaF94b3IocHRyLCBuLCBfX0FUT01JQ19TRVFfQ1NUKQorCisjZGVmaW5l IHFhdG9taWNfaW5jX2ZldGNoKHB0cikgICAgX19hdG9taWNfYWRkX2ZldGNoKHB0ciwgMSwgX19B VE9NSUNfU0VRX0NTVCkKKyNkZWZpbmUgcWF0b21pY19kZWNfZmV0Y2gocHRyKSAgICBfX2F0b21p Y19zdWJfZmV0Y2gocHRyLCAxLCBfX0FUT01JQ19TRVFfQ1NUKQorI2RlZmluZSBxYXRvbWljX2Fk ZF9mZXRjaChwdHIsIG4pIF9fYXRvbWljX2FkZF9mZXRjaChwdHIsIG4sIF9fQVRPTUlDX1NFUV9D U1QpCisjZGVmaW5lIHFhdG9taWNfc3ViX2ZldGNoKHB0ciwgbikgX19hdG9taWNfc3ViX2ZldGNo KHB0ciwgbiwgX19BVE9NSUNfU0VRX0NTVCkKKyNkZWZpbmUgcWF0b21pY19hbmRfZmV0Y2gocHRy LCBuKSBfX2F0b21pY19hbmRfZmV0Y2gocHRyLCBuLCBfX0FUT01JQ19TRVFfQ1NUKQorI2RlZmlu ZSBxYXRvbWljX29yX2ZldGNoKHB0ciwgbikgIF9fYXRvbWljX29yX2ZldGNoKHB0ciwgbiwgX19B VE9NSUNfU0VRX0NTVCkKKyNkZWZpbmUgcWF0b21pY194b3JfZmV0Y2gocHRyLCBuKSBfX2F0b21p Y194b3JfZmV0Y2gocHRyLCBuLCBfX0FUT01JQ19TRVFfQ1NUKQorCisvKiBBbmQgZXZlbiBzaG9y dGVyIG5hbWVzIHRoYXQgcmV0dXJuIHZvaWQuICAqLworI2RlZmluZSBxYXRvbWljX2luYyhwdHIp IFwKKyAgICAoKHZvaWQpIF9fYXRvbWljX2ZldGNoX2FkZChwdHIsIDEsIF9fQVRPTUlDX1NFUV9D U1QpKQorI2RlZmluZSBxYXRvbWljX2RlYyhwdHIpIFwKKyAgICAoKHZvaWQpIF9fYXRvbWljX2Zl dGNoX3N1YihwdHIsIDEsIF9fQVRPTUlDX1NFUV9DU1QpKQorI2RlZmluZSBxYXRvbWljX2FkZChw dHIsIG4pIFwKKyAgICAoKHZvaWQpIF9fYXRvbWljX2ZldGNoX2FkZChwdHIsIG4sIF9fQVRPTUlD X1NFUV9DU1QpKQorI2RlZmluZSBxYXRvbWljX3N1YihwdHIsIG4pIFwKKyAgICAoKHZvaWQpIF9f YXRvbWljX2ZldGNoX3N1YihwdHIsIG4sIF9fQVRPTUlDX1NFUV9DU1QpKQorI2RlZmluZSBxYXRv bWljX2FuZChwdHIsIG4pIFwKKyAgICAoKHZvaWQpIF9fYXRvbWljX2ZldGNoX2FuZChwdHIsIG4s IF9fQVRPTUlDX1NFUV9DU1QpKQorI2RlZmluZSBxYXRvbWljX29yKHB0ciwgbikgXAorICAgICgo dm9pZCkgX19hdG9taWNfZmV0Y2hfb3IocHRyLCBuLCBfX0FUT01JQ19TRVFfQ1NUKSkKKyNkZWZp bmUgcWF0b21pY194b3IocHRyLCBuKSBcCisgICAgKCh2b2lkKSBfX2F0b21pY19mZXRjaF94b3Io cHRyLCBuLCBfX0FUT01JQ19TRVFfQ1NUKSkKKworI2RlZmluZSBzbXBfd21iKCkgICBzbXBfbWJf cmVsZWFzZSgpCisjZGVmaW5lIHNtcF9ybWIoKSAgIHNtcF9tYl9hY3F1aXJlKCkKKworLyogcWF0 b21pY19tYl9yZWFkL3NldCBzZW1hbnRpY3MgbWFwIEphdmEgdm9sYXRpbGUgdmFyaWFibGVzLiBU aGV5IGFyZQorICogbGVzcyBleHBlbnNpdmUgb24gc29tZSBwbGF0Zm9ybXMgKG5vdGFibHkgUE9X RVIpIHRoYW4gZnVsbHkKKyAqIHNlcXVlbnRpYWxseSBjb25zaXN0ZW50IG9wZXJhdGlvbnMuCisg KgorICogQXMgbG9uZyBhcyB0aGV5IGFyZSB1c2VkIGFzIHBhaXJlZCBvcGVyYXRpb25zIHRoZXkg YXJlIHNhZmUgdG8KKyAqIHVzZS4gU2VlIGRvY3MvZGV2ZWwvYXRvbWljcy5yc3QgZm9yIG1vcmUg ZGlzY3Vzc2lvbi4KKyAqLworCisjZGVmaW5lIHFhdG9taWNfbWJfcmVhZChwdHIpICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBcCisgICAgcWF0b21pY19sb2FkX2FjcXVpcmUocHRyKQorCisj aWYgIWRlZmluZWQoX19TQU5JVElaRV9USFJFQURfXykgJiYgXAorICAgIChkZWZpbmVkKF9faTM4 Nl9fKSB8fCBkZWZpbmVkKF9feDg2XzY0X18pIHx8IGRlZmluZWQoX19zMzkweF9fKSkKKy8qIFRo aXMgaXMgbW9yZSBlZmZpY2llbnQgdGhhbiBhIHN0b3JlIHBsdXMgYSBmZW5jZS4gICovCisjIGRl ZmluZSBxYXRvbWljX21iX3NldChwdHIsIGkpICAoKHZvaWQpcWF0b21pY194Y2hnKHB0ciwgaSkp CisjZWxzZQorIyBkZWZpbmUgcWF0b21pY19tYl9zZXQocHRyLCBpKSBcCisgICAoeyBxYXRvbWlj X3N0b3JlX3JlbGVhc2UocHRyLCBpKTsgc21wX21iKCk7IH0pCisjZW5kaWYKKworI2RlZmluZSBx YXRvbWljX2ZldGNoX2luY19ub256ZXJvKHB0cikgKHsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgXAorICAgIHR5cGVvZl9zdHJpcF9xdWFsKCpwdHIpIF9vbGRuID0gcWF0b21pY19yZWFk KHB0cik7ICAgICAgICAgICAgICAgICAgXAorICAgIHdoaWxlIChfb2xkbiAmJiBxYXRvbWljX2Nt cHhjaGcocHRyLCBfb2xkbiwgX29sZG4gKyAxKSAhPSBfb2xkbikgeyAgXAorICAgICAgICBfb2xk biA9IHFhdG9taWNfcmVhZChwdHIpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgXAorICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgXAorICAgIF9vbGRuOyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorfSkKKworLyoKKyAqIEFi c3RyYWN0aW9ucyB0byBhY2Nlc3MgYXRvbWljYWxseSAoaS5lLiAib25jZSIpIGk2NC91NjQgdmFy aWFibGVzLgorICoKKyAqIFRoZSBpMzg2IGFiaSBpcyBvZGQgaW4gdGhhdCBieSBkZWZhdWx0IG1l bWJlcnMgYXJlIG9ubHkgYWxpZ25lZCB0bworICogNCBieXRlcywgd2hpY2ggbWVhbnMgdGhhdCA4 LWJ5dGUgdHlwZXMgY2FuIHdpbmQgdXAgbWlzLWFsaWduZWQuCisgKiBDbGFuZyB3aWxsIHRoZW4g d2FybiBhYm91dCB0aGlzLCBhbmQgZW1pdCBhIGNhbGwgaW50byBsaWJhdG9taWMuCisgKgorICog VXNlIG9mIHRoZXNlIHR5cGVzIGluIHN0cnVjdHVyZXMgd2hlbiB0aGV5IHdpbGwgYmUgdXNlZCB3 aXRoIGF0b21pYworICogb3BlcmF0aW9ucyBjYW4gYXZvaWQgdGhpcy4KKyAqLwordHlwZWRlZiBp bnQ2NF90IGFsaWduZWRfaW50NjRfdCBfX2F0dHJpYnV0ZV9fKChhbGlnbmVkKDgpKSk7Cit0eXBl ZGVmIHVpbnQ2NF90IGFsaWduZWRfdWludDY0X3QgX19hdHRyaWJ1dGVfXygoYWxpZ25lZCg4KSkp OworCisjaWZkZWYgQ09ORklHX0FUT01JQzY0CisvKiBVc2UgX19ub2NoZWNrIGJlY2F1c2Ugc2l6 ZW9mKHZvaWQgKikgbWlnaHQgYmUgPCBzaXplb2YodTY0KSAqLworI2RlZmluZSBxYXRvbWljX3Jl YWRfaTY0KFApIFwKKyAgICBfR2VuZXJpYygqKFApLCBpbnQ2NF90OiBxYXRvbWljX3JlYWRfX25v Y2hlY2soUCkpCisjZGVmaW5lIHFhdG9taWNfcmVhZF91NjQoUCkgXAorICAgIF9HZW5lcmljKCoo UCksIHVpbnQ2NF90OiBxYXRvbWljX3JlYWRfX25vY2hlY2soUCkpCisjZGVmaW5lIHFhdG9taWNf c2V0X2k2NChQLCBWKSBcCisgICAgX0dlbmVyaWMoKihQKSwgaW50NjRfdDogcWF0b21pY19zZXRf X25vY2hlY2soUCwgVikpCisjZGVmaW5lIHFhdG9taWNfc2V0X3U2NChQLCBWKSBcCisgICAgX0dl bmVyaWMoKihQKSwgdWludDY0X3Q6IHFhdG9taWNfc2V0X19ub2NoZWNrKFAsIFYpKQorCitzdGF0 aWMgaW5saW5lIHZvaWQgcWF0b21pYzY0X2luaXQodm9pZCkKK3sKK30KKyNlbHNlIC8qICFDT05G SUdfQVRPTUlDNjQgKi8KK2ludDY0X3QgIHFhdG9taWNfcmVhZF9pNjQoY29uc3QgaW50NjRfdCAq cHRyKTsKK3VpbnQ2NF90IHFhdG9taWNfcmVhZF91NjQoY29uc3QgdWludDY0X3QgKnB0cik7Cit2 b2lkIHFhdG9taWNfc2V0X2k2NChpbnQ2NF90ICpwdHIsIGludDY0X3QgdmFsKTsKK3ZvaWQgcWF0 b21pY19zZXRfdTY0KHVpbnQ2NF90ICpwdHIsIHVpbnQ2NF90IHZhbCk7Cit2b2lkIHFhdG9taWM2 NF9pbml0KHZvaWQpOworI2VuZGlmIC8qICFDT05GSUdfQVRPTUlDNjQgKi8KKworI2VuZGlmIC8q IFFFTVVfQVRPTUlDX0ggKi8KZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvcm9hZHRlc3Qvc3Jj L2xpYnZob3N0LXVzZXIvbGlidmhvc3QtdXNlci5jIGIvdG9vbHMvdGVzdGluZy9yb2FkdGVzdC9z cmMvbGlidmhvc3QtdXNlci9saWJ2aG9zdC11c2VyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k ZXggMDAwMDAwMDAwMDAwLi4xZTZkZGRmYjEwZGYKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy90 ZXN0aW5nL3JvYWR0ZXN0L3NyYy9saWJ2aG9zdC11c2VyL2xpYnZob3N0LXVzZXIuYwpAQCAtMCww ICsxLDI4ODUgQEAKKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9yLWxhdGVy CisvKgorICogVmhvc3QgVXNlciBsaWJyYXJ5CisgKgorICogQ29weXJpZ2h0IElCTSwgQ29ycC4g MjAwNworICogQ29weXJpZ2h0IChjKSAyMDE2IFJlZCBIYXQsIEluYy4KKyAqCisgKiBBdXRob3Jz OgorICogIEFudGhvbnkgTGlndW9yaSA8YWxpZ3VvcmlAdXMuaWJtLmNvbT4KKyAqICBNYXJjLUFu ZHLDqSBMdXJlYXUgPG1sdXJlYXVAcmVkaGF0LmNvbT4KKyAqICBWaWN0b3IgS2FwbGFuc2t5IDx2 aWN0b3JrQHJlZGhhdC5jb20+CisgKgorICogVGhpcyB3b3JrIGlzIGxpY2Vuc2VkIHVuZGVyIHRo ZSB0ZXJtcyBvZiB0aGUgR05VIEdQTCwgdmVyc2lvbiAyIG9yCisgKiBsYXRlci4gIFNlZSB0aGUg Q09QWUlORyBmaWxlIGluIHRoZSB0b3AtbGV2ZWwgZGlyZWN0b3J5LgorICovCisKKy8qIHRoaXMg Y29kZSBhdm9pZHMgR0xpYiBkZXBlbmRlbmN5ICovCisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5j bHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRlIDxzdGRhcmcuaD4K KyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPGFzc2Vy dC5oPgorI2luY2x1ZGUgPGludHR5cGVzLmg+CisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5j bHVkZSA8c3lzL3NvY2tldC5oPgorI2luY2x1ZGUgPHN5cy9ldmVudGZkLmg+CisjaW5jbHVkZSA8 c3lzL21tYW4uaD4KKyNpbmNsdWRlIDxlbmRpYW4uaD4KKworI2lmIGRlZmluZWQoX19saW51eF9f KQorI2luY2x1ZGUgPHN5cy9zeXNjYWxsLmg+CisjaW5jbHVkZSA8ZmNudGwuaD4KKyNpbmNsdWRl IDxzeXMvaW9jdGwuaD4KKyNpbmNsdWRlIDxsaW51eC92aG9zdC5oPgorCisjaWZkZWYgX19OUl91 c2VyZmF1bHRmZAorI2luY2x1ZGUgPGxpbnV4L3VzZXJmYXVsdGZkLmg+CisjZW5kaWYKKworI2Vu ZGlmCisKKyNpbmNsdWRlICJpbmNsdWRlL2F0b21pYy5oIgorCisjaW5jbHVkZSAibGlidmhvc3Qt dXNlci5oIgorCisvKiB1c3VhbGx5IHByb3ZpZGVkIGJ5IEdMaWIgKi8KKyNpZm5kZWYgTUlOCisj ZGVmaW5lIE1JTih4LCB5KSAoeyAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAg ICAgICB0eXBlb2YoeCkgX21pbjEgPSAoeCk7ICAgICAgICAgICAgICBcCisgICAgICAgICAgICB0 eXBlb2YoeSkgX21pbjIgPSAoeSk7ICAgICAgICAgICAgICBcCisgICAgICAgICAgICAodm9pZCkg KCZfbWluMSA9PSAmX21pbjIpOyAgICAgICAgICBcCisgICAgICAgICAgICBfbWluMSA8IF9taW4y ID8gX21pbjEgOiBfbWluMjsgfSkKKyNlbmRpZgorCisvKiBSb3VuZCBudW1iZXIgZG93biB0byBt dWx0aXBsZSAqLworI2RlZmluZSBBTElHTl9ET1dOKG4sIG0pICgobikgLyAobSkgKiAobSkpCisK Ky8qIFJvdW5kIG51bWJlciB1cCB0byBtdWx0aXBsZSAqLworI2RlZmluZSBBTElHTl9VUChuLCBt KSBBTElHTl9ET1dOKChuKSArIChtKSAtIDEsIChtKSkKKworI2lmbmRlZiB1bmxpa2VseQorI2Rl ZmluZSB1bmxpa2VseSh4KSAgIF9fYnVpbHRpbl9leHBlY3QoISEoeCksIDApCisjZW5kaWYKKwor LyogQWxpZ24gZWFjaCByZWdpb24gdG8gY2FjaGUgbGluZSBzaXplIGluIGluZmxpZ2h0IGJ1ZmZl ciAqLworI2RlZmluZSBJTkZMSUdIVF9BTElHTk1FTlQgNjQKKworLyogVGhlIHZlcnNpb24gb2Yg aW5mbGlnaHQgYnVmZmVyICovCisjZGVmaW5lIElORkxJR0hUX1ZFUlNJT04gMQorCisvKiBUaGUg dmVyc2lvbiBvZiB0aGUgcHJvdG9jb2wgd2Ugc3VwcG9ydCAqLworI2RlZmluZSBWSE9TVF9VU0VS X1ZFUlNJT04gMQorI2RlZmluZSBMSUJWSE9TVF9VU0VSX0RFQlVHIDAKKworI2RlZmluZSBEUFJJ TlQoLi4uKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGRvIHsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBpZiAoTElCVkhPU1RfVVNF Ul9ERUJVRykgeyAgICAgICAgICAgICAgXAorICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsIF9f VkFfQVJHU19fKTsgICAgICAgIFwKKyAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIFwKKyAgICB9IHdoaWxlICgwKQorCitzdGF0aWMgaW5saW5lCitib29sIGhh c19mZWF0dXJlKHVpbnQ2NF90IGZlYXR1cmVzLCB1bnNpZ25lZCBpbnQgZmJpdCkKK3sKKyAgICBh c3NlcnQoZmJpdCA8IDY0KTsKKyAgICByZXR1cm4gISEoZmVhdHVyZXMgJiAoMVVMTCA8PCBmYml0 KSk7Cit9CisKK3N0YXRpYyBpbmxpbmUKK2Jvb2wgdnVfaGFzX2ZlYXR1cmUoVnVEZXYgKmRldiwK KyAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGZiaXQpCit7CisgICAgcmV0dXJuIGhh c19mZWF0dXJlKGRldi0+ZmVhdHVyZXMsIGZiaXQpOworfQorCitzdGF0aWMgaW5saW5lIGJvb2wg dnVfaGFzX3Byb3RvY29sX2ZlYXR1cmUoVnVEZXYgKmRldiwgdW5zaWduZWQgaW50IGZiaXQpCit7 CisgICAgcmV0dXJuIGhhc19mZWF0dXJlKGRldi0+cHJvdG9jb2xfZmVhdHVyZXMsIGZiaXQpOwor fQorCitzdGF0aWMgY29uc3QgY2hhciAqCit2dV9yZXF1ZXN0X3RvX3N0cmluZyh1bnNpZ25lZCBp bnQgcmVxKQoreworI2RlZmluZSBSRVEocmVxKSBbcmVxXSA9ICNyZXEKKyAgICBzdGF0aWMgY29u c3QgY2hhciAqdnVfcmVxdWVzdF9zdHJbXSA9IHsKKyAgICAgICAgUkVRKFZIT1NUX1VTRVJfTk9O RSksCisgICAgICAgIFJFUShWSE9TVF9VU0VSX0dFVF9GRUFUVVJFUyksCisgICAgICAgIFJFUShW SE9TVF9VU0VSX1NFVF9GRUFUVVJFUyksCisgICAgICAgIFJFUShWSE9TVF9VU0VSX1NFVF9PV05F UiksCisgICAgICAgIFJFUShWSE9TVF9VU0VSX1JFU0VUX09XTkVSKSwKKyAgICAgICAgUkVRKFZI T1NUX1VTRVJfU0VUX01FTV9UQUJMRSksCisgICAgICAgIFJFUShWSE9TVF9VU0VSX1NFVF9MT0df QkFTRSksCisgICAgICAgIFJFUShWSE9TVF9VU0VSX1NFVF9MT0dfRkQpLAorICAgICAgICBSRVEo VkhPU1RfVVNFUl9TRVRfVlJJTkdfTlVNKSwKKyAgICAgICAgUkVRKFZIT1NUX1VTRVJfU0VUX1ZS SU5HX0FERFIpLAorICAgICAgICBSRVEoVkhPU1RfVVNFUl9TRVRfVlJJTkdfQkFTRSksCisgICAg ICAgIFJFUShWSE9TVF9VU0VSX0dFVF9WUklOR19CQVNFKSwKKyAgICAgICAgUkVRKFZIT1NUX1VT RVJfU0VUX1ZSSU5HX0tJQ0spLAorICAgICAgICBSRVEoVkhPU1RfVVNFUl9TRVRfVlJJTkdfQ0FM TCksCisgICAgICAgIFJFUShWSE9TVF9VU0VSX1NFVF9WUklOR19FUlIpLAorICAgICAgICBSRVEo VkhPU1RfVVNFUl9HRVRfUFJPVE9DT0xfRkVBVFVSRVMpLAorICAgICAgICBSRVEoVkhPU1RfVVNF Ul9TRVRfUFJPVE9DT0xfRkVBVFVSRVMpLAorICAgICAgICBSRVEoVkhPU1RfVVNFUl9HRVRfUVVF VUVfTlVNKSwKKyAgICAgICAgUkVRKFZIT1NUX1VTRVJfU0VUX1ZSSU5HX0VOQUJMRSksCisgICAg ICAgIFJFUShWSE9TVF9VU0VSX1NFTkRfUkFSUCksCisgICAgICAgIFJFUShWSE9TVF9VU0VSX05F VF9TRVRfTVRVKSwKKyAgICAgICAgUkVRKFZIT1NUX1VTRVJfU0VUX1NMQVZFX1JFUV9GRCksCisg ICAgICAgIFJFUShWSE9TVF9VU0VSX0lPVExCX01TRyksCisgICAgICAgIFJFUShWSE9TVF9VU0VS X1NFVF9WUklOR19FTkRJQU4pLAorICAgICAgICBSRVEoVkhPU1RfVVNFUl9HRVRfQ09ORklHKSwK KyAgICAgICAgUkVRKFZIT1NUX1VTRVJfU0VUX0NPTkZJRyksCisgICAgICAgIFJFUShWSE9TVF9V U0VSX1BPU1RDT1BZX0FEVklTRSksCisgICAgICAgIFJFUShWSE9TVF9VU0VSX1BPU1RDT1BZX0xJ U1RFTiksCisgICAgICAgIFJFUShWSE9TVF9VU0VSX1BPU1RDT1BZX0VORCksCisgICAgICAgIFJF UShWSE9TVF9VU0VSX0dFVF9JTkZMSUdIVF9GRCksCisgICAgICAgIFJFUShWSE9TVF9VU0VSX1NF VF9JTkZMSUdIVF9GRCksCisgICAgICAgIFJFUShWSE9TVF9VU0VSX0dQVV9TRVRfU09DS0VUKSwK KyAgICAgICAgUkVRKFZIT1NUX1VTRVJfVlJJTkdfS0lDSyksCisgICAgICAgIFJFUShWSE9TVF9V U0VSX0dFVF9NQVhfTUVNX1NMT1RTKSwKKyAgICAgICAgUkVRKFZIT1NUX1VTRVJfQUREX01FTV9S RUcpLAorICAgICAgICBSRVEoVkhPU1RfVVNFUl9SRU1fTUVNX1JFRyksCisgICAgICAgIFJFUShW SE9TVF9VU0VSX01BWCksCisgICAgfTsKKyN1bmRlZiBSRVEKKworICAgIGlmIChyZXEgPCBWSE9T VF9VU0VSX01BWCkgeworICAgICAgICByZXR1cm4gdnVfcmVxdWVzdF9zdHJbcmVxXTsKKyAgICB9 IGVsc2UgeworICAgICAgICByZXR1cm4gInVua25vd24iOworICAgIH0KK30KKworc3RhdGljIHZv aWQKK3Z1X3BhbmljKFZ1RGV2ICpkZXYsIGNvbnN0IGNoYXIgKm1zZywgLi4uKQoreworICAgIGNo YXIgKmJ1ZiA9IE5VTEw7CisgICAgdmFfbGlzdCBhcDsKKworICAgIHZhX3N0YXJ0KGFwLCBtc2cp OworICAgIGlmICh2YXNwcmludGYoJmJ1ZiwgbXNnLCBhcCkgPCAwKSB7CisgICAgICAgIGJ1ZiA9 IE5VTEw7CisgICAgfQorICAgIHZhX2VuZChhcCk7CisKKyAgICBkZXYtPmJyb2tlbiA9IHRydWU7 CisgICAgZGV2LT5wYW5pYyhkZXYsIGJ1Zik7CisgICAgZnJlZShidWYpOworCisgICAgLyoKKyAg ICAgKiBGSVhNRToKKyAgICAgKiBmaW5kIGEgd2F5IHRvIGNhbGwgdmlydGlvX2Vycm9yLCBvciBw ZXJoYXBzIGNsb3NlIHRoZSBjb25uZWN0aW9uPworICAgICAqLworfQorCisvKiBUcmFuc2xhdGUg Z3Vlc3QgcGh5c2ljYWwgYWRkcmVzcyB0byBvdXIgdmlydHVhbCBhZGRyZXNzLiAgKi8KK3ZvaWQg KgordnVfZ3BhX3RvX3ZhKFZ1RGV2ICpkZXYsIHVpbnQ2NF90ICpwbGVuLCB1aW50NjRfdCBndWVz dF9hZGRyKQoreworICAgIGludCBpOworCisgICAgaWYgKCpwbGVuID09IDApIHsKKyAgICAgICAg cmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgLyogRmluZCBtYXRjaGluZyBtZW1vcnkgcmVnaW9u LiAgKi8KKyAgICBmb3IgKGkgPSAwOyBpIDwgZGV2LT5ucmVnaW9uczsgaSsrKSB7CisgICAgICAg IFZ1RGV2UmVnaW9uICpyID0gJmRldi0+cmVnaW9uc1tpXTsKKworICAgICAgICBpZiAoKGd1ZXN0 X2FkZHIgPj0gci0+Z3BhKSAmJiAoZ3Vlc3RfYWRkciA8IChyLT5ncGEgKyByLT5zaXplKSkpIHsK KyAgICAgICAgICAgIGlmICgoZ3Vlc3RfYWRkciArICpwbGVuKSA+IChyLT5ncGEgKyByLT5zaXpl KSkgeworICAgICAgICAgICAgICAgICpwbGVuID0gci0+Z3BhICsgci0+c2l6ZSAtIGd1ZXN0X2Fk ZHI7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gKHZvaWQgKikodWludHB0cl90 KQorICAgICAgICAgICAgICAgIGd1ZXN0X2FkZHIgLSByLT5ncGEgKyByLT5tbWFwX2FkZHIgKyBy LT5tbWFwX29mZnNldDsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBOVUxMOworfQor CisvKiBUcmFuc2xhdGUgcWVtdSB2aXJ0dWFsIGFkZHJlc3MgdG8gb3VyIHZpcnR1YWwgYWRkcmVz cy4gICovCitzdGF0aWMgdm9pZCAqCitxdmFfdG9fdmEoVnVEZXYgKmRldiwgdWludDY0X3QgcWVt dV9hZGRyKQoreworICAgIGludCBpOworCisgICAgLyogRmluZCBtYXRjaGluZyBtZW1vcnkgcmVn aW9uLiAgKi8KKyAgICBmb3IgKGkgPSAwOyBpIDwgZGV2LT5ucmVnaW9uczsgaSsrKSB7CisgICAg ICAgIFZ1RGV2UmVnaW9uICpyID0gJmRldi0+cmVnaW9uc1tpXTsKKworICAgICAgICBpZiAoKHFl bXVfYWRkciA+PSByLT5xdmEpICYmIChxZW11X2FkZHIgPCAoci0+cXZhICsgci0+c2l6ZSkpKSB7 CisgICAgICAgICAgICByZXR1cm4gKHZvaWQgKikodWludHB0cl90KQorICAgICAgICAgICAgICAg IHFlbXVfYWRkciAtIHItPnF2YSArIHItPm1tYXBfYWRkciArIHItPm1tYXBfb2Zmc2V0OworICAg ICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyB2b2lkCit2bXNn X2Nsb3NlX2ZkcyhWaG9zdFVzZXJNc2cgKnZtc2cpCit7CisgICAgaW50IGk7CisKKyAgICBmb3Ig KGkgPSAwOyBpIDwgdm1zZy0+ZmRfbnVtOyBpKyspIHsKKyAgICAgICAgY2xvc2Uodm1zZy0+ZmRz W2ldKTsKKyAgICB9Cit9CisKKy8qIFNldCByZXBseSBwYXlsb2FkLnU2NCBhbmQgY2xlYXIgcmVx dWVzdCBmbGFncyBhbmQgZmRfbnVtICovCitzdGF0aWMgdm9pZCB2bXNnX3NldF9yZXBseV91NjQo Vmhvc3RVc2VyTXNnICp2bXNnLCB1aW50NjRfdCB2YWwpCit7CisgICAgdm1zZy0+ZmxhZ3MgPSAw OyAvKiBkZWZhdWx0cyB3aWxsIGJlIHNldCBieSB2dV9zZW5kX3JlcGx5KCkgKi8KKyAgICB2bXNn LT5zaXplID0gc2l6ZW9mKHZtc2ctPnBheWxvYWQudTY0KTsKKyAgICB2bXNnLT5wYXlsb2FkLnU2 NCA9IHZhbDsKKyAgICB2bXNnLT5mZF9udW0gPSAwOworfQorCisvKiBBIHRlc3QgdG8gc2VlIGlm IHdlIGhhdmUgdXNlcmZhdWx0IGF2YWlsYWJsZSAqLworc3RhdGljIGJvb2wKK2hhdmVfdXNlcmZh dWx0KHZvaWQpCit7CisjaWYgZGVmaW5lZChfX2xpbnV4X18pICYmIGRlZmluZWQoX19OUl91c2Vy ZmF1bHRmZCkgJiZcCisgICAgICAgIGRlZmluZWQoVUZGRF9GRUFUVVJFX01JU1NJTkdfU0hNRU0p ICYmXAorICAgICAgICBkZWZpbmVkKFVGRkRfRkVBVFVSRV9NSVNTSU5HX0hVR0VUTEJGUykKKyAg ICAvKiBOb3cgdGVzdCB0aGUga2VybmVsIHdlJ3JlIHJ1bm5pbmcgb24gcmVhbGx5IGhhcyB0aGUg ZmVhdHVyZXMgKi8KKyAgICBpbnQgdWZkID0gc3lzY2FsbChfX05SX3VzZXJmYXVsdGZkLCBPX0NM T0VYRUMgfCBPX05PTkJMT0NLKTsKKyAgICBzdHJ1Y3QgdWZmZGlvX2FwaSBhcGlfc3RydWN0Owor ICAgIGlmICh1ZmQgPCAwKSB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBh cGlfc3RydWN0LmFwaSA9IFVGRkRfQVBJOworICAgIGFwaV9zdHJ1Y3QuZmVhdHVyZXMgPSBVRkZE X0ZFQVRVUkVfTUlTU0lOR19TSE1FTSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgIFVGRkRf RkVBVFVSRV9NSVNTSU5HX0hVR0VUTEJGUzsKKyAgICBpZiAoaW9jdGwodWZkLCBVRkZESU9fQVBJ LCAmYXBpX3N0cnVjdCkpIHsKKyAgICAgICAgY2xvc2UodWZkKTsKKyAgICAgICAgcmV0dXJuIGZh bHNlOworICAgIH0KKyAgICBjbG9zZSh1ZmQpOworICAgIHJldHVybiB0cnVlOworCisjZWxzZQor ICAgIHJldHVybiBmYWxzZTsKKyNlbmRpZgorfQorCitzdGF0aWMgYm9vbAordnVfbWVzc2FnZV9y ZWFkX2RlZmF1bHQoVnVEZXYgKmRldiwgaW50IGNvbm5fZmQsIFZob3N0VXNlck1zZyAqdm1zZykK K3sKKyAgICBjaGFyIGNvbnRyb2xbQ01TR19TUEFDRShWSE9TVF9NRU1PUllfQkFTRUxJTkVfTlJF R0lPTlMgKiBzaXplb2YoaW50KSldID0ge307CisgICAgc3RydWN0IGlvdmVjIGlvdiA9IHsKKyAg ICAgICAgLmlvdl9iYXNlID0gKGNoYXIgKil2bXNnLAorICAgICAgICAuaW92X2xlbiA9IFZIT1NU X1VTRVJfSERSX1NJWkUsCisgICAgfTsKKyAgICBzdHJ1Y3QgbXNnaGRyIG1zZyA9IHsKKyAgICAg ICAgLm1zZ19pb3YgPSAmaW92LAorICAgICAgICAubXNnX2lvdmxlbiA9IDEsCisgICAgICAgIC5t c2dfY29udHJvbCA9IGNvbnRyb2wsCisgICAgICAgIC5tc2dfY29udHJvbGxlbiA9IHNpemVvZihj b250cm9sKSwKKyAgICB9OworICAgIHNpemVfdCBmZF9zaXplOworICAgIHN0cnVjdCBjbXNnaGRy ICpjbXNnOworICAgIGludCByYzsKKworICAgIGRvIHsKKyAgICAgICAgcmMgPSByZWN2bXNnKGNv bm5fZmQsICZtc2csIDApOworICAgIH0gd2hpbGUgKHJjIDwgMCAmJiAoZXJybm8gPT0gRUlOVFIg fHwgZXJybm8gPT0gRUFHQUlOKSk7CisKKyAgICBpZiAocmMgPCAwKSB7CisgICAgICAgIHZ1X3Bh bmljKGRldiwgIkVycm9yIHdoaWxlIHJlY3Ztc2c6ICVzIiwgc3RyZXJyb3IoZXJybm8pKTsKKyAg ICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHZtc2ctPmZkX251bSA9IDA7CisgICAg Zm9yIChjbXNnID0gQ01TR19GSVJTVEhEUigmbXNnKTsKKyAgICAgICAgIGNtc2cgIT0gTlVMTDsK KyAgICAgICAgIGNtc2cgPSBDTVNHX05YVEhEUigmbXNnLCBjbXNnKSkKKyAgICB7CisgICAgICAg IGlmIChjbXNnLT5jbXNnX2xldmVsID09IFNPTF9TT0NLRVQgJiYgY21zZy0+Y21zZ190eXBlID09 IFNDTV9SSUdIVFMpIHsKKyAgICAgICAgICAgIGZkX3NpemUgPSBjbXNnLT5jbXNnX2xlbiAtIENN U0dfTEVOKDApOworICAgICAgICAgICAgdm1zZy0+ZmRfbnVtID0gZmRfc2l6ZSAvIHNpemVvZihp bnQpOworICAgICAgICAgICAgbWVtY3B5KHZtc2ctPmZkcywgQ01TR19EQVRBKGNtc2cpLCBmZF9z aXplKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKHZt c2ctPnNpemUgPiBzaXplb2Yodm1zZy0+cGF5bG9hZCkpIHsKKyAgICAgICAgdnVfcGFuaWMoZGV2 LAorICAgICAgICAgICAgICAgICAiRXJyb3I6IHRvbyBiaWcgbWVzc2FnZSByZXF1ZXN0OiAlZCwg c2l6ZTogdm1zZy0+c2l6ZTogJXUsICIKKyAgICAgICAgICAgICAgICAgIndoaWxlIHNpemVvZih2 bXNnLT5wYXlsb2FkKSA9ICV6dVxuIiwKKyAgICAgICAgICAgICAgICAgdm1zZy0+cmVxdWVzdCwg dm1zZy0+c2l6ZSwgc2l6ZW9mKHZtc2ctPnBheWxvYWQpKTsKKyAgICAgICAgZ290byBmYWlsOwor ICAgIH0KKworICAgIGlmICh2bXNnLT5zaXplKSB7CisgICAgICAgIGRvIHsKKyAgICAgICAgICAg IHJjID0gcmVhZChjb25uX2ZkLCAmdm1zZy0+cGF5bG9hZCwgdm1zZy0+c2l6ZSk7CisgICAgICAg IH0gd2hpbGUgKHJjIDwgMCAmJiAoZXJybm8gPT0gRUlOVFIgfHwgZXJybm8gPT0gRUFHQUlOKSk7 CisKKyAgICAgICAgaWYgKHJjIDw9IDApIHsKKyAgICAgICAgICAgIHZ1X3BhbmljKGRldiwgIkVy cm9yIHdoaWxlIHJlYWRpbmc6ICVzIiwgc3RyZXJyb3IoZXJybm8pKTsKKyAgICAgICAgICAgIGdv dG8gZmFpbDsKKyAgICAgICAgfQorCisgICAgICAgIGFzc2VydChyYyA9PSB2bXNnLT5zaXplKTsK KyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKKworZmFpbDoKKyAgICB2bXNnX2Nsb3NlX2Zkcyh2 bXNnKTsKKworICAgIHJldHVybiBmYWxzZTsKK30KKworc3RhdGljIGJvb2wKK3Z1X21lc3NhZ2Vf d3JpdGUoVnVEZXYgKmRldiwgaW50IGNvbm5fZmQsIFZob3N0VXNlck1zZyAqdm1zZykKK3sKKyAg ICBpbnQgcmM7CisgICAgdWludDhfdCAqcCA9ICh1aW50OF90ICopdm1zZzsKKyAgICBjaGFyIGNv bnRyb2xbQ01TR19TUEFDRShWSE9TVF9NRU1PUllfQkFTRUxJTkVfTlJFR0lPTlMgKiBzaXplb2Yo aW50KSldID0ge307CisgICAgc3RydWN0IGlvdmVjIGlvdiA9IHsKKyAgICAgICAgLmlvdl9iYXNl ID0gKGNoYXIgKil2bXNnLAorICAgICAgICAuaW92X2xlbiA9IFZIT1NUX1VTRVJfSERSX1NJWkUs CisgICAgfTsKKyAgICBzdHJ1Y3QgbXNnaGRyIG1zZyA9IHsKKyAgICAgICAgLm1zZ19pb3YgPSAm aW92LAorICAgICAgICAubXNnX2lvdmxlbiA9IDEsCisgICAgICAgIC5tc2dfY29udHJvbCA9IGNv bnRyb2wsCisgICAgfTsKKyAgICBzdHJ1Y3QgY21zZ2hkciAqY21zZzsKKworICAgIG1lbXNldChj b250cm9sLCAwLCBzaXplb2YoY29udHJvbCkpOworICAgIGFzc2VydCh2bXNnLT5mZF9udW0gPD0g VkhPU1RfTUVNT1JZX0JBU0VMSU5FX05SRUdJT05TKTsKKyAgICBpZiAodm1zZy0+ZmRfbnVtID4g MCkgeworICAgICAgICBzaXplX3QgZmRzaXplID0gdm1zZy0+ZmRfbnVtICogc2l6ZW9mKGludCk7 CisgICAgICAgIG1zZy5tc2dfY29udHJvbGxlbiA9IENNU0dfU1BBQ0UoZmRzaXplKTsKKyAgICAg ICAgY21zZyA9IENNU0dfRklSU1RIRFIoJm1zZyk7CisgICAgICAgIGNtc2ctPmNtc2dfbGVuID0g Q01TR19MRU4oZmRzaXplKTsKKyAgICAgICAgY21zZy0+Y21zZ19sZXZlbCA9IFNPTF9TT0NLRVQ7 CisgICAgICAgIGNtc2ctPmNtc2dfdHlwZSA9IFNDTV9SSUdIVFM7CisgICAgICAgIG1lbWNweShD TVNHX0RBVEEoY21zZyksIHZtc2ctPmZkcywgZmRzaXplKTsKKyAgICB9IGVsc2UgeworICAgICAg ICBtc2cubXNnX2NvbnRyb2xsZW4gPSAwOworICAgIH0KKworICAgIGRvIHsKKyAgICAgICAgcmMg PSBzZW5kbXNnKGNvbm5fZmQsICZtc2csIDApOworICAgIH0gd2hpbGUgKHJjIDwgMCAmJiAoZXJy bm8gPT0gRUlOVFIgfHwgZXJybm8gPT0gRUFHQUlOKSk7CisKKyAgICBpZiAodm1zZy0+c2l6ZSkg eworICAgICAgICBkbyB7CisgICAgICAgICAgICBpZiAodm1zZy0+ZGF0YSkgeworICAgICAgICAg ICAgICAgIHJjID0gd3JpdGUoY29ubl9mZCwgdm1zZy0+ZGF0YSwgdm1zZy0+c2l6ZSk7CisgICAg ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHJjID0gd3JpdGUoY29ubl9mZCwgcCAr IFZIT1NUX1VTRVJfSERSX1NJWkUsIHZtc2ctPnNpemUpOworICAgICAgICAgICAgfQorICAgICAg ICB9IHdoaWxlIChyYyA8IDAgJiYgKGVycm5vID09IEVJTlRSIHx8IGVycm5vID09IEVBR0FJTikp OworICAgIH0KKworICAgIGlmIChyYyA8PSAwKSB7CisgICAgICAgIHZ1X3BhbmljKGRldiwgIkVy cm9yIHdoaWxlIHdyaXRpbmc6ICVzIiwgc3RyZXJyb3IoZXJybm8pKTsKKyAgICAgICAgcmV0dXJu IGZhbHNlOworICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorCitzdGF0aWMgYm9vbAordnVf c2VuZF9yZXBseShWdURldiAqZGV2LCBpbnQgY29ubl9mZCwgVmhvc3RVc2VyTXNnICp2bXNnKQor eworICAgIC8qIFNldCB0aGUgdmVyc2lvbiBpbiB0aGUgZmxhZ3Mgd2hlbiBzZW5kaW5nIHRoZSBy ZXBseSAqLworICAgIHZtc2ctPmZsYWdzICY9IH5WSE9TVF9VU0VSX1ZFUlNJT05fTUFTSzsKKyAg ICB2bXNnLT5mbGFncyB8PSBWSE9TVF9VU0VSX1ZFUlNJT047CisgICAgdm1zZy0+ZmxhZ3MgfD0g VkhPU1RfVVNFUl9SRVBMWV9NQVNLOworCisgICAgcmV0dXJuIHZ1X21lc3NhZ2Vfd3JpdGUoZGV2 LCBjb25uX2ZkLCB2bXNnKTsKK30KKworLyoKKyAqIFByb2Nlc3NlcyBhIHJlcGx5IG9uIHRoZSBz bGF2ZSBjaGFubmVsLgorICogRW50ZXJlZCB3aXRoIHNsYXZlX211dGV4IGhlbGQgYW5kIHJlbGVh c2VzIGl0IGJlZm9yZSBleGl0LgorICogUmV0dXJucyB0cnVlIG9uIHN1Y2Nlc3MuCisgKi8KK3N0 YXRpYyBib29sCit2dV9wcm9jZXNzX21lc3NhZ2VfcmVwbHkoVnVEZXYgKmRldiwgY29uc3QgVmhv c3RVc2VyTXNnICp2bXNnKQoreworICAgIFZob3N0VXNlck1zZyBtc2dfcmVwbHk7CisgICAgYm9v bCByZXN1bHQgPSBmYWxzZTsKKworICAgIGlmICgodm1zZy0+ZmxhZ3MgJiBWSE9TVF9VU0VSX05F RURfUkVQTFlfTUFTSykgPT0gMCkgeworICAgICAgICByZXN1bHQgPSB0cnVlOworICAgICAgICBn b3RvIG91dDsKKyAgICB9CisKKyAgICBpZiAoIXZ1X21lc3NhZ2VfcmVhZF9kZWZhdWx0KGRldiwg ZGV2LT5zbGF2ZV9mZCwgJm1zZ19yZXBseSkpIHsKKyAgICAgICAgZ290byBvdXQ7CisgICAgfQor CisgICAgaWYgKG1zZ19yZXBseS5yZXF1ZXN0ICE9IHZtc2ctPnJlcXVlc3QpIHsKKyAgICAgICAg RFBSSU5UKCJSZWNlaXZlZCB1bmV4cGVjdGVkIG1zZyB0eXBlLiBFeHBlY3RlZCAlZCByZWNlaXZl ZCAlZCIsCisgICAgICAgICAgICAgICB2bXNnLT5yZXF1ZXN0LCBtc2dfcmVwbHkucmVxdWVzdCk7 CisgICAgICAgIGdvdG8gb3V0OworICAgIH0KKworICAgIHJlc3VsdCA9IG1zZ19yZXBseS5wYXls b2FkLnU2NCA9PSAwOworCitvdXQ6CisgICAgcHRocmVhZF9tdXRleF91bmxvY2soJmRldi0+c2xh dmVfbXV0ZXgpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKKy8qIEtpY2sgdGhlIGxvZ19jYWxs X2ZkIGlmIHJlcXVpcmVkLiAqLworc3RhdGljIHZvaWQKK3Z1X2xvZ19raWNrKFZ1RGV2ICpkZXYp Cit7CisgICAgaWYgKGRldi0+bG9nX2NhbGxfZmQgIT0gLTEpIHsKKyAgICAgICAgRFBSSU5UKCJL aWNraW5nIHRoZSBRRU1VJ3MgbG9nLi4uXG4iKTsKKyAgICAgICAgaWYgKGV2ZW50ZmRfd3JpdGUo ZGV2LT5sb2dfY2FsbF9mZCwgMSkgPCAwKSB7CisgICAgICAgICAgICB2dV9wYW5pYyhkZXYsICJF cnJvciB3cml0aW5nIGV2ZW50ZmQ6ICVzIiwgc3RyZXJyb3IoZXJybm8pKTsKKyAgICAgICAgfQor ICAgIH0KK30KKworc3RhdGljIHZvaWQKK3Z1X2xvZ19wYWdlKHVpbnQ4X3QgKmxvZ190YWJsZSwg dWludDY0X3QgcGFnZSkKK3sKKyAgICBEUFJJTlQoIkxvZ2dlZCBkaXJ0eSBndWVzdCBwYWdlOiAl IlBSSWQ2NCJcbiIsIHBhZ2UpOworICAgIHFhdG9taWNfb3IoJmxvZ190YWJsZVtwYWdlIC8gOF0s IDEgPDwgKHBhZ2UgJSA4KSk7Cit9CisKK3N0YXRpYyB2b2lkCit2dV9sb2dfd3JpdGUoVnVEZXYg KmRldiwgdWludDY0X3QgYWRkcmVzcywgdWludDY0X3QgbGVuZ3RoKQoreworICAgIHVpbnQ2NF90 IHBhZ2U7CisKKyAgICBpZiAoIShkZXYtPmZlYXR1cmVzICYgKDFVTEwgPDwgVkhPU1RfRl9MT0df QUxMKSkgfHwKKyAgICAgICAgIWRldi0+bG9nX3RhYmxlIHx8ICFsZW5ndGgpIHsKKyAgICAgICAg cmV0dXJuOworICAgIH0KKworICAgIGFzc2VydChkZXYtPmxvZ19zaXplID4gKChhZGRyZXNzICsg bGVuZ3RoIC0gMSkgLyBWSE9TVF9MT0dfUEFHRSAvIDgpKTsKKworICAgIHBhZ2UgPSBhZGRyZXNz IC8gVkhPU1RfTE9HX1BBR0U7CisgICAgd2hpbGUgKHBhZ2UgKiBWSE9TVF9MT0dfUEFHRSA8IGFk ZHJlc3MgKyBsZW5ndGgpIHsKKyAgICAgICAgdnVfbG9nX3BhZ2UoZGV2LT5sb2dfdGFibGUsIHBh Z2UpOworICAgICAgICBwYWdlICs9IDE7CisgICAgfQorCisgICAgdnVfbG9nX2tpY2soZGV2KTsK K30KKworc3RhdGljIHZvaWQKK3Z1X2tpY2tfY2IoVnVEZXYgKmRldiwgaW50IGNvbmRpdGlvbiwg dm9pZCAqZGF0YSkKK3sKKyAgICBpbnQgaW5kZXggPSAoaW50cHRyX3QpZGF0YTsKKyAgICBWdVZp cnRxICp2cSA9ICZkZXYtPnZxW2luZGV4XTsKKyAgICBpbnQgc29jayA9IHZxLT5raWNrX2ZkOwor ICAgIGV2ZW50ZmRfdCBraWNrX2RhdGE7CisgICAgc3NpemVfdCByYzsKKworICAgIHJjID0gZXZl bnRmZF9yZWFkKHNvY2ssICZraWNrX2RhdGEpOworICAgIGlmIChyYyA9PSAtMSkgeworICAgICAg ICB2dV9wYW5pYyhkZXYsICJraWNrIGV2ZW50ZmRfcmVhZCgpOiAlcyIsIHN0cmVycm9yKGVycm5v KSk7CisgICAgICAgIGRldi0+cmVtb3ZlX3dhdGNoKGRldiwgZGV2LT52cVtpbmRleF0ua2lja19m ZCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgRFBSSU5UKCJHb3Qga2lja19kYXRhOiAlMDE2IlBS SXg2NCIgaGFuZGxlcjolcCBpZHg6JWRcbiIsCisgICAgICAgICAgICAgICBraWNrX2RhdGEsIHZx LT5oYW5kbGVyLCBpbmRleCk7CisgICAgICAgIGlmICh2cS0+aGFuZGxlcikgeworICAgICAgICAg ICAgdnEtPmhhbmRsZXIoZGV2LCBpbmRleCk7CisgICAgICAgIH0KKyAgICB9Cit9CisKK3N0YXRp YyBib29sCit2dV9nZXRfZmVhdHVyZXNfZXhlYyhWdURldiAqZGV2LCBWaG9zdFVzZXJNc2cgKnZt c2cpCit7CisgICAgdm1zZy0+cGF5bG9hZC51NjQgPQorICAgICAgICAvKgorICAgICAgICAgKiBU aGUgZm9sbG93aW5nIFZJUlRJTyBmZWF0dXJlIGJpdHMgYXJlIHN1cHBvcnRlZCBieSBvdXIgdmly dHF1ZXVlCisgICAgICAgICAqIGltcGxlbWVudGF0aW9uOgorICAgICAgICAgKi8KKyAgICAgICAg MVVMTCA8PCBWSVJUSU9fRl9OT1RJRllfT05fRU1QVFkgfAorICAgICAgICAxVUxMIDw8IFZJUlRJ T19SSU5HX0ZfSU5ESVJFQ1RfREVTQyB8CisgICAgICAgIDFVTEwgPDwgVklSVElPX1JJTkdfRl9F VkVOVF9JRFggfAorICAgICAgICAxVUxMIDw8IFZJUlRJT19GX1ZFUlNJT05fMSB8CisKKyAgICAg ICAgLyogdmhvc3QtdXNlciBmZWF0dXJlIGJpdHMgKi8KKyAgICAgICAgMVVMTCA8PCBWSE9TVF9G X0xPR19BTEwgfAorICAgICAgICAxVUxMIDw8IFZIT1NUX1VTRVJfRl9QUk9UT0NPTF9GRUFUVVJF UzsKKworICAgIGlmIChkZXYtPmlmYWNlLT5nZXRfZmVhdHVyZXMpIHsKKyAgICAgICAgdm1zZy0+ cGF5bG9hZC51NjQgfD0gZGV2LT5pZmFjZS0+Z2V0X2ZlYXR1cmVzKGRldik7CisgICAgfQorCisg ICAgdm1zZy0+c2l6ZSA9IHNpemVvZih2bXNnLT5wYXlsb2FkLnU2NCk7CisgICAgdm1zZy0+ZmRf bnVtID0gMDsKKworICAgIERQUklOVCgiU2VuZGluZyBiYWNrIHRvIGd1ZXN0IHU2NDogMHglMDE2 IlBSSXg2NCJcbiIsIHZtc2ctPnBheWxvYWQudTY0KTsKKworICAgIHJldHVybiB0cnVlOworfQor CitzdGF0aWMgdm9pZAordnVfc2V0X2VuYWJsZV9hbGxfcmluZ3MoVnVEZXYgKmRldiwgYm9vbCBl bmFibGVkKQoreworICAgIHVpbnQxNl90IGk7CisKKyAgICBmb3IgKGkgPSAwOyBpIDwgZGV2LT5t YXhfcXVldWVzOyBpKyspIHsKKyAgICAgICAgZGV2LT52cVtpXS5lbmFibGUgPSBlbmFibGVkOwor ICAgIH0KK30KKworc3RhdGljIGJvb2wKK3Z1X3NldF9mZWF0dXJlc19leGVjKFZ1RGV2ICpkZXYs IFZob3N0VXNlck1zZyAqdm1zZykKK3sKKyAgICBEUFJJTlQoInU2NDogMHglMDE2IlBSSXg2NCJc biIsIHZtc2ctPnBheWxvYWQudTY0KTsKKworICAgIGRldi0+ZmVhdHVyZXMgPSB2bXNnLT5wYXls b2FkLnU2NDsKKyAgICBpZiAoIXZ1X2hhc19mZWF0dXJlKGRldiwgVklSVElPX0ZfVkVSU0lPTl8x KSkgeworICAgICAgICAvKgorICAgICAgICAgKiBXZSBvbmx5IHN1cHBvcnQgZGV2aWNlcyBjb25m b3JtaW5nIHRvIFZJUlRJTyAxLjAgb3IKKyAgICAgICAgICogbGF0ZXIKKyAgICAgICAgICovCisg ICAgICAgIHZ1X3BhbmljKGRldiwgInZpcnRpbyBsZWdhY3kgZGV2aWNlcyBhcmVuJ3Qgc3VwcG9y dGVkIGJ5IGxpYnZob3N0LXVzZXIiKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKwor ICAgIGlmICghKGRldi0+ZmVhdHVyZXMgJiBWSE9TVF9VU0VSX0ZfUFJPVE9DT0xfRkVBVFVSRVMp KSB7CisgICAgICAgIHZ1X3NldF9lbmFibGVfYWxsX3JpbmdzKGRldiwgdHJ1ZSk7CisgICAgfQor CisgICAgaWYgKGRldi0+aWZhY2UtPnNldF9mZWF0dXJlcykgeworICAgICAgICBkZXYtPmlmYWNl LT5zZXRfZmVhdHVyZXMoZGV2LCBkZXYtPmZlYXR1cmVzKTsKKyAgICB9CisKKyAgICByZXR1cm4g ZmFsc2U7Cit9CisKK3N0YXRpYyBib29sCit2dV9zZXRfb3duZXJfZXhlYyhWdURldiAqZGV2LCBW aG9zdFVzZXJNc2cgKnZtc2cpCit7CisgICAgcmV0dXJuIGZhbHNlOworfQorCitzdGF0aWMgdm9p ZAordnVfY2xvc2VfbG9nKFZ1RGV2ICpkZXYpCit7CisgICAgaWYgKGRldi0+bG9nX3RhYmxlKSB7 CisgICAgICAgIGlmIChtdW5tYXAoZGV2LT5sb2dfdGFibGUsIGRldi0+bG9nX3NpemUpICE9IDAp IHsKKyAgICAgICAgICAgIHBlcnJvcigiY2xvc2UgbG9nIG11bm1hcCgpIGVycm9yIik7CisgICAg ICAgIH0KKworICAgICAgICBkZXYtPmxvZ190YWJsZSA9IE5VTEw7CisgICAgfQorICAgIGlmIChk ZXYtPmxvZ19jYWxsX2ZkICE9IC0xKSB7CisgICAgICAgIGNsb3NlKGRldi0+bG9nX2NhbGxfZmQp OworICAgICAgICBkZXYtPmxvZ19jYWxsX2ZkID0gLTE7CisgICAgfQorfQorCitzdGF0aWMgYm9v bAordnVfcmVzZXRfZGV2aWNlX2V4ZWMoVnVEZXYgKmRldiwgVmhvc3RVc2VyTXNnICp2bXNnKQor eworICAgIHZ1X3NldF9lbmFibGVfYWxsX3JpbmdzKGRldiwgZmFsc2UpOworCisgICAgcmV0dXJu IGZhbHNlOworfQorCitzdGF0aWMgYm9vbAorbWFwX3JpbmcoVnVEZXYgKmRldiwgVnVWaXJ0cSAq dnEpCit7CisgICAgdnEtPnZyaW5nLmRlc2MgPSBxdmFfdG9fdmEoZGV2LCB2cS0+dnJhLmRlc2Nf dXNlcl9hZGRyKTsKKyAgICB2cS0+dnJpbmcudXNlZCA9IHF2YV90b192YShkZXYsIHZxLT52cmEu dXNlZF91c2VyX2FkZHIpOworICAgIHZxLT52cmluZy5hdmFpbCA9IHF2YV90b192YShkZXYsIHZx LT52cmEuYXZhaWxfdXNlcl9hZGRyKTsKKworICAgIERQUklOVCgiU2V0dGluZyB2aXJ0cSBhZGRy ZXNzZXM6XG4iKTsKKyAgICBEUFJJTlQoIiAgICB2cmluZ19kZXNjICBhdCAlcFxuIiwgdnEtPnZy aW5nLmRlc2MpOworICAgIERQUklOVCgiICAgIHZyaW5nX3VzZWQgIGF0ICVwXG4iLCB2cS0+dnJp bmcudXNlZCk7CisgICAgRFBSSU5UKCIgICAgdnJpbmdfYXZhaWwgYXQgJXBcbiIsIHZxLT52cmlu Zy5hdmFpbCk7CisKKyAgICByZXR1cm4gISh2cS0+dnJpbmcuZGVzYyAmJiB2cS0+dnJpbmcudXNl ZCAmJiB2cS0+dnJpbmcuYXZhaWwpOworfQorCitzdGF0aWMgYm9vbAorZ2VuZXJhdGVfZmF1bHRz KFZ1RGV2ICpkZXYpIHsKKyAgICBpbnQgaTsKKyAgICBmb3IgKGkgPSAwOyBpIDwgZGV2LT5ucmVn aW9uczsgaSsrKSB7CisgICAgICAgIFZ1RGV2UmVnaW9uICpkZXZfcmVnaW9uID0gJmRldi0+cmVn aW9uc1tpXTsKKyAgICAgICAgaW50IHJldDsKKyNpZmRlZiBVRkZESU9fUkVHSVNURVIKKyAgICAg ICAgLyoKKyAgICAgICAgICogV2Ugc2hvdWxkIGFscmVhZHkgaGF2ZSBhbiBvcGVuIHVmZC4gTWFy ayBlYWNoIG1lbW9yeQorICAgICAgICAgKiByYW5nZSBhcyB1ZmQuCisgICAgICAgICAqIERpc2Nh cmQgYW55IG1hcHBpbmcgd2UgaGF2ZSBoZXJlOyBub3RlIEkgY2FuJ3QgdXNlIE1BRFZfUkVNT1ZF CisgICAgICAgICAqIG9yIGZhbGxvY2F0ZSB0byBtYWtlIHRoZSBob2xlIHNpbmNlIEkgZG9uJ3Qg d2FudCB0byBsb3NlCisgICAgICAgICAqIGRhdGEgdGhhdCdzIGFscmVhZHkgYXJyaXZlZCBpbiB0 aGUgc2hhcmVkIHByb2Nlc3MuCisgICAgICAgICAqIFRPRE86IEhvdyB0byBkbyBodWdlcGFnZQor ICAgICAgICAgKi8KKyAgICAgICAgcmV0ID0gbWFkdmlzZSgodm9pZCAqKSh1aW50cHRyX3QpZGV2 X3JlZ2lvbi0+bW1hcF9hZGRyLAorICAgICAgICAgICAgICAgICAgICAgIGRldl9yZWdpb24tPnNp emUgKyBkZXZfcmVnaW9uLT5tbWFwX29mZnNldCwKKyAgICAgICAgICAgICAgICAgICAgICBNQURW X0RPTlRORUVEKTsKKyAgICAgICAgaWYgKHJldCkgeworICAgICAgICAgICAgZnByaW50ZihzdGRl cnIsCisgICAgICAgICAgICAgICAgICAgICIlczogRmFpbGVkIHRvIG1hZHZpc2UoRE9OVE5FRUQp IHJlZ2lvbiAlZDogJXNcbiIsCisgICAgICAgICAgICAgICAgICAgIF9fZnVuY19fLCBpLCBzdHJl cnJvcihlcnJubykpOworICAgICAgICB9CisgICAgICAgIC8qCisgICAgICAgICAqIFR1cm4gb2Zm IHRyYW5zcGFyZW50IGh1Z2VwYWdlcyBzbyB3ZSBkb250IGdldCBsb3NlIHdha2V1cHMKKyAgICAg ICAgICogaW4gbmVpZ2hib3VyaW5nIHBhZ2VzLgorICAgICAgICAgKiBUT0RPOiBUdXJuIHRoaXMg YmFja29uIGxhdGVyLgorICAgICAgICAgKi8KKyAgICAgICAgcmV0ID0gbWFkdmlzZSgodm9pZCAq KSh1aW50cHRyX3QpZGV2X3JlZ2lvbi0+bW1hcF9hZGRyLAorICAgICAgICAgICAgICAgICAgICAg IGRldl9yZWdpb24tPnNpemUgKyBkZXZfcmVnaW9uLT5tbWFwX29mZnNldCwKKyAgICAgICAgICAg ICAgICAgICAgICBNQURWX05PSFVHRVBBR0UpOworICAgICAgICBpZiAocmV0KSB7CisgICAgICAg ICAgICAvKgorICAgICAgICAgICAgICogTm90ZTogVGhpcyBjYW4gaGFwcGVuIGxlZ2FsbHkgb24g a2VybmVscyB0aGF0IGFyZSBjb25maWd1cmVkCisgICAgICAgICAgICAgKiB3aXRob3V0IG1hZHZp c2UnYWJsZSBodWdlcGFnZXMKKyAgICAgICAgICAgICAqLworICAgICAgICAgICAgZnByaW50Zihz dGRlcnIsCisgICAgICAgICAgICAgICAgICAgICIlczogRmFpbGVkIHRvIG1hZHZpc2UoTk9IVUdF UEFHRSkgcmVnaW9uICVkOiAlc1xuIiwKKyAgICAgICAgICAgICAgICAgICAgX19mdW5jX18sIGks IHN0cmVycm9yKGVycm5vKSk7CisgICAgICAgIH0KKyAgICAgICAgc3RydWN0IHVmZmRpb19yZWdp c3RlciByZWdfc3RydWN0OworICAgICAgICByZWdfc3RydWN0LnJhbmdlLnN0YXJ0ID0gKHVpbnRw dHJfdClkZXZfcmVnaW9uLT5tbWFwX2FkZHI7CisgICAgICAgIHJlZ19zdHJ1Y3QucmFuZ2UubGVu ID0gZGV2X3JlZ2lvbi0+c2l6ZSArIGRldl9yZWdpb24tPm1tYXBfb2Zmc2V0OworICAgICAgICBy ZWdfc3RydWN0Lm1vZGUgPSBVRkZESU9fUkVHSVNURVJfTU9ERV9NSVNTSU5HOworCisgICAgICAg IGlmIChpb2N0bChkZXYtPnBvc3Rjb3B5X3VmZCwgVUZGRElPX1JFR0lTVEVSLCAmcmVnX3N0cnVj dCkpIHsKKyAgICAgICAgICAgIHZ1X3BhbmljKGRldiwgIiVzOiBGYWlsZWQgdG8gdXNlcmZhdWx0 IHJlZ2lvbiAlZCAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICJAJXAgKyBzaXplOiV6eCBv ZmZzZXQ6ICV6eDogKHVmZD0lZCklc1xuIiwKKyAgICAgICAgICAgICAgICAgICAgIF9fZnVuY19f LCBpLAorICAgICAgICAgICAgICAgICAgICAgZGV2X3JlZ2lvbi0+bW1hcF9hZGRyLAorICAgICAg ICAgICAgICAgICAgICAgZGV2X3JlZ2lvbi0+c2l6ZSwgZGV2X3JlZ2lvbi0+bW1hcF9vZmZzZXQs CisgICAgICAgICAgICAgICAgICAgICBkZXYtPnBvc3Rjb3B5X3VmZCwgc3RyZXJyb3IoZXJybm8p KTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICBpZiAoIShy ZWdfc3RydWN0LmlvY3RscyAmICgoX191NjQpMSA8PCBfVUZGRElPX0NPUFkpKSkgeworICAgICAg ICAgICAgdnVfcGFuaWMoZGV2LCAiJXMgUmVnaW9uICglZCkgZG9lc24ndCBzdXBwb3J0IENPUFki LAorICAgICAgICAgICAgICAgICAgICAgX19mdW5jX18sIGkpOworICAgICAgICAgICAgcmV0dXJu IGZhbHNlOworICAgICAgICB9CisgICAgICAgIERQUklOVCgiJXM6IHJlZ2lvbiAlZDogUmVnaXN0 ZXJlZCB1c2VyZmF1bHQgZm9yICUiCisgICAgICAgICAgICAgICBQUkl4NjQgIiArICUiIFBSSXg2 NCAiXG4iLCBfX2Z1bmNfXywgaSwKKyAgICAgICAgICAgICAgICh1aW50NjRfdClyZWdfc3RydWN0 LnJhbmdlLnN0YXJ0LAorICAgICAgICAgICAgICAgKHVpbnQ2NF90KXJlZ19zdHJ1Y3QucmFuZ2Uu bGVuKTsKKyAgICAgICAgLyogTm93IGl0J3MgcmVnaXN0ZXJlZCB3ZSBjYW4gbGV0IHRoZSBjbGll bnQgYXQgaXQgKi8KKyAgICAgICAgaWYgKG1wcm90ZWN0KCh2b2lkICopKHVpbnRwdHJfdClkZXZf cmVnaW9uLT5tbWFwX2FkZHIsCisgICAgICAgICAgICAgICAgICAgICBkZXZfcmVnaW9uLT5zaXpl ICsgZGV2X3JlZ2lvbi0+bW1hcF9vZmZzZXQsCisgICAgICAgICAgICAgICAgICAgICBQUk9UX1JF QUQgfCBQUk9UX1dSSVRFKSkgeworICAgICAgICAgICAgdnVfcGFuaWMoZGV2LCAiZmFpbGVkIHRv IG1wcm90ZWN0IHJlZ2lvbiAlZCBmb3IgcG9zdGNvcHkgKCVzKSIsCisgICAgICAgICAgICAgICAg ICAgICBpLCBzdHJlcnJvcihlcnJubykpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg ICAgICB9CisgICAgICAgIC8qIFRPRE86IFN0YXNoICd6ZXJvJyBzdXBwb3J0IGZsYWdzIHNvbWV3 aGVyZSAqLworI2VuZGlmCisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKK3N0YXRpYyBi b29sCit2dV9hZGRfbWVtX3JlZyhWdURldiAqZGV2LCBWaG9zdFVzZXJNc2cgKnZtc2cpIHsKKyAg ICBpbnQgaTsKKyAgICBib29sIHRyYWNrX3JhbWJsb2NrcyA9IGRldi0+cG9zdGNvcHlfbGlzdGVu aW5nOworICAgIFZob3N0VXNlck1lbW9yeVJlZ2lvbiBtID0gdm1zZy0+cGF5bG9hZC5tZW1yZWcu cmVnaW9uLCAqbXNnX3JlZ2lvbiA9ICZtOworICAgIFZ1RGV2UmVnaW9uICpkZXZfcmVnaW9uID0g JmRldi0+cmVnaW9uc1tkZXYtPm5yZWdpb25zXTsKKyAgICB2b2lkICptbWFwX2FkZHI7CisKKyAg ICAvKgorICAgICAqIElmIHdlIGFyZSBpbiBwb3N0Y29weSBtb2RlIGFuZCB3ZSByZWNlaXZlIGEg dTY0IHBheWxvYWQgd2l0aCBhIDAgdmFsdWUKKyAgICAgKiB3ZSBrbm93IGFsbCB0aGUgcG9zdGNv cHkgY2xpZW50IGJhc2VzIGhhdmUgYmVlbiByZWNlaXZlZCwgYW5kIHdlCisgICAgICogc2hvdWxk IHN0YXJ0IGdlbmVyYXRpbmcgZmF1bHRzLgorICAgICAqLworICAgIGlmICh0cmFja19yYW1ibG9j a3MgJiYKKyAgICAgICAgdm1zZy0+c2l6ZSA9PSBzaXplb2Yodm1zZy0+cGF5bG9hZC51NjQpICYm CisgICAgICAgIHZtc2ctPnBheWxvYWQudTY0ID09IDApIHsKKyAgICAgICAgKHZvaWQpZ2VuZXJh dGVfZmF1bHRzKGRldik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBEUFJJ TlQoIkFkZGluZyByZWdpb246ICV1XG4iLCBkZXYtPm5yZWdpb25zKTsKKyAgICBEUFJJTlQoIiAg ICBndWVzdF9waHlzX2FkZHI6IDB4JTAxNiJQUkl4NjQiXG4iLAorICAgICAgICAgICBtc2dfcmVn aW9uLT5ndWVzdF9waHlzX2FkZHIpOworICAgIERQUklOVCgiICAgIG1lbW9yeV9zaXplOiAgICAg MHglMDE2IlBSSXg2NCJcbiIsCisgICAgICAgICAgIG1zZ19yZWdpb24tPm1lbW9yeV9zaXplKTsK KyAgICBEUFJJTlQoIiAgICB1c2Vyc3BhY2VfYWRkciAgIDB4JTAxNiJQUkl4NjQiXG4iLAorICAg ICAgICAgICBtc2dfcmVnaW9uLT51c2Vyc3BhY2VfYWRkcik7CisgICAgRFBSSU5UKCIgICAgbW1h cF9vZmZzZXQgICAgICAweCUwMTYiUFJJeDY0IlxuIiwKKyAgICAgICAgICAgbXNnX3JlZ2lvbi0+ bW1hcF9vZmZzZXQpOworCisgICAgZGV2X3JlZ2lvbi0+Z3BhID0gbXNnX3JlZ2lvbi0+Z3Vlc3Rf cGh5c19hZGRyOworICAgIGRldl9yZWdpb24tPnNpemUgPSBtc2dfcmVnaW9uLT5tZW1vcnlfc2l6 ZTsKKyAgICBkZXZfcmVnaW9uLT5xdmEgPSBtc2dfcmVnaW9uLT51c2Vyc3BhY2VfYWRkcjsKKyAg ICBkZXZfcmVnaW9uLT5tbWFwX29mZnNldCA9IG1zZ19yZWdpb24tPm1tYXBfb2Zmc2V0OworCisg ICAgLyoKKyAgICAgKiBXZSBkb24ndCB1c2Ugb2Zmc2V0IGFyZ3VtZW50IG9mIG1tYXAoKSBzaW5j ZSB0aGUKKyAgICAgKiBtYXBwZWQgYWRkcmVzcyBoYXMgdG8gYmUgcGFnZSBhbGlnbmVkLCBhbmQg d2UgdXNlIGh1Z2UKKyAgICAgKiBwYWdlcy4KKyAgICAgKi8KKyAgICBpZiAodHJhY2tfcmFtYmxv Y2tzKSB7CisgICAgICAgIC8qCisgICAgICAgICAqIEluIHBvc3Rjb3B5IHdlJ3JlIHVzaW5nIFBS T1RfTk9ORSBoZXJlIHRvIGNhdGNoIGFueW9uZQorICAgICAgICAgKiBhY2Nlc3NpbmcgaXQgYmVm b3JlIHdlIHVzZXJmYXVsdC4KKyAgICAgICAgICovCisgICAgICAgIG1tYXBfYWRkciA9IG1tYXAo MCwgZGV2X3JlZ2lvbi0+c2l6ZSArIGRldl9yZWdpb24tPm1tYXBfb2Zmc2V0LAorICAgICAgICAg ICAgICAgICAgICAgICAgIFBST1RfTk9ORSwgTUFQX1NIQVJFRCwKKyAgICAgICAgICAgICAgICAg ICAgICAgICB2bXNnLT5mZHNbMF0sIDApOworICAgIH0gZWxzZSB7CisgICAgICAgIG1tYXBfYWRk ciA9IG1tYXAoMCwgZGV2X3JlZ2lvbi0+c2l6ZSArIGRldl9yZWdpb24tPm1tYXBfb2Zmc2V0LAor ICAgICAgICAgICAgICAgICAgICAgICAgIFBST1RfUkVBRCB8IFBST1RfV1JJVEUsIE1BUF9TSEFS RUQsIHZtc2ctPmZkc1swXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAwKTsKKyAgICB9CisK KyAgICBpZiAobW1hcF9hZGRyID09IE1BUF9GQUlMRUQpIHsKKyAgICAgICAgdnVfcGFuaWMoZGV2 LCAicmVnaW9uIG1tYXAgZXJyb3I6ICVzIiwgc3RyZXJyb3IoZXJybm8pKTsKKyAgICB9IGVsc2Ug eworICAgICAgICBkZXZfcmVnaW9uLT5tbWFwX2FkZHIgPSAodWludDY0X3QpKHVpbnRwdHJfdClt bWFwX2FkZHI7CisgICAgICAgIERQUklOVCgiICAgIG1tYXBfYWRkcjogICAgICAgMHglMDE2IlBS SXg2NCJcbiIsCisgICAgICAgICAgICAgICBkZXZfcmVnaW9uLT5tbWFwX2FkZHIpOworICAgIH0K KworICAgIGNsb3NlKHZtc2ctPmZkc1swXSk7CisKKyAgICBpZiAodHJhY2tfcmFtYmxvY2tzKSB7 CisgICAgICAgIC8qCisgICAgICAgICAqIFJldHVybiB0aGUgYWRkcmVzcyB0byBRRU1VIHNvIHRo YXQgaXQgY2FuIHRyYW5zbGF0ZSB0aGUgdWZkCisgICAgICAgICAqIGZhdWx0IGFkZHJlc3NlcyBi YWNrLgorICAgICAgICAgKi8KKyAgICAgICAgbXNnX3JlZ2lvbi0+dXNlcnNwYWNlX2FkZHIgPSAo dWludHB0cl90KShtbWFwX2FkZHIgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGRldl9yZWdpb24tPm1tYXBfb2Zmc2V0KTsKKworICAgICAgICAvKiBT ZW5kIHRoZSBtZXNzYWdlIGJhY2sgdG8gcWVtdSB3aXRoIHRoZSBhZGRyZXNzZXMgZmlsbGVkIGlu LiAqLworICAgICAgICB2bXNnLT5mZF9udW0gPSAwOworICAgICAgICBpZiAoIXZ1X3NlbmRfcmVw bHkoZGV2LCBkZXYtPnNvY2ssIHZtc2cpKSB7CisgICAgICAgICAgICB2dV9wYW5pYyhkZXYsICJm YWlsZWQgdG8gcmVzcG9uZCB0byBhZGQtbWVtLXJlZ2lvbiBmb3IgcG9zdGNvcHkiKTsKKyAgICAg ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorCisgICAgICAgIERQUklOVCgiU3VjY2Vz c2Z1bGx5IGFkZGVkIG5ldyByZWdpb24gaW4gcG9zdGNvcHlcbiIpOworICAgICAgICBkZXYtPm5y ZWdpb25zKys7CisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIH0gZWxzZSB7CisgICAgICAg IGZvciAoaSA9IDA7IGkgPCBkZXYtPm1heF9xdWV1ZXM7IGkrKykgeworICAgICAgICAgICAgaWYg KGRldi0+dnFbaV0udnJpbmcuZGVzYykgeworICAgICAgICAgICAgICAgIGlmIChtYXBfcmluZyhk ZXYsICZkZXYtPnZxW2ldKSkgeworICAgICAgICAgICAgICAgICAgICB2dV9wYW5pYyhkZXYsICJy ZW1hcHBpbmcgcXVldWUgJWQgZm9yIG5ldyBtZW1vcnkgcmVnaW9uIiwKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgaSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAg ICAgICB9CisKKyAgICAgICAgRFBSSU5UKCJTdWNjZXNzZnVsbHkgYWRkZWQgbmV3IHJlZ2lvblxu Iik7CisgICAgICAgIGRldi0+bnJlZ2lvbnMrKzsKKyAgICAgICAgdm1zZ19zZXRfcmVwbHlfdTY0 KHZtc2csIDApOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9Cit9CisKK3N0YXRpYyBpbmxp bmUgYm9vbCByZWdfZXF1YWwoVnVEZXZSZWdpb24gKnZ1ZGV2X3JlZywKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgVmhvc3RVc2VyTWVtb3J5UmVnaW9uICptc2dfcmVnKQoreworICAgIGlm ICh2dWRldl9yZWctPmdwYSA9PSBtc2dfcmVnLT5ndWVzdF9waHlzX2FkZHIgJiYKKyAgICAgICAg dnVkZXZfcmVnLT5xdmEgPT0gbXNnX3JlZy0+dXNlcnNwYWNlX2FkZHIgJiYKKyAgICAgICAgdnVk ZXZfcmVnLT5zaXplID09IG1zZ19yZWctPm1lbW9yeV9zaXplKSB7CisgICAgICAgIHJldHVybiB0 cnVlOworICAgIH0KKworICAgIHJldHVybiBmYWxzZTsKK30KKworc3RhdGljIGJvb2wKK3Z1X3Jl bV9tZW1fcmVnKFZ1RGV2ICpkZXYsIFZob3N0VXNlck1zZyAqdm1zZykgeworICAgIGludCBpLCBq OworICAgIGJvb2wgZm91bmQgPSBmYWxzZTsKKyAgICBWdURldlJlZ2lvbiBzaGFkb3dfcmVnaW9u c1tWSE9TVF9VU0VSX01BWF9SQU1fU0xPVFNdID0ge307CisgICAgVmhvc3RVc2VyTWVtb3J5UmVn aW9uIG0gPSB2bXNnLT5wYXlsb2FkLm1lbXJlZy5yZWdpb24sICptc2dfcmVnaW9uID0gJm07CisK KyAgICBEUFJJTlQoIlJlbW92aW5nIHJlZ2lvbjpcbiIpOworICAgIERQUklOVCgiICAgIGd1ZXN0 X3BoeXNfYWRkcjogMHglMDE2IlBSSXg2NCJcbiIsCisgICAgICAgICAgIG1zZ19yZWdpb24tPmd1 ZXN0X3BoeXNfYWRkcik7CisgICAgRFBSSU5UKCIgICAgbWVtb3J5X3NpemU6ICAgICAweCUwMTYi UFJJeDY0IlxuIiwKKyAgICAgICAgICAgbXNnX3JlZ2lvbi0+bWVtb3J5X3NpemUpOworICAgIERQ UklOVCgiICAgIHVzZXJzcGFjZV9hZGRyICAgMHglMDE2IlBSSXg2NCJcbiIsCisgICAgICAgICAg IG1zZ19yZWdpb24tPnVzZXJzcGFjZV9hZGRyKTsKKyAgICBEUFJJTlQoIiAgICBtbWFwX29mZnNl dCAgICAgIDB4JTAxNiJQUkl4NjQiXG4iLAorICAgICAgICAgICBtc2dfcmVnaW9uLT5tbWFwX29m ZnNldCk7CisKKyAgICBmb3IgKGkgPSAwLCBqID0gMDsgaSA8IGRldi0+bnJlZ2lvbnM7IGkrKykg eworICAgICAgICBpZiAoIXJlZ19lcXVhbCgmZGV2LT5yZWdpb25zW2ldLCBtc2dfcmVnaW9uKSkg eworICAgICAgICAgICAgc2hhZG93X3JlZ2lvbnNbal0uZ3BhID0gZGV2LT5yZWdpb25zW2ldLmdw YTsKKyAgICAgICAgICAgIHNoYWRvd19yZWdpb25zW2pdLnNpemUgPSBkZXYtPnJlZ2lvbnNbaV0u c2l6ZTsKKyAgICAgICAgICAgIHNoYWRvd19yZWdpb25zW2pdLnF2YSA9IGRldi0+cmVnaW9uc1tp XS5xdmE7CisgICAgICAgICAgICBzaGFkb3dfcmVnaW9uc1tqXS5tbWFwX2FkZHIgPSBkZXYtPnJl Z2lvbnNbaV0ubW1hcF9hZGRyOworICAgICAgICAgICAgc2hhZG93X3JlZ2lvbnNbal0ubW1hcF9v ZmZzZXQgPSBkZXYtPnJlZ2lvbnNbaV0ubW1hcF9vZmZzZXQ7CisgICAgICAgICAgICBqKys7Cisg ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBmb3VuZCA9IHRydWU7CisgICAgICAgICAgICBW dURldlJlZ2lvbiAqciA9ICZkZXYtPnJlZ2lvbnNbaV07CisgICAgICAgICAgICB2b2lkICptID0g KHZvaWQgKikgKHVpbnRwdHJfdCkgci0+bW1hcF9hZGRyOworCisgICAgICAgICAgICBpZiAobSkg eworICAgICAgICAgICAgICAgIG11bm1hcChtLCByLT5zaXplICsgci0+bW1hcF9vZmZzZXQpOwor ICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgaWYgKGZvdW5kKSB7CisgICAg ICAgIG1lbWNweShkZXYtPnJlZ2lvbnMsIHNoYWRvd19yZWdpb25zLAorICAgICAgICAgICAgICAg c2l6ZW9mKFZ1RGV2UmVnaW9uKSAqIFZIT1NUX1VTRVJfTUFYX1JBTV9TTE9UUyk7CisgICAgICAg IERQUklOVCgiU3VjY2Vzc2Z1bGx5IHJlbW92ZWQgYSByZWdpb25cbiIpOworICAgICAgICBkZXYt Pm5yZWdpb25zLS07CisgICAgICAgIHZtc2dfc2V0X3JlcGx5X3U2NCh2bXNnLCAwKTsKKyAgICB9 IGVsc2UgeworICAgICAgICB2dV9wYW5pYyhkZXYsICJTcGVjaWZpZWQgcmVnaW9uIG5vdCBmb3Vu ZFxuIik7CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKK3N0YXRpYyBib29sCit2dV9z ZXRfbWVtX3RhYmxlX2V4ZWNfcG9zdGNvcHkoVnVEZXYgKmRldiwgVmhvc3RVc2VyTXNnICp2bXNn KQoreworICAgIGludCBpOworICAgIFZob3N0VXNlck1lbW9yeSBtID0gdm1zZy0+cGF5bG9hZC5t ZW1vcnksICptZW1vcnkgPSAmbTsKKyAgICBkZXYtPm5yZWdpb25zID0gbWVtb3J5LT5ucmVnaW9u czsKKworICAgIERQUklOVCgiTnJlZ2lvbnM6ICV1XG4iLCBtZW1vcnktPm5yZWdpb25zKTsKKyAg ICBmb3IgKGkgPSAwOyBpIDwgZGV2LT5ucmVnaW9uczsgaSsrKSB7CisgICAgICAgIHZvaWQgKm1t YXBfYWRkcjsKKyAgICAgICAgVmhvc3RVc2VyTWVtb3J5UmVnaW9uICptc2dfcmVnaW9uID0gJm1l bW9yeS0+cmVnaW9uc1tpXTsKKyAgICAgICAgVnVEZXZSZWdpb24gKmRldl9yZWdpb24gPSAmZGV2 LT5yZWdpb25zW2ldOworCisgICAgICAgIERQUklOVCgiUmVnaW9uICVkXG4iLCBpKTsKKyAgICAg ICAgRFBSSU5UKCIgICAgZ3Vlc3RfcGh5c19hZGRyOiAweCUwMTYiUFJJeDY0IlxuIiwKKyAgICAg ICAgICAgICAgIG1zZ19yZWdpb24tPmd1ZXN0X3BoeXNfYWRkcik7CisgICAgICAgIERQUklOVCgi ICAgIG1lbW9yeV9zaXplOiAgICAgMHglMDE2IlBSSXg2NCJcbiIsCisgICAgICAgICAgICAgICBt c2dfcmVnaW9uLT5tZW1vcnlfc2l6ZSk7CisgICAgICAgIERQUklOVCgiICAgIHVzZXJzcGFjZV9h ZGRyICAgMHglMDE2IlBSSXg2NCJcbiIsCisgICAgICAgICAgICAgICBtc2dfcmVnaW9uLT51c2Vy c3BhY2VfYWRkcik7CisgICAgICAgIERQUklOVCgiICAgIG1tYXBfb2Zmc2V0ICAgICAgMHglMDE2 IlBSSXg2NCJcbiIsCisgICAgICAgICAgICAgICBtc2dfcmVnaW9uLT5tbWFwX29mZnNldCk7CisK KyAgICAgICAgZGV2X3JlZ2lvbi0+Z3BhID0gbXNnX3JlZ2lvbi0+Z3Vlc3RfcGh5c19hZGRyOwor ICAgICAgICBkZXZfcmVnaW9uLT5zaXplID0gbXNnX3JlZ2lvbi0+bWVtb3J5X3NpemU7CisgICAg ICAgIGRldl9yZWdpb24tPnF2YSA9IG1zZ19yZWdpb24tPnVzZXJzcGFjZV9hZGRyOworICAgICAg ICBkZXZfcmVnaW9uLT5tbWFwX29mZnNldCA9IG1zZ19yZWdpb24tPm1tYXBfb2Zmc2V0OworCisg ICAgICAgIC8qIFdlIGRvbid0IHVzZSBvZmZzZXQgYXJndW1lbnQgb2YgbW1hcCgpIHNpbmNlIHRo ZQorICAgICAgICAgKiBtYXBwZWQgYWRkcmVzcyBoYXMgdG8gYmUgcGFnZSBhbGlnbmVkLCBhbmQg d2UgdXNlIGh1Z2UKKyAgICAgICAgICogcGFnZXMuCisgICAgICAgICAqIEluIHBvc3Rjb3B5IHdl J3JlIHVzaW5nIFBST1RfTk9ORSBoZXJlIHRvIGNhdGNoIGFueW9uZQorICAgICAgICAgKiBhY2Nl c3NpbmcgaXQgYmVmb3JlIHdlIHVzZXJmYXVsdAorICAgICAgICAgKi8KKyAgICAgICAgbW1hcF9h ZGRyID0gbW1hcCgwLCBkZXZfcmVnaW9uLT5zaXplICsgZGV2X3JlZ2lvbi0+bW1hcF9vZmZzZXQs CisgICAgICAgICAgICAgICAgICAgICAgICAgUFJPVF9OT05FLCBNQVBfU0hBUkVELAorICAgICAg ICAgICAgICAgICAgICAgICAgIHZtc2ctPmZkc1tpXSwgMCk7CisKKyAgICAgICAgaWYgKG1tYXBf YWRkciA9PSBNQVBfRkFJTEVEKSB7CisgICAgICAgICAgICB2dV9wYW5pYyhkZXYsICJyZWdpb24g bW1hcCBlcnJvcjogJXMiLCBzdHJlcnJvcihlcnJubykpOworICAgICAgICB9IGVsc2UgeworICAg ICAgICAgICAgZGV2X3JlZ2lvbi0+bW1hcF9hZGRyID0gKHVpbnQ2NF90KSh1aW50cHRyX3QpbW1h cF9hZGRyOworICAgICAgICAgICAgRFBSSU5UKCIgICAgbW1hcF9hZGRyOiAgICAgICAweCUwMTYi UFJJeDY0IlxuIiwKKyAgICAgICAgICAgICAgICAgICBkZXZfcmVnaW9uLT5tbWFwX2FkZHIpOwor ICAgICAgICB9CisKKyAgICAgICAgLyogUmV0dXJuIHRoZSBhZGRyZXNzIHRvIFFFTVUgc28gdGhh dCBpdCBjYW4gdHJhbnNsYXRlIHRoZSB1ZmQKKyAgICAgICAgICogZmF1bHQgYWRkcmVzc2VzIGJh Y2suCisgICAgICAgICAqLworICAgICAgICBtc2dfcmVnaW9uLT51c2Vyc3BhY2VfYWRkciA9ICh1 aW50cHRyX3QpKG1tYXBfYWRkciArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgZGV2X3JlZ2lvbi0+bW1hcF9vZmZzZXQpOworICAgICAgICBjbG9zZSh2 bXNnLT5mZHNbaV0pOworICAgIH0KKworICAgIC8qIFNlbmQgdGhlIG1lc3NhZ2UgYmFjayB0byBx ZW11IHdpdGggdGhlIGFkZHJlc3NlcyBmaWxsZWQgaW4gKi8KKyAgICB2bXNnLT5mZF9udW0gPSAw OworICAgIGlmICghdnVfc2VuZF9yZXBseShkZXYsIGRldi0+c29jaywgdm1zZykpIHsKKyAgICAg ICAgdnVfcGFuaWMoZGV2LCAiZmFpbGVkIHRvIHJlc3BvbmQgdG8gc2V0LW1lbS10YWJsZSBmb3Ig cG9zdGNvcHkiKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIC8qIFdhaXQg Zm9yIFFFTVUgdG8gY29uZmlybSB0aGF0IGl0J3MgcmVnaXN0ZXJlZCB0aGUgaGFuZGxlciBmb3Ig dGhlCisgICAgICogZmF1bHRzLgorICAgICAqLworICAgIGlmICghZGV2LT5yZWFkX21zZyhkZXYs IGRldi0+c29jaywgdm1zZykgfHwKKyAgICAgICAgdm1zZy0+c2l6ZSAhPSBzaXplb2Yodm1zZy0+ cGF5bG9hZC51NjQpIHx8CisgICAgICAgIHZtc2ctPnBheWxvYWQudTY0ICE9IDApIHsKKyAgICAg ICAgdnVfcGFuaWMoZGV2LCAiZmFpbGVkIHRvIHJlY2VpdmUgdmFsaWQgYWNrIGZvciBwb3N0Y29w eSBzZXQtbWVtLXRhYmxlIik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICAv KiBPSywgbm93IHdlIGNhbiBnbyBhbmQgcmVnaXN0ZXIgdGhlIG1lbW9yeSBhbmQgZ2VuZXJhdGUg ZmF1bHRzICovCisgICAgKHZvaWQpZ2VuZXJhdGVfZmF1bHRzKGRldik7CisKKyAgICByZXR1cm4g ZmFsc2U7Cit9CisKK3N0YXRpYyBib29sCit2dV9zZXRfbWVtX3RhYmxlX2V4ZWMoVnVEZXYgKmRl diwgVmhvc3RVc2VyTXNnICp2bXNnKQoreworICAgIGludCBpOworICAgIFZob3N0VXNlck1lbW9y eSBtID0gdm1zZy0+cGF5bG9hZC5tZW1vcnksICptZW1vcnkgPSAmbTsKKworICAgIGZvciAoaSA9 IDA7IGkgPCBkZXYtPm5yZWdpb25zOyBpKyspIHsKKyAgICAgICAgVnVEZXZSZWdpb24gKnIgPSAm ZGV2LT5yZWdpb25zW2ldOworICAgICAgICB2b2lkICptID0gKHZvaWQgKikgKHVpbnRwdHJfdCkg ci0+bW1hcF9hZGRyOworCisgICAgICAgIGlmIChtKSB7CisgICAgICAgICAgICBtdW5tYXAobSwg ci0+c2l6ZSArIHItPm1tYXBfb2Zmc2V0KTsKKyAgICAgICAgfQorICAgIH0KKyAgICBkZXYtPm5y ZWdpb25zID0gbWVtb3J5LT5ucmVnaW9uczsKKworICAgIGlmIChkZXYtPnBvc3Rjb3B5X2xpc3Rl bmluZykgeworICAgICAgICByZXR1cm4gdnVfc2V0X21lbV90YWJsZV9leGVjX3Bvc3Rjb3B5KGRl diwgdm1zZyk7CisgICAgfQorCisgICAgRFBSSU5UKCJOcmVnaW9uczogJXVcbiIsIG1lbW9yeS0+ bnJlZ2lvbnMpOworICAgIGZvciAoaSA9IDA7IGkgPCBkZXYtPm5yZWdpb25zOyBpKyspIHsKKyAg ICAgICAgdm9pZCAqbW1hcF9hZGRyOworICAgICAgICBWaG9zdFVzZXJNZW1vcnlSZWdpb24gKm1z Z19yZWdpb24gPSAmbWVtb3J5LT5yZWdpb25zW2ldOworICAgICAgICBWdURldlJlZ2lvbiAqZGV2 X3JlZ2lvbiA9ICZkZXYtPnJlZ2lvbnNbaV07CisKKyAgICAgICAgRFBSSU5UKCJSZWdpb24gJWRc biIsIGkpOworICAgICAgICBEUFJJTlQoIiAgICBndWVzdF9waHlzX2FkZHI6IDB4JTAxNiJQUkl4 NjQiXG4iLAorICAgICAgICAgICAgICAgbXNnX3JlZ2lvbi0+Z3Vlc3RfcGh5c19hZGRyKTsKKyAg ICAgICAgRFBSSU5UKCIgICAgbWVtb3J5X3NpemU6ICAgICAweCUwMTYiUFJJeDY0IlxuIiwKKyAg ICAgICAgICAgICAgIG1zZ19yZWdpb24tPm1lbW9yeV9zaXplKTsKKyAgICAgICAgRFBSSU5UKCIg ICAgdXNlcnNwYWNlX2FkZHIgICAweCUwMTYiUFJJeDY0IlxuIiwKKyAgICAgICAgICAgICAgIG1z Z19yZWdpb24tPnVzZXJzcGFjZV9hZGRyKTsKKyAgICAgICAgRFBSSU5UKCIgICAgbW1hcF9vZmZz ZXQgICAgICAweCUwMTYiUFJJeDY0IlxuIiwKKyAgICAgICAgICAgICAgIG1zZ19yZWdpb24tPm1t YXBfb2Zmc2V0KTsKKworICAgICAgICBkZXZfcmVnaW9uLT5ncGEgPSBtc2dfcmVnaW9uLT5ndWVz dF9waHlzX2FkZHI7CisgICAgICAgIGRldl9yZWdpb24tPnNpemUgPSBtc2dfcmVnaW9uLT5tZW1v cnlfc2l6ZTsKKyAgICAgICAgZGV2X3JlZ2lvbi0+cXZhID0gbXNnX3JlZ2lvbi0+dXNlcnNwYWNl X2FkZHI7CisgICAgICAgIGRldl9yZWdpb24tPm1tYXBfb2Zmc2V0ID0gbXNnX3JlZ2lvbi0+bW1h cF9vZmZzZXQ7CisKKyAgICAgICAgLyogV2UgZG9uJ3QgdXNlIG9mZnNldCBhcmd1bWVudCBvZiBt bWFwKCkgc2luY2UgdGhlCisgICAgICAgICAqIG1hcHBlZCBhZGRyZXNzIGhhcyB0byBiZSBwYWdl IGFsaWduZWQsIGFuZCB3ZSB1c2UgaHVnZQorICAgICAgICAgKiBwYWdlcy4gICovCisgICAgICAg IG1tYXBfYWRkciA9IG1tYXAoMCwgZGV2X3JlZ2lvbi0+c2l6ZSArIGRldl9yZWdpb24tPm1tYXBf b2Zmc2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgIFBST1RfUkVBRCB8IFBST1RfV1JJVEUs IE1BUF9TSEFSRUQsCisgICAgICAgICAgICAgICAgICAgICAgICAgdm1zZy0+ZmRzW2ldLCAwKTsK KworICAgICAgICBpZiAobW1hcF9hZGRyID09IE1BUF9GQUlMRUQpIHsKKyAgICAgICAgICAgIHZ1 X3BhbmljKGRldiwgInJlZ2lvbiBtbWFwIGVycm9yOiAlcyIsIHN0cmVycm9yKGVycm5vKSk7Cisg ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBkZXZfcmVnaW9uLT5tbWFwX2FkZHIgPSAodWlu dDY0X3QpKHVpbnRwdHJfdCltbWFwX2FkZHI7CisgICAgICAgICAgICBEUFJJTlQoIiAgICBtbWFw X2FkZHI6ICAgICAgIDB4JTAxNiJQUkl4NjQiXG4iLAorICAgICAgICAgICAgICAgICAgIGRldl9y ZWdpb24tPm1tYXBfYWRkcik7CisgICAgICAgIH0KKworICAgICAgICBjbG9zZSh2bXNnLT5mZHNb aV0pOworICAgIH0KKworICAgIGZvciAoaSA9IDA7IGkgPCBkZXYtPm1heF9xdWV1ZXM7IGkrKykg eworICAgICAgICBpZiAoZGV2LT52cVtpXS52cmluZy5kZXNjKSB7CisgICAgICAgICAgICBpZiAo bWFwX3JpbmcoZGV2LCAmZGV2LT52cVtpXSkpIHsKKyAgICAgICAgICAgICAgICB2dV9wYW5pYyhk ZXYsICJyZW1hcHBpbmcgcXVldWUgJWQgZHVyaW5nIHNldG1lbXRhYmxlIiwgaSk7CisgICAgICAg ICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3N0YXRp YyBib29sCit2dV9zZXRfbG9nX2Jhc2VfZXhlYyhWdURldiAqZGV2LCBWaG9zdFVzZXJNc2cgKnZt c2cpCit7CisgICAgaW50IGZkOworICAgIHVpbnQ2NF90IGxvZ19tbWFwX3NpemUsIGxvZ19tbWFw X29mZnNldDsKKyAgICB2b2lkICpyYzsKKworICAgIGlmICh2bXNnLT5mZF9udW0gIT0gMSB8fAor ICAgICAgICB2bXNnLT5zaXplICE9IHNpemVvZih2bXNnLT5wYXlsb2FkLmxvZykpIHsKKyAgICAg ICAgdnVfcGFuaWMoZGV2LCAiSW52YWxpZCBsb2dfYmFzZSBtZXNzYWdlIik7CisgICAgICAgIHJl dHVybiB0cnVlOworICAgIH0KKworICAgIGZkID0gdm1zZy0+ZmRzWzBdOworICAgIGxvZ19tbWFw X29mZnNldCA9IHZtc2ctPnBheWxvYWQubG9nLm1tYXBfb2Zmc2V0OworICAgIGxvZ19tbWFwX3Np emUgPSB2bXNnLT5wYXlsb2FkLmxvZy5tbWFwX3NpemU7CisgICAgRFBSSU5UKCJMb2cgbW1hcF9v ZmZzZXQ6ICUiUFJJZDY0IlxuIiwgbG9nX21tYXBfb2Zmc2V0KTsKKyAgICBEUFJJTlQoIkxvZyBt bWFwX3NpemU6ICAgJSJQUklkNjQiXG4iLCBsb2dfbW1hcF9zaXplKTsKKworICAgIHJjID0gbW1h cCgwLCBsb2dfbW1hcF9zaXplLCBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFLCBNQVBfU0hBUkVELCBm ZCwKKyAgICAgICAgICAgICAgbG9nX21tYXBfb2Zmc2V0KTsKKyAgICBjbG9zZShmZCk7CisgICAg aWYgKHJjID09IE1BUF9GQUlMRUQpIHsKKyAgICAgICAgcGVycm9yKCJsb2cgbW1hcCBlcnJvciIp OworICAgIH0KKworICAgIGlmIChkZXYtPmxvZ190YWJsZSkgeworICAgICAgICBtdW5tYXAoZGV2 LT5sb2dfdGFibGUsIGRldi0+bG9nX3NpemUpOworICAgIH0KKyAgICBkZXYtPmxvZ190YWJsZSA9 IHJjOworICAgIGRldi0+bG9nX3NpemUgPSBsb2dfbW1hcF9zaXplOworCisgICAgdm1zZy0+c2l6 ZSA9IHNpemVvZih2bXNnLT5wYXlsb2FkLnU2NCk7CisgICAgdm1zZy0+ZmRfbnVtID0gMDsKKwor ICAgIHJldHVybiB0cnVlOworfQorCitzdGF0aWMgYm9vbAordnVfc2V0X2xvZ19mZF9leGVjKFZ1 RGV2ICpkZXYsIFZob3N0VXNlck1zZyAqdm1zZykKK3sKKyAgICBpZiAodm1zZy0+ZmRfbnVtICE9 IDEpIHsKKyAgICAgICAgdnVfcGFuaWMoZGV2LCAiSW52YWxpZCBsb2dfZmQgbWVzc2FnZSIpOwor ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgaWYgKGRldi0+bG9nX2NhbGxfZmQg IT0gLTEpIHsKKyAgICAgICAgY2xvc2UoZGV2LT5sb2dfY2FsbF9mZCk7CisgICAgfQorICAgIGRl di0+bG9nX2NhbGxfZmQgPSB2bXNnLT5mZHNbMF07CisgICAgRFBSSU5UKCJHb3QgbG9nX2NhbGxf ZmQ6ICVkXG4iLCB2bXNnLT5mZHNbMF0pOworCisgICAgcmV0dXJuIGZhbHNlOworfQorCitzdGF0 aWMgYm9vbAordnVfc2V0X3ZyaW5nX251bV9leGVjKFZ1RGV2ICpkZXYsIFZob3N0VXNlck1zZyAq dm1zZykKK3sKKyAgICB1bnNpZ25lZCBpbnQgaW5kZXggPSB2bXNnLT5wYXlsb2FkLnN0YXRlLmlu ZGV4OworICAgIHVuc2lnbmVkIGludCBudW0gPSB2bXNnLT5wYXlsb2FkLnN0YXRlLm51bTsKKwor ICAgIERQUklOVCgiU3RhdGUuaW5kZXg6ICV1XG4iLCBpbmRleCk7CisgICAgRFBSSU5UKCJTdGF0 ZS5udW06ICAgJXVcbiIsIG51bSk7CisgICAgZGV2LT52cVtpbmRleF0udnJpbmcubnVtID0gbnVt OworCisgICAgcmV0dXJuIGZhbHNlOworfQorCitzdGF0aWMgYm9vbAordnVfc2V0X3ZyaW5nX2Fk ZHJfZXhlYyhWdURldiAqZGV2LCBWaG9zdFVzZXJNc2cgKnZtc2cpCit7CisgICAgc3RydWN0IHZo b3N0X3ZyaW5nX2FkZHIgYWRkciA9IHZtc2ctPnBheWxvYWQuYWRkciwgKnZyYSA9ICZhZGRyOwor ICAgIHVuc2lnbmVkIGludCBpbmRleCA9IHZyYS0+aW5kZXg7CisgICAgVnVWaXJ0cSAqdnEgPSAm ZGV2LT52cVtpbmRleF07CisKKyAgICBEUFJJTlQoInZob3N0X3ZyaW5nX2FkZHI6XG4iKTsKKyAg ICBEUFJJTlQoIiAgICBpbmRleDogICVkXG4iLCB2cmEtPmluZGV4KTsKKyAgICBEUFJJTlQoIiAg ICBmbGFnczogICVkXG4iLCB2cmEtPmZsYWdzKTsKKyAgICBEUFJJTlQoIiAgICBkZXNjX3VzZXJf YWRkcjogICAweCUwMTYiIFBSSXg2NCAiXG4iLCAodWludDY0X3QpdnJhLT5kZXNjX3VzZXJfYWRk cik7CisgICAgRFBSSU5UKCIgICAgdXNlZF91c2VyX2FkZHI6ICAgMHglMDE2IiBQUkl4NjQgIlxu IiwgKHVpbnQ2NF90KXZyYS0+dXNlZF91c2VyX2FkZHIpOworICAgIERQUklOVCgiICAgIGF2YWls X3VzZXJfYWRkcjogIDB4JTAxNiIgUFJJeDY0ICJcbiIsICh1aW50NjRfdCl2cmEtPmF2YWlsX3Vz ZXJfYWRkcik7CisgICAgRFBSSU5UKCIgICAgbG9nX2d1ZXN0X2FkZHI6ICAgMHglMDE2IiBQUkl4 NjQgIlxuIiwgKHVpbnQ2NF90KXZyYS0+bG9nX2d1ZXN0X2FkZHIpOworCisgICAgdnEtPnZyYSA9 ICp2cmE7CisgICAgdnEtPnZyaW5nLmZsYWdzID0gdnJhLT5mbGFnczsKKyAgICB2cS0+dnJpbmcu bG9nX2d1ZXN0X2FkZHIgPSB2cmEtPmxvZ19ndWVzdF9hZGRyOworCisKKyAgICBpZiAobWFwX3Jp bmcoZGV2LCB2cSkpIHsKKyAgICAgICAgdnVfcGFuaWMoZGV2LCAiSW52YWxpZCB2cmluZ19hZGRy IG1lc3NhZ2UiKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHZxLT51c2Vk X2lkeCA9IGxlMTZ0b2godnEtPnZyaW5nLnVzZWQtPmlkeCk7CisKKyAgICBpZiAodnEtPmxhc3Rf YXZhaWxfaWR4ICE9IHZxLT51c2VkX2lkeCkgeworICAgICAgICBib29sIHJlc3VtZSA9IGRldi0+ aWZhY2UtPnF1ZXVlX2lzX3Byb2Nlc3NlZF9pbl9vcmRlciAmJgorICAgICAgICAgICAgZGV2LT5p ZmFjZS0+cXVldWVfaXNfcHJvY2Vzc2VkX2luX29yZGVyKGRldiwgaW5kZXgpOworCisgICAgICAg IERQUklOVCgiTGFzdCBhdmFpbCBpbmRleCAhPSB1c2VkIGluZGV4OiAldSAhPSAldSVzXG4iLAor ICAgICAgICAgICAgICAgdnEtPmxhc3RfYXZhaWxfaWR4LCB2cS0+dXNlZF9pZHgsCisgICAgICAg ICAgICAgICByZXN1bWUgPyAiLCByZXN1bWluZyIgOiAiIik7CisKKyAgICAgICAgaWYgKHJlc3Vt ZSkgeworICAgICAgICAgICAgdnEtPnNoYWRvd19hdmFpbF9pZHggPSB2cS0+bGFzdF9hdmFpbF9p ZHggPSB2cS0+dXNlZF9pZHg7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gZmFsc2U7 Cit9CisKK3N0YXRpYyBib29sCit2dV9zZXRfdnJpbmdfYmFzZV9leGVjKFZ1RGV2ICpkZXYsIFZo b3N0VXNlck1zZyAqdm1zZykKK3sKKyAgICB1bnNpZ25lZCBpbnQgaW5kZXggPSB2bXNnLT5wYXls b2FkLnN0YXRlLmluZGV4OworICAgIHVuc2lnbmVkIGludCBudW0gPSB2bXNnLT5wYXlsb2FkLnN0 YXRlLm51bTsKKworICAgIERQUklOVCgiU3RhdGUuaW5kZXg6ICV1XG4iLCBpbmRleCk7CisgICAg RFBSSU5UKCJTdGF0ZS5udW06ICAgJXVcbiIsIG51bSk7CisgICAgZGV2LT52cVtpbmRleF0uc2hh ZG93X2F2YWlsX2lkeCA9IGRldi0+dnFbaW5kZXhdLmxhc3RfYXZhaWxfaWR4ID0gbnVtOworCisg ICAgcmV0dXJuIGZhbHNlOworfQorCitzdGF0aWMgYm9vbAordnVfZ2V0X3ZyaW5nX2Jhc2VfZXhl YyhWdURldiAqZGV2LCBWaG9zdFVzZXJNc2cgKnZtc2cpCit7CisgICAgdW5zaWduZWQgaW50IGlu ZGV4ID0gdm1zZy0+cGF5bG9hZC5zdGF0ZS5pbmRleDsKKworICAgIERQUklOVCgiU3RhdGUuaW5k ZXg6ICV1XG4iLCBpbmRleCk7CisgICAgdm1zZy0+cGF5bG9hZC5zdGF0ZS5udW0gPSBkZXYtPnZx W2luZGV4XS5sYXN0X2F2YWlsX2lkeDsKKyAgICB2bXNnLT5zaXplID0gc2l6ZW9mKHZtc2ctPnBh eWxvYWQuc3RhdGUpOworCisgICAgZGV2LT52cVtpbmRleF0uc3RhcnRlZCA9IGZhbHNlOworICAg IGlmIChkZXYtPmlmYWNlLT5xdWV1ZV9zZXRfc3RhcnRlZCkgeworICAgICAgICBkZXYtPmlmYWNl LT5xdWV1ZV9zZXRfc3RhcnRlZChkZXYsIGluZGV4LCBmYWxzZSk7CisgICAgfQorCisgICAgaWYg KGRldi0+dnFbaW5kZXhdLmNhbGxfZmQgIT0gLTEpIHsKKyAgICAgICAgY2xvc2UoZGV2LT52cVtp bmRleF0uY2FsbF9mZCk7CisgICAgICAgIGRldi0+dnFbaW5kZXhdLmNhbGxfZmQgPSAtMTsKKyAg ICB9CisgICAgaWYgKGRldi0+dnFbaW5kZXhdLmtpY2tfZmQgIT0gLTEpIHsKKyAgICAgICAgZGV2 LT5yZW1vdmVfd2F0Y2goZGV2LCBkZXYtPnZxW2luZGV4XS5raWNrX2ZkKTsKKyAgICAgICAgY2xv c2UoZGV2LT52cVtpbmRleF0ua2lja19mZCk7CisgICAgICAgIGRldi0+dnFbaW5kZXhdLmtpY2tf ZmQgPSAtMTsKKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworc3RhdGljIGJvb2wKK3Z1 X2NoZWNrX3F1ZXVlX21zZ19maWxlKFZ1RGV2ICpkZXYsIFZob3N0VXNlck1zZyAqdm1zZykKK3sK KyAgICBpbnQgaW5kZXggPSB2bXNnLT5wYXlsb2FkLnU2NCAmIFZIT1NUX1VTRVJfVlJJTkdfSURY X01BU0s7CisgICAgYm9vbCBub2ZkID0gdm1zZy0+cGF5bG9hZC51NjQgJiBWSE9TVF9VU0VSX1ZS SU5HX05PRkRfTUFTSzsKKworICAgIGlmIChpbmRleCA+PSBkZXYtPm1heF9xdWV1ZXMpIHsKKyAg ICAgICAgdm1zZ19jbG9zZV9mZHModm1zZyk7CisgICAgICAgIHZ1X3BhbmljKGRldiwgIkludmFs aWQgcXVldWUgaW5kZXg6ICV1IiwgaW5kZXgpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg fQorCisgICAgaWYgKG5vZmQpIHsKKyAgICAgICAgdm1zZ19jbG9zZV9mZHModm1zZyk7CisgICAg ICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIGlmICh2bXNnLT5mZF9udW0gIT0gMSkgewor ICAgICAgICB2bXNnX2Nsb3NlX2Zkcyh2bXNnKTsKKyAgICAgICAgdnVfcGFuaWMoZGV2LCAiSW52 YWxpZCBmZHMgaW4gcmVxdWVzdDogJWQiLCB2bXNnLT5yZXF1ZXN0KTsKKyAgICAgICAgcmV0dXJu IGZhbHNlOworICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorCitzdGF0aWMgaW50CitpbmZs aWdodF9kZXNjX2NvbXBhcmUoY29uc3Qgdm9pZCAqYSwgY29uc3Qgdm9pZCAqYikKK3sKKyAgICBW dVZpcnRxSW5mbGlnaHREZXNjICpkZXNjMCA9IChWdVZpcnRxSW5mbGlnaHREZXNjICopYSwKKyAg ICAgICAgICAgICAgICAgICAgICAgICpkZXNjMSA9IChWdVZpcnRxSW5mbGlnaHREZXNjICopYjsK KworICAgIGlmIChkZXNjMS0+Y291bnRlciA+IGRlc2MwLT5jb3VudGVyICYmCisgICAgICAgIChk ZXNjMS0+Y291bnRlciAtIGRlc2MwLT5jb3VudGVyKSA8IFZJUlRRVUVVRV9NQVhfU0laRSAqIDIp IHsKKyAgICAgICAgcmV0dXJuIDE7CisgICAgfQorCisgICAgcmV0dXJuIC0xOworfQorCitzdGF0 aWMgaW50Cit2dV9jaGVja19xdWV1ZV9pbmZsaWdodHMoVnVEZXYgKmRldiwgVnVWaXJ0cSAqdnEp Cit7CisgICAgaW50IGkgPSAwOworCisgICAgaWYgKCF2dV9oYXNfcHJvdG9jb2xfZmVhdHVyZShk ZXYsIFZIT1NUX1VTRVJfUFJPVE9DT0xfRl9JTkZMSUdIVF9TSE1GRCkpIHsKKyAgICAgICAgcmV0 dXJuIDA7CisgICAgfQorCisgICAgaWYgKHVubGlrZWx5KCF2cS0+aW5mbGlnaHQpKSB7CisgICAg ICAgIHJldHVybiAtMTsKKyAgICB9CisKKyAgICBpZiAodW5saWtlbHkoIXZxLT5pbmZsaWdodC0+ dmVyc2lvbikpIHsKKyAgICAgICAgLyogaW5pdGlhbGl6ZSB0aGUgYnVmZmVyICovCisgICAgICAg IHZxLT5pbmZsaWdodC0+dmVyc2lvbiA9IElORkxJR0hUX1ZFUlNJT047CisgICAgICAgIHJldHVy biAwOworICAgIH0KKworICAgIHZxLT51c2VkX2lkeCA9IGxlMTZ0b2godnEtPnZyaW5nLnVzZWQt PmlkeCk7CisgICAgdnEtPnJlc3VibWl0X251bSA9IDA7CisgICAgdnEtPnJlc3VibWl0X2xpc3Qg PSBOVUxMOworICAgIHZxLT5jb3VudGVyID0gMDsKKworICAgIGlmICh1bmxpa2VseSh2cS0+aW5m bGlnaHQtPnVzZWRfaWR4ICE9IHZxLT51c2VkX2lkeCkpIHsKKyAgICAgICAgdnEtPmluZmxpZ2h0 LT5kZXNjW3ZxLT5pbmZsaWdodC0+bGFzdF9iYXRjaF9oZWFkXS5pbmZsaWdodCA9IDA7CisKKyAg ICAgICAgYmFycmllcigpOworCisgICAgICAgIHZxLT5pbmZsaWdodC0+dXNlZF9pZHggPSB2cS0+ dXNlZF9pZHg7CisgICAgfQorCisgICAgZm9yIChpID0gMDsgaSA8IHZxLT5pbmZsaWdodC0+ZGVz Y19udW07IGkrKykgeworICAgICAgICBpZiAodnEtPmluZmxpZ2h0LT5kZXNjW2ldLmluZmxpZ2h0 ID09IDEpIHsKKyAgICAgICAgICAgIHZxLT5pbnVzZSsrOworICAgICAgICB9CisgICAgfQorCisg ICAgdnEtPnNoYWRvd19hdmFpbF9pZHggPSB2cS0+bGFzdF9hdmFpbF9pZHggPSB2cS0+aW51c2Ug KyB2cS0+dXNlZF9pZHg7CisKKyAgICBpZiAodnEtPmludXNlKSB7CisgICAgICAgIHZxLT5yZXN1 Ym1pdF9saXN0ID0gY2FsbG9jKHZxLT5pbnVzZSwgc2l6ZW9mKFZ1VmlydHFJbmZsaWdodERlc2Mp KTsKKyAgICAgICAgaWYgKCF2cS0+cmVzdWJtaXRfbGlzdCkgeworICAgICAgICAgICAgcmV0dXJu IC0xOworICAgICAgICB9CisKKyAgICAgICAgZm9yIChpID0gMDsgaSA8IHZxLT5pbmZsaWdodC0+ ZGVzY19udW07IGkrKykgeworICAgICAgICAgICAgaWYgKHZxLT5pbmZsaWdodC0+ZGVzY1tpXS5p bmZsaWdodCkgeworICAgICAgICAgICAgICAgIHZxLT5yZXN1Ym1pdF9saXN0W3ZxLT5yZXN1Ym1p dF9udW1dLmluZGV4ID0gaTsKKyAgICAgICAgICAgICAgICB2cS0+cmVzdWJtaXRfbGlzdFt2cS0+ cmVzdWJtaXRfbnVtXS5jb3VudGVyID0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICB2cS0+aW5mbGlnaHQtPmRlc2NbaV0uY291bnRlcjsKKyAgICAgICAgICAgICAgICB2 cS0+cmVzdWJtaXRfbnVtKys7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBp ZiAodnEtPnJlc3VibWl0X251bSA+IDEpIHsKKyAgICAgICAgICAgIHFzb3J0KHZxLT5yZXN1Ym1p dF9saXN0LCB2cS0+cmVzdWJtaXRfbnVtLAorICAgICAgICAgICAgICAgICAgc2l6ZW9mKFZ1Vmly dHFJbmZsaWdodERlc2MpLCBpbmZsaWdodF9kZXNjX2NvbXBhcmUpOworICAgICAgICB9CisgICAg ICAgIHZxLT5jb3VudGVyID0gdnEtPnJlc3VibWl0X2xpc3RbMF0uY291bnRlciArIDE7CisgICAg fQorCisgICAgLyogaW4gY2FzZSBvZiBJL08gaGFuZyBhZnRlciByZWNvbm5lY3RpbmcgKi8KKyAg ICBpZiAoZXZlbnRmZF93cml0ZSh2cS0+a2lja19mZCwgMSkpIHsKKyAgICAgICAgcmV0dXJuIC0x OworICAgIH0KKworICAgIHJldHVybiAwOworfQorCitzdGF0aWMgYm9vbAordnVfc2V0X3ZyaW5n X2tpY2tfZXhlYyhWdURldiAqZGV2LCBWaG9zdFVzZXJNc2cgKnZtc2cpCit7CisgICAgaW50IGlu ZGV4ID0gdm1zZy0+cGF5bG9hZC51NjQgJiBWSE9TVF9VU0VSX1ZSSU5HX0lEWF9NQVNLOworICAg IGJvb2wgbm9mZCA9IHZtc2ctPnBheWxvYWQudTY0ICYgVkhPU1RfVVNFUl9WUklOR19OT0ZEX01B U0s7CisKKyAgICBEUFJJTlQoInU2NDogMHglMDE2IlBSSXg2NCJcbiIsIHZtc2ctPnBheWxvYWQu dTY0KTsKKworICAgIGlmICghdnVfY2hlY2tfcXVldWVfbXNnX2ZpbGUoZGV2LCB2bXNnKSkgewor ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgaWYgKGRldi0+dnFbaW5kZXhdLmtp Y2tfZmQgIT0gLTEpIHsKKyAgICAgICAgZGV2LT5yZW1vdmVfd2F0Y2goZGV2LCBkZXYtPnZxW2lu ZGV4XS5raWNrX2ZkKTsKKyAgICAgICAgY2xvc2UoZGV2LT52cVtpbmRleF0ua2lja19mZCk7Cisg ICAgICAgIGRldi0+dnFbaW5kZXhdLmtpY2tfZmQgPSAtMTsKKyAgICB9CisKKyAgICBkZXYtPnZx W2luZGV4XS5raWNrX2ZkID0gbm9mZCA/IC0xIDogdm1zZy0+ZmRzWzBdOworICAgIERQUklOVCgi R290IGtpY2tfZmQ6ICVkIGZvciB2cTogJWRcbiIsIGRldi0+dnFbaW5kZXhdLmtpY2tfZmQsIGlu ZGV4KTsKKworICAgIGRldi0+dnFbaW5kZXhdLnN0YXJ0ZWQgPSB0cnVlOworICAgIGlmIChkZXYt PmlmYWNlLT5xdWV1ZV9zZXRfc3RhcnRlZCkgeworICAgICAgICBkZXYtPmlmYWNlLT5xdWV1ZV9z ZXRfc3RhcnRlZChkZXYsIGluZGV4LCB0cnVlKTsKKyAgICB9CisKKyAgICBpZiAoZGV2LT52cVtp bmRleF0ua2lja19mZCAhPSAtMSAmJiBkZXYtPnZxW2luZGV4XS5oYW5kbGVyKSB7CisgICAgICAg IGRldi0+c2V0X3dhdGNoKGRldiwgZGV2LT52cVtpbmRleF0ua2lja19mZCwgVlVfV0FUQ0hfSU4s CisgICAgICAgICAgICAgICAgICAgICAgIHZ1X2tpY2tfY2IsICh2b2lkICopKGxvbmcpaW5kZXgp OworCisgICAgICAgIERQUklOVCgiV2FpdGluZyBmb3Iga2lja3Mgb24gZmQ6ICVkIGZvciB2cTog JWRcbiIsCisgICAgICAgICAgICAgICBkZXYtPnZxW2luZGV4XS5raWNrX2ZkLCBpbmRleCk7Cisg ICAgfQorCisgICAgaWYgKHZ1X2NoZWNrX3F1ZXVlX2luZmxpZ2h0cyhkZXYsICZkZXYtPnZxW2lu ZGV4XSkpIHsKKyAgICAgICAgdnVfcGFuaWMoZGV2LCAiRmFpbGVkIHRvIGNoZWNrIGluZmxpZ2h0 cyBmb3IgdnE6ICVkXG4iLCBpbmRleCk7CisgICAgfQorCisgICAgcmV0dXJuIGZhbHNlOworfQor Cit2b2lkIHZ1X3NldF9xdWV1ZV9oYW5kbGVyKFZ1RGV2ICpkZXYsIFZ1VmlydHEgKnZxLAorICAg ICAgICAgICAgICAgICAgICAgICAgICB2dV9xdWV1ZV9oYW5kbGVyX2NiIGhhbmRsZXIpCit7Cisg ICAgaW50IHFpZHggPSB2cSAtIGRldi0+dnE7CisKKyAgICB2cS0+aGFuZGxlciA9IGhhbmRsZXI7 CisgICAgaWYgKHZxLT5raWNrX2ZkID49IDApIHsKKyAgICAgICAgaWYgKGhhbmRsZXIpIHsKKyAg ICAgICAgICAgIGRldi0+c2V0X3dhdGNoKGRldiwgdnEtPmtpY2tfZmQsIFZVX1dBVENIX0lOLAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgdnVfa2lja19jYiwgKHZvaWQgKikobG9uZylxaWR4 KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGRldi0+cmVtb3ZlX3dhdGNoKGRldiwg dnEtPmtpY2tfZmQpOworICAgICAgICB9CisgICAgfQorfQorCitib29sIHZ1X3NldF9xdWV1ZV9o b3N0X25vdGlmaWVyKFZ1RGV2ICpkZXYsIFZ1VmlydHEgKnZxLCBpbnQgZmQsCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGludCBzaXplLCBpbnQgb2Zmc2V0KQoreworICAgIGludCBx aWR4ID0gdnEgLSBkZXYtPnZxOworICAgIGludCBmZF9udW0gPSAwOworICAgIFZob3N0VXNlck1z ZyB2bXNnID0geworICAgICAgICAucmVxdWVzdCA9IFZIT1NUX1VTRVJfU0xBVkVfVlJJTkdfSE9T VF9OT1RJRklFUl9NU0csCisgICAgICAgIC5mbGFncyA9IFZIT1NUX1VTRVJfVkVSU0lPTiB8IFZI T1NUX1VTRVJfTkVFRF9SRVBMWV9NQVNLLAorICAgICAgICAuc2l6ZSA9IHNpemVvZih2bXNnLnBh eWxvYWQuYXJlYSksCisgICAgICAgIC5wYXlsb2FkLmFyZWEgPSB7CisgICAgICAgICAgICAudTY0 ID0gcWlkeCAmIFZIT1NUX1VTRVJfVlJJTkdfSURYX01BU0ssCisgICAgICAgICAgICAuc2l6ZSA9 IHNpemUsCisgICAgICAgICAgICAub2Zmc2V0ID0gb2Zmc2V0LAorICAgICAgICB9LAorICAgIH07 CisKKyAgICBpZiAoZmQgPT0gLTEpIHsKKyAgICAgICAgdm1zZy5wYXlsb2FkLmFyZWEudTY0IHw9 IFZIT1NUX1VTRVJfVlJJTkdfTk9GRF9NQVNLOworICAgIH0gZWxzZSB7CisgICAgICAgIHZtc2cu ZmRzW2ZkX251bSsrXSA9IGZkOworICAgIH0KKworICAgIHZtc2cuZmRfbnVtID0gZmRfbnVtOwor CisgICAgaWYgKCF2dV9oYXNfcHJvdG9jb2xfZmVhdHVyZShkZXYsIFZIT1NUX1VTRVJfUFJPVE9D T0xfRl9TTEFWRV9TRU5EX0ZEKSkgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisg ICAgcHRocmVhZF9tdXRleF9sb2NrKCZkZXYtPnNsYXZlX211dGV4KTsKKyAgICBpZiAoIXZ1X21l c3NhZ2Vfd3JpdGUoZGV2LCBkZXYtPnNsYXZlX2ZkLCAmdm1zZykpIHsKKyAgICAgICAgcHRocmVh ZF9tdXRleF91bmxvY2soJmRldi0+c2xhdmVfbXV0ZXgpOworICAgICAgICByZXR1cm4gZmFsc2U7 CisgICAgfQorCisgICAgLyogQWxzbyB1bmxvY2tzIHRoZSBzbGF2ZV9tdXRleCAqLworICAgIHJl dHVybiB2dV9wcm9jZXNzX21lc3NhZ2VfcmVwbHkoZGV2LCAmdm1zZyk7Cit9CisKK3N0YXRpYyBi b29sCit2dV9zZXRfdnJpbmdfY2FsbF9leGVjKFZ1RGV2ICpkZXYsIFZob3N0VXNlck1zZyAqdm1z ZykKK3sKKyAgICBpbnQgaW5kZXggPSB2bXNnLT5wYXlsb2FkLnU2NCAmIFZIT1NUX1VTRVJfVlJJ TkdfSURYX01BU0s7CisgICAgYm9vbCBub2ZkID0gdm1zZy0+cGF5bG9hZC51NjQgJiBWSE9TVF9V U0VSX1ZSSU5HX05PRkRfTUFTSzsKKworICAgIERQUklOVCgidTY0OiAweCUwMTYiUFJJeDY0Ilxu Iiwgdm1zZy0+cGF5bG9hZC51NjQpOworCisgICAgaWYgKCF2dV9jaGVja19xdWV1ZV9tc2dfZmls ZShkZXYsIHZtc2cpKSB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBpZiAo ZGV2LT52cVtpbmRleF0uY2FsbF9mZCAhPSAtMSkgeworICAgICAgICBjbG9zZShkZXYtPnZxW2lu ZGV4XS5jYWxsX2ZkKTsKKyAgICAgICAgZGV2LT52cVtpbmRleF0uY2FsbF9mZCA9IC0xOworICAg IH0KKworICAgIGRldi0+dnFbaW5kZXhdLmNhbGxfZmQgPSBub2ZkID8gLTEgOiB2bXNnLT5mZHNb MF07CisKKyAgICAvKiBpbiBjYXNlIG9mIEkvTyBoYW5nIGFmdGVyIHJlY29ubmVjdGluZyAqLwor ICAgIGlmIChkZXYtPnZxW2luZGV4XS5jYWxsX2ZkICE9IC0xICYmIGV2ZW50ZmRfd3JpdGUodm1z Zy0+ZmRzWzBdLCAxKSkgeworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorCisgICAgRFBSSU5U KCJHb3QgY2FsbF9mZDogJWQgZm9yIHZxOiAlZFxuIiwgZGV2LT52cVtpbmRleF0uY2FsbF9mZCwg aW5kZXgpOworCisgICAgcmV0dXJuIGZhbHNlOworfQorCitzdGF0aWMgYm9vbAordnVfc2V0X3Zy aW5nX2Vycl9leGVjKFZ1RGV2ICpkZXYsIFZob3N0VXNlck1zZyAqdm1zZykKK3sKKyAgICBpbnQg aW5kZXggPSB2bXNnLT5wYXlsb2FkLnU2NCAmIFZIT1NUX1VTRVJfVlJJTkdfSURYX01BU0s7Cisg ICAgYm9vbCBub2ZkID0gdm1zZy0+cGF5bG9hZC51NjQgJiBWSE9TVF9VU0VSX1ZSSU5HX05PRkRf TUFTSzsKKworICAgIERQUklOVCgidTY0OiAweCUwMTYiUFJJeDY0IlxuIiwgdm1zZy0+cGF5bG9h ZC51NjQpOworCisgICAgaWYgKCF2dV9jaGVja19xdWV1ZV9tc2dfZmlsZShkZXYsIHZtc2cpKSB7 CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBpZiAoZGV2LT52cVtpbmRleF0u ZXJyX2ZkICE9IC0xKSB7CisgICAgICAgIGNsb3NlKGRldi0+dnFbaW5kZXhdLmVycl9mZCk7Cisg ICAgICAgIGRldi0+dnFbaW5kZXhdLmVycl9mZCA9IC0xOworICAgIH0KKworICAgIGRldi0+dnFb aW5kZXhdLmVycl9mZCA9IG5vZmQgPyAtMSA6IHZtc2ctPmZkc1swXTsKKworICAgIHJldHVybiBm YWxzZTsKK30KKworc3RhdGljIGJvb2wKK3Z1X2dldF9wcm90b2NvbF9mZWF0dXJlc19leGVjKFZ1 RGV2ICpkZXYsIFZob3N0VXNlck1zZyAqdm1zZykKK3sKKyAgICAvKgorICAgICAqIE5vdGUgdGhh dCB3ZSBzdXBwb3J0LCBidXQgaW50ZW50aW9uYWxseSBkbyBub3Qgc2V0LAorICAgICAqIFZIT1NU X1VTRVJfUFJPVE9DT0xfRl9JTkJBTkRfTk9USUZJQ0FUSU9OUy4gVGhpcyBtZWFucyB0aGF0Cisg ICAgICogYSBkZXZpY2UgaW1wbGVtZW50YXRpb24gY2FuIHJldHVybiBpdCBpbiBpdHMgY2FsbGJh Y2sKKyAgICAgKiAoZ2V0X3Byb3RvY29sX2ZlYXR1cmVzKSBpZiBpdCB3YW50cyB0byB1c2UgdGhp cyBmb3IKKyAgICAgKiBzaW11bGF0aW9uLCBidXQgaXQgaXMgb3RoZXJ3aXNlIG5vdCBkZXNpcmFi bGUgKGlmIGV2ZW4KKyAgICAgKiBpbXBsZW1lbnRlZCBieSB0aGUgbWFzdGVyLikKKyAgICAgKi8K KyAgICB1aW50NjRfdCBmZWF0dXJlcyA9IDFVTEwgPDwgVkhPU1RfVVNFUl9QUk9UT0NPTF9GX01R IHwKKyAgICAgICAgICAgICAgICAgICAgICAgIDFVTEwgPDwgVkhPU1RfVVNFUl9QUk9UT0NPTF9G X0xPR19TSE1GRCB8CisgICAgICAgICAgICAgICAgICAgICAgICAxVUxMIDw8IFZIT1NUX1VTRVJf UFJPVE9DT0xfRl9TTEFWRV9SRVEgfAorICAgICAgICAgICAgICAgICAgICAgICAgMVVMTCA8PCBW SE9TVF9VU0VSX1BST1RPQ09MX0ZfSE9TVF9OT1RJRklFUiB8CisgICAgICAgICAgICAgICAgICAg ICAgICAxVUxMIDw8IFZIT1NUX1VTRVJfUFJPVE9DT0xfRl9TTEFWRV9TRU5EX0ZEIHwKKyAgICAg ICAgICAgICAgICAgICAgICAgIDFVTEwgPDwgVkhPU1RfVVNFUl9QUk9UT0NPTF9GX1JFUExZX0FD SyB8CisgICAgICAgICAgICAgICAgICAgICAgICAxVUxMIDw8IFZIT1NUX1VTRVJfUFJPVE9DT0xf Rl9DT05GSUdVUkVfTUVNX1NMT1RTOworCisgICAgaWYgKGhhdmVfdXNlcmZhdWx0KCkpIHsKKyAg ICAgICAgZmVhdHVyZXMgfD0gMVVMTCA8PCBWSE9TVF9VU0VSX1BST1RPQ09MX0ZfUEFHRUZBVUxU OworICAgIH0KKworICAgIGlmIChkZXYtPmlmYWNlLT5nZXRfY29uZmlnICYmIGRldi0+aWZhY2Ut PnNldF9jb25maWcpIHsKKyAgICAgICAgZmVhdHVyZXMgfD0gMVVMTCA8PCBWSE9TVF9VU0VSX1BS T1RPQ09MX0ZfQ09ORklHOworICAgIH0KKworICAgIGlmIChkZXYtPmlmYWNlLT5nZXRfcHJvdG9j b2xfZmVhdHVyZXMpIHsKKyAgICAgICAgZmVhdHVyZXMgfD0gZGV2LT5pZmFjZS0+Z2V0X3Byb3Rv Y29sX2ZlYXR1cmVzKGRldik7CisgICAgfQorCisgICAgdm1zZ19zZXRfcmVwbHlfdTY0KHZtc2cs IGZlYXR1cmVzKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworc3RhdGljIGJvb2wKK3Z1X3NldF9w cm90b2NvbF9mZWF0dXJlc19leGVjKFZ1RGV2ICpkZXYsIFZob3N0VXNlck1zZyAqdm1zZykKK3sK KyAgICB1aW50NjRfdCBmZWF0dXJlcyA9IHZtc2ctPnBheWxvYWQudTY0OworCisgICAgRFBSSU5U KCJ1NjQ6IDB4JTAxNiJQUkl4NjQiXG4iLCBmZWF0dXJlcyk7CisKKyAgICBkZXYtPnByb3RvY29s X2ZlYXR1cmVzID0gdm1zZy0+cGF5bG9hZC51NjQ7CisKKyAgICBpZiAodnVfaGFzX3Byb3RvY29s X2ZlYXR1cmUoZGV2LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWSE9TVF9VU0VS X1BST1RPQ09MX0ZfSU5CQU5EX05PVElGSUNBVElPTlMpICYmCisgICAgICAgICghdnVfaGFzX3By b3RvY29sX2ZlYXR1cmUoZGV2LCBWSE9TVF9VU0VSX1BST1RPQ09MX0ZfU0xBVkVfUkVRKSB8fAor ICAgICAgICAgIXZ1X2hhc19wcm90b2NvbF9mZWF0dXJlKGRldiwgVkhPU1RfVVNFUl9QUk9UT0NP TF9GX1JFUExZX0FDSykpKSB7CisgICAgICAgIC8qCisgICAgICAgICAqIFRoZSB1c2UgY2FzZSBm b3IgdXNpbmcgbWVzc2FnZXMgZm9yIGtpY2svY2FsbCBpcyBzaW11bGF0aW9uLCB0byBtYWtlCisg ICAgICAgICAqIHRoZSBraWNrIGFuZCBjYWxsIHN5bmNocm9ub3VzLiBUbyBhY3R1YWxseSBnZXQg dGhhdCBiZWhhdmlvdXIsIGJvdGgKKyAgICAgICAgICogb2YgdGhlIG90aGVyIGZlYXR1cmVzIGFy ZSByZXF1aXJlZC4KKyAgICAgICAgICogVGhlb3JldGljYWxseSwgb25lIGNvdWxkIHVzZSBvbmx5 IGtpY2sgbWVzc2FnZXMsIG9yIGRvIHRoZW0gd2l0aG91dAorICAgICAgICAgKiBoYXZpbmcgRl9S RVBMWV9BQ0ssIGJ1dCB0b28gbWFueSAocG9zc2libHkgcGVuZGluZykgbWVzc2FnZXMgb24gdGhl CisgICAgICAgICAqIHNvY2tldCB3aWxsIGV2ZW50dWFsbHkgY2F1c2UgdGhlIG1hc3RlciB0byBo YW5nLCB0byBhdm9pZCB0aGlzIGluCisgICAgICAgICAqIHNjZW5hcmlvcyB3aGVyZSBub3QgZGVz aXJlZCBlbmZvcmNlIHRoYXQgdGhlIHNldHRpbmdzIGFyZSBpbiBhIHdheQorICAgICAgICAgKiB0 aGF0IGFjdHVhbGx5IGVuYWJsZXMgdGhlIHNpbXVsYXRpb24gY2FzZS4KKyAgICAgICAgICovCisg ICAgICAgIHZ1X3BhbmljKGRldiwKKyAgICAgICAgICAgICAgICAgIkZfSU5fQkFORF9OT1RJRklD QVRJT05TIHJlcXVpcmVzIEZfU0xBVkVfUkVRICYmIEZfUkVQTFlfQUNLIik7CisgICAgICAgIHJl dHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBpZiAoZGV2LT5pZmFjZS0+c2V0X3Byb3RvY29sX2Zl YXR1cmVzKSB7CisgICAgICAgIGRldi0+aWZhY2UtPnNldF9wcm90b2NvbF9mZWF0dXJlcyhkZXYs IGZlYXR1cmVzKTsKKyAgICB9CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3N0YXRpYyBib29s Cit2dV9nZXRfcXVldWVfbnVtX2V4ZWMoVnVEZXYgKmRldiwgVmhvc3RVc2VyTXNnICp2bXNnKQor eworICAgIHZtc2dfc2V0X3JlcGx5X3U2NCh2bXNnLCBkZXYtPm1heF9xdWV1ZXMpOworICAgIHJl dHVybiB0cnVlOworfQorCitzdGF0aWMgYm9vbAordnVfc2V0X3ZyaW5nX2VuYWJsZV9leGVjKFZ1 RGV2ICpkZXYsIFZob3N0VXNlck1zZyAqdm1zZykKK3sKKyAgICB1bnNpZ25lZCBpbnQgaW5kZXgg PSB2bXNnLT5wYXlsb2FkLnN0YXRlLmluZGV4OworICAgIHVuc2lnbmVkIGludCBlbmFibGUgPSB2 bXNnLT5wYXlsb2FkLnN0YXRlLm51bTsKKworICAgIERQUklOVCgiU3RhdGUuaW5kZXg6ICV1XG4i LCBpbmRleCk7CisgICAgRFBSSU5UKCJTdGF0ZS5lbmFibGU6ICAgJXVcbiIsIGVuYWJsZSk7CisK KyAgICBpZiAoaW5kZXggPj0gZGV2LT5tYXhfcXVldWVzKSB7CisgICAgICAgIHZ1X3BhbmljKGRl diwgIkludmFsaWQgdnJpbmdfZW5hYmxlIGluZGV4OiAldSIsIGluZGV4KTsKKyAgICAgICAgcmV0 dXJuIGZhbHNlOworICAgIH0KKworICAgIGRldi0+dnFbaW5kZXhdLmVuYWJsZSA9IGVuYWJsZTsK KyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3N0YXRpYyBib29sCit2dV9zZXRfc2xhdmVfcmVxX2Zk KFZ1RGV2ICpkZXYsIFZob3N0VXNlck1zZyAqdm1zZykKK3sKKyAgICBpZiAodm1zZy0+ZmRfbnVt ICE9IDEpIHsKKyAgICAgICAgdnVfcGFuaWMoZGV2LCAiSW52YWxpZCBzbGF2ZV9yZXFfZmQgbWVz c2FnZSAoJWQgZmQncykiLCB2bXNnLT5mZF9udW0pOworICAgICAgICByZXR1cm4gZmFsc2U7Cisg ICAgfQorCisgICAgaWYgKGRldi0+c2xhdmVfZmQgIT0gLTEpIHsKKyAgICAgICAgY2xvc2UoZGV2 LT5zbGF2ZV9mZCk7CisgICAgfQorICAgIGRldi0+c2xhdmVfZmQgPSB2bXNnLT5mZHNbMF07Cisg ICAgRFBSSU5UKCJHb3Qgc2xhdmVfZmQ6ICVkXG4iLCB2bXNnLT5mZHNbMF0pOworCisgICAgcmV0 dXJuIGZhbHNlOworfQorCitzdGF0aWMgYm9vbAordnVfZ2V0X2NvbmZpZyhWdURldiAqZGV2LCBW aG9zdFVzZXJNc2cgKnZtc2cpCit7CisgICAgaW50IHJldCA9IC0xOworCisgICAgaWYgKGRldi0+ aWZhY2UtPmdldF9jb25maWcpIHsKKyAgICAgICAgcmV0ID0gZGV2LT5pZmFjZS0+Z2V0X2NvbmZp ZyhkZXYsIHZtc2ctPnBheWxvYWQuY29uZmlnLnJlZ2lvbiwKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICB2bXNnLT5wYXlsb2FkLmNvbmZpZy5zaXplKTsKKyAgICB9CisKKyAg ICBpZiAocmV0KSB7CisgICAgICAgIC8qIHJlc2l6ZSB0byB6ZXJvIHRvIGluZGljYXRlIGFuIGVy cm9yIHRvIG1hc3RlciAqLworICAgICAgICB2bXNnLT5zaXplID0gMDsKKyAgICB9CisKKyAgICBy ZXR1cm4gdHJ1ZTsKK30KKworc3RhdGljIGJvb2wKK3Z1X3NldF9jb25maWcoVnVEZXYgKmRldiwg Vmhvc3RVc2VyTXNnICp2bXNnKQoreworICAgIGludCByZXQgPSAtMTsKKworICAgIGlmIChkZXYt PmlmYWNlLT5zZXRfY29uZmlnKSB7CisgICAgICAgIHJldCA9IGRldi0+aWZhY2UtPnNldF9jb25m aWcoZGV2LCB2bXNnLT5wYXlsb2FkLmNvbmZpZy5yZWdpb24sCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgdm1zZy0+cGF5bG9hZC5jb25maWcub2Zmc2V0LAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZtc2ctPnBheWxvYWQuY29uZmlnLnNpemUsCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm1zZy0+cGF5bG9hZC5jb25maWcu ZmxhZ3MpOworICAgICAgICBpZiAocmV0KSB7CisgICAgICAgICAgICB2dV9wYW5pYyhkZXYsICJT ZXQgdmlydGlvIGNvbmZpZ3VyYXRpb24gc3BhY2UgZmFpbGVkIik7CisgICAgICAgIH0KKyAgICB9 CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3N0YXRpYyBib29sCit2dV9zZXRfcG9zdGNvcHlf YWR2aXNlKFZ1RGV2ICpkZXYsIFZob3N0VXNlck1zZyAqdm1zZykKK3sKKyAgICBkZXYtPnBvc3Rj b3B5X3VmZCA9IC0xOworI2lmZGVmIFVGRkRJT19BUEkKKyAgICBzdHJ1Y3QgdWZmZGlvX2FwaSBh cGlfc3RydWN0OworCisgICAgZGV2LT5wb3N0Y29weV91ZmQgPSBzeXNjYWxsKF9fTlJfdXNlcmZh dWx0ZmQsIE9fQ0xPRVhFQyB8IE9fTk9OQkxPQ0spOworICAgIHZtc2ctPnNpemUgPSAwOworI2Vu ZGlmCisKKyAgICBpZiAoZGV2LT5wb3N0Y29weV91ZmQgPT0gLTEpIHsKKyAgICAgICAgdnVfcGFu aWMoZGV2LCAiVXNlcmZhdWx0ZmQgbm90IGF2YWlsYWJsZTogJXMiLCBzdHJlcnJvcihlcnJubykp OworICAgICAgICBnb3RvIG91dDsKKyAgICB9CisKKyNpZmRlZiBVRkZESU9fQVBJCisgICAgYXBp X3N0cnVjdC5hcGkgPSBVRkZEX0FQSTsKKyAgICBhcGlfc3RydWN0LmZlYXR1cmVzID0gMDsKKyAg ICBpZiAoaW9jdGwoZGV2LT5wb3N0Y29weV91ZmQsIFVGRkRJT19BUEksICZhcGlfc3RydWN0KSkg eworICAgICAgICB2dV9wYW5pYyhkZXYsICJGYWlsZWQgVUZGRElPX0FQSTogJXMiLCBzdHJlcnJv cihlcnJubykpOworICAgICAgICBjbG9zZShkZXYtPnBvc3Rjb3B5X3VmZCk7CisgICAgICAgIGRl di0+cG9zdGNvcHlfdWZkID0gLTE7CisgICAgICAgIGdvdG8gb3V0OworICAgIH0KKyAgICAvKiBU T0RPOiBTdGFzaCBmZWF0dXJlIGZsYWdzIHNvbWV3aGVyZSAqLworI2VuZGlmCisKK291dDoKKyAg ICAvKiBSZXR1cm4gYSB1ZmQgdG8gdGhlIFFFTVUgKi8KKyAgICB2bXNnLT5mZF9udW0gPSAxOwor ICAgIHZtc2ctPmZkc1swXSA9IGRldi0+cG9zdGNvcHlfdWZkOworICAgIHJldHVybiB0cnVlOyAv KiA9IHNlbmQgYSByZXBseSAqLworfQorCitzdGF0aWMgYm9vbAordnVfc2V0X3Bvc3Rjb3B5X2xp c3RlbihWdURldiAqZGV2LCBWaG9zdFVzZXJNc2cgKnZtc2cpCit7CisgICAgaWYgKGRldi0+bnJl Z2lvbnMpIHsKKyAgICAgICAgdnVfcGFuaWMoZGV2LCAiUmVnaW9ucyBhbHJlYWR5IHJlZ2lzdGVy ZWQgYXQgcG9zdGNvcHktbGlzdGVuIik7CisgICAgICAgIHZtc2dfc2V0X3JlcGx5X3U2NCh2bXNn LCAtMSk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICBkZXYtPnBvc3Rjb3B5X2xp c3RlbmluZyA9IHRydWU7CisKKyAgICB2bXNnX3NldF9yZXBseV91NjQodm1zZywgMCk7CisgICAg cmV0dXJuIHRydWU7Cit9CisKK3N0YXRpYyBib29sCit2dV9zZXRfcG9zdGNvcHlfZW5kKFZ1RGV2 ICpkZXYsIFZob3N0VXNlck1zZyAqdm1zZykKK3sKKyAgICBEUFJJTlQoIiVzOiBFbnRyeVxuIiwg X19mdW5jX18pOworICAgIGRldi0+cG9zdGNvcHlfbGlzdGVuaW5nID0gZmFsc2U7CisgICAgaWYg KGRldi0+cG9zdGNvcHlfdWZkID4gMCkgeworICAgICAgICBjbG9zZShkZXYtPnBvc3Rjb3B5X3Vm ZCk7CisgICAgICAgIGRldi0+cG9zdGNvcHlfdWZkID0gLTE7CisgICAgICAgIERQUklOVCgiJXM6 IERvbmUgY2xvc2VcbiIsIF9fZnVuY19fKTsKKyAgICB9CisKKyAgICB2bXNnX3NldF9yZXBseV91 NjQodm1zZywgMCk7CisgICAgRFBSSU5UKCIlczogZXhpdFxuIiwgX19mdW5jX18pOworICAgIHJl dHVybiB0cnVlOworfQorCitzdGF0aWMgaW5saW5lIHVpbnQ2NF90Cit2dV9pbmZsaWdodF9xdWV1 ZV9zaXplKHVpbnQxNl90IHF1ZXVlX3NpemUpCit7CisgICAgcmV0dXJuIEFMSUdOX1VQKHNpemVv ZihWdURlc2NTdGF0ZVNwbGl0KSAqIHF1ZXVlX3NpemUgKworICAgICAgICAgICBzaXplb2YodWlu dDE2X3QpLCBJTkZMSUdIVF9BTElHTk1FTlQpOworfQorCisjaWZkZWYgTUZEX0FMTE9XX1NFQUxJ TkcKK3N0YXRpYyB2b2lkICoKK21lbWZkX2FsbG9jKGNvbnN0IGNoYXIgKm5hbWUsIHNpemVfdCBz aXplLCB1bnNpZ25lZCBpbnQgZmxhZ3MsIGludCAqZmQpCit7CisgICAgdm9pZCAqcHRyOworICAg IGludCByZXQ7CisKKyAgICAqZmQgPSBtZW1mZF9jcmVhdGUobmFtZSwgTUZEX0FMTE9XX1NFQUxJ TkcpOworICAgIGlmICgqZmQgPCAwKSB7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKwor ICAgIHJldCA9IGZ0cnVuY2F0ZSgqZmQsIHNpemUpOworICAgIGlmIChyZXQgPCAwKSB7CisgICAg ICAgIGNsb3NlKCpmZCk7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIHJldCA9 IGZjbnRsKCpmZCwgRl9BRERfU0VBTFMsIGZsYWdzKTsKKyAgICBpZiAocmV0IDwgMCkgeworICAg ICAgICBjbG9zZSgqZmQpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICBwdHIg PSBtbWFwKDAsIHNpemUsIFBST1RfUkVBRCB8IFBST1RfV1JJVEUsIE1BUF9TSEFSRUQsICpmZCwg MCk7CisgICAgaWYgKHB0ciA9PSBNQVBfRkFJTEVEKSB7CisgICAgICAgIGNsb3NlKCpmZCk7Cisg ICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIHJldHVybiBwdHI7Cit9CisjZW5kaWYK Kworc3RhdGljIGJvb2wKK3Z1X2dldF9pbmZsaWdodF9mZChWdURldiAqZGV2LCBWaG9zdFVzZXJN c2cgKnZtc2cpCit7CisgICAgaW50IGZkID0gLTE7CisgICAgdm9pZCAqYWRkciA9IE5VTEw7Cisg ICAgdWludDY0X3QgbW1hcF9zaXplOworICAgIHVpbnQxNl90IG51bV9xdWV1ZXMsIHF1ZXVlX3Np emU7CisKKyAgICBpZiAodm1zZy0+c2l6ZSAhPSBzaXplb2Yodm1zZy0+cGF5bG9hZC5pbmZsaWdo dCkpIHsKKyAgICAgICAgdnVfcGFuaWMoZGV2LCAiSW52YWxpZCBnZXRfaW5mbGlnaHRfZmQgbWVz c2FnZTolZCIsIHZtc2ctPnNpemUpOworICAgICAgICB2bXNnLT5wYXlsb2FkLmluZmxpZ2h0Lm1t YXBfc2l6ZSA9IDA7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIG51bV9xdWV1 ZXMgPSB2bXNnLT5wYXlsb2FkLmluZmxpZ2h0Lm51bV9xdWV1ZXM7CisgICAgcXVldWVfc2l6ZSA9 IHZtc2ctPnBheWxvYWQuaW5mbGlnaHQucXVldWVfc2l6ZTsKKworICAgIERQUklOVCgic2V0X2lu ZmxpZ2h0X2ZkIG51bV9xdWV1ZXM6ICUiUFJJZDE2IlxuIiwgbnVtX3F1ZXVlcyk7CisgICAgRFBS SU5UKCJzZXRfaW5mbGlnaHRfZmQgcXVldWVfc2l6ZTogJSJQUklkMTYiXG4iLCBxdWV1ZV9zaXpl KTsKKworICAgIG1tYXBfc2l6ZSA9IHZ1X2luZmxpZ2h0X3F1ZXVlX3NpemUocXVldWVfc2l6ZSkg KiBudW1fcXVldWVzOworCisjaWZkZWYgTUZEX0FMTE9XX1NFQUxJTkcKKyAgICBhZGRyID0gbWVt ZmRfYWxsb2MoInZob3N0LWluZmxpZ2h0IiwgbW1hcF9zaXplLAorICAgICAgICAgICAgICAgICAg ICAgICBGX1NFQUxfR1JPVyB8IEZfU0VBTF9TSFJJTksgfCBGX1NFQUxfU0VBTCwKKyAgICAgICAg ICAgICAgICAgICAgICAgJmZkKTsKKyNlbHNlCisgICAgdnVfcGFuaWMoZGV2LCAiTm90IGltcGxl bWVudGVkOiBtZW1mZCBzdXBwb3J0IGlzIG1pc3NpbmciKTsKKyNlbmRpZgorCisgICAgaWYgKCFh ZGRyKSB7CisgICAgICAgIHZ1X3BhbmljKGRldiwgIkZhaWxlZCB0byBhbGxvYyB2aG9zdCBpbmZs aWdodCBhcmVhIik7CisgICAgICAgIHZtc2ctPnBheWxvYWQuaW5mbGlnaHQubW1hcF9zaXplID0g MDsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgbWVtc2V0KGFkZHIsIDAsIG1t YXBfc2l6ZSk7CisKKyAgICBkZXYtPmluZmxpZ2h0X2luZm8uYWRkciA9IGFkZHI7CisgICAgZGV2 LT5pbmZsaWdodF9pbmZvLnNpemUgPSB2bXNnLT5wYXlsb2FkLmluZmxpZ2h0Lm1tYXBfc2l6ZSA9 IG1tYXBfc2l6ZTsKKyAgICBkZXYtPmluZmxpZ2h0X2luZm8uZmQgPSB2bXNnLT5mZHNbMF0gPSBm ZDsKKyAgICB2bXNnLT5mZF9udW0gPSAxOworICAgIHZtc2ctPnBheWxvYWQuaW5mbGlnaHQubW1h cF9vZmZzZXQgPSAwOworCisgICAgRFBSSU5UKCJzZW5kIGluZmxpZ2h0IG1tYXBfc2l6ZTogJSJQ UklkNjQiXG4iLAorICAgICAgICAgICB2bXNnLT5wYXlsb2FkLmluZmxpZ2h0Lm1tYXBfc2l6ZSk7 CisgICAgRFBSSU5UKCJzZW5kIGluZmxpZ2h0IG1tYXAgb2Zmc2V0OiAlIlBSSWQ2NCJcbiIsCisg ICAgICAgICAgIHZtc2ctPnBheWxvYWQuaW5mbGlnaHQubW1hcF9vZmZzZXQpOworCisgICAgcmV0 dXJuIHRydWU7Cit9CisKK3N0YXRpYyBib29sCit2dV9zZXRfaW5mbGlnaHRfZmQoVnVEZXYgKmRl diwgVmhvc3RVc2VyTXNnICp2bXNnKQoreworICAgIGludCBmZCwgaTsKKyAgICB1aW50NjRfdCBt bWFwX3NpemUsIG1tYXBfb2Zmc2V0OworICAgIHVpbnQxNl90IG51bV9xdWV1ZXMsIHF1ZXVlX3Np emU7CisgICAgdm9pZCAqcmM7CisKKyAgICBpZiAodm1zZy0+ZmRfbnVtICE9IDEgfHwKKyAgICAg ICAgdm1zZy0+c2l6ZSAhPSBzaXplb2Yodm1zZy0+cGF5bG9hZC5pbmZsaWdodCkpIHsKKyAgICAg ICAgdnVfcGFuaWMoZGV2LCAiSW52YWxpZCBzZXRfaW5mbGlnaHRfZmQgbWVzc2FnZSBzaXplOiVk IGZkczolZCIsCisgICAgICAgICAgICAgICAgIHZtc2ctPnNpemUsIHZtc2ctPmZkX251bSk7Cisg ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBmZCA9IHZtc2ctPmZkc1swXTsKKyAg ICBtbWFwX3NpemUgPSB2bXNnLT5wYXlsb2FkLmluZmxpZ2h0Lm1tYXBfc2l6ZTsKKyAgICBtbWFw X29mZnNldCA9IHZtc2ctPnBheWxvYWQuaW5mbGlnaHQubW1hcF9vZmZzZXQ7CisgICAgbnVtX3F1 ZXVlcyA9IHZtc2ctPnBheWxvYWQuaW5mbGlnaHQubnVtX3F1ZXVlczsKKyAgICBxdWV1ZV9zaXpl ID0gdm1zZy0+cGF5bG9hZC5pbmZsaWdodC5xdWV1ZV9zaXplOworCisgICAgRFBSSU5UKCJzZXRf aW5mbGlnaHRfZmQgbW1hcF9zaXplOiAlIlBSSWQ2NCJcbiIsIG1tYXBfc2l6ZSk7CisgICAgRFBS SU5UKCJzZXRfaW5mbGlnaHRfZmQgbW1hcF9vZmZzZXQ6ICUiUFJJZDY0IlxuIiwgbW1hcF9vZmZz ZXQpOworICAgIERQUklOVCgic2V0X2luZmxpZ2h0X2ZkIG51bV9xdWV1ZXM6ICUiUFJJZDE2Ilxu IiwgbnVtX3F1ZXVlcyk7CisgICAgRFBSSU5UKCJzZXRfaW5mbGlnaHRfZmQgcXVldWVfc2l6ZTog JSJQUklkMTYiXG4iLCBxdWV1ZV9zaXplKTsKKworICAgIHJjID0gbW1hcCgwLCBtbWFwX3NpemUs IFBST1RfUkVBRCB8IFBST1RfV1JJVEUsIE1BUF9TSEFSRUQsCisgICAgICAgICAgICAgIGZkLCBt bWFwX29mZnNldCk7CisKKyAgICBpZiAocmMgPT0gTUFQX0ZBSUxFRCkgeworICAgICAgICB2dV9w YW5pYyhkZXYsICJzZXRfaW5mbGlnaHRfZmQgbW1hcCBlcnJvcjogJXMiLCBzdHJlcnJvcihlcnJu bykpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgaWYgKGRldi0+aW5mbGln aHRfaW5mby5mZCkgeworICAgICAgICBjbG9zZShkZXYtPmluZmxpZ2h0X2luZm8uZmQpOworICAg IH0KKworICAgIGlmIChkZXYtPmluZmxpZ2h0X2luZm8uYWRkcikgeworICAgICAgICBtdW5tYXAo ZGV2LT5pbmZsaWdodF9pbmZvLmFkZHIsIGRldi0+aW5mbGlnaHRfaW5mby5zaXplKTsKKyAgICB9 CisKKyAgICBkZXYtPmluZmxpZ2h0X2luZm8uZmQgPSBmZDsKKyAgICBkZXYtPmluZmxpZ2h0X2lu Zm8uYWRkciA9IHJjOworICAgIGRldi0+aW5mbGlnaHRfaW5mby5zaXplID0gbW1hcF9zaXplOwor CisgICAgZm9yIChpID0gMDsgaSA8IG51bV9xdWV1ZXM7IGkrKykgeworICAgICAgICBkZXYtPnZx W2ldLmluZmxpZ2h0ID0gKFZ1VmlydHFJbmZsaWdodCAqKXJjOworICAgICAgICBkZXYtPnZxW2ld LmluZmxpZ2h0LT5kZXNjX251bSA9IHF1ZXVlX3NpemU7CisgICAgICAgIHJjID0gKHZvaWQgKiko KGNoYXIgKilyYyArIHZ1X2luZmxpZ2h0X3F1ZXVlX3NpemUocXVldWVfc2l6ZSkpOworICAgIH0K KworICAgIHJldHVybiBmYWxzZTsKK30KKworc3RhdGljIGJvb2wKK3Z1X2hhbmRsZV92cmluZ19r aWNrKFZ1RGV2ICpkZXYsIFZob3N0VXNlck1zZyAqdm1zZykKK3sKKyAgICB1bnNpZ25lZCBpbnQg aW5kZXggPSB2bXNnLT5wYXlsb2FkLnN0YXRlLmluZGV4OworCisgICAgaWYgKGluZGV4ID49IGRl di0+bWF4X3F1ZXVlcykgeworICAgICAgICB2dV9wYW5pYyhkZXYsICJJbnZhbGlkIHF1ZXVlIGlu ZGV4OiAldSIsIGluZGV4KTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIERQ UklOVCgiR290IGtpY2sgbWVzc2FnZTogaGFuZGxlcjolcCBpZHg6JXVcbiIsCisgICAgICAgICAg IGRldi0+dnFbaW5kZXhdLmhhbmRsZXIsIGluZGV4KTsKKworICAgIGlmICghZGV2LT52cVtpbmRl eF0uc3RhcnRlZCkgeworICAgICAgICBkZXYtPnZxW2luZGV4XS5zdGFydGVkID0gdHJ1ZTsKKwor ICAgICAgICBpZiAoZGV2LT5pZmFjZS0+cXVldWVfc2V0X3N0YXJ0ZWQpIHsKKyAgICAgICAgICAg IGRldi0+aWZhY2UtPnF1ZXVlX3NldF9zdGFydGVkKGRldiwgaW5kZXgsIHRydWUpOworICAgICAg ICB9CisgICAgfQorCisgICAgaWYgKGRldi0+dnFbaW5kZXhdLmhhbmRsZXIpIHsKKyAgICAgICAg ZGV2LT52cVtpbmRleF0uaGFuZGxlcihkZXYsIGluZGV4KTsKKyAgICB9CisKKyAgICByZXR1cm4g ZmFsc2U7Cit9CisKK3N0YXRpYyBib29sIHZ1X2hhbmRsZV9nZXRfbWF4X21lbXNsb3RzKFZ1RGV2 ICpkZXYsIFZob3N0VXNlck1zZyAqdm1zZykKK3sKKyAgICB2bXNnLT5mbGFncyA9IFZIT1NUX1VT RVJfUkVQTFlfTUFTSyB8IFZIT1NUX1VTRVJfVkVSU0lPTjsKKyAgICB2bXNnLT5zaXplICA9IHNp emVvZih2bXNnLT5wYXlsb2FkLnU2NCk7CisgICAgdm1zZy0+cGF5bG9hZC51NjQgPSBWSE9TVF9V U0VSX01BWF9SQU1fU0xPVFM7CisgICAgdm1zZy0+ZmRfbnVtID0gMDsKKworICAgIGlmICghdnVf bWVzc2FnZV93cml0ZShkZXYsIGRldi0+c29jaywgdm1zZykpIHsKKyAgICAgICAgdnVfcGFuaWMo ZGV2LCAiRmFpbGVkIHRvIHNlbmQgbWF4IHJhbSBzbG90czogJXNcbiIsIHN0cmVycm9yKGVycm5v KSk7CisgICAgfQorCisgICAgRFBSSU5UKCJ1NjQ6IDB4JTAxNiJQUkl4NjQiXG4iLCAodWludDY0 X3QpIFZIT1NUX1VTRVJfTUFYX1JBTV9TTE9UUyk7CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisK K3N0YXRpYyBib29sCit2dV9wcm9jZXNzX21lc3NhZ2UoVnVEZXYgKmRldiwgVmhvc3RVc2VyTXNn ICp2bXNnKQoreworICAgIGludCBkb19yZXBseSA9IDA7CisKKyAgICAvKiBQcmludCBvdXQgZ2Vu ZXJpYyBwYXJ0IG9mIHRoZSByZXF1ZXN0LiAqLworICAgIERQUklOVCgiPT09PT09PT09PT09PT09 PSBWaG9zdCB1c2VyIG1lc3NhZ2UgPT09PT09PT09PT09PT09PVxuIik7CisgICAgRFBSSU5UKCJS ZXF1ZXN0OiAlcyAoJWQpXG4iLCB2dV9yZXF1ZXN0X3RvX3N0cmluZyh2bXNnLT5yZXF1ZXN0KSwK KyAgICAgICAgICAgdm1zZy0+cmVxdWVzdCk7CisgICAgRFBSSU5UKCJGbGFnczogICAweCV4XG4i LCB2bXNnLT5mbGFncyk7CisgICAgRFBSSU5UKCJTaXplOiAgICAldVxuIiwgdm1zZy0+c2l6ZSk7 CisKKyAgICBpZiAodm1zZy0+ZmRfbnVtKSB7CisgICAgICAgIGludCBpOworICAgICAgICBEUFJJ TlQoIkZkczoiKTsKKyAgICAgICAgZm9yIChpID0gMDsgaSA8IHZtc2ctPmZkX251bTsgaSsrKSB7 CisgICAgICAgICAgICBEUFJJTlQoIiAlZCIsIHZtc2ctPmZkc1tpXSk7CisgICAgICAgIH0KKyAg ICAgICAgRFBSSU5UKCJcbiIpOworICAgIH0KKworICAgIGlmIChkZXYtPmlmYWNlLT5wcm9jZXNz X21zZyAmJgorICAgICAgICBkZXYtPmlmYWNlLT5wcm9jZXNzX21zZyhkZXYsIHZtc2csICZkb19y ZXBseSkpIHsKKyAgICAgICAgcmV0dXJuIGRvX3JlcGx5OworICAgIH0KKworICAgIHN3aXRjaCAo dm1zZy0+cmVxdWVzdCkgeworICAgIGNhc2UgVkhPU1RfVVNFUl9HRVRfRkVBVFVSRVM6CisgICAg ICAgIHJldHVybiB2dV9nZXRfZmVhdHVyZXNfZXhlYyhkZXYsIHZtc2cpOworICAgIGNhc2UgVkhP U1RfVVNFUl9TRVRfRkVBVFVSRVM6CisgICAgICAgIHJldHVybiB2dV9zZXRfZmVhdHVyZXNfZXhl YyhkZXYsIHZtc2cpOworICAgIGNhc2UgVkhPU1RfVVNFUl9HRVRfUFJPVE9DT0xfRkVBVFVSRVM6 CisgICAgICAgIHJldHVybiB2dV9nZXRfcHJvdG9jb2xfZmVhdHVyZXNfZXhlYyhkZXYsIHZtc2cp OworICAgIGNhc2UgVkhPU1RfVVNFUl9TRVRfUFJPVE9DT0xfRkVBVFVSRVM6CisgICAgICAgIHJl dHVybiB2dV9zZXRfcHJvdG9jb2xfZmVhdHVyZXNfZXhlYyhkZXYsIHZtc2cpOworICAgIGNhc2Ug VkhPU1RfVVNFUl9TRVRfT1dORVI6CisgICAgICAgIHJldHVybiB2dV9zZXRfb3duZXJfZXhlYyhk ZXYsIHZtc2cpOworICAgIGNhc2UgVkhPU1RfVVNFUl9SRVNFVF9PV05FUjoKKyAgICAgICAgcmV0 dXJuIHZ1X3Jlc2V0X2RldmljZV9leGVjKGRldiwgdm1zZyk7CisgICAgY2FzZSBWSE9TVF9VU0VS X1NFVF9NRU1fVEFCTEU6CisgICAgICAgIHJldHVybiB2dV9zZXRfbWVtX3RhYmxlX2V4ZWMoZGV2 LCB2bXNnKTsKKyAgICBjYXNlIFZIT1NUX1VTRVJfU0VUX0xPR19CQVNFOgorICAgICAgICByZXR1 cm4gdnVfc2V0X2xvZ19iYXNlX2V4ZWMoZGV2LCB2bXNnKTsKKyAgICBjYXNlIFZIT1NUX1VTRVJf U0VUX0xPR19GRDoKKyAgICAgICAgcmV0dXJuIHZ1X3NldF9sb2dfZmRfZXhlYyhkZXYsIHZtc2cp OworICAgIGNhc2UgVkhPU1RfVVNFUl9TRVRfVlJJTkdfTlVNOgorICAgICAgICByZXR1cm4gdnVf c2V0X3ZyaW5nX251bV9leGVjKGRldiwgdm1zZyk7CisgICAgY2FzZSBWSE9TVF9VU0VSX1NFVF9W UklOR19BRERSOgorICAgICAgICByZXR1cm4gdnVfc2V0X3ZyaW5nX2FkZHJfZXhlYyhkZXYsIHZt c2cpOworICAgIGNhc2UgVkhPU1RfVVNFUl9TRVRfVlJJTkdfQkFTRToKKyAgICAgICAgcmV0dXJu IHZ1X3NldF92cmluZ19iYXNlX2V4ZWMoZGV2LCB2bXNnKTsKKyAgICBjYXNlIFZIT1NUX1VTRVJf R0VUX1ZSSU5HX0JBU0U6CisgICAgICAgIHJldHVybiB2dV9nZXRfdnJpbmdfYmFzZV9leGVjKGRl diwgdm1zZyk7CisgICAgY2FzZSBWSE9TVF9VU0VSX1NFVF9WUklOR19LSUNLOgorICAgICAgICBy ZXR1cm4gdnVfc2V0X3ZyaW5nX2tpY2tfZXhlYyhkZXYsIHZtc2cpOworICAgIGNhc2UgVkhPU1Rf VVNFUl9TRVRfVlJJTkdfQ0FMTDoKKyAgICAgICAgcmV0dXJuIHZ1X3NldF92cmluZ19jYWxsX2V4 ZWMoZGV2LCB2bXNnKTsKKyAgICBjYXNlIFZIT1NUX1VTRVJfU0VUX1ZSSU5HX0VSUjoKKyAgICAg ICAgcmV0dXJuIHZ1X3NldF92cmluZ19lcnJfZXhlYyhkZXYsIHZtc2cpOworICAgIGNhc2UgVkhP U1RfVVNFUl9HRVRfUVVFVUVfTlVNOgorICAgICAgICByZXR1cm4gdnVfZ2V0X3F1ZXVlX251bV9l eGVjKGRldiwgdm1zZyk7CisgICAgY2FzZSBWSE9TVF9VU0VSX1NFVF9WUklOR19FTkFCTEU6Cisg ICAgICAgIHJldHVybiB2dV9zZXRfdnJpbmdfZW5hYmxlX2V4ZWMoZGV2LCB2bXNnKTsKKyAgICBj YXNlIFZIT1NUX1VTRVJfU0VUX1NMQVZFX1JFUV9GRDoKKyAgICAgICAgcmV0dXJuIHZ1X3NldF9z bGF2ZV9yZXFfZmQoZGV2LCB2bXNnKTsKKyAgICBjYXNlIFZIT1NUX1VTRVJfR0VUX0NPTkZJRzoK KyAgICAgICAgcmV0dXJuIHZ1X2dldF9jb25maWcoZGV2LCB2bXNnKTsKKyAgICBjYXNlIFZIT1NU X1VTRVJfU0VUX0NPTkZJRzoKKyAgICAgICAgcmV0dXJuIHZ1X3NldF9jb25maWcoZGV2LCB2bXNn KTsKKyAgICBjYXNlIFZIT1NUX1VTRVJfTk9ORToKKyAgICAgICAgLyogaWYgeW91IG5lZWQgcHJv Y2Vzc2luZyBiZWZvcmUgZXhpdCwgb3ZlcnJpZGUgaWZhY2UtPnByb2Nlc3NfbXNnICovCisgICAg ICAgIGV4aXQoMCk7CisgICAgY2FzZSBWSE9TVF9VU0VSX1BPU1RDT1BZX0FEVklTRToKKyAgICAg ICAgcmV0dXJuIHZ1X3NldF9wb3N0Y29weV9hZHZpc2UoZGV2LCB2bXNnKTsKKyAgICBjYXNlIFZI T1NUX1VTRVJfUE9TVENPUFlfTElTVEVOOgorICAgICAgICByZXR1cm4gdnVfc2V0X3Bvc3Rjb3B5 X2xpc3RlbihkZXYsIHZtc2cpOworICAgIGNhc2UgVkhPU1RfVVNFUl9QT1NUQ09QWV9FTkQ6Cisg ICAgICAgIHJldHVybiB2dV9zZXRfcG9zdGNvcHlfZW5kKGRldiwgdm1zZyk7CisgICAgY2FzZSBW SE9TVF9VU0VSX0dFVF9JTkZMSUdIVF9GRDoKKyAgICAgICAgcmV0dXJuIHZ1X2dldF9pbmZsaWdo dF9mZChkZXYsIHZtc2cpOworICAgIGNhc2UgVkhPU1RfVVNFUl9TRVRfSU5GTElHSFRfRkQ6Cisg ICAgICAgIHJldHVybiB2dV9zZXRfaW5mbGlnaHRfZmQoZGV2LCB2bXNnKTsKKyAgICBjYXNlIFZI T1NUX1VTRVJfVlJJTkdfS0lDSzoKKyAgICAgICAgcmV0dXJuIHZ1X2hhbmRsZV92cmluZ19raWNr KGRldiwgdm1zZyk7CisgICAgY2FzZSBWSE9TVF9VU0VSX0dFVF9NQVhfTUVNX1NMT1RTOgorICAg ICAgICByZXR1cm4gdnVfaGFuZGxlX2dldF9tYXhfbWVtc2xvdHMoZGV2LCB2bXNnKTsKKyAgICBj YXNlIFZIT1NUX1VTRVJfQUREX01FTV9SRUc6CisgICAgICAgIHJldHVybiB2dV9hZGRfbWVtX3Jl ZyhkZXYsIHZtc2cpOworICAgIGNhc2UgVkhPU1RfVVNFUl9SRU1fTUVNX1JFRzoKKyAgICAgICAg cmV0dXJuIHZ1X3JlbV9tZW1fcmVnKGRldiwgdm1zZyk7CisgICAgZGVmYXVsdDoKKyAgICAgICAg dm1zZ19jbG9zZV9mZHModm1zZyk7CisgICAgICAgIHZ1X3BhbmljKGRldiwgIlVuaGFuZGxlZCBy ZXF1ZXN0OiAlZCIsIHZtc2ctPnJlcXVlc3QpOworICAgIH0KKworICAgIHJldHVybiBmYWxzZTsK K30KKworYm9vbAordnVfZGlzcGF0Y2goVnVEZXYgKmRldikKK3sKKyAgICBWaG9zdFVzZXJNc2cg dm1zZyA9IHsgMCwgfTsKKyAgICBpbnQgcmVwbHlfcmVxdWVzdGVkOworICAgIGJvb2wgbmVlZF9y ZXBseSwgc3VjY2VzcyA9IGZhbHNlOworCisgICAgaWYgKCFkZXYtPnJlYWRfbXNnKGRldiwgZGV2 LT5zb2NrLCAmdm1zZykpIHsKKyAgICAgICAgZ290byBlbmQ7CisgICAgfQorCisgICAgbmVlZF9y ZXBseSA9IHZtc2cuZmxhZ3MgJiBWSE9TVF9VU0VSX05FRURfUkVQTFlfTUFTSzsKKworICAgIHJl cGx5X3JlcXVlc3RlZCA9IHZ1X3Byb2Nlc3NfbWVzc2FnZShkZXYsICZ2bXNnKTsKKyAgICBpZiAo IXJlcGx5X3JlcXVlc3RlZCAmJiBuZWVkX3JlcGx5KSB7CisgICAgICAgIHZtc2dfc2V0X3JlcGx5 X3U2NCgmdm1zZywgMCk7CisgICAgICAgIHJlcGx5X3JlcXVlc3RlZCA9IDE7CisgICAgfQorCisg ICAgaWYgKCFyZXBseV9yZXF1ZXN0ZWQpIHsKKyAgICAgICAgc3VjY2VzcyA9IHRydWU7CisgICAg ICAgIGdvdG8gZW5kOworICAgIH0KKworICAgIGlmICghdnVfc2VuZF9yZXBseShkZXYsIGRldi0+ c29jaywgJnZtc2cpKSB7CisgICAgICAgIGdvdG8gZW5kOworICAgIH0KKworICAgIHN1Y2Nlc3Mg PSB0cnVlOworCitlbmQ6CisgICAgZnJlZSh2bXNnLmRhdGEpOworICAgIHJldHVybiBzdWNjZXNz OworfQorCit2b2lkCit2dV9kZWluaXQoVnVEZXYgKmRldikKK3sKKyAgICBpbnQgaTsKKworICAg IGZvciAoaSA9IDA7IGkgPCBkZXYtPm5yZWdpb25zOyBpKyspIHsKKyAgICAgICAgVnVEZXZSZWdp b24gKnIgPSAmZGV2LT5yZWdpb25zW2ldOworICAgICAgICB2b2lkICptID0gKHZvaWQgKikgKHVp bnRwdHJfdCkgci0+bW1hcF9hZGRyOworICAgICAgICBpZiAobSAhPSBNQVBfRkFJTEVEKSB7Cisg ICAgICAgICAgICBtdW5tYXAobSwgci0+c2l6ZSArIHItPm1tYXBfb2Zmc2V0KTsKKyAgICAgICAg fQorICAgIH0KKyAgICBkZXYtPm5yZWdpb25zID0gMDsKKworICAgIGZvciAoaSA9IDA7IGkgPCBk ZXYtPm1heF9xdWV1ZXM7IGkrKykgeworICAgICAgICBWdVZpcnRxICp2cSA9ICZkZXYtPnZxW2ld OworCisgICAgICAgIGlmICh2cS0+Y2FsbF9mZCAhPSAtMSkgeworICAgICAgICAgICAgY2xvc2Uo dnEtPmNhbGxfZmQpOworICAgICAgICAgICAgdnEtPmNhbGxfZmQgPSAtMTsKKyAgICAgICAgfQor CisgICAgICAgIGlmICh2cS0+a2lja19mZCAhPSAtMSkgeworICAgICAgICAgICAgZGV2LT5yZW1v dmVfd2F0Y2goZGV2LCB2cS0+a2lja19mZCk7CisgICAgICAgICAgICBjbG9zZSh2cS0+a2lja19m ZCk7CisgICAgICAgICAgICB2cS0+a2lja19mZCA9IC0xOworICAgICAgICB9CisKKyAgICAgICAg aWYgKHZxLT5lcnJfZmQgIT0gLTEpIHsKKyAgICAgICAgICAgIGNsb3NlKHZxLT5lcnJfZmQpOwor ICAgICAgICAgICAgdnEtPmVycl9mZCA9IC0xOworICAgICAgICB9CisKKyAgICAgICAgaWYgKHZx LT5yZXN1Ym1pdF9saXN0KSB7CisgICAgICAgICAgICBmcmVlKHZxLT5yZXN1Ym1pdF9saXN0KTsK KyAgICAgICAgICAgIHZxLT5yZXN1Ym1pdF9saXN0ID0gTlVMTDsKKyAgICAgICAgfQorCisgICAg ICAgIHZxLT5pbmZsaWdodCA9IE5VTEw7CisgICAgfQorCisgICAgaWYgKGRldi0+aW5mbGlnaHRf aW5mby5hZGRyKSB7CisgICAgICAgIG11bm1hcChkZXYtPmluZmxpZ2h0X2luZm8uYWRkciwgZGV2 LT5pbmZsaWdodF9pbmZvLnNpemUpOworICAgICAgICBkZXYtPmluZmxpZ2h0X2luZm8uYWRkciA9 IE5VTEw7CisgICAgfQorCisgICAgaWYgKGRldi0+aW5mbGlnaHRfaW5mby5mZCA+IDApIHsKKyAg ICAgICAgY2xvc2UoZGV2LT5pbmZsaWdodF9pbmZvLmZkKTsKKyAgICAgICAgZGV2LT5pbmZsaWdo dF9pbmZvLmZkID0gLTE7CisgICAgfQorCisgICAgdnVfY2xvc2VfbG9nKGRldik7CisgICAgaWYg KGRldi0+c2xhdmVfZmQgIT0gLTEpIHsKKyAgICAgICAgY2xvc2UoZGV2LT5zbGF2ZV9mZCk7Cisg ICAgICAgIGRldi0+c2xhdmVfZmQgPSAtMTsKKyAgICB9CisgICAgcHRocmVhZF9tdXRleF9kZXN0 cm95KCZkZXYtPnNsYXZlX211dGV4KTsKKworICAgIGlmIChkZXYtPnNvY2sgIT0gLTEpIHsKKyAg ICAgICAgY2xvc2UoZGV2LT5zb2NrKTsKKyAgICB9CisKKyAgICBmcmVlKGRldi0+dnEpOworICAg IGRldi0+dnEgPSBOVUxMOworfQorCitib29sCit2dV9pbml0KFZ1RGV2ICpkZXYsCisgICAgICAg IHVpbnQxNl90IG1heF9xdWV1ZXMsCisgICAgICAgIGludCBzb2NrZXQsCisgICAgICAgIHZ1X3Bh bmljX2NiIHBhbmljLAorICAgICAgICB2dV9yZWFkX21zZ19jYiByZWFkX21zZywKKyAgICAgICAg dnVfc2V0X3dhdGNoX2NiIHNldF93YXRjaCwKKyAgICAgICAgdnVfcmVtb3ZlX3dhdGNoX2NiIHJl bW92ZV93YXRjaCwKKyAgICAgICAgY29uc3QgVnVEZXZJZmFjZSAqaWZhY2UpCit7CisgICAgdWlu dDE2X3QgaTsKKworICAgIGFzc2VydChtYXhfcXVldWVzID4gMCk7CisgICAgYXNzZXJ0KHNvY2tl dCA+PSAwKTsKKyAgICBhc3NlcnQoc2V0X3dhdGNoKTsKKyAgICBhc3NlcnQocmVtb3ZlX3dhdGNo KTsKKyAgICBhc3NlcnQoaWZhY2UpOworICAgIGFzc2VydChwYW5pYyk7CisKKyAgICBtZW1zZXQo ZGV2LCAwLCBzaXplb2YoKmRldikpOworCisgICAgZGV2LT5zb2NrID0gc29ja2V0OworICAgIGRl di0+cGFuaWMgPSBwYW5pYzsKKyAgICBkZXYtPnJlYWRfbXNnID0gcmVhZF9tc2cgPyByZWFkX21z ZyA6IHZ1X21lc3NhZ2VfcmVhZF9kZWZhdWx0OworICAgIGRldi0+c2V0X3dhdGNoID0gc2V0X3dh dGNoOworICAgIGRldi0+cmVtb3ZlX3dhdGNoID0gcmVtb3ZlX3dhdGNoOworICAgIGRldi0+aWZh Y2UgPSBpZmFjZTsKKyAgICBkZXYtPmxvZ19jYWxsX2ZkID0gLTE7CisgICAgcHRocmVhZF9tdXRl eF9pbml0KCZkZXYtPnNsYXZlX211dGV4LCBOVUxMKTsKKyAgICBkZXYtPnNsYXZlX2ZkID0gLTE7 CisgICAgZGV2LT5tYXhfcXVldWVzID0gbWF4X3F1ZXVlczsKKworICAgIGRldi0+dnEgPSBtYWxs b2MobWF4X3F1ZXVlcyAqIHNpemVvZihkZXYtPnZxWzBdKSk7CisgICAgaWYgKCFkZXYtPnZxKSB7 CisgICAgICAgIERQUklOVCgiJXM6IGZhaWxlZCB0byBtYWxsb2MgdmlydHF1ZXVlc1xuIiwgX19m dW5jX18pOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgZm9yIChpID0gMDsg aSA8IG1heF9xdWV1ZXM7IGkrKykgeworICAgICAgICBkZXYtPnZxW2ldID0gKFZ1VmlydHEpIHsK KyAgICAgICAgICAgIC5jYWxsX2ZkID0gLTEsIC5raWNrX2ZkID0gLTEsIC5lcnJfZmQgPSAtMSwK KyAgICAgICAgICAgIC5ub3RpZmljYXRpb24gPSB0cnVlLAorICAgICAgICB9OworICAgIH0KKwor ICAgIHJldHVybiB0cnVlOworfQorCitWdVZpcnRxICoKK3Z1X2dldF9xdWV1ZShWdURldiAqZGV2 LCBpbnQgcWlkeCkKK3sKKyAgICBhc3NlcnQocWlkeCA8IGRldi0+bWF4X3F1ZXVlcyk7CisgICAg cmV0dXJuICZkZXYtPnZxW3FpZHhdOworfQorCitib29sCit2dV9xdWV1ZV9lbmFibGVkKFZ1RGV2 ICpkZXYsIFZ1VmlydHEgKnZxKQoreworICAgIHJldHVybiB2cS0+ZW5hYmxlOworfQorCitib29s Cit2dV9xdWV1ZV9zdGFydGVkKGNvbnN0IFZ1RGV2ICpkZXYsIGNvbnN0IFZ1VmlydHEgKnZxKQor eworICAgIHJldHVybiB2cS0+c3RhcnRlZDsKK30KKworc3RhdGljIGlubGluZSB1aW50MTZfdAor dnJpbmdfYXZhaWxfZmxhZ3MoVnVWaXJ0cSAqdnEpCit7CisgICAgcmV0dXJuIGxlMTZ0b2godnEt PnZyaW5nLmF2YWlsLT5mbGFncyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdWludDE2X3QKK3ZyaW5n X2F2YWlsX2lkeChWdVZpcnRxICp2cSkKK3sKKyAgICB2cS0+c2hhZG93X2F2YWlsX2lkeCA9IGxl MTZ0b2godnEtPnZyaW5nLmF2YWlsLT5pZHgpOworCisgICAgcmV0dXJuIHZxLT5zaGFkb3dfYXZh aWxfaWR4OworfQorCitzdGF0aWMgaW5saW5lIHVpbnQxNl90Cit2cmluZ19hdmFpbF9yaW5nKFZ1 VmlydHEgKnZxLCBpbnQgaSkKK3sKKyAgICByZXR1cm4gbGUxNnRvaCh2cS0+dnJpbmcuYXZhaWwt PnJpbmdbaV0pOworfQorCitzdGF0aWMgaW5saW5lIHVpbnQxNl90Cit2cmluZ19nZXRfdXNlZF9l dmVudChWdVZpcnRxICp2cSkKK3sKKyAgICByZXR1cm4gdnJpbmdfYXZhaWxfcmluZyh2cSwgdnEt PnZyaW5nLm51bSk7Cit9CisKK3N0YXRpYyBpbnQKK3ZpcnRxdWV1ZV9udW1faGVhZHMoVnVEZXYg KmRldiwgVnVWaXJ0cSAqdnEsIHVuc2lnbmVkIGludCBpZHgpCit7CisgICAgdWludDE2X3QgbnVt X2hlYWRzID0gdnJpbmdfYXZhaWxfaWR4KHZxKSAtIGlkeDsKKworICAgIC8qIENoZWNrIGl0IGlz bid0IGRvaW5nIHZlcnkgc3RyYW5nZSB0aGluZ3Mgd2l0aCBkZXNjcmlwdG9yIG51bWJlcnMuICov CisgICAgaWYgKG51bV9oZWFkcyA+IHZxLT52cmluZy5udW0pIHsKKyAgICAgICAgdnVfcGFuaWMo ZGV2LCAiR3Vlc3QgbW92ZWQgdXNlZCBpbmRleCBmcm9tICV1IHRvICV1IiwKKyAgICAgICAgICAg ICAgICAgaWR4LCB2cS0+c2hhZG93X2F2YWlsX2lkeCk7CisgICAgICAgIHJldHVybiAtMTsKKyAg ICB9CisgICAgaWYgKG51bV9oZWFkcykgeworICAgICAgICAvKiBPbiBzdWNjZXNzLCBjYWxsZXJz IHJlYWQgYSBkZXNjcmlwdG9yIGF0IHZxLT5sYXN0X2F2YWlsX2lkeC4KKyAgICAgICAgICogTWFr ZSBzdXJlIGRlc2NyaXB0b3IgcmVhZCBkb2VzIG5vdCBieXBhc3MgYXZhaWwgaW5kZXggcmVhZC4g Ki8KKyAgICAgICAgc21wX3JtYigpOworICAgIH0KKworICAgIHJldHVybiBudW1faGVhZHM7Cit9 CisKK3N0YXRpYyBib29sCit2aXJ0cXVldWVfZ2V0X2hlYWQoVnVEZXYgKmRldiwgVnVWaXJ0cSAq dnEsCisgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGlkeCwgdW5zaWduZWQgaW50ICpo ZWFkKQoreworICAgIC8qIEdyYWIgdGhlIG5leHQgZGVzY3JpcHRvciBudW1iZXIgdGhleSdyZSBh ZHZlcnRpc2luZywgYW5kIGluY3JlbWVudAorICAgICAqIHRoZSBpbmRleCB3ZSd2ZSBzZWVuLiAq LworICAgICpoZWFkID0gdnJpbmdfYXZhaWxfcmluZyh2cSwgaWR4ICUgdnEtPnZyaW5nLm51bSk7 CisKKyAgICAvKiBJZiB0aGVpciBudW1iZXIgaXMgc2lsbHksIHRoYXQncyBhIGZhdGFsIG1pc3Rh a2UuICovCisgICAgaWYgKCpoZWFkID49IHZxLT52cmluZy5udW0pIHsKKyAgICAgICAgdnVfcGFu aWMoZGV2LCAiR3Vlc3Qgc2F5cyBpbmRleCAldSBpcyBhdmFpbGFibGUiLCAqaGVhZCk7CisgICAg ICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworc3RhdGlj IGludAordmlydHF1ZXVlX3JlYWRfaW5kaXJlY3RfZGVzYyhWdURldiAqZGV2LCBzdHJ1Y3QgdnJp bmdfZGVzYyAqZGVzYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDY0X3QgYWRk ciwgc2l6ZV90IGxlbikKK3sKKyAgICBzdHJ1Y3QgdnJpbmdfZGVzYyAqb3JpX2Rlc2M7CisgICAg dWludDY0X3QgcmVhZF9sZW47CisKKyAgICBpZiAobGVuID4gKFZJUlRRVUVVRV9NQVhfU0laRSAq IHNpemVvZihzdHJ1Y3QgdnJpbmdfZGVzYykpKSB7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9 CisKKyAgICBpZiAobGVuID09IDApIHsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKworICAg IHdoaWxlIChsZW4pIHsKKyAgICAgICAgcmVhZF9sZW4gPSBsZW47CisgICAgICAgIG9yaV9kZXNj ID0gdnVfZ3BhX3RvX3ZhKGRldiwgJnJlYWRfbGVuLCBhZGRyKTsKKyAgICAgICAgaWYgKCFvcmlf ZGVzYykgeworICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB9CisKKyAgICAgICAgbWVt Y3B5KGRlc2MsIG9yaV9kZXNjLCByZWFkX2xlbik7CisgICAgICAgIGxlbiAtPSByZWFkX2xlbjsK KyAgICAgICAgYWRkciArPSByZWFkX2xlbjsKKyAgICAgICAgZGVzYyArPSByZWFkX2xlbjsKKyAg ICB9CisKKyAgICByZXR1cm4gMDsKK30KKworZW51bSB7CisgICAgVklSVFFVRVVFX1JFQURfREVT Q19FUlJPUiA9IC0xLAorICAgIFZJUlRRVUVVRV9SRUFEX0RFU0NfRE9ORSA9IDAsICAgLyogZW5k IG9mIGNoYWluICovCisgICAgVklSVFFVRVVFX1JFQURfREVTQ19NT1JFID0gMSwgICAvKiBtb3Jl IGJ1ZmZlcnMgaW4gY2hhaW4gKi8KK307CisKK3N0YXRpYyBpbnQKK3ZpcnRxdWV1ZV9yZWFkX25l eHRfZGVzYyhWdURldiAqZGV2LCBzdHJ1Y3QgdnJpbmdfZGVzYyAqZGVzYywKKyAgICAgICAgICAg ICAgICAgICAgICAgICBpbnQgaSwgdW5zaWduZWQgaW50IG1heCwgdW5zaWduZWQgaW50ICpuZXh0 KQoreworICAgIC8qIElmIHRoaXMgZGVzY3JpcHRvciBzYXlzIGl0IGRvZXNuJ3QgY2hhaW4sIHdl J3JlIGRvbmUuICovCisgICAgaWYgKCEobGUxNnRvaChkZXNjW2ldLmZsYWdzKSAmIFZSSU5HX0RF U0NfRl9ORVhUKSkgeworICAgICAgICByZXR1cm4gVklSVFFVRVVFX1JFQURfREVTQ19ET05FOwor ICAgIH0KKworICAgIC8qIENoZWNrIHRoZXkncmUgbm90IGxlYWRpbmcgdXMgb2ZmIGVuZCBvZiBk ZXNjcmlwdG9ycy4gKi8KKyAgICAqbmV4dCA9IGxlMTZ0b2goZGVzY1tpXS5uZXh0KTsKKyAgICAv KiBNYWtlIHN1cmUgY29tcGlsZXIga25vd3MgdG8gZ3JhYiB0aGF0OiB3ZSBkb24ndCB3YW50IGl0 IGNoYW5naW5nISAqLworICAgIHNtcF93bWIoKTsKKworICAgIGlmICgqbmV4dCA+PSBtYXgpIHsK KyAgICAgICAgdnVfcGFuaWMoZGV2LCAiRGVzYyBuZXh0IGlzICV1IiwgKm5leHQpOworICAgICAg ICByZXR1cm4gVklSVFFVRVVFX1JFQURfREVTQ19FUlJPUjsKKyAgICB9CisKKyAgICByZXR1cm4g VklSVFFVRVVFX1JFQURfREVTQ19NT1JFOworfQorCit2b2lkCit2dV9xdWV1ZV9nZXRfYXZhaWxf Ynl0ZXMoVnVEZXYgKmRldiwgVnVWaXJ0cSAqdnEsIHVuc2lnbmVkIGludCAqaW5fYnl0ZXMsCisg ICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50ICpvdXRfYnl0ZXMsCisgICAgICAg ICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbWF4X2luX2J5dGVzLCB1bnNpZ25lZCBtYXhfb3V0 X2J5dGVzKQoreworICAgIHVuc2lnbmVkIGludCBpZHg7CisgICAgdW5zaWduZWQgaW50IHRvdGFs X2J1ZnMsIGluX3RvdGFsLCBvdXRfdG90YWw7CisgICAgaW50IHJjOworCisgICAgaWR4ID0gdnEt Pmxhc3RfYXZhaWxfaWR4OworCisgICAgdG90YWxfYnVmcyA9IGluX3RvdGFsID0gb3V0X3RvdGFs ID0gMDsKKyAgICBpZiAodW5saWtlbHkoZGV2LT5icm9rZW4pIHx8CisgICAgICAgIHVubGlrZWx5 KCF2cS0+dnJpbmcuYXZhaWwpKSB7CisgICAgICAgIGdvdG8gZG9uZTsKKyAgICB9CisKKyAgICB3 aGlsZSAoKHJjID0gdmlydHF1ZXVlX251bV9oZWFkcyhkZXYsIHZxLCBpZHgpKSA+IDApIHsKKyAg ICAgICAgdW5zaWduZWQgaW50IG1heCwgZGVzY19sZW4sIG51bV9idWZzLCBpbmRpcmVjdCA9IDA7 CisgICAgICAgIHVpbnQ2NF90IGRlc2NfYWRkciwgcmVhZF9sZW47CisgICAgICAgIHN0cnVjdCB2 cmluZ19kZXNjICpkZXNjOworICAgICAgICBzdHJ1Y3QgdnJpbmdfZGVzYyBkZXNjX2J1ZltWSVJU UVVFVUVfTUFYX1NJWkVdOworICAgICAgICB1bnNpZ25lZCBpbnQgaTsKKworICAgICAgICBtYXgg PSB2cS0+dnJpbmcubnVtOworICAgICAgICBudW1fYnVmcyA9IHRvdGFsX2J1ZnM7CisgICAgICAg IGlmICghdmlydHF1ZXVlX2dldF9oZWFkKGRldiwgdnEsIGlkeCsrLCAmaSkpIHsKKyAgICAgICAg ICAgIGdvdG8gZXJyOworICAgICAgICB9CisgICAgICAgIGRlc2MgPSB2cS0+dnJpbmcuZGVzYzsK KworICAgICAgICBpZiAobGUxNnRvaChkZXNjW2ldLmZsYWdzKSAmIFZSSU5HX0RFU0NfRl9JTkRJ UkVDVCkgeworICAgICAgICAgICAgaWYgKGxlMzJ0b2goZGVzY1tpXS5sZW4pICUgc2l6ZW9mKHN0 cnVjdCB2cmluZ19kZXNjKSkgeworICAgICAgICAgICAgICAgIHZ1X3BhbmljKGRldiwgIkludmFs aWQgc2l6ZSBmb3IgaW5kaXJlY3QgYnVmZmVyIHRhYmxlIik7CisgICAgICAgICAgICAgICAgZ290 byBlcnI7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8qIElmIHdlJ3ZlIGdvdCB0b28g bWFueSwgdGhhdCBpbXBsaWVzIGEgZGVzY3JpcHRvciBsb29wLiAqLworICAgICAgICAgICAgaWYg KG51bV9idWZzID49IG1heCkgeworICAgICAgICAgICAgICAgIHZ1X3BhbmljKGRldiwgIkxvb3Bl ZCBkZXNjcmlwdG9yIik7CisgICAgICAgICAgICAgICAgZ290byBlcnI7CisgICAgICAgICAgICB9 CisKKyAgICAgICAgICAgIC8qIGxvb3Agb3ZlciB0aGUgaW5kaXJlY3QgZGVzY3JpcHRvciB0YWJs ZSAqLworICAgICAgICAgICAgaW5kaXJlY3QgPSAxOworICAgICAgICAgICAgZGVzY19hZGRyID0g bGU2NHRvaChkZXNjW2ldLmFkZHIpOworICAgICAgICAgICAgZGVzY19sZW4gPSBsZTMydG9oKGRl c2NbaV0ubGVuKTsKKyAgICAgICAgICAgIG1heCA9IGRlc2NfbGVuIC8gc2l6ZW9mKHN0cnVjdCB2 cmluZ19kZXNjKTsKKyAgICAgICAgICAgIHJlYWRfbGVuID0gZGVzY19sZW47CisgICAgICAgICAg ICBkZXNjID0gdnVfZ3BhX3RvX3ZhKGRldiwgJnJlYWRfbGVuLCBkZXNjX2FkZHIpOworICAgICAg ICAgICAgaWYgKHVubGlrZWx5KGRlc2MgJiYgcmVhZF9sZW4gIT0gZGVzY19sZW4pKSB7CisgICAg ICAgICAgICAgICAgLyogRmFpbGVkIHRvIHVzZSB6ZXJvIGNvcHkgKi8KKyAgICAgICAgICAgICAg ICBkZXNjID0gTlVMTDsKKyAgICAgICAgICAgICAgICBpZiAoIXZpcnRxdWV1ZV9yZWFkX2luZGly ZWN0X2Rlc2MoZGV2LCBkZXNjX2J1ZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgZGVzY19hZGRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBkZXNjX2xlbikpIHsKKyAgICAgICAgICAgICAgICAgICAg ZGVzYyA9IGRlc2NfYnVmOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAg ICAgICAgIGlmICghZGVzYykgeworICAgICAgICAgICAgICAgIHZ1X3BhbmljKGRldiwgIkludmFs aWQgaW5kaXJlY3QgYnVmZmVyIHRhYmxlIik7CisgICAgICAgICAgICAgICAgZ290byBlcnI7Cisg ICAgICAgICAgICB9CisgICAgICAgICAgICBudW1fYnVmcyA9IGkgPSAwOworICAgICAgICB9CisK KyAgICAgICAgZG8geworICAgICAgICAgICAgLyogSWYgd2UndmUgZ290IHRvbyBtYW55LCB0aGF0 IGltcGxpZXMgYSBkZXNjcmlwdG9yIGxvb3AuICovCisgICAgICAgICAgICBpZiAoKytudW1fYnVm cyA+IG1heCkgeworICAgICAgICAgICAgICAgIHZ1X3BhbmljKGRldiwgIkxvb3BlZCBkZXNjcmlw dG9yIik7CisgICAgICAgICAgICAgICAgZ290byBlcnI7CisgICAgICAgICAgICB9CisKKyAgICAg ICAgICAgIGlmIChsZTE2dG9oKGRlc2NbaV0uZmxhZ3MpICYgVlJJTkdfREVTQ19GX1dSSVRFKSB7 CisgICAgICAgICAgICAgICAgaW5fdG90YWwgKz0gbGUzMnRvaChkZXNjW2ldLmxlbik7CisgICAg ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIG91dF90b3RhbCArPSBsZTMydG9oKGRl c2NbaV0ubGVuKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChpbl90b3RhbCA+PSBt YXhfaW5fYnl0ZXMgJiYgb3V0X3RvdGFsID49IG1heF9vdXRfYnl0ZXMpIHsKKyAgICAgICAgICAg ICAgICBnb3RvIGRvbmU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByYyA9IHZpcnRxdWV1 ZV9yZWFkX25leHRfZGVzYyhkZXYsIGRlc2MsIGksIG1heCwgJmkpOworICAgICAgICB9IHdoaWxl IChyYyA9PSBWSVJUUVVFVUVfUkVBRF9ERVNDX01PUkUpOworCisgICAgICAgIGlmIChyYyA9PSBW SVJUUVVFVUVfUkVBRF9ERVNDX0VSUk9SKSB7CisgICAgICAgICAgICBnb3RvIGVycjsKKyAgICAg ICAgfQorCisgICAgICAgIGlmICghaW5kaXJlY3QpIHsKKyAgICAgICAgICAgIHRvdGFsX2J1ZnMg PSBudW1fYnVmczsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHRvdGFsX2J1ZnMrKzsK KyAgICAgICAgfQorICAgIH0KKyAgICBpZiAocmMgPCAwKSB7CisgICAgICAgIGdvdG8gZXJyOwor ICAgIH0KK2RvbmU6CisgICAgaWYgKGluX2J5dGVzKSB7CisgICAgICAgICppbl9ieXRlcyA9IGlu X3RvdGFsOworICAgIH0KKyAgICBpZiAob3V0X2J5dGVzKSB7CisgICAgICAgICpvdXRfYnl0ZXMg PSBvdXRfdG90YWw7CisgICAgfQorICAgIHJldHVybjsKKworZXJyOgorICAgIGluX3RvdGFsID0g b3V0X3RvdGFsID0gMDsKKyAgICBnb3RvIGRvbmU7Cit9CisKK2Jvb2wKK3Z1X3F1ZXVlX2F2YWls X2J5dGVzKFZ1RGV2ICpkZXYsIFZ1VmlydHEgKnZxLCB1bnNpZ25lZCBpbnQgaW5fYnl0ZXMsCisg ICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgb3V0X2J5dGVzKQoreworICAgIHVuc2ln bmVkIGludCBpbl90b3RhbCwgb3V0X3RvdGFsOworCisgICAgdnVfcXVldWVfZ2V0X2F2YWlsX2J5 dGVzKGRldiwgdnEsICZpbl90b3RhbCwgJm91dF90b3RhbCwKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgaW5fYnl0ZXMsIG91dF9ieXRlcyk7CisKKyAgICByZXR1cm4gaW5fYnl0ZXMgPD0g aW5fdG90YWwgJiYgb3V0X2J5dGVzIDw9IG91dF90b3RhbDsKK30KKworLyogRmV0Y2ggYXZhaWxf aWR4IGZyb20gVlEgbWVtb3J5IG9ubHkgd2hlbiB3ZSByZWFsbHkgbmVlZCB0byBrbm93IGlmCisg KiBndWVzdCBoYXMgYWRkZWQgc29tZSBidWZmZXJzLiAqLworYm9vbAordnVfcXVldWVfZW1wdHko VnVEZXYgKmRldiwgVnVWaXJ0cSAqdnEpCit7CisgICAgaWYgKHVubGlrZWx5KGRldi0+YnJva2Vu KSB8fAorICAgICAgICB1bmxpa2VseSghdnEtPnZyaW5nLmF2YWlsKSkgeworICAgICAgICByZXR1 cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBpZiAodnEtPnNoYWRvd19hdmFpbF9pZHggIT0gdnEtPmxh c3RfYXZhaWxfaWR4KSB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICByZXR1 cm4gdnJpbmdfYXZhaWxfaWR4KHZxKSA9PSB2cS0+bGFzdF9hdmFpbF9pZHg7Cit9CisKK3N0YXRp YyBib29sCit2cmluZ19ub3RpZnkoVnVEZXYgKmRldiwgVnVWaXJ0cSAqdnEpCit7CisgICAgdWlu dDE2X3Qgb2xkLCBuZXc7CisgICAgYm9vbCB2OworCisgICAgLyogV2UgbmVlZCB0byBleHBvc2Ug dXNlZCBhcnJheSBlbnRyaWVzIGJlZm9yZSBjaGVja2luZyB1c2VkIGV2ZW50LiAqLworICAgIHNt cF9tYigpOworCisgICAgLyogQWx3YXlzIG5vdGlmeSB3aGVuIHF1ZXVlIGlzIGVtcHR5ICh3aGVu IGZlYXR1cmUgYWNrbm93bGVkZ2UpICovCisgICAgaWYgKHZ1X2hhc19mZWF0dXJlKGRldiwgVklS VElPX0ZfTk9USUZZX09OX0VNUFRZKSAmJgorICAgICAgICAhdnEtPmludXNlICYmIHZ1X3F1ZXVl X2VtcHR5KGRldiwgdnEpKSB7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIGlm ICghdnVfaGFzX2ZlYXR1cmUoZGV2LCBWSVJUSU9fUklOR19GX0VWRU5UX0lEWCkpIHsKKyAgICAg ICAgcmV0dXJuICEodnJpbmdfYXZhaWxfZmxhZ3ModnEpICYgVlJJTkdfQVZBSUxfRl9OT19JTlRF UlJVUFQpOworICAgIH0KKworICAgIHYgPSB2cS0+c2lnbmFsbGVkX3VzZWRfdmFsaWQ7CisgICAg dnEtPnNpZ25hbGxlZF91c2VkX3ZhbGlkID0gdHJ1ZTsKKyAgICBvbGQgPSB2cS0+c2lnbmFsbGVk X3VzZWQ7CisgICAgbmV3ID0gdnEtPnNpZ25hbGxlZF91c2VkID0gdnEtPnVzZWRfaWR4OworICAg IHJldHVybiAhdiB8fCB2cmluZ19uZWVkX2V2ZW50KHZyaW5nX2dldF91c2VkX2V2ZW50KHZxKSwg bmV3LCBvbGQpOworfQorCitzdGF0aWMgdm9pZCBfdnVfcXVldWVfbm90aWZ5KFZ1RGV2ICpkZXYs IFZ1VmlydHEgKnZxLCBib29sIHN5bmMpCit7CisgICAgaWYgKHVubGlrZWx5KGRldi0+YnJva2Vu KSB8fAorICAgICAgICB1bmxpa2VseSghdnEtPnZyaW5nLmF2YWlsKSkgeworICAgICAgICByZXR1 cm47CisgICAgfQorCisgICAgaWYgKCF2cmluZ19ub3RpZnkoZGV2LCB2cSkpIHsKKyAgICAgICAg RFBSSU5UKCJza2lwcGVkIG5vdGlmeS4uLlxuIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisK KyAgICBpZiAodnEtPmNhbGxfZmQgPCAwICYmCisgICAgICAgIHZ1X2hhc19wcm90b2NvbF9mZWF0 dXJlKGRldiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVkhPU1RfVVNFUl9QUk9U T0NPTF9GX0lOQkFORF9OT1RJRklDQVRJT05TKSAmJgorICAgICAgICB2dV9oYXNfcHJvdG9jb2xf ZmVhdHVyZShkZXYsIFZIT1NUX1VTRVJfUFJPVE9DT0xfRl9TTEFWRV9SRVEpKSB7CisgICAgICAg IFZob3N0VXNlck1zZyB2bXNnID0geworICAgICAgICAgICAgLnJlcXVlc3QgPSBWSE9TVF9VU0VS X1NMQVZFX1ZSSU5HX0NBTEwsCisgICAgICAgICAgICAuZmxhZ3MgPSBWSE9TVF9VU0VSX1ZFUlNJ T04sCisgICAgICAgICAgICAuc2l6ZSA9IHNpemVvZih2bXNnLnBheWxvYWQuc3RhdGUpLAorICAg ICAgICAgICAgLnBheWxvYWQuc3RhdGUgPSB7CisgICAgICAgICAgICAgICAgLmluZGV4ID0gdnEg LSBkZXYtPnZxLAorICAgICAgICAgICAgfSwKKyAgICAgICAgfTsKKyAgICAgICAgYm9vbCBhY2sg PSBzeW5jICYmCisgICAgICAgICAgICAgICAgICAgdnVfaGFzX3Byb3RvY29sX2ZlYXR1cmUoZGV2 LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZIT1NUX1VTRVJf UFJPVE9DT0xfRl9SRVBMWV9BQ0spOworCisgICAgICAgIGlmIChhY2spIHsKKyAgICAgICAgICAg IHZtc2cuZmxhZ3MgfD0gVkhPU1RfVVNFUl9ORUVEX1JFUExZX01BU0s7CisgICAgICAgIH0KKwor ICAgICAgICB2dV9tZXNzYWdlX3dyaXRlKGRldiwgZGV2LT5zbGF2ZV9mZCwgJnZtc2cpOworICAg ICAgICBpZiAoYWNrKSB7CisgICAgICAgICAgICB2dV9tZXNzYWdlX3JlYWRfZGVmYXVsdChkZXYs IGRldi0+c2xhdmVfZmQsICZ2bXNnKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm47CisgICAg fQorCisgICAgaWYgKGV2ZW50ZmRfd3JpdGUodnEtPmNhbGxfZmQsIDEpIDwgMCkgeworICAgICAg ICB2dV9wYW5pYyhkZXYsICJFcnJvciB3cml0aW5nIGV2ZW50ZmQ6ICVzIiwgc3RyZXJyb3IoZXJy bm8pKTsKKyAgICB9Cit9CisKK3ZvaWQgdnVfcXVldWVfbm90aWZ5KFZ1RGV2ICpkZXYsIFZ1Vmly dHEgKnZxKQoreworICAgIF92dV9xdWV1ZV9ub3RpZnkoZGV2LCB2cSwgZmFsc2UpOworfQorCit2 b2lkIHZ1X3F1ZXVlX25vdGlmeV9zeW5jKFZ1RGV2ICpkZXYsIFZ1VmlydHEgKnZxKQoreworICAg IF92dV9xdWV1ZV9ub3RpZnkoZGV2LCB2cSwgdHJ1ZSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9p ZAordnJpbmdfdXNlZF9mbGFnc19zZXRfYml0KFZ1VmlydHEgKnZxLCBpbnQgbWFzaykKK3sKKyAg ICB1aW50MTZfdCAqZmxhZ3M7CisKKyAgICBmbGFncyA9ICh1aW50MTZfdCAqKSgoY2hhciopdnEt PnZyaW5nLnVzZWQgKworICAgICAgICAgICAgICAgICAgICAgICAgIG9mZnNldG9mKHN0cnVjdCB2 cmluZ191c2VkLCBmbGFncykpOworICAgICpmbGFncyA9IGh0b2xlMTYobGUxNnRvaCgqZmxhZ3Mp IHwgbWFzayk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZAordnJpbmdfdXNlZF9mbGFnc191bnNl dF9iaXQoVnVWaXJ0cSAqdnEsIGludCBtYXNrKQoreworICAgIHVpbnQxNl90ICpmbGFnczsKKwor ICAgIGZsYWdzID0gKHVpbnQxNl90ICopKChjaGFyKil2cS0+dnJpbmcudXNlZCArCisgICAgICAg ICAgICAgICAgICAgICAgICAgb2Zmc2V0b2Yoc3RydWN0IHZyaW5nX3VzZWQsIGZsYWdzKSk7Cisg ICAgKmZsYWdzID0gaHRvbGUxNihsZTE2dG9oKCpmbGFncykgJiB+bWFzayk7Cit9CisKK3N0YXRp YyBpbmxpbmUgdm9pZAordnJpbmdfc2V0X2F2YWlsX2V2ZW50KFZ1VmlydHEgKnZxLCB1aW50MTZf dCB2YWwpCit7CisgICAgdWludDE2X3QgKmF2YWlsOworCisgICAgaWYgKCF2cS0+bm90aWZpY2F0 aW9uKSB7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBhdmFpbCA9ICh1aW50MTZfdCAq KSZ2cS0+dnJpbmcudXNlZC0+cmluZ1t2cS0+dnJpbmcubnVtXTsKKyAgICAqYXZhaWwgPSBodG9s ZTE2KHZhbCk7Cit9CisKK3ZvaWQKK3Z1X3F1ZXVlX3NldF9ub3RpZmljYXRpb24oVnVEZXYgKmRl diwgVnVWaXJ0cSAqdnEsIGludCBlbmFibGUpCit7CisgICAgdnEtPm5vdGlmaWNhdGlvbiA9IGVu YWJsZTsKKyAgICBpZiAodnVfaGFzX2ZlYXR1cmUoZGV2LCBWSVJUSU9fUklOR19GX0VWRU5UX0lE WCkpIHsKKyAgICAgICAgdnJpbmdfc2V0X2F2YWlsX2V2ZW50KHZxLCB2cmluZ19hdmFpbF9pZHgo dnEpKTsKKyAgICB9IGVsc2UgaWYgKGVuYWJsZSkgeworICAgICAgICB2cmluZ191c2VkX2ZsYWdz X3Vuc2V0X2JpdCh2cSwgVlJJTkdfVVNFRF9GX05PX05PVElGWSk7CisgICAgfSBlbHNlIHsKKyAg ICAgICAgdnJpbmdfdXNlZF9mbGFnc19zZXRfYml0KHZxLCBWUklOR19VU0VEX0ZfTk9fTk9USUZZ KTsKKyAgICB9CisgICAgaWYgKGVuYWJsZSkgeworICAgICAgICAvKiBFeHBvc2UgYXZhaWwgZXZl bnQvdXNlZCBmbGFncyBiZWZvcmUgY2FsbGVyIGNoZWNrcyB0aGUgYXZhaWwgaWR4LiAqLworICAg ICAgICBzbXBfbWIoKTsKKyAgICB9Cit9CisKK3N0YXRpYyBib29sCit2aXJ0cXVldWVfbWFwX2Rl c2MoVnVEZXYgKmRldiwKKyAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgKnBfbnVtX3Nn LCBzdHJ1Y3QgaW92ZWMgKmlvdiwKKyAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgbWF4 X251bV9zZywgYm9vbCBpc193cml0ZSwKKyAgICAgICAgICAgICAgICAgICB1aW50NjRfdCBwYSwg c2l6ZV90IHN6KQoreworICAgIHVuc2lnbmVkIG51bV9zZyA9ICpwX251bV9zZzsKKworICAgIGFz c2VydChudW1fc2cgPD0gbWF4X251bV9zZyk7CisKKyAgICBpZiAoIXN6KSB7CisgICAgICAgIHZ1 X3BhbmljKGRldiwgInZpcnRpbzogemVybyBzaXplZCBidWZmZXJzIGFyZSBub3QgYWxsb3dlZCIp OworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgd2hpbGUgKHN6KSB7CisgICAg ICAgIHVpbnQ2NF90IGxlbiA9IHN6OworCisgICAgICAgIGlmIChudW1fc2cgPT0gbWF4X251bV9z ZykgeworICAgICAgICAgICAgdnVfcGFuaWMoZGV2LCAidmlydGlvOiB0b28gbWFueSBkZXNjcmlw dG9ycyBpbiBpbmRpcmVjdCB0YWJsZSIpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg ICAgICB9CisKKyAgICAgICAgaW92W251bV9zZ10uaW92X2Jhc2UgPSB2dV9ncGFfdG9fdmEoZGV2 LCAmbGVuLCBwYSk7CisgICAgICAgIGlmIChpb3ZbbnVtX3NnXS5pb3ZfYmFzZSA9PSBOVUxMKSB7 CisgICAgICAgICAgICB2dV9wYW5pYyhkZXYsICJ2aXJ0aW86IGludmFsaWQgYWRkcmVzcyBmb3Ig YnVmZmVycyIpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAg IGlvdltudW1fc2ddLmlvdl9sZW4gPSBsZW47CisgICAgICAgIG51bV9zZysrOworICAgICAgICBz eiAtPSBsZW47CisgICAgICAgIHBhICs9IGxlbjsKKyAgICB9CisKKyAgICAqcF9udW1fc2cgPSBu dW1fc2c7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3N0YXRpYyB2b2lkICoKK3ZpcnRxdWV1ZV9h bGxvY19lbGVtZW50KHNpemVfdCBzeiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICB1bnNpZ25lZCBvdXRfbnVtLCB1bnNpZ25lZCBpbl9udW0pCit7CisgICAgVnVWaXJ0cUVs ZW1lbnQgKmVsZW07CisgICAgc2l6ZV90IGluX3NnX29mcyA9IEFMSUdOX1VQKHN6LCBfX2FsaWdu b2ZfXyhlbGVtLT5pbl9zZ1swXSkpOworICAgIHNpemVfdCBvdXRfc2dfb2ZzID0gaW5fc2dfb2Zz ICsgaW5fbnVtICogc2l6ZW9mKGVsZW0tPmluX3NnWzBdKTsKKyAgICBzaXplX3Qgb3V0X3NnX2Vu ZCA9IG91dF9zZ19vZnMgKyBvdXRfbnVtICogc2l6ZW9mKGVsZW0tPm91dF9zZ1swXSk7CisKKyAg ICBhc3NlcnQoc3ogPj0gc2l6ZW9mKFZ1VmlydHFFbGVtZW50KSk7CisgICAgZWxlbSA9IG1hbGxv YyhvdXRfc2dfZW5kKTsKKyAgICBlbGVtLT5vdXRfbnVtID0gb3V0X251bTsKKyAgICBlbGVtLT5p bl9udW0gPSBpbl9udW07CisgICAgZWxlbS0+aW5fc2cgPSAodm9pZCAqKWVsZW0gKyBpbl9zZ19v ZnM7CisgICAgZWxlbS0+b3V0X3NnID0gKHZvaWQgKillbGVtICsgb3V0X3NnX29mczsKKyAgICBy ZXR1cm4gZWxlbTsKK30KKworc3RhdGljIHZvaWQgKgordnVfcXVldWVfbWFwX2Rlc2MoVnVEZXYg KmRldiwgVnVWaXJ0cSAqdnEsIHVuc2lnbmVkIGludCBpZHgsIHNpemVfdCBzeikKK3sKKyAgICBz dHJ1Y3QgdnJpbmdfZGVzYyAqZGVzYyA9IHZxLT52cmluZy5kZXNjOworICAgIHVpbnQ2NF90IGRl c2NfYWRkciwgcmVhZF9sZW47CisgICAgdW5zaWduZWQgaW50IGRlc2NfbGVuOworICAgIHVuc2ln bmVkIGludCBtYXggPSB2cS0+dnJpbmcubnVtOworICAgIHVuc2lnbmVkIGludCBpID0gaWR4Owor ICAgIFZ1VmlydHFFbGVtZW50ICplbGVtOworICAgIHVuc2lnbmVkIGludCBvdXRfbnVtID0gMCwg aW5fbnVtID0gMDsKKyAgICBzdHJ1Y3QgaW92ZWMgaW92W1ZJUlRRVUVVRV9NQVhfU0laRV07Cisg ICAgc3RydWN0IHZyaW5nX2Rlc2MgZGVzY19idWZbVklSVFFVRVVFX01BWF9TSVpFXTsKKyAgICBp bnQgcmM7CisKKyAgICBpZiAobGUxNnRvaChkZXNjW2ldLmZsYWdzKSAmIFZSSU5HX0RFU0NfRl9J TkRJUkVDVCkgeworICAgICAgICBpZiAobGUzMnRvaChkZXNjW2ldLmxlbikgJSBzaXplb2Yoc3Ry dWN0IHZyaW5nX2Rlc2MpKSB7CisgICAgICAgICAgICB2dV9wYW5pYyhkZXYsICJJbnZhbGlkIHNp emUgZm9yIGluZGlyZWN0IGJ1ZmZlciB0YWJsZSIpOworICAgICAgICAgICAgcmV0dXJuIE5VTEw7 CisgICAgICAgIH0KKworICAgICAgICAvKiBsb29wIG92ZXIgdGhlIGluZGlyZWN0IGRlc2NyaXB0 b3IgdGFibGUgKi8KKyAgICAgICAgZGVzY19hZGRyID0gbGU2NHRvaChkZXNjW2ldLmFkZHIpOwor ICAgICAgICBkZXNjX2xlbiA9IGxlMzJ0b2goZGVzY1tpXS5sZW4pOworICAgICAgICBtYXggPSBk ZXNjX2xlbiAvIHNpemVvZihzdHJ1Y3QgdnJpbmdfZGVzYyk7CisgICAgICAgIHJlYWRfbGVuID0g ZGVzY19sZW47CisgICAgICAgIGRlc2MgPSB2dV9ncGFfdG9fdmEoZGV2LCAmcmVhZF9sZW4sIGRl c2NfYWRkcik7CisgICAgICAgIGlmICh1bmxpa2VseShkZXNjICYmIHJlYWRfbGVuICE9IGRlc2Nf bGVuKSkgeworICAgICAgICAgICAgLyogRmFpbGVkIHRvIHVzZSB6ZXJvIGNvcHkgKi8KKyAgICAg ICAgICAgIGRlc2MgPSBOVUxMOworICAgICAgICAgICAgaWYgKCF2aXJ0cXVldWVfcmVhZF9pbmRp cmVjdF9kZXNjKGRldiwgZGVzY19idWYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgZGVzY19hZGRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGRlc2NfbGVuKSkgeworICAgICAgICAgICAgICAgIGRlc2MgPSBkZXNj X2J1ZjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBpZiAoIWRlc2MpIHsKKyAg ICAgICAgICAgIHZ1X3BhbmljKGRldiwgIkludmFsaWQgaW5kaXJlY3QgYnVmZmVyIHRhYmxlIik7 CisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgfQorICAgICAgICBpID0gMDsKKyAg ICB9CisKKyAgICAvKiBDb2xsZWN0IGFsbCB0aGUgZGVzY3JpcHRvcnMgKi8KKyAgICBkbyB7Cisg ICAgICAgIGlmIChsZTE2dG9oKGRlc2NbaV0uZmxhZ3MpICYgVlJJTkdfREVTQ19GX1dSSVRFKSB7 CisgICAgICAgICAgICBpZiAoIXZpcnRxdWV1ZV9tYXBfZGVzYyhkZXYsICZpbl9udW0sIGlvdiAr IG91dF9udW0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVklSVFFVRVVFX01BWF9T SVpFIC0gb3V0X251bSwgdHJ1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZTY0 dG9oKGRlc2NbaV0uYWRkciksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGUzMnRv aChkZXNjW2ldLmxlbikpKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAg ICAgICB9CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBpZiAoaW5fbnVtKSB7CisgICAg ICAgICAgICAgICAgdnVfcGFuaWMoZGV2LCAiSW5jb3JyZWN0IG9yZGVyIGZvciBkZXNjcmlwdG9y cyIpOworICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICAgICAgfQorICAgICAg ICAgICAgaWYgKCF2aXJ0cXVldWVfbWFwX2Rlc2MoZGV2LCAmb3V0X251bSwgaW92LAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIFZJUlRRVUVVRV9NQVhfU0laRSwgZmFsc2UsCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgbGU2NHRvaChkZXNjW2ldLmFkZHIpLAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGxlMzJ0b2goZGVzY1tpXS5sZW4pKSkgeworICAgICAg ICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAg ICAgLyogSWYgd2UndmUgZ290IHRvbyBtYW55LCB0aGF0IGltcGxpZXMgYSBkZXNjcmlwdG9yIGxv b3AuICovCisgICAgICAgIGlmICgoaW5fbnVtICsgb3V0X251bSkgPiBtYXgpIHsKKyAgICAgICAg ICAgIHZ1X3BhbmljKGRldiwgIkxvb3BlZCBkZXNjcmlwdG9yIik7CisgICAgICAgICAgICByZXR1 cm4gTlVMTDsKKyAgICAgICAgfQorICAgICAgICByYyA9IHZpcnRxdWV1ZV9yZWFkX25leHRfZGVz YyhkZXYsIGRlc2MsIGksIG1heCwgJmkpOworICAgIH0gd2hpbGUgKHJjID09IFZJUlRRVUVVRV9S RUFEX0RFU0NfTU9SRSk7CisKKyAgICBpZiAocmMgPT0gVklSVFFVRVVFX1JFQURfREVTQ19FUlJP UikgeworICAgICAgICB2dV9wYW5pYyhkZXYsICJyZWFkIGRlc2NyaXB0b3IgZXJyb3IiKTsKKyAg ICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgLyogTm93IGNvcHkgd2hhdCB3ZSBoYXZl IGNvbGxlY3RlZCBhbmQgbWFwcGVkICovCisgICAgZWxlbSA9IHZpcnRxdWV1ZV9hbGxvY19lbGVt ZW50KHN6LCBvdXRfbnVtLCBpbl9udW0pOworICAgIGVsZW0tPmluZGV4ID0gaWR4OworICAgIGZv ciAoaSA9IDA7IGkgPCBvdXRfbnVtOyBpKyspIHsKKyAgICAgICAgZWxlbS0+b3V0X3NnW2ldID0g aW92W2ldOworICAgIH0KKyAgICBmb3IgKGkgPSAwOyBpIDwgaW5fbnVtOyBpKyspIHsKKyAgICAg ICAgZWxlbS0+aW5fc2dbaV0gPSBpb3Zbb3V0X251bSArIGldOworICAgIH0KKworICAgIHJldHVy biBlbGVtOworfQorCitzdGF0aWMgaW50Cit2dV9xdWV1ZV9pbmZsaWdodF9nZXQoVnVEZXYgKmRl diwgVnVWaXJ0cSAqdnEsIGludCBkZXNjX2lkeCkKK3sKKyAgICBpZiAoIXZ1X2hhc19wcm90b2Nv bF9mZWF0dXJlKGRldiwgVkhPU1RfVVNFUl9QUk9UT0NPTF9GX0lORkxJR0hUX1NITUZEKSkgewor ICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICBpZiAodW5saWtlbHkoIXZxLT5pbmZsaWdo dCkpIHsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKworICAgIHZxLT5pbmZsaWdodC0+ZGVz Y1tkZXNjX2lkeF0uY291bnRlciA9IHZxLT5jb3VudGVyKys7CisgICAgdnEtPmluZmxpZ2h0LT5k ZXNjW2Rlc2NfaWR4XS5pbmZsaWdodCA9IDE7CisKKyAgICByZXR1cm4gMDsKK30KKworc3RhdGlj IGludAordnVfcXVldWVfaW5mbGlnaHRfcHJlX3B1dChWdURldiAqZGV2LCBWdVZpcnRxICp2cSwg aW50IGRlc2NfaWR4KQoreworICAgIGlmICghdnVfaGFzX3Byb3RvY29sX2ZlYXR1cmUoZGV2LCBW SE9TVF9VU0VSX1BST1RPQ09MX0ZfSU5GTElHSFRfU0hNRkQpKSB7CisgICAgICAgIHJldHVybiAw OworICAgIH0KKworICAgIGlmICh1bmxpa2VseSghdnEtPmluZmxpZ2h0KSkgeworICAgICAgICBy ZXR1cm4gLTE7CisgICAgfQorCisgICAgdnEtPmluZmxpZ2h0LT5sYXN0X2JhdGNoX2hlYWQgPSBk ZXNjX2lkeDsKKworICAgIHJldHVybiAwOworfQorCitzdGF0aWMgaW50Cit2dV9xdWV1ZV9pbmZs aWdodF9wb3N0X3B1dChWdURldiAqZGV2LCBWdVZpcnRxICp2cSwgaW50IGRlc2NfaWR4KQorewor ICAgIGlmICghdnVfaGFzX3Byb3RvY29sX2ZlYXR1cmUoZGV2LCBWSE9TVF9VU0VSX1BST1RPQ09M X0ZfSU5GTElHSFRfU0hNRkQpKSB7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIGlm ICh1bmxpa2VseSghdnEtPmluZmxpZ2h0KSkgeworICAgICAgICByZXR1cm4gLTE7CisgICAgfQor CisgICAgYmFycmllcigpOworCisgICAgdnEtPmluZmxpZ2h0LT5kZXNjW2Rlc2NfaWR4XS5pbmZs aWdodCA9IDA7CisKKyAgICBiYXJyaWVyKCk7CisKKyAgICB2cS0+aW5mbGlnaHQtPnVzZWRfaWR4 ID0gdnEtPnVzZWRfaWR4OworCisgICAgcmV0dXJuIDA7Cit9CisKK3ZvaWQgKgordnVfcXVldWVf cG9wKFZ1RGV2ICpkZXYsIFZ1VmlydHEgKnZxLCBzaXplX3Qgc3opCit7CisgICAgaW50IGk7Cisg ICAgdW5zaWduZWQgaW50IGhlYWQ7CisgICAgVnVWaXJ0cUVsZW1lbnQgKmVsZW07CisKKyAgICBp ZiAodW5saWtlbHkoZGV2LT5icm9rZW4pIHx8CisgICAgICAgIHVubGlrZWx5KCF2cS0+dnJpbmcu YXZhaWwpKSB7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIGlmICh1bmxpa2Vs eSh2cS0+cmVzdWJtaXRfbGlzdCAmJiB2cS0+cmVzdWJtaXRfbnVtID4gMCkpIHsKKyAgICAgICAg aSA9ICgtLXZxLT5yZXN1Ym1pdF9udW0pOworICAgICAgICBlbGVtID0gdnVfcXVldWVfbWFwX2Rl c2MoZGV2LCB2cSwgdnEtPnJlc3VibWl0X2xpc3RbaV0uaW5kZXgsIHN6KTsKKworICAgICAgICBp ZiAoIXZxLT5yZXN1Ym1pdF9udW0pIHsKKyAgICAgICAgICAgIGZyZWUodnEtPnJlc3VibWl0X2xp c3QpOworICAgICAgICAgICAgdnEtPnJlc3VibWl0X2xpc3QgPSBOVUxMOworICAgICAgICB9CisK KyAgICAgICAgcmV0dXJuIGVsZW07CisgICAgfQorCisgICAgaWYgKHZ1X3F1ZXVlX2VtcHR5KGRl diwgdnEpKSB7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICAvKgorICAgICAqIE5l ZWRlZCBhZnRlciB2aXJ0aW9fcXVldWVfZW1wdHkoKSwgc2VlIGNvbW1lbnQgaW4KKyAgICAgKiB2 aXJ0cXVldWVfbnVtX2hlYWRzKCkuCisgICAgICovCisgICAgc21wX3JtYigpOworCisgICAgaWYg KHZxLT5pbnVzZSA+PSB2cS0+dnJpbmcubnVtKSB7CisgICAgICAgIHZ1X3BhbmljKGRldiwgIlZp cnRxdWV1ZSBzaXplIGV4Y2VlZGVkIik7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKwor ICAgIGlmICghdmlydHF1ZXVlX2dldF9oZWFkKGRldiwgdnEsIHZxLT5sYXN0X2F2YWlsX2lkeCsr LCAmaGVhZCkpIHsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgaWYgKHZ1X2hh c19mZWF0dXJlKGRldiwgVklSVElPX1JJTkdfRl9FVkVOVF9JRFgpKSB7CisgICAgICAgIHZyaW5n X3NldF9hdmFpbF9ldmVudCh2cSwgdnEtPmxhc3RfYXZhaWxfaWR4KTsKKyAgICB9CisKKyAgICBl bGVtID0gdnVfcXVldWVfbWFwX2Rlc2MoZGV2LCB2cSwgaGVhZCwgc3opOworCisgICAgaWYgKCFl bGVtKSB7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIHZxLT5pbnVzZSsrOwor CisgICAgdnVfcXVldWVfaW5mbGlnaHRfZ2V0KGRldiwgdnEsIGhlYWQpOworCisgICAgcmV0dXJu IGVsZW07Cit9CisKK3N0YXRpYyB2b2lkCit2dV9xdWV1ZV9kZXRhY2hfZWxlbWVudChWdURldiAq ZGV2LCBWdVZpcnRxICp2cSwgVnVWaXJ0cUVsZW1lbnQgKmVsZW0sCisgICAgICAgICAgICAgICAg ICAgICAgICBzaXplX3QgbGVuKQoreworICAgIHZxLT5pbnVzZS0tOworICAgIC8qIHVubWFwLCB3 aGVuIERNQSBzdXBwb3J0IGlzIGFkZGVkICovCit9CisKK3ZvaWQKK3Z1X3F1ZXVlX3VucG9wKFZ1 RGV2ICpkZXYsIFZ1VmlydHEgKnZxLCBWdVZpcnRxRWxlbWVudCAqZWxlbSwKKyAgICAgICAgICAg ICAgIHNpemVfdCBsZW4pCit7CisgICAgdnEtPmxhc3RfYXZhaWxfaWR4LS07CisgICAgdnVfcXVl dWVfZGV0YWNoX2VsZW1lbnQoZGV2LCB2cSwgZWxlbSwgbGVuKTsKK30KKworYm9vbAordnVfcXVl dWVfcmV3aW5kKFZ1RGV2ICpkZXYsIFZ1VmlydHEgKnZxLCB1bnNpZ25lZCBpbnQgbnVtKQorewor ICAgIGlmIChudW0gPiB2cS0+aW51c2UpIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0K KyAgICB2cS0+bGFzdF9hdmFpbF9pZHggLT0gbnVtOworICAgIHZxLT5pbnVzZSAtPSBudW07Cisg ICAgcmV0dXJuIHRydWU7Cit9CisKK3N0YXRpYyBpbmxpbmUKK3ZvaWQgdnJpbmdfdXNlZF93cml0 ZShWdURldiAqZGV2LCBWdVZpcnRxICp2cSwKKyAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qg dnJpbmdfdXNlZF9lbGVtICp1ZWxlbSwgaW50IGkpCit7CisgICAgc3RydWN0IHZyaW5nX3VzZWQg KnVzZWQgPSB2cS0+dnJpbmcudXNlZDsKKworICAgIHVzZWQtPnJpbmdbaV0gPSAqdWVsZW07Cisg ICAgdnVfbG9nX3dyaXRlKGRldiwgdnEtPnZyaW5nLmxvZ19ndWVzdF9hZGRyICsKKyAgICAgICAg ICAgICAgICAgb2Zmc2V0b2Yoc3RydWN0IHZyaW5nX3VzZWQsIHJpbmdbaV0pLAorICAgICAgICAg ICAgICAgICBzaXplb2YodXNlZC0+cmluZ1tpXSkpOworfQorCisKK3N0YXRpYyB2b2lkCit2dV9s b2dfcXVldWVfZmlsbChWdURldiAqZGV2LCBWdVZpcnRxICp2cSwKKyAgICAgICAgICAgICAgICAg IGNvbnN0IFZ1VmlydHFFbGVtZW50ICplbGVtLAorICAgICAgICAgICAgICAgICAgdW5zaWduZWQg aW50IGxlbikKK3sKKyAgICBzdHJ1Y3QgdnJpbmdfZGVzYyAqZGVzYyA9IHZxLT52cmluZy5kZXNj OworICAgIHVuc2lnbmVkIGludCBpLCBtYXgsIG1pbiwgZGVzY19sZW47CisgICAgdWludDY0X3Qg ZGVzY19hZGRyLCByZWFkX2xlbjsKKyAgICBzdHJ1Y3QgdnJpbmdfZGVzYyBkZXNjX2J1ZltWSVJU UVVFVUVfTUFYX1NJWkVdOworICAgIHVuc2lnbmVkIG51bV9idWZzID0gMDsKKworICAgIG1heCA9 IHZxLT52cmluZy5udW07CisgICAgaSA9IGVsZW0tPmluZGV4OworCisgICAgaWYgKGxlMTZ0b2go ZGVzY1tpXS5mbGFncykgJiBWUklOR19ERVNDX0ZfSU5ESVJFQ1QpIHsKKyAgICAgICAgaWYgKGxl MzJ0b2goZGVzY1tpXS5sZW4pICUgc2l6ZW9mKHN0cnVjdCB2cmluZ19kZXNjKSkgeworICAgICAg ICAgICAgdnVfcGFuaWMoZGV2LCAiSW52YWxpZCBzaXplIGZvciBpbmRpcmVjdCBidWZmZXIgdGFi bGUiKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIC8qIGxvb3Ag b3ZlciB0aGUgaW5kaXJlY3QgZGVzY3JpcHRvciB0YWJsZSAqLworICAgICAgICBkZXNjX2FkZHIg PSBsZTY0dG9oKGRlc2NbaV0uYWRkcik7CisgICAgICAgIGRlc2NfbGVuID0gbGUzMnRvaChkZXNj W2ldLmxlbik7CisgICAgICAgIG1heCA9IGRlc2NfbGVuIC8gc2l6ZW9mKHN0cnVjdCB2cmluZ19k ZXNjKTsKKyAgICAgICAgcmVhZF9sZW4gPSBkZXNjX2xlbjsKKyAgICAgICAgZGVzYyA9IHZ1X2dw YV90b192YShkZXYsICZyZWFkX2xlbiwgZGVzY19hZGRyKTsKKyAgICAgICAgaWYgKHVubGlrZWx5 KGRlc2MgJiYgcmVhZF9sZW4gIT0gZGVzY19sZW4pKSB7CisgICAgICAgICAgICAvKiBGYWlsZWQg dG8gdXNlIHplcm8gY29weSAqLworICAgICAgICAgICAgZGVzYyA9IE5VTEw7CisgICAgICAgICAg ICBpZiAoIXZpcnRxdWV1ZV9yZWFkX2luZGlyZWN0X2Rlc2MoZGV2LCBkZXNjX2J1ZiwKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXNjX2FkZHIsCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzY19sZW4pKSB7Cisg ICAgICAgICAgICAgICAgZGVzYyA9IGRlc2NfYnVmOworICAgICAgICAgICAgfQorICAgICAgICB9 CisgICAgICAgIGlmICghZGVzYykgeworICAgICAgICAgICAgdnVfcGFuaWMoZGV2LCAiSW52YWxp ZCBpbmRpcmVjdCBidWZmZXIgdGFibGUiKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg fQorICAgICAgICBpID0gMDsKKyAgICB9CisKKyAgICBkbyB7CisgICAgICAgIGlmICgrK251bV9i dWZzID4gbWF4KSB7CisgICAgICAgICAgICB2dV9wYW5pYyhkZXYsICJMb29wZWQgZGVzY3JpcHRv ciIpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGxlMTZ0 b2goZGVzY1tpXS5mbGFncykgJiBWUklOR19ERVNDX0ZfV1JJVEUpIHsKKyAgICAgICAgICAgIG1p biA9IE1JTihsZTMydG9oKGRlc2NbaV0ubGVuKSwgbGVuKTsKKyAgICAgICAgICAgIHZ1X2xvZ193 cml0ZShkZXYsIGxlNjR0b2goZGVzY1tpXS5hZGRyKSwgbWluKTsKKyAgICAgICAgICAgIGxlbiAt PSBtaW47CisgICAgICAgIH0KKworICAgIH0gd2hpbGUgKGxlbiA+IDAgJiYKKyAgICAgICAgICAg ICAodmlydHF1ZXVlX3JlYWRfbmV4dF9kZXNjKGRldiwgZGVzYywgaSwgbWF4LCAmaSkKKyAgICAg ICAgICAgICAgPT0gVklSVFFVRVVFX1JFQURfREVTQ19NT1JFKSk7Cit9CisKK3ZvaWQKK3Z1X3F1 ZXVlX2ZpbGwoVnVEZXYgKmRldiwgVnVWaXJ0cSAqdnEsCisgICAgICAgICAgICAgIGNvbnN0IFZ1 VmlydHFFbGVtZW50ICplbGVtLAorICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgbGVuLCB1bnNp Z25lZCBpbnQgaWR4KQoreworICAgIHN0cnVjdCB2cmluZ191c2VkX2VsZW0gdWVsZW07CisKKyAg ICBpZiAodW5saWtlbHkoZGV2LT5icm9rZW4pIHx8CisgICAgICAgIHVubGlrZWx5KCF2cS0+dnJp bmcuYXZhaWwpKSB7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICB2dV9sb2dfcXVldWVf ZmlsbChkZXYsIHZxLCBlbGVtLCBsZW4pOworCisgICAgaWR4ID0gKGlkeCArIHZxLT51c2VkX2lk eCkgJSB2cS0+dnJpbmcubnVtOworCisgICAgdWVsZW0uaWQgPSBodG9sZTMyKGVsZW0tPmluZGV4 KTsKKyAgICB1ZWxlbS5sZW4gPSBodG9sZTMyKGxlbik7CisgICAgdnJpbmdfdXNlZF93cml0ZShk ZXYsIHZxLCAmdWVsZW0sIGlkeCk7Cit9CisKK3N0YXRpYyBpbmxpbmUKK3ZvaWQgdnJpbmdfdXNl ZF9pZHhfc2V0KFZ1RGV2ICpkZXYsIFZ1VmlydHEgKnZxLCB1aW50MTZfdCB2YWwpCit7CisgICAg dnEtPnZyaW5nLnVzZWQtPmlkeCA9IGh0b2xlMTYodmFsKTsKKyAgICB2dV9sb2dfd3JpdGUoZGV2 LAorICAgICAgICAgICAgICAgICB2cS0+dnJpbmcubG9nX2d1ZXN0X2FkZHIgKyBvZmZzZXRvZihz dHJ1Y3QgdnJpbmdfdXNlZCwgaWR4KSwKKyAgICAgICAgICAgICAgICAgc2l6ZW9mKHZxLT52cmlu Zy51c2VkLT5pZHgpKTsKKworICAgIHZxLT51c2VkX2lkeCA9IHZhbDsKK30KKwordm9pZAordnVf cXVldWVfZmx1c2goVnVEZXYgKmRldiwgVnVWaXJ0cSAqdnEsIHVuc2lnbmVkIGludCBjb3VudCkK K3sKKyAgICB1aW50MTZfdCBvbGQsIG5ldzsKKworICAgIGlmICh1bmxpa2VseShkZXYtPmJyb2tl bikgfHwKKyAgICAgICAgdW5saWtlbHkoIXZxLT52cmluZy5hdmFpbCkpIHsKKyAgICAgICAgcmV0 dXJuOworICAgIH0KKworICAgIC8qIE1ha2Ugc3VyZSBidWZmZXIgaXMgd3JpdHRlbiBiZWZvcmUg d2UgdXBkYXRlIGluZGV4LiAqLworICAgIHNtcF93bWIoKTsKKworICAgIG9sZCA9IHZxLT51c2Vk X2lkeDsKKyAgICBuZXcgPSBvbGQgKyBjb3VudDsKKyAgICB2cmluZ191c2VkX2lkeF9zZXQoZGV2 LCB2cSwgbmV3KTsKKyAgICB2cS0+aW51c2UgLT0gY291bnQ7CisgICAgaWYgKHVubGlrZWx5KChp bnQxNl90KShuZXcgLSB2cS0+c2lnbmFsbGVkX3VzZWQpIDwgKHVpbnQxNl90KShuZXcgLSBvbGQp KSkgeworICAgICAgICB2cS0+c2lnbmFsbGVkX3VzZWRfdmFsaWQgPSBmYWxzZTsKKyAgICB9Cit9 CisKK3ZvaWQKK3Z1X3F1ZXVlX3B1c2goVnVEZXYgKmRldiwgVnVWaXJ0cSAqdnEsCisgICAgICAg ICAgICAgIGNvbnN0IFZ1VmlydHFFbGVtZW50ICplbGVtLCB1bnNpZ25lZCBpbnQgbGVuKQorewor ICAgIHZ1X3F1ZXVlX2ZpbGwoZGV2LCB2cSwgZWxlbSwgbGVuLCAwKTsKKyAgICB2dV9xdWV1ZV9p bmZsaWdodF9wcmVfcHV0KGRldiwgdnEsIGVsZW0tPmluZGV4KTsKKyAgICB2dV9xdWV1ZV9mbHVz aChkZXYsIHZxLCAxKTsKKyAgICB2dV9xdWV1ZV9pbmZsaWdodF9wb3N0X3B1dChkZXYsIHZxLCBl bGVtLT5pbmRleCk7Cit9CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3JvYWR0ZXN0L3NyYy9s aWJ2aG9zdC11c2VyL2xpYnZob3N0LXVzZXIuaCBiL3Rvb2xzL3Rlc3Rpbmcvcm9hZHRlc3Qvc3Jj L2xpYnZob3N0LXVzZXIvbGlidmhvc3QtdXNlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4 IDAwMDAwMDAwMDAwMC4uNjkxZTBiYzA1MWMxCi0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvdGVz dGluZy9yb2FkdGVzdC9zcmMvbGlidmhvc3QtdXNlci9saWJ2aG9zdC11c2VyLmgKQEAgLTAsMCAr MSw2OTEgQEAKKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9yLWxhdGVyCisv KgorICogVmhvc3QgVXNlciBsaWJyYXJ5CisgKgorICogQ29weXJpZ2h0IChjKSAyMDE2IFJlZCBI YXQsIEluYy4KKyAqCisgKiBBdXRob3JzOgorICogIFZpY3RvciBLYXBsYW5za3kgPHZpY3RvcmtA cmVkaGF0LmNvbT4KKyAqICBNYXJjLUFuZHLDqSBMdXJlYXUgPG1sdXJlYXVAcmVkaGF0LmNvbT4K KyAqCisgKiBUaGlzIHdvcmsgaXMgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg R1BMLCB2ZXJzaW9uIDIgb3IKKyAqIGxhdGVyLiAgU2VlIHRoZSBDT1BZSU5HIGZpbGUgaW4gdGhl IHRvcC1sZXZlbCBkaXJlY3RvcnkuCisgKi8KKworI2lmbmRlZiBMSUJWSE9TVF9VU0VSX0gKKyNk ZWZpbmUgTElCVkhPU1RfVVNFUl9ICisKKyNpbmNsdWRlIDxzdGRpbnQuaD4KKyNpbmNsdWRlIDxz dGRib29sLmg+CisjaW5jbHVkZSA8c3RkZGVmLmg+CisjaW5jbHVkZSA8cG9sbC5oPgorI2luY2x1 ZGUgPGxpbnV4L3Zob3N0Lmg+CisjaW5jbHVkZSA8cHRocmVhZC5oPgorI2luY2x1ZGUgPGxpbnV4 L3ZpcnRpb19yaW5nLmg+CisKKy8qIEJhc2VkIG9uIHFlbXUvaHcvdmlydGlvL3Zob3N0LXVzZXIu YyAqLworI2RlZmluZSBWSE9TVF9VU0VSX0ZfUFJPVE9DT0xfRkVBVFVSRVMgMzAKKyNkZWZpbmUg VkhPU1RfTE9HX1BBR0UgNDA5NgorCisjZGVmaW5lIFZJUlRRVUVVRV9NQVhfU0laRSAxMDI0CisK KyNkZWZpbmUgVkhPU1RfTUVNT1JZX0JBU0VMSU5FX05SRUdJT05TIDgKKworLyoKKyAqIFNldCBh IHJlYXNvbmFibGUgbWF4aW11bSBudW1iZXIgb2YgcmFtIHNsb3RzLCB3aGljaCB3aWxsIGJlIHN1 cHBvcnRlZCBieQorICogYW55IGFyY2hpdGVjdHVyZS4KKyAqLworI2RlZmluZSBWSE9TVF9VU0VS X01BWF9SQU1fU0xPVFMgMzIKKworI2RlZmluZSBWSE9TVF9VU0VSX0hEUl9TSVpFIG9mZnNldG9m KFZob3N0VXNlck1zZywgcGF5bG9hZC51NjQpCisKK3R5cGVkZWYgZW51bSBWaG9zdFNldENvbmZp Z1R5cGUgeworICAgIFZIT1NUX1NFVF9DT05GSUdfVFlQRV9NQVNURVIgPSAwLAorICAgIFZIT1NU X1NFVF9DT05GSUdfVFlQRV9NSUdSQVRJT04gPSAxLAorfSBWaG9zdFNldENvbmZpZ1R5cGU7CisK Ky8qCisgKiBNYXhpbXVtIHNpemUgb2YgdmlydGlvIGRldmljZSBjb25maWcgc3BhY2UKKyAqLwor I2RlZmluZSBWSE9TVF9VU0VSX01BWF9DT05GSUdfU0laRSAyNTYKKworZW51bSBWaG9zdFVzZXJQ cm90b2NvbEZlYXR1cmUgeworICAgIFZIT1NUX1VTRVJfUFJPVE9DT0xfRl9NUSA9IDAsCisgICAg VkhPU1RfVVNFUl9QUk9UT0NPTF9GX0xPR19TSE1GRCA9IDEsCisgICAgVkhPU1RfVVNFUl9QUk9U T0NPTF9GX1JBUlAgPSAyLAorICAgIFZIT1NUX1VTRVJfUFJPVE9DT0xfRl9SRVBMWV9BQ0sgPSAz LAorICAgIFZIT1NUX1VTRVJfUFJPVE9DT0xfRl9ORVRfTVRVID0gNCwKKyAgICBWSE9TVF9VU0VS X1BST1RPQ09MX0ZfU0xBVkVfUkVRID0gNSwKKyAgICBWSE9TVF9VU0VSX1BST1RPQ09MX0ZfQ1JP U1NfRU5ESUFOID0gNiwKKyAgICBWSE9TVF9VU0VSX1BST1RPQ09MX0ZfQ1JZUFRPX1NFU1NJT04g PSA3LAorICAgIFZIT1NUX1VTRVJfUFJPVE9DT0xfRl9QQUdFRkFVTFQgPSA4LAorICAgIFZIT1NU X1VTRVJfUFJPVE9DT0xfRl9DT05GSUcgPSA5LAorICAgIFZIT1NUX1VTRVJfUFJPVE9DT0xfRl9T TEFWRV9TRU5EX0ZEID0gMTAsCisgICAgVkhPU1RfVVNFUl9QUk9UT0NPTF9GX0hPU1RfTk9USUZJ RVIgPSAxMSwKKyAgICBWSE9TVF9VU0VSX1BST1RPQ09MX0ZfSU5GTElHSFRfU0hNRkQgPSAxMiwK KyAgICBWSE9TVF9VU0VSX1BST1RPQ09MX0ZfSU5CQU5EX05PVElGSUNBVElPTlMgPSAxNCwKKyAg ICBWSE9TVF9VU0VSX1BST1RPQ09MX0ZfQ09ORklHVVJFX01FTV9TTE9UUyA9IDE1LAorCisgICAg VkhPU1RfVVNFUl9QUk9UT0NPTF9GX01BWAorfTsKKworI2RlZmluZSBWSE9TVF9VU0VSX1BST1RP Q09MX0ZFQVRVUkVfTUFTSyAoKDEgPDwgVkhPU1RfVVNFUl9QUk9UT0NPTF9GX01BWCkgLSAxKQor Cit0eXBlZGVmIGVudW0gVmhvc3RVc2VyUmVxdWVzdCB7CisgICAgVkhPU1RfVVNFUl9OT05FID0g MCwKKyAgICBWSE9TVF9VU0VSX0dFVF9GRUFUVVJFUyA9IDEsCisgICAgVkhPU1RfVVNFUl9TRVRf RkVBVFVSRVMgPSAyLAorICAgIFZIT1NUX1VTRVJfU0VUX09XTkVSID0gMywKKyAgICBWSE9TVF9V U0VSX1JFU0VUX09XTkVSID0gNCwKKyAgICBWSE9TVF9VU0VSX1NFVF9NRU1fVEFCTEUgPSA1LAor ICAgIFZIT1NUX1VTRVJfU0VUX0xPR19CQVNFID0gNiwKKyAgICBWSE9TVF9VU0VSX1NFVF9MT0df RkQgPSA3LAorICAgIFZIT1NUX1VTRVJfU0VUX1ZSSU5HX05VTSA9IDgsCisgICAgVkhPU1RfVVNF Ul9TRVRfVlJJTkdfQUREUiA9IDksCisgICAgVkhPU1RfVVNFUl9TRVRfVlJJTkdfQkFTRSA9IDEw LAorICAgIFZIT1NUX1VTRVJfR0VUX1ZSSU5HX0JBU0UgPSAxMSwKKyAgICBWSE9TVF9VU0VSX1NF VF9WUklOR19LSUNLID0gMTIsCisgICAgVkhPU1RfVVNFUl9TRVRfVlJJTkdfQ0FMTCA9IDEzLAor ICAgIFZIT1NUX1VTRVJfU0VUX1ZSSU5HX0VSUiA9IDE0LAorICAgIFZIT1NUX1VTRVJfR0VUX1BS T1RPQ09MX0ZFQVRVUkVTID0gMTUsCisgICAgVkhPU1RfVVNFUl9TRVRfUFJPVE9DT0xfRkVBVFVS RVMgPSAxNiwKKyAgICBWSE9TVF9VU0VSX0dFVF9RVUVVRV9OVU0gPSAxNywKKyAgICBWSE9TVF9V U0VSX1NFVF9WUklOR19FTkFCTEUgPSAxOCwKKyAgICBWSE9TVF9VU0VSX1NFTkRfUkFSUCA9IDE5 LAorICAgIFZIT1NUX1VTRVJfTkVUX1NFVF9NVFUgPSAyMCwKKyAgICBWSE9TVF9VU0VSX1NFVF9T TEFWRV9SRVFfRkQgPSAyMSwKKyAgICBWSE9TVF9VU0VSX0lPVExCX01TRyA9IDIyLAorICAgIFZI T1NUX1VTRVJfU0VUX1ZSSU5HX0VORElBTiA9IDIzLAorICAgIFZIT1NUX1VTRVJfR0VUX0NPTkZJ RyA9IDI0LAorICAgIFZIT1NUX1VTRVJfU0VUX0NPTkZJRyA9IDI1LAorICAgIFZIT1NUX1VTRVJf Q1JFQVRFX0NSWVBUT19TRVNTSU9OID0gMjYsCisgICAgVkhPU1RfVVNFUl9DTE9TRV9DUllQVE9f U0VTU0lPTiA9IDI3LAorICAgIFZIT1NUX1VTRVJfUE9TVENPUFlfQURWSVNFICA9IDI4LAorICAg IFZIT1NUX1VTRVJfUE9TVENPUFlfTElTVEVOICA9IDI5LAorICAgIFZIT1NUX1VTRVJfUE9TVENP UFlfRU5EICAgICA9IDMwLAorICAgIFZIT1NUX1VTRVJfR0VUX0lORkxJR0hUX0ZEID0gMzEsCisg ICAgVkhPU1RfVVNFUl9TRVRfSU5GTElHSFRfRkQgPSAzMiwKKyAgICBWSE9TVF9VU0VSX0dQVV9T RVRfU09DS0VUID0gMzMsCisgICAgVkhPU1RfVVNFUl9WUklOR19LSUNLID0gMzUsCisgICAgVkhP U1RfVVNFUl9HRVRfTUFYX01FTV9TTE9UUyA9IDM2LAorICAgIFZIT1NUX1VTRVJfQUREX01FTV9S RUcgPSAzNywKKyAgICBWSE9TVF9VU0VSX1JFTV9NRU1fUkVHID0gMzgsCisgICAgVkhPU1RfVVNF Ul9NQVgKK30gVmhvc3RVc2VyUmVxdWVzdDsKKwordHlwZWRlZiBlbnVtIFZob3N0VXNlclNsYXZl UmVxdWVzdCB7CisgICAgVkhPU1RfVVNFUl9TTEFWRV9OT05FID0gMCwKKyAgICBWSE9TVF9VU0VS X1NMQVZFX0lPVExCX01TRyA9IDEsCisgICAgVkhPU1RfVVNFUl9TTEFWRV9DT05GSUdfQ0hBTkdF X01TRyA9IDIsCisgICAgVkhPU1RfVVNFUl9TTEFWRV9WUklOR19IT1NUX05PVElGSUVSX01TRyA9 IDMsCisgICAgVkhPU1RfVVNFUl9TTEFWRV9WUklOR19DQUxMID0gNCwKKyAgICBWSE9TVF9VU0VS X1NMQVZFX1ZSSU5HX0VSUiA9IDUsCisgICAgVkhPU1RfVVNFUl9TTEFWRV9NQVgKK30gIFZob3N0 VXNlclNsYXZlUmVxdWVzdDsKKwordHlwZWRlZiBzdHJ1Y3QgVmhvc3RVc2VyTWVtb3J5UmVnaW9u IHsKKyAgICB1aW50NjRfdCBndWVzdF9waHlzX2FkZHI7CisgICAgdWludDY0X3QgbWVtb3J5X3Np emU7CisgICAgdWludDY0X3QgdXNlcnNwYWNlX2FkZHI7CisgICAgdWludDY0X3QgbW1hcF9vZmZz ZXQ7Cit9IFZob3N0VXNlck1lbW9yeVJlZ2lvbjsKKwordHlwZWRlZiBzdHJ1Y3QgVmhvc3RVc2Vy TWVtb3J5IHsKKyAgICB1aW50MzJfdCBucmVnaW9uczsKKyAgICB1aW50MzJfdCBwYWRkaW5nOwor ICAgIFZob3N0VXNlck1lbW9yeVJlZ2lvbiByZWdpb25zW1ZIT1NUX01FTU9SWV9CQVNFTElORV9O UkVHSU9OU107Cit9IFZob3N0VXNlck1lbW9yeTsKKwordHlwZWRlZiBzdHJ1Y3QgVmhvc3RVc2Vy TWVtUmVnTXNnIHsKKyAgICB1aW50NjRfdCBwYWRkaW5nOworICAgIFZob3N0VXNlck1lbW9yeVJl Z2lvbiByZWdpb247Cit9IFZob3N0VXNlck1lbVJlZ01zZzsKKwordHlwZWRlZiBzdHJ1Y3QgVmhv c3RVc2VyTG9nIHsKKyAgICB1aW50NjRfdCBtbWFwX3NpemU7CisgICAgdWludDY0X3QgbW1hcF9v ZmZzZXQ7Cit9IFZob3N0VXNlckxvZzsKKwordHlwZWRlZiBzdHJ1Y3QgVmhvc3RVc2VyQ29uZmln IHsKKyAgICB1aW50MzJfdCBvZmZzZXQ7CisgICAgdWludDMyX3Qgc2l6ZTsKKyAgICB1aW50MzJf dCBmbGFnczsKKyAgICB1aW50OF90IHJlZ2lvbltWSE9TVF9VU0VSX01BWF9DT05GSUdfU0laRV07 Cit9IFZob3N0VXNlckNvbmZpZzsKKworc3RhdGljIFZob3N0VXNlckNvbmZpZyBjIF9fYXR0cmli dXRlX18gKCh1bnVzZWQpKTsKKyNkZWZpbmUgVkhPU1RfVVNFUl9DT05GSUdfSERSX1NJWkUgKHNp emVvZihjLm9mZnNldCkgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIHNp emVvZihjLnNpemUpIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBzaXpl b2YoYy5mbGFncykpCisKK3R5cGVkZWYgc3RydWN0IFZob3N0VXNlclZyaW5nQXJlYSB7CisgICAg dWludDY0X3QgdTY0OworICAgIHVpbnQ2NF90IHNpemU7CisgICAgdWludDY0X3Qgb2Zmc2V0Owor fSBWaG9zdFVzZXJWcmluZ0FyZWE7CisKK3R5cGVkZWYgc3RydWN0IFZob3N0VXNlckluZmxpZ2h0 IHsKKyAgICB1aW50NjRfdCBtbWFwX3NpemU7CisgICAgdWludDY0X3QgbW1hcF9vZmZzZXQ7Cisg ICAgdWludDE2X3QgbnVtX3F1ZXVlczsKKyAgICB1aW50MTZfdCBxdWV1ZV9zaXplOworfSBWaG9z dFVzZXJJbmZsaWdodDsKKworI2lmIGRlZmluZWQoX1dJTjMyKSAmJiAoZGVmaW5lZChfX3g4Nl82 NF9fKSB8fCBkZWZpbmVkKF9faTM4Nl9fKSkKKyMgZGVmaW5lIFZVX1BBQ0tFRCBfX2F0dHJpYnV0 ZV9fKChnY2Nfc3RydWN0LCBwYWNrZWQpKQorI2Vsc2UKKyMgZGVmaW5lIFZVX1BBQ0tFRCBfX2F0 dHJpYnV0ZV9fKChwYWNrZWQpKQorI2VuZGlmCisKK3R5cGVkZWYgc3RydWN0IFZob3N0VXNlck1z ZyB7CisgICAgaW50IHJlcXVlc3Q7CisKKyNkZWZpbmUgVkhPU1RfVVNFUl9WRVJTSU9OX01BU0sg ICAgICgweDMpCisjZGVmaW5lIFZIT1NUX1VTRVJfUkVQTFlfTUFTSyAgICAgICAoMHgxIDw8IDIp CisjZGVmaW5lIFZIT1NUX1VTRVJfTkVFRF9SRVBMWV9NQVNLICAoMHgxIDw8IDMpCisgICAgdWlu dDMyX3QgZmxhZ3M7CisgICAgdWludDMyX3Qgc2l6ZTsgLyogdGhlIGZvbGxvd2luZyBwYXlsb2Fk IHNpemUgKi8KKworICAgIHVuaW9uIHsKKyNkZWZpbmUgVkhPU1RfVVNFUl9WUklOR19JRFhfTUFT SyAgICgweGZmKQorI2RlZmluZSBWSE9TVF9VU0VSX1ZSSU5HX05PRkRfTUFTSyAgKDB4MSA8PCA4 KQorICAgICAgICB1aW50NjRfdCB1NjQ7CisgICAgICAgIHN0cnVjdCB2aG9zdF92cmluZ19zdGF0 ZSBzdGF0ZTsKKyAgICAgICAgc3RydWN0IHZob3N0X3ZyaW5nX2FkZHIgYWRkcjsKKyAgICAgICAg Vmhvc3RVc2VyTWVtb3J5IG1lbW9yeTsKKyAgICAgICAgVmhvc3RVc2VyTWVtUmVnTXNnIG1lbXJl ZzsKKyAgICAgICAgVmhvc3RVc2VyTG9nIGxvZzsKKyAgICAgICAgVmhvc3RVc2VyQ29uZmlnIGNv bmZpZzsKKyAgICAgICAgVmhvc3RVc2VyVnJpbmdBcmVhIGFyZWE7CisgICAgICAgIFZob3N0VXNl ckluZmxpZ2h0IGluZmxpZ2h0OworICAgIH0gcGF5bG9hZDsKKworICAgIGludCBmZHNbVkhPU1Rf TUVNT1JZX0JBU0VMSU5FX05SRUdJT05TXTsKKyAgICBpbnQgZmRfbnVtOworICAgIHVpbnQ4X3Qg KmRhdGE7Cit9IFZVX1BBQ0tFRCBWaG9zdFVzZXJNc2c7CisKK3R5cGVkZWYgc3RydWN0IFZ1RGV2 UmVnaW9uIHsKKyAgICAvKiBHdWVzdCBQaHlzaWNhbCBhZGRyZXNzLiAqLworICAgIHVpbnQ2NF90 IGdwYTsKKyAgICAvKiBNZW1vcnkgcmVnaW9uIHNpemUuICovCisgICAgdWludDY0X3Qgc2l6ZTsK KyAgICAvKiBRRU1VIHZpcnR1YWwgYWRkcmVzcyAodXNlcnNwYWNlKS4gKi8KKyAgICB1aW50NjRf dCBxdmE7CisgICAgLyogU3RhcnRpbmcgb2Zmc2V0IGluIG91ciBtbWFwZWQgc3BhY2UuICovCisg ICAgdWludDY0X3QgbW1hcF9vZmZzZXQ7CisgICAgLyogU3RhcnQgYWRkcmVzcyBvZiBtbWFwZWQg c3BhY2UuICovCisgICAgdWludDY0X3QgbW1hcF9hZGRyOworfSBWdURldlJlZ2lvbjsKKwordHlw ZWRlZiBzdHJ1Y3QgVnVEZXYgVnVEZXY7CisKK3R5cGVkZWYgdWludDY0X3QgKCp2dV9nZXRfZmVh dHVyZXNfY2IpIChWdURldiAqZGV2KTsKK3R5cGVkZWYgdm9pZCAoKnZ1X3NldF9mZWF0dXJlc19j YikgKFZ1RGV2ICpkZXYsIHVpbnQ2NF90IGZlYXR1cmVzKTsKK3R5cGVkZWYgaW50ICgqdnVfcHJv Y2Vzc19tc2dfY2IpIChWdURldiAqZGV2LCBWaG9zdFVzZXJNc2cgKnZtc2csCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgaW50ICpkb19yZXBseSk7Cit0eXBlZGVmIGJvb2wgKCp2 dV9yZWFkX21zZ19jYikgKFZ1RGV2ICpkZXYsIGludCBzb2NrLCBWaG9zdFVzZXJNc2cgKnZtc2cp OwordHlwZWRlZiB2b2lkICgqdnVfcXVldWVfc2V0X3N0YXJ0ZWRfY2IpIChWdURldiAqZGV2LCBp bnQgcWlkeCwgYm9vbCBzdGFydGVkKTsKK3R5cGVkZWYgYm9vbCAoKnZ1X3F1ZXVlX2lzX3Byb2Nl c3NlZF9pbl9vcmRlcl9jYikgKFZ1RGV2ICpkZXYsIGludCBxaWR4KTsKK3R5cGVkZWYgaW50ICgq dnVfZ2V0X2NvbmZpZ19jYikgKFZ1RGV2ICpkZXYsIHVpbnQ4X3QgKmNvbmZpZywgdWludDMyX3Qg bGVuKTsKK3R5cGVkZWYgaW50ICgqdnVfc2V0X2NvbmZpZ19jYikgKFZ1RGV2ICpkZXYsIGNvbnN0 IHVpbnQ4X3QgKmRhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJf dCBvZmZzZXQsIHVpbnQzMl90IHNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICB1aW50MzJfdCBmbGFncyk7CisKK3R5cGVkZWYgc3RydWN0IFZ1RGV2SWZhY2UgeworICAgIC8q IGNhbGxlZCBieSBWSE9TVF9VU0VSX0dFVF9GRUFUVVJFUyB0byBnZXQgdGhlIGZlYXR1cmVzIGJp dG1hc2sgKi8KKyAgICB2dV9nZXRfZmVhdHVyZXNfY2IgZ2V0X2ZlYXR1cmVzOworICAgIC8qIGVu YWJsZSB2aG9zdCBpbXBsZW1lbnRhdGlvbiBmZWF0dXJlcyAqLworICAgIHZ1X3NldF9mZWF0dXJl c19jYiBzZXRfZmVhdHVyZXM7CisgICAgLyogZ2V0IHRoZSBwcm90b2NvbCBmZWF0dXJlIGJpdG1h c2sgZnJvbSB0aGUgdW5kZXJseWluZyB2aG9zdAorICAgICAqIGltcGxlbWVudGF0aW9uICovCisg ICAgdnVfZ2V0X2ZlYXR1cmVzX2NiIGdldF9wcm90b2NvbF9mZWF0dXJlczsKKyAgICAvKiBlbmFi bGUgcHJvdG9jb2wgZmVhdHVyZXMgaW4gdGhlIHVuZGVybHlpbmcgdmhvc3QgaW1wbGVtZW50YXRp b24uICovCisgICAgdnVfc2V0X2ZlYXR1cmVzX2NiIHNldF9wcm90b2NvbF9mZWF0dXJlczsKKyAg ICAvKiBwcm9jZXNzX21zZyBpcyBjYWxsZWQgZm9yIGVhY2ggdmhvc3QtdXNlciBtZXNzYWdlIHJl Y2VpdmVkICovCisgICAgLyogc2tpcCBsaWJ2aG9zdC11c2VyIHByb2Nlc3NpbmcgaWYgcmV0dXJu IHZhbHVlICE9IDAgKi8KKyAgICB2dV9wcm9jZXNzX21zZ19jYiBwcm9jZXNzX21zZzsKKyAgICAv KiB0ZWxscyB3aGVuIHF1ZXVlcyBjYW4gYmUgcHJvY2Vzc2VkICovCisgICAgdnVfcXVldWVfc2V0 X3N0YXJ0ZWRfY2IgcXVldWVfc2V0X3N0YXJ0ZWQ7CisgICAgLyoKKyAgICAgKiBJZiB0aGUgcXVl dWUgaXMgcHJvY2Vzc2VkIGluIG9yZGVyLCBpbiB3aGljaCBjYXNlIGl0IHdpbGwgYmUKKyAgICAg KiByZXN1bWVkIHRvIHZyaW5nLnVzZWQtPmlkeC4gVGhpcyBjYW4gaGVscCB0byBzdXBwb3J0IHJl c3VtaW5nCisgICAgICogb24gdW5tYW5hZ2VkIGV4aXQvY3Jhc2guCisgICAgICovCisgICAgdnVf cXVldWVfaXNfcHJvY2Vzc2VkX2luX29yZGVyX2NiIHF1ZXVlX2lzX3Byb2Nlc3NlZF9pbl9vcmRl cjsKKyAgICAvKiBnZXQgdGhlIGNvbmZpZyBzcGFjZSBvZiB0aGUgZGV2aWNlICovCisgICAgdnVf Z2V0X2NvbmZpZ19jYiBnZXRfY29uZmlnOworICAgIC8qIHNldCB0aGUgY29uZmlnIHNwYWNlIG9m IHRoZSBkZXZpY2UgKi8KKyAgICB2dV9zZXRfY29uZmlnX2NiIHNldF9jb25maWc7Cit9IFZ1RGV2 SWZhY2U7CisKK3R5cGVkZWYgdm9pZCAoKnZ1X3F1ZXVlX2hhbmRsZXJfY2IpIChWdURldiAqZGV2 LCBpbnQgcWlkeCk7CisKK3R5cGVkZWYgc3RydWN0IFZ1UmluZyB7CisgICAgdW5zaWduZWQgaW50 IG51bTsKKyAgICBzdHJ1Y3QgdnJpbmdfZGVzYyAqZGVzYzsKKyAgICBzdHJ1Y3QgdnJpbmdfYXZh aWwgKmF2YWlsOworICAgIHN0cnVjdCB2cmluZ191c2VkICp1c2VkOworICAgIHVpbnQ2NF90IGxv Z19ndWVzdF9hZGRyOworICAgIHVpbnQzMl90IGZsYWdzOworfSBWdVJpbmc7CisKK3R5cGVkZWYg c3RydWN0IFZ1RGVzY1N0YXRlU3BsaXQgeworICAgIC8qIEluZGljYXRlIHdoZXRoZXIgdGhpcyBk ZXNjcmlwdG9yIGlzIGluZmxpZ2h0IG9yIG5vdC4KKyAgICAgKiBPbmx5IGF2YWlsYWJsZSBmb3Ig aGVhZC1kZXNjcmlwdG9yLiAqLworICAgIHVpbnQ4X3QgaW5mbGlnaHQ7CisKKyAgICAvKiBQYWRk aW5nICovCisgICAgdWludDhfdCBwYWRkaW5nWzVdOworCisgICAgLyogTWFpbnRhaW4gYSBsaXN0 IGZvciB0aGUgbGFzdCBiYXRjaCBvZiB1c2VkIGRlc2NyaXB0b3JzLgorICAgICAqIE9ubHkgYXZh aWxhYmxlIHdoZW4gYmF0Y2hpbmcgaXMgdXNlZCBmb3Igc3VibWl0dGluZyAqLworICAgIHVpbnQx Nl90IG5leHQ7CisKKyAgICAvKiBVc2VkIHRvIHByZXNlcnZlIHRoZSBvcmRlciBvZiBmZXRjaGlu ZyBhdmFpbGFibGUgZGVzY3JpcHRvcnMuCisgICAgICogT25seSBhdmFpbGFibGUgZm9yIGhlYWQt ZGVzY3JpcHRvci4gKi8KKyAgICB1aW50NjRfdCBjb3VudGVyOworfSBWdURlc2NTdGF0ZVNwbGl0 OworCit0eXBlZGVmIHN0cnVjdCBWdVZpcnRxSW5mbGlnaHQgeworICAgIC8qIFRoZSBmZWF0dXJl IGZsYWdzIG9mIHRoaXMgcmVnaW9uLiBOb3cgaXQncyBpbml0aWFsaXplZCB0byAwLiAqLworICAg IHVpbnQ2NF90IGZlYXR1cmVzOworCisgICAgLyogVGhlIHZlcnNpb24gb2YgdGhpcyByZWdpb24u IEl0J3MgMSBjdXJyZW50bHkuCisgICAgICogWmVybyB2YWx1ZSBpbmRpY2F0ZXMgYSB2bSByZXNl dCBoYXBwZW5lZC4gKi8KKyAgICB1aW50MTZfdCB2ZXJzaW9uOworCisgICAgLyogVGhlIHNpemUg b2YgVnVEZXNjU3RhdGVTcGxpdCBhcnJheS4gSXQncyBlcXVhbCB0byB0aGUgdmlydHF1ZXVlCisg ICAgICogc2l6ZS4gU2xhdmUgY291bGQgZ2V0IGl0IGZyb20gcXVldWUgc2l6ZSBmaWVsZCBvZiBW aG9zdFVzZXJJbmZsaWdodC4gKi8KKyAgICB1aW50MTZfdCBkZXNjX251bTsKKworICAgIC8qIFRo ZSBoZWFkIG9mIGxpc3QgdGhhdCB0cmFjayB0aGUgbGFzdCBiYXRjaCBvZiB1c2VkIGRlc2NyaXB0 b3JzLiAqLworICAgIHVpbnQxNl90IGxhc3RfYmF0Y2hfaGVhZDsKKworICAgIC8qIFN0b3Jpbmcg dGhlIGlkeCB2YWx1ZSBvZiB1c2VkIHJpbmcgKi8KKyAgICB1aW50MTZfdCB1c2VkX2lkeDsKKwor ICAgIC8qIFVzZWQgdG8gdHJhY2sgdGhlIHN0YXRlIG9mIGVhY2ggZGVzY3JpcHRvciBpbiBkZXNj cmlwdG9yIHRhYmxlICovCisgICAgVnVEZXNjU3RhdGVTcGxpdCBkZXNjW107Cit9IFZ1VmlydHFJ bmZsaWdodDsKKwordHlwZWRlZiBzdHJ1Y3QgVnVWaXJ0cUluZmxpZ2h0RGVzYyB7CisgICAgdWlu dDE2X3QgaW5kZXg7CisgICAgdWludDY0X3QgY291bnRlcjsKK30gVnVWaXJ0cUluZmxpZ2h0RGVz YzsKKwordHlwZWRlZiBzdHJ1Y3QgVnVWaXJ0cSB7CisgICAgVnVSaW5nIHZyaW5nOworCisgICAg VnVWaXJ0cUluZmxpZ2h0ICppbmZsaWdodDsKKworICAgIFZ1VmlydHFJbmZsaWdodERlc2MgKnJl c3VibWl0X2xpc3Q7CisKKyAgICB1aW50MTZfdCByZXN1Ym1pdF9udW07CisKKyAgICB1aW50NjRf dCBjb3VudGVyOworCisgICAgLyogTmV4dCBoZWFkIHRvIHBvcCAqLworICAgIHVpbnQxNl90IGxh c3RfYXZhaWxfaWR4OworCisgICAgLyogTGFzdCBhdmFpbF9pZHggcmVhZCBmcm9tIFZRLiAqLwor ICAgIHVpbnQxNl90IHNoYWRvd19hdmFpbF9pZHg7CisKKyAgICB1aW50MTZfdCB1c2VkX2lkeDsK KworICAgIC8qIExhc3QgdXNlZCBpbmRleCB2YWx1ZSB3ZSBoYXZlIHNpZ25hbGxlZCBvbiAqLwor ICAgIHVpbnQxNl90IHNpZ25hbGxlZF91c2VkOworCisgICAgLyogTGFzdCB1c2VkIGluZGV4IHZh bHVlIHdlIGhhdmUgc2lnbmFsbGVkIG9uICovCisgICAgYm9vbCBzaWduYWxsZWRfdXNlZF92YWxp ZDsKKworICAgIC8qIE5vdGlmaWNhdGlvbiBlbmFibGVkPyAqLworICAgIGJvb2wgbm90aWZpY2F0 aW9uOworCisgICAgaW50IGludXNlOworCisgICAgdnVfcXVldWVfaGFuZGxlcl9jYiBoYW5kbGVy OworCisgICAgaW50IGNhbGxfZmQ7CisgICAgaW50IGtpY2tfZmQ7CisgICAgaW50IGVycl9mZDsK KyAgICB1bnNpZ25lZCBpbnQgZW5hYmxlOworICAgIGJvb2wgc3RhcnRlZDsKKworICAgIC8qIEd1 ZXN0IGFkZHJlc3NlcyBvZiBvdXIgcmluZyAqLworICAgIHN0cnVjdCB2aG9zdF92cmluZ19hZGRy IHZyYTsKK30gVnVWaXJ0cTsKKworZW51bSBWdVdhdGNoQ29uZHRpb24geworICAgIFZVX1dBVENI X0lOID0gUE9MTElOLAorICAgIFZVX1dBVENIX09VVCA9IFBPTExPVVQsCisgICAgVlVfV0FUQ0hf UFJJID0gUE9MTFBSSSwKKyAgICBWVV9XQVRDSF9FUlIgPSBQT0xMRVJSLAorICAgIFZVX1dBVENI X0hVUCA9IFBPTExIVVAsCit9OworCit0eXBlZGVmIHZvaWQgKCp2dV9wYW5pY19jYikgKFZ1RGV2 ICpkZXYsIGNvbnN0IGNoYXIgKmVycik7Cit0eXBlZGVmIHZvaWQgKCp2dV93YXRjaF9jYikgKFZ1 RGV2ICpkZXYsIGludCBjb25kaXRpb24sIHZvaWQgKmRhdGEpOwordHlwZWRlZiB2b2lkICgqdnVf c2V0X3dhdGNoX2NiKSAoVnVEZXYgKmRldiwgaW50IGZkLCBpbnQgY29uZGl0aW9uLAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgdnVfd2F0Y2hfY2IgY2IsIHZvaWQgKmRhdGEpOwor dHlwZWRlZiB2b2lkICgqdnVfcmVtb3ZlX3dhdGNoX2NiKSAoVnVEZXYgKmRldiwgaW50IGZkKTsK KwordHlwZWRlZiBzdHJ1Y3QgVnVEZXZJbmZsaWdodEluZm8geworICAgIGludCBmZDsKKyAgICB2 b2lkICphZGRyOworICAgIHVpbnQ2NF90IHNpemU7Cit9IFZ1RGV2SW5mbGlnaHRJbmZvOworCitz dHJ1Y3QgVnVEZXYgeworICAgIGludCBzb2NrOworICAgIHVpbnQzMl90IG5yZWdpb25zOworICAg IFZ1RGV2UmVnaW9uIHJlZ2lvbnNbVkhPU1RfVVNFUl9NQVhfUkFNX1NMT1RTXTsKKyAgICBWdVZp cnRxICp2cTsKKyAgICBWdURldkluZmxpZ2h0SW5mbyBpbmZsaWdodF9pbmZvOworICAgIGludCBs b2dfY2FsbF9mZDsKKyAgICAvKiBNdXN0IGJlIGhlbGQgd2hpbGUgdXNpbmcgc2xhdmVfZmQgKi8K KyAgICBwdGhyZWFkX211dGV4X3Qgc2xhdmVfbXV0ZXg7CisgICAgaW50IHNsYXZlX2ZkOworICAg IHVpbnQ2NF90IGxvZ19zaXplOworICAgIHVpbnQ4X3QgKmxvZ190YWJsZTsKKyAgICB1aW50NjRf dCBmZWF0dXJlczsKKyAgICB1aW50NjRfdCBwcm90b2NvbF9mZWF0dXJlczsKKyAgICBib29sIGJy b2tlbjsKKyAgICB1aW50MTZfdCBtYXhfcXVldWVzOworCisgICAgLyoKKyAgICAgKiBAcmVhZF9t c2c6IGN1c3RvbSBtZXRob2QgdG8gcmVhZCB2aG9zdC11c2VyIG1lc3NhZ2UKKyAgICAgKgorICAg ICAqIFJlYWQgZGF0YSBmcm9tIHZob3N0X3VzZXIgc29ja2V0IGZkIGFuZCBmaWxsIHVwCisgICAg ICogdGhlIHBhc3NlZCBWaG9zdFVzZXJNc2cgKnZtc2cgc3RydWN0LgorICAgICAqCisgICAgICog SWYgcmVhZGluZyBmYWlscywgaXQgc2hvdWxkIGNsb3NlIHRoZSByZWNlaXZlZCBzZXQgb2YgZmls ZQorICAgICAqIGRlc2NyaXB0b3JzIGFzIHNvY2tldCBtZXNzYWdlJ3MgYXV4aWxpYXJ5IGRhdGEu CisgICAgICoKKyAgICAgKiBGb3IgdGhlIGRldGFpbHMsIHBsZWFzZSByZWZlciB0byB2dV9tZXNz YWdlX3JlYWQgaW4gbGlidmhvc3QtdXNlci5jCisgICAgICogd2hpY2ggd2lsbCBiZSB1c2VkIGJ5 IGRlZmF1bHQgaWYgbm90IGN1c3RvbSBtZXRob2QgaXMgcHJvdmlkZWQgd2hlbgorICAgICAqIGNh bGxpbmcgdnVfaW5pdAorICAgICAqCisgICAgICogUmV0dXJuczogdHJ1ZSBpZiB2aG9zdC11c2Vy IG1lc3NhZ2Ugc3VjY2Vzc2Z1bGx5IHJlY2VpdmVkLAorICAgICAqICAgICAgICAgIG90aGVyd2lz ZSByZXR1cm4gZmFsc2UuCisgICAgICoKKyAgICAgKi8KKyAgICB2dV9yZWFkX21zZ19jYiByZWFk X21zZzsKKworICAgIC8qCisgICAgICogQHNldF93YXRjaDogYWRkIG9yIHVwZGF0ZSB0aGUgZ2l2 ZW4gZmQgdG8gdGhlIHdhdGNoIHNldCwKKyAgICAgKiBjYWxsIGNiIHdoZW4gY29uZGl0aW9uIGlz IG1ldC4KKyAgICAgKi8KKyAgICB2dV9zZXRfd2F0Y2hfY2Igc2V0X3dhdGNoOworCisgICAgLyog QHJlbW92ZV93YXRjaDogcmVtb3ZlIHRoZSBnaXZlbiBmZCBmcm9tIHRoZSB3YXRjaCBzZXQgKi8K KyAgICB2dV9yZW1vdmVfd2F0Y2hfY2IgcmVtb3ZlX3dhdGNoOworCisgICAgLyoKKyAgICAgKiBA cGFuaWM6IGVuY291bnRlcmVkIGFuIHVucmVjb3ZlcmFibGUgZXJyb3IsIHlvdSBtYXkgdHJ5IHRv IHJlLWluaXRpYWxpemUKKyAgICAgKi8KKyAgICB2dV9wYW5pY19jYiBwYW5pYzsKKyAgICBjb25z dCBWdURldklmYWNlICppZmFjZTsKKworICAgIC8qIFBvc3Rjb3B5IGRhdGEgKi8KKyAgICBpbnQg cG9zdGNvcHlfdWZkOworICAgIGJvb2wgcG9zdGNvcHlfbGlzdGVuaW5nOworfTsKKwordHlwZWRl ZiBzdHJ1Y3QgVnVWaXJ0cUVsZW1lbnQgeworICAgIHVuc2lnbmVkIGludCBpbmRleDsKKyAgICB1 bnNpZ25lZCBpbnQgb3V0X251bTsKKyAgICB1bnNpZ25lZCBpbnQgaW5fbnVtOworICAgIHN0cnVj dCBpb3ZlYyAqaW5fc2c7CisgICAgc3RydWN0IGlvdmVjICpvdXRfc2c7Cit9IFZ1VmlydHFFbGVt ZW50OworCisvKioKKyAqIHZ1X2luaXQ6CisgKiBAZGV2OiBhIFZ1RGV2IGNvbnRleHQKKyAqIEBt YXhfcXVldWVzOiBtYXhpbXVtIG51bWJlciBvZiB2aXJ0cXVldWVzCisgKiBAc29ja2V0OiB0aGUg c29ja2V0IGNvbm5lY3RlZCB0byB2aG9zdC11c2VyIG1hc3RlcgorICogQHBhbmljOiBhIHBhbmlj IGNhbGxiYWNrCisgKiBAc2V0X3dhdGNoOiBhIHNldF93YXRjaCBjYWxsYmFjaworICogQHJlbW92 ZV93YXRjaDogYSByZW1vdmVfd2F0Y2ggY2FsbGJhY2sKKyAqIEBpZmFjZTogYSBWdURldklmYWNl IHN0cnVjdHVyZSB3aXRoIHZob3N0LXVzZXIgZGV2aWNlIGNhbGxiYWNrcworICoKKyAqIEluaXRp YWxpemVzIGEgVnVEZXYgdmhvc3QtdXNlciBjb250ZXh0LgorICoKKyAqIFJldHVybnM6IHRydWUg b24gc3VjY2VzcywgZmFsc2Ugb24gZmFpbHVyZS4KKyAqKi8KK2Jvb2wgdnVfaW5pdChWdURldiAq ZGV2LAorICAgICAgICAgICAgIHVpbnQxNl90IG1heF9xdWV1ZXMsCisgICAgICAgICAgICAgaW50 IHNvY2tldCwKKyAgICAgICAgICAgICB2dV9wYW5pY19jYiBwYW5pYywKKyAgICAgICAgICAgICB2 dV9yZWFkX21zZ19jYiByZWFkX21zZywKKyAgICAgICAgICAgICB2dV9zZXRfd2F0Y2hfY2Igc2V0 X3dhdGNoLAorICAgICAgICAgICAgIHZ1X3JlbW92ZV93YXRjaF9jYiByZW1vdmVfd2F0Y2gsCisg ICAgICAgICAgICAgY29uc3QgVnVEZXZJZmFjZSAqaWZhY2UpOworCisKKy8qKgorICogdnVfZGVp bml0OgorICogQGRldjogYSBWdURldiBjb250ZXh0CisgKgorICogQ2xlYW5zIHVwIHRoZSBWdURl diBjb250ZXh0CisgKi8KK3ZvaWQgdnVfZGVpbml0KFZ1RGV2ICpkZXYpOworCisvKioKKyAqIHZ1 X2Rpc3BhdGNoOgorICogQGRldjogYSBWdURldiBjb250ZXh0CisgKgorICogUHJvY2VzcyBvbmUg dmhvc3QtdXNlciBtZXNzYWdlLgorICoKKyAqIFJldHVybnM6IFRSVUUgb24gc3VjY2VzcywgRkFM U0Ugb24gZmFpbHVyZS4KKyAqLworYm9vbCB2dV9kaXNwYXRjaChWdURldiAqZGV2KTsKKworLyoq CisgKiB2dV9ncGFfdG9fdmE6CisgKiBAZGV2OiBhIFZ1RGV2IGNvbnRleHQKKyAqIEBwbGVuOiBn dWVzdCBtZW1vcnkgc2l6ZQorICogQGd1ZXN0X2FkZHI6IGd1ZXN0IGFkZHJlc3MKKyAqCisgKiBU cmFuc2xhdGUgYSBndWVzdCBhZGRyZXNzIHRvIGEgcG9pbnRlci4gUmV0dXJucyBOVUxMIG9uIGZh aWx1cmUuCisgKi8KK3ZvaWQgKnZ1X2dwYV90b192YShWdURldiAqZGV2LCB1aW50NjRfdCAqcGxl biwgdWludDY0X3QgZ3Vlc3RfYWRkcik7CisKKy8qKgorICogdnVfZ2V0X3F1ZXVlOgorICogQGRl djogYSBWdURldiBjb250ZXh0CisgKiBAcWlkeDogcXVldWUgaW5kZXgKKyAqCisgKiBSZXR1cm5z IHRoZSBxdWV1ZSBudW1iZXIgQHFpZHguCisgKi8KK1Z1VmlydHEgKnZ1X2dldF9xdWV1ZShWdURl diAqZGV2LCBpbnQgcWlkeCk7CisKKy8qKgorICogdnVfc2V0X3F1ZXVlX2hhbmRsZXI6CisgKiBA ZGV2OiBhIFZ1RGV2IGNvbnRleHQKKyAqIEB2cTogYSBWdVZpcnRxIHF1ZXVlCisgKiBAaGFuZGxl cjogdGhlIHF1ZXVlIGhhbmRsZXIgY2FsbGJhY2sKKyAqCisgKiBTZXQgdGhlIHF1ZXVlIGhhbmRs ZXIuIFRoaXMgZnVuY3Rpb24gbWF5IGJlIGNhbGxlZCBzZXZlcmFsIHRpbWVzCisgKiBmb3IgdGhl IHNhbWUgcXVldWUuIElmIGNhbGxlZCB3aXRoIE5VTEwgQGhhbmRsZXIsIHRoZSBoYW5kbGVyIGlz CisgKiByZW1vdmVkLgorICovCit2b2lkIHZ1X3NldF9xdWV1ZV9oYW5kbGVyKFZ1RGV2ICpkZXYs IFZ1VmlydHEgKnZxLAorICAgICAgICAgICAgICAgICAgICAgICAgICB2dV9xdWV1ZV9oYW5kbGVy X2NiIGhhbmRsZXIpOworCisvKioKKyAqIHZ1X3NldF9xdWV1ZV9ob3N0X25vdGlmaWVyOgorICog QGRldjogYSBWdURldiBjb250ZXh0CisgKiBAdnE6IGEgVnVWaXJ0cSBxdWV1ZQorICogQGZkOiBh IGZpbGUgZGVzY3JpcHRvcgorICogQHNpemU6IGhvc3QgcGFnZSBzaXplCisgKiBAb2Zmc2V0OiBu b3RpZmllciBvZmZzZXQgaW4gQGZkIGZpbGUKKyAqCisgKiBTZXQgcXVldWUncyBob3N0IG5vdGlm aWVyLiBUaGlzIGZ1bmN0aW9uIG1heSBiZSBjYWxsZWQgc2V2ZXJhbAorICogdGltZXMgZm9yIHRo ZSBzYW1lIHF1ZXVlLiBJZiBjYWxsZWQgd2l0aCAtMSBAZmQsIHRoZSBub3RpZmllcgorICogaXMg cmVtb3ZlZC4KKyAqLworYm9vbCB2dV9zZXRfcXVldWVfaG9zdF9ub3RpZmllcihWdURldiAqZGV2 LCBWdVZpcnRxICp2cSwgaW50IGZkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp bnQgc2l6ZSwgaW50IG9mZnNldCk7CisKKy8qKgorICogdnVfcXVldWVfc2V0X25vdGlmaWNhdGlv bjoKKyAqIEBkZXY6IGEgVnVEZXYgY29udGV4dAorICogQHZxOiBhIFZ1VmlydHEgcXVldWUKKyAq IEBlbmFibGU6IHN0YXRlCisgKgorICogU2V0IHdoZXRoZXIgdGhlIHF1ZXVlIG5vdGlmaWVzICh2 aWEgZXZlbnQgaW5kZXggb3IgaW50ZXJydXB0KQorICovCit2b2lkIHZ1X3F1ZXVlX3NldF9ub3Rp ZmljYXRpb24oVnVEZXYgKmRldiwgVnVWaXJ0cSAqdnEsIGludCBlbmFibGUpOworCisvKioKKyAq IHZ1X3F1ZXVlX2VuYWJsZWQ6CisgKiBAZGV2OiBhIFZ1RGV2IGNvbnRleHQKKyAqIEB2cTogYSBW dVZpcnRxIHF1ZXVlCisgKgorICogUmV0dXJuczogd2hldGhlciB0aGUgcXVldWUgaXMgZW5hYmxl ZC4KKyAqLworYm9vbCB2dV9xdWV1ZV9lbmFibGVkKFZ1RGV2ICpkZXYsIFZ1VmlydHEgKnZxKTsK KworLyoqCisgKiB2dV9xdWV1ZV9zdGFydGVkOgorICogQGRldjogYSBWdURldiBjb250ZXh0Cisg KiBAdnE6IGEgVnVWaXJ0cSBxdWV1ZQorICoKKyAqIFJldHVybnM6IHdoZXRoZXIgdGhlIHF1ZXVl IGlzIHN0YXJ0ZWQuCisgKi8KK2Jvb2wgdnVfcXVldWVfc3RhcnRlZChjb25zdCBWdURldiAqZGV2 LCBjb25zdCBWdVZpcnRxICp2cSk7CisKKy8qKgorICogdnVfcXVldWVfZW1wdHk6CisgKiBAZGV2 OiBhIFZ1RGV2IGNvbnRleHQKKyAqIEB2cTogYSBWdVZpcnRxIHF1ZXVlCisgKgorICogUmV0dXJu czogdHJ1ZSBpZiB0aGUgcXVldWUgaXMgZW1wdHkgb3Igbm90IHJlYWR5LgorICovCitib29sIHZ1 X3F1ZXVlX2VtcHR5KFZ1RGV2ICpkZXYsIFZ1VmlydHEgKnZxKTsKKworLyoqCisgKiB2dV9xdWV1 ZV9ub3RpZnk6CisgKiBAZGV2OiBhIFZ1RGV2IGNvbnRleHQKKyAqIEB2cTogYSBWdVZpcnRxIHF1 ZXVlCisgKgorICogUmVxdWVzdCB0byBub3RpZnkgdGhlIHF1ZXVlIHZpYSBjYWxsZmQgKHNraXBw ZWQgaWYgdW5uZWNlc3NhcnkpCisgKi8KK3ZvaWQgdnVfcXVldWVfbm90aWZ5KFZ1RGV2ICpkZXYs IFZ1VmlydHEgKnZxKTsKKworLyoqCisgKiB2dV9xdWV1ZV9ub3RpZnlfc3luYzoKKyAqIEBkZXY6 IGEgVnVEZXYgY29udGV4dAorICogQHZxOiBhIFZ1VmlydHEgcXVldWUKKyAqCisgKiBSZXF1ZXN0 IHRvIG5vdGlmeSB0aGUgcXVldWUgdmlhIGNhbGxmZCAoc2tpcHBlZCBpZiB1bm5lY2Vzc2FyeSkK KyAqIG9yIHN5bmMgbWVzc2FnZSBpZiBwb3NzaWJsZS4KKyAqLwordm9pZCB2dV9xdWV1ZV9ub3Rp Znlfc3luYyhWdURldiAqZGV2LCBWdVZpcnRxICp2cSk7CisKKy8qKgorICogdnVfcXVldWVfcG9w OgorICogQGRldjogYSBWdURldiBjb250ZXh0CisgKiBAdnE6IGEgVnVWaXJ0cSBxdWV1ZQorICog QHN6OiB0aGUgc2l6ZSBvZiBzdHJ1Y3QgdG8gcmV0dXJuIChtdXN0IGJlID49IFZ1VmlydHFFbGVt ZW50KQorICoKKyAqIFJldHVybnM6IGEgVnVWaXJ0cUVsZW1lbnQgZmlsbGVkIGZyb20gdGhlIHF1 ZXVlIG9yIE5VTEwuIFRoZQorICogcmV0dXJuZWQgZWxlbWVudCBtdXN0IGJlIGZyZWUoKS1kIGJ5 IHRoZSBjYWxsZXIuCisgKi8KK3ZvaWQgKnZ1X3F1ZXVlX3BvcChWdURldiAqZGV2LCBWdVZpcnRx ICp2cSwgc2l6ZV90IHN6KTsKKworCisvKioKKyAqIHZ1X3F1ZXVlX3VucG9wOgorICogQGRldjog YSBWdURldiBjb250ZXh0CisgKiBAdnE6IGEgVnVWaXJ0cSBxdWV1ZQorICogQGVsZW06IFRoZSAj VnVWaXJ0cUVsZW1lbnQKKyAqIEBsZW46IG51bWJlciBvZiBieXRlcyB3cml0dGVuCisgKgorICog UHJldGVuZCB0aGUgbW9zdCByZWNlbnQgZWxlbWVudCB3YXNuJ3QgcG9wcGVkIGZyb20gdGhlIHZp cnRxdWV1ZS4gIFRoZSBuZXh0CisgKiBjYWxsIHRvIHZ1X3F1ZXVlX3BvcCgpIHdpbGwgcmVmZXRj aCB0aGUgZWxlbWVudC4KKyAqLwordm9pZCB2dV9xdWV1ZV91bnBvcChWdURldiAqZGV2LCBWdVZp cnRxICp2cSwgVnVWaXJ0cUVsZW1lbnQgKmVsZW0sCisgICAgICAgICAgICAgICAgICAgIHNpemVf dCBsZW4pOworCisvKioKKyAqIHZ1X3F1ZXVlX3Jld2luZDoKKyAqIEBkZXY6IGEgVnVEZXYgY29u dGV4dAorICogQHZxOiBhIFZ1VmlydHEgcXVldWUKKyAqIEBudW06IG51bWJlciBvZiBlbGVtZW50 cyB0byBwdXNoIGJhY2sKKyAqCisgKiBQcmV0ZW5kIHRoYXQgZWxlbWVudHMgd2VyZW4ndCBwb3Bw ZWQgZnJvbSB0aGUgdmlydHF1ZXVlLiAgVGhlIG5leHQKKyAqIHZpcnRxdWV1ZV9wb3AoKSB3aWxs IHJlZmV0Y2ggdGhlIG9sZGVzdCBlbGVtZW50LgorICoKKyAqIFJldHVybnM6IHRydWUgb24gc3Vj Y2VzcywgZmFsc2UgaWYgQG51bSBpcyBncmVhdGVyIHRoYW4gdGhlIG51bWJlciBvZiBpbiB1c2UK KyAqIGVsZW1lbnRzLgorICovCitib29sIHZ1X3F1ZXVlX3Jld2luZChWdURldiAqZGV2LCBWdVZp cnRxICp2cSwgdW5zaWduZWQgaW50IG51bSk7CisKKy8qKgorICogdnVfcXVldWVfZmlsbDoKKyAq IEBkZXY6IGEgVnVEZXYgY29udGV4dAorICogQHZxOiBhIFZ1VmlydHEgcXVldWUKKyAqIEBlbGVt OiBhIFZ1VmlydHFFbGVtZW50CisgKiBAbGVuOiBsZW5ndGggaW4gYnl0ZXMgdG8gd3JpdGUKKyAq IEBpZHg6IG9wdGlvbmFsIG9mZnNldCBmb3IgdGhlIHVzZWQgcmluZyBpbmRleCAoMCBpbiBnZW5l cmFsKQorICoKKyAqIEZpbGwgdGhlIHVzZWQgcmluZyB3aXRoIEBlbGVtIGVsZW1lbnQuCisgKi8K K3ZvaWQgdnVfcXVldWVfZmlsbChWdURldiAqZGV2LCBWdVZpcnRxICp2cSwKKyAgICAgICAgICAg ICAgICAgICBjb25zdCBWdVZpcnRxRWxlbWVudCAqZWxlbSwKKyAgICAgICAgICAgICAgICAgICB1 bnNpZ25lZCBpbnQgbGVuLCB1bnNpZ25lZCBpbnQgaWR4KTsKKworLyoqCisgKiB2dV9xdWV1ZV9w dXNoOgorICogQGRldjogYSBWdURldiBjb250ZXh0CisgKiBAdnE6IGEgVnVWaXJ0cSBxdWV1ZQor ICogQGVsZW06IGEgVnVWaXJ0cUVsZW1lbnQKKyAqIEBsZW46IGxlbmd0aCBpbiBieXRlcyB0byB3 cml0ZQorICoKKyAqIEhlbHBlciB0aGF0IGNvbWJpbmVzIHZ1X3F1ZXVlX2ZpbGwoKSB3aXRoIGEg dnVfcXVldWVfZmx1c2goKS4KKyAqLwordm9pZCB2dV9xdWV1ZV9wdXNoKFZ1RGV2ICpkZXYsIFZ1 VmlydHEgKnZxLAorICAgICAgICAgICAgICAgICAgIGNvbnN0IFZ1VmlydHFFbGVtZW50ICplbGVt LCB1bnNpZ25lZCBpbnQgbGVuKTsKKworLyoqCisgKiB2dV9xdWV1ZV9mbHVzaDoKKyAqIEBkZXY6 IGEgVnVEZXYgY29udGV4dAorICogQHZxOiBhIFZ1VmlydHEgcXVldWUKKyAqIEBudW06IG51bWJl ciBvZiBlbGVtZW50cyB0byBmbHVzaAorICoKKyAqIE1hcmsgdGhlIGxhc3QgbnVtYmVyIG9mIGVs ZW1lbnRzIGFzIGRvbmUgKHVzZWQuaWR4IGlzIHVwZGF0ZWQgYnkKKyAqIG51bSBlbGVtZW50cyku CisqLwordm9pZCB2dV9xdWV1ZV9mbHVzaChWdURldiAqZGV2LCBWdVZpcnRxICp2cSwgdW5zaWdu ZWQgaW50IG51bSk7CisKKy8qKgorICogdnVfcXVldWVfZ2V0X2F2YWlsX2J5dGVzOgorICogQGRl djogYSBWdURldiBjb250ZXh0CisgKiBAdnE6IGEgVnVWaXJ0cSBxdWV1ZQorICogQGluX2J5dGVz OiBpbiBieXRlcworICogQG91dF9ieXRlczogb3V0IGJ5dGVzCisgKiBAbWF4X2luX2J5dGVzOiBz dG9wIGNvdW50aW5nIGFmdGVyIG1heF9pbl9ieXRlcworICogQG1heF9vdXRfYnl0ZXM6IHN0b3Ag Y291bnRpbmcgYWZ0ZXIgbWF4X291dF9ieXRlcworICoKKyAqIENvdW50IHRoZSBudW1iZXIgb2Yg YXZhaWxhYmxlIGJ5dGVzLCB1cCB0byBtYXhfaW5fYnl0ZXMvbWF4X291dF9ieXRlcy4KKyAqLwor dm9pZCB2dV9xdWV1ZV9nZXRfYXZhaWxfYnl0ZXMoVnVEZXYgKnZkZXYsIFZ1VmlydHEgKnZxLCB1 bnNpZ25lZCBpbnQgKmluX2J5dGVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5z aWduZWQgaW50ICpvdXRfYnl0ZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNp Z25lZCBtYXhfaW5fYnl0ZXMsIHVuc2lnbmVkIG1heF9vdXRfYnl0ZXMpOworCisvKioKKyAqIHZ1 X3F1ZXVlX2F2YWlsX2J5dGVzOgorICogQGRldjogYSBWdURldiBjb250ZXh0CisgKiBAdnE6IGEg VnVWaXJ0cSBxdWV1ZQorICogQGluX2J5dGVzOiBleHBlY3RlZCBpbiBieXRlcworICogQG91dF9i eXRlczogZXhwZWN0ZWQgb3V0IGJ5dGVzCisgKgorICogUmV0dXJuczogdHJ1ZSBpZiBpbl9ieXRl cyA8PSBpbl90b3RhbCAmJiBvdXRfYnl0ZXMgPD0gb3V0X3RvdGFsCisgKi8KK2Jvb2wgdnVfcXVl dWVfYXZhaWxfYnl0ZXMoVnVEZXYgKmRldiwgVnVWaXJ0cSAqdnEsIHVuc2lnbmVkIGludCBpbl9i eXRlcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IG91dF9ieXRlcyk7 CisKKyNlbmRpZiAvKiBMSUJWSE9TVF9VU0VSX0ggKi8KLS0gCjIuMzQuMQoKCl9fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmxpbnV4LXVtIG1haWxpbmcgbGlz dApsaW51eC11bUBsaXN0cy5pbmZyYWRlYWQub3JnCmh0dHA6Ly9saXN0cy5pbmZyYWRlYWQub3Jn L21haWxtYW4vbGlzdGluZm8vbGludXgtdW0K