From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from dispatch1-us1.ppe-hosted.com (dispatch1-us1.ppe-hosted.com [67.231.154.184]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id B408A31197C; Fri, 16 Oct 2026 00:58:40 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=67.231.154.184 ARC-Seal:i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1792112328; cv=fail; b=jMGhFLvx3mrg7mMt1leyfMYsvRP+wErCGyXbAufk0nJojNdrsjI38nudn/mA1Xb4GJQ+vVa1YrenbeYMt0Mb0Ze9ubbBSO9FdX+dxN+8Sn9rdoorc1J01y8aq4yBqgX36tyE0+Swfhaj79flYbTLY4e5VG9ouRSAyunnqgryhQo= ARC-Message-Signature:i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1792112328; c=relaxed/simple; bh=f4UDrWppe+7OAtkJeiATcSguofQd87dYPq7AY2fSsuY=; h=From:To:CC:Subject:Date:Message-ID:References:In-Reply-To: Content-Type:MIME-Version; b=MF4Hlaoz8Cv0QEN3BHaJfYmpEvtVSXXoSYq/wfVuwtXBagLfuanYUT5tsAYnGe5fft810tW3LPN7YqjxeaJVPeIEh+UlKuwM9T7oUUZxKEDIirHtt76EoSZkWAXUndGcxjAxAlPXCzDEZwdsmzeZkK4+EPJ/tr3rjnrqymhVxc0= ARC-Authentication-Results:i=2; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=sitime.com; spf=pass smtp.mailfrom=sitime.com; dkim=pass (2048-bit key) header.d=sitime.com header.i=@sitime.com header.b=SRxSRuXD; dkim=pass (2048-bit key) header.d=Sitime.onmicrosoft.com header.i=@Sitime.onmicrosoft.com header.b=xD4JCLuc; arc=fail smtp.client-ip=67.231.154.184 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=sitime.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=sitime.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=sitime.com header.i=@sitime.com header.b="SRxSRuXD"; dkim=pass (2048-bit key) header.d=Sitime.onmicrosoft.com header.i=@Sitime.onmicrosoft.com header.b="xD4JCLuc" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sitime.com; h=cc:cc:content-transfer-encoding:content-transfer-encoding:content-type:content-type:date:date:from:from:in-reply-to:in-reply-to:message-id:message-id:mime-version:mime-version:references:references:subject:subject:to:to; s=mail; bh=f4UDrWppe+7OAtkJeiATcSguofQd87dYPq7AY2fSsuY=; b=SRxSRuXDTy2+DFZ4ZiagvzZe469C15NSoj45x6OI5KRTP6Q+D91An0bcN8tZiaEpOjA3M160hqF+1AM21NsFMjZyvuLDZBgXvgUcgOzIoOYv3eDmJl/A0j83t5ulZe+1ziKbCNUqVnH/HgKk3Nux4D4ZGLDgwF2GWUmjViYXgzkpEmLdcGIZ8Fx6aNR6x1A1cM+LnqzbOGTFQytBANYCexvKgjucBTszTymbhWKsLFbWpwxY2BXaMGMwA3PkT5ivX882mFP25NC6gUldN7uA/93CaGki264ReqB2FflKK4HQ/pIJSsJuoaGaEMfRLUSua8zdsEritN19cT+s31kwyQ== X-Virus-Scanned: Proofpoint Essentials engine Received: from SJ2PR03CU001.outbound.protection.outlook.com (mail-westusazon11022079.outbound.protection.outlook.com [52.101.43.79]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange ECDHE (P-384) server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) by mx1-us1.ppe-hosted.com (PPE Hosted ESMTP Server) with ESMTPS id 8725E90007F; Fri, 16 Oct 2026 00:58:32 +0000 (UTC) ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=XPSANto/Q3jJdlJX2K3zhQuqcypR361axWQbvAGQFsGEiG7ALl+aU88/U8T0vtAIfh+Psr3VGYvNOH/DaqErxNO3PuPrDKBYInPQQzU37or2BQwo3mIsPHmOTU7NQ4JgkUKNZlqIQYosieSjwOAWS3xwaTbrKQwg7RJH4xNxHAPe+LoXpYgBF6GfZJ+R0jPd/Ks5FTFdZkHvorcYkRciHhogdPA9uT7BevkGK34LugA92/koFQAeFut7f2SfGnhqGl9Abw6VAJF2EuKZkFyZGxi6+ZDK40BXXqfENSVMOBTNFyjPbe9ZT2gPDdwJiZYY7wQo0IWNqZRC5CJH635d6g== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=f4UDrWppe+7OAtkJeiATcSguofQd87dYPq7AY2fSsuY=; b=FX9obzawoAi07eAPPEEEXCw6JarYiEYQZ8S/+0dPj5JWoeiWGkDwxbQE938yjB3qfMSBYfZ+/JtzUiMYRobOnqkLBMjpqZcCDT7sBEc0liUuvF8ATfQqvJBjIUiBxluQ1aeIETk1y504Ch8ZYF35puG4Mpf+o8a5hbhUAda569Cbp97l0MD4OREuU9k2ifC2ZOgvCe7kWdS4tQLJ9Vh4VpGdnqLJzY81SUKkZ92cK3LIpll31UJSHP81/rGZbKXvz03GnzDCjWZk7+4PCbnSBYc+K6Z3ayIH7uAl9KtECDtzUlBTr9+8RkLZCxKvDcbbJwahYooHQs6SbYkZ/nLsXQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=sitime.com; dmarc=pass action=none header.from=sitime.com; dkim=pass header.d=sitime.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=Sitime.onmicrosoft.com; s=selector1-Sitime-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=f4UDrWppe+7OAtkJeiATcSguofQd87dYPq7AY2fSsuY=; b=xD4JCLucY3KLwBIcyb6QAgSNchWhUR2oViMiKmYqSh0QyaxXTe9V1WYamLg3u8MqZy7R+eXnVpySYF4J6n7tOH74WOKTKEedxRoUXoLPBz/W/JtqhqZC1bpQW9cSZg15XdVXan9rD4QjLWoUUl86xseviPvrtZxP7G4T8cIjzueh+9Ru176f6mqqRZZ7obWRkfiFPDmICDCnbnkglURcbhUUwo6+pgrW3aMs6zpXLRLVwu7+WvRwTcBvdQ/d5L5eCt4w7LS9EMF9EHFI/StoU/Or0lpuRdRmhifrXQlrHqh1evxooSlQ/97ZWJnDNqjXGHlF9bSQm/WKdzvJ9XxHVw== Received: from LVWPR20MB994915.namprd20.prod.outlook.com (2603:10b6:408:3bf::16) by IA3PR20MB995299.namprd20.prod.outlook.com (2603:10b6:208:623::15) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.522.14; Fri, 16 Oct 2026 00:58:27 +0000 Received: from LVWPR20MB994915.namprd20.prod.outlook.com ([fe80::9551:3864:128b:8c01]) by LVWPR20MB994915.namprd20.prod.outlook.com ([fe80::9551:3864:128b:8c01%4]) with mapi id 15.21.0522.013; Fri, 16 Oct 2026 00:58:27 +0000 From: Ali Rouhi To: "jiri@resnulli.us" CC: "vadim.fedorenko@linux.dev" , "arkadiusz.kubalewski@intel.com" , "ivecera@redhat.com" , "kuba@kernel.org" , "pabeni@redhat.com" , "robh@kernel.org" , "krzk+dt@kernel.org" , "conor+dt@kernel.org" , "prabhakar.mahadev-lad.rj@bp.renesas.com" , "cjubran@nvidia.com" , "Oleg.Zadorozhnyi@devoxsoftware.com" , "devicetree@vger.kernel.org" , "netdev@vger.kernel.org" , "linux-kernel@vger.kernel.org" Subject: [PATCH net-next v14 06/12] dpll: sit9531x: implement input pin state on a DPLL Thread-Topic: [PATCH net-next v14 06/12] dpll: sit9531x: implement input pin state on a DPLL Thread-Index: AQHdXQl02hfl2ZBbtkKvH18bBuci9g== Date: Fri, 16 Oct 2026 00:58:27 +0000 Message-ID: <20261016005823.13690-7-arouhi@sitime.com> References: <20261016005823.13690-1-arouhi@sitime.com> In-Reply-To: <20261016005823.13690-1-arouhi@sitime.com> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: authentication-results: mx.microsoft.com 1; dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=sitime.com; x-ms-publictraffictype: Email x-ms-traffictypediagnostic: LVWPR20MB994915:EE_|IA3PR20MB995299:EE_ x-ms-office365-filtering-correlation-id: cf921aa3-a827-44f4-bbb7-08df2b2096bf x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0;ARA:13230040|376014|23010399003|1800799024|366016|6133799003|10067099003|18002099003|22082099003|3023799007|5023799004|261009223027099003|261009221227099003|38070700021|56012099006; x-microsoft-antispam-message-info: yGPYVUyxCHnN5QtdL5mJSfSzrDFnxNXnuEnq1AjgLs6OZwjI7pZI90S/r7EhY2ZUbMrYUSNHmKcXo0xKZTdTNpFOJf3UCo3WHHkgzBZOCUJG18fySBfkusnS7DmU/kjk5xTSNg/1lxFMn7M8R4i/VYWFRK2I3pl7igiW/bJfrF25a3xv5NyDPzBVngbXiFrEGq91seM10lhvaRL8Gd6FHYpNrVqwmquzTBN0ttPqAbsoSFyHv5Bs1QrgZEjNTmiXPJltFp0QmBKUz6tB/QShMTppH0F9VxglR8Ex0Uwqy1MltrHIcPeabpudWAXNgMuWr1LrTdTdLeoDEBsAC0Ssq0xNmKa+rbqm/2or5Z7wkiBoGNHwWqfCvo2hzLN8KJlGl82E+dP40CiZcip5l9ykUWygC8oT5oB6i3u7i9Scjpn7t8HxtBB9hmkAfFvXIzPiDktnin+lHP2YcmKXNUgNa7M1AUAHK1BR/Hs2lmbUwHZJZxUWcIQLVlRCoKNvDTSM4l5oSKyKOEMkn5uo5GonDOMWILeWPA4K3gPYPQFStDiEv7oTCt1MvbnnJRS5CW1fmSplYct+3Z37CMkODdZlgc4XGTJrkHtCO1TRffIqsrKFPZh34KkxMnVK9H/R8opzji7OociLiIn75oirYxOhOy/KPd1moSOWexDInJ/bhcCnNRcHGDbNzaO2jJ4cKtI3V7vstllM8CykomSqr10R2Q== x-forefront-antispam-report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:LVWPR20MB994915.namprd20.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(376014)(23010399003)(1800799024)(366016)(6133799003)(10067099003)(18002099003)(22082099003)(3023799007)(5023799004)(261009223027099003)(261009221227099003)(38070700021)(56012099006);DIR:OUT;SFP:1102; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?utf-8?B?cGZoYjdMK3l3bFBNRnVkOXRVNGFhVVIySGxtT3F3TkRmQ0Q3Z2p6Z0owd1o1?= =?utf-8?B?V0tSMEZ2cldHbWhEZzRmTS85aXdTNWkzLzdmUUc3QkMzSUlWWXcvMDJaZGha?= =?utf-8?B?QjNhcTNDZGQ4RzNvTEJXa050ejl5UHBlYVRtaDlkeVpIQUp6dWxqbm9xL0tQ?= =?utf-8?B?V25ScC9IenU4MzZoWi9ucFYwYi82QTFwNElybHl1cWVtcVU5TCtYUVFYMUlB?= =?utf-8?B?aEtxWUdRcFhuYU5EaG1mdFRxMGxIT3d6eHRxRVdQTTFRbklCekNibkI3R3RS?= =?utf-8?B?bkZ3SFlNT3h5ODZ5dzZoNGYydG83Ujd3SUhuNkVadTVEdVNJeTZQeXJwbVRI?= =?utf-8?B?UUMyZDZIK3VYSWVlemFVcmpwRGdHS1pSN0syM2VURFBnZFVUcWZzS3U5QWJU?= =?utf-8?B?cHBFci9XZ2J6ZDlaZXNUbzgxMDZlYjd1Rlk5OVhHQU5Lb3JoSDE4VThzRENX?= =?utf-8?B?OFFtS0M2YnhvV0VZVThVZnlpbVNucXByUjNDdjZSbDFxeVZ2c1NaRWdKN2No?= =?utf-8?B?cFJYQldUQTlJN1BTNEZNcVNLaXhNZ2VHVzc2VmRuN1Q0d1hyNUlXdjV2VGFj?= =?utf-8?B?TEt4TFRTdWI5QnNQeXBOYlllaDBiNEdkZXY5VzE4cUorcWdmZmVGa3pBZDJM?= =?utf-8?B?eTl6TFhmeUFVSUFQWlRHVDExM1lWT1RnOHNnQ1BnUGE0S1cyK2dXTFd2Rk1Y?= =?utf-8?B?REY4YW16Vi8wTUprNFg5d0JNdFVUcmJEUHBhRmFRVi9JNUhhU3dGZlpzK3Zk?= =?utf-8?B?OTRhVGhTMnk3ZUFlWDA2M0M2eUk3Y1JxcHB3WVh2MndTeGJ6SzJlajljbk90?= =?utf-8?B?RXdxZUdpYUdTdWIyS25CazFFSkRoMy9Cc0hvWUJvTFFkMEpGc1RWaTQ5UXU1?= =?utf-8?B?QlB1MXdaWEYwc1R3VURNMy9IMTBGWmh4NnNLL3Eyczk1YXFyQk1XbTc0eURn?= =?utf-8?B?dHBFWXNTV3ZLOEZ4ZldrQWo5NVBpUkhJU0t6UVZlU1E0RGVndTh3Z05vekJZ?= =?utf-8?B?dUI3Ri9JYkIvSWtnWm5EdWszb2NXUmtCbVZFK3NtSXdsMUltcmtsL3JVY1Jj?= =?utf-8?B?amdWdEwzNnExbXZEalZabVNmbU55alAxTTRUSEt1OVdhN3BsSjhFdEw5a3Yy?= =?utf-8?B?UDdpVU9uQzF5b25EVU41ZUZ4WXZ5ZWtYdlpyNE1uUURJTWtEcUZZNjhaeXVE?= =?utf-8?B?WHBtN3g1TSs3dFNKYms5NTQ3KzFKc0hsYjF2Y0lWU3B0dlZFN2Z5cUw1NnVQ?= =?utf-8?B?ZFcyNXcydzZMcUZrdlhadVRyNkt2VFo4UVpZOUZzZmVmRFpHQk9wckVGcEhB?= =?utf-8?B?R0MwN3pPcFdaYnFRa0szL2NJdWR2VXJNYXA2MXc2RklyL2hZVjBENkptRXo4?= =?utf-8?B?R1FTTGxKbUtWS3ZWVkJYYkE2UWZsNGJGZWdpeEEyeFQ0NXk0bjBaY3pBOEk2?= =?utf-8?B?WENGamQwS1FrZitMWlNIaU40dlpURTl6UzV2OFJ3ekZwSis0dHBSN0FPVi9r?= =?utf-8?B?ZUZYZGpJVjFGY09ITlZqQy9JMzNSQ3hEUCs1RjdibE04UXc5R1JicE94c0Rp?= =?utf-8?B?c01pUitWcFNKVExLam1panVsK0ZxRjg2ajNYbWNxZk1XKzgzZmJEL3dSNW9r?= =?utf-8?B?NTFwZ3RBTFFHNzE5WTY3eWZLQ01FaUp3RlBJSWRkVTMyMUpDZk1WcFFFdHRR?= =?utf-8?B?bmNYWnhWMS9BK0dTbXZvRHpZMy9IaXg2Vmd0VWdOcHM1UWpvKzZneWt2dkI2?= =?utf-8?B?dCtqV2VHb1gxNU0vd3F4bk04YkRJbzlVNFF3WkJhVzBzdVpRcE84OVhMcEgx?= =?utf-8?B?VlZkWlJGWE5CU2xteUE1OXE5SytWb3FxV0NYKy94a0YxUGhSdXYveXl6MDJN?= =?utf-8?B?eUhqZzV2c2VUSktaVjFPYTFPWUZodkFzMXoxbzk2clFnRDEwVjUxYmNOZlYy?= =?utf-8?B?UGVveS9PRDR3YjEvYUpwVXErTjA2TWxmYzNQdFM5V3d1Wng2Y1BSRTlsYzdT?= =?utf-8?B?VWlSZm1nOWtwTFJuV2VqdW40N3FQR09ZSGh3Ym9MTFl5MXh1dWUxdWppOE85?= =?utf-8?B?OFFuN0xBUW81a3NTc0ZMd1dXZkFlRmMzbnFCTGFBeWxKSFBYZkdwMEdxV0p4?= =?utf-8?B?UDlNUDRmSm4vd0o4cTdST0RvRmhURk9mR2FHWm9YTmFvV0Z0SmxMSUlJSnph?= =?utf-8?B?ZmsxZHdRYUZTYmFabEpTNmZ3SG1JcENYcnYyclZLT3h0blJHcUJtUXpZWWtS?= =?utf-8?B?bFZIdTRZcXVMYzhGYXMwSERERFdtL2xCd0JTZDBXYTFyY3R1REc3bHpyRkhF?= =?utf-8?Q?Kc29yAtudgwzev9+nb?= Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Precedence: bulk X-Mailing-List: devicetree@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-Exchange-RoutingPolicyChecked: v72AbFLTVEZpzi5jIOjl1sewXADgcfvsMpzePIGqljjb3Id0z7X4Om0YoZdCzgCsUpeZtFsQIKDNI3bqfVJKNx+yE4zRAHFz0dBF9aEivx/0aISapEKof+JqqQT3Vm2LkxgkajIsUK74nFDhDwS1QaYO9+kwzStu2S4pijo9pg70riU1r0kKpvMH18Dz+7u1YXORQPc+wMfFWO9ckrdV/RwCWY+o97tNRXVmG4NwTESWbRVCDk5UAmYq6Ss47oBzMF3X8N9djpGpq5uCwJIkD3DsmYboNVTaiG855lWjh/Gk3+LfSQlhS6iliXiJLht2y7oliQx3koBylgEqtAAYzg== X-OriginatorOrg: sitime.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: LVWPR20MB994915.namprd20.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: cf921aa3-a827-44f4-bbb7-08df2b2096bf X-MS-Exchange-CrossTenant-originalarrivaltime: 16 Oct 2026 00:58:27.7634 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 8fb55916-cf10-4b0d-96f4-cf3952657263 X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: /jWFUISnrS/+zIeVWdjcXpRTkBR8KySjAKxrUeGiv0pvFp2Nn9Hcl+lnQtWgROpvGhDgadXhNTwFo79U+IG/vw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: IA3PR20MB995299 X-MDID: 1792112313-wOIq2TmRtRcX X-PPE-STACK: {"stack":"us1"} X-MDID-O: us1;at1;1792112313;wOIq2TmRtRcX;;ba04557de9d2da8490f5f1e6de07b967 X-PPE-TRUSTED: V=1;DIR=OUT; RnJvbTogT2xlZyBaYWRvcm96aG55aSA8T2xlZy5aYWRvcm96aG55aUBkZXZveHNvZnR3YXJlLmNv bT4KClJlcG9ydCBhbmQgc2V0IHdoZXRoZXIgYW4gaW5wdXQgdGFrZXMgcGFydCBpbiBhIFBMTCdz IHJlZmVyZW5jZQpzZWxlY3Rpb24uICBUaGUgZGV2aWNlIHNlbGVjdHMgaXRzIHJlZmVyZW5jZSBp dHNlbGYgZnJvbSBhIHByaW9yaXR5CnRhYmxlLCBzbyBtZW1iZXJzaGlwIG9mIHRoYXQgdGFibGUg aXMgd2hhdCB0aGUgc3RhdGUgbWVhbnMgaGVyZTogYW4gaW5wdXQKaW4gdGhlIHRhYmxlIGlzIHNl bGVjdGFibGUsIG9uZSBhYnNlbnQgZnJvbSBpdCBpcyBkaXNjb25uZWN0ZWQuICBTZXR0aW5nCnRo ZSBzdGF0ZSBhZGRzIHRoZSBpbnB1dCB0byB0aGUgdGFibGUgb3IgcmVtb3ZlcyBpdCwgYW5kIG1l bWJlcnNoaXAgaXMKcmVhZCBiYWNrIGZyb20gdGhlIGRldmljZSByYXRoZXIgdGhhbiByZW1lbWJl cmVkLiAgQ09OTkVDVEVEIHdvdWxkIGFzawpmb3IgdGhpcyBpbnB1dCBhbmQgbm8gb3RoZXIsIHdo aWNoIHRoZSBkZXZpY2UgY2Fubm90IGJlIHRvbGQgdG8gZG8sIHNvIGl0CmlzIHJlZnVzZWQuICBB IHBoeXNpY2FsIGlucHV0J3MgcmVjZWl2ZXIgaXMgc2hhcmVkIGJ5IHRoZSBmb3VyIFBMTHMgYW5k IGlzCnBvd2VyZWQgZG93biBvbmx5IHdoZW4gdGhlIGxhc3Qgb2YgdGhlbSBsZXRzIGdvIG9mIGl0 LgoKV2hhdCB0aGUgZGV2aWNlIGRvZXMgd2l0aCBhbiBpbnB1dCBpcyBpdHMgb3BlcmF0aW9uYWwg c3RhdGUuICBUaGUgcGluCnJlcG9ydGVkIGFjdGl2ZSBpcyB0aGUgb25lIHRoZSBkZXZpY2Ugc2F5 cyBpdCBmZWVkcyB0aGUgUExMLCByZWFkIGZyb20KdGhlIFBMTCdzIGRlYnVnIHN0YXR1cyBidXMs IHdoaWxlIHRoZSBQTEwgaXMgbG9ja2VkIHRvIGl0IC0tIG91dGVyIGxvb3AKcnVubmluZywgbm90 IGZyb3plbiAtLSBhbmQgaXRzIGxhbmUgaGFzIHNpZ25hbC4gIEl0IGlzIG5vdCB0aGUgYWN0aXZl CnNlbGVjdGlvbjogdGhhdCBuYW1lcyB0aGUgc291cmNlIHRoZSBkcml2ZXIgYXNrZWQgZm9yLCBh bmQgd2hlbiB0aGF0CnNvdXJjZSBsb3NlcyBpdHMgc2lnbmFsIHRoZSBkZXZpY2UgZmFsbHMgYmFj ayB0byBhbm90aGVyIGxpc3RlZCBzb3VyY2UKb24gaXRzIG93biBhbmQgbGVhdmVzIHRoZSBzZWxl Y3Rpb24gbmFtaW5nIHRoZSBkZWFkIG9uZSwgc28gYWZ0ZXIgc3VjaCBhCmZhaWxvdmVyIHRoZSBw aW4gdGhlIFBMTCBtb3ZlZCB0byByZXBvcnRzIGFjdGl2ZSBhbmQgdGhlIG9uZSBpdCBsZWZ0CmRv ZXMgbm90LiAgVGhlIHN0YXR1cyBidXMgbmFtZXMgd2hhdCBpcyBmZWQgdG8gdGhlIFBMTCwgbm90 IHdoYXQgdGhlIFBMTAppcyBsb2NrZWQgdG8sIHNvIHRoZSBsYW5lJ3MgbW9uaXRvciBoYXMgdG8g YWdyZWUuICBJdCBpcyByZWFkIG9ubHkgd2hpbGUKdGhlIFBMTCB0cmFja3MgYSByZWZlcmVuY2Us IHNpeCB0cmFuc2ZlcnMgcGVyIHN1Y2ggUExMIHBlciB0aWNrOyBpbgpmcmVlLXJ1biB0aGUgUExM IGlzIGZlZCBub3RoaW5nLiAgVGhlIHBvbGwgcmVhZHMgZXZlcnkgbGFuZSdzIGNsb2NrCm1vbml0 b3I6IGFuIGlucHV0IHdob3NlIG1vbml0b3IgcmVwb3J0cyBsb3NzIG9mIHNpZ25hbCBpcyBuby1z aWduYWwsIG9uZQp0aGF0IHJlcG9ydHMgYSBmcmVxdWVuY3kgZHJpZnQgaXMgcXVhbC1mYWlsZWQs IGFueSBvdGhlciBpcyBzdGFuZGJ5LgoKVGhlIHRhYmxlIGlzIGJ1aWx0IGZyb20gYSBwcmlvcml0 eSB0aGUgZHJpdmVyIGtlZXBzIHBlciBzb3VyY2UgYW5kIFBMTCwKc2VlZGVkIGZyb20gdGhlIHRh YmxlIHRoZSBkZXZpY2UgbG9hZGVkOiBtZW1iZXJzIGluIHByaW9yaXR5IG9yZGVyLCB0aGUKc2xv dHMgcGFzdCB0aGUgbGFzdCBvbmUgbmFtaW5nIG5vIHNvdXJjZS4gIFRoZSBmb3VyLWJpdCBzbG90 IGVuY29kaW5nCmhhcyB0d28gY29kZXMgZm9yIGEgZmlmdGggaW5wdXQgcGFpciB0aGlzIHBhcnQg ZG9lcyBub3QgaGF2ZSwgYW5kIG9uZSBvZgp0aGVtIHNlcnZlcyBhcyB0aGF0LiAgQSBkaXNjb25u ZWN0ZWQgaW5wdXQga2VlcHMgaXRzIHByaW9yaXR5IGZvciB3aGVuIGl0CmNvbWVzIGJhY2ssIGFu ZCBhIHRhYmxlIHRoYXQgd291bGQgY29tZSBvdXQgYXMgdGhlIGRldmljZSBhbHJlYWR5IGhvbGRz Cml0IGlzIG5vdCB3cml0dGVuLgoKVGhlIGxhc3QgcmVnaXN0ZXIgb2YgdGhlIHRhYmxlIGFsc28g Y2FycmllcyB0aGUgZGV2aWNlJ3MgYWN0aXZlCnNlbGVjdGlvbi4gIEFmdGVyIGEgdGFibGUgd3Jp dGUgdGhlIFBMTCBnb2VzIHRvIHRoZSBzb3VyY2UgaXQgbmFtZXMsIGFuZApsZWF2ZXMgaXQgb24g aXRzIG93biBvbmx5IHdoZW4gdGhhdCBzb3VyY2UgbG9zZXMgaXRzIHNpZ25hbCwgc28gZXZlcnkK d3JpdGUgbmFtZXMgYSBzb3VyY2UgdGhlIFBMTCBjYW4gdXNlLiAgV2hlbiB0aGUgcHJpb3JpdGll cyBwdXQgYQpkaWZmZXJlbnQgc291cmNlIHdpdGggc2lnbmFsIGZpcnN0LCB0aGUgc2VsZWN0aW9u IGdvZXMgdG8gaXQgLS0gdGhlCmhpZ2hlc3QtcHJpb3JpdHkgdmFsaWQgaW5wdXQsIHdoaWNoIGlz IGhvdyB0aGUgRFBMTCBpbnRlcmZhY2UgZGVmaW5lcwphdXRvbWF0aWMgbW9kZS4gIEEgd3JpdGUg dGhhdCBvbmx5IGNoYW5nZXMgdGhlIHRhYmxlIGJlbG93IHRoYXQgc291cmNlCmxlYXZlcyB0aGUg c2VsZWN0aW9uIHdoZXJlIGl0IGlzIHdoaWxlIGl0IGlzIHN0aWxsIGxpc3RlZCBhbmQgaGFzCnNp Z25hbCwgc28gYW4gZWRpdCB0aGVyZSBkb2VzIG5vdCBwdWxsIGEgUExMIG9mZiBhIGhlYWx0aHkg cmVmZXJlbmNlOwpmYWlsaW5nIHRoYXQsIGl0IGdvZXMgdG8gdGhlIGZpcnN0IGxpc3RlZCBzb3Vy Y2UgdGhhdCBoYXMgc2lnbmFsLgoKUmVtb3ZpbmcgdGhlIGxhc3QgaW5wdXQgaXMgYWxsb3dlZC4g IFRoZSBzZWxlY3Rpb24gdGhlbiBoYXMgbm90aGluZyB0bwpuYW1lLCBhbmQgbGVmdCBhcyBpdCBp cyBpdCB3b3VsZCBrZWVwIHRoZSBQTEwgZm9sbG93aW5nIGl0cyBvbGQgc291cmNlCmZvciBhcyBs b25nIGFzIHRoYXQgaGFzIHNpZ25hbCwgc28gdGhlIFBMTCBzdGF5cyBpbiB0aGUgZm9yY2VkIGhv bGRvdmVyCnRoZSB3cml0ZSBzZXF1ZW5jZSB1c2VzIC0tIHRoZSBvbmUgc3RhdGUgaW4gd2hpY2gg aXQgZm9sbG93cyBubyBpbnB1dC4KVGhlIG5leHQgd3JpdGUgdGhhdCBsaXN0cyBhIHNvdXJjZSBy ZWxlYXNlcyBpdC4gIEEgaG9sZG92ZXIgdGhlIGRyaXZlcgpkaWQgbm90IGZvcmNlIC0tIHNldCBi eSB0aGUgbG9hZGVkIGNvbmZpZ3VyYXRpb24gb3IgYnkgYSB0b29sIC0tIGlzIGxlZnQKaW4gcGxh Y2UgYnkgc3VjaCBhIHdyaXRlOyBvbmx5IHRoZSBob2xkIHRoZSBkcml2ZXIgaXRzZWxmIHNldCBm b3IgYW4KZW1wdHkgdGFibGUgaXMgcmVsZWFzZWQuCgpUaGUgcGlucyBmYWxsIGludG8gdGhyZWUg cm9sZXMgYW5kIG9ubHkgdGhlIGZpcnN0IGFuc3dlcnMgdGhpcyBxdWVzdGlvbiwKc28gdGhlIGNv bnRyYWN0IGZvciBhbGwgb2YgdGhlbSBpcyB3cml0dGVuIGFib3ZlIHRoZSBvcGVyYXRpb25zIHJh dGhlcgp0aGFuIGxlZnQgdG8gYmUgaW5mZXJyZWQ6IGlucHV0cyBhbmQgdGhlIGludGVyLVBMTCBz eW5jIGRlc3RpbmF0aW9uIHRha2UKcGFydCBpbiBzZWxlY3Rpb247IGFuIG91dHB1dCBhbmQgdGhl IHN5bmMgc291cmNlIGFyZSBkcml2ZW4gYnkgdGhlIFBMTCBhbmQKcmVwb3J0IHdoZXRoZXIgdGhl eSBjYXJyeSBhIHNpZ25hbDsgdGhlIGNyeXN0YWwgaXMgZml4ZWQgYW5kIGFsd2F5cwpjb25uZWN0 ZWQsIHNpbmNlIGEgUExMIGNhbm5vdCBiZSB0b2xkIHRvIHN0b3AgdXNpbmcgaXQuCgpQcm9iZSBh bHNvIHdhcm5zIGFib3V0IGEgZmlybXdhcmUgcGluIG5vZGUgd2hvc2UgcmVnIG5hbWVzIG5vIHBp biB0aGUKZGV2aWNlIGNhbiBoYXZlIC0tIGEgbGFuZSBvciBhbiBvdXRwdXQgdGhlIHZhcmlhbnQg bGFja3MsIG9yIHRoZSBOIGxhbmUKb2YgYSBwYWlyIHRoZSBjb25maWd1cmF0aW9uIHJ1bnMgZGlm ZmVyZW50aWFsIC0tIHNpbmNlIG5vZGVzIGFyZSBsb29rZWQKdXAgZnJvbSB0aGUgcGlucyBhbmQg c3VjaCBhIG5vZGUgd291bGQgb3RoZXJ3aXNlIGJlIGRyb3BwZWQgc2lsZW50bHkuCgpSZXdyaXRp bmcgdGhlIHRhYmxlIG1lYW5zIGZvcmNpbmcgdGhlIFBMTCBpbnRvIGhvbGRvdmVyLCB3YWl0aW5n IGZvciBpdCB0bwp0YWtlLCB3cml0aW5nIGV2ZXJ5IHNsb3QgYW5kIHJlbGVhc2luZyBob2xkb3Zl ciBhZ2FpbiwgYWxsIHVuZGVyIHRoZQpkZXZpY2UgbG9jayAtLSB0ZW4gdG8gdHdlbnR5IG1pbGxp c2Vjb25kcy4gIFRoZSBkZXZpY2UgaGFzIG5vIHdheSB0bwpjaGFuZ2Ugb25lIHNsb3QgaW4gaXNv bGF0aW9uLCBhbmQgaG9sZG92ZXIgaXMgd2hhdCBrZWVwcyB0aGUgbG9vcCBmcm9tCmNoYXNpbmcg YSB0YWJsZSB0aGF0IGlzIG1vbWVudGFyaWx5IGluY29uc2lzdGVudCwgc28gdGhlIHNlcXVlbmNl IGlzIHRoZQpjb3N0IG9mIGRvaW5nIGl0IGNvcnJlY3RseS4gIEl0cyBlcnJvciBwYXRocyBsZWF2 ZSB0aGUgZGV2aWNlIHdoZXJlIHRoZQpyZXF1ZXN0IGZvdW5kIGl0OiBhIGZhaWxlZCB3cml0ZSBp cyByb2xsZWQgYmFjayB0aHJvdWdoIHRoZSByZWdpc3Rlcgp0aGF0IGZhaWxlZCwgYSBmb3JjZSB0 aGF0IGZhaWxlZCBpcyByZWxlYXNlZCBhbGwgdGhlIHNhbWUgc2luY2UgdGhlCndyaXRlIG1heSBo YXZlIGxhbmRlZCwgdGhlIGhvbGQgc3RheXMgd2hlbiB0aGUgdGFibGUgdGhlIGRldmljZSBob2xk cwphZnRlcndhcmRzIGxpc3RzIG5vIHNvdXJjZSwgYW5kIHRoZSBzZWxlY3Rpb24gaXMgbmV2ZXIg cGlja2VkIGZyb20gYQptb25pdG9yIHJlYWQgdGhhdCBmYWlsZWQuICBBIHJlbGVhc2UgdGhhdCBm YWlscyBhZnRlciB0aGUgdGFibGUgd2FzCndyaXR0ZW4gYW5kIGxhdGNoZWQgaXMgb3dlZCwgYW5k IHRoZSBwb2xsIHJldHJpZXMgaXQgdW50aWwgaXQgbGFuZHMuCkEgaG9sZCB3aXRoIG5vIHNvdXJj ZSBsaXN0ZWQgYW5kIG5vIHZhbGlkIGhvbGRvdmVyIG1lbW9yeSByZXBvcnRzIHRoZQpQTEwgdW5s b2NrZWQsIGFzIHRoZSBpbnRlcmZhY2UgYXNrcywgcmF0aGVyIHRoYW4gaW4gaG9sZG92ZXIuCgpT aWduZWQtb2ZmLWJ5OiBPbGVnIFphZG9yb3pobnlpIDxPbGVnLlphZG9yb3pobnlpQGRldm94c29m dHdhcmUuY29tPgpBc3Npc3RlZC1ieTogTExNClNpZ25lZC1vZmYtYnk6IEFsaSBSb3VoaSA8YXJv dWhpQHNpdGltZS5jb20+ClJldmlld2VkLWJ5OiBJdmFuIFZlY2VyYSA8aXZlY2VyYUByZWRoYXQu Y29tPgotLS0KIGRyaXZlcnMvZHBsbC9zaXQ5NTMxeC9jb3JlLmMgfCAxMTMxICsrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrLS0KIGRyaXZlcnMvZHBsbC9zaXQ5NTMxeC9jb3JlLmggfCAg IDQyICstCiBkcml2ZXJzL2RwbGwvc2l0OTUzMXgvZHBsbC5jIHwgIDMyMCArKysrKysrKystCiBk cml2ZXJzL2RwbGwvc2l0OTUzMXgvcmVncy5oIHwgICA0MSArKwogNCBmaWxlcyBjaGFuZ2VkLCAx NDcyIGluc2VydGlvbnMoKyksIDYyIGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL2RyaXZlcnMv ZHBsbC9zaXQ5NTMxeC9jb3JlLmMgYi9kcml2ZXJzL2RwbGwvc2l0OTUzMXgvY29yZS5jCmluZGV4 IDc4YTdhMWRlZjIxMy4uMWFhZDU5ODkzMGQ3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2RwbGwvc2l0 OTUzMXgvY29yZS5jCisrKyBiL2RyaXZlcnMvZHBsbC9zaXQ5NTMxeC9jb3JlLmMKQEAgLTIzOSw2 ICsyMzksOTkgQEAgc3RhdGljIHZvaWQgc2l0OTUzMXhfaW5wdXRfZ2V0X3JlZ3MoY29uc3Qgc3Ry dWN0IHNpdDk1MzF4X2RldiAqc2l0ZGV2LAogCX0KIH0KIAorLyoKKyAqIHNpdDk1MzF4X2lucHV0 X2Rpc2FibGUgLSBkaXNhYmxlIGFuIGlucHV0IHJlZmVyZW5jZQorICogQGluZGV4Oglsb2dpY2Fs IGlucHV0IGluZGV4ICgwLU4pCisgKgorICogU2V0cyB0aGUgZm9yY2UgbWFzayBiaXQgYW5kIGNs ZWFycyB0aGUgc3RhdGUgYml0IGZvciB0aGUgZ2l2ZW4KKyAqIGlucHV0LCBlZmZlY3RpdmVseSBk aXNhYmxpbmcgaXQuICBSZWdpc3RlciBzZWxlY3Rpb24gZGVwZW5kcyBvbgorICogdGhlIHBhaXIn cyBzaWduYWwgbW9kZSAoU0UvREUpIGFuZCB0aGUgbGFuZSAoUC9OKTsgdGhlIGJpdCB3aXRoaW4K KyAqIGVhY2ggcmVnaXN0ZXIgYWRkcmVzc2VzIHRoZSBpbnB1dCBwYWlyLgorICoKKyAqIEJvdGgg d3JpdGVzIGFyZSBhdHRlbXB0ZWQgZXZlbiB3aGVuIHRoZSBmaXJzdCBmYWlscywgYW5kIHRoZSBm aXJzdAorICogZXJyb3IgaXMgcmV0dXJuZWQuICBOZWl0aGVyIGlzIHJvbGxlZCBiYWNrOiB0aGUg Zm9yY2UgYW5kIHN0YXRlIGJpdHMKKyAqIG9ubHkgbWVhbiBzb21ldGhpbmcgdG9nZXRoZXIsIHNv IGEgdHJhbnNpZW50IGJ1cyBlcnJvciBjYW4gbGVhdmUgdGhlCisgKiBmb3JjZSBiaXQgYXNzZXJ0 ZWQgb3ZlciBhIHN0YXRlIGJpdCB0aGF0IHdhcyBuZXZlciBwcm9ncmFtbWVkLCBhbmQgdGhlCisg KiBlcnJvciBpcyB3aGF0IHNheXMgdGhlIG92ZXJyaWRlIGlzIG5vdCB0byBiZSB0cnVzdGVkLgor ICoKKyAqIENhbGxlciBtdXN0IGhvbGQgc2l0ZGV2LT5tdWx0aW9wX2xvY2suCisgKi8KK2ludCBz aXQ5NTMxeF9pbnB1dF9kaXNhYmxlKHN0cnVjdCBzaXQ5NTMxeF9kZXYgKnNpdGRldiwgdTggaW5k ZXgpCit7CisJdW5zaWduZWQgaW50IGZvcmNlX3JlZywgc3RhdGVfcmVnOworCXN0cnVjdCBzaXQ5 NTMxeF9yZWYgKnJlZjsKKwl1OCBwYWlyLCB2YWw7CisJaW50IHJjLCByZXQ7CisKKwlsb2NrZGVw X2Fzc2VydF9oZWxkKCZzaXRkZXYtPm11bHRpb3BfbG9jayk7CisKKwlpZiAoaW5kZXggPj0gU0lU OTUzMVhfTUFYX0lOUFVUUykKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlyZWYgPSAmc2l0ZGV2LT5y ZWZbaW5kZXhdOworCXBhaXIgPSBzaXQ5NTMxeF9pbnB1dF9wYWlyKGluZGV4KTsKKwlzaXQ5NTMx eF9pbnB1dF9nZXRfcmVncyhzaXRkZXYsIGluZGV4LCAmZm9yY2VfcmVnLCAmc3RhdGVfcmVnKTsK KworCXJjID0gc2l0OTUzMXhfcmVhZF91OChzaXRkZXYsIGZvcmNlX3JlZywgJnZhbCk7CisJaWYg KCFyYykKKwkJcmMgPSBzaXQ5NTMxeF93cml0ZV91OChzaXRkZXYsIGZvcmNlX3JlZywgdmFsIHwg QklUKHBhaXIpKTsKKworCXJldCA9IHNpdDk1MzF4X3JlYWRfdTgoc2l0ZGV2LCBzdGF0ZV9yZWcs ICZ2YWwpOworCWlmICghcmV0KQorCQlyZXQgPSBzaXQ5NTMxeF93cml0ZV91OChzaXRkZXYsIHN0 YXRlX3JlZywgdmFsICYgfkJJVChwYWlyKSk7CisJaWYgKHJldCAmJiAhcmMpCisJCXJjID0gcmV0 OworCisJLyoKKwkgKiBEcm9wIHRoZSBjbGFpbSBldmVuIHdoZW4gdGhlIHBhaXIgY291bGQgbm90 IGJlIHByb2dyYW1tZWQuICBUaGUKKwkgKiBmb3JjZSBiaXQgbWF5IGJlIGFzc2VydGVkIG92ZXIg YSBzdGF0ZSBiaXQgdGhhdCBuZXZlciByZWFjaGVkIHRoZQorCSAqIGRldmljZSwgc28gdGhlIHJl Y2VpdmVyIGNhbm5vdCBiZSByZWxpZWQgb247IGxlYXZpbmcgdGhlIGNhY2hlCisJICogc2F5aW5n IGl0IGlzIG9uIG1ha2VzIHRoZSBuZXh0IGVuYWJsZSBza2lwIGl0c2VsZiBhbmQgcmVwb3J0IGEK KwkgKiBzdWNjZXNzIHRoZSBzaWduYWwgZG9lcyBub3QgYmFjay4gIENsZWFyaW5nIHRoZSBmb3Jj ZSBiaXQgYWdhaW4KKwkgKiBpcyBoYXJtbGVzcywgc28gdGhlIHdvcnN0IHRoaXMgY29zdHMgaXMg b25lIHJlZHVuZGFudCB3cml0ZS4KKwkgKi8KKwlyZWYtPmVuYWJsZWQgPSBmYWxzZTsKKworCXJl dHVybiByYzsKK30KKworLyoKKyAqIHNpdDk1MzF4X2lucHV0X2VuYWJsZSAtIGVuYWJsZSBhbiBp bnB1dCByZWZlcmVuY2UKKyAqIEBpbmRleDoJbG9naWNhbCBpbnB1dCBpbmRleCAoMC1OKQorICoK KyAqIENsZWFycyB0aGUgZm9yY2UgbWFzayBiaXQgZm9yIHRoZSBnaXZlbiBpbnB1dCwgcmV0dXJu aW5nIGl0IHRvCisgKiBoYXJkd2FyZSBkZWZhdWx0IChlbmFibGVkKS4KKyAqCisgKiBDYWxsZXIg bXVzdCBob2xkIHNpdGRldi0+bXVsdGlvcF9sb2NrLgorICovCitpbnQgc2l0OTUzMXhfaW5wdXRf ZW5hYmxlKHN0cnVjdCBzaXQ5NTMxeF9kZXYgKnNpdGRldiwgdTggaW5kZXgpCit7CisJdW5zaWdu ZWQgaW50IGZvcmNlX3JlZywgc3RhdGVfcmVnOworCXN0cnVjdCBzaXQ5NTMxeF9yZWYgKnJlZjsK Kwl1OCBwYWlyLCB2YWw7CisJaW50IHJjOworCisJbG9ja2RlcF9hc3NlcnRfaGVsZCgmc2l0ZGV2 LT5tdWx0aW9wX2xvY2spOworCisJaWYgKGluZGV4ID49IFNJVDk1MzFYX01BWF9JTlBVVFMpCisJ CXJldHVybiAtRUlOVkFMOworCisJcmVmID0gJnNpdGRldi0+cmVmW2luZGV4XTsKKwlwYWlyID0g c2l0OTUzMXhfaW5wdXRfcGFpcihpbmRleCk7CisJc2l0OTUzMXhfaW5wdXRfZ2V0X3JlZ3Moc2l0 ZGV2LCBpbmRleCwgJmZvcmNlX3JlZywgJnN0YXRlX3JlZyk7CisKKwlyYyA9IHNpdDk1MzF4X3Jl YWRfdTgoc2l0ZGV2LCBmb3JjZV9yZWcsICZ2YWwpOworCWlmIChyYykKKwkJcmV0dXJuIHJjOwor CXJjID0gc2l0OTUzMXhfd3JpdGVfdTgoc2l0ZGV2LCBmb3JjZV9yZWcsIHZhbCAmIH5CSVQocGFp cikpOworCWlmIChyYykKKwkJcmV0dXJuIHJjOworCisJcmVmLT5lbmFibGVkID0gdHJ1ZTsKKwor CXJldHVybiAwOworfQorCiAvKgogICogT3V0cHV0IGVuYWJsZSAvIGRpc2FibGUgKEhpLVogY29u dHJvbCkKICAqCkBAIC00MDYsNyArNDk5LDggQEAgc3RhdGljIGludCBzaXQ5NTMxeF9vdXRwdXRf Zm9yY2VkX2hpeihzdHJ1Y3Qgc2l0OTUzMXhfZGV2ICpzaXRkZXYsCiAgKiAgIDEuIEZvcmNlIFBM TCBpbnRvIGhvbGRvdmVyIChQTEwgcGFnZSByZWcgMHg2RiBiaXQgNCkKICAqICAgMi4gV3JpdGUg cHJpb3JpdHkgc2xvdHMgb24gUGFnZSAxCiAgKiAgIDMuIFNtYWxsIGNoYW5nZSB1cGRhdGUgKFBh Z2UgMCByZWcgMHgwRiBiaXQgMSkKLSAqICAgNC4gUmVsZWFzZSBob2xkb3ZlcgorICogICA0LiBS ZWxlYXNlIGhvbGRvdmVyLCB1bmxlc3MgaXQgd2FzIGZvcmNlZCBiZWZvcmUgc3RlcCAxIGJ5IHNv bWV0aGluZworICogICAgICBvdGhlciB0aGFuIHRoaXMgZHJpdmVyCiAgKgogICogQ2FsbGVyIG11 c3QgaG9sZCBzaXRkZXYtPm11bHRpb3BfbG9jay4KICAqLwpAQCAtNDMzLDI2ICs1MjcsNTk1IEBA IHN0YXRpYyB1OCBzaXQ5NTMxeF9wcmlvX3Nsb3RfZ2V0KHU4IHZhbCwgdTggc2xvdCkKIAlyZXR1 cm4gdmFsID4+IFNJVDk1MzFYX1BSSU9fSElfU0hJRlQ7CiB9CiAKKy8qIFBsYWNlIHNvdXJjZSBA c3JjIGluIHByaW9yaXR5IHNsb3QgQHNsb3Qgb2YgYSByZWdpc3RlciB2YWx1ZS4gKi8KK3N0YXRp YyB1OCBzaXQ5NTMxeF9wcmlvX3Nsb3Rfc2V0KHU4IHZhbCwgdTggc2xvdCwgdTggc3JjKQorewor CWlmIChzbG90ICYgMSkKKwkJcmV0dXJuICh2YWwgJiAoU0lUOTUzMVhfUFJJT19OSUJCTEVfTUFT SyA8PAorCQkJICAgICAgIFNJVDk1MzFYX1BSSU9fSElfU0hJRlQpKSB8CisJCSAgICAgICAoc3Jj ICYgU0lUOTUzMVhfUFJJT19OSUJCTEVfTUFTSyk7CisKKwlyZXR1cm4gKHZhbCAmIFNJVDk1MzFY X1BSSU9fTklCQkxFX01BU0spIHwKKwkgICAgICAgKChzcmMgJiBTSVQ5NTMxWF9QUklPX05JQkJM RV9NQVNLKSA8PAorCQlTSVQ5NTMxWF9QUklPX0hJX1NISUZUKTsKK30KKworLyoKKyAqIENvbW1p dCBhIHByaW9yaXR5LXRhYmxlIHByb2dyYW1taW5nIHNlcXVlbmNlIHRocm91Z2ggdGhlIFBhZ2Ut MAorICogcHJvZ3JhbW1pbmcgZGlyZWN0aXZlIHJlZ2lzdGVyLgorICoKKyAqIEEgc21hbGwgY2hh bmdlIHVwZGF0ZSBpcyBhbGwgdGhlIHRhYmxlIG5lZWRzLiAgVGhlIE5WTS1iYW5rIGFuZAorICog bG9vcC1sb2NrIGRpcmVjdGl2ZXMgdGhhdCB0aGUgb3V0cHV0IHN5c3RlbSBpc3N1ZXMgZG8gbm90 IGJlbG9uZworICogaGVyZTogdGhlIGZvcm1lciBwcm9ncmFtcyBub24tdm9sYXRpbGUgc3RvcmFn ZSBmcm9tIHRoZSBlZnVzZSBhbmQKKyAqIHRoZSBsYXR0ZXIgb25seSBtZWFucyBhbnl0aGluZyBh ZnRlciBhbiBlc2NhcGUgdG8gdGhlIFBSR19DTUQKKyAqIHN0YXRlLiAgVGhpcyBtYXRjaGVzIHRo ZSBkb2N1bWVudGVkIGlucHV0X3ByaW9yaXR5X3NlbCgpIHByb2NlZHVyZS4KKyAqLworc3RhdGlj IGludCBzaXQ5NTMxeF9wcmlvX3ByZ19jb21taXQoc3RydWN0IHNpdDk1MzF4X2RldiAqc2l0ZGV2 KQoreworCWludCByYzsKKworCXJjID0gc2l0OTUzMXhfd3JpdGVfdTgoc2l0ZGV2LCBTSVQ5NTMx WF9SRUdfR0xPQkFMX1VQREFURSwKKwkJCSAgICAgICBTSVQ5NTMxWF9TTUFMTF9VUERBVEVfQ01E KTsKKwlpZiAocmMpCisJCXJldHVybiByYzsKKworCXVzbGVlcF9yYW5nZSgxMDAwLCAyMDAwKTsK KworCXJldHVybiAwOworfQorCisvKgorICogc2l0OTUzMXhfaW5wdXRfbW9uX2ZldGNoIC0gcmVh ZCB0aGUgY2xvY2sgbW9uaXRvciBzdGF0dXMgb2YgZXZlcnkgbGFuZQorICoKKyAqIEZvdXIgcmVn aXN0ZXJzIGNhcnJ5IGEgbmliYmxlIHBlciBsYW5lLiAgTG9zcyBvZiBzaWduYWwgYW5kIGZyZXF1 ZW5jeQorICogZHJpZnQgYXJlIHdoYXQgc2VwYXJhdGUgYW4gaW5wdXQgdGhlIGRldmljZSBjb3Vs ZCBsb2NrIHRvIGZyb20gb25lIGl0CisgKiBjb3VsZCBub3QsIHdoaWNoIHRoZSBwcmlvcml0eSBj b21taXQgdXNlcyB0byBjaG9vc2UgdGhlIGFjdGl2ZQorICogc2VsZWN0aW9uIGFuZCB0aGUgcGlu cyByZXBvcnQgYXMgdGhlaXIgb3BlcmF0aW9uYWwgc3RhdGUuCisgKgorICogQ2FsbGVyIG11c3Qg aG9sZCBzaXRkZXYtPm11bHRpb3BfbG9jaywgb3IgcnVuIGJlZm9yZSByZWdpc3RyYXRpb24uCisg Ki8KK3N0YXRpYyBpbnQgc2l0OTUzMXhfaW5wdXRfbW9uX2ZldGNoKHN0cnVjdCBzaXQ5NTMxeF9k ZXYgKnNpdGRldikKK3sKKwlzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IHJlZ3NbXSA9IHsKKwkJ U0lUOTUzMVhfQ0xLTU9OX1BfU1RBVFVTXzAxLCBTSVQ5NTMxWF9DTEtNT05fUF9TVEFUVVNfMjMs CisJCVNJVDk1MzFYX0NMS01PTl9OX1NUQVRVU18wMSwgU0lUOTUzMVhfQ0xLTU9OX05fU1RBVFVT XzIzLAorCX07CisJdTggdmFsW0FSUkFZX1NJWkUocmVncyldLCBpLCBwYWlyLCBuaWI7CisJaW50 IHJjOworCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUocmVncyk7IGkrKykgeworCQlyYyA9 IHNpdDk1MzF4X3JlYWRfdTgoc2l0ZGV2LCByZWdzW2ldLCAmdmFsW2ldKTsKKwkJaWYgKHJjKQor CQkJcmV0dXJuIHJjOworCX0KKworCWZvciAoaSA9IDA7IGkgPCBzaXRkZXYtPmluZm8tPm51bV9p bnB1dHM7IGkrKykgeworCQlzdHJ1Y3Qgc2l0OTUzMXhfcmVmICpyZWYgPSAmc2l0ZGV2LT5yZWZb aV07CisKKwkJLyogTGFuZSAyayBpcyBJTmtQLCAyayArIDEgSU5rTjsgYSByZWdpc3RlciBob2xk cyB0d28gcGFpcnMuICovCisJCXBhaXIgPSBzaXQ5NTMxeF9pbnB1dF9wYWlyKGkpOworCQluaWIg PSB2YWxbKHNpdDk1MzF4X2lucHV0X2lzX24oaSkgPyAyIDogMCkgKyBwYWlyIC8gMl07CisJCW5p YiA9IChwYWlyICYgMSkgPyBuaWIgPj4gNCA6IG5pYiAmIDB4MEY7CisKKwkJcmVmLT5sb3MgPSAh IShuaWIgJiBTSVQ5NTMxWF9DTEtNT05fTE9TUyk7CisJCXJlZi0+cXVhbF9mYWlsID0gIXJlZi0+ bG9zICYmCisJCQkJICEhKG5pYiAmIChTSVQ5NTMxWF9DTEtNT05fRklORV9EUklGVCB8CisJCQkJ CSAgIFNJVDk1MzFYX0NMS01PTl9DT0FSU0VfRFJJRlQpKTsKKwl9CisKKwlyZXR1cm4gMDsKK30K KworLyoKKyAqIENhbiB0aGUgZGV2aWNlIGxvY2sgdG8gdGhpcyBzb3VyY2Ugbm93PyAgT25seSB0 aGUgaW5wdXQgbGFuZXMgaGF2ZSBhCisgKiBtb25pdG9yOyB0aGUgb24tY2hpcCBvc2NpbGxhdG9y IGFuZCB0aGUgaW50ZXItUExMIG5ldCBhcmUgdGFrZW4gYXMKKyAqIHByZXNlbnQuICBBIGRpZmZl cmVudGlhbCBwYWlyIGlzIHdhdGNoZWQgdGhyb3VnaCBpdHMgUCBsYW5lLCB3aGljaCBpcworICog dGhlIG9uZSBpdHMgdGFibGUgZW50cmllcyBhcmUgY2Fub25pY2FsaXNlZCB0by4KKyAqLworc3Rh dGljIGJvb2wgc2l0OTUzMXhfcHJpb19zcmNfbGl2ZShjb25zdCBzdHJ1Y3Qgc2l0OTUzMXhfZGV2 ICpzaXRkZXYsIHU4IHNyYykKK3sKKwl1OCBpbmRleCA9IHNpdDk1MzF4X2h3X3NyY19pbnB1dChz cmMpOworCisJaWYgKGluZGV4ID49IHNpdGRldi0+aW5mby0+bnVtX2lucHV0cykKKwkJcmV0dXJu IHRydWU7CisKKwlyZXR1cm4gIXNpdGRldi0+cmVmW2luZGV4XS5sb3M7Cit9CisKKy8qCisgKiBG b2xkIGEgc291cmNlIGNvZGUgdG8gdGhlIGxhbmUgYSBEUExMIHBpbiBhY3R1YWxseSByZXByZXNl bnRzLgorICoKKyAqIERpZmZlcmVudGlhbCBpbnB1dCBwYWlycyBleHBvc2Ugb25seSB0aGUgUCBs YW5lIGFzIGEgRFBMTCBwaW4uICBBCisgKiBwcmlvcml0eSB0YWJsZSBlbnRyeSBlbmNvZGVkIGFz IGFuIE4gbGFuZSBmb3Igc3VjaCBhIHBhaXIgbXVzdCBtYXAgdG8KKyAqIHRoZSBQLWxhbmUgc291 cmNlIGZvciBwaW4tZmFjaW5nIG9wZXJhdGlvbnMgKG1lbWJlcnNoaXAsIHByaW9yaXR5IHNsb3Rz LAorICogYWRkL3JlbW92ZS9zZXQgbG9va3VwcyksIG1hdGNoaW5nIHNpdDk1MzF4X3JlZl9wbGxf bWFza19mZXRjaCgpLgorICovCitzdGF0aWMgdTggc2l0OTUzMXhfcHJpb19zcmNfY2Fub24oY29u c3Qgc3RydWN0IHNpdDk1MzF4X2RldiAqc2l0ZGV2LCB1OCBzcmMpCit7CisJdTggaW5kZXggPSBz aXQ5NTMxeF9od19zcmNfaW5wdXQoc3JjKTsKKworCWlmIChpbmRleCA+PSBzaXRkZXYtPmluZm8t Pm51bV9pbnB1dHMpCisJCXJldHVybiBzcmM7CisKKwlpZiAoc2l0OTUzMXhfaW5wdXRfaXNfbihp bmRleCkgJiYKKwkgICAgc2l0ZGV2LT5yZWZbaW5kZXhdLnNpZ19tb2RlID09IFNJVDk1MzFYX01P REVfREUpCisJCXJldHVybiBzaXQ5NTMxeF9pbnB1dF9od19zcmMoaW5kZXggLSAxKTsKKworCXJl dHVybiBzcmM7Cit9CisKKy8qCisgKiBzaXQ5NTMxeF9pbnB1dF9wcmlvX3ByZXNlbnQgLSBpcyBh IHNvdXJjZSBsaXN0ZWQgaW4gYSBQTEwncyBwcmlvcml0eSB0YWJsZQorICogQGlucHV0X2lkeDoJ aW5wdXQgc291cmNlIGluIGhhcmR3YXJlIGVuY29kaW5nIChzZWUKKyAqCQlzaXQ5NTMxeF9pbnB1 dF9od19zcmMoKSkKKyAqCisgKiBBbnN3ZXJzIGZyb20gdGhlIG1lbWJlcnNoaXAgbWFzayB0aGF0 IGV2ZXJ5IHRhYmxlIHdyaXRlIGFuZCBldmVyeSBwb2xsCisgKiByZWZyZXNoZXMsIHdoaWNoIGlz IHdoYXQgdGhlIHBpbiBzdGF0ZSBnZXR0ZXJzIHRlc3QuICBUaGUgcHJpb3JpdHkgc2xvdAorICog Y2Fubm90IGFuc3dlciB0aGlzOiBhIHNvdXJjZSB0aGF0IGlzIG5vdCBpbiB0aGUgdGFibGUgcmVw b3J0cyB0aGUgbG93ZXN0CisgKiBzbG90LCBzbyB0aGUgc2xvdCB2YWx1ZSBhbG9uZSBkb2VzIG5v dCBzZXBhcmF0ZSBhYnNlbnQgZnJvbSBsYXN0LgorICoKKyAqIENhbGxlciBtdXN0IGhvbGQgc2l0 ZGV2LT5tdWx0aW9wX2xvY2suCisgKi8KK2Jvb2wgc2l0OTUzMXhfaW5wdXRfcHJpb19wcmVzZW50 KHN0cnVjdCBzaXQ5NTMxeF9kZXYgKnNpdGRldiwgdTggcGxsX2lkeCwKKwkJCQkgdTggaW5wdXRf aWR4KQoreworCWxvY2tkZXBfYXNzZXJ0X2hlbGQoJnNpdGRldi0+bXVsdGlvcF9sb2NrKTsKKwor CWlmIChwbGxfaWR4ID49IFNJVDk1MzFYX05VTV9QTExTKQorCQlyZXR1cm4gZmFsc2U7CisKKwlp bnB1dF9pZHggPSBzaXQ5NTMxeF9wcmlvX3NyY19jYW5vbihzaXRkZXYsIGlucHV0X2lkeCk7CisJ aWYgKGlucHV0X2lkeCA+PSBTSVQ5NTMxWF9QUklPX05VTV9TUkMpCisJCXJldHVybiBmYWxzZTsK KworCXJldHVybiAhIShzaXRkZXYtPmNoYW5bcGxsX2lkeF0ucHJpb19tYXNrICYgQklUKGlucHV0 X2lkeCkpOworfQorCiAvKgotICogUmVidWlsZCBhIFBMTCdzIG1lbWJlcnNoaXAgbWFzayBmcm9t IHRoZSBzb3VyY2UgY29kZXMgb2YgaXRzIHByaW9yaXR5Ci0gKiB0YWJsZS4gIFRoZSBtYXNrIGlz IHdoYXQgdGhlIHBpbiBzdGF0ZSBnZXR0ZXJzIHRlc3QsIHNvIGl0IGlzIHJlZnJlc2hlZAotICog ZnJvbSBleGFjdGx5IHRoZSB2YWx1ZXMgdGhlIHRhYmxlIGhvbGRzIC0tIGhlcmUgYWZ0ZXIgYSB3 cml0ZSwgYW5kIG9uY2UKLSAqIHBlciBwb2xsIGZyb20gdGhlIHJlYWQtYmFjayBpbiBzaXQ5NTMx eF9jaGFuX3N0YXRlX2ZldGNoKCkuCisgKiBUYWtlIHRoZSBjb25maWd1cmVkIHByaW9yaXRpZXMg ZnJvbSBhIHRhYmxlIHRoZSBoYXJkd2FyZSBob2xkczogZWFjaAorICogbGlzdGVkIHNvdXJjZSBn ZXRzIHRoZSBmaXJzdCBzbG90IGl0IG9jY3VwaWVzLiAgQSBzb3VyY2UgdGhlIHRhYmxlIGRvZXMK KyAqIG5vdCBsaXN0IGtlZXBzIHdoYXRldmVyIGl0IGhhZCwgc28gYSBkaXNjb25uZWN0ZWQgaW5w dXQgY29tZXMgYmFjayB3aXRoCisgKiBpdHMgb2xkIHByaW9yaXR5LgorICovCitzdGF0aWMgdm9p ZCBzaXQ5NTMxeF9wcmlvX2NmZ19zZWVkKHN0cnVjdCBzaXQ5NTMxeF9kZXYgKnNpdGRldiwgdTgg cGxsX2lkeCwKKwkJCQkgICBjb25zdCB1OCAqc3JjcykKK3sKKwlzdHJ1Y3Qgc2l0OTUzMXhfY2hh biAqY2hhbiA9ICZzaXRkZXYtPmNoYW5bcGxsX2lkeF07CisJdTE2IHNlZWRlZCA9IDA7CisJdTgg c2xvdCwgc3JjOworCisJZm9yIChzbG90ID0gMDsgc2xvdCA8IFNJVDk1MzFYX1BSSU9fTUFYX1NM T1RTOyBzbG90KyspIHsKKwkJc3JjID0gc3Jjc1tzbG90XSAmIFNJVDk1MzFYX1BSSU9fTklCQkxF X01BU0s7CisJCWlmICghc2l0OTUzMXhfcHJpb19zcmNfdXNhYmxlKHNyYykpCisJCQljb250aW51 ZTsKKwkJc3JjID0gc2l0OTUzMXhfcHJpb19zcmNfY2Fub24oc2l0ZGV2LCBzcmMpOworCQlpZiAo c2VlZGVkICYgQklUKHNyYykpCisJCQljb250aW51ZTsKKwkJc2VlZGVkIHw9IEJJVChzcmMpOwor CQljaGFuLT5jZmdfcHJpb1tzcmNdID0gc2xvdDsKKwkJY2hhbi0+Y2ZnX2tub3duIHw9IEJJVChz cmMpOworCX0KKworCS8qCisJICogQSBzb3VyY2UgdGhpcyBQTEwgaGFzIG5ldmVyIGxpc3RlZCBn ZXRzIHRoZSBsb3dlc3Qgc2xvdCwgdGhlIHZhbHVlCisJICogaXQgcmVwb3J0cyBhbmQgdGhlIG9u ZSBpdCBpcyBjb25uZWN0ZWQgYXQsIHNvIGl0cyBwcmlvcml0eSBkb2VzIG5vdAorCSAqIGNoYW5n ZSB3aGVuIGl0cyBzdGF0ZSBkb2VzLgorCSAqLworCWZvciAoc3JjID0gMDsgc3JjIDwgU0lUOTUz MVhfUFJJT19OVU1fU1JDOyBzcmMrKykgeworCQlpZiAoY2hhbi0+Y2ZnX2tub3duICYgQklUKHNy YykpCisJCQljb250aW51ZTsKKwkJY2hhbi0+Y2ZnX3ByaW9bc3JjXSA9IFNJVDk1MzFYX1BSSU9f TUFYX1NMT1RTIC0gMTsKKwkJY2hhbi0+Y2ZnX2tub3duIHw9IEJJVChzcmMpOworCX0KKworCW1l bWNweShjaGFuLT5zZWVuX3NyY3MsIHNyY3MsIHNpemVvZihjaGFuLT5zZWVuX3NyY3MpKTsKKwlj aGFuLT5zZWVuX3ZhbGlkID0gdHJ1ZTsKK30KKworLyoKKyAqIEJ1aWxkIHRoZSB0YWJsZSBmb3Ig YSBzZXQgb2YgbWVtYmVyIHNvdXJjZXM6IG9yZGVyZWQgYnkgY29uZmlndXJlZAorICogcHJpb3Jp dHksIHRpZXMga2VwdCBpbiB0aGUgb3JkZXIgdGhlIGhhcmR3YXJlIHRhYmxlIGhhcyB0aGVtLCB0 aGUgc2xvdHMKKyAqIHBhc3QgdGhlIGxhc3QgbWVtYmVyIG5hbWluZyBubyBzb3VyY2UuICBGaWxs aW5nIHRoZW0gd2l0aCB0aGUgY29kZSBmb3IKKyAqIG5vIHNvdXJjZSByYXRoZXIgdGhhbiB3aXRo IGNvcGllcyBvZiB0aGUgbGFzdCBtZW1iZXIga2VlcHMgZXZlcnkKKyAqIHNvdXJjZSBpbiBleGFj dGx5IG9uZSBzbG90LCBzbyB0aGUgb3JkZXIgdGhlIHRhYmxlIGVuY29kZXMgaXMgdGhlCisgKiBv cmRlciB0aGUgcHJpb3JpdGllcyBzYXkuCisgKi8KK3N0YXRpYyB2b2lkIHNpdDk1MzF4X3ByaW9f dGFibGVfYnVpbGQoc3RydWN0IHNpdDk1MzF4X2RldiAqc2l0ZGV2LCB1OCBwbGxfaWR4LAorCQkJ CSAgICAgIHUxNiBtZW1iZXJzLCB1OCAqc3JjcykKK3sKKwljb25zdCBzdHJ1Y3Qgc2l0OTUzMXhf Y2hhbiAqY2hhbiA9ICZzaXRkZXYtPmNoYW5bcGxsX2lkeF07CisJdTggb3JkZXJbU0lUOTUzMVhf UFJJT19OVU1fU1JDXSwgbiA9IDAsIGksIGosIHNyYzsKKworCWZvciAoc3JjID0gMDsgc3JjIDwg U0lUOTUzMVhfUFJJT19OVU1fU1JDOyBzcmMrKykKKwkJaWYgKG1lbWJlcnMgJiBCSVQoc3JjKSkK KwkJCW9yZGVyW24rK10gPSBzcmM7CisKKwkvKiBJbnNlcnRpb24gc29ydDogYXQgbW9zdCBhIGRv emVuIGVudHJpZXMuICovCisJZm9yIChpID0gMTsgaSA8IG47IGkrKykgeworCQl1OCBjdXIgPSBv cmRlcltpXTsKKworCQlmb3IgKGogPSBpOyBqID4gMDsgai0tKSB7CisJCQl1OCBwcmV2ID0gb3Jk ZXJbaiAtIDFdOworCQkJdTE2IGtjLCBrcDsKKworCQkJa2MgPSAoY2hhbi0+Y2ZnX2tub3duICYg QklUKGN1cikpID8KKwkJCSAgICAgY2hhbi0+Y2ZnX3ByaW9bY3VyXSA6IFU4X01BWDsKKwkJCWtw ID0gKGNoYW4tPmNmZ19rbm93biAmIEJJVChwcmV2KSkgPworCQkJICAgICBjaGFuLT5jZmdfcHJp b1twcmV2XSA6IFU4X01BWDsKKwkJCWlmIChrYyA9PSBrcCkgeworCQkJCS8qIEtlZXAgdGhlIGhh cmR3YXJlIG9yZGVyIGFtb25nIGVxdWFscy4gKi8KKwkJCQlrYyA9IGNoYW4tPnByaW9fbGFzdFtj dXJdID86IFU4X01BWDsKKwkJCQlrcCA9IGNoYW4tPnByaW9fbGFzdFtwcmV2XSA/OiBVOF9NQVg7 CisJCQl9CisJCQlpZiAoa3AgPD0ga2MpCisJCQkJYnJlYWs7CisJCQlvcmRlcltqXSA9IHByZXY7 CisJCX0KKwkJb3JkZXJbal0gPSBjdXI7CisJfQorCisJZm9yIChpID0gMDsgaSA8IFNJVDk1MzFY X1BSSU9fTUFYX1NMT1RTOyBpKyspCisJCXNyY3NbaV0gPSBpIDwgbiA/IG9yZGVyW2ldIDogU0lU OTUzMVhfUFJJT19TUkNfTk9ORTsKK30KKworLyoKKyAqIFJlZnJlc2ggYSBQTEwncyBjYWNoZWQg dmlldyBvZiBpdHMgcHJpb3JpdHkgdGFibGUgZnJvbSB0aGUgc291cmNlIGNvZGVzCisgKiB0aGUg dGFibGUgaG9sZHMgLS0gaGVyZSBhZnRlciBhIHdyaXRlLCBhbmQgb25jZSBwZXIgcG9sbCBmcm9t IHRoZQorICogcmVhZC1iYWNrIGluIHNpdDk1MzF4X2NoYW5fc3RhdGVfZmV0Y2goKS4KKyAqCisg KiBUaGUgbWVtYmVyc2hpcCBtYXNrIGlzIHdoYXQgdGhlIHBpbiBzdGF0ZSBnZXR0ZXJzIHRlc3Qs IHRoZSBwZXItc2xvdAorICogY29weSBpcyB3aGF0IGEgcmV3cml0ZSBjb21wYXJlcyBhZ2FpbnN0 LCBhbmQgdGhlIGZpcnN0LXNsb3QgYXJyYXkKKyAqIG9yZGVycyBzb3VyY2VzIG9mIGVxdWFsIHBy aW9yaXR5LCBzbyBub25lIG9mIHRoZW0gY29zdHMgYSByZWdpc3RlciByZWFkCisgKiBwZXIgcGlu LgogICovCiBzdGF0aWMgdm9pZCBzaXQ5NTMxeF9wcmlvX21hc2tfYnVpbGQoc3RydWN0IHNpdDk1 MzF4X2RldiAqc2l0ZGV2LCB1OCBwbGxfaWR4LAogCQkJCSAgICAgY29uc3QgdTggKnNyY3MpCiB7 CisJc3RydWN0IHNpdDk1MzF4X2NoYW4gKmNoYW4gPSAmc2l0ZGV2LT5jaGFuW3BsbF9pZHhdOwor CXU4IGZpcnN0W1NJVDk1MzFYX1BSSU9fTlVNX1NSQ10gPSB7IDAgfTsKKwl1OCBzbG90LCBzcmMs IHNyY19jYW5vbjsKIAl1MTYgbWFzayA9IDA7Ci0JdTggc2xvdDsKIAogCWZvciAoc2xvdCA9IDA7 IHNsb3QgPCBTSVQ5NTMxWF9QUklPX01BWF9TTE9UUzsgc2xvdCsrKSB7Ci0JCXU4IHNyYyA9IHNy Y3Nbc2xvdF0gJiBTSVQ5NTMxWF9QUklPX05JQkJMRV9NQVNLOworCQlzcmMgPSBzcmNzW3Nsb3Rd OworCQlzcmMgJj0gU0lUOTUzMVhfUFJJT19OSUJCTEVfTUFTSzsKKwkJY2hhbi0+cHJpb19zcmNz W3Nsb3RdID0gc3JjOworCQlzcmNfY2Fub24gPSBzaXQ5NTMxeF9wcmlvX3NyY19jYW5vbihzaXRk ZXYsIHNyYyk7CisJCWlmICghc2l0OTUzMXhfcHJpb19zcmNfdXNhYmxlKHNyYykpCisJCQljb250 aW51ZTsKIAotCQlpZiAoc2l0OTUzMXhfcHJpb19zcmNfdXNhYmxlKHNyYykpCi0JCQltYXNrIHw9 IEJJVChzcmMpOworCQltYXNrIHw9IEJJVChzcmNfY2Fub24pOworCQlpZiAoIWZpcnN0W3NyY19j YW5vbl0pCisJCQlmaXJzdFtzcmNfY2Fub25dID0gc2xvdCArIDE7CisJfQorCisJLyoKKwkgKiBB c3NpZ24gdW5jb25kaXRpb25hbGx5OiBhIHNvdXJjZSB0aGF0IGhhcyBsZWZ0IHRoZSB0YWJsZSBo YXMgbm8KKwkgKiBzbG90LCBhbmQgbGVhdmluZyBpdHMgb2xkIG9uZSBiZWhpbmQgd291bGQga2Vl cCByZXBvcnRpbmcgaXQgYXMKKwkgKiBsaXN0ZWQgZm9yIGFzIGxvbmcgYXMgdGhlIGRldmljZSBy dW5zLgorCSAqLworCWZvciAoc3JjID0gMDsgc3JjIDwgU0lUOTUzMVhfUFJJT19OVU1fU1JDOyBz cmMrKykKKwkJY2hhbi0+cHJpb19sYXN0W3NyY10gPSBmaXJzdFtzcmNdOworCisJY2hhbi0+cHJp b19tYXNrID0gbWFzazsKK30KKworLyogQXR0ZW1wdHMgdG8gcmVsZWFzZSBhIGZvcmNlZCBob2xk b3ZlciBiZWZvcmUgcmVwb3J0aW5nIGl0IHN0dWNrLiAqLworI2RlZmluZSBTSVQ5NTMxWF9IT19D TEVBUl9UUklFUwkJMworCitzdGF0aWMgaW50IHNpdDk1MzF4X3ByaW9fdGFibGVfcmVhZChzdHJ1 Y3Qgc2l0OTUzMXhfZGV2ICpzaXRkZXYsIHU4IHBsbF9pZHgsCisJCQkJICAgIHU4ICpzcmNzKTsK KworLyoKKyAqIEZpcnN0IHNvdXJjZSBpbiBhIHRhYmxlIHRoYXQgdGhlIGRldmljZSBjb3VsZCBs b2NrIHRvIG5vdywgY29tcGFyZWQgYXMKKyAqIGNhbm9uaWNhbCBjb2Rlcywgb3IgU0lUOTUzMVhf UFJJT19TUkNfTk9ORSB3aGVuIG5vIGxpc3RlZCBzb3VyY2UgaGFzIGEKKyAqIHNpZ25hbC4KKyAq Lworc3RhdGljIHU4IHNpdDk1MzF4X3ByaW9fdG9wX2xpdmUoY29uc3Qgc3RydWN0IHNpdDk1MzF4 X2RldiAqc2l0ZGV2LAorCQkJCSBjb25zdCB1OCAqc3JjcykKK3sKKwl1OCBpLCBzcmM7CisKKwlm b3IgKGkgPSAwOyBpIDwgU0lUOTUzMVhfUFJJT19NQVhfU0xPVFM7IGkrKykgeworCQlzcmMgPSBz cmNzW2ldICYgU0lUOTUzMVhfUFJJT19OSUJCTEVfTUFTSzsKKwkJc3JjID0gc2l0OTUzMXhfcHJp b19zcmNfY2Fub24oc2l0ZGV2LCBzcmMpOworCQlpZiAoc2l0OTUzMXhfcHJpb19zcmNfdXNhYmxl KHNyYykgJiYKKwkJICAgIHNpdDk1MzF4X3ByaW9fc3JjX2xpdmUoc2l0ZGV2LCBzcmMpKQorCQkJ cmV0dXJuIHNyYzsKIAl9CiAKLQlzaXRkZXYtPmNoYW5bcGxsX2lkeF0ucHJpb19tYXNrID0gbWFz azsKKwlyZXR1cm4gU0lUOTUzMVhfUFJJT19TUkNfTk9ORTsKK30KKworLyoKKyAqIENob29zZSB0 aGUgYWN0aXZlIHNlbGVjdGlvbiBmb3IgYSB0YWJsZSBhYm91dCB0byBiZSBsYXRjaGVkLiAgQWZ0 ZXIgYQorICogdGFibGUgd3JpdGUgdGhlIFBMTCBnb2VzIHRvIHRoZSBzb3VyY2UgdGhlIHNlbGVj dGlvbiBuYW1lczsgaXQgbW92ZXMgdG8KKyAqIGFub3RoZXIgb24gaXRzIG93biBvbmx5IHdoZW4g dGhhdCBzb3VyY2UgbG9zZXMgaXRzIHNpZ25hbCwgd2hpY2ggaXMgYW4KKyAqIGV2ZW50LCBub3Qg YSBzdGF0ZS4gIFNvIHRoZSBzZWxlY3Rpb24gaGFzIHRvIG5hbWUgYSBzb3VyY2UgdGhlIFBMTCBj YW4KKyAqIHVzZSwgYW5kIGl0IGZvbGxvd3MgdGhlIHByaW9yaXRpZXMgdGhlIHdheSB0aGUgRFBM TCBpbnRlcmZhY2UgZGVmaW5lcworICogYXV0b21hdGljIG1vZGUgLS0gdGhlIGhpZ2hlc3QtcHJp b3JpdHkgdmFsaWQgaW5wdXQ6CisgKgorICogLSBXaGVuIHRoZSBoaWdoZXN0LXByaW9yaXR5IHNv dXJjZSB3aXRoIHNpZ25hbCBpcyBub3QgdGhlIG9uZSB0aGUKKyAqICAgdGFibGUgaGVsZCBiZWZv cmUsIHRoZSBwcmlvcml0aWVzIG5vdyBwdXQgYW5vdGhlciBzb3VyY2UgZmlyc3QsIGFuZAorICog ICB0aGUgc2VsZWN0aW9uIGdvZXMgdG8gaXQuCisgKiAtIE90aGVyd2lzZSB0aGUgd3JpdGUgb25s eSByZW9yZGVycyBzb3VyY2VzIGJlbG93IGl0LCBvciByZW1vdmVzIG9uZQorICogICB0aGUgUExM IGlzIG5vdCBvbiwgYW5kIHRoZSBzZWxlY3Rpb24gc3RheXMgd2hlcmUgaXQgaXMgd2hpbGUgdGhh dAorICogICBzb3VyY2UgaXMgc3RpbGwgbGlzdGVkIGFuZCBoYXMgc2lnbmFsOiBhIGNoYW5nZSBm dXJ0aGVyIGRvd24gdGhlCisgKiAgIHRhYmxlIG11c3Qgbm90IHB1bGwgYSBQTEwgb2ZmIGEgaGVh bHRoeSByZWZlcmVuY2UuCisgKiAtIE90aGVyd2lzZSB0aGUgZmlyc3QgbGlzdGVkIHNvdXJjZSB3 aXRoIHNpZ25hbDsgd2l0aCBub25lIGFsaXZlIHRoZQorICogICBmaXJzdCBsaXN0ZWQgb25lIGlz IGFzIGdvb2QgYXMgYW55LgorICoKKyAqIEEgc2VsZWN0aW9uIHRoYXQgaXMgc3RpbGwgbGlzdGVk IGJ1dCBoYXMgbG9zdCBpdHMgc2lnbmFsIGlzIG1vdmVkIHRvby4KKyAqIFRoZSBQTEwgaGFzIHRo ZW4gZmFsbGVuIGJhY2sgb24gaXRzIG93biBhbmQgdGhlIHNlbGVjdGlvbiBzdGlsbCBuYW1lcwor ICogdGhlIGRlYWQgc291cmNlOyBsZWZ0IGFsb25lLCB0aGUgbmV4dCB0YWJsZSB3cml0ZSBzZW5k cyB0aGUgUExMIGJhY2sgdG8KKyAqIGl0IGFuZCBpdCB1bmxvY2tzLiAgVGhlIGRldmljZSBmYWxs cyBiYWNrIHRvIHRoZSBiZXN0IGxpc3RlZCBzb3VyY2UKKyAqIHRoYXQgaGFzIHNpZ25hbCwgd2hp Y2ggaXMgdGhlIG9uZSBjaG9zZW4gaGVyZSwgc28gbW92aW5nIHRoZSBzZWxlY3Rpb24KKyAqIHRo ZXJlIGRvZXMgbm90IG1vdmUgdGhlIFBMTC4KKyAqCisgKiBAb2xkIGlzIHRoZSB0YWJsZSB0aGUg ZGV2aWNlIGhvbGRzIGJlZm9yZSB0aGlzIHdyaXRlLgorICovCitzdGF0aWMgdTggc2l0OTUzMXhf cHJpb19hY3RpdmVzZWxfcGljayhzdHJ1Y3Qgc2l0OTUzMXhfZGV2ICpzaXRkZXYsCisJCQkJICAg ICAgIGNvbnN0IHU4ICpvbGQsIGNvbnN0IHU4ICpzcmNzLCB1OCBjdXIpCit7CisJdTggdG9wLCBp OworCisJdG9wID0gc2l0OTUzMXhfcHJpb190b3BfbGl2ZShzaXRkZXYsIHNyY3MpOworCWlmICh0 b3AgIT0gU0lUOTUzMVhfUFJJT19TUkNfTk9ORSAmJgorCSAgICB0b3AgIT0gc2l0OTUzMXhfcHJp b190b3BfbGl2ZShzaXRkZXYsIG9sZCkpCisJCXJldHVybiB0b3A7CisKKwkvKgorCSAqIFRoZSB0 YWJsZSBpcyBidWlsdCBmcm9tIGNhbm9uaWNhbCBjb2Rlcywgc28gY29tcGFyZSBpbiB0aGUgc2Ft ZQorCSAqIHRlcm1zOiBhIGRpZmZlcmVudGlhbCBwYWlyIHNlbGVjdGVkIHRocm91Z2ggaXRzIE4t bGFuZSBjb2RlIGlzIHRoZQorCSAqIFAtbGFuZSBlbnRyeS4KKwkgKi8KKwljdXIgPSBzaXQ5NTMx eF9wcmlvX3NyY19jYW5vbihzaXRkZXYsIGN1ciAmIFNJVDk1MzFYX1BSSU9fTklCQkxFX01BU0sp OworCisJaWYgKHNpdDk1MzF4X3ByaW9fc3JjX3VzYWJsZShjdXIpICYmCisJICAgIHNpdDk1MzF4 X3ByaW9fc3JjX2xpdmUoc2l0ZGV2LCBjdXIpKQorCQlmb3IgKGkgPSAwOyBpIDwgU0lUOTUzMVhf UFJJT19NQVhfU0xPVFM7IGkrKykKKwkJCWlmIChzcmNzW2ldID09IGN1cikKKwkJCQlyZXR1cm4g Y3VyOworCisJaWYgKHRvcCAhPSBTSVQ5NTMxWF9QUklPX1NSQ19OT05FKQorCQlyZXR1cm4gdG9w OworCisJcmV0dXJuIHNyY3NbMF07Cit9CisKK3N0YXRpYyBpbnQgc2l0OTUzMXhfcHJpb190YWJs ZV9jb21taXQoc3RydWN0IHNpdDk1MzF4X2RldiAqc2l0ZGV2LCB1OCBwbGxfaWR4LAorCQkJCSAg ICAgIGNvbnN0IHU4ICpzcmNzKQoreworCXU4IHZhbCwgbGFzdF9vbGQsIHNsb3QsIGF0dGVtcHQs IHdyaXR0ZW4gPSAwLCByZXN0b3JlZCA9IDA7CisJc3RydWN0IHNpdDk1MzF4X2NoYW4gKmNoYW4g PSAmc2l0ZGV2LT5jaGFuW3BsbF9pZHhdOworCXU4IG5vd1tTSVQ5NTMxWF9QUklPX01BWF9TTE9U U107CisJaW50IHJjID0gMCwgcHJnX3JjLCBob19yYyA9IDA7CisJYm9vbCBlbXB0eSwgaG9fZm9y ZWlnbjsKKwl1MTYgcmVnOworCisJZW1wdHkgPSAhc2l0OTUzMXhfcHJpb19zcmNfdXNhYmxlKHNy Y3NbMF0pOworCisJLyoKKwkgKiBBIGZvcmNlZCBob2xkb3ZlciBhbHJlYWR5IGluIHBsYWNlIGlz IHRoaXMgZHJpdmVyJ3Mgb3duIHdoZW4gdGhlCisJICogdGFibGUgbGlzdHMgbm90aGluZyAtLSB0 aGUgaG9sZCBhbiBlbXB0eSB0YWJsZSBrZWVwcyAtLSBvciB3aGVuIGEKKwkgKiByZWxlYXNlIGlz IHN0aWxsIG93ZWQgZnJvbSBhbiBlYXJsaWVyIHdyaXRlLiAgQW55IG90aGVyIHdhcyBwdXQKKwkg KiB0aGVyZSBieSB0aGUgbG9hZGVkIGNvbmZpZ3VyYXRpb24gb3IgYnkgYSB0b29sLCBhbmQgYSB0 YWJsZSB3cml0ZQorCSAqIGlzIG5vIHJlYXNvbiB0byBsaWZ0IGl0OiB0aGUgc2VxdWVuY2UgcnVu cyB1bmRlciBpdCBhbmQgbGVhdmVzIGl0CisJICogYXMgZm91bmQuCisJICovCisJcmMgPSBzaXQ5 NTMxeF9yZWFkX3BsbF91OChzaXRkZXYsIHBsbF9pZHgsIFNJVDk1MzFYX1BMTF9SRUdfSE9fQ1RS TCwKKwkJCQkgICZ2YWwpOworCWlmIChyYykKKwkJcmV0dXJuIHJjOworCisJaG9fZm9yZWlnbiA9 ICh2YWwgJiBCSVQoU0lUOTUzMVhfUExMX0hPX0ZPUkNFX0JJVCkpICYmCisJCSAgICAgY2hhbi0+ cHJpb19tYXNrICYmICFjaGFuLT5ob19yZWxlYXNlX3BlbmRpbmc7CisKKwkvKgorCSAqIEEgd3Jp dGUgdGhhdCByZXBvcnRzIGFuIGVycm9yIG1heSBzdGlsbCBoYXZlIHJlYWNoZWQgdGhlIHBhcnQs IHNvCisJICogYSBmYWlsdXJlIGhlcmUgZG9lcyBub3QgcHJvdmUgdGhlIGJpdCBzdGF5ZWQgY2xl YXI6IG5vdGhpbmcgaXMKKwkgKiB3cml0dGVuIHRvIHRoZSB0YWJsZSwgYnV0IHRoZSByZWxlYXNl IGJlbG93IHN0aWxsIHJ1bnMuCisJICovCisJcmMgPSBzaXQ5NTMxeF93cml0ZV9wbGxfdTgoc2l0 ZGV2LCBwbGxfaWR4LCBTSVQ5NTMxWF9QTExfUkVHX0hPX0NUUkwsCisJCQkJICAgdmFsIHwgQklU KFNJVDk1MzFYX1BMTF9IT19GT1JDRV9CSVQpKTsKKwlpZiAocmMpCisJCWdvdG8gcmVsZWFzZTsK KworCXVzbGVlcF9yYW5nZSgxMDAwMCwgMTIwMDApOworCisJLyoKKwkgKiBUd28gc2xvdHMgc2hh cmUgYSByZWdpc3RlciwgYW5kIHRoaXMgd3JpdGVzIGV2ZXJ5IHNsb3QsIHNvIGJvdGgKKwkgKiBu aWJibGVzIGFyZSBrbm93biBmb3IgZXZlcnkgcmVnaXN0ZXIgYnV0IHRoZSBsYXN0IC0tIGJ1aWxk IHRob3NlCisJICogYnl0ZXMgb3V0cmlnaHQuICBSZWFkaW5nIGZpcnN0IHdvdWxkIHJhaXNlIHRo ZSBxdWVzdGlvbiBvZiB3aGF0IGEKKwkgKiByZWFkIHJldHVybnMgYmV0d2VlbiB0aGUgd3JpdGUg YW5kIHRoZSBsYXRjaCwgYW5kIHRoZSBhbnN3ZXIgZG9lcworCSAqIG5vdCBtYXR0ZXIgaWYgbm90 aGluZyBpcyByZWFkLgorCSAqLworCWZvciAoc2xvdCA9IDA7IHNsb3QgKyAxIDwgU0lUOTUzMVhf UFJJT19NQVhfU0xPVFM7IHNsb3QgKz0gMikgeworCQlyZWcgPSBzaXQ5NTMxeF9wcmlvX3JlZyhw bGxfaWR4LCBzbG90KTsKKworCQl2YWwgPSBzaXQ5NTMxeF9wcmlvX3Nsb3Rfc2V0KDAsIHNsb3Qs IHNyY3Nbc2xvdF0pOworCQl2YWwgPSBzaXQ5NTMxeF9wcmlvX3Nsb3Rfc2V0KHZhbCwgc2xvdCAr IDEsIHNyY3Nbc2xvdCArIDFdKTsKKworCQkvKgorCQkgKiBDb3VudGVkIGJlZm9yZSB0aGUgd3Jp dGU6IGEgd3JpdGUgdGhhdCByZXBvcnRzIGFuIGVycm9yCisJCSAqIG1heSBzdGlsbCBoYXZlIHJl YWNoZWQgdGhlIHBhcnQsIHNvIHRoZSByb2xsYmFjayBoYXMgdG8KKwkJICogY292ZXIgdGhhdCBy ZWdpc3RlciB0b28uCisJCSAqLworCQl3cml0dGVuID0gc2xvdCArIDI7CisJCXJjID0gc2l0OTUz MXhfd3JpdGVfdTgoc2l0ZGV2LCByZWcsIHZhbCk7CisJCWlmIChyYykKKwkJCWdvdG8gcm9sbGJh Y2s7CisJfQorCisJLyoKKwkgKiBUaGUgbGFzdCByZWdpc3RlciBjYXJyaWVzIHNsb3QgMTAgaW4g aXRzIGhpZ2ggbmliYmxlIGFuZCB0aGUKKwkgKiBkZXZpY2UncyBhY3RpdmUgc2VsZWN0aW9uIGlu IGl0cyBsb3cgb25lOyBzZWUKKwkgKiBzaXQ5NTMxeF9wcmlvX2FjdGl2ZXNlbF9waWNrKCkgZm9y IGhvdyB0aGUgc2VsZWN0aW9uIGlzIGNob3Nlbi4KKwkgKiBJdCBuZWVkcyB0aGUgc2lnbmFsIHN0 YXRlIG5vdywgbm90IGFzIG9mIHRoZSBsYXN0IHBvbGwuCisJICoKKwkgKiBUaGUgc2xvdCBzZXR0 ZXIgcGlja3MgaXRzIG5pYmJsZSBieSBwYXJpdHksIHNvIHRoZSBzZWxlY3Rpb24gaXMKKwkgKiBh ZGRyZXNzZWQgYXMgdGhlIHNsb3QgcGFzdCB0aGUgbGFzdCBvbmUuICBUaGlzIHJlZ2lzdGVyIGhh cyBub3QKKwkgKiBiZWVuIHdyaXR0ZW4geWV0IGluIHRoaXMgc2VxdWVuY2UsIHNvIHRoZSByZWFk IHJldHVybnMgd2hhdCB0aGUKKwkgKiBkZXZpY2UgaXMgcnVubmluZyB3aXRoLCBhbmQgdGhhdCBi eXRlIGlzIHdoYXQgYSByb2xsYmFjayBwdXRzCisJICogYmFjay4KKwkgKgorCSAqIEEgdGFibGUg bmFtaW5nIG5vIHNvdXJjZSBhdCBhbGwgaXMgd2hhdCByZW1vdmluZyB0aGUgbGFzdCBvbmUKKwkg KiBhc2tzIGZvci4gIFRoZXJlIGlzIG5vdGhpbmcgdG8gcG9pbnQgdGhlIHNlbGVjdGlvbiBhdCAt LSB0aGUgY29kZQorCSAqIGZvciBubyBzb3VyY2UgaXMgbm90IG9uZSB0aGUgc2VsZWN0aW9uIHRh a2VzIC0tIHNvIHRoZSBuaWJibGUgaXMKKwkgKiBsZWZ0IGFsb25lIGFuZCB0aGUgUExMIGlzIGtl cHQgaW4gaG9sZG92ZXIgYmVsb3cgaW5zdGVhZC4KKwkgKi8KKwlyZWcgPSBzaXQ5NTMxeF9wcmlv X3JlZyhwbGxfaWR4LCBzbG90KTsKKworCXJjID0gc2l0OTUzMXhfcmVhZF91OChzaXRkZXYsIHJl ZywgJmxhc3Rfb2xkKTsKKwlpZiAocmMpCisJCWdvdG8gcm9sbGJhY2s7CisKKwl2YWwgPSBzaXQ5 NTMxeF9wcmlvX3Nsb3Rfc2V0KGxhc3Rfb2xkLCBzbG90LCBzcmNzW3Nsb3RdKTsKKworCWlmICgh ZW1wdHkpIHsKKwkJdTggc2VsID0gc2l0OTUzMXhfcHJpb19zbG90X2dldCh2YWwsIHNsb3QgKyAx KTsKKworCQkvKgorCQkgKiBXaXRob3V0IGEgZnJlc2ggcmVhZCB0aGUgcGljayB3b3VsZCBydW4g b24gdGhlIGxhc3QKKwkJICogcG9sbCdzIG1vbml0b3Igc3RhdGUsIHVwIHRvIGEgcG9sbCBwZXJp b2Qgb2xkLiAgQSBzb3VyY2UKKwkJICogdGhhdCBsb3N0IGl0cyBzaWduYWwgc2luY2Ugd291bGQg c3RpbGwgbG9vayBsaXZlLCBhbmQgYQorCQkgKiBzZWxlY3Rpb24gbmFtaW5nIGEgZGVhZCBzb3Vy Y2Ugc2VuZHMgdGhlIFBMTCB0byBpdCBhbmQgaXQKKwkJICogdW5sb2Nrcywgc28gbm8gc2VsZWN0 aW9uIGlzIHdyaXR0ZW4gd2l0aG91dCB0aGUgcmVhZDogdGhlCisJCSAqIHNsb3RzIHdyaXR0ZW4g c28gZmFyIGFyZSByb2xsZWQgYmFjayBhbmQgdGhlIHJlcXVlc3QKKwkJICogZmFpbHMuCisJCSAq LworCQlyYyA9IHNpdDk1MzF4X2lucHV0X21vbl9mZXRjaChzaXRkZXYpOworCQlpZiAocmMpCisJ CQlnb3RvIHJvbGxiYWNrOworCQlzZWwgPSBzaXQ5NTMxeF9wcmlvX2FjdGl2ZXNlbF9waWNrKHNp dGRldiwgY2hhbi0+cHJpb19zcmNzLAorCQkJCQkJICAgc3Jjcywgc2VsKTsKKwkJdmFsID0gc2l0 OTUzMXhfcHJpb19zbG90X3NldCh2YWwsIHNsb3QgKyAxLCBzZWwpOworCX0KKworCXdyaXR0ZW4g PSBTSVQ5NTMxWF9QUklPX01BWF9TTE9UUzsKKwlyYyA9IHNpdDk1MzF4X3dyaXRlX3U4KHNpdGRl diwgcmVnLCB2YWwpOworCWlmIChyYykKKwkJZ290byByb2xsYmFjazsKKworcm9sbGJhY2s6CisJ aWYgKHJjICYmIHdyaXR0ZW4pIHsKKwkJLyoKKwkJICogUHV0IHRoZSBzbG90cyB0aGF0IG1heSBo YXZlIHJlYWNoZWQgdGhlIGRldmljZSBiYWNrIHRoZQorCQkgKiB3YXkgdGhleSB3ZXJlLCB0aGUg cmVnaXN0ZXIgd2hvc2Ugd3JpdGUgcmVwb3J0ZWQgdGhlIGVycm9yCisJCSAqIGluY2x1ZGVkLiAg TGF0Y2hpbmcgYSB0YWJsZSB0aGF0IGlzIG5laXRoZXIgdGhlIHByZXZpb3VzCisJCSAqIG9yZGVy IG5vciB0aGUgcmVxdWVzdGVkIG9uZSBoYW5kcyB0aGUgcmVmZXJlbmNlIHNlbGVjdGlvbgorCQkg KiBsb29wIGEgcHJpb3JpdHkgbGlzdCBub2JvZHkgYXNrZWQgZm9yLiAgVGhlIGNhY2hlIGlzIHRo ZQorCQkgKiB0YWJsZSBhcyBsYXN0IHJlYWQsIHdoaWNoIGlzIHdoYXQgdGhvc2Ugc2xvdHMgaGVs ZDsgdGhlCisJCSAqIGxhc3QgcmVnaXN0ZXIgYWxzbyBjYXJyaWVzIHRoZSBzZWxlY3Rpb24sIHNv IGl0IGdvZXMgYmFjaworCQkgKiBhcyBpdCB3YXMgcmVhZCBhYm92ZS4KKwkJICovCisJCWZvciAo c2xvdCA9IDA7IHNsb3QgPCB3cml0dGVuOyBzbG90ICs9IDIpIHsKKwkJCWNvbnN0IHU4ICpwcmV2 ID0gJmNoYW4tPnByaW9fc3Jjc1tzbG90XTsKKwkJCXU4IG9sZDsKKworCQkJaWYgKHNsb3QgKyAx IDwgU0lUOTUzMVhfUFJJT19NQVhfU0xPVFMpIHsKKwkJCQlvbGQgPSBzaXQ5NTMxeF9wcmlvX3Ns b3Rfc2V0KDAsIHNsb3QsIHByZXZbMF0pOworCQkJCW9sZCA9IHNpdDk1MzF4X3ByaW9fc2xvdF9z ZXQob2xkLCBzbG90ICsgMSwKKwkJCQkJCQkgICAgIHByZXZbMV0pOworCQkJfSBlbHNlIHsKKwkJ CQlvbGQgPSBsYXN0X29sZDsKKwkJCX0KKwkJCWlmIChzaXQ5NTMxeF93cml0ZV91OChzaXRkZXYs CisJCQkJCSAgICAgIHNpdDk1MzF4X3ByaW9fcmVnKHBsbF9pZHgsIHNsb3QpLAorCQkJCQkgICAg ICBvbGQpKQorCQkJCWJyZWFrOworCisJCQlyZXN0b3JlZCA9IHNsb3QgKyAyOworCQl9CisJCXdy aXR0ZW4gPSByZXN0b3JlZDsKKwl9CisKKwkvKgorCSAqIExhdGNoIHVuY29uZGl0aW9uYWxseTog dGhlIHNsb3RzIHRoYXQgcmVhY2hlZCB0aGUgZGV2aWNlIGFyZSBpbgorCSAqIHRoZSB0YWJsZSBy ZWdhcmRsZXNzLCBzbyB0aGUgbGF0Y2gga2VlcHMgaGFyZHdhcmUgYW5kIHRoZSBjYWNoZQorCSAq IHJlZnJlc2ggYmVsb3cgY29uc2lzdGVudCB3aXRoIHdoYXQgd2FzIGFjdHVhbGx5IHdyaXR0ZW4u CisJICovCisJcHJnX3JjID0gc2l0OTUzMXhfcHJpb19wcmdfY29tbWl0KHNpdGRldik7CisJaWYg KHByZ19yYyAmJiAhcmMpCisJCXJjID0gcHJnX3JjOworCisJLyoKKwkgKiBSZWZyZXNoIHRoZSBj YWNoZSBzbyBhIGdldCB0aGF0IGZvbGxvd3MgYSBzZXQgZG9lcyBub3QgaGF2ZSB0bworCSAqIHdh aXQgZm9yIHRoZSBuZXh0IHBvbGwuICBBZnRlciBhIGNvbXBsZXRlIHdyaXRlIHRoYXQgaXMgdGhl IHRhYmxlCisJICoganVzdCB3cml0dGVuLiAgQWZ0ZXIgYSBmYWlsdXJlIGl0IGlzIHdoYXRldmVy IHRoZSBkZXZpY2UgaG9sZHMKKwkgKiBub3cgLS0gcGFydCByZXF1ZXN0LCBwYXJ0IHJlc3RvcmUg LS0gc28gcmVhZCBpdCBiYWNrIHJhdGhlciB0aGFuCisJICogcGllY2UgaXQgdG9nZXRoZXI6IHRo ZSBtZW1iZXJzaGlwIHRlc3QgZGVjaWRlcyB3aGF0IGEgZmFpbGVkCisJICogcmVxdWVzdCByb2xs cyBiYWNrLCBhbmQgaXQgbXVzdCBub3QgYW5zd2VyIGZvciB3cml0ZXMgdGhhdCBkaWQgbm90CisJ ICogbGFuZC4gIEEgcmVhZC1iYWNrIHRoYXQgZmFpbHMgdG9vIGxlYXZlcyB0aGUgbmV4dCBwb2xs IHRvIGRvIGl0LgorCSAqLworCWlmICghcmMpIHsKKwkJc2l0OTUzMXhfcHJpb19tYXNrX2J1aWxk KHNpdGRldiwgcGxsX2lkeCwgc3Jjcyk7CisJCW1lbWNweShjaGFuLT5zZWVuX3NyY3MsIHNyY3Ms IHNpemVvZihjaGFuLT5zZWVuX3NyY3MpKTsKKwkJY2hhbi0+c2Vlbl92YWxpZCA9IHRydWU7CisJ fSBlbHNlIGlmICghc2l0OTUzMXhfcHJpb190YWJsZV9yZWFkKHNpdGRldiwgcGxsX2lkeCwgbm93 KSkgeworCQlzaXQ5NTMxeF9wcmlvX21hc2tfYnVpbGQoc2l0ZGV2LCBwbGxfaWR4LCBub3cpOwor CQltZW1jcHkoY2hhbi0+c2Vlbl9zcmNzLCBub3csIHNpemVvZihjaGFuLT5zZWVuX3NyY3MpKTsK KwkJY2hhbi0+c2Vlbl92YWxpZCA9IHRydWU7CisJfQorCityZWxlYXNlOgorCS8qCisJICogQSB0 YWJsZSB0aGF0IG5hbWVzIG5vIHNvdXJjZSBrZWVwcyB0aGUgUExMIGluIHRoZSBob2xkb3ZlciBm b3JjZWQKKwkgKiBhYm92ZTogdGhhdCBpcyB0aGUgb25lIHN0YXRlIGluIHdoaWNoIGl0IGZvbGxv d3Mgbm8gaW5wdXQsIHdoaWNoCisJICogaXMgd2hhdCBkaXNjb25uZWN0aW5nIGV2ZXJ5IGlucHV0 IGFza3MgZm9yLiAgVGhlIHNlbGVjdGlvbiBuaWJibGUKKwkgKiBhbG9uZSB3b3VsZCBub3QgZG8g aXQgLS0gaXQgc3RpbGwgbmFtZXMgdGhlIG9sZCBzb3VyY2UsIGFuZCB0aGUKKwkgKiBQTEwga2Vl cHMgZm9sbG93aW5nIHRoYXQgb25lIGZvciBhcyBsb25nIGFzIGl0IGhhcyBzaWduYWwuICBUaGUK KwkgKiBuZXh0IHRhYmxlIHdyaXRlIHRoYXQgbGlzdHMgYSBzb3VyY2UgcmVsZWFzZXMgaXQuCisJ ICoKKwkgKiBKdWRnZWQgb24gdGhlIHRhYmxlIHRoZSBkZXZpY2UgaG9sZHMgbm93LCBhcyB0aGUg cmVmcmVzaCBhYm92ZQorCSAqIHJlYWQgaXQsIG5vdCBvbiB0aGUgb25lIHJlcXVlc3RlZDogYSB3 cml0ZSB0aGF0IGZhaWxlZCBvbiBhIFBMTAorCSAqIGxpc3Rpbmcgbm90aGluZyBsZWF2ZXMgaXQg bGlzdGluZyBub3RoaW5nLCBhbmQgcmVsZWFzaW5nIHRoZSBob2xkCisJICogdGhlbiB3b3VsZCBo YW5kIHRoZSBQTEwgYmFjayB0byB0aGUgc291cmNlIHRoZSBzZWxlY3Rpb24gc3RpbGwKKwkgKiBu YW1lcyB3aGlsZSBldmVyeSBwaW4gcmVwb3J0cyBkaXNjb25uZWN0ZWQuICBBbiBlbXB0eSB0YWJs ZSB3aG9zZQorCSAqIGxhdGNoIGZhaWxlZCBpcyB0aGUgc2FtZSBjYXNlIGZyb20gdGhlIG90aGVy IHNpZGUuCisJICovCisJaWYgKCFjaGFuLT5wcmlvX21hc2spIHsKKwkJZGV2X2RiZyhzaXRkZXYt PmRldiwKKwkJCSJQTEwlYzogbm8gc291cmNlIGxpc3RlZCwgaG9sZG92ZXIga2VwdFxuIiwKKwkJ CSdBJyArIHBsbF9pZHgpOworCQljaGFuLT5ob19yZWxlYXNlX3BlbmRpbmcgPSBmYWxzZTsKKwkJ cmV0dXJuIHJjOworCX0KKworCWlmIChob19mb3JlaWduKSB7CisJCWRldl9kYmcoc2l0ZGV2LT5k ZXYsCisJCQkiUExMJWM6IGhvbGRvdmVyIHdhcyBmb3JjZWQgYmVmb3JlIHRoZSB3cml0ZSwgbGVm dCBpbiBwbGFjZVxuIiwKKwkJCSdBJyArIHBsbF9pZHgpOworCQlyZXR1cm4gcmM7CisJfQorCisJ LyoKKwkgKiBSZWxlYXNlIHRoZSBmb3JjZWQgaG9sZG92ZXIuICBBcGFydCBmcm9tIGFuIGVtcHR5 IHRhYmxlLCBub3RoaW5nCisJICogaW4gdGhlIGRyaXZlciBrZWVwcyB0aGlzIGJpdCBzZXQsIGFu ZCBhIHJldHJ5IG9mIHRoZSBzYW1lIHJlcXVlc3QKKwkgKiBmaW5kcyB0aGUgdGFibGUgYWxyZWFk eSBhcyBhc2tlZCBhbmQgZG9lcyBub3QgY29tZSBiYWNrIGhlcmUsIHNvCisJICogYSBQTEwgbGVm dCB3aXRoIGl0IHdvdWxkIHJlcG9ydCBob2xkb3ZlciB1bnRpbCBzb21lIHVucmVsYXRlZAorCSAq IHRhYmxlIHdyaXRlIG9uIHRoZSBzYW1lIFBMTCBjbGVhcmVkIGl0LiAgUmV0cnkgYmVmb3JlIGdp dmluZyB1cDsKKwkgKiBpZiBpdCBzdGF5cyBzZXQsIHNheSBzbyBhbmQgbGVhdmUgdGhlIHJlbGVh c2Ugb3dlZCB0byB0aGUgcG9sbCwKKwkgKiB3aGljaCByZXRyaWVzIGl0IGV2ZXJ5IHRpY2sgdW50 aWwgaXQgbGFuZHMuCisJICovCisJZm9yIChhdHRlbXB0ID0gMDsgYXR0ZW1wdCA8IFNJVDk1MzFY X0hPX0NMRUFSX1RSSUVTOyBhdHRlbXB0KyspIHsKKwkJaG9fcmMgPSBzaXQ5NTMxeF91cGRhdGVf cGxsX3U4KHNpdGRldiwgcGxsX2lkeCwKKwkJCQkJICAgICAgIFNJVDk1MzFYX1BMTF9SRUdfSE9f Q1RSTCwKKwkJCQkJICAgICAgIEJJVChTSVQ5NTMxWF9QTExfSE9fRk9SQ0VfQklUKSwKKwkJCQkJ ICAgICAgIDApOworCQlpZiAoIWhvX3JjKQorCQkJYnJlYWs7CisJCXVzbGVlcF9yYW5nZSgxMDAw LCAyMDAwKTsKKwl9CisJaWYgKGhvX3JjKSB7CisJCWRldl9lcnIoc2l0ZGV2LT5kZXYsICJQTEwl YyBsZWZ0IGluIGZvcmNlZCBob2xkb3ZlcjogJWRcbiIsCisJCQknQScgKyBwbGxfaWR4LCBob19y Yyk7CisJCWlmICghcmMpCisJCQlyYyA9IGhvX3JjOworCX0KKwljaGFuLT5ob19yZWxlYXNlX3Bl bmRpbmcgPSAhIWhvX3JjOworCisJcmV0dXJuIHJjOwogfQogCiAvKgpAQCAtNDc5LDYgKzExNDIs MTU1IEBAIHN0YXRpYyBpbnQgc2l0OTUzMXhfcHJpb190YWJsZV9yZWFkKHN0cnVjdCBzaXQ5NTMx eF9kZXYgKnNpdGRldiwgdTggcGxsX2lkeCwKIAlyZXR1cm4gMDsKIH0KIAorLyoKKyAqIFJld3Jp dGUgYSBQTEwncyB0YWJsZSBmb3IgYSBuZXcgbWVtYmVyIHNldCwgdW5sZXNzIGl0IHdvdWxkIGNv bWUgb3V0IGFzCisgKiB0aGUgdGFibGUgYWxyZWFkeSBob2xkczogZXZlcnkgd3JpdGUgZm9yY2Vz IHRoZSBQTEwgaW50byBob2xkb3ZlciBmb3IKKyAqIHRoZSBsZW5ndGggb2YgdGhlIHNlcXVlbmNl LCBzbyBvbmUgdGhhdCBjaGFuZ2VzIG5vdGhpbmcgaXMgYQorICogZGlzdHVyYmFuY2Ugbm9ib2R5 IGFza2VkIGZvci4KKyAqLworc3RhdGljIGludCBzaXQ5NTMxeF9wcmlvX3RhYmxlX2FwcGx5KHN0 cnVjdCBzaXQ5NTMxeF9kZXYgKnNpdGRldiwgdTggcGxsX2lkeCwKKwkJCQkgICAgIHUxNiBtZW1i ZXJzKQoreworCXU4IHNyY3NbU0lUOTUzMVhfUFJJT19NQVhfU0xPVFNdOworCisJaWYgKGh3ZWln aHQxNihtZW1iZXJzKSA+IFNJVDk1MzFYX1BSSU9fTUFYX1NMT1RTKQorCQlyZXR1cm4gLUVOT1NQ QzsKKworCXNpdDk1MzF4X3ByaW9fdGFibGVfYnVpbGQoc2l0ZGV2LCBwbGxfaWR4LCBtZW1iZXJz LCBzcmNzKTsKKwlpZiAoIW1lbWNtcChzcmNzLCBzaXRkZXYtPmNoYW5bcGxsX2lkeF0ucHJpb19z cmNzLCBzaXplb2Yoc3JjcykpKQorCQlyZXR1cm4gMDsKKworCXJldHVybiBzaXQ5NTMxeF9wcmlv X3RhYmxlX2NvbW1pdChzaXRkZXYsIHBsbF9pZHgsIHNyY3MpOworfQorCisvKgorICogc2l0OTUz MXhfaW5wdXRfcHJpb19zZXQgLSBzZXQgYW4gaW5wdXQncyBwcmlvcml0eSBvbiBhIFBMTAorICog QGlucHV0X2lkeDoJaW5wdXQgc291cmNlIGluIGhhcmR3YXJlIGVuY29kaW5nICgwLTExLCBzZWUK KyAqCQlzaXQ5NTMxeF9pbnB1dF9od19zcmMoKSkKKyAqIEBwcmlvOglwcmlvcml0eSwgbG93ZXIg aXMgcHJlZmVycmVkCisgKgorICogUmVjb3JkcyB0aGUgcHJpb3JpdHkgYW5kLCB3aGVuIHRoZSBz b3VyY2UgaXMgaW4gdGhlIFBMTCdzIHRhYmxlLAorICogcmVidWlsZHMgdGhlIHRhYmxlIGZyb20g dGhlIGNvbmZpZ3VyZWQgcHJpb3JpdGllcy4gIEEgc291cmNlIHRoYXQgaXMKKyAqIG5vdCBpbiB0 aGUgdGFibGUga2VlcHMgdGhlIHByaW9yaXR5IGZvciB3aGVuIGl0IGlzIGNvbm5lY3RlZDogdGhh dCBpcworICogdGhlIHBpbidzIHN0YXRlLCBhbmQgaXQgYmVsb25ncyB0byB0aGUgc3RhdGUgc2V0 dGVyLiAgT3RoZXIgc291cmNlcworICoga2VlcCB0aGVpcnMgZWl0aGVyIHdheSwgc28gbm8gc2li bGluZydzIHByaW9yaXR5IG1vdmVzLgorICoKKyAqIENhbGxlciBtdXN0IGhvbGQgc2l0ZGV2LT5t dWx0aW9wX2xvY2suCisgKgorICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIC1FSU5WQUwgZm9yIGEg YmFkIFBMTCBvciBzb3VyY2UsIDwwIG9uIGVycm9yCisgKi8KK2ludCBzaXQ5NTMxeF9pbnB1dF9w cmlvX3NldChzdHJ1Y3Qgc2l0OTUzMXhfZGV2ICpzaXRkZXYsIHU4IHBsbF9pZHgsCisJCQkgICAg dTggaW5wdXRfaWR4LCB1OCBwcmlvKQoreworCXN0cnVjdCBzaXQ5NTMxeF9jaGFuICpjaGFuOwor CXUxNiBvbGRfa25vd247CisJdTggb2xkX3ByaW87CisJaW50IHJjOworCisJbG9ja2RlcF9hc3Nl cnRfaGVsZCgmc2l0ZGV2LT5tdWx0aW9wX2xvY2spOworCisJaWYgKHBsbF9pZHggPj0gU0lUOTUz MVhfTlVNX1BMTFMpCisJCXJldHVybiAtRUlOVkFMOworCWlucHV0X2lkeCA9IHNpdDk1MzF4X3By aW9fc3JjX2Nhbm9uKHNpdGRldiwgaW5wdXRfaWR4KTsKKwlpZiAoaW5wdXRfaWR4ID49IFNJVDk1 MzFYX1BSSU9fTlVNX1NSQykKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwljaGFuID0gJnNpdGRldi0+ Y2hhbltwbGxfaWR4XTsKKwlvbGRfcHJpbyA9IGNoYW4tPmNmZ19wcmlvW2lucHV0X2lkeF07CisJ b2xkX2tub3duID0gY2hhbi0+Y2ZnX2tub3duOworCWNoYW4tPmNmZ19wcmlvW2lucHV0X2lkeF0g PSBwcmlvOworCWNoYW4tPmNmZ19rbm93biB8PSBCSVQoaW5wdXRfaWR4KTsKKworCWlmICghKGNo YW4tPnByaW9fbWFzayAmIEJJVChpbnB1dF9pZHgpKSkKKwkJcmV0dXJuIDA7CisKKwkvKgorCSAq IFRoZSB0YWJsZSBpcyBidWlsdCBmcm9tIHRoZSBjb25maWd1cmVkIHByaW9yaXR5LCBzbyBpdCBo YXMgdG8gYmUKKwkgKiByZWNvcmRlZCBiZWZvcmUgdGhlIHJlYnVpbGQ7IGEgcmVidWlsZCB0aGF0 IGZhaWxlZCB0YWtlcyB0aGUKKwkgKiByZWNvcmQgYmFjayB3aXRoIGl0LiAgTGVmdCBpbiBwbGFj ZSwgYSByZWZ1c2VkIHByaW9yaXR5IHdvdWxkIGJlCisJICogcmVwb3J0ZWQgYnkgdGhlIGdldHRl ciwgbm90aWZpZWQgYnkgdGhlIHBvbGwsIGFuZCB3cml0dGVuIGJ5IHRoZQorCSAqIG5leHQgcmVi dWlsZCBmb3IgYW55IG90aGVyIHJlYXNvbi4KKwkgKi8KKwlyYyA9IHNpdDk1MzF4X3ByaW9fdGFi bGVfYXBwbHkoc2l0ZGV2LCBwbGxfaWR4LCBjaGFuLT5wcmlvX21hc2spOworCWlmIChyYykgewor CQljaGFuLT5jZmdfcHJpb1tpbnB1dF9pZHhdID0gb2xkX3ByaW87CisJCWNoYW4tPmNmZ19rbm93 biA9IG9sZF9rbm93bjsKKwl9CisKKwlyZXR1cm4gcmM7Cit9CisKKy8qCisgKiBzaXQ5NTMxeF9p bnB1dF9wcmlvX3JlbW92ZSAtIGRyb3AgYW4gaW5wdXQgZnJvbSBhIFBMTCdzIHByaW9yaXR5IHRh YmxlCisgKiBAaW5wdXRfaWR4OglpbnB1dCBzb3VyY2UgaW4gaGFyZHdhcmUgZW5jb2RpbmcKKyAq CisgKiBSZWJ1aWxkcyB0aGUgdGFibGUgd2l0aG91dCB0aGUgc291cmNlLCB3aGljaCBtYWtlcyBh IGRpc2Nvbm5lY3RlZAorICogaW5wdXQgaW5lbGlnaWJsZSBmb3IgYXV0b21hdGljIHJlZmVyZW5j ZSBzZWxlY3Rpb24sIG5vdCBqdXN0IGdhdGVkIGF0CisgKiB0aGUgaW5wdXQgYnVmZmVyLiAgVGhl IHNvdXJjZSBrZWVwcyBpdHMgY29uZmlndXJlZCBwcmlvcml0eSBmb3Igd2hlbiBpdAorICogY29t ZXMgYmFjay4gIFJlbW92aW5nIGEgc291cmNlIHRoYXQgaXMgYWJzZW50IHN1Y2NlZWRzIHdpdGhv dXQgdG91Y2hpbmcKKyAqIHRoZSB0YWJsZS4gIFJlbW92aW5nIHRoZSBsYXN0IG9uZSBsZWF2ZXMg YSB0YWJsZSB0aGF0IG5hbWVzIG5vIHNvdXJjZTsKKyAqIHRoZSBjb21taXQgdGhlbiBrZWVwcyB0 aGUgUExMIGluIGhvbGRvdmVyLCB3aGljaCBpcyB3aGF0IGRpc2Nvbm5lY3RpbmcKKyAqIGV2ZXJ5 IGlucHV0IGFza3MgZm9yLgorICoKKyAqIENhbGxlciBtdXN0IGhvbGQgc2l0ZGV2LT5tdWx0aW9w X2xvY2suCisgKgorICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIDwwIG9uIGVycm9yCisgKi8KK2lu dCBzaXQ5NTMxeF9pbnB1dF9wcmlvX3JlbW92ZShzdHJ1Y3Qgc2l0OTUzMXhfZGV2ICpzaXRkZXYs IHU4IHBsbF9pZHgsCisJCQkgICAgICAgdTggaW5wdXRfaWR4KQoreworCXN0cnVjdCBzaXQ5NTMx eF9jaGFuICpjaGFuOworCisJbG9ja2RlcF9hc3NlcnRfaGVsZCgmc2l0ZGV2LT5tdWx0aW9wX2xv Y2spOworCisJaWYgKHBsbF9pZHggPj0gU0lUOTUzMVhfTlVNX1BMTFMpCisJCXJldHVybiAtRUlO VkFMOworCWlucHV0X2lkeCA9IHNpdDk1MzF4X3ByaW9fc3JjX2Nhbm9uKHNpdGRldiwgaW5wdXRf aWR4KTsKKwlpZiAoaW5wdXRfaWR4ID49IFNJVDk1MzFYX1BSSU9fTlVNX1NSQykKKwkJcmV0dXJu IC1FSU5WQUw7CisKKwljaGFuID0gJnNpdGRldi0+Y2hhbltwbGxfaWR4XTsKKwlpZiAoIShjaGFu LT5wcmlvX21hc2sgJiBCSVQoaW5wdXRfaWR4KSkpCisJCXJldHVybiAwOworCisJcmV0dXJuIHNp dDk1MzF4X3ByaW9fdGFibGVfYXBwbHkoc2l0ZGV2LCBwbGxfaWR4LAorCQkJCQkgY2hhbi0+cHJp b19tYXNrICYgfkJJVChpbnB1dF9pZHgpKTsKK30KKworLyoKKyAqIHNpdDk1MzF4X2lucHV0X3By aW9fYWRkIC0gbWFrZSBhbiBpbnB1dCBlbGlnaWJsZSBpbiBhIFBMTCdzIHRhYmxlCisgKiBAaW5w dXRfaWR4OglpbnB1dCBzb3VyY2UgaW4gaGFyZHdhcmUgZW5jb2RpbmcKKyAqCisgKiBQdXRzIHRo ZSBzb3VyY2UgYmFjayBpbnRvIHRoZSB0YWJsZSBhdCBpdHMgY29uZmlndXJlZCBwcmlvcml0eTsg b25lIHRoZQorICogUExMIG5ldmVyIGxpc3RlZCBoYXMgdGhlIGxvd2VzdCBzbG90IChzZWUgc2l0 OTUzMXhfcHJpb19jZmdfc2VlZCgpKS4gIEEKKyAqIHNvdXJjZSB0aGF0IGlzIGFscmVhZHkgbGlz dGVkIGxlYXZlcyB0aGUgdGFibGUgdW50b3VjaGVkLgorICoKKyAqIENhbGxlciBtdXN0IGhvbGQg c2l0ZGV2LT5tdWx0aW9wX2xvY2suCisgKgorICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIC1FTk9T UEMgd2hlbiB0aGUgdGFibGUgY2Fubm90IGhvbGQgYW5vdGhlcgorICogc291cmNlLCA8MCBvbiBl cnJvcgorICovCitpbnQgc2l0OTUzMXhfaW5wdXRfcHJpb19hZGQoc3RydWN0IHNpdDk1MzF4X2Rl diAqc2l0ZGV2LCB1OCBwbGxfaWR4LAorCQkJICAgIHU4IGlucHV0X2lkeCkKK3sKKwlzdHJ1Y3Qg c2l0OTUzMXhfY2hhbiAqY2hhbjsKKworCWxvY2tkZXBfYXNzZXJ0X2hlbGQoJnNpdGRldi0+bXVs dGlvcF9sb2NrKTsKKworCWlmIChwbGxfaWR4ID49IFNJVDk1MzFYX05VTV9QTExTKQorCQlyZXR1 cm4gLUVJTlZBTDsKKwlpbnB1dF9pZHggPSBzaXQ5NTMxeF9wcmlvX3NyY19jYW5vbihzaXRkZXYs IGlucHV0X2lkeCk7CisJaWYgKGlucHV0X2lkeCA+PSBTSVQ5NTMxWF9QUklPX05VTV9TUkMpCisJ CXJldHVybiAtRUlOVkFMOworCisJY2hhbiA9ICZzaXRkZXYtPmNoYW5bcGxsX2lkeF07CisJaWYg KGNoYW4tPnByaW9fbWFzayAmIEJJVChpbnB1dF9pZHgpKQorCQlyZXR1cm4gMDsKKworCXJldHVy biBzaXQ5NTMxeF9wcmlvX3RhYmxlX2FwcGx5KHNpdGRldiwgcGxsX2lkeCwKKwkJCQkJIGNoYW4t PnByaW9fbWFzayB8IEJJVChpbnB1dF9pZHgpKTsKK30KKwogLyogWE8gZG91YmxlciByZWdpc3Rl ciAqLwogI2RlZmluZSBTSVQ5NTMxWF9SRUdfWE8yX0dFTkVSSUMJCVNJVDk1MzFYX1JFRygweDAw LCAweDJEKQogI2RlZmluZSBTSVQ5NTMxWF9YT19ET1VCTEVSX0VOQl9CSVQJCTcgICAvKiBpbnZl cnRlZDogMCA9IGVuYWJsZWQgKi8KQEAgLTU2OSw3ICsxMzgxLDggQEAgc3RhdGljIGludCBzaXQ5 NTMxeF9jbGVhcl9ub3RpZmljYXRpb25zKHN0cnVjdCBzaXQ5NTMxeF9kZXYgKnNpdGRldikKICAq IEBpbmRleDoJbG9naWNhbCBpbnB1dCBpbmRleAogICoKICAqIFJlYWRzIHdoZXRoZXIgdGhlIGxh bmUncyByZWNlaXZlciBpcyBvbiwgZnJvbSB0aGUgUGFnZSAweDAyIGZvcmNlIGFuZAotICogc3Rh dGUgYml0cy4KKyAqIHN0YXRlIGJpdHMuICBTaWduYWwgc3RhdHVzIGNvbWVzIGZyb20gc2l0OTUz MXhfaW5wdXRfbW9uX2ZldGNoKCksCisgKiB3aGljaCByZWFkcyBldmVyeSBsYW5lJ3MgY2xvY2sg bW9uaXRvciBpbiBvbmUgcGFzcy4KICAqLwogc3RhdGljIGludCBzaXQ5NTMxeF9yZWZfc3RhdGVf ZmV0Y2goc3RydWN0IHNpdDk1MzF4X2RldiAqc2l0ZGV2LCB1OCBpbmRleCkKIHsKQEAgLTY2MSw2 ICsxNDc0LDczIEBAIHN0YXRpYyBpbnQgc2l0OTUzMXhfcGxsX2lzX2FjdGl2ZShzdHJ1Y3Qgc2l0 OTUzMXhfZGV2ICpzaXRkZXYsIHU4IHBsbF9pZHgsCiAJcmV0dXJuIDA7CiB9CiAKKy8qCisgKiBS ZWFkIHRoZSByZWZlcmVuY2UgdGhlIGRldmljZSBmZWVkcyBhIFBMTC4KKyAqCisgKiBUaGUgYWN0 aXZlIHNlbGVjdGlvbiBuYW1lcyB0aGUgc291cmNlIHRoZSBQTEwgd2FzIHRvbGQgdG8gZm9sbG93 LiAgVGhlCisgKiBpbnB1dCBzdWJzeXN0ZW0gZmVlZHMgdGhlIFBMTCB0aGF0IHNvdXJjZSB3aGls ZSBpdCBoYXMgc2lnbmFsIGFuZCBmYWxscworICogYmFjayB0byBhbm90aGVyIGxpc3RlZCBzb3Vy Y2Ugb24gaXRzIG93biB3aGVuIGl0IGRvZXMgbm90LCB3aXRob3V0CisgKiB0b3VjaGluZyB0aGUg c2VsZWN0aW9uLCBzbyBhZnRlciBzdWNoIGEgZmFsbGJhY2sgdGhlIHNlbGVjdGlvbiBubworICog bG9uZ2VyIHNheXMgd2hpY2ggcmVmZXJlbmNlIHRoZSBQTEwgcnVucyBvbi4gIFRoZSBkZWJ1ZyBz dGF0dXMgYnVzCisgKiBkb2VzOiBhZGRyZXNzZWQgYXQgdGhlIHJvdXRlZCByZWZlcmVuY2UsIGl0 IHJldHVybnMgdGhlIHNvdXJjZSBjb2RlCisgKiB0aGUgaW5wdXQgc3Vic3lzdGVtIGN1cnJlbnRs eSBmZWVkcyB0aGUgUExMLgorICoKKyAqIFRoaXMgbmFtZXMgdGhlIHNvdXJjZSBhbmQgbm90aGlu ZyBtb3JlLiAgV2hldGhlciB0aGUgUExMIGlzIGxvY2tlZCB0bworICogaXQgaXMgcmVhZCBmcm9t IHRoZSBvdXRlci1sb29wIGxvY2sgYW5kIHRoZSBsYW5lJ3MgY2xvY2sgbW9uaXRvcjsgaW4KKyAq IGZyZWUtcnVuIHRoZSBQTEwgaXMgZmVkIG5vdGhpbmcgYW5kIHRoZSBidXMgaXMgbm90IGNvbnN1 bHRlZCwgc28gdGhlCisgKiBjYWxsZXIgY2hlY2tzIHRoZSBtb2RlIGZpcnN0LgorICoKKyAqIEBy ZWYgaXMgdGhlIGxvZ2ljYWwgaW5wdXQgaW5kZXgsIFNJVDk1MzFYX0lOVFNZTkNfUElOX0lEIGZv ciB0aGUKKyAqIGludGVyLVBMTCBzeW5jIG5ldCwgb3IgU0lUOTUzMVhfUkVGX0lOVkFMSUQgd2hl biB0aGUgY29kZSBuYW1lcyBubworICogcmVnaXN0ZXJlZCBpbnB1dC4gIENhbGxlciBtdXN0IGhv bGQgc2l0ZGV2LT5tdWx0aW9wX2xvY2suCisgKi8KK3N0YXRpYyBpbnQgc2l0OTUzMXhfY2hhbl9y b3V0ZWRfcmVmX3JlYWQoc3RydWN0IHNpdDk1MzF4X2RldiAqc2l0ZGV2LAorCQkJCQkgdTggcGxs X2lkeCwgdTggKnJlZikKK3sKKwlpbnQgcmMsIGxvY2tfcmM7CisJdTggdiwgaTsKKworCWxvY2tk ZXBfYXNzZXJ0X2hlbGQoJnNpdGRldi0+bXVsdGlvcF9sb2NrKTsKKworCXJjID0gc2l0OTUzMXhf d3JpdGVfcGxsX3U4KHNpdGRldiwgcGxsX2lkeCwgU0lUOTUzMVhfUExMX1JFR19ERUJVRywKKwkJ CQkgICBTSVQ5NTMxWF9QTExfREVCVUdfVU5MT0NLKTsKKwlpZiAocmMpCisJCXJldHVybiByYzsK KworCXJjID0gc2l0OTUzMXhfd3JpdGVfcGxsX3U4KHNpdGRldiwgcGxsX2lkeCwKKwkJCQkgICBT SVQ5NTMxWF9QTExfUkVHX0RCR19TVEFUVVNfQUREUiwKKwkJCQkgICBTSVQ5NTMxWF9EQkdfU1RB VFVTX1JPVVRFRF9TUkMpOworCWlmIChyYykKKwkJZ290byByZWxvY2s7CisKKwkvKiBUaGUgZmly c3QgcmVhZHMgcmV0dXJuIGVhcmxpZXIgbGF0Y2hlczsgdGhlIGxhc3QgaXMgY3VycmVudC4gKi8K Kwlmb3IgKGkgPSAwOyBpIDwgU0lUOTUzMVhfREJHX1NUQVRVU19SRUFEUzsgaSsrKSB7CisJCXJj ID0gc2l0OTUzMXhfcmVhZF9wbGxfdTgoc2l0ZGV2LCBwbGxfaWR4LAorCQkJCQkgIFNJVDk1MzFY X1BMTF9SRUdfREJHX1NUQVRVU19EQVRBLAorCQkJCQkgICZ2KTsKKwkJaWYgKHJjKQorCQkJZ290 byByZWxvY2s7CisJfQorCisJLyoKKwkgKiBDYW5vbmljYWxpc2UgbGlrZSB0aGUgdGFibGUgZW50 cmllczogYSBkaWZmZXJlbnRpYWwgcGFpciBmZWQKKwkgKiB0aHJvdWdoIGl0cyBOLWxhbmUgY29k ZSBpcyB0aGUgUC1sYW5lIHBpbi4KKwkgKi8KKwl2ID0gc2l0OTUzMXhfcHJpb19zcmNfY2Fub24o c2l0ZGV2LCB2ICYgU0lUOTUzMVhfREJHX1JPVVRFRF9TUkNfTUFTSyk7CisJKnJlZiA9IHNpdDk1 MzF4X2h3X3NyY19pbnB1dCh2KTsKKworcmVsb2NrOgorCS8qCisJICogTG9jayB0aGUgZGVidWcg cmVnaXN0ZXJzIGFnYWluLiAgQSByZWFkIHRoYXQgZmFpbGVkIGlzIHJlcG9ydGVkCisJICogYWhl YWQgb2YgYSBsb2NrIHRoYXQgZGlkOyBhIGxvY2sgdGhhdCBmYWlsZWQgb24gaXRzIG93biBsZWF2 ZXMgdGhlCisJICogcGFnZSBvcGVuIHRvIGEgc3RyYXkgd3JpdGUgYW5kIGlzIHJlcG9ydGVkIHRv by4KKwkgKi8KKwlsb2NrX3JjID0gc2l0OTUzMXhfd3JpdGVfcGxsX3U4KHNpdGRldiwgcGxsX2lk eCwgU0lUOTUzMVhfUExMX1JFR19ERUJVRywKKwkJCQkJU0lUOTUzMVhfUExMX0RFQlVHX0xPQ0sp OworCisJcmV0dXJuIHJjID8gcmMgOiBsb2NrX3JjOworfQorCiAvKgogICogc2l0OTUzMXhfY2hh bl9zdGF0ZV9mZXRjaCAtIHJlYWQgUExMIGNoYW5uZWwgc3RhdHVzIGZyb20gaGFyZHdhcmUKICAq CkBAIC02NjksMTEgKzE1NDksMTEgQEAgc3RhdGljIGludCBzaXQ5NTMxeF9wbGxfaXNfYWN0aXZl KHN0cnVjdCBzaXQ5NTMxeF9kZXYgKnNpdGRldiwgdTggcGxsX2lkeCwKICAqLwogc3RhdGljIGlu dCBzaXQ5NTMxeF9jaGFuX3N0YXRlX2ZldGNoKHN0cnVjdCBzaXQ5NTMxeF9kZXYgKnNpdGRldiwg dTggcGxsX2lkeCkKIHsKLQl1OCBzdGF0dXMsIG91dGVyX2xvbCwgaW5wdXRfc2VsLCBpbm5lcl9s b2wsIGhvX2ZyZWV6ZSwgYWN0aXZlc2VsX3JlZzsKKwl1OCBzdGF0dXMsIG91dGVyX2xvbCwgaW5u ZXJfbG9sLCBob19mcmVlemUsIHBsbF9zdGF0dXNfMTsKIAlzdHJ1Y3Qgc2l0OTUzMXhfY2hhbiAq Y2hhbiA9ICZzaXRkZXYtPmNoYW5bcGxsX2lkeF07CiAJdTggc3Jjc1tTSVQ5NTMxWF9QUklPX01B WF9TTE9UU107Ci0JdTggcGxsX3N0YXR1c18xOwotCWJvb2wgYWN0aXZlOworCXU4IHJvdXRlZCA9 IFNJVDk1MzFYX1JFRl9JTlZBTElEOworCWJvb2wgYWN0aXZlLCB0cmFja2luZzsKIAlpbnQgcmM7 CiAKIAkvKgpAQCAtNjk2LDIyICsxNTc2LDYgQEAgc3RhdGljIGludCBzaXQ5NTMxeF9jaGFuX3N0 YXRlX2ZldGNoKHN0cnVjdCBzaXQ5NTMxeF9kZXYgKnNpdGRldiwgdTggcGxsX2lkeCkKIAlpZiAo cmMpCiAJCXJldHVybiByYzsKIAotCS8qCi0JICogUmVhZCB0aGUgaW5wdXQgc291cmNlIHRoZSBQ TEwgaGFzIGN1cnJlbnRseSBzZWxlY3RlZCBhcyBpdHMKLQkgKiBhY3RpdmUgcmVmZXJlbmNlLiAg VGhpcyBsaXZlcyBpbiB0aGUgbG93IG5pYmJsZSBvZiB0aGUgbGFzdAotCSAqIHJlZ2lzdGVyIG9m IHRoZSBQTEwncyBwYWdlLTEgcHJpb3JpdHkgYmxvY2sgKENMS19BQ1RJVkVTRUxfUExMKSwKLQkg KiBub3Qgb24gdGhlIFBMTCBwYWdlIC0tIFBMTC1wYWdlIDB4MjkgaXMgYSBjb25maWcgcmVnaXN0 ZXIuCi0JICovCi0JYWN0aXZlc2VsX3JlZyA9IFNJVDk1MzFYX1BSSU9fQkFTRV9SRUcgKwotCQkJ U0lUOTUzMVhfUFJJT19SRUdTX1BFUl9QTEwgKiBwbGxfaWR4ICsKLQkJCVNJVDk1MzFYX1BSSU9f QUNUSVZFU0VMX09GRjsKLQlyYyA9IHNpdDk1MzF4X3JlYWRfdTgoc2l0ZGV2LAotCQkJICAgICAg U0lUOTUzMVhfUkVHKFNJVDk1MzFYX1BBR0VfUFJJT1NZUywKLQkJCQkJICAgYWN0aXZlc2VsX3Jl ZyksCi0JCQkgICAgICAmaW5wdXRfc2VsKTsKLQlpZiAocmMpCi0JCXJldHVybiByYzsKLQogCXJj ID0gc2l0OTUzMXhfcmVhZF91OChzaXRkZXYsIFNJVDk1MzFYX1JFR19QTExfSU5ORVJfTE9MX1NU QVRVUywKIAkJCSAgICAgICZpbm5lcl9sb2wpOwogCWlmIChyYykKQEAgLTcyMiw2ICsxNTg2LDIx IEBAIHN0YXRpYyBpbnQgc2l0OTUzMXhfY2hhbl9zdGF0ZV9mZXRjaChzdHJ1Y3Qgc2l0OTUzMXhf ZGV2ICpzaXRkZXYsIHU4IHBsbF9pZHgpCiAJaWYgKHJjKQogCQlyZXR1cm4gcmM7CiAKKwkvKgor CSAqIFRoZSByZWZlcmVuY2UgdGhlIGRldmljZSBmZWVkcyB0aGUgUExMLCByZWFkIG9ubHkgd2hp bGUgdGhlIFBMTAorCSAqIHRyYWNrcyBvbmUgLS0gcnVubmluZywgbG9ja2VkLCBvdXRlciBsb29w IG9uLCBub3QgZnJvemVuIC0tIHdoaWNoCisJICogaXMgdGhlIG9ubHkgY2FzZSB0aGUgcGluIHN0 YXRlIHJlcG9ydHMgaXQuICBJbiBmcmVlLXJ1biB0aGUgUExMCisJICogaXMgZmVkIG5vdGhpbmcg YW5kIHRoZSBzdGF0dXMgYnVzIGlzIG5vdCBjb25zdWx0ZWQuCisJICovCisJdHJhY2tpbmcgPSBh Y3RpdmUgJiYgIShvdXRlcl9sb2wgJiBCSVQocGxsX2lkeCkpICYmCisJCSAgICEoc3RhdHVzICYg U0lUOTUzMVhfUExMX1NUQVRVU19PVVRFUl9ESVMpICYmCisJCSAgICEoaG9fZnJlZXplICYgQklU KHBsbF9pZHgpKTsKKwlpZiAodHJhY2tpbmcpIHsKKwkJcmMgPSBzaXQ5NTMxeF9jaGFuX3JvdXRl ZF9yZWZfcmVhZChzaXRkZXYsIHBsbF9pZHgsICZyb3V0ZWQpOworCQlpZiAocmMpCisJCQlyZXR1 cm4gcmM7CisJfQorCiAJcmMgPSBzaXQ5NTMxeF9yZWFkX3BsbF91OChzaXRkZXYsIHBsbF9pZHgs IFNJVDk1MzFYX1BMTF9SRUdfU1RBVFVTXzEsCiAJCQkJICAmcGxsX3N0YXR1c18xKTsKIAlpZiAo cmMpCkBAIC03MzksMTIgKzE2MTgsMjEgQEAgc3RhdGljIGludCBzaXQ5NTMxeF9jaGFuX3N0YXRl X2ZldGNoKHN0cnVjdCBzaXQ5NTMxeF9kZXYgKnNpdGRldiwgdTggcGxsX2lkeCkKIAogCXNpdDk1 MzF4X3ByaW9fbWFza19idWlsZChzaXRkZXYsIHBsbF9pZHgsIHNyY3MpOwogCisJLyoKKwkgKiBU aGUgY29uZmlndXJlZCBwcmlvcml0aWVzIGNvbWUgZnJvbSB0aGUgdGFibGUgdGhlIGZpcnN0IHRp bWUgaXQKKwkgKiBpcyByZWFkLCBhbmQgYWdhaW4gd2hlbmV2ZXIgaXQgbm8gbG9uZ2VyIG1hdGNo ZXMgd2hhdCB0aGUgZHJpdmVyCisJICogbGFzdCB3cm90ZTogc29tZXRoaW5nIGVsc2UgLS0gYSBw cm9maWxlIHJlbG9hZCwgYSBkaXJlY3QgSTJDCisJICogdG9vbCAtLSByZXdyb3RlIGl0LCBhbmQg dGhhdCB0YWJsZSBpcyBub3cgdGhlIGNvbmZpZ3VyYXRpb24uCisJICovCisJaWYgKCFjaGFuLT5z ZWVuX3ZhbGlkIHx8CisJICAgIG1lbWNtcChzcmNzLCBjaGFuLT5zZWVuX3NyY3MsIHNpemVvZihj aGFuLT5zZWVuX3NyY3MpKSkKKwkJc2l0OTUzMXhfcHJpb19jZmdfc2VlZChzaXRkZXYsIHBsbF9p ZHgsIHNyY3MpOworCiAJLyogU1RBVFVTXzFfR0VORVJJQyByZXBvcnRzIGxvc3Mgb2YgbG9jaywg c28gaW52ZXJ0IGl0LiAqLwogCWNoYW4tPmFjdGl2ZSA9IGFjdGl2ZTsKIAljaGFuLT5sb2NrZWQg PSBhY3RpdmUgJiYgIShvdXRlcl9sb2wgJiBCSVQocGxsX2lkeCkpOwogCWNoYW4tPm1vZGUgPSAh IShzdGF0dXMgJiBTSVQ5NTMxWF9QTExfU1RBVFVTX09VVEVSX0RJUyk7Ci0JY2hhbi0+c2VsZWN0 ZWRfcmVmID0KLQkJc2l0OTUzMXhfaHdfc3JjX2lucHV0KGlucHV0X3NlbCAmIFNJVDk1MzFYX1BS SU9fTklCQkxFX01BU0spOworCWNoYW4tPnJvdXRlZF9yZWYgPSByb3V0ZWQ7CiAJY2hhbi0+aW5u ZXJfbG9sID0gISEoaW5uZXJfbG9sICYgQklUKHBsbF9pZHgpKTsKIAljaGFuLT5ob19mcmVlemUg PSAhIShob19mcmVlemUgJiBCSVQocGxsX2lkeCkpOwogCWNoYW4tPmhvX3ZhbGlkID0gISEocGxs X3N0YXR1c18xICYgU0lUOTUzMVhfUExMX1NUQVRVU18xX0hPX1ZBTElEKTsKQEAgLTkxMyw2ICsx ODAxLDEzIEBAIHN0YXRpYyBpbnQgc2l0OTUzMXhfZGV2X3N0YXRlX2ZldGNoKHN0cnVjdCBzaXQ5 NTMxeF9kZXYgKnNpdGRldikKIAkJfQogCX0KIAorCXJjID0gc2l0OTUzMXhfaW5wdXRfbW9uX2Zl dGNoKHNpdGRldik7CisJaWYgKHJjKSB7CisJCWRldl9lcnIoc2l0ZGV2LT5kZXYsCisJCQkiRmFp bGVkIHRvIHJlYWQgdGhlIGlucHV0IGNsb2NrIG1vbml0b3JzOiAlZFxuIiwgcmMpOworCQlyZXR1 cm4gcmM7CisJfQorCiAJLyoKIAkgKiBUaGUgcHJpb3JpdHktdGFibGUgcmVhZCB3YWxrcyB0aGUg UGFnZS0xIHJlZ2lzdGVycywgc28gaXQgcnVucwogCSAqIHdpdGggbXVsdGlvcF9sb2NrIGhlbGQg bGlrZSBldmVyeSBvdGhlciBtdWx0aS1yZWdpc3RlciBzZXF1ZW5jZS4KQEAgLTk0Niw5ICsxODQx LDkgQEAgc3RhdGljIGludCBzaXQ5NTMxeF9kZXZfc3RhdGVfZmV0Y2goc3RydWN0IHNpdDk1MzF4 X2RldiAqc2l0ZGV2KQogCX0KIAogCS8qCi0JICogVGhlIGNoYW5uZWwgZmV0Y2ggd2Fsa3MgdGhl IHByaW9yaXR5IHRhYmxlLCBhIG11bHRpLXJlZ2lzdGVyCi0JICogc2VxdWVuY2UgdGhhdCBleHBl Y3RzIHRoZSBsb2NrOyBub3RoaW5nIHJhY2VzIHdpdGggaXQgeWV0LCBidXQgaXQKLQkgKiBpcyBz ZXJpYWxpemVkIHRoZSBzYW1lIHdheSBhcyBhdCBydW50aW1lLgorCSAqIFRoZSBjaGFubmVsIGZl dGNoIHdhbGtzIHRoZSBwcmlvcml0eSB0YWJsZSBhbmQgdGhlIGRlYnVnIHN0YXR1cworCSAqIGJ1 cywgbXVsdGktcmVnaXN0ZXIgc2VxdWVuY2VzIHRoYXQgZXhwZWN0IHRoZSBsb2NrOyBub3RoaW5n IHJhY2VzCisJICogd2l0aCB0aGVtIHlldCwgYnV0IHRoZXkgYXJlIHNlcmlhbGl6ZWQgdGhlIHNh bWUgd2F5IGFzIGF0IHJ1bnRpbWUuCiAJICovCiAJbXV0ZXhfbG9jaygmc2l0ZGV2LT5tdWx0aW9w X2xvY2spOwogCWZvciAoaSA9IDA7IGkgPCBTSVQ5NTMxWF9OVU1fUExMUzsgaSsrKSB7CkBAIC05 NzYsNiArMTg3MSw3MSBAQCBzdGF0aWMgdm9pZCBzaXQ5NTMxeF9kZXZfcmVmX3N0YXRlc191cGRh dGUoc3RydWN0IHNpdDk1MzF4X2RldiAqc2l0ZGV2KQogCQkJZGV2X3dhcm4oc2l0ZGV2LT5kZXYs CiAJCQkJICJGYWlsZWQgdG8gZ2V0IFJFRiV1IHN0YXR1czogJWRcbiIsIGksIHJjKTsKIAl9CisK KwlyYyA9IHNpdDk1MzF4X2lucHV0X21vbl9mZXRjaChzaXRkZXYpOworCWlmIChyYykKKwkJZGV2 X3dhcm4oc2l0ZGV2LT5kZXYsCisJCQkgIkZhaWxlZCB0byByZWFkIHRoZSBpbnB1dCBjbG9jayBt b25pdG9yczogJWRcbiIsIHJjKTsKK30KKworLyoKKyAqIHNpdDk1MzF4X3JlZl9wbGxfbWFza19y ZWJ1aWxkIC0gcmUtZGVyaXZlIHRoZSBpbnB1dCByZWNlaXZlciByZWZjb3VudHMKKyAqCisgKiBy ZWYtPnBsbF9tYXNrIGRlY2lkZXMgd2hlbiBhbiBpbnB1dCByZWNlaXZlciBtYXkgYmUgcG93ZXJl ZCBkb3duLCBhbmQKKyAqIHRoZSBjb25uZWN0IGFuZCBkaXNjb25uZWN0IHBhdGhzIG1haW50YWlu IGl0IGJ5IGhhbmQuICBBIHJlcXVlc3QgdGhhdAorICogZmFpbGVkIHBhcnQgd2F5IHRocm91Z2gg bGVhdmVzIGl0IGRlc2NyaWJpbmcgYSB0YWJsZSB0aGUgZGV2aWNlIGRvZXMKKyAqIG5vdCBob2xk LCBhbmQgbm90aGluZyBlbHNlIGNvcnJlY3RlZCBpdDogYSBsYXRlciBkaXNjb25uZWN0IGNvdWxk IHRoZW4KKyAqIGRyb3AgdGhlIGNvdW50IHRvIHplcm8gYW5kIGdhdGUgYW4gaW5wdXQgYW5vdGhl ciBQTEwgaXMgc3RpbGwgbG9ja2VkCisgKiB0by4gIFJlLWRlcml2ZSBldmVyeSBtYXNrIGZyb20g dGhlIHRhYmxlcyB0aGUgcG9sbCBoYXMganVzdCByZWFkLiAgTm8KKyAqIGV4dHJhIGJ1cyB0cmFm ZmljIC0tIHNpdDk1MzF4X2NoYW5fc3RhdGVfZmV0Y2goKSByZWZyZXNoZWQgdGhlIG1hc2tzCisg KiB0aGlzIHJlYWRzIGltbWVkaWF0ZWx5IGJlZm9yZS4KKyAqCisgKiBDYWxsZXIgbXVzdCBob2xk IHNpdGRldi0+bXVsdGlvcF9sb2NrLgorICovCitzdGF0aWMgdm9pZCBzaXQ5NTMxeF9yZWZfcGxs X21hc2tfcmVidWlsZChzdHJ1Y3Qgc2l0OTUzMXhfZGV2ICpzaXRkZXYpCit7CisJdTggcGxsX2lk eCwgc3JjLCBpbmRleDsKKworCWZvciAoaW5kZXggPSAwOyBpbmRleCA8IHNpdGRldi0+aW5mby0+ bnVtX2lucHV0czsgaW5kZXgrKykKKwkJc2l0ZGV2LT5yZWZbaW5kZXhdLnBsbF9tYXNrID0gMDsK KworCWZvciAocGxsX2lkeCA9IDA7IHBsbF9pZHggPCBTSVQ5NTMxWF9OVU1fUExMUzsgcGxsX2lk eCsrKSB7CisJCXUxNiBtYXNrID0gc2l0ZGV2LT5jaGFuW3BsbF9pZHhdLnByaW9fbWFzazsKKwor CQlmb3IgKHNyYyA9IDA7IHNyYyA8IFNJVDk1MzFYX1BSSU9fTlVNX1NSQzsgc3JjKyspIHsKKwkJ CWlmICghKG1hc2sgJiBCSVQoc3JjKSkpCisJCQkJY29udGludWU7CisKKwkJCWluZGV4ID0gc2l0 OTUzMXhfaHdfc3JjX2lucHV0KHNyYyk7CisJCQlpZiAoaW5kZXggPCBzaXRkZXYtPmluZm8tPm51 bV9pbnB1dHMpCisJCQkJc2l0ZGV2LT5yZWZbaW5kZXhdLnBsbF9tYXNrIHw9IEJJVChwbGxfaWR4 KTsKKwkJfQorCX0KK30KKworLyoKKyAqIFJlbGVhc2UgYSBmb3JjZWQgaG9sZG92ZXIgdGhhdCBh IHRhYmxlIHdyaXRlIG93ZXMuICBUaGUgd3JpdGUgZm9yY2VzCisgKiBob2xkb3ZlciBhbmQgcmVs ZWFzZXMgaXQgYXQgdGhlIGVuZDsgd2hlbiB0aGUgcmVsZWFzZSBmYWlsZWQsIG5vdGhpbmcKKyAq IGVsc2UgaW4gdGhlIGRyaXZlciBjbGVhcnMgdGhlIGJpdCAtLSBhIHJldHJ5IG9mIHRoZSBzYW1l IHJlcXVlc3QgZmluZHMKKyAqIHRoZSB0YWJsZSBhbHJlYWR5IGFzIGFza2VkIGFuZCBkb2VzIG5v dCBydW4gdGhlIHNlcXVlbmNlIGFnYWluIC0tIHNvCisgKiB0aGUgcG9sbCByZXRyaWVzIGl0IGVh Y2ggdGljayB1bnRpbCBpdCBsYW5kcy4KKyAqCisgKiBDYWxsZXIgbXVzdCBob2xkIHNpdGRldi0+ bXVsdGlvcF9sb2NrLgorICovCitzdGF0aWMgdm9pZCBzaXQ5NTMxeF9ob19yZWxlYXNlX3JldHJ5 KHN0cnVjdCBzaXQ5NTMxeF9kZXYgKnNpdGRldiwgdTggcGxsX2lkeCkKK3sKKwlzdHJ1Y3Qgc2l0 OTUzMXhfY2hhbiAqY2hhbiA9ICZzaXRkZXYtPmNoYW5bcGxsX2lkeF07CisKKwlpZiAoIWNoYW4t PmhvX3JlbGVhc2VfcGVuZGluZykKKwkJcmV0dXJuOworCisJaWYgKHNpdDk1MzF4X3VwZGF0ZV9w bGxfdTgoc2l0ZGV2LCBwbGxfaWR4LCBTSVQ5NTMxWF9QTExfUkVHX0hPX0NUUkwsCisJCQkJICAg QklUKFNJVDk1MzFYX1BMTF9IT19GT1JDRV9CSVQpLCAwKSkKKwkJcmV0dXJuOworCisJY2hhbi0+ aG9fcmVsZWFzZV9wZW5kaW5nID0gZmFsc2U7CisJZGV2X2luZm8oc2l0ZGV2LT5kZXYsICJQTEwl YzogZm9yY2VkIGhvbGRvdmVyIHJlbGVhc2VkXG4iLAorCQkgJ0EnICsgcGxsX2lkeCk7CiB9CiAK IHN0YXRpYyB2b2lkIHNpdDk1MzF4X2Rldl9jaGFuX3N0YXRlc191cGRhdGUoc3RydWN0IHNpdDk1 MzF4X2RldiAqc2l0ZGV2KQpAQCAtOTgzLDEyICsxOTQzLDE1IEBAIHN0YXRpYyB2b2lkIHNpdDk1 MzF4X2Rldl9jaGFuX3N0YXRlc191cGRhdGUoc3RydWN0IHNpdDk1MzF4X2RldiAqc2l0ZGV2KQog CWludCBpLCByYzsKIAogCWZvciAoaSA9IDA7IGkgPCBTSVQ5NTMxWF9OVU1fUExMUzsgaSsrKSB7 CisJCXNpdDk1MzF4X2hvX3JlbGVhc2VfcmV0cnkoc2l0ZGV2LCBpKTsKIAkJcmMgPSBzaXQ5NTMx eF9jaGFuX3N0YXRlX2ZldGNoKHNpdGRldiwgaSk7CiAJCWlmIChyYykKIAkJCWRldl93YXJuKHNp dGRldi0+ZGV2LAogCQkJCSAiRmFpbGVkIHRvIGdldCBQTEwlYyBzdGF0ZTogJWRcbiIsCiAJCQkJ ICdBJyArIGksIHJjKTsKIAl9CisKKwlzaXQ5NTMxeF9yZWZfcGxsX21hc2tfcmVidWlsZChzaXRk ZXYpOwogfQogCiAvKgpAQCAtMTI4MCw2ICsyMjQzLDg0IEBAIHN0YXRpYyB2b2lkIHNpdDk1MzF4 X3BsbF9zdGF0ZXNfcmVwb3J0KHN0cnVjdCBzaXQ5NTMxeF9kZXYgKnNpdGRldikKIAl9CiB9CiAK Ky8qCisgKiBzaXQ5NTMxeF9pbnB1dF9waW5faXNfcmVnaXN0cmFibGUgLSBjaGVjayBpZiBhbiBp bnB1dCBwaW4gaXMgcmVnaXN0cmFibGUKKyAqCisgKiBTcGxpdCBvdXQgc28gaW5wdXQtbW9kZWwg Y2hhbmdlcyBzdGF5IGxvY2FsIHRvIHRoaXMgaGVscGVyLgorICoKKyAqIFJldHVybjogdHJ1ZSBp ZiB0aGUgaW5wdXQgcGluIHNob3VsZCBiZSByZWdpc3RlcmVkLCBmYWxzZSBvdGhlcndpc2UKKyAq Lworc3RhdGljIGJvb2wgc2l0OTUzMXhfaW5wdXRfcGluX2lzX3JlZ2lzdHJhYmxlKHN0cnVjdCBz aXQ5NTMxeF9kZXYgKnNpdGRldiwKKwkJCQkJICAgICAgdTggaW5kZXgpCit7CisJaWYgKGluZGV4 ID49IHNpdGRldi0+aW5mby0+bnVtX2lucHV0cykKKwkJcmV0dXJuIGZhbHNlOworCisJLyoKKwkg KiBUaGUgTiBsYW5lIG9mIGEgZGlmZmVyZW50aWFsbHktY29uZmlndXJlZCBwYWlyIGlzIG5vdCBh CisJICogc3RhbmRhbG9uZSBpbnB1dCBhbmQgaXMgc2tpcHBlZCAoemwzMDczeCBtb2RlbCkuCisJ ICovCisJaWYgKHNpdDk1MzF4X2lucHV0X2lzX24oaW5kZXgpICYmCisJICAgIHNpdGRldi0+cmVm W2luZGV4XS5zaWdfbW9kZSA9PSBTSVQ5NTMxWF9NT0RFX0RFKQorCQlyZXR1cm4gZmFsc2U7CisK KwlyZXR1cm4gdHJ1ZTsKK30KKworLyoKKyAqIFdhcm4gYWJvdXQgYSBwaW4gbm9kZSBpbiB0aGUg ZmlybXdhcmUgZGVzY3JpcHRpb24gd2hvc2UgcmVnIG5hbWVzIG5vCisgKiBwaW4gdGhpcyBkZXZp Y2UgY2FuIGhhdmU6IGFuIGlucHV0IGxhbmUgb3IgYW4gb3V0cHV0IHRoZSB2YXJpYW50IGRvZXMK KyAqIG5vdCBoYXZlLCBvciB0aGUgTiBsYW5lIG9mIGEgcGFpciB0aGUgY29uZmlndXJhdGlvbiBy dW5zIGRpZmZlcmVudGlhbC4KKyAqIE5vZGVzIGFyZSBsb29rZWQgdXAgZnJvbSB0aGUgcGlucyAo c2l0OTUzMXhfcGluX3Byb3BzX2dldCgpKSwgc28gc3VjaCBhCisgKiBub2RlIHdvdWxkIG90aGVy d2lzZSBoYXZlIGl0cyBsYWJlbCBhbmQgZnJlcXVlbmNpZXMgZHJvcHBlZCB3aXRob3V0IGEKKyAq IHdvcmQuICBUaGUgYmluZGluZyBib3VuZHMgcmVnIHBlciB2YXJpYW50OyB0aGlzIGNhdGNoZXMg d2hhdCByZWFjaGVzCisgKiB0aGUgZHJpdmVyIHVudmFsaWRhdGVkLCBhbmQgdGhlIHBhaXIgbW9k ZSwgd2hpY2ggb25seSB0aGUgbG9hZGVkCisgKiBjb25maWd1cmF0aW9uIGRlY2lkZXMuICBBbiBv dXRwdXQgdGhhdCBleGlzdHMgYnV0IHRoYXQgbm8gUExMIGRyaXZlcworICogZ2V0cyBubyBwaW4g ZWl0aGVyIGFuZCBpcyBub3QgcmVwb3J0ZWQ6IHdoaWNoIG91dHB1dHMgYSBjb25maWd1cmF0aW9u CisgKiB1c2VzIGlzIG5vdCBhIGZhdWx0IGluIHRoZSBkZXNjcmlwdGlvbi4KKyAqLworc3RhdGlj IHZvaWQgc2l0OTUzMXhfcGluX25vZGVzX2NoZWNrKHN0cnVjdCBzaXQ5NTMxeF9kZXYgKnNpdGRl dikKK3sKKwlzdHJ1Y3QgZndub2RlX2hhbmRsZSAqcGlucywgKm5vZGU7CisJYm9vbCBmb3VuZDsK Kwl1MzIgcmVnOworCXU4IGk7CisKKwlwaW5zID0gZGV2aWNlX2dldF9uYW1lZF9jaGlsZF9ub2Rl KHNpdGRldi0+ZGV2LCAiaW5wdXQtcGlucyIpOworCWZ3bm9kZV9mb3JfZWFjaF9jaGlsZF9ub2Rl KHBpbnMsIG5vZGUpIHsKKwkJaWYgKGZ3bm9kZV9wcm9wZXJ0eV9yZWFkX3UzMihub2RlLCAicmVn IiwgJnJlZykpCisJCQljb250aW51ZTsKKwkJaWYgKHJlZyA8IHNpdGRldi0+aW5mby0+bnVtX2lu cHV0cyAmJgorCQkgICAgc2l0OTUzMXhfaW5wdXRfcGluX2lzX3JlZ2lzdHJhYmxlKHNpdGRldiwg cmVnKSkKKwkJCWNvbnRpbnVlOworCQlkZXZfd2FybihzaXRkZXYtPmRldiwKKwkJCSAiaW5wdXQt cGlucy8lcGZ3UDogcmVnICV1IGlzICVzLCBub2RlIGlnbm9yZWRcbiIsCisJCQkgbm9kZSwgcmVn LAorCQkJIHJlZyA8IHNpdGRldi0+aW5mby0+bnVtX2lucHV0cyA/CisJCQkgInRoZSBOIGxhbmUg b2YgYSBkaWZmZXJlbnRpYWwgcGFpciIgOgorCQkJICJub3QgYW4gaW5wdXQgbGFuZSIpOworCX0K Kwlmd25vZGVfaGFuZGxlX3B1dChwaW5zKTsKKworCXBpbnMgPSBkZXZpY2VfZ2V0X25hbWVkX2No aWxkX25vZGUoc2l0ZGV2LT5kZXYsICJvdXRwdXQtcGlucyIpOworCWZ3bm9kZV9mb3JfZWFjaF9j aGlsZF9ub2RlKHBpbnMsIG5vZGUpIHsKKwkJaWYgKGZ3bm9kZV9wcm9wZXJ0eV9yZWFkX3UzMihu b2RlLCAicmVnIiwgJnJlZykpCisJCQljb250aW51ZTsKKwkJZm91bmQgPSBmYWxzZTsKKwkJZm9y IChpID0gMDsgaSA8IHNpdGRldi0+aW5mby0+bnVtX291dHB1dHM7IGkrKykgeworCQkJaWYgKHNp dGRldi0+aW5mby0+Y2xrb3V0X21hcFtpXSA9PSByZWcpIHsKKwkJCQlmb3VuZCA9IHRydWU7CisJ CQkJYnJlYWs7CisJCQl9CisJCX0KKwkJaWYgKCFmb3VuZCkKKwkJCWRldl93YXJuKHNpdGRldi0+ ZGV2LAorCQkJCSAib3V0cHV0LXBpbnMvJXBmd1A6IHJlZyAldSBpcyBub3QgYW4gb3V0cHV0IG9m ICVzLCBub2RlIGlnbm9yZWRcbiIsCisJCQkJIG5vZGUsIHJlZywgc2l0ZGV2LT5pbmZvLT5uYW1l KTsKKwl9CisJZndub2RlX2hhbmRsZV9wdXQocGlucyk7Cit9CisKIC8qCiAgKiBzaXQ5NTMxeF9k ZXZfc3RhcnQgLSBzdGFydCBub3JtYWwgb3BlcmF0aW9uCiAgKgpAQCAtMTMwMiw2ICsyMzQzLDgg QEAgc3RhdGljIGludCBzaXQ5NTMxeF9kZXZfc3RhcnQoc3RydWN0IHNpdDk1MzF4X2RldiAqc2l0 ZGV2KQogCXNpdDk1MzF4X3BsbF9zdGF0ZXNfcmVwb3J0KHNpdGRldik7CiAJbXV0ZXhfdW5sb2Nr KCZzaXRkZXYtPm11bHRpb3BfbG9jayk7CiAKKwlzaXQ5NTMxeF9waW5fbm9kZXNfY2hlY2soc2l0 ZGV2KTsKKwogCWxpc3RfZm9yX2VhY2hfZW50cnkoc2l0ZHBsbCwgJnNpdGRldi0+ZHBsbHMsIGxp c3QpIHsKIAkJcmMgPSBzaXQ5NTMxeF9kcGxsX3JlZ2lzdGVyKHNpdGRwbGwpOwogCQlpZiAocmMp IHsKQEAgLTE0ODMsOSArMjUyNiw5IEBAIHN0YXRpYyB2b2lkIHNpdDk1MzF4X2RwbGxfcGluc191 bnJlZ2lzdGVyKHN0cnVjdCBzaXQ5NTMxeF9kcGxsICpzaXRkcGxsKQogICogQGRpcjoJcGluIGRp cmVjdGlvbgogICogQGluZGV4OglwaW4gaGFyZHdhcmUgaW5kZXgKICAqCi0gKiBPbmx5IHRoZSBY TyBwaW4gaGFzIGEgY29tcGxldGUgcGluLW9wIHRhYmxlIGluIHRoaXMgcGF0Y2gsIHNvIG9ubHkK LSAqIHRoZSBYTyBwaW4gaXMgcmVnaXN0cmFibGUgaGVyZS4gIE90aGVyIHBpbiBjbGFzc2VzIGFy ZSByZWdpc3RlcmVkCi0gKiBvbmNlIHRoZWlyIHN0YXRlIGNhbGxiYWNrcyBsYW5kIGluIHRoZSBm b2xsb3dpbmcgcGF0Y2hlcy4KKyAqIEZvciBpbnB1dCBwaW5zOiBkZWxlZ2F0ZSB0byBzaXQ5NTMx eF9pbnB1dF9waW5faXNfcmVnaXN0cmFibGUoKS4KKyAqIEEgcGluIGNsYXNzIHdob3NlIHN0YXRl IGNhbGxiYWNrIHRoZSB0cmVlIGRvZXMgbm90IGhhdmUgeWV0IGlzIG5vdAorICogcmVnaXN0cmFi bGU6IHRoZSBjb3JlIHJlZnVzZXMgYSBwaW4gd2l0aG91dCBvbmUuCiAgKgogICogUmV0dXJuOiB0 cnVlIGlmIHBpbiBzaG91bGQgYmUgcmVnaXN0ZXJlZCwgZmFsc2Ugb3RoZXJ3aXNlCiAgKi8KQEAg LTE0OTMsMTUgKzI1MzYsMTUgQEAgc3RhdGljIGJvb2wgc2l0OTUzMXhfZHBsbF9waW5faXNfcmVn aXN0cmFibGUoc3RydWN0IHNpdDk1MzF4X2RwbGwgKnNpdGRwbGwsCiAJCQkJCSAgICAgZW51bSBk cGxsX3Bpbl9kaXJlY3Rpb24gZGlyLAogCQkJCQkgICAgIHU4IGluZGV4KQogewotCS8qCi0JICog T25seSB0aGUgWE8gcGluIGhhcyBhIGNvbXBsZXRlIHBpbi1vcCB0YWJsZSBpbiB0aGlzIHBhdGNo LgotCSAqIE90aGVyIHBpbiBjbGFzc2VzIGFyZSByZWdpc3RlcmVkIG9uY2UgdGhlaXIgc3RhdGUg Y2FsbGJhY2tzCi0JICogbGFuZCBpbiB0aGUgZm9sbG93aW5nIHBhdGNoZXMuCi0JICovCisJc3Ry dWN0IHNpdDk1MzF4X2RldiAqc2l0ZGV2ID0gc2l0ZHBsbC0+ZGV2OworCiAJaWYgKGRpciAhPSBE UExMX1BJTl9ESVJFQ1RJT05fSU5QVVQpCiAJCXJldHVybiBmYWxzZTsKIAotCXJldHVybiBpbmRl eCA9PSBTSVQ5NTMxWF9NQVhfSU5QVVRTOworCWlmIChpbmRleCA9PSBTSVQ5NTMxWF9NQVhfSU5Q VVRTKQorCQlyZXR1cm4gdHJ1ZTsKKworCXJldHVybiBzaXQ5NTMxeF9pbnB1dF9waW5faXNfcmVn aXN0cmFibGUoc2l0ZGV2LCBpbmRleCk7CiB9CiAKIC8qCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Rw bGwvc2l0OTUzMXgvY29yZS5oIGIvZHJpdmVycy9kcGxsL3NpdDk1MzF4L2NvcmUuaAppbmRleCBj ODg4MjJkNTQyYzAuLjA3YTBhZTQ3YzA1NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9kcGxsL3NpdDk1 MzF4L2NvcmUuaAorKysgYi9kcml2ZXJzL2RwbGwvc2l0OTUzMXgvY29yZS5oCkBAIC0zOCw3ICsz OCw3IEBACiAjZGVmaW5lIFNJVDk1MzFYX0lOVFNZTkNfT1VUX1BJTl9JRAlTSVQ5NTMxWF9NQVhf T1VUUFVUUwogI2RlZmluZSBTSVQ5NTMxWF9TVEFUVVNfUE9MTF9NUwkJNTAwCiAKLS8qIHNlbGVj dGVkX3JlZiB2YWx1ZSB3aGVuIHRoZSBhY3RpdmUgc291cmNlIGlzIG5vdCBhIHJlZ2lzdGVyZWQg aW5wdXQgKi8KKy8qIHJvdXRlZF9yZWYgdmFsdWUgd2hlbiB0aGUgUExMIGlzIGZlZCBubyByZWdp c3RlcmVkIGlucHV0ICovCiAjZGVmaW5lIFNJVDk1MzFYX1JFRl9JTlZBTElECQkweEZGCiAKIC8q IFNpVGltZSBJRUVFIE9VSSBmb3IgRVVJLTY0IGdlbmVyYXRpb24gKi8KQEAgLTc3LDYgKzc3LDkg QEAgZW51bSBzaXQ5NTMxeF9zaWduYWxfbW9kZSB7CiAgKiBAZnJlcToJCWNvbmZpZ3VyZWQgZnJl cXVlbmN5IGluIEh6CiAgKiBAZW5hYmxlZDoJCXRoZSBsYW5lJ3MgcmVjZWl2ZXIgaXMgb24KICAq IEBwbGxfbWFzazoJCWJpdG1hc2sgb2YgUExMcyB0aGlzIGlucHV0IGZlZWRzIChiaXQgMCA9IFBM TEEpCisgKiBAbG9zOgkJdGhlIGNsb2NrIG1vbml0b3IgcmVwb3J0cyBsb3NzIG9mIHNpZ25hbCBv biB0aGUgbGFuZQorICogQHF1YWxfZmFpbDoJCXRoZSBjbG9jayBtb25pdG9yIHJlcG9ydHMgYSBm cmVxdWVuY3kgZHJpZnQgb24gdGhlCisgKgkJCWxhbmUgd2hpbGUgaXQgc3RpbGwgaGFzIHNpZ25h bAogICogQHNpZ19tb2RlOgkJc2lnbmFsIG1vZGUgb2YgdGhlIHBhaXIgdGhpcyBsYW5lIGJlbG9u Z3MgdG8KICAqCQkJKGRldGVjdGVkIGZyb20gQ0xLSU54X0lOUFVUX01PREUgYXQgcHJvYmUpCiAg Ki8KQEAgLTg0LDYgKzg3LDggQEAgc3RydWN0IHNpdDk1MzF4X3JlZiB7CiAJdTY0CQlmcmVxOwog CWJvb2wJCWVuYWJsZWQ7CiAJdTgJCXBsbF9tYXNrOworCWJvb2wJCWxvczsKKwlib29sCQlxdWFs X2ZhaWw7CiAJZW51bSBzaXQ5NTMxeF9zaWduYWxfbW9kZQlzaWdfbW9kZTsKIH07CiAKQEAgLTEx MywxNSArMTE4LDI1IEBAIHN0cnVjdCBzaXQ5NTMxeF9vdXQgewogICoJCQlsb3NzLW9mLWxvY2sg Yml0IHN0YXlzIGNsZWFyIGJlY2F1c2Ugbm90aGluZyBkcml2ZXMgaXQKICAqIEBsb2NrZWQ6CQlQ TEwgaXMgYWN0aXZlIGFuZCBpdHMgb3V0ZXIgbG9vcCByZXBvcnRzIGxvY2sKICAqIEBtb2RlOgkJ MCA9IHN5bmMgKG91dGVyIGxvb3AgZW5hYmxlZCksIDEgPSBmcmVlLXJ1bgotICogQHNlbGVjdGVk X3JlZjoJbG9naWNhbCBpbnB1dCBpbmRleCBvZiB0aGUgY3VycmVudGx5IHNlbGVjdGVkCi0gKgkJ CXJlZmVyZW5jZSAodGhlIElOVFNZTkMgbmV0IG1hcHMgdG8KLSAqCQkJU0lUOTUzMVhfSU5UU1lO Q19QSU5fSUQpLCBvciBTSVQ5NTMxWF9SRUZfSU5WQUxJRAotICoJCQl3aGVuIHRoZSBoYXJkd2Fy ZSBzb3VyY2UgZW5jb2RpbmcgaXMgcmVzZXJ2ZWQKKyAqIEByb3V0ZWRfcmVmOgkJbG9naWNhbCBp bnB1dCBpbmRleCBvZiB0aGUgcmVmZXJlbmNlIHRoZSBkZXZpY2UKKyAqCQkJZmVlZHMgdGhlIFBM TCB3aGlsZSBpdCB0cmFja3Mgb25lICh0aGUgSU5UU1lOQyBuZXQKKyAqCQkJbWFwcyB0byBTSVQ5 NTMxWF9JTlRTWU5DX1BJTl9JRCk7IFNJVDk1MzFYX1JFRl9JTlZBTElECisgKgkJCXdoZW4gdGhl IFBMTCB0cmFja3Mgbm90aGluZyAtLSBmcmVlLXJ1biwgZnJvemVuLAorICoJCQl1bmxvY2tlZCAt LSBvciB0aGUgc291cmNlIGNvZGUgbmFtZXMgbm8gcmVnaXN0ZXJlZAorICoJCQlpbnB1dAogICog QGlubmVyX2xvbDoJCVBMTCBpbm5lciBsb29wIGxvc3Mtb2YtbG9jayBkZXRlY3RlZAogICogQGhv X2ZyZWV6ZToJCWhvbGRvdmVyIGZyZWV6ZSBhY3RpdmUKICAqIEBob192YWxpZDoJCWhvbGRvdmVy IG1lbW9yeSBhY3F1aXJlZCwgaS5lLiB0aGUgaG9sZG92ZXIgd2luZG93CiAgKgkJCWhvbGRzIGEg dmFsaWQgZXN0aW1hdGUgdG8gZmFsbCBiYWNrIG9uCi0gKiBAcHJpb19tYXNrOgkJYml0IHBlciBo YXJkd2FyZSBzb3VyY2UgY29kZSBwcmVzZW50IGluIHRoaXMgUExMJ3MKKyAqIEBob19yZWxlYXNl X3BlbmRpbmc6CWEgdGFibGUgd3JpdGUgZm9yY2VkIGhvbGRvdmVyIGFuZCBjb3VsZCBub3QgcmVs ZWFzZQorICoJCQlpdDsgdGhlIHBvbGwgcmV0cmllcyB0aGUgcmVsZWFzZSB1bnRpbCBpdCBsYW5k cworICogQHByaW9fc3JjczoJCWNhY2hlZCBjb3B5IG9mIHRoZSBwcmlvcml0eSB0YWJsZSwgb25l IHNvdXJjZSBjb2RlCisgKgkJCXBlciBzbG90OyByZWZyZXNoZWQgdG9nZXRoZXIgd2l0aCBAcHJp b19tYXNrLCBpdCBpcworICoJCQl3aGF0IGEgcmVidWlsdCB0YWJsZSBpcyBjb21wYXJlZCBhZ2Fp bnN0CisgKiBAcHJpb19sYXN0OgkJZmlyc3Qgc2xvdCBlYWNoIHNvdXJjZSBvY2N1cGllcywgcGx1 cyBvbmUgKDAgPSB0aGUKKyAqCQkJc291cmNlIGlzIG5vdCBpbiB0aGUgdGFibGUpOyByZWZyZXNo ZWQgZnJvbSB0aGUgc2FtZQorICoJCQlzY2FuIGFzIEBwcmlvX21hc2ssIHNvIHRoZSB0d28gbmV2 ZXIgZGlzYWdyZWUKKyAqIEBwcmlvX21hc2s6CQliaXQgcGVyIGNhbm9uaWNhbCBzb3VyY2UgcHJl c2VudCBpbiB0aGlzIFBMTCdzCiAgKgkJCXByaW9yaXR5IHRhYmxlLCBpLmUuIHRoZSBzb3VyY2Vz IGl0IG1heSBzZWxlY3QuICBSZWFkCiAgKgkJCWJhY2sgZnJvbSB0aGUgdGFibGUgYnkgdGhlIHBl cmlvZGljIHdvcmtlciBhbmQKICAqCQkJcmVmcmVzaGVkIGJ5IGV2ZXJ5IHRhYmxlIHdyaXRlLCBz byBpdCB0cmFja3MgdGhlCkBAIC0xNDEsMTAgKzE1NiwxMyBAQCBzdHJ1Y3Qgc2l0OTUzMXhfY2hh biB7CiAJYm9vbAkJYWN0aXZlOwogCWJvb2wJCWxvY2tlZDsKIAl1OAkJbW9kZTsKLQl1OAkJc2Vs ZWN0ZWRfcmVmOworCXU4CQlyb3V0ZWRfcmVmOwogCWJvb2wJCWlubmVyX2xvbDsKIAlib29sCQlo b19mcmVlemU7CiAJYm9vbAkJaG9fdmFsaWQ7CisJYm9vbAkJaG9fcmVsZWFzZV9wZW5kaW5nOwor CXU4CQlwcmlvX3NyY3NbU0lUOTUzMVhfUFJJT19NQVhfU0xPVFNdOworCXU4CQlwcmlvX2xhc3Rb U0lUOTUzMVhfUFJJT19OVU1fU1JDXTsKIAl1MTYJCXByaW9fbWFzazsKIAl1OAkJY2ZnX3ByaW9b U0lUOTUzMVhfUFJJT19OVU1fU1JDXTsKIAl1MTYJCWNmZ19rbm93bjsKQEAgLTIyMiw4ICsyNDAs MTggQEAgaW50IHNpdDk1MzF4X3VwZGF0ZV9wbGxfdTgoc3RydWN0IHNpdDk1MzF4X2RldiAqc2l0 ZGV2LCB1OCBwbGxfaWR4LAogCQkJICAgdTggb2Zmc2V0LCB1OCBtYXNrLCB1OCB2YWwpOwogCiAv KiAtLS0tIElucHV0IGVuYWJsZS9kaXNhYmxlIC0tLS0gKi8KK2ludCBzaXQ5NTMxeF9pbnB1dF9k aXNhYmxlKHN0cnVjdCBzaXQ5NTMxeF9kZXYgKnNpdGRldiwgdTggaW5kZXgpOworaW50IHNpdDk1 MzF4X2lucHV0X2VuYWJsZShzdHJ1Y3Qgc2l0OTUzMXhfZGV2ICpzaXRkZXYsIHU4IGluZGV4KTsK IAogLyogLS0tLSBJbnB1dCBwcmlvcml0eSAtLS0tICovCitib29sIHNpdDk1MzF4X2lucHV0X3By aW9fcHJlc2VudChzdHJ1Y3Qgc2l0OTUzMXhfZGV2ICpzaXRkZXYsCisJCQkJIHU4IHBsbF9pZHgs IHU4IGlucHV0X2lkeCk7CitpbnQgc2l0OTUzMXhfaW5wdXRfcHJpb19zZXQoc3RydWN0IHNpdDk1 MzF4X2RldiAqc2l0ZGV2LCB1OCBwbGxfaWR4LAorCQkJICAgIHU4IGlucHV0X2lkeCwgdTggcHJp byk7CitpbnQgc2l0OTUzMXhfaW5wdXRfcHJpb19yZW1vdmUoc3RydWN0IHNpdDk1MzF4X2RldiAq c2l0ZGV2LCB1OCBwbGxfaWR4LAorCQkJICAgICAgIHU4IGlucHV0X2lkeCk7CitpbnQgc2l0OTUz MXhfaW5wdXRfcHJpb19hZGQoc3RydWN0IHNpdDk1MzF4X2RldiAqc2l0ZGV2LCB1OCBwbGxfaWR4 LAorCQkJICAgIHU4IGlucHV0X2lkeCk7CiAKIC8qIC0tLS0gT3V0cHV0IGVuYWJsZS9kaXNhYmxl IChIaS1aIGNvbnRyb2wpIC0tLS0gKi8KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9kcGxsL3NpdDk1 MzF4L2RwbGwuYyBiL2RyaXZlcnMvZHBsbC9zaXQ5NTMxeC9kcGxsLmMKaW5kZXggZTg4ZmE0ZTI5 YmRmLi40YzdjYWU0Y2U5M2UgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZHBsbC9zaXQ5NTMxeC9kcGxs LmMKKysrIGIvZHJpdmVycy9kcGxsL3NpdDk1MzF4L2RwbGwuYwpAQCAtMzQsMTEgKzM0LDMxIEBA IHNpdDk1MzF4X2RwbGxfaXNfeG9fcGluKGNvbnN0IHN0cnVjdCBzaXQ5NTMxeF9kcGxsX3BpbiAq cGluKQogCSAgICAgICBwaW4tPmlkID09IFNJVDk1MzFYX01BWF9JTlBVVFM7CiB9CiAKKy8qCisg KiBTdGF0dXMgb2YgYSBQTEwgd2hvc2Ugb3V0ZXIgbG9vcCBpcyBmcm96ZW4gaW4gaG9sZG92ZXIu CisgKgorICogVGhlIGludGVyZmFjZSBoYXMgYSBQTEwgcmVwb3J0IGhvbGRvdmVyIGZvciBhIGhv bGQgZm9yY2VkIGJ5CisgKiBkaXNjb25uZWN0aW5nIGV2ZXJ5IGlucHV0IG9ubHkgd2hlbiBpdCB3 YXMgTE9DS0VEX0hPX0FDUSBiZWZvcmUsIHRoYXQKKyAqIGlzLCB3aGVuIGl0IGhhcyBhIHZhbGlk IGhvbGRvdmVyIGVzdGltYXRlIHRvIHJ1biBvbjsgd2l0aG91dCBvbmUgaXQKKyAqIHN0YXlzIFVO TE9DS0VELiAgUmVtb3ZpbmcgdGhlIGxhc3Qgc291cmNlIGZyb20gYSBQTEwncyB0YWJsZSBmb3Jj ZXMKKyAqIGV4YWN0bHkgdGhhdCBob2xkLCBzbyBhIGZyb3plbiBQTEwgdGhhdCBsaXN0cyBubyBz b3VyY2UgaXMgaW4gaG9sZG92ZXIKKyAqIG9ubHkgd2hpbGUgaXRzIG1lbW9yeSBpcyB2YWxpZC4g IEEgUExMIGZyb3plbiB3aXRoIHNvdXJjZXMgc3RpbGwgbGlzdGVkCisgKiBsb3N0IGl0cyBsb2Nr LCBhbmQgaXMgaW4gaG9sZG92ZXIgb24gdGhlIGRldmljZSdzIHNheS1zby4KKyAqLworc3RhdGlj IGVudW0gZHBsbF9sb2NrX3N0YXR1cworc2l0OTUzMXhfZHBsbF9mcm96ZW5fc3RhdHVzKGNvbnN0 IHN0cnVjdCBzaXQ5NTMxeF9jaGFuICpjaGFuKQoreworCWlmICghY2hhbi0+cHJpb19tYXNrICYm ICFjaGFuLT5ob192YWxpZCkKKwkJcmV0dXJuIERQTExfTE9DS19TVEFUVVNfVU5MT0NLRUQ7CisK KwlyZXR1cm4gRFBMTF9MT0NLX1NUQVRVU19IT0xET1ZFUjsKK30KKwogLyoKICAqIFRoZSBjYWNo ZWQgc3RhdGUgdGhpcyByZXBvcnRzIGNvbWVzIGZyb20gdGhlIG91dGVyIGxvc3Mtb2YtbG9jayBi eXRlCiAgKiAocGFnZSAwLCByZWcgMHgwNiksIHRoZSBQTEwgbW9kZSBiaXQgKFBMTCBwYWdlLCBy ZWcgMHgzMSksIGlubmVyIExPTAotICogKHJlZyAweDkyKSwgdGhlIGhvbGRvdmVyIGZyZWV6ZSBi eXRlIChyZWcgMHgwQSkgYW5kIHRoZSBwZXItUExMCi0gKiBob2xkb3Zlci12YWxpZCBiaXQgKFBM TCBwYWdlLCByZWcgMHgwNikuCisgKiAocmVnIDB4OTIpLCB0aGUgaG9sZG92ZXIgZnJlZXplIGJ5 dGUgKHJlZyAweDBBKSwgdGhlIHBlci1QTEwKKyAqIGhvbGRvdmVyLXZhbGlkIGJpdCAoUExMIHBh Z2UsIHJlZyAweDA2KSBhbmQgdGhlIHByaW9yaXR5IHRhYmxlLgogICovCiBzdGF0aWMgaW50CiBz aXQ5NTMxeF9kcGxsX2xvY2tfc3RhdHVzX2dldChjb25zdCBzdHJ1Y3QgZHBsbF9kZXZpY2UgKmRw bGwsIHZvaWQgKmRwbGxfcHJpdiwKQEAgLTcxLDcgKzkxLDcgQEAgc2l0OTUzMXhfZHBsbF9sb2Nr X3N0YXR1c19nZXQoY29uc3Qgc3RydWN0IGRwbGxfZGV2aWNlICpkcGxsLCB2b2lkICpkcGxsX3By aXYsCiAJCSAqIHVuZGVyIGEgbG9ja2VkIHN0YXR1cyB3b3VsZCBuZXZlciByZWFjaCB1c2Vyc3Bh Y2UuICBBbgogCQkgKiBpbm5lciBsb29wIHRoYXQgaXMgbm90IGxvY2tlZCBpcyBub3QgYSBsb2Nr ZWQgUExMLgogCQkgKi8KLQkJKnN0YXR1cyA9IGNoYW4tPmhvX2ZyZWV6ZSA/IERQTExfTE9DS19T VEFUVVNfSE9MRE9WRVIgOgorCQkqc3RhdHVzID0gY2hhbi0+aG9fZnJlZXplID8gc2l0OTUzMXhf ZHBsbF9mcm96ZW5fc3RhdHVzKGNoYW4pIDoKIAkJCQkJICAgIERQTExfTE9DS19TVEFUVVNfVU5M T0NLRUQ7CiAJfSBlbHNlIGlmIChjaGFuLT5tb2RlKSB7CiAJCS8qCkBAIC05MCw3ICsxMTAsNyBA QCBzaXQ5NTMxeF9kcGxsX2xvY2tfc3RhdHVzX2dldChjb25zdCBzdHJ1Y3QgZHBsbF9kZXZpY2Ug KmRwbGwsIHZvaWQgKmRwbGxfcHJpdiwKIAkJICogY291bnRzIGEgZnJvemVuIFBMTCBhcyB0cmFj a2luZyBub3RoaW5nIGZvciB0aGUgc2FtZQogCQkgKiByZWFzb24uCiAJCSAqLwotCQkqc3RhdHVz ID0gRFBMTF9MT0NLX1NUQVRVU19IT0xET1ZFUjsKKwkJKnN0YXR1cyA9IHNpdDk1MzF4X2RwbGxf ZnJvemVuX3N0YXR1cyhjaGFuKTsKIAl9IGVsc2UgaWYgKGNoYW4tPmxvY2tlZCkgewogCQkvKgog CQkgKiBIT19BQ1EgaXMgbG9ja2VkICphbmQqIGhvbGRvdmVyIG1lbW9yeSBhY3F1aXJlZCwgc28g aXQgbmVlZHMKQEAgLTE5NSw3ICsyMTUsOCBAQCBjb25zdCBzdHJ1Y3QgZHBsbF9kZXZpY2Vfb3Bz IHNpdDk1MzF4X2RwbGxfZGV2aWNlX29wcyA9IHsKICAqICAgdGhlIHBpbiBpcyB0aGUgb3BlcmF0 aW9uYWwgc3RhdGUuICBQcmVkaWNhdGVzLCBhbGwgZXZhbHVhdGVkIHVuZGVyCiAgKiAgIG11bHRp b3BfbG9jazoKICAqICAgICBNICBzb3VyY2UgaXMgcHJlc2VudCBpbiBUSElTIFBMTCdzIGhhcmR3 YXJlIHByaW9yaXR5IHRhYmxlCi0gKiAgICAgUyAgY2hhbi0+c2VsZWN0ZWRfcmVmID09IHRoaXMg cGluJ3MgaWQgKHRoZSBhY3RpdmUgc2VsZWN0aW9uKQorICogICAgIFMgIGNoYW4tPnJvdXRlZF9y ZWYgPT0gdGhpcyBwaW4ncyBpZCAodGhlIHJlZmVyZW5jZSB0aGUgZGV2aWNlCisgKiAgICAgICAg cmVwb3J0cyBmZWVkaW5nIHRoZSBQTEwpCiAgKiAgICAgTCAgY2hhbi0+bG9ja2VkICYmICFjaGFu LT5tb2RlICYmICFjaGFuLT5ob19mcmVlemUKICAqICAgICAgICAodHJhY2tpbmcgYSByZWZlcmVu Y2U6IG91dGVyIGxvb3AgcnVubmluZywgbG9ja2VkLCBub3QgZnJvemVuKQogICogICAgIE4gIHRo ZSBpbnB1dCBsYW5lJ3MgY2xvY2sgbW9uaXRvciByZXBvcnRzIGxvc3Mgb2Ygc2lnbmFsCkBAIC0y MTgsMTIgKzIzOSwxNiBAQCBjb25zdCBzdHJ1Y3QgZHBsbF9kZXZpY2Vfb3BzIHNpdDk1MzF4X2Rw bGxfZGV2aWNlX29wcyA9IHsKICAqICAgICAgICAgICAgICAgICAgIG5vIG1vZGUgdGhhdCBwaW5z IG9uZSByZWZlcmVuY2UgKHNlZSAiTW9kZSIgYWJvdmUpCiAgKiAgICAgb3RoZXIgICAgICAgICAt RUlOVkFMCiAgKgotICogICBUaGUgQUNUSVZFIHRlc3QgbmVlZHMgTCBhcyB3ZWxsIGFzIFMgYmVj YXVzZSB0aGUgc2VsZWN0aW9uIGlzIHdoYXQgdGhlCi0gKiAgIGRyaXZlciBsYXN0IHdyb3RlIG9y IHRoZSBkZXZpY2UgbGFzdCBjaG9zZSwgbm90IHByb29mIHRoZSBsb29wIHVzZXMKLSAqICAgaXQ6 IGEgZnJlZS1ydW5uaW5nLCBmcm96ZW4gb3IgdW5sb2NrZWQgUExMIGZvbGxvd3Mgbm90aGluZy4g IEl0IG5lZWRzCi0gKiAgICFOIGJlY2F1c2UgYSBQTEwgd2hvc2Ugc2VsZWN0aW9uIG5hbWVzIGEg bGFuZSB3aXRob3V0IHNpZ25hbCBoYXMKLSAqICAgZmFsbGVuIGJhY2sgdG8gYW5vdGhlciBsaXN0 ZWQgc291cmNlIG9uIGl0cyBvd24sIGFuZCBubyByZWdpc3RlcgotICogICBzYXlzIHdoaWNoIC0t IG5vIHBpbiBpcyByZXBvcnRlZCBhY3RpdmUgdGhlbi4gIFRoZSBJTlRTWU5DIGRlc3RpbmF0aW9u CisgKiAgIFMgaXMgbm90IHRoZSBhY3RpdmUgc2VsZWN0aW9uIHRoZSBkcml2ZXIgd3JpdGVzIHRv IHRoZSB0YWJsZTogd2hlbgorICogICB0aGUgc2VsZWN0ZWQgc291cmNlIGxvc2VzIGl0cyBzaWdu YWwgdGhlIGRldmljZSBmYWxscyBiYWNrIHRvIGFub3RoZXIKKyAqICAgbGlzdGVkIHNvdXJjZSBv biBpdHMgb3duIGFuZCBsZWF2ZXMgdGhlIHNlbGVjdGlvbiBuYW1pbmcgdGhlIGRlYWQgb25lLAor ICogICBzbyB0aGUgcmVmZXJlbmNlIHRoZSBkZXZpY2UgcmVwb3J0cyBmZWVkaW5nIHRoZSBQTEwg aXMgcmVhZCBpbnN0ZWFkLAorICogICBhbmQgYWZ0ZXIgc3VjaCBhIGZhbGxiYWNrIHRoZSBwaW4g dGhlIFBMTCBtb3ZlZCB0byBpcyB0aGUgYWN0aXZlIG9uZS4KKyAqICAgVGhlIEFDVElWRSB0ZXN0 IG5lZWRzIEwgYXMgd2VsbCBhcyBTIGJlY2F1c2UgYmVpbmcgZmVkIHRvIHRoZSBQTEwgaXMKKyAq ICAgbm90IHByb29mIHRoZSBsb29wIHVzZXMgaXQ6IGEgZnJlZS1ydW5uaW5nLCBmcm96ZW4gb3Ig dW5sb2NrZWQgUExMCisgKiAgIGZvbGxvd3Mgbm90aGluZy4gIEl0IG5lZWRzICFOIGJlY2F1c2Ug dGhlIGRldmljZSBuYW1lcyB3aGF0IGl0IGZlZWRzCisgKiAgIHRoZSBQTEwsIG5vdCB3aGF0IHRo ZSBQTEwgaXMgbG9ja2VkIHRvLCBhbmQgYSBsYW5lIHdpdGhvdXQgc2lnbmFsIGlzCisgKiAgIG5v dCB0aGF0IHdoYXRldmVyIHRoZSBsb2NrIGJpdCBzdGlsbCBzYXlzLiAgVGhlIElOVFNZTkMgZGVz dGluYXRpb24KICAqICAgaGFzIG5vIG1vbml0b3IsIHNvIE4gYW5kIFEgbmV2ZXIgaG9sZCBmb3Ig aXQuCiAgKgogICogICBNIGlzIHJlYWQgZnJvbSB0aGUgaGFyZHdhcmUgcHJpb3JpdHkgdGFibGUs IG5vdCBmcm9tIHJlZi0+cGxsX21hc2ssCkBAIC0yNDEsNiArMjY2LDEyNCBAQCBjb25zdCBzdHJ1 Y3QgZHBsbF9kZXZpY2Vfb3BzIHNpdDk1MzF4X2RwbGxfZGV2aWNlX29wcyA9IHsKICAqIEZJWEVE IHJvbGUgLS0gWE8gcGluLiAgQWx3YXlzIENPTk5FQ1RFRDsgaXQgY2Fubm90IGJlIHJvdXRlZC4K ICAqLwogCisvKgorICogUmVwb3J0IGEgc2VsZWN0aW9uLXJvbGUgcGluJ3Mgc3RhdGUgb24gdGhp cyBEUExMLiAgQHBpbl9pZCBpcyBhIGxvZ2ljYWwKKyAqIGlucHV0IGluZGV4LCBTSVQ5NTMxWF9J TlRTWU5DX1BJTl9JRCBmb3IgdGhlIElOVFNZTkMgZGVzdGluYXRpb24uCisgKgorICogTWVtYmVy c2hpcCBjb21lcyBmcm9tIGNoYW4tPnByaW9fbWFzaywgd2hpY2ggaXMgdGhlIHByaW9yaXR5IHRh YmxlIHJlYWQKKyAqIGJhY2sgZnJvbSB0aGUgY2hpcCAtLSBub3QgYSByZWNvcmQgb2Ygd2hhdCB0 aGUgZHJpdmVyIGFza2VkIGZvci4gIFRoZQorICogZ2V0dGVyIHJ1bnMgb24gZXZlcnkgcG9sbCBm b3IgZXZlcnkgaW5wdXQgcGluIG9mIGV2ZXJ5IERQTEwsIHNvIGl0IHRha2VzCisgKiB0aGUgbWFz ayB0aGUgd29ya2VyIHJlZnJlc2hlZCByYXRoZXIgdGhhbiByZXNjYW5uaW5nIHRoZSB0YWJsZSBv dmVyIEkyQworICogZWFjaCB0aW1lOyB0YWJsZSB3cml0ZXMgcmVmcmVzaCBpdCB0b28sIHNvIGEg Z2V0IHJpZ2h0IGFmdGVyIGEgc2V0IGRvZXMKKyAqIG5vdCByZXBvcnQgdGhlIG9sZCBtZW1iZXJz aGlwLgorICoKKyAqIENhbGxlciBtdXN0IGhvbGQgc2l0ZGV2LT5tdWx0aW9wX2xvY2suCisgKi8K K3N0YXRpYyB2b2lkCitzaXQ5NTMxeF9kcGxsX3NlbGVjdGlvbl9zdGF0ZV9nZXQoc3RydWN0IHNp dDk1MzF4X2RldiAqc2l0ZGV2LAorCQkJCSAgY29uc3Qgc3RydWN0IHNpdDk1MzF4X2RwbGwgKnNp dGRwbGwsCisJCQkJICB1OCBwaW5faWQsIGVudW0gZHBsbF9waW5fc3RhdGUgKnN0YXRlKQorewor CWNvbnN0IHN0cnVjdCBzaXQ5NTMxeF9jaGFuICpjaGFuOworCisJbG9ja2RlcF9hc3NlcnRfaGVs ZCgmc2l0ZGV2LT5tdWx0aW9wX2xvY2spOworCisJY2hhbiA9IHNpdDk1MzF4X2NoYW5fc3RhdGVf Z2V0KHNpdGRldiwgc2l0ZHBsbC0+aWQpOworCisJaWYgKGNoYW4tPnByaW9fbWFzayAmIEJJVChz aXQ5NTMxeF9pbnB1dF9od19zcmMocGluX2lkKSkpCisJCSpzdGF0ZSA9IERQTExfUElOX1NUQVRF X1NFTEVDVEFCTEU7CisJZWxzZQorCQkqc3RhdGUgPSBEUExMX1BJTl9TVEFURV9ESVNDT05ORUNU RUQ7Cit9CisKKy8qCisgKiBJcyB0aGlzIHRoZSByZWZlcmVuY2UgdGhlIFBMTCBpcyB0cmFja2lu ZyBub3c/ICBTZWUgdGhlIFMgJiYgTCAmJiAhTgorICogcHJlZGljYXRlIGluIHRoZSBwaW4tc3Rh dGUgY29udHJhY3QuICBUaGlzIGlzIGFsc28gd2hhdCBnYXRlcyB0aGUKKyAqIG1lYXN1cmVtZW50 cyB0YWtlbiBhZ2FpbnN0IHRoZSBhY3RpdmUgcmVmZXJlbmNlLgorICoKKyAqIENhbGxlciBtdXN0 IGhvbGQgc2l0ZGV2LT5tdWx0aW9wX2xvY2suCisgKi8KK3N0YXRpYyBib29sCitzaXQ5NTMxeF9k cGxsX3NlbGVjdGlvbl9hY3RpdmUoc3RydWN0IHNpdDk1MzF4X2RldiAqc2l0ZGV2LAorCQkJICAg ICAgIGNvbnN0IHN0cnVjdCBzaXQ5NTMxeF9kcGxsICpzaXRkcGxsLCB1OCBwaW5faWQpCit7CisJ Y29uc3Qgc3RydWN0IHNpdDk1MzF4X2NoYW4gKmNoYW47CisKKwlsb2NrZGVwX2Fzc2VydF9oZWxk KCZzaXRkZXYtPm11bHRpb3BfbG9jayk7CisKKwljaGFuID0gc2l0OTUzMXhfY2hhbl9zdGF0ZV9n ZXQoc2l0ZGV2LCBzaXRkcGxsLT5pZCk7CisKKwlpZiAoY2hhbi0+cm91dGVkX3JlZiAhPSBwaW5f aWQgfHwgIWNoYW4tPmxvY2tlZCB8fCBjaGFuLT5tb2RlIHx8CisJICAgIGNoYW4tPmhvX2ZyZWV6 ZSkKKwkJcmV0dXJuIGZhbHNlOworCisJLyoKKwkgKiBGZWQgdG8gdGhlIFBMTCBpcyBub3QgbG9j a2VkIHRvOiB0aGUgZGV2aWNlIG5hbWVzIHRoZSBzb3VyY2UgaXQKKwkgKiByb3V0ZXMsIGFuZCBh IGxhbmUgdGhhdCBsb3N0IGl0cyBzaWduYWwgaXMgb25lIHRoZSBQTEwgaXMgYWJvdXQKKwkgKiB0 byBiZSBtb3ZlZCBvZmYsIHdoYXRldmVyIHRoZSBsb2NrIGJpdCBzdGlsbCBzYXlzLgorCSAqLwor CWlmIChwaW5faWQgPCBzaXRkZXYtPmluZm8tPm51bV9pbnB1dHMgJiYKKwkgICAgc2l0OTUzMXhf cmVmX3N0YXRlX2dldChzaXRkZXYsIHBpbl9pZCktPmxvcykKKwkJcmV0dXJuIGZhbHNlOworCisJ cmV0dXJuIHRydWU7Cit9CisKKy8qCisgKiBSZXBvcnQgYSBzZWxlY3Rpb24tcm9sZSBwaW4ncyBv cGVyYXRpb25hbCBzdGF0ZSBvbiB0aGlzIERQTEwuCisgKgorICogQ2FsbGVyIG11c3QgaG9sZCBz aXRkZXYtPm11bHRpb3BfbG9jay4KKyAqLworc3RhdGljIHZvaWQKK3NpdDk1MzF4X2RwbGxfc2Vs ZWN0aW9uX29wZXJzdGF0ZV9nZXQoc3RydWN0IHNpdDk1MzF4X2RldiAqc2l0ZGV2LAorCQkJCSAg ICAgIGNvbnN0IHN0cnVjdCBzaXQ5NTMxeF9kcGxsICpzaXRkcGxsLAorCQkJCSAgICAgIHU4IHBp bl9pZCwKKwkJCQkgICAgICBlbnVtIGRwbGxfcGluX29wZXJzdGF0ZSAqb3BlcnN0YXRlKQorewor CWNvbnN0IHN0cnVjdCBzaXQ5NTMxeF9yZWYgKnJlZjsKKworCWxvY2tkZXBfYXNzZXJ0X2hlbGQo JnNpdGRldi0+bXVsdGlvcF9sb2NrKTsKKworCWlmIChzaXQ5NTMxeF9kcGxsX3NlbGVjdGlvbl9h Y3RpdmUoc2l0ZGV2LCBzaXRkcGxsLCBwaW5faWQpKSB7CisJCSpvcGVyc3RhdGUgPSBEUExMX1BJ Tl9PUEVSU1RBVEVfQUNUSVZFOworCQlyZXR1cm47CisJfQorCisJaWYgKHBpbl9pZCA8IHNpdGRl di0+aW5mby0+bnVtX2lucHV0cykgeworCQlyZWYgPSBzaXQ5NTMxeF9yZWZfc3RhdGVfZ2V0KHNp dGRldiwgcGluX2lkKTsKKwkJaWYgKHJlZi0+bG9zKSB7CisJCQkqb3BlcnN0YXRlID0gRFBMTF9Q SU5fT1BFUlNUQVRFX05PX1NJR05BTDsKKwkJCXJldHVybjsKKwkJfQorCQlpZiAocmVmLT5xdWFs X2ZhaWwpIHsKKwkJCSpvcGVyc3RhdGUgPSBEUExMX1BJTl9PUEVSU1RBVEVfUVVBTF9GQUlMRUQ7 CisJCQlyZXR1cm47CisJCX0KKwl9CisKKwkqb3BlcnN0YXRlID0gRFBMTF9QSU5fT1BFUlNUQVRF X1NUQU5EQlk7Cit9CisKK3N0YXRpYyBpbnQKK3NpdDk1MzF4X2RwbGxfaW5wdXRfcGluX29wZXJz dGF0ZV9vbl9kcGxsX2dldChjb25zdCBzdHJ1Y3QgZHBsbF9waW4gKnBpbiwKKwkJCQkJICAgICAg dm9pZCAqcGluX3ByaXYsCisJCQkJCSAgICAgIGNvbnN0IHN0cnVjdCBkcGxsX2RldmljZSAqZHBs bCwKKwkJCQkJICAgICAgdm9pZCAqZHBsbF9wcml2LAorCQkJCQkgICAgICBlbnVtIGRwbGxfcGlu X29wZXJzdGF0ZSAqc3RhdGUsCisJCQkJCSAgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4 dGFjaykKK3sKKwlzdHJ1Y3Qgc2l0OTUzMXhfZHBsbF9waW4gKmRwaW4gPSBwaW5fcHJpdjsKKwlz dHJ1Y3Qgc2l0OTUzMXhfZHBsbCAqc2l0ZHBsbCA9IGRwbGxfcHJpdjsKKwlzdHJ1Y3Qgc2l0OTUz MXhfZGV2ICpzaXRkZXYgPSBzaXRkcGxsLT5kZXY7CisKKwltdXRleF9sb2NrKCZzaXRkZXYtPm11 bHRpb3BfbG9jayk7CisJc2l0OTUzMXhfZHBsbF9zZWxlY3Rpb25fb3BlcnN0YXRlX2dldChzaXRk ZXYsIHNpdGRwbGwsIGRwaW4tPmlkLAorCQkJCQkgICAgICBzdGF0ZSk7CisJbXV0ZXhfdW5sb2Nr KCZzaXRkZXYtPm11bHRpb3BfbG9jayk7CisKKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIGludAog c2l0OTUzMXhfZHBsbF9pbnB1dF9waW5fZGlyZWN0aW9uX2dldChjb25zdCBzdHJ1Y3QgZHBsbF9w aW4gKnBpbiwKIAkJCQkgICAgICB2b2lkICpwaW5fcHJpdiwKQEAgLTI1Myw4ICszOTYsMTYzIEBA IHNpdDk1MzF4X2RwbGxfaW5wdXRfcGluX2RpcmVjdGlvbl9nZXQoY29uc3Qgc3RydWN0IGRwbGxf cGluICpwaW4sCiAJcmV0dXJuIDA7CiB9CiAKKy8qCisgKiBzaXQ5NTMxeF9kcGxsX2lucHV0X3Bp bl9zdGF0ZV9vbl9kcGxsX2dldCAtIGdldCBpbnB1dCBwaW4gRFBMTCBzdGF0ZQorICoKKyAqIFNl bGVjdGlvbiByb2xlOyBzZWUgdGhlIHBpbi1zdGF0ZSBjb250cmFjdCBhYm92ZS4KKyAqLworc3Rh dGljIGludAorc2l0OTUzMXhfZHBsbF9pbnB1dF9waW5fc3RhdGVfb25fZHBsbF9nZXQoY29uc3Qg c3RydWN0IGRwbGxfcGluICpwaW4sCisJCQkJCSAgdm9pZCAqcGluX3ByaXYsCisJCQkJCSAgY29u c3Qgc3RydWN0IGRwbGxfZGV2aWNlICpkcGxsLAorCQkJCQkgIHZvaWQgKmRwbGxfcHJpdiwKKwkJ CQkJICBlbnVtIGRwbGxfcGluX3N0YXRlICpzdGF0ZSwKKwkJCQkJICBzdHJ1Y3QgbmV0bGlua19l eHRfYWNrICpleHRhY2spCit7CisJc3RydWN0IHNpdDk1MzF4X2RwbGxfcGluICpkcGluID0gcGlu X3ByaXY7CisJc3RydWN0IHNpdDk1MzF4X2RwbGwgKnNpdGRwbGwgPSBkcGxsX3ByaXY7CisJc3Ry dWN0IHNpdDk1MzF4X2RldiAqc2l0ZGV2ID0gc2l0ZHBsbC0+ZGV2OworCisJbXV0ZXhfbG9jaygm c2l0ZGV2LT5tdWx0aW9wX2xvY2spOworCXNpdDk1MzF4X2RwbGxfc2VsZWN0aW9uX3N0YXRlX2dl dChzaXRkZXYsIHNpdGRwbGwsIGRwaW4tPmlkLCBzdGF0ZSk7CisJbXV0ZXhfdW5sb2NrKCZzaXRk ZXYtPm11bHRpb3BfbG9jayk7CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIHNpdDk1MzF4X2Rw bGxfaW5wdXRfcGluX3N0YXRlX29uX2RwbGxfc2V0IC0gc2V0IGlucHV0IHBpbiBEUExMIHN0YXRl CisgKgorICogRW5hYmxlcyBvciBkaXNhYmxlcyB0aGUgcGh5c2ljYWwgaW5wdXQgcmVjZWl2ZXIg dmlhIFBhZ2UgMHgwMgorICogZm9yY2Uvc3RhdGUgcmVnaXN0ZXJzIChzaXQ5NTMxeF9pbnB1dF9k aXNhYmxlL2VuYWJsZSgpKSBhbmQgdXBkYXRlcworICogdGhpcyBEUExMJ3MgUGFnZSAxIHByaW9y aXR5IHRhYmxlIHNvIHRoZSBzdGF0ZSBpcyBob25vdXJlZCBieSB0aGUKKyAqIFBMTCdzIGF1dG9t YXRpYyByZWZlcmVuY2Ugc2VsZWN0aW9uLCBub3QganVzdCBhdCB0aGUgaW5wdXQgYnVmZmVyLgor ICogU2VsZWN0aW9uIHJvbGU7IHNlZSB0aGUgcGluLXN0YXRlIGNvbnRyYWN0IGFib3ZlIGZvciB0 aGUgc3RhdGVzLgorICoKKyAqIFRoZSBwcmlvcml0eSB0YWJsZSBpcyBwZXIgUExMLCBzbyBpdCBp cyBhbHdheXMgdXBkYXRlZCBmb3IgdGhpcyBEUExMLgorICogQSBzaW5nbGUgcGh5c2ljYWwgaW5w dXQgZmVlZHMgZXZlcnkgRFBMTCwgc28gdGhlIGhhcmR3YXJlIHJlY2VpdmVyIGlzCisgKiBvbmx5 IGN1dCBvZmYgb25jZSB0aGUgbGFzdCBEUExMIGhhcyByZWxlYXNlZCBpdDogcmVmLT5wbGxfbWFz ayB0cmFja3MKKyAqIHdoaWNoIERQTExzIGN1cnJlbnRseSBjbGFpbSB0aGUgaW5wdXQsIGFuZCB0 aGUgcGh5c2ljYWwgZGlzYWJsZQorICogaGFwcGVucyBvbiB0aGUgdHJhbnNpdGlvbiB0byBhbiBl bXB0eSBtYXNrLgorICovCitzdGF0aWMgaW50CitzaXQ5NTMxeF9kcGxsX2lucHV0X3Bpbl9zdGF0 ZV9vbl9kcGxsX3NldChjb25zdCBzdHJ1Y3QgZHBsbF9waW4gKnBpbiwKKwkJCQkJICB2b2lkICpw aW5fcHJpdiwKKwkJCQkJICBjb25zdCBzdHJ1Y3QgZHBsbF9kZXZpY2UgKmRwbGwsCisJCQkJCSAg dm9pZCAqZHBsbF9wcml2LAorCQkJCQkgIGVudW0gZHBsbF9waW5fc3RhdGUgc3RhdGUsCisJCQkJ CSAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKQoreworCXN0cnVjdCBzaXQ5NTMxeF9k cGxsX3BpbiAqZHBpbiA9IHBpbl9wcml2OworCXN0cnVjdCBzaXQ5NTMxeF9kcGxsICpzaXRkcGxs ID0gZHBsbF9wcml2OworCXN0cnVjdCBzaXQ5NTMxeF9kZXYgKnNpdGRldiA9IHNpdGRwbGwtPmRl djsKKwlzdHJ1Y3Qgc2l0OTUzMXhfcmVmICpyZWYgPSAmc2l0ZGV2LT5yZWZbZHBpbi0+aWRdOwor CXU4IGh3X3NyYyA9IHNpdDk1MzF4X2lucHV0X2h3X3NyYyhkcGluLT5pZCk7CisJdTggcGxsX2Jp dCA9IEJJVChzaXRkcGxsLT5pZCk7CisJYm9vbCBlbmFibGVkX2hlcmUgPSBmYWxzZTsKKwlpbnQg cmM7CisKKwltdXRleF9sb2NrKCZzaXRkZXYtPm11bHRpb3BfbG9jayk7CisKKwlzd2l0Y2ggKHN0 YXRlKSB7CisJY2FzZSBEUExMX1BJTl9TVEFURV9ESVNDT05ORUNURUQ6CisJCXJjID0gc2l0OTUz MXhfaW5wdXRfcHJpb19yZW1vdmUoc2l0ZGV2LCBzaXRkcGxsLT5pZCwgaHdfc3JjKTsKKwkJLyoK KwkJICogVGhlIHRhYmxlIHdyaXRlLCB0aGUgbGF0Y2ggYW5kIHRoZSBob2xkb3ZlciByZWxlYXNl IGFyZQorCQkgKiB0aHJlZSBzdGVwcyBiZWhpbmQgb25lIHJldHVybiBjb2RlLCBzbyBhc2sgdGhl IHRhYmxlIHdoYXQKKwkJICogYWN0dWFsbHkgaGFwcGVuZWQgcmF0aGVyIHRoYW4gcmVhZGluZyB0 aGUgZXJybm8gYXMgIm5vCisJCSAqIGNoYW5nZSIuICBBIHNvdXJjZSB0aGF0IGlzIGdvbmUgZnJv bSB0aGUgdGFibGUgaGFzIGJlZW4KKwkJICogcmVsZWFzZWQgd2hhdGV2ZXIgZWxzZSBmYWlsZWQu CisJCSAqLworCQlpZiAocmMgJiYgc2l0OTUzMXhfaW5wdXRfcHJpb19wcmVzZW50KHNpdGRldiwg c2l0ZHBsbC0+aWQsCisJCQkJCQkgICAgICBod19zcmMpKQorCQkJYnJlYWs7CisJCXJlZi0+cGxs X21hc2sgJj0gfnBsbF9iaXQ7CisJCS8qCisJCSAqIFRoZSByZWNlaXZlciBpcyBzaGFyZWQsIHNv IHRoZSBsYXN0IERQTEwgdG8gbGV0IGdvIHR1cm5zIGl0CisJCSAqIG9mZi4gIFRoYXQgaGFzIHRv IGhhcHBlbiBldmVuIHdoZW4gdGhlIHRhYmxlIHJld3JpdGUKKwkJICogcmVwb3J0ZWQgYW4gZXJy b3IsIG9yIHRoZSBpbnB1dCBzdGF5cyBwb3dlcmVkIHdpdGggbm90aGluZworCQkgKiB0cmFja2lu ZyBpdDsgdGhlIGZpcnN0IGVycm9yIGlzIHRoZSBvbmUgcmV0dXJuZWQuCisJCSAqLworCQlpZiAo IXJlZi0+cGxsX21hc2spIHsKKwkJCWludCBvZmZfcmMgPSBzaXQ5NTMxeF9pbnB1dF9kaXNhYmxl KHNpdGRldiwgZHBpbi0+aWQpOworCisJCQlpZiAob2ZmX3JjICYmICFyYykKKwkJCQlyYyA9IG9m Zl9yYzsKKwkJfQorCQlicmVhazsKKwljYXNlIERQTExfUElOX1NUQVRFX0NPTk5FQ1RFRDoKKwkJ LyoKKwkJICogQ09OTkVDVEVEIGFza3MgZm9yIHRoaXMgaW5wdXQgYW5kIG5vIG90aGVyLCB3aGlj aCB0aGUKKwkJICogZGV2aWNlIGNhbm5vdCBiZSB0b2xkIHRvIGRvOiBpdCBzZWxlY3RzIGJ5IHBy aW9yaXR5IGFuZCB0aGUKKwkJICogbWFudWFsLWFjdGl2ZS1zZWxlY3QgcGF0aCBpcyBub3Qgd2ly ZWQgdXAgKHNlZSAiTW9kZSIpLgorCQkgKiBSZWZ1c2UgaW5zdGVhZCBvZiBxdWlldGx5IGJlaGF2 aW5nIGxpa2UgU0VMRUNUQUJMRS4KKwkJICovCisJCU5MX1NFVF9FUlJfTVNHKGV4dGFjaywKKwkJ CSAgICAgICAiRGV2aWNlIHNlbGVjdHMgaXRzIHJlZmVyZW5jZSBieSBwcmlvcml0eTsgdXNlIHNl bGVjdGFibGUiKTsKKwkJcmMgPSAtRU9QTk9UU1VQUDsKKwkJYnJlYWs7CisJY2FzZSBEUExMX1BJ Tl9TVEFURV9TRUxFQ1RBQkxFOgorCQkvKgorCQkgKiBHYXRlIHRoZSByZWNlaXZlciBvbiB3aGVu ZXZlciBpdCBpcyBvZmYsIG5vdCBvbmx5IHdoZW4gdGhpcworCQkgKiBEUExMIGhvbGRzIG5vIGNs YWltIHlldC4gIFRoZSB0d28gYXJlIHRyYWNrZWQgc2VwYXJhdGVseSAtLQorCQkgKiB0aGUgY2xh aW0gY29tZXMgZnJvbSB0aGUgcHJpb3JpdHkgdGFibGUsIHRoZSByZWNlaXZlciBmcm9tCisJCSAq IHRoZSBmb3JjZSBiaXRzIC0tIHNvIGEgUExMIHRoYXQgYWxyZWFkeSBsaXN0cyB0aGUgaW5wdXQg Y2FuCisJCSAqIHN0aWxsIGZpbmQgaXQgcG93ZXJlZCBkb3duLCBhbmQgc2tpcHBpbmcgdGhlIGVu YWJsZSB3b3VsZAorCQkgKiByZXBvcnQgc3VjY2VzcyBmb3IgYSByZWZlcmVuY2UgdGhhdCBjYW5u b3QgcmVhY2ggdGhlIGxvb3AuCisJCSAqLworCQlpZiAoIXJlZi0+ZW5hYmxlZCkgeworCQkJcmMg PSBzaXQ5NTMxeF9pbnB1dF9lbmFibGUoc2l0ZGV2LCBkcGluLT5pZCk7CisJCQlpZiAocmMpCisJ CQkJYnJlYWs7CisJCQllbmFibGVkX2hlcmUgPSB0cnVlOworCQl9CisJCXJjID0gc2l0OTUzMXhf aW5wdXRfcHJpb19hZGQoc2l0ZGV2LCBzaXRkcGxsLT5pZCwgaHdfc3JjKTsKKwkJaWYgKHJjICYm ICFzaXQ5NTMxeF9pbnB1dF9wcmlvX3ByZXNlbnQoc2l0ZGV2LCBzaXRkcGxsLT5pZCwKKwkJCQkJ CSAgICAgICBod19zcmMpKSB7CisJCQkvKgorCQkJICogVW5kbyBvbmx5IHdoYXQgdGhpcyByZXF1 ZXN0IGRpZC4gIEEgcmVjZWl2ZXIgdGhlCisJCQkgKiBsb2FkZWQgY29uZmlndXJhdGlvbiBoYWQg YWxyZWFkeSB0dXJuZWQgb24gaXMgbm90CisJCQkgKiB0aGlzIHJlcXVlc3QncyB0byB0dXJuIG9m Zi4KKwkJCSAqLworCQkJaWYgKGVuYWJsZWRfaGVyZSkKKwkJCQlzaXQ5NTMxeF9pbnB1dF9kaXNh YmxlKHNpdGRldiwgZHBpbi0+aWQpOworCQkJYnJlYWs7CisJCX0KKwkJLyoKKwkJICogQ2xhaW0g dGhlIGlucHV0IGZvciB0aGlzIERQTEwgb25seSBvbmNlIGl0IGlzIGJvdGggZW5hYmxlZAorCQkg KiBhbmQgcHJlc2VudCBpbiB0aGUgcHJpb3JpdHkgdGFibGUuICBTZXR0aW5nIHRoZSBtYXNrIGJl Zm9yZQorCQkgKiBwcmlvX2FkZCB3b3VsZCBsZWFrIHRoZSBjbGFpbSBpZiBwcmlvX2FkZCBmYWls ZWQsIGtlZXBpbmcgdGhlCisJCSAqIHNoYXJlZCBpbnB1dCByZWNlaXZlciBwb3dlcmVkIGV2ZW4g YWZ0ZXIgZXZlcnkgRFBMTCByZWxlYXNlZAorCQkgKiBpdC4KKwkJICovCisJCXJlZi0+cGxsX21h c2sgfD0gcGxsX2JpdDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmMgPSAtRUlOVkFMOworCQli cmVhazsKKwl9CisKKwltdXRleF91bmxvY2soJnNpdGRldi0+bXVsdGlvcF9sb2NrKTsKKworCS8q CisJICogTGVhdmUgdGhlIG1lc3NhZ2VzIHRoZSBzd2l0Y2ggYWxyZWFkeSBzZXQgaW4gcGxhY2U7 IG9ubHkgYSBmYWlsdXJlCisJICogdGhhdCBjYW1lIGZyb20gdGhlIGhhcmR3YXJlIHBhdGggc3Rp bGwgbmVlZHMgb25lLgorCSAqLworCWlmIChyYyA9PSAtRU5PU1BDKQorCQlOTF9TRVRfRVJSX01T RyhleHRhY2ssCisJCQkgICAgICAgIlByaW9yaXR5IHRhYmxlIGlzIGZ1bGwgb2YgdW5pcXVlIHNv dXJjZXMgb24gdGhpcyBQTEwiKTsKKwllbHNlIGlmIChyYyAmJiByYyAhPSAtRU9QTk9UU1VQUCAm JiByYyAhPSAtRUlOVkFMKQorCQlOTF9TRVRfRVJSX01TRyhleHRhY2ssICJGYWlsZWQgdG8gc2V0 IGlucHV0IHBpbiBzdGF0ZSIpOworCisJcmV0dXJuIHJjOworfQorCiBzdGF0aWMgY29uc3Qgc3Ry dWN0IGRwbGxfcGluX29wcyBzaXQ5NTMxeF9kcGxsX2lucHV0X3Bpbl9vcHMgPSB7CiAJLmRpcmVj dGlvbl9nZXQJCT0gc2l0OTUzMXhfZHBsbF9pbnB1dF9waW5fZGlyZWN0aW9uX2dldCwKKwkuc3Rh dGVfb25fZHBsbF9nZXQJPSBzaXQ5NTMxeF9kcGxsX2lucHV0X3Bpbl9zdGF0ZV9vbl9kcGxsX2dl dCwKKwkuc3RhdGVfb25fZHBsbF9zZXQJPSBzaXQ5NTMxeF9kcGxsX2lucHV0X3Bpbl9zdGF0ZV9v bl9kcGxsX3NldCwKKwkub3BlcnN0YXRlX29uX2RwbGxfZ2V0CT0gc2l0OTUzMXhfZHBsbF9pbnB1 dF9waW5fb3BlcnN0YXRlX29uX2RwbGxfZ2V0LAogfTsKIAogLyoKZGlmZiAtLWdpdCBhL2RyaXZl cnMvZHBsbC9zaXQ5NTMxeC9yZWdzLmggYi9kcml2ZXJzL2RwbGwvc2l0OTUzMXgvcmVncy5oCmlu ZGV4IDkzNDllYzcyMjU2OS4uZmQxMDY4OTgyY2Q3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2RwbGwv c2l0OTUzMXgvcmVncy5oCisrKyBiL2RyaXZlcnMvZHBsbC9zaXQ5NTMxeC9yZWdzLmgKQEAgLTEy Niw2ICsxMjYsMTAgQEAKICNkZWZpbmUgU0lUOTUzMVhfUkVHX0dMT0JBTF9VUERBVEUJCVNJVDk1 MzFYX1JFRygweDAwLCAweDBGKQogI2RlZmluZSBTSVQ5NTMxWF9TTUFMTF9VUERBVEVfQ01ECQkw eDAyCiAKKy8qIFBMTCBob2xkb3ZlciBjb250cm9sIChQTEwgcGFnZSBvZmZzZXQpICovCisjZGVm aW5lIFNJVDk1MzFYX1BMTF9SRUdfSE9fQ1RSTAkJMHg2RgorI2RlZmluZSBTSVQ5NTMxWF9QTExf SE9fRk9SQ0VfQklUCQk0CisKIC8qIE9uZSBiaXQgcGVyIGlucHV0IFBBSVIgKGJpdCAwID0gQ0xL SU4wLCAuLi4sIGJpdCAzID0gQ0xLSU4zKSAqLwogI2RlZmluZSBTSVQ5NTMxWF9SRUdfSU5fREVf Rk9SQ0UJCVNJVDk1MzFYX1JFRygweDAyLCAweEU4KQogI2RlZmluZSBTSVQ5NTMxWF9SRUdfSU5f REVfU1RBVEUJCVNJVDk1MzFYX1JFRygweDAyLCAweEU5KQpAQCAtMjMwLDYgKzIzNCwzMSBAQAog CiAjZGVmaW5lIFNJVDk1MzFYX1BMTF9TVEFUVVNfT1VURVJfRElTCUJJVCg1KQogCisvKgorICog RGVidWcgcmVnaXN0ZXIgLS0gUExMIHBhZ2UuICBXcml0aW5nIHRoZSBrZXkgdW5sb2NrcyB0aGUg cGFnZSdzIGRlYnVnCisgKiByZWdpc3RlcnMgZm9yIHdyaXRpbmc7IHdyaXRpbmcgemVybyBsb2Nr cyB0aGVtIGFnYWluLgorICovCisjZGVmaW5lIFNJVDk1MzFYX1BMTF9SRUdfREVCVUcJCTB4QkQK KyNkZWZpbmUgU0lUOTUzMVhfUExMX0RFQlVHX1VOTE9DSwkJMHhDMworI2RlZmluZSBTSVQ5NTMx WF9QTExfREVCVUdfTE9DSwkJCTB4MDAKKworLyoKKyAqIERlYnVnIHN0YXR1cyBidXMgLS0gUExM IHBhZ2UuICBUaGUgYWRkcmVzcyByZWdpc3RlciBzZWxlY3RzIHRoZSBibG9jaworICogd2hvc2Ug c3RhdHVzIHRoZSBkYXRhIHJlZ2lzdGVyIHJldHVybnMuICBBIHJlYWQgb2YgdGhlIGRhdGEgcmVn aXN0ZXIKKyAqIHJldHVybnMgd2hhdCB0aGUgcHJldmlvdXMgcmVhZCBsYXRjaGVkLCBzbyB0aGUg ZG9jdW1lbnRlZCBwcm9jZWR1cmVzCisgKiByZWFkIGl0IHRocmVlIHRpbWVzIGFuZCB0YWtlIHRo ZSBsYXN0LgorICovCisjZGVmaW5lIFNJVDk1MzFYX1BMTF9SRUdfREJHX1NUQVRVU19BRERSCTB4 RDEKKyNkZWZpbmUgU0lUOTUzMVhfUExMX1JFR19EQkdfU1RBVFVTX0RBVEEJMHhEMAorI2RlZmlu ZSBTSVQ5NTMxWF9EQkdfU1RBVFVTX1JFQURTCQkzCisKKy8qCisgKiBTdGF0dXMgb2YgdGhlIHJl ZmVyZW5jZSByb3V0ZWQgdG8gdGhlIFBMTDogdGhlIGxvdyBuaWJibGUgaXMgdGhlCisgKiBzb3Vy Y2UgdGhlIGlucHV0IHN1YnN5c3RlbSBmZWVkcyBpdCwgaW4gdGhlIHByaW9yaXR5LXRhYmxlIGVu Y29kaW5nLgorICovCisjZGVmaW5lIFNJVDk1MzFYX0RCR19TVEFUVVNfUk9VVEVEX1NSQwkweEIw CisjZGVmaW5lIFNJVDk1MzFYX0RCR19ST1VURURfU1JDX01BU0sJCUdFTk1BU0soMywgMCkKKwog LyoKICAqIFBMTF9DT05GSUcxRl9QTEw6IGJpdCA2IHB1dHMgdGhlIFBMTCBpbiBtYW51YWwgYWN0 aXZlIHNlbGVjdCwgd2hlcmUgaXQKICAqIG5vIGxvbmdlciBhcmJpdHJhdGVzIGJ5IHByaW9yaXR5 LiAgVGhlIG90aGVyIGJpdHMgYXJlIEdVSS1nZW5lcmF0ZWQKQEAgLTI2Niw2ICsyOTUsMTggQEAK ICNkZWZpbmUgU0lUOTUzMVhfUExMX1JFR19TVEFUVVNfMQkJMHgwNgogI2RlZmluZSBTSVQ5NTMx WF9QTExfU1RBVFVTXzFfSE9fVkFMSUQJQklUKDIpCiAKKy8qCisgKiBQYWdlIDB4MDYgY2xvY2sg bW9uaXRvciBzdGF0dXMsIG9uZSBuaWJibGUgcGVyIGlucHV0IGxhbmU6IFAgbGFuZXMgaW4KKyAq IDB4MDIgKElOMFAgbG93LCBJTjFQIGhpZ2gpIGFuZCAweDA2IChJTjJQLCBJTjNQKSwgTiBsYW5l cyBpbiAweDkyCisgKiAoSU4wTiwgSU4xTikgYW5kIDB4OTYgKElOMk4sIElOM04pLgorICovCisj ZGVmaW5lIFNJVDk1MzFYX0NMS01PTl9QX1NUQVRVU18wMQkJU0lUOTUzMVhfUkVHKDB4MDYsIDB4 MDIpCisjZGVmaW5lIFNJVDk1MzFYX0NMS01PTl9QX1NUQVRVU18yMwkJU0lUOTUzMVhfUkVHKDB4 MDYsIDB4MDYpCisjZGVmaW5lIFNJVDk1MzFYX0NMS01PTl9OX1NUQVRVU18wMQkJU0lUOTUzMVhf UkVHKDB4MDYsIDB4OTIpCisjZGVmaW5lIFNJVDk1MzFYX0NMS01PTl9OX1NUQVRVU18yMwkJU0lU OTUzMVhfUkVHKDB4MDYsIDB4OTYpCisjZGVmaW5lIFNJVDk1MzFYX0NMS01PTl9GSU5FX0RSSUZU CQlCSVQoMCkKKyNkZWZpbmUgU0lUOTUzMVhfQ0xLTU9OX0NPQVJTRV9EUklGVAkJQklUKDEpCisj ZGVmaW5lIFNJVDk1MzFYX0NMS01PTl9MT1NTCQkJQklUKDIpCiAjZGVmaW5lIFNJVDk1MzFYX0NM S01PTl9QX05PVElGXzAxCQlTSVQ5NTMxWF9SRUcoMHgwNiwgMHgwMykKICNkZWZpbmUgU0lUOTUz MVhfQ0xLTU9OX1BfTk9USUZfMjMJCVNJVDk1MzFYX1JFRygweDA2LCAweDA3KQogCi0tIAoyLjM5 LjIgKEFwcGxlIEdpdC0xNDMpCgo=