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 mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id C420AC433F5 for ; Tue, 28 Sep 2021 15:03:27 +0000 (UTC) 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 mail.kernel.org (Postfix) with ESMTPS id 82FD36101A for ; Tue, 28 Sep 2021 15:03:27 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.4.1 mail.kernel.org 82FD36101A Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=collabora.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=lists.infradead.org DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version:References:In-Reply-To: Date:Cc:To:From:Subject:Message-ID:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=1v2qR8bfgg73eKSbSafNYZfX/zIEAzvO+i8e1c3Lsp8=; b=GnwX2UlAMxtIgd 9jv874UcE57Xd4zAosfc/9ZteiC3kjPEKl+HJ1MLtP734sNuRZG8+udu2ZNiypehDpaYhtgk5Vhca aOY34TACoTiKIBMrpR8s8K/6sB41sY9ZOk7jSnW2ooknLzFeCLXQkxjmGWhfKk7soljCZJ2vj97j/ yyqOcnnnK+l1TYCk9AiV0sJz1oFEFB/Cormldvp8MFJah77yYy2j4wleiQEnMuLE+JVvaZ194glWH n7gHoda9hd4qVDzCxNb+Pn7DMHeZAiLKRNBgV04bPpaTupvmbt2YS3N4d7bi+v2Ovj+uunSVYT1C+ IPxuaWpnIj6nE8Dt2ksg==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1mVEde-007i0K-JW; Tue, 28 Sep 2021 15:03:22 +0000 Received: from bhuna.collabora.co.uk ([2a00:1098:0:82:1000:25:2eeb:e3e3]) by bombadil.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) id 1mVEdO-007hy1-PD; Tue, 28 Sep 2021 15:03:12 +0000 Received: from [127.0.0.1] (localhost [127.0.0.1]) (Authenticated sender: nicolas) with ESMTPSA id 8380F1F42BC0 Message-ID: <79d74f26c1b36c77723ef57adf1ee7148b2ae36b.camel@collabora.com> Subject: Re: [PATCH v6 09/10] media: hantro: Support VP9 on the G2 core From: Nicolas Dufresne To: Andrzej Pietrasiewicz , linux-media@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, linux-rockchip@lists.infradead.org, linux-staging@lists.linux.dev Cc: Benjamin Gaignard , Boris Brezillon , Ezequiel Garcia , Fabio Estevam , Greg Kroah-Hartman , Hans Verkuil , Heiko Stuebner , Jernej Skrabec , Mauro Carvalho Chehab , NXP Linux Team , Pengutronix Kernel Team , Philipp Zabel , Sascha Hauer , Shawn Guo , kernel@collabora.com Date: Tue, 28 Sep 2021 11:02:53 -0400 In-Reply-To: <20210927151958.24426-10-andrzej.p@collabora.com> References: <20210927151958.24426-1-andrzej.p@collabora.com> <20210927151958.24426-10-andrzej.p@collabora.com> User-Agent: Evolution 3.40.4 (3.40.4-1.fc34) MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20210928_080307_290019_BBF4295E X-CRM114-Status: GOOD ( 28.51 ) 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-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Sender: "Linux-rockchip" Errors-To: linux-rockchip-bounces+linux-rockchip=archiver.kernel.org@lists.infradead.org TGUgbHVuZGkgMjcgc2VwdGVtYnJlIDIwMjEgw6AgMTc6MTkgKzAyMDAsIEFuZHJ6ZWogUGlldHJh c2lld2ljeiBhIMOpY3JpdMKgOgo+IFZlcmlTaWxpY29uIEhhbnRybyBHMiBjb3JlIHN1cHBvcnRz IFZQOSBjb2RlYy4KPiAKPiBTaWduZWQtb2ZmLWJ5OiBBbmRyemVqIFBpZXRyYXNpZXdpY3ogPGFu ZHJ6ZWoucEBjb2xsYWJvcmEuY29tPgo+IFJldmlld2VkLWJ5OiBCZW5qYW1pbiBHYWlnbmFyZCA8 YmVuamFtaW4uZ2FpZ25hcmRAY29sbGFib3JhLmNvbT4KPiAtLS0KPiAgZHJpdmVycy9zdGFnaW5n L21lZGlhL2hhbnRyby9LY29uZmlnICAgICAgICAgIHwgICAxICsKPiAgZHJpdmVycy9zdGFnaW5n L21lZGlhL2hhbnRyby9NYWtlZmlsZSAgICAgICAgIHwgICA2ICstCj4gIGRyaXZlcnMvc3RhZ2lu Zy9tZWRpYS9oYW50cm8vaGFudHJvLmggICAgICAgICB8ICAyNiArCj4gIGRyaXZlcnMvc3RhZ2lu Zy9tZWRpYS9oYW50cm8vaGFudHJvX2Rydi5jICAgICB8ICAxOCArLQo+ICBkcml2ZXJzL3N0YWdp bmcvbWVkaWEvaGFudHJvL2hhbnRyb19nMl9yZWdzLmggfCAgOTcgKysKPiAgLi4uL3N0YWdpbmcv bWVkaWEvaGFudHJvL2hhbnRyb19nMl92cDlfZGVjLmMgIHwgOTc4ICsrKysrKysrKysrKysrKysr Kwo+ICBkcml2ZXJzL3N0YWdpbmcvbWVkaWEvaGFudHJvL2hhbnRyb19ody5oICAgICAgfCAgNjcg KysKPiAgZHJpdmVycy9zdGFnaW5nL21lZGlhL2hhbnRyby9oYW50cm9fdjRsMi5jICAgIHwgICA2 ICsKPiAgZHJpdmVycy9zdGFnaW5nL21lZGlhL2hhbnRyby9oYW50cm9fdnA5LmMgICAgIHwgMjQw ICsrKysrCj4gIGRyaXZlcnMvc3RhZ2luZy9tZWRpYS9oYW50cm8vaGFudHJvX3ZwOS5oICAgICB8 IDEwMyArKwo+ICBkcml2ZXJzL3N0YWdpbmcvbWVkaWEvaGFudHJvL2lteDhtX3ZwdV9ody5jICAg fCAgMjIgKy0KPiAgMTEgZmlsZXMgY2hhbmdlZCwgMTU2MCBpbnNlcnRpb25zKCspLCA0IGRlbGV0 aW9ucygtKQo+ICBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9zdGFnaW5nL21lZGlhL2hhbnRy by9oYW50cm9fZzJfdnA5X2RlYy5jCj4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL3N0YWdp bmcvbWVkaWEvaGFudHJvL2hhbnRyb192cDkuYwo+ICBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVy cy9zdGFnaW5nL21lZGlhL2hhbnRyby9oYW50cm9fdnA5LmgKPiAKPiBkaWZmIC0tZ2l0IGEvZHJp dmVycy9zdGFnaW5nL21lZGlhL2hhbnRyby9LY29uZmlnIGIvZHJpdmVycy9zdGFnaW5nL21lZGlh L2hhbnRyby9LY29uZmlnCj4gaW5kZXggMjBiMWY2ZDdiNjljLi4wMGE1N2Q4OGM5MmUgMTAwNjQ0 Cj4gLS0tIGEvZHJpdmVycy9zdGFnaW5nL21lZGlhL2hhbnRyby9LY29uZmlnCj4gKysrIGIvZHJp dmVycy9zdGFnaW5nL21lZGlhL2hhbnRyby9LY29uZmlnCj4gQEAgLTksNiArOSw3IEBAIGNvbmZp ZyBWSURFT19IQU5UUk8KPiAgCXNlbGVjdCBWSURFT0JVRjJfVk1BTExPQwo+ICAJc2VsZWN0IFY0 TDJfTUVNMk1FTV9ERVYKPiAgCXNlbGVjdCBWNEwyX0gyNjQKPiArCXNlbGVjdCBWNEwyX1ZQOQo+ ICAJaGVscAo+ICAJICBTdXBwb3J0IGZvciB0aGUgSGFudHJvIElQIGJhc2VkIFZpZGVvIFByb2Nl c3NpbmcgVW5pdHMgcHJlc2VudCBvbgo+ICAJICBSb2NrY2hpcCBhbmQgTlhQIGkuTVg4TSBTb0Nz LCB3aGljaCBhY2NlbGVyYXRlIHZpZGVvIGFuZCBpbWFnZQo+IGRpZmYgLS1naXQgYS9kcml2ZXJz L3N0YWdpbmcvbWVkaWEvaGFudHJvL01ha2VmaWxlIGIvZHJpdmVycy9zdGFnaW5nL21lZGlhL2hh bnRyby9NYWtlZmlsZQo+IGluZGV4IGZlNmQ4NDg3MWQwNy4uMjhhZjBhMWVlNGJmIDEwMDY0NAo+ IC0tLSBhL2RyaXZlcnMvc3RhZ2luZy9tZWRpYS9oYW50cm8vTWFrZWZpbGUKPiArKysgYi9kcml2 ZXJzL3N0YWdpbmcvbWVkaWEvaGFudHJvL01ha2VmaWxlCj4gQEAgLTEwLDkgKzEwLDEwIEBAIGhh bnRyby12cHUteSArPSBcCj4gIAkJaGFudHJvX2cxLm8gXAo+ICAJCWhhbnRyb19nMV9oMjY0X2Rl Yy5vIFwKPiAgCQloYW50cm9fZzFfbXBlZzJfZGVjLm8gXAo+IC0JCWhhbnRyb19nMl9oZXZjX2Rl Yy5vIFwKPiAgCQloYW50cm9fZzFfdnA4X2RlYy5vIFwKPiAgCQloYW50cm9fZzIubyBcCj4gKwkJ aGFudHJvX2cyX2hldmNfZGVjLm8gXAo+ICsJCWhhbnRyb19nMl92cDlfZGVjLm8gXAo+ICAJCXJv Y2tjaGlwX3ZwdTJfaHdfanBlZ19lbmMubyBcCj4gIAkJcm9ja2NoaXBfdnB1Ml9od19oMjY0X2Rl Yy5vIFwKPiAgCQlyb2NrY2hpcF92cHUyX2h3X21wZWcyX2RlYy5vIFwKPiBAQCAtMjEsNyArMjIs OCBAQCBoYW50cm8tdnB1LXkgKz0gXAo+ICAJCWhhbnRyb19oMjY0Lm8gXAo+ICAJCWhhbnRyb19o ZXZjLm8gXAo+ICAJCWhhbnRyb19tcGVnMi5vIFwKPiAtCQloYW50cm9fdnA4Lm8KPiArCQloYW50 cm9fdnA4Lm8gXAo+ICsJCWhhbnRyb192cDkubwo+ICAKPiAgaGFudHJvLXZwdS0kKENPTkZJR19W SURFT19IQU5UUk9fSU1YOE0pICs9IFwKPiAgCQlpbXg4bV92cHVfaHcubwo+IGRpZmYgLS1naXQg YS9kcml2ZXJzL3N0YWdpbmcvbWVkaWEvaGFudHJvL2hhbnRyby5oIGIvZHJpdmVycy9zdGFnaW5n L21lZGlhL2hhbnRyby9oYW50cm8uaAo+IGluZGV4IGQ5MWViMmIxYzUwOS4uMWU4YzFhNmUzZWIw IDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvc3RhZ2luZy9tZWRpYS9oYW50cm8vaGFudHJvLmgKPiAr KysgYi9kcml2ZXJzL3N0YWdpbmcvbWVkaWEvaGFudHJvL2hhbnRyby5oCj4gQEAgLTM2LDYgKzM2 LDcgQEAgc3RydWN0IGhhbnRyb19wb3N0cHJvY19vcHM7Cj4gICNkZWZpbmUgSEFOVFJPX1ZQOF9E RUNPREVSCUJJVCgxNykKPiAgI2RlZmluZSBIQU5UUk9fSDI2NF9ERUNPREVSCUJJVCgxOCkKPiAg I2RlZmluZSBIQU5UUk9fSEVWQ19ERUNPREVSCUJJVCgxOSkKPiArI2RlZmluZSBIQU5UUk9fVlA5 X0RFQ09ERVIJQklUKDIwKQo+ICAjZGVmaW5lIEhBTlRST19ERUNPREVSUwkJMHhmZmZmMDAwMAo+ ICAKPiAgLyoqCj4gQEAgLTExMCw2ICsxMTEsNyBAQCBlbnVtIGhhbnRyb19jb2RlY19tb2RlIHsK PiAgCUhBTlRST19NT0RFX01QRUcyX0RFQywKPiAgCUhBTlRST19NT0RFX1ZQOF9ERUMsCj4gIAlI QU5UUk9fTU9ERV9IRVZDX0RFQywKPiArCUhBTlRST19NT0RFX1ZQOV9ERUMsCj4gIH07Cj4gIAo+ ICAvKgo+IEBAIC0yMjMsNiArMjI1LDcgQEAgc3RydWN0IGhhbnRyb19kZXYgewo+ICAgKiBAbXBl ZzJfZGVjOgkJTVBFRy0yLWRlY29kaW5nIGNvbnRleHQuCj4gICAqIEB2cDhfZGVjOgkJVlA4LWRl Y29kaW5nIGNvbnRleHQuCj4gICAqIEBoZXZjX2RlYzoJCUhFVkMtZGVjb2RpbmcgY29udGV4dC4K PiArICogQHZwOV9kZWM6CQlWUDktZGVjb2RpbmcgY29udGV4dC4KPiAgICovCj4gIHN0cnVjdCBo YW50cm9fY3R4IHsKPiAgCXN0cnVjdCBoYW50cm9fZGV2ICpkZXY7Cj4gQEAgLTI1MCw2ICsyNTMs NyBAQCBzdHJ1Y3QgaGFudHJvX2N0eCB7Cj4gIAkJc3RydWN0IGhhbnRyb19tcGVnMl9kZWNfaHdf Y3R4IG1wZWcyX2RlYzsKPiAgCQlzdHJ1Y3QgaGFudHJvX3ZwOF9kZWNfaHdfY3R4IHZwOF9kZWM7 Cj4gIAkJc3RydWN0IGhhbnRyb19oZXZjX2RlY19od19jdHggaGV2Y19kZWM7Cj4gKwkJc3RydWN0 IGhhbnRyb192cDlfZGVjX2h3X2N0eCB2cDlfZGVjOwo+ICAJfTsKPiAgfTsKPiAgCj4gQEAgLTI5 OSw2ICszMDMsMjIgQEAgc3RydWN0IGhhbnRyb19wb3N0cHJvY19yZWdzIHsKPiAgCXN0cnVjdCBo YW50cm9fcmVnIGRpc3BsYXlfd2lkdGg7Cj4gIH07Cj4gIAo+ICtzdHJ1Y3QgaGFudHJvX3ZwOV9k ZWNvZGVkX2J1ZmZlcl9pbmZvIHsKPiArCS8qIEluZm8gbmVlZGVkIHdoZW4gdGhlIGRlY29kZWQg ZnJhbWUgc2VydmVzIGFzIGEgcmVmZXJlbmNlIGZyYW1lLiAqLwo+ICsJdW5zaWduZWQgc2hvcnQg d2lkdGg7Cj4gKwl1bnNpZ25lZCBzaG9ydCBoZWlnaHQ7Cj4gKwl1MzIgYml0X2RlcHRoIDogNDsK PiArfTsKPiArCj4gK3N0cnVjdCBoYW50cm9fZGVjb2RlZF9idWZmZXIgewo+ICsJLyogTXVzdCBi ZSB0aGUgZmlyc3QgZmllbGQgaW4gdGhpcyBzdHJ1Y3QuICovCj4gKwlzdHJ1Y3QgdjRsMl9tMm1f YnVmZmVyIGJhc2U7Cj4gKwo+ICsJdW5pb24gewo+ICsJCXN0cnVjdCBoYW50cm9fdnA5X2RlY29k ZWRfYnVmZmVyX2luZm8gdnA5Owo+ICsJfTsKPiArfTsKPiArCj4gIC8qIExvZ2dpbmcgaGVscGVy cyAqLwo+ICAKPiAgLyoqCj4gQEAgLTQzNiw2ICs0NTYsMTIgQEAgaGFudHJvX2dldF9kZWNfYnVm X2FkZHIoc3RydWN0IGhhbnRyb19jdHggKmN0eCwgc3RydWN0IHZiMl9idWZmZXIgKnZiKQo+ICAJ cmV0dXJuIHZiMl9kbWFfY29udGlnX3BsYW5lX2RtYV9hZGRyKHZiLCAwKTsKPiAgfQo+ICAKPiAr c3RhdGljIGlubGluZSBzdHJ1Y3QgaGFudHJvX2RlY29kZWRfYnVmZmVyICoKPiArdmIyX3RvX2hh bnRyb19kZWNvZGVkX2J1ZihzdHJ1Y3QgdmIyX2J1ZmZlciAqYnVmKQo+ICt7Cj4gKwlyZXR1cm4g Y29udGFpbmVyX29mKGJ1Ziwgc3RydWN0IGhhbnRyb19kZWNvZGVkX2J1ZmZlciwgYmFzZS52Yi52 YjJfYnVmKTsKPiArfQo+ICsKPiAgdm9pZCBoYW50cm9fcG9zdHByb2NfZGlzYWJsZShzdHJ1Y3Qg aGFudHJvX2N0eCAqY3R4KTsKPiAgdm9pZCBoYW50cm9fcG9zdHByb2NfZW5hYmxlKHN0cnVjdCBo YW50cm9fY3R4ICpjdHgpOwo+ICB2b2lkIGhhbnRyb19wb3N0cHJvY19mcmVlKHN0cnVjdCBoYW50 cm9fY3R4ICpjdHgpOwo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvbWVkaWEvaGFudHJv L2hhbnRyb19kcnYuYyBiL2RyaXZlcnMvc3RhZ2luZy9tZWRpYS9oYW50cm8vaGFudHJvX2Rydi5j Cj4gaW5kZXggOGEyZWRkNjdmMmM2Li44MDBjODg3OWFlZTAgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVy cy9zdGFnaW5nL21lZGlhL2hhbnRyby9oYW50cm9fZHJ2LmMKPiArKysgYi9kcml2ZXJzL3N0YWdp bmcvbWVkaWEvaGFudHJvL2hhbnRyb19kcnYuYwo+IEBAIC0yMzIsNyArMjMyLDcgQEAgcXVldWVf aW5pdCh2b2lkICpwcml2LCBzdHJ1Y3QgdmIyX3F1ZXVlICpzcmNfdnEsIHN0cnVjdCB2YjJfcXVl dWUgKmRzdF92cSkKPiAgCWRzdF92cS0+aW9fbW9kZXMgPSBWQjJfTU1BUCB8IFZCMl9ETUFCVUY7 Cj4gIAlkc3RfdnEtPmRydl9wcml2ID0gY3R4Owo+ICAJZHN0X3ZxLT5vcHMgPSAmaGFudHJvX3F1 ZXVlX29wczsKPiAtCWRzdF92cS0+YnVmX3N0cnVjdF9zaXplID0gc2l6ZW9mKHN0cnVjdCB2NGwy X20ybV9idWZmZXIpOwo+ICsJZHN0X3ZxLT5idWZfc3RydWN0X3NpemUgPSBzaXplb2Yoc3RydWN0 IGhhbnRyb19kZWNvZGVkX2J1ZmZlcik7Cj4gIAlkc3RfdnEtPnRpbWVzdGFtcF9mbGFncyA9IFY0 TDJfQlVGX0ZMQUdfVElNRVNUQU1QX0NPUFk7Cj4gIAlkc3RfdnEtPmxvY2sgPSAmY3R4LT5kZXYt PnZwdV9tdXRleDsKPiAgCWRzdF92cS0+ZGV2ID0gY3R4LT5kZXYtPnY0bDJfZGV2LmRldjsKPiBA QCAtMjY2LDYgKzI2NiwxMiBAQCBzdGF0aWMgaW50IGhhbnRyb190cnlfY3RybChzdHJ1Y3QgdjRs Ml9jdHJsICpjdHJsKQo+ICAJCWlmIChzcHMtPmZsYWdzICYgVjRMMl9IRVZDX1NQU19GTEFHX1ND QUxJTkdfTElTVF9FTkFCTEVEKQo+ICAJCQkvKiBObyBzY2FsaW5nIHN1cHBvcnQgKi8KPiAgCQkJ cmV0dXJuIC1FSU5WQUw7Cj4gKwl9IGVsc2UgaWYgKGN0cmwtPmlkID09IFY0TDJfQ0lEX1NUQVRF TEVTU19WUDlfRlJBTUUpIHsKPiArCQljb25zdCBzdHJ1Y3QgdjRsMl9jdHJsX3ZwOV9mcmFtZSAq ZGVjX3BhcmFtcyA9IGN0cmwtPnBfbmV3LnBfdnA5X2ZyYW1lOwo+ICsKPiArCQkvKiBXZSBvbmx5 IHN1cHBvcnQgcHJvZmlsZSAwICovCj4gKwkJaWYgKGRlY19wYXJhbXMtPnByb2ZpbGUgIT0gMCkK PiArCQkJcmV0dXJuIC1FSU5WQUw7Cj4gIAl9Cj4gIAlyZXR1cm4gMDsKPiAgfQo+IEBAIC00NTks NiArNDY1LDE2IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaGFudHJvX2N0cmwgY29udHJvbHNbXSA9 IHsKPiAgCQkJLnN0ZXAgPSAxLAo+ICAJCQkub3BzID0gJmhhbnRyb19oZXZjX2N0cmxfb3BzLAo+ ICAJCX0sCj4gKwl9LCB7Cj4gKwkJLmNvZGVjID0gSEFOVFJPX1ZQOV9ERUNPREVSLAo+ICsJCS5j ZmcgPSB7Cj4gKwkJCS5pZCA9IFY0TDJfQ0lEX1NUQVRFTEVTU19WUDlfRlJBTUUsCj4gKwkJfSwK PiArCX0sIHsKPiArCQkuY29kZWMgPSBIQU5UUk9fVlA5X0RFQ09ERVIsCj4gKwkJLmNmZyA9IHsK PiArCQkJLmlkID0gVjRMMl9DSURfU1RBVEVMRVNTX1ZQOV9DT01QUkVTU0VEX0hEUiwKPiArCQl9 LAo+ICAJfSwKPiAgfTsKPiAgCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9tZWRpYS9o YW50cm8vaGFudHJvX2cyX3JlZ3MuaCBiL2RyaXZlcnMvc3RhZ2luZy9tZWRpYS9oYW50cm8vaGFu dHJvX2cyX3JlZ3MuaAo+IGluZGV4IDBhYzBiYTM3NWU4MC4uMjFjYTIxNjQ4NjE0IDEwMDY0NAo+ IC0tLSBhL2RyaXZlcnMvc3RhZ2luZy9tZWRpYS9oYW50cm8vaGFudHJvX2cyX3JlZ3MuaAo+ICsr KyBiL2RyaXZlcnMvc3RhZ2luZy9tZWRpYS9oYW50cm8vaGFudHJvX2cyX3JlZ3MuaAo+IEBAIC0y OCw2ICsyOCw3IEBACj4gICNkZWZpbmUgRzJfUkVHX0lOVEVSUlVQVF9ERUNfRQkJQklUKDApCj4g IAo+ICAjZGVmaW5lIEhFVkNfREVDX01PREUJCQkweGMKPiArI2RlZmluZSBWUDlfREVDX01PREUJ CQkweGQKPiAgCj4gICNkZWZpbmUgQlVTX1dJRFRIXzMyCQkJMAo+ICAjZGVmaW5lIEJVU19XSURU SF82NAkJCTEKPiBAQCAtNDksNiArNTAsNyBAQAo+ICAjZGVmaW5lIGcyX3BpY19oZWlnaHRfaW5f Y2JzCUcyX0RFQ19SRUcoNCwgNiwgIDB4MWZmZikKPiAgI2RlZmluZSBnMl9udW1fcmVmX2ZyYW1l cwlHMl9ERUNfUkVHKDQsIDAsICAweDFmKQo+ICAKPiArI2RlZmluZSBnMl9zdGFydF9iaXQJCUcy X0RFQ19SRUcoNSwgMjUsIDB4N2YpCj4gICNkZWZpbmUgZzJfc2NhbGluZ19saXN0X2UJRzJfREVD X1JFRyg1LCAyNCwgMHgxKQo+ICAjZGVmaW5lIGcyX2NiX3FwX29mZnNldAkJRzJfREVDX1JFRyg1 LCAxOSwgMHgxZikKPiAgI2RlZmluZSBnMl9jcl9xcF9vZmZzZXQJCUcyX0RFQ19SRUcoNSwgMTQs IDB4MWYpCj4gQEAgLTg0LDYgKzg2LDcgQEAKPiAgI2RlZmluZSBnMl9iaXRfZGVwdGhfeV9taW51 czgJRzJfREVDX1JFRyg4LCA2LCAgMHgzKQo+ICAjZGVmaW5lIGcyX2JpdF9kZXB0aF9jX21pbnVz OAlHMl9ERUNfUkVHKDgsIDQsICAweDMpCj4gICNkZWZpbmUgZzJfb3V0cHV0XzhfYml0cwlHMl9E RUNfUkVHKDgsIDMsICAweDEpCj4gKyNkZWZpbmUgZzJfb3V0cHV0X2Zvcm1hdAlHMl9ERUNfUkVH KDgsIDAsICAweDcpCj4gIAo+ICAjZGVmaW5lIGcyX3JlZmlkeDFfYWN0aXZlCUcyX0RFQ19SRUco OSwgMTksIDB4MWYpCj4gICNkZWZpbmUgZzJfcmVmaWR4MF9hY3RpdmUJRzJfREVDX1JFRyg5LCAx NCwgMHgxZikKPiBAQCAtOTYsNiArOTksMTQgQEAKPiAgI2RlZmluZSBnMl90aWxlX2UJCUcyX0RF Q19SRUcoMTAsIDEsICAweDEpCj4gICNkZWZpbmUgZzJfZW50cm9weV9zeW5jX2UJRzJfREVDX1JF RygxMCwgMCwgIDB4MSkKPiAgCj4gKyNkZWZpbmUgdnA5X3RyYW5zZm9ybV9tb2RlCUcyX0RFQ19S RUcoMTEsIDI3LCAweDcpCj4gKyNkZWZpbmUgdnA5X2ZpbHRfc2hhcnBuZXNzCUcyX0RFQ19SRUco MTEsIDIxLCAweDcpCj4gKyNkZWZpbmUgdnA5X21jb21wX2ZpbHRfdHlwZQlHMl9ERUNfUkVHKDEx LCAgOCwgMHg3KQo+ICsjZGVmaW5lIHZwOV9oaWdoX3ByZWNfbXZfZQlHMl9ERUNfUkVHKDExLCAg NywgMHgxKQo+ICsjZGVmaW5lIHZwOV9jb21wX3ByZWRfbW9kZQlHMl9ERUNfUkVHKDExLCAgNCwg MHgzKQo+ICsjZGVmaW5lIHZwOV9ncmVmX3NpZ25fYmlhcwlHMl9ERUNfUkVHKDExLCAgMiwgMHgx KQo+ICsjZGVmaW5lIHZwOV9hcmVmX3NpZ25fYmlhcwlHMl9ERUNfUkVHKDExLCAgMCwgMHgxKQo+ ICsKPiAgI2RlZmluZSBnMl9yZWZlcl9sdGVybV9lCUcyX0RFQ19SRUcoMTIsIDE2LCAweGZmZmYp Cj4gICNkZWZpbmUgZzJfbWluX2NiX3NpemUJCUcyX0RFQ19SRUcoMTIsIDEzLCAweDcpCj4gICNk ZWZpbmUgZzJfbWF4X2NiX3NpemUJCUcyX0RFQ19SRUcoMTIsIDEwLCAweDcpCj4gQEAgLTE1NCw2 ICsxNjUsNTAgQEAKPiAgI2RlZmluZSBnMl9wYXJ0aWFsX2N0Yl95CUcyX0RFQ19SRUcoMjAsIDMw LCAweDEpCj4gICNkZWZpbmUgZzJfcGljX3dpZHRoXzR4NAlHMl9ERUNfUkVHKDIwLCAxNiwgMHhm ZmYpCj4gICNkZWZpbmUgZzJfcGljX2hlaWdodF80eDQJRzJfREVDX1JFRygyMCwgMCwgIDB4ZmZm KQo+ICsKPiArI2RlZmluZSB2cDlfcXBfZGVsdGFfeV9kYwlHMl9ERUNfUkVHKDEzLCAyMywgMHgz ZikKPiArI2RlZmluZSB2cDlfcXBfZGVsdGFfY2hfZGMJRzJfREVDX1JFRygxMywgMTcsIDB4M2Yp Cj4gKyNkZWZpbmUgdnA5X3FwX2RlbHRhX2NoX2FjCUcyX0RFQ19SRUcoMTMsIDExLCAweDNmKQo+ ICsjZGVmaW5lIHZwOV9sYXN0X3NpZ25fYmlhcwlHMl9ERUNfUkVHKDEzLCAxMCwgMHgxKQo+ICsj ZGVmaW5lIHZwOV9sb3NzbGVzc19lCQlHMl9ERUNfUkVHKDEzLCAgOSwgMHgxKQo+ICsjZGVmaW5l IHZwOV9jb21wX3ByZWRfdmFyX3JlZjEJRzJfREVDX1JFRygxMywgIDcsIDB4MykKPiArI2RlZmlu ZSB2cDlfY29tcF9wcmVkX3Zhcl9yZWYwCUcyX0RFQ19SRUcoMTMsICA1LCAweDMpCj4gKyNkZWZp bmUgdnA5X2NvbXBfcHJlZF9maXhlZF9yZWYJRzJfREVDX1JFRygxMywgIDMsIDB4MykKPiArI2Rl ZmluZSB2cDlfc2VnbWVudF90ZW1wX3VwZF9lCUcyX0RFQ19SRUcoMTMsICAyLCAweDEpCj4gKyNk ZWZpbmUgdnA5X3NlZ21lbnRfdXBkX2UJRzJfREVDX1JFRygxMywgIDEsIDB4MSkKPiArI2RlZmlu ZSB2cDlfc2VnbWVudF9lCQlHMl9ERUNfUkVHKDEzLCAgMCwgMHgxKQo+ICsKPiArI2RlZmluZSB2 cDlfZmlsdF9sZXZlbAkJRzJfREVDX1JFRygxNCwgMTgsIDB4M2YpCj4gKyNkZWZpbmUgdnA5X3Jl ZnBpY19zZWcwCQlHMl9ERUNfUkVHKDE0LCAxNSwgMHg3KQo+ICsjZGVmaW5lIHZwOV9za2lwX3Nl ZzAJCUcyX0RFQ19SRUcoMTQsIDE0LCAweDEpCj4gKyNkZWZpbmUgdnA5X2ZpbHRfbGV2ZWxfc2Vn MAlHMl9ERUNfUkVHKDE0LCAgOCwgMHgzZikKPiArI2RlZmluZSB2cDlfcXVhbnRfc2VnMAkJRzJf REVDX1JFRygxNCwgIDAsIDB4ZmYpCj4gKwo+ICsjZGVmaW5lIHZwOV9yZWZwaWNfc2VnMQkJRzJf REVDX1JFRygxNSwgMTUsIDB4NykKPiArI2RlZmluZSB2cDlfc2tpcF9zZWcxCQlHMl9ERUNfUkVH KDE1LCAxNCwgMHgxKQo+ICsjZGVmaW5lIHZwOV9maWx0X2xldmVsX3NlZzEJRzJfREVDX1JFRygx NSwgIDgsIDB4M2YpCj4gKyNkZWZpbmUgdnA5X3F1YW50X3NlZzEJCUcyX0RFQ19SRUcoMTUsICAw LCAweGZmKQo+ICsKPiArI2RlZmluZSB2cDlfcmVmcGljX3NlZzIJCUcyX0RFQ19SRUcoMTYsIDE1 LCAweDcpCj4gKyNkZWZpbmUgdnA5X3NraXBfc2VnMgkJRzJfREVDX1JFRygxNiwgMTQsIDB4MSkK PiArI2RlZmluZSB2cDlfZmlsdF9sZXZlbF9zZWcyCUcyX0RFQ19SRUcoMTYsICA4LCAweDNmKQo+ ICsjZGVmaW5lIHZwOV9xdWFudF9zZWcyCQlHMl9ERUNfUkVHKDE2LCAgMCwgMHhmZikKPiArCj4g KyNkZWZpbmUgdnA5X3JlZnBpY19zZWczCQlHMl9ERUNfUkVHKDE3LCAxNSwgMHg3KQo+ICsjZGVm aW5lIHZwOV9za2lwX3NlZzMJCUcyX0RFQ19SRUcoMTcsIDE0LCAweDEpCj4gKyNkZWZpbmUgdnA5 X2ZpbHRfbGV2ZWxfc2VnMwlHMl9ERUNfUkVHKDE3LCAgOCwgMHgzZikKPiArI2RlZmluZSB2cDlf cXVhbnRfc2VnMwkJRzJfREVDX1JFRygxNywgIDAsIDB4ZmYpCj4gKwo+ICsjZGVmaW5lIHZwOV9y ZWZwaWNfc2VnNAkJRzJfREVDX1JFRygxOCwgMTUsIDB4NykKPiArI2RlZmluZSB2cDlfc2tpcF9z ZWc0CQlHMl9ERUNfUkVHKDE4LCAxNCwgMHgxKQo+ICsjZGVmaW5lIHZwOV9maWx0X2xldmVsX3Nl ZzQJRzJfREVDX1JFRygxOCwgIDgsIDB4M2YpCj4gKyNkZWZpbmUgdnA5X3F1YW50X3NlZzQJCUcy X0RFQ19SRUcoMTgsICAwLCAweGZmKQo+ICsKPiArI2RlZmluZSB2cDlfcmVmcGljX3NlZzUJCUcy X0RFQ19SRUcoMTksIDE1LCAweDcpCj4gKyNkZWZpbmUgdnA5X3NraXBfc2VnNQkJRzJfREVDX1JF RygxOSwgMTQsIDB4MSkKPiArI2RlZmluZSB2cDlfZmlsdF9sZXZlbF9zZWc1CUcyX0RFQ19SRUco MTksICA4LCAweDNmKQo+ICsjZGVmaW5lIHZwOV9xdWFudF9zZWc1CQlHMl9ERUNfUkVHKDE5LCAg MCwgMHhmZikKPiArCj4gICNkZWZpbmUgaGV2Y19jdXJfcG9jXzAwCQlHMl9ERUNfUkVHKDQ2LCAy NCwgMHhmZikKPiAgI2RlZmluZSBoZXZjX2N1cl9wb2NfMDEJCUcyX0RFQ19SRUcoNDYsIDE2LCAw eGZmKQo+ICAjZGVmaW5lIGhldmNfY3VyX3BvY18wMgkJRzJfREVDX1JFRyg0NiwgOCwgIDB4ZmYp Cj4gQEAgLTE3NCw2ICsyMjksNDQgQEAKPiAgI2RlZmluZSBoZXZjX2N1cl9wb2NfMTQJCUcyX0RF Q19SRUcoNDksIDgsICAweGZmKQo+ICAjZGVmaW5lIGhldmNfY3VyX3BvY18xNQkJRzJfREVDX1JF Ryg0OSwgMCwgIDB4ZmYpCj4gIAo+ICsjZGVmaW5lIHZwOV9yZWZwaWNfc2VnNgkJRzJfREVDX1JF RygzMSwgMTUsIDB4NykKPiArI2RlZmluZSB2cDlfc2tpcF9zZWc2CQlHMl9ERUNfUkVHKDMxLCAx NCwgMHgxKQo+ICsjZGVmaW5lIHZwOV9maWx0X2xldmVsX3NlZzYJRzJfREVDX1JFRygzMSwgIDgs IDB4M2YpCj4gKyNkZWZpbmUgdnA5X3F1YW50X3NlZzYJCUcyX0RFQ19SRUcoMzEsICAwLCAweGZm KQo+ICsKPiArI2RlZmluZSB2cDlfcmVmcGljX3NlZzcJCUcyX0RFQ19SRUcoMzIsIDE1LCAweDcp Cj4gKyNkZWZpbmUgdnA5X3NraXBfc2VnNwkJRzJfREVDX1JFRygzMiwgMTQsIDB4MSkKPiArI2Rl ZmluZSB2cDlfZmlsdF9sZXZlbF9zZWc3CUcyX0RFQ19SRUcoMzIsICA4LCAweDNmKQo+ICsjZGVm aW5lIHZwOV9xdWFudF9zZWc3CQlHMl9ERUNfUkVHKDMyLCAgMCwgMHhmZikKPiArCj4gKyNkZWZp bmUgdnA5X2xyZWZfd2lkdGgJCUcyX0RFQ19SRUcoMzMsIDE2LCAweGZmZmYpCj4gKyNkZWZpbmUg dnA5X2xyZWZfaGVpZ2h0CQlHMl9ERUNfUkVHKDMzLCAgMCwgMHhmZmZmKQo+ICsKPiArI2RlZmlu ZSB2cDlfZ3JlZl93aWR0aAkJRzJfREVDX1JFRygzNCwgMTYsIDB4ZmZmZikKPiArI2RlZmluZSB2 cDlfZ3JlZl9oZWlnaHQJCUcyX0RFQ19SRUcoMzQsICAwLCAweGZmZmYpCj4gKwo+ICsjZGVmaW5l IHZwOV9hcmVmX3dpZHRoCQlHMl9ERUNfUkVHKDM1LCAxNiwgMHhmZmZmKQo+ICsjZGVmaW5lIHZw OV9hcmVmX2hlaWdodAkJRzJfREVDX1JFRygzNSwgIDAsIDB4ZmZmZikKPiArCj4gKyNkZWZpbmUg dnA5X2xyZWZfaG9yX3NjYWxlCUcyX0RFQ19SRUcoMzYsIDE2LCAweGZmZmYpCj4gKyNkZWZpbmUg dnA5X2xyZWZfdmVyX3NjYWxlCUcyX0RFQ19SRUcoMzYsICAwLCAweGZmZmYpCj4gKwo+ICsjZGVm aW5lIHZwOV9ncmVmX2hvcl9zY2FsZQlHMl9ERUNfUkVHKDM3LCAxNiwgMHhmZmZmKQo+ICsjZGVm aW5lIHZwOV9ncmVmX3Zlcl9zY2FsZQlHMl9ERUNfUkVHKDM3LCAgMCwgMHhmZmZmKQo+ICsKPiAr I2RlZmluZSB2cDlfYXJlZl9ob3Jfc2NhbGUJRzJfREVDX1JFRygzOCwgMTYsIDB4ZmZmZikKPiAr I2RlZmluZSB2cDlfYXJlZl92ZXJfc2NhbGUJRzJfREVDX1JFRygzOCwgIDAsIDB4ZmZmZikKPiAr Cj4gKyNkZWZpbmUgdnA5X2ZpbHRfcmVmX2Fkal8wCUcyX0RFQ19SRUcoNDYsIDI0LCAweDdmKQo+ ICsjZGVmaW5lIHZwOV9maWx0X3JlZl9hZGpfMQlHMl9ERUNfUkVHKDQ2LCAxNiwgMHg3ZikKPiAr I2RlZmluZSB2cDlfZmlsdF9yZWZfYWRqXzIJRzJfREVDX1JFRyg0NiwgIDgsIDB4N2YpCj4gKyNk ZWZpbmUgdnA5X2ZpbHRfcmVmX2Fkal8zCUcyX0RFQ19SRUcoNDYsICAwLCAweDdmKQo+ICsKPiAr I2RlZmluZSB2cDlfZmlsdF9tYl9hZGpfMAlHMl9ERUNfUkVHKDQ3LCAyNCwgMHg3ZikKPiArI2Rl ZmluZSB2cDlfZmlsdF9tYl9hZGpfMQlHMl9ERUNfUkVHKDQ3LCAxNiwgMHg3ZikKPiArI2RlZmlu ZSB2cDlfZmlsdF9tYl9hZGpfMglHMl9ERUNfUkVHKDQ3LCAgOCwgMHg3ZikKPiArI2RlZmluZSB2 cDlfZmlsdF9tYl9hZGpfMwlHMl9ERUNfUkVHKDQ3LCAgMCwgMHg3ZikKPiArCj4gICNkZWZpbmUg ZzJfYXBmX3RocmVzaG9sZAlHMl9ERUNfUkVHKDU1LCAwLCAweGZmZmYpCj4gIAo+ICAjZGVmaW5l IGcyX2Nsa19nYXRlX2UJCUcyX0RFQ19SRUcoNTgsIDE2LCAweDEpCj4gQEAgLTE4Niw2ICsyNzks OCBAQAo+ICAKPiAgI2RlZmluZSBHMl9BRERSX0RTVAkJKEcyX1NXUkVHKDY1KSkKPiAgI2RlZmlu ZSBHMl9SRUdfQUREUl9SRUYoaSkJKEcyX1NXUkVHKDY3KSAgKyAoKGkpICogMHg4KSkKPiArI2Rl ZmluZSBWUDlfQUREUl9TRUdNRU5UX1dSSVRFCShHMl9TV1JFRyg3OSkpCj4gKyNkZWZpbmUgVlA5 X0FERFJfU0VHTUVOVF9SRUFECShHMl9TV1JFRyg4MSkpCj4gICNkZWZpbmUgRzJfQUREUl9EU1Rf Q0hSCQkoRzJfU1dSRUcoOTkpKQo+ICAjZGVmaW5lIEcyX1JFR19DSFJfUkVGKGkpCShHMl9TV1JF RygxMDEpICsgKChpKSAqIDB4OCkpCj4gICNkZWZpbmUgRzJfQUREUl9EU1RfTVYJCShHMl9TV1JF RygxMzMpKQo+IEBAIC0xOTMsNiArMjg4LDggQEAKPiAgI2RlZmluZSBHMl9BRERSX1RJTEVfU0la RQkoRzJfU1dSRUcoMTY3KSkKPiAgI2RlZmluZSBHMl9BRERSX1NUUgkJKEcyX1NXUkVHKDE2OSkp Cj4gICNkZWZpbmUgSEVWQ19TQ0FMSU5HX0xJU1QJKEcyX1NXUkVHKDE3MSkpCj4gKyNkZWZpbmUg VlA5X0FERFJfQ1RSCQkoRzJfU1dSRUcoMTcxKSkKPiArI2RlZmluZSBWUDlfQUREUl9QUk9CUwkJ KEcyX1NXUkVHKDE3MykpCj4gICNkZWZpbmUgRzJfUkFTVEVSX1NDQU4JCShHMl9TV1JFRygxNzUp KQo+ICAjZGVmaW5lIEcyX1JBU1RFUl9TQ0FOX0NIUgkoRzJfU1dSRUcoMTc3KSkKPiAgI2RlZmlu ZSBHMl9USUxFX0ZJTFRFUgkJKEcyX1NXUkVHKDE3OSkpCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMv c3RhZ2luZy9tZWRpYS9oYW50cm8vaGFudHJvX2cyX3ZwOV9kZWMuYyBiL2RyaXZlcnMvc3RhZ2lu Zy9tZWRpYS9oYW50cm8vaGFudHJvX2cyX3ZwOV9kZWMuYwo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0 Cj4gaW5kZXggMDAwMDAwMDAwMDAwLi5mMWIyMDc2NjZmYTcKPiAtLS0gL2Rldi9udWxsCj4gKysr IGIvZHJpdmVycy9zdGFnaW5nL21lZGlhL2hhbnRyby9oYW50cm9fZzJfdnA5X2RlYy5jCj4gQEAg LTAsMCArMSw5NzggQEAKPiArLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKPiAr LyoKPiArICogSGFudHJvIFZQOSBjb2RlYyBkcml2ZXIKPiArICoKPiArICogQ29weXJpZ2h0IChD KSAyMDIxIENvbGxhYm9yYSBMdGQuCj4gKyAqLwo+ICsjaW5jbHVkZSAibWVkaWEvdmlkZW9idWYy LWNvcmUuaCIKPiArI2luY2x1ZGUgIm1lZGlhL3ZpZGVvYnVmMi1kbWEtY29udGlnLmgiCj4gKyNp bmNsdWRlICJtZWRpYS92aWRlb2J1ZjItdjRsMi5oIgo+ICsjaW5jbHVkZSA8bGludXgva2VybmVs Lmg+Cj4gKyNpbmNsdWRlIDxsaW51eC92bWFsbG9jLmg+Cj4gKyNpbmNsdWRlIDxtZWRpYS92NGwy LW1lbTJtZW0uaD4KPiArI2luY2x1ZGUgPG1lZGlhL3Y0bDItdnA5Lmg+Cj4gKwo+ICsjaW5jbHVk ZSAiaGFudHJvLmgiCj4gKyNpbmNsdWRlICJoYW50cm9fdnA5LmgiCj4gKyNpbmNsdWRlICJoYW50 cm9fZzJfcmVncy5oIgo+ICsKPiArI2RlZmluZSBHMl9BTElHTiAxNgo+ICsKPiArZW51bSBoYW50 cm9fcmVmX2ZyYW1lcyB7Cj4gKwlJTlRSQV9GUkFNRSA9IDAsCj4gKwlMQVNUX0ZSQU1FID0gMSwK PiArCUdPTERFTl9GUkFNRSA9IDIsCj4gKwlBTFRSRUZfRlJBTUUgPSAzLAo+ICsJTUFYX1JFRl9G UkFNRVMgPSA0Cj4gK307Cj4gKwo+ICtzdGF0aWMgaW50IHN0YXJ0X3ByZXBhcmVfcnVuKHN0cnVj dCBoYW50cm9fY3R4ICpjdHgsIGNvbnN0IHN0cnVjdCB2NGwyX2N0cmxfdnA5X2ZyYW1lICoqZGVj X3BhcmFtcykKPiArewo+ICsJY29uc3Qgc3RydWN0IHY0bDJfY3RybF92cDlfY29tcHJlc3NlZF9o ZHIgKnByb2JfdXBkYXRlczsKPiArCXN0cnVjdCBoYW50cm9fdnA5X2RlY19od19jdHggKnZwOV9j dHggPSAmY3R4LT52cDlfZGVjOwo+ICsJc3RydWN0IHY0bDJfY3RybCAqY3RybDsKPiArCXVuc2ln bmVkIGludCBmY3R4X2lkeDsKPiArCj4gKwkvKiB2NGwyLXNwZWNpZmljIHN0dWZmICovCj4gKwlo YW50cm9fc3RhcnRfcHJlcGFyZV9ydW4oY3R4KTsKPiArCj4gKwljdHJsID0gdjRsMl9jdHJsX2Zp bmQoJmN0eC0+Y3RybF9oYW5kbGVyLCBWNEwyX0NJRF9TVEFURUxFU1NfVlA5X0ZSQU1FKTsKPiAr CWlmIChXQVJOX09OKCFjdHJsKSkKPiArCQlyZXR1cm4gLUVJTlZBTDsKPiArCSpkZWNfcGFyYW1z ID0gY3RybC0+cF9jdXIucDsKPiArCj4gKwljdHJsID0gdjRsMl9jdHJsX2ZpbmQoJmN0eC0+Y3Ry bF9oYW5kbGVyLCBWNEwyX0NJRF9TVEFURUxFU1NfVlA5X0NPTVBSRVNTRURfSERSKTsKPiArCWlm IChXQVJOX09OKCFjdHJsKSkKPiArCQlyZXR1cm4gLUVJTlZBTDsKPiArCXByb2JfdXBkYXRlcyA9 IGN0cmwtPnBfY3VyLnA7Cj4gKwl2cDlfY3R4LT5jdXIudHhfbW9kZSA9IHByb2JfdXBkYXRlcy0+ dHhfbW9kZTsKPiArCj4gKwkvKgo+ICsJICogdnA5IHN0dWZmCj4gKwkgKgo+ICsJICogYnkgdGhp cyBwb2ludCB0aGUgdXNlcnNwYWNlIGhhcyBkb25lIGFsbCBwYXJ0cyBvZiA2LjIgdW5jb21wcmVz c2VkX2hlYWRlcigpCj4gKwkgKiBleGNlcHQgdGhpcyBmcmFnbWVudDoKPiArCSAqIGlmICggRnJh bWVJc0ludHJhIHx8IGVycm9yX3Jlc2lsaWVudF9tb2RlICkgewo+ICsJICoJc2V0dXBfcGFzdF9p bmRlcGVuZGVuY2UgKCApCj4gKwkgKglpZiAoIGZyYW1lX3R5cGUgPT0gS0VZX0ZSQU1FIHx8IGVy cm9yX3Jlc2lsaWVudF9tb2RlID09IDEgfHwKPiArCSAqCSAgICAgcmVzZXRfZnJhbWVfY29udGV4 dCA9PSAzICkgewo+ICsJICoJCWZvciAoIGkgPSAwOyBpIDwgNDsgaSArKyApIHsKPiArCSAqCQkJ c2F2ZV9wcm9icyggaSApCj4gKwkgKgkJfQo+ICsJICoJfSBlbHNlIGlmICggcmVzZXRfZnJhbWVf Y29udGV4dCA9PSAyICkgewo+ICsJICoJCXNhdmVfcHJvYnMoIGZyYW1lX2NvbnRleHRfaWR4ICkK PiArCSAqCX0KPiArCSAqCWZyYW1lX2NvbnRleHRfaWR4ID0gMAo+ICsJICogfQo+ICsJICovCj4g KwlmY3R4X2lkeCA9IHY0bDJfdnA5X3Jlc2V0X2ZyYW1lX2N0eCgqZGVjX3BhcmFtcywgdnA5X2N0 eC0+ZnJhbWVfY29udGV4dCk7Cj4gKwl2cDlfY3R4LT5jdXIuZnJhbWVfY29udGV4dF9pZHggPSBm Y3R4X2lkeDsKPiArCj4gKwkvKiA2LjEgZnJhbWUoc3opOiBsb2FkX3Byb2JzKCkgYW5kIGxvYWRf cHJvYnMyKCkgKi8KPiArCXZwOV9jdHgtPnByb2JhYmlsaXR5X3RhYmxlcyA9IHZwOV9jdHgtPmZy YW1lX2NvbnRleHRbZmN0eF9pZHhdOwo+ICsKPiArCS8qCj4gKwkgKiBUaGUgdXNlcnNwYWNlIGhh cyBhbHNvIHBlcmZvcm1lZCA2LjMgY29tcHJlc3NlZF9oZWFkZXIoKSwgYnV0IGhhbmRsaW5nIHRo ZQo+ICsJICogcHJvYnMgaW4gYSBzcGVjaWFsIHdheS4gQWxsIHByb2JzIHdoaWNoIG5lZWQgdXBk YXRpbmcsIGV4Y2VwdCBNVi1yZWxhdGVkLAo+ICsJICogaGF2ZSBiZWVuIHJlYWQgZnJvbSB0aGUg Yml0c3RyZWFtIGFuZCB0cmFuc2xhdGVkIHRocm91Z2ggaW52X21hcF90YWJsZVtdLAo+ICsJICog YnV0IG5vIDYuMy42IGludl9yZWNlbnRlcl9ub25uZWcodiwgbSkgaGFzIGJlZW4gcGVyZm9ybWVk LiBUaGUgdmFsdWVzIHBhc3NlZAo+ICsJICogYnkgdXNlcnNwYWNlIGFyZSBlaXRoZXIgdHJhbnNs YXRlZCB2YWx1ZXMgKHRoZXJlIGFyZSBubyAwIHZhbHVlcyBpbgo+ICsJICogaW52X21hcF90YWJs ZVtdKSwgb3IgemVybyB0byBpbmRpY2F0ZSBubyB1cGRhdGUuIEFsbCBNVi1yZWxhdGVkIHByb2Jz IHdoaWNoIG5lZWQKPiArCSAqIHVwZGF0aW5nIGhhdmUgYmVlbiByZWFkIGZyb20gdGhlIGJpdHN0 cmVhbSBhbmQgKG12X3Byb2IgPDwgMSkgfCAxIGhhcyBiZWVuCj4gKwkgKiBwZXJmb3JtZWQuIFRo ZSB2YWx1ZXMgcGFzc2VkIGJ5IHVzZXJzcGFjZSBhcmUgZWl0aGVyIG5ldyB2YWx1ZXMKPiArCSAq IHRvIHJlcGxhY2Ugb2xkIG9uZXMgKHRoZSBhYm92ZSBtZW50aW9uZWQgc2hpZnQgYW5kIGJpdHdp c2Ugb3IgbmV2ZXIgcmVzdWx0IGluCj4gKwkgKiBhIHplcm8pIG9yIHplcm8gdG8gaW5kaWNhdGUg bm8gdXBkYXRlLgo+ICsJICogZndfdXBkYXRlX3Byb2JzKCkgcGVyZm9ybXMgYWN0dWFsIHByb2Jz IHVwZGF0ZXMgb3IgbGVhdmVzIHByb2JzIGFzLWlzCj4gKwkgKiBmb3IgdmFsdWVzIGZvciB3aGlj aCBhIHplcm8gd2FzIHBhc3NlZCBmcm9tIHVzZXJzcGFjZS4KPiArCSAqLwo+ICsJdjRsMl92cDlf ZndfdXBkYXRlX3Byb2JzKCZ2cDlfY3R4LT5wcm9iYWJpbGl0eV90YWJsZXMsIHByb2JfdXBkYXRl cywgKmRlY19wYXJhbXMpOwo+ICsKPiArCXJldHVybiAwOwo+ICt9Cj4gKwo+ICtzdGF0aWMgc2l6 ZV90IGNocm9tYV9vZmZzZXQoY29uc3Qgc3RydWN0IGhhbnRyb19jdHggKmN0eCwKPiArCQkJICAg IGNvbnN0IHN0cnVjdCB2NGwyX2N0cmxfdnA5X2ZyYW1lICpkZWNfcGFyYW1zKQo+ICt7Cj4gKwlp bnQgYnl0ZXNfcGVyX3BpeGVsID0gZGVjX3BhcmFtcy0+Yml0X2RlcHRoID09IDggPyAxIDogMjsK PiArCj4gKwlyZXR1cm4gY3R4LT5zcmNfZm10LndpZHRoICogY3R4LT5zcmNfZm10LmhlaWdodCAq IGJ5dGVzX3Blcl9waXhlbDsKPiArfQo+ICsKPiArc3RhdGljIHNpemVfdCBtdl9vZmZzZXQoY29u c3Qgc3RydWN0IGhhbnRyb19jdHggKmN0eCwKPiArCQkJY29uc3Qgc3RydWN0IHY0bDJfY3RybF92 cDlfZnJhbWUgKmRlY19wYXJhbXMpCj4gK3sKPiArCXNpemVfdCBjcl9vZmZzZXQgPSBjaHJvbWFf b2Zmc2V0KGN0eCwgZGVjX3BhcmFtcyk7Cj4gKwo+ICsJcmV0dXJuIEFMSUdOKChjcl9vZmZzZXQg KiAzKSAvIDIsIEcyX0FMSUdOKTsKPiArfQo+ICsKPiArc3RhdGljIHN0cnVjdCBoYW50cm9fZGVj b2RlZF9idWZmZXIgKgo+ICtnZXRfcmVmX2J1ZihzdHJ1Y3QgaGFudHJvX2N0eCAqY3R4LCBzdHJ1 Y3QgdmIyX3Y0bDJfYnVmZmVyICpkc3QsIHU2NCB0aW1lc3RhbXApCj4gK3sKPiArCXN0cnVjdCB2 NGwyX20ybV9jdHggKm0ybV9jdHggPSBjdHgtPmZoLm0ybV9jdHg7Cj4gKwlzdHJ1Y3QgdmIyX3F1 ZXVlICpjYXBfcSA9ICZtMm1fY3R4LT5jYXBfcV9jdHgucTsKPiArCWludCBidWZfaWR4Owo+ICsK PiArCS8qCj4gKwkgKiBJZiBhIHJlZiBpcyB1bnVzZWQgb3IgaW52YWxpZCwgYWRkcmVzcyBvZiBj dXJyZW50IGRlc3RpbmF0aW9uCj4gKwkgKiBidWZmZXIgaXMgcmV0dXJuZWQuCj4gKwkgKi8KPiAr CWJ1Zl9pZHggPSB2YjJfZmluZF90aW1lc3RhbXAoY2FwX3EsIHRpbWVzdGFtcCwgMCk7Cj4gKwlp ZiAoYnVmX2lkeCA8IDApCj4gKwkJcmV0dXJuIHZiMl90b19oYW50cm9fZGVjb2RlZF9idWYoJmRz dC0+dmIyX2J1Zik7Cj4gKwo+ICsJcmV0dXJuIHZiMl90b19oYW50cm9fZGVjb2RlZF9idWYodmIy X2dldF9idWZmZXIoY2FwX3EsIGJ1Zl9pZHgpKTsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgdXBk YXRlX2RlY19idWZfaW5mbyhzdHJ1Y3QgaGFudHJvX2RlY29kZWRfYnVmZmVyICpidWYsCj4gKwkJ CQljb25zdCBzdHJ1Y3QgdjRsMl9jdHJsX3ZwOV9mcmFtZSAqZGVjX3BhcmFtcykKPiArewo+ICsJ YnVmLT52cDkud2lkdGggPSBkZWNfcGFyYW1zLT5mcmFtZV93aWR0aF9taW51c18xICsgMTsKPiAr CWJ1Zi0+dnA5LmhlaWdodCA9IGRlY19wYXJhbXMtPmZyYW1lX2hlaWdodF9taW51c18xICsgMTsK PiArCWJ1Zi0+dnA5LmJpdF9kZXB0aCA9IGRlY19wYXJhbXMtPmJpdF9kZXB0aDsKPiArfQo+ICsK PiArc3RhdGljIHZvaWQgdXBkYXRlX2N0eF9jdXJfaW5mbyhzdHJ1Y3QgaGFudHJvX3ZwOV9kZWNf aHdfY3R4ICp2cDlfY3R4LAo+ICsJCQkJc3RydWN0IGhhbnRyb19kZWNvZGVkX2J1ZmZlciAqYnVm LAo+ICsJCQkJY29uc3Qgc3RydWN0IHY0bDJfY3RybF92cDlfZnJhbWUgKmRlY19wYXJhbXMpCj4g K3sKPiArCXZwOV9jdHgtPmN1ci52YWxpZCA9IHRydWU7Cj4gKwl2cDlfY3R4LT5jdXIucmVmZXJl bmNlX21vZGUgPSBkZWNfcGFyYW1zLT5yZWZlcmVuY2VfbW9kZTsKPiArCXZwOV9jdHgtPmN1ci5p bnRlcnBvbGF0aW9uX2ZpbHRlciA9IGRlY19wYXJhbXMtPmludGVycG9sYXRpb25fZmlsdGVyOwo+ ICsJdnA5X2N0eC0+Y3VyLmZsYWdzID0gZGVjX3BhcmFtcy0+ZmxhZ3M7Cj4gKwl2cDlfY3R4LT5j dXIudGltZXN0YW1wID0gYnVmLT5iYXNlLnZiLnZiMl9idWYudGltZXN0YW1wOwo+ICt9Cj4gKwo+ ICtzdGF0aWMgdm9pZCBjb25maWdfb3V0cHV0KHN0cnVjdCBoYW50cm9fY3R4ICpjdHgsCj4gKwkJ CSAgc3RydWN0IGhhbnRyb19kZWNvZGVkX2J1ZmZlciAqZHN0LAo+ICsJCQkgIGNvbnN0IHN0cnVj dCB2NGwyX2N0cmxfdnA5X2ZyYW1lICpkZWNfcGFyYW1zKQo+ICt7Cj4gKwlkbWFfYWRkcl90IGx1 bWFfYWRkciwgY2hyb21hX2FkZHIsIG12X2FkZHI7Cj4gKwo+ICsJaGFudHJvX3JlZ193cml0ZShj dHgtPmRldiwgJmcyX291dF9kaXMsIDApOwo+ICsJaGFudHJvX3JlZ193cml0ZShjdHgtPmRldiwg JmcyX291dHB1dF9mb3JtYXQsIDApOwo+ICsKPiArCWx1bWFfYWRkciA9IHZiMl9kbWFfY29udGln X3BsYW5lX2RtYV9hZGRyKCZkc3QtPmJhc2UudmIudmIyX2J1ZiwgMCk7Cj4gKwloYW50cm9fd3Jp dGVfYWRkcihjdHgtPmRldiwgRzJfQUREUl9EU1QsIGx1bWFfYWRkcik7Cj4gKwo+ICsJY2hyb21h X2FkZHIgPSBsdW1hX2FkZHIgKyBjaHJvbWFfb2Zmc2V0KGN0eCwgZGVjX3BhcmFtcyk7Cj4gKwlo YW50cm9fd3JpdGVfYWRkcihjdHgtPmRldiwgRzJfQUREUl9EU1RfQ0hSLCBjaHJvbWFfYWRkcik7 Cj4gKwo+ICsJbXZfYWRkciA9IGx1bWFfYWRkciArIG12X29mZnNldChjdHgsIGRlY19wYXJhbXMp Owo+ICsJaGFudHJvX3dyaXRlX2FkZHIoY3R4LT5kZXYsIEcyX0FERFJfRFNUX01WLCBtdl9hZGRy KTsKPiArfQo+ICsKPiArc3RydWN0IGhhbnRyb192cDlfcmVmX3JlZyB7Cj4gKwljb25zdCBzdHJ1 Y3QgaGFudHJvX3JlZyB3aWR0aDsKPiArCWNvbnN0IHN0cnVjdCBoYW50cm9fcmVnIGhlaWdodDsK PiArCWNvbnN0IHN0cnVjdCBoYW50cm9fcmVnIGhvcl9zY2FsZTsKPiArCWNvbnN0IHN0cnVjdCBo YW50cm9fcmVnIHZlcl9zY2FsZTsKPiArCXUzMiB5X2Jhc2U7Cj4gKwl1MzIgY19iYXNlOwo+ICt9 Owo+ICsKPiArc3RhdGljIHZvaWQgY29uZmlnX3JlZihzdHJ1Y3QgaGFudHJvX2N0eCAqY3R4LAo+ ICsJCSAgICAgICBzdHJ1Y3QgaGFudHJvX2RlY29kZWRfYnVmZmVyICpkc3QsCj4gKwkJICAgICAg IGNvbnN0IHN0cnVjdCBoYW50cm9fdnA5X3JlZl9yZWcgKnJlZl9yZWcsCj4gKwkJICAgICAgIGNv bnN0IHN0cnVjdCB2NGwyX2N0cmxfdnA5X2ZyYW1lICpkZWNfcGFyYW1zLAo+ICsJCSAgICAgICB1 NjQgcmVmX3RzKQo+ICt7Cj4gKwlzdHJ1Y3QgaGFudHJvX2RlY29kZWRfYnVmZmVyICpidWY7Cj4g KwlkbWFfYWRkcl90IGx1bWFfYWRkciwgY2hyb21hX2FkZHI7Cj4gKwl1MzIgcmVmdywgcmVmaDsK PiArCj4gKwlidWYgPSBnZXRfcmVmX2J1ZihjdHgsICZkc3QtPmJhc2UudmIsIHJlZl90cyk7Cj4g KwlyZWZ3ID0gYnVmLT52cDkud2lkdGg7Cj4gKwlyZWZoID0gYnVmLT52cDkuaGVpZ2h0Owo+ICsK PiArCWhhbnRyb19yZWdfd3JpdGUoY3R4LT5kZXYsICZyZWZfcmVnLT53aWR0aCwgcmVmdyk7Cj4g KwloYW50cm9fcmVnX3dyaXRlKGN0eC0+ZGV2LCAmcmVmX3JlZy0+aGVpZ2h0LCByZWZoKTsKPiAr Cj4gKwloYW50cm9fcmVnX3dyaXRlKGN0eC0+ZGV2LCAmcmVmX3JlZy0+aG9yX3NjYWxlLCAocmVm dyA8PCAxNCkgLyBkc3QtPnZwOS53aWR0aCk7Cj4gKwloYW50cm9fcmVnX3dyaXRlKGN0eC0+ZGV2 LCAmcmVmX3JlZy0+dmVyX3NjYWxlLCAocmVmaCA8PCAxNCkgLyBkc3QtPnZwOS5oZWlnaHQpOwo+ ICsKPiArCWx1bWFfYWRkciA9IHZiMl9kbWFfY29udGlnX3BsYW5lX2RtYV9hZGRyKCZidWYtPmJh c2UudmIudmIyX2J1ZiwgMCk7Cj4gKwloYW50cm9fd3JpdGVfYWRkcihjdHgtPmRldiwgcmVmX3Jl Zy0+eV9iYXNlLCBsdW1hX2FkZHIpOwo+ICsKPiArCWNocm9tYV9hZGRyID0gbHVtYV9hZGRyICsg Y2hyb21hX29mZnNldChjdHgsIGRlY19wYXJhbXMpOwo+ICsJaGFudHJvX3dyaXRlX2FkZHIoY3R4 LT5kZXYsIHJlZl9yZWctPmNfYmFzZSwgY2hyb21hX2FkZHIpOwo+ICt9Cj4gKwo+ICtzdGF0aWMg dm9pZCBjb25maWdfcmVmX3JlZ2lzdGVycyhzdHJ1Y3QgaGFudHJvX2N0eCAqY3R4LAo+ICsJCQkJ IGNvbnN0IHN0cnVjdCB2NGwyX2N0cmxfdnA5X2ZyYW1lICpkZWNfcGFyYW1zLAo+ICsJCQkJIHN0 cnVjdCBoYW50cm9fZGVjb2RlZF9idWZmZXIgKmRzdCwKPiArCQkJCSBzdHJ1Y3QgaGFudHJvX2Rl Y29kZWRfYnVmZmVyICptdl9yZWYpCj4gK3sKPiArCXN0YXRpYyBjb25zdCBzdHJ1Y3QgaGFudHJv X3ZwOV9yZWZfcmVnIHJlZl9yZWdzW10gPSB7Cj4gKwkJewo+ICsJCQkvKiBMYXN0ICovCj4gKwkJ CS53aWR0aCA9IHZwOV9scmVmX3dpZHRoLAo+ICsJCQkuaGVpZ2h0ID0gdnA5X2xyZWZfaGVpZ2h0 LAo+ICsJCQkuaG9yX3NjYWxlID0gdnA5X2xyZWZfaG9yX3NjYWxlLAo+ICsJCQkudmVyX3NjYWxl ID0gdnA5X2xyZWZfdmVyX3NjYWxlLAo+ICsJCQkueV9iYXNlID0gRzJfUkVHX0FERFJfUkVGKDAp LAo+ICsJCQkuY19iYXNlID0gRzJfUkVHX0NIUl9SRUYoMCksCj4gKwkJfSwgewo+ICsJCQkvKiBH b2xkZW4gKi8KPiArCQkJLndpZHRoID0gdnA5X2dyZWZfd2lkdGgsCj4gKwkJCS5oZWlnaHQgPSB2 cDlfZ3JlZl9oZWlnaHQsCj4gKwkJCS5ob3Jfc2NhbGUgPSB2cDlfZ3JlZl9ob3Jfc2NhbGUsCj4g KwkJCS52ZXJfc2NhbGUgPSB2cDlfZ3JlZl92ZXJfc2NhbGUsCj4gKwkJCS55X2Jhc2UgPSBHMl9S RUdfQUREUl9SRUYoNCksCj4gKwkJCS5jX2Jhc2UgPSBHMl9SRUdfQ0hSX1JFRig0KSwKPiArCQl9 LCB7Cj4gKwkJCS8qIEFsdHJlZiAqLwo+ICsJCQkud2lkdGggPSB2cDlfYXJlZl93aWR0aCwKPiAr CQkJLmhlaWdodCA9IHZwOV9hcmVmX2hlaWdodCwKPiArCQkJLmhvcl9zY2FsZSA9IHZwOV9hcmVm X2hvcl9zY2FsZSwKPiArCQkJLnZlcl9zY2FsZSA9IHZwOV9hcmVmX3Zlcl9zY2FsZSwKPiArCQkJ LnlfYmFzZSA9IEcyX1JFR19BRERSX1JFRig1KSwKPiArCQkJLmNfYmFzZSA9IEcyX1JFR19DSFJf UkVGKDUpLAo+ICsJCX0sCj4gKwl9Owo+ICsJZG1hX2FkZHJfdCBtdl9hZGRyOwo+ICsKPiArCWNv bmZpZ19yZWYoY3R4LCBkc3QsICZyZWZfcmVnc1swXSwgZGVjX3BhcmFtcywgZGVjX3BhcmFtcy0+ bGFzdF9mcmFtZV90cyk7Cj4gKwljb25maWdfcmVmKGN0eCwgZHN0LCAmcmVmX3JlZ3NbMV0sIGRl Y19wYXJhbXMsIGRlY19wYXJhbXMtPmdvbGRlbl9mcmFtZV90cyk7Cj4gKwljb25maWdfcmVmKGN0 eCwgZHN0LCAmcmVmX3JlZ3NbMl0sIGRlY19wYXJhbXMsIGRlY19wYXJhbXMtPmFsdF9mcmFtZV90 cyk7Cj4gKwo+ICsJbXZfYWRkciA9IHZiMl9kbWFfY29udGlnX3BsYW5lX2RtYV9hZGRyKCZtdl9y ZWYtPmJhc2UudmIudmIyX2J1ZiwgMCkgKwo+ICsJCSAgbXZfb2Zmc2V0KGN0eCwgZGVjX3BhcmFt cyk7Cj4gKwloYW50cm9fd3JpdGVfYWRkcihjdHgtPmRldiwgRzJfUkVHX0RNVl9SRUYoMCksIG12 X2FkZHIpOwo+ICsKPiArCWhhbnRyb19yZWdfd3JpdGUoY3R4LT5kZXYsICZ2cDlfbGFzdF9zaWdu X2JpYXMsCj4gKwkJCSBkZWNfcGFyYW1zLT5yZWZfZnJhbWVfc2lnbl9iaWFzICYgVjRMMl9WUDlf U0lHTl9CSUFTX0xBU1QgPyAxIDogMCk7Cj4gKwo+ICsJaGFudHJvX3JlZ193cml0ZShjdHgtPmRl diwgJnZwOV9ncmVmX3NpZ25fYmlhcywKPiArCQkJIGRlY19wYXJhbXMtPnJlZl9mcmFtZV9zaWdu X2JpYXMgJiBWNEwyX1ZQOV9TSUdOX0JJQVNfR09MREVOID8gMSA6IDApOwo+ICsKPiArCWhhbnRy b19yZWdfd3JpdGUoY3R4LT5kZXYsICZ2cDlfYXJlZl9zaWduX2JpYXMsCj4gKwkJCSBkZWNfcGFy YW1zLT5yZWZfZnJhbWVfc2lnbl9iaWFzICYgVjRMMl9WUDlfU0lHTl9CSUFTX0FMVCA/IDEgOiAw KTsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgcmVjb21wdXRlX3RpbGVfaW5mbyh1bnNpZ25lZCBz aG9ydCAqdGlsZV9pbmZvLCB1bnNpZ25lZCBpbnQgdGlsZXMsIHVuc2lnbmVkIGludCBzYnMpCj4g K3sKPiArCWludCBpOwo+ICsJdW5zaWduZWQgaW50IGFjY3VtdWxhdGVkID0gMDsKPiArCXVuc2ln bmVkIGludCBuZXh0X2FjY3VtdWxhdGVkOwo+ICsKPiArCWZvciAoaSA9IDE7IGkgPD0gdGlsZXM7 ICsraSkgewo+ICsJCW5leHRfYWNjdW11bGF0ZWQgPSBpICogc2JzIC8gdGlsZXM7Cj4gKwkJKnRp bGVfaW5mbysrID0gbmV4dF9hY2N1bXVsYXRlZCAtIGFjY3VtdWxhdGVkOwo+ICsJCWFjY3VtdWxh dGVkID0gbmV4dF9hY2N1bXVsYXRlZDsKPiArCX0KPiArfQo+ICsKPiArc3RhdGljIHZvaWQKPiAr cmVjb21wdXRlX3RpbGVfcmNfaW5mbyhzdHJ1Y3QgaGFudHJvX2N0eCAqY3R4LAo+ICsJCSAgICAg ICB1bnNpZ25lZCBpbnQgdGlsZV9yLCB1bnNpZ25lZCBpbnQgdGlsZV9jLAo+ICsJCSAgICAgICB1 bnNpZ25lZCBpbnQgc2JzX3IsIHVuc2lnbmVkIGludCBzYnNfYykKPiArewo+ICsJc3RydWN0IGhh bnRyb192cDlfZGVjX2h3X2N0eCAqdnA5X2N0eCA9ICZjdHgtPnZwOV9kZWM7Cj4gKwo+ICsJcmVj b21wdXRlX3RpbGVfaW5mbyh2cDlfY3R4LT50aWxlX3JfaW5mbywgdGlsZV9yLCBzYnNfcik7Cj4g KwlyZWNvbXB1dGVfdGlsZV9pbmZvKHZwOV9jdHgtPnRpbGVfY19pbmZvLCB0aWxlX2MsIHNic19j KTsKPiArCj4gKwl2cDlfY3R4LT5sYXN0X3RpbGVfciA9IHRpbGVfcjsKPiArCXZwOV9jdHgtPmxh c3RfdGlsZV9jID0gdGlsZV9jOwo+ICsJdnA5X2N0eC0+bGFzdF9zYnNfciA9IHNic19yOwo+ICsJ dnA5X2N0eC0+bGFzdF9zYnNfYyA9IHNic19jOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW5saW5lIHVu c2lnbmVkIGludCBmaXJzdF90aWxlX3Jvdyh1bnNpZ25lZCBpbnQgdGlsZV9yLCB1bnNpZ25lZCBp bnQgc2JzX3IpCj4gK3sKPiArCWlmICh0aWxlX3IgPT0gc2JzX3IgKyAxKQo+ICsJCXJldHVybiAx Owo+ICsKPiArCWlmICh0aWxlX3IgPT0gc2JzX3IgKyAyKQo+ICsJCXJldHVybiAyOwo+ICsKPiAr CXJldHVybiAwOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZAo+ICtmaWxsX3RpbGVfaW5mbyhzdHJ1 Y3QgaGFudHJvX2N0eCAqY3R4LAo+ICsJICAgICAgIHVuc2lnbmVkIGludCB0aWxlX3IsIHVuc2ln bmVkIGludCB0aWxlX2MsCj4gKwkgICAgICAgdW5zaWduZWQgaW50IHNic19yLCB1bnNpZ25lZCBp bnQgc2JzX2MsCj4gKwkgICAgICAgdW5zaWduZWQgc2hvcnQgKnRpbGVfbWVtKQo+ICt7Cj4gKwlz dHJ1Y3QgaGFudHJvX3ZwOV9kZWNfaHdfY3R4ICp2cDlfY3R4ID0gJmN0eC0+dnA5X2RlYzsKPiAr CXVuc2lnbmVkIGludCBpLCBqOwo+ICsJYm9vbCBmaXJzdCA9IHRydWU7Cj4gKwo+ICsJZm9yIChp ID0gZmlyc3RfdGlsZV9yb3codGlsZV9yLCBzYnNfcik7IGkgPCB0aWxlX3I7ICsraSkgewo+ICsJ CXVuc2lnbmVkIHNob3J0IHJfaW5mbyA9IHZwOV9jdHgtPnRpbGVfcl9pbmZvW2ldOwo+ICsKPiAr CQlpZiAoZmlyc3QpIHsKPiArCQkJaWYgKGkgPiAwKQo+ICsJCQkJcl9pbmZvICs9IHZwOV9jdHgt PnRpbGVfcl9pbmZvWzBdOwo+ICsJCQlpZiAoaSA9PSAyKQo+ICsJCQkJcl9pbmZvICs9IHZwOV9j dHgtPnRpbGVfcl9pbmZvWzFdOwo+ICsJCQlmaXJzdCA9IGZhbHNlOwo+ICsJCX0KPiArCQlmb3Ig KGogPSAwOyBqIDwgdGlsZV9jOyArK2opIHsKPiArCQkJKnRpbGVfbWVtKysgPSB2cDlfY3R4LT50 aWxlX2NfaW5mb1tqXTsKPiArCQkJKnRpbGVfbWVtKysgPSByX2luZm87Cj4gKwkJfQo+ICsJfQo+ ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZAo+ICtjb25maWdfdGlsZXMoc3RydWN0IGhhbnRyb19jdHgg KmN0eCwKPiArCSAgICAgY29uc3Qgc3RydWN0IHY0bDJfY3RybF92cDlfZnJhbWUgKmRlY19wYXJh bXMsCj4gKwkgICAgIHN0cnVjdCBoYW50cm9fZGVjb2RlZF9idWZmZXIgKmRzdCkKPiArewo+ICsJ c3RydWN0IGhhbnRyb192cDlfZGVjX2h3X2N0eCAqdnA5X2N0eCA9ICZjdHgtPnZwOV9kZWM7Cj4g KwlzdHJ1Y3QgaGFudHJvX2F1eF9idWYgKm1pc2MgPSAmdnA5X2N0eC0+bWlzYzsKPiArCXN0cnVj dCBoYW50cm9fYXV4X2J1ZiAqdGlsZV9lZGdlID0gJnZwOV9jdHgtPnRpbGVfZWRnZTsKPiArCWRt YV9hZGRyX3QgYWRkcjsKPiArCXVuc2lnbmVkIHNob3J0ICp0aWxlX21lbTsKPiArCj4gKwlhZGRy ID0gbWlzYy0+ZG1hICsgdnA5X2N0eC0+dGlsZV9pbmZvX29mZnNldDsKPiArCWhhbnRyb193cml0 ZV9hZGRyKGN0eC0+ZGV2LCBHMl9BRERSX1RJTEVfU0laRSwgYWRkcik7Cj4gKwo+ICsJdGlsZV9t ZW0gPSBtaXNjLT5jcHUgKyB2cDlfY3R4LT50aWxlX2luZm9fb2Zmc2V0Owo+ICsJaWYgKGRlY19w YXJhbXMtPnRpbGVfY29sc19sb2cyIHx8IGRlY19wYXJhbXMtPnRpbGVfcm93c19sb2cyKSB7Cj4g KwkJdW5zaWduZWQgaW50IHRpbGVfciA9ICgxIDw8IGRlY19wYXJhbXMtPnRpbGVfcm93c19sb2cy KTsKPiArCQl1bnNpZ25lZCBpbnQgdGlsZV9jID0gKDEgPDwgZGVjX3BhcmFtcy0+dGlsZV9jb2xz X2xvZzIpOwo+ICsJCXVuc2lnbmVkIGludCBzYnNfciA9IGhhbnRyb192cDlfbnVtX3Nicyhkc3Qt PnZwOS5oZWlnaHQpOwo+ICsJCXVuc2lnbmVkIGludCBzYnNfYyA9IGhhbnRyb192cDlfbnVtX3Ni cyhkc3QtPnZwOS53aWR0aCk7Cj4gKwo+ICsJCWlmICh0aWxlX3IgIT0gdnA5X2N0eC0+bGFzdF90 aWxlX3IgfHwgdGlsZV9jICE9IHZwOV9jdHgtPmxhc3RfdGlsZV9jIHx8Cj4gKwkJICAgIHNic19y ICE9IHZwOV9jdHgtPmxhc3Rfc2JzX3IgfHwgc2JzX2MgIT0gdnA5X2N0eC0+bGFzdF9zYnNfYykK PiArCQkJcmVjb21wdXRlX3RpbGVfcmNfaW5mbyhjdHgsIHRpbGVfciwgdGlsZV9jLCBzYnNfciwg c2JzX2MpOwo+ICsKPiArCQlmaWxsX3RpbGVfaW5mbyhjdHgsIHRpbGVfciwgdGlsZV9jLCBzYnNf ciwgc2JzX2MsIHRpbGVfbWVtKTsKPiArCj4gKwkJaGFudHJvX3JlZ193cml0ZShjdHgtPmRldiwg JmcyX3RpbGVfZSwgMSk7Cj4gKwkJaGFudHJvX3JlZ193cml0ZShjdHgtPmRldiwgJmcyX251bV90 aWxlX2NvbHMsIHRpbGVfYyk7Cj4gKwkJaGFudHJvX3JlZ193cml0ZShjdHgtPmRldiwgJmcyX251 bV90aWxlX3Jvd3MsIHRpbGVfcik7Cj4gKwo+ICsJCWFkZHIgPSB0aWxlX2VkZ2UtPmRtYTsKPiAr CQloYW50cm9fd3JpdGVfYWRkcihjdHgtPmRldiwgRzJfVElMRV9GSUxURVIsIGFkZHIpOwo+ICsK PiArCQlhZGRyID0gdGlsZV9lZGdlLT5kbWEgKyB2cDlfY3R4LT5ic2RfY3RybF9vZmZzZXQ7Cj4g KwkJaGFudHJvX3dyaXRlX2FkZHIoY3R4LT5kZXYsIEcyX1RJTEVfQlNELCBhZGRyKTsKClRoZSB0 d28gYWJvdmUgYWRkcmVzc2VzIGFyZSBsZWZ0IHdpdGggYW5jaWVudCBkYXRhIHdoZW4gdGlsZSBp cyBkaXNhYmxlZC4gVGhlCnZlbmRvciBkcml2ZXIgYWx3YXlzIHNldCBhIHZhbGlkIHBvaW50ZXIg cmVnYXJkbGVzcyBpZiB0aWxlIGlzIGVuYWJsZWQgb3IKZGlzYWJsZWQsIHBlcmhhcHMgd2UgY291 bGQgZG8gdGhhdCBzYW1lID8KCnAucy4gV2FzIHNwb3R0ZWQgYnkgSmVybmVqLgoKPiArCX0gZWxz ZSB7Cj4gKwkJdGlsZV9tZW1bMF0gPSBoYW50cm9fdnA5X251bV9zYnMoZHN0LT52cDkud2lkdGgp Owo+ICsJCXRpbGVfbWVtWzFdID0gaGFudHJvX3ZwOV9udW1fc2JzKGRzdC0+dnA5LmhlaWdodCk7 Cj4gKwo+ICsJCWhhbnRyb19yZWdfd3JpdGUoY3R4LT5kZXYsICZnMl90aWxlX2UsIDApOwo+ICsJ CWhhbnRyb19yZWdfd3JpdGUoY3R4LT5kZXYsICZnMl9udW1fdGlsZV9jb2xzLCAxKTsKPiArCQlo YW50cm9fcmVnX3dyaXRlKGN0eC0+ZGV2LCAmZzJfbnVtX3RpbGVfcm93cywgMSk7Cj4gKwl9Cj4g K30KPiArCj4gK3N0YXRpYyB2b2lkCj4gK3VwZGF0ZV9mZWF0X2FuZF9mbGFnKHN0cnVjdCBoYW50 cm9fdnA5X2RlY19od19jdHggKnZwOV9jdHgsCj4gKwkJICAgICBjb25zdCBzdHJ1Y3QgdjRsMl92 cDlfc2VnbWVudGF0aW9uICpzZWcsCj4gKwkJICAgICB1bnNpZ25lZCBpbnQgZmVhdHVyZSwKPiAr CQkgICAgIHVuc2lnbmVkIGludCBzZWdpZCkKPiArewo+ICsJdTggbWFzayA9IFY0TDJfVlA5X1NF R01FTlRfRkVBVFVSRV9FTkFCTEVEKGZlYXR1cmUpOwo+ICsKPiArCXZwOV9jdHgtPmZlYXR1cmVf ZGF0YVtzZWdpZF1bZmVhdHVyZV0gPSBzZWctPmZlYXR1cmVfZGF0YVtzZWdpZF1bZmVhdHVyZV07 Cj4gKwl2cDlfY3R4LT5mZWF0dXJlX2VuYWJsZWRbc2VnaWRdICY9IH5tYXNrOwo+ICsJdnA5X2N0 eC0+ZmVhdHVyZV9lbmFibGVkW3NlZ2lkXSB8PSAoc2VnLT5mZWF0dXJlX2VuYWJsZWRbc2VnaWRd ICYgbWFzayk7Cj4gK30KPiArCj4gK3N0YXRpYyBpbmxpbmUgczE2IGNsaXAzKHMxNiB4LCBzMTYg eSwgczE2IHopCj4gK3sKPiArCXJldHVybiAoeiA8IHgpID8geCA6ICh6ID4geSkgPyB5IDogejsK PiArfQo+ICsKPiArc3RhdGljIHMxNiBmZWF0X3ZhbF9jbGlwMyhzMTYgZmVhdF92YWwsIHMxNiBm ZWF0dXJlX2RhdGEsIGJvb2wgYWJzb2x1dGUsIHU4IGNsaXApCj4gK3sKPiArCWlmIChhYnNvbHV0 ZSkKPiArCQlyZXR1cm4gZmVhdHVyZV9kYXRhOwo+ICsKPiArCXJldHVybiBjbGlwMygwLCAyNTUs IGZlYXRfdmFsICsgZmVhdHVyZV9kYXRhKTsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgY29uZmln X3NlZ21lbnQoc3RydWN0IGhhbnRyb19jdHggKmN0eCwgY29uc3Qgc3RydWN0IHY0bDJfY3RybF92 cDlfZnJhbWUgKmRlY19wYXJhbXMpCj4gK3sKPiArCXN0cnVjdCBoYW50cm9fdnA5X2RlY19od19j dHggKnZwOV9jdHggPSAmY3R4LT52cDlfZGVjOwo+ICsJY29uc3Qgc3RydWN0IHY0bDJfdnA5X3Nl Z21lbnRhdGlvbiAqc2VnOwo+ICsJczE2IGZlYXRfdmFsOwo+ICsJdW5zaWduZWQgY2hhciBmZWF0 X2lkOwo+ICsJdW5zaWduZWQgaW50IHNlZ2lkOwo+ICsJYm9vbCBzZWdtZW50X2VuYWJsZWQsIGFi c29sdXRlLCB1cGRhdGVfZGF0YTsKPiArCj4gKwlzdGF0aWMgY29uc3Qgc3RydWN0IGhhbnRyb19y ZWcgc2VnX3JlZ3NbOF1bVjRMMl9WUDlfU0VHX0xWTF9NQVhdID0gewo+ICsJCXsgdnA5X3F1YW50 X3NlZzAsIHZwOV9maWx0X2xldmVsX3NlZzAsIHZwOV9yZWZwaWNfc2VnMCwgdnA5X3NraXBfc2Vn MCB9LAo+ICsJCXsgdnA5X3F1YW50X3NlZzEsIHZwOV9maWx0X2xldmVsX3NlZzEsIHZwOV9yZWZw aWNfc2VnMSwgdnA5X3NraXBfc2VnMSB9LAo+ICsJCXsgdnA5X3F1YW50X3NlZzIsIHZwOV9maWx0 X2xldmVsX3NlZzIsIHZwOV9yZWZwaWNfc2VnMiwgdnA5X3NraXBfc2VnMiB9LAo+ICsJCXsgdnA5 X3F1YW50X3NlZzMsIHZwOV9maWx0X2xldmVsX3NlZzMsIHZwOV9yZWZwaWNfc2VnMywgdnA5X3Nr aXBfc2VnMyB9LAo+ICsJCXsgdnA5X3F1YW50X3NlZzQsIHZwOV9maWx0X2xldmVsX3NlZzQsIHZw OV9yZWZwaWNfc2VnNCwgdnA5X3NraXBfc2VnNCB9LAo+ICsJCXsgdnA5X3F1YW50X3NlZzUsIHZw OV9maWx0X2xldmVsX3NlZzUsIHZwOV9yZWZwaWNfc2VnNSwgdnA5X3NraXBfc2VnNSB9LAo+ICsJ CXsgdnA5X3F1YW50X3NlZzYsIHZwOV9maWx0X2xldmVsX3NlZzYsIHZwOV9yZWZwaWNfc2VnNiwg dnA5X3NraXBfc2VnNiB9LAo+ICsJCXsgdnA5X3F1YW50X3NlZzcsIHZwOV9maWx0X2xldmVsX3Nl ZzcsIHZwOV9yZWZwaWNfc2VnNywgdnA5X3NraXBfc2VnNyB9LAo+ICsJfTsKPiArCj4gKwlzZWdt ZW50X2VuYWJsZWQgPSAhIShkZWNfcGFyYW1zLT5zZWcuZmxhZ3MgJiBWNEwyX1ZQOV9TRUdNRU5U QVRJT05fRkxBR19FTkFCTEVEKTsKPiArCWhhbnRyb19yZWdfd3JpdGUoY3R4LT5kZXYsICZ2cDlf c2VnbWVudF9lLCBzZWdtZW50X2VuYWJsZWQpOwo+ICsJaGFudHJvX3JlZ193cml0ZShjdHgtPmRl diwgJnZwOV9zZWdtZW50X3VwZF9lLAo+ICsJCQkgISEoZGVjX3BhcmFtcy0+c2VnLmZsYWdzICYg VjRMMl9WUDlfU0VHTUVOVEFUSU9OX0ZMQUdfVVBEQVRFX01BUCkpOwo+ICsJaGFudHJvX3JlZ193 cml0ZShjdHgtPmRldiwgJnZwOV9zZWdtZW50X3RlbXBfdXBkX2UsCj4gKwkJCSAhIShkZWNfcGFy YW1zLT5zZWcuZmxhZ3MgJiBWNEwyX1ZQOV9TRUdNRU5UQVRJT05fRkxBR19URU1QT1JBTF9VUERB VEUpKTsKPiArCj4gKwlzZWcgPSAmZGVjX3BhcmFtcy0+c2VnOwo+ICsJYWJzb2x1dGUgPSAhIShz ZWctPmZsYWdzICYgVjRMMl9WUDlfU0VHTUVOVEFUSU9OX0ZMQUdfQUJTX09SX0RFTFRBX1VQREFU RSk7Cj4gKwl1cGRhdGVfZGF0YSA9ICEhKHNlZy0+ZmxhZ3MgJiBWNEwyX1ZQOV9TRUdNRU5UQVRJ T05fRkxBR19VUERBVEVfREFUQSk7Cj4gKwo+ICsJZm9yIChzZWdpZCA9IDA7IHNlZ2lkIDwgODsg KytzZWdpZCkgewo+ICsJCS8qIFF1YW50aXplciBzZWdtZW50IGZlYXR1cmUgKi8KPiArCQlmZWF0 X2lkID0gVjRMMl9WUDlfU0VHX0xWTF9BTFRfUTsKPiArCQlmZWF0X3ZhbCA9IGRlY19wYXJhbXMt PnF1YW50LmJhc2VfcV9pZHg7Cj4gKwkJaWYgKHNlZ21lbnRfZW5hYmxlZCkgewo+ICsJCQlpZiAo dXBkYXRlX2RhdGEpCj4gKwkJCQl1cGRhdGVfZmVhdF9hbmRfZmxhZyh2cDlfY3R4LCBzZWcsIGZl YXRfaWQsIHNlZ2lkKTsKPiArCQkJaWYgKHY0bDJfdnA5X3NlZ19mZWF0X2VuYWJsZWQodnA5X2N0 eC0+ZmVhdHVyZV9lbmFibGVkLCBmZWF0X2lkLCBzZWdpZCkpCj4gKwkJCQlmZWF0X3ZhbCA9IGZl YXRfdmFsX2NsaXAzKGZlYXRfdmFsLAo+ICsJCQkJCQkJICB2cDlfY3R4LT5mZWF0dXJlX2RhdGFb c2VnaWRdW2ZlYXRfaWRdLAo+ICsJCQkJCQkJICBhYnNvbHV0ZSwgMjU1KTsKPiArCQl9Cj4gKwkJ aGFudHJvX3JlZ193cml0ZShjdHgtPmRldiwgJnNlZ19yZWdzW3NlZ2lkXVtmZWF0X2lkXSwgZmVh dF92YWwpOwo+ICsKPiArCQkvKiBMb29wIGZpbHRlciBzZWdtZW50IGZlYXR1cmUgKi8KPiArCQlm ZWF0X2lkID0gVjRMMl9WUDlfU0VHX0xWTF9BTFRfTDsKPiArCQlmZWF0X3ZhbCA9IGRlY19wYXJh bXMtPmxmLmxldmVsOwo+ICsJCWlmIChzZWdtZW50X2VuYWJsZWQpIHsKPiArCQkJaWYgKHVwZGF0 ZV9kYXRhKQo+ICsJCQkJdXBkYXRlX2ZlYXRfYW5kX2ZsYWcodnA5X2N0eCwgc2VnLCBmZWF0X2lk LCBzZWdpZCk7Cj4gKwkJCWlmICh2NGwyX3ZwOV9zZWdfZmVhdF9lbmFibGVkKHZwOV9jdHgtPmZl YXR1cmVfZW5hYmxlZCwgZmVhdF9pZCwgc2VnaWQpKQo+ICsJCQkJZmVhdF92YWwgPSBmZWF0X3Zh bF9jbGlwMyhmZWF0X3ZhbCwKPiArCQkJCQkJCSAgdnA5X2N0eC0+ZmVhdHVyZV9kYXRhW3NlZ2lk XVtmZWF0X2lkXSwKPiArCQkJCQkJCSAgYWJzb2x1dGUsIDYzKTsKPiArCQl9Cj4gKwkJaGFudHJv X3JlZ193cml0ZShjdHgtPmRldiwgJnNlZ19yZWdzW3NlZ2lkXVtmZWF0X2lkXSwgZmVhdF92YWwp Owo+ICsKPiArCQkvKiBSZWZlcmVuY2UgZnJhbWUgc2VnbWVudCBmZWF0dXJlICovCj4gKwkJZmVh dF9pZCA9IFY0TDJfVlA5X1NFR19MVkxfUkVGX0ZSQU1FOwo+ICsJCWZlYXRfdmFsID0gMDsKPiAr CQlpZiAoc2VnbWVudF9lbmFibGVkKSB7Cj4gKwkJCWlmICh1cGRhdGVfZGF0YSkKPiArCQkJCXVw ZGF0ZV9mZWF0X2FuZF9mbGFnKHZwOV9jdHgsIHNlZywgZmVhdF9pZCwgc2VnaWQpOwo+ICsJCQlp ZiAoIShkZWNfcGFyYW1zLT5mbGFncyAmIFY0TDJfVlA5X0ZSQU1FX0ZMQUdfS0VZX0ZSQU1FKSAm Jgo+ICsJCQkgICAgdjRsMl92cDlfc2VnX2ZlYXRfZW5hYmxlZCh2cDlfY3R4LT5mZWF0dXJlX2Vu YWJsZWQsIGZlYXRfaWQsIHNlZ2lkKSkKPiArCQkJCWZlYXRfdmFsID0gdnA5X2N0eC0+ZmVhdHVy ZV9kYXRhW3NlZ2lkXVtmZWF0X2lkXSArIDE7Cj4gKwkJfQo+ICsJCWhhbnRyb19yZWdfd3JpdGUo Y3R4LT5kZXYsICZzZWdfcmVnc1tzZWdpZF1bZmVhdF9pZF0sIGZlYXRfdmFsKTsKPiArCj4gKwkJ LyogU2tpcCBzZWdtZW50IGZlYXR1cmUgKi8KPiArCQlmZWF0X2lkID0gVjRMMl9WUDlfU0VHX0xW TF9TS0lQOwo+ICsJCWZlYXRfdmFsID0gMDsKPiArCQlpZiAoc2VnbWVudF9lbmFibGVkKSB7Cj4g KwkJCWlmICh1cGRhdGVfZGF0YSkKPiArCQkJCXVwZGF0ZV9mZWF0X2FuZF9mbGFnKHZwOV9jdHgs IHNlZywgZmVhdF9pZCwgc2VnaWQpOwo+ICsJCQlmZWF0X3ZhbCA9IHY0bDJfdnA5X3NlZ19mZWF0 X2VuYWJsZWQodnA5X2N0eC0+ZmVhdHVyZV9lbmFibGVkLAo+ICsJCQkJCQkJICAgICBmZWF0X2lk LCBzZWdpZCkgPyAxIDogMDsKPiArCQl9Cj4gKwkJaGFudHJvX3JlZ193cml0ZShjdHgtPmRldiwg JnNlZ19yZWdzW3NlZ2lkXVtmZWF0X2lkXSwgZmVhdF92YWwpOwo+ICsJfQo+ICt9Cj4gKwo+ICtz dGF0aWMgdm9pZCBjb25maWdfbG9vcF9maWx0ZXIoc3RydWN0IGhhbnRyb19jdHggKmN0eCwgY29u c3Qgc3RydWN0IHY0bDJfY3RybF92cDlfZnJhbWUgKmRlY19wYXJhbXMpCj4gK3sKPiArCWJvb2wg ZCA9IGRlY19wYXJhbXMtPmxmLmZsYWdzICYgVjRMMl9WUDlfTE9PUF9GSUxURVJfRkxBR19ERUxU QV9FTkFCTEVEOwo+ICsKPiArCWhhbnRyb19yZWdfd3JpdGUoY3R4LT5kZXYsICZ2cDlfZmlsdF9s ZXZlbCwgZGVjX3BhcmFtcy0+bGYubGV2ZWwpOwo+ICsJaGFudHJvX3JlZ193cml0ZShjdHgtPmRl diwgJmcyX291dF9maWx0ZXJpbmdfZGlzLCBkZWNfcGFyYW1zLT5sZi5sZXZlbCA9PSAwKTsKPiAr CWhhbnRyb19yZWdfd3JpdGUoY3R4LT5kZXYsICZ2cDlfZmlsdF9zaGFycG5lc3MsIGRlY19wYXJh bXMtPmxmLnNoYXJwbmVzcyk7Cj4gKwo+ICsJaGFudHJvX3JlZ193cml0ZShjdHgtPmRldiwgJnZw OV9maWx0X3JlZl9hZGpfMCwgZCA/IGRlY19wYXJhbXMtPmxmLnJlZl9kZWx0YXNbMF0gOiAwKTsK PiArCWhhbnRyb19yZWdfd3JpdGUoY3R4LT5kZXYsICZ2cDlfZmlsdF9yZWZfYWRqXzEsIGQgPyBk ZWNfcGFyYW1zLT5sZi5yZWZfZGVsdGFzWzFdIDogMCk7Cj4gKwloYW50cm9fcmVnX3dyaXRlKGN0 eC0+ZGV2LCAmdnA5X2ZpbHRfcmVmX2Fkal8yLCBkID8gZGVjX3BhcmFtcy0+bGYucmVmX2RlbHRh c1syXSA6IDApOwo+ICsJaGFudHJvX3JlZ193cml0ZShjdHgtPmRldiwgJnZwOV9maWx0X3JlZl9h ZGpfMywgZCA/IGRlY19wYXJhbXMtPmxmLnJlZl9kZWx0YXNbM10gOiAwKTsKPiArCWhhbnRyb19y ZWdfd3JpdGUoY3R4LT5kZXYsICZ2cDlfZmlsdF9tYl9hZGpfMCwgZCA/IGRlY19wYXJhbXMtPmxm Lm1vZGVfZGVsdGFzWzBdIDogMCk7Cj4gKwloYW50cm9fcmVnX3dyaXRlKGN0eC0+ZGV2LCAmdnA5 X2ZpbHRfbWJfYWRqXzEsIGQgPyBkZWNfcGFyYW1zLT5sZi5tb2RlX2RlbHRhc1sxXSA6IDApOwo+ ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBjb25maWdfcGljdHVyZV9kaW1lbnNpb25zKHN0cnVjdCBo YW50cm9fY3R4ICpjdHgsIHN0cnVjdCBoYW50cm9fZGVjb2RlZF9idWZmZXIgKmRzdCkKPiArewo+ ICsJdTMyIHBpY193XzR4NCwgcGljX2hfNHg0Owo+ICsKPiArCWhhbnRyb19yZWdfd3JpdGUoY3R4 LT5kZXYsICZnMl9waWNfd2lkdGhfaW5fY2JzLCAoZHN0LT52cDkud2lkdGggKyA3KSAvIDgpOwo+ ICsJaGFudHJvX3JlZ193cml0ZShjdHgtPmRldiwgJmcyX3BpY19oZWlnaHRfaW5fY2JzLCAoZHN0 LT52cDkuaGVpZ2h0ICsgNykgLyA4KTsKPiArCXBpY193XzR4NCA9IHJvdW5kdXAoZHN0LT52cDku d2lkdGgsIDgpID4+IDI7Cj4gKwlwaWNfaF80eDQgPSByb3VuZHVwKGRzdC0+dnA5LmhlaWdodCwg OCkgPj4gMjsKPiArCWhhbnRyb19yZWdfd3JpdGUoY3R4LT5kZXYsICZnMl9waWNfd2lkdGhfNHg0 LCBwaWNfd180eDQpOwo+ICsJaGFudHJvX3JlZ193cml0ZShjdHgtPmRldiwgJmcyX3BpY19oZWln aHRfNHg0LCBwaWNfaF80eDQpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZAo+ICtjb25maWdfYml0 X2RlcHRoKHN0cnVjdCBoYW50cm9fY3R4ICpjdHgsIGNvbnN0IHN0cnVjdCB2NGwyX2N0cmxfdnA5 X2ZyYW1lICpkZWNfcGFyYW1zKQo+ICt7Cj4gKwloYW50cm9fcmVnX3dyaXRlKGN0eC0+ZGV2LCAm ZzJfYml0X2RlcHRoX3lfbWludXM4LCBkZWNfcGFyYW1zLT5iaXRfZGVwdGggLSA4KTsKPiArCWhh bnRyb19yZWdfd3JpdGUoY3R4LT5kZXYsICZnMl9iaXRfZGVwdGhfY19taW51czgsIGRlY19wYXJh bXMtPmJpdF9kZXB0aCAtIDgpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW5saW5lIGJvb2wgaXNfbG9z c2xlc3MoY29uc3Qgc3RydWN0IHY0bDJfdnA5X3F1YW50aXphdGlvbiAqcXVhbnQpCj4gK3sKPiAr CXJldHVybiBxdWFudC0+YmFzZV9xX2lkeCA9PSAwICYmIHF1YW50LT5kZWx0YV9xX3V2X2FjID09 IDAgJiYKPiArCSAgICAgICBxdWFudC0+ZGVsdGFfcV91dl9kYyA9PSAwICYmIHF1YW50LT5kZWx0 YV9xX3lfZGMgPT0gMDsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQKPiArY29uZmlnX3F1YW50KHN0 cnVjdCBoYW50cm9fY3R4ICpjdHgsIGNvbnN0IHN0cnVjdCB2NGwyX2N0cmxfdnA5X2ZyYW1lICpk ZWNfcGFyYW1zKQo+ICt7Cj4gKwloYW50cm9fcmVnX3dyaXRlKGN0eC0+ZGV2LCAmdnA5X3FwX2Rl bHRhX3lfZGMsIGRlY19wYXJhbXMtPnF1YW50LmRlbHRhX3FfeV9kYyk7Cj4gKwloYW50cm9fcmVn X3dyaXRlKGN0eC0+ZGV2LCAmdnA5X3FwX2RlbHRhX2NoX2RjLCBkZWNfcGFyYW1zLT5xdWFudC5k ZWx0YV9xX3V2X2RjKTsKPiArCWhhbnRyb19yZWdfd3JpdGUoY3R4LT5kZXYsICZ2cDlfcXBfZGVs dGFfY2hfYWMsIGRlY19wYXJhbXMtPnF1YW50LmRlbHRhX3FfdXZfYWMpOwo+ICsJaGFudHJvX3Jl Z193cml0ZShjdHgtPmRldiwgJnZwOV9sb3NzbGVzc19lLCBpc19sb3NzbGVzcygmZGVjX3BhcmFt cy0+cXVhbnQpKTsKPiArfQo+ICsKPiArc3RhdGljIHUzMgo+ICtoYW50cm9faW50ZXJwX2ZpbHRl cl9mcm9tX3Y0bDIodW5zaWduZWQgaW50IGludGVycG9sYXRpb25fZmlsdGVyKQo+ICt7Cj4gKwlz d2l0Y2ggKGludGVycG9sYXRpb25fZmlsdGVyKSB7Cj4gKwljYXNlIFY0TDJfVlA5X0lOVEVSUF9G SUxURVJfRUlHSFRUQVA6Cj4gKwkJcmV0dXJuIDB4MTsKPiArCWNhc2UgVjRMMl9WUDlfSU5URVJQ X0ZJTFRFUl9FSUdIVFRBUF9TTU9PVEg6Cj4gKwkJcmV0dXJuIDA7Cj4gKwljYXNlIFY0TDJfVlA5 X0lOVEVSUF9GSUxURVJfRUlHSFRUQVBfU0hBUlA6Cj4gKwkJcmV0dXJuIDB4MjsKPiArCWNhc2Ug VjRMMl9WUDlfSU5URVJQX0ZJTFRFUl9CSUxJTkVBUjoKPiArCQlyZXR1cm4gMHgzOwo+ICsJY2Fz ZSBWNEwyX1ZQOV9JTlRFUlBfRklMVEVSX1NXSVRDSEFCTEU6Cj4gKwkJcmV0dXJuIDB4NDsKPiAr CX0KPiArCj4gKwlyZXR1cm4gMDsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQKPiArY29uZmlnX290 aGVycyhzdHJ1Y3QgaGFudHJvX2N0eCAqY3R4LCBjb25zdCBzdHJ1Y3QgdjRsMl9jdHJsX3ZwOV9m cmFtZSAqZGVjX3BhcmFtcywKPiArCSAgICAgIGJvb2wgaW50cmFfb25seSwgYm9vbCByZXNvbHV0 aW9uX2NoYW5nZSkKPiArewo+ICsJc3RydWN0IGhhbnRyb192cDlfZGVjX2h3X2N0eCAqdnA5X2N0 eCA9ICZjdHgtPnZwOV9kZWM7Cj4gKwo+ICsJaGFudHJvX3JlZ193cml0ZShjdHgtPmRldiwgJmcy X2lkcl9waWNfZSwgaW50cmFfb25seSk7Cj4gKwo+ICsJaGFudHJvX3JlZ193cml0ZShjdHgtPmRl diwgJnZwOV90cmFuc2Zvcm1fbW9kZSwgdnA5X2N0eC0+Y3VyLnR4X21vZGUpOwo+ICsKPiArCWhh bnRyb19yZWdfd3JpdGUoY3R4LT5kZXYsICZ2cDlfbWNvbXBfZmlsdF90eXBlLCBpbnRyYV9vbmx5 ID8KPiArCQkwIDogaGFudHJvX2ludGVycF9maWx0ZXJfZnJvbV92NGwyKGRlY19wYXJhbXMtPmlu dGVycG9sYXRpb25fZmlsdGVyKSk7Cj4gKwo+ICsJaGFudHJvX3JlZ193cml0ZShjdHgtPmRldiwg JnZwOV9oaWdoX3ByZWNfbXZfZSwKPiArCQkJICEhKGRlY19wYXJhbXMtPmZsYWdzICYgVjRMMl9W UDlfRlJBTUVfRkxBR19BTExPV19ISUdIX1BSRUNfTVYpKTsKPiArCj4gKwloYW50cm9fcmVnX3dy aXRlKGN0eC0+ZGV2LCAmdnA5X2NvbXBfcHJlZF9tb2RlLCBkZWNfcGFyYW1zLT5yZWZlcmVuY2Vf bW9kZSk7Cj4gKwo+ICsJaGFudHJvX3JlZ193cml0ZShjdHgtPmRldiwgJmcyX3RlbXBvcl9tdnBf ZSwKPiArCQkJICEoZGVjX3BhcmFtcy0+ZmxhZ3MgJiBWNEwyX1ZQOV9GUkFNRV9GTEFHX0VSUk9S X1JFU0lMSUVOVCkgJiYKPiArCQkJICEoZGVjX3BhcmFtcy0+ZmxhZ3MgJiBWNEwyX1ZQOV9GUkFN RV9GTEFHX0tFWV9GUkFNRSkgJiYKPiArCQkJICEodnA5X2N0eC0+bGFzdC5mbGFncyAmIFY0TDJf VlA5X0ZSQU1FX0ZMQUdfS0VZX0ZSQU1FKSAmJgo+ICsJCQkgIShkZWNfcGFyYW1zLT5mbGFncyAm IFY0TDJfVlA5X0ZSQU1FX0ZMQUdfSU5UUkFfT05MWSkgJiYKPiArCQkJICFyZXNvbHV0aW9uX2No YW5nZSAmJgo+ICsJCQkgdnA5X2N0eC0+bGFzdC5mbGFncyAmIFY0TDJfVlA5X0ZSQU1FX0ZMQUdf U0hPV19GUkFNRQo+ICsJKTsKPiArCj4gKwloYW50cm9fcmVnX3dyaXRlKGN0eC0+ZGV2LCAmZzJf d3JpdGVfbXZzX2UsCj4gKwkJCSAhKGRlY19wYXJhbXMtPmZsYWdzICYgVjRMMl9WUDlfRlJBTUVf RkxBR19LRVlfRlJBTUUpKTsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQKPiArY29uZmlnX2NvbXBv dW5kX3JlZmVyZW5jZShzdHJ1Y3QgaGFudHJvX2N0eCAqY3R4LAo+ICsJCQkgIGNvbnN0IHN0cnVj dCB2NGwyX2N0cmxfdnA5X2ZyYW1lICpkZWNfcGFyYW1zKQo+ICt7Cj4gKwl1MzIgY29tcF9maXhl ZF9yZWYsIGNvbXBfdmFyX3JlZlsyXTsKPiArCWJvb2wgbGFzdF9yZWZfZnJhbWVfc2lnbl9iaWFz Owo+ICsJYm9vbCBnb2xkZW5fcmVmX2ZyYW1lX3NpZ25fYmlhczsKPiArCWJvb2wgYWx0X3JlZl9m cmFtZV9zaWduX2JpYXM7Cj4gKwlib29sIGNvbXBfcmVmX2FsbG93ZWQgPSAwOwo+ICsKPiArCWNv bXBfZml4ZWRfcmVmID0gMDsKPiArCWNvbXBfdmFyX3JlZlswXSA9IDA7Cj4gKwljb21wX3Zhcl9y ZWZbMV0gPSAwOwo+ICsKPiArCWxhc3RfcmVmX2ZyYW1lX3NpZ25fYmlhcyA9IGRlY19wYXJhbXMt PnJlZl9mcmFtZV9zaWduX2JpYXMgJiBWNEwyX1ZQOV9TSUdOX0JJQVNfTEFTVDsKPiArCWdvbGRl bl9yZWZfZnJhbWVfc2lnbl9iaWFzID0gZGVjX3BhcmFtcy0+cmVmX2ZyYW1lX3NpZ25fYmlhcyAm IFY0TDJfVlA5X1NJR05fQklBU19HT0xERU47Cj4gKwlhbHRfcmVmX2ZyYW1lX3NpZ25fYmlhcyA9 IGRlY19wYXJhbXMtPnJlZl9mcmFtZV9zaWduX2JpYXMgJiBWNEwyX1ZQOV9TSUdOX0JJQVNfQUxU Owo+ICsKPiArCS8qIDYuMy4xMiBGcmFtZSByZWZlcmVuY2UgbW9kZSBzeW50YXggKi8KPiArCWNv bXBfcmVmX2FsbG93ZWQgfD0gZ29sZGVuX3JlZl9mcmFtZV9zaWduX2JpYXMgIT0gbGFzdF9yZWZf ZnJhbWVfc2lnbl9iaWFzOwo+ICsJY29tcF9yZWZfYWxsb3dlZCB8PSBhbHRfcmVmX2ZyYW1lX3Np Z25fYmlhcyAhPSBsYXN0X3JlZl9mcmFtZV9zaWduX2JpYXM7Cj4gKwo+ICsJaWYgKGNvbXBfcmVm X2FsbG93ZWQpIHsKPiArCQlpZiAobGFzdF9yZWZfZnJhbWVfc2lnbl9iaWFzID09Cj4gKwkJICAg IGdvbGRlbl9yZWZfZnJhbWVfc2lnbl9iaWFzKSB7Cj4gKwkJCWNvbXBfZml4ZWRfcmVmID0gQUxU UkVGX0ZSQU1FOwo+ICsJCQljb21wX3Zhcl9yZWZbMF0gPSBMQVNUX0ZSQU1FOwo+ICsJCQljb21w X3Zhcl9yZWZbMV0gPSBHT0xERU5fRlJBTUU7Cj4gKwkJfSBlbHNlIGlmIChsYXN0X3JlZl9mcmFt ZV9zaWduX2JpYXMgPT0KPiArCQkJICAgYWx0X3JlZl9mcmFtZV9zaWduX2JpYXMpIHsKPiArCQkJ Y29tcF9maXhlZF9yZWYgPSBHT0xERU5fRlJBTUU7Cj4gKwkJCWNvbXBfdmFyX3JlZlswXSA9IExB U1RfRlJBTUU7Cj4gKwkJCWNvbXBfdmFyX3JlZlsxXSA9IEFMVFJFRl9GUkFNRTsKPiArCQl9IGVs c2Ugewo+ICsJCQljb21wX2ZpeGVkX3JlZiA9IExBU1RfRlJBTUU7Cj4gKwkJCWNvbXBfdmFyX3Jl ZlswXSA9IEdPTERFTl9GUkFNRTsKPiArCQkJY29tcF92YXJfcmVmWzFdID0gQUxUUkVGX0ZSQU1F Owo+ICsJCX0KPiArCX0KPiArCj4gKwloYW50cm9fcmVnX3dyaXRlKGN0eC0+ZGV2LCAmdnA5X2Nv bXBfcHJlZF9maXhlZF9yZWYsIGNvbXBfZml4ZWRfcmVmKTsKPiArCWhhbnRyb19yZWdfd3JpdGUo Y3R4LT5kZXYsICZ2cDlfY29tcF9wcmVkX3Zhcl9yZWYwLCBjb21wX3Zhcl9yZWZbMF0pOwo+ICsJ aGFudHJvX3JlZ193cml0ZShjdHgtPmRldiwgJnZwOV9jb21wX3ByZWRfdmFyX3JlZjEsIGNvbXBf dmFyX3JlZlsxXSk7Cj4gK30KPiArCj4gKyNkZWZpbmUgSU5ORVJfTE9PUCBcCj4gK2RvIHsJCQkJ CQkJCQlcCj4gKwlmb3IgKG0gPSAwOyBtIDwgQVJSQVlfU0laRShhZGFwdGl2ZS0+Y29lZlswXVsw XVswXVswXSk7ICsrbSkgewlcCj4gKwkJbWVtY3B5KGFkYXB0aXZlLT5jb2VmW2ldW2pdW2tdW2xd W21dLAkJCVwKPiArCQkgICAgICAgcHJvYnMtPmNvZWZbaV1bal1ba11bbF1bbV0sCQkJXAo+ICsJ CSAgICAgICBzaXplb2YocHJvYnMtPmNvZWZbaV1bal1ba11bbF1bbV0pKTsJCVwKPiArCQkJCQkJ CQkJXAo+ICsJCWFkYXB0aXZlLT5jb2VmW2ldW2pdW2tdW2xdW21dWzNdID0gMDsJCQlcCj4gKwl9 CQkJCQkJCQlcCj4gK30gd2hpbGUgKDApCj4gKwo+ICtzdGF0aWMgdm9pZCBjb25maWdfcHJvYnMo c3RydWN0IGhhbnRyb19jdHggKmN0eCwgY29uc3Qgc3RydWN0IHY0bDJfY3RybF92cDlfZnJhbWUg KmRlY19wYXJhbXMpCj4gK3sKPiArCXN0cnVjdCBoYW50cm9fdnA5X2RlY19od19jdHggKnZwOV9j dHggPSAmY3R4LT52cDlfZGVjOwo+ICsJc3RydWN0IGhhbnRyb19hdXhfYnVmICptaXNjID0gJnZw OV9jdHgtPm1pc2M7Cj4gKwlzdHJ1Y3QgaGFudHJvX2cyX2FsbF9wcm9icyAqYWxsX3Byb2JzID0g bWlzYy0+Y3B1Owo+ICsJc3RydWN0IGhhbnRyb19nMl9wcm9icyAqYWRhcHRpdmU7Cj4gKwlzdHJ1 Y3QgaGFudHJvX2cyX212X3Byb2JzICptdjsKPiArCWNvbnN0IHN0cnVjdCB2NGwyX3ZwOV9zZWdt ZW50YXRpb24gKnNlZyA9ICZkZWNfcGFyYW1zLT5zZWc7Cj4gKwljb25zdCBzdHJ1Y3QgdjRsMl92 cDlfZnJhbWVfY29udGV4dCAqcHJvYnMgPSAmdnA5X2N0eC0+cHJvYmFiaWxpdHlfdGFibGVzOwo+ ICsJaW50IGksIGosIGssIGwsIG07Cj4gKwo+ICsJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUo YWxsX3Byb2JzLT5rZl95X21vZGVfcHJvYik7ICsraSkKPiArCQlmb3IgKGogPSAwOyBqIDwgQVJS QVlfU0laRShhbGxfcHJvYnMtPmtmX3lfbW9kZV9wcm9iWzBdKTsgKytqKSB7Cj4gKwkJCW1lbWNw eShhbGxfcHJvYnMtPmtmX3lfbW9kZV9wcm9iW2ldW2pdLAo+ICsJCQkgICAgICAgdjRsMl92cDlf a2ZfeV9tb2RlX3Byb2JbaV1bal0sCj4gKwkJCSAgICAgICBBUlJBWV9TSVpFKGFsbF9wcm9icy0+ a2ZfeV9tb2RlX3Byb2JbaV1bal0pKTsKPiArCj4gKwkJCWFsbF9wcm9icy0+a2ZfeV9tb2RlX3By b2JfdGFpbFtpXVtqXVswXSA9Cj4gKwkJCQl2NGwyX3ZwOV9rZl95X21vZGVfcHJvYltpXVtqXVs4 XTsKPiArCQl9Cj4gKwo+ICsJbWVtY3B5KGFsbF9wcm9icy0+bWJfc2VnbWVudF90cmVlX3Byb2Jz LCBzZWctPnRyZWVfcHJvYnMsCj4gKwkgICAgICAgc2l6ZW9mKGFsbF9wcm9icy0+bWJfc2VnbWVu dF90cmVlX3Byb2JzKSk7Cj4gKwo+ICsJbWVtY3B5KGFsbF9wcm9icy0+c2VnbWVudF9wcmVkX3By b2JzLCBzZWctPnByZWRfcHJvYnMsCj4gKwkgICAgICAgc2l6ZW9mKGFsbF9wcm9icy0+c2VnbWVu dF9wcmVkX3Byb2JzKSk7Cj4gKwo+ICsJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoYWxsX3By b2JzLT5rZl91dl9tb2RlX3Byb2IpOyArK2kpIHsKPiArCQltZW1jcHkoYWxsX3Byb2JzLT5rZl91 dl9tb2RlX3Byb2JbaV0sIHY0bDJfdnA5X2tmX3V2X21vZGVfcHJvYltpXSwKPiArCQkgICAgICAg QVJSQVlfU0laRShhbGxfcHJvYnMtPmtmX3V2X21vZGVfcHJvYltpXSkpOwo+ICsKPiArCQlhbGxf cHJvYnMtPmtmX3V2X21vZGVfcHJvYl90YWlsW2ldWzBdID0gdjRsMl92cDlfa2ZfdXZfbW9kZV9w cm9iW2ldWzhdOwo+ICsJfQo+ICsKPiArCWFkYXB0aXZlID0gJmFsbF9wcm9icy0+cHJvYnM7Cj4g Kwo+ICsJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoYWRhcHRpdmUtPmludGVyX21vZGUpOyAr K2kpIHsKPiArCQltZW1jcHkoYWRhcHRpdmUtPmludGVyX21vZGVbaV0sIHByb2JzLT5pbnRlcl9t b2RlW2ldLAo+ICsJCSAgICAgICBzaXplb2YocHJvYnMtPmludGVyX21vZGUpKTsKPiArCj4gKwkJ YWRhcHRpdmUtPmludGVyX21vZGVbaV1bM10gPSAwOwo+ICsJfQo+ICsKPiArCW1lbWNweShhZGFw dGl2ZS0+aXNfaW50ZXIsIHByb2JzLT5pc19pbnRlciwgc2l6ZW9mKGFkYXB0aXZlLT5pc19pbnRl cikpOwo+ICsKPiArCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGFkYXB0aXZlLT51dl9tb2Rl KTsgKytpKSB7Cj4gKwkJbWVtY3B5KGFkYXB0aXZlLT51dl9tb2RlW2ldLCBwcm9icy0+dXZfbW9k ZVtpXSwKPiArCQkgICAgICAgc2l6ZW9mKGFkYXB0aXZlLT51dl9tb2RlW2ldKSk7Cj4gKwkJYWRh cHRpdmUtPnV2X21vZGVfdGFpbFtpXVswXSA9IHByb2JzLT51dl9tb2RlW2ldWzhdOwo+ICsJfQo+ ICsKPiArCW1lbWNweShhZGFwdGl2ZS0+dHg4LCBwcm9icy0+dHg4LCBzaXplb2YoYWRhcHRpdmUt PnR4OCkpOwo+ICsJbWVtY3B5KGFkYXB0aXZlLT50eDE2LCBwcm9icy0+dHgxNiwgc2l6ZW9mKGFk YXB0aXZlLT50eDE2KSk7Cj4gKwltZW1jcHkoYWRhcHRpdmUtPnR4MzIsIHByb2JzLT50eDMyLCBz aXplb2YoYWRhcHRpdmUtPnR4MzIpKTsKPiArCj4gKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0la RShhZGFwdGl2ZS0+eV9tb2RlKTsgKytpKSB7Cj4gKwkJbWVtY3B5KGFkYXB0aXZlLT55X21vZGVb aV0sIHByb2JzLT55X21vZGVbaV0sCj4gKwkJICAgICAgIEFSUkFZX1NJWkUoYWRhcHRpdmUtPnlf bW9kZVtpXSkpOwo+ICsKPiArCQlhZGFwdGl2ZS0+eV9tb2RlX3RhaWxbaV1bMF0gPSBwcm9icy0+ eV9tb2RlW2ldWzhdOwo+ICsJfQo+ICsKPiArCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGFk YXB0aXZlLT5wYXJ0aXRpb25bMF0pOyArK2kpIHsKPiArCQltZW1jcHkoYWRhcHRpdmUtPnBhcnRp dGlvblswXVtpXSwgdjRsMl92cDlfa2ZfcGFydGl0aW9uX3Byb2JzW2ldLAo+ICsJCSAgICAgICBz aXplb2YodjRsMl92cDlfa2ZfcGFydGl0aW9uX3Byb2JzW2ldKSk7Cj4gKwo+ICsJCWFkYXB0aXZl LT5wYXJ0aXRpb25bMF1baV1bM10gPSAwOwo+ICsJfQo+ICsKPiArCWZvciAoaSA9IDA7IGkgPCBB UlJBWV9TSVpFKGFkYXB0aXZlLT5wYXJ0aXRpb25bMV0pOyArK2kpIHsKPiArCQltZW1jcHkoYWRh cHRpdmUtPnBhcnRpdGlvblsxXVtpXSwgcHJvYnMtPnBhcnRpdGlvbltpXSwKPiArCQkgICAgICAg c2l6ZW9mKHByb2JzLT5wYXJ0aXRpb25baV0pKTsKPiArCj4gKwkJYWRhcHRpdmUtPnBhcnRpdGlv blsxXVtpXVszXSA9IDA7Cj4gKwl9Cj4gKwo+ICsJbWVtY3B5KGFkYXB0aXZlLT5pbnRlcnBfZmls dGVyLCBwcm9icy0+aW50ZXJwX2ZpbHRlciwKPiArCSAgICAgICBzaXplb2YoYWRhcHRpdmUtPmlu dGVycF9maWx0ZXIpKTsKPiArCj4gKwltZW1jcHkoYWRhcHRpdmUtPmNvbXBfbW9kZSwgcHJvYnMt PmNvbXBfbW9kZSwgc2l6ZW9mKGFkYXB0aXZlLT5jb21wX21vZGUpKTsKPiArCj4gKwltZW1jcHko YWRhcHRpdmUtPnNraXAsIHByb2JzLT5za2lwLCBzaXplb2YoYWRhcHRpdmUtPnNraXApKTsKPiAr Cj4gKwltdiA9ICZhZGFwdGl2ZS0+bXY7Cj4gKwo+ICsJbWVtY3B5KG12LT5qb2ludCwgcHJvYnMt Pm12LmpvaW50LCBzaXplb2YobXYtPmpvaW50KSk7Cj4gKwltZW1jcHkobXYtPnNpZ24sIHByb2Jz LT5tdi5zaWduLCBzaXplb2YobXYtPnNpZ24pKTsKPiArCW1lbWNweShtdi0+Y2xhc3MwX2JpdCwg cHJvYnMtPm12LmNsYXNzMF9iaXQsIHNpemVvZihtdi0+Y2xhc3MwX2JpdCkpOwo+ICsJbWVtY3B5 KG12LT5mciwgcHJvYnMtPm12LmZyLCBzaXplb2YobXYtPmZyKSk7Cj4gKwltZW1jcHkobXYtPmNs YXNzMF9ocCwgcHJvYnMtPm12LmNsYXNzMF9ocCwgc2l6ZW9mKG12LT5jbGFzczBfaHApKTsKPiAr CW1lbWNweShtdi0+aHAsIHByb2JzLT5tdi5ocCwgc2l6ZW9mKG12LT5ocCkpOwo+ICsJbWVtY3B5 KG12LT5jbGFzc2VzLCBwcm9icy0+bXYuY2xhc3Nlcywgc2l6ZW9mKG12LT5jbGFzc2VzKSk7Cj4g KwltZW1jcHkobXYtPmNsYXNzMF9mciwgcHJvYnMtPm12LmNsYXNzMF9mciwgc2l6ZW9mKG12LT5j bGFzczBfZnIpKTsKPiArCW1lbWNweShtdi0+Yml0cywgcHJvYnMtPm12LmJpdHMsIHNpemVvZiht di0+Yml0cykpOwo+ICsKPiArCW1lbWNweShhZGFwdGl2ZS0+c2luZ2xlX3JlZiwgcHJvYnMtPnNp bmdsZV9yZWYsIHNpemVvZihhZGFwdGl2ZS0+c2luZ2xlX3JlZikpOwo+ICsKPiArCW1lbWNweShh ZGFwdGl2ZS0+Y29tcF9yZWYsIHByb2JzLT5jb21wX3JlZiwgc2l6ZW9mKGFkYXB0aXZlLT5jb21w X3JlZikpOwo+ICsKPiArCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGFkYXB0aXZlLT5jb2Vm KTsgKytpKQo+ICsJCWZvciAoaiA9IDA7IGogPCBBUlJBWV9TSVpFKGFkYXB0aXZlLT5jb2VmWzBd KTsgKytqKQo+ICsJCQlmb3IgKGsgPSAwOyBrIDwgQVJSQVlfU0laRShhZGFwdGl2ZS0+Y29lZlsw XVswXSk7ICsraykKPiArCQkJCWZvciAobCA9IDA7IGwgPCBBUlJBWV9TSVpFKGFkYXB0aXZlLT5j b2VmWzBdWzBdWzBdKTsgKytsKQo+ICsJCQkJCUlOTkVSX0xPT1A7Cj4gKwo+ICsJaGFudHJvX3dy aXRlX2FkZHIoY3R4LT5kZXYsIFZQOV9BRERSX1BST0JTLCBtaXNjLT5kbWEpOwo+ICt9Cj4gKwo+ ICtzdGF0aWMgdm9pZCBjb25maWdfY291bnRzKHN0cnVjdCBoYW50cm9fY3R4ICpjdHgpCj4gK3sK PiArCXN0cnVjdCBoYW50cm9fdnA5X2RlY19od19jdHggKnZwOV9kZWMgPSAmY3R4LT52cDlfZGVj Owo+ICsJc3RydWN0IGhhbnRyb19hdXhfYnVmICptaXNjID0gJnZwOV9kZWMtPm1pc2M7Cj4gKwlk bWFfYWRkcl90IGFkZHIgPSBtaXNjLT5kbWEgKyB2cDlfZGVjLT5jdHhfY291bnRlcnNfb2Zmc2V0 Owo+ICsKPiArCWhhbnRyb193cml0ZV9hZGRyKGN0eC0+ZGV2LCBWUDlfQUREUl9DVFIsIGFkZHIp Owo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBjb25maWdfc2VnX21hcChzdHJ1Y3QgaGFudHJvX2N0 eCAqY3R4LAo+ICsJCQkgICBjb25zdCBzdHJ1Y3QgdjRsMl9jdHJsX3ZwOV9mcmFtZSAqZGVjX3Bh cmFtcywKPiArCQkJICAgYm9vbCBpbnRyYV9vbmx5LCBib29sIHVwZGF0ZV9tYXApCj4gK3sKPiAr CXN0cnVjdCBoYW50cm9fdnA5X2RlY19od19jdHggKnZwOV9jdHggPSAmY3R4LT52cDlfZGVjOwo+ ICsJc3RydWN0IGhhbnRyb19hdXhfYnVmICpzZWdtZW50X21hcCA9ICZ2cDlfY3R4LT5zZWdtZW50 X21hcDsKPiArCWRtYV9hZGRyX3QgYWRkcjsKPiArCj4gKwlpZiAoaW50cmFfb25seSB8fAo+ICsJ ICAgIChkZWNfcGFyYW1zLT5mbGFncyAmIFY0TDJfVlA5X0ZSQU1FX0ZMQUdfRVJST1JfUkVTSUxJ RU5UKSkgewo+ICsJCW1lbXNldChzZWdtZW50X21hcC0+Y3B1LCAwLCBzZWdtZW50X21hcC0+c2l6 ZSk7Cj4gKwkJbWVtc2V0KHZwOV9jdHgtPmZlYXR1cmVfZGF0YSwgMCwgc2l6ZW9mKHZwOV9jdHgt PmZlYXR1cmVfZGF0YSkpOwo+ICsJCW1lbXNldCh2cDlfY3R4LT5mZWF0dXJlX2VuYWJsZWQsIDAs IHNpemVvZih2cDlfY3R4LT5mZWF0dXJlX2VuYWJsZWQpKTsKPiArCX0KPiArCj4gKwlhZGRyID0g c2VnbWVudF9tYXAtPmRtYSArIHZwOV9jdHgtPmFjdGl2ZV9zZWdtZW50ICogdnA5X2N0eC0+c2Vn bWVudF9tYXBfc2l6ZTsKPiArCWhhbnRyb193cml0ZV9hZGRyKGN0eC0+ZGV2LCBWUDlfQUREUl9T RUdNRU5UX1JFQUQsIGFkZHIpOwo+ICsKPiArCWFkZHIgPSBzZWdtZW50X21hcC0+ZG1hICsgKDEg LSB2cDlfY3R4LT5hY3RpdmVfc2VnbWVudCkgKiB2cDlfY3R4LT5zZWdtZW50X21hcF9zaXplOwo+ ICsJaGFudHJvX3dyaXRlX2FkZHIoY3R4LT5kZXYsIFZQOV9BRERSX1NFR01FTlRfV1JJVEUsIGFk ZHIpOwo+ICsKPiArCWlmICh1cGRhdGVfbWFwKQo+ICsJCXZwOV9jdHgtPmFjdGl2ZV9zZWdtZW50 ID0gMSAtIHZwOV9jdHgtPmFjdGl2ZV9zZWdtZW50Owo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZAo+ ICtjb25maWdfc291cmNlKHN0cnVjdCBoYW50cm9fY3R4ICpjdHgsIGNvbnN0IHN0cnVjdCB2NGwy X2N0cmxfdnA5X2ZyYW1lICpkZWNfcGFyYW1zLAo+ICsJICAgICAgc3RydWN0IHZiMl92NGwyX2J1 ZmZlciAqdmIyX3NyYykKPiArewo+ICsJZG1hX2FkZHJfdCBzdHJlYW1fYmFzZSwgdG1wX2FkZHI7 Cj4gKwl1bnNpZ25lZCBpbnQgaGVhZHJlc19zaXplOwo+ICsJdTMyIHNyY19sZW4sIHN0YXJ0X2Jp dCwgc3JjX2J1Zl9sZW47Cj4gKwo+ICsJaGVhZHJlc19zaXplID0gZGVjX3BhcmFtcy0+dW5jb21w cmVzc2VkX2hlYWRlcl9zaXplCj4gKwkJICAgICArIGRlY19wYXJhbXMtPmNvbXByZXNzZWRfaGVh ZGVyX3NpemU7Cj4gKwo+ICsJc3RyZWFtX2Jhc2UgPSB2YjJfZG1hX2NvbnRpZ19wbGFuZV9kbWFf YWRkcigmdmIyX3NyYy0+dmIyX2J1ZiwgMCk7Cj4gKwloYW50cm9fd3JpdGVfYWRkcihjdHgtPmRl diwgRzJfQUREUl9TVFIsIHN0cmVhbV9iYXNlKTsKPiArCj4gKwl0bXBfYWRkciA9IHN0cmVhbV9i YXNlICsgaGVhZHJlc19zaXplOwo+ICsJc3RhcnRfYml0ID0gKHRtcF9hZGRyICYgMHhmKSAqIDg7 Cj4gKwloYW50cm9fcmVnX3dyaXRlKGN0eC0+ZGV2LCAmZzJfc3RhcnRfYml0LCBzdGFydF9iaXQp Owo+ICsKPiArCXNyY19sZW4gPSB2YjJfZ2V0X3BsYW5lX3BheWxvYWQoJnZiMl9zcmMtPnZiMl9i dWYsIDApOwo+ICsJc3JjX2xlbiArPSBzdGFydF9iaXQgLyA4IC0gaGVhZHJlc19zaXplOwo+ICsJ aGFudHJvX3JlZ193cml0ZShjdHgtPmRldiwgJmcyX3N0cmVhbV9sZW4sIHNyY19sZW4pOwo+ICsK PiArCXRtcF9hZGRyICY9IH4weGY7Cj4gKwloYW50cm9fcmVnX3dyaXRlKGN0eC0+ZGV2LCAmZzJf c3RybV9zdGFydF9vZmZzZXQsIHRtcF9hZGRyIC0gc3RyZWFtX2Jhc2UpOwo+ICsJc3JjX2J1Zl9s ZW4gPSB2YjJfcGxhbmVfc2l6ZSgmdmIyX3NyYy0+dmIyX2J1ZiwgMCk7Cj4gKwloYW50cm9fcmVn X3dyaXRlKGN0eC0+ZGV2LCAmZzJfc3RybV9idWZmZXJfbGVuLCBzcmNfYnVmX2xlbik7Cj4gK30K PiArCj4gK3N0YXRpYyB2b2lkCj4gK2NvbmZpZ19yZWdpc3RlcnMoc3RydWN0IGhhbnRyb19jdHgg KmN0eCwgY29uc3Qgc3RydWN0IHY0bDJfY3RybF92cDlfZnJhbWUgKmRlY19wYXJhbXMsCj4gKwkJ IHN0cnVjdCB2YjJfdjRsMl9idWZmZXIgKnZiMl9zcmMsIHN0cnVjdCB2YjJfdjRsMl9idWZmZXIg KnZiMl9kc3QpCj4gK3sKPiArCXN0cnVjdCBoYW50cm9fZGVjb2RlZF9idWZmZXIgKmRzdCwgKmxh c3QsICptdl9yZWY7Cj4gKwlzdHJ1Y3QgaGFudHJvX3ZwOV9kZWNfaHdfY3R4ICp2cDlfY3R4ID0g JmN0eC0+dnA5X2RlYzsKPiArCWNvbnN0IHN0cnVjdCB2NGwyX3ZwOV9zZWdtZW50YXRpb24gKnNl ZzsKPiArCWJvb2wgaW50cmFfb25seSwgcmVzb2x1dGlvbl9jaGFuZ2U7Cj4gKwo+ICsJLyogdnA5 IHN0dWZmICovCj4gKwlkc3QgPSB2YjJfdG9faGFudHJvX2RlY29kZWRfYnVmKCZ2YjJfZHN0LT52 YjJfYnVmKTsKPiArCj4gKwlpZiAodnA5X2N0eC0+bGFzdC52YWxpZCkKPiArCQlsYXN0ID0gZ2V0 X3JlZl9idWYoY3R4LCAmZHN0LT5iYXNlLnZiLCB2cDlfY3R4LT5sYXN0LnRpbWVzdGFtcCk7Cj4g KwllbHNlCj4gKwkJbGFzdCA9IGRzdDsKPiArCj4gKwl1cGRhdGVfZGVjX2J1Zl9pbmZvKGRzdCwg ZGVjX3BhcmFtcyk7Cj4gKwl1cGRhdGVfY3R4X2N1cl9pbmZvKHZwOV9jdHgsIGRzdCwgZGVjX3Bh cmFtcyk7Cj4gKwlzZWcgPSAmZGVjX3BhcmFtcy0+c2VnOwo+ICsKPiArCWludHJhX29ubHkgPSAh IShkZWNfcGFyYW1zLT5mbGFncyAmCj4gKwkJCShWNEwyX1ZQOV9GUkFNRV9GTEFHX0tFWV9GUkFN RSB8Cj4gKwkJCVY0TDJfVlA5X0ZSQU1FX0ZMQUdfSU5UUkFfT05MWSkpOwo+ICsKPiArCWlmICgh aW50cmFfb25seSAmJgo+ICsJICAgICEoZGVjX3BhcmFtcy0+ZmxhZ3MgJiBWNEwyX1ZQOV9GUkFN RV9GTEFHX0VSUk9SX1JFU0lMSUVOVCkgJiYKPiArCSAgICB2cDlfY3R4LT5sYXN0LnZhbGlkKQo+ ICsJCW12X3JlZiA9IGxhc3Q7Cj4gKwllbHNlCj4gKwkJbXZfcmVmID0gZHN0Owo+ICsKPiArCXJl c29sdXRpb25fY2hhbmdlID0gZHN0LT52cDkud2lkdGggIT0gbGFzdC0+dnA5LndpZHRoIHx8Cj4g KwkJCSAgICBkc3QtPnZwOS5oZWlnaHQgIT0gbGFzdC0+dnA5LmhlaWdodDsKPiArCj4gKwkvKiBj b25maWd1cmUgYmFzaWMgcmVnaXN0ZXJzICovCj4gKwloYW50cm9fcmVnX3dyaXRlKGN0eC0+ZGV2 LCAmZzJfbW9kZSwgVlA5X0RFQ19NT0RFKTsKPiArCWhhbnRyb19yZWdfd3JpdGUoY3R4LT5kZXYs ICZnMl9zdHJtX3N3YXAsIDB4Zik7Cj4gKwloYW50cm9fcmVnX3dyaXRlKGN0eC0+ZGV2LCAmZzJf ZGlybXZfc3dhcCwgMHhmKTsKPiArCWhhbnRyb19yZWdfd3JpdGUoY3R4LT5kZXYsICZnMl9jb21w cmVzc19zd2FwLCAweGYpOwo+ICsJaGFudHJvX3JlZ193cml0ZShjdHgtPmRldiwgJmcyX2J1c3dp ZHRoLCBCVVNfV0lEVEhfMTI4KTsKPiArCWhhbnRyb19yZWdfd3JpdGUoY3R4LT5kZXYsICZnMl9t YXhfYnVyc3QsIDE2KTsKPiArCWhhbnRyb19yZWdfd3JpdGUoY3R4LT5kZXYsICZnMl9hcGZfdGhy ZXNob2xkLCA4KTsKPiArCWhhbnRyb19yZWdfd3JpdGUoY3R4LT5kZXYsICZnMl9yZWZfY29tcHJl c3NfYnlwYXNzLCAxKTsKPiArCWhhbnRyb19yZWdfd3JpdGUoY3R4LT5kZXYsICZnMl9jbGtfZ2F0 ZV9lLCAxKTsKPiArCWhhbnRyb19yZWdfd3JpdGUoY3R4LT5kZXYsICZnMl9tYXhfY2Jfc2l6ZSwg Nik7Cj4gKwloYW50cm9fcmVnX3dyaXRlKGN0eC0+ZGV2LCAmZzJfbWluX2NiX3NpemUsIDMpOwo+ ICsKPiArCWNvbmZpZ19vdXRwdXQoY3R4LCBkc3QsIGRlY19wYXJhbXMpOwo+ICsKPiArCWlmICgh aW50cmFfb25seSkKPiArCQljb25maWdfcmVmX3JlZ2lzdGVycyhjdHgsIGRlY19wYXJhbXMsIGRz dCwgbXZfcmVmKTsKPiArCj4gKwljb25maWdfdGlsZXMoY3R4LCBkZWNfcGFyYW1zLCBkc3QpOwo+ ICsJY29uZmlnX3NlZ21lbnQoY3R4LCBkZWNfcGFyYW1zKTsKPiArCWNvbmZpZ19sb29wX2ZpbHRl cihjdHgsIGRlY19wYXJhbXMpOwo+ICsJY29uZmlnX3BpY3R1cmVfZGltZW5zaW9ucyhjdHgsIGRz dCk7Cj4gKwljb25maWdfYml0X2RlcHRoKGN0eCwgZGVjX3BhcmFtcyk7Cj4gKwljb25maWdfcXVh bnQoY3R4LCBkZWNfcGFyYW1zKTsKPiArCWNvbmZpZ19vdGhlcnMoY3R4LCBkZWNfcGFyYW1zLCBp bnRyYV9vbmx5LCByZXNvbHV0aW9uX2NoYW5nZSk7Cj4gKwljb25maWdfY29tcG91bmRfcmVmZXJl bmNlKGN0eCwgZGVjX3BhcmFtcyk7Cj4gKwljb25maWdfcHJvYnMoY3R4LCBkZWNfcGFyYW1zKTsK PiArCWNvbmZpZ19jb3VudHMoY3R4KTsKPiArCWNvbmZpZ19zZWdfbWFwKGN0eCwgZGVjX3BhcmFt cywgaW50cmFfb25seSwKPiArCQkgICAgICAgc2VnLT5mbGFncyAmIFY0TDJfVlA5X1NFR01FTlRB VElPTl9GTEFHX1VQREFURV9NQVApOwo+ICsJY29uZmlnX3NvdXJjZShjdHgsIGRlY19wYXJhbXMs IHZiMl9zcmMpOwo+ICt9Cj4gKwo+ICtpbnQgaGFudHJvX2cyX3ZwOV9kZWNfcnVuKHN0cnVjdCBo YW50cm9fY3R4ICpjdHgpCj4gK3sKPiArCWNvbnN0IHN0cnVjdCB2NGwyX2N0cmxfdnA5X2ZyYW1l ICpkZWNvZGVfcGFyYW1zOwo+ICsJc3RydWN0IHZiMl92NGwyX2J1ZmZlciAqc3JjOwo+ICsJc3Ry dWN0IHZiMl92NGwyX2J1ZmZlciAqZHN0Owo+ICsJaW50IHJldDsKPiArCj4gKwloYW50cm9fZzJf Y2hlY2tfaWRsZShjdHgtPmRldik7Cj4gKwo+ICsJcmV0ID0gc3RhcnRfcHJlcGFyZV9ydW4oY3R4 LCAmZGVjb2RlX3BhcmFtcyk7Cj4gKwlpZiAocmV0KSB7Cj4gKwkJaGFudHJvX2VuZF9wcmVwYXJl X3J1bihjdHgpOwo+ICsJCXJldHVybiByZXQ7Cj4gKwl9Cj4gKwo+ICsJc3JjID0gaGFudHJvX2dl dF9zcmNfYnVmKGN0eCk7Cj4gKwlkc3QgPSBoYW50cm9fZ2V0X2RzdF9idWYoY3R4KTsKPiArCj4g Kwljb25maWdfcmVnaXN0ZXJzKGN0eCwgZGVjb2RlX3BhcmFtcywgc3JjLCBkc3QpOwo+ICsKPiAr CWhhbnRyb19lbmRfcHJlcGFyZV9ydW4oY3R4KTsKPiArCj4gKwl2ZHB1X3dyaXRlKGN0eC0+ZGV2 LCBHMl9SRUdfSU5URVJSVVBUX0RFQ19FLCBHMl9SRUdfSU5URVJSVVBUKTsKPiArCj4gKwlyZXR1 cm4gMDsKPiArfQo+ICsKPiArI2RlZmluZSBjb3B5X3R4X2FuZF9za2lwKHAxLCBwMikJCQkJXAo+ ICtkbyB7CQkJCQkJCQlcCj4gKwltZW1jcHkoKHAxKS0+dHg4LCAocDIpLT50eDgsIHNpemVvZigo cDEpLT50eDgpKTsJXAo+ICsJbWVtY3B5KChwMSktPnR4MTYsIChwMiktPnR4MTYsIHNpemVvZigo cDEpLT50eDE2KSk7CVwKPiArCW1lbWNweSgocDEpLT50eDMyLCAocDIpLT50eDMyLCBzaXplb2Yo KHAxKS0+dHgzMikpOwlcCj4gKwltZW1jcHkoKHAxKS0+c2tpcCwgKHAyKS0+c2tpcCwgc2l6ZW9m KChwMSktPnNraXApKTsJXAo+ICt9IHdoaWxlICgwKQo+ICsKPiArdm9pZCBoYW50cm9fZzJfdnA5 X2RlY19kb25lKHN0cnVjdCBoYW50cm9fY3R4ICpjdHgpCj4gK3sKPiArCXN0cnVjdCBoYW50cm9f dnA5X2RlY19od19jdHggKnZwOV9jdHggPSAmY3R4LT52cDlfZGVjOwo+ICsJdW5zaWduZWQgaW50 IGZjdHhfaWR4Owo+ICsKPiArCWlmICghKHZwOV9jdHgtPmN1ci5mbGFncyAmIFY0TDJfVlA5X0ZS QU1FX0ZMQUdfUkVGUkVTSF9GUkFNRV9DVFgpKQo+ICsJCWdvdG8gb3V0X3VwZGF0ZV9sYXN0Owo+ ICsKPiArCWZjdHhfaWR4ID0gdnA5X2N0eC0+Y3VyLmZyYW1lX2NvbnRleHRfaWR4Owo+ICsKPiAr CWlmICghKHZwOV9jdHgtPmN1ci5mbGFncyAmIFY0TDJfVlA5X0ZSQU1FX0ZMQUdfUEFSQUxMRUxf REVDX01PREUpKSB7Cj4gKwkJLyogZXJyb3JfcmVzaWxpZW50X21vZGUgPT0gMCAmJiBmcmFtZV9w YXJhbGxlbF9kZWNvZGluZ19tb2RlID09IDAgKi8KPiArCQlzdHJ1Y3QgdjRsMl92cDlfZnJhbWVf Y29udGV4dCAqcHJvYnMgPSAmdnA5X2N0eC0+cHJvYmFiaWxpdHlfdGFibGVzOwo+ICsJCWJvb2wg ZnJhbWVfaXNfaW50cmEgPSB2cDlfY3R4LT5jdXIuZmxhZ3MgJgo+ICsJCSAgICAoVjRMMl9WUDlf RlJBTUVfRkxBR19LRVlfRlJBTUUgfCBWNEwyX1ZQOV9GUkFNRV9GTEFHX0lOVFJBX09OTFkpOwo+ ICsJCXN0cnVjdCB0eF9hbmRfc2tpcCB7Cj4gKwkJCXU4IHR4OFsyXVsxXTsKPiArCQkJdTggdHgx NlsyXVsyXTsKPiArCQkJdTggdHgzMlsyXVszXTsKPiArCQkJdTggc2tpcFszXTsKPiArCQl9IF90 eF9za2lwLCAqdHhfc2tpcCA9ICZfdHhfc2tpcDsKPiArCQlzdHJ1Y3QgdjRsMl92cDlfZnJhbWVf c3ltYm9sX2NvdW50cyAqY291bnRzOwo+ICsJCXN0cnVjdCBzeW1ib2xfY291bnRzICpoYW50cm9f Y250czsKPiArCQl1MzIgdHgxNnBbMl1bNF07Cj4gKwkJaW50IGk7Cj4gKwo+ICsJCS8qIGJ1ZmZl ciB0aGUgZm9yd2FyZC11cGRhdGVkIFRYIGFuZCBza2lwIHByb2JzICovCj4gKwkJaWYgKGZyYW1l X2lzX2ludHJhKQo+ICsJCQljb3B5X3R4X2FuZF9za2lwKHR4X3NraXAsIHByb2JzKTsKPiArCj4g KwkJLyogNi4xLjIgcmVmcmVzaF9wcm9icygpOiBsb2FkX3Byb2JzKCkgYW5kIGxvYWRfcHJvYnMy KCkgKi8KPiArCQkqcHJvYnMgPSB2cDlfY3R4LT5mcmFtZV9jb250ZXh0W2ZjdHhfaWR4XTsKPiAr Cj4gKwkJLyogaWYgRnJhbWVJc0ludHJhIHRoZW4gdW5kbyB0aGUgZWZmZWN0IG9mIGxvYWRfcHJv YnMyKCkgKi8KPiArCQlpZiAoZnJhbWVfaXNfaW50cmEpCj4gKwkJCWNvcHlfdHhfYW5kX3NraXAo cHJvYnMsIHR4X3NraXApOwo+ICsKPiArCQljb3VudHMgPSAmdnA5X2N0eC0+Y250czsKPiArCQlo YW50cm9fY250cyA9IHZwOV9jdHgtPm1pc2MuY3B1ICsgdnA5X2N0eC0+Y3R4X2NvdW50ZXJzX29m ZnNldDsKPiArCQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRSh0eDE2cCk7ICsraSkgewo+ICsJ CQltZW1jcHkodHgxNnBbaV0sCj4gKwkJCSAgICAgICBoYW50cm9fY250cy0+dHgxNngxNl9jb3Vu dFtpXSwKPiArCQkJICAgICAgIHNpemVvZihoYW50cm9fY250cy0+dHgxNngxNl9jb3VudFswXSkp Owo+ICsJCQl0eDE2cFtpXVszXSA9IDA7Cj4gKwkJfQo+ICsJCWNvdW50cy0+dHgxNnAgPSAmdHgx NnA7Cj4gKwo+ICsJCXY0bDJfdnA5X2FkYXB0X2NvZWZfcHJvYnMocHJvYnMsIGNvdW50cywKPiAr CQkJCQkgICF2cDlfY3R4LT5sYXN0LnZhbGlkIHx8Cj4gKwkJCQkJICB2cDlfY3R4LT5sYXN0LmZs YWdzICYgVjRMMl9WUDlfRlJBTUVfRkxBR19LRVlfRlJBTUUsCj4gKwkJCQkJICBmcmFtZV9pc19p bnRyYSk7Cj4gKwo+ICsJCWlmICghZnJhbWVfaXNfaW50cmEpIHsKPiArCQkJLyogbG9hZF9wcm9i czIoKSBhbHJlYWR5IGRvbmUgKi8KPiArCQkJdTMyIG12X21vZGVbN11bNF07Cj4gKwo+ICsJCQlm b3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShtdl9tb2RlKTsgKytpKSB7Cj4gKwkJCQltdl9tb2Rl W2ldWzBdID0gaGFudHJvX2NudHMtPmludGVyX21vZGVfY291bnRzW2ldWzFdWzBdOwo+ICsJCQkJ bXZfbW9kZVtpXVsxXSA9IGhhbnRyb19jbnRzLT5pbnRlcl9tb2RlX2NvdW50c1tpXVsyXVswXTsK PiArCQkJCW12X21vZGVbaV1bMl0gPSBoYW50cm9fY250cy0+aW50ZXJfbW9kZV9jb3VudHNbaV1b MF1bMF07Cj4gKwkJCQltdl9tb2RlW2ldWzNdID0gaGFudHJvX2NudHMtPmludGVyX21vZGVfY291 bnRzW2ldWzJdWzFdOwo+ICsJCQl9Cj4gKwkJCWNvdW50cy0+bXZfbW9kZSA9ICZtdl9tb2RlOwo+ ICsJCQl2NGwyX3ZwOV9hZGFwdF9ub25jb2VmX3Byb2JzKCZ2cDlfY3R4LT5wcm9iYWJpbGl0eV90 YWJsZXMsIGNvdW50cywKPiArCQkJCQkJICAgICB2cDlfY3R4LT5jdXIucmVmZXJlbmNlX21vZGUs Cj4gKwkJCQkJCSAgICAgdnA5X2N0eC0+Y3VyLmludGVycG9sYXRpb25fZmlsdGVyLAo+ICsJCQkJ CQkgICAgIHZwOV9jdHgtPmN1ci50eF9tb2RlLCB2cDlfY3R4LT5jdXIuZmxhZ3MpOwo+ICsJCX0K PiArCX0KPiArCj4gKwl2cDlfY3R4LT5mcmFtZV9jb250ZXh0W2ZjdHhfaWR4XSA9IHZwOV9jdHgt PnByb2JhYmlsaXR5X3RhYmxlczsKPiArCj4gK291dF91cGRhdGVfbGFzdDoKPiArCXZwOV9jdHgt Pmxhc3QgPSB2cDlfY3R4LT5jdXI7Cj4gK30KPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5n L21lZGlhL2hhbnRyby9oYW50cm9faHcuaCBiL2RyaXZlcnMvc3RhZ2luZy9tZWRpYS9oYW50cm8v aGFudHJvX2h3LmgKPiBpbmRleCA0MmIzZjM5NjFmNzUuLjI5NjFkMzk5ZmQ2MCAxMDA2NDQKPiAt LS0gYS9kcml2ZXJzL3N0YWdpbmcvbWVkaWEvaGFudHJvL2hhbnRyb19ody5oCj4gKysrIGIvZHJp dmVycy9zdGFnaW5nL21lZGlhL2hhbnRyby9oYW50cm9faHcuaAo+IEBAIC0xMiw2ICsxMiw3IEBA Cj4gICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KPiAgI2luY2x1ZGUgPGxpbnV4L3Y0bDIt Y29udHJvbHMuaD4KPiAgI2luY2x1ZGUgPG1lZGlhL3Y0bDItY3RybHMuaD4KPiArI2luY2x1ZGUg PG1lZGlhL3Y0bDItdnA5Lmg+Cj4gICNpbmNsdWRlIDxtZWRpYS92aWRlb2J1ZjItY29yZS5oPgo+ ICAKPiAgI2RlZmluZSBERUNfODE5MF9BTElHTl9NQVNLCTB4MDdVCj4gQEAgLTE2MSw2ICsxNjIs NTAgQEAgc3RydWN0IGhhbnRyb192cDhfZGVjX2h3X2N0eCB7Cj4gIAlzdHJ1Y3QgaGFudHJvX2F1 eF9idWYgcHJvYl90Ymw7Cj4gIH07Cj4gIAo+ICtzdHJ1Y3QgaGFudHJvX3ZwOV9mcmFtZV9pbmZv IHsKPiArCXUzMiB2YWxpZCA6IDE7Cj4gKwl1MzIgZnJhbWVfY29udGV4dF9pZHggOiAyOwo+ICsJ dTMyIHJlZmVyZW5jZV9tb2RlIDogMjsKPiArCXUzMiB0eF9tb2RlIDogMzsKPiArCXUzMiBpbnRl cnBvbGF0aW9uX2ZpbHRlciA6IDM7Cj4gKwl1MzIgZmxhZ3M7Cj4gKwl1NjQgdGltZXN0YW1wOwo+ ICt9Owo+ICsKPiArI2RlZmluZSBNQVhfU0JfQ09MUwk2NAo+ICsjZGVmaW5lIE1BWF9TQl9ST1dT CTM0Cj4gKwo+ICsvKioKPiArICogc3RydWN0IGhhbnRyb192cDlfZGVjX2h3X2N0eAo+ICsgKgo+ ICsgKi8KPiArc3RydWN0IGhhbnRyb192cDlfZGVjX2h3X2N0eCB7Cj4gKwlzdHJ1Y3QgaGFudHJv X2F1eF9idWYgdGlsZV9lZGdlOwo+ICsJc3RydWN0IGhhbnRyb19hdXhfYnVmIHNlZ21lbnRfbWFw Owo+ICsJc3RydWN0IGhhbnRyb19hdXhfYnVmIG1pc2M7Cj4gKwlzdHJ1Y3QgdjRsMl92cDlfZnJh bWVfc3ltYm9sX2NvdW50cyBjbnRzOwo+ICsJc3RydWN0IHY0bDJfdnA5X2ZyYW1lX2NvbnRleHQg cHJvYmFiaWxpdHlfdGFibGVzOwo+ICsJc3RydWN0IHY0bDJfdnA5X2ZyYW1lX2NvbnRleHQgZnJh bWVfY29udGV4dFs0XTsKPiArCXN0cnVjdCBoYW50cm9fdnA5X2ZyYW1lX2luZm8gY3VyOwo+ICsJ c3RydWN0IGhhbnRyb192cDlfZnJhbWVfaW5mbyBsYXN0Owo+ICsKPiArCXVuc2lnbmVkIGludCBi c2RfY3RybF9vZmZzZXQ7Cj4gKwl1bnNpZ25lZCBpbnQgc2VnbWVudF9tYXBfc2l6ZTsKPiArCXVu c2lnbmVkIGludCBjdHhfY291bnRlcnNfb2Zmc2V0Owo+ICsJdW5zaWduZWQgaW50IHRpbGVfaW5m b19vZmZzZXQ7Cj4gKwo+ICsJdW5zaWduZWQgc2hvcnQgdGlsZV9yX2luZm9bTUFYX1NCX1JPV1Nd Owo+ICsJdW5zaWduZWQgc2hvcnQgdGlsZV9jX2luZm9bTUFYX1NCX0NPTFNdOwo+ICsJdW5zaWdu ZWQgaW50IGxhc3RfdGlsZV9yOwo+ICsJdW5zaWduZWQgaW50IGxhc3RfdGlsZV9jOwo+ICsJdW5z aWduZWQgaW50IGxhc3Rfc2JzX3I7Cj4gKwl1bnNpZ25lZCBpbnQgbGFzdF9zYnNfYzsKPiArCj4g Kwl1bnNpZ25lZCBpbnQgYWN0aXZlX3NlZ21lbnQ7Cj4gKwl1OCBmZWF0dXJlX2VuYWJsZWRbOF07 Cj4gKwlzMTYgZmVhdHVyZV9kYXRhWzhdWzRdOwo+ICt9Owo+ICsKPiAgLyoqCj4gICAqIHN0cnVj dCBoYW50cm9fcG9zdHByb2NfY3R4Cj4gICAqCj4gQEAgLTI2Nyw2ICszMTIsMjQgQEAgdm9pZCBo YW50cm9faGV2Y19yZWZfcmVtb3ZlX3VudXNlZChzdHJ1Y3QgaGFudHJvX2N0eCAqY3R4KTsKPiAg c2l6ZV90IGhhbnRyb19oZXZjX2Nocm9tYV9vZmZzZXQoY29uc3Qgc3RydWN0IHY0bDJfY3RybF9o ZXZjX3NwcyAqc3BzKTsKPiAgc2l6ZV90IGhhbnRyb19oZXZjX21vdGlvbl92ZWN0b3JzX29mZnNl dChjb25zdCBzdHJ1Y3QgdjRsMl9jdHJsX2hldmNfc3BzICpzcHMpOwo+ICAKPiArc3RhdGljIGlu bGluZSB1bnNpZ25lZCBzaG9ydCBoYW50cm9fdnA5X251bV9zYnModW5zaWduZWQgc2hvcnQgZGlt ZW5zaW9uKQo+ICt7Cj4gKwlyZXR1cm4gKGRpbWVuc2lvbiArIDYzKSAvIDY0Owo+ICt9Cj4gKwo+ ICtzdGF0aWMgaW5saW5lIHNpemVfdAo+ICtoYW50cm9fdnA5X212X3NpemUodW5zaWduZWQgaW50 IHdpZHRoLCB1bnNpZ25lZCBpbnQgaGVpZ2h0KQo+ICt7Cj4gKwlpbnQgbnVtX2N0YnM7Cj4gKwo+ ICsJLyoKPiArCSAqIFRoZXJlIGNhbiBiZSB1cCB0byAoQ1RCcyB4IDY0KSBudW1iZXIgb2YgYmxv Y2tzLAo+ICsJICogYW5kIHRoZSBtb3Rpb24gdmVjdG9yIGZvciBlYWNoIGJsb2NrIG5lZWRzIDE2 IGJ5dGVzLgo+ICsJICovCj4gKwludW1fY3RicyA9IGhhbnRyb192cDlfbnVtX3Nicyh3aWR0aCkg KiBoYW50cm9fdnA5X251bV9zYnMoaGVpZ2h0KTsKPiArCXJldHVybiAobnVtX2N0YnMgKiA2NCkg KiAxNjsKPiArfQo+ICsKPiAgc3RhdGljIGlubGluZSBzaXplX3QKPiAgaGFudHJvX2gyNjRfbXZf c2l6ZSh1bnNpZ25lZCBpbnQgd2lkdGgsIHVuc2lnbmVkIGludCBoZWlnaHQpCj4gIHsKPiBAQCAt MzA4LDYgKzM3MSwxMCBAQCB2b2lkIGhhbnRyb192cDhfZGVjX2V4aXQoc3RydWN0IGhhbnRyb19j dHggKmN0eCk7Cj4gIHZvaWQgaGFudHJvX3ZwOF9wcm9iX3VwZGF0ZShzdHJ1Y3QgaGFudHJvX2N0 eCAqY3R4LAo+ICAJCQkgICAgY29uc3Qgc3RydWN0IHY0bDJfY3RybF92cDhfZnJhbWUgKmhkcik7 Cj4gIAo+ICtpbnQgaGFudHJvX2cyX3ZwOV9kZWNfcnVuKHN0cnVjdCBoYW50cm9fY3R4ICpjdHgp Owo+ICt2b2lkIGhhbnRyb19nMl92cDlfZGVjX2RvbmUoc3RydWN0IGhhbnRyb19jdHggKmN0eCk7 Cj4gK2ludCBoYW50cm9fdnA5X2RlY19pbml0KHN0cnVjdCBoYW50cm9fY3R4ICpjdHgpOwo+ICt2 b2lkIGhhbnRyb192cDlfZGVjX2V4aXQoc3RydWN0IGhhbnRyb19jdHggKmN0eCk7Cj4gIHZvaWQg aGFudHJvX2cyX2NoZWNrX2lkbGUoc3RydWN0IGhhbnRyb19kZXYgKnZwdSk7Cj4gIAo+ICAjZW5k aWYgLyogSEFOVFJPX0hXX0hfICovCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9tZWRp YS9oYW50cm8vaGFudHJvX3Y0bDIuYyBiL2RyaXZlcnMvc3RhZ2luZy9tZWRpYS9oYW50cm8vaGFu dHJvX3Y0bDIuYwo+IGluZGV4IGQxZjA2MGM1NWZlZC4uZTRiMDY0NWJhNmZjIDEwMDY0NAo+IC0t LSBhL2RyaXZlcnMvc3RhZ2luZy9tZWRpYS9oYW50cm8vaGFudHJvX3Y0bDIuYwo+ICsrKyBiL2Ry aXZlcnMvc3RhZ2luZy9tZWRpYS9oYW50cm8vaGFudHJvX3Y0bDIuYwo+IEBAIC0yOTksNiArMjk5 LDExIEBAIHN0YXRpYyBpbnQgaGFudHJvX3RyeV9mbXQoY29uc3Qgc3RydWN0IGhhbnRyb19jdHgg KmN0eCwKPiAgCQkJcGl4X21wLT5wbGFuZV9mbXRbMF0uc2l6ZWltYWdlICs9Cj4gIAkJCQloYW50 cm9faDI2NF9tdl9zaXplKHBpeF9tcC0+d2lkdGgsCj4gIAkJCQkJCSAgICBwaXhfbXAtPmhlaWdo dCk7Cj4gKwkJZWxzZSBpZiAoY3R4LT52cHVfc3JjX2ZtdC0+Zm91cmNjID09IFY0TDJfUElYX0ZN VF9WUDlfRlJBTUUgJiYKPiArCQkJICFoYW50cm9fbmVlZHNfcG9zdHByb2MoY3R4LCBmbXQpKQo+ ICsJCQlwaXhfbXAtPnBsYW5lX2ZtdFswXS5zaXplaW1hZ2UgKz0KPiArCQkJCWhhbnRyb192cDlf bXZfc2l6ZShwaXhfbXAtPndpZHRoLAo+ICsJCQkJCQkgICBwaXhfbXAtPmhlaWdodCk7Cj4gIAl9 IGVsc2UgaWYgKCFwaXhfbXAtPnBsYW5lX2ZtdFswXS5zaXplaW1hZ2UpIHsKPiAgCQkvKgo+ICAJ CSAqIEZvciBjb2RlZCBmb3JtYXRzIHRoZSBhcHBsaWNhdGlvbiBjYW4gc3BlY2lmeQo+IEBAIC00 MDcsNiArNDEyLDcgQEAgaGFudHJvX3VwZGF0ZV9yZXF1aXJlc19yZXF1ZXN0KHN0cnVjdCBoYW50 cm9fY3R4ICpjdHgsIHUzMiBmb3VyY2MpCj4gIAljYXNlIFY0TDJfUElYX0ZNVF9WUDhfRlJBTUU6 Cj4gIAljYXNlIFY0TDJfUElYX0ZNVF9IMjY0X1NMSUNFOgo+ICAJY2FzZSBWNEwyX1BJWF9GTVRf SEVWQ19TTElDRToKPiArCWNhc2UgVjRMMl9QSVhfRk1UX1ZQOV9GUkFNRToKPiAgCQljdHgtPmZo Lm0ybV9jdHgtPm91dF9xX2N0eC5xLnJlcXVpcmVzX3JlcXVlc3RzID0gdHJ1ZTsKPiAgCQlicmVh azsKPiAgCWRlZmF1bHQ6Cj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9tZWRpYS9oYW50 cm8vaGFudHJvX3ZwOS5jIGIvZHJpdmVycy9zdGFnaW5nL21lZGlhL2hhbnRyby9oYW50cm9fdnA5 LmMKPiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+IGluZGV4IDAwMDAwMDAwMDAwMC4uNTY2Y2QzNzZj MDk3Cj4gLS0tIC9kZXYvbnVsbAo+ICsrKyBiL2RyaXZlcnMvc3RhZ2luZy9tZWRpYS9oYW50cm8v aGFudHJvX3ZwOS5jCj4gQEAgLTAsMCArMSwyNDAgQEAKPiArLy8gU1BEWC1MaWNlbnNlLUlkZW50 aWZpZXI6IEdQTC0yLjAKPiArLyoKPiArICogSGFudHJvIFZQOSBjb2RlYyBkcml2ZXIKPiArICoK PiArICogQ29weXJpZ2h0IChDKSAyMDIxIENvbGxhYm9yYSBMdGQuCj4gKyAqLwo+ICsKPiArI2lu Y2x1ZGUgPGxpbnV4L3R5cGVzLmg+Cj4gKyNpbmNsdWRlIDxtZWRpYS92NGwyLW1lbTJtZW0uaD4K PiArCj4gKyNpbmNsdWRlICJoYW50cm8uaCIKPiArI2luY2x1ZGUgImhhbnRyb19ody5oIgo+ICsj aW5jbHVkZSAiaGFudHJvX3ZwOS5oIgo+ICsKPiArI2RlZmluZSBQT1cyKHgpICgxIDw8ICh4KSkK PiArCj4gKyNkZWZpbmUgTUFYX0xPRzJfVElMRV9DT0xVTU5TIDYKPiArI2RlZmluZSBNQVhfTlVN X1RJTEVfQ09MUyBQT1cyKE1BWF9MT0cyX1RJTEVfQ09MVU1OUykKPiArI2RlZmluZSBNQVhfVElM RV9DT0xTIDIwCj4gKyNkZWZpbmUgTUFYX1RJTEVfUk9XUyAyMgo+ICsKPiArc3RhdGljIHNpemVf dCBoYW50cm9fdnA5X3RpbGVfZmlsdGVyX3NpemUodW5zaWduZWQgaW50IGhlaWdodCkKPiArewo+ ICsJdTMyIGgsIGhlaWdodDMyLCBzaXplOwo+ICsKPiArCWggPSByb3VuZHVwKGhlaWdodCwgOCk7 Cj4gKwo+ICsJaGVpZ2h0MzIgPSByb3VuZHVwKGgsIDY0KTsKPiArCXNpemUgPSAyNCAqIGhlaWdo dDMyICogKE1BWF9OVU1fVElMRV9DT0xTIC0gMSk7IC8qIGx1bWE6IDgsIGNocm9tYTogOCArIDgg Ki8KPiArCj4gKwlyZXR1cm4gc2l6ZTsKPiArfQo+ICsKPiArc3RhdGljIHNpemVfdCBoYW50cm9f dnA5X2JzZF9jb250cm9sX3NpemUodW5zaWduZWQgaW50IGhlaWdodCkKPiArewo+ICsJdTMyIGgs IGhlaWdodDMyOwo+ICsKPiArCWggPSByb3VuZHVwKGhlaWdodCwgOCk7Cj4gKwloZWlnaHQzMiA9 IHJvdW5kdXAoaCwgNjQpOwo+ICsKPiArCXJldHVybiAxNiAqIChoZWlnaHQzMiAvIDQpICogKE1B WF9OVU1fVElMRV9DT0xTIC0gMSk7Cj4gK30KPiArCj4gK3N0YXRpYyBzaXplX3QgaGFudHJvX3Zw OV9zZWdtZW50X21hcF9zaXplKHVuc2lnbmVkIGludCB3aWR0aCwgdW5zaWduZWQgaW50IGhlaWdo dCkKPiArewo+ICsJdTMyIHcsIGg7Cj4gKwlpbnQgbnVtX2N0YnM7Cj4gKwo+ICsJdyA9IHJvdW5k dXAod2lkdGgsIDgpOwo+ICsJaCA9IHJvdW5kdXAoaGVpZ2h0LCA4KTsKPiArCW51bV9jdGJzID0g KCh3ICsgNjMpIC8gNjQpICogKChoICsgNjMpIC8gNjQpOwo+ICsKPiArCXJldHVybiBudW1fY3Ri cyAqIDMyOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW5saW5lIHNpemVfdCBoYW50cm9fdnA5X3Byb2Jf dGFiX3NpemUodm9pZCkKPiArewo+ICsJcmV0dXJuIHJvdW5kdXAoc2l6ZW9mKHN0cnVjdCBoYW50 cm9fZzJfYWxsX3Byb2JzKSwgMTYpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW5saW5lIHNpemVfdCBo YW50cm9fdnA5X2NvdW50X3RhYl9zaXplKHZvaWQpCj4gK3sKPiArCXJldHVybiByb3VuZHVwKHNp emVvZihzdHJ1Y3Qgc3ltYm9sX2NvdW50cyksIDE2KTsKPiArfQo+ICsKPiArc3RhdGljIGlubGlu ZSBzaXplX3QgaGFudHJvX3ZwOV90aWxlX2luZm9fc2l6ZSh2b2lkKQo+ICt7Cj4gKwlyZXR1cm4g cm91bmR1cCgoTUFYX1RJTEVfQ09MUyAqIE1BWF9USUxFX1JPV1MgKiA0ICogc2l6ZW9mKHUxNikg KyAxNSArIDE2KSAmIH4weGYsIDE2KTsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgKmdldF9jb2Vm ZnNfYXJyKHN0cnVjdCBzeW1ib2xfY291bnRzICpjbnRzLCBpbnQgaSwgaW50IGosIGludCBrLCBp bnQgbCwgaW50IG0pCj4gK3sKPiArCWlmIChpID09IDApCj4gKwkJcmV0dXJuICZjbnRzLT5jb3Vu dF9jb2VmZnNbal1ba11bbF1bbV07Cj4gKwo+ICsJaWYgKGkgPT0gMSkKPiArCQlyZXR1cm4gJmNu dHMtPmNvdW50X2NvZWZmczh4OFtqXVtrXVtsXVttXTsKPiArCj4gKwlpZiAoaSA9PSAyKQo+ICsJ CXJldHVybiAmY250cy0+Y291bnRfY29lZmZzMTZ4MTZbal1ba11bbF1bbV07Cj4gKwo+ICsJaWYg KGkgPT0gMykKPiArCQlyZXR1cm4gJmNudHMtPmNvdW50X2NvZWZmczMyeDMyW2pdW2tdW2xdW21d Owo+ICsKPiArCXJldHVybiBOVUxMOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCAqZ2V0X2VvYnMx KHN0cnVjdCBzeW1ib2xfY291bnRzICpjbnRzLCBpbnQgaSwgaW50IGosIGludCBrLCBpbnQgbCwg aW50IG0pCj4gK3sKPiArCWlmIChpID09IDApCj4gKwkJcmV0dXJuICZjbnRzLT5jb3VudF9jb2Vm ZnNbal1ba11bbF1bbV1bM107Cj4gKwo+ICsJaWYgKGkgPT0gMSkKPiArCQlyZXR1cm4gJmNudHMt PmNvdW50X2NvZWZmczh4OFtqXVtrXVtsXVttXVszXTsKPiArCj4gKwlpZiAoaSA9PSAyKQo+ICsJ CXJldHVybiAmY250cy0+Y291bnRfY29lZmZzMTZ4MTZbal1ba11bbF1bbV1bM107Cj4gKwo+ICsJ aWYgKGkgPT0gMykKPiArCQlyZXR1cm4gJmNudHMtPmNvdW50X2NvZWZmczMyeDMyW2pdW2tdW2xd W21dWzNdOwo+ICsKPiArCXJldHVybiBOVUxMOwo+ICt9Cj4gKwo+ICsjZGVmaW5lIElOTkVSX0xP T1AgXAo+ICsJZG8gewkJCQkJCQkJCQlcCj4gKwkJZm9yIChtID0gMDsgbSA8IEFSUkFZX1NJWkUo dnA5X2N0eC0+Y250cy5jb2VmZltpXVswXVswXVswXSk7ICsrbSkgewlcCj4gKwkJCXZwOV9jdHgt PmNudHMuY29lZmZbaV1bal1ba11bbF1bbV0gPQkJCQlcCj4gKwkJCQlnZXRfY29lZmZzX2Fycihj bnRzLCBpLCBqLCBrLCBsLCBtKTsJCQlcCj4gKwkJCXZwOV9jdHgtPmNudHMuZW9iW2ldW2pdW2td W2xdW21dWzBdID0JCQkJXAo+ICsJCQkJJmNudHMtPmNvdW50X2VvYnNbaV1bal1ba11bbF1bbV07 CQkJXAo+ICsJCQl2cDlfY3R4LT5jbnRzLmVvYltpXVtqXVtrXVtsXVttXVsxXSA9CQkJCVwKPiAr CQkJCWdldF9lb2JzMShjbnRzLCBpLCBqLCBrLCBsLCBtKTsJCQkJXAo+ICsJCX0JCQkJCQkJCQlc Cj4gKwl9IHdoaWxlICgwKQo+ICsKPiArc3RhdGljIHZvaWQgaW5pdF92NGwyX3ZwOV9jb3VudF90 Ymwoc3RydWN0IGhhbnRyb19jdHggKmN0eCkKPiArewo+ICsJc3RydWN0IGhhbnRyb192cDlfZGVj X2h3X2N0eCAqdnA5X2N0eCA9ICZjdHgtPnZwOV9kZWM7Cj4gKwlzdHJ1Y3Qgc3ltYm9sX2NvdW50 cyAqY250cyA9IHZwOV9jdHgtPm1pc2MuY3B1ICsgdnA5X2N0eC0+Y3R4X2NvdW50ZXJzX29mZnNl dDsKPiArCWludCBpLCBqLCBrLCBsLCBtOwo+ICsKPiArCXZwOV9jdHgtPmNudHMucGFydGl0aW9u ID0gJmNudHMtPnBhcnRpdGlvbl9jb3VudHM7Cj4gKwl2cDlfY3R4LT5jbnRzLnNraXAgPSAmY250 cy0+bWJza2lwX2NvdW50Owo+ICsJdnA5X2N0eC0+Y250cy5pbnRyYV9pbnRlciA9ICZjbnRzLT5p bnRyYV9pbnRlcl9jb3VudDsKPiArCXZwOV9jdHgtPmNudHMudHgzMnAgPSAmY250cy0+dHgzMngz Ml9jb3VudDsKPiArCS8qCj4gKwkgKiBnMiBoYXJkd2FyZSB1c2VzIHR4MTZ4MTZfY291bnRbMl1b M10sIHdoaWxlIHRoZSBhcGkKPiArCSAqIGV4cGVjdHMgdHgxNnBbMl1bNF0sIHNvIHRoaXMgbXVz dCBiZSBleHBsaWNpdGx5IGNvcGllZAo+ICsJICogaW50byB2cDlfY3R4LT5jbnRzLnR4MTZwIHdo ZW4gcGFzc2luZyB0aGUgZGF0YSB0byB0aGUKPiArCSAqIHZwOSBsaWJyYXJ5IGZ1bmN0aW9uCj4g KwkgKi8KPiArCXZwOV9jdHgtPmNudHMudHg4cCA9ICZjbnRzLT50eDh4OF9jb3VudDsKPiArCj4g Kwl2cDlfY3R4LT5jbnRzLnlfbW9kZSA9ICZjbnRzLT5zYl95bW9kZV9jb3VudHM7Cj4gKwl2cDlf Y3R4LT5jbnRzLnV2X21vZGUgPSAmY250cy0+dXZfbW9kZV9jb3VudHM7Cj4gKwl2cDlfY3R4LT5j bnRzLmNvbXAgPSAmY250cy0+Y29tcF9pbnRlcl9jb3VudDsKPiArCXZwOV9jdHgtPmNudHMuY29t cF9yZWYgPSAmY250cy0+Y29tcF9yZWZfY291bnQ7Cj4gKwl2cDlfY3R4LT5jbnRzLnNpbmdsZV9y ZWYgPSAmY250cy0+c2luZ2xlX3JlZl9jb3VudDsKPiArCXZwOV9jdHgtPmNudHMuZmlsdGVyID0g JmNudHMtPnN3aXRjaGFibGVfaW50ZXJwX2NvdW50czsKPiArCXZwOV9jdHgtPmNudHMubXZfam9p bnQgPSAmY250cy0+bXZfY291bnRzLmpvaW50czsKPiArCXZwOV9jdHgtPmNudHMuc2lnbiA9ICZj bnRzLT5tdl9jb3VudHMuc2lnbjsKPiArCXZwOV9jdHgtPmNudHMuY2xhc3NlcyA9ICZjbnRzLT5t dl9jb3VudHMuY2xhc3NlczsKPiArCXZwOV9jdHgtPmNudHMuY2xhc3MwID0gJmNudHMtPm12X2Nv dW50cy5jbGFzczA7Cj4gKwl2cDlfY3R4LT5jbnRzLmJpdHMgPSAmY250cy0+bXZfY291bnRzLmJp dHM7Cj4gKwl2cDlfY3R4LT5jbnRzLmNsYXNzMF9mcCA9ICZjbnRzLT5tdl9jb3VudHMuY2xhc3Mw X2ZwOwo+ICsJdnA5X2N0eC0+Y250cy5mcCA9ICZjbnRzLT5tdl9jb3VudHMuZnA7Cj4gKwl2cDlf Y3R4LT5jbnRzLmNsYXNzMF9ocCA9ICZjbnRzLT5tdl9jb3VudHMuY2xhc3MwX2hwOwo+ICsJdnA5 X2N0eC0+Y250cy5ocCA9ICZjbnRzLT5tdl9jb3VudHMuaHA7Cj4gKwo+ICsJZm9yIChpID0gMDsg aSA8IEFSUkFZX1NJWkUodnA5X2N0eC0+Y250cy5jb2VmZik7ICsraSkKPiArCQlmb3IgKGogPSAw OyBqIDwgQVJSQVlfU0laRSh2cDlfY3R4LT5jbnRzLmNvZWZmW2ldKTsgKytqKQo+ICsJCQlmb3Ig KGsgPSAwOyBrIDwgQVJSQVlfU0laRSh2cDlfY3R4LT5jbnRzLmNvZWZmW2ldWzBdKTsgKytrKQo+ ICsJCQkJZm9yIChsID0gMDsgbCA8IEFSUkFZX1NJWkUodnA5X2N0eC0+Y250cy5jb2VmZltpXVsw XVswXSk7ICsrbCkKPiArCQkJCQlJTk5FUl9MT09QOwo+ICt9Cj4gKwo+ICtpbnQgaGFudHJvX3Zw OV9kZWNfaW5pdChzdHJ1Y3QgaGFudHJvX2N0eCAqY3R4KQo+ICt7Cj4gKwlzdHJ1Y3QgaGFudHJv X2RldiAqdnB1ID0gY3R4LT5kZXY7Cj4gKwljb25zdCBzdHJ1Y3QgaGFudHJvX3ZhcmlhbnQgKnZh cmlhbnQgPSB2cHUtPnZhcmlhbnQ7Cj4gKwlzdHJ1Y3QgaGFudHJvX3ZwOV9kZWNfaHdfY3R4ICp2 cDlfZGVjID0gJmN0eC0+dnA5X2RlYzsKPiArCXN0cnVjdCBoYW50cm9fYXV4X2J1ZiAqdGlsZV9l ZGdlID0gJnZwOV9kZWMtPnRpbGVfZWRnZTsKPiArCXN0cnVjdCBoYW50cm9fYXV4X2J1ZiAqc2Vn bWVudF9tYXAgPSAmdnA5X2RlYy0+c2VnbWVudF9tYXA7Cj4gKwlzdHJ1Y3QgaGFudHJvX2F1eF9i dWYgKm1pc2MgPSAmdnA5X2RlYy0+bWlzYzsKPiArCXUzMiBpLCBtYXhfd2lkdGgsIG1heF9oZWln aHQsIHNpemU7Cj4gKwo+ICsJaWYgKHZhcmlhbnQtPm51bV9kZWNfZm10cyA8IDEpCj4gKwkJcmV0 dXJuIC1FSU5WQUw7Cj4gKwo+ICsJZm9yIChpID0gMDsgaSA8IHZhcmlhbnQtPm51bV9kZWNfZm10 czsgKytpKQo+ICsJCWlmICh2YXJpYW50LT5kZWNfZm10c1tpXS5mb3VyY2MgPT0gVjRMMl9QSVhf Rk1UX1ZQOV9GUkFNRSkKPiArCQkJYnJlYWs7Cj4gKwo+ICsJaWYgKGkgPT0gdmFyaWFudC0+bnVt X2RlY19mbXRzKQo+ICsJCXJldHVybiAtRUlOVkFMOwo+ICsKPiArCW1heF93aWR0aCA9IHZwdS0+ dmFyaWFudC0+ZGVjX2ZtdHNbaV0uZnJtc2l6ZS5tYXhfd2lkdGg7Cj4gKwltYXhfaGVpZ2h0ID0g dnB1LT52YXJpYW50LT5kZWNfZm10c1tpXS5mcm1zaXplLm1heF9oZWlnaHQ7Cj4gKwo+ICsJc2l6 ZSA9IGhhbnRyb192cDlfdGlsZV9maWx0ZXJfc2l6ZShtYXhfaGVpZ2h0KTsKPiArCXZwOV9kZWMt PmJzZF9jdHJsX29mZnNldCA9IHNpemU7Cj4gKwlzaXplICs9IGhhbnRyb192cDlfYnNkX2NvbnRy b2xfc2l6ZShtYXhfaGVpZ2h0KTsKPiArCj4gKwl0aWxlX2VkZ2UtPmNwdSA9IGRtYV9hbGxvY19j b2hlcmVudCh2cHUtPmRldiwgc2l6ZSwgJnRpbGVfZWRnZS0+ZG1hLCBHRlBfS0VSTkVMKTsKPiAr CWlmICghdGlsZV9lZGdlLT5jcHUpCj4gKwkJcmV0dXJuIC1FTk9NRU07Cj4gKwo+ICsJdGlsZV9l ZGdlLT5zaXplID0gc2l6ZTsKPiArCW1lbXNldCh0aWxlX2VkZ2UtPmNwdSwgMCwgc2l6ZSk7Cj4g Kwo+ICsJc2l6ZSA9IGhhbnRyb192cDlfc2VnbWVudF9tYXBfc2l6ZShtYXhfd2lkdGgsIG1heF9o ZWlnaHQpOwo+ICsJdnA5X2RlYy0+c2VnbWVudF9tYXBfc2l6ZSA9IHNpemU7Cj4gKwlzaXplICo9 IDI7IC8qIHdlIG5lZWQgdHdvIGFyZWFzIG9mIHRoaXMgc2l6ZSwgdXNlZCBhbHRlcm5hdGVseSAq Lwo+ICsKPiArCXNlZ21lbnRfbWFwLT5jcHUgPSBkbWFfYWxsb2NfY29oZXJlbnQodnB1LT5kZXYs IHNpemUsICZzZWdtZW50X21hcC0+ZG1hLCBHRlBfS0VSTkVMKTsKPiArCWlmICghc2VnbWVudF9t YXAtPmNwdSkKPiArCQlnb3RvIGVycl9zZWdtZW50X21hcDsKPiArCj4gKwlzZWdtZW50X21hcC0+ c2l6ZSA9IHNpemU7Cj4gKwltZW1zZXQoc2VnbWVudF9tYXAtPmNwdSwgMCwgc2l6ZSk7Cj4gKwo+ ICsJc2l6ZSA9IGhhbnRyb192cDlfcHJvYl90YWJfc2l6ZSgpOwo+ICsJdnA5X2RlYy0+Y3R4X2Nv dW50ZXJzX29mZnNldCA9IHNpemU7Cj4gKwlzaXplICs9IGhhbnRyb192cDlfY291bnRfdGFiX3Np emUoKTsKPiArCXZwOV9kZWMtPnRpbGVfaW5mb19vZmZzZXQgPSBzaXplOwo+ICsJc2l6ZSArPSBo YW50cm9fdnA5X3RpbGVfaW5mb19zaXplKCk7Cj4gKwo+ICsJbWlzYy0+Y3B1ID0gZG1hX2FsbG9j X2NvaGVyZW50KHZwdS0+ZGV2LCBzaXplLCAmbWlzYy0+ZG1hLCBHRlBfS0VSTkVMKTsKPiArCWlm ICghbWlzYy0+Y3B1KQo+ICsJCWdvdG8gZXJyX21pc2M7Cj4gKwo+ICsJbWlzYy0+c2l6ZSA9IHNp emU7Cj4gKwltZW1zZXQobWlzYy0+Y3B1LCAwLCBzaXplKTsKPiArCj4gKwlpbml0X3Y0bDJfdnA5 X2NvdW50X3RibChjdHgpOwo+ICsKPiArCXJldHVybiAwOwo+ICsKPiArZXJyX21pc2M6Cj4gKwlk bWFfZnJlZV9jb2hlcmVudCh2cHUtPmRldiwgc2VnbWVudF9tYXAtPnNpemUsIHNlZ21lbnRfbWFw LT5jcHUsIHNlZ21lbnRfbWFwLT5kbWEpOwo+ICsKPiArZXJyX3NlZ21lbnRfbWFwOgo+ICsJZG1h X2ZyZWVfY29oZXJlbnQodnB1LT5kZXYsIHRpbGVfZWRnZS0+c2l6ZSwgdGlsZV9lZGdlLT5jcHUs IHRpbGVfZWRnZS0+ZG1hKTsKPiArCj4gKwlyZXR1cm4gLUVOT01FTTsKPiArfQo+ICsKPiArdm9p ZCBoYW50cm9fdnA5X2RlY19leGl0KHN0cnVjdCBoYW50cm9fY3R4ICpjdHgpCj4gK3sKPiArCXN0 cnVjdCBoYW50cm9fZGV2ICp2cHUgPSBjdHgtPmRldjsKPiArCXN0cnVjdCBoYW50cm9fdnA5X2Rl Y19od19jdHggKnZwOV9kZWMgPSAmY3R4LT52cDlfZGVjOwo+ICsJc3RydWN0IGhhbnRyb19hdXhf YnVmICp0aWxlX2VkZ2UgPSAmdnA5X2RlYy0+dGlsZV9lZGdlOwo+ICsJc3RydWN0IGhhbnRyb19h dXhfYnVmICpzZWdtZW50X21hcCA9ICZ2cDlfZGVjLT5zZWdtZW50X21hcDsKPiArCXN0cnVjdCBo YW50cm9fYXV4X2J1ZiAqbWlzYyA9ICZ2cDlfZGVjLT5taXNjOwo+ICsKPiArCWRtYV9mcmVlX2Nv aGVyZW50KHZwdS0+ZGV2LCBtaXNjLT5zaXplLCBtaXNjLT5jcHUsIG1pc2MtPmRtYSk7Cj4gKwlk bWFfZnJlZV9jb2hlcmVudCh2cHUtPmRldiwgc2VnbWVudF9tYXAtPnNpemUsIHNlZ21lbnRfbWFw LT5jcHUsIHNlZ21lbnRfbWFwLT5kbWEpOwo+ICsJZG1hX2ZyZWVfY29oZXJlbnQodnB1LT5kZXYs IHRpbGVfZWRnZS0+c2l6ZSwgdGlsZV9lZGdlLT5jcHUsIHRpbGVfZWRnZS0+ZG1hKTsKPiArfQo+ IGRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvbWVkaWEvaGFudHJvL2hhbnRyb192cDkuaCBi L2RyaXZlcnMvc3RhZ2luZy9tZWRpYS9oYW50cm8vaGFudHJvX3ZwOS5oCj4gbmV3IGZpbGUgbW9k ZSAxMDA2NDQKPiBpbmRleCAwMDAwMDAwMDAwMDAuLmM3ZjRiZDNmZjhkZAo+IC0tLSAvZGV2L251 bGwKPiArKysgYi9kcml2ZXJzL3N0YWdpbmcvbWVkaWEvaGFudHJvL2hhbnRyb192cDkuaAo+IEBA IC0wLDAgKzEsMTAzIEBACj4gKy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wICov Cj4gKy8qCj4gKyAqIEhhbnRybyBWUDkgY29kZWMgZHJpdmVyCj4gKyAqCj4gKyAqIENvcHlyaWdo dCAoQykgMjAyMSBDb2xsYWJvcmEgTHRkLgo+ICsgKi8KPiArCj4gK3N0cnVjdCBoYW50cm9fZzJf bXZfcHJvYnMgewo+ICsJdTggam9pbnRbM107Cj4gKwl1OCBzaWduWzJdOwo+ICsJdTggY2xhc3Mw X2JpdFsyXVsxXTsKPiArCXU4IGZyWzJdWzNdOwo+ICsJdTggY2xhc3MwX2hwWzJdOwo+ICsJdTgg aHBbMl07Cj4gKwl1OCBjbGFzc2VzWzJdWzEwXTsKPiArCXU4IGNsYXNzMF9mclsyXVsyXVszXTsK PiArCXU4IGJpdHNbMl1bMTBdOwo+ICt9Owo+ICsKPiArc3RydWN0IGhhbnRyb19nMl9wcm9icyB7 Cj4gKwl1OCBpbnRlcl9tb2RlWzddWzRdOwo+ICsJdTggaXNfaW50ZXJbNF07Cj4gKwl1OCB1dl9t b2RlWzEwXVs4XTsKPiArCXU4IHR4OFsyXVsxXTsKPiArCXU4IHR4MTZbMl1bMl07Cj4gKwl1OCB0 eDMyWzJdWzNdOwo+ICsJdTggeV9tb2RlX3RhaWxbNF1bMV07Cj4gKwl1OCB5X21vZGVbNF1bOF07 Cj4gKwl1OCBwYXJ0aXRpb25bMl1bMTZdWzRdOyAvKiBba2V5ZnJhbWVdW11bXSwgW2ludGVyXVtd W10gKi8KPiArCXU4IHV2X21vZGVfdGFpbFsxMF1bMV07Cj4gKwl1OCBpbnRlcnBfZmlsdGVyWzRd WzJdOwo+ICsJdTggY29tcF9tb2RlWzVdOwo+ICsJdTggc2tpcFszXTsKPiArCj4gKwl1OCBwYWQx WzFdOwo+ICsKPiArCXN0cnVjdCBoYW50cm9fZzJfbXZfcHJvYnMgbXY7Cj4gKwo+ICsJdTggc2lu Z2xlX3JlZls1XVsyXTsKPiArCXU4IGNvbXBfcmVmWzVdOwo+ICsKPiArCXU4IHBhZDJbMTddOwo+ ICsKPiArCXU4IGNvZWZbNF1bMl1bMl1bNl1bNl1bNF07Cj4gK307Cj4gKwo+ICtzdHJ1Y3QgaGFu dHJvX2cyX2FsbF9wcm9icyB7Cj4gKwl1OCBrZl95X21vZGVfcHJvYlsxMF1bMTBdWzhdOwo+ICsK PiArCXU4IGtmX3lfbW9kZV9wcm9iX3RhaWxbMTBdWzEwXVsxXTsKPiArCXU4IHJlZl9wcmVkX3By b2JzWzNdOwo+ICsJdTggbWJfc2VnbWVudF90cmVlX3Byb2JzWzddOwo+ICsJdTggc2VnbWVudF9w cmVkX3Byb2JzWzNdOwo+ICsJdTggcmVmX3Njb3Jlc1s0XTsKPiArCXU4IHByb2JfY29tcHByZWRb Ml07Cj4gKwo+ICsJdTggcGFkMVs5XTsKPiArCj4gKwl1OCBrZl91dl9tb2RlX3Byb2JbMTBdWzhd Owo+ICsJdTgga2ZfdXZfbW9kZV9wcm9iX3RhaWxbMTBdWzFdOwo+ICsKPiArCXU4IHBhZDJbNl07 Cj4gKwo+ICsJc3RydWN0IGhhbnRyb19nMl9wcm9icyBwcm9iczsKPiArfTsKPiArCj4gK3N0cnVj dCBtdl9jb3VudHMgewo+ICsJdTMyIGpvaW50c1s0XTsKPiArCXUzMiBzaWduWzJdWzJdOwo+ICsJ dTMyIGNsYXNzZXNbMl1bMTFdOwo+ICsJdTMyIGNsYXNzMFsyXVsyXTsKPiArCXUzMiBiaXRzWzJd WzEwXVsyXTsKPiArCXUzMiBjbGFzczBfZnBbMl1bMl1bNF07Cj4gKwl1MzIgZnBbMl1bNF07Cj4g Kwl1MzIgY2xhc3MwX2hwWzJdWzJdOwo+ICsJdTMyIGhwWzJdWzJdOwo+ICt9Owo+ICsKPiArc3Ry dWN0IHN5bWJvbF9jb3VudHMgewo+ICsJdTMyIGludGVyX21vZGVfY291bnRzWzddWzNdWzJdOwo+ ICsJdTMyIHNiX3ltb2RlX2NvdW50c1s0XVsxMF07Cj4gKwl1MzIgdXZfbW9kZV9jb3VudHNbMTBd WzEwXTsKPiArCXUzMiBwYXJ0aXRpb25fY291bnRzWzE2XVs0XTsKPiArCXUzMiBzd2l0Y2hhYmxl X2ludGVycF9jb3VudHNbNF1bM107Cj4gKwl1MzIgaW50cmFfaW50ZXJfY291bnRbNF1bMl07Cj4g Kwl1MzIgY29tcF9pbnRlcl9jb3VudFs1XVsyXTsKPiArCXUzMiBzaW5nbGVfcmVmX2NvdW50WzVd WzJdWzJdOwo+ICsJdTMyIGNvbXBfcmVmX2NvdW50WzVdWzJdOwo+ICsJdTMyIHR4MzJ4MzJfY291 bnRbMl1bNF07Cj4gKwl1MzIgdHgxNngxNl9jb3VudFsyXVszXTsKPiArCXUzMiB0eDh4OF9jb3Vu dFsyXVsyXTsKPiArCXUzMiBtYnNraXBfY291bnRbM11bMl07Cj4gKwo+ICsJc3RydWN0IG12X2Nv dW50cyBtdl9jb3VudHM7Cj4gKwo+ICsJdTMyIGNvdW50X2NvZWZmc1syXVsyXVs2XVs2XVs0XTsK PiArCXUzMiBjb3VudF9jb2VmZnM4eDhbMl1bMl1bNl1bNl1bNF07Cj4gKwl1MzIgY291bnRfY29l ZmZzMTZ4MTZbMl1bMl1bNl1bNl1bNF07Cj4gKwl1MzIgY291bnRfY29lZmZzMzJ4MzJbMl1bMl1b Nl1bNl1bNF07Cj4gKwo+ICsJdTMyIGNvdW50X2VvYnNbNF1bMl1bMl1bNl1bNl07Cj4gK307Cj4g Kwo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvbWVkaWEvaGFudHJvL2lteDhtX3ZwdV9o dy5jIGIvZHJpdmVycy9zdGFnaW5nL21lZGlhL2hhbnRyby9pbXg4bV92cHVfaHcuYwo+IGluZGV4 IGE0MGIxNjFlNTk1Ni4uNDU1YTEwN2ZmYjAyIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvc3RhZ2lu Zy9tZWRpYS9oYW50cm8vaW14OG1fdnB1X2h3LmMKPiArKysgYi9kcml2ZXJzL3N0YWdpbmcvbWVk aWEvaGFudHJvL2lteDhtX3ZwdV9ody5jCj4gQEAgLTE1MCw2ICsxNTAsMTkgQEAgc3RhdGljIGNv bnN0IHN0cnVjdCBoYW50cm9fZm10IGlteDhtX3ZwdV9nMl9kZWNfZm10c1tdID0gewo+ICAJCQku c3RlcF9oZWlnaHQgPSBNQl9ESU0sCj4gIAkJfSwKPiAgCX0sCj4gKwl7Cj4gKwkJLmZvdXJjYyA9 IFY0TDJfUElYX0ZNVF9WUDlfRlJBTUUsCj4gKwkJLmNvZGVjX21vZGUgPSBIQU5UUk9fTU9ERV9W UDlfREVDLAo+ICsJCS5tYXhfZGVwdGggPSAyLAo+ICsJCS5mcm1zaXplID0gewo+ICsJCQkubWlu X3dpZHRoID0gNDgsCj4gKwkJCS5tYXhfd2lkdGggPSAzODQwLAo+ICsJCQkuc3RlcF93aWR0aCA9 IE1CX0RJTSwKPiArCQkJLm1pbl9oZWlnaHQgPSA0OCwKPiArCQkJLm1heF9oZWlnaHQgPSAyMTYw LAo+ICsJCQkuc3RlcF9oZWlnaHQgPSBNQl9ESU0sCj4gKwkJfSwKPiArCX0sCj4gIH07Cj4gIAo+ ICBzdGF0aWMgaXJxcmV0dXJuX3QgaW14OG1fdnB1X2cxX2lycShpbnQgaXJxLCB2b2lkICpkZXZf aWQpCj4gQEAgLTI0MSw2ICsyNTQsMTMgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBoYW50cm9fY29k ZWNfb3BzIGlteDhtcV92cHVfZzJfY29kZWNfb3BzW10gPSB7Cj4gIAkJLmluaXQgPSBoYW50cm9f aGV2Y19kZWNfaW5pdCwKPiAgCQkuZXhpdCA9IGhhbnRyb19oZXZjX2RlY19leGl0LAo+ICAJfSwK PiArCVtIQU5UUk9fTU9ERV9WUDlfREVDXSA9IHsKPiArCQkucnVuID0gaGFudHJvX2cyX3ZwOV9k ZWNfcnVuLAo+ICsJCS5kb25lID0gaGFudHJvX2cyX3ZwOV9kZWNfZG9uZSwKPiArCQkucmVzZXQg PSBpbXg4bV92cHVfZzJfcmVzZXQsCj4gKwkJLmluaXQgPSBoYW50cm9fdnA5X2RlY19pbml0LAo+ ICsJCS5leGl0ID0gaGFudHJvX3ZwOV9kZWNfZXhpdCwKPiArCX0sCj4gIH07Cj4gIAo+ICAvKgo+ IEBAIC0yODEsNyArMzAxLDcgQEAgY29uc3Qgc3RydWN0IGhhbnRyb192YXJpYW50IGlteDhtcV92 cHVfZzJfdmFyaWFudCA9IHsKPiAgCS5kZWNfb2Zmc2V0ID0gMHgwLAo+ICAJLmRlY19mbXRzID0g aW14OG1fdnB1X2cyX2RlY19mbXRzLAo+ICAJLm51bV9kZWNfZm10cyA9IEFSUkFZX1NJWkUoaW14 OG1fdnB1X2cyX2RlY19mbXRzKSwKPiAtCS5jb2RlYyA9IEhBTlRST19IRVZDX0RFQ09ERVIsCj4g KwkuY29kZWMgPSBIQU5UUk9fSEVWQ19ERUNPREVSIHwgSEFOVFJPX1ZQOV9ERUNPREVSLAo+ICAJ LmNvZGVjX29wcyA9IGlteDhtcV92cHVfZzJfY29kZWNfb3BzLAo+ICAJLmluaXQgPSBpbXg4bXFf dnB1X2h3X2luaXQsCj4gIAkucnVudGltZV9yZXN1bWUgPSBpbXg4bXFfcnVudGltZV9yZXN1bWUs CgoKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkxpbnV4 LXJvY2tjaGlwIG1haWxpbmcgbGlzdApMaW51eC1yb2NrY2hpcEBsaXN0cy5pbmZyYWRlYWQub3Jn Cmh0dHA6Ly9saXN0cy5pbmZyYWRlYWQub3JnL21haWxtYW4vbGlzdGluZm8vbGludXgtcm9ja2No aXAK