Received: by 2002:a25:1985:0:0:0:0:0 with SMTP id 127csp104945ybz; Fri, 24 Apr 2020 12:35:40 -0700 (PDT) X-Google-Smtp-Source: APiQypJntywvFJ8WCFjLQyBbdZzJvwzBOqahruznoPW/Xqbkfn0/8mjHtPYkQrs4jQkkjInZNfl4 X-Received: by 2002:a17:906:3d69:: with SMTP id r9mr8763119ejf.20.1587756939871; Fri, 24 Apr 2020 12:35:39 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1587756939; cv=none; d=google.com; s=arc-20160816; b=SVL0zE1akWCKLc4aSIpo8eS18boJDJ4t628o+tjbNwVwFHe9dJsLbFPx/ARXTHUzES O3LIl0nI9E6JX8UJPNrTjfrBQlaOXODS+3J/ZlqOAJsa6hvsYvCYG7Ehj59P/9mXlKhy IToCBgO4nKr8sCE7cxZeLdczgroYh3pqldovFXuhqo6ngu1JqHPVLJJiBPpV3NJvHmrL eDNx6UfnSIh+4jH8wOLbjt/awbxgbsjWL4ObJ3Md8mIv3EDDAZGO3HIYOijO3HyDyHrR oYUO9YPGRBnsaSyl5vIIV3zS9+w2p0izB4/eq9WIc7sztQgQPs8stPbk9ys8pTNSQEa8 aR4Q== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=+/c+8SN/L67vPoOb+KDR67/tx96PI5Rxb9oTR1rx9YA=; b=fcCk8H43MjPfQUDlI/6pvcmEyyq2LyFWiE54/C3JYtaB7xRxNdlNJCrbkLM2rFntPw x+RGLmwyxexZpczK1Ecu14jvO7IfSDAW+cz+RniUUKKpXxNK5idWXGBXPIG97pTmfZGK aP6D7TGgcyi/+RrtPtJTo13/aEt3htVvvEQ3VVt842/GC6uswjvxDh/2M1/gg5HBIodh h5h6KK59DYrxpejsS2MwBbQXOJAiuOhEk/ZI1+FcgG8imeePKLksH5mr5qNAomMo9N7V JZrw1nXI8nIPBJyrxLdcCBWu/BQdZM/zFGKEZ57KjrUe8OGPX/cjLw6mGBGLMxHrIeb0 QrJw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@mediatek.com header.s=dk header.b=CFXSMMw2; spf=pass (google.com: domain of linux-wireless-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-wireless-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=mediatek.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id e7si3508019edv.284.2020.04.24.12.35.15; Fri, 24 Apr 2020 12:35:39 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-wireless-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@mediatek.com header.s=dk header.b=CFXSMMw2; spf=pass (google.com: domain of linux-wireless-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-wireless-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=mediatek.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727049AbgDXTdn (ORCPT + 99 others); Fri, 24 Apr 2020 15:33:43 -0400 Received: from mailgw01.mediatek.com ([210.61.82.183]:38853 "EHLO mailgw01.mediatek.com" rhost-flags-OK-FAIL-OK-FAIL) by vger.kernel.org with ESMTP id S1729154AbgDXTdm (ORCPT ); Fri, 24 Apr 2020 15:33:42 -0400 X-UUID: fb7a9db6fdfa40118c467bf7eff54c57-20200425 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=mediatek.com; s=dk; h=Content-Transfer-Encoding:Content-Type:MIME-Version:References:In-Reply-To:Message-ID:Date:Subject:CC:To:From; bh=+/c+8SN/L67vPoOb+KDR67/tx96PI5Rxb9oTR1rx9YA=; b=CFXSMMw2+qEMWrCpEP8LtZCZ8l9BcVDq+Zf7gvHSxpoiU+62mwDTaFRN+YiaH0sKwO87093OPUz+hhKB/9xBUoM2DtKWcxpP2+dpANnCfjFSC+pfA3VDWtNVwOEaeV8cjsPgdbPtsv8hpDnQEJmtv18ySFjEZvlqE26AYDeFK/I=; X-UUID: fb7a9db6fdfa40118c467bf7eff54c57-20200425 Received: from mtkcas08.mediatek.inc [(172.21.101.126)] by mailgw01.mediatek.com (envelope-from ) (Cellopoint E-mail Firewall v4.1.10 Build 0809 with TLS) with ESMTP id 1370578168; Sat, 25 Apr 2020 03:33:00 +0800 Received: from MTKCAS06.mediatek.inc (172.21.101.30) by mtkmbs02n2.mediatek.inc (172.21.101.101) with Microsoft SMTP Server (TLS) id 15.0.1497.2; Sat, 25 Apr 2020 03:32:47 +0800 Received: from mtksdccf07.mediatek.inc (172.21.84.99) by MTKCAS06.mediatek.inc (172.21.101.73) with Microsoft SMTP Server id 15.0.1497.2 via Frontend Transport; Sat, 25 Apr 2020 03:32:50 +0800 From: Ryder Lee To: Felix Fietkau , Lorenzo Bianconi CC: Shayne Chen , YF Luo , Yiwei Chung , Chih-Min Chen , Evelyn Tsai , "Sean Wang" , , , Ryder Lee Subject: [PATCH v3 06/18] mt76: add mac80211 driver for MT7915 PCIe-based chipsets Date: Sat, 25 Apr 2020 03:32:27 +0800 Message-ID: X-Mailer: git-send-email 2.18.0 In-Reply-To: References: MIME-Version: 1.0 Content-Type: text/plain X-TM-SNTS-SMTP: D2EEFB2375008A58FF51AC11397C0814BC27061C69FBC4BC9C52FD04539653F72000:8 X-MTK: N Content-Transfer-Encoding: base64 Sender: linux-wireless-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-wireless@vger.kernel.org QWRkIHN1cHBvcnQgZm9yIHRoZSBNZWRpYVRlayBsYXRlc3QgZ2VuZXJhdGlvbiBJRUVFIDgwMi4x MWF4IDR4NA0KZGV2aWNlIE1UNzkxNUUsIHdoaWNoIHN1cHBvcnRzIGNvbmN1cnJlbnQgZHVhbC1i YW5kIG9wZXJhdGlvbiBhdA0KYm90aCA1R0h6IGFuZCAyLjRHSHouDQoNCk5vdGUgdGhhdCB0aGlz IHBhdGNoIGp1c3QgYWRkIGJhc2ljIHBhcnQgYW5kIHdpbGwgYWRkIG1vcmUgSEUNCmNhcGFiaWxp dGllcyBzdXBwb3J0IGluIHRoZSBmdXJ0aGVyIHBhdGNoZXMuDQoNClRoZSBkcml2ZXIgc3VwcG9y dHMgQVAsIFN0YXRpb24sIE1lc2ggYW5kIG1vbml0b3IgbW9kZS4NCg0KU2lnbmVkLW9mZi1ieTog UnlkZXIgTGVlIDxyeWRlci5sZWVAbWVkaWF0ZWsuY29tPg0KU2lnbmVkLW9mZi1ieTogU2hheW5l IENoZW4gPHNoYXluZS5jaGVuQG1lZGlhdGVrLmNvbT4NClNpZ25lZC1vZmYtYnk6IENoaWgtTWlu IENoZW4gPGNoaWgtbWluLmNoZW5AbWVkaWF0ZWsuY29tPg0KU3VnZ2VzdGVkLWJ5OiBTaGlod2Vp IExpbiA8c2hpaHdlaS5saW5AbWVkaWF0ZWsuY29tPg0KVGVzdGVkLWJ5OiBFdmVseW4gVHNhaSA8 ZXZlbHluLnRzYWlAbWVkaWF0ZWsuY29tPg0KQWNrZWQtYnk6IFlpd2VpIENodW5nIDx5aXdlaS5j aHVuZ0BtZWRpYXRlay5jb20+DQpBY2tlZC1ieTogWUYgTHVvIDx5Zi5sdW9AbWVkaWF0ZWsuY29t Pg0KLS0tDQogZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9LY29uZmlnICAgIHwg ICAgMSArDQogZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9NYWtlZmlsZSAgIHwg ICAgMSArDQogLi4uL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkxNS9LY29uZmlnIHwg ICAxMyArDQogLi4uL3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTE1L01ha2VmaWxlICAgIHwg ICAgNiArDQogLi4uL3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTE1L2RlYnVnZnMuYyAgIHwg IDI0NSArKw0KIC4uLi9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MTUvZG1hLmMgICB8 ICAyODUgKysNCiAuLi4vd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MTUvZWVwcm9tLmMgICAg fCAgMTI1ICsNCiAuLi4vd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MTUvZWVwcm9tLmggICAg fCAgIDc4ICsNCiAuLi4vbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTE1L2luaXQuYyAg fCAgMzk1ICsrKw0KIC4uLi9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MTUvbWFjLmMg ICB8IDEyOTggKysrKysrKysrDQogLi4uL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210Nzkx NS9tYWMuaCAgIHwgIDMyOCArKysNCiAuLi4vbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3 OTE1L21haW4uYyAgfCAgNzQxICsrKysrKw0KIC4uLi9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3 Ni9tdDc5MTUvbWN1LmMgICB8IDIzMTMgKysrKysrKysrKysrKysrKysNCiAuLi4vbmV0L3dpcmVs ZXNzL21lZGlhdGVrL210NzYvbXQ3OTE1L21jdS5oICAgfCAgODM3ICsrKysrKw0KIC4uLi93aXJl bGVzcy9tZWRpYXRlay9tdDc2L210NzkxNS9tdDc5MTUuaCAgICB8ICA0NDEgKysrKw0KIC4uLi9u ZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MTUvcGNpLmMgICB8ICAxNjYgKysNCiAuLi4v bmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTE1L3JlZ3MuaCAgfCAgMzQzICsrKw0KIDE3 IGZpbGVzIGNoYW5nZWQsIDc2MTYgaW5zZXJ0aW9ucygrKQ0KIGNyZWF0ZSBtb2RlIDEwMDY0NCBk cml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkxNS9LY29uZmlnDQogY3JlYXRl IG1vZGUgMTAwNjQ0IGRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTE1L01h a2VmaWxlDQogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVr L210NzYvbXQ3OTE1L2RlYnVnZnMuYw0KIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL25ldC93 aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkxNS9kbWEuYw0KIGNyZWF0ZSBtb2RlIDEwMDY0NCBk cml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkxNS9lZXByb20uYw0KIGNyZWF0 ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkxNS9l ZXByb20uaA0KIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRl ay9tdDc2L210NzkxNS9pbml0LmMNCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9uZXQvd2ly ZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MTUvbWFjLmMNCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJp dmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MTUvbWFjLmgNCiBjcmVhdGUgbW9k ZSAxMDA2NDQgZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MTUvbWFpbi5j DQogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYv bXQ3OTE1L21jdS5jDQogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvbmV0L3dpcmVsZXNzL21l ZGlhdGVrL210NzYvbXQ3OTE1L21jdS5oDQogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvbmV0 L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTE1L210NzkxNS5oDQogY3JlYXRlIG1vZGUgMTAw NjQ0IGRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTE1L3BjaS5jDQogY3Jl YXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTE1 L3JlZ3MuaA0KDQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3 Ni9LY29uZmlnIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9LY29uZmlnDQpp bmRleCBjYmMyZDhhNWQzNTQuLjQxNTMzYTBlMTcyMCAxMDA2NDQNCi0tLSBhL2RyaXZlcnMvbmV0 L3dpcmVsZXNzL21lZGlhdGVrL210NzYvS2NvbmZpZw0KKysrIGIvZHJpdmVycy9uZXQvd2lyZWxl c3MvbWVkaWF0ZWsvbXQ3Ni9LY29uZmlnDQpAQCAtMjQsMyArMjQsNCBAQCBzb3VyY2UgImRyaXZl cnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3NngwL0tjb25maWciDQogc291cmNlICJk cml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzZ4Mi9LY29uZmlnIg0KIHNvdXJj ZSAiZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc2MDMvS2NvbmZpZyINCiBz b3VyY2UgImRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3NjE1L0tjb25maWci DQorc291cmNlICJkcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkxNS9LY29u ZmlnIg0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvTWFr ZWZpbGUgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L01ha2VmaWxlDQppbmRl eCBhMWRmYWZlYzQzMWIuLmVmNjYzYjg3M2IwYiAxMDA2NDQNCi0tLSBhL2RyaXZlcnMvbmV0L3dp cmVsZXNzL21lZGlhdGVrL210NzYvTWFrZWZpbGUNCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNz L21lZGlhdGVrL210NzYvTWFrZWZpbGUNCkBAIC0yNywzICsyNyw0IEBAIG9iai0kKENPTkZJR19N VDc2eDBfQ09NTU9OKSArPSBtdDc2eDAvDQogb2JqLSQoQ09ORklHX01UNzZ4Ml9DT01NT04pICs9 IG10NzZ4Mi8NCiBvYmotJChDT05GSUdfTVQ3NjAzRSkgKz0gbXQ3NjAzLw0KIG9iai0kKENPTkZJ R19NVDc2MTVfQ09NTU9OKSArPSBtdDc2MTUvDQorb2JqLSQoQ09ORklHX01UNzkxNUUpICs9IG10 NzkxNS8NCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210 NzkxNS9LY29uZmlnIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MTUv S2NvbmZpZw0KbmV3IGZpbGUgbW9kZSAxMDA2NDQNCmluZGV4IDAwMDAwMDAwMDAwMC4uZDk4MjI1 ZGE2OTRjDQotLS0gL2Rldi9udWxsDQorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRl ay9tdDc2L210NzkxNS9LY29uZmlnDQpAQCAtMCwwICsxLDEzIEBADQorIyBTUERYLUxpY2Vuc2Ut SWRlbnRpZmllcjogSVNDDQorY29uZmlnIE1UNzkxNUUNCisJdHJpc3RhdGUgIk1lZGlhVGVrIE1U NzkxNUUgKFBDSWUpIHN1cHBvcnQiDQorCXNlbGVjdCBNVDc2X0NPUkUNCisJZGVwZW5kcyBvbiBN QUM4MDIxMQ0KKwlkZXBlbmRzIG9uIFBDSQ0KKwloZWxwDQorCSAgVGhpcyBhZGRzIHN1cHBvcnQg Zm9yIE1UNzkxNS1iYXNlZCB3aXJlbGVzcyBQQ0llIGRldmljZXMsDQorCSAgd2hpY2ggc3VwcG9y dCBjb25jdXJyZW50IGR1YWwtYmFuZCBvcGVyYXRpb24gYXQgYm90aCA1R0h6DQorCSAgYW5kIDIu NEdIeiBJRUVFIDgwMi4xMWF4IDR4NDo0U1MgMTAyNC1RQU0sIDE2ME1IeiBjaGFubmVscywNCisJ ICBPRkRNQSwgc3BhdGlhbCByZXVzZSBhbmQgZHVhbCBjYXJyaWVyIG1vZHVsYXRpb24uDQorDQor CSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZS4NCmRp ZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkxNS9NYWtl ZmlsZSBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTE1L01ha2VmaWxl DQpuZXcgZmlsZSBtb2RlIDEwMDY0NA0KaW5kZXggMDAwMDAwMDAwMDAwLi41N2ZlNzI2Y2MzOGIN Ci0tLSAvZGV2L251bGwNCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYv bXQ3OTE1L01ha2VmaWxlDQpAQCAtMCwwICsxLDYgQEANCisjU1BEWC1MaWNlbnNlLUlkZW50aWZp ZXI6IElTQw0KKw0KK29iai0kKENPTkZJR19NVDc5MTVFKSArPSBtdDc5MTVlLm8NCisNCittdDc5 MTVlLXkgOj0gcGNpLm8gaW5pdC5vIGRtYS5vIGVlcHJvbS5vIG1haW4ubyBtY3UubyBtYWMubyBc DQorCSAgICAgZGVidWdmcy5vDQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVk aWF0ZWsvbXQ3Ni9tdDc5MTUvZGVidWdmcy5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0 ZWsvbXQ3Ni9tdDc5MTUvZGVidWdmcy5jDQpuZXcgZmlsZSBtb2RlIDEwMDY0NA0KaW5kZXggMDAw MDAwMDAwMDAwLi4xNTJhZTA2MTdmM2QNCi0tLSAvZGV2L251bGwNCisrKyBiL2RyaXZlcnMvbmV0 L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTE1L2RlYnVnZnMuYw0KQEAgLTAsMCArMSwyNDUg QEANCisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogSVNDDQorLyogQ29weXJpZ2h0IChDKSAy MDIwIE1lZGlhVGVrIEluYy4gKi8NCisNCisjaW5jbHVkZSAibXQ3OTE1LmgiDQorI2luY2x1ZGUg ImVlcHJvbS5oIg0KKw0KKy8qKiBnbG9iYWwgZGVidWdmcyAqKi8NCisNCisvKiB0ZXN0IGtub2Ig b2Ygc3lzdGVtIGxheWVyIDEvMiBlcnJvciByZWNvdmVyeSAqLw0KK3N0YXRpYyBpbnQgbXQ3OTE1 X3Nlcl90cmlnZ2VyX3NldCh2b2lkICpkYXRhLCB1NjQgdmFsKQ0KK3sNCisJZW51bSB7DQorCQlT RVJfU0VUX1JFQ09WRVJfTDEgPSAxLA0KKwkJU0VSX1NFVF9SRUNPVkVSX0wyLA0KKwkJU0VSX0VO QUJMRSA9IDIsDQorCQlTRVJfUkVDT1ZFUg0KKwl9Ow0KKwlzdHJ1Y3QgbXQ3OTE1X2RldiAqZGV2 ID0gZGF0YTsNCisJaW50IHJldCA9IDA7DQorDQorCXN3aXRjaCAodmFsKSB7DQorCWNhc2UgU0VS X1NFVF9SRUNPVkVSX0wxOg0KKwljYXNlIFNFUl9TRVRfUkVDT1ZFUl9MMjoNCisJCS8qIGZhbGwg dGhyb3VnaCAqLw0KKwkJcmV0ID0gbXQ3OTE1X21jdV9zZXRfc2VyKGRldiwgU0VSX0VOQUJMRSwg QklUKHZhbCksIDApOw0KKwkJaWYgKHJldCkNCisJCQlyZXR1cm4gcmV0Ow0KKw0KKwkJcmV0dXJu IG10NzkxNV9tY3Vfc2V0X3NlcihkZXYsIFNFUl9SRUNPVkVSLCB2YWwsIDApOw0KKwlkZWZhdWx0 Og0KKwkJYnJlYWs7DQorCX0NCisNCisJcmV0dXJuIHJldDsNCit9DQorDQorREVGSU5FX0RFQlVH RlNfQVRUUklCVVRFKGZvcHNfc2VyX3RyaWdnZXIsIE5VTEwsDQorCQkJIG10NzkxNV9zZXJfdHJp Z2dlcl9zZXQsICIlbGxkXG4iKTsNCisNCitzdGF0aWMgaW50DQorbXQ3OTE1X3JhZGFyX3RyaWdn ZXIodm9pZCAqZGF0YSwgdTY0IHZhbCkNCit7DQorCXN0cnVjdCBtdDc5MTVfZGV2ICpkZXYgPSBk YXRhOw0KKw0KKwlyZXR1cm4gbXQ3OTE1X21jdV9yZGRfY21kKGRldiwgUkREX1JBREFSX0VNVUxB VEUsIDEsIDAsIDApOw0KK30NCisNCitERUZJTkVfREVCVUdGU19BVFRSSUJVVEUoZm9wc19yYWRh cl90cmlnZ2VyLCBOVUxMLA0KKwkJCSBtdDc5MTVfcmFkYXJfdHJpZ2dlciwgIiVsbGRcbiIpOw0K Kw0KK3N0YXRpYyBpbnQNCittdDc5MTVfZGJkY19zZXQodm9pZCAqZGF0YSwgdTY0IHZhbCkNCit7 DQorCXN0cnVjdCBtdDc5MTVfZGV2ICpkZXYgPSBkYXRhOw0KKw0KKwlpZiAodmFsKQ0KKwkJbXQ3 OTE1X3JlZ2lzdGVyX2V4dF9waHkoZGV2KTsNCisJZWxzZQ0KKwkJbXQ3OTE1X3VucmVnaXN0ZXJf ZXh0X3BoeShkZXYpOw0KKw0KKwlyZXR1cm4gMDsNCit9DQorDQorc3RhdGljIGludA0KK210Nzkx NV9kYmRjX2dldCh2b2lkICpkYXRhLCB1NjQgKnZhbCkNCit7DQorCXN0cnVjdCBtdDc5MTVfZGV2 ICpkZXYgPSBkYXRhOw0KKw0KKwkqdmFsID0gISFtdDc5MTVfZXh0X3BoeShkZXYpOw0KKw0KKwly ZXR1cm4gMDsNCit9DQorDQorREVGSU5FX0RFQlVHRlNfQVRUUklCVVRFKGZvcHNfZGJkYywgbXQ3 OTE1X2RiZGNfZ2V0LA0KKwkJCSBtdDc5MTVfZGJkY19zZXQsICIlbGxkXG4iKTsNCisNCitzdGF0 aWMgdm9pZA0KK210NzkxNV9hbXBkdV9zdGF0X3JlYWRfcGh5KHN0cnVjdCBtdDc5MTVfcGh5ICpw aHksDQorCQkJICAgc3RydWN0IHNlcV9maWxlICpmaWxlKQ0KK3sNCisJc3RydWN0IG10NzkxNV9k ZXYgKmRldiA9IGZpbGUtPnByaXZhdGU7DQorCWJvb2wgZXh0X3BoeSA9IHBoeSAhPSAmZGV2LT5w aHk7DQorCWludCBib3VuZFsxNV0sIHJhbmdlWzRdLCBpLCBuOw0KKw0KKwlpZiAoIXBoeSkNCisJ CXJldHVybjsNCisNCisJLyogVHggYW1wZHUgc3RhdCAqLw0KKwlmb3IgKGkgPSAwOyBpIDwgQVJS QVlfU0laRShyYW5nZSk7IGkrKykNCisJCXJhbmdlW2ldID0gbXQ3Nl9ycihkZXYsIE1UX01JQl9B Uk5HKGV4dF9waHksIGkpKTsNCisNCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoYm91bmQp OyBpKyspDQorCQlib3VuZFtpXSA9IE1UX01JQl9BUk5DUl9SQU5HRShyYW5nZVtpIC8gNF0sIGkp ICsgMTsNCisNCisJc2VxX3ByaW50ZihmaWxlLCAiXG5QaHkgJWRcbiIsIGV4dF9waHkpOw0KKw0K KwlzZXFfcHJpbnRmKGZpbGUsICJMZW5ndGg6ICU4ZCB8ICIsIGJvdW5kWzBdKTsNCisJZm9yIChp ID0gMDsgaSA8IEFSUkFZX1NJWkUoYm91bmQpIC0gMTsgaSsrKQ0KKwkJc2VxX3ByaW50ZihmaWxl LCAiJTNkIC0lM2QgfCAiLA0KKwkJCSAgIGJvdW5kW2ldICsgMSwgYm91bmRbaSArIDFdKTsNCisN CisJc2VxX3B1dHMoZmlsZSwgIlxuQ291bnQ6ICAiKTsNCisJbiA9IGV4dF9waHkgPyBBUlJBWV9T SVpFKGRldi0+bXQ3Ni5hZ2dyX3N0YXRzKSAvIDIgOiAwOw0KKwlmb3IgKGkgPSAwOyBpIDwgQVJS QVlfU0laRShib3VuZCk7IGkrKykNCisJCXNlcV9wcmludGYoZmlsZSwgIiU4ZCB8ICIsIGRldi0+ bXQ3Ni5hZ2dyX3N0YXRzW2kgKyBuXSk7DQorCXNlcV9wdXRzKGZpbGUsICJcbiIpOw0KKw0KKwlz ZXFfcHJpbnRmKGZpbGUsICJCQSBtaXNzIGNvdW50OiAlZFxuIiwgcGh5LT5taWIuYmFfbWlzc19j bnQpOw0KK30NCisNCitzdGF0aWMgaW50DQorbXQ3OTE1X3R4X3N0YXRzX3JlYWQoc3RydWN0IHNl cV9maWxlICpmaWxlLCB2b2lkICpkYXRhKQ0KK3sNCisJc3RydWN0IG10NzkxNV9kZXYgKmRldiA9 IGZpbGUtPnByaXZhdGU7DQorCWludCBzdGF0WzhdLCBpLCBuOw0KKw0KKwltdDc5MTVfYW1wZHVf c3RhdF9yZWFkX3BoeSgmZGV2LT5waHksIGZpbGUpOw0KKwltdDc5MTVfYW1wZHVfc3RhdF9yZWFk X3BoeShtdDc5MTVfZXh0X3BoeShkZXYpLCBmaWxlKTsNCisNCisJLyogVHggYW1zZHUgaW5mbyAq Lw0KKwlzZXFfcHV0cyhmaWxlLCAiVHggTVNEVSBzdGF0OlxuIik7DQorCWZvciAoaSA9IDAsIG4g PSAwOyBpIDwgQVJSQVlfU0laRShzdGF0KTsgaSsrKSB7DQorCQlzdGF0W2ldID0gbXQ3Nl9ycihk ZXYsICBNVF9QTEVfQU1TRFVfUEFDS19NU0RVX0NOVChpKSk7DQorCQluICs9IHN0YXRbaV07DQor CX0NCisNCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoc3RhdCk7IGkrKykgew0KKwkJc2Vx X3ByaW50ZihmaWxlLCAiQU1TRFUgcGFjayBjb3VudCBvZiAlZCBNU0RVIGluIFRYRDogMHgleCAi LA0KKwkJCSAgIGkgKyAxLCBzdGF0W2ldKTsNCisJCWlmIChuICE9IDApDQorCQkJc2VxX3ByaW50 ZihmaWxlLCAiKCVkJSUpXG4iLCBzdGF0W2ldICogMTAwIC8gbik7DQorCQllbHNlDQorCQkJc2Vx X3B1dHMoZmlsZSwgIlxuIik7DQorCX0NCisNCisJcmV0dXJuIDA7DQorfQ0KKw0KK3N0YXRpYyBp bnQNCittdDc5MTVfdHhfc3RhdHNfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmls ZSAqZikNCit7DQorCXJldHVybiBzaW5nbGVfb3BlbihmLCBtdDc5MTVfdHhfc3RhdHNfcmVhZCwg aW5vZGUtPmlfcHJpdmF0ZSk7DQorfQ0KKw0KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVy YXRpb25zIGZvcHNfdHhfc3RhdHMgPSB7DQorCS5vcGVuID0gbXQ3OTE1X3R4X3N0YXRzX29wZW4s DQorCS5yZWFkID0gc2VxX3JlYWQsDQorCS5sbHNlZWsgPSBzZXFfbHNlZWssDQorCS5yZWxlYXNl ID0gc2luZ2xlX3JlbGVhc2UsDQorfTsNCisNCitzdGF0aWMgaW50IG10NzkxNV9yZWFkX3RlbXBl cmF0dXJlKHN0cnVjdCBzZXFfZmlsZSAqcywgdm9pZCAqZGF0YSkNCit7DQorCXN0cnVjdCBtdDc5 MTVfZGV2ICpkZXYgPSBkZXZfZ2V0X2RydmRhdGEocy0+cHJpdmF0ZSk7DQorCWludCB0ZW1wOw0K Kw0KKwkvKiBjcHUgKi8NCisJdGVtcCA9IG10NzkxNV9tY3VfZ2V0X3RlbXBlcmF0dXJlKGRldiwg MCk7DQorCXNlcV9wcmludGYocywgIlRlbXBlcmF0dXJlOiAlZFxuIiwgdGVtcCk7DQorDQorCXJl dHVybiAwOw0KK30NCisNCitzdGF0aWMgaW50DQorbXQ3OTE1X3F1ZXVlc19hY3Eoc3RydWN0IHNl cV9maWxlICpzLCB2b2lkICpkYXRhKQ0KK3sNCisJc3RydWN0IG10NzkxNV9kZXYgKmRldiA9IGRl dl9nZXRfZHJ2ZGF0YShzLT5wcml2YXRlKTsNCisJaW50IGk7DQorDQorCWZvciAoaSA9IDA7IGkg PCAxNjsgaSsrKSB7DQorCQlpbnQgaiwgYWNzID0gaSAvIDQsIGluZGV4ID0gaSAlIDQ7DQorCQl1 MzIgY3RybCwgdmFsLCBxbGVuID0gMDsNCisNCisJCXZhbCA9IG10NzZfcnIoZGV2LCBNVF9QTEVf QUNfUUVNUFRZKGFjcywgaW5kZXgpKTsNCisJCWN0cmwgPSBCSVQoMzEpIHwgQklUKDE1KSB8IChh Y3MgPDwgOCk7DQorDQorCQlmb3IgKGogPSAwOyBqIDwgMzI7IGorKykgew0KKwkJCWlmICh2YWwg JiBCSVQoaikpDQorCQkJCWNvbnRpbnVlOw0KKw0KKwkJCW10NzZfd3IoZGV2LCBNVF9QTEVfRkxf UTBfQ1RSTCwNCisJCQkJY3RybCB8IChqICsgKGluZGV4IDw8IDUpKSk7DQorCQkJcWxlbiArPSBt dDc2X2dldF9maWVsZChkZXYsIE1UX1BMRV9GTF9RM19DVFJMLA0KKwkJCQkJICAgICAgIEdFTk1B U0soMTEsIDApKTsNCisJCX0NCisJCXNlcV9wcmludGYocywgIkFDJWQlZDogcXVldWVkPSVkXG4i LCBhY3MsIGluZGV4LCBxbGVuKTsNCisJfQ0KKw0KKwlyZXR1cm4gMDsNCit9DQorDQorc3RhdGlj IGludA0KK210NzkxNV9xdWV1ZXNfcmVhZChzdHJ1Y3Qgc2VxX2ZpbGUgKnMsIHZvaWQgKmRhdGEp DQorew0KKwlzdHJ1Y3QgbXQ3OTE1X2RldiAqZGV2ID0gZGV2X2dldF9kcnZkYXRhKHMtPnByaXZh dGUpOw0KKwlzdGF0aWMgY29uc3Qgc3RydWN0IHsNCisJCWNoYXIgKnF1ZXVlOw0KKwkJaW50IGlk Ow0KKwl9IHF1ZXVlX21hcFtdID0gew0KKwkJeyAiV0ZETUEwIiwgTVRfVFhRX0JFIH0sDQorCQl7 ICJNQ1VXTSIsIE1UX1RYUV9NQ1UgfSwNCisJCXsgIk1DVVdBIiwgTVRfVFhRX01DVV9XQSB9LA0K KwkJeyAiTUNVRldRIiwgTVRfVFhRX0ZXREwgfSwNCisJfTsNCisJaW50IGk7DQorDQorCWZvciAo aSA9IDA7IGkgPCBBUlJBWV9TSVpFKHF1ZXVlX21hcCk7IGkrKykgew0KKwkJc3RydWN0IG10NzZf c3dfcXVldWUgKnEgPSAmZGV2LT5tdDc2LnFfdHhbcXVldWVfbWFwW2ldLmlkXTsNCisNCisJCWlm ICghcS0+cSkNCisJCQljb250aW51ZTsNCisNCisJCXNlcV9wcmludGYocywNCisJCQkgICAiJXM6 CXF1ZXVlZD0lZCBoZWFkPSVkIHRhaWw9JWRcbiIsDQorCQkJICAgcXVldWVfbWFwW2ldLnF1ZXVl LCBxLT5xLT5xdWV1ZWQsIHEtPnEtPmhlYWQsDQorCQkJICAgcS0+cS0+dGFpbCk7DQorCX0NCisN CisJcmV0dXJuIDA7DQorfQ0KKw0KK2ludCBtdDc5MTVfaW5pdF9kZWJ1Z2ZzKHN0cnVjdCBtdDc5 MTVfZGV2ICpkZXYpDQorew0KKwlzdHJ1Y3QgZGVudHJ5ICpkaXI7DQorDQorCWRpciA9IG10NzZf cmVnaXN0ZXJfZGVidWdmcygmZGV2LT5tdDc2KTsNCisJaWYgKCFkaXIpDQorCQlyZXR1cm4gLUVO T01FTTsNCisNCisJZGVidWdmc19jcmVhdGVfZGV2bV9zZXFmaWxlKGRldi0+bXQ3Ni5kZXYsICJx dWV1ZXMiLCBkaXIsDQorCQkJCSAgICBtdDc5MTVfcXVldWVzX3JlYWQpOw0KKwlkZWJ1Z2ZzX2Ny ZWF0ZV9kZXZtX3NlcWZpbGUoZGV2LT5tdDc2LmRldiwgImFjcSIsIGRpciwNCisJCQkJICAgIG10 NzkxNV9xdWV1ZXNfYWNxKTsNCisJZGVidWdmc19jcmVhdGVfZmlsZSgidHhfc3RhdHMiLCAwNDAw LCBkaXIsIGRldiwgJmZvcHNfdHhfc3RhdHMpOw0KKwlkZWJ1Z2ZzX2NyZWF0ZV9maWxlKCJkYmRj IiwgMDYwMCwgZGlyLCBkZXYsICZmb3BzX2RiZGMpOw0KKwlkZWJ1Z2ZzX2NyZWF0ZV91MzIoImRm c19od19wYXR0ZXJuIiwgMDQwMCwgZGlyLCAmZGV2LT5od19wYXR0ZXJuKTsNCisJLyogdGVzdCBr bm9icyAqLw0KKwlkZWJ1Z2ZzX2NyZWF0ZV9maWxlKCJyYWRhcl90cmlnZ2VyIiwgMDIwMCwgZGly LCBkZXYsDQorCQkJICAgICZmb3BzX3JhZGFyX3RyaWdnZXIpOw0KKwlkZWJ1Z2ZzX2NyZWF0ZV9m aWxlKCJzZXJfdHJpZ2dlciIsIDAyMDAsIGRpciwgZGV2LCAmZm9wc19zZXJfdHJpZ2dlcik7DQor CWRlYnVnZnNfY3JlYXRlX2Rldm1fc2VxZmlsZShkZXYtPm10NzYuZGV2LCAidGVtcGVyYXR1cmUi LCBkaXIsDQorCQkJCSAgICBtdDc5MTVfcmVhZF90ZW1wZXJhdHVyZSk7DQorDQorCXJldHVybiAw Ow0KK30NCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210 NzkxNS9kbWEuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTE1L2Rt YS5jDQpuZXcgZmlsZSBtb2RlIDEwMDY0NA0KaW5kZXggMDAwMDAwMDAwMDAwLi43NjYxODVkMWFh MjENCi0tLSAvZGV2L251bGwNCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210 NzYvbXQ3OTE1L2RtYS5jDQpAQCAtMCwwICsxLDI4NSBAQA0KKy8vIFNQRFgtTGljZW5zZS1JZGVu dGlmaWVyOiBJU0MNCisvKiBDb3B5cmlnaHQgKEMpIDIwMjAgTWVkaWFUZWsgSW5jLiAqLw0KKw0K KyNpbmNsdWRlICJtdDc5MTUuaCINCisjaW5jbHVkZSAiLi4vZG1hLmgiDQorI2luY2x1ZGUgIm1h Yy5oIg0KKw0KK3N0YXRpYyBpbnQNCittdDc5MTVfaW5pdF90eF9xdWV1ZXMoc3RydWN0IG10Nzkx NV9kZXYgKmRldiwgaW50IG5fZGVzYykNCit7DQorCXN0cnVjdCBtdDc2X3N3X3F1ZXVlICpxOw0K KwlzdHJ1Y3QgbXQ3Nl9xdWV1ZSAqaHdxOw0KKwlpbnQgZXJyLCBpOw0KKw0KKwlod3EgPSBkZXZt X2t6YWxsb2MoZGV2LT5tdDc2LmRldiwgc2l6ZW9mKCpod3EpLCBHRlBfS0VSTkVMKTsNCisJaWYg KCFod3EpDQorCQlyZXR1cm4gLUVOT01FTTsNCisNCisJZXJyID0gbXQ3Nl9xdWV1ZV9hbGxvYyhk ZXYsIGh3cSwgTVQ3OTE1X1RYUV9CQU5EMCwgbl9kZXNjLCAwLA0KKwkJCSAgICAgICBNVF9UWF9S SU5HX0JBU0UpOw0KKwlpZiAoZXJyIDwgMCkNCisJCXJldHVybiBlcnI7DQorDQorCWZvciAoaSA9 IDA7IGkgPCBNVF9UWFFfTUNVOyBpKyspIHsNCisJCXEgPSAmZGV2LT5tdDc2LnFfdHhbaV07DQor CQlJTklUX0xJU1RfSEVBRCgmcS0+c3dxKTsNCisJCXEtPnEgPSBod3E7DQorCX0NCisNCisJcmV0 dXJuIDA7DQorfQ0KKw0KK3N0YXRpYyBpbnQNCittdDc5MTVfaW5pdF9tY3VfcXVldWUoc3RydWN0 IG10NzkxNV9kZXYgKmRldiwgc3RydWN0IG10NzZfc3dfcXVldWUgKnEsDQorCQkgICAgICBpbnQg aWR4LCBpbnQgbl9kZXNjKQ0KK3sNCisJc3RydWN0IG10NzZfcXVldWUgKmh3cTsNCisJaW50IGVy cjsNCisNCisJaHdxID0gZGV2bV9remFsbG9jKGRldi0+bXQ3Ni5kZXYsIHNpemVvZigqaHdxKSwg R0ZQX0tFUk5FTCk7DQorCWlmICghaHdxKQ0KKwkJcmV0dXJuIC1FTk9NRU07DQorDQorCWVyciA9 IG10NzZfcXVldWVfYWxsb2MoZGV2LCBod3EsIGlkeCwgbl9kZXNjLCAwLCBNVF9UWF9SSU5HX0JB U0UpOw0KKwlpZiAoZXJyIDwgMCkNCisJCXJldHVybiBlcnI7DQorDQorCUlOSVRfTElTVF9IRUFE KCZxLT5zd3EpOw0KKwlxLT5xID0gaHdxOw0KKw0KKwlyZXR1cm4gMDsNCit9DQorDQordm9pZCBt dDc5MTVfcXVldWVfcnhfc2tiKHN0cnVjdCBtdDc2X2RldiAqbWRldiwgZW51bSBtdDc2X3J4cV9p ZCBxLA0KKwkJCSBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQ0KK3sNCisJc3RydWN0IG10NzkxNV9kZXYg KmRldiA9IGNvbnRhaW5lcl9vZihtZGV2LCBzdHJ1Y3QgbXQ3OTE1X2RldiwgbXQ3Nik7DQorCV9f bGUzMiAqcnhkID0gKF9fbGUzMiAqKXNrYi0+ZGF0YTsNCisJZW51bSByeF9wa3RfdHlwZSB0eXBl Ow0KKw0KKwl0eXBlID0gRklFTERfR0VUKE1UX1JYRDBfUEtUX1RZUEUsIGxlMzJfdG9fY3B1KHJ4 ZFswXSkpOw0KKw0KKwlzd2l0Y2ggKHR5cGUpIHsNCisJY2FzZSBQS1RfVFlQRV9UWFJYX05PVElG WToNCisJCW10NzkxNV9tYWNfdHhfZnJlZShkZXYsIHNrYik7DQorCQlicmVhazsNCisJY2FzZSBQ S1RfVFlQRV9SWF9FVkVOVDoNCisJCW10NzkxNV9tY3VfcnhfZXZlbnQoZGV2LCBza2IpOw0KKwkJ YnJlYWs7DQorCWNhc2UgUEtUX1RZUEVfTk9STUFMOg0KKwkJaWYgKCFtdDc5MTVfbWFjX2ZpbGxf cngoZGV2LCBza2IpKSB7DQorCQkJbXQ3Nl9yeCgmZGV2LT5tdDc2LCBxLCBza2IpOw0KKwkJCXJl dHVybjsNCisJCX0NCisJCS8qIGZhbGwgdGhyb3VnaCAqLw0KKwlkZWZhdWx0Og0KKwkJZGV2X2tm cmVlX3NrYihza2IpOw0KKwkJYnJlYWs7DQorCX0NCit9DQorDQorc3RhdGljIGludCBtdDc5MTVf cG9sbF90eChzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGksIGludCBidWRnZXQpDQorew0KKwlzdGF0 aWMgY29uc3QgdTggcXVldWVfbWFwW10gPSB7DQorCQlNVF9UWFFfTUNVLA0KKwkJTVRfVFhRX01D VV9XQSwNCisJCU1UX1RYUV9CRQ0KKwl9Ow0KKwlzdHJ1Y3QgbXQ3OTE1X2RldiAqZGV2Ow0KKwlp bnQgaTsNCisNCisJZGV2ID0gY29udGFpbmVyX29mKG5hcGksIHN0cnVjdCBtdDc5MTVfZGV2LCBt dDc2LnR4X25hcGkpOw0KKw0KKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShxdWV1ZV9tYXAp OyBpKyspDQorCQltdDc2X3F1ZXVlX3R4X2NsZWFudXAoZGV2LCBxdWV1ZV9tYXBbaV0sIGZhbHNl KTsNCisNCisJaWYgKG5hcGlfY29tcGxldGVfZG9uZShuYXBpLCAwKSkNCisJCW10NzkxNV9pcnFf ZW5hYmxlKGRldiwgTVRfSU5UX1RYX0RPTkVfQUxMKTsNCisNCisJZm9yIChpID0gMDsgaSA8IEFS UkFZX1NJWkUocXVldWVfbWFwKTsgaSsrKQ0KKwkJbXQ3Nl9xdWV1ZV90eF9jbGVhbnVwKGRldiwg cXVldWVfbWFwW2ldLCBmYWxzZSk7DQorDQorCW10NzkxNV9tYWNfc3RhX3BvbGwoZGV2KTsNCisN CisJdGFza2xldF9zY2hlZHVsZSgmZGV2LT5tdDc2LnR4X3Rhc2tsZXQpOw0KKw0KKwlyZXR1cm4g MDsNCit9DQorDQordm9pZCBtdDc5MTVfZG1hX3ByZWZldGNoKHN0cnVjdCBtdDc5MTVfZGV2ICpk ZXYpDQorew0KKyNkZWZpbmUgUFJFRkVUQ0goYmFzZSwgZGVwdGgpCSgoYmFzZSkgPDwgMTYgfCAo ZGVwdGgpKQ0KKw0KKwltdDc2X3dyKGRldiwgTVRfV0ZETUEwX1JYX1JJTkcwX0VYVF9DVFJMLCBQ UkVGRVRDSCgweDAsIDB4NCkpOw0KKwltdDc2X3dyKGRldiwgTVRfV0ZETUEwX1JYX1JJTkcxX0VY VF9DVFJMLCBQUkVGRVRDSCgweDQwLCAweDQpKTsNCisJbXQ3Nl93cihkZXYsIE1UX1dGRE1BMF9S WF9SSU5HMl9FWFRfQ1RSTCwgUFJFRkVUQ0goMHg4MCwgMHgwKSk7DQorDQorCW10NzZfd3IoZGV2 LCBNVF9XRkRNQTFfVFhfUklORzBfRVhUX0NUUkwsIFBSRUZFVENIKDB4ODAsIDB4NCkpOw0KKwlt dDc2X3dyKGRldiwgTVRfV0ZETUExX1RYX1JJTkcxX0VYVF9DVFJMLCBQUkVGRVRDSCgweGMwLCAw eDQpKTsNCisJbXQ3Nl93cihkZXYsIE1UX1dGRE1BMV9UWF9SSU5HMl9FWFRfQ1RSTCwgUFJFRkVU Q0goMHgxMDAsIDB4NCkpOw0KKwltdDc2X3dyKGRldiwgTVRfV0ZETUExX1RYX1JJTkczX0VYVF9D VFJMLCBQUkVGRVRDSCgweDE0MCwgMHg0KSk7DQorCW10NzZfd3IoZGV2LCBNVF9XRkRNQTFfVFhf UklORzRfRVhUX0NUUkwsIFBSRUZFVENIKDB4MTgwLCAweDQpKTsNCisJbXQ3Nl93cihkZXYsIE1U X1dGRE1BMV9UWF9SSU5HNV9FWFRfQ1RSTCwgUFJFRkVUQ0goMHgxYzAsIDB4NCkpOw0KKwltdDc2 X3dyKGRldiwgTVRfV0ZETUExX1RYX1JJTkc2X0VYVF9DVFJMLCBQUkVGRVRDSCgweDIwMCwgMHg0 KSk7DQorCW10NzZfd3IoZGV2LCBNVF9XRkRNQTFfVFhfUklORzdfRVhUX0NUUkwsIFBSRUZFVENI KDB4MjQwLCAweDQpKTsNCisNCisJbXQ3Nl93cihkZXYsIE1UX1dGRE1BMV9UWF9SSU5HMTZfRVhU X0NUUkwsIFBSRUZFVENIKDB4MjgwLCAweDQpKTsNCisJbXQ3Nl93cihkZXYsIE1UX1dGRE1BMV9U WF9SSU5HMTdfRVhUX0NUUkwsIFBSRUZFVENIKDB4MmMwLCAweDQpKTsNCisJbXQ3Nl93cihkZXYs IE1UX1dGRE1BMV9UWF9SSU5HMThfRVhUX0NUUkwsIFBSRUZFVENIKDB4MzAwLCAweDQpKTsNCisJ bXQ3Nl93cihkZXYsIE1UX1dGRE1BMV9UWF9SSU5HMTlfRVhUX0NUUkwsIFBSRUZFVENIKDB4MzQw LCAweDQpKTsNCisJbXQ3Nl93cihkZXYsIE1UX1dGRE1BMV9UWF9SSU5HMjBfRVhUX0NUUkwsIFBS RUZFVENIKDB4MzgwLCAweDQpKTsNCisJbXQ3Nl93cihkZXYsIE1UX1dGRE1BMV9UWF9SSU5HMjFf RVhUX0NUUkwsIFBSRUZFVENIKDB4M2MwLCAweDApKTsNCisNCisJbXQ3Nl93cihkZXYsIE1UX1dG RE1BMV9SWF9SSU5HMF9FWFRfQ1RSTCwgUFJFRkVUQ0goMHgzYzAsIDB4NCkpOw0KKwltdDc2X3dy KGRldiwgTVRfV0ZETUExX1JYX1JJTkcxX0VYVF9DVFJMLCBQUkVGRVRDSCgweDQwMCwgMHg0KSk7 DQorCW10NzZfd3IoZGV2LCBNVF9XRkRNQTFfUlhfUklORzJfRVhUX0NUUkwsIFBSRUZFVENIKDB4 NDQwLCAweDQpKTsNCisJbXQ3Nl93cihkZXYsIE1UX1dGRE1BMV9SWF9SSU5HM19FWFRfQ1RSTCwg UFJFRkVUQ0goMHg0ODAsIDB4MCkpOw0KK30NCisNCitpbnQgbXQ3OTE1X2RtYV9pbml0KHN0cnVj dCBtdDc5MTVfZGV2ICpkZXYpDQorew0KKwkvKiBJbmNyZWFzZSBidWZmZXIgc2l6ZSB0byByZWNl aXZlIGxhcmdlIFZIVC9IRSBNUERVcyAqLw0KKwlpbnQgcnhfYnVmX3NpemUgPSBNVF9SWF9CVUZf U0laRSAqIDI7DQorCWludCByZXQ7DQorDQorCW10NzZfZG1hX2F0dGFjaCgmZGV2LT5tdDc2KTsN CisNCisJLyogY29uZmlndXJlIGdsb2JhbCBzZXR0aW5nICovDQorCW10NzZfc2V0KGRldiwgTVRf V0ZETUExX0dMT19DRkcsDQorCQkgTVRfV0ZETUExX0dMT19DRkdfT01JVF9UWF9JTkZPIHwNCisJ CSBNVF9XRkRNQTFfR0xPX0NGR19PTUlUX1JYX0lORk8pOw0KKw0KKwkvKiBjb25maWd1cmUgcGVy ZmV0Y2ggc2V0dGluZ3MgKi8NCisJbXQ3OTE1X2RtYV9wcmVmZXRjaChkZXYpOw0KKw0KKwkvKiBy ZXNldCBkbWEgaWR4ICovDQorCW10NzZfd3IoZGV2LCBNVF9XRkRNQTBfUlNUX0RUWF9QVFIsIH4w KTsNCisJbXQ3Nl93cihkZXYsIE1UX1dGRE1BMV9SU1RfRFRYX1BUUiwgfjApOw0KKw0KKwkvKiBj b25maWd1cmUgZGVsYXkgaW50ZXJydXB0ICovDQorCW10NzZfd3IoZGV2LCBNVF9XRkRNQTBfUFJJ X0RMWV9JTlRfQ0ZHMCwgMCk7DQorCW10NzZfd3IoZGV2LCBNVF9XRkRNQTFfUFJJX0RMWV9JTlRf Q0ZHMCwgMCk7DQorDQorCS8qIGluaXQgdHggcXVldWUgKi8NCisJcmV0ID0gbXQ3OTE1X2luaXRf dHhfcXVldWVzKGRldiwgTVQ3OTE1X1RYX1JJTkdfU0laRSk7DQorCWlmIChyZXQpDQorCQlyZXR1 cm4gcmV0Ow0KKw0KKwkvKiBjb21tYW5kIHRvIFdNICovDQorCXJldCA9IG10NzkxNV9pbml0X21j dV9xdWV1ZShkZXYsICZkZXYtPm10NzYucV90eFtNVF9UWFFfTUNVXSwNCisJCQkJICAgIE1UNzkx NV9UWFFfTUNVX1dNLA0KKwkJCQkgICAgTVQ3OTE1X1RYX01DVV9SSU5HX1NJWkUpOw0KKwlpZiAo cmV0KQ0KKwkJcmV0dXJuIHJldDsNCisNCisJLyogY29tbWFuZCB0byBXQSAqLw0KKwlyZXQgPSBt dDc5MTVfaW5pdF9tY3VfcXVldWUoZGV2LCAmZGV2LT5tdDc2LnFfdHhbTVRfVFhRX01DVV9XQV0s DQorCQkJCSAgICBNVDc5MTVfVFhRX01DVV9XQSwNCisJCQkJICAgIE1UNzkxNV9UWF9NQ1VfUklO R19TSVpFKTsNCisJaWYgKHJldCkNCisJCXJldHVybiByZXQ7DQorDQorCS8qIGZpcm13YXJlIGRv d25sb2FkICovDQorCXJldCA9IG10NzkxNV9pbml0X21jdV9xdWV1ZShkZXYsICZkZXYtPm10NzYu cV90eFtNVF9UWFFfRldETF0sDQorCQkJCSAgICBNVDc5MTVfVFhRX0ZXREwsDQorCQkJCSAgICBN VDc5MTVfVFhfRldETF9SSU5HX1NJWkUpOw0KKwlpZiAocmV0KQ0KKwkJcmV0dXJuIHJldDsNCisN CisJLyogZXZlbnQgZnJvbSBXTSAqLw0KKwlyZXQgPSBtdDc2X3F1ZXVlX2FsbG9jKGRldiwgJmRl di0+bXQ3Ni5xX3J4W01UX1JYUV9NQ1VdLA0KKwkJCSAgICAgICBNVDc5MTVfUlhRX01DVV9XTSwg TVQ3OTE1X1JYX01DVV9SSU5HX1NJWkUsDQorCQkJICAgICAgIHJ4X2J1Zl9zaXplLCBNVF9SWF9F VkVOVF9SSU5HX0JBU0UpOw0KKwlpZiAocmV0KQ0KKwkJcmV0dXJuIHJldDsNCisNCisJLyogZXZl bnQgZnJvbSBXQSAqLw0KKwlyZXQgPSBtdDc2X3F1ZXVlX2FsbG9jKGRldiwgJmRldi0+bXQ3Ni5x X3J4W01UX1JYUV9NQ1VfV0FdLA0KKwkJCSAgICAgICBNVDc5MTVfUlhRX01DVV9XQSwgTVQ3OTE1 X1JYX01DVV9SSU5HX1NJWkUsDQorCQkJICAgICAgIHJ4X2J1Zl9zaXplLCBNVF9SWF9FVkVOVF9S SU5HX0JBU0UpOw0KKwlpZiAocmV0KQ0KKwkJcmV0dXJuIHJldDsNCisNCisJLyogcnggZGF0YSAq Lw0KKwlyZXQgPSBtdDc2X3F1ZXVlX2FsbG9jKGRldiwgJmRldi0+bXQ3Ni5xX3J4W01UX1JYUV9N QUlOXSwgMCwNCisJCQkgICAgICAgTVQ3OTE1X1JYX1JJTkdfU0laRSwgcnhfYnVmX3NpemUsDQor CQkJICAgICAgIE1UX1JYX0RBVEFfUklOR19CQVNFKTsNCisJaWYgKHJldCkNCisJCXJldHVybiBy ZXQ7DQorDQorCXJldCA9IG10NzZfaW5pdF9xdWV1ZXMoZGV2KTsNCisJaWYgKHJldCA8IDApDQor CQlyZXR1cm4gcmV0Ow0KKw0KKwluZXRpZl90eF9uYXBpX2FkZCgmZGV2LT5tdDc2Lm5hcGlfZGV2 LCAmZGV2LT5tdDc2LnR4X25hcGksDQorCQkJICBtdDc5MTVfcG9sbF90eCwgTkFQSV9QT0xMX1dF SUdIVCk7DQorCW5hcGlfZW5hYmxlKCZkZXYtPm10NzYudHhfbmFwaSk7DQorDQorCS8qIGhpZiB3 YWl0IFdGRE1BIGlkbGUgKi8NCisJbXQ3Nl9zZXQoZGV2LCBNVF9XRkRNQTBfQlVTWV9FTkEsDQor CQkgTVRfV0ZETUEwX0JVU1lfRU5BX1RYX0ZJRk8wIHwNCisJCSBNVF9XRkRNQTBfQlVTWV9FTkFf VFhfRklGTzEgfA0KKwkJIE1UX1dGRE1BMF9CVVNZX0VOQV9SWF9GSUZPKTsNCisNCisJbXQ3Nl9z ZXQoZGV2LCBNVF9XRkRNQTFfQlVTWV9FTkEsDQorCQkgTVRfV0ZETUExX0JVU1lfRU5BX1RYX0ZJ Rk8wIHwNCisJCSBNVF9XRkRNQTFfQlVTWV9FTkFfVFhfRklGTzEgfA0KKwkJIE1UX1dGRE1BMV9C VVNZX0VOQV9SWF9GSUZPKTsNCisNCisJbXQ3Nl9zZXQoZGV2LCBNVF9XRkRNQTBfUENJRTFfQlVT WV9FTkEsDQorCQkgTVRfV0ZETUEwX1BDSUUxX0JVU1lfRU5BX1RYX0ZJRk8wIHwNCisJCSBNVF9X RkRNQTBfUENJRTFfQlVTWV9FTkFfVFhfRklGTzEgfA0KKwkJIE1UX1dGRE1BMF9QQ0lFMV9CVVNZ X0VOQV9SWF9GSUZPKTsNCisNCisJbXQ3Nl9zZXQoZGV2LCBNVF9XRkRNQTFfUENJRTFfQlVTWV9F TkEsDQorCQkgTVRfV0ZETUExX1BDSUUxX0JVU1lfRU5BX1RYX0ZJRk8wIHwNCisJCSBNVF9XRkRN QTFfUENJRTFfQlVTWV9FTkFfVFhfRklGTzEgfA0KKwkJIE1UX1dGRE1BMV9QQ0lFMV9CVVNZX0VO QV9SWF9GSUZPKTsNCisNCisJbXQ3Nl9wb2xsKGRldiwgTVRfV0ZETUFfRVhUX0NTUl9ISUZfTUlT QywNCisJCSAgTVRfV0ZETUFfRVhUX0NTUl9ISUZfTUlTQ19CVVNZLCAwLCAxMDAwKTsNCisNCisJ Lyogc2V0IFdGRE1BIFR4L1J4ICovDQorCW10NzZfc2V0KGRldiwgTVRfV0ZETUEwX0dMT19DRkcs DQorCQkgTVRfV0ZETUEwX0dMT19DRkdfVFhfRE1BX0VOIHwgTVRfV0ZETUEwX0dMT19DRkdfUlhf RE1BX0VOKTsNCisJbXQ3Nl9zZXQoZGV2LCBNVF9XRkRNQTFfR0xPX0NGRywNCisJCSBNVF9XRkRN QTFfR0xPX0NGR19UWF9ETUFfRU4gfCBNVF9XRkRNQTFfR0xPX0NGR19SWF9ETUFfRU4pOw0KKw0K KwkvKiBlbmFibGUgaW50ZXJydXB0cyBmb3IgVFgvUlggcmluZ3MgKi8NCisJbXQ3OTE1X2lycV9l bmFibGUoZGV2LCBNVF9JTlRfUlhfRE9ORV9BTEwgfCBNVF9JTlRfVFhfRE9ORV9BTEwgfA0KKwkJ CSAgTVRfSU5UX01DVV9DTUQpOw0KKw0KKwlyZXR1cm4gMDsNCit9DQorDQordm9pZCBtdDc5MTVf ZG1hX2NsZWFudXAoc3RydWN0IG10NzkxNV9kZXYgKmRldikNCit7DQorCS8qIGRpc2FibGUgKi8N CisJbXQ3Nl9jbGVhcihkZXYsIE1UX1dGRE1BMF9HTE9fQ0ZHLA0KKwkJICAgTVRfV0ZETUEwX0dM T19DRkdfVFhfRE1BX0VOIHwNCisJCSAgIE1UX1dGRE1BMF9HTE9fQ0ZHX1JYX0RNQV9FTik7DQor CW10NzZfY2xlYXIoZGV2LCBNVF9XRkRNQTFfR0xPX0NGRywNCisJCSAgIE1UX1dGRE1BMV9HTE9f Q0ZHX1RYX0RNQV9FTiB8DQorCQkgICBNVF9XRkRNQTFfR0xPX0NGR19SWF9ETUFfRU4pOw0KKw0K KwkvKiByZXNldCAqLw0KKwltdDc2X2NsZWFyKGRldiwgTVRfV0ZETUExX1JTVCwNCisJCSAgIE1U X1dGRE1BMV9SU1RfRE1BU0hETF9BTExfUlNUIHwNCisJCSAgIE1UX1dGRE1BMV9SU1RfTE9HSUNf UlNUKTsNCisNCisJbXQ3Nl9zZXQoZGV2LCBNVF9XRkRNQTFfUlNULA0KKwkJIE1UX1dGRE1BMV9S U1RfRE1BU0hETF9BTExfUlNUIHwNCisJCSBNVF9XRkRNQTFfUlNUX0xPR0lDX1JTVCk7DQorDQor CW10NzZfY2xlYXIoZGV2LCBNVF9XRkRNQTBfUlNULA0KKwkJICAgTVRfV0ZETUEwX1JTVF9ETUFT SERMX0FMTF9SU1QgfA0KKwkJICAgTVRfV0ZETUEwX1JTVF9MT0dJQ19SU1QpOw0KKw0KKwltdDc2 X3NldChkZXYsIE1UX1dGRE1BMF9SU1QsDQorCQkgTVRfV0ZETUEwX1JTVF9ETUFTSERMX0FMTF9S U1QgfA0KKwkJIE1UX1dGRE1BMF9SU1RfTE9HSUNfUlNUKTsNCisNCisJdGFza2xldF9raWxsKCZk ZXYtPm10NzYudHhfdGFza2xldCk7DQorCW10NzZfZG1hX2NsZWFudXAoJmRldi0+bXQ3Nik7DQor fQ0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTE1 L2VlcHJvbS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MTUvZWVw cm9tLmMNCm5ldyBmaWxlIG1vZGUgMTAwNjQ0DQppbmRleCAwMDAwMDAwMDAwMDAuLjIwOTlkZDQw NTMwZg0KLS0tIC9kZXYvbnVsbA0KKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsv bXQ3Ni9tdDc5MTUvZWVwcm9tLmMNCkBAIC0wLDAgKzEsMTI1IEBADQorLy8gU1BEWC1MaWNlbnNl LUlkZW50aWZpZXI6IElTQw0KKy8qIENvcHlyaWdodCAoQykgMjAyMCBNZWRpYVRlayBJbmMuICov DQorDQorI2luY2x1ZGUgIm10NzkxNS5oIg0KKyNpbmNsdWRlICJlZXByb20uaCINCisNCitzdGF0 aWMgaW5saW5lIGJvb2wgbXQ3OTE1X2VmdXNlX3ZhbGlkKHU4IHZhbCkNCit7DQorCXJldHVybiAh KHZhbCA9PSAweGZmKTsNCit9DQorDQordTMyIG10NzkxNV9lZXByb21fcmVhZChzdHJ1Y3QgbXQ3 OTE1X2RldiAqZGV2LCB1MzIgb2Zmc2V0KQ0KK3sNCisJdTggKmRhdGEgPSBkZXYtPm10NzYuZWVw cm9tLmRhdGE7DQorDQorCWlmICghbXQ3OTE1X2VmdXNlX3ZhbGlkKGRhdGFbb2Zmc2V0XSkpDQor CQltdDc5MTVfbWN1X2dldF9lZXByb20oZGV2LCBvZmZzZXQpOw0KKw0KKwlyZXR1cm4gZGF0YVtv ZmZzZXRdOw0KK30NCisNCitzdGF0aWMgaW50IG10NzkxNV9lZXByb21fbG9hZChzdHJ1Y3QgbXQ3 OTE1X2RldiAqZGV2KQ0KK3sNCisJaW50IHJldDsNCisNCisJcmV0ID0gbXQ3Nl9lZXByb21faW5p dCgmZGV2LT5tdDc2LCBNVDc5MTVfRUVQUk9NX1NJWkUpOw0KKwlpZiAocmV0IDwgMCkNCisJCXJl dHVybiByZXQ7DQorDQorCW1lbXNldChkZXYtPm10NzYuZWVwcm9tLmRhdGEsIC0xLCBNVDc5MTVf RUVQUk9NX1NJWkUpOw0KKw0KKwlyZXR1cm4gMDsNCit9DQorDQorc3RhdGljIGludCBtdDc5MTVf Y2hlY2tfZWVwcm9tKHN0cnVjdCBtdDc5MTVfZGV2ICpkZXYpDQorew0KKwl1MTYgdmFsOw0KKwl1 OCAqZWVwcm9tID0gZGV2LT5tdDc2LmVlcHJvbS5kYXRhOw0KKw0KKwltdDc5MTVfZWVwcm9tX3Jl YWQoZGV2LCAwKTsNCisJdmFsID0gZ2V0X3VuYWxpZ25lZF9sZTE2KGVlcHJvbSk7DQorDQorCXN3 aXRjaCAodmFsKSB7DQorCWNhc2UgMHg3OTE1Og0KKwkJcmV0dXJuIDA7DQorCWRlZmF1bHQ6DQor CQlyZXR1cm4gLUVJTlZBTDsNCisJfQ0KK30NCisNCitzdGF0aWMgdm9pZCBtdDc5MTVfZWVwcm9t X3BhcnNlX2h3X2NhcChzdHJ1Y3QgbXQ3OTE1X2RldiAqZGV2KQ0KK3sNCisJdTggKmVlcHJvbSA9 IGRldi0+bXQ3Ni5lZXByb20uZGF0YTsNCisJdTggdHhfbWFzaywgbWF4X25zcyA9IDQ7DQorCXUz MiB2YWwgPSBtdDc5MTVfZWVwcm9tX3JlYWQoZGV2LCBNVF9FRV9XSUZJX0NPTkYpOw0KKw0KKwl2 YWwgPSBGSUVMRF9HRVQoTVRfRUVfV0lGSV9DT05GX0JBTkRfU0VMLCB2YWwpOw0KKwlzd2l0Y2gg KHZhbCkgew0KKwljYXNlIE1UX0VFXzVHSFo6DQorCQlkZXYtPm10NzYuY2FwLmhhc181Z2h6ID0g dHJ1ZTsNCisJCWJyZWFrOw0KKwljYXNlIE1UX0VFXzJHSFo6DQorCQlkZXYtPm10NzYuY2FwLmhh c18yZ2h6ID0gdHJ1ZTsNCisJCWJyZWFrOw0KKwlkZWZhdWx0Og0KKwkJZGV2LT5tdDc2LmNhcC5o YXNfMmdoeiA9IHRydWU7DQorCQlkZXYtPm10NzYuY2FwLmhhc181Z2h6ID0gdHJ1ZTsNCisJCWJy ZWFrOw0KKwl9DQorDQorCS8qIHJlYWQgdHggbWFzayBmcm9tIGVlcHJvbSAqLw0KKwl0eF9tYXNr ID0gIEZJRUxEX0dFVChNVF9FRV9XSUZJX0NPTkZfVFhfTUFTSywNCisJCQkgICAgIGVlcHJvbVtN VF9FRV9XSUZJX0NPTkZdKTsNCisJaWYgKCF0eF9tYXNrIHx8IHR4X21hc2sgPiBtYXhfbnNzKQ0K KwkJdHhfbWFzayA9IG1heF9uc3M7DQorDQorCWRldi0+Y2hhaW5tYXNrID0gQklUKHR4X21hc2sp IC0gMTsNCisJZGV2LT5tcGh5LmFudGVubmFfbWFzayA9IGRldi0+Y2hhaW5tYXNrOw0KKwlkZXYt PnBoeS5jaGFpbm1hc2sgPSBkZXYtPmNoYWlubWFzazsNCit9DQorDQoraW50IG10NzkxNV9lZXBy b21faW5pdChzdHJ1Y3QgbXQ3OTE1X2RldiAqZGV2KQ0KK3sNCisJaW50IHJldDsNCisNCisJcmV0 ID0gbXQ3OTE1X2VlcHJvbV9sb2FkKGRldik7DQorCWlmIChyZXQgPCAwKQ0KKwkJcmV0dXJuIHJl dDsNCisNCisJcmV0ID0gbXQ3OTE1X2NoZWNrX2VlcHJvbShkZXYpOw0KKwlpZiAocmV0KQ0KKwkJ cmV0dXJuIHJldDsNCisNCisJbXQ3OTE1X2VlcHJvbV9wYXJzZV9od19jYXAoZGV2KTsNCisJbWVt Y3B5KGRldi0+bXQ3Ni5tYWNhZGRyLCBkZXYtPm10NzYuZWVwcm9tLmRhdGEgKyBNVF9FRV9NQUNf QUREUiwNCisJICAgICAgIEVUSF9BTEVOKTsNCisNCisJbXQ3Nl9lZXByb21fb3ZlcnJpZGUoJmRl di0+bXQ3Nik7DQorDQorCXJldHVybiAwOw0KK30NCisNCitpbnQgbXQ3OTE1X2VlcHJvbV9nZXRf dGFyZ2V0X3Bvd2VyKHN0cnVjdCBtdDc5MTVfZGV2ICpkZXYsDQorCQkJCSAgIHN0cnVjdCBpZWVl ODAyMTFfY2hhbm5lbCAqY2hhbiwNCisJCQkJICAgdTggY2hhaW5faWR4KQ0KK3sNCisJaW50IGlu ZGV4Ow0KKwlib29sIHRzc2lfb247DQorDQorCWlmIChjaGFpbl9pZHggPiAzKQ0KKwkJcmV0dXJu IC1FSU5WQUw7DQorDQorCXRzc2lfb24gPSBtdDc5MTVfdHNzaV9lbmFibGVkKGRldiwgY2hhbi0+ YmFuZCk7DQorDQorCWlmIChjaGFuLT5iYW5kID09IE5MODAyMTFfQkFORF8yR0haKSB7DQorCQlp bmRleCA9IE1UX0VFX1RYMF9QT1dFUl8yRyArIGNoYWluX2lkeCAqIDMgKyAhdHNzaV9vbjsNCisJ fSBlbHNlIHsNCisJCWludCBncm91cCA9IHRzc2lfb24gPw0KKwkJCSAgICBtdDc5MTVfZ2V0X2No YW5uZWxfZ3JvdXAoY2hhbi0+aHdfdmFsdWUpIDogODsNCisNCisJCWluZGV4ID0gTVRfRUVfVFgw X1BPV0VSXzVHICsgY2hhaW5faWR4ICogMTIgKyBncm91cDsNCisJfQ0KKw0KKwlyZXR1cm4gbXQ3 OTE1X2VlcHJvbV9yZWFkKGRldiwgaW5kZXgpOw0KK30NCmRpZmYgLS1naXQgYS9kcml2ZXJzL25l dC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkxNS9lZXByb20uaCBiL2RyaXZlcnMvbmV0L3dp cmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTE1L2VlcHJvbS5oDQpuZXcgZmlsZSBtb2RlIDEwMDY0 NA0KaW5kZXggMDAwMDAwMDAwMDAwLi4zMGZjNjA3ZTQ2NmQNCi0tLSAvZGV2L251bGwNCisrKyBi L2RyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTE1L2VlcHJvbS5oDQpAQCAt MCwwICsxLDc4IEBADQorLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IElTQyAqLw0KKy8qIENv cHlyaWdodCAoQykgMjAyMCBNZWRpYVRlayBJbmMuICovDQorDQorI2lmbmRlZiBfX01UNzkxNV9F RVBST01fSA0KKyNkZWZpbmUgX19NVDc5MTVfRUVQUk9NX0gNCisNCisjaW5jbHVkZSAibXQ3OTE1 LmgiDQorDQorc3RydWN0IGNhbF9kYXRhIHsNCisJdTggY291bnQ7DQorCXUxNiBvZmZzZXRbNjBd Ow0KK307DQorDQorZW51bSBtdDc5MTVfZWVwcm9tX2ZpZWxkIHsNCisJTVRfRUVfQ0hJUF9JRCA9 CQkweDAwMCwNCisJTVRfRUVfVkVSU0lPTiA9CQkweDAwMiwNCisJTVRfRUVfTUFDX0FERFIgPQkw eDAwNCwNCisJTVRfRUVfRERJRV9GVF9WRVJTSU9OID0JMHgwNTAsDQorCU1UX0VFX1dJRklfQ09O RiA9CTB4MTkwLA0KKwlNVF9FRV9UWDBfUE9XRVJfMkcgPQkweDJmYywNCisJTVRfRUVfVFgwX1BP V0VSXzVHID0JMHgzNGIsDQorCU1UX0VFX0FESUVfRlRfVkVSU0lPTiA9CTB4OWEwLA0KKw0KKwlf X01UX0VFX01BWCA9CQkweGUwMA0KK307DQorDQorI2RlZmluZSBNVF9FRV9XSUZJX0NPTkZfVFhf TUFTSwkJCUdFTk1BU0soMiwgMCkNCisjZGVmaW5lIE1UX0VFX1dJRklfQ09ORl9CQU5EX1NFTAkJ R0VOTUFTSyg3LCA2KQ0KKyNkZWZpbmUgTVRfRUVfV0lGSV9DT05GX1RTU0kwXzJHCQlCSVQoMCkN CisjZGVmaW5lIE1UX0VFX1dJRklfQ09ORl9UU1NJMF81RwkJQklUKDIpDQorI2RlZmluZSBNVF9F RV9XSUZJX0NPTkZfVFNTSTFfNUcJCUJJVCg0KQ0KKw0KK2VudW0gbXQ3OTE1X2VlcHJvbV9iYW5k IHsNCisJTVRfRUVfRFVBTF9CQU5ELA0KKwlNVF9FRV81R0haLA0KKwlNVF9FRV8yR0haLA0KKwlN VF9FRV9EQkRDLA0KK307DQorDQorc3RydWN0IHNrdV9ncm91cCB7DQorCXU4IGxlbjsNCisJdTE2 IG9mZnNldFsyXTsNCisJY29uc3QgdTggKmRlbHRhX21hcDsNCit9Ow0KKw0KK3N0YXRpYyBpbmxp bmUgaW50DQorbXQ3OTE1X2dldF9jaGFubmVsX2dyb3VwKGludCBjaGFubmVsKQ0KK3sNCisJaWYg KGNoYW5uZWwgPj0gMTg0ICYmIGNoYW5uZWwgPD0gMTk2KQ0KKwkJcmV0dXJuIDA7DQorCWlmIChj aGFubmVsIDw9IDQ4KQ0KKwkJcmV0dXJuIDE7DQorCWlmIChjaGFubmVsIDw9IDY0KQ0KKwkJcmV0 dXJuIDI7DQorCWlmIChjaGFubmVsIDw9IDk2KQ0KKwkJcmV0dXJuIDM7DQorCWlmIChjaGFubmVs IDw9IDExMikNCisJCXJldHVybiA0Ow0KKwlpZiAoY2hhbm5lbCA8PSAxMjgpDQorCQlyZXR1cm4g NTsNCisJaWYgKGNoYW5uZWwgPD0gMTQ0KQ0KKwkJcmV0dXJuIDY7DQorCXJldHVybiA3Ow0KK30N CisNCitzdGF0aWMgaW5saW5lIGJvb2wNCittdDc5MTVfdHNzaV9lbmFibGVkKHN0cnVjdCBtdDc5 MTVfZGV2ICpkZXYsIGVudW0gbmw4MDIxMV9iYW5kIGJhbmQpDQorew0KKwl1OCAqZWVwID0gZGV2 LT5tdDc2LmVlcHJvbS5kYXRhOw0KKw0KKwkvKiBUT0RPOiBEQkRDICovDQorCWlmIChiYW5kID09 IE5MODAyMTFfQkFORF81R0haKQ0KKwkJcmV0dXJuIGVlcFtNVF9FRV9XSUZJX0NPTkYgKyA3XSAm IE1UX0VFX1dJRklfQ09ORl9UU1NJMF81RzsNCisJZWxzZQ0KKwkJcmV0dXJuIGVlcFtNVF9FRV9X SUZJX0NPTkYgKyA3XSAmIE1UX0VFX1dJRklfQ09ORl9UU1NJMF8yRzsNCit9DQorDQorI2VuZGlm DQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MTUv aW5pdC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MTUvaW5pdC5j DQpuZXcgZmlsZSBtb2RlIDEwMDY0NA0KaW5kZXggMDAwMDAwMDAwMDAwLi5mYjU5NmFmZGYwYmUN Ci0tLSAvZGV2L251bGwNCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYv bXQ3OTE1L2luaXQuYw0KQEAgLTAsMCArMSwzOTUgQEANCisvLyBTUERYLUxpY2Vuc2UtSWRlbnRp ZmllcjogSVNDDQorLyogQ29weXJpZ2h0IChDKSAyMDIwIE1lZGlhVGVrIEluYy4gKi8NCisNCisj aW5jbHVkZSA8bGludXgvZXRoZXJkZXZpY2UuaD4NCisjaW5jbHVkZSAibXQ3OTE1LmgiDQorI2lu Y2x1ZGUgIm1hYy5oIg0KKyNpbmNsdWRlICJlZXByb20uaCINCisNCitzdGF0aWMgdm9pZA0KK210 NzkxNV9tYWNfaW5pdF9iYW5kKHN0cnVjdCBtdDc5MTVfZGV2ICpkZXYsIHU4IGJhbmQpDQorew0K Kwl1MzIgbWFzaywgc2V0Ow0KKw0KKwltdDc2X3Jtd19maWVsZChkZXYsIE1UX1RNQUNfQ1RDUjAo YmFuZCksDQorCQkgICAgICAgTVRfVE1BQ19DVENSMF9JTlNfRERMTVRfUkVGVElNRSwgMHgzZik7 DQorCW10NzZfc2V0KGRldiwgTVRfVE1BQ19DVENSMChiYW5kKSwNCisJCSBNVF9UTUFDX0NUQ1Iw X0lOU19ERExNVF9WSFRfU01QRFVfRU4gfA0KKwkJIE1UX1RNQUNfQ1RDUjBfSU5TX0RETE1UX0VO KTsNCisNCisJbWFzayA9IE1UX01EUF9SQ0ZSMF9NQ1VfUlhfTUdNVCB8DQorCSAgICAgICBNVF9N RFBfUkNGUjBfTUNVX1JYX0NUTF9OT05fQkFSIHwNCisJICAgICAgIE1UX01EUF9SQ0ZSMF9NQ1Vf UlhfQ1RMX0JBUjsNCisJc2V0ID0gRklFTERfUFJFUChNVF9NRFBfUkNGUjBfTUNVX1JYX01HTVQs IE1UX01EUF9UT19ISUYpIHwNCisJICAgICAgRklFTERfUFJFUChNVF9NRFBfUkNGUjBfTUNVX1JY X0NUTF9OT05fQkFSLCBNVF9NRFBfVE9fSElGKSB8DQorCSAgICAgIEZJRUxEX1BSRVAoTVRfTURQ X1JDRlIwX01DVV9SWF9DVExfQkFSLCBNVF9NRFBfVE9fSElGKTsNCisJbXQ3Nl9ybXcoZGV2LCBN VF9NRFBfQk5SQ0ZSMChiYW5kKSwgbWFzaywgc2V0KTsNCisNCisJbWFzayA9IE1UX01EUF9SQ0ZS MV9NQ1VfUlhfQllQQVNTIHwNCisJICAgICAgIE1UX01EUF9SQ0ZSMV9SWF9EUk9QUEVEX1VDQVNU IHwNCisJICAgICAgIE1UX01EUF9SQ0ZSMV9SWF9EUk9QUEVEX01DQVNUOw0KKwlzZXQgPSBGSUVM RF9QUkVQKE1UX01EUF9SQ0ZSMV9NQ1VfUlhfQllQQVNTLCBNVF9NRFBfVE9fSElGKSB8DQorCSAg ICAgIEZJRUxEX1BSRVAoTVRfTURQX1JDRlIxX1JYX0RST1BQRURfVUNBU1QsIE1UX01EUF9UT19I SUYpIHwNCisJICAgICAgRklFTERfUFJFUChNVF9NRFBfUkNGUjFfUlhfRFJPUFBFRF9NQ0FTVCwg TVRfTURQX1RPX0hJRik7DQorCW10NzZfcm13KGRldiwgTVRfTURQX0JOUkNGUjEoYmFuZCksIG1h c2ssIHNldCk7DQorDQorCW10NzZfc2V0KGRldiwgTVRfV0ZfUk1BQ19NSUJfVElNRTAoYmFuZCks IE1UX1dGX1JNQUNfTUlCX1JYVElNRV9FTik7DQorCW10NzZfc2V0KGRldiwgTVRfV0ZfUk1BQ19N SUJfQUlSVElNRTAoYmFuZCksIE1UX1dGX1JNQUNfTUlCX1JYVElNRV9FTik7DQorfQ0KKw0KK3N0 YXRpYyB2b2lkIG10NzkxNV9tYWNfaW5pdChzdHJ1Y3QgbXQ3OTE1X2RldiAqZGV2KQ0KK3sNCisJ aW50IGk7DQorDQorCW10NzZfcm13X2ZpZWxkKGRldiwgTVRfRE1BX0RDUjAsIE1UX0RNQV9EQ1Iw X01BWF9SWF9MRU4sIDE1MzYpOw0KKwltdDc2X3Jtd19maWVsZChkZXYsIE1UX01EUF9EQ1IxLCBN VF9NRFBfRENSMV9NQVhfUlhfTEVOLCAxNTM2KTsNCisJLyogZGlzYWJsZSBoYXJkd2FyZSBkZS1h Z2cgKi8NCisJbXQ3Nl9jbGVhcihkZXYsIE1UX01EUF9EQ1IwLCBNVF9NRFBfRENSMF9EQU1TRFVf RU4pOw0KKw0KKwlmb3IgKGkgPSAwOyBpIDwgTVQ3OTE1X1dUQkxfU0laRTsgaSsrKQ0KKwkJbXQ3 OTE1X21hY193dGJsX3VwZGF0ZShkZXYsIGksDQorCQkJCSAgICAgICBNVF9XVEJMX1VQREFURV9B RE1fQ09VTlRfQ0xFQVIpOw0KKw0KKwltdDc5MTVfbWFjX2luaXRfYmFuZChkZXYsIDApOw0KKwlt dDc5MTVfbWFjX2luaXRfYmFuZChkZXYsIDEpOw0KKwltdDc5MTVfbWN1X3NldF9ydHNfdGhyZXNo KCZkZXYtPnBoeSwgMHg5MmIpOw0KK30NCisNCitzdGF0aWMgdm9pZA0KK210NzkxNV9pbml0X3R4 cG93ZXJfYmFuZChzdHJ1Y3QgbXQ3OTE1X2RldiAqZGV2LA0KKwkJCSBzdHJ1Y3QgaWVlZTgwMjEx X3N1cHBvcnRlZF9iYW5kICpzYmFuZCkNCit7DQorCWludCBpLCBuX2NoYWlucyA9IGh3ZWlnaHQ4 KGRldi0+bXBoeS5hbnRlbm5hX21hc2spOw0KKw0KKwlmb3IgKGkgPSAwOyBpIDwgc2JhbmQtPm5f Y2hhbm5lbHM7IGkrKykgew0KKwkJc3RydWN0IGllZWU4MDIxMV9jaGFubmVsICpjaGFuID0gJnNi YW5kLT5jaGFubmVsc1tpXTsNCisJCXUzMiB0YXJnZXRfcG93ZXIgPSAwOw0KKwkJaW50IGo7DQor DQorCQlmb3IgKGogPSAwOyBqIDwgbl9jaGFpbnM7IGorKykgew0KKwkJCXUzMiB2YWw7DQorDQor CQkJdmFsID0gbXQ3OTE1X2VlcHJvbV9nZXRfdGFyZ2V0X3Bvd2VyKGRldiwgY2hhbiwgaik7DQor CQkJdGFyZ2V0X3Bvd2VyID0gbWF4KHRhcmdldF9wb3dlciwgdmFsKTsNCisJCX0NCisNCisJCWNo YW4tPm1heF9wb3dlciA9IG1pbl90KGludCwgY2hhbi0+bWF4X3JlZ19wb3dlciwNCisJCQkJCXRh cmdldF9wb3dlciAvIDIpOw0KKwkJY2hhbi0+b3JpZ19tcHdyID0gdGFyZ2V0X3Bvd2VyIC8gMjsN CisJfQ0KK30NCisNCitzdGF0aWMgdm9pZCBtdDc5MTVfaW5pdF90eHBvd2VyKHN0cnVjdCBtdDc5 MTVfZGV2ICpkZXYpDQorew0KKwltdDc5MTVfaW5pdF90eHBvd2VyX2JhbmQoZGV2LCAmZGV2LT5t cGh5LnNiYW5kXzJnLnNiYW5kKTsNCisJbXQ3OTE1X2luaXRfdHhwb3dlcl9iYW5kKGRldiwgJmRl di0+bXBoeS5zYmFuZF81Zy5zYmFuZCk7DQorfQ0KKw0KK3N0YXRpYyB2b2lkIG10NzkxNV9pbml0 X3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQ0KK3sNCisJc3RydWN0IG10NzkxNV9kZXYg KmRldiA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgbXQ3OTE1X2RldiwNCisJCQkJIGluaXRf d29yayk7DQorDQorCW10NzkxNV9tY3Vfc2V0X2VlcHJvbShkZXYpOw0KKwltdDc5MTVfbWFjX2lu aXQoZGV2KTsNCisJbXQ3OTE1X2luaXRfdHhwb3dlcihkZXYpOw0KK30NCisNCitzdGF0aWMgaW50 IG10NzkxNV9pbml0X2hhcmR3YXJlKHN0cnVjdCBtdDc5MTVfZGV2ICpkZXYpDQorew0KKwlpbnQg cmV0LCBpZHg7DQorDQorCW10NzZfd3IoZGV2LCBNVF9JTlRfU09VUkNFX0NTUiwgfjApOw0KKw0K KwlJTklUX1dPUksoJmRldi0+aW5pdF93b3JrLCBtdDc5MTVfaW5pdF93b3JrKTsNCisJc3Bpbl9s b2NrX2luaXQoJmRldi0+dG9rZW5fbG9jayk7DQorCWlkcl9pbml0KCZkZXYtPnRva2VuKTsNCisN CisJcmV0ID0gbXQ3OTE1X2RtYV9pbml0KGRldik7DQorCWlmIChyZXQpDQorCQlyZXR1cm4gcmV0 Ow0KKw0KKwlzZXRfYml0KE1UNzZfU1RBVEVfSU5JVElBTElaRUQsICZkZXYtPm1waHkuc3RhdGUp Ow0KKw0KKwlyZXQgPSBtdDc5MTVfbWN1X2luaXQoZGV2KTsNCisJaWYgKHJldCkNCisJCXJldHVy biByZXQ7DQorDQorCXJldCA9IG10NzkxNV9lZXByb21faW5pdChkZXYpOw0KKwlpZiAocmV0IDwg MCkNCisJCXJldHVybiByZXQ7DQorDQorCS8qIEJlYWNvbiBhbmQgbWdtdCBmcmFtZXMgc2hvdWxk IG9jY3VweSB3Y2lkIDAgKi8NCisJaWR4ID0gbXQ3Nl93Y2lkX2FsbG9jKGRldi0+bXQ3Ni53Y2lk X21hc2ssIE1UNzkxNV9XVEJMX1NUQSAtIDEpOw0KKwlpZiAoaWR4KQ0KKwkJcmV0dXJuIC1FTk9T UEM7DQorDQorCWRldi0+bXQ3Ni5nbG9iYWxfd2NpZC5pZHggPSBpZHg7DQorCWRldi0+bXQ3Ni5n bG9iYWxfd2NpZC5od19rZXlfaWR4ID0gLTE7DQorCWRldi0+bXQ3Ni5nbG9iYWxfd2NpZC50eF9p bmZvIHw9IE1UX1dDSURfVFhfSU5GT19TRVQ7DQorCXJjdV9hc3NpZ25fcG9pbnRlcihkZXYtPm10 NzYud2NpZFtpZHhdLCAmZGV2LT5tdDc2Lmdsb2JhbF93Y2lkKTsNCisNCisJcmV0dXJuIDA7DQor fQ0KKw0KKyNkZWZpbmUgQ0NLX1JBVEUoX2lkeCwgX3JhdGUpIHsJCQkJCQlcDQorCS5iaXRyYXRl ID0gX3JhdGUsCQkJCQkJXA0KKwkuZmxhZ3MgPSBJRUVFODAyMTFfUkFURV9TSE9SVF9QUkVBTUJM RSwJCQkJXA0KKwkuaHdfdmFsdWUgPSAoTVRfUEhZX1RZUEVfQ0NLIDw8IDgpIHwgKF9pZHgpLAkJ CVwNCisJLmh3X3ZhbHVlX3Nob3J0ID0gKE1UX1BIWV9UWVBFX0NDSyA8PCA4KSB8ICg0ICsgKF9p ZHgpKSwJXA0KK30NCisNCisjZGVmaW5lIE9GRE1fUkFURShfaWR4LCBfcmF0ZSkgewkJCQkJXA0K KwkuYml0cmF0ZSA9IF9yYXRlLAkJCQkJCVwNCisJLmh3X3ZhbHVlID0gKE1UX1BIWV9UWVBFX09G RE0gPDwgOCkgfCAoX2lkeCksCQkJXA0KKwkuaHdfdmFsdWVfc2hvcnQgPSAoTVRfUEhZX1RZUEVf T0ZETSA8PCA4KSB8IChfaWR4KSwJCVwNCit9DQorDQorc3RhdGljIHN0cnVjdCBpZWVlODAyMTFf cmF0ZSBtdDc5MTVfcmF0ZXNbXSA9IHsNCisJQ0NLX1JBVEUoMCwgMTApLA0KKwlDQ0tfUkFURSgx LCAyMCksDQorCUNDS19SQVRFKDIsIDU1KSwNCisJQ0NLX1JBVEUoMywgMTEwKSwNCisJT0ZETV9S QVRFKDExLCA2MCksDQorCU9GRE1fUkFURSgxNSwgOTApLA0KKwlPRkRNX1JBVEUoMTAsIDEyMCks DQorCU9GRE1fUkFURSgxNCwgMTgwKSwNCisJT0ZETV9SQVRFKDksICAyNDApLA0KKwlPRkRNX1JB VEUoMTMsIDM2MCksDQorCU9GRE1fUkFURSg4LCAgNDgwKSwNCisJT0ZETV9SQVRFKDEyLCA1NDAp LA0KK307DQorDQorc3RhdGljIGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfaWZhY2VfbGltaXQgaWZf bGltaXRzW10gPSB7DQorCXsNCisJCS5tYXggPSAxLA0KKwkJLnR5cGVzID0gQklUKE5MODAyMTFf SUZUWVBFX0FESE9DKQ0KKwl9LCB7DQorCQkubWF4ID0gTVQ3OTE1X01BWF9JTlRFUkZBQ0VTLA0K KwkJLnR5cGVzID0gQklUKE5MODAyMTFfSUZUWVBFX0FQKSB8DQorI2lmZGVmIENPTkZJR19NQUM4 MDIxMV9NRVNIDQorCQkJIEJJVChOTDgwMjExX0lGVFlQRV9NRVNIX1BPSU5UKSB8DQorI2VuZGlm DQorCQkJIEJJVChOTDgwMjExX0lGVFlQRV9TVEFUSU9OKQ0KKwl9DQorfTsNCisNCitzdGF0aWMg Y29uc3Qgc3RydWN0IGllZWU4MDIxMV9pZmFjZV9jb21iaW5hdGlvbiBpZl9jb21iW10gPSB7DQor CXsNCisJCS5saW1pdHMgPSBpZl9saW1pdHMsDQorCQkubl9saW1pdHMgPSBBUlJBWV9TSVpFKGlm X2xpbWl0cyksDQorCQkubWF4X2ludGVyZmFjZXMgPSA0LA0KKwkJLm51bV9kaWZmZXJlbnRfY2hh bm5lbHMgPSAxLA0KKwkJLmJlYWNvbl9pbnRfaW5mcmFfbWF0Y2ggPSB0cnVlLA0KKwkJLnJhZGFy X2RldGVjdF93aWR0aHMgPSBCSVQoTkw4MDIxMV9DSEFOX1dJRFRIXzIwX05PSFQpIHwNCisJCQkJ ICAgICAgIEJJVChOTDgwMjExX0NIQU5fV0lEVEhfMjApIHwNCisJCQkJICAgICAgIEJJVChOTDgw MjExX0NIQU5fV0lEVEhfNDApIHwNCisJCQkJICAgICAgIEJJVChOTDgwMjExX0NIQU5fV0lEVEhf ODApIHwNCisJCQkJICAgICAgIEJJVChOTDgwMjExX0NIQU5fV0lEVEhfMTYwKSB8DQorCQkJCSAg ICAgICBCSVQoTkw4MDIxMV9DSEFOX1dJRFRIXzgwUDgwKSwNCisJfQ0KK307DQorDQorc3RhdGlj IHZvaWQNCittdDc5MTVfcmVnZF9ub3RpZmllcihzdHJ1Y3Qgd2lwaHkgKndpcGh5LA0KKwkJICAg ICBzdHJ1Y3QgcmVndWxhdG9yeV9yZXF1ZXN0ICpyZXF1ZXN0KQ0KK3sNCisJc3RydWN0IGllZWU4 MDIxMV9odyAqaHcgPSB3aXBoeV90b19pZWVlODAyMTFfaHcod2lwaHkpOw0KKwlzdHJ1Y3QgbXQ3 OTE1X2RldiAqZGV2ID0gbXQ3OTE1X2h3X2Rldihodyk7DQorCXN0cnVjdCBtdDc2X3BoeSAqbXBo eSA9IGh3LT5wcml2Ow0KKwlzdHJ1Y3QgbXQ3OTE1X3BoeSAqcGh5ID0gbXBoeS0+cHJpdjsNCisJ c3RydWN0IGNmZzgwMjExX2NoYW5fZGVmICpjaGFuZGVmID0gJm1waHktPmNoYW5kZWY7DQorDQor CWRldi0+bXQ3Ni5yZWdpb24gPSByZXF1ZXN0LT5kZnNfcmVnaW9uOw0KKw0KKwlpZiAoIShjaGFu ZGVmLT5jaGFuLT5mbGFncyAmIElFRUU4MDIxMV9DSEFOX1JBREFSKSkNCisJCXJldHVybjsNCisN CisJbXQ3OTE1X2Rmc19pbml0X3JhZGFyX2RldGVjdG9yKHBoeSk7DQorfQ0KKw0KK3N0YXRpYyB2 b2lkDQorbXQ3OTE1X2luaXRfd2lwaHkoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpDQorew0KKwlz dHJ1Y3QgbXQ3OTE1X3BoeSAqcGh5ID0gbXQ3OTE1X2h3X3BoeShodyk7DQorCXN0cnVjdCB3aXBo eSAqd2lwaHkgPSBody0+d2lwaHk7DQorDQorCWh3LT5xdWV1ZXMgPSA0Ow0KKwlody0+bWF4X3J4 X2FnZ3JlZ2F0aW9uX3N1YmZyYW1lcyA9IElFRUU4MDIxMV9NQVhfQU1QRFVfQlVGOw0KKwlody0+ bWF4X3R4X2FnZ3JlZ2F0aW9uX3N1YmZyYW1lcyA9IElFRUU4MDIxMV9NQVhfQU1QRFVfQlVGOw0K Kw0KKwlwaHktPnNsb3R0aW1lID0gOTsNCisNCisJaHctPnN0YV9kYXRhX3NpemUgPSBzaXplb2Yo c3RydWN0IG10NzkxNV9zdGEpOw0KKwlody0+dmlmX2RhdGFfc2l6ZSA9IHNpemVvZihzdHJ1Y3Qg bXQ3OTE1X3ZpZik7DQorDQorCXdpcGh5LT5pZmFjZV9jb21iaW5hdGlvbnMgPSBpZl9jb21iOw0K Kwl3aXBoeS0+bl9pZmFjZV9jb21iaW5hdGlvbnMgPSBBUlJBWV9TSVpFKGlmX2NvbWIpOw0KKwl3 aXBoeS0+cmVnX25vdGlmaWVyID0gbXQ3OTE1X3JlZ2Rfbm90aWZpZXI7DQorCXdpcGh5LT5mbGFn cyB8PSBXSVBIWV9GTEFHX0hBU19DSEFOTkVMX1NXSVRDSDsNCisNCisJd2lwaHlfZXh0X2ZlYXR1 cmVfc2V0KHdpcGh5LCBOTDgwMjExX0VYVF9GRUFUVVJFX1ZIVF9JQlNTKTsNCisNCisJaWVlZTgw MjExX2h3X3NldChodywgSEFTX1JBVEVfQ09OVFJPTCk7DQorDQorCWh3LT5tYXhfdHhfZnJhZ21l bnRzID0gNDsNCit9DQorDQorc3RhdGljIHZvaWQNCittdDc5MTVfY2FwX2RiZGNfZW5hYmxlKHN0 cnVjdCBtdDc5MTVfZGV2ICpkZXYpDQorew0KKwlkZXYtPm1waHkuc2JhbmRfNWcuc2JhbmQudmh0 X2NhcC5jYXAgJj0NCisJCQl+KElFRUU4MDIxMV9WSFRfQ0FQX1NIT1JUX0dJXzE2MCB8DQorCQkJ ICBJRUVFODAyMTFfVkhUX0NBUF9TVVBQX0NIQU5fV0lEVEhfMTYwXzgwUExVUzgwTUhaKTsNCisN CisJaWYgKGRldi0+Y2hhaW5tYXNrID09IDB4ZikNCisJCWRldi0+bXBoeS5hbnRlbm5hX21hc2sg PSBkZXYtPmNoYWlubWFzayA+PiAyOw0KKwllbHNlDQorCQlkZXYtPm1waHkuYW50ZW5uYV9tYXNr ID0gZGV2LT5jaGFpbm1hc2sgPj4gMTsNCisNCisJZGV2LT5waHkuY2hhaW5tYXNrID0gZGV2LT5t cGh5LmFudGVubmFfbWFzazsNCisJZGV2LT5tcGh5Lmh3LT53aXBoeS0+YXZhaWxhYmxlX2FudGVu bmFzX3J4ID0gZGV2LT5waHkuY2hhaW5tYXNrOw0KKwlkZXYtPm1waHkuaHctPndpcGh5LT5hdmFp bGFibGVfYW50ZW5uYXNfdHggPSBkZXYtPnBoeS5jaGFpbm1hc2s7DQorDQorCW10NzZfc2V0X3N0 cmVhbV9jYXBzKCZkZXYtPm10NzYsIHRydWUpOw0KK30NCisNCitzdGF0aWMgdm9pZA0KK210Nzkx NV9jYXBfZGJkY19kaXNhYmxlKHN0cnVjdCBtdDc5MTVfZGV2ICpkZXYpDQorew0KKwlkZXYtPm1w aHkuc2JhbmRfNWcuc2JhbmQudmh0X2NhcC5jYXAgfD0NCisJCQlJRUVFODAyMTFfVkhUX0NBUF9T SE9SVF9HSV8xNjAgfA0KKwkJCUlFRUU4MDIxMV9WSFRfQ0FQX1NVUFBfQ0hBTl9XSURUSF8xNjBf ODBQTFVTODBNSFo7DQorDQorCWRldi0+bXBoeS5hbnRlbm5hX21hc2sgPSBkZXYtPmNoYWlubWFz azsNCisJZGV2LT5waHkuY2hhaW5tYXNrID0gZGV2LT5jaGFpbm1hc2s7DQorCWRldi0+bXBoeS5o dy0+d2lwaHktPmF2YWlsYWJsZV9hbnRlbm5hc19yeCA9IGRldi0+Y2hhaW5tYXNrOw0KKwlkZXYt Pm1waHkuaHctPndpcGh5LT5hdmFpbGFibGVfYW50ZW5uYXNfdHggPSBkZXYtPmNoYWlubWFzazsN CisNCisJbXQ3Nl9zZXRfc3RyZWFtX2NhcHMoJmRldi0+bXQ3NiwgdHJ1ZSk7DQorfQ0KKw0KK2lu dCBtdDc5MTVfcmVnaXN0ZXJfZXh0X3BoeShzdHJ1Y3QgbXQ3OTE1X2RldiAqZGV2KQ0KK3sNCisJ c3RydWN0IG10NzkxNV9waHkgKnBoeSA9IG10NzkxNV9leHRfcGh5KGRldik7DQorCXN0cnVjdCBt dDc2X3BoeSAqbXBoeTsNCisJaW50IHJldDsNCisJYm9vbCBib3VuZDsNCisNCisJLyogVE9ETzog ZW5ibGUgREJEQyAqLw0KKwlib3VuZCA9IG10NzkxNV9sMV9ycihkZXYsIE1UX0hXX0JPVU5EKSAm IEJJVCg1KTsNCisJaWYgKCFib3VuZCkNCisJCXJldHVybiAtRUlOVkFMOw0KKw0KKwlpZiAodGVz dF9iaXQoTVQ3Nl9TVEFURV9SVU5OSU5HLCAmZGV2LT5tcGh5LnN0YXRlKSkNCisJCXJldHVybiAt RUlOVkFMOw0KKw0KKwlpZiAocGh5KQ0KKwkJcmV0dXJuIDA7DQorDQorCW10NzkxNV9jYXBfZGJk Y19lbmFibGUoZGV2KTsNCisJbXBoeSA9IG10NzZfYWxsb2NfcGh5KCZkZXYtPm10NzYsIHNpemVv ZigqcGh5KSwgJm10NzkxNV9vcHMpOw0KKwlpZiAoIW1waHkpDQorCQlyZXR1cm4gLUVOT01FTTsN CisNCisJcGh5ID0gbXBoeS0+cHJpdjsNCisJcGh5LT5kZXYgPSBkZXY7DQorCXBoeS0+bXQ3NiA9 IG1waHk7DQorCXBoeS0+Y2hhaW5tYXNrID0gZGV2LT5jaGFpbm1hc2sgJiB+ZGV2LT5waHkuY2hh aW5tYXNrOw0KKwltcGh5LT5hbnRlbm5hX21hc2sgPSBCSVQoaHdlaWdodDgocGh5LT5jaGFpbm1h c2spKSAtIDE7DQorCW10NzkxNV9pbml0X3dpcGh5KG1waHktPmh3KTsNCisNCisJLyoNCisJICog TWFrZSB0aGUgc2Vjb25kYXJ5IFBIWSBNQUMgYWRkcmVzcyBsb2NhbCB3aXRob3V0IG92ZXJsYXBw aW5nIHdpdGgNCisJICogdGhlIHVzdWFsIE1BQyBhZGRyZXNzIGFsbG9jYXRpb24gc2NoZW1lIG9u IG11bHRpcGxlIHZpcnR1YWwgaW50ZXJmYWNlcw0KKwkgKi8NCisJbXBoeS0+aHctPndpcGh5LT5w ZXJtX2FkZHJbMF0gfD0gMjsNCisJbXBoeS0+aHctPndpcGh5LT5wZXJtX2FkZHJbMF0gXj0gQklU KDcpOw0KKw0KKwkvKiBUaGUgc2Vjb25kIGludGVyZmFjZSBkb2VzIG5vdCBnZXQgYW55IHBhY2tl dHMgdW5sZXNzIGl0IGhhcyBhIHZpZiAqLw0KKwlpZWVlODAyMTFfaHdfc2V0KG1waHktPmh3LCBX QU5UX01PTklUT1JfVklGKTsNCisNCisJcmV0ID0gbXQ3Nl9yZWdpc3Rlcl9waHkobXBoeSk7DQor CWlmIChyZXQpDQorCQlpZWVlODAyMTFfZnJlZV9odyhtcGh5LT5odyk7DQorDQorCXJldHVybiBy ZXQ7DQorfQ0KKw0KK3ZvaWQgbXQ3OTE1X3VucmVnaXN0ZXJfZXh0X3BoeShzdHJ1Y3QgbXQ3OTE1 X2RldiAqZGV2KQ0KK3sNCisJc3RydWN0IG10NzkxNV9waHkgKnBoeSA9IG10NzkxNV9leHRfcGh5 KGRldik7DQorCXN0cnVjdCBtdDc2X3BoeSAqbXBoeSA9IGRldi0+bXQ3Ni5waHkyOw0KKw0KKwlp ZiAoIXBoeSkNCisJCXJldHVybjsNCisNCisJbXQ3OTE1X2NhcF9kYmRjX2Rpc2FibGUoZGV2KTsN CisJbXQ3Nl91bnJlZ2lzdGVyX3BoeShtcGh5KTsNCisJaWVlZTgwMjExX2ZyZWVfaHcobXBoeS0+ aHcpOw0KK30NCisNCitpbnQgbXQ3OTE1X3JlZ2lzdGVyX2RldmljZShzdHJ1Y3QgbXQ3OTE1X2Rl diAqZGV2KQ0KK3sNCisJc3RydWN0IGllZWU4MDIxMV9odyAqaHcgPSBtdDc2X2h3KGRldik7DQor CWludCByZXQ7DQorDQorCWRldi0+cGh5LmRldiA9IGRldjsNCisJZGV2LT5waHkubXQ3NiA9ICZk ZXYtPm10NzYucGh5Ow0KKwlkZXYtPm10NzYucGh5LnByaXYgPSAmZGV2LT5waHk7DQorCUlOSVRf REVMQVlFRF9XT1JLKCZkZXYtPm10NzYubWFjX3dvcmssIG10NzkxNV9tYWNfd29yayk7DQorCUlO SVRfTElTVF9IRUFEKCZkZXYtPnN0YV9wb2xsX2xpc3QpOw0KKwlzcGluX2xvY2tfaW5pdCgmZGV2 LT5zdGFfcG9sbF9sb2NrKTsNCisNCisJaW5pdF93YWl0cXVldWVfaGVhZCgmZGV2LT5yZXNldF93 YWl0KTsNCisJSU5JVF9XT1JLKCZkZXYtPnJlc2V0X3dvcmssIG10NzkxNV9tYWNfcmVzZXRfd29y ayk7DQorDQorCXJldCA9IG10NzkxNV9pbml0X2hhcmR3YXJlKGRldik7DQorCWlmIChyZXQpDQor CQlyZXR1cm4gcmV0Ow0KKw0KKwltdDc5MTVfaW5pdF93aXBoeShodyk7DQorCWRldi0+bXBoeS5z YmFuZF8yZy5zYmFuZC5odF9jYXAuY2FwIHw9DQorCQkJSUVFRTgwMjExX0hUX0NBUF9MRFBDX0NP RElORyB8DQorCQkJSUVFRTgwMjExX0hUX0NBUF9NQVhfQU1TRFU7DQorCWRldi0+bXBoeS5zYmFu ZF81Zy5zYmFuZC5odF9jYXAuY2FwIHw9DQorCQkJSUVFRTgwMjExX0hUX0NBUF9MRFBDX0NPRElO RyB8DQorCQkJSUVFRTgwMjExX0hUX0NBUF9NQVhfQU1TRFU7DQorCWRldi0+bXBoeS5zYmFuZF81 Zy5zYmFuZC52aHRfY2FwLmNhcCB8PQ0KKwkJCUlFRUU4MDIxMV9WSFRfQ0FQX01BWF9NUERVX0xF TkdUSF83OTkxIHwNCisJCQlJRUVFODAyMTFfVkhUX0NBUF9NQVhfQV9NUERVX0xFTkdUSF9FWFBP TkVOVF9NQVNLOw0KKwltdDc5MTVfY2FwX2RiZGNfZGlzYWJsZShkZXYpOw0KKwlkZXYtPnBoeS5k ZnNfc3RhdGUgPSAtMTsNCisNCisJcmV0ID0gbXQ3Nl9yZWdpc3Rlcl9kZXZpY2UoJmRldi0+bXQ3 NiwgdHJ1ZSwgbXQ3OTE1X3JhdGVzLA0KKwkJCQkgICBBUlJBWV9TSVpFKG10NzkxNV9yYXRlcykp Ow0KKwlpZiAocmV0KQ0KKwkJcmV0dXJuIHJldDsNCisNCisJaWVlZTgwMjExX3F1ZXVlX3dvcmso bXQ3Nl9odyhkZXYpLCAmZGV2LT5pbml0X3dvcmspOw0KKw0KKwlyZXR1cm4gbXQ3OTE1X2luaXRf ZGVidWdmcyhkZXYpOw0KK30NCisNCit2b2lkIG10NzkxNV91bnJlZ2lzdGVyX2RldmljZShzdHJ1 Y3QgbXQ3OTE1X2RldiAqZGV2KQ0KK3sNCisJc3RydWN0IG10NzZfdHh3aV9jYWNoZSAqdHh3aTsN CisJaW50IGlkOw0KKw0KKwltdDc5MTVfdW5yZWdpc3Rlcl9leHRfcGh5KGRldik7DQorCW10NzZf dW5yZWdpc3Rlcl9kZXZpY2UoJmRldi0+bXQ3Nik7DQorCW10NzkxNV9tY3VfZXhpdChkZXYpOw0K KwltdDc5MTVfZG1hX2NsZWFudXAoZGV2KTsNCisNCisJc3Bpbl9sb2NrX2JoKCZkZXYtPnRva2Vu X2xvY2spOw0KKwlpZHJfZm9yX2VhY2hfZW50cnkoJmRldi0+dG9rZW4sIHR4d2ksIGlkKSB7DQor CQltdDc5MTVfdHhwX3NrYl91bm1hcCgmZGV2LT5tdDc2LCB0eHdpKTsNCisJCWlmICh0eHdpLT5z a2IpDQorCQkJZGV2X2tmcmVlX3NrYl9hbnkodHh3aS0+c2tiKTsNCisJCW10NzZfcHV0X3R4d2ko JmRldi0+bXQ3NiwgdHh3aSk7DQorCX0NCisJc3Bpbl91bmxvY2tfYmgoJmRldi0+dG9rZW5fbG9j ayk7DQorCWlkcl9kZXN0cm95KCZkZXYtPnRva2VuKTsNCisNCisJbXQ3Nl9mcmVlX2RldmljZSgm ZGV2LT5tdDc2KTsNCit9DQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0 ZWsvbXQ3Ni9tdDc5MTUvbWFjLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2 L210NzkxNS9tYWMuYw0KbmV3IGZpbGUgbW9kZSAxMDA2NDQNCmluZGV4IDAwMDAwMDAwMDAwMC4u ZGRiYTM2MDA0NmMzDQotLS0gL2Rldi9udWxsDQorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9t ZWRpYXRlay9tdDc2L210NzkxNS9tYWMuYw0KQEAgLTAsMCArMSwxMjk4IEBADQorLy8gU1BEWC1M aWNlbnNlLUlkZW50aWZpZXI6IElTQw0KKy8qIENvcHlyaWdodCAoQykgMjAyMCBNZWRpYVRlayBJ bmMuICovDQorDQorI2luY2x1ZGUgPGxpbnV4L2V0aGVyZGV2aWNlLmg+DQorI2luY2x1ZGUgPGxp bnV4L3RpbWVrZWVwaW5nLmg+DQorI2luY2x1ZGUgIm10NzkxNS5oIg0KKyNpbmNsdWRlICIuLi9k bWEuaCINCisjaW5jbHVkZSAibWFjLmgiDQorDQorI2RlZmluZSB0b19yc3NpKGZpZWxkLCByeHYp CSgoRklFTERfR0VUKGZpZWxkLCByeHYpIC0gMjIwKSAvIDIpDQorDQorc3RhdGljIGNvbnN0IHN0 cnVjdCBtdDc5MTVfZGZzX3JhZGFyX3NwZWMgZXRzaV9yYWRhcl9zcGVjcyA9IHsNCisJLnB1bHNl X3RoID0geyAxMTAsIC0xMCwgLTgwLCA0MCwgNTIwMCwgMTI4LCA1MjAwIH0sDQorCS5yYWRhcl9w YXR0ZXJuID0gew0KKwkJWzVdID0gIHsgMSwgMCwgIDYsIDMyLCAyOCwgMCwgIDk5MCwgNTAxMCwg MTcsIDEsIDEgfSwNCisJCVs2XSA9ICB7IDEsIDAsICA5LCAzMiwgMjgsIDAsICA2MTUsIDUwMTAs IDI3LCAxLCAxIH0sDQorCQlbN10gPSAgeyAxLCAwLCAxNSwgMzIsIDI4LCAwLCAgMjQwLCAgNDQ1 LCAyNywgMSwgMSB9LA0KKwkJWzhdID0gIHsgMSwgMCwgMTIsIDMyLCAyOCwgMCwgIDI0MCwgIDUx MCwgNDIsIDEsIDEgfSwNCisJCVs5XSA9ICB7IDEsIDEsICAwLCAgMCwgIDAsIDAsIDI0OTAsIDMz NDMsIDE0LCAwLCAwLCAxMiwgMzIsIDI4LCB7IH0sIDEyNiB9LA0KKwkJWzEwXSA9IHsgMSwgMSwg IDAsICAwLCAgMCwgMCwgMjQ5MCwgMzM0MywgMTQsIDAsIDAsIDE1LCAzMiwgMjQsIHsgfSwgMTI2 IH0sDQorCQlbMTFdID0geyAxLCAxLCAgMCwgIDAsICAwLCAwLCAgODIzLCAyNTEwLCAxNCwgMCwg MCwgMTgsIDMyLCAyOCwgeyB9LCAgNTQgfSwNCisJCVsxMl0gPSB7IDEsIDEsICAwLCAgMCwgIDAs IDAsICA4MjMsIDI1MTAsIDE0LCAwLCAwLCAyNywgMzIsIDI0LCB7IH0sICA1NCB9LA0KKwl9LA0K K307DQorDQorc3RhdGljIGNvbnN0IHN0cnVjdCBtdDc5MTVfZGZzX3JhZGFyX3NwZWMgZmNjX3Jh ZGFyX3NwZWNzID0gew0KKwkucHVsc2VfdGggPSB7IDExMCwgLTEwLCAtODAsIDQwLCA1MjAwLCAx MjgsIDUyMDAgfSwNCisJLnJhZGFyX3BhdHRlcm4gPSB7DQorCQlbMF0gPSB7IDEsIDAsICA4LCAg MzIsIDI4LCAwLCA1MDgsIDMwNzYsIDEzLCAxLCAgMSB9LA0KKwkJWzFdID0geyAxLCAwLCAxMiwg IDMyLCAyOCwgMCwgMTQwLCAgMjQwLCAxNywgMSwgIDEgfSwNCisJCVsyXSA9IHsgMSwgMCwgIDgs ICAzMiwgMjgsIDAsIDE5MCwgIDUxMCwgMjIsIDEsICAxIH0sDQorCQlbM10gPSB7IDEsIDAsICA2 LCAgMzIsIDI4LCAwLCAxOTAsICA1MTAsIDMyLCAxLCAgMSB9LA0KKwkJWzRdID0geyAxLCAwLCAg OSwgMjU1LCAyOCwgMCwgMzIzLCAgMzQzLCAxMywgMSwgMzIgfSwNCisJfSwNCit9Ow0KKw0KK3N0 YXRpYyBjb25zdCBzdHJ1Y3QgbXQ3OTE1X2Rmc19yYWRhcl9zcGVjIGpwX3JhZGFyX3NwZWNzID0g ew0KKwkucHVsc2VfdGggPSB7IDExMCwgLTEwLCAtODAsIDQwLCA1MjAwLCAxMjgsIDUyMDAgfSwN CisJLnJhZGFyX3BhdHRlcm4gPSB7DQorCQlbMF0gPSAgeyAxLCAwLCAgOCwgIDMyLCAyOCwgMCwg IDUwOCwgMzA3NiwgIDEzLCAxLCAgMSB9LA0KKwkJWzFdID0gIHsgMSwgMCwgMTIsICAzMiwgMjgs IDAsICAxNDAsICAyNDAsICAxNywgMSwgIDEgfSwNCisJCVsyXSA9ICB7IDEsIDAsICA4LCAgMzIs IDI4LCAwLCAgMTkwLCAgNTEwLCAgMjIsIDEsICAxIH0sDQorCQlbM10gPSAgeyAxLCAwLCAgNiwg IDMyLCAyOCwgMCwgIDE5MCwgIDUxMCwgIDMyLCAxLCAgMSB9LA0KKwkJWzRdID0gIHsgMSwgMCwg IDksIDI1NSwgMjgsIDAsICAzMjMsICAzNDMsICAxMywgMSwgMzIgfSwNCisJCVsxM10gPSB7IDEs IDAsICA3LCAgMzIsIDI4LCAwLCAzODM2LCAzODU2LCAgMTQsIDEsICAxIH0sDQorCQlbMTRdID0g eyAxLCAwLCAgNiwgIDMyLCAyOCwgMCwgIDYxNSwgNTAxMCwgMTEwLCAxLCAgMSB9LA0KKwkJWzE1 XSA9IHsgMSwgMSwgIDAsICAgMCwgIDAsIDAsICAgMTUsIDUwMTAsIDExMCwgMCwgIDAsIDEyLCAz MiwgMjggfSwNCisJfSwNCit9Ow0KKw0KK3N0YXRpYyBzdHJ1Y3QgbXQ3Nl93Y2lkICptdDc5MTVf cnhfZ2V0X3djaWQoc3RydWN0IG10NzkxNV9kZXYgKmRldiwNCisJCQkJCSAgICB1MTYgaWR4LCBi b29sIHVuaWNhc3QpDQorew0KKwlzdHJ1Y3QgbXQ3OTE1X3N0YSAqc3RhOw0KKwlzdHJ1Y3QgbXQ3 Nl93Y2lkICp3Y2lkOw0KKw0KKwlpZiAoaWR4ID49IEFSUkFZX1NJWkUoZGV2LT5tdDc2LndjaWQp KQ0KKwkJcmV0dXJuIE5VTEw7DQorDQorCXdjaWQgPSByY3VfZGVyZWZlcmVuY2UoZGV2LT5tdDc2 LndjaWRbaWR4XSk7DQorCWlmICh1bmljYXN0IHx8ICF3Y2lkKQ0KKwkJcmV0dXJuIHdjaWQ7DQor DQorCWlmICghd2NpZC0+c3RhKQ0KKwkJcmV0dXJuIE5VTEw7DQorDQorCXN0YSA9IGNvbnRhaW5l cl9vZih3Y2lkLCBzdHJ1Y3QgbXQ3OTE1X3N0YSwgd2NpZCk7DQorCWlmICghc3RhLT52aWYpDQor CQlyZXR1cm4gTlVMTDsNCisNCisJcmV0dXJuICZzdGEtPnZpZi0+c3RhLndjaWQ7DQorfQ0KKw0K K3ZvaWQgbXQ3OTE1X3N0YV9wcyhzdHJ1Y3QgbXQ3Nl9kZXYgKm1kZXYsIHN0cnVjdCBpZWVlODAy MTFfc3RhICpzdGEsIGJvb2wgcHMpDQorew0KK30NCisNCitib29sIG10NzkxNV9tYWNfd3RibF91 cGRhdGUoc3RydWN0IG10NzkxNV9kZXYgKmRldiwgaW50IGlkeCwgdTMyIG1hc2spDQorew0KKwlt dDc2X3JtdyhkZXYsIE1UX1dUQkxfVVBEQVRFLCBNVF9XVEJMX1VQREFURV9XTEFOX0lEWCwNCisJ CSBGSUVMRF9QUkVQKE1UX1dUQkxfVVBEQVRFX1dMQU5fSURYLCBpZHgpIHwgbWFzayk7DQorDQor CXJldHVybiBtdDc2X3BvbGwoZGV2LCBNVF9XVEJMX1VQREFURSwgTVRfV1RCTF9VUERBVEVfQlVT WSwNCisJCQkgMCwgNTAwMCk7DQorfQ0KKw0KK3N0YXRpYyB1MzIgbXQ3OTE1X21hY193dGJsX2xt YWNfcmVhZChzdHJ1Y3QgbXQ3OTE1X2RldiAqZGV2LCB1MTYgd2NpZCwNCisJCQkJICAgICB1MTYg YWRkcikNCit7DQorCW10NzZfd3IoZGV2LCBNVF9XVEJMT05fVE9QX1dEVUNSLA0KKwkJRklFTERf UFJFUChNVF9XVEJMT05fVE9QX1dEVUNSX0dST1VQLCAod2NpZCA+PiA3KSkpOw0KKw0KKwlyZXR1 cm4gbXQ3Nl9ycihkZXYsIE1UX1dUQkxfTE1BQ19PRkZTKHdjaWQsIGFkZHIpKTsNCit9DQorDQor LyogVE9ETzogdXNlIHR4ZnJlZSBhaXJ0aW1lIGluZm8gdG8gYXZvaWQgcnVudGltZSBhY2Nlc3Np bmcgaW4gdGhlIGxvbmcgcnVuICovDQordm9pZCBtdDc5MTVfbWFjX3N0YV9wb2xsKHN0cnVjdCBt dDc5MTVfZGV2ICpkZXYpDQorew0KKwlzdGF0aWMgY29uc3QgdTggYWNfdG9fdGlkW10gPSB7DQor CQlbSUVFRTgwMjExX0FDX0JFXSA9IDAsDQorCQlbSUVFRTgwMjExX0FDX0JLXSA9IDEsDQorCQlb SUVFRTgwMjExX0FDX1ZJXSA9IDQsDQorCQlbSUVFRTgwMjExX0FDX1ZPXSA9IDYNCisJfTsNCisJ c3RhdGljIGNvbnN0IHU4IGh3X3F1ZXVlX21hcFtdID0gew0KKwkJW0lFRUU4MDIxMV9BQ19CS10g PSAwLA0KKwkJW0lFRUU4MDIxMV9BQ19CRV0gPSAxLA0KKwkJW0lFRUU4MDIxMV9BQ19WSV0gPSAy LA0KKwkJW0lFRUU4MDIxMV9BQ19WT10gPSAzLA0KKwl9Ow0KKwlzdHJ1Y3QgaWVlZTgwMjExX3N0 YSAqc3RhOw0KKwlzdHJ1Y3QgbXQ3OTE1X3N0YSAqbXN0YTsNCisJdTMyIHR4X3RpbWVbSUVFRTgw MjExX05VTV9BQ1NdLCByeF90aW1lW0lFRUU4MDIxMV9OVU1fQUNTXTsNCisJaW50IGk7DQorDQor CXJjdV9yZWFkX2xvY2soKTsNCisNCisJd2hpbGUgKHRydWUpIHsNCisJCWJvb2wgY2xlYXIgPSBm YWxzZTsNCisJCXUxNiBpZHg7DQorDQorCQlzcGluX2xvY2tfYmgoJmRldi0+c3RhX3BvbGxfbG9j ayk7DQorCQlpZiAobGlzdF9lbXB0eSgmZGV2LT5zdGFfcG9sbF9saXN0KSkgew0KKwkJCXNwaW5f dW5sb2NrX2JoKCZkZXYtPnN0YV9wb2xsX2xvY2spOw0KKwkJCWJyZWFrOw0KKwkJfQ0KKwkJbXN0 YSA9IGxpc3RfZmlyc3RfZW50cnkoJmRldi0+c3RhX3BvbGxfbGlzdCwNCisJCQkJCXN0cnVjdCBt dDc5MTVfc3RhLCBwb2xsX2xpc3QpOw0KKwkJbGlzdF9kZWxfaW5pdCgmbXN0YS0+cG9sbF9saXN0 KTsNCisJCXNwaW5fdW5sb2NrX2JoKCZkZXYtPnN0YV9wb2xsX2xvY2spOw0KKw0KKwkJZm9yIChp ID0gMCwgaWR4ID0gbXN0YS0+d2NpZC5pZHg7IGkgPCBJRUVFODAyMTFfTlVNX0FDUzsgaSsrKSB7 DQorCQkJdTMyIHR4X2xhc3QgPSBtc3RhLT5haXJ0aW1lX2FjW2ldOw0KKwkJCXUzMiByeF9sYXN0 ID0gbXN0YS0+YWlydGltZV9hY1tpICsgSUVFRTgwMjExX05VTV9BQ1NdOw0KKw0KKwkJCW1zdGEt PmFpcnRpbWVfYWNbaV0gPQ0KKwkJCQltdDc5MTVfbWFjX3d0YmxfbG1hY19yZWFkKGRldiwgaWR4 LCAyMCArIGkpOw0KKwkJCW1zdGEtPmFpcnRpbWVfYWNbaSArIElFRUU4MDIxMV9OVU1fQUNTXSA9 DQorCQkJCW10NzkxNV9tYWNfd3RibF9sbWFjX3JlYWQoZGV2LCBpZHgsIDIxICsgaSk7DQorCQkJ dHhfdGltZVtpXSA9IG1zdGEtPmFpcnRpbWVfYWNbaV0gLSB0eF9sYXN0Ow0KKwkJCXJ4X3RpbWVb aV0gPSBtc3RhLT5haXJ0aW1lX2FjW2kgKyBJRUVFODAyMTFfTlVNX0FDU10gLQ0KKwkJCQkgICAg IHJ4X2xhc3Q7DQorDQorCQkJaWYgKCh0eF9sYXN0IHwgcnhfbGFzdCkgJiBCSVQoMzApKQ0KKwkJ CQljbGVhciA9IHRydWU7DQorCQl9DQorDQorCQlpZiAoY2xlYXIpIHsNCisJCQltdDc5MTVfbWFj X3d0YmxfdXBkYXRlKGRldiwgaWR4LA0KKwkJCQkJICAgICAgIE1UX1dUQkxfVVBEQVRFX0FETV9D T1VOVF9DTEVBUik7DQorCQkJbWVtc2V0KG1zdGEtPmFpcnRpbWVfYWMsIDAsIHNpemVvZihtc3Rh LT5haXJ0aW1lX2FjKSk7DQorCQl9DQorDQorCQlpZiAoIW1zdGEtPndjaWQuc3RhKQ0KKwkJCWNv bnRpbnVlOw0KKw0KKwkJc3RhID0gY29udGFpbmVyX29mKCh2b2lkICopbXN0YSwgc3RydWN0IGll ZWU4MDIxMV9zdGEsDQorCQkJCSAgIGRydl9wcml2KTsNCisJCWZvciAoaSA9IDA7IGkgPCBJRUVF ODAyMTFfTlVNX0FDUzsgaSsrKSB7DQorCQkJdTMyIHR4X2N1ciA9IHR4X3RpbWVbaV07DQorCQkJ dTMyIHJ4X2N1ciA9IHJ4X3RpbWVbaHdfcXVldWVfbWFwW2ldXTsNCisJCQl1OCB0aWQgPSBhY190 b190aWRbaV07DQorDQorCQkJaWYgKCF0eF9jdXIgJiYgIXJ4X2N1cikNCisJCQkJY29udGludWU7 DQorDQorCQkJaWVlZTgwMjExX3N0YV9yZWdpc3Rlcl9haXJ0aW1lKHN0YSwgdGlkLCB0eF9jdXIs DQorCQkJCQkJICAgICAgIHJ4X2N1cik7DQorCQl9DQorCX0NCisNCisJcmN1X3JlYWRfdW5sb2Nr KCk7DQorfQ0KKw0KK2ludCBtdDc5MTVfbWFjX2ZpbGxfcngoc3RydWN0IG10NzkxNV9kZXYgKmRl diwgc3RydWN0IHNrX2J1ZmYgKnNrYikNCit7DQorCXN0cnVjdCBtdDc2X3J4X3N0YXR1cyAqc3Rh dHVzID0gKHN0cnVjdCBtdDc2X3J4X3N0YXR1cyAqKXNrYi0+Y2I7DQorCXN0cnVjdCBtdDc2X3Bo eSAqbXBoeSA9ICZkZXYtPm10NzYucGh5Ow0KKwlzdHJ1Y3QgbXQ3OTE1X3BoeSAqcGh5ID0gJmRl di0+cGh5Ow0KKwlzdHJ1Y3QgaWVlZTgwMjExX3N1cHBvcnRlZF9iYW5kICpzYmFuZDsNCisJc3Ry dWN0IGllZWU4MDIxMV9oZHIgKmhkcjsNCisJc3RydWN0IG10NzkxNV9yeHYgcnh2ID0ge307DQor CV9fbGUzMiAqcnhkID0gKF9fbGUzMiAqKXNrYi0+ZGF0YTsNCisJdTMyIHJ4ZDEgPSBsZTMyX3Rv X2NwdShyeGRbMV0pOw0KKwl1MzIgcnhkMiA9IGxlMzJfdG9fY3B1KHJ4ZFsyXSk7DQorCXUzMiBy eGQzID0gbGUzMl90b19jcHUocnhkWzNdKTsNCisJYm9vbCB1bmljYXN0LCBpbnNlcnRfY2NtcF9o ZHIgPSBmYWxzZTsNCisJdTggcmVtb3ZlX3BhZDsNCisJaW50IGksIGlkeDsNCisNCisJbWVtc2V0 KHN0YXR1cywgMCwgc2l6ZW9mKCpzdGF0dXMpKTsNCisNCisJaWYgKHJ4ZDEgJiBNVF9SWEQxX05P Uk1BTF9CQU5EX0lEWCkgew0KKwkJbXBoeSA9IGRldi0+bXQ3Ni5waHkyOw0KKwkJaWYgKCFtcGh5 KQ0KKwkJCXJldHVybiAtRUlOVkFMOw0KKw0KKwkJcGh5ID0gbXBoeS0+cHJpdjsNCisJCXN0YXR1 cy0+ZXh0X3BoeSA9IHRydWU7DQorCX0NCisNCisJaWYgKCF0ZXN0X2JpdChNVDc2X1NUQVRFX1JV Tk5JTkcsICZtcGh5LT5zdGF0ZSkpDQorCQlyZXR1cm4gLUVJTlZBTDsNCisNCisJdW5pY2FzdCA9 IEZJRUxEX0dFVChNVF9SWEQzX05PUk1BTF9BRERSX1RZUEUsIHJ4ZDMpID09IE1UX1JYRDNfTk9S TUFMX1UyTTsNCisJaWR4ID0gRklFTERfR0VUKE1UX1JYRDFfTk9STUFMX1dMQU5fSURYLCByeGQx KTsNCisJc3RhdHVzLT53Y2lkID0gbXQ3OTE1X3J4X2dldF93Y2lkKGRldiwgaWR4LCB1bmljYXN0 KTsNCisNCisJaWYgKHN0YXR1cy0+d2NpZCkgew0KKwkJc3RydWN0IG10NzkxNV9zdGEgKm1zdGE7 DQorDQorCQltc3RhID0gY29udGFpbmVyX29mKHN0YXR1cy0+d2NpZCwgc3RydWN0IG10NzkxNV9z dGEsIHdjaWQpOw0KKwkJc3Bpbl9sb2NrX2JoKCZkZXYtPnN0YV9wb2xsX2xvY2spOw0KKwkJaWYg KGxpc3RfZW1wdHkoJm1zdGEtPnBvbGxfbGlzdCkpDQorCQkJbGlzdF9hZGRfdGFpbCgmbXN0YS0+ cG9sbF9saXN0LCAmZGV2LT5zdGFfcG9sbF9saXN0KTsNCisJCXNwaW5fdW5sb2NrX2JoKCZkZXYt PnN0YV9wb2xsX2xvY2spOw0KKwl9DQorDQorCXN0YXR1cy0+ZnJlcSA9IG1waHktPmNoYW5kZWYu Y2hhbi0+Y2VudGVyX2ZyZXE7DQorCXN0YXR1cy0+YmFuZCA9IG1waHktPmNoYW5kZWYuY2hhbi0+ YmFuZDsNCisJaWYgKHN0YXR1cy0+YmFuZCA9PSBOTDgwMjExX0JBTkRfNUdIWikNCisJCXNiYW5k ID0gJm1waHktPnNiYW5kXzVnLnNiYW5kOw0KKwllbHNlDQorCQlzYmFuZCA9ICZtcGh5LT5zYmFu ZF8yZy5zYmFuZDsNCisNCisJaWYgKCFzYmFuZC0+Y2hhbm5lbHMpDQorCQlyZXR1cm4gLUVJTlZB TDsNCisNCisJaWYgKHJ4ZDEgJiBNVF9SWEQxX05PUk1BTF9GQ1NfRVJSKQ0KKwkJc3RhdHVzLT5m bGFnIHw9IFJYX0ZMQUdfRkFJTEVEX0ZDU19DUkM7DQorDQorCWlmIChyeGQxICYgTVRfUlhEMV9O T1JNQUxfVEtJUF9NSUNfRVJSKQ0KKwkJc3RhdHVzLT5mbGFnIHw9IFJYX0ZMQUdfTU1JQ19FUlJP UjsNCisNCisJaWYgKEZJRUxEX0dFVChNVF9SWEQxX05PUk1BTF9TRUNfTU9ERSwgcnhkMSkgIT0g MCAmJg0KKwkgICAgIShyeGQxICYgKE1UX1JYRDFfTk9STUFMX0NMTSB8IE1UX1JYRDFfTk9STUFM X0NNKSkpIHsNCisJCXN0YXR1cy0+ZmxhZyB8PSBSWF9GTEFHX0RFQ1JZUFRFRDsNCisJCXN0YXR1 cy0+ZmxhZyB8PSBSWF9GTEFHX0lWX1NUUklQUEVEOw0KKwkJc3RhdHVzLT5mbGFnIHw9IFJYX0ZM QUdfTU1JQ19TVFJJUFBFRCB8IFJYX0ZMQUdfTUlDX1NUUklQUEVEOw0KKwl9DQorDQorCWlmICgh KHJ4ZDIgJiBNVF9SWEQyX05PUk1BTF9OT05fQU1QRFUpKSB7DQorCQlzdGF0dXMtPmZsYWcgfD0g UlhfRkxBR19BTVBEVV9ERVRBSUxTOw0KKw0KKwkJLyogYWxsIHN1YmZyYW1lcyBvZiBhbiBBLU1Q RFUgaGF2ZSB0aGUgc2FtZSB0aW1lc3RhbXAgKi8NCisJCWlmIChwaHktPnJ4X2FtcGR1X3RzICE9 IHJ4ZFsxNF0pIHsNCisJCQlpZiAoISsrcGh5LT5hbXBkdV9yZWYpDQorCQkJCXBoeS0+YW1wZHVf cmVmKys7DQorCQl9DQorCQlwaHktPnJ4X2FtcGR1X3RzID0gcnhkWzE0XTsNCisNCisJCXN0YXR1 cy0+YW1wZHVfcmVmID0gcGh5LT5hbXBkdV9yZWY7DQorCX0NCisNCisJcmVtb3ZlX3BhZCA9IEZJ RUxEX0dFVChNVF9SWEQyX05PUk1BTF9IRFJfT0ZGU0VULCByeGQyKTsNCisNCisJaWYgKHJ4ZDIg JiBNVF9SWEQyX05PUk1BTF9NQVhfTEVOX0VSUk9SKQ0KKwkJcmV0dXJuIC1FSU5WQUw7DQorDQor CXJ4ZCArPSA2Ow0KKwlpZiAocnhkMSAmIE1UX1JYRDFfTk9STUFMX0dST1VQXzQpIHsNCisJCXJ4 ZCArPSA0Ow0KKwkJaWYgKCh1OCAqKXJ4ZCAtIHNrYi0+ZGF0YSA+PSBza2ItPmxlbikNCisJCQly ZXR1cm4gLUVJTlZBTDsNCisJfQ0KKw0KKwlpZiAocnhkMSAmIE1UX1JYRDFfTk9STUFMX0dST1VQ XzEpIHsNCisJCXU4ICpkYXRhID0gKHU4ICopcnhkOw0KKw0KKwkJaWYgKHN0YXR1cy0+ZmxhZyAm IFJYX0ZMQUdfREVDUllQVEVEKSB7DQorCQkJc3RhdHVzLT5pdlswXSA9IGRhdGFbNV07DQorCQkJ c3RhdHVzLT5pdlsxXSA9IGRhdGFbNF07DQorCQkJc3RhdHVzLT5pdlsyXSA9IGRhdGFbM107DQor CQkJc3RhdHVzLT5pdlszXSA9IGRhdGFbMl07DQorCQkJc3RhdHVzLT5pdls0XSA9IGRhdGFbMV07 DQorCQkJc3RhdHVzLT5pdls1XSA9IGRhdGFbMF07DQorDQorCQkJaW5zZXJ0X2NjbXBfaGRyID0g RklFTERfR0VUKE1UX1JYRDJfTk9STUFMX0ZSQUcsIHJ4ZDIpOw0KKwkJfQ0KKwkJcnhkICs9IDQ7 DQorCQlpZiAoKHU4ICopcnhkIC0gc2tiLT5kYXRhID49IHNrYi0+bGVuKQ0KKwkJCXJldHVybiAt RUlOVkFMOw0KKwl9DQorDQorCWlmIChyeGQxICYgTVRfUlhEMV9OT1JNQUxfR1JPVVBfMikgew0K KwkJcnhkICs9IDI7DQorCQlpZiAoKHU4ICopcnhkIC0gc2tiLT5kYXRhID49IHNrYi0+bGVuKQ0K KwkJCXJldHVybiAtRUlOVkFMOw0KKwl9DQorDQorCS8qIFJYRCBHcm91cCAzIC0gUC1SWFYgKi8N CisJaWYgKHJ4ZDEgJiBNVF9SWEQxX05PUk1BTF9HUk9VUF8zKSB7DQorCQltZW1jcHkocnh2LnYs IHJ4ZCwgc2l6ZW9mKHJ4di52KSk7DQorDQorCQlyeGQgKz0gMjsNCisJCWlmICgodTggKilyeGQg LSBza2ItPmRhdGEgPj0gc2tiLT5sZW4pDQorCQkJcmV0dXJuIC1FSU5WQUw7DQorDQorCQlpZiAo cnh2LnZbMF0gJiBNVF9QUlhWX0hUX0FEX0NPREUpDQorCQkJc3RhdHVzLT5lbmNfZmxhZ3MgfD0g UlhfRU5DX0ZMQUdfTERQQzsNCisNCisJCXN0YXR1cy0+Y2hhaW5zID0gbXBoeS0+YW50ZW5uYV9t YXNrOw0KKwkJc3RhdHVzLT5jaGFpbl9zaWduYWxbMF0gPSB0b19yc3NpKE1UX1BSWFZfUkNQSTAs IHJ4di52WzFdKTsNCisJCXN0YXR1cy0+Y2hhaW5fc2lnbmFsWzFdID0gdG9fcnNzaShNVF9QUlhW X1JDUEkxLCByeHYudlsxXSk7DQorCQlzdGF0dXMtPmNoYWluX3NpZ25hbFsyXSA9IHRvX3Jzc2ko TVRfUFJYVl9SQ1BJMiwgcnh2LnZbMV0pOw0KKwkJc3RhdHVzLT5jaGFpbl9zaWduYWxbM10gPSB0 b19yc3NpKE1UX1BSWFZfUkNQSTMsIHJ4di52WzFdKTsNCisJCXN0YXR1cy0+c2lnbmFsID0gc3Rh dHVzLT5jaGFpbl9zaWduYWxbMF07DQorDQorCQlmb3IgKGkgPSAxOyBpIDwgaHdlaWdodDgobXBo eS0+YW50ZW5uYV9tYXNrKTsgaSsrKSB7DQorCQkJaWYgKCEoc3RhdHVzLT5jaGFpbnMgJiBCSVQo aSkpKQ0KKwkJCQljb250aW51ZTsNCisNCisJCQlzdGF0dXMtPnNpZ25hbCA9IG1heChzdGF0dXMt PnNpZ25hbCwNCisJCQkJCSAgICAgc3RhdHVzLT5jaGFpbl9zaWduYWxbaV0pOw0KKwkJfQ0KKw0K KwkJLyogUlhEIEdyb3VwIDUgLSBDLVJYViAqLw0KKwkJaWYgKHJ4ZDEgJiBNVF9SWEQxX05PUk1B TF9HUk9VUF81KSB7DQorCQkJdTggc3RiYyA9IEZJRUxEX0dFVChNVF9DUlhWX0hUX1NUQkMsIHJ4 di52WzJdKTsNCisJCQl1OCBnaSA9IEZJRUxEX0dFVChNVF9DUlhWX0hUX1NIT1JUX0dJLCByeHYu dlsyXSk7DQorCQkJYm9vbCBjY2sgPSBmYWxzZTsNCisNCisJCQlyeGQgKz0gMTg7DQorCQkJaWYg KCh1OCAqKXJ4ZCAtIHNrYi0+ZGF0YSA+PSBza2ItPmxlbikNCisJCQkJcmV0dXJuIC1FSU5WQUw7 DQorDQorCQkJaWR4ID0gaSA9IEZJRUxEX0dFVChNVF9QUlhWX1RYX1JBVEUsIHJ4di52WzBdKTsN CisJCQlyeHYucGh5ID0gRklFTERfR0VUKE1UX0NSWFZfVFhfTU9ERSwgcnh2LnZbMl0pOw0KKw0K KwkJCXN3aXRjaCAocnh2LnBoeSkgew0KKwkJCWNhc2UgTVRfUEhZX1RZUEVfQ0NLOg0KKwkJCQlj Y2sgPSB0cnVlOw0KKwkJCQkvKiBmYWxsIHRocm91Z2ggKi8NCisJCQljYXNlIE1UX1BIWV9UWVBF X09GRE06DQorCQkJCWkgPSBtdDc2X2dldF9yYXRlKCZkZXYtPm10NzYsIHNiYW5kLCBpLCBjY2sp Ow0KKwkJCQlicmVhazsNCisJCQljYXNlIE1UX1BIWV9UWVBFX0hUX0dGOg0KKwkJCWNhc2UgTVRf UEhZX1RZUEVfSFQ6DQorCQkJCXN0YXR1cy0+ZW5jb2RpbmcgPSBSWF9FTkNfSFQ7DQorCQkJCWlm IChpID4gMzEpDQorCQkJCQlyZXR1cm4gLUVJTlZBTDsNCisJCQkJYnJlYWs7DQorCQkJY2FzZSBN VF9QSFlfVFlQRV9WSFQ6DQorCQkJCXN0YXR1cy0+bnNzID0NCisJCQkJCUZJRUxEX0dFVChNVF9Q UlhWX05TVFMsIHJ4di52WzBdKSArIDE7DQorCQkJCXN0YXR1cy0+ZW5jb2RpbmcgPSBSWF9FTkNf VkhUOw0KKwkJCQlpZiAoaSA+IDkpDQorCQkJCQlyZXR1cm4gLUVJTlZBTDsNCisJCQkJYnJlYWs7 DQorCQkJZGVmYXVsdDoNCisJCQkJcmV0dXJuIC1FSU5WQUw7DQorCQkJfQ0KKwkJCXN0YXR1cy0+ cmF0ZV9pZHggPSBpOw0KKw0KKwkJCXN3aXRjaCAoRklFTERfR0VUKE1UX0NSWFZfRlJBTUVfTU9E RSwgcnh2LnZbMl0pKSB7DQorCQkJY2FzZSBJRUVFODAyMTFfU1RBX1JYX0JXXzIwOg0KKwkJCQli cmVhazsNCisJCQljYXNlIElFRUU4MDIxMV9TVEFfUlhfQldfNDA6DQorCQkJCXN0YXR1cy0+Yncg PSBSQVRFX0lORk9fQldfNDA7DQorCQkJCWJyZWFrOw0KKwkJCWNhc2UgSUVFRTgwMjExX1NUQV9S WF9CV184MDoNCisJCQkJc3RhdHVzLT5idyA9IFJBVEVfSU5GT19CV184MDsNCisJCQkJYnJlYWs7 DQorCQkJY2FzZSBJRUVFODAyMTFfU1RBX1JYX0JXXzE2MDoNCisJCQkJc3RhdHVzLT5idyA9IFJB VEVfSU5GT19CV18xNjA7DQorCQkJCWJyZWFrOw0KKwkJCWRlZmF1bHQ6DQorCQkJCXJldHVybiAt RUlOVkFMOw0KKwkJCX0NCisNCisJCQlzdGF0dXMtPmVuY19mbGFncyB8PSBSWF9FTkNfRkxBR19T VEJDX01BU0sgKiBzdGJjOw0KKwkJCWlmIChnaSkNCisJCQkJc3RhdHVzLT5lbmNfZmxhZ3MgfD0g UlhfRU5DX0ZMQUdfU0hPUlRfR0k7DQorCQl9DQorCX0NCisNCisJc2tiX3B1bGwoc2tiLCAodTgg KilyeGQgLSBza2ItPmRhdGEgKyAyICogcmVtb3ZlX3BhZCk7DQorDQorCWlmIChpbnNlcnRfY2Nt cF9oZHIpIHsNCisJCXU4IGtleV9pZCA9IEZJRUxEX0dFVChNVF9SWEQxX05PUk1BTF9LRVlfSUQs IHJ4ZDEpOw0KKw0KKwkJbXQ3Nl9pbnNlcnRfY2NtcF9oZHIoc2tiLCBrZXlfaWQpOw0KKwl9DQor DQorCWhkciA9IG10NzZfc2tiX2dldF9oZHIoc2tiKTsNCisJaWYgKCFzdGF0dXMtPndjaWQgfHwg IWllZWU4MDIxMV9pc19kYXRhX3FvcyhoZHItPmZyYW1lX2NvbnRyb2wpKQ0KKwkJcmV0dXJuIDA7 DQorDQorCXN0YXR1cy0+YWdnciA9IHVuaWNhc3QgJiYNCisJCSAgICAgICAhaWVlZTgwMjExX2lz X3Fvc19udWxsZnVuYyhoZHItPmZyYW1lX2NvbnRyb2wpOw0KKwlzdGF0dXMtPnRpZCA9ICppZWVl ODAyMTFfZ2V0X3Fvc19jdGwoaGRyKSAmIElFRUU4MDIxMV9RT1NfQ1RMX1RJRF9NQVNLOw0KKwlz dGF0dXMtPnNlcW5vID0gSUVFRTgwMjExX1NFUV9UT19TTihsZTE2X3RvX2NwdShoZHItPnNlcV9j dHJsKSk7DQorDQorCXJldHVybiAwOw0KK30NCisNCit2b2lkIG10NzkxNV9tYWNfd3JpdGVfdHh3 aShzdHJ1Y3QgbXQ3OTE1X2RldiAqZGV2LCBfX2xlMzIgKnR4d2ksDQorCQkJICAgc3RydWN0IHNr X2J1ZmYgKnNrYiwgc3RydWN0IG10NzZfd2NpZCAqd2NpZCwNCisJCQkgICBzdHJ1Y3QgaWVlZTgw MjExX2tleV9jb25mICprZXksIGJvb2wgYmVhY29uKQ0KK3sNCisJc3RydWN0IGllZWU4MDIxMV90 eF9pbmZvICppbmZvID0gSUVFRTgwMjExX1NLQl9DQihza2IpOw0KKwlzdHJ1Y3QgaWVlZTgwMjEx X2hkciAqaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyICopc2tiLT5kYXRhOw0KKwlib29sIG11 bHRpY2FzdCA9IGlzX211bHRpY2FzdF9ldGhlcl9hZGRyKGhkci0+YWRkcjEpOw0KKwlzdHJ1Y3Qg aWVlZTgwMjExX3ZpZiAqdmlmID0gaW5mby0+Y29udHJvbC52aWY7DQorCXN0cnVjdCBtdDc2X3Bo eSAqbXBoeSA9ICZkZXYtPm1waHk7DQorCWJvb2wgZXh0X3BoeSA9IGluZm8tPmh3X3F1ZXVlICYg TVRfVFhfSFdfUVVFVUVfRVhUX1BIWTsNCisJdTggZmNfdHlwZSwgZmNfc3R5cGUsIHBfZm10LCBx X2lkeCwgb21hY19pZHggPSAwLCB3bW1faWR4ID0gMDsNCisJX19sZTE2IGZjID0gaGRyLT5mcmFt ZV9jb250cm9sOw0KKwl1MTYgdHhfY291bnQgPSA0LCBzZXFubyA9IDA7DQorCXUzMiB2YWw7DQor DQorCWlmICh2aWYpIHsNCisJCXN0cnVjdCBtdDc5MTVfdmlmICptdmlmID0gKHN0cnVjdCBtdDc5 MTVfdmlmICopdmlmLT5kcnZfcHJpdjsNCisNCisJCW9tYWNfaWR4ID0gbXZpZi0+b21hY19pZHg7 DQorCQl3bW1faWR4ID0gbXZpZi0+d21tX2lkeDsNCisJfQ0KKw0KKwlpZiAoZXh0X3BoeSAmJiBk ZXYtPm10NzYucGh5MikNCisJCW1waHkgPSBkZXYtPm10NzYucGh5MjsNCisNCisJZmNfdHlwZSA9 IChsZTE2X3RvX2NwdShmYykgJiBJRUVFODAyMTFfRkNUTF9GVFlQRSkgPj4gMjsNCisJZmNfc3R5 cGUgPSAobGUxNl90b19jcHUoZmMpICYgSUVFRTgwMjExX0ZDVExfU1RZUEUpID4+IDQ7DQorDQor CWlmIChpZWVlODAyMTFfaXNfZGF0YShmYykgfHwgaWVlZTgwMjExX2lzX2J1ZmZlcmFibGVfbW1w ZHUoZmMpKSB7DQorCQlxX2lkeCA9IHdtbV9pZHggKiBNVDc5MTVfTUFYX1dNTV9TRVRTICsNCisJ CQlza2JfZ2V0X3F1ZXVlX21hcHBpbmcoc2tiKTsNCisJCXBfZm10ID0gTVRfVFhfVFlQRV9DVDsN CisJfSBlbHNlIGlmIChiZWFjb24pIHsNCisJCXFfaWR4ID0gTVRfTE1BQ19CQ04wOw0KKwkJcF9m bXQgPSBNVF9UWF9UWVBFX0ZXOw0KKwl9IGVsc2Ugew0KKwkJcV9pZHggPSBNVF9MTUFDX0FMVFgw Ow0KKwkJcF9mbXQgPSBNVF9UWF9UWVBFX0NUOw0KKwl9DQorDQorCXZhbCA9IEZJRUxEX1BSRVAo TVRfVFhEMF9UWF9CWVRFUywgc2tiLT5sZW4gKyBNVF9UWERfU0laRSkgfA0KKwkgICAgICBGSUVM RF9QUkVQKE1UX1RYRDBfUEtUX0ZNVCwgcF9mbXQpIHwNCisJICAgICAgRklFTERfUFJFUChNVF9U WEQwX1FfSURYLCBxX2lkeCk7DQorCXR4d2lbMF0gPSBjcHVfdG9fbGUzMih2YWwpOw0KKw0KKwl2 YWwgPSBNVF9UWEQxX0xPTkdfRk9STUFUIHwNCisJICAgICAgRklFTERfUFJFUChNVF9UWEQxX1dM QU5fSURYLCB3Y2lkLT5pZHgpIHwNCisJICAgICAgRklFTERfUFJFUChNVF9UWEQxX0hEUl9GT1JN QVQsIE1UX0hEUl9GT1JNQVRfODAyXzExKSB8DQorCSAgICAgIEZJRUxEX1BSRVAoTVRfVFhEMV9I RFJfSU5GTywNCisJCQkgaWVlZTgwMjExX2dldF9oZHJsZW5fZnJvbV9za2Ioc2tiKSAvIDIpIHwN CisJICAgICAgRklFTERfUFJFUChNVF9UWEQxX1RJRCwNCisJCQkgc2tiLT5wcmlvcml0eSAmIElF RUU4MDIxMV9RT1NfQ1RMX1RJRF9NQVNLKSB8DQorCSAgICAgIEZJRUxEX1BSRVAoTVRfVFhEMV9P V05fTUFDLCBvbWFjX2lkeCk7DQorCWlmIChleHRfcGh5ICYmIHFfaWR4ID49IE1UX0xNQUNfQUxU WDAgJiYgcV9pZHggPD0gTVRfTE1BQ19CQ04wKQ0KKwkJdmFsIHw9IGNwdV90b19sZTMyKE1UX1RY RDFfVEdJRCk7DQorDQorCXR4d2lbMV0gPSBjcHVfdG9fbGUzMih2YWwpOw0KKw0KKwl2YWwgPSBG SUVMRF9QUkVQKE1UX1RYRDJfRlJBTUVfVFlQRSwgZmNfdHlwZSkgfA0KKwkgICAgICBGSUVMRF9Q UkVQKE1UX1RYRDJfU1VCX1RZUEUsIGZjX3N0eXBlKSB8DQorCSAgICAgIEZJRUxEX1BSRVAoTVRf VFhEMl9NVUxUSUNBU1QsIG11bHRpY2FzdCk7DQorCWlmIChrZXkpIHsNCisJCWlmIChtdWx0aWNh c3QgJiYgaWVlZTgwMjExX2lzX3JvYnVzdF9tZ210X2ZyYW1lKHNrYikgJiYNCisJCSAgICBrZXkt PmNpcGhlciA9PSBXTEFOX0NJUEhFUl9TVUlURV9BRVNfQ01BQykgew0KKwkJCXZhbCB8PSBNVF9U WEQyX0JJUDsNCisJCQl0eHdpWzNdID0gMDsNCisJCX0gZWxzZSB7DQorCQkJdHh3aVszXSA9IGNw dV90b19sZTMyKE1UX1RYRDNfUFJPVEVDVF9GUkFNRSk7DQorCQl9DQorCX0gZWxzZSB7DQorCQl0 eHdpWzNdID0gMDsNCisJfQ0KKwl0eHdpWzJdID0gY3B1X3RvX2xlMzIodmFsKTsNCisNCisJdHh3 aVs0XSA9IDA7DQorCXR4d2lbNV0gPSAwOw0KKwl0eHdpWzZdID0gMDsNCisNCisJaWYgKCFpZWVl ODAyMTFfaXNfZGF0YShmYykgfHwgbXVsdGljYXN0KSB7DQorCQl1MTYgcmF0ZTsNCisNCisJCS8q IGhhcmR3YXJlIHdvbid0IGFkZCBIVEMgZm9yIG1nbXQvY3RybCBmcmFtZSAqLw0KKwkJdHh3aVsy XSB8PSBjcHVfdG9fbGUzMihNVF9UWEQyX0ZJWF9SQVRFIHwgTVRfVFhEMl9IVENfVkxEKTsNCisN CisJCWlmIChtcGh5LT5jaGFuZGVmLmNoYW4tPmJhbmQgPT0gTkw4MDIxMV9CQU5EXzVHSFopDQor CQkJcmF0ZSA9IE1UNzkxNV81R19SQVRFX0RFRkFVTFQ7DQorCQllbHNlDQorCQkJcmF0ZSA9IE1U NzkxNV8yR19SQVRFX0RFRkFVTFQ7DQorDQorCQl2YWwgPSBNVF9UWEQ2X0ZJWEVEX0JXIHwNCisJ CSAgICAgIEZJRUxEX1BSRVAoTVRfVFhENl9UWF9SQVRFLCByYXRlKTsNCisJCXR4d2lbNl0gfD0g Y3B1X3RvX2xlMzIodmFsKTsNCisJCXR4d2lbM10gfD0gY3B1X3RvX2xlMzIoTVRfVFhEM19CQV9E SVNBQkxFKTsNCisJfQ0KKw0KKwlpZiAoIWllZWU4MDIxMV9pc19iZWFjb24oZmMpKQ0KKwkJdHh3 aVszXSB8PSBjcHVfdG9fbGUzMihNVF9UWEQzX1NXX1BPV0VSX01HTVQpOw0KKwllbHNlDQorCQl0 eF9jb3VudCA9IDB4MWY7DQorDQorCWlmIChpbmZvLT5mbGFncyAmIElFRUU4MDIxMV9UWF9DVExf Tk9fQUNLKQ0KKwkJdHh3aVszXSB8PSBjcHVfdG9fbGUzMihNVF9UWEQzX05PX0FDSyk7DQorDQor CXZhbCA9IEZJRUxEX1BSRVAoTVRfVFhEN19UWVBFLCBmY190eXBlKSB8DQorCSAgICAgIEZJRUxE X1BSRVAoTVRfVFhEN19TVUJfVFlQRSwgZmNfc3R5cGUpOw0KKwl0eHdpWzddID0gY3B1X3RvX2xl MzIodmFsKTsNCisNCisJdmFsID0gRklFTERfUFJFUChNVF9UWEQzX1JFTV9UWF9DT1VOVCwgdHhf Y291bnQpOw0KKwlpZiAoaWVlZTgwMjExX2lzX2RhdGFfcW9zKGZjKSkgew0KKwkJc2Vxbm8gPSBJ RUVFODAyMTFfU0VRX1RPX1NOKGxlMTZfdG9fY3B1KGhkci0+c2VxX2N0cmwpKTsNCisJCXZhbCB8 PSBNVF9UWEQzX1NOX1ZBTElEOw0KKwl9IGVsc2UgaWYgKGllZWU4MDIxMV9pc19iYWNrX3JlcShm YykpIHsNCisJCXN0cnVjdCBpZWVlODAyMTFfYmFyICpiYXI7DQorDQorCQliYXIgPSAoc3RydWN0 IGllZWU4MDIxMV9iYXIgKilza2ItPmRhdGE7DQorCQlzZXFubyA9IElFRUU4MDIxMV9TRVFfVE9f U04obGUxNl90b19jcHUoYmFyLT5zdGFydF9zZXFfbnVtKSk7DQorCQl2YWwgfD0gTVRfVFhEM19T Tl9WQUxJRDsNCisJfQ0KKwl2YWwgfD0gRklFTERfUFJFUChNVF9UWEQzX1NFUSwgc2Vxbm8pOw0K Kwl0eHdpWzNdIHw9IGNwdV90b19sZTMyKHZhbCk7DQorfQ0KKw0KK2ludCBtdDc5MTVfdHhfcHJl cGFyZV9za2Ioc3RydWN0IG10NzZfZGV2ICptZGV2LCB2b2lkICp0eHdpX3B0ciwNCisJCQkgIGVu dW0gbXQ3Nl90eHFfaWQgcWlkLCBzdHJ1Y3QgbXQ3Nl93Y2lkICp3Y2lkLA0KKwkJCSAgc3RydWN0 IGllZWU4MDIxMV9zdGEgKnN0YSwNCisJCQkgIHN0cnVjdCBtdDc2X3R4X2luZm8gKnR4X2luZm8p DQorew0KKwlzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRy ICopdHhfaW5mby0+c2tiLT5kYXRhOw0KKwlzdHJ1Y3QgbXQ3OTE1X2RldiAqZGV2ID0gY29udGFp bmVyX29mKG1kZXYsIHN0cnVjdCBtdDc5MTVfZGV2LCBtdDc2KTsNCisJc3RydWN0IGllZWU4MDIx MV90eF9pbmZvICppbmZvID0gSUVFRTgwMjExX1NLQl9DQih0eF9pbmZvLT5za2IpOw0KKwlzdHJ1 Y3QgaWVlZTgwMjExX2tleV9jb25mICprZXkgPSBpbmZvLT5jb250cm9sLmh3X2tleTsNCisJc3Ry dWN0IGllZWU4MDIxMV92aWYgKnZpZiA9IGluZm8tPmNvbnRyb2wudmlmOw0KKwlzdHJ1Y3QgbXQ3 Nl90eF9jYiAqY2IgPSBtdDc2X3R4X3NrYl9jYih0eF9pbmZvLT5za2IpOw0KKwlzdHJ1Y3QgbXQ3 Nl90eHdpX2NhY2hlICp0Ow0KKwlzdHJ1Y3QgbXQ3OTE1X3R4cCAqdHhwOw0KKwlpbnQgaWQsIGks IG5idWYgPSB0eF9pbmZvLT5uYnVmIC0gMTsNCisJdTggKnR4d2kgPSAodTggKil0eHdpX3B0cjsN CisNCisJaWYgKCF3Y2lkKQ0KKwkJd2NpZCA9ICZkZXYtPm10NzYuZ2xvYmFsX3djaWQ7DQorDQor CWNiLT53Y2lkID0gd2NpZC0+aWR4Ow0KKw0KKwltdDc5MTVfbWFjX3dyaXRlX3R4d2koZGV2LCB0 eHdpX3B0ciwgdHhfaW5mby0+c2tiLCB3Y2lkLCBrZXksDQorCQkJICAgICAgZmFsc2UpOw0KKw0K Kwl0eHAgPSAoc3RydWN0IG10NzkxNV90eHAgKikodHh3aSArIE1UX1RYRF9TSVpFKTsNCisJZm9y IChpID0gMDsgaSA8IG5idWY7IGkrKykgew0KKwkJdHhwLT5idWZbaV0gPSBjcHVfdG9fbGUzMih0 eF9pbmZvLT5idWZbaSArIDFdLmFkZHIpOw0KKwkJdHhwLT5sZW5baV0gPSBjcHVfdG9fbGUxNih0 eF9pbmZvLT5idWZbaSArIDFdLmxlbik7DQorCX0NCisJdHhwLT5uYnVmID0gbmJ1ZjsNCisNCisJ LyogcGFzcyBwYXJ0aWFsIHNrYiBoZWFkZXIgdG8gZncgKi8NCisJdHhfaW5mby0+YnVmWzFdLmxl biA9IE1UX0NUX1BBUlNFX0xFTjsNCisJdHhfaW5mby0+bmJ1ZiA9IE1UX0NUX0RNQV9CVUZfTlVN Ow0KKw0KKwl0eHAtPmZsYWdzID0gY3B1X3RvX2xlMTYoTVRfQ1RfSU5GT19BUFBMWV9UWEQpOw0K Kw0KKwlpZiAoIWtleSkNCisJCXR4cC0+ZmxhZ3MgfD0gY3B1X3RvX2xlMTYoTVRfQ1RfSU5GT19O T05FX0NJUEhFUl9GUkFNRSk7DQorDQorCWlmIChpZWVlODAyMTFfaXNfbWdtdChoZHItPmZyYW1l X2NvbnRyb2wpKQ0KKwkJdHhwLT5mbGFncyB8PSBjcHVfdG9fbGUxNihNVF9DVF9JTkZPX01HTVRf RlJBTUUpOw0KKw0KKwlpZiAodmlmKSB7DQorCQlzdHJ1Y3QgbXQ3OTE1X3ZpZiAqbXZpZiA9IChz dHJ1Y3QgbXQ3OTE1X3ZpZiAqKXZpZi0+ZHJ2X3ByaXY7DQorDQorCQl0eHAtPmJzc19pZHggPSBt dmlmLT5pZHg7DQorCX0NCisNCisJdCA9IChzdHJ1Y3QgbXQ3Nl90eHdpX2NhY2hlICopKHR4d2kg KyBtZGV2LT5kcnYtPnR4d2lfc2l6ZSk7DQorCXQtPnNrYiA9IHR4X2luZm8tPnNrYjsNCisNCisJ c3Bpbl9sb2NrX2JoKCZkZXYtPnRva2VuX2xvY2spOw0KKwlpZCA9IGlkcl9hbGxvYygmZGV2LT50 b2tlbiwgdCwgMCwgTVQ3OTE1X1RPS0VOX1NJWkUsIEdGUF9BVE9NSUMpOw0KKwlzcGluX3VubG9j a19iaCgmZGV2LT50b2tlbl9sb2NrKTsNCisJaWYgKGlkIDwgMCkNCisJCXJldHVybiBpZDsNCisN CisJdHhwLT50b2tlbiA9IGNwdV90b19sZTE2KGlkKTsNCisJdHhwLT5yZXB0X3dkc193Y2lkID0g MHhmZjsNCisJdHhfaW5mby0+c2tiID0gRE1BX0RVTU1ZX0RBVEE7DQorDQorCXJldHVybiAwOw0K K30NCisNCitzdGF0aWMgaW5saW5lIGJvb2wNCittdDc5MTVfdHhfY2hlY2tfYWdncl90aWQoc3Ry dWN0IG10NzkxNV9zdGEgKm1zdGEsIHU4IHRpZCkNCit7DQorCWJvb2wgcmV0ID0gZmFsc2U7DQor DQorCXNwaW5fbG9ja19iaCgmbXN0YS0+YW1wZHVfbG9jayk7DQorCWlmIChtc3RhLT5hbXBkdV9z dGF0ZVt0aWRdID09IE1UNzkxNV9BR0dSX1NUT1ApDQorCQlyZXQgPSB0cnVlOw0KKwlzcGluX3Vu bG9ja19iaCgmbXN0YS0+YW1wZHVfbG9jayk7DQorDQorCXJldHVybiByZXQ7DQorfQ0KKw0KK3N0 YXRpYyB2b2lkDQorbXQ3OTE1X3R4X2NoZWNrX2FnZ3Ioc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0 YSwgc3RydWN0IHNrX2J1ZmYgKnNrYikNCit7DQorCXN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHIg PSAoc3RydWN0IGllZWU4MDIxMV9oZHIgKilza2ItPmRhdGE7DQorCXN0cnVjdCBtdDc5MTVfc3Rh ICptc3RhOw0KKwl1MTYgdGlkOw0KKw0KKwlpZiAoIXN0YS0+aHRfY2FwLmh0X3N1cHBvcnRlZCkN CisJCXJldHVybjsNCisNCisJaWYgKHNrYl9nZXRfcXVldWVfbWFwcGluZyhza2IpID09IElFRUU4 MDIxMV9BQ19WTykNCisJCXJldHVybjsNCisNCisJaWYgKHVubGlrZWx5KCFpZWVlODAyMTFfaXNf ZGF0YV9xb3MoaGRyLT5mcmFtZV9jb250cm9sKSkpDQorCQlyZXR1cm47DQorDQorCWlmICh1bmxp a2VseShza2ItPnByb3RvY29sID09IGNwdV90b19iZTE2KEVUSF9QX1BBRSkpKQ0KKwkJcmV0dXJu Ow0KKw0KKwltc3RhID0gKHN0cnVjdCBtdDc5MTVfc3RhICopc3RhLT5kcnZfcHJpdjsNCisJdGlk ID0gaWVlZTgwMjExX2dldF90aWQoaGRyKTsNCisNCisJaWYgKG10NzkxNV90eF9jaGVja19hZ2dy X3RpZChtc3RhLCB0aWQpKSB7DQorCQlpZWVlODAyMTFfc3RhcnRfdHhfYmFfc2Vzc2lvbihzdGEs IHRpZCwgMCk7DQorCQltdDc5MTVfc2V0X2FnZ3Jfc3RhdGUobXN0YSwgdGlkLCBNVDc5MTVfQUdH Ul9QUk9HUkVTUyk7DQorCX0NCit9DQorDQorc3RhdGljIGlubGluZSB2b2lkDQorbXQ3OTE1X3R4 X3N0YXR1cyhzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhLCBzdHJ1Y3QgaWVlZTgwMjExX2h3ICpo dywNCisJCSBzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKmluZm8sIHN0cnVjdCBza19idWZmICpz a2IpDQorew0KKwlzdHJ1Y3QgaWVlZTgwMjExX3R4X3N0YXR1cyBzdGF0dXMgPSB7DQorCQkuc3Rh ID0gc3RhLA0KKwkJLmluZm8gPSBpbmZvLA0KKwl9Ow0KKw0KKwlpZiAoc2tiKQ0KKwkJc3RhdHVz LnNrYiA9IHNrYjsNCisNCisJaWYgKHN0YSkgew0KKwkJc3RydWN0IG10NzkxNV9zdGEgKm1zdGE7 DQorDQorCQltc3RhID0gKHN0cnVjdCBtdDc5MTVfc3RhICopc3RhLT5kcnZfcHJpdjsNCisJCXN0 YXR1cy5yYXRlID0gJm1zdGEtPnN0YXRzLnR4X3JhdGU7DQorCX0NCisNCisJLyogdXNlIHN0YXR1 c19leHQgdG8gcmVwb3J0IEhFIHJhdGUgKi8NCisJaWVlZTgwMjExX3R4X3N0YXR1c19leHQoaHcs ICZzdGF0dXMpOw0KK30NCisNCitzdGF0aWMgdm9pZA0KK210NzkxNV90eF9jb21wbGV0ZV9zdGF0 dXMoc3RydWN0IG10NzZfZGV2ICptZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLA0KKwkJCSAgc3Ry dWN0IGllZWU4MDIxMV9zdGEgKnN0YSwgdTggc3RhdCkNCit7DQorCXN0cnVjdCBpZWVlODAyMTFf dHhfaW5mbyAqaW5mbyA9IElFRUU4MDIxMV9TS0JfQ0Ioc2tiKTsNCisJc3RydWN0IGllZWU4MDIx MV9odyAqaHc7DQorDQorCWh3ID0gbXQ3Nl90eF9zdGF0dXNfZ2V0X2h3KG1kZXYsIHNrYik7DQor DQorCWlmIChpbmZvLT5mbGFncyAmIElFRUU4MDIxMV9UWF9DVExfQU1QRFUpDQorCQlpbmZvLT5m bGFncyB8PSBJRUVFODAyMTFfVFhfU1RBVF9BTVBEVTsNCisJZWxzZSBpZiAoc3RhKQ0KKwkJbXQ3 OTE1X3R4X2NoZWNrX2FnZ3Ioc3RhLCBza2IpOw0KKw0KKwlpZiAoc3RhdCkNCisJCWllZWU4MDIx MV90eF9pbmZvX2NsZWFyX3N0YXR1cyhpbmZvKTsNCisNCisJaWYgKCEoaW5mby0+ZmxhZ3MgJiBJ RUVFODAyMTFfVFhfQ1RMX05PX0FDSykpDQorCQlpbmZvLT5mbGFncyB8PSBJRUVFODAyMTFfVFhf U1RBVF9BQ0s7DQorDQorCWluZm8tPnN0YXR1cy50eF90aW1lID0gMDsNCisNCisJaWYgKGluZm8t PmZsYWdzICYgSUVFRTgwMjExX1RYX0NUTF9SRVFfVFhfU1RBVFVTKSB7DQorCQltdDc5MTVfdHhf c3RhdHVzKHN0YSwgaHcsIGluZm8sIHNrYik7DQorCQlyZXR1cm47DQorCX0NCisNCisJaWYgKHN0 YSB8fCAhKGluZm8tPmZsYWdzICYgSUVFRTgwMjExX1RYX0NUTF9OT19BQ0spKQ0KKwkJbXQ3OTE1 X3R4X3N0YXR1cyhzdGEsIGh3LCBpbmZvLCBOVUxMKTsNCisNCisJZGV2X2tmcmVlX3NrYihza2Ip Ow0KK30NCisNCit2b2lkIG10NzkxNV90eHBfc2tiX3VubWFwKHN0cnVjdCBtdDc2X2RldiAqZGV2 LA0KKwkJCSAgc3RydWN0IG10NzZfdHh3aV9jYWNoZSAqdCkNCit7DQorCXN0cnVjdCBtdDc5MTVf dHhwICp0eHA7DQorCWludCBpOw0KKw0KKwl0eHAgPSBtdDc5MTVfdHh3aV90b190eHAoZGV2LCB0 KTsNCisJZm9yIChpID0gMTsgaSA8IHR4cC0+bmJ1ZjsgaSsrKQ0KKwkJZG1hX3VubWFwX3Npbmds ZShkZXYtPmRldiwgbGUzMl90b19jcHUodHhwLT5idWZbaV0pLA0KKwkJCQkgbGUxNl90b19jcHUo dHhwLT5sZW5baV0pLCBETUFfVE9fREVWSUNFKTsNCit9DQorDQordm9pZCBtdDc5MTVfbWFjX3R4 X2ZyZWUoc3RydWN0IG10NzkxNV9kZXYgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYikNCit7DQor CXN0cnVjdCBtdDc5MTVfdHhfZnJlZSAqZnJlZSA9IChzdHJ1Y3QgbXQ3OTE1X3R4X2ZyZWUgKilz a2ItPmRhdGE7DQorCXN0cnVjdCBtdDc2X2RldiAqbWRldiA9ICZkZXYtPm10NzY7DQorCXN0cnVj dCBtdDc2X3R4d2lfY2FjaGUgKnR4d2k7DQorCXN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEgPSBO VUxMOw0KKwl1OCBpLCBjb3VudDsNCisNCisJLyoNCisJICogVE9ETzogTVRfVFhfRlJFRV9MQVRF TkNZIGlzIG1zZHUgdGltZSBmcm9tIHRoZSBUWEQgaXMgcXVldWVkIGludG8gUExFLA0KKwkgKiB0 byB0aGUgdGltZSBhY2sgaXMgcmVjZWl2ZWQgb3IgZHJvcHBlZCBieSBodyAoYWlyICsgaHcgcXVl dWUgdGltZSkuDQorCSAqIFNob3VsZCBhdm9pZCBhY2Nlc3NpbmcgV1RCTCB0byBnZXQgVHggYWly dGltZSwgYW5kIHVzZSBpdCBpbnN0ZWFkLg0KKwkgKi8NCisJY291bnQgPSBGSUVMRF9HRVQoTVRf VFhfRlJFRV9NU0RVX0NOVCwgbGUxNl90b19jcHUoZnJlZS0+Y3RybCkpOw0KKwlmb3IgKGkgPSAw OyBpIDwgY291bnQ7IGkrKykgew0KKwkJdTMyIG1zZHUsIGluZm8gPSBsZTMyX3RvX2NwdShmcmVl LT5pbmZvW2ldKTsNCisJCXU4IHN0YXQ7DQorDQorCQkvKg0KKwkJICogMSdiMTogbmV3IHdjaWQg cGFpci4NCisJCSAqIDEnYjA6IG1zZHVfaWQgd2l0aCB0aGUgc2FtZSAnd2NpZCBwYWlyJyBhcyBh Ym92ZS4NCisJCSAqLw0KKwkJaWYgKGluZm8gJiBNVF9UWF9GUkVFX1BBSVIpIHsNCisJCQlzdHJ1 Y3QgbXQ3OTE1X3N0YSAqbXN0YTsNCisJCQlzdHJ1Y3QgbXQ3Nl93Y2lkICp3Y2lkOw0KKwkJCXUx NiBpZHg7DQorDQorCQkJY291bnQrKzsNCisJCQlpZHggPSBGSUVMRF9HRVQoTVRfVFhfRlJFRV9X TEFOX0lELCBpbmZvKTsNCisJCQl3Y2lkID0gcmN1X2RlcmVmZXJlbmNlKGRldi0+bXQ3Ni53Y2lk W2lkeF0pOw0KKwkJCXN0YSA9IHdjaWRfdG9fc3RhKHdjaWQpOw0KKwkJCWlmICghc3RhKQ0KKwkJ CQljb250aW51ZTsNCisNCisJCQltc3RhID0gY29udGFpbmVyX29mKHdjaWQsIHN0cnVjdCBtdDc5 MTVfc3RhLCB3Y2lkKTsNCisJCQlpZWVlODAyMTFfcXVldWVfd29yayhtdDc2X2h3KGRldiksICZt c3RhLT5zdGF0c193b3JrKTsNCisJCQljb250aW51ZTsNCisJCX0NCisNCisJCW1zZHUgPSBGSUVM RF9HRVQoTVRfVFhfRlJFRV9NU0RVX0lELCBpbmZvKTsNCisJCXN0YXQgPSBGSUVMRF9HRVQoTVRf VFhfRlJFRV9TVEFUVVMsIGluZm8pOw0KKw0KKwkJc3Bpbl9sb2NrX2JoKCZkZXYtPnRva2VuX2xv Y2spOw0KKwkJdHh3aSA9IGlkcl9yZW1vdmUoJmRldi0+dG9rZW4sIG1zZHUpOw0KKwkJc3Bpbl91 bmxvY2tfYmgoJmRldi0+dG9rZW5fbG9jayk7DQorDQorCQlpZiAoIXR4d2kpDQorCQkJY29udGlu dWU7DQorDQorCQltdDc5MTVfdHhwX3NrYl91bm1hcChtZGV2LCB0eHdpKTsNCisJCWlmICh0eHdp LT5za2IpIHsNCisJCQltdDc5MTVfdHhfY29tcGxldGVfc3RhdHVzKG1kZXYsIHR4d2ktPnNrYiwg c3RhLCBzdGF0KTsNCisJCQl0eHdpLT5za2IgPSBOVUxMOw0KKwkJfQ0KKw0KKwkJbXQ3Nl9wdXRf dHh3aShtZGV2LCB0eHdpKTsNCisJfQ0KKwlkZXZfa2ZyZWVfc2tiKHNrYik7DQorfQ0KKw0KK3Zv aWQgbXQ3OTE1X3R4X2NvbXBsZXRlX3NrYihzdHJ1Y3QgbXQ3Nl9kZXYgKm1kZXYsIGVudW0gbXQ3 Nl90eHFfaWQgcWlkLA0KKwkJCSAgICBzdHJ1Y3QgbXQ3Nl9xdWV1ZV9lbnRyeSAqZSkNCit7DQor CXN0cnVjdCBtdDc5MTVfZGV2ICpkZXY7DQorDQorCWlmICghZS0+dHh3aSkgew0KKwkJZGV2X2tm cmVlX3NrYl9hbnkoZS0+c2tiKTsNCisJCXJldHVybjsNCisJfQ0KKw0KKwlkZXYgPSBjb250YWlu ZXJfb2YobWRldiwgc3RydWN0IG10NzkxNV9kZXYsIG10NzYpOw0KKw0KKwkvKiBlcnJvciBwYXRo ICovDQorCWlmIChlLT5za2IgPT0gRE1BX0RVTU1ZX0RBVEEpIHsNCisJCXN0cnVjdCBtdDc2X3R4 d2lfY2FjaGUgKnQ7DQorCQlzdHJ1Y3QgbXQ3OTE1X3R4cCAqdHhwOw0KKw0KKwkJdHhwID0gbXQ3 OTE1X3R4d2lfdG9fdHhwKG1kZXYsIGUtPnR4d2kpOw0KKw0KKwkJc3Bpbl9sb2NrX2JoKCZkZXYt PnRva2VuX2xvY2spOw0KKwkJdCA9IGlkcl9yZW1vdmUoJmRldi0+dG9rZW4sIGxlMTZfdG9fY3B1 KHR4cC0+dG9rZW4pKTsNCisJCXNwaW5fdW5sb2NrX2JoKCZkZXYtPnRva2VuX2xvY2spOw0KKwkJ ZS0+c2tiID0gdCA/IHQtPnNrYiA6IE5VTEw7DQorCX0NCisNCisJaWYgKGUtPnNrYikgew0KKwkJ c3RydWN0IG10NzZfdHhfY2IgKmNiID0gbXQ3Nl90eF9za2JfY2IoZS0+c2tiKTsNCisJCXN0cnVj dCBtdDc2X3djaWQgKndjaWQ7DQorDQorCQl3Y2lkID0gcmN1X2RlcmVmZXJlbmNlKGRldi0+bXQ3 Ni53Y2lkW2NiLT53Y2lkXSk7DQorDQorCQltdDc5MTVfdHhfY29tcGxldGVfc3RhdHVzKG1kZXYs IGUtPnNrYiwgd2NpZF90b19zdGEod2NpZCksIDApOw0KKwl9DQorfQ0KKw0KK3ZvaWQgbXQ3OTE1 X21hY19jY2Ffc3RhdHNfcmVzZXQoc3RydWN0IG10NzkxNV9waHkgKnBoeSkNCit7DQorCXN0cnVj dCBtdDc5MTVfZGV2ICpkZXYgPSBwaHktPmRldjsNCisJYm9vbCBleHRfcGh5ID0gcGh5ICE9ICZk ZXYtPnBoeTsNCisJdTMyIHJlZyA9IE1UX1dGX1BIWV9SWF9DVFJMMShleHRfcGh5KTsNCisNCisJ bXQ3OTE1X2wyX2NsZWFyKGRldiwgcmVnLCBNVF9XRl9QSFlfUlhfQ1RSTDFfU1RTQ05UX0VOKTsN CisJbXQ3OTE1X2wyX3NldChkZXYsIHJlZywgQklUKDExKSB8IEJJVCg5KSk7DQorfQ0KKw0KK3Zv aWQgbXQ3OTE1X21hY19yZXNldF9jb3VudGVycyhzdHJ1Y3QgbXQ3OTE1X3BoeSAqcGh5KQ0KK3sN CisJc3RydWN0IG10NzkxNV9kZXYgKmRldiA9IHBoeS0+ZGV2Ow0KKwlib29sIGV4dF9waHkgPSBw aHkgIT0gJmRldi0+cGh5Ow0KKwlpbnQgaTsNCisNCisJZm9yIChpID0gMDsgaSA8IDQ7IGkrKykg ew0KKwkJbXQ3Nl9ycihkZXYsIE1UX1RYX0FHR19DTlQoZXh0X3BoeSwgaSkpOw0KKwkJbXQ3Nl9y cihkZXYsIE1UX1RYX0FHR19DTlQyKGV4dF9waHksIGkpKTsNCisJfQ0KKw0KKwlpZiAoZXh0X3Bo eSkgew0KKwkJZGV2LT5tdDc2LnBoeTItPnN1cnZleV90aW1lID0ga3RpbWVfZ2V0X2Jvb3R0aW1l KCk7DQorCQlpID0gQVJSQVlfU0laRShkZXYtPm10NzYuYWdncl9zdGF0cykgLyAyOw0KKwl9IGVs c2Ugew0KKwkJZGV2LT5tdDc2LnBoeS5zdXJ2ZXlfdGltZSA9IGt0aW1lX2dldF9ib290dGltZSgp Ow0KKwkJaSA9IDA7DQorCX0NCisJbWVtc2V0KCZkZXYtPm10NzYuYWdncl9zdGF0c1tpXSwgMCwg c2l6ZW9mKGRldi0+bXQ3Ni5hZ2dyX3N0YXRzKSAvIDIpOw0KKw0KKwkvKiByZXNldCBhaXJ0aW1l IGNvdW50ZXJzICovDQorCW10NzZfcnIoZGV2LCBNVF9NSUJfU0RSOShleHRfcGh5KSk7DQorCW10 NzZfcnIoZGV2LCBNVF9NSUJfU0RSMzYoZXh0X3BoeSkpOw0KKwltdDc2X3JyKGRldiwgTVRfTUlC X1NEUjM3KGV4dF9waHkpKTsNCisNCisJbXQ3Nl9zZXQoZGV2LCBNVF9XRl9STUFDX01JQl9USU1F MChleHRfcGh5KSwNCisJCSBNVF9XRl9STUFDX01JQl9SWFRJTUVfQ0xSKTsNCisJbXQ3Nl9zZXQo ZGV2LCBNVF9XRl9STUFDX01JQl9BSVJUSU1FMChleHRfcGh5KSwNCisJCSBNVF9XRl9STUFDX01J Ql9SWFRJTUVfQ0xSKTsNCit9DQorDQordm9pZCBtdDc5MTVfbWFjX3NldF90aW1pbmcoc3RydWN0 IG10NzkxNV9waHkgKnBoeSkNCit7DQorCXMxNiBjb3ZlcmFnZV9jbGFzcyA9IHBoeS0+Y292ZXJh Z2VfY2xhc3M7DQorCXN0cnVjdCBtdDc5MTVfZGV2ICpkZXYgPSBwaHktPmRldjsNCisJYm9vbCBl eHRfcGh5ID0gcGh5ICE9ICZkZXYtPnBoeTsNCisJdTMyIHZhbCwgcmVnX29mZnNldDsNCisJdTMy IGNjayA9IEZJRUxEX1BSRVAoTVRfVElNRU9VVF9WQUxfUExDUCwgMjMxKSB8DQorCQkgIEZJRUxE X1BSRVAoTVRfVElNRU9VVF9WQUxfQ0NBLCA0OCk7DQorCXUzMiBvZmRtID0gRklFTERfUFJFUChN VF9USU1FT1VUX1ZBTF9QTENQLCA2MCkgfA0KKwkJICAgRklFTERfUFJFUChNVF9USU1FT1VUX1ZB TF9DQ0EsIDI4KTsNCisJaW50IHNpZnMsIG9mZnNldDsNCisJYm9vbCBpc181Z2h6ID0gcGh5LT5t dDc2LT5jaGFuZGVmLmNoYW4tPmJhbmQgPT0gTkw4MDIxMV9CQU5EXzVHSFo7DQorDQorCWlmICgh dGVzdF9iaXQoTVQ3Nl9TVEFURV9SVU5OSU5HLCAmcGh5LT5tdDc2LT5zdGF0ZSkpDQorCQlyZXR1 cm47DQorDQorCWlmIChpc181Z2h6KQ0KKwkJc2lmcyA9IDE2Ow0KKwllbHNlDQorCQlzaWZzID0g MTA7DQorDQorCWlmIChleHRfcGh5KSB7DQorCQljb3ZlcmFnZV9jbGFzcyA9IG1heF90KHMxNiwg ZGV2LT5waHkuY292ZXJhZ2VfY2xhc3MsDQorCQkJCSAgICAgICBjb3ZlcmFnZV9jbGFzcyk7DQor CX0gZWxzZSB7DQorCQlzdHJ1Y3QgbXQ3OTE1X3BoeSAqcGh5X2V4dCA9IG10NzkxNV9leHRfcGh5 KGRldik7DQorDQorCQlpZiAocGh5X2V4dCkNCisJCQljb3ZlcmFnZV9jbGFzcyA9IG1heF90KHMx NiwgcGh5X2V4dC0+Y292ZXJhZ2VfY2xhc3MsDQorCQkJCQkgICAgICAgY292ZXJhZ2VfY2xhc3Mp Ow0KKwl9DQorCW10NzZfc2V0KGRldiwgTVRfQVJCX1NDUihleHRfcGh5KSwNCisJCSBNVF9BUkJf U0NSX1RYX0RJU0FCTEUgfCBNVF9BUkJfU0NSX1JYX0RJU0FCTEUpOw0KKwl1ZGVsYXkoMSk7DQor DQorCW9mZnNldCA9IDMgKiBjb3ZlcmFnZV9jbGFzczsNCisJcmVnX29mZnNldCA9IEZJRUxEX1BS RVAoTVRfVElNRU9VVF9WQUxfUExDUCwgb2Zmc2V0KSB8DQorCQkgICAgIEZJRUxEX1BSRVAoTVRf VElNRU9VVF9WQUxfQ0NBLCBvZmZzZXQpOw0KKw0KKwltdDc2X3dyKGRldiwgTVRfVE1BQ19DRFRS KGV4dF9waHkpLCBjY2sgKyByZWdfb2Zmc2V0KTsNCisJbXQ3Nl93cihkZXYsIE1UX1RNQUNfT0RU UihleHRfcGh5KSwgb2ZkbSArIHJlZ19vZmZzZXQpOw0KKwltdDc2X3dyKGRldiwgTVRfVE1BQ19J Q1IwKGV4dF9waHkpLA0KKwkJRklFTERfUFJFUChNVF9JRlNfRUlGUywgMzYwKSB8DQorCQlGSUVM RF9QUkVQKE1UX0lGU19SSUZTLCAyKSB8DQorCQlGSUVMRF9QUkVQKE1UX0lGU19TSUZTLCBzaWZz KSB8DQorCQlGSUVMRF9QUkVQKE1UX0lGU19TTE9ULCBwaHktPnNsb3R0aW1lKSk7DQorDQorCWlm IChwaHktPnNsb3R0aW1lIDwgMjAgfHwgaXNfNWdoeikNCisJCXZhbCA9IE1UNzkxNV9DRkVORF9S QVRFX0RFRkFVTFQ7DQorCWVsc2UNCisJCXZhbCA9IE1UNzkxNV9DRkVORF9SQVRFXzExQjsNCisN CisJbXQ3Nl9ybXdfZmllbGQoZGV2LCBNVF9BR0dfQUNSMChleHRfcGh5KSwgTVRfQUdHX0FDUl9D RkVORF9SQVRFLCB2YWwpOw0KKwltdDc2X2NsZWFyKGRldiwgTVRfQVJCX1NDUihleHRfcGh5KSwN CisJCSAgIE1UX0FSQl9TQ1JfVFhfRElTQUJMRSB8IE1UX0FSQl9TQ1JfUlhfRElTQUJMRSk7DQor fQ0KKw0KKy8qDQorICogVE9ETzogbWliIGNvdW50ZXJzIGFyZSByZWFkLWNsZWFyIGFuZCB0aGVy ZSdyZSBtYW55IEhFIGZ1bmN0aW9uYWxpdGllcyBuZWVkDQorICogc3VjaCBpbmZvLCBoZW5jZSBm aXJtd2FyZSBwcmVwYXJlcyBhIHRhc2sgdG8gcmVhZCB0aGUgZmllbGRzIG91dCB0byBhIHNoYXJl ZA0KKyAqIHN0cnVjdHVyZS4gVXNlciBzaG91bGQgc3dpdGNoIHRvIHVzZSBldmVudCBmb3JtYXQg dG8gYXZvaWQgcmFjZSBjb25kaXRpb24uDQorICovDQorc3RhdGljIHZvaWQNCittdDc5MTVfcGh5 X3VwZGF0ZV9jaGFubmVsKHN0cnVjdCBtdDc2X3BoeSAqbXBoeSwgaW50IGlkeCkNCit7DQorCXN0 cnVjdCBtdDc5MTVfZGV2ICpkZXYgPSBjb250YWluZXJfb2YobXBoeS0+ZGV2LCBzdHJ1Y3QgbXQ3 OTE1X2RldiwgbXQ3Nik7DQorCXN0cnVjdCBtdDc2X2NoYW5uZWxfc3RhdGUgKnN0YXRlOw0KKwl1 NjQgYnVzeV90aW1lLCB0eF90aW1lLCByeF90aW1lLCBvYnNzX3RpbWU7DQorDQorCWJ1c3lfdGlt ZSA9IG10NzZfZ2V0X2ZpZWxkKGRldiwgTVRfTUlCX1NEUjkoaWR4KSwNCisJCQkJICAgTVRfTUlC X1NEUjlfQlVTWV9NQVNLKTsNCisJdHhfdGltZSA9IG10NzZfZ2V0X2ZpZWxkKGRldiwgTVRfTUlC X1NEUjM2KGlkeCksDQorCQkJCSBNVF9NSUJfU0RSMzZfVFhUSU1FX01BU0spOw0KKwlyeF90aW1l ID0gbXQ3Nl9nZXRfZmllbGQoZGV2LCBNVF9NSUJfU0RSMzcoaWR4KSwNCisJCQkJIE1UX01JQl9T RFIzN19SWFRJTUVfTUFTSyk7DQorCW9ic3NfdGltZSA9IG10NzZfZ2V0X2ZpZWxkKGRldiwgTVRf V0ZfUk1BQ19NSUJfQUlSVElNRTE0KGlkeCksDQorCQkJCSAgIE1UX01JQl9PQlNTVElNRV9NQVNL KTsNCisNCisJLyogVE9ETzogc3RhdGUtPm5vaXNlICovDQorCXN0YXRlID0gbXBoeS0+Y2hhbl9z dGF0ZTsNCisJc3RhdGUtPmNjX2J1c3kgKz0gYnVzeV90aW1lOw0KKwlzdGF0ZS0+Y2NfdHggKz0g dHhfdGltZTsNCisJc3RhdGUtPmNjX3J4ICs9IHJ4X3RpbWUgKyBvYnNzX3RpbWU7DQorCXN0YXRl LT5jY19ic3NfcnggKz0gcnhfdGltZTsNCit9DQorDQordm9pZCBtdDc5MTVfdXBkYXRlX2NoYW5u ZWwoc3RydWN0IG10NzZfZGV2ICptZGV2KQ0KK3sNCisJc3RydWN0IG10NzkxNV9kZXYgKmRldiA9 IGNvbnRhaW5lcl9vZihtZGV2LCBzdHJ1Y3QgbXQ3OTE1X2RldiwgbXQ3Nik7DQorDQorCW10Nzkx NV9waHlfdXBkYXRlX2NoYW5uZWwoJm1kZXYtPnBoeSwgMCk7DQorCWlmIChtZGV2LT5waHkyKQ0K KwkJbXQ3OTE1X3BoeV91cGRhdGVfY2hhbm5lbChtZGV2LT5waHkyLCAxKTsNCisNCisJLyogcmVz ZXQgb2JzcyBhaXJ0aW1lICovDQorCW10NzZfc2V0KGRldiwgTVRfV0ZfUk1BQ19NSUJfVElNRTAo MCksIE1UX1dGX1JNQUNfTUlCX1JYVElNRV9DTFIpOw0KKwlpZiAobWRldi0+cGh5MikNCisJCW10 NzZfc2V0KGRldiwgTVRfV0ZfUk1BQ19NSUJfVElNRTAoMSksDQorCQkJIE1UX1dGX1JNQUNfTUlC X1JYVElNRV9DTFIpOw0KK30NCisNCitzdGF0aWMgYm9vbA0KK210NzkxNV93YWl0X3Jlc2V0X3N0 YXRlKHN0cnVjdCBtdDc5MTVfZGV2ICpkZXYsIHUzMiBzdGF0ZSkNCit7DQorCWJvb2wgcmV0Ow0K Kw0KKwlyZXQgPSB3YWl0X2V2ZW50X3RpbWVvdXQoZGV2LT5yZXNldF93YWl0LA0KKwkJCQkgKFJF QURfT05DRShkZXYtPnJlc2V0X3N0YXRlKSAmIHN0YXRlKSwNCisJCQkJIE1UNzkxNV9SRVNFVF9U SU1FT1VUKTsNCisNCisJV0FSTighcmV0LCAiVGltZW91dCB3YWl0aW5nIGZvciBNQ1UgcmVzZXQg c3RhdGUgJXhcbiIsIHN0YXRlKTsNCisJcmV0dXJuIHJldDsNCit9DQorDQorc3RhdGljIHZvaWQN CittdDc5MTVfdXBkYXRlX3ZpZl9iZWFjb24odm9pZCAqcHJpdiwgdTggKm1hYywgc3RydWN0IGll ZWU4MDIxMV92aWYgKnZpZikNCit7DQorCXN0cnVjdCBpZWVlODAyMTFfaHcgKmh3ID0gcHJpdjsN CisNCisJbXQ3OTE1X21jdV9hZGRfYmVhY29uKGh3LCB2aWYsIHZpZi0+YnNzX2NvbmYuZW5hYmxl X2JlYWNvbik7DQorfQ0KKw0KK3N0YXRpYyB2b2lkDQorbXQ3OTE1X3VwZGF0ZV9iZWFjb25zKHN0 cnVjdCBtdDc5MTVfZGV2ICpkZXYpDQorew0KKwlpZWVlODAyMTFfaXRlcmF0ZV9hY3RpdmVfaW50 ZXJmYWNlcyhkZXYtPm10NzYuaHcsDQorCQlJRUVFODAyMTFfSUZBQ0VfSVRFUl9SRVNVTUVfQUxM LA0KKwkJbXQ3OTE1X3VwZGF0ZV92aWZfYmVhY29uLCBkZXYtPm10NzYuaHcpOw0KKw0KKwlpZiAo IWRldi0+bXQ3Ni5waHkyKQ0KKwkJcmV0dXJuOw0KKw0KKwlpZWVlODAyMTFfaXRlcmF0ZV9hY3Rp dmVfaW50ZXJmYWNlcyhkZXYtPm10NzYucGh5Mi0+aHcsDQorCQlJRUVFODAyMTFfSUZBQ0VfSVRF Ul9SRVNVTUVfQUxMLA0KKwkJbXQ3OTE1X3VwZGF0ZV92aWZfYmVhY29uLCBkZXYtPm10NzYucGh5 Mi0+aHcpOw0KK30NCisNCitzdGF0aWMgdm9pZA0KK210NzkxNV9kbWFfcmVzZXQoc3RydWN0IG10 NzkxNV9kZXYgKmRldikNCit7DQorCWludCBpOw0KKw0KKwltdDc2X2NsZWFyKGRldiwgTVRfV0ZE TUEwX0dMT19DRkcsDQorCQkgICBNVF9XRkRNQTBfR0xPX0NGR19UWF9ETUFfRU4gfCBNVF9XRkRN QTBfR0xPX0NGR19SWF9ETUFfRU4pOw0KKwltdDc2X2NsZWFyKGRldiwgTVRfV0ZETUExX0dMT19D RkcsDQorCQkgICBNVF9XRkRNQTFfR0xPX0NGR19UWF9ETUFfRU4gfCBNVF9XRkRNQTFfR0xPX0NG R19SWF9ETUFfRU4pOw0KKwl1c2xlZXBfcmFuZ2UoMTAwMCwgMjAwMCk7DQorDQorCWZvciAoaSA9 IDA7IGkgPCBfX01UX1RYUV9NQVg7IGkrKykNCisJCW10NzZfcXVldWVfdHhfY2xlYW51cChkZXYs IGksIHRydWUpOw0KKw0KKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShkZXYtPm10NzYucV9y eCk7IGkrKykNCisJCW10NzZfcXVldWVfcnhfcmVzZXQoZGV2LCBpKTsNCisNCisJLyogcmUtaW5p dCBwcmVmZXRjaCBzZXR0aW5ncyBhZnRlciByZXNldCAqLw0KKwltdDc5MTVfZG1hX3ByZWZldGNo KGRldik7DQorDQorCW10NzZfc2V0KGRldiwgTVRfV0ZETUEwX0dMT19DRkcsDQorCQkgTVRfV0ZE TUEwX0dMT19DRkdfVFhfRE1BX0VOIHwgTVRfV0ZETUEwX0dMT19DRkdfUlhfRE1BX0VOKTsNCisJ bXQ3Nl9zZXQoZGV2LCBNVF9XRkRNQTFfR0xPX0NGRywNCisJCSBNVF9XRkRNQTFfR0xPX0NGR19U WF9ETUFfRU4gfCBNVF9XRkRNQTFfR0xPX0NGR19SWF9ETUFfRU4pOw0KK30NCisNCisvKiBzeXN0 ZW0gZXJyb3IgcmVjb3ZlcnkgKi8NCit2b2lkIG10NzkxNV9tYWNfcmVzZXRfd29yayhzdHJ1Y3Qg d29ya19zdHJ1Y3QgKndvcmspDQorew0KKwlzdHJ1Y3QgbXQ3OTE1X2RldiAqZGV2Ow0KKw0KKwlk ZXYgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IG10NzkxNV9kZXYsIHJlc2V0X3dvcmspOw0K Kw0KKwlpZiAoIShSRUFEX09OQ0UoZGV2LT5yZXNldF9zdGF0ZSkgJiBNVF9NQ1VfQ01EX1NUT1Bf RE1BKSkNCisJCXJldHVybjsNCisNCisJaWVlZTgwMjExX3N0b3BfcXVldWVzKG10NzZfaHcoZGV2 KSk7DQorCWlmIChkZXYtPm10NzYucGh5MikNCisJCWllZWU4MDIxMV9zdG9wX3F1ZXVlcyhkZXYt Pm10NzYucGh5Mi0+aHcpOw0KKw0KKwlzZXRfYml0KE1UNzZfUkVTRVQsICZkZXYtPm1waHkuc3Rh dGUpOw0KKwlzZXRfYml0KE1UNzZfTUNVX1JFU0VULCAmZGV2LT5tcGh5LnN0YXRlKTsNCisJd2Fr ZV91cCgmZGV2LT5tdDc2Lm1jdS53YWl0KTsNCisJY2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKCZk ZXYtPm10NzYubWFjX3dvcmspOw0KKw0KKwkvKiBsb2NrL3VubG9jayBhbGwgcXVldWVzIHRvIGVu c3VyZSB0aGF0IG5vIHR4IGlzIHBlbmRpbmcgKi8NCisJbXQ3Nl90eHFfc2NoZWR1bGVfYWxsKCZk ZXYtPm1waHkpOw0KKwlpZiAoZGV2LT5tdDc2LnBoeTIpDQorCQltdDc2X3R4cV9zY2hlZHVsZV9h bGwoZGV2LT5tdDc2LnBoeTIpOw0KKw0KKwl0YXNrbGV0X2Rpc2FibGUoJmRldi0+bXQ3Ni50eF90 YXNrbGV0KTsNCisJbmFwaV9kaXNhYmxlKCZkZXYtPm10NzYubmFwaVswXSk7DQorCW5hcGlfZGlz YWJsZSgmZGV2LT5tdDc2Lm5hcGlbMV0pOw0KKwluYXBpX2Rpc2FibGUoJmRldi0+bXQ3Ni5uYXBp WzJdKTsNCisJbmFwaV9kaXNhYmxlKCZkZXYtPm10NzYudHhfbmFwaSk7DQorDQorCW11dGV4X2xv Y2soJmRldi0+bXQ3Ni5tdXRleCk7DQorDQorCW10NzZfd3IoZGV2LCBNVF9NQ1VfSU5UX0VWRU5U LCBNVF9NQ1VfSU5UX0VWRU5UX0RNQV9TVE9QUEVEKTsNCisNCisJaWYgKG10NzkxNV93YWl0X3Jl c2V0X3N0YXRlKGRldiwgTVRfTUNVX0NNRF9SRVNFVF9ET05FKSkgew0KKwkJbXQ3OTE1X2RtYV9y ZXNldChkZXYpOw0KKw0KKwkJbXQ3Nl93cihkZXYsIE1UX01DVV9JTlRfRVZFTlQsIE1UX01DVV9J TlRfRVZFTlRfRE1BX0lOSVQpOw0KKwkJbXQ3OTE1X3dhaXRfcmVzZXRfc3RhdGUoZGV2LCBNVF9N Q1VfQ01EX1JFQ09WRVJZX0RPTkUpOw0KKwl9DQorDQorCWNsZWFyX2JpdChNVDc2X01DVV9SRVNF VCwgJmRldi0+bXBoeS5zdGF0ZSk7DQorCWNsZWFyX2JpdChNVDc2X1JFU0VULCAmZGV2LT5tcGh5 LnN0YXRlKTsNCisNCisJdGFza2xldF9lbmFibGUoJmRldi0+bXQ3Ni50eF90YXNrbGV0KTsNCisJ bmFwaV9lbmFibGUoJmRldi0+bXQ3Ni50eF9uYXBpKTsNCisJbmFwaV9zY2hlZHVsZSgmZGV2LT5t dDc2LnR4X25hcGkpOw0KKw0KKwluYXBpX2VuYWJsZSgmZGV2LT5tdDc2Lm5hcGlbMF0pOw0KKwlu YXBpX3NjaGVkdWxlKCZkZXYtPm10NzYubmFwaVswXSk7DQorDQorCW5hcGlfZW5hYmxlKCZkZXYt Pm10NzYubmFwaVsxXSk7DQorCW5hcGlfc2NoZWR1bGUoJmRldi0+bXQ3Ni5uYXBpWzFdKTsNCisN CisJbmFwaV9lbmFibGUoJmRldi0+bXQ3Ni5uYXBpWzJdKTsNCisJbmFwaV9zY2hlZHVsZSgmZGV2 LT5tdDc2Lm5hcGlbMl0pOw0KKw0KKwlpZWVlODAyMTFfd2FrZV9xdWV1ZXMobXQ3Nl9odyhkZXYp KTsNCisJaWYgKGRldi0+bXQ3Ni5waHkyKQ0KKwkJaWVlZTgwMjExX3dha2VfcXVldWVzKGRldi0+ bXQ3Ni5waHkyLT5odyk7DQorDQorCW10NzZfd3IoZGV2LCBNVF9NQ1VfSU5UX0VWRU5ULCBNVF9N Q1VfSU5UX0VWRU5UX1JFU0VUX0RPTkUpOw0KKwltdDc5MTVfd2FpdF9yZXNldF9zdGF0ZShkZXYs IE1UX01DVV9DTURfTk9STUFMX1NUQVRFKTsNCisNCisJbXV0ZXhfdW5sb2NrKCZkZXYtPm10NzYu bXV0ZXgpOw0KKw0KKwltdDc5MTVfdXBkYXRlX2JlYWNvbnMoZGV2KTsNCisNCisJaWVlZTgwMjEx X3F1ZXVlX2RlbGF5ZWRfd29yayhtdDc2X2h3KGRldiksICZkZXYtPm10NzYubWFjX3dvcmssDQor CQkJCSAgICAgTVQ3OTE1X1dBVENIRE9HX1RJTUUpOw0KK30NCisNCitzdGF0aWMgdm9pZA0KK210 NzkxNV9tYWNfdXBkYXRlX21pYl9zdGF0cyhzdHJ1Y3QgbXQ3OTE1X3BoeSAqcGh5KQ0KK3sNCisJ c3RydWN0IG10NzkxNV9kZXYgKmRldiA9IHBoeS0+ZGV2Ow0KKwlzdHJ1Y3QgbWliX3N0YXRzICpt aWIgPSAmcGh5LT5taWI7DQorCWJvb2wgZXh0X3BoeSA9IHBoeSAhPSAmZGV2LT5waHk7DQorCWlu dCBpLCBhZ2dyMCwgYWdncjE7DQorDQorCW1lbXNldChtaWIsIDAsIHNpemVvZigqbWliKSk7DQor DQorCW1pYi0+ZmNzX2Vycl9jbnQgPSBtdDc2X2dldF9maWVsZChkZXYsIE1UX01JQl9TRFIzKGV4 dF9waHkpLA0KKwkJCQkJICBNVF9NSUJfU0RSM19GQ1NfRVJSX01BU0spOw0KKw0KKwlhZ2dyMCA9 IGV4dF9waHkgPyBBUlJBWV9TSVpFKGRldi0+bXQ3Ni5hZ2dyX3N0YXRzKSAvIDIgOiAwOw0KKwlm b3IgKGkgPSAwLCBhZ2dyMSA9IGFnZ3IwICsgNDsgaSA8IDQ7IGkrKykgew0KKwkJdTMyIHZhbCwg dmFsMjsNCisNCisJCXZhbCA9IG10NzZfcnIoZGV2LCBNVF9NSUJfTUJfU0RSMShleHRfcGh5LCBp KSk7DQorDQorCQl2YWwyID0gRklFTERfR0VUKE1UX01JQl9BQ0tfRkFJTF9DT1VOVF9NQVNLLCB2 YWwpOw0KKwkJaWYgKHZhbDIgPiBtaWItPmFja19mYWlsX2NudCkNCisJCQltaWItPmFja19mYWls X2NudCA9IHZhbDI7DQorDQorCQl2YWwyID0gRklFTERfR0VUKE1UX01JQl9CQV9NSVNTX0NPVU5U X01BU0ssIHZhbCk7DQorCQlpZiAodmFsMiA+IG1pYi0+YmFfbWlzc19jbnQpDQorCQkJbWliLT5i YV9taXNzX2NudCA9IHZhbDI7DQorDQorCQl2YWwgPSBtdDc2X3JyKGRldiwgTVRfTUlCX01CX1NE UjAoZXh0X3BoeSwgaSkpOw0KKwkJdmFsMiA9IEZJRUxEX0dFVChNVF9NSUJfUlRTX1JFVFJJRVNf Q09VTlRfTUFTSywgdmFsKTsNCisJCWlmICh2YWwyID4gbWliLT5ydHNfcmV0cmllc19jbnQpIHsN CisJCQltaWItPnJ0c19jbnQgPSBGSUVMRF9HRVQoTVRfTUlCX1JUU19DT1VOVF9NQVNLLCB2YWwp Ow0KKwkJCW1pYi0+cnRzX3JldHJpZXNfY250ID0gdmFsMjsNCisJCX0NCisNCisJCXZhbCA9IG10 NzZfcnIoZGV2LCBNVF9UWF9BR0dfQ05UKGV4dF9waHksIGkpKTsNCisJCXZhbDIgPSBtdDc2X3Jy KGRldiwgTVRfVFhfQUdHX0NOVDIoZXh0X3BoeSwgaSkpOw0KKw0KKwkJZGV2LT5tdDc2LmFnZ3Jf c3RhdHNbYWdncjArK10gKz0gdmFsICYgMHhmZmZmOw0KKwkJZGV2LT5tdDc2LmFnZ3Jfc3RhdHNb YWdncjArK10gKz0gdmFsID4+IDE2Ow0KKwkJZGV2LT5tdDc2LmFnZ3Jfc3RhdHNbYWdncjErK10g Kz0gdmFsMiAmIDB4ZmZmZjsNCisJCWRldi0+bXQ3Ni5hZ2dyX3N0YXRzW2FnZ3IxKytdICs9IHZh bDIgPj4gMTY7DQorCX0NCit9DQorDQordm9pZCBtdDc5MTVfbWFjX3N0YV9zdGF0c193b3JrKHN0 cnVjdCB3b3JrX3N0cnVjdCAqd29yaykNCit7DQorCXN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGE7 DQorCXN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWY7DQorCXN0cnVjdCBtdDc5MTVfc3RhX3N0YXRz ICpzdGF0czsNCisJc3RydWN0IG10NzkxNV9zdGEgKm1zdGE7DQorCXN0cnVjdCBtdDc5MTVfZGV2 ICpkZXY7DQorDQorCW1zdGEgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IG10NzkxNV9zdGEs IHN0YXRzX3dvcmspOw0KKwlzdGEgPSBjb250YWluZXJfb2YoKHZvaWQgKiltc3RhLCBzdHJ1Y3Qg aWVlZTgwMjExX3N0YSwgZHJ2X3ByaXYpOw0KKwl2aWYgPSBjb250YWluZXJfb2YoKHZvaWQgKilt c3RhLT52aWYsIHN0cnVjdCBpZWVlODAyMTFfdmlmLCBkcnZfcHJpdik7DQorCWRldiA9IG1zdGEt PnZpZi0+ZGV2Ow0KKwlzdGF0cyA9ICZtc3RhLT5zdGF0czsNCisNCisJLyogdXNlIE1UX1RYX0ZS RUVfUkFURSB0byByZXBvcnQgVHggcmF0ZSBmb3IgZnVydGhlciBkZXZpY2VzICovDQorCWlmICh0 aW1lX2FmdGVyKGppZmZpZXMsIHN0YXRzLT5qaWZmaWVzICsgSFopKSB7DQorCQltdDc5MTVfbWN1 X2dldF9yYXRlX2luZm8oZGV2LCBSQVRFX0NUUkxfUlVfSU5GTywNCisJCQkJCSBtc3RhLT53Y2lk LmlkeCk7DQorDQorCQlzdGF0cy0+amlmZmllcyA9IGppZmZpZXM7DQorCX0NCisNCisJaWYgKHRl c3RfYW5kX2NsZWFyX2JpdChJRUVFODAyMTFfUkNfU1VQUF9SQVRFU19DSEFOR0VEIHwNCisJCQkg ICAgICAgSUVFRTgwMjExX1JDX05TU19DSEFOR0VEIHwNCisJCQkgICAgICAgSUVFRTgwMjExX1JD X0JXX0NIQU5HRUQsICZzdGF0cy0+Y2hhbmdlZCkpDQorCQltdDc5MTVfbWN1X2FkZF9yYXRlX2N0 cmwoZGV2LCB2aWYsIHN0YSk7DQorDQorCWlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoSUVFRTgwMjEx X1JDX1NNUFNfQ0hBTkdFRCwgJnN0YXRzLT5jaGFuZ2VkKSkNCisJCW10NzkxNV9tY3VfYWRkX3Nt cHMoZGV2LCB2aWYsIHN0YSk7DQorDQorCXNwaW5fbG9ja19iaCgmZGV2LT5zdGFfcG9sbF9sb2Nr KTsNCisJaWYgKGxpc3RfZW1wdHkoJm1zdGEtPnBvbGxfbGlzdCkpDQorCQlsaXN0X2FkZF90YWls KCZtc3RhLT5wb2xsX2xpc3QsICZkZXYtPnN0YV9wb2xsX2xpc3QpOw0KKwlzcGluX3VubG9ja19i aCgmZGV2LT5zdGFfcG9sbF9sb2NrKTsNCit9DQorDQordm9pZCBtdDc5MTVfbWFjX3dvcmsoc3Ry dWN0IHdvcmtfc3RydWN0ICp3b3JrKQ0KK3sNCisJc3RydWN0IG10NzkxNV9kZXYgKmRldjsNCisN CisJZGV2ID0gKHN0cnVjdCBtdDc5MTVfZGV2ICopY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBt dDc2X2RldiwNCisJCQkJCQltYWNfd29yay53b3JrKTsNCisNCisJbXV0ZXhfbG9jaygmZGV2LT5t dDc2Lm11dGV4KTsNCisJbXQ3Nl91cGRhdGVfc3VydmV5KCZkZXYtPm10NzYpOw0KKwlpZiAoKytk ZXYtPm1hY193b3JrX2NvdW50ID09IDUpIHsNCisJCXN0cnVjdCBtdDc5MTVfcGh5ICpleHRfcGh5 ID0gbXQ3OTE1X2V4dF9waHkoZGV2KTsNCisNCisJCW10NzkxNV9tYWNfdXBkYXRlX21pYl9zdGF0 cygmZGV2LT5waHkpOw0KKwkJaWYgKGV4dF9waHkpDQorCQkJbXQ3OTE1X21hY191cGRhdGVfbWli X3N0YXRzKGV4dF9waHkpOw0KKw0KKwkJZGV2LT5tYWNfd29ya19jb3VudCA9IDA7DQorCX0NCisJ bXV0ZXhfdW5sb2NrKCZkZXYtPm10NzYubXV0ZXgpOw0KKw0KKwlpZWVlODAyMTFfcXVldWVfZGVs YXllZF93b3JrKG10NzZfaHcoZGV2KSwgJmRldi0+bXQ3Ni5tYWNfd29yaywNCisJCQkJICAgICBN VDc5MTVfV0FUQ0hET0dfVElNRSk7DQorfQ0KKw0KK3N0YXRpYyB2b2lkIG10NzkxNV9kZnNfc3Rv cF9yYWRhcl9kZXRlY3RvcihzdHJ1Y3QgbXQ3OTE1X3BoeSAqcGh5KQ0KK3sNCisJc3RydWN0IG10 NzkxNV9kZXYgKmRldiA9IHBoeS0+ZGV2Ow0KKw0KKwlpZiAocGh5LT5yZGRfc3RhdGUgJiBCSVQo MCkpDQorCQltdDc5MTVfbWN1X3JkZF9jbWQoZGV2LCBSRERfU1RPUCwgMCwgTVRfUlhfU0VMMCwg MCk7DQorCWlmIChwaHktPnJkZF9zdGF0ZSAmIEJJVCgxKSkNCisJCW10NzkxNV9tY3VfcmRkX2Nt ZChkZXYsIFJERF9TVE9QLCAxLCBNVF9SWF9TRUwwLCAwKTsNCit9DQorDQorc3RhdGljIGludCBt dDc5MTVfZGZzX3N0YXJ0X3JkZChzdHJ1Y3QgbXQ3OTE1X2RldiAqZGV2LCBpbnQgY2hhaW4pDQor ew0KKwlpbnQgZXJyOw0KKw0KKwllcnIgPSBtdDc5MTVfbWN1X3JkZF9jbWQoZGV2LCBSRERfU1RB UlQsIGNoYWluLCBNVF9SWF9TRUwwLCAwKTsNCisJaWYgKGVyciA8IDApDQorCQlyZXR1cm4gZXJy Ow0KKw0KKwlyZXR1cm4gbXQ3OTE1X21jdV9yZGRfY21kKGRldiwgUkREX0RFVF9NT0RFLCBjaGFp biwgTVRfUlhfU0VMMCwgMSk7DQorfQ0KKw0KK3N0YXRpYyBpbnQgbXQ3OTE1X2Rmc19zdGFydF9y YWRhcl9kZXRlY3RvcihzdHJ1Y3QgbXQ3OTE1X3BoeSAqcGh5KQ0KK3sNCisJc3RydWN0IGNmZzgw MjExX2NoYW5fZGVmICpjaGFuZGVmID0gJnBoeS0+bXQ3Ni0+Y2hhbmRlZjsNCisJc3RydWN0IG10 NzkxNV9kZXYgKmRldiA9IHBoeS0+ZGV2Ow0KKwlib29sIGV4dF9waHkgPSBwaHkgIT0gJmRldi0+ cGh5Ow0KKwlpbnQgZXJyOw0KKw0KKwkvKiBzdGFydCBDQUMgKi8NCisJZXJyID0gbXQ3OTE1X21j dV9yZGRfY21kKGRldiwgUkREX0NBQ19TVEFSVCwgZXh0X3BoeSwgTVRfUlhfU0VMMCwgMCk7DQor CWlmIChlcnIgPCAwKQ0KKwkJcmV0dXJuIGVycjsNCisNCisJZXJyID0gbXQ3OTE1X2Rmc19zdGFy dF9yZGQoZGV2LCBleHRfcGh5KTsNCisJaWYgKGVyciA8IDApDQorCQlyZXR1cm4gZXJyOw0KKw0K KwlwaHktPnJkZF9zdGF0ZSB8PSBCSVQoZXh0X3BoeSk7DQorDQorCWlmIChjaGFuZGVmLT53aWR0 aCA9PSBOTDgwMjExX0NIQU5fV0lEVEhfMTYwIHx8DQorCSAgICBjaGFuZGVmLT53aWR0aCA9PSBO TDgwMjExX0NIQU5fV0lEVEhfODBQODApIHsNCisJCWVyciA9IG10NzkxNV9kZnNfc3RhcnRfcmRk KGRldiwgMSk7DQorCQlpZiAoZXJyIDwgMCkNCisJCQlyZXR1cm4gZXJyOw0KKw0KKwkJcGh5LT5y ZGRfc3RhdGUgfD0gQklUKDEpOw0KKwl9DQorDQorCXJldHVybiAwOw0KK30NCisNCitzdGF0aWMg aW50DQorbXQ3OTE1X2Rmc19pbml0X3JhZGFyX3NwZWNzKHN0cnVjdCBtdDc5MTVfcGh5ICpwaHkp DQorew0KKwljb25zdCBzdHJ1Y3QgbXQ3OTE1X2Rmc19yYWRhcl9zcGVjICpyYWRhcl9zcGVjczsN CisJc3RydWN0IG10NzkxNV9kZXYgKmRldiA9IHBoeS0+ZGV2Ow0KKwlpbnQgZXJyLCBpOw0KKw0K Kwlzd2l0Y2ggKGRldi0+bXQ3Ni5yZWdpb24pIHsNCisJY2FzZSBOTDgwMjExX0RGU19GQ0M6DQor CQlyYWRhcl9zcGVjcyA9ICZmY2NfcmFkYXJfc3BlY3M7DQorCQllcnIgPSBtdDc5MTVfbWN1X3Nl dF9mY2M1X2xwbihkZXYsIDgpOw0KKwkJaWYgKGVyciA8IDApDQorCQkJcmV0dXJuIGVycjsNCisJ CWJyZWFrOw0KKwljYXNlIE5MODAyMTFfREZTX0VUU0k6DQorCQlyYWRhcl9zcGVjcyA9ICZldHNp X3JhZGFyX3NwZWNzOw0KKwkJYnJlYWs7DQorCWNhc2UgTkw4MDIxMV9ERlNfSlA6DQorCQlyYWRh cl9zcGVjcyA9ICZqcF9yYWRhcl9zcGVjczsNCisJCWJyZWFrOw0KKwlkZWZhdWx0Og0KKwkJcmV0 dXJuIC1FSU5WQUw7DQorCX0NCisNCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUocmFkYXJf c3BlY3MtPnJhZGFyX3BhdHRlcm4pOyBpKyspIHsNCisJCWVyciA9IG10NzkxNV9tY3Vfc2V0X3Jh ZGFyX3RoKGRldiwgaSwNCisJCQkJCSAgICAgICZyYWRhcl9zcGVjcy0+cmFkYXJfcGF0dGVybltp XSk7DQorCQlpZiAoZXJyIDwgMCkNCisJCQlyZXR1cm4gZXJyOw0KKwl9DQorDQorCXJldHVybiBt dDc5MTVfbWN1X3NldF9wdWxzZV90aChkZXYsICZyYWRhcl9zcGVjcy0+cHVsc2VfdGgpOw0KK30N CisNCitpbnQgbXQ3OTE1X2Rmc19pbml0X3JhZGFyX2RldGVjdG9yKHN0cnVjdCBtdDc5MTVfcGh5 ICpwaHkpDQorew0KKwlzdHJ1Y3QgY2ZnODAyMTFfY2hhbl9kZWYgKmNoYW5kZWYgPSAmcGh5LT5t dDc2LT5jaGFuZGVmOw0KKwlzdHJ1Y3QgbXQ3OTE1X2RldiAqZGV2ID0gcGh5LT5kZXY7DQorCWJv b2wgZXh0X3BoeSA9IHBoeSAhPSAmZGV2LT5waHk7DQorCWludCBlcnI7DQorDQorCWlmIChkZXYt Pm10NzYucmVnaW9uID09IE5MODAyMTFfREZTX1VOU0VUKSB7DQorCQlwaHktPmRmc19zdGF0ZSA9 IC0xOw0KKwkJaWYgKHBoeS0+cmRkX3N0YXRlKQ0KKwkJCWdvdG8gc3RvcDsNCisNCisJCXJldHVy biAwOw0KKwl9DQorDQorCWlmICh0ZXN0X2JpdChNVDc2X1NDQU5OSU5HLCAmcGh5LT5tdDc2LT5z dGF0ZSkpDQorCQlyZXR1cm4gMDsNCisNCisJaWYgKHBoeS0+ZGZzX3N0YXRlID09IGNoYW5kZWYt PmNoYW4tPmRmc19zdGF0ZSkNCisJCXJldHVybiAwOw0KKw0KKwllcnIgPSBtdDc5MTVfZGZzX2lu aXRfcmFkYXJfc3BlY3MocGh5KTsNCisJaWYgKGVyciA8IDApIHsNCisJCXBoeS0+ZGZzX3N0YXRl ID0gLTE7DQorCQlnb3RvIHN0b3A7DQorCX0NCisNCisJcGh5LT5kZnNfc3RhdGUgPSBjaGFuZGVm LT5jaGFuLT5kZnNfc3RhdGU7DQorDQorCWlmIChjaGFuZGVmLT5jaGFuLT5mbGFncyAmIElFRUU4 MDIxMV9DSEFOX1JBREFSKSB7DQorCQlpZiAoY2hhbmRlZi0+Y2hhbi0+ZGZzX3N0YXRlICE9IE5M ODAyMTFfREZTX0FWQUlMQUJMRSkNCisJCQlyZXR1cm4gbXQ3OTE1X2Rmc19zdGFydF9yYWRhcl9k ZXRlY3RvcihwaHkpOw0KKw0KKwkJcmV0dXJuIG10NzkxNV9tY3VfcmRkX2NtZChkZXYsIFJERF9D QUNfRU5ELCBleHRfcGh5LA0KKwkJCQkJICBNVF9SWF9TRUwwLCAwKTsNCisJfQ0KKw0KK3N0b3A6 DQorCWVyciA9IG10NzkxNV9tY3VfcmRkX2NtZChkZXYsIFJERF9OT1JNQUxfU1RBUlQsIGV4dF9w aHksDQorCQkJCSBNVF9SWF9TRUwwLCAwKTsNCisJaWYgKGVyciA8IDApDQorCQlyZXR1cm4gZXJy Ow0KKw0KKwltdDc5MTVfZGZzX3N0b3BfcmFkYXJfZGV0ZWN0b3IocGh5KTsNCisJcmV0dXJuIDA7 DQorfQ0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3 OTE1L21hYy5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MTUvbWFj LmgNCm5ldyBmaWxlIG1vZGUgMTAwNjQ0DQppbmRleCAwMDAwMDAwMDAwMDAuLjdkYTc1NTFmOThl NA0KLS0tIC9kZXYvbnVsbA0KKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3 Ni9tdDc5MTUvbWFjLmgNCkBAIC0wLDAgKzEsMzI4IEBADQorLyogU1BEWC1MaWNlbnNlLUlkZW50 aWZpZXI6IElTQyAqLw0KKy8qIENvcHlyaWdodCAoQykgMjAyMCBNZWRpYVRlayBJbmMuICovDQor DQorI2lmbmRlZiBfX01UNzkxNV9NQUNfSA0KKyNkZWZpbmUgX19NVDc5MTVfTUFDX0gNCisNCisj ZGVmaW5lIE1UX0NUX1BBUlNFX0xFTgkJCTcyDQorI2RlZmluZSBNVF9DVF9ETUFfQlVGX05VTQkJ Mg0KKw0KKyNkZWZpbmUgTVRfUlhEMF9MRU5HVEgJCQlHRU5NQVNLKDE1LCAwKQ0KKyNkZWZpbmUg TVRfUlhEMF9QS1RfVFlQRQkJR0VOTUFTSygzMSwgMjcpDQorDQorI2RlZmluZSBNVF9SWEQwX05P Uk1BTF9FVEhfVFlQRV9PRlMJR0VOTUFTSygyMiwgMTYpDQorI2RlZmluZSBNVF9SWEQwX05PUk1B TF9JUF9TVU0JCUJJVCgyMykNCisjZGVmaW5lIE1UX1JYRDBfTk9STUFMX1VEUF9UQ1BfU1VNCUJJ VCgyNCkNCisNCitlbnVtIHJ4X3BrdF90eXBlIHsNCisJUEtUX1RZUEVfVFhTLA0KKwlQS1RfVFlQ RV9UWFJYViwNCisJUEtUX1RZUEVfTk9STUFMLA0KKwlQS1RfVFlQRV9SWF9EVVBfUkZCLA0KKwlQ S1RfVFlQRV9SWF9UTVIsDQorCVBLVF9UWVBFX1JFVFJJRVZFLA0KKwlQS1RfVFlQRV9UWFJYX05P VElGWSwNCisJUEtUX1RZUEVfUlhfRVZFTlQsDQorfTsNCisNCisvKiBSWEQgRFcxICovDQorI2Rl ZmluZSBNVF9SWEQxX05PUk1BTF9XTEFOX0lEWAkJR0VOTUFTSyg5LCAwKQ0KKyNkZWZpbmUgTVRf UlhEMV9OT1JNQUxfR1JPVVBfMQkJQklUKDExKQ0KKyNkZWZpbmUgTVRfUlhEMV9OT1JNQUxfR1JP VVBfMgkJQklUKDEyKQ0KKyNkZWZpbmUgTVRfUlhEMV9OT1JNQUxfR1JPVVBfMwkJQklUKDEzKQ0K KyNkZWZpbmUgTVRfUlhEMV9OT1JNQUxfR1JPVVBfNAkJQklUKDE0KQ0KKyNkZWZpbmUgTVRfUlhE MV9OT1JNQUxfR1JPVVBfNQkJQklUKDE1KQ0KKyNkZWZpbmUgTVRfUlhEMV9OT1JNQUxfU0VDX01P REUJCUdFTk1BU0soMjAsIDE2KQ0KKyNkZWZpbmUgTVRfUlhEMV9OT1JNQUxfS0VZX0lECQlHRU5N QVNLKDIyLCAyMSkNCisjZGVmaW5lIE1UX1JYRDFfTk9STUFMX0NNCQlCSVQoMjMpDQorI2RlZmlu ZSBNVF9SWEQxX05PUk1BTF9DTE0JCUJJVCgyNCkNCisjZGVmaW5lIE1UX1JYRDFfTk9STUFMX0lD Vl9FUlIJCUJJVCgyNSkNCisjZGVmaW5lIE1UX1JYRDFfTk9STUFMX1RLSVBfTUlDX0VSUglCSVQo MjYpDQorI2RlZmluZSBNVF9SWEQxX05PUk1BTF9GQ1NfRVJSCQlCSVQoMjcpDQorI2RlZmluZSBN VF9SWEQxX05PUk1BTF9CQU5EX0lEWAkJQklUKDI4KQ0KKyNkZWZpbmUgTVRfUlhEMV9OT1JNQUxf U1BQX0VOCQlCSVQoMjkpDQorI2RlZmluZSBNVF9SWEQxX05PUk1BTF9BRERfT00JCUJJVCgzMCkN CisjZGVmaW5lIE1UX1JYRDFfTk9STUFMX1NFQ19ET05FCQlCSVQoMzEpDQorDQorLyogUlhEIERX MiAqLw0KKyNkZWZpbmUgTVRfUlhEMl9OT1JNQUxfQlNTSUQJCUdFTk1BU0soNSwgMCkNCisjZGVm aW5lIE1UX1JYRDJfTk9STUFMX0NPX0FOVAkJQklUKDYpDQorI2RlZmluZSBNVF9SWEQyX05PUk1B TF9CRl9DUUkJCUJJVCg3KQ0KKyNkZWZpbmUgTVRfUlhEMl9OT1JNQUxfTUFDX0hEUl9MRU4JR0VO TUFTSygxMiwgOCkNCisjZGVmaW5lIE1UX1JYRDJfTk9STUFMX0hEUl9UUkFOUwlCSVQoMTMpDQor I2RlZmluZSBNVF9SWEQyX05PUk1BTF9IRFJfT0ZGU0VUCUdFTk1BU0soMTUsIDE0KQ0KKyNkZWZp bmUgTVRfUlhEMl9OT1JNQUxfVElECQlHRU5NQVNLKDE5LCAxNikNCisjZGVmaW5lIE1UX1JYRDJf Tk9STUFMX01VX0JBUgkJQklUKDIxKQ0KKyNkZWZpbmUgTVRfUlhEMl9OT1JNQUxfU1dfQklUCQlC SVQoMjIpDQorI2RlZmluZSBNVF9SWEQyX05PUk1BTF9BTVNEVV9FUlIJQklUKDIzKQ0KKyNkZWZp bmUgTVRfUlhEMl9OT1JNQUxfTUFYX0xFTl9FUlJPUglCSVQoMjQpDQorI2RlZmluZSBNVF9SWEQy X05PUk1BTF9IRFJfVFJBTlNfRVJST1IJQklUKDI1KQ0KKyNkZWZpbmUgTVRfUlhEMl9OT1JNQUxf SU5UX0ZSQU1FCUJJVCgyNikNCisjZGVmaW5lIE1UX1JYRDJfTk9STUFMX0ZSQUcJCUJJVCgyNykN CisjZGVmaW5lIE1UX1JYRDJfTk9STUFMX05VTExfRlJBTUUJQklUKDI4KQ0KKyNkZWZpbmUgTVRf UlhEMl9OT1JNQUxfTkRBVEEJCUJJVCgyOSkNCisjZGVmaW5lIE1UX1JYRDJfTk9STUFMX05PTl9B TVBEVQlCSVQoMzApDQorI2RlZmluZSBNVF9SWEQyX05PUk1BTF9CRl9SRVBPUlQJQklUKDMxKQ0K Kw0KKy8qIFJYRCBEVzMgKi8NCisjZGVmaW5lIE1UX1JYRDNfTk9STUFMX1JYVl9TRVEJCUdFTk1B U0soNywgMCkNCisjZGVmaW5lIE1UX1JYRDNfTk9STUFMX0NIX0ZSRVEJCUdFTk1BU0soMTUsIDgp DQorI2RlZmluZSBNVF9SWEQzX05PUk1BTF9BRERSX1RZUEUJR0VOTUFTSygxNywgMTYpDQorI2Rl ZmluZSBNVF9SWEQzX05PUk1BTF9VMk0JCUJJVCgwKQ0KKyNkZWZpbmUgTVRfUlhEM19OT1JNQUxf SFRDX1ZMRAkJQklUKDApDQorI2RlZmluZSBNVF9SWEQzX05PUk1BTF9UU0ZfQ09NUEFSRV9MT1NT CUJJVCgxOSkNCisjZGVmaW5lIE1UX1JYRDNfTk9STUFMX0JFQUNPTl9NQwlCSVQoMjApDQorI2Rl ZmluZSBNVF9SWEQzX05PUk1BTF9CRUFDT05fVUMJQklUKDIxKQ0KKyNkZWZpbmUgTVRfUlhEM19O T1JNQUxfQU1TRFUJCUJJVCgyMikNCisjZGVmaW5lIE1UX1JYRDNfTk9STUFMX01FU0gJCUJJVCgy MykNCisjZGVmaW5lIE1UX1JYRDNfTk9STUFMX01IQ1AJCUJJVCgyNCkNCisjZGVmaW5lIE1UX1JY RDNfTk9STUFMX05PX0lORk9fV0IJQklUKDI1KQ0KKyNkZWZpbmUgTVRfUlhEM19OT1JNQUxfRElT QUJMRV9SWF9IRFJfVFJBTlMJQklUKDI2KQ0KKyNkZWZpbmUgTVRfUlhEM19OT1JNQUxfUE9XRVJf U0FWRV9TVEFUCUJJVCgyNykNCisjZGVmaW5lIE1UX1JYRDNfTk9STUFMX01PUkUJCUJJVCgyOCkN CisjZGVmaW5lIE1UX1JYRDNfTk9STUFMX1VOV0FOVAkJQklUKDI5KQ0KKyNkZWZpbmUgTVRfUlhE M19OT1JNQUxfUlhfRFJPUAkJQklUKDMwKQ0KKyNkZWZpbmUgTVRfUlhEM19OT1JNQUxfVkxBTjJF VEgJCUJJVCgzMSkNCisNCisvKiBSWEQgRFc0ICovDQorI2RlZmluZSBNVF9SWEQ0X05PUk1BTF9Q QVlMT0FEX0ZPUk1BVAlHRU5NQVNLKDEsIDApDQorI2RlZmluZSBNVF9SWEQ0X05PUk1BTF9QQVRU RVJOX0RST1AJQklUKDkpDQorI2RlZmluZSBNVF9SWEQ0X05PUk1BTF9DTFMJCUJJVCgxMCkNCisj ZGVmaW5lIE1UX1JYRDRfTk9STUFMX09GTEQJCUdFTk1BU0soMTIsIDExKQ0KKyNkZWZpbmUgTVRf UlhENF9OT1JNQUxfTUFHSUNfUEtUCUJJVCgxMykNCisjZGVmaW5lIE1UX1JYRDRfTk9STUFMX1dP TAkJR0VOTUFTSygxOCwgMTQpDQorI2RlZmluZSBNVF9SWEQ0X05PUk1BTF9DTFNfQklUTUFQCUdF Tk1BU0soMjgsIDE5KQ0KKyNkZWZpbmUgTVRfUlhEM19OT1JNQUxfUEZfTU9ERQkJQklUKDI5KQ0K KyNkZWZpbmUgTVRfUlhEM19OT1JNQUxfUEZfU1RTCQlHRU5NQVNLKDMxLCAzMCkNCisNCisvKiBQ LVJYViAqLw0KKyNkZWZpbmUgTVRfUFJYVl9UWF9SQVRFCQkJR0VOTUFTSyg2LCAwKQ0KKyNkZWZp bmUgTVRfUFJYVl9OU1RTCQkJR0VOTUFTSyg5LCA3KQ0KKyNkZWZpbmUgTVRfUFJYVl9IVF9BRF9D T0RFCQlCSVQoMTEpDQorI2RlZmluZSBNVF9QUlhWX1JDUEkzCQkJR0VOTUFTSygzMSwgMjQpDQor I2RlZmluZSBNVF9QUlhWX1JDUEkyCQkJR0VOTUFTSygyMywgMTYpDQorI2RlZmluZSBNVF9QUlhW X1JDUEkxCQkJR0VOTUFTSygxNSwgOCkNCisjZGVmaW5lIE1UX1BSWFZfUkNQSTAJCQlHRU5NQVNL KDcsIDApDQorDQorLyogQy1SWFYgKi8NCisjZGVmaW5lIE1UX0NSWFZfSFRfU1RCQwkJCUdFTk1B U0soMSwgMCkNCisjZGVmaW5lIE1UX0NSWFZfVFhfTU9ERQkJCUdFTk1BU0soNywgNCkNCisjZGVm aW5lIE1UX0NSWFZfRlJBTUVfTU9ERQkJR0VOTUFTSygxMCwgOCkNCisjZGVmaW5lIE1UX0NSWFZf SFRfU0hPUlRfR0kJCUdFTk1BU0soMTQsIDEzKQ0KKw0KK3N0cnVjdCBtdDc5MTVfcnh2IHsNCisJ dTMyIHBoeTsNCisNCisJLyogUC1SWFY6IGJpdCAwfjEsIEMtUlhWOiBiaXQgMn4xOSAqLw0KKwlf X2xlMzIgdlsyMF07DQorfTsNCisNCitlbnVtIHR4X2hlYWRlcl9mb3JtYXQgew0KKwlNVF9IRFJf Rk9STUFUXzgwMl8zLA0KKwlNVF9IRFJfRk9STUFUX0NNRCwNCisJTVRfSERSX0ZPUk1BVF84MDJf MTEsDQorCU1UX0hEUl9GT1JNQVRfODAyXzExX0VYVCwNCit9Ow0KKw0KK2VudW0gdHhfcGt0X3R5 cGUgew0KKwlNVF9UWF9UWVBFX0NULA0KKwlNVF9UWF9UWVBFX1NGLA0KKwlNVF9UWF9UWVBFX0NN RCwNCisJTVRfVFhfVFlQRV9GVywNCit9Ow0KKw0KK2VudW0gdHhfcGt0X3F1ZXVlX2lkeCB7DQor CU1UX0xNQUNfQUMwMCwNCisJTVRfTE1BQ19BQzAxLA0KKwlNVF9MTUFDX0FDMDIsDQorCU1UX0xN QUNfQUMwMywNCisJTVRfTE1BQ19BTFRYMCA9IDB4MTAsDQorCU1UX0xNQUNfQk1DMCA9IDB4MTAs DQorCU1UX0xNQUNfQkNOMCA9IDB4MTIsDQorfTsNCisNCitlbnVtIHR4X3BvcnRfaWR4IHsNCisJ TVRfVFhfUE9SVF9JRFhfTE1BQywNCisJTVRfVFhfUE9SVF9JRFhfTUNVDQorfTsNCisNCitlbnVt IHR4X21jdV9wb3J0X3FfaWR4IHsNCisJTVRfVFhfTUNVX1BPUlRfUlhfUTAgPSAweDIwLA0KKwlN VF9UWF9NQ1VfUE9SVF9SWF9RMSwNCisJTVRfVFhfTUNVX1BPUlRfUlhfUTIsDQorCU1UX1RYX01D VV9QT1JUX1JYX1EzLA0KKwlNVF9UWF9NQ1VfUE9SVF9SWF9GV0RMID0gMHgzZQ0KK307DQorDQor I2RlZmluZSBNVF9DVF9JTkZPX0FQUExZX1RYRAkJQklUKDApDQorI2RlZmluZSBNVF9DVF9JTkZP X0NPUFlfSE9TVF9UWERfQUxMCUJJVCgxKQ0KKyNkZWZpbmUgTVRfQ1RfSU5GT19NR01UX0ZSQU1F CQlCSVQoMikNCisjZGVmaW5lIE1UX0NUX0lORk9fTk9ORV9DSVBIRVJfRlJBTUUJQklUKDMpDQor I2RlZmluZSBNVF9DVF9JTkZPX0hTUjJfVFgJCUJJVCg0KQ0KKw0KKyNkZWZpbmUgTVRfVFhEX1NJ WkUJCQkoOCAqIDQpDQorDQorI2RlZmluZSBNVF9UWEQwX1FfSURYCQkJR0VOTUFTSygzMSwgMjUp DQorI2RlZmluZSBNVF9UWEQwX1BLVF9GTVQJCQlHRU5NQVNLKDI0LCAyMykNCisjZGVmaW5lIE1U X1RYRDBfRVRIX1RZUEVfT0ZGU0VUCQlHRU5NQVNLKDIyLCAxNikNCisjZGVmaW5lIE1UX1RYRDBf VFhfQllURVMJCUdFTk1BU0soMTUsIDApDQorDQorI2RlZmluZSBNVF9UWEQxX0xPTkdfRk9STUFU CQlCSVQoMzEpDQorI2RlZmluZSBNVF9UWEQxX1RHSUQJCQlCSVQoMzApDQorI2RlZmluZSBNVF9U WEQxX09XTl9NQUMJCQlHRU5NQVNLKDI5LCAyNCkNCisjZGVmaW5lIE1UX1RYRDFfQU1TRFUJCQlC SVQoMjMpDQorI2RlZmluZSBNVF9UWEQxX1RJRAkJCUdFTk1BU0soMjIsIDIwKQ0KKyNkZWZpbmUg TVRfVFhEMV9IRFJfUEFECQkJR0VOTUFTSygxOSwgMTgpDQorI2RlZmluZSBNVF9UWEQxX0hEUl9G T1JNQVQJCUdFTk1BU0soMTcsIDE2KQ0KKyNkZWZpbmUgTVRfVFhEMV9IRFJfSU5GTwkJR0VOTUFT SygxNSwgMTEpDQorI2RlZmluZSBNVF9UWEQxX1ZUQQkJCUJJVCgxMCkNCisjZGVmaW5lIE1UX1RY RDFfV0xBTl9JRFgJCUdFTk1BU0soOSwgMCkNCisNCisjZGVmaW5lIE1UX1RYRDJfRklYX1JBVEUJ CUJJVCgzMSkNCisjZGVmaW5lIE1UX1RYRDJfRklYRURfUkFURQkJQklUKDMwKQ0KKyNkZWZpbmUg TVRfVFhEMl9QT1dFUl9PRkZTRVQJCUdFTk1BU0soMjksIDI0KQ0KKyNkZWZpbmUgTVRfVFhEMl9N QVhfVFhfVElNRQkJR0VOTUFTSygyMywgMTYpDQorI2RlZmluZSBNVF9UWEQyX0ZSQUcJCQlHRU5N QVNLKDE1LCAxNCkNCisjZGVmaW5lIE1UX1RYRDJfSFRDX1ZMRAkJCUJJVCgxMykNCisjZGVmaW5l IE1UX1RYRDJfRFVSQVRJT04JCUJJVCgxMikNCisjZGVmaW5lIE1UX1RYRDJfQklQCQkJQklUKDEx KQ0KKyNkZWZpbmUgTVRfVFhEMl9NVUxUSUNBU1QJCUJJVCgxMCkNCisjZGVmaW5lIE1UX1RYRDJf UlRTCQkJQklUKDkpDQorI2RlZmluZSBNVF9UWEQyX1NPVU5ESU5HCQlCSVQoOCkNCisjZGVmaW5l IE1UX1RYRDJfTkRQQQkJCUJJVCg3KQ0KKyNkZWZpbmUgTVRfVFhEMl9ORFAJCQlCSVQoNikNCisj ZGVmaW5lIE1UX1RYRDJfRlJBTUVfVFlQRQkJR0VOTUFTSyg1LCA0KQ0KKyNkZWZpbmUgTVRfVFhE Ml9TVUJfVFlQRQkJR0VOTUFTSygzLCAwKQ0KKw0KKyNkZWZpbmUgTVRfVFhEM19TTl9WQUxJRAkJ QklUKDMxKQ0KKyNkZWZpbmUgTVRfVFhEM19QTl9WQUxJRAkJQklUKDMwKQ0KKyNkZWZpbmUgTVRf VFhEM19TV19QT1dFUl9NR01UCQlCSVQoMjkpDQorI2RlZmluZSBNVF9UWEQzX0JBX0RJU0FCTEUJ CUJJVCgyOCkNCisjZGVmaW5lIE1UX1RYRDNfU0VRCQkJR0VOTUFTSygyNywgMTYpDQorI2RlZmlu ZSBNVF9UWEQzX1JFTV9UWF9DT1VOVAkJR0VOTUFTSygxNSwgMTEpDQorI2RlZmluZSBNVF9UWEQz X1RYX0NPVU5UCQlHRU5NQVNLKDEwLCA2KQ0KKyNkZWZpbmUgTVRfVFhEM19USU1JTkdfTUVBU1VS RQkJQklUKDUpDQorI2RlZmluZSBNVF9UWEQzX0RBUwkJCUJJVCg0KQ0KKyNkZWZpbmUgTVRfVFhE M19FRU9TUAkJCUJJVCgzKQ0KKyNkZWZpbmUgTVRfVFhEM19FTVJECQkJQklUKDIpDQorI2RlZmlu ZSBNVF9UWEQzX1BST1RFQ1RfRlJBTUUJCUJJVCgxKQ0KKyNkZWZpbmUgTVRfVFhEM19OT19BQ0sJ CQlCSVQoMCkNCisNCisjZGVmaW5lIE1UX1RYRDRfUE5fTE9XCQkJR0VOTUFTSygzMSwgMCkNCisN CisjZGVmaW5lIE1UX1RYRDVfUE5fSElHSAkJCUdFTk1BU0soMzEsIDE2KQ0KKyNkZWZpbmUgTVRf VFhENV9NRAkJCUJJVCgxNSkNCisjZGVmaW5lIE1UX1RYRDVfQUREX0JBCQkJQklUKDE0KQ0KKyNk ZWZpbmUgTVRfVFhENV9UWF9TVEFUVVNfSE9TVAkJQklUKDEwKQ0KKyNkZWZpbmUgTVRfVFhENV9U WF9TVEFUVVNfTUNVCQlCSVQoOSkNCisjZGVmaW5lIE1UX1RYRDVfVFhfU1RBVFVTX0ZNVAkJQklU KDgpDQorI2RlZmluZSBNVF9UWEQ1X1BJRAkJCUdFTk1BU0soNywgMCkNCisNCisjZGVmaW5lIE1U X1RYRDZfVFhfSUJGCQkJQklUKDMxKQ0KKyNkZWZpbmUgTVRfVFhENl9UWF9FQkYJCQlCSVQoMzAp DQorI2RlZmluZSBNVF9UWEQ2X1RYX1JBVEUJCQlHRU5NQVNLKDI5LCAxNikNCisjZGVmaW5lIE1U X1RYRDZfU0dJCQkJR0VOTUFTSygxNSwgMTQpDQorI2RlZmluZSBNVF9UWEQ2X0hFTFRGCQkJR0VO TUFTSygxMywgMTIpDQorI2RlZmluZSBNVF9UWEQ2X0xEUEMJCQlCSVQoMTEpDQorI2RlZmluZSBN VF9UWEQ2X1NQRV9JRF9JRFgJCUJJVCgxMCkNCisjZGVmaW5lIE1UX1RYRDZfQU5UX0lECQkJR0VO TUFTSyg3LCA0KQ0KKyNkZWZpbmUgTVRfVFhENl9EWU5fQlcJCQlCSVQoMykNCisjZGVmaW5lIE1U X1RYRDZfRklYRURfQlcJCUJJVCgyKQ0KKyNkZWZpbmUgTVRfVFhENl9CVwkJCUdFTk1BU0soMiwg MCkNCisNCisjZGVmaW5lIE1UX1RYRDdfVFhEX0xFTgkJCUdFTk1BU0soMzEsIDMwKQ0KKyNkZWZp bmUgTVRfVFhEN19VRFBfVENQX1NVTQkJQklUKDI5KQ0KKyNkZWZpbmUgTVRfVFhEN19JUF9TVU0J CQlCSVQoMjgpDQorDQorI2RlZmluZSBNVF9UWEQ3X1RZUEUJCQlHRU5NQVNLKDIxLCAyMCkNCisj ZGVmaW5lIE1UX1RYRDdfU1VCX1RZUEUJCUdFTk1BU0soMTksIDE2KQ0KKw0KKyNkZWZpbmUgTVRf VFhEN19QU0VfRklECQkJR0VOTUFTSygyNywgMTYpDQorI2RlZmluZSBNVF9UWEQ3X1NQRV9JRFgJ CQlHRU5NQVNLKDE1LCAxMSkNCisjZGVmaW5lIE1UX1RYRDdfSFdfQU1TRFUJCUJJVCgxMCkNCisj ZGVmaW5lIE1UX1RYRDdfVFhfVElNRQkJCUdFTk1BU0soOSwgMCkNCisNCisjZGVmaW5lIE1UX1RY X1JBVEVfU1RCQwkJCUJJVCgxMykNCisjZGVmaW5lIE1UX1RYX1JBVEVfTlNTCQkJR0VOTUFTSygx MiwgMTApDQorI2RlZmluZSBNVF9UWF9SQVRFX01PREUJCQlHRU5NQVNLKDksIDYpDQorI2RlZmlu ZSBNVF9UWF9SQVRFX0lEWAkJCUdFTk1BU0soNSwgMCkNCisNCisjZGVmaW5lIE1UX1RYUF9NQVhf QlVGX05VTQkJNg0KKw0KK3N0cnVjdCBtdDc5MTVfdHhwIHsNCisJX19sZTE2IGZsYWdzOw0KKwlf X2xlMTYgdG9rZW47DQorCXU4IGJzc19pZHg7DQorCXU4IHJlcHRfd2RzX3djaWQ7DQorCXU4IHJz djsNCisJdTggbmJ1ZjsNCisJX19sZTMyIGJ1ZltNVF9UWFBfTUFYX0JVRl9OVU1dOw0KKwlfX2xl MTYgbGVuW01UX1RYUF9NQVhfQlVGX05VTV07DQorfSBfX3BhY2tlZCBfX2FsaWduZWQoNCk7DQor DQorc3RydWN0IG10NzkxNV90eF9mcmVlIHsNCisJX19sZTE2IHJ4X2J5dGVfY250Ow0KKwlfX2xl MTYgY3RybDsNCisJdTggdHhkX2NudDsNCisJdTggcnN2WzNdOw0KKwlfX2xlMzIgaW5mb1tdOw0K K30gX19wYWNrZWQgX19hbGlnbmVkKDQpOw0KKw0KKyNkZWZpbmUgTVRfVFhfRlJFRV9NU0RVX0NO VAkJR0VOTUFTSyg5LCAwKQ0KKyNkZWZpbmUgTVRfVFhfRlJFRV9XTEFOX0lECQlHRU5NQVNLKDIz LCAxNCkNCisjZGVmaW5lIE1UX1RYX0ZSRUVfTEFURU5DWQkJR0VOTUFTSygxMiwgMCkNCisvKiAw OiBzdWNjZXNzLCBvdGhlcnM6IGRyb3BwZWQgKi8NCisjZGVmaW5lIE1UX1RYX0ZSRUVfU1RBVFVT CQlHRU5NQVNLKDE0LCAxMykNCisjZGVmaW5lIE1UX1RYX0ZSRUVfTVNEVV9JRAkJR0VOTUFTSygz MCwgMTYpDQorI2RlZmluZSBNVF9UWF9GUkVFX1BBSVIJCQlCSVQoMzEpDQorLyogd2lsbCBzdXBw b3J0IHRoaXMgZmllbGQgaW4gZnVydGhlciByZXZpc2lvbiAqLw0KKyNkZWZpbmUgTVRfVFhfRlJF RV9SQVRFCQkJR0VOTUFTSygxMywgMCkNCisNCitzdHJ1Y3QgbXQ3OTE1X2Rmc19wdWxzZSB7DQor CXUzMiBtYXhfd2lkdGg7CQkvKiB1cyAqLw0KKwlpbnQgbWF4X3B3cjsJCS8qIGRibSAqLw0KKwlp bnQgbWluX3B3cjsJCS8qIGRibSAqLw0KKwl1MzIgbWluX3N0Z3JfcHJpOwkvKiB1cyAqLw0KKwl1 MzIgbWF4X3N0Z3JfcHJpOwkvKiB1cyAqLw0KKwl1MzIgbWluX2NyX3ByaTsJCS8qIHVzICovDQor CXUzMiBtYXhfY3JfcHJpOwkJLyogdXMgKi8NCit9Ow0KKw0KK3N0cnVjdCBtdDc5MTVfZGZzX3Bh dHRlcm4gew0KKwl1OCBlbmI7DQorCXU4IHN0Z3I7DQorCXU4IG1pbl9jcnBuOw0KKwl1OCBtYXhf Y3JwbjsNCisJdTggbWluX2NycHI7DQorCXU4IG1pbl9wdzsNCisJdTMyIG1pbl9wcmk7DQorCXUz MiBtYXhfcHJpOw0KKwl1OCBtYXhfcHc7DQorCXU4IG1pbl9jcmJuOw0KKwl1OCBtYXhfY3JibjsN CisJdTggbWluX3N0Z3BuOw0KKwl1OCBtYXhfc3RncG47DQorCXU4IG1pbl9zdGdwcjsNCisJdTgg cnN2WzJdOw0KKwl1MzIgbWluX3N0Z3ByX2RpZmY7DQorfSBfX3BhY2tlZDsNCisNCitzdHJ1Y3Qg bXQ3OTE1X2Rmc19yYWRhcl9zcGVjIHsNCisJc3RydWN0IG10NzkxNV9kZnNfcHVsc2UgcHVsc2Vf dGg7DQorCXN0cnVjdCBtdDc5MTVfZGZzX3BhdHRlcm4gcmFkYXJfcGF0dGVyblsxNl07DQorfTsN CisNCitzdGF0aWMgaW5saW5lIHN0cnVjdCBtdDc5MTVfdHhwICoNCittdDc5MTVfdHh3aV90b190 eHAoc3RydWN0IG10NzZfZGV2ICpkZXYsIHN0cnVjdCBtdDc2X3R4d2lfY2FjaGUgKnQpDQorew0K Kwl1OCAqdHh3aTsNCisNCisJaWYgKCF0KQ0KKwkJcmV0dXJuIE5VTEw7DQorDQorCXR4d2kgPSBt dDc2X2dldF90eHdpX3B0cihkZXYsIHQpOw0KKw0KKwlyZXR1cm4gKHN0cnVjdCBtdDc5MTVfdHhw ICopKHR4d2kgKyBNVF9UWERfU0laRSk7DQorfQ0KKw0KKyNlbmRpZg0KZGlmZiAtLWdpdCBhL2Ry aXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTE1L21haW4uYyBiL2RyaXZlcnMv bmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTE1L21haW4uYw0KbmV3IGZpbGUgbW9kZSAx MDA2NDQNCmluZGV4IDAwMDAwMDAwMDAwMC4uYWU1ZWQ0MWQzMzdiDQotLS0gL2Rldi9udWxsDQor KysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkxNS9tYWluLmMNCkBA IC0wLDAgKzEsNzQxIEBADQorLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IElTQw0KKy8qIENv cHlyaWdodCAoQykgMjAyMCBNZWRpYVRlayBJbmMuICovDQorDQorI2luY2x1ZGUgPGxpbnV4L2V0 aGVyZGV2aWNlLmg+DQorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPg0KKyNpbmNs dWRlIDxsaW51eC9wY2kuaD4NCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+DQorI2luY2x1ZGUg Im10NzkxNS5oIg0KKyNpbmNsdWRlICJtY3UuaCINCisNCitzdGF0aWMgYm9vbCBtdDc5MTVfZGV2 X3J1bm5pbmcoc3RydWN0IG10NzkxNV9kZXYgKmRldikNCit7DQorCXN0cnVjdCBtdDc5MTVfcGh5 ICpwaHk7DQorDQorCWlmICh0ZXN0X2JpdChNVDc2X1NUQVRFX1JVTk5JTkcsICZkZXYtPm1waHku c3RhdGUpKQ0KKwkJcmV0dXJuIHRydWU7DQorDQorCXBoeSA9IG10NzkxNV9leHRfcGh5KGRldik7 DQorDQorCXJldHVybiBwaHkgJiYgdGVzdF9iaXQoTVQ3Nl9TVEFURV9SVU5OSU5HLCAmcGh5LT5t dDc2LT5zdGF0ZSk7DQorfQ0KKw0KK3N0YXRpYyBpbnQgbXQ3OTE1X3N0YXJ0KHN0cnVjdCBpZWVl ODAyMTFfaHcgKmh3KQ0KK3sNCisJc3RydWN0IG10NzkxNV9kZXYgKmRldiA9IG10NzkxNV9od19k ZXYoaHcpOw0KKwlzdHJ1Y3QgbXQ3OTE1X3BoeSAqcGh5ID0gbXQ3OTE1X2h3X3BoeShodyk7DQor CWJvb2wgcnVubmluZzsNCisNCisJbXV0ZXhfbG9jaygmZGV2LT5tdDc2Lm11dGV4KTsNCisNCisJ cnVubmluZyA9IG10NzkxNV9kZXZfcnVubmluZyhkZXYpOw0KKw0KKwlpZiAoIXJ1bm5pbmcpIHsN CisJCW10NzkxNV9tY3Vfc2V0X3BtKGRldiwgMCwgMCk7DQorCQltdDc5MTVfbWN1X3NldF9tYWMo ZGV2LCAwLCB0cnVlLCBmYWxzZSk7DQorCQltdDc5MTVfbWN1X3NldF9zY3MoZGV2LCAwLCB0cnVl KTsNCisJfQ0KKw0KKwlpZiAocGh5ICE9ICZkZXYtPnBoeSkgew0KKwkJbXQ3OTE1X21jdV9zZXRf cG0oZGV2LCAxLCAwKTsNCisJCW10NzkxNV9tY3Vfc2V0X21hYyhkZXYsIDEsIHRydWUsIGZhbHNl KTsNCisJCW10NzkxNV9tY3Vfc2V0X3NjcyhkZXYsIDEsIHRydWUpOw0KKwl9DQorDQorCW10Nzkx NV9tY3Vfc2V0X2NoYW5faW5mbyhwaHksIE1DVV9FWFRfQ01EX1NFVF9SWF9QQVRIKTsNCisNCisJ c2V0X2JpdChNVDc2X1NUQVRFX1JVTk5JTkcsICZwaHktPm10NzYtPnN0YXRlKTsNCisNCisJaWYg KHJ1bm5pbmcpDQorCQlnb3RvIG91dDsNCisNCisJbXQ3OTE1X21hY19yZXNldF9jb3VudGVycyhw aHkpOw0KKw0KKwlpZWVlODAyMTFfcXVldWVfZGVsYXllZF93b3JrKG10NzZfaHcoZGV2KSwgJmRl di0+bXQ3Ni5tYWNfd29yaywNCisJCQkJICAgICBNVDc5MTVfV0FUQ0hET0dfVElNRSk7DQorb3V0 Og0KKwltdXRleF91bmxvY2soJmRldi0+bXQ3Ni5tdXRleCk7DQorDQorCXJldHVybiAwOw0KK30N CisNCitzdGF0aWMgdm9pZCBtdDc5MTVfc3RvcChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodykNCit7 DQorCXN0cnVjdCBtdDc5MTVfZGV2ICpkZXYgPSBtdDc5MTVfaHdfZGV2KGh3KTsNCisJc3RydWN0 IG10NzkxNV9waHkgKnBoeSA9IG10NzkxNV9od19waHkoaHcpOw0KKw0KKwltdXRleF9sb2NrKCZk ZXYtPm10NzYubXV0ZXgpOw0KKw0KKwljbGVhcl9iaXQoTVQ3Nl9TVEFURV9SVU5OSU5HLCAmcGh5 LT5tdDc2LT5zdGF0ZSk7DQorDQorCWlmIChwaHkgIT0gJmRldi0+cGh5KSB7DQorCQltdDc5MTVf bWN1X3NldF9wbShkZXYsIDEsIDEpOw0KKwkJbXQ3OTE1X21jdV9zZXRfbWFjKGRldiwgMSwgZmFs c2UsIGZhbHNlKTsNCisJfQ0KKw0KKwlpZiAoIW10NzkxNV9kZXZfcnVubmluZyhkZXYpKSB7DQor CQljYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoJmRldi0+bXQ3Ni5tYWNfd29yayk7DQorDQorCQlt dDc5MTVfbWN1X3NldF9wbShkZXYsIDAsIDEpOw0KKwkJbXQ3OTE1X21jdV9zZXRfbWFjKGRldiwg MCwgZmFsc2UsIGZhbHNlKTsNCisJfQ0KKw0KKwltdXRleF91bmxvY2soJmRldi0+bXQ3Ni5tdXRl eCk7DQorfQ0KKw0KK3N0YXRpYyBpbnQgZ2V0X29tYWNfaWR4KGVudW0gbmw4MDIxMV9pZnR5cGUg dHlwZSwgdTMyIG1hc2spDQorew0KKwlpbnQgaTsNCisNCisJc3dpdGNoICh0eXBlKSB7DQorCWNh c2UgTkw4MDIxMV9JRlRZUEVfTU9OSVRPUjoNCisJY2FzZSBOTDgwMjExX0lGVFlQRV9BUDoNCisJ CS8qIGFwIHVzZXMgaHcgYnNzaWQgMCBhbmQgZXh0IGJzc2lkICovDQorCQlpZiAofm1hc2sgJiBC SVQoSFdfQlNTSURfMCkpDQorCQkJcmV0dXJuIEhXX0JTU0lEXzA7DQorDQorCQlmb3IgKGkgPSBF WFRfQlNTSURfMTsgaSA8IEVYVF9CU1NJRF9FTkQ7IGkrKykNCisJCQlpZiAofm1hc2sgJiBCSVQo aSkpDQorCQkJCXJldHVybiBpOw0KKwkJYnJlYWs7DQorCWNhc2UgTkw4MDIxMV9JRlRZUEVfTUVT SF9QT0lOVDoNCisJY2FzZSBOTDgwMjExX0lGVFlQRV9BREhPQzoNCisJY2FzZSBOTDgwMjExX0lG VFlQRV9TVEFUSU9OOg0KKwkJLyogc3RhdGlvbiB1c2VzIGh3IGJzc2lkIG90aGVyIHRoYW4gMCAq Lw0KKwkJZm9yIChpID0gSFdfQlNTSURfMTsgaSA8IEhXX0JTU0lEX01BWDsgaSsrKQ0KKwkJCWlm ICh+bWFzayAmIEJJVChpKSkNCisJCQkJcmV0dXJuIGk7DQorCQlicmVhazsNCisJZGVmYXVsdDoN CisJCVdBUk5fT04oMSk7DQorCQlicmVhazsNCisJfQ0KKw0KKwlyZXR1cm4gLTE7DQorfQ0KKw0K K3N0YXRpYyBpbnQgbXQ3OTE1X2FkZF9pbnRlcmZhY2Uoc3RydWN0IGllZWU4MDIxMV9odyAqaHcs DQorCQkJCXN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYpDQorew0KKwlzdHJ1Y3QgbXQ3OTE1X3Zp ZiAqbXZpZiA9IChzdHJ1Y3QgbXQ3OTE1X3ZpZiAqKXZpZi0+ZHJ2X3ByaXY7DQorCXN0cnVjdCBt dDc5MTVfZGV2ICpkZXYgPSBtdDc5MTVfaHdfZGV2KGh3KTsNCisJc3RydWN0IG10NzkxNV9waHkg KnBoeSA9IG10NzkxNV9od19waHkoaHcpOw0KKwlzdHJ1Y3QgbXQ3Nl90eHEgKm10eHE7DQorCWJv b2wgZXh0X3BoeSA9IHBoeSAhPSAmZGV2LT5waHk7DQorCWludCBpZHgsIHJldCA9IDA7DQorDQor CW11dGV4X2xvY2soJmRldi0+bXQ3Ni5tdXRleCk7DQorDQorCW12aWYtPmlkeCA9IGZmcyh+cGh5 LT52aWZfbWFzaykgLSAxOw0KKwlpZiAobXZpZi0+aWR4ID49IE1UNzkxNV9NQVhfSU5URVJGQUNF Uykgew0KKwkJcmV0ID0gLUVOT1NQQzsNCisJCWdvdG8gb3V0Ow0KKwl9DQorDQorCWlkeCA9IGdl dF9vbWFjX2lkeCh2aWYtPnR5cGUsIHBoeS0+b21hY19tYXNrKTsNCisJaWYgKGlkeCA8IDApIHsN CisJCXJldCA9IC1FTk9TUEM7DQorCQlnb3RvIG91dDsNCisJfQ0KKwltdmlmLT5vbWFjX2lkeCA9 IGlkeDsNCisJbXZpZi0+ZGV2ID0gZGV2Ow0KKwltdmlmLT5iYW5kX2lkeCA9IGV4dF9waHk7DQor DQorCWlmIChleHRfcGh5KQ0KKwkJbXZpZi0+d21tX2lkeCA9IGV4dF9waHkgKiAoTVQ3OTE1X01B WF9XTU1fU0VUUyAvIDIpICsNCisJCQkJbXZpZi0+aWR4ICUgKE1UNzkxNV9NQVhfV01NX1NFVFMg LyAyKTsNCisJZWxzZQ0KKwkJbXZpZi0+d21tX2lkeCA9IG12aWYtPmlkeCAlIE1UNzkxNV9NQVhf V01NX1NFVFM7DQorDQorCXJldCA9IG10NzkxNV9tY3VfYWRkX2Rldl9pbmZvKGRldiwgdmlmLCB0 cnVlKTsNCisJaWYgKHJldCkNCisJCWdvdG8gb3V0Ow0KKw0KKwlwaHktPnZpZl9tYXNrIHw9IEJJ VChtdmlmLT5pZHgpOw0KKwlwaHktPm9tYWNfbWFzayB8PSBCSVQobXZpZi0+b21hY19pZHgpOw0K Kw0KKwlpZHggPSBNVDc5MTVfV1RCTF9SRVNFUlZFRCAtIG12aWYtPmlkeDsNCisNCisJSU5JVF9M SVNUX0hFQUQoJm12aWYtPnN0YS5wb2xsX2xpc3QpOw0KKwltdmlmLT5zdGEud2NpZC5pZHggPSBp ZHg7DQorCW12aWYtPnN0YS53Y2lkLmV4dF9waHkgPSBtdmlmLT5iYW5kX2lkeDsNCisJbXZpZi0+ c3RhLndjaWQuaHdfa2V5X2lkeCA9IC0xOw0KKwltdmlmLT5zdGEud2NpZC50eF9pbmZvIHw9IE1U X1dDSURfVFhfSU5GT19TRVQ7DQorCW10NzkxNV9tYWNfd3RibF91cGRhdGUoZGV2LCBpZHgsDQor CQkJICAgICAgIE1UX1dUQkxfVVBEQVRFX0FETV9DT1VOVF9DTEVBUik7DQorDQorCXJjdV9hc3Np Z25fcG9pbnRlcihkZXYtPm10NzYud2NpZFtpZHhdLCAmbXZpZi0+c3RhLndjaWQpOw0KKwlpZiAo dmlmLT50eHEpIHsNCisJCW10eHEgPSAoc3RydWN0IG10NzZfdHhxICopdmlmLT50eHEtPmRydl9w cml2Ow0KKwkJbXR4cS0+d2NpZCA9ICZtdmlmLT5zdGEud2NpZDsNCisJCW10NzZfdHhxX2luaXQo JmRldi0+bXQ3NiwgdmlmLT50eHEpOw0KKwl9DQorDQorb3V0Og0KKwltdXRleF91bmxvY2soJmRl di0+bXQ3Ni5tdXRleCk7DQorDQorCXJldHVybiByZXQ7DQorfQ0KKw0KK3N0YXRpYyB2b2lkIG10 NzkxNV9yZW1vdmVfaW50ZXJmYWNlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LA0KKwkJCQkgICAg c3RydWN0IGllZWU4MDIxMV92aWYgKnZpZikNCit7DQorCXN0cnVjdCBtdDc5MTVfdmlmICptdmlm ID0gKHN0cnVjdCBtdDc5MTVfdmlmICopdmlmLT5kcnZfcHJpdjsNCisJc3RydWN0IG10NzkxNV9z dGEgKm1zdGEgPSAmbXZpZi0+c3RhOw0KKwlzdHJ1Y3QgbXQ3OTE1X2RldiAqZGV2ID0gbXQ3OTE1 X2h3X2Rldihodyk7DQorCXN0cnVjdCBtdDc5MTVfcGh5ICpwaHkgPSBtdDc5MTVfaHdfcGh5KGh3 KTsNCisJaW50IGlkeCA9IG1zdGEtPndjaWQuaWR4Ow0KKw0KKwkvKiBUT0RPOiBkaXNhYmxlIGJl YWNvbiBmb3IgdGhlIGJzcyAqLw0KKw0KKwltdDc5MTVfbWN1X2FkZF9kZXZfaW5mbyhkZXYsIHZp ZiwgZmFsc2UpOw0KKw0KKwlyY3VfYXNzaWduX3BvaW50ZXIoZGV2LT5tdDc2LndjaWRbaWR4XSwg TlVMTCk7DQorCWlmICh2aWYtPnR4cSkNCisJCW10NzZfdHhxX3JlbW92ZSgmZGV2LT5tdDc2LCB2 aWYtPnR4cSk7DQorDQorCW11dGV4X2xvY2soJmRldi0+bXQ3Ni5tdXRleCk7DQorCXBoeS0+dmlm X21hc2sgJj0gfkJJVChtdmlmLT5pZHgpOw0KKwlwaHktPm9tYWNfbWFzayAmPSB+QklUKG12aWYt Pm9tYWNfaWR4KTsNCisJbXV0ZXhfdW5sb2NrKCZkZXYtPm10NzYubXV0ZXgpOw0KKw0KKwlzcGlu X2xvY2tfYmgoJmRldi0+c3RhX3BvbGxfbG9jayk7DQorCWlmICghbGlzdF9lbXB0eSgmbXN0YS0+ cG9sbF9saXN0KSkNCisJCWxpc3RfZGVsX2luaXQoJm1zdGEtPnBvbGxfbGlzdCk7DQorCXNwaW5f dW5sb2NrX2JoKCZkZXYtPnN0YV9wb2xsX2xvY2spOw0KK30NCisNCitzdGF0aWMgdm9pZCBtdDc5 MTVfaW5pdF9kZnNfc3RhdGUoc3RydWN0IG10NzkxNV9waHkgKnBoeSkNCit7DQorCXN0cnVjdCBt dDc2X3BoeSAqbXBoeSA9IHBoeS0+bXQ3NjsNCisJc3RydWN0IGllZWU4MDIxMV9odyAqaHcgPSBt cGh5LT5odzsNCisJc3RydWN0IGNmZzgwMjExX2NoYW5fZGVmICpjaGFuZGVmID0gJmh3LT5jb25m LmNoYW5kZWY7DQorDQorCWlmIChody0+Y29uZi5mbGFncyAmIElFRUU4MDIxMV9DT05GX09GRkNI QU5ORUwpDQorCQlyZXR1cm47DQorDQorCWlmICghKGNoYW5kZWYtPmNoYW4tPmZsYWdzICYgSUVF RTgwMjExX0NIQU5fUkFEQVIpKQ0KKwkJcmV0dXJuOw0KKw0KKwlpZiAobXBoeS0+Y2hhbmRlZi5j aGFuLT5jZW50ZXJfZnJlcSA9PSBjaGFuZGVmLT5jaGFuLT5jZW50ZXJfZnJlcSAmJg0KKwkgICAg bXBoeS0+Y2hhbmRlZi53aWR0aCA9PSBjaGFuZGVmLT53aWR0aCkNCisJCXJldHVybjsNCisNCisJ cGh5LT5kZnNfc3RhdGUgPSAtMTsNCit9DQorDQorc3RhdGljIGludCBtdDc5MTVfc2V0X2NoYW5u ZWwoc3RydWN0IG10NzkxNV9waHkgKnBoeSkNCit7DQorCXN0cnVjdCBtdDc5MTVfZGV2ICpkZXYg PSBwaHktPmRldjsNCisJaW50IHJldDsNCisNCisJY2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKCZk ZXYtPm10NzYubWFjX3dvcmspOw0KKw0KKwltdXRleF9sb2NrKCZkZXYtPm10NzYubXV0ZXgpOw0K KwlzZXRfYml0KE1UNzZfUkVTRVQsICZwaHktPm10NzYtPnN0YXRlKTsNCisNCisJbXQ3OTE1X2lu aXRfZGZzX3N0YXRlKHBoeSk7DQorCW10NzZfc2V0X2NoYW5uZWwocGh5LT5tdDc2KTsNCisNCisJ cmV0ID0gbXQ3OTE1X21jdV9zZXRfY2hhbl9pbmZvKHBoeSwgTUNVX0VYVF9DTURfQ0hBTk5FTF9T V0lUQ0gpOw0KKwlpZiAocmV0KQ0KKwkJZ290byBvdXQ7DQorDQorCW10NzkxNV9tYWNfc2V0X3Rp bWluZyhwaHkpOw0KKwlyZXQgPSBtdDc5MTVfZGZzX2luaXRfcmFkYXJfZGV0ZWN0b3IocGh5KTsN CisJbXQ3OTE1X21hY19jY2Ffc3RhdHNfcmVzZXQocGh5KTsNCisNCisJbXQ3OTE1X21hY19yZXNl dF9jb3VudGVycyhwaHkpOw0KKwlwaHktPm5vaXNlID0gMDsNCisNCitvdXQ6DQorCWNsZWFyX2Jp dChNVDc2X1JFU0VULCAmcGh5LT5tdDc2LT5zdGF0ZSk7DQorCW11dGV4X3VubG9jaygmZGV2LT5t dDc2Lm11dGV4KTsNCisNCisJbXQ3Nl90eHFfc2NoZWR1bGVfYWxsKHBoeS0+bXQ3Nik7DQorCWll ZWU4MDIxMV9xdWV1ZV9kZWxheWVkX3dvcmsobXQ3Nl9odyhkZXYpLCAmZGV2LT5tdDc2Lm1hY193 b3JrLA0KKwkJCQkgICAgIE1UNzkxNV9XQVRDSERPR19USU1FKTsNCisNCisJcmV0dXJuIHJldDsN Cit9DQorDQorc3RhdGljIGludCBtdDc5MTVfc2V0X2tleShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpo dywgZW51bSBzZXRfa2V5X2NtZCBjbWQsDQorCQkJICBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlm LCBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhLA0KKwkJCSAgc3RydWN0IGllZWU4MDIxMV9rZXlf Y29uZiAqa2V5KQ0KK3sNCisJc3RydWN0IG10NzkxNV9kZXYgKmRldiA9IG10NzkxNV9od19kZXYo aHcpOw0KKwlzdHJ1Y3QgbXQ3OTE1X3ZpZiAqbXZpZiA9IChzdHJ1Y3QgbXQ3OTE1X3ZpZiAqKXZp Zi0+ZHJ2X3ByaXY7DQorCXN0cnVjdCBtdDc5MTVfc3RhICptc3RhID0gc3RhID8gKHN0cnVjdCBt dDc5MTVfc3RhICopc3RhLT5kcnZfcHJpdiA6DQorCQkJCSAgJm12aWYtPnN0YTsNCisJc3RydWN0 IG10NzZfd2NpZCAqd2NpZCA9ICZtc3RhLT53Y2lkOw0KKwlpbnQgaWR4ID0ga2V5LT5rZXlpZHg7 DQorDQorCS8qIFRoZSBoYXJkd2FyZSBkb2VzIG5vdCBzdXBwb3J0IHBlci1TVEEgUlggR1RLLCBm YWxsYmFjaw0KKwkgKiB0byBzb2Z0d2FyZSBtb2RlIGZvciB0aGVzZS4NCisJICovDQorCWlmICgo dmlmLT50eXBlID09IE5MODAyMTFfSUZUWVBFX0FESE9DIHx8DQorCSAgICAgdmlmLT50eXBlID09 IE5MODAyMTFfSUZUWVBFX01FU0hfUE9JTlQpICYmDQorCSAgICAoa2V5LT5jaXBoZXIgPT0gV0xB Tl9DSVBIRVJfU1VJVEVfVEtJUCB8fA0KKwkgICAgIGtleS0+Y2lwaGVyID09IFdMQU5fQ0lQSEVS X1NVSVRFX0NDTVApICYmDQorCSAgICAhKGtleS0+ZmxhZ3MgJiBJRUVFODAyMTFfS0VZX0ZMQUdf UEFJUldJU0UpKQ0KKwkJcmV0dXJuIC1FT1BOT1RTVVBQOw0KKw0KKwkvKiBmYWxsIGJhY2sgdG8g c3cgZW5jcnlwdGlvbiBmb3IgdW5zdXBwb3J0ZWQgY2lwaGVycyAqLw0KKwlzd2l0Y2ggKGtleS0+ Y2lwaGVyKSB7DQorCWNhc2UgV0xBTl9DSVBIRVJfU1VJVEVfQUVTX0NNQUM6DQorCQlrZXktPmZs YWdzIHw9IElFRUU4MDIxMV9LRVlfRkxBR19HRU5FUkFURV9NTUlFOw0KKwkJYnJlYWs7DQorCWNh c2UgV0xBTl9DSVBIRVJfU1VJVEVfV0VQNDA6DQorCWNhc2UgV0xBTl9DSVBIRVJfU1VJVEVfV0VQ MTA0Og0KKwljYXNlIFdMQU5fQ0lQSEVSX1NVSVRFX1RLSVA6DQorCWNhc2UgV0xBTl9DSVBIRVJf U1VJVEVfQ0NNUDoNCisJY2FzZSBXTEFOX0NJUEhFUl9TVUlURV9DQ01QXzI1NjoNCisJY2FzZSBX TEFOX0NJUEhFUl9TVUlURV9HQ01QOg0KKwljYXNlIFdMQU5fQ0lQSEVSX1NVSVRFX0dDTVBfMjU2 Og0KKwljYXNlIFdMQU5fQ0lQSEVSX1NVSVRFX1NNUzQ6DQorCQlicmVhazsNCisJZGVmYXVsdDoN CisJCXJldHVybiAtRU9QTk9UU1VQUDsNCisJfQ0KKw0KKwlpZiAoY21kID09IFNFVF9LRVkpIHsN CisJCWtleS0+aHdfa2V5X2lkeCA9IHdjaWQtPmlkeDsNCisJCXdjaWQtPmh3X2tleV9pZHggPSBp ZHg7DQorCX0gZWxzZSBpZiAoaWR4ID09IHdjaWQtPmh3X2tleV9pZHgpIHsNCisJCXdjaWQtPmh3 X2tleV9pZHggPSAtMTsNCisJfQ0KKwltdDc2X3djaWRfa2V5X3NldHVwKCZkZXYtPm10NzYsIHdj aWQsDQorCQkJICAgIGNtZCA9PSBTRVRfS0VZID8ga2V5IDogTlVMTCk7DQorDQorCXJldHVybiBt dDc5MTVfbWN1X2FkZF9rZXkoZGV2LCB2aWYsIG1zdGEsIGtleSwgY21kKTsNCit9DQorDQorc3Rh dGljIGludCBtdDc5MTVfY29uZmlnKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCB1MzIgY2hhbmdl ZCkNCit7DQorCXN0cnVjdCBtdDc5MTVfZGV2ICpkZXYgPSBtdDc5MTVfaHdfZGV2KGh3KTsNCisJ c3RydWN0IG10NzkxNV9waHkgKnBoeSA9IG10NzkxNV9od19waHkoaHcpOw0KKwlib29sIGJhbmQg PSBwaHkgIT0gJmRldi0+cGh5Ow0KKwlpbnQgcmV0Ow0KKw0KKwlpZiAoY2hhbmdlZCAmIElFRUU4 MDIxMV9DT05GX0NIQU5HRV9DSEFOTkVMKSB7DQorCQlpZWVlODAyMTFfc3RvcF9xdWV1ZXMoaHcp Ow0KKwkJcmV0ID0gbXQ3OTE1X3NldF9jaGFubmVsKHBoeSk7DQorCQlpZiAocmV0KQ0KKwkJCXJl dHVybiByZXQ7DQorCQlpZWVlODAyMTFfd2FrZV9xdWV1ZXMoaHcpOw0KKwl9DQorDQorCW11dGV4 X2xvY2soJmRldi0+bXQ3Ni5tdXRleCk7DQorDQorCWlmIChjaGFuZ2VkICYgSUVFRTgwMjExX0NP TkZfQ0hBTkdFX01PTklUT1IpIHsNCisJCWlmICghKGh3LT5jb25mLmZsYWdzICYgSUVFRTgwMjEx X0NPTkZfTU9OSVRPUikpDQorCQkJcGh5LT5yeGZpbHRlciB8PSBNVF9XRl9SRkNSX0RST1BfT1RI RVJfVUM7DQorCQllbHNlDQorCQkJcGh5LT5yeGZpbHRlciAmPSB+TVRfV0ZfUkZDUl9EUk9QX09U SEVSX1VDOw0KKw0KKwkJbXQ3Nl93cihkZXYsIE1UX1dGX1JGQ1IoYmFuZCksIHBoeS0+cnhmaWx0 ZXIpOw0KKwl9DQorDQorCW11dGV4X3VubG9jaygmZGV2LT5tdDc2Lm11dGV4KTsNCisNCisJcmV0 dXJuIDA7DQorfQ0KKw0KK3N0YXRpYyBpbnQNCittdDc5MTVfY29uZl90eChzdHJ1Y3QgaWVlZTgw MjExX2h3ICpodywgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZiwgdTE2IHF1ZXVlLA0KKwkgICAg ICAgY29uc3Qgc3RydWN0IGllZWU4MDIxMV90eF9xdWV1ZV9wYXJhbXMgKnBhcmFtcykNCit7DQor CXN0cnVjdCBtdDc5MTVfdmlmICptdmlmID0gKHN0cnVjdCBtdDc5MTVfdmlmICopdmlmLT5kcnZf cHJpdjsNCisNCisJLyogbm8gbmVlZCB0byB1cGRhdGUgcmlnaHQgYXdheSwgd2UnbGwgZ2V0IEJT U19DSEFOR0VEX1FPUyAqLw0KKwltdmlmLT53bW1bcXVldWVdLmN3X21pbiA9IHBhcmFtcy0+Y3df bWluOw0KKwltdmlmLT53bW1bcXVldWVdLmN3X21heCA9IHBhcmFtcy0+Y3dfbWF4Ow0KKwltdmlm LT53bW1bcXVldWVdLmFpZnMgPSBwYXJhbXMtPmFpZnM7DQorCW12aWYtPndtbVtxdWV1ZV0udHhv cCA9IHBhcmFtcy0+dHhvcDsNCisNCisJcmV0dXJuIDA7DQorfQ0KKw0KK3N0YXRpYyB2b2lkIG10 NzkxNV9jb25maWd1cmVfZmlsdGVyKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LA0KKwkJCQkgICAg dW5zaWduZWQgaW50IGNoYW5nZWRfZmxhZ3MsDQorCQkJCSAgICB1bnNpZ25lZCBpbnQgKnRvdGFs X2ZsYWdzLA0KKwkJCQkgICAgdTY0IG11bHRpY2FzdCkNCit7DQorCXN0cnVjdCBtdDc5MTVfZGV2 ICpkZXYgPSBtdDc5MTVfaHdfZGV2KGh3KTsNCisJc3RydWN0IG10NzkxNV9waHkgKnBoeSA9IG10 NzkxNV9od19waHkoaHcpOw0KKwlib29sIGJhbmQgPSBwaHkgIT0gJmRldi0+cGh5Ow0KKw0KKwl1 MzIgY3RsX2ZsYWdzID0gTVRfV0ZfUkZDUjFfRFJPUF9BQ0sgfA0KKwkJCU1UX1dGX1JGQ1IxX0RS T1BfQkZfUE9MTCB8DQorCQkJTVRfV0ZfUkZDUjFfRFJPUF9CQSB8DQorCQkJTVRfV0ZfUkZDUjFf RFJPUF9DRkVORCB8DQorCQkJTVRfV0ZfUkZDUjFfRFJPUF9DRkFDSzsNCisJdTMyIGZsYWdzID0g MDsNCisNCisjZGVmaW5lIE1UNzZfRklMVEVSKF9mbGFnLCBfaHcpIGRvIHsJCQkJCVwNCisJCWZs YWdzIHw9ICp0b3RhbF9mbGFncyAmIEZJRl8jI19mbGFnOwkJCVwNCisJCXBoeS0+cnhmaWx0ZXIg Jj0gfihfaHcpOwkJCQlcDQorCQlwaHktPnJ4ZmlsdGVyIHw9ICEoZmxhZ3MgJiBGSUZfIyNfZmxh ZykgKiAoX2h3KTsJXA0KKwl9IHdoaWxlICgwKQ0KKw0KKwlwaHktPnJ4ZmlsdGVyICY9IH4oTVRf V0ZfUkZDUl9EUk9QX09USEVSX0JTUyB8DQorCQkJICAgTVRfV0ZfUkZDUl9EUk9QX09USEVSX0JF QUNPTiB8DQorCQkJICAgTVRfV0ZfUkZDUl9EUk9QX0ZSQU1FX1JFUE9SVCB8DQorCQkJICAgTVRf V0ZfUkZDUl9EUk9QX1BST0JFUkVRIHwNCisJCQkgICBNVF9XRl9SRkNSX0RST1BfTUNBU1RfRklM VEVSRUQgfA0KKwkJCSAgIE1UX1dGX1JGQ1JfRFJPUF9NQ0FTVCB8DQorCQkJICAgTVRfV0ZfUkZD Ul9EUk9QX0JDQVNUIHwNCisJCQkgICBNVF9XRl9SRkNSX0RST1BfRFVQTElDQVRFIHwNCisJCQkg ICBNVF9XRl9SRkNSX0RST1BfQTJfQlNTSUQgfA0KKwkJCSAgIE1UX1dGX1JGQ1JfRFJPUF9VTldB TlRFRF9DVEwgfA0KKwkJCSAgIE1UX1dGX1JGQ1JfRFJPUF9TVEJDX01VTFRJKTsNCisNCisJTVQ3 Nl9GSUxURVIoT1RIRVJfQlNTLCBNVF9XRl9SRkNSX0RST1BfT1RIRVJfVElNIHwNCisJCQkgICAg ICAgTVRfV0ZfUkZDUl9EUk9QX0EzX01BQyB8DQorCQkJICAgICAgIE1UX1dGX1JGQ1JfRFJPUF9B M19CU1NJRCk7DQorDQorCU1UNzZfRklMVEVSKEZDU0ZBSUwsIE1UX1dGX1JGQ1JfRFJPUF9GQ1NG QUlMKTsNCisNCisJTVQ3Nl9GSUxURVIoQ09OVFJPTCwgTVRfV0ZfUkZDUl9EUk9QX0NUUyB8DQor CQkJICAgICBNVF9XRl9SRkNSX0RST1BfUlRTIHwNCisJCQkgICAgIE1UX1dGX1JGQ1JfRFJPUF9D VExfUlNWIHwNCisJCQkgICAgIE1UX1dGX1JGQ1JfRFJPUF9ORFBBKTsNCisNCisJKnRvdGFsX2Zs YWdzID0gZmxhZ3M7DQorCW10NzZfd3IoZGV2LCBNVF9XRl9SRkNSKGJhbmQpLCBwaHktPnJ4Zmls dGVyKTsNCisNCisJaWYgKCp0b3RhbF9mbGFncyAmIEZJRl9DT05UUk9MKQ0KKwkJbXQ3Nl9jbGVh cihkZXYsIE1UX1dGX1JGQ1IxKGJhbmQpLCBjdGxfZmxhZ3MpOw0KKwllbHNlDQorCQltdDc2X3Nl dChkZXYsIE1UX1dGX1JGQ1IxKGJhbmQpLCBjdGxfZmxhZ3MpOw0KK30NCisNCitzdGF0aWMgdm9p ZCBtdDc5MTVfYnNzX2luZm9fY2hhbmdlZChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywNCisJCQkJ ICAgIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsDQorCQkJCSAgICBzdHJ1Y3QgaWVlZTgwMjEx X2Jzc19jb25mICppbmZvLA0KKwkJCQkgICAgdTMyIGNoYW5nZWQpDQorew0KKwlzdHJ1Y3QgbXQ3 OTE1X3BoeSAqcGh5ID0gbXQ3OTE1X2h3X3BoeShodyk7DQorCXN0cnVjdCBtdDc5MTVfZGV2ICpk ZXYgPSBtdDc5MTVfaHdfZGV2KGh3KTsNCisNCisJbXV0ZXhfbG9jaygmZGV2LT5tdDc2Lm11dGV4 KTsNCisNCisJLyoNCisJICogc3RhdGlvbiBtb2RlIHVzZXMgQlNTSUQgdG8gbWFwIHRoZSB3bGFu IGVudHJ5IHRvIGEgcGVlciwNCisJICogYW5kIHRoZW4gcGVlciByZWZlcmVuY2VzIGJzc19pbmZv X3JmY2ggdG8gc2V0IGJhbmR3aWR0aCBjYXAuDQorCSAqLw0KKwlpZiAoY2hhbmdlZCAmIEJTU19D SEFOR0VEX0JTU0lEICYmDQorCSAgICB2aWYtPnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfU1RBVElP Tikgew0KKwkJYm9vbCBqb2luID0gIWlzX3plcm9fZXRoZXJfYWRkcihpbmZvLT5ic3NpZCk7DQor DQorCQltdDc5MTVfbWN1X2FkZF9ic3NfaW5mbyhwaHksIHZpZiwgam9pbik7DQorCQltdDc5MTVf bWN1X2FkZF9zdGEoZGV2LCB2aWYsIE5VTEwsIGpvaW4pOw0KKwl9DQorDQorCWlmIChjaGFuZ2Vk ICYgQlNTX0NIQU5HRURfQVNTT0MpDQorCQltdDc5MTVfbWN1X2FkZF9ic3NfaW5mbyhwaHksIHZp ZiwgaW5mby0+YXNzb2MpOw0KKw0KKwlpZiAoY2hhbmdlZCAmIEJTU19DSEFOR0VEX0VSUF9TTE9U KSB7DQorCQlpbnQgc2xvdHRpbWUgPSBpbmZvLT51c2Vfc2hvcnRfc2xvdCA/IDkgOiAyMDsNCisN CisJCWlmIChzbG90dGltZSAhPSBwaHktPnNsb3R0aW1lKSB7DQorCQkJcGh5LT5zbG90dGltZSA9 IHNsb3R0aW1lOw0KKwkJCW10NzkxNV9tYWNfc2V0X3RpbWluZyhwaHkpOw0KKwkJfQ0KKwl9DQor DQorCWlmIChjaGFuZ2VkICYgQlNTX0NIQU5HRURfQkVBQ09OX0VOQUJMRUQpIHsNCisJCW10Nzkx NV9tY3VfYWRkX2Jzc19pbmZvKHBoeSwgdmlmLCBpbmZvLT5lbmFibGVfYmVhY29uKTsNCisJCW10 NzkxNV9tY3VfYWRkX3N0YShkZXYsIHZpZiwgTlVMTCwgaW5mby0+ZW5hYmxlX2JlYWNvbik7DQor CX0NCisNCisJLyogZW5zdXJlIHRoYXQgZW5hYmxlIHR4Y21kX21vZGUgYWZ0ZXIgYnNzX2luZm8g Ki8NCisJaWYgKGNoYW5nZWQgJiAoQlNTX0NIQU5HRURfUU9TIHwgQlNTX0NIQU5HRURfQkVBQ09O X0VOQUJMRUQpKQ0KKwkJbXQ3OTE1X21jdV9zZXRfdHgoZGV2LCB2aWYpOw0KKw0KKwlpZiAoY2hh bmdlZCAmIChCU1NfQ0hBTkdFRF9CRUFDT04gfA0KKwkJICAgICAgIEJTU19DSEFOR0VEX0JFQUNP Tl9FTkFCTEVEKSkNCisJCW10NzkxNV9tY3VfYWRkX2JlYWNvbihodywgdmlmLCBpbmZvLT5lbmFi bGVfYmVhY29uKTsNCisNCisJbXV0ZXhfdW5sb2NrKCZkZXYtPm10NzYubXV0ZXgpOw0KK30NCisN CitzdGF0aWMgdm9pZA0KK210NzkxNV9jaGFubmVsX3N3aXRjaF9iZWFjb24oc3RydWN0IGllZWU4 MDIxMV9odyAqaHcsDQorCQkJICAgICBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLA0KKwkJCSAg ICAgc3RydWN0IGNmZzgwMjExX2NoYW5fZGVmICpjaGFuZGVmKQ0KK3sNCisJc3RydWN0IG10Nzkx NV9kZXYgKmRldiA9IG10NzkxNV9od19kZXYoaHcpOw0KKw0KKwltdXRleF9sb2NrKCZkZXYtPm10 NzYubXV0ZXgpOw0KKwltdDc5MTVfbWN1X2FkZF9iZWFjb24oaHcsIHZpZiwgdHJ1ZSk7DQorCW11 dGV4X3VubG9jaygmZGV2LT5tdDc2Lm11dGV4KTsNCit9DQorDQoraW50IG10NzkxNV9tYWNfc3Rh X2FkZChzdHJ1Y3QgbXQ3Nl9kZXYgKm1kZXYsIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsDQor CQkgICAgICAgc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSkNCit7DQorCXN0cnVjdCBtdDc5MTVf ZGV2ICpkZXYgPSBjb250YWluZXJfb2YobWRldiwgc3RydWN0IG10NzkxNV9kZXYsIG10NzYpOw0K KwlzdHJ1Y3QgbXQ3OTE1X3N0YSAqbXN0YSA9IChzdHJ1Y3QgbXQ3OTE1X3N0YSAqKXN0YS0+ZHJ2 X3ByaXY7DQorCXN0cnVjdCBtdDc5MTVfdmlmICptdmlmID0gKHN0cnVjdCBtdDc5MTVfdmlmICop dmlmLT5kcnZfcHJpdjsNCisJaW50IGlkeDsNCisNCisJaWR4ID0gbXQ3Nl93Y2lkX2FsbG9jKGRl di0+bXQ3Ni53Y2lkX21hc2ssIE1UNzkxNV9XVEJMX1NUQSAtIDEpOw0KKwlpZiAoaWR4IDwgMCkN CisJCXJldHVybiAtRU5PU1BDOw0KKw0KKwlJTklUX0xJU1RfSEVBRCgmbXN0YS0+cG9sbF9saXN0 KTsNCisJSU5JVF9XT1JLKCZtc3RhLT5zdGF0c193b3JrLCBtdDc5MTVfbWFjX3N0YV9zdGF0c193 b3JrKTsNCisJc3Bpbl9sb2NrX2luaXQoJm1zdGEtPmFtcGR1X2xvY2spOw0KKwltc3RhLT52aWYg PSBtdmlmOw0KKwltc3RhLT53Y2lkLnN0YSA9IDE7DQorCW1zdGEtPndjaWQuaWR4ID0gaWR4Ow0K Kwltc3RhLT53Y2lkLmV4dF9waHkgPSBtdmlmLT5iYW5kX2lkeDsNCisJbXN0YS0+d2NpZC50eF9p bmZvIHw9IE1UX1dDSURfVFhfSU5GT19TRVQ7DQorCW1zdGEtPnN0YXRzLmppZmZpZXMgPSBqaWZm aWVzOw0KKw0KKwltdDc5MTVfbWFjX3d0YmxfdXBkYXRlKGRldiwgaWR4LA0KKwkJCSAgICAgICBN VF9XVEJMX1VQREFURV9BRE1fQ09VTlRfQ0xFQVIpOw0KKw0KKwltdDc5MTVfbWN1X2FkZF9zdGEo ZGV2LCB2aWYsIHN0YSwgdHJ1ZSk7DQorDQorCXJldHVybiAwOw0KK30NCisNCit2b2lkIG10Nzkx NV9tYWNfc3RhX3JlbW92ZShzdHJ1Y3QgbXQ3Nl9kZXYgKm1kZXYsIHN0cnVjdCBpZWVlODAyMTFf dmlmICp2aWYsDQorCQkJICAgc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSkNCit7DQorCXN0cnVj dCBtdDc5MTVfZGV2ICpkZXYgPSBjb250YWluZXJfb2YobWRldiwgc3RydWN0IG10NzkxNV9kZXYs IG10NzYpOw0KKwlzdHJ1Y3QgbXQ3OTE1X3N0YSAqbXN0YSA9IChzdHJ1Y3QgbXQ3OTE1X3N0YSAq KXN0YS0+ZHJ2X3ByaXY7DQorDQorCW10NzkxNV9tY3VfYWRkX3N0YShkZXYsIHZpZiwgc3RhLCBm YWxzZSk7DQorDQorCW10NzkxNV9tYWNfd3RibF91cGRhdGUoZGV2LCBtc3RhLT53Y2lkLmlkeCwN CisJCQkgICAgICAgTVRfV1RCTF9VUERBVEVfQURNX0NPVU5UX0NMRUFSKTsNCisNCisJc3Bpbl9s b2NrX2JoKCZkZXYtPnN0YV9wb2xsX2xvY2spOw0KKwlpZiAoIWxpc3RfZW1wdHkoJm1zdGEtPnBv bGxfbGlzdCkpDQorCQlsaXN0X2RlbF9pbml0KCZtc3RhLT5wb2xsX2xpc3QpOw0KKwlzcGluX3Vu bG9ja19iaCgmZGV2LT5zdGFfcG9sbF9sb2NrKTsNCit9DQorDQorc3RhdGljIHZvaWQgbXQ3OTE1 X3R4KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LA0KKwkJICAgICAgc3RydWN0IGllZWU4MDIxMV90 eF9jb250cm9sICpjb250cm9sLA0KKwkJICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYikNCit7DQor CXN0cnVjdCBtdDc5MTVfZGV2ICpkZXYgPSBtdDc5MTVfaHdfZGV2KGh3KTsNCisJc3RydWN0IG10 NzZfcGh5ICptcGh5ID0gaHctPnByaXY7DQorCXN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyAqaW5m byA9IElFRUU4MDIxMV9TS0JfQ0Ioc2tiKTsNCisJc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZiA9 IGluZm8tPmNvbnRyb2wudmlmOw0KKwlzdHJ1Y3QgbXQ3Nl93Y2lkICp3Y2lkID0gJmRldi0+bXQ3 Ni5nbG9iYWxfd2NpZDsNCisNCisJaWYgKGNvbnRyb2wtPnN0YSkgew0KKwkJc3RydWN0IG10Nzkx NV9zdGEgKnN0YTsNCisNCisJCXN0YSA9IChzdHJ1Y3QgbXQ3OTE1X3N0YSAqKWNvbnRyb2wtPnN0 YS0+ZHJ2X3ByaXY7DQorCQl3Y2lkID0gJnN0YS0+d2NpZDsNCisJfQ0KKw0KKwlpZiAodmlmICYm ICFjb250cm9sLT5zdGEpIHsNCisJCXN0cnVjdCBtdDc5MTVfdmlmICptdmlmOw0KKw0KKwkJbXZp ZiA9IChzdHJ1Y3QgbXQ3OTE1X3ZpZiAqKXZpZi0+ZHJ2X3ByaXY7DQorCQl3Y2lkID0gJm12aWYt PnN0YS53Y2lkOw0KKwl9DQorDQorCW10NzZfdHgobXBoeSwgY29udHJvbC0+c3RhLCB3Y2lkLCBz a2IpOw0KK30NCisNCitzdGF0aWMgaW50IG10NzkxNV9zZXRfcnRzX3RocmVzaG9sZChzdHJ1Y3Qg aWVlZTgwMjExX2h3ICpodywgdTMyIHZhbCkNCit7DQorCXN0cnVjdCBtdDc5MTVfZGV2ICpkZXYg PSBtdDc5MTVfaHdfZGV2KGh3KTsNCisJc3RydWN0IG10NzkxNV9waHkgKnBoeSA9IG10NzkxNV9o d19waHkoaHcpOw0KKw0KKwltdXRleF9sb2NrKCZkZXYtPm10NzYubXV0ZXgpOw0KKwltdDc5MTVf bWN1X3NldF9ydHNfdGhyZXNoKHBoeSwgdmFsKTsNCisJbXV0ZXhfdW5sb2NrKCZkZXYtPm10NzYu bXV0ZXgpOw0KKw0KKwlyZXR1cm4gMDsNCit9DQorDQorc3RhdGljIGludA0KK210NzkxNV9hbXBk dV9hY3Rpb24oc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2 aWYsDQorCQkgICAgc3RydWN0IGllZWU4MDIxMV9hbXBkdV9wYXJhbXMgKnBhcmFtcykNCit7DQor CWVudW0gaWVlZTgwMjExX2FtcGR1X21sbWVfYWN0aW9uIGFjdGlvbiA9IHBhcmFtcy0+YWN0aW9u Ow0KKwlzdHJ1Y3QgbXQ3OTE1X2RldiAqZGV2ID0gbXQ3OTE1X2h3X2Rldihodyk7DQorCXN0cnVj dCBpZWVlODAyMTFfc3RhICpzdGEgPSBwYXJhbXMtPnN0YTsNCisJc3RydWN0IGllZWU4MDIxMV90 eHEgKnR4cSA9IHN0YS0+dHhxW3BhcmFtcy0+dGlkXTsNCisJc3RydWN0IG10NzkxNV9zdGEgKm1z dGEgPSAoc3RydWN0IG10NzkxNV9zdGEgKilzdGEtPmRydl9wcml2Ow0KKwl1MTYgdGlkID0gcGFy YW1zLT50aWQ7DQorCXUxNiBzc24gPSBwYXJhbXMtPnNzbjsNCisJc3RydWN0IG10NzZfdHhxICpt dHhxOw0KKwlpbnQgcmV0ID0gMDsNCisNCisJaWYgKCF0eHEpDQorCQlyZXR1cm4gLUVJTlZBTDsN CisNCisJbXR4cSA9IChzdHJ1Y3QgbXQ3Nl90eHEgKil0eHEtPmRydl9wcml2Ow0KKw0KKwltdXRl eF9sb2NrKCZkZXYtPm10NzYubXV0ZXgpOw0KKwlzd2l0Y2ggKGFjdGlvbikgew0KKwljYXNlIElF RUU4MDIxMV9BTVBEVV9SWF9TVEFSVDoNCisJCW10NzZfcnhfYWdncl9zdGFydCgmZGV2LT5tdDc2 LCAmbXN0YS0+d2NpZCwgdGlkLCBzc24sDQorCQkJCSAgIHBhcmFtcy0+YnVmX3NpemUpOw0KKwkJ bXQ3OTE1X21jdV9hZGRfcnhfYmEoZGV2LCBwYXJhbXMsIHRydWUpOw0KKwkJYnJlYWs7DQorCWNh c2UgSUVFRTgwMjExX0FNUERVX1JYX1NUT1A6DQorCQltdDc2X3J4X2FnZ3Jfc3RvcCgmZGV2LT5t dDc2LCAmbXN0YS0+d2NpZCwgdGlkKTsNCisJCW10NzkxNV9tY3VfYWRkX3J4X2JhKGRldiwgcGFy YW1zLCBmYWxzZSk7DQorCQlicmVhazsNCisJY2FzZSBJRUVFODAyMTFfQU1QRFVfVFhfT1BFUkFU SU9OQUw6DQorCQltdHhxLT5hZ2dyID0gdHJ1ZTsNCisJCW10eHEtPnNlbmRfYmFyID0gZmFsc2U7 DQorCQltdDc5MTVfc2V0X2FnZ3Jfc3RhdGUobXN0YSwgdGlkLCBNVDc5MTVfQUdHUl9PUEVSQVRJ T05BTCk7DQorCQltdDc5MTVfbWN1X2FkZF90eF9iYShkZXYsIHBhcmFtcywgdHJ1ZSk7DQorCQli cmVhazsNCisJY2FzZSBJRUVFODAyMTFfQU1QRFVfVFhfU1RPUF9GTFVTSDoNCisJY2FzZSBJRUVF ODAyMTFfQU1QRFVfVFhfU1RPUF9GTFVTSF9DT05UOg0KKwkJbXR4cS0+YWdnciA9IGZhbHNlOw0K KwkJbXQ3OTE1X3NldF9hZ2dyX3N0YXRlKG1zdGEsIHRpZCwgTVQ3OTE1X0FHR1JfU1RPUCk7DQor CQltdDc5MTVfbWN1X2FkZF90eF9iYShkZXYsIHBhcmFtcywgZmFsc2UpOw0KKwkJYnJlYWs7DQor CWNhc2UgSUVFRTgwMjExX0FNUERVX1RYX1NUQVJUOg0KKwkJbXR4cS0+YWdnX3NzbiA9IElFRUU4 MDIxMV9TTl9UT19TRVEoc3NuKTsNCisJCW10NzkxNV9zZXRfYWdncl9zdGF0ZShtc3RhLCB0aWQs IE1UNzkxNV9BR0dSX1NUQVJUKTsNCisJCXJldCA9IElFRUU4MDIxMV9BTVBEVV9UWF9TVEFSVF9J TU1FRElBVEU7DQorCQlicmVhazsNCisJY2FzZSBJRUVFODAyMTFfQU1QRFVfVFhfU1RPUF9DT05U Og0KKwkJbXR4cS0+YWdnciA9IGZhbHNlOw0KKwkJbXQ3OTE1X3NldF9hZ2dyX3N0YXRlKG1zdGEs IHRpZCwgTVQ3OTE1X0FHR1JfU1RPUCk7DQorCQltdDc5MTVfbWN1X2FkZF90eF9iYShkZXYsIHBh cmFtcywgZmFsc2UpOw0KKwkJaWVlZTgwMjExX3N0b3BfdHhfYmFfY2JfaXJxc2FmZSh2aWYsIHN0 YS0+YWRkciwgdGlkKTsNCisJCWJyZWFrOw0KKwl9DQorCW11dGV4X3VubG9jaygmZGV2LT5tdDc2 Lm11dGV4KTsNCisNCisJcmV0dXJuIHJldDsNCit9DQorDQorc3RhdGljIGludA0KK210NzkxNV9z dGFfYWRkKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlm LA0KKwkgICAgICAgc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSkNCit7DQorCXJldHVybiBtdDc2 X3N0YV9zdGF0ZShodywgdmlmLCBzdGEsIElFRUU4MDIxMV9TVEFfTk9URVhJU1QsDQorCQkJICAg ICAgSUVFRTgwMjExX1NUQV9OT05FKTsNCit9DQorDQorc3RhdGljIGludA0KK210NzkxNV9zdGFf cmVtb3ZlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlm LA0KKwkJICBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhKQ0KK3sNCisJcmV0dXJuIG10NzZfc3Rh X3N0YXRlKGh3LCB2aWYsIHN0YSwgSUVFRTgwMjExX1NUQV9OT05FLA0KKwkJCSAgICAgIElFRUU4 MDIxMV9TVEFfTk9URVhJU1QpOw0KK30NCisNCitzdGF0aWMgaW50DQorbXQ3OTE1X2dldF9zdGF0 cyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywNCisJCSBzdHJ1Y3QgaWVlZTgwMjExX2xvd19sZXZl bF9zdGF0cyAqc3RhdHMpDQorew0KKwlzdHJ1Y3QgbXQ3OTE1X3BoeSAqcGh5ID0gbXQ3OTE1X2h3 X3BoeShodyk7DQorCXN0cnVjdCBtaWJfc3RhdHMgKm1pYiA9ICZwaHktPm1pYjsNCisNCisJc3Rh dHMtPmRvdDExUlRTU3VjY2Vzc0NvdW50ID0gbWliLT5ydHNfY250Ow0KKwlzdGF0cy0+ZG90MTFS VFNGYWlsdXJlQ291bnQgPSBtaWItPnJ0c19yZXRyaWVzX2NudDsNCisJc3RhdHMtPmRvdDExRkNT RXJyb3JDb3VudCA9IG1pYi0+ZmNzX2Vycl9jbnQ7DQorCXN0YXRzLT5kb3QxMUFDS0ZhaWx1cmVD b3VudCA9IG1pYi0+YWNrX2ZhaWxfY250Ow0KKw0KKwlyZXR1cm4gMDsNCit9DQorDQorc3RhdGlj IHZvaWQNCittdDc5MTVfc2V0X2NvdmVyYWdlX2NsYXNzKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3 LCBzMTYgY292ZXJhZ2VfY2xhc3MpDQorew0KKwlzdHJ1Y3QgbXQ3OTE1X3BoeSAqcGh5ID0gbXQ3 OTE1X2h3X3BoeShodyk7DQorDQorCXBoeS0+Y292ZXJhZ2VfY2xhc3MgPSBtYXhfdChzMTYsIGNv dmVyYWdlX2NsYXNzLCAwKTsNCisJbXQ3OTE1X21hY19zZXRfdGltaW5nKHBoeSk7DQorfQ0KKw0K K3N0YXRpYyBpbnQNCittdDc5MTVfc2V0X2FudGVubmEoc3RydWN0IGllZWU4MDIxMV9odyAqaHcs IHUzMiB0eF9hbnQsIHUzMiByeF9hbnQpDQorew0KKwlzdHJ1Y3QgbXQ3OTE1X2RldiAqZGV2ID0g bXQ3OTE1X2h3X2Rldihodyk7DQorCXN0cnVjdCBtdDc5MTVfcGh5ICpwaHkgPSBtdDc5MTVfaHdf cGh5KGh3KTsNCisJaW50IG1heF9uc3MgPSBod2VpZ2h0OChody0+d2lwaHktPmF2YWlsYWJsZV9h bnRlbm5hc190eCk7DQorCWJvb2wgZXh0X3BoeSA9IHBoeSAhPSAmZGV2LT5waHk7DQorDQorCWlm ICghdHhfYW50IHx8IHR4X2FudCAhPSByeF9hbnQgfHwgZmZzKHR4X2FudCkgPiBtYXhfbnNzKQ0K KwkJcmV0dXJuIC1FSU5WQUw7DQorDQorCWlmICgoQklUKGh3ZWlnaHQ4KHR4X2FudCkpIC0gMSkg IT0gdHhfYW50KQ0KKwkJdHhfYW50ID0gQklUKGZmcyh0eF9hbnQpIC0gMSkgLSAxOw0KKw0KKwlt dXRleF9sb2NrKCZkZXYtPm10NzYubXV0ZXgpOw0KKw0KKwlwaHktPm10NzYtPmFudGVubmFfbWFz ayA9IHR4X2FudDsNCisNCisJaWYgKGV4dF9waHkpIHsNCisJCWlmIChkZXYtPmNoYWlubWFzayA9 PSAweGYpDQorCQkJdHhfYW50IDw8PSAyOw0KKwkJZWxzZQ0KKwkJCXR4X2FudCA8PD0gMTsNCisJ fQ0KKwlwaHktPmNoYWlubWFzayA9IHR4X2FudDsNCisNCisJbXQ3Nl9zZXRfc3RyZWFtX2NhcHMo JmRldi0+bXQ3NiwgdHJ1ZSk7DQorDQorCW11dGV4X3VubG9jaygmZGV2LT5tdDc2Lm11dGV4KTsN CisNCisJcmV0dXJuIDA7DQorfQ0KKw0KK3N0YXRpYyB2b2lkDQorbXQ3OTE1X3N0YV9yY191cGRh dGUoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsDQorCQkgICAgIHN0cnVjdCBpZWVlODAyMTFfdmlm ICp2aWYsDQorCQkgICAgIHN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEsDQorCQkgICAgIHUzMiBj aGFuZ2VkKQ0KK3sNCisJc3RydWN0IG10NzkxNV9zdGEgKm1zdGEgPSAoc3RydWN0IG10NzkxNV9z dGEgKilzdGEtPmRydl9wcml2Ow0KKw0KKwlyY3VfcmVhZF9sb2NrKCk7DQorCXN0YSA9IGllZWU4 MDIxMV9maW5kX3N0YSh2aWYsIHN0YS0+YWRkcik7DQorCWlmICghc3RhKSB7DQorCQlyY3VfcmVh ZF91bmxvY2soKTsNCisJCXJldHVybjsNCisJfQ0KKwlyY3VfcmVhZF9sb2NrKCk7DQorDQorCXNl dF9iaXQoY2hhbmdlZCwgJm1zdGEtPnN0YXRzLmNoYW5nZWQpOw0KKwlpZWVlODAyMTFfcXVldWVf d29yayhodywgJm1zdGEtPnN0YXRzX3dvcmspOw0KK30NCisNCitjb25zdCBzdHJ1Y3QgaWVlZTgw MjExX29wcyBtdDc5MTVfb3BzID0gew0KKwkudHggPSBtdDc5MTVfdHgsDQorCS5zdGFydCA9IG10 NzkxNV9zdGFydCwNCisJLnN0b3AgPSBtdDc5MTVfc3RvcCwNCisJLmFkZF9pbnRlcmZhY2UgPSBt dDc5MTVfYWRkX2ludGVyZmFjZSwNCisJLnJlbW92ZV9pbnRlcmZhY2UgPSBtdDc5MTVfcmVtb3Zl X2ludGVyZmFjZSwNCisJLmNvbmZpZyA9IG10NzkxNV9jb25maWcsDQorCS5jb25mX3R4ID0gbXQ3 OTE1X2NvbmZfdHgsDQorCS5jb25maWd1cmVfZmlsdGVyID0gbXQ3OTE1X2NvbmZpZ3VyZV9maWx0 ZXIsDQorCS5ic3NfaW5mb19jaGFuZ2VkID0gbXQ3OTE1X2Jzc19pbmZvX2NoYW5nZWQsDQorCS5z dGFfYWRkID0gbXQ3OTE1X3N0YV9hZGQsDQorCS5zdGFfcmVtb3ZlID0gbXQ3OTE1X3N0YV9yZW1v dmUsDQorCS5zdGFfcHJlX3JjdV9yZW1vdmUgPSBtdDc2X3N0YV9wcmVfcmN1X3JlbW92ZSwNCisJ LnN0YV9yY191cGRhdGUgPSBtdDc5MTVfc3RhX3JjX3VwZGF0ZSwNCisJLnNldF9rZXkgPSBtdDc5 MTVfc2V0X2tleSwNCisJLmFtcGR1X2FjdGlvbiA9IG10NzkxNV9hbXBkdV9hY3Rpb24sDQorCS5z ZXRfcnRzX3RocmVzaG9sZCA9IG10NzkxNV9zZXRfcnRzX3RocmVzaG9sZCwNCisJLndha2VfdHhf cXVldWUgPSBtdDc2X3dha2VfdHhfcXVldWUsDQorCS5zd19zY2FuX3N0YXJ0ID0gbXQ3Nl9zd19z Y2FuLA0KKwkuc3dfc2Nhbl9jb21wbGV0ZSA9IG10NzZfc3dfc2Nhbl9jb21wbGV0ZSwNCisJLnJl bGVhc2VfYnVmZmVyZWRfZnJhbWVzID0gbXQ3Nl9yZWxlYXNlX2J1ZmZlcmVkX2ZyYW1lcywNCisJ LmdldF90eHBvd2VyID0gbXQ3Nl9nZXRfdHhwb3dlciwNCisJLmNoYW5uZWxfc3dpdGNoX2JlYWNv biA9IG10NzkxNV9jaGFubmVsX3N3aXRjaF9iZWFjb24sDQorCS5nZXRfc3RhdHMgPSBtdDc5MTVf Z2V0X3N0YXRzLA0KKwkuZ2V0X3N1cnZleSA9IG10NzZfZ2V0X3N1cnZleSwNCisJLmdldF9hbnRl bm5hID0gbXQ3Nl9nZXRfYW50ZW5uYSwNCisJLnNldF9hbnRlbm5hID0gbXQ3OTE1X3NldF9hbnRl bm5hLA0KKwkuc2V0X2NvdmVyYWdlX2NsYXNzID0gbXQ3OTE1X3NldF9jb3ZlcmFnZV9jbGFzcywN Cit9Ow0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3 OTE1L21jdS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MTUvbWN1 LmMNCm5ldyBmaWxlIG1vZGUgMTAwNjQ0DQppbmRleCAwMDAwMDAwMDAwMDAuLmRhZDJjMzAwZDBm Mg0KLS0tIC9kZXYvbnVsbA0KKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3 Ni9tdDc5MTUvbWN1LmMNCkBAIC0wLDAgKzEsMjMxMyBAQA0KKy8vIFNQRFgtTGljZW5zZS1JZGVu dGlmaWVyOiBJU0MNCisvKiBDb3B5cmlnaHQgKEMpIDIwMjAgTWVkaWFUZWsgSW5jLiAqLw0KKw0K KyNpbmNsdWRlIDxsaW51eC9maXJtd2FyZS5oPg0KKyNpbmNsdWRlIDxsaW51eC9mcy5oPg0KKyNp bmNsdWRlICJtdDc5MTUuaCINCisjaW5jbHVkZSAibWN1LmgiDQorI2luY2x1ZGUgIm1hYy5oIg0K KyNpbmNsdWRlICJlZXByb20uaCINCisNCitzdHJ1Y3QgbXQ3OTE1X3BhdGNoX2hkciB7DQorCWNo YXIgYnVpbGRfZGF0ZVsxNl07DQorCWNoYXIgcGxhdGZvcm1bNF07DQorCV9fYmUzMiBod19zd192 ZXI7DQorCV9fYmUzMiBwYXRjaF92ZXI7DQorCV9fYmUxNiBjaGVja3N1bTsNCisJdTE2IHJlc2Vy dmVkOw0KKwlzdHJ1Y3Qgew0KKwkJX19iZTMyIHBhdGNoX3ZlcjsNCisJCV9fYmUzMiBzdWJzeXM7 DQorCQlfX2JlMzIgZmVhdHVyZTsNCisJCV9fYmUzMiBuX3JlZ2lvbjsNCisJCV9fYmUzMiBjcmM7 DQorCQl1MzIgcmVzZXJ2ZWRbMTFdOw0KKwl9IGRlc2M7DQorfSBfX3BhY2tlZDsNCisNCitzdHJ1 Y3QgbXQ3OTE1X3BhdGNoX3NlYyB7DQorCV9fYmUzMiB0eXBlOw0KKwlfX2JlMzIgb2ZmczsNCisJ X19iZTMyIHNpemU7DQorCXVuaW9uIHsNCisJCV9fYmUzMiBzcGVjWzEzXTsNCisJCXN0cnVjdCB7 DQorCQkJX19iZTMyIGFkZHI7DQorCQkJX19iZTMyIGxlbjsNCisJCQlfX2JlMzIgc2VjX2tleV9p ZHg7DQorCQkJX19iZTMyIGFsaWduX2xlbjsNCisJCQl1MzIgcmVzZXJ2ZWRbOV07DQorCQl9IGlu Zm87DQorCX07DQorfSBfX3BhY2tlZDsNCisNCitzdHJ1Y3QgbXQ3OTE1X2Z3X3RyYWlsZXIgew0K Kwl1OCBjaGlwX2lkOw0KKwl1OCBlY29fY29kZTsNCisJdTggbl9yZWdpb247DQorCXU4IGZvcm1h dF92ZXI7DQorCXU4IGZvcm1hdF9mbGFnOw0KKwl1OCByZXNlcnZlZFsyXTsNCisJY2hhciBmd192 ZXJbMTBdOw0KKwljaGFyIGJ1aWxkX2RhdGVbMTVdOw0KKwl1MzIgY3JjOw0KK30gX19wYWNrZWQ7 DQorDQorc3RydWN0IG10NzkxNV9md19yZWdpb24gew0KKwlfX2xlMzIgZGVjb21wX2NyYzsNCisJ X19sZTMyIGRlY29tcF9sZW47DQorCV9fbGUzMiBkZWNvbXBfYmxrX3N6Ow0KKwl1OCByZXNlcnZl ZFs0XTsNCisJX19sZTMyIGFkZHI7DQorCV9fbGUzMiBsZW47DQorCXU4IGZlYXR1cmVfc2V0Ow0K Kwl1OCByZXNlcnZlZDFbMTVdOw0KK30gX19wYWNrZWQ7DQorDQorI2RlZmluZSBNQ1VfUEFUQ0hf QUREUkVTUwkJMHgyMDAwMDANCisNCisjZGVmaW5lIEZXX0ZFQVRVUkVfU0VUX0VOQ1JZUFQJCUJJ VCgwKQ0KKyNkZWZpbmUgRldfRkVBVFVSRV9TRVRfS0VZX0lEWAkJR0VOTUFTSygyLCAxKQ0KKyNk ZWZpbmUgRldfRkVBVFVSRV9PVkVSUklERV9BRERSCUJJVCg1KQ0KKw0KKyNkZWZpbmUgRExfTU9E RV9FTkNSWVBUCQkJQklUKDApDQorI2RlZmluZSBETF9NT0RFX0tFWV9JRFgJCQlHRU5NQVNLKDIs IDEpDQorI2RlZmluZSBETF9NT0RFX1JFU0VUX1NFQ19JVgkJQklUKDMpDQorI2RlZmluZSBETF9N T0RFX1dPUktJTkdfUERBX0NSNAkJQklUKDQpDQorI2RlZmluZSBETF9NT0RFX05FRURfUlNQCQlC SVQoMzEpDQorDQorI2RlZmluZSBGV19TVEFSVF9PVkVSUklERQkJQklUKDApDQorI2RlZmluZSBG V19TVEFSVF9XT1JLSU5HX1BEQV9DUjQJQklUKDIpDQorDQorI2RlZmluZSBQQVRDSF9TRUNfVFlQ RV9NQVNLCQlHRU5NQVNLKDE1LCAwKQ0KKyNkZWZpbmUgUEFUQ0hfU0VDX1RZUEVfSU5GTwkJMHgy DQorDQorI2RlZmluZSB0b193Y2lkX2xvKGlkKQkJCUZJRUxEX0dFVChHRU5NQVNLKDcsIDApLCAo dTE2KWlkKQ0KKyNkZWZpbmUgdG9fd2NpZF9oaShpZCkJCQlGSUVMRF9HRVQoR0VOTUFTSyg5LCA4 KSwgKHUxNilpZCkNCisNCitzdGF0aWMgZW51bSBtdDc5MTVfY2lwaGVyX3R5cGUNCittdDc5MTVf bWN1X2dldF9jaXBoZXIoaW50IGNpcGhlcikNCit7DQorCXN3aXRjaCAoY2lwaGVyKSB7DQorCWNh c2UgV0xBTl9DSVBIRVJfU1VJVEVfV0VQNDA6DQorCQlyZXR1cm4gTVRfQ0lQSEVSX1dFUDQwOw0K KwljYXNlIFdMQU5fQ0lQSEVSX1NVSVRFX1dFUDEwNDoNCisJCXJldHVybiBNVF9DSVBIRVJfV0VQ MTA0Ow0KKwljYXNlIFdMQU5fQ0lQSEVSX1NVSVRFX1RLSVA6DQorCQlyZXR1cm4gTVRfQ0lQSEVS X1RLSVA7DQorCWNhc2UgV0xBTl9DSVBIRVJfU1VJVEVfQUVTX0NNQUM6DQorCQlyZXR1cm4gTVRf Q0lQSEVSX0JJUF9DTUFDXzEyODsNCisJY2FzZSBXTEFOX0NJUEhFUl9TVUlURV9DQ01QOg0KKwkJ cmV0dXJuIE1UX0NJUEhFUl9BRVNfQ0NNUDsNCisJY2FzZSBXTEFOX0NJUEhFUl9TVUlURV9DQ01Q XzI1NjoNCisJCXJldHVybiBNVF9DSVBIRVJfQ0NNUF8yNTY7DQorCWNhc2UgV0xBTl9DSVBIRVJf U1VJVEVfR0NNUDoNCisJCXJldHVybiBNVF9DSVBIRVJfR0NNUDsNCisJY2FzZSBXTEFOX0NJUEhF Ul9TVUlURV9HQ01QXzI1NjoNCisJCXJldHVybiBNVF9DSVBIRVJfR0NNUF8yNTY7DQorCWNhc2Ug V0xBTl9DSVBIRVJfU1VJVEVfU01TNDoNCisJCXJldHVybiBNVF9DSVBIRVJfV0FQSTsNCisJZGVm YXVsdDoNCisJCXJldHVybiBNVF9DSVBIRVJfTk9ORTsNCisJfQ0KK30NCisNCitzdGF0aWMgdTgg bXQ3OTE1X21jdV9jaGFuX2J3KHN0cnVjdCBjZmc4MDIxMV9jaGFuX2RlZiAqY2hhbmRlZikNCit7 DQorCXN0YXRpYyBjb25zdCB1OCB3aWR0aF90b19id1tdID0gew0KKwkJW05MODAyMTFfQ0hBTl9X SURUSF80MF0gPSBDTURfQ0JXXzQwTUhaLA0KKwkJW05MODAyMTFfQ0hBTl9XSURUSF84MF0gPSBD TURfQ0JXXzgwTUhaLA0KKwkJW05MODAyMTFfQ0hBTl9XSURUSF84MFA4MF0gPSBDTURfQ0JXXzgw ODBNSFosDQorCQlbTkw4MDIxMV9DSEFOX1dJRFRIXzE2MF0gPSBDTURfQ0JXXzE2ME1IWiwNCisJ CVtOTDgwMjExX0NIQU5fV0lEVEhfNV0gPSBDTURfQ0JXXzVNSFosDQorCQlbTkw4MDIxMV9DSEFO X1dJRFRIXzEwXSA9IENNRF9DQldfMTBNSFosDQorCQlbTkw4MDIxMV9DSEFOX1dJRFRIXzIwXSA9 IENNRF9DQldfMjBNSFosDQorCQlbTkw4MDIxMV9DSEFOX1dJRFRIXzIwX05PSFRdID0gQ01EX0NC V18yME1IWiwNCisJfTsNCisNCisJaWYgKGNoYW5kZWYtPndpZHRoID49IEFSUkFZX1NJWkUod2lk dGhfdG9fYncpKQ0KKwkJcmV0dXJuIDA7DQorDQorCXJldHVybiB3aWR0aF90b19id1tjaGFuZGVm LT53aWR0aF07DQorfQ0KKw0KK3N0YXRpYyB1OA0KK210NzkxNV9nZXRfcGh5X21vZGUoc3RydWN0 IG10NzkxNV9kZXYgKmRldiwgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZiwNCisJCSAgICBlbnVt IG5sODAyMTFfYmFuZCBiYW5kLCBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhKQ0KK3sNCisJc3Ry dWN0IGllZWU4MDIxMV9zdGFfaHRfY2FwICpodF9jYXA7DQorCXN0cnVjdCBpZWVlODAyMTFfc3Rh X3ZodF9jYXAgKnZodF9jYXA7DQorCXU4IG1vZGUgPSAwOw0KKw0KKwlpZiAoc3RhKSB7DQorCQlo dF9jYXAgPSAmc3RhLT5odF9jYXA7DQorCQl2aHRfY2FwID0gJnN0YS0+dmh0X2NhcDsNCisJfSBl bHNlIHsNCisJCXN0cnVjdCBpZWVlODAyMTFfc3VwcG9ydGVkX2JhbmQgKnNiYW5kOw0KKw0KKwkJ aWYgKGJhbmQgPT0gTkw4MDIxMV9CQU5EXzJHSFopDQorCQkJc2JhbmQgPSAmZGV2LT5tcGh5LnNi YW5kXzJnLnNiYW5kOw0KKwkJZWxzZQ0KKwkJCXNiYW5kID0gJmRldi0+bXBoeS5zYmFuZF81Zy5z YmFuZDsNCisNCisJCWh0X2NhcCA9ICZzYmFuZC0+aHRfY2FwOw0KKwkJdmh0X2NhcCA9ICZzYmFu ZC0+dmh0X2NhcDsNCisJfQ0KKw0KKwlpZiAoYmFuZCA9PSBOTDgwMjExX0JBTkRfMkdIWikgew0K KwkJbW9kZSB8PSBQSFlfTU9ERV9CIHwgUEhZX01PREVfRzsNCisNCisJCWlmIChodF9jYXAtPmh0 X3N1cHBvcnRlZCkNCisJCQltb2RlIHw9IFBIWV9NT0RFX0dOOw0KKwl9IGVsc2UgaWYgKGJhbmQg PT0gTkw4MDIxMV9CQU5EXzVHSFopIHsNCisJCW1vZGUgfD0gUEhZX01PREVfQTsNCisNCisJCWlm IChodF9jYXAtPmh0X3N1cHBvcnRlZCkNCisJCQltb2RlIHw9IFBIWV9NT0RFX0FOOw0KKw0KKwkJ aWYgKHZodF9jYXAtPnZodF9zdXBwb3J0ZWQpDQorCQkJbW9kZSB8PSBQSFlfTU9ERV9BQzsNCisJ fQ0KKw0KKwlyZXR1cm4gbW9kZTsNCit9DQorDQorc3RhdGljIGludCBfX210NzkxNV9tY3VfbXNn X3NlbmQoc3RydWN0IG10NzkxNV9kZXYgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYiwNCisJCQkJ IGludCBjbWQsIGludCAqd2FpdF9zZXEpDQorew0KKwlzdHJ1Y3QgbXQ3OTE1X21jdV90eGQgKm1j dV90eGQ7DQorCXU4IHNlcSwgcGt0X2ZtdCwgcWlkeDsNCisJZW51bSBtdDc5MTVfdHhxX2lkIHR4 cTsNCisJX19sZTMyICp0eGQ7DQorCXUzMiB2YWw7DQorDQorCXNlcSA9ICsrZGV2LT5tdDc2Lm1j dS5tc2dfc2VxICYgMHhmOw0KKwlpZiAoIXNlcSkNCisJCXNlcSA9ICsrZGV2LT5tdDc2Lm1jdS5t c2dfc2VxICYgMHhmOw0KKw0KKwlpZiAoY21kID09IC1NQ1VfQ01EX0ZXX1NDQVRURVIpIHsNCisJ CXR4cSA9IE1UX1RYUV9GV0RMOw0KKwkJZ290byBleGl0Ow0KKwl9DQorDQorCW1jdV90eGQgPSAo c3RydWN0IG10NzkxNV9tY3VfdHhkICopc2tiX3B1c2goc2tiLCBzaXplb2YoKm1jdV90eGQpKTsN CisNCisJaWYgKHRlc3RfYml0KE1UNzZfU1RBVEVfTUNVX1JVTk5JTkcsICZkZXYtPm1waHkuc3Rh dGUpKSB7DQorCQl0eHEgPSBNVF9UWFFfTUNVX1dBOw0KKwkJcWlkeCA9IE1UX1RYX01DVV9QT1JU X1JYX1EwOw0KKwkJcGt0X2ZtdCA9IE1UX1RYX1RZUEVfQ01EOw0KKwl9IGVsc2Ugew0KKwkJdHhx ID0gTVRfVFhRX01DVTsNCisJCXFpZHggPSBNVF9UWF9NQ1VfUE9SVF9SWF9RMDsNCisJCXBrdF9m bXQgPSBNVF9UWF9UWVBFX0NNRDsNCisJfQ0KKw0KKwl0eGQgPSBtY3VfdHhkLT50eGQ7DQorDQor CXZhbCA9IEZJRUxEX1BSRVAoTVRfVFhEMF9UWF9CWVRFUywgc2tiLT5sZW4pIHwNCisJICAgICAg RklFTERfUFJFUChNVF9UWEQwX1BLVF9GTVQsIHBrdF9mbXQpIHwNCisJICAgICAgRklFTERfUFJF UChNVF9UWEQwX1FfSURYLCBxaWR4KTsNCisJdHhkWzBdID0gY3B1X3RvX2xlMzIodmFsKTsNCisN CisJdmFsID0gTVRfVFhEMV9MT05HX0ZPUk1BVCB8DQorCSAgICAgIEZJRUxEX1BSRVAoTVRfVFhE MV9IRFJfRk9STUFULCBNVF9IRFJfRk9STUFUX0NNRCk7DQorCXR4ZFsxXSA9IGNwdV90b19sZTMy KHZhbCk7DQorDQorCW1jdV90eGQtPmxlbiA9IGNwdV90b19sZTE2KHNrYi0+bGVuIC0gc2l6ZW9m KG1jdV90eGQtPnR4ZCkpOw0KKwltY3VfdHhkLT5wcV9pZCA9IGNwdV90b19sZTE2KE1DVV9QUV9J RChNVF9UWF9QT1JUX0lEWF9NQ1UsIHFpZHgpKTsNCisJbWN1X3R4ZC0+cGt0X3R5cGUgPSBNQ1Vf UEtUX0lEOw0KKwltY3VfdHhkLT5zZXEgPSBzZXE7DQorDQorCWlmIChjbWQgPCAwKSB7DQorCQlt Y3VfdHhkLT5zZXRfcXVlcnkgPSBNQ1VfUV9OQTsNCisJCW1jdV90eGQtPmNpZCA9IC1jbWQ7DQor CX0gZWxzZSB7DQorCQltY3VfdHhkLT5jaWQgPSBNQ1VfQ01EX0VYVF9DSUQ7DQorCQltY3VfdHhk LT5leHRfY2lkID0gY21kOw0KKwkJbWN1X3R4ZC0+ZXh0X2NpZF9hY2sgPSAxOw0KKw0KKwkJLyog ZG8gbm90IHVzZSBRX1NFVCBmb3IgZWZ1c2UgKi8NCisJCWlmIChjbWQgPT0gTUNVX0VYVF9DTURf RUZVU0VfQUNDRVNTKQ0KKwkJCW1jdV90eGQtPnNldF9xdWVyeSA9IE1DVV9RX1FVRVJZOw0KKwkJ ZWxzZQ0KKwkJCW1jdV90eGQtPnNldF9xdWVyeSA9IE1DVV9RX1NFVDsNCisJfQ0KKw0KKwltY3Vf dHhkLT5zMmRfaW5kZXggPSBNQ1VfUzJEX0gyTjsNCisJQlVJTERfQlVHX09OKGNtZCA9PSBNQ1Vf RVhUX0NNRF9FRlVTRV9BQ0NFU1MgJiYNCisJCSAgICAgbWN1X3R4ZC0+c2V0X3F1ZXJ5ICE9IE1D VV9RX1FVRVJZKTsNCisNCitleGl0Og0KKwlpZiAod2FpdF9zZXEpDQorCQkqd2FpdF9zZXEgPSBz ZXE7DQorDQorCXJldHVybiBtdDc2X3R4X3F1ZXVlX3NrYl9yYXcoZGV2LCB0eHEsIHNrYiwgMCk7 DQorfQ0KKw0KK3N0YXRpYyBpbnQNCittdDc5MTVfbWN1X3BhcnNlX2VlcHJvbShzdHJ1Y3QgbXQ3 OTE1X2RldiAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQ0KK3sNCisJc3RydWN0IG10NzkxNV9t Y3VfZWVwcm9tX2luZm8gKnJlczsNCisJdTggKmJ1ZjsNCisNCisJaWYgKCFza2IpDQorCQlyZXR1 cm4gLUVJTlZBTDsNCisNCisJc2tiX3B1bGwoc2tiLCBzaXplb2Yoc3RydWN0IG10NzkxNV9tY3Vf cnhkKSk7DQorDQorCXJlcyA9IChzdHJ1Y3QgbXQ3OTE1X21jdV9lZXByb21faW5mbyAqKXNrYi0+ ZGF0YTsNCisJYnVmID0gZGV2LT5tdDc2LmVlcHJvbS5kYXRhICsgbGUzMl90b19jcHUocmVzLT5h ZGRyKTsNCisJbWVtY3B5KGJ1ZiwgcmVzLT5kYXRhLCAxNik7DQorDQorCXJldHVybiAwOw0KK30N CisNCitzdGF0aWMgaW50DQorbXQ3OTE1X21jdV9wYXJzZV9yZXNwb25zZShzdHJ1Y3QgbXQ3OTE1 X2RldiAqZGV2LCBpbnQgY21kLA0KKwkJCSAgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IHNlcSkN Cit7DQorCXN0cnVjdCBtdDc5MTVfbWN1X3J4ZCAqcnhkID0gKHN0cnVjdCBtdDc5MTVfbWN1X3J4 ZCAqKXNrYi0+ZGF0YTsNCisJaW50IHJldCA9IDA7DQorDQorCWlmIChzZXEgIT0gcnhkLT5zZXEp DQorCQlyZXR1cm4gLUVBR0FJTjsNCisNCisJc3dpdGNoIChjbWQpIHsNCisJY2FzZSAtTUNVX0NN RF9QQVRDSF9TRU1fQ09OVFJPTDoNCisJCXNrYl9wdWxsKHNrYiwgc2l6ZW9mKCpyeGQpIC0gNCk7 DQorCQlyZXQgPSAqc2tiLT5kYXRhOw0KKwkJYnJlYWs7DQorCWNhc2UgTUNVX0VYVF9DTURfVEhF Uk1BTF9DVFJMOg0KKwkJc2tiX3B1bGwoc2tiLCBzaXplb2YoKnJ4ZCkgKyA0KTsNCisJCXJldCA9 IGxlMzJfdG9fY3B1KCooX19sZTMyICopc2tiLT5kYXRhKTsNCisJCWJyZWFrOw0KKwljYXNlIE1D VV9FWFRfQ01EX0VGVVNFX0FDQ0VTUzoNCisJCXJldCA9IG10NzkxNV9tY3VfcGFyc2VfZWVwcm9t KGRldiwgc2tiKTsNCisJCWJyZWFrOw0KKwlkZWZhdWx0Og0KKwkJYnJlYWs7DQorCX0NCisJZGV2 X2tmcmVlX3NrYihza2IpOw0KKw0KKwlyZXR1cm4gcmV0Ow0KK30NCisNCitzdGF0aWMgaW50DQor bXQ3OTE1X21jdV93YWl0X3Jlc3BvbnNlKHN0cnVjdCBtdDc5MTVfZGV2ICpkZXYsIGludCBjbWQs IGludCBzZXEpDQorew0KKwl1bnNpZ25lZCBsb25nIGV4cGlyZXMgPSBqaWZmaWVzICsgMjAgKiBI WjsNCisJc3RydWN0IHNrX2J1ZmYgKnNrYjsNCisJaW50IHJldCA9IDA7DQorDQorCXdoaWxlICh0 cnVlKSB7DQorCQlza2IgPSBtdDc2X21jdV9nZXRfcmVzcG9uc2UoJmRldi0+bXQ3NiwgZXhwaXJl cyk7DQorCQlpZiAoIXNrYikgew0KKwkJCWRldl9lcnIoZGV2LT5tdDc2LmRldiwgIk1lc3NhZ2Ug JWQgKHNlcSAlZCkgdGltZW91dFxuIiwNCisJCQkJY21kLCBzZXEpOw0KKwkJCXJldHVybiAtRVRJ TUVET1VUOw0KKwkJfQ0KKw0KKwkJcmV0ID0gbXQ3OTE1X21jdV9wYXJzZV9yZXNwb25zZShkZXYs IGNtZCwgc2tiLCBzZXEpOw0KKwkJaWYgKHJldCAhPSAtRUFHQUlOKQ0KKwkJCWJyZWFrOw0KKwl9 DQorDQorCXJldHVybiByZXQ7DQorfQ0KKw0KK3N0YXRpYyBpbnQNCittdDc5MTVfbWN1X3NlbmRf bWVzc2FnZShzdHJ1Y3QgbXQ3Nl9kZXYgKm1kZXYsIHN0cnVjdCBza19idWZmICpza2IsDQorCQkJ aW50IGNtZCwgYm9vbCB3YWl0X3Jlc3ApDQorew0KKwlzdHJ1Y3QgbXQ3OTE1X2RldiAqZGV2ID0g Y29udGFpbmVyX29mKG1kZXYsIHN0cnVjdCBtdDc5MTVfZGV2LCBtdDc2KTsNCisJaW50IHJldCwg c2VxOw0KKw0KKwltdXRleF9sb2NrKCZtZGV2LT5tY3UubXV0ZXgpOw0KKw0KKwlyZXQgPSBfX210 NzkxNV9tY3VfbXNnX3NlbmQoZGV2LCBza2IsIGNtZCwgJnNlcSk7DQorCWlmIChyZXQpDQorCQln b3RvIG91dDsNCisNCisJaWYgKHdhaXRfcmVzcCkNCisJCXJldCA9IG10NzkxNV9tY3Vfd2FpdF9y ZXNwb25zZShkZXYsIGNtZCwgc2VxKTsNCisNCitvdXQ6DQorCW11dGV4X3VubG9jaygmbWRldi0+ bWN1Lm11dGV4KTsNCisNCisJcmV0dXJuIHJldDsNCit9DQorDQorc3RhdGljIGludA0KK210Nzkx NV9tY3VfbXNnX3NlbmQoc3RydWN0IG10NzZfZGV2ICptZGV2LCBpbnQgY21kLCBjb25zdCB2b2lk ICpkYXRhLA0KKwkJICAgIGludCBsZW4sIGJvb2wgd2FpdF9yZXNwKQ0KK3sNCisJc3RydWN0IHNr X2J1ZmYgKnNrYjsNCisNCisJc2tiID0gbXQ3Nl9tY3VfbXNnX2FsbG9jKG1kZXYsIGRhdGEsIGxl bik7DQorCWlmICghc2tiKQ0KKwkJcmV0dXJuIC1FTk9NRU07DQorDQorCXJldHVybiBfX210NzZf bWN1X3NrYl9zZW5kX21zZyhtZGV2LCBza2IsIGNtZCwgd2FpdF9yZXNwKTsNCit9DQorDQorc3Rh dGljIHZvaWQNCittdDc5MTVfbWN1X2NzYV9maW5pc2godm9pZCAqcHJpdiwgdTggKm1hYywgc3Ry dWN0IGllZWU4MDIxMV92aWYgKnZpZikNCit7DQorCWlmICh2aWYtPmNzYV9hY3RpdmUpDQorCQlp ZWVlODAyMTFfY3NhX2ZpbmlzaCh2aWYpOw0KK30NCisNCitzdGF0aWMgdm9pZA0KK210NzkxNV9t Y3VfcnhfcmFkYXJfZGV0ZWN0ZWQoc3RydWN0IG10NzkxNV9kZXYgKmRldiwgc3RydWN0IHNrX2J1 ZmYgKnNrYikNCit7DQorCXN0cnVjdCBtdDc2X3BoeSAqbXBoeSA9ICZkZXYtPm10NzYucGh5Ow0K KwlzdHJ1Y3QgbXQ3OTE1X21jdV9yZGRfcmVwb3J0ICpyOw0KKw0KKwlyID0gKHN0cnVjdCBtdDc5 MTVfbWN1X3JkZF9yZXBvcnQgKilza2ItPmRhdGE7DQorDQorCWlmIChyLT5pZHggJiYgZGV2LT5t dDc2LnBoeTIpDQorCQltcGh5ID0gZGV2LT5tdDc2LnBoeTI7DQorDQorCWllZWU4MDIxMV9yYWRh cl9kZXRlY3RlZChtcGh5LT5odyk7DQorCWRldi0+aHdfcGF0dGVybisrOw0KK30NCisNCitzdGF0 aWMgdm9pZA0KK210NzkxNV9tY3VfdHhfcmF0ZV9jYWwoc3RydWN0IG10NzZfcGh5ICptcGh5LCBz dHJ1Y3QgbXQ3OTE1X21jdV9yYV9pbmZvICpyYSwNCisJCSAgICAgICBzdHJ1Y3QgcmF0ZV9pbmZv ICpyYXRlLCB1MTYgcikNCit7DQorCXN0cnVjdCBpZWVlODAyMTFfc3VwcG9ydGVkX2JhbmQgKnNi YW5kOw0KKwl1MTYgcnVfaWR4ID0gbGUxNl90b19jcHUocmEtPnJ1X2lkeCk7DQorCXUxNiBmbGFn cyA9IDA7DQorDQorCXJhdGUtPm1jcyA9IEZJRUxEX0dFVChNVF9SQV9SQVRFX01DUywgcik7DQor CXJhdGUtPm5zcyA9IEZJRUxEX0dFVChNVF9SQV9SQVRFX05TUywgcikgKyAxOw0KKw0KKwlzd2l0 Y2ggKEZJRUxEX0dFVChNVF9SQV9SQVRFX1RYX01PREUsIHIpKSB7DQorCWNhc2UgTVRfUEhZX1RZ UEVfQ0NLOg0KKwljYXNlIE1UX1BIWV9UWVBFX09GRE06DQorCQlpZiAobXBoeS0+Y2hhbmRlZi5j aGFuLT5iYW5kID09IE5MODAyMTFfQkFORF81R0haKQ0KKwkJCXNiYW5kID0gJm1waHktPnNiYW5k XzVnLnNiYW5kOw0KKwkJZWxzZQ0KKwkJCXNiYW5kID0gJm1waHktPnNiYW5kXzJnLnNiYW5kOw0K Kw0KKwkJcmF0ZS0+bGVnYWN5ID0gc2JhbmQtPmJpdHJhdGVzW3JhdGUtPm1jc10uYml0cmF0ZTsN CisJCWJyZWFrOw0KKwljYXNlIE1UX1BIWV9UWVBFX0hUOg0KKwljYXNlIE1UX1BIWV9UWVBFX0hU X0dGOg0KKwkJcmF0ZS0+bWNzICs9IChyYXRlLT5uc3MgLSAxKSAqIDg7DQorCQlmbGFncyB8PSBS QVRFX0lORk9fRkxBR1NfTUNTOw0KKw0KKwkJaWYgKHJhLT5naSkNCisJCQlmbGFncyB8PSBSQVRF X0lORk9fRkxBR1NfU0hPUlRfR0k7DQorCQlicmVhazsNCisJY2FzZSBNVF9QSFlfVFlQRV9WSFQ6 DQorCQlmbGFncyB8PSBSQVRFX0lORk9fRkxBR1NfVkhUX01DUzsNCisNCisJCWlmIChyYS0+Z2kp DQorCQkJZmxhZ3MgfD0gUkFURV9JTkZPX0ZMQUdTX1NIT1JUX0dJOw0KKwkJYnJlYWs7DQorCWNh c2UgTVRfUEhZX1RZUEVfSEVfU1U6DQorCWNhc2UgTVRfUEhZX1RZUEVfSEVfRVhUX1NVOg0KKwlj YXNlIE1UX1BIWV9UWVBFX0hFX1RCOg0KKwljYXNlIE1UX1BIWV9UWVBFX0hFX01VOg0KKwkJcmF0 ZS0+aGVfZ2kgPSByYS0+Z2k7DQorCQlyYXRlLT5oZV9kY20gPSBGSUVMRF9HRVQoTVRfUkFfUkFU RV9EQ01fRU4sIHIpOw0KKw0KKwkJZmxhZ3MgfD0gUkFURV9JTkZPX0ZMQUdTX0hFX01DUzsNCisJ CWJyZWFrOw0KKwlkZWZhdWx0Og0KKwkJYnJlYWs7DQorCX0NCisJcmF0ZS0+ZmxhZ3MgPSBmbGFn czsNCisNCisJaWYgKHJ1X2lkeCkgew0KKwkJc3dpdGNoIChydV9pZHgpIHsNCisJCWNhc2UgMSAu Li4gMjoNCisJCQlyYXRlLT5oZV9ydV9hbGxvYyA9IE5MODAyMTFfUkFURV9JTkZPX0hFX1JVX0FM TE9DXzk5NjsNCisJCQlicmVhazsNCisJCWNhc2UgMyAuLi4gNjoNCisJCQlyYXRlLT5oZV9ydV9h bGxvYyA9IE5MODAyMTFfUkFURV9JTkZPX0hFX1JVX0FMTE9DXzQ4NDsNCisJCQlicmVhazsNCisJ CWNhc2UgNyAuLi4gMTQ6DQorCQkJcmF0ZS0+aGVfcnVfYWxsb2MgPSBOTDgwMjExX1JBVEVfSU5G T19IRV9SVV9BTExPQ18yNDI7DQorCQkJYnJlYWs7DQorCQlkZWZhdWx0Og0KKwkJCXJhdGUtPmhl X3J1X2FsbG9jID0gTkw4MDIxMV9SQVRFX0lORk9fSEVfUlVfQUxMT0NfMTA2Ow0KKwkJCWJyZWFr Ow0KKwkJfQ0KKwkJcmF0ZS0+YncgPSBSQVRFX0lORk9fQldfSEVfUlU7DQorCX0gZWxzZSB7DQor CQl1OCBidyA9IG10NzkxNV9tY3VfY2hhbl9idygmbXBoeS0+Y2hhbmRlZikgLQ0KKwkJCUZJRUxE X0dFVChNVF9SQV9SQVRFX0JXLCByKTsNCisNCisJCXN3aXRjaCAoYncpIHsNCisJCWNhc2UgSUVF RTgwMjExX1NUQV9SWF9CV18xNjA6DQorCQkJcmF0ZS0+YncgPSBSQVRFX0lORk9fQldfMTYwOw0K KwkJCWJyZWFrOw0KKwkJY2FzZSBJRUVFODAyMTFfU1RBX1JYX0JXXzgwOg0KKwkJCXJhdGUtPmJ3 ID0gUkFURV9JTkZPX0JXXzgwOw0KKwkJCWJyZWFrOw0KKwkJY2FzZSBJRUVFODAyMTFfU1RBX1JY X0JXXzQwOg0KKwkJCXJhdGUtPmJ3ID0gUkFURV9JTkZPX0JXXzQwOw0KKwkJCWJyZWFrOw0KKwkJ ZGVmYXVsdDoNCisJCQlyYXRlLT5idyA9IFJBVEVfSU5GT19CV18yMDsNCisJCQlicmVhazsNCisJ CX0NCisJfQ0KK30NCisNCitzdGF0aWMgdm9pZA0KK210NzkxNV9tY3VfdHhfcmF0ZV9yZXBvcnQo c3RydWN0IG10NzkxNV9kZXYgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYikNCit7DQorCXN0cnVj dCBtdDc5MTVfbWN1X3JhX2luZm8gKnJhID0gKHN0cnVjdCBtdDc5MTVfbWN1X3JhX2luZm8gKilz a2ItPmRhdGE7DQorCXUxNiB3Y2lkeCA9IGxlMTZfdG9fY3B1KHJhLT53bGFuX2lkeCk7DQorCXN0 cnVjdCBtdDc2X3djaWQgKndjaWQgPSByY3VfZGVyZWZlcmVuY2UoZGV2LT5tdDc2LndjaWRbd2Np ZHhdKTsNCisJc3RydWN0IG10NzkxNV9zdGEgKm1zdGEgPSBjb250YWluZXJfb2Yod2NpZCwgc3Ry dWN0IG10NzkxNV9zdGEsIHdjaWQpOw0KKwlzdHJ1Y3QgbXQ3OTE1X3N0YV9zdGF0cyAqc3RhdHMg PSAmbXN0YS0+c3RhdHM7DQorCXN0cnVjdCBtdDc2X3BoeSAqbXBoeSA9ICZkZXYtPm1waHk7DQor CXN0cnVjdCByYXRlX2luZm8gcmF0ZSA9IHt9LCBwcm9iX3JhdGUgPSB7fTsNCisJdTE2IGF0dGVt cHRzID0gbGUxNl90b19jcHUocmEtPmF0dGVtcHRzKTsNCisJdTE2IGN1cnIgPSBsZTE2X3RvX2Nw dShyYS0+Y3Vycl9yYXRlKTsNCisJdTE2IHByb2JlID0gbGUxNl90b19jcHUocmEtPnByb2JfdXBf cmF0ZSk7DQorDQorCWlmIChtc3RhLT53Y2lkLmV4dF9waHkgJiYgZGV2LT5tdDc2LnBoeTIpDQor CQltcGh5ID0gZGV2LT5tdDc2LnBoeTI7DQorDQorCS8qIGN1cnJlbnQgcmF0ZSAqLw0KKwltdDc5 MTVfbWN1X3R4X3JhdGVfY2FsKG1waHksIHJhLCAmcmF0ZSwgY3Vycik7DQorCXN0YXRzLT50eF9y YXRlID0gcmF0ZTsNCisNCisJLyogcHJvYmluZyByYXRlICovDQorCW10NzkxNV9tY3VfdHhfcmF0 ZV9jYWwobXBoeSwgcmEsICZwcm9iX3JhdGUsIHByb2JlKTsNCisJc3RhdHMtPnByb2JfcmF0ZSA9 IHByb2JfcmF0ZTsNCisNCisJaWYgKGF0dGVtcHRzKSB7DQorCQl1MTYgc3VjY2VzcyA9IGxlMTZf dG9fY3B1KHJhLT5zdWNjZXNzKTsNCisNCisJCXN0YXRzLT5wZXIgPSAxMDAwICogKGF0dGVtcHRz IC0gc3VjY2VzcykgLyBhdHRlbXB0czsNCisJfQ0KK30NCisNCitzdGF0aWMgdm9pZA0KK210Nzkx NV9tY3VfcnhfZXh0X2V2ZW50KHN0cnVjdCBtdDc5MTVfZGV2ICpkZXYsIHN0cnVjdCBza19idWZm ICpza2IpDQorew0KKwlzdHJ1Y3QgbXQ3OTE1X21jdV9yeGQgKnJ4ZCA9IChzdHJ1Y3QgbXQ3OTE1 X21jdV9yeGQgKilza2ItPmRhdGE7DQorDQorCXN3aXRjaCAocnhkLT5leHRfZWlkKSB7DQorCWNh c2UgTUNVX0VYVF9FVkVOVF9SRERfUkVQT1JUOg0KKwkJbXQ3OTE1X21jdV9yeF9yYWRhcl9kZXRl Y3RlZChkZXYsIHNrYik7DQorCQlicmVhazsNCisJY2FzZSBNQ1VfRVhUX0VWRU5UX0NTQV9OT1RJ Rlk6DQorCQlpZWVlODAyMTFfaXRlcmF0ZV9hY3RpdmVfaW50ZXJmYWNlc19hdG9taWMoZGV2LT5t dDc2Lmh3LA0KKwkJCQlJRUVFODAyMTFfSUZBQ0VfSVRFUl9SRVNVTUVfQUxMLA0KKwkJCQltdDc5 MTVfbWN1X2NzYV9maW5pc2gsIGRldik7DQorCQlicmVhazsNCisJY2FzZSBNQ1VfRVhUX0VWRU5U X1JBVEVfUkVQT1JUOg0KKwkJbXQ3OTE1X21jdV90eF9yYXRlX3JlcG9ydChkZXYsIHNrYik7DQor CQlicmVhazsNCisJZGVmYXVsdDoNCisJCWJyZWFrOw0KKwl9DQorfQ0KKw0KK3N0YXRpYyB2b2lk DQorbXQ3OTE1X21jdV9yeF91bnNvbGljaXRlZF9ldmVudChzdHJ1Y3QgbXQ3OTE1X2RldiAqZGV2 LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQ0KK3sNCisJc3RydWN0IG10NzkxNV9tY3VfcnhkICpyeGQg PSAoc3RydWN0IG10NzkxNV9tY3VfcnhkICopc2tiLT5kYXRhOw0KKw0KKwlzd2l0Y2ggKHJ4ZC0+ ZWlkKSB7DQorCWNhc2UgTUNVX0VWRU5UX0VYVDoNCisJCW10NzkxNV9tY3VfcnhfZXh0X2V2ZW50 KGRldiwgc2tiKTsNCisJCWJyZWFrOw0KKwlkZWZhdWx0Og0KKwkJYnJlYWs7DQorCX0NCisJZGV2 X2tmcmVlX3NrYihza2IpOw0KK30NCisNCit2b2lkIG10NzkxNV9tY3VfcnhfZXZlbnQoc3RydWN0 IG10NzkxNV9kZXYgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYikNCit7DQorCXN0cnVjdCBtdDc5 MTVfbWN1X3J4ZCAqcnhkID0gKHN0cnVjdCBtdDc5MTVfbWN1X3J4ZCAqKXNrYi0+ZGF0YTsNCisN CisJaWYgKHJ4ZC0+ZXh0X2VpZCA9PSBNQ1VfRVhUX0VWRU5UX1RIRVJNQUxfUFJPVEVDVCB8fA0K KwkgICAgcnhkLT5leHRfZWlkID09IE1DVV9FWFRfRVZFTlRfQVNTRVJUX0RVTVAgfHwNCisJICAg IHJ4ZC0+ZXh0X2VpZCA9PSBNQ1VfRVhUX0VWRU5UX1BTX1NZTkMgfHwNCisJICAgIHJ4ZC0+ZXh0 X2VpZCA9PSBNQ1VfRVhUX0VWRU5UX1JBVEVfUkVQT1JUIHx8DQorCSAgICAhcnhkLT5zZXEpDQor CQltdDc5MTVfbWN1X3J4X3Vuc29saWNpdGVkX2V2ZW50KGRldiwgc2tiKTsNCisJZWxzZQ0KKwkJ bXQ3Nl9tY3VfcnhfZXZlbnQoJmRldi0+bXQ3Niwgc2tiKTsNCit9DQorDQorc3RhdGljIHN0cnVj dCBza19idWZmICoNCittdDc5MTVfbWN1X2FsbG9jX3N0YV9yZXEoc3RydWN0IG10NzkxNV9kZXYg KmRldiwgc3RydWN0IG10NzkxNV92aWYgKm12aWYsDQorCQkJIHN0cnVjdCBtdDc5MTVfc3RhICpt c3RhLCBpbnQgbGVuKQ0KK3sNCisJc3RydWN0IHN0YV9yZXFfaGRyIGhkciA9IHsNCisJCS5ic3Nf aWR4ID0gbXZpZi0+aWR4LA0KKwkJLndsYW5faWR4X2xvID0gbXN0YSA/IHRvX3djaWRfbG8obXN0 YS0+d2NpZC5pZHgpIDogMCwNCisJCS53bGFuX2lkeF9oaSA9IG1zdGEgPyB0b193Y2lkX2hpKG1z dGEtPndjaWQuaWR4KSA6IDAsDQorCQkubXVhcl9pZHggPSBtc3RhID8gbXZpZi0+b21hY19pZHgg OiAwLA0KKwkJLmlzX3Rsdl9hcHBlbmQgPSAxLA0KKwl9Ow0KKwlzdHJ1Y3Qgc2tfYnVmZiAqc2ti Ow0KKw0KKwlza2IgPSBtdDc2X21jdV9tc2dfYWxsb2MoJmRldi0+bXQ3NiwgTlVMTCwgbGVuKTsN CisJaWYgKCFza2IpDQorCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsNCisNCisJc2tiX3B1dF9k YXRhKHNrYiwgJmhkciwgc2l6ZW9mKGhkcikpOw0KKw0KKwlyZXR1cm4gc2tiOw0KK30NCisNCitz dGF0aWMgc3RydWN0IHd0YmxfcmVxX2hkciAqDQorbXQ3OTE1X21jdV9hbGxvY193dGJsX3JlcShz dHJ1Y3QgbXQ3OTE1X2RldiAqZGV2LCBzdHJ1Y3QgbXQ3OTE1X3N0YSAqbXN0YSwNCisJCQkgIGlu dCBjbWQsIHZvaWQgKnN0YV93dGJsLCBzdHJ1Y3Qgc2tfYnVmZiAqKnNrYikNCit7DQorCXN0cnVj dCB0bHYgKnN0YV9oZHIgPSBzdGFfd3RibDsNCisJc3RydWN0IHd0YmxfcmVxX2hkciBoZHIgPSB7 DQorCQkud2xhbl9pZHhfbG8gPSB0b193Y2lkX2xvKG1zdGEtPndjaWQuaWR4KSwNCisJCS53bGFu X2lkeF9oaSA9IHRvX3djaWRfaGkobXN0YS0+d2NpZC5pZHgpLA0KKwkJLm9wZXJhdGlvbiA9IGNt ZCwNCisJfTsNCisJc3RydWN0IHNrX2J1ZmYgKm5za2IgPSAqc2tiOw0KKw0KKwlpZiAoIW5za2Ip IHsNCisJCW5za2IgPSBtdDc2X21jdV9tc2dfYWxsb2MoJmRldi0+bXQ3NiwgTlVMTCwNCisJCQkJ CSAgTVQ3OTE1X1dUQkxfVVBEQVRFX0JBX1NJWkUpOw0KKwkJaWYgKCFuc2tiKQ0KKwkJCXJldHVy biBFUlJfUFRSKC1FTk9NRU0pOw0KKw0KKwkJKnNrYiA9IG5za2I7DQorCX0NCisNCisJaWYgKHN0 YV9oZHIpDQorCQlzdGFfaGRyLT5sZW4gPSBjcHVfdG9fbGUxNihzaXplb2YoaGRyKSk7DQorDQor CXJldHVybiBza2JfcHV0X2RhdGEobnNrYiwgJmhkciwgc2l6ZW9mKGhkcikpOw0KK30NCisNCitz dGF0aWMgc3RydWN0IHRsdiAqDQorbXQ3OTE1X21jdV9hZGRfbmVzdGVkX3RsdihzdHJ1Y3Qgc2tf YnVmZiAqc2tiLCBpbnQgdGFnLCBpbnQgbGVuLA0KKwkJCSAgdm9pZCAqc3RhX250bHYsIHZvaWQg KnN0YV93dGJsKQ0KK3sNCisJc3RydWN0IHN0YV9udGx2X2hkciAqbnRsdl9oZHIgPSBzdGFfbnRs djsNCisJc3RydWN0IHRsdiAqc3RhX2hkciA9IHN0YV93dGJsOw0KKwlzdHJ1Y3QgdGx2ICpwdGx2 LCB0bHYgPSB7DQorCQkudGFnID0gY3B1X3RvX2xlMTYodGFnKSwNCisJCS5sZW4gPSBjcHVfdG9f bGUxNihsZW4pLA0KKwl9Ow0KKwl1MTYgbnRsdjsNCisNCisJcHRsdiA9IHNrYl9wdXQoc2tiLCBs ZW4pOw0KKwltZW1jcHkocHRsdiwgJnRsdiwgc2l6ZW9mKHRsdikpOw0KKw0KKwludGx2ID0gbGUx Nl90b19jcHUobnRsdl9oZHItPnRsdl9udW0pOw0KKwludGx2X2hkci0+dGx2X251bSA9IGNwdV90 b19sZTE2KG50bHYgKyAxKTsNCisNCisJaWYgKHN0YV9oZHIpIHsNCisJCXUxNiBzaXplID0gbGUx Nl90b19jcHUoc3RhX2hkci0+bGVuKTsNCisNCisJCXN0YV9oZHItPmxlbiA9IGNwdV90b19sZTE2 KHNpemUgKyBsZW4pOw0KKwl9DQorDQorCXJldHVybiBwdGx2Ow0KK30NCisNCitzdGF0aWMgc3Ry dWN0IHRsdiAqDQorbXQ3OTE1X21jdV9hZGRfdGx2KHN0cnVjdCBza19idWZmICpza2IsIGludCB0 YWcsIGludCBsZW4pDQorew0KKwlyZXR1cm4gbXQ3OTE1X21jdV9hZGRfbmVzdGVkX3Rsdihza2Is IHRhZywgbGVuLCBza2ItPmRhdGEsIE5VTEwpOw0KK30NCisNCitzdGF0aWMgc3RydWN0IHRsdiAq DQorbXQ3OTE1X21jdV9hZGRfbmVzdGVkX3N1YnRsdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQg c3ViX3RhZywgaW50IHN1Yl9sZW4sDQorCQkJICAgICBfX2xlMTYgKnN1Yl9udGx2LCBfX2xlMTYg KmxlbikNCit7DQorCXN0cnVjdCB0bHYgKnB0bHYsIHRsdiA9IHsNCisJCS50YWcgPSBjcHVfdG9f bGUxNihzdWJfdGFnKSwNCisJCS5sZW4gPSBjcHVfdG9fbGUxNihzdWJfbGVuKSwNCisJfTsNCisN CisJcHRsdiA9IHNrYl9wdXQoc2tiLCBzdWJfbGVuKTsNCisJbWVtY3B5KHB0bHYsICZ0bHYsIHNp emVvZih0bHYpKTsNCisNCisJKnN1Yl9udGx2ID0gY3B1X3RvX2xlMTYobGUxNl90b19jcHUoKnN1 Yl9udGx2KSArIDEpOw0KKwkqbGVuID0gY3B1X3RvX2xlMTYobGUxNl90b19jcHUoKmxlbikgKyBz dWJfbGVuKTsNCisNCisJcmV0dXJuIHB0bHY7DQorfQ0KKw0KKy8qKiBic3MgaW5mbyAqKi8NCitz dGF0aWMgaW50DQorbXQ3OTE1X21jdV9ic3NfYmFzaWNfdGx2KHN0cnVjdCBza19idWZmICpza2Is IHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsDQorCQkJIHN0cnVjdCBtdDc5MTVfcGh5ICpwaHks IGJvb2wgZW5hYmxlKQ0KK3sNCisJc3RydWN0IG10NzkxNV92aWYgKm12aWYgPSAoc3RydWN0IG10 NzkxNV92aWYgKil2aWYtPmRydl9wcml2Ow0KKwlzdHJ1Y3QgY2ZnODAyMTFfY2hhbl9kZWYgKmNo YW5kZWYgPSAmcGh5LT5tdDc2LT5jaGFuZGVmOw0KKwllbnVtIG5sODAyMTFfYmFuZCBiYW5kID0g Y2hhbmRlZi0+Y2hhbi0+YmFuZDsNCisJc3RydWN0IGJzc19pbmZvX2Jhc2ljICpic3M7DQorCXUx NiB3bGFuX2lkeCA9IG12aWYtPnN0YS53Y2lkLmlkeDsNCisJdTMyIHR5cGUgPSBORVRXT1JLX0lO RlJBOw0KKwlzdHJ1Y3QgdGx2ICp0bHY7DQorDQorCXRsdiA9IG10NzkxNV9tY3VfYWRkX3Rsdihz a2IsIEJTU19JTkZPX0JBU0lDLCBzaXplb2YoKmJzcykpOw0KKw0KKwlzd2l0Y2ggKHZpZi0+dHlw ZSkgew0KKwljYXNlIE5MODAyMTFfSUZUWVBFX01FU0hfUE9JTlQ6DQorCWNhc2UgTkw4MDIxMV9J RlRZUEVfQVA6DQorCQlicmVhazsNCisJY2FzZSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OOg0KKwkJ LyogVE9ETzogZW5hYmxlIEJTU19JTkZPX1VBUFNEICYgQlNTX0lORk9fUE0gKi8NCisJCWlmIChl bmFibGUpIHsNCisJCQlzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhOw0KKwkJCXN0cnVjdCBtdDc5 MTVfc3RhICptc3RhOw0KKw0KKwkJCXJjdV9yZWFkX2xvY2soKTsNCisJCQlzdGEgPSBpZWVlODAy MTFfZmluZF9zdGEodmlmLCB2aWYtPmJzc19jb25mLmJzc2lkKTsNCisJCQlpZiAoIXN0YSkgew0K KwkJCQlyY3VfcmVhZF91bmxvY2soKTsNCisJCQkJcmV0dXJuIC1FSU5WQUw7DQorCQkJfQ0KKw0K KwkJCW1zdGEgPSAoc3RydWN0IG10NzkxNV9zdGEgKilzdGEtPmRydl9wcml2Ow0KKwkJCXdsYW5f aWR4ID0gbXN0YS0+d2NpZC5pZHg7DQorCQkJcmN1X3JlYWRfdW5sb2NrKCk7DQorCQl9DQorCQli cmVhazsNCisJY2FzZSBOTDgwMjExX0lGVFlQRV9BREhPQzoNCisJCXR5cGUgPSBORVRXT1JLX0lC U1M7DQorCQlicmVhazsNCisJZGVmYXVsdDoNCisJCVdBUk5fT04oMSk7DQorCQlicmVhazsNCisJ fQ0KKw0KKwlic3MgPSAoc3RydWN0IGJzc19pbmZvX2Jhc2ljICopdGx2Ow0KKwltZW1jcHkoYnNz LT5ic3NpZCwgdmlmLT5ic3NfY29uZi5ic3NpZCwgRVRIX0FMRU4pOw0KKwlic3MtPmJjbl9pbnRl cnZhbCA9IGNwdV90b19sZTE2KHZpZi0+YnNzX2NvbmYuYmVhY29uX2ludCk7DQorCWJzcy0+bmV0 d29ya190eXBlID0gY3B1X3RvX2xlMzIodHlwZSk7DQorCWJzcy0+ZHRpbV9wZXJpb2QgPSB2aWYt PmJzc19jb25mLmR0aW1fcGVyaW9kOw0KKwlic3MtPmJtY193Y2lkX2xvID0gdG9fd2NpZF9sbyh3 bGFuX2lkeCk7DQorCWJzcy0+Ym1jX3djaWRfaGkgPSB0b193Y2lkX2hpKHdsYW5faWR4KTsNCisJ YnNzLT5waHlfbW9kZSA9IG10NzkxNV9nZXRfcGh5X21vZGUocGh5LT5kZXYsIHZpZiwgYmFuZCwg TlVMTCk7DQorCWJzcy0+d21tX2lkeCA9IG12aWYtPndtbV9pZHg7DQorCWJzcy0+YWN0aXZlID0g ZW5hYmxlOw0KKw0KKwlyZXR1cm4gMDsNCit9DQorDQorc3RhdGljIHZvaWQNCittdDc5MTVfbWN1 X2Jzc19vbWFjX3RsdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAq dmlmKQ0KK3sNCisJc3RydWN0IG10NzkxNV92aWYgKm12aWYgPSAoc3RydWN0IG10NzkxNV92aWYg Kil2aWYtPmRydl9wcml2Ow0KKwlzdHJ1Y3QgYnNzX2luZm9fb21hYyAqb21hYzsNCisJc3RydWN0 IHRsdiAqdGx2Ow0KKwl1MzIgdHlwZSA9IDA7DQorCXU4IGlkeDsNCisNCisJdGx2ID0gbXQ3OTE1 X21jdV9hZGRfdGx2KHNrYiwgQlNTX0lORk9fT01BQywgc2l6ZW9mKCpvbWFjKSk7DQorDQorCXN3 aXRjaCAodmlmLT50eXBlKSB7DQorCWNhc2UgTkw4MDIxMV9JRlRZUEVfTUVTSF9QT0lOVDoNCisJ Y2FzZSBOTDgwMjExX0lGVFlQRV9BUDoNCisJCXR5cGUgPSBDT05ORUNUSU9OX0lORlJBX0FQOw0K KwkJYnJlYWs7DQorCWNhc2UgTkw4MDIxMV9JRlRZUEVfU1RBVElPTjoNCisJCXR5cGUgPSBDT05O RUNUSU9OX0lORlJBX1NUQTsNCisJCWJyZWFrOw0KKwljYXNlIE5MODAyMTFfSUZUWVBFX0FESE9D Og0KKwkJdHlwZSA9IENPTk5FQ1RJT05fSUJTU19BREhPQzsNCisJCWJyZWFrOw0KKwlkZWZhdWx0 Og0KKwkJV0FSTl9PTigxKTsNCisJCWJyZWFrOw0KKwl9DQorDQorCW9tYWMgPSAoc3RydWN0IGJz c19pbmZvX29tYWMgKil0bHY7DQorCWlkeCA9IG12aWYtPm9tYWNfaWR4ID4gRVhUX0JTU0lEX1NU QVJUID8gSFdfQlNTSURfMCA6IG12aWYtPm9tYWNfaWR4Ow0KKwlvbWFjLT5jb25uX3R5cGUgPSBj cHVfdG9fbGUzMih0eXBlKTsNCisJb21hYy0+b21hY19pZHggPSBtdmlmLT5vbWFjX2lkeDsNCisJ b21hYy0+YmFuZF9pZHggPSBtdmlmLT5iYW5kX2lkeDsNCisJb21hYy0+aHdfYnNzX2lkeCA9IGlk eDsNCit9DQorDQorc3RhdGljIHZvaWQNCittdDc5MTVfbWN1X2Jzc19yZmNoX3RsdihzdHJ1Y3Qg c2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLA0KKwkJCXN0cnVjdCBtdDc5 MTVfcGh5ICpwaHkpDQorew0KKwlzdHJ1Y3QgY2ZnODAyMTFfY2hhbl9kZWYgKmNoYW5kZWYgPSAm cGh5LT5tdDc2LT5jaGFuZGVmOw0KKwlzdHJ1Y3QgYnNzX2luZm9fcmZfY2ggKmNoOw0KKwlzdHJ1 Y3QgdGx2ICp0bHY7DQorCWludCBmcmVxMSA9IGNoYW5kZWYtPmNlbnRlcl9mcmVxMTsNCisNCisJ dGx2ID0gbXQ3OTE1X21jdV9hZGRfdGx2KHNrYiwgQlNTX0lORk9fUkZfQ0gsIHNpemVvZigqY2gp KTsNCisNCisJY2ggPSAoc3RydWN0IGJzc19pbmZvX3JmX2NoICopdGx2Ow0KKwljaC0+cHJpX2No ID0gY2hhbmRlZi0+Y2hhbi0+aHdfdmFsdWU7DQorCWNoLT5jZW50ZXJfY2gwID0gaWVlZTgwMjEx X2ZyZXF1ZW5jeV90b19jaGFubmVsKGZyZXExKTsNCisJY2gtPmJ3ID0gbXQ3OTE1X21jdV9jaGFu X2J3KGNoYW5kZWYpOw0KKw0KKwlpZiAoY2hhbmRlZi0+d2lkdGggPT0gTkw4MDIxMV9DSEFOX1dJ RFRIXzgwUDgwKSB7DQorCQlpbnQgZnJlcTIgPSBjaGFuZGVmLT5jZW50ZXJfZnJlcTI7DQorDQor CQljaC0+Y2VudGVyX2NoMSA9IGllZWU4MDIxMV9mcmVxdWVuY3lfdG9fY2hhbm5lbChmcmVxMik7 DQorCX0NCisNCisJY2gtPmhlX2FsbF9kaXNhYmxlID0gdHJ1ZTsNCit9DQorDQorc3RhdGljIHZv aWQNCittdDc5MTVfbWN1X2Jzc19yYV90bHYoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGll ZWU4MDIxMV92aWYgKnZpZiwNCisJCSAgICAgIHN0cnVjdCBtdDc5MTVfcGh5ICpwaHkpDQorew0K KwlzdHJ1Y3QgYnNzX2luZm9fcmEgKnJhOw0KKwlzdHJ1Y3QgdGx2ICp0bHY7DQorCWludCBtYXhf bnNzID0gaHdlaWdodDgocGh5LT5jaGFpbm1hc2spOw0KKw0KKwl0bHYgPSBtdDc5MTVfbWN1X2Fk ZF90bHYoc2tiLCBCU1NfSU5GT19SQSwgc2l6ZW9mKCpyYSkpOw0KKw0KKwlyYSA9IChzdHJ1Y3Qg YnNzX2luZm9fcmEgKil0bHY7DQorCXJhLT5vcF9tb2RlID0gdmlmLT50eXBlID09IE5MODAyMTFf SUZUWVBFX0FQOw0KKwlyYS0+YWRob2NfZW4gPSB2aWYtPnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVf QURIT0M7DQorCXJhLT5zaG9ydF9wcmVhbWJsZSA9IHRydWU7DQorCXJhLT50eF9zdHJlYW1zID0g bWF4X25zczsNCisJcmEtPnJ4X3N0cmVhbXMgPSBtYXhfbnNzOw0KKwlyYS0+YWxnbyA9IDQ7DQor CXJhLT50cmFpbl91cF9ydWxlID0gMjsNCisJcmEtPnRyYWluX3VwX2hpZ2hfdGhyZXMgPSAxMTA7 DQorCXJhLT50cmFpbl91cF9ydWxlX3Jzc2kgPSAtNzA7DQorCXJhLT5sb3dfdHJhZmZpY190aHJl cyA9IDI7DQorCXJhLT5waHlfY2FwID0gY3B1X3RvX2xlMzIoMHhmZGYpOw0KKwlyYS0+aW50ZXJ2 YWwgPSBjcHVfdG9fbGUzMig1MDApOw0KKwlyYS0+ZmFzdF9pbnRlcnZhbCA9IGNwdV90b19sZTMy KDEwMCk7DQorfQ0KKw0KK3N0YXRpYyB2b2lkDQorbXQ3OTE1X21jdV9ic3NfZXh0X3RsdihzdHJ1 Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbXQ3OTE1X3ZpZiAqbXZpZikNCit7DQorLyogU0lGUyAy MHVzICsgNTEyIGJ5dGUgYmVhY29uIHRyYW5taXR0ZWQgYnkgMU1icHMgKDM5MDZ1cykgKi8NCisj ZGVmaW5lIEJDTl9UWF9FU1RJTUFURV9USU1FCSg0MDk2ICsgMjApDQorCXN0cnVjdCBic3NfaW5m b19leHRfYnNzICpleHQ7DQorCWludCBleHRfYnNzX2lkeCwgdHNmX29mZnNldDsNCisJc3RydWN0 IHRsdiAqdGx2Ow0KKw0KKwlleHRfYnNzX2lkeCA9IG12aWYtPm9tYWNfaWR4IC0gRVhUX0JTU0lE X1NUQVJUOw0KKwlpZiAoZXh0X2Jzc19pZHggPCAwKQ0KKwkJcmV0dXJuOw0KKw0KKwl0bHYgPSBt dDc5MTVfbWN1X2FkZF90bHYoc2tiLCBCU1NfSU5GT19FWFRfQlNTLCBzaXplb2YoKmV4dCkpOw0K Kw0KKwlleHQgPSAoc3RydWN0IGJzc19pbmZvX2V4dF9ic3MgKil0bHY7DQorCXRzZl9vZmZzZXQg PSBleHRfYnNzX2lkeCAqIEJDTl9UWF9FU1RJTUFURV9USU1FOw0KKwlleHQtPm1ic3NfdHNmX29m ZnNldCA9IGNwdV90b19sZTMyKHRzZl9vZmZzZXQpOw0KK30NCisNCitzdGF0aWMgdm9pZA0KK210 NzkxNV9tY3VfYnNzX2JtY190bHYoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG10NzkxNV9w aHkgKnBoeSkNCit7DQorCXN0cnVjdCBic3NfaW5mb19ibWNfcmF0ZSAqYm1jOw0KKwlzdHJ1Y3Qg Y2ZnODAyMTFfY2hhbl9kZWYgKmNoYW5kZWYgPSAmcGh5LT5tdDc2LT5jaGFuZGVmOw0KKwllbnVt IG5sODAyMTFfYmFuZCBiYW5kID0gY2hhbmRlZi0+Y2hhbi0+YmFuZDsNCisJc3RydWN0IHRsdiAq dGx2Ow0KKw0KKwl0bHYgPSBtdDc5MTVfbWN1X2FkZF90bHYoc2tiLCBCU1NfSU5GT19CTUNfUkFU RSwgc2l6ZW9mKCpibWMpKTsNCisNCisJYm1jID0gKHN0cnVjdCBic3NfaW5mb19ibWNfcmF0ZSAq KXRsdjsNCisJaWYgKGJhbmQgPT0gTkw4MDIxMV9CQU5EXzJHSFopIHsNCisJCWJtYy0+c2hvcnRf cHJlYW1ibGUgPSB0cnVlOw0KKwl9IGVsc2Ugew0KKwkJYm1jLT5iY190cmFucyA9IGNwdV90b19s ZTE2KDB4MjAwMCk7DQorCQlibWMtPm1jX3RyYW5zID0gY3B1X3RvX2xlMTYoMHgyMDgwKTsNCisJ fQ0KK30NCisNCitzdGF0aWMgdm9pZA0KK210NzkxNV9tY3VfYnNzX3N5bmNfdGx2KHN0cnVjdCBz a19idWZmICpza2IsIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYpDQorew0KKwlzdHJ1Y3QgYnNz X2luZm9fc3luY19tb2RlICpzeW5jOw0KKwlzdHJ1Y3QgdGx2ICp0bHY7DQorDQorCXRsdiA9IG10 NzkxNV9tY3VfYWRkX3Rsdihza2IsIEJTU19JTkZPX1NZTkNfTU9ERSwgc2l6ZW9mKCpzeW5jKSk7 DQorDQorCXN5bmMgPSAoc3RydWN0IGJzc19pbmZvX3N5bmNfbW9kZSAqKXRsdjsNCisJc3luYy0+ YmNuX2ludGVydmFsID0gY3B1X3RvX2xlMTYodmlmLT5ic3NfY29uZi5iZWFjb25faW50KTsNCisJ c3luYy0+ZHRpbV9wZXJpb2QgPSB2aWYtPmJzc19jb25mLmR0aW1fcGVyaW9kOw0KKwlzeW5jLT5l bmFibGUgPSB0cnVlOw0KK30NCisNCitpbnQgbXQ3OTE1X21jdV9hZGRfYnNzX2luZm8oc3RydWN0 IG10NzkxNV9waHkgKnBoeSwNCisJCQkgICAgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZiwgaW50 IGVuYWJsZSkNCit7DQorCXN0cnVjdCBtdDc5MTVfdmlmICptdmlmID0gKHN0cnVjdCBtdDc5MTVf dmlmICopdmlmLT5kcnZfcHJpdjsNCisJc3RydWN0IHNrX2J1ZmYgKnNrYjsNCisNCisJc2tiID0g bXQ3OTE1X21jdV9hbGxvY19zdGFfcmVxKHBoeS0+ZGV2LCBtdmlmLCBOVUxMLA0KKwkJCQkgICAg ICAgTVQ3OTE1X1NUQV9VUERBVEVfTUFYX1NJWkUpOw0KKwlpZiAoSVNfRVJSKHNrYikpDQorCQly ZXR1cm4gUFRSX0VSUihza2IpOw0KKw0KKwkvKiBic3Nfb21hYyBtdXN0IGJlIGZpcnN0ICovDQor CWlmIChlbmFibGUpDQorCQltdDc5MTVfbWN1X2Jzc19vbWFjX3Rsdihza2IsIHZpZik7DQorDQor CW10NzkxNV9tY3VfYnNzX2Jhc2ljX3Rsdihza2IsIHZpZiwgcGh5LCBlbmFibGUpOw0KKw0KKwlp ZiAoZW5hYmxlKSB7DQorCQltdDc5MTVfbWN1X2Jzc19yZmNoX3Rsdihza2IsIHZpZiwgcGh5KTsN CisJCW10NzkxNV9tY3VfYnNzX2JtY190bHYoc2tiLCBwaHkpOw0KKwkJbXQ3OTE1X21jdV9ic3Nf cmFfdGx2KHNrYiwgdmlmLCBwaHkpOw0KKw0KKwkJaWYgKG12aWYtPm9tYWNfaWR4ID4gSFdfQlNT SURfTUFYKQ0KKwkJCW10NzkxNV9tY3VfYnNzX2V4dF90bHYoc2tiLCBtdmlmKTsNCisJCWVsc2UN CisJCQltdDc5MTVfbWN1X2Jzc19zeW5jX3Rsdihza2IsIHZpZik7DQorCX0NCisNCisJcmV0dXJu IF9fbXQ3Nl9tY3Vfc2tiX3NlbmRfbXNnKCZwaHktPmRldi0+bXQ3Niwgc2tiLA0KKwkJCQkgICAg ICAgTUNVX0VYVF9DTURfQlNTX0lORk9fVVBEQVRFLCB0cnVlKTsNCit9DQorDQorLyoqIHN0YXJl YyAmIHd0YmwgKiovDQorc3RhdGljIGludA0KK210NzkxNV9tY3Vfc3RhX2tleV90bHYoc3RydWN0 IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGllZWU4MDIxMV9rZXlfY29uZiAqa2V5LA0KKwkJICAgICAg IGVudW0gc2V0X2tleV9jbWQgY21kKQ0KK3sNCisJc3RydWN0IHN0YV9yZWNfc2VjICpzZWM7DQor CXN0cnVjdCB0bHYgKnRsdjsNCisJdTMyIGxlbiA9IHNpemVvZigqc2VjKTsNCisNCisJdGx2ID0g bXQ3OTE1X21jdV9hZGRfdGx2KHNrYiwgU1RBX1JFQ19LRVlfVjIsIHNpemVvZigqc2VjKSk7DQor DQorCXNlYyA9IChzdHJ1Y3Qgc3RhX3JlY19zZWMgKil0bHY7DQorCXNlYy0+YWRkID0gY21kOw0K Kw0KKwlpZiAoY21kID09IFNFVF9LRVkpIHsNCisJCXN0cnVjdCBzZWNfa2V5ICpzZWNfa2V5Ow0K KwkJdTggY2lwaGVyOw0KKw0KKwkJY2lwaGVyID0gbXQ3OTE1X21jdV9nZXRfY2lwaGVyKGtleS0+ Y2lwaGVyKTsNCisJCWlmIChjaXBoZXIgPT0gTVRfQ0lQSEVSX05PTkUpDQorCQkJcmV0dXJuIC1F T1BOT1RTVVBQOw0KKw0KKwkJc2VjX2tleSA9ICZzZWMtPmtleVswXTsNCisJCXNlY19rZXktPmNp cGhlcl9sZW4gPSBzaXplb2YoKnNlY19rZXkpOw0KKwkJc2VjX2tleS0+a2V5X2lkID0ga2V5LT5r ZXlpZHg7DQorDQorCQlpZiAoY2lwaGVyID09IE1UX0NJUEhFUl9CSVBfQ01BQ18xMjgpIHsNCisJ CQlzZWNfa2V5LT5jaXBoZXJfaWQgPSBNVF9DSVBIRVJfQUVTX0NDTVA7DQorCQkJc2VjX2tleS0+ a2V5X2xlbiA9IDE2Ow0KKwkJCW1lbWNweShzZWNfa2V5LT5rZXksIGtleS0+a2V5LCAxNik7DQor DQorCQkJc2VjX2tleSA9ICZzZWMtPmtleVsxXTsNCisJCQlzZWNfa2V5LT5jaXBoZXJfaWQgPSBN VF9DSVBIRVJfQklQX0NNQUNfMTI4Ow0KKwkJCXNlY19rZXktPmNpcGhlcl9sZW4gPSBzaXplb2Yo KnNlY19rZXkpOw0KKwkJCXNlY19rZXktPmtleV9sZW4gPSAxNjsNCisJCQltZW1jcHkoc2VjX2tl eS0+a2V5LCBrZXktPmtleSArIDE2LCAxNik7DQorDQorCQkJc2VjLT5uX2NpcGhlciA9IDI7DQor CQl9IGVsc2Ugew0KKwkJCXNlY19rZXktPmNpcGhlcl9pZCA9IGNpcGhlcjsNCisJCQlzZWNfa2V5 LT5rZXlfbGVuID0ga2V5LT5rZXlsZW47DQorCQkJbWVtY3B5KHNlY19rZXktPmtleSwga2V5LT5r ZXksIGtleS0+a2V5bGVuKTsNCisNCisJCQlpZiAoY2lwaGVyID09IE1UX0NJUEhFUl9US0lQKSB7 DQorCQkJCS8qIFJ4L1R4IE1JQyBrZXlzIGFyZSBzd2FwcGVkICovDQorCQkJCW1lbWNweShzZWNf a2V5LT5rZXkgKyAxNiwga2V5LT5rZXkgKyAyNCwgOCk7DQorCQkJCW1lbWNweShzZWNfa2V5LT5r ZXkgKyAyNCwga2V5LT5rZXkgKyAxNiwgOCk7DQorCQkJfQ0KKw0KKwkJCWxlbiAtPSBzaXplb2Yo KnNlY19rZXkpOw0KKwkJCXNlYy0+bl9jaXBoZXIgPSAxOw0KKwkJfQ0KKwl9IGVsc2Ugew0KKwkJ bGVuIC09IHNpemVvZihzZWMtPmtleSk7DQorCQlzZWMtPm5fY2lwaGVyID0gMDsNCisJfQ0KKwlz ZWMtPmxlbiA9IGNwdV90b19sZTE2KGxlbik7DQorDQorCXJldHVybiAwOw0KK30NCisNCitpbnQg bXQ3OTE1X21jdV9hZGRfa2V5KHN0cnVjdCBtdDc5MTVfZGV2ICpkZXYsIHN0cnVjdCBpZWVlODAy MTFfdmlmICp2aWYsDQorCQkgICAgICAgc3RydWN0IG10NzkxNV9zdGEgKm1zdGEsIHN0cnVjdCBp ZWVlODAyMTFfa2V5X2NvbmYgKmtleSwNCisJCSAgICAgICBlbnVtIHNldF9rZXlfY21kIGNtZCkN Cit7DQorCXN0cnVjdCBtdDc5MTVfdmlmICptdmlmID0gKHN0cnVjdCBtdDc5MTVfdmlmICopdmlm LT5kcnZfcHJpdjsNCisJc3RydWN0IHNrX2J1ZmYgKnNrYjsNCisJaW50IHJldDsNCisNCisJc2ti ID0gbXQ3OTE1X21jdV9hbGxvY19zdGFfcmVxKGRldiwgbXZpZiwgbXN0YSwNCisJCQkJICAgICAg IE1UNzkxNV9TVEFfVVBEQVRFX01BWF9TSVpFKTsNCisJaWYgKElTX0VSUihza2IpKQ0KKwkJcmV0 dXJuIFBUUl9FUlIoc2tiKTsNCisNCisJcmV0ID0gbXQ3OTE1X21jdV9zdGFfa2V5X3Rsdihza2Is IGtleSwgY21kKTsNCisJaWYgKHJldCkNCisJCXJldHVybiByZXQ7DQorDQorCXJldHVybiBfX210 NzZfbWN1X3NrYl9zZW5kX21zZygmZGV2LT5tdDc2LCBza2IsDQorCQkJCSAgICAgICBNQ1VfRVhU X0NNRF9TVEFfUkVDX1VQREFURSwgdHJ1ZSk7DQorfQ0KKw0KK3N0YXRpYyB2b2lkDQorbXQ3OTE1 X21jdV9zdGFfYmFfdGx2KHN0cnVjdCBza19idWZmICpza2IsDQorCQkgICAgICBzdHJ1Y3QgaWVl ZTgwMjExX2FtcGR1X3BhcmFtcyAqcGFyYW1zLA0KKwkJICAgICAgYm9vbCBlbmFibGUsIGJvb2wg dHgpDQorew0KKwlzdHJ1Y3Qgc3RhX3JlY19iYSAqYmE7DQorCXN0cnVjdCB0bHYgKnRsdjsNCisN CisJdGx2ID0gbXQ3OTE1X21jdV9hZGRfdGx2KHNrYiwgU1RBX1JFQ19CQSwgc2l6ZW9mKCpiYSkp Ow0KKw0KKwliYSA9IChzdHJ1Y3Qgc3RhX3JlY19iYSAqKXRsdjsNCisJYmEtPmJhX3R5cGUgPSB0 eCA/IE1UX0JBX1RZUEVfT1JJR0lOQVRPUiA6IE1UX0JBX1RZUEVfUkVDSVBJRU5ULA0KKwliYS0+ d2luc2l6ZSA9IGNwdV90b19sZTE2KHBhcmFtcy0+YnVmX3NpemUpOw0KKwliYS0+c3NuID0gY3B1 X3RvX2xlMTYocGFyYW1zLT5zc24pOw0KKwliYS0+YmFfZW4gPSBlbmFibGUgPDwgcGFyYW1zLT50 aWQ7DQorCWJhLT5hbXNkdSA9IHBhcmFtcy0+YW1zZHU7DQorCWJhLT50aWQgPSBwYXJhbXMtPnRp ZDsNCit9DQorDQorc3RhdGljIHZvaWQNCittdDc5MTVfbWN1X3d0YmxfYmFfdGx2KHN0cnVjdCBz a19idWZmICpza2IsDQorCQkgICAgICAgc3RydWN0IGllZWU4MDIxMV9hbXBkdV9wYXJhbXMgKnBh cmFtcywNCisJCSAgICAgICBib29sIGVuYWJsZSwgYm9vbCB0eCwgdm9pZCAqc3RhX3d0YmwsDQor CQkgICAgICAgdm9pZCAqd3RibF90bHYpDQorew0KKwlzdHJ1Y3Qgd3RibF9iYSAqYmE7DQorCXN0 cnVjdCB0bHYgKnRsdjsNCisNCisJdGx2ID0gbXQ3OTE1X21jdV9hZGRfbmVzdGVkX3Rsdihza2Is IFdUQkxfQkEsIHNpemVvZigqYmEpLA0KKwkJCQkJd3RibF90bHYsIHN0YV93dGJsKTsNCisNCisJ YmEgPSAoc3RydWN0IHd0YmxfYmEgKil0bHY7DQorCWJhLT50aWQgPSBwYXJhbXMtPnRpZDsNCisN CisJaWYgKHR4KSB7DQorCQliYS0+YmFfdHlwZSA9IE1UX0JBX1RZUEVfT1JJR0lOQVRPUjsNCisJ CWJhLT5zbiA9IGVuYWJsZSA/IGNwdV90b19sZTE2KHBhcmFtcy0+c3NuKSA6IDA7DQorCQliYS0+ YmFfZW4gPSBlbmFibGU7DQorCX0gZWxzZSB7DQorCQltZW1jcHkoYmEtPnBlZXJfYWRkciwgcGFy YW1zLT5zdGEtPmFkZHIsIEVUSF9BTEVOKTsNCisJCWJhLT5iYV90eXBlID0gTVRfQkFfVFlQRV9S RUNJUElFTlQ7DQorCQliYS0+cnN0X2JhX3RpZCA9IHBhcmFtcy0+dGlkOw0KKwkJYmEtPnJzdF9i YV9zZWwgPSBSU1RfQkFfTUFDX1RJRF9NQVRDSDsNCisJCWJhLT5yc3RfYmFfc2IgPSAxOw0KKwl9 DQorDQorCWlmIChlbmFibGUgJiYgdHgpDQorCQliYS0+YmFfd2luc2l6ZSA9IGNwdV90b19sZTE2 KHBhcmFtcy0+YnVmX3NpemUpOw0KK30NCisNCitzdGF0aWMgaW50DQorbXQ3OTE1X21jdV9zdGFf YmEoc3RydWN0IG10NzkxNV9kZXYgKmRldiwNCisJCSAgc3RydWN0IGllZWU4MDIxMV9hbXBkdV9w YXJhbXMgKnBhcmFtcywNCisJCSAgYm9vbCBlbmFibGUsIGJvb2wgdHgpDQorew0KKwlzdHJ1Y3Qg bXQ3OTE1X3N0YSAqbXN0YSA9IChzdHJ1Y3QgbXQ3OTE1X3N0YSAqKXBhcmFtcy0+c3RhLT5kcnZf cHJpdjsNCisJc3RydWN0IG10NzkxNV92aWYgKm12aWYgPSBtc3RhLT52aWY7DQorCXN0cnVjdCB3 dGJsX3JlcV9oZHIgKnd0YmxfaGRyOw0KKwlzdHJ1Y3QgdGx2ICpzdGFfd3RibDsNCisJc3RydWN0 IHNrX2J1ZmYgKnNrYjsNCisNCisJc2tiID0gbXQ3OTE1X21jdV9hbGxvY19zdGFfcmVxKGRldiwg bXZpZiwgbXN0YSwNCisJCQkJICAgICAgIE1UNzkxNV9TVEFfVVBEQVRFX01BWF9TSVpFKTsNCisJ aWYgKElTX0VSUihza2IpKQ0KKwkJcmV0dXJuIFBUUl9FUlIoc2tiKTsNCisNCisJbXQ3OTE1X21j dV9zdGFfYmFfdGx2KHNrYiwgcGFyYW1zLCBlbmFibGUsIHR4KTsNCisJc3RhX3d0YmwgPSBtdDc5 MTVfbWN1X2FkZF90bHYoc2tiLCBTVEFfUkVDX1dUQkwsIHNpemVvZihzdHJ1Y3QgdGx2KSk7DQor DQorCXd0YmxfaGRyID0gbXQ3OTE1X21jdV9hbGxvY193dGJsX3JlcShkZXYsIG1zdGEsIFdUQkxf U0VULCBzdGFfd3RibCwNCisJCQkJCSAgICAgJnNrYik7DQorCW10NzkxNV9tY3Vfd3RibF9iYV90 bHYoc2tiLCBwYXJhbXMsIGVuYWJsZSwgdHgsIHN0YV93dGJsLCB3dGJsX2hkcik7DQorDQorCXJl dHVybiBfX210NzZfbWN1X3NrYl9zZW5kX21zZygmZGV2LT5tdDc2LCBza2IsDQorCQkJCSAgICAg ICBNQ1VfRVhUX0NNRF9TVEFfUkVDX1VQREFURSwgdHJ1ZSk7DQorfQ0KKw0KK2ludCBtdDc5MTVf bWN1X2FkZF90eF9iYShzdHJ1Y3QgbXQ3OTE1X2RldiAqZGV2LA0KKwkJCSBzdHJ1Y3QgaWVlZTgw MjExX2FtcGR1X3BhcmFtcyAqcGFyYW1zLA0KKwkJCSBib29sIGVuYWJsZSkNCit7DQorCXJldHVy biBtdDc5MTVfbWN1X3N0YV9iYShkZXYsIHBhcmFtcywgZW5hYmxlLCB0cnVlKTsNCit9DQorDQor aW50IG10NzkxNV9tY3VfYWRkX3J4X2JhKHN0cnVjdCBtdDc5MTVfZGV2ICpkZXYsDQorCQkJIHN0 cnVjdCBpZWVlODAyMTFfYW1wZHVfcGFyYW1zICpwYXJhbXMsDQorCQkJIGJvb2wgZW5hYmxlKQ0K K3sNCisJcmV0dXJuIG10NzkxNV9tY3Vfc3RhX2JhKGRldiwgcGFyYW1zLCBlbmFibGUsIGZhbHNl KTsNCit9DQorDQorc3RhdGljIHZvaWQNCittdDc5MTVfbWN1X3d0YmxfZ2VuZXJpY190bHYoc3Ry dWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZiwNCisJCQkgICAgc3Ry dWN0IGllZWU4MDIxMV9zdGEgKnN0YSwgdm9pZCAqc3RhX3d0YmwsDQorCQkJICAgIHZvaWQgKnd0 YmxfdGx2KQ0KK3sNCisJc3RydWN0IG10NzkxNV92aWYgKm12aWYgPSAoc3RydWN0IG10NzkxNV92 aWYgKil2aWYtPmRydl9wcml2Ow0KKwlzdHJ1Y3Qgd3RibF9nZW5lcmljICpnZW5lcmljOw0KKwlz dHJ1Y3Qgd3RibF9yeCAqcng7DQorCXN0cnVjdCB0bHYgKnRsdjsNCisNCisJdGx2ID0gbXQ3OTE1 X21jdV9hZGRfbmVzdGVkX3Rsdihza2IsIFdUQkxfR0VORVJJQywgc2l6ZW9mKCpnZW5lcmljKSwN CisJCQkJCXd0YmxfdGx2LCBzdGFfd3RibCk7DQorDQorCWdlbmVyaWMgPSAoc3RydWN0IHd0Ymxf Z2VuZXJpYyAqKXRsdjsNCisNCisJaWYgKHN0YSkgew0KKwkJbWVtY3B5KGdlbmVyaWMtPnBlZXJf YWRkciwgc3RhLT5hZGRyLCBFVEhfQUxFTik7DQorCQlnZW5lcmljLT5wYXJ0aWFsX2FpZCA9IGNw dV90b19sZTE2KHN0YS0+YWlkKTsNCisJCWdlbmVyaWMtPm11YXJfaWR4ID0gbXZpZi0+b21hY19p ZHg7DQorCQlnZW5lcmljLT5xb3MgPSBzdGEtPndtZTsNCisJfSBlbHNlIHsNCisJCS8qIHVzZSBC U1NJRCBpbiBzdGF0aW9uIG1vZGUgKi8NCisJCWlmICh2aWYtPnR5cGUgPT0gTkw4MDIxMV9JRlRZ UEVfU1RBVElPTikNCisJCQltZW1jcHkoZ2VuZXJpYy0+cGVlcl9hZGRyLCB2aWYtPmJzc19jb25m LmJzc2lkLA0KKwkJCSAgICAgICBFVEhfQUxFTik7DQorCQllbHNlDQorCQkJZXRoX2Jyb2FkY2Fz dF9hZGRyKGdlbmVyaWMtPnBlZXJfYWRkcik7DQorDQorCQlnZW5lcmljLT5tdWFyX2lkeCA9IDB4 ZTsNCisJfQ0KKw0KKwl0bHYgPSBtdDc5MTVfbWN1X2FkZF9uZXN0ZWRfdGx2KHNrYiwgV1RCTF9S WCwgc2l6ZW9mKCpyeCksDQorCQkJCQl3dGJsX3Rsdiwgc3RhX3d0YmwpOw0KKw0KKwlyeCA9IChz dHJ1Y3Qgd3RibF9yeCAqKXRsdjsNCisJcngtPnJjYTEgPSBzdGEgPyB2aWYtPnR5cGUgIT0gTkw4 MDIxMV9JRlRZUEVfQVAgOiAxOw0KKwlyeC0+cmNhMiA9IDE7DQorCXJ4LT5ydiA9IDE7DQorfQ0K Kw0KK3N0YXRpYyB2b2lkDQorbXQ3OTE1X21jdV9zdGFfYmFzaWNfdGx2KHN0cnVjdCBza19idWZm ICpza2IsIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsDQorCQkJIHN0cnVjdCBpZWVlODAyMTFf c3RhICpzdGEsIGJvb2wgZW5hYmxlKQ0KK3sNCisjZGVmaW5lIEVYVFJBX0lORk9fVkVSICAgICAg ICAgIEJJVCgwKQ0KKyNkZWZpbmUgRVhUUkFfSU5GT19ORVcgICAgICAgICAgQklUKDEpDQorCXN0 cnVjdCBzdGFfcmVjX2Jhc2ljICpiYXNpYzsNCisJc3RydWN0IHRsdiAqdGx2Ow0KKw0KKwl0bHYg PSBtdDc5MTVfbWN1X2FkZF90bHYoc2tiLCBTVEFfUkVDX0JBU0lDLCBzaXplb2YoKmJhc2ljKSk7 DQorDQorCWJhc2ljID0gKHN0cnVjdCBzdGFfcmVjX2Jhc2ljICopdGx2Ow0KKwliYXNpYy0+ZXh0 cmFfaW5mbyA9IGNwdV90b19sZTE2KEVYVFJBX0lORk9fVkVSKTsNCisNCisJaWYgKGVuYWJsZSkg ew0KKwkJYmFzaWMtPmV4dHJhX2luZm8gfD0gY3B1X3RvX2xlMTYoRVhUUkFfSU5GT19ORVcpOw0K KwkJYmFzaWMtPmNvbm5fc3RhdGUgPSBDT05OX1NUQVRFX1BPUlRfU0VDVVJFOw0KKwl9IGVsc2Ug ew0KKwkJYmFzaWMtPmNvbm5fc3RhdGUgPSBDT05OX1NUQVRFX0RJU0NPTk5FQ1Q7DQorCX0NCisN CisJaWYgKCFzdGEpIHsNCisJCWJhc2ljLT5jb25uX3R5cGUgPSBjcHVfdG9fbGUzMihDT05ORUNU SU9OX0lORlJBX0JDKTsNCisJCWV0aF9icm9hZGNhc3RfYWRkcihiYXNpYy0+cGVlcl9hZGRyKTsN CisJCXJldHVybjsNCisJfQ0KKw0KKwlzd2l0Y2ggKHZpZi0+dHlwZSkgew0KKwljYXNlIE5MODAy MTFfSUZUWVBFX01FU0hfUE9JTlQ6DQorCWNhc2UgTkw4MDIxMV9JRlRZUEVfQVA6DQorCQliYXNp Yy0+Y29ubl90eXBlID0gY3B1X3RvX2xlMzIoQ09OTkVDVElPTl9JTkZSQV9TVEEpOw0KKwkJYnJl YWs7DQorCWNhc2UgTkw4MDIxMV9JRlRZUEVfU1RBVElPTjoNCisJCWJhc2ljLT5jb25uX3R5cGUg PSBjcHVfdG9fbGUzMihDT05ORUNUSU9OX0lORlJBX0FQKTsNCisJCWJyZWFrOw0KKwljYXNlIE5M ODAyMTFfSUZUWVBFX0FESE9DOg0KKwkJYmFzaWMtPmNvbm5fdHlwZSA9IGNwdV90b19sZTMyKENP Tk5FQ1RJT05fSUJTU19BREhPQyk7DQorCQlicmVhazsNCisJZGVmYXVsdDoNCisJCVdBUk5fT04o MSk7DQorCQlicmVhazsNCisJfQ0KKw0KKwltZW1jcHkoYmFzaWMtPnBlZXJfYWRkciwgc3RhLT5h ZGRyLCBFVEhfQUxFTik7DQorCWJhc2ljLT5haWQgPSBjcHVfdG9fbGUxNihzdGEtPmFpZCk7DQor CWJhc2ljLT5xb3MgPSBzdGEtPndtZTsNCit9DQorDQorc3RhdGljIHZvaWQNCittdDc5MTVfbWN1 X3N0YV90bHYoc3RydWN0IG10NzkxNV9kZXYgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYiwNCisJ CSAgIHN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEpDQorew0KKwlzdHJ1Y3QgdGx2ICp0bHY7DQor DQorCWlmIChzdGEtPmh0X2NhcC5odF9zdXBwb3J0ZWQpIHsNCisJCXN0cnVjdCBzdGFfcmVjX2h0 ICpodDsNCisNCisJCS8qIHN0YXJlYyBodCAqLw0KKwkJdGx2ID0gbXQ3OTE1X21jdV9hZGRfdGx2 KHNrYiwgU1RBX1JFQ19IVCwgc2l6ZW9mKCpodCkpOw0KKwkJaHQgPSAoc3RydWN0IHN0YV9yZWNf aHQgKil0bHY7DQorCQlodC0+aHRfY2FwID0gY3B1X3RvX2xlMTYoc3RhLT5odF9jYXAuY2FwKTsN CisJfQ0KKw0KKwkvKiBzdGFyZWMgdmh0ICovDQorCWlmIChzdGEtPnZodF9jYXAudmh0X3N1cHBv cnRlZCkgew0KKwkJc3RydWN0IHN0YV9yZWNfdmh0ICp2aHQ7DQorDQorCQl0bHYgPSBtdDc5MTVf bWN1X2FkZF90bHYoc2tiLCBTVEFfUkVDX1ZIVCwgc2l6ZW9mKCp2aHQpKTsNCisJCXZodCA9IChz dHJ1Y3Qgc3RhX3JlY192aHQgKil0bHY7DQorCQl2aHQtPnZodF9jYXAgPSBjcHVfdG9fbGUzMihz dGEtPnZodF9jYXAuY2FwKTsNCisJCXZodC0+dmh0X3J4X21jc19tYXAgPSBzdGEtPnZodF9jYXAu dmh0X21jcy5yeF9tY3NfbWFwOw0KKwkJdmh0LT52aHRfdHhfbWNzX21hcCA9IHN0YS0+dmh0X2Nh cC52aHRfbWNzLnR4X21jc19tYXA7DQorCX0NCit9DQorDQorc3RhdGljIHZvaWQNCittdDc5MTVf bWN1X3d0Ymxfc21wc190bHYoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGllZWU4MDIxMV9z dGEgKnN0YSwNCisJCQkgdm9pZCAqc3RhX3d0YmwsIHZvaWQgKnd0YmxfdGx2KQ0KK3sNCisJc3Ry dWN0IHd0Ymxfc21wcyAqc21wczsNCisJc3RydWN0IHRsdiAqdGx2Ow0KKw0KKwl0bHYgPSBtdDc5 MTVfbWN1X2FkZF9uZXN0ZWRfdGx2KHNrYiwgV1RCTF9TTVBTLCBzaXplb2YoKnNtcHMpLA0KKwkJ CQkJd3RibF90bHYsIHN0YV93dGJsKTsNCisJc21wcyA9IChzdHJ1Y3Qgd3RibF9zbXBzICopdGx2 Ow0KKw0KKwlpZiAoc3RhLT5zbXBzX21vZGUgPT0gSUVFRTgwMjExX1NNUFNfRFlOQU1JQykNCisJ CXNtcHMtPnNtcHMgPSB0cnVlOw0KK30NCisNCitzdGF0aWMgdm9pZA0KK210NzkxNV9tY3Vfd3Ri bF9odF90bHYoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSwN CisJCSAgICAgICB2b2lkICpzdGFfd3RibCwgdm9pZCAqd3RibF90bHYpDQorew0KKwlzdHJ1Y3Qg d3RibF9odCAqaHQgPSBOVUxMOw0KKwlzdHJ1Y3QgdGx2ICp0bHY7DQorDQorCS8qIHd0YmwgaHQg Ki8NCisJaWYgKHN0YS0+aHRfY2FwLmh0X3N1cHBvcnRlZCkgew0KKwkJdGx2ID0gbXQ3OTE1X21j dV9hZGRfbmVzdGVkX3Rsdihza2IsIFdUQkxfSFQsIHNpemVvZigqaHQpLA0KKwkJCQkJCXd0Ymxf dGx2LCBzdGFfd3RibCk7DQorCQlodCA9IChzdHJ1Y3Qgd3RibF9odCAqKXRsdjsNCisJCWh0LT5s ZHBjID0gc3RhLT5odF9jYXAuY2FwICYgSUVFRTgwMjExX0hUX0NBUF9MRFBDX0NPRElORzsNCisJ CWh0LT5hZiA9IHN0YS0+aHRfY2FwLmFtcGR1X2ZhY3RvcjsNCisJCWh0LT5tbSA9IHN0YS0+aHRf Y2FwLmFtcGR1X2RlbnNpdHk7DQorCQlodC0+aHQgPSB0cnVlOw0KKwl9DQorDQorCS8qIHd0Ymwg dmh0ICovDQorCWlmIChzdGEtPnZodF9jYXAudmh0X3N1cHBvcnRlZCkgew0KKwkJc3RydWN0IHd0 Ymxfdmh0ICp2aHQ7DQorCQl1OCBhZjsNCisNCisJCXRsdiA9IG10NzkxNV9tY3VfYWRkX25lc3Rl ZF90bHYoc2tiLCBXVEJMX1ZIVCwgc2l6ZW9mKCp2aHQpLA0KKwkJCQkJCXd0YmxfdGx2LCBzdGFf d3RibCk7DQorCQl2aHQgPSAoc3RydWN0IHd0Ymxfdmh0ICopdGx2Ow0KKwkJdmh0LT5sZHBjID0g c3RhLT52aHRfY2FwLmNhcCAmIElFRUU4MDIxMV9WSFRfQ0FQX1JYTERQQywNCisJCXZodC0+dmh0 ID0gdHJ1ZTsNCisNCisJCWFmID0gRklFTERfR0VUKElFRUU4MDIxMV9WSFRfQ0FQX01BWF9BX01Q RFVfTEVOR1RIX0VYUE9ORU5UX01BU0ssDQorCQkJICAgICAgIHN0YS0+dmh0X2NhcC5jYXApOw0K KwkJaWYgKGh0KQ0KKwkJCWh0LT5hZiA9IG1heF90KHU4LCBodC0+YWYsIGFmKTsNCisJfQ0KKw0K KwltdDc5MTVfbWN1X3d0Ymxfc21wc190bHYoc2tiLCBzdGEsIHN0YV93dGJsLCB3dGJsX3Rsdik7 DQorfQ0KKw0KK2ludCBtdDc5MTVfbWN1X2FkZF9zbXBzKHN0cnVjdCBtdDc5MTVfZGV2ICpkZXYs IHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsDQorCQkJc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0 YSkNCit7DQorCXN0cnVjdCBtdDc5MTVfdmlmICptdmlmID0gKHN0cnVjdCBtdDc5MTVfdmlmICop dmlmLT5kcnZfcHJpdjsNCisJc3RydWN0IG10NzkxNV9zdGEgKm1zdGEgPSAoc3RydWN0IG10Nzkx NV9zdGEgKilzdGEtPmRydl9wcml2Ow0KKwlzdHJ1Y3Qgd3RibF9yZXFfaGRyICp3dGJsX2hkcjsN CisJc3RydWN0IHRsdiAqc3RhX3d0Ymw7DQorCXN0cnVjdCBza19idWZmICpza2I7DQorDQorCXNr YiA9IG10NzkxNV9tY3VfYWxsb2Nfc3RhX3JlcShkZXYsIG12aWYsIG1zdGEsDQorCQkJCSAgICAg ICBNVDc5MTVfU1RBX1VQREFURV9NQVhfU0laRSk7DQorCWlmIChJU19FUlIoc2tiKSkNCisJCXJl dHVybiBQVFJfRVJSKHNrYik7DQorDQorCXN0YV93dGJsID0gbXQ3OTE1X21jdV9hZGRfdGx2KHNr YiwgU1RBX1JFQ19XVEJMLCBzaXplb2Yoc3RydWN0IHRsdikpOw0KKw0KKwl3dGJsX2hkciA9IG10 NzkxNV9tY3VfYWxsb2Nfd3RibF9yZXEoZGV2LCBtc3RhLCBXVEJMX1NFVCwgc3RhX3d0YmwsDQor CQkJCQkgICAgICZza2IpOw0KKwltdDc5MTVfbWN1X3d0Ymxfc21wc190bHYoc2tiLCBzdGEsIHN0 YV93dGJsLCB3dGJsX2hkcik7DQorDQorCXJldHVybiBfX210NzZfbWN1X3NrYl9zZW5kX21zZygm ZGV2LT5tdDc2LCBza2IsDQorCQkJCSAgICAgICBNQ1VfRVhUX0NNRF9TVEFfUkVDX1VQREFURSwg dHJ1ZSk7DQorfQ0KKw0KK3N0YXRpYyB2b2lkDQorbXQ3OTE1X21jdV9zdGFfcmF0ZV9jdHJsX3Rs dihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbXQ3OTE1X2RldiAqZGV2LA0KKwkJCSAgICAg c3RydWN0IGllZWU4MDIxMV92aWYgKnZpZiwNCisJCQkgICAgIHN0cnVjdCBpZWVlODAyMTFfc3Rh ICpzdGEpDQorew0KKwlzdHJ1Y3QgY2ZnODAyMTFfY2hhbl9kZWYgKmNoYW5kZWYgPSAmZGV2LT5t cGh5LmNoYW5kZWY7DQorCXN0cnVjdCBzdGFfcmVjX3JhICpyYTsNCisJc3RydWN0IHRsdiAqdGx2 Ow0KKwllbnVtIG5sODAyMTFfYmFuZCBiYW5kID0gY2hhbmRlZi0+Y2hhbi0+YmFuZDsNCisJdTMy IHN1cHBfcmF0ZSA9IHN0YS0+c3VwcF9yYXRlc1tiYW5kXTsNCisJaW50IG5fcmF0ZXMgPSBod2Vp Z2h0MzIoc3VwcF9yYXRlKTsNCisJdTMyIGNhcCA9IHN0YS0+d21lID8gU1RBX0NBUF9XTU0gOiAw Ow0KKwl1OCBpLCBuc3MgPSBzdGEtPnJ4X25zcywgbWNzID0gMDsNCisNCisJdGx2ID0gbXQ3OTE1 X21jdV9hZGRfdGx2KHNrYiwgU1RBX1JFQ19SQSwgc2l6ZW9mKCpyYSkpOw0KKw0KKwlyYSA9IChz dHJ1Y3Qgc3RhX3JlY19yYSAqKXRsdjsNCisJcmEtPnZhbGlkID0gdHJ1ZTsNCisJcmEtPmF1dG9f cmF0ZSA9IHRydWU7DQorCXJhLT5waHlfbW9kZSA9IG10NzkxNV9nZXRfcGh5X21vZGUoZGV2LCB2 aWYsIGJhbmQsIHN0YSk7DQorCXJhLT5jaGFubmVsID0gY2hhbmRlZi0+Y2hhbi0+aHdfdmFsdWU7 DQorCXJhLT5idyA9IHN0YS0+YmFuZHdpZHRoOw0KKwlyYS0+cmF0ZV9sZW4gPSBuX3JhdGVzOw0K KwlyYS0+cGh5LmJ3ID0gc3RhLT5iYW5kd2lkdGg7DQorDQorCWlmIChuX3JhdGVzKSB7DQorCQlp ZiAoYmFuZCA9PSBOTDgwMjExX0JBTkRfMkdIWikgew0KKwkJCXJhLT5zdXBwX21vZGUgPSBNT0RF X0NDSzsNCisJCQlyYS0+c3VwcF9jY2tfcmF0ZSA9IHN1cHBfcmF0ZSAmIEdFTk1BU0soMywgMCk7 DQorCQkJcmEtPnBoeS50eXBlID0gTVRfUEhZX1RZUEVfQ0NLOw0KKw0KKwkJCWlmIChuX3JhdGVz ID4gNCkgew0KKwkJCQlyYS0+c3VwcF9tb2RlIHw9IE1PREVfT0ZETTsNCisJCQkJcmEtPnN1cHBf b2ZkbV9yYXRlID0gc3VwcF9yYXRlID4+IDQ7DQorCQkJCXJhLT5waHkudHlwZSA9IE1UX1BIWV9U WVBFX09GRE07DQorCQkJfQ0KKwkJfSBlbHNlIHsNCisJCQlyYS0+c3VwcF9tb2RlID0gTU9ERV9P RkRNOw0KKwkJCXJhLT5zdXBwX29mZG1fcmF0ZSA9IHN1cHBfcmF0ZTsNCisJCQlyYS0+cGh5LnR5 cGUgPSBNVF9QSFlfVFlQRV9PRkRNOw0KKwkJfQ0KKwl9DQorDQorCWlmIChzdGEtPmh0X2NhcC5o dF9zdXBwb3J0ZWQpIHsNCisJCWZvciAoaSA9IDA7IGkgPCBuc3M7IGkrKykNCisJCQlyYS0+aHRf bWNzW2ldID0gc3RhLT5odF9jYXAubWNzLnJ4X21hc2tbaV07DQorDQorCQlyYS0+c3VwcF9odF9t Y3MgPSAqKF9fbGUzMiAqKXJhLT5odF9tY3M7DQorCQlyYS0+c3VwcF9tb2RlIHw9IE1PREVfSFQ7 DQorCQltY3MgPSBod2VpZ2h0MzIocmEtPnN1cHBfaHRfbWNzKSAtIDE7DQorCQlyYS0+YWYgPSBz dGEtPmh0X2NhcC5hbXBkdV9mYWN0b3I7DQorCQlyYS0+aHRfZ2YgPSAhIShzdGEtPmh0X2NhcC5j YXAgJiBJRUVFODAyMTFfSFRfQ0FQX0dSTl9GTEQpOw0KKw0KKwkJY2FwIHw9IFNUQV9DQVBfSFQ7 DQorCQlpZiAoc3RhLT5odF9jYXAuY2FwICYgSUVFRTgwMjExX0hUX0NBUF9TR0lfMjApDQorCQkJ Y2FwIHw9IFNUQV9DQVBfU0dJXzIwOw0KKwkJaWYgKHN0YS0+aHRfY2FwLmNhcCAmIElFRUU4MDIx MV9IVF9DQVBfU0dJXzQwKQ0KKwkJCWNhcCB8PSBTVEFfQ0FQX1NHSV80MDsNCisJCWlmIChzdGEt Pmh0X2NhcC5jYXAgJiBJRUVFODAyMTFfSFRfQ0FQX1RYX1NUQkMpDQorCQkJY2FwIHw9IFNUQV9D QVBfVFhfU1RCQzsNCisJCWlmIChzdGEtPmh0X2NhcC5jYXAgJiBJRUVFODAyMTFfSFRfQ0FQX1JY X1NUQkMpDQorCQkJY2FwIHw9IFNUQV9DQVBfUlhfU1RCQzsNCisJCWlmIChzdGEtPmh0X2NhcC5j YXAgJiBJRUVFODAyMTFfSFRfQ0FQX0xEUENfQ09ESU5HKQ0KKwkJCWNhcCB8PSBTVEFfQ0FQX0xE UEM7DQorCX0NCisNCisJaWYgKHN0YS0+dmh0X2NhcC52aHRfc3VwcG9ydGVkKSB7DQorCQlfX2xl MTYgbWNzX21hcCA9IHN0YS0+dmh0X2NhcC52aHRfbWNzLnJ4X21jc19tYXA7DQorCQl1MTYgdmh0 X21jczsNCisJCXU4IGFmLCBtY3NfcHJldjsNCisNCisJCWFmID0gRklFTERfR0VUKElFRUU4MDIx MV9WSFRfQ0FQX01BWF9BX01QRFVfTEVOR1RIX0VYUE9ORU5UX01BU0ssDQorCQkJICAgICAgIHN0 YS0+dmh0X2NhcC5jYXApOw0KKwkJcmEtPmFmID0gbWF4X3QodTgsIHJhLT5hZiwgYWYpOw0KKw0K KwkJY2FwIHw9IFNUQV9DQVBfVkhUOw0KKwkJaWYgKHN0YS0+dmh0X2NhcC5jYXAgJiBJRUVFODAy MTFfVkhUX0NBUF9TSE9SVF9HSV84MCkNCisJCQljYXAgfD0gU1RBX0NBUF9WSFRfU0dJXzgwOw0K KwkJaWYgKHN0YS0+dmh0X2NhcC5jYXAgJiBJRUVFODAyMTFfVkhUX0NBUF9TSE9SVF9HSV8xNjAp DQorCQkJY2FwIHw9IFNUQV9DQVBfVkhUX1NHSV8xNjA7DQorCQlpZiAoc3RhLT52aHRfY2FwLmNh cCAmIElFRUU4MDIxMV9WSFRfQ0FQX1RYU1RCQykNCisJCQljYXAgfD0gU1RBX0NBUF9WSFRfVFhf U1RCQzsNCisJCWlmIChzdGEtPnZodF9jYXAuY2FwICYgSUVFRTgwMjExX1ZIVF9DQVBfUlhTVEJD XzEpDQorCQkJY2FwIHw9IFNUQV9DQVBfVkhUX1JYX1NUQkM7DQorCQlpZiAoc3RhLT52aHRfY2Fw LmNhcCAmIElFRUU4MDIxMV9WSFRfQ0FQX1JYTERQQykNCisJCQljYXAgfD0gU1RBX0NBUF9WSFRf TERQQzsNCisNCisJCXJhLT5zdXBwX21vZGUgfD0gTU9ERV9WSFQ7DQorCQlmb3IgKG1jcyA9IDAs IGkgPSAwOyBpIDwgbnNzOyBpKyssIG1jc19tYXAgPj49IDIpIHsNCisJCQlzd2l0Y2ggKG1jc19t YXAgJiAweDMpIHsNCisJCQljYXNlIElFRUU4MDIxMV9WSFRfTUNTX1NVUFBPUlRfMF85Og0KKwkJ CQl2aHRfbWNzID0gR0VOTUFTSyg5LCAwKTsNCisJCQkJYnJlYWs7DQorCQkJY2FzZSBJRUVFODAy MTFfVkhUX01DU19TVVBQT1JUXzBfODoNCisJCQkJdmh0X21jcyA9IEdFTk1BU0soOCwgMCk7DQor CQkJCWJyZWFrOw0KKwkJCWNhc2UgSUVFRTgwMjExX1ZIVF9NQ1NfU1VQUE9SVF8wXzc6DQorCQkJ CXZodF9tY3MgPSBHRU5NQVNLKDcsIDApOw0KKwkJCQlicmVhazsNCisJCQlkZWZhdWx0Og0KKwkJ CQl2aHRfbWNzID0gMDsNCisJCQl9DQorDQorCQkJcmEtPnN1cHBfdmh0X21jc1tpXSA9IGNwdV90 b19sZTE2KHZodF9tY3MpOw0KKw0KKwkJCW1jc19wcmV2ID0gaHdlaWdodDE2KHZodF9tY3MpIC0g MTsNCisJCQlpZiAobWNzX3ByZXYgPiBtY3MpDQorCQkJCW1jcyA9IG1jc19wcmV2Ow0KKw0KKwkJ CS8qIG9ubHkgc3VwcG9ydCAyc3Mgb24gMTYwTUh6ICovDQorCQkJaWYgKGkgPiAxICYmIChyYS0+ YncgPT0gQ01EX0NCV18xNjBNSFogfHwNCisJCQkJICAgICAgcmEtPmJ3ID09IENNRF9DQldfODA4 ME1IWikpDQorCQkJCWJyZWFrOw0KKwkJfQ0KKwl9DQorDQorCXJhLT5zdGFfc3RhdHVzID0gY3B1 X3RvX2xlMzIoY2FwKTsNCisNCisJc3dpdGNoIChCSVQoZmxzKHJhLT5zdXBwX21vZGUpIC0gMSkp IHsNCisJY2FzZSBNT0RFX1ZIVDoNCisJCXJhLT5waHkudHlwZSA9IE1UX1BIWV9UWVBFX1ZIVDsN CisJCXJhLT5waHkubWNzID0gbWNzOw0KKwkJcmEtPnBoeS5uc3MgPSBuc3M7DQorCQlyYS0+cGh5 LnN0YmMgPSAhIShzdGEtPnZodF9jYXAuY2FwICYgSUVFRTgwMjExX1ZIVF9DQVBfVFhTVEJDKTsN CisJCXJhLT5waHkubGRwYyA9ICEhKHN0YS0+dmh0X2NhcC5jYXAgJiBJRUVFODAyMTFfVkhUX0NB UF9SWExEUEMpOw0KKwkJcmEtPnBoeS5zZ2kgPQ0KKwkJCSEhKHN0YS0+dmh0X2NhcC5jYXAgJiBJ RUVFODAyMTFfVkhUX0NBUF9TSE9SVF9HSV84MCk7DQorCQlicmVhazsNCisJY2FzZSBNT0RFX0hU Og0KKwkJcmEtPnBoeS50eXBlID0gTVRfUEhZX1RZUEVfSFQ7DQorCQlyYS0+cGh5Lm1jcyA9IG1j czsNCisJCXJhLT5waHkubGRwYyA9IHN0YS0+aHRfY2FwLmNhcCAmIElFRUU4MDIxMV9IVF9DQVBf TERQQ19DT0RJTkc7DQorCQlyYS0+cGh5LnN0YmMgPSAhIShzdGEtPmh0X2NhcC5jYXAgJiBJRUVF ODAyMTFfSFRfQ0FQX1RYX1NUQkMpOw0KKwkJcmEtPnBoeS5zZ2kgPSAhIShzdGEtPmh0X2NhcC5j YXAgJiBJRUVFODAyMTFfSFRfQ0FQX1NHSV8yMCk7DQorCQlicmVhazsNCisJZGVmYXVsdDoNCisJ CWJyZWFrOw0KKwl9DQorfQ0KKw0KK2ludCBtdDc5MTVfbWN1X2FkZF9yYXRlX2N0cmwoc3RydWN0 IG10NzkxNV9kZXYgKmRldiwgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZiwNCisJCQkgICAgIHN0 cnVjdCBpZWVlODAyMTFfc3RhICpzdGEpDQorew0KKwlzdHJ1Y3QgbXQ3OTE1X3ZpZiAqbXZpZiA9 IChzdHJ1Y3QgbXQ3OTE1X3ZpZiAqKXZpZi0+ZHJ2X3ByaXY7DQorCXN0cnVjdCBtdDc5MTVfc3Rh ICptc3RhID0gKHN0cnVjdCBtdDc5MTVfc3RhICopc3RhLT5kcnZfcHJpdjsNCisJc3RydWN0IHNr X2J1ZmYgKnNrYjsNCisNCisJc2tiID0gbXQ3OTE1X21jdV9hbGxvY19zdGFfcmVxKGRldiwgbXZp ZiwgbXN0YSwNCisJCQkJICAgICAgIE1UNzkxNV9TVEFfVVBEQVRFX01BWF9TSVpFKTsNCisJaWYg KElTX0VSUihza2IpKQ0KKwkJcmV0dXJuIFBUUl9FUlIoc2tiKTsNCisNCisJbXQ3OTE1X21jdV9z dGFfcmF0ZV9jdHJsX3Rsdihza2IsIGRldiwgdmlmLCBzdGEpOw0KKw0KKwlyZXR1cm4gX19tdDc2 X21jdV9za2Jfc2VuZF9tc2coJmRldi0+bXQ3Niwgc2tiLA0KKwkJCQkgICAgICAgTUNVX0VYVF9D TURfU1RBX1JFQ19VUERBVEUsIHRydWUpOw0KK30NCisNCitpbnQgbXQ3OTE1X21jdV9hZGRfc3Rh KHN0cnVjdCBtdDc5MTVfZGV2ICpkZXYsIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsDQorCQkg ICAgICAgc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSwgYm9vbCBlbmFibGUpDQorew0KKwlzdHJ1 Y3QgbXQ3OTE1X3ZpZiAqbXZpZiA9IChzdHJ1Y3QgbXQ3OTE1X3ZpZiAqKXZpZi0+ZHJ2X3ByaXY7 DQorCXN0cnVjdCB3dGJsX3JlcV9oZHIgKnd0YmxfaGRyOw0KKwlzdHJ1Y3QgbXQ3OTE1X3N0YSAq bXN0YTsNCisJc3RydWN0IHRsdiAqc3RhX3d0Ymw7DQorCXN0cnVjdCBza19idWZmICpza2I7DQor CWludCByZXQ7DQorDQorCW1zdGEgPSBzdGEgPyAoc3RydWN0IG10NzkxNV9zdGEgKilzdGEtPmRy dl9wcml2IDogJm12aWYtPnN0YTsNCisNCisJc2tiID0gbXQ3OTE1X21jdV9hbGxvY19zdGFfcmVx KGRldiwgbXZpZiwgbXN0YSwNCisJCQkJICAgICAgIE1UNzkxNV9TVEFfVVBEQVRFX01BWF9TSVpF KTsNCisJaWYgKElTX0VSUihza2IpKQ0KKwkJcmV0dXJuIFBUUl9FUlIoc2tiKTsNCisNCisJbXQ3 OTE1X21jdV9zdGFfYmFzaWNfdGx2KHNrYiwgdmlmLCBzdGEsIGVuYWJsZSk7DQorCWlmIChlbmFi bGUgJiYgc3RhKQ0KKwkJbXQ3OTE1X21jdV9zdGFfdGx2KGRldiwgc2tiLCBzdGEpOw0KKw0KKwlz dGFfd3RibCA9IG10NzkxNV9tY3VfYWRkX3Rsdihza2IsIFNUQV9SRUNfV1RCTCwgc2l6ZW9mKHN0 cnVjdCB0bHYpKTsNCisNCisJd3RibF9oZHIgPSBtdDc5MTVfbWN1X2FsbG9jX3d0YmxfcmVxKGRl diwgbXN0YSwgV1RCTF9SRVNFVF9BTkRfU0VULA0KKwkJCQkJICAgICBzdGFfd3RibCwgJnNrYik7 DQorCWlmIChlbmFibGUpIHsNCisJCW10NzkxNV9tY3Vfd3RibF9nZW5lcmljX3Rsdihza2IsIHZp Ziwgc3RhLCBzdGFfd3RibCwgd3RibF9oZHIpOw0KKwkJaWYgKHN0YSkNCisJCQltdDc5MTVfbWN1 X3d0YmxfaHRfdGx2KHNrYiwgc3RhLCBzdGFfd3RibCwgd3RibF9oZHIpOw0KKwl9DQorDQorCXJl dCA9IF9fbXQ3Nl9tY3Vfc2tiX3NlbmRfbXNnKCZkZXYtPm10NzYsIHNrYiwNCisJCQkJICAgICAg TUNVX0VYVF9DTURfU1RBX1JFQ19VUERBVEUsIHRydWUpOw0KKwlpZiAocmV0KQ0KKwkJcmV0dXJu IHJldDsNCisNCisJaWYgKGVuYWJsZSAmJiBzdGEpDQorCQlyZXR1cm4gbXQ3OTE1X21jdV9hZGRf cmF0ZV9jdHJsKGRldiwgdmlmLCBzdGEpOw0KKw0KKwlyZXR1cm4gMDsNCit9DQorDQoraW50IG10 NzkxNV9tY3VfYWRkX2Rldl9pbmZvKHN0cnVjdCBtdDc5MTVfZGV2ICpkZXYsDQorCQkJICAgIHN0 cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsIGJvb2wgZW5hYmxlKQ0KK3sNCisJc3RydWN0IG10Nzkx NV92aWYgKm12aWYgPSAoc3RydWN0IG10NzkxNV92aWYgKil2aWYtPmRydl9wcml2Ow0KKwlzdHJ1 Y3Qgew0KKwkJc3RydWN0IHJlcV9oZHIgew0KKwkJCXU4IG9tYWNfaWR4Ow0KKwkJCXU4IGRiZGNf aWR4Ow0KKwkJCV9fbGUxNiB0bHZfbnVtOw0KKwkJCXU4IGlzX3Rsdl9hcHBlbmQ7DQorCQkJdTgg cnN2WzNdOw0KKwkJfSBfX3BhY2tlZCBoZHI7DQorCQlzdHJ1Y3QgcmVxX3RsdiB7DQorCQkJX19s ZTE2IHRhZzsNCisJCQlfX2xlMTYgbGVuOw0KKwkJCXU4IGFjdGl2ZTsNCisJCQl1OCBkYmRjX2lk eDsNCisJCQl1OCBvbWFjX2FkZHJbRVRIX0FMRU5dOw0KKwkJfSBfX3BhY2tlZCB0bHY7DQorCX0g ZGF0YSA9IHsNCisJCS5oZHIgPSB7DQorCQkJLm9tYWNfaWR4ID0gbXZpZi0+b21hY19pZHgsDQor CQkJLmRiZGNfaWR4ID0gbXZpZi0+YmFuZF9pZHgsDQorCQkJLnRsdl9udW0gPSBjcHVfdG9fbGUx NigxKSwNCisJCQkuaXNfdGx2X2FwcGVuZCA9IDEsDQorCQl9LA0KKwkJLnRsdiA9IHsNCisJCQku dGFnID0gY3B1X3RvX2xlMTYoREVWX0lORk9fQUNUSVZFKSwNCisJCQkubGVuID0gY3B1X3RvX2xl MTYoc2l6ZW9mKHN0cnVjdCByZXFfdGx2KSksDQorCQkJLmFjdGl2ZSA9IGVuYWJsZSwNCisJCQku ZGJkY19pZHggPSBtdmlmLT5iYW5kX2lkeCwNCisJCX0sDQorCX07DQorDQorCW1lbWNweShkYXRh LnRsdi5vbWFjX2FkZHIsIHZpZi0+YWRkciwgRVRIX0FMRU4pOw0KKwlyZXR1cm4gX19tdDc2X21j dV9zZW5kX21zZygmZGV2LT5tdDc2LCBNQ1VfRVhUX0NNRF9ERVZfSU5GT19VUERBVEUsDQorCQkJ CSAgICZkYXRhLCBzaXplb2YoZGF0YSksIHRydWUpOw0KK30NCisNCitzdGF0aWMgdm9pZA0KK210 NzkxNV9tY3VfYmVhY29uX2NzYShzdHJ1Y3Qgc2tfYnVmZiAqcnNrYiwgc3RydWN0IHNrX2J1ZmYg KnNrYiwNCisJCSAgICAgIHN0cnVjdCBic3NfaW5mb19iY24gKmJjbiwNCisJCSAgICAgIHN0cnVj dCBpZWVlODAyMTFfbXV0YWJsZV9vZmZzZXRzICpvZmZzKQ0KK3sNCisJaWYgKG9mZnMtPmNzYV9j b3VudGVyX29mZnNbMF0pIHsNCisJCXN0cnVjdCB0bHYgKnRsdjsNCisJCXN0cnVjdCBic3NfaW5m b19iY25fY3NhICpjc2E7DQorDQorCQl0bHYgPSBtdDc5MTVfbWN1X2FkZF9uZXN0ZWRfc3VidGx2 KHJza2IsIEJTU19JTkZPX0JDTl9DU0EsDQorCQkJCQkJICAgc2l6ZW9mKCpjc2EpLCAmYmNuLT5z dWJfbnRsdiwNCisJCQkJCQkgICAmYmNuLT5sZW4pOw0KKwkJY3NhID0gKHN0cnVjdCBic3NfaW5m b19iY25fY3NhICopdGx2Ow0KKwkJY3NhLT5jbnQgPSBza2ItPmRhdGFbb2Zmcy0+Y3NhX2NvdW50 ZXJfb2Zmc1swXV07DQorCX0NCit9DQorDQorc3RhdGljIHZvaWQNCittdDc5MTVfbWN1X2JlYWNv bl9jb250KHN0cnVjdCBtdDc5MTVfZGV2ICpkZXYsIHN0cnVjdCBza19idWZmICpyc2tiLA0KKwkJ ICAgICAgIHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBic3NfaW5mb19iY24gKmJjbiwNCisJ CSAgICAgICBzdHJ1Y3QgaWVlZTgwMjExX211dGFibGVfb2Zmc2V0cyAqb2ZmcykNCit7DQorCXN0 cnVjdCBtdDc2X3djaWQgKndjaWQgPSAmZGV2LT5tdDc2Lmdsb2JhbF93Y2lkOw0KKwlzdHJ1Y3Qg YnNzX2luZm9fYmNuX2NvbnQgKmNvbnQ7DQorCXN0cnVjdCB0bHYgKnRsdjsNCisJdTggKmJ1ZjsN CisJaW50IGxlbiA9IHNpemVvZigqY29udCkgKyBNVF9UWERfU0laRSArIHNrYi0+bGVuOw0KKw0K Kwl0bHYgPSBtdDc5MTVfbWN1X2FkZF9uZXN0ZWRfc3VidGx2KHJza2IsIEJTU19JTkZPX0JDTl9D T05URU5ULA0KKwkJCQkJICAgbGVuLCAmYmNuLT5zdWJfbnRsdiwgJmJjbi0+bGVuKTsNCisNCisJ Y29udCA9IChzdHJ1Y3QgYnNzX2luZm9fYmNuX2NvbnQgKil0bHY7DQorCWNvbnQtPnBrdF9sZW4g PSBjcHVfdG9fbGUxNihNVF9UWERfU0laRSArIHNrYi0+bGVuKTsNCisJY29udC0+dGltX29mcyA9 IGNwdV90b19sZTE2KG9mZnMtPnRpbV9vZmZzZXQpOw0KKw0KKwlpZiAob2Zmcy0+Y3NhX2NvdW50 ZXJfb2Zmc1swXSkNCisJCWNvbnQtPmNzYV9vZnMgPSBjcHVfdG9fbGUxNihvZmZzLT5jc2FfY291 bnRlcl9vZmZzWzBdIC0gNCk7DQorDQorCWJ1ZiA9ICh1OCAqKXRsdiArIHNpemVvZigqY29udCk7 DQorCW10NzkxNV9tYWNfd3JpdGVfdHh3aShkZXYsIChfX2xlMzIgKilidWYsIHNrYiwgd2NpZCwg TlVMTCwNCisJCQkgICAgICB0cnVlKTsNCisJbWVtY3B5KGJ1ZiArIE1UX1RYRF9TSVpFLCBza2It PmRhdGEsIHNrYi0+bGVuKTsNCit9DQorDQoraW50IG10NzkxNV9tY3VfYWRkX2JlYWNvbihzdHJ1 Y3QgaWVlZTgwMjExX2h3ICpodywNCisJCQkgIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsIGlu dCBlbikNCit7DQorI2RlZmluZSBNQVhfQkVBQ09OX1NJWkUgNTEyDQorCXN0cnVjdCBtdDc5MTVf ZGV2ICpkZXYgPSBtdDc5MTVfaHdfZGV2KGh3KTsNCisJc3RydWN0IG10NzkxNV9waHkgKnBoeSA9 IG10NzkxNV9od19waHkoaHcpOw0KKwlzdHJ1Y3QgbXQ3OTE1X3ZpZiAqbXZpZiA9IChzdHJ1Y3Qg bXQ3OTE1X3ZpZiAqKXZpZi0+ZHJ2X3ByaXY7DQorCXN0cnVjdCBpZWVlODAyMTFfbXV0YWJsZV9v ZmZzZXRzIG9mZnM7DQorCXN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyAqaW5mbzsNCisJc3RydWN0 IHNrX2J1ZmYgKnNrYiwgKnJza2I7DQorCXN0cnVjdCB0bHYgKnRsdjsNCisJc3RydWN0IGJzc19p bmZvX2JjbiAqYmNuOw0KKwlpbnQgbGVuID0gTVQ3OTE1X0JFQUNPTl9VUERBVEVfU0laRSArIE1B WF9CRUFDT05fU0laRTsNCisNCisJcnNrYiA9IG10NzkxNV9tY3VfYWxsb2Nfc3RhX3JlcShkZXYs IG12aWYsIE5VTEwsIGxlbik7DQorCWlmIChJU19FUlIocnNrYikpDQorCQlyZXR1cm4gUFRSX0VS Uihyc2tiKTsNCisNCisJdGx2ID0gbXQ3OTE1X21jdV9hZGRfdGx2KHJza2IsIEJTU19JTkZPX09G RkxPQUQsIHNpemVvZigqYmNuKSk7DQorCWJjbiA9IChzdHJ1Y3QgYnNzX2luZm9fYmNuICopdGx2 Ow0KKwliY24tPmVuYWJsZSA9IGVuOw0KKw0KKwlza2IgPSBpZWVlODAyMTFfYmVhY29uX2dldF90 ZW1wbGF0ZShodywgdmlmLCAmb2Zmcyk7DQorCWlmICghc2tiKQ0KKwkJcmV0dXJuIC1FSU5WQUw7 DQorDQorCWlmIChza2ItPmxlbiA+IE1BWF9CRUFDT05fU0laRSAtIE1UX1RYRF9TSVpFKSB7DQor CQlkZXZfZXJyKGRldi0+bXQ3Ni5kZXYsICJCY24gc2l6ZSBsaW1pdCBleGNlZWRcbiIpOw0KKwkJ ZGV2X2tmcmVlX3NrYihza2IpOw0KKwkJcmV0dXJuIC1FSU5WQUw7DQorCX0NCisNCisJaWYgKG12 aWYtPmJhbmRfaWR4KSB7DQorCQlpbmZvID0gSUVFRTgwMjExX1NLQl9DQihza2IpOw0KKwkJaW5m by0+aHdfcXVldWUgfD0gTVRfVFhfSFdfUVVFVUVfRVhUX1BIWTsNCisJfQ0KKw0KKwkvKiBUT0RP OiBzdWJ0YWcgLSBic3MgY29sb3IgY291bnQgJiAxMXYgTUJTU0lEICovDQorCW10NzkxNV9tY3Vf YmVhY29uX2NzYShyc2tiLCBza2IsIGJjbiwgJm9mZnMpOw0KKwltdDc5MTVfbWN1X2JlYWNvbl9j b250KGRldiwgcnNrYiwgc2tiLCBiY24sICZvZmZzKTsNCisJZGV2X2tmcmVlX3NrYihza2IpOw0K Kw0KKwlyZXR1cm4gX19tdDc2X21jdV9za2Jfc2VuZF9tc2coJnBoeS0+ZGV2LT5tdDc2LCByc2ti LA0KKwkJCQkgICAgICAgTUNVX0VYVF9DTURfQlNTX0lORk9fVVBEQVRFLCB0cnVlKTsNCit9DQor DQorc3RhdGljIGludCBtdDc5MTVfbWN1X3NlbmRfZmlybXdhcmUoc3RydWN0IG10NzkxNV9kZXYg KmRldiwgY29uc3Qgdm9pZCAqZGF0YSwNCisJCQkJICAgIGludCBsZW4pDQorew0KKwlpbnQgcmV0 ID0gMCwgY3VyX2xlbjsNCisNCisJd2hpbGUgKGxlbiA+IDApIHsNCisJCWN1cl9sZW4gPSBtaW5f dChpbnQsIDQwOTYgLSBzaXplb2Yoc3RydWN0IG10NzkxNV9tY3VfdHhkKSwNCisJCQkJbGVuKTsN CisNCisJCXJldCA9IF9fbXQ3Nl9tY3Vfc2VuZF9tc2coJmRldi0+bXQ3NiwgLU1DVV9DTURfRldf U0NBVFRFUiwNCisJCQkJCSAgZGF0YSwgY3VyX2xlbiwgZmFsc2UpOw0KKwkJaWYgKHJldCkNCisJ CQlicmVhazsNCisNCisJCWRhdGEgKz0gY3VyX2xlbjsNCisJCWxlbiAtPSBjdXJfbGVuOw0KKwkJ bXQ3Nl9xdWV1ZV90eF9jbGVhbnVwKGRldiwgTVRfVFhRX0ZXREwsIGZhbHNlKTsNCisJfQ0KKw0K KwlyZXR1cm4gcmV0Ow0KK30NCisNCitzdGF0aWMgaW50IG10NzkxNV9tY3Vfc3RhcnRfZmlybXdh cmUoc3RydWN0IG10NzkxNV9kZXYgKmRldiwgdTMyIGFkZHIsDQorCQkJCSAgICAgdTMyIG9wdGlv bikNCit7DQorCXN0cnVjdCB7DQorCQlfX2xlMzIgb3B0aW9uOw0KKwkJX19sZTMyIGFkZHI7DQor CX0gcmVxID0gew0KKwkJLm9wdGlvbiA9IGNwdV90b19sZTMyKG9wdGlvbiksDQorCQkuYWRkciA9 IGNwdV90b19sZTMyKGFkZHIpLA0KKwl9Ow0KKw0KKwlyZXR1cm4gX19tdDc2X21jdV9zZW5kX21z ZygmZGV2LT5tdDc2LCAtTUNVX0NNRF9GV19TVEFSVF9SRVEsDQorCQkJCSAgICZyZXEsIHNpemVv ZihyZXEpLCB0cnVlKTsNCit9DQorDQorc3RhdGljIGludCBtdDc5MTVfbWN1X3Jlc3RhcnQoc3Ry dWN0IG10NzZfZGV2ICpkZXYpDQorew0KKwlzdHJ1Y3Qgew0KKwkJdTggcG93ZXJfbW9kZTsNCisJ CXU4IHJzdlszXTsNCisJfSByZXEgPSB7DQorCQkucG93ZXJfbW9kZSA9IDEsDQorCX07DQorDQor CXJldHVybiBfX210NzZfbWN1X3NlbmRfbXNnKGRldiwgLU1DVV9DTURfTklDX1BPV0VSX0NUUkws ICZyZXEsDQorCQkJCSAgIHNpemVvZihyZXEpLCBmYWxzZSk7DQorfQ0KKw0KK3N0YXRpYyBpbnQg bXQ3OTE1X21jdV9wYXRjaF9zZW1fY3RybChzdHJ1Y3QgbXQ3OTE1X2RldiAqZGV2LCBib29sIGdl dCkNCit7DQorCXN0cnVjdCB7DQorCQlfX2xlMzIgb3A7DQorCX0gcmVxID0gew0KKwkJLm9wID0g Y3B1X3RvX2xlMzIoZ2V0ID8gUEFUQ0hfU0VNX0dFVCA6IFBBVENIX1NFTV9SRUxFQVNFKSwNCisJ fTsNCisNCisJcmV0dXJuIF9fbXQ3Nl9tY3Vfc2VuZF9tc2coJmRldi0+bXQ3NiwgLU1DVV9DTURf UEFUQ0hfU0VNX0NPTlRST0wsDQorCQkJCSAgICZyZXEsIHNpemVvZihyZXEpLCB0cnVlKTsNCit9 DQorDQorc3RhdGljIGludCBtdDc5MTVfbWN1X3N0YXJ0X3BhdGNoKHN0cnVjdCBtdDc5MTVfZGV2 ICpkZXYpDQorew0KKwlzdHJ1Y3Qgew0KKwkJdTggY2hlY2tfY3JjOw0KKwkJdTggcmVzZXJ2ZWRb M107DQorCX0gcmVxID0gew0KKwkJLmNoZWNrX2NyYyA9IDAsDQorCX07DQorDQorCXJldHVybiBf X210NzZfbWN1X3NlbmRfbXNnKCZkZXYtPm10NzYsIC1NQ1VfQ01EX1BBVENIX0ZJTklTSF9SRVEs DQorCQkJCSAgICZyZXEsIHNpemVvZihyZXEpLCB0cnVlKTsNCit9DQorDQorc3RhdGljIGludCBt dDc5MTVfZHJpdmVyX293bihzdHJ1Y3QgbXQ3OTE1X2RldiAqZGV2KQ0KK3sNCisJdTMyIHJlZyA9 IG10NzkxNV9yZWdfbWFwX2wxKGRldiwgTVRfVE9QX0xQQ1JfSE9TVF9CQU5EMCk7DQorDQorCW10 NzZfd3IoZGV2LCByZWcsIE1UX1RPUF9MUENSX0hPU1RfRFJWX09XTik7DQorCWlmICghbXQ3Nl9w b2xsX21zZWMoZGV2LCByZWcsIE1UX1RPUF9MUENSX0hPU1RfRldfT1dOLA0KKwkJCSAgICAwLCA1 MDApKSB7DQorCQlkZXZfZXJyKGRldi0+bXQ3Ni5kZXYsICJUaW1lb3V0IGZvciBkcml2ZXIgb3du XG4iKTsNCisJCXJldHVybiAtRUlPOw0KKwl9DQorDQorCXJldHVybiAwOw0KK30NCisNCitzdGF0 aWMgaW50IG10NzkxNV9tY3VfaW5pdF9kb3dubG9hZChzdHJ1Y3QgbXQ3OTE1X2RldiAqZGV2LCB1 MzIgYWRkciwNCisJCQkJICAgIHUzMiBsZW4sIHUzMiBtb2RlKQ0KK3sNCisJc3RydWN0IHsNCisJ CV9fbGUzMiBhZGRyOw0KKwkJX19sZTMyIGxlbjsNCisJCV9fbGUzMiBtb2RlOw0KKwl9IHJlcSA9 IHsNCisJCS5hZGRyID0gY3B1X3RvX2xlMzIoYWRkciksDQorCQkubGVuID0gY3B1X3RvX2xlMzIo bGVuKSwNCisJCS5tb2RlID0gY3B1X3RvX2xlMzIobW9kZSksDQorCX07DQorCWludCBhdHRyOw0K Kw0KKwlpZiAocmVxLmFkZHIgPT0gTUNVX1BBVENIX0FERFJFU1MpDQorCQlhdHRyID0gLU1DVV9D TURfUEFUQ0hfU1RBUlRfUkVROw0KKwllbHNlDQorCQlhdHRyID0gLU1DVV9DTURfVEFSR0VUX0FE RFJFU1NfTEVOX1JFUTsNCisNCisJcmV0dXJuIF9fbXQ3Nl9tY3Vfc2VuZF9tc2coJmRldi0+bXQ3 NiwgYXR0ciwgJnJlcSwgc2l6ZW9mKHJlcSksIHRydWUpOw0KK30NCisNCitzdGF0aWMgaW50IG10 NzkxNV9sb2FkX3BhdGNoKHN0cnVjdCBtdDc5MTVfZGV2ICpkZXYpDQorew0KKwljb25zdCBzdHJ1 Y3QgbXQ3OTE1X3BhdGNoX2hkciAqaGRyOw0KKwljb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZ3ID0g TlVMTDsNCisJaW50IGksIHJldCwgc2VtOw0KKw0KKwlzZW0gPSBtdDc5MTVfbWN1X3BhdGNoX3Nl bV9jdHJsKGRldiwgMSk7DQorCXN3aXRjaCAoc2VtKSB7DQorCWNhc2UgUEFUQ0hfSVNfREw6DQor CQlyZXR1cm4gMDsNCisJY2FzZSBQQVRDSF9OT1RfRExfU0VNX1NVQ0NFU1M6DQorCQlicmVhazsN CisJZGVmYXVsdDoNCisJCWRldl9lcnIoZGV2LT5tdDc2LmRldiwgIkZhaWxlZCB0byBnZXQgcGF0 Y2ggc2VtYXBob3JlXG4iKTsNCisJCXJldHVybiAtRUFHQUlOOw0KKwl9DQorDQorCXJldCA9IHJl cXVlc3RfZmlybXdhcmUoJmZ3LCBNVDc5MTVfUk9NX1BBVENILCBkZXYtPm10NzYuZGV2KTsNCisJ aWYgKHJldCkNCisJCWdvdG8gb3V0Ow0KKw0KKwlpZiAoIWZ3IHx8ICFmdy0+ZGF0YSB8fCBmdy0+ c2l6ZSA8IHNpemVvZigqaGRyKSkgew0KKwkJZGV2X2VycihkZXYtPm10NzYuZGV2LCAiSW52YWxp ZCBmaXJtd2FyZVxuIik7DQorCQlyZXQgPSAtRUlOVkFMOw0KKwkJZ290byBvdXQ7DQorCX0NCisN CisJaGRyID0gKGNvbnN0IHN0cnVjdCBtdDc5MTVfcGF0Y2hfaGRyICopKGZ3LT5kYXRhKTsNCisN CisJZGV2X2luZm8oZGV2LT5tdDc2LmRldiwgIkhXL1NXIFZlcnNpb246IDB4JXgsIEJ1aWxkIFRp bWU6ICUuMTZzXG4iLA0KKwkJIGJlMzJfdG9fY3B1KGhkci0+aHdfc3dfdmVyKSwgaGRyLT5idWls ZF9kYXRlKTsNCisNCisJZm9yIChpID0gMDsgaSA8IGJlMzJfdG9fY3B1KGhkci0+ZGVzYy5uX3Jl Z2lvbik7IGkrKykgew0KKwkJc3RydWN0IG10NzkxNV9wYXRjaF9zZWMgKnNlYzsNCisJCWNvbnN0 IHU4ICpkbDsNCisJCXUzMiBsZW4sIGFkZHI7DQorDQorCQlzZWMgPSAoc3RydWN0IG10NzkxNV9w YXRjaF9zZWMgKikoZnctPmRhdGEgKyBzaXplb2YoKmhkcikgKw0KKwkJCQkJCSAgaSAqIHNpemVv Zigqc2VjKSk7DQorCQlpZiAoKGJlMzJfdG9fY3B1KHNlYy0+dHlwZSkgJiBQQVRDSF9TRUNfVFlQ RV9NQVNLKSAhPQ0KKwkJICAgIFBBVENIX1NFQ19UWVBFX0lORk8pIHsNCisJCQlyZXQgPSAtRUlO VkFMOw0KKwkJCWdvdG8gb3V0Ow0KKwkJfQ0KKw0KKwkJYWRkciA9IGJlMzJfdG9fY3B1KHNlYy0+ aW5mby5hZGRyKTsNCisJCWxlbiA9IGJlMzJfdG9fY3B1KHNlYy0+aW5mby5sZW4pOw0KKwkJZGwg PSBmdy0+ZGF0YSArIGJlMzJfdG9fY3B1KHNlYy0+b2Zmcyk7DQorDQorCQlyZXQgPSBtdDc5MTVf bWN1X2luaXRfZG93bmxvYWQoZGV2LCBhZGRyLCBsZW4sDQorCQkJCQkgICAgICAgRExfTU9ERV9O RUVEX1JTUCk7DQorCQlpZiAocmV0KSB7DQorCQkJZGV2X2VycihkZXYtPm10NzYuZGV2LCAiRG93 bmxvYWQgcmVxdWVzdCBmYWlsZWRcbiIpOw0KKwkJCWdvdG8gb3V0Ow0KKwkJfQ0KKw0KKwkJcmV0 ID0gbXQ3OTE1X21jdV9zZW5kX2Zpcm13YXJlKGRldiwgZGwsIGxlbik7DQorCQlpZiAocmV0KSB7 DQorCQkJZGV2X2VycihkZXYtPm10NzYuZGV2LCAiRmFpbGVkIHRvIHNlbmQgcGF0Y2hcbiIpOw0K KwkJCWdvdG8gb3V0Ow0KKwkJfQ0KKwl9DQorDQorCXJldCA9IG10NzkxNV9tY3Vfc3RhcnRfcGF0 Y2goZGV2KTsNCisJaWYgKHJldCkNCisJCWRldl9lcnIoZGV2LT5tdDc2LmRldiwgIkZhaWxlZCB0 byBzdGFydCBwYXRjaFxuIik7DQorDQorb3V0Og0KKwlzZW0gPSBtdDc5MTVfbWN1X3BhdGNoX3Nl bV9jdHJsKGRldiwgMCk7DQorCXN3aXRjaCAoc2VtKSB7DQorCWNhc2UgUEFUQ0hfUkVMX1NFTV9T VUNDRVNTOg0KKwkJYnJlYWs7DQorCWRlZmF1bHQ6DQorCQlyZXQgPSAtRUFHQUlOOw0KKwkJZGV2 X2VycihkZXYtPm10NzYuZGV2LCAiRmFpbGVkIHRvIHJlbGVhc2UgcGF0Y2ggc2VtYXBob3JlXG4i KTsNCisJCWdvdG8gb3V0Ow0KKwl9DQorCXJlbGVhc2VfZmlybXdhcmUoZncpOw0KKw0KKwlyZXR1 cm4gcmV0Ow0KK30NCisNCitzdGF0aWMgdTMyIG10NzkxNV9tY3VfZ2VuX2RsX21vZGUodTggZmVh dHVyZV9zZXQsIGJvb2wgaXNfd2EpDQorew0KKwl1MzIgcmV0ID0gMDsNCisNCisJcmV0IHw9IChm ZWF0dXJlX3NldCAmIEZXX0ZFQVRVUkVfU0VUX0VOQ1JZUFQpID8NCisJICAgICAgIChETF9NT0RF X0VOQ1JZUFQgfCBETF9NT0RFX1JFU0VUX1NFQ19JVikgOiAwOw0KKwlyZXQgfD0gRklFTERfUFJF UChETF9NT0RFX0tFWV9JRFgsDQorCQkJICBGSUVMRF9HRVQoRldfRkVBVFVSRV9TRVRfS0VZX0lE WCwgZmVhdHVyZV9zZXQpKTsNCisJcmV0IHw9IERMX01PREVfTkVFRF9SU1A7DQorCXJldCB8PSBp c193YSA/IERMX01PREVfV09SS0lOR19QREFfQ1I0IDogMDsNCisNCisJcmV0dXJuIHJldDsNCit9 DQorDQorc3RhdGljIGludA0KK210NzkxNV9tY3Vfc2VuZF9yYW1fZmlybXdhcmUoc3RydWN0IG10 NzkxNV9kZXYgKmRldiwNCisJCQkgICAgIGNvbnN0IHN0cnVjdCBtdDc5MTVfZndfdHJhaWxlciAq aGRyLA0KKwkJCSAgICAgY29uc3QgdTggKmRhdGEsIGJvb2wgaXNfd2EpDQorew0KKwlpbnQgaSwg b2Zmc2V0ID0gMDsNCisJdTMyIG92ZXJyaWRlID0gMCwgb3B0aW9uID0gMDsNCisNCisJZm9yIChp ID0gMDsgaSA8IGhkci0+bl9yZWdpb247IGkrKykgew0KKwkJY29uc3Qgc3RydWN0IG10NzkxNV9m d19yZWdpb24gKnJlZ2lvbjsNCisJCWludCBlcnI7DQorCQl1MzIgbGVuLCBhZGRyLCBtb2RlOw0K Kw0KKwkJcmVnaW9uID0gKGNvbnN0IHN0cnVjdCBtdDc5MTVfZndfcmVnaW9uICopKChjb25zdCB1 OCAqKWhkciAtDQorCQkJIChoZHItPm5fcmVnaW9uIC0gaSkgKiBzaXplb2YoKnJlZ2lvbikpOw0K KwkJbW9kZSA9IG10NzkxNV9tY3VfZ2VuX2RsX21vZGUocmVnaW9uLT5mZWF0dXJlX3NldCwgaXNf d2EpOw0KKwkJbGVuID0gbGUzMl90b19jcHUocmVnaW9uLT5sZW4pOw0KKwkJYWRkciA9IGxlMzJf dG9fY3B1KHJlZ2lvbi0+YWRkcik7DQorDQorCQlpZiAocmVnaW9uLT5mZWF0dXJlX3NldCAmIEZX X0ZFQVRVUkVfT1ZFUlJJREVfQUREUikNCisJCQlvdmVycmlkZSA9IGFkZHI7DQorDQorCQllcnIg PSBtdDc5MTVfbWN1X2luaXRfZG93bmxvYWQoZGV2LCBhZGRyLCBsZW4sIG1vZGUpOw0KKwkJaWYg KGVycikgew0KKwkJCWRldl9lcnIoZGV2LT5tdDc2LmRldiwgIkRvd25sb2FkIHJlcXVlc3QgZmFp bGVkXG4iKTsNCisJCQlyZXR1cm4gZXJyOw0KKwkJfQ0KKw0KKwkJZXJyID0gbXQ3OTE1X21jdV9z ZW5kX2Zpcm13YXJlKGRldiwgZGF0YSArIG9mZnNldCwgbGVuKTsNCisJCWlmIChlcnIpIHsNCisJ CQlkZXZfZXJyKGRldi0+bXQ3Ni5kZXYsICJGYWlsZWQgdG8gc2VuZCBmaXJtd2FyZS5cbiIpOw0K KwkJCXJldHVybiBlcnI7DQorCQl9DQorDQorCQlvZmZzZXQgKz0gbGVuOw0KKwl9DQorDQorCWlm IChvdmVycmlkZSkNCisJCW9wdGlvbiB8PSBGV19TVEFSVF9PVkVSUklERTsNCisNCisJaWYgKGlz X3dhKQ0KKwkJb3B0aW9uIHw9IEZXX1NUQVJUX1dPUktJTkdfUERBX0NSNDsNCisNCisJcmV0dXJu IG10NzkxNV9tY3Vfc3RhcnRfZmlybXdhcmUoZGV2LCBvdmVycmlkZSwgb3B0aW9uKTsNCit9DQor DQorc3RhdGljIGludCBtdDc5MTVfbG9hZF9yYW0oc3RydWN0IG10NzkxNV9kZXYgKmRldikNCit7 DQorCWNvbnN0IHN0cnVjdCBtdDc5MTVfZndfdHJhaWxlciAqaGRyOw0KKwljb25zdCBzdHJ1Y3Qg ZmlybXdhcmUgKmZ3Ow0KKwlpbnQgcmV0Ow0KKw0KKwlyZXQgPSByZXF1ZXN0X2Zpcm13YXJlKCZm dywgTVQ3OTE1X0ZJUk1XQVJFX1dNLCBkZXYtPm10NzYuZGV2KTsNCisJaWYgKHJldCkNCisJCXJl dHVybiByZXQ7DQorDQorCWlmICghZncgfHwgIWZ3LT5kYXRhIHx8IGZ3LT5zaXplIDwgc2l6ZW9m KCpoZHIpKSB7DQorCQlkZXZfZXJyKGRldi0+bXQ3Ni5kZXYsICJJbnZhbGlkIGZpcm13YXJlXG4i KTsNCisJCXJldCA9IC1FSU5WQUw7DQorCQlnb3RvIG91dDsNCisJfQ0KKw0KKwloZHIgPSAoY29u c3Qgc3RydWN0IG10NzkxNV9md190cmFpbGVyICopKGZ3LT5kYXRhICsgZnctPnNpemUgLQ0KKwkJ CQkJc2l6ZW9mKCpoZHIpKTsNCisNCisJZGV2X2luZm8oZGV2LT5tdDc2LmRldiwgIldNIEZpcm13 YXJlIFZlcnNpb246ICUuMTBzLCBCdWlsZCBUaW1lOiAlLjE1c1xuIiwNCisJCSBoZHItPmZ3X3Zl ciwgaGRyLT5idWlsZF9kYXRlKTsNCisNCisJcmV0ID0gbXQ3OTE1X21jdV9zZW5kX3JhbV9maXJt d2FyZShkZXYsIGhkciwgZnctPmRhdGEsIGZhbHNlKTsNCisJaWYgKHJldCkgew0KKwkJZGV2X2Vy cihkZXYtPm10NzYuZGV2LCAiRmFpbGVkIHRvIHN0YXJ0IFdNIGZpcm13YXJlXG4iKTsNCisJCWdv dG8gb3V0Ow0KKwl9DQorDQorCXJlbGVhc2VfZmlybXdhcmUoZncpOw0KKw0KKwlyZXQgPSByZXF1 ZXN0X2Zpcm13YXJlKCZmdywgTVQ3OTE1X0ZJUk1XQVJFX1dBLCBkZXYtPm10NzYuZGV2KTsNCisJ aWYgKHJldCkNCisJCXJldHVybiByZXQ7DQorDQorCWlmICghZncgfHwgIWZ3LT5kYXRhIHx8IGZ3 LT5zaXplIDwgc2l6ZW9mKCpoZHIpKSB7DQorCQlkZXZfZXJyKGRldi0+bXQ3Ni5kZXYsICJJbnZh bGlkIGZpcm13YXJlXG4iKTsNCisJCXJldCA9IC1FSU5WQUw7DQorCQlnb3RvIG91dDsNCisJfQ0K Kw0KKwloZHIgPSAoY29uc3Qgc3RydWN0IG10NzkxNV9md190cmFpbGVyICopKGZ3LT5kYXRhICsg ZnctPnNpemUgLQ0KKwkJCQkJc2l6ZW9mKCpoZHIpKTsNCisNCisJZGV2X2luZm8oZGV2LT5tdDc2 LmRldiwgIldBIEZpcm13YXJlIFZlcnNpb246ICUuMTBzLCBCdWlsZCBUaW1lOiAlLjE1c1xuIiwN CisJCSBoZHItPmZ3X3ZlciwgaGRyLT5idWlsZF9kYXRlKTsNCisNCisJcmV0ID0gbXQ3OTE1X21j dV9zZW5kX3JhbV9maXJtd2FyZShkZXYsIGhkciwgZnctPmRhdGEsIHRydWUpOw0KKwlpZiAocmV0 KSB7DQorCQlkZXZfZXJyKGRldi0+bXQ3Ni5kZXYsICJGYWlsZWQgdG8gc3RhcnQgV0EgZmlybXdh cmVcbiIpOw0KKwkJZ290byBvdXQ7DQorCX0NCisNCisJc25wcmludGYoZGV2LT5tdDc2Lmh3LT53 aXBoeS0+ZndfdmVyc2lvbiwNCisJCSBzaXplb2YoZGV2LT5tdDc2Lmh3LT53aXBoeS0+ZndfdmVy c2lvbiksDQorCQkgIiUuMTBzLSUuMTVzIiwgaGRyLT5md192ZXIsIGhkci0+YnVpbGRfZGF0ZSk7 DQorDQorb3V0Og0KKwlyZWxlYXNlX2Zpcm13YXJlKGZ3KTsNCisNCisJcmV0dXJuIHJldDsNCit9 DQorDQorc3RhdGljIGludCBtdDc5MTVfbG9hZF9maXJtd2FyZShzdHJ1Y3QgbXQ3OTE1X2RldiAq ZGV2KQ0KK3sNCisJaW50IHJldDsNCisJdTMyIHZhbCwgcmVnID0gbXQ3OTE1X3JlZ19tYXBfbDEo ZGV2LCBNVF9UT1BfTUlTQyk7DQorDQorCXZhbCA9IEZJRUxEX1BSRVAoTVRfVE9QX01JU0NfRldf U1RBVEUsIEZXX1NUQVRFX0ZXX0RPV05MT0FEKTsNCisNCisJaWYgKCFtdDc2X3BvbGxfbXNlYyhk ZXYsIHJlZywgTVRfVE9QX01JU0NfRldfU1RBVEUsIHZhbCwgMTAwMCkpIHsNCisJCS8qIHJlc3Rh cnQgZmlybXdhcmUgb25jZSAqLw0KKwkJX19tdDc2X21jdV9yZXN0YXJ0KCZkZXYtPm10NzYpOw0K KwkJaWYgKCFtdDc2X3BvbGxfbXNlYyhkZXYsIHJlZywgTVRfVE9QX01JU0NfRldfU1RBVEUsDQor CQkJCSAgICB2YWwsIDEwMDApKSB7DQorCQkJZGV2X2VycihkZXYtPm10NzYuZGV2LA0KKwkJCQki RmlybXdhcmUgaXMgbm90IHJlYWR5IGZvciBkb3dubG9hZFxuIik7DQorCQkJcmV0dXJuIC1FSU87 DQorCQl9DQorCX0NCisNCisJcmV0ID0gbXQ3OTE1X2xvYWRfcGF0Y2goZGV2KTsNCisJaWYgKHJl dCkNCisJCXJldHVybiByZXQ7DQorDQorCXJldCA9IG10NzkxNV9sb2FkX3JhbShkZXYpOw0KKwlp ZiAocmV0KQ0KKwkJcmV0dXJuIHJldDsNCisNCisJaWYgKCFtdDc2X3BvbGxfbXNlYyhkZXYsIHJl ZywgTVRfVE9QX01JU0NfRldfU1RBVEUsDQorCQkJICAgIEZJRUxEX1BSRVAoTVRfVE9QX01JU0Nf RldfU1RBVEUsDQorCQkJCSAgICAgICBGV19TVEFURV9XQUNQVV9SRFkpLCAxMDAwKSkgew0KKwkJ ZGV2X2VycihkZXYtPm10NzYuZGV2LCAiVGltZW91dCBmb3IgaW5pdGlhbGl6aW5nIGZpcm13YXJl XG4iKTsNCisJCXJldHVybiAtRUlPOw0KKwl9DQorDQorCW10NzZfcXVldWVfdHhfY2xlYW51cChk ZXYsIE1UX1RYUV9GV0RMLCBmYWxzZSk7DQorDQorCWRldl9kYmcoZGV2LT5tdDc2LmRldiwgIkZp cm13YXJlIGluaXQgZG9uZVxuIik7DQorDQorCXJldHVybiAwOw0KK30NCisNCitpbnQgbXQ3OTE1 X21jdV9pbml0KHN0cnVjdCBtdDc5MTVfZGV2ICpkZXYpDQorew0KKwlzdGF0aWMgY29uc3Qgc3Ry dWN0IG10NzZfbWN1X29wcyBtdDc5MTVfbWN1X29wcyA9IHsNCisJCS5oZWFkcm9vbSA9IHNpemVv ZihzdHJ1Y3QgbXQ3OTE1X21jdV90eGQpLA0KKwkJLm1jdV9za2Jfc2VuZF9tc2cgPSBtdDc5MTVf bWN1X3NlbmRfbWVzc2FnZSwNCisJCS5tY3Vfc2VuZF9tc2cgPSBtdDc5MTVfbWN1X21zZ19zZW5k LA0KKwkJLm1jdV9yZXN0YXJ0ID0gbXQ3OTE1X21jdV9yZXN0YXJ0LA0KKwl9Ow0KKwlpbnQgcmV0 Ow0KKw0KKwlkZXYtPm10NzYubWN1X29wcyA9ICZtdDc5MTVfbWN1X29wcywNCisNCisJcmV0ID0g bXQ3OTE1X2RyaXZlcl9vd24oZGV2KTsNCisJaWYgKHJldCkNCisJCXJldHVybiByZXQ7DQorDQor CXJldCA9IG10NzkxNV9sb2FkX2Zpcm13YXJlKGRldik7DQorCWlmIChyZXQpDQorCQlyZXR1cm4g cmV0Ow0KKw0KKwlzZXRfYml0KE1UNzZfU1RBVEVfTUNVX1JVTk5JTkcsICZkZXYtPm1waHkuc3Rh dGUpOw0KKw0KKwlyZXR1cm4gMDsNCit9DQorDQordm9pZCBtdDc5MTVfbWN1X2V4aXQoc3RydWN0 IG10NzkxNV9kZXYgKmRldikNCit7DQorCXUzMiByZWcgPSBtdDc5MTVfcmVnX21hcF9sMShkZXYs IE1UX1RPUF9NSVNDKTsNCisNCisJX19tdDc2X21jdV9yZXN0YXJ0KCZkZXYtPm10NzYpOw0KKwlp ZiAoIW10NzZfcG9sbF9tc2VjKGRldiwgcmVnLCBNVF9UT1BfTUlTQ19GV19TVEFURSwNCisJCQkg ICAgRklFTERfUFJFUChNVF9UT1BfTUlTQ19GV19TVEFURSwNCisJCQkJICAgICAgIEZXX1NUQVRF X0ZXX0RPV05MT0FEKSwgMTAwMCkpIHsNCisJCWRldl9lcnIoZGV2LT5tdDc2LmRldiwgIkZhaWxl ZCB0byBleGl0IG1jdVxuIik7DQorCQlyZXR1cm47DQorCX0NCisNCisJcmVnID0gbXQ3OTE1X3Jl Z19tYXBfbDEoZGV2LCBNVF9UT1BfTFBDUl9IT1NUX0JBTkQwKTsNCisJbXQ3Nl93cihkZXYsIHJl ZywgTVRfVE9QX0xQQ1JfSE9TVF9GV19PV04pOw0KKwlza2JfcXVldWVfcHVyZ2UoJmRldi0+bXQ3 Ni5tY3UucmVzX3EpOw0KK30NCisNCitpbnQgbXQ3OTE1X21jdV9zZXRfbWFjKHN0cnVjdCBtdDc5 MTVfZGV2ICpkZXYsIGludCBiYW5kLA0KKwkJICAgICAgIGJvb2wgZW5hYmxlLCBib29sIGhkcl90 cmFucykNCit7DQorCXN0cnVjdCB7DQorCQl1OCBvcGVyYXRpb247DQorCQl1OCBlbmFibGU7DQor CQl1OCBjaGVja19ic3NpZDsNCisJCXU4IGluc2VydF92bGFuOw0KKwkJdTggcmVtb3ZlX3ZsYW47 DQorCQl1OCB0aWQ7DQorCQl1OCBtb2RlOw0KKwkJdTggcnN2Ow0KKwl9IF9fcGFja2VkIHJlcV90 cmFucyA9IHsNCisJCS5lbmFibGUgPSBoZHJfdHJhbnMsDQorCX07DQorCXN0cnVjdCB7DQorCQl1 OCBlbmFibGU7DQorCQl1OCBiYW5kOw0KKwkJdTggcnN2WzJdOw0KKwl9IF9fcGFja2VkIHJlcV9t YWMgPSB7DQorCQkuZW5hYmxlID0gZW5hYmxlLA0KKwkJLmJhbmQgPSBiYW5kLA0KKwl9Ow0KKwlp bnQgcmV0Ow0KKw0KKwlyZXQgPSBfX210NzZfbWN1X3NlbmRfbXNnKCZkZXYtPm10NzYsIE1DVV9F WFRfQ01EX1JYX0hEUl9UUkFOUywNCisJCQkJICAmcmVxX3RyYW5zLCBzaXplb2YocmVxX3RyYW5z KSwgZmFsc2UpOw0KKwlpZiAocmV0KQ0KKwkJcmV0dXJuIHJldDsNCisNCisJcmV0dXJuIF9fbXQ3 Nl9tY3Vfc2VuZF9tc2coJmRldi0+bXQ3NiwgTUNVX0VYVF9DTURfTUFDX0lOSVRfQ1RSTCwNCisJ CQkJICAgJnJlcV9tYWMsIHNpemVvZihyZXFfbWFjKSwgdHJ1ZSk7DQorfQ0KKw0KK2ludCBtdDc5 MTVfbWN1X3NldF9zY3Moc3RydWN0IG10NzkxNV9kZXYgKmRldiwgdTggYmFuZCwgYm9vbCBlbmFi bGUpDQorew0KKwlzdHJ1Y3Qgew0KKwkJX19sZTMyIGNtZDsNCisJCXU4IGJhbmQ7DQorCQl1OCBl bmFibGU7DQorCX0gX19wYWNrZWQgcmVxID0gew0KKwkJLmNtZCA9IGNwdV90b19sZTMyKFNDU19F TkFCTEUpLA0KKwkJLmJhbmQgPSBiYW5kLA0KKwkJLmVuYWJsZSA9IGVuYWJsZSArIDEsDQorCX07 DQorDQorCXJldHVybiBfX210NzZfbWN1X3NlbmRfbXNnKCZkZXYtPm10NzYsIE1DVV9FWFRfQ01E X1NDU19DVFJMLCAmcmVxLA0KKwkJCQkgICBzaXplb2YocmVxKSwgZmFsc2UpOw0KK30NCisNCitp bnQgbXQ3OTE1X21jdV9zZXRfcnRzX3RocmVzaChzdHJ1Y3QgbXQ3OTE1X3BoeSAqcGh5LCB1MzIg dmFsKQ0KK3sNCisJc3RydWN0IG10NzkxNV9kZXYgKmRldiA9IHBoeS0+ZGV2Ow0KKwlzdHJ1Y3Qg ew0KKwkJdTggcHJvdF9pZHg7DQorCQl1OCBiYW5kOw0KKwkJdTggcnN2WzJdOw0KKwkJX19sZTMy IGxlbl90aHJlc2g7DQorCQlfX2xlMzIgcGt0X3RocmVzaDsNCisJfSBfX3BhY2tlZCByZXEgPSB7 DQorCQkucHJvdF9pZHggPSAxLA0KKwkJLmJhbmQgPSBwaHkgIT0gJmRldi0+cGh5LA0KKwkJLmxl bl90aHJlc2ggPSBjcHVfdG9fbGUzMih2YWwpLA0KKwkJLnBrdF90aHJlc2ggPSBjcHVfdG9fbGUz MigweDIpLA0KKwl9Ow0KKw0KKwlyZXR1cm4gX19tdDc2X21jdV9zZW5kX21zZygmZGV2LT5tdDc2 LCBNQ1VfRVhUX0NNRF9QUk9URUNUX0NUUkwsDQorCQkJCSAgICZyZXEsIHNpemVvZihyZXEpLCB0 cnVlKTsNCit9DQorDQoraW50IG10NzkxNV9tY3Vfc2V0X3R4KHN0cnVjdCBtdDc5MTVfZGV2ICpk ZXYsIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYpDQorew0KKyNkZWZpbmUgV01NX0FJRlNfU0VU CQlCSVQoMCkNCisjZGVmaW5lIFdNTV9DV19NSU5fU0VUCQlCSVQoMSkNCisjZGVmaW5lIFdNTV9D V19NQVhfU0VUCQlCSVQoMikNCisjZGVmaW5lIFdNTV9UWE9QX1NFVAkJQklUKDMpDQorI2RlZmlu ZSBXTU1fUEFSQU1fU0VUCQlHRU5NQVNLKDMsIDApDQorI2RlZmluZSBUWF9DTURfTU9ERQkJMQ0K KwlzdHJ1Y3QgZWRjYSB7DQorCQl1OCBxdWV1ZTsNCisJCXU4IHNldDsNCisJCXU4IGFpZnM7DQor CQl1OCBjd19taW47DQorCQlfX2xlMTYgY3dfbWF4Ow0KKwkJX19sZTE2IHR4b3A7DQorCX07DQor CXN0cnVjdCBtdDc5MTVfbWN1X3R4IHsNCisJCXU4IHRvdGFsOw0KKwkJdTggYWN0aW9uOw0KKwkJ dTggdmFsaWQ7DQorCQl1OCBtb2RlOw0KKw0KKwkJc3RydWN0IGVkY2EgZWRjYVtJRUVFODAyMTFf TlVNX0FDU107DQorCX0gX19wYWNrZWQgcmVxID0gew0KKwkJLnZhbGlkID0gdHJ1ZSwNCisJCS5t b2RlID0gVFhfQ01EX01PREUsDQorCQkudG90YWwgPSBJRUVFODAyMTFfTlVNX0FDUywNCisJfTsN CisJc3RydWN0IG10NzkxNV92aWYgKm12aWYgPSAoc3RydWN0IG10NzkxNV92aWYgKil2aWYtPmRy dl9wcml2Ow0KKwlpbnQgYWM7DQorDQorCWZvciAoYWMgPSAwOyBhYyA8IElFRUU4MDIxMV9OVU1f QUNTOyBhYysrKSB7DQorCQlzdHJ1Y3QgZWRjYSAqZSA9ICZyZXEuZWRjYVthY107DQorDQorCQll LT5xdWV1ZSA9IGFjICsgbXZpZi0+d21tX2lkeCAqIE1UNzkxNV9NQVhfV01NX1NFVFM7DQorCQll LT5haWZzID0gbXZpZi0+d21tW2FjXS5haWZzOw0KKwkJZS0+dHhvcCA9IGNwdV90b19sZTE2KG12 aWYtPndtbVthY10udHhvcCk7DQorDQorCQlpZiAobXZpZi0+d21tW2FjXS5jd19taW4pDQorCQkJ ZS0+Y3dfbWluID0gZmxzKG12aWYtPndtbVthY10uY3dfbWF4KTsNCisJCWVsc2UNCisJCQllLT5j d19taW4gPSA1Ow0KKw0KKwkJaWYgKG12aWYtPndtbVthY10uY3dfbWF4KQ0KKwkJCWUtPmN3X21h eCA9IGNwdV90b19sZTE2KGZscyhtdmlmLT53bW1bYWNdLmN3X21heCkpOw0KKwkJZWxzZQ0KKwkJ CWUtPmN3X21heCA9IGNwdV90b19sZTE2KDEwKTsNCisJfQ0KKw0KKwlyZXR1cm4gX19tdDc2X21j dV9zZW5kX21zZygmZGV2LT5tdDc2LCBNQ1VfRVhUX0NNRF9FRENBX1VQREFURSwNCisJCQkJICAm cmVxLCBzaXplb2YocmVxKSwgdHJ1ZSk7DQorfQ0KKw0KK2ludCBtdDc5MTVfbWN1X3NldF9wbShz dHJ1Y3QgbXQ3OTE1X2RldiAqZGV2LCBpbnQgYmFuZCwgaW50IGVudGVyKQ0KK3sNCisjZGVmaW5l IEVOVEVSX1BNX1NUQVRFCQkxDQorI2RlZmluZSBFWElUX1BNX1NUQVRFCQkyDQorCXN0cnVjdCB7 DQorCQl1OCBwbV9udW1iZXI7DQorCQl1OCBwbV9zdGF0ZTsNCisJCXU4IGJzc2lkW0VUSF9BTEVO XTsNCisJCXU4IGR0aW1fcGVyaW9kOw0KKwkJdTggd2xhbl9pZHhfbG87DQorCQlfX2xlMTYgYmNu X2ludGVydmFsOw0KKwkJX19sZTMyIGFpZDsNCisJCV9fbGUzMiByeF9maWx0ZXI7DQorCQl1OCBi YW5kX2lkeDsNCisJCXU4IHdsYW5faWR4X2hpOw0KKwkJdTggcnN2WzJdOw0KKwkJX19sZTMyIGZl YXR1cmU7DQorCQl1OCBvbWFjX2lkeDsNCisJCXU4IHdtbV9pZHg7DQorCQl1OCBiY25fbG9zc19j bnQ7DQorCQl1OCBiY25fc3BfZHVyYXRpb247DQorCX0gX19wYWNrZWQgcmVxID0gew0KKwkJLnBt X251bWJlciA9IDUsDQorCQkucG1fc3RhdGUgPSAoZW50ZXIpID8gRU5URVJfUE1fU1RBVEUgOiBF WElUX1BNX1NUQVRFLA0KKwkJLmJhbmRfaWR4ID0gYmFuZCwNCisJfTsNCisNCisJcmV0dXJuIF9f bXQ3Nl9tY3Vfc2VuZF9tc2coJmRldi0+bXQ3NiwgTUNVX0VYVF9DTURfUE1fU1RBVEVfQ1RSTCwN CisJCQkJICAgJnJlcSwgc2l6ZW9mKHJlcSksIHRydWUpOw0KK30NCisNCitpbnQgbXQ3OTE1X21j dV9yZGRfY21kKHN0cnVjdCBtdDc5MTVfZGV2ICpkZXYsDQorCQkgICAgICAgZW51bSBtdDc5MTVf cmRkX2NtZCBjbWQsIHU4IGluZGV4LA0KKwkJICAgICAgIHU4IHJ4X3NlbCwgdTggdmFsKQ0KK3sN CisJc3RydWN0IHsNCisJCXU4IGN0cmw7DQorCQl1OCByZGRfaWR4Ow0KKwkJdTggcmRkX3J4X3Nl bDsNCisJCXU4IHZhbDsNCisJCXU4IHJzdls0XTsNCisJfSBfX3BhY2tlZCByZXEgPSB7DQorCQku Y3RybCA9IGNtZCwNCisJCS5yZGRfaWR4ID0gaW5kZXgsDQorCQkucmRkX3J4X3NlbCA9IHJ4X3Nl bCwNCisJCS52YWwgPSB2YWwsDQorCX07DQorDQorCXJldHVybiBfX210NzZfbWN1X3NlbmRfbXNn KCZkZXYtPm10NzYsIE1DVV9FWFRfQ01EX1NFVF9SRERfQ1RSTCwNCisJCQkJICAgJnJlcSwgc2l6 ZW9mKHJlcSksIHRydWUpOw0KK30NCisNCitpbnQgbXQ3OTE1X21jdV9zZXRfZmNjNV9scG4oc3Ry dWN0IG10NzkxNV9kZXYgKmRldiwgaW50IHZhbCkNCit7DQorCXN0cnVjdCB7DQorCQl1MzIgdGFn Ow0KKwkJdTE2IG1pbl9scG47DQorCQl1OCByc3ZbMl07DQorCX0gX19wYWNrZWQgcmVxID0gew0K KwkJLnRhZyA9IDB4MSwNCisJCS5taW5fbHBuID0gdmFsLA0KKwl9Ow0KKw0KKwlyZXR1cm4gX19t dDc2X21jdV9zZW5kX21zZygmZGV2LT5tdDc2LCBNQ1VfRVhUX0NNRF9TRVRfUkREX1RILA0KKwkJ CQkgICAmcmVxLCBzaXplb2YocmVxKSwgdHJ1ZSk7DQorfQ0KKw0KK2ludCBtdDc5MTVfbWN1X3Nl dF9wdWxzZV90aChzdHJ1Y3QgbXQ3OTE1X2RldiAqZGV2LA0KKwkJCSAgICBjb25zdCBzdHJ1Y3Qg bXQ3OTE1X2Rmc19wdWxzZSAqcHVsc2UpDQorew0KKwlzdHJ1Y3Qgew0KKwkJdTMyIHRhZzsNCisJ CXN0cnVjdCBtdDc5MTVfZGZzX3B1bHNlIHB1bHNlOw0KKwl9IF9fcGFja2VkIHJlcSA9IHsNCisJ CS50YWcgPSAweDMsDQorCX07DQorDQorCW1lbWNweSgmcmVxLnB1bHNlLCBwdWxzZSwgc2l6ZW9m KCpwdWxzZSkpOw0KKw0KKwlyZXR1cm4gX19tdDc2X21jdV9zZW5kX21zZygmZGV2LT5tdDc2LCBN Q1VfRVhUX0NNRF9TRVRfUkREX1RILA0KKwkJCQkgICAmcmVxLCBzaXplb2YocmVxKSwgdHJ1ZSk7 DQorfQ0KKw0KK2ludCBtdDc5MTVfbWN1X3NldF9yYWRhcl90aChzdHJ1Y3QgbXQ3OTE1X2RldiAq ZGV2LCBpbnQgaW5kZXgsDQorCQkJICAgIGNvbnN0IHN0cnVjdCBtdDc5MTVfZGZzX3BhdHRlcm4g KnBhdHRlcm4pDQorew0KKwlzdHJ1Y3Qgew0KKwkJdTMyIHRhZzsNCisJCXUxNiByYWRhcl90eXBl Ow0KKwkJc3RydWN0IG10NzkxNV9kZnNfcGF0dGVybiBwYXR0ZXJuOw0KKwl9IF9fcGFja2VkIHJl cSA9IHsNCisJCS50YWcgPSAweDIsDQorCQkucmFkYXJfdHlwZSA9IGluZGV4LA0KKwl9Ow0KKw0K KwltZW1jcHkoJnJlcS5wYXR0ZXJuLCBwYXR0ZXJuLCBzaXplb2YoKnBhdHRlcm4pKTsNCisNCisJ cmV0dXJuIF9fbXQ3Nl9tY3Vfc2VuZF9tc2coJmRldi0+bXQ3NiwgTUNVX0VYVF9DTURfU0VUX1JE RF9USCwNCisJCQkJICAgJnJlcSwgc2l6ZW9mKHJlcSksIHRydWUpOw0KK30NCisNCitpbnQgbXQ3 OTE1X21jdV9zZXRfY2hhbl9pbmZvKHN0cnVjdCBtdDc5MTVfcGh5ICpwaHksIGludCBjbWQpDQor ew0KKwlzdHJ1Y3QgbXQ3OTE1X2RldiAqZGV2ID0gcGh5LT5kZXY7DQorCXN0cnVjdCBjZmc4MDIx MV9jaGFuX2RlZiAqY2hhbmRlZiA9ICZwaHktPm10NzYtPmNoYW5kZWY7DQorCWludCBmcmVxMSA9 IGNoYW5kZWYtPmNlbnRlcl9mcmVxMTsNCisJc3RydWN0IHsNCisJCXU4IGNvbnRyb2xfY2g7DQor CQl1OCBjZW50ZXJfY2g7DQorCQl1OCBidzsNCisJCXU4IHR4X3N0cmVhbXNfbnVtOw0KKwkJdTgg cnhfc3RyZWFtczsJLyogbWFzayBvciBudW0gKi8NCisJCXU4IHN3aXRjaF9yZWFzb247DQorCQl1 OCBiYW5kX2lkeDsNCisJCXU4IGNlbnRlcl9jaDI7CS8qIGZvciA4MCs4MCBvbmx5ICovDQorCQlf X2xlMTYgY2FjX2Nhc2U7DQorCQl1OCBjaGFubmVsX2JhbmQ7DQorCQl1OCByc3YwOw0KKwkJX19s ZTMyIG91dGJhbmRfZnJlcTsNCisJCXU4IHR4cG93ZXJfZHJvcDsNCisJCXU4IGFwX2J3Ow0KKwkJ dTggYXBfY2VudGVyX2NoOw0KKwkJdTggcnN2MVs1N107DQorCX0gX19wYWNrZWQgcmVxID0gew0K KwkJLmNvbnRyb2xfY2ggPSBjaGFuZGVmLT5jaGFuLT5od192YWx1ZSwNCisJCS5jZW50ZXJfY2gg PSBpZWVlODAyMTFfZnJlcXVlbmN5X3RvX2NoYW5uZWwoZnJlcTEpLA0KKwkJLmJ3ID0gbXQ3OTE1 X21jdV9jaGFuX2J3KGNoYW5kZWYpLA0KKwkJLnR4X3N0cmVhbXNfbnVtID0gaHdlaWdodDgocGh5 LT5tdDc2LT5hbnRlbm5hX21hc2spLA0KKwkJLnJ4X3N0cmVhbXMgPSBwaHktPmNoYWlubWFzaywN CisJCS5iYW5kX2lkeCA9IHBoeSAhPSAmZGV2LT5waHksDQorCQkuY2hhbm5lbF9iYW5kID0gY2hh bmRlZi0+Y2hhbi0+YmFuZCwNCisJfTsNCisNCisJaWYgKChjaGFuZGVmLT5jaGFuLT5mbGFncyAm IElFRUU4MDIxMV9DSEFOX1JBREFSKSAmJg0KKwkgICAgY2hhbmRlZi0+Y2hhbi0+ZGZzX3N0YXRl ICE9IE5MODAyMTFfREZTX0FWQUlMQUJMRSkNCisJCXJlcS5zd2l0Y2hfcmVhc29uID0gQ0hfU1dJ VENIX0RGUzsNCisJZWxzZQ0KKwkJcmVxLnN3aXRjaF9yZWFzb24gPSBDSF9TV0lUQ0hfTk9STUFM Ow0KKw0KKwlpZiAoY21kID09IE1DVV9FWFRfQ01EX0NIQU5ORUxfU1dJVENIKQ0KKwkJcmVxLnJ4 X3N0cmVhbXMgPSBod2VpZ2h0OChyZXEucnhfc3RyZWFtcyk7DQorDQorCWlmIChjaGFuZGVmLT53 aWR0aCA9PSBOTDgwMjExX0NIQU5fV0lEVEhfODBQODApIHsNCisJCWludCBmcmVxMiA9IGNoYW5k ZWYtPmNlbnRlcl9mcmVxMjsNCisNCisJCXJlcS5jZW50ZXJfY2gyID0gaWVlZTgwMjExX2ZyZXF1 ZW5jeV90b19jaGFubmVsKGZyZXEyKTsNCisJfQ0KKw0KKwlyZXR1cm4gX19tdDc2X21jdV9zZW5k X21zZygmZGV2LT5tdDc2LCBjbWQsICZyZXEsIHNpemVvZihyZXEpLCB0cnVlKTsNCit9DQorDQor aW50IG10NzkxNV9tY3Vfc2V0X2VlcHJvbShzdHJ1Y3QgbXQ3OTE1X2RldiAqZGV2KQ0KK3sNCisJ c3RydWN0IHJlcV9oZHIgew0KKwkJdTggYnVmZmVyX21vZGU7DQorCQl1OCBmb3JtYXQ7DQorCQlf X2xlMTYgbGVuOw0KKwl9IF9fcGFja2VkIHJlcSA9IHsNCisJCS5idWZmZXJfbW9kZSA9IEVFX01P REVfRUZVU0UsDQorCQkuZm9ybWF0ID0gRUVfRk9STUFUX1dIT0xFLA0KKwl9Ow0KKw0KKwlyZXR1 cm4gX19tdDc2X21jdV9zZW5kX21zZygmZGV2LT5tdDc2LCBNQ1VfRVhUX0NNRF9FRlVTRV9CVUZG RVJfTU9ERSwNCisJCQkJICAgJnJlcSwgc2l6ZW9mKHJlcSksIHRydWUpOw0KK30NCisNCitpbnQg bXQ3OTE1X21jdV9nZXRfZWVwcm9tKHN0cnVjdCBtdDc5MTVfZGV2ICpkZXYsIHUzMiBvZmZzZXQp DQorew0KKwlzdHJ1Y3QgbXQ3OTE1X21jdV9lZXByb21faW5mbyByZXEgPSB7DQorCQkuYWRkciA9 IGNwdV90b19sZTMyKHJvdW5kX2Rvd24ob2Zmc2V0LCAxNikpLA0KKwl9Ow0KKw0KKwlyZXR1cm4g X19tdDc2X21jdV9zZW5kX21zZygmZGV2LT5tdDc2LCBNQ1VfRVhUX0NNRF9FRlVTRV9BQ0NFU1Ms ICZyZXEsDQorCQkJCSAgIHNpemVvZihyZXEpLCB0cnVlKTsNCit9DQorDQoraW50IG10NzkxNV9t Y3VfZ2V0X3RlbXBlcmF0dXJlKHN0cnVjdCBtdDc5MTVfZGV2ICpkZXYsIGludCBpbmRleCkNCit7 DQorCXN0cnVjdCB7DQorCQl1OCBjdHJsX2lkOw0KKwkJdTggYWN0aW9uOw0KKwkJdTggYmFuZDsN CisJCXU4IHJzdls1XTsNCisJfSByZXEgPSB7DQorCQkuY3RybF9pZCA9IFRIRVJNQUxfU0VOU09S X1RFTVBfUVVFUlksDQorCQkuYWN0aW9uID0gaW5kZXgsDQorCX07DQorDQorCXJldHVybiBfX210 NzZfbWN1X3NlbmRfbXNnKCZkZXYtPm10NzYsIE1DVV9FWFRfQ01EX1RIRVJNQUxfQ1RSTCwgJnJl cSwNCisJCQkJICAgc2l6ZW9mKHJlcSksIHRydWUpOw0KK30NCisNCitpbnQgbXQ3OTE1X21jdV9n ZXRfcmF0ZV9pbmZvKHN0cnVjdCBtdDc5MTVfZGV2ICpkZXYsIHUzMiBjbWQsIHUxNiB3bGFuX2lk eCkNCit7DQorCXN0cnVjdCB7DQorCQlfX2xlMzIgY21kOw0KKwkJX19sZTE2IHdsYW5faWR4Ow0K KwkJX19sZTE2IHJ1X2lkeDsNCisJCV9fbGUxNiBkaXJlY3Rpb247DQorCQlfX2xlMTYgZHVtcF9n cm91cDsNCisJfSByZXEgPSB7DQorCQkuY21kID0gY3B1X3RvX2xlMzIoY21kKSwNCisJCS53bGFu X2lkeCA9IGNwdV90b19sZTE2KHdsYW5faWR4KSwNCisJCS5kdW1wX2dyb3VwID0gY3B1X3RvX2xl MTYoMSksDQorCX07DQorDQorCXJldHVybiBfX210NzZfbWN1X3NlbmRfbXNnKCZkZXYtPm10NzYs IE1DVV9FWFRfQ01EX1JBVEVfQ1RSTCwgJnJlcSwNCisJCQkJICAgc2l6ZW9mKHJlcSksIGZhbHNl KTsNCit9DQorDQoraW50IG10NzkxNV9tY3Vfc2V0X3NlcihzdHJ1Y3QgbXQ3OTE1X2RldiAqZGV2 LCB1OCBhY3Rpb24sIHU4IHNldCwgdTggYmFuZCkNCit7DQorCXN0cnVjdCB7DQorCQl1OCBhY3Rp b247DQorCQl1OCBzZXQ7DQorCQl1OCBiYW5kOw0KKwkJdTggcnN2Ow0KKwl9IHJlcSA9IHsNCisJ CS5hY3Rpb24gPSBhY3Rpb24sDQorCQkuc2V0ID0gc2V0LA0KKwkJLmJhbmQgPSBiYW5kLA0KKwl9 Ow0KKw0KKwlyZXR1cm4gX19tdDc2X21jdV9zZW5kX21zZygmZGV2LT5tdDc2LCBNQ1VfRVhUX0NN RF9TRVRfU0VSX1RSSUdHRVIsDQorCQkJCSAgICZyZXEsIHNpemVvZihyZXEpLCBmYWxzZSk7DQor fQ0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvbXQ3OTE1 L21jdS5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MTUvbWN1LmgN Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0DQppbmRleCAwMDAwMDAwMDAwMDAuLjVlNDcwODg2MWVkZQ0K LS0tIC9kZXYvbnVsbA0KKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9t dDc5MTUvbWN1LmgNCkBAIC0wLDAgKzEsODM3IEBADQorLyogU1BEWC1MaWNlbnNlLUlkZW50aWZp ZXI6IElTQyAqLw0KKy8qIENvcHlyaWdodCAoQykgMjAyMCBNZWRpYVRlayBJbmMuICovDQorDQor I2lmbmRlZiBfX01UNzkxNV9NQ1VfSA0KKyNkZWZpbmUgX19NVDc5MTVfTUNVX0gNCisNCitzdHJ1 Y3QgbXQ3OTE1X21jdV90eGQgew0KKwlfX2xlMzIgdHhkWzhdOw0KKw0KKwlfX2xlMTYgbGVuOw0K KwlfX2xlMTYgcHFfaWQ7DQorDQorCXU4IGNpZDsNCisJdTggcGt0X3R5cGU7DQorCXU4IHNldF9x dWVyeTsgLyogRlcgZG9uJ3QgY2FyZSAqLw0KKwl1OCBzZXE7DQorDQorCXU4IHVjX2QyYjBfcmV2 Ow0KKwl1OCBleHRfY2lkOw0KKwl1OCBzMmRfaW5kZXg7DQorCXU4IGV4dF9jaWRfYWNrOw0KKw0K Kwl1MzIgcmVzZXJ2ZWRbNV07DQorfSBfX3BhY2tlZCBfX2FsaWduZWQoNCk7DQorDQorLyogZXZl bnQgdGFibGUgKi8NCitlbnVtIHsNCisJTUNVX0VWRU5UX1RBUkdFVF9BRERSRVNTX0xFTiA9IDB4 MDEsDQorCU1DVV9FVkVOVF9GV19TVEFSVCA9IDB4MDEsDQorCU1DVV9FVkVOVF9HRU5FUklDID0g MHgwMSwNCisJTUNVX0VWRU5UX0FDQ0VTU19SRUcgPSAweDAyLA0KKwlNQ1VfRVZFTlRfTVRfUEFU Q0hfU0VNID0gMHgwNCwNCisJTUNVX0VWRU5UX0NIX1BSSVZJTEVHRSA9IDB4MTgsDQorCU1DVV9F VkVOVF9FWFQgPSAweGVkLA0KKwlNQ1VfRVZFTlRfUkVTVEFSVF9ETCA9IDB4ZWYsDQorfTsNCisN CisvKiBleHQgZXZlbnQgdGFibGUgKi8NCitlbnVtIHsNCisJTUNVX0VYVF9FVkVOVF9QU19TWU5D ID0gMHg1LA0KKwlNQ1VfRVhUX0VWRU5UX1RIRVJNQUxfUFJPVEVDVCA9IDB4MjIsDQorCU1DVV9F WFRfRVZFTlRfQVNTRVJUX0RVTVAgPSAweDIzLA0KKwlNQ1VfRVhUX0VWRU5UX1JERF9SRVBPUlQg PSAweDNhLA0KKwlNQ1VfRVhUX0VWRU5UX0NTQV9OT1RJRlkgPSAweDRmLA0KKwlNQ1VfRVhUX0VW RU5UX1JBVEVfUkVQT1JUID0gMHg4NywNCit9Ow0KKw0KK3N0cnVjdCBtdDc5MTVfbWN1X3J4ZCB7 DQorCV9fbGUzMiByeGRbNl07DQorDQorCV9fbGUxNiBsZW47DQorCV9fbGUxNiBwa3RfdHlwZV9p ZDsNCisNCisJdTggZWlkOw0KKwl1OCBzZXE7DQorCV9fbGUxNiBfX3JzdjsNCisNCisJdTggZXh0 X2VpZDsNCisJdTggX19yc3YxWzJdOw0KKwl1OCBzMmRfaW5kZXg7DQorfTsNCisNCitzdHJ1Y3Qg bXQ3OTE1X21jdV9yZGRfcmVwb3J0IHsNCisJc3RydWN0IG10NzkxNV9tY3VfcnhkIHJ4ZDsNCisN CisJdTggaWR4Ow0KKwl1OCBsb25nX2RldGVjdGVkOw0KKwl1OCBjb25zdGFudF9wcmZfZGV0ZWN0 ZWQ7DQorCXU4IHN0YWdnZXJlZF9wcmZfZGV0ZWN0ZWQ7DQorCXU4IHJhZGFyX3R5cGVfaWR4Ow0K Kwl1OCBwZXJpb2RpY19wdWxzZV9udW07DQorCXU4IGxvbmdfcHVsc2VfbnVtOw0KKwl1OCBod19w dWxzZV9udW07DQorDQorCXU4IG91dF9scG47DQorCXU4IG91dF9zcG47DQorCXU4IG91dF9jcnBu Ow0KKwl1OCBvdXRfY3JwdzsNCisJdTggb3V0X2NyYm47DQorCXU4IG91dF9zdGdwbjsNCisJdTgg b3V0X3N0Z3B3Ow0KKw0KKwl1OCByc3Y7DQorDQorCV9fbGUzMiBvdXRfcHJpX2NvbnN0Ow0KKwlf X2xlMzIgb3V0X3ByaV9zdGdbM107DQorDQorCXN0cnVjdCB7DQorCQlfX2xlMzIgc3RhcnQ7DQor CQlfX2xlMTYgcHVsc2Vfd2lkdGg7DQorCQlfX2xlMTYgcHVsc2VfcG93ZXI7DQorCQl1OCBtZHJk eV9mbGFnOw0KKwkJdTggcnN2WzNdOw0KKwl9IGxvbmdfcHVsc2VbMzJdOw0KKw0KKwlzdHJ1Y3Qg ew0KKwkJX19sZTMyIHN0YXJ0Ow0KKwkJX19sZTE2IHB1bHNlX3dpZHRoOw0KKwkJX19sZTE2IHB1 bHNlX3Bvd2VyOw0KKwkJdTggbWRyZHlfZmxhZzsNCisJCXU4IHJzdlszXTsNCisJfSBwZXJpb2Rp Y19wdWxzZVszMl07DQorDQorCXN0cnVjdCB7DQorCQlfX2xlMzIgc3RhcnQ7DQorCQlfX2xlMTYg cHVsc2Vfd2lkdGg7DQorCQlfX2xlMTYgcHVsc2VfcG93ZXI7DQorCQl1OCBzY19wYXNzOw0KKwkJ dTggc3dfcmVzZXQ7DQorCQl1OCBtZHJkeV9mbGFnOw0KKwkJdTggdHhfYWN0aXZlOw0KKwl9IGh3 X3B1bHNlWzMyXTsNCit9IF9fcGFja2VkOw0KKw0KK3N0cnVjdCBtdDc5MTVfbWN1X2VlcHJvbV9p bmZvIHsNCisJX19sZTMyIGFkZHI7DQorCV9fbGUzMiB2YWxpZDsNCisJdTggZGF0YVsxNl07DQor fSBfX3BhY2tlZDsNCisNCitzdHJ1Y3QgbXQ3OTE1X21jdV9yYV9pbmZvIHsNCisJc3RydWN0IG10 NzkxNV9tY3VfcnhkIHJ4ZDsNCisNCisJX19sZTMyIGV2ZW50X2lkOw0KKwlfX2xlMTYgd2xhbl9p ZHg7DQorCV9fbGUxNiBydV9pZHg7DQorCV9fbGUxNiBkaXJlY3Rpb247DQorCV9fbGUxNiBkdW1w X2dyb3VwOw0KKw0KKwlfX2xlMzIgc3VnZ2VzdF9yYXRlOw0KKwlfX2xlMzIgbWluX3JhdGU7CS8q IGZvciBkeW5hbWljIHNvdW5kaW5nICovDQorCV9fbGUzMiBtYXhfcmF0ZTsJLyogZm9yIGR5bmFt aWMgc291bmRpbmcgKi8NCisJX19sZTMyIGluaXRfcmF0ZV9kb3duX3JhdGU7DQorDQorCV9fbGUx NiBjdXJyX3JhdGU7DQorCV9fbGUxNiBpbml0X3JhdGVfZG93bl90b3RhbDsNCisJX19sZTE2IGlu aXRfcmF0ZV9kb3duX3N1Y2M7DQorCV9fbGUxNiBzdWNjZXNzOw0KKwlfX2xlMTYgYXR0ZW1wdHM7 DQorDQorCV9fbGUxNiBwcmV2X3JhdGU7DQorCV9fbGUxNiBwcm9iX3VwX3JhdGU7DQorCXU4IG5v X3JhdGVfdXBfY250Ow0KKwl1OCBwcGR1X2NudDsNCisJdTggZ2k7DQorDQorCXU4IHRyeV91cF9m YWlsOw0KKwl1OCB0cnlfdXBfdG90YWw7DQorCXU4IHN1Z2dlc3Rfd2Y7DQorCXU4IHRyeV91cF9j aGVjazsNCisJdTggcHJvYl91cF9wZXJpb2Q7DQorCXU4IHByb2JfZG93bl9wZW5kaW5nOw0KK30g X19wYWNrZWQ7DQorDQorI2RlZmluZSBNVF9SQV9SQVRFX05TUwkJCUdFTk1BU0soOCwgNikNCisj ZGVmaW5lIE1UX1JBX1JBVEVfTUNTCQkJR0VOTUFTSygzLCAwKQ0KKyNkZWZpbmUgTVRfUkFfUkFU RV9UWF9NT0RFCQlHRU5NQVNLKDEyLCA5KQ0KKyNkZWZpbmUgTVRfUkFfUkFURV9EQ01fRU4JCUJJ VCg0KQ0KKyNkZWZpbmUgTVRfUkFfUkFURV9CVwkJCUdFTk1BU0soMTQsIDEzKQ0KKw0KKyNkZWZp bmUgTUNVX1BRX0lEKHAsIHEpCQkJKCgocCkgPDwgMTUpIHwgKChxKSA8PCAxMCkpDQorI2RlZmlu ZSBNQ1VfUEtUX0lECQkJMHhhMA0KKw0KK2VudW0gew0KKwlNQ1VfUV9RVUVSWSwNCisJTUNVX1Ff U0VULA0KKwlNQ1VfUV9SRVNFUlZFRCwNCisJTUNVX1FfTkENCit9Ow0KKw0KK2VudW0gew0KKwlN Q1VfUzJEX0gyTiwNCisJTUNVX1MyRF9DMk4sDQorCU1DVV9TMkRfSDJDLA0KKwlNQ1VfUzJEX0gy Q04NCit9Ow0KKw0KK2VudW0gew0KKwlNQ1VfQ01EX1RBUkdFVF9BRERSRVNTX0xFTl9SRVEgPSAw eDAxLA0KKwlNQ1VfQ01EX0ZXX1NUQVJUX1JFUSA9IDB4MDIsDQorCU1DVV9DTURfSU5JVF9BQ0NF U1NfUkVHID0gMHgzLA0KKwlNQ1VfQ01EX05JQ19QT1dFUl9DVFJMID0gMHg0LA0KKwlNQ1VfQ01E X1BBVENIX1NUQVJUX1JFUSA9IDB4MDUsDQorCU1DVV9DTURfUEFUQ0hfRklOSVNIX1JFUSA9IDB4 MDcsDQorCU1DVV9DTURfUEFUQ0hfU0VNX0NPTlRST0wgPSAweDEwLA0KKwlNQ1VfQ01EX0VYVF9D SUQgPSAweEVELA0KKwlNQ1VfQ01EX0ZXX1NDQVRURVIgPSAweEVFLA0KKwlNQ1VfQ01EX1JFU1RB UlRfRExfUkVRID0gMHhFRiwNCit9Ow0KKw0KK2VudW0gew0KKwlNQ1VfRVhUX0NNRF9FRlVTRV9B Q0NFU1MgPSAweDAxLA0KKwlNQ1VfRVhUX0NNRF9QTV9TVEFURV9DVFJMID0gMHgwNywNCisJTUNV X0VYVF9DTURfQ0hBTk5FTF9TV0lUQ0ggPSAweDA4LA0KKwlNQ1VfRVhUX0NNRF9FRlVTRV9CVUZG RVJfTU9ERSA9IDB4MjEsDQorCU1DVV9FWFRfQ01EX1NUQV9SRUNfVVBEQVRFID0gMHgyNSwNCisJ TUNVX0VYVF9DTURfQlNTX0lORk9fVVBEQVRFID0gMHgyNiwNCisJTUNVX0VYVF9DTURfRURDQV9V UERBVEUgPSAweDI3LA0KKwlNQ1VfRVhUX0NNRF9ERVZfSU5GT19VUERBVEUgPSAweDJBLA0KKwlN Q1VfRVhUX0NNRF9USEVSTUFMX0NUUkwgPSAweDJjLA0KKwlNQ1VfRVhUX0NNRF9TRVRfUkREX0NU UkwgPSAweDNhLA0KKwlNQ1VfRVhUX0NNRF9QUk9URUNUX0NUUkwgPSAweDNlLA0KKwlNQ1VfRVhU X0NNRF9NQUNfSU5JVF9DVFJMID0gMHg0NiwNCisJTUNVX0VYVF9DTURfUlhfSERSX1RSQU5TID0g MHg0NywNCisJTUNVX0VYVF9DTURfU0VUX1JYX1BBVEggPSAweDRlLA0KKwlNQ1VfRVhUX0NNRF9T RVRfU0VSX1RSSUdHRVIgPSAweDgxLA0KKwlNQ1VfRVhUX0NNRF9TQ1NfQ1RSTCA9IDB4ODIsDQor CU1DVV9FWFRfQ01EX1JBVEVfQ1RSTCA9IDB4ODcsDQorCU1DVV9FWFRfQ01EX1NFVF9SRERfVEgg PSAweDlkLA0KK307DQorDQorZW51bSB7DQorCVBBVENIX1NFTV9SRUxFQVNFLA0KKwlQQVRDSF9T RU1fR0VUDQorfTsNCisNCitlbnVtIHsNCisJUEFUQ0hfTk9UX0RMX1NFTV9GQUlMLA0KKwlQQVRD SF9JU19ETCwNCisJUEFUQ0hfTk9UX0RMX1NFTV9TVUNDRVNTLA0KKwlQQVRDSF9SRUxfU0VNX1NV Q0NFU1MNCit9Ow0KKw0KK2VudW0gew0KKwlGV19TVEFURV9JTklUSUFMLA0KKwlGV19TVEFURV9G V19ET1dOTE9BRCwNCisJRldfU1RBVEVfTk9STUFMX09QRVJBVElPTiwNCisJRldfU1RBVEVfTk9S TUFMX1RSWCwNCisJRldfU1RBVEVfV0FDUFVfUkRZICAgICAgICA9IDcNCit9Ow0KKw0KK2VudW0g ew0KKwlFRV9NT0RFX0VGVVNFLA0KKwlFRV9NT0RFX0JVRkZFUiwNCit9Ow0KKw0KK2VudW0gew0K KwlFRV9GT1JNQVRfQklOLA0KKwlFRV9GT1JNQVRfV0hPTEUsDQorCUVFX0ZPUk1BVF9NVUxUSVBM RSwNCit9Ow0KKw0KKyNkZWZpbmUgU1RBX1RZUEVfU1RBCQkJQklUKDApDQorI2RlZmluZSBTVEFf VFlQRV9BUAkJCUJJVCgxKQ0KKyNkZWZpbmUgU1RBX1RZUEVfQURIT0MJCQlCSVQoMikNCisjZGVm aW5lIFNUQV9UWVBFX1dEUwkJCUJJVCg0KQ0KKyNkZWZpbmUgU1RBX1RZUEVfQkMJCQlCSVQoNSkN CisNCisjZGVmaW5lIE5FVFdPUktfSU5GUkEJCQlCSVQoMTYpDQorI2RlZmluZSBORVRXT1JLX1Ay UAkJCUJJVCgxNykNCisjZGVmaW5lIE5FVFdPUktfSUJTUwkJCUJJVCgxOCkNCisjZGVmaW5lIE5F VFdPUktfV0RTCQkJQklUKDIxKQ0KKw0KKyNkZWZpbmUgQ09OTkVDVElPTl9JTkZSQV9TVEEJCShT VEFfVFlQRV9TVEEgfCBORVRXT1JLX0lORlJBKQ0KKyNkZWZpbmUgQ09OTkVDVElPTl9JTkZSQV9B UAkJKFNUQV9UWVBFX0FQIHwgTkVUV09SS19JTkZSQSkNCisjZGVmaW5lIENPTk5FQ1RJT05fUDJQ X0dDCQkoU1RBX1RZUEVfU1RBIHwgTkVUV09SS19QMlApDQorI2RlZmluZSBDT05ORUNUSU9OX1Ay UF9HTwkJKFNUQV9UWVBFX0FQIHwgTkVUV09SS19QMlApDQorI2RlZmluZSBDT05ORUNUSU9OX0lC U1NfQURIT0MJCShTVEFfVFlQRV9BREhPQyB8IE5FVFdPUktfSUJTUykNCisjZGVmaW5lIENPTk5F Q1RJT05fV0RTCQkJKFNUQV9UWVBFX1dEUyB8IE5FVFdPUktfV0RTKQ0KKyNkZWZpbmUgQ09OTkVD VElPTl9JTkZSQV9CQwkJKFNUQV9UWVBFX0JDIHwgTkVUV09SS19JTkZSQSkNCisNCisjZGVmaW5l IENPTk5fU1RBVEVfRElTQ09OTkVDVAkJMA0KKyNkZWZpbmUgQ09OTl9TVEFURV9DT05ORUNUCQkx DQorI2RlZmluZSBDT05OX1NUQVRFX1BPUlRfU0VDVVJFCQkyDQorDQorZW51bSB7DQorCURFVl9J TkZPX0FDVElWRSwNCisJREVWX0lORk9fTUFYX05VTQ0KK307DQorDQorZW51bSB7DQorCVNDU19T RU5EX0RBVEEsDQorCVNDU19TRVRfTUFOVUFMX1BEX1RILA0KKwlTQ1NfQ09ORklHLA0KKwlTQ1Nf RU5BQkxFLA0KKwlTQ1NfU0hPV19JTkZPLA0KKwlTQ1NfR0VUX0dMT19BRERSLA0KKwlTQ1NfR0VU X0dMT19BRERSX0VWRU5ULA0KK307DQorDQorZW51bSB7DQorCUNNRF9DQldfMjBNSFogPSBJRUVF ODAyMTFfU1RBX1JYX0JXXzIwLA0KKwlDTURfQ0JXXzQwTUhaID0gSUVFRTgwMjExX1NUQV9SWF9C V180MCwNCisJQ01EX0NCV184ME1IWiA9IElFRUU4MDIxMV9TVEFfUlhfQldfODAsDQorCUNNRF9D QldfMTYwTUhaID0gSUVFRTgwMjExX1NUQV9SWF9CV18xNjAsDQorCUNNRF9DQldfMTBNSFosDQor CUNNRF9DQldfNU1IWiwNCisJQ01EX0NCV184MDgwTUhaLA0KKw0KKwlDTURfSEVfTUNTX0JXODAg PSAwLA0KKwlDTURfSEVfTUNTX0JXMTYwLA0KKwlDTURfSEVfTUNTX0JXODA4MCwNCisJQ01EX0hF X01DU19CV19OVU0NCit9Ow0KKw0KK3N0cnVjdCB0bHYgew0KKwlfX2xlMTYgdGFnOw0KKwlfX2xl MTYgbGVuOw0KK30gX19wYWNrZWQ7DQorDQorc3RydWN0IGJzc19pbmZvX29tYWMgew0KKwlfX2xl MTYgdGFnOw0KKwlfX2xlMTYgbGVuOw0KKwl1OCBod19ic3NfaWR4Ow0KKwl1OCBvbWFjX2lkeDsN CisJdTggYmFuZF9pZHg7DQorCXU4IHJzdjA7DQorCV9fbGUzMiBjb25uX3R5cGU7DQorCXUzMiBy c3YxOw0KK30gX19wYWNrZWQ7DQorDQorc3RydWN0IGJzc19pbmZvX2Jhc2ljIHsNCisJX19sZTE2 IHRhZzsNCisJX19sZTE2IGxlbjsNCisJX19sZTMyIG5ldHdvcmtfdHlwZTsNCisJdTggYWN0aXZl Ow0KKwl1OCByc3YwOw0KKwlfX2xlMTYgYmNuX2ludGVydmFsOw0KKwl1OCBic3NpZFtFVEhfQUxF Tl07DQorCXU4IHdtbV9pZHg7DQorCXU4IGR0aW1fcGVyaW9kOw0KKwl1OCBibWNfd2NpZF9sbzsN CisJdTggY2lwaGVyOw0KKwl1OCBwaHlfbW9kZTsNCisJdTggbWF4X2Jzc2lkOwkvKiBtYXggQlNT SUQuIHJhbmdlOiAxIH4gOCwgMDogTUJTU0lEIGRpc2FibGVkICovDQorCXU4IG5vbl90eF9ic3Np ZDsvKiBub24tdHJhbnNtaXR0ZWQgQlNTSUQsIDA6IHRyYW5zbWl0dGVkIEJTU0lEICovDQorCXU4 IGJtY193Y2lkX2hpOwkvKiBoaWdoIEJ5dGUgYW5kIHZlcnNpb24gKi8NCisJdTggcnN2WzJdOw0K K30gX19wYWNrZWQ7DQorDQorc3RydWN0IGJzc19pbmZvX3JmX2NoIHsNCisJX19sZTE2IHRhZzsN CisJX19sZTE2IGxlbjsNCisJdTggcHJpX2NoOw0KKwl1OCBjZW50ZXJfY2gwOw0KKwl1OCBjZW50 ZXJfY2gxOw0KKwl1OCBidzsNCisJdTggaGVfcnUyNl9ibG9jazsJLyogMTogZG9uJ3Qgc2VuZCBI RVRCIGluIFJVMjYsIDA6IGFsbG93ICovDQorCXU4IGhlX2FsbF9kaXNhYmxlOwkvKiAxOiBkaXNh bGxvdyBhbGwgSEVUQiwgMDogYWxsb3cgKi8NCisJdTggcnN2WzJdOw0KK30gX19wYWNrZWQ7DQor DQorc3RydWN0IGJzc19pbmZvX2V4dF9ic3Mgew0KKwlfX2xlMTYgdGFnOw0KKwlfX2xlMTYgbGVu Ow0KKwlfX2xlMzIgbWJzc190c2Zfb2Zmc2V0OyAvKiBpbiB1bml0IG9mIHVzICovDQorCXU4IHJz dls4XTsNCit9IF9fcGFja2VkOw0KKw0KK3N0cnVjdCBic3NfaW5mb19zeW5jX21vZGUgew0KKwlf X2xlMTYgdGFnOw0KKwlfX2xlMTYgbGVuOw0KKwlfX2xlMTYgYmNuX2ludGVydmFsOw0KKwl1OCBl bmFibGU7DQorCXU4IGR0aW1fcGVyaW9kOw0KKwl1OCByc3ZbOF07DQorfSBfX3BhY2tlZDsNCisN CitzdHJ1Y3QgYnNzX2luZm9fYm1jX3JhdGUgew0KKwlfX2xlMTYgdGFnOw0KKwlfX2xlMTYgbGVu Ow0KKwlfX2xlMTYgYmNfdHJhbnM7DQorCV9fbGUxNiBtY190cmFuczsNCisJdTggc2hvcnRfcHJl YW1ibGU7DQorCXU4IHJzdls3XTsNCit9IF9fcGFja2VkOw0KKw0KK3N0cnVjdCBic3NfaW5mb19y YSB7DQorCV9fbGUxNiB0YWc7DQorCV9fbGUxNiBsZW47DQorCXU4IG9wX21vZGU7DQorCXU4IGFk aG9jX2VuOw0KKwl1OCBzaG9ydF9wcmVhbWJsZTsNCisJdTggdHhfc3RyZWFtczsNCisJdTggcnhf c3RyZWFtczsNCisJdTggYWxnbzsNCisJdTggZm9yY2Vfc2dpOw0KKwl1OCBmb3JjZV9nZjsNCisJ dTggaHRfbW9kZTsNCisJdTggaGFzXzIwX3N0YTsJCS8qIENoZWNrIGlmIGFueSBzdGEgc3VwcG9y dCBHRi4gKi8NCisJdTggYnNzX3dpZHRoX3RyaWdnZXJfZXZlbnRzOw0KKwl1OCB2aHRfbnNzX2Nh cDsNCisJdTggdmh0X2J3X3NpZ25hbDsJLyogbm90IHVzZSAqLw0KKwl1OCB2aHRfZm9yY2Vfc2dp OwkvKiBub3QgdXNlICovDQorCXU4IHNlX29mZjsNCisJdTggYW50ZW5uYV9pZHg7DQorCXU4IHRy YWluX3VwX3J1bGU7DQorCXU4IHJzdlszXTsNCisJdW5zaWduZWQgc2hvcnQgdHJhaW5fdXBfaGln aF90aHJlczsNCisJc2hvcnQgdHJhaW5fdXBfcnVsZV9yc3NpOw0KKwl1bnNpZ25lZCBzaG9ydCBs b3dfdHJhZmZpY190aHJlczsNCisJX19sZTE2IG1heF9waHlyYXRlOw0KKwlfX2xlMzIgcGh5X2Nh cDsNCisJX19sZTMyIGludGVydmFsOw0KKwlfX2xlMzIgZmFzdF9pbnRlcnZhbDsNCit9IF9fcGFj a2VkOw0KKw0KK3N0cnVjdCBic3NfaW5mb19iY24gew0KKwlfX2xlMTYgdGFnOw0KKwlfX2xlMTYg bGVuOw0KKwl1OCB2ZXI7DQorCXU4IGVuYWJsZTsNCisJX19sZTE2IHN1Yl9udGx2Ow0KK30gX19w YWNrZWQgX19hbGlnbmVkKDQpOw0KKw0KK3N0cnVjdCBic3NfaW5mb19iY25fY3NhIHsNCisJX19s ZTE2IHRhZzsNCisJX19sZTE2IGxlbjsNCisJdTggY250Ow0KKwl1OCByc3ZbM107DQorfSBfX3Bh Y2tlZCBfX2FsaWduZWQoNCk7DQorDQorc3RydWN0IGJzc19pbmZvX2Jjbl9iY2Mgew0KKwlfX2xl MTYgdGFnOw0KKwlfX2xlMTYgbGVuOw0KKwl1OCBjbnQ7DQorCXU4IHJzdlszXTsNCit9IF9fcGFj a2VkIF9fYWxpZ25lZCg0KTsNCisNCitzdHJ1Y3QgYnNzX2luZm9fYmNuX21ic3Mgew0KKyNkZWZp bmUgTUFYX0JFQUNPTl9OVU0JMzINCisJX19sZTE2IHRhZzsNCisJX19sZTE2IGxlbjsNCisJX19s ZTMyIGJpdG1hcDsNCisJX19sZTE2IG9mZnNldFtNQVhfQkVBQ09OX05VTV07DQorCXU4IHJzdls4 XTsNCit9IF9fcGFja2VkIF9fYWxpZ25lZCg0KTsNCisNCitzdHJ1Y3QgYnNzX2luZm9fYmNuX2Nv bnQgew0KKwlfX2xlMTYgdGFnOw0KKwlfX2xlMTYgbGVuOw0KKwlfX2xlMTYgdGltX29mczsNCisJ X19sZTE2IGNzYV9vZnM7DQorCV9fbGUxNiBiY2Nfb2ZzOw0KKwlfX2xlMTYgcGt0X2xlbjsNCit9 IF9fcGFja2VkIF9fYWxpZ25lZCg0KTsNCisNCitlbnVtIHsNCisJQlNTX0lORk9fQkNOX0NTQSwN CisJQlNTX0lORk9fQkNOX0JDQywNCisJQlNTX0lORk9fQkNOX01CU1NJRCwNCisJQlNTX0lORk9f QkNOX0NPTlRFTlQsDQorCUJTU19JTkZPX0JDTl9NQVgNCit9Ow0KKw0KK2VudW0gew0KKwlCU1Nf SU5GT19PTUFDLA0KKwlCU1NfSU5GT19CQVNJQywNCisJQlNTX0lORk9fUkZfQ0gsCQkvKiBvcHRp b25hbCwgZm9yIEJUL0xURSBjb2V4ICovDQorCUJTU19JTkZPX1BNLAkJLyogc3RhIG9ubHkgKi8N CisJQlNTX0lORk9fVUFQU0QsCQkvKiBzdGEgb25seSAqLw0KKwlCU1NfSU5GT19ST0FNX0RFVEVD VCwJLyogb2Jzb2xldGVkICovDQorCUJTU19JTkZPX0xRX1JNLAkJLyogb2Jzb2xldGVkICovDQor CUJTU19JTkZPX0VYVF9CU1MsDQorCUJTU19JTkZPX0JNQ19SQVRFLAkvKiBmb3IgYm1jIHJhdGUg Y29udHJvbCBpbiBDUjQgKi8NCisJQlNTX0lORk9fU1lOQ19NT0RFLA0KKwlCU1NfSU5GT19SQSwN CisJQlNTX0lORk9fSFdfQU1TRFUsDQorCUJTU19JTkZPX0JTU19DT0xPUiwNCisJQlNTX0lORk9f SEVfQkFTSUMsDQorCUJTU19JTkZPX1BST1RFQ1RfSU5GTywNCisJQlNTX0lORk9fT0ZGTE9BRCwN CisJQlNTX0lORk9fMTFWX01CU1NJRCwNCisJQlNTX0lORk9fTUFYX05VTQ0KK307DQorDQorZW51 bSB7DQorCVdUQkxfUkVTRVRfQU5EX1NFVCA9IDEsDQorCVdUQkxfU0VULA0KKwlXVEJMX1FVRVJZ LA0KKwlXVEJMX1JFU0VUX0FMTA0KK307DQorDQorc3RydWN0IHd0YmxfcmVxX2hkciB7DQorCXU4 IHdsYW5faWR4X2xvOw0KKwl1OCBvcGVyYXRpb247DQorCV9fbGUxNiB0bHZfbnVtOw0KKwl1OCB3 bGFuX2lkeF9oaTsNCisJdTggcnN2WzNdOw0KK30gX19wYWNrZWQ7DQorDQorc3RydWN0IHd0Ymxf Z2VuZXJpYyB7DQorCV9fbGUxNiB0YWc7DQorCV9fbGUxNiBsZW47DQorCXU4IHBlZXJfYWRkcltF VEhfQUxFTl07DQorCXU4IG11YXJfaWR4Ow0KKwl1OCBza2lwX3R4Ow0KKwl1OCBjZl9hY2s7DQor CXU4IHFvczsNCisJdTggbWVzaDsNCisJdTggYWRtOw0KKwlfX2xlMTYgcGFydGlhbF9haWQ7DQor CXU4IGJhZl9lbjsNCisJdTggYWFkX29tOw0KK30gX19wYWNrZWQ7DQorDQorc3RydWN0IHd0Ymxf cnggew0KKwlfX2xlMTYgdGFnOw0KKwlfX2xlMTYgbGVuOw0KKwl1OCByY2lkOw0KKwl1OCByY2Ex Ow0KKwl1OCByY2EyOw0KKwl1OCBydjsNCisJdTggcnN2WzRdOw0KK30gX19wYWNrZWQ7DQorDQor c3RydWN0IHd0YmxfaHQgew0KKwlfX2xlMTYgdGFnOw0KKwlfX2xlMTYgbGVuOw0KKwl1OCBodDsN CisJdTggbGRwYzsNCisJdTggYWY7DQorCXU4IG1tOw0KKwl1OCByc3ZbNF07DQorfSBfX3BhY2tl ZDsNCisNCitzdHJ1Y3Qgd3RibF92aHQgew0KKwlfX2xlMTYgdGFnOw0KKwlfX2xlMTYgbGVuOw0K Kwl1OCBsZHBjOw0KKwl1OCBkeW5fYnc7DQorCXU4IHZodDsNCisJdTggdHhvcF9wczsNCisJdTgg cnN2WzRdOw0KK30gX19wYWNrZWQ7DQorDQorZW51bSB7DQorCU1UX0JBX1RZUEVfSU5WQUxJRCwN CisJTVRfQkFfVFlQRV9PUklHSU5BVE9SLA0KKwlNVF9CQV9UWVBFX1JFQ0lQSUVOVA0KK307DQor DQorZW51bSB7DQorCVJTVF9CQV9NQUNfVElEX01BVENILA0KKwlSU1RfQkFfTUFDX01BVENILA0K KwlSU1RfQkFfTk9fTUFUQ0gNCit9Ow0KKw0KK3N0cnVjdCB3dGJsX2JhIHsNCisJX19sZTE2IHRh ZzsNCisJX19sZTE2IGxlbjsNCisJLyogY29tbW9uICovDQorCXU4IHRpZDsNCisJdTggYmFfdHlw ZTsNCisJdTggcnN2MFsyXTsNCisJLyogb3JpZ2luYXRvciBvbmx5ICovDQorCV9fbGUxNiBzbjsN CisJdTggYmFfZW47DQorCXU4IGJhX3dpbnNpemVfaWR4Ow0KKwlfX2xlMTYgYmFfd2luc2l6ZTsN CisJLyogcmVjaXBpZW50IG9ubHkgKi8NCisJdTggcGVlcl9hZGRyW0VUSF9BTEVOXTsNCisJdTgg cnN0X2JhX3RpZDsNCisJdTggcnN0X2JhX3NlbDsNCisJdTggcnN0X2JhX3NiOw0KKwl1OCBiYW5k X2lkeDsNCisJdTggcnN2MVs0XTsNCit9IF9fcGFja2VkOw0KKw0KK3N0cnVjdCB3dGJsX2JmIHsN CisJX19sZTE2IHRhZzsNCisJX19sZTE2IGxlbjsNCisJdTggaWJmOw0KKwl1OCBlYmY7DQorCXU4 IGliZl92aHQ7DQorCXU4IGViZl92aHQ7DQorCXU4IGdpZDsNCisJdTggcGZtdV9pZHg7DQorCXU4 IHJzdlsyXTsNCit9IF9fcGFja2VkOw0KKw0KK3N0cnVjdCB3dGJsX3NtcHMgew0KKwlfX2xlMTYg dGFnOw0KKwlfX2xlMTYgbGVuOw0KKwl1OCBzbXBzOw0KKwl1OCByc3ZbM107DQorfSBfX3BhY2tl ZDsNCisNCitzdHJ1Y3Qgd3RibF9zcGUgew0KKwlfX2xlMTYgdGFnOw0KKwlfX2xlMTYgbGVuOw0K Kwl1OCBzcGVfaWR4Ow0KKwl1OCByc3ZbM107DQorfSBfX3BhY2tlZDsNCisNCitlbnVtIHsNCisJ V1RCTF9HRU5FUklDLA0KKwlXVEJMX1JYLA0KKwlXVEJMX0hULA0KKwlXVEJMX1ZIVCwNCisJV1RC TF9QRUVSX1BTLAkJLyogbm90IHVzZWQgKi8NCisJV1RCTF9UWF9QUywNCisJV1RCTF9IRFJfVFJB TlMsDQorCVdUQkxfU0VDX0tFWSwNCisJV1RCTF9CQSwNCisJV1RCTF9SREcsCQkvKiBvYnNvbGV0 ZWQgKi8NCisJV1RCTF9QUk9URUNULAkJLyogbm90IHVzZWQgKi8NCisJV1RCTF9DTEVBUiwJCS8q IG5vdCB1c2VkICovDQorCVdUQkxfQkYsDQorCVdUQkxfU01QUywNCisJV1RCTF9SQVdfREFUQSwJ CS8qIGRlYnVnIG9ubHkgKi8NCisJV1RCTF9QTiwNCisJV1RCTF9TUEUsDQorCVdUQkxfTUFYX05V TQ0KK307DQorDQorc3RydWN0IHN0YV9udGx2X2hkciB7DQorCXU4IHJzdlsyXTsNCisJX19sZTE2 IHRsdl9udW07DQorfSBfX3BhY2tlZDsNCisNCitzdHJ1Y3Qgc3RhX3JlcV9oZHIgew0KKwl1OCBi c3NfaWR4Ow0KKwl1OCB3bGFuX2lkeF9sbzsNCisJX19sZTE2IHRsdl9udW07DQorCXU4IGlzX3Rs dl9hcHBlbmQ7DQorCXU4IG11YXJfaWR4Ow0KKwl1OCB3bGFuX2lkeF9oaTsNCisJdTggcnN2Ow0K K30gX19wYWNrZWQ7DQorDQorc3RydWN0IHN0YV9yZWNfYmFzaWMgew0KKwlfX2xlMTYgdGFnOw0K KwlfX2xlMTYgbGVuOw0KKwlfX2xlMzIgY29ubl90eXBlOw0KKwl1OCBjb25uX3N0YXRlOw0KKwl1 OCBxb3M7DQorCV9fbGUxNiBhaWQ7DQorCXU4IHBlZXJfYWRkcltFVEhfQUxFTl07DQorCV9fbGUx NiBleHRyYV9pbmZvOw0KK30gX19wYWNrZWQ7DQorDQorc3RydWN0IHN0YV9yZWNfaHQgew0KKwlf X2xlMTYgdGFnOw0KKwlfX2xlMTYgbGVuOw0KKwlfX2xlMTYgaHRfY2FwOw0KKwl1MTYgcnN2Ow0K K30gX19wYWNrZWQ7DQorDQorc3RydWN0IHN0YV9yZWNfdmh0IHsNCisJX19sZTE2IHRhZzsNCisJ X19sZTE2IGxlbjsNCisJX19sZTMyIHZodF9jYXA7DQorCV9fbGUxNiB2aHRfcnhfbWNzX21hcDsN CisJX19sZTE2IHZodF90eF9tY3NfbWFwOw0KKwl1OCBydHNfYndfc2lnOw0KKwl1OCByc3ZbM107 DQorfSBfX3BhY2tlZDsNCisNCitzdHJ1Y3Qgc3RhX3JlY19iYSB7DQorCV9fbGUxNiB0YWc7DQor CV9fbGUxNiBsZW47DQorCXU4IHRpZDsNCisJdTggYmFfdHlwZTsNCisJdTggYW1zZHU7DQorCXU4 IGJhX2VuOw0KKwlfX2xlMTYgc3NuOw0KKwlfX2xlMTYgd2luc2l6ZTsNCit9IF9fcGFja2VkOw0K Kw0KK3N0cnVjdCBzZWNfa2V5IHsNCisJdTggY2lwaGVyX2lkOw0KKwl1OCBjaXBoZXJfbGVuOw0K Kwl1OCBrZXlfaWQ7DQorCXU4IGtleV9sZW47DQorCXU4IGtleVszMl07DQorfSBfX3BhY2tlZDsN CisNCitzdHJ1Y3Qgc3RhX3JlY19zZWMgew0KKwlfX2xlMTYgdGFnOw0KKwlfX2xlMTYgbGVuOw0K Kwl1OCBhZGQ7DQorCXU4IG5fY2lwaGVyOw0KKwl1OCByc3ZbMl07DQorDQorCXN0cnVjdCBzZWNf a2V5IGtleVsyXTsNCit9IF9fcGFja2VkOw0KKw0KK3N0cnVjdCByYV9waHkgew0KKwl1OCB0eXBl Ow0KKwl1OCBmbGFnOw0KKwl1OCBzdGJjOw0KKwl1OCBzZ2k7DQorCXU4IGJ3Ow0KKwl1OCBsZHBj Ow0KKwl1OCBtY3M7DQorCXU4IG5zczsNCisJdTggaGVfbHRmOw0KK307DQorDQorc3RydWN0IHN0 YV9yZWNfcmEgew0KKwlfX2xlMTYgdGFnOw0KKwlfX2xlMTYgbGVuOw0KKw0KKwl1OCB2YWxpZDsN CisJdTggYXV0b19yYXRlOw0KKwl1OCBwaHlfbW9kZTsNCisJdTggY2hhbm5lbDsNCisJdTggYnc7 DQorCXU4IGRpc2FibGVfY2NrOw0KKwl1OCBodF9tY3MzMjsNCisJdTggaHRfZ2Y7DQorCXU4IGh0 X21jc1s0XTsNCisJdTggbW1wc19tb2RlOw0KKwl1OCBnYmFuZF8yNTY7DQorCXU4IGFmOw0KKwl1 OCBhdXRoX3dhcGlfbW9kZTsNCisJdTggcmF0ZV9sZW47DQorDQorCXU4IHN1cHBfbW9kZTsNCisJ dTggc3VwcF9jY2tfcmF0ZTsNCisJdTggc3VwcF9vZmRtX3JhdGU7DQorCV9fbGUzMiBzdXBwX2h0 X21jczsNCisJX19sZTE2IHN1cHBfdmh0X21jc1s0XTsNCisNCisJdTggb3BfbW9kZTsNCisJdTgg b3Bfdmh0X2NoYW5fd2lkdGg7DQorCXU4IG9wX3ZodF9yeF9uc3M7DQorCXU4IG9wX3ZodF9yeF9u c3NfdHlwZTsNCisNCisJX19sZTMyIHN0YV9zdGF0dXM7DQorDQorCXN0cnVjdCByYV9waHkgcGh5 Ow0KK30gX19wYWNrZWQ7DQorDQorZW51bSB7DQorCVNUQV9SRUNfQkFTSUMsDQorCVNUQV9SRUNf UkEsDQorCVNUQV9SRUNfUkFfQ01NX0lORk8sDQorCVNUQV9SRUNfUkFfVVBEQVRFLA0KKwlTVEFf UkVDX0JGLA0KKwlTVEFfUkVDX0FNU0RVLA0KKwlTVEFfUkVDX0JBLA0KKwlTVEFfUkVDX1JFRCwJ CS8qIG5vdCB1c2VkICovDQorCVNUQV9SRUNfVFhfUFJPQywJLyogZm9yIGhkciB0cmFucyBhbmQg Q1NPIGluIENSNCAqLw0KKwlTVEFfUkVDX0hULA0KKwlTVEFfUkVDX1ZIVCwNCisJU1RBX1JFQ19B UFBTLA0KKwlTVEFfUkVDX0tFWSwNCisJU1RBX1JFQ19XVEJMLA0KKwlTVEFfUkVDX0hFLA0KKwlT VEFfUkVDX0hXX0FNU0RVLA0KKwlTVEFfUkVDX1dUQkxfQUFET00sDQorCVNUQV9SRUNfS0VZX1Yy LA0KKwlTVEFfUkVDX01VUlUsDQorCVNUQV9SRUNfTVVFRENBLA0KKwlTVEFfUkVDX01BWF9OVU0N Cit9Ow0KKw0KK2VudW0gbXQ3OTE1X2NpcGhlcl90eXBlIHsNCisJTVRfQ0lQSEVSX05PTkUsDQor CU1UX0NJUEhFUl9XRVA0MCwNCisJTVRfQ0lQSEVSX1dFUDEwNCwNCisJTVRfQ0lQSEVSX1dFUDEy OCwNCisJTVRfQ0lQSEVSX1RLSVAsDQorCU1UX0NJUEhFUl9BRVNfQ0NNUCwNCisJTVRfQ0lQSEVS X0NDTVBfMjU2LA0KKwlNVF9DSVBIRVJfR0NNUCwNCisJTVRfQ0lQSEVSX0dDTVBfMjU2LA0KKwlN VF9DSVBIRVJfV0FQSSwNCisJTVRfQ0lQSEVSX0JJUF9DTUFDXzEyOCwNCit9Ow0KKw0KK2VudW0g ew0KKwlDSF9TV0lUQ0hfTk9STUFMID0gMCwNCisJQ0hfU1dJVENIX1NDQU4gPSAzLA0KKwlDSF9T V0lUQ0hfTUNDID0gNCwNCisJQ0hfU1dJVENIX0RGUyA9IDUsDQorCUNIX1NXSVRDSF9CQUNLR1JP VU5EX1NDQU5fU1RBUlQgPSA2LA0KKwlDSF9TV0lUQ0hfQkFDS0dST1VORF9TQ0FOX1JVTk5JTkcg PSA3LA0KKwlDSF9TV0lUQ0hfQkFDS0dST1VORF9TQ0FOX1NUT1AgPSA4LA0KKwlDSF9TV0lUQ0hf U0NBTl9CWVBBU1NfRFBEID0gOQ0KK307DQorDQorZW51bSB7DQorCVRIRVJNQUxfU0VOU09SX1RF TVBfUVVFUlksDQorCVRIRVJNQUxfU0VOU09SX01BTlVBTF9DVFJMLA0KKwlUSEVSTUFMX1NFTlNP Ul9JTkZPX1FVRVJZLA0KKwlUSEVSTUFMX1NFTlNPUl9UQVNLX0NUUkwsDQorfTsNCisNCisjZGVm aW5lIE1UNzkxNV9XVEJMX1VQREFURV9NQVhfU0laRQkoc2l6ZW9mKHN0cnVjdCB3dGJsX3JlcV9o ZHIpICsJXA0KKwkJCQkJIHNpemVvZihzdHJ1Y3Qgd3RibF9nZW5lcmljKSArCVwNCisJCQkJCSBz aXplb2Yoc3RydWN0IHd0YmxfcngpICsJXA0KKwkJCQkJIHNpemVvZihzdHJ1Y3Qgd3RibF9odCkg KwlcDQorCQkJCQkgc2l6ZW9mKHN0cnVjdCB3dGJsX3ZodCkgKwlcDQorCQkJCQkgc2l6ZW9mKHN0 cnVjdCB3dGJsX2JhKSArCVwNCisJCQkJCSBzaXplb2Yoc3RydWN0IHd0YmxfYmYpICsJXA0KKwkJ CQkJIHNpemVvZihzdHJ1Y3Qgd3RibF9zbXBzKSArCVwNCisJCQkJCSBzaXplb2Yoc3RydWN0IHd0 Ymxfc3BlKSkNCisNCisjZGVmaW5lIE1UNzkxNV9TVEFfVVBEQVRFX01BWF9TSVpFCShzaXplb2Yo c3RydWN0IHN0YV9yZXFfaGRyKSArCVwNCisJCQkJCSBzaXplb2Yoc3RydWN0IHN0YV9yZWNfYmFz aWMpICsJXA0KKwkJCQkJIHNpemVvZihzdHJ1Y3Qgc3RhX3JlY19odCkgKwlcDQorCQkJCQkgc2l6 ZW9mKHN0cnVjdCBzdGFfcmVjX2JhKSArCVwNCisJCQkJCSBzaXplb2Yoc3RydWN0IHN0YV9yZWNf dmh0KSArCVwNCisJCQkJCSBzaXplb2Yoc3RydWN0IHRsdikgKwkJXA0KKwkJCQkJIHNpemVvZihz dHJ1Y3Qgc3RhX3JlY19zZWMpICsJXA0KKwkJCQkJIHNpemVvZihzdHJ1Y3Qgc3RhX3JlY19yYSkg KwlcDQorCQkJCQkgTVQ3OTE1X1dUQkxfVVBEQVRFX01BWF9TSVpFKQ0KKw0KKyNkZWZpbmUgTVQ3 OTE1X1dUQkxfVVBEQVRFX0JBX1NJWkUJKHNpemVvZihzdHJ1Y3Qgd3RibF9yZXFfaGRyKSArCVwN CisJCQkJCSBzaXplb2Yoc3RydWN0IHd0YmxfYmEpKQ0KKw0KKyNkZWZpbmUgTVQ3OTE1X0JFQUNP Tl9VUERBVEVfU0laRQkoc2l6ZW9mKHN0cnVjdCBzdGFfcmVxX2hkcikgKwlcDQorCQkJCQkgc2l6 ZW9mKHN0cnVjdCBic3NfaW5mb19iY25fY3NhKSArIFwNCisJCQkJCSBzaXplb2Yoc3RydWN0IGJz c19pbmZvX2Jjbl9iY2MpICsgXA0KKwkJCQkJIHNpemVvZihzdHJ1Y3QgYnNzX2luZm9fYmNuX21i c3MpICsgXA0KKwkJCQkJIHNpemVvZihzdHJ1Y3QgYnNzX2luZm9fYmNuX2NvbnQpKQ0KKw0KKyNk ZWZpbmUgUEhZX01PREVfQQkJCUJJVCgwKQ0KKyNkZWZpbmUgUEhZX01PREVfQgkJCUJJVCgxKQ0K KyNkZWZpbmUgUEhZX01PREVfRwkJCUJJVCgyKQ0KKyNkZWZpbmUgUEhZX01PREVfR04JCQlCSVQo MykNCisjZGVmaW5lIFBIWV9NT0RFX0FOCQkJQklUKDQpDQorI2RlZmluZSBQSFlfTU9ERV9BQwkJ CUJJVCg1KQ0KKw0KKyNkZWZpbmUgTU9ERV9DQ0sJCQlCSVQoMCkNCisjZGVmaW5lIE1PREVfT0ZE TQkJCUJJVCgxKQ0KKyNkZWZpbmUgTU9ERV9IVAkJCQlCSVQoMikNCisjZGVmaW5lIE1PREVfVkhU CQkJQklUKDMpDQorDQorI2RlZmluZSBTVEFfQ0FQX1dNTQkJCUJJVCgwKQ0KKyNkZWZpbmUgU1RB X0NBUF9TR0lfMjAJCQlCSVQoNCkNCisjZGVmaW5lIFNUQV9DQVBfU0dJXzQwCQkJQklUKDUpDQor I2RlZmluZSBTVEFfQ0FQX1RYX1NUQkMJCQlCSVQoNikNCisjZGVmaW5lIFNUQV9DQVBfUlhfU1RC QwkJCUJJVCg3KQ0KKyNkZWZpbmUgU1RBX0NBUF9WSFRfU0dJXzgwCQlCSVQoMTYpDQorI2RlZmlu ZSBTVEFfQ0FQX1ZIVF9TR0lfMTYwCQlCSVQoMTcpDQorI2RlZmluZSBTVEFfQ0FQX1ZIVF9UWF9T VEJDCQlCSVQoMTgpDQorI2RlZmluZSBTVEFfQ0FQX1ZIVF9SWF9TVEJDCQlCSVQoMTkpDQorI2Rl ZmluZSBTVEFfQ0FQX1ZIVF9MRFBDCQlCSVQoMjMpDQorI2RlZmluZSBTVEFfQ0FQX0xEUEMJCQlC SVQoMjQpDQorI2RlZmluZSBTVEFfQ0FQX0hUCQkJQklUKDI2KQ0KKyNkZWZpbmUgU1RBX0NBUF9W SFQJCQlCSVQoMjcpDQorDQorI2VuZGlmDQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxl c3MvbWVkaWF0ZWsvbXQ3Ni9tdDc5MTUvbXQ3OTE1LmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9t ZWRpYXRlay9tdDc2L210NzkxNS9tdDc5MTUuaA0KbmV3IGZpbGUgbW9kZSAxMDA2NDQNCmluZGV4 IDAwMDAwMDAwMDAwMC4uYjIzYWIzZjIxNWUwDQotLS0gL2Rldi9udWxsDQorKysgYi9kcml2ZXJz L25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210NzkxNS9tdDc5MTUuaA0KQEAgLTAsMCArMSw0 NDEgQEANCisvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogSVNDICovDQorLyogQ29weXJpZ2h0 IChDKSAyMDIwIE1lZGlhVGVrIEluYy4gKi8NCisNCisjaWZuZGVmIF9fTVQ3OTE1X0gNCisjZGVm aW5lIF9fTVQ3OTE1X0gNCisNCisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+DQorI2luY2x1 ZGUgPGxpbnV4L2t0aW1lLmg+DQorI2luY2x1ZGUgIi4uL210NzYuaCINCisjaW5jbHVkZSAicmVn cy5oIg0KKw0KKyNkZWZpbmUgTVQ3OTE1X01BWF9JTlRFUkZBQ0VTCQk0DQorI2RlZmluZSBNVDc5 MTVfTUFYX1dNTV9TRVRTCQk0DQorI2RlZmluZSBNVDc5MTVfV1RCTF9TSVpFCQkyODgNCisjZGVm aW5lIE1UNzkxNV9XVEJMX1JFU0VSVkVECQkoTVQ3OTE1X1dUQkxfU0laRSAtIDEpDQorI2RlZmlu ZSBNVDc5MTVfV1RCTF9TVEEJCQkoTVQ3OTE1X1dUQkxfUkVTRVJWRUQgLSBcDQorCQkJCQkgTVQ3 OTE1X01BWF9JTlRFUkZBQ0VTKQ0KKw0KKyNkZWZpbmUgTVQ3OTE1X1dBVENIRE9HX1RJTUUJCShI WiAvIDEwKQ0KKyNkZWZpbmUgTVQ3OTE1X1JFU0VUX1RJTUVPVVQJCSgzMCAqIEhaKQ0KKw0KKyNk ZWZpbmUgTVQ3OTE1X1RYX1JJTkdfU0laRQkJMjA0OA0KKyNkZWZpbmUgTVQ3OTE1X1RYX01DVV9S SU5HX1NJWkUJCTI1Ng0KKyNkZWZpbmUgTVQ3OTE1X1RYX0ZXRExfUklOR19TSVpFCTEyOA0KKw0K KyNkZWZpbmUgTVQ3OTE1X1JYX1JJTkdfU0laRQkJMTUzNg0KKyNkZWZpbmUgTVQ3OTE1X1JYX01D VV9SSU5HX1NJWkUJCTUxMg0KKw0KKyNkZWZpbmUgTVQ3OTE1X0ZJUk1XQVJFX1dBCQkibWVkaWF0 ZWsvbXQ3OTE1X3dhLmJpbiINCisjZGVmaW5lIE1UNzkxNV9GSVJNV0FSRV9XTQkJIm1lZGlhdGVr L210NzkxNV93bS5iaW4iDQorI2RlZmluZSBNVDc5MTVfUk9NX1BBVENICQkibWVkaWF0ZWsvbXQ3 OTE1X3JvbV9wYXRjaC5iaW4iDQorDQorI2RlZmluZSBNVDc5MTVfRUVQUk9NX1NJWkUJCTM1ODQN CisjZGVmaW5lIE1UNzkxNV9UT0tFTl9TSVpFCQk4MTkyDQorDQorI2RlZmluZSBNVDc5MTVfQ0ZF TkRfUkFURV9ERUZBVUxUCTB4NDkJLyogT0ZETSAyNE0gKi8NCisjZGVmaW5lIE1UNzkxNV9DRkVO RF9SQVRFXzExQgkJMHgwMwkvKiAxMUIgTFAsIDExTSAqLw0KKyNkZWZpbmUgTVQ3OTE1XzVHX1JB VEVfREVGQVVMVAkJMHg0YgkvKiBPRkRNIDZNICovDQorI2RlZmluZSBNVDc5MTVfMkdfUkFURV9E RUZBVUxUCQkweDAJLyogQ0NLIDFNICovDQorDQorDQorc3RydWN0IG10NzkxNV92aWY7DQorc3Ry dWN0IG10NzkxNV9zdGE7DQorc3RydWN0IG10NzkxNV9kZnNfcHVsc2U7DQorc3RydWN0IG10Nzkx NV9kZnNfcGF0dGVybjsNCisNCitlbnVtIG10NzkxNV90eHFfaWQgew0KKwlNVDc5MTVfVFhRX0ZX REwgPSAxNiwNCisJTVQ3OTE1X1RYUV9NQ1VfV00sDQorCU1UNzkxNV9UWFFfQkFORDAsDQorCU1U NzkxNV9UWFFfQkFORDEsDQorCU1UNzkxNV9UWFFfTUNVX1dBLA0KK307DQorDQorZW51bSBtdDc5 MTVfcnhxX2lkIHsNCisJTVQ3OTE1X1JYUV9CQU5EMCA9IDAsDQorCU1UNzkxNV9SWFFfQkFORDEs DQorCU1UNzkxNV9SWFFfTUNVX1dNID0gMCwNCisJTVQ3OTE1X1JYUV9NQ1VfV0EsDQorfTsNCisN CitlbnVtIG10NzkxNV9hbXBkdV9zdGF0ZSB7DQorCU1UNzkxNV9BR0dSX1NUT1AsDQorCU1UNzkx NV9BR0dSX1BST0dSRVNTLA0KKwlNVDc5MTVfQUdHUl9TVEFSVCwNCisJTVQ3OTE1X0FHR1JfT1BF UkFUSU9OQUwNCit9Ow0KKw0KK3N0cnVjdCBtdDc5MTVfc3RhX3N0YXRzIHsNCisJc3RydWN0IHJh dGVfaW5mbyBwcm9iX3JhdGU7DQorCXN0cnVjdCByYXRlX2luZm8gdHhfcmF0ZTsNCisNCisJdW5z aWduZWQgbG9uZyBwZXI7DQorCXVuc2lnbmVkIGxvbmcgY2hhbmdlZDsNCisJdW5zaWduZWQgbG9u ZyBqaWZmaWVzOw0KK307DQorDQorc3RydWN0IG10NzkxNV9zdGEgew0KKwlzdHJ1Y3QgbXQ3Nl93 Y2lkIHdjaWQ7IC8qIG11c3QgYmUgZmlyc3QgKi8NCisNCisJc3RydWN0IG10NzkxNV92aWYgKnZp ZjsNCisNCisJc3RydWN0IGxpc3RfaGVhZCBwb2xsX2xpc3Q7DQorCXUzMiBhaXJ0aW1lX2FjWzhd Ow0KKw0KKwlzdHJ1Y3QgbXQ3OTE1X3N0YV9zdGF0cyBzdGF0czsNCisJc3RydWN0IHdvcmtfc3Ry dWN0IHN0YXRzX3dvcms7DQorDQorCXNwaW5sb2NrX3QgYW1wZHVfbG9jazsNCisJZW51bSBtdDc5 MTVfYW1wZHVfc3RhdGUgYW1wZHVfc3RhdGVbSUVFRTgwMjExX05VTV9USURTXTsNCit9Ow0KKw0K K3N0cnVjdCBtdDc5MTVfdmlmIHsNCisJdTE2IGlkeDsNCisJdTggb21hY19pZHg7DQorCXU4IGJh bmRfaWR4Ow0KKwl1OCB3bW1faWR4Ow0KKw0KKwlzdHJ1Y3Qgew0KKwkJdTE2IGN3X21pbjsNCisJ CXUxNiBjd19tYXg7DQorCQl1MTYgdHhvcDsNCisJCXU4IGFpZnM7DQorCX0gd21tW0lFRUU4MDIx MV9OVU1fQUNTXTsNCisNCisJc3RydWN0IG10NzkxNV9zdGEgc3RhOw0KKwlzdHJ1Y3QgbXQ3OTE1 X2RldiAqZGV2Ow0KK307DQorDQorc3RydWN0IG1pYl9zdGF0cyB7DQorCXUxNiBhY2tfZmFpbF9j bnQ7DQorCXUxNiBmY3NfZXJyX2NudDsNCisJdTE2IHJ0c19jbnQ7DQorCXUxNiBydHNfcmV0cmll c19jbnQ7DQorCXUxNiBiYV9taXNzX2NudDsNCit9Ow0KKw0KK3N0cnVjdCBtdDc5MTVfcGh5IHsN CisJc3RydWN0IG10NzZfcGh5ICptdDc2Ow0KKwlzdHJ1Y3QgbXQ3OTE1X2RldiAqZGV2Ow0KKw0K Kwl1MzIgcnhmaWx0ZXI7DQorCXUzMiB2aWZfbWFzazsNCisJdTMyIG9tYWNfbWFzazsNCisNCisJ dTE2IG5vaXNlOw0KKwl1MTYgY2hhaW5tYXNrOw0KKw0KKwlzMTYgY292ZXJhZ2VfY2xhc3M7DQor CXU4IHNsb3R0aW1lOw0KKw0KKwl1OCByZGRfc3RhdGU7DQorCWludCBkZnNfc3RhdGU7DQorDQor CV9fbGUzMiByeF9hbXBkdV90czsNCisJdTMyIGFtcGR1X3JlZjsNCisNCisJc3RydWN0IG1pYl9z dGF0cyBtaWI7DQorfTsNCisNCitzdHJ1Y3QgbXQ3OTE1X2RldiB7DQorCXVuaW9uIHsgLyogbXVz dCBiZSBmaXJzdCAqLw0KKwkJc3RydWN0IG10NzZfZGV2IG10NzY7DQorCQlzdHJ1Y3QgbXQ3Nl9w aHkgbXBoeTsNCisJfTsNCisNCisJc3RydWN0IG10NzkxNV9waHkgcGh5Ow0KKw0KKwl1MTYgY2hh aW5tYXNrOw0KKw0KKwlzdHJ1Y3Qgd29ya19zdHJ1Y3QgaW5pdF93b3JrOw0KKwlzdHJ1Y3Qgd29y a19zdHJ1Y3QgcmVzZXRfd29yazsNCisJd2FpdF9xdWV1ZV9oZWFkX3QgcmVzZXRfd2FpdDsNCisJ dTMyIHJlc2V0X3N0YXRlOw0KKw0KKwlzdHJ1Y3QgbGlzdF9oZWFkIHN0YV9wb2xsX2xpc3Q7DQor CXNwaW5sb2NrX3Qgc3RhX3BvbGxfbG9jazsNCisNCisJdTMyIGh3X3BhdHRlcm47DQorDQorCXNw aW5sb2NrX3QgdG9rZW5fbG9jazsNCisJc3RydWN0IGlkciB0b2tlbjsNCisNCisJdTggbWFjX3dv cmtfY291bnQ7DQorCWJvb2wgZndfZGVidWc7DQorfTsNCisNCitlbnVtIHsNCisJSFdfQlNTSURf MCA9IDB4MCwNCisJSFdfQlNTSURfMSwNCisJSFdfQlNTSURfMiwNCisJSFdfQlNTSURfMywNCisJ SFdfQlNTSURfTUFYLA0KKwlFWFRfQlNTSURfU1RBUlQgPSAweDEwLA0KKwlFWFRfQlNTSURfMSwN CisJRVhUX0JTU0lEXzIsDQorCUVYVF9CU1NJRF8zLA0KKwlFWFRfQlNTSURfNCwNCisJRVhUX0JT U0lEXzUsDQorCUVYVF9CU1NJRF82LA0KKwlFWFRfQlNTSURfNywNCisJRVhUX0JTU0lEXzgsDQor CUVYVF9CU1NJRF85LA0KKwlFWFRfQlNTSURfMTAsDQorCUVYVF9CU1NJRF8xMSwNCisJRVhUX0JT U0lEXzEyLA0KKwlFWFRfQlNTSURfMTMsDQorCUVYVF9CU1NJRF8xNCwNCisJRVhUX0JTU0lEXzE1 LA0KKwlFWFRfQlNTSURfRU5EDQorfTsNCisNCitlbnVtIHsNCisJTVRfUlhfU0VMMCwNCisJTVRf UlhfU0VMMSwNCit9Ow0KKw0KK2VudW0gbXQ3OTE1X3JkZF9jbWQgew0KKwlSRERfU1RPUCwNCisJ UkREX1NUQVJULA0KKwlSRERfREVUX01PREUsDQorCVJERF9SQURBUl9FTVVMQVRFLA0KKwlSRERf U1RBUlRfVFhRID0gMjAsDQorCVJERF9DQUNfU1RBUlQgPSA1MCwNCisJUkREX0NBQ19FTkQsDQor CVJERF9OT1JNQUxfU1RBUlQsDQorCVJERF9ESVNBQkxFX0RGU19DQUwsDQorCVJERF9QVUxTRV9E QkcsDQorCVJERF9SRUFEX1BVTFNFLA0KKwlSRERfUkVTVU1FX0JGLA0KKwlSRERfSVJRX09GRiwN Cit9Ow0KKw0KK2VudW0gew0KKwlSQVRFX0NUUkxfUlVfSU5GTywNCisJUkFURV9DVFJMX0ZJWEVE X1JBVEVfSU5GTywNCisJUkFURV9DVFJMX0RVTVBfSU5GTywNCisJUkFURV9DVFJMX01VX0lORk8s DQorfTsNCisNCitzdGF0aWMgaW5saW5lIHN0cnVjdCBtdDc5MTVfcGh5ICoNCittdDc5MTVfaHdf cGh5KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KQ0KK3sNCisJc3RydWN0IG10NzZfcGh5ICpwaHkg PSBody0+cHJpdjsNCisNCisJcmV0dXJuIHBoeS0+cHJpdjsNCit9DQorDQorc3RhdGljIGlubGlu ZSBzdHJ1Y3QgbXQ3OTE1X2RldiAqDQorbXQ3OTE1X2h3X2RldihzdHJ1Y3QgaWVlZTgwMjExX2h3 ICpodykNCit7DQorCXN0cnVjdCBtdDc2X3BoeSAqcGh5ID0gaHctPnByaXY7DQorDQorCXJldHVy biBjb250YWluZXJfb2YocGh5LT5kZXYsIHN0cnVjdCBtdDc5MTVfZGV2LCBtdDc2KTsNCit9DQor DQorc3RhdGljIGlubGluZSBzdHJ1Y3QgbXQ3OTE1X3BoeSAqDQorbXQ3OTE1X2V4dF9waHkoc3Ry dWN0IG10NzkxNV9kZXYgKmRldikNCit7DQorCXN0cnVjdCBtdDc2X3BoeSAqcGh5ID0gZGV2LT5t dDc2LnBoeTI7DQorDQorCWlmICghcGh5KQ0KKwkJcmV0dXJuIE5VTEw7DQorDQorCXJldHVybiBw aHktPnByaXY7DQorfQ0KKw0KK3N0YXRpYyBpbmxpbmUgdm9pZA0KK210NzkxNV9zZXRfYWdncl9z dGF0ZShzdHJ1Y3QgbXQ3OTE1X3N0YSAqbXN0YSwgdTggdGlkLA0KKwkJICAgICAgZW51bSBtdDc5 MTVfYW1wZHVfc3RhdGUgc3RhdGUpDQorew0KKwlzcGluX2xvY2tfYmgoJm1zdGEtPmFtcGR1X2xv Y2spOw0KKwltc3RhLT5hbXBkdV9zdGF0ZVt0aWRdID0gc3RhdGU7DQorCXNwaW5fdW5sb2NrX2Jo KCZtc3RhLT5hbXBkdV9sb2NrKTsNCit9DQorDQorZXh0ZXJuIGNvbnN0IHN0cnVjdCBpZWVlODAy MTFfb3BzIG10NzkxNV9vcHM7DQorZXh0ZXJuIHN0cnVjdCBwY2lfZHJpdmVyIG10NzkxNV9wY2lf ZHJpdmVyOw0KKw0KK3UzMiBtdDc5MTVfcmVnX21hcChzdHJ1Y3QgbXQ3OTE1X2RldiAqZGV2LCB1 MzIgYWRkcik7DQorDQoraW50IG10NzkxNV9yZWdpc3Rlcl9kZXZpY2Uoc3RydWN0IG10NzkxNV9k ZXYgKmRldik7DQordm9pZCBtdDc5MTVfdW5yZWdpc3Rlcl9kZXZpY2Uoc3RydWN0IG10NzkxNV9k ZXYgKmRldik7DQoraW50IG10NzkxNV9yZWdpc3Rlcl9leHRfcGh5KHN0cnVjdCBtdDc5MTVfZGV2 ICpkZXYpOw0KK3ZvaWQgbXQ3OTE1X3VucmVnaXN0ZXJfZXh0X3BoeShzdHJ1Y3QgbXQ3OTE1X2Rl diAqZGV2KTsNCitpbnQgbXQ3OTE1X2VlcHJvbV9pbml0KHN0cnVjdCBtdDc5MTVfZGV2ICpkZXYp Ow0KK3UzMiBtdDc5MTVfZWVwcm9tX3JlYWQoc3RydWN0IG10NzkxNV9kZXYgKmRldiwgdTMyIG9m ZnNldCk7DQoraW50IG10NzkxNV9lZXByb21fZ2V0X3RhcmdldF9wb3dlcihzdHJ1Y3QgbXQ3OTE1 X2RldiAqZGV2LA0KKwkJCQkgICBzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmNoYW4sDQorCQkJ CSAgIHU4IGNoYWluX2lkeCk7DQoraW50IG10NzkxNV9kbWFfaW5pdChzdHJ1Y3QgbXQ3OTE1X2Rl diAqZGV2KTsNCit2b2lkIG10NzkxNV9kbWFfcHJlZmV0Y2goc3RydWN0IG10NzkxNV9kZXYgKmRl dik7DQordm9pZCBtdDc5MTVfZG1hX2NsZWFudXAoc3RydWN0IG10NzkxNV9kZXYgKmRldik7DQor aW50IG10NzkxNV9tY3VfaW5pdChzdHJ1Y3QgbXQ3OTE1X2RldiAqZGV2KTsNCitpbnQgbXQ3OTE1 X21jdV9hZGRfZGV2X2luZm8oc3RydWN0IG10NzkxNV9kZXYgKmRldiwNCisJCQkgICAgc3RydWN0 IGllZWU4MDIxMV92aWYgKnZpZiwgYm9vbCBlbmFibGUpOw0KK2ludCBtdDc5MTVfbWN1X2FkZF9i c3NfaW5mbyhzdHJ1Y3QgbXQ3OTE1X3BoeSAqcGh5LA0KKwkJCSAgICBzdHJ1Y3QgaWVlZTgwMjEx X3ZpZiAqdmlmLCBpbnQgZW5hYmxlKTsNCitpbnQgbXQ3OTE1X21jdV9hZGRfc3RhKHN0cnVjdCBt dDc5MTVfZGV2ICpkZXYsIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsDQorCQkgICAgICAgc3Ry dWN0IGllZWU4MDIxMV9zdGEgKnN0YSwgYm9vbCBlbmFibGUpOw0KK2ludCBtdDc5MTVfbWN1X2Fk ZF90eF9iYShzdHJ1Y3QgbXQ3OTE1X2RldiAqZGV2LA0KKwkJCSBzdHJ1Y3QgaWVlZTgwMjExX2Ft cGR1X3BhcmFtcyAqcGFyYW1zLA0KKwkJCSBib29sIGFkZCk7DQoraW50IG10NzkxNV9tY3VfYWRk X3J4X2JhKHN0cnVjdCBtdDc5MTVfZGV2ICpkZXYsDQorCQkJIHN0cnVjdCBpZWVlODAyMTFfYW1w ZHVfcGFyYW1zICpwYXJhbXMsDQorCQkJIGJvb2wgYWRkKTsNCitpbnQgbXQ3OTE1X21jdV9hZGRf a2V5KHN0cnVjdCBtdDc5MTVfZGV2ICpkZXYsIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsDQor CQkgICAgICAgc3RydWN0IG10NzkxNV9zdGEgKm1zdGEsIHN0cnVjdCBpZWVlODAyMTFfa2V5X2Nv bmYgKmtleSwNCisJCSAgICAgICBlbnVtIHNldF9rZXlfY21kIGNtZCk7DQoraW50IG10NzkxNV9t Y3VfYWRkX2JlYWNvbihzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IGllZWU4MDIxMV92 aWYgKnZpZiwNCisJCQkgIGludCBlbmFibGUpOw0KK2ludCBtdDc5MTVfbWN1X2FkZF9yYXRlX2N0 cmwoc3RydWN0IG10NzkxNV9kZXYgKmRldiwgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZiwNCisJ CQkgICAgIHN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEpOw0KK2ludCBtdDc5MTVfbWN1X2FkZF9z bXBzKHN0cnVjdCBtdDc5MTVfZGV2ICpkZXYsIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsDQor CQkJc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSk7DQoraW50IG10NzkxNV9tY3Vfc2V0X2NoYW5f aW5mbyhzdHJ1Y3QgbXQ3OTE1X3BoeSAqcGh5LCBpbnQgY21kKTsNCitpbnQgbXQ3OTE1X21jdV9z ZXRfdHgoc3RydWN0IG10NzkxNV9kZXYgKmRldiwgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZik7 DQoraW50IG10NzkxNV9tY3Vfc2V0X2VlcHJvbShzdHJ1Y3QgbXQ3OTE1X2RldiAqZGV2KTsNCitp bnQgbXQ3OTE1X21jdV9nZXRfZWVwcm9tKHN0cnVjdCBtdDc5MTVfZGV2ICpkZXYsIHUzMiBvZmZz ZXQpOw0KK2ludCBtdDc5MTVfbWN1X3NldF9tYWMoc3RydWN0IG10NzkxNV9kZXYgKmRldiwgaW50 IGJhbmQsIGJvb2wgZW5hYmxlLA0KKwkJICAgICAgIGJvb2wgaGRyX3RyYW5zKTsNCitpbnQgbXQ3 OTE1X21jdV9zZXRfc2NzKHN0cnVjdCBtdDc5MTVfZGV2ICpkZXYsIHU4IGJhbmQsIGJvb2wgZW5h YmxlKTsNCitpbnQgbXQ3OTE1X21jdV9zZXRfc2VyKHN0cnVjdCBtdDc5MTVfZGV2ICpkZXYsIHU4 IGFjdGlvbiwgdTggc2V0LCB1OCBiYW5kKTsNCitpbnQgbXQ3OTE1X21jdV9zZXRfcnRzX3RocmVz aChzdHJ1Y3QgbXQ3OTE1X3BoeSAqcGh5LCB1MzIgdmFsKTsNCitpbnQgbXQ3OTE1X21jdV9zZXRf cG0oc3RydWN0IG10NzkxNV9kZXYgKmRldiwgaW50IGJhbmQsIGludCBlbnRlcik7DQoraW50IG10 NzkxNV9tY3Vfc2V0X2ZjYzVfbHBuKHN0cnVjdCBtdDc5MTVfZGV2ICpkZXYsIGludCB2YWwpOw0K K2ludCBtdDc5MTVfbWN1X3NldF9wdWxzZV90aChzdHJ1Y3QgbXQ3OTE1X2RldiAqZGV2LA0KKwkJ CSAgICBjb25zdCBzdHJ1Y3QgbXQ3OTE1X2Rmc19wdWxzZSAqcHVsc2UpOw0KK2ludCBtdDc5MTVf bWN1X3NldF9yYWRhcl90aChzdHJ1Y3QgbXQ3OTE1X2RldiAqZGV2LCBpbnQgaW5kZXgsDQorCQkJ ICAgIGNvbnN0IHN0cnVjdCBtdDc5MTVfZGZzX3BhdHRlcm4gKnBhdHRlcm4pOw0KK2ludCBtdDc5 MTVfbWN1X2dldF9yYXRlX2luZm8oc3RydWN0IG10NzkxNV9kZXYgKmRldiwgdTMyIGNtZCwgdTE2 IHdsYW5faWR4KTsNCitpbnQgbXQ3OTE1X21jdV9nZXRfdGVtcGVyYXR1cmUoc3RydWN0IG10Nzkx NV9kZXYgKmRldiwgaW50IGluZGV4KTsNCitpbnQgbXQ3OTE1X21jdV9yZGRfY21kKHN0cnVjdCBt dDc5MTVfZGV2ICpkZXYsIGVudW0gbXQ3OTE1X3JkZF9jbWQgY21kLA0KKwkJICAgICAgIHU4IGlu ZGV4LCB1OCByeF9zZWwsIHU4IHZhbCk7DQordm9pZCBtdDc5MTVfbWN1X3J4X2V2ZW50KHN0cnVj dCBtdDc5MTVfZGV2ICpkZXYsIHN0cnVjdCBza19idWZmICpza2IpOw0KK3ZvaWQgbXQ3OTE1X21j dV9leGl0KHN0cnVjdCBtdDc5MTVfZGV2ICpkZXYpOw0KKw0KK3N0YXRpYyBpbmxpbmUgYm9vbCBp c19tdDc5MTUoc3RydWN0IG10NzZfZGV2ICpkZXYpDQorew0KKwlyZXR1cm4gbXQ3Nl9jaGlwKGRl dikgPT0gMHg3OTE1Ow0KK30NCisNCitzdGF0aWMgaW5saW5lIHZvaWQgbXQ3OTE1X2lycV9lbmFi bGUoc3RydWN0IG10NzkxNV9kZXYgKmRldiwgdTMyIG1hc2spDQorew0KKwltdDc2X3NldF9pcnFf bWFzaygmZGV2LT5tdDc2LCBNVF9JTlRfTUFTS19DU1IsIDAsIG1hc2spOw0KK30NCisNCitzdGF0 aWMgaW5saW5lIHZvaWQgbXQ3OTE1X2lycV9kaXNhYmxlKHN0cnVjdCBtdDc5MTVfZGV2ICpkZXYs IHUzMiBtYXNrKQ0KK3sNCisJbXQ3Nl9zZXRfaXJxX21hc2soJmRldi0+bXQ3NiwgTVRfSU5UX01B U0tfQ1NSLCBtYXNrLCAwKTsNCit9DQorDQorc3RhdGljIGlubGluZSB1MzINCittdDc5MTVfcmVn X21hcF9sMShzdHJ1Y3QgbXQ3OTE1X2RldiAqZGV2LCB1MzIgYWRkcikNCit7DQorCXUzMiBvZmZz ZXQgPSBGSUVMRF9HRVQoTVRfSElGX1JFTUFQX0wxX09GRlNFVCwgYWRkcik7DQorCXUzMiBiYXNl ID0gRklFTERfR0VUKE1UX0hJRl9SRU1BUF9MMV9CQVNFLCBhZGRyKTsNCisNCisJbXQ3Nl9ybXdf ZmllbGQoZGV2LCBNVF9ISUZfUkVNQVBfTDEsIE1UX0hJRl9SRU1BUF9MMV9NQVNLLCBiYXNlKTsN CisJLyogdXNlIHJlYWQgdG8gcHVzaCB3cml0ZSAqLw0KKwltdDc2X3JyKGRldiwgTVRfSElGX1JF TUFQX0wxKTsNCisNCisJcmV0dXJuIE1UX0hJRl9SRU1BUF9CQVNFX0wxICsgb2Zmc2V0Ow0KK30N CisNCitzdGF0aWMgaW5saW5lIHUzMg0KK210NzkxNV9sMV9ycihzdHJ1Y3QgbXQ3OTE1X2RldiAq ZGV2LCB1MzIgYWRkcikNCit7DQorCXJldHVybiBtdDc2X3JyKGRldiwgbXQ3OTE1X3JlZ19tYXBf bDEoZGV2LCBhZGRyKSk7DQorfQ0KKw0KK3N0YXRpYyBpbmxpbmUgdm9pZA0KK210NzkxNV9sMV93 cihzdHJ1Y3QgbXQ3OTE1X2RldiAqZGV2LCB1MzIgYWRkciwgdTMyIHZhbCkNCit7DQorCW10NzZf d3IoZGV2LCBtdDc5MTVfcmVnX21hcF9sMShkZXYsIGFkZHIpLCB2YWwpOw0KK30NCisNCitzdGF0 aWMgaW5saW5lIHUzMg0KK210NzkxNV9sMV9ybXcoc3RydWN0IG10NzkxNV9kZXYgKmRldiwgdTMy IGFkZHIsIHUzMiBtYXNrLCB1MzIgdmFsKQ0KK3sNCisJdmFsIHw9IG10NzkxNV9sMV9ycihkZXYs IGFkZHIpICYgfm1hc2s7DQorCW10NzkxNV9sMV93cihkZXYsIGFkZHIsIHZhbCk7DQorDQorCXJl dHVybiB2YWw7DQorfQ0KKw0KKyNkZWZpbmUgbXQ3OTE1X2wxX3NldChkZXYsIGFkZHIsIHZhbCkJ bXQ3OTE1X2wxX3JtdyhkZXYsIGFkZHIsIDAsIHZhbCkNCisjZGVmaW5lIG10NzkxNV9sMV9jbGVh cihkZXYsIGFkZHIsIHZhbCkJbXQ3OTE1X2wxX3JtdyhkZXYsIGFkZHIsIHZhbCwgMCkNCisNCitz dGF0aWMgaW5saW5lIHUzMg0KK210NzkxNV9yZWdfbWFwX2wyKHN0cnVjdCBtdDc5MTVfZGV2ICpk ZXYsIHUzMiBhZGRyKQ0KK3sNCisJdTMyIG9mZnNldCA9IEZJRUxEX0dFVChNVF9ISUZfUkVNQVBf TDJfT0ZGU0VULCBhZGRyKTsNCisJdTMyIGJhc2UgPSBGSUVMRF9HRVQoTVRfSElGX1JFTUFQX0wy X0JBU0UsIGFkZHIpOw0KKw0KKwltdDc2X3Jtd19maWVsZChkZXYsIE1UX0hJRl9SRU1BUF9MMiwg TVRfSElGX1JFTUFQX0wyX01BU0ssIGJhc2UpOw0KKwkvKiB1c2UgcmVhZCB0byBwdXNoIHdyaXRl ICovDQorCW10NzZfcnIoZGV2LCBNVF9ISUZfUkVNQVBfTDIpOw0KKw0KKwlyZXR1cm4gTVRfSElG X1JFTUFQX0JBU0VfTDIgKyBvZmZzZXQ7DQorfQ0KKw0KK3N0YXRpYyBpbmxpbmUgdTMyDQorbXQ3 OTE1X2wyX3JyKHN0cnVjdCBtdDc5MTVfZGV2ICpkZXYsIHUzMiBhZGRyKQ0KK3sNCisJcmV0dXJu IG10NzZfcnIoZGV2LCBtdDc5MTVfcmVnX21hcF9sMihkZXYsIGFkZHIpKTsNCit9DQorDQorc3Rh dGljIGlubGluZSB2b2lkDQorbXQ3OTE1X2wyX3dyKHN0cnVjdCBtdDc5MTVfZGV2ICpkZXYsIHUz MiBhZGRyLCB1MzIgdmFsKQ0KK3sNCisJbXQ3Nl93cihkZXYsIG10NzkxNV9yZWdfbWFwX2wyKGRl diwgYWRkciksIHZhbCk7DQorfQ0KKw0KK3N0YXRpYyBpbmxpbmUgdTMyDQorbXQ3OTE1X2wyX3Jt dyhzdHJ1Y3QgbXQ3OTE1X2RldiAqZGV2LCB1MzIgYWRkciwgdTMyIG1hc2ssIHUzMiB2YWwpDQor ew0KKwl2YWwgfD0gbXQ3OTE1X2wyX3JyKGRldiwgYWRkcikgJiB+bWFzazsNCisJbXQ3OTE1X2wy X3dyKGRldiwgYWRkciwgdmFsKTsNCisNCisJcmV0dXJuIHZhbDsNCit9DQorDQorI2RlZmluZSBt dDc5MTVfbDJfc2V0KGRldiwgYWRkciwgdmFsKQltdDc5MTVfbDJfcm13KGRldiwgYWRkciwgMCwg dmFsKQ0KKyNkZWZpbmUgbXQ3OTE1X2wyX2NsZWFyKGRldiwgYWRkciwgdmFsKQltdDc5MTVfbDJf cm13KGRldiwgYWRkciwgdmFsLCAwKQ0KKw0KK2Jvb2wgbXQ3OTE1X21hY193dGJsX3VwZGF0ZShz dHJ1Y3QgbXQ3OTE1X2RldiAqZGV2LCBpbnQgaWR4LCB1MzIgbWFzayk7DQordm9pZCBtdDc5MTVf bWFjX3Jlc2V0X2NvdW50ZXJzKHN0cnVjdCBtdDc5MTVfcGh5ICpwaHkpOw0KK3ZvaWQgbXQ3OTE1 X21hY19jY2Ffc3RhdHNfcmVzZXQoc3RydWN0IG10NzkxNV9waHkgKnBoeSk7DQordm9pZCBtdDc5 MTVfbWFjX3N0YV9wb2xsKHN0cnVjdCBtdDc5MTVfZGV2ICpkZXYpOw0KK3ZvaWQgbXQ3OTE1X21h Y193cml0ZV90eHdpKHN0cnVjdCBtdDc5MTVfZGV2ICpkZXYsIF9fbGUzMiAqdHh3aSwNCisJCQkg ICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbXQ3Nl93Y2lkICp3Y2lkLA0KKwkJCSAgIHN0 cnVjdCBpZWVlODAyMTFfa2V5X2NvbmYgKmtleSwgYm9vbCBiZWFjb24pOw0KK3ZvaWQgbXQ3OTE1 X21hY19zZXRfdGltaW5nKHN0cnVjdCBtdDc5MTVfcGh5ICpwaHkpOw0KK2ludCBtdDc5MTVfbWFj X2ZpbGxfcngoc3RydWN0IG10NzkxNV9kZXYgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYik7DQor dm9pZCBtdDc5MTVfbWFjX3R4X2ZyZWUoc3RydWN0IG10NzkxNV9kZXYgKmRldiwgc3RydWN0IHNr X2J1ZmYgKnNrYik7DQoraW50IG10NzkxNV9tYWNfc3RhX2FkZChzdHJ1Y3QgbXQ3Nl9kZXYgKm1k ZXYsIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsDQorCQkgICAgICAgc3RydWN0IGllZWU4MDIx MV9zdGEgKnN0YSk7DQordm9pZCBtdDc5MTVfbWFjX3N0YV9yZW1vdmUoc3RydWN0IG10NzZfZGV2 ICptZGV2LCBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLA0KKwkJCSAgIHN0cnVjdCBpZWVlODAy MTFfc3RhICpzdGEpOw0KK3ZvaWQgbXQ3OTE1X21hY193b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAq d29yayk7DQordm9pZCBtdDc5MTVfbWFjX3Jlc2V0X3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3 b3JrKTsNCit2b2lkIG10NzkxNV9tYWNfc3RhX3N0YXRzX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0 ICp3b3JrKTsNCitpbnQgbXQ3OTE1X3R4X3ByZXBhcmVfc2tiKHN0cnVjdCBtdDc2X2RldiAqbWRl diwgdm9pZCAqdHh3aV9wdHIsDQorCQkJICBlbnVtIG10NzZfdHhxX2lkIHFpZCwgc3RydWN0IG10 NzZfd2NpZCAqd2NpZCwNCisJCQkgIHN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEsDQorCQkJICBz dHJ1Y3QgbXQ3Nl90eF9pbmZvICp0eF9pbmZvKTsNCit2b2lkIG10NzkxNV90eF9jb21wbGV0ZV9z a2Ioc3RydWN0IG10NzZfZGV2ICptZGV2LCBlbnVtIG10NzZfdHhxX2lkIHFpZCwNCisJCQkgICAg c3RydWN0IG10NzZfcXVldWVfZW50cnkgKmUpOw0KK3ZvaWQgbXQ3OTE1X3F1ZXVlX3J4X3NrYihz dHJ1Y3QgbXQ3Nl9kZXYgKm1kZXYsIGVudW0gbXQ3Nl9yeHFfaWQgcSwNCisJCQkgc3RydWN0IHNr X2J1ZmYgKnNrYik7DQordm9pZCBtdDc5MTVfc3RhX3BzKHN0cnVjdCBtdDc2X2RldiAqbWRldiwg c3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSwgYm9vbCBwcyk7DQordm9pZCBtdDc5MTVfc3RhdHNf d29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspOw0KK3ZvaWQgbXQ3OTE1X3R4cF9za2JfdW5t YXAoc3RydWN0IG10NzZfZGV2ICpkZXYsDQorCQkJICBzdHJ1Y3QgbXQ3Nl90eHdpX2NhY2hlICp0 eHdpKTsNCitpbnQgbXQ3Nl9kZnNfc3RhcnRfcmRkKHN0cnVjdCBtdDc5MTVfZGV2ICpkZXYsIGJv b2wgZm9yY2UpOw0KK2ludCBtdDc5MTVfZGZzX2luaXRfcmFkYXJfZGV0ZWN0b3Ioc3RydWN0IG10 NzkxNV9waHkgKnBoeSk7DQordm9pZCBtdDc5MTVfdXBkYXRlX2NoYW5uZWwoc3RydWN0IG10NzZf ZGV2ICptZGV2KTsNCitpbnQgbXQ3OTE1X2luaXRfZGVidWdmcyhzdHJ1Y3QgbXQ3OTE1X2RldiAq ZGV2KTsNCisNCisjZW5kaWYNCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRp YXRlay9tdDc2L210NzkxNS9wY2kuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210 NzYvbXQ3OTE1L3BjaS5jDQpuZXcgZmlsZSBtb2RlIDEwMDY0NA0KaW5kZXggMDAwMDAwMDAwMDAw Li5iNzliNTA2MGNkNzcNCi0tLSAvZGV2L251bGwNCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNz L21lZGlhdGVrL210NzYvbXQ3OTE1L3BjaS5jDQpAQCAtMCwwICsxLDE2NiBAQA0KKy8vIFNQRFgt TGljZW5zZS1JZGVudGlmaWVyOiBJU0MNCisvKiBDb3B5cmlnaHQgKEMpIDIwMjAgTWVkaWFUZWsg SW5jLg0KKyAqDQorICogQXV0aG9yOiBSeWRlciBMZWUgPHJ5ZGVyLmxlZUBtZWRpYXRlay5jb20+ DQorICovDQorDQorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPg0KKyNpbmNsdWRlIDxsaW51eC9t b2R1bGUuaD4NCisjaW5jbHVkZSA8bGludXgvcGNpLmg+DQorDQorI2luY2x1ZGUgIm10NzkxNS5o Ig0KKyNpbmNsdWRlICJtYWMuaCINCisjaW5jbHVkZSAiLi4vdHJhY2UuaCINCisNCitzdGF0aWMg Y29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgbXQ3OTE1X3BjaV9kZXZpY2VfdGFibGVbXSA9IHsN CisJeyBQQ0lfREVWSUNFKDB4MTRjMywgMHg3OTE1KSB9LA0KKwl7IH0sDQorfTsNCisNCitzdGF0 aWMgdm9pZA0KK210NzkxNV9yeF9wb2xsX2NvbXBsZXRlKHN0cnVjdCBtdDc2X2RldiAqbWRldiwg ZW51bSBtdDc2X3J4cV9pZCBxKQ0KK3sNCisJc3RydWN0IG10NzkxNV9kZXYgKmRldiA9IGNvbnRh aW5lcl9vZihtZGV2LCBzdHJ1Y3QgbXQ3OTE1X2RldiwgbXQ3Nik7DQorDQorCW10NzkxNV9pcnFf ZW5hYmxlKGRldiwgTVRfSU5UX1JYX0RPTkUocSkpOw0KK30NCisNCisvKiBUT0RPOiBzdXBwb3J0 IDIvNC82LzggTVNJLVggdmVjdG9ycyAqLw0KK3N0YXRpYyBpcnFyZXR1cm5fdCBtdDc5MTVfaXJx X2hhbmRsZXIoaW50IGlycSwgdm9pZCAqZGV2X2luc3RhbmNlKQ0KK3sNCisJc3RydWN0IG10Nzkx NV9kZXYgKmRldiA9IGRldl9pbnN0YW5jZTsNCisJdTMyIGludHI7DQorDQorCWludHIgPSBtdDc2 X3JyKGRldiwgTVRfSU5UX1NPVVJDRV9DU1IpOw0KKwltdDc2X3dyKGRldiwgTVRfSU5UX1NPVVJD RV9DU1IsIGludHIpOw0KKw0KKwlpZiAoIXRlc3RfYml0KE1UNzZfU1RBVEVfSU5JVElBTElaRUQs ICZkZXYtPm1waHkuc3RhdGUpKQ0KKwkJcmV0dXJuIElSUV9OT05FOw0KKw0KKwl0cmFjZV9kZXZf aXJxKCZkZXYtPm10NzYsIGludHIsIGRldi0+bXQ3Ni5tbWlvLmlycW1hc2spOw0KKw0KKwlpbnRy ICY9IGRldi0+bXQ3Ni5tbWlvLmlycW1hc2s7DQorDQorCWlmIChpbnRyICYgTVRfSU5UX1RYX0RP TkVfQUxMKSB7DQorCQltdDc5MTVfaXJxX2Rpc2FibGUoZGV2LCBNVF9JTlRfVFhfRE9ORV9BTEwp Ow0KKwkJbmFwaV9zY2hlZHVsZSgmZGV2LT5tdDc2LnR4X25hcGkpOw0KKwl9DQorDQorCWlmIChp bnRyICYgTVRfSU5UX1JYX0RPTkVfREFUQSkgew0KKwkJbXQ3OTE1X2lycV9kaXNhYmxlKGRldiwg TVRfSU5UX1JYX0RPTkVfREFUQSk7DQorCQluYXBpX3NjaGVkdWxlKCZkZXYtPm10NzYubmFwaVsw XSk7DQorCX0NCisNCisJaWYgKGludHIgJiBNVF9JTlRfUlhfRE9ORV9XTSkgew0KKwkJbXQ3OTE1 X2lycV9kaXNhYmxlKGRldiwgTVRfSU5UX1JYX0RPTkVfV00pOw0KKwkJbmFwaV9zY2hlZHVsZSgm ZGV2LT5tdDc2Lm5hcGlbMV0pOw0KKwl9DQorDQorCWlmIChpbnRyICYgTVRfSU5UX1JYX0RPTkVf V0EpIHsNCisJCW10NzkxNV9pcnFfZGlzYWJsZShkZXYsIE1UX0lOVF9SWF9ET05FX1dBKTsNCisJ CW5hcGlfc2NoZWR1bGUoJmRldi0+bXQ3Ni5uYXBpWzJdKTsNCisJfQ0KKw0KKwlpZiAoaW50ciAm IE1UX0lOVF9NQ1VfQ01EKSB7DQorCQl1MzIgdmFsID0gbXQ3Nl9ycihkZXYsIE1UX01DVV9DTUQp Ow0KKw0KKwkJbXQ3Nl93cihkZXYsIE1UX01DVV9DTUQsIHZhbCk7DQorCQlpZiAodmFsICYgTVRf TUNVX0NNRF9FUlJPUl9NQVNLKSB7DQorCQkJZGV2LT5yZXNldF9zdGF0ZSA9IHZhbDsNCisJCQlp ZWVlODAyMTFfcXVldWVfd29yayhtdDc2X2h3KGRldiksICZkZXYtPnJlc2V0X3dvcmspOw0KKwkJ CXdha2VfdXAoJmRldi0+cmVzZXRfd2FpdCk7DQorCQl9DQorCX0NCisNCisJcmV0dXJuIElSUV9I QU5ETEVEOw0KK30NCisNCitzdGF0aWMgaW50IG10NzkxNV9wY2lfcHJvYmUoc3RydWN0IHBjaV9k ZXYgKnBkZXYsDQorCQkJICAgIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICppZCkNCit7DQor CXN0YXRpYyBjb25zdCBzdHJ1Y3QgbXQ3Nl9kcml2ZXJfb3BzIGRydl9vcHMgPSB7DQorCQkvKiB0 eHdpX3NpemUgPSB0eGQgc2l6ZSArIHR4cCBzaXplICovDQorCQkudHh3aV9zaXplID0gTVRfVFhE X1NJWkUgKyBzaXplb2Yoc3RydWN0IG10NzkxNV90eHApLA0KKwkJLmRydl9mbGFncyA9IE1UX0RS Vl9UWFdJX05PX0ZSRUUsDQorCQkuc3VydmV5X2ZsYWdzID0gU1VSVkVZX0lORk9fVElNRV9UWCB8 DQorCQkJCVNVUlZFWV9JTkZPX1RJTUVfUlggfA0KKwkJCQlTVVJWRVlfSU5GT19USU1FX0JTU19S WCwNCisJCS50eF9wcmVwYXJlX3NrYiA9IG10NzkxNV90eF9wcmVwYXJlX3NrYiwNCisJCS50eF9j b21wbGV0ZV9za2IgPSBtdDc5MTVfdHhfY29tcGxldGVfc2tiLA0KKwkJLnJ4X3NrYiA9IG10Nzkx NV9xdWV1ZV9yeF9za2IsDQorCQkucnhfcG9sbF9jb21wbGV0ZSA9IG10NzkxNV9yeF9wb2xsX2Nv bXBsZXRlLA0KKwkJLnN0YV9wcyA9IG10NzkxNV9zdGFfcHMsDQorCQkuc3RhX2FkZCA9IG10Nzkx NV9tYWNfc3RhX2FkZCwNCisJCS5zdGFfcmVtb3ZlID0gbXQ3OTE1X21hY19zdGFfcmVtb3ZlLA0K KwkJLnVwZGF0ZV9zdXJ2ZXkgPSBtdDc5MTVfdXBkYXRlX2NoYW5uZWwsDQorCX07DQorCXN0cnVj dCBtdDc5MTVfZGV2ICpkZXY7DQorCXN0cnVjdCBtdDc2X2RldiAqbWRldjsNCisJaW50IHJldDsN CisNCisJcmV0ID0gcGNpbV9lbmFibGVfZGV2aWNlKHBkZXYpOw0KKwlpZiAocmV0KQ0KKwkJcmV0 dXJuIHJldDsNCisNCisJcmV0ID0gcGNpbV9pb21hcF9yZWdpb25zKHBkZXYsIEJJVCgwKSwgcGNp X25hbWUocGRldikpOw0KKwlpZiAocmV0KQ0KKwkJcmV0dXJuIHJldDsNCisNCisJcGNpX3NldF9t YXN0ZXIocGRldik7DQorDQorCXJldCA9IHBjaV9zZXRfZG1hX21hc2socGRldiwgRE1BX0JJVF9N QVNLKDMyKSk7DQorCWlmIChyZXQpDQorCQlyZXR1cm4gcmV0Ow0KKw0KKwltZGV2ID0gbXQ3Nl9h bGxvY19kZXZpY2UoJnBkZXYtPmRldiwgc2l6ZW9mKCpkZXYpLCAmbXQ3OTE1X29wcywNCisJCQkJ ICZkcnZfb3BzKTsNCisJaWYgKCFtZGV2KQ0KKwkJcmV0dXJuIC1FTk9NRU07DQorDQorCWRldiA9 IGNvbnRhaW5lcl9vZihtZGV2LCBzdHJ1Y3QgbXQ3OTE1X2RldiwgbXQ3Nik7DQorDQorCW10NzZf bW1pb19pbml0KCZkZXYtPm10NzYsIHBjaW1faW9tYXBfdGFibGUocGRldilbMF0pOw0KKwltZGV2 LT5yZXYgPSAobXQ3OTE1X2wxX3JyKGRldiwgTVRfSFdfQ0hJUElEKSA8PCAxNikgfA0KKwkJICAg IChtdDc5MTVfbDFfcnIoZGV2LCBNVF9IV19SRVYpICYgMHhmZik7DQorCWRldl9kYmcobWRldi0+ ZGV2LCAiQVNJQyByZXZpc2lvbjogJTA0eFxuIiwgbWRldi0+cmV2KTsNCisNCisJLyogbWFzdGVy IHN3aXRjaCBvZiBQQ0llIHRudGVycnVwdCBlbmFibGUgKi8NCisJbXQ3OTE1X2wxX3dyKGRldiwg TVRfUENJRV9NQUNfSU5UX0VOQUJMRSwgMHhmZik7DQorDQorCXJldCA9IGRldm1fcmVxdWVzdF9p cnEobWRldi0+ZGV2LCBwZGV2LT5pcnEsIG10NzkxNV9pcnFfaGFuZGxlciwNCisJCQkgICAgICAg SVJRRl9TSEFSRUQsIEtCVUlMRF9NT0ROQU1FLCBkZXYpOw0KKwlpZiAocmV0KQ0KKwkJZ290byBl cnJvcjsNCisNCisJcmV0ID0gbXQ3OTE1X3JlZ2lzdGVyX2RldmljZShkZXYpOw0KKwlpZiAocmV0 KQ0KKwkJZ290byBlcnJvcjsNCisNCisJcmV0dXJuIDA7DQorZXJyb3I6DQorCWllZWU4MDIxMV9m cmVlX2h3KG10NzZfaHcoZGV2KSk7DQorCXJldHVybiByZXQ7DQorfQ0KKw0KK3N0YXRpYyB2b2lk IG10NzkxNV9wY2lfcmVtb3ZlKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQ0KK3sNCisJc3RydWN0IG10 NzZfZGV2ICptZGV2ID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpOw0KKwlzdHJ1Y3QgbXQ3OTE1X2Rl diAqZGV2ID0gY29udGFpbmVyX29mKG1kZXYsIHN0cnVjdCBtdDc5MTVfZGV2LCBtdDc2KTsNCisN CisJbXQ3OTE1X3VucmVnaXN0ZXJfZGV2aWNlKGRldik7DQorfQ0KKw0KK3N0cnVjdCBwY2lfZHJp dmVyIG10NzkxNV9wY2lfZHJpdmVyID0gew0KKwkubmFtZQkJPSBLQlVJTERfTU9ETkFNRSwNCisJ LmlkX3RhYmxlCT0gbXQ3OTE1X3BjaV9kZXZpY2VfdGFibGUsDQorCS5wcm9iZQkJPSBtdDc5MTVf cGNpX3Byb2JlLA0KKwkucmVtb3ZlCQk9IG10NzkxNV9wY2lfcmVtb3ZlLA0KK307DQorDQorbW9k dWxlX3BjaV9kcml2ZXIobXQ3OTE1X3BjaV9kcml2ZXIpOw0KKw0KK01PRFVMRV9ERVZJQ0VfVEFC TEUocGNpLCBtdDc5MTVfcGNpX2RldmljZV90YWJsZSk7DQorTU9EVUxFX0ZJUk1XQVJFKE1UNzkx NV9GSVJNV0FSRV9XQSk7DQorTU9EVUxFX0ZJUk1XQVJFKE1UNzkxNV9GSVJNV0FSRV9XTSk7DQor TU9EVUxFX0ZJUk1XQVJFKE1UNzkxNV9ST01fUEFUQ0gpOw0KK01PRFVMRV9MSUNFTlNFKCJEdWFs IEJTRC9HUEwiKTsNCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9t dDc2L210NzkxNS9yZWdzLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L210 NzkxNS9yZWdzLmgNCm5ldyBmaWxlIG1vZGUgMTAwNjQ0DQppbmRleCAwMDAwMDAwMDAwMDAuLmVm ODc1NzkwNTZmZQ0KLS0tIC9kZXYvbnVsbA0KKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVk aWF0ZWsvbXQ3Ni9tdDc5MTUvcmVncy5oDQpAQCAtMCwwICsxLDM0MyBAQA0KKy8qIFNQRFgtTGlj ZW5zZS1JZGVudGlmaWVyOiBJU0MgKi8NCisvKiBDb3B5cmlnaHQgKEMpIDIwMjAgTWVkaWFUZWsg SW5jLiAqLw0KKw0KKyNpZm5kZWYgX19NVDc5MTVfUkVHU19IDQorI2RlZmluZSBfX01UNzkxNV9S RUdTX0gNCisNCisvKiBNQ1UgV0ZETUExICovDQorI2RlZmluZSBNVF9NQ1VfV0ZETUExX0JBU0UJ CTB4MzAwMA0KKyNkZWZpbmUgTVRfTUNVX1dGRE1BMShvZnMpCQkoTVRfTUNVX1dGRE1BMV9CQVNF ICsgKG9mcykpDQorDQorI2RlZmluZSBNVF9NQ1VfSU5UX0VWRU5UCQlNVF9NQ1VfV0ZETUExKDB4 MTA4KQ0KKyNkZWZpbmUgTVRfTUNVX0lOVF9FVkVOVF9ETUFfU1RPUFBFRAlCSVQoMCkNCisjZGVm aW5lIE1UX01DVV9JTlRfRVZFTlRfRE1BX0lOSVQJQklUKDEpDQorI2RlZmluZSBNVF9NQ1VfSU5U X0VWRU5UX1NFUl9UUklHR0VSCUJJVCgyKQ0KKyNkZWZpbmUgTVRfTUNVX0lOVF9FVkVOVF9SRVNF VF9ET05FCUJJVCgzKQ0KKw0KKyNkZWZpbmUgTVRfUExFX0JBU0UJCQkweDgwMDANCisjZGVmaW5l IE1UX1BMRShvZnMpCQkJKE1UX1BMRV9CQVNFICsgKG9mcykpDQorDQorI2RlZmluZSBNVF9QTEVf RkxfUTBfQ1RSTAkJTVRfUExFKDB4MWIwKQ0KKyNkZWZpbmUgTVRfUExFX0ZMX1ExX0NUUkwJCU1U X1BMRSgweDFiNCkNCisjZGVmaW5lIE1UX1BMRV9GTF9RMl9DVFJMCQlNVF9QTEUoMHgxYjgpDQor I2RlZmluZSBNVF9QTEVfRkxfUTNfQ1RSTAkJTVRfUExFKDB4MWJjKQ0KKw0KKyNkZWZpbmUgTVRf UExFX0FDX1FFTVBUWShhYywgbikJCU1UX1BMRSgweDMwMCArIDB4MTAgKiAoYWMpICsgXA0KKwkJ CQkJICAgICAgICgobikgPDwgMikpDQorI2RlZmluZSBNVF9QTEVfQU1TRFVfUEFDS19NU0RVX0NO VChuKQlNVF9QTEUoMHgxMGUwICsgKChuKSA8PCAyKSkNCisNCisjZGVmaW5lIE1UX01EUF9CQVNF CQkJMHhmMDAwDQorI2RlZmluZSBNVF9NRFAob2ZzKQkJCShNVF9NRFBfQkFTRSArIChvZnMpKQ0K Kw0KKyNkZWZpbmUgTVRfTURQX0RDUjAJCQlNVF9NRFAoMHgwMDApDQorI2RlZmluZSBNVF9NRFBf RENSMF9EQU1TRFVfRU4JCUJJVCgxNSkNCisNCisjZGVmaW5lIE1UX01EUF9EQ1IxCQkJTVRfTURQ KDB4MDA0KQ0KKyNkZWZpbmUgTVRfTURQX0RDUjFfTUFYX1JYX0xFTgkJR0VOTUFTSygxNSwgMykN CisNCisjZGVmaW5lIE1UX01EUF9CTlJDRlIwKF9iYW5kKQkJTVRfTURQKDB4MDcwICsgKChfYmFu ZCkgPDwgOCkpDQorI2RlZmluZSBNVF9NRFBfUkNGUjBfTUNVX1JYX01HTVQJR0VOTUFTSyg1LCA0 KQ0KKyNkZWZpbmUgTVRfTURQX1JDRlIwX01DVV9SWF9DVExfTk9OX0JBUglHRU5NQVNLKDcsIDYp DQorI2RlZmluZSBNVF9NRFBfUkNGUjBfTUNVX1JYX0NUTF9CQVIJR0VOTUFTSyg5LCA4KQ0KKw0K KyNkZWZpbmUgTVRfTURQX0JOUkNGUjEoX2JhbmQpCQlNVF9NRFAoMHgwNzQgKyAoKF9iYW5kKSA8 PCA4KSkNCisjZGVmaW5lIE1UX01EUF9SQ0ZSMV9NQ1VfUlhfQllQQVNTCUdFTk1BU0soMjMsIDIy KQ0KKyNkZWZpbmUgTVRfTURQX1JDRlIxX1JYX0RST1BQRURfVUNBU1QJR0VOTUFTSygyOCwgMjcp DQorI2RlZmluZSBNVF9NRFBfUkNGUjFfUlhfRFJPUFBFRF9NQ0FTVAlHRU5NQVNLKDMwLCAyOSkN CisjZGVmaW5lIE1UX01EUF9UT19ISUYJCQkwDQorI2RlZmluZSBNVF9NRFBfVE9fV00JCQkxDQor DQorLyogVE1BQzogYmFuZCAwKDB4MjEwMDApLCBiYW5kIDEoMHhhMTAwMCkgKi8NCisjZGVmaW5l IE1UX1dGX1RNQUNfQkFTRShfYmFuZCkJCSgoX2JhbmQpID8gMHhhMTAwMCA6IDB4MjEwMDApDQor I2RlZmluZSBNVF9XRl9UTUFDKF9iYW5kLCBvZnMpCQkoTVRfV0ZfVE1BQ19CQVNFKF9iYW5kKSAr IChvZnMpKQ0KKw0KKyNkZWZpbmUgTVRfVE1BQ19DRFRSKF9iYW5kKQkJTVRfV0ZfVE1BQyhfYmFu ZCwgMHgwOTApDQorI2RlZmluZSBNVF9UTUFDX09EVFIoX2JhbmQpCQlNVF9XRl9UTUFDKF9iYW5k LCAweDA5NCkNCisjZGVmaW5lIE1UX1RJTUVPVVRfVkFMX1BMQ1AJCUdFTk1BU0soMTUsIDApDQor I2RlZmluZSBNVF9USU1FT1VUX1ZBTF9DQ0EJCUdFTk1BU0soMzEsIDE2KQ0KKw0KKyNkZWZpbmUg TVRfVE1BQ19JQ1IwKF9iYW5kKQkJTVRfV0ZfVE1BQyhfYmFuZCwgMHgwYTQpDQorI2RlZmluZSBN VF9JRlNfRUlGUwkJCUdFTk1BU0soOCwgMCkNCisjZGVmaW5lIE1UX0lGU19SSUZTCQkJR0VOTUFT SygxNCwgMTApDQorI2RlZmluZSBNVF9JRlNfU0lGUwkJCUdFTk1BU0soMjIsIDE2KQ0KKyNkZWZp bmUgTVRfSUZTX1NMT1QJCQlHRU5NQVNLKDMwLCAyNCkNCisNCisjZGVmaW5lIE1UX1RNQUNfQ1RD UjAoX2JhbmQpCQkJTVRfV0ZfVE1BQyhfYmFuZCwgMHgwZjQpDQorI2RlZmluZSBNVF9UTUFDX0NU Q1IwX0lOU19ERExNVF9SRUZUSU1FCQlHRU5NQVNLKDUsIDApDQorI2RlZmluZSBNVF9UTUFDX0NU Q1IwX0lOU19ERExNVF9FTgkJQklUKDE3KQ0KKyNkZWZpbmUgTVRfVE1BQ19DVENSMF9JTlNfRERM TVRfVkhUX1NNUERVX0VOCUJJVCgxOCkNCisNCisvKiBETUEgQmFuZCAwICovDQorI2RlZmluZSBN VF9XRl9ETUFfQkFTRQkJCTB4MjFlMDANCisjZGVmaW5lIE1UX1dGX0RNQShvZnMpCQkJKE1UX1dG X0RNQV9CQVNFICsgKG9mcykpDQorDQorI2RlZmluZSBNVF9ETUFfRENSMAkJCU1UX1dGX0RNQSgw eDAwMCkNCisjZGVmaW5lIE1UX0RNQV9EQ1IwX01BWF9SWF9MRU4JCUdFTk1BU0soMTUsIDMpDQor DQorLyogTUlCOiBiYW5kIDAoMHgyNDgwMCksIGJhbmQgMSgweGE0ODAwKSAqLw0KKyNkZWZpbmUg TVRfV0ZfTUlCX0JBU0UoX2JhbmQpCQkoKF9iYW5kKSA/IDB4YTQ4MDAgOiAweDI0ODAwKQ0KKyNk ZWZpbmUgTVRfV0ZfTUlCKF9iYW5kLCBvZnMpCQkoTVRfV0ZfTUlCX0JBU0UoX2JhbmQpICsgKG9m cykpDQorDQorI2RlZmluZSBNVF9NSUJfU0RSMyhfYmFuZCkJCU1UX1dGX01JQihfYmFuZCwgMHgw MTQpDQorI2RlZmluZSBNVF9NSUJfU0RSM19GQ1NfRVJSX01BU0sJR0VOTUFTSygxNSwgMCkNCisN CisjZGVmaW5lIE1UX01JQl9TRFI5KF9iYW5kKQkJTVRfV0ZfTUlCKF9iYW5kLCAweDAyYykNCisj ZGVmaW5lIE1UX01JQl9TRFI5X0JVU1lfTUFTSwkJR0VOTUFTSygyMywgMCkNCisNCisjZGVmaW5l IE1UX01JQl9TRFIxNihfYmFuZCkJCU1UX1dGX01JQihfYmFuZCwgMHgwNDgpDQorI2RlZmluZSBN VF9NSUJfU0RSMTZfQlVTWV9NQVNLCQlHRU5NQVNLKDIzLCAwKQ0KKw0KKyNkZWZpbmUgTVRfTUlC X1NEUjM2KF9iYW5kKQkJTVRfV0ZfTUlCKF9iYW5kLCAweDA5OCkNCisjZGVmaW5lIE1UX01JQl9T RFIzNl9UWFRJTUVfTUFTSwlHRU5NQVNLKDIzLCAwKQ0KKyNkZWZpbmUgTVRfTUlCX1NEUjM3KF9i YW5kKQkJTVRfV0ZfTUlCKF9iYW5kLCAweDA5YykNCisjZGVmaW5lIE1UX01JQl9TRFIzN19SWFRJ TUVfTUFTSwlHRU5NQVNLKDIzLCAwKQ0KKw0KKyNkZWZpbmUgTVRfTUlCX01CX1NEUjAoX2JhbmQs IG4pCU1UX1dGX01JQihfYmFuZCwgMHgxMDAgKyAoKG4pIDw8IDQpKQ0KKyNkZWZpbmUgTVRfTUlC X1JUU19SRVRSSUVTX0NPVU5UX01BU0sJR0VOTUFTSygzMSwgMTYpDQorI2RlZmluZSBNVF9NSUJf UlRTX0NPVU5UX01BU0sJCUdFTk1BU0soMTUsIDApDQorDQorI2RlZmluZSBNVF9NSUJfTUJfU0RS MShfYmFuZCwgbikJTVRfV0ZfTUlCKF9iYW5kLCAweDEwNCArICgobikgPDwgNCkpDQorI2RlZmlu ZSBNVF9NSUJfQkFfTUlTU19DT1VOVF9NQVNLCUdFTk1BU0soMTUsIDApDQorI2RlZmluZSBNVF9N SUJfQUNLX0ZBSUxfQ09VTlRfTUFTSwlHRU5NQVNLKDMxLCAxNikNCisNCisjZGVmaW5lIE1UX01J Ql9NQl9TRFIyKF9iYW5kLCBuKQlNVF9XRl9NSUIoX2JhbmQsIDB4MTA4ICsgKChuKSA8PCA0KSkN CisjZGVmaW5lIE1UX01JQl9GUkFNRV9SRVRSSUVTX0NPVU5UX01BU0sJR0VOTUFTSygxNSwgMCkN CisNCisjZGVmaW5lIE1UX1RYX0FHR19DTlQoX2JhbmQsIG4pCQlNVF9XRl9NSUIoX2JhbmQsIDB4 MGE4ICsgKChuKSA8PCAyKSkNCisjZGVmaW5lIE1UX1RYX0FHR19DTlQyKF9iYW5kLCBuKQlNVF9X Rl9NSUIoX2JhbmQsIDB4MTY0ICsgKChuKSA8PCAyKSkNCisjZGVmaW5lIE1UX01JQl9BUk5HKF9i YW5kLCBuKQkJTVRfV0ZfTUlCKF9iYW5kLCAweDRiOCArICgobikgPDwgMikpDQorI2RlZmluZSBN VF9NSUJfQVJOQ1JfUkFOR0UodmFsLCBuKQkoKCh2YWwpID4+ICgobikgPDwgMykpICYgR0VOTUFT Syg3LCAwKSkNCisNCisjZGVmaW5lIE1UX1dUQkxPTl9UT1BfQkFTRQkJMHgzNDAwMA0KKyNkZWZp bmUgTVRfV1RCTE9OX1RPUChvZnMpCQkoTVRfV1RCTE9OX1RPUF9CQVNFICsgKG9mcykpDQorI2Rl ZmluZSBNVF9XVEJMT05fVE9QX1dEVUNSCQlNVF9XVEJMT05fVE9QKDB4MCkNCisjZGVmaW5lIE1U X1dUQkxPTl9UT1BfV0RVQ1JfR1JPVVAJR0VOTUFTSygyLCAwKQ0KKw0KKyNkZWZpbmUgTVRfV1RC TF9VUERBVEUJCQlNVF9XVEJMT05fVE9QKDB4MDMwKQ0KKyNkZWZpbmUgTVRfV1RCTF9VUERBVEVf V0xBTl9JRFgJCUdFTk1BU0soOSwgMCkNCisjZGVmaW5lIE1UX1dUQkxfVVBEQVRFX0FETV9DT1VO VF9DTEVBUglCSVQoMTIpDQorI2RlZmluZSBNVF9XVEJMX1VQREFURV9CVVNZCQlCSVQoMzEpDQor DQorI2RlZmluZSBNVF9XVEJMX0JBU0UJCQkweDM4MDAwDQorI2RlZmluZSBNVF9XVEJMX0xNQUNf SUQJCQlHRU5NQVNLKDE0LCA4KQ0KKyNkZWZpbmUgTVRfV1RCTF9MTUFDX0RXCQkJR0VOTUFTSyg3 LCAyKQ0KKyNkZWZpbmUgTVRfV1RCTF9MTUFDX09GRlMoX2lkLCBfZHcpCShNVF9XVEJMX0JBU0Ug fCBcDQorCQkJCQlGSUVMRF9QUkVQKE1UX1dUQkxfTE1BQ19JRCwgX2lkKSB8IFwNCisJCQkJCUZJ RUxEX1BSRVAoTVRfV1RCTF9MTUFDX0RXLCBfZHcpKQ0KKw0KKy8qIEFHRzogYmFuZCAwKDB4MjA4 MDApLCBiYW5kIDEoMHhhMDgwMCkgKi8NCisjZGVmaW5lIE1UX1dGX0FHR19CQVNFKF9iYW5kKQkJ KChfYmFuZCkgPyAweGEwODAwIDogMHgyMDgwMCkNCisjZGVmaW5lIE1UX1dGX0FHRyhfYmFuZCwg b2ZzKQkJKE1UX1dGX0FHR19CQVNFKF9iYW5kKSArIChvZnMpKQ0KKw0KKyNkZWZpbmUgTVRfQUdH X0FDUjAoX2JhbmQpCQlNVF9XRl9BR0coX2JhbmQsIDB4MDg0KQ0KKyNkZWZpbmUgTVRfQUdHX0FD Ul9DRkVORF9SQVRFCQlHRU5NQVNLKDEzLCAwKQ0KKyNkZWZpbmUgTVRfQUdHX0FDUl9CQVJfUkFU RQkJR0VOTUFTSygyOSwgMTYpDQorDQorLyogQVJCOiBiYW5kIDAoMHgyMGMwMCksIGJhbmQgMSgw eGEwYzAwKSAqLw0KKyNkZWZpbmUgTVRfV0ZfQVJCX0JBU0UoX2JhbmQpCQkoKF9iYW5kKSA/IDB4 YTBjMDAgOiAweDIwYzAwKQ0KKyNkZWZpbmUgTVRfV0ZfQVJCKF9iYW5kLCBvZnMpCQkoTVRfV0Zf QVJCX0JBU0UoX2JhbmQpICsgKG9mcykpDQorDQorI2RlZmluZSBNVF9BUkJfU0NSKF9iYW5kKQkJ TVRfV0ZfQVJCKF9iYW5kLCAweDA4MCkNCisjZGVmaW5lIE1UX0FSQl9TQ1JfVFhfRElTQUJMRQkJ QklUKDgpDQorI2RlZmluZSBNVF9BUkJfU0NSX1JYX0RJU0FCTEUJCUJJVCg5KQ0KKw0KKy8qIFJN QUM6IGJhbmQgMCgweDIxNDAwKSwgYmFuZCAxKDB4YTE0MDApICovDQorI2RlZmluZSBNVF9XRl9S TUFDX0JBU0UoX2JhbmQpCQkoKF9iYW5kKSA/IDB4YTE0MDAgOiAweDIxNDAwKQ0KKyNkZWZpbmUg TVRfV0ZfUk1BQyhfYmFuZCwgb2ZzKQkJKE1UX1dGX1JNQUNfQkFTRShfYmFuZCkgKyAob2ZzKSkN CisNCisjZGVmaW5lIE1UX1dGX1JGQ1IoX2JhbmQpCQlNVF9XRl9STUFDKF9iYW5kLCAweDAwMCkN CisjZGVmaW5lIE1UX1dGX1JGQ1JfRFJPUF9TVEJDX01VTFRJCUJJVCgwKQ0KKyNkZWZpbmUgTVRf V0ZfUkZDUl9EUk9QX0ZDU0ZBSUwJCUJJVCgxKQ0KKyNkZWZpbmUgTVRfV0ZfUkZDUl9EUk9QX1ZF UlNJT04JCUJJVCgzKQ0KKyNkZWZpbmUgTVRfV0ZfUkZDUl9EUk9QX1BST0JFUkVRCUJJVCg0KQ0K KyNkZWZpbmUgTVRfV0ZfUkZDUl9EUk9QX01DQVNUCQlCSVQoNSkNCisjZGVmaW5lIE1UX1dGX1JG Q1JfRFJPUF9CQ0FTVAkJQklUKDYpDQorI2RlZmluZSBNVF9XRl9SRkNSX0RST1BfTUNBU1RfRklM VEVSRUQJQklUKDcpDQorI2RlZmluZSBNVF9XRl9SRkNSX0RST1BfQTNfTUFDCQlCSVQoOCkNCisj ZGVmaW5lIE1UX1dGX1JGQ1JfRFJPUF9BM19CU1NJRAlCSVQoOSkNCisjZGVmaW5lIE1UX1dGX1JG Q1JfRFJPUF9BMl9CU1NJRAlCSVQoMTApDQorI2RlZmluZSBNVF9XRl9SRkNSX0RST1BfT1RIRVJf QkVBQ09OCUJJVCgxMSkNCisjZGVmaW5lIE1UX1dGX1JGQ1JfRFJPUF9GUkFNRV9SRVBPUlQJQklU KDEyKQ0KKyNkZWZpbmUgTVRfV0ZfUkZDUl9EUk9QX0NUTF9SU1YJCUJJVCgxMykNCisjZGVmaW5l IE1UX1dGX1JGQ1JfRFJPUF9DVFMJCUJJVCgxNCkNCisjZGVmaW5lIE1UX1dGX1JGQ1JfRFJPUF9S VFMJCUJJVCgxNSkNCisjZGVmaW5lIE1UX1dGX1JGQ1JfRFJPUF9EVVBMSUNBVEUJQklUKDE2KQ0K KyNkZWZpbmUgTVRfV0ZfUkZDUl9EUk9QX09USEVSX0JTUwlCSVQoMTcpDQorI2RlZmluZSBNVF9X Rl9SRkNSX0RST1BfT1RIRVJfVUMJQklUKDE4KQ0KKyNkZWZpbmUgTVRfV0ZfUkZDUl9EUk9QX09U SEVSX1RJTQlCSVQoMTkpDQorI2RlZmluZSBNVF9XRl9SRkNSX0RST1BfTkRQQQkJQklUKDIwKQ0K KyNkZWZpbmUgTVRfV0ZfUkZDUl9EUk9QX1VOV0FOVEVEX0NUTAlCSVQoMjEpDQorDQorI2RlZmlu ZSBNVF9XRl9SRkNSMShfYmFuZCkJCU1UX1dGX1JNQUMoX2JhbmQsIDB4MDA0KQ0KKyNkZWZpbmUg TVRfV0ZfUkZDUjFfRFJPUF9BQ0sJCUJJVCg0KQ0KKyNkZWZpbmUgTVRfV0ZfUkZDUjFfRFJPUF9C Rl9QT0xMCUJJVCg1KQ0KKyNkZWZpbmUgTVRfV0ZfUkZDUjFfRFJPUF9CQQkJQklUKDYpDQorI2Rl ZmluZSBNVF9XRl9SRkNSMV9EUk9QX0NGRU5ECQlCSVQoNykNCisjZGVmaW5lIE1UX1dGX1JGQ1Ix X0RST1BfQ0ZBQ0sJCUJJVCg4KQ0KKw0KKyNkZWZpbmUgTVRfV0ZfUk1BQ19NSUJfVElNRTAoX2Jh bmQpCU1UX1dGX1JNQUMoX2JhbmQsIDB4MDNjNCkNCisjZGVmaW5lIE1UX1dGX1JNQUNfTUlCX1JY VElNRV9DTFIJQklUKDMxKQ0KKyNkZWZpbmUgTVRfV0ZfUk1BQ19NSUJfUlhUSU1FX0VOCUJJVCgz MCkNCisNCisjZGVmaW5lIE1UX1dGX1JNQUNfTUlCX0FJUlRJTUUxNChfYmFuZCkJTVRfV0ZfUk1B QyhfYmFuZCwgMHgwM2I4KQ0KKyNkZWZpbmUgTVRfTUlCX09CU1NUSU1FX01BU0sJCUdFTk1BU0so MjMsIDApDQorI2RlZmluZSBNVF9XRl9STUFDX01JQl9BSVJUSU1FMChfYmFuZCkJTVRfV0ZfUk1B QyhfYmFuZCwgMHgwMzgwKQ0KKw0KKy8qIFdGRE1BMCAqLw0KKyNkZWZpbmUgTVRfV0ZETUEwX0JB U0UJCQkweGQ0MDAwDQorI2RlZmluZSBNVF9XRkRNQTAob2ZzKQkJCShNVF9XRkRNQTBfQkFTRSAr IChvZnMpKQ0KKw0KKyNkZWZpbmUgTVRfV0ZETUEwX1JTVAkJCU1UX1dGRE1BMCgweDEwMCkNCisj ZGVmaW5lIE1UX1dGRE1BMF9SU1RfTE9HSUNfUlNUCQlCSVQoNCkNCisjZGVmaW5lIE1UX1dGRE1B MF9SU1RfRE1BU0hETF9BTExfUlNUCUJJVCg1KQ0KKw0KKyNkZWZpbmUgTVRfV0ZETUEwX0JVU1lf RU5BCQlNVF9XRkRNQTAoMHgxM2MpDQorI2RlZmluZSBNVF9XRkRNQTBfQlVTWV9FTkFfVFhfRklG TzAJQklUKDApDQorI2RlZmluZSBNVF9XRkRNQTBfQlVTWV9FTkFfVFhfRklGTzEJQklUKDEpDQor I2RlZmluZSBNVF9XRkRNQTBfQlVTWV9FTkFfUlhfRklGTwlCSVQoMikNCisNCisjZGVmaW5lIE1U X1dGRE1BMF9HTE9fQ0ZHCQlNVF9XRkRNQTAoMHgyMDgpDQorI2RlZmluZSBNVF9XRkRNQTBfR0xP X0NGR19UWF9ETUFfRU4JQklUKDApDQorI2RlZmluZSBNVF9XRkRNQTBfR0xPX0NGR19SWF9ETUFf RU4JQklUKDIpDQorDQorI2RlZmluZSBNVF9XRkRNQTBfUlNUX0RUWF9QVFIJCU1UX1dGRE1BMCgw eDIwYykNCisjZGVmaW5lIE1UX1dGRE1BMF9QUklfRExZX0lOVF9DRkcwCU1UX1dGRE1BMCgweDJm MCkNCisNCisjZGVmaW5lIE1UX1JYX0RBVEFfUklOR19CQVNFCQlNVF9XRkRNQTAoMHg1MDApDQor DQorI2RlZmluZSBNVF9XRkRNQTBfUlhfUklORzBfRVhUX0NUUkwJTVRfV0ZETUEwKDB4NjgwKQ0K KyNkZWZpbmUgTVRfV0ZETUEwX1JYX1JJTkcxX0VYVF9DVFJMCU1UX1dGRE1BMCgweDY4NCkNCisj ZGVmaW5lIE1UX1dGRE1BMF9SWF9SSU5HMl9FWFRfQ1RSTAlNVF9XRkRNQTAoMHg2ODgpDQorDQor LyogV0ZETUExICovDQorI2RlZmluZSBNVF9XRkRNQTFfQkFTRQkJCTB4ZDUwMDANCisjZGVmaW5l IE1UX1dGRE1BMShvZnMpCQkJKE1UX1dGRE1BMV9CQVNFICsgKG9mcykpDQorDQorI2RlZmluZSBN VF9XRkRNQTFfUlNUCQkJTVRfV0ZETUExKDB4MTAwKQ0KKyNkZWZpbmUgTVRfV0ZETUExX1JTVF9M T0dJQ19SU1QJCUJJVCg0KQ0KKyNkZWZpbmUgTVRfV0ZETUExX1JTVF9ETUFTSERMX0FMTF9SU1QJ QklUKDUpDQorDQorI2RlZmluZSBNVF9XRkRNQTFfQlVTWV9FTkEJCU1UX1dGRE1BMSgweDEzYykN CisjZGVmaW5lIE1UX1dGRE1BMV9CVVNZX0VOQV9UWF9GSUZPMAlCSVQoMCkNCisjZGVmaW5lIE1U X1dGRE1BMV9CVVNZX0VOQV9UWF9GSUZPMQlCSVQoMSkNCisjZGVmaW5lIE1UX1dGRE1BMV9CVVNZ X0VOQV9SWF9GSUZPCUJJVCgyKQ0KKw0KKyNkZWZpbmUgTVRfTUNVX0NNRAkJCU1UX1dGRE1BMSgw eDFmMCkNCisjZGVmaW5lIE1UX01DVV9DTURfU1RPUF9ETUFfRldfUkVMT0FECUJJVCgxKQ0KKyNk ZWZpbmUgTVRfTUNVX0NNRF9TVE9QX0RNQQkJQklUKDIpDQorI2RlZmluZSBNVF9NQ1VfQ01EX1JF U0VUX0RPTkUJCUJJVCgzKQ0KKyNkZWZpbmUgTVRfTUNVX0NNRF9SRUNPVkVSWV9ET05FCUJJVCg0 KQ0KKyNkZWZpbmUgTVRfTUNVX0NNRF9OT1JNQUxfU1RBVEUJCUJJVCg1KQ0KKyNkZWZpbmUgTVRf TUNVX0NNRF9FUlJPUl9NQVNLCQlHRU5NQVNLKDUsIDEpDQorDQorI2RlZmluZSBNVF9XRkRNQTFf R0xPX0NGRwkJTVRfV0ZETUExKDB4MjA4KQ0KKyNkZWZpbmUgTVRfV0ZETUExX0dMT19DRkdfVFhf RE1BX0VOCUJJVCgwKQ0KKyNkZWZpbmUgTVRfV0ZETUExX0dMT19DRkdfUlhfRE1BX0VOCUJJVCgy KQ0KKyNkZWZpbmUgTVRfV0ZETUExX0dMT19DRkdfT01JVF9UWF9JTkZPCUJJVCgyOCkNCisjZGVm aW5lIE1UX1dGRE1BMV9HTE9fQ0ZHX09NSVRfUlhfSU5GTwlCSVQoMjcpDQorDQorI2RlZmluZSBN VF9XRkRNQTFfUlNUX0RUWF9QVFIJCU1UX1dGRE1BMSgweDIwYykNCisjZGVmaW5lIE1UX1dGRE1B MV9QUklfRExZX0lOVF9DRkcwCU1UX1dGRE1BMSgweDJmMCkNCisNCisjZGVmaW5lIE1UX1RYX1JJ TkdfQkFTRQkJCU1UX1dGRE1BMSgweDMwMCkNCisjZGVmaW5lIE1UX1JYX0VWRU5UX1JJTkdfQkFT RQkJTVRfV0ZETUExKDB4NTAwKQ0KKw0KKyNkZWZpbmUgTVRfV0ZETUExX1RYX1JJTkcwX0VYVF9D VFJMCU1UX1dGRE1BMSgweDYwMCkNCisjZGVmaW5lIE1UX1dGRE1BMV9UWF9SSU5HMV9FWFRfQ1RS TAlNVF9XRkRNQTEoMHg2MDQpDQorI2RlZmluZSBNVF9XRkRNQTFfVFhfUklORzJfRVhUX0NUUkwJ TVRfV0ZETUExKDB4NjA4KQ0KKyNkZWZpbmUgTVRfV0ZETUExX1RYX1JJTkczX0VYVF9DVFJMCU1U X1dGRE1BMSgweDYwYykNCisjZGVmaW5lIE1UX1dGRE1BMV9UWF9SSU5HNF9FWFRfQ1RSTAlNVF9X RkRNQTEoMHg2MTApDQorI2RlZmluZSBNVF9XRkRNQTFfVFhfUklORzVfRVhUX0NUUkwJTVRfV0ZE TUExKDB4NjE0KQ0KKyNkZWZpbmUgTVRfV0ZETUExX1RYX1JJTkc2X0VYVF9DVFJMCU1UX1dGRE1B MSgweDYxOCkNCisjZGVmaW5lIE1UX1dGRE1BMV9UWF9SSU5HN19FWFRfQ1RSTAlNVF9XRkRNQTEo MHg2MWMpDQorDQorI2RlZmluZSBNVF9XRkRNQTFfVFhfUklORzE2X0VYVF9DVFJMCU1UX1dGRE1B MSgweDY0MCkNCisjZGVmaW5lIE1UX1dGRE1BMV9UWF9SSU5HMTdfRVhUX0NUUkwJTVRfV0ZETUEx KDB4NjQ0KQ0KKyNkZWZpbmUgTVRfV0ZETUExX1RYX1JJTkcxOF9FWFRfQ1RSTAlNVF9XRkRNQTEo MHg2NDgpDQorI2RlZmluZSBNVF9XRkRNQTFfVFhfUklORzE5X0VYVF9DVFJMCU1UX1dGRE1BMSgw eDY0YykNCisjZGVmaW5lIE1UX1dGRE1BMV9UWF9SSU5HMjBfRVhUX0NUUkwJTVRfV0ZETUExKDB4 NjUwKQ0KKyNkZWZpbmUgTVRfV0ZETUExX1RYX1JJTkcyMV9FWFRfQ1RSTAlNVF9XRkRNQTEoMHg2 NTQpDQorI2RlZmluZSBNVF9XRkRNQTFfVFhfUklORzIyX0VYVF9DVFJMCU1UX1dGRE1BMSgweDY1 OCkNCisjZGVmaW5lIE1UX1dGRE1BMV9UWF9SSU5HMjNfRVhUX0NUUkwJTVRfV0ZETUExKDB4NjVj KQ0KKw0KKyNkZWZpbmUgTVRfV0ZETUExX1JYX1JJTkcwX0VYVF9DVFJMCU1UX1dGRE1BMSgweDY4 MCkNCisjZGVmaW5lIE1UX1dGRE1BMV9SWF9SSU5HMV9FWFRfQ1RSTAlNVF9XRkRNQTEoMHg2ODQp DQorI2RlZmluZSBNVF9XRkRNQTFfUlhfUklORzJfRVhUX0NUUkwJTVRfV0ZETUExKDB4Njg4KQ0K KyNkZWZpbmUgTVRfV0ZETUExX1JYX1JJTkczX0VYVF9DVFJMCU1UX1dGRE1BMSgweDY4YykNCisN CisvKiBXRkRNQSBDU1IgKi8NCisjZGVmaW5lIE1UX1dGRE1BX0VYVF9DU1JfQkFTRQkJMHhkNzAw MA0KKyNkZWZpbmUgTVRfV0ZETUFfRVhUX0NTUihvZnMpCQkoTVRfV0ZETUFfRVhUX0NTUl9CQVNF ICsgKG9mcykpDQorDQorI2RlZmluZSBNVF9JTlRfU09VUkNFX0NTUgkJTVRfV0ZETUFfRVhUX0NT UigweDEwKQ0KKyNkZWZpbmUgTVRfSU5UX01BU0tfQ1NSCQkJTVRfV0ZETUFfRVhUX0NTUigweDE0 KQ0KKyNkZWZpbmUgTVRfSU5UX1JYX0RPTkVfREFUQQkJQklUKDE2KQ0KKyNkZWZpbmUgTVRfSU5U X1JYX0RPTkVfV00JCUJJVCgwKQ0KKyNkZWZpbmUgTVRfSU5UX1JYX0RPTkVfV0EJCUJJVCgxKQ0K KyNkZWZpbmUgTVRfSU5UX1JYX0RPTkUoX24pCQkoKF9uKSA/IEJJVCgoX24pIC0gMSkgOiBCSVQo MTYpKQ0KKyNkZWZpbmUgTVRfSU5UX1JYX0RPTkVfQUxMCQkoQklUKDApIHwgQklUKDEpIHwgQklU KDE2KSkNCisjZGVmaW5lIE1UX0lOVF9UWF9ET05FX0FMTAkJKEJJVCgxNSkgfCBHRU5NQVNLKDI3 LCAyNikgfCBCSVQoMzApKQ0KKyNkZWZpbmUgTVRfSU5UX01DVV9DTUQJCQlCSVQoMjkpDQorDQor I2RlZmluZSBNVF9XRkRNQV9FWFRfQ1NSX0hJRl9NSVNDCU1UX1dGRE1BX0VYVF9DU1IoMHg0NCkN CisjZGVmaW5lIE1UX1dGRE1BX0VYVF9DU1JfSElGX01JU0NfQlVTWQlCSVQoMCkNCisNCisvKiBX RkRNQTAgUENJRTEgKi8NCisjZGVmaW5lIE1UX1dGRE1BMF9QQ0lFMV9CQVNFCQkJMHhkODAwMA0K KyNkZWZpbmUgTVRfV0ZETUEwX1BDSUUxKG9mcykJCQkoTVRfV0ZETUEwX1BDSUUxX0JBU0UgKyAo b2ZzKSkNCisNCisjZGVmaW5lIE1UX1dGRE1BMF9QQ0lFMV9CVVNZX0VOQQkJTVRfV0ZETUEwX1BD SUUxKDB4MTNjKQ0KKyNkZWZpbmUgTVRfV0ZETUEwX1BDSUUxX0JVU1lfRU5BX1RYX0ZJRk8wCUJJ VCgwKQ0KKyNkZWZpbmUgTVRfV0ZETUEwX1BDSUUxX0JVU1lfRU5BX1RYX0ZJRk8xCUJJVCgxKQ0K KyNkZWZpbmUgTVRfV0ZETUEwX1BDSUUxX0JVU1lfRU5BX1JYX0ZJRk8JQklUKDIpDQorDQorLyog V0ZETUExIFBDSUUxICovDQorI2RlZmluZSBNVF9XRkRNQTFfUENJRTFfQkFTRQkJCTB4ZDkwMDAN CisjZGVmaW5lIE1UX1dGRE1BMV9QQ0lFMShvZnMpCQkJKE1UX1dGRE1BMF9QQ0lFMV9CQVNFICsg KG9mcykpDQorDQorI2RlZmluZSBNVF9XRkRNQTFfUENJRTFfQlVTWV9FTkEJCU1UX1dGRE1BMV9Q Q0lFMSgweDEzYykNCisjZGVmaW5lIE1UX1dGRE1BMV9QQ0lFMV9CVVNZX0VOQV9UWF9GSUZPMAlC SVQoMCkNCisjZGVmaW5lIE1UX1dGRE1BMV9QQ0lFMV9CVVNZX0VOQV9UWF9GSUZPMQlCSVQoMSkN CisjZGVmaW5lIE1UX1dGRE1BMV9QQ0lFMV9CVVNZX0VOQV9SWF9GSUZPCUJJVCgyKQ0KKw0KKyNk ZWZpbmUgTVRfSU5GUkFfQ0ZHX0JBU0UJCTB4ZjEwMDANCisjZGVmaW5lIE1UX0lORlJBKG9mcykJ CQkoTVRfSU5GUkFfQ0ZHX0JBU0UgKyAob2ZzKSkNCisNCisjZGVmaW5lIE1UX0hJRl9SRU1BUF9M MQkJCU1UX0lORlJBKDB4MWFjKQ0KKyNkZWZpbmUgTVRfSElGX1JFTUFQX0wxX01BU0sJCUdFTk1B U0soMTUsIDApDQorI2RlZmluZSBNVF9ISUZfUkVNQVBfTDFfT0ZGU0VUCQlHRU5NQVNLKDE1LCAw KQ0KKyNkZWZpbmUgTVRfSElGX1JFTUFQX0wxX0JBU0UJCUdFTk1BU0soMzEsIDE2KQ0KKyNkZWZp bmUgTVRfSElGX1JFTUFQX0JBU0VfTDEJCTB4ZTAwMDANCisNCisjZGVmaW5lIE1UX0hJRl9SRU1B UF9MMgkJCU1UX0lORlJBKDB4MWIwKQ0KKyNkZWZpbmUgTVRfSElGX1JFTUFQX0wyX01BU0sJCUdF Tk1BU0soMTksIDApDQorI2RlZmluZSBNVF9ISUZfUkVNQVBfTDJfT0ZGU0VUCQlHRU5NQVNLKDEx LCAwKQ0KKyNkZWZpbmUgTVRfSElGX1JFTUFQX0wyX0JBU0UJCUdFTk1BU0soMzEsIDEyKQ0KKyNk ZWZpbmUgTVRfSElGX1JFTUFQX0JBU0VfTDIJCTB4MDAwMDANCisNCisjZGVmaW5lIE1UX1RPUF9C QVNFCQkJMHgxODA2MDAwMA0KKyNkZWZpbmUgTVRfVE9QKG9mcykJCQkoTVRfVE9QX0JBU0UgKyAo b2ZzKSkNCisNCisjZGVmaW5lIE1UX1RPUF9MUENSX0hPU1RfQkFORDAJCU1UX1RPUCgweDEwKQ0K KyNkZWZpbmUgTVRfVE9QX0xQQ1JfSE9TVF9GV19PV04JCUJJVCgwKQ0KKyNkZWZpbmUgTVRfVE9Q X0xQQ1JfSE9TVF9EUlZfT1dOCUJJVCgxKQ0KKw0KKyNkZWZpbmUgTVRfVE9QX01JU0MJCQlNVF9U T1AoMHhmMCkNCisjZGVmaW5lIE1UX1RPUF9NSVNDX0ZXX1NUQVRFCQlHRU5NQVNLKDIsIDApDQor DQorI2RlZmluZSBNVF9IV19CT1VORAkJCTB4NzAwMTAwMjANCisjZGVmaW5lIE1UX0hXX0NISVBJ RAkJCTB4NzAwMTAyMDANCisjZGVmaW5lIE1UX0hXX1JFVgkJCTB4NzAwMTAyMDQNCisNCisjZGVm aW5lIE1UX1BDSUVfTUFDX0JBU0UJCTB4NzQwMzAwMDANCisjZGVmaW5lIE1UX1BDSUVfTUFDKG9m cykJCShNVF9QQ0lFX01BQ19CQVNFICsgKG9mcykpDQorI2RlZmluZSBNVF9QQ0lFX01BQ19JTlRf RU5BQkxFCQlNVF9QQ0lFX01BQygweDE4OCkNCisNCisvKiBQSFk6IGJhbmQgMCgweDgzMDgwMDAw KSwgYmFuZCAxKDB4ODMwOTAwMDApICovDQorI2RlZmluZSBNVF9XRl9QSFlfQkFTRQkJCTB4ODMw ODAwMDANCisjZGVmaW5lIE1UX1dGX1BIWShvZnMpCQkJKE1UX1dGX1BIWV9CQVNFICsgKG9mcykp DQorDQorI2RlZmluZSBNVF9XRl9QSFlfUlhfQ1RSTDEoX3BoeSkJTVRfV0ZfUEhZKDB4MjAwNCAr ICgoX3BoeSkgPDwgMTYpKQ0KKyNkZWZpbmUgTVRfV0ZfUEhZX1JYX0NUUkwxX1NUU0NOVF9FTglH RU5NQVNLKDExLCA5KQ0KKw0KKyNlbmRpZg0KLS0gDQoyLjE4LjANCg==