Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 34319C6FD1D for ; Mon, 20 Mar 2023 08:18:29 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230310AbjCTIS2 (ORCPT ); Mon, 20 Mar 2023 04:18:28 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:38160 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229575AbjCTIS0 (ORCPT ); Mon, 20 Mar 2023 04:18:26 -0400 Received: from EUR05-VI1-obe.outbound.protection.outlook.com (mail-vi1eur05on2041.outbound.protection.outlook.com [40.107.21.41]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 7BF5C49E3 for ; Mon, 20 Mar 2023 01:18:21 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=Fv2vrMwolRqZjKzd7xQ0cz1zYWkgyneGQiLKROxHTYGIf36DqOXsjlOuQHSZBPypEL12cIYOEXXuWyvmroYsP1hs+u940yh9yxLwvuq6OcOSbuKFT5W9Y8Mq9ySAeFLbkf4wptC8uzCGBTxomsJ0MlF4lqP+WlZy9BuRkPguA82nOwug7yjaedEnezjoRXHPJUNgb115/NlqxsI+s+v+sHn9aqDHDLmtdqJmYc8DBNejPDnZ/ZA4qDonUk+wyQipmJwIBITwMSabBZh/l/iJKLsNyH8ULBOLuv6NcfA95bR4McegXTPakdF0Z+rBH+e7ydH6DJ/TG/Xg2h0XMY3riA== 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-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=t6i0x4BqzUxHzZF7mLQhL/E4yHRDRxYOod2hWPCUlYw=; b=aEVw9XGTAdULdrEGKroOa6Mtb8mZKk3ETvFNceVzJc7AA9nQe9LUCByd8SX9+GgNaevwyIR/c5nSSs0mJmacLDVgUwa1kmCmHt7ftNCpKtC3/MVIrNknut8tV/JPKLcY2x8s64Y0Ezsqp3PohT+IYuWfP0ZDLbk5DJ6ZyKrOJpebNx3b5tlub3iHJz5IpC0xjJfKCJOj9pe5Ht3R4jKgC0HYbbHz/w3r6AQ4bA8rLRtc2wfYwXwW4/JBsU7Ab8Q2jnZxA2blTUXQGvmOBxGpksXdPJVSaeZHKMLuZqEGiIaPTevuCaWOUVlZ/7/CZf4pTohGrnD5mxVdY/9efwHClA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=nxp.com; dmarc=pass action=none header.from=nxp.com; dkim=pass header.d=nxp.com; arc=none 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=t6i0x4BqzUxHzZF7mLQhL/E4yHRDRxYOod2hWPCUlYw=; b=WlE8XH/RuzIHAmS7W/ZM/dvX0nyJ/I9O2TBnRXGON+yhoTvL1qXiWMCj8DAZTcAOW8oUMLlTGes/ax5Nm/hjCfKbPv/2VZ+fas91A3hTGddYiRp/YS/9jHymYeLALLCQ6wdLYJv7d2332/bxnQ4Tdc1YQoMxPgBTk4c5NQ18+EE= Received: from AS8PR04MB8898.eurprd04.prod.outlook.com (2603:10a6:20b:42d::15) by AM9PR04MB7489.eurprd04.prod.outlook.com (2603:10a6:20b:281::15) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6178.37; Mon, 20 Mar 2023 08:18:17 +0000 Received: from AS8PR04MB8898.eurprd04.prod.outlook.com ([fe80::e463:bd8b:f1cf:9a98]) by AS8PR04MB8898.eurprd04.prod.outlook.com ([fe80::e463:bd8b:f1cf:9a98%8]) with mapi id 15.20.6178.037; Mon, 20 Mar 2023 08:18:17 +0000 From: Iulia Tanasescu To: Luiz Augusto von Dentz CC: "linux-bluetooth@vger.kernel.org" Subject: RE: [EXT] Re: [PATCH BlueZ 2/2] shared: Add initial BASS code Thread-Topic: [EXT] Re: [PATCH BlueZ 2/2] shared: Add initial BASS code Thread-Index: AQHZTFM4y/stgkaSQUi3DjMsIFxPpa7mgf+AgBzrbnA= Date: Mon, 20 Mar 2023 08:18:17 +0000 Message-ID: References: <20230301153322.12555-1-iulia.tanasescu@nxp.com> <20230301153322.12555-3-iulia.tanasescu@nxp.com> In-Reply-To: Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: authentication-results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nxp.com; x-ms-publictraffictype: Email x-ms-traffictypediagnostic: AS8PR04MB8898:EE_|AM9PR04MB7489:EE_ x-ms-office365-filtering-correlation-id: 3c2c21dc-0055-4bd7-5025-08db291ba8f9 x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: IPF2aESWm2DGGm5dw54wiZKMfdl6LkHyKsxLlouBoGgqipOWUR0UvgmjBENy9Xw01Rb14buGyJTivQw9Hw4kKDmBPTHOOvl8PoofT+M0EnaUIPYbFwVX0TSI/PzY4/wFLKb1tK4nomOfqWdJRRXmOHV0Dr4eTfse5awfF+IOo9/bJPAtpDXBPihUEqDP+xEvVIx0UEHnRZmeAOJLZTPwrLAufBeh9tGPloEKn/QbqO4u4A32sEg6R09EpzbZtZwpzoamGPaDfFTPDFs71m8SEyeRJMW8JtDZHfPx1Lb3huxSs0T/j97ScRanEEgNKRktuXCrQzzmMTa/FNCTwrC8SffLnpXQPrJZUDVJjYFG/Lz9KdpJLvWTgBP+QbTEndZJIeu5LOxo3dHhSXDXRumz/+jo9cIqYXjnl4JhSTvjRoGC3OeWQlbcbEvIHJ7AFF7jn7UrO8gbaL1Mc2oFJShU+3R+BPg7yTh5/1djXR24MV+jCcm74D/De7g8ia+OVUwc0D1ywQhDRG8d+1ShRvnGwtoK1m2pdRdiks+2S0I6ByrD2Kym6M5F1Fj4i3LuE7qEzIQEC9uBnvWfh+qnZJZdfDDCxwDTkNllQ2eNtIIm2esgPQ1nJFcbfQl0oANbus0MNowFNadts9anNotIUPfXfSm47YMB6tOhBZAB4/yfFlrodFHGorY0GF6ccEfENa0Z x-forefront-antispam-report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:AS8PR04MB8898.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230025)(4636009)(39860400002)(366004)(376002)(136003)(396003)(346002)(451199018)(7696005)(71200400001)(9686003)(966005)(4326008)(83380400001)(45080400002)(478600001)(316002)(66446008)(66556008)(66476007)(66946007)(76116006)(64756008)(6916009)(8676002)(53546011)(26005)(186003)(6506007)(55236004)(30864003)(8936002)(44832011)(52536014)(41300700001)(5660300002)(122000001)(38100700002)(2906002)(55016003)(86362001)(38070700005)(33656002)(559001)(579004);DIR:OUT;SFP:1101; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?utf-8?B?OVI0OHdzK3lUK1BrNjRzTjlKeU15V0g2SWlQaVZuRnMwenF5OE5mK0JoVGlz?= =?utf-8?B?WXVhZng3U3pnTWpMRjlWazNFQk9TYmRyQUNXaGF6WE1JSk1DT1E1bHh3RlJ4?= =?utf-8?B?RHBKNTFpU0ZpNUpwWndHQjVyekhCN0Y0ZFkvdmJERkhnbHY5WWdsT2U1M3hS?= =?utf-8?B?RjZ3QVpQTU5WOHdDcm1BRmhxcUJvbDdNQ1lIR3NCb016NTNGMlFhS0NIcjRN?= =?utf-8?B?U3RsNWtMMUNCbzdlUDZGOUh1d0M4enhNbkdzTEx1VjlGY3RRVDRNd3V2VlNV?= =?utf-8?B?aHROcDdwM3JKOHZjOFBoZEhPMzIzOWNOSTIvdjRrejE3RUFza1VWNGszcDk4?= =?utf-8?B?MXhDTWZMM0JvZUkvYTZabFprMFI0ZTZPOGc0REd6UkFUZE5GQ1lBS1E3Slla?= =?utf-8?B?dy80T3V6cGc2RmZtUXFmU3N0ZDY3NkQ5aE1NUTZjYzFDbTg1bXJJcVgvZU9l?= =?utf-8?B?UXJSQ3h1bWpVR2pDOVhqbzBXNmxNVlpodktrc2h2MVYzUmFvK25JS2k3NGlI?= =?utf-8?B?YWh0UmVXOURFaVNOL3BaN2FzbDNmc0ZLSE0yZ1VVQ0FVL1N3TkxEMVhZVUlQ?= =?utf-8?B?Q2p2QXI3aW9oL040QXpMZ3VLSjRxeVREUk4vd0pnazJFMnBIRlhsMkJHZnRT?= =?utf-8?B?cWRZYnJXR1FVdTFpSiswcS9HVy9hVjVldzlYTnliM2ljNHVEamduN21LL2p5?= =?utf-8?B?Yk0veXAxVlFQV2xRNHZOWi95U3M2U1JGKzd3TXpER2o3eVNKMTdlbkw2VDUw?= =?utf-8?B?NnZlWVdZNHFacUMwcFhKcmtuTE03L2FjVTBiaU5GakxiZy9FaVluZkhCWHJ4?= =?utf-8?B?Q2NkZCs2c0w5bXFnWlJvZitKTEdya2pjVXVVVDBtdXh3S2x2ekxOUGtoVFl6?= =?utf-8?B?emJ2RTBhWGRpQmpGRG9UK0Y3SmZMcEltaUp6Z0dYWCtCZ1JEUElGclJLREs2?= =?utf-8?B?OTVyV3QvbHQydk96czBnUzcwZG91U1hsdmlmaHRlTTArYUdmd2x4cGlkZ3Bx?= =?utf-8?B?YWtDY21RZjdic0ltalNnSWNXUDF0Ym95UnJabE9iYnV3aTNDYk9NanFVaEVW?= =?utf-8?B?c1NHOHVwT25aMUxaUnB5aDQ3S1NFU1ZIT3lOTldXOEhJOHQ2cDEwQkFvTlZZ?= =?utf-8?B?Y2lxMVpmWmt4WWNPYmoxVW1qZWhxWm11NzVBTGFDRHg1MVkwNFprYm8zSktR?= =?utf-8?B?UnlxWmRZQlZ4UHdFNTVobVVmbDNuS1FzbExqRGlpdmo3N0U0TW9GWkN6MzRY?= =?utf-8?B?c0djY2xBbmE5M0lsL0FwYWJ3S3lBeDhFTEdvSE9Lb1A0T2MvWUxVUGlzenln?= =?utf-8?B?Q1UxQ1dJd3BhTmFwYkZFVUJpVTlMZVFLd2Y2VEQrbWNFYzhRekZNSjUxMFI3?= =?utf-8?B?RGZwTnR4d0ZoV1pzVktINFdIUy9SZTFvUGwrRjdTb1lhbHJNQ05TaXQ5WXVV?= =?utf-8?B?ODh4eHpBWnZXS0p6SWZTZ3VENS8xc01vSGVYNm9paFcrMkMyUDYvS29nejJr?= =?utf-8?B?ZTBMUW5PM1BveEhjTVN2cXhQMFZBcDFtQUpnb05TalpsVVJYWG5hNS8yaGVG?= =?utf-8?B?aUZURWRGeUVrTzBHc0RQUFNMVStnWlFrU3Q5M3hWV1ZvQ09hSjBRQWkyRS9U?= =?utf-8?B?Z3VjNmJoZzJ3UWltU0I3WDBOc0IrYkVzajdBUDQxTllYU28vU3VxRHNiQjJU?= =?utf-8?B?b1pDTEFsNTYvTWhKOEJQSGFzNTc2OUJBaUNrTEl2YW9kcEd3SnQwMXhhdmt0?= =?utf-8?B?Y3pzZ3FVbXo3L2tWR2ZJUURRNXM1TEVwWjhBVUtPM3FJK0lvN2ZrTklEeWQ3?= =?utf-8?B?SGE3ODEvVW5McWlRYWJQSjd5UnVtWnEvOXVNbEMwa0RrZFhWQWR2L3FUaTdM?= =?utf-8?B?dFZXMWV0QzZWblliWmJUUm9sRW13ZU9RKzFiYm00K0dWYnAweVd4Z2g5T2xw?= =?utf-8?B?YmVjcmpSMFBIaE1adWlUQkR6TUR1bW1qUDZ4WGlDOC9TSEw4QWtmTU5WQTJ5?= =?utf-8?B?eVFZVy9zNWlCOG13SGc3dzBWeitRdlJjMUJWcEVGOTIxQ2dzL2RlaVQvZkxT?= =?utf-8?B?UjFCR0lLNlpHMWt4ZkU4MTNRMzNHWk9hYWxjQkR4VDVCRUdyWisybmtCVzE5?= =?utf-8?Q?Cd6BnmJRyr3Iku4m+JQ78rkcl?= Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 MIME-Version: 1.0 X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: AS8PR04MB8898.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 3c2c21dc-0055-4bd7-5025-08db291ba8f9 X-MS-Exchange-CrossTenant-originalarrivaltime: 20 Mar 2023 08:18:17.8198 (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: nxggANvN+eQSOgantHZEtcdb/g6QP8frKwUu9ZlT2saznXXiy8QLvzDJRENzRayZ05WTara6+IrF/DF5yzlbGQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM9PR04MB7489 Precedence: bulk List-ID: X-Mailing-List: linux-bluetooth@vger.kernel.org SGkgTHVpeiwNCg0KVGhhbmsgeW91IGZvciB5b3VyIHJldmlldy4gSSBmb3VuZCBhIHdheSB0byB1 cGRhdGUgdGhlIEJBU1MgaW1wbGVtZW50YXRpb24gdG8gdXNlIElTTyBzb2NrZXRzIGluc3RlYWQg b2YgcmF3IEhDSSBzb2NrZXRzLiBIb3dldmVyLCBpbiBvcmRlciBmb3IgdGhpcyBzb2x1dGlvbiB0 byB3b3JrLCBJIGhhZCB0byBtYWtlIGEgZmV3IHVwZGF0ZXMgaW4gdGhlIEJsdWV0b290aCBrZXJu ZWwsIHNvIHRoYXQgSSBjYW4gaGF2ZSB0aGUgSVNPIEJyb2FkY2FzdCBzdXBwb3J0IHRoYXQgSSBu ZWVkIGZvciBCQVNTLg0KDQpJIHNwbGl0IHRoZSAiYnRfaXNvX3FvcyIgc3RydWN0dXJlIGludG8g ZGVkaWNhdGVkIHN0cnVjdHVyZXMgZm9yIHVuaWNhc3QgYW5kIGJyb2FkY2FzdCwgYW5kIEkgYWxz byBhZGRlZCBzb21lIG1vcmUgYnJvYWRjYXN0IHBhcmFtZXRlcnMgaW4gdGhlIGJyb2FkY2FzdCBz dHJ1Y3R1cmVzIHNvIHRoYXQgSSBjYW4gcHJvdmlkZSB0aGUgSENJIHBhcmFtZXRlcnMgdGhhdCBJ IG5lZWQgZnJvbSBCbHVlWiB0byB0aGUgQmx1ZXRvb3RoIGtlcm5lbC4gVGhlc2UgY2hhbmdlcyBh cmUgY3VycmVudGx5IGluIHJldmlldyBpbnRlcm5hbGx5LCBidXQgSSB3aWxsIHN1Ym1pdCB0d28g cGF0Y2hlcyBzb29uLCBvbmUgZm9yIGJsdWV0b290aC1uZXh0IGFuZCBvbmUgZm9yIGJsdWV6LCBj b250YWluaW5nIHRoZSBidF9pc29fcW9zIHVwZGF0ZXMuIEFmdGVyIHRoZXNlIHBhdGNoZXMgd2ls bCBiZSBpbnRlZ3JhdGVkLCBJIHdpbGwgcmVzdWJtaXQgdGhlIHVwZGF0ZWQgQkFTUyBwYXRjaC4N Cg0KUmVnYXJkcywNCkl1bGlhDQoNCi0tLS0tT3JpZ2luYWwgTWVzc2FnZS0tLS0tDQpGcm9tOiBM dWl6IEF1Z3VzdG8gdm9uIERlbnR6IDxsdWl6LmRlbnR6QGdtYWlsLmNvbT4gDQpTZW50OiBUaHVy c2RheSwgTWFyY2ggMiwgMjAyMyAxMjozMCBBTQ0KVG86IEl1bGlhIFRhbmFzZXNjdSA8aXVsaWEu dGFuYXNlc2N1QG54cC5jb20+DQpDYzogbGludXgtYmx1ZXRvb3RoQHZnZXIua2VybmVsLm9yZw0K U3ViamVjdDogW0VYVF0gUmU6IFtQQVRDSCBCbHVlWiAyLzJdIHNoYXJlZDogQWRkIGluaXRpYWwg QkFTUyBjb2RlDQoNCkNhdXRpb246IEVYVCBFbWFpbA0KDQpIaSBJdWxpYSwNCg0KT24gV2VkLCBN YXIgMSwgMjAyMyBhdCA3OjQw4oCvQU0gaXVsaWEtdGFuYXNlc2N1IDxpdWxpYS50YW5hc2VzY3VA bnhwLmNvbT4gd3JvdGU6DQo+DQo+IEFkZGVkIGluaXRpYWwgQkFTUyBjb2RlIC0gYWRkZWQgc3Vw cG9ydCBmb3IgdGhlIEJyb2FkY2FzdCBSZWNlaXZlIA0KPiBTdGF0ZSBjaGFyYWN0ZXJpc3RpYyBh bmQgZm9yIHRoZSBTZXQgQnJvYWRjYXN0X0NvZGUgb3BlcmF0aW9uIGZyb20gdGhlIA0KPiBCcm9h ZGNhc3QgQXVkaW8gU2NhbiBDb250cm9sIFBvaW50IGNoYXJhY3RlcmlzdGljLg0KPiBUaGUgQkFT UyBpbXBsZW1lbnRhdGlvbiBleHBvc2VzIEhDSSBldmVudCBjYWxsYmFja3MgdGhhdCBlbmFibGUg dGhlIA0KPiBCQVNTIHNlcnZlciB0byBhdXRvbm9tb3VzbHkgc3luY2hyb25pemUgdG8gQklHcy4N Cj4NCj4gLS0tDQo+ICBzcmMvc2hhcmVkL2F0dC10eXBlcy5oIHwgICAgMSArDQo+ICBzcmMvc2hh cmVkL2JhcC5jICAgICAgIHwgMTA2NSArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrDQo+ICBzcmMvc2hhcmVkL2JhcC5oICAgICAgIHwgICAyNSArDQo+ICBzcmMvc2hhcmVk L2Jhc3MuaCAgICAgIHwgICA0MyArKw0KDQpMZXQncyBoYXZlIGl0IGltcGxlbWVudGVkIGluIGJh c3MuYyB3aXRoIGEgZGVkaWNhdGVkIGluc3RhbmNlIGUuZy4NCmJ0X2Jhc3MgdGhhdCBiYXAuYyBj YW4gaW5zdGFudGlhdGUsIHRoYXQgbWFrZXMgaXQgZWFzaWVyIHRvIGNyZWF0ZSBkZWRpY2F0ZWQg dGVzdHMgZm9yIGJhc3MsIGV0Yy4NCg0KPiAgNCBmaWxlcyBjaGFuZ2VkLCAxMTM0IGluc2VydGlv bnMoKykNCj4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvc2hhcmVkL2Jhc3MuaA0KPg0KPiBkaWZm IC0tZ2l0IGEvc3JjL3NoYXJlZC9hdHQtdHlwZXMuaCBiL3NyYy9zaGFyZWQvYXR0LXR5cGVzLmgg aW5kZXggDQo+IGEwOGIyNDE1NS4uMzViZjQxMTE4IDEwMDY0NA0KPiAtLS0gYS9zcmMvc2hhcmVk L2F0dC10eXBlcy5oDQo+ICsrKyBiL3NyYy9zaGFyZWQvYXR0LXR5cGVzLmgNCj4gQEAgLTEwNCw2 ICsxMDQsNyBAQCBzdHJ1Y3QgYnRfYXR0X3BkdV9lcnJvcl9yc3Agew0KPiAgICogMHhFMC0weEZD IGFyZSByZXNlcnZlZCBmb3IgZnV0dXJlIHVzZS4gVGhlIHJlbWFpbmluZyAzIGFyZSBkZWZpbmVk IGFzIHRoZQ0KPiAgICogZm9sbG93aW5nOg0KPiAgICovDQo+ICsjZGVmaW5lIEJUX0VSUk9SX1dS SVRFX1JFUVVFU1RfUkVKRUNURUQgICAgICAgICAweGZjDQo+ICAjZGVmaW5lIEJUX0VSUk9SX0ND Q19JTVBST1BFUkxZX0NPTkZJR1VSRUQgICAgICAweGZkDQo+ICAjZGVmaW5lIEJUX0VSUk9SX0FM UkVBRFlfSU5fUFJPR1JFU1MgICAgICAgICAgICAweGZlDQo+ICAjZGVmaW5lIEJUX0VSUk9SX09V VF9PRl9SQU5HRSAgICAgICAgICAgICAgICAgICAweGZmDQo+IGRpZmYgLS1naXQgYS9zcmMvc2hh cmVkL2JhcC5jIGIvc3JjL3NoYXJlZC9iYXAuYyBpbmRleCANCj4gZGI3ZGVmNzk5Li44NjM3NDk2 N2YgMTAwNjQ0DQo+IC0tLSBhL3NyYy9zaGFyZWQvYmFwLmMNCj4gKysrIGIvc3JjL3NoYXJlZC9i YXAuYw0KPiBAQCAtMTcsNiArMTcsOCBAQA0KPg0KPiAgI2luY2x1ZGUgImxpYi9ibHVldG9vdGgu aCINCj4gICNpbmNsdWRlICJsaWIvdXVpZC5oIg0KPiArI2luY2x1ZGUgImxpYi9oY2kuaCINCj4g KyNpbmNsdWRlICJsaWIvaGNpX2xpYi5oIg0KPg0KPiAgI2luY2x1ZGUgInNyYy9zaGFyZWQvaW8u aCINCj4gICNpbmNsdWRlICJzcmMvc2hhcmVkL3F1ZXVlLmgiDQo+IEBAIC0yOCw2ICszMCw4IEBA DQo+ICAjaW5jbHVkZSAic3JjL3NoYXJlZC9nYXR0LWNsaWVudC5oIg0KPiAgI2luY2x1ZGUgInNy Yy9zaGFyZWQvYmFwLmgiDQo+ICAjaW5jbHVkZSAic3JjL3NoYXJlZC9hc2NzLmgiDQo+ICsjaW5j bHVkZSAic3JjL3NoYXJlZC9iYXNzLmgiDQo+ICsjaW5jbHVkZSAic3JjL3NoYXJlZC9hZC5oIg0K Pg0KPiAgLyogTWF4aW11bSBudW1iZXIgb2YgQVNFKHMpICovDQo+ICAjZGVmaW5lIE5VTV9TSU5L UyAyDQo+IEBAIC0xMDgsMTMgKzExMiw1NSBAQCBzdHJ1Y3QgYnRfYXNjcyB7DQo+ICAgICAgICAg c3RydWN0IGdhdHRfZGJfYXR0cmlidXRlICphc2VfY3BfY2NjOyAgfTsNCj4NCj4gKy8qDQo+ICsg KiBCQVNTIHN1Ymdyb3VwIGZpZWxkIG9mIHRoZSBCcm9hZGNhc3QNCj4gKyAqIFJlY2VpdmUgU3Rh dGUgY2hhcmFjdGVyaXN0aWMNCj4gKyAqLw0KPiArc3RydWN0IGJ0X2Jhc3Nfc3ViZ3JvdXBfZGF0 YSB7DQo+ICsgICAgICAgdWludDMyX3QgYmlzX3N5bmM7DQo+ICsgICAgICAgdWludDhfdCBtZXRh X2xlbjsNCj4gKyAgICAgICB1aW50OF90ICptZXRhOw0KPiArfSBfX3BhY2tlZDsNCj4gKw0KPiAr LyogQkFTUyBCcm9hZGNhc3QgU291cmNlIHN0cnVjdHVyZSAqLyBzdHJ1Y3QgYnRfYmNzdF9zb3Vy Y2Ugew0KPiArICAgICAgIHN0cnVjdCBnYXR0X2RiX2F0dHJpYnV0ZSAqYXR0cjsNCj4gKyAgICAg ICB1aW50OF90IGlkOw0KPiArICAgICAgIHVpbnQ4X3QgYWRkcl90eXBlOw0KPiArICAgICAgIHVp bnQ4X3QgYWRkcls2XTsNCj4gKyAgICAgICB1aW50OF90IHNpZDsNCj4gKyAgICAgICB1aW50OF90 IGJpZFtCVF9CQVBfQlJPQURDQVNUX0lEX1NJWkVdOw0KPiArICAgICAgIHVpbnQ4X3Qgc3luY19z dGF0ZTsNCj4gKyAgICAgICB1aW50OF90IGVuY3J5cHRpb247DQo+ICsgICAgICAgdWludDhfdCBi YWRfY29kZVtCVF9CQVBfQlJPQURDQVNUX0NPREVfU0laRV07DQo+ICsgICAgICAgdWludDhfdCBu dW1fc3ViZ3JvdXBzOw0KPiArICAgICAgIHN0cnVjdCBidF9iYXNzX3N1Ymdyb3VwX2RhdGEgKnN1 Ymdyb3VwX2RhdGE7IH0gX19wYWNrZWQ7DQo+ICsNCj4gKy8qIEJyb2FkY2FzdCBSZWNlaXZlIFN0 YXRlIGNoYXJhY3RlcmlzdGljIHN0cnVjdHVyZSAqLyBzdHJ1Y3QgDQo+ICtidF9iY3N0X3JlY3Zf c3RhdGUgew0KPiArICAgICAgIHN0cnVjdCBidF9iYXNzICpiYXNzOw0KPiArICAgICAgIHN0cnVj dCBnYXR0X2RiX2F0dHJpYnV0ZSAqYXR0cjsNCj4gKyAgICAgICBzdHJ1Y3QgZ2F0dF9kYl9hdHRy aWJ1dGUgKmNjYzsgfTsNCj4gKw0KPiArLyogQkFTUyBpbnN0YW5jZSBzdHJ1Y3R1cmUgKi8NCj4g K3N0cnVjdCBidF9iYXNzIHsNCj4gKyAgICAgICBzdHJ1Y3QgYnRfYmFwX2RiICpiZGI7DQo+ICsg ICAgICAgc3RydWN0IGdhdHRfZGJfYXR0cmlidXRlICpzZXJ2aWNlOw0KPiArICAgICAgIHN0cnVj dCBnYXR0X2RiX2F0dHJpYnV0ZSAqYnJvYWRjYXN0X2F1ZGlvX3NjYW5fY3A7DQo+ICsgICAgICAg c3RydWN0IGJ0X2Jjc3RfcmVjdl9zdGF0ZSANCj4gKypiY3N0X3JlY3Zfc3RhdGVzW05VTV9CQ1NU X1JFQ1ZfU1RBVEVTXTsNCj4gK307DQo+ICsNCj4gIHN0cnVjdCBidF9iYXBfZGIgew0KPiAgICAg ICAgIHN0cnVjdCBnYXR0X2RiICpkYjsNCj4gICAgICAgICBzdHJ1Y3QgYnRfcGFjcyAqcGFjczsN Cj4gICAgICAgICBzdHJ1Y3QgYnRfYXNjcyAqYXNjczsNCj4gKyAgICAgICBzdHJ1Y3QgYnRfYmFz cyAqYmFzczsNCj4gICAgICAgICBzdHJ1Y3QgcXVldWUgKnNpbmtzOw0KPiAgICAgICAgIHN0cnVj dCBxdWV1ZSAqc291cmNlczsNCj4gICAgICAgICBzdHJ1Y3QgcXVldWUgKmVuZHBvaW50czsNCj4g KyAgICAgICBzdHJ1Y3QgcXVldWUgKmJhc3NfYmNzdF9zb3VyY2VzOw0KPiAgfTsNCj4NCj4gIHN0 cnVjdCBidF9iYXBfcmVxIHsNCj4gQEAgLTI1NSw2ICszMDEsMTUgQEAgc3RhdGljIHN0cnVjdCBx dWV1ZSAqYmFwX2RiOyAgc3RhdGljIHN0cnVjdCBxdWV1ZSANCj4gKmJhcF9jYnM7ICBzdGF0aWMg c3RydWN0IHF1ZXVlICpzZXNzaW9uczsNCj4NCj4gK3N0YXRpYyBpbnQgaGNpX2ZkID0gLTE7DQo+ ICsNCj4gK3N0YXRpYyBzdHJ1Y3QgYnRfaGNpX2NtZF9sZV9iaWdfY3JlYXRlX3N5bmMgKmJpZ19z eW5jX2NtZDsgc3RhdGljIGludCANCj4gK2JpZ19zeW5jX2NtZF9sZW47DQo+ICsNCj4gK3N0YXRp YyBzdHJ1Y3QgYnRfaGNpX2xlX3BhX3JlcG9ydCAqcGFfcmVwb3J0Ow0KPiArDQo+ICtzdGF0aWMg dWludDhfdCBuZXh0X2F2YWlsYWJsZV9zb3VyY2VfaWQ7DQo+ICsNCj4gIHN0YXRpYyBib29sIGJh cF9kYl9tYXRjaChjb25zdCB2b2lkICpkYXRhLCBjb25zdCB2b2lkICptYXRjaF9kYXRhKSAgew0K PiAgICAgICAgIGNvbnN0IHN0cnVjdCBidF9iYXBfZGIgKmJkYiA9IGRhdGE7IEBAIC0yMTcwLDYg KzIyMjUsNjQzIEBAIA0KPiBzdGF0aWMgc3RydWN0IGJ0X2FzY3MgKmFzY3NfbmV3KHN0cnVjdCBn YXR0X2RiICpkYikNCj4gICAgICAgICByZXR1cm4gYXNjczsNCj4gIH0NCj4NCj4gK3N0YXRpYyBp bnQgYmFzc19idWlsZF9iY3N0X3NvdXJjZV9mcm9tX25vdGlmKHN0cnVjdCBidF9iY3N0X3NvdXJj ZSAqYmNzdF9zb3VyY2UsDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCANCj4gKyp2YWx1ZSkgew0KPiArICAgICAg IHN0cnVjdCBidF9iYXNzX3N1Ymdyb3VwX2RhdGEgKnN1Ymdyb3VwX2RhdGE7DQo+ICsNCj4gKyAg ICAgICBpZiAoIWJjc3Rfc291cmNlIHx8ICF2YWx1ZSkNCj4gKyAgICAgICAgICAgICAgIHJldHVy biAtMTsNCj4gKw0KPiArICAgICAgIGJjc3Rfc291cmNlLT5pZCA9ICp2YWx1ZTsNCj4gKyAgICAg ICB2YWx1ZSsrOw0KPiArDQo+ICsgICAgICAgYmNzdF9zb3VyY2UtPmFkZHJfdHlwZSA9ICp2YWx1 ZTsNCj4gKyAgICAgICB2YWx1ZSsrOw0KPiArDQo+ICsgICAgICAgbWVtY3B5KGJjc3Rfc291cmNl LT5hZGRyLCB2YWx1ZSwgNik7DQo+ICsgICAgICAgdmFsdWUgKz0gNjsNCj4gKw0KPiArICAgICAg IGJjc3Rfc291cmNlLT5zaWQgPSAqdmFsdWU7DQo+ICsgICAgICAgdmFsdWUrKzsNCj4gKw0KPiAr ICAgICAgIG1lbWNweShiY3N0X3NvdXJjZS0+YmlkLCB2YWx1ZSwgQlRfQkFQX0JST0FEQ0FTVF9J RF9TSVpFKTsNCj4gKyAgICAgICB2YWx1ZSArPSBCVF9CQVBfQlJPQURDQVNUX0lEX1NJWkU7DQo+ ICsNCj4gKyAgICAgICBiY3N0X3NvdXJjZS0+c3luY19zdGF0ZSA9ICp2YWx1ZTsNCj4gKyAgICAg ICB2YWx1ZSsrOw0KPiArDQo+ICsgICAgICAgYmNzdF9zb3VyY2UtPmVuY3J5cHRpb24gPSAqdmFs dWU7DQo+ICsgICAgICAgdmFsdWUrKzsNCj4gKw0KPiArICAgICAgIGlmIChiY3N0X3NvdXJjZS0+ ZW5jcnlwdGlvbiA9PSBCVF9CQVNTX0JJR19FTkNfU1RBVEVfQkFEX0NPREUpIHsNCj4gKyAgICAg ICAgICAgICAgIG1lbWNweShiY3N0X3NvdXJjZS0+YmFkX2NvZGUsIHZhbHVlLCBCVF9CQVBfQlJP QURDQVNUX0NPREVfU0laRSk7DQo+ICsgICAgICAgICAgICAgICB2YWx1ZSArPSBCVF9CQVBfQlJP QURDQVNUX0NPREVfU0laRTsNCj4gKyAgICAgICB9IGVsc2Ugew0KPiArICAgICAgICAgICAgICAg bWVtc2V0KGJjc3Rfc291cmNlLT5iYWRfY29kZSwgMCwgQlRfQkFQX0JST0FEQ0FTVF9DT0RFX1NJ WkUpOw0KPiArICAgICAgIH0NCj4gKw0KPiArICAgICAgIGJjc3Rfc291cmNlLT5udW1fc3ViZ3Jv dXBzID0gKnZhbHVlOw0KPiArICAgICAgIHZhbHVlKys7DQo+ICsNCj4gKyAgICAgICBmcmVlKGJj c3Rfc291cmNlLT5zdWJncm91cF9kYXRhKTsNCj4gKyAgICAgICBiY3N0X3NvdXJjZS0+c3ViZ3Jv dXBfZGF0YSA9IG1hbGxvYyhiY3N0X3NvdXJjZS0+bnVtX3N1Ymdyb3VwcyAqDQo+ICsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2Yoc3RydWN0IA0KPiArIGJ0X2Jh c3Nfc3ViZ3JvdXBfZGF0YSkpOw0KPiArDQo+ICsgICAgICAgaWYgKCFiY3N0X3NvdXJjZS0+c3Vi Z3JvdXBfZGF0YSkNCj4gKyAgICAgICAgICAgICAgIHJldHVybiAtMTsNCj4gKw0KPiArICAgICAg IGZvciAoaW50IGkgPSAwOyBpIDwgYmNzdF9zb3VyY2UtPm51bV9zdWJncm91cHM7IGkrKykgew0K PiArICAgICAgICAgICAgICAgc3ViZ3JvdXBfZGF0YSA9ICZiY3N0X3NvdXJjZS0+c3ViZ3JvdXBf ZGF0YVtpXTsNCj4gKw0KPiArICAgICAgICAgICAgICAgbWVtY3B5KCZzdWJncm91cF9kYXRhLT5i aXNfc3luYywgdmFsdWUsIHNpemVvZih1aW50MzJfdCkpOw0KPiArICAgICAgICAgICAgICAgdmFs dWUgKz0gc2l6ZW9mKHVpbnQzMl90KTsNCj4gKw0KPiArICAgICAgICAgICAgICAgc3ViZ3JvdXBf ZGF0YS0+bWV0YV9sZW4gPSAqdmFsdWU7DQo+ICsgICAgICAgICAgICAgICB2YWx1ZSsrOw0KPiAr DQo+ICsgICAgICAgICAgICAgICBmcmVlKHN1Ymdyb3VwX2RhdGEtPm1ldGEpOw0KPiArICAgICAg ICAgICAgICAgc3ViZ3JvdXBfZGF0YS0+bWV0YSA9IG1hbGxvYyhzdWJncm91cF9kYXRhLT5tZXRh X2xlbik7DQo+ICsgICAgICAgICAgICAgICBpZiAoIXN1Ymdyb3VwX2RhdGEtPm1ldGEpIHsNCj4g KyAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCBpOyBqKyspDQo+ICsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgDQo+ICsgZnJlZShiY3N0X3NvdXJjZS0+c3Vi Z3JvdXBfZGF0YVtqXS5tZXRhKTsNCj4gKw0KPiArICAgICAgICAgICAgICAgICAgICAgICBmcmVl KGJjc3Rfc291cmNlLT5zdWJncm91cF9kYXRhKTsNCj4gKyAgICAgICAgICAgICAgICAgICAgICAg cmV0dXJuIC0xOw0KPiArICAgICAgICAgICAgICAgfQ0KPiArDQo+ICsgICAgICAgICAgICAgICBt ZW1jcHkoc3ViZ3JvdXBfZGF0YS0+bWV0YSwgdmFsdWUsIHN1Ymdyb3VwX2RhdGEtPm1ldGFfbGVu KTsNCj4gKyAgICAgICAgICAgICAgIHZhbHVlICs9IHN1Ymdyb3VwX2RhdGEtPm1ldGFfbGVuOw0K PiArICAgICAgIH0NCj4gKw0KPiArICAgICAgIHJldHVybiAwOw0KPiArfQ0KPiArDQo+ICtzdGF0 aWMgaW50IGJhc3NfYnVpbGRfYmNzdF9zb3VyY2VfZnJvbV9yZWFkX3JzcCgNCj4gKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBidF9iY3N0X3NvdXJjZSAqYmNz dF9zb3VyY2UsDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z dCB1aW50OF90ICp2YWx1ZSkgew0KPiArICAgICAgIHJldHVybiBiYXNzX2J1aWxkX2Jjc3Rfc291 cmNlX2Zyb21fbm90aWYoYmNzdF9zb3VyY2UsIHZhbHVlKTsgDQo+ICt9DQo+ICsNCj4gK3N0YXRp YyB1aW50OF90ICpiYXNzX2J1aWxkX25vdGlmX2Zyb21fYmNzdF9zb3VyY2Uoc3RydWN0IGJ0X2Jj c3Rfc291cmNlICpzb3VyY2UsDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IA0KPiArKm5vdGlmX2xlbikgew0KPiArICAgICAg IHNpemVfdCBsZW4gPSAwOw0KPiArICAgICAgIHVpbnQ4X3QgKm5vdGlmID0gTlVMTDsNCj4gKyAg ICAgICB1aW50OF90ICpwdHI7DQo+ICsNCj4gKyAgICAgICAqbm90aWZfbGVuID0gMDsNCj4gKw0K PiArICAgICAgIGlmICghc291cmNlKQ0KPiArICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7DQo+ ICsNCj4gKyAgICAgICBsZW4gPSAxNSArIHNvdXJjZS0+bnVtX3N1Ymdyb3VwcyAqIDU7DQo+ICsN Cj4gKyAgICAgICBpZiAoc291cmNlLT5lbmNyeXB0aW9uID09IEJUX0JBU1NfQklHX0VOQ19TVEFU RV9CQURfQ09ERSkNCj4gKyAgICAgICAgICAgICAgIGxlbiArPSBCVF9CQVBfQlJPQURDQVNUX0NP REVfU0laRTsNCj4gKw0KPiArICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc291cmNlLT5u dW1fc3ViZ3JvdXBzOyBpKyspIHsNCj4gKyAgICAgICAgICAgICAgIC8qIGFkZCBsZW5ndGggZm9y IHN1Ymdyb3VwIG1ldGFkYXRhICovDQo+ICsgICAgICAgICAgICAgICBsZW4gKz0gc291cmNlLT5z dWJncm91cF9kYXRhW2ldLm1ldGFfbGVuOw0KPiArICAgICAgIH0NCj4gKw0KPiArICAgICAgIG5v dGlmID0gbWFsbG9jKGxlbik7DQo+ICsgICAgICAgaWYgKCFub3RpZikNCj4gKyAgICAgICAgICAg ICAgIHJldHVybiBOVUxMOw0KPiArDQo+ICsgICAgICAgbWVtc2V0KG5vdGlmLCAwLCBsZW4pOw0K PiArICAgICAgIHB0ciA9IG5vdGlmOw0KPiArDQo+ICsgICAgICAgLyogYWRkIHNvdXJjZV9pZCBm aWVsZCAqLw0KPiArICAgICAgICpwdHIgPSBzb3VyY2UtPmlkOw0KPiArICAgICAgIHB0cisrOw0K PiArDQo+ICsgICAgICAgLyogYWRkIGFkZHJfdHlwZSBmaWVsZCAqLw0KPiArICAgICAgICpwdHIg PSBzb3VyY2UtPmFkZHJfdHlwZTsNCj4gKyAgICAgICBwdHIrKzsNCj4gKw0KPiArICAgICAgIC8q IGFkZCBhZGRyIGZpZWxkICovDQo+ICsgICAgICAgbWVtY3B5KHB0ciwgc291cmNlLT5hZGRyLCA2 KTsNCj4gKyAgICAgICBwdHIgKz0gNjsNCj4gKw0KPiArICAgICAgIC8qIGFkZCBzaWQgZmllbGQg Ki8NCj4gKyAgICAgICAqcHRyID0gc291cmNlLT5zaWQ7DQo+ICsgICAgICAgcHRyKys7DQo+ICsN Cj4gKyAgICAgICAvKiBhZGQgYmlkIGZpZWxkICovDQo+ICsgICAgICAgbWVtY3B5KHB0ciwgc291 cmNlLT5iaWQsIEJUX0JBUF9CUk9BRENBU1RfSURfU0laRSk7DQo+ICsgICAgICAgcHRyICs9IDM7 DQo+ICsNCj4gKyAgICAgICAvKiBhZGQgc3luY19zdGF0ZSBmaWVsZCAqLw0KPiArICAgICAgICpw dHIgPSBzb3VyY2UtPnN5bmNfc3RhdGU7DQo+ICsgICAgICAgcHRyKys7DQo+ICsNCj4gKyAgICAg ICAvKiBhZGQgZW5jcnlwdGlvbiBmaWVsZCAqLw0KPiArICAgICAgICpwdHIgPSBzb3VyY2UtPmVu Y3J5cHRpb247DQo+ICsgICAgICAgcHRyKys7DQo+ICsNCj4gKyAgICAgICBpZiAoc291cmNlLT5l bmNyeXB0aW9uID09IEJUX0JBU1NfQklHX0VOQ19TVEFURV9CQURfQ09ERSkgew0KPiArICAgICAg ICAgICAgICAgbWVtY3B5KHB0ciwgc291cmNlLT5iYWRfY29kZSwgQlRfQkFQX0JST0FEQ0FTVF9D T0RFX1NJWkUpOw0KPiArICAgICAgICAgICAgICAgcHRyICs9IEJUX0JBUF9CUk9BRENBU1RfQ09E RV9TSVpFOw0KPiArICAgICAgIH0NCj4gKw0KPiArICAgICAgIC8qIGFkZCBudW1fc3ViZ3JvdXBz IGZpZWxkICovDQo+ICsgICAgICAgKnB0ciA9IHNvdXJjZS0+bnVtX3N1Ymdyb3VwczsNCj4gKyAg ICAgICBwdHIrKzsNCj4gKw0KPiArICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc291cmNl LT5udW1fc3ViZ3JvdXBzOyBpKyspIHsNCj4gKyAgICAgICAgICAgICAgIC8qIGFkZCBzdWJncm91 cCBiaXNfc3luYyAqLw0KPiArICAgICAgICAgICAgICAgbWVtY3B5KHB0ciwgJnNvdXJjZS0+c3Vi Z3JvdXBfZGF0YVtpXS5iaXNfc3luYywNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgc2l6ZW9mKHVpbnQzMl90KSk7DQo+ICsgICAgICAgICAgICAgICBw dHIgKz0gc2l6ZW9mKHVpbnQzMl90KTsNCj4gKw0KPiArICAgICAgICAgICAgICAgLyogYWRkIHN1 Ymdyb3VwIG1ldGFfbGVuICovDQo+ICsgICAgICAgICAgICAgICAqcHRyID0gc291cmNlLT5zdWJn cm91cF9kYXRhW2ldLm1ldGFfbGVuOw0KPiArICAgICAgICAgICAgICAgcHRyKys7DQo+ICsNCj4g KyAgICAgICAgICAgICAgIC8qIGFkZCBzdWJncm91cCBtZXRhZGF0YSAqLw0KPiArICAgICAgICAg ICAgICAgaWYgKHNvdXJjZS0+c3ViZ3JvdXBfZGF0YVtpXS5tZXRhX2xlbiA+IDApIHsNCj4gKyAg ICAgICAgICAgICAgICAgICAgICAgbWVtY3B5KHB0ciwgc291cmNlLT5zdWJncm91cF9kYXRhW2ld Lm1ldGEsDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2Ut PnN1Ymdyb3VwX2RhdGFbaV0ubWV0YV9sZW4pOw0KPiArICAgICAgICAgICAgICAgICAgICAgICBw dHIgKz0gc291cmNlLT5zdWJncm91cF9kYXRhW2ldLm1ldGFfbGVuOw0KPiArICAgICAgICAgICAg ICAgfQ0KPiArICAgICAgIH0NCj4gKw0KPiArICAgICAgICpub3RpZl9sZW4gPSBsZW47DQo+ICsg ICAgICAgcmV0dXJuIG5vdGlmOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgdWludDhfdCAqYmFzc19i dWlsZF9yZWFkX3JzcF9mcm9tX2Jjc3Rfc291cmNlKHN0cnVjdCBidF9iY3N0X3NvdXJjZSAqc291 cmNlLA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgc2l6ZV90IA0KPiArKnJzcF9sZW4pIHsNCj4gKyAgICAgICByZXR1cm4g YmFzc19idWlsZF9ub3RpZl9mcm9tX2Jjc3Rfc291cmNlKHNvdXJjZSwgcnNwX2xlbik7IH0NCj4g Kw0KPiArc3RhdGljIGJvb2wgYmFzc19zcmNfaWRfbWF0Y2goY29uc3Qgdm9pZCAqZGF0YSwgY29u c3Qgdm9pZCANCj4gKyptYXRjaF9kYXRhKSB7DQo+ICsgICAgICAgY29uc3Qgc3RydWN0IGJ0X2Jj c3Rfc291cmNlICpzcmMgPSBkYXRhOw0KPiArICAgICAgIGNvbnN0IHVpbnQ4X3QgKmlkID0gbWF0 Y2hfZGF0YTsNCj4gKw0KPiArICAgICAgIHJldHVybiAoc3JjLT5pZCA9PSAqaWQpOw0KPiArfQ0K PiArDQo+ICtzdGF0aWMgdm9pZCBiYXNzX2ZpbGxfY3JlYXRlX2JpZ19zeW5jX2NtZF9mcm9tX3Bh X3JlcG9ydCgNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgYnRfaGNp X2NtZF9sZV9iaWdfY3JlYXRlX3N5bmMgDQo+ICsqY21kKSB7DQo+ICsgICAgICAgc3RydWN0IGlv dmVjIGlvdjsNCj4gKyAgICAgICBzdHJ1Y3QgYnRfYWRfc3RydWN0dXJlICphZF9zdHJ1Y3R1cmU7 DQo+ICsgICAgICAgdWludDE2X3QgdXVpZDsNCj4gKyAgICAgICBzdHJ1Y3QgYnRfaGNpX2xlX3Bh X2Jhc2VfZGF0YSAqYmFzZV9kYXRhOw0KPiArICAgICAgIHVpbnQ4X3QgKmJpc19pbmRleCA9ICh1 aW50OF90ICopY21kLT5iaXM7DQo+ICsNCj4gKyAgICAgICBpZiAoIXBhX3JlcG9ydCkNCj4gKyAg ICAgICAgICAgICAgIHJldHVybjsNCj4gKw0KPiArICAgICAgIGlvdi5pb3ZfYmFzZSA9IHBhX3Jl cG9ydC0+ZGF0YTsNCj4gKyAgICAgICBpb3YuaW92X2xlbiA9IHBhX3JlcG9ydC0+ZGF0YV9sZW47 DQo+ICsNCj4gKyAgICAgICBhZF9zdHJ1Y3R1cmUgPSB1dGlsX2lvdl9wdWxsX21lbSgmaW92LCBz aXplb2YoKmFkX3N0cnVjdHVyZSkpOw0KPiArICAgICAgIGlmIChhZF9zdHJ1Y3R1cmUtPmFkX3R5 cGUgIT0gQlRfQURfU0VSVklDRV9EQVRBMTYpDQo+ICsgICAgICAgICAgICAgICByZXR1cm47DQo+ ICsNCj4gKyAgICAgICB1dWlkID0gYnRfZ2V0X2xlMTYodXRpbF9pb3ZfcHVsbF9tZW0oJmlvdiwg c2l6ZW9mKHVpbnQxNl90KSkpOw0KPiArICAgICAgIGlmICh1dWlkICE9IEJBU0lDX0FVRElPX0FO Tk9VTkNFTUVOVF9TRVJWSUNFX1VVSUQpDQo+ICsgICAgICAgICAgICAgICByZXR1cm47DQo+ICsN Cj4gKyAgICAgICBiYXNlX2RhdGEgPSB1dGlsX2lvdl9wdWxsX21lbSgmaW92LCBzaXplb2YoKmJh c2VfZGF0YSkpOw0KPiArDQo+ICsgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBiYXNlX2RhdGEt Pm51bV9zdWJncm91cHM7IGkrKykgew0KPiArICAgICAgICAgICAgICAgc3RydWN0IGJ0X2hjaV9s ZV9wYV9iYXNlX3N1Ymdyb3VwICpzdWJncm91cDsNCj4gKyAgICAgICAgICAgICAgIHN0cnVjdCBi dF9oY2lfbHZfZGF0YSAqY29kZWNfY2ZnOw0KPiArICAgICAgICAgICAgICAgc3RydWN0IGJ0X2hj aV9sdl9kYXRhICptZXRhZGF0YTsNCj4gKw0KPiArICAgICAgICAgICAgICAgc3ViZ3JvdXAgPSB1 dGlsX2lvdl9wdWxsX21lbSgmaW92LCBzaXplb2YoKnN1Ymdyb3VwKSk7DQo+ICsNCj4gKyAgICAg ICAgICAgICAgIGNvZGVjX2NmZyA9IHV0aWxfaW92X3B1bGxfbWVtKCZpb3YsIHNpemVvZigqY29k ZWNfY2ZnKSk7DQo+ICsgICAgICAgICAgICAgICB1dGlsX2lvdl9wdWxsX21lbSgmaW92LCBjb2Rl Y19jZmctPmxlbik7DQo+ICsNCj4gKyAgICAgICAgICAgICAgIG1ldGFkYXRhID0gdXRpbF9pb3Zf cHVsbF9tZW0oJmlvdiwgc2l6ZW9mKCptZXRhZGF0YSkpOw0KPiArICAgICAgICAgICAgICAgdXRp bF9pb3ZfcHVsbF9tZW0oJmlvdiwgbWV0YWRhdGEtPmxlbik7DQo+ICsNCj4gKyAgICAgICAgICAg ICAgIGZvciAoaW50IGogPSAwOyBqIDwgc3ViZ3JvdXAtPm51bV9iaXM7IGorKykgew0KPiArICAg ICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgYnRfaGNpX2xlX3BhX2Jhc2VfYmlzICpiaXM7DQo+ ICsgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBidF9oY2lfbHZfZGF0YSAqY29kZWNfY2Zn Ow0KPiArDQo+ICsgICAgICAgICAgICAgICAgICAgICAgIGJpcyA9IHV0aWxfaW92X3B1bGxfbWVt KCZpb3YsIHNpemVvZigqYmlzKSk7DQo+ICsgICAgICAgICAgICAgICAgICAgICAgICpiaXNfaW5k ZXggPSBiaXMtPmluZGV4Ow0KPiArICAgICAgICAgICAgICAgICAgICAgICBiaXNfaW5kZXgrKzsN Cj4gKw0KPiArICAgICAgICAgICAgICAgICAgICAgICBjb2RlY19jZmcgPSB1dGlsX2lvdl9wdWxs X21lbSgmaW92LA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBzaXplb2YoKmNvZGVjX2NmZykpOw0KPiArICAgICAgICAgICAgICAgICAgICAgICB1dGls X2lvdl9wdWxsX21lbSgmaW92LCBjb2RlY19jZmctPmxlbik7DQo+ICsgICAgICAgICAgICAgICB9 DQo+ICsgICAgICAgfQ0KPiArfQ0KPiArDQo+ICtzdGF0aWMgdm9pZCBiYXNzX2ZpbGxfYmNzdF9z b3VyY2VfZnJvbV9wYV9yZXBvcnQoDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg c3RydWN0IGJ0X2Jjc3Rfc291cmNlICpiY3N0X3NvdXJjZSkgew0KPiArICAgICAgIHN0cnVjdCBp b3ZlYyBpb3Y7DQo+ICsgICAgICAgc3RydWN0IGJ0X2FkX3N0cnVjdHVyZSAqYWRfc3RydWN0dXJl Ow0KPiArICAgICAgIHVpbnQxNl90IHV1aWQ7DQo+ICsgICAgICAgc3RydWN0IGJ0X2hjaV9sZV9w YV9iYXNlX2RhdGEgKmJhc2VfZGF0YTsNCj4gKw0KPiArICAgICAgIGlmICghcGFfcmVwb3J0KQ0K PiArICAgICAgICAgICAgICAgcmV0dXJuOw0KPiArDQo+ICsgICAgICAgaW92Lmlvdl9iYXNlID0g cGFfcmVwb3J0LT5kYXRhOw0KPiArICAgICAgIGlvdi5pb3ZfbGVuID0gcGFfcmVwb3J0LT5kYXRh X2xlbjsNCj4gKw0KPiArICAgICAgIGFkX3N0cnVjdHVyZSA9IHV0aWxfaW92X3B1bGxfbWVtKCZp b3YsIHNpemVvZigqYWRfc3RydWN0dXJlKSk7DQo+ICsgICAgICAgaWYgKGFkX3N0cnVjdHVyZS0+ YWRfdHlwZSAhPSBCVF9BRF9TRVJWSUNFX0RBVEExNikNCj4gKyAgICAgICAgICAgICAgIHJldHVy bjsNCj4gKw0KPiArICAgICAgIHV1aWQgPSBidF9nZXRfbGUxNih1dGlsX2lvdl9wdWxsX21lbSgm aW92LCBzaXplb2YodWludDE2X3QpKSk7DQo+ICsgICAgICAgaWYgKHV1aWQgIT0gQkFTSUNfQVVE SU9fQU5OT1VOQ0VNRU5UX1NFUlZJQ0VfVVVJRCkNCj4gKyAgICAgICAgICAgICAgIHJldHVybjsN Cj4gKw0KPiArICAgICAgIGJhc2VfZGF0YSA9IHV0aWxfaW92X3B1bGxfbWVtKCZpb3YsIHNpemVv ZigqYmFzZV9kYXRhKSk7DQo+ICsNCj4gKyAgICAgICBpZiAoYmNzdF9zb3VyY2UtPnN5bmNfc3Rh dGUgPT0gQlRfQkFTU19OT1RfU1lOQ0hST05JWkVEX1RPX1BBKSB7DQo+ICsgICAgICAgICAgICAg ICBiY3N0X3NvdXJjZS0+c3luY19zdGF0ZSA9IEJUX0JBU1NfU1lOQ0hST05JWkVEX1RPX1BBOw0K PiArICAgICAgICAgICAgICAgYmNzdF9zb3VyY2UtPm51bV9zdWJncm91cHMgPSBiYXNlX2RhdGEt Pm51bV9zdWJncm91cHM7DQo+ICsNCj4gKyAgICAgICAgICAgICAgIGJjc3Rfc291cmNlLT5zdWJn cm91cF9kYXRhID0gbWFsbG9jKGJhc2VfZGF0YS0+bnVtX3N1Ymdyb3VwcyAqDQo+ICsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihzdHJ1Y3QgYnRf YmNzdF9zb3VyY2UpKTsNCj4gKyAgICAgICAgICAgICAgIGlmICghYmNzdF9zb3VyY2UtPnN1Ymdy b3VwX2RhdGEpDQo+ICsgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsNCj4gKw0KPiArICAg ICAgICAgICAgICAgbWVtc2V0KGJjc3Rfc291cmNlLT5zdWJncm91cF9kYXRhLCAwLCBiYXNlX2Rh dGEtPm51bV9zdWJncm91cHMgKg0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBzaXplb2Yoc3RydWN0IGJ0X2Jjc3Rfc291cmNlKSk7DQo+ICsgICAgICAg fQ0KPiArDQo+ICsgICAgICAgaWYgKGJjc3Rfc291cmNlLT5udW1fc3ViZ3JvdXBzICE9IGJhc2Vf ZGF0YS0+bnVtX3N1Ymdyb3VwcykNCj4gKyAgICAgICAgICAgICAgIHJldHVybjsNCj4gKw0KPiAr ICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgYmFzZV9kYXRhLT5udW1fc3ViZ3JvdXBzOyBpKysp IHsNCj4gKyAgICAgICAgICAgICAgIHN0cnVjdCBidF9oY2lfbGVfcGFfYmFzZV9zdWJncm91cCAq c3ViZ3JvdXA7DQo+ICsgICAgICAgICAgICAgICBzdHJ1Y3QgYnRfaGNpX2x2X2RhdGEgKmNvZGVj X2NmZzsNCj4gKyAgICAgICAgICAgICAgIHN0cnVjdCBidF9oY2lfbHZfZGF0YSAqbWV0YWRhdGE7 DQo+ICsNCj4gKyAgICAgICAgICAgICAgIHN1Ymdyb3VwID0gdXRpbF9pb3ZfcHVsbF9tZW0oJmlv diwgc2l6ZW9mKCpzdWJncm91cCkpOw0KPiArICAgICAgICAgICAgICAgY29kZWNfY2ZnID0gdXRp bF9pb3ZfcHVsbF9tZW0oJmlvdiwgc2l6ZW9mKCpjb2RlY19jZmcpKTsNCj4gKyAgICAgICAgICAg ICAgIHV0aWxfaW92X3B1bGxfbWVtKCZpb3YsIGNvZGVjX2NmZy0+bGVuKTsNCj4gKw0KPiArICAg ICAgICAgICAgICAgbWV0YWRhdGEgPSB1dGlsX2lvdl9wdWxsX21lbSgmaW92LCBzaXplb2YoKm1l dGFkYXRhKSk7DQo+ICsgICAgICAgICAgICAgICB1dGlsX2lvdl9wdWxsX21lbSgmaW92LCBtZXRh ZGF0YS0+bGVuKTsNCj4gKw0KPiArICAgICAgICAgICAgICAgYmNzdF9zb3VyY2UtPnN1Ymdyb3Vw X2RhdGFbaV0ubWV0YV9sZW4gPSBtZXRhZGF0YS0+bGVuOw0KPiArICAgICAgICAgICAgICAgZnJl ZShiY3N0X3NvdXJjZS0+c3ViZ3JvdXBfZGF0YVtpXS5tZXRhKTsNCj4gKw0KPiArICAgICAgICAg ICAgICAgYmNzdF9zb3VyY2UtPnN1Ymdyb3VwX2RhdGFbaV0ubWV0YSA9IG1hbGxvYyhtZXRhZGF0 YS0+bGVuKTsNCj4gKyAgICAgICAgICAgICAgIGlmICghYmNzdF9zb3VyY2UtPnN1Ymdyb3VwX2Rh dGFbaV0ubWV0YSkNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOw0KPiArDQo+ICsg ICAgICAgICAgICAgICBtZW1jcHkoYmNzdF9zb3VyY2UtPnN1Ymdyb3VwX2RhdGFbaV0ubWV0YSwN Cj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1ldGFkYXRhLT5kYXRh LCANCj4gKyBtZXRhZGF0YS0+bGVuKTsNCj4gKw0KPiArICAgICAgICAgICAgICAgZm9yIChpbnQg aiA9IDA7IGogPCBzdWJncm91cC0+bnVtX2JpczsgaisrKSB7DQo+ICsgICAgICAgICAgICAgICAg ICAgICAgIHN0cnVjdCBidF9oY2lfbGVfcGFfYmFzZV9iaXMgKmJpczsNCj4gKyAgICAgICAgICAg ICAgICAgICAgICAgc3RydWN0IGJ0X2hjaV9sdl9kYXRhICpjb2RlY19jZmc7DQo+ICsNCj4gKyAg ICAgICAgICAgICAgICAgICAgICAgYmlzID0gdXRpbF9pb3ZfcHVsbF9tZW0oJmlvdiwgc2l6ZW9m KCpiaXMpKTsNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgY29kZWNfY2ZnID0gdXRpbF9pb3Zf cHVsbF9tZW0oJmlvdiwgc2l6ZW9mKCpjb2RlY19jZmcpKTsNCj4gKyAgICAgICAgICAgICAgICAg ICAgICAgdXRpbF9pb3ZfcHVsbF9tZW0oJmlvdiwgY29kZWNfY2ZnLT5sZW4pOw0KPiArICAgICAg ICAgICAgICAgfQ0KPiArICAgICAgIH0NCj4gK30NCj4gKw0KPiArc3RhdGljIHZvaWQgYmFzc19m aWxsX2Jjc3Rfc291cmNlX2Jpc19zeW5jX2JpdG1hc2soDQo+ICsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgYnRfYmNzdF9zb3VyY2UgDQo+ICsqYmNzdF9zb3Vy Y2UpIHsNCj4gKyAgICAgICBzdHJ1Y3QgaW92ZWMgaW92Ow0KPiArICAgICAgIHN0cnVjdCBidF9h ZF9zdHJ1Y3R1cmUgKmFkX3N0cnVjdHVyZTsNCj4gKyAgICAgICB1aW50MTZfdCB1dWlkOw0KPiAr ICAgICAgIHN0cnVjdCBidF9oY2lfbGVfcGFfYmFzZV9kYXRhICpiYXNlX2RhdGE7DQo+ICsNCj4g KyAgICAgICBpZiAoIXBhX3JlcG9ydCkNCj4gKyAgICAgICAgICAgICAgIHJldHVybjsNCj4gKw0K PiArICAgICAgIGlvdi5pb3ZfYmFzZSA9IHBhX3JlcG9ydC0+ZGF0YTsNCj4gKyAgICAgICBpb3Yu aW92X2xlbiA9IHBhX3JlcG9ydC0+ZGF0YV9sZW47DQo+ICsNCj4gKyAgICAgICBhZF9zdHJ1Y3R1 cmUgPSB1dGlsX2lvdl9wdWxsX21lbSgmaW92LCBzaXplb2YoKmFkX3N0cnVjdHVyZSkpOw0KPiAr ICAgICAgIGlmIChhZF9zdHJ1Y3R1cmUtPmFkX3R5cGUgIT0gQlRfQURfU0VSVklDRV9EQVRBMTYp DQo+ICsgICAgICAgICAgICAgICByZXR1cm47DQo+ICsNCj4gKyAgICAgICB1dWlkID0gYnRfZ2V0 X2xlMTYodXRpbF9pb3ZfcHVsbF9tZW0oJmlvdiwgc2l6ZW9mKHVpbnQxNl90KSkpOw0KPiArICAg ICAgIGlmICh1dWlkICE9IEJBU0lDX0FVRElPX0FOTk9VTkNFTUVOVF9TRVJWSUNFX1VVSUQpDQo+ ICsgICAgICAgICAgICAgICByZXR1cm47DQo+ICsNCj4gKyAgICAgICBiYXNlX2RhdGEgPSB1dGls X2lvdl9wdWxsX21lbSgmaW92LCBzaXplb2YoKmJhc2VfZGF0YSkpOw0KPiArDQo+ICsgICAgICAg Zm9yIChpbnQgaSA9IDA7IGkgPCBiYXNlX2RhdGEtPm51bV9zdWJncm91cHM7IGkrKykgew0KPiAr ICAgICAgICAgICAgICAgc3RydWN0IGJ0X2hjaV9sZV9wYV9iYXNlX3N1Ymdyb3VwICpzdWJncm91 cDsNCj4gKyAgICAgICAgICAgICAgIHN0cnVjdCBidF9oY2lfbHZfZGF0YSAqY29kZWNfY2ZnOw0K PiArICAgICAgICAgICAgICAgc3RydWN0IGJ0X2hjaV9sdl9kYXRhICptZXRhZGF0YTsNCj4gKw0K PiArICAgICAgICAgICAgICAgc3ViZ3JvdXAgPSB1dGlsX2lvdl9wdWxsX21lbSgmaW92LCBzaXpl b2YoKnN1Ymdyb3VwKSk7DQo+ICsNCj4gKyAgICAgICAgICAgICAgIGNvZGVjX2NmZyA9IHV0aWxf aW92X3B1bGxfbWVtKCZpb3YsIHNpemVvZigqY29kZWNfY2ZnKSk7DQo+ICsgICAgICAgICAgICAg ICB1dGlsX2lvdl9wdWxsX21lbSgmaW92LCBjb2RlY19jZmctPmxlbik7DQo+ICsNCj4gKyAgICAg ICAgICAgICAgIG1ldGFkYXRhID0gdXRpbF9pb3ZfcHVsbF9tZW0oJmlvdiwgc2l6ZW9mKCptZXRh ZGF0YSkpOw0KPiArICAgICAgICAgICAgICAgdXRpbF9pb3ZfcHVsbF9tZW0oJmlvdiwgbWV0YWRh dGEtPmxlbik7DQo+ICsNCj4gKyAgICAgICAgICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgc3Vi Z3JvdXAtPm51bV9iaXM7IGorKykgew0KPiArICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qg YnRfaGNpX2xlX3BhX2Jhc2VfYmlzICpiaXM7DQo+ICsgICAgICAgICAgICAgICAgICAgICAgIHN0 cnVjdCBidF9oY2lfbHZfZGF0YSAqY29kZWNfY2ZnOw0KPiArDQo+ICsgICAgICAgICAgICAgICAg ICAgICAgIGJpcyA9IHV0aWxfaW92X3B1bGxfbWVtKCZpb3YsIHNpemVvZigqYmlzKSk7DQo+ICsg ICAgICAgICAgICAgICAgICAgICAgIGJjc3Rfc291cmNlLT5zdWJncm91cF9kYXRhW2ldLmJpc19z eW5jIHw9DQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICgxIDw8IChiaXMtPmluZGV4IC0gDQo+ICsgMSkpOw0KPiArDQo+ICsgICAgICAgICAgICAgICAg ICAgICAgIGNvZGVjX2NmZyA9IHV0aWxfaW92X3B1bGxfbWVtKCZpb3YsDQo+ICsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZigqY29kZWNfY2ZnKSk7 DQo+ICsgICAgICAgICAgICAgICAgICAgICAgIHV0aWxfaW92X3B1bGxfbWVtKCZpb3YsIGNvZGVj X2NmZy0+bGVuKTsNCj4gKyAgICAgICAgICAgICAgIH0NCj4gKyAgICAgICB9DQo+ICt9DQo+ICsN Cj4gK3N0YXRpYyB2b2lkIGJhc3NfaGFuZGxlX3NldF9icm9hZGNhc3RfY29kZV9vcGNvZGUoc3Ry dWN0IGJ0X2Jhc3MgKmJhc3MsDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHN0cnVjdCBnYXR0X2RiX2F0dHJpYnV0ZSAqYXR0cmliLA0KPiArICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90IG9wY29kZSwN Cj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWdu ZWQgaW50IGlkLA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBzdHJ1Y3QgaW92ZWMgKmlvdiwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgc3RydWN0IGJ0X2F0dCAqYXR0KSB7DQo+ICsgICAgICAgc3RydWN0 IGJ0X2JhcCAqYmFwID0gYmFwX2dldF9zZXNzaW9uKGF0dCwgYmFzcy0+YmRiLT5kYik7DQo+ICsg ICAgICAgc3RydWN0IGJ0X2Jhc3Nfc2V0X2Jjc3RfY29kZV9wYXJhbXMgKnBhcmFtczsNCj4gKyAg ICAgICBzdHJ1Y3QgYnRfYmNzdF9zb3VyY2UgKmJjc3Rfc291cmNlOw0KPiArICAgICAgIHVpbnQ4 X3QgKm5vdGlmeV9kYXRhOw0KPiArICAgICAgIHNpemVfdCBub3RpZnlfZGF0YV9sZW47DQo+ICsg ICAgICAgc3RydWN0IGhjaV9yZXF1ZXN0IHJxOw0KPiArDQo+ICsgICAgICAgc3RydWN0IGJ0X2hj aV9ldnRfbGVfYmlnX3N5bmNfZXN0YWJpbGlzaGVkICpiaWdfc3luY19lc3RhYmxpc2hlZF9ldnQg PSBOVUxMOw0KPiArICAgICAgIGludCBiaWdfc3luY19lc3RhYmxpc2hlZF9ldnRfbGVuID0gMDsN Cj4gKw0KPiArICAgICAgIGlmICghYmlnX3N5bmNfY21kKQ0KPiArICAgICAgICAgICAgICAgZ290 byBkb25lOw0KPiArDQo+ICsgICAgICAgYmlnX3N5bmNfZXN0YWJsaXNoZWRfZXZ0X2xlbiA9DQo+ ICsgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihzdHJ1Y3QgYnRfaGNpX2V2dF9sZV9iaWdf c3luY19lc3RhYmlsaXNoZWQpICsNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgYmlnX3N5bmNf Y21kLT5udW1fYmlzICogc2l6ZW9mKHVpbnQxNl90KTsNCj4gKw0KPiArICAgICAgIGJpZ19zeW5j X2VzdGFibGlzaGVkX2V2dCA9IG1hbGxvYyhiaWdfc3luY19lc3RhYmxpc2hlZF9ldnRfbGVuKTsN Cj4gKyAgICAgICBpZiAoYmlnX3N5bmNfZXN0YWJsaXNoZWRfZXZ0ID09IE5VTEwpDQo+ICsgICAg ICAgICAgICAgICBnb3RvIGRvbmU7DQo+ICsNCj4gKyAgICAgICAvKiB2YWxpZGF0ZSBTZXQgQnJv YWRjYXN0X0NvZGUgY29tbWFuZCBsZW5ndGggKi8NCj4gKyAgICAgICBpZiAoaW92LT5pb3ZfbGVu IDwgc2l6ZW9mKHN0cnVjdCBidF9iYXNzX3NldF9iY3N0X2NvZGVfcGFyYW1zKSkgew0KPiArICAg ICAgICAgICAgICAgaWYgKG9wY29kZSA9PSBCVF9BVFRfT1BfV1JJVEVfUkVRKQ0KPiArICAgICAg ICAgICAgICAgICAgICAgICBnYXR0X2RiX2F0dHJpYnV0ZV93cml0ZV9yZXN1bHQoYXR0cmliLCBp ZCwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIA0KPiArIEJUX0VS Uk9SX1dSSVRFX1JFUVVFU1RfUkVKRUNURUQpOw0KPiArDQo+ICsgICAgICAgICAgICAgICBnb3Rv IGRvbmU7DQo+ICsgICAgICAgfQ0KPiArDQo+ICsgICAgICAgLyogZ2V0IFNldCBCcm9hZGNhc3Rf Q29kZSBjb21tYW5kIHBhcmFtZXRlcnMgKi8NCj4gKyAgICAgICBwYXJhbXMgPSB1dGlsX2lvdl9w dWxsX21lbShpb3YsIHNpemVvZigqcGFyYW1zKSk7DQo+ICsNCj4gKyAgICAgICBiY3N0X3NvdXJj ZSA9IHF1ZXVlX2ZpbmQoYmFwLT5sZGItPmJhc3NfYmNzdF9zb3VyY2VzLA0KPiArICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYXNzX3NyY19pZF9tYXRjaCwN Cj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnBhcmFt cy0+c291cmNlX2lkKTsNCj4gKw0KPiArICAgICAgIGlmIChiY3N0X3NvdXJjZSA9PSBOVUxMKSB7 DQo+ICsgICAgICAgICAgICAgICAvKiBubyBzb3VyY2UgbWF0Y2hlcyB0aGUgd3JpdHRlbiBzb3Vy Y2VfaWQgKi8NCj4gKyAgICAgICAgICAgICAgIGlmIChvcGNvZGUgPT0gQlRfQVRUX09QX1dSSVRF X1JFUSkNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgZ2F0dF9kYl9hdHRyaWJ1dGVfd3JpdGVf cmVzdWx0KGF0dHJpYiwgaWQsDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICANCj4gKyBCVF9CQVNTX0VSUk9SX0lOVkFMSURfU09VUkNFX0lEKTsNCj4gKw0KPiArICAg ICAgICAgICAgICAgZ290byBkb25lOw0KPiArICAgICAgIH0NCj4gKw0KPiArICAgICAgIG1lbWNw eShiaWdfc3luY19jbWQtPmJjb2RlLCBwYXJhbXMtPmJjc3RfY29kZSwNCj4gKyAgICAgICAgICAg ICAgICAgICAgICAgQlRfQkFQX0JST0FEQ0FTVF9DT0RFX1NJWkUpOw0KPiArDQo+ICsgICAgICAg cnEub2dmICAgICAgICAgID0gT0dGX0xFX0NUTDsNCj4gKyAgICAgICBycS5vY2YgICAgICAgICAg PSBPQ0ZfTEVfQklHX0NSRUFURV9TWU5DOw0KPiArICAgICAgIHJxLmV2ZW50ICAgICAgICA9IEJU X0hDSV9FVlRfTEVfQklHX1NZTkNfRVNUQUJJTElTSEVEOw0KPiArICAgICAgIHJxLmNwYXJhbSAg ICAgICA9IGJpZ19zeW5jX2NtZDsNCj4gKyAgICAgICBycS5jbGVuICAgICAgICAgPSBiaWdfc3lu Y19jbWRfbGVuOw0KPiArICAgICAgIHJxLnJwYXJhbSAgICAgICA9IGJpZ19zeW5jX2VzdGFibGlz aGVkX2V2dDsNCj4gKyAgICAgICBycS5ybGVuICAgICAgICAgPSBiaWdfc3luY19lc3RhYmxpc2hl ZF9ldnRfbGVuOw0KPiArDQo+ICsgICAgICAgaWYgKGhjaV9zZW5kX3JlcShoY2lfZmQsICZycSwg MCkgPCAwKSB7DQo+ICsgICAgICAgICAgICAgICBEQkcoYmFwLCAiRmFpbGVkIHRvIHNlbmQgQmln IFN5bmMgQ3JlYXRlIGNvbW1hbmQ6ICVzIiwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgc3RyZXJyb3IoZXJybm8pKTsNCj4gKyAgICAgICAgICAgICAg IGdvdG8gZG9uZTsNCj4gKyAgICAgICB9DQoNCkNvZGUgZm9yIHN1Ym1pdHRpbmcgQklHIENyZWF0 ZSBTeW5jIGFscmVhZHkgZXhpc3RzIGluIHRoZSBrZXJuZWw6DQoNCmh0dHBzOi8vZXVyMDEuc2Fm ZWxpbmtzLnByb3RlY3Rpb24ub3V0bG9vay5jb20vP3VybD1odHRwcyUzQSUyRiUyRmdpdC5rZXJu ZWwub3JnJTJGcHViJTJGc2NtJTJGbGludXglMkZrZXJuZWwlMkZnaXQlMkZibHVldG9vdGglMkZi bHVldG9vdGgtbmV4dC5naXQlMkZ0cmVlJTJGbmV0JTJGYmx1ZXRvb3RoJTJGaGNpX2Nvbm4uYyUy M24yMTE3JmRhdGE9MDUlN0MwMSU3Q2l1bGlhLnRhbmFzZXNjdSU0MG54cC5jb20lN0M4NzYzMTg4 ZTI1ODQ0Njc5YTZhZDA4ZGIxYWE0N2RhYSU3QzY4NmVhMWQzYmMyYjRjNmZhOTJjZDk5YzVjMzAx NjM1JTdDMCU3QzAlN0M2MzgxMzMwNjYwMTIyODAzMjIlN0NVbmtub3duJTdDVFdGcGJHWnNiM2Q4 ZXlKV0lqb2lNQzR3TGpBd01EQWlMQ0pRSWpvaVYybHVNeklpTENKQlRpSTZJazFoYVd3aUxDSlhW Q0k2TW4wJTNEJTdDMzAwMCU3QyU3QyU3QyZzZGF0YT1LM1dXZXk0Z1JtTjNUM1lDRXZjc3NQY05M cENQcWdvZ2FTeWRmeVdiQlJvJTNEJnJlc2VydmVkPTANCg0KSW5zdGVhZCB3aGF0IHdlIHNob3Vs ZCBwcm9iYWJseSBkbyBpcyB0byBsaXN0ZW4gdXNpbmcgYW4gSVNPIHNvY2tldCB3aXRoIGJyb2Fk Y2FzdCBhZGRyZXNzIGJ1dCBpbnN0ZWFkIG9mIGFjY2VwdGluZyBpdCB3ZSBqdXN0IGluZm9ybSB3 aGF0IHBlZXJzIHdlIGhhdmUgZm91bmQgb3ZlciB0aGUgYWlyLg0KDQo+ICsgICAgICAgaWYgKGJp Z19zeW5jX2VzdGFibGlzaGVkX2V2dC0+c3RhdHVzID09IDB4MDApIHsNCj4gKyAgICAgICAgICAg ICAgIGJjc3Rfc291cmNlLT5lbmNyeXB0aW9uID0gQlRfQkFTU19CSUdfRU5DX1NUQVRFX0RFQzsN Cj4gKw0KPiArICAgICAgICAgICAgICAgYmFzc19maWxsX2Jjc3Rfc291cmNlX2Jpc19zeW5jX2Jp dG1hc2soYmNzdF9zb3VyY2UpOw0KPiArICAgICAgIH0gZWxzZSB7DQo+ICsgICAgICAgICAgICAg ICBiY3N0X3NvdXJjZS0+ZW5jcnlwdGlvbiA9IEJUX0JBU1NfQklHX0VOQ19TVEFURV9CQURfQ09E RTsNCj4gKyAgICAgICAgICAgICAgIG1lbWNweShiY3N0X3NvdXJjZS0+YmFkX2NvZGUsIHBhcmFt cy0+YmNzdF9jb2RlLA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg QlRfQkFQX0JST0FEQ0FTVF9DT0RFX1NJWkUpOw0KPiArICAgICAgIH0NCj4gKw0KPiArICAgICAg IG5vdGlmeV9kYXRhID0gYmFzc19idWlsZF9ub3RpZl9mcm9tX2Jjc3Rfc291cmNlKGJjc3Rfc291 cmNlLA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIA0KPiArICZub3RpZnlfZGF0YV9sZW4pOw0KPiArDQo+ICsgICAgICAgZ2F0dF9kYl9h dHRyaWJ1dGVfbm90aWZ5KGJjc3Rfc291cmNlLT5hdHRyLA0KPiArICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgKHZvaWQgKilub3RpZnlfZGF0YSwNCj4gKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vdGlmeV9kYXRhX2xlbiwgYXR0KTsNCj4gKw0K PiArICAgICAgIGZyZWUobm90aWZ5X2RhdGEpOw0KPiArDQo+ICtkb25lOg0KPiArDQo+ICsgICAg ICAgZnJlZShiaWdfc3luY19jbWQpOw0KPiArICAgICAgIGJpZ19zeW5jX2NtZCA9IE5VTEw7DQo+ ICsgICAgICAgZnJlZShiaWdfc3luY19lc3RhYmxpc2hlZF9ldnQpOw0KPiArICAgICAgIGZyZWUo cGFfcmVwb3J0KTsNCj4gKyAgICAgICBwYV9yZXBvcnQgPSBOVUxMOw0KPiArICAgICAgIGJpZ19z eW5jX2NtZF9sZW4gPSAwOw0KPiArfQ0KPiArDQo+ICsjZGVmaW5lIEJBU1NfT1AoX3N0ciwgX29w LCBfc2l6ZSwgX2Z1bmMpIFwNCj4gKyAgICAgICB7IFwNCj4gKyAgICAgICAgICAgICAgIC5zdHIg PSBfc3RyLCBcDQo+ICsgICAgICAgICAgICAgICAub3AgPSBfb3AsIFwNCj4gKyAgICAgICAgICAg ICAgIC5zaXplID0gX3NpemUsIFwNCj4gKyAgICAgICAgICAgICAgIC5mdW5jID0gX2Z1bmMsIFwN Cj4gKyAgICAgICB9DQo+ICsNCj4gK3N0cnVjdCBiYXNzX29wX2hhbmRsZXIgew0KPiArICAgICAg IGNvbnN0IGNoYXIgICAgICAqc3RyOw0KPiArICAgICAgIHVpbnQ4X3QgICAgICAgICBvcDsNCj4g KyAgICAgICBzaXplX3QgICAgICAgICAgc2l6ZTsNCj4gKyAgICAgICB2b2lkICAgICAgICAgICAg KCpmdW5jKShzdHJ1Y3QgYnRfYmFzcyAqYmFzcywNCj4gKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGdhdHRfZGJfYXR0cmlidXRlICphdHRyaWIs DQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4 X3Qgb3Bjb2RlLA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICB1bnNpZ25lZCBpbnQgaWQsDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHN0cnVjdCBpb3ZlYyAqaW92LA0KPiArICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgYnRfYXR0ICphdHQpOyB9IA0KPiAr YmFzc19oYW5kbGVyc1tdID0gew0KPiArICAgICAgIEJBU1NfT1AoIlNldCBCcm9hZGNhc3RfQ29k ZSIsIEJUX0JBU1NfU0VUX0JDU1RfQ09ERSwNCj4gKyAgICAgICAgICAgICAgIHNpemVvZihzdHJ1 Y3QgYnRfYmFzc19zZXRfYmNzdF9jb2RlX3BhcmFtcyksDQo+ICsgICAgICAgICAgICAgICBiYXNz X2hhbmRsZV9zZXRfYnJvYWRjYXN0X2NvZGVfb3Bjb2RlKQ0KPiArfTsNCj4gKw0KPiArc3RhdGlj IHZvaWQgYmFzc19icm9hZGNhc3RfYXVkaW9fc2Nhbl9jcF93cml0ZShzdHJ1Y3QgZ2F0dF9kYl9h dHRyaWJ1dGUgKmF0dHJpYiwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNp Z25lZCBpbnQgaWQsIHVpbnQxNl90IG9mZnNldCwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBjb25zdCB1aW50OF90ICp2YWx1ZSwgc2l6ZV90IGxlbiwNCj4gKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICB1aW50OF90IG9wY29kZSwgc3RydWN0IGJ0X2F0dCAqYXR0LA0K PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKnVzZXJfZGF0YSkgew0KPiAr ICAgICAgIHN0cnVjdCBidF9iYXNzICpiYXNzID0gdXNlcl9kYXRhOw0KPiArICAgICAgIHN0cnVj dCBidF9iYXNzX2Jjc3RfYXVkaW9fc2Nhbl9jcF9oZHIgKmhkcjsNCj4gKyAgICAgICBzdHJ1Y3Qg YmFzc19vcF9oYW5kbGVyICpoYW5kbGVyOw0KPiArICAgICAgIHN0cnVjdCBpb3ZlYyBpb3YgPSB7 DQo+ICsgICAgICAgICAgICAgICAuaW92X2Jhc2UgPSAodm9pZCAqKXZhbHVlLA0KPiArICAgICAg ICAgICAgICAgLmlvdl9sZW4gPSBsZW4sDQo+ICsgICAgICAgfTsNCj4gKw0KPiArICAgICAgIC8q IHZhbGlkYXRlIHdyaXR0ZW4gY29tbWFuZCBsZW5ndGggKi8NCj4gKyAgICAgICBpZiAobGVuIDwg KHNpemVvZigqaGRyKSkpIHsNCj4gKyAgICAgICAgICAgICAgIGlmIChvcGNvZGUgPT0gQlRfQVRU X09QX1dSSVRFX1JFUSkgew0KPiArICAgICAgICAgICAgICAgICAgICAgICBnYXR0X2RiX2F0dHJp YnV0ZV93cml0ZV9yZXN1bHQoYXR0cmliLCBpZCwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIEJUX0VSUk9SX1dSSVRFX1JFUVVFU1RfUkVKRUNURUQpOw0KPiArICAg ICAgICAgICAgICAgfQ0KPiArICAgICAgICAgICAgICAgcmV0dXJuOw0KPiArICAgICAgIH0NCj4g Kw0KPiArICAgICAgIC8qIGdldCBjb21tYW5kIGhlYWRlciAqLw0KPiArICAgICAgIGhkciA9IHV0 aWxfaW92X3B1bGxfbWVtKCZpb3YsIHNpemVvZigqaGRyKSk7DQo+ICsNCj4gKyAgICAgICBpZiAo aGRyLT5vcCAhPSBCVF9CQVNTX1NFVF9CQ1NUX0NPREUpIHsNCj4gKyAgICAgICAgICAgICAgIGlm IChvcGNvZGUgPT0gQlRfQVRUX09QX1dSSVRFX1JFUSkgew0KPiArICAgICAgICAgICAgICAgICAg ICAgICBnYXR0X2RiX2F0dHJpYnV0ZV93cml0ZV9yZXN1bHQoYXR0cmliLCBpZCwNCj4gKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJUX0JBU1NfRVJST1JfT1BDT0RFX05P VF9TVVBQT1JURUQpOw0KPiArICAgICAgICAgICAgICAgfQ0KPiArDQo+ICsgICAgICAgICAgICAg ICByZXR1cm47DQo+ICsgICAgICAgfQ0KPiArDQo+ICsgICAgICAgLyogY2FsbCB0aGUgYXBwcm9w cmlhdGUgb3Bjb2RlIGhhbmRsZXIgKi8NCj4gKyAgICAgICBmb3IgKGhhbmRsZXIgPSBiYXNzX2hh bmRsZXJzOyBoYW5kbGVyICYmIGhhbmRsZXItPnN0cjsgaGFuZGxlcisrKSB7DQo+ICsgICAgICAg ICAgICAgICBpZiAoaGFuZGxlci0+b3AgPT0gaGRyLT5vcCkgew0KPiArICAgICAgICAgICAgICAg ICAgICAgICBoYW5kbGVyLT5mdW5jKGJhc3MsIGF0dHJpYiwgb3Bjb2RlLCBpZCwgJmlvdiwgYXR0 KTsNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQo+ICsgICAgICAgICAgICAgICB9 DQo+ICsgICAgICAgfQ0KPiArDQo+ICsgICAgICAgZ2F0dF9kYl9hdHRyaWJ1dGVfd3JpdGVfcmVz dWx0KGF0dHJpYiwgaWQsIDB4MDApOyB9DQo+ICsNCj4gK3N0YXRpYyBib29sIGJhc3Nfc291cmNl X21hdGNoX2F0dHJpYihjb25zdCB2b2lkICpkYXRhLCBjb25zdCB2b2lkIA0KPiArKm1hdGNoX2Rh dGEpIHsNCj4gKyAgICAgICBjb25zdCBzdHJ1Y3QgYnRfYmNzdF9zb3VyY2UgKnNyYyA9IGRhdGE7 DQo+ICsgICAgICAgY29uc3Qgc3RydWN0IGdhdHRfZGJfYXR0cmlidXRlICphdHRyID0gbWF0Y2hf ZGF0YTsNCj4gKw0KPiArICAgICAgIHJldHVybiAoc3JjLT5hdHRyID09IGF0dHIpOw0KPiArfQ0K PiArDQo+ICtzdGF0aWMgYm9vbCBiYXNzX3NvdXJjZV9tYXRjaF9zaWQoY29uc3Qgdm9pZCAqZGF0 YSwgY29uc3Qgdm9pZCANCj4gKyptYXRjaF9kYXRhKSB7DQo+ICsgICAgICAgY29uc3Qgc3RydWN0 IGJ0X2Jjc3Rfc291cmNlICpzcmMgPSBkYXRhOw0KPiArICAgICAgIGNvbnN0IHVpbnQ4X3Qgc2lk ID0gKihjb25zdCB1aW50OF90ICopbWF0Y2hfZGF0YTsNCj4gKw0KPiArICAgICAgIHJldHVybiAo c3JjLT5zaWQgPT0gc2lkKTsNCj4gK30NCj4gKw0KPiArc3RhdGljIHZvaWQgYmFzc19iY3N0X3Jl Y2VpdmVfc3RhdGVfcmVhZChzdHJ1Y3QgZ2F0dF9kYl9hdHRyaWJ1dGUgKmF0dHJpYiwNCj4gKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNp Z25lZCBpbnQgaWQsIHVpbnQxNl90IG9mZnNldCwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90IG9wY29kZSwgc3RydWN0IGJ0 X2F0dCAqYXR0LA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHZvaWQgDQo+ICsqdXNlcl9kYXRhKSB7DQo+ICsgICAgICAgc3RydWN0IGJ0 X2Jhc3MgKmJhc3MgPSB1c2VyX2RhdGE7DQo+ICsgICAgICAgc3RydWN0IGJ0X2JhcCAqYmFwID0g YmFwX2dldF9zZXNzaW9uKGF0dCwgYmFzcy0+YmRiLT5kYik7DQo+ICsgICAgICAgdWludDhfdCAq cnNwOw0KPiArICAgICAgIHNpemVfdCByc3BfbGVuOw0KPiArICAgICAgIHN0cnVjdCBidF9iY3N0 X3NvdXJjZSAqYmNzdF9zb3VyY2U7DQo+ICsNCj4gKyAgICAgICBiY3N0X3NvdXJjZSA9IHF1ZXVl X2ZpbmQoYmFwLT5sZGItPmJhc3NfYmNzdF9zb3VyY2VzLA0KPiArICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhc3Nfc291cmNlX21hdGNoX2F0 dHJpYiwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBhdHRyaWIpOw0KPiArDQo+ICsgICAgICAgaWYgKCFiY3N0X3NvdXJjZSkgew0KPiAr ICAgICAgICAgICAgICAgZ2F0dF9kYl9hdHRyaWJ1dGVfcmVhZF9yZXN1bHQoYXR0cmliLCBpZCwg MCwgTlVMTCwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAwKTsNCj4gKyAgICAgICAgICAgICAgIHJldHVybjsNCj4gKyAgICAgICB9DQo+ ICsNCj4gKyAgICAgICAvKiBidWlsZCByZWFkIHJlc3BvbnNlICovDQo+ICsgICAgICAgcnNwID0g YmFzc19idWlsZF9yZWFkX3JzcF9mcm9tX2Jjc3Rfc291cmNlKGJjc3Rfc291cmNlLCANCj4gKyAm cnNwX2xlbik7DQo+ICsNCj4gKyAgICAgICBpZiAoIXJzcCkgew0KPiArICAgICAgICAgICAgICAg Z2F0dF9kYl9hdHRyaWJ1dGVfcmVhZF9yZXN1bHQoYXR0cmliLCBpZCwgQlRfQVRUX0VSUk9SX1VO TElLRUxZLA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgTlVMTCwgMCk7DQo+ICsgICAgICAgICAgICAgICByZXR1cm47DQo+ ICsgICAgICAgfQ0KPiArDQo+ICsgICAgICAgZ2F0dF9kYl9hdHRyaWJ1dGVfcmVhZF9yZXN1bHQo YXR0cmliLCBpZCwgMCwgKHZvaWQgKilyc3AsDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHJzcF9sZW4pOw0KPiArDQo+ICsgICAgICAgZnJlZShyc3Ap Ow0KPiArfQ0KPiArDQo+ICtzdGF0aWMgdm9pZCBiY3N0X3JlY3ZfbmV3KHN0cnVjdCBidF9iYXNz ICpiYXNzLCBpbnQgaSkgew0KPiArICAgICAgIHN0cnVjdCBidF9iY3N0X3JlY3Zfc3RhdGUgKmJj c3RfcmVjdl9zdGF0ZTsNCj4gKyAgICAgICBidF91dWlkX3QgdXVpZDsNCj4gKw0KPiArICAgICAg IGlmICghYmFzcykNCj4gKyAgICAgICAgICAgICAgIHJldHVybjsNCj4gKw0KPiArICAgICAgIGJj c3RfcmVjdl9zdGF0ZSA9IG5ldzAoc3RydWN0IGJ0X2Jjc3RfcmVjdl9zdGF0ZSwgMSk7DQo+ICsg ICAgICAgYmNzdF9yZWN2X3N0YXRlLT5iYXNzID0gYmFzczsNCj4gKw0KPiArICAgICAgIGJ0X3V1 aWQxNl9jcmVhdGUoJnV1aWQsIEJDU1RfUkVDVl9TVEFURV9VVUlEKTsNCj4gKyAgICAgICBiY3N0 X3JlY3Zfc3RhdGUtPmF0dHIgPSBnYXR0X2RiX3NlcnZpY2VfYWRkX2NoYXJhY3RlcmlzdGljKGJh c3MtPnNlcnZpY2UsICZ1dWlkLA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgQlRfQVRUX1BFUk1fUkVBRCwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIEJUX0dBVFRfQ0hSQ19QUk9QX1JFQUQgfA0KPiArICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgQlRfR0FUVF9DSFJDX1BST1BfTk9USUZZLA0KPiArICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFzc19iY3N0X3JlY2VpdmVfc3RhdGVf cmVhZCwgTlVMTCwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJh c3MpOw0KPiArDQo+ICsgICAgICAgYmNzdF9yZWN2X3N0YXRlLT5jY2MgPSBnYXR0X2RiX3NlcnZp Y2VfYWRkX2NjYyhiYXNzLT5zZXJ2aWNlLA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgQlRfQVRUX1BFUk1fUkVBRCB8IA0KPiArIEJUX0FUVF9QRVJNX1dSSVRFKTsN Cj4gKw0KPiArICAgICAgIGJhc3MtPmJjc3RfcmVjdl9zdGF0ZXNbaV0gPSBiY3N0X3JlY3Zfc3Rh dGU7IH0NCj4gKw0KPiArc3RhdGljIHN0cnVjdCBidF9iYXNzICpiYXNzX25ldyhzdHJ1Y3QgZ2F0 dF9kYiAqZGIpIHsNCj4gKyAgICAgICBzdHJ1Y3QgYnRfYmFzcyAqYmFzczsNCj4gKyAgICAgICBi dF91dWlkX3QgdXVpZDsNCj4gKyAgICAgICBpbnQgaTsNCj4gKw0KPiArICAgICAgIGlmICghZGIp DQo+ICsgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsNCj4gKw0KPiArICAgICAgIGJhc3MgPSBu ZXcwKHN0cnVjdCBidF9iYXNzLCAxKTsNCj4gKw0KPiArICAgICAgIC8qIFBvcHVsYXRlIERCIHdp dGggQkFTUyBhdHRyaWJ1dGVzICovDQo+ICsgICAgICAgYnRfdXVpZDE2X2NyZWF0ZSgmdXVpZCwg QkFTU19VVUlEKTsNCj4gKyAgICAgICBiYXNzLT5zZXJ2aWNlID0gZ2F0dF9kYl9hZGRfc2Vydmlj ZShkYiwgJnV1aWQsIHRydWUsDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIDMgKyANCj4gKyAoTlVNX0JDU1RfUkVDVl9TVEFURVMgKiAzKSk7DQo+ICsN Cj4gKyAgICAgICBmb3IgKGkgPSAwOyBpIDwgTlVNX0JDU1RfUkVDVl9TVEFURVM7IGkrKykNCj4g KyAgICAgICAgICAgICAgIGJjc3RfcmVjdl9uZXcoYmFzcywgaSk7DQo+ICsNCj4gKyAgICAgICBi dF91dWlkMTZfY3JlYXRlKCZ1dWlkLCBCQ1NUX0FVRElPX1NDQU5fQ1BfVVVJRCk7DQo+ICsgICAg ICAgYmFzcy0+YnJvYWRjYXN0X2F1ZGlvX3NjYW5fY3AgPSBnYXR0X2RiX3NlcnZpY2VfYWRkX2No YXJhY3RlcmlzdGljKGJhc3MtPnNlcnZpY2UsDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnV1aWQsDQo+ICsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQlRfQVRUX1BFUk1fV1JJVEUs DQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgQlRfR0FUVF9DSFJDX1BST1BfV1JJVEUsDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwgYmFzc19icm9hZGNhc3RfYXVkaW9f c2Nhbl9jcF93cml0ZSwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBiYXNzKTsNCj4gKw0KPiArICAgICAgIGdhdHRfZGJfc2VydmljZV9z ZXRfYWN0aXZlKGJhc3MtPnNlcnZpY2UsIHRydWUpOw0KPiArDQo+ICsgICAgICAgcmV0dXJuIGJh c3M7DQo+ICt9DQo+ICsNCj4gIHN0YXRpYyBzdHJ1Y3QgYnRfYmFwX2RiICpiYXBfZGJfbmV3KHN0 cnVjdCBnYXR0X2RiICpkYikgIHsNCj4gICAgICAgICBzdHJ1Y3QgYnRfYmFwX2RiICpiZGI7DQo+ IEBAIC0yMTgyLDYgKzI4NzQsNyBAQCBzdGF0aWMgc3RydWN0IGJ0X2JhcF9kYiAqYmFwX2RiX25l dyhzdHJ1Y3QgZ2F0dF9kYiAqZGIpDQo+ICAgICAgICAgYmRiLT5zaW5rcyA9IHF1ZXVlX25ldygp Ow0KPiAgICAgICAgIGJkYi0+c291cmNlcyA9IHF1ZXVlX25ldygpOw0KPiAgICAgICAgIGJkYi0+ ZW5kcG9pbnRzID0gcXVldWVfbmV3KCk7DQo+ICsgICAgICAgYmRiLT5iYXNzX2Jjc3Rfc291cmNl cyA9IHF1ZXVlX25ldygpOw0KPg0KPiAgICAgICAgIGlmICghYmFwX2RiKQ0KPiAgICAgICAgICAg ICAgICAgYmFwX2RiID0gcXVldWVfbmV3KCk7DQo+IEBAIC0yMTkyLDYgKzI4ODUsOSBAQCBzdGF0 aWMgc3RydWN0IGJ0X2JhcF9kYiAqYmFwX2RiX25ldyhzdHJ1Y3QgZ2F0dF9kYiAqZGIpDQo+ICAg ICAgICAgYmRiLT5hc2NzID0gYXNjc19uZXcoZGIpOw0KPiAgICAgICAgIGJkYi0+YXNjcy0+YmRi ID0gYmRiOw0KPg0KPiArICAgICAgIGJkYi0+YmFzcyA9IGJhc3NfbmV3KGRiKTsNCj4gKyAgICAg ICBiZGItPmJhc3MtPmJkYiA9IGJkYjsNCj4gKw0KPiAgICAgICAgIHF1ZXVlX3B1c2hfdGFpbChi YXBfZGIsIGJkYik7DQo+DQo+ICAgICAgICAgcmV0dXJuIGJkYjsNCj4gQEAgLTIyMzYsNiArMjkz MiwyMCBAQCBzdGF0aWMgc3RydWN0IGJ0X2FzY3MgKmJhcF9nZXRfYXNjcyhzdHJ1Y3QgYnRfYmFw ICpiYXApDQo+ICAgICAgICAgcmV0dXJuIGJhcC0+cmRiLT5hc2NzOw0KPiAgfQ0KPg0KPiArc3Rh dGljIHN0cnVjdCBidF9iYXNzICpiYXBfZ2V0X2Jhc3Moc3RydWN0IGJ0X2JhcCAqYmFwKQ0KPiAr ew0KPiArICAgICAgIGlmICghYmFwKQ0KPiArICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7DQo+ ICsNCj4gKyAgICAgICBpZiAoYmFwLT5yZGItPmJhc3MpDQo+ICsgICAgICAgICAgICAgICByZXR1 cm4gYmFwLT5yZGItPmJhc3M7DQo+ICsNCj4gKyAgICAgICBiYXAtPnJkYi0+YmFzcyA9IG5ldzAo c3RydWN0IGJ0X2Jhc3MsIDEpOw0KPiArICAgICAgIGJhcC0+cmRiLT5iYXNzLT5iZGIgPSBiYXAt PnJkYjsNCj4gKw0KPiArICAgICAgIHJldHVybiBiYXAtPnJkYi0+YmFzczsNCj4gK30NCj4gKw0K PiAgc3RhdGljIGJvb2wgbWF0Y2hfY29kZWMoY29uc3Qgdm9pZCAqZGF0YSwgY29uc3Qgdm9pZCAq dXNlcl9kYXRhKQ0KPiAgew0KPiAgICAgICAgIGNvbnN0IHN0cnVjdCBidF9iYXBfcGFjICpwYWMg PSBkYXRhOw0KPiBAQCAtMjMyMSw2ICszMDMxLDE3IEBAIHN0YXRpYyB2b2lkIGJhcF9wYWNfZnJl ZSh2b2lkICpkYXRhKQ0KPiAgICAgICAgIGZyZWUocGFjKTsNCj4gIH0NCj4NCj4gK3N0YXRpYyB2 b2lkIGJhc3NfYmNzdF9zb3VyY2VfZnJlZSh2b2lkICpkYXRhKQ0KPiArew0KPiArICAgICAgIHN0 cnVjdCBidF9iY3N0X3NvdXJjZSAqYmNzdF9zb3VyY2UgPSBkYXRhOw0KPiArDQo+ICsgICAgICAg Zm9yIChpbnQgaSA9IDA7IGkgPCBiY3N0X3NvdXJjZS0+bnVtX3N1Ymdyb3VwczsgaSsrKQ0KPiAr ICAgICAgICAgICAgICAgZnJlZShiY3N0X3NvdXJjZS0+c3ViZ3JvdXBfZGF0YVtpXS5tZXRhKTsN Cj4gKw0KPiArICAgICAgIGZyZWUoYmNzdF9zb3VyY2UtPnN1Ymdyb3VwX2RhdGEpOw0KPiArICAg ICAgIGZyZWUoYmNzdF9zb3VyY2UpOw0KPiArfQ0KPiArDQo+ICBzdGF0aWMgdm9pZCBiYXBfYWRk X3Npbmsoc3RydWN0IGJ0X2JhcF9wYWMgKnBhYykNCj4gIHsNCj4gICAgICAgICBzdHJ1Y3QgaW92 ZWMgaW92Ow0KPiBAQCAtMjUxMiwxMCArMzIzMywxMiBAQCBzdGF0aWMgdm9pZCBiYXBfZGJfZnJl ZSh2b2lkICpkYXRhKQ0KPiAgICAgICAgIHF1ZXVlX2Rlc3Ryb3koYmRiLT5zaW5rcywgYmFwX3Bh Y19mcmVlKTsNCj4gICAgICAgICBxdWV1ZV9kZXN0cm95KGJkYi0+c291cmNlcywgYmFwX3BhY19m cmVlKTsNCj4gICAgICAgICBxdWV1ZV9kZXN0cm95KGJkYi0+ZW5kcG9pbnRzLCBmcmVlKTsNCj4g KyAgICAgICBxdWV1ZV9kZXN0cm95KGJkYi0+YmFzc19iY3N0X3NvdXJjZXMsIGJhc3NfYmNzdF9z b3VyY2VfZnJlZSk7DQo+ICAgICAgICAgZ2F0dF9kYl91bnJlZihiZGItPmRiKTsNCj4NCj4gICAg ICAgICBmcmVlKGJkYi0+cGFjcyk7DQo+ICAgICAgICAgZnJlZShiZGItPmFzY3MpOw0KPiArICAg ICAgIGZyZWUoYmRiLT5iYXNzKTsNCj4gICAgICAgICBmcmVlKGJkYik7DQo+ICB9DQo+DQo+IEBA IC0yNjYzLDYgKzMzODYsNyBAQCBzdHJ1Y3QgYnRfYmFwICpidF9iYXBfbmV3KHN0cnVjdCBnYXR0 X2RiICpsZGIsIHN0cnVjdCBnYXR0X2RiICpyZGIpDQo+ICAgICAgICAgYmRiLT5zaW5rcyA9IHF1 ZXVlX25ldygpOw0KPiAgICAgICAgIGJkYi0+c291cmNlcyA9IHF1ZXVlX25ldygpOw0KPiAgICAg ICAgIGJkYi0+ZW5kcG9pbnRzID0gcXVldWVfbmV3KCk7DQo+ICsgICAgICAgYmRiLT5iYXNzX2Jj c3Rfc291cmNlcyA9IHF1ZXVlX25ldygpOw0KPg0KPiAgICAgICAgIGJhcC0+cmRiID0gYmRiOw0K Pg0KPiBAQCAtMzY3MCw2ICs0Mzk0LDExOSBAQCBzdGF0aWMgdm9pZCBmb3JlYWNoX2FzY3NfY2hh cihzdHJ1Y3QgZ2F0dF9kYl9hdHRyaWJ1dGUgKmF0dHIsIHZvaWQgKnVzZXJfZGF0YSkNCj4gICAg ICAgICB9DQo+ICB9DQo+DQo+ICtzdGF0aWMgdm9pZCByZWFkX2Jyb2FkY2FzdF9yZWNlaXZlX3N0 YXRlKHN0cnVjdCBidF9iYXAgKmJhcCwgYm9vbCBzdWNjZXNzLCB1aW50OF90IGF0dF9lY29kZSwN Cj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90ICp2YWx1ZSwg dWludDE2X3QgbGVuZ3RoLA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQg KnVzZXJfZGF0YSkNCj4gK3sNCj4gKyAgICAgICBzdHJ1Y3QgZ2F0dF9kYl9hdHRyaWJ1dGUgKmF0 dHIgPSB1c2VyX2RhdGE7DQo+ICsgICAgICAgc3RydWN0IGJ0X2Jjc3Rfc291cmNlICpiY3N0X3Nv dXJjZSA9IE5VTEw7DQo+ICsNCj4gKyAgICAgICBpZiAoIXN1Y2Nlc3MpIHsNCj4gKyAgICAgICAg ICAgICAgIERCRyhiYXAsICJVbmFibGUgdG8gcmVhZCBCcm9hZGNhc3QgUmVjZWl2ZSBTdGF0ZTog ZXJyb3IgMHglMDJ4IiwgYXR0X2Vjb2RlKTsNCj4gKyAgICAgICAgICAgICAgIHJldHVybjsNCj4g KyAgICAgICB9DQo+ICsNCj4gKyAgICAgICBpZiAobGVuZ3RoID09IDApDQo+ICsgICAgICAgICAg ICAgICByZXR1cm47DQo+ICsNCj4gKyAgICAgICBiY3N0X3NvdXJjZSA9IHF1ZXVlX2ZpbmQoYmFw LT5yZGItPmJhc3NfYmNzdF9zb3VyY2VzLA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGJhc3Nfc291cmNlX21hdGNoX2F0dHJpYiwgYXR0cik7DQo+ICsNCj4gKyAgICAgICBpZiAo IWJjc3Rfc291cmNlKSB7DQo+ICsgICAgICAgICAgICAgICBiY3N0X3NvdXJjZSA9IG1hbGxvYyhz aXplb2Yoc3RydWN0IGJ0X2Jjc3Rfc291cmNlKSk7DQo+ICsNCj4gKyAgICAgICAgICAgICAgIGlm IChiY3N0X3NvdXJjZSA9PSBOVUxMKSB7DQo+ICsgICAgICAgICAgICAgICAgICAgICAgIERCRyhi YXAsICJGYWlsZWQgdG8gYWxsb2NhdGUgbWVtb3J5IGZvciBicm9hZGNhc3Qgc291cmNlIik7DQo+ ICsgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsNCj4gKyAgICAgICAgICAgICAgIH0NCj4g Kw0KPiArICAgICAgICAgICAgICAgbWVtc2V0KGJjc3Rfc291cmNlLCAwLCBzaXplb2Yoc3RydWN0 IGJ0X2Jjc3Rfc291cmNlKSk7DQo+ICsgICAgICAgICAgICAgICBiY3N0X3NvdXJjZS0+YXR0ciA9 IGF0dHI7DQo+ICsNCj4gKyAgICAgICAgICAgICAgIHF1ZXVlX3B1c2hfdGFpbChiYXAtPnJkYi0+ YmFzc19iY3N0X3NvdXJjZXMsIGJjc3Rfc291cmNlKTsNCj4gKyAgICAgICB9DQo+ICsNCj4gKyAg ICAgICBpZiAoYmFzc19idWlsZF9iY3N0X3NvdXJjZV9mcm9tX3JlYWRfcnNwKGJjc3Rfc291cmNl LCB2YWx1ZSkpIHsNCj4gKyAgICAgICAgICAgICAgIGZyZWUoYmNzdF9zb3VyY2UpOw0KPiArICAg ICAgICAgICAgICAgREJHKGJhcCwgIkZhaWxlZCB0byBwb3B1bGF0ZSBicm9hZGNhc3Qgc291cmNl IGRhdGEiKTsNCj4gKyAgICAgICAgICAgICAgIHJldHVybjsNCj4gKyAgICAgICB9DQo+ICt9DQo+ ICsNCj4gK3N0YXRpYyB2b2lkIGJjc3RfcmVjdl9zdGF0ZV9ub3RpZnkoc3RydWN0IGJ0X2JhcCAq YmFwLCB1aW50MTZfdCB2YWx1ZV9oYW5kbGUsDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgY29uc3QgdWludDhfdCAqdmFsdWUsIHVpbnQxNl90IGxlbmd0aCwNCj4gKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICB2b2lkICp1c2VyX2RhdGEpDQo+ICt7DQo+ICsgICAgICAg c3RydWN0IGdhdHRfZGJfYXR0cmlidXRlICphdHRyID0gdXNlcl9kYXRhOw0KPiArICAgICAgIHN0 cnVjdCBidF9iY3N0X3NvdXJjZSAqYmNzdF9zb3VyY2UgPSBOVUxMOw0KPiArDQo+ICsgICAgICAg YmNzdF9zb3VyY2UgPSBxdWV1ZV9maW5kKGJhcC0+cmRiLT5iYXNzX2Jjc3Rfc291cmNlcywNCj4g KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYXNzX3NvdXJjZV9tYXRjaF9hdHRyaWIs IGF0dHIpOw0KPiArDQo+ICsgICAgICAgaWYgKCFiY3N0X3NvdXJjZSkgew0KPiArICAgICAgICAg ICAgICAgYmNzdF9zb3VyY2UgPSBtYWxsb2Moc2l6ZW9mKHN0cnVjdCBidF9iY3N0X3NvdXJjZSkp Ow0KPiArDQo+ICsgICAgICAgICAgICAgICBpZiAoYmNzdF9zb3VyY2UgPT0gTlVMTCkgew0KPiAr ICAgICAgICAgICAgICAgICAgICAgICBEQkcoYmFwLCAiRmFpbGVkIHRvIGFsbG9jYXRlIG1lbW9y eSBmb3IgYnJvYWRjYXN0IHNvdXJjZSIpOw0KPiArICAgICAgICAgICAgICAgICAgICAgICByZXR1 cm47DQo+ICsgICAgICAgICAgICAgICB9DQo+ICsNCj4gKyAgICAgICAgICAgICAgIG1lbXNldChi Y3N0X3NvdXJjZSwgMCwgc2l6ZW9mKHN0cnVjdCBidF9iY3N0X3NvdXJjZSkpOw0KPiArICAgICAg ICAgICAgICAgYmNzdF9zb3VyY2UtPmF0dHIgPSBhdHRyOw0KPiArDQo+ICsgICAgICAgICAgICAg ICBxdWV1ZV9wdXNoX3RhaWwoYmFwLT5yZGItPmJhc3NfYmNzdF9zb3VyY2VzLCBiY3N0X3NvdXJj ZSk7DQo+ICsgICAgICAgfQ0KPiArDQo+ICsgICAgICAgaWYgKGJhc3NfYnVpbGRfYmNzdF9zb3Vy Y2VfZnJvbV9ub3RpZihiY3N0X3NvdXJjZSwgdmFsdWUpKSB7DQo+ICsgICAgICAgICAgICAgICBm cmVlKGJjc3Rfc291cmNlKTsNCj4gKyAgICAgICAgICAgICAgIERCRyhiYXAsICJGYWlsZWQgdG8g cG9wdWxhdGUgYnJvYWRjYXN0IHNvdXJjZSBkYXRhIik7DQo+ICsgICAgICAgICAgICAgICByZXR1 cm47DQo+ICsgICAgICAgfQ0KPiArfQ0KPiArDQo+ICtzdGF0aWMgdm9pZCBmb3JlYWNoX2Jhc3Nf Y2hhcihzdHJ1Y3QgZ2F0dF9kYl9hdHRyaWJ1dGUgKmF0dHIsIHZvaWQgKnVzZXJfZGF0YSkNCj4g K3sNCj4gKyAgICAgICBzdHJ1Y3QgYnRfYmFwICpiYXAgPSB1c2VyX2RhdGE7DQo+ICsgICAgICAg dWludDE2X3QgdmFsdWVfaGFuZGxlOw0KPiArICAgICAgIGJ0X3V1aWRfdCB1dWlkLCB1dWlkX2Jj c3RfYXVkaW9fc2Nhbl9jcCwgdXVpZF9iY3N0X3JlY3Zfc3RhdGU7DQo+ICsgICAgICAgc3RydWN0 IGJ0X2Jhc3MgKmJhc3M7DQo+ICsNCj4gKyAgICAgICAvKiBnZXQgYXR0cmlidXRlIHZhbHVlIGhh bmRsZSBhbmQgdXVpZCAqLw0KPiArICAgICAgIGlmICghZ2F0dF9kYl9hdHRyaWJ1dGVfZ2V0X2No YXJfZGF0YShhdHRyLCBOVUxMLCAmdmFsdWVfaGFuZGxlLA0KPiArICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLCBOVUxMLCAmdXVpZCkpDQo+ICsgICAg ICAgICAgICAgICByZXR1cm47DQo+ICsNCj4gKyAgICAgICBidF91dWlkMTZfY3JlYXRlKCZ1dWlk X2Jjc3RfYXVkaW9fc2Nhbl9jcCwgQkNTVF9BVURJT19TQ0FOX0NQX1VVSUQpOw0KPiArICAgICAg IGJ0X3V1aWQxNl9jcmVhdGUoJnV1aWRfYmNzdF9yZWN2X3N0YXRlLCBCQ1NUX1JFQ1ZfU1RBVEVf VVVJRCk7DQo+ICsNCj4gKyAgICAgICBpZiAoIWJ0X3V1aWRfY21wKCZ1dWlkLCAmdXVpZF9iY3N0 X2F1ZGlvX3NjYW5fY3ApKSB7DQo+ICsNCj4gKyAgICAgICAgICAgICAgIC8qIGZvdW5kIEJyb2Fk Y2FzdCBBdWRpbyBTY2FuIENvbnRyb2wgUG9pbnQgY2hhcmFjdGVyaXN0aWMgKi8NCj4gKyAgICAg ICAgICAgICAgIGJhc3MgPSBiYXBfZ2V0X2Jhc3MoYmFwKTsNCj4gKw0KPiArICAgICAgICAgICAg ICAgaWYgKCFiYXNzIHx8IGJhc3MtPmJyb2FkY2FzdF9hdWRpb19zY2FuX2NwKQ0KPiArICAgICAg ICAgICAgICAgICAgICAgICByZXR1cm47DQo+ICsNCj4gKyAgICAgICAgICAgICAgIC8qIHN0b3Jl IGNoYXJhY3RlcmlzdGljIHJlZmVyZW5jZSAqLw0KPiArICAgICAgICAgICAgICAgYmFzcy0+YnJv YWRjYXN0X2F1ZGlvX3NjYW5fY3AgPSBhdHRyOw0KPiArDQo+ICsgICAgICAgICAgICAgICBEQkco YmFwLCAiQnJvYWRjYXN0IEF1ZGlvIFNjYW4gQ29udHJvbCBQb2ludCBmb3VuZDogaGFuZGxlIDB4 JTA0eCIsDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgdmFsdWVfaGFuZGxlKTsNCj4gKyAgICAgICB9DQo+ICsNCj4gKyAgICAgICBpZiAo IWJ0X3V1aWRfY21wKCZ1dWlkLCAmdXVpZF9iY3N0X3JlY3Zfc3RhdGUpKSB7DQo+ICsNCj4gKyAg ICAgICAgICAgICAgIC8qIGZvdW5kIEJyb2FkY2FzdCBSZWNlaXZlIFN0YXRlIGNoYXJhY3Rlcmlz dGljICovDQo+ICsgICAgICAgICAgICAgICBiYXBfcmVhZF92YWx1ZShiYXAsIHZhbHVlX2hhbmRs ZSwgcmVhZF9icm9hZGNhc3RfcmVjZWl2ZV9zdGF0ZSwgYXR0cik7DQo+ICsNCj4gKyAgICAgICAg ICAgICAgICh2b2lkKWJhcF9yZWdpc3Rlcl9ub3RpZnkoYmFwLCB2YWx1ZV9oYW5kbGUsDQo+ICsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJjc3RfcmVjdl9z dGF0ZV9ub3RpZnksIGF0dHIpOw0KPiArDQo+ICsgICAgICAgICAgICAgICBEQkcoYmFwLCAiQnJv YWRjYXN0IHJlY2VpdmUgU3RhdGUgZm91bmQ6IGhhbmRsZSAweCUwNHgiLA0KPiArICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlX2hhbmRs ZSk7DQo+ICsgICAgICAgfQ0KPiArfQ0KPiArDQo+ICBzdGF0aWMgdm9pZCBmb3JlYWNoX2FzY3Nf c2VydmljZShzdHJ1Y3QgZ2F0dF9kYl9hdHRyaWJ1dGUgKmF0dHIsDQo+ICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKnVzZXJfZGF0YSkNCj4gIHsN Cj4gQEAgLTM2ODMsNiArNDUyMCwxOSBAQCBzdGF0aWMgdm9pZCBmb3JlYWNoX2FzY3Nfc2Vydmlj ZShzdHJ1Y3QgZ2F0dF9kYl9hdHRyaWJ1dGUgKmF0dHIsDQo+ICAgICAgICAgZ2F0dF9kYl9zZXJ2 aWNlX2ZvcmVhY2hfY2hhcihhdHRyLCBmb3JlYWNoX2FzY3NfY2hhciwgYmFwKTsNCj4gIH0NCj4N Cj4gK3N0YXRpYyB2b2lkIGZvcmVhY2hfYmFzc19zZXJ2aWNlKHN0cnVjdCBnYXR0X2RiX2F0dHJp YnV0ZSAqYXR0ciwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgdm9pZCAqdXNlcl9kYXRhKQ0KPiArew0KPiArICAgICAgIHN0cnVjdCBidF9iYXAgKmJh cCA9IHVzZXJfZGF0YTsNCj4gKyAgICAgICBzdHJ1Y3QgYnRfYmFzcyAqYmFzcyA9IGJhcF9nZXRf YmFzcyhiYXApOw0KPiArDQo+ICsgICAgICAgLyogc3RvcmUgQkFTUyBhdHRyaWJ1dGUgcmVmZXJl bmNlICovDQo+ICsgICAgICAgYmFzcy0+c2VydmljZSA9IGF0dHI7DQo+ICsNCj4gKyAgICAgICAv KiBoYW5kbGUgQkFTUyBhdHRyaWJ1dGVzICovDQo+ICsgICAgICAgZ2F0dF9kYl9zZXJ2aWNlX2Zv cmVhY2hfY2hhcihhdHRyLCBmb3JlYWNoX2Jhc3NfY2hhciwgYmFwKTsNCj4gK30NCj4gKw0KPiAg c3RhdGljIHZvaWQgYmFwX2VuZHBvaW50X2ZvcmVhY2godm9pZCAqZGF0YSwgdm9pZCAqdXNlcl9k YXRhKQ0KPiAgew0KPiAgICAgICAgIHN0cnVjdCBidF9iYXBfZW5kcG9pbnQgKmVwID0gZGF0YTsN Cj4gQEAgLTM3NzgsNiArNDYyOCw5IEBAIGNsb25lOg0KPiAgICAgICAgIGJ0X3V1aWQxNl9jcmVh dGUoJnV1aWQsIEFTQ1NfVVVJRCk7DQo+ICAgICAgICAgZ2F0dF9kYl9mb3JlYWNoX3NlcnZpY2Uo YmFwLT5yZGItPmRiLCAmdXVpZCwgZm9yZWFjaF9hc2NzX3NlcnZpY2UsIGJhcCk7DQo+DQo+ICsg ICAgICAgYnRfdXVpZDE2X2NyZWF0ZSgmdXVpZCwgQkFTU19VVUlEKTsNCj4gKyAgICAgICBnYXR0 X2RiX2ZvcmVhY2hfc2VydmljZShiYXAtPnJkYi0+ZGIsICZ1dWlkLCBmb3JlYWNoX2Jhc3Nfc2Vy dmljZSwgYmFwKTsNCj4gKw0KPiAgICAgICAgIHJldHVybiB0cnVlOw0KPiAgfQ0KPg0KPiBAQCAt NDgzNCwzICs1Njg3LDIxNSBAQCBib29sIGJ0X2JhcF9zdHJlYW1faW9faXNfY29ubmVjdGluZyhz dHJ1Y3QgYnRfYmFwX3N0cmVhbSAqc3RyZWFtLCBpbnQgKmZkKQ0KPg0KPiAgICAgICAgIHJldHVy biBpby0+Y29ubmVjdGluZzsNCj4gIH0NCj4gKw0KPiArdm9pZCBiYXBfYmlnX2luZm9fYWR2X3Jl cG9ydF9yZWNlaXZlZF9jYihzdHJ1Y3QgZ2F0dF9kYiAqZGIsIHVpbnQ4X3Qgc291cmNlX2lkLA0K PiArICAgICAgICAgICAgICAgc3RydWN0IGJ0X2hjaV9ldnRfbGVfYmlnX2luZm9fYWR2X3JlcG9y dCAqYmlnX2luZm9fYWR2X3JlcG9ydCkNCj4gK3sNCj4gKyAgICAgICBzdHJ1Y3QgYnRfYmFwX2Ri ICpiZGIgPSBiYXBfZ2V0X2RiKGRiKTsNCj4gKyAgICAgICBzdHJ1Y3QgYnRfYmNzdF9zb3VyY2Ug KmJjc3Rfc291cmNlID0gTlVMTDsNCj4gKyAgICAgICBzaXplX3Qgbm90aWZ5X2RhdGFfbGVuID0g MDsNCj4gKyAgICAgICB1aW50OF90ICpub3RpZnlfZGF0YTsNCj4gKyAgICAgICBzdHJ1Y3QgaGNp X3JlcXVlc3QgcnE7DQo+ICsgICAgICAgc3RydWN0IGJ0X2hjaV9ldnRfbGVfYmlnX3N5bmNfZXN0 YWJpbGlzaGVkICpiaWdfc3luY19lc3RhYmxpc2hlZF9ldnQgPSBOVUxMOw0KPiArICAgICAgIGlu dCBiaWdfc3luY19lc3RhYmxpc2hlZF9ldnRfbGVuID0gMDsNCj4gKw0KPiArICAgICAgIGlmICgh cGFfcmVwb3J0KQ0KPiArICAgICAgICAgICAgICAgcmV0dXJuOw0KPiArDQo+ICsgICAgICAgYmNz dF9zb3VyY2UgPSBxdWV1ZV9maW5kKGJkYi0+YmFzc19iY3N0X3NvdXJjZXMsDQo+ICsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYXNzX3NyY19pZF9tYXRjaCwNCj4gKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZzb3VyY2VfaWQpOw0KPiArDQo+ ICsgICAgICAgaWYgKGJjc3Rfc291cmNlID09IE5VTEwpIHsNCj4gKyAgICAgICAgICAgICAgIGZy ZWUocGFfcmVwb3J0KTsNCj4gKyAgICAgICAgICAgICAgIHBhX3JlcG9ydCA9IE5VTEw7DQo+ICsg ICAgICAgICAgICAgICByZXR1cm47DQo+ICsgICAgICAgfQ0KPiArDQo+ICsgICAgICAgYmlnX3N5 bmNfY21kX2xlbiA9IHNpemVvZihzdHJ1Y3QgYnRfaGNpX2NtZF9sZV9iaWdfY3JlYXRlX3N5bmMp DQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBiaWdfaW5mb19hZHZfcmVwb3J0 LT5udW1fYmlzICoNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2Yoc3Ry dWN0IGJ0X2hjaV9iaXNfc3luYyk7DQo+ICsNCj4gKyAgICAgICBmcmVlKGJpZ19zeW5jX2NtZCk7 DQo+ICsgICAgICAgYmlnX3N5bmNfY21kID0gbWFsbG9jKGJpZ19zeW5jX2NtZF9sZW4pOw0KPiAr DQo+ICsgICAgICAgaWYgKCFiaWdfc3luY19jbWQpIHsNCj4gKyAgICAgICAgICAgICAgIGZyZWUo cGFfcmVwb3J0KTsNCj4gKyAgICAgICAgICAgICAgIHBhX3JlcG9ydCA9IE5VTEw7DQo+ICsgICAg ICAgICAgICAgICByZXR1cm47DQo+ICsgICAgICAgfQ0KPiArDQo+ICsgICAgICAgbWVtc2V0KGJp Z19zeW5jX2NtZCwgMCwgYmlnX3N5bmNfY21kX2xlbik7DQo+ICsNCj4gKyAgICAgICBiaWdfc3lu Y19jbWQtPnN5bmNfaGFuZGxlID0gYmlnX2luZm9fYWR2X3JlcG9ydC0+c3luY19oYW5kbGU7DQo+ ICsgICAgICAgYmlnX3N5bmNfY21kLT5lbmNyeXB0aW9uID0gYmlnX2luZm9fYWR2X3JlcG9ydC0+ ZW5jcnlwdGlvbjsNCj4gKyAgICAgICBiaWdfc3luY19jbWQtPnRpbWVvdXQgPSAweDQwMDA7DQo+ ICsgICAgICAgYmlnX3N5bmNfY21kLT5udW1fYmlzID0gYmlnX2luZm9fYWR2X3JlcG9ydC0+bnVt X2JpczsNCj4gKw0KPiArICAgICAgIGJhc3NfZmlsbF9jcmVhdGVfYmlnX3N5bmNfY21kX2Zyb21f cGFfcmVwb3J0KGJpZ19zeW5jX2NtZCk7DQo+ICsNCj4gKyAgICAgICBpZiAoYmlnX2luZm9fYWR2 X3JlcG9ydC0+ZW5jcnlwdGlvbiA9PSAweDAxKSB7DQo+ICsgICAgICAgICAgICAgICBiY3N0X3Nv dXJjZS0+ZW5jcnlwdGlvbiA9IEJUX0JBU1NfQklHX0VOQ19TVEFURV9CQ09ERV9SRVE7DQo+ICsg ICAgICAgfSBlbHNlIHsNCj4gKyAgICAgICAgICAgICAgIGJjc3Rfc291cmNlLT5lbmNyeXB0aW9u ID0gQlRfQkFTU19CSUdfRU5DX1NUQVRFX05PX0VOQzsNCj4gKw0KPiArICAgICAgICAgICAgICAg YmlnX3N5bmNfZXN0YWJsaXNoZWRfZXZ0X2xlbiA9DQo+ICsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgc2l6ZW9mKHN0cnVjdCBidF9oY2lfZXZ0X2xlX2JpZ19zeW5jX2VzdGFiaWxpc2hl ZCkgKw0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJpZ19zeW5jX2NtZC0+bnVt X2JpcyAqIHNpemVvZih1aW50MTZfdCk7DQo+ICsNCj4gKyAgICAgICAgICAgICAgIGJpZ19zeW5j X2VzdGFibGlzaGVkX2V2dCA9IG1hbGxvYyhiaWdfc3luY19lc3RhYmxpc2hlZF9ldnRfbGVuKTsN Cj4gKyAgICAgICAgICAgICAgIGlmIChiaWdfc3luY19lc3RhYmxpc2hlZF9ldnQgPT0gTlVMTCkg ew0KPiArICAgICAgICAgICAgICAgICAgICAgICBmcmVlKHBhX3JlcG9ydCk7DQo+ICsgICAgICAg ICAgICAgICAgICAgICAgIHBhX3JlcG9ydCA9IE5VTEw7DQo+ICsNCj4gKyAgICAgICAgICAgICAg ICAgICAgICAgZnJlZShiaWdfc3luY19jbWQpOw0KPiArICAgICAgICAgICAgICAgICAgICAgICBi aWdfc3luY19jbWQgPSBOVUxMOw0KPiArICAgICAgICAgICAgICAgICAgICAgICBiaWdfc3luY19j bWRfbGVuID0gMDsNCj4gKw0KPiArICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGRvbmU7DQo+ ICsgICAgICAgICAgICAgICB9DQo+ICsNCj4gKyAgICAgICAgICAgICAgIC8qIGNyZWF0ZSBCSUcg c3luYyAqLw0KPiArICAgICAgICAgICAgICAgcnEub2dmICAgICAgICAgID0gT0dGX0xFX0NUTDsN Cj4gKyAgICAgICAgICAgICAgIHJxLm9jZiAgICAgICAgICA9IDB4MDA2QjsNCj4gKyAgICAgICAg ICAgICAgIHJxLmV2ZW50ICAgICAgICA9IEJUX0hDSV9FVlRfTEVfQklHX1NZTkNfRVNUQUJJTElT SEVEOw0KPiArICAgICAgICAgICAgICAgcnEuY3BhcmFtICAgICAgID0gYmlnX3N5bmNfY21kOw0K PiArICAgICAgICAgICAgICAgcnEuY2xlbiAgICAgICAgID0gYmlnX3N5bmNfY21kX2xlbjsNCj4g KyAgICAgICAgICAgICAgIHJxLnJwYXJhbSAgICAgICA9IGJpZ19zeW5jX2VzdGFibGlzaGVkX2V2 dDsNCj4gKyAgICAgICAgICAgICAgIHJxLnJsZW4gICAgICAgICA9IGJpZ19zeW5jX2VzdGFibGlz aGVkX2V2dF9sZW47DQo+ICsNCj4gKyAgICAgICAgICAgICAgIGlmIChoY2lfc2VuZF9yZXEoaGNp X2ZkLCAmcnEsIDApIDwgMCkgew0KPiArICAgICAgICAgICAgICAgICAgICAgICBmcmVlKHBhX3Jl cG9ydCk7DQo+ICsgICAgICAgICAgICAgICAgICAgICAgIHBhX3JlcG9ydCA9IE5VTEw7DQo+ICsN Cj4gKyAgICAgICAgICAgICAgICAgICAgICAgZnJlZShiaWdfc3luY19jbWQpOw0KPiArICAgICAg ICAgICAgICAgICAgICAgICBiaWdfc3luY19jbWQgPSBOVUxMOw0KPiArICAgICAgICAgICAgICAg ICAgICAgICBiaWdfc3luY19jbWRfbGVuID0gMDsNCj4gKw0KPiArICAgICAgICAgICAgICAgICAg ICAgICBmcmVlKGJpZ19zeW5jX2VzdGFibGlzaGVkX2V2dCk7DQo+ICsNCj4gKyAgICAgICAgICAg ICAgICAgICAgICAgZ290byBkb25lOw0KPiArICAgICAgICAgICAgICAgfQ0KPiArDQo+ICsgICAg ICAgICAgICAgICBpZiAoIWJpZ19zeW5jX2VzdGFibGlzaGVkX2V2dC0+c3RhdHVzKQ0KPiArICAg ICAgICAgICAgICAgICAgICAgICBiYXNzX2ZpbGxfYmNzdF9zb3VyY2VfYmlzX3N5bmNfYml0bWFz ayhiY3N0X3NvdXJjZSk7DQo+ICsgICAgICAgfQ0KPiArDQo+ICtkb25lOg0KPiArDQo+ICsgICAg ICAgbm90aWZ5X2RhdGEgPSBiYXNzX2J1aWxkX25vdGlmX2Zyb21fYmNzdF9zb3VyY2UoYmNzdF9z b3VyY2UsDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgJm5vdGlmeV9kYXRhX2xlbik7DQo+ICsNCj4gKyAgICAgICBnYXR0X2RiX2F0dHJp YnV0ZV9ub3RpZnkoYmNzdF9zb3VyY2UtPmF0dHIsICh2b2lkICopbm90aWZ5X2RhdGEsDQo+ICsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm90aWZ5X2RhdGFfbGVuLCBOVUxMKTsNCj4g Kw0KPiArICAgICAgIGZyZWUobm90aWZ5X2RhdGEpOw0KPiArfQ0KPiArDQo+ICt2b2lkIGJhcF9w YV9yZXBvcnRfcmVjZWl2ZWRfY2Ioc3RydWN0IGdhdHRfZGIgKmRiLCB1aW50OF90IHNvdXJjZV9p ZCwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgYnRfaGNpX2xlX3Bh X3JlcG9ydCAqcmVwb3J0KQ0KPiArew0KPiArICAgICAgIHN0cnVjdCBidF9iY3N0X3NvdXJjZSAq YmNzdF9zb3VyY2UgPSBOVUxMOw0KPiArICAgICAgIHN0cnVjdCBidF9iYXBfZGIgKmJkYiA9IGJh cF9nZXRfZGIoZGIpOw0KPiArICAgICAgIHVpbnQ4X3QgcmVwb3J0X2xlbiA9IHNpemVvZihzdHJ1 Y3QgYnRfaGNpX2xlX3BhX3JlcG9ydCkgKw0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICByZXBvcnQtPmRhdGFfbGVuOw0KPiArDQo+ICsgICAgICAgcHJp bnRmKCJSZXBvcnQgbGVuID0gJWRcblxuIiwgcmVwb3J0LT5kYXRhX2xlbik7DQo+ICsNCj4gKyAg ICAgICBmcmVlKHBhX3JlcG9ydCk7DQo+ICsgICAgICAgcGFfcmVwb3J0ID0gbWFsbG9jKHJlcG9y dF9sZW4pOw0KPiArICAgICAgIGlmICghcGFfcmVwb3J0KQ0KPiArICAgICAgICAgICAgICAgcmV0 dXJuOw0KPiArDQo+ICsgICAgICAgbWVtY3B5KHBhX3JlcG9ydCwgcmVwb3J0LCByZXBvcnRfbGVu KTsNCj4gKw0KPiArICAgICAgIGJjc3Rfc291cmNlID0gcXVldWVfZmluZChiZGItPmJhc3NfYmNz dF9zb3VyY2VzLA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFz c19zcmNfaWRfbWF0Y2gsDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAmc291cmNlX2lkKTsNCj4gKw0KPiArICAgICAgIGlmICghYmNzdF9zb3VyY2UpDQo+ICsgICAg ICAgICAgICAgICByZXR1cm47DQo+ICsNCj4gKyAgICAgICBiYXNzX2ZpbGxfYmNzdF9zb3VyY2Vf ZnJvbV9wYV9yZXBvcnQoYmNzdF9zb3VyY2UpOw0KPiArfQ0KPiArDQo+ICtpbnQgYmFwX2V4dF9h ZHZfcmVwb3J0X3JlY2VpdmVkX2NiKHN0cnVjdCBnYXR0X2RiICpkYiwNCj4gKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgYnRfaGNpX2xlX2V4dF9hZHZfcmVwb3J0ICpleHRf YWR2X3JlcG9ydCkNCj4gK3sNCj4gKyAgICAgICBzdHJ1Y3QgYnRfYmNzdF9zb3VyY2UgKmJjc3Rf c291cmNlID0gTlVMTDsNCj4gKyAgICAgICBzdHJ1Y3QgZ2F0dF9kYl9hdHRyaWJ1dGUgKmF0dHIg PSBOVUxMOw0KPiArICAgICAgIHN0cnVjdCBidF9iYXBfZGIgKmJkYiA9IGJhcF9nZXRfZGIoZGIp Ow0KPiArICAgICAgIHN0cnVjdCBidF9hZF9zdHJ1Y3R1cmUgKmFkX3N0cnVjdHVyZTsNCj4gKyAg ICAgICB1aW50MTZfdCB1dWlkOw0KPiArICAgICAgIHVpbnQ4X3QgKmJpZDsNCj4gKw0KPiArICAg ICAgIHN0cnVjdCBpb3ZlYyBpb3YgPSB7DQo+ICsgICAgICAgICAgICAgICAuaW92X2Jhc2UgPSBl eHRfYWR2X3JlcG9ydC0+ZGF0YSwNCj4gKyAgICAgICAgICAgICAgIC5pb3ZfbGVuID0gZXh0X2Fk dl9yZXBvcnQtPmRhdGFfbGVuLA0KPiArICAgICAgIH07DQo+ICsNCj4gKyAgICAgICBiY3N0X3Nv dXJjZSA9IHF1ZXVlX2ZpbmQoYmRiLT5iYXNzX2Jjc3Rfc291cmNlcywNCj4gKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhc3Nfc291cmNlX21hdGNoX3NpZCwNCj4gKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZleHRfYWR2X3JlcG9ydC0+c2lk KTsNCj4gKw0KPiArICAgICAgIGlmIChiY3N0X3NvdXJjZSAhPSBOVUxMKQ0KPiArICAgICAgICAg ICAgICAgcmV0dXJuIC0xOw0KPiArDQo+ICsgICAgICAgYmNzdF9zb3VyY2UgPSBtYWxsb2Moc2l6 ZW9mKHN0cnVjdCBidF9iY3N0X3NvdXJjZSkpOw0KPiArDQo+ICsgICAgICAgaWYgKGJjc3Rfc291 cmNlID09IE5VTEwpDQo+ICsgICAgICAgICAgICAgICByZXR1cm4gLTE7DQo+ICsNCj4gKyAgICAg ICBtZW1zZXQoYmNzdF9zb3VyY2UsIDAsIHNpemVvZihzdHJ1Y3QgYnRfYmNzdF9zb3VyY2UpKTsN Cj4gKw0KPiArICAgICAgIGJjc3Rfc291cmNlLT5pZCA9IG5leHRfYXZhaWxhYmxlX3NvdXJjZV9p ZCsrOw0KPiArICAgICAgIGJjc3Rfc291cmNlLT5hZGRyX3R5cGUgPSBleHRfYWR2X3JlcG9ydC0+ YWRkcl90eXBlOw0KPiArICAgICAgIG1lbWNweShiY3N0X3NvdXJjZS0+YWRkciwgZXh0X2Fkdl9y ZXBvcnQtPmFkZHIsIDYpOw0KPiArICAgICAgIGJjc3Rfc291cmNlLT5zaWQgPSBleHRfYWR2X3Jl cG9ydC0+c2lkOw0KPiArDQo+ICsgICAgICAgYWRfc3RydWN0dXJlID0gdXRpbF9pb3ZfcHVsbF9t ZW0oJmlvdiwgc2l6ZW9mKCphZF9zdHJ1Y3R1cmUpKTsNCj4gKw0KPiArICAgICAgIHdoaWxlIChh ZF9zdHJ1Y3R1cmUpIHsNCj4gKyAgICAgICAgICAgICAgIGlmIChhZF9zdHJ1Y3R1cmUtPmFkX3R5 cGUgPT0gQlRfQURfU0VSVklDRV9EQVRBMTYpIHsNCj4gKyAgICAgICAgICAgICAgICAgICAgICAg dXVpZCA9IGJ0X2dldF9sZTE2KHV0aWxfaW92X3B1bGxfbWVtKCZpb3YsIHNpemVvZih1aW50MTZf dCkpKTsNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgaWYgKHV1aWQgPT0gQkNTVF9BVURJT19B Tk5PVU5DRU1FTlRfU0VSVklDRV9VVUlEKSB7DQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgYmlkID0gdXRpbF9pb3ZfcHVsbF9tZW0oJmlvdiwNCj4gKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCVF9CQVBfQlJPQURDQVNUX0lE X1NJWkUpOw0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lbWNweShiY3N0X3Nv dXJjZS0+YmlkLCBiaWQsDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgQlRfQkFQX0JST0FEQ0FTVF9JRF9TSVpFKTsNCj4gKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBicmVhazsNCj4gKyAgICAgICAgICAgICAgICAgICAgICAg fQ0KPiArICAgICAgICAgICAgICAgfQ0KPiArDQo+ICsgICAgICAgICAgICAgICBhZF9zdHJ1Y3R1 cmUgPSB1dGlsX2lvdl9wdWxsX21lbSgmaW92LCBzaXplb2YoKmFkX3N0cnVjdHVyZSkpOw0KPiAr ICAgICAgIH0NCj4gKw0KPiArICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgTlVNX0JDU1RfUkVD Vl9TVEFURVM7IGkrKykgew0KPiArICAgICAgICAgICAgICAgYXR0ciA9IGJkYi0+YmFzcy0+YmNz dF9yZWN2X3N0YXRlc1tpXS0+YXR0cjsNCj4gKw0KPiArICAgICAgICAgICAgICAgaWYgKHF1ZXVl X2ZpbmQoYmRiLT5iYXNzX2Jjc3Rfc291cmNlcywNCj4gKyAgICAgICAgICAgICAgICAgICAgICAg YmFzc19zb3VyY2VfbWF0Y2hfYXR0cmliLCBhdHRyKSA9PSBOVUxMKSB7DQo+ICsgICAgICAgICAg ICAgICAgICAgICAgIGJjc3Rfc291cmNlLT5hdHRyID0gYXR0cjsNCj4gKyAgICAgICAgICAgICAg ICAgICAgICAgYnJlYWs7DQo+ICsgICAgICAgICAgICAgICB9DQo+ICsgICAgICAgfQ0KPiArDQo+ ICsgICAgICAgcXVldWVfcHVzaF90YWlsKGJkYi0+YmFzc19iY3N0X3NvdXJjZXMsIGJjc3Rfc291 cmNlKTsNCj4gKw0KPiArICAgICAgIHJldHVybiBiY3N0X3NvdXJjZS0+aWQ7DQo+ICt9DQo+ICsN Cj4gK2ludCBidF9iYXBfcmVnaXN0ZXJfZGV2aWNlKGludCBkZXZfaWQpDQo+ICt7DQo+ICsgICAg ICAgLyogT3BlbiBIQ0kgKi8NCj4gKyAgICAgICBoY2lfZmQgPSBoY2lfb3Blbl9kZXYoZGV2X2lk KTsNCj4gKyAgICAgICBpZiAoaGNpX2ZkID09IC0xKQ0KPiArICAgICAgICAgICAgICAgcmV0dXJu IC0xOw0KPiArDQo+ICsgICAgICAgcmV0dXJuIDA7DQo+ICt9DQo+ICsNCj4gK3ZvaWQgYnRfYmFw X3JlZ2lzdGVyX2RiKHN0cnVjdCBnYXR0X2RiICpkYikNCj4gK3sNCj4gKyAgICAgICBiYXBfZGJf bmV3KGRiKTsNCj4gK30NCj4gZGlmZiAtLWdpdCBhL3NyYy9zaGFyZWQvYmFwLmggYi9zcmMvc2hh cmVkL2JhcC5oDQo+IGluZGV4IDQ3YTE1NjM2Yy4uZjcyZWNiZDc2IDEwMDY0NA0KPiAtLS0gYS9z cmMvc2hhcmVkL2JhcC5oDQo+ICsrKyBiL3NyYy9zaGFyZWQvYmFwLmgNCj4gQEAgLTksNiArOSw3 IEBADQo+DQo+ICAjaW5jbHVkZSA8c3RkYm9vbC5oPg0KPiAgI2luY2x1ZGUgPGludHR5cGVzLmg+ DQo+ICsjaW5jbHVkZSAibW9uaXRvci9idC5oIg0KPg0KPiAgI2lmbmRlZiBfX3BhY2tlZA0KPiAg I2RlZmluZSBfX3BhY2tlZCBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKQ0KPiBAQCAtMzMsNiArMzQs OSBAQA0KPiAgI2RlZmluZSBCVF9CQVBfQ09ORklHX1BIWV8yTSAgICAgICAgICAgMHgwMg0KPiAg I2RlZmluZSBCVF9CQVBfQ09ORklHX1BIWV9DT0RFQyAgICAgICAgICAgICAgICAweDAzDQo+DQo+ ICsjZGVmaW5lIEJUX0JBUF9CUk9BRENBU1RfQ09ERV9TSVpFICAgICAxNg0KPiArI2RlZmluZSBC VF9CQVBfQlJPQURDQVNUX0lEX1NJWkUgICAgICAgMw0KPiArDQo+ICBzdHJ1Y3QgYnRfYmFwOw0K PiAgc3RydWN0IGJ0X2JhcF9wYWM7DQo+ICBzdHJ1Y3QgYnRfYmFwX3N0cmVhbTsNCj4gQEAgLTYy LDYgKzY2LDE3IEBAIHN0cnVjdCBidF9iYXBfcW9zIHsNCj4gICAgICAgICB1aW50OF90ICB0YXJn ZXRfbGF0ZW5jeTsgICAgICAgIC8qIFRhcmdldCBMYXRlbmN5ICovDQo+ICB9Ow0KPg0KPiArc3Ry dWN0IGJ0X2FkX3N0cnVjdHVyZSB7DQo+ICsgICAgICAgdWludDhfdCAgYWRfbGVuOw0KPiArICAg ICAgIHVpbnQ4X3QgIGFkX3R5cGU7DQo+ICsgICAgICAgdWludDhfdCAgdmFsdWVbMF07DQo+ICt9 IF9fcGFja2VkOw0KPiArDQo+ICtzdHJ1Y3QgYnRfYnJvYWRjYXN0X2F1ZGlvX2Fubm91bmNlbWVu dCB7DQo+ICsgICAgICAgdWludDE2X3QgdXVpZDsNCj4gKyAgICAgICB1aW50OF90ICBiaWRbQlRf QkFQX0JST0FEQ0FTVF9JRF9TSVpFXTsNCj4gK30gX19wYWNrZWQ7DQo+ICsNCj4gIHR5cGVkZWYg dm9pZCAoKmJ0X2JhcF9yZWFkeV9mdW5jX3QpKHN0cnVjdCBidF9iYXAgKmJhcCwgdm9pZCAqdXNl cl9kYXRhKTsNCj4gIHR5cGVkZWYgdm9pZCAoKmJ0X2JhcF9kZXN0cm95X2Z1bmNfdCkodm9pZCAq dXNlcl9kYXRhKTsNCj4gIHR5cGVkZWYgdm9pZCAoKmJ0X2JhcF9kZWJ1Z19mdW5jX3QpKGNvbnN0 IGNoYXIgKnN0ciwgdm9pZCAqdXNlcl9kYXRhKTsNCj4gQEAgLTI2NywzICsyODIsMTMgQEAgdWlu dDhfdCBidF9iYXBfc3RyZWFtX2lvX2RpcihzdHJ1Y3QgYnRfYmFwX3N0cmVhbSAqc3RyZWFtKTsN Cj4NCj4gIGludCBidF9iYXBfc3RyZWFtX2lvX2Nvbm5lY3Rpbmcoc3RydWN0IGJ0X2JhcF9zdHJl YW0gKnN0cmVhbSwgaW50IGZkKTsNCj4gIGJvb2wgYnRfYmFwX3N0cmVhbV9pb19pc19jb25uZWN0 aW5nKHN0cnVjdCBidF9iYXBfc3RyZWFtICpzdHJlYW0sIGludCAqZmQpOw0KPiArDQo+ICtpbnQg YmFwX2V4dF9hZHZfcmVwb3J0X3JlY2VpdmVkX2NiKHN0cnVjdCBnYXR0X2RiICpkYiwNCj4gKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgYnRfaGNpX2xlX2V4dF9hZHZfcmVw b3J0ICpleHRfYWR2X3JlcG9ydCk7DQo+ICt2b2lkIGJhcF9wYV9yZXBvcnRfcmVjZWl2ZWRfY2Io c3RydWN0IGdhdHRfZGIgKmRiLCB1aW50OF90IHNvdXJjZV9pZCwNCj4gKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBidF9oY2lfbGVfcGFfcmVwb3J0ICpyZXBv cnQpOw0KPiArdm9pZCBiYXBfYmlnX2luZm9fYWR2X3JlcG9ydF9yZWNlaXZlZF9jYihzdHJ1Y3Qg Z2F0dF9kYiAqZGIsIHVpbnQ4X3Qgc291cmNlX2lkLA0KPiArICAgICAgICAgICAgICAgc3RydWN0 IGJ0X2hjaV9ldnRfbGVfYmlnX2luZm9fYWR2X3JlcG9ydCAqYmlnX2luZm9fYWR2X3JlcG9ydCk7 DQo+ICsNCj4gK2ludCBidF9iYXBfcmVnaXN0ZXJfZGV2aWNlKGludCBkZXZfaWQpOw0KPiArdm9p ZCBidF9iYXBfcmVnaXN0ZXJfZGIoc3RydWN0IGdhdHRfZGIgKmRiKTsNCj4gZGlmZiAtLWdpdCBh L3NyYy9zaGFyZWQvYmFzcy5oIGIvc3JjL3NoYXJlZC9iYXNzLmgNCj4gbmV3IGZpbGUgbW9kZSAx MDA2NDQNCj4gaW5kZXggMDAwMDAwMDAwLi5jZGNiNWE3MDANCj4gLS0tIC9kZXYvbnVsbA0KPiAr KysgYi9zcmMvc2hhcmVkL2Jhc3MuaA0KPiBAQCAtMCwwICsxLDQzIEBADQo+ICsvKiBTUERYLUxp Y2Vuc2UtSWRlbnRpZmllcjogTEdQTC0yLjEtb3ItbGF0ZXIgKi8NCj4gKy8qDQo+ICsgKg0KPiAr ICogIEJsdWVaIC0gQmx1ZXRvb3RoIHByb3RvY29sIHN0YWNrIGZvciBMaW51eA0KPiArICoNCj4g KyAqICBDb3B5cmlnaHQgKEMpIDIwMjIgIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJl c2VydmVkLg0KPiArICoNCj4gKyAqLw0KPiArDQo+ICsjZGVmaW5lIE5VTV9CQ1NUX1JFQ1ZfU1RB VEVTICAgICAgICAgICAgICAgICAgICAgICAgICAgMg0KPiArDQo+ICsvKiBBcHBsaWNhdGlvbiBl cnJvciBjb2RlcyAqLw0KPiArI2RlZmluZSBCVF9CQVNTX0VSUk9SX09QQ09ERV9OT1RfU1VQUE9S VEVEICAgICAgICAgICAgIDB4ODANCj4gKw0KPiArI2RlZmluZSBCVF9CQVNTX0VSUk9SX0lOVkFM SURfU09VUkNFX0lEICAgICAgICAgICAgICAgICAgICAgICAgMHg4MQ0KPiArDQo+ICsvKiBQQV9T eW5jX1N0YXRlIHZhbHVlcyAqLw0KPiArI2RlZmluZSBCVF9CQVNTX05PVF9TWU5DSFJPTklaRURf VE9fUEEgICAgICAgICAgICAgICAgIDB4MDANCj4gKyNkZWZpbmUgQlRfQkFTU19TWU5DX0lORk9f UkUgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAxDQo+ICsjZGVmaW5lIEJUX0JBU1NfU1lO Q0hST05JWkVEX1RPX1BBICAgICAgICAgICAgICAgICAgICAgMHgwMg0KPiArI2RlZmluZSBCVF9C QVNTX0ZBSUxFRF9UT19TWU5DSFJPTklaRV9UT19QQSAgICAgICAgICAgIDB4MDMNCj4gKyNkZWZp bmUgQlRfQkFTU19OT19QQVNUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IDB4MDQNCj4gKw0KPiArLyogQklHX0VuY3J5cHRpb24gdmFsdWVzICovDQo+ICsjZGVmaW5lIEJU X0JBU1NfQklHX0VOQ19TVEFURV9OT19FTkMgICAgICAgICAgICAgICAgICAgMHgwMA0KPiArI2Rl ZmluZSBCVF9CQVNTX0JJR19FTkNfU1RBVEVfQkNPREVfUkVRICAgICAgICAgICAgICAgICAgICAg ICAgMHgwMQ0KPiArI2RlZmluZSBCVF9CQVNTX0JJR19FTkNfU1RBVEVfREVDICAgICAgICAgICAg ICAgICAgICAgIDB4MDINCj4gKyNkZWZpbmUgQlRfQkFTU19CSUdfRU5DX1NUQVRFX0JBRF9DT0RF ICAgICAgICAgICAgICAgICAweDAzDQo+ICsNCj4gKy8qDQo+ICsgKiBCcm9hZGNhc3QgQXVkaW8g U2NhbiBDb250cm9sIFBvaW50DQo+ICsgKiBoZWFkZXIgc3RydWN0dXJlDQo+ICsgKi8NCj4gK3N0 cnVjdCBidF9iYXNzX2Jjc3RfYXVkaW9fc2Nhbl9jcF9oZHIgew0KPiArICAgICAgIHVpbnQ4X3Qg b3A7DQo+ICt9IF9fcGFja2VkOw0KPiArDQo+ICsjZGVmaW5lIEJUX0JBU1NfU0VUX0JDU1RfQ09E RSAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwNA0KPiArDQo+ICtzdHJ1Y3QgYnRfYmFzc19z ZXRfYmNzdF9jb2RlX3BhcmFtcyB7DQo+ICsgICAgICAgdWludDhfdCBzb3VyY2VfaWQ7DQo+ICsg ICAgICAgdWludDhfdCBiY3N0X2NvZGVbQlRfQkFQX0JST0FEQ0FTVF9DT0RFX1NJWkVdOw0KPiAr fSBfX3BhY2tlZDsNCj4gLS0NCj4gMi4zNC4xDQo+DQoNCg0KLS0NCkx1aXogQXVndXN0byB2b24g RGVudHoNCg==