From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from m16.mail.163.com (m16.mail.163.com [220.197.31.4]) by smtp.subspace.kernel.org (Postfix) with ESMTP id CFDB6A944; Sun, 2 Mar 2025 10:35:33 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=220.197.31.4 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1740911740; cv=none; b=bKQFYg5esU8ej1Xwhb/02uEnZsBoutL86GYdIx/KYbLCOe2MCAA2LDgTH0aEWXMT3JUCbaVJ89D25iO/Gj9n2ZdW6BZCwiKK/ufVMDi14udPfvhBY6JkQrYoDZGGjH0lD2CAOjLxNQIg5XNnVxUe36nFQvquSg6PW2kpE9Tp0XA= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1740911740; c=relaxed/simple; bh=Nq2hqV1zrMWs+PKpWIH5GTxWsKdbQXW/iTdt0/wId2k=; h=Date:From:To:Cc:Subject:In-Reply-To:References:Content-Type: MIME-Version:Message-ID; b=ClnYigB1bxqfUeWGugxozifDosidh+wwZQz0kf0sNK/6Ube4q+Wn9UcbDd0o5IQgCPIrWZXmXAZPKxrltFgyy+WXDzpuuho2MtbtUW99Q8SvUjQ6gXhQS0t8nJJ6gzkKyQuWgA8uMSiOlg6kQgD1BnKR80LJpPOoG8NnjkEbUy4= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=163.com; spf=pass smtp.mailfrom=163.com; dkim=fail (1024-bit key) header.d=163.com header.i=@163.com header.b=AbIVWzMW reason="signature verification failed"; arc=none smtp.client-ip=220.197.31.4 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=163.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=163.com Authentication-Results: smtp.subspace.kernel.org; dkim=fail reason="signature verification failed" (1024-bit key) header.d=163.com header.i=@163.com header.b="AbIVWzMW" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=163.com; s=s110527; h=Date:From:Subject:Content-Type:MIME-Version: Message-ID; bh=iAS9oQauBdXnC53AywEmzdmWlFByR0nzcFA1DZ+9gfE=; b=A bIVWzMWMqqQmblGyTzrk8zaPFzIbeDVYvKR+3hWgu/XRMJ4qvXDZvoKLhVmYBtTs dB/clMWwBiLyxmqRTxPrd+rzGF+K+5GCRS3dbF782gEygILcj/6GRvUJ64pSpUA6 LwGiK9wtFfGOrN/d7ERYIXkLnf5Wo+FY3xnuG89qjg= Received: from andyshrk$163.com ( [58.22.7.114] ) by ajax-webmail-wmsvr-40-100 (Coremail) ; Sun, 2 Mar 2025 18:34:22 +0800 (CST) Date: Sun, 2 Mar 2025 18:34:22 +0800 (CST) From: "Andy Yan" To: "Dmitry Baryshkov" Cc: heiko@sntech.de, hjc@rock-chips.com, mripard@kernel.org, cristian.ciocaltea@collabora.com, neil.armstrong@linaro.org, yubing.zhang@rock-chips.com, krzk+dt@kernel.org, devicetree@vger.kernel.org, dri-devel@lists.freedesktop.org, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, linux-rockchip@lists.infradead.org, robh@kernel.org, sebastian.reichel@collabora.com, "Andy Yan" Subject: Re:Re: [PATCH 2/6] drm/bridge: synopsys: Add DW DPTX Controller support library X-Priority: 3 X-Mailer: Coremail Webmail Server Version XT5.0.14 build 20240801(9da12a7b) Copyright (c) 2002-2025 www.mailtech.cn 163com In-Reply-To: <563i7xcbbsxfezkgs4txsa6lar5tb5folp7zk7dc7sbvf54n6y@vqbtuwvj3fcw> References: <20250223113036.74252-1-andyshrk@163.com> <20250223113036.74252-3-andyshrk@163.com> <563i7xcbbsxfezkgs4txsa6lar5tb5folp7zk7dc7sbvf54n6y@vqbtuwvj3fcw> X-NTES-SC: AL_Qu2fAvWavk4t5CKfYukfmkcVgOw9UcO5v/Qk3oZXOJF8jCrp+T4yXHBTF1zd3fCDBzi2nQiHVRZJ0dhgcY1zcacM2q5lz+rYY7bnm7g/LRhGLw== Content-Transfer-Encoding: base64 Content-Type: text/plain; charset=UTF-8 Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Message-ID: <6046d805.2173.195566bd4cf.Coremail.andyshrk@163.com> X-Coremail-Locale: zh_CN X-CM-TRANSID:ZCgvCgDHjF4uNMRna58ZAA--.15139W X-CM-SenderInfo: 5dqg52xkunqiywtou0bp/xtbB0gMEXmfEJpmAEgADsG X-Coremail-Antispam: 1U5529EdanIXcx71UUUUU7vcSsGvfC2KfnxnUU== CgpIaSBEbWl0cnnvvIwKICAgVGhhbmsgeW91IGZvciB5b3VyIHJldmlld+OAggogICBQbGVhc2Ug YWxzbyByZXZpZXcgbXkgaW5saW5lIHJlcGx5LgogICAgICAK5ZyoIDIwMjUtMDMtMDIgMDI6MTQ6 MTnvvIwiRG1pdHJ5IEJhcnlzaGtvdiIgPGRtaXRyeS5iYXJ5c2hrb3ZAbGluYXJvLm9yZz4g5YaZ 6YGT77yaCj5PbiBTdW4sIEZlYiAyMywgMjAyNSBhdCAwNzozMDoyNVBNICswODAwLCBBbmR5IFlh biB3cm90ZToKPj4gRnJvbTogQW5keSBZYW4gPGFuZHkueWFuQHJvY2stY2hpcHMuY29tPgo+PiAK Pj4gVGhlIERXIERQIFRYIENvbnRyb2xsZXIgaXMgY29tcGxpYW50IHdpdGggdGhlIERpc3BsYXlQ b3J0IFNwZWNpZmljYXRpb24KPj4gVmVyc2lvbiAxLjQgd2l0aCB0aGUgZm9sbG93aW5nIGZlYXR1 cmVzOgo+PiAKPj4gKiBEaXNwbGF5UG9ydCAxLjRhCj4+ICogTWFpbiBMaW5rOiAxLzIvNCBsYW5l cwo+PiAqIE1haW4gTGluayBTdXBwb3J0IDEuNjJHYnBzLCAyLjdHYnBzLCA1LjRHYnBzIGFuZCA4 LjFHYnBzCj4+ICogQVVYIGNoYW5uZWwgMU1icHMKPj4gKiBTaW5nbGUgU3RyZWFtIFRyYW5zcG9y dChTU1QpCj4+ICogTXVsdGlzdHJlYW0gVHJhbnNwb3J0IChNU1QpCj4+ICrvga5UeXBlLUMgc3Vw cG9ydCAoYWx0ZXJuYXRlIG1vZGUpCj4+ICogSERDUCAyLjIsIEhEQ1AgMS4zCj4+ICogU3VwcG9y dHMgdXAgdG8gOC8xMCBiaXRzIHBlciBjb2xvciBjb21wb25lbnQKPj4gKiBTdXBwb3J0cyBSQkcs IFlDYkNyNDo0OjQsIFlDYkNyNDoyOjIsIFlDYkNyNDoyOjAKPj4gKiBQaXhlbCBjbG9jayB1cCB0 byA1OTRNSHoKPj4gKiBJMlMsIFNQRElGIGF1ZGlvIGludGVyZmFjZQo+PiAKPj4gQWRkIGxpYnJh cnkgd2l0aCBjb21tb24gaGVscGVycyB0byBtYWtlIGl0IGNhbiBiZSBzaGFyZWQgd2l0aAo+PiBv dGhlciBTb0MuCj4+IAo+PiBTaWduZWQtb2ZmLWJ5OiBBbmR5IFlhbiA8YW5keS55YW5Acm9jay1j aGlwcy5jb20+Cj4+IAo+PiBkcm0vYnJpZGdlOiBjbGVhbnVwCj4KPlN0cmF5IGxpbmU/CgpTb3Jy eSwgd2lsbCBiZSByZW1vdmVkLgoKPgo+PiAKPj4gLS0tCj4+IAo+PiAgZHJpdmVycy9ncHUvZHJt L2JyaWRnZS9zeW5vcHN5cy9LY29uZmlnICB8ICAgIDcgKwo+PiAgZHJpdmVycy9ncHUvZHJtL2Jy aWRnZS9zeW5vcHN5cy9NYWtlZmlsZSB8ICAgIDEgKwo+PiAgZHJpdmVycy9ncHUvZHJtL2JyaWRn ZS9zeW5vcHN5cy9kdy1kcC5jICB8IDIxNTUgKysrKysrKysrKysrKysrKysrKysrKwo+PiAgaW5j bHVkZS9kcm0vYnJpZGdlL2R3X2RwLmggICAgICAgICAgICAgICB8ICAgMTkgKwo+PiAgNCBmaWxl cyBjaGFuZ2VkLCAyMTgyIGluc2VydGlvbnMoKykKPj4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2 ZXJzL2dwdS9kcm0vYnJpZGdlL3N5bm9wc3lzL2R3LWRwLmMKPj4gIGNyZWF0ZSBtb2RlIDEwMDY0 NCBpbmNsdWRlL2RybS9icmlkZ2UvZHdfZHAuaAo+PiAKPj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMv Z3B1L2RybS9icmlkZ2Uvc3lub3BzeXMvS2NvbmZpZyBiL2RyaXZlcnMvZ3B1L2RybS9icmlkZ2Uv c3lub3BzeXMvS2NvbmZpZwo+PiBpbmRleCBmM2FiMmY5ODVmOGMuLjJjNWU1MzI0MTBkZSAxMDA2 NDQKPj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9zeW5vcHN5cy9LY29uZmlnCj4+ICsr KyBiL2RyaXZlcnMvZ3B1L2RybS9icmlkZ2Uvc3lub3BzeXMvS2NvbmZpZwo+PiBAQCAtMSw0ICsx LDExIEBACj4+ICAjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHkKPj4gK2Nv bmZpZyBEUk1fRFdfRFAKPj4gKwl0cmlzdGF0ZQo+PiArCXNlbGVjdCBEUk1fRElTUExBWV9IRUxQ RVIKPj4gKwlzZWxlY3QgRFJNX0RJU1BMQVlfRFBfSEVMUEVSCj4+ICsJc2VsZWN0IERSTV9LTVNf SEVMUEVSCj4+ICsJc2VsZWN0IFJFR01BUF9NTUlPCj4+ICsKPj4gIGNvbmZpZyBEUk1fRFdfSERN SQo+PiAgCXRyaXN0YXRlCj4+ICAJc2VsZWN0IERSTV9ESVNQTEFZX0hETUlfSEVMUEVSCj4+IGRp ZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL3N5bm9wc3lzL01ha2VmaWxlIGIvZHJp dmVycy9ncHUvZHJtL2JyaWRnZS9zeW5vcHN5cy9NYWtlZmlsZQo+PiBpbmRleCA5ZGMzNzZkMjIw YWQuLjRkYWRhNDQwMjlhYyAxMDA2NDQKPj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2JyaWRnZS9z eW5vcHN5cy9NYWtlZmlsZQo+PiArKysgYi9kcml2ZXJzL2dwdS9kcm0vYnJpZGdlL3N5bm9wc3lz L01ha2VmaWxlCj4+IEBAIC0xLDQgKzEsNSBAQAo+PiAgIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmll cjogR1BMLTIuMC1vbmx5Cj4+ICtvYmotJChDT05GSUdfRFJNX0RXX0RQKSArPSBkdy1kcC5vCj4+ ICBvYmotJChDT05GSUdfRFJNX0RXX0hETUkpICs9IGR3LWhkbWkubwo+PiAgb2JqLSQoQ09ORklH X0RSTV9EV19IRE1JX0FIQl9BVURJTykgKz0gZHctaGRtaS1haGItYXVkaW8ubwo+PiAgb2JqLSQo Q09ORklHX0RSTV9EV19IRE1JX0dQX0FVRElPKSArPSBkdy1oZG1pLWdwLWF1ZGlvLm8KPj4gZGlm ZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9icmlkZ2Uvc3lub3BzeXMvZHctZHAuYyBiL2RyaXZl cnMvZ3B1L2RybS9icmlkZ2Uvc3lub3BzeXMvZHctZHAuYwo+PiBuZXcgZmlsZSBtb2RlIDEwMDY0 NAo+PiBpbmRleCAwMDAwMDAwMDAwMDAuLjZlY2JlOTg1MTM2OQo+PiAtLS0gL2Rldi9udWxsCj4+ ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9icmlkZ2Uvc3lub3BzeXMvZHctZHAuYwo+PiBAQCAtMCww ICsxLDIxNTUgQEAKPj4gKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCj4+ICsv Kgo+PiArICogU3lub3BzeXMgRGVzaWduV2FyZSBDb3JlcyBEaXNwbGF5UG9ydCBUcmFuc21pdHRl ciBDb250cm9sbGVyCj4+ICsgKgo+PiArICogQ29weXJpZ2h0IChjKSAyMDI0IFJvY2tjaGlwIEVs ZWN0cm9uaWNzIENvLiwgTHRkLgo+PiArICoKPj4gKyAqIEF1dGhvcjogQW5keSBZYW4gPGFuZHku eWFuQHJvY2stY2hpcHMuY29tPgo+PiArICovCj4+ICsjaW5jbHVkZSA8bGludXgvYml0ZmllbGQu aD4KPj4gKyNpbmNsdWRlIDxsaW51eC9jbGsuaD4KPj4gKyNpbmNsdWRlIDxsaW51eC9jb21wb25l bnQuaD4KPj4gKyNpbmNsdWRlIDxsaW51eC9pb3BvbGwuaD4KPj4gKyNpbmNsdWRlIDxsaW51eC9p cnEuaD4KPj4gKyNpbmNsdWRlIDxsaW51eC9vZl9kZXZpY2UuaD4KPj4gKyNpbmNsdWRlIDxsaW51 eC9vZl9ncmFwaC5oPgo+PiArI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgo+PiAr I2luY2x1ZGUgPGxpbnV4L3JlZ21hcC5oPgo+PiArI2luY2x1ZGUgPGxpbnV4L3Jlc2V0Lmg+Cj4+ ICsjaW5jbHVkZSA8bGludXgvcGh5L3BoeS5oPgo+PiArI2luY2x1ZGUgPGxpbnV4L3VuYWxpZ25l ZC5oPgo+PiArCj4+ICsjaW5jbHVkZSA8ZHJtL2JyaWRnZS9kd19kcC5oPgo+PiArI2luY2x1ZGUg PGRybS9kcm1fYXRvbWljX2hlbHBlci5oPgo+PiArI2luY2x1ZGUgPGRybS9kcm1fYnJpZGdlLmg+ Cj4+ICsjaW5jbHVkZSA8ZHJtL2RybV9icmlkZ2VfY29ubmVjdG9yLmg+Cj4+ICsjaW5jbHVkZSA8 ZHJtL2Rpc3BsYXkvZHJtX2RwX2hlbHBlci5oPgo+PiArI2luY2x1ZGUgPGRybS9kaXNwbGF5L2Ry bV9oZG1pX2hlbHBlci5oPgo+PiArI2luY2x1ZGUgPGRybS9kcm1fZWRpZC5oPgo+PiArI2luY2x1 ZGUgPGRybS9kcm1fb2YuaD4KPj4gKyNpbmNsdWRlIDxkcm0vZHJtX3ByaW50Lmg+Cj4+ICsjaW5j bHVkZSA8ZHJtL2RybV9wcm9iZV9oZWxwZXIuaD4KPj4gKyNpbmNsdWRlIDxkcm0vZHJtX3NpbXBs ZV9rbXNfaGVscGVyLmg+Cj4+ICsKPj4gKyNpbmNsdWRlIDx1YXBpL2xpbnV4L21lZGlhLWJ1cy1m b3JtYXQuaD4KPj4gKwo+PiArI2RlZmluZSBEV19EUF9WRVJTSU9OX05VTUJFUgkJCTB4MDAwMAo+ PiArI2RlZmluZSBEV19EUF9WRVJTSU9OX1RZUEUJCQkweDAwMDQKPj4gKyNkZWZpbmUgRFdfRFBf SUQJCQkJCTB4MDAwOAo+PiArCj4+ICsjZGVmaW5lIERXX0RQX0NPTkZJR19SRUcxCQkJMHgwMTAw Cj4+ICsjZGVmaW5lIERXX0RQX0NPTkZJR19SRUcyCQkJMHgwMTA0Cj4+ICsjZGVmaW5lIERXX0RQ X0NPTkZJR19SRUczCQkJMHgwMTA4Cj4+ICsKPj4gKyNkZWZpbmUgRFdfRFBfQ0NUTAkJCQkweDAy MDAKPj4gKyNkZWZpbmUgRk9SQ0VfSFBECQkJCUJJVCg0KQo+PiArI2RlZmluZSBERUZBVUxUX0ZB U1RfTElOS19UUkFJTl9FTgkJQklUKDIpCj4+ICsjZGVmaW5lIEVOSEFOQ0VfRlJBTUlOR19FTgkJ CUJJVCgxKQo+PiArI2RlZmluZSBTQ1JBTUJMRV9ESVMJCQkJQklUKDApCj4+ICsjZGVmaW5lIERX X0RQX1NPRlRfUkVTRVRfQ1RSTAkJCTB4MDIwNAo+PiArI2RlZmluZSBWSURFT19SRVNFVAkJCQlC SVQoNSkKPj4gKyNkZWZpbmUgQVVYX1JFU0VUCQkJCUJJVCg0KQo+PiArI2RlZmluZSBBVURJT19T QU1QTEVSX1JFU0VUCQkJQklUKDMpCj4+ICsjZGVmaW5lIEhEQ1BfTU9EVUxFX1JFU0VUCQkJQklU KDIpCj4+ICsjZGVmaW5lIFBIWV9TT0ZUX1JFU0VUCQkJCUJJVCgxKQo+PiArI2RlZmluZSBDT05U Uk9MTEVSX1JFU0VUCQkJQklUKDApCj4+ICsKPj4gKyNkZWZpbmUgRFdfRFBfVlNBTVBMRV9DVFJM CQkJMHgwMzAwCj4+ICsjZGVmaW5lIFBJWEVMX01PREVfU0VMRUNUCQkJR0VOTUFTSygyMiwgMjEp Cj4+ICsjZGVmaW5lIFZJREVPX01BUFBJTkcJCQkJR0VOTUFTSygyMCwgMTYpCj4+ICsjZGVmaW5l IFZJREVPX1NUUkVBTV9FTkFCTEUJCQlCSVQoNSkKPj4gKwo+PiArI2RlZmluZSBEV19EUF9WU0FN UExFX1NUVUZGX0NUUkwxCQkweDAzMDQKPj4gKwo+PiArI2RlZmluZSBEV19EUF9WU0FNUExFX1NU VUZGX0NUUkwyCQkweDAzMDgKPj4gKwo+PiArI2RlZmluZSBEV19EUF9WSU5QVVRfUE9MQVJJVFlf Q1RSTAkJMHgwMzBjCj4+ICsjZGVmaW5lIERFX0lOX1BPTEFSSVRZCQkJCUJJVCgyKQo+PiArI2Rl ZmluZSBIU1lOQ19JTl9QT0xBUklUWQkJCUJJVCgxKQo+PiArI2RlZmluZSBWU1lOQ19JTl9QT0xB UklUWQkJCUJJVCgwKQo+PiArCj4+ICsjZGVmaW5lIERXX0RQX1ZJREVPX0NPTkZJRzEJCQkweDAz MTAKPj4gKyNkZWZpbmUgSEFDVElWRQkJCQkJR0VOTUFTSygzMSwgMTYpCj4+ICsjZGVmaW5lIEhC TEFOSwkJCQkJR0VOTUFTSygxNSwgMikKPj4gKyNkZWZpbmUgSV9QCQkJCQlCSVQoMSkKPj4gKyNk ZWZpbmUgUl9WX0JMQU5LX0lOX09TQwkJCUJJVCgwKQo+PiArCj4+ICsjZGVmaW5lIERXX0RQX1ZJ REVPX0NPTkZJRzIJCQkweDAzMTQKPj4gKyNkZWZpbmUgVkJMQU5LCQkJCQlHRU5NQVNLKDMxLCAx NikKPj4gKyNkZWZpbmUgVkFDVElWRQkJCQkJR0VOTUFTSygxNSwgMCkKPj4gKwo+PiArI2RlZmlu ZSBEV19EUF9WSURFT19DT05GSUczCQkJMHgwMzE4Cj4+ICsjZGVmaW5lIEhfU1lOQ19XSURUSAkJ CQlHRU5NQVNLKDMxLCAxNikKPj4gKyNkZWZpbmUgSF9GUk9OVF9QT1JDSAkJCQlHRU5NQVNLKDE1 LCAwKQo+PiArCj4+ICsjZGVmaW5lIERXX0RQX1ZJREVPX0NPTkZJRzQJCQkweDAzMWMKPj4gKyNk ZWZpbmUgVl9TWU5DX1dJRFRICQkJCUdFTk1BU0soMzEsIDE2KQo+PiArI2RlZmluZSBWX0ZST05U X1BPUkNICQkJCUdFTk1BU0soMTUsIDApCj4+ICsKPj4gKyNkZWZpbmUgRFdfRFBfVklERU9fQ09O RklHNQkJCTB4MDMyMAo+PiArI2RlZmluZSBJTklUX1RIUkVTSE9MRF9ISQkJCUdFTk1BU0soMjIs IDIxKQo+PiArI2RlZmluZSBBVkVSQUdFX0JZVEVTX1BFUl9UVV9GUkFDCQlHRU5NQVNLKDE5LCAx NikKPj4gKyNkZWZpbmUgSU5JVF9USFJFU0hPTEQJCQkJR0VOTUFTSygxMywgNykKPj4gKyNkZWZp bmUgQVZFUkFHRV9CWVRFU19QRVJfVFUJCQlHRU5NQVNLKDYsIDApCj4+ICsKPj4gKyNkZWZpbmUg RFdfRFBfVklERU9fTVNBMQkJCQkweDAzMjQKPj4gKyNkZWZpbmUgVlNUQVJUCQkJCQlHRU5NQVNL KDMxLCAxNikKPj4gKyNkZWZpbmUgSFNUQVJUCQkJCQlHRU5NQVNLKDE1LCAwKQo+PiArCj4+ICsj ZGVmaW5lIERXX0RQX1ZJREVPX01TQTIJCQkweDAzMjgKPj4gKyNkZWZpbmUgTUlTQzAJCQkJCUdF Tk1BU0soMzEsIDI0KQo+PiArCj4+ICsjZGVmaW5lIERXX0RQX1ZJREVPX01TQTMJCQkweDAzMmMK Pj4gKyNkZWZpbmUgTUlTQzEJCQkJCUdFTk1BU0soMzEsIDI0KQo+PiArCj4+ICsjZGVmaW5lIERX X0RQX1ZJREVPX0hCTEFOS19JTlRFUlZBTAkJMHgwMzMwCj4+ICsjZGVmaW5lIEhCTEFOS19JTlRF UlZBTF9FTgkJCUJJVCgxNikKPj4gKyNkZWZpbmUgSEJMQU5LX0lOVEVSVkFMCQkJCUdFTk1BU0so MTUsIDApCj4+ICsKPj4gKyNkZWZpbmUgRFdfRFBfQVVEX0NPTkZJRzEJCQkweDA0MDAKPj4gKyNk ZWZpbmUgQVVESU9fVElNRVNUQU1QX1ZFUlNJT05fTlVNCQlHRU5NQVNLKDI5LCAyNCkKPj4gKyNk ZWZpbmUgQVVESU9fUEFDS0VUX0lECQkJCUdFTk1BU0soMjMsIDE2KQo+PiArI2RlZmluZSBBVURJ T19NVVRFCQkJCUJJVCgxNSkKPj4gKyNkZWZpbmUgTlVNX0NIQU5ORUxTCQkJCUdFTk1BU0soMTQs IDEyKQo+PiArI2RlZmluZSBIQlJfTU9ERV9FTkFCTEUJCQkJQklUKDEwKQo+PiArI2RlZmluZSBB VURJT19EQVRBX1dJRFRICQkJR0VOTUFTSyg5LCA1KQo+PiArI2RlZmluZSBBVURJT19EQVRBX0lO X0VOCQkJR0VOTUFTSyg0LCAxKQo+PiArI2RlZmluZSBBVURJT19JTkZfU0VMRUNUCQkJQklUKDAp Cj4+ICsKPj4gKyNkZWZpbmUgRFdfRFBfU0RQX1ZFUlRJQ0FMX0NUUkwJCQkweDA1MDAKPj4gKyNk ZWZpbmUgRU5fVkVSVElDQUxfU0RQCQkJCUJJVCgyKQo+PiArI2RlZmluZSBFTl9BVURJT19TVFJF QU1fU0RQCQkJQklUKDEpCj4+ICsjZGVmaW5lIEVOX0FVRElPX1RJTUVTVEFNUF9TRFAJCQlCSVQo MCkKPj4gKyNkZWZpbmUgRFdfRFBfU0RQX0hPUklaT05UQUxfQ1RSTAkJMHgwNTA0Cj4+ICsjZGVm aW5lIEVOX0hPUklaT05UQUxfU0RQCQkJQklUKDIpCj4+ICsjZGVmaW5lIERXX0RQX1NEUF9TVEFU VVNfUkVHSVNURVIJCTB4MDUwOAo+PiArI2RlZmluZSBEV19EUF9TRFBfTUFOVUFMX0NUUkwJCQkw eDA1MGMKPj4gKyNkZWZpbmUgRFdfRFBfU0RQX1NUQVRVU19FTgkJCTB4MDUxMAo+PiArCj4+ICsj ZGVmaW5lIERXX0RQX1NEUF9SRUdJU1RFUl9CQU5LCQkJMHgwNjAwCj4+ICsjZGVmaW5lIFNEUF9S RUdTCQkJCUdFTk1BU0soMzEsIDApCj4+ICsKPj4gKyNkZWZpbmUgRFdfRFBfUEhZSUZfQ1RSTAkJ CTB4MGEwMAo+PiArI2RlZmluZSBQSFlfV0lEVEgJCQkJQklUKDI1KQo+PiArI2RlZmluZSBQSFlf UE9XRVJET1dOCQkJCUdFTk1BU0soMjAsIDE3KQo+PiArI2RlZmluZSBQSFlfQlVTWQkJCQlHRU5N QVNLKDE1LCAxMikKPj4gKyNkZWZpbmUgU1NDX0RJUwkJCQkJQklUKDE2KQo+PiArI2RlZmluZSBY TUlUX0VOQUJMRQkJCQlHRU5NQVNLKDExLCA4KQo+PiArI2RlZmluZSBQSFlfTEFORVMJCQkJR0VO TUFTSyg3LCA2KQo+PiArI2RlZmluZSBQSFlfUkFURQkJCQlHRU5NQVNLKDUsIDQpCj4+ICsjZGVm aW5lIFRQU19TRUwJCQkJCUdFTk1BU0soMywgMCkKPj4gKwo+PiArI2RlZmluZSBEV19EUF9QSFlf VFhfRVEJCQkJMHgwYTA0Cj4+ICsjZGVmaW5lIERXX0RQX0NVU1RPTVBBVDAJCQkweDBhMDgKPj4g KyNkZWZpbmUgRFdfRFBfQ1VTVE9NUEFUMQkJCTB4MGEwYwo+PiArI2RlZmluZSBEV19EUF9DVVNU T01QQVQyCQkJMHgwYTEwCj4+ICsjZGVmaW5lIERXX0RQX0hCUjJfQ09NUExJQU5DRV9TQ1JBTUJM RVJfUkVTRVQJMHgwYTE0Cj4+ICsjZGVmaW5lIERXX0RQX1BIWUlGX1BXUkRPV05fQ1RSTAkJMHgw YTE4Cj4+ICsKPj4gKyNkZWZpbmUgRFdfRFBfQVVYX0NNRAkJCQkweDBiMDAKPj4gKyNkZWZpbmUg QVVYX0NNRF9UWVBFCQkJCUdFTk1BU0soMzEsIDI4KQo+PiArI2RlZmluZSBBVVhfQUREUgkJCQlH RU5NQVNLKDI3LCA4KQo+PiArI2RlZmluZSBJMkNfQUREUl9PTkxZCQkJCUJJVCg0KQo+PiArI2Rl ZmluZSBBVVhfTEVOX1JFUQkJCQlHRU5NQVNLKDMsIDApCj4+ICsKPj4gKyNkZWZpbmUgRFdfRFBf QVVYX1NUQVRVUwkJCTB4MGIwNAo+PiArI2RlZmluZSBBVVhfVElNRU9VVAkJCQlCSVQoMTcpCj4+ ICsjZGVmaW5lIEFVWF9CWVRFU19SRUFECQkJCUdFTk1BU0soMjMsIDE5KQo+PiArI2RlZmluZSBB VVhfU1RBVFVTCQkJCUdFTk1BU0soNywgNCkKPj4gKwo+PiArI2RlZmluZSBEV19EUF9BVVhfREFU QTAJCQkJMHgwYjA4Cj4+ICsjZGVmaW5lIERXX0RQX0FVWF9EQVRBMQkJCQkweDBiMGMKPj4gKyNk ZWZpbmUgRFdfRFBfQVVYX0RBVEEyCQkJCTB4MGIxMAo+PiArI2RlZmluZSBEV19EUF9BVVhfREFU QTMJCQkJMHgwYjE0Cj4+ICsKPj4gKyNkZWZpbmUgRFdfRFBfR0VORVJBTF9JTlRFUlJVUFQJCQkw eDBkMDAKPj4gKyNkZWZpbmUgVklERU9fRklGT19PVkVSRkxPV19TVFJFQU0wCQlCSVQoNikKPj4g KyNkZWZpbmUgQVVESU9fRklGT19PVkVSRkxPV19TVFJFQU0wCQlCSVQoNSkKPj4gKyNkZWZpbmUg U0RQX0VWRU5UX1NUUkVBTTAJCQlCSVQoNCkKPj4gKyNkZWZpbmUgQVVYX0NNRF9JTlZBTElECQkJ CUJJVCgzKQo+PiArI2RlZmluZSBIRENQX0VWRU5UCQkJCUJJVCgyKQo+PiArI2RlZmluZSBBVVhf UkVQTFlfRVZFTlQJCQkJQklUKDEpCj4+ICsjZGVmaW5lIEhQRF9FVkVOVAkJCQlCSVQoMCkKPj4g Kwo+PiArI2RlZmluZSBEV19EUF9HRU5FUkFMX0lOVEVSUlVQVF9FTkFCTEUJCTB4MGQwNAo+PiAr I2RlZmluZSBIRENQX0VWRU5UX0VOCQkJCUJJVCgyKQo+PiArI2RlZmluZSBBVVhfUkVQTFlfRVZF TlRfRU4JCQlCSVQoMSkKPj4gKyNkZWZpbmUgSFBEX0VWRU5UX0VOCQkJCUJJVCgwKQo+PiArCj4+ ICsjZGVmaW5lIERXX0RQX0hQRF9TVEFUVVMJCQkweDBkMDgKPj4gKyNkZWZpbmUgSFBEX1NUQVRF CQkJCUdFTk1BU0soMTEsIDkpCj4+ICsjZGVmaW5lIEhQRF9TVEFUVVMJCQkJQklUKDgpCj4+ICsj ZGVmaW5lIEhQRF9IT1RfVU5QTFVHCQkJCUJJVCgyKQo+PiArI2RlZmluZSBIUERfSE9UX1BMVUcJ CQkJQklUKDEpCj4+ICsjZGVmaW5lIEhQRF9JUlEJCQkJCUJJVCgwKQo+PiArCj4+ICsjZGVmaW5l IERXX0RQX0hQRF9JTlRFUlJVUFRfRU5BQkxFCQkweDBkMGMKPj4gKyNkZWZpbmUgSFBEX1VOUExV R19FUlJfRU4JCQlCSVQoMykKPj4gKyNkZWZpbmUgSFBEX1VOUExVR19FTgkJCQlCSVQoMikKPj4g KyNkZWZpbmUgSFBEX1BMVUdfRU4JCQkJQklUKDEpCj4+ICsjZGVmaW5lIEhQRF9JUlFfRU4JCQkJ QklUKDApCj4+ICsKPj4gKyNkZWZpbmUgRFdfRFBfSERDUF9DRkcJCQkJMHgwZTAwCj4+ICsjZGVm aW5lIERQQ0QxMlBMVVMJCQkJQklUKDcpCj4+ICsjZGVmaW5lIENQX0lSUQkJCQkJQklUKDYpCj4+ ICsjZGVmaW5lIEJZUEVOQ1JZUFRJT04JCQkJQklUKDUpCj4+ICsjZGVmaW5lIEhEQ1BfTE9DSwkJ CQlCSVQoNCkKPj4gKyNkZWZpbmUgRU5DUllQVElPTkRJU0FCTEUJCQlCSVQoMykKPj4gKyNkZWZp bmUgRU5BQkxFX0hEQ1BfMTMJCQkJQklUKDIpCj4+ICsjZGVmaW5lIEVOQUJMRV9IRENQCQkJCUJJ VCgxKQo+PiArCj4+ICsjZGVmaW5lIERXX0RQX0hEQ1BfT0JTCQkJCTB4MGUwNAo+PiArI2RlZmlu ZSBIRENQMjJfUkVfQVVUSEVOVElDQVRJT05fUkVRCQlCSVQoMzEpCj4+ICsjZGVmaW5lIEhEQ1Ay Ml9BVVRIRU5USUNBVElPTl9GQUlMRUQJCUJJVCgzMCkKPj4gKyNkZWZpbmUgSERDUDIyX0FVVEhF TlRJQ0FUSU9OX1NVQ0NFU1MJCUJJVCgyOSkKPj4gKyNkZWZpbmUgSERDUDIyX0NBUEFCTEVfU0lO SwkJCUJJVCgyOCkKPj4gKyNkZWZpbmUgSERDUDIyX1NJTktfQ0FQX0NIRUNLX0NPTVBMRVRFCQlC SVQoMjcpCj4+ICsjZGVmaW5lIEhEQ1AyMl9TVEFURQkJCQlHRU5NQVNLKDI2LCAyNCkKPj4gKyNk ZWZpbmUgSERDUDIyX0JPT1RFRAkJCQlCSVQoMjMpCj4+ICsjZGVmaW5lIEhEQ1AxM19CU1RBVFVT CQkJCUdFTk1BU0soMjIsIDE5KQo+PiArI2RlZmluZSBSRVBFQVRFUgkJCQlCSVQoMTgpCj4+ICsj ZGVmaW5lIEhEQ1BfQ0FQQUJMRQkJCQlCSVQoMTcpCj4+ICsjZGVmaW5lIFNUQVRFRQkJCQkJR0VO TUFTSygxNiwgMTQpCj4+ICsjZGVmaW5lIFNUQVRFT0VHCQkJCUdFTk1BU0soMTMsIDExKQo+PiAr I2RlZmluZSBTVEFURVIJCQkJCUdFTk1BU0soMTAsIDgpCj4+ICsjZGVmaW5lIFNUQVRFQQkJCQkJ R0VOTUFTSyg3LCA0KQo+PiArI2RlZmluZSBTVUJTVEFURUEJCQkJR0VOTUFTSygzLCAxKQo+PiAr I2RlZmluZSBIRENQRU5HQUdFRAkJCQlCSVQoMCkKPj4gKwo+PiArI2RlZmluZSBEV19EUF9IRENQ X0FQSUlOVENMUgkJCTB4MGUwOAo+PiArI2RlZmluZSBEV19EUF9IRENQX0FQSUlOVFNUQVQJCQkw eDBlMGMKPj4gKyNkZWZpbmUgRFdfRFBfSERDUF9BUElJTlRNU0sJCQkweDBlMTAKPj4gKyNkZWZp bmUgSERDUDIyX0dQSU9JTlQJCQkJQklUKDgpCj4+ICsjZGVmaW5lIEhEQ1BfRU5HQUdFRAkJCQlC SVQoNykKPj4gKyNkZWZpbmUgSERDUF9GQUlMRUQJCQkJQklUKDYpCj4+ICsjZGVmaW5lIEtTVlNI QTFDQUxDRE9ORUlOVAkJCUJJVCg1KQo+PiArI2RlZmluZSBBVVhSRVNQTkFDSzdUSU1FUwkJCUJJ VCg0KQo+PiArI2RlZmluZSBBVVhSRVNQVElNRU9VVAkJCQlCSVQoMykKPj4gKyNkZWZpbmUgQVVY UkVTUERFRkVSN1RJTUVTCQkJQklUKDIpCj4+ICsjZGVmaW5lIEtTVkFDQ0VTU0lOVAkJCQlCSVQo MCkKPj4gKwo+PiArI2RlZmluZSBEV19EUF9IRENQX0tTVk1FTUNUUkwJCQkweDBlMTgKPj4gKyNk ZWZpbmUgS1NWU0hBMVNUQVRVUwkJCQlCSVQoNCkKPj4gKyNkZWZpbmUgS1NWTUVNQUNDRVNTCQkJ CUJJVCgxKQo+PiArI2RlZmluZSBLU1ZNRU1SRVFVRVNUCQkJCUJJVCgwKQo+PiArCj4+ICsjZGVm aW5lIERXX0RQX0hEQ1BfUkVHX0JLU1YwCQkJMHgzNjAwCj4+ICsjZGVmaW5lIERXX0RQX0hEQ1Bf UkVHX0JLU1YxCQkJMHgzNjA0Cj4+ICsjZGVmaW5lIERXX0RQX0hEQ1BfUkVHX0FOQ09ORgkJCTB4 MzYwOAo+PiArI2RlZmluZSBBTl9CWVBBU1MJCQkJQklUKDApCj4+ICsKPj4gKyNkZWZpbmUgRFdf RFBfSERDUF9SRUdfQU4wCQkJMHgzNjBjCj4+ICsjZGVmaW5lIERXX0RQX0hEQ1BfUkVHX0FOMQkJ CTB4MzYxMAo+PiArI2RlZmluZSBEV19EUF9IRENQX1JFR19STUxDVEwJCQkweDM2MTQKPj4gKyNk ZWZpbmUgT0RQS19ERUNSWVBUX0VOQUJMRQkJCUJJVCgwKQo+PiArCj4+ICsjZGVmaW5lIERXX0RQ X0hEQ1BfUkVHX1JNTFNUUwkJCTB4MzYxOAo+PiArI2RlZmluZSBJRFBLX1dSX09LX1NUUwkJCQlC SVQoNikKPj4gKyNkZWZpbmUJSURQS19EQVRBX0lOREVYCQkJCUdFTk1BU0soNSwgMCkKPj4gKyNk ZWZpbmUgRFdfRFBfSERDUF9SRUdfU0VFRAkJCTB4MzYxYwo+PiArI2RlZmluZSBEV19EUF9IRENQ X1JFR19EUEswCQkJMHgzNjIwCj4+ICsjZGVmaW5lIERXX0RQX0hEQ1BfUkVHX0RQSzEJCQkweDM2 MjQKPj4gKyNkZWZpbmUgRFdfRFBfSERDUDIyX0dQSU9TVFMJCQkweDM2MjgKPj4gKyNkZWZpbmUg RFdfRFBfSERDUDIyX0dQSU9DSE5HU1RTCQkweDM2MmMKPj4gKyNkZWZpbmUgRFdfRFBfSERDUF9S RUdfRFBLX0NSQwkJCTB4MzYzMAo+PiArCj4+ICsjZGVmaW5lIERXX0RQX01BWF9SRUdJU1RFUgkJ CURXX0RQX0hEQ1BfUkVHX0RQS19DUkMKPj4gKwo+PiArI2RlZmluZSBTRFBfUkVHX0JBTktfU0la RQkJCTE2Cj4+ICsKPj4gK3N0cnVjdCBkd19kcF9saW5rX2NhcHMgewo+PiArCWJvb2wgZW5oYW5j ZWRfZnJhbWluZzsKPj4gKwlib29sIHRwczNfc3VwcG9ydGVkOwo+PiArCWJvb2wgdHBzNF9zdXBw b3J0ZWQ7Cj4+ICsJYm9vbCBmYXN0X3RyYWluaW5nOwo+PiArCWJvb2wgY2hhbm5lbF9jb2Rpbmc7 Cj4+ICsJYm9vbCBzc2M7Cj4+ICt9Owo+PiArCj4+ICtzdHJ1Y3QgZHdfZHBfbGlua190cmFpbl9z ZXQgewo+PiArCXVuc2lnbmVkIGludCB2b2x0YWdlX3N3aW5nWzRdOwo+PiArCXVuc2lnbmVkIGlu dCBwcmVfZW1waGFzaXNbNF07Cj4+ICsJYm9vbCB2b2x0YWdlX21heF9yZWFjaGVkWzRdOwo+PiAr CWJvb2wgcHJlX21heF9yZWFjaGVkWzRdOwo+PiArfTsKPj4gKwo+PiArc3RydWN0IGR3X2RwX2xp bmtfdHJhaW4gewo+PiArCXN0cnVjdCBkd19kcF9saW5rX3RyYWluX3NldCByZXF1ZXN0Owo+PiAr CXN0cnVjdCBkd19kcF9saW5rX3RyYWluX3NldCBhZGp1c3Q7Cj4+ICsJYm9vbCBjbG9ja19yZWNv dmVyZWQ7Cj4+ICsJYm9vbCBjaGFubmVsX2VxdWFsaXplZDsKPj4gK307Cj4+ICsKPj4gK3N0cnVj dCBkd19kcF9saW5rIHsKPj4gKwl1OCBkcGNkW0RQX1JFQ0VJVkVSX0NBUF9TSVpFXTsKPj4gKwl1 bnNpZ25lZCBjaGFyIHJldmlzaW9uOwo+PiArCXVuc2lnbmVkIGludCByYXRlOwo+PiArCXVuc2ln bmVkIGludCBsYW5lczsKPj4gKwl1OCBzaW5rX2NvdW50Owo+PiArCXU4IHZzY19zZHBfc3VwcG9y dGVkOwo+PiArCXN0cnVjdCBkd19kcF9saW5rX2NhcHMgY2FwczsKPj4gKwlzdHJ1Y3QgZHdfZHBf bGlua190cmFpbiB0cmFpbjsKPj4gKwlzdHJ1Y3QgZHJtX2RwX2Rlc2MgZGVzYzsKPj4gK307Cj4+ ICsKPj4gK3N0cnVjdCBkd19kcF92aWRlbyB7Cj4+ICsJc3RydWN0IGRybV9kaXNwbGF5X21vZGUg bW9kZTsKPj4gKwl1OCB2aWRlb19tYXBwaW5nOwo+PiArCXU4IHBpeGVsX21vZGU7Cj4+ICsJdTgg Y29sb3JfZm9ybWF0Owo+PiArCXU4IGJwYzsKPj4gKwl1OCBicHA7Cj4+ICt9Owo+PiArCj4+ICtz dHJ1Y3QgZHdfZHBfc2RwIHsKPj4gKwlzdHJ1Y3QgZHBfc2RwX2hlYWRlciBoZWFkZXI7Cj4+ICsJ dTggZGJbMzJdOwo+Cj5zdHJ1Y3QgZHBfc2RwLCBwbGVhc2UKCk9rLCB3aWxsIGRvLgoKPgo+PiAr CXVuc2lnbmVkIGxvbmcgZmxhZ3M7Cj4+ICt9Owo+PiArCj4+ICtzdHJ1Y3QgZHdfZHBfaG90cGx1 ZyB7Cj4+ICsJYm9vbCBsb25nX2hwZDsKPj4gK307Cj4+ICsKPj4gK3N0cnVjdCBkd19kcCB7Cj4+ ICsJc3RydWN0IGRybV9icmlkZ2UgYnJpZGdlOwo+PiArCXN0cnVjdCBkZXZpY2UgKmRldjsKPj4g KwlzdHJ1Y3QgcmVnbWFwICpyZWdtYXA7Cj4+ICsJc3RydWN0IHBoeSAqcGh5Owo+PiArCXN0cnVj dCBjbGsgKmFwYl9jbGs7Cj4+ICsJc3RydWN0IGNsayAqYXV4X2NsazsKPj4gKwlzdHJ1Y3QgY2xr ICppMnNfY2xrOwo+PiArCXN0cnVjdCBjbGsgKnNwZGlmX2NsazsKPj4gKwlzdHJ1Y3QgY2xrICpo ZGNwX2NsazsKPj4gKwlzdHJ1Y3QgcmVzZXRfY29udHJvbCAqcnN0YzsKPj4gKwlzdHJ1Y3QgY29t cGxldGlvbiBjb21wbGV0ZTsKPj4gKwlpbnQgaXJxOwo+PiArCXN0cnVjdCB3b3JrX3N0cnVjdCBo cGRfd29yazsKPj4gKwlzdHJ1Y3QgZHdfZHBfaG90cGx1ZyBob3RwbHVnOwo+PiArCXN0cnVjdCBt dXRleCBpcnFfbG9jazsKPj4gKwo+PiArCXN0cnVjdCBkcm1fZHBfYXV4IGF1eDsKPj4gKwo+PiAr CXN0cnVjdCBkd19kcF9saW5rIGxpbms7Cj4+ICsJc3RydWN0IGR3X2RwX3ZpZGVvIHZpZGVvOwo+ PiArCWNvbnN0IHN0cnVjdCBkd19kcF9wbGF0X2RhdGEgKnBsYXRfZGF0YTsKPj4gKwo+PiArCURF Q0xBUkVfQklUTUFQKHNkcF9yZWdfYmFuaywgU0RQX1JFR19CQU5LX1NJWkUpOwo+PiArfTsKPj4g Kwo+PiArZW51bSB7Cj4+ICsJRFdfRFBfUkdCXzZCSVQsCj4+ICsJRFdfRFBfUkdCXzhCSVQsCj4+ ICsJRFdfRFBfUkdCXzEwQklULAo+PiArCURXX0RQX1JHQl8xMkJJVCwKPj4gKwlEV19EUF9SR0Jf MTZCSVQsCj4+ICsJRFdfRFBfWUNCQ1I0NDRfOEJJVCwKPj4gKwlEV19EUF9ZQ0JDUjQ0NF8xMEJJ VCwKPj4gKwlEV19EUF9ZQ0JDUjQ0NF8xMkJJVCwKPj4gKwlEV19EUF9ZQ0JDUjQ0NF8xNkJJVCwK Pj4gKwlEV19EUF9ZQ0JDUjQyMl84QklULAo+PiArCURXX0RQX1lDQkNSNDIyXzEwQklULAo+PiAr CURXX0RQX1lDQkNSNDIyXzEyQklULAo+PiArCURXX0RQX1lDQkNSNDIyXzE2QklULAo+PiArCURX X0RQX1lDQkNSNDIwXzhCSVQsCj4+ICsJRFdfRFBfWUNCQ1I0MjBfMTBCSVQsCj4+ICsJRFdfRFBf WUNCQ1I0MjBfMTJCSVQsCj4+ICsJRFdfRFBfWUNCQ1I0MjBfMTZCSVQsCj4+ICt9Owo+PiArCj4+ ICtlbnVtIHsKPj4gKwlEV19EUF9NUF9TSU5HTEVfUElYRUwsCj4+ICsJRFdfRFBfTVBfRFVBTF9Q SVhFTCwKPj4gKwlEV19EUF9NUF9RVUFEX1BJWEVMLAo+PiArfTsKPj4gKwo+PiArZW51bSB7Cj4+ ICsJRFdfRFBfU0RQX1ZFUlRJQ0FMX0lOVEVSVkFMID0gQklUKDApLAo+PiArCURXX0RQX1NEUF9I T1JJWk9OVEFMX0lOVEVSVkFMID0gQklUKDEpLAo+PiArfTsKPj4gKwo+PiArZW51bSB7Cj4+ICsJ RFdfRFBfSFBEX1NUQVRFX0lETEUsCj4+ICsJRFdfRFBfSFBEX1NUQVRFX1VOUExVRywKPj4gKwlE UF9EUF9IUERfU1RBVEVfVElNRU9VVCA9IDQsCj4+ICsJRFdfRFBfSFBEX1NUQVRFX1BMVUcgPSA3 Cj4+ICt9Owo+PiArCj4+ICtlbnVtIHsKPj4gKwlEV19EUF9QSFlfUEFUVEVSTl9OT05FLAo+PiAr CURXX0RQX1BIWV9QQVRURVJOX1RQU18xLAo+PiArCURXX0RQX1BIWV9QQVRURVJOX1RQU18yLAo+ PiArCURXX0RQX1BIWV9QQVRURVJOX1RQU18zLAo+PiArCURXX0RQX1BIWV9QQVRURVJOX1RQU180 LAo+PiArCURXX0RQX1BIWV9QQVRURVJOX1NFUk0sCj4+ICsJRFdfRFBfUEhZX1BBVFRFUk5fUEJS UzcsCj4+ICsJRFdfRFBfUEhZX1BBVFRFUk5fQ1VTVE9NXzgwQklULAo+PiArCURXX0RQX1BIWV9Q QVRURVJOX0NQMjUyMF8xLAo+PiArCURXX0RQX1BIWV9QQVRURVJOX0NQMjUyMF8yLAo+PiArfTsK Pj4gKwo+PiArc3RydWN0IGR3X2RwX291dHB1dF9mb3JtYXQgewo+PiArCXUzMiBidXNfZm9ybWF0 Owo+PiArCXUzMiBjb2xvcl9mb3JtYXQ7Cj4+ICsJdTggdmlkZW9fbWFwcGluZzsKPj4gKwl1OCBi cGM7Cj4+ICsJdTggYnBwOwo+PiArfTsKPj4gKwo+PiArc3RhdGljIGNvbnN0IHN0cnVjdCBkd19k cF9vdXRwdXRfZm9ybWF0IGR3X2RwX291dHB1dF9mb3JtYXRzW10gPSB7Cj4+ICsJeyBNRURJQV9C VVNfRk1UX1JHQjEwMTAxMF8xWDMwLCBEUk1fQ09MT1JfRk9STUFUX1JHQjQ0NCwgRFdfRFBfUkdC XzEwQklULCAxMCwgMzAgfSwKPj4gKwl7IE1FRElBX0JVU19GTVRfUkdCODg4XzFYMjQsIERSTV9D T0xPUl9GT1JNQVRfUkdCNDQ0LCBEV19EUF9SR0JfOEJJVCwgOCwgMjQgfSwKPj4gKwl7IE1FRElB X0JVU19GTVRfWVVWMTBfMVgzMCwgRFJNX0NPTE9SX0ZPUk1BVF9ZQ0JDUjQ0NCwgRFdfRFBfWUNC Q1I0NDRfMTBCSVQsIDEwLCAzMCB9LAo+PiArCXsgTUVESUFfQlVTX0ZNVF9ZVVY4XzFYMjQsIERS TV9DT0xPUl9GT1JNQVRfWUNCQ1I0NDQsIERXX0RQX1lDQkNSNDQ0XzhCSVQsIDgsIDI0fSwKPj4g Kwl7IE1FRElBX0JVU19GTVRfWVVZVjEwXzFYMjAsIERSTV9DT0xPUl9GT1JNQVRfWUNCQ1I0MjIs IERXX0RQX1lDQkNSNDIyXzEwQklULCAxMCwgMjAgfSwKPj4gKwl7IE1FRElBX0JVU19GTVRfWVVZ VjhfMVgxNiwgRFJNX0NPTE9SX0ZPUk1BVF9ZQ0JDUjQyMiwgRFdfRFBfWUNCQ1I0MjJfOEJJVCwg OCwgMTYgfSwKPj4gKwl7IE1FRElBX0JVU19GTVRfVVlZVllZMTBfMF81WDMwLCBEUk1fQ09MT1Jf Rk9STUFUX1lDQkNSNDIwLCBEV19EUF9ZQ0JDUjQyMF8xMEJJVCwgMTAsIDE1IH0sCj4+ICsJeyBN RURJQV9CVVNfRk1UX1VZWVZZWThfMF81WDI0LCBEUk1fQ09MT1JfRk9STUFUX1lDQkNSNDIwLCBE V19EUF9ZQ0JDUjQyMF84QklULCA4LCAxMiB9LAo+PiArCXsgTUVESUFfQlVTX0ZNVF9SR0I2NjZf MVgyNF9DUEFESEksIERSTV9DT0xPUl9GT1JNQVRfUkdCNDQ0LCBEV19EUF9SR0JfNkJJVCwgNiwg MTggfSwKPj4gK307Cj4+ICsKPj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZHdfZHBfb3V0cHV0X2Zv cm1hdCAqZHdfZHBfZ2V0X291dHB1dF9mb3JtYXQodTMyIGJ1c19mb3JtYXQpCj4+ICt7Cj4+ICsJ dW5zaWduZWQgaW50IGk7Cj4+ICsKPj4gKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShkd19k cF9vdXRwdXRfZm9ybWF0cyk7IGkrKykKPj4gKwkJaWYgKGR3X2RwX291dHB1dF9mb3JtYXRzW2ld LmJ1c19mb3JtYXQgPT0gYnVzX2Zvcm1hdCkKPj4gKwkJCXJldHVybiAmZHdfZHBfb3V0cHV0X2Zv cm1hdHNbaV07Cj4+ICsKPj4gKwlyZXR1cm4gJmR3X2RwX291dHB1dF9mb3JtYXRzWzFdOwo+Cj5X aHk/IFNob3VsZG4ndCBpdCBiZSBOVUxMPwoKQXQgZmlyc3QsIHdlIGNvbnNpZGVyZWQgUkdCODg4 XzFYMjQgIHRvIGJlIHVuaXZlcnNhbGx5IGFwcGxpY2FibGUgYWNyb3NzIGFsbCBzY2VuYXJpb3Ms IApidXQgdXBvbiByZS1ldmFsdWF0aW9uLCB0aGlzIGFzc3VtcHRpb24gcHJvdmVkIGluYWNjdXJh dGUuIFNwZWNpZmljYWxseSwgUkdCODg4IG1heQplbmNvdW50ZXIgYmFuZHdpZHRoIGxpbWl0YXRp b25zIGluIGhpZ2gtcmVzb2x1dGlvbiBvciBoaWdoLXJlZnJlc2gtcmF0ZSBlbnZpcm9ubWVudHMK ClNvIHJldHVybmluZyBOVUxMIHdvdWxkIGJlIG1vcmUgYXBwcm9wcmlhdGUgaGVyZS4KCj4KPj4g K30KPj4gKwo+PiArc3RhdGljIGlubGluZSBzdHJ1Y3QgZHdfZHAgKmJyaWRnZV90b19kcChzdHJ1 Y3QgZHJtX2JyaWRnZSAqYikKPj4gK3sKPj4gKwlyZXR1cm4gY29udGFpbmVyX29mKGIsIHN0cnVj dCBkd19kcCwgYnJpZGdlKTsKPj4gK30KPj4gKwo+PiArc3RhdGljIGlubGluZSB2b2lkIGR3X2Rw X3BoeV9zZXRfcGF0dGVybihzdHJ1Y3QgZHdfZHAgKmRwLCB1MzIgcGF0dGVybikKPj4gK3sKPj4g KwlyZWdtYXBfdXBkYXRlX2JpdHMoZHAtPnJlZ21hcCwgRFdfRFBfUEhZSUZfQ1RSTCwgVFBTX1NF TCwKPj4gKwkJCSAgIEZJRUxEX1BSRVAoVFBTX1NFTCwgcGF0dGVybikpOwo+PiArfQo+PiArCj4+ ICtzdGF0aWMgdm9pZCBkd19kcF9waHlfeG1pdF9lbmFibGUoc3RydWN0IGR3X2RwICpkcCwgdTMy IGxhbmVzKQo+PiArewo+PiArCXUzMiB4bWl0X2VuYWJsZTsKPj4gKwo+PiArCXN3aXRjaCAobGFu ZXMpIHsKPj4gKwljYXNlIDQ6Cj4+ICsJY2FzZSAyOgo+PiArCWNhc2UgMToKPj4gKwkJeG1pdF9l bmFibGUgPSBHRU5NQVNLKGxhbmVzIC0gMSwgMCk7Cj4+ICsJCWJyZWFrOwo+PiArCWNhc2UgMDoK Pj4gKwlkZWZhdWx0Ogo+PiArCQl4bWl0X2VuYWJsZSA9IDA7Cj4+ICsJCWJyZWFrOwo+PiArCX0K Pj4gKwo+PiArCXJlZ21hcF91cGRhdGVfYml0cyhkcC0+cmVnbWFwLCBEV19EUF9QSFlJRl9DVFJM LCBYTUlUX0VOQUJMRSwKPj4gKwkJCSAgIEZJRUxEX1BSRVAoWE1JVF9FTkFCTEUsIHhtaXRfZW5h YmxlKSk7Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyBib29sIGR3X2RwX2JhbmR3aWR0aF9vayhzdHJ1 Y3QgZHdfZHAgKmRwLAo+PiArCQkJICAgICAgIGNvbnN0IHN0cnVjdCBkcm1fZGlzcGxheV9tb2Rl ICptb2RlLCB1MzIgYnBwLAo+PiArCQkJICAgICAgIHVuc2lnbmVkIGludCBsYW5lcywgdW5zaWdu ZWQgaW50IHJhdGUpCj4+ICt7Cj4+ICsJdTMyIG1heF9idywgcmVxX2J3Owo+PiArCj4+ICsJcmVx X2J3ID0gbW9kZS0+Y2xvY2sgKiBicHAgLyA4Owo+PiArCW1heF9idyA9IGxhbmVzICogcmF0ZTsK Pj4gKwlpZiAocmVxX2J3ID4gbWF4X2J3KQo+PiArCQlyZXR1cm4gZmFsc2U7Cj4+ICsKPj4gKwly ZXR1cm4gdHJ1ZTsKPj4gK30KPj4gKwo+PiArc3RhdGljIGJvb2wgZHdfZHBfaHBkX2RldGVjdChz dHJ1Y3QgZHdfZHAgKmRwKQo+PiArewo+PiArCXUzMiB2YWx1ZTsKPj4gKwo+PiArCXJlZ21hcF9y ZWFkKGRwLT5yZWdtYXAsIERXX0RQX0hQRF9TVEFUVVMsICZ2YWx1ZSk7Cj4+ICsKPj4gKwlyZXR1 cm4gRklFTERfR0VUKEhQRF9TVEFURSwgdmFsdWUpID09IERXX0RQX0hQRF9TVEFURV9QTFVHOwo+ PiArfQo+PiArCj4+ICtzdGF0aWMgdm9pZCBkd19kcF9saW5rX2NhcHNfcmVzZXQoc3RydWN0IGR3 X2RwX2xpbmtfY2FwcyAqY2FwcykKPj4gK3sKPj4gKwljYXBzLT5lbmhhbmNlZF9mcmFtaW5nID0g ZmFsc2U7Cj4+ICsJY2Fwcy0+dHBzM19zdXBwb3J0ZWQgPSBmYWxzZTsKPj4gKwljYXBzLT50cHM0 X3N1cHBvcnRlZCA9IGZhbHNlOwo+PiArCWNhcHMtPmZhc3RfdHJhaW5pbmcgPSBmYWxzZTsKPj4g KwljYXBzLT5jaGFubmVsX2NvZGluZyA9IGZhbHNlOwo+PiArfQo+PiArCj4+ICtzdGF0aWMgdm9p ZCBkd19kcF9saW5rX3Jlc2V0KHN0cnVjdCBkd19kcF9saW5rICpsaW5rKQo+PiArewo+PiArCWxp bmstPnZzY19zZHBfc3VwcG9ydGVkID0gMDsKPj4gKwlsaW5rLT5zaW5rX2NvdW50ID0gMDsKPj4g KwlsaW5rLT5yZXZpc2lvbiA9IDA7Cj4+ICsJbGluay0+cmF0ZSA9IDA7Cj4+ICsJbGluay0+bGFu ZXMgPSAwOwo+PiArCj4+ICsJZHdfZHBfbGlua19jYXBzX3Jlc2V0KCZsaW5rLT5jYXBzKTsKPj4g KwltZW1zZXQobGluay0+ZHBjZCwgMCwgc2l6ZW9mKGxpbmstPmRwY2QpKTsKPj4gK30KPj4gKwo+ PiArc3RhdGljIGludCBkd19kcF9saW5rX3Bvd2VyX3VwKHN0cnVjdCBkd19kcCAqZHApCj4+ICt7 Cj4+ICsJc3RydWN0IGR3X2RwX2xpbmsgKmxpbmsgPSAmZHAtPmxpbms7Cj4+ICsJaW50IHJldDsK Pj4gKwl1OCB2YWx1ZTsKPj4gKwo+PiArCWlmIChsaW5rLT5yZXZpc2lvbiA8IERQX0RQQ0RfUkVW XzExKQo+PiArCQlyZXR1cm4gMDsKPj4gKwo+PiArCXJldCA9IGRybV9kcF9kcGNkX3JlYWRiKCZk cC0+YXV4LCBEUF9TRVRfUE9XRVIsICZ2YWx1ZSk7Cj4+ICsJaWYgKHJldCA8IDApCj4+ICsJCXJl dHVybiByZXQ7Cj4+ICsKPj4gKwl2YWx1ZSAmPSB+RFBfU0VUX1BPV0VSX01BU0s7Cj4+ICsJdmFs dWUgfD0gRFBfU0VUX1BPV0VSX0QwOwo+PiArCj4+ICsJcmV0ID0gZHJtX2RwX2RwY2Rfd3JpdGVi KCZkcC0+YXV4LCBEUF9TRVRfUE9XRVIsIHZhbHVlKTsKPj4gKwlpZiAocmV0IDwgMCkKPj4gKwkJ cmV0dXJuIHJldDsKPj4gKwo+PiArCXVzbGVlcF9yYW5nZSgxMDAwLCAyMDAwKTsKPj4gKwo+PiAr CXJldHVybiAwOwo+PiArfQo+PiArCj4+ICtzdGF0aWMgaW50IGR3X2RwX2xpbmtfcG93ZXJfZG93 bihzdHJ1Y3QgZHdfZHAgKmRwKQo+PiArewo+PiArCXN0cnVjdCBkd19kcF9saW5rICpsaW5rID0g JmRwLT5saW5rOwo+PiArCWludCByZXQ7Cj4+ICsJdTggdmFsdWU7Cj4+ICsKPj4gKwlpZiAobGlu ay0+cmV2aXNpb24gPCBEUF9EUENEX1JFVl8xMSkKPj4gKwkJcmV0dXJuIDA7Cj4+ICsKPj4gKwly ZXQgPSBkcm1fZHBfZHBjZF9yZWFkYigmZHAtPmF1eCwgRFBfU0VUX1BPV0VSLCAmdmFsdWUpOwo+ PiArCWlmIChyZXQgPCAwKQo+PiArCQlyZXR1cm4gcmV0Owo+PiArCj4+ICsJdmFsdWUgJj0gfkRQ X1NFVF9QT1dFUl9NQVNLOwo+PiArCXZhbHVlIHw9IERQX1NFVF9QT1dFUl9EMzsKPj4gKwo+PiAr CXJldCA9IGRybV9kcF9kcGNkX3dyaXRlYigmZHAtPmF1eCwgRFBfU0VUX1BPV0VSLCB2YWx1ZSk7 Cj4+ICsJaWYgKHJldCA8IDApCj4+ICsJCXJldHVybiByZXQ7Cj4+ICsKPgo+V291bGQgeW91IHBs ZWFzZSBtaW5kIHB1bGxpbmcgdGhlc2UgdHdvIGZ1bmN0aW9ucyB0byBEUk0gRFAgaGVscGVycz8K PlRoZXJlIGFyZSBlbm91Z2ggdXNlcnMgdG8gbWFrZSB0aGlzIGludG8gYSBjb21tb24gY29kZS4K Clllcywgd2hlbiBkZXZlbG9waW5nIHRoaXMgcGF0Y2gsIEkgaGFkIHRoZSBzYW1lIHJlYWxpemF0 aW9uLiAKVGhlIHByb2Nlc3NpbmcgbG9naWMgZm9yIE1TTS9DYWRlbmNlL0FOWDYzNDUvdGVncmEg Zm9sbG93cwphIHNpbWlsYXIgYXBwcm9hY2guCkkgaGFkIG9yaWdpbmFsbHkgcGxhbm5lZCB0byBk ZWZlciB0aGlzIHJlZmFjdG9yaW5nIHVudGlsIHRoZSBzZXJpZXMgb2YgcGF0Y2hlcyBpcyBhY2Nl cHRlZC4gCkFkZGl0aW9uYWxseSwgSSBoYXZlIG90aGVyIHBlbmRpbmcgdGFza3MgaW4gbXkgVE9E TyBsaXN0LCBzdWNoIGFzIGZ1bGx5IGRlY291cGxpbmcgdGhlIApicmlkZ2UgZHJpdmVyIGFuZCBl bmNvZGVyL2Nvbm5lY3RvciBjb21wb25lbnRzIGFjcm9zcyBhbGwgUm9ja2NoaXAgcGxhdGZvcm1z 44CCCkJ1dCBJIHByaW9yaXRpemUgY29tcGxldGluZyB0aGVzZSBmb3VuZGF0aW9uYWwgZmVhdHVy ZXMgYmVmb3JlIGdvIHRvIG5leHQgc3RlcHMsCklzIHRoaXMgYWNjZXB0YWJsZSDvvJ8KCj4KPj4g KwlyZXR1cm4gMDsKPj4gK30KPj4gKwo+PiArc3RhdGljIGJvb2wgZHdfZHBfaGFzX3NpbmtfY291 bnQoY29uc3QgdTggZHBjZFtEUF9SRUNFSVZFUl9DQVBfU0laRV0sCj4+ICsJCQkJIGNvbnN0IHN0 cnVjdCBkcm1fZHBfZGVzYyAqZGVzYykKPj4gK3sKPj4gKwlyZXR1cm4gZHBjZFtEUF9EUENEX1JF Vl0gPj0gRFBfRFBDRF9SRVZfMTEgJiYKPj4gKwkgICAgICAgZHBjZFtEUF9ET1dOU1RSRUFNUE9S VF9QUkVTRU5UXSAmIERQX0RXTl9TVFJNX1BPUlRfUFJFU0VOVCAmJgo+PiArCSAgICAgICAhZHJt X2RwX2hhc19xdWlyayhkZXNjLCBEUF9EUENEX1FVSVJLX05PX1NJTktfQ09VTlQpOwo+Cj4KPmlz bid0IGl0IGRybV9kcF9yZWFkX3NpbmtfY291bnRfY2FwKCkgPwoKSSB3aWxsIGhhdmUgYSB0cnks IHNpbmNlIHRoaXMgZHJtX2RwX3JlYWRfc2lua19jb3VudF9jYXAgcmVxdWlyZXMgYSBjb25uZWN0 b3IgcGFyYW1ldGVyLCAKSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IHRvIGdldCB0aGUgY29ubmVj dG9yIGhlcmUuCgo+Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyBpbnQgZHdfZHBfbGlua19wYXJzZShz dHJ1Y3QgZHdfZHAgKmRwKQo+PiArewo+PiArCXN0cnVjdCBkd19kcF9saW5rICpsaW5rID0gJmRw LT5saW5rOwo+PiArCXU4IGRwY2Q7Cj4+ICsJaW50IHJldDsKPj4gKwo+PiArCWR3X2RwX2xpbmtf cmVzZXQobGluayk7Cj4+ICsKPj4gKwlyZXQgPSBkcm1fZHBfcmVhZF9kcGNkX2NhcHMoJmRwLT5h dXgsIGxpbmstPmRwY2QpOwo+PiArCWlmIChyZXQgPCAwKQo+PiArCQlyZXR1cm4gcmV0Owo+PiAr Cj4+ICsJZHJtX2RwX3JlYWRfZGVzYygmZHAtPmF1eCwgJmxpbmstPmRlc2MsIGRybV9kcF9pc19i cmFuY2gobGluay0+ZHBjZCkpOwo+PiArCj4+ICsJaWYgKGR3X2RwX2hhc19zaW5rX2NvdW50KGxp bmstPmRwY2QsICZsaW5rLT5kZXNjKSkgewo+PiArCQlyZXQgPSBkcm1fZHBfcmVhZF9zaW5rX2Nv dW50KCZkcC0+YXV4KTsKPj4gKwkJaWYgKHJldCA8IDApCj4+ICsJCQlyZXR1cm4gcmV0Owo+PiAr Cj4+ICsJCWxpbmstPnNpbmtfY291bnQgPSByZXQ7Cj4+ICsKPj4gKwkJLyogRG9uZ2xlIGNvbm5l Y3RlZCwgYnV0IG5vIGRpc3BsYXkgKi8KPj4gKwkJaWYgKCFsaW5rLT5zaW5rX2NvdW50KQo+PiAr CQkJcmV0dXJuIC1FTk9ERVY7Cj4+ICsJfQo+PiArCj4+ICsJcmV0ID0gZHJtX2RwX2RwY2RfcmVh ZGIoJmRwLT5hdXgsIERQX0RQUlhfRkVBVFVSRV9FTlVNRVJBVElPTl9MSVNULCAmZHBjZCk7Cj4+ ICsJaWYgKHJldCA8IDApCj4+ICsJCXJldHVybiByZXQ7Cj4+ICsKPj4gKwlsaW5rLT52c2Nfc2Rw X3N1cHBvcnRlZCA9ICEhKGRwY2QgJiBEUF9WU0NfU0RQX0VYVF9GT1JfQ09MT1JJTUVUUllfU1VQ UE9SVEVEKTsKPj4gKwo+PiArCWxpbmstPnJldmlzaW9uID0gbGluay0+ZHBjZFtEUF9EUENEX1JF Vl07Cj4+ICsJbGluay0+cmF0ZSA9IG1pbl90KHUzMiwgbWluKGRwLT5wbGF0X2RhdGEtPm1heF9s aW5rX3JhdGUsCj4+ICsJCQkJICAgIGRwLT5waHktPmF0dHJzLm1heF9saW5rX3JhdGUgKiAxMDAp LAo+PiArCQkJICAgZHJtX2RwX21heF9saW5rX3JhdGUobGluay0+ZHBjZCkpOwo+PiArCWxpbmst PmxhbmVzID0gbWluX3QodTgsIHBoeV9nZXRfYnVzX3dpZHRoKGRwLT5waHkpLAo+PiArCQkJICAg IGRybV9kcF9tYXhfbGFuZV9jb3VudChsaW5rLT5kcGNkKSk7Cj4+ICsKPj4gKwlsaW5rLT5jYXBz LmVuaGFuY2VkX2ZyYW1pbmcgPSBkcm1fZHBfZW5oYW5jZWRfZnJhbWVfY2FwKGxpbmstPmRwY2Qp Owo+PiArCWxpbmstPmNhcHMudHBzM19zdXBwb3J0ZWQgPSBkcm1fZHBfdHBzM19zdXBwb3J0ZWQo bGluay0+ZHBjZCk7Cj4+ICsJbGluay0+Y2Fwcy50cHM0X3N1cHBvcnRlZCA9IGRybV9kcF90cHM0 X3N1cHBvcnRlZChsaW5rLT5kcGNkKTsKPj4gKwlsaW5rLT5jYXBzLmZhc3RfdHJhaW5pbmcgPSBk cm1fZHBfZmFzdF90cmFpbmluZ19jYXAobGluay0+ZHBjZCk7Cj4+ICsJbGluay0+Y2Fwcy5jaGFu bmVsX2NvZGluZyA9IGRybV9kcF9jaGFubmVsX2NvZGluZ19zdXBwb3J0ZWQobGluay0+ZHBjZCk7 Cj4+ICsJbGluay0+Y2Fwcy5zc2MgPSAhIShsaW5rLT5kcGNkW0RQX01BWF9ET1dOU1BSRUFEXSAm IERQX01BWF9ET1dOU1BSRUFEXzBfNSk7Cj4+ICsKPj4gKwlyZXR1cm4gMDsKPj4gK30KPj4gKwo+ PiArc3RhdGljIGludCBkd19kcF9waHlfdXBkYXRlX3ZzX2VtcGgoc3RydWN0IGR3X2RwICpkcCwg dW5zaWduZWQgaW50IHJhdGUsIHVuc2lnbmVkIGludCBsYW5lcywKPj4gKwkJCQkgICAgc3RydWN0 IGR3X2RwX2xpbmtfdHJhaW5fc2V0ICp0cmFpbl9zZXQpCj4+ICt7Cj4+ICsJdW5pb24gcGh5X2Nv bmZpZ3VyZV9vcHRzIHBoeV9jZmc7Cj4+ICsJdW5zaWduZWQgaW50ICp2cywgKnBlOwo+PiArCXU4 IGJ1Zls0XTsKPj4gKwlpbnQgaSwgcmV0Owo+PiArCj4+ICsJdnMgPSB0cmFpbl9zZXQtPnZvbHRh Z2Vfc3dpbmc7Cj4+ICsJcGUgPSB0cmFpbl9zZXQtPnByZV9lbXBoYXNpczsKPj4gKwo+PiArCWZv ciAoaSA9IDA7IGkgPCBsYW5lczsgaSsrKSB7Cj4+ICsJCXBoeV9jZmcuZHAudm9sdGFnZVtpXSA9 IHZzW2ldOwo+PiArCQlwaHlfY2ZnLmRwLnByZVtpXSA9IHBlW2ldOwo+PiArCX0KPj4gKwo+PiAr CXBoeV9jZmcuZHAubGFuZXMgPSBsYW5lczsKPj4gKwlwaHlfY2ZnLmRwLmxpbmtfcmF0ZSA9IHJh dGUgLyAxMDA7Cj4+ICsJcGh5X2NmZy5kcC5zZXRfbGFuZXMgPSBmYWxzZTsKPj4gKwlwaHlfY2Zn LmRwLnNldF9yYXRlID0gZmFsc2U7Cj4KPllvdSBkb24ndCBuZWVkIHRvIHNldCBsYW5lcyAvIGxp bmtfcmF0ZSBpZiBzZXRfbGFuZXMgYW5kIHNldF9yYXRlIGlzCj5mYWxzZS4KVGhpcyBpcyBiZWNh dXNlIHRoZSBya191ZHBoeV9kcF9waHlfY29uZmlndXJlIGZ1bmN0aW9uIGZpcnN0IHZlcmlmaWVz IHRoZSByYXRlIGFuZCBsYW5lIHNldHRpbmdzLAp0cmVhdGluZyBhbnkgdW5pbml0aWFsaXplZCBw YXJhbWV0ZXJzIGFzIGludmFsaWQgY29uZmlndXJhdGlvbnMKCj4KPj4gKwlwaHlfY2ZnLmRwLnNl dF92b2x0YWdlcyA9IHRydWU7Cj4+ICsKPj4gKwlyZXQgPSBwaHlfY29uZmlndXJlKGRwLT5waHks ICZwaHlfY2ZnKTsKPj4gKwlpZiAocmV0KQo+PiArCQlyZXR1cm4gcmV0Owo+PiArCj4+ICsJZm9y IChpID0gMDsgaSA8IGxhbmVzOyBpKyspIHsKPj4gKwkJYnVmW2ldID0gKHZzW2ldIDw8IERQX1RS QUlOX1ZPTFRBR0VfU1dJTkdfU0hJRlQpIHwKPj4gKwkJCSAocGVbaV0gPDwgRFBfVFJBSU5fUFJF X0VNUEhBU0lTX1NISUZUKTsKPj4gKwkJaWYgKHRyYWluX3NldC0+dm9sdGFnZV9tYXhfcmVhY2hl ZFtpXSkKPj4gKwkJCWJ1ZltpXSB8PSBEUF9UUkFJTl9NQVhfU1dJTkdfUkVBQ0hFRDsKPj4gKwkJ aWYgKHRyYWluX3NldC0+cHJlX21heF9yZWFjaGVkW2ldKQo+PiArCQkJYnVmW2ldIHw9IERQX1RS QUlOX01BWF9QUkVfRU1QSEFTSVNfUkVBQ0hFRDsKPj4gKwl9Cj4+ICsKPj4gKwlyZXQgPSBkcm1f ZHBfZHBjZF93cml0ZSgmZHAtPmF1eCwgRFBfVFJBSU5JTkdfTEFORTBfU0VULCBidWYsIGxhbmVz KTsKPj4gKwlpZiAocmV0IDwgMCkKPj4gKwkJcmV0dXJuIHJldDsKPj4gKwo+PiArCXJldHVybiAw Owo+PiArfQo+PiArCj4+ICtzdGF0aWMgaW50IGR3X2RwX2xpbmtfdHJhaW5fdXBkYXRlX3ZzX2Vt cGgoc3RydWN0IGR3X2RwICpkcCkKPj4gK3sKPj4gKwlzdHJ1Y3QgZHdfZHBfbGluayAqbGluayA9 ICZkcC0+bGluazsKPj4gKwlzdHJ1Y3QgZHdfZHBfbGlua190cmFpbl9zZXQgKnJlcXVlc3QgPSAm bGluay0+dHJhaW4ucmVxdWVzdDsKPj4gKwo+PiArCXJldHVybiBkd19kcF9waHlfdXBkYXRlX3Zz X2VtcGgoZHAsIGRwLT5saW5rLnJhdGUsIGRwLT5saW5rLmxhbmVzLCByZXF1ZXN0KTsKPgo+SW5s aW5lIGl0IG1heWViPwoKT2thee+8jCB3aWxsIGRv44CCCj4KPj4gK30KPj4gKwo+PiArc3RhdGlj IGludCBkd19kcF9waHlfY29uZmlndXJlKHN0cnVjdCBkd19kcCAqZHAsIHVuc2lnbmVkIGludCBy YXRlLAo+PiArCQkJICAgICAgIHVuc2lnbmVkIGludCBsYW5lcywgYm9vbCBzc2MpCj4+ICt7Cj4+ ICsJdW5pb24gcGh5X2NvbmZpZ3VyZV9vcHRzIHBoeV9jZmc7Cj4+ICsJaW50IHJldDsKPj4gKwo+ PiArCS8qIE1vdmUgUEhZIHRvIFAzICovCj4+ICsJcmVnbWFwX3VwZGF0ZV9iaXRzKGRwLT5yZWdt YXAsIERXX0RQX1BIWUlGX0NUUkwsIFBIWV9QT1dFUkRPV04sCj4+ICsJCQkgICBGSUVMRF9QUkVQ KFBIWV9QT1dFUkRPV04sIDB4MykpOwo+PiArCj4+ICsJcGh5X2NmZy5kcC5sYW5lcyA9IGxhbmVz Owo+PiArCXBoeV9jZmcuZHAubGlua19yYXRlID0gcmF0ZSAvIDEwMDsKPj4gKwlwaHlfY2ZnLmRw LnNzYyA9IHNzYzsKPj4gKwlwaHlfY2ZnLmRwLnNldF9sYW5lcyA9IHRydWU7Cj4+ICsJcGh5X2Nm Zy5kcC5zZXRfcmF0ZSA9IHRydWU7Cj4+ICsJcGh5X2NmZy5kcC5zZXRfdm9sdGFnZXMgPSBmYWxz ZTsKPj4gKwlyZXQgPSBwaHlfY29uZmlndXJlKGRwLT5waHksICZwaHlfY2ZnKTsKPj4gKwlpZiAo cmV0KQo+PiArCQlyZXR1cm4gcmV0Owo+PiArCj4+ICsJcmVnbWFwX3VwZGF0ZV9iaXRzKGRwLT5y ZWdtYXAsIERXX0RQX1BIWUlGX0NUUkwsIFBIWV9MQU5FUywKPj4gKwkJCSAgIEZJRUxEX1BSRVAo UEhZX0xBTkVTLCBsYW5lcyAvIDIpKTsKPj4gKwo+PiArCS8qIE1vdmUgUEhZIHRvIFAwICovCj4+ ICsJcmVnbWFwX3VwZGF0ZV9iaXRzKGRwLT5yZWdtYXAsIERXX0RQX1BIWUlGX0NUUkwsIFBIWV9Q T1dFUkRPV04sCj4+ICsJCQkgICBGSUVMRF9QUkVQKFBIWV9QT1dFUkRPV04sIDB4MCkpOwo+PiAr Cj4+ICsJZHdfZHBfcGh5X3htaXRfZW5hYmxlKGRwLCBsYW5lcyk7Cj4+ICsKPj4gKwlyZXR1cm4g MDsKPj4gK30KPj4gKwo+PiArc3RhdGljIGludCBkd19kcF9saW5rX2NvbmZpZ3VyZShzdHJ1Y3Qg ZHdfZHAgKmRwKQo+PiArewo+PiArCXN0cnVjdCBkd19kcF9saW5rICpsaW5rID0gJmRwLT5saW5r Owo+PiArCXU4IGJ1ZlsyXTsKPj4gKwlpbnQgcmV0Owo+PiArCj4+ICsJcmV0ID0gZHdfZHBfcGh5 X2NvbmZpZ3VyZShkcCwgbGluay0+cmF0ZSwgbGluay0+bGFuZXMsIGxpbmstPmNhcHMuc3NjKTsK Pj4gKwlpZiAocmV0KQo+PiArCQlyZXR1cm4gcmV0Owo+PiArCj4+ICsJYnVmWzBdID0gZHJtX2Rw X2xpbmtfcmF0ZV90b19id19jb2RlKGxpbmstPnJhdGUpOwo+PiArCWJ1ZlsxXSA9IGxpbmstPmxh bmVzOwo+PiArCj4+ICsJaWYgKGxpbmstPmNhcHMuZW5oYW5jZWRfZnJhbWluZykgewo+PiArCQli dWZbMV0gfD0gRFBfTEFORV9DT1VOVF9FTkhBTkNFRF9GUkFNRV9FTjsKPj4gKwkJcmVnbWFwX3Vw ZGF0ZV9iaXRzKGRwLT5yZWdtYXAsIERXX0RQX0NDVEwsIEVOSEFOQ0VfRlJBTUlOR19FTiwKPj4g KwkJCQkgICBGSUVMRF9QUkVQKEVOSEFOQ0VfRlJBTUlOR19FTiwgMSkpOwo+PiArCX0gZWxzZSB7 Cj4+ICsJCXJlZ21hcF91cGRhdGVfYml0cyhkcC0+cmVnbWFwLCBEV19EUF9DQ1RMLCBFTkhBTkNF X0ZSQU1JTkdfRU4sCj4+ICsJCQkJICAgRklFTERfUFJFUChFTkhBTkNFX0ZSQU1JTkdfRU4sIDAp KTsKPj4gKwl9Cj4+ICsKPj4gKwlyZXQgPSBkcm1fZHBfZHBjZF93cml0ZSgmZHAtPmF1eCwgRFBf TElOS19CV19TRVQsIGJ1Ziwgc2l6ZW9mKGJ1ZikpOwo+PiArCWlmIChyZXQgPCAwKQo+PiArCQly ZXR1cm4gcmV0Owo+PiArCj4+ICsJYnVmWzBdID0gbGluay0+Y2Fwcy5zc2MgPyBEUF9TUFJFQURf QU1QXzBfNSA6IDA7Cj4+ICsJYnVmWzFdID0gbGluay0+Y2Fwcy5jaGFubmVsX2NvZGluZyA/IERQ X1NFVF9BTlNJXzhCMTBCIDogMDsKPj4gKwo+PiArCXJldCA9IGRybV9kcF9kcGNkX3dyaXRlKCZk cC0+YXV4LCBEUF9ET1dOU1BSRUFEX0NUUkwsIGJ1Ziwgc2l6ZW9mKGJ1ZikpOwo+PiArCWlmIChy ZXQgPCAwKQo+PiArCQlyZXR1cm4gcmV0Owo+PiArCj4+ICsJcmV0dXJuIDA7Cj4+ICt9Cj4+ICsK Pj4gK3N0YXRpYyB2b2lkIGR3X2RwX2xpbmtfdHJhaW5faW5pdChzdHJ1Y3QgZHdfZHBfbGlua190 cmFpbiAqdHJhaW4pCj4+ICt7Cj4+ICsJc3RydWN0IGR3X2RwX2xpbmtfdHJhaW5fc2V0ICpyZXF1 ZXN0ID0gJnRyYWluLT5yZXF1ZXN0Owo+PiArCXN0cnVjdCBkd19kcF9saW5rX3RyYWluX3NldCAq YWRqdXN0ID0gJnRyYWluLT5hZGp1c3Q7Cj4+ICsJdW5zaWduZWQgaW50IGk7Cj4+ICsKPj4gKwlm b3IgKGkgPSAwOyBpIDwgNDsgaSsrKSB7Cj4+ICsJCXJlcXVlc3QtPnZvbHRhZ2Vfc3dpbmdbaV0g PSAwOwo+PiArCQlhZGp1c3QtPnZvbHRhZ2Vfc3dpbmdbaV0gPSAwOwo+PiArCj4+ICsJCXJlcXVl c3QtPnByZV9lbXBoYXNpc1tpXSA9IDA7Cj4+ICsJCWFkanVzdC0+cHJlX2VtcGhhc2lzW2ldID0g MDsKPj4gKwo+PiArCQlyZXF1ZXN0LT52b2x0YWdlX21heF9yZWFjaGVkW2ldID0gZmFsc2U7Cj4+ ICsJCWFkanVzdC0+dm9sdGFnZV9tYXhfcmVhY2hlZFtpXSA9IGZhbHNlOwo+PiArCj4+ICsJCXJl cXVlc3QtPnByZV9tYXhfcmVhY2hlZFtpXSA9IGZhbHNlOwo+PiArCQlhZGp1c3QtPnByZV9tYXhf cmVhY2hlZFtpXSA9IGZhbHNlOwo+PiArCX0KPj4gKwo+PiArCXRyYWluLT5jbG9ja19yZWNvdmVy ZWQgPSBmYWxzZTsKPj4gKwl0cmFpbi0+Y2hhbm5lbF9lcXVhbGl6ZWQgPSBmYWxzZTsKPj4gK30K Pj4gKwo+PiArc3RhdGljIGJvb2wgZHdfZHBfbGlua190cmFpbl92YWxpZChjb25zdCBzdHJ1Y3Qg ZHdfZHBfbGlua190cmFpbiAqdHJhaW4pCj4+ICt7Cj4+ICsJcmV0dXJuIHRyYWluLT5jbG9ja19y ZWNvdmVyZWQgJiYgdHJhaW4tPmNoYW5uZWxfZXF1YWxpemVkOwo+PiArfQo+PiArCj4+ICtzdGF0 aWMgaW50IGR3X2RwX2xpbmtfdHJhaW5fc2V0X3BhdHRlcm4oc3RydWN0IGR3X2RwICpkcCwgdTMy IHBhdHRlcm4pCj4+ICt7Cj4+ICsJdTggYnVmID0gMDsKPj4gKwlpbnQgcmV0Owo+PiArCj4+ICsJ aWYgKHBhdHRlcm4gJiYgcGF0dGVybiAhPSBEUF9UUkFJTklOR19QQVRURVJOXzQpIHsKPj4gKwkJ YnVmIHw9IERQX0xJTktfU0NSQU1CTElOR19ESVNBQkxFOwo+PiArCj4+ICsJCXJlZ21hcF91cGRh dGVfYml0cyhkcC0+cmVnbWFwLCBEV19EUF9DQ1RMLCBTQ1JBTUJMRV9ESVMsCj4+ICsJCQkJICAg RklFTERfUFJFUChTQ1JBTUJMRV9ESVMsIDEpKTsKPj4gKwl9IGVsc2Ugewo+PiArCQlyZWdtYXBf dXBkYXRlX2JpdHMoZHAtPnJlZ21hcCwgRFdfRFBfQ0NUTCwgU0NSQU1CTEVfRElTLAo+PiArCQkJ CSAgIEZJRUxEX1BSRVAoU0NSQU1CTEVfRElTLCAwKSk7Cj4+ICsJfQo+PiArCj4+ICsJc3dpdGNo IChwYXR0ZXJuKSB7Cj4+ICsJY2FzZSBEUF9UUkFJTklOR19QQVRURVJOX0RJU0FCTEU6Cj4+ICsJ CWR3X2RwX3BoeV9zZXRfcGF0dGVybihkcCwgRFdfRFBfUEhZX1BBVFRFUk5fTk9ORSk7Cj4+ICsJ CWJyZWFrOwo+PiArCWNhc2UgRFBfVFJBSU5JTkdfUEFUVEVSTl8xOgo+PiArCQlkd19kcF9waHlf c2V0X3BhdHRlcm4oZHAsIERXX0RQX1BIWV9QQVRURVJOX1RQU18xKTsKPj4gKwkJYnJlYWs7Cj4+ ICsJY2FzZSBEUF9UUkFJTklOR19QQVRURVJOXzI6Cj4+ICsJCWR3X2RwX3BoeV9zZXRfcGF0dGVy bihkcCwgRFdfRFBfUEhZX1BBVFRFUk5fVFBTXzIpOwo+PiArCQlicmVhazsKPj4gKwljYXNlIERQ X1RSQUlOSU5HX1BBVFRFUk5fMzoKPj4gKwkJZHdfZHBfcGh5X3NldF9wYXR0ZXJuKGRwLCBEV19E UF9QSFlfUEFUVEVSTl9UUFNfMyk7Cj4+ICsJCWJyZWFrOwo+PiArCWNhc2UgRFBfVFJBSU5JTkdf UEFUVEVSTl80Ogo+PiArCQlkd19kcF9waHlfc2V0X3BhdHRlcm4oZHAsIERXX0RQX1BIWV9QQVRU RVJOX1RQU180KTsKPj4gKwkJYnJlYWs7Cj4+ICsJZGVmYXVsdDoKPj4gKwkJcmV0dXJuIC1FSU5W QUw7Cj4+ICsJfQo+PiArCj4+ICsJcmV0ID0gZHJtX2RwX2RwY2Rfd3JpdGViKCZkcC0+YXV4LCBE UF9UUkFJTklOR19QQVRURVJOX1NFVCwKPj4gKwkJCQkgYnVmIHwgcGF0dGVybik7Cj4+ICsJaWYg KHJldCA8IDApCj4+ICsJCXJldHVybiByZXQ7Cj4+ICsKPj4gKwlyZXR1cm4gMDsKPj4gK30KPj4g Kwo+PiArc3RhdGljIHU4IGR3X2RwX3ZvbHRhZ2VfbWF4KHU4IHByZWVtcGgpCj4+ICt7Cj4+ICsJ c3dpdGNoIChwcmVlbXBoICYgRFBfVFJBSU5fUFJFX0VNUEhBU0lTX01BU0spIHsKPj4gKwljYXNl IERQX1RSQUlOX1BSRV9FTVBIX0xFVkVMXzA6Cj4+ICsJCXJldHVybiBEUF9UUkFJTl9WT0xUQUdF X1NXSU5HX0xFVkVMXzM7Cj4+ICsJY2FzZSBEUF9UUkFJTl9QUkVfRU1QSF9MRVZFTF8xOgo+PiAr CQlyZXR1cm4gRFBfVFJBSU5fVk9MVEFHRV9TV0lOR19MRVZFTF8yOwo+PiArCWNhc2UgRFBfVFJB SU5fUFJFX0VNUEhfTEVWRUxfMjoKPj4gKwkJcmV0dXJuIERQX1RSQUlOX1ZPTFRBR0VfU1dJTkdf TEVWRUxfMTsKPj4gKwljYXNlIERQX1RSQUlOX1BSRV9FTVBIX0xFVkVMXzM6Cj4+ICsJZGVmYXVs dDoKPj4gKwkJcmV0dXJuIERQX1RSQUlOX1ZPTFRBR0VfU1dJTkdfTEVWRUxfMDsKPj4gKwl9Cj4+ ICt9Cj4+ICsKPj4gK3N0YXRpYyB2b2lkIGR3X2RwX2xpbmtfZ2V0X2FkanVzdG1lbnRzKHN0cnVj dCBkd19kcF9saW5rICpsaW5rLAo+PiArCQkJCSAgICAgICB1OCBzdGF0dXNbRFBfTElOS19TVEFU VVNfU0laRV0pCj4+ICt7Cj4+ICsJc3RydWN0IGR3X2RwX2xpbmtfdHJhaW5fc2V0ICphZGp1c3Qg PSAmbGluay0+dHJhaW4uYWRqdXN0Owo+PiArCXU4IHYgPSAwOwo+PiArCXU4IHAgPSAwOwo+PiAr CXVuc2lnbmVkIGludCBpOwo+PiArCj4+ICsJZm9yIChpID0gMDsgaSA8IGxpbmstPmxhbmVzOyBp KyspIHsKPj4gKwkJdiA9IGRybV9kcF9nZXRfYWRqdXN0X3JlcXVlc3Rfdm9sdGFnZShzdGF0dXMs IGkpOwo+PiArCQlwID0gZHJtX2RwX2dldF9hZGp1c3RfcmVxdWVzdF9wcmVfZW1waGFzaXMoc3Rh dHVzLCBpKTsKPj4gKwkJaWYgKHAgPj0gIERQX1RSQUlOX1BSRV9FTVBIX0xFVkVMXzMpIHsKPj4g KwkJCWFkanVzdC0+cHJlX2VtcGhhc2lzW2ldID0gRFBfVFJBSU5fUFJFX0VNUEhfTEVWRUxfMyA+ Pgo+PiArCQkJCQkJICBEUF9UUkFJTl9QUkVfRU1QSEFTSVNfU0hJRlQ7Cj4+ICsJCQlhZGp1c3Qt PnByZV9tYXhfcmVhY2hlZFtpXSA9IHRydWU7Cj4+ICsJCX0gZWxzZSB7Cj4+ICsJCQlhZGp1c3Qt PnByZV9lbXBoYXNpc1tpXSA9IHAgPj4gRFBfVFJBSU5fUFJFX0VNUEhBU0lTX1NISUZUOwo+PiAr CQkJYWRqdXN0LT5wcmVfbWF4X3JlYWNoZWRbaV0gPSBmYWxzZTsKPj4gKwkJfQo+PiArCQl2ID0g bWluKHYsIGR3X2RwX3ZvbHRhZ2VfbWF4KHApKTsKPj4gKwkJaWYgKHYgPj0gRFBfVFJBSU5fVk9M VEFHRV9TV0lOR19MRVZFTF8zKSB7Cj4+ICsJCQlhZGp1c3QtPnZvbHRhZ2Vfc3dpbmdbaV0gPSBE UF9UUkFJTl9WT0xUQUdFX1NXSU5HX0xFVkVMXzMgPj4KPj4gKwkJCQkJCSAgIERQX1RSQUlOX1ZP TFRBR0VfU1dJTkdfU0hJRlQ7Cj4+ICsJCQlhZGp1c3QtPnZvbHRhZ2VfbWF4X3JlYWNoZWRbaV0g PSB0cnVlOwo+PiArCQl9IGVsc2Ugewo+PiArCQkJYWRqdXN0LT52b2x0YWdlX3N3aW5nW2ldID0g diA+PiBEUF9UUkFJTl9WT0xUQUdFX1NXSU5HX1NISUZUOwo+PiArCQkJYWRqdXN0LT52b2x0YWdl X21heF9yZWFjaGVkW2ldID0gZmFsc2U7Cj4+ICsJCX0KPj4gKwl9Cj4+ICt9Cj4+ICsKPj4gK3N0 YXRpYyB2b2lkIGR3X2RwX2xpbmtfdHJhaW5fYWRqdXN0KHN0cnVjdCBkd19kcF9saW5rX3RyYWlu ICp0cmFpbikKPj4gK3sKPj4gKwlzdHJ1Y3QgZHdfZHBfbGlua190cmFpbl9zZXQgKnJlcXVlc3Qg PSAmdHJhaW4tPnJlcXVlc3Q7Cj4+ICsJc3RydWN0IGR3X2RwX2xpbmtfdHJhaW5fc2V0ICphZGp1 c3QgPSAmdHJhaW4tPmFkanVzdDsKPj4gKwl1bnNpZ25lZCBpbnQgaTsKPj4gKwo+PiArCWZvciAo aSA9IDA7IGkgPCA0OyBpKyspIHsKPgo+U2hvdWxkbid0IGl0IGJlIGEgbG9vcCB1cCB0byBsaW5r LT5sYW5lcz8KClllYWgsIHRoaXMgbWFrZXMgc2Vuc2XjgIIKCgo+Cj4+ICsJCWlmIChyZXF1ZXN0 LT52b2x0YWdlX3N3aW5nW2ldICE9IGFkanVzdC0+dm9sdGFnZV9zd2luZ1tpXSkKPj4gKwkJCXJl cXVlc3QtPnZvbHRhZ2Vfc3dpbmdbaV0gPSBhZGp1c3QtPnZvbHRhZ2Vfc3dpbmdbaV07Cj4+ICsJ CWlmIChyZXF1ZXN0LT52b2x0YWdlX21heF9yZWFjaGVkW2ldICE9IGFkanVzdC0+dm9sdGFnZV9t YXhfcmVhY2hlZFtpXSkKPj4gKwkJCXJlcXVlc3QtPnZvbHRhZ2VfbWF4X3JlYWNoZWRbaV0gPSBh ZGp1c3QtPnZvbHRhZ2VfbWF4X3JlYWNoZWRbaV07Cj4+ICsJfQo+PiArCj4+ICsJZm9yIChpID0g MDsgaSA8IDQ7IGkrKykgewo+PiArCQlpZiAocmVxdWVzdC0+cHJlX2VtcGhhc2lzW2ldICE9IGFk anVzdC0+cHJlX2VtcGhhc2lzW2ldKQo+PiArCQkJcmVxdWVzdC0+cHJlX2VtcGhhc2lzW2ldID0g YWRqdXN0LT5wcmVfZW1waGFzaXNbaV07Cj4+ICsJCWlmIChyZXF1ZXN0LT5wcmVfbWF4X3JlYWNo ZWRbaV0gIT0gYWRqdXN0LT5wcmVfbWF4X3JlYWNoZWRbaV0pCj4+ICsJCQlyZXF1ZXN0LT5wcmVf bWF4X3JlYWNoZWRbaV0gPSBhZGp1c3QtPnByZV9tYXhfcmVhY2hlZFtpXTsKPgo+V2h5IGRvIHlv dSBuZWVkIHNlcGFyYXRlIHJlcXVlc3QgYW5kIGFkanVzdG1lbnQgc3RydWN0cz8KCkkgbmVlZCB0 byB0aGluayBhYm91dCB0aGlzIGlzc3VlIGZ1cnRoZXIgYW5kIHdpbGwgY29uZmlybSBob3cgdG8g cHJvY2VlZCBsYXRlci4KCgo+Cj4+ICsJfQo+PiArfQo+PiArCj4+ICtzdGF0aWMgaW50IGR3X2Rw X2xpbmtfY2xvY2tfcmVjb3Zlcnkoc3RydWN0IGR3X2RwICpkcCkKPj4gK3sKPj4gKwlzdHJ1Y3Qg ZHdfZHBfbGluayAqbGluayA9ICZkcC0+bGluazsKPj4gKwl1OCBzdGF0dXNbRFBfTElOS19TVEFU VVNfU0laRV07Cj4+ICsJdW5zaWduZWQgaW50IHRyaWVzID0gMDsKPj4gKwlpbnQgcmV0Owo+PiAr Cj4+ICsJcmV0ID0gZHdfZHBfbGlua190cmFpbl9zZXRfcGF0dGVybihkcCwgRFBfVFJBSU5JTkdf UEFUVEVSTl8xKTsKPj4gKwlpZiAocmV0KQo+PiArCQlyZXR1cm4gcmV0Owo+PiArCj4+ICsJZm9y ICg7Oykgewo+PiArCQlyZXQgPSBkd19kcF9saW5rX3RyYWluX3VwZGF0ZV92c19lbXBoKGRwKTsK Pj4gKwkJaWYgKHJldCkKPj4gKwkJCXJldHVybiByZXQ7Cj4+ICsKPj4gKwkJZHJtX2RwX2xpbmtf dHJhaW5fY2xvY2tfcmVjb3ZlcnlfZGVsYXkoJmRwLT5hdXgsIGxpbmstPmRwY2QpOwo+PiArCj4+ ICsJCXJldCA9IGRybV9kcF9kcGNkX3JlYWRfbGlua19zdGF0dXMoJmRwLT5hdXgsIHN0YXR1cyk7 Cj4+ICsJCWlmIChyZXQgPCAwKSB7Cj4+ICsJCQlkZXZfZXJyKGRwLT5kZXYsICJmYWlsZWQgdG8g cmVhZCBsaW5rIHN0YXR1czogJWRcbiIsIHJldCk7Cj4+ICsJCQlyZXR1cm4gcmV0Owo+PiArCQl9 Cj4+ICsKPj4gKwkJaWYgKGRybV9kcF9jbG9ja19yZWNvdmVyeV9vayhzdGF0dXMsIGxpbmstPmxh bmVzKSkgewo+PiArCQkJbGluay0+dHJhaW4uY2xvY2tfcmVjb3ZlcmVkID0gdHJ1ZTsKPj4gKwkJ CWJyZWFrOwo+PiArCQl9Cj4+ICsKPj4gKwkJZHdfZHBfbGlua19nZXRfYWRqdXN0bWVudHMobGlu aywgc3RhdHVzKTsKPj4gKwo+PiArCQlpZiAobGluay0+dHJhaW4ucmVxdWVzdC52b2x0YWdlX3N3 aW5nWzBdID09Cj4+ICsJCSAgICBsaW5rLT50cmFpbi5hZGp1c3Qudm9sdGFnZV9zd2luZ1swXSkK Pgo+U2hvdWxkIHRoaXMgdGFrZSBhbGwgbGFuZXMgdG8gYWNjb3VudD8gSSB0aGluayBpdCBtaWdo dCBiZSBwb3Nzc2libGUgdG8KPmRyb3AgdGhlIGFkanVzdCAvIHJlcXVlc3Qgc3BsaXQgYW5kIGFk anVzdCB0cmllcyBpbgo+ZHdfZHBfbGlua19nZXRfYWRqdXN0bWVudHMoKSBpbnN0ZWFkLgoKTGV0 IG1lIGZpZ3VyZSBpdCBvdXQgbGF0ZXLjgIIKCj4KPj4gKwkJCXRyaWVzKys7Cj4+ICsJCWVsc2UK Pj4gKwkJCXRyaWVzID0gMDsKPj4gKwo+PiArCQlpZiAodHJpZXMgPT0gNSkKPj4gKwkJCWJyZWFr Owo+PiArCj4+ICsJCWR3X2RwX2xpbmtfdHJhaW5fYWRqdXN0KCZsaW5rLT50cmFpbik7Cj4+ICsJ fQo+PiArCj4+ICsJcmV0dXJuIDA7Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyBpbnQgZHdfZHBfbGlu a19jaGFubmVsX2VxdWFsaXphdGlvbihzdHJ1Y3QgZHdfZHAgKmRwKQo+PiArewo+PiArCXN0cnVj dCBkd19kcF9saW5rICpsaW5rID0gJmRwLT5saW5rOwo+PiArCXU4IHN0YXR1c1tEUF9MSU5LX1NU QVRVU19TSVpFXSwgcGF0dGVybjsKPj4gKwl1bnNpZ25lZCBpbnQgdHJpZXM7Cj4+ICsJaW50IHJl dDsKPj4gKwo+PiArCWlmIChsaW5rLT5jYXBzLnRwczRfc3VwcG9ydGVkKQo+PiArCQlwYXR0ZXJu ID0gRFBfVFJBSU5JTkdfUEFUVEVSTl80Owo+PiArCWVsc2UgaWYgKGxpbmstPmNhcHMudHBzM19z dXBwb3J0ZWQpCj4+ICsJCXBhdHRlcm4gPSBEUF9UUkFJTklOR19QQVRURVJOXzM7Cj4+ICsJZWxz ZQo+PiArCQlwYXR0ZXJuID0gRFBfVFJBSU5JTkdfUEFUVEVSTl8yOwo+PiArCXJldCA9IGR3X2Rw X2xpbmtfdHJhaW5fc2V0X3BhdHRlcm4oZHAsIHBhdHRlcm4pOwo+PiArCWlmIChyZXQpCj4+ICsJ CXJldHVybiByZXQ7Cj4+ICsKPj4gKwlmb3IgKHRyaWVzID0gMTsgdHJpZXMgPCA1OyB0cmllcysr KSB7Cj4+ICsJCXJldCA9IGR3X2RwX2xpbmtfdHJhaW5fdXBkYXRlX3ZzX2VtcGgoZHApOwo+PiAr CQlpZiAocmV0KQo+PiArCQkJcmV0dXJuIHJldDsKPj4gKwo+PiArCQlkcm1fZHBfbGlua190cmFp bl9jaGFubmVsX2VxX2RlbGF5KCZkcC0+YXV4LCBsaW5rLT5kcGNkKTsKPj4gKwo+PiArCQlyZXQg PSBkcm1fZHBfZHBjZF9yZWFkX2xpbmtfc3RhdHVzKCZkcC0+YXV4LCBzdGF0dXMpOwo+PiArCQlp ZiAocmV0IDwgMCkKPj4gKwkJCXJldHVybiByZXQ7Cj4+ICsKPj4gKwkJaWYgKCFkcm1fZHBfY2xv Y2tfcmVjb3Zlcnlfb2soc3RhdHVzLCBsaW5rLT5sYW5lcykpIHsKPj4gKwkJCWRldl9lcnIoZHAt PmRldiwgImNsb2NrIHJlY292ZXJ5IGxvc3Qgd2hpbGUgZXF1YWxpemluZyBjaGFubmVsXG4iKTsK Pj4gKwkJCWxpbmstPnRyYWluLmNsb2NrX3JlY292ZXJlZCA9IGZhbHNlOwo+PiArCQkJYnJlYWs7 Cj4+ICsJCX0KPj4gKwo+PiArCQlpZiAoZHJtX2RwX2NoYW5uZWxfZXFfb2soc3RhdHVzLCBsaW5r LT5sYW5lcykpIHsKPj4gKwkJCWxpbmstPnRyYWluLmNoYW5uZWxfZXF1YWxpemVkID0gdHJ1ZTsK Pj4gKwkJCWJyZWFrOwo+PiArCQl9Cj4+ICsKPj4gKwkJZHdfZHBfbGlua19nZXRfYWRqdXN0bWVu dHMobGluaywgc3RhdHVzKTsKPj4gKwkJZHdfZHBfbGlua190cmFpbl9hZGp1c3QoJmxpbmstPnRy YWluKTsKPj4gKwl9Cj4+ICsKPj4gKwlyZXR1cm4gMDsKPj4gK30KPj4gKwo+PiArc3RhdGljIGlu dCBkd19kcF9saW5rX2Rvd25ncmFkZShzdHJ1Y3QgZHdfZHAgKmRwKQo+PiArewo+PiArCXN0cnVj dCBkd19kcF9saW5rICpsaW5rID0gJmRwLT5saW5rOwo+PiArCXN0cnVjdCBkd19kcF92aWRlbyAq dmlkZW8gPSAmZHAtPnZpZGVvOwo+PiArCj4+ICsJc3dpdGNoIChsaW5rLT5yYXRlKSB7Cj4+ICsJ Y2FzZSAxNjIwMDA6Cj4+ICsJCXJldHVybiAtRUlOVkFMOwo+PiArCWNhc2UgMjcwMDAwOgo+PiAr CQlsaW5rLT5yYXRlID0gMTYyMDAwOwo+PiArCQlicmVhazsKPj4gKwljYXNlIDU0MDAwMDoKPj4g KwkJbGluay0+cmF0ZSA9IDI3MDAwMDsKPj4gKwkJYnJlYWs7Cj4+ICsJY2FzZSA4MTAwMDA6Cj4+ ICsJCWxpbmstPnJhdGUgPSA1NDAwMDA7Cj4+ICsJCWJyZWFrOwo+PiArCX0KPj4gKwo+PiArCWlm ICghZHdfZHBfYmFuZHdpZHRoX29rKGRwLCAmdmlkZW8tPm1vZGUsIHZpZGVvLT5icHAsIGxpbmst PmxhbmVzLAo+PiArCQkJCWxpbmstPnJhdGUpKQo+PiArCQlyZXR1cm4gLUUyQklHOwo+PiArCj4+ ICsJcmV0dXJuIDA7Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyBpbnQgZHdfZHBfbGlua190cmFpbl9m dWxsKHN0cnVjdCBkd19kcCAqZHApCj4+ICt7Cj4+ICsJc3RydWN0IGR3X2RwX2xpbmsgKmxpbmsg PSAmZHAtPmxpbms7Cj4+ICsJaW50IHJldDsKPj4gKwo+PiArcmV0cnk6Cj4+ICsJZHdfZHBfbGlu a190cmFpbl9pbml0KCZsaW5rLT50cmFpbik7Cj4+ICsKPj4gKwlkZXZfZGJnKGRwLT5kZXYsICJm dWxsLXRyYWluaW5nIGxpbms6ICV1IGxhbmUlcyBhdCAldSBNSHpcbiIsCj4+ICsJCWxpbmstPmxh bmVzLCAobGluay0+bGFuZXMgPiAxKSA/ICJzIiA6ICIiLCBsaW5rLT5yYXRlIC8gMTAwKTsKPj4g Kwo+PiArCXJldCA9IGR3X2RwX2xpbmtfY29uZmlndXJlKGRwKTsKPj4gKwlpZiAocmV0IDwgMCkg ewo+PiArCQlkZXZfZXJyKGRwLT5kZXYsICJmYWlsZWQgdG8gY29uZmlndXJlIERQIGxpbms6ICVk XG4iLCByZXQpOwo+PiArCQlyZXR1cm4gcmV0Owo+PiArCX0KPj4gKwo+PiArCXJldCA9IGR3X2Rw X2xpbmtfY2xvY2tfcmVjb3ZlcnkoZHApOwo+PiArCWlmIChyZXQgPCAwKSB7Cj4+ICsJCWRldl9l cnIoZHAtPmRldiwgImNsb2NrIHJlY292ZXJ5IGZhaWxlZDogJWRcbiIsIHJldCk7Cj4+ICsJCWdv dG8gb3V0Owo+PiArCX0KPj4gKwo+PiArCWlmICghbGluay0+dHJhaW4uY2xvY2tfcmVjb3ZlcmVk KSB7Cj4+ICsJCWRldl9lcnIoZHAtPmRldiwgImNsb2NrIHJlY292ZXJ5IGZhaWxlZCwgZG93bmdy YWRpbmcgbGlua1xuIik7Cj4+ICsKPj4gKwkJcmV0ID0gZHdfZHBfbGlua19kb3duZ3JhZGUoZHAp Owo+PiArCQlpZiAocmV0IDwgMCkKPj4gKwkJCWdvdG8gb3V0Owo+PiArCQllbHNlCj4+ICsJCQln b3RvIHJldHJ5Owo+PiArCX0KPj4gKwo+PiArCWRldl9kYmcoZHAtPmRldiwgImNsb2NrIHJlY292 ZXJ5IHN1Y2NlZWRlZFxuIik7Cj4+ICsKPj4gKwlyZXQgPSBkd19kcF9saW5rX2NoYW5uZWxfZXF1 YWxpemF0aW9uKGRwKTsKPj4gKwlpZiAocmV0IDwgMCkgewo+PiArCQlkZXZfZXJyKGRwLT5kZXYs ICJjaGFubmVsIGVxdWFsaXphdGlvbiBmYWlsZWQ6ICVkXG4iLCByZXQpOwo+PiArCQlnb3RvIG91 dDsKPj4gKwl9Cj4+ICsKPj4gKwlpZiAoIWxpbmstPnRyYWluLmNoYW5uZWxfZXF1YWxpemVkKSB7 Cj4+ICsJCWRldl9lcnIoZHAtPmRldiwgImNoYW5uZWwgZXF1YWxpemF0aW9uIGZhaWxlZCwgZG93 bmdyYWRpbmcgbGlua1xuIik7Cj4+ICsKPj4gKwkJcmV0ID0gZHdfZHBfbGlua19kb3duZ3JhZGUo ZHApOwo+PiArCQlpZiAocmV0IDwgMCkKPj4gKwkJCWdvdG8gb3V0Owo+PiArCQllbHNlCj4+ICsJ CQlnb3RvIHJldHJ5Owo+PiArCX0KPj4gKwo+PiArCWRldl9kYmcoZHAtPmRldiwgImNoYW5uZWwg ZXF1YWxpemF0aW9uIHN1Y2NlZWRlZFxuIik7Cj4+ICsKPj4gK291dDoKPj4gKwlkd19kcF9saW5r X3RyYWluX3NldF9wYXR0ZXJuKGRwLCBEUF9UUkFJTklOR19QQVRURVJOX0RJU0FCTEUpOwo+PiAr CXJldHVybiByZXQ7Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyBpbnQgZHdfZHBfbGlua190cmFpbl9m YXN0KHN0cnVjdCBkd19kcCAqZHApCj4+ICt7Cj4+ICsJc3RydWN0IGR3X2RwX2xpbmsgKmxpbmsg PSAmZHAtPmxpbms7Cj4+ICsJaW50IHJldDsKPj4gKwl1OCBzdGF0dXNbRFBfTElOS19TVEFUVVNf U0laRV07Cj4+ICsJdTggcGF0dGVybjsKPj4gKwo+PiArCWR3X2RwX2xpbmtfdHJhaW5faW5pdCgm bGluay0+dHJhaW4pOwo+PiArCj4+ICsJZGV2X2RiZyhkcC0+ZGV2LCAiZmFzdC10cmFpbmluZyBs aW5rOiAldSBsYW5lJXMgYXQgJXUgTUh6XG4iLAo+PiArCQlsaW5rLT5sYW5lcywgKGxpbmstPmxh bmVzID4gMSkgPyAicyIgOiAiIiwgbGluay0+cmF0ZSAvIDEwMCk7Cj4+ICsKPj4gKwlyZXQgPSBk d19kcF9saW5rX2NvbmZpZ3VyZShkcCk7Cj4+ICsJaWYgKHJldCA8IDApIHsKPj4gKwkJZGV2X2Vy cihkcC0+ZGV2LCAiZmFpbGVkIHRvIGNvbmZpZ3VyZSBEUCBsaW5rOiAlZFxuIiwgcmV0KTsKPj4g KwkJcmV0dXJuIHJldDsKPj4gKwl9Cj4+ICsKPj4gKwlyZXQgPSBkd19kcF9saW5rX3RyYWluX3Nl dF9wYXR0ZXJuKGRwLCBEUF9UUkFJTklOR19QQVRURVJOXzEpOwo+PiArCWlmIChyZXQpCj4+ICsJ CWdvdG8gb3V0Owo+PiArCj4+ICsJdXNsZWVwX3JhbmdlKDUwMCwgMTAwMCk7Cj4+ICsKPj4gKwlp ZiAobGluay0+Y2Fwcy50cHM0X3N1cHBvcnRlZCkKPj4gKwkJcGF0dGVybiA9IERQX1RSQUlOSU5H X1BBVFRFUk5fNDsKPj4gKwllbHNlIGlmIChsaW5rLT5jYXBzLnRwczNfc3VwcG9ydGVkKQo+PiAr CQlwYXR0ZXJuID0gRFBfVFJBSU5JTkdfUEFUVEVSTl8zOwo+PiArCWVsc2UKPj4gKwkJcGF0dGVy biA9IERQX1RSQUlOSU5HX1BBVFRFUk5fMjsKPj4gKwlyZXQgPSBkd19kcF9saW5rX3RyYWluX3Nl dF9wYXR0ZXJuKGRwLCBwYXR0ZXJuKTsKPj4gKwlpZiAocmV0KQo+PiArCQlnb3RvIG91dDsKPj4g Kwo+PiArCXVzbGVlcF9yYW5nZSg1MDAsIDEwMDApOwo+PiArCj4+ICsJcmV0ID0gZHJtX2RwX2Rw Y2RfcmVhZF9saW5rX3N0YXR1cygmZHAtPmF1eCwgc3RhdHVzKTsKPj4gKwlpZiAocmV0IDwgMCkg ewo+PiArCQlkZXZfZXJyKGRwLT5kZXYsICJmYWlsZWQgdG8gcmVhZCBsaW5rIHN0YXR1czogJWRc biIsIHJldCk7Cj4+ICsJCWdvdG8gb3V0Owo+PiArCX0KPj4gKwo+PiArCWlmICghZHJtX2RwX2Ns b2NrX3JlY292ZXJ5X29rKHN0YXR1cywgbGluay0+bGFuZXMpKSB7Cj4+ICsJCWRldl9lcnIoZHAt PmRldiwgImNsb2NrIHJlY292ZXJ5IGZhaWxlZFxuIik7Cj4+ICsJCXJldCA9IC1FSU87Cj4+ICsJ CWdvdG8gb3V0Owo+PiArCX0KPj4gKwo+PiArCWlmICghZHJtX2RwX2NoYW5uZWxfZXFfb2soc3Rh dHVzLCBsaW5rLT5sYW5lcykpIHsKPj4gKwkJZGV2X2VycihkcC0+ZGV2LCAiY2hhbm5lbCBlcXVh bGl6YXRpb24gZmFpbGVkXG4iKTsKPj4gKwkJcmV0ID0gLUVJTzsKPj4gKwkJZ290byBvdXQ7Cj4+ ICsJfQo+PiArCj4+ICtvdXQ6Cj4+ICsJZHdfZHBfbGlua190cmFpbl9zZXRfcGF0dGVybihkcCwg RFBfVFJBSU5JTkdfUEFUVEVSTl9ESVNBQkxFKTsKPj4gKwlyZXR1cm4gcmV0Owo+PiArfQo+PiAr Cj4+ICtzdGF0aWMgaW50IGR3X2RwX2xpbmtfdHJhaW4oc3RydWN0IGR3X2RwICpkcCkKPj4gK3sK Pj4gKwlzdHJ1Y3QgZHdfZHBfbGluayAqbGluayA9ICZkcC0+bGluazsKPj4gKwlpbnQgcmV0Owo+ PiArCj4+ICsJaWYgKGxpbmstPmNhcHMuZmFzdF90cmFpbmluZykgewo+PiArCQlpZiAoZHdfZHBf bGlua190cmFpbl92YWxpZCgmbGluay0+dHJhaW4pKSB7Cj4+ICsJCQlyZXQgPSBkd19kcF9saW5r X3RyYWluX2Zhc3QoZHApOwo+PiArCQkJaWYgKHJldCA8IDApCj4+ICsJCQkJZGV2X2VycihkcC0+ ZGV2LCAiZmFzdCBsaW5rIHRyYWluaW5nIGZhaWxlZDogJWRcbiIsIHJldCk7Cj4+ICsJCQllbHNl Cj4+ICsJCQkJcmV0dXJuIDA7Cj4+ICsJCX0KPj4gKwl9Cj4+ICsKPj4gKwlyZXQgPSBkd19kcF9s aW5rX3RyYWluX2Z1bGwoZHApOwo+PiArCWlmIChyZXQgPCAwKSB7Cj4+ICsJCWRldl9lcnIoZHAt PmRldiwgImZ1bGwgbGluayB0cmFpbmluZyBmYWlsZWQ6ICVkXG4iLCByZXQpOwo+PiArCQlyZXR1 cm4gcmV0Owo+PiArCX0KPj4gKwo+PiArCXJldHVybiAwOwo+PiArfQo+PiArCj4+ICtzdGF0aWMg aW50IGR3X2RwX3NlbmRfc2RwKHN0cnVjdCBkd19kcCAqZHAsIHN0cnVjdCBkd19kcF9zZHAgKnNk cCkKPj4gK3sKPj4gKwljb25zdCB1OCAqcGF5bG9hZCA9IHNkcC0+ZGI7Cj4+ICsJdTMyIHJlZzsK Pj4gKwlpbnQgaSwgbnI7Cj4+ICsKPj4gKwluciA9IGZpbmRfZmlyc3RfemVyb19iaXQoZHAtPnNk cF9yZWdfYmFuaywgU0RQX1JFR19CQU5LX1NJWkUpOwo+PiArCWlmIChuciA8IFNEUF9SRUdfQkFO S19TSVpFKQo+PiArCQlzZXRfYml0KG5yLCBkcC0+c2RwX3JlZ19iYW5rKTsKPj4gKwllbHNlCj4+ ICsJCXJldHVybiAtRUJVU1k7Cj4+ICsKPj4gKwlyZWcgPSBEV19EUF9TRFBfUkVHSVNURVJfQkFO SyArIG5yICogOSAqIDQ7Cj4+ICsKPj4gKwkvKiBTRFAgaGVhZGVyICovCj4+ICsJcmVnbWFwX3dy aXRlKGRwLT5yZWdtYXAsIHJlZywgZ2V0X3VuYWxpZ25lZF9sZTMyKCZzZHAtPmhlYWRlcikpOwo+ PiArCj4+ICsJLyogU0RQIGRhdGEgcGF5bG9hZCAqLwo+PiArCWZvciAoaSA9IDE7IGkgPCA5OyBp KyssIHBheWxvYWQgKz0gNCkKPj4gKwkJcmVnbWFwX3dyaXRlKGRwLT5yZWdtYXAsIHJlZyArIGkg KiA0LAo+PiArCQkJICAgICBGSUVMRF9QUkVQKFNEUF9SRUdTLCBnZXRfdW5hbGlnbmVkX2xlMzIo cGF5bG9hZCkpKTsKPj4gKwo+PiArCWlmIChzZHAtPmZsYWdzICYgRFdfRFBfU0RQX1ZFUlRJQ0FM X0lOVEVSVkFMKQo+PiArCQlyZWdtYXBfdXBkYXRlX2JpdHMoZHAtPnJlZ21hcCwgRFdfRFBfU0RQ X1ZFUlRJQ0FMX0NUUkwsCj4+ICsJCQkJICAgRU5fVkVSVElDQUxfU0RQIDw8IG5yLAo+PiArCQkJ CSAgIEVOX1ZFUlRJQ0FMX1NEUCA8PCBucik7Cj4+ICsKPj4gKwlpZiAoc2RwLT5mbGFncyAmIERX X0RQX1NEUF9IT1JJWk9OVEFMX0lOVEVSVkFMKQo+PiArCQlyZWdtYXBfdXBkYXRlX2JpdHMoZHAt PnJlZ21hcCwgRFdfRFBfU0RQX0hPUklaT05UQUxfQ1RSTCwKPj4gKwkJCQkgICBFTl9IT1JJWk9O VEFMX1NEUCA8PCBuciwKPj4gKwkJCQkgICBFTl9IT1JJWk9OVEFMX1NEUCA8PCBucik7Cj4+ICsK Pj4gKwlyZXR1cm4gMDsKPj4gK30KPj4gKwo+PiArc3RhdGljIHZvaWQgZHdfZHBfdnNjX3NkcF9w YWNrKGNvbnN0IHN0cnVjdCBkcm1fZHBfdnNjX3NkcCAqdnNjLAo+PiArCQkJICAgICAgIHN0cnVj dCBkd19kcF9zZHAgKnNkcCkKPgo+VXNlIGRybV9kcF92c2Nfc2RwX3BhY2soKSBpbnN0ZWFkLgoK T2vvvIwgSSB3aWxsIHRyeeOAggoKPgo+PiArewo+PiArCXNkcC0+aGVhZGVyLkhCMCA9IDA7Cj4+ ICsJc2RwLT5oZWFkZXIuSEIxID0gRFBfU0RQX1ZTQzsKPj4gKwlzZHAtPmhlYWRlci5IQjIgPSB2 c2MtPnJldmlzaW9uOwo+PiArCXNkcC0+aGVhZGVyLkhCMyA9IHZzYy0+bGVuZ3RoOwo+PiArCj4+ ICsJc2RwLT5kYlsxNl0gPSAodnNjLT5waXhlbGZvcm1hdCAmIDB4ZikgPDwgNDsKPj4gKwlzZHAt PmRiWzE2XSB8PSB2c2MtPmNvbG9yaW1ldHJ5ICYgMHhmOwo+PiArCj4+ICsJc3dpdGNoICh2c2Mt PmJwYykgewo+PiArCWNhc2UgODoKPj4gKwkJc2RwLT5kYlsxN10gPSAweDE7Cj4+ICsJCWJyZWFr Owo+PiArCWNhc2UgMTA6Cj4+ICsJCXNkcC0+ZGJbMTddID0gMHgyOwo+PiArCQlicmVhazsKPj4g KwljYXNlIDEyOgo+PiArCQlzZHAtPmRiWzE3XSA9IDB4MzsKPj4gKwkJYnJlYWs7Cj4+ICsJY2Fz ZSAxNjoKPj4gKwkJc2RwLT5kYlsxN10gPSAweDQ7Cj4+ICsJCWJyZWFrOwo+PiArCWNhc2UgNjoK Pj4gKwlkZWZhdWx0Ogo+PiArCQlicmVhazsKPj4gKwl9Cj4+ICsKPj4gKwlpZiAodnNjLT5keW5h bWljX3JhbmdlID09IERQX0RZTkFNSUNfUkFOR0VfQ1RBKQo+PiArCQlzZHAtPmRiWzE3XSB8PSAw eDgwOwo+PiArCj4+ICsJc2RwLT5kYlsxOF0gPSB2c2MtPmNvbnRlbnRfdHlwZSAmIDB4NzsKPj4g Kwo+PiArCXNkcC0+ZmxhZ3MgfD0gRFdfRFBfU0RQX1ZFUlRJQ0FMX0lOVEVSVkFMOwo+PiArfQo+ PiArCj4+ICtzdGF0aWMgaW50IGR3X2RwX3NlbmRfdnNjX3NkcChzdHJ1Y3QgZHdfZHAgKmRwKQo+ PiArewo+PiArCXN0cnVjdCBkd19kcF92aWRlbyAqdmlkZW8gPSAmZHAtPnZpZGVvOwo+PiArCXN0 cnVjdCBkcm1fZHBfdnNjX3NkcCB2c2MgPSB7fTsKPj4gKwlzdHJ1Y3QgZHdfZHBfc2RwIHNkcCA9 IHt9Owo+PiArCj4+ICsJdnNjLnJldmlzaW9uID0gMHg1Owo+PiArCXZzYy5sZW5ndGggPSAweDEz Owo+PiArCj4+ICsJc3dpdGNoICh2aWRlby0+Y29sb3JfZm9ybWF0KSB7Cj4+ICsJY2FzZSBEUk1f Q09MT1JfRk9STUFUX1lDQkNSNDQ0Ogo+PiArCQl2c2MucGl4ZWxmb3JtYXQgPSBEUF9QSVhFTEZP Uk1BVF9ZVVY0NDQ7Cj4+ICsJCWJyZWFrOwo+PiArCWNhc2UgRFJNX0NPTE9SX0ZPUk1BVF9ZQ0JD UjQyMDoKPj4gKwkJdnNjLnBpeGVsZm9ybWF0ID0gRFBfUElYRUxGT1JNQVRfWVVWNDIwOwo+PiAr CQlicmVhazsKPj4gKwljYXNlIERSTV9DT0xPUl9GT1JNQVRfWUNCQ1I0MjI6Cj4+ICsJCXZzYy5w aXhlbGZvcm1hdCA9IERQX1BJWEVMRk9STUFUX1lVVjQyMjsKPj4gKwkJYnJlYWs7Cj4+ICsJY2Fz ZSBEUk1fQ09MT1JfRk9STUFUX1JHQjQ0NDoKPj4gKwlkZWZhdWx0Ogo+PiArCQl2c2MucGl4ZWxm b3JtYXQgPSBEUF9QSVhFTEZPUk1BVF9SR0I7Cj4+ICsJCWJyZWFrOwo+PiArCX0KPj4gKwo+PiAr CWlmICh2aWRlby0+Y29sb3JfZm9ybWF0ID09IERSTV9DT0xPUl9GT1JNQVRfUkdCNDQ0KSB7Cj4+ ICsJCXZzYy5jb2xvcmltZXRyeSA9IERQX0NPTE9SSU1FVFJZX0RFRkFVTFQ7Cj4+ICsJCXZzYy5k eW5hbWljX3JhbmdlID0gRFBfRFlOQU1JQ19SQU5HRV9WRVNBOwo+PiArCX0gZWxzZSB7Cj4+ICsJ CXZzYy5jb2xvcmltZXRyeSA9IERQX0NPTE9SSU1FVFJZX0JUNzA5X1lDQzsKPj4gKwkJdnNjLmR5 bmFtaWNfcmFuZ2UgPSBEUF9EWU5BTUlDX1JBTkdFX0NUQTsKPj4gKwl9Cj4+ICsKPj4gKwl2c2Mu YnBjID0gdmlkZW8tPmJwYzsKPj4gKwl2c2MuY29udGVudF90eXBlID0gRFBfQ09OVEVOVF9UWVBF X05PVF9ERUZJTkVEOwo+PiArCj4+ICsJZHdfZHBfdnNjX3NkcF9wYWNrKCZ2c2MsICZzZHApOwo+ PiArCj4+ICsJcmV0dXJuIGR3X2RwX3NlbmRfc2RwKGRwLCAmc2RwKTsKPj4gK30KPj4gKwo+PiAr c3RhdGljIGludCBkd19kcF92aWRlb19zZXRfcGl4ZWxfbW9kZShzdHJ1Y3QgZHdfZHAgKmRwLCB1 OCBwaXhlbF9tb2RlKQo+PiArewo+PiArCXN3aXRjaCAocGl4ZWxfbW9kZSkgewo+PiArCWNhc2Ug RFdfRFBfTVBfU0lOR0xFX1BJWEVMOgo+PiArCWNhc2UgRFdfRFBfTVBfRFVBTF9QSVhFTDoKPj4g KwljYXNlIERXX0RQX01QX1FVQURfUElYRUw6Cj4+ICsJCWJyZWFrOwo+PiArCWRlZmF1bHQ6Cj4+ ICsJCXJldHVybiAtRUlOVkFMOwo+Cj5JcyBpdCBwb3NzaWJsZT8KClRoaXMgSVAgaXMgY29uZmln dXJhYmxlIGZvciBzaW5nbGUvZHVhbC9xdWFkIHBpeGVsIG1vZGVz44CCCkl0J3MgIHF1YWQgcGl4 ZWwgbW9kZSBvbiByazM1ODggYW5kIGR1YWwgcGl4ZWwgbW9kZSBvbiByazM1NzYsCnNvIHdlIGFk ZCB0aGlzIGNoZWNrIGhlcmUuCgoKPgo+PiArCX0KPj4gKwo+PiArCXJlZ21hcF91cGRhdGVfYml0 cyhkcC0+cmVnbWFwLCBEV19EUF9WU0FNUExFX0NUUkwsIFBJWEVMX01PREVfU0VMRUNULAo+PiAr CQkJICAgRklFTERfUFJFUChQSVhFTF9NT0RFX1NFTEVDVCwgcGl4ZWxfbW9kZSkpOwo+PiArCj4+ ICsJcmV0dXJuIDA7Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyBib29sIGR3X2RwX3ZpZGVvX25lZWRf dnNjX3NkcChzdHJ1Y3QgZHdfZHAgKmRwKQo+PiArewo+PiArCXN0cnVjdCBkd19kcF9saW5rICps aW5rID0gJmRwLT5saW5rOwo+PiArCXN0cnVjdCBkd19kcF92aWRlbyAqdmlkZW8gPSAmZHAtPnZp ZGVvOwo+PiArCj4+ICsJaWYgKCFsaW5rLT52c2Nfc2RwX3N1cHBvcnRlZCkKPj4gKwkJcmV0dXJu IGZhbHNlOwo+PiArCj4+ICsJaWYgKHZpZGVvLT5jb2xvcl9mb3JtYXQgPT0gRFJNX0NPTE9SX0ZP Uk1BVF9ZQ0JDUjQyMCkKPj4gKwkJcmV0dXJuIHRydWU7Cj4+ICsKPj4gKwlyZXR1cm4gZmFsc2U7 Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyBpbnQgZHdfZHBfdmlkZW9fc2V0X21zYShzdHJ1Y3QgZHdf ZHAgKmRwLCB1OCBjb2xvcl9mb3JtYXQsIHU4IGJwYywKPj4gKwkJCSAgICAgICB1MTYgdnN0YXJ0 LCB1MTYgaHN0YXJ0KQo+PiArewo+PiArCXUxNiBtaXNjID0gMDsKPj4gKwo+PiArCWlmIChkd19k cF92aWRlb19uZWVkX3ZzY19zZHAoZHApKQo+PiArCQltaXNjIHw9IERQX01TQV9NSVNDX0NPTE9S X1ZTQ19TRFA7Cj4+ICsKPj4gKwlzd2l0Y2ggKGNvbG9yX2Zvcm1hdCkgewo+PiArCWNhc2UgRFJN X0NPTE9SX0ZPUk1BVF9SR0I0NDQ6Cj4+ICsJCW1pc2MgfD0gRFBfTVNBX01JU0NfQ09MT1JfUkdC Owo+PiArCQlicmVhazsKPj4gKwljYXNlIERSTV9DT0xPUl9GT1JNQVRfWUNCQ1I0NDQ6Cj4+ICsJ CW1pc2MgfD0gRFBfTVNBX01JU0NfQ09MT1JfWUNCQ1JfNDQ0X0JUNzA5Owo+PiArCQlicmVhazsK Pj4gKwljYXNlIERSTV9DT0xPUl9GT1JNQVRfWUNCQ1I0MjI6Cj4+ICsJCW1pc2MgfD0gRFBfTVNB X01JU0NfQ09MT1JfWUNCQ1JfNDIyX0JUNzA5Owo+PiArCQlicmVhazsKPj4gKwljYXNlIERSTV9D T0xPUl9GT1JNQVRfWUNCQ1I0MjA6Cj4+ICsJCWJyZWFrOwo+PiArCWRlZmF1bHQ6Cj4+ICsJCXJl dHVybiAtRUlOVkFMOwo+PiArCX0KPj4gKwo+PiArCXN3aXRjaCAoYnBjKSB7Cj4+ICsJY2FzZSA2 Ogo+PiArCQltaXNjIHw9IERQX01TQV9NSVNDXzZfQlBDOwo+PiArCQlicmVhazsKPj4gKwljYXNl IDg6Cj4+ICsJCW1pc2MgfD0gRFBfTVNBX01JU0NfOF9CUEM7Cj4+ICsJCWJyZWFrOwo+PiArCWNh c2UgMTA6Cj4+ICsJCW1pc2MgfD0gRFBfTVNBX01JU0NfMTBfQlBDOwo+PiArCQlicmVhazsKPj4g KwljYXNlIDEyOgo+PiArCQltaXNjIHw9IERQX01TQV9NSVNDXzEyX0JQQzsKPj4gKwkJYnJlYWs7 Cj4+ICsJY2FzZSAxNjoKPj4gKwkJbWlzYyB8PSBEUF9NU0FfTUlTQ18xNl9CUEM7Cj4+ICsJCWJy ZWFrOwo+PiArCWRlZmF1bHQ6Cj4+ICsJCXJldHVybiAtRUlOVkFMOwo+PiArCX0KPj4gKwo+PiAr CXJlZ21hcF93cml0ZShkcC0+cmVnbWFwLCBEV19EUF9WSURFT19NU0ExLAo+PiArCQkgICAgIEZJ RUxEX1BSRVAoVlNUQVJULCB2c3RhcnQpIHwgRklFTERfUFJFUChIU1RBUlQsIGhzdGFydCkpOwo+ PiArCXJlZ21hcF93cml0ZShkcC0+cmVnbWFwLCBEV19EUF9WSURFT19NU0EyLCBGSUVMRF9QUkVQ KE1JU0MwLCBtaXNjKSk7Cj4+ICsJcmVnbWFwX3dyaXRlKGRwLT5yZWdtYXAsIERXX0RQX1ZJREVP X01TQTMsIEZJRUxEX1BSRVAoTUlTQzEsIG1pc2MgPj4gOCkpOwo+PiArCj4+ICsJcmV0dXJuIDA7 Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyB2b2lkIGR3X2RwX3ZpZGVvX2Rpc2FibGUoc3RydWN0IGR3 X2RwICpkcCkKPj4gK3sKPj4gKwlyZWdtYXBfdXBkYXRlX2JpdHMoZHAtPnJlZ21hcCwgRFdfRFBf VlNBTVBMRV9DVFJMLCBWSURFT19TVFJFQU1fRU5BQkxFLAo+PiArCQkJICAgRklFTERfUFJFUChW SURFT19TVFJFQU1fRU5BQkxFLCAwKSk7Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyBpbnQgZHdfZHBf dmlkZW9fZW5hYmxlKHN0cnVjdCBkd19kcCAqZHApCj4+ICt7Cj4+ICsJc3RydWN0IGR3X2RwX3Zp ZGVvICp2aWRlbyA9ICZkcC0+dmlkZW87Cj4+ICsJc3RydWN0IGR3X2RwX2xpbmsgKmxpbmsgPSAm ZHAtPmxpbms7Cj4+ICsJc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGUgPSAmdmlkZW8tPm1v ZGU7Cj4+ICsJdTggY29sb3JfZm9ybWF0ID0gdmlkZW8tPmNvbG9yX2Zvcm1hdDsKPj4gKwl1OCBi cGMgPSB2aWRlby0+YnBjOwo+PiArCXU4IHBpeGVsX21vZGUgPSB2aWRlby0+cGl4ZWxfbW9kZTsK Pj4gKwl1OCBicHAgPSB2aWRlby0+YnBwLCBpbml0X3RocmVzaG9sZCwgdmljOwo+PiArCXUzMiBo YWN0aXZlLCBoYmxhbmssIGhfc3luY193aWR0aCwgaF9mcm9udF9wb3JjaDsKPj4gKwl1MzIgdmFj dGl2ZSwgdmJsYW5rLCB2X3N5bmNfd2lkdGgsIHZfZnJvbnRfcG9yY2g7Cj4+ICsJdTMyIHZzdGFy dCA9IG1vZGUtPnZ0b3RhbCAtIG1vZGUtPnZzeW5jX3N0YXJ0Owo+PiArCXUzMiBoc3RhcnQgPSBt b2RlLT5odG90YWwgLSBtb2RlLT5oc3luY19zdGFydDsKPj4gKwl1MzIgcGVha19zdHJlYW1fYmFu ZHdpZHRoLCBsaW5rX2JhbmR3aWR0aDsKPj4gKwl1MzIgYXZlcmFnZV9ieXRlc19wZXJfdHUsIGF2 ZXJhZ2VfYnl0ZXNfcGVyX3R1X2ZyYWM7Cj4+ICsJdTMyIHRzLCBoYmxhbmtfaW50ZXJ2YWw7Cj4+ ICsJdTMyIHZhbHVlOwo+PiArCWludCByZXQ7Cj4+ICsKPj4gKwlyZXQgPSBkd19kcF92aWRlb19z ZXRfcGl4ZWxfbW9kZShkcCwgcGl4ZWxfbW9kZSk7Cj4+ICsJaWYgKHJldCkKPj4gKwkJcmV0dXJu IHJldDsKPj4gKwo+PiArCXJldCA9IGR3X2RwX3ZpZGVvX3NldF9tc2EoZHAsIGNvbG9yX2Zvcm1h dCwgYnBjLCB2c3RhcnQsIGhzdGFydCk7Cj4+ICsJaWYgKHJldCkKPj4gKwkJcmV0dXJuIHJldDsK Pj4gKwo+PiArCXJlZ21hcF91cGRhdGVfYml0cyhkcC0+cmVnbWFwLCBEV19EUF9WU0FNUExFX0NU UkwsIFZJREVPX01BUFBJTkcsCj4+ICsJCQkgICBGSUVMRF9QUkVQKFZJREVPX01BUFBJTkcsIHZp ZGVvLT52aWRlb19tYXBwaW5nKSk7Cj4+ICsKPj4gKwkvKiBDb25maWd1cmUgRFdfRFBfVklOUFVU X1BPTEFSSVRZX0NUUkwgcmVnaXN0ZXIgKi8KPj4gKwl2YWx1ZSA9IDA7Cj4+ICsJaWYgKG1vZGUt PmZsYWdzICYgRFJNX01PREVfRkxBR19QSFNZTkMpCj4+ICsJCXZhbHVlIHw9IEZJRUxEX1BSRVAo SFNZTkNfSU5fUE9MQVJJVFksIDEpOwo+PiArCWlmIChtb2RlLT5mbGFncyAmIERSTV9NT0RFX0ZM QUdfUFZTWU5DKQo+PiArCQl2YWx1ZSB8PSBGSUVMRF9QUkVQKFZTWU5DX0lOX1BPTEFSSVRZLCAx KTsKPj4gKwlyZWdtYXBfd3JpdGUoZHAtPnJlZ21hcCwgRFdfRFBfVklOUFVUX1BPTEFSSVRZX0NU UkwsIHZhbHVlKTsKPj4gKwo+PiArCS8qIENvbmZpZ3VyZSBEV19EUF9WSURFT19DT05GSUcxIHJl Z2lzdGVyICovCj4+ICsJaGFjdGl2ZSA9IG1vZGUtPmhkaXNwbGF5Owo+PiArCWhibGFuayA9IG1v ZGUtPmh0b3RhbCAtIG1vZGUtPmhkaXNwbGF5Owo+PiArCXZhbHVlID0gRklFTERfUFJFUChIQUNU SVZFLCBoYWN0aXZlKSB8IEZJRUxEX1BSRVAoSEJMQU5LLCBoYmxhbmspOwo+PiArCWlmIChtb2Rl LT5mbGFncyAmIERSTV9NT0RFX0ZMQUdfSU5URVJMQUNFKQo+PiArCQl2YWx1ZSB8PSBGSUVMRF9Q UkVQKElfUCwgMSk7Cj4+ICsJdmljID0gZHJtX21hdGNoX2NlYV9tb2RlKG1vZGUpOwo+PiArCWlm ICh2aWMgPT0gNSB8fCB2aWMgPT0gNiB8fCB2aWMgPT0gNyB8fAo+PiArCSAgICB2aWMgPT0gMTAg fHwgdmljID09IDExIHx8IHZpYyA9PSAyMCB8fAo+PiArCSAgICB2aWMgPT0gMjEgfHwgdmljID09 IDIyIHx8IHZpYyA9PSAzOSB8fAo+PiArCSAgICB2aWMgPT0gMjUgfHwgdmljID09IDI2IHx8IHZp YyA9PSA0MCB8fAo+PiArCSAgICB2aWMgPT0gNDQgfHwgdmljID09IDQ1IHx8IHZpYyA9PSA0NiB8 fAo+PiArCSAgICB2aWMgPT0gNTAgfHwgdmljID09IDUxIHx8IHZpYyA9PSA1NCB8fAo+PiArCSAg ICB2aWMgPT0gNTUgfHwgdmljID09IDU4IHx8IHZpYyAgPT0gNTkpCj4+ICsJCXZhbHVlIHw9IFJf Vl9CTEFOS19JTl9PU0M7Cj4+ICsJcmVnbWFwX3dyaXRlKGRwLT5yZWdtYXAsIERXX0RQX1ZJREVP X0NPTkZJRzEsIHZhbHVlKTsKPj4gKwo+PiArCS8qIENvbmZpZ3VyZSBEV19EUF9WSURFT19DT05G SUcyIHJlZ2lzdGVyICovCj4+ICsJdmJsYW5rID0gbW9kZS0+dnRvdGFsIC0gbW9kZS0+dmRpc3Bs YXk7Cj4+ICsJdmFjdGl2ZSA9IG1vZGUtPnZkaXNwbGF5Owo+PiArCXJlZ21hcF93cml0ZShkcC0+ cmVnbWFwLCBEV19EUF9WSURFT19DT05GSUcyLAo+PiArCQkgICAgIEZJRUxEX1BSRVAoVkJMQU5L LCB2YmxhbmspIHwgRklFTERfUFJFUChWQUNUSVZFLCB2YWN0aXZlKSk7Cj4+ICsKPj4gKwkvKiBD b25maWd1cmUgRFdfRFBfVklERU9fQ09ORklHMyByZWdpc3RlciAqLwo+PiArCWhfc3luY193aWR0 aCA9IG1vZGUtPmhzeW5jX2VuZCAtIG1vZGUtPmhzeW5jX3N0YXJ0Owo+PiArCWhfZnJvbnRfcG9y Y2ggPSBtb2RlLT5oc3luY19zdGFydCAtIG1vZGUtPmhkaXNwbGF5Owo+PiArCXJlZ21hcF93cml0 ZShkcC0+cmVnbWFwLCBEV19EUF9WSURFT19DT05GSUczLAo+PiArCQkgICAgIEZJRUxEX1BSRVAo SF9TWU5DX1dJRFRILCBoX3N5bmNfd2lkdGgpIHwKPj4gKwkJICAgICBGSUVMRF9QUkVQKEhfRlJP TlRfUE9SQ0gsIGhfZnJvbnRfcG9yY2gpKTsKPj4gKwo+PiArCS8qIENvbmZpZ3VyZSBEV19EUF9W SURFT19DT05GSUc0IHJlZ2lzdGVyICovCj4+ICsJdl9zeW5jX3dpZHRoID0gbW9kZS0+dnN5bmNf ZW5kIC0gbW9kZS0+dnN5bmNfc3RhcnQ7Cj4+ICsJdl9mcm9udF9wb3JjaCA9IG1vZGUtPnZzeW5j X3N0YXJ0IC0gbW9kZS0+dmRpc3BsYXk7Cj4+ICsJcmVnbWFwX3dyaXRlKGRwLT5yZWdtYXAsIERX X0RQX1ZJREVPX0NPTkZJRzQsCj4+ICsJCSAgICAgRklFTERfUFJFUChWX1NZTkNfV0lEVEgsIHZf c3luY193aWR0aCkgfAo+PiArCQkgICAgIEZJRUxEX1BSRVAoVl9GUk9OVF9QT1JDSCwgdl9mcm9u dF9wb3JjaCkpOwo+PiArCj4+ICsJLyogQ29uZmlndXJlIERXX0RQX1ZJREVPX0NPTkZJRzUgcmVn aXN0ZXIgKi8KPj4gKwlwZWFrX3N0cmVhbV9iYW5kd2lkdGggPSBtb2RlLT5jbG9jayAqIGJwcCAv IDg7Cj4+ICsJbGlua19iYW5kd2lkdGggPSAobGluay0+cmF0ZSAvIDEwMDApICogbGluay0+bGFu ZXM7Cj4+ICsJdHMgPSBwZWFrX3N0cmVhbV9iYW5kd2lkdGggKiA2NCAvIGxpbmtfYmFuZHdpZHRo Owo+PiArCWF2ZXJhZ2VfYnl0ZXNfcGVyX3R1ID0gdHMgLyAxMDAwOwo+PiArCWF2ZXJhZ2VfYnl0 ZXNfcGVyX3R1X2ZyYWMgPSB0cyAvIDEwMCAtIGF2ZXJhZ2VfYnl0ZXNfcGVyX3R1ICogMTA7Cj4+ ICsJaWYgKHBpeGVsX21vZGUgPT0gRFdfRFBfTVBfU0lOR0xFX1BJWEVMKSB7Cj4+ICsJCWlmIChh dmVyYWdlX2J5dGVzX3Blcl90dSA8IDYpCj4+ICsJCQlpbml0X3RocmVzaG9sZCA9IDMyOwo+PiAr CQllbHNlIGlmIChoYmxhbmsgPD0gODAgJiYgY29sb3JfZm9ybWF0ICE9IERSTV9DT0xPUl9GT1JN QVRfWUNCQ1I0MjApCj4+ICsJCQlpbml0X3RocmVzaG9sZCA9IDEyOwo+PiArCQllbHNlIGlmICho YmxhbmsgPD0gNDAgJiYgY29sb3JfZm9ybWF0ID09IERSTV9DT0xPUl9GT1JNQVRfWUNCQ1I0MjAp Cj4+ICsJCQlpbml0X3RocmVzaG9sZCA9IDM7Cj4+ICsJCWVsc2UKPj4gKwkJCWluaXRfdGhyZXNo b2xkID0gMTY7Cj4+ICsJfSBlbHNlIHsKPj4gKwkJdTMyIHQxID0gMCwgdDIgPSAwLCB0MyA9IDA7 Cj4+ICsKPj4gKwkJc3dpdGNoIChicGMpIHsKPj4gKwkJY2FzZSA2Ogo+PiArCQkJdDEgPSAoNCAq IDEwMDAgLyA5KSAqIGxpbmstPmxhbmVzOwo+PiArCQkJYnJlYWs7Cj4+ICsJCWNhc2UgODoKPj4g KwkJCWlmIChjb2xvcl9mb3JtYXQgPT0gRFJNX0NPTE9SX0ZPUk1BVF9ZQ0JDUjQyMikgewo+PiAr CQkJCXQxID0gKDEwMDAgLyAyKSAqIGxpbmstPmxhbmVzOwo+PiArCQkJfSBlbHNlIHsKPj4gKwkJ CQlpZiAocGl4ZWxfbW9kZSA9PSBEV19EUF9NUF9EVUFMX1BJWEVMKQo+PiArCQkJCQl0MSA9ICgx MDAwIC8gMykgKiBsaW5rLT5sYW5lczsKPj4gKwkJCQllbHNlCj4+ICsJCQkJCXQxID0gKDMwMDAg LyAxNikgKiBsaW5rLT5sYW5lczsKPj4gKwkJCX0KPj4gKwkJCWJyZWFrOwo+PiArCQljYXNlIDEw Ogo+PiArCQkJaWYgKGNvbG9yX2Zvcm1hdCA9PSBEUk1fQ09MT1JfRk9STUFUX1lDQkNSNDIyKQo+ PiArCQkJCXQxID0gKDIwMDAgLyA1KSAqIGxpbmstPmxhbmVzOwo+PiArCQkJZWxzZQo+PiArCQkJ CXQxID0gKDQwMDAgLyAxNSkgKiBsaW5rLT5sYW5lczsKPj4gKwkJCWJyZWFrOwo+PiArCQljYXNl IDEyOgo+PiArCQkJaWYgKGNvbG9yX2Zvcm1hdCA9PSBEUk1fQ09MT1JfRk9STUFUX1lDQkNSNDIy KSB7Cj4+ICsJCQkJaWYgKHBpeGVsX21vZGUgPT0gRFdfRFBfTVBfRFVBTF9QSVhFTCkKPj4gKwkJ CQkJdDEgPSAoMTAwMCAvIDYpICogbGluay0+bGFuZXM7Cj4+ICsJCQkJZWxzZQo+PiArCQkJCQl0 MSA9ICgxMDAwIC8gMykgKiBsaW5rLT5sYW5lczsKPj4gKwkJCX0gZWxzZSB7Cj4+ICsJCQkJdDEg PSAoMjAwMCAvIDkpICogbGluay0+bGFuZXM7Cj4+ICsJCQl9Cj4+ICsJCQlicmVhazsKPj4gKwkJ Y2FzZSAxNjoKPj4gKwkJCWlmIChjb2xvcl9mb3JtYXQgIT0gRFJNX0NPTE9SX0ZPUk1BVF9ZQ0JD UjQyMiAmJgo+PiArCQkJICAgIHBpeGVsX21vZGUgPT0gRFdfRFBfTVBfRFVBTF9QSVhFTCkKPj4g KwkJCQl0MSA9ICgxMDAwIC8gNikgKiBsaW5rLT5sYW5lczsKPj4gKwkJCWVsc2UKPj4gKwkJCQl0 MSA9ICgxMDAwIC8gNCkgKiBsaW5rLT5sYW5lczsKPj4gKwkJCWJyZWFrOwo+PiArCQlkZWZhdWx0 Ogo+PiArCQkJcmV0dXJuIC1FSU5WQUw7Cj4+ICsJCX0KPj4gKwo+PiArCQlpZiAoY29sb3JfZm9y bWF0ID09IERSTV9DT0xPUl9GT1JNQVRfWUNCQ1I0MjApCj4+ICsJCQl0MiA9IChsaW5rLT5yYXRl IC8gNCkgKiAxMDAwIC8gKG1vZGUtPmNsb2NrIC8gMik7Cj4+ICsJCWVsc2UKPj4gKwkJCXQyID0g KGxpbmstPnJhdGUgLyA0KSAqIDEwMDAgLyBtb2RlLT5jbG9jazsKPj4gKwo+PiArCQlpZiAoYXZl cmFnZV9ieXRlc19wZXJfdHVfZnJhYykKPj4gKwkJCXQzID0gYXZlcmFnZV9ieXRlc19wZXJfdHUg KyAxOwo+PiArCQllbHNlCj4+ICsJCQl0MyA9IGF2ZXJhZ2VfYnl0ZXNfcGVyX3R1Owo+PiArCQlp bml0X3RocmVzaG9sZCA9IHQxICogdDIgKiB0MyAvICgxMDAwICogMTAwMCk7Cj4+ICsJCWlmIChp bml0X3RocmVzaG9sZCA8PSAxNiB8fCBhdmVyYWdlX2J5dGVzX3Blcl90dSA8IDEwKQo+PiArCQkJ aW5pdF90aHJlc2hvbGQgPSA0MDsKPj4gKwl9Cj4+ICsKPj4gKwlyZWdtYXBfd3JpdGUoZHAtPnJl Z21hcCwgRFdfRFBfVklERU9fQ09ORklHNSwKPj4gKwkJICAgICBGSUVMRF9QUkVQKElOSVRfVEhS RVNIT0xEX0hJLCBpbml0X3RocmVzaG9sZCA+PiA2KSB8Cj4+ICsJCSAgICAgRklFTERfUFJFUChB VkVSQUdFX0JZVEVTX1BFUl9UVV9GUkFDLCBhdmVyYWdlX2J5dGVzX3Blcl90dV9mcmFjKSB8Cj4+ ICsJCSAgICAgRklFTERfUFJFUChJTklUX1RIUkVTSE9MRCwgaW5pdF90aHJlc2hvbGQpIHwKPj4g KwkJICAgICBGSUVMRF9QUkVQKEFWRVJBR0VfQllURVNfUEVSX1RVLCBhdmVyYWdlX2J5dGVzX3Bl cl90dSkpOwo+PiArCj4+ICsJLyogQ29uZmlndXJlIERXX0RQX1ZJREVPX0hCTEFOS19JTlRFUlZB TCByZWdpc3RlciAqLwo+PiArCWhibGFua19pbnRlcnZhbCA9IGhibGFuayAqIChsaW5rLT5yYXRl IC8gNCkgLyBtb2RlLT5jbG9jazsKPj4gKwlyZWdtYXBfd3JpdGUoZHAtPnJlZ21hcCwgRFdfRFBf VklERU9fSEJMQU5LX0lOVEVSVkFMLAo+PiArCQkgICAgIEZJRUxEX1BSRVAoSEJMQU5LX0lOVEVS VkFMX0VOLCAxKSB8Cj4+ICsJCSAgICAgRklFTERfUFJFUChIQkxBTktfSU5URVJWQUwsIGhibGFu a19pbnRlcnZhbCkpOwo+PiArCj4+ICsJLyogVmlkZW8gc3RyZWFtIGVuYWJsZSAqLwo+PiArCXJl Z21hcF91cGRhdGVfYml0cyhkcC0+cmVnbWFwLCBEV19EUF9WU0FNUExFX0NUUkwsIFZJREVPX1NU UkVBTV9FTkFCTEUsCj4+ICsJCQkgICBGSUVMRF9QUkVQKFZJREVPX1NUUkVBTV9FTkFCTEUsIDEp KTsKPj4gKwo+PiArCWlmIChkd19kcF92aWRlb19uZWVkX3ZzY19zZHAoZHApKQo+PiArCQlkd19k cF9zZW5kX3ZzY19zZHAoZHApOwo+PiArCj4+ICsJcmV0dXJuIDA7Cj4+ICt9Cj4+ICsKPj4gK3N0 YXRpYyB2b2lkIGR3X2RwX2hwZF9pbml0KHN0cnVjdCBkd19kcCAqZHApCj4+ICt7Cj4+ICsJLyog RW5hYmxlIGFsbCBIUEQgaW50ZXJydXB0cyAqLwo+PiArCXJlZ21hcF91cGRhdGVfYml0cyhkcC0+ cmVnbWFwLCBEV19EUF9IUERfSU5URVJSVVBUX0VOQUJMRSwKPj4gKwkJCSAgIEhQRF9VTlBMVUdf RU4gfCBIUERfUExVR19FTiB8IEhQRF9JUlFfRU4sCj4+ICsJCQkgICBGSUVMRF9QUkVQKEhQRF9V TlBMVUdfRU4sIDEpIHwKPj4gKwkJCSAgIEZJRUxEX1BSRVAoSFBEX1BMVUdfRU4sIDEpIHwKPj4g KwkJCSAgIEZJRUxEX1BSRVAoSFBEX0lSUV9FTiwgMSkpOwo+PiArCj4+ICsJLyogRW5hYmxlIGFs bCB0b3AtbGV2ZWwgaW50ZXJydXB0cyAqLwo+PiArCXJlZ21hcF91cGRhdGVfYml0cyhkcC0+cmVn bWFwLCBEV19EUF9HRU5FUkFMX0lOVEVSUlVQVF9FTkFCTEUsCj4+ICsJCQkgICBIUERfRVZFTlRf RU4sIEZJRUxEX1BSRVAoSFBEX0VWRU5UX0VOLCAxKSk7Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyB2 b2lkIGR3X2RwX2F1eF9pbml0KHN0cnVjdCBkd19kcCAqZHApCj4+ICt7Cj4+ICsJcmVnbWFwX3Vw ZGF0ZV9iaXRzKGRwLT5yZWdtYXAsIERXX0RQX0dFTkVSQUxfSU5URVJSVVBUX0VOQUJMRSwKPj4g KwkJCSAgIEFVWF9SRVBMWV9FVkVOVF9FTiwgRklFTERfUFJFUChBVVhfUkVQTFlfRVZFTlRfRU4s IDEpKTsKPj4gK30KPj4gKwo+PiArc3RhdGljIHZvaWQgZHdfZHBfaW5pdF9odyhzdHJ1Y3QgZHdf ZHAgKmRwKQo+PiArewo+PiArCXJlZ21hcF91cGRhdGVfYml0cyhkcC0+cmVnbWFwLCBEV19EUF9D Q1RMLCBERUZBVUxUX0ZBU1RfTElOS19UUkFJTl9FTiwKPj4gKwkJCSAgIEZJRUxEX1BSRVAoREVG QVVMVF9GQVNUX0xJTktfVFJBSU5fRU4sIDApKTsKPj4gKwo+PiArCWR3X2RwX2hwZF9pbml0KGRw KTsKPj4gKwlkd19kcF9hdXhfaW5pdChkcCk7Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyBpbnQgZHdf ZHBfYXV4X3dyaXRlX2RhdGEoc3RydWN0IGR3X2RwICpkcCwgY29uc3QgdTggKmJ1ZmZlciwgc2l6 ZV90IHNpemUpCj4+ICt7Cj4+ICsJc2l6ZV90IGksIGo7Cj4+ICsKPj4gKwlmb3IgKGkgPSAwOyBp IDwgRElWX1JPVU5EX1VQKHNpemUsIDQpOyBpKyspIHsKPj4gKwkJc2l6ZV90IG51bSA9IG1pbl90 KHNpemVfdCwgc2l6ZSAtIGkgKiA0LCA0KTsKPj4gKwkJdTMyIHZhbHVlID0gMDsKPj4gKwo+PiAr CQlmb3IgKGogPSAwOyBqIDwgbnVtOyBqKyspCj4+ICsJCQl2YWx1ZSB8PSBidWZmZXJbaSAqIDQg KyBqXSA8PCAoaiAqIDgpOwo+PiArCj4+ICsJCXJlZ21hcF93cml0ZShkcC0+cmVnbWFwLCBEV19E UF9BVVhfREFUQTAgKyBpICogNCwgdmFsdWUpOwo+PiArCX0KPj4gKwo+PiArCXJldHVybiBzaXpl Owo+PiArfQo+PiArCj4+ICtzdGF0aWMgaW50IGR3X2RwX2F1eF9yZWFkX2RhdGEoc3RydWN0IGR3 X2RwICpkcCwgdTggKmJ1ZmZlciwgc2l6ZV90IHNpemUpCj4+ICt7Cj4+ICsJc2l6ZV90IGksIGo7 Cj4+ICsKPj4gKwlmb3IgKGkgPSAwOyBpIDwgRElWX1JPVU5EX1VQKHNpemUsIDQpOyBpKyspIHsK Pj4gKwkJc2l6ZV90IG51bSA9IG1pbl90KHNpemVfdCwgc2l6ZSAtIGkgKiA0LCA0KTsKPj4gKwkJ dTMyIHZhbHVlOwo+PiArCj4+ICsJCXJlZ21hcF9yZWFkKGRwLT5yZWdtYXAsIERXX0RQX0FVWF9E QVRBMCArIGkgKiA0LCAmdmFsdWUpOwo+PiArCj4+ICsJCWZvciAoaiA9IDA7IGogPCBudW07IGor KykKPj4gKwkJCWJ1ZmZlcltpICogNCArIGpdID0gdmFsdWUgPj4gKGogKiA4KTsKPj4gKwl9Cj4+ ICsKPj4gKwlyZXR1cm4gc2l6ZTsKPj4gK30KPj4gKwo+PiArc3RhdGljIHNzaXplX3QgZHdfZHBf YXV4X3RyYW5zZmVyKHN0cnVjdCBkcm1fZHBfYXV4ICphdXgsCj4+ICsJCQkJICBzdHJ1Y3QgZHJt X2RwX2F1eF9tc2cgKm1zZykKPj4gK3sKPj4gKwlzdHJ1Y3QgZHdfZHAgKmRwID0gY29udGFpbmVy X29mKGF1eCwgc3RydWN0IGR3X2RwLCBhdXgpOwo+PiArCXVuc2lnbmVkIGxvbmcgdGltZW91dCA9 IG1zZWNzX3RvX2ppZmZpZXMoMTApOwo+PiArCXUzMiBzdGF0dXMsIHZhbHVlOwo+PiArCXNzaXpl X3QgcmV0ID0gMDsKPj4gKwo+PiArCWlmIChXQVJOX09OKG1zZy0+c2l6ZSA+IDE2KSkKPj4gKwkJ cmV0dXJuIC1FMkJJRzsKPj4gKwo+PiArCXN3aXRjaCAobXNnLT5yZXF1ZXN0ICYgfkRQX0FVWF9J MkNfTU9UKSB7Cj4+ICsJY2FzZSBEUF9BVVhfTkFUSVZFX1dSSVRFOgo+PiArCWNhc2UgRFBfQVVY X0kyQ19XUklURToKPj4gKwljYXNlIERQX0FVWF9JMkNfV1JJVEVfU1RBVFVTX1VQREFURToKPj4g KwkJcmV0ID0gZHdfZHBfYXV4X3dyaXRlX2RhdGEoZHAsIG1zZy0+YnVmZmVyLCBtc2ctPnNpemUp Owo+PiArCQlpZiAocmV0IDwgMCkKPj4gKwkJCXJldHVybiByZXQ7Cj4+ICsJCWJyZWFrOwo+PiAr CWNhc2UgRFBfQVVYX05BVElWRV9SRUFEOgo+PiArCWNhc2UgRFBfQVVYX0kyQ19SRUFEOgo+PiAr CQlicmVhazsKPj4gKwlkZWZhdWx0Ogo+PiArCQlyZXR1cm4gLUVJTlZBTDsKPj4gKwl9Cj4+ICsK Pj4gKwlpZiAobXNnLT5zaXplID4gMCkKPj4gKwkJdmFsdWUgPSBGSUVMRF9QUkVQKEFVWF9MRU5f UkVRLCBtc2ctPnNpemUgLSAxKTsKPj4gKwllbHNlCj4+ICsJCXZhbHVlID0gRklFTERfUFJFUChJ MkNfQUREUl9PTkxZLCAxKTsKPj4gKwl2YWx1ZSB8PSBGSUVMRF9QUkVQKEFVWF9DTURfVFlQRSwg bXNnLT5yZXF1ZXN0KTsKPj4gKwl2YWx1ZSB8PSBGSUVMRF9QUkVQKEFVWF9BRERSLCBtc2ctPmFk ZHJlc3MpOwo+PiArCXJlZ21hcF93cml0ZShkcC0+cmVnbWFwLCBEV19EUF9BVVhfQ01ELCB2YWx1 ZSk7Cj4+ICsKPj4gKwlzdGF0dXMgPSB3YWl0X2Zvcl9jb21wbGV0aW9uX3RpbWVvdXQoJmRwLT5j b21wbGV0ZSwgdGltZW91dCk7Cj4+ICsJaWYgKCFzdGF0dXMpIHsKPj4gKwkJZGV2X2VycihkcC0+ ZGV2LCAidGltZW91dCB3YWl0aW5nIGZvciBBVVggcmVwbHlcbiIpOwo+PiArCQlyZXR1cm4gLUVU SU1FRE9VVDsKPj4gKwl9Cj4+ICsKPj4gKwlyZWdtYXBfcmVhZChkcC0+cmVnbWFwLCBEV19EUF9B VVhfU1RBVFVTLCAmdmFsdWUpOwo+PiArCWlmICh2YWx1ZSAmIEFVWF9USU1FT1VUKQo+PiArCQly ZXR1cm4gLUVUSU1FRE9VVDsKPj4gKwo+PiArCW1zZy0+cmVwbHkgPSBGSUVMRF9HRVQoQVVYX1NU QVRVUywgdmFsdWUpOwo+PiArCj4+ICsJaWYgKG1zZy0+c2l6ZSA+IDAgJiYgbXNnLT5yZXBseSA9 PSBEUF9BVVhfTkFUSVZFX1JFUExZX0FDSykgewo+PiArCQlpZiAobXNnLT5yZXF1ZXN0ICYgRFBf QVVYX0kyQ19SRUFEKSB7Cj4+ICsJCQlzaXplX3QgY291bnQgPSBGSUVMRF9HRVQoQVVYX0JZVEVT X1JFQUQsIHZhbHVlKSAtIDE7Cj4+ICsKPj4gKwkJCWlmIChjb3VudCAhPSBtc2ctPnNpemUpCj4+ ICsJCQkJcmV0dXJuIC1FQlVTWTsKPj4gKwo+PiArCQkJcmV0ID0gZHdfZHBfYXV4X3JlYWRfZGF0 YShkcCwgbXNnLT5idWZmZXIsIGNvdW50KTsKPj4gKwkJCWlmIChyZXQgPCAwKQo+PiArCQkJCXJl dHVybiByZXQ7Cj4+ICsJCX0KPj4gKwl9Cj4+ICsKPj4gKwlyZXR1cm4gcmV0Owo+PiArfQo+PiAr Cj4+ICsvKgo+PiArICogTGltaXRzIGZvciB0aGUgdmlkZW8gdGltaW5nIG91dHB1dCBieSBEUDoK Pj4gKyAqIDEuIHRoZSBoZnAgc2hvdWxkIGJlIDIgcGl4ZWxzIGFsaWduZWQ7Cj4+ICsgKiAyLiB0 aGUgbWluaW11bSBoc3luYyBzaG91bGQgYmUgOSBwaXhlbDsKPj4gKyAqIDMuIHRoZSBtaW5pbXVt IGhicCBzaG91bGQgYmUgMTYgcGl4ZWw7Cj4+ICsgKi8KPj4gK3N0YXRpYyBib29sIGR3X2RwX2Jy aWRnZV9tb2RlX2ZpeHVwKHN0cnVjdCBkcm1fYnJpZGdlICpicmlkZ2UsCj4+ICsJCQkJICAgIGNv bnN0IHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICptb2RlLAo+PiArCQkJCSAgICBzdHJ1Y3QgZHJt X2Rpc3BsYXlfbW9kZSAqYWRqdXN0ZWRfbW9kZSkKPj4gK3sKPj4gKwlzdHJ1Y3QgZHdfZHAgKmRw ID0gYnJpZGdlX3RvX2RwKGJyaWRnZSk7Cj4+ICsJaW50IG1pbl9oYnAgPSAxNjsKPj4gKwlpbnQg bWluX2hzeW5jID0gOTsKPj4gKwo+PiArCWlmICgoYWRqdXN0ZWRfbW9kZS0+aHN5bmNfc3RhcnQg LSBhZGp1c3RlZF9tb2RlLT5oZGlzcGxheSkgJiAweDEpIHsKPj4gKwkJYWRqdXN0ZWRfbW9kZS0+ aHN5bmNfc3RhcnQgKz0gMTsKPj4gKwkJZGV2X3dhcm4oZHAtPmRldiwgImhmcCBpcyBub3QgMiBw aXhlZWwgYWxpZ25lZCwgZml4dXAgdG8gYWxpZ25lZCBoZnBcbiIpOwo+PiArCX0KPj4gKwlpZiAo YWRqdXN0ZWRfbW9kZS0+aHN5bmNfZW5kIC0gYWRqdXN0ZWRfbW9kZS0+aHN5bmNfc3RhcnQgPCBt aW5faHN5bmMpIHsKPj4gKwkJYWRqdXN0ZWRfbW9kZS0+aHN5bmNfZW5kID0gYWRqdXN0ZWRfbW9k ZS0+aHN5bmNfc3RhcnQgKyBtaW5faHN5bmM7Cj4+ICsJCWRldl93YXJuKGRwLT5kZXYsICJoc3lu YyBpcyB0b28gbmFycm93LCBmaXh1cCB0byBtaW4gaHN5bmM6JWRcbiIsIG1pbl9oc3luYyk7Cj4+ ICsJfQo+PiArCWlmIChhZGp1c3RlZF9tb2RlLT5odG90YWwgLSBhZGp1c3RlZF9tb2RlLT5oc3lu Y19lbmQgPCBtaW5faGJwKSB7Cj4+ICsJCWFkanVzdGVkX21vZGUtPmh0b3RhbCA9IGFkanVzdGVk X21vZGUtPmhzeW5jX2VuZCArIG1pbl9oYnA7Cj4+ICsJCWRldl93YXJuKGRwLT5kZXYsICJoYnAg aXMgdG9vIG5hcnJvdywgZml4dXAgdG8gbWluIGhicDolZFxuIiwgbWluX2hicCk7Cj4+ICsJfQo+ PiArCj4+ICsJcmV0dXJuIHRydWU7Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyBlbnVtIGRybV9tb2Rl X3N0YXR1cyBkd19kcF9icmlkZ2VfbW9kZV92YWxpZChzdHJ1Y3QgZHJtX2JyaWRnZSAqYnJpZGdl LAo+PiArCQkJCQkJICAgIGNvbnN0IHN0cnVjdCBkcm1fZGlzcGxheV9pbmZvICppbmZvLAo+PiAr CQkJCQkJICAgIGNvbnN0IHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICptb2RlKQo+PiArewo+PiAr CXN0cnVjdCBkd19kcCAqZHAgPSBicmlkZ2VfdG9fZHAoYnJpZGdlKTsKPj4gKwlzdHJ1Y3QgZHdf ZHBfbGluayAqbGluayA9ICZkcC0+bGluazsKPj4gKwl1MzIgbWluX2JwcDsKPj4gKwo+PiArCWlm IChpbmZvLT5jb2xvcl9mb3JtYXRzICYgRFJNX0NPTE9SX0ZPUk1BVF9ZQ0JDUjQyMCAmJgo+PiAr CSAgICBsaW5rLT52c2Nfc2RwX3N1cHBvcnRlZCAmJgo+PiArCSAgICAoZHJtX21vZGVfaXNfNDIw X29ubHkoaW5mbywgbW9kZSkgfHwgZHJtX21vZGVfaXNfNDIwX2Fsc28oaW5mbywgbW9kZSkpKQo+ PiArCQltaW5fYnBwID0gMTI7Cj4+ICsJZWxzZSBpZiAoaW5mby0+Y29sb3JfZm9ybWF0cyAmIERS TV9DT0xPUl9GT1JNQVRfWUNCQ1I0MjIpCj4+ICsJCW1pbl9icHAgPSAxNjsKPj4gKwllbHNlIGlm IChpbmZvLT5jb2xvcl9mb3JtYXRzICYgRFJNX0NPTE9SX0ZPUk1BVF9SR0I0NDQpCj4+ICsJCW1p bl9icHAgPSAxODsKPj4gKwllbHNlCj4+ICsJCW1pbl9icHAgPSAyNDsKPj4gKwo+PiArCWlmICgh bGluay0+dnNjX3NkcF9zdXBwb3J0ZWQgJiYKPj4gKwkgICAgZHJtX21vZGVfaXNfNDIwX29ubHko aW5mbywgbW9kZSkpCj4+ICsJCXJldHVybiBNT0RFX05PXzQyMDsKPj4gKwo+PiArCWlmICghZHdf ZHBfYmFuZHdpZHRoX29rKGRwLCBtb2RlLCBtaW5fYnBwLCBsaW5rLT5sYW5lcywgbGluay0+cmF0 ZSkpCj4+ICsJCXJldHVybiBNT0RFX0NMT0NLX0hJR0g7Cj4+ICsKPj4gKwlyZXR1cm4gTU9ERV9P SzsKPj4gK30KPj4gKwo+PiArc3RhdGljIHZvaWQgZHdfZHBfYnJpZGdlX2F0b21pY19wcmVfZW5h YmxlKHN0cnVjdCBkcm1fYnJpZGdlICpicmlkZ2UsCj4+ICsJCQkJCSAgIHN0cnVjdCBkcm1fYnJp ZGdlX3N0YXRlICpvbGRfYnJpZGdlX3N0YXRlKQo+PiArewo+PiArCXN0cnVjdCBkcm1fYXRvbWlj X3N0YXRlICpzdGF0ZSA9IG9sZF9icmlkZ2Vfc3RhdGUtPmJhc2Uuc3RhdGU7Cj4+ICsJc3RydWN0 IGRybV9jcnRjX3N0YXRlICpjcnRjX3N0YXRlID0gYnJpZGdlLT5lbmNvZGVyLT5jcnRjLT5zdGF0 ZTsKPj4gKwlzdHJ1Y3QgZHdfZHAgKmRwID0gYnJpZGdlX3RvX2RwKGJyaWRnZSk7Cj4+ICsJc3Ry dWN0IGR3X2RwX3ZpZGVvICp2aWRlbyA9ICZkcC0+dmlkZW87Cj4+ICsJc3RydWN0IGRybV9kaXNw bGF5X21vZGUgKm0gPSAmdmlkZW8tPm1vZGU7Cj4+ICsJc3RydWN0IGRybV9icmlkZ2Vfc3RhdGUg KmJyaWRnZV9zdGF0ZTsKPj4gKwljb25zdCBzdHJ1Y3QgZHdfZHBfb3V0cHV0X2Zvcm1hdCAqZm10 Owo+PiArCj4+ICsJZHJtX21vZGVfY29weShtLCAmY3J0Y19zdGF0ZS0+YWRqdXN0ZWRfbW9kZSk7 Cj4+ICsKPj4gKwlicmlkZ2Vfc3RhdGUgPSBkcm1fYXRvbWljX2dldF9uZXdfYnJpZGdlX3N0YXRl KHN0YXRlLCBicmlkZ2UpOwo+PiArCWZtdCA9IGR3X2RwX2dldF9vdXRwdXRfZm9ybWF0KGJyaWRn ZV9zdGF0ZS0+b3V0cHV0X2J1c19jZmcuZm9ybWF0KTsKPgo+U2hvdWxkIGl0IGJlIGEgcGFydCBv ZiB0aGUgYXRvbWljX2NoZWNrKCkgaW5zdGVhZD8KClNpbmNlIHdlIGhhdmUgbW9kZWZfZml4dXAg aW4gdGhpcyBkcml2ZXIsIHdoaWNoIGlzIG11dHVhbGx5IGV4Y2x1c2l2ZSB3aXRoIGF0b21pY19j aGVjay4KCgoKPgo+PiArCj4+ICsJdmlkZW8tPnZpZGVvX21hcHBpbmcgPSBmbXQtPnZpZGVvX21h cHBpbmc7Cj4+ICsJdmlkZW8tPmNvbG9yX2Zvcm1hdCA9IGZtdC0+Y29sb3JfZm9ybWF0Owo+PiAr CXZpZGVvLT5icGMgPSBmbXQtPmJwYzsKPj4gKwl2aWRlby0+YnBwID0gZm10LT5icHA7Cj4+ICt9 Cj4+ICsKPj4gK3N0YXRpYyBib29sIGR3X2RwX25lZWRzX2xpbmtfcmV0cmFpbihzdHJ1Y3QgZHdf ZHAgKmRwKQo+PiArewo+PiArCXN0cnVjdCBkd19kcF9saW5rICpsaW5rID0gJmRwLT5saW5rOwo+ PiArCXU4IGxpbmtfc3RhdHVzW0RQX0xJTktfU1RBVFVTX1NJWkVdOwo+PiArCj4+ICsJaWYgKCFk d19kcF9saW5rX3RyYWluX3ZhbGlkKCZsaW5rLT50cmFpbikpCj4+ICsJCXJldHVybiBmYWxzZTsK Pj4gKwo+PiArCWlmIChkcm1fZHBfZHBjZF9yZWFkX2xpbmtfc3RhdHVzKCZkcC0+YXV4LCBsaW5r X3N0YXR1cykgPCAwKQo+PiArCQlyZXR1cm4gZmFsc2U7Cj4+ICsKPj4gKwkvKiBSZXRyYWluIGlm IENoYW5uZWwgRVEgb3IgQ1Igbm90IG9rICovCj4+ICsJcmV0dXJuICFkcm1fZHBfY2hhbm5lbF9l cV9vayhsaW5rX3N0YXR1cywgZHAtPmxpbmsubGFuZXMpOwo+PiArfQo+PiArCj4+ICtzdGF0aWMg dm9pZCBkd19kcF9saW5rX2Rpc2FibGUoc3RydWN0IGR3X2RwICpkcCkKPj4gK3sKPj4gKwlzdHJ1 Y3QgZHdfZHBfbGluayAqbGluayA9ICZkcC0+bGluazsKPj4gKwo+PiArCWlmIChkd19kcF9ocGRf ZGV0ZWN0KGRwKSkKPj4gKwkJZHdfZHBfbGlua19wb3dlcl9kb3duKGRwKTsKPj4gKwo+PiArCWR3 X2RwX3BoeV94bWl0X2VuYWJsZShkcCwgMCk7Cj4+ICsKPj4gKwlwaHlfcG93ZXJfb2ZmKGRwLT5w aHkpOwo+PiArCj4+ICsJbGluay0+dHJhaW4uY2xvY2tfcmVjb3ZlcmVkID0gZmFsc2U7Cj4+ICsJ bGluay0+dHJhaW4uY2hhbm5lbF9lcXVhbGl6ZWQgPSBmYWxzZTsKPj4gK30KPj4gKwo+PiArc3Rh dGljIGludCBkd19kcF9saW5rX2VuYWJsZShzdHJ1Y3QgZHdfZHAgKmRwKQo+PiArewo+PiArCWlu dCByZXQ7Cj4+ICsKPj4gKwlyZXQgPSBwaHlfcG93ZXJfb24oZHAtPnBoeSk7Cj4+ICsJaWYgKHJl dCkKPj4gKwkJcmV0dXJuIHJldDsKPj4gKwo+PiArCXJldCA9IGR3X2RwX2xpbmtfcG93ZXJfdXAo ZHApOwo+PiArCWlmIChyZXQgPCAwKQo+PiArCQlyZXR1cm4gcmV0Owo+PiArCj4+ICsJcmV0ID0g ZHdfZHBfbGlua190cmFpbihkcCk7Cj4+ICsKPj4gKwlyZXR1cm4gcmV0Owo+PiArfQo+PiArCj4+ ICtzdGF0aWMgdm9pZCBkd19kcF9icmlkZ2VfYXRvbWljX2VuYWJsZShzdHJ1Y3QgZHJtX2JyaWRn ZSAqYnJpZGdlLAo+PiArCQkJCSAgICAgICBzdHJ1Y3QgZHJtX2JyaWRnZV9zdGF0ZSAqb2xkX3N0 YXRlKQo+PiArewo+PiArCXN0cnVjdCBkd19kcCAqZHAgPSBicmlkZ2VfdG9fZHAoYnJpZGdlKTsK Pj4gKwlzdHJ1Y3QgZHJtX2F0b21pY19zdGF0ZSAqc3RhdGUgPSBvbGRfc3RhdGUtPmJhc2Uuc3Rh dGU7Cj4+ICsJc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvcjsKPj4gKwlzdHJ1Y3QgZHJt X2Nvbm5lY3Rvcl9zdGF0ZSAqY29ubl9zdGF0ZTsKPj4gKwlpbnQgcmV0Owo+PiArCj4+ICsJY29u bmVjdG9yID0gZHJtX2F0b21pY19nZXRfbmV3X2Nvbm5lY3Rvcl9mb3JfZW5jb2RlcihzdGF0ZSwg YnJpZGdlLT5lbmNvZGVyKTsKPj4gKwlpZiAoIWNvbm5lY3Rvcikgewo+PiArCQlkZXZfZXJyKGRw LT5kZXYsICJmYWlsZWQgdG8gZ2V0IGNvbm5lY3RvclxuIik7Cj4+ICsJCXJldHVybjsKPj4gKwl9 Cj4+ICsKPj4gKwljb25uX3N0YXRlID0gZHJtX2F0b21pY19nZXRfbmV3X2Nvbm5lY3Rvcl9zdGF0 ZShzdGF0ZSwgY29ubmVjdG9yKTsKPj4gKwlpZiAoIWNvbm5fc3RhdGUpIHsKPj4gKwkJZGV2X2Vy cihkcC0+ZGV2LCAiZmFpbGVkIHRvIGdldCBjb25uZWN0b3Igc3RhdGVcbiIpOwo+PiArCQlyZXR1 cm47Cj4+ICsJfQo+PiArCj4+ICsJc2V0X2JpdCgwLCBkcC0+c2RwX3JlZ19iYW5rKTsKPj4gKwo+ PiArCXJldCA9IGR3X2RwX2xpbmtfZW5hYmxlKGRwKTsKPj4gKwlpZiAocmV0IDwgMCkgewo+PiAr CQlkZXZfZXJyKGRwLT5kZXYsICJmYWlsZWQgdG8gZW5hYmxlIGxpbms6ICVkXG4iLCByZXQpOwo+ PiArCQlyZXR1cm47Cj4+ICsJfQo+PiArCj4+ICsJcmV0ID0gZHdfZHBfdmlkZW9fZW5hYmxlKGRw KTsKPj4gKwlpZiAocmV0IDwgMCkgewo+PiArCQlkZXZfZXJyKGRwLT5kZXYsICJmYWlsZWQgdG8g ZW5hYmxlIHZpZGVvOiAlZFxuIiwgcmV0KTsKPj4gKwkJcmV0dXJuOwo+PiArCX0KPj4gK30KPj4g Kwo+PiArc3RhdGljIHZvaWQgZHdfZHBfcmVzZXQoc3RydWN0IGR3X2RwICpkcCkKPj4gK3sKPj4g KwlpbnQgdmFsOwo+PiArCj4+ICsJZGlzYWJsZV9pcnEoZHAtPmlycSk7Cj4+ICsJcmVnbWFwX3Vw ZGF0ZV9iaXRzKGRwLT5yZWdtYXAsIERXX0RQX1NPRlRfUkVTRVRfQ1RSTCwgQ09OVFJPTExFUl9S RVNFVCwKPj4gKwkJCSAgIEZJRUxEX1BSRVAoQ09OVFJPTExFUl9SRVNFVCwgMSkpOwo+PiArCXVk ZWxheSgxMCk7Cj4+ICsJcmVnbWFwX3VwZGF0ZV9iaXRzKGRwLT5yZWdtYXAsIERXX0RQX1NPRlRf UkVTRVRfQ1RSTCwgQ09OVFJPTExFUl9SRVNFVCwKPj4gKwkJCSAgIEZJRUxEX1BSRVAoQ09OVFJP TExFUl9SRVNFVCwgMCkpOwo+PiArCj4+ICsJZHdfZHBfaW5pdF9odyhkcCk7Cj4+ICsJcmVnbWFw X3JlYWRfcG9sbF90aW1lb3V0KGRwLT5yZWdtYXAsIERXX0RQX0hQRF9TVEFUVVMsIHZhbCwKPj4g KwkJCQkgRklFTERfR0VUKEhQRF9IT1RfUExVRywgdmFsKSwgMjAwLCAyMDAwMDApOwo+PiArCXJl Z21hcF93cml0ZShkcC0+cmVnbWFwLCBEV19EUF9IUERfU1RBVFVTLCBIUERfSE9UX1BMVUcpOwo+ PiArCWVuYWJsZV9pcnEoZHAtPmlycSk7Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyB2b2lkIGR3X2Rw X2JyaWRnZV9hdG9taWNfZGlzYWJsZShzdHJ1Y3QgZHJtX2JyaWRnZSAqYnJpZGdlLAo+PiArCQkJ CQlzdHJ1Y3QgZHJtX2JyaWRnZV9zdGF0ZSAqb2xkX2JyaWRnZV9zdGF0ZSkKPj4gK3sKPj4gKwlz dHJ1Y3QgZHdfZHAgKmRwID0gYnJpZGdlX3RvX2RwKGJyaWRnZSk7Cj4+ICsKPj4gKwlkd19kcF92 aWRlb19kaXNhYmxlKGRwKTsKPj4gKwlkd19kcF9saW5rX2Rpc2FibGUoZHApOwo+PiArCWJpdG1h cF96ZXJvKGRwLT5zZHBfcmVnX2JhbmssIFNEUF9SRUdfQkFOS19TSVpFKTsKPj4gKwlkd19kcF9y ZXNldChkcCk7Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyBib29sIGR3X2RwX2hwZF9kZXRlY3RfbGlu ayhzdHJ1Y3QgZHdfZHAgKmRwKQo+PiArewo+PiArCWludCByZXQ7Cj4+ICsKPj4gKwlyZXQgPSBw aHlfcG93ZXJfb24oZHAtPnBoeSk7Cj4+ICsJaWYgKHJldCA8IDApCj4+ICsJCXJldHVybiBmYWxz ZTsKPj4gKwlyZXQgPSBkd19kcF9saW5rX3BhcnNlKGRwKTsKPj4gKwlwaHlfcG93ZXJfb2ZmKGRw LT5waHkpOwo+PiArCj4+ICsJcmV0dXJuICFyZXQ7Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyBlbnVt IGRybV9jb25uZWN0b3Jfc3RhdHVzIGR3X2RwX2JyaWRnZV9kZXRlY3Qoc3RydWN0IGRybV9icmlk Z2UgKmJyaWRnZSkKPj4gK3sKPj4gKwlzdHJ1Y3QgZHdfZHAgKmRwID0gYnJpZGdlX3RvX2RwKGJy aWRnZSk7Cj4+ICsKPj4gKwlpZiAoIWR3X2RwX2hwZF9kZXRlY3QoZHApKQo+PiArCQlyZXR1cm4g Y29ubmVjdG9yX3N0YXR1c19kaXNjb25uZWN0ZWQ7Cj4+ICsKPj4gKwlpZiAoIWR3X2RwX2hwZF9k ZXRlY3RfbGluayhkcCkpCj4+ICsJCXJldHVybiBjb25uZWN0b3Jfc3RhdHVzX2Rpc2Nvbm5lY3Rl ZDsKPj4gKwo+PiArCXJldHVybiBjb25uZWN0b3Jfc3RhdHVzX2Nvbm5lY3RlZDsKPj4gK30KPj4g Kwo+PiArc3RhdGljIGNvbnN0IHN0cnVjdCBkcm1fZWRpZCAqZHdfZHBfYnJpZGdlX2VkaWRfcmVh ZChzdHJ1Y3QgZHJtX2JyaWRnZSAqYnJpZGdlLAo+PiArCQkJCQkJICAgICBzdHJ1Y3QgZHJtX2Nv bm5lY3RvciAqY29ubmVjdG9yKQo+PiArewo+PiArCXN0cnVjdCBkd19kcCAqZHAgPSBicmlkZ2Vf dG9fZHAoYnJpZGdlKTsKPj4gKwljb25zdCBzdHJ1Y3QgZHJtX2VkaWQgKmVkaWQ7Cj4+ICsJaW50 IHJldDsKPj4gKwo+PiArCXJldCA9IHBoeV9wb3dlcl9vbihkcC0+cGh5KTsKPj4gKwlpZiAocmV0 KQo+PiArCQlyZXR1cm4gTlVMTDsKPj4gKwo+PiArCWVkaWQgPSBkcm1fZWRpZF9yZWFkX2RkYyhj b25uZWN0b3IsICZkcC0+YXV4LmRkYyk7Cj4+ICsKPj4gKwlwaHlfcG93ZXJfb2ZmKGRwLT5waHkp Owo+PiArCj4+ICsJcmV0dXJuIGVkaWQ7Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyB1MzIgKmR3X2Rw X2JyaWRnZV9hdG9taWNfZ2V0X291dHB1dF9idXNfZm10cyhzdHJ1Y3QgZHJtX2JyaWRnZSAqYnJp ZGdlLAo+PiArCQkJCQkJICAgIHN0cnVjdCBkcm1fYnJpZGdlX3N0YXRlICpicmlkZ2Vfc3RhdGUs Cj4+ICsJCQkJCQkgICAgc3RydWN0IGRybV9jcnRjX3N0YXRlICpjcnRjX3N0YXRlLAo+PiArCQkJ CQkJICAgIHN0cnVjdCBkcm1fY29ubmVjdG9yX3N0YXRlICpjb25uX3N0YXRlLAo+PiArCQkJCQkJ ICAgIHVuc2lnbmVkIGludCAqbnVtX291dHB1dF9mbXRzKQo+PiArewo+PiArCXN0cnVjdCBkd19k cCAqZHAgPSBicmlkZ2VfdG9fZHAoYnJpZGdlKTsKPj4gKwlzdHJ1Y3QgZHdfZHBfbGluayAqbGlu ayA9ICZkcC0+bGluazsKPj4gKwlzdHJ1Y3QgZHJtX2Rpc3BsYXlfaW5mbyAqZGkgPSAmY29ubl9z dGF0ZS0+Y29ubmVjdG9yLT5kaXNwbGF5X2luZm87Cj4+ICsJc3RydWN0IGRybV9kaXNwbGF5X21v ZGUgbW9kZSA9IGNydGNfc3RhdGUtPm1vZGU7Cj4+ICsJY29uc3Qgc3RydWN0IGR3X2RwX291dHB1 dF9mb3JtYXQgKmZtdDsKPj4gKwl1MzIgaSwgaiA9IDA7Cj4+ICsJdTMyICpvdXRwdXRfZm10czsK Pj4gKwo+PiArCSpudW1fb3V0cHV0X2ZtdHMgPSAwOwo+PiArCj4+ICsJb3V0cHV0X2ZtdHMgPSBr Y2FsbG9jKEFSUkFZX1NJWkUoZHdfZHBfb3V0cHV0X2Zvcm1hdHMpLCBzaXplb2YoKm91dHB1dF9m bXRzKSwgR0ZQX0tFUk5FTCk7Cj4+ICsJaWYgKCFvdXRwdXRfZm10cykKPj4gKwkJcmV0dXJuIE5V TEw7Cj4+ICsKPj4gKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShkd19kcF9vdXRwdXRfZm9y bWF0cyk7IGkrKykgewo+PiArCQlmbXQgPSAmZHdfZHBfb3V0cHV0X2Zvcm1hdHNbaV07Cj4+ICsK Pj4gKwkJaWYgKGZtdC0+YnBjID4gY29ubl9zdGF0ZS0+bWF4X2JwYykKPj4gKwkJCWNvbnRpbnVl Owo+PiArCj4+ICsJCWlmICghKGZtdC0+Y29sb3JfZm9ybWF0ICYgZGktPmNvbG9yX2Zvcm1hdHMp KQo+PiArCQkJY29udGludWU7Cj4+ICsKPj4gKwkJaWYgKGZtdC0+Y29sb3JfZm9ybWF0ID09IERS TV9DT0xPUl9GT1JNQVRfWUNCQ1I0MjAgJiYKPj4gKwkJICAgICFsaW5rLT52c2Nfc2RwX3N1cHBv cnRlZCkKPj4gKwkJCWNvbnRpbnVlOwo+PiArCj4+ICsJCWlmIChmbXQtPmNvbG9yX2Zvcm1hdCAh PSBEUk1fQ09MT1JfRk9STUFUX1lDQkNSNDIwICYmCj4+ICsJCSAgICBkcm1fbW9kZV9pc180MjBf b25seShkaSwgJm1vZGUpKQo+PiArCQkJY29udGludWU7Cj4+ICsKPj4gKwkJaWYgKCFkd19kcF9i YW5kd2lkdGhfb2soZHAsICZtb2RlLCBmbXQtPmJwcCwgbGluay0+bGFuZXMsIGxpbmstPnJhdGUp KQo+PiArCQkJY29udGludWU7Cj4+ICsKPj4gKwkJb3V0cHV0X2ZtdHNbaisrXSA9IGZtdC0+YnVz X2Zvcm1hdDsKPj4gKwl9Cj4+ICsKPj4gKwkqbnVtX291dHB1dF9mbXRzID0gajsKPj4gKwo+PiAr CXJldHVybiBvdXRwdXRfZm10czsKPj4gK30KPj4gKwo+PiArc3RhdGljIGNvbnN0IHN0cnVjdCBk cm1fYnJpZGdlX2Z1bmNzIGR3X2RwX2JyaWRnZV9mdW5jcyA9IHsKPj4gKwkuYXRvbWljX2R1cGxp Y2F0ZV9zdGF0ZSA9IGRybV9hdG9taWNfaGVscGVyX2JyaWRnZV9kdXBsaWNhdGVfc3RhdGUsCj4+ ICsJLmF0b21pY19kZXN0cm95X3N0YXRlID0gZHJtX2F0b21pY19oZWxwZXJfYnJpZGdlX2Rlc3Ry b3lfc3RhdGUsCj4+ICsJLmF0b21pY19yZXNldCA9IGRybV9hdG9taWNfaGVscGVyX2JyaWRnZV9y ZXNldCwKPj4gKwkuYXRvbWljX2dldF9pbnB1dF9idXNfZm10cyA9IGRybV9hdG9taWNfaGVscGVy X2JyaWRnZV9wcm9wYWdhdGVfYnVzX2ZtdCwKPj4gKwkuYXRvbWljX2dldF9vdXRwdXRfYnVzX2Zt dHMgPSBkd19kcF9icmlkZ2VfYXRvbWljX2dldF9vdXRwdXRfYnVzX2ZtdHMsCj4+ICsJLm1vZGVf Zml4dXAgPSBkd19kcF9icmlkZ2VfbW9kZV9maXh1cCwKPj4gKwkubW9kZV92YWxpZCA9IGR3X2Rw X2JyaWRnZV9tb2RlX3ZhbGlkLAo+PiArCS5hdG9taWNfcHJlX2VuYWJsZSA9IGR3X2RwX2JyaWRn ZV9hdG9taWNfcHJlX2VuYWJsZSwKPj4gKwkuYXRvbWljX2VuYWJsZSA9IGR3X2RwX2JyaWRnZV9h dG9taWNfZW5hYmxlLAo+PiArCS5hdG9taWNfZGlzYWJsZSA9IGR3X2RwX2JyaWRnZV9hdG9taWNf ZGlzYWJsZSwKPj4gKwkuZGV0ZWN0ID0gZHdfZHBfYnJpZGdlX2RldGVjdCwKPj4gKwkuZWRpZF9y ZWFkID0gZHdfZHBfYnJpZGdlX2VkaWRfcmVhZCwKPj4gK307Cj4+ICsKPj4gK3N0YXRpYyBpbnQg ZHdfZHBfbGlua19yZXRyYWluKHN0cnVjdCBkd19kcCAqZHApCj4+ICt7Cj4+ICsJc3RydWN0IGRy bV9kZXZpY2UgKmRldiA9IGRwLT5icmlkZ2UuZGV2Owo+PiArCXN0cnVjdCBkcm1fbW9kZXNldF9h Y3F1aXJlX2N0eCBjdHg7Cj4+ICsJaW50IHJldDsKPj4gKwo+PiArCWlmICghZHdfZHBfbmVlZHNf bGlua19yZXRyYWluKGRwKSkKPj4gKwkJcmV0dXJuIDA7Cj4+ICsKPj4gKwlkZXZfZGJnKGRwLT5k ZXYsICJSZXRyYWluaW5nIGxpbmtcbiIpOwo+PiArCj4+ICsJZHJtX21vZGVzZXRfYWNxdWlyZV9p bml0KCZjdHgsIDApOwo+PiArCWZvciAoOzspIHsKPj4gKwkJcmV0ID0gZHJtX21vZGVzZXRfbG9j aygmZGV2LT5tb2RlX2NvbmZpZy5jb25uZWN0aW9uX211dGV4LCAmY3R4KTsKPj4gKwkJaWYgKHJl dCAhPSAtRURFQURMSykKPj4gKwkJCWJyZWFrOwo+Cj5JIHRoaW5rIGl0J3MgYW4gZXJyb3IgdG8g Y29udGludWUgaW4gc3VjaCBhIGNhc2UuIFRoZXJlIHNob3VsZCBiZSBhCj5yZXR1cm4gYWZ0ZXIg dGhlIGxvb3AgaWYgcmV0IGlzIG5vdCAwLgoKVGhhbmsgeW91IGZvciBjYXRjaGluZyB0aGlz77yM IEkgd2lsbCBhZGQgYSBjaGVjayBmYXRlciB0aGUgbG9vcC4KCgo+Cj4+ICsKPj4gKwkJZHJtX21v ZGVzZXRfYmFja29mZigmY3R4KTsKPj4gKwl9Cj4+ICsKPj4gKwlyZXQgPSBkd19kcF9saW5rX3Ry YWluKGRwKTsKPj4gKwlkcm1fbW9kZXNldF9kcm9wX2xvY2tzKCZjdHgpOwo+PiArCWRybV9tb2Rl c2V0X2FjcXVpcmVfZmluaSgmY3R4KTsKPj4gKwo+PiArCXJldHVybiByZXQ7Cj4+ICt9Cj4+ICsK Pj4gK3N0YXRpYyB2b2lkIGR3X2RwX2hwZF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykK Pj4gK3sKPj4gKwlzdHJ1Y3QgZHdfZHAgKmRwID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBk d19kcCwgaHBkX3dvcmspOwo+PiArCWJvb2wgbG9uZ19ocGQ7Cj4+ICsJaW50IHJldDsKPj4gKwo+ PiArCW11dGV4X2xvY2soJmRwLT5pcnFfbG9jayk7Cj4+ICsJbG9uZ19ocGQgPSBkcC0+aG90cGx1 Zy5sb25nX2hwZDsKPj4gKwltdXRleF91bmxvY2soJmRwLT5pcnFfbG9jayk7Cj4+ICsKPj4gKwlk ZXZfZGJnKGRwLT5kZXYsICJbZHJtXSBHZXQgaHBkIGlycSAtICVzXG4iLCBsb25nX2hwZCA/ICJs b25nIiA6ICJzaG9ydCIpOwo+PiArCj4+ICsJaWYgKCFsb25nX2hwZCkgewo+PiArCQlpZiAoZHdf ZHBfbmVlZHNfbGlua19yZXRyYWluKGRwKSkgewo+PiArCQkJcmV0ID0gZHdfZHBfbGlua19yZXRy YWluKGRwKTsKPj4gKwkJCWlmIChyZXQpCj4+ICsJCQkJZGV2X3dhcm4oZHAtPmRldiwgIlJldHJh aW4gbGluayBmYWlsZWRcbiIpOwo+PiArCQl9Cj4+ICsJfSBlbHNlIHsKPj4gKwkJZHJtX2hlbHBl cl9ocGRfaXJxX2V2ZW50KGRwLT5icmlkZ2UuZGV2KTsKPj4gKwl9Cj4+ICt9Cj4+ICsKPj4gK3N0 YXRpYyB2b2lkIGR3X2RwX2hhbmRsZV9ocGRfZXZlbnQoc3RydWN0IGR3X2RwICpkcCkKPj4gK3sK Pj4gKwl1MzIgdmFsdWU7Cj4+ICsKPj4gKwltdXRleF9sb2NrKCZkcC0+aXJxX2xvY2spOwo+PiAr CXJlZ21hcF9yZWFkKGRwLT5yZWdtYXAsIERXX0RQX0hQRF9TVEFUVVMsICZ2YWx1ZSk7Cj4+ICsK Pj4gKwlpZiAodmFsdWUgJiBIUERfSVJRKSB7Cj4+ICsJCWRldl9kYmcoZHAtPmRldiwgIklSUSBm cm9tIHRoZSBIUERcbiIpOwo+PiArCQlkcC0+aG90cGx1Zy5sb25nX2hwZCA9IGZhbHNlOwo+PiAr CQlyZWdtYXBfd3JpdGUoZHAtPnJlZ21hcCwgRFdfRFBfSFBEX1NUQVRVUywgSFBEX0lSUSk7Cj4+ ICsJfQo+PiArCj4+ICsJaWYgKHZhbHVlICYgSFBEX0hPVF9QTFVHKSB7Cj4+ICsJCWRldl9kYmco ZHAtPmRldiwgIkhvdCBwbHVnIGRldGVjdGVkXG4iKTsKPj4gKwkJZHAtPmhvdHBsdWcubG9uZ19o cGQgPSB0cnVlOwo+PiArCQlyZWdtYXBfd3JpdGUoZHAtPnJlZ21hcCwgRFdfRFBfSFBEX1NUQVRV UywgSFBEX0hPVF9QTFVHKTsKPj4gKwl9Cj4+ICsKPj4gKwlpZiAodmFsdWUgJiBIUERfSE9UX1VO UExVRykgewo+PiArCQlkZXZfZGJnKGRwLT5kZXYsICJVbnBsdWcgZGV0ZWN0ZWRcbiIpOwo+PiAr CQlkcC0+aG90cGx1Zy5sb25nX2hwZCA9IHRydWU7Cj4+ICsJCXJlZ21hcF93cml0ZShkcC0+cmVn bWFwLCBEV19EUF9IUERfU1RBVFVTLCBIUERfSE9UX1VOUExVRyk7Cj4+ICsJfQo+PiArCW11dGV4 X3VubG9jaygmZHAtPmlycV9sb2NrKTsKPj4gKwo+PiArCXNjaGVkdWxlX3dvcmsoJmRwLT5ocGRf d29yayk7Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyBpcnFyZXR1cm5fdCBkd19kcF9pcnEoaW50IGly cSwgdm9pZCAqZGF0YSkKPj4gK3sKPj4gKwlzdHJ1Y3QgZHdfZHAgKmRwID0gZGF0YTsKPj4gKwl1 MzIgdmFsdWU7Cj4+ICsKPj4gKwlyZWdtYXBfcmVhZChkcC0+cmVnbWFwLCBEV19EUF9HRU5FUkFM X0lOVEVSUlVQVCwgJnZhbHVlKTsKPj4gKwlpZiAoIXZhbHVlKQo+PiArCQlyZXR1cm4gSVJRX05P TkU7Cj4+ICsKPj4gKwlpZiAodmFsdWUgJiBIUERfRVZFTlQpCj4+ICsJCWR3X2RwX2hhbmRsZV9o cGRfZXZlbnQoZHApOwo+PiArCj4+ICsJaWYgKHZhbHVlICYgQVVYX1JFUExZX0VWRU5UKSB7Cj4+ ICsJCXJlZ21hcF93cml0ZShkcC0+cmVnbWFwLCBEV19EUF9HRU5FUkFMX0lOVEVSUlVQVCwgQVVY X1JFUExZX0VWRU5UKTsKPj4gKwkJY29tcGxldGUoJmRwLT5jb21wbGV0ZSk7Cj4+ICsJfQo+PiAr Cj4+ICsJcmV0dXJuIElSUV9IQU5ETEVEOwo+PiArfQo+PiArCj4+ICtzdGF0aWMgY29uc3Qgc3Ry dWN0IHJlZ21hcF9yYW5nZSBkd19kcF9yZWFkYWJsZV9yYW5nZXNbXSA9IHsKPj4gKwlyZWdtYXBf cmVnX3JhbmdlKERXX0RQX1ZFUlNJT05fTlVNQkVSLCBEV19EUF9JRCksCj4+ICsJcmVnbWFwX3Jl Z19yYW5nZShEV19EUF9DT05GSUdfUkVHMSwgRFdfRFBfQ09ORklHX1JFRzMpLAo+PiArCXJlZ21h cF9yZWdfcmFuZ2UoRFdfRFBfQ0NUTCwgRFdfRFBfU09GVF9SRVNFVF9DVFJMKSwKPj4gKwlyZWdt YXBfcmVnX3JhbmdlKERXX0RQX1ZTQU1QTEVfQ1RSTCwgRFdfRFBfVklERU9fSEJMQU5LX0lOVEVS VkFMKSwKPj4gKwlyZWdtYXBfcmVnX3JhbmdlKERXX0RQX0FVRF9DT05GSUcxLCBEV19EUF9BVURf Q09ORklHMSksCj4+ICsJcmVnbWFwX3JlZ19yYW5nZShEV19EUF9TRFBfVkVSVElDQUxfQ1RSTCwg RFdfRFBfU0RQX1NUQVRVU19FTiksCj4+ICsJcmVnbWFwX3JlZ19yYW5nZShEV19EUF9QSFlJRl9D VFJMLCBEV19EUF9QSFlJRl9QV1JET1dOX0NUUkwpLAo+PiArCXJlZ21hcF9yZWdfcmFuZ2UoRFdf RFBfQVVYX0NNRCwgRFdfRFBfQVVYX0RBVEEzKSwKPj4gKwlyZWdtYXBfcmVnX3JhbmdlKERXX0RQ X0dFTkVSQUxfSU5URVJSVVBULCBEV19EUF9IUERfSU5URVJSVVBUX0VOQUJMRSksCj4+ICt9Owo+ PiArCj4+ICtzdGF0aWMgY29uc3Qgc3RydWN0IHJlZ21hcF9hY2Nlc3NfdGFibGUgZHdfZHBfcmVh ZGFibGVfdGFibGUgPSB7Cj4+ICsJLnllc19yYW5nZXMgICAgID0gZHdfZHBfcmVhZGFibGVfcmFu Z2VzLAo+PiArCS5uX3llc19yYW5nZXMgICA9IEFSUkFZX1NJWkUoZHdfZHBfcmVhZGFibGVfcmFu Z2VzKSwKPj4gK307Cj4+ICsKPj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcmVnbWFwX2NvbmZpZyBk d19kcF9yZWdtYXBfY29uZmlnID0gewo+PiArCS5yZWdfYml0cyA9IDMyLAo+PiArCS5yZWdfc3Ry aWRlID0gNCwKPj4gKwkudmFsX2JpdHMgPSAzMiwKPj4gKwkuZmFzdF9pbyA9IHRydWUsCj4+ICsJ Lm1heF9yZWdpc3RlciA9IERXX0RQX01BWF9SRUdJU1RFUiwKPj4gKwkucmRfdGFibGUgPSAmZHdf ZHBfcmVhZGFibGVfdGFibGUsCj4+ICt9Owo+PiArCj4+ICtzdHJ1Y3QgZHdfZHAgKmR3X2RwX2Jp bmQoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXIsCj4+ICsJ CQkgY29uc3Qgc3RydWN0IGR3X2RwX3BsYXRfZGF0YSAqcGxhdF9kYXRhKQo+PiArewo+PiArCXN0 cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYgPSB0b19wbGF0Zm9ybV9kZXZpY2UoZGV2KTsKPj4g KwlzdHJ1Y3QgZHdfZHAgKmRwOwo+PiArCXN0cnVjdCBkcm1fYnJpZGdlICpicmlkZ2U7Cj4+ICsJ dm9pZCBfX2lvbWVtICpyZXM7Cj4+ICsJaW50IHJldDsKPj4gKwo+PiArCWRwID0gZGV2bV9remFs bG9jKGRldiwgc2l6ZW9mKCpkcCksIEdGUF9LRVJORUwpOwo+PiArCWlmICghZHApCj4+ICsJCXJl dHVybiBFUlJfUFRSKC1FTk9NRU0pOwo+PiArCj4+ICsJZHAtPmRldiA9IGRldjsKPj4gKwlkcC0+ dmlkZW8ucGl4ZWxfbW9kZSA9IERXX0RQX01QX1FVQURfUElYRUw7Cj4+ICsKPj4gKwlkcC0+cGxh dF9kYXRhID0gcGxhdF9kYXRhOwo+PiArCWJyaWRnZSA9ICZkcC0+YnJpZGdlOwo+PiArCW11dGV4 X2luaXQoJmRwLT5pcnFfbG9jayk7Cj4+ICsJSU5JVF9XT1JLKCZkcC0+aHBkX3dvcmssIGR3X2Rw X2hwZF93b3JrKTsKPj4gKwlpbml0X2NvbXBsZXRpb24oJmRwLT5jb21wbGV0ZSk7Cj4+ICsKPj4g KwlyZXMgPSBkZXZtX3BsYXRmb3JtX2lvcmVtYXBfcmVzb3VyY2UocGRldiwgMCk7Cj4+ICsJaWYg KElTX0VSUihyZXMpKQo+PiArCQlyZXR1cm4gRVJSX0NBU1QocmVzKTsKPj4gKwo+PiArCWRwLT5y ZWdtYXAgPSBkZXZtX3JlZ21hcF9pbml0X21taW8oZGV2LCByZXMsICZkd19kcF9yZWdtYXBfY29u ZmlnKTsKPj4gKwlpZiAoSVNfRVJSKGRwLT5yZWdtYXApKSB7Cj4+ICsJCWRldl9lcnJfcHJvYmUo ZGV2LCBQVFJfRVJSKGRwLT5yZWdtYXApLCAiZmFpbGVkIHRvIGNyZWF0ZSByZWdtYXBcbiIpOwo+ PiArCQlyZXR1cm4gRVJSX0NBU1QoZHAtPnJlZ21hcCk7Cj4+ICsJfQo+PiArCj4+ICsJZHAtPnBo eSA9IGRldm1fb2ZfcGh5X2dldChkZXYsIGRldi0+b2Zfbm9kZSwgTlVMTCk7Cj4+ICsJaWYgKElT X0VSUihkcC0+cGh5KSkgewo+PiArCQlkZXZfZXJyX3Byb2JlKGRldiwgUFRSX0VSUihkcC0+cGh5 KSwgImZhaWxlZCB0byBnZXQgcGh5XG4iKTsKPj4gKwkJcmV0dXJuIEVSUl9DQVNUKGRwLT5waHkp Owo+PiArCX0KPj4gKwo+PiArCWRwLT5hcGJfY2xrID0gZGV2bV9jbGtfZ2V0X2VuYWJsZWQoZGV2 LCAiYXBiIik7Cj4+ICsJaWYgKElTX0VSUihkcC0+YXBiX2NsaykpIHsKPj4gKwkJZGV2X2Vycl9w cm9iZShkZXYsIFBUUl9FUlIoZHAtPmFwYl9jbGspLCAiZmFpbGVkIHRvIGdldCBhcGIgY2xvY2tc biIpOwo+PiArCQlyZXR1cm4gRVJSX0NBU1QoZHAtPmFwYl9jbGspOwo+PiArCX0KPj4gKwo+PiAr CWRwLT5hdXhfY2xrID0gZGV2bV9jbGtfZ2V0X2VuYWJsZWQoZGV2LCAiYXV4Iik7Cj4+ICsJaWYg KElTX0VSUihkcC0+YXV4X2NsaykpIHsKPj4gKwkJZGV2X2Vycl9wcm9iZShkZXYsIFBUUl9FUlIo ZHAtPmF1eF9jbGspLCAiZmFpbGVkIHRvIGdldCBhdXggY2xvY2tcbiIpOwo+PiArCQlyZXR1cm4g RVJSX0NBU1QoZHAtPmF1eF9jbGspOwo+PiArCX0KPj4gKwo+PiArCWRwLT5pMnNfY2xrID0gZGV2 bV9jbGtfZ2V0KGRldiwgImkycyIpOwo+PiArCWlmIChJU19FUlIoZHAtPmkyc19jbGspKSB7Cj4+ ICsJCWRldl9lcnJfcHJvYmUoZGV2LCBQVFJfRVJSKGRwLT5pMnNfY2xrKSwgImZhaWxlZCB0byBn ZXQgaTJzIGNsb2NrXG4iKTsKPj4gKwkJcmV0dXJuIEVSUl9DQVNUKGRwLT5pMnNfY2xrKTsKPj4g Kwl9Cj4+ICsKPj4gKwlkcC0+c3BkaWZfY2xrID0gZGV2bV9jbGtfZ2V0KGRldiwgInNwZGlmIik7 Cj4+ICsJaWYgKElTX0VSUihkcC0+c3BkaWZfY2xrKSkgewo+PiArCQlkZXZfZXJyX3Byb2JlKGRl diwgUFRSX0VSUihkcC0+c3BkaWZfY2xrKSwgImZhaWxlZCB0byBnZXQgc3BkaWYgY2xvY2tcbiIp Owo+PiArCQlyZXR1cm4gRVJSX0NBU1QoZHAtPnNwZGlmX2Nsayk7Cj4+ICsJfQo+PiArCj4+ICsJ ZHAtPmhkY3BfY2xrID0gZGV2bV9jbGtfZ2V0KGRldiwgImhkY3AiKTsKPj4gKwlpZiAoSVNfRVJS KGRwLT5oZGNwX2NsaykpIHsKPj4gKwkJZGV2X2Vycl9wcm9iZShkZXYsIFBUUl9FUlIoZHAtPmhk Y3BfY2xrKSwgImZhaWxlZCB0byBnZXQgaGRjcCBjbG9ja1xuIik7Cj4+ICsJCXJldHVybiBFUlJf Q0FTVChkcC0+aGRjcF9jbGspOwo+PiArCX0KPj4gKwo+PiArCWRwLT5yc3RjID0gZGV2bV9yZXNl dF9jb250cm9sX2dldChkZXYsIE5VTEwpOwo+PiArCWlmIChJU19FUlIoZHAtPnJzdGMpKSB7Cj4+ ICsJCWRldl9lcnJfcHJvYmUoZGV2LCBQVFJfRVJSKGRwLT5yc3RjKSwgImZhaWxlZCB0byBnZXQg cmVzZXQgY29udHJvbFxuIik7Cj4+ICsJCXJldHVybiBFUlJfQ0FTVChkcC0+cnN0Yyk7Cj4+ICsJ fQo+PiArCj4+ICsJZHAtPmlycSA9IHBsYXRmb3JtX2dldF9pcnEocGRldiwgMCk7Cj4+ICsJaWYg KGRwLT5pcnEgPCAwKQo+PiArCQlyZXR1cm4gRVJSX1BUUihyZXQpOwo+PiArCj4+ICsJcmV0ID0g ZGV2bV9yZXF1ZXN0X3RocmVhZGVkX2lycShkZXYsIGRwLT5pcnEsIE5VTEwsIGR3X2RwX2lycSwK Pj4gKwkJCQkJSVJRRl9PTkVTSE9ULCBkZXZfbmFtZShkZXYpLCBkcCk7Cj4KPkFyZSB5b3UgcmVh ZHkgdG8gaGFuZGxlIHRoZSBJUlEgaGVyZSwgYmVmb3JlIHRoZSBicmlkZ2UgaXMgZmlsbGVkPwoK SSB3aWxsIG1vdmUgdG8gIGRldm1fcmVxdWVzdF90aHJlYWRlZF9pcnEgYWZ0ZXIgZHdfZHBfaW5p dF9ody4KCgo+Cj4+ICsJaWYgKHJldCkgewo+PiArCQlkZXZfZXJyX3Byb2JlKGRldiwgcmV0LCAi ZmFpbGVkIHRvIHJlcXVlc3QgaXJxXG4iKTsKPj4gKwkJcmV0dXJuIEVSUl9QVFIocmV0KTsKPj4g Kwl9Cj4+ICsKPj4gKwlicmlkZ2UtPm9mX25vZGUgPSBkZXYtPm9mX25vZGU7Cj4+ICsJYnJpZGdl LT5mdW5jcyA9ICZkd19kcF9icmlkZ2VfZnVuY3M7Cj4+ICsJYnJpZGdlLT5vcHMgPSBEUk1fQlJJ REdFX09QX0RFVEVDVCB8IERSTV9CUklER0VfT1BfRURJRCB8IERSTV9CUklER0VfT1BfSFBEOwo+ PiArCWJyaWRnZS0+dHlwZSA9IERSTV9NT0RFX0NPTk5FQ1RPUl9EaXNwbGF5UG9ydDsKPj4gKwli cmlkZ2UtPnljYmNyXzQyMF9hbGxvd2VkID0gdHJ1ZTsKPj4gKwlicmlkZ2UtPnZlbmRvciA9ICJT eW5vcHN5cyI7Cj4+ICsJYnJpZGdlLT5wcm9kdWN0ID0gIkRXIERQIFRYIjsKPgo+VGhlc2UgdHdv IGFyZSB1bnVzZWQKPgo+PiArCj4+ICsJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgZHApOwo+ Cj5VbnVzZWQKCkkgd2lsbCByZW1vdmUgdGhlbS4KClRoYW5rcyBhZ2Fpbi4KCgo+Cj4+ICsKPj4g KwlkcC0+YXV4LmRldiA9IGRldjsKPj4gKwlkcC0+YXV4LmRybV9kZXYgPSBlbmNvZGVyLT5kZXY7 Cj4+ICsJZHAtPmF1eC5uYW1lID0gZGV2X25hbWUoZGV2KTsKPj4gKwlkcC0+YXV4LnRyYW5zZmVy ID0gZHdfZHBfYXV4X3RyYW5zZmVyOwo+PiArCXJldCA9IGRybV9kcF9hdXhfcmVnaXN0ZXIoJmRw LT5hdXgpOwo+PiArCWlmIChyZXQpIHsKPj4gKwkJZGV2X2Vycl9wcm9iZShkZXYsIHJldCwgIkF1 eCByZWdpc3RlciBmYWlsZWRcbiIpOwo+PiArCQlyZXR1cm4gRVJSX1BUUihyZXQpOwo+PiArCX0K Pj4gKwo+PiArCXJldCA9IGRybV9icmlkZ2VfYXR0YWNoKGVuY29kZXIsIGJyaWRnZSwgTlVMTCwg RFJNX0JSSURHRV9BVFRBQ0hfTk9fQ09OTkVDVE9SKTsKPj4gKwlpZiAocmV0KQo+PiArCQlkZXZf ZXJyX3Byb2JlKGRldiwgcmV0LCAiRmFpbGVkIHRvIGF0dGFjaCBicmlkZ2VcbiIpOwo+PiArCj4+ ICsJZHdfZHBfaW5pdF9odyhkcCk7Cj4+ICsKPj4gKwlyZXR1cm4gZHA7Cj4+ICt9Cj4+ICtNT0RV TEVfQVVUSE9SKCJBbmR5IFlhbiA8YW5keXNocmtAMTYzLmNvbT4iKTsKPj4gK01PRFVMRV9ERVND UklQVElPTigiRFcgRFAgQ29yZSBMaWJyYXJ5Iik7Cj4+ICtNT0RVTEVfTElDRU5TRSgiR1BMIik7 Cj4+IGRpZmYgLS1naXQgYS9pbmNsdWRlL2RybS9icmlkZ2UvZHdfZHAuaCBiL2luY2x1ZGUvZHJt L2JyaWRnZS9kd19kcC5oCj4+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4+IGluZGV4IDAwMDAwMDAw MDAwMC4uMDc4NDVmNjA5ZWNhCj4+IC0tLSAvZGV2L251bGwKPj4gKysrIGIvaW5jbHVkZS9kcm0v YnJpZGdlL2R3X2RwLmgKPj4gQEAgLTAsMCArMSwxOSBAQAo+PiArLyogU1BEWC1MaWNlbnNlLUlk ZW50aWZpZXI6IEdQTC0yLjAtb3ItbGF0ZXIgKi8KPj4gKy8qCj4+ICsgKiBDb3B5cmlnaHQgKGMp IDIwMjUgUm9ja2NoaXAgRWxlY3Ryb25pY3MgQ28uLCBMdGQuCj4+ICsgKi8KPj4gKwo+PiArI2lm bmRlZiBfX0RXX0RQX18KPj4gKyNkZWZpbmUgX19EV19EUF9fCj4+ICsKPj4gK3N0cnVjdCBkZXZp Y2U7Cj4+ICtzdHJ1Y3QgZHJtX2VuY29kZXI7Cj4+ICtzdHJ1Y3QgZHdfZHA7Cj4+ICsKPj4gK3N0 cnVjdCBkd19kcF9wbGF0X2RhdGEgewo+PiArCXUzMiBtYXhfbGlua19yYXRlOwo+PiArfTsKPj4g Kwo+PiArc3RydWN0IGR3X2RwICpkd19kcF9iaW5kKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0 IGRybV9lbmNvZGVyICplbmNvZGVyLAo+PiArCQkJIGNvbnN0IHN0cnVjdCBkd19kcF9wbGF0X2Rh dGEgKnBsYXRfZGF0YSk7Cj4+ICsjZW5kaWYgLyogX19EV19EUF9fICovCj4+IC0tIAo+PiAyLjM0 LjEKPj4gCj4KPi0tIAo+V2l0aCBiZXN0IHdpc2hlcwo+RG1pdHJ5Cg==