From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 763FECD4855 for ; Tue, 12 May 2026 08:01:47 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender:Content-Type: Content-Transfer-Encoding:List-Subscribe:List-Help:List-Post:List-Archive: List-Unsubscribe:List-Id:In-Reply-To:From:References:Cc:To:Subject: MIME-Version:Date:Message-ID:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=qvT9AzxPjnDntA/gZhJYCdhzCEpi/TE+KJzufyC6xzY=; b=zmOaUc4Orw3zsq ptQjWzmzSMijXoK3O0X8fkqQUbi0LDGBzpuaFigK7kvCq7Y/73H2yq4MpbCs9qVztof3joCGsAd7l aFOOfGWuM/6sTZiTE5kSSupqpcgGHuZ0l+1GaQ9kRxo6UXzkTEu8oqxnvcwX4aAs5YVe4hV7uikqU mU7qkVPtDJL2zHb70faOz76cCjYPK9dPz9eQd2KEN/kXko+lUpA/SKnxZFYCI+QtUIfgJTVitPhzs nNtk+PODTTuDZlBYsKBXhBL7Av6PkPpKeAnLXy09HtWxF6b7LLxr0NYN6Z1LTEVZC4NgeXNdE9oZ8 4xealf31/TAUy5lj7yiw==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.99.1 #2 (Red Hat Linux)) id 1wMi3k-0000000G13i-0FU4; Tue, 12 May 2026 08:01:44 +0000 Received: from bali.collaboradmins.com ([148.251.105.195]) by bombadil.infradead.org with esmtps (Exim 4.99.1 #2 (Red Hat Linux)) id 1wMi3g-0000000G12m-0Vfq; Tue, 12 May 2026 08:01:42 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=collabora.com; s=mail; t=1778572896; bh=3DoI0hxX5YJxsx4ArgWBt+w1byCMOOq8XiA2DZXLG94=; h=Date:Subject:To:Cc:References:From:In-Reply-To:From; b=gPWDBlbn4lDSR0ztKkOFXD0mzJoq2CAoIlueIXAOEX1BaY44WvY/rTVPVcKSSnHmV +uVIx8kSGxswdJbvd7z086hR7FuDtXBoc9iq+B6k3LddADSlMs4Jr9NF3Rcn4yS2co zS9dWreCymwYAMPUtpx6BA2Gm4tyU2vRhUONYZX2cdboRxW5wYjtL3cjI+u/5wdxOx aCl9sg+ZC9eRuRdT70Wdip8yuzmT0I5is0Uj5vIxMbZ+t7owhv3MEc30m8lIhlCT4z 0ITzCwHtxGCH/d/FCeFYcYpFgJnvetRApDfLA9begQ9v4MzAU96osEkFV0Ss4WKBfo rn/bUf4dYCgQg== Received: from [100.64.1.43] (unknown [100.64.1.43]) (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) (Authenticated sender: benjamin.gaignard) by bali.collaboradmins.com (Postfix) with ESMTPSA id 5656117E1544; Tue, 12 May 2026 10:01:36 +0200 (CEST) Message-ID: <17051dc6-2488-424b-a73d-0a6f4817250a@collabora.com> Date: Tue, 12 May 2026 10:01:35 +0200 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: [PATCH v4] media: verisilicon: Create AV1 helper library To: Hans Verkuil , nicolas.dufresne@collabora.com, p.zabel@pengutronix.de, mchehab@kernel.org, heiko@sntech.de Cc: linux-kernel@vger.kernel.org, linux-media@vger.kernel.org, linux-rockchip@lists.infradead.org, linux-arm-kernel@lists.infradead.org, kernel@collabora.com References: <20260505081939.17230-1-benjamin.gaignard@collabora.com> <1f48d0fd-729e-4694-bb8a-4ce6c6f3675f@kernel.org> Content-Language: en-US From: Benjamin Gaignard In-Reply-To: <1f48d0fd-729e-4694-bb8a-4ce6c6f3675f@kernel.org> X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.9.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20260512_010140_628112_1620C7FD X-CRM114-Status: GOOD ( 21.53 ) X-BeenThere: linux-rockchip@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: Upstream kernel work for Rockchip platforms List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Transfer-Encoding: base64 Content-Type: text/plain; charset="utf-8"; Format="flowed" Sender: "Linux-rockchip" Errors-To: linux-rockchip-bounces+linux-rockchip=archiver.kernel.org@lists.infradead.org CkxlIDEyLzA1LzIwMjYgw6AgMDg6MzMsIEhhbnMgVmVya3VpbCBhIMOpY3JpdMKgOgo+IEhpIEJl bmphbWluLAo+Cj4gSXQgbG9va3MgbXVjaCBiZXR0ZXIgbm93IHRoYXQgaXQgdXNlcyBhIHN0cnVj dC4KPgo+IEkgaGF2ZSBzb21lIG90aGVyIGNvbW1lbnRzLCB0aG91Z2g6CgpZb3UgYXJlIHJpZ2h0 IEkgd2lsbCBtb3JlIGNhcmVmdWxseSBjaGVjayBhcnJheXMgYm9uZCBhbmQKdGhlIHJldHVybmVk IHZhbHVlIG9mIGhhbnRyb19hdjFfZ2V0X2ZyYW1lX2luZGV4KCkgZXZlcnl3aGVyZS4KClJlZ2Fy ZHMsCkJlbmphbWluCgo+Cj4gT24gMDUvMDUvMjAyNiAxMDoxOSwgQmVuamFtaW4gR2FpZ25hcmQg d3JvdGU6Cj4+IFJlZ3JvdXAgYWxsIG5vbmUgaGFyZHdhcmUgcmVsYXRlZCBBVjEgZnVuY3Rpb25z IGludG8gYSBoZWxwZXIgbGlicmFyeS4KPj4gVGhlIGdvYWwgaXMgdG8gYXZvaWQgY29kZSBkdXBs aWNhdGlvbiBmb3IgZnV0dXJlIEFWMSBjb2RlY3MuCj4+Cj4+IFRlc3RlZCBvbiByb2NrIDViIGJv YXJkIEZsdXN0ZXIgc2NvcmUgcmVtYWlucyB0aGUgc2FtZSAyMDQvMjQxLgo+Pgo+PiBTaWduZWQt b2ZmLWJ5OiBCZW5qYW1pbiBHYWlnbmFyZCA8YmVuamFtaW4uZ2FpZ25hcmRAY29sbGFib3JhLmNv bT4KPj4gUmV2aWV3ZWQtYnk6IE5pY29sYXMgRHVmcmVzbmUgPG5pY29sYXMuZHVmcmVzbmVAY29s bGFib3JhLmNvbT4KPj4gLS0tCj4+IHZlcnNpb24gNDoKPj4gLSBjaGFuZ2UgZnVuY3Rpb25zIHBy b3RvdHlwZXMgdG8gdXNlIGEgc3RydWN0dXJlLgo+PiAtIHJlYmFzZWQgb24gdjcuMS1yYzIgdGFn Lgo+Pgo+PiAgIGRyaXZlcnMvbWVkaWEvcGxhdGZvcm0vdmVyaXNpbGljb24vTWFrZWZpbGUgICB8 ICAgNyArLQo+PiAgIC4uLi9tZWRpYS9wbGF0Zm9ybS92ZXJpc2lsaWNvbi9oYW50cm9fYXYxLmMg ICB8IDc4MiArKysrKysrKysrKysrKwo+PiAgIC4uLi9tZWRpYS9wbGF0Zm9ybS92ZXJpc2lsaWNv bi9oYW50cm9fYXYxLmggICB8ICA2MiArKwo+PiAgIC4uLmVudHJvcHltb2RlLmMgPT4gaGFudHJv X2F2MV9lbnRyb3B5bW9kZS5jfSB8ICAxOCArLQo+PiAgIC4uLmVudHJvcHltb2RlLmggPT4gaGFu dHJvX2F2MV9lbnRyb3B5bW9kZS5ofSB8ICAxOCArLQo+PiAgIC4uLmF2MV9maWxtZ3JhaW4uYyA9 PiBoYW50cm9fYXYxX2ZpbG1ncmFpbi5jfSB8IDEyNSArKy0KPj4gICAuLi4vdmVyaXNpbGljb24v aGFudHJvX2F2MV9maWxtZ3JhaW4uaCAgICAgICAgfCAgNDggKwo+PiAgIC4uLi9tZWRpYS9wbGF0 Zm9ybS92ZXJpc2lsaWNvbi9oYW50cm9faHcuaCAgICB8ICAgNyArLQo+PiAgIC4uLi92ZXJpc2ls aWNvbi9yb2NrY2hpcF9hdjFfZmlsbWdyYWluLmggICAgICB8ICAzNiAtCj4+ICAgLi4uL3Zlcmlz aWxpY29uL3JvY2tjaGlwX3ZwdTk4MV9od19hdjFfZGVjLmMgIHwgOTc3ICsrLS0tLS0tLS0tLS0t LS0tLQo+PiAgIC4uLi9wbGF0Zm9ybS92ZXJpc2lsaWNvbi9yb2NrY2hpcF92cHVfaHcuYyAgICB8 ICAgNyArLQo+PiAgIDExIGZpbGVzIGNoYW5nZWQsIDEwNzYgaW5zZXJ0aW9ucygrKSwgMTAxMSBk ZWxldGlvbnMoLSkKPj4gICBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9tZWRpYS9wbGF0Zm9y bS92ZXJpc2lsaWNvbi9oYW50cm9fYXYxLmMKPj4gICBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVy cy9tZWRpYS9wbGF0Zm9ybS92ZXJpc2lsaWNvbi9oYW50cm9fYXYxLmgKPj4gICByZW5hbWUgZHJp dmVycy9tZWRpYS9wbGF0Zm9ybS92ZXJpc2lsaWNvbi97cm9ja2NoaXBfYXYxX2VudHJvcHltb2Rl LmMgPT4gaGFudHJvX2F2MV9lbnRyb3B5bW9kZS5jfSAoOTklKQo+PiAgIHJlbmFtZSBkcml2ZXJz L21lZGlhL3BsYXRmb3JtL3ZlcmlzaWxpY29uL3tyb2NrY2hpcF9hdjFfZW50cm9weW1vZGUuaCA9 PiBoYW50cm9fYXYxX2VudHJvcHltb2RlLmh9ICg5NSUpCj4+ICAgcmVuYW1lIGRyaXZlcnMvbWVk aWEvcGxhdGZvcm0vdmVyaXNpbGljb24ve3JvY2tjaGlwX2F2MV9maWxtZ3JhaW4uYyA9PiBoYW50 cm9fYXYxX2ZpbG1ncmFpbi5jfSAoODUlKQo+PiAgIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJz L21lZGlhL3BsYXRmb3JtL3ZlcmlzaWxpY29uL2hhbnRyb19hdjFfZmlsbWdyYWluLmgKPj4gICBk ZWxldGUgbW9kZSAxMDA2NDQgZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS92ZXJpc2lsaWNvbi9yb2Nr Y2hpcF9hdjFfZmlsbWdyYWluLmgKPj4KPiA8c25pcD4KPgo+PiBkaWZmIC0tZ2l0IGEvZHJpdmVy cy9tZWRpYS9wbGF0Zm9ybS92ZXJpc2lsaWNvbi9oYW50cm9fYXYxLmMgYi9kcml2ZXJzL21lZGlh L3BsYXRmb3JtL3ZlcmlzaWxpY29uL2hhbnRyb19hdjEuYwo+PiBuZXcgZmlsZSBtb2RlIDEwMDY0 NAo+PiBpbmRleCAwMDAwMDAwMDAwMDAuLjcyNThhNzQ5ZjdiNQo+PiAtLS0gL2Rldi9udWxsCj4+ ICsrKyBiL2RyaXZlcnMvbWVkaWEvcGxhdGZvcm0vdmVyaXNpbGljb24vaGFudHJvX2F2MS5jCj4+ IEBAIC0wLDAgKzEsNzgyIEBACj4gPHNuaXA+Cj4KPj4gK2ludCBoYW50cm9fYXYxX2dldF9mcmFt ZV9pbmRleChzdHJ1Y3QgaGFudHJvX2N0eCAqY3R4LCBpbnQgcmVmKQo+PiArewo+PiArCXN0cnVj dCBoYW50cm9fYXYxX2RlY19od19jdHggKmF2MV9kZWMgPSAmY3R4LT5hdjFfZGVjOwo+PiArCXN0 cnVjdCBoYW50cm9fYXYxX2RlY19jdHJscyAqY3RybHMgPSAmYXYxX2RlYy0+Y3RybHM7Cj4+ICsJ Y29uc3Qgc3RydWN0IHY0bDJfY3RybF9hdjFfZnJhbWUgKmZyYW1lID0gY3RybHMtPmZyYW1lOwo+ PiArCXU2NCB0aW1lc3RhbXA7Cj4+ICsJaW50IGksIGlkeCA9IGZyYW1lLT5yZWZfZnJhbWVfaWR4 W3JlZl07Cj4gSXQncyBwcm9iYWJseSB3aXNlIHRvIGNoZWNrIHRoYXQgJ3JlZicgaXNuJ3Qgb3V0 IG9mIGJvdW5kcyAoPCAwIG9yCj4+ID0gVjRMMl9BVjFfUkVGU19QRVJfRlJBTUUpLgo+PiArCj4+ ICsJaWYgKGlkeCA+PSBWNEwyX0FWMV9UT1RBTF9SRUZTX1BFUl9GUkFNRSB8fCBpZHggPCAwKQo+ PiArCQlyZXR1cm4gQVYxX0lOVkFMSURfSURYOwo+PiArCj4+ICsJdGltZXN0YW1wID0gZnJhbWUt PnJlZmVyZW5jZV9mcmFtZV90c1tpZHhdOwo+PiArCWZvciAoaSA9IDA7IGkgPCBBVjFfTUFYX0ZS QU1FX0JVRl9DT1VOVDsgaSsrKSB7Cj4+ICsJCWlmICghYXYxX2RlYy0+ZnJhbWVfcmVmc1tpXS51 c2VkKQo+PiArCQkJY29udGludWU7Cj4+ICsJCWlmIChhdjFfZGVjLT5mcmFtZV9yZWZzW2ldLnRp bWVzdGFtcCA9PSB0aW1lc3RhbXApCj4+ICsJCQlyZXR1cm4gaTsKPj4gKwl9Cj4+ICsKPj4gKwly ZXR1cm4gQVYxX0lOVkFMSURfSURYOwo+PiArfQo+PiArCj4+ICtpbnQgaGFudHJvX2F2MV9nZXRf b3JkZXJfaGludChzdHJ1Y3QgaGFudHJvX2N0eCAqY3R4LCBpbnQgcmVmKQo+PiArewo+PiArCXN0 cnVjdCBoYW50cm9fYXYxX2RlY19od19jdHggKmF2MV9kZWMgPSAmY3R4LT5hdjFfZGVjOwo+PiAr CWludCBpZHggPSBoYW50cm9fYXYxX2dldF9mcmFtZV9pbmRleChjdHgsIHJlZik7Cj4+ICsKPj4g KwlpZiAoaWR4ICE9IEFWMV9JTlZBTElEX0lEWCkKPj4gKwkJcmV0dXJuIGF2MV9kZWMtPmZyYW1l X3JlZnNbaWR4XS5vcmRlcl9oaW50Owo+PiArCj4+ICsJcmV0dXJuIDA7Cj4+ICt9Cj4+ICsKPj4g K2ludCBoYW50cm9fYXYxX2ZyYW1lX3JlZihzdHJ1Y3QgaGFudHJvX2N0eCAqY3R4LCB1NjQgdGlt ZXN0YW1wKQo+PiArewo+PiArCXN0cnVjdCBoYW50cm9fYXYxX2RlY19od19jdHggKmF2MV9kZWMg PSAmY3R4LT5hdjFfZGVjOwo+PiArCXN0cnVjdCBoYW50cm9fYXYxX2RlY19jdHJscyAqY3RybHMg PSAmYXYxX2RlYy0+Y3RybHM7Cj4+ICsJY29uc3Qgc3RydWN0IHY0bDJfY3RybF9hdjFfZnJhbWUg KmZyYW1lID0gY3RybHMtPmZyYW1lOwo+PiArCWludCBpOwo+PiArCj4+ICsJZm9yIChpID0gMDsg aSA8IEFWMV9NQVhfRlJBTUVfQlVGX0NPVU5UOyBpKyspIHsKPj4gKwkJaW50IGo7Cj4+ICsKPj4g KwkJaWYgKGF2MV9kZWMtPmZyYW1lX3JlZnNbaV0udXNlZCkKPj4gKwkJCWNvbnRpbnVlOwo+PiAr Cj4+ICsJCWF2MV9kZWMtPmZyYW1lX3JlZnNbaV0ud2lkdGggPSBmcmFtZS0+ZnJhbWVfd2lkdGhf bWludXNfMSArIDE7Cj4+ICsJCWF2MV9kZWMtPmZyYW1lX3JlZnNbaV0uaGVpZ2h0ID0gZnJhbWUt PmZyYW1lX2hlaWdodF9taW51c18xICsgMTsKPj4gKwkJYXYxX2RlYy0+ZnJhbWVfcmVmc1tpXS5t aV9jb2xzID0gRElWX1JPVU5EX1VQKGZyYW1lLT5mcmFtZV93aWR0aF9taW51c18xICsgMSwgOCk7 Cj4+ICsJCWF2MV9kZWMtPmZyYW1lX3JlZnNbaV0ubWlfcm93cyA9IERJVl9ST1VORF9VUChmcmFt ZS0+ZnJhbWVfaGVpZ2h0X21pbnVzXzEgKyAxLCA4KTsKPj4gKwkJYXYxX2RlYy0+ZnJhbWVfcmVm c1tpXS50aW1lc3RhbXAgPSB0aW1lc3RhbXA7Cj4+ICsJCWF2MV9kZWMtPmZyYW1lX3JlZnNbaV0u ZnJhbWVfdHlwZSA9IGZyYW1lLT5mcmFtZV90eXBlOwo+PiArCQlhdjFfZGVjLT5mcmFtZV9yZWZz W2ldLm9yZGVyX2hpbnQgPSBmcmFtZS0+b3JkZXJfaGludDsKPj4gKwkJYXYxX2RlYy0+ZnJhbWVf cmVmc1tpXS52YjJfcmVmID0gaGFudHJvX2dldF9kc3RfYnVmKGN0eCk7Cj4+ICsKPj4gKwkJZm9y IChqID0gMDsgaiA8IFY0TDJfQVYxX1RPVEFMX1JFRlNfUEVSX0ZSQU1FOyBqKyspCj4+ICsJCQlh djFfZGVjLT5mcmFtZV9yZWZzW2ldLm9yZGVyX2hpbnRzW2pdID0gZnJhbWUtPm9yZGVyX2hpbnRz W2pdOwo+PiArCQlhdjFfZGVjLT5mcmFtZV9yZWZzW2ldLnVzZWQgPSB0cnVlOwo+PiArCQlhdjFf ZGVjLT5jdXJyZW50X2ZyYW1lX2luZGV4ID0gaTsKPj4gKwo+PiArCQlyZXR1cm4gaTsKPj4gKwl9 Cj4+ICsKPj4gKwlyZXR1cm4gQVYxX0lOVkFMSURfSURYOwo+PiArfQo+PiArCj4+ICtzdGF0aWMg dm9pZCBoYW50cm9fYXYxX2ZyYW1lX3VucmVmKHN0cnVjdCBoYW50cm9fY3R4ICpjdHgsIGludCBp ZHgpCj4+ICt7Cj4+ICsJc3RydWN0IGhhbnRyb19hdjFfZGVjX2h3X2N0eCAqYXYxX2RlYyA9ICZj dHgtPmF2MV9kZWM7Cj4+ICsKPj4gKwlpZiAoaWR4ID49IDApCj4+ICsJCWF2MV9kZWMtPmZyYW1l X3JlZnNbaWR4XS51c2VkID0gZmFsc2U7Cj4+ICt9Cj4+ICsKPj4gK3ZvaWQgaGFudHJvX2F2MV9j bGVhbl9yZWZzKHN0cnVjdCBoYW50cm9fY3R4ICpjdHgpCj4+ICt7Cj4+ICsJc3RydWN0IGhhbnRy b19hdjFfZGVjX2h3X2N0eCAqYXYxX2RlYyA9ICZjdHgtPmF2MV9kZWM7Cj4+ICsJc3RydWN0IGhh bnRyb19hdjFfZGVjX2N0cmxzICpjdHJscyA9ICZhdjFfZGVjLT5jdHJsczsKPj4gKwo+PiArCWlu dCByZWYsIGlkeDsKPj4gKwo+PiArCWZvciAoaWR4ID0gMDsgaWR4IDwgQVYxX01BWF9GUkFNRV9C VUZfQ09VTlQ7IGlkeCsrKSB7Cj4+ICsJCXU2NCB0aW1lc3RhbXAgPSBhdjFfZGVjLT5mcmFtZV9y ZWZzW2lkeF0udGltZXN0YW1wOwo+PiArCQlib29sIHVzZWQgPSBmYWxzZTsKPj4gKwo+PiArCQlp ZiAoIWF2MV9kZWMtPmZyYW1lX3JlZnNbaWR4XS51c2VkKQo+PiArCQkJY29udGludWU7Cj4+ICsK Pj4gKwkJZm9yIChyZWYgPSAwOyByZWYgPCBWNEwyX0FWMV9UT1RBTF9SRUZTX1BFUl9GUkFNRTsg cmVmKyspIHsKPj4gKwkJCWlmIChjdHJscy0+ZnJhbWUtPnJlZmVyZW5jZV9mcmFtZV90c1tyZWZd ID09IHRpbWVzdGFtcCkKPj4gKwkJCQl1c2VkID0gdHJ1ZTsKPj4gKwkJfQo+PiArCj4+ICsJCWlm ICghdXNlZCkKPj4gKwkJCWhhbnRyb19hdjFfZnJhbWVfdW5yZWYoY3R4LCBpZHgpOwo+PiArCX0K Pj4gK30KPj4gKwo+PiArc2l6ZV90IGhhbnRyb19hdjFfbHVtYV9zaXplKHN0cnVjdCBoYW50cm9f Y3R4ICpjdHgpCj4+ICt7Cj4+ICsJcmV0dXJuIGN0eC0+cmVmX2ZtdC5wbGFuZV9mbXRbMF0uYnl0 ZXNwZXJsaW5lICogY3R4LT5yZWZfZm10LmhlaWdodDsKPj4gK30KPj4gKwo+PiArc2l6ZV90IGhh bnRyb19hdjFfY2hyb21hX3NpemUoc3RydWN0IGhhbnRyb19jdHggKmN0eCkKPj4gK3sKPj4gKwlz aXplX3QgY3Jfb2Zmc2V0ID0gaGFudHJvX2F2MV9sdW1hX3NpemUoY3R4KTsKPj4gKwo+PiArCXJl dHVybiBBTElHTigoY3Jfb2Zmc2V0ICogMykgLyAyLCA2NCk7Cj4+ICt9Cj4+ICsKPj4gK3N0YXRp YyB2b2lkIGhhbnRyb19hdjFfdGlsZXNfZnJlZShzdHJ1Y3QgaGFudHJvX2N0eCAqY3R4KQo+PiAr ewo+PiArCXN0cnVjdCBoYW50cm9fZGV2ICp2cHUgPSBjdHgtPmRldjsKPj4gKwlzdHJ1Y3QgaGFu dHJvX2F2MV9kZWNfaHdfY3R4ICphdjFfZGVjID0gJmN0eC0+YXYxX2RlYzsKPj4gKwo+PiArCWlm IChhdjFfZGVjLT5kYl9kYXRhX2NvbC5jcHUpCj4+ICsJCWRtYV9mcmVlX2NvaGVyZW50KHZwdS0+ ZGV2LCBhdjFfZGVjLT5kYl9kYXRhX2NvbC5zaXplLAo+PiArCQkJCSAgYXYxX2RlYy0+ZGJfZGF0 YV9jb2wuY3B1LAo+PiArCQkJCSAgYXYxX2RlYy0+ZGJfZGF0YV9jb2wuZG1hKTsKPj4gKwlhdjFf ZGVjLT5kYl9kYXRhX2NvbC5jcHUgPSBOVUxMOwo+PiArCj4+ICsJaWYgKGF2MV9kZWMtPmRiX2N0 cmxfY29sLmNwdSkKPj4gKwkJZG1hX2ZyZWVfY29oZXJlbnQodnB1LT5kZXYsIGF2MV9kZWMtPmRi X2N0cmxfY29sLnNpemUsCj4+ICsJCQkJICBhdjFfZGVjLT5kYl9jdHJsX2NvbC5jcHUsCj4+ICsJ CQkJICBhdjFfZGVjLT5kYl9jdHJsX2NvbC5kbWEpOwo+PiArCWF2MV9kZWMtPmRiX2N0cmxfY29s LmNwdSA9IE5VTEw7Cj4+ICsKPj4gKwlpZiAoYXYxX2RlYy0+Y2RlZl9jb2wuY3B1KQo+PiArCQlk bWFfZnJlZV9jb2hlcmVudCh2cHUtPmRldiwgYXYxX2RlYy0+Y2RlZl9jb2wuc2l6ZSwKPj4gKwkJ CQkgIGF2MV9kZWMtPmNkZWZfY29sLmNwdSwgYXYxX2RlYy0+Y2RlZl9jb2wuZG1hKTsKPj4gKwlh djFfZGVjLT5jZGVmX2NvbC5jcHUgPSBOVUxMOwo+PiArCj4+ICsJaWYgKGF2MV9kZWMtPnNyX2Nv bC5jcHUpCj4+ICsJCWRtYV9mcmVlX2NvaGVyZW50KHZwdS0+ZGV2LCBhdjFfZGVjLT5zcl9jb2wu c2l6ZSwKPj4gKwkJCQkgIGF2MV9kZWMtPnNyX2NvbC5jcHUsIGF2MV9kZWMtPnNyX2NvbC5kbWEp Owo+PiArCWF2MV9kZWMtPnNyX2NvbC5jcHUgPSBOVUxMOwo+PiArCj4+ICsJaWYgKGF2MV9kZWMt PmxyX2NvbC5jcHUpCj4+ICsJCWRtYV9mcmVlX2NvaGVyZW50KHZwdS0+ZGV2LCBhdjFfZGVjLT5s cl9jb2wuc2l6ZSwKPj4gKwkJCQkgIGF2MV9kZWMtPmxyX2NvbC5jcHUsIGF2MV9kZWMtPmxyX2Nv bC5kbWEpOwo+PiArCWF2MV9kZWMtPmxyX2NvbC5jcHUgPSBOVUxMOwo+PiArfQo+PiArCj4+ICtz dGF0aWMgaW50IGhhbnRyb19hdjFfdGlsZXNfcmVhbGxvY2F0ZShzdHJ1Y3QgaGFudHJvX2N0eCAq Y3R4KQo+PiArewo+PiArCXN0cnVjdCBoYW50cm9fZGV2ICp2cHUgPSBjdHgtPmRldjsKPj4gKwlz dHJ1Y3QgaGFudHJvX2F2MV9kZWNfaHdfY3R4ICphdjFfZGVjID0gJmN0eC0+YXYxX2RlYzsKPj4g KwlzdHJ1Y3QgaGFudHJvX2F2MV9kZWNfY3RybHMgKmN0cmxzID0gJmF2MV9kZWMtPmN0cmxzOwo+ PiArCWNvbnN0IHN0cnVjdCB2NGwyX2F2MV90aWxlX2luZm8gKnRpbGVfaW5mbyA9ICZjdHJscy0+ ZnJhbWUtPnRpbGVfaW5mbzsKPj4gKwl1bnNpZ25lZCBpbnQgbnVtX3RpbGVfY29scyA9IHRpbGVf aW5mby0+dGlsZV9jb2xzOwo+PiArCXVuc2lnbmVkIGludCBoZWlnaHQgPSBBTElHTihjdHJscy0+ ZnJhbWUtPmZyYW1lX2hlaWdodF9taW51c18xICsgMSwgNjQpOwo+PiArCXVuc2lnbmVkIGludCBo ZWlnaHRfaW5fc2IgPSBoZWlnaHQgLyA2NDsKPj4gKwl1bnNpZ25lZCBpbnQgc3RyaXBlX251bSA9 ICgoaGVpZ2h0ICsgOCkgKyA2MykgLyA2NDsKPj4gKwlzaXplX3Qgc2l6ZTsKPj4gKwo+PiArCWlm IChhdjFfZGVjLT5kYl9kYXRhX2NvbC5zaXplID49Cj4+ICsJICAgIEFMSUdOKGhlaWdodCAqIDEy ICogY3R4LT5iaXRfZGVwdGggLyA4LCAxMjgpICogbnVtX3RpbGVfY29scykKPj4gKwkJcmV0dXJu IDA7Cj4+ICsKPj4gKwloYW50cm9fYXYxX3RpbGVzX2ZyZWUoY3R4KTsKPj4gKwo+PiArCXNpemUg PSBBTElHTihoZWlnaHQgKiAxMiAqIGN0eC0+Yml0X2RlcHRoIC8gOCwgMTI4KSAqIG51bV90aWxl X2NvbHM7Cj4+ICsJYXYxX2RlYy0+ZGJfZGF0YV9jb2wuY3B1ID0gZG1hX2FsbG9jX2NvaGVyZW50 KHZwdS0+ZGV2LCBzaXplLAo+PiArCQkJCQkJICAgICAgJmF2MV9kZWMtPmRiX2RhdGFfY29sLmRt YSwKPj4gKwkJCQkJCSAgICAgIEdGUF9LRVJORUwpOwo+PiArCWlmICghYXYxX2RlYy0+ZGJfZGF0 YV9jb2wuY3B1KQo+PiArCQlnb3RvIGJ1ZmZlcl9hbGxvY2F0aW9uX2Vycm9yOwo+PiArCWF2MV9k ZWMtPmRiX2RhdGFfY29sLnNpemUgPSBzaXplOwo+PiArCj4+ICsJc2l6ZSA9IEFMSUdOKGhlaWdo dCAqIDIgKiAxNiAvIDQsIDEyOCkgKiBudW1fdGlsZV9jb2xzOwo+PiArCWF2MV9kZWMtPmRiX2N0 cmxfY29sLmNwdSA9IGRtYV9hbGxvY19jb2hlcmVudCh2cHUtPmRldiwgc2l6ZSwKPj4gKwkJCQkJ CSAgICAgICZhdjFfZGVjLT5kYl9jdHJsX2NvbC5kbWEsCj4+ICsJCQkJCQkgICAgICBHRlBfS0VS TkVMKTsKPj4gKwlpZiAoIWF2MV9kZWMtPmRiX2N0cmxfY29sLmNwdSkKPj4gKwkJZ290byBidWZm ZXJfYWxsb2NhdGlvbl9lcnJvcjsKPj4gKwlhdjFfZGVjLT5kYl9jdHJsX2NvbC5zaXplID0gc2l6 ZTsKPj4gKwo+PiArCXNpemUgPSBBTElHTihoZWlnaHRfaW5fc2IgKiA0NCAqIGN0eC0+Yml0X2Rl cHRoICogMTYgLyA4LCAxMjgpICogbnVtX3RpbGVfY29sczsKPj4gKwlhdjFfZGVjLT5jZGVmX2Nv bC5jcHUgPSBkbWFfYWxsb2NfY29oZXJlbnQodnB1LT5kZXYsIHNpemUsCj4+ICsJCQkJCQkgICAm YXYxX2RlYy0+Y2RlZl9jb2wuZG1hLAo+PiArCQkJCQkJICAgR0ZQX0tFUk5FTCk7Cj4+ICsJaWYg KCFhdjFfZGVjLT5jZGVmX2NvbC5jcHUpCj4+ICsJCWdvdG8gYnVmZmVyX2FsbG9jYXRpb25fZXJy b3I7Cj4+ICsJYXYxX2RlYy0+Y2RlZl9jb2wuc2l6ZSA9IHNpemU7Cj4+ICsKPj4gKwlzaXplID0g QUxJR04oaGVpZ2h0X2luX3NiICogKDMwNDAgKyAxMjgwKSwgMTI4KSAqIG51bV90aWxlX2NvbHM7 Cj4+ICsJYXYxX2RlYy0+c3JfY29sLmNwdSA9IGRtYV9hbGxvY19jb2hlcmVudCh2cHUtPmRldiwg c2l6ZSwKPj4gKwkJCQkJCSAmYXYxX2RlYy0+c3JfY29sLmRtYSwKPj4gKwkJCQkJCSBHRlBfS0VS TkVMKTsKPj4gKwlpZiAoIWF2MV9kZWMtPnNyX2NvbC5jcHUpCj4+ICsJCWdvdG8gYnVmZmVyX2Fs bG9jYXRpb25fZXJyb3I7Cj4+ICsJYXYxX2RlYy0+c3JfY29sLnNpemUgPSBzaXplOwo+PiArCj4+ ICsJc2l6ZSA9IEFMSUdOKHN0cmlwZV9udW0gKiAxNTM2ICogY3R4LT5iaXRfZGVwdGggLyA4LCAx MjgpICogbnVtX3RpbGVfY29sczsKPj4gKwlhdjFfZGVjLT5scl9jb2wuY3B1ID0gZG1hX2FsbG9j X2NvaGVyZW50KHZwdS0+ZGV2LCBzaXplLAo+PiArCQkJCQkJICZhdjFfZGVjLT5scl9jb2wuZG1h LAo+PiArCQkJCQkJIEdGUF9LRVJORUwpOwo+PiArCWlmICghYXYxX2RlYy0+bHJfY29sLmNwdSkK Pj4gKwkJZ290byBidWZmZXJfYWxsb2NhdGlvbl9lcnJvcjsKPj4gKwlhdjFfZGVjLT5scl9jb2wu c2l6ZSA9IHNpemU7Cj4+ICsKPj4gKwlhdjFfZGVjLT5udW1fdGlsZV9jb2xzX2FsbG9jYXRlZCA9 IG51bV90aWxlX2NvbHM7Cj4+ICsJcmV0dXJuIDA7Cj4+ICsKPj4gK2J1ZmZlcl9hbGxvY2F0aW9u X2Vycm9yOgo+PiArCWhhbnRyb19hdjFfdGlsZXNfZnJlZShjdHgpOwo+PiArCXJldHVybiAtRU5P TUVNOwo+PiArfQo+PiArCj4+ICt2b2lkIGhhbnRyb19hdjFfZXhpdChzdHJ1Y3QgaGFudHJvX2N0 eCAqY3R4KQo+PiArewo+PiArCXN0cnVjdCBoYW50cm9fZGV2ICp2cHUgPSBjdHgtPmRldjsKPj4g KwlzdHJ1Y3QgaGFudHJvX2F2MV9kZWNfaHdfY3R4ICphdjFfZGVjID0gJmN0eC0+YXYxX2RlYzsK Pj4gKwo+PiArCWlmIChhdjFfZGVjLT5nbG9iYWxfbW9kZWwuY3B1KQo+PiArCQlkbWFfZnJlZV9j b2hlcmVudCh2cHUtPmRldiwgYXYxX2RlYy0+Z2xvYmFsX21vZGVsLnNpemUsCj4+ICsJCQkJICBh djFfZGVjLT5nbG9iYWxfbW9kZWwuY3B1LAo+PiArCQkJCSAgYXYxX2RlYy0+Z2xvYmFsX21vZGVs LmRtYSk7Cj4+ICsJYXYxX2RlYy0+Z2xvYmFsX21vZGVsLmNwdSA9IE5VTEw7Cj4+ICsKPj4gKwlp ZiAoYXYxX2RlYy0+dGlsZV9pbmZvLmNwdSkKPj4gKwkJZG1hX2ZyZWVfY29oZXJlbnQodnB1LT5k ZXYsIGF2MV9kZWMtPnRpbGVfaW5mby5zaXplLAo+PiArCQkJCSAgYXYxX2RlYy0+dGlsZV9pbmZv LmNwdSwKPj4gKwkJCQkgIGF2MV9kZWMtPnRpbGVfaW5mby5kbWEpOwo+PiArCWF2MV9kZWMtPnRp bGVfaW5mby5jcHUgPSBOVUxMOwo+PiArCj4+ICsJaWYgKGF2MV9kZWMtPmZpbG1fZ3JhaW4uY3B1 KQo+PiArCQlkbWFfZnJlZV9jb2hlcmVudCh2cHUtPmRldiwgYXYxX2RlYy0+ZmlsbV9ncmFpbi5z aXplLAo+PiArCQkJCSAgYXYxX2RlYy0+ZmlsbV9ncmFpbi5jcHUsCj4+ICsJCQkJICBhdjFfZGVj LT5maWxtX2dyYWluLmRtYSk7Cj4+ICsJYXYxX2RlYy0+ZmlsbV9ncmFpbi5jcHUgPSBOVUxMOwo+ PiArCj4+ICsJaWYgKGF2MV9kZWMtPnByb2JfdGJsLmNwdSkKPj4gKwkJZG1hX2ZyZWVfY29oZXJl bnQodnB1LT5kZXYsIGF2MV9kZWMtPnByb2JfdGJsLnNpemUsCj4+ICsJCQkJICBhdjFfZGVjLT5w cm9iX3RibC5jcHUsIGF2MV9kZWMtPnByb2JfdGJsLmRtYSk7Cj4+ICsJYXYxX2RlYy0+cHJvYl90 YmwuY3B1ID0gTlVMTDsKPj4gKwo+PiArCWlmIChhdjFfZGVjLT5wcm9iX3RibF9vdXQuY3B1KQo+ PiArCQlkbWFfZnJlZV9jb2hlcmVudCh2cHUtPmRldiwgYXYxX2RlYy0+cHJvYl90Ymxfb3V0LnNp emUsCj4+ICsJCQkJICBhdjFfZGVjLT5wcm9iX3RibF9vdXQuY3B1LAo+PiArCQkJCSAgYXYxX2Rl Yy0+cHJvYl90Ymxfb3V0LmRtYSk7Cj4+ICsJYXYxX2RlYy0+cHJvYl90Ymxfb3V0LmNwdSA9IE5V TEw7Cj4+ICsKPj4gKwlpZiAoYXYxX2RlYy0+dGlsZV9idWYuY3B1KQo+PiArCQlkbWFfZnJlZV9j b2hlcmVudCh2cHUtPmRldiwgYXYxX2RlYy0+dGlsZV9idWYuc2l6ZSwKPj4gKwkJCQkgIGF2MV9k ZWMtPnRpbGVfYnVmLmNwdSwgYXYxX2RlYy0+dGlsZV9idWYuZG1hKTsKPj4gKwlhdjFfZGVjLT50 aWxlX2J1Zi5jcHUgPSBOVUxMOwo+PiArCj4+ICsJaGFudHJvX2F2MV90aWxlc19mcmVlKGN0eCk7 Cj4+ICt9Cj4+ICsKPj4gK2ludCBoYW50cm9fYXYxX2luaXQoc3RydWN0IGhhbnRyb19jdHggKmN0 eCkKPj4gK3sKPj4gKwlzdHJ1Y3QgaGFudHJvX2RldiAqdnB1ID0gY3R4LT5kZXY7Cj4+ICsJc3Ry dWN0IGhhbnRyb19hdjFfZGVjX2h3X2N0eCAqYXYxX2RlYyA9ICZjdHgtPmF2MV9kZWM7Cj4+ICsK Pj4gKwltZW1zZXQoYXYxX2RlYywgMCwgc2l6ZW9mKCphdjFfZGVjKSk7Cj4+ICsKPj4gKwlhdjFf ZGVjLT5nbG9iYWxfbW9kZWwuY3B1ID0gZG1hX2FsbG9jX2NvaGVyZW50KHZwdS0+ZGV2LCBHTE9C QUxfTU9ERUxfU0laRSwKPj4gKwkJCQkJCSAgICAgICAmYXYxX2RlYy0+Z2xvYmFsX21vZGVsLmRt YSwKPj4gKwkJCQkJCSAgICAgICBHRlBfS0VSTkVMKTsKPj4gKwlpZiAoIWF2MV9kZWMtPmdsb2Jh bF9tb2RlbC5jcHUpCj4+ICsJCXJldHVybiAtRU5PTUVNOwo+PiArCWF2MV9kZWMtPmdsb2JhbF9t b2RlbC5zaXplID0gR0xPQkFMX01PREVMX1NJWkU7Cj4+ICsKPj4gKwlhdjFfZGVjLT50aWxlX2lu Zm8uY3B1ID0gZG1hX2FsbG9jX2NvaGVyZW50KHZwdS0+ZGV2LCBBVjFfVElMRV9JTkZPX1NJWkUs Cj4+ICsJCQkJCQkgICAgJmF2MV9kZWMtPnRpbGVfaW5mby5kbWEsCj4+ICsJCQkJCQkgICAgR0ZQ X0tFUk5FTCk7Cj4+ICsJaWYgKCFhdjFfZGVjLT50aWxlX2luZm8uY3B1KQo+PiArCQlyZXR1cm4g LUVOT01FTTsKPj4gKwlhdjFfZGVjLT50aWxlX2luZm8uc2l6ZSA9IEFWMV9USUxFX0lORk9fU0la RTsKPj4gKwo+PiArCWF2MV9kZWMtPmZpbG1fZ3JhaW4uY3B1ID0gZG1hX2FsbG9jX2NvaGVyZW50 KHZwdS0+ZGV2LAo+PiArCQkJCQkJICAgICBBTElHTihzaXplb2Yoc3RydWN0IGhhbnRyb19hdjFf ZmlsbV9ncmFpbiksCj4+ICsJCQkJCQkJICAgMjA0OCksCj4+ICsJCQkJCQkgICAgICZhdjFfZGVj LT5maWxtX2dyYWluLmRtYSwKPj4gKwkJCQkJCSAgICAgR0ZQX0tFUk5FTCk7Cj4+ICsJaWYgKCFh djFfZGVjLT5maWxtX2dyYWluLmNwdSkKPj4gKwkJcmV0dXJuIC1FTk9NRU07Cj4+ICsJYXYxX2Rl Yy0+ZmlsbV9ncmFpbi5zaXplID0gQUxJR04oc2l6ZW9mKHN0cnVjdCBoYW50cm9fYXYxX2ZpbG1f Z3JhaW4pLCAyMDQ4KTsKPj4gKwo+PiArCWF2MV9kZWMtPnByb2JfdGJsLmNwdSA9IGRtYV9hbGxv Y19jb2hlcmVudCh2cHUtPmRldiwKPj4gKwkJCQkJCSAgIEFMSUdOKHNpemVvZihzdHJ1Y3QgYXYx Y2RmcyksIDIwNDgpLAo+PiArCQkJCQkJICAgJmF2MV9kZWMtPnByb2JfdGJsLmRtYSwKPj4gKwkJ CQkJCSAgIEdGUF9LRVJORUwpOwo+PiArCWlmICghYXYxX2RlYy0+cHJvYl90YmwuY3B1KQo+PiAr CQlyZXR1cm4gLUVOT01FTTsKPj4gKwlhdjFfZGVjLT5wcm9iX3RibC5zaXplID0gQUxJR04oc2l6 ZW9mKHN0cnVjdCBhdjFjZGZzKSwgMjA0OCk7Cj4+ICsKPj4gKwlhdjFfZGVjLT5wcm9iX3RibF9v dXQuY3B1ID0gZG1hX2FsbG9jX2NvaGVyZW50KHZwdS0+ZGV2LAo+PiArCQkJCQkJICAgICAgIEFM SUdOKHNpemVvZihzdHJ1Y3QgYXYxY2RmcyksIDIwNDgpLAo+PiArCQkJCQkJICAgICAgICZhdjFf ZGVjLT5wcm9iX3RibF9vdXQuZG1hLAo+PiArCQkJCQkJICAgICAgIEdGUF9LRVJORUwpOwo+PiAr CWlmICghYXYxX2RlYy0+cHJvYl90Ymxfb3V0LmNwdSkKPj4gKwkJcmV0dXJuIC1FTk9NRU07Cj4+ ICsJYXYxX2RlYy0+cHJvYl90Ymxfb3V0LnNpemUgPSBBTElHTihzaXplb2Yoc3RydWN0IGF2MWNk ZnMpLCAyMDQ4KTsKPj4gKwlhdjFfZGVjLT5jZGZzID0gJmF2MV9kZWMtPmRlZmF1bHRfY2RmczsK Pj4gKwlhdjFfZGVjLT5jZGZzX25kdmMgPSAmYXYxX2RlYy0+ZGVmYXVsdF9jZGZzX25kdmM7Cj4+ ICsKPj4gKwloYW50cm9fYXYxX3NldF9kZWZhdWx0X2NkZnMoYXYxX2RlYy0+Y2RmcywgYXYxX2Rl Yy0+Y2Rmc19uZHZjKTsKPj4gKwo+PiArCWF2MV9kZWMtPnRpbGVfYnVmLmNwdSA9IGRtYV9hbGxv Y19jb2hlcmVudCh2cHUtPmRldiwKPj4gKwkJCQkJCSAgIEFWMV9USUxFX1NJWkUsCj4+ICsJCQkJ CQkgICAmYXYxX2RlYy0+dGlsZV9idWYuZG1hLAo+PiArCQkJCQkJICAgR0ZQX0tFUk5FTCk7Cj4+ ICsJaWYgKCFhdjFfZGVjLT50aWxlX2J1Zi5jcHUpCj4+ICsJCXJldHVybiAtRU5PTUVNOwo+PiAr CWF2MV9kZWMtPnRpbGVfYnVmLnNpemUgPSBBVjFfVElMRV9TSVpFOwo+PiArCj4+ICsJcmV0dXJu IDA7Cj4+ICt9Cj4+ICsKPj4gK2ludCBoYW50cm9fYXYxX3ByZXBhcmVfcnVuKHN0cnVjdCBoYW50 cm9fY3R4ICpjdHgpCj4+ICt7Cj4+ICsJc3RydWN0IGhhbnRyb19hdjFfZGVjX2h3X2N0eCAqYXYx X2RlYyA9ICZjdHgtPmF2MV9kZWM7Cj4+ICsJc3RydWN0IGhhbnRyb19hdjFfZGVjX2N0cmxzICpj dHJscyA9ICZhdjFfZGVjLT5jdHJsczsKPj4gKwo+PiArCWN0cmxzLT5zZXF1ZW5jZSA9IGhhbnRy b19nZXRfY3RybChjdHgsIFY0TDJfQ0lEX1NUQVRFTEVTU19BVjFfU0VRVUVOQ0UpOwo+PiArCWlm IChXQVJOX09OKCFjdHJscy0+c2VxdWVuY2UpKQo+PiArCQlyZXR1cm4gLUVJTlZBTDsKPj4gKwo+ PiArCWN0cmxzLT50aWxlX2dyb3VwX2VudHJ5ID0KPj4gKwkgICAgaGFudHJvX2dldF9jdHJsKGN0 eCwgVjRMMl9DSURfU1RBVEVMRVNTX0FWMV9USUxFX0dST1VQX0VOVFJZKTsKPj4gKwlpZiAoV0FS Tl9PTighY3RybHMtPnRpbGVfZ3JvdXBfZW50cnkpKQo+PiArCQlyZXR1cm4gLUVJTlZBTDsKPj4g Kwo+PiArCWN0cmxzLT5mcmFtZSA9IGhhbnRyb19nZXRfY3RybChjdHgsIFY0TDJfQ0lEX1NUQVRF TEVTU19BVjFfRlJBTUUpOwo+PiArCWlmIChXQVJOX09OKCFjdHJscy0+ZnJhbWUpKQo+PiArCQly ZXR1cm4gLUVJTlZBTDsKPj4gKwo+PiArCWN0cmxzLT5maWxtX2dyYWluID0KPj4gKwkgICAgaGFu dHJvX2dldF9jdHJsKGN0eCwgVjRMMl9DSURfU1RBVEVMRVNTX0FWMV9GSUxNX0dSQUlOKTsKPj4g Kwo+PiArCXJldHVybiBoYW50cm9fYXYxX3RpbGVzX3JlYWxsb2NhdGUoY3R4KTsKPj4gK30KPj4g Kwo+PiArc3RhdGljIGludCBoYW50cm9fYXYxX2dldF9tc2IodTMyIG4pCj4+ICt7Cj4+ICsJaWYg KG4gPT0gMCkKPj4gKwkJcmV0dXJuIDA7Cj4+ICsJcmV0dXJuIDMxIF4gX19idWlsdGluX2Nseihu KTsKPj4gK30KPj4gKwo+PiArc3RhdGljIHNob3J0IGhhbnRyb19hdjFfcmVzb2x2ZV9kaXZpc29y XzMyKHUzMiBkLCBzaG9ydCAqc2hpZnQpCj4+ICt7Cj4+ICsJaW50IGY7Cj4+ICsJdTY0IGU7Cj4+ ICsKPj4gKwkqc2hpZnQgPSBoYW50cm9fYXYxX2dldF9tc2IoZCk7Cj4+ICsJLyogZSBpcyBvYnRh aW5lZCBmcm9tIEQgYWZ0ZXIgcmVzZXR0aW5nIHRoZSBtb3N0IHNpZ25pZmljYW50IDEgYml0LiAq Lwo+PiArCWUgPSBkIC0gKCh1MzIpMSA8PCAqc2hpZnQpOwo+PiArCS8qIEdldCB0aGUgbW9zdCBz aWduaWZpY2FudCBESVZfTFVUX0JJVFMgKDgpIGJpdHMgb2YgZSBpbnRvIGYgKi8KPj4gKwlpZiAo KnNoaWZ0ID4gRElWX0xVVF9CSVRTKQo+PiArCQlmID0gQVYxX0RJVl9ST1VORF9VUF9QT1cyKGUs ICpzaGlmdCAtIERJVl9MVVRfQklUUyk7Cj4+ICsJZWxzZQo+PiArCQlmID0gZSA8PCAoRElWX0xV VF9CSVRTIC0gKnNoaWZ0KTsKPj4gKwlpZiAoZiA+IERJVl9MVVRfTlVNKQo+PiArCQlyZXR1cm4g LTE7Cj4+ICsJKnNoaWZ0ICs9IERJVl9MVVRfUFJFQ19CSVRTOwo+PiArCS8qIFVzZSBmIGFzIGxv b2t1cCBpbnRvIHRoZSBwcmVjb21wdXRlZCB0YWJsZSBvZiBtdWx0aXBsaWVycyAqLwo+PiArCXJl dHVybiBkaXZfbHV0W2ZdOwo+PiArfQo+PiArCj4+ICtzdGF0aWMgdm9pZCBoYW50cm9fYXYxX2dl dF9zaGVhcl9wYXJhbXMoY29uc3QgdTMyICpwYXJhbXMsIHM2NCAqYWxwaGEsCj4+ICsJCQkJCXM2 NCAqYmV0YSwgczY0ICpnYW1tYSwgczY0ICpkZWx0YSkKPj4gK3sKPj4gKwljb25zdCBpbnQgKm1h dCA9IHBhcmFtczsKPj4gKwlzaG9ydCBzaGlmdDsKPj4gKwlzaG9ydCB5Owo+PiArCWxvbmcgbG9u ZyBndiwgZHY7Cj4+ICsKPj4gKwlpZiAobWF0WzJdIDw9IDApCj4+ICsJCXJldHVybjsKPj4gKwo+ PiArCSphbHBoYSA9IGNsYW1wX3ZhbChtYXRbMl0gLSAoMSA8PCBXQVJQRURNT0RFTF9QUkVDX0JJ VFMpLCBTMTZfTUlOLCBTMTZfTUFYKTsKPj4gKwkqYmV0YSA9IGNsYW1wX3ZhbChtYXRbM10sIFMx Nl9NSU4sIFMxNl9NQVgpOwo+PiArCj4+ICsJeSA9IGhhbnRyb19hdjFfcmVzb2x2ZV9kaXZpc29y XzMyKGFicyhtYXRbMl0pLCAmc2hpZnQpICogKG1hdFsyXSA8IDAgPyAtMSA6IDEpOwo+PiArCj4+ ICsJZ3YgPSAoKGxvbmcgbG9uZyltYXRbNF0gKiAoMSA8PCBXQVJQRURNT0RFTF9QUkVDX0JJVFMp KSAqIHk7Cj4+ICsKPj4gKwkqZ2FtbWEgPSBjbGFtcF92YWwoKGludClBVjFfRElWX1JPVU5EX1VQ X1BPVzJfU0lHTkVEKGd2LCBzaGlmdCksIFMxNl9NSU4sIFMxNl9NQVgpOwo+PiArCj4+ICsJZHYg PSAoKGxvbmcgbG9uZyltYXRbM10gKiBtYXRbNF0pICogeTsKPj4gKwkqZGVsdGEgPSBjbGFtcF92 YWwobWF0WzVdIC0KPj4gKwkJKGludClBVjFfRElWX1JPVU5EX1VQX1BPVzJfU0lHTkVEKGR2LCBz aGlmdCkgLSAoMSA8PCBXQVJQRURNT0RFTF9QUkVDX0JJVFMpLAo+PiArCQlTMTZfTUlOLCBTMTZf TUFYKTsKPj4gKwo+PiArCSphbHBoYSA9IEFWMV9ESVZfUk9VTkRfVVBfUE9XMl9TSUdORUQoKmFs cGhhLCBXQVJQX1BBUkFNX1JFRFVDRV9CSVRTKQo+PiArCQkgKiAoMSA8PCBXQVJQX1BBUkFNX1JF RFVDRV9CSVRTKTsKPj4gKwkqYmV0YSA9IEFWMV9ESVZfUk9VTkRfVVBfUE9XMl9TSUdORUQoKmJl dGEsIFdBUlBfUEFSQU1fUkVEVUNFX0JJVFMpCj4+ICsJCSogKDEgPDwgV0FSUF9QQVJBTV9SRURV Q0VfQklUUyk7Cj4+ICsJKmdhbW1hID0gQVYxX0RJVl9ST1VORF9VUF9QT1cyX1NJR05FRCgqZ2Ft bWEsIFdBUlBfUEFSQU1fUkVEVUNFX0JJVFMpCj4+ICsJCSAqICgxIDw8IFdBUlBfUEFSQU1fUkVE VUNFX0JJVFMpOwo+PiArCSpkZWx0YSA9IEFWMV9ESVZfUk9VTkRfVVBfUE9XMl9TSUdORUQoKmRl bHRhLCBXQVJQX1BBUkFNX1JFRFVDRV9CSVRTKQo+PiArCQkqICgxIDw8IFdBUlBfUEFSQU1fUkVE VUNFX0JJVFMpOwo+PiArfQo+PiArCj4+ICt2b2lkIGhhbnRyb19hdjFfc2V0X2dsb2JhbF9tb2Rl bChzdHJ1Y3QgaGFudHJvX2N0eCAqY3R4KQo+PiArewo+PiArCXN0cnVjdCBoYW50cm9fYXYxX2Rl Y19od19jdHggKmF2MV9kZWMgPSAmY3R4LT5hdjFfZGVjOwo+PiArCXN0cnVjdCBoYW50cm9fYXYx X2RlY19jdHJscyAqY3RybHMgPSAmYXYxX2RlYy0+Y3RybHM7Cj4+ICsJY29uc3Qgc3RydWN0IHY0 bDJfY3RybF9hdjFfZnJhbWUgKmZyYW1lID0gY3RybHMtPmZyYW1lOwo+PiArCWNvbnN0IHN0cnVj dCB2NGwyX2F2MV9nbG9iYWxfbW90aW9uICpnbSA9ICZmcmFtZS0+Z2xvYmFsX21vdGlvbjsKPj4g Kwl1OCAqZHN0ID0gYXYxX2RlYy0+Z2xvYmFsX21vZGVsLmNwdTsKPj4gKwlpbnQgcmVmX2ZyYW1l LCBpOwo+PiArCj4+ICsJbWVtc2V0KGRzdCwgMCwgR0xPQkFMX01PREVMX1NJWkUpOwo+PiArCWZv ciAocmVmX2ZyYW1lID0gMDsgcmVmX2ZyYW1lIDwgVjRMMl9BVjFfUkVGU19QRVJfRlJBTUU7ICsr cmVmX2ZyYW1lKSB7Cj4+ICsJCXM2NCBhbHBoYSA9IDAsIGJldGEgPSAwLCBnYW1tYSA9IDAsIGRl bHRhID0gMDsKPj4gKwo+PiArCQlmb3IgKGkgPSAwOyBpIDwgNjsgKytpKSB7Cj4+ICsJCQlpZiAo aSA9PSAyKQo+PiArCQkJCSooczMyICopZHN0ID0KPj4gKwkJCQkJZ20tPnBhcmFtc1tWNEwyX0FW MV9SRUZfTEFTVF9GUkFNRSArIHJlZl9mcmFtZV1bM107Cj4+ICsJCQllbHNlIGlmIChpID09IDMp Cj4+ICsJCQkJKihzMzIgKilkc3QgPQo+PiArCQkJCQlnbS0+cGFyYW1zW1Y0TDJfQVYxX1JFRl9M QVNUX0ZSQU1FICsgcmVmX2ZyYW1lXVsyXTsKPj4gKwkJCWVsc2UKPj4gKwkJCQkqKHMzMiAqKWRz dCA9Cj4+ICsJCQkJCWdtLT5wYXJhbXNbVjRMMl9BVjFfUkVGX0xBU1RfRlJBTUUgKyByZWZfZnJh bWVdW2ldOwo+PiArCQkJZHN0ICs9IDQ7Cj4+ICsJCX0KPj4gKwo+PiArCQlpZiAoZ20tPnR5cGVb VjRMMl9BVjFfUkVGX0xBU1RfRlJBTUUgKyByZWZfZnJhbWVdIDw9IFY0TDJfQVYxX1dBUlBfTU9E RUxfQUZGSU5FKQo+PiArCQkJaGFudHJvX2F2MV9nZXRfc2hlYXJfcGFyYW1zKCZnbS0+cGFyYW1z W1Y0TDJfQVYxX1JFRl9MQVNUX0ZSQU1FICsgcmVmX2ZyYW1lXVswXSwKPj4gKwkJCQkJCSAgICAm YWxwaGEsICZiZXRhLCAmZ2FtbWEsICZkZWx0YSk7Cj4+ICsKPj4gKwkJKihzMTYgKilkc3QgPSBh bHBoYTsKPj4gKwkJZHN0ICs9IDI7Cj4+ICsJCSooczE2ICopZHN0ID0gYmV0YTsKPj4gKwkJZHN0 ICs9IDI7Cj4+ICsJCSooczE2ICopZHN0ID0gZ2FtbWE7Cj4+ICsJCWRzdCArPSAyOwo+PiArCQkq KHMxNiAqKWRzdCA9IGRlbHRhOwo+PiArCQlkc3QgKz0gMjsKPj4gKwl9Cj4+ICt9Cj4+ICsKPj4g K2ludCBoYW50cm9fYXYxX3RpbGVfbG9nMihpbnQgdGFyZ2V0KQo+PiArewo+PiArCWludCBrOwo+ PiArCj4+ICsJLyoKPj4gKwkgKiByZXR1cm5zIHRoZSBzbWFsbGVzdCB2YWx1ZSBmb3IgayBzdWNo IHRoYXQgMSA8PCBrIGlzIGdyZWF0ZXIKPj4gKwkgKiB0aGFuIG9yIGVxdWFsIHRvIHRhcmdldAo+ PiArCSAqLwo+PiArCWZvciAoayA9IDA7ICgxIDw8IGspIDwgdGFyZ2V0OyBrKyspCj4+ICsJCTsK Pj4gKwo+PiArCXJldHVybiBrOwo+PiArfQo+PiArCj4+ICtpbnQgaGFudHJvX2F2MV9nZXRfZGlz dChzdHJ1Y3QgaGFudHJvX2N0eCAqY3R4LCBpbnQgYSwgaW50IGIpCj4+ICt7Cj4+ICsJc3RydWN0 IGhhbnRyb19hdjFfZGVjX2h3X2N0eCAqYXYxX2RlYyA9ICZjdHgtPmF2MV9kZWM7Cj4+ICsJc3Ry dWN0IGhhbnRyb19hdjFfZGVjX2N0cmxzICpjdHJscyA9ICZhdjFfZGVjLT5jdHJsczsKPj4gKwlp bnQgYml0cyA9IGN0cmxzLT5zZXF1ZW5jZS0+b3JkZXJfaGludF9iaXRzIC0gMTsKPj4gKwlpbnQg ZGlmZiwgbTsKPj4gKwo+PiArCWlmICghY3RybHMtPnNlcXVlbmNlLT5vcmRlcl9oaW50X2JpdHMp Cj4+ICsJCXJldHVybiAwOwo+PiArCj4+ICsJZGlmZiA9IGEgLSBiOwo+PiArCW0gPSAxIDw8IGJp dHM7Cj4+ICsJZGlmZiA9IChkaWZmICYgKG0gLSAxKSkgLSAoZGlmZiAmIG0pOwo+PiArCj4+ICsJ cmV0dXJuIGRpZmY7Cj4+ICt9Cj4+ICsKPj4gK3ZvaWQgaGFudHJvX2F2MV9zZXRfZnJhbWVfc2ln bl9iaWFzKHN0cnVjdCBoYW50cm9fY3R4ICpjdHgpCj4+ICt7Cj4+ICsJc3RydWN0IGhhbnRyb19h djFfZGVjX2h3X2N0eCAqYXYxX2RlYyA9ICZjdHgtPmF2MV9kZWM7Cj4+ICsJc3RydWN0IGhhbnRy b19hdjFfZGVjX2N0cmxzICpjdHJscyA9ICZhdjFfZGVjLT5jdHJsczsKPj4gKwljb25zdCBzdHJ1 Y3QgdjRsMl9jdHJsX2F2MV9mcmFtZSAqZnJhbWUgPSBjdHJscy0+ZnJhbWU7Cj4+ICsJY29uc3Qg c3RydWN0IHY0bDJfY3RybF9hdjFfc2VxdWVuY2UgKnNlcXVlbmNlID0gY3RybHMtPnNlcXVlbmNl Owo+PiArCWludCBpOwo+PiArCj4+ICsJaWYgKCFzZXF1ZW5jZS0+b3JkZXJfaGludF9iaXRzIHx8 IElTX0lOVFJBKGZyYW1lLT5mcmFtZV90eXBlKSkgewo+PiArCQlmb3IgKGkgPSAwOyBpIDwgVjRM Ml9BVjFfVE9UQUxfUkVGU19QRVJfRlJBTUU7IGkrKykKPj4gKwkJCWF2MV9kZWMtPnJlZl9mcmFt ZV9zaWduX2JpYXNbaV0gPSAwOwo+PiArCj4+ICsJCXJldHVybjsKPj4gKwl9Cj4+ICsJLy8gSWRl bnRpZnkgdGhlIG5lYXJlc3QgZm9yd2FyZCBhbmQgYmFja3dhcmQgcmVmZXJlbmNlcy4KPj4gKwlm b3IgKGkgPSAwOyBpIDwgVjRMMl9BVjFfVE9UQUxfUkVGU19QRVJfRlJBTUUgLSAxOyBpKyspIHsK Pj4gKwkJaWYgKGhhbnRyb19hdjFfZ2V0X2ZyYW1lX2luZGV4KGN0eCwgaSkgPj0gMCkgewo+PiAr CQkJaW50IHJlbF9vZmYgPQo+PiArCQkJICAgIGhhbnRyb19hdjFfZ2V0X2Rpc3QoY3R4LAo+PiAr CQkJCQkJaGFudHJvX2F2MV9nZXRfb3JkZXJfaGludChjdHgsIGkpLAo+PiArCQkJCQkJZnJhbWUt Pm9yZGVyX2hpbnQpOwo+PiArCQkJYXYxX2RlYy0+cmVmX2ZyYW1lX3NpZ25fYmlhc1tpICsgMV0g PSAocmVsX29mZiA8PSAwKSA/IDAgOiAxOwo+PiArCQl9Cj4+ICsJfQo+PiArfQo+PiArCj4+ICt2 b2lkIGhhbnRyb19hdjFfaW5pdF9zY2FsaW5nX2Z1bmN0aW9uKGNvbnN0IHU4ICp2YWx1ZXMsIGNv bnN0IHU4ICpzY2FsaW5nLAo+PiArCQkJCSAgICAgIHU4IG51bV9wb2ludHMsIHU4ICpzY2FsaW5n X2x1dCkKPj4gK3sKPj4gKwlpbnQgaSwgcG9pbnQ7Cj4+ICsKPj4gKwlpZiAobnVtX3BvaW50cyA9 PSAwKSB7Cj4+ICsJCW1lbXNldChzY2FsaW5nX2x1dCwgMCwgMjU2KTsKPj4gKwkJcmV0dXJuOwo+ PiArCX0KPj4gKwo+PiArCWZvciAocG9pbnQgPSAwOyBwb2ludCA8IG51bV9wb2ludHMgLSAxOyBw b2ludCsrKSB7Cj4+ICsJCWludCB4Owo+PiArCQlzMzIgZGVsdGFfeSA9IHNjYWxpbmdbcG9pbnQg KyAxXSAtIHNjYWxpbmdbcG9pbnRdOwo+PiArCQlzMzIgZGVsdGFfeCA9IHZhbHVlc1twb2ludCAr IDFdIC0gdmFsdWVzW3BvaW50XTsKPj4gKwkJczY0IGRlbHRhID0KPj4gKwkJICAgIGRlbHRhX3gg PyBkZWx0YV95ICogKCg2NTUzNiArIChkZWx0YV94ID4+IDEpKSAvCj4+ICsJCQkJCSBkZWx0YV94 KSA6IDA7Cj4+ICsKPj4gKwkJZm9yICh4ID0gMDsgeCA8IGRlbHRhX3g7IHgrKykgewo+PiArCQkJ c2NhbGluZ19sdXRbdmFsdWVzW3BvaW50XSArIHhdID0KPj4gKwkJCSAgICBzY2FsaW5nW3BvaW50 XSArCj4+ICsJCQkgICAgKHMzMikoKHggKiBkZWx0YSArIDMyNzY4KSA+PiAxNik7Cj4+ICsJCX0K Pj4gKwl9Cj4+ICsKPj4gKwlmb3IgKGkgPSB2YWx1ZXNbbnVtX3BvaW50cyAtIDFdOyBpIDwgMjU2 OyBpKyspCj4+ICsJCXNjYWxpbmdfbHV0W2ldID0gc2NhbGluZ1tudW1fcG9pbnRzIC0gMV07Cj4+ ICt9Cj4+ICsKPj4gK3ZvaWQgaGFudHJvX2F2MV9zZXRfdGlsZV9pbmZvKHN0cnVjdCBoYW50cm9f Y3R4ICpjdHgpCj4+ICt7Cj4+ICsJc3RydWN0IGhhbnRyb19hdjFfZGVjX2h3X2N0eCAqYXYxX2Rl YyA9ICZjdHgtPmF2MV9kZWM7Cj4+ICsJc3RydWN0IGhhbnRyb19hdjFfZGVjX2N0cmxzICpjdHJs cyA9ICZhdjFfZGVjLT5jdHJsczsKPj4gKwljb25zdCBzdHJ1Y3QgdjRsMl9hdjFfdGlsZV9pbmZv ICp0aWxlX2luZm8gPSAmY3RybHMtPmZyYW1lLT50aWxlX2luZm87Cj4+ICsJY29uc3Qgc3RydWN0 IHY0bDJfY3RybF9hdjFfdGlsZV9ncm91cF9lbnRyeSAqZ3JvdXBfZW50cnkgPQo+PiArCSAgICBj dHJscy0+dGlsZV9ncm91cF9lbnRyeTsKPj4gKwl1OCAqZHN0ID0gYXYxX2RlYy0+dGlsZV9pbmZv LmNwdTsKPj4gKwlpbnQgdGlsZTAsIHRpbGUxOwo+PiArCj4+ICsJbWVtc2V0KGRzdCwgMCwgYXYx X2RlYy0+dGlsZV9pbmZvLnNpemUpOwo+PiArCj4+ICsJZm9yICh0aWxlMCA9IDA7IHRpbGUwIDwg dGlsZV9pbmZvLT50aWxlX2NvbHM7IHRpbGUwKyspIHsKPj4gKwkJZm9yICh0aWxlMSA9IDA7IHRp bGUxIDwgdGlsZV9pbmZvLT50aWxlX3Jvd3M7IHRpbGUxKyspIHsKPj4gKwkJCWludCB0aWxlX2lk ID0gdGlsZTEgKiB0aWxlX2luZm8tPnRpbGVfY29scyArIHRpbGUwOwo+PiArCQkJdTMyIHN0YXJ0 LCBlbmQ7Cj4+ICsJCQl1MzIgeTAgPQo+PiArCQkJICAgIHRpbGVfaW5mby0+aGVpZ2h0X2luX3Ni c19taW51c18xW3RpbGUxXSArIDE7Cj4+ICsJCQl1MzIgeDAgPSB0aWxlX2luZm8tPndpZHRoX2lu X3Nic19taW51c18xW3RpbGUwXSArIDE7Cj4+ICsKPj4gKwkJCS8qIHRpbGUgc2l6ZSBpbiBTQiB1 bml0cyAod2lkdGgsaGVpZ2h0KSAqLwo+PiArCQkJKmRzdCsrID0geDA7Cj4+ICsJCQkqZHN0Kysg PSAwOwo+PiArCQkJKmRzdCsrID0gMDsKPj4gKwkJCSpkc3QrKyA9IDA7Cj4+ICsJCQkqZHN0Kysg PSB5MDsKPj4gKwkJCSpkc3QrKyA9IDA7Cj4+ICsJCQkqZHN0KysgPSAwOwo+PiArCQkJKmRzdCsr ID0gMDsKPj4gKwo+PiArCQkJLyogdGlsZSBzdGFydCBwb3NpdGlvbiAqLwo+PiArCQkJc3RhcnQg PSBncm91cF9lbnRyeVt0aWxlX2lkXS50aWxlX29mZnNldCAtIGdyb3VwX2VudHJ5WzBdLnRpbGVf b2Zmc2V0Owo+PiArCQkJKmRzdCsrID0gc3RhcnQgJiAyNTU7Cj4+ICsJCQkqZHN0KysgPSAoc3Rh cnQgPj4gOCkgJiAyNTU7Cj4+ICsJCQkqZHN0KysgPSAoc3RhcnQgPj4gMTYpICYgMjU1Owo+PiAr CQkJKmRzdCsrID0gKHN0YXJ0ID4+IDI0KSAmIDI1NTsKPj4gKwo+PiArCQkJLyogbnVtYmVyIG9m IGJ5dGVzIGluIHRpbGUgZGF0YSAqLwo+PiArCQkJZW5kID0gc3RhcnQgKyBncm91cF9lbnRyeVt0 aWxlX2lkXS50aWxlX3NpemU7Cj4+ICsJCQkqZHN0KysgPSBlbmQgJiAyNTU7Cj4+ICsJCQkqZHN0 KysgPSAoZW5kID4+IDgpICYgMjU1Owo+PiArCQkJKmRzdCsrID0gKGVuZCA+PiAxNikgJiAyNTU7 Cj4+ICsJCQkqZHN0KysgPSAoZW5kID4+IDI0KSAmIDI1NTsKPj4gKwkJfQo+PiArCX0KPj4gK30K Pj4gKwo+PiArYm9vbCBoYW50cm9fYXYxX2lzX2xvc3NsZXNzKHN0cnVjdCBoYW50cm9fY3R4ICpj dHgpCj4+ICt7Cj4+ICsJc3RydWN0IGhhbnRyb19hdjFfZGVjX2h3X2N0eCAqYXYxX2RlYyA9ICZj dHgtPmF2MV9kZWM7Cj4+ICsJc3RydWN0IGhhbnRyb19hdjFfZGVjX2N0cmxzICpjdHJscyA9ICZh djFfZGVjLT5jdHJsczsKPj4gKwljb25zdCBzdHJ1Y3QgdjRsMl9jdHJsX2F2MV9mcmFtZSAqZnJh bWUgPSBjdHJscy0+ZnJhbWU7Cj4+ICsJY29uc3Qgc3RydWN0IHY0bDJfYXYxX3NlZ21lbnRhdGlv biAqc2VnbWVudGF0aW9uID0gJmZyYW1lLT5zZWdtZW50YXRpb247Cj4+ICsJY29uc3Qgc3RydWN0 IHY0bDJfYXYxX3F1YW50aXphdGlvbiAqcXVhbnRpemF0aW9uID0gJmZyYW1lLT5xdWFudGl6YXRp b247Cj4+ICsJaW50IGk7Cj4+ICsKPj4gKwlmb3IgKGkgPSAwOyBpIDwgVjRMMl9BVjFfTUFYX1NF R01FTlRTOyBpKyspIHsKPj4gKwkJaW50IHFpbmRleCA9IHF1YW50aXphdGlvbi0+YmFzZV9xX2lk eDsKPj4gKwo+PiArCQlpZiAoc2VnbWVudGF0aW9uLT5mZWF0dXJlX2VuYWJsZWRbaV0gJgo+PiAr CQkgICAgVjRMMl9BVjFfU0VHTUVOVF9GRUFUVVJFX0VOQUJMRUQoVjRMMl9BVjFfU0VHX0xWTF9B TFRfUSkpIHsKPj4gKwkJCXFpbmRleCArPSBzZWdtZW50YXRpb24tPmZlYXR1cmVfZGF0YVtpXVtW NEwyX0FWMV9TRUdfTFZMX0FMVF9RXTsKPj4gKwkJfQo+PiArCQlxaW5kZXggPSBjbGFtcChxaW5k ZXgsIDAsIDI1NSk7Cj4+ICsKPj4gKwkJaWYgKHFpbmRleCB8fAo+PiArCQkgICAgcXVhbnRpemF0 aW9uLT5kZWx0YV9xX3lfZGMgfHwKPj4gKwkJICAgIHF1YW50aXphdGlvbi0+ZGVsdGFfcV91X2Rj IHx8Cj4+ICsJCSAgICBxdWFudGl6YXRpb24tPmRlbHRhX3FfdV9hYyB8fAo+PiArCQkgICAgcXVh bnRpemF0aW9uLT5kZWx0YV9xX3ZfZGMgfHwKPj4gKwkJICAgIHF1YW50aXphdGlvbi0+ZGVsdGFf cV92X2FjKQo+PiArCQkJcmV0dXJuIGZhbHNlOwo+PiArCX0KPj4gKwo+PiArCXJldHVybiB0cnVl Owo+PiArfQo+PiArCj4+ICt2b2lkIGhhbnRyb19hdjFfdXBkYXRlX3Byb2Ioc3RydWN0IGhhbnRy b19jdHggKmN0eCkKPj4gK3sKPj4gKwlzdHJ1Y3QgaGFudHJvX2F2MV9kZWNfaHdfY3R4ICphdjFf ZGVjID0gJmN0eC0+YXYxX2RlYzsKPj4gKwlzdHJ1Y3QgaGFudHJvX2F2MV9kZWNfY3RybHMgKmN0 cmxzID0gJmF2MV9kZWMtPmN0cmxzOwo+PiArCWNvbnN0IHN0cnVjdCB2NGwyX2N0cmxfYXYxX2Zy YW1lICpmcmFtZSA9IGN0cmxzLT5mcmFtZTsKPj4gKwlib29sIGZyYW1lX2lzX2ludHJhID0gSVNf SU5UUkEoZnJhbWUtPmZyYW1lX3R5cGUpOwo+PiArCXN0cnVjdCBhdjFjZGZzICpvdXRfY2RmcyA9 IChzdHJ1Y3QgYXYxY2RmcyAqKWF2MV9kZWMtPnByb2JfdGJsX291dC5jcHU7Cj4+ICsJaW50IGk7 Cj4+ICsKPj4gKwlpZiAoZnJhbWUtPmZsYWdzICYgVjRMMl9BVjFfRlJBTUVfRkxBR19ESVNBQkxF X0ZSQU1FX0VORF9VUERBVEVfQ0RGKQo+PiArCQlyZXR1cm47Cj4+ICsKPj4gKwlmb3IgKGkgPSAw OyBpIDwgTlVNX1JFRl9GUkFNRVM7IGkrKykgewo+PiArCQlpZiAoZnJhbWUtPnJlZnJlc2hfZnJh bWVfZmxhZ3MgJiBCSVQoaSkpIHsKPj4gKwkJCXN0cnVjdCBtdmNkZnMgc3RvcmVkX212X2NkZjsK Pj4gKwo+PiArCQkJaGFudHJvX2F2MV9nZXRfY2RmcyhjdHgsIGkpOwo+PiArCQkJc3RvcmVkX212 X2NkZiA9IGF2MV9kZWMtPmNkZnMtPm12X2NkZjsKPj4gKwkJCSphdjFfZGVjLT5jZGZzID0gKm91 dF9jZGZzOwo+PiArCQkJaWYgKGZyYW1lX2lzX2ludHJhKSB7Cj4+ICsJCQkJYXYxX2RlYy0+Y2Rm cy0+bXZfY2RmID0gc3RvcmVkX212X2NkZjsKPj4gKwkJCQkqYXYxX2RlYy0+Y2Rmc19uZHZjID0g b3V0X2NkZnMtPm12X2NkZjsKPj4gKwkJCX0KPj4gKwkJCWhhbnRyb19hdjFfc3RvcmVfY2Rmcyhj dHgsIGZyYW1lLT5yZWZyZXNoX2ZyYW1lX2ZsYWdzKTsKPj4gKwkJCWJyZWFrOwo+PiArCQl9Cj4+ ICsJfQo+PiArfQo+PiArCj4+ICt2b2lkIGhhbnRyb19hdjFfc2V0X3Byb2Ioc3RydWN0IGhhbnRy b19jdHggKmN0eCkKPj4gK3sKPj4gKwlzdHJ1Y3QgaGFudHJvX2F2MV9kZWNfaHdfY3R4ICphdjFf ZGVjID0gJmN0eC0+YXYxX2RlYzsKPj4gKwlzdHJ1Y3QgaGFudHJvX2F2MV9kZWNfY3RybHMgKmN0 cmxzID0gJmF2MV9kZWMtPmN0cmxzOwo+PiArCWNvbnN0IHN0cnVjdCB2NGwyX2N0cmxfYXYxX2Zy YW1lICpmcmFtZSA9IGN0cmxzLT5mcmFtZTsKPj4gKwljb25zdCBzdHJ1Y3QgdjRsMl9hdjFfcXVh bnRpemF0aW9uICpxdWFudGl6YXRpb24gPSAmZnJhbWUtPnF1YW50aXphdGlvbjsKPj4gKwlib29s IGVycm9yX3Jlc2lsaWVudF9tb2RlID0KPj4gKwkgICAgISEoZnJhbWUtPmZsYWdzICYgVjRMMl9B VjFfRlJBTUVfRkxBR19FUlJPUl9SRVNJTElFTlRfTU9ERSk7Cj4+ICsJYm9vbCBmcmFtZV9pc19p bnRyYSA9IElTX0lOVFJBKGZyYW1lLT5mcmFtZV90eXBlKTsKPj4gKwo+PiArCWlmIChlcnJvcl9y ZXNpbGllbnRfbW9kZSB8fCBmcmFtZV9pc19pbnRyYSB8fAo+PiArCSAgICBmcmFtZS0+cHJpbWFy eV9yZWZfZnJhbWUgPT0gQVYxX1BSSU1BUllfUkVGX05PTkUpIHsKPj4gKwkJYXYxX2RlYy0+Y2Rm cyA9ICZhdjFfZGVjLT5kZWZhdWx0X2NkZnM7Cj4+ICsJCWF2MV9kZWMtPmNkZnNfbmR2YyA9ICZh djFfZGVjLT5kZWZhdWx0X2NkZnNfbmR2YzsKPj4gKwkJaGFudHJvX2F2MV9kZWZhdWx0X2NvZWZm X3Byb2JzKHF1YW50aXphdGlvbi0+YmFzZV9xX2lkeCwKPj4gKwkJCQkJICAgICAgIGF2MV9kZWMt PmNkZnMpOwo+PiArCX0gZWxzZSB7Cj4+ICsJCWhhbnRyb19hdjFfZ2V0X2NkZnMoY3R4LCBmcmFt ZS0+cmVmX2ZyYW1lX2lkeFtmcmFtZS0+cHJpbWFyeV9yZWZfZnJhbWVdKTsKPiBUaGVyZSBpcyBu byBzYW5pdHkgY2hlY2sgZm9yIGZyYW1lLT5wcmltYXJ5X3JlZl9mcmFtZSB0byBwcmV2ZW50IG91 dCBvZiBib3VuZHMKPiBhcnJheSBhY2Nlc3MuIEJ1dCBwZXJoYXBzIHRoaXMgaGFzIHRvIGJlIGNo ZWNrZWQgZWxzZXdoZXJlPwo+Cj4+ICsJfQo+PiArCWhhbnRyb19hdjFfc3RvcmVfY2RmcyhjdHgs IGZyYW1lLT5yZWZyZXNoX2ZyYW1lX2ZsYWdzKTsKPj4gKwo+PiArCW1lbWNweShhdjFfZGVjLT5w cm9iX3RibC5jcHUsIGF2MV9kZWMtPmNkZnMsIHNpemVvZihzdHJ1Y3QgYXYxY2RmcykpOwo+PiAr Cj4+ICsJaWYgKGZyYW1lX2lzX2ludHJhKSB7Cj4+ICsJCWludCBtdl9vZmZzZXQgPSBvZmZzZXRv ZihzdHJ1Y3QgYXYxY2RmcywgbXZfY2RmKTsKPj4gKwkJLyogT3ZlcndyaXRlIE1WIGNvbnRleHQg YXJlYSB3aXRoIGludHJhYmMgTVYgY29udGV4dCAqLwo+PiArCQltZW1jcHkoYXYxX2RlYy0+cHJv Yl90YmwuY3B1ICsgbXZfb2Zmc2V0LCBhdjFfZGVjLT5jZGZzX25kdmMsCj4+ICsJCSAgICAgICBz aXplb2Yoc3RydWN0IG12Y2RmcykpOwo+PiArCX0KPj4gK30KPiA8c25pcD4KPgo+PiBkaWZmIC0t Z2l0IGEvZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS92ZXJpc2lsaWNvbi9yb2NrY2hpcF92cHU5ODFf aHdfYXYxX2RlYy5jIGIvZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS92ZXJpc2lsaWNvbi9yb2NrY2hp cF92cHU5ODFfaHdfYXYxX2RlYy5jCj4+IGluZGV4IGU0ZTIxYWQzNzMyMy4uNWJmMWYyNjg5ZmJj IDEwMDY0NAo+PiAtLS0gYS9kcml2ZXJzL21lZGlhL3BsYXRmb3JtL3ZlcmlzaWxpY29uL3JvY2tj aGlwX3ZwdTk4MV9od19hdjFfZGVjLmMKPj4gKysrIGIvZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS92 ZXJpc2lsaWNvbi9yb2NrY2hpcF92cHU5ODFfaHdfYXYxX2RlYy5jCj4+IEBAIC03LDYyMiArNywz NSBAQAo+IDxzbmlwPgo+Cj4+ICAgc3RhdGljIHZvaWQgcm9ja2NoaXBfdnB1OTgxX2F2MV9kZWNf c2V0X2NkZWYoc3RydWN0IGhhbnRyb19jdHggKmN0eCkKPj4gQEAgLTE2MTcsMTIgKzg0NiwxMiBA QCBzdGF0aWMgdm9pZCByb2NrY2hpcF92cHU5ODFfYXYxX2RlY19zZXRfb3RoZXJfZnJhbWVzKHN0 cnVjdCBoYW50cm9fY3R4ICpjdHgpCj4+ICAgCWludCByZWZfaW5kID0gMDsKPj4gICAJaW50IHJm LCBpZHg7Cj4+ICAgCj4+IC0JYWx0X2ZyYW1lX29mZnNldCA9IHJvY2tjaGlwX3ZwdTk4MV9nZXRf b3JkZXJfaGludChjdHgsIEFMVF9CVUZfSURYKTsKPj4gLQlnbGRfZnJhbWVfb2Zmc2V0ID0gcm9j a2NoaXBfdnB1OTgxX2dldF9vcmRlcl9oaW50KGN0eCwgR0xEX0JVRl9JRFgpOwo+PiAtCWJ3ZF9m cmFtZV9vZmZzZXQgPSByb2NrY2hpcF92cHU5ODFfZ2V0X29yZGVyX2hpbnQoY3R4LCBCV0RfQlVG X0lEWCk7Cj4+IC0JYWx0Ml9mcmFtZV9vZmZzZXQgPSByb2NrY2hpcF92cHU5ODFfZ2V0X29yZGVy X2hpbnQoY3R4LCBBTFQyX0JVRl9JRFgpOwo+PiArCWFsdF9mcmFtZV9vZmZzZXQgPSBoYW50cm9f YXYxX2dldF9vcmRlcl9oaW50KGN0eCwgQUxUX0JVRl9JRFgpOwo+PiArCWdsZF9mcmFtZV9vZmZz ZXQgPSBoYW50cm9fYXYxX2dldF9vcmRlcl9oaW50KGN0eCwgR0xEX0JVRl9JRFgpOwo+PiArCWJ3 ZF9mcmFtZV9vZmZzZXQgPSBoYW50cm9fYXYxX2dldF9vcmRlcl9oaW50KGN0eCwgQldEX0JVRl9J RFgpOwo+PiArCWFsdDJfZnJhbWVfb2Zmc2V0ID0gaGFudHJvX2F2MV9nZXRfb3JkZXJfaGludChj dHgsIEFMVDJfQlVGX0lEWCk7Cj4+ICAgCj4+IC0JaWR4ID0gcm9ja2NoaXBfdnB1OTgxX2dldF9m cmFtZV9pbmRleChjdHgsIExTVF9CVUZfSURYKTsKPj4gKwlpZHggPSBoYW50cm9fYXYxX2dldF9m cmFtZV9pbmRleChjdHgsIExTVF9CVUZfSURYKTsKPj4gICAJaWYgKGlkeCA+PSAwKSB7Cj4+ICAg CQlpbnQgYWx0X2ZyYW1lX29mZnNldF9pbl9sc3QgPQo+PiAgIAkJCWF2MV9kZWMtPmZyYW1lX3Jl ZnNbaWR4XS5vcmRlcl9oaW50c1tWNEwyX0FWMV9SRUZfQUxUUkVGX0ZSQU1FXTsKPj4gQEAgLTE2 NDQsOCArODczLDggQEAgc3RhdGljIHZvaWQgcm9ja2NoaXBfdnB1OTgxX2F2MV9kZWNfc2V0X290 aGVyX2ZyYW1lcyhzdHJ1Y3QgaGFudHJvX2N0eCAqY3R4KQo+PiAgIAkJcmVmX3N0YW1wLS07Cj4+ ICAgCX0KPj4gICAKPj4gLQlpZHggPSByb2NrY2hpcF92cHU5ODFfZ2V0X2ZyYW1lX2luZGV4KGN0 eCwgQldEX0JVRl9JRFgpOwo+PiAtCWlmIChyb2NrY2hpcF92cHU5ODFfYXYxX2RlY19nZXRfZGlz dChjdHgsIGJ3ZF9mcmFtZV9vZmZzZXQsIGN1cl9mcmFtZV9vZmZzZXQpID4gMCkgewo+PiArCWlk eCA9IGhhbnRyb19hdjFfZ2V0X2ZyYW1lX2luZGV4KGN0eCwgQldEX0JVRl9JRFgpOwo+IENhbiBp ZHggYmUgQVYxX0lOVkFMSURfSURYPyBJdCdzIGNoZWNrZWQgZm9yIExTVF9CVUZfSURYLCBidXQg bm90IGZvciBCV0RfQlVGX0lEWCBhbmQgb3RoZXJzIGJlbG93Lgo+Cj4+ICsJaWYgKGhhbnRyb19h djFfZ2V0X2Rpc3QoY3R4LCBid2RfZnJhbWVfb2Zmc2V0LCBjdXJfZnJhbWVfb2Zmc2V0KSA+IDAp IHsKPj4gICAJCWludCBid2RfbWlfY29scyA9IGF2MV9kZWMtPmZyYW1lX3JlZnNbaWR4XS5taV9j b2xzOwo+PiAgIAkJaW50IGJ3ZF9taV9yb3dzID0gYXYxX2RlYy0+ZnJhbWVfcmVmc1tpZHhdLm1p X3Jvd3M7Cj4+ICAgCQlib29sIGJ3ZF9pbnRyYV9vbmx5ID0KPj4gQEAgLTE2NTksOCArODg4LDgg QEAgc3RhdGljIHZvaWQgcm9ja2NoaXBfdnB1OTgxX2F2MV9kZWNfc2V0X290aGVyX2ZyYW1lcyhz dHJ1Y3QgaGFudHJvX2N0eCAqY3R4KQo+PiAgIAkJfQo+PiAgIAl9Cj4+ICAgCj4+IC0JaWR4ID0g cm9ja2NoaXBfdnB1OTgxX2dldF9mcmFtZV9pbmRleChjdHgsIEFMVDJfQlVGX0lEWCk7Cj4+IC0J aWYgKHJvY2tjaGlwX3ZwdTk4MV9hdjFfZGVjX2dldF9kaXN0KGN0eCwgYWx0Ml9mcmFtZV9vZmZz ZXQsIGN1cl9mcmFtZV9vZmZzZXQpID4gMCkgewo+PiArCWlkeCA9IGhhbnRyb19hdjFfZ2V0X2Zy YW1lX2luZGV4KGN0eCwgQUxUMl9CVUZfSURYKTsKPj4gKwlpZiAoaGFudHJvX2F2MV9nZXRfZGlz dChjdHgsIGFsdDJfZnJhbWVfb2Zmc2V0LCBjdXJfZnJhbWVfb2Zmc2V0KSA+IDApIHsKPj4gICAJ CWludCBhbHQyX21pX2NvbHMgPSBhdjFfZGVjLT5mcmFtZV9yZWZzW2lkeF0ubWlfY29sczsKPj4g ICAJCWludCBhbHQyX21pX3Jvd3MgPSBhdjFfZGVjLT5mcmFtZV9yZWZzW2lkeF0ubWlfcm93czsK Pj4gICAJCWJvb2wgYWx0Ml9pbnRyYV9vbmx5ID0KPj4gQEAgLTE2NzQsOCArOTAzLDggQEAgc3Rh dGljIHZvaWQgcm9ja2NoaXBfdnB1OTgxX2F2MV9kZWNfc2V0X290aGVyX2ZyYW1lcyhzdHJ1Y3Qg aGFudHJvX2N0eCAqY3R4KQo+PiAgIAkJfQo+PiAgIAl9Cj4+ICAgCj4+IC0JaWR4ID0gcm9ja2No aXBfdnB1OTgxX2dldF9mcmFtZV9pbmRleChjdHgsIEFMVF9CVUZfSURYKTsKPj4gLQlpZiAocm9j a2NoaXBfdnB1OTgxX2F2MV9kZWNfZ2V0X2Rpc3QoY3R4LCBhbHRfZnJhbWVfb2Zmc2V0LCBjdXJf ZnJhbWVfb2Zmc2V0KSA+IDAgJiYKPj4gKwlpZHggPSBoYW50cm9fYXYxX2dldF9mcmFtZV9pbmRl eChjdHgsIEFMVF9CVUZfSURYKTsKPj4gKwlpZiAoaGFudHJvX2F2MV9nZXRfZGlzdChjdHgsIGFs dF9mcmFtZV9vZmZzZXQsIGN1cl9mcmFtZV9vZmZzZXQpID4gMCAmJgo+PiAgIAkgICAgcmVmX3N0 YW1wID49IDApIHsKPj4gICAJCWludCBhbHRfbWlfY29scyA9IGF2MV9kZWMtPmZyYW1lX3JlZnNb aWR4XS5taV9jb2xzOwo+PiAgIAkJaW50IGFsdF9taV9yb3dzID0gYXYxX2RlYy0+ZnJhbWVfcmVm c1tpZHhdLm1pX3Jvd3M7Cj4+IEBAIC0xNjkwLDcgKzkxOSw3IEBAIHN0YXRpYyB2b2lkIHJvY2tj aGlwX3ZwdTk4MV9hdjFfZGVjX3NldF9vdGhlcl9mcmFtZXMoc3RydWN0IGhhbnRyb19jdHggKmN0 eCkKPj4gICAJCX0KPj4gICAJfQo+PiAgIAo+PiAtCWlkeCA9IHJvY2tjaGlwX3ZwdTk4MV9nZXRf ZnJhbWVfaW5kZXgoY3R4LCBMU1QyX0JVRl9JRFgpOwo+PiArCWlkeCA9IGhhbnRyb19hdjFfZ2V0 X2ZyYW1lX2luZGV4KGN0eCwgTFNUMl9CVUZfSURYKTsKPj4gICAJaWYgKGlkeCA+PSAwICYmIHJl Zl9zdGFtcCA+PSAwKSB7Cj4+ICAgCQlpbnQgbHN0Ml9taV9jb2xzID0gYXYxX2RlYy0+ZnJhbWVf cmVmc1tpZHhdLm1pX2NvbHM7Cj4+ICAgCQlpbnQgbHN0Ml9taV9yb3dzID0gYXYxX2RlYy0+ZnJh bWVfcmVmc1tpZHhdLm1pX3Jvd3M7Cj4+IEBAIC0xNzA2LDE0ICs5MzUsMTQgQEAgc3RhdGljIHZv aWQgcm9ja2NoaXBfdnB1OTgxX2F2MV9kZWNfc2V0X290aGVyX2ZyYW1lcyhzdHJ1Y3QgaGFudHJv X2N0eCAqY3R4KQo+PiAgIAl9Cj4+ICAgCj4+ICAgCWZvciAocmYgPSAwOyByZiA8IFY0TDJfQVYx X1RPVEFMX1JFRlNfUEVSX0ZSQU1FIC0gMTsgKytyZikgewo+PiAtCQlpZHggPSByb2NrY2hpcF92 cHU5ODFfZ2V0X2ZyYW1lX2luZGV4KGN0eCwgcmYpOwo+PiArCQlpZHggPSBoYW50cm9fYXYxX2dl dF9mcmFtZV9pbmRleChjdHgsIHJmKTsKPj4gICAJCWlmIChpZHggPj0gMCkgewo+PiAtCQkJaW50 IHJmX29yZGVyX2hpbnQgPSByb2NrY2hpcF92cHU5ODFfZ2V0X29yZGVyX2hpbnQoY3R4LCByZik7 Cj4+ICsJCQlpbnQgcmZfb3JkZXJfaGludCA9IGhhbnRyb19hdjFfZ2V0X29yZGVyX2hpbnQoY3R4 LCByZik7Cj4+ICAgCj4+ICAgCQkJY3VyX29mZnNldFtyZl0gPQo+PiAtCQkJICAgIHJvY2tjaGlw X3ZwdTk4MV9hdjFfZGVjX2dldF9kaXN0KGN0eCwgY3VyX2ZyYW1lX29mZnNldCwgcmZfb3JkZXJf aGludCk7Cj4+ICsJCQkgICAgaGFudHJvX2F2MV9nZXRfZGlzdChjdHgsIGN1cl9mcmFtZV9vZmZz ZXQsIHJmX29yZGVyX2hpbnQpOwo+PiAgIAkJCWN1cl9yb2Zmc2V0W3JmXSA9Cj4+IC0JCQkgICAg cm9ja2NoaXBfdnB1OTgxX2F2MV9kZWNfZ2V0X2Rpc3QoY3R4LCByZl9vcmRlcl9oaW50LCBjdXJf ZnJhbWVfb2Zmc2V0KTsKPj4gKwkJCSAgICBoYW50cm9fYXYxX2dldF9kaXN0KGN0eCwgcmZfb3Jk ZXJfaGludCwgY3VyX2ZyYW1lX29mZnNldCk7Cj4+ICAgCQl9IGVsc2Ugewo+PiAgIAkJCWN1cl9v ZmZzZXRbcmZdID0gMDsKPj4gICAJCQljdXJfcm9mZnNldFtyZl0gPSAwOwo+PiBAQCAtMTczNiwz MiArOTY1LDMyIEBAIHN0YXRpYyB2b2lkIHJvY2tjaGlwX3ZwdTk4MV9hdjFfZGVjX3NldF9vdGhl cl9mcmFtZXMoc3RydWN0IGhhbnRyb19jdHggKmN0eCkKPj4gICAJaWYgKHVzZV9yZWZfZnJhbWVf bXZzICYmIHJlZl9pbmQgPiAwICYmCj4+ICAgCSAgICBjdXJfb2Zmc2V0W21mX3R5cGVzWzBdIC0g VjRMMl9BVjFfUkVGX0xBU1RfRlJBTUVdIDw9IE1BWF9GUkFNRV9ESVNUQU5DRSAmJgo+PiAgIAkg ICAgY3VyX29mZnNldFttZl90eXBlc1swXSAtIFY0TDJfQVYxX1JFRl9MQVNUX0ZSQU1FXSA+PSAt TUFYX0ZSQU1FX0RJU1RBTkNFKSB7Cj4+IC0JCWludCByZiA9IHJvY2tjaGlwX3ZwdTk4MV9nZXRf b3JkZXJfaGludChjdHgsIHJlZnNfc2VsZWN0ZWRbMF0pOwo+PiAtCQlpbnQgaWR4ID0gcm9ja2No aXBfdnB1OTgxX2dldF9mcmFtZV9pbmRleChjdHgsIHJlZnNfc2VsZWN0ZWRbMF0pOwo+PiArCQlp bnQgcmYgPSBoYW50cm9fYXYxX2dldF9vcmRlcl9oaW50KGN0eCwgcmVmc19zZWxlY3RlZFswXSk7 Cj4+ICsJCWludCBpZHggPSBoYW50cm9fYXYxX2dldF9mcmFtZV9pbmRleChjdHgsIHJlZnNfc2Vs ZWN0ZWRbMF0pOwo+IFRoZXJlIGlzIG5vIEFWMV9JTlZBTElEX0lEWCBjaGVjayBoZXJlIGVpdGhl ci4KPgo+IEkgdGhpbmsgaXQgbWlnaHQgYmUgaGVscGZ1bCBpZiB0aGVyZSBpcyBhIGNvbW1lbnQg aW4gdGhlIGNhc2VzIHdoZXJlIGlkeCBpcyBhbHdheXMKPiB2YWxpZC4gSSBkb24ndCBrbm93IGVu b3VnaCBhYm91dCB0aGlzIHRvIGJlIGFibGUgdG8gdGVsbCBpZiBpdCBpcyBhIHBvdGVudGlhbAo+ IG91dC1vZi1ib3VuZHMgYWNjZXNzIG9yIG5vdC4KPgo+PiAgIAkJdTMyICpvaCA9IGF2MV9kZWMt PmZyYW1lX3JlZnNbaWR4XS5vcmRlcl9oaW50czsKPj4gICAJCWludCB2YWw7Cj4+ICAgCj4+ICAg CQloYW50cm9fcmVnX3dyaXRlKHZwdSwgJmF2MV91c2VfdGVtcG9yYWwwX212cywgMSk7Cj4+ICAg Cj4+IC0JCXZhbCA9IHJvY2tjaGlwX3ZwdTk4MV9hdjFfZGVjX2dldF9kaXN0KGN0eCwgcmYsIG9o W1Y0TDJfQVYxX1JFRl9MQVNUX0ZSQU1FXSk7Cj4+ICsJCXZhbCA9IGhhbnRyb19hdjFfZ2V0X2Rp c3QoY3R4LCByZiwgb2hbVjRMMl9BVjFfUkVGX0xBU1RfRlJBTUVdKTsKPj4gICAJCWhhbnRyb19y ZWdfd3JpdGUodnB1LCAmYXYxX21mMV9sYXN0X29mZnNldCwgdmFsKTsKPj4gICAKPj4gLQkJdmFs ID0gcm9ja2NoaXBfdnB1OTgxX2F2MV9kZWNfZ2V0X2Rpc3QoY3R4LCByZiwgb2hbVjRMMl9BVjFf UkVGX0xBU1QyX0ZSQU1FXSk7Cj4+ICsJCXZhbCA9IGhhbnRyb19hdjFfZ2V0X2Rpc3QoY3R4LCBy Ziwgb2hbVjRMMl9BVjFfUkVGX0xBU1QyX0ZSQU1FXSk7Cj4+ICAgCQloYW50cm9fcmVnX3dyaXRl KHZwdSwgJmF2MV9tZjFfbGFzdDJfb2Zmc2V0LCB2YWwpOwo+PiAgIAo+PiAtCQl2YWwgPSByb2Nr Y2hpcF92cHU5ODFfYXYxX2RlY19nZXRfZGlzdChjdHgsIHJmLCBvaFtWNEwyX0FWMV9SRUZfTEFT VDNfRlJBTUVdKTsKPj4gKwkJdmFsID0gaGFudHJvX2F2MV9nZXRfZGlzdChjdHgsIHJmLCBvaFtW NEwyX0FWMV9SRUZfTEFTVDNfRlJBTUVdKTsKPj4gICAJCWhhbnRyb19yZWdfd3JpdGUodnB1LCAm YXYxX21mMV9sYXN0M19vZmZzZXQsIHZhbCk7Cj4+ICAgCj4+IC0JCXZhbCA9IHJvY2tjaGlwX3Zw dTk4MV9hdjFfZGVjX2dldF9kaXN0KGN0eCwgcmYsIG9oW1Y0TDJfQVYxX1JFRl9HT0xERU5fRlJB TUVdKTsKPj4gKwkJdmFsID0gaGFudHJvX2F2MV9nZXRfZGlzdChjdHgsIHJmLCBvaFtWNEwyX0FW MV9SRUZfR09MREVOX0ZSQU1FXSk7Cj4+ICAgCQloYW50cm9fcmVnX3dyaXRlKHZwdSwgJmF2MV9t ZjFfZ29sZGVuX29mZnNldCwgdmFsKTsKPj4gICAKPj4gLQkJdmFsID0gcm9ja2NoaXBfdnB1OTgx X2F2MV9kZWNfZ2V0X2Rpc3QoY3R4LCByZiwgb2hbVjRMMl9BVjFfUkVGX0JXRFJFRl9GUkFNRV0p Owo+PiArCQl2YWwgPSBoYW50cm9fYXYxX2dldF9kaXN0KGN0eCwgcmYsIG9oW1Y0TDJfQVYxX1JF Rl9CV0RSRUZfRlJBTUVdKTsKPj4gICAJCWhhbnRyb19yZWdfd3JpdGUodnB1LCAmYXYxX21mMV9i d2RyZWZfb2Zmc2V0LCB2YWwpOwo+PiAgIAo+PiAtCQl2YWwgPSByb2NrY2hpcF92cHU5ODFfYXYx X2RlY19nZXRfZGlzdChjdHgsIHJmLCBvaFtWNEwyX0FWMV9SRUZfQUxUUkVGMl9GUkFNRV0pOwo+ PiArCQl2YWwgPSBoYW50cm9fYXYxX2dldF9kaXN0KGN0eCwgcmYsIG9oW1Y0TDJfQVYxX1JFRl9B TFRSRUYyX0ZSQU1FXSk7Cj4+ICAgCQloYW50cm9fcmVnX3dyaXRlKHZwdSwgJmF2MV9tZjFfYWx0 cmVmMl9vZmZzZXQsIHZhbCk7Cj4+ICAgCj4+IC0JCXZhbCA9IHJvY2tjaGlwX3ZwdTk4MV9hdjFf ZGVjX2dldF9kaXN0KGN0eCwgcmYsIG9oW1Y0TDJfQVYxX1JFRl9BTFRSRUZfRlJBTUVdKTsKPj4g KwkJdmFsID0gaGFudHJvX2F2MV9nZXRfZGlzdChjdHgsIHJmLCBvaFtWNEwyX0FWMV9SRUZfQUxU UkVGX0ZSQU1FXSk7Cj4+ICAgCQloYW50cm9fcmVnX3dyaXRlKHZwdSwgJmF2MV9tZjFfYWx0cmVm X29mZnNldCwgdmFsKTsKPj4gICAJfQo+PiAgIAo+PiBAQCAtMTc3NiwzMiArMTAwNSwzMiBAQCBz dGF0aWMgdm9pZCByb2NrY2hpcF92cHU5ODFfYXYxX2RlY19zZXRfb3RoZXJfZnJhbWVzKHN0cnVj dCBoYW50cm9fY3R4ICpjdHgpCj4+ICAgCWlmICh1c2VfcmVmX2ZyYW1lX212cyAmJiByZWZfaW5k ID4gMSAmJgo+PiAgIAkgICAgY3VyX29mZnNldFttZl90eXBlc1sxXSAtIFY0TDJfQVYxX1JFRl9M QVNUX0ZSQU1FXSA8PSBNQVhfRlJBTUVfRElTVEFOQ0UgJiYKPj4gICAJICAgIGN1cl9vZmZzZXRb bWZfdHlwZXNbMV0gLSBWNEwyX0FWMV9SRUZfTEFTVF9GUkFNRV0gPj0gLU1BWF9GUkFNRV9ESVNU QU5DRSkgewo+PiAtCQlpbnQgcmYgPSByb2NrY2hpcF92cHU5ODFfZ2V0X29yZGVyX2hpbnQoY3R4 LCByZWZzX3NlbGVjdGVkWzFdKTsKPj4gLQkJaW50IGlkeCA9IHJvY2tjaGlwX3ZwdTk4MV9nZXRf ZnJhbWVfaW5kZXgoY3R4LCByZWZzX3NlbGVjdGVkWzFdKTsKPj4gKwkJaW50IHJmID0gaGFudHJv X2F2MV9nZXRfb3JkZXJfaGludChjdHgsIHJlZnNfc2VsZWN0ZWRbMV0pOwo+PiArCQlpbnQgaWR4 ID0gaGFudHJvX2F2MV9nZXRfZnJhbWVfaW5kZXgoY3R4LCByZWZzX3NlbGVjdGVkWzFdKTsKPiBE aXR0by4KPgo+PiAgIAkJdTMyICpvaCA9IGF2MV9kZWMtPmZyYW1lX3JlZnNbaWR4XS5vcmRlcl9o aW50czsKPj4gICAJCWludCB2YWw7Cj4+ICAgCj4+ICAgCQloYW50cm9fcmVnX3dyaXRlKHZwdSwg JmF2MV91c2VfdGVtcG9yYWwxX212cywgMSk7Cj4+ICAgCj4+IC0JCXZhbCA9IHJvY2tjaGlwX3Zw dTk4MV9hdjFfZGVjX2dldF9kaXN0KGN0eCwgcmYsIG9oW1Y0TDJfQVYxX1JFRl9MQVNUX0ZSQU1F XSk7Cj4+ICsJCXZhbCA9IGhhbnRyb19hdjFfZ2V0X2Rpc3QoY3R4LCByZiwgb2hbVjRMMl9BVjFf UkVGX0xBU1RfRlJBTUVdKTsKPj4gICAJCWhhbnRyb19yZWdfd3JpdGUodnB1LCAmYXYxX21mMl9s YXN0X29mZnNldCwgdmFsKTsKPj4gICAKPj4gLQkJdmFsID0gcm9ja2NoaXBfdnB1OTgxX2F2MV9k ZWNfZ2V0X2Rpc3QoY3R4LCByZiwgb2hbVjRMMl9BVjFfUkVGX0xBU1QyX0ZSQU1FXSk7Cj4+ICsJ CXZhbCA9IGhhbnRyb19hdjFfZ2V0X2Rpc3QoY3R4LCByZiwgb2hbVjRMMl9BVjFfUkVGX0xBU1Qy X0ZSQU1FXSk7Cj4+ICAgCQloYW50cm9fcmVnX3dyaXRlKHZwdSwgJmF2MV9tZjJfbGFzdDJfb2Zm c2V0LCB2YWwpOwo+PiAgIAo+PiAtCQl2YWwgPSByb2NrY2hpcF92cHU5ODFfYXYxX2RlY19nZXRf ZGlzdChjdHgsIHJmLCBvaFtWNEwyX0FWMV9SRUZfTEFTVDNfRlJBTUVdKTsKPj4gKwkJdmFsID0g aGFudHJvX2F2MV9nZXRfZGlzdChjdHgsIHJmLCBvaFtWNEwyX0FWMV9SRUZfTEFTVDNfRlJBTUVd KTsKPj4gICAJCWhhbnRyb19yZWdfd3JpdGUodnB1LCAmYXYxX21mMl9sYXN0M19vZmZzZXQsIHZh bCk7Cj4+ICAgCj4+IC0JCXZhbCA9IHJvY2tjaGlwX3ZwdTk4MV9hdjFfZGVjX2dldF9kaXN0KGN0 eCwgcmYsIG9oW1Y0TDJfQVYxX1JFRl9HT0xERU5fRlJBTUVdKTsKPj4gKwkJdmFsID0gaGFudHJv X2F2MV9nZXRfZGlzdChjdHgsIHJmLCBvaFtWNEwyX0FWMV9SRUZfR09MREVOX0ZSQU1FXSk7Cj4+ ICAgCQloYW50cm9fcmVnX3dyaXRlKHZwdSwgJmF2MV9tZjJfZ29sZGVuX29mZnNldCwgdmFsKTsK Pj4gICAKPj4gLQkJdmFsID0gcm9ja2NoaXBfdnB1OTgxX2F2MV9kZWNfZ2V0X2Rpc3QoY3R4LCBy Ziwgb2hbVjRMMl9BVjFfUkVGX0JXRFJFRl9GUkFNRV0pOwo+PiArCQl2YWwgPSBoYW50cm9fYXYx X2dldF9kaXN0KGN0eCwgcmYsIG9oW1Y0TDJfQVYxX1JFRl9CV0RSRUZfRlJBTUVdKTsKPj4gICAJ CWhhbnRyb19yZWdfd3JpdGUodnB1LCAmYXYxX21mMl9id2RyZWZfb2Zmc2V0LCB2YWwpOwo+PiAg IAo+PiAtCQl2YWwgPSByb2NrY2hpcF92cHU5ODFfYXYxX2RlY19nZXRfZGlzdChjdHgsIHJmLCBv aFtWNEwyX0FWMV9SRUZfQUxUUkVGMl9GUkFNRV0pOwo+PiArCQl2YWwgPSBoYW50cm9fYXYxX2dl dF9kaXN0KGN0eCwgcmYsIG9oW1Y0TDJfQVYxX1JFRl9BTFRSRUYyX0ZSQU1FXSk7Cj4+ICAgCQlo YW50cm9fcmVnX3dyaXRlKHZwdSwgJmF2MV9tZjJfYWx0cmVmMl9vZmZzZXQsIHZhbCk7Cj4+ICAg Cj4+IC0JCXZhbCA9IHJvY2tjaGlwX3ZwdTk4MV9hdjFfZGVjX2dldF9kaXN0KGN0eCwgcmYsIG9o W1Y0TDJfQVYxX1JFRl9BTFRSRUZfRlJBTUVdKTsKPj4gKwkJdmFsID0gaGFudHJvX2F2MV9nZXRf ZGlzdChjdHgsIHJmLCBvaFtWNEwyX0FWMV9SRUZfQUxUUkVGX0ZSQU1FXSk7Cj4+ICAgCQloYW50 cm9fcmVnX3dyaXRlKHZwdSwgJmF2MV9tZjJfYWx0cmVmX29mZnNldCwgdmFsKTsKPj4gICAJfQo+ PiAgIAo+PiBAQCAtMTgxNiwzMiArMTA0NSwzMiBAQCBzdGF0aWMgdm9pZCByb2NrY2hpcF92cHU5 ODFfYXYxX2RlY19zZXRfb3RoZXJfZnJhbWVzKHN0cnVjdCBoYW50cm9fY3R4ICpjdHgpCj4+ICAg CWlmICh1c2VfcmVmX2ZyYW1lX212cyAmJiByZWZfaW5kID4gMiAmJgo+PiAgIAkgICAgY3VyX29m ZnNldFttZl90eXBlc1syXSAtIFY0TDJfQVYxX1JFRl9MQVNUX0ZSQU1FXSA8PSBNQVhfRlJBTUVf RElTVEFOQ0UgJiYKPj4gICAJICAgIGN1cl9vZmZzZXRbbWZfdHlwZXNbMl0gLSBWNEwyX0FWMV9S RUZfTEFTVF9GUkFNRV0gPj0gLU1BWF9GUkFNRV9ESVNUQU5DRSkgewo+PiAtCQlpbnQgcmYgPSBy b2NrY2hpcF92cHU5ODFfZ2V0X29yZGVyX2hpbnQoY3R4LCByZWZzX3NlbGVjdGVkWzJdKTsKPj4g LQkJaW50IGlkeCA9IHJvY2tjaGlwX3ZwdTk4MV9nZXRfZnJhbWVfaW5kZXgoY3R4LCByZWZzX3Nl bGVjdGVkWzJdKTsKPj4gKwkJaW50IHJmID0gaGFudHJvX2F2MV9nZXRfb3JkZXJfaGludChjdHgs IHJlZnNfc2VsZWN0ZWRbMl0pOwo+PiArCQlpbnQgaWR4ID0gaGFudHJvX2F2MV9nZXRfZnJhbWVf aW5kZXgoY3R4LCByZWZzX3NlbGVjdGVkWzJdKTsKPiBEaXR0by4KPgo+PiAgIAkJdTMyICpvaCA9 IGF2MV9kZWMtPmZyYW1lX3JlZnNbaWR4XS5vcmRlcl9oaW50czsKPj4gICAJCWludCB2YWw7Cj4+ ICAgCj4+ICAgCQloYW50cm9fcmVnX3dyaXRlKHZwdSwgJmF2MV91c2VfdGVtcG9yYWwyX212cywg MSk7Cj4+ICAgCj4+IC0JCXZhbCA9IHJvY2tjaGlwX3ZwdTk4MV9hdjFfZGVjX2dldF9kaXN0KGN0 eCwgcmYsIG9oW1Y0TDJfQVYxX1JFRl9MQVNUX0ZSQU1FXSk7Cj4+ICsJCXZhbCA9IGhhbnRyb19h djFfZ2V0X2Rpc3QoY3R4LCByZiwgb2hbVjRMMl9BVjFfUkVGX0xBU1RfRlJBTUVdKTsKPj4gICAJ CWhhbnRyb19yZWdfd3JpdGUodnB1LCAmYXYxX21mM19sYXN0X29mZnNldCwgdmFsKTsKPj4gICAK Pj4gLQkJdmFsID0gcm9ja2NoaXBfdnB1OTgxX2F2MV9kZWNfZ2V0X2Rpc3QoY3R4LCByZiwgb2hb VjRMMl9BVjFfUkVGX0xBU1QyX0ZSQU1FXSk7Cj4+ICsJCXZhbCA9IGhhbnRyb19hdjFfZ2V0X2Rp c3QoY3R4LCByZiwgb2hbVjRMMl9BVjFfUkVGX0xBU1QyX0ZSQU1FXSk7Cj4+ICAgCQloYW50cm9f cmVnX3dyaXRlKHZwdSwgJmF2MV9tZjNfbGFzdDJfb2Zmc2V0LCB2YWwpOwo+PiAgIAo+PiAtCQl2 YWwgPSByb2NrY2hpcF92cHU5ODFfYXYxX2RlY19nZXRfZGlzdChjdHgsIHJmLCBvaFtWNEwyX0FW MV9SRUZfTEFTVDNfRlJBTUVdKTsKPj4gKwkJdmFsID0gaGFudHJvX2F2MV9nZXRfZGlzdChjdHgs IHJmLCBvaFtWNEwyX0FWMV9SRUZfTEFTVDNfRlJBTUVdKTsKPj4gICAJCWhhbnRyb19yZWdfd3Jp dGUodnB1LCAmYXYxX21mM19sYXN0M19vZmZzZXQsIHZhbCk7Cj4+ICAgCj4+IC0JCXZhbCA9IHJv Y2tjaGlwX3ZwdTk4MV9hdjFfZGVjX2dldF9kaXN0KGN0eCwgcmYsIG9oW1Y0TDJfQVYxX1JFRl9H T0xERU5fRlJBTUVdKTsKPj4gKwkJdmFsID0gaGFudHJvX2F2MV9nZXRfZGlzdChjdHgsIHJmLCBv aFtWNEwyX0FWMV9SRUZfR09MREVOX0ZSQU1FXSk7Cj4+ICAgCQloYW50cm9fcmVnX3dyaXRlKHZw dSwgJmF2MV9tZjNfZ29sZGVuX29mZnNldCwgdmFsKTsKPj4gICAKPj4gLQkJdmFsID0gcm9ja2No aXBfdnB1OTgxX2F2MV9kZWNfZ2V0X2Rpc3QoY3R4LCByZiwgb2hbVjRMMl9BVjFfUkVGX0JXRFJF Rl9GUkFNRV0pOwo+PiArCQl2YWwgPSBoYW50cm9fYXYxX2dldF9kaXN0KGN0eCwgcmYsIG9oW1Y0 TDJfQVYxX1JFRl9CV0RSRUZfRlJBTUVdKTsKPj4gICAJCWhhbnRyb19yZWdfd3JpdGUodnB1LCAm YXYxX21mM19id2RyZWZfb2Zmc2V0LCB2YWwpOwo+PiAgIAo+PiAtCQl2YWwgPSByb2NrY2hpcF92 cHU5ODFfYXYxX2RlY19nZXRfZGlzdChjdHgsIHJmLCBvaFtWNEwyX0FWMV9SRUZfQUxUUkVGMl9G UkFNRV0pOwo+PiArCQl2YWwgPSBoYW50cm9fYXYxX2dldF9kaXN0KGN0eCwgcmYsIG9oW1Y0TDJf QVYxX1JFRl9BTFRSRUYyX0ZSQU1FXSk7Cj4+ICAgCQloYW50cm9fcmVnX3dyaXRlKHZwdSwgJmF2 MV9tZjNfYWx0cmVmMl9vZmZzZXQsIHZhbCk7Cj4+ICAgCj4+IC0JCXZhbCA9IHJvY2tjaGlwX3Zw dTk4MV9hdjFfZGVjX2dldF9kaXN0KGN0eCwgcmYsIG9oW1Y0TDJfQVYxX1JFRl9BTFRSRUZfRlJB TUVdKTsKPj4gKwkJdmFsID0gaGFudHJvX2F2MV9nZXRfZGlzdChjdHgsIHJmLCBvaFtWNEwyX0FW MV9SRUZfQUxUUkVGX0ZSQU1FXSk7Cj4+ICAgCQloYW50cm9fcmVnX3dyaXRlKHZwdSwgJmF2MV9t ZjNfYWx0cmVmX29mZnNldCwgdmFsKTsKPj4gICAJfQo+PiAgIAo+PiBAQCAtMTg4Myw3ICsxMTEy LDcgQEAgc3RhdGljIHZvaWQgcm9ja2NoaXBfdnB1OTgxX2F2MV9kZWNfc2V0X3JlZmVyZW5jZV9m cmFtZXMoc3RydWN0IGhhbnRyb19jdHggKmN0eCkKPj4gICAKPj4gICAJaWYgKCFhbGxvd19pbnRy YWJjKSB7Cj4+ICAgCQlmb3IgKGkgPSAwOyBpIDwgVjRMMl9BVjFfUkVGU19QRVJfRlJBTUU7IGkr Kykgewo+PiAtCQkJaW50IGlkeCA9IHJvY2tjaGlwX3ZwdTk4MV9nZXRfZnJhbWVfaW5kZXgoY3R4 LCBpKTsKPj4gKwkJCWludCBpZHggPSBoYW50cm9fYXYxX2dldF9mcmFtZV9pbmRleChjdHgsIGkp Owo+PiAgIAo+PiAgIAkJCWlmIChpZHggPj0gMCkKPj4gICAJCQkJcmVmX2NvdW50W2lkeF0rKzsK Pj4gQEAgLTE4OTgsNyArMTEyNyw3IEBAIHN0YXRpYyB2b2lkIHJvY2tjaGlwX3ZwdTk4MV9hdjFf ZGVjX3NldF9yZWZlcmVuY2VfZnJhbWVzKHN0cnVjdCBoYW50cm9fY3R4ICpjdHgpCj4+ICAgCX0K Pj4gICAJaGFudHJvX3JlZ193cml0ZSh2cHUsICZhdjFfcmVmX2ZyYW1lcywgcmVmX2ZyYW1lcyk7 Cj4+ICAgCj4+IC0Jcm9ja2NoaXBfdnB1OTgxX2F2MV9kZWNfc2V0X2ZyYW1lX3NpZ25fYmlhcyhj dHgpOwo+PiArCWhhbnRyb19hdjFfc2V0X2ZyYW1lX3NpZ25fYmlhcyhjdHgpOwo+PiAgIAo+PiAg IAlmb3IgKGkgPSBWNEwyX0FWMV9SRUZfTEFTVF9GUkFNRTsgaSA8IFY0TDJfQVYxX1RPVEFMX1JF RlNfUEVSX0ZSQU1FOyBpKyspIHsKPj4gICAJCXUzMiByZWYgPSBpIC0gMTsKPj4gQEAgLTE5MTAs OCArMTEzOSw4IEBAIHN0YXRpYyB2b2lkIHJvY2tjaGlwX3ZwdTk4MV9hdjFfZGVjX3NldF9yZWZl cmVuY2VfZnJhbWVzKHN0cnVjdCBoYW50cm9fY3R4ICpjdHgpCj4+ICAgCQkJd2lkdGggPSBmcmFt ZS0+ZnJhbWVfd2lkdGhfbWludXNfMSArIDE7Cj4+ICAgCQkJaGVpZ2h0ID0gZnJhbWUtPmZyYW1l X2hlaWdodF9taW51c18xICsgMTsKPj4gICAJCX0gZWxzZSB7Cj4+IC0JCQlpZiAocm9ja2NoaXBf dnB1OTgxX2dldF9mcmFtZV9pbmRleChjdHgsIHJlZikgPiAwKQo+PiAtCQkJCWlkeCA9IHJvY2tj aGlwX3ZwdTk4MV9nZXRfZnJhbWVfaW5kZXgoY3R4LCByZWYpOwo+PiArCQkJaWYgKGhhbnRyb19h djFfZ2V0X2ZyYW1lX2luZGV4KGN0eCwgcmVmKSA+IDApCj4+ICsJCQkJaWR4ID0gaGFudHJvX2F2 MV9nZXRfZnJhbWVfaW5kZXgoY3R4LCByZWYpOwo+IENhbiBpZHggYmUgQVYxX0lOVkFMSURfSURY IGhlcmU/Cj4KPj4gICAJCQl3aWR0aCA9IGF2MV9kZWMtPmZyYW1lX3JlZnNbaWR4XS53aWR0aDsK Pj4gICAJCQloZWlnaHQgPSBhdjFfZGVjLT5mcmFtZV9yZWZzW2lkeF0uaGVpZ2h0Owo+PiAgIAkJ fQo+PiBAQCAtMTk0MywyMCArMTE3Miw2IEBAIHN0YXRpYyB2b2lkIHJvY2tjaGlwX3ZwdTk4MV9h djFfZGVjX3NldF9yZWZlcmVuY2VfZnJhbWVzKHN0cnVjdCBoYW50cm9fY3R4ICpjdHgpCj4+ICAg CXJvY2tjaGlwX3ZwdTk4MV9hdjFfZGVjX3NldF9vdGhlcl9mcmFtZXMoY3R4KTsKPj4gICB9Cj4+ ICAgCj4+IC1zdGF0aWMgaW50IHJvY2tjaGlwX3ZwdTk4MV9hdjFfZ2V0X2hhcmR3YXJlX3R4X21v ZGUoZW51bSB2NGwyX2F2MV90eF9tb2RlIHR4X21vZGUpCj4+IC17Cj4+IC0Jc3dpdGNoICh0eF9t b2RlKSB7Cj4+IC0JY2FzZSBWNEwyX0FWMV9UWF9NT0RFX09OTFlfNFg0Ogo+PiAtCQlyZXR1cm4g Uk9DS0NISVBfQVYxX1RYX01PREVfT05MWV80WDQ7Cj4+IC0JY2FzZSBWNEwyX0FWMV9UWF9NT0RF X0xBUkdFU1Q6Cj4+IC0JCXJldHVybiBST0NLQ0hJUF9BVjFfVFhfTU9ERV8zMngzMjsKPj4gLQlj YXNlIFY0TDJfQVYxX1RYX01PREVfU0VMRUNUOgo+PiAtCQlyZXR1cm4gUk9DS0NISVBfQVYxX1RY X01PREVfU0VMRUNUOwo+PiAtCX0KPj4gLQo+PiAtCXJldHVybiBST0NLQ0hJUF9BVjFfVFhfTU9E RV8zMngzMjsKPj4gLX0KPj4gLQo+PiAgIHN0YXRpYyB2b2lkIHJvY2tjaGlwX3ZwdTk4MV9hdjFf ZGVjX3NldF9wYXJhbWV0ZXJzKHN0cnVjdCBoYW50cm9fY3R4ICpjdHgpCj4+ICAgewo+PiAgIAlz dHJ1Y3QgaGFudHJvX2RldiAqdnB1ID0gY3R4LT5kZXY7Cj4+IEBAIC0yMDI5LDcgKzEyNDQsNyBA QCBzdGF0aWMgdm9pZCByb2NrY2hpcF92cHU5ODFfYXYxX2RlY19zZXRfcGFyYW1ldGVycyhzdHJ1 Y3QgaGFudHJvX2N0eCAqY3R4KQo+PiAgIAloYW50cm9fcmVnX3dyaXRlKHZwdSwgJmF2MV9jb21w X3ByZWRfbW9kZSwKPj4gICAJCQkgKGN0cmxzLT5mcmFtZS0+ZmxhZ3MgJiBWNEwyX0FWMV9GUkFN RV9GTEFHX1JFRkVSRU5DRV9TRUxFQ1QpID8gMiA6IDApOwo+PiAgIAo+PiAtCXR4X21vZGUgPSBy b2NrY2hpcF92cHU5ODFfYXYxX2dldF9oYXJkd2FyZV90eF9tb2RlKGN0cmxzLT5mcmFtZS0+dHhf bW9kZSk7Cj4+ICsJdHhfbW9kZSA9IGhhbnRyb19hdjFfZ2V0X2hhcmR3YXJlX3R4X21vZGUoY3Ry bHMtPmZyYW1lLT50eF9tb2RlKTsKPj4gICAJaGFudHJvX3JlZ193cml0ZSh2cHUsICZhdjFfdHJh bnNmb3JtX21vZGUsIHR4X21vZGUpOwo+PiAgIAloYW50cm9fcmVnX3dyaXRlKHZwdSwgJmF2MV9t YXhfY2Jfc2l6ZSwKPj4gICAJCQkgKGN0cmxzLT5zZXF1ZW5jZS0+ZmxhZ3MKPj4gQEAgLTIwNjEs NyArMTI3Niw3IEBAIHN0YXRpYyB2b2lkIHJvY2tjaGlwX3ZwdTk4MV9hdjFfZGVjX3NldF9wYXJh bWV0ZXJzKHN0cnVjdCBoYW50cm9fY3R4ICpjdHgpCj4+ICAgCQloYW50cm9fcmVnX3dyaXRlKHZw dSwgJmF2MV9xbWxldmVsX3YsIDB4ZmYpOwo+PiAgIAl9Cj4+ICAgCj4+IC0JaGFudHJvX3JlZ193 cml0ZSh2cHUsICZhdjFfbG9zc2xlc3NfZSwgcm9ja2NoaXBfdnB1OTgxX2F2MV9kZWNfaXNfbG9z c2xlc3MoY3R4KSk7Cj4+ICsJaGFudHJvX3JlZ193cml0ZSh2cHUsICZhdjFfbG9zc2xlc3NfZSwg aGFudHJvX2F2MV9pc19sb3NzbGVzcyhjdHgpKTsKPj4gICAJaGFudHJvX3JlZ193cml0ZSh2cHUs ICZhdjFfcXVhbnRfZGVsdGFfdl9kYywgY3RybHMtPmZyYW1lLT5xdWFudGl6YXRpb24uZGVsdGFf cV92X2RjKTsKPj4gICAJaGFudHJvX3JlZ193cml0ZSh2cHUsICZhdjFfcXVhbnRfZGVsdGFfdl9h YywgY3RybHMtPmZyYW1lLT5xdWFudGl6YXRpb24uZGVsdGFfcV92X2FjKTsKPj4gICAKPj4gQEAg LTIxMDksOCArMTMyNCw4IEBAIHJvY2tjaGlwX3ZwdTk4MV9hdjFfZGVjX3NldF9vdXRwdXRfYnVm ZmVyKHN0cnVjdCBoYW50cm9fY3R4ICpjdHgpCj4+ICAgCXN0cnVjdCBoYW50cm9fZGVjb2RlZF9i dWZmZXIgKmRzdDsKPj4gICAJc3RydWN0IHZiMl92NGwyX2J1ZmZlciAqdmIyX2RzdDsKPj4gICAJ ZG1hX2FkZHJfdCBsdW1hX2FkZHIsIGNocm9tYV9hZGRyLCBtdl9hZGRyID0gMDsKPj4gLQlzaXpl X3QgY3Jfb2Zmc2V0ID0gcm9ja2NoaXBfdnB1OTgxX2F2MV9kZWNfbHVtYV9zaXplKGN0eCk7Cj4+ IC0Jc2l6ZV90IG12X29mZnNldCA9IHJvY2tjaGlwX3ZwdTk4MV9hdjFfZGVjX2Nocm9tYV9zaXpl KGN0eCk7Cj4+ICsJc2l6ZV90IGNyX29mZnNldCA9IGhhbnRyb19hdjFfbHVtYV9zaXplKGN0eCk7 Cj4+ICsJc2l6ZV90IG12X29mZnNldCA9IGhhbnRyb19hdjFfY2hyb21hX3NpemUoY3R4KTsKPj4g ICAKPj4gICAJdmIyX2RzdCA9IGF2MV9kZWMtPmZyYW1lX3JlZnNbYXYxX2RlYy0+Y3VycmVudF9m cmFtZV9pbmRleF0udmIyX3JlZjsKPj4gICAJZHN0ID0gdmIyX3RvX2hhbnRyb19kZWNvZGVkX2J1 ZigmdmIyX2RzdC0+dmIyX2J1Zik7Cj4+IEBAIC0yMTM0LDcgKzEzNDksNyBAQCBpbnQgcm9ja2No aXBfdnB1OTgxX2F2MV9kZWNfcnVuKHN0cnVjdCBoYW50cm9fY3R4ICpjdHgpCj4+ICAgCj4+ICAg CWhhbnRyb19zdGFydF9wcmVwYXJlX3J1bihjdHgpOwo+PiAgIAo+PiAtCXJldCA9IHJvY2tjaGlw X3ZwdTk4MV9hdjFfZGVjX3ByZXBhcmVfcnVuKGN0eCk7Cj4+ICsJcmV0ID0gaGFudHJvX2F2MV9w cmVwYXJlX3J1bihjdHgpOwo+PiAgIAlpZiAocmV0KQo+PiAgIAkJZ290byBwcmVwYXJlX2Vycm9y Owo+PiAgIAo+PiBAQCAtMjE0NCw4ICsxMzU5LDggQEAgaW50IHJvY2tjaGlwX3ZwdTk4MV9hdjFf ZGVjX3J1bihzdHJ1Y3QgaGFudHJvX2N0eCAqY3R4KQo+PiAgIAkJZ290byBwcmVwYXJlX2Vycm9y Owo+PiAgIAl9Cj4+ICAgCj4+IC0Jcm9ja2NoaXBfdnB1OTgxX2F2MV9kZWNfY2xlYW5fcmVmcyhj dHgpOwo+PiAtCXJvY2tjaGlwX3ZwdTk4MV9hdjFfZGVjX2ZyYW1lX3JlZihjdHgsIHZiMl9zcmMt PnZiMl9idWYudGltZXN0YW1wKTsKPj4gKwloYW50cm9fYXYxX2NsZWFuX3JlZnMoY3R4KTsKPj4g KwloYW50cm9fYXYxX2ZyYW1lX3JlZihjdHgsIHZiMl9zcmMtPnZiMl9idWYudGltZXN0YW1wKTsK Pj4gICAKPj4gICAJcm9ja2NoaXBfdnB1OTgxX2F2MV9kZWNfc2V0X3BhcmFtZXRlcnMoY3R4KTsK Pj4gICAJcm9ja2NoaXBfdnB1OTgxX2F2MV9kZWNfc2V0X2dsb2JhbF9tb2RlbChjdHgpOwo+IFJl Z2FyZHMsCj4KPiAJSGFucwo+CgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fXwpMaW51eC1yb2NrY2hpcCBtYWlsaW5nIGxpc3QKTGludXgtcm9ja2NoaXBAbGlz dHMuaW5mcmFkZWFkLm9yZwpodHRwOi8vbGlzdHMuaW5mcmFkZWFkLm9yZy9tYWlsbWFuL2xpc3Rp bmZvL2xpbnV4LXJvY2tjaGlwCg==