Received: by 2002:a05:6a10:22f:0:0:0:0 with SMTP id 15csp4078155pxk; Tue, 8 Sep 2020 10:05:58 -0700 (PDT) X-Google-Smtp-Source: ABdhPJxe9l6uoylDFL5kj2D8atsz0JM6/Rqa6gNBiBPQKvcDHEMZyslL8glmO3JwtaOjyKcT+sT9 X-Received: by 2002:a50:fb98:: with SMTP id e24mr27481305edq.130.1599584757940; Tue, 08 Sep 2020 10:05:57 -0700 (PDT) ARC-Seal: i=2; a=rsa-sha256; t=1599584757; cv=pass; d=google.com; s=arc-20160816; b=n6CtKqNSeWR1dl5ByaiattnjK19Oy9nIXjxlq+zGVVLUK0e7VGBegHgqpPqDqHrDpe f4BU4BmCuzANO0a+8JZwA76jQaz6JBsZca16sEMwXT7tOnH9VbEae+Dp1K2jK2O0jkm1 YOZuhqw8fXJvpCS4ATGqL4zC44+XylJ9XFDsC3oY1BOKcwpqxBZFaT1+EVIFIkfBoWLd X8kcFiHTCaLCtBheQNddQ21pjz/GCpK60L4mUvy0buFUF9p0LbKiuyBGFYPaFe/rAKI9 1ZuZBITsEXVLxYuQ80eL8+OP0q487U4K1cNL7Ix7lEaY3spd7iZsj2Pmt5iCcDVlROvG Pf4A== 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=cOiOVJycfmLFkf0Fd0354OIK59r3qvKsXyFVKutwhc0=; b=zN3UDLeiisCx13z3soH2yO8g1J+9MPmw+iMY+qvJLEsHJy8YvblGjUYDJhfLSWiiEZ cTbIeXEZi0Joflcmcq2XOeSaQhrODpvUCdmPgc/L3GRl1tvwcTwwn0euoJQT329oEidx rMfcfRamY1S3S+bU8a/ooxrVhlbq/jzE2yVpflPfcnFnQRIFp9uJrq8TGvVDGLxTFHHM /goDNXo0j8gLs9bDETe+BYcNZ47YQ5lhDkRWksbHBMrl2O+wscqZ0MRfVqCrb/Y7FtCo 9Mr4CCZ+HYWgYUz+xJ/9JnlCYvwFYnZgl3M4/nJGzZVuU87lYozx9mb/wkRsmO4IeK6p 1kEA== ARC-Authentication-Results: i=2; mx.google.com; dkim=pass header.i=@nvidia.com header.s=n1 header.b=gQtQ4wQU; 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 bu14si11076867edb.128.2020.09.08.10.05.33; Tue, 08 Sep 2020 10:05:57 -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=gQtQ4wQU; 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 S1732033AbgIHRC3 (ORCPT + 99 others); Tue, 8 Sep 2020 13:02:29 -0400 Received: from nat-hk.nvidia.com ([203.18.50.4]:7672 "EHLO nat-hk.nvidia.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1731718AbgIHQTr (ORCPT ); Tue, 8 Sep 2020 12:19:47 -0400 Received: from hkpgpgate101.nvidia.com (Not Verified[10.18.92.100]) by nat-hk.nvidia.com (using TLS: TLSv1.2, DES-CBC3-SHA) id ; Tue, 08 Sep 2020 21:16:58 +0800 Received: from HKMAIL103.nvidia.com ([10.18.16.12]) by hkpgpgate101.nvidia.com (PGP Universal service); Tue, 08 Sep 2020 06:16:58 -0700 X-PGP-Universal: processed; by hkpgpgate101.nvidia.com on Tue, 08 Sep 2020 06:16:58 -0700 Received: from HKMAIL104.nvidia.com (10.18.16.13) by HKMAIL103.nvidia.com (10.18.16.12) with Microsoft SMTP Server (TLS) id 15.0.1473.3; Tue, 8 Sep 2020 13:16:57 +0000 Received: from NAM02-BL2-obe.outbound.protection.outlook.com (104.47.38.56) by HKMAIL104.nvidia.com (10.18.16.13) with Microsoft SMTP Server (TLS) id 15.0.1473.3 via Frontend Transport; Tue, 8 Sep 2020 13:16:57 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=bhubumWj6ssDdMUW87Pds0Ijik5d+KVc+oWd74Us5/cTQnKTgL7IxTQdoFtp8c08r+b+xAsjYmUzJ86pSWd8Gq9lSE9t4fjbNHl2IicAFDm8b3xb+bNQKB+qdkOe52iasWNDZ8zTEHOe75ez1fBzWbQ4ZkacRkjJG5xZ2tAr6AY78m3C/WDOw68maZ7mX0aAooTJvTGHVyzN7Dta7aa+jJap+Rh74tdxd89vinman5C1VpQulQG2H5dG7JMNUgi6m6CobaSO7gdn1Ym8sbVVPukCGMZYIMvpzOXNPLiuPHcjwahSmogD8kczoHA1R1RdJYi1A0qW9KA+1CFjWg6sdg== 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=cOiOVJycfmLFkf0Fd0354OIK59r3qvKsXyFVKutwhc0=; b=e+HBc2lmm5jxBcPv9VjW+M8dcPNNqGY2VftBUlH2EvDyS8W5SI2c2NqCnBUzkz1RumrLGPiCbw5xnWssChG3+oZrRUTLn30kqBGSKAd6Wtw2XeY2nj5WkTKucqZn76m46DfNC0oCjhTMsDdvLh0FbIYmsfROGzfPxdaHLclNMiyAk29NhYFl58l2zp4+FwtYDClOJrS1bPiOgfbN/nvuhlBiVjfKtO0OaL0FK94YW4f1KoPyiT3tZpH1G1u0LelNFvZSkEbZOZOiv/gmICpCaFNuFLIaVAoZRdU9SsCwyyWw8KSy1y0+DA6yLS5MwaNVT8dOWYCZFfUsWIi3F2Iztw== 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 BYAPR12MB2981.namprd12.prod.outlook.com (2603:10b6:a03:de::26) 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:16:51 +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:16:51 +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 4/7] bridge: cfm: Kernel space implementation of CFM. Thread-Topic: [PATCH RFC 4/7] bridge: cfm: Kernel space implementation of CFM. Thread-Index: AQHWgpyAVP918jLqX0CAA/3OqARQo6lev2WA Date: Tue, 8 Sep 2020 13:16:51 +0000 Message-ID: References: <20200904091527.669109-1-henrik.bjoernlund@microchip.com> <20200904091527.669109-5-henrik.bjoernlund@microchip.com> In-Reply-To: <20200904091527.669109-5-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: e96fa58e-50c1-4f05-7020-08d853f97336 x-ms-traffictypediagnostic: BYAPR12MB2981: x-ms-exchange-transport-forked: True x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers: OLM:2733; x-ms-exchange-senderadcheck: 1 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: dbOEBDrm86x97H6PLFq2qaeYThyH/E3EJPCG2R9jW3EGJDLMV6s5cn+RP9EKMx1/bocYrjmI/HQzH6M+HxdMVk5JmeJ39ag7k0WMtzwIfxK7wUCtrzPotKMv930cW2CJfIb9btA5NHc2ewQeHtkzl4MSWs9zkQW2ImyOddPd/U8h4bAYpJsHdO5kFOkKBcXv5zMeIbdQaywZ7Sj8EN7jCzSbZvrLfQY8+GMHShDJOA9Sc1wGRJpH5ZQTcPETAK8eQRE03X+gPTfMThmJfq83LC2rwbrX2pCFDDCaZkHVit9gPFlNZXXRNZGvz3e+uTu2liz4szgm3haZiX0+YJzR7HunUdIbC/9qQrLE9xXmQojKfwTZq9l7R99Kv9cLt+qt 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)(366004)(396003)(376002)(39860400002)(136003)(346002)(316002)(3450700001)(64756008)(30864003)(76116006)(66556008)(66446008)(8676002)(5660300002)(26005)(66476007)(186003)(91956017)(66946007)(4326008)(83380400001)(110136005)(2906002)(6512007)(6486002)(71200400001)(6506007)(8936002)(2616005)(36756003)(478600001)(86362001)(921003)(559001)(579004);DIR:OUT;SFP:1101; x-ms-exchange-antispam-messagedata: 380IHONHMhuFNCPjp/VwxgnLio3Kyaast7QOnV+LfuEXKUjeQIKYKGpbefPIZXQcucy/VlJzRULsseFKpbcxLomKr+V7QJOU8vauy3v1lcM2EXKWgNhQiBtGHJE4dSYlYtbIxjnbNouvlZncu6z3YhypiAt6SnyYVycMkt7E9qZEt6fMH7hjsM9VRfy44YGGABiJo4+4z0T7k+BaqSO68veRIlyBtMIPCwCQUAm97BEGNZ0eUfnSxtlc7fMYZgu+y2nCJjCDVLpyClx8hNwO7gyFa8EA6hJVnoIC2VcUQIVu0ArfnexjbZ6Lpfw5oQ4IqwolazJbmuuGn3jTmjxRbdrnffViTzGYluhDY/kppl0J/igSV5wkvZVnKBYeHcmmDV5hZF/2pdUquiDdyWI+kNMd8QABsnqFb+1zZvafONfAaVqtXHkVVZv6hp3dyc98nPR0Z/u3tAGIZ4PAY+wp83fbL0X6V/X38wswbTeQ9k/mkV4YN8dEr+ZGVShFhgy9cSo6JfyJLVv1LH/RlXkv4y/pouhMIdMGhA7dhWoGiI2w2TjdlLk5cjfgs+fVTHcS2hxfXyOxXK477UE6wHdCh9Ik4iDfhg3SxhsH5Cdb7jjfRot9U/OJaPvluYfGmOjem1MOYTFhzgAVXchsB2QfiQ== Content-Type: text/plain; charset="utf-8" Content-ID: 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: e96fa58e-50c1-4f05-7020-08d853f97336 X-MS-Exchange-CrossTenant-originalarrivaltime: 08 Sep 2020 13:16:51.5716 (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: yZMntdO0H80DiomxM4WOeWKjTPNQi3rG/R0B1wPwR1/0uJBf06FEJruK4wHeUEVR5Nq9eL4aBdx0v0nlVbBFkg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: BYAPR12MB2981 X-OriginatorOrg: Nvidia.com DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nvidia.com; s=n1; t=1599571018; bh=cOiOVJycfmLFkf0Fd0354OIK59r3qvKsXyFVKutwhc0=; 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=gQtQ4wQU05e2He6SAcO9bXDVGjyGDSV/SaWryrbmfYJEeWSjoYgIT66GVgn407a45 SxCCFlO7ccwzJ83eEhUUytBLrSlmskqyJZGmRY4sHLpEhSUsXqV9PQjcuJwsj+DCIh gdNBXXs5vpgFzoXuYn2wB5Fyhd2XUMWcyQGZ6+34xYxdw2KsClwn1Qk9wKoq0vTu7j z+zSEq7rSl72jHRGXLwy1bNklul8TLr2KuCqhLkWe8+N+8YeZjNHVS2/CCz2vMHlsX k6vXJK3DTovuTaVbzrPFmicSZKegZo03BEvCE7q5jUhWyVLfNFvzKC5OqmKp03ty9q 6zz2C1ChoNHPw== Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org T24gRnJpLCAyMDIwLTA5LTA0IGF0IDA5OjE1ICswMDAwLCBIZW5yaWsgQmpvZXJubHVuZCB3cm90 ZToNCj4gVGhpcyBpcyB0aGUgaW1wbGVtZW50YXRpb24gb2YgdGhlIENGTSBwcm90b2NvbCBhY2Nv cmRpbmcgdG8NCj4gODAyLjFRIHNlY3Rpb24gMTIuMTQuDQo+IA0KPiBDb25uZWN0aXZpdHkgRmF1 bHQgTWFuYWdlbWVudCAoQ0ZNKSBjb21wcmlzZXMgY2FwYWJpbGl0aWVzIGZvcg0KPiBkZXRlY3Rp bmcsIHZlcmlmeWluZywgYW5kIGlzb2xhdGluZyBjb25uZWN0aXZpdHkgZmFpbHVyZXMgaW4NCj4g VmlydHVhbCBCcmlkZ2VkIE5ldHdvcmtzLiBUaGVzZSBjYXBhYmlsaXRpZXMgY2FuIGJlIHVzZWQg aW4NCj4gbmV0d29ya3Mgb3BlcmF0ZWQgYnkgbXVsdGlwbGUgaW5kZXBlbmRlbnQgb3JnYW5pemF0 aW9ucywgZWFjaA0KPiB3aXRoIHJlc3RyaWN0ZWQgbWFuYWdlbWVudCBhY2Nlc3MgdG8gZWFjaCBv dGhlcuKAmXMgZXF1aXBtZW50Lg0KPiANCj4gQ0ZNIGZ1bmN0aW9ucyBhcmUgcGFydGl0aW9uZWQg YXMgZm9sbG93czoNCj4gICAgIC0gUGF0aCBkaXNjb3ZlcnkNCj4gICAgIC0gRmF1bHQgZGV0ZWN0 aW9uDQo+ICAgICAtIEZhdWx0IHZlcmlmaWNhdGlvbiBhbmQgaXNvbGF0aW9uDQo+ICAgICAtIEZh dWx0IG5vdGlmaWNhdGlvbg0KPiAgICAgLSBGYXVsdCByZWNvdmVyeQ0KPiANCj4gSW50ZXJmYWNl IGNvbnNpc3RzIG9mIHRoZXNlIGZ1bmN0aW9uczoNCj4gYnJfY2ZtX21lcF9jcmVhdGUoKQ0KPiBi cl9jZm1fbWVwX2RlbGV0ZSgpDQo+IGJyX2NmbV9tZXBfY29uZmlnX3NldCgpDQo+IGJyX2NmbV9t ZXBfc3RhdHVzX2dldCgpDQo+IGJyX2NmbV9tZXBfY291bnRlcnNfZ2V0KCkNCj4gYnJfY2ZtX21l cF9jb3VudGVyc19jbGVhcigpDQo+IGJyX2NmbV9jY19jb25maWdfc2V0KCkNCj4gYnJfY2ZtX2Nj X3BlZXJfbWVwX2FkZCgpDQo+IGJyX2NmbV9jY19wZWVyX21lcF9yZW1vdmUoKQ0KPiBicl9jZm1f Y2NfcmRpX3NldCgpDQo+IGJyX2NmbV9jY19jY21fdHgoKQ0KPiBicl9jZm1fY2Nfc3RhdHVzX2dl dCgpDQo+IGJyX2NmbV9jY19jb3VudGVyc19nZXQoKQ0KPiBicl9jZm1fY2NfY291bnRlcnNfY2xl YXIoKQ0KPiBicl9jZm1fY2NfcGVlcl9zdGF0dXNfZ2V0KCkNCj4gDQo+IEEgTUVQIGluc3RhbmNl IGlzIGNyZWF0ZWQgYnkgYnJfY2ZtX21lcF9jcmVhdGUoKQ0KPiAgICAgLUl0IGlzIHRoZSBNYWlu dGVuYW5jZSBhc3NvY2lhdGlvbiBFbmQgUG9pbnQNCj4gICAgICBkZXNjcmliZWQgaW4gODAyLjFR IHNlY3Rpb24gMTkuMi4NCj4gICAgIC1JdCBpcyBjcmVhdGVkIG9uIGEgc3BlY2lmaWMgbGV2ZWwg KDEtNykgYW5kIGlzIGFzc3VyaW5nDQo+ICAgICAgdGhhdCBubyBDRk0gZnJhbWVzIGFyZSBwYXNz aW5nIHRocm91Z2ggdGhpcyBNRVAgb24gbG93ZXIgbGV2ZWxzLg0KPiAgICAgLUl0IGluaXRpYXRl cyBhbmQgdmFsaWRhdGVzIENGTSBmcmFtZXMgb24gaXRzIGxldmVsLg0KPiAgICAgLUl0IGNhbiBv bmx5IGV4aXN0IG9uIGEgcG9ydCB0aGF0IGlzIHJlbGF0ZWQgdG8gYSBicmlkZ2UuDQo+ICAgICAt QXR0cmlidXRlcyBnaXZlbiBjYW5ub3QgYmUgY2hhbmdlZCB1bnRpbCB0aGUgaW5zdGFuY2UgaXMN Cj4gICAgICBkZWxldGVkLg0KPiANCj4gQSBNRVAgaW5zdGFuY2UgY2FuIGJlIGRlbGV0ZWQgYnkg YnJfY2ZtX21lcF9kZWxldGUoKS4NCj4gDQo+IEEgY3JlYXRlZCBNRVAgaW5zdGFuY2UgaGFzIGF0 dHJpYnV0ZXMgdGhhdCBjYW4gYmUNCj4gY29uZmlndXJlZCBieSBicl9jZm1fbWVwX2NvbmZpZ19z ZXQoKS4NCj4gDQo+IEEgTUVQIGNvbnRhaW4gc3RhdHVzIGFuZCBjb3VudGVyIGluZm9ybWF0aW9u IHRoYXQgY2FuIGJlDQo+IHJldHJpZXZlZCBieSBicl9jZm1fbWVwX3N0YXR1c19nZXQoKSBhbmQN Cj4gYnJfY2ZtX21lcF9jb3VudGVyc19nZXQoKS4NCj4gDQo+IEEgTUVQIGNvdW50ZXJzIGNhbiBi ZSBjbGVhcmVkIGJ5IGJyX2NmbV9tZXBfY291bnRlcnNfY2xlYXIoKS4NCj4gDQo+IEEgTUVQIENv bnRpbnVpdHkgQ2hlY2sgZmVhdHVyZSBjYW4gYmUgY29uZmlndXJlZCBieQ0KPiBicl9jZm1fY2Nf Y29uZmlnX3NldCgpDQo+ICAgICBUaGUgQ29udGludWl0eSBDaGVjayBSZWNlaXZlciBzdGF0ZSBt YWNoaW5lIGNhbiBiZQ0KPiAgICAgZW5hYmxlZCBhbmQgZGlzYWJsZWQuDQo+ICAgICBBY2NvcmRp bmcgdG8gODAyLjFRIHNlY3Rpb24gMTkuMi44DQo+IA0KPiBBIE1FUCBjYW4gaGF2ZSBQZWVyIE1F UHMgYWRkZWQgYW5kIHJlbW92ZWQgYnkNCj4gYnJfY2ZtX2NjX3BlZXJfbWVwX2FkZCgpIGFuZCBi cl9jZm1fY2NfcGVlcl9tZXBfcmVtb3ZlKCkNCj4gICAgIFRoZSBDb250aW51aXR5IENoZWNrIGZl YXR1cmUgY2FuIG1haW50YWluIGNvbm5lY3Rpdml0eQ0KPiAgICAgc3RhdHVzIG9uIGVhY2ggYWRk ZWQgUGVlciBNRVAuDQo+IA0KPiBBIE1FUCBjYW4gYmUgY29uZmlndXJlZCB0byBzdGFydCBvciBz dG9wIHRyYW5zbWlzc2lvbiBvZiBDQ00gZnJhbWVzIGJ5DQo+IGJyX2NmbV9jY19jY21fdHgoKQ0K PiAgICAgVGhlIENDTSB3aWxsIGJlIHRyYW5zbWl0dGVkIGZvciBhIHNlbGVjdGVkIHBlcmlvZCBp biBzZWNvbmRzLg0KPiAgICAgTXVzdCBjYWxsIHRoaXMgZnVuY3Rpb24gYmVmb3JlIHRpbWVvdXQg dG8ga2VlcCB0cmFuc21pc3Npb24gYWxpdmUuDQo+IA0KPiBBIE1FUCB0cmFuc21pdHRpbmcgQ0NN IGNhbiBiZSBjb25maWd1cmVkIHdpdGggaW5zZXJ0ZWQgUkRJIGluIFBEVSBieQ0KPiBicl9jZm1f Y2NfcmRpX3NldCgpDQo+IA0KPiBBIE1FUCBjb250YWluIENvbnRpbnVpdHkgQ2hlY2sgc3RhdHVz IGFuZCBjb3VudGVyIGluZm9ybWF0aW9uDQo+IHRoYXQgY2FuIGJlIHJldHJpZXZlZCBieSBicl9j Zm1fY2Nfc3RhdHVzX2dldCgpIGFuZA0KPiBicl9jZm1fY2NfY291bnRlcnNfZ2V0KCkuDQo+IA0K PiBBIE1FUCBDb250aW51aXR5IENoZWNrIGNvdW50ZXJzIGNhbiBiZSBjbGVhcmVkDQo+IGJ5IGJy X2NmbV9jY19jb3VudGVyc19jbGVhcigpLg0KPiANCj4gQSBNRVAgY29udGFpbiBQZWVyIE1FUCBD b250aW51aXR5IENoZWNrIHN0YXR1cyBpbmZvcm1hdGlvbiB0aGF0DQo+IGNhbiBiZSByZXRyaWV2 ZWQgYnkgYnJfY2ZtX2NjX3BlZXJfc3RhdHVzX2dldCgpLg0KPiANCj4gU2lnbmVkLW9mZi1ieTog SGVucmlrIEJqb2Vybmx1bmQgIDxoZW5yaWsuYmpvZXJubHVuZEBtaWNyb2NoaXAuY29tPg0KPiAt LS0NCj4gIGluY2x1ZGUvdWFwaS9saW51eC9jZm1fYnJpZGdlLmggfCAgNzUgKysrDQo+ICBuZXQv YnJpZGdlL01ha2VmaWxlICAgICAgICAgICAgIHwgICAyICsNCj4gIG5ldC9icmlkZ2UvYnJfY2Zt LmMgICAgICAgICAgICAgfCA4ODAgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysNCj4g IG5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oICAgICAgICAgfCAgMTYgKw0KPiAgbmV0L2JyaWRnZS9i cl9wcml2YXRlX2NmbS5oICAgICB8IDI0MiArKysrKysrKysNCj4gIDUgZmlsZXMgY2hhbmdlZCwg MTIxNSBpbnNlcnRpb25zKCspDQo+ICBjcmVhdGUgbW9kZSAxMDA2NDQgaW5jbHVkZS91YXBpL2xp bnV4L2NmbV9icmlkZ2UuaA0KPiAgY3JlYXRlIG1vZGUgMTAwNjQ0IG5ldC9icmlkZ2UvYnJfY2Zt LmMNCj4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBuZXQvYnJpZGdlL2JyX3ByaXZhdGVfY2ZtLmgNCj4g DQoNClRoaXMgaXMgYSBsYXJnZSBzaW5nbGUgcGF0Y2gsIGRvIHlvdSB0aGluayBpdCBjYW4gYmUg YnJva2VuIGRvd24gaW50byBwaWVjZXM/DQpJJ2xsIHJldmlldyBpdCBsaWtlIHRoaXMgbm93LCBi dXQgaXQgd291bGQgYmUgbXVjaCBlYXNpZXIgaWYgaXQncyBpbiBzbWFsbGVyDQpsb2dpY2FsIHBp ZWNlcy4NCkluIGdlbmVyYWwgYXJlIHlvdSBzdXJlIHRoZXJlIGFyZSBubyBob2xlcyBpbiB0aGUg c3RydWN0cyBiZWluZyBhc3NpZ25lZA0KZGlyZWN0bHk/IFNpbmNlIHlvdSB1c2UgbWVtY21wKCkg YW5kIHN1Y2gsIHlvdSBjb3VsZCBlbmQgdXAgc3VycHJpc2VkLiA6KQ0KDQo+IGRpZmYgLS1naXQg YS9pbmNsdWRlL3VhcGkvbGludXgvY2ZtX2JyaWRnZS5oIGIvaW5jbHVkZS91YXBpL2xpbnV4L2Nm bV9icmlkZ2UuaA0KPiBuZXcgZmlsZSBtb2RlIDEwMDY0NA0KPiBpbmRleCAwMDAwMDAwMDAwMDAu LjM4OWVhMWUxZjY4ZQ0KPiAtLS0gL2Rldi9udWxsDQo+ICsrKyBiL2luY2x1ZGUvdWFwaS9saW51 eC9jZm1fYnJpZGdlLmgNCj4gQEAgLTAsMCArMSw3NSBAQA0KPiArLyogU1BEWC1MaWNlbnNlLUlk ZW50aWZpZXI6IEdQTC0yLjArIFdJVEggTGludXgtc3lzY2FsbC1ub3RlICovDQo+ICsNCj4gKyNp Zm5kZWYgX1VBUElfTElOVVhfQ0ZNX0JSSURHRV9IXw0KPiArI2RlZmluZSBfVUFQSV9MSU5VWF9D Rk1fQlJJREdFX0hfDQo+ICsNCj4gKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPg0KPiArI2luY2x1 ZGUgPGxpbnV4L2lmX2V0aGVyLmg+DQo+ICsNCj4gKyNkZWZpbmUgRVRIRVJfSEVBREVSX0xFTkdU SAkJKDYrNis0KzIpDQo+ICsjZGVmaW5lIENGTV9NQUlEX0xFTkdUSAkJCTQ4DQo+ICsjZGVmaW5l IENGTV9DQ01fUERVX0xFTkdUSAkJNzUNCj4gKyNkZWZpbmUgQ0ZNX1BPUlRfU1RBVFVTX1RMVl9M RU5HVEgJNA0KPiArI2RlZmluZSBDRk1fSUZfU1RBVFVTX1RMVl9MRU5HVEgJNA0KPiArI2RlZmlu ZSBDRk1fSUZfU1RBVFVTX1RMVl9UWVBFCQk0DQo+ICsjZGVmaW5lIENGTV9QT1JUX1NUQVRVU19U TFZfVFlQRQkyDQo+ICsjZGVmaW5lIENGTV9FTkRFX1RMVl9UWVBFCQkwDQo+ICsjZGVmaW5lIENG TV9DQ01fTUFYX0ZSQU1FX0xFTkdUSAkoRVRIRVJfSEVBREVSX0xFTkdUSCtcDQo+ICsJCQkJCSBD Rk1fQ0NNX1BEVV9MRU5HVEgrXA0KPiArCQkJCQkgQ0ZNX1BPUlRfU1RBVFVTX1RMVl9MRU5HVEgr XA0KPiArCQkJCQkgQ0ZNX0lGX1NUQVRVU19UTFZfTEVOR1RIKQ0KPiArI2RlZmluZSBDRk1fRlJB TUVfUFJJTwkJCTcNCj4gKyNkZWZpbmUgQ0ZNX0NDTV9PUENPREUJCQkxDQo+ICsjZGVmaW5lIENG TV9DQ01fVExWX09GRlNFVAkJNzANCj4gKyNkZWZpbmUgQ0ZNX0NDTV9QRFVfTUFJRF9PRkZTRVQJ CTEwDQo+ICsjZGVmaW5lIENGTV9DQ01fUERVX01FUElEX09GRlNFVAk4DQo+ICsjZGVmaW5lIENG TV9DQ01fUERVX1NFUU5SX09GRlNFVAk0DQo+ICsjZGVmaW5lIENGTV9DQ01fUERVX1RMVl9PRkZT RVQJCTc0DQo+ICsjZGVmaW5lIENGTV9DQ01fSVRVX1JFU0VSVkVEX1NJWkUJMTYNCj4gKw0KPiAr c3RydWN0IGJyX2NmbV9jb21tb25faGRyIHsNCj4gKwlfX3U4IG1kbGV2ZWxfdmVyc2lvbjsNCj4g KwlfX3U4IG9wY29kZTsNCj4gKwlfX3U4IGZsYWdzOw0KPiArCV9fdTggdGx2X29mZnNldDsNCj4g K307DQo+ICsNCj4gK3N0cnVjdCBicl9jZm1fc3RhdHVzX3RsdiB7DQo+ICsJX191OCB0eXBlOw0K PiArCV9fYmUxNiBsZW5ndGg7DQo+ICsJX191OCB2YWx1ZTsNCj4gK307DQo+ICsNCj4gK2VudW0g YnJfY2ZtX29wY29kZXMgew0KPiArCUJSX0NGTV9PUENPREVfQ0NNID0gMHgxLA0KPiArCUJSX0NG TV9PUENPREVfTEJSID0gMHgyLA0KPiArCUJSX0NGTV9PUENPREVfTEJNID0gMHgzLA0KPiArCUJS X0NGTV9PUENPREVfTFRSID0gMHg0LA0KPiArCUJSX0NGTV9PUENPREVfTFRNID0gMHg1LA0KPiAr fTsNCj4gKw0KPiArLyogTUVQIGRvbWFpbiAqLw0KPiArZW51bSBicl9jZm1fZG9tYWluIHsNCj4g KwlCUl9DRk1fUE9SVCwNCj4gKwlCUl9DRk1fVkxBTiwNCj4gK307DQo+ICsNCj4gKy8qIE1FUCBk aXJlY3Rpb24gKi8NCj4gK2VudW0gYnJfY2ZtX21lcF9kaXJlY3Rpb24gew0KPiArCUJSX0NGTV9N RVBfRElSRUNUSU9OX0RPV04sDQo+ICsJQlJfQ0ZNX01FUF9ESVJFQ1RJT05fVVAsDQo+ICt9Ow0K PiArDQo+ICsvKiBDQ00gaW50ZXJ2YWwgc3VwcG9ydGVkLiAqLw0KPiArZW51bSBicl9jZm1fY2Nt X2ludGVydmFsIHsNCj4gKwlCUl9DRk1fQ0NNX0lOVEVSVkFMX05PTkUsDQo+ICsJQlJfQ0ZNX0ND TV9JTlRFUlZBTF8zXzNfTVMsDQo+ICsJQlJfQ0ZNX0NDTV9JTlRFUlZBTF8xMF9NUywNCj4gKwlC Ul9DRk1fQ0NNX0lOVEVSVkFMXzEwMF9NUywNCj4gKwlCUl9DRk1fQ0NNX0lOVEVSVkFMXzFfU0VD LA0KPiArCUJSX0NGTV9DQ01fSU5URVJWQUxfMTBfU0VDLA0KPiArCUJSX0NGTV9DQ01fSU5URVJW QUxfMV9NSU4sDQo+ICsJQlJfQ0ZNX0NDTV9JTlRFUlZBTF8xMF9NSU4sDQo+ICt9Ow0KPiArDQo+ ICsjZW5kaWYNCj4gZGlmZiAtLWdpdCBhL25ldC9icmlkZ2UvTWFrZWZpbGUgYi9uZXQvYnJpZGdl L01ha2VmaWxlDQo+IGluZGV4IGNjYjM5NDIzNmZiZC4uZGRjMGE5MTkyMzQ4IDEwMDY0NA0KPiAt LS0gYS9uZXQvYnJpZGdlL01ha2VmaWxlDQo+ICsrKyBiL25ldC9icmlkZ2UvTWFrZWZpbGUNCj4g QEAgLTI3LDMgKzI3LDUgQEAgYnJpZGdlLSQoQ09ORklHX05FVF9TV0lUQ0hERVYpICs9IGJyX3N3 aXRjaGRldi5vDQo+ICBvYmotJChDT05GSUdfTkVURklMVEVSKSArPSBuZXRmaWx0ZXIvDQo+ICAN Cj4gIGJyaWRnZS0kKENPTkZJR19CUklER0VfTVJQKQkrPSBicl9tcnBfc3dpdGNoZGV2Lm8gYnJf bXJwLm8gYnJfbXJwX25ldGxpbmsubw0KPiArDQo+ICticmlkZ2UtJChDT05GSUdfQlJJREdFX0NG TSkJKz0gYnJfY2ZtLm8NCj4gZGlmZiAtLWdpdCBhL25ldC9icmlkZ2UvYnJfY2ZtLmMgYi9uZXQv YnJpZGdlL2JyX2NmbS5jDQo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQo+IGluZGV4IDAwMDAwMDAw MDAwMC4uZTM4Y2MzZThmMjYyDQo+IC0tLSAvZGV2L251bGwNCj4gKysrIGIvbmV0L2JyaWRnZS9i cl9jZm0uYw0KPiBAQCAtMCwwICsxLDg4MCBAQA0KPiArLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZp ZXI6IEdQTC0yLjAtb3ItbGF0ZXINCj4gKw0KPiArI2luY2x1ZGUgPGxpbnV4L2NmbV9icmlkZ2Uu aD4NCj4gKyNpbmNsdWRlIDx1YXBpL2xpbnV4L2NmbV9icmlkZ2UuaD4NCj4gKyNpbmNsdWRlICJi cl9wcml2YXRlX2NmbS5oIg0KPiArDQo+ICtzdGF0aWMgc3RydWN0IGJyX2NmbV9tZXAgKmJyX21l cF9maW5kKHN0cnVjdCBuZXRfYnJpZGdlICpiciwgdTMyIGluc3RhbmNlKQ0KPiArew0KPiArCXN0 cnVjdCBicl9jZm1fbWVwICpyZXMgPSBOVUxMOw0KPiArCXN0cnVjdCBicl9jZm1fbWVwICptZXA7 DQo+ICsNCj4gKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShtZXAsICZici0+bWVwX2xpc3QsIGhl YWQsDQo+ICsJCQkJbG9ja2RlcF9ydG5sX2lzX2hlbGQoKSkgew0KPiArCQlpZiAobWVwLT5pbnN0 YW5jZSA9PSBpbnN0YW5jZSkgew0KPiArCQkJcmVzID0gbWVwOw0KPiArCQkJYnJlYWs7DQo+ICsJ CX0NCj4gKwl9DQo+ICsNCj4gKwlyZXR1cm4gcmVzOw0KPiArfQ0KDQpJdCBzZWVtcyBicl9tZXBf ZmluZCgpIGlzIGNhbGxlZCBvbmx5IGZyb20gZnVuY3Rpb25zIHdoaWNoIHJlbHkgb24gcnRubCBi ZWluZw0KaGVsZCBzbyB5b3UgY2FuIGp1c3QgdXNlIG5vcm1hbCBsaXN0IHRyYXZlcnNpbmcgZnVu Y3Rpb25zIGluc3RlYWQgb2YgdGhlIHJjdQ0KZmxhdm9yLg0KDQo+ICsNCj4gK3N0YXRpYyBzdHJ1 Y3QgYnJfY2ZtX21lcCAqYnJfbWVwX2ZpbmRfaWZpbmRleChzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIs DQo+ICsJCQkJCSAgICAgIHUzMiBpZmluZGV4KQ0KPiArew0KPiArCXN0cnVjdCBicl9jZm1fbWVw ICpyZXMgPSBOVUxMOw0KPiArCXN0cnVjdCBicl9jZm1fbWVwICptZXA7DQo+ICsNCj4gKwlsaXN0 X2Zvcl9lYWNoX2VudHJ5X3JjdShtZXAsICZici0+bWVwX2xpc3QsIGhlYWQsDQo+ICsJCQkJbG9j a2RlcF9ydG5sX2lzX2hlbGQoKSkgew0KPiArCQlpZiAobWVwLT5jcmVhdGUuaWZpbmRleCA9PSBp ZmluZGV4KSB7DQo+ICsJCQlyZXMgPSBtZXA7DQoNCk5vIG5lZWQgZm9yICJyZXMiLCBqdXN0IHJl dHVybiAibWVwIiB3aGVuIHlvdSBmaW5kIGl0IGFuZCBOVUxMIGJlbG93Lg0KDQo+ICsJCQlicmVh azsNCj4gKwkJfQ0KPiArCX0NCg0KVGhlbiB5b3UgY2FuIGRlbGV0ZSB0aGVzZSBicmFja2V0cyBh bmQgdGhlIGJyZWFrLg0KDQo+ICsNCj4gKwlyZXR1cm4gcmVzOw0KPiArfQ0KPiArDQo+ICtzdGF0 aWMgc3RydWN0IGJyX2NmbV9wZWVyX21lcCAqYnJfcGVlcl9tZXBfZmluZChzdHJ1Y3QgYnJfY2Zt X21lcCAqbWVwLA0KPiArCQkJCQkJdTMyIG1lcGlkKQ0KPiArew0KPiArCXN0cnVjdCBicl9jZm1f cGVlcl9tZXAgKnJlcyA9IE5VTEw7DQo+ICsJc3RydWN0IGJyX2NmbV9wZWVyX21lcCAqcGVlcl9t ZXA7DQo+ICsNCj4gKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShwZWVyX21lcCwgJm1lcC0+cGVl cl9tZXBfbGlzdCwgaGVhZCwNCj4gKwkJCQlsb2NrZGVwX3J0bmxfaXNfaGVsZCgpKSB7DQo+ICsJ CWlmIChwZWVyX21lcC0+bWVwaWQgPT0gbWVwaWQpIHsNCj4gKwkJCXJlcyA9IHBlZXJfbWVwOw0K DQpObyBuZWVkIGZvciAicmVzIiwganVzdCByZXR1cm4gInBlZXJfbWVwIiB3aGVuIHlvdSBmaW5k IGl0IGFuZCBOVUxMIGJlbG93Lg0KDQo+ICsJCQlicmVhazsNCj4gKwkJfQ0KPiArCX0NCg0KVGhl biB5b3UgY2FuIGRlbGV0ZSB0aGVzZSBicmFja2V0cyBhbmQgdGhlIGJyZWFrLg0KDQo+ICsNCj4g KwlyZXR1cm4gcmVzOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgc3RydWN0IG5ldF9icmlkZ2VfcG9y dCAqYnJfbWVwX2dldF9wb3J0KHN0cnVjdCBuZXRfYnJpZGdlICpiciwNCj4gKwkJCQkJICAgICAg IHUzMiBpZmluZGV4KQ0KPiArew0KPiArCXN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnJlcyA9IE5V TEw7DQo+ICsJc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcG9ydDsNCj4gKw0KPiArCWxpc3RfZm9y X2VhY2hfZW50cnkocG9ydCwgJmJyLT5wb3J0X2xpc3QsIGxpc3QpIHsNCj4gKwkJaWYgKHBvcnQt PmRldi0+aWZpbmRleCA9PSBpZmluZGV4KSB7DQo+ICsJCQlyZXMgPSBwb3J0Ow0KDQpObyBuZWVk IGZvciAicmVzIiwganVzdCByZXR1cm4gInBvcnQiIHdoZW4geW91IGZpbmQgaXQgYW5kIE5VTEwg YmVsb3cuDQoNCj4gKwkJCWJyZWFrOw0KPiArCQl9DQo+ICsJfQ0KDQpUaGVuIHlvdSBjYW4gZGVs ZXRlIHRoZXNlIGJyYWNrZXRzIGFuZCB0aGUgYnJlYWsuIDopIA0KDQo+ICsNCj4gKwlyZXR1cm4g cmVzOw0KPiArfQ0KPiArDQo+ICsvKiBDYWxjdWxhdGUgdGhlIENDTSBpbnRlcnZhbCBpbiB1cy4g Ki8NCj4gK3N0YXRpYyB1MzIgaW50ZXJ2YWxfdG9fdXMoZW51bSBicl9jZm1fY2NtX2ludGVydmFs IGludGVydmFsKQ0KPiArew0KPiArCXN3aXRjaCAoaW50ZXJ2YWwpIHsNCj4gKwljYXNlIEJSX0NG TV9DQ01fSU5URVJWQUxfTk9ORToNCj4gKwkJcmV0dXJuIDA7DQo+ICsJY2FzZSBCUl9DRk1fQ0NN X0lOVEVSVkFMXzNfM19NUzoNCj4gKwkJcmV0dXJuIDMzMDA7DQo+ICsJY2FzZSBCUl9DRk1fQ0NN X0lOVEVSVkFMXzEwX01TOg0KPiArCQlyZXR1cm4gMTAgKiAxMDAwOw0KPiArCWNhc2UgQlJfQ0ZN X0NDTV9JTlRFUlZBTF8xMDBfTVM6DQo+ICsJCXJldHVybiAxMDAgKiAxMDAwOw0KPiArCWNhc2Ug QlJfQ0ZNX0NDTV9JTlRFUlZBTF8xX1NFQzoNCj4gKwkJcmV0dXJuIDEwMDAgKiAxMDAwOw0KPiAr CWNhc2UgQlJfQ0ZNX0NDTV9JTlRFUlZBTF8xMF9TRUM6DQo+ICsJCXJldHVybiAxMCAqIDEwMDAg KiAxMDAwOw0KPiArCWNhc2UgQlJfQ0ZNX0NDTV9JTlRFUlZBTF8xX01JTjoNCj4gKwkJcmV0dXJu IDYwICogMTAwMCAqIDEwMDA7DQo+ICsJY2FzZSBCUl9DRk1fQ0NNX0lOVEVSVkFMXzEwX01JTjoN Cj4gKwkJcmV0dXJuIDEwICogNjAgKiAxMDAwICogMTAwMDsNCj4gKwl9DQo+ICsJcmV0dXJuIDA7 DQo+ICt9DQo+ICsNCj4gKy8qIENvbnZlcnQgdGhlIGludGVyZmFjZSBpbnRlcnZhbCB0byBDQ00g UERVIHZhbHVlLiAqLw0KPiArc3RhdGljIHUzMiBpbnRlcnZhbF90b19wZHUoZW51bSBicl9jZm1f Y2NtX2ludGVydmFsIGludGVydmFsKQ0KPiArew0KPiArCXN3aXRjaCAoaW50ZXJ2YWwpIHsNCj4g KwljYXNlIEJSX0NGTV9DQ01fSU5URVJWQUxfTk9ORToNCj4gKwkJcmV0dXJuIDA7DQo+ICsJY2Fz ZSBCUl9DRk1fQ0NNX0lOVEVSVkFMXzNfM19NUzoNCj4gKwkJcmV0dXJuIDE7DQo+ICsJY2FzZSBC Ul9DRk1fQ0NNX0lOVEVSVkFMXzEwX01TOg0KPiArCQlyZXR1cm4gMjsNCj4gKwljYXNlIEJSX0NG TV9DQ01fSU5URVJWQUxfMTAwX01TOg0KPiArCQlyZXR1cm4gMzsNCj4gKwljYXNlIEJSX0NGTV9D Q01fSU5URVJWQUxfMV9TRUM6DQo+ICsJCXJldHVybiA0Ow0KPiArCWNhc2UgQlJfQ0ZNX0NDTV9J TlRFUlZBTF8xMF9TRUM6DQo+ICsJCXJldHVybiA1Ow0KPiArCWNhc2UgQlJfQ0ZNX0NDTV9JTlRF UlZBTF8xX01JTjoNCj4gKwkJcmV0dXJuIDY7DQo+ICsJY2FzZSBCUl9DRk1fQ0NNX0lOVEVSVkFM XzEwX01JTjoNCj4gKwkJcmV0dXJuIDc7DQo+ICsJfQ0KPiArCXJldHVybiAwOw0KPiArfQ0KPiAr DQo+ICsvKiBDb252ZXJ0IHRoZSBDQ00gUERVIHZhbHVlIHRvIGludGVydmFsIG9uIGludGVyZmFj ZS4gKi8NCj4gK3N0YXRpYyB1MzIgcGR1X3RvX2ludGVydmFsKHUzMiB2YWx1ZSkNCj4gK3sNCj4g Kwlzd2l0Y2ggKHZhbHVlKSB7DQo+ICsJY2FzZSAwOg0KPiArCQlyZXR1cm4gQlJfQ0ZNX0NDTV9J TlRFUlZBTF9OT05FOw0KPiArCWNhc2UgMToNCj4gKwkJcmV0dXJuIEJSX0NGTV9DQ01fSU5URVJW QUxfM18zX01TOw0KPiArCWNhc2UgMjoNCj4gKwkJcmV0dXJuIEJSX0NGTV9DQ01fSU5URVJWQUxf MTBfTVM7DQo+ICsJY2FzZSAzOg0KPiArCQlyZXR1cm4gQlJfQ0ZNX0NDTV9JTlRFUlZBTF8xMDBf TVM7DQo+ICsJY2FzZSA0Og0KPiArCQlyZXR1cm4gQlJfQ0ZNX0NDTV9JTlRFUlZBTF8xX1NFQzsN Cj4gKwljYXNlIDU6DQo+ICsJCXJldHVybiBCUl9DRk1fQ0NNX0lOVEVSVkFMXzEwX1NFQzsNCj4g KwljYXNlIDY6DQo+ICsJCXJldHVybiBCUl9DRk1fQ0NNX0lOVEVSVkFMXzFfTUlOOw0KPiArCWNh c2UgNzoNCj4gKwkJcmV0dXJuIEJSX0NGTV9DQ01fSU5URVJWQUxfMTBfTUlOOw0KPiArCX0NCj4g KwlyZXR1cm4gQlJfQ0ZNX0NDTV9JTlRFUlZBTF9OT05FOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMg dm9pZCBjY21fcnhfdGltZXJfc3RhcnQoc3RydWN0IGJyX2NmbV9wZWVyX21lcCAqcGVlcl9tZXAp DQo+ICt7DQo+ICsJdTMyIGludGVydmFsX3VzOw0KPiArDQo+ICsJaW50ZXJ2YWxfdXMgPSBpbnRl cnZhbF90b191cyhwZWVyX21lcC0+bWVwLT5jY19jb25maWcuZXhwX2ludGVydmFsKTsNCj4gKwkv KiBGdW5jdGlvbiBjY21fcnhfZHdvcmsgbXVzdCBiZSBjYWxsZWQgd2l0aCAxLzQNCj4gKwkgKiBv ZiB0aGUgY29uZmlndXJlZCBDQyAnZXhwZWN0ZWRfaW50ZXJ2YWwnDQo+ICsJICogaW4gb3JkZXIg dG8gZGV0ZWN0IENDTSBkZWZlY3QgYWZ0ZXIgMy4yNSBpbnRlcnZhbC4NCj4gKwkgKi8NCj4gKwlx dWV1ZV9kZWxheWVkX3dvcmsoc3lzdGVtX3dxLCAmcGVlcl9tZXAtPmNjbV9yeF9kd29yaywNCj4g KwkJCSAgIHVzZWNzX3RvX2ppZmZpZXMoaW50ZXJ2YWxfdXMgLyA0KSk7DQo+ICt9DQo+ICsNCj4g K3N0YXRpYyB2b2lkIGNjX3BlZXJfZW5hYmxlKHN0cnVjdCBicl9jZm1fcGVlcl9tZXAgKnBlZXJf bWVwKQ0KPiArew0KPiArCW1lbXNldCgmcGVlcl9tZXAtPmNjX3N0YXR1cywgMCwgc2l6ZW9mKHBl ZXJfbWVwLT5jY19zdGF0dXMpKTsNCj4gKwlwZWVyX21lcC0+Y2NtX3J4X2NvdW50X21pc3MgPSAw Ow0KPiArDQo+ICsJY2NtX3J4X3RpbWVyX3N0YXJ0KHBlZXJfbWVwKTsNCj4gK30NCj4gKw0KPiAr c3RhdGljIHZvaWQgY2NfcGVlcl9kaXNhYmxlKHN0cnVjdCBicl9jZm1fcGVlcl9tZXAgKnBlZXJf bWVwKQ0KPiArew0KPiArCWNhbmNlbF9kZWxheWVkX3dvcmtfc3luYygmcGVlcl9tZXAtPmNjbV9y eF9kd29yayk7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqY2NtX2ZyYW1l X2J1aWxkKHN0cnVjdCBicl9jZm1fbWVwICptZXAsDQo+ICsJCQkJICAgICAgIGNvbnN0IHN0cnVj dCBicl9jZm1fY2NfY2NtX3R4X2luZm8gKmNvbnN0IHR4X2luZm8pDQo+ICsNCj4gK3sNCj4gKwlz dHJ1Y3QgYnJfY2ZtX2NvbW1vbl9oZHIgKmNvbW1vbl9oZHI7DQo+ICsJc3RydWN0IG5ldF9icmlk Z2VfcG9ydCAqYl9wb3J0Ow0KPiArCXN0cnVjdCBicl9jZm1fbWFpZCAqbWFpZDsNCj4gKwl1OCAq aXR1X3Jlc2VydmVkLCAqZV90bHY7DQo+ICsJc3RydWN0IGV0aGhkciAqZXRoX2hkcjsNCj4gKwlz dHJ1Y3Qgc2tfYnVmZiAqc2tiOw0KPiArCV9fYmUzMiAqc3RhdHVzX3RsdjsNCj4gKwlfX2JlMzIg KnNudW1iZXI7DQo+ICsJX19iZTE2ICptZXBpZDsNCj4gKw0KPiArCXJjdV9yZWFkX2xvY2soKTsN Cj4gKwliX3BvcnQgPSByY3VfZGVyZWZlcmVuY2UobWVwLT5iX3BvcnQpOw0KPiArCWlmICghYl9w b3J0KQ0KDQpZb3UgbmVlZCB0byByY3VfcmVhZF91bmxvY2soKSBoZXJlLCBob3cgd2FzIHRoaXMg dGVzdGVkPw0KDQo+ICsJCXJldHVybiBOVUxMOw0KPiArCXNrYiA9IGRldl9hbGxvY19za2IoQ0ZN X0NDTV9NQVhfRlJBTUVfTEVOR1RIKTsNCj4gKwlpZiAoIXNrYikNCj4gKwkJcmV0dXJuIE5VTEw7 DQo+ICsNCj4gKwlza2ItPmRldiA9IGJfcG9ydC0+ZGV2Ow0KPiArCXJjdV9yZWFkX3VubG9jaygp Ow0KDQpZb3UnbGwgaGF2ZSB0byBleHBsYWluIHdoeSB0aGUgZGV2aWNlIHdpbGwgc3RpbGwgZXhp c3QgcGFzdCB0aGlzIHBvaW50Lg0KSSBnZXQgaXQsIGJ1dCBpdCdkIGJlIG5pY2UgdG8gaGF2ZSBp dCBpbiB0aGUgY29tbWl0IG1zZy4NCg0KPiArCXNrYi0+cHJvdG9jb2wgPSBodG9ucyhFVEhfUF9D Rk0pOw0KPiArCXNrYi0+cHJpb3JpdHkgPSBDRk1fRlJBTUVfUFJJTzsNCj4gKw0KPiArCS8qIEV0 aGVybmV0IGhlYWRlciAqL3VubmVjZXNzYXJ5IGNvbW1lbnQNCj4gKwlldGhfaGRyID0gc2tiX3B1 dChza2IsIHNpemVvZigqZXRoX2hkcikpOw0KPiArCWV0aGVyX2FkZHJfY29weShldGhfaGRyLT5o X2Rlc3QsIHR4X2luZm8tPmRtYWMuYWRkcik7DQo+ICsJZXRoZXJfYWRkcl9jb3B5KGV0aF9oZHIt Pmhfc291cmNlLCBtZXAtPmNvbmZpZy51bmljYXN0X21hYy5hZGRyKTsNCj4gKwlldGhfaGRyLT5o X3Byb3RvID0gaHRvbnMoRVRIX1BfQ0ZNKTsNCj4gKw0KPiArCS8qIENvbW1vbiBDRk0gSGVhZGVy ICovDQo+ICsJY29tbW9uX2hkciA9IHNrYl9wdXQoc2tiLCBzaXplb2YoKmNvbW1vbl9oZHIpKTsN Cj4gKwljb21tb25faGRyLT5tZGxldmVsX3ZlcnNpb24gPSBtZXAtPmNvbmZpZy5tZGxldmVsIDw8 IDU7DQo+ICsJY29tbW9uX2hkci0+b3Bjb2RlID0gQ0ZNX0NDTV9PUENPREU7DQo+ICsJY29tbW9u X2hkci0+ZmxhZ3MgPSAobWVwLT5yZGkgPDwgNykgfA0KPiArCQkJICAgIGludGVydmFsX3RvX3Bk dShtZXAtPmNjX2NvbmZpZy5leHBfaW50ZXJ2YWwpOw0KPiArCWNvbW1vbl9oZHItPnRsdl9vZmZz ZXQgPSBDRk1fQ0NNX1RMVl9PRkZTRVQ7DQo+ICsNCj4gKwkvKiBTZXF1ZW5jZSBudW1iZXIgKi8N Cj4gKwlzbnVtYmVyID0gc2tiX3B1dChza2IsIHNpemVvZigqc251bWJlcikpOw0KPiArCWlmICh0 eF9pbmZvLT5zZXFfbm9fdXBkYXRlKSB7DQo+ICsJCSpzbnVtYmVyID0gY3B1X3RvX2JlMzIobWVw LT5jY21fdHhfc251bWJlcik7DQo+ICsJCW1lcC0+Y2NtX3R4X3NudW1iZXIgKz0gMTsNCj4gKwl9 IGVsc2Ugew0KPiArCQkqc251bWJlciA9IDA7DQo+ICsJfQ0KPiArDQo+ICsJLyogTUVQIElEICov DQp1bm5lY2Vzc2FyeSBjb21tZW50DQo+ICsJbWVwaWQgPSBza2JfcHV0KHNrYiwgc2l6ZW9mKCpt ZXBpZCkpOw0KPiArCSptZXBpZCA9IGNwdV90b19iZTE2KCh1MTYpbWVwLT5jb25maWcubWVwaWQp Ow0KPiArDQo+ICsJLyogTUEgSUQgKi8NCnVubmVjZXNzYXJ5IGNvbW1lbnQNCj4gKwltYWlkID0g c2tiX3B1dChza2IsIHNpemVvZigqbWFpZCkpOw0KPiArCW1lbWNweShtYWlkLT5kYXRhLCBtZXAt PmNjX2NvbmZpZy5leHBfbWFpZC5kYXRhLCBzaXplb2YobWFpZC0+ZGF0YSkpOw0KPiArDQo+ICsJ LyogSVRVIHJlc2VydmVkIChDRk1fQ0NNX0lUVV9SRVNFUlZFRF9TSVpFIG9jdGV0cykgKi8NCj4g KwlpdHVfcmVzZXJ2ZWQgPSBza2JfcHV0KHNrYiwgQ0ZNX0NDTV9JVFVfUkVTRVJWRURfU0laRSk7 DQo+ICsJbWVtc2V0KGl0dV9yZXNlcnZlZCwgMCwgQ0ZNX0NDTV9JVFVfUkVTRVJWRURfU0laRSk7 DQo+ICsNCj4gKwkvKiBHZW5lcmVsIENGTSBUTFYgZm9ybWF0Og0KPiArCSAqIFRMViB0eXBlOgkJ b25lIGJ5dGUNCj4gKwkgKiBUTFYgdmFsdWUgbGVuZ3RoOgl0d28gYnl0ZXMNCj4gKwkgKiBUTFYg dmFsdWU6CQknVExWIHZhbHVlIGxlbmd0aCcgYnl0ZXMNCj4gKwkgKi8NCj4gKw0KPiArCS8qIFBv cnQgc3RhdHVzIFRMVi4gVGhlIHZhbHVlIGxlbmd0aCBpcyAxLiBUb3RhbCBvZiA0IGJ5dGVzLiAq Lw0KPiArCWlmICh0eF9pbmZvLT5wb3J0X3Rsdikgew0KPiArCQlzdGF0dXNfdGx2ID0gc2tiX3B1 dChza2IsIHNpemVvZigqc3RhdHVzX3RsdikpOw0KPiArCQkqc3RhdHVzX3RsdiA9IGNwdV90b19i ZTMyKChDRk1fUE9SVF9TVEFUVVNfVExWX1RZUEUgPDwgMjQpIHwNCj4gKwkJCQkJICAoMSA8PCA4 KSB8CS8qIFZhbHVlIGxlbmd0aCAqLw0KPiArCQkJCQkgICh0eF9pbmZvLT5wb3J0X3Rsdl92YWx1 ZSAmIDB4RkYpKTsNCj4gKwl9DQo+ICsNCj4gKwkvKiBJbnRlcmZhY2Ugc3RhdHVzIFRMVi4gVGhl IHZhbHVlIGxlbmd0aCBpcyAxLiBUb3RhbCBvZiA0IGJ5dGVzLiAqLw0KPiArCWlmICh0eF9pbmZv LT5pZl90bHYpIHsNCj4gKwkJc3RhdHVzX3RsdiA9IHNrYl9wdXQoc2tiLCBzaXplb2YoKnN0YXR1 c190bHYpKTsNCj4gKwkJKnN0YXR1c190bHYgPSBjcHVfdG9fYmUzMigoQ0ZNX0lGX1NUQVRVU19U TFZfVFlQRSA8PCAyNCkgfA0KPiArCQkJCQkgICgxIDw8IDgpIHwJLyogVmFsdWUgbGVuZ3RoICov DQo+ICsJCQkJCSAgKHR4X2luZm8tPmlmX3Rsdl92YWx1ZSAmIDB4RkYpKTsNCj4gKwl9DQo+ICsN Cj4gKwkvKiBFbmQgVExWICovDQo+ICsJZV90bHYgPSBza2JfcHV0KHNrYiwgc2l6ZW9mKCplX3Rs dikpOw0KPiArCSplX3RsdiA9IENGTV9FTkRFX1RMVl9UWVBFOw0KPiArDQo+ICsJcmV0dXJuIHNr YjsNCj4gK30NCj4gKw0KPiArc3RhdGljIHZvaWQgY2NtX2ZyYW1lX3R4KHN0cnVjdCBza19idWZm ICpza2IpDQo+ICt7DQo+ICsJc2tiX3Jlc2V0X25ldHdvcmtfaGVhZGVyKHNrYik7DQo+ICsJZGV2 X3F1ZXVlX3htaXQoc2tiKTsNCj4gK30NCj4gKw0KPiArLyogVGhpcyBmdW5jdGlvbiBpcyBjYWxs ZWQgd2l0aCB0aGUgY29uZmlndXJlZCBDQyAnZXhwZWN0ZWRfaW50ZXJ2YWwnDQo+ICsgKiBpbiBv cmRlciB0byBkcml2ZSBDQ00gdHJhbnNtaXNzaW9uIHdoZW4gZW5hYmxlZC4NCj4gKyAqLw0KPiAr c3RhdGljIHZvaWQgY2NtX3R4X3dvcmtfZXhwaXJlZChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmsp DQo+ICt7DQo+ICsJc3RydWN0IGRlbGF5ZWRfd29yayAqZGVsX3dvcms7DQo+ICsJc3RydWN0IGJy X2NmbV9tZXAgKm1lcDsNCj4gKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOw0KPiArCXUzMiBpbnRlcnZh bF91czsNCj4gKw0KPiArCWRlbF93b3JrID0gdG9fZGVsYXllZF93b3JrKHdvcmspOw0KPiArCW1l cCA9IGNvbnRhaW5lcl9vZihkZWxfd29yaywgc3RydWN0IGJyX2NmbV9tZXAsIGNjbV90eF9kd29y ayk7DQo+ICsNCj4gKwlpZiAodGltZV9iZWZvcmVfZXEobWVwLT5jY21fdHhfZW5kLCBqaWZmaWVz KSkgew0KPiArCQkvKiBUcmFuc21pc3Npb24gcGVyaW9kIGhhcyBlbmRlZCAqLw0KPiArCQltZXAt PmNjX2NjbV90eF9pbmZvLnBlcmlvZCA9IDA7DQo+ICsJCXJldHVybjsNCj4gKwl9DQo+ICsNCj4g Kwlza2IgPSBjY21fZnJhbWVfYnVpbGQobWVwLCAmbWVwLT5jY19jY21fdHhfaW5mbyk7DQo+ICsJ aWYgKHNrYikNCj4gKwkJY2NtX2ZyYW1lX3R4KHNrYik7DQo+ICsNCj4gKwlpbnRlcnZhbF91cyA9 IGludGVydmFsX3RvX3VzKG1lcC0+Y2NfY29uZmlnLmV4cF9pbnRlcnZhbCk7DQo+ICsJcXVldWVf ZGVsYXllZF93b3JrKHN5c3RlbV93cSwgJm1lcC0+Y2NtX3R4X2R3b3JrLA0KPiArCQkJICAgdXNl Y3NfdG9famlmZmllcyhpbnRlcnZhbF91cykpOw0KPiArfQ0KPiArDQo+ICsvKiBUaGlzIGZ1bmN0 aW9uIGlzIGNhbGxlZCB3aXRoIDEvNCBvZiB0aGUgY29uZmlndXJlZCBDQyAnZXhwZWN0ZWRfaW50 ZXJ2YWwnDQo+ICsgKiBpbiBvcmRlciB0byBkZXRlY3QgQ0NNIGRlZmVjdCBhZnRlciAzLjI1IGlu dGVydmFsLg0KPiArICovDQo+ICtzdGF0aWMgdm9pZCBjY21fcnhfd29ya19leHBpcmVkKHN0cnVj dCB3b3JrX3N0cnVjdCAqd29yaykNCj4gK3sNCj4gKwlzdHJ1Y3QgYnJfY2ZtX3BlZXJfbWVwICpw ZWVyX21lcDsNCj4gKwlzdHJ1Y3QgZGVsYXllZF93b3JrICpkZWxfd29yazsNCj4gKw0KPiArCWRl bF93b3JrID0gdG9fZGVsYXllZF93b3JrKHdvcmspOw0KPiArCXBlZXJfbWVwID0gY29udGFpbmVy X29mKGRlbF93b3JrLCBzdHJ1Y3QgYnJfY2ZtX3BlZXJfbWVwLCBjY21fcnhfZHdvcmspOw0KPiAr DQo+ICsJLyogQWZ0ZXIgMTMgY291bnRzICg0ICogMywyNSkgdGhlbiAzLjI1IGludGVydmFscyBh cmUgZXhwaXJlZCAqLw0KPiArCWlmIChwZWVyX21lcC0+Y2NtX3J4X2NvdW50X21pc3MgPCAxMykg ew0KPiArCQkvKiAzLjI1IGludGVydmFscyBhcmUgTk9UIGV4cGlyZWQgd2l0aG91dCBDQ00gcmVj ZXB0aW9uICovDQo+ICsJCXBlZXJfbWVwLT5jY21fcnhfY291bnRfbWlzcysrOw0KPiArDQo+ICsJ CS8qIFN0YXJ0IHRpbWVyIGFnYWluICovDQo+ICsJCWNjbV9yeF90aW1lcl9zdGFydChwZWVyX21l cCk7DQo+ICsJfSBlbHNlIHsNCj4gKwkJLyogMy4yNSBpbnRlcnZhbHMgYXJlIGV4cGlyZWQgd2l0 aG91dCBDQ00gcmVjZXB0aW9uLg0KPiArCQkgKiBDQ00gZGVmZWN0IGRldGVjdGVkDQo+ICsJCSAq Lw0KPiArCQlwZWVyX21lcC0+Y2Nfc3RhdHVzLmNjbV9kZWZlY3QgPSB0cnVlOw0KPiArDQo+ICsJ CS8qIENoYW5nZSBpbiBDQ00gZGVmZWN0IHN0YXR1cyAtIG5vdGlmeSAqLw0KPiArCX0NCj4gK30N Cj4gKw0KPiArc3RhdGljIHUzMiBjY21fdGx2X2V4dHJhY3Qoc3RydWN0IHNrX2J1ZmYgKnNrYiwg dTMyIGluZGV4LA0KPiArCQkJICAgc3RydWN0IGJyX2NmbV9wZWVyX21lcCAqcGVlcl9tZXApDQo+ ICt7DQo+ICsJX19iZTMyICpzX3RsdjsNCj4gKwlfX2JlMzIgX3NfdGx2Ow0KPiArCXUzMiBoX3Nf dGx2Ow0KPiArCXU4ICplX3RsdjsNCj4gKwl1OCBfZV90bHY7DQo+ICsNCj4gKwllX3RsdiA9IHNr Yl9oZWFkZXJfcG9pbnRlcihza2IsIGluZGV4LCBzaXplb2YoX2VfdGx2KSwgJl9lX3Rsdik7DQo+ ICsJaWYgKCFlX3RsdikNCj4gKwkJcmV0dXJuIDA7DQo+ICsNCj4gKwkvKiBUTFYgaXMgcHJlc2Vu dCAtIGdldCB0aGUgc3RhdHVzIFRMViAqLw0KPiArCXNfdGx2ID0gc2tiX2hlYWRlcl9wb2ludGVy KHNrYiwNCj4gKwkJCQkgICBpbmRleCwNCj4gKwkJCQkgICBzaXplb2YoX3NfdGx2KSwgJl9zX3Rs dik7DQo+ICsJaWYgKCFzX3RsdikNCj4gKwkJcmV0dXJuIDA7DQo+ICsNCj4gKwloX3NfdGx2ID0g bnRvaGwoKnNfdGx2KTsNCj4gKwlpZiAoKGhfc190bHYgPj4gMjQpID09IENGTV9JRl9TVEFUVVNf VExWX1RZUEUpIHsNCj4gKwkJLyogSW50ZXJmYWNlIHN0YXR1cyBUTFYgKi8NCj4gKwkJcGVlcl9t ZXAtPmNjX3N0YXR1cy50bHZfc2VlbiA9IHRydWU7DQo+ICsJCXBlZXJfbWVwLT5jY19zdGF0dXMu aWZfdGx2X3ZhbHVlID0gKGhfc190bHYgJiAweEZGKTsNCj4gKwl9DQo+ICsNCj4gKwlpZiAoKGhf c190bHYgPj4gMjQpID09IENGTV9QT1JUX1NUQVRVU19UTFZfVFlQRSkgew0KPiArCQkvKiBQb3J0 IHN0YXR1cyBUTFYgKi8NCj4gKwkJcGVlcl9tZXAtPmNjX3N0YXR1cy50bHZfc2VlbiA9IHRydWU7 DQo+ICsJCXBlZXJfbWVwLT5jY19zdGF0dXMucG9ydF90bHZfdmFsdWUgPSAoaF9zX3RsdiAmIDB4 RkYpOw0KPiArCX0NCj4gKw0KPiArCS8qIFRoZSBTZW5kZXIgSUQgVExWIGlzIG5vdCBoYW5kbGVk ICovDQo+ICsJLyogVGhlIE9yZ2FuaXphdGlvbi1TcGVjaWZpYyBUTFYgaXMgbm90IGhhbmRsZWQg Ki8NCj4gKw0KPiArCS8qIFJldHVybiB0aGUgbGVuZ3RoIG9mIHRoaXMgdGx2Lg0KPiArCSAqIFRo aXMgaXMgdGhlIGxlbmd0aCBvZiB0aGUgdmFsdWUgZmllbGQgcGx1cyAzIGJ5dGVzIGZvciBzaXpl IG9mIHR5cGUNCj4gKwkgKiBmaWVsZCBhbmQgbGVuZ3RoIGZpZWxkDQo+ICsJICovDQo+ICsJcmV0 dXJuICgoaF9zX3RsdiA+PiA4KSAmIDB4RkZGRikgKyAzOw0KPiArfQ0KPiArDQo+ICsvKiBub3Rl OiBhbHJlYWR5IGNhbGxlZCB3aXRoIHJjdV9yZWFkX2xvY2sgKi8NCj4gK3N0YXRpYyBpbnQgYnJf Y2ZtX2ZyYW1lX3J4KHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnBvcnQsIHN0cnVjdCBza19idWZm ICpza2IpDQo+ICt7DQo+ICsJdTMyIG1kbGV2ZWwsIGludGVydmFsLCBzaXplLCBpbmRleCwgbWF4 Ow0KPiArCWNvbnN0IHN0cnVjdCBicl9jZm1fY29tbW9uX2hkciAqaGRyOw0KPiArCXN0cnVjdCBi cl9jZm1fcGVlcl9tZXAgKnBlZXJfbWVwOw0KPiArCWNvbnN0IHN0cnVjdCBicl9jZm1fbWFpZCAq bWFpZDsNCj4gKwlzdHJ1Y3QgYnJfY2ZtX2NvbW1vbl9oZHIgX2hkcjsNCj4gKwlzdHJ1Y3QgYnJf Y2ZtX21haWQgX21haWQ7DQo+ICsJc3RydWN0IGJyX2NmbV9tZXAgKm1lcDsNCj4gKwlzdHJ1Y3Qg bmV0X2JyaWRnZSAqYnI7DQo+ICsJX19iZTMyICpzbnVtYmVyOw0KPiArCV9fYmUzMiBfc251bWJl cjsNCj4gKwlfX2JlMTYgKm1lcGlkOw0KPiArCV9fYmUxNiBfbWVwaWQ7DQo+ICsNCj4gKwkvKiBJ ZiBwb3J0IGlzIGRpc2FibGVkIGRvbid0IGFjY2VwdCBhbnkgZnJhbWVzICovDQoNClVubmVjZXNz YXJ5IGNvbW1lbnQsIG9idmlvdXMgZnJvbSB0aGUgY29kZS4NCg0KPiArCWlmIChwb3J0LT5zdGF0 ZSA9PSBCUl9TVEFURV9ESVNBQkxFRCkNCj4gKwkJcmV0dXJuIDA7DQo+ICsNCj4gKwloZHIgPSBz a2JfaGVhZGVyX3BvaW50ZXIoc2tiLCAwLCBzaXplb2YoX2hkciksICZfaGRyKTsNCj4gKwlpZiAo IWhkcikNCj4gKwkJcmV0dXJuIDE7DQo+ICsNCj4gKwliciA9IHBvcnQtPmJyOw0KPiArCW1lcCA9 IGJyX21lcF9maW5kX2lmaW5kZXgoYnIsIHBvcnQtPmRldi0+aWZpbmRleCk7DQo+ICsJaWYgKHVu bGlrZWx5KCFtZXApKQ0KPiArCQkvKiBObyBNRVAgb24gdGhpcyBwb3J0IC0gbXVzdCBiZSBmb3J3 YXJkZWQgKi8NCj4gKwkJcmV0dXJuIDA7DQo+ICsNCj4gKwltZGxldmVsID0gaGRyLT5tZGxldmVs X3ZlcnNpb24gPj4gNTsNCj4gKwlpZiAobWRsZXZlbCA+IG1lcC0+Y29uZmlnLm1kbGV2ZWwpDQo+ ICsJCS8qIFRoZSBsZXZlbCBpcyBhYm92ZSB0aGlzIE1FUCBsZXZlbCAtIG11c3QgYmUgZm9yd2Fy ZGVkICovDQo+ICsJCXJldHVybiAwOw0KPiArDQo+ICsJaWYgKChoZHItPm1kbGV2ZWxfdmVyc2lv biAmIDB4MUYpICE9IDApIHsNCj4gKwkJLyogSW52YWxpZCB2ZXJzaW9uICovDQo+ICsJCW1lcC0+ c3RhdHVzLnZlcnNpb25fdW5leHBfc2VlbiA9IHRydWU7DQo+ICsJCXJldHVybiAxOw0KPiArCX0N Cj4gKw0KPiArCWlmIChtZGxldmVsIDwgbWVwLT5jb25maWcubWRsZXZlbCkgew0KPiArCQkvKiBU aGUgbGV2ZWwgaXMgYmVsb3cgdGhpcyBNRVAgbGV2ZWwgKi8NCj4gKwkJbWVwLT5zdGF0dXMucnhf bGV2ZWxfbG93X3NlZW4gPSB0cnVlOw0KPiArCQlyZXR1cm4gMTsNCj4gKwl9DQo+ICsNCj4gKwlp ZiAoaGRyLT5vcGNvZGUgPT0gQlJfQ0ZNX09QQ09ERV9DQ00pIHsNCj4gKwkJLyogQ0NNIFBEVSBy ZWNlaXZlZC4gKi8NCj4gKwkJLyogTUEgSUQgaXMgYWZ0ZXIgY29tbW9uIGhlYWRlciArIHNlcXVl bmNlIG51bWJlciArIE1FUCBJRCAqLw0KPiArCQltYWlkID0gc2tiX2hlYWRlcl9wb2ludGVyKHNr YiwNCj4gKwkJCQkJICBDRk1fQ0NNX1BEVV9NQUlEX09GRlNFVCwNCj4gKwkJCQkJICBzaXplb2Yo X21haWQpLCAmX21haWQpOw0KPiArCQlpZiAoIW1haWQpDQo+ICsJCQlyZXR1cm4gMTsNCj4gKwkJ aWYgKG1lbWNtcChtYWlkLT5kYXRhLCBtZXAtPmNjX2NvbmZpZy5leHBfbWFpZC5kYXRhLA0KPiAr CQkJICAgc2l6ZW9mKG1haWQtPmRhdGEpKSkNCj4gKwkJCS8qIE1BIElEIG5vdCBhcyBleHBlY3Rl ZCAqLw0KPiArCQkJcmV0dXJuIDE7DQo+ICsNCj4gKwkJLyogTUVQIElEIGlzIGFmdGVyIGNvbW1v biBoZWFkZXIgKyBzZXF1ZW5jZSBudW1iZXIgKi8NCj4gKwkJbWVwaWQgPSBza2JfaGVhZGVyX3Bv aW50ZXIoc2tiLA0KPiArCQkJCQkgICBDRk1fQ0NNX1BEVV9NRVBJRF9PRkZTRVQsDQo+ICsJCQkJ CSAgIHNpemVvZihfbWVwaWQpLCAmX21lcGlkKTsNCj4gKwkJaWYgKCFtZXBpZCkNCj4gKwkJCXJl dHVybiAxOw0KPiArCQlwZWVyX21lcCA9IGJyX3BlZXJfbWVwX2ZpbmQobWVwLCAodTMyKW50b2hz KCptZXBpZCkpOw0KPiArCQlpZiAoIXBlZXJfbWVwKQ0KPiArCQkJcmV0dXJuIDE7DQo+ICsNCj4g KwkJLyogSW50ZXJ2YWwgaXMgaW4gY29tbW9uIGhlYWRlciBmbGFncyAqLw0KPiArCQlpbnRlcnZh bCA9IGhkci0+ZmxhZ3MgJiAweDA3Ow0KPiArCQlpZiAobWVwLT5jY19jb25maWcuZXhwX2ludGVy dmFsICE9IHBkdV90b19pbnRlcnZhbChpbnRlcnZhbCkpDQo+ICsJCQkvKiBJbnRlcnZhbCBub3Qg YXMgZXhwZWN0ZWQgKi8NCj4gKwkJCXJldHVybiAxOw0KPiArDQo+ICsJCS8qIEEgdmFsaWQgQ0NN IGZyYW1lIGlzIHJlY2VpdmVkICovDQo+ICsJCWlmIChwZWVyX21lcC0+Y2Nfc3RhdHVzLmNjbV9k ZWZlY3QpIHsNCj4gKwkJCXBlZXJfbWVwLT5jY19zdGF0dXMuY2NtX2RlZmVjdCA9IGZhbHNlOw0K PiArDQo+ICsJCQkvKiBDaGFuZ2UgaW4gQ0NNIGRlZmVjdCBzdGF0dXMgLSBub3RpZnkgKi8NCj4g Kw0KPiArCQkJLyogU3RhcnQgQ0NNIFJYIHRpbWVyICovDQo+ICsJCQljY21fcnhfdGltZXJfc3Rh cnQocGVlcl9tZXApOw0KPiArCQl9DQo+ICsNCj4gKwkJcGVlcl9tZXAtPmNjX3N0YXR1cy5zZWVu ID0gdHJ1ZTsNCj4gKwkJcGVlcl9tZXAtPmNjbV9yeF9jb3VudF9taXNzID0gMDsNCj4gKw0KPiAr CQkvKiBSREkgaXMgaW4gY29tbW9uIGhlYWRlciBmbGFncyAqLw0KPiArCQlwZWVyX21lcC0+Y2Nf c3RhdHVzLnJkaSA9IChoZHItPmZsYWdzICYgMHg4MCkgPyB0cnVlIDogZmFsc2U7DQo+ICsNCj4g KwkJLyogU2VxdWVuY2UgbnVtYmVyIGlzIGFmdGVyIGNvbW1vbiBoZWFkZXIgKi8NCj4gKwkJc251 bWJlciA9IHNrYl9oZWFkZXJfcG9pbnRlcihza2IsDQo+ICsJCQkJCSAgICAgQ0ZNX0NDTV9QRFVf U0VRTlJfT0ZGU0VULA0KPiArCQkJCQkgICAgIHNpemVvZihfc251bWJlciksICZfc251bWJlcik7 DQo+ICsJCWlmICghc251bWJlcikNCj4gKwkJCXJldHVybiAxOw0KPiArCQlpZiAobnRvaGwoKnNu dW1iZXIpICE9IChtZXAtPmNjbV9yeF9zbnVtYmVyICsgMSkpDQo+ICsJCQkvKiBVbmV4cGVjdGVk IHNlcXVlbmNlIG51bWJlciAqLw0KPiArCQkJcGVlcl9tZXAtPmNjX3N0YXR1cy5zZXFfdW5leHBf c2VlbiA9IHRydWU7DQo+ICsNCj4gKwkJbWVwLT5jY21fcnhfc251bWJlciA9IG50b2hsKCpzbnVt YmVyKTsNCj4gKw0KPiArCQkvKiBUTFYgZW5kIGlzIGFmdGVyIGNvbW1vbiBoZWFkZXIgKyBzZXF1 ZW5jZSBudW1iZXIgKyBNRVAgSUQgKw0KPiArCQkgKiBNQSBJRCArIElUVSByZXNlcnZlZA0KPiAr CQkgKi8NCj4gKwkJaW5kZXggPSBDRk1fQ0NNX1BEVV9UTFZfT0ZGU0VUOw0KPiArCQltYXggPSAw Ow0KPiArCQlkbyB7IC8qIEhhbmRsZSBhbGwgVExWcyAqLw0KPiArCQkJc2l6ZSA9IGNjbV90bHZf ZXh0cmFjdChza2IsIGluZGV4LCBwZWVyX21lcCk7DQo+ICsJCQlpbmRleCArPSBzaXplOw0KPiAr CQkJbWF4ICs9IDE7DQo+ICsJCX0gd2hpbGUgKHNpemUgIT0gMCAmJiBtYXggPCA0KTsgLyogTWF4 IGZvdXIgVExWcyBwb3NzaWJsZSAqLw0KPiArDQo+ICsJCXJldHVybiAxOw0KPiArCX0NCj4gKw0K PiArCW1lcC0+c3RhdHVzLm9wY29kZV91bmV4cF9zZWVuID0gdHJ1ZTsNCj4gKw0KPiArCXJldHVy biAxOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgc3RydWN0IGJyX2ZyYW1lX3R5cGUgY2ZtX2ZyYW1l X3R5cGUgX19yZWFkX21vc3RseSA9IHsNCj4gKwkudHlwZSA9IGNwdV90b19iZTE2KEVUSF9QX0NG TSksDQo+ICsJLmZ1bmMgPSBicl9jZm1fZnJhbWVfcngsDQo+ICt9Ow0KPiArDQo+ICsvKiBub3Rl OiBhbHJlYWR5IGNhbGxlZCB3aXRoIHJ0bmxfbG9jayAqLw0KDQpJbnN0ZWFkIG9mIHRoZXNlIG5v dGUgY29tbWVudHMgeW91IGNhbiBqdXN0IGFkZCBBU1NFUlRfUlROTCgpDQppbiB0aGUgYmVnaW5u aW5nIG9mDQp0aGVzZSBmdW5jdGlvbnMgaWYgeW91IHdhbnQgdG8gc2hvdyB0aGV5IGV4cGVjdA0K cnRubCB0byBiZSBoZWxkLg0KDQo+ICtpbnQgYnJfY2ZtX21lcF9jcmVhdGUoc3RydWN0IG5ldF9i cmlkZ2UgKmJyLA0KPiArCQkgICAgICBjb25zdCB1MzIgaW5zdGFuY2UsDQo+ICsJCSAgICAgIHN0 cnVjdCBicl9jZm1fbWVwX2NyZWF0ZSAqY29uc3QgY3JlYXRlLA0KPiArCQkgICAgICBzdHJ1Y3Qg bmV0bGlua19leHRfYWNrICpleHRhY2spDQo+ICt7DQo+ICsJc3RydWN0IG5ldF9icmlkZ2VfcG9y dCAqcDsNCj4gKwlzdHJ1Y3QgYnJfY2ZtX21lcCAqbWVwOw0KPiArDQo+ICsJaWYgKGNyZWF0ZS0+ ZG9tYWluID09IEJSX0NGTV9WTEFOKSB7DQo+ICsJCU5MX1NFVF9FUlJfTVNHX01PRChleHRhY2ss DQo+ICsJCQkJICAgIlZMQU4gZG9tYWluIG5vdCBzdXBwb3J0ZWQiKTsNCj4gKwkJcmV0dXJuIC1F SU5WQUw7DQo+ICsJfQ0KPiArCWlmIChjcmVhdGUtPmRvbWFpbiAhPSBCUl9DRk1fUE9SVCkgew0K PiArCQlOTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLA0KPiArCQkJCSAgICJJbnZhbGlkIGRvbWFp biB2YWx1ZSIpOw0KPiArCQlyZXR1cm4gLUVJTlZBTDsNCj4gKwl9DQo+ICsJaWYgKGNyZWF0ZS0+ ZGlyZWN0aW9uID09IEJSX0NGTV9NRVBfRElSRUNUSU9OX1VQKSB7DQo+ICsJCU5MX1NFVF9FUlJf TVNHX01PRChleHRhY2ssDQo+ICsJCQkJICAgIlVwLU1FUCBub3Qgc3VwcG9ydGVkIik7DQo+ICsJ CXJldHVybiAtRUlOVkFMOw0KPiArCX0NCj4gKwlpZiAoY3JlYXRlLT5kaXJlY3Rpb24gIT0gQlJf Q0ZNX01FUF9ESVJFQ1RJT05fRE9XTikgew0KPiArCQlOTF9TRVRfRVJSX01TR19NT0QoZXh0YWNr LA0KPiArCQkJCSAgICJJbnZhbGlkIGRpcmVjdGlvbiB2YWx1ZSIpOw0KPiArCQlyZXR1cm4gLUVJ TlZBTDsNCj4gKwl9DQo+ICsJaWYgKCFicl9tZXBfZ2V0X3BvcnQoYnIsIGNyZWF0ZS0+aWZpbmRl eCkpDQoNCllvdSBjYW4gc2V0IGV4dGFjayBoZXJlLCB0b28uDQoNCj4gKwkJcmV0dXJuIC1FSU5W QUw7DQo+ICsNCj4gKwltZXAgPSBicl9tZXBfZmluZChiciwgaW5zdGFuY2UpOw0KPiArCWlmICht ZXApIHsNCj4gKwkJTkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjaywNCj4gKwkJCQkgICAiTUVQIGlu c3RhbmNlIGFscmVhZHkgY3JlYXRlZCIpOw0KPiArCQlyZXR1cm4gLUVJTlZBTDsNCj4gKwl9DQo+ ICsNCj4gKwkvKiBJbiBQT1JUIGRvbWFpbiBvbmx5IG9uZSBpbnN0YW5jZSBjYW4gYmUgY3JlYXRl ZCBwZXIgcG9ydCAqLw0KPiArCWlmIChjcmVhdGUtPmRvbWFpbiA9PSBCUl9DRk1fUE9SVCkgew0K PiArCQltZXAgPSBicl9tZXBfZmluZF9pZmluZGV4KGJyLCBjcmVhdGUtPmlmaW5kZXgpOw0KPiAr CQlpZiAobWVwKSB7DQo+ICsJCQlOTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLA0KPiArCQkJCQkg ICAiT25seSBvbmUgUG9ydCBNRVAgb24gYSBwb3J0IGFsbG93ZWQiKTsNCj4gKwkJCXJldHVybiAt RUlOVkFMOw0KPiArCQl9DQo+ICsJfQ0KPiArDQo+ICsJbWVwID0ga3phbGxvYyhzaXplb2YoKm1l cCksIEdGUF9LRVJORUwpOw0KPiArCWlmICghbWVwKQ0KPiArCQlyZXR1cm4gLUVOT01FTTsNCj4g Kw0KPiArCS8qIFNhdmUgY3JlYXRlIHBhcmFtZXRlcnMgKi8NCj4gKwltZXAtPmNyZWF0ZSA9ICpj cmVhdGU7DQo+ICsJbWVwLT5pbnN0YW5jZSA9IGluc3RhbmNlOw0KPiArCXAgPSBicl9tZXBfZ2V0 X3BvcnQoYnIsIG1lcC0+Y3JlYXRlLmlmaW5kZXgpOw0KDQpQbGVhc2UgZG8gdGhpcyBvbmx5IG9u Y2UgaW4gdGhlIGJlZ2lubmluZyBhbmQgdXNlIHRoZSBsb2NhbCB2YXJpYWJsZSBoZXJlLg0KDQo+ ICsJcmN1X2Fzc2lnbl9wb2ludGVyKG1lcC0+Yl9wb3J0LCBwKTsNCg0KQ2FuIGJfcG9ydCBiZSBh bHJlYWR5IGFzc2lnbmVkIGhlcmU/DQoNCj4gKw0KPiArCUlOSVRfTElTVF9IRUFEKCZtZXAtPnBl ZXJfbWVwX2xpc3QpOw0KPiArCUlOSVRfREVMQVlFRF9XT1JLKCZtZXAtPmNjbV90eF9kd29yaywg Y2NtX3R4X3dvcmtfZXhwaXJlZCk7DQo+ICsNCj4gKwlpZiAobGlzdF9lbXB0eSgmYnItPm1lcF9s aXN0KSkNCj4gKwkJYnJfYWRkX2ZyYW1lKGJyLCAmY2ZtX2ZyYW1lX3R5cGUpOw0KPiArDQo+ICsJ LyogQWRkIGluc3RhbmNlIHRvIGxpc3QgKi8NCnVubmVjZXNzYXJ5IGNvbW1lbnQNCj4gKwlsaXN0 X2FkZF90YWlsX3JjdSgmbWVwLT5oZWFkLCAmYnItPm1lcF9saXN0KTsNCj4gKw0KPiArCXJldHVy biAwOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgdm9pZCBtZXBfZGVsZXRlX2ltcGxlbWVudGF0aW9u KHN0cnVjdCBuZXRfYnJpZGdlICpiciwNCj4gKwkJCQkgICAgICBzdHJ1Y3QgYnJfY2ZtX21lcCAq bWVwKQ0KPiArew0KPiArCXN0cnVjdCBicl9jZm1fcGVlcl9tZXAgKnBlZXJfbWVwOw0KPiArDQo+ ICsJLyogRW1wdHkgYW5kIGZyZWUgcGVlciBNRVAgbGlzdCAqLw0KPiArCWxpc3RfZm9yX2VhY2hf ZW50cnlfcmN1KHBlZXJfbWVwLCAmbWVwLT5wZWVyX21lcF9saXN0LCBoZWFkLA0KPiArCQkJCWxv Y2tkZXBfcnRubF9pc19oZWxkKCkpIHsNCg0KWW91IGNhbiB1c2Ugbm9ybWFsIGxpc3QgdHJhdmVy c2FsDQo+ICsJCWNhbmNlbF9kZWxheWVkX3dvcmtfc3luYygmcGVlcl9tZXAtPmNjbV9yeF9kd29y ayk7DQo+ICsJCWxpc3RfZGVsX3JjdSgmcGVlcl9tZXAtPmhlYWQpOw0KPiArCQlrZnJlZV9yY3Uo cGVlcl9tZXAsIHJjdSk7DQo+ICsJfQ0KPiArDQo+ICsJLyogU3RvcCB0cmFuc21pdHRpbmcgKi8N Cg0KdW5uZWNlc3NhcnkgY29tbWVudA0KDQo+ICsJY2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKCZt ZXAtPmNjbV90eF9kd29yayk7DQo+ICsNCj4gKwkvKiBGcmVlIHRoZSBNRVAgaW5zdGFuY2UgKi8N Cg0KdW5uZWNlc3NhcnkgY29tbWVudCwgY29kZSBpcyBwcmV0dHkgY2xlYXINCg0KPiArCXJjdV9h c3NpZ25fcG9pbnRlcihtZXAtPmJfcG9ydCwgTlVMTCk7DQoNClJDVV9JTklUX1BPSU5URVINCg0K PiArCWxpc3RfZGVsX3JjdSgmbWVwLT5oZWFkKTsNCj4gKwlrZnJlZV9yY3UobWVwLCByY3UpOw0K PiArDQo+ICsJaWYgKGxpc3RfZW1wdHkoJmJyLT5tZXBfbGlzdCkpDQo+ICsJCWJyX2RlbF9mcmFt ZShiciwgJmNmbV9mcmFtZV90eXBlKTsNCj4gK30NCj4gKw0KPiArLyogbm90ZTogYWxyZWFkeSBj YWxsZWQgd2l0aCBydG5sX2xvY2sgKi8NCj4gK2ludCBicl9jZm1fbWVwX2RlbGV0ZShzdHJ1Y3Qg bmV0X2JyaWRnZSAqYnIsDQo+ICsJCSAgICAgIGNvbnN0IHUzMiBpbnN0YW5jZSwNCj4gKwkJICAg ICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKQ0KPiArew0KPiArCXN0cnVjdCBicl9j Zm1fbWVwICptZXA7DQo+ICsNCj4gKwltZXAgPSBicl9tZXBfZmluZChiciwgaW5zdGFuY2UpOw0K PiArCWlmICghbWVwKSB7DQo+ICsJCU5MX1NFVF9FUlJfTVNHX01PRChleHRhY2ssDQo+ICsJCQkJ ICAgIk1FUCBpbnN0YW5jZSBub3QgY3JlYXRlZCIpOw0KPiArCQlyZXR1cm4gLUVJTlZBTDsNCj4g Kwl9DQo+ICsNCj4gKwltZXBfZGVsZXRlX2ltcGxlbWVudGF0aW9uKGJyLCBtZXApOw0KPiArDQo+ ICsJcmV0dXJuIDA7DQo+ICt9DQo+ICsNCj4gKy8qIG5vdGU6IGFscmVhZHkgY2FsbGVkIHdpdGgg cnRubF9sb2NrICovDQo+ICtpbnQgYnJfY2ZtX21lcF9jb25maWdfc2V0KHN0cnVjdCBuZXRfYnJp ZGdlICpiciwNCj4gKwkJCSAgY29uc3QgdTMyIGluc3RhbmNlLA0KPiArCQkJICBjb25zdCBzdHJ1 Y3QgYnJfY2ZtX21lcF9jb25maWcgKmNvbnN0IGNvbmZpZywNCj4gKwkJCSAgc3RydWN0IG5ldGxp bmtfZXh0X2FjayAqZXh0YWNrKQ0KPiArew0KPiArCXN0cnVjdCBicl9jZm1fbWVwICptZXA7DQo+ ICsNCj4gKwlpZiAoY29uZmlnLT5tZGxldmVsID4gNykgew0KPiArCQlOTF9TRVRfRVJSX01TR19N T0QoZXh0YWNrLA0KPiArCQkJCSAgICJtZGxldmVsIGlzIGludmFsaWQiKTsNCj4gKwkJcmV0dXJu IC1FSU5WQUw7DQo+ICsJfQ0KPiArCWlmIChjb25maWctPm1lcGlkID4gMHgxRkZGKSB7DQo+ICsJ CU5MX1NFVF9FUlJfTVNHX01PRChleHRhY2ssDQo+ICsJCQkJICAgIm1lcGlkIGlzIGludmFsaWQi KTsNCg0KTUVQLUlEID8NCg0KPiArCQlyZXR1cm4gLUVJTlZBTDsNCj4gKwl9DQo+ICsNCj4gKwlt ZXAgPSBicl9tZXBfZmluZChiciwgaW5zdGFuY2UpOw0KPiArCWlmICghbWVwKSB7DQo+ICsJCU5M X1NFVF9FUlJfTVNHX01PRChleHRhY2ssDQo+ICsJCQkJICAgIk1FUCBpbnN0YW5jZSBub3QgY3Jl YXRlZCIpOw0KPiArCQlyZXR1cm4gLUVJTlZBTDsNCj4gKwl9DQo+ICsNCj4gKwkvKiBTYXZlIGNv bmZpZyBwYXJhbWV0ZXJzICovDQoNCnVubmVjZXNzYXJ5IGNvbW1lbnQNCg0KPiArCW1lcC0+Y29u ZmlnID0gKmNvbmZpZzsNCj4gKw0KPiArCXJldHVybiAwOw0KPiArfQ0KPiArDQo+ICsvKiBub3Rl OiBhbHJlYWR5IGNhbGxlZCB3aXRoIHJ0bmxfbG9jayAqLw0KPiAraW50IGJyX2NmbV9tZXBfY291 bnRlcnNfY2xlYXIoc3RydWN0IG5ldF9icmlkZ2UgKmJyLA0KPiArCQkJICAgICAgY29uc3QgdTMy IGluc3RhbmNlLA0KPiArCQkJICAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKQ0K PiArew0KPiArCXN0cnVjdCBicl9jZm1fbWVwICptZXA7DQo+ICsNCj4gKwltZXAgPSBicl9tZXBf ZmluZChiciwgaW5zdGFuY2UpOw0KPiArCWlmICghbWVwKSB7DQo+ICsJCU5MX1NFVF9FUlJfTVNH X01PRChleHRhY2ssDQo+ICsJCQkJICAgIk1FUCBpbnN0YW5jZSBub3QgY3JlYXRlZCIpOw0KPiAr CQlyZXR1cm4gLUVJTlZBTDsNCj4gKwl9DQo+ICsNCj4gKwltZW1zZXQoJm1lcC0+Y291bnRlcnMs IDAsIHNpemVvZihtZXAtPmNvdW50ZXJzKSk7DQo+ICsNCj4gKwlyZXR1cm4gMDsNCj4gK30NCj4g Kw0KPiArLyogbm90ZTogYWxyZWFkeSBjYWxsZWQgd2l0aCBydG5sX2xvY2sgKi8NCj4gK2ludCBi cl9jZm1fY2NfY29uZmlnX3NldChzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsDQo+ICsJCQkgY29uc3Qg dTMyIGluc3RhbmNlLA0KPiArCQkJIGNvbnN0IHN0cnVjdCBicl9jZm1fY2NfY29uZmlnICpjb25z dCBjb25maWcsDQo+ICsJCQkgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKQ0KPiArew0K PiArCXN0cnVjdCBicl9jZm1fcGVlcl9tZXAgKnBlZXJfbWVwOw0KPiArCXN0cnVjdCBicl9jZm1f bWVwICptZXA7DQo+ICsNCj4gKwltZXAgPSBicl9tZXBfZmluZChiciwgaW5zdGFuY2UpOw0KPiAr CWlmICghbWVwKSB7DQo+ICsJCU5MX1NFVF9FUlJfTVNHX01PRChleHRhY2ssDQo+ICsJCQkJICAg Ik1FUCBpbnN0YW5jZSBub3QgY3JlYXRlZCIpOw0KDQoiZG9lcyBub3QgZXhpc3QiIHNvbWVob3cg c2VlbXMgbW9yZSBmaXR0aW5nLCBidXQgdXAgdG8geW91LiA6KQ0KDQo+ICsJCXJldHVybiAtRUlO VkFMOw0KPiArCX0NCj4gKw0KPiArCS8qIENoZWNrIGZvciBubyBjaGFuZ2UgaW4gY29uZmlndXJh dGlvbiAqLw0KPiArCWlmIChtZW1jbXAoY29uZmlnLCAmbWVwLT5jY19jb25maWcsIHNpemVvZigq Y29uZmlnKSkgPT0gMCkNCj4gKwkJcmV0dXJuIDA7DQo+ICsNCj4gKwlpZiAoY29uZmlnLT5lbmFi bGUgJiYgIW1lcC0+Y2NfY29uZmlnLmVuYWJsZSkNCj4gKwkJLyogQ0MgaXMgZW5hYmxlZCAqLw0K PiArCQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShwZWVyX21lcCwgJm1lcC0+cGVlcl9tZXBfbGlz dCwgaGVhZCwNCj4gKwkJCQkJbG9ja2RlcF9ydG5sX2lzX2hlbGQoKSkNCj4gKwkJCWNjX3BlZXJf ZW5hYmxlKHBlZXJfbWVwKTsNCg0KVXNlIG5vcm1hbCBsaXN0IHRyYXZlcnNhbCB3aGVuIHJ0bmwg aXMgYmVpbmcgaGVsZC4NCg0KPiArDQo+ICsJaWYgKCFjb25maWctPmVuYWJsZSAmJiBtZXAtPmNj X2NvbmZpZy5lbmFibGUpDQo+ICsJCS8qIENDIGlzIGRpc2FibGVkICovDQo+ICsJCWxpc3RfZm9y X2VhY2hfZW50cnlfcmN1KHBlZXJfbWVwLCAmbWVwLT5wZWVyX21lcF9saXN0LCBoZWFkLA0KPiAr CQkJCQlsb2NrZGVwX3J0bmxfaXNfaGVsZCgpKQ0KDQpTYW1lIGhlcmUuDQoNCj4gKwkJCWNjX3Bl ZXJfZGlzYWJsZShwZWVyX21lcCk7DQo+ICsNCj4gKwkvKiBTYXZlIG5ldyBjY19jb25maWcgcGFy YW1ldGVycyAqLw0KDQp1bm5lY2Vzc2FyeSBjb21tZW50DQoNCj4gKwltZXAtPmNjX2NvbmZpZyA9 ICpjb25maWc7DQo+ICsNCj4gKwlyZXR1cm4gMDsNCj4gK30NCj4gKw0KPiArLyogbm90ZTogYWxy ZWFkeSBjYWxsZWQgd2l0aCBydG5sX2xvY2sgKi8NCj4gK2ludCBicl9jZm1fY2NfcGVlcl9tZXBf YWRkKHN0cnVjdCBuZXRfYnJpZGdlICpiciwgY29uc3QgdTMyIGluc3RhbmNlLA0KPiArCQkJICAg dTMyIG1lcGlkLA0KPiArCQkJICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKQ0KPiAr ew0KPiArCXN0cnVjdCBicl9jZm1fcGVlcl9tZXAgKnBlZXJfbWVwOw0KPiArCXN0cnVjdCBicl9j Zm1fbWVwICptZXA7DQo+ICsNCj4gKwltZXAgPSBicl9tZXBfZmluZChiciwgaW5zdGFuY2UpOw0K PiArCWlmICghbWVwKSB7DQo+ICsJCU5MX1NFVF9FUlJfTVNHX01PRChleHRhY2ssDQo+ICsJCQkJ ICAgIk1FUCBpbnN0YW5jZSBub3QgY3JlYXRlZCIpOw0KPiArCQlyZXR1cm4gLUVJTlZBTDsNCj4g Kwl9DQo+ICsJaWYgKG1lcGlkID4gMHgxRkZGKSB7DQo+ICsJCU5MX1NFVF9FUlJfTVNHX01PRChl eHRhY2ssDQo+ICsJCQkJICAgIm1lcGlkIGlzIGludmFsaWQiKTsNCg0KU2hvdWxkbid0IHRoaXMg YmUgTUVQLUlEIGFzIGl0J3Mgd3JpdHRlbiBvdXQgaW4gb3RoZXIgcGxhY2VzPw0KDQo+ICsJCXJl dHVybiAtRUlOVkFMOw0KPiArCX0NCj4gKw0KPiArCXBlZXJfbWVwID0gYnJfcGVlcl9tZXBfZmlu ZChtZXAsIG1lcGlkKTsNCj4gKwlpZiAocGVlcl9tZXApIHsNCj4gKwkJTkxfU0VUX0VSUl9NU0df TU9EKGV4dGFjaywNCj4gKwkJCQkgICAiUGVlciBNRVAtSUQgYWxyZWFkeSBhZGRlZCIpOw0KDQpw ZXJoYXBzICJhbHJlYWR5IGV4aXN0cyIgPw0KDQo+ICsJCXJldHVybiAtRUlOVkFMOw0KDQpFRVhJ U1QgPw0KDQo+ICsJfQ0KPiArDQo+ICsJcGVlcl9tZXAgPSBremFsbG9jKHNpemVvZigqcGVlcl9t ZXApLCBHRlBfS0VSTkVMKTsNCj4gKwlpZiAoIXBlZXJfbWVwKQ0KPiArCQlyZXR1cm4gLUVOT01F TTsNCj4gKw0KPiArCXBlZXJfbWVwLT5tZXBpZCA9IG1lcGlkOw0KPiArCXBlZXJfbWVwLT5tZXAg PSBtZXA7DQo+ICsJSU5JVF9ERUxBWUVEX1dPUksoJnBlZXJfbWVwLT5jY21fcnhfZHdvcmssIGNj bV9yeF93b3JrX2V4cGlyZWQpOw0KPiArDQo+ICsJaWYgKG1lcC0+Y2NfY29uZmlnLmVuYWJsZSkN Cj4gKwkJLyogQ0MgaXMgZW5hYmxlZCAqLw0KDQpVbm5lY2Vzc2FyeSBjb21tZW50LCB0aGUgZnVu Y3Rpb24gbmFtZSBpcyBzZWxmLWRlc2NyaXB0aXZlLg0KDQo+ICsJCWNjX3BlZXJfZW5hYmxlKHBl ZXJfbWVwKTsNCj4gKw0KPiArCS8qIEFkZCBQZWVyIE1FUCB0byBsaXN0ICovDQoNClRoaXMgY29t bWVudCBpcyB1bm5lY2Vzc2FyeSwgdGhlIGNvZGUgaXMgc2VlbXMgcHJldHR5IGNsZWFyLg0KDQo+ ICsJbGlzdF9hZGRfdGFpbF9yY3UoJnBlZXJfbWVwLT5oZWFkLCAmbWVwLT5wZWVyX21lcF9saXN0 KTsNCj4gKw0KPiArCXJldHVybiAwOw0KPiArfQ0KPiArDQo+ICsvKiBub3RlOiBhbHJlYWR5IGNh bGxlZCB3aXRoIHJ0bmxfbG9jayAqLw0KPiAraW50IGJyX2NmbV9jY19wZWVyX21lcF9yZW1vdmUo c3RydWN0IG5ldF9icmlkZ2UgKmJyLCBjb25zdCB1MzIgaW5zdGFuY2UsDQo+ICsJCQkgICAgICB1 MzIgbWVwaWQsDQo+ICsJCQkgICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spDQo+ ICt7DQo+ICsJc3RydWN0IGJyX2NmbV9wZWVyX21lcCAqcGVlcl9tZXA7DQo+ICsJc3RydWN0IGJy X2NmbV9tZXAgKm1lcDsNCj4gKw0KPiArCW1lcCA9IGJyX21lcF9maW5kKGJyLCBpbnN0YW5jZSk7 DQo+ICsJaWYgKCFtZXApIHsNCj4gKwkJTkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjaywNCj4gKwkJ CQkgICAiTUVQIGluc3RhbmNlIG5vdCBjcmVhdGVkIik7DQo+ICsJCXJldHVybiAtRUlOVkFMOw0K PiArCX0NCj4gKw0KPiArCXBlZXJfbWVwID0gYnJfcGVlcl9tZXBfZmluZChtZXAsIG1lcGlkKTsN Cj4gKwlpZiAoIXBlZXJfbWVwKSB7DQo+ICsJCU5MX1NFVF9FUlJfTVNHX01PRChleHRhY2ssDQo+ ICsJCQkJICAgIlBlZXIgTUVQLUlEIGFscmVhZHkgZGVsZXRlZCIpOw0KDQpXaHkgYWxyZWFkeSBk ZWxldGVkID8gTWF5YmUgaXQgZGlkbid0IGV4aXN0IGF0IGFsbCA/IDopICJkb2VzIG5vdCBleGlz dCIgc291bmRzDQptb3JlIGFwcHJvcHJpYXRlLg0KDQo+ICsJCXJldHVybiAtRUlOVkFMOw0KDQpp biB0aGF0IHNwaXJpdCBFTk9FTlQgaGVyZSA/DQoNCj4gKwl9DQo+ICsNCj4gKwljY19wZWVyX2Rp c2FibGUocGVlcl9tZXApOw0KPiArDQo+ICsJbGlzdF9kZWxfcmN1KCZwZWVyX21lcC0+aGVhZCk7 DQo+ICsJa2ZyZWVfcmN1KHBlZXJfbWVwLCByY3UpOw0KPiArDQo+ICsJcmV0dXJuIDA7DQo+ICt9 DQo+ICsNCj4gKy8qIG5vdGU6IGFscmVhZHkgY2FsbGVkIHdpdGggcnRubF9sb2NrICovDQo+ICtp bnQgYnJfY2ZtX2NjX3JkaV9zZXQoc3RydWN0IG5ldF9icmlkZ2UgKmJyLCBjb25zdCB1MzIgaW5z dGFuY2UsDQo+ICsJCSAgICAgIGNvbnN0IGJvb2wgcmRpLCBzdHJ1Y3QgbmV0bGlua19leHRfYWNr ICpleHRhY2spDQo+ICt7DQo+ICsJc3RydWN0IGJyX2NmbV9tZXAgKm1lcDsNCj4gKw0KPiArCW1l cCA9IGJyX21lcF9maW5kKGJyLCBpbnN0YW5jZSk7DQo+ICsJaWYgKCFtZXApIHsNCj4gKwkJTkxf U0VUX0VSUl9NU0dfTU9EKGV4dGFjaywNCj4gKwkJCQkgICAiTUVQIGluc3RhbmNlIG5vdCBjcmVh dGVkIik7DQo+ICsJCXJldHVybiAtRUlOVkFMOw0KPiArCX0NCj4gKw0KPiArCS8qIFNhdmUgcmRp IHBhcmFtZXRlcnMgKi8NCg0KdW5uZWNlc3NhcnkgY29tbWVudA0KDQo+ICsJbWVwLT5yZGkgPSBy ZGk7DQo+ICsNCj4gKwlyZXR1cm4gMDsNCj4gK30NCj4gKw0KPiArLyogbm90ZTogYWxyZWFkeSBj YWxsZWQgd2l0aCBydG5sX2xvY2sgKi8NCj4gK2ludCBicl9jZm1fY2NfY2NtX3R4KHN0cnVjdCBu ZXRfYnJpZGdlICpiciwgY29uc3QgdTMyIGluc3RhbmNlLA0KPiArCQkgICAgIGNvbnN0IHN0cnVj dCBicl9jZm1fY2NfY2NtX3R4X2luZm8gKmNvbnN0IHR4X2luZm8sDQo+ICsJCSAgICAgc3RydWN0 IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKQ0KPiArew0KPiArCXN0cnVjdCBicl9jZm1fbWVwICpt ZXA7DQo+ICsJc3RydWN0IHNrX2J1ZmYgKnNrYjsNCj4gKwl1MzIgaW50ZXJ2YWxfdXM7DQo+ICsN Cj4gKwltZXAgPSBicl9tZXBfZmluZChiciwgaW5zdGFuY2UpOw0KPiArCWlmICghbWVwKSB7DQo+ ICsJCU5MX1NFVF9FUlJfTVNHX01PRChleHRhY2ssDQo+ICsJCQkJICAgIk1FUCBpbnN0YW5jZSBu b3QgY3JlYXRlZCIpOw0KPiArCQlyZXR1cm4gLUVJTlZBTDsNCj4gKwl9DQoNCkFsbCBvZiB0aGVz ZSBzZWVtIHRvIHN0YXJ0IHdpdGggZmluZGluZyB0aGUgaW5zdGFuY2UgYW5kIGNoZWNraW5nIGlm IGl0IGV4aXN0cy4NClBlcmhhcHMgdGhpcyBjYW4gYmUgZmFjdG9yZWQgb3V0IGluIHRoZSBuZXRs aW5rIGhhbmRsaW5nIGNvZGU/DQoNCj4gKw0KPiArCWlmIChtZW1jbXAodHhfaW5mbywgJm1lcC0+ Y2NfY2NtX3R4X2luZm8sIHNpemVvZigqdHhfaW5mbykpID09IDApIHsNCj4gKwkJLyogTm8gY2hh bmdlIGluIHR4X2luZm8uICovDQo+ICsJCWlmIChtZXAtPmNjX2NjbV90eF9pbmZvLnBlcmlvZCA9 PSAwKQ0KPiArCQkJLyogVHJhbnNtaXNzaW9uIGlzIG5vdCBlbmFibGVkIC0ganVzdCByZXR1cm4g Ki8NCj4gKwkJCXJldHVybiAwOw0KPiArDQo+ICsJCS8qIFRyYW5zbWlzc2lvbiBpcyBvbmdvaW5n LCB0aGUgZW5kIHRpbWUgaXMgcmVjYWxjdWxhdGVkICovDQo+ICsJCW1lcC0+Y2NtX3R4X2VuZCA9 IGppZmZpZXMgKw0KPiArCQkJCSAgdXNlY3NfdG9famlmZmllcyh0eF9pbmZvLT5wZXJpb2QgKiAx MDAwMDAwKTsNCj4gKwkJcmV0dXJuIDA7DQo+ICsJfQ0KPiArDQo+ICsJaWYgKHR4X2luZm8tPnBl cmlvZCA9PSAwICYmIG1lcC0+Y2NfY2NtX3R4X2luZm8ucGVyaW9kID09IDApDQo+ICsJCS8qIFNv bWUgY2hhbmdlIGluIGluZm8gYW5kIHRyYW5zbWlzc2lvbiBpcyBub3Qgb25nb2luZyAqLw0KPiAr CQlnb3RvIHNhdmU7DQo+ICsNCj4gKwlpZiAodHhfaW5mby0+cGVyaW9kICE9IDAgJiYgbWVwLT5j Y19jY21fdHhfaW5mby5wZXJpb2QgIT0gMCkgew0KPiArCQkvKiBTb21lIGNoYW5nZSBpbiBpbmZv IGFuZCB0cmFuc21pc3Npb24gaXMgb25nb2luZyAqLw0KPiArCQkvKiBUaGUgZW5kIHRpbWUgaXMg cmVjYWxjdWxhdGVkICovDQoNCk11bHRpLWxpbmUgY29tbWVudHMgZm9ybWF0IGlzOg0KLyogY29t bWVudDENCiAqIGNvbW1lbnQyDQogKi8NCg0KPiArCQltZXAtPmNjbV90eF9lbmQgPSBqaWZmaWVz ICsNCj4gKwkJCQkgIHVzZWNzX3RvX2ppZmZpZXModHhfaW5mby0+cGVyaW9kICogMTAwMDAwMCk7 DQo+ICsNCj4gKwkJZ290byBzYXZlOw0KPiArCX0NCj4gKw0KPiArCWlmICh0eF9pbmZvLT5wZXJp b2QgPT0gMCAmJiBtZXAtPmNjX2NjbV90eF9pbmZvLnBlcmlvZCAhPSAwKSB7DQo+ICsJCS8qIEND TSB0cmFuc21pc3Npb24gc3RvcCAqLw0KDQpUaGlzIGNvbW1lbnQgc2VlbXMgdW5uZWNlc3Nhcnks IHRoZSBjb2RlIGlzIHByZXR0eSBjbGVhci4NCg0KPiArCQljYW5jZWxfZGVsYXllZF93b3JrX3N5 bmMoJm1lcC0+Y2NtX3R4X2R3b3JrKTsNCj4gKwkJZ290byBzYXZlOw0KPiArCX0NCj4gKw0KPiAr CS8qIFN0YXJ0IGRlbGF5ZWQgd29yayB0byB0cmFuc21pdCBDQ00gZnJhbWVzICovDQoNClRoaXMg Y29tbWVudCBzZWVtcyB1bm5lY2Vzc2FyeSwgdGhlIGNvZGUgaXMgcHJldHR5IGNsZWFyLg0KDQo+ ICsJbWVwLT5jY21fdHhfZW5kID0gamlmZmllcyArIHVzZWNzX3RvX2ppZmZpZXModHhfaW5mby0+ cGVyaW9kICogMTAwMDAwMCk7DQo+ICsJaW50ZXJ2YWxfdXMgPSBpbnRlcnZhbF90b191cyhtZXAt PmNjX2NvbmZpZy5leHBfaW50ZXJ2YWwpOw0KPiArCXF1ZXVlX2RlbGF5ZWRfd29yayhzeXN0ZW1f d3EsICZtZXAtPmNjbV90eF9kd29yaywNCj4gKwkJCSAgIHVzZWNzX3RvX2ppZmZpZXMoaW50ZXJ2 YWxfdXMpKTsNCj4gKw0KPiArCS8qIFNlbmQgZmlyc3QgQ0NNIGZyYW1lIG5vdyAqLw0KPiArCW1l cC0+Y2NtX3R4X3NudW1iZXIgPSAwOw0KPiArCXNrYiA9IGNjbV9mcmFtZV9idWlsZChtZXAsIHR4 X2luZm8pOw0KPiArCWlmIChza2IpDQo+ICsJCWNjbV9mcmFtZV90eChza2IpOw0KPiArDQo+ICtz YXZlOg0KPiArCS8qIFNhdmUgdHhfaW5mbyBwYXJhbWV0ZXJzICovDQo+ICsJbWVwLT5jY19jY21f dHhfaW5mbyA9ICp0eF9pbmZvOw0KPiArDQo+ICsJcmV0dXJuIDA7DQo+ICt9DQo+ICsNCj4gKy8q IG5vdGU6IGFscmVhZHkgY2FsbGVkIHdpdGggcnRubF9sb2NrICovDQo+ICtpbnQgYnJfY2ZtX2Nj X2NvdW50ZXJzX2NsZWFyKHN0cnVjdCBuZXRfYnJpZGdlICpiciwgY29uc3QgdTMyIGluc3RhbmNl LA0KPiArCQkJICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spDQo+ICt7DQo+ICsJ c3RydWN0IGJyX2NmbV9tZXAgKm1lcDsNCj4gKw0KPiArCW1lcCA9IGJyX21lcF9maW5kKGJyLCBp bnN0YW5jZSk7DQo+ICsJaWYgKCFtZXApIHsNCj4gKwkJTkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFj aywNCj4gKwkJCQkgICAiTUVQIGluc3RhbmNlIG5vdCBjcmVhdGVkIik7DQo+ICsJCXJldHVybiAt RUlOVkFMOw0KPiArCX0NCj4gKw0KPiArCW1lbXNldCgmbWVwLT5jY19jb3VudGVycywgMCwgc2l6 ZW9mKG1lcC0+Y2NfY291bnRlcnMpKTsNCj4gKw0KPiArCXJldHVybiAwOw0KPiArfQ0KPiArDQo+ ICtib29sIGJyX2NmbV9jcmVhdGVkKHN0cnVjdCBuZXRfYnJpZGdlICpicikNCj4gK3sNCj4gKwly ZXR1cm4gIWxpc3RfZW1wdHkoJmJyLT5tZXBfbGlzdCk7DQo+ICt9DQo+IGRpZmYgLS1naXQgYS9u ZXQvYnJpZGdlL2JyX3ByaXZhdGUuaCBiL25ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oDQo+IGluZGV4 IDYyOTRhM2U1MWEzMy4uMzg1YTZhNmFhMTdlIDEwMDY0NA0KPiAtLS0gYS9uZXQvYnJpZGdlL2Jy X3ByaXZhdGUuaA0KPiArKysgYi9uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaA0KPiBAQCAtMTM2Myw2 ICsxMzYzLDIyIEBAIHN0YXRpYyBpbmxpbmUgaW50IGJyX21ycF9maWxsX2luZm8oc3RydWN0IHNr X2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9icmlkZ2UgKmJyKQ0KPiAgDQo+ICAjZW5kaWYNCj4gIA0K PiArLyogYnJfY2ZtLmMgKi8NCj4gKyNpZiBJU19FTkFCTEVEKENPTkZJR19CUklER0VfQ0ZNKQ0K PiAraW50IGJyX2NmbV9yeF9mcmFtZV9wcm9jZXNzKHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnAs IHN0cnVjdCBza19idWZmICpza2IpOw0KPiArYm9vbCBicl9jZm1fY3JlYXRlZChzdHJ1Y3QgbmV0 X2JyaWRnZSAqYnIpOw0KPiArI2Vsc2UNCj4gK3N0YXRpYyBpbmxpbmUgaW50IGJyX2NmbV9yeF9m cmFtZV9wcm9jZXNzKHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnAsIHN0cnVjdCBza19idWZmICpz a2IpDQo+ICt7DQo+ICsJcmV0dXJuIC1FT1BOT1RTVVBQOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMg aW5saW5lIGJvb2wgYnJfY2ZtX2NyZWF0ZWQoc3RydWN0IG5ldF9icmlkZ2UgKmJyKQ0KPiArew0K PiArCXJldHVybiBmYWxzZTsNCj4gK30NCj4gKyNlbmRpZg0KPiArDQo+ICAvKiBicl9uZXRsaW5r LmMgKi8NCj4gIGV4dGVybiBzdHJ1Y3QgcnRubF9saW5rX29wcyBicl9saW5rX29wczsNCj4gIGlu dCBicl9uZXRsaW5rX2luaXQodm9pZCk7DQo+IGRpZmYgLS1naXQgYS9uZXQvYnJpZGdlL2JyX3By aXZhdGVfY2ZtLmggYi9uZXQvYnJpZGdlL2JyX3ByaXZhdGVfY2ZtLmgNCj4gbmV3IGZpbGUgbW9k ZSAxMDA2NDQNCj4gaW5kZXggMDAwMDAwMDAwMDAwLi4zNzkzMzRhNDI2NjcNCj4gLS0tIC9kZXYv bnVsbA0KPiArKysgYi9uZXQvYnJpZGdlL2JyX3ByaXZhdGVfY2ZtLmgNCj4gQEAgLTAsMCArMSwy NDIgQEANCj4gKy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9yLWxhdGVyICov DQo+ICsNCj4gKyNpZm5kZWYgX0JSX1BSSVZBVEVfQ0ZNX0hfDQo+ICsjZGVmaW5lIF9CUl9QUklW QVRFX0NGTV9IXw0KPiArDQo+ICsjaW5jbHVkZSAiYnJfcHJpdmF0ZS5oIg0KPiArI2luY2x1ZGUg PHVhcGkvbGludXgvY2ZtX2JyaWRnZS5oPg0KPiArDQo+ICsvKiBNRVAgY3JlYXRlIHBhcmFtZXRl cnMgKi8NCj4gK3N0cnVjdCBicl9jZm1fbWVwX2NyZWF0ZSB7DQo+ICsJZW51bSBicl9jZm1fZG9t YWluIGRvbWFpbjsgLyogRG9tYWluIGZvciB0aGlzIE1FUCAqLw0KPiArCWVudW0gYnJfY2ZtX21l cF9kaXJlY3Rpb24gZGlyZWN0aW9uOyAvKiBVcCBvciBEb3duIE1FUCBkaXJlY3Rpb24gKi8NCj4g Kwl1MzIgaWZpbmRleDsgLyogUmVzaWRlbmNlIHBvcnQgKi8NCj4gKwl1MTYgdmlkOyAvKiBDbGFz c2lmaWVkIFZJRCBpbiBWTEFOIGRvbWFpbiAqLw0KPiArfTsNCj4gKw0KPiArLyogQ3JlYXRlL0Rl bGV0ZSBhIE1FUC4gKi8NCg0KVGhpcyBpcyBjbGVhci4NCg0KPiAraW50IGJyX2NmbV9tZXBfY3Jl YXRlKHN0cnVjdCBuZXRfYnJpZGdlICpiciwNCj4gKwkJICAgICAgY29uc3QgdTMyIGluc3RhbmNl LA0KPiArCQkgICAgICBzdHJ1Y3QgYnJfY2ZtX21lcF9jcmVhdGUgKmNvbnN0IGNyZWF0ZSwNCj4g KwkJICAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKTsNCj4gK2ludCBicl9jZm1f bWVwX2RlbGV0ZShzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsDQo+ICsJCSAgICAgIGNvbnN0IHUzMiBp bnN0YW5jZSwNCj4gKwkJICAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKTsNCj4g Kw0KPiArLyogTUVQIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVycyAqLw0KPiArc3RydWN0IGJyX2Nm bV9tZXBfY29uZmlnIHsNCj4gKwl1MzIgbWRsZXZlbDsNCj4gKwl1MzIgbWVwaWQ7IC8qIE1FUElE IGZvciB0aGlzIE1FUCAqLw0KPiArCXN0cnVjdCBtYWNfYWRkciB1bmljYXN0X21hYzsgLyogVGhl IE1FUCB1bmljYXN0IE1BQyAqLw0KPiArCS8qIEFkZGVkIHRhZyBWSUQgaW4gY2FzZSBvZiB0YWdn ZWQgUE9SVCBkb21haW4uIFVudGFnZ2VkIGlmIHplcm8uICovDQo+ICsJdTE2IHZpZDsNCj4gK307 DQo+ICsNCj4gKy8qIFNldCBnZW5lcmFsIGNvbmZpZ3VyYXRpb24gb2YgTUVQICovDQoNClRoZSBm dW5jdGlvbiBuYW1lIGlzIHNlbGYtZGVzY3JpcHRpdmUuDQoNCj4gK2ludCBicl9jZm1fbWVwX2Nv bmZpZ19zZXQoc3RydWN0IG5ldF9icmlkZ2UgKmJyLA0KPiArCQkJICBjb25zdCB1MzIgaW5zdGFu Y2UsDQo+ICsJCQkgIGNvbnN0IHN0cnVjdCBicl9jZm1fbWVwX2NvbmZpZyAqY29uc3QgY29uZmln LA0KPiArCQkJICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spOw0KPiArDQo+ICsvKiBN RVAgc3RhdHVzLiAqLw0KPiArc3RydWN0IGJyX2NmbV9tZXBfc3RhdHVzIHsNCj4gKwkvKiBJbmRp Y2F0aW9ucyB0aGF0IGFuIE9BTSBQRFUgaGFzIGJlZW4gc2Vlbi4gKi8NCj4gKwkvKiBBcmUgY2xl YXJlZCBkdXJpbmcgY2FsbCB0byBicl9jZm1fc3RhdHVzX2dldCgpLiAqLw0KPiArCWJvb2wgb3Bj b2RlX3VuZXhwX3NlZW47IC8qIFJYIG9mIE9BTSBQRFUgd2l0aCB1bmV4cGVjdGVkIG9wY29kZSAq Lw0KPiArCWJvb2wgZG1hY191bmV4cF9zZWVuOyAvKiBSWCBvZiBPQU0gRnJhbWUgd2l0aCB1bmV4 cGVjdGVkIERNQUMgKi8NCj4gKwlib29sIHR4X2xldmVsX2xvd19zZWVuOyAvKiBUWCBvZiBPQU0g UERVIHdpdGggbGV2ZWwgbG93IGJsb2NrZWQgKi8NCj4gKwlib29sIHZlcnNpb25fdW5leHBfc2Vl bjsgLyogUlggb2YgT0FNIFBEVSB3aXRoIHVuZXhwZWN0ZWQgdmVyc2lvbiAqLw0KPiArCWJvb2wg cnhfbGV2ZWxfbG93X3NlZW47IC8qIFJ4IG9mIE9BTSBQRFUgd2l0aCBsZXZlbCBsb3cgKi8NCj4g K307DQo+ICsNCj4gKy8qIE1FUCBzdGF0dXMgZ2V0LiAqLw0KdW5uZWNlc3NhcnkgY29tbWVudA0K PiAraW50IGJyX2NmbV9tZXBfc3RhdHVzX2dldChjb25zdCB1MzIgaW5zdGFuY2UsIHN0cnVjdCBi cl9jZm1fbWVwX3N0YXR1cyAqY29uc3Qgc3RhdHVzKTsNCj4gKw0KPiArLyogTUVQIGNvdW50ZXJz ICovDQoNCnVubmVjZXNzYXJ5IGNvbW1lbnQNCg0KPiArc3RydWN0IGJyX2NmbV9tZXBfY291bnRl cnMgew0KPiArCS8qIEFsbCB0aGUgZm9sbG93aW5nIGNvdW50ZXJzIGFyZSBjbGVhcmVkIGR1cmlu ZyBjYWxsIHRvICovDQo+ICsJLyogYnJfY2ZtX2NvdW50ZXJzX2NsZWFyKCkuICovDQo+ICsNCj4g KwkvKiBPQU0gUERVIFJ4IGFuZCBUeCBjb3VudGVycy4gKi8NCj4gKwl1NjQgcnhfY291bnRlcjsN Cj4gKwl1NjQgdHhfY291bnRlcjsNCj4gKw0KPiArCS8qIFJ4L1R4IFBEVXMgdGhhdCBhcmUgZGlz Y2FyZGVkIGR1ZSB0byBmaWx0ZXJpbmcgKi8NCj4gKwl1NjQgcnhfZGlzY2FyZF9jb3VudGVyOyAv KiBDaGVjayBvZiBNRUwgb3IgRE1BQyBvciBWZXJzaW9uIG9yIENDTSAqLw0KPiArCXU2NCB0eF9k aXNjYXJkX2NvdW50ZXI7IC8qIENoZWNrIG9mIE1FTCAqLw0KPiArfTsNCj4gKw0KPiArLyogR2V0 IE1FUCBjb3VudGVycy4gKi8NCnVubmVjZXNzYXJ5IGNvbW1lbnQNCj4gK2ludCBicl9jZm1fbWVw X2NvdW50ZXJzX2dldChjb25zdCB1MzIgaW5zdGFuY2UsIHN0cnVjdCBicl9jZm1fbWVwX2NvdW50 ZXJzICpjb3VudGVycyk7DQo+ICsNCj4gKy8qIE1FUCBjb3VudGVyIGNsZWFyLiAqLw0KdW5uZWNl c3NhcnkgY29tbWVudA0KPiAraW50IGJyX2NmbV9tZXBfY291bnRlcnNfY2xlYXIoc3RydWN0IG5l dF9icmlkZ2UgKmJyLA0KPiArCQkJICAgICAgY29uc3QgdTMyIGluc3RhbmNlLA0KPiArCQkJICAg ICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKTsNCj4gKw0KPiArc3RydWN0IGJyX2Nm bV9tYWlkIHsNCj4gKwl1OCBkYXRhW0NGTV9NQUlEX0xFTkdUSF07DQo+ICt9Ow0KPiArDQo+ICtz dHJ1Y3QgYnJfY2ZtX2NjX2NvbmZpZyB7DQo+ICsJLyogRXhwZWN0ZWQgcmVjZWl2ZWQgQ0NNIFBE VSBNQUlELiAqLw0KPiArCXN0cnVjdCBicl9jZm1fbWFpZCBleHBfbWFpZDsNCj4gKw0KPiArCS8q IEV4cGVjdGVkIHJlY2VpdmVkIENDTSBQRFUgaW50ZXJ2YWwuICovDQo+ICsJLyogVHJhbnNtaXR0 aW5nIENDTSBQRFUgaW50ZXJ2YWwgd2hlbiBDQ00gdHggaXMgZW5hYmxlZC4gKi8NCj4gKwllbnVt IGJyX2NmbV9jY21faW50ZXJ2YWwgZXhwX2ludGVydmFsOw0KPiArDQo+ICsJLyogRXhwZWN0ZWQg cmVjZWl2ZWQgQ0NNIFBEVSBQcmlvcml0eSAqLw0KPiArCXU4IGV4cF9wcmlvcml0eTsNCj4gKw0K PiArCWJvb2wgZW5hYmxlOyAvKiBFbmFibGUvZGlzYWJsZSBDQ00gUERVIGhhbmRsaW5nICovDQo+ ICt9Ow0KPiArDQo+ICsvKiBTZXQgQ0MgY29uZmlndXJhdGlvbiBvZiBhIE1FUCAqLw0KdW5uZWNl c3NhcnkgY29tbWVudA0KPiAraW50IGJyX2NmbV9jY19jb25maWdfc2V0KHN0cnVjdCBuZXRfYnJp ZGdlICpiciwNCj4gKwkJCSBjb25zdCB1MzIgaW5zdGFuY2UsDQo+ICsJCQkgY29uc3Qgc3RydWN0 IGJyX2NmbV9jY19jb25maWcgKmNvbnN0IGNvbmZpZywNCj4gKwkJCSBzdHJ1Y3QgbmV0bGlua19l eHRfYWNrICpleHRhY2spOw0KPiArDQo+ICsvKiBTZXQgQ0MgUGVlciBNRVAgSUQgYWRkL3JlbW92 ZSAqLw0KdW5uZWNlc3NhcnkgY29tbWVudA0KPiAraW50IGJyX2NmbV9jY19wZWVyX21lcF9hZGQo c3RydWN0IG5ldF9icmlkZ2UgKmJyLCBjb25zdCB1MzIgaW5zdGFuY2UsDQo+ICsJCQkgICB1MzIg cGVlcl9tZXBfaWQsDQo+ICsJCQkgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spOw0K PiAraW50IGJyX2NmbV9jY19wZWVyX21lcF9yZW1vdmUoc3RydWN0IG5ldF9icmlkZ2UgKmJyLCBj b25zdCB1MzIgaW5zdGFuY2UsDQo+ICsJCQkgICAgICB1MzIgcGVlcl9tZXBfaWQsDQo+ICsJCQkg ICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spOw0KPiArDQo+ICsvKiBUcmFuc21p dHRlZCBDQ00gUmVtb3RlIERlZmVjdCBJbmRpY2F0aW9uIHN0YXR1cyBzZXQuDQo+ICsgKiBUaGlz IFJESSBpcyBpbnNlcnRlZCBpbiB0cmFuc21pdHRlZCBDQ00gUERVcyBpZiBDQ00gdHJhbnNtaXNz aW9uIGlzIGVuYWJsZWQuDQo+ICsgKiBTZWUgYnJfY2ZtX2NjX2NjbV90eCgpIHdpdGggaW50ZXJ2 YWwgIT0gQlJfQ0ZNX0NDTV9JTlRFUlZBTF9OT05FDQo+ICsgKi8NCj4gK2ludCBicl9jZm1fY2Nf cmRpX3NldChzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsIGNvbnN0IHUzMiBpbnN0YW5jZSwNCj4gKwkJ ICAgICAgY29uc3QgYm9vbCByZGksIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjayk7DQo+ ICsNCj4gKy8qIE9BTSBQRFUgVHggaW5mb3JtYXRpb24gKi8NCj4gK3N0cnVjdCBicl9jZm1fY2Nf Y2NtX3R4X2luZm8gew0KPiArCXN0cnVjdCBtYWNfYWRkciBkbWFjOw0KPiArCXU4IHByaW9yaXR5 Ow0KPiArCWJvb2wgZGVpOw0KPiArCS8qIFRoZSBDQ00gd2lsbCBiZSB0cmFuc21pdHRlZCBmb3Ig dGhpcyBwZXJpb2QgaW4gc2Vjb25kcy4NCj4gKwkgKiBDYWxsIGJyX2NmbV9jY19jY21fdHggYmVm b3JlIHRpbWVvdXQgdG8ga2VlcCB0cmFuc21pc3Npb24gYWxpdmUuDQo+ICsJICogV2hlbiBwZXJp b2QgaXMgemVybyBhbnkgb25nb2luZyB0cmFuc21pc3Npb24gd2lsbCBiZSBzdG9wcGVkLg0KPiAr CSAqLw0KPiArCXUzMiBwZXJpb2Q7DQo+ICsNCj4gKwlib29sIHNlcV9ub191cGRhdGU7IC8qIFVw ZGF0ZSBUeCBDQ00gc2VxdWVuY2UgbnVtYmVyICovDQo+ICsJYm9vbCBpZl90bHY7IC8qIEluc2Vy dCBJbnRlcmZhY2UgU3RhdHVzIFRMViAqLw0KPiArCXU4IGlmX3Rsdl92YWx1ZTsgLyogSW50ZXJm YWNlIFN0YXR1cyBUTFYgdmFsdWUgKi8NCj4gKwlib29sIHBvcnRfdGx2OyAvKiBJbnNlcnQgUG9y dCBTdGF0dXMgVExWICovDQo+ICsJdTggcG9ydF90bHZfdmFsdWU7IC8qIFBvcnQgU3RhdHVzIFRM ViB2YWx1ZSAqLw0KPiArCS8qIFNlbmRlciBJRCBUTFYgPz8NCj4gKwkgKiBPcmdhbml6YXRpb24t U3BlY2lmaWMgVExWID8/DQo+ICsJICovDQo+ICt9Ow0KPiArDQo+ICsvKiBUcmFuc21pdCBDQ00g UERVICovDQp1bm5lY2Vzc2FyeSBjb21tZW50DQo+ICtpbnQgYnJfY2ZtX2NjX2NjbV90eChzdHJ1 Y3QgbmV0X2JyaWRnZSAqYnIsIGNvbnN0IHUzMiBpbnN0YW5jZSwNCj4gKwkJICAgICBjb25zdCBz dHJ1Y3QgYnJfY2ZtX2NjX2NjbV90eF9pbmZvICpjb25zdCB0eF9pbmZvLA0KPiArCQkgICAgIHN0 cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjayk7DQo+ICsNCj4gK3N0cnVjdCBicl9jZm1fY2Nf c3RhdHVzIHsNCj4gKwkvKiAoaW50ZXJ2YWwgPT0gMCkgZm9yIGxhc3QgcmVjZWl2ZWQgQ0NNIFBE VSAqLw0KPiArCWJvb2wgemVyb19pbnRlcnZhbDsNCj4gKw0KPiArCS8qIFVuZXhwZWN0ZWQgTUQg TGV2ZWwgcmVjZWl2ZWQuIENsZWFyZWQgYWZ0ZXIgMy41IGludGVydmFsICovDQo+ICsJYm9vbCBt ZGxldmVsX3VuZXhwOw0KPiArDQo+ICsJLyogVW5leHBlY3RlZCBNQUlEIHJlY2VpdmVkLiBDbGVh cmVkIGFmdGVyIDMuNSBpbnRlcnZhbCAqLw0KPiArCWJvb2wgbWFpZF91bmV4cDsNCj4gKw0KPiAr CS8qIFVuZXhwZWN0ZWQgTUVQSUQgcmVjZWl2ZWQuIENsZWFyZWQgYWZ0ZXIgMy41IGludGVydmFs ICovDQo+ICsJYm9vbCBtZXBpZF91bmV4cDsNCj4gK307DQo+ICsNCj4gKy8qIEdldCBDQyBzdGF0 dXMuICovDQp1bm5lY2Vzc2FyeSBjb21tZW50DQo+ICtpbnQgYnJfY2ZtX2NjX3N0YXR1c19nZXQo Y29uc3QgdTMyIGluc3RhbmNlLCBzdHJ1Y3QgYnJfY2ZtX2NjX3N0YXR1cyAqY29uc3Qgc3RhdHVz KTsNCj4gKw0KPiArc3RydWN0IGJyX2NmbV9jY19jb3VudGVycyB7DQo+ICsJLyogQ0NNIFBEVSBS WCBhbmQgVFggY291bnRlcnMNCj4gKwkgKiBBcmUgY2xlYXJlZCBkdXJpbmcgY2FsbCB0byBicl9j Zm1fY2NfY291bnRlcnNfY2xlYXIoKQ0KPiArCSAqLw0KPiArCXU2NCByeF92YWxpZF9jb3VudGVy Ow0KPiArCXU2NCByeF9pbnZhbGlkX2NvdW50ZXI7DQo+ICsJdTY0IHJ4X29vX2NvdW50ZXI7ICAv KiBPdXQgb2YgT3JkZXIgc2VxdWVuY2UgbnVtYmVycyBjb3VudGVyICovDQo+ICsJdTY0IHR4X2Nv dW50ZXI7DQo+ICt9Ow0KPiArDQo+ICsvKiBHZXQgQ0MgY291bnRlcnMuICovDQp1bm5lY2Vzc2Fy eSBjb21tZW50DQo+ICtpbnQgYnJfY2ZtX2NjX2NvdW50ZXJzX2dldChjb25zdCB1MzIgaW5zdGFu Y2UsIHN0cnVjdCBicl9jZm1fY2NfY291bnRlcnMgKmNvdW50ZXJzKTsNCj4gKw0KPiArLyogQ0Mg Y291bnRlciBjbGVhci4gKi8NCnVubmVjZXNzYXJ5IGNvbW1lbnQNCj4gK2ludCBicl9jZm1fY2Nf Y291bnRlcnNfY2xlYXIoc3RydWN0IG5ldF9icmlkZ2UgKmJyLCBjb25zdCB1MzIgaW5zdGFuY2Us DQo+ICsJCQkgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjayk7DQo+ICsNCj4gK3N0 cnVjdCBicl9jZm1fY2NfcGVlcl9zdGF0dXMgew0KPiArCXN0cnVjdCBtYWNfYWRkciB1bmljYXN0 X21hYzsgLyogVGhlIFBlZXIgTUVQIHVuaWNhc3QgTUFDICovDQo+ICsNCj4gKwkvKiBVbmV4cGVj dGVkIEludGVydmFsLiBDbGVhcmVkIGFmdGVyIDMuNSBpbnRlcnZhbCAqLw0KPiArCWJvb2wgaW50 ZXJ2YWxfdW5leHA7DQo+ICsNCj4gKwkvKiBVbmV4cGVjdGVkIFByaW9yaXR5IHJlY2VpdmVkLiBD bGVhcmVkIGFmdGVyIDMuNSBpbnRlcnZhbCAqLw0KPiArCWJvb2wgcHJpb3JpdHlfdW5leHA7DQo+ ICsNCj4gKwkvKiBUaGlzIENDTSByZWxhdGVkIHN0YXR1cyBpcyBiYXNlZCBvbiB0aGUgbGF0ZXN0 IHJlY2VpdmVkIENDTSBQRFUuICovDQo+ICsJdTMyIHJ4X2lmaW5kZXg7IC8qIFRoZSBpbmdyZXNz IHBvcnQgKi8NCj4gKwl1OCBwb3J0X3Rsdl92YWx1ZTsgLyogUG9ydCBTdGF0dXMgVExWIHZhbHVl ICovDQo+ICsJdTggaWZfdGx2X3ZhbHVlOyAvKiBJbnRlcmZhY2UgU3RhdHVzIFRMViB2YWx1ZSAq Lw0KPiArDQo+ICsJLyogQ0NNIGhhcyBub3QgYmVlbiByZWNlaXZlZCBmb3IgMy4yNSBpbnRlcnZh bHMgKi8NCj4gKwlib29sIGNjbV9kZWZlY3Q7DQo+ICsNCj4gKwkvKiAoUkRJID09IDEpIGZvciBs YXN0IHJlY2VpdmVkIENDTSBQRFUgKi8NCj4gKwlib29sIHJkaTsNCj4gKw0KPiArCS8qIEluZGlj YXRpb25zIHRoYXQgYSBDQ00gUERVIGhhcyBiZWVuIHNlZW4uDQo+ICsJICogQXJlIGNsZWFyZWQg ZHVyaW5nIGNhbGwgdG8gYnJfY2ZtX2NjX3N0YXR1c19nZXQoKQ0KPiArCSAqLw0KPiArCWJvb2wg c2VlbjsgLyogQ0NNIFBEVSByZWNlaXZlZCAqLw0KPiArCWJvb2wgdGx2X3NlZW47IC8qIENDTSBQ RFUgd2l0aCBUTFYgcmVjZWl2ZWQgKi8NCj4gKwkvKiBDQ00gUERVIHdpdGggdW5leHBlY3RlZCBz ZXF1ZW5jZSBudW1iZXIgcmVjZWl2ZWQgKi8NCj4gKwlib29sIHNlcV91bmV4cF9zZWVuOw0KPiAr fTsNCj4gKw0KPiArLyogR2V0IENDIHBlZXIgTUVQIHN0YXR1cy4gKi8NCnVubmVjZXNzYXJ5IGNv bW1lbnQNCj4gK2ludCBicl9jZm1fY2NfcGVlcl9zdGF0dXNfZ2V0KGNvbnN0IHUzMiBpbnN0YW5j ZSwgY29uc3QgdTMyIG1lcGlkLA0KPiArCQkJICAgICAgc3RydWN0IGJyX2NmbV9jY19wZWVyX3N0 YXR1cyAqY29uc3Qgc3RhdHVzKTsNCj4gKw0KPiArc3RydWN0IGJyX2NmbV9tZXAgew0KPiArCS8q IGxpc3QgaGVhZGVyIG9mIE1FUCBpbnN0YW5jZXMgKi8NCj4gKwlzdHJ1Y3QgbGlzdF9oZWFkCQlo ZWFkOw0KPiArCXUzMgkJCQlpbnN0YW5jZTsNCj4gKwlzdHJ1Y3QgYnJfY2ZtX21lcF9jcmVhdGUJ Y3JlYXRlOw0KPiArCXN0cnVjdCBicl9jZm1fbWVwX2NvbmZpZwljb25maWc7DQo+ICsJc3RydWN0 IGJyX2NmbV9jY19jb25maWcJCWNjX2NvbmZpZzsNCj4gKwlzdHJ1Y3QgYnJfY2ZtX2NjX2NjbV90 eF9pbmZvCWNjX2NjbV90eF9pbmZvOw0KPiArCXN0cnVjdCBicl9jZm1fbWVwX2NvdW50ZXJzCWNv dW50ZXJzOw0KPiArCXN0cnVjdCBicl9jZm1fY2NfY291bnRlcnMJY2NfY291bnRlcnM7DQo+ICsJ LyogTGlzdCBvZiBtdWx0aXBsZSBwZWVyIE1FUHMgKi8NCj4gKwlzdHJ1Y3QgbGlzdF9oZWFkCQlw ZWVyX21lcF9saXN0Ow0KPiArCXN0cnVjdCByY3VfaGVhZAkJCXJjdTsNCg0KUGxlYXNlIG1vdmUg dGhlIHJjdSBhdCB0aGUgZW5kLCBpdCdzIHVzZWQgb25seSBvbiBkZWxldGlvbi4NCg0KPiArCXN0 cnVjdCBuZXRfYnJpZGdlX3BvcnQgX19yY3UJKmJfcG9ydDsNCj4gKwl1bnNpZ25lZCBsb25nCQkJ Y2NtX3R4X2VuZDsNCj4gKwlzdHJ1Y3QgZGVsYXllZF93b3JrCQljY21fdHhfZHdvcms7DQo+ICsJ c3RydWN0IGJyX2NmbV9jY19zdGF0dXMJCWNjX3N0YXR1czsNCj4gKwl1MzIJCQkJY2NtX3R4X3Nu dW1iZXI7DQo+ICsJdTMyCQkJCWNjbV9yeF9zbnVtYmVyOw0KPiArCXN0cnVjdCBicl9jZm1fbWVw X3N0YXR1cwlzdGF0dXM7DQo+ICsJYm9vbAkJCQlyZGk7DQo+ICt9Ow0KPiArDQo+ICtzdHJ1Y3Qg YnJfY2ZtX3BlZXJfbWVwIHsNCj4gKwlzdHJ1Y3QgbGlzdF9oZWFkCQloZWFkOw0KPiArCXN0cnVj dCBicl9jZm1fbWVwCQkqbWVwOw0KPiArCXN0cnVjdCByY3VfaGVhZAkJCXJjdTsNCj4gKwlzdHJ1 Y3QgZGVsYXllZF93b3JrCQljY21fcnhfZHdvcms7DQo+ICsJdTMyCQkJCW1lcGlkOw0KPiArCXN0 cnVjdCBicl9jZm1fY2NfcGVlcl9zdGF0dXMJY2Nfc3RhdHVzOw0KPiArCXUzMgkJCQljY21fcnhf Y291bnRfbWlzczsNCj4gK307DQo+ICsNCj4gKyNlbmRpZiAvKiBfQlJfUFJJVkFURV9DRk1fSF8g Ki8NCg0K