From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-6.8 required=3.0 tests=DKIM_SIGNED,DKIM_VALID, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI,SIGNED_OFF_BY, SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED autolearn=unavailable autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 0D554C49ED7 for ; Thu, 19 Sep 2019 10:54:05 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id AB86521929 for ; Thu, 19 Sep 2019 10:54:04 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (1024-bit key) header.d=silabs.onmicrosoft.com header.i=@silabs.onmicrosoft.com header.b="SNK4hoQB" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2389699AbfISKxu (ORCPT ); Thu, 19 Sep 2019 06:53:50 -0400 Received: from mail-eopbgr730082.outbound.protection.outlook.com ([40.107.73.82]:1632 "EHLO NAM05-DM3-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S2389485AbfISKxB (ORCPT ); Thu, 19 Sep 2019 06:53:01 -0400 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=eObrBD8g3TqhCx3uiBWA/4ZUHasImlGmQclxKG8c1EDbJw4i0x1r5C+5vhj6EvHhn2EqNgBxJSQoT3nGuTi2beszJ8phK4gQDufD1OnoJ7oP0Qr6kfDd7qytCjrbIKo/etP5c05NWCWEdgCbFN0SP8fTICtbpXYAmzoVddbHfNHyxZUJ7LaTBM8nlY/dvJ9U4mrIgA4U3lJyZukJ6UjUbNUuIQX+VEoCjPa4MMDrACg7wMTK7CAJWDs9W2a7FGwS6XQStCdvt0ZtpieArCWffq8dBnpcEb0S+SWe/LPnNERBXKwjZM37gQfW6NNuAIKtt697jaiwXdkxrs9SJ9cc5Q== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=T9FwiM1PewI4izDyUFtXEkwLjKyrhFJgiDgP0ZfVuAI=; b=Pak5/cnraDRUPBafSZSdXcQaBO4Y7IeCjLmBFdk/snxOZQzQeVQombHX5wB6vdxrwAh/7qHR6dWq5kA/c3/b+HCr+hvRboqQuheEq7HJNKSFXSukj0ZvLqf8r/wRZdKRVzJs2c0K/+FgE4bdaOth5VK7olQxSO0bZ7yRyOVRdfsEyX0IP7eOL0A6Vpyxqo05p7BmRX88BOpqOp6np+NmAkzaE7GOy08R7OLWOUT4o61jhlbSGM8O+YCygWWR74Q7DgTllwuQP4VuXHbBHz//V3R7+gMnAO2xLp5Vzl3EGgYbUL3MFb4tVuacKyV+GiDMkxx/gqC8/SyMoFxw5EOsgA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=silabs.com; dmarc=pass action=none header.from=silabs.com; dkim=pass header.d=silabs.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=silabs.onmicrosoft.com; s=selector2-silabs-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=T9FwiM1PewI4izDyUFtXEkwLjKyrhFJgiDgP0ZfVuAI=; b=SNK4hoQBo8GCFzCp2lY+7fd9mPA6sdrTI3SLWKpC9MAvfOQ9XQUgpuKOzMscRskQ0dZTDTbrikCSQEb5A/YIZKkwzKZQw3yzwS0KY7JV7gDaz0MjDpUCa210tDKSy9nsNXtHmjAPVV6fnmcwTAE7+DcPWW2BnFbcgPSkP+N4pUo= Received: from MN2PR11MB4063.namprd11.prod.outlook.com (20.179.149.217) by MN2PR11MB4415.namprd11.prod.outlook.com (52.135.39.95) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2263.17; Thu, 19 Sep 2019 10:52:44 +0000 Received: from MN2PR11MB4063.namprd11.prod.outlook.com ([fe80::45dc:e073:4446:4bf8]) by MN2PR11MB4063.namprd11.prod.outlook.com ([fe80::45dc:e073:4446:4bf8%3]) with mapi id 15.20.2263.023; Thu, 19 Sep 2019 10:52:44 +0000 From: Jerome Pouiller To: "devel@driverdev.osuosl.org" , "linux-wireless@vger.kernel.org" CC: "netdev@vger.kernel.org" , "linux-kernel@vger.kernel.org" , Greg Kroah-Hartman , Kalle Valo , "David S . Miller" , David Le Goff , Jerome Pouiller Subject: [PATCH 16/20] staging: wfx: allow to send 802.11 frames Thread-Topic: [PATCH 16/20] staging: wfx: allow to send 802.11 frames Thread-Index: AQHVbthce/oxyB/cWEOY9AkWlrXJYA== Date: Thu, 19 Sep 2019 10:52:42 +0000 Message-ID: <20190919105153.15285-17-Jerome.Pouiller@silabs.com> References: <20190919105153.15285-1-Jerome.Pouiller@silabs.com> In-Reply-To: <20190919105153.15285-1-Jerome.Pouiller@silabs.com> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: authentication-results: spf=none (sender IP is ) smtp.mailfrom=Jerome.Pouiller@silabs.com; x-originating-ip: [37.71.187.125] x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: 4aa693fe-25ab-4b91-12d2-08d73cef8040 x-microsoft-antispam: BCL:0;PCL:0;RULEID:(2390118)(7020095)(4652040)(8989299)(5600167)(711020)(4605104)(1401327)(4534185)(4627221)(201703031133081)(201702281549075)(8990200)(2017052603328)(7193020);SRVR:MN2PR11MB4415; x-ms-traffictypediagnostic: MN2PR11MB4415: x-ms-exchange-transport-forked: True x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers: OLM:5236; x-forefront-prvs: 016572D96D x-forefront-antispam-report: SFV:NSPM;SFS:(10009020)(346002)(396003)(366004)(39850400004)(376002)(136003)(189003)(199004)(14454004)(71190400001)(2906002)(81156014)(81166006)(478600001)(316002)(2501003)(64756008)(76176011)(66476007)(256004)(86362001)(66446008)(99286004)(25786009)(8676002)(66556008)(66946007)(11346002)(6512007)(110136005)(66574012)(5660300002)(54906003)(30864003)(6436002)(71200400001)(14444005)(76116006)(3846002)(6506007)(91956017)(1076003)(6116002)(486006)(305945005)(36756003)(2616005)(446003)(4326008)(7736002)(8936002)(66066001)(186003)(107886003)(26005)(476003)(6486002)(102836004)(569006);DIR:OUT;SFP:1101;SCL:1;SRVR:MN2PR11MB4415;H:MN2PR11MB4063.namprd11.prod.outlook.com;FPR:;SPF:None;LANG:en;PTR:InfoNoRecords;MX:1;A:1; received-spf: None (protection.outlook.com: silabs.com does not designate permitted sender hosts) x-ms-exchange-senderadcheck: 1 x-microsoft-antispam-message-info: +jC+i2D38zpOWb+kkNiJAX3V0/ECijOrYRRp/XVAQMxAc4L57pOC1QLNdvWFACIOT7NdODjXwwc1hLSLp6a1y29sTF8Fv4lDLrPyGJ+ukM7IaZTOP+SU5dJRe1Gu7GbDglnt7wxcuHV/OlLmXJVPYoGcqZvTwTOCNv39RcZI3NNrj2Q0jg30/73q2dRXE6qdw82yOTb2pS92zLjg5Qte9kCwQD3WVp7GRKGFNFirJYg4oV6zrpRVSl2htlmyYy7LoCKSy/OTTJooMLjpBjS5CmMQa6z3oDTq/f9qCo7i+hXbrsnFm7UyjqN0RJV6m9J1ZYoYG4nZDimI1rWEN4VLb0LiBE682OMURAJsZqUac9i31jRqPCraGqld33tcFzjQmaa6JO5HEzsxlbK5mj9lOvU83euwni+9BYhYrMlW6Ac= Content-Type: text/plain; charset="utf-8" Content-ID: Content-Transfer-Encoding: base64 MIME-Version: 1.0 X-OriginatorOrg: silabs.com X-MS-Exchange-CrossTenant-Network-Message-Id: 4aa693fe-25ab-4b91-12d2-08d73cef8040 X-MS-Exchange-CrossTenant-originalarrivaltime: 19 Sep 2019 10:52:42.8305 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 54dbd822-5231-4b20-944d-6f4abcd541fb X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: zr/votypORVz9OmFLHxqiuK+qSm44BxuFOmWrRzEc2AXK3mUSZnbtxRLjNwCGc0k22pV4ULbnUESCByiGrWzCA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: MN2PR11MB4415 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org RnJvbTogSsOpcsO0bWUgUG91aWxsZXIgPGplcm9tZS5wb3VpbGxlckBzaWxhYnMuY29tPg0KDQpU aHJlZSB0aGluZ3MgbWFrZSB0aGlzIHRhc2sgbW9yZSBjb21wbGV4IHRoYW4gaXQgc2hvdWxkOg0K ICAtIENoaXAgbmVjZXNzaXRhdGUgdG8gYXNzb2NpYXRlIGEgbGluay1pZCB0byBlYWNoIHN0YXRp b24uIEl0IGlzIHNhbWUNCiAgICB0aGluZyB0aGFuIGFzc29jaWF0aW9uIElEIGJ1dCwgdXNpbmcg OCBiaXRzIG9ubHkuDQogIC0gUmF0ZSBwb2xpY3kgaXMgc2VudCBzZXBhcmF0ZWx5IGZyb20gVHgg ZnJhbWVzDQogIC0gRHJpdmVyIHRyeSB0byBoYW5kbGUgaXRzZWxmIHBvd2VyIHNhdmluZyBvZiBz dGF0aW9ucyBhbmQgbXVsdGljYXN0DQogICAgZGF0YQ0KDQpTaWduZWQtb2ZmLWJ5OiBKw6lyw7Rt ZSBQb3VpbGxlciA8amVyb21lLnBvdWlsbGVyQHNpbGFicy5jb20+DQotLS0NCiBkcml2ZXJzL3N0 YWdpbmcvd2Z4L01ha2VmaWxlICB8ICAgMyArDQogZHJpdmVycy9zdGFnaW5nL3dmeC9iaC5jICAg ICAgfCAgIDIgKw0KIGRyaXZlcnMvc3RhZ2luZy93ZngvZGF0YV90eC5jIHwgNzgzICsrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysNCiBkcml2ZXJzL3N0YWdpbmcvd2Z4L2RhdGFfdHgu aCB8ICA5MyArKysrDQogZHJpdmVycy9zdGFnaW5nL3dmeC9oaWZfcnguYyAgfCAgMzcgKysNCiBk cml2ZXJzL3N0YWdpbmcvd2Z4L2hpZl90eC5jICB8ICAgMSArDQogZHJpdmVycy9zdGFnaW5nL3dm eC9tYWluLmMgICAgfCAgIDQgKw0KIGRyaXZlcnMvc3RhZ2luZy93ZngvcXVldWUuYyAgIHwgNTI2 ICsrKysrKysrKysrKysrKysrKysrKysrDQogZHJpdmVycy9zdGFnaW5nL3dmeC9xdWV1ZS5oICAg fCAgNTkgKysrDQogZHJpdmVycy9zdGFnaW5nL3dmeC9zdGEuYyAgICAgfCAxNDUgKysrKysrKw0K IGRyaXZlcnMvc3RhZ2luZy93Zngvc3RhLmggICAgIHwgICA4ICsNCiBkcml2ZXJzL3N0YWdpbmcv d2Z4L3RyYWNlcy5oICB8ICA3NCArKysrDQogZHJpdmVycy9zdGFnaW5nL3dmeC93ZnguaCAgICAg fCAgNzMgKysrKw0KIDEzIGZpbGVzIGNoYW5nZWQsIDE4MDggaW5zZXJ0aW9ucygrKQ0KIGNyZWF0 ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL3N0YWdpbmcvd2Z4L2RhdGFfdHguYw0KIGNyZWF0ZSBtb2Rl IDEwMDY0NCBkcml2ZXJzL3N0YWdpbmcvd2Z4L2RhdGFfdHguaA0KIGNyZWF0ZSBtb2RlIDEwMDY0 NCBkcml2ZXJzL3N0YWdpbmcvd2Z4L3F1ZXVlLmMNCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVy cy9zdGFnaW5nL3dmeC9xdWV1ZS5oDQoNCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvd2Z4 L01ha2VmaWxlIGIvZHJpdmVycy9zdGFnaW5nL3dmeC9NYWtlZmlsZQ0KaW5kZXggZTE1ODU4OTQ2 OGEzLi5kNWFjOWZhZmQxZjEgMTAwNjQ0DQotLS0gYS9kcml2ZXJzL3N0YWdpbmcvd2Z4L01ha2Vm aWxlDQorKysgYi9kcml2ZXJzL3N0YWdpbmcvd2Z4L01ha2VmaWxlDQpAQCAtOSw2ICs5LDkgQEAg d2Z4LXkgOj0gXA0KIAlmd2lvLm8gXA0KIAloaWZfdHgubyBcDQogCWhpZl9yeC5vIFwNCisJcXVl dWUubyBcDQorCWRhdGFfdHgubyBcDQorCXN0YS5vIFwNCiAJbWFpbi5vIFwNCiAJc3RhLm8gXA0K IAlkZWJ1Zy5vDQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3dmeC9iaC5jIGIvZHJpdmVy cy9zdGFnaW5nL3dmeC9iaC5jDQppbmRleCBkMzIxZmQzMTJkNTUuLmVkODFjMzkyNGQ5OCAxMDA2 NDQNCi0tLSBhL2RyaXZlcnMvc3RhZ2luZy93ZngvYmguYw0KKysrIGIvZHJpdmVycy9zdGFnaW5n L3dmeC9iaC5jDQpAQCAtMjIwLDYgKzIyMCw4IEBAIHN0YXRpYyBpbnQgYmhfd29ya190eChzdHJ1 Y3Qgd2Z4X2RldiAqd2RldiwgaW50IG1heF9tc2cpDQogCQkJaWYgKHRyeV93YWl0X2Zvcl9jb21w bGV0aW9uKCZ3ZGV2LT5oaWZfY21kLnJlYWR5KSkgew0KIAkJCQlXQVJOKCFtdXRleF9pc19sb2Nr ZWQoJndkZXYtPmhpZl9jbWQubG9jayksICJkYXRhIGxvY2tpbmcgZXJyb3IiKTsNCiAJCQkJaGlm ID0gd2Rldi0+aGlmX2NtZC5idWZfc2VuZDsNCisJCQl9IGVsc2Ugew0KKwkJCQloaWYgPSB3Znhf dHhfcXVldWVzX2dldCh3ZGV2KTsNCiAJCQl9DQogCQl9DQogCQlpZiAoIWhpZikNCmRpZmYgLS1n aXQgYS9kcml2ZXJzL3N0YWdpbmcvd2Z4L2RhdGFfdHguYyBiL2RyaXZlcnMvc3RhZ2luZy93Zngv ZGF0YV90eC5jDQpuZXcgZmlsZSBtb2RlIDEwMDY0NA0KaW5kZXggMDAwMDAwMDAwMDAwLi4yMTdk M2MyNzA3MDYNCi0tLSAvZGV2L251bGwNCisrKyBiL2RyaXZlcnMvc3RhZ2luZy93ZngvZGF0YV90 eC5jDQpAQCAtMCwwICsxLDc4MyBAQA0KKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwt Mi4wLW9ubHkNCisvKg0KKyAqIERhdGFwYXRoIGltcGxlbWVudGF0aW9uLg0KKyAqDQorICogQ29w eXJpZ2h0IChjKSAyMDE3LTIwMTksIFNpbGljb24gTGFib3JhdG9yaWVzLCBJbmMuDQorICogQ29w eXJpZ2h0IChjKSAyMDEwLCBTVC1Fcmljc3Nvbg0KKyAqLw0KKyNpbmNsdWRlIDxuZXQvbWFjODAy MTEuaD4NCisNCisjaW5jbHVkZSAiZGF0YV90eC5oIg0KKyNpbmNsdWRlICJ3ZnguaCINCisjaW5j bHVkZSAiYmguaCINCisjaW5jbHVkZSAicXVldWUuaCINCisjaW5jbHVkZSAiZGVidWcuaCINCisj aW5jbHVkZSAidHJhY2VzLmgiDQorI2luY2x1ZGUgImhpZl90eF9taWIuaCINCisNCisjZGVmaW5l IFdGWF9JTlZBTElEX1JBVEVfSUQgKDB4RkYpDQorI2RlZmluZSBXRlhfTElOS19JRF9HQ19USU1F T1VUICgodW5zaWduZWQgbG9uZykoMTAgKiBIWikpDQorDQorc3RhdGljIGludCB3ZnhfZ2V0X2h3 X3JhdGUoc3RydWN0IHdmeF9kZXYgKndkZXYsIGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfdHhfcmF0 ZSAqcmF0ZSkNCit7DQorCWlmIChyYXRlLT5pZHggPCAwKQ0KKwkJcmV0dXJuIC0xOw0KKwlpZiAo cmF0ZS0+ZmxhZ3MgJiBJRUVFODAyMTFfVFhfUkNfTUNTKSB7DQorCQlpZiAocmF0ZS0+aWR4ID4g Nykgew0KKwkJCVdBUk4oMSwgIndyb25nIHJhdGUtPmlkeCB2YWx1ZTogJWQiLCByYXRlLT5pZHgp Ow0KKwkJCXJldHVybiAtMTsNCisJCX0NCisJCXJldHVybiByYXRlLT5pZHggKyAxNDsNCisJfQ0K KwkvLyBXRnggb25seSBzdXBwb3J0IDJHSHosIGVsc2UgYmFuZCBpbmZvcm1hdGlvbiBzaG91bGQg YmUgcmV0cmVpdmVkDQorCS8vIGZyb20gaWVlZTgwMjExX3R4X2luZm8NCisJcmV0dXJuIHdkZXYt Pmh3LT53aXBoeS0+YmFuZHNbTkw4MDIxMV9CQU5EXzJHSFpdLT5iaXRyYXRlc1tyYXRlLT5pZHhd Lmh3X3ZhbHVlOw0KK30NCisNCisvKiBUWCBwb2xpY3kgY2FjaGUgaW1wbGVtZW50YXRpb24gKi8N CisNCitzdGF0aWMgdm9pZCB0eF9wb2xpY3lfYnVpbGQoc3RydWN0IHdmeF92aWYgKnd2aWYsIHN0 cnVjdCB0eF9wb2xpY3kgKnBvbGljeSwNCisJCQkgICAgc3RydWN0IGllZWU4MDIxMV90eF9yYXRl ICpyYXRlcykNCit7DQorCWludCBpOw0KKwlzaXplX3QgY291bnQ7DQorCXN0cnVjdCB3ZnhfZGV2 ICp3ZGV2ID0gd3ZpZi0+d2RldjsNCisNCisJQlVHX09OKHJhdGVzWzBdLmlkeCA8IDApOw0KKwlt ZW1zZXQocG9saWN5LCAwLCBzaXplb2YoKnBvbGljeSkpOw0KKwlmb3IgKGkgPSAxOyBpIDwgSUVF RTgwMjExX1RYX01BWF9SQVRFUzsgaSsrKQ0KKwkJaWYgKHJhdGVzW2ldLmlkeCA8IDApDQorCQkJ YnJlYWs7DQorCWNvdW50ID0gaTsNCisNCisJLyogSEFDSyEhISBEZXZpY2UgaGFzIHByb2JsZW1z IChhdCBsZWFzdCkgc3dpdGNoaW5nIGZyb20NCisJICogNTRNYnBzIENUUyB0byAxTWJwcy4gVGhp cyBzd2l0Y2ggdGFrZXMgZW5vcm1vdXMgYW1vdW50DQorCSAqIG9mIHRpbWUgKDEwMC0yMDAgbXMp LCBsZWFkaW5nIHRvIHZhbHVhYmxlIHRocm91Z2hwdXQgZHJvcC4NCisJICogQXMgYSB3b3JrYXJv dW5kLCBhZGRpdGlvbmFsIGctcmF0ZXMgYXJlIGluamVjdGVkIHRvIHRoZQ0KKwkgKiBwb2xpY3ku DQorCSAqLw0KKwlpZiAoY291bnQgPT0gMiAmJiAhKHJhdGVzWzBdLmZsYWdzICYgSUVFRTgwMjEx X1RYX1JDX01DUykgJiYNCisJICAgIHJhdGVzWzBdLmlkeCA+IDQgJiYgcmF0ZXNbMF0uY291bnQg PiAyICYmDQorCSAgICByYXRlc1sxXS5pZHggPCAyKSB7DQorCQlpbnQgbWlkX3JhdGUgPSAocmF0 ZXNbMF0uaWR4ICsgNCkgPj4gMTsNCisNCisJCS8qIERlY3JlYXNlIG51bWJlciBvZiByZXRyaWVz IGZvciB0aGUgaW5pdGlhbCByYXRlICovDQorCQlyYXRlc1swXS5jb3VudCAtPSAyOw0KKw0KKwkJ aWYgKG1pZF9yYXRlICE9IDQpIHsNCisJCQkvKiBLZWVwIGZhbGxiYWNrIHJhdGUgYXQgMU1icHMu ICovDQorCQkJcmF0ZXNbM10gPSByYXRlc1sxXTsNCisNCisJCQkvKiBJbmplY3QgMSB0cmFuc21p c3Npb24gb24gbG93ZXN0IGctcmF0ZSAqLw0KKwkJCXJhdGVzWzJdLmlkeCA9IDQ7DQorCQkJcmF0 ZXNbMl0uY291bnQgPSAxOw0KKwkJCXJhdGVzWzJdLmZsYWdzID0gcmF0ZXNbMV0uZmxhZ3M7DQor DQorCQkJLyogSW5qZWN0IDEgdHJhbnNtaXNzaW9uIG9uIG1pZC1yYXRlICovDQorCQkJcmF0ZXNb MV0uaWR4ID0gbWlkX3JhdGU7DQorCQkJcmF0ZXNbMV0uY291bnQgPSAxOw0KKw0KKwkJCS8qIEZh bGxiYWNrIHRvIDEgTWJwcyBpcyBhIHJlYWxseSBiYWQgdGhpbmcsDQorCQkJICogc28gbGV0J3Mg dHJ5IHRvIGluY3JlYXNlIHByb2JhYmlsaXR5IG9mDQorCQkJICogc3VjY2Vzc2Z1bCB0cmFuc21p c3Npb24gb24gdGhlIGxvd2VzdCBnIHJhdGUNCisJCQkgKiBldmVuIG1vcmUNCisJCQkgKi8NCisJ CQlpZiAocmF0ZXNbMF0uY291bnQgPj0gMykgew0KKwkJCQktLXJhdGVzWzBdLmNvdW50Ow0KKwkJ CQkrK3JhdGVzWzJdLmNvdW50Ow0KKwkJCX0NCisNCisJCQkvKiBBZGp1c3QgYW1vdW50IG9mIHJh dGVzIGRlZmluZWQgKi8NCisJCQljb3VudCArPSAyOw0KKwkJfSBlbHNlIHsNCisJCQkvKiBLZWVw IGZhbGxiYWNrIHJhdGUgYXQgMU1icHMuICovDQorCQkJcmF0ZXNbMl0gPSByYXRlc1sxXTsNCisN CisJCQkvKiBJbmplY3QgMiB0cmFuc21pc3Npb25zIG9uIGxvd2VzdCBnLXJhdGUgKi8NCisJCQly YXRlc1sxXS5pZHggPSA0Ow0KKwkJCXJhdGVzWzFdLmNvdW50ID0gMjsNCisNCisJCQkvKiBBZGp1 c3QgYW1vdW50IG9mIHJhdGVzIGRlZmluZWQgKi8NCisJCQljb3VudCArPSAxOw0KKwkJfQ0KKwl9 DQorDQorCWZvciAoaSA9IDA7IGkgPCBJRUVFODAyMTFfVFhfTUFYX1JBVEVTOyArK2kpIHsNCisJ CWludCByYXRlaWQ7DQorCQl1aW50OF90IGNvdW50Ow0KKw0KKwkJaWYgKHJhdGVzW2ldLmlkeCA8 IDApDQorCQkJYnJlYWs7DQorCQlXQVJOX09OKHJhdGVzW2ldLmNvdW50ID4gMTUpOw0KKwkJcmF0 ZWlkID0gd2Z4X2dldF9od19yYXRlKHdkZXYsICZyYXRlc1tpXSk7DQorCQkvLyBQYWNrIHR3byB2 YWx1ZXMgaW4gZWFjaCBieXRlIG9mIHBvbGljeS0+cmF0ZXMNCisJCWNvdW50ID0gcmF0ZXNbaV0u Y291bnQ7DQorCQlpZiAocmF0ZWlkICUgMikNCisJCQljb3VudCA8PD0gNDsNCisJCXBvbGljeS0+ cmF0ZXNbcmF0ZWlkIC8gMl0gfD0gY291bnQ7DQorCX0NCit9DQorDQorc3RhdGljIGJvb2wgdHhf cG9saWN5X2lzX2VxdWFsKGNvbnN0IHN0cnVjdCB0eF9wb2xpY3kgKmEsIGNvbnN0IHN0cnVjdCB0 eF9wb2xpY3kgKmIpDQorew0KKwlyZXR1cm4gIW1lbWNtcChhLT5yYXRlcywgYi0+cmF0ZXMsIHNp emVvZihhLT5yYXRlcykpOw0KK30NCisNCitzdGF0aWMgaW50IHR4X3BvbGljeV9maW5kKHN0cnVj dCB0eF9wb2xpY3lfY2FjaGUgKmNhY2hlLCBzdHJ1Y3QgdHhfcG9saWN5ICp3YW50ZWQpDQorew0K KwlzdHJ1Y3QgdHhfcG9saWN5ICppdDsNCisNCisJbGlzdF9mb3JfZWFjaF9lbnRyeShpdCwgJmNh Y2hlLT51c2VkLCBsaW5rKQ0KKwkJaWYgKHR4X3BvbGljeV9pc19lcXVhbCh3YW50ZWQsIGl0KSkN CisJCQlyZXR1cm4gaXQgLSBjYWNoZS0+Y2FjaGU7DQorCWxpc3RfZm9yX2VhY2hfZW50cnkoaXQs ICZjYWNoZS0+ZnJlZSwgbGluaykNCisJCWlmICh0eF9wb2xpY3lfaXNfZXF1YWwod2FudGVkLCBp dCkpDQorCQkJcmV0dXJuIGl0IC0gY2FjaGUtPmNhY2hlOw0KKwlyZXR1cm4gLTE7DQorfQ0KKw0K K3N0YXRpYyB2b2lkIHR4X3BvbGljeV91c2Uoc3RydWN0IHR4X3BvbGljeV9jYWNoZSAqY2FjaGUs IHN0cnVjdCB0eF9wb2xpY3kgKmVudHJ5KQ0KK3sNCisJKytlbnRyeS0+dXNhZ2VfY291bnQ7DQor CWxpc3RfbW92ZSgmZW50cnktPmxpbmssICZjYWNoZS0+dXNlZCk7DQorfQ0KKw0KK3N0YXRpYyBp bnQgdHhfcG9saWN5X3JlbGVhc2Uoc3RydWN0IHR4X3BvbGljeV9jYWNoZSAqY2FjaGUsIHN0cnVj dCB0eF9wb2xpY3kgKmVudHJ5KQ0KK3sNCisJaW50IHJldCA9IC0tZW50cnktPnVzYWdlX2NvdW50 Ow0KKw0KKwlpZiAoIXJldCkNCisJCWxpc3RfbW92ZSgmZW50cnktPmxpbmssICZjYWNoZS0+ZnJl ZSk7DQorCXJldHVybiByZXQ7DQorfQ0KKw0KK3N0YXRpYyBpbnQgdHhfcG9saWN5X2dldChzdHJ1 Y3Qgd2Z4X3ZpZiAqd3ZpZiwgc3RydWN0IGllZWU4MDIxMV90eF9yYXRlICpyYXRlcywNCisJCQkg Ym9vbCAqcmVuZXcpDQorew0KKwlpbnQgaWR4Ow0KKwlzdHJ1Y3QgdHhfcG9saWN5X2NhY2hlICpj YWNoZSA9ICZ3dmlmLT50eF9wb2xpY3lfY2FjaGU7DQorCXN0cnVjdCB0eF9wb2xpY3kgd2FudGVk Ow0KKw0KKwl0eF9wb2xpY3lfYnVpbGQod3ZpZiwgJndhbnRlZCwgcmF0ZXMpOw0KKw0KKwlzcGlu X2xvY2tfYmgoJmNhY2hlLT5sb2NrKTsNCisJaWYgKFdBUk5fT05fT05DRShsaXN0X2VtcHR5KCZj YWNoZS0+ZnJlZSkpKSB7DQorCQlzcGluX3VubG9ja19iaCgmY2FjaGUtPmxvY2spOw0KKwkJcmV0 dXJuIFdGWF9JTlZBTElEX1JBVEVfSUQ7DQorCX0NCisJaWR4ID0gdHhfcG9saWN5X2ZpbmQoY2Fj aGUsICZ3YW50ZWQpOw0KKwlpZiAoaWR4ID49IDApIHsNCisJCSpyZW5ldyA9IGZhbHNlOw0KKwl9 IGVsc2Ugew0KKwkJc3RydWN0IHR4X3BvbGljeSAqZW50cnk7DQorCQkqcmVuZXcgPSB0cnVlOw0K KwkJLyogSWYgcG9saWN5IGlzIG5vdCBmb3VuZCBjcmVhdGUgYSBuZXcgb25lDQorCQkgKiB1c2lu ZyB0aGUgb2xkZXN0IGVudHJ5IGluICJmcmVlIiBsaXN0DQorCQkgKi8NCisJCWVudHJ5ID0gbGlz dF9lbnRyeShjYWNoZS0+ZnJlZS5wcmV2LCBzdHJ1Y3QgdHhfcG9saWN5LCBsaW5rKTsNCisJCW1l bWNweShlbnRyeS0+cmF0ZXMsIHdhbnRlZC5yYXRlcywgc2l6ZW9mKGVudHJ5LT5yYXRlcykpOw0K KwkJZW50cnktPnVwbG9hZGVkID0gMDsNCisJCWVudHJ5LT51c2FnZV9jb3VudCA9IDA7DQorCQlp ZHggPSBlbnRyeSAtIGNhY2hlLT5jYWNoZTsNCisJfQ0KKwl0eF9wb2xpY3lfdXNlKGNhY2hlLCAm Y2FjaGUtPmNhY2hlW2lkeF0pOw0KKwlpZiAobGlzdF9lbXB0eSgmY2FjaGUtPmZyZWUpKSB7DQor CQkvKiBMb2NrIFRYIHF1ZXVlcy4gKi8NCisJCXdmeF90eF9xdWV1ZXNfbG9jayh3dmlmLT53ZGV2 KTsNCisJfQ0KKwlzcGluX3VubG9ja19iaCgmY2FjaGUtPmxvY2spOw0KKwlyZXR1cm4gaWR4Ow0K K30NCisNCitzdGF0aWMgdm9pZCB0eF9wb2xpY3lfcHV0KHN0cnVjdCB3ZnhfdmlmICp3dmlmLCBp bnQgaWR4KQ0KK3sNCisJaW50IHVzYWdlLCBsb2NrZWQ7DQorCXN0cnVjdCB0eF9wb2xpY3lfY2Fj aGUgKmNhY2hlID0gJnd2aWYtPnR4X3BvbGljeV9jYWNoZTsNCisNCisJc3Bpbl9sb2NrX2JoKCZj YWNoZS0+bG9jayk7DQorCWxvY2tlZCA9IGxpc3RfZW1wdHkoJmNhY2hlLT5mcmVlKTsNCisJdXNh Z2UgPSB0eF9wb2xpY3lfcmVsZWFzZShjYWNoZSwgJmNhY2hlLT5jYWNoZVtpZHhdKTsNCisJaWYg KGxvY2tlZCAmJiAhdXNhZ2UpIHsNCisJCS8qIFVubG9jayBUWCBxdWV1ZXMuICovDQorCQl3Znhf dHhfcXVldWVzX3VubG9jayh3dmlmLT53ZGV2KTsNCisJfQ0KKwlzcGluX3VubG9ja19iaCgmY2Fj aGUtPmxvY2spOw0KK30NCisNCitzdGF0aWMgaW50IHR4X3BvbGljeV91cGxvYWQoc3RydWN0IHdm eF92aWYgKnd2aWYpDQorew0KKwlpbnQgaTsNCisJc3RydWN0IHR4X3BvbGljeV9jYWNoZSAqY2Fj aGUgPSAmd3ZpZi0+dHhfcG9saWN5X2NhY2hlOw0KKwlzdHJ1Y3QgaGlmX21pYl9zZXRfdHhfcmF0 ZV9yZXRyeV9wb2xpY3kgKmFyZyA9DQorCQlremFsbG9jKHN0cnVjdF9zaXplKGFyZywgdHhfcmF0 ZV9yZXRyeV9wb2xpY3ksIEhJRl9NSUJfTlVNX1RYX1JBVEVfUkVUUllfUE9MSUNJRVMpLCBHRlBf S0VSTkVMKTsNCisJc3RydWN0IGhpZl9taWJfdHhfcmF0ZV9yZXRyeV9wb2xpY3kgKmRzdDsNCisN CisJc3Bpbl9sb2NrX2JoKCZjYWNoZS0+bG9jayk7DQorCS8qIFVwbG9hZCBvbmx5IG1vZGlmaWVk IGVudHJpZXMuICovDQorCWZvciAoaSA9IDA7IGkgPCBISUZfTUlCX05VTV9UWF9SQVRFX1JFVFJZ X1BPTElDSUVTOyArK2kpIHsNCisJCXN0cnVjdCB0eF9wb2xpY3kgKnNyYyA9ICZjYWNoZS0+Y2Fj aGVbaV07DQorDQorCQlpZiAoIXNyYy0+dXBsb2FkZWQgJiYgbWVtemNtcChzcmMtPnJhdGVzLCBz aXplb2Yoc3JjLT5yYXRlcykpKSB7DQorCQkJZHN0ID0gYXJnLT50eF9yYXRlX3JldHJ5X3BvbGlj eSArIGFyZy0+bnVtX3R4X3JhdGVfcG9saWNpZXM7DQorDQorCQkJZHN0LT5wb2xpY3lfaW5kZXgg PSBpOw0KKwkJCWRzdC0+c2hvcnRfcmV0cnlfY291bnQgPSAyNTU7DQorCQkJZHN0LT5sb25nX3Jl dHJ5X2NvdW50ID0gMjU1Ow0KKwkJCWRzdC0+Zmlyc3RfcmF0ZV9zZWwgPSAxOw0KKwkJCWRzdC0+ dGVybWluYXRlID0gMTsNCisJCQlkc3QtPmNvdW50X2luaXQgPSAxOw0KKwkJCW1lbWNweSgmZHN0 LT5yYXRlcywgc3JjLT5yYXRlcywgc2l6ZW9mKHNyYy0+cmF0ZXMpKTsNCisJCQlzcmMtPnVwbG9h ZGVkID0gMTsNCisJCQlhcmctPm51bV90eF9yYXRlX3BvbGljaWVzKys7DQorCQl9DQorCX0NCisJ c3Bpbl91bmxvY2tfYmgoJmNhY2hlLT5sb2NrKTsNCisJaGlmX3NldF90eF9yYXRlX3JldHJ5X3Bv bGljeSh3dmlmLCBhcmcpOw0KKwlrZnJlZShhcmcpOw0KKwlyZXR1cm4gMDsNCit9DQorDQorc3Rh dGljIHZvaWQgdHhfcG9saWN5X3VwbG9hZF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykN Cit7DQorCXN0cnVjdCB3ZnhfdmlmICp3dmlmID0NCisJCWNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1 Y3Qgd2Z4X3ZpZiwgdHhfcG9saWN5X3VwbG9hZF93b3JrKTsNCisNCisJdHhfcG9saWN5X3VwbG9h ZCh3dmlmKTsNCisNCisJd2Z4X3R4X3VubG9jayh3dmlmLT53ZGV2KTsNCisJd2Z4X3R4X3F1ZXVl c191bmxvY2sod3ZpZi0+d2Rldik7DQorfQ0KKw0KK3ZvaWQgdHhfcG9saWN5X2luaXQoc3RydWN0 IHdmeF92aWYgKnd2aWYpDQorew0KKwlzdHJ1Y3QgdHhfcG9saWN5X2NhY2hlICpjYWNoZSA9ICZ3 dmlmLT50eF9wb2xpY3lfY2FjaGU7DQorCWludCBpOw0KKw0KKwltZW1zZXQoY2FjaGUsIDAsIHNp emVvZigqY2FjaGUpKTsNCisNCisJc3Bpbl9sb2NrX2luaXQoJmNhY2hlLT5sb2NrKTsNCisJSU5J VF9MSVNUX0hFQUQoJmNhY2hlLT51c2VkKTsNCisJSU5JVF9MSVNUX0hFQUQoJmNhY2hlLT5mcmVl KTsNCisJSU5JVF9XT1JLKCZ3dmlmLT50eF9wb2xpY3lfdXBsb2FkX3dvcmssIHR4X3BvbGljeV91 cGxvYWRfd29yayk7DQorDQorCWZvciAoaSA9IDA7IGkgPCBISUZfTUlCX05VTV9UWF9SQVRFX1JF VFJZX1BPTElDSUVTOyArK2kpDQorCQlsaXN0X2FkZCgmY2FjaGUtPmNhY2hlW2ldLmxpbmssICZj YWNoZS0+ZnJlZSk7DQorfQ0KKw0KKy8qIExpbmsgSUQgcmVsYXRlZCBmdW5jdGlvbnMgKi8NCisN CitzdGF0aWMgaW50IHdmeF9hbGxvY19saW5rX2lkKHN0cnVjdCB3ZnhfdmlmICp3dmlmLCBjb25z dCB1OCAqbWFjKQ0KK3sNCisJaW50IGksIHJldCA9IDA7DQorCXVuc2lnbmVkIGxvbmcgbWF4X2lu YWN0aXZpdHkgPSAwOw0KKwl1bnNpZ25lZCBsb25nIG5vdyA9IGppZmZpZXM7DQorDQorCXNwaW5f bG9ja19iaCgmd3ZpZi0+cHNfc3RhdGVfbG9jayk7DQorCWZvciAoaSA9IDA7IGkgPCBXRlhfTUFY X1NUQV9JTl9BUF9NT0RFOyArK2kpIHsNCisJCWlmICghd3ZpZi0+bGlua19pZF9kYltpXS5zdGF0 dXMpIHsNCisJCQlyZXQgPSBpICsgMTsNCisJCQlicmVhazsNCisJCX0gZWxzZSBpZiAod3ZpZi0+ bGlua19pZF9kYltpXS5zdGF0dXMgIT0gV0ZYX0xJTktfSEFSRCAmJg0KKwkJCSAgICF3dmlmLT53 ZGV2LT50eF9xdWV1ZV9zdGF0cy5saW5rX21hcF9jYWNoZVtpICsgMV0pIHsNCisJCQl1bnNpZ25l ZCBsb25nIGluYWN0aXZpdHkgPQ0KKwkJCQlub3cgLSB3dmlmLT5saW5rX2lkX2RiW2ldLnRpbWVz dGFtcDsNCisNCisJCQlpZiAoaW5hY3Rpdml0eSA8IG1heF9pbmFjdGl2aXR5KQ0KKwkJCQljb250 aW51ZTsNCisJCQltYXhfaW5hY3Rpdml0eSA9IGluYWN0aXZpdHk7DQorCQkJcmV0ID0gaSArIDE7 DQorCQl9DQorCX0NCisNCisJaWYgKHJldCkgew0KKwkJc3RydWN0IHdmeF9saW5rX2VudHJ5ICpl bnRyeSA9ICZ3dmlmLT5saW5rX2lkX2RiW3JldCAtIDFdOw0KKw0KKwkJZW50cnktPnN0YXR1cyA9 IFdGWF9MSU5LX1JFU0VSVkU7DQorCQlldGhlcl9hZGRyX2NvcHkoZW50cnktPm1hYywgbWFjKTsN CisJCW1lbXNldCgmZW50cnktPmJ1ZmZlcmVkLCAwLCBXRlhfTUFYX1RJRCk7DQorCQlza2JfcXVl dWVfaGVhZF9pbml0KCZlbnRyeS0+cnhfcXVldWUpOw0KKwkJd2Z4X3R4X2xvY2sod3ZpZi0+d2Rl dik7DQorDQorCQlpZiAoIXNjaGVkdWxlX3dvcmsoJnd2aWYtPmxpbmtfaWRfd29yaykpDQorCQkJ d2Z4X3R4X3VubG9jayh3dmlmLT53ZGV2KTsNCisJfSBlbHNlIHsNCisJCWRldl9pbmZvKHd2aWYt PndkZXYtPmRldiwgIm5vIG1vcmUgbGluay1pZCBhdmFpbGFibGVcbiIpOw0KKwl9DQorCXNwaW5f dW5sb2NrX2JoKCZ3dmlmLT5wc19zdGF0ZV9sb2NrKTsNCisJcmV0dXJuIHJldDsNCit9DQorDQor aW50IHdmeF9maW5kX2xpbmtfaWQoc3RydWN0IHdmeF92aWYgKnd2aWYsIGNvbnN0IHU4ICptYWMp DQorew0KKwlpbnQgaSwgcmV0ID0gMDsNCisNCisJc3Bpbl9sb2NrX2JoKCZ3dmlmLT5wc19zdGF0 ZV9sb2NrKTsNCisJZm9yIChpID0gMDsgaSA8IFdGWF9NQVhfU1RBX0lOX0FQX01PREU7ICsraSkg ew0KKwkJaWYgKGV0aGVyX2FkZHJfZXF1YWwobWFjLCB3dmlmLT5saW5rX2lkX2RiW2ldLm1hYykg JiYNCisJCSAgICB3dmlmLT5saW5rX2lkX2RiW2ldLnN0YXR1cykgew0KKwkJCXd2aWYtPmxpbmtf aWRfZGJbaV0udGltZXN0YW1wID0gamlmZmllczsNCisJCQlyZXQgPSBpICsgMTsNCisJCQlicmVh azsNCisJCX0NCisJfQ0KKwlzcGluX3VubG9ja19iaCgmd3ZpZi0+cHNfc3RhdGVfbG9jayk7DQor CXJldHVybiByZXQ7DQorfQ0KKw0KK3N0YXRpYyBpbnQgd2Z4X21hcF9saW5rKHN0cnVjdCB3Znhf dmlmICp3dmlmLCBzdHJ1Y3Qgd2Z4X2xpbmtfZW50cnkgKmxpbmtfZW50cnksIGludCBzdGFfaWQp DQorew0KKwlpbnQgcmV0Ow0KKw0KKwlyZXQgPSBoaWZfbWFwX2xpbmsod3ZpZiwgbGlua19lbnRy eS0+bWFjLCAwLCBzdGFfaWQpOw0KKw0KKwlpZiAocmV0ID09IDApDQorCQkvKiBTYXZlIHRoZSBN QUMgYWRkcmVzcyBjdXJyZW50bHkgYXNzb2NpYXRlZCB3aXRoIHRoZSBwZWVyDQorCQkgKiBmb3Ig ZnV0dXJlIHVubWFwIHJlcXVlc3QNCisJCSAqLw0KKwkJZXRoZXJfYWRkcl9jb3B5KGxpbmtfZW50 cnktPm9sZF9tYWMsIGxpbmtfZW50cnktPm1hYyk7DQorDQorCXJldHVybiByZXQ7DQorfQ0KKw0K K2ludCB3ZnhfdW5tYXBfbGluayhzdHJ1Y3Qgd2Z4X3ZpZiAqd3ZpZiwgaW50IHN0YV9pZCkNCit7 DQorCXU4ICptYWNfYWRkciA9IE5VTEw7DQorDQorCWlmIChzdGFfaWQpDQorCQltYWNfYWRkciA9 IHd2aWYtPmxpbmtfaWRfZGJbc3RhX2lkIC0gMV0ub2xkX21hYzsNCisNCisJcmV0dXJuIGhpZl9t YXBfbGluayh3dmlmLCBtYWNfYWRkciwgMSwgc3RhX2lkKTsNCit9DQorDQordm9pZCB3ZnhfbGlu a19pZF9nY193b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykNCit7DQorCXN0cnVjdCB3Znhf dmlmICp3dmlmID0NCisJCWNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3Qgd2Z4X3ZpZiwgbGlua19p ZF9nY193b3JrLndvcmspOw0KKwl1bnNpZ25lZCBsb25nIG5vdyA9IGppZmZpZXM7DQorCXVuc2ln bmVkIGxvbmcgbmV4dF9nYyA9IC0xOw0KKwlsb25nIHR0bDsNCisJdTMyIG1hc2s7DQorCWludCBp Ow0KKw0KKwl3ZnhfdHhfbG9ja19mbHVzaCh3dmlmLT53ZGV2KTsNCisJc3Bpbl9sb2NrX2JoKCZ3 dmlmLT5wc19zdGF0ZV9sb2NrKTsNCisJZm9yIChpID0gMDsgaSA8IFdGWF9NQVhfU1RBX0lOX0FQ X01PREU7ICsraSkgew0KKwkJYm9vbCBuZWVkX3Jlc2V0ID0gZmFsc2U7DQorDQorCQltYXNrID0g QklUKGkgKyAxKTsNCisJCWlmICh3dmlmLT5saW5rX2lkX2RiW2ldLnN0YXR1cyA9PSBXRlhfTElO S19SRVNFUlZFIHx8DQorCQkgICAgKHd2aWYtPmxpbmtfaWRfZGJbaV0uc3RhdHVzID09IFdGWF9M SU5LX0hBUkQgJiYNCisJCSAgICAgISh3dmlmLT5saW5rX2lkX21hcCAmIG1hc2spKSkgew0KKwkJ CWlmICh3dmlmLT5saW5rX2lkX21hcCAmIG1hc2spIHsNCisJCQkJd3ZpZi0+c3RhX2FzbGVlcF9t YXNrICY9IH5tYXNrOw0KKwkJCQl3dmlmLT5wc3BvbGxfbWFzayAmPSB+bWFzazsNCisJCQkJbmVl ZF9yZXNldCA9IHRydWU7DQorCQkJfQ0KKwkJCXd2aWYtPmxpbmtfaWRfbWFwIHw9IG1hc2s7DQor CQkJaWYgKHd2aWYtPmxpbmtfaWRfZGJbaV0uc3RhdHVzICE9IFdGWF9MSU5LX0hBUkQpDQorCQkJ CXd2aWYtPmxpbmtfaWRfZGJbaV0uc3RhdHVzID0gV0ZYX0xJTktfU09GVDsNCisNCisJCQlzcGlu X3VubG9ja19iaCgmd3ZpZi0+cHNfc3RhdGVfbG9jayk7DQorCQkJaWYgKG5lZWRfcmVzZXQpDQor CQkJCXdmeF91bm1hcF9saW5rKHd2aWYsIGkgKyAxKTsNCisJCQl3ZnhfbWFwX2xpbmsod3ZpZiwg Jnd2aWYtPmxpbmtfaWRfZGJbaV0sIGkgKyAxKTsNCisJCQluZXh0X2djID0gbWluKG5leHRfZ2Ms IFdGWF9MSU5LX0lEX0dDX1RJTUVPVVQpOw0KKwkJCXNwaW5fbG9ja19iaCgmd3ZpZi0+cHNfc3Rh dGVfbG9jayk7DQorCQl9IGVsc2UgaWYgKHd2aWYtPmxpbmtfaWRfZGJbaV0uc3RhdHVzID09IFdG WF9MSU5LX1NPRlQpIHsNCisJCQl0dGwgPSB3dmlmLT5saW5rX2lkX2RiW2ldLnRpbWVzdGFtcCAt IG5vdyArDQorCQkJCQlXRlhfTElOS19JRF9HQ19USU1FT1VUOw0KKwkJCWlmICh0dGwgPD0gMCkg ew0KKwkJCQluZWVkX3Jlc2V0ID0gdHJ1ZTsNCisJCQkJd3ZpZi0+bGlua19pZF9kYltpXS5zdGF0 dXMgPSBXRlhfTElOS19PRkY7DQorCQkJCXd2aWYtPmxpbmtfaWRfbWFwICY9IH5tYXNrOw0KKwkJ CQl3dmlmLT5zdGFfYXNsZWVwX21hc2sgJj0gfm1hc2s7DQorCQkJCXd2aWYtPnBzcG9sbF9tYXNr ICY9IH5tYXNrOw0KKwkJCQlzcGluX3VubG9ja19iaCgmd3ZpZi0+cHNfc3RhdGVfbG9jayk7DQor CQkJCXdmeF91bm1hcF9saW5rKHd2aWYsIGkgKyAxKTsNCisJCQkJc3Bpbl9sb2NrX2JoKCZ3dmlm LT5wc19zdGF0ZV9sb2NrKTsNCisJCQl9IGVsc2Ugew0KKwkJCQluZXh0X2djID0gbWluX3QodW5z aWduZWQgbG9uZywgbmV4dF9nYywgdHRsKTsNCisJCQl9DQorCQl9DQorCQlpZiAobmVlZF9yZXNl dCkNCisJCQlza2JfcXVldWVfcHVyZ2UoJnd2aWYtPmxpbmtfaWRfZGJbaV0ucnhfcXVldWUpOw0K Kwl9DQorCXNwaW5fdW5sb2NrX2JoKCZ3dmlmLT5wc19zdGF0ZV9sb2NrKTsNCisJaWYgKG5leHRf Z2MgIT0gLTEpDQorCQlzY2hlZHVsZV9kZWxheWVkX3dvcmsoJnd2aWYtPmxpbmtfaWRfZ2Nfd29y aywgbmV4dF9nYyk7DQorCXdmeF90eF91bmxvY2sod3ZpZi0+d2Rldik7DQorfQ0KKw0KK3ZvaWQg d2Z4X2xpbmtfaWRfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspDQorew0KKwlzdHJ1Y3Qg d2Z4X3ZpZiAqd3ZpZiA9DQorCQljb250YWluZXJfb2Yod29yaywgc3RydWN0IHdmeF92aWYsIGxp bmtfaWRfd29yayk7DQorDQorCXdmeF90eF9mbHVzaCh3dmlmLT53ZGV2KTsNCisJd2Z4X2xpbmtf aWRfZ2Nfd29yaygmd3ZpZi0+bGlua19pZF9nY193b3JrLndvcmspOw0KKwl3ZnhfdHhfdW5sb2Nr KHd2aWYtPndkZXYpOw0KK30NCisNCisvKiBUeCBpbXBsZW1lbnRhdGlvbiAqLw0KKw0KK3N0YXRp YyBib29sIGllZWU4MDIxMV9pc19hY3Rpb25fYmFjayhzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRy KQ0KK3sNCisJc3RydWN0IGllZWU4MDIxMV9tZ210ICptZ210ID0gKHN0cnVjdCBpZWVlODAyMTFf bWdtdCAqKSBoZHI7DQorDQorCWlmICghaWVlZTgwMjExX2lzX2FjdGlvbihtZ210LT5mcmFtZV9j b250cm9sKSkNCisJCXJldHVybiBmYWxzZTsNCisJaWYgKG1nbXQtPnUuYWN0aW9uLmNhdGVnb3J5 ICE9IFdMQU5fQ0FURUdPUllfQkFDSykNCisJCXJldHVybiBmYWxzZTsNCisJcmV0dXJuIHRydWU7 DQorfQ0KKw0KK3N0YXRpYyB2b2lkIHdmeF90eF9tYW5hZ2VfcG0oc3RydWN0IHdmeF92aWYgKnd2 aWYsIHN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHIsDQorCQkJICAgICBzdHJ1Y3Qgd2Z4X3R4X3By aXYgKnR4X3ByaXYsIHN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEpDQorew0KKwl1MzIgbWFzayA9 IH5CSVQodHhfcHJpdi0+cmF3X2xpbmtfaWQpOw0KKw0KKwlzcGluX2xvY2tfYmgoJnd2aWYtPnBz X3N0YXRlX2xvY2spOw0KKwlpZiAoaWVlZTgwMjExX2lzX2F1dGgoaGRyLT5mcmFtZV9jb250cm9s KSkgew0KKwkJd3ZpZi0+c3RhX2FzbGVlcF9tYXNrICY9IG1hc2s7DQorCQl3dmlmLT5wc3BvbGxf bWFzayAmPSBtYXNrOw0KKwl9DQorDQorCWlmICh0eF9wcml2LT5saW5rX2lkID09IFdGWF9MSU5L X0lEX0FGVEVSX0RUSU0gJiYgIXd2aWYtPm1jYXN0X2J1ZmZlcmVkKSB7DQorCQl3dmlmLT5tY2Fz dF9idWZmZXJlZCA9IHRydWU7DQorCQlpZiAod3ZpZi0+c3RhX2FzbGVlcF9tYXNrKQ0KKwkJCXNj aGVkdWxlX3dvcmsoJnd2aWYtPm1jYXN0X3N0YXJ0X3dvcmspOw0KKwl9DQorDQorCWlmICh0eF9w cml2LT5yYXdfbGlua19pZCkgew0KKwkJd3ZpZi0+bGlua19pZF9kYlt0eF9wcml2LT5yYXdfbGlu a19pZCAtIDFdLnRpbWVzdGFtcCA9IGppZmZpZXM7DQorCQlpZiAodHhfcHJpdi0+dGlkIDwgV0ZY X01BWF9USUQpDQorCQkJd3ZpZi0+bGlua19pZF9kYlt0eF9wcml2LT5yYXdfbGlua19pZCAtIDFd LmJ1ZmZlcmVkW3R4X3ByaXYtPnRpZF0rKzsNCisJfQ0KKwlzcGluX3VubG9ja19iaCgmd3ZpZi0+ cHNfc3RhdGVfbG9jayk7DQorDQorCWlmIChzdGEpDQorCQlpZWVlODAyMTFfc3RhX3NldF9idWZm ZXJlZChzdGEsIHR4X3ByaXYtPnRpZCwgdHJ1ZSk7DQorfQ0KKw0KK3N0YXRpYyB1aW50OF90IHdm eF90eF9nZXRfcmF3X2xpbmtfaWQoc3RydWN0IHdmeF92aWYgKnd2aWYsIHN0cnVjdCBpZWVlODAy MTFfc3RhICpzdGEsIHN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHIpDQorew0KKwlzdHJ1Y3Qgd2Z4 X3N0YV9wcml2ICpzdGFfcHJpdiA9IHN0YSA/IChzdHJ1Y3Qgd2Z4X3N0YV9wcml2ICopICZzdGEt PmRydl9wcml2IDogTlVMTDsNCisJY29uc3QgdTggKmRhID0gaWVlZTgwMjExX2dldF9EQShoZHIp Ow0KKwlpbnQgcmV0Ow0KKw0KKwlpZiAoc3RhX3ByaXYgJiYgc3RhX3ByaXYtPmxpbmtfaWQpDQor CQlyZXR1cm4gc3RhX3ByaXYtPmxpbmtfaWQ7DQorCWlmICh3dmlmLT52aWYtPnR5cGUgIT0gTkw4 MDIxMV9JRlRZUEVfQVApDQorCQlyZXR1cm4gMDsNCisJaWYgKGlzX211bHRpY2FzdF9ldGhlcl9h ZGRyKGRhKSkNCisJCXJldHVybiAwOw0KKwlyZXQgPSB3ZnhfZmluZF9saW5rX2lkKHd2aWYsIGRh KTsNCisJaWYgKCFyZXQpDQorCQlyZXQgPSB3ZnhfYWxsb2NfbGlua19pZCh3dmlmLCBkYSk7DQor CWlmICghcmV0KSB7DQorCQlkZXZfZXJyKHd2aWYtPndkZXYtPmRldiwgIm5vIG1vcmUgbGluay1p ZCBhdmFpbGFibGVcbiIpOw0KKwkJcmV0dXJuIC1FTk9FTlQ7DQorCX0NCisJcmV0dXJuIHJldDsN Cit9DQorDQorc3RhdGljIHZvaWQgd2Z4X3R4X2ZpeHVwX3JhdGVzKHN0cnVjdCBpZWVlODAyMTFf dHhfcmF0ZSAqcmF0ZXMpDQorew0KKwlpbnQgaTsNCisJYm9vbCBmaW5pc2hlZDsNCisNCisJLy8g RmlybXdhcmUgaXMgbm90IGFibGUgdG8gbWl4IHJhdGVzIHdpdGggZGlmZmVyZW50cyBmbGFncw0K Kwlmb3IgKGkgPSAwOyBpIDwgSUVFRTgwMjExX1RYX01BWF9SQVRFUzsgaSsrKSB7DQorCQlpZiAo cmF0ZXNbMF0uZmxhZ3MgJiBJRUVFODAyMTFfVFhfUkNfU0hPUlRfR0kpDQorCQkJcmF0ZXNbaV0u ZmxhZ3MgfD0gSUVFRTgwMjExX1RYX1JDX1NIT1JUX0dJOw0KKwkJaWYgKCEocmF0ZXNbMF0uZmxh Z3MgJiBJRUVFODAyMTFfVFhfUkNfU0hPUlRfR0kpKQ0KKwkJCXJhdGVzW2ldLmZsYWdzICY9IH5J RUVFODAyMTFfVFhfUkNfU0hPUlRfR0k7DQorCQlpZiAoIShyYXRlc1swXS5mbGFncyAmIElFRUU4 MDIxMV9UWF9SQ19VU0VfUlRTX0NUUykpDQorCQkJcmF0ZXNbaV0uZmxhZ3MgJj0gfklFRUU4MDIx MV9UWF9SQ19VU0VfUlRTX0NUUzsNCisJfQ0KKw0KKwkvLyBTb3J0IHJhdGVzIGFuZCByZW1vdmUg ZHVwbGljYXRlcw0KKwlkbyB7DQorCQlmaW5pc2hlZCA9IHRydWU7DQorCQlmb3IgKGkgPSAwOyBp IDwgSUVFRTgwMjExX1RYX01BWF9SQVRFUyAtIDE7IGkrKykgew0KKwkJCWlmIChyYXRlc1tpICsg MV0uaWR4ID09IHJhdGVzW2ldLmlkeCAmJiByYXRlc1tpXS5pZHggIT0gLTEpIHsNCisJCQkJcmF0 ZXNbaV0uY291bnQgPSAgbWF4X3QoaW50LCByYXRlc1tpXS5jb3VudCwgcmF0ZXNbaSArIDFdLmNv dW50KTsNCisJCQkJcmF0ZXNbaSArIDFdLmlkeCA9IC0xOw0KKwkJCQlyYXRlc1tpICsgMV0uY291 bnQgPSAwOw0KKw0KKwkJCQlmaW5pc2hlZCA9IGZhbHNlOw0KKwkJCX0NCisJCQlpZiAocmF0ZXNb aSArIDFdLmlkeCA+IHJhdGVzW2ldLmlkeCkgew0KKwkJCQlzd2FwKHJhdGVzW2kgKyAxXSwgcmF0 ZXNbaV0pOw0KKwkJCQlmaW5pc2hlZCA9IGZhbHNlOw0KKwkJCX0NCisJCX0NCisJfSB3aGlsZSAo IWZpbmlzaGVkKTsNCisJLy8gQWxsIHJldHJpZXMgdXNlIGxvbmcgR0kNCisJZm9yIChpID0gMTsg aSA8IElFRUU4MDIxMV9UWF9NQVhfUkFURVM7IGkrKykNCisJCXJhdGVzW2ldLmZsYWdzICY9IH5J RUVFODAyMTFfVFhfUkNfU0hPUlRfR0k7DQorfQ0KKw0KK3N0YXRpYyB1aW50OF90IHdmeF90eF9n ZXRfcmF0ZV9pZChzdHJ1Y3Qgd2Z4X3ZpZiAqd3ZpZiwgc3RydWN0IGllZWU4MDIxMV90eF9pbmZv ICp0eF9pbmZvKQ0KK3sNCisJYm9vbCB0eF9wb2xpY3lfcmVuZXcgPSBmYWxzZTsNCisJdWludDhf dCByYXRlX2lkOw0KKw0KKwlyYXRlX2lkID0gdHhfcG9saWN5X2dldCh3dmlmLCB0eF9pbmZvLT5k cml2ZXJfcmF0ZXMsICZ0eF9wb2xpY3lfcmVuZXcpOw0KKwlXQVJOKHJhdGVfaWQgPT0gV0ZYX0lO VkFMSURfUkFURV9JRCwgInVuYWJsZSB0byBnZXQgYSB2YWxpZCBUeCBwb2xpY3kiKTsNCisNCisJ aWYgKHR4X3BvbGljeV9yZW5ldykgew0KKwkJLyogRklYTUU6IEl0J3Mgbm90IHNvIG9wdGltYWwg dG8gc3RvcCBUWCBxdWV1ZXMgZXZlcnkgbm93IGFuZA0KKwkJICogdGhlbi4gIEJldHRlciB0byBy ZWltcGxlbWVudCB0YXNrIHNjaGVkdWxpbmcgd2l0aCBhIGNvdW50ZXIuDQorCQkgKi8NCisJCXdm eF90eF9sb2NrKHd2aWYtPndkZXYpOw0KKwkJd2Z4X3R4X3F1ZXVlc19sb2NrKHd2aWYtPndkZXYp Ow0KKwkJaWYgKCFzY2hlZHVsZV93b3JrKCZ3dmlmLT50eF9wb2xpY3lfdXBsb2FkX3dvcmspKSB7 DQorCQkJd2Z4X3R4X3F1ZXVlc191bmxvY2sod3ZpZi0+d2Rldik7DQorCQkJd2Z4X3R4X3VubG9j ayh3dmlmLT53ZGV2KTsNCisJCX0NCisJfQ0KKwlyZXR1cm4gcmF0ZV9pZDsNCit9DQorDQorc3Rh dGljIHN0cnVjdCBoaWZfaHRfdHhfcGFyYW1ldGVycyB3ZnhfdHhfZ2V0X3R4X3Bhcm1zKHN0cnVj dCB3ZnhfZGV2ICp3ZGV2LCBzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKnR4X2luZm8pDQorew0K KwlzdHJ1Y3QgaWVlZTgwMjExX3R4X3JhdGUgKnJhdGUgPSAmdHhfaW5mby0+ZHJpdmVyX3JhdGVz WzBdOw0KKwlzdHJ1Y3QgaGlmX2h0X3R4X3BhcmFtZXRlcnMgcmV0ID0geyB9Ow0KKw0KKwlpZiAo IShyYXRlLT5mbGFncyAmIElFRUU4MDIxMV9UWF9SQ19NQ1MpKQ0KKwkJcmV0LmZyYW1lX2Zvcm1h dCA9IEhJRl9GUkFNRV9GT1JNQVRfTk9OX0hUOw0KKwllbHNlIGlmICghKHJhdGUtPmZsYWdzICYg SUVFRTgwMjExX1RYX1JDX0dSRUVOX0ZJRUxEKSkNCisJCXJldC5mcmFtZV9mb3JtYXQgPSBISUZf RlJBTUVfRk9STUFUX01JWEVEX0ZPUk1BVF9IVDsNCisJZWxzZQ0KKwkJcmV0LmZyYW1lX2Zvcm1h dCA9IEhJRl9GUkFNRV9GT1JNQVRfR0ZfSFRfMTFOOw0KKwlpZiAocmF0ZS0+ZmxhZ3MgJiBJRUVF ODAyMTFfVFhfUkNfU0hPUlRfR0kpDQorCQlyZXQuc2hvcnRfZ2kgPSAxOw0KKwlpZiAodHhfaW5m by0+ZmxhZ3MgJiBJRUVFODAyMTFfVFhfQ1RMX1NUQkMpDQorCQlyZXQuc3RiYyA9IDA7IC8vIEZJ WE1FOiBOb3QgeWV0IHN1cHBvcnRlZCBieSBmaXJtd2FyZT8NCisJcmV0dXJuIHJldDsNCit9DQor DQorc3RhdGljIHVpbnQ4X3Qgd2Z4X3R4X2dldF90aWQoc3RydWN0IGllZWU4MDIxMV9oZHIgKmhk cikNCit7DQorCS8vIEZJWE1FOiBpZWVlODAyMTFfZ2V0X3RpZChoZHIpIHNob3VsZCBiZSBzdWZm aWNpZW50IGZvciBhbGwgY2FzZXMuDQorCWlmICghaWVlZTgwMjExX2lzX2RhdGEoaGRyLT5mcmFt ZV9jb250cm9sKSkNCisJCXJldHVybiBXRlhfTUFYX1RJRDsNCisJaWYgKGllZWU4MDIxMV9pc19k YXRhX3FvcyhoZHItPmZyYW1lX2NvbnRyb2wpKQ0KKwkJcmV0dXJuIGllZWU4MDIxMV9nZXRfdGlk KGhkcik7DQorCWVsc2UNCisJCXJldHVybiAwOw0KK30NCisNCitzdGF0aWMgaW50IHdmeF90eF9n ZXRfaWN2X2xlbihzdHJ1Y3QgaWVlZTgwMjExX2tleV9jb25mICpod19rZXkpDQorew0KKwlpbnQg bWljX3NwYWNlOw0KKw0KKwlpZiAoIWh3X2tleSkNCisJCXJldHVybiAwOw0KKwltaWNfc3BhY2Ug PSAoaHdfa2V5LT5jaXBoZXIgPT0gV0xBTl9DSVBIRVJfU1VJVEVfVEtJUCkgPyA4IDogMDsNCisJ cmV0dXJuIGh3X2tleS0+aWN2X2xlbiArIG1pY19zcGFjZTsNCit9DQorDQorc3RhdGljIGludCB3 ZnhfdHhfaW5uZXIoc3RydWN0IHdmeF92aWYgKnd2aWYsIHN0cnVjdCBpZWVlODAyMTFfc3RhICpz dGEsIHN0cnVjdCBza19idWZmICpza2IpDQorew0KKwlzdHJ1Y3QgaGlmX21zZyAqaGlmX21zZzsN CisJc3RydWN0IGhpZl9yZXFfdHggKnJlcTsNCisJc3RydWN0IHdmeF90eF9wcml2ICp0eF9wcml2 Ow0KKwlzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKnR4X2luZm8gPSBJRUVFODAyMTFfU0tCX0NC KHNrYik7DQorCXN0cnVjdCBpZWVlODAyMTFfa2V5X2NvbmYgKmh3X2tleSA9IHR4X2luZm8tPmNv bnRyb2wuaHdfa2V5Ow0KKwlzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyID0gKHN0cnVjdCBpZWVl ODAyMTFfaGRyICopIHNrYi0+ZGF0YTsNCisJaW50IHF1ZXVlX2lkID0gdHhfaW5mby0+aHdfcXVl dWU7DQorCXNpemVfdCBvZmZzZXQgPSAoc2l6ZV90KSBza2ItPmRhdGEgJiAzOw0KKwlpbnQgd21z Z19sZW4gPSBzaXplb2Yoc3RydWN0IGhpZl9tc2cpICsgc2l6ZW9mKHN0cnVjdCBoaWZfcmVxX3R4 KSArIG9mZnNldDsNCisNCisJV0FSTihxdWV1ZV9pZCA+PSBJRUVFODAyMTFfTlVNX0FDUywgInVu c3VwcG9ydGVkIHF1ZXVlX2lkIik7DQorCXdmeF90eF9maXh1cF9yYXRlcyh0eF9pbmZvLT5kcml2 ZXJfcmF0ZXMpOw0KKw0KKwkvLyBGcm9tIG5vdyB0eF9pbmZvLT5jb250cm9sIGlzIHVudXNhYmxl DQorCW1lbXNldCh0eF9pbmZvLT5yYXRlX2RyaXZlcl9kYXRhLCAwLCBzaXplb2Yoc3RydWN0IHdm eF90eF9wcml2KSk7DQorCS8vIEZpbGwgdHhfcHJpdg0KKwl0eF9wcml2ID0gKHN0cnVjdCB3Znhf dHhfcHJpdiAqKSB0eF9pbmZvLT5yYXRlX2RyaXZlcl9kYXRhOw0KKwl0eF9wcml2LT50aWQgPSB3 ZnhfdHhfZ2V0X3RpZChoZHIpOw0KKwl0eF9wcml2LT5yYXdfbGlua19pZCA9IHdmeF90eF9nZXRf cmF3X2xpbmtfaWQod3ZpZiwgc3RhLCBoZHIpOw0KKwl0eF9wcml2LT5saW5rX2lkID0gdHhfcHJp di0+cmF3X2xpbmtfaWQ7DQorCWlmIChpZWVlODAyMTFfaGFzX3Byb3RlY3RlZChoZHItPmZyYW1l X2NvbnRyb2wpKQ0KKwkJdHhfcHJpdi0+aHdfa2V5ID0gaHdfa2V5Ow0KKwlpZiAodHhfaW5mby0+ ZmxhZ3MgJiBJRUVFODAyMTFfVFhfQ1RMX1NFTkRfQUZURVJfRFRJTSkNCisJCXR4X3ByaXYtPmxp bmtfaWQgPSBXRlhfTElOS19JRF9BRlRFUl9EVElNOw0KKwlpZiAoc3RhICYmIChzdGEtPnVhcHNk X3F1ZXVlcyAmIEJJVChxdWV1ZV9pZCkpKQ0KKwkJdHhfcHJpdi0+bGlua19pZCA9IFdGWF9MSU5L X0lEX1VBUFNEOw0KKw0KKwkvLyBGaWxsIGhpZl9tc2cNCisJV0FSTihza2JfaGVhZHJvb20oc2ti KSA8IHdtc2dfbGVuLCAibm90IGVub3VnaCBzcGFjZSBpbiBza2IiKTsNCisJV0FSTihvZmZzZXQg JiAxLCAiYXR0ZW1wdCB0byB0cmFuc21pdCBhbiB1bmFsaWduZWQgZnJhbWUiKTsNCisJc2tiX3B1 dChza2IsIHdmeF90eF9nZXRfaWN2X2xlbih0eF9wcml2LT5od19rZXkpKTsNCisJc2tiX3B1c2go c2tiLCB3bXNnX2xlbik7DQorCW1lbXNldChza2ItPmRhdGEsIDAsIHdtc2dfbGVuKTsNCisJaGlm X21zZyA9IChzdHJ1Y3QgaGlmX21zZyAqKSBza2ItPmRhdGE7DQorCWhpZl9tc2ctPmxlbiA9IGNw dV90b19sZTE2KHNrYi0+bGVuKTsNCisJaGlmX21zZy0+aWQgPSBjcHVfdG9fbGUxNihISUZfUkVR X0lEX1RYKTsNCisJaGlmX21zZy0+aW50ZXJmYWNlID0gd3ZpZi0+aWQ7DQorCWlmIChza2ItPmxl biA+IHd2aWYtPndkZXYtPmh3X2NhcHMuc2l6ZV9pbnBfY2hfYnVmKSB7DQorCQlkZXZfd2Fybih3 dmlmLT53ZGV2LT5kZXYsICJyZXF1ZXN0ZWQgZnJhbWUgc2l6ZSAoJWQpIGlzIGxhcmdlciB0aGFu IG1heGltdW0gc3VwcG9ydGVkICglZClcbiIsDQorCQkJIHNrYi0+bGVuLCB3dmlmLT53ZGV2LT5o d19jYXBzLnNpemVfaW5wX2NoX2J1Zik7DQorCQlza2JfcHVsbChza2IsIHdtc2dfbGVuKTsNCisJ CXJldHVybiAtRUlPOw0KKwl9DQorDQorCS8vIEZpbGwgdHggcmVxdWVzdA0KKwlyZXEgPSAoc3Ry dWN0IGhpZl9yZXFfdHggKikgaGlmX21zZy0+Ym9keTsNCisJcmVxLT5wYWNrZXRfaWQgPSBxdWV1 ZV9pZCA8PCAxNiB8IElFRUU4MDIxMV9TRVFfVE9fU04obGUxNl90b19jcHUoaGRyLT5zZXFfY3Ry bCkpOw0KKwlyZXEtPmRhdGFfZmxhZ3MuZmNfb2Zmc2V0ID0gb2Zmc2V0Ow0KKwlyZXEtPnF1ZXVl X2lkLnBlZXJfc3RhX2lkID0gdHhfcHJpdi0+cmF3X2xpbmtfaWQ7DQorCS8vIFF1ZXVlIGluZGV4 IGFyZSBpbnZlcnRlZCBiZXR3ZWVuIGZpcm13YXJlIGFuZCBMaW51eA0KKwlyZXEtPnF1ZXVlX2lk LnF1ZXVlX2lkID0gMyAtIHF1ZXVlX2lkOw0KKwlyZXEtPmh0X3R4X3BhcmFtZXRlcnMgPSB3Znhf dHhfZ2V0X3R4X3Bhcm1zKHd2aWYtPndkZXYsIHR4X2luZm8pOw0KKwlyZXEtPnR4X2ZsYWdzLnJl dHJ5X3BvbGljeV9pbmRleCA9IHdmeF90eF9nZXRfcmF0ZV9pZCh3dmlmLCB0eF9pbmZvKTsNCisN CisJLy8gQXV4aWxsaWFyeSBvcGVyYXRpb25zDQorCXdmeF90eF9tYW5hZ2VfcG0od3ZpZiwgaGRy LCB0eF9wcml2LCBzdGEpOw0KKwl3ZnhfdHhfcXVldWVfcHV0KHd2aWYtPndkZXYsICZ3dmlmLT53 ZGV2LT50eF9xdWV1ZVtxdWV1ZV9pZF0sIHNrYik7DQorCXdmeF9iaF9yZXF1ZXN0X3R4KHd2aWYt PndkZXYpOw0KKwlyZXR1cm4gMDsNCit9DQorDQordm9pZCB3ZnhfdHgoc3RydWN0IGllZWU4MDIx MV9odyAqaHcsIHN0cnVjdCBpZWVlODAyMTFfdHhfY29udHJvbCAqY29udHJvbCwNCisJICAgIHN0 cnVjdCBza19idWZmICpza2IpDQorew0KKwlzdHJ1Y3Qgd2Z4X2RldiAqd2RldiA9IGh3LT5wcml2 Ow0KKwlzdHJ1Y3Qgd2Z4X3ZpZiAqd3ZpZjsNCisJc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSA9 IGNvbnRyb2wgPyBjb250cm9sLT5zdGEgOiBOVUxMOw0KKwlzdHJ1Y3QgaWVlZTgwMjExX3R4X2lu Zm8gKnR4X2luZm8gPSBJRUVFODAyMTFfU0tCX0NCKHNrYik7DQorCXN0cnVjdCBpZWVlODAyMTFf aGRyICpoZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHIgKikgc2tiLT5kYXRhOw0KKwlzaXplX3Qg ZHJpdmVyX2RhdGFfcm9vbSA9IEZJRUxEX1NJWkVPRihzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8s IHJhdGVfZHJpdmVyX2RhdGEpOw0KKw0KKwljb21waWxldGltZV9hc3NlcnQoc2l6ZW9mKHN0cnVj dCB3ZnhfdHhfcHJpdikgPD0gZHJpdmVyX2RhdGFfcm9vbSwNCisJCQkgICAic3RydWN0IHR4X3By aXYgaXMgdG9vIGxhcmdlIik7DQorCVdBUk4oc2tiLT5uZXh0IHx8IHNrYi0+cHJldiwgInNrYiBp cyBhbHJlYWR5IG1lbWJlciBvZiBhIGxpc3QiKTsNCisJLy8gY29udHJvbC52aWYgY2FuIGJlIE5V TEwgZm9yIGluamVjdGVkIGZyYW1lcw0KKwlpZiAodHhfaW5mby0+Y29udHJvbC52aWYpDQorCQl3 dmlmID0gKHN0cnVjdCB3ZnhfdmlmICopIHR4X2luZm8tPmNvbnRyb2wudmlmLT5kcnZfcHJpdjsN CisJZWxzZQ0KKwkJd3ZpZiA9IHd2aWZfaXRlcmF0ZSh3ZGV2LCBOVUxMKTsNCisJaWYgKFdBUk5f T04oIXd2aWYpKQ0KKwkJZ290byBkcm9wOw0KKwkvLyBGSVhNRTogd2h5Pw0KKwlpZiAoaWVlZTgw MjExX2lzX2FjdGlvbl9iYWNrKGhkcikpIHsNCisJCWRldl9pbmZvKHdkZXYtPmRldiwgImRyb3Ag QkEgYWN0aW9uXG4iKTsNCisJCWdvdG8gZHJvcDsNCisJfQ0KKwlpZiAod2Z4X3R4X2lubmVyKHd2 aWYsIHN0YSwgc2tiKSkNCisJCWdvdG8gZHJvcDsNCisNCisJcmV0dXJuOw0KKw0KK2Ryb3A6DQor CWllZWU4MDIxMV90eF9zdGF0dXNfaXJxc2FmZSh3ZGV2LT5odywgc2tiKTsNCit9DQorDQordm9p ZCB3ZnhfdHhfY29uZmlybV9jYihzdHJ1Y3Qgd2Z4X3ZpZiAqd3ZpZiwgc3RydWN0IGhpZl9jbmZf dHggKmFyZykNCit7DQorCWludCBpOw0KKwlpbnQgdHhfY291bnQ7DQorCXN0cnVjdCBza19idWZm ICpza2I7DQorCXN0cnVjdCBpZWVlODAyMTFfdHhfcmF0ZSAqcmF0ZTsNCisJc3RydWN0IGllZWU4 MDIxMV90eF9pbmZvICp0eF9pbmZvOw0KKwljb25zdCBzdHJ1Y3Qgd2Z4X3R4X3ByaXYgKnR4X3By aXY7DQorDQorCXNrYiA9IHdmeF9wZW5kaW5nX2dldCh3dmlmLT53ZGV2LCBhcmctPnBhY2tldF9p ZCk7DQorCWlmICghc2tiKSB7DQorCQlkZXZfd2Fybih3dmlmLT53ZGV2LT5kZXYsICJyZWNlaXZl ZCB1bmtub3duIHBhY2tldF9pZCAoJSMuOHgpIGZyb20gY2hpcFxuIiwgYXJnLT5wYWNrZXRfaWQp Ow0KKwkJcmV0dXJuOw0KKwl9DQorCXR4X2luZm8gPSBJRUVFODAyMTFfU0tCX0NCKHNrYik7DQor CXR4X3ByaXYgPSB3Znhfc2tiX3R4X3ByaXYoc2tiKTsNCisJX3RyYWNlX3R4X3N0YXRzKGFyZywg c2tiLCB3ZnhfcGVuZGluZ19nZXRfcGt0X3VzX2RlbGF5KHd2aWYtPndkZXYsIHNrYikpOw0KKw0K KwkvLyBZb3UgY2FuIHRvdWNoIHRvIHR4X3ByaXYsIGJ1dCBkb24ndCB0b3VjaCB0byB0eF9pbmZv LT5zdGF0dXMuDQorCXR4X2NvdW50ID0gYXJnLT5hY2tfZmFpbHVyZXM7DQorCWlmICghYXJnLT5z dGF0dXMgfHwgYXJnLT5hY2tfZmFpbHVyZXMpDQorCQl0eF9jb3VudCArPSAxOyAvLyBBbHNvIHJl cG9ydCBzdWNjZXNzDQorCWZvciAoaSA9IDA7IGkgPCBJRUVFODAyMTFfVFhfTUFYX1JBVEVTOyBp KyspIHsNCisJCXJhdGUgPSAmdHhfaW5mby0+c3RhdHVzLnJhdGVzW2ldOw0KKwkJaWYgKHJhdGUt PmlkeCA8IDApDQorCQkJYnJlYWs7DQorCQlpZiAodHhfY291bnQgPCByYXRlLT5jb3VudCAmJiBh cmctPnN0YXR1cyAmJiBhcmctPmFja19mYWlsdXJlcykNCisJCQlkZXZfZGJnKHd2aWYtPndkZXYt PmRldiwgImFsbCByZXRyaWVzIHdlcmUgbm90IGNvbnN1bWVkOiAlZCAhPSAlZFxuIiwNCisJCQkJ cmF0ZS0+Y291bnQsIHR4X2NvdW50KTsNCisJCWlmICh0eF9jb3VudCA8PSByYXRlLT5jb3VudCAm JiB0eF9jb3VudCAmJiBhcmctPnR4ZWRfcmF0ZSAhPSB3ZnhfZ2V0X2h3X3JhdGUod3ZpZi0+d2Rl diwgcmF0ZSkpDQorCQkJZGV2X2RiZyh3dmlmLT53ZGV2LT5kZXYsICJpbmNvbnNpc3RlbnQgdHhf aW5mbyByYXRlczogJWQgIT0gJWRcbiIsDQorCQkJCWFyZy0+dHhlZF9yYXRlLCB3ZnhfZ2V0X2h3 X3JhdGUod3ZpZi0+d2RldiwgcmF0ZSkpOw0KKwkJaWYgKHR4X2NvdW50ID4gcmF0ZS0+Y291bnQp IHsNCisJCQl0eF9jb3VudCAtPSByYXRlLT5jb3VudDsNCisJCX0gZWxzZSBpZiAoIXR4X2NvdW50 KSB7DQorCQkJcmF0ZS0+Y291bnQgPSAwOw0KKwkJCXJhdGUtPmlkeCA9IC0xOw0KKwkJfSBlbHNl IHsNCisJCQlyYXRlLT5jb3VudCA9IHR4X2NvdW50Ow0KKwkJCXR4X2NvdW50ID0gMDsNCisJCX0N CisJfQ0KKwlpZiAodHhfY291bnQpDQorCQlkZXZfZGJnKHd2aWYtPndkZXYtPmRldiwgIiVkIG1v cmUgcmV0cmllcyB0aGFuIGV4cGVjdGVkXG4iLCB0eF9jb3VudCk7DQorCXNrYl90cmltKHNrYiwg c2tiLT5sZW4gLSB3ZnhfdHhfZ2V0X2ljdl9sZW4odHhfcHJpdi0+aHdfa2V5KSk7DQorDQorCS8v IEZyb20gbm93LCB5b3UgY2FuIHRvdWNoIHRvIHR4X2luZm8tPnN0YXR1cywgYnV0IGRvIG5vdCB0 b3VjaCB0bw0KKwkvLyB0eF9wcml2IGFueW1vcmUNCisJLy8gRklYTUU6IHVzZSBpZWVlODAyMTFf dHhfaW5mb19jbGVhcl9zdGF0dXMoKQ0KKwltZW1zZXQodHhfaW5mby0+cmF0ZV9kcml2ZXJfZGF0 YSwgMCwgc2l6ZW9mKHR4X2luZm8tPnJhdGVfZHJpdmVyX2RhdGEpKTsNCisJbWVtc2V0KHR4X2lu Zm8tPnBhZCwgMCwgc2l6ZW9mKHR4X2luZm8tPnBhZCkpOw0KKw0KKwlpZiAoIWFyZy0+c3RhdHVz KSB7DQorCQl0eF9pbmZvLT5zdGF0dXMudHhfdGltZSA9IGFyZy0+bWVkaWFfZGVsYXkgLSBhcmct PnR4X3F1ZXVlX2RlbGF5Ow0KKwkJaWYgKHR4X2luZm8tPmZsYWdzICYgSUVFRTgwMjExX1RYX0NU TF9OT19BQ0spDQorCQkJdHhfaW5mby0+ZmxhZ3MgfD0gSUVFRTgwMjExX1RYX1NUQVRfTk9BQ0tf VFJBTlNNSVRURUQ7DQorCQllbHNlDQorCQkJdHhfaW5mby0+ZmxhZ3MgfD0gSUVFRTgwMjExX1RY X1NUQVRfQUNLOw0KKwl9IGVsc2UgaWYgKGFyZy0+c3RhdHVzID09IEhJRl9SRVFVRVVFKSB7DQor CQlXQVJOKCFhcmctPnR4X3Jlc3VsdF9mbGFncy5yZXF1ZXVlLCAiaW5jb2hlcmVudCBzdGF0dXMg YW5kIHJlc3VsdF9mbGFncyIpOw0KKwkJdHhfaW5mby0+ZmxhZ3MgfD0gSUVFRTgwMjExX1RYX1NU QVRfVFhfRklMVEVSRUQ7DQorCX0NCisJd2Z4X3BlbmRpbmdfcmVtb3ZlKHd2aWYtPndkZXYsIHNr Yik7DQorfQ0KKw0KK3N0YXRpYyB2b2lkIHdmeF9ub3RpZnlfYnVmZmVyZWRfdHgoc3RydWN0IHdm eF92aWYgKnd2aWYsIHN0cnVjdCBza19idWZmICpza2IsDQorCQkJCSAgIHN0cnVjdCBoaWZfcmVx X3R4ICpyZXEpDQorew0KKwlzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhOw0KKwlzdHJ1Y3QgaWVl ZTgwMjExX2hkciAqaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyICopIHNrYi0+ZGF0YTsNCisJ aW50IHRpZCA9IHdmeF90eF9nZXRfdGlkKGhkcik7DQorCWludCByYXdfbGlua19pZCA9IHJlcS0+ cXVldWVfaWQucGVlcl9zdGFfaWQ7DQorCXU4ICpidWZmZXJlZDsNCisNCisJaWYgKHJhd19saW5r X2lkICYmIHRpZCA8IFdGWF9NQVhfVElEKSB7DQorCQlidWZmZXJlZCA9IHd2aWYtPmxpbmtfaWRf ZGJbcmF3X2xpbmtfaWQgLSAxXS5idWZmZXJlZDsNCisNCisJCXNwaW5fbG9ja19iaCgmd3ZpZi0+ cHNfc3RhdGVfbG9jayk7DQorCQlXQVJOKCFidWZmZXJlZFt0aWRdLCAiaW5jb25zaXN0ZW50IG5v dGlmaWNhdGlvbiIpOw0KKwkJYnVmZmVyZWRbdGlkXS0tOw0KKwkJc3Bpbl91bmxvY2tfYmgoJnd2 aWYtPnBzX3N0YXRlX2xvY2spOw0KKw0KKwkJaWYgKCFidWZmZXJlZFt0aWRdKSB7DQorCQkJcmN1 X3JlYWRfbG9jaygpOw0KKwkJCXN0YSA9IGllZWU4MDIxMV9maW5kX3N0YSh3dmlmLT52aWYsIGhk ci0+YWRkcjEpOw0KKwkJCWlmIChzdGEpDQorCQkJCWllZWU4MDIxMV9zdGFfc2V0X2J1ZmZlcmVk KHN0YSwgdGlkLCBmYWxzZSk7DQorCQkJcmN1X3JlYWRfdW5sb2NrKCk7DQorCQl9DQorCX0NCit9 DQorDQordm9pZCB3Znhfc2tiX2R0b3Ioc3RydWN0IHdmeF9kZXYgKndkZXYsIHN0cnVjdCBza19i dWZmICpza2IpDQorew0KKwlzdHJ1Y3QgaGlmX21zZyAqaGlmID0gKHN0cnVjdCBoaWZfbXNnICop IHNrYi0+ZGF0YTsNCisJc3RydWN0IGhpZl9yZXFfdHggKnJlcSA9IChzdHJ1Y3QgaGlmX3JlcV90 eCAqKSBoaWYtPmJvZHk7DQorCXN0cnVjdCB3ZnhfdmlmICp3dmlmID0gd2Rldl90b193dmlmKHdk ZXYsIGhpZi0+aW50ZXJmYWNlKTsNCisJdW5zaWduZWQgaW50IG9mZnNldCA9IHNpemVvZihzdHJ1 Y3QgaGlmX3JlcV90eCkgKyBzaXplb2Yoc3RydWN0IGhpZl9tc2cpICsgcmVxLT5kYXRhX2ZsYWdz LmZjX29mZnNldDsNCisNCisJV0FSTl9PTighd3ZpZik7DQorCXNrYl9wdWxsKHNrYiwgb2Zmc2V0 KTsNCisJd2Z4X25vdGlmeV9idWZmZXJlZF90eCh3dmlmLCBza2IsIHJlcSk7DQorCXR4X3BvbGlj eV9wdXQod3ZpZiwgcmVxLT50eF9mbGFncy5yZXRyeV9wb2xpY3lfaW5kZXgpOw0KKwlpZWVlODAy MTFfdHhfc3RhdHVzX2lycXNhZmUod2Rldi0+aHcsIHNrYik7DQorfQ0KZGlmZiAtLWdpdCBhL2Ry aXZlcnMvc3RhZ2luZy93ZngvZGF0YV90eC5oIGIvZHJpdmVycy9zdGFnaW5nL3dmeC9kYXRhX3R4 LmgNCm5ldyBmaWxlIG1vZGUgMTAwNjQ0DQppbmRleCAwMDAwMDAwMDAwMDAuLmY1OWEyNTliYjc0 NA0KLS0tIC9kZXYvbnVsbA0KKysrIGIvZHJpdmVycy9zdGFnaW5nL3dmeC9kYXRhX3R4LmgNCkBA IC0wLDAgKzEsOTMgQEANCisvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5 ICovDQorLyoNCisgKiBEYXRhcGF0aCBpbXBsZW1lbnRhdGlvbi4NCisgKg0KKyAqIENvcHlyaWdo dCAoYykgMjAxNy0yMDE5LCBTaWxpY29uIExhYm9yYXRvcmllcywgSW5jLg0KKyAqIENvcHlyaWdo dCAoYykgMjAxMCwgU1QtRXJpY3Nzb24NCisgKi8NCisjaWZuZGVmIFdGWF9EQVRBX1RYX0gNCisj ZGVmaW5lIFdGWF9EQVRBX1RYX0gNCisNCisjaW5jbHVkZSA8bGludXgvbGlzdC5oPg0KKyNpbmNs dWRlIDxuZXQvbWFjODAyMTEuaD4NCisNCisjaW5jbHVkZSAiaGlmX2FwaV9jbWQuaCINCisjaW5j bHVkZSAiaGlmX2FwaV9taWIuaCINCisNCisvLyBGSVhNRTogdXNlIElFRUU4MDIxMV9OVU1fVElE Uw0KKyNkZWZpbmUgV0ZYX01BWF9USUQgICAgICAgICAgICAgICA4DQorDQorc3RydWN0IHdmeF90 eF9wcml2Ow0KK3N0cnVjdCB3ZnhfZGV2Ow0KK3N0cnVjdCB3ZnhfdmlmOw0KKw0KK2VudW0gd2Z4 X2xpbmtfc3RhdHVzIHsNCisJV0ZYX0xJTktfT0ZGLA0KKwlXRlhfTElOS19SRVNFUlZFLA0KKwlX RlhfTElOS19TT0ZULA0KKwlXRlhfTElOS19IQVJELA0KK307DQorDQorc3RydWN0IHdmeF9saW5r X2VudHJ5IHsNCisJdW5zaWduZWQgbG9uZwkJdGltZXN0YW1wOw0KKwllbnVtIHdmeF9saW5rX3N0 YXR1cwlzdGF0dXM7DQorCXVpbnQ4X3QJCQltYWNbRVRIX0FMRU5dOw0KKwl1aW50OF90CQkJb2xk X21hY1tFVEhfQUxFTl07DQorCXVpbnQ4X3QJCQlidWZmZXJlZFtXRlhfTUFYX1RJRF07DQorCXN0 cnVjdCBza19idWZmX2hlYWQJcnhfcXVldWU7DQorfTsNCisNCitzdHJ1Y3QgdHhfcG9saWN5IHsN CisJc3RydWN0IGxpc3RfaGVhZCBsaW5rOw0KKwl1aW50OF90IHJhdGVzWzEyXTsNCisJdWludDhf dCB1c2FnZV9jb3VudDsNCisJdWludDhfdCB1cGxvYWRlZDsNCit9Ow0KKw0KK3N0cnVjdCB0eF9w b2xpY3lfY2FjaGUgew0KKwlzdHJ1Y3QgdHhfcG9saWN5IGNhY2hlW0hJRl9NSUJfTlVNX1RYX1JB VEVfUkVUUllfUE9MSUNJRVNdOw0KKwkvLyBGSVhNRTogdXNlIGEgdHJlZXMgYW5kIGRyb3AgaGFz aCBmcm9tIHR4X3BvbGljeQ0KKwlzdHJ1Y3QgbGlzdF9oZWFkIHVzZWQ7DQorCXN0cnVjdCBsaXN0 X2hlYWQgZnJlZTsNCisJc3BpbmxvY2tfdCBsb2NrOw0KK307DQorDQorc3RydWN0IHdmeF90eF9w cml2IHsNCisJa3RpbWVfdCB4bWl0X3RpbWVzdGFtcDsNCisJc3RydWN0IGllZWU4MDIxMV9rZXlf Y29uZiAqaHdfa2V5Ow0KKwl1aW50OF90IGxpbmtfaWQ7DQorCXVpbnQ4X3QgcmF3X2xpbmtfaWQ7 DQorCXVpbnQ4X3QgdGlkOw0KK30gX19wYWNrZWQ7DQorDQordm9pZCB0eF9wb2xpY3lfaW5pdChz dHJ1Y3Qgd2Z4X3ZpZiAqd3ZpZik7DQorDQordm9pZCB3ZnhfdHgoc3RydWN0IGllZWU4MDIxMV9o dyAqaHcsIHN0cnVjdCBpZWVlODAyMTFfdHhfY29udHJvbCAqY29udHJvbCwNCisJICAgIHN0cnVj dCBza19idWZmICpza2IpOw0KK3ZvaWQgd2Z4X3R4X2NvbmZpcm1fY2Ioc3RydWN0IHdmeF92aWYg Knd2aWYsIHN0cnVjdCBoaWZfY25mX3R4ICphcmcpOw0KK3ZvaWQgd2Z4X3NrYl9kdG9yKHN0cnVj dCB3ZnhfZGV2ICp3ZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsNCisNCitpbnQgd2Z4X3VubWFw X2xpbmsoc3RydWN0IHdmeF92aWYgKnd2aWYsIGludCBsaW5rX2lkKTsNCit2b2lkIHdmeF9saW5r X2lkX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTsNCit2b2lkIHdmeF9saW5rX2lkX2dj X3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTsNCitpbnQgd2Z4X2ZpbmRfbGlua19pZChz dHJ1Y3Qgd2Z4X3ZpZiAqd3ZpZiwgY29uc3QgdTggKm1hYyk7DQorDQorc3RhdGljIGlubGluZSBz dHJ1Y3Qgd2Z4X3R4X3ByaXYgKndmeF9za2JfdHhfcHJpdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQ0K K3sNCisJc3RydWN0IGllZWU4MDIxMV90eF9pbmZvICp0eF9pbmZvOw0KKw0KKwlpZiAoIXNrYikN CisJCXJldHVybiBOVUxMOw0KKwl0eF9pbmZvID0gSUVFRTgwMjExX1NLQl9DQihza2IpOw0KKwly ZXR1cm4gKHN0cnVjdCB3ZnhfdHhfcHJpdiAqKSB0eF9pbmZvLT5yYXRlX2RyaXZlcl9kYXRhOw0K K30NCisNCitzdGF0aWMgaW5saW5lIHN0cnVjdCBoaWZfcmVxX3R4ICp3Znhfc2tiX3R4cmVxKHN0 cnVjdCBza19idWZmICpza2IpDQorew0KKwlzdHJ1Y3QgaGlmX21zZyAqaGlmID0gKHN0cnVjdCBo aWZfbXNnICopIHNrYi0+ZGF0YTsNCisJc3RydWN0IGhpZl9yZXFfdHggKnJlcSA9IChzdHJ1Y3Qg aGlmX3JlcV90eCAqKSBoaWYtPmJvZHk7DQorDQorCXJldHVybiByZXE7DQorfQ0KKw0KKyNlbmRp ZiAvKiBXRlhfREFUQV9UWF9IICovDQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3dmeC9o aWZfcnguYyBiL2RyaXZlcnMvc3RhZ2luZy93ZngvaGlmX3J4LmMNCmluZGV4IGM5M2JhZTFiNmFj Zi4uOTdjNGMyZjA4MmZiIDEwMDY0NA0KLS0tIGEvZHJpdmVycy9zdGFnaW5nL3dmeC9oaWZfcngu Yw0KKysrIGIvZHJpdmVycy9zdGFnaW5nL3dmeC9oaWZfcnguYw0KQEAgLTUzLDYgKzUzLDM5IEBA IHN0YXRpYyBpbnQgaGlmX2dlbmVyaWNfY29uZmlybShzdHJ1Y3Qgd2Z4X2RldiAqd2Rldiwgc3Ry dWN0IGhpZl9tc2cgKmhpZiwgdm9pZCAqDQogCXJldHVybiBzdGF0dXM7DQogfQ0KIA0KK3N0YXRp YyBpbnQgaGlmX3R4X2NvbmZpcm0oc3RydWN0IHdmeF9kZXYgKndkZXYsIHN0cnVjdCBoaWZfbXNn ICpoaWYsIHZvaWQgKmJ1ZikNCit7DQorCXN0cnVjdCBoaWZfY25mX3R4ICpib2R5ID0gYnVmOw0K KwlzdHJ1Y3Qgd2Z4X3ZpZiAqd3ZpZiA9IHdkZXZfdG9fd3ZpZih3ZGV2LCBoaWYtPmludGVyZmFj ZSk7DQorDQorCVdBUk5fT04oIXd2aWYpOw0KKwlpZiAoIXd2aWYpDQorCQlyZXR1cm4gLUVGQVVM VDsNCisNCisJd2Z4X3R4X2NvbmZpcm1fY2Iod3ZpZiwgYm9keSk7DQorCXJldHVybiAwOw0KK30N CisNCitzdGF0aWMgaW50IGhpZl9tdWx0aV90eF9jb25maXJtKHN0cnVjdCB3ZnhfZGV2ICp3ZGV2 LCBzdHJ1Y3QgaGlmX21zZyAqaGlmLCB2b2lkICpidWYpDQorew0KKwlzdHJ1Y3QgaGlmX2NuZl9t dWx0aV90cmFuc21pdCAqYm9keSA9IGJ1ZjsNCisJc3RydWN0IGhpZl9jbmZfdHggKmJ1Zl9sb2Mg PSAoc3RydWN0IGhpZl9jbmZfdHggKikgJmJvZHktPnR4X2NvbmZfcGF5bG9hZDsNCisJc3RydWN0 IHdmeF92aWYgKnd2aWYgPSB3ZGV2X3RvX3d2aWYod2RldiwgaGlmLT5pbnRlcmZhY2UpOw0KKwlp bnQgY291bnQgPSBib2R5LT5udW1fdHhfY29uZnM7DQorCWludCBpOw0KKw0KKwlXQVJOKGNvdW50 IDw9IDAsICJjb3JydXB0ZWQgbWVzc2FnZSIpOw0KKwlXQVJOX09OKCF3dmlmKTsNCisJaWYgKCF3 dmlmKQ0KKwkJcmV0dXJuIC1FRkFVTFQ7DQorDQorCWZvciAoaSA9IDA7IGkgPCBjb3VudDsgKytp KSB7DQorCQl3ZnhfdHhfY29uZmlybV9jYih3dmlmLCBidWZfbG9jKTsNCisJCWJ1Zl9sb2MrKzsN CisJfQ0KKwlyZXR1cm4gMDsNCit9DQorDQogc3RhdGljIGludCBoaWZfc3RhcnR1cF9pbmRpY2F0 aW9uKHN0cnVjdCB3ZnhfZGV2ICp3ZGV2LCBzdHJ1Y3QgaGlmX21zZyAqaGlmLCB2b2lkICpidWYp DQogew0KIAlzdHJ1Y3QgaGlmX2luZF9zdGFydHVwICpib2R5ID0gYnVmOw0KQEAgLTE3NCw2ICsy MDcsMTAgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCB7DQogCWludCBtc2dfaWQ7DQogCWludCAoKmhh bmRsZXIpKHN0cnVjdCB3ZnhfZGV2ICp3ZGV2LCBzdHJ1Y3QgaGlmX21zZyAqaGlmLCB2b2lkICpi dWYpOw0KIH0gaGlmX2hhbmRsZXJzW10gPSB7DQorCS8qIENvbmZpcm1hdGlvbnMgKi8NCisJeyBI SUZfQ05GX0lEX1RYLCAgICAgICAgICAgICAgICAgICBoaWZfdHhfY29uZmlybSB9LA0KKwl7IEhJ Rl9DTkZfSURfTVVMVElfVFJBTlNNSVQsICAgICAgIGhpZl9tdWx0aV90eF9jb25maXJtIH0sDQor CS8qIEluZGljYXRpb25zICovDQogCXsgSElGX0lORF9JRF9TVEFSVFVQLCAgICAgICAgICAgICAg aGlmX3N0YXJ0dXBfaW5kaWNhdGlvbiB9LA0KIAl7IEhJRl9JTkRfSURfV0FLRVVQLCAgICAgICAg ICAgICAgIGhpZl93YWtldXBfaW5kaWNhdGlvbiB9LA0KIAl7IEhJRl9JTkRfSURfSk9JTl9DT01Q TEVURSwgICAgICAgIGhpZl9qb2luX2NvbXBsZXRlX2luZGljYXRpb24gfSwNCmRpZmYgLS1naXQg YS9kcml2ZXJzL3N0YWdpbmcvd2Z4L2hpZl90eC5jIGIvZHJpdmVycy9zdGFnaW5nL3dmeC9oaWZf dHguYw0KaW5kZXggZjhhYjg3MWFhMTg4Li4xNTdhYjE3N2I3M2YgMTAwNjQ0DQotLS0gYS9kcml2 ZXJzL3N0YWdpbmcvd2Z4L2hpZl90eC5jDQorKysgYi9kcml2ZXJzL3N0YWdpbmcvd2Z4L2hpZl90 eC5jDQpAQCAtODgsNiArODgsNyBAQCBpbnQgd2Z4X2NtZF9zZW5kKHN0cnVjdCB3ZnhfZGV2ICp3 ZGV2LCBzdHJ1Y3QgaGlmX21zZyAqcmVxdWVzdCwgdm9pZCAqcmVwbHksIHNpeg0KIAl9DQogCWlm ICghcmV0KSB7DQogCQlkZXZfZXJyKHdkZXYtPmRldiwgImNoaXAgZGlkIG5vdCBhbnN3ZXJcbiIp Ow0KKwkJd2Z4X3BlbmRpbmdfZHVtcF9vbGRfZnJhbWVzKHdkZXYsIDMwMDApOw0KIAkJd2Rldi0+ Y2hpcF9mcm96ZW4gPSAxOw0KIAkJcmVpbml0X2NvbXBsZXRpb24oJndkZXYtPmhpZl9jbWQuZG9u ZSk7DQogCQlyZXQgPSAtRVRJTUVET1VUOw0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy93 ZngvbWFpbi5jIGIvZHJpdmVycy9zdGFnaW5nL3dmeC9tYWluLmMNCmluZGV4IDJlNzFmNDQ2ZDRk NC4uY2NlNGUzMGRkOTRhIDEwMDY0NA0KLS0tIGEvZHJpdmVycy9zdGFnaW5nL3dmeC9tYWluLmMN CisrKyBiL2RyaXZlcnMvc3RhZ2luZy93ZngvbWFpbi5jDQpAQCAtMjgsNiArMjgsNyBAQA0KICNp bmNsdWRlICJiaC5oIg0KICNpbmNsdWRlICJzdGEuaCINCiAjaW5jbHVkZSAiZGVidWcuaCINCisj aW5jbHVkZSAiZGF0YV90eC5oIg0KICNpbmNsdWRlICJzZWN1cmVfbGluay5oIg0KICNpbmNsdWRl ICJoaWZfdHhfbWliLmgiDQogI2luY2x1ZGUgImhpZl9hcGlfY21kLmgiDQpAQCAtNTMsNiArNTQs NyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGllZWU4MDIxMV9vcHMgd2Z4X29wcyA9IHsNCiAJLnN0 b3AJCQk9IHdmeF9zdG9wLA0KIAkuYWRkX2ludGVyZmFjZQkJPSB3ZnhfYWRkX2ludGVyZmFjZSwN CiAJLnJlbW92ZV9pbnRlcmZhY2UJPSB3ZnhfcmVtb3ZlX2ludGVyZmFjZSwNCisJLnR4CQkJPSB3 ZnhfdHgsDQogfTsNCiANCiBib29sIHdmeF9hcGlfb2xkZXJfdGhhbihzdHJ1Y3Qgd2Z4X2RldiAq d2RldiwgaW50IG1ham9yLCBpbnQgbWlub3IpDQpAQCAtMjE1LDYgKzIxNyw3IEBAIHN0cnVjdCB3 ZnhfZGV2ICp3ZnhfaW5pdF9jb21tb24oc3RydWN0IGRldmljZSAqZGV2LA0KIAltdXRleF9pbml0 KCZ3ZGV2LT5yeF9zdGF0c19sb2NrKTsNCiAJaW5pdF9jb21wbGV0aW9uKCZ3ZGV2LT5maXJtd2Fy ZV9yZWFkeSk7DQogCXdmeF9pbml0X2hpZl9jbWQoJndkZXYtPmhpZl9jbWQpOw0KKwl3ZnhfdHhf cXVldWVzX2luaXQod2Rldik7DQogDQogCXJldHVybiB3ZGV2Ow0KIH0NCkBAIC0yMjIsNiArMjI1 LDcgQEAgc3RydWN0IHdmeF9kZXYgKndmeF9pbml0X2NvbW1vbihzdHJ1Y3QgZGV2aWNlICpkZXYs DQogdm9pZCB3ZnhfZnJlZV9jb21tb24oc3RydWN0IHdmeF9kZXYgKndkZXYpDQogew0KIAltdXRl eF9kZXN0cm95KCZ3ZGV2LT5yeF9zdGF0c19sb2NrKTsNCisJd2Z4X3R4X3F1ZXVlc19kZWluaXQo d2Rldik7DQogCWllZWU4MDIxMV9mcmVlX2h3KHdkZXYtPmh3KTsNCiB9DQogDQpkaWZmIC0tZ2l0 IGEvZHJpdmVycy9zdGFnaW5nL3dmeC9xdWV1ZS5jIGIvZHJpdmVycy9zdGFnaW5nL3dmeC9xdWV1 ZS5jDQpuZXcgZmlsZSBtb2RlIDEwMDY0NA0KaW5kZXggMDAwMDAwMDAwMDAwLi5hYTQzOGJlMjFk MzcNCi0tLSAvZGV2L251bGwNCisrKyBiL2RyaXZlcnMvc3RhZ2luZy93ZngvcXVldWUuYw0KQEAg LTAsMCArMSw1MjYgQEANCisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5 DQorLyoNCisgKiBPKDEpIFRYIHF1ZXVlIHdpdGggYnVpbHQtaW4gYWxsb2NhdG9yLg0KKyAqDQor ICogQ29weXJpZ2h0IChjKSAyMDE3LTIwMTksIFNpbGljb24gTGFib3JhdG9yaWVzLCBJbmMuDQor ICogQ29weXJpZ2h0IChjKSAyMDEwLCBTVC1Fcmljc3Nvbg0KKyAqLw0KKyNpbmNsdWRlIDxsaW51 eC9zY2hlZC5oPg0KKyNpbmNsdWRlIDxuZXQvbWFjODAyMTEuaD4NCisNCisjaW5jbHVkZSAicXVl dWUuaCINCisjaW5jbHVkZSAid2Z4LmgiDQorI2luY2x1ZGUgInN0YS5oIg0KKyNpbmNsdWRlICJk YXRhX3R4LmgiDQorDQordm9pZCB3ZnhfdHhfbG9jayhzdHJ1Y3Qgd2Z4X2RldiAqd2RldikNCit7 DQorCWF0b21pY19pbmMoJndkZXYtPnR4X2xvY2spOw0KK30NCisNCit2b2lkIHdmeF90eF91bmxv Y2soc3RydWN0IHdmeF9kZXYgKndkZXYpDQorew0KKwlpbnQgdHhfbG9jayA9IGF0b21pY19kZWNf cmV0dXJuKCZ3ZGV2LT50eF9sb2NrKTsNCisNCisJV0FSTih0eF9sb2NrIDwgMCwgImluY29uc2lz dGVudCB0eF9sb2NrIHZhbHVlIik7DQorCWlmICghdHhfbG9jaykNCisJCXdmeF9iaF9yZXF1ZXN0 X3R4KHdkZXYpOw0KK30NCisNCit2b2lkIHdmeF90eF9mbHVzaChzdHJ1Y3Qgd2Z4X2RldiAqd2Rl dikNCit7DQorCWludCByZXQ7DQorDQorCVdBUk4oIWF0b21pY19yZWFkKCZ3ZGV2LT50eF9sb2Nr KSwgInR4X2xvY2sgaXMgbm90IGxvY2tlZCIpOw0KKw0KKwkvLyBEbyBub3Qgd2FpdCBmb3IgYW55 IHJlcGx5IGlmIGNoaXAgaXMgZnJvemVuDQorCWlmICh3ZGV2LT5jaGlwX2Zyb3plbikNCisJCXJl dHVybjsNCisNCisJbXV0ZXhfbG9jaygmd2Rldi0+aGlmX2NtZC5sb2NrKTsNCisJcmV0ID0gd2Fp dF9ldmVudF90aW1lb3V0KHdkZXYtPmhpZi50eF9idWZmZXJzX2VtcHR5LA0KKwkJCQkgIXdkZXYt PmhpZi50eF9idWZmZXJzX3VzZWQsDQorCQkJCSBtc2Vjc190b19qaWZmaWVzKDMwMDApKTsNCisJ aWYgKCFyZXQpIHsNCisJCWRldl93YXJuKHdkZXYtPmRldiwgImNhbm5vdCBmbHVzaCB0eCBidWZm ZXJzICglZCBzdGlsbCBidXN5KVxuIiwgd2Rldi0+aGlmLnR4X2J1ZmZlcnNfdXNlZCk7DQorCQl3 ZnhfcGVuZGluZ19kdW1wX29sZF9mcmFtZXMod2RldiwgMzAwMCk7DQorCQkvLyBGSVhNRTogZHJv cCBwZW5kaW5nIGZyYW1lcyBoZXJlDQorCQl3ZGV2LT5jaGlwX2Zyb3plbiA9IDE7DQorCX0NCisJ bXV0ZXhfdW5sb2NrKCZ3ZGV2LT5oaWZfY21kLmxvY2spOw0KK30NCisNCit2b2lkIHdmeF90eF9s b2NrX2ZsdXNoKHN0cnVjdCB3ZnhfZGV2ICp3ZGV2KQ0KK3sNCisJd2Z4X3R4X2xvY2sod2Rldik7 DQorCXdmeF90eF9mbHVzaCh3ZGV2KTsNCit9DQorDQordm9pZCB3ZnhfdHhfcXVldWVzX2xvY2so c3RydWN0IHdmeF9kZXYgKndkZXYpDQorew0KKwlpbnQgaTsNCisJc3RydWN0IHdmeF9xdWV1ZSAq cXVldWU7DQorDQorCWZvciAoaSA9IDA7IGkgPCBJRUVFODAyMTFfTlVNX0FDUzsgKytpKSB7DQor CQlxdWV1ZSA9ICZ3ZGV2LT50eF9xdWV1ZVtpXTsNCisJCXNwaW5fbG9ja19iaCgmcXVldWUtPnF1 ZXVlLmxvY2spOw0KKwkJaWYgKHF1ZXVlLT50eF9sb2NrZWRfY250KysgPT0gMCkNCisJCQlpZWVl ODAyMTFfc3RvcF9xdWV1ZSh3ZGV2LT5odywgcXVldWUtPnF1ZXVlX2lkKTsNCisJCXNwaW5fdW5s b2NrX2JoKCZxdWV1ZS0+cXVldWUubG9jayk7DQorCX0NCit9DQorDQordm9pZCB3ZnhfdHhfcXVl dWVzX3VubG9jayhzdHJ1Y3Qgd2Z4X2RldiAqd2RldikNCit7DQorCWludCBpOw0KKwlzdHJ1Y3Qg d2Z4X3F1ZXVlICpxdWV1ZTsNCisNCisJZm9yIChpID0gMDsgaSA8IElFRUU4MDIxMV9OVU1fQUNT OyArK2kpIHsNCisJCXF1ZXVlID0gJndkZXYtPnR4X3F1ZXVlW2ldOw0KKwkJc3Bpbl9sb2NrX2Jo KCZxdWV1ZS0+cXVldWUubG9jayk7DQorCQlCVUdfT04oIXF1ZXVlLT50eF9sb2NrZWRfY250KTsN CisJCWlmICgtLXF1ZXVlLT50eF9sb2NrZWRfY250ID09IDApDQorCQkJaWVlZTgwMjExX3dha2Vf cXVldWUod2Rldi0+aHcsIHF1ZXVlLT5xdWV1ZV9pZCk7DQorCQlzcGluX3VubG9ja19iaCgmcXVl dWUtPnF1ZXVlLmxvY2spOw0KKwl9DQorfQ0KKw0KKy8qIElmIHN1Y2Nlc3NmdWwsIExPQ0tTIHRo ZSBUWCBxdWV1ZSEgKi8NCit2b2lkIHdmeF90eF9xdWV1ZXNfd2FpdF9lbXB0eV92aWYoc3RydWN0 IHdmeF92aWYgKnd2aWYpDQorew0KKwlpbnQgaTsNCisJYm9vbCBkb25lOw0KKwlzdHJ1Y3Qgd2Z4 X3F1ZXVlICpxdWV1ZTsNCisJc3RydWN0IHNrX2J1ZmYgKml0ZW07DQorCXN0cnVjdCB3ZnhfZGV2 ICp3ZGV2ID0gd3ZpZi0+d2RldjsNCisJc3RydWN0IGhpZl9tc2cgKmhpZjsNCisNCisJaWYgKHd2 aWYtPndkZXYtPmNoaXBfZnJvemVuKSB7DQorCQl3ZnhfdHhfbG9ja19mbHVzaCh3ZGV2KTsNCisJ CXdmeF90eF9xdWV1ZXNfY2xlYXIod2Rldik7DQorCQlyZXR1cm47DQorCX0NCisNCisJZG8gew0K KwkJZG9uZSA9IHRydWU7DQorCQl3ZnhfdHhfbG9ja19mbHVzaCh3ZGV2KTsNCisJCWZvciAoaSA9 IDA7IGkgPCBJRUVFODAyMTFfTlVNX0FDUyAmJiBkb25lOyArK2kpIHsNCisJCQlxdWV1ZSA9ICZ3 ZGV2LT50eF9xdWV1ZVtpXTsNCisJCQlzcGluX2xvY2tfYmgoJnF1ZXVlLT5xdWV1ZS5sb2NrKTsN CisJCQlza2JfcXVldWVfd2FsaygmcXVldWUtPnF1ZXVlLCBpdGVtKSB7DQorCQkJCWhpZiA9IChz dHJ1Y3QgaGlmX21zZyAqKSBpdGVtLT5kYXRhOw0KKwkJCQlpZiAoaGlmLT5pbnRlcmZhY2UgPT0g d3ZpZi0+aWQpDQorCQkJCQlkb25lID0gZmFsc2U7DQorCQkJfQ0KKwkJCXNwaW5fdW5sb2NrX2Jo KCZxdWV1ZS0+cXVldWUubG9jayk7DQorCQl9DQorCQlpZiAoIWRvbmUpIHsNCisJCQl3ZnhfdHhf dW5sb2NrKHdkZXYpOw0KKwkJCW1zbGVlcCgyMCk7DQorCQl9DQorCX0gd2hpbGUgKCFkb25lKTsN Cit9DQorDQorc3RhdGljIHZvaWQgd2Z4X3R4X3F1ZXVlX2NsZWFyKHN0cnVjdCB3ZnhfZGV2ICp3 ZGV2LCBzdHJ1Y3Qgd2Z4X3F1ZXVlICpxdWV1ZSwgc3RydWN0IHNrX2J1ZmZfaGVhZCAqZ2NfbGlz dCkNCit7DQorCWludCBpOw0KKwlzdHJ1Y3Qgc2tfYnVmZiAqaXRlbTsNCisJc3RydWN0IHdmeF9x dWV1ZV9zdGF0cyAqc3RhdHMgPSAmd2Rldi0+dHhfcXVldWVfc3RhdHM7DQorDQorCXNwaW5fbG9j a19iaCgmcXVldWUtPnF1ZXVlLmxvY2spOw0KKwl3aGlsZSAoKGl0ZW0gPSBfX3NrYl9kZXF1ZXVl KCZxdWV1ZS0+cXVldWUpKSAhPSBOVUxMKQ0KKwkJc2tiX3F1ZXVlX2hlYWQoZ2NfbGlzdCwgaXRl bSk7DQorCXNwaW5fbG9ja19iaCgmc3RhdHMtPnBlbmRpbmcubG9jayk7DQorCWZvciAoaSA9IDA7 IGkgPCBBUlJBWV9TSVpFKHN0YXRzLT5saW5rX21hcF9jYWNoZSk7ICsraSkgew0KKwkJc3RhdHMt PmxpbmtfbWFwX2NhY2hlW2ldIC09IHF1ZXVlLT5saW5rX21hcF9jYWNoZVtpXTsNCisJCXF1ZXVl LT5saW5rX21hcF9jYWNoZVtpXSA9IDA7DQorCX0NCisJc3Bpbl91bmxvY2tfYmgoJnN0YXRzLT5w ZW5kaW5nLmxvY2spOw0KKwlzcGluX3VubG9ja19iaCgmcXVldWUtPnF1ZXVlLmxvY2spOw0KK30N CisNCit2b2lkIHdmeF90eF9xdWV1ZXNfY2xlYXIoc3RydWN0IHdmeF9kZXYgKndkZXYpDQorew0K KwlpbnQgaTsNCisJc3RydWN0IHNrX2J1ZmYgKml0ZW07DQorCXN0cnVjdCBza19idWZmX2hlYWQg Z2NfbGlzdDsNCisJc3RydWN0IHdmeF9xdWV1ZV9zdGF0cyAqc3RhdHMgPSAmd2Rldi0+dHhfcXVl dWVfc3RhdHM7DQorDQorCXNrYl9xdWV1ZV9oZWFkX2luaXQoJmdjX2xpc3QpOw0KKwlmb3IgKGkg PSAwOyBpIDwgSUVFRTgwMjExX05VTV9BQ1M7ICsraSkNCisJCXdmeF90eF9xdWV1ZV9jbGVhcih3 ZGV2LCAmd2Rldi0+dHhfcXVldWVbaV0sICZnY19saXN0KTsNCisJd2FrZV91cCgmc3RhdHMtPndh aXRfbGlua19pZF9lbXB0eSk7DQorCXdoaWxlICgoaXRlbSA9IHNrYl9kZXF1ZXVlKCZnY19saXN0 KSkgIT0gTlVMTCkNCisJCXdmeF9za2JfZHRvcih3ZGV2LCBpdGVtKTsNCit9DQorDQordm9pZCB3 ZnhfdHhfcXVldWVzX2luaXQoc3RydWN0IHdmeF9kZXYgKndkZXYpDQorew0KKwlpbnQgaTsNCisN CisJbWVtc2V0KCZ3ZGV2LT50eF9xdWV1ZV9zdGF0cywgMCwgc2l6ZW9mKHdkZXYtPnR4X3F1ZXVl X3N0YXRzKSk7DQorCW1lbXNldCh3ZGV2LT50eF9xdWV1ZSwgMCwgc2l6ZW9mKHdkZXYtPnR4X3F1 ZXVlKSk7DQorCXNrYl9xdWV1ZV9oZWFkX2luaXQoJndkZXYtPnR4X3F1ZXVlX3N0YXRzLnBlbmRp bmcpOw0KKwlpbml0X3dhaXRxdWV1ZV9oZWFkKCZ3ZGV2LT50eF9xdWV1ZV9zdGF0cy53YWl0X2xp bmtfaWRfZW1wdHkpOw0KKw0KKwlmb3IgKGkgPSAwOyBpIDwgSUVFRTgwMjExX05VTV9BQ1M7ICsr aSkgew0KKwkJd2Rldi0+dHhfcXVldWVbaV0ucXVldWVfaWQgPSBpOw0KKwkJc2tiX3F1ZXVlX2hl YWRfaW5pdCgmd2Rldi0+dHhfcXVldWVbaV0ucXVldWUpOw0KKwl9DQorfQ0KKw0KK3ZvaWQgd2Z4 X3R4X3F1ZXVlc19kZWluaXQoc3RydWN0IHdmeF9kZXYgKndkZXYpDQorew0KKwlXQVJOX09OKCFz a2JfcXVldWVfZW1wdHkoJndkZXYtPnR4X3F1ZXVlX3N0YXRzLnBlbmRpbmcpKTsNCisJd2Z4X3R4 X3F1ZXVlc19jbGVhcih3ZGV2KTsNCit9DQorDQorc2l6ZV90IHdmeF90eF9xdWV1ZV9nZXRfbnVt X3F1ZXVlZChzdHJ1Y3Qgd2Z4X3F1ZXVlICpxdWV1ZSwNCisJCQkJICAgdTMyIGxpbmtfaWRfbWFw KQ0KK3sNCisJc2l6ZV90IHJldDsNCisJaW50IGksIGJpdDsNCisNCisJaWYgKCFsaW5rX2lkX21h cCkNCisJCXJldHVybiAwOw0KKw0KKwlzcGluX2xvY2tfYmgoJnF1ZXVlLT5xdWV1ZS5sb2NrKTsN CisJaWYgKGxpbmtfaWRfbWFwID09ICh1MzIpLTEpIHsNCisJCXJldCA9IHNrYl9xdWV1ZV9sZW4o JnF1ZXVlLT5xdWV1ZSk7DQorCX0gZWxzZSB7DQorCQlyZXQgPSAwOw0KKwkJZm9yIChpID0gMCwg Yml0ID0gMTsgaSA8IEFSUkFZX1NJWkUocXVldWUtPmxpbmtfbWFwX2NhY2hlKTsgKytpLCBiaXQg PDw9IDEpIHsNCisJCQlpZiAobGlua19pZF9tYXAgJiBiaXQpDQorCQkJCXJldCArPSBxdWV1ZS0+ bGlua19tYXBfY2FjaGVbaV07DQorCQl9DQorCX0NCisJc3Bpbl91bmxvY2tfYmgoJnF1ZXVlLT5x dWV1ZS5sb2NrKTsNCisJcmV0dXJuIHJldDsNCit9DQorDQordm9pZCB3ZnhfdHhfcXVldWVfcHV0 KHN0cnVjdCB3ZnhfZGV2ICp3ZGV2LCBzdHJ1Y3Qgd2Z4X3F1ZXVlICpxdWV1ZSwgc3RydWN0IHNr X2J1ZmYgKnNrYikNCit7DQorCXN0cnVjdCB3ZnhfcXVldWVfc3RhdHMgKnN0YXRzID0gJndkZXYt PnR4X3F1ZXVlX3N0YXRzOw0KKwlzdHJ1Y3Qgd2Z4X3R4X3ByaXYgKnR4X3ByaXYgPSB3Znhfc2ti X3R4X3ByaXYoc2tiKTsNCisNCisJV0FSTih0eF9wcml2LT5saW5rX2lkID49IEFSUkFZX1NJWkUo c3RhdHMtPmxpbmtfbWFwX2NhY2hlKSwgImludmFsaWQgbGluay1pZCB2YWx1ZSIpOw0KKwlzcGlu X2xvY2tfYmgoJnF1ZXVlLT5xdWV1ZS5sb2NrKTsNCisJX19za2JfcXVldWVfdGFpbCgmcXVldWUt PnF1ZXVlLCBza2IpOw0KKw0KKwkrK3F1ZXVlLT5saW5rX21hcF9jYWNoZVt0eF9wcml2LT5saW5r X2lkXTsNCisNCisJc3Bpbl9sb2NrX2JoKCZzdGF0cy0+cGVuZGluZy5sb2NrKTsNCisJKytzdGF0 cy0+bGlua19tYXBfY2FjaGVbdHhfcHJpdi0+bGlua19pZF07DQorCXNwaW5fdW5sb2NrX2JoKCZz dGF0cy0+cGVuZGluZy5sb2NrKTsNCisJc3Bpbl91bmxvY2tfYmgoJnF1ZXVlLT5xdWV1ZS5sb2Nr KTsNCit9DQorDQorc3RydWN0IHNrX2J1ZmYgKndmeF90eF9xdWV1ZV9nZXQoc3RydWN0IHdmeF9k ZXYgKndkZXYsIHN0cnVjdCB3ZnhfcXVldWUgKnF1ZXVlLCB1MzIgbGlua19pZF9tYXApDQorew0K KwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gTlVMTDsNCisJc3RydWN0IHNrX2J1ZmYgKml0ZW07DQor CXN0cnVjdCB3ZnhfcXVldWVfc3RhdHMgKnN0YXRzID0gJndkZXYtPnR4X3F1ZXVlX3N0YXRzOw0K KwlzdHJ1Y3Qgd2Z4X3R4X3ByaXYgKnR4X3ByaXY7DQorCWJvb2wgd2FrZXVwX3N0YXRzID0gZmFs c2U7DQorDQorCXNwaW5fbG9ja19iaCgmcXVldWUtPnF1ZXVlLmxvY2spOw0KKwlza2JfcXVldWVf d2FsaygmcXVldWUtPnF1ZXVlLCBpdGVtKSB7DQorCQl0eF9wcml2ID0gd2Z4X3NrYl90eF9wcml2 KGl0ZW0pOw0KKwkJaWYgKGxpbmtfaWRfbWFwICYgQklUKHR4X3ByaXYtPmxpbmtfaWQpKSB7DQor CQkJc2tiID0gaXRlbTsNCisJCQlicmVhazsNCisJCX0NCisJfQ0KKwlXQVJOX09OKCFza2IpOw0K KwlpZiAoc2tiKSB7DQorCQl0eF9wcml2ID0gd2Z4X3NrYl90eF9wcml2KHNrYik7DQorCQl0eF9w cml2LT54bWl0X3RpbWVzdGFtcCA9IGt0aW1lX2dldCgpOw0KKwkJX19za2JfdW5saW5rKHNrYiwg JnF1ZXVlLT5xdWV1ZSk7DQorCQktLXF1ZXVlLT5saW5rX21hcF9jYWNoZVt0eF9wcml2LT5saW5r X2lkXTsNCisNCisJCXNwaW5fbG9ja19iaCgmc3RhdHMtPnBlbmRpbmcubG9jayk7DQorCQlfX3Nr Yl9xdWV1ZV90YWlsKCZzdGF0cy0+cGVuZGluZywgc2tiKTsNCisJCWlmICghLS1zdGF0cy0+bGlu a19tYXBfY2FjaGVbdHhfcHJpdi0+bGlua19pZF0pDQorCQkJd2FrZXVwX3N0YXRzID0gdHJ1ZTsN CisJCXNwaW5fdW5sb2NrX2JoKCZzdGF0cy0+cGVuZGluZy5sb2NrKTsNCisJfQ0KKwlzcGluX3Vu bG9ja19iaCgmcXVldWUtPnF1ZXVlLmxvY2spOw0KKwlpZiAod2FrZXVwX3N0YXRzKQ0KKwkJd2Fr ZV91cCgmc3RhdHMtPndhaXRfbGlua19pZF9lbXB0eSk7DQorCXJldHVybiBza2I7DQorfQ0KKw0K K2ludCB3ZnhfcGVuZGluZ19yZXF1ZXVlKHN0cnVjdCB3ZnhfZGV2ICp3ZGV2LCBzdHJ1Y3Qgc2tf YnVmZiAqc2tiKQ0KK3sNCisJc3RydWN0IHdmeF9xdWV1ZV9zdGF0cyAqc3RhdHMgPSAmd2Rldi0+ dHhfcXVldWVfc3RhdHM7DQorCXN0cnVjdCB3ZnhfdHhfcHJpdiAqdHhfcHJpdiA9IHdmeF9za2Jf dHhfcHJpdihza2IpOw0KKwlzdHJ1Y3Qgd2Z4X3F1ZXVlICpxdWV1ZSA9ICZ3ZGV2LT50eF9xdWV1 ZVtza2JfZ2V0X3F1ZXVlX21hcHBpbmcoc2tiKV07DQorDQorCVdBUk5fT04oc2tiX2dldF9xdWV1 ZV9tYXBwaW5nKHNrYikgPiAzKTsNCisJc3Bpbl9sb2NrX2JoKCZxdWV1ZS0+cXVldWUubG9jayk7 DQorCSsrcXVldWUtPmxpbmtfbWFwX2NhY2hlW3R4X3ByaXYtPmxpbmtfaWRdOw0KKw0KKwlzcGlu X2xvY2tfYmgoJnN0YXRzLT5wZW5kaW5nLmxvY2spOw0KKwkrK3N0YXRzLT5saW5rX21hcF9jYWNo ZVt0eF9wcml2LT5saW5rX2lkXTsNCisJX19za2JfdW5saW5rKHNrYiwgJnN0YXRzLT5wZW5kaW5n KTsNCisJc3Bpbl91bmxvY2tfYmgoJnN0YXRzLT5wZW5kaW5nLmxvY2spOw0KKwlfX3NrYl9xdWV1 ZV90YWlsKCZxdWV1ZS0+cXVldWUsIHNrYik7DQorCXNwaW5fdW5sb2NrX2JoKCZxdWV1ZS0+cXVl dWUubG9jayk7DQorCXJldHVybiAwOw0KK30NCisNCitpbnQgd2Z4X3BlbmRpbmdfcmVtb3ZlKHN0 cnVjdCB3ZnhfZGV2ICp3ZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQ0KK3sNCisJc3RydWN0IHdm eF9xdWV1ZV9zdGF0cyAqc3RhdHMgPSAmd2Rldi0+dHhfcXVldWVfc3RhdHM7DQorDQorCXNwaW5f bG9ja19iaCgmc3RhdHMtPnBlbmRpbmcubG9jayk7DQorCV9fc2tiX3VubGluayhza2IsICZzdGF0 cy0+cGVuZGluZyk7DQorCXNwaW5fdW5sb2NrX2JoKCZzdGF0cy0+cGVuZGluZy5sb2NrKTsNCisJ d2Z4X3NrYl9kdG9yKHdkZXYsIHNrYik7DQorDQorCXJldHVybiAwOw0KK30NCisNCitzdHJ1Y3Qg c2tfYnVmZiAqd2Z4X3BlbmRpbmdfZ2V0KHN0cnVjdCB3ZnhfZGV2ICp3ZGV2LCB1MzIgcGFja2V0 X2lkKQ0KK3sNCisJc3RydWN0IHNrX2J1ZmYgKnNrYjsNCisJc3RydWN0IGhpZl9yZXFfdHggKnJl cTsNCisJc3RydWN0IHdmeF9xdWV1ZV9zdGF0cyAqc3RhdHMgPSAmd2Rldi0+dHhfcXVldWVfc3Rh dHM7DQorDQorCXNwaW5fbG9ja19iaCgmc3RhdHMtPnBlbmRpbmcubG9jayk7DQorCXNrYl9xdWV1 ZV93YWxrKCZzdGF0cy0+cGVuZGluZywgc2tiKSB7DQorCQlyZXEgPSB3Znhfc2tiX3R4cmVxKHNr Yik7DQorCQlpZiAocmVxLT5wYWNrZXRfaWQgPT0gcGFja2V0X2lkKSB7DQorCQkJc3Bpbl91bmxv Y2tfYmgoJnN0YXRzLT5wZW5kaW5nLmxvY2spOw0KKwkJCXJldHVybiBza2I7DQorCQl9DQorCX0N CisJV0FSTl9PTigxKTsNCisJc3Bpbl91bmxvY2tfYmgoJnN0YXRzLT5wZW5kaW5nLmxvY2spOw0K KwlyZXR1cm4gTlVMTDsNCit9DQorDQordm9pZCB3ZnhfcGVuZGluZ19kdW1wX29sZF9mcmFtZXMo c3RydWN0IHdmeF9kZXYgKndkZXYsIHVuc2lnbmVkIGludCBsaW1pdF9tcykNCit7DQorCXN0cnVj dCB3ZnhfcXVldWVfc3RhdHMgKnN0YXRzID0gJndkZXYtPnR4X3F1ZXVlX3N0YXRzOw0KKwlrdGlt ZV90IG5vdyA9IGt0aW1lX2dldCgpOw0KKwlzdHJ1Y3Qgd2Z4X3R4X3ByaXYgKnR4X3ByaXY7DQor CXN0cnVjdCBoaWZfcmVxX3R4ICpyZXE7DQorCXN0cnVjdCBza19idWZmICpza2I7DQorCWJvb2wg Zmlyc3QgPSB0cnVlOw0KKw0KKwlzcGluX2xvY2tfYmgoJnN0YXRzLT5wZW5kaW5nLmxvY2spOw0K Kwlza2JfcXVldWVfd2Fsaygmc3RhdHMtPnBlbmRpbmcsIHNrYikgew0KKwkJdHhfcHJpdiA9IHdm eF9za2JfdHhfcHJpdihza2IpOw0KKwkJcmVxID0gd2Z4X3NrYl90eHJlcShza2IpOw0KKwkJaWYg KGt0aW1lX2FmdGVyKG5vdywga3RpbWVfYWRkX21zKHR4X3ByaXYtPnhtaXRfdGltZXN0YW1wLCBs aW1pdF9tcykpKSB7DQorCQkJaWYgKGZpcnN0KSB7DQorCQkJCWRldl9pbmZvKHdkZXYtPmRldiwg ImZyYW1lcyBzdHVjayBpbiBmaXJtd2FyZSBzaW5jZSAlZG1zIG9yIG1vcmU6XG4iLA0KKwkJCQkJ IGxpbWl0X21zKTsNCisJCQkJZmlyc3QgPSBmYWxzZTsNCisJCQl9DQorCQkJZGV2X2luZm8od2Rl di0+ZGV2LCAiICAgaWQgJTA4eCBzZW50ICVsbGRtcyBhZ29cbiIsDQorCQkJCSByZXEtPnBhY2tl dF9pZCwNCisJCQkJIGt0aW1lX21zX2RlbHRhKG5vdywgdHhfcHJpdi0+eG1pdF90aW1lc3RhbXAp KTsNCisJCX0NCisJfQ0KKwlzcGluX3VubG9ja19iaCgmc3RhdHMtPnBlbmRpbmcubG9jayk7DQor fQ0KKw0KK3Vuc2lnbmVkIGludCB3ZnhfcGVuZGluZ19nZXRfcGt0X3VzX2RlbGF5KHN0cnVjdCB3 ZnhfZGV2ICp3ZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQ0KK3sNCisJa3RpbWVfdCBub3cgPSBr dGltZV9nZXQoKTsNCisJc3RydWN0IHdmeF90eF9wcml2ICp0eF9wcml2ID0gd2Z4X3NrYl90eF9w cml2KHNrYik7DQorDQorCXJldHVybiBrdGltZV91c19kZWx0YShub3csIHR4X3ByaXYtPnhtaXRf dGltZXN0YW1wKTsNCit9DQorDQorYm9vbCB3ZnhfdHhfcXVldWVzX2lzX2VtcHR5KHN0cnVjdCB3 ZnhfZGV2ICp3ZGV2KQ0KK3sNCisJaW50IGk7DQorCXN0cnVjdCBza19idWZmX2hlYWQgKnF1ZXVl Ow0KKwlib29sIHJldCA9IHRydWU7DQorDQorCWZvciAoaSA9IDA7IGkgPCBJRUVFODAyMTFfTlVN X0FDUzsgaSsrKSB7DQorCQlxdWV1ZSA9ICZ3ZGV2LT50eF9xdWV1ZVtpXS5xdWV1ZTsNCisJCXNw aW5fbG9ja19iaCgmcXVldWUtPmxvY2spOw0KKwkJaWYgKCFza2JfcXVldWVfZW1wdHkocXVldWUp KQ0KKwkJCXJldCA9IGZhbHNlOw0KKwkJc3Bpbl91bmxvY2tfYmgoJnF1ZXVlLT5sb2NrKTsNCisJ fQ0KKwlyZXR1cm4gcmV0Ow0KK30NCisNCitzdGF0aWMgaW50IHdmeF9nZXRfcHJpb19xdWV1ZShz dHJ1Y3Qgd2Z4X3ZpZiAqd3ZpZiwNCisJCQkJIHUzMiB0eF9hbGxvd2VkX21hc2ssIGludCAqdG90 YWwpDQorew0KKwlzdGF0aWMgY29uc3QgaW50IHVyZ2VudCA9IEJJVChXRlhfTElOS19JRF9BRlRF Ul9EVElNKSB8DQorCQlCSVQoV0ZYX0xJTktfSURfVUFQU0QpOw0KKwlzdHJ1Y3QgaGlmX3JlcV9l ZGNhX3F1ZXVlX3BhcmFtcyAqZWRjYTsNCisJdW5zaWduZWQgaW50IHNjb3JlLCBiZXN0ID0gLTE7 DQorCWludCB3aW5uZXIgPSAtMTsNCisJaW50IGk7DQorDQorCS8qIHNlYXJjaCBmb3IgYSB3aW5u ZXIgdXNpbmcgZWRjYSBwYXJhbXMgKi8NCisJZm9yIChpID0gMDsgaSA8IElFRUU4MDIxMV9OVU1f QUNTOyArK2kpIHsNCisJCWludCBxdWV1ZWQ7DQorDQorCQllZGNhID0gJnd2aWYtPmVkY2EucGFy YW1zW2ldOw0KKwkJcXVldWVkID0gd2Z4X3R4X3F1ZXVlX2dldF9udW1fcXVldWVkKCZ3dmlmLT53 ZGV2LT50eF9xdWV1ZVtpXSwNCisJCQkJdHhfYWxsb3dlZF9tYXNrKTsNCisJCWlmICghcXVldWVk KQ0KKwkJCWNvbnRpbnVlOw0KKwkJKnRvdGFsICs9IHF1ZXVlZDsNCisJCXNjb3JlID0gKChlZGNh LT5haWZzbiArIGVkY2EtPmN3X21pbikgPDwgMTYpICsNCisJCQkoKGVkY2EtPmN3X21heCAtIGVk Y2EtPmN3X21pbikgKg0KKwkJCSAoZ2V0X3JhbmRvbV9pbnQoKSAmIDB4RkZGRikpOw0KKwkJaWYg KHNjb3JlIDwgYmVzdCAmJiAod2lubmVyIDwgMCB8fCBpICE9IDMpKSB7DQorCQkJYmVzdCA9IHNj b3JlOw0KKwkJCXdpbm5lciA9IGk7DQorCQl9DQorCX0NCisNCisJLyogb3ZlcnJpZGUgd2lubmVy IGlmIGJ1cnN0aW5nICovDQorCWlmICh3aW5uZXIgPj0gMCAmJiB3dmlmLT53ZGV2LT50eF9idXJz dF9pZHggPj0gMCAmJg0KKwkgICAgd2lubmVyICE9IHd2aWYtPndkZXYtPnR4X2J1cnN0X2lkeCAm Jg0KKwkgICAgIXdmeF90eF9xdWV1ZV9nZXRfbnVtX3F1ZXVlZCgmd3ZpZi0+d2Rldi0+dHhfcXVl dWVbd2lubmVyXSwgdHhfYWxsb3dlZF9tYXNrICYgdXJnZW50KSAmJg0KKwkgICAgd2Z4X3R4X3F1 ZXVlX2dldF9udW1fcXVldWVkKCZ3dmlmLT53ZGV2LT50eF9xdWV1ZVt3dmlmLT53ZGV2LT50eF9i dXJzdF9pZHhdLCB0eF9hbGxvd2VkX21hc2spKQ0KKwkJd2lubmVyID0gd3ZpZi0+d2Rldi0+dHhf YnVyc3RfaWR4Ow0KKw0KKwlyZXR1cm4gd2lubmVyOw0KK30NCisNCitzdGF0aWMgaW50IHdmeF90 eF9xdWV1ZV9tYXNrX2dldChzdHJ1Y3Qgd2Z4X3ZpZiAqd3ZpZiwNCisJCQkJICAgICBzdHJ1Y3Qg d2Z4X3F1ZXVlICoqcXVldWVfcCwNCisJCQkJICAgICB1MzIgKnR4X2FsbG93ZWRfbWFza19wLA0K KwkJCQkgICAgIGJvb2wgKm1vcmUpDQorew0KKwlpbnQgaWR4Ow0KKwl1MzIgdHhfYWxsb3dlZF9t YXNrOw0KKwlpbnQgdG90YWwgPSAwOw0KKw0KKwkvKiBTZWFyY2ggZm9yIGEgcXVldWUgd2l0aCBt dWx0aWNhc3QgZnJhbWVzIGJ1ZmZlcmVkICovDQorCWlmICh3dmlmLT5tY2FzdF90eCkgew0KKwkJ dHhfYWxsb3dlZF9tYXNrID0gQklUKFdGWF9MSU5LX0lEX0FGVEVSX0RUSU0pOw0KKwkJaWR4ID0g d2Z4X2dldF9wcmlvX3F1ZXVlKHd2aWYsIHR4X2FsbG93ZWRfbWFzaywgJnRvdGFsKTsNCisJCWlm IChpZHggPj0gMCkgew0KKwkJCSptb3JlID0gdG90YWwgPiAxOw0KKwkJCWdvdG8gZm91bmQ7DQor CQl9DQorCX0NCisNCisJLyogU2VhcmNoIGZvciB1bmljYXN0IHRyYWZmaWMgKi8NCisJdHhfYWxs b3dlZF9tYXNrID0gfnd2aWYtPnN0YV9hc2xlZXBfbWFzazsNCisJdHhfYWxsb3dlZF9tYXNrIHw9 IEJJVChXRlhfTElOS19JRF9VQVBTRCk7DQorCWlmICh3dmlmLT5zdGFfYXNsZWVwX21hc2spIHsN CisJCXR4X2FsbG93ZWRfbWFzayB8PSB3dmlmLT5wc3BvbGxfbWFzazsNCisJCXR4X2FsbG93ZWRf bWFzayAmPSB+QklUKFdGWF9MSU5LX0lEX0FGVEVSX0RUSU0pOw0KKwl9IGVsc2Ugew0KKwkJdHhf YWxsb3dlZF9tYXNrIHw9IEJJVChXRlhfTElOS19JRF9BRlRFUl9EVElNKTsNCisJfQ0KKwlpZHgg PSB3ZnhfZ2V0X3ByaW9fcXVldWUod3ZpZiwgdHhfYWxsb3dlZF9tYXNrLCAmdG90YWwpOw0KKwlp ZiAoaWR4IDwgMCkNCisJCXJldHVybiAtRU5PRU5UOw0KKw0KK2ZvdW5kOg0KKwkqcXVldWVfcCA9 ICZ3dmlmLT53ZGV2LT50eF9xdWV1ZVtpZHhdOw0KKwkqdHhfYWxsb3dlZF9tYXNrX3AgPSB0eF9h bGxvd2VkX21hc2s7DQorCXJldHVybiAwOw0KK30NCisNCitzdHJ1Y3QgaGlmX21zZyAqd2Z4X3R4 X3F1ZXVlc19nZXQoc3RydWN0IHdmeF9kZXYgKndkZXYpDQorew0KKwlzdHJ1Y3Qgc2tfYnVmZiAq c2tiOw0KKwlzdHJ1Y3QgaGlmX21zZyAqaGlmID0gTlVMTDsNCisJc3RydWN0IGhpZl9yZXFfdHgg KnJlcSA9IE5VTEw7DQorCXN0cnVjdCB3ZnhfcXVldWUgKnF1ZXVlID0gTlVMTDsNCisJc3RydWN0 IHdmeF9xdWV1ZSAqdmlmX3F1ZXVlID0gTlVMTDsNCisJdTMyIHR4X2FsbG93ZWRfbWFzayA9IDA7 DQorCXUzMiB2aWZfdHhfYWxsb3dlZF9tYXNrID0gMDsNCisJY29uc3Qgc3RydWN0IHdmeF90eF9w cml2ICp0eF9wcml2ID0gTlVMTDsNCisJc3RydWN0IHdmeF92aWYgKnd2aWY7DQorCS8qIE1vcmUg aXMgdXNlZCBvbmx5IGZvciBicm9hZGNhc3RzLiAqLw0KKwlib29sIG1vcmUgPSBmYWxzZTsNCisJ Ym9vbCB2aWZfbW9yZSA9IGZhbHNlOw0KKwlpbnQgbm90X2ZvdW5kOw0KKwlpbnQgYnVyc3Q7DQor DQorCWZvciAoOzspIHsNCisJCWludCByZXQgPSAtRU5PRU5UOw0KKwkJaW50IHF1ZXVlX251bTsN CisJCXN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHI7DQorDQorCQlpZiAoYXRvbWljX3JlYWQoJndk ZXYtPnR4X2xvY2spKQ0KKwkJCXJldHVybiBOVUxMOw0KKw0KKwkJd3ZpZiA9IE5VTEw7DQorCQl3 aGlsZSAoKHd2aWYgPSB3dmlmX2l0ZXJhdGUod2Rldiwgd3ZpZikpICE9IE5VTEwpIHsNCisJCQlz cGluX2xvY2tfYmgoJnd2aWYtPnBzX3N0YXRlX2xvY2spOw0KKw0KKwkJCW5vdF9mb3VuZCA9IHdm eF90eF9xdWV1ZV9tYXNrX2dldCh3dmlmLCAmdmlmX3F1ZXVlLCAmdmlmX3R4X2FsbG93ZWRfbWFz aywgJnZpZl9tb3JlKTsNCisNCisJCQlpZiAod3ZpZi0+bWNhc3RfYnVmZmVyZWQgJiYgKG5vdF9m b3VuZCB8fCAhdmlmX21vcmUpICYmDQorCQkJCQkod3ZpZi0+bWNhc3RfdHggfHwgIXd2aWYtPnN0 YV9hc2xlZXBfbWFzaykpIHsNCisJCQkJd3ZpZi0+bWNhc3RfYnVmZmVyZWQgPSBmYWxzZTsNCisJ CQkJaWYgKHd2aWYtPm1jYXN0X3R4KSB7DQorCQkJCQl3dmlmLT5tY2FzdF90eCA9IGZhbHNlOw0K KwkJCQkJc2NoZWR1bGVfd29yaygmd3ZpZi0+bWNhc3Rfc3RvcF93b3JrKTsNCisJCQkJfQ0KKwkJ CX0NCisNCisJCQlzcGluX3VubG9ja19iaCgmd3ZpZi0+cHNfc3RhdGVfbG9jayk7DQorDQorCQkJ aWYgKHZpZl9tb3JlKSB7DQorCQkJCW1vcmUgPSAxOw0KKwkJCQl0eF9hbGxvd2VkX21hc2sgPSB2 aWZfdHhfYWxsb3dlZF9tYXNrOw0KKwkJCQlxdWV1ZSA9IHZpZl9xdWV1ZTsNCisJCQkJcmV0ID0g MDsNCisJCQkJYnJlYWs7DQorCQkJfSBlbHNlIGlmICghbm90X2ZvdW5kKSB7DQorCQkJCWlmIChx dWV1ZSAmJiBxdWV1ZSAhPSB2aWZfcXVldWUpDQorCQkJCQlkZXZfaW5mbyh3ZGV2LT5kZXYsICJ2 aWZzIGRpc2FncmVlIGFib3V0IHF1ZXVlIHByaW9yaXR5XG4iKTsNCisJCQkJdHhfYWxsb3dlZF9t YXNrIHw9IHZpZl90eF9hbGxvd2VkX21hc2s7DQorCQkJCXF1ZXVlID0gdmlmX3F1ZXVlOw0KKwkJ CQlyZXQgPSAwOw0KKwkJCX0NCisJCX0NCisNCisJCWlmIChyZXQpDQorCQkJcmV0dXJuIDA7DQor DQorCQlxdWV1ZV9udW0gPSBxdWV1ZSAtIHdkZXYtPnR4X3F1ZXVlOw0KKw0KKwkJc2tiID0gd2Z4 X3R4X3F1ZXVlX2dldCh3ZGV2LCBxdWV1ZSwgdHhfYWxsb3dlZF9tYXNrKTsNCisJCWlmICghc2ti KQ0KKwkJCWNvbnRpbnVlOw0KKwkJdHhfcHJpdiA9IHdmeF9za2JfdHhfcHJpdihza2IpOw0KKwkJ aGlmID0gKHN0cnVjdCBoaWZfbXNnICopIHNrYi0+ZGF0YTsNCisJCXd2aWYgPSB3ZGV2X3RvX3d2 aWYod2RldiwgaGlmLT5pbnRlcmZhY2UpOw0KKwkJV0FSTl9PTighd3ZpZik7DQorDQorCQl3dmlm LT5wc3BvbGxfbWFzayAmPSB+QklUKHR4X3ByaXYtPnJhd19saW5rX2lkKTsNCisNCisJCS8qIGFs bG93IGJ1cnN0aW5nIGlmIHR4b3AgaXMgc2V0ICovDQorCQlpZiAod3ZpZi0+ZWRjYS5wYXJhbXNb cXVldWVfbnVtXS50eF9vcF9saW1pdCkNCisJCQlidXJzdCA9IChpbnQpd2Z4X3R4X3F1ZXVlX2dl dF9udW1fcXVldWVkKHF1ZXVlLCB0eF9hbGxvd2VkX21hc2spICsgMTsNCisJCWVsc2UNCisJCQli dXJzdCA9IDE7DQorDQorCQkvKiBzdG9yZSBpbmRleCBvZiBidXJzdGluZyBxdWV1ZSAqLw0KKwkJ aWYgKGJ1cnN0ID4gMSkNCisJCQl3ZGV2LT50eF9idXJzdF9pZHggPSBxdWV1ZV9udW07DQorCQll bHNlDQorCQkJd2Rldi0+dHhfYnVyc3RfaWR4ID0gLTE7DQorDQorCQkvKiBtb3JlIGJ1ZmZlcmVk IG11bHRpY2FzdC9icm9hZGNhc3QgZnJhbWVzDQorCQkgKiAgPT0+IHNldCBNb3JlRGF0YSBmbGFn IGluIElFRUUgODAyLjExIGhlYWRlcg0KKwkJICogIHRvIGluZm9ybSBQUyBTVEFzDQorCQkgKi8N CisJCWlmIChtb3JlKSB7DQorCQkJcmVxID0gKHN0cnVjdCBoaWZfcmVxX3R4ICopIGhpZi0+Ym9k eTsNCisJCQloZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHIgKikgKHJlcS0+ZnJhbWUgKyByZXEt PmRhdGFfZmxhZ3MuZmNfb2Zmc2V0KTsNCisJCQloZHItPmZyYW1lX2NvbnRyb2wgfD0gY3B1X3Rv X2xlMTYoSUVFRTgwMjExX0ZDVExfTU9SRURBVEEpOw0KKwkJfQ0KKwkJcmV0dXJuIGhpZjsNCisJ fQ0KK30NCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvd2Z4L3F1ZXVlLmggYi9kcml2ZXJz L3N0YWdpbmcvd2Z4L3F1ZXVlLmgNCm5ldyBmaWxlIG1vZGUgMTAwNjQ0DQppbmRleCAwMDAwMDAw MDAwMDAuLjkzOGRiZjM0NjllNw0KLS0tIC9kZXYvbnVsbA0KKysrIGIvZHJpdmVycy9zdGFnaW5n L3dmeC9xdWV1ZS5oDQpAQCAtMCwwICsxLDU5IEBADQorLyogU1BEWC1MaWNlbnNlLUlkZW50aWZp ZXI6IEdQTC0yLjAtb25seSAqLw0KKy8qDQorICogTygxKSBUWCBxdWV1ZSB3aXRoIGJ1aWx0LWlu IGFsbG9jYXRvci4NCisgKg0KKyAqIENvcHlyaWdodCAoYykgMjAxNy0yMDE4LCBTaWxpY29uIExh Ym9yYXRvcmllcywgSW5jLg0KKyAqIENvcHlyaWdodCAoYykgMjAxMCwgU1QtRXJpY3Nzb24NCisg Ki8NCisjaWZuZGVmIFdGWF9RVUVVRV9IDQorI2RlZmluZSBXRlhfUVVFVUVfSA0KKw0KKyNpbmNs dWRlIDxsaW51eC9za2J1ZmYuaD4NCisNCisjaW5jbHVkZSAiaGlmX2FwaV9jbWQuaCINCisNCisj ZGVmaW5lIFdGWF9NQVhfU1RBX0lOX0FQX01PREUgICAgMTQNCisjZGVmaW5lIFdGWF9MSU5LX0lE X0FGVEVSX0RUSU0gICAgKFdGWF9NQVhfU1RBX0lOX0FQX01PREUgKyAxKQ0KKyNkZWZpbmUgV0ZY X0xJTktfSURfVUFQU0QgICAgICAgICAoV0ZYX01BWF9TVEFfSU5fQVBfTU9ERSArIDIpDQorI2Rl ZmluZSBXRlhfTElOS19JRF9NQVggICAgICAgICAgIChXRlhfTUFYX1NUQV9JTl9BUF9NT0RFICsg MykNCisNCitzdHJ1Y3Qgd2Z4X2RldjsNCitzdHJ1Y3Qgd2Z4X3ZpZjsNCisNCitzdHJ1Y3Qgd2Z4 X3F1ZXVlIHsNCisJc3RydWN0IHNrX2J1ZmZfaGVhZAlxdWV1ZTsNCisJaW50CQkJdHhfbG9ja2Vk X2NudDsNCisJaW50CQkJbGlua19tYXBfY2FjaGVbV0ZYX0xJTktfSURfTUFYXTsNCisJdTgJCQlx dWV1ZV9pZDsNCit9Ow0KKw0KK3N0cnVjdCB3ZnhfcXVldWVfc3RhdHMgew0KKwlpbnQJCQlsaW5r X21hcF9jYWNoZVtXRlhfTElOS19JRF9NQVhdOw0KKwlzdHJ1Y3Qgc2tfYnVmZl9oZWFkCXBlbmRp bmc7DQorCXdhaXRfcXVldWVfaGVhZF90CXdhaXRfbGlua19pZF9lbXB0eTsNCit9Ow0KKw0KK3Zv aWQgd2Z4X3R4X2xvY2soc3RydWN0IHdmeF9kZXYgKndkZXYpOw0KK3ZvaWQgd2Z4X3R4X3VubG9j ayhzdHJ1Y3Qgd2Z4X2RldiAqd2Rldik7DQordm9pZCB3ZnhfdHhfZmx1c2goc3RydWN0IHdmeF9k ZXYgKndkZXYpOw0KK3ZvaWQgd2Z4X3R4X2xvY2tfZmx1c2goc3RydWN0IHdmeF9kZXYgKndkZXYp Ow0KKw0KK3ZvaWQgd2Z4X3R4X3F1ZXVlc19pbml0KHN0cnVjdCB3ZnhfZGV2ICp3ZGV2KTsNCit2 b2lkIHdmeF90eF9xdWV1ZXNfZGVpbml0KHN0cnVjdCB3ZnhfZGV2ICp3ZGV2KTsNCit2b2lkIHdm eF90eF9xdWV1ZXNfbG9jayhzdHJ1Y3Qgd2Z4X2RldiAqd2Rldik7DQordm9pZCB3ZnhfdHhfcXVl dWVzX3VubG9jayhzdHJ1Y3Qgd2Z4X2RldiAqd2Rldik7DQordm9pZCB3ZnhfdHhfcXVldWVzX2Ns ZWFyKHN0cnVjdCB3ZnhfZGV2ICp3ZGV2KTsNCitib29sIHdmeF90eF9xdWV1ZXNfaXNfZW1wdHko c3RydWN0IHdmeF9kZXYgKndkZXYpOw0KK3ZvaWQgd2Z4X3R4X3F1ZXVlc193YWl0X2VtcHR5X3Zp ZihzdHJ1Y3Qgd2Z4X3ZpZiAqd3ZpZik7DQorc3RydWN0IGhpZl9tc2cgKndmeF90eF9xdWV1ZXNf Z2V0KHN0cnVjdCB3ZnhfZGV2ICp3ZGV2KTsNCisNCit2b2lkIHdmeF90eF9xdWV1ZV9wdXQoc3Ry dWN0IHdmeF9kZXYgKndkZXYsIHN0cnVjdCB3ZnhfcXVldWUgKnF1ZXVlLCBzdHJ1Y3Qgc2tfYnVm ZiAqc2tiKTsNCitzaXplX3Qgd2Z4X3R4X3F1ZXVlX2dldF9udW1fcXVldWVkKHN0cnVjdCB3Znhf cXVldWUgKnF1ZXVlLCB1MzIgbGlua19pZF9tYXApOw0KKw0KK3N0cnVjdCBza19idWZmICp3Znhf cGVuZGluZ19nZXQoc3RydWN0IHdmeF9kZXYgKndkZXYsIHUzMiBwYWNrZXRfaWQpOw0KK2ludCB3 ZnhfcGVuZGluZ19yZW1vdmUoc3RydWN0IHdmeF9kZXYgKndkZXYsIHN0cnVjdCBza19idWZmICpz a2IpOw0KK2ludCB3ZnhfcGVuZGluZ19yZXF1ZXVlKHN0cnVjdCB3ZnhfZGV2ICp3ZGV2LCBzdHJ1 Y3Qgc2tfYnVmZiAqc2tiKTsNCit1bnNpZ25lZCBpbnQgd2Z4X3BlbmRpbmdfZ2V0X3BrdF91c19k ZWxheShzdHJ1Y3Qgd2Z4X2RldiAqd2Rldiwgc3RydWN0IHNrX2J1ZmYgKnNrYik7DQordm9pZCB3 ZnhfcGVuZGluZ19kdW1wX29sZF9mcmFtZXMoc3RydWN0IHdmeF9kZXYgKndkZXYsIHVuc2lnbmVk IGludCBsaW1pdF9tcyk7DQorDQorI2VuZGlmIC8qIFdGWF9RVUVVRV9IICovDQpkaWZmIC0tZ2l0 IGEvZHJpdmVycy9zdGFnaW5nL3dmeC9zdGEuYyBiL2RyaXZlcnMvc3RhZ2luZy93Zngvc3RhLmMN CmluZGV4IGZlM2ZmNjUzNmE4Ny4uMWI0NWJlNTMwMDcwIDEwMDY0NA0KLS0tIGEvZHJpdmVycy9z dGFnaW5nL3dmeC9zdGEuYw0KKysrIGIvZHJpdmVycy9zdGFnaW5nL3dmeC9zdGEuYw0KQEAgLTUs MTYgKzUsMTM0IEBADQogICogQ29weXJpZ2h0IChjKSAyMDE3LTIwMTksIFNpbGljb24gTGFib3Jh dG9yaWVzLCBJbmMuDQogICogQ29weXJpZ2h0IChjKSAyMDEwLCBTVC1Fcmljc3Nvbg0KICAqLw0K KyNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+DQogI2luY2x1ZGUgPG5ldC9tYWM4MDIxMS5oPg0K IA0KICNpbmNsdWRlICJzdGEuaCINCiAjaW5jbHVkZSAid2Z4LmgiDQogDQorI2RlZmluZSBUWE9Q X1VOSVQgMzINCisNCitzdGF0aWMgaW50IHdmeF9zZXRfdGltX2ltcGwoc3RydWN0IHdmeF92aWYg Knd2aWYsIGJvb2wgYWlkMF9iaXRfc2V0KQ0KK3sNCisJc3RydWN0IHNrX2J1ZmYgKnNrYjsNCisJ c3RydWN0IGhpZl9pZV9mbGFncyB0YXJnZXRfZnJhbWUgPSB7DQorCQkuYmVhY29uID0gMSwNCisJ fTsNCisJdTE2IHRpbV9vZmZzZXQsIHRpbV9sZW5ndGg7DQorCXU4ICp0aW1fcHRyOw0KKw0KKwlz a2IgPSBpZWVlODAyMTFfYmVhY29uX2dldF90aW0od3ZpZi0+d2Rldi0+aHcsIHd2aWYtPnZpZiwN CisJCQkJICAgICAgICZ0aW1fb2Zmc2V0LCAmdGltX2xlbmd0aCk7DQorCWlmICghc2tiKQ0KKwkJ cmV0dXJuIC1FTk9FTlQ7DQorCXRpbV9wdHIgPSBza2ItPmRhdGEgKyB0aW1fb2Zmc2V0Ow0KKw0K KwlpZiAodGltX29mZnNldCAmJiB0aW1fbGVuZ3RoID49IDYpIHsNCisJCS8qIElnbm9yZSBEVElN IGNvdW50IGZyb20gbWFjODAyMTE6DQorCQkgKiBmaXJtd2FyZSBoYW5kbGVzIERUSU0gaW50ZXJu YWxseS4NCisJCSAqLw0KKwkJdGltX3B0clsyXSA9IDA7DQorDQorCQkvKiBTZXQvcmVzZXQgYWlk MCBiaXQgKi8NCisJCWlmIChhaWQwX2JpdF9zZXQpDQorCQkJdGltX3B0cls0XSB8PSAxOw0KKwkJ ZWxzZQ0KKwkJCXRpbV9wdHJbNF0gJj0gfjE7DQorCX0NCisNCisJaGlmX3VwZGF0ZV9pZSh3dmlm LCAmdGFyZ2V0X2ZyYW1lLCB0aW1fcHRyLCB0aW1fbGVuZ3RoKTsNCisJZGV2X2tmcmVlX3NrYihz a2IpOw0KKw0KKwlyZXR1cm4gMDsNCit9DQorDQorc3RhdGljIHZvaWQgd2Z4X21jYXN0X3N0YXJ0 X3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQ0KK3sNCisJc3RydWN0IHdmeF92aWYgKnd2 aWYgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IHdmeF92aWYsIG1jYXN0X3N0YXJ0X3dvcmsp Ow0KKw0KKwljYW5jZWxfd29ya19zeW5jKCZ3dmlmLT5tY2FzdF9zdG9wX3dvcmspOw0KKwlpZiAo IXd2aWYtPmFpZDBfYml0X3NldCkgew0KKwkJd2Z4X3R4X2xvY2tfZmx1c2god3ZpZi0+d2Rldik7 DQorCQl3Znhfc2V0X3RpbV9pbXBsKHd2aWYsIHRydWUpOw0KKwkJd3ZpZi0+YWlkMF9iaXRfc2V0 ID0gdHJ1ZTsNCisJCW1vZF90aW1lcigmd3ZpZi0+bWNhc3RfdGltZW91dCwgVFVfVE9fSklGRklF UygxMDAwKSk7DQorCQl3ZnhfdHhfdW5sb2NrKHd2aWYtPndkZXYpOw0KKwl9DQorfQ0KKw0KK3N0 YXRpYyB2b2lkIHdmeF9tY2FzdF9zdG9wX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQ0K K3sNCisJc3RydWN0IHdmeF92aWYgKnd2aWYgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IHdm eF92aWYsIG1jYXN0X3N0b3Bfd29yayk7DQorDQorCWlmICh3dmlmLT5haWQwX2JpdF9zZXQpIHsN CisJCWRlbF90aW1lcl9zeW5jKCZ3dmlmLT5tY2FzdF90aW1lb3V0KTsNCisJCXdmeF90eF9sb2Nr X2ZsdXNoKHd2aWYtPndkZXYpOw0KKwkJd3ZpZi0+YWlkMF9iaXRfc2V0ID0gZmFsc2U7DQorCQl3 Znhfc2V0X3RpbV9pbXBsKHd2aWYsIGZhbHNlKTsNCisJCXdmeF90eF91bmxvY2sod3ZpZi0+d2Rl dik7DQorCX0NCit9DQorDQorI2lmIChLRVJORUxfVkVSU0lPTig0LCAxNCwgMCkgPiBMSU5VWF9W RVJTSU9OX0NPREUpDQorc3RhdGljIHZvaWQgd2Z4X21jYXN0X3RpbWVvdXQodW5zaWduZWQgbG9u ZyBhcmcpDQorew0KKwlzdHJ1Y3Qgd2Z4X3ZpZiAqd3ZpZiA9IChzdHJ1Y3Qgd2Z4X3ZpZiAqKWFy ZzsNCisjZWxzZQ0KK3N0YXRpYyB2b2lkIHdmeF9tY2FzdF90aW1lb3V0KHN0cnVjdCB0aW1lcl9s aXN0ICp0KQ0KK3sNCisJc3RydWN0IHdmeF92aWYgKnd2aWYgPSBmcm9tX3RpbWVyKHd2aWYsIHQs IG1jYXN0X3RpbWVvdXQpOw0KKyNlbmRpZg0KKwlkZXZfd2Fybih3dmlmLT53ZGV2LT5kZXYsICJt dWx0aWNhc3QgZGVsaXZlcnkgdGltZW91dFxuIik7DQorCXNwaW5fbG9ja19iaCgmd3ZpZi0+cHNf c3RhdGVfbG9jayk7DQorCXd2aWYtPm1jYXN0X3R4ID0gd3ZpZi0+YWlkMF9iaXRfc2V0ICYmIHd2 aWYtPm1jYXN0X2J1ZmZlcmVkOw0KKwlpZiAod3ZpZi0+bWNhc3RfdHgpDQorCQl3ZnhfYmhfcmVx dWVzdF90eCh3dmlmLT53ZGV2KTsNCisJc3Bpbl91bmxvY2tfYmgoJnd2aWYtPnBzX3N0YXRlX2xv Y2spOw0KK30NCisNCiBpbnQgd2Z4X2FkZF9pbnRlcmZhY2Uoc3RydWN0IGllZWU4MDIxMV9odyAq aHcsIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYpDQogew0KIAlpbnQgaTsNCiAJc3RydWN0IHdm eF9kZXYgKndkZXYgPSBody0+cHJpdjsNCiAJc3RydWN0IHdmeF92aWYgKnd2aWYgPSAoc3RydWN0 IHdmeF92aWYgKikgdmlmLT5kcnZfcHJpdjsNCisJLy8gRklYTUU6IHBhcmFtZXRlcnMgYXJlIHNl dCBieSBrZXJuZWwganVzdGUgYWZ0ZXIgaW50ZXJmYWNlX2FkZC4NCisJLy8gS2VlcCBzdHJ1Y3Qg aGlmX3JlcV9lZGNhX3F1ZXVlX3BhcmFtcyBibGFuaz8NCisJc3RydWN0IGhpZl9yZXFfZWRjYV9x dWV1ZV9wYXJhbXMgZGVmYXVsdF9lZGNhX3BhcmFtc1tdID0gew0KKwkJW0lFRUU4MDIxMV9BQ19W T10gPSB7DQorCQkJLnF1ZXVlX2lkID0gSElGX1FVRVVFX0lEX1ZPSUNFLA0KKwkJCS5haWZzbiA9 IDIsDQorCQkJLmN3X21pbiA9IDMsDQorCQkJLmN3X21heCA9IDcsDQorCQkJLnR4X29wX2xpbWl0 ID0gVFhPUF9VTklUICogNDcsDQorCQl9LA0KKwkJW0lFRUU4MDIxMV9BQ19WSV0gPSB7DQorCQkJ LnF1ZXVlX2lkID0gSElGX1FVRVVFX0lEX1ZJREVPLA0KKwkJCS5haWZzbiA9IDIsDQorCQkJLmN3 X21pbiA9IDcsDQorCQkJLmN3X21heCA9IDE1LA0KKwkJCS50eF9vcF9saW1pdCA9IFRYT1BfVU5J VCAqIDk0LA0KKwkJfSwNCisJCVtJRUVFODAyMTFfQUNfQkVdID0gew0KKwkJCS5xdWV1ZV9pZCA9 IEhJRl9RVUVVRV9JRF9CRVNURUZGT1JULA0KKwkJCS5haWZzbiA9IDMsDQorCQkJLmN3X21pbiA9 IDE1LA0KKwkJCS5jd19tYXggPSAxMDIzLA0KKwkJCS50eF9vcF9saW1pdCA9IFRYT1BfVU5JVCAq IDAsDQorCQl9LA0KKwkJW0lFRUU4MDIxMV9BQ19CS10gPSB7DQorCQkJLnF1ZXVlX2lkID0gSElG X1FVRVVFX0lEX0JBQ0tHUk9VTkQsDQorCQkJLmFpZnNuID0gNywNCisJCQkuY3dfbWluID0gMTUs DQorCQkJLmN3X21heCA9IDEwMjMsDQorCQkJLnR4X29wX2xpbWl0ID0gVFhPUF9VTklUICogMCwN CisJCX0sDQorCX07DQorDQorCWlmICh3ZnhfYXBpX29sZGVyX3RoYW4od2RldiwgMiwgMCkpIHsN CisJCWRlZmF1bHRfZWRjYV9wYXJhbXNbSUVFRTgwMjExX0FDX0JFXS5xdWV1ZV9pZCA9IEhJRl9R VUVVRV9JRF9CQUNLR1JPVU5EOw0KKwkJZGVmYXVsdF9lZGNhX3BhcmFtc1tJRUVFODAyMTFfQUNf QktdLnF1ZXVlX2lkID0gSElGX1FVRVVFX0lEX0JFU1RFRkZPUlQ7DQorCX0NCiANCiAJZm9yIChp ID0gMDsgaSA8IEFSUkFZX1NJWkUod2Rldi0+dmlmKTsgaSsrKSB7DQogCQlpZiAoIXdkZXYtPnZp ZltpXSkgew0KQEAgLTI4LDEyICsxNDYsMzMgQEAgaW50IHdmeF9hZGRfaW50ZXJmYWNlKHN0cnVj dCBpZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmKQ0KIAl3dmlmLT52 aWYgPSB2aWY7DQogCXd2aWYtPndkZXYgPSB3ZGV2Ow0KIA0KKwlJTklUX1dPUksoJnd2aWYtPmxp bmtfaWRfd29yaywgd2Z4X2xpbmtfaWRfd29yayk7DQorCUlOSVRfREVMQVlFRF9XT1JLKCZ3dmlm LT5saW5rX2lkX2djX3dvcmssIHdmeF9saW5rX2lkX2djX3dvcmspOw0KKw0KKwlzcGluX2xvY2tf aW5pdCgmd3ZpZi0+cHNfc3RhdGVfbG9jayk7DQorDQorCUlOSVRfV09SSygmd3ZpZi0+bWNhc3Rf c3RhcnRfd29yaywgd2Z4X21jYXN0X3N0YXJ0X3dvcmspOw0KKwlJTklUX1dPUksoJnd2aWYtPm1j YXN0X3N0b3Bfd29yaywgd2Z4X21jYXN0X3N0b3Bfd29yayk7DQorI2lmIChLRVJORUxfVkVSU0lP Tig0LCAxNCwgMCkgPiBMSU5VWF9WRVJTSU9OX0NPREUpDQorCXNldHVwX3RpbWVyKCZ3dmlmLT5t Y2FzdF90aW1lb3V0LCB3ZnhfbWNhc3RfdGltZW91dCwgKHVuc2lnbmVkIGxvbmcpIHd2aWYpOw0K KyNlbHNlDQorCXRpbWVyX3NldHVwKCZ3dmlmLT5tY2FzdF90aW1lb3V0LCB3ZnhfbWNhc3RfdGlt ZW91dCwgMCk7DQorI2VuZGlmDQorCUJVR19PTihBUlJBWV9TSVpFKGRlZmF1bHRfZWRjYV9wYXJh bXMpICE9IEFSUkFZX1NJWkUod3ZpZi0+ZWRjYS5wYXJhbXMpKTsNCisJZm9yIChpID0gMDsgaSA8 IElFRUU4MDIxMV9OVU1fQUNTOyBpKyspDQorCQltZW1jcHkoJnd2aWYtPmVkY2EucGFyYW1zW2ld LCAmZGVmYXVsdF9lZGNhX3BhcmFtc1tpXSwgc2l6ZW9mKGRlZmF1bHRfZWRjYV9wYXJhbXNbaV0p KTsNCisJdHhfcG9saWN5X2luaXQod3ZpZik7DQogCXJldHVybiAwOw0KIH0NCiANCiB2b2lkIHdm eF9yZW1vdmVfaW50ZXJmYWNlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LA0KIAkJCSAgc3RydWN0 IGllZWU4MDIxMV92aWYgKnZpZikNCiB7DQorCXN0cnVjdCB3ZnhfdmlmICp3dmlmID0gKHN0cnVj dCB3ZnhfdmlmICopIHZpZi0+ZHJ2X3ByaXY7DQorDQorCXdmeF90eF9xdWV1ZXNfd2FpdF9lbXB0 eV92aWYod3ZpZik7DQorCWNhbmNlbF9kZWxheWVkX3dvcmtfc3luYygmd3ZpZi0+bGlua19pZF9n Y193b3JrKTsNCisJZGVsX3RpbWVyX3N5bmMoJnd2aWYtPm1jYXN0X3RpbWVvdXQpOw0KIH0NCiAN CiBpbnQgd2Z4X3N0YXJ0KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KQ0KQEAgLTQzLDQgKzE4Miwx MCBAQCBpbnQgd2Z4X3N0YXJ0KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KQ0KIA0KIHZvaWQgd2Z4 X3N0b3Aoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpDQogew0KKwlzdHJ1Y3Qgd2Z4X2RldiAqd2Rl diA9IGh3LT5wcml2Ow0KKw0KKwl3ZnhfdHhfbG9ja19mbHVzaCh3ZGV2KTsNCisJd2Z4X3R4X3F1 ZXVlc19jbGVhcih3ZGV2KTsNCisJd2Z4X3R4X3VubG9jayh3ZGV2KTsNCisJV0FSTihhdG9taWNf cmVhZCgmd2Rldi0+dHhfbG9jayksICJ0eF9sb2NrIGlzIGxvY2tlZCIpOw0KIH0NCmRpZmYgLS1n aXQgYS9kcml2ZXJzL3N0YWdpbmcvd2Z4L3N0YS5oIGIvZHJpdmVycy9zdGFnaW5nL3dmeC9zdGEu aA0KaW5kZXggZjE3YjRkMTUxMWQ3Li5mMzZkOTRmOTA3YzcgMTAwNjQ0DQotLS0gYS9kcml2ZXJz L3N0YWdpbmcvd2Z4L3N0YS5oDQorKysgYi9kcml2ZXJzL3N0YWdpbmcvd2Z4L3N0YS5oDQpAQCAt MTAsNiArMTAsMTQgQEANCiANCiAjaW5jbHVkZSA8bmV0L21hYzgwMjExLmg+DQogDQorI2luY2x1 ZGUgImhpZl9hcGlfY21kLmgiDQorDQorc3RydWN0IHdmeF9lZGNhX3BhcmFtcyB7DQorCS8qIE5P VEU6IGluZGV4IGlzIGEgbGludXggcXVldWUgaWQuICovDQorCXN0cnVjdCBoaWZfcmVxX2VkY2Ff cXVldWVfcGFyYW1zIHBhcmFtc1tJRUVFODAyMTFfTlVNX0FDU107DQorCWJvb2wgdWFwc2RfZW5h YmxlW0lFRUU4MDIxMV9OVU1fQUNTXTsNCit9Ow0KKw0KIHN0cnVjdCB3Znhfc3RhX3ByaXYgew0K IAlpbnQgbGlua19pZDsNCiAJaW50IHZpZl9pZDsNCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdp bmcvd2Z4L3RyYWNlcy5oIGIvZHJpdmVycy9zdGFnaW5nL3dmeC90cmFjZXMuaA0KaW5kZXggZmQ3 NWM0YzdlOWM3Li5kM2UyNzA1MGY4NGEgMTAwNjQ0DQotLS0gYS9kcml2ZXJzL3N0YWdpbmcvd2Z4 L3RyYWNlcy5oDQorKysgYi9kcml2ZXJzL3N0YWdpbmcvd2Z4L3RyYWNlcy5oDQpAQCAtMTMsNiAr MTMsNyBAQA0KIA0KICNpbmNsdWRlIDxsaW51eC90cmFjZXBvaW50Lmg+DQogI2luY2x1ZGUgPGxp bnV4L3ZlcnNpb24uaD4NCisjaW5jbHVkZSA8bmV0L21hYzgwMjExLmg+DQogDQogI2luY2x1ZGUg ImJ1cy5oIg0KICNpbmNsdWRlICJoaWZfYXBpX2NtZC5oIg0KQEAgLTM1NCw2ICszNTUsNzkgQEAg VFJBQ0VfRVZFTlQoYmhfc3RhdHMsDQogKTsNCiAjZGVmaW5lIF90cmFjZV9iaF9zdGF0cyhpbmQs IHJlcSwgY25mLCBidXN5LCByZWxlYXNlKSB0cmFjZV9iaF9zdGF0cyhpbmQsIHJlcSwgY25mLCBi dXN5LCByZWxlYXNlKQ0KIA0KK1RSQUNFX0VWRU5UKHR4X3N0YXRzLA0KKwlUUF9QUk9UTyhzdHJ1 Y3QgaGlmX2NuZl90eCAqdHhfY25mLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgZGVsYXkpLA0K KwlUUF9BUkdTKHR4X2NuZiwgc2tiLCBkZWxheSksDQorCVRQX1NUUlVDVF9fZW50cnkoDQorCQlf X2ZpZWxkKGludCwgcGt0X2lkKQ0KKwkJX19maWVsZChpbnQsIGRlbGF5X21lZGlhKQ0KKwkJX19m aWVsZChpbnQsIGRlbGF5X3F1ZXVlKQ0KKwkJX19maWVsZChpbnQsIGRlbGF5X2Z3KQ0KKwkJX19m aWVsZChpbnQsIGFja19mYWlsdXJlcykNCisJCV9fZmllbGQoaW50LCBmbGFncykNCisJCV9fYXJy YXkoaW50LCByYXRlLCA0KQ0KKwkJX19hcnJheShpbnQsIHR4X2NvdW50LCA0KQ0KKwkpLA0KKwlU UF9mYXN0X2Fzc2lnbigNCisJCS8vIEtlZXAgc3luYyB3aXRoIHdmeF9yYXRlcyBkZWZpbml0aW9u IGluIG1haW4uYw0KKwkJc3RhdGljIGNvbnN0IGludCBod19yYXRlW10gPSB7IDAsIDEsIDIsIDMs IDYsIDcsIDgsIDksIDEwLCAxMSwgMTIsIDEzIH07DQorCQlzdHJ1Y3QgaWVlZTgwMjExX3R4X2lu Zm8gKnR4X2luZm8gPSBJRUVFODAyMTFfU0tCX0NCKHNrYik7DQorCQlzdHJ1Y3QgaWVlZTgwMjEx X3R4X3JhdGUgKnJhdGVzID0gdHhfaW5mby0+ZHJpdmVyX3JhdGVzOw0KKwkJaW50IGk7DQorDQor CQlfX2VudHJ5LT5wa3RfaWQgPSB0eF9jbmYtPnBhY2tldF9pZDsNCisJCV9fZW50cnktPmRlbGF5 X21lZGlhID0gdHhfY25mLT5tZWRpYV9kZWxheTsNCisJCV9fZW50cnktPmRlbGF5X3F1ZXVlID0g dHhfY25mLT50eF9xdWV1ZV9kZWxheTsNCisJCV9fZW50cnktPmRlbGF5X2Z3ID0gZGVsYXk7DQor CQlfX2VudHJ5LT5hY2tfZmFpbHVyZXMgPSB0eF9jbmYtPmFja19mYWlsdXJlczsNCisJCWlmICgh dHhfY25mLT5zdGF0dXMgfHwgX19lbnRyeS0+YWNrX2ZhaWx1cmVzKQ0KKwkJCV9fZW50cnktPmFj a19mYWlsdXJlcyArPSAxOw0KKw0KKwkJZm9yIChpID0gMDsgaSA8IElFRUU4MDIxMV9OVU1fQUNT OyBpKyspIHsNCisJCQlpZiAocmF0ZXNbMF0uZmxhZ3MgJiBJRUVFODAyMTFfVFhfUkNfTUNTKQ0K KwkJCQlfX2VudHJ5LT5yYXRlW2ldID0gcmF0ZXNbaV0uaWR4Ow0KKwkJCWVsc2UNCisJCQkJX19l bnRyeS0+cmF0ZVtpXSA9IGh3X3JhdGVbcmF0ZXNbaV0uaWR4XTsNCisJCQlfX2VudHJ5LT50eF9j b3VudFtpXSA9IHJhdGVzW2ldLmNvdW50Ow0KKwkJfQ0KKwkJX19lbnRyeS0+ZmxhZ3MgPSAwOw0K KwkJaWYgKHJhdGVzWzBdLmZsYWdzICYgSUVFRTgwMjExX1RYX1JDX01DUykNCisJCQlfX2VudHJ5 LT5mbGFncyB8PSAweDAxOw0KKwkJaWYgKHJhdGVzWzBdLmZsYWdzICYgSUVFRTgwMjExX1RYX1JD X1NIT1JUX0dJKQ0KKwkJCV9fZW50cnktPmZsYWdzIHw9IDB4MDI7DQorCQlpZiAocmF0ZXNbMF0u ZmxhZ3MgJiBJRUVFODAyMTFfVFhfUkNfR1JFRU5fRklFTEQpDQorCQkJX19lbnRyeS0+ZmxhZ3Mg fD0gMHgwNDsNCisJCWlmIChyYXRlc1swXS5mbGFncyAmIElFRUU4MDIxMV9UWF9SQ19VU0VfUlRT X0NUUykNCisJCQlfX2VudHJ5LT5mbGFncyB8PSAweDA4Ow0KKwkJaWYgKHR4X2luZm8tPmZsYWdz ICYgSUVFRTgwMjExX1RYX0NUTF9TRU5EX0FGVEVSX0RUSU0pDQorCQkJX19lbnRyeS0+ZmxhZ3Mg fD0gMHgxMDsNCisJCWlmICh0eF9jbmYtPnN0YXR1cykNCisJCQlfX2VudHJ5LT5mbGFncyB8PSAw eDIwOw0KKwkJaWYgKHR4X2NuZi0+c3RhdHVzID09IEhJRl9SRVFVRVVFKQ0KKwkJCV9fZW50cnkt PmZsYWdzIHw9IDB4NDA7DQorCSksDQorCVRQX3ByaW50aygicGFja2V0IElEOiAlMDh4LCByYXRl IHBvbGljeTogJXMgJWR8JWQgJWR8JWQgJWR8JWQgJWR8JWQgLT4gJWQgYXR0ZW1wdCwgRGVsYXlz IG1lZGlhL3F1ZXVlL3RvdGFsOiAlNGR1cy8lNGR1cy8lNGR1cyIsDQorCQlfX2VudHJ5LT5wa3Rf aWQsDQorCQlfX3ByaW50X2ZsYWdzKF9fZW50cnktPmZsYWdzLCBOVUxMLA0KKwkJCXsgMHgwMSwg Ik0iIH0sIHsgMHgwMiwgIlMiIH0sIHsgMHgwNCwgIkciIH0sDQorCQkJeyAweDA4LCAiUiIgfSwg eyAweDEwLCAiRCIgfSwgeyAweDIwLCAiRiIgfSwNCisJCQl7IDB4NDAsICJRIiB9KSwNCisJCV9f ZW50cnktPnJhdGVbMF0sDQorCQlfX2VudHJ5LT50eF9jb3VudFswXSwNCisJCV9fZW50cnktPnJh dGVbMV0sDQorCQlfX2VudHJ5LT50eF9jb3VudFsxXSwNCisJCV9fZW50cnktPnJhdGVbMl0sDQor CQlfX2VudHJ5LT50eF9jb3VudFsyXSwNCisJCV9fZW50cnktPnJhdGVbM10sDQorCQlfX2VudHJ5 LT50eF9jb3VudFszXSwNCisJCV9fZW50cnktPmFja19mYWlsdXJlcywNCisJCV9fZW50cnktPmRl bGF5X21lZGlhLA0KKwkJX19lbnRyeS0+ZGVsYXlfcXVldWUsDQorCQlfX2VudHJ5LT5kZWxheV9m dw0KKwkpDQorKTsNCisjZGVmaW5lIF90cmFjZV90eF9zdGF0cyh0eF9jbmYsIHNrYiwgZGVsYXkp IHRyYWNlX3R4X3N0YXRzKHR4X2NuZiwgc2tiLCBkZWxheSkNCisNCiAjZW5kaWYNCiANCiAvKiBU aGlzIHBhcnQgbXVzdCBiZSBvdXRzaWRlIHByb3RlY3Rpb24gKi8NCmRpZmYgLS1naXQgYS9kcml2 ZXJzL3N0YWdpbmcvd2Z4L3dmeC5oIGIvZHJpdmVycy9zdGFnaW5nL3dmeC93ZnguaA0KaW5kZXgg NDgwNzFlMWM5ODljLi4zMjJlNDZlMzQzZDUgMTAwNjQ0DQotLS0gYS9kcml2ZXJzL3N0YWdpbmcv d2Z4L3dmeC5oDQorKysgYi9kcml2ZXJzL3N0YWdpbmcvd2Z4L3dmeC5oDQpAQCAtMTUsMTEgKzE1 LDI5IEBADQogI2luY2x1ZGUgPG5ldC9tYWM4MDIxMS5oPg0KIA0KICNpbmNsdWRlICJiaC5oIg0K KyNpbmNsdWRlICJkYXRhX3R4LmgiDQogI2luY2x1ZGUgIm1haW4uaCINCisjaW5jbHVkZSAicXVl dWUuaCINCiAjaW5jbHVkZSAic2VjdXJlX2xpbmsuaCINCisjaW5jbHVkZSAic3RhLmgiDQogI2lu Y2x1ZGUgImhpZl90eC5oIg0KICNpbmNsdWRlICJoaWZfYXBpX2dlbmVyYWwuaCINCiANCisjaWYg KEtFUk5FTF9WRVJTSU9OKDQsIDcsIDApID4gTElOVVhfVkVSU0lPTl9DT0RFKQ0KKyNkZWZpbmUg bmw4MDIxMV9iYW5kIGllZWU4MDIxMV9iYW5kDQorI2RlZmluZSBOTDgwMjExX0JBTkRfMkdIWiBJ RUVFODAyMTFfQkFORF8yR0haDQorI2RlZmluZSBOVU1fTkw4MDIxMV9CQU5EUyBJRUVFODAyMTFf TlVNX0JBTkRTDQorI2VuZGlmDQorDQorI2lmIChLRVJORUxfVkVSU0lPTig0LCAxNSwgMCkgPiBM SU5VWF9WRVJTSU9OX0NPREUpDQorc3RhdGljIGlubGluZSB1OCBpZWVlODAyMTFfZ2V0X3RpZChz dHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyKQ0KK3sNCisJdTggKnFjID0gaWVlZTgwMjExX2dldF9x b3NfY3RsKGhkcik7DQorDQorCXJldHVybiBxY1swXSAmIElFRUU4MDIxMV9RT1NfQ1RMX1RJRF9N QVNLOw0KK30NCisjZW5kaWYNCisNCiAjaWYgKEtFUk5FTF9WRVJTSU9OKDQsIDE3LCAwKSA+IExJ TlVYX1ZFUlNJT05fQ09ERSkNCiAjZGVmaW5lIHN0cnVjdF9zaXplKHAsIG1lbWJlciwgbikgXA0K IAkobiAqIHNpemVvZigqKHApLT5tZW1iZXIpICsgX19tdXN0X2JlX2FycmF5KChwKS0+bWVtYmVy KSArIHNpemVvZigqKHApKSkNCkBAIC00NCw2ICs2MiwxMCBAQCBzdHJ1Y3Qgd2Z4X2RldiB7DQog CWludAkJCWNoaXBfZnJvemVuOw0KIA0KIAlzdHJ1Y3Qgd2Z4X2hpZl9jbWQJaGlmX2NtZDsNCisJ c3RydWN0IHdmeF9xdWV1ZQl0eF9xdWV1ZVs0XTsNCisJc3RydWN0IHdmeF9xdWV1ZV9zdGF0cwl0 eF9xdWV1ZV9zdGF0czsNCisJaW50CQkJdHhfYnVyc3RfaWR4Ow0KKwlhdG9taWNfdAkJdHhfbG9j azsNCiANCiAJc3RydWN0IGhpZl9yeF9zdGF0cwlyeF9zdGF0czsNCiAJc3RydWN0IG11dGV4CQly eF9zdGF0c19sb2NrOw0KQEAgLTUzLDYgKzc1LDI4IEBAIHN0cnVjdCB3ZnhfdmlmIHsNCiAJc3Ry dWN0IHdmeF9kZXYJCSp3ZGV2Ow0KIAlzdHJ1Y3QgaWVlZTgwMjExX3ZpZgkqdmlmOw0KIAlpbnQJ CQlpZDsNCisNCisNCisJdTMyCQkJbGlua19pZF9tYXA7DQorCXN0cnVjdCB3ZnhfbGlua19lbnRy eQlsaW5rX2lkX2RiW1dGWF9NQVhfU1RBX0lOX0FQX01PREVdOw0KKwlzdHJ1Y3QgZGVsYXllZF93 b3JrCWxpbmtfaWRfZ2Nfd29yazsNCisJc3RydWN0IHdvcmtfc3RydWN0CWxpbmtfaWRfd29yazsN CisNCisJYm9vbAkJCWFpZDBfYml0X3NldDsNCisJYm9vbAkJCW1jYXN0X3R4Ow0KKwlib29sCQkJ bWNhc3RfYnVmZmVyZWQ7DQorCXN0cnVjdCB0aW1lcl9saXN0CW1jYXN0X3RpbWVvdXQ7DQorCXN0 cnVjdCB3b3JrX3N0cnVjdAltY2FzdF9zdGFydF93b3JrOw0KKwlzdHJ1Y3Qgd29ya19zdHJ1Y3QJ bWNhc3Rfc3RvcF93b3JrOw0KKw0KKw0KKwlzdHJ1Y3QgdHhfcG9saWN5X2NhY2hlCXR4X3BvbGlj eV9jYWNoZTsNCisJc3RydWN0IHdvcmtfc3RydWN0CXR4X3BvbGljeV91cGxvYWRfd29yazsNCisJ dTMyCQkJc3RhX2FzbGVlcF9tYXNrOw0KKwl1MzIJCQlwc3BvbGxfbWFzazsNCisJc3BpbmxvY2tf dAkJcHNfc3RhdGVfbG9jazsNCisNCisJc3RydWN0IHdmeF9lZGNhX3BhcmFtcwllZGNhOw0KIH07 DQogDQogc3RhdGljIGlubGluZSBzdHJ1Y3Qgd2Z4X3ZpZiAqd2Rldl90b193dmlmKHN0cnVjdCB3 ZnhfZGV2ICp3ZGV2LCBpbnQgdmlmX2lkKQ0KQEAgLTY4LDQgKzExMiwzMyBAQCBzdGF0aWMgaW5s aW5lIHN0cnVjdCB3ZnhfdmlmICp3ZGV2X3RvX3d2aWYoc3RydWN0IHdmeF9kZXYgKndkZXYsIGlu dCB2aWZfaWQpDQogCXJldHVybiAoc3RydWN0IHdmeF92aWYgKikgd2Rldi0+dmlmW3ZpZl9pZF0t PmRydl9wcml2Ow0KIH0NCiANCitzdGF0aWMgaW5saW5lIHN0cnVjdCB3ZnhfdmlmICp3dmlmX2l0 ZXJhdGUoc3RydWN0IHdmeF9kZXYgKndkZXYsIHN0cnVjdCB3ZnhfdmlmICpjdXIpDQorew0KKwlp bnQgaTsNCisJaW50IG1hcmsgPSAwOw0KKwlzdHJ1Y3Qgd2Z4X3ZpZiAqdG1wOw0KKw0KKwlpZiAo IWN1cikNCisJCW1hcmsgPSAxOw0KKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRSh3ZGV2LT52 aWYpOyBpKyspIHsNCisJCXRtcCA9IHdkZXZfdG9fd3ZpZih3ZGV2LCBpKTsNCisJCWlmIChtYXJr ICYmIHRtcCkNCisJCQlyZXR1cm4gdG1wOw0KKwkJaWYgKHRtcCA9PSBjdXIpDQorCQkJbWFyayA9 IDE7DQorCX0NCisJcmV0dXJuIE5VTEw7DQorfQ0KKw0KK3N0YXRpYyBpbmxpbmUgaW50IG1lbXpj bXAodm9pZCAqc3JjLCB1bnNpZ25lZCBpbnQgc2l6ZSkNCit7DQorCXVpbnQ4X3QgKmJ1ZiA9IHNy YzsNCisNCisJaWYgKCFzaXplKQ0KKwkJcmV0dXJuIDA7DQorCWlmICgqYnVmKQ0KKwkJcmV0dXJu IDE7DQorCXJldHVybiBtZW1jbXAoYnVmLCBidWYgKyAxLCBzaXplIC0gMSk7DQorfQ0KKw0KICNl bmRpZiAvKiBXRlhfSCAqLw0KLS0gDQoyLjIwLjENCg==