Received: by 2002:a05:6a10:22f:0:0:0:0 with SMTP id 15csp3981420pxk; Tue, 8 Sep 2020 07:45:49 -0700 (PDT) X-Google-Smtp-Source: ABdhPJwnqJNQO7gz4YMWkZ4uMxRH6JZHCNipfxuZCbXslMBLwC39EjBMR1oiE7G3YgoOVa//FB2v X-Received: by 2002:a17:906:a18e:: with SMTP id s14mr25992732ejy.168.1599576348945; Tue, 08 Sep 2020 07:45:48 -0700 (PDT) ARC-Seal: i=2; a=rsa-sha256; t=1599576348; cv=pass; d=google.com; s=arc-20160816; b=P6O/HgcSzO9isyy4X4AnKjW/bHN7DvddmVEToEAMJcW2a/NsbxH96zczuTTB4Z0Gri zfaiKFpFcHaOkwaKds5jIY2IkGDdWWqICarYq4VUrM/HT7GyVvQ4Oj9O7n2+UEe7/kSf T/NGTQ1niy9KiDhIaYLjlJWTHgRhfRX4ayF99cCQ/oRo8CJl/slfJusfDimWqwlArVER R7Enrl8Bu+d+PRZDHGzS6D0AU8oxV3jvVKoX7WWH7v1f2TLIw279INphRK8wtpSyfE2M k0K7WIMRibbLZ17lFCLAA92kVRLlpUjW6xICX20O5aYoxcIqZSJeP26eTlHU8+0giNVM Jj9w== ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:dkim-signature:mime-version :content-transfer-encoding:content-id:user-agent:content-language :accept-language:reply-to:in-reply-to:references:message-id:date :thread-index:thread-topic:subject:cc:to:from; bh=9Yd8y0e45Q95D0S5nZTQOcXcNM6nT9LQKRRqVRkC81E=; b=qaF5V/7s0yT1+1uw73bzduegaMJOSCSqjzLK7Jza53jSVyEOFn1hULqnvB3ncLGjPc qu+CpMuHIb4oaiJQkg55fr6F7ZocqaiX5w+rx3wn9GoMUFCkM8lpKSb1rN3CuviSmrg+ 0T5CJ0u3tJSHSOUPwns6a8NJMzneQBHAeDPr/rEmJxLNp6Hi7jczmgC4YmFB0N/1y0Lp /tSEG7uc0pXuckhEzxIom+Z7qDXvaewbGVEXq/z1zzr/e8d9h3CYVnIieG3p1BeGezgy iZq2LI2Bhsx6vSpmVhH6zQGSIoCAnAhphC3O/DLpDeIbC3JQUgebLw2tiEk/F9tgCc++ mN8Q== ARC-Authentication-Results: i=2; mx.google.com; dkim=pass header.i=@nvidia.com header.s=n1 header.b=p739HY+3; arc=pass (i=1 spf=pass spfdomain=nvidia.com dkim=pass dkdomain=nvidia.com dmarc=pass fromdomain=nvidia.com); spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=nvidia.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id g13si11448025ejw.573.2020.09.08.07.45.21; Tue, 08 Sep 2020 07:45:48 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@nvidia.com header.s=n1 header.b=p739HY+3; arc=pass (i=1 spf=pass spfdomain=nvidia.com dkim=pass dkdomain=nvidia.com dmarc=pass fromdomain=nvidia.com); spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=nvidia.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1730189AbgIHOhE (ORCPT + 99 others); Tue, 8 Sep 2020 10:37:04 -0400 Received: from hqnvemgate25.nvidia.com ([216.228.121.64]:8220 "EHLO hqnvemgate25.nvidia.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1729813AbgIHO1E (ORCPT ); Tue, 8 Sep 2020 10:27:04 -0400 Received: from hqpgpgate101.nvidia.com (Not Verified[216.228.121.13]) by hqnvemgate25.nvidia.com (using TLS: TLSv1.2, DES-CBC3-SHA) id ; Tue, 08 Sep 2020 06:47:01 -0700 Received: from hqmail.nvidia.com ([172.20.161.6]) by hqpgpgate101.nvidia.com (PGP Universal service); Tue, 08 Sep 2020 06:47:51 -0700 X-PGP-Universal: processed; by hqpgpgate101.nvidia.com on Tue, 08 Sep 2020 06:47:51 -0700 Received: from HQMAIL101.nvidia.com (172.20.187.10) by HQMAIL101.nvidia.com (172.20.187.10) with Microsoft SMTP Server (TLS) id 15.0.1473.3; Tue, 8 Sep 2020 13:47:50 +0000 Received: from NAM12-DM6-obe.outbound.protection.outlook.com (104.47.59.172) by HQMAIL101.nvidia.com (172.20.187.10) with Microsoft SMTP Server (TLS) id 15.0.1473.3 via Frontend Transport; Tue, 8 Sep 2020 13:47:50 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=Tv+hGq/zhgqlZh9iUdgaeMIa/0p26BBCpCEmqB4A5Rj+ENjVHOr4syHP7ztLokeH0zXpi1ZgHyjugzx/w69rHBZNxclkkzkGKRDQ6qZJ+0OAAegIPYBYGuhsRn3n+/bmhfOHPjfufcGtoBx91wm9mxq9Uh6MXu8DKNwB8FtDpE7bjudV6RgCSf4JcQlGZxl2nFGp6MHPZuY0bQTYCiK9oh0KHXYPY4o2rTezvyl/KTkWbUHXjaiJtd3nefMtnUM/GqAtqs9gzdaysbgdbNV61vCO8NakeBjexBimoTeHKOb5FTToTLUT8ZVg43u8lZIJIKnyd48+L2yHROqhpRHpxg== 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=9Yd8y0e45Q95D0S5nZTQOcXcNM6nT9LQKRRqVRkC81E=; b=WvUeImTT9KpO3d9Lbi0bb2U3mi9kZbgJRySvC9yeKF0nstzwXi/oJsn+QdhZpiH23houqq/7dYp/jp9n9pJQSirSamjhgN2EQwNTSjfE6sLvLscVuApl0wuVRTS/6EhHxGtVb2ZI9awf2QmwSviuMTE/1IuiNq+ocovHZUUuNVnGKns+UetZwONE2NiI/fc0hFkY7yBOycHy462OWHSqyr9pa5EvKEXocJb88tBuQ3jZlxXFBbYv3mGty/WNR2G+ocND6A2OD2ryzPaf8FvsM3kCJgK2Kq/UmF00uUUqxctGiDHczap64+USGGZaz0D/zArF6ztDSbWusgirgDjFrg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=nvidia.com; dmarc=pass action=none header.from=nvidia.com; dkim=pass header.d=nvidia.com; arc=none Received: from BYAPR12MB2823.namprd12.prod.outlook.com (2603:10b6:a03:96::33) by BY5PR12MB4163.namprd12.prod.outlook.com (2603:10b6:a03:202::18) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3370.16; Tue, 8 Sep 2020 13:47:49 +0000 Received: from BYAPR12MB2823.namprd12.prod.outlook.com ([fe80::7dd0:ad41:3d71:679b]) by BYAPR12MB2823.namprd12.prod.outlook.com ([fe80::7dd0:ad41:3d71:679b%6]) with mapi id 15.20.3348.019; Tue, 8 Sep 2020 13:47:49 +0000 From: Nikolay Aleksandrov To: "bridge@lists.linux-foundation.org" , "henrik.bjoernlund@microchip.com" , "davem@davemloft.net" , "linux-kernel@vger.kernel.org" , "jiri@mellanox.com" , "netdev@vger.kernel.org" , Roopa Prabhu , "idosch@mellanox.com" , "kuba@kernel.org" , "UNGLinuxDriver@microchip.com" CC: "horatiu.vultur@microchip.com" Subject: Re: [PATCH RFC 5/7] bridge: cfm: Netlink Interface. Thread-Topic: [PATCH RFC 5/7] bridge: cfm: Netlink Interface. Thread-Index: AQHWgpzPkfUypCpiZEOprnywu2l9m6leyAuA Date: Tue, 8 Sep 2020 13:47:48 +0000 Message-ID: References: <20200904091527.669109-1-henrik.bjoernlund@microchip.com> <20200904091527.669109-6-henrik.bjoernlund@microchip.com> In-Reply-To: <20200904091527.669109-6-henrik.bjoernlund@microchip.com> Reply-To: Nikolay Aleksandrov Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: user-agent: Evolution 3.34.4 (3.34.4-1.fc31) authentication-results: lists.linux-foundation.org; dkim=none (message not signed) header.d=none;lists.linux-foundation.org; dmarc=none action=none header.from=nvidia.com; x-originating-ip: [84.238.136.197] x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: 53d67c79-8b58-44b9-52c9-08d853fdc655 x-ms-traffictypediagnostic: BY5PR12MB4163: x-ms-exchange-transport-forked: True x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers: OLM:8882; x-ms-exchange-senderadcheck: 1 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: L89lRlMo8yfdnFU7td/5W83NDpdg4j9C8R2ghCbRYYK25j4M8yr5nzmSpHrZ5w+5Q4+vouF1IhV5UGqxnjDczCVWpFBdfg5krf/gO6YNZFCMnnbOC0+TLAT598F7DauOmePIuoCGdPI73NoqH2Y+ns7OtdsVE0Dm0dzOoBlcRX7nvHT37TvVbvYm2ihRWTIbsFWN1DEQb9bW9RQ0gRsZSFaB/iQE7zMgS81QEOlCP5EV9+lvgp4SxSEXtpICiRIfDTsXOb2Y7AjBw8AHWFJHh9kI5Z+NjGbrsT+/bPcKVEh7ADL0gBc0IL3NWHfRMWFlZ4Ru5zvgpoMKYv9NlKPjUoGOWIj9Tq8Gp8bH/zVv5LWQJVQKuCF4WU56K3F/Ha2Z x-forefront-antispam-report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:BYAPR12MB2823.namprd12.prod.outlook.com;PTR:;CAT:NONE;SFS:(4636009)(39860400002)(396003)(136003)(366004)(376002)(346002)(66446008)(66476007)(64756008)(76116006)(66946007)(6512007)(6486002)(66556008)(4326008)(8936002)(5660300002)(478600001)(26005)(186003)(71200400001)(2616005)(2906002)(30864003)(86362001)(3450700001)(8676002)(83380400001)(316002)(6506007)(110136005)(91956017)(36756003)(921003)(579004)(559001);DIR:OUT;SFP:1101; x-ms-exchange-antispam-messagedata: uwPXBoRF3zUn/kiV9ZUOdqZTBPxr0zpi18/5lI9daIeRu1lIK432LMGh4dwjmpr1Riecyof01VCtGkoAx0TGI9xqR3Z9v62S9dGqa198dOse50ufEJErsfFfgOcuRyK3ecNLHQ0Zap9XdulNZS9w0Zq7H6UO1/nvJHwmisu/7A1QC/VoHayynaHFJTm3YjEEC8ssgdZ/fxaCrsK08JUJwJOWl497rXwK9RIZEuY2RCf26gziZMYDARqQMuHUZdWVv9wQmxb9B0BdHsOm4qrtoJLS+yB4UeC/JKH/lfIRZrX3VBMiTlKnD+jc5v6ArfoL48gh3mg2PBajIq4ddtXKsjtn1vbpAhuXzhBYOZ/hwiHjD0ocpHqhwcZbsPuG8+rRSMCdZ/7C5A4XMpj3FD8DSf9xZ9tSNW6l7dI63+/bAM7yFtj5A0EzKrfW3A9HPqtX3P4FUE0a9rLNYhH/BO/9/G4Z13rqaOo+tGjbwE0K/BSYfIMOWoE74hkKNumf4EUbgthOvniSCvrQUhzZFIncG1Oo1S4BbziKS3UlDB0GGfAXGF8sWEcySAtdHPEMdkWYDqWKyKyoSxAaqwsKIZfJ/syXo+3xs3MB0u5rybBZBv/nzDNp5QdugeE6JomHeD3P1NncS8UcsnR/EO3RkpXFKA== Content-Type: text/plain; charset="utf-8" Content-ID: <75F4268825AA3446824954705E3DBE8F@namprd12.prod.outlook.com> Content-Transfer-Encoding: base64 MIME-Version: 1.0 X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: BYAPR12MB2823.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 53d67c79-8b58-44b9-52c9-08d853fdc655 X-MS-Exchange-CrossTenant-originalarrivaltime: 08 Sep 2020 13:47:48.9828 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 43083d15-7273-40c1-b7db-39efd9ccc17a X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: SEJE1o1/z9pDSndU6LjSXQjTC66vTQqg51ITRTtmYgAV3hk/631KUOZHWP1ZQlibVlcdU2MRTe7ZcCvh3hAkNg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: BY5PR12MB4163 X-OriginatorOrg: Nvidia.com DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nvidia.com; s=n1; t=1599572821; bh=9Yd8y0e45Q95D0S5nZTQOcXcNM6nT9LQKRRqVRkC81E=; h=X-PGP-Universal:ARC-Seal:ARC-Message-Signature: ARC-Authentication-Results:From:To:CC:Subject:Thread-Topic: Thread-Index:Date:Message-ID:References:In-Reply-To:Reply-To: Accept-Language:Content-Language:X-MS-Has-Attach: X-MS-TNEF-Correlator:user-agent:authentication-results: x-originating-ip:x-ms-publictraffictype: x-ms-office365-filtering-correlation-id:x-ms-traffictypediagnostic: x-ms-exchange-transport-forked:x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers:x-ms-exchange-senderadcheck: x-microsoft-antispam:x-microsoft-antispam-message-info: x-forefront-antispam-report:x-ms-exchange-antispam-messagedata: Content-Type:Content-ID:Content-Transfer-Encoding:MIME-Version: X-MS-Exchange-CrossTenant-AuthAs: X-MS-Exchange-CrossTenant-AuthSource: X-MS-Exchange-CrossTenant-Network-Message-Id: X-MS-Exchange-CrossTenant-originalarrivaltime: X-MS-Exchange-CrossTenant-fromentityheader: X-MS-Exchange-CrossTenant-id:X-MS-Exchange-CrossTenant-mailboxtype: X-MS-Exchange-CrossTenant-userprincipalname: X-MS-Exchange-Transport-CrossTenantHeadersStamped:X-OriginatorOrg; b=p739HY+3dXGv7lOVgjcueA23eYQ+DCewDfPkMtTPHOJeGAkwAGD3rPnC2tiha6/Gt ps8sTDw5yzSRMkSm+RbY7MqHLjIH2m3CNVUvqDmSZwwpIAbcbN+CBVgrXUs6d0TPRq 118IeCzEhDs4ZK+RkdadR/CeBYsU7SQTLwEk2fNb2Kquo5rN00JlfPhSa+JaNvhVvE A69xrIPMU/dfNXu+I2C4xsoI7BgMm6TQABOS1lYoCLYE1IcHvnDZqBnF1qEsxGK58l Ro+ShQACLoYuXIBXIS0tHn/QnwGTViBJwZWuaOWTEKgVZKJo/pDqSauR/iNfa2aEuA TW8uXHBZR+vcg== Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org T24gRnJpLCAyMDIwLTA5LTA0IGF0IDA5OjE1ICswMDAwLCBIZW5yaWsgQmpvZXJubHVuZCB3cm90 ZToNCj4gVGhpcyBpcyB0aGUgaW1wbGVtZW50YXRpb24gb2YgQ0ZNIG5ldGxpbmsgY29uZmlndXJh dGlvbg0KPiBhbmQgc3RhdHVzIGluZm9ybWF0aW9uIGludGVyZmFjZS4NCj4gDQo+IEFkZCBuZXcg bmVzdGVkIG5ldGxpbmsgYXR0cmlidXRlcy4gVGhlc2UgYXR0cmlidXRlcyBhcmUgdXNlZCBieSB0 aGUNCj4gdXNlciBzcGFjZSB0byBjcmVhdGUvZGVsZXRlL2NvbmZpZ3VyZSBDRk0gaW5zdGFuY2Vz IGFuZCBnZXQgc3RhdHVzLg0KPiBBbHNvIHRoZXkgYXJlIHVzZWQgYnkgdGhlIGtlcm5lbCB0byBu b3RpZnkgdGhlIHVzZXIgc3BhY2Ugd2hlbiBjaGFuZ2VzDQo+IGluIGFueSBzdGF0dXMgaGFwcGVu cy4NCltzbmlwXQ0KPiAgCV9fdTY0IHRyYW5zaXRpb25fZndkOw0KPiBkaWZmIC0tZ2l0IGEvaW5j bHVkZS91YXBpL2xpbnV4L3J0bmV0bGluay5oIGIvaW5jbHVkZS91YXBpL2xpbnV4L3J0bmV0bGlu ay5oDQo+IGluZGV4IDliODE0YzkyZGUxMi4uZmRkNDA4ZjZhNWQyIDEwMDY0NA0KPiAtLS0gYS9p bmNsdWRlL3VhcGkvbGludXgvcnRuZXRsaW5rLmgNCj4gKysrIGIvaW5jbHVkZS91YXBpL2xpbnV4 L3J0bmV0bGluay5oDQo+IEBAIC03NzksNiArNzc5LDggQEAgZW51bSB7DQo+ICAjZGVmaW5lIFJU RVhUX0ZJTFRFUl9CUlZMQU5fQ09NUFJFU1NFRAkoMSA8PCAyKQ0KPiAgI2RlZmluZQlSVEVYVF9G SUxURVJfU0tJUF9TVEFUUwkoMSA8PCAzKQ0KPiAgI2RlZmluZSBSVEVYVF9GSUxURVJfTVJQCSgx IDw8IDQpDQo+ICsjZGVmaW5lIFJURVhUX0ZJTFRFUl9DRk1fQ09ORklHCSgxIDw8IDUpDQo+ICsj ZGVmaW5lIFJURVhUX0ZJTFRFUl9DRk1fU1RBVFVTCSgxIDw8IDYpDQo+ICANCj4gIC8qIEVuZCBv ZiBpbmZvcm1hdGlvbiBleHBvcnRlZCB0byB1c2VyIGxldmVsICovDQo+ICANCj4gZGlmZiAtLWdp dCBhL25ldC9icmlkZ2UvTWFrZWZpbGUgYi9uZXQvYnJpZGdlL01ha2VmaWxlDQo+IGluZGV4IGRk YzBhOTE5MjM0OC4uNDcwMjcwMmE3NGQzIDEwMDY0NA0KPiAtLS0gYS9uZXQvYnJpZGdlL01ha2Vm aWxlDQo+ICsrKyBiL25ldC9icmlkZ2UvTWFrZWZpbGUNCj4gQEAgLTI4LDQgKzI4LDQgQEAgb2Jq LSQoQ09ORklHX05FVEZJTFRFUikgKz0gbmV0ZmlsdGVyLw0KPiAgDQo+ICBicmlkZ2UtJChDT05G SUdfQlJJREdFX01SUCkJKz0gYnJfbXJwX3N3aXRjaGRldi5vIGJyX21ycC5vIGJyX21ycF9uZXRs aW5rLm8NCj4gIA0KPiAtYnJpZGdlLSQoQ09ORklHX0JSSURHRV9DRk0pCSs9IGJyX2NmbS5vDQo+ ICticmlkZ2UtJChDT05GSUdfQlJJREdFX0NGTSkJKz0gYnJfY2ZtLm8gYnJfY2ZtX25ldGxpbmsu bw0KPiBkaWZmIC0tZ2l0IGEvbmV0L2JyaWRnZS9icl9jZm1fbmV0bGluay5jIGIvbmV0L2JyaWRn ZS9icl9jZm1fbmV0bGluay5jDQo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQo+IGluZGV4IDAwMDAw MDAwMDAwMC4uNGUzOWFhYjFjZDBiDQo+IC0tLSAvZGV2L251bGwNCj4gKysrIGIvbmV0L2JyaWRn ZS9icl9jZm1fbmV0bGluay5jDQo+IEBAIC0wLDAgKzEsNjg0IEBADQo+ICsvLyBTUERYLUxpY2Vu c2UtSWRlbnRpZmllcjogR1BMLTIuMC1vci1sYXRlcg0KPiArDQo+ICsjaW5jbHVkZSA8bmV0L2dl bmV0bGluay5oPg0KPiArDQo+ICsjaW5jbHVkZSAiYnJfcHJpdmF0ZS5oIg0KPiArI2luY2x1ZGUg ImJyX3ByaXZhdGVfY2ZtLmgiDQo+ICsNCj4gK3N0YXRpYyBpbmxpbmUgc3RydWN0IG1hY19hZGRy IG5sYV9nZXRfbWFjKGNvbnN0IHN0cnVjdCBubGF0dHIgKm5sYSkNCj4gK3sNCj4gKwlzdHJ1Y3Qg bWFjX2FkZHIgbWFjOw0KPiArDQo+ICsJbmxhX21lbWNweSgmbWFjLmFkZHIsIG5sYSwgc2l6ZW9m KG1hYy5hZGRyKSk7DQo+ICsNCj4gKwlyZXR1cm4gbWFjOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMg aW5saW5lIHN0cnVjdCBicl9jZm1fbWFpZCBubGFfZ2V0X21haWQoY29uc3Qgc3RydWN0IG5sYXR0 ciAqbmxhKQ0KPiArew0KPiArCXN0cnVjdCBicl9jZm1fbWFpZCBtYWlkOw0KPiArDQo+ICsJbmxh X21lbWNweSgmbWFpZC5kYXRhLCBubGEsIHNpemVvZihtYWlkLmRhdGEpKTsNCj4gKw0KPiArCXJl dHVybiBtYWlkOw0KPiArfQ0KDQpJTU8sIHRoZXNlIDEtbGluZSBoZWxwZXJzIGRvbid0IHJlYWxs eSBoZWxwIHJlYWRhYmlsaXR5Lg0KDQo+ICsNCj4gK3N0YXRpYyBpbmxpbmUgaW50IG5sYV9wdXRf dTY0KHN0cnVjdCBza19idWZmICpza2IsIGludCBhdHRydHlwZSwgdTY0IHZhbHVlKQ0KPiArew0K PiArCXU2NCB0bXAgPSB2YWx1ZTsNCj4gKw0KPiArCXJldHVybiBubGFfcHV0KHNrYiwgYXR0cnR5 cGUsIHNpemVvZih1NjQpLCAmdG1wKTsNCj4gK30NCg0KV2hhdD8hIFJlYWQgaW5jbHVkZS9uZXQv bmV0bGluay5oDQoNCj4gKw0KPiArc3RhdGljIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5DQo+ICti cl9jZm1fcG9saWN5W0lGTEFfQlJJREdFX0NGTV9NQVggKyAxXSA9IHsNCj4gKwlbSUZMQV9CUklE R0VfQ0ZNX1VOU1BFQ10JCT0geyAudHlwZSA9IE5MQV9SRUpFQ1QgfSwNCj4gKwlbSUZMQV9CUklE R0VfQ0ZNX01FUF9DUkVBVEVdCQk9IHsgLnR5cGUgPSBOTEFfTkVTVEVEIH0sDQo+ICsJW0lGTEFf QlJJREdFX0NGTV9NRVBfREVMRVRFXQkJPSB7IC50eXBlID0gTkxBX05FU1RFRCB9LA0KPiArCVtJ RkxBX0JSSURHRV9DRk1fTUVQX0NPTkZJR10JCT0geyAudHlwZSA9IE5MQV9ORVNURUQgfSwNCj4g KwlbSUZMQV9CUklER0VfQ0ZNX0NDX0NPTkZJR10JCT0geyAudHlwZSA9IE5MQV9ORVNURUQgfSwN Cj4gKwlbSUZMQV9CUklER0VfQ0ZNX0NDX1BFRVJfTUVQX0FERF0JPSB7IC50eXBlID0gTkxBX05F U1RFRCB9LA0KPiArCVtJRkxBX0JSSURHRV9DRk1fQ0NfUEVFUl9NRVBfUkVNT1ZFXQk9IHsgLnR5 cGUgPSBOTEFfTkVTVEVEIH0sDQo+ICsJW0lGTEFfQlJJREdFX0NGTV9DQ19SREldCQk9IHsgLnR5 cGUgPSBOTEFfTkVTVEVEIH0sDQo+ICsJW0lGTEFfQlJJREdFX0NGTV9DQ19DQ01fVFhdCQk9IHsg LnR5cGUgPSBOTEFfTkVTVEVEIH0sDQo+ICt9Ow0KPiArDQo+ICtzdGF0aWMgY29uc3Qgc3RydWN0 IG5sYV9wb2xpY3kNCj4gK2JyX2NmbV9tZXBfY3JlYXRlX3BvbGljeVtJRkxBX0JSSURHRV9DRk1f TUVQX0NSRUFURV9NQVggKyAxXSA9IHsNCj4gKwlbSUZMQV9CUklER0VfQ0ZNX01FUF9DUkVBVEVf VU5TUEVDXQk9IHsgLnR5cGUgPSBOTEFfUkVKRUNUIH0sDQo+ICsJW0lGTEFfQlJJREdFX0NGTV9N RVBfQ1JFQVRFX0lOU1RBTkNFXQk9IHsgLnR5cGUgPSBOTEFfVTMyIH0sDQo+ICsJW0lGTEFfQlJJ REdFX0NGTV9NRVBfQ1JFQVRFX0RPTUFJTl0JPSB7IC50eXBlID0gTkxBX1UzMiB9LA0KPiArCVtJ RkxBX0JSSURHRV9DRk1fTUVQX0NSRUFURV9ESVJFQ1RJT05dCT0geyAudHlwZSA9IE5MQV9VMzIg fSwNCj4gKwlbSUZMQV9CUklER0VfQ0ZNX01FUF9DUkVBVEVfSUZJTkRFWF0JPSB7IC50eXBlID0g TkxBX1UzMiB9LA0KPiArfTsNCj4gKw0KPiArc3RhdGljIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5 DQo+ICticl9jZm1fbWVwX2RlbGV0ZV9wb2xpY3lbSUZMQV9CUklER0VfQ0ZNX01FUF9ERUxFVEVf TUFYICsgMV0gPSB7DQo+ICsJW0lGTEFfQlJJREdFX0NGTV9NRVBfREVMRVRFX1VOU1BFQ10JPSB7 IC50eXBlID0gTkxBX1JFSkVDVCB9LA0KPiArCVtJRkxBX0JSSURHRV9DRk1fTUVQX0RFTEVURV9J TlNUQU5DRV0JPSB7IC50eXBlID0gTkxBX1UzMiB9LA0KPiArfTsNCj4gKw0KPiArc3RhdGljIGNv bnN0IHN0cnVjdCBubGFfcG9saWN5DQo+ICticl9jZm1fbWVwX2NvbmZpZ19wb2xpY3lbSUZMQV9C UklER0VfQ0ZNX01FUF9DT05GSUdfTUFYICsgMV0gPSB7DQo+ICsJW0lGTEFfQlJJREdFX0NGTV9N RVBfQ09ORklHX1VOU1BFQ10JCT0geyAudHlwZSA9IE5MQV9SRUpFQ1QgfSwNCj4gKwlbSUZMQV9C UklER0VfQ0ZNX01FUF9DT05GSUdfSU5TVEFOQ0VdCQk9IHsgLnR5cGUgPSBOTEFfVTMyIH0sDQo+ ICsJW0lGTEFfQlJJREdFX0NGTV9NRVBfQ09ORklHX1VOSUNBU1RfTUFDXQk9IE5MQV9QT0xJQ1lf RVRIX0FERFIsDQo+ICsJW0lGTEFfQlJJREdFX0NGTV9NRVBfQ09ORklHX01ETEVWRUxdCQk9IHsg LnR5cGUgPSBOTEFfVTMyIH0sDQo+ICsJW0lGTEFfQlJJREdFX0NGTV9NRVBfQ09ORklHX01FUElE XQkJPSB7IC50eXBlID0gTkxBX1UzMiB9LA0KPiArfTsNCj4gKw0KPiArc3RhdGljIGNvbnN0IHN0 cnVjdCBubGFfcG9saWN5DQo+ICticl9jZm1fY2NfY29uZmlnX3BvbGljeVtJRkxBX0JSSURHRV9D Rk1fQ0NfQ09ORklHX01BWCArIDFdID0gew0KPiArCVtJRkxBX0JSSURHRV9DRk1fQ0NfQ09ORklH X1VOU1BFQ10JCT0geyAudHlwZSA9IE5MQV9SRUpFQ1QgfSwNCj4gKwlbSUZMQV9CUklER0VfQ0ZN X0NDX0NPTkZJR19JTlNUQU5DRV0JCT0geyAudHlwZSA9IE5MQV9VMzIgfSwNCj4gKwlbSUZMQV9C UklER0VfQ0ZNX0NDX0NPTkZJR19FTkFCTEVdCQk9IHsgLnR5cGUgPSBOTEFfVTMyIH0sDQo+ICsJ W0lGTEFfQlJJREdFX0NGTV9DQ19DT05GSUdfRVhQX0lOVEVSVkFMXQk9IHsgLnR5cGUgPSBOTEFf VTMyIH0sDQo+ICsJW0lGTEFfQlJJREdFX0NGTV9DQ19DT05GSUdfRVhQX01BSURdCT0gew0KPiAr CS50eXBlID0gTkxBX0JJTkFSWSwgLmxlbiA9IENGTV9NQUlEX0xFTkdUSCB9LA0KPiArfTsNCj4g Kw0KPiArc3RhdGljIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5DQo+ICticl9jZm1fY2NfcGVlcl9t ZXBfcG9saWN5W0lGTEFfQlJJREdFX0NGTV9DQ19QRUVSX01FUF9NQVggKyAxXSA9IHsNCj4gKwlb SUZMQV9CUklER0VfQ0ZNX0NDX1BFRVJfTUVQX1VOU1BFQ10JPSB7IC50eXBlID0gTkxBX1JFSkVD VCB9LA0KPiArCVtJRkxBX0JSSURHRV9DRk1fQ0NfUEVFUl9NRVBfSU5TVEFOQ0VdCT0geyAudHlw ZSA9IE5MQV9VMzIgfSwNCj4gKwlbSUZMQV9CUklER0VfQ0ZNX0NDX1BFRVJfTUVQSURdCQk9IHsg LnR5cGUgPSBOTEFfVTMyIH0sDQo+ICt9Ow0KPiArDQo+ICtzdGF0aWMgY29uc3Qgc3RydWN0IG5s YV9wb2xpY3kNCj4gK2JyX2NmbV9jY19yZGlfcG9saWN5W0lGTEFfQlJJREdFX0NGTV9DQ19SRElf TUFYICsgMV0gPSB7DQo+ICsJW0lGTEFfQlJJREdFX0NGTV9DQ19SRElfVU5TUEVDXQkJPSB7IC50 eXBlID0gTkxBX1JFSkVDVCB9LA0KPiArCVtJRkxBX0JSSURHRV9DRk1fQ0NfUkRJX0lOU1RBTkNF XQk9IHsgLnR5cGUgPSBOTEFfVTMyIH0sDQo+ICsJW0lGTEFfQlJJREdFX0NGTV9DQ19SRElfUkRJ XQkJPSB7IC50eXBlID0gTkxBX1UzMiB9LA0KPiArfTsNCj4gKw0KPiArc3RhdGljIGNvbnN0IHN0 cnVjdCBubGFfcG9saWN5DQo+ICticl9jZm1fY2NfY2NtX3R4X3BvbGljeVtJRkxBX0JSSURHRV9D Rk1fQ0NfQ0NNX1RYX01BWCArIDFdID0gew0KPiArCVtJRkxBX0JSSURHRV9DRk1fQ0NfQ0NNX1RY X1VOU1BFQ10JCT0geyAudHlwZSA9IE5MQV9SRUpFQ1QgfSwNCj4gKwlbSUZMQV9CUklER0VfQ0ZN X0NDX0NDTV9UWF9JTlNUQU5DRV0JCT0geyAudHlwZSA9IE5MQV9VMzIgfSwNCj4gKwlbSUZMQV9C UklER0VfQ0ZNX0NDX0NDTV9UWF9ETUFDXQkJPSBOTEFfUE9MSUNZX0VUSF9BRERSLA0KPiArCVtJ RkxBX0JSSURHRV9DRk1fQ0NfQ0NNX1RYX1NFUV9OT19VUERBVEVdCT0geyAudHlwZSA9IE5MQV9V MzIgfSwNCj4gKwlbSUZMQV9CUklER0VfQ0ZNX0NDX0NDTV9UWF9QRVJJT0RdCQk9IHsgLnR5cGUg PSBOTEFfVTMyIH0sDQo+ICsJW0lGTEFfQlJJREdFX0NGTV9DQ19DQ01fVFhfSUZfVExWXQkJPSB7 IC50eXBlID0gTkxBX1UzMiB9LA0KPiArCVtJRkxBX0JSSURHRV9DRk1fQ0NfQ0NNX1RYX0lGX1RM Vl9WQUxVRV0JPSB7IC50eXBlID0gTkxBX1U4IH0sDQo+ICsJW0lGTEFfQlJJREdFX0NGTV9DQ19D Q01fVFhfUE9SVF9UTFZdCQk9IHsgLnR5cGUgPSBOTEFfVTMyIH0sDQo+ICsJW0lGTEFfQlJJREdF X0NGTV9DQ19DQ01fVFhfUE9SVF9UTFZfVkFMVUVdCT0geyAudHlwZSA9IE5MQV9VOCB9LA0KPiAr fTsNCj4gKw0KPiArc3RhdGljIGludCBicl9tZXBfY3JlYXRlX3BhcnNlKHN0cnVjdCBuZXRfYnJp ZGdlICpiciwgc3RydWN0IG5sYXR0ciAqYXR0ciwNCj4gKwkJCSAgICAgICBzdHJ1Y3QgbmV0bGlu a19leHRfYWNrICpleHRhY2spDQo+ICt7DQo+ICsJc3RydWN0IG5sYXR0ciAqdGJbSUZMQV9CUklE R0VfQ0ZNX01FUF9DUkVBVEVfTUFYICsgMV07DQo+ICsJc3RydWN0IGJyX2NmbV9tZXBfY3JlYXRl IGNyZWF0ZTsNCj4gKwl1MzIgaW5zdGFuY2U7DQo+ICsJaW50IGVycjsNCj4gKw0KPiArCWVyciA9 IG5sYV9wYXJzZV9uZXN0ZWQodGIsIElGTEFfQlJJREdFX0NGTV9NRVBfQ1JFQVRFX01BWCwgYXR0 ciwNCj4gKwkJCSAgICAgICBicl9jZm1fbWVwX2NyZWF0ZV9wb2xpY3ksIGV4dGFjayk7DQo+ICsJ aWYgKGVycikNCj4gKwkJcmV0dXJuIGVycjsNCj4gKw0KPiArCWlmICghdGJbSUZMQV9CUklER0Vf Q0ZNX01FUF9DUkVBVEVfSU5TVEFOQ0VdIHx8DQo+ICsJICAgICF0YltJRkxBX0JSSURHRV9DRk1f TUVQX0NSRUFURV9ET01BSU5dIHx8DQo+ICsJICAgICF0YltJRkxBX0JSSURHRV9DRk1fTUVQX0NS RUFURV9ESVJFQ1RJT05dIHx8DQo+ICsJICAgICF0YltJRkxBX0JSSURHRV9DRk1fTUVQX0NSRUFU RV9JRklOREVYXSkgew0KPiArCQlOTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLA0KPiArCQkJCSAg ICJNaXNzaW5nIGF0dHJpYnV0ZTogSU5TVEFOQ0Ugb3IgRE9NQUlOIG9yIERJUkVDVElPTiBvciBW SUQgb3IgSUZJTkRFWCIpOw0KDQpCcmVhayB0aGVzZSBpbnRvIHNlcGFyYXRlIGVycm9ycy4NCg0K PiArCQlyZXR1cm4gLUVJTlZBTDsNCj4gKwl9DQo+ICsNCj4gKwltZW1zZXQoJmNyZWF0ZSwgMCwg c2l6ZW9mKGNyZWF0ZSkpOw0KPiArDQo+ICsJaW5zdGFuY2UgPSAgbmxhX2dldF91MzIodGJbSUZM QV9CUklER0VfQ0ZNX01FUF9DUkVBVEVfSU5TVEFOQ0VdKTsNCj4gKwljcmVhdGUuZG9tYWluID0g bmxhX2dldF91MzIodGJbSUZMQV9CUklER0VfQ0ZNX01FUF9DUkVBVEVfRE9NQUlOXSk7DQo+ICsJ Y3JlYXRlLmRpcmVjdGlvbiA9IG5sYV9nZXRfdTMyKHRiW0lGTEFfQlJJREdFX0NGTV9NRVBfQ1JF QVRFX0RJUkVDVElPTl0pOw0KPiArCWNyZWF0ZS5pZmluZGV4ID0gbmxhX2dldF91MzIodGJbSUZM QV9CUklER0VfQ0ZNX01FUF9DUkVBVEVfSUZJTkRFWF0pOw0KPiArDQo+ICsJcmV0dXJuIGJyX2Nm bV9tZXBfY3JlYXRlKGJyLCBpbnN0YW5jZSwgJmNyZWF0ZSwgZXh0YWNrKTsNCj4gK30NCj4gKw0K PiArc3RhdGljIGludCBicl9tZXBfZGVsZXRlX3BhcnNlKHN0cnVjdCBuZXRfYnJpZGdlICpiciwg c3RydWN0IG5sYXR0ciAqYXR0ciwNCj4gKwkJCSAgICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNr ICpleHRhY2spDQo+ICt7DQo+ICsJc3RydWN0IG5sYXR0ciAqdGJbSUZMQV9CUklER0VfQ0ZNX01F UF9ERUxFVEVfTUFYICsgMV07DQo+ICsJdTMyIGluc3RhbmNlOw0KPiArCWludCBlcnI7DQo+ICsN Cj4gKwllcnIgPSBubGFfcGFyc2VfbmVzdGVkKHRiLCBJRkxBX0JSSURHRV9DRk1fTUVQX0RFTEVU RV9NQVgsIGF0dHIsDQo+ICsJCQkgICAgICAgYnJfY2ZtX21lcF9kZWxldGVfcG9saWN5LCBleHRh Y2spOw0KPiArCWlmIChlcnIpDQo+ICsJCXJldHVybiBlcnI7DQo+ICsNCj4gKwlpZiAoIXRiW0lG TEFfQlJJREdFX0NGTV9NRVBfQ1JFQVRFX0lOU1RBTkNFXSkgew0KPiArCQlOTF9TRVRfRVJSX01T R19NT0QoZXh0YWNrLA0KPiArCQkJCSAgICJNaXNzaW5nIGF0dHJpYnV0ZTogSU5TVEFOQ0UiKTsN Cg0KIk1pc3NpbmcgaW5zdGFuY2UgYXR0cmlidXRlIi4gU2FtZSBmb3IgYWxsIHNpbWlsYXIgbWVz c2FnZXMuDQoNCj4gKwkJcmV0dXJuIC1FSU5WQUw7DQo+ICsJfQ0KPiArDQo+ICsJaW5zdGFuY2Ug PSAgbmxhX2dldF91MzIodGJbSUZMQV9CUklER0VfQ0ZNX01FUF9DUkVBVEVfSU5TVEFOQ0VdKTsN Cj4gKw0KPiArCXJldHVybiBicl9jZm1fbWVwX2RlbGV0ZShiciwgaW5zdGFuY2UsIGV4dGFjayk7 DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyBpbnQgYnJfbWVwX2NvbmZpZ19wYXJzZShzdHJ1Y3QgbmV0 X2JyaWRnZSAqYnIsIHN0cnVjdCBubGF0dHIgKmF0dHIsDQo+ICsJCQkgICAgICAgc3RydWN0IG5l dGxpbmtfZXh0X2FjayAqZXh0YWNrKQ0KPiArew0KPiArCXN0cnVjdCBubGF0dHIgKnRiW0lGTEFf QlJJREdFX0NGTV9NRVBfQ09ORklHX01BWCArIDFdOw0KPiArCXN0cnVjdCBicl9jZm1fbWVwX2Nv bmZpZyBjb25maWc7DQo+ICsJdTMyIGluc3RhbmNlOw0KPiArCWludCBlcnI7DQo+ICsNCj4gKwll cnIgPSBubGFfcGFyc2VfbmVzdGVkKHRiLCBJRkxBX0JSSURHRV9DRk1fTUVQX0NPTkZJR19NQVgs IGF0dHIsDQo+ICsJCQkgICAgICAgYnJfY2ZtX21lcF9jb25maWdfcG9saWN5LCBleHRhY2spOw0K PiArCWlmIChlcnIpDQo+ICsJCXJldHVybiBlcnI7DQo+ICsNCj4gKwlpZiAoIXRiW0lGTEFfQlJJ REdFX0NGTV9NRVBfQ09ORklHX0lOU1RBTkNFXSB8fA0KPiArCSAgICAhdGJbSUZMQV9CUklER0Vf Q0ZNX01FUF9DT05GSUdfVU5JQ0FTVF9NQUNdIHx8DQo+ICsJICAgICF0YltJRkxBX0JSSURHRV9D Rk1fTUVQX0NPTkZJR19NRExFVkVMXSB8fA0KPiArCSAgICAhdGJbSUZMQV9CUklER0VfQ0ZNX01F UF9DT05GSUdfTUVQSURdKSB7DQo+ICsJCU5MX1NFVF9FUlJfTVNHX01PRChleHRhY2ssDQo+ICsJ CQkJICAgIk1pc3NpbmcgYXR0cmlidXRlOiBJTlNUQU5DRSBvciBVTklDQVNUX01BQyBvciBNRExF VkVMIG9yIE1FUElEIG9yIFZJRCIpOw0KDQpCcmVhayB0aGVzZSBpbnRvIHNlcGFyYXRlIGVycm9y cy4NCg0KPiArCQlyZXR1cm4gLUVJTlZBTDsNCj4gKwl9DQo+ICsNCj4gKwltZW1zZXQoJmNvbmZp ZywgMCwgc2l6ZW9mKGNvbmZpZykpOw0KPiArDQo+ICsJaW5zdGFuY2UgPSAgbmxhX2dldF91MzIo dGJbSUZMQV9CUklER0VfQ0ZNX01FUF9DT05GSUdfSU5TVEFOQ0VdKTsNCj4gKwljb25maWcudW5p Y2FzdF9tYWMgPSBubGFfZ2V0X21hYyh0YltJRkxBX0JSSURHRV9DRk1fTUVQX0NPTkZJR19VTklD QVNUX01BQ10pOw0KPiArCWNvbmZpZy5tZGxldmVsID0gbmxhX2dldF91MzIodGJbSUZMQV9CUklE R0VfQ0ZNX01FUF9DT05GSUdfTURMRVZFTF0pOw0KPiArCWNvbmZpZy5tZXBpZCA9IG5sYV9nZXRf dTMyKHRiW0lGTEFfQlJJREdFX0NGTV9NRVBfQ09ORklHX01FUElEXSk7DQo+ICsJY29uZmlnLnZp ZCA9IDA7DQo+ICsNCj4gKwlyZXR1cm4gYnJfY2ZtX21lcF9jb25maWdfc2V0KGJyLCBpbnN0YW5j ZSwgJmNvbmZpZywgZXh0YWNrKTsNCj4gK30NCj4gKw0KPiArc3RhdGljIGludCBicl9jY19jb25m aWdfcGFyc2Uoc3RydWN0IG5ldF9icmlkZ2UgKmJyLCBzdHJ1Y3QgbmxhdHRyICphdHRyLA0KPiAr CQkJICAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKQ0KPiArew0KPiArCXN0cnVj dCBubGF0dHIgKnRiW0lGTEFfQlJJREdFX0NGTV9DQ19DT05GSUdfTUFYICsgMV07DQo+ICsJc3Ry dWN0IGJyX2NmbV9jY19jb25maWcgY29uZmlnOw0KPiArCXUzMiBpbnN0YW5jZTsNCj4gKwlpbnQg ZXJyOw0KPiArDQo+ICsJZXJyID0gbmxhX3BhcnNlX25lc3RlZCh0YiwgSUZMQV9CUklER0VfQ0ZN X0NDX0NPTkZJR19NQVgsIGF0dHIsDQo+ICsJCQkgICAgICAgYnJfY2ZtX2NjX2NvbmZpZ19wb2xp Y3ksIGV4dGFjayk7DQo+ICsJaWYgKGVycikNCj4gKwkJcmV0dXJuIGVycjsNCj4gKw0KPiArCWlm ICghdGJbSUZMQV9CUklER0VfQ0ZNX0NDX0NPTkZJR19JTlNUQU5DRV0gfHwNCj4gKwkgICAgIXRi W0lGTEFfQlJJREdFX0NGTV9DQ19DT05GSUdfRU5BQkxFXSB8fA0KPiArCSAgICAhdGJbSUZMQV9C UklER0VfQ0ZNX0NDX0NPTkZJR19FWFBfSU5URVJWQUxdIHx8DQo+ICsJICAgICF0YltJRkxBX0JS SURHRV9DRk1fQ0NfQ09ORklHX0VYUF9NQUlEXSkgew0KPiArCQlOTF9TRVRfRVJSX01TR19NT0Qo ZXh0YWNrLA0KPiArCQkJCSAgICJNaXNzaW5nIGF0dHJpYnV0ZTogSU5TVEFOQ0Ugb3IgRU5BQkxF IG9yIElOVEVSVkFMIG9yIFBSSU9SSVRZIG9yIE1BSUQiKTsNCg0KQnJlYWsgdGhlc2UgaW50byBz ZXBhcmF0ZSBlcnJvcnMuDQoNCj4gKwkJcmV0dXJuIC1FSU5WQUw7DQo+ICsJfQ0KPiArDQo+ICsJ bWVtc2V0KCZjb25maWcsIDAsIHNpemVvZihjb25maWcpKTsNCj4gKw0KPiArCWluc3RhbmNlID0g IG5sYV9nZXRfdTMyKHRiW0lGTEFfQlJJREdFX0NGTV9DQ19DT05GSUdfSU5TVEFOQ0VdKTsNCj4g Kwljb25maWcuZW5hYmxlID0gbmxhX2dldF91MzIodGJbSUZMQV9CUklER0VfQ0ZNX0NDX0NPTkZJ R19FTkFCTEVdKTsNCj4gKwljb25maWcuZXhwX2ludGVydmFsID0gbmxhX2dldF91MzIodGJbSUZM QV9CUklER0VfQ0ZNX0NDX0NPTkZJR19FWFBfSU5URVJWQUxdKTsNCj4gKwljb25maWcuZXhwX3By aW9yaXR5ID0gMDsNCj4gKwljb25maWcuZXhwX21haWQgPSBubGFfZ2V0X21haWQodGJbSUZMQV9C UklER0VfQ0ZNX0NDX0NPTkZJR19FWFBfTUFJRF0pOw0KPiArDQo+ICsJcmV0dXJuIGJyX2NmbV9j Y19jb25maWdfc2V0KGJyLCBpbnN0YW5jZSwgJmNvbmZpZywgZXh0YWNrKTsNCj4gK30NCj4gKw0K PiArc3RhdGljIGludCBicl9jY19wZWVyX21lcF9hZGRfcGFyc2Uoc3RydWN0IG5ldF9icmlkZ2Ug KmJyLCBzdHJ1Y3QgbmxhdHRyICphdHRyLA0KPiArCQkJCSAgICBzdHJ1Y3QgbmV0bGlua19leHRf YWNrICpleHRhY2spDQo+ICt7DQo+ICsJc3RydWN0IG5sYXR0ciAqdGJbSUZMQV9CUklER0VfQ0ZN X0NDX1BFRVJfTUVQX01BWCArIDFdOw0KPiArCXUzMiBpbnN0YW5jZSwgcGVlcl9tZXBfaWQ7DQo+ ICsJaW50IGVycjsNCj4gKw0KPiArCWVyciA9IG5sYV9wYXJzZV9uZXN0ZWQodGIsIElGTEFfQlJJ REdFX0NGTV9DQ19QRUVSX01FUF9NQVgsIGF0dHIsDQo+ICsJCQkgICAgICAgYnJfY2ZtX2NjX3Bl ZXJfbWVwX3BvbGljeSwgZXh0YWNrKTsNCj4gKwlpZiAoZXJyKQ0KPiArCQlyZXR1cm4gZXJyOw0K PiArDQo+ICsJaWYgKCF0YltJRkxBX0JSSURHRV9DRk1fQ0NfUEVFUl9NRVBfSU5TVEFOQ0VdIHx8 DQo+ICsJICAgICF0YltJRkxBX0JSSURHRV9DRk1fQ0NfUEVFUl9NRVBJRF0pIHsNCj4gKwkJTkxf U0VUX0VSUl9NU0dfTU9EKGV4dGFjaywNCj4gKwkJCQkgICAiTWlzc2luZyBhdHRyaWJ1dGU6IElO U1RBTkNFIG9yIFBFRVJfTUVQX0lEIik7DQoNCkJyZWFrIHRoZXNlIGludG8gc2VwYXJhdGUgZXJy b3JzLg0KDQo+ICsJCXJldHVybiAtRUlOVkFMOw0KPiArCX0NCj4gKw0KPiArCWluc3RhbmNlID0g IG5sYV9nZXRfdTMyKHRiW0lGTEFfQlJJREdFX0NGTV9DQ19QRUVSX01FUF9JTlNUQU5DRV0pOw0K PiArCXBlZXJfbWVwX2lkID0gIG5sYV9nZXRfdTMyKHRiW0lGTEFfQlJJREdFX0NGTV9DQ19QRUVS X01FUElEXSk7DQo+ICsNCj4gKwlyZXR1cm4gYnJfY2ZtX2NjX3BlZXJfbWVwX2FkZChiciwgaW5z dGFuY2UsIHBlZXJfbWVwX2lkLCBleHRhY2spOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgaW50IGJy X2NjX3BlZXJfbWVwX3JlbW92ZV9wYXJzZShzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsIHN0cnVjdCBu bGF0dHIgKmF0dHIsDQo+ICsJCQkJICAgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFj aykNCj4gK3sNCj4gKwlzdHJ1Y3QgbmxhdHRyICp0YltJRkxBX0JSSURHRV9DRk1fQ0NfUEVFUl9N RVBfTUFYICsgMV07DQo+ICsJdTMyIGluc3RhbmNlLCBwZWVyX21lcF9pZDsNCj4gKwlpbnQgZXJy Ow0KPiArDQo+ICsJZXJyID0gbmxhX3BhcnNlX25lc3RlZCh0YiwgSUZMQV9CUklER0VfQ0ZNX0ND X1BFRVJfTUVQX01BWCwgYXR0ciwNCj4gKwkJCSAgICAgICBicl9jZm1fY2NfcGVlcl9tZXBfcG9s aWN5LCBleHRhY2spOw0KPiArCWlmIChlcnIpDQo+ICsJCXJldHVybiBlcnI7DQo+ICsNCj4gKwlp ZiAoIXRiW0lGTEFfQlJJREdFX0NGTV9DQ19QRUVSX01FUF9JTlNUQU5DRV0gfHwNCj4gKwkgICAg IXRiW0lGTEFfQlJJREdFX0NGTV9DQ19QRUVSX01FUElEXSkgew0KPiArCQlOTF9TRVRfRVJSX01T R19NT0QoZXh0YWNrLA0KPiArCQkJCSAgICJNaXNzaW5nIGF0dHJpYnV0ZTogSU5TVEFOQ0Ugb3Ig UEVFUl9NRVBfSUQiKTsNCg0KQnJlYWsgdGhlc2UgaW50byBzZXBhcmF0ZSBlcnJvcnMuDQoNCj4g KwkJcmV0dXJuIC1FSU5WQUw7DQo+ICsJfQ0KPiArDQo+ICsJaW5zdGFuY2UgPSAgbmxhX2dldF91 MzIodGJbSUZMQV9CUklER0VfQ0ZNX0NDX1BFRVJfTUVQX0lOU1RBTkNFXSk7DQo+ICsJcGVlcl9t ZXBfaWQgPSAgbmxhX2dldF91MzIodGJbSUZMQV9CUklER0VfQ0ZNX0NDX1BFRVJfTUVQSURdKTsN Cj4gKw0KPiArCXJldHVybiBicl9jZm1fY2NfcGVlcl9tZXBfcmVtb3ZlKGJyLCBpbnN0YW5jZSwg cGVlcl9tZXBfaWQsIGV4dGFjayk7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyBpbnQgYnJfY2NfcmRp X3BhcnNlKHN0cnVjdCBuZXRfYnJpZGdlICpiciwgc3RydWN0IG5sYXR0ciAqYXR0ciwNCj4gKwkJ CSAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaykNCj4gK3sNCj4gKwlzdHJ1Y3Qgbmxh dHRyICp0YltJRkxBX0JSSURHRV9DRk1fQ0NfUkRJX01BWCArIDFdOw0KPiArCXUzMiBpbnN0YW5j ZSwgcmRpOw0KPiArCWludCBlcnI7DQo+ICsNCj4gKwllcnIgPSBubGFfcGFyc2VfbmVzdGVkKHRi LCBJRkxBX0JSSURHRV9DRk1fQ0NfUkRJX01BWCwgYXR0ciwNCj4gKwkJCSAgICAgICBicl9jZm1f Y2NfcmRpX3BvbGljeSwgZXh0YWNrKTsNCj4gKwlpZiAoZXJyKQ0KPiArCQlyZXR1cm4gZXJyOw0K PiArDQo+ICsJaWYgKCF0YltJRkxBX0JSSURHRV9DRk1fQ0NfUkRJX0lOU1RBTkNFXSB8fA0KPiAr CSAgICAhdGJbSUZMQV9CUklER0VfQ0ZNX0NDX1JESV9SREldKSB7DQo+ICsJCU5MX1NFVF9FUlJf TVNHX01PRChleHRhY2ssDQo+ICsJCQkJICAgIk1pc3NpbmcgYXR0cmlidXRlOiBJTlNUQU5DRSBv ciBSREkiKTsNCg0KQnJlYWsgdGhlc2UgaW50byBzZXBhcmF0ZSBlcnJvcnMuDQoNCj4gKwkJcmV0 dXJuIC1FSU5WQUw7DQo+ICsJfQ0KPiArDQo+ICsJaW5zdGFuY2UgPSAgbmxhX2dldF91MzIodGJb SUZMQV9CUklER0VfQ0ZNX0NDX1JESV9JTlNUQU5DRV0pOw0KPiArCXJkaSA9ICBubGFfZ2V0X3Uz Mih0YltJRkxBX0JSSURHRV9DRk1fQ0NfUkRJX1JESV0pOw0KPiArDQo+ICsJcmV0dXJuIGJyX2Nm bV9jY19yZGlfc2V0KGJyLCBpbnN0YW5jZSwgcmRpLCBleHRhY2spOw0KPiArfQ0KPiArDQo+ICtz dGF0aWMgaW50IGJyX2NjX2NjbV90eF9wYXJzZShzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsIHN0cnVj dCBubGF0dHIgKmF0dHIsDQo+ICsJCQkgICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRh Y2spDQo+ICt7DQo+ICsJc3RydWN0IG5sYXR0ciAqdGJbSUZMQV9CUklER0VfQ0ZNX0NDX0NDTV9U WF9NQVggKyAxXTsNCj4gKwl1MzIgaW5zdGFuY2U7DQo+ICsJc3RydWN0IGJyX2NmbV9jY19jY21f dHhfaW5mbyB0eF9pbmZvOw0KPiArCWludCBlcnI7DQo+ICsNCj4gKwllcnIgPSBubGFfcGFyc2Vf bmVzdGVkKHRiLCBJRkxBX0JSSURHRV9DRk1fQ0NfQ0NNX1RYX01BWCwgYXR0ciwNCj4gKwkJCSAg ICAgICBicl9jZm1fY2NfY2NtX3R4X3BvbGljeSwgZXh0YWNrKTsNCj4gKwlpZiAoZXJyKQ0KPiAr CQlyZXR1cm4gZXJyOw0KPiArDQo+ICsJaWYgKCF0YltJRkxBX0JSSURHRV9DRk1fQ0NfQ0NNX1RY X0lOU1RBTkNFXSB8fA0KPiArCSAgICAhdGJbSUZMQV9CUklER0VfQ0ZNX0NDX0NDTV9UWF9ETUFD XSB8fA0KPiArCSAgICAhdGJbSUZMQV9CUklER0VfQ0ZNX0NDX0NDTV9UWF9TRVFfTk9fVVBEQVRF XSB8fA0KPiArCSAgICAhdGJbSUZMQV9CUklER0VfQ0ZNX0NDX0NDTV9UWF9QRVJJT0RdIHx8DQo+ ICsJICAgICF0YltJRkxBX0JSSURHRV9DRk1fQ0NfQ0NNX1RYX0lGX1RMVl0gfHwNCj4gKwkgICAg IXRiW0lGTEFfQlJJREdFX0NGTV9DQ19DQ01fVFhfSUZfVExWX1ZBTFVFXSB8fA0KPiArCSAgICAh dGJbSUZMQV9CUklER0VfQ0ZNX0NDX0NDTV9UWF9QT1JUX1RMVl0gfHwNCj4gKwkgICAgIXRiW0lG TEFfQlJJREdFX0NGTV9DQ19DQ01fVFhfUE9SVF9UTFZfVkFMVUVdKSB7DQo+ICsJCU5MX1NFVF9F UlJfTVNHX01PRChleHRhY2ssDQo+ICsJCQkJICAgIk1pc3NpbmcgYXR0cmlidXRlOiBJTlNUQU5D RSBvciBQUklPUklUWSBvciBERUkgb3IgRE1BQyBvciBTRVFfTk9fVVBEQVRFIG9yIFBFUklPRCBv ciBJRl9UTFYgb3IgSUZfVExWX1ZBTFVFIG9yIFBPUlRfVExWIG9yIFBPUlRfVExWX1ZBTFVFIik7 DQoNCkJyZWFrIHRoZXNlIGludG8gc2VwYXJhdGUgZXJyb3JzLg0KDQo+ICsJCXJldHVybiAtRUlO VkFMOw0KPiArCX0NCj4gKw0KPiArCWluc3RhbmNlID0gbmxhX2dldF91MzIodGJbSUZMQV9CUklE R0VfQ0ZNX0NDX1JESV9JTlNUQU5DRV0pOw0KPiArCXR4X2luZm8ucHJpb3JpdHkgPSAwOw0KPiAr CXR4X2luZm8uZGVpID0gMDsNCj4gKwl0eF9pbmZvLmRtYWMgPSBubGFfZ2V0X21hYyh0YltJRkxB X0JSSURHRV9DRk1fQ0NfQ0NNX1RYX0RNQUNdKTsNCj4gKwl0eF9pbmZvLnNlcV9ub191cGRhdGUg PSBubGFfZ2V0X3UzMih0YltJRkxBX0JSSURHRV9DRk1fQ0NfQ0NNX1RYX1NFUV9OT19VUERBVEVd KTsNCj4gKwl0eF9pbmZvLnBlcmlvZCA9IG5sYV9nZXRfdTMyKHRiW0lGTEFfQlJJREdFX0NGTV9D Q19DQ01fVFhfUEVSSU9EXSk7DQo+ICsJdHhfaW5mby5pZl90bHYgPSBubGFfZ2V0X3UzMih0YltJ RkxBX0JSSURHRV9DRk1fQ0NfQ0NNX1RYX0lGX1RMVl0pOw0KPiArCXR4X2luZm8uaWZfdGx2X3Zh bHVlID0gbmxhX2dldF91OCh0YltJRkxBX0JSSURHRV9DRk1fQ0NfQ0NNX1RYX0lGX1RMVl9WQUxV RV0pOw0KPiArCXR4X2luZm8ucG9ydF90bHYgPSBubGFfZ2V0X3UzMih0YltJRkxBX0JSSURHRV9D Rk1fQ0NfQ0NNX1RYX1BPUlRfVExWXSk7DQo+ICsJdHhfaW5mby5wb3J0X3Rsdl92YWx1ZSA9IG5s YV9nZXRfdTgodGJbSUZMQV9CUklER0VfQ0ZNX0NDX0NDTV9UWF9QT1JUX1RMVl9WQUxVRV0pOw0K PiArDQo+ICsJcmV0dXJuIGJyX2NmbV9jY19jY21fdHgoYnIsIGluc3RhbmNlLCAmdHhfaW5mbywg ZXh0YWNrKTsNCj4gK30NCj4gKw0KPiAraW50IGJyX2NmbV9wYXJzZShzdHJ1Y3QgbmV0X2JyaWRn ZSAqYnIsIHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnAsDQo+ICsJCSBzdHJ1Y3QgbmxhdHRyICph dHRyLCBpbnQgY21kLCBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spDQo+ICt7DQo+ICsJ c3RydWN0IG5sYXR0ciAqdGJbSUZMQV9CUklER0VfQ0ZNX01BWCArIDFdOw0KPiArCWludCBlcnI7 DQo+ICsNCj4gKwkvKiBXaGVuIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGZvciBhIHBvcnQgdGhl biB0aGUgYnIgcG9pbnRlciBpcw0KPiArCSAqIGludmFsaWQsIHRoZXJlZm9yIHNldCB0aGUgYnIg dG8gcG9pbnQgY29ycmVjdGx5DQo+ICsJICovDQo+ICsJaWYgKHApDQo+ICsJCWJyID0gcC0+YnI7 DQo+ICsNCj4gKwllcnIgPSBubGFfcGFyc2VfbmVzdGVkKHRiLCBJRkxBX0JSSURHRV9DRk1fTUFY LCBhdHRyLA0KPiArCQkJICAgICAgIGJyX2NmbV9wb2xpY3ksIGV4dGFjayk7DQo+ICsJaWYgKGVy cikNCj4gKwkJcmV0dXJuIGVycjsNCj4gKw0KPiArCWlmICh0YltJRkxBX0JSSURHRV9DRk1fTUVQ X0NSRUFURV0pIHsNCj4gKwkJZXJyID0gYnJfbWVwX2NyZWF0ZV9wYXJzZShiciwgdGJbSUZMQV9C UklER0VfQ0ZNX01FUF9DUkVBVEVdLA0KPiArCQkJCQkgIGV4dGFjayk7DQo+ICsJCWlmIChlcnIp DQo+ICsJCQlyZXR1cm4gZXJyOw0KPiArCX0NCj4gKw0KPiArCWlmICh0YltJRkxBX0JSSURHRV9D Rk1fTUVQX0RFTEVURV0pIHsNCj4gKwkJZXJyID0gYnJfbWVwX2RlbGV0ZV9wYXJzZShiciwgdGJb SUZMQV9CUklER0VfQ0ZNX01FUF9ERUxFVEVdLA0KPiArCQkJCQkgIGV4dGFjayk7DQo+ICsJCWlm IChlcnIpDQo+ICsJCQlyZXR1cm4gZXJyOw0KPiArCX0NCj4gKw0KPiArCWlmICh0YltJRkxBX0JS SURHRV9DRk1fTUVQX0NPTkZJR10pIHsNCj4gKwkJZXJyID0gYnJfbWVwX2NvbmZpZ19wYXJzZShi ciwgdGJbSUZMQV9CUklER0VfQ0ZNX01FUF9DT05GSUddLA0KPiArCQkJCQkgIGV4dGFjayk7DQo+ ICsJCWlmIChlcnIpDQo+ICsJCQlyZXR1cm4gZXJyOw0KPiArCX0NCj4gKw0KPiArCWlmICh0YltJ RkxBX0JSSURHRV9DRk1fQ0NfQ09ORklHXSkgew0KPiArCQllcnIgPSBicl9jY19jb25maWdfcGFy c2UoYnIsIHRiW0lGTEFfQlJJREdFX0NGTV9DQ19DT05GSUddLA0KPiArCQkJCQkgZXh0YWNrKTsN Cj4gKwkJaWYgKGVycikNCj4gKwkJCXJldHVybiBlcnI7DQo+ICsJfQ0KPiArDQo+ICsJaWYgKHRi W0lGTEFfQlJJREdFX0NGTV9DQ19QRUVSX01FUF9BRERdKSB7DQo+ICsJCWVyciA9IGJyX2NjX3Bl ZXJfbWVwX2FkZF9wYXJzZShiciwgdGJbSUZMQV9CUklER0VfQ0ZNX0NDX1BFRVJfTUVQX0FERF0s DQo+ICsJCQkJCSAgICAgICBleHRhY2spOw0KPiArCQlpZiAoZXJyKQ0KPiArCQkJcmV0dXJuIGVy cjsNCj4gKwl9DQo+ICsNCj4gKwlpZiAodGJbSUZMQV9CUklER0VfQ0ZNX0NDX1BFRVJfTUVQX1JF TU9WRV0pIHsNCj4gKwkJZXJyID0gYnJfY2NfcGVlcl9tZXBfcmVtb3ZlX3BhcnNlKGJyLCB0YltJ RkxBX0JSSURHRV9DRk1fQ0NfUEVFUl9NRVBfUkVNT1ZFXSwNCj4gKwkJCQkJCSAgZXh0YWNrKTsN Cj4gKwkJaWYgKGVycikNCj4gKwkJCXJldHVybiBlcnI7DQo+ICsJfQ0KPiArDQo+ICsJaWYgKHRi W0lGTEFfQlJJREdFX0NGTV9DQ19SREldKSB7DQo+ICsJCWVyciA9IGJyX2NjX3JkaV9wYXJzZShi ciwgdGJbSUZMQV9CUklER0VfQ0ZNX0NDX1JESV0sDQo+ICsJCQkJICAgICAgZXh0YWNrKTsNCj4g KwkJaWYgKGVycikNCj4gKwkJCXJldHVybiBlcnI7DQo+ICsJfQ0KPiArDQo+ICsJaWYgKHRiW0lG TEFfQlJJREdFX0NGTV9DQ19DQ01fVFhdKSB7DQo+ICsJCWVyciA9IGJyX2NjX2NjbV90eF9wYXJz ZShiciwgdGJbSUZMQV9CUklER0VfQ0ZNX0NDX0NDTV9UWF0sDQo+ICsJCQkJCSBleHRhY2spOw0K PiArCQlpZiAoZXJyKQ0KPiArCQkJcmV0dXJuIGVycjsNCj4gKwl9DQo+ICsNCj4gKwlyZXR1cm4g MDsNCj4gK30NCj4gKw0KPiAraW50IGJyX2NmbV9jb25maWdfZmlsbF9pbmZvKHN0cnVjdCBza19i dWZmICpza2IsIHN0cnVjdCBuZXRfYnJpZGdlICpicikNCj4gK3sNCj4gKwlzdHJ1Y3QgbmxhdHRy ICp0YiwgKmNmbV90YjsNCj4gKwlzdHJ1Y3QgYnJfY2ZtX21lcCAqbWVwOw0KPiArCXN0cnVjdCBi cl9jZm1fcGVlcl9tZXAgKnBlZXJfbWVwOw0KPiArDQo+ICsJY2ZtX3RiID0gbmxhX25lc3Rfc3Rh cnRfbm9mbGFnKHNrYiwgSUZMQV9CUklER0VfQ0ZNKTsNCg0KV2h5IF9ub2ZsYWcgZXZlcnl3aGVy ZT8NCg0KPiArCWlmICghY2ZtX3RiKQ0KPiArCQlyZXR1cm4gLUVNU0dTSVpFOw0KPiArDQo+ICsJ bGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UobWVwLCAmYnItPm1lcF9saXN0LCBoZWFkKSB7DQo+ICsJ CXRiID0gbmxhX25lc3Rfc3RhcnRfbm9mbGFnKHNrYiwgSUZMQV9CUklER0VfQ0ZNX01FUF9DUkVB VEVfSU5GTyk7DQo+ICsJCWlmICghdGIpDQo+ICsJCQlnb3RvIG5sYV9pbmZvX2ZhaWx1cmU7DQo+ ICsNCj4gKwkJaWYgKG5sYV9wdXRfdTMyKHNrYiwgSUZMQV9CUklER0VfQ0ZNX01FUF9DUkVBVEVf SU5TVEFOQ0UsDQo+ICsJCQkJbWVwLT5pbnN0YW5jZSkpDQo+ICsJCQlnb3RvIG5sYV9wdXRfZmFp bHVyZTsNCj4gKw0KPiArCQlpZiAobmxhX3B1dF91MzIoc2tiLCBJRkxBX0JSSURHRV9DRk1fTUVQ X0NSRUFURV9ET01BSU4sDQo+ICsJCQkJbWVwLT5jcmVhdGUuZG9tYWluKSkNCj4gKwkJCWdvdG8g bmxhX3B1dF9mYWlsdXJlOw0KPiArDQo+ICsJCWlmIChubGFfcHV0X3UzMihza2IsIElGTEFfQlJJ REdFX0NGTV9NRVBfQ1JFQVRFX0RJUkVDVElPTiwNCj4gKwkJCQltZXAtPmNyZWF0ZS5kaXJlY3Rp b24pKQ0KPiArCQkJZ290byBubGFfcHV0X2ZhaWx1cmU7DQo+ICsNCj4gKwkJaWYgKG5sYV9wdXRf dTMyKHNrYiwgSUZMQV9CUklER0VfQ0ZNX01FUF9DUkVBVEVfSUZJTkRFWCwNCj4gKwkJCQltZXAt PmNyZWF0ZS5pZmluZGV4KSkNCj4gKwkJCWdvdG8gbmxhX3B1dF9mYWlsdXJlOw0KPiArDQo+ICsJ CW5sYV9uZXN0X2VuZChza2IsIHRiKTsNCj4gKw0KPiArCQl0YiA9IG5sYV9uZXN0X3N0YXJ0X25v ZmxhZyhza2IsIElGTEFfQlJJREdFX0NGTV9NRVBfQ09ORklHX0lORk8pOw0KPiArDQo+ICsJCWlm ICghdGIpDQo+ICsJCQlnb3RvIG5sYV9pbmZvX2ZhaWx1cmU7DQo+ICsNCj4gKwkJaWYgKG5sYV9w dXRfdTMyKHNrYiwgSUZMQV9CUklER0VfQ0ZNX01FUF9DT05GSUdfSU5TVEFOQ0UsDQo+ICsJCQkJ bWVwLT5pbnN0YW5jZSkpDQo+ICsJCQlnb3RvIG5sYV9wdXRfZmFpbHVyZTsNCj4gKw0KPiArCQlp ZiAobmxhX3B1dChza2IsIElGTEFfQlJJREdFX0NGTV9NRVBfQ09ORklHX1VOSUNBU1RfTUFDLA0K PiArCQkJICAgIHNpemVvZihtZXAtPmNvbmZpZy51bmljYXN0X21hYy5hZGRyKSwNCj4gKwkJCSAg ICBtZXAtPmNvbmZpZy51bmljYXN0X21hYy5hZGRyKSkNCj4gKwkJCWdvdG8gbmxhX3B1dF9mYWls dXJlOw0KPiArDQo+ICsJCWlmIChubGFfcHV0X3UzMihza2IsIElGTEFfQlJJREdFX0NGTV9NRVBf Q09ORklHX01ETEVWRUwsDQo+ICsJCQkJbWVwLT5jb25maWcubWRsZXZlbCkpDQo+ICsJCQlnb3Rv IG5sYV9wdXRfZmFpbHVyZTsNCj4gKw0KPiArCQlpZiAobmxhX3B1dF91MzIoc2tiLCBJRkxBX0JS SURHRV9DRk1fTUVQX0NPTkZJR19NRVBJRCwNCj4gKwkJCQltZXAtPmNvbmZpZy5tZXBpZCkpDQo+ ICsJCQlnb3RvIG5sYV9wdXRfZmFpbHVyZTsNCj4gKw0KPiArCQlubGFfbmVzdF9lbmQoc2tiLCB0 Yik7DQo+ICsNCj4gKwkJdGIgPSBubGFfbmVzdF9zdGFydF9ub2ZsYWcoc2tiLCBJRkxBX0JSSURH RV9DRk1fQ0NfQ09ORklHX0lORk8pOw0KPiArDQo+ICsJCWlmICghdGIpDQo+ICsJCQlnb3RvIG5s YV9pbmZvX2ZhaWx1cmU7DQo+ICsNCj4gKwkJaWYgKG5sYV9wdXRfdTMyKHNrYiwgSUZMQV9CUklE R0VfQ0ZNX0NDX0NPTkZJR19JTlNUQU5DRSwNCj4gKwkJCQltZXAtPmluc3RhbmNlKSkNCj4gKwkJ CWdvdG8gbmxhX3B1dF9mYWlsdXJlOw0KPiArDQo+ICsJCWlmIChubGFfcHV0X3UzMihza2IsIElG TEFfQlJJREdFX0NGTV9DQ19DT05GSUdfRU5BQkxFLA0KPiArCQkJCW1lcC0+Y2NfY29uZmlnLmVu YWJsZSkpDQo+ICsJCQlnb3RvIG5sYV9wdXRfZmFpbHVyZTsNCj4gKw0KPiArCQlpZiAobmxhX3B1 dF91MzIoc2tiLCBJRkxBX0JSSURHRV9DRk1fQ0NfQ09ORklHX0VYUF9JTlRFUlZBTCwNCj4gKwkJ CQltZXAtPmNjX2NvbmZpZy5leHBfaW50ZXJ2YWwpKQ0KPiArCQkJZ290byBubGFfcHV0X2ZhaWx1 cmU7DQo+ICsNCj4gKwkJaWYgKG5sYV9wdXQoc2tiLCBJRkxBX0JSSURHRV9DRk1fQ0NfQ09ORklH X0VYUF9NQUlELA0KPiArCQkJICAgIHNpemVvZihtZXAtPmNjX2NvbmZpZy5leHBfbWFpZC5kYXRh KSwNCj4gKwkJCSAgICBtZXAtPmNjX2NvbmZpZy5leHBfbWFpZC5kYXRhKSkNCj4gKwkJCWdvdG8g bmxhX3B1dF9mYWlsdXJlOw0KPiArDQo+ICsJCW5sYV9uZXN0X2VuZChza2IsIHRiKTsNCj4gKw0K PiArCQl0YiA9IG5sYV9uZXN0X3N0YXJ0X25vZmxhZyhza2IsIElGTEFfQlJJREdFX0NGTV9DQ19S RElfSU5GTyk7DQo+ICsNCj4gKwkJaWYgKCF0YikNCj4gKwkJCWdvdG8gbmxhX2luZm9fZmFpbHVy ZTsNCj4gKw0KPiArCQlpZiAobmxhX3B1dF91MzIoc2tiLCBJRkxBX0JSSURHRV9DRk1fQ0NfUkRJ X0lOU1RBTkNFLA0KPiArCQkJCW1lcC0+aW5zdGFuY2UpKQ0KPiArCQkJZ290byBubGFfcHV0X2Zh aWx1cmU7DQo+ICsNCj4gKwkJaWYgKG5sYV9wdXRfdTMyKHNrYiwgSUZMQV9CUklER0VfQ0ZNX0ND X1JESV9SREksDQo+ICsJCQkJbWVwLT5yZGkpKQ0KPiArCQkJZ290byBubGFfcHV0X2ZhaWx1cmU7 DQo+ICsNCj4gKwkJbmxhX25lc3RfZW5kKHNrYiwgdGIpOw0KPiArDQo+ICsJCXRiID0gbmxhX25l c3Rfc3RhcnRfbm9mbGFnKHNrYiwgSUZMQV9CUklER0VfQ0ZNX0NDX0NDTV9UWF9JTkZPKTsNCj4g Kw0KPiArCQlpZiAoIXRiKQ0KPiArCQkJZ290byBubGFfaW5mb19mYWlsdXJlOw0KPiArDQo+ICsJ CWlmIChubGFfcHV0X3UzMihza2IsIElGTEFfQlJJREdFX0NGTV9DQ19DQ01fVFhfSU5TVEFOQ0Us DQo+ICsJCQkJbWVwLT5pbnN0YW5jZSkpDQo+ICsJCQlnb3RvIG5sYV9wdXRfZmFpbHVyZTsNCj4g Kw0KPiArCQlpZiAobmxhX3B1dChza2IsIElGTEFfQlJJREdFX0NGTV9DQ19DQ01fVFhfRE1BQywN Cj4gKwkJCSAgICBzaXplb2YobWVwLT5jY19jY21fdHhfaW5mby5kbWFjKSwNCj4gKwkJCSAgICBt ZXAtPmNjX2NjbV90eF9pbmZvLmRtYWMuYWRkcikpDQo+ICsJCQlnb3RvIG5sYV9wdXRfZmFpbHVy ZTsNCj4gKw0KPiArCQlpZiAobmxhX3B1dF91MzIoc2tiLCBJRkxBX0JSSURHRV9DRk1fQ0NfQ0NN X1RYX1NFUV9OT19VUERBVEUsDQo+ICsJCQkJbWVwLT5jY19jY21fdHhfaW5mby5zZXFfbm9fdXBk YXRlKSkNCj4gKwkJCWdvdG8gbmxhX3B1dF9mYWlsdXJlOw0KPiArDQo+ICsJCWlmIChubGFfcHV0 X3UzMihza2IsIElGTEFfQlJJREdFX0NGTV9DQ19DQ01fVFhfUEVSSU9ELA0KPiArCQkJCW1lcC0+ Y2NfY2NtX3R4X2luZm8ucGVyaW9kKSkNCj4gKwkJCWdvdG8gbmxhX3B1dF9mYWlsdXJlOw0KPiAr DQo+ICsJCWlmIChubGFfcHV0X3UzMihza2IsIElGTEFfQlJJREdFX0NGTV9DQ19DQ01fVFhfSUZf VExWLA0KPiArCQkJCW1lcC0+Y2NfY2NtX3R4X2luZm8uaWZfdGx2KSkNCj4gKwkJCWdvdG8gbmxh X3B1dF9mYWlsdXJlOw0KPiArDQo+ICsJCWlmIChubGFfcHV0X3U4KHNrYiwgSUZMQV9CUklER0Vf Q0ZNX0NDX0NDTV9UWF9JRl9UTFZfVkFMVUUsDQo+ICsJCQkgICAgICAgbWVwLT5jY19jY21fdHhf aW5mby5pZl90bHZfdmFsdWUpKQ0KPiArCQkJZ290byBubGFfcHV0X2ZhaWx1cmU7DQo+ICsNCj4g KwkJaWYgKG5sYV9wdXRfdTMyKHNrYiwgSUZMQV9CUklER0VfQ0ZNX0NDX0NDTV9UWF9QT1JUX1RM ViwNCj4gKwkJCQltZXAtPmNjX2NjbV90eF9pbmZvLnBvcnRfdGx2KSkNCj4gKwkJCWdvdG8gbmxh X3B1dF9mYWlsdXJlOw0KPiArDQo+ICsJCWlmIChubGFfcHV0X3U4KHNrYiwgSUZMQV9CUklER0Vf Q0ZNX0NDX0NDTV9UWF9QT1JUX1RMVl9WQUxVRSwNCj4gKwkJCSAgICAgICBtZXAtPmNjX2NjbV90 eF9pbmZvLnBvcnRfdGx2X3ZhbHVlKSkNCj4gKwkJCWdvdG8gbmxhX3B1dF9mYWlsdXJlOw0KPiAr DQo+ICsJCW5sYV9uZXN0X2VuZChza2IsIHRiKTsNCj4gKw0KPiArCQlsaXN0X2Zvcl9lYWNoX2Vu dHJ5X3JjdShwZWVyX21lcCwgJm1lcC0+cGVlcl9tZXBfbGlzdCwgaGVhZCkgew0KPiArCQkJdGIg PSBubGFfbmVzdF9zdGFydF9ub2ZsYWcoc2tiLCBJRkxBX0JSSURHRV9DRk1fQ0NfUEVFUl9NRVBf SU5GTyk7DQo+ICsNCj4gKwkJCWlmICghdGIpDQo+ICsJCQkJZ290byBubGFfaW5mb19mYWlsdXJl Ow0KPiArDQo+ICsJCQlpZiAobmxhX3B1dF91MzIoc2tiLCBJRkxBX0JSSURHRV9DRk1fQ0NfUEVF Ul9NRVBfSU5TVEFOQ0UsDQo+ICsJCQkJCW1lcC0+aW5zdGFuY2UpKQ0KPiArCQkJCWdvdG8gbmxh X3B1dF9mYWlsdXJlOw0KPiArDQo+ICsJCQlpZiAobmxhX3B1dF91MzIoc2tiLCBJRkxBX0JSSURH RV9DRk1fQ0NfUEVFUl9NRVBJRCwNCj4gKwkJCQkJcGVlcl9tZXAtPm1lcGlkKSkNCj4gKwkJCQln b3RvIG5sYV9wdXRfZmFpbHVyZTsNCj4gKw0KPiArCQkJbmxhX25lc3RfZW5kKHNrYiwgdGIpOw0K PiArCQl9DQo+ICsJfQ0KPiArCW5sYV9uZXN0X2VuZChza2IsIGNmbV90Yik7DQo+ICsNCj4gKwly ZXR1cm4gMDsNCj4gKw0KPiArbmxhX3B1dF9mYWlsdXJlOg0KPiArCW5sYV9uZXN0X2NhbmNlbChz a2IsIHRiKTsNCj4gKw0KPiArbmxhX2luZm9fZmFpbHVyZToNCj4gKwlubGFfbmVzdF9jYW5jZWwo c2tiLCBjZm1fdGIpOw0KPiArDQo+ICsJcmV0dXJuIC1FTVNHU0laRTsNCj4gK30NCj4gKw0KPiAr aW50IGJyX2NmbV9zdGF0dXNfZmlsbF9pbmZvKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBu ZXRfYnJpZGdlICpicikNCj4gK3sNCj4gKwlzdHJ1Y3QgbmxhdHRyICp0YiwgKmNmbV90YjsNCj4g KwlzdHJ1Y3QgYnJfY2ZtX21lcCAqbWVwOw0KPiArCXN0cnVjdCBicl9jZm1fcGVlcl9tZXAgKnBl ZXJfbWVwOw0KPiArDQo+ICsJY2ZtX3RiID0gbmxhX25lc3Rfc3RhcnRfbm9mbGFnKHNrYiwgSUZM QV9CUklER0VfQ0ZNKTsNCj4gKwlpZiAoIWNmbV90YikNCj4gKwkJcmV0dXJuIC1FTVNHU0laRTsN Cj4gKw0KPiArCWxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KG1lcCwgJmJyLT5tZXBfbGlzdCwgaGVh ZCkgew0KPiArCQl0YiA9IG5sYV9uZXN0X3N0YXJ0X25vZmxhZyhza2IsIElGTEFfQlJJREdFX0NG TV9NRVBfU1RBVFVTX0lORk8pOw0KPiArCQlpZiAoIXRiKQ0KPiArCQkJZ290byBubGFfaW5mb19m YWlsdXJlOw0KPiArDQo+ICsJCWlmIChubGFfcHV0X3UzMihza2IsIElGTEFfQlJJREdFX0NGTV9N RVBfU1RBVFVTX0lOU1RBTkNFLA0KPiArCQkJCW1lcC0+aW5zdGFuY2UpKQ0KPiArCQkJZ290byBu bGFfcHV0X2ZhaWx1cmU7DQo+ICsNCj4gKwkJaWYgKG5sYV9wdXRfdTMyKHNrYiwgSUZMQV9CUklE R0VfQ0ZNX01FUF9TVEFUVVNfT1BDT0RFX1VORVhQX1NFRU4sDQo+ICsJCQkJbWVwLT5zdGF0dXMu b3Bjb2RlX3VuZXhwX3NlZW4pKQ0KPiArCQkJZ290byBubGFfcHV0X2ZhaWx1cmU7DQo+ICsNCj4g KwkJaWYgKG5sYV9wdXRfdTMyKHNrYiwgSUZMQV9CUklER0VfQ0ZNX01FUF9TVEFUVVNfVkVSU0lP Tl9VTkVYUF9TRUVOLA0KPiArCQkJCW1lcC0+c3RhdHVzLnZlcnNpb25fdW5leHBfc2VlbikpDQo+ ICsJCQlnb3RvIG5sYV9wdXRfZmFpbHVyZTsNCj4gKw0KPiArCQlpZiAobmxhX3B1dF91MzIoc2ti LCBJRkxBX0JSSURHRV9DRk1fTUVQX1NUQVRVU19SWF9MRVZFTF9MT1dfU0VFTiwNCj4gKwkJCQlt ZXAtPnN0YXR1cy5yeF9sZXZlbF9sb3dfc2VlbikpDQo+ICsJCQlnb3RvIG5sYV9wdXRfZmFpbHVy ZTsNCj4gKw0KPiArCQkvKiBDbGVhciBhbGwgJ3NlZW4nIGluZGljYXRpb25zICovDQo+ICsJCW1l cC0+c3RhdHVzLm9wY29kZV91bmV4cF9zZWVuID0gZmFsc2U7DQo+ICsJCW1lcC0+c3RhdHVzLnZl cnNpb25fdW5leHBfc2VlbiA9IGZhbHNlOw0KPiArCQltZXAtPnN0YXR1cy5yeF9sZXZlbF9sb3df c2VlbiA9IGZhbHNlOw0KPiArDQo+ICsJCW5sYV9uZXN0X2VuZChza2IsIHRiKTsNCj4gKw0KPiAr CQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShwZWVyX21lcCwgJm1lcC0+cGVlcl9tZXBfbGlzdCwg aGVhZCkgew0KPiArCQkJdGIgPSBubGFfbmVzdF9zdGFydF9ub2ZsYWcoc2tiLCBJRkxBX0JSSURH RV9DRk1fQ0NfUEVFUl9TVEFUVVNfSU5GTyk7DQo+ICsNCj4gKwkJCWlmICghdGIpDQo+ICsJCQkJ Z290byBubGFfaW5mb19mYWlsdXJlOw0KPiArDQo+ICsJCQlpZiAobmxhX3B1dF91MzIoc2tiLCBJ RkxBX0JSSURHRV9DRk1fQ0NfUEVFUl9TVEFUVVNfSU5TVEFOQ0UsDQo+ICsJCQkJCW1lcC0+aW5z dGFuY2UpKQ0KPiArCQkJCWdvdG8gbmxhX3B1dF9mYWlsdXJlOw0KPiArDQo+ICsJCQlpZiAobmxh X3B1dF91MzIoc2tiLCBJRkxBX0JSSURHRV9DRk1fQ0NfUEVFUl9TVEFUVVNfUEVFUl9NRVBJRCwN Cj4gKwkJCQkJcGVlcl9tZXAtPm1lcGlkKSkNCj4gKwkJCQlnb3RvIG5sYV9wdXRfZmFpbHVyZTsN Cj4gKw0KPiArCQkJaWYgKG5sYV9wdXRfdTMyKHNrYiwgSUZMQV9CUklER0VfQ0ZNX0NDX1BFRVJf U1RBVFVTX0NDTV9ERUZFQ1QsDQo+ICsJCQkJCXBlZXJfbWVwLT5jY19zdGF0dXMuY2NtX2RlZmVj dCkpDQo+ICsJCQkJZ290byBubGFfcHV0X2ZhaWx1cmU7DQo+ICsNCj4gKwkJCWlmIChubGFfcHV0 X3UzMihza2IsIElGTEFfQlJJREdFX0NGTV9DQ19QRUVSX1NUQVRVU19SREksDQo+ICsJCQkJCXBl ZXJfbWVwLT5jY19zdGF0dXMucmRpKSkNCj4gKwkJCQlnb3RvIG5sYV9wdXRfZmFpbHVyZTsNCj4g Kw0KPiArCQkJaWYgKG5sYV9wdXRfdTgoc2tiLCBJRkxBX0JSSURHRV9DRk1fQ0NfUEVFUl9TVEFU VVNfUE9SVF9UTFZfVkFMVUUsDQo+ICsJCQkJICAgICAgIHBlZXJfbWVwLT5jY19zdGF0dXMucG9y dF90bHZfdmFsdWUpKQ0KPiArCQkJCWdvdG8gbmxhX3B1dF9mYWlsdXJlOw0KPiArDQo+ICsJCQlp ZiAobmxhX3B1dF91OChza2IsIElGTEFfQlJJREdFX0NGTV9DQ19QRUVSX1NUQVRVU19JRl9UTFZf VkFMVUUsDQo+ICsJCQkJICAgICAgIHBlZXJfbWVwLT5jY19zdGF0dXMuaWZfdGx2X3ZhbHVlKSkN Cj4gKwkJCQlnb3RvIG5sYV9wdXRfZmFpbHVyZTsNCj4gKw0KPiArCQkJaWYgKG5sYV9wdXRfdTMy KHNrYiwgSUZMQV9CUklER0VfQ0ZNX0NDX1BFRVJfU1RBVFVTX1NFRU4sDQo+ICsJCQkJCXBlZXJf bWVwLT5jY19zdGF0dXMuc2VlbikpDQo+ICsJCQkJZ290byBubGFfcHV0X2ZhaWx1cmU7DQo+ICsN Cj4gKwkJCWlmIChubGFfcHV0X3UzMihza2IsIElGTEFfQlJJREdFX0NGTV9DQ19QRUVSX1NUQVRV U19UTFZfU0VFTiwNCj4gKwkJCQkJcGVlcl9tZXAtPmNjX3N0YXR1cy50bHZfc2VlbikpDQo+ICsJ CQkJZ290byBubGFfcHV0X2ZhaWx1cmU7DQo+ICsNCj4gKwkJCWlmIChubGFfcHV0X3UzMihza2Is IElGTEFfQlJJREdFX0NGTV9DQ19QRUVSX1NUQVRVU19TRVFfVU5FWFBfU0VFTiwNCj4gKwkJCQkJ cGVlcl9tZXAtPmNjX3N0YXR1cy5zZXFfdW5leHBfc2VlbikpDQo+ICsJCQkJZ290byBubGFfcHV0 X2ZhaWx1cmU7DQo+ICsNCj4gKwkJCS8qIENsZWFyIGFsbCAnc2VlbicgaW5kaWNhdGlvbnMgKi8N Cj4gKwkJCXBlZXJfbWVwLT5jY19zdGF0dXMuc2VlbiA9IGZhbHNlOw0KPiArCQkJcGVlcl9tZXAt PmNjX3N0YXR1cy50bHZfc2VlbiA9IGZhbHNlOw0KPiArCQkJcGVlcl9tZXAtPmNjX3N0YXR1cy5z ZXFfdW5leHBfc2VlbiA9IGZhbHNlOw0KPiArDQo+ICsJCQlubGFfbmVzdF9lbmQoc2tiLCB0Yik7 DQo+ICsJCX0NCj4gKwl9DQo+ICsJbmxhX25lc3RfZW5kKHNrYiwgY2ZtX3RiKTsNCj4gKw0KPiAr CXJldHVybiAwOw0KPiArDQo+ICtubGFfcHV0X2ZhaWx1cmU6DQo+ICsJbmxhX25lc3RfY2FuY2Vs KHNrYiwgdGIpOw0KPiArDQo+ICtubGFfaW5mb19mYWlsdXJlOg0KPiArCW5sYV9uZXN0X2NhbmNl bChza2IsIGNmbV90Yik7DQo+ICsNCj4gKwlyZXR1cm4gLUVNU0dTSVpFOw0KPiArfQ0KPiBkaWZm IC0tZ2l0IGEvbmV0L2JyaWRnZS9icl9uZXRsaW5rLmMgYi9uZXQvYnJpZGdlL2JyX25ldGxpbmsu Yw0KPiBpbmRleCA4YTcxYzYwZmEzNTcuLjZkZTVjYjEyOTVmNiAxMDA2NDQNCj4gLS0tIGEvbmV0 L2JyaWRnZS9icl9uZXRsaW5rLmMNCj4gKysrIGIvbmV0L2JyaWRnZS9icl9uZXRsaW5rLmMNCj4g QEAgLTE2LDYgKzE2LDcgQEANCj4gIA0KPiAgI2luY2x1ZGUgImJyX3ByaXZhdGUuaCINCj4gICNp bmNsdWRlICJicl9wcml2YXRlX3N0cC5oIg0KPiArI2luY2x1ZGUgImJyX3ByaXZhdGVfY2ZtLmgi DQo+ICAjaW5jbHVkZSAiYnJfcHJpdmF0ZV90dW5uZWwuaCINCj4gIA0KPiAgc3RhdGljIGludCBf X2dldF9udW1fdmxhbl9pbmZvcyhzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuX2dyb3VwICp2ZywNCj4g QEAgLTQ4MSw2ICs0ODIsNDggQEAgc3RhdGljIGludCBicl9maWxsX2lmaW5mbyhzdHJ1Y3Qgc2tf YnVmZiAqc2tiLA0KPiAgCQlubGFfbmVzdF9lbmQoc2tiLCBhZik7DQo+ICAJfQ0KPiAgDQo+ICsJ aWYgKGZpbHRlcl9tYXNrICYgUlRFWFRfRklMVEVSX0NGTV9DT05GSUcpIHsNCj4gKwkJc3RydWN0 IG5sYXR0ciAqYWY7DQo+ICsJCWludCBlcnI7DQo+ICsNCj4gKwkJaWYgKCFicl9jZm1fY3JlYXRl ZChicikgfHwgcG9ydCkNCj4gKwkJCWdvdG8gZG9uZTsNCj4gKw0KPiArCQlhZiA9IG5sYV9uZXN0 X3N0YXJ0X25vZmxhZyhza2IsIElGTEFfQUZfU1BFQyk7DQo+ICsJCWlmICghYWYpDQo+ICsJCQln b3RvIG5sYV9wdXRfZmFpbHVyZTsNCj4gKw0KPiArCQlyY3VfcmVhZF9sb2NrKCk7DQo+ICsJCWVy ciA9IGJyX2NmbV9jb25maWdfZmlsbF9pbmZvKHNrYiwgYnIpOw0KPiArCQlyY3VfcmVhZF91bmxv Y2soKTsNCj4gKw0KPiArCQlpZiAoZXJyKQ0KPiArCQkJZ290byBubGFfcHV0X2ZhaWx1cmU7DQo+ ICsNCj4gKwkJbmxhX25lc3RfZW5kKHNrYiwgYWYpOw0KPiArCX0NCj4gKw0KPiArCWlmIChmaWx0 ZXJfbWFzayAmIFJURVhUX0ZJTFRFUl9DRk1fU1RBVFVTKSB7DQo+ICsJCXN0cnVjdCBubGF0dHIg KmFmOw0KPiArCQlpbnQgZXJyOw0KPiArDQo+ICsJCWlmICghYnJfY2ZtX2NyZWF0ZWQoYnIpIHx8 IHBvcnQpDQo+ICsJCQlnb3RvIGRvbmU7DQo+ICsNCj4gKwkJYWYgPSBubGFfbmVzdF9zdGFydF9u b2ZsYWcoc2tiLCBJRkxBX0FGX1NQRUMpOw0KPiArCQlpZiAoIWFmKQ0KPiArCQkJZ290byBubGFf cHV0X2ZhaWx1cmU7DQo+ICsNCj4gKwkJcmN1X3JlYWRfbG9jaygpOw0KPiArCQllcnIgPSBicl9j Zm1fc3RhdHVzX2ZpbGxfaW5mbyhza2IsIGJyKTsNCj4gKwkJcmN1X3JlYWRfdW5sb2NrKCk7DQo+ ICsNCj4gKwkJaWYgKGVycikNCj4gKwkJCWdvdG8gbmxhX3B1dF9mYWlsdXJlOw0KPiArDQo+ICsJ CW5sYV9uZXN0X2VuZChza2IsIGFmKTsNCj4gKwl9DQoNCkkgYWN0dWFsbHkgbm90aWNlZCB0aGlz IGp1c3Qgbm93LCB5b3UgY2FuJ3QgaGF2ZSBtdWx0aXBsZSBJRkxBX0FGX1NQRUMNCmF0dHJpYnV0 ZXMuIEl0IHNlZW1zIHdlIGFscmVhZHkgaGF2ZSB0aGF0IHByb2JsZW0gd2l0aCBNUlAuDQpTaW5j ZSBmaWx0ZXJfbWFzayBpcyBhIG1hc2sgb25lIGNvdWxkIHJlcXVlc3QgbXVsdGlwbGUgcnRleHQg YXR0cmlidXRlcy4NCg0KPiArDQo+ICBkb25lOg0KPiAgCW5sbXNnX2VuZChza2IsIG5saCk7DQo+ ICAJcmV0dXJuIDA7DQo+IEBAIC01NDIsNyArNTg1LDkgQEAgaW50IGJyX2dldGxpbmsoc3RydWN0 IHNrX2J1ZmYgKnNrYiwgdTMyIHBpZCwgdTMyIHNlcSwNCj4gIA0KPiAgCWlmICghcG9ydCAmJiAh KGZpbHRlcl9tYXNrICYgUlRFWFRfRklMVEVSX0JSVkxBTikgJiYNCj4gIAkgICAgIShmaWx0ZXJf bWFzayAmIFJURVhUX0ZJTFRFUl9CUlZMQU5fQ09NUFJFU1NFRCkgJiYNCj4gLQkgICAgIShmaWx0 ZXJfbWFzayAmIFJURVhUX0ZJTFRFUl9NUlApKQ0KPiArCSAgICAhKGZpbHRlcl9tYXNrICYgUlRF WFRfRklMVEVSX01SUCkgJiYNCj4gKwkgICAgIShmaWx0ZXJfbWFzayAmIFJURVhUX0ZJTFRFUl9D Rk1fQ09ORklHKSAmJg0KPiArCSAgICAhKGZpbHRlcl9tYXNrICYgUlRFWFRfRklMVEVSX0NGTV9T VEFUVVMpKQ0KPiAgCQlyZXR1cm4gMDsNCj4gIA0KPiAgCXJldHVybiBicl9maWxsX2lmaW5mbyhz a2IsIHBvcnQsIHBpZCwgc2VxLCBSVE1fTkVXTElOSywgbmxmbGFncywNCj4gQEAgLTcwNCw2ICs3 NDksMTEgQEAgc3RhdGljIGludCBicl9hZnNwZWMoc3RydWN0IG5ldF9icmlkZ2UgKmJyLA0KPiAg CQkJaWYgKGVycikNCj4gIAkJCQlyZXR1cm4gZXJyOw0KPiAgCQkJYnJlYWs7DQo+ICsJCWNhc2Ug SUZMQV9CUklER0VfQ0ZNOg0KPiArCQkJZXJyID0gYnJfY2ZtX3BhcnNlKGJyLCBwLCBhdHRyLCBj bWQsIGV4dGFjayk7DQo+ICsJCQlpZiAoZXJyKQ0KPiArCQkJCXJldHVybiBlcnI7DQo+ICsJCQli cmVhazsNCj4gIAkJfQ0KPiAgCX0NCj4gIA0KPiBkaWZmIC0tZ2l0IGEvbmV0L2JyaWRnZS9icl9w cml2YXRlLmggYi9uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaA0KPiBpbmRleCAzODVhNmE2YWExN2Uu LmZlMzY1OTJmNzUyNSAxMDA2NDQNCj4gLS0tIGEvbmV0L2JyaWRnZS9icl9wcml2YXRlLmgNCj4g KysrIGIvbmV0L2JyaWRnZS9icl9wcml2YXRlLmgNCj4gQEAgLTEzNjUsOSArMTM2NSwyMCBAQCBz dGF0aWMgaW5saW5lIGludCBicl9tcnBfZmlsbF9pbmZvKHN0cnVjdCBza19idWZmICpza2IsIHN0 cnVjdCBuZXRfYnJpZGdlICpicikNCj4gIA0KPiAgLyogYnJfY2ZtLmMgKi8NCj4gICNpZiBJU19F TkFCTEVEKENPTkZJR19CUklER0VfQ0ZNKQ0KPiAraW50IGJyX2NmbV9wYXJzZShzdHJ1Y3QgbmV0 X2JyaWRnZSAqYnIsIHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnAsDQo+ICsJCSBzdHJ1Y3Qgbmxh dHRyICphdHRyLCBpbnQgY21kLCBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spOw0KPiAg aW50IGJyX2NmbV9yeF9mcmFtZV9wcm9jZXNzKHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnAsIHN0 cnVjdCBza19idWZmICpza2IpOw0KPiAgYm9vbCBicl9jZm1fY3JlYXRlZChzdHJ1Y3QgbmV0X2Jy aWRnZSAqYnIpOw0KPiAraW50IGJyX2NmbV9jb25maWdfZmlsbF9pbmZvKHN0cnVjdCBza19idWZm ICpza2IsIHN0cnVjdCBuZXRfYnJpZGdlICpicik7DQo+ICtpbnQgYnJfY2ZtX3N0YXR1c19maWxs X2luZm8oc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9icmlkZ2UgKmJyKTsNCj4gICNl bHNlDQo+ICtzdGF0aWMgaW5saW5lIGludCBicl9jZm1fcGFyc2Uoc3RydWN0IG5ldF9icmlkZ2Ug KmJyLCBzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwLA0KPiArCQkJICAgICAgIHN0cnVjdCBubGF0 dHIgKmF0dHIsIGludCBjbWQsDQo+ICsJCQkgICAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAq ZXh0YWNrKQ0KPiArew0KPiArCXJldHVybiAtRU9QTk9UU1VQUDsNCj4gK30NCj4gKw0KPiAgc3Rh dGljIGlubGluZSBpbnQgYnJfY2ZtX3J4X2ZyYW1lX3Byb2Nlc3Moc3RydWN0IG5ldF9icmlkZ2Vf cG9ydCAqcCwgc3RydWN0IHNrX2J1ZmYgKnNrYikNCj4gIHsNCj4gIAlyZXR1cm4gLUVPUE5PVFNV UFA7DQo+IEBAIC0xMzc3LDYgKzEzODgsMTYgQEAgc3RhdGljIGlubGluZSBib29sIGJyX2NmbV9j cmVhdGVkKHN0cnVjdCBuZXRfYnJpZGdlICpicikNCj4gIHsNCj4gIAlyZXR1cm4gZmFsc2U7DQo+ ICB9DQo+ICsNCj4gK3N0YXRpYyBpbmxpbmUgaW50IGJyX2NmbV9jb25maWdfZmlsbF9pbmZvKHN0 cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfYnJpZGdlICpicikNCj4gK3sNCj4gKwlyZXR1 cm4gLUVPUE5PVFNVUFA7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyBpbmxpbmUgaW50IGJyX2NmbV9z dGF0dXNfZmlsbF9pbmZvKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfYnJpZGdlICpi cikNCj4gK3sNCj4gKwlyZXR1cm4gLUVPUE5PVFNVUFA7DQo+ICt9DQo+ICAjZW5kaWYNCj4gIA0K PiAgLyogYnJfbmV0bGluay5jICovDQoNCg==