Received: by 2002:a25:ab43:0:0:0:0:0 with SMTP id u61csp393504ybi; Thu, 13 Jun 2019 18:37:21 -0700 (PDT) X-Google-Smtp-Source: APXvYqyrE0h3K/iJN56LU5YM2IjpCeEn0gWZYrEJgWltZJupi7mEFAWxAko85kSNzJHUXk1dojL5 X-Received: by 2002:a17:90a:ca11:: with SMTP id x17mr8508257pjt.107.1560476241718; Thu, 13 Jun 2019 18:37:21 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1560476241; cv=none; d=google.com; s=arc-20160816; b=dlCoQP3WlkJJR8j78Je9nHTlh54qSK8K7rm3xwXP/O3g/xCTLZswsRKXDhy3U8rYrc itvaiFhJEKePH6i/A+uh/E+FaGep8seW0+FdAa8GzR535OWH6iOO0/h8Fs7ra93Sj7g/ 3/iPl1J2E819tQ00oMK1cxSslhNAwy5geld1f9hyLhhCi1GQOgO2nlCvixYEG5O4Oyi3 HI/at3X0Uk4KL9wqKH84gJLLP9m/BLe2I2os4rIwLJgTLlf25sgoJ4NoTHX5kwoueH3Q QrDoyi5nk2MLOwbQ2Fi1SFx0Vq6+z5G6sYcyGMfaQeH/b0M05FzahqoUy60oW6jZ6TU7 2Oxg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:mime-version:content-transfer-encoding :content-language:accept-language:in-reply-to:references:message-id :date:thread-index:thread-topic:subject:cc:to:from:dkim-signature; bh=wPmS8gcdTC2R9cuyDNkqSzW6p6CEIFp2cRN3YFKbj3g=; b=RE+n0NWP0+cW7wQiJUWgiOeDsG/135vxlP3sLnD2I5dzjjvaCGkF5RojI8wGbbrY3T T+IWTKlGhWEQV3+DWBoai7expwyv6qGRsYsdUhdRWl6p185ZYXD0foFdnazz64TUn8Nr 5V/P3c6epWvY430y5vxr2mo58lQhxJfEvbRHqD2EuwkhROE6L5Y7aHg+8AXPRUOYR8zX z8afHoa8JyRbEEwPaTuJvl5KCF0dBvV59h6dXlza6YgtdQWjKCiXiU0oLlcqKPSHZbA8 wecA9zZusQq2RAVt04yNuMVsAGZHlWTSkndiHGR13EuvUcR/jAYib4aLuPQybdQcWRIE vc+Q== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@nxp.com header.s=selector2 header.b=giq0B1zB; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=nxp.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id e14si914343pfd.141.2019.06.13.18.37.05; Thu, 13 Jun 2019 18:37:21 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@nxp.com header.s=selector2 header.b=giq0B1zB; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=nxp.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726092AbfFNBhD (ORCPT + 99 others); Thu, 13 Jun 2019 21:37:03 -0400 Received: from mail-eopbgr20070.outbound.protection.outlook.com ([40.107.2.70]:50806 "EHLO EUR02-VE1-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1725813AbfFNBhC (ORCPT ); Thu, 13 Jun 2019 21:37:02 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nxp.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=wPmS8gcdTC2R9cuyDNkqSzW6p6CEIFp2cRN3YFKbj3g=; b=giq0B1zBhLi6vblthRSfMM34NIAQR3CW6qh5JFCnXAO0ftHmU/C3TUeBbrtQMVrokKPg8St4x1fonBBuBBzbFHAAPbA4g55zBtuio3/8shv5dvRj+r7P8w2zXshD5VrCU/iYtrVOJaPTmhw4wWwKwE264s8mbhMlgjdNZcMjmVI= Received: from VI1PR04MB4431.eurprd04.prod.outlook.com (20.177.55.159) by VI1PR04MB3184.eurprd04.prod.outlook.com (10.170.229.139) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.1965.17; Fri, 14 Jun 2019 01:36:36 +0000 Received: from VI1PR04MB4431.eurprd04.prod.outlook.com ([fe80::20bb:da22:d5f2:f2ab]) by VI1PR04MB4431.eurprd04.prod.outlook.com ([fe80::20bb:da22:d5f2:f2ab%4]) with mapi id 15.20.1987.010; Fri, 14 Jun 2019 01:36:36 +0000 From: Peng Ma To: "vkoul@kernel.org" CC: "linux-kernel@vger.kernel.org" , "dmaengine@vger.kernel.org" , "dan.j.williams@intel.com" , Leo Li Subject: RE: [V4 1/2] dmaengine: fsl-dpaa2-qdma: Add the DPDMAI(Data Path DMA Interface) support Thread-Topic: [V4 1/2] dmaengine: fsl-dpaa2-qdma: Add the DPDMAI(Data Path DMA Interface) support Thread-Index: AQHVIdHliZUDPrNo0E+JSGaX/Jvg5aaaWuOQ Date: Fri, 14 Jun 2019 01:36:36 +0000 Message-ID: References: <20190613101341.21169-1-peng.ma@nxp.com> In-Reply-To: <20190613101341.21169-1-peng.ma@nxp.com> Accept-Language: zh-CN, en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: authentication-results: spf=none (sender IP is ) smtp.mailfrom=peng.ma@nxp.com; x-originating-ip: [119.31.174.73] x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: 10f951d8-990a-4f60-f2f4-08d6f068bd5d x-ms-office365-filtering-ht: Tenant x-microsoft-antispam: BCL:0;PCL:0;RULEID:(2390118)(7020095)(4652040)(8989299)(4534185)(4627221)(201703031133081)(201702281549075)(8990200)(5600148)(711020)(4605104)(1401327)(4618075)(2017052603328)(7193020);SRVR:VI1PR04MB3184; x-ms-traffictypediagnostic: VI1PR04MB3184: x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers: OLM:10000; x-forefront-prvs: 0068C7E410 x-forefront-antispam-report: SFV:NSPM;SFS:(10009020)(366004)(376002)(39860400002)(346002)(136003)(396003)(199004)(189003)(13464003)(68736007)(11346002)(4326008)(55016002)(2501003)(6436002)(54906003)(2906002)(6916009)(2351001)(66066001)(5640700003)(53936002)(6116002)(5024004)(3846002)(33656002)(256004)(25786009)(99286004)(8936002)(14444005)(76116006)(229853002)(71200400001)(66476007)(14454004)(6246003)(66556008)(476003)(316002)(478600001)(66446008)(81166006)(305945005)(186003)(86362001)(7736002)(74316002)(6506007)(76176011)(71190400001)(44832011)(73956011)(53946003)(9686003)(1730700003)(66946007)(5660300002)(30864003)(52536014)(102836004)(7696005)(446003)(486006)(26005)(81156014)(8676002)(64756008)(579004);DIR:OUT;SFP:1101;SCL:1;SRVR:VI1PR04MB3184;H:VI1PR04MB4431.eurprd04.prod.outlook.com;FPR:;SPF:None;LANG:en;PTR:InfoNoRecords;A:1;MX:1; received-spf: None (protection.outlook.com: nxp.com does not designate permitted sender hosts) x-ms-exchange-senderadcheck: 1 x-microsoft-antispam-message-info: ngB5YM8WzTM4iqjv3rpc6GGlYBj/ivFYfaLBYwLRSsKRX/D81YOhB3bomLIQJRZjz0SNsWVxkiYuAkr/ghmCqsLFsEcQz3VOv7m7YdYU8rmBKYQZZ95F7b2efEqlqBw3ty5n6KvRMuJPmWiXyy88IJ+h/JO2O04LhfX8EVns/5gPEjETiK+sOkwlMNTfQ10+FBmmbdomLqlLn84W+ykI5dexcoQP+il0DIFA36h04SB8oWDolFkNNl9FJ3vzO43MRYeHQrCGZtUBHr3D38Ha4uzBROpcQZCiYhgEuWVC2PA+gKCIpUo4mEnU8cnZ4nc//ryhGEJDPCszdRwFSsxNfT8kBZzUnE85JMsfpFCuaE+K92eW28hDY1boBvmYJB6UGK8m9gR3ZJfdDdCA5OY7yuEx7Ru/+Fq1ZB8T/mgXf2g= Content-Type: text/plain; charset="gb2312" Content-Transfer-Encoding: base64 MIME-Version: 1.0 X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: 10f951d8-990a-4f60-f2f4-08d6f068bd5d X-MS-Exchange-CrossTenant-originalarrivaltime: 14 Jun 2019 01:36:36.1730 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 686ea1d3-bc2b-4c6f-a92c-d99c5c301635 X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: peng.ma@nxp.com X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR04MB3184 Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org SGkgVmtvdWwsDQoNCj4raW50IGRwZG1haV9zZXRfcnhfcXVldWUoc3RydWN0IGZzbF9tY19pbyAq bWNfaW8sIHUzMiBjbWRfZmxhZ3MsDQo+KwkJCXUxNiB0b2tlbiwgdTggcHJpb3JpdHksDQo+KwkJ CWNvbnN0IHN0cnVjdCBkcGRtYWlfcnhfcXVldWVfY2ZnICpjZmcpIHsNCj4rCXN0cnVjdCBmc2xf bWNfY29tbWFuZCBjbWQgPSB7IDAgfTsNCj4rCXN0cnVjdCBkcGRtYWlfY21kX3F1ZXVlICpjbWRf cGFyYW1zOw0KPisNCj4rCS8qIHByZXBhcmUgY29tbWFuZCAqLw0KPisJY21kLmhlYWRlciA9DQo+ bWNfZW5jb2RlX2NtZF9oZWFkZXIoRFBETUFJX0NNRElEX1NFVF9SWF9RVUVVRSwNCj4rCQkJCQkg IGNtZF9mbGFncywNCj4rCQkJCQkgIHRva2VuKTsNCj4rDQo+KwljbWRfcGFyYW1zID0gKHN0cnVj dCBkcGRtYWlfY21kX3F1ZXVlICopY21kLnBhcmFtczsNClRoZSBNQyhNYW5hZ2VtZW50IENvbXBs ZXgpIGhhcyBtYXkgb2JqZWN0cyBsaWtlIERQRE1BSSwgRFBOSSwgRFBJTywgRFBDT04gZXRjLg0K VGhleSBoYXZlIHRoZSBzYW1lIHNpemUgY29tbWFuZCBzdHJ1Y3R1cmUgZGVmaW5lZCBieSBzdHJ1 Y3QgZnNsX21jX2NvbW1hbmQgKGluY2x1ZGUvbGludXgvZnNsL21jLmgpOg0Kc3RydWN0IGZzbF9t Y19jb21tYW5kIHsNCiAgICAgICAgX19sZTY0IGhlYWRlcjsNCiAgICAgICAgX19sZTY0IHBhcmFt c1s3XTsNCn07DQpCdXQgZGlmZmVyZW50IG9iamVjdCBhbmQgZGlmZmVyZW50IG9wZXJhdGlvbihv cGVuICwgY2xvc2UsIGVuYWJsZSBldGMgKSBvZiBvYmplY3Qgd2l0aCBkaWZmZXJlbnQgY29tbWFu ZCBwYXJhbXMsIHdoZW4gd2UgdXNlZCBEUERNQUksIA0KdGhlIGNtZF9wYXJhbXMgc2hvdWxkIHVz ZSBjYXN0IHRvIGZpdCBpdC4gVGhpcyBtYWtlcyBpdCBlYXN5IHRvIHByb2dyYW0uDQoNCj4rCWNt ZF9wYXJhbXMtPmRlc3RfaWQgPSBjcHVfdG9fbGUzMihjZmctPmRlc3RfY2ZnLmRlc3RfaWQpOw0K PisJY21kX3BhcmFtcy0+cHJpb3JpdHkgPSBjZmctPmRlc3RfY2ZnLnByaW9yaXR5Ow0KPisJY21k X3BhcmFtcy0+cXVldWUgPSBwcmlvcml0eTsNCj4rCWNtZF9wYXJhbXMtPmRlc3RfdHlwZSA9IGNm Zy0+ZGVzdF9jZmcuZGVzdF90eXBlOw0KPisJY21kX3BhcmFtcy0+dXNlcl9jdHggPSBjcHVfdG9f bGU2NChjZmctPnVzZXJfY3R4KTsNCj4rCWNtZF9wYXJhbXMtPm9wdGlvbnMgPSBjcHVfdG9fbGUz MihjZmctPm9wdGlvbnMpOw0KPisNCj4rCS8qIHNlbmQgY29tbWFuZCB0byBtYyovDQo+KwlyZXR1 cm4gbWNfc2VuZF9jb21tYW5kKG1jX2lvLCAmY21kKTsNCj4rfQ0KDQpCZXN0IFJlZ2FyZHMsDQpQ ZW5nDQo+LS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0NCj5Gcm9tOiBQZW5nIE1hIDxwZW5nLm1h QG54cC5jb20+DQo+U2VudDogMjAxOcTqNtTCMTPI1SAxODoxNA0KPlRvOiB2a291bEBrZXJuZWwu b3JnOyBkYW4uai53aWxsaWFtc0BpbnRlbC5jb207IExlbyBMaSA8bGVveWFuZy5saUBueHAuY29t Pg0KPkNjOiBsaW51eC1rZXJuZWxAdmdlci5rZXJuZWwub3JnOyBkbWFlbmdpbmVAdmdlci5rZXJu ZWwub3JnOyBQZW5nIE1hDQo+PHBlbmcubWFAbnhwLmNvbT4NCj5TdWJqZWN0OiBbVjQgMS8yXSBk bWFlbmdpbmU6IGZzbC1kcGFhMi1xZG1hOiBBZGQgdGhlIERQRE1BSShEYXRhIFBhdGgNCj5ETUEg SW50ZXJmYWNlKSBzdXBwb3J0DQo+DQo+VGhlIE1DKE1hbmFnZW1lbnQgQ29tcGxleCkgZXhwb3J0 cyB0aGUgRFBETUFJKERhdGEgUGF0aCBETUEgSW50ZXJmYWNlKQ0KPm9iamVjdCBhcyBhbiBpbnRl cmZhY2UgdG8gb3BlcmF0ZSB0aGUgRFBBQTIoRGF0YSBQYXRoIEFjY2VsZXJhdGlvbg0KPkFyY2hp dGVjdHVyZSAyKSBxRE1BIEVuZ2luZS4gVGhlIERQRE1BSSBlbmFibGVzIHNlbmRpbmcgZnJhbWUt YmFzZWQNCj5yZXF1ZXN0cyB0byBxRE1BIGFuZCByZWNlaXZpbmcgYmFjayBjb25maXJtYXRpb24g cmVzcG9uc2Ugb24gdHJhbnNhY3Rpb24NCj5jb21wbGV0aW9uLCB1dGlsaXppbmcgdGhlIERQQUEy IFFCTWFuKFF1ZXVlIE1hbmFnZXIgYW5kIEJ1ZmZlciBNYW5hZ2VyDQo+aGFyZHdhcmUpIGluZnJh c3RydWN0dXJlLiBEUERNQUkgb2JqZWN0IHByb3ZpZGVzIHVwIHRvIHR3byBwcmlvcml0aWVzIGZv cg0KPnByb2Nlc3NpbmcgcURNQSByZXF1ZXN0cy4NCj5UaGUgZm9sbG93aW5nIGxpc3Qgc3VtbWFy aXplcyB0aGUgRFBETUFJIG1haW4gZmVhdHVyZXMgYW5kIGNhcGFiaWxpdGllczoNCj4JMS4gU3Vw cG9ydHMgdXAgdG8gdHdvIHNjaGVkdWxpbmcgcHJpb3JpdGllcyBmb3IgcHJvY2Vzc2luZw0KPglz ZXJ2aWNlIHJlcXVlc3RzLg0KPgktIEVhY2ggRFBETUFJIHRyYW5zbWl0IHF1ZXVlIGlzIG1hcHBl ZCB0byBvbmUgb2YgdHdvIHNlcnZpY2UNCj4JcHJpb3JpdGllcywgYWxsb3dpbmcgZnVydGhlciBw cmlvcml0aXphdGlvbiBpbiBoYXJkd2FyZSBiZXR3ZWVuDQo+CXJlcXVlc3RzIGZyb20gZGlmZmVy ZW50IERQRE1BSSBvYmplY3RzLg0KPgkyLiBTdXBwb3J0cyB1cCB0byB0d28gcmVjZWl2ZSBxdWV1 ZXMgZm9yIGluY29taW5nIHRyYW5zYWN0aW9uDQo+CWNvbXBsZXRpb24gY29uZmlybWF0aW9ucy4N Cj4JLSBFYWNoIERQRE1BSSByZWNlaXZlIHF1ZXVlIGlzIG1hcHBlZCB0byBvbmUgb2YgdHdvIHJl Y2VpdmUNCj4JcHJpb3JpdGllcywgYWxsb3dpbmcgZnVydGhlciBwcmlvcml0aXphdGlvbiBiZXR3 ZWVuIG90aGVyDQo+CWludGVyZmFjZXMgd2hlbiBhc3NvY2lhdGluZyB0aGUgRFBETUFJIHJlY2Vp dmUgcXVldWVzIHRvIERQSU8NCj4Jb3IgRFBDT04oRGF0YSBQYXRoIENvbmNlbnRyYXRvcikgb2Jq ZWN0cy4NCj4JMy4gU3VwcG9ydHMgZGlmZmVyZW50IHNjaGVkdWxpbmcgb3B0aW9ucyBmb3IgcHJv Y2Vzc2luZyByZWNlaXZlZA0KPglwYWNrZXRzOg0KPgktIFF1ZXVlcyBjYW4gYmUgY29uZmlndXJl ZCBlaXRoZXIgaW4gJ3BhcmtlZCcgbW9kZSAoZGVmYXVsdCksDQo+CW9hdHRhY2hlZCB0byBhIERQ SU8gb2JqZWN0LCBvciBhdHRhY2hlZCB0byBEUENPTiBvYmplY3QuDQo+CTQuIEFsbG93cyBpbnRl cmFjdGlvbiB3aXRoIG9uZSBvciBtb3JlIERQSU8gb2JqZWN0cyBmb3INCj4JZGVxdWV1ZWluZy9l bnF1ZXVlaW5nIGZyYW1lIGRlc2NyaXB0b3JzKEZEKSBhbmQgZm9yDQo+CWFjcXVpcmluZy9yZWxl YXNpbmcgYnVmZmVycy4NCj4JNS4gU3VwcG9ydHMgZW5hYmxlLCBkaXNhYmxlLCBhbmQgcmVzZXQg b3BlcmF0aW9ucy4NCj4NCj5BZGQgZHBkbWFpIHRvIHN1cHBvcnQgc29tZSBwbGF0Zm9ybXMgd2l0 aCBkcGFhMiBxZG1hIGVuZ2luZS4NCj4NCj5TaWduZWQtb2ZmLWJ5OiBQZW5nIE1hIDxwZW5nLm1h QG54cC5jb20+DQo+LS0tDQo+Y2hhbmdlZCBmb3IgdjQ6DQo+CS0gRGVsZXRlIGRwZG1haV9jbWQu aC4NCj4JLSBSZW1vdmUgc29tZSB1c2VsZXNzIGZ1bmN0aW9ucy4NCj4JLSBDbGVhbiB1cCB0aGUg Zm9ybWF0Lg0KPgktIFVwZGF0ZSBDb3B5cmlnaHQuDQo+DQo+IGRyaXZlcnMvZG1hL2ZzbC1kcGFh Mi1xZG1hL2RwZG1haS5jIHwgIDI3NQ0KPisrKysrKysrKysrKysrKysrKysrKysrKysrKysrKw0K PmRyaXZlcnMvZG1hL2ZzbC1kcGFhMi1xZG1hL2RwZG1haS5oIHwgIDMxOA0KPisrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrDQo+IDIgZmlsZXMgY2hhbmdlZCwgNTkzIGluc2VydGlv bnMoKyksIDAgZGVsZXRpb25zKC0pICBjcmVhdGUgbW9kZSAxMDA2NDQNCj5kcml2ZXJzL2RtYS9m c2wtZHBhYTItcWRtYS9kcGRtYWkuYw0KPiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9kbWEv ZnNsLWRwYWEyLXFkbWEvZHBkbWFpLmgNCj4NCj5kaWZmIC0tZ2l0IGEvZHJpdmVycy9kbWEvZnNs LWRwYWEyLXFkbWEvZHBkbWFpLmMNCj5iL2RyaXZlcnMvZG1hL2ZzbC1kcGFhMi1xZG1hL2RwZG1h aS5jDQo+bmV3IGZpbGUgbW9kZSAxMDA2NDQNCj5pbmRleCAwMDAwMDAwLi40ZGJhMTU0DQo+LS0t IC9kZXYvbnVsbA0KPisrKyBiL2RyaXZlcnMvZG1hL2ZzbC1kcGFhMi1xZG1hL2RwZG1haS5jDQo+ QEAgLTAsMCArMSwyNzUgQEANCj4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAN Cj4rLy8gQ29weXJpZ2h0IDIwMTkgTlhQDQo+Kw0KPisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4N Cj4rI2luY2x1ZGUgPGxpbnV4L2lvLmg+DQo+KyNpbmNsdWRlIDxsaW51eC9mc2wvbWMuaD4NCj4r I2luY2x1ZGUgImRwZG1haS5oIg0KPisNCj4rc3RydWN0IGRwZG1haV9jbWRfb3BlbiB7DQo+Kwlf X2xlMzIgZHBkbWFpX2lkOw0KPit9Ow0KPisNCj4rc3RydWN0IGRwZG1haV9yc3BfZ2V0X2F0dHJp YnV0ZXMgew0KPisJX19sZTMyIGlkOw0KPisJdTggbnVtX29mX3ByaW9yaXRpZXM7DQo+Kwl1OCBw YWQwWzNdOw0KPisJX19sZTE2IG1ham9yOw0KPisJX19sZTE2IG1pbm9yOw0KPit9Ow0KPisNCj4r c3RydWN0IGRwZG1haV9jbWRfcXVldWUgew0KPisJX19sZTMyIGRlc3RfaWQ7DQo+Kwl1OCBwcmlv cml0eTsNCj4rCXU4IHF1ZXVlOw0KPisJdTggZGVzdF90eXBlOw0KPisJdTggcGFkOw0KPisJX19s ZTY0IHVzZXJfY3R4Ow0KPisJdW5pb24gew0KPisJCV9fbGUzMiBvcHRpb25zOw0KPisJCV9fbGUz MiBmcWlkOw0KPisJfTsNCj4rfTsNCj4rDQo+K3N0cnVjdCBkcGRtYWlfcnNwX2dldF90eF9xdWV1 ZSB7DQo+KwlfX2xlNjQgcGFkOw0KPisJX19sZTMyIGZxaWQ7DQo+K307DQo+Kw0KPisjZGVmaW5l IE1DX0NNRF9PUChfY21kLCBfcGFyYW0sIF9vZmZzZXQsIF93aWR0aCwgX3R5cGUsIF9hcmcpIFwN Cj4rCSgoX2NtZCkucGFyYW1zW19wYXJhbV0gfD0gbWNfZW5jKChfb2Zmc2V0KSwgKF93aWR0aCks IF9hcmcpKQ0KPisNCj4rI2RlZmluZSBNQ19DTURfSERSX1JFQURfVE9LRU4oX2hkcikgXA0KPisJ KCh1MTYpbWNfZGVjKChfaGRyKSwgTUNfQ01EX0hEUl9UT0tFTl9PLA0KPk1DX0NNRF9IRFJfVE9L RU5fUykpDQo+Kw0KPisvKiBjbWQsIHBhcmFtLCBvZmZzZXQsIHdpZHRoLCB0eXBlLCBhcmdfbmFt ZSAqLyAjZGVmaW5lDQo+K0RQRE1BSV9DTURfQ1JFQVRFKF9jbWQsIF9jZmcpIFwgZG8geyBcDQo+ Kwl0eXBlb2YoX2NtZCkgKGNtZCkgPSAoX2NtZCk7IFwNCj4rCXR5cGVvZihfY2ZnKSAoY2ZnKSA9 IChfY2ZnKTsgXA0KPisJTUNfQ01EX09QKGNtZCwgMCwgOCwgIDgsICB1OCwgIChjZmcpLT5wcmlv cml0aWVzWzBdKTtcDQo+KwlNQ19DTURfT1AoY21kLCAwLCAxNiwgOCwgIHU4LCAgKGNmZyktPnBy aW9yaXRpZXNbMV0pO1wgfSB3aGlsZSAoMCkNCj4rDQo+K3N0YXRpYyBpbmxpbmUgdTY0IG1jX2Vu YyhpbnQgbHNvZmZzZXQsIGludCB3aWR0aCwgdTY0IHZhbCkgew0KPisJcmV0dXJuICh1NjQpKCgo dTY0KXZhbCAmIE1BS0VfVU1BU0s2NCh3aWR0aCkpIDw8IGxzb2Zmc2V0KTsgfQ0KPisNCj4rc3Rh dGljIGlubGluZSB1NjQgbWNfZGVjKHU2NCB2YWwsIGludCBsc29mZnNldCwgaW50IHdpZHRoKSB7 DQo+KwlyZXR1cm4gKHU2NCkoKHZhbCA+PiBsc29mZnNldCkgJiBNQUtFX1VNQVNLNjQod2lkdGgp KTsgfQ0KPisNCj4raW50IGRwZG1haV9vcGVuKHN0cnVjdCBmc2xfbWNfaW8gKm1jX2lvLCB1MzIg Y21kX2ZsYWdzLA0KPisJCWludCBkcGRtYWlfaWQsIHUxNiAqdG9rZW4pDQo+K3sNCj4rCXN0cnVj dCBmc2xfbWNfY29tbWFuZCBjbWQgPSB7IDAgfTsNCj4rCXN0cnVjdCBkcGRtYWlfY21kX29wZW4g KmNtZF9wYXJhbXM7DQo+KwlpbnQgZXJyOw0KPisNCj4rCS8qIHByZXBhcmUgY29tbWFuZCAqLw0K PisJY21kLmhlYWRlciA9IG1jX2VuY29kZV9jbWRfaGVhZGVyKERQRE1BSV9DTURJRF9PUEVOLA0K PisJCQkJCSAgY21kX2ZsYWdzLCAwKTsNCj4rDQo+KwljbWRfcGFyYW1zID0gKHN0cnVjdCBkcGRt YWlfY21kX29wZW4gKiljbWQucGFyYW1zOw0KPisJY21kX3BhcmFtcy0+ZHBkbWFpX2lkID0gY3B1 X3RvX2xlMzIoZHBkbWFpX2lkKTsNCj4rDQo+KwkvKiBzZW5kIGNvbW1hbmQgdG8gbWMqLw0KPisJ ZXJyID0gbWNfc2VuZF9jb21tYW5kKG1jX2lvLCAmY21kKTsNCj4rCWlmIChlcnIpDQo+KwkJcmV0 dXJuIGVycjsNCj4rDQo+KwkvKiByZXRyaWV2ZSByZXNwb25zZSBwYXJhbWV0ZXJzICovDQo+Kwkq dG9rZW4gPSBtY19jbWRfaGRyX3JlYWRfdG9rZW4oJmNtZCk7DQo+KwlyZXR1cm4gMDsNCj4rfQ0K PisNCj4raW50IGRwZG1haV9jbG9zZShzdHJ1Y3QgZnNsX21jX2lvICptY19pbywgdTMyIGNtZF9m bGFncywgdTE2IHRva2VuKSB7DQo+KwlzdHJ1Y3QgZnNsX21jX2NvbW1hbmQgY21kID0geyAwIH07 DQo+Kw0KPisJLyogcHJlcGFyZSBjb21tYW5kICovDQo+KwljbWQuaGVhZGVyID0gbWNfZW5jb2Rl X2NtZF9oZWFkZXIoRFBETUFJX0NNRElEX0NMT1NFLA0KPisJCQkJCSAgY21kX2ZsYWdzLCB0b2tl bik7DQo+Kw0KPisJLyogc2VuZCBjb21tYW5kIHRvIG1jKi8NCj4rCXJldHVybiBtY19zZW5kX2Nv bW1hbmQobWNfaW8sICZjbWQpOw0KPit9DQo+Kw0KPitpbnQgZHBkbWFpX2NyZWF0ZShzdHJ1Y3Qg ZnNsX21jX2lvICptY19pbywgdTMyIGNtZF9mbGFncywNCj4rCQkgIGNvbnN0IHN0cnVjdCBkcGRt YWlfY2ZnICpjZmcsIHUxNiAqdG9rZW4pIHsNCj4rCXN0cnVjdCBmc2xfbWNfY29tbWFuZCBjbWQg PSB7IDAgfTsNCj4rCWludCBlcnI7DQo+Kw0KPisJLyogcHJlcGFyZSBjb21tYW5kICovDQo+Kwlj bWQuaGVhZGVyID0gbWNfZW5jb2RlX2NtZF9oZWFkZXIoRFBETUFJX0NNRElEX0NSRUFURSwNCj4r CQkJCQkgIGNtZF9mbGFncywNCj4rCQkJCQkgIDApOw0KPisJRFBETUFJX0NNRF9DUkVBVEUoY21k LCBjZmcpOw0KPisNCj4rCS8qIHNlbmQgY29tbWFuZCB0byBtYyovDQo+KwllcnIgPSBtY19zZW5k X2NvbW1hbmQobWNfaW8sICZjbWQpOw0KPisJaWYgKGVycikNCj4rCQlyZXR1cm4gZXJyOw0KPisN Cj4rCS8qIHJldHJpZXZlIHJlc3BvbnNlIHBhcmFtZXRlcnMgKi8NCj4rCSp0b2tlbiA9IE1DX0NN RF9IRFJfUkVBRF9UT0tFTihjbWQuaGVhZGVyKTsNCj4rDQo+KwlyZXR1cm4gMDsNCj4rfQ0KPisN Cj4raW50IGRwZG1haV9lbmFibGUoc3RydWN0IGZzbF9tY19pbyAqbWNfaW8sIHUzMiBjbWRfZmxh Z3MsDQo+KwkJICB1MTYgdG9rZW4pDQo+K3sNCj4rCXN0cnVjdCBmc2xfbWNfY29tbWFuZCBjbWQg PSB7IDAgfTsNCj4rDQo+KwkvKiBwcmVwYXJlIGNvbW1hbmQgKi8NCj4rCWNtZC5oZWFkZXIgPSBt Y19lbmNvZGVfY21kX2hlYWRlcihEUERNQUlfQ01ESURfRU5BQkxFLA0KPisJCQkJCSAgY21kX2Zs YWdzLA0KPisJCQkJCSAgdG9rZW4pOw0KPisNCj4rCS8qIHNlbmQgY29tbWFuZCB0byBtYyovDQo+ KwlyZXR1cm4gbWNfc2VuZF9jb21tYW5kKG1jX2lvLCAmY21kKTsNCj4rfQ0KPisNCj4raW50IGRw ZG1haV9kaXNhYmxlKHN0cnVjdCBmc2xfbWNfaW8gKm1jX2lvLCB1MzIgY21kX2ZsYWdzLA0KPisJ CSAgIHUxNiB0b2tlbikNCj4rew0KPisJc3RydWN0IGZzbF9tY19jb21tYW5kIGNtZCA9IHsgMCB9 Ow0KPisNCj4rCS8qIHByZXBhcmUgY29tbWFuZCAqLw0KPisJY21kLmhlYWRlciA9IG1jX2VuY29k ZV9jbWRfaGVhZGVyKERQRE1BSV9DTURJRF9ESVNBQkxFLA0KPisJCQkJCSAgY21kX2ZsYWdzLA0K PisJCQkJCSAgdG9rZW4pOw0KPisNCj4rCS8qIHNlbmQgY29tbWFuZCB0byBtYyovDQo+KwlyZXR1 cm4gbWNfc2VuZF9jb21tYW5kKG1jX2lvLCAmY21kKTsNCj4rfQ0KPisNCj4raW50IGRwZG1haV9y ZXNldChzdHJ1Y3QgZnNsX21jX2lvICptY19pbywgdTMyIGNtZF9mbGFncywNCj4rCQkgdTE2IHRv a2VuKQ0KPit7DQo+KwlzdHJ1Y3QgZnNsX21jX2NvbW1hbmQgY21kID0geyAwIH07DQo+Kw0KPisJ LyogcHJlcGFyZSBjb21tYW5kICovDQo+KwljbWQuaGVhZGVyID0gbWNfZW5jb2RlX2NtZF9oZWFk ZXIoRFBETUFJX0NNRElEX1JFU0VULA0KPisJCQkJCSAgY21kX2ZsYWdzLA0KPisJCQkJCSAgdG9r ZW4pOw0KPisNCj4rCS8qIHNlbmQgY29tbWFuZCB0byBtYyovDQo+KwlyZXR1cm4gbWNfc2VuZF9j b21tYW5kKG1jX2lvLCAmY21kKTsNCj4rfQ0KPisNCj4raW50IGRwZG1haV9nZXRfYXR0cmlidXRl cyhzdHJ1Y3QgZnNsX21jX2lvICptY19pbywgdTMyIGNtZF9mbGFncywNCj4rCQkJICB1MTYgdG9r ZW4sIHN0cnVjdCBkcGRtYWlfYXR0ciAqYXR0cikgew0KPisJc3RydWN0IGZzbF9tY19jb21tYW5k IGNtZCA9IHsgMCB9Ow0KPisJaW50IGVycjsNCj4rCXN0cnVjdCBkcGRtYWlfcnNwX2dldF9hdHRy aWJ1dGVzICpyc3BfcGFyYW1zOw0KPisNCj4rCS8qIHByZXBhcmUgY29tbWFuZCAqLw0KPisJY21k LmhlYWRlciA9IG1jX2VuY29kZV9jbWRfaGVhZGVyKERQRE1BSV9DTURJRF9HRVRfQVRUUiwNCj4r CQkJCQkgIGNtZF9mbGFncywNCj4rCQkJCQkgIHRva2VuKTsNCj4rDQo+KwkvKiBzZW5kIGNvbW1h bmQgdG8gbWMqLw0KPisJZXJyID0gbWNfc2VuZF9jb21tYW5kKG1jX2lvLCAmY21kKTsNCj4rCWlm IChlcnIpDQo+KwkJcmV0dXJuIGVycjsNCj4rDQo+KwkvKiByZXRyaWV2ZSByZXNwb25zZSBwYXJh bWV0ZXJzICovDQo+Kwlyc3BfcGFyYW1zID0gKHN0cnVjdCBkcGRtYWlfcnNwX2dldF9hdHRyaWJ1 dGVzICopY21kLnBhcmFtczsNCj4rCWF0dHItPmlkID0gbGUzMl90b19jcHUocnNwX3BhcmFtcy0+ aWQpOw0KPisJYXR0ci0+dmVyc2lvbi5tYWpvciA9IGxlMTZfdG9fY3B1KHJzcF9wYXJhbXMtPm1h am9yKTsNCj4rCWF0dHItPnZlcnNpb24ubWlub3IgPSBsZTE2X3RvX2NwdShyc3BfcGFyYW1zLT5t aW5vcik7DQo+KwlhdHRyLT5udW1fb2ZfcHJpb3JpdGllcyA9IHJzcF9wYXJhbXMtPm51bV9vZl9w cmlvcml0aWVzOw0KPisNCj4rCXJldHVybiAwOw0KPit9DQo+Kw0KPitpbnQgZHBkbWFpX3NldF9y eF9xdWV1ZShzdHJ1Y3QgZnNsX21jX2lvICptY19pbywgdTMyIGNtZF9mbGFncywNCj4rCQkJdTE2 IHRva2VuLCB1OCBwcmlvcml0eSwNCj4rCQkJY29uc3Qgc3RydWN0IGRwZG1haV9yeF9xdWV1ZV9j ZmcgKmNmZykgew0KPisJc3RydWN0IGZzbF9tY19jb21tYW5kIGNtZCA9IHsgMCB9Ow0KPisJc3Ry dWN0IGRwZG1haV9jbWRfcXVldWUgKmNtZF9wYXJhbXM7DQo+Kw0KPisJLyogcHJlcGFyZSBjb21t YW5kICovDQo+KwljbWQuaGVhZGVyID0NCj5tY19lbmNvZGVfY21kX2hlYWRlcihEUERNQUlfQ01E SURfU0VUX1JYX1FVRVVFLA0KPisJCQkJCSAgY21kX2ZsYWdzLA0KPisJCQkJCSAgdG9rZW4pOw0K PisNCj4rCWNtZF9wYXJhbXMgPSAoc3RydWN0IGRwZG1haV9jbWRfcXVldWUgKiljbWQucGFyYW1z Ow0KPisJY21kX3BhcmFtcy0+ZGVzdF9pZCA9IGNwdV90b19sZTMyKGNmZy0+ZGVzdF9jZmcuZGVz dF9pZCk7DQo+KwljbWRfcGFyYW1zLT5wcmlvcml0eSA9IGNmZy0+ZGVzdF9jZmcucHJpb3JpdHk7 DQo+KwljbWRfcGFyYW1zLT5xdWV1ZSA9IHByaW9yaXR5Ow0KPisJY21kX3BhcmFtcy0+ZGVzdF90 eXBlID0gY2ZnLT5kZXN0X2NmZy5kZXN0X3R5cGU7DQo+KwljbWRfcGFyYW1zLT51c2VyX2N0eCA9 IGNwdV90b19sZTY0KGNmZy0+dXNlcl9jdHgpOw0KPisJY21kX3BhcmFtcy0+b3B0aW9ucyA9IGNw dV90b19sZTMyKGNmZy0+b3B0aW9ucyk7DQo+Kw0KPisJLyogc2VuZCBjb21tYW5kIHRvIG1jKi8N Cj4rCXJldHVybiBtY19zZW5kX2NvbW1hbmQobWNfaW8sICZjbWQpOw0KPit9DQo+Kw0KPitpbnQg ZHBkbWFpX2dldF9yeF9xdWV1ZShzdHJ1Y3QgZnNsX21jX2lvICptY19pbywgdTMyIGNtZF9mbGFn cywNCj4rCQkJdTE2IHRva2VuLCB1OCBwcmlvcml0eSwNCj4rCQkJc3RydWN0IGRwZG1haV9yeF9x dWV1ZV9hdHRyICphdHRyKQ0KPit7DQo+KwlzdHJ1Y3QgZnNsX21jX2NvbW1hbmQgY21kID0geyAw IH07DQo+KwlzdHJ1Y3QgZHBkbWFpX2NtZF9xdWV1ZSAqY21kX3BhcmFtczsNCj4rCWludCBlcnI7 DQo+Kw0KPisJLyogcHJlcGFyZSBjb21tYW5kICovDQo+KwljbWQuaGVhZGVyID0NCj5tY19lbmNv ZGVfY21kX2hlYWRlcihEUERNQUlfQ01ESURfR0VUX1JYX1FVRVVFLA0KPisJCQkJCSAgY21kX2Zs YWdzLA0KPisJCQkJCSAgdG9rZW4pOw0KPisNCj4rCWNtZF9wYXJhbXMgPSAoc3RydWN0IGRwZG1h aV9jbWRfcXVldWUgKiljbWQucGFyYW1zOw0KPisJY21kX3BhcmFtcy0+cXVldWUgPSBwcmlvcml0 eTsNCj4rDQo+KwkvKiBzZW5kIGNvbW1hbmQgdG8gbWMqLw0KPisJZXJyID0gbWNfc2VuZF9jb21t YW5kKG1jX2lvLCAmY21kKTsNCj4rCWlmIChlcnIpDQo+KwkJcmV0dXJuIGVycjsNCj4rDQo+Kwkv KiByZXRyaWV2ZSByZXNwb25zZSBwYXJhbWV0ZXJzICovDQo+KwlhdHRyLT5kZXN0X2NmZy5kZXN0 X2lkID0gbGUzMl90b19jcHUoY21kX3BhcmFtcy0+ZGVzdF9pZCk7DQo+KwlhdHRyLT5kZXN0X2Nm Zy5wcmlvcml0eSA9IGNtZF9wYXJhbXMtPnByaW9yaXR5Ow0KPisJYXR0ci0+ZGVzdF9jZmcuZGVz dF90eXBlID0gY21kX3BhcmFtcy0+ZGVzdF90eXBlOw0KPisJYXR0ci0+dXNlcl9jdHggPSBsZTY0 X3RvX2NwdShjbWRfcGFyYW1zLT51c2VyX2N0eCk7DQo+KwlhdHRyLT5mcWlkID0gbGUzMl90b19j cHUoY21kX3BhcmFtcy0+ZnFpZCk7DQo+Kw0KPisJcmV0dXJuIDA7DQo+K30NCj4rDQo+K2ludCBk cGRtYWlfZ2V0X3R4X3F1ZXVlKHN0cnVjdCBmc2xfbWNfaW8gKm1jX2lvLCB1MzIgY21kX2ZsYWdz LA0KPisJCQl1MTYgdG9rZW4sIHU4IHByaW9yaXR5LA0KPisJCQlzdHJ1Y3QgZHBkbWFpX3R4X3F1 ZXVlX2F0dHIgKmF0dHIpDQo+K3sNCj4rCXN0cnVjdCBmc2xfbWNfY29tbWFuZCBjbWQgPSB7IDAg fTsNCj4rCXN0cnVjdCBkcGRtYWlfY21kX3F1ZXVlICpjbWRfcGFyYW1zOw0KPisJc3RydWN0IGRw ZG1haV9yc3BfZ2V0X3R4X3F1ZXVlICpyc3BfcGFyYW1zOw0KPisJaW50IGVycjsNCj4rDQo+Kwkv KiBwcmVwYXJlIGNvbW1hbmQgKi8NCj4rCWNtZC5oZWFkZXIgPQ0KPm1jX2VuY29kZV9jbWRfaGVh ZGVyKERQRE1BSV9DTURJRF9HRVRfVFhfUVVFVUUsDQo+KwkJCQkJICBjbWRfZmxhZ3MsDQo+KwkJ CQkJICB0b2tlbik7DQo+Kw0KPisJY21kX3BhcmFtcyA9IChzdHJ1Y3QgZHBkbWFpX2NtZF9xdWV1 ZSAqKWNtZC5wYXJhbXM7DQo+KwljbWRfcGFyYW1zLT5xdWV1ZSA9IHByaW9yaXR5Ow0KPisNCj4r CS8qIHNlbmQgY29tbWFuZCB0byBtYyovDQo+KwllcnIgPSBtY19zZW5kX2NvbW1hbmQobWNfaW8s ICZjbWQpOw0KPisJaWYgKGVycikNCj4rCQlyZXR1cm4gZXJyOw0KPisNCj4rCS8qIHJldHJpZXZl IHJlc3BvbnNlIHBhcmFtZXRlcnMgKi8NCj4rDQo+Kwlyc3BfcGFyYW1zID0gKHN0cnVjdCBkcGRt YWlfcnNwX2dldF90eF9xdWV1ZSAqKWNtZC5wYXJhbXM7DQo+KwlhdHRyLT5mcWlkID0gbGUzMl90 b19jcHUocnNwX3BhcmFtcy0+ZnFpZCk7DQo+Kw0KPisJcmV0dXJuIDA7DQo+K30NCj5kaWZmIC0t Z2l0IGEvZHJpdmVycy9kbWEvZnNsLWRwYWEyLXFkbWEvZHBkbWFpLmgNCj5iL2RyaXZlcnMvZG1h L2ZzbC1kcGFhMi1xZG1hL2RwZG1haS5oDQo+bmV3IGZpbGUgbW9kZSAxMDA2NDQNCj5pbmRleCAw MDAwMDAwLi41NGQyNmJiDQo+LS0tIC9kZXYvbnVsbA0KPisrKyBiL2RyaXZlcnMvZG1hL2ZzbC1k cGFhMi1xZG1hL2RwZG1haS5oDQo+QEAgLTAsMCArMSwzMTggQEANCj4rLyogU1BEWC1MaWNlbnNl LUlkZW50aWZpZXI6IEdQTC0yLjAgKi8NCj4rLyogQ29weXJpZ2h0IDIwMTkgTlhQICovDQo+Kw0K PisjaWZuZGVmIF9fRlNMX0RQRE1BSV9IDQo+KyNkZWZpbmUgX19GU0xfRFBETUFJX0gNCj4rDQo+ Ky8qIERQRE1BSSBWZXJzaW9uICovDQo+KyNkZWZpbmUgRFBETUFJX1ZFUl9NQUpPUgkyDQo+KyNk ZWZpbmUgRFBETUFJX1ZFUl9NSU5PUgkyDQo+Kw0KPisjZGVmaW5lIERQRE1BSV9DTURfQkFTRV9W RVJTSU9OCTANCj4rI2RlZmluZSBEUERNQUlfQ01EX0lEX09GRlNFVAk0DQo+Kw0KPisjZGVmaW5l IERQRE1BSV9DTURJRF9GT1JNQVQoeCkJKCgoeCkgPDwgRFBETUFJX0NNRF9JRF9PRkZTRVQpDQo+ fCBcDQo+KwkJCQlEUERNQUlfQ01EX0JBU0VfVkVSU0lPTikNCj4rDQo+Ky8qIENvbW1hbmQgSURz ICovDQo+KyNkZWZpbmUgRFBETUFJX0NNRElEX0NMT1NFCQlEUERNQUlfQ01ESURfRk9STUFUKDB4 ODAwKQ0KPisjZGVmaW5lIERQRE1BSV9DTURJRF9PUEVODQo+RFBETUFJX0NNRElEX0ZPUk1BVCgw eDgwRSkNCj4rI2RlZmluZSBEUERNQUlfQ01ESURfQ1JFQVRFDQo+RFBETUFJX0NNRElEX0ZPUk1B VCgweDkwRSkNCj4rDQo+KyNkZWZpbmUgRFBETUFJX0NNRElEX0VOQUJMRQ0KPkRQRE1BSV9DTURJ RF9GT1JNQVQoMHgwMDIpDQo+KyNkZWZpbmUgRFBETUFJX0NNRElEX0RJU0FCTEUNCj5EUERNQUlf Q01ESURfRk9STUFUKDB4MDAzKQ0KPisjZGVmaW5lIERQRE1BSV9DTURJRF9HRVRfQVRUUg0KPkRQ RE1BSV9DTURJRF9GT1JNQVQoMHgwMDQpDQo+KyNkZWZpbmUgRFBETUFJX0NNRElEX1JFU0VUDQo+ RFBETUFJX0NNRElEX0ZPUk1BVCgweDAwNSkNCj4rI2RlZmluZSBEUERNQUlfQ01ESURfSVNfRU5B QkxFRA0KPkRQRE1BSV9DTURJRF9GT1JNQVQoMHgwMDYpDQo+Kw0KPisjZGVmaW5lIERQRE1BSV9D TURJRF9TRVRfSVJRDQo+RFBETUFJX0NNRElEX0ZPUk1BVCgweDAxMCkNCj4rI2RlZmluZSBEUERN QUlfQ01ESURfR0VUX0lSUQ0KPkRQRE1BSV9DTURJRF9GT1JNQVQoMHgwMTEpDQo+KyNkZWZpbmUg RFBETUFJX0NNRElEX1NFVF9JUlFfRU5BQkxFDQo+RFBETUFJX0NNRElEX0ZPUk1BVCgweDAxMikN Cj4rI2RlZmluZSBEUERNQUlfQ01ESURfR0VUX0lSUV9FTkFCTEUNCj5EUERNQUlfQ01ESURfRk9S TUFUKDB4MDEzKQ0KPisjZGVmaW5lIERQRE1BSV9DTURJRF9TRVRfSVJRX01BU0sNCj5EUERNQUlf Q01ESURfRk9STUFUKDB4MDE0KQ0KPisjZGVmaW5lIERQRE1BSV9DTURJRF9HRVRfSVJRX01BU0sN Cj5EUERNQUlfQ01ESURfRk9STUFUKDB4MDE1KQ0KPisjZGVmaW5lIERQRE1BSV9DTURJRF9HRVRf SVJRX1NUQVRVUw0KPkRQRE1BSV9DTURJRF9GT1JNQVQoMHgwMTYpDQo+KyNkZWZpbmUgRFBETUFJ X0NNRElEX0NMRUFSX0lSUV9TVEFUVVMNCj4JRFBETUFJX0NNRElEX0ZPUk1BVCgweDAxNykNCj4r DQo+KyNkZWZpbmUgRFBETUFJX0NNRElEX1NFVF9SWF9RVUVVRQ0KPglEUERNQUlfQ01ESURfRk9S TUFUKDB4MUEwKQ0KPisjZGVmaW5lIERQRE1BSV9DTURJRF9HRVRfUlhfUVVFVUUNCj5EUERNQUlf Q01ESURfRk9STUFUKDB4MUExKQ0KPisjZGVmaW5lIERQRE1BSV9DTURJRF9HRVRfVFhfUVVFVUUN Cj5EUERNQUlfQ01ESURfRk9STUFUKDB4MUEyKQ0KPisNCj4rI2RlZmluZSBNQ19DTURfSERSX1RP S0VOX08gMzIgIC8qIFRva2VuIGZpZWxkIG9mZnNldCAqLyAjZGVmaW5lDQo+K01DX0NNRF9IRFJf VE9LRU5fUyAxNiAgLyogVG9rZW4gZmllbGQgc2l6ZSAqLw0KPisNCj4rI2RlZmluZSBNQUtFX1VN QVNLNjQoX3dpZHRoKSBcDQo+KwkoKHU2NCkoKF93aWR0aCkgPCA2NCA/ICgodTY0KTEgPDwgKF93 aWR0aCkpIC0gMSA6ICh1NjQpLTEpKQ0KPisNCj4rLyogRGF0YSBQYXRoIERNQSBJbnRlcmZhY2Ug QVBJDQo+KyAqIENvbnRhaW5zIGluaXRpYWxpemF0aW9uIEFQSXMgYW5kIHJ1bnRpbWUgY29udHJv bCBBUElzIGZvciBEUERNQUkgICovDQo+Kw0KPisvKioNCj4rICogTWF4aW11bSBudW1iZXIgb2Yg VHgvUnggcHJpb3JpdGllcyBwZXIgRFBETUFJIG9iamVjdCAgKi8NCj4rI2RlZmluZSBEUERNQUlf UFJJT19OVU0JCTINCj4rDQo+Ky8qIERQRE1BSSBxdWV1ZSBtb2RpZmljYXRpb24gb3B0aW9ucyAq Lw0KPisNCj4rLyoqDQo+KyAqIFNlbGVjdCB0byBtb2RpZnkgdGhlIHVzZXIncyBjb250ZXh0IGFz c29jaWF0ZWQgd2l0aCB0aGUgcXVldWUgICovDQo+KyNkZWZpbmUgRFBETUFJX1FVRVVFX09QVF9V U0VSX0NUWAkweDENCj4rDQo+Ky8qKg0KPisgKiBTZWxlY3QgdG8gbW9kaWZ5IHRoZSBxdWV1ZSdz IGRlc3RpbmF0aW9uICAqLw0KPisjZGVmaW5lIERQRE1BSV9RVUVVRV9PUFRfREVTVAkJMHgyDQo+ Kw0KPisvKioNCj4rICogZHBkbWFpX29wZW4oKSAtIE9wZW4gYSBjb250cm9sIHNlc3Npb24gZm9y IHRoZSBzcGVjaWZpZWQgb2JqZWN0DQo+KyAqIEBtY19pbzoJUG9pbnRlciB0byBNQyBwb3J0YWwn cyBJL08gb2JqZWN0DQo+KyAqIEBjbWRfZmxhZ3M6CUNvbW1hbmQgZmxhZ3M7IG9uZSBvciBtb3Jl IG9mICdNQ19DTURfRkxBR18nDQo+KyAqIEBkcGRtYWlfaWQ6CURQRE1BSSB1bmlxdWUgSUQNCj4r ICogQHRva2VuOglSZXR1cm5lZCB0b2tlbjsgdXNlIGluIHN1YnNlcXVlbnQgQVBJIGNhbGxzDQo+ KyAqDQo+KyAqIFRoaXMgZnVuY3Rpb24gY2FuIGJlIHVzZWQgdG8gb3BlbiBhIGNvbnRyb2wgc2Vz c2lvbiBmb3IgYW4NCj4rICogYWxyZWFkeSBjcmVhdGVkIG9iamVjdDsgYW4gb2JqZWN0IG1heSBo YXZlIGJlZW4gZGVjbGFyZWQgaW4NCj4rICogdGhlIERQTCBvciBieSBjYWxsaW5nIHRoZSBkcGRt YWlfY3JlYXRlKCkgZnVuY3Rpb24uDQo+KyAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyBhIHVuaXF1 ZSBhdXRoZW50aWNhdGlvbiB0b2tlbiwNCj4rICogYXNzb2NpYXRlZCB3aXRoIHRoZSBzcGVjaWZp YyBvYmplY3QgSUQgYW5kIHRoZSBzcGVjaWZpYyBNQw0KPisgKiBwb3J0YWw7IHRoaXMgdG9rZW4g bXVzdCBiZSB1c2VkIGluIGFsbCBzdWJzZXF1ZW50IGNvbW1hbmRzIGZvcg0KPisgKiB0aGlzIHNw ZWNpZmljIG9iamVjdC4NCj4rICoNCj4rICogUmV0dXJuOgknMCcgb24gU3VjY2VzczsgRXJyb3Ig Y29kZSBvdGhlcndpc2UuDQo+KyAqLw0KPitpbnQgZHBkbWFpX29wZW4oc3RydWN0IGZzbF9tY19p byAqbWNfaW8sIHUzMiBjbWRfZmxhZ3MsDQo+KwkJaW50IGRwZG1haV9pZCwgdTE2ICp0b2tlbik7 DQo+Kw0KPisvKioNCj4rICogZHBkbWFpX2Nsb3NlKCkgLSBDbG9zZSB0aGUgY29udHJvbCBzZXNz aW9uIG9mIHRoZSBvYmplY3QNCj4rICogQG1jX2lvOglQb2ludGVyIHRvIE1DIHBvcnRhbCdzIEkv TyBvYmplY3QNCj4rICogQGNtZF9mbGFnczoJQ29tbWFuZCBmbGFnczsgb25lIG9yIG1vcmUgb2Yg J01DX0NNRF9GTEFHXycNCj4rICogQHRva2VuOglUb2tlbiBvZiBEUERNQUkgb2JqZWN0DQo+KyAq DQo+KyAqIEFmdGVyIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkLCBubyBmdXJ0aGVyIG9wZXJhdGlv bnMgYXJlDQo+KyAqIGFsbG93ZWQgb24gdGhlIG9iamVjdCB3aXRob3V0IG9wZW5pbmcgYSBuZXcg Y29udHJvbCBzZXNzaW9uLg0KPisgKg0KPisgKiBSZXR1cm46CScwJyBvbiBTdWNjZXNzOyBFcnJv ciBjb2RlIG90aGVyd2lzZS4NCj4rICovDQo+K2ludCBkcGRtYWlfY2xvc2Uoc3RydWN0IGZzbF9t Y19pbyAqbWNfaW8sIHUzMiBjbWRfZmxhZ3MsDQo+KwkJIHUxNiB0b2tlbik7DQo+Kw0KPisvKioN Cj4rICogc3RydWN0IGRwZG1haV9jZmcgLSBTdHJ1Y3R1cmUgcmVwcmVzZW50aW5nIERQRE1BSSBj b25maWd1cmF0aW9uDQo+KyAqIEBwcmlvcml0aWVzOiBQcmlvcml0aWVzIGZvciB0aGUgRE1BIGhh cmR3YXJlIHByb2Nlc3Npbmc7IHZhbGlkIHByaW9yaXRpZXMgYXJlDQo+KyAqCWNvbmZpZ3VyZWQg d2l0aCB2YWx1ZXMgMS04OyB0aGUgZW50cnkgZm9sbG93aW5nIGxhc3QgdmFsaWQgZW50cnkNCj4r ICoJc2hvdWxkIGJlIGNvbmZpZ3VyZWQgd2l0aCAwDQo+KyAqLw0KPitzdHJ1Y3QgZHBkbWFpX2Nm ZyB7DQo+Kwl1OCBwcmlvcml0aWVzW0RQRE1BSV9QUklPX05VTV07DQo+K307DQo+Kw0KPisvKioN Cj4rICogZHBkbWFpX2NyZWF0ZSgpIC0gQ3JlYXRlIHRoZSBEUERNQUkgb2JqZWN0DQo+KyAqIEBt Y19pbzoJUG9pbnRlciB0byBNQyBwb3J0YWwncyBJL08gb2JqZWN0DQo+KyAqIEBjbWRfZmxhZ3M6 CUNvbW1hbmQgZmxhZ3M7IG9uZSBvciBtb3JlIG9mICdNQ19DTURfRkxBR18nDQo+KyAqIEBjZmc6 CUNvbmZpZ3VyYXRpb24gc3RydWN0dXJlDQo+KyAqIEB0b2tlbjoJUmV0dXJuZWQgdG9rZW47IHVz ZSBpbiBzdWJzZXF1ZW50IEFQSSBjYWxscw0KPisgKg0KPisgKiBDcmVhdGUgdGhlIERQRE1BSSBv YmplY3QsIGFsbG9jYXRlIHJlcXVpcmVkIHJlc291cmNlcyBhbmQNCj4rICogcGVyZm9ybSByZXF1 aXJlZCBpbml0aWFsaXphdGlvbi4NCj4rICoNCj4rICogVGhlIG9iamVjdCBjYW4gYmUgY3JlYXRl ZCBlaXRoZXIgYnkgZGVjbGFyaW5nIGl0IGluIHRoZQ0KPisgKiBEUEwgZmlsZSwgb3IgYnkgY2Fs bGluZyB0aGlzIGZ1bmN0aW9uLg0KPisgKg0KPisgKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgYSB1 bmlxdWUgYXV0aGVudGljYXRpb24gdG9rZW4sDQo+KyAqIGFzc29jaWF0ZWQgd2l0aCB0aGUgc3Bl Y2lmaWMgb2JqZWN0IElEIGFuZCB0aGUgc3BlY2lmaWMgTUMNCj4rICogcG9ydGFsOyB0aGlzIHRv a2VuIG11c3QgYmUgdXNlZCBpbiBhbGwgc3Vic2VxdWVudCBjYWxscyB0bw0KPisgKiB0aGlzIHNw ZWNpZmljIG9iamVjdC4gRm9yIG9iamVjdHMgdGhhdCBhcmUgY3JlYXRlZCB1c2luZyB0aGUNCj4r ICogRFBMIGZpbGUsIGNhbGwgZHBkbWFpX29wZW4oKSBmdW5jdGlvbiB0byBnZXQgYW4gYXV0aGVu dGljYXRpb24NCj4rICogdG9rZW4gZmlyc3QuDQo+KyAqDQo+KyAqIFJldHVybjoJJzAnIG9uIFN1 Y2Nlc3M7IEVycm9yIGNvZGUgb3RoZXJ3aXNlLg0KPisgKi8NCj4raW50IGRwZG1haV9jcmVhdGUo c3RydWN0IGZzbF9tY19pbyAqbWNfaW8sIHUzMiBjbWRfZmxhZ3MsDQo+KwkJICBjb25zdCBzdHJ1 Y3QgZHBkbWFpX2NmZyAqY2ZnLCB1MTYgKnRva2VuKTsNCj4rDQo+Ky8qKg0KPisgKiBkcGRtYWlf ZW5hYmxlKCkgLSBFbmFibGUgdGhlIERQRE1BSSwgYWxsb3cgc2VuZGluZyBhbmQgcmVjZWl2aW5n IGZyYW1lcy4NCj4rICogQG1jX2lvOglQb2ludGVyIHRvIE1DIHBvcnRhbCdzIEkvTyBvYmplY3QN Cj4rICogQGNtZF9mbGFnczoJQ29tbWFuZCBmbGFnczsgb25lIG9yIG1vcmUgb2YgJ01DX0NNRF9G TEFHXycNCj4rICogQHRva2VuOglUb2tlbiBvZiBEUERNQUkgb2JqZWN0DQo+KyAqDQo+KyAqIFJl dHVybjoJJzAnIG9uIFN1Y2Nlc3M7IEVycm9yIGNvZGUgb3RoZXJ3aXNlLg0KPisgKi8NCj4raW50 IGRwZG1haV9lbmFibGUoc3RydWN0IGZzbF9tY19pbyAqbWNfaW8sIHUzMiBjbWRfZmxhZ3MsDQo+ KwkJICB1MTYgdG9rZW4pOw0KPisNCj4rLyoqDQo+KyAqIGRwZG1haV9kaXNhYmxlKCkgLSBEaXNh YmxlIHRoZSBEUERNQUksIHN0b3Agc2VuZGluZyBhbmQgcmVjZWl2aW5nIGZyYW1lcy4NCj4rICog QG1jX2lvOglQb2ludGVyIHRvIE1DIHBvcnRhbCdzIEkvTyBvYmplY3QNCj4rICogQGNtZF9mbGFn czoJQ29tbWFuZCBmbGFnczsgb25lIG9yIG1vcmUgb2YgJ01DX0NNRF9GTEFHXycNCj4rICogQHRv a2VuOglUb2tlbiBvZiBEUERNQUkgb2JqZWN0DQo+KyAqDQo+KyAqIFJldHVybjoJJzAnIG9uIFN1 Y2Nlc3M7IEVycm9yIGNvZGUgb3RoZXJ3aXNlLg0KPisgKi8NCj4raW50IGRwZG1haV9kaXNhYmxl KHN0cnVjdCBmc2xfbWNfaW8gKm1jX2lvLCB1MzIgY21kX2ZsYWdzLA0KPisJCSAgIHUxNiB0b2tl bik7DQo+Kw0KPisvKioNCj4rICogZHBkbWFpX3Jlc2V0KCkgLSBSZXNldCB0aGUgRFBETUFJLCBy ZXR1cm5zIHRoZSBvYmplY3QgdG8gaW5pdGlhbCBzdGF0ZS4NCj4rICogQG1jX2lvOglQb2ludGVy IHRvIE1DIHBvcnRhbCdzIEkvTyBvYmplY3QNCj4rICogQGNtZF9mbGFnczoJQ29tbWFuZCBmbGFn czsgb25lIG9yIG1vcmUgb2YgJ01DX0NNRF9GTEFHXycNCj4rICogQHRva2VuOglUb2tlbiBvZiBE UERNQUkgb2JqZWN0DQo+KyAqDQo+KyAqIFJldHVybjoJJzAnIG9uIFN1Y2Nlc3M7IEVycm9yIGNv ZGUgb3RoZXJ3aXNlLg0KPisgKi8NCj4raW50IGRwZG1haV9yZXNldChzdHJ1Y3QgZnNsX21jX2lv ICptY19pbywgdTMyIGNtZF9mbGFncywNCj4rCQkgdTE2IHRva2VuKTsNCj4rDQo+Ky8qKg0KPisg KiBzdHJ1Y3QgZHBkbWFpX2F0dHIgLSBTdHJ1Y3R1cmUgcmVwcmVzZW50aW5nIERQRE1BSSBhdHRy aWJ1dGVzDQo+KyAqIEBpZDogRFBETUFJIG9iamVjdCBJRA0KPisgKiBAdmVyc2lvbjogRFBETUFJ IHZlcnNpb24NCj4rICogQG51bV9vZl9wcmlvcml0aWVzOiBudW1iZXIgb2YgcHJpb3JpdGllcyAg Ki8gc3RydWN0IGRwZG1haV9hdHRyIHsNCj4rCWludAlpZDsNCj4rCS8qKg0KPisJICogc3RydWN0 IHZlcnNpb24gLSBEUERNQUkgdmVyc2lvbg0KPisJICogQG1ham9yOiBEUERNQUkgbWFqb3IgdmVy c2lvbg0KPisJICogQG1pbm9yOiBEUERNQUkgbWlub3IgdmVyc2lvbg0KPisJICovDQo+KwlzdHJ1 Y3Qgew0KPisJCXUxNiBtYWpvcjsNCj4rCQl1MTYgbWlub3I7DQo+Kwl9IHZlcnNpb247DQo+Kwl1 OCBudW1fb2ZfcHJpb3JpdGllczsNCj4rfTsNCj4rDQo+Ky8qKg0KPisgKiBkcGRtYWlfZ2V0X2F0 dHJpYnV0ZXMoKSAtIFJldHJpZXZlIERQRE1BSSBhdHRyaWJ1dGVzLg0KPisgKiBAbWNfaW86CVBv aW50ZXIgdG8gTUMgcG9ydGFsJ3MgSS9PIG9iamVjdA0KPisgKiBAY21kX2ZsYWdzOglDb21tYW5k IGZsYWdzOyBvbmUgb3IgbW9yZSBvZiAnTUNfQ01EX0ZMQUdfJw0KPisgKiBAdG9rZW46CVRva2Vu IG9mIERQRE1BSSBvYmplY3QNCj4rICogQGF0dHI6CVJldHVybmVkIG9iamVjdCdzIGF0dHJpYnV0 ZXMNCj4rICoNCj4rICogUmV0dXJuOgknMCcgb24gU3VjY2VzczsgRXJyb3IgY29kZSBvdGhlcndp c2UuDQo+KyAqLw0KPitpbnQgZHBkbWFpX2dldF9hdHRyaWJ1dGVzKHN0cnVjdCBmc2xfbWNfaW8g Km1jX2lvLCB1MzIgY21kX2ZsYWdzLA0KPisJCQkgIHUxNiB0b2tlbiwgc3RydWN0IGRwZG1haV9h dHRyCSphdHRyKTsNCj4rDQo+Ky8qKg0KPisgKiBlbnVtIGRwZG1haV9kZXN0IC0gRFBETUFJIGRl c3RpbmF0aW9uIHR5cGVzDQo+KyAqIEBEUERNQUlfREVTVF9OT05FOiBVbmFzc2lnbmVkIGRlc3Rp bmF0aW9uOyBUaGUgcXVldWUgaXMgc2V0IGluDQo+cGFya2VkIG1vZGUNCj4rICoJYW5kIGRvZXMg bm90IGdlbmVyYXRlIEZRREFOIG5vdGlmaWNhdGlvbnM7IHVzZXIgaXMgZXhwZWN0ZWQgdG8gZGVx dWV1ZQ0KPisgKglmcm9tIHRoZSBxdWV1ZSBiYXNlZCBvbiBwb2xsaW5nIG9yIG90aGVyIHVzZXIt ZGVmaW5lZCBtZXRob2QNCj4rICogQERQRE1BSV9ERVNUX0RQSU86IFRoZSBxdWV1ZSBpcyBzZXQg aW4gc2NoZWR1bGUgbW9kZSBhbmQgZ2VuZXJhdGVzDQo+RlFEQU4NCj4rICoJbm90aWZpY2F0aW9u cyB0byB0aGUgc3BlY2lmaWVkIERQSU87IHVzZXIgaXMgZXhwZWN0ZWQgdG8gZGVxdWV1ZQ0KPisg Kglmcm9tIHRoZSBxdWV1ZSBvbmx5IGFmdGVyIG5vdGlmaWNhdGlvbiBpcyByZWNlaXZlZA0KPisg KiBARFBETUFJX0RFU1RfRFBDT046IFRoZSBxdWV1ZSBpcyBzZXQgaW4gc2NoZWR1bGUgbW9kZSBh bmQgZG9lcyBub3QNCj5nZW5lcmF0ZQ0KPisgKglGUURBTiBub3RpZmljYXRpb25zLCBidXQgaXMg Y29ubmVjdGVkIHRvIHRoZSBzcGVjaWZpZWQgRFBDT04gb2JqZWN0Ow0KPisgKgl1c2VyIGlzIGV4 cGVjdGVkIHRvIGRlcXVldWUgZnJvbSB0aGUgRFBDT04gY2hhbm5lbA0KPisgKi8NCj4rZW51bSBk cGRtYWlfZGVzdCB7DQo+KwlEUERNQUlfREVTVF9OT05FID0gMCwNCj4rCURQRE1BSV9ERVNUX0RQ SU8gPSAxLA0KPisJRFBETUFJX0RFU1RfRFBDT04gPSAyDQo+K307DQo+Kw0KPisvKioNCj4rICog c3RydWN0IGRwZG1haV9kZXN0X2NmZyAtIFN0cnVjdHVyZSByZXByZXNlbnRpbmcgRFBETUFJIGRl c3RpbmF0aW9uDQo+K3BhcmFtZXRlcnMNCj4rICogQGRlc3RfdHlwZTogRGVzdGluYXRpb24gdHlw ZQ0KPisgKiBAZGVzdF9pZDogRWl0aGVyIERQSU8gSUQgb3IgRFBDT04gSUQsIGRlcGVuZGluZyBv biB0aGUgZGVzdGluYXRpb24NCj4rdHlwZQ0KPisgKiBAcHJpb3JpdHk6IFByaW9yaXR5IHNlbGVj dGlvbiB3aXRoaW4gdGhlIERQSU8gb3IgRFBDT04gY2hhbm5lbDsgdmFsaWQNCj52YWx1ZXMNCj4r ICoJYXJlIDAtMSBvciAwLTcsIGRlcGVuZGluZyBvbiB0aGUgbnVtYmVyIG9mIHByaW9yaXRpZXMg aW4gdGhhdA0KPisgKgljaGFubmVsOyBub3QgcmVsZXZhbnQgZm9yICdEUERNQUlfREVTVF9OT05F JyBvcHRpb24NCj4rICovDQo+K3N0cnVjdCBkcGRtYWlfZGVzdF9jZmcgew0KPisJZW51bSBkcGRt YWlfZGVzdCBkZXN0X3R5cGU7DQo+KwlpbnQgZGVzdF9pZDsNCj4rCXU4IHByaW9yaXR5Ow0KPit9 Ow0KPisNCj4rLyoqDQo+KyAqIHN0cnVjdCBkcGRtYWlfcnhfcXVldWVfY2ZnIC0gRFBETUFJIFJY IHF1ZXVlIGNvbmZpZ3VyYXRpb24NCj4rICogQG9wdGlvbnM6IEZsYWdzIHJlcHJlc2VudGluZyB0 aGUgc3VnZ2VzdGVkIG1vZGlmaWNhdGlvbnMgdG8gdGhlIHF1ZXVlOw0KPisgKglVc2UgYW55IGNv bWJpbmF0aW9uIG9mICdEUERNQUlfUVVFVUVfT1BUXzxYPicgZmxhZ3MNCj4rICogQHVzZXJfY3R4 OiBVc2VyIGNvbnRleHQgdmFsdWUgcHJvdmlkZWQgaW4gdGhlIGZyYW1lIGRlc2NyaXB0b3Igb2Yg ZWFjaA0KPisgKglkZXF1ZXVlZCBmcmFtZTsNCj4rICoJdmFsaWQgb25seSBpZiAnRFBETUFJX1FV RVVFX09QVF9VU0VSX0NUWCcgaXMgY29udGFpbmVkIGluICdvcHRpb25zJw0KPisgKiBAZGVzdF9j Zmc6IFF1ZXVlIGRlc3RpbmF0aW9uIHBhcmFtZXRlcnM7DQo+KyAqCXZhbGlkIG9ubHkgaWYgJ0RQ RE1BSV9RVUVVRV9PUFRfREVTVCcgaXMgY29udGFpbmVkIGluICdvcHRpb25zJw0KPisgKi8NCj4r c3RydWN0IGRwZG1haV9yeF9xdWV1ZV9jZmcgew0KPisJc3RydWN0IGRwZG1haV9kZXN0X2NmZyBk ZXN0X2NmZzsNCj4rCXUzMiBvcHRpb25zOw0KPisJdTY0IHVzZXJfY3R4Ow0KPisNCj4rfTsNCj4r DQo+Ky8qKg0KPisgKiBkcGRtYWlfc2V0X3J4X3F1ZXVlKCkgLSBTZXQgUnggcXVldWUgY29uZmln dXJhdGlvbg0KPisgKiBAbWNfaW86CVBvaW50ZXIgdG8gTUMgcG9ydGFsJ3MgSS9PIG9iamVjdA0K PisgKiBAY21kX2ZsYWdzOglDb21tYW5kIGZsYWdzOyBvbmUgb3IgbW9yZSBvZiAnTUNfQ01EX0ZM QUdfJw0KPisgKiBAdG9rZW46CVRva2VuIG9mIERQRE1BSSBvYmplY3QNCj4rICogQHByaW9yaXR5 OglTZWxlY3QgdGhlIHF1ZXVlIHJlbGF0aXZlIHRvIG51bWJlciBvZg0KPisgKgkJcHJpb3JpdGll cyBjb25maWd1cmVkIGF0IERQRE1BSSBjcmVhdGlvbg0KPisgKiBAY2ZnOglSeCBxdWV1ZSBjb25m aWd1cmF0aW9uDQo+KyAqDQo+KyAqIFJldHVybjoJJzAnIG9uIFN1Y2Nlc3M7IEVycm9yIGNvZGUg b3RoZXJ3aXNlLg0KPisgKi8NCj4raW50IGRwZG1haV9zZXRfcnhfcXVldWUoc3RydWN0IGZzbF9t Y19pbyAqbWNfaW8sIHUzMiBjbWRfZmxhZ3MsDQo+KwkJCXUxNiB0b2tlbiwgdTggcHJpb3JpdHks DQo+KwkJCWNvbnN0IHN0cnVjdCBkcGRtYWlfcnhfcXVldWVfY2ZnICpjZmcpOw0KPisNCj4rLyoq DQo+KyAqIHN0cnVjdCBkcGRtYWlfcnhfcXVldWVfYXR0ciAtIFN0cnVjdHVyZSByZXByZXNlbnRp bmcgYXR0cmlidXRlcyBvZg0KPitSeCBxdWV1ZXMNCj4rICogQHVzZXJfY3R4OiAgVXNlciBjb250 ZXh0IHZhbHVlIHByb3ZpZGVkIGluIHRoZSBmcmFtZSBkZXNjcmlwdG9yIG9mIGVhY2gNCj4rICoJ IGRlcXVldWVkIGZyYW1lDQo+KyAqIEBkZXN0X2NmZzogUXVldWUgZGVzdGluYXRpb24gY29uZmln dXJhdGlvbg0KPisgKiBAZnFpZDogVmlydHVhbCBGUUlEIHZhbHVlIHRvIGJlIHVzZWQgZm9yIGRl cXVldWUgb3BlcmF0aW9ucyAgKi8NCj4rc3RydWN0IGRwZG1haV9yeF9xdWV1ZV9hdHRyIHsNCj4r CXN0cnVjdCBkcGRtYWlfZGVzdF9jZmcJZGVzdF9jZmc7DQo+Kwl1NjQgdXNlcl9jdHg7DQo+Kwl1 MzIgZnFpZDsNCj4rfTsNCj4rDQo+Ky8qKg0KPisgKiBkcGRtYWlfZ2V0X3J4X3F1ZXVlKCkgLSBS ZXRyaWV2ZSBSeCBxdWV1ZSBhdHRyaWJ1dGVzLg0KPisgKiBAbWNfaW86CVBvaW50ZXIgdG8gTUMg cG9ydGFsJ3MgSS9PIG9iamVjdA0KPisgKiBAY21kX2ZsYWdzOglDb21tYW5kIGZsYWdzOyBvbmUg b3IgbW9yZSBvZiAnTUNfQ01EX0ZMQUdfJw0KPisgKiBAdG9rZW46CVRva2VuIG9mIERQRE1BSSBv YmplY3QNCj4rICogQHByaW9yaXR5OglTZWxlY3QgdGhlIHF1ZXVlIHJlbGF0aXZlIHRvIG51bWJl ciBvZg0KPisgKgkJCQlwcmlvcml0aWVzIGNvbmZpZ3VyZWQgYXQgRFBETUFJIGNyZWF0aW9uDQo+ KyAqIEBhdHRyOglSZXR1cm5lZCBSeCBxdWV1ZSBhdHRyaWJ1dGVzDQo+KyAqDQo+KyAqIFJldHVy bjoJJzAnIG9uIFN1Y2Nlc3M7IEVycm9yIGNvZGUgb3RoZXJ3aXNlLg0KPisgKi8NCj4raW50IGRw ZG1haV9nZXRfcnhfcXVldWUoc3RydWN0IGZzbF9tY19pbyAqbWNfaW8sIHUzMiBjbWRfZmxhZ3Ms DQo+KwkJCXUxNiB0b2tlbiwgdTggcHJpb3JpdHksDQo+KwkJCXN0cnVjdCBkcGRtYWlfcnhfcXVl dWVfYXR0ciAqYXR0cik7DQo+Kw0KPisvKioNCj4rICogc3RydWN0IGRwZG1haV90eF9xdWV1ZV9h dHRyIC0gU3RydWN0dXJlIHJlcHJlc2VudGluZyBhdHRyaWJ1dGVzIG9mDQo+K1R4IHF1ZXVlcw0K PisgKiBAZnFpZDogVmlydHVhbCBGUUlEIHRvIGJlIHVzZWQgZm9yIHNlbmRpbmcgZnJhbWVzIHRv IERNQSBoYXJkd2FyZQ0KPisqLw0KPisNCj4rc3RydWN0IGRwZG1haV90eF9xdWV1ZV9hdHRyIHsN Cj4rCXUzMiBmcWlkOw0KPit9Ow0KPisNCj4rLyoqDQo+KyAqIGRwZG1haV9nZXRfdHhfcXVldWUo KSAtIFJldHJpZXZlIFR4IHF1ZXVlIGF0dHJpYnV0ZXMuDQo+KyAqIEBtY19pbzoJUG9pbnRlciB0 byBNQyBwb3J0YWwncyBJL08gb2JqZWN0DQo+KyAqIEBjbWRfZmxhZ3M6CUNvbW1hbmQgZmxhZ3M7 IG9uZSBvciBtb3JlIG9mICdNQ19DTURfRkxBR18nDQo+KyAqIEB0b2tlbjoJVG9rZW4gb2YgRFBE TUFJIG9iamVjdA0KPisgKiBAcHJpb3JpdHk6CVNlbGVjdCB0aGUgcXVldWUgcmVsYXRpdmUgdG8g bnVtYmVyIG9mDQo+KyAqCQkJcHJpb3JpdGllcyBjb25maWd1cmVkIGF0IERQRE1BSSBjcmVhdGlv bg0KPisgKiBAYXR0cjoJUmV0dXJuZWQgVHggcXVldWUgYXR0cmlidXRlcw0KPisgKg0KPisgKiBS ZXR1cm46CScwJyBvbiBTdWNjZXNzOyBFcnJvciBjb2RlIG90aGVyd2lzZS4NCj4rICovDQo+K2lu dCBkcGRtYWlfZ2V0X3R4X3F1ZXVlKHN0cnVjdCBmc2xfbWNfaW8gKm1jX2lvLCB1MzIgY21kX2Zs YWdzLA0KPisJCQl1MTYgdG9rZW4sIHU4IHByaW9yaXR5LA0KPisJCQlzdHJ1Y3QgZHBkbWFpX3R4 X3F1ZXVlX2F0dHIgKmF0dHIpOw0KPisNCj4rI2VuZGlmIC8qIF9fRlNMX0RQRE1BSV9IICovDQo+ LS0NCj4xLjcuMQ0KDQo=