From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id A672BC021A0 for ; Mon, 17 Feb 2025 03:41:35 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender:List-Subscribe:List-Help :List-Post:List-Archive:List-Unsubscribe:List-Id:MIME-Version: Content-Transfer-Encoding:Content-ID:Content-Type:In-Reply-To:References: Message-ID:Date:Subject:CC:To:From:Reply-To:Content-Description:Resent-Date: Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Owner; bh=+Lii8yjwywR/iTzFlmtAfE8O2QIw9WjZunDt2lcwQbc=; b=BsCdSiv0AdSqhdlp9i7uNwbiqB rGWhs7NSGXXeMiWDaYpuc4f/cy03T8h0fbsQgjJHnsPzdMohhehbt8NYOuQPFU2JFeqI7pJ6hFa1Q 6iXqoLfH1RrEKpWwe4blZd2gGeiboJOZjOAO8K/gkrLTT8nbXnXeVtvX9c6yF6vQEyM9XJ5Q+8+EN 10g17DkEpLs55jvxcAkGCzRFgzaEiz2MORPjhd9+Iv2Lw27wwtu6goS10ZtlyPMaZAFFeLGAtKo6U aKroTwNkoPxn8gAZz5BfLVgE00hJOP0QIxO8ySb1/pT1OaqTtGCcrCk/2JV1Z6KIUx2aP7aySR/RD ckBqls+A==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.98 #2 (Red Hat Linux)) id 1tjs0j-000000039IW-1lg8; Mon, 17 Feb 2025 03:41:34 +0000 Received: from mailgw02.mediatek.com ([216.200.240.185]) by bombadil.infradead.org with esmtps (Exim 4.98 #2 (Red Hat Linux)) id 1tjs0Y-000000039HH-1bwf; Mon, 17 Feb 2025 03:41:24 +0000 X-UUID: 09fae02eece111efa1e849db4cc18d44-20250216 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=mediatek.com; s=dk; h=MIME-Version:Content-Transfer-Encoding:Content-ID:Content-Type:In-Reply-To:References:Message-ID:Date:Subject:CC:To:From; bh=+Lii8yjwywR/iTzFlmtAfE8O2QIw9WjZunDt2lcwQbc=; b=qB0aT73El5MUJOd3eF9niScrjjiGtq3bDjwM3rkds3kyjJ2NN7kwGtdZ7bm6GHo+cXL1+hBgXe0roUG5ntrbEKx6/cuvreXDZZhM2nsc+0dsTdEHJ6S31bTVrRe4hk7hEj7vKUhC9cLoENkE5wMvmbRbNsUxD3FSSjSpU0jNwA0=; X-CID-P-RULE: Release_Ham X-CID-O-INFO: VERSION:1.1.46,REQID:d44ec9a0-33f5-4d3b-a1bb-26f0e40321ef,IP:0,U RL:0,TC:0,Content:0,EDM:0,RT:0,SF:0,FILE:0,BULK:0,RULE:Release_Ham,ACTION: release,TS:0 X-CID-META: VersionHash:60aa074,CLOUDID:f3c6db24-96bd-4ac5-8f2e-15aa1ef9defa,B ulkID:nil,BulkQuantity:0,Recheck:0,SF:80|81|82|83|102,TC:nil,Content:0|50, EDM:-3,IP:nil,URL:0,File:nil,RT:nil,Bulk:nil,QS:nil,BEC:nil,COL:1,OSI:0,OS A:0,AV:0,LES:1,SPR:NO,DKR:0,DKP:0,BRR:0,BRE:0,ARC:0 X-CID-BVR: 2,OSH X-CID-BAS: 2,OSH,0,_ X-CID-FACTOR: TF_CID_SPAM_SNR X-UUID: 09fae02eece111efa1e849db4cc18d44-20250216 Received: from mtkmbs10n1.mediatek.inc [(172.21.101.34)] by mailgw02.mediatek.com (envelope-from ) (musrelay.mediatek.com ESMTP with TLSv1.2 ECDHE-RSA-AES256-GCM-SHA384 256/256) with ESMTP id 1083346247; Sun, 16 Feb 2025 20:41:15 -0700 Received: from mtkmbs10n2.mediatek.inc (172.21.101.183) by mtkmbs13n2.mediatek.inc (172.21.101.108) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.1258.28; Mon, 17 Feb 2025 11:41:12 +0800 Received: from SEYPR02CU001.outbound.protection.outlook.com (172.21.101.237) by mtkmbs10n2.mediatek.inc (172.21.101.183) with Microsoft SMTP Server id 15.2.1258.28 via Frontend Transport; Mon, 17 Feb 2025 11:41:12 +0800 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=XO3Mty7jL5lXHXzZCAhUEGQAFk0GaBx1qch3SA9N8opPi8O5Vj+D/34R2bZpmGQGrnL3MbxW23n11jmBE1r0bEXZVhLNRSGWWZkkp5PrLRP9GzCwPYxkPt9khQ5oOE5tdTTy09B0GXWIDOSa7Kpi5LORHlScECulKwKmIPPbLztY2dQ4zYVtSO1Q79osopXu3M59t1lC5Gb7FNMC/4T4r13yNj7iWU9uLblw8Nd9Gsxrj5xDpzzwMOF3zoH/mnEdqyD5CUgnp30r+dtnb9OJvM4bLnoQ2rTcAtGEdSDuaah8ZjTF6F/hPz8T8nCagnpyJis2GiLwuVl+9XL6klwjWA== 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=+Lii8yjwywR/iTzFlmtAfE8O2QIw9WjZunDt2lcwQbc=; b=CZ3EknTeo3nyb+rFW4N5rgbAfLkVzJ84jtUwCyT/B26b3tcpjkLC6KgTKA8XMlj+fBJLYB3OU+5s/NFgpsIL5ua890mJ/RDUE/JGfVwweMcshb1HuD/QF2nm4MlxF3XAc/WJgHIdEtjgzHtLYC/EmmZ3o6rLSqdaTFp5gro34cbkQgV4VkWdlTc4yBfe+YcvPG8agZ7n0YJKKmHXp/0lBAisnToYjO3ntG7CDW1xCAWds1elyX+e56hDRYK3A3x2iSOVKq9otpZZ1cWDZqqs6nP7jP5TSp6wzRrXhzsEl1h4ZHd5O1TlRVBN5RUZJbfjH5ec3aeqRrH14D2SZFoN2w== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=mediatek.com; dmarc=pass action=none header.from=mediatek.com; dkim=pass header.d=mediatek.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=mediateko365.onmicrosoft.com; s=selector2-mediateko365-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=+Lii8yjwywR/iTzFlmtAfE8O2QIw9WjZunDt2lcwQbc=; b=rrR7vg8aZvsXrAbA1ahCx5NJkBqMfotDK7/R+J1FAMCIxrOs8Q1JZ5TMU2qleTEdO+xofl5OlucqgO7yWygsyDRrF5VBDMe1SFyq1cgZnEYP/lUwZZ+LMxtx3D8rJm1grNfNNZ6GG0uFOzE7yfjvw8i0tLAiDbAWyL6M+MG4NOI= Received: from TYZPR03MB6624.apcprd03.prod.outlook.com (2603:1096:400:1f4::13) by SEZPR03MB6492.apcprd03.prod.outlook.com (2603:1096:101:3b::11) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8445.16; Mon, 17 Feb 2025 03:41:06 +0000 Received: from TYZPR03MB6624.apcprd03.prod.outlook.com ([fe80::9ce6:1e85:c4a7:2a54]) by TYZPR03MB6624.apcprd03.prod.outlook.com ([fe80::9ce6:1e85:c4a7:2a54%3]) with mapi id 15.20.8445.013; Mon, 17 Feb 2025 03:41:06 +0000 From: =?utf-8?B?Q0sgSHUgKOiDoeS/iuWFiSk=?= To: AngeloGioacchino Del Regno , "chunkuang.hu@kernel.org" CC: "robh@kernel.org" , "jie.qiu@mediatek.com" , "tzimmermann@suse.de" , "simona@ffwll.ch" , "mripard@kernel.org" , =?utf-8?B?Sml0YW8gU2hpICjnn7PorrDmtpsp?= , "linux-mediatek@lists.infradead.org" , "dri-devel@lists.freedesktop.org" , "maarten.lankhorst@linux.intel.com" , "linux-kernel@vger.kernel.org" , "devicetree@vger.kernel.org" , "kernel@collabora.com" , "dmitry.baryshkov@linaro.org" , "krzk+dt@kernel.org" , =?utf-8?B?TGV3aXMgTGlhbyAo5buW5p+P6YieKQ==?= , "p.zabel@pengutronix.de" , "conor+dt@kernel.org" , =?utf-8?B?VG9tbXlZTCBDaGVuICjpmbPlvaXoia8p?= , =?utf-8?B?SXZlcyBDaGVuamggKOmZs+S/iuW8mCk=?= , "airlied@gmail.com" , "linux-arm-kernel@lists.infradead.org" , "matthias.bgg@gmail.com" , =?utf-8?B?SmFzb24tSkggTGluICjmnpfnnb/npaUp?= , "junzhi.zhao@mediatek.com" Subject: Re: [PATCH v6 39/42] drm/mediatek: Introduce HDMI/DDC v2 for MT8195/MT8188 Thread-Topic: [PATCH v6 39/42] drm/mediatek: Introduce HDMI/DDC v2 for MT8195/MT8188 Thread-Index: AQHbfHk1clNlQLH0B0uvU+XlLJZcxLNK4piA Date: Mon, 17 Feb 2025 03:41:06 +0000 Message-ID: References: <20250211113409.1517534-1-angelogioacchino.delregno@collabora.com> <20250211113409.1517534-40-angelogioacchino.delregno@collabora.com> In-Reply-To: <20250211113409.1517534-40-angelogioacchino.delregno@collabora.com> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: user-agent: Evolution 3.52.3-0ubuntu1 authentication-results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=mediatek.com; x-ms-publictraffictype: Email x-ms-traffictypediagnostic: TYZPR03MB6624:EE_|SEZPR03MB6492:EE_ x-ms-office365-filtering-correlation-id: 1cf8f849-ca84-47bf-9ce0-08dd4f04e8ec x-ld-processed: a7687ede-7a6b-4ef6-bace-642f677fbe31,ExtAddr x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0;ARA:13230040|376014|366016|7416014|1800799024|38070700018; x-microsoft-antispam-message-info: =?utf-8?B?ekdBY3NCNWUvelhwU2VmZ0RveVNoK2V2TGxMVFBDYW51am1aOGtQc2J6TitX?= =?utf-8?B?cGo0NFhUb2QwaXFPNGljNE9sTDdaM2h1am1tOWovNWNqT2U3bDRteUZOOGZ6?= =?utf-8?B?RTlsUDVnTnM4aTB6akUreTVzRW03S2FOSmN5L3FxczVZclU3ZERYUU1VbGFH?= =?utf-8?B?T3JJd0RGV2NqV0E4b0pWVGdhWlZPQ0swVzc3d3VqOGZSeFpiZHZIdFdPY3FV?= =?utf-8?B?NTBXbnd3eW1sdzVPb1MxUnVON0paS1ZzUHZTbDNhK2x3ZzdkRFNsZ3RqY1Vu?= =?utf-8?B?WTJ3Sjd1aTRMTGN0a1cyKytIdXluek8wZmhuaS9EOVo1S21jTEQrOGZ2ZmhF?= =?utf-8?B?WVY2ZzFLZDNRWnlPcVVXSWJzR1FidENKWHJPSStra2FqQlg2bTFKVjR2NytT?= =?utf-8?B?UkZJSG1NbVc2dDVsTUlhdjRlc0VTOC8wSUVCM3NndktXckZ2bmp6SEtmQkNC?= =?utf-8?B?d2VTRVdyQkZhZC9BSHV1bXVIZTJ5WTMyZFFVT0czRmJpdDBoR0JWS0s2TE9L?= =?utf-8?B?MzRaWkJVekFIQTBLQ08rYmoyayt1cUpmZEw0L0M2QUtOTFFnQlhyaGFVWnZn?= =?utf-8?B?dEZ2TGVQNURBbGVHU0lQbUNYYTFCeEYrckJKLyttVVpmYi9wb0tjUmlqUG94?= =?utf-8?B?cTRPWFRiQk9pVUZJQmlIczc5NXJRV2hNazU4V3BPY3VmRGl1VlRhNEpVZ3dU?= =?utf-8?B?bDhMV3RXVk0wYTZKaWVacmhIbnltNUhmbU9Vd3c1NEExY0oycGtudVEyV0hi?= =?utf-8?B?U3BiKzc0N243azhneVlwcWpKdnRTZm1ONFhLbDN6Z2FaQVVCbS9SSm1QdERn?= =?utf-8?B?NlRMeUphV0J5c1lPVGltSDA3SzNnR3gwT3FCYUdvR3lidm82Q25hL1FnK3VC?= =?utf-8?B?TjVTbXkyY2lVbVJhbFM1T0JKN3RlWDVCb1dlZDE2NkxsM2NtcitZMlJZTTJI?= =?utf-8?B?VGxXQmN3cTU4TTVoMW82Y1ROVGp5VSs5Y3hmRmd1SlNPNjNHQXg3Q1lGWm5O?= =?utf-8?B?RDlLdFdrZGRDc3FDSVZpRCtlY0NuVEdaUEhHREVwWEthcjNhRnNhMmpIVmUw?= =?utf-8?B?SXo0M21EcGRiTkNOS2VxamhlMHNmZ3BYRzg1YktqQ2VIWXp6eEx0YXNQc2ZG?= =?utf-8?B?RkVmR04zcitua1pHakVBWXlxL3B2enZEKyswK2ZBQnhsRmttTU96OG0xTGpR?= =?utf-8?B?MFdhNjZkcmk3VnRaM2YrZDZ6KzloMzNGVnA2SDZtYTl6YXFBL1FCbHlYeGRR?= =?utf-8?B?a0xrWWp3am1ySFkwTnlPUWxkbFMrU0lNcXIzdzJsV0VxNldFVGhCWkpZSFpU?= =?utf-8?B?SjJRLy9oUGhzT204bWRxeWxTdTZTTnQ4RThoS1NTRjN6RnduSWVRTk5iY0tw?= =?utf-8?B?ejZJSlRMUVhVNlZNSzdFMFg1UHJGNDBPeTZqaWZ2dGNyS21pY3hXTzZsam9H?= =?utf-8?B?VDgwNFRrOWg2YmI2TCs4czczU3pNblJsZTc1cWNPNDZXMldldVpLRHA0My9a?= =?utf-8?B?dTJVdElqUUpMWmlIRG12TXpXMU9hZlYwQzV4ckRobGIwVGdMUlppcUZvVFdl?= =?utf-8?B?Nk0ra0lwSlVxeENFWkYvMExZbksyUFlQWGFRclJqVFNlZFdQUVl4cXkxRnNF?= =?utf-8?B?Umd6T2FIYlc3cE5oci83dlY3amNuL2hlMGtZYlAzZjY3bGczVnJOb3BGZEE0?= =?utf-8?B?elBRcGxXUWg3K3VRZWFCYUcxRDBjbVNQNHczWDRmcWJIcERRc0tEbld5Mkht?= =?utf-8?B?bHZlRlo4aEtzNzRJZjVRU043WlZEMmY3eEpSRmh6OUhxUy8xb3daTFZxM1lw?= =?utf-8?B?RVBSRmtMV3dYaERvUVk1WFhWdWxkOW4yU3MzZ3lNbGcramlTZWo4SXVjWEFv?= =?utf-8?B?aktzd2d4bFByU3dVOG9ENGxhMTZyWXdpVXZnM2d3b2ZhcEpKQmtoZjhSNE9r?= =?utf-8?Q?6OUB9N18KhM5AuYN4rnqejnzwqh64Bje?= x-forefront-antispam-report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:TYZPR03MB6624.apcprd03.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(376014)(366016)(7416014)(1800799024)(38070700018);DIR:OUT;SFP:1101; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?utf-8?B?cjc4OTlIcWo5UVZkSklLZEhiV3JiUUg3U3VQQkgvVm1KZ2RpWXJ1RDU5ZDdE?= =?utf-8?B?cVVQZEF1SC9VTHcvOGgvclY1SlRSSnVUSWE3cldycHZiNHRXeDV4S2xCWDNh?= =?utf-8?B?VWo1OHVhNmo4Q1ptVGRSQ2hrc1FtYTNaVjZUa2NzaWJHbXlhdEIvdjdxeldl?= =?utf-8?B?NHo2QnpUdFFjK1Z2OWNKMGdxb05NSjdmZGlFSmlsdEIyUi9WdW0zVGlkbUxh?= =?utf-8?B?UnRLQjNtdWRHcGpGUEJrTFhOaDZjZENQTGpyRUQwUWlvT2loaGlaeGdVc2pk?= =?utf-8?B?U0psK2FWcVFWek83ZW9qUmRyaUNGKzIzaEZsRTFvczRuWkZmTytvQU5JWFp4?= =?utf-8?B?Z0xLd1QxVkd2UUFYZTY1dXB6SDM4eXcrbWY5a0p5VExrMUZFREVKNnV6aExH?= =?utf-8?B?NTg0SVVyNVlMMlZWQ3AzUEJJQkR6YVJ3aUdxaDYvSzdJMjF2SkY4SUJXRzky?= =?utf-8?B?Wnl2c0ZNZnhnTE9BVSt2UUZHRE5pM2MxUlVkcjZpYTVGK24zaWl6MjlmNlVv?= =?utf-8?B?dmwzY2dBVTBtM3Z5aFBxckpmRVFIZVAzQzdibytWaDlIT2VKVVdLU200QkZ0?= =?utf-8?B?WFNsaGxld3lhcFU4QktwUEFKZWtzU09ySjRpZFB0ck1zamwzYUN5MkJoRkdM?= =?utf-8?B?MXVaWmdWKzlqbWhjbExxZU5RUkRhandpQ0FERERkNEhPN2t0MjYybHN6RFVZ?= =?utf-8?B?WmFkcWtjWmJya1pWd3NocVlEMGMzaVFmWXQwckxkeHQ3NDZnU1dHMGUzT0VJ?= =?utf-8?B?RFNZZGxPMkhRMXA5MU14d2kyUE9OV1g0RlZvMWEvM0dFMDNvbmRtSG4vSVUv?= =?utf-8?B?dm1GSklqZHIxUmFjV3NUdThrLzV6UDI1dzJ1d2hIaGUrb1hsUyswTVZUR2o1?= =?utf-8?B?YXdSY3dod0hwb3JPS1hoWGE4Q2JLUlJzSThLYklucHdFcFphYkRneUNTQnRK?= =?utf-8?B?UnAxNHYrUUo2bEdOZ2UxSEZSSGc5R2FUREs4MWRpWkhaY25aZzJwYTRFamxT?= =?utf-8?B?MkRYVllQQWx1ODE2cWlNdTkzc0ZFckpzTHludzR4bklLRjRnYm8yMVo3UVl0?= =?utf-8?B?RkhzZnF0UGtHSkJuK1JYZldndG5vdW1iTnAySFdobWhQUzB0NTg5ek1wYTB5?= =?utf-8?B?dUNVSnN1dGZyUHFMcUc0ZlZuVXA5N2d3NFAvL2tyZnZ6SFBTMjVHTzF0MXp5?= =?utf-8?B?NWJ1RDlpWTBaRS81dGV5UGs3V0t0UG5hNVBPa2w0YzkzbVhIMDZaemZKcGRY?= =?utf-8?B?YmtlRFphNy9GdWRxL1B1aE9pL3hlcVUwZHoyUjlGTUdVenhQTnpGWkFSY0VI?= =?utf-8?B?aElDNWVoOFBUMUVIZGpxZ2M4UUNPb2xDalNRbXpHb3BmcVROcHN0L20wZXFN?= =?utf-8?B?ak5JSFJvNC9rQWJyamtEUTJtenNaa0tUNmlTdGkyNDJlV3hWVGRrWXJacDhi?= =?utf-8?B?d1dlellrZ0hGMFZCRjlYOHBCVkNRQlJHSEd2QkhzMUlzYk1WV28rMXllVmlP?= =?utf-8?B?KzBJS0lLWFVZcy9aNmE5cUdXOTZMVzQ0MXliV21zKzFOc3B6eGVBdDRMa1Q4?= =?utf-8?B?SDd1NkxQWkw3RDM3NEowUGIzRk83czJONXlkR20rMXNLZEx4c2dBY1NVTHMr?= =?utf-8?B?S2Y2b1Fnb0syNkRwa0N5Z1F2bnZwcDlJVEFMQ3ZFbzI0Q3VFOEh0cWRRZDF4?= =?utf-8?B?NGNXZkJOcGdWSTdDVENLbHNhQU9sS1JEbUl0VWNhWC9jVklFYm1jVHB1MWJO?= =?utf-8?B?RFBtQUYydlNEbWxIWHdNN1lxQktqUjF1ajA0UnBQZENpcGR2dDRsMnp3VS8w?= =?utf-8?B?Q0NSblRMKzBMQ3lHVkRESnIvNEthaTlkVmxXZWx0UjAwZ3FZMTZZb0dIQTFs?= =?utf-8?B?dXVTYWFwQ2lXbVZwWFk3QkZ0ZFBhbVRRVzVYajh4L1FRaEo4WXJIWWVNU2ox?= =?utf-8?B?YUhuTTJ1djFwekdBdi81MzZtbUp6NnE3SzBBMmFvYlJBRnp5TVM4bkFOcnVH?= =?utf-8?B?S1phR0J6Y09PWWRQcDJreDFScnp2UFRVcEZLNTJkL1hpL3I0VFFLUjFoaXVq?= =?utf-8?B?YWNzY1pUdUZ6Y2lXNkpFNGtOeDVMZmJ5M3h4ekxtalM0RFQ4T1oyeWJSbWcz?= =?utf-8?Q?c/h74clxWFy68TYwMG6gLPLMl?= Content-Type: text/plain; charset="utf-8" Content-ID: <9B7834D3B892AB42BF7B7A07955DF26A@apcprd03.prod.outlook.com> Content-Transfer-Encoding: base64 MIME-Version: 1.0 X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: TYZPR03MB6624.apcprd03.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 1cf8f849-ca84-47bf-9ce0-08dd4f04e8ec X-MS-Exchange-CrossTenant-originalarrivaltime: 17 Feb 2025 03:41:06.2611 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: a7687ede-7a6b-4ef6-bace-642f677fbe31 X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: hKx4TZ2xqSH8DM07JpNAU85VtrchHdqBCh2V6AhmEW2kPaMRcs5kKa8qk/AmBJOjiR9EIoq9yujYUXUvo9ef+w== X-MS-Exchange-Transport-CrossTenantHeadersStamped: SEZPR03MB6492 X-BeenThere: linux-mediatek@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: "Linux-mediatek" Errors-To: linux-mediatek-bounces+linux-mediatek=archiver.kernel.org@lists.infradead.org T24gVHVlLCAyMDI1LTAyLTExIGF0IDEyOjM0ICswMTAwLCBBbmdlbG9HaW9hY2NoaW5vIERlbCBS ZWdubyB3cm90ZToNCj4gRXh0ZXJuYWwgZW1haWwgOiBQbGVhc2UgZG8gbm90IGNsaWNrIGxpbmtz IG9yIG9wZW4gYXR0YWNobWVudHMgdW50aWwgeW91IGhhdmUgdmVyaWZpZWQgdGhlIHNlbmRlciBv ciB0aGUgY29udGVudC4NCj4gDQo+IA0KPiBBZGQgc3VwcG9ydCBmb3IgdGhlIG5ld2VyIEhETUkt VFggKEVuY29kZXIpIHYyIGFuZCBEREMgdjIgSVBzDQo+IGZvdW5kIGluIE1lZGlhVGVrJ3MgTVQ4 MTk1LCBNVDgxODggU29DIGFuZCB0aGVpciB2YXJpYW50cywgYW5kDQo+IGluY2x1ZGluZyBzdXBw b3J0IGZvciBkaXNwbGF5IG1vZGVzIHVwIHRvIDRrNjAgYW5kIGZvciBIRE1JDQo+IEF1ZGlvLCBh cyBwZXIgdGhlIEhETUkgMi4wIHNwZWMuDQo+IA0KPiBIRENQIGFuZCBDRUMgZnVuY3Rpb25hbGl0 aWVzIGFyZSBhbHNvIHN1cHBvcnRlZCBieSB0aGlzIGhhcmR3YXJlLA0KPiBidXQgYXJlIG5vdCBp bmNsdWRlZCBpbiB0aGlzIGNvbW1pdCBhbmQgdGhhdCBhbHNvIHBvc2VzIGEgc2xpZ2h0DQo+IGRp ZmZlcmVuY2UgYmV0d2VlbiB0aGUgVjIgYW5kIFYxIGNvbnRyb2xsZXJzIGluIGhvdyB0aGV5IGhh bmRsZQ0KPiBIb3RwbHVnIERldGVjdGlvbiAoSFBEKS4NCj4gDQo+IFdoaWxlIHRoZSB2MSBjb250 cm9sbGVyIHdhcyB1c2luZyB0aGUgQ0VDIGNvbnRyb2xsZXIgdG8gY2hlY2sNCj4gSERNSSBjYWJs ZSBjb25uZWN0aW9uIGFuZCBkaXNjb25uZWN0aW9uLCBpbiB0aGlzIGRyaXZlciB0aGUgdjINCj4g b25lIGRvZXMgbm90Lg0KPiANCj4gVGhpcyBpcyBkdWUgdG8gdGhlIGZhY3QgdGhhdCBvbiBwYXJ0 cyB3aXRoIHYyIGRlc2lnbnMsIGxpa2UgdGhlDQo+IE1UODE5NSBTb0MsIHRoZXJlIGlzIG9uZSBD RUMgY29udHJvbGxlciBzaGFyZWQgYmV0d2VlbiB0aGUgSERNSQ0KPiBUcmFuc21pdHRlciAoSERN SS1UWCkgYW5kIFJlY2VpdmVyIChIRE1JLVJYKTogYmVmb3JlIGV2ZW50dWFsbHkNCj4gYWRkaW5n IHN1cHBvcnQgdG8gdXNlIHRoZSBDRUMgSFcgdG8gd2FrZSB1cCB0aGUgSERNSSBjb250cm9sbGVy cw0KPiBpdCBpcyBuZWNlc3NhcnkgdG8gaGF2ZSBzdXBwb3J0IGZvciBvbmUgVFgsIG9uZSBSWCAq YW5kKiBmb3IgYm90aA0KPiBhdCB0aGUgc2FtZSB0aW1lLg0KPiANCj4gU2lnbmVkLW9mZi1ieTog QW5nZWxvR2lvYWNjaGlubyBEZWwgUmVnbm8gPGFuZ2Vsb2dpb2FjY2hpbm8uZGVscmVnbm9AY29s bGFib3JhLmNvbT4NCj4gLS0tDQo+ICBkcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvS2NvbmZpZyAg ICAgICAgICAgIHwgICAgNyArDQo+ICBkcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvTWFrZWZpbGUg ICAgICAgICAgIHwgICAgMiArDQo+ICBkcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2hkbWlf Y29tbW9uLmMgIHwgICAxMCArDQo+ICBkcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2hkbWlf Y29tbW9uLmggIHwgICAgOSArDQo+ICBkcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2hkbWlf ZGRjX3YyLmMgIHwgIDM5NyArKysrKysNCj4gIGRyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtf aGRtaV9yZWdzX3YyLmggfCAgMjYzICsrKysNCj4gIGRyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9t dGtfaGRtaV92Mi5jICAgICAgfCAxMzY4ICsrKysrKysrKysrKysrKysrKysNCj4gIDcgZmlsZXMg Y2hhbmdlZCwgMjA1NiBpbnNlcnRpb25zKCspDQo+ICBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVy cy9ncHUvZHJtL21lZGlhdGVrL210a19oZG1pX2RkY192Mi5jDQo+ICBjcmVhdGUgbW9kZSAxMDA2 NDQgZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19oZG1pX3JlZ3NfdjIuaA0KPiAgY3JlYXRl IG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfaGRtaV92Mi5jDQo+IA0K PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL0tjb25maWcgYi9kcml2ZXJz L2dwdS9kcm0vbWVkaWF0ZWsvS2NvbmZpZw0KPiBpbmRleCA5OTRiNDhiODJkNDQuLmM4OWFlNGVk MmM5NiAxMDA2NDQNCj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL0tjb25maWcNCj4g KysrIGIvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL0tjb25maWcNCj4gQEAgLTQ1LDMgKzQ1LDEw IEBAIGNvbmZpZyBEUk1fTUVESUFURUtfSERNSQ0KPiAgICAgICAgIHNlbGVjdCBEUk1fTUVESUFU RUtfSERNSV9DT01NT04NCj4gICAgICAgICBoZWxwDQo+ICAgICAgICAgICBEUk0vS01TIEhETUkg ZHJpdmVyIGZvciBNZWRpYXRlayBTb0NzDQo+ICsNCj4gK2NvbmZpZyBEUk1fTUVESUFURUtfSERN SV9WMg0KPiArICAgICAgIHRyaXN0YXRlICJEUk0gSERNSSB2MiBJUCBzdXBwb3J0IGZvciBNZWRp YVRlayBTb0NzIg0KPiArICAgICAgIGRlcGVuZHMgb24gRFJNX01FRElBVEVLDQo+ICsgICAgICAg c2VsZWN0IERSTV9NRURJQVRFS19IRE1JX0NPTU1PTg0KPiArICAgICAgIGhlbHANCj4gKyAgICAg ICAgIERSTS9LTVMgSERNSSBkcml2ZXIgZm9yIE1lZGlhVGVrIFNvQ3Mgd2l0aCBIRE1JdjIgSVAN Cj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9NYWtlZmlsZSBiL2RyaXZl cnMvZ3B1L2RybS9tZWRpYXRlay9NYWtlZmlsZQ0KPiBpbmRleCA3OGNmMmQ0ZmM4NWYuLmUwYWM0 OWIwN2Q1MCAxMDA2NDQNCj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL01ha2VmaWxl DQo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9NYWtlZmlsZQ0KPiBAQCAtMjUsNSAr MjUsNyBAQCBvYmotJChDT05GSUdfRFJNX01FRElBVEVLX0hETUlfQ09NTU9OKSArPSBtdGtfaGRt aV9jb21tb24ubw0KPiAgb2JqLSQoQ09ORklHX0RSTV9NRURJQVRFS19IRE1JKSArPSBtdGtfY2Vj Lm8NCj4gIG9iai0kKENPTkZJR19EUk1fTUVESUFURUtfSERNSSkgKz0gbXRrX2hkbWkubw0KPiAg b2JqLSQoQ09ORklHX0RSTV9NRURJQVRFS19IRE1JKSArPSBtdGtfaGRtaV9kZGMubw0KPiArb2Jq LSQoQ09ORklHX0RSTV9NRURJQVRFS19IRE1JX1YyKSArPSBtdGtfaGRtaV92Mi5vDQo+ICtvYmot JChDT05GSUdfRFJNX01FRElBVEVLX0hETUlfVjIpICs9IG10a19oZG1pX2RkY192Mi5vDQo+IA0K PiAgb2JqLSQoQ09ORklHX0RSTV9NRURJQVRFS19EUCkgKz0gbXRrX2RwLm8NCj4gZGlmZiAtLWdp dCBhL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfaGRtaV9jb21tb24uYyBiL2RyaXZlcnMv Z3B1L2RybS9tZWRpYXRlay9tdGtfaGRtaV9jb21tb24uYw0KPiBpbmRleCBkNTg3NTJiNzcyZTgu LjJmMmU3N2I2NjRhMiAxMDA2NDQNCj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210 a19oZG1pX2NvbW1vbi5jDQo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfaGRt aV9jb21tb24uYw0KPiBAQCAtMjk0LDEwICsyOTQsMjAgQEAgc3RhdGljIGludCBtdGtfaGRtaV9k dF9wYXJzZV9wZGF0YShzdHJ1Y3QgbXRrX2hkbWkgKmhkbWksIHN0cnVjdCBwbGF0Zm9ybV9kZXZp Y2UNCj4gICAgICAgICBpZiAocmV0KQ0KPiAgICAgICAgICAgICAgICAgcmV0dXJuIGRldl9lcnJf cHJvYmUoZGV2LCByZXQsICJGYWlsZWQgdG8gZ2V0IGNsb2Nrc1xuIik7DQo+IA0KPiArDQo+ICsg ICAgICAgaGRtaS0+aXJxID0gcGxhdGZvcm1fZ2V0X2lycShwZGV2LCAwKTsNCj4gKyAgICAgICBp ZiAoIWhkbWktPmlycSkNCj4gKyAgICAgICAgICAgICAgIHJldHVybiBoZG1pLT5pcnE7DQo+ICsN Cj4gICAgICAgICBoZG1pLT5yZWdzID0gZGV2aWNlX25vZGVfdG9fcmVnbWFwKGRldi0+b2Zfbm9k ZSk7DQo+ICAgICAgICAgaWYgKElTX0VSUihoZG1pLT5yZWdzKSkNCj4gICAgICAgICAgICAgICAg IHJldHVybiBQVFJfRVJSKGhkbWktPnJlZ3MpOw0KPiANCj4gKyAgICAgICAvKiBQb3B1bGF0ZSBI RE1JIHN1Yi1kZXZpY2VzIGlmIHByZXNlbnQgKi8NCj4gKyAgICAgICByZXQgPSBkZXZtX29mX3Bs YXRmb3JtX3BvcHVsYXRlKCZwZGV2LT5kZXYpOw0KPiArICAgICAgIGlmIChyZXQpDQo+ICsgICAg ICAgICAgICAgICByZXR1cm4gcmV0Ow0KDQpXaHkgbmVlZCB0aGlzPyB2MSBkcml2ZXIgd29ya3Mg ZmluZSB3aXRob3V0IHRoaXMuDQoNCj4gKw0KPiAgICAgICAgIHJlbW90ZSA9IG9mX2dyYXBoX2dl dF9yZW1vdGVfbm9kZShucCwgMSwgMCk7DQo+ICAgICAgICAgaWYgKCFyZW1vdGUpDQo+ICAgICAg ICAgICAgICAgICByZXR1cm4gLUVJTlZBTDsNCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2Ry bS9tZWRpYXRlay9tdGtfaGRtaV9jb21tb24uaCBiL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9t dGtfaGRtaV9jb21tb24uaA0KPiBpbmRleCBkM2RlOGFmZmY0MGYuLmU3NGZlMTM3MTMyNCAxMDA2 NDQNCj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19oZG1pX2NvbW1vbi5oDQo+ ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfaGRtaV9jb21tb24uaA0KPiBAQCAt MTI2LDYgKzEyNiwxMiBAQCBzdHJ1Y3QgaGRtaV9hdWRpb19wYXJhbSB7DQo+ICAgICAgICAgc3Ry dWN0IGhkbWlfY29kZWNfcGFyYW1zIGNvZGVjX3BhcmFtczsNCj4gIH07DQo+IA0KPiArZW51bSBo ZG1pX2hwZF9zdGF0ZSB7DQo+ICsgICAgICAgSERNSV9QTFVHX09VVCA9IDAsDQo+ICsgICAgICAg SERNSV9QTFVHX0lOX0FORF9TSU5LX1BPV0VSX09OLA0KPiArICAgICAgIEhETUlfUExVR19JTl9P TkxZLA0KPiArfTsNCj4gKw0KPiAgc3RydWN0IG10a19oZG1pX3Zlcl9jb25mIHsNCj4gICAgICAg ICBjb25zdCBzdHJ1Y3QgZHJtX2JyaWRnZV9mdW5jcyAqYnJpZGdlX2Z1bmNzOw0KPiAgICAgICAg IGNvbnN0IHN0cnVjdCBoZG1pX2NvZGVjX29wcyAqY29kZWNfb3BzOw0KPiBAQCAtMTM4LDYgKzE0 NCw3IEBAIHN0cnVjdCBtdGtfaGRtaV9jb25mIHsNCj4gICAgICAgICBib29sIHR6X2Rpc2FibGVk Ow0KPiAgICAgICAgIGJvb2wgY2VhX21vZGVzX29ubHk7DQo+ICAgICAgICAgdW5zaWduZWQgbG9u ZyBtYXhfbW9kZV9jbG9jazsNCj4gKyAgICAgICB1MzIgcmVnX2hkbWlfdHhfY2ZnOw0KPiAgfTsN Cj4gDQo+ICBzdHJ1Y3QgbXRrX2hkbWkgew0KPiBAQCAtMTYwLDYgKzE2Nyw4IEBAIHN0cnVjdCBt dGtfaGRtaSB7DQo+ICAgICAgICAgYm9vbCBhdWRpb19lbmFibGU7DQo+ICAgICAgICAgYm9vbCBw b3dlcmVkOw0KPiAgICAgICAgIGJvb2wgZW5hYmxlZDsNCj4gKyAgICAgICB1bnNpZ25lZCBpbnQg aXJxOw0KPiArICAgICAgIGVudW0gaGRtaV9ocGRfc3RhdGUgaHBkOw0KPiAgICAgICAgIGhkbWlf Y29kZWNfcGx1Z2dlZF9jYiBwbHVnZ2VkX2NiOw0KPiAgICAgICAgIHN0cnVjdCBkZXZpY2UgKmNv ZGVjX2RldjsNCj4gICAgICAgICBzdHJ1Y3QgbXV0ZXggdXBkYXRlX3BsdWdnZWRfc3RhdHVzX2xv Y2s7DQo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2hkbWlfZGRj X3YyLmMgYi9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2hkbWlfZGRjX3YyLmMNCj4gbmV3 IGZpbGUgbW9kZSAxMDA2NDQNCj4gaW5kZXggMDAwMDAwMDAwMDAwLi5kODhmYzhhMmQ4NTkNCj4g LS0tIC9kZXYvbnVsbA0KPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2hkbWlf ZGRjX3YyLmMNCj4gQEAgLTAsMCArMSwzOTcgQEANCj4gKy8vIFNQRFgtTGljZW5zZS1JZGVudGlm aWVyOiBHUEwtMi4wDQo+ICsvKg0KPiArICogTWVkaWFUZWsgSERNSSB2MiBEaXNwbGF5IERhdGEg Q2hhbm5lbCBEcml2ZXINCj4gKyAqDQo+ICsgKiBDb3B5cmlnaHQgKGMpIDIwMjEgTWVkaWFUZWsg SW5jLg0KPiArICogQ29weXJpZ2h0IChjKSAyMDIxIEJheUxpYnJlLCBTQVMNCj4gKyAqIENvcHly aWdodCAoYykgMjAyNCBDb2xsYWJvcmEgTHRkLg0KPiArICogICAgICAgICAgICAgICAgICAgIEFu Z2Vsb0dpb2FjY2hpbm8gRGVsIFJlZ25vIDxhbmdlbG9naW9hY2NoaW5vLmRlbHJlZ25vQGNvbGxh Ym9yYS5jb20+DQo+ICsgKi8NCj4gKw0KPiArI2luY2x1ZGUgPGxpbnV4L2JpdGZpZWxkLmg+DQo+ ICsjaW5jbHVkZSA8bGludXgvY2xrLmg+DQo+ICsjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4NCj4g KyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4NCj4gKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4NCj4g KyNpbmNsdWRlIDxsaW51eC9pMmMuaD4NCj4gKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4NCj4g KyNpbmNsdWRlIDxsaW51eC9tZmQvc3lzY29uLmg+DQo+ICsjaW5jbHVkZSA8bGludXgvbW9kdWxl Lmg+DQo+ICsjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4NCj4gKyNpbmNsdWRlIDxsaW51eC9vZl9w bGF0Zm9ybS5oPg0KPiArI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPg0KPiArI2lu Y2x1ZGUgPGxpbnV4L3BtX3J1bnRpbWUuaD4NCj4gKyNpbmNsdWRlIDxsaW51eC9yZWdtYXAuaD4N Cj4gKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPg0KPiArDQo+ICsjaW5jbHVkZSA8ZHJtL2RybV9l ZGlkLmg+DQo+ICsNCj4gKyNpbmNsdWRlICJtdGtfaGRtaV9jb21tb24uaCINCj4gKyNpbmNsdWRl ICJtdGtfaGRtaV9yZWdzX3YyLmgiDQo+ICsNCj4gKyNkZWZpbmUgRERDMl9ETFlfQ05UIDU3MiAv KiBCSU09MjA4TS8odio0KSA9IDkwS2h6ICovDQo+ICsjZGVmaW5lIEREQzJfRExZX0NOVF9FRElE IDgzMiAvKiBCSU09MjA4TS8odio0KSA9IDYyLjVLaHogKi8NCj4gKyNkZWZpbmUgU0kyQ19BRERS X1JFQUQgMHhmNA0KPiArI2RlZmluZSBTQ0RDX0kyQ19TTEFWRV9BRERSRVNTIDB4NTQNCj4gKw0K PiArc3RydWN0IG10a19oZG1pX2RkYyB7DQo+ICsgICAgICAgc3RydWN0IGRldmljZSAqZGV2Ow0K PiArICAgICAgIHZvaWQgX19pb21lbSAqcmVnczsNCj4gKyAgICAgICBzdHJ1Y3QgY2xrICpjbGs7 DQo+ICsgICAgICAgc3RydWN0IGkyY19hZGFwdGVyIGFkYXA7DQo+ICsgICAgICAgLyogU2VyaWFs aXplIHJlYWQvd3JpdGUgb3BlcmF0aW9ucyAqLw0KPiArICAgICAgIHN0cnVjdCBtdXRleCBtdHg7 DQo+ICt9Ow0KPiArDQo+ICtzdGF0aWMgaW50IG10a19kZGNfY2hlY2tfYW5kX3Jpc2VfbG93X2J1 cyhzdHJ1Y3QgbXRrX2hkbWlfZGRjICpkZGMpDQo+ICt7DQo+ICsgICAgICAgdTMyIHZhbDsNCj4g Kw0KPiArICAgICAgIHJlZ21hcF9yZWFkKGRkYy0+cmVncywgSERDUDJYX0REQ01fU1RBVFVTLCAm dmFsKTsNCj4gKyAgICAgICBpZiAodmFsICYgRERDX0kyQ19CVVNfTE9XKSB7DQo+ICsgICAgICAg ICAgICAgICByZWdtYXBfdXBkYXRlX2JpdHMoZGRjLT5yZWdzLCBERENfQ1RSTCwgRERDX0NUUkxf Q01ELA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZJRUxEX1BSRVAoRERD X0NUUkxfQ01ELCBERENfQ01EX0NMT0NLX1NDTCkpOw0KPiArICAgICAgICAgICAgICAgdXNsZWVw X3JhbmdlKDI1MCwgMzAwKTsNCj4gKyAgICAgICB9DQo+ICsNCj4gKyAgICAgICBpZiAodmFsICYg RERDX0kyQ19OT19BQ0spIHsNCj4gKyAgICAgICAgICAgICAgIHUzMiBkZGNfY3RybCwgaHBkX2Rk Y19jdHJsLCBocGRfZGRjX3N0YXR1czsNCj4gKw0KPiArICAgICAgICAgICAgICAgcmVnbWFwX3Jl YWQoZGRjLT5yZWdzLCBERENfQ1RSTCwgJmRkY19jdHJsKTsNCj4gKyAgICAgICAgICAgICAgIHJl Z21hcF9yZWFkKGRkYy0+cmVncywgSFBEX0REQ19DVFJMLCAmaHBkX2RkY19jdHJsKTsNCj4gKyAg ICAgICAgICAgICAgIHJlZ21hcF9yZWFkKGRkYy0+cmVncywgSFBEX0REQ19TVEFUVVMsICZocGRf ZGRjX3N0YXR1cyk7DQo+ICsgICAgICAgfQ0KPiArDQo+ICsgICAgICAgaWYgKHZhbCAmIEREQ19J MkNfTk9fQUNLKQ0KPiArICAgICAgICAgICAgICAgcmV0dXJuIC1FSU87DQo+ICsNCj4gKyAgICAg ICByZXR1cm4gMDsNCj4gK30NCj4gKw0KPiArc3RhdGljIGludCBtdGtfZGRjX3dyX29uZShzdHJ1 Y3QgbXRrX2hkbWlfZGRjICpkZGMsIHUxNiBhZGRyX2lkLA0KPiArICAgICAgICAgICAgICAgICAg ICAgICAgIHUxNiBvZmZzZXRfaWQsIHU4IHdyX2RhdGEpDQo+ICt7DQo+ICsgICAgICAgdTMyIHZh bDsNCj4gKyAgICAgICBpbnQgcmV0Ow0KPiArDQo+ICsgICAgICAgLyogSWYgZG93biwgcmlzZSBi dXMgZm9yIHdyaXRlIG9wZXJhdGlvbiAqLw0KPiArICAgICAgIG10a19kZGNfY2hlY2tfYW5kX3Jp c2VfbG93X2J1cyhkZGMpOw0KPiArDQo+ICsgICAgICAgcmVnbWFwX3VwZGF0ZV9iaXRzKGRkYy0+ cmVncywgSFBEX0REQ19DVFJMLCBIUERfRERDX0RFTEFZX0NOVCwNCj4gKyAgICAgICAgICAgICAg ICAgICAgICAgICAgRklFTERfUFJFUChIUERfRERDX0RFTEFZX0NOVCwgRERDMl9ETFlfQ05UKSk7 DQo+ICsNCj4gKyAgICAgICByZWdtYXBfd3JpdGUoZGRjLT5yZWdzLCBTSTJDX0NUUkwsDQo+ICsg ICAgICAgICAgICAgICAgICAgIEZJRUxEX1BSRVAoU0kyQ19BRERSLCBTSTJDX0FERFJfUkVBRCkg fA0KPiArICAgICAgICAgICAgICAgICAgICBGSUVMRF9QUkVQKFNJMkNfV0RBVEEsIHdyX2RhdGEp IHwNCj4gKyAgICAgICAgICAgICAgICAgICAgU0kyQ19XUik7DQo+ICsNCj4gKyAgICAgICByZWdt YXBfd3JpdGUoZGRjLT5yZWdzLCBERENfQ1RSTCwNCj4gKyAgICAgICAgICAgICAgICAgICAgRklF TERfUFJFUChERENfQ1RSTF9DTUQsIEREQ19DTURfU0VRX1dSSVRFKSB8DQo+ICsgICAgICAgICAg ICAgICAgICAgIEZJRUxEX1BSRVAoRERDX0NUUkxfRElOX0NOVCwgMSkgfA0KPiArICAgICAgICAg ICAgICAgICAgICBGSUVMRF9QUkVQKEREQ19DVFJMX09GRlNFVCwgb2Zmc2V0X2lkKSB8DQo+ICsg ICAgICAgICAgICAgICAgICAgIEZJRUxEX1BSRVAoRERDX0NUUkxfQUREUiwgYWRkcl9pZCkpOw0K PiArICAgICAgIHVzbGVlcF9yYW5nZSgxMDAwLCAxMjUwKTsNCj4gKw0KPiArICAgICAgIHJldCA9 IHJlZ21hcF9yZWFkX3BvbGxfdGltZW91dChkZGMtPnJlZ3MsIEhQRF9ERENfU1RBVFVTLCB2YWws DQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICEodmFsICYgRERDX0ky Q19JTl9QUk9HKSwgNTAwLCAxMDAwKTsNCj4gKyAgICAgICBpZiAocmV0KSB7DQo+ICsgICAgICAg ICAgICAgICBkZXZfZXJyKGRkYy0+ZGV2LCAiRERDIEkyQyB3cml0ZSB0aW1lb3V0XG4iKTsNCj4g KyAgICAgICAgICAgICAgIHJldHVybiByZXQ7DQo+ICsgICAgICAgfQ0KPiArDQo+ICsgICAgICAg LyogVGhlIEkyQyBidXMgbWlnaHQgYmUgZG93biBhZnRlciBXUiBvcGVyYXRpb246IHJpc2UgaXQg YWdhaW4gKi8NCj4gKyAgICAgICByZXQgPSBtdGtfZGRjX2NoZWNrX2FuZF9yaXNlX2xvd19idXMo ZGRjKTsNCj4gKyAgICAgICBpZiAocmV0KSB7DQo+ICsgICAgICAgICAgICAgICBkZXZfZXJyKGRk Yy0+ZGV2LCAiRXJyb3IgZHVyaW5nIHdyaXRlIG9wZXJhdGlvbjogTm8gQUNLXG4iKTsNCj4gKyAg ICAgICAgICAgICAgIHJldHVybiByZXQ7DQo+ICsgICAgICAgfQ0KPiArDQo+ICsgICAgICAgcmV0 dXJuIDA7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyBpbnQgbXRrX2RkY21fcmVhZF9oZG1pKHN0cnVj dCBtdGtfaGRtaV9kZGMgKmRkYywgdTE2IGRseV9jbnQsIHUxNiB1Y19kZXYsDQo+ICsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHU4IGFkZHIsIHU4ICpwdWNfdmFsdWUsIHUxNiBkYXRhX2Nu dCkNCj4gK3sNCj4gKyAgICAgICB1MTYgaSwgbG9vcF9jb3VudGVyLCB0ZW1wX2xlbmd0aCwgdWNf aWR4Ow0KPiArICAgICAgIHUzMiByZW0sIHVjX3JlYWRfY291bnQsIHZhbDsNCj4gKyAgICAgICBp bnQgcmV0Ow0KPiArDQo+ICsgICAgICAgaWYgKCFwdWNfdmFsdWUgfHwgIWRhdGFfY250IHx8ICFk bHlfY250KSB7DQoNCmRseV9jbnQgaXMgRERDMl9ETFlfQ05UIHdoaWNoIGlzIDU3Mi4gU28gaXQg d291bGQgbm90IGJlIHplcm8uDQpNYXliZSB5b3UgbmVlZCBub3QgdG8gcGFzcyBkbHlfY250IGlu IHRoaXMgZnVuY3Rpb24gYmVjYXVzZSBpdCBpcyBhIGNvbnN0YW50Lg0KcHVjX3ZhbHVlIGlzICZt c2ctPmJ1ZlswXS4gSXQgd291bGQgbm90IGJlIHplcm8uDQpIb3cgY291bGQgZGF0YV9jbnQgYmUg emVybz8NCg0KPiArICAgICAgICAgICAgICAgZGV2X2VycihkZGMtPmRldiwgIkJhZCBERENNIHJl YWQgcmVxdWVzdFxuIik7DQo+ICsgICAgICAgICAgICAgICByZXR1cm4gMDsNCj4gKyAgICAgICB9 DQo+ICsNCj4gKyAgICAgICBtdGtfZGRjX2NoZWNrX2FuZF9yaXNlX2xvd19idXMoZGRjKTsNCj4g Kw0KPiArICAgICAgIHJlZ21hcF91cGRhdGVfYml0cyhkZGMtPnJlZ3MsIEREQ19DVFJMLCBERENf Q1RSTF9DTUQsDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgIEZJRUxEX1BSRVAoRERDX0NU UkxfQ01ELCBERENfQ01EX0NMRUFSX0ZJRk8pKTsNCj4gKw0KPiArICAgICAgIGlmIChkYXRhX2Nu dCA+PSAxNikgew0KPiArICAgICAgICAgICAgICAgdGVtcF9sZW5ndGggPSAxNjsNCj4gKyAgICAg ICAgICAgICAgIGxvb3BfY291bnRlciA9IGRhdGFfY250Ow0KPiArDQo+ICsgICAgICAgICAgICAg ICByZW0gPSBkb19kaXYobG9vcF9jb3VudGVyLCB0ZW1wX2xlbmd0aCk7DQo+ICsgICAgICAgICAg ICAgICBpZiAocmVtKQ0KPiArICAgICAgICAgICAgICAgICAgICAgICBsb29wX2NvdW50ZXIrKzsN Cj4gKyAgICAgICB9IGVsc2Ugew0KPiArICAgICAgICAgICAgICAgdGVtcF9sZW5ndGggPSBkYXRh X2NudDsNCj4gKyAgICAgICAgICAgICAgIGxvb3BfY291bnRlciA9IDE7DQo+ICsgICAgICAgfQ0K PiArDQo+ICsgICAgICAgaWYgKHVjX2RldiA+PSBERENfQUREUiAmJiBkbHlfY250IDwgRERDMl9E TFlfQ05UX0VESUQpDQoNCmRseV9jbnQgaXMgRERDMl9ETFlfQ05ULCBzbyBjaGVja2luZyAnZGx5 X2NudCA8IEREQzJfRExZX0NOVF9FRElEJyBpcyByZWR1bmRhbnQuDQoNCj4gKyAgICAgICAgICAg ICAgIGRseV9jbnQgPSBEREMyX0RMWV9DTlRfRURJRDsNCj4gKw0KPiArICAgICAgIHJlZ21hcF91 cGRhdGVfYml0cyhkZGMtPnJlZ3MsIEhQRF9ERENfQ1RSTCwgSFBEX0REQ19ERUxBWV9DTlQsDQo+ ICsgICAgICAgICAgICAgICAgICAgICAgICAgIEZJRUxEX1BSRVAoSFBEX0REQ19ERUxBWV9DTlQs IGRseV9jbnQpKTsNCj4gKw0KPiArICAgICAgIGZvciAoaSA9IDA7IGkgPCBsb29wX2NvdW50ZXI7 IGkrKykgew0KPiArICAgICAgICAgICAgICAgcmVtID0gZGF0YV9jbnQgJSAxNjsNCj4gKw0KPiAr ICAgICAgICAgICAgICAgaWYgKGkgPiAwICYmIGkgPT0gKGxvb3BfY291bnRlciAtIDEpICYmIHJl bSkNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgdGVtcF9sZW5ndGggPSByZW07DQo+ICsNCj4g KyAgICAgICAgICAgICAgIC8qIDB4NTEgLSAweDUzOiBGbG93IGNvbnRyb2wgKi8NCj4gKyAgICAg ICAgICAgICAgIGlmICh1Y19kZXYgPiBERENfQUREUiAmJiB1Y19kZXYgPD0gMHg1Mykgew0KPiAr ICAgICAgICAgICAgICAgICAgICAgICByZWdtYXBfdXBkYXRlX2JpdHMoZGRjLT5yZWdzLCBTQ0RD X0NUUkwsIFNDRENfRERDX1NFR01FTlQsDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBGSUVMRF9QUkVQKFNDRENfRERDX1NFR01FTlQsIHVjX2RldiAtIEREQ19B RERSKSk7DQo+ICsNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgcmVnbWFwX3dyaXRlKGRkYy0+ cmVncywgRERDX0NUUkwsDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBG SUVMRF9QUkVQKEREQ19DVFJMX0NNRCwgRERDX0NNRF9FTkhfUkVBRF9OT0FDSykgfA0KPiArICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRklFTERfUFJFUChERENfQ1RSTF9ESU5f Q05ULCB0ZW1wX2xlbmd0aCkgfA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgRklFTERfUFJFUChERENfQ1RSTF9PRkZTRVQsIGFkZHIgKyBpICogdGVtcF9sZW5ndGgpIHwN Cj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZJRUxEX1BSRVAoRERDX0NU UkxfQUREUiwgRERDX0FERFIpKTsNCj4gKyAgICAgICAgICAgICAgIH0gZWxzZSB7DQo+ICsgICAg ICAgICAgICAgICAgICAgICAgIHUxNiBvZmZzZXQ7DQo+ICsNCj4gKyAgICAgICAgICAgICAgICAg ICAgICAgaWYgKGFkZHIgIT0gMHg0MykNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBvZmZzZXQgPSBpICogMTY7DQo+ICsgICAgICAgICAgICAgICAgICAgICAgIGVsc2UNCj4gKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZmZzZXQgPSAwOw0KPiArDQo+ICsgICAgICAg ICAgICAgICAgICAgICAgIHJlZ21hcF93cml0ZShkZGMtPnJlZ3MsIEREQ19DVFJMLA0KPiArICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRklFTERfUFJFUChERENfQ1RSTF9DTUQs IEREQ19DTURfU0VRX1JFQURfTk9BQ0spIHwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIEZJRUxEX1BSRVAoRERDX0NUUkxfRElOX0NOVCwgdGVtcF9sZW5ndGgpIHwNCj4g KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZJRUxEX1BSRVAoRERDX0NUUkxf T0ZGU0VULCBhZGRyICsgb2Zmc2V0KSB8DQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBGSUVMRF9QUkVQKEREQ19DVFJMX0FERFIsIHVjX2RldikpOw0KPiArICAgICAgICAg ICAgICAgfQ0KPiArICAgICAgICAgICAgICAgdXNsZWVwX3JhbmdlKDUwMDAsIDU1MDApOw0KPiAr DQo+ICsgICAgICAgICAgICAgICByZXQgPSByZWdtYXBfcmVhZF9wb2xsX3RpbWVvdXQoZGRjLT5y ZWdzLCBIUERfRERDX1NUQVRVUywgdmFsLA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICEodmFsICYgRERDX0kyQ19JTl9QUk9HKSwgMTAwMCwNCj4gKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA1MDAgKiAodGVtcF9s ZW5ndGggKyA1KSk7DQo+ICsgICAgICAgICAgICAgICBpZiAocmV0KSB7DQo+ICsgICAgICAgICAg ICAgICAgICAgICAgIGRldl9lcnIoZGRjLT5kZXYsICJUaW1lb3V0IHdhaXRpbmcgZm9yIEREQyBJ MkNcbiIpOw0KPiArICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmV0Ow0KPiArICAgICAg ICAgICAgICAgfQ0KPiArDQo+ICsgICAgICAgICAgICAgICByZXQgPSBtdGtfZGRjX2NoZWNrX2Fu ZF9yaXNlX2xvd19idXMoZGRjKTsNCj4gKyAgICAgICAgICAgICAgIGlmIChyZXQpIHsNCj4gKyAg ICAgICAgICAgICAgICAgICAgICAgZGV2X2VycihkZGMtPmRldiwgIkVycm9yIGR1cmluZyByZWFk IG9wZXJhdGlvbjogTm8gQUNLXG4iKTsNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJu IHJldDsNCj4gKyAgICAgICAgICAgICAgIH0NCj4gKw0KPiArICAgICAgICAgICAgICAgZm9yICh1 Y19pZHggPSAwOyB1Y19pZHggPCB0ZW1wX2xlbmd0aDsgdWNfaWR4KyspIHsNCj4gKyAgICAgICAg ICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IHJlYWRfaWR4ID0gaSAqIDE2ICsgdWNfaWR4Ow0K PiArDQo+ICsgICAgICAgICAgICAgICAgICAgICAgIHJlZ21hcF93cml0ZShkZGMtPnJlZ3MsIFNJ MkNfQ1RSTCwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZJRUxEX1BS RVAoU0kyQ19BRERSLCBTSTJDX0FERFJfUkVBRCkgfA0KPiArICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgU0kyQ19SRCk7DQo+ICsNCj4gKyAgICAgICAgICAgICAgICAgICAgICAg cmVnbWFwX3JlYWQoZGRjLT5yZWdzLCBIUERfRERDX1NUQVRVUywgJnZhbCk7DQo+ICsgICAgICAg ICAgICAgICAgICAgICAgIHB1Y192YWx1ZVtyZWFkX2lkeF0gPSBGSUVMRF9HRVQoRERDX0RBVEFf T1VULCB2YWwpOw0KPiArDQo+ICsgICAgICAgICAgICAgICAgICAgICAgIHJlZ21hcF93cml0ZShk ZGMtPnJlZ3MsIFNJMkNfQ1RSTCwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIEZJRUxEX1BSRVAoU0kyQ19BRERSLCBTSTJDX0FERFJfUkVBRCkgfA0KPiArICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgU0kyQ19DT05GSVJNX1JFQUQpOw0KPiArDQo+ICsg ICAgICAgICAgICAgICAgICAgICAgIC8qDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAqIElm IEhETUkgSVAgZ2V0cyByZXNldCBkdXJpbmcgRURJRCByZWFkLCBEREMgcmVhZA0KPiArICAgICAg ICAgICAgICAgICAgICAgICAgKiBvcGVyYXRpb24gd2lsbCBmYWlsIGFuZCBpdHMgZGVsYXkgY291 bnRlciB3aWxsIGJlDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAqIHJlc2V0IHRvIDQwMC4N Cj4gKyAgICAgICAgICAgICAgICAgICAgICAgICovDQo+ICsgICAgICAgICAgICAgICAgICAgICAg IHJlZ21hcF9yZWFkKGRkYy0+cmVncywgSFBEX0REQ19DVFJMLCAmdmFsKTsNCj4gKyAgICAgICAg ICAgICAgICAgICAgICAgaWYgKEZJRUxEX0dFVChIUERfRERDX0RFTEFZX0NOVCwgdmFsKSA8IERE QzJfRExZX0NOVCkNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsN Cj4gKw0KPiArICAgICAgICAgICAgICAgICAgICAgICB1Y19yZWFkX2NvdW50ID0gcmVhZF9pZHgg KyAxOw0KPiArICAgICAgICAgICAgICAgfQ0KPiArICAgICAgIH0NCj4gKyAgICAgICBpZiAodWNf cmVhZF9jb3VudCA+IFU4X01BWCkNCj4gKyAgICAgICAgICAgICAgIGRldl93YXJuKGRkYy0+ZGV2 LCAiSW52YWxpZCByZWFkIGRhdGEgY291bnQgJXVcbiIsIHVjX3JlYWRfY291bnQpOw0KPiArDQo+ ICsgICAgICAgcmV0dXJuIHVjX3JlYWRfY291bnQ7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyBpbnQg bXRrX2hkbWlfZmdfZGRjX2RhdGFfcmVhZChzdHJ1Y3QgbXRrX2hkbWlfZGRjICpkZGMsIHUxNiBi X2RldiwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHU4IGRhdGFfYWRk ciwgdTE2IGRhdGFfY250LCB1OCAqcHJfZGF0YSkNCj4gK3sNCj4gKyAgICAgICBpbnQgcmVhZF9k YXRhX2NudDsNCj4gKyAgICAgICB1MTYgcmVxX2RhdGFfY250Ow0KPiArDQo+ICsgICAgICAgaWYg KCFwcl9kYXRhIHx8ICFkYXRhX2NudCkNCj4gKyAgICAgICAgICAgICAgIHJldHVybiAtRUlOVkFM Ow0KDQpwcl9kYXRhIGlzICZtc2ctPmJ1ZlswXS4gSXQgd291bGQgbm90IGJlIHplcm8uDQoNCj4g Kw0KPiArICAgICAgIHJlcV9kYXRhX2NudCA9IFU4X01BWCAtIGRhdGFfYWRkciArIDE7DQo+ICsg ICAgICAgaWYgKHJlcV9kYXRhX2NudCA+IGRhdGFfY250KQ0KPiArICAgICAgICAgICAgICAgcmVx X2RhdGFfY250ID0gZGF0YV9jbnQ7DQoNClRoZSByZXFfZGF0YV9jbnQgY2FsY3VsYXRpb24gbG9v a3Mgd2VpcmQuDQpDb3VsZCB5b3UgZXhwbGFpbiBob3cgdGhpcyB3b3JrPw0KDQo+ICsNCj4gKyAg ICAgICBtdXRleF9sb2NrKCZkZGMtPm10eCk7DQoNCkkgZG9uJ3Qga25vdyB3aHkgdXNlIG11dGV4 IHRvIHByb3RlY3QgdGhpcz8NClRoZSBmdW5jdGlvbiBpcyBjYWxsIGJ5IGkyY19hbGdvcml0aG0g Y2FsbGJhY2sgZnVuY3Rpb24gYW5kIHYxIGRvZXMgbm90IHVzZSBtdXRleC4NClNvIEkgdGhpbmsg dGhpcyBtdXRleCBpcyByZWR1bmRhbnQuDQoNCj4gKw0KPiArICAgICAgIHJlZ21hcF9zZXRfYml0 cyhkZGMtPnJlZ3MsIEhEQ1AyWF9QT0xfQ1RSTCwgSERDUDJYX0RJU19QT0xMX0VOKTsNCj4gKw0K PiArICAgICAgIHJlYWRfZGF0YV9jbnQgPSBtdGtfZGRjbV9yZWFkX2hkbWkoZGRjLCBEREMyX0RM WV9DTlQsIGJfZGV2LCBkYXRhX2FkZHIsDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBwcl9kYXRhLCByZXFfZGF0YV9jbnQpOw0KPiArDQo+ICsgICAgICAgbXV0 ZXhfdW5sb2NrKCZkZGMtPm10eCk7DQo+ICsNCj4gKyAgICAgICBpZiAocmVhZF9kYXRhX2NudCA8 IDApDQo+ICsgICAgICAgICAgICAgICByZXR1cm4gcmVhZF9kYXRhX2NudDsNCj4gKyAgICAgICBl bHNlIGlmIChyZWFkX2RhdGFfY250ICE9IHJlcV9kYXRhX2NudCkNCj4gKyAgICAgICAgICAgICAg IHJldHVybiAtRUlOVkFMOw0KPiArDQo+ICsgICAgICAgcmV0dXJuIDA7DQo+ICt9DQo+ICsNCj4g K3N0YXRpYyBpbnQgbXRrX2hkbWlfZGRjX2ZnX2RhdGFfd3JpdGUoc3RydWN0IG10a19oZG1pX2Rk YyAqZGRjLCB1MTYgYl9kZXYsDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgdTggZGF0YV9hZGRyLCB1MTYgZGF0YV9jbnQsIHU4ICpwcl9kYXRhKQ0KPiArew0KPiArICAg ICAgIGludCBpID0gMCwgcmV0Ow0KPiArDQo+ICsgICAgICAgbXV0ZXhfbG9jaygmZGRjLT5tdHgp Ow0KDQpJIGRvbid0IGtub3cgd2h5IHVzZSBtdXRleCB0byBwcm90ZWN0IHRoaXM/DQpUaGUgZnVu Y3Rpb24gaXMgY2FsbCBieSBpMmNfYWxnb3JpdGhtIGNhbGxiYWNrIGZ1bmN0aW9uIGFuZCB2MSBk b2VzIG5vdCB1c2UgbXV0ZXguDQpTbyBJIHRoaW5rIHRoaXMgbXV0ZXggaXMgcmVkdW5kYW50Lg0K DQo+ICsNCj4gKyAgICAgICByZWdtYXBfc2V0X2JpdHMoZGRjLT5yZWdzLCBIRENQMlhfUE9MX0NU UkwsIEhEQ1AyWF9ESVNfUE9MTF9FTik7DQo+ICsgICAgICAgZG8gew0KPiArICAgICAgICAgICAg ICAgcmV0ID0gbXRrX2RkY193cl9vbmUoZGRjLCBiX2RldiwgZGF0YV9hZGRyICsgaSwgcHJfZGF0 YVtpXSk7DQo+ICsgICAgICAgICAgICAgICBpZiAocmV0KQ0KPiArICAgICAgICAgICAgICAgICAg ICAgICBicmVhazsNCj4gKyAgICAgICB9IHdoaWxlICgrK2kgPCBkYXRhX2NudCk7DQo+ICsNCj4g KyAgICAgICBtdXRleF91bmxvY2soJmRkYy0+bXR4KTsNCj4gKw0KPiArICAgICAgIHJldHVybiBy ZXQ7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyBpbnQgbXRrX2hkbWlfZGRjX3YyX3hmZXIoc3RydWN0 IGkyY19hZGFwdGVyICphZGFwdGVyLCBzdHJ1Y3QgaTJjX21zZyAqbXNncywgaW50IG51bSkNCj4g K3sNCj4gKyAgICAgICBzdHJ1Y3QgbXRrX2hkbWlfZGRjICpkZGM7DQo+ICsgICAgICAgdTggb2Zm c2V0ID0gMDsNCj4gKyAgICAgICBpbnQgaSwgcmV0Ow0KPiArDQo+ICsgICAgICAgaWYgKCFhZGFw dGVyIHx8ICFhZGFwdGVyLT5hbGdvX2RhdGEgfHwgIW1zZ3MpDQoNCkluIHYxLCBpdCBkb2VzIG5v dCBjaGVjayB0aGVzZS4gVGhlc2UgY2hlY2tpbmcgbWF5IGJlIHJlZHVuZGFudC4NCg0KPiArICAg ICAgICAgICAgICAgcmV0dXJuIC1FSU5WQUw7DQo+ICsNCj4gKyAgICAgICBkZGMgPSBhZGFwdGVy LT5hbGdvX2RhdGE7DQo+ICsNCj4gKyAgICAgICBmb3IgKGkgPSAwOyBpIDwgbnVtOyBpKyspIHsN Cj4gKyAgICAgICAgICAgICAgIHN0cnVjdCBpMmNfbXNnICptc2cgPSAmbXNnc1tpXTsNCj4gKw0K PiArICAgICAgICAgICAgICAgaWYgKCFtc2ctPmJ1Zikgew0KDQpJbiB2MSwgaXQgZG9lcyBub3Qg Y2hlY2sgdGhlc2UuIFRoaXMgY2hlY2tpbmcgbWF5IGJlIHJlZHVuZGFudC4NCg0KPiArICAgICAg ICAgICAgICAgICAgICAgICBwcl9lcnIoIlhGRVI6IE5vIG1lc3NhZ2UgYnVmZmVyXG4iKTsNCj4g KyAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC1FSU5WQUw7DQo+ICsgICAgICAgICAgICAg ICB9DQo+ICsNCj4gKyAgICAgICAgICAgICAgIGlmIChtc2ctPmZsYWdzICYgSTJDX01fUkQpIHsN Cj4gKyAgICAgICAgICAgICAgICAgICAgICAgLyoNCj4gKyAgICAgICAgICAgICAgICAgICAgICAg ICogVGhlIHVuZGVybHlpbmcgRERDIGhhcmR3YXJlIGFsd2F5cyBpc3N1ZXMgYSB3cml0ZSByZXF1 ZXN0DQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAqIHRoYXQgYXNzaWducyB0aGUgcmVhZCBv ZmZzZXQgYXMgcGFydCBvZiB0aGUgcmVhZCBvcGVyYXRpb24sDQo+ICsgICAgICAgICAgICAgICAg ICAgICAgICAqIHRoZXJlZm9yZSwgdXNlIHRoZSBgb2Zmc2V0YCB2YWx1ZSBhc3NpZ25lZCBpbiB0 aGUgcHJldmlvdXMNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICogd3JpdGUgcmVxdWVzdCBm cm9tIGRybV9lZGlkDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAqLw0KPiArICAgICAgICAg ICAgICAgICAgICAgICByZXQgPSBtdGtfaGRtaV9mZ19kZGNfZGF0YV9yZWFkKGRkYywgbXNnLT5h ZGRyLCBvZmZzZXQsDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgbXNnLT5sZW4sICZtc2ctPmJ1ZlswXSk7DQo+ICsgICAgICAgICAgICAg ICAgICAgICAgIGlmIChyZXQpDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0 dXJuIHJldDsNCj4gKyAgICAgICAgICAgICAgIH0gZWxzZSB7DQo+ICsgICAgICAgICAgICAgICAg ICAgICAgIHJldCA9IG10a19oZG1pX2RkY19mZ19kYXRhX3dyaXRlKGRkYywgbXNnLT5hZGRyLCBt c2ctPmJ1ZlswXSwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgbXNnLT5sZW4gLSAxLCAmbXNnLT5idWZbMV0pOw0KDQpJbiB2MSwgaXQg ZG9lcyBub3QgdXNlICZtc2ctPmJ1ZlsxXS4gQWRkIGNvbW1lbnQgdG8gZXhwbGFpbiB3aHkgdjIg dXNlIHRoaXMuDQoNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJldCkNCj4gKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmV0Ow0KPiArDQo+ICsgICAgICAgICAg ICAgICAgICAgICAgIC8qDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAqIFN0b3JlIHRoZSBv ZmZzZXQgdmFsdWUgcmVxdWVzdGVkIGJ5IGRybV9lZGlkIG9yIGJ5DQo+ICsgICAgICAgICAgICAg ICAgICAgICAgICAqIHNjZGMgdG8gdXNlIGluIHN1YnNlcXVlbnQgcmVhZCByZXF1ZXN0cy4NCj4g KyAgICAgICAgICAgICAgICAgICAgICAgICovDQo+ICsgICAgICAgICAgICAgICAgICAgICAgIGlm ICgobXNnLT5hZGRyID09IEREQ19BRERSIHx8IG1zZy0+YWRkciA9PSBTQ0RDX0kyQ19TTEFWRV9B RERSRVNTKSAmJg0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgbXNnLT5sZW4gPT0gMSkg ew0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mZnNldCA9IG1zZy0+YnVmWzBd Ow0KPiArICAgICAgICAgICAgICAgICAgICAgICB9DQo+ICsgICAgICAgICAgICAgICB9DQo+ICsg ICAgICAgfQ0KPiArDQo+ICsgICAgICAgcmV0dXJuIGk7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyB1 MzIgbXRrX2hkbWlfZGRjX3YyX2Z1bmMoc3RydWN0IGkyY19hZGFwdGVyICphZGFwdGVyKQ0KPiAr ew0KPiArICAgICAgIHJldHVybiBJMkNfRlVOQ19JMkMgfCBJMkNfRlVOQ19TTUJVU19FTVVMOw0K PiArfQ0KPiArDQo+ICtzdGF0aWMgY29uc3Qgc3RydWN0IGkyY19hbGdvcml0aG0gbXRrX2hkbWlf ZGRjX3YyX2FsZ29yaXRobSA9IHsNCj4gKyAgICAgICAubWFzdGVyX3hmZXIgPSBtdGtfaGRtaV9k ZGNfdjJfeGZlciwNCj4gKyAgICAgICAuZnVuY3Rpb25hbGl0eSA9IG10a19oZG1pX2RkY192Ml9m dW5jLA0KPiArfTsNCj4gKw0KPiArc3RhdGljIGludCBtdGtfaGRtaV9kZGNfdjJfcHJvYmUoc3Ry dWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikNCj4gK3sNCj4gKyAgICAgICBzdHJ1Y3QgZGV2aWNl ICpkZXYgPSAmcGRldi0+ZGV2Ow0KPiArICAgICAgIHN0cnVjdCBtdGtfaGRtaV9kZGMgKmRkYzsN Cj4gKyAgICAgICBpbnQgcmV0Ow0KPiArDQo+ICsgICAgICAgZGRjID0gZGV2bV9remFsbG9jKGRl diwgc2l6ZW9mKCpkZGMpLCBHRlBfS0VSTkVMKTsNCj4gKyAgICAgICBpZiAoIWRkYykNCj4gKyAg ICAgICAgICAgICAgIHJldHVybiAtRU5PTUVNOw0KPiArDQo+ICsgICAgICAgZGRjLT5kZXYgPSBk ZXY7DQo+ICsgICAgICAgZGRjLT5yZWdzID0gZGV2aWNlX25vZGVfdG9fcmVnbWFwKGRldi0+cGFy ZW50LT5vZl9ub2RlKTsNCj4gKyAgICAgICBpZiAoSVNfRVJSX09SX05VTEwoZGRjLT5yZWdzKSkN Cj4gKyAgICAgICAgICAgICAgIHJldHVybiBkZXZfZXJyX3Byb2JlKGRldiwNCj4gKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIElTX0VSUihkZGMtPnJlZ3MpID8gUFRSX0VSUihk ZGMtPnJlZ3MpIDogLUVJTlZBTCwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICJDYW5ub3QgZ2V0IHJlZ21hcFxuIik7DQo+ICsNCj4gKyAgICAgICBkZGMtPmNsayA9IGRl dm1fY2xrX2dldF9lbmFibGVkKGRldiwgTlVMTCk7DQo+ICsgICAgICAgaWYgKElTX0VSUihkZGMt PmNsaykpDQo+ICsgICAgICAgICAgICAgICByZXR1cm4gZGV2X2Vycl9wcm9iZShkZXYsIFBUUl9F UlIoZGRjLT5jbGspLCAiQ2Fubm90IGdldCBEREMgY2xvY2tcbiIpOw0KPiArDQo+ICsgICAgICAg bXV0ZXhfaW5pdCgmZGRjLT5tdHgpOw0KPiArDQo+ICsgICAgICAgc3Ryc2NweShkZGMtPmFkYXAu bmFtZSwgIm1lZGlhdGVrLWhkbWktZGRjLXYyIiwgc2l6ZW9mKGRkYy0+YWRhcC5uYW1lKSk7DQo+ ICsgICAgICAgZGRjLT5hZGFwLm93bmVyID0gVEhJU19NT0RVTEU7DQo+ICsgICAgICAgZGRjLT5h ZGFwLmFsZ28gPSAmbXRrX2hkbWlfZGRjX3YyX2FsZ29yaXRobTsNCj4gKyAgICAgICBkZGMtPmFk YXAucmV0cmllcyA9IDM7DQo+ICsgICAgICAgZGRjLT5hZGFwLmRldi5vZl9ub2RlID0gZGV2LT5v Zl9ub2RlOw0KPiArICAgICAgIGRkYy0+YWRhcC5hbGdvX2RhdGEgPSBkZGM7DQo+ICsgICAgICAg ZGRjLT5hZGFwLmRldi5wYXJlbnQgPSAmcGRldi0+ZGV2Ow0KPiArDQo+ICsgICAgICAgcmV0ID0g ZGV2bV9wbV9ydW50aW1lX2VuYWJsZSgmcGRldi0+ZGV2KTsNCj4gKyAgICAgICBpZiAocmV0KQ0K PiArICAgICAgICAgICAgICAgcmV0dXJuIGRldl9lcnJfcHJvYmUoJnBkZXYtPmRldiwgcmV0LCAi Q2Fubm90IGVuYWJsZSBSdW50aW1lIFBNXG4iKTsNCj4gKw0KPiArICAgICAgIHBtX3J1bnRpbWVf Z2V0X3N5bmMoZGV2KTsNCj4gKw0KPiArICAgICAgIHJldCA9IGRldm1faTJjX2FkZF9hZGFwdGVy KGRldiwgJmRkYy0+YWRhcCk7DQo+ICsgICAgICAgaWYgKHJldCA8IDApDQo+ICsgICAgICAgICAg ICAgICByZXR1cm4gZGV2X2Vycl9wcm9iZShkZXYsIHJldCwgIkNhbm5vdCBhZGQgRERDIEkyQyBh ZGFwdGVyXG4iKTsNCj4gKw0KPiArICAgICAgIHBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIGRk Yyk7DQo+ICsgICAgICAgcmV0dXJuIDA7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyBjb25zdCBzdHJ1 Y3Qgb2ZfZGV2aWNlX2lkIG10a19oZG1pX2RkY192Ml9tYXRjaFtdID0gew0KPiArICAgICAgIHsg LmNvbXBhdGlibGUgPSAibWVkaWF0ZWssbXQ4MTk1LWhkbWktZGRjIiB9LA0KPiArICAgICAgIHsg Lyogc2VudGluZWwgKi8gfQ0KPiArfTsNCj4gK01PRFVMRV9ERVZJQ0VfVEFCTEUob2YsIG10a19o ZG1pX2RkY192Ml9tYXRjaCk7DQo+ICsNCj4gK3N0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgbXRrX2hk bWlfZGRjX3YyX2RyaXZlciA9IHsNCj4gKyAgICAgICAucHJvYmUgPSBtdGtfaGRtaV9kZGNfdjJf cHJvYmUsDQo+ICsgICAgICAgLmRyaXZlciA9IHsNCj4gKyAgICAgICAgICAgICAgIC5uYW1lID0g Im1lZGlhdGVrLWhkbWktZGRjLXYyIiwNCj4gKyAgICAgICAgICAgICAgIC5vZl9tYXRjaF90YWJs ZSA9IG10a19oZG1pX2RkY192Ml9tYXRjaCwNCj4gKyAgICAgICB9LA0KPiArfTsNCj4gK21vZHVs ZV9wbGF0Zm9ybV9kcml2ZXIobXRrX2hkbWlfZGRjX3YyX2RyaXZlcik7DQo+ICsNCj4gK01PRFVM RV9BVVRIT1IoIkFuZ2Vsb0dpb2FjY2hpbm8gRGVsIFJlZ25vIDxhbmdlbG9naW9hY2NoaW5vLmRl bHJlZ25vQGNvbGxhYm9yYS5jb20+Iik7DQo+ICtNT0RVTEVfQVVUSE9SKCJDYW4gWmVuZyA8Y2Fu LnplbmdAbWVkaWF0ZWsuY29tPiIpOw0KPiArTU9EVUxFX0RFU0NSSVBUSU9OKCJNZWRpYVRlayBI RE1JdjIgRERDIERyaXZlciIpOw0KPiArTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOw0KPiBkaWZmIC0t Z2l0IGEvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19oZG1pX3JlZ3NfdjIuaCBiL2RyaXZl cnMvZ3B1L2RybS9tZWRpYXRlay9tdGtfaGRtaV9yZWdzX3YyLmgNCj4gbmV3IGZpbGUgbW9kZSAx MDA2NDQNCj4gaW5kZXggMDAwMDAwMDAwMDAwLi41MjFiMzVjN2UxNGQNCj4gLS0tIC9kZXYvbnVs bA0KPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2hkbWlfcmVnc192Mi5oDQo+ IEBAIC0wLDAgKzEsMjYzIEBADQo+ICsvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIu MCAqLw0KPiArLyoNCj4gKyAqIENvcHlyaWdodCAoYykgMjAyMSBNZWRpYVRlayBJbmMuDQo+ICsg KiBDb3B5cmlnaHQgKGMpIDIwMjEgQmF5TGlicmUsIFNBUw0KPiArICogQ29weXJpZ2h0IChjKSAy MDI0IENvbGxhYm9yYSBMdGQuDQo+ICsgKiAgICAgICAgICAgICAgICAgICAgQW5nZWxvR2lvYWNj aGlubyBEZWwgUmVnbm8gPGFuZ2Vsb2dpb2FjY2hpbm8uZGVscmVnbm9AY29sbGFib3JhLmNvbT4N Cj4gKyAqLw0KPiArDQo+ICsjaWZuZGVmIF9NVEtfSERNSV9SRUdTX0gNCj4gKyNkZWZpbmUgX01U S19IRE1JX1JFR1NfSA0KPiArDQo+ICsvKiBIRE1JX1RPUCBDb25maWcgKi8NCj4gKyNkZWZpbmUg VE9QX0NGRzAwICAgICAgICAgICAgICAgICAgICAgIDB4MDAwDQo+ICsjZGVmaW5lICBIRE1JMl9P TiAgICAgICAgICAgICAgICAgICAgICBCSVQoMikNCj4gKyNkZWZpbmUgIEhETUlfTU9ERV9IRE1J ICAgICAgICAgICAgICAgICAgICAgICAgQklUKDMpDQo+ICsjZGVmaW5lICBTQ1JfT04gICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIEJJVCg0KQ0KPiArI2RlZmluZSAgVE1EU19QQUNLX01P REUgICAgICAgICAgICAgICAgICAgICAgICBHRU5NQVNLKDksIDgpDQo+ICsjZGVmaW5lICAgVE1E U19QQUNLX01PREVfOEJQUCAgICAgICAgICAwDQo+ICsjZGVmaW5lICAgVE1EU19QQUNLX01PREVf MTBCUFAgICAgICAgICAxDQo+ICsjZGVmaW5lICAgVE1EU19QQUNLX01PREVfMTJCUFAgICAgICAg ICAyDQo+ICsjZGVmaW5lICAgVE1EU19QQUNLX01PREVfMTZCUFAgICAgICAgICAzDQoNCkkgd291 bGQgbGlrZSB0aGUgbmFtZSB0byBhbGlnbiwgYW5kIGxldCBudW1iZXIgdG8gaGF2ZSBpbmRlbnQu DQoNCj4gKyNkZWZpbmUgIERFRVBDT0xPUl9QS1RfRU4gICAgICAgICAgICAgIEJJVCgxMikNCj4g KyNkZWZpbmUgIEhETUlfQUJJU1RfVklERU9fRk9STUFUICAgICAgIEdFTk1BU0soMjEsIDE2KQ0K PiArI2RlZmluZSAgSERNSV9BQklTVF9FTkFCTEUgICAgICAgICAgICAgQklUKDMxKQ0KPiArI2Rl ZmluZSBUT1BfQ0ZHMDEgMHgwMDQNCj4gKyNkZWZpbmUgIENQX1NFVF9NVVRFX0VOICAgICAgICAg ICAgICAgICAgICAgICAgQklUKDApDQo+ICsjZGVmaW5lICBDUF9DTFJfTVVURV9FTiAgICAgICAg ICAgICAgICAgICAgICAgIEJJVCgxKQ0KPiArI2RlZmluZSAgTlVMTF9QS1RfRU4gICAgICAgICAg ICAgICAgICAgQklUKDIpDQo+ICsjZGVmaW5lICBOVUxMX1BLVF9WU1lOQ19ISUdIX0VOICAgICAg ICAgICAgICAgIEJJVCgzKQ0KPiArDQo+ICsvKiBIRE1JX1RPUCBBdWRpbzogQ2hhbm5lbCBNYXBw aW5nICovDQo+ICsjZGVmaW5lIFRPUF9BVURfTUFQICAgICAgICAgICAgICAgICAgICAweDAwYw0K PiArI2RlZmluZSAgU0QwX01BUCAgICAgICAgICAgICAgICAgICAgICAgR0VOTUFTSygyLCAwKQ0K PiArI2RlZmluZSAgU0QxX01BUCAgICAgICAgICAgICAgICAgICAgICAgR0VOTUFTSyg2LCA0KQ0K PiArI2RlZmluZSAgU0QyX01BUCAgICAgICAgICAgICAgICAgICAgICAgR0VOTUFTSygxMCwgOCkN Cj4gKyNkZWZpbmUgIFNEM19NQVAgICAgICAgICAgICAgICAgICAgICAgIEdFTk1BU0soMTQsIDEy KQ0KPiArI2RlZmluZSAgU0Q0X01BUCAgICAgICAgICAgICAgICAgICAgICAgR0VOTUFTSygxOCwg MTYpDQo+ICsjZGVmaW5lICBTRDVfTUFQICAgICAgICAgICAgICAgICAgICAgICBHRU5NQVNLKDIy LCAyMCkNCj4gKyNkZWZpbmUgIFNENl9NQVAgICAgICAgICAgICAgICAgICAgICAgIEdFTk1BU0so MjYsIDI0KQ0KPiArI2RlZmluZSAgU0Q3X01BUCAgICAgICAgICAgICAgICAgICAgICAgR0VOTUFT SygzMCwgMjgpDQo+ICsNCj4gKy8qIEF1eGlsaWFyeSBWaWRlbyBJbmZvcm1hdGlvbiAoQVZJKSBJ bmZvZnJhbWUgKi8NCj4gKyNkZWZpbmUgVE9QX0FWSV9IRUFERVIgICAgICAgICAgICAgICAgIDB4 MDI0DQo+ICsjZGVmaW5lIFRPUF9BVklfUEtUMDAgICAgICAgICAgICAgICAgICAweDAyOA0KPiAr I2RlZmluZSBUT1BfQVZJX1BLVDAxICAgICAgICAgICAgICAgICAgMHgwMkMNCj4gKyNkZWZpbmUg VE9QX0FWSV9QS1QwMiAgICAgICAgICAgICAgICAgIDB4MDMwDQo+ICsjZGVmaW5lIFRPUF9BVklf UEtUMDMgICAgICAgICAgICAgICAgICAweDAzNA0KPiArI2RlZmluZSBUT1BfQVZJX1BLVDA0ICAg ICAgICAgICAgICAgICAgMHgwMzgNCj4gKyNkZWZpbmUgVE9QX0FWSV9QS1QwNSAgICAgICAgICAg ICAgICAgIDB4MDNDDQo+ICsNCj4gKy8qIEF1ZGlvIEludGVyZmFjZSBJbmZvZnJhbWUgKi8NCj4g KyNkZWZpbmUgVE9QX0FJRl9IRUFERVIgICAgICAgICAgICAgICAgIDB4MDQwDQo+ICsjZGVmaW5l IFRPUF9BSUZfUEtUMDAgICAgICAgICAgICAgICAgICAweDA0NA0KPiArI2RlZmluZSBUT1BfQUlG X1BLVDAxICAgICAgICAgICAgICAgICAgMHgwNDgNCj4gKyNkZWZpbmUgVE9QX0FJRl9QS1QwMiAg ICAgICAgICAgICAgICAgIDB4MDRjDQo+ICsjZGVmaW5lIFRPUF9BSUZfUEtUMDMgICAgICAgICAg ICAgICAgICAweDA1MA0KPiArDQo+ICsvKiBBdWRpbyBTUERJRiBJbmZvZnJhbWUgKi8NCj4gKyNk ZWZpbmUgVE9QX1NQRElGX0hFQURFUiAgICAgICAgICAgICAgIDB4MDU0DQo+ICsjZGVmaW5lIFRP UF9TUERJRl9QS1QwMCAgICAgICAgICAgICAgICAgICAgICAgIDB4MDU4DQo+ICsjZGVmaW5lIFRP UF9TUERJRl9QS1QwMSAgICAgICAgICAgICAgICAgICAgICAgIDB4MDVjDQo+ICsjZGVmaW5lIFRP UF9TUERJRl9QS1QwMiAgICAgICAgICAgICAgICAgICAgICAgIDB4MDYwDQo+ICsjZGVmaW5lIFRP UF9TUERJRl9QS1QwMyAgICAgICAgICAgICAgICAgICAgICAgIDB4MDY0DQo+ICsjZGVmaW5lIFRP UF9TUERJRl9QS1QwNCAgICAgICAgICAgICAgICAgICAgICAgIDB4MDY4DQo+ICsjZGVmaW5lIFRP UF9TUERJRl9QS1QwNSAgICAgICAgICAgICAgICAgICAgICAgIDB4MDZjDQo+ICsjZGVmaW5lIFRP UF9TUERJRl9QS1QwNiAgICAgICAgICAgICAgICAgICAgICAgIDB4MDcwDQo+ICsjZGVmaW5lIFRP UF9TUERJRl9QS1QwNyAgICAgICAgICAgICAgICAgICAgICAgIDB4MDc0DQo+ICsNCj4gKy8qIElu Zm9mcmFtZXMgQ29uZmlndXJhdGlvbiAqLw0KPiArI2RlZmluZSBUT1BfSU5GT19FTiAgICAgICAg ICAgICAgICAgICAgMHgwMWMNCj4gKyNkZWZpbmUgIEFWSV9FTiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgQklUKDApDQo+ICsjZGVmaW5lICBTUERfRU4gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIEJJVCgxKQ0KPiArI2RlZmluZSAgQVVEX0VOICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBCSVQoMikNCj4gKyNkZWZpbmUgIENQX0VOICAgICAgICAgICAgICAgICAg ICAgICAgIEJJVCg1KQ0KPiArI2RlZmluZSAgVlNJRl9FTiAgICAgICAgICAgICAgICAgICAgICAg QklUKDExKQ0KPiArI2RlZmluZSAgQVZJX0VOX1dSICAgICAgICAgICAgICAgICAgICAgQklUKDE2 KQ0KPiArI2RlZmluZSAgU1BEX0VOX1dSICAgICAgICAgICAgICAgICAgICAgQklUKDE3KQ0KPiAr I2RlZmluZSAgQVVEX0VOX1dSICAgICAgICAgICAgICAgICAgICAgQklUKDE4KQ0KPiArI2RlZmlu ZSAgQ1BfRU5fV1IgICAgICAgICAgICAgICAgICAgICAgQklUKDIxKQ0KPiArI2RlZmluZSAgVlNJ Rl9FTl9XUiAgICAgICAgICAgICAgICAgICAgQklUKDI3KQ0KPiArI2RlZmluZSBUT1BfSU5GT19S UFQgICAgICAgICAgICAgICAgICAgMHgwMjANCj4gKyNkZWZpbmUgIEFWSV9SUFRfRU4gICAgICAg ICAgICAgICAgICAgIEJJVCgwKQ0KPiArI2RlZmluZSAgU1BEX1JQVF9FTiAgICAgICAgICAgICAg ICAgICAgQklUKDEpDQo+ICsjZGVmaW5lICBBVURfUlBUX0VOICAgICAgICAgICAgICAgICAgICBC SVQoMikNCj4gKyNkZWZpbmUgIENQX1JQVF9FTiAgICAgICAgICAgICAgICAgICAgIEJJVCg1KQ0K PiArI2RlZmluZSAgVlNJRl9SUFRfRU4gICAgICAgICAgICAgICAgICAgQklUKDExKQ0KPiArDQo+ ICsvKiBWZW5kb3IgU3BlY2lmaWMgSW5mb2ZyYW1lICovDQo+ICsjZGVmaW5lIFRPUF9WU0lGX0hF QURFUiAgICAgICAgICAgICAgICAgICAgICAgIDB4MTc0DQo+ICsjZGVmaW5lIFRPUF9WU0lGX1BL VDAwICAgICAgICAgICAgICAgICAweDE3OA0KPiArI2RlZmluZSBUT1BfVlNJRl9QS1QwMSAgICAg ICAgICAgICAgICAgMHgxN2MNCj4gKyNkZWZpbmUgVE9QX1ZTSUZfUEtUMDIgICAgICAgICAgICAg ICAgIDB4MTgwDQo+ICsjZGVmaW5lIFRPUF9WU0lGX1BLVDAzICAgICAgICAgICAgICAgICAweDE4 NA0KPiArI2RlZmluZSBUT1BfVlNJRl9QS1QwNCAgICAgICAgICAgICAgICAgMHgxODgNCj4gKyNk ZWZpbmUgVE9QX1ZTSUZfUEtUMDUgICAgICAgICAgICAgICAgIDB4MThjDQo+ICsjZGVmaW5lIFRP UF9WU0lGX1BLVDA2ICAgICAgICAgICAgICAgICAweDE5MA0KPiArI2RlZmluZSBUT1BfVlNJRl9Q S1QwNyAgICAgICAgICAgICAgICAgMHgxOTQNCj4gKw0KPiArLyogSERNSV9UT1AgTWlzYyAqLw0K PiArI2RlZmluZSBUT1BfTUlTQ19DVExSICAgICAgICAgICAgICAgICAgMHgxYTQNCj4gKyNkZWZp bmUgIERFRVBfQ09MT1JfQUREICAgICAgICAgICAgICAgICAgICAgICAgQklUKDQpDQo+ICsNCj4g Ky8qIEhhcmR3YXJlIGludGVycnVwdHMgKi8NCj4gKyNkZWZpbmUgVE9QX0lOVF9TVEEwMCAgICAg ICAgICAgICAgICAgIDB4MWE4DQo+ICsjZGVmaW5lIFRPUF9JTlRfRU5BQkxFMDAgICAgICAgICAg ICAgICAweDFiMA0KPiArI2RlZmluZSAgSFRQTEdfUl9JTlQgICAgICAgICAgICAgICAgICAgQklU KDApDQo+ICsjZGVmaW5lICBIVFBMR19GX0lOVCAgICAgICAgICAgICAgICAgICBCSVQoMSkNCj4g KyNkZWZpbmUgIFBPUkRfUl9JTlQgICAgICAgICAgICAgICAgICAgIEJJVCgyKQ0KPiArI2RlZmlu ZSAgUE9SRF9GX0lOVCAgICAgICAgICAgICAgICAgICAgQklUKDMpDQo+ICsjZGVmaW5lICBIRE1J X1ZTWU5DX0lOVCAgICAgICAgICAgICAgICAgICAgICAgIEJJVCg0KQ0KPiArI2RlZmluZSAgSERN SV9BVURJT19JTlQgICAgICAgICAgICAgICAgICAgICAgICBCSVQoNSkNCj4gKyNkZWZpbmUgIEhE Q1AyWF9SWF9SRUFVVEhfUkVRX0REQ01fSU5UIEJJVCgyNSkNCj4gKyNkZWZpbmUgVE9QX0lOVF9F TkFCTEUwMSAgICAgICAgICAgICAgIDB4MWI0DQo+ICsjZGVmaW5lIFRPUF9JTlRfQ0xSMDAgICAg ICAgICAgICAgICAgICAweDFiOA0KPiArI2RlZmluZSBUT1BfSU5UX0NMUjAxICAgICAgICAgICAg ICAgICAgMHgxYmMNCj4gKw0KPiArDQo+ICsvKiBWaWRlbyBNdXRlICovDQo+ICsjZGVmaW5lIFRP UF9WTVVURV9DRkcxICAgICAgICAgICAgICAgICAweDFjOA0KPiArI2RlZmluZSAgUkVHX1ZNVVRF X0VOICAgICAgICAgICAgICAgICAgQklUKDE2KQ0KPiArDQo+ICsvKiBIRE1JIEF1ZGlvIElQICov DQo+ICsjZGVmaW5lIEFJUF9DVFJMICAgICAgICAgICAgICAgICAgICAgICAweDQwMA0KPiArI2Rl ZmluZSAgQ1RTX1NXX1NFTCAgICAgICAgICAgICAgICAgICAgQklUKDApDQo+ICsjZGVmaW5lICBD VFNfUkVRX0VOICAgICAgICAgICAgICAgICAgICBCSVQoMSkNCj4gKyNkZWZpbmUgIE1DTEtfRU4g ICAgICAgICAgICAgICAgICAgICAgIEJJVCgyKQ0KPiArI2RlZmluZSAgTk9fTUNMS19DVFNHRU5f U0VMICAgICAgICAgICAgQklUKDMpDQo+ICsjZGVmaW5lICBBVURfSU5fRU4gICAgICAgICAgICAg ICAgICAgICBCSVQoOCkNCj4gKyNkZWZpbmUgIEFVRF9TRUxfT1dSVCAgICAgICAgICAgICAgICAg IEJJVCg5KQ0KPiArI2RlZmluZSAgU1BESUZfRU4gICAgICAgICAgICAgICAgICAgICAgQklUKDEz KQ0KPiArI2RlZmluZSAgSEJSQV9PTiAgICAgICAgICAgICAgICAgICAgICAgQklUKDE0KQ0KPiAr I2RlZmluZSAgRFNEX0VOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCSVQoMTUpDQo+ ICsjZGVmaW5lICBJMlNfRU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdFTk1BU0so MTksIDE2KQ0KPiArI2RlZmluZSAgSEJSX0ZST01fU1BESUYgICAgICAgICAgICAgICAgICAgICAg ICBCSVQoMjApDQo+ICsjZGVmaW5lICBDVFNfQ0FMX040ICAgICAgICAgICAgICAgICAgICBCSVQo MjMpDQo+ICsjZGVmaW5lICBTUERJRl9JTlRFUk5BTF9NT0RVTEUgICAgICAgICBCSVQoMjQpDQo+ ICsjZGVmaW5lIEFJUF9OX1ZBTCAgICAgICAgICAgICAgICAgICAgICAweDQwNA0KPiArI2RlZmlu ZSBBSVBfQ1RTX1NWQUwgICAgICAgICAgICAgICAgICAgMHg0MDgNCj4gKyNkZWZpbmUgQUlQX1NQ RElGX0NUUkwgICAgICAgICAgICAgICAgIDB4NDBjDQo+ICsjZGVmaW5lICBXUl8xVUlfTE9DSyAg ICAgICAgICAgICAgICAgICBCSVQoMCkNCj4gKyNkZWZpbmUgIEZTX09WRVJSSURFX1dSSVRFICAg ICAgICAgICAgIEJJVCgxKQ0KPiArI2RlZmluZSAgV1JfMlVJX0xPQ0sgICAgICAgICAgICAgICAg ICAgQklUKDIpDQo+ICsjZGVmaW5lICBNQVhfMVVJX1dSSVRFICAgICAgICAgICAgICAgICBHRU5N QVNLKDE1LCA4KQ0KPiArI2RlZmluZSAgTUFYXzJVSV9TUERJRl9XUklURSAgICAgICAgICAgR0VO TUFTSygyMywgMTYpDQo+ICsjZGVmaW5lICBNQVhfMlVJX0kyU19ISV9XUklURSAgICAgICAgICBH RU5NQVNLKDIzLCAyMCkNCj4gKyNkZWZpbmUgICBNQVhfMlVJX0kyU19MRkVfQ0NfU1dBUCAgICAg IEJJVCgxKQ0KPiArI2RlZmluZSAgTUFYXzJVSV9JMlNfTE9fV1JJVEUgICAgICAgICAgR0VOTUFT SygxOSwgMTYpDQo+ICsjZGVmaW5lICBBVURfRVJSX1RIUkVTSCAgICAgICAgICAgICAgICAgICAg ICAgIEdFTk1BU0soMjksIDI0KQ0KPiArI2RlZmluZSAgSTJTMkRTRF9FTiAgICAgICAgICAgICAg ICAgICAgQklUKDMwKQ0KPiArI2RlZmluZSBBSVBfSTJTX0NUUkwgICAgICAgICAgICAgICAgICAg MHg0MTANCj4gKyNkZWZpbmUgIEZJRk8wX01BUCAgICAgICAgICAgICAgICAgICAgIEdFTk1BU0so MSwgMCkNCj4gKyNkZWZpbmUgIEZJRk8xX01BUCAgICAgICAgICAgICAgICAgICAgIEdFTk1BU0so MywgMikNCj4gKyNkZWZpbmUgIEZJRk8yX01BUCAgICAgICAgICAgICAgICAgICAgIEdFTk1BU0so NSwgNCkNCj4gKyNkZWZpbmUgIEZJRk8zX01BUCAgICAgICAgICAgICAgICAgICAgIEdFTk1BU0so NywgNikNCj4gKyNkZWZpbmUgIEkyU18xU1RfQklUX05PU0hJRlQgICAgICAgICAgIEJJVCg4KQ0K PiArI2RlZmluZSAgSTJTX0RBVEFfRElSX0xTQiAgICAgICAgICAgICAgQklUKDkpDQo+ICsjZGVm aW5lICBKVVNUSUZZX1JJR0hUICAgICAgICAgICAgICAgICBCSVQoMTApDQo+ICsjZGVmaW5lICBX U19ISUdIICAgICAgICAgICAgICAgICAgICAgICBCSVQoMTEpDQo+ICsjZGVmaW5lICBWQklUX0NP TVBSRVNTRUQgICAgICAgICAgICAgICBCSVQoMTIpDQo+ICsjZGVmaW5lICBDQklUX09SREVSX1NB TUUgICAgICAgICAgICAgICBCSVQoMTMpDQo+ICsjZGVmaW5lICBTQ0tfRURHRV9SSVNFICAgICAg ICAgICAgICAgICBCSVQoMTQpDQo+ICsjZGVmaW5lIEFJUF9JMlNfQ0hTVDAgICAgICAgICAgICAg ICAgICAweDQxNA0KPiArI2RlZmluZSBBSVBfSTJTX0NIU1QxICAgICAgICAgICAgICAgICAgMHg0 MTgNCj4gKyNkZWZpbmUgQUlQX1RYQ1RSTCAgICAgICAgICAgICAgICAgICAgIDB4NDI0DQo+ICsj ZGVmaW5lICBSU1Q0QVVESU8gICAgICAgICAgICAgICAgICAgICBCSVQoMCkNCj4gKyNkZWZpbmUg IFJTVDRBVURJT19GSUZPICAgICAgICAgICAgICAgICAgICAgICAgQklUKDEpDQo+ICsjZGVmaW5l ICBSU1Q0QVVESU9fQUNSICAgICAgICAgICAgICAgICBCSVQoMikNCj4gKyNkZWZpbmUgIEFVRF9M QVlPVVRfMSAgICAgICAgICAgICAgICAgIEJJVCg0KQ0KPiArI2RlZmluZSAgQVVEX01VVEVfRklG T19FTiAgICAgICAgICAgICAgQklUKDUpDQo+ICsjZGVmaW5lICBBVURfUEFDS0VUX0RST1AgICAg ICAgICAgICAgICBCSVQoNikNCj4gKyNkZWZpbmUgIERTRF9NVVRFX0VOICAgICAgICAgICAgICAg ICAgIEJJVCg3KQ0KPiArI2RlZmluZSBBSVBfVFBJX0NUUkwgICAgICAgICAgICAgICAgICAgMHg0 MjgNCj4gKyNkZWZpbmUgIFRQSV9BVURJT19MT09LVVBfRU4gICAgICAgICAgIEJJVCgyKQ0KPiAr DQo+ICsvKiBWaWRlbyBkb3duc2FtcGxpbmcgY29uZmlndXJhdGlvbiAqLw0KPiArI2RlZmluZSBW SURfRE9XTlNBTVBMRV9DT05GSUcgICAgICAgICAgMHg4ZDANCj4gKyNkZWZpbmUgIEM0NDRfQzQy Ml9DT05GSUdfRU5BQkxFICAgICAgIEJJVCgwKQ0KPiArI2RlZmluZSAgQzQyMl9DNDIwX0NPTkZJ R19FTkFCTEUgICAgICAgQklUKDQpDQo+ICsjZGVmaW5lICBDNDIyX0M0MjBfQ09ORklHX0JZUEFT UyAgICAgICBCSVQoNSkNCj4gKyNkZWZpbmUgIEM0MjJfQzQyMF9DT05GSUdfT1VUX0NCX09SX0NS IEJJVCg2KQ0KPiArI2RlZmluZSBWSURfT1VUX0ZPUk1BVCAgICAgICAgICAgICAgICAgMHg4ZmMN Cj4gKyNkZWZpbmUgIE9VVFBVVF9GT1JNQVRfREVNVVhfNDIwX0VOQUJMRSAgICAgICAgQklUKDEw KQ0KPiArDQo+ICsvKiBIRENQIHJlZ2lzdGVycyAqLw0KPiArI2RlZmluZSBIRENQX1RPUF9DVFJM ICAgICAgICAgICAgICAgICAgMHhjMDANCj4gKyNkZWZpbmUgSERDUDJYX0NUUkxfMCAgICAgICAg ICAgICAgICAgIDB4YzIwDQo+ICsjZGVmaW5lICBIRENQMlhfRU4gICAgICAgICAgICAgICAgICAg ICBCSVQoMCkNCj4gKyNkZWZpbmUgIEhEQ1AyWF9FTkNSWVBUX0VOICAgICAgICAgICAgIEJJVCg3 KQ0KPiArI2RlZmluZSAgSERDUDJYX0hQRF9PVlIgICAgICAgICAgICAgICAgICAgICAgICBCSVQo MTApDQo+ICsjZGVmaW5lICBIRENQMlhfSFBEX1NXICAgICAgICAgICAgICAgICBCSVQoMTEpDQo+ ICsjZGVmaW5lIEhEQ1AyWF9QT0xfQ1RSTCAgICAgICAgICAgICAgICAgICAgICAgIDB4YzU0DQo+ ICsjZGVmaW5lICBIRENQMlhfRElTX1BPTExfRU4gICAgICAgICAgICBCSVQoMTYpDQo+ICsjZGVm aW5lIEhEQ1AxWF9DVFJMICAgICAgICAgICAgICAgICAgICAweGNkMA0KPiArI2RlZmluZSAgSERD UDFYX0VOQ19FTiAgICAgICAgICAgICAgICAgQklUKDYpDQo+ICsNCj4gKy8qIEhETUkgRERDIHJl Z2lzdGVycyAqLw0KPiArI2RlZmluZSBIUERfRERDX0NUUkwgICAgICAgICAgICAgICAgICAgMHhj MDgNCj4gKyNkZWZpbmUgIEhQRF9ERENfREVMQVlfQ05UICAgICAgICAgICAgIEdFTk1BU0soMzEs IDE2KQ0KPiArI2RlZmluZSAgSFBEX0REQ19IUERfREJOQ19FTiAgICAgICAgICAgQklUKDIpDQo+ ICsjZGVmaW5lICBIUERfRERDX1BPUkRfREJOQ19FTiAgICAgICAgICBCSVQoMykNCj4gKyNkZWZp bmUgRERDX0NUUkwgICAgICAgICAgICAgICAgICAgICAgIDB4YzEwDQo+ICsjZGVmaW5lICBERENf Q1RSTF9BRERSICAgICAgICAgICAgICAgICBHRU5NQVNLKDcsIDEpDQo+ICsjZGVmaW5lICBERENf Q1RSTF9PRkZTRVQgICAgICAgICAgICAgICBHRU5NQVNLKDE1LCA4KQ0KPiArI2RlZmluZSAgRERD X0NUUkxfRElOX0NOVCAgICAgICAgICAgICAgR0VOTUFTSygyNSwgMTYpDQo+ICsjZGVmaW5lICBE RENfQ1RSTF9DTUQgICAgICAgICAgICAgICAgICBHRU5NQVNLKDMxLCAyOCkNCj4gKyNkZWZpbmUg U0NEQ19DVFJMICAgICAgICAgICAgICAgICAgICAgIDB4YzE4DQo+ICsjZGVmaW5lICBTQ0RDX0RE Q19TRUdNRU5UICAgICAgICAgICAgICBHRU5NQVNLKDE1LCA4KQ0KPiArI2RlZmluZSBIUERfRERD X1NUQVRVUyAgICAgICAgICAgICAgICAgMHhjNjANCj4gKyNkZWZpbmUgIEhQRF9TVEFURSAgICAg ICAgICAgICAgICAgICAgIEdFTk1BU0soMSwgMCkNCj4gKyNkZWZpbmUgICBIUERfU1RBVEVfQ09O TkVDVEVEICAgICAgICAgIDINCj4gKyNkZWZpbmUgIEhQRF9QSU5fU1RBICAgICAgICAgICAgICAg ICAgIEJJVCg0KQ0KPiArI2RlZmluZSAgUE9SRF9QSU5fU1RBICAgICAgICAgICAgICAgICAgQklU KDUpDQo+ICsjZGVmaW5lICBERENfSTJDX0lOX1BST0cgICAgICAgICAgICAgICBCSVQoMTMpDQo+ ICsjZGVmaW5lICBERENfREFUQV9PVVQgICAgICAgICAgICAgICAgICBHRU5NQVNLKDIzLCAxNikN Cj4gKyNkZWZpbmUgU0kyQ19DVFJMICAgICAgICAgICAgICAgICAgICAgIDB4Y2FjDQo+ICsjZGVm aW5lICBTSTJDX1dSICAgICAgICAgICAgICAgICAgICAgICBCSVQoMCkNCj4gKyNkZWZpbmUgIFNJ MkNfUkQgICAgICAgICAgICAgICAgICAgICAgIEJJVCgxKQ0KPiArI2RlZmluZSAgU0kyQ19DT05G SVJNX1JFQUQgICAgICAgICAgICAgQklUKDIpDQo+ICsjZGVmaW5lICBTSTJDX1dEQVRBICAgICAg ICAgICAgICAgICAgICBHRU5NQVNLKDE1LCA4KQ0KPiArI2RlZmluZSAgU0kyQ19BRERSICAgICAg ICAgICAgICAgICAgICAgR0VOTUFTSygyMywgMTYpDQo+ICsNCj4gKy8qIEhEQ1AgRERDIHJlZ2lz dGVycyAqLw0KPiArI2RlZmluZSBIRENQMlhfRERDTV9TVEFUVVMgICAgICAgICAgICAgMHhjNjgN Cj4gKyNkZWZpbmUgIEREQ19JMkNfTk9fQUNLICAgICAgICAgICAgICAgICAgICAgICAgQklUKDEw KQ0KPiArI2RlZmluZSAgRERDX0kyQ19CVVNfTE9XICAgICAgICAgICAgICAgQklUKDExKQ0KPiAr DQo+ICsvKiBIRE1JIFRYIHJlZ2lzdGVycyAqLw0KPiArI2RlZmluZSBIRE1JVFhfQ09ORklHX01U ODE4OCAgICAgICAgICAgMHhlYTANCj4gKyNkZWZpbmUgSERNSVRYX0NPTkZJR19NVDgxOTUgICAg ICAgICAgIDB4OTAwDQo+ICsjZGVmaW5lICBIRE1JX1lVVjQyMF9NT0RFICAgICAgICAgICAgICBC SVQoMTApDQo+ICsjZGVmaW5lICBIRE1JVFhfU1dfSFBEICAgICAgICAgICAgICAgICBCSVQoMjkp DQo+ICsjZGVmaW5lICBIRE1JVFhfU1dfUlNUQiAgICAgICAgICAgICAgICAgICAgICAgIEJJVCgz MSkNCj4gKw0KPiArLyoqDQo+ICsgKiBlbnVtIG10a19oZG1pX2RkY192Ml9jbWRzIC0gRERDX0NN RCByZWdpc3RlciBjb21tYW5kcw0KPiArICogQEREQ19DTURfUkVBRF9OT0FDSzogICAgICBDdXJy ZW50IGFkZHJlc3MgcmVhZCB3aXRoIG5vIEFDSyBvbiBsYXN0IGJ5dGUNCj4gKyAqIEBERENfQ01E X1JFQUQ6ICAgICAgICAgICAgQ3VycmVudCBhZGRyZXNzIHJlYWQgd2l0aCBBQ0sgb24gbGFzdCBi eXRlDQo+ICsgKiBARERDX0NNRF9TRVFfUkVBRF9OT0FDSzogIFNlcXVlbnRpYWwgcmVhZCB3aXRo IG5vIEFDSyBvbiBsYXN0IGJ5dGUNCj4gKyAqIEBERENfQ01EX1NFUV9SRUFEOiAgICAgICAgU2Vx dWVudGlhbCByZWFkIHdpdGggQUNLIG9uIGxhc3QgYnl0ZQ0KPiArICogQEREQ19DTURfRU5IX1JF QURfTk9BQ0s6ICBFbmhhbmNlZCByZWFkIHdpdGggbm8gQUNLIG9uIGxhc3QgYnl0ZQ0KPiArICog QEREQ19DTURfRU5IX1JFQUQ6ICAgICAgICBFbmhhbmNlZCByZWFkIHdpdGggQUNLIG9uIGxhc3Qg Ynl0ZQ0KPiArICogQEREQ19DTURfU0VRX1dSSVRFX05PQUNLOiBTZXF1ZW50aWFsIHdyaXRlIGln bm9yaW5nIEFDSyBvbiBsYXN0IGJ5dGUNCj4gKyAqIEBERENfQ01EX1NFUV9XUklURTogICAgICAg U2VxdWVudGlhbCB3cml0ZSByZXF1aXJpbmcgQUNLIG9uIGxhc3QgYnl0ZQ0KPiArICogQEREQ19D TURfUlNWRDogICAgICAgICAgICBSZXNlcnZlZCBmb3IgZnV0dXJlIHVzZQ0KPiArICogQEREQ19D TURfQ0xFQVJfRklGTzogICAgICBDbGVhciBEREMgSTJDIEZJRk8NCj4gKyAqIEBERENfQ01EX0NM T0NLX1NDTDogICAgICAgU3RhcnQgY2xvY2tpbmcgRERDIEkyQyBTQ0wNCj4gKyAqIEBERENfQ01E X0FCT1JUX1hGRVI6ICAgICAgQWJvcnQgRERDIEkyQyB0cmFuc2FjdGlvbg0KPiArICovDQo+ICtl bnVtIG10a19oZG1pX2RkY192Ml9jbWRzIHsNCj4gKyAgICAgICBERENfQ01EX1JFQURfTk9BQ0sg PSAweDAsDQo+ICsgICAgICAgRERDX0NNRF9SRUFELA0KPiArICAgICAgIEREQ19DTURfU0VRX1JF QURfTk9BQ0ssDQo+ICsgICAgICAgRERDX0NNRF9TRVFfUkVBRCwNCj4gKyAgICAgICBERENfQ01E X0VOSF9SRUFEX05PQUNLLA0KPiArICAgICAgIEREQ19DTURfRU5IX1JFQUQsDQo+ICsgICAgICAg RERDX0NNRF9TRVFfV1JJVEVfTk9BQ0ssDQo+ICsgICAgICAgRERDX0NNRF9TRVFfV1JJVEUgPSAw eDA3LA0KPiArICAgICAgIEREQ19DTURfQ0xFQVJfRklGTyA9IDB4MDksDQo+ICsgICAgICAgRERD X0NNRF9DTE9DS19TQ0wgPSAweDBhLA0KPiArICAgICAgIEREQ19DTURfQUJPUlRfWEZFUiA9IDB4 MGYNCj4gK307DQo+ICsNCj4gKyNlbmRpZiAvKiBfTVRLX0hETUlfUkVHU19IICovDQo+IGRpZmYg LS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2hkbWlfdjIuYyBiL2RyaXZlcnMv Z3B1L2RybS9tZWRpYXRlay9tdGtfaGRtaV92Mi5jDQo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQo+ IGluZGV4IDAwMDAwMDAwMDAwMC4uMzM4YTZkZGEyZmQyDQo+IC0tLSAvZGV2L251bGwNCj4gKysr IGIvZHJpdmVycy9ncHUvZHJtL21lZGlhdGVrL210a19oZG1pX3YyLmMNCj4gQEAgLTAsMCArMSwx MzY4IEBADQo+ICsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMA0KPiArLyoNCj4g KyAqIE1lZGlhVGVrIEhETUkgdjIgSVAgZHJpdmVyDQo+ICsgKg0KPiArICogQ29weXJpZ2h0IChj KSAyMDIyIE1lZGlhVGVrIEluYy4NCj4gKyAqIENvcHlyaWdodCAoYykgMjAyMiBCYXlMaWJyZSwg U0FTDQo+ICsgKiBDb3B5cmlnaHQgKGMpIDIwMjQgQ29sbGFib3JhIEx0ZC4NCj4gKyAqICAgICAg ICAgICAgICAgICAgICBBbmdlbG9HaW9hY2NoaW5vIERlbCBSZWdubyA8YW5nZWxvZ2lvYWNjaGlu by5kZWxyZWdub0Bjb2xsYWJvcmEuY29tPg0KPiArICovDQo+ICsNCj4gKyNpbmNsdWRlIDxsaW51 eC9iaXRmaWVsZC5oPg0KPiArI2luY2x1ZGUgPGxpbnV4L2Nsay5oPg0KPiArI2luY2x1ZGUgPGxp bnV4L2RlYnVnZnMuaD4NCj4gKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPg0KPiArI2luY2x1ZGUg PGxpbnV4L2RldmljZS5oPg0KPiArI2luY2x1ZGUgPGxpbnV4L2Vyci5oPg0KPiArI2luY2x1ZGUg PGxpbnV4L2ludGVycnVwdC5oPg0KPiArI2luY2x1ZGUgPGxpbnV4L2lycS5oPg0KPiArI2luY2x1 ZGUgPGxpbnV4L2tlcm5lbC5oPg0KPiArI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+DQo+ICsjaW5j bHVkZSA8bGludXgvb2YuaD4NCj4gKyNpbmNsdWRlIDxsaW51eC9vZl9wbGF0Zm9ybS5oPg0KPiAr I2luY2x1ZGUgPGxpbnV4L3BtX3J1bnRpbWUuaD4NCj4gKyNpbmNsdWRlIDxsaW51eC9yZWdtYXAu aD4NCj4gKyNpbmNsdWRlIDxsaW51eC9zdXNwZW5kLmg+DQo+ICsjaW5jbHVkZSA8bGludXgvdW5p dHMuaD4NCj4gKyNpbmNsdWRlIDxsaW51eC9waHkvcGh5Lmg+DQo+ICsNCj4gKyNpbmNsdWRlIDxk cm0vZGlzcGxheS9kcm1faGRtaV9oZWxwZXIuaD4NCj4gKyNpbmNsdWRlIDxkcm0vZGlzcGxheS9k cm1faGRtaV9zdGF0ZV9oZWxwZXIuaD4NCj4gKyNpbmNsdWRlIDxkcm0vZGlzcGxheS9kcm1fc2Nk Y19oZWxwZXIuaD4NCj4gKyNpbmNsdWRlIDxkcm0vZHJtX2VkaWQuaD4NCj4gKyNpbmNsdWRlIDxk cm0vZHJtX3ByaW50Lmg+DQo+ICsjaW5jbHVkZSA8ZHJtL2RybV9wcm9iZV9oZWxwZXIuaD4NCj4g Kw0KPiArI2luY2x1ZGUgIm10a19oZG1pX2NvbW1vbi5oIg0KPiArI2luY2x1ZGUgIm10a19oZG1p X3JlZ3NfdjIuaCINCj4gKw0KPiArI2RlZmluZSBNVEtfSERNSV9WMl9DTE9DS19NSU4gIDI3MDAw DQo+ICsjZGVmaW5lIE1US19IRE1JX1YyX0NMT0NLX01BWCAgNTk0MDAwDQo+ICsNCj4gKyNkZWZp bmUgSFBEX1BPUkRfSFdJUlFTICAgICAgICAgICAgICAgIChIVFBMR19SX0lOVCB8IEhUUExHX0Zf SU5UIHwgUE9SRF9GX0lOVCB8IFBPUkRfUl9JTlQpDQo+ICsNCj4gK2VudW0gbXRrX2hkbWlfdjJf Y2xrX2lkIHsNCj4gKyAgICAgICBNVEtfSERNSV9WMl9DTEtfSERDUF9TRUwsDQo+ICsgICAgICAg TVRLX0hETUlfVjJfQ0xLX0hEQ1BfMjRNX1NFTCwNCj4gKyAgICAgICBNVEtfSERNSV9WMl9DTEtf VlBQX1NQTElUX0hETUksDQo+ICsgICAgICAgTVRLX0hETUlfVjJfQ0xLX0hETUlfQVBCX1NFTCwN Cj4gKyAgICAgICBNVEtfSERNSV9WMl9DTEtfQ09VTlQsDQo+ICt9Ow0KPiArDQo+ICtjb25zdCBj aGFyICpjb25zdCBtdGtfaGRtaV92Ml9jbGtfbmFtZXNbTVRLX0hETUlfVjJfQ0xLX0NPVU5UXSA9 IHsNCj4gKyAgICAgICBbTVRLX0hETUlfVjJfQ0xLX0hETUlfQVBCX1NFTF0gPSAiYnVzIiwNCj4g KyAgICAgICBbTVRLX0hETUlfVjJfQ0xLX0hEQ1BfU0VMXSA9ICJoZGNwIiwNCj4gKyAgICAgICBb TVRLX0hETUlfVjJfQ0xLX0hEQ1BfMjRNX1NFTF0gPSAiaGRjcDI0bSIsDQo+ICsgICAgICAgW01U S19IRE1JX1YyX0NMS19WUFBfU1BMSVRfSERNSV0gPSAiaGRtaS1zcGxpdCIsDQo+ICt9Ow0KPiAr DQo+ICtzdGF0aWMgaW5saW5lIHZvaWQgbXRrX2hkbWlfdjJfaHdpcnFfZGlzYWJsZShzdHJ1Y3Qg bXRrX2hkbWkgKmhkbWkpDQo+ICt7DQo+ICsgICAgICAgcmVnbWFwX3dyaXRlKGhkbWktPnJlZ3Ms IFRPUF9JTlRfRU5BQkxFMDAsIDApOw0KPiArICAgICAgIHJlZ21hcF93cml0ZShoZG1pLT5yZWdz LCBUT1BfSU5UX0VOQUJMRTAxLCAwKTsNCj4gK30NCj4gKw0KPiArc3RhdGljIGlubGluZSB2b2lk IG10a19oZG1pX3YyX2VuYWJsZV9ocGRfcG9yZF9pcnEoc3RydWN0IG10a19oZG1pICpoZG1pLCBi b29sIGVuYWJsZSkNCj4gK3sNCj4gKyAgICAgICBpZiAoZW5hYmxlKQ0KPiArICAgICAgICAgICAg ICAgcmVnbWFwX3NldF9iaXRzKGhkbWktPnJlZ3MsIFRPUF9JTlRfRU5BQkxFMDAsIEhQRF9QT1JE X0hXSVJRUyk7DQo+ICsgICAgICAgZWxzZQ0KPiArICAgICAgICAgICAgICAgcmVnbWFwX2NsZWFy X2JpdHMoaGRtaS0+cmVncywgVE9QX0lOVF9FTkFCTEUwMCwgSFBEX1BPUkRfSFdJUlFTKTsNCj4g K30NCj4gKw0KPiArc3RhdGljIGlubGluZSB2b2lkIG10a19oZG1pX3YyX2NsZWFyX2hwZF9wb3Jk X2lycShzdHJ1Y3QgbXRrX2hkbWkgKmhkbWkpDQo+ICt7DQoNClRoaXMgZnVuY3Rpb24gaXMgbmV2 ZXIgdXNlZCwgc28gZHJvcCBpdC4NCg0KPiArICAgICAgIHJlZ21hcF9zZXRfYml0cyhoZG1pLT5y ZWdzLCBUT1BfSU5UX0NMUjAwLCBIUERfUE9SRF9IV0lSUVMpOw0KPiArICAgICAgIHJlZ21hcF9j bGVhcl9iaXRzKGhkbWktPnJlZ3MsIFRPUF9JTlRfQ0xSMDAsIEhQRF9QT1JEX0hXSVJRUyk7DQo+ ICt9DQo+ICsNCj4gK3N0YXRpYyBpbmxpbmUgdm9pZCBtdGtfaGRtaV92Ml9zZXRfc3dfaHBkKHN0 cnVjdCBtdGtfaGRtaSAqaGRtaSwgYm9vbCBlbmFibGUpDQo+ICt7DQoNCmVuYWJsZSBpcyBhbHdh eXMgdHJ1ZSwgc28gcmVtb3ZlIGl0Lg0KDQo+ICsgICAgICAgaWYgKGVuYWJsZSkgew0KPiArICAg ICAgICAgICAgICAgcmVnbWFwX3NldF9iaXRzKGhkbWktPnJlZ3MsIGhkbWktPmNvbmYtPnJlZ19o ZG1pX3R4X2NmZywgSERNSVRYX1NXX0hQRCk7DQo+ICsgICAgICAgICAgICAgICByZWdtYXBfc2V0 X2JpdHMoaGRtaS0+cmVncywgSERDUDJYX0NUUkxfMCwgSERDUDJYX0hQRF9PVlIpOw0KPiArICAg ICAgICAgICAgICAgcmVnbWFwX3NldF9iaXRzKGhkbWktPnJlZ3MsIEhEQ1AyWF9DVFJMXzAsIEhE Q1AyWF9IUERfU1cpOw0KPiArICAgICAgIH0gZWxzZSB7DQo+ICsgICAgICAgICAgICAgICByZWdt YXBfY2xlYXJfYml0cyhoZG1pLT5yZWdzLCBIRENQMlhfQ1RSTF8wLCBIRENQMlhfSFBEX09WUik7 DQo+ICsgICAgICAgICAgICAgICByZWdtYXBfY2xlYXJfYml0cyhoZG1pLT5yZWdzLCBIRENQMlhf Q1RSTF8wLCBIRENQMlhfSFBEX1NXKTsNCj4gKyAgICAgICAgICAgICAgIHJlZ21hcF9jbGVhcl9i aXRzKGhkbWktPnJlZ3MsIGhkbWktPmNvbmYtPnJlZ19oZG1pX3R4X2NmZywgSERNSVRYX1NXX0hQ RCk7DQo+ICsgICAgICAgfQ0KPiArfQ0KPiArDQo+ICtzdGF0aWMgdm9pZCBtdGtfaGRtaV92Ml9k aXNhYmxlX2hkY3BfZW5jcnlwdChzdHJ1Y3QgbXRrX2hkbWkgKmhkbWkpDQo+ICt7DQo+ICsgICAg ICAgcmVnbWFwX2NsZWFyX2JpdHMoaGRtaS0+cmVncywgSERDUDJYX0NUUkxfMCwgSERDUDJYX0VO Q1JZUFRfRU4pOw0KPiArICAgICAgIHJlZ21hcF9jbGVhcl9iaXRzKGhkbWktPnJlZ3MsIEhEQ1Ax WF9DVFJMLCBIRENQMVhfRU5DX0VOKTsNCj4gK30NCj4gKw0KPiArc3RhdGljIGlubGluZSB2b2lk IG10a19oZG1pX3YyX2VuYWJsZV9zY3JhbWJsaW5nKHN0cnVjdCBtdGtfaGRtaSAqaGRtaSwgYm9v bCBlbmFibGUpDQo+ICt7DQo+ICsgICAgICAgc3RydWN0IGRybV9zY2RjICpzY2RjID0gJmhkbWkt PmN1cnJfY29ubi0+ZGlzcGxheV9pbmZvLmhkbWkuc2NkYzsNCj4gKw0KPiArICAgICAgIGlmIChl bmFibGUpDQo+ICsgICAgICAgICAgICAgICByZWdtYXBfc2V0X2JpdHMoaGRtaS0+cmVncywgVE9Q X0NGRzAwLCBTQ1JfT04gfCBIRE1JMl9PTik7DQo+ICsgICAgICAgZWxzZQ0KPiArICAgICAgICAg ICAgICAgcmVnbWFwX2NsZWFyX2JpdHMoaGRtaS0+cmVncywgVE9QX0NGRzAwLCBTQ1JfT04gfCBI RE1JMl9PTik7DQo+ICsNCj4gKyAgICAgICBpZiAoc2NkYy0+c3VwcG9ydGVkKSB7DQo+ICsgICAg ICAgICAgICAgICBpZiAoc2NkYy0+c2NyYW1ibGluZy5zdXBwb3J0ZWQpDQo+ICsgICAgICAgICAg ICAgICAgICAgICAgIGRybV9zY2RjX3NldF9zY3JhbWJsaW5nKGhkbWktPmN1cnJfY29ubiwgZW5h YmxlKTsNCj4gKyAgICAgICAgICAgICAgIGRybV9zY2RjX3NldF9oaWdoX3RtZHNfY2xvY2tfcmF0 aW8oaGRtaS0+Y3Vycl9jb25uLCBlbmFibGUpOw0KPiArICAgICAgIH0NCj4gK30NCj4gKw0KPiAr c3RhdGljIHZvaWQgbXRrX2hkbWlfdjJfaHdfdmlkX211dGUoc3RydWN0IG10a19oZG1pICpoZG1p LCBib29sIGVuYWJsZSkNCj4gK3sNCj4gKyAgICAgICAvKiBJZiBlbmFibGVkLCBzZW5kcyBhIGJs YWNrIGltYWdlICovDQo+ICsgICAgICAgaWYgKGVuYWJsZSkNCj4gKyAgICAgICAgICAgICAgIHJl Z21hcF9zZXRfYml0cyhoZG1pLT5yZWdzLCBUT1BfVk1VVEVfQ0ZHMSwgUkVHX1ZNVVRFX0VOKTsN Cj4gKyAgICAgICBlbHNlDQo+ICsgICAgICAgICAgICAgICByZWdtYXBfY2xlYXJfYml0cyhoZG1p LT5yZWdzLCBUT1BfVk1VVEVfQ0ZHMSwgUkVHX1ZNVVRFX0VOKTsNCj4gK30NCj4gKw0KPiArc3Rh dGljIHZvaWQgbXRrX2hkbWlfdjJfaHdfYXVkX211dGUoc3RydWN0IG10a19oZG1pICpoZG1pLCBi b29sIGVuYWJsZSkNCj4gK3sNCj4gKyAgICAgICB1MzIgYWlwLCB2YWw7DQo+ICsNCj4gKyAgICAg ICBpZiAoIWVuYWJsZSkgew0KPiArICAgICAgICAgICAgICAgcmVnbWFwX2NsZWFyX2JpdHMoaGRt aS0+cmVncywgQUlQX1RYQ1RSTCwgQVVEX01VVEVfRklGT19FTik7DQo+ICsgICAgICAgICAgICAg ICByZXR1cm47DQo+ICsgICAgICAgfQ0KPiArDQo+ICsgICAgICAgcmVnbWFwX3JlYWQoaGRtaS0+ cmVncywgQUlQX0NUUkwsICZhaXApOw0KPiArDQo+ICsgICAgICAgdmFsID0gQVVEX01VVEVfRklG T19FTjsNCj4gKyAgICAgICBpZiAoYWlwICYgRFNEX0VOKQ0KPiArICAgICAgICAgICAgICAgdmFs IHw9IERTRF9NVVRFX0VOOw0KPiArDQo+ICsgICAgICAgcmVnbWFwX3VwZGF0ZV9iaXRzKGhkbWkt PnJlZ3MsIEFJUF9UWENUUkwsIHZhbCwgdmFsKTsNCj4gK30NCj4gKw0KPiArc3RhdGljIHZvaWQg bXRrX2hkbWlfdjJfaHdfcmVzZXQoc3RydWN0IG10a19oZG1pICpoZG1pKQ0KPiArew0KPiArICAg ICAgIHJlZ21hcF9jbGVhcl9iaXRzKGhkbWktPnJlZ3MsIGhkbWktPmNvbmYtPnJlZ19oZG1pX3R4 X2NmZywgSERNSVRYX1NXX1JTVEIpOw0KPiArICAgICAgIHVkZWxheSg1KTsNCj4gKyAgICAgICBy ZWdtYXBfc2V0X2JpdHMoaGRtaS0+cmVncywgaGRtaS0+Y29uZi0+cmVnX2hkbWlfdHhfY2ZnLCBI RE1JVFhfU1dfUlNUQik7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyBpbmxpbmUgdTMyIG10a19oZG1p X3YyX2Zvcm1hdF9od19wYWNrZXQoY29uc3QgdTggKmJ1ZmZlciwgdTggbGVuKQ0KPiArew0KPiAr ICAgICAgIHVuc2lnbmVkIHNob3J0IGk7DQo+ICsgICAgICAgdTMyIHZhbCA9IDA7DQo+ICsNCj4g KyAgICAgICBmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspDQo+ICsgICAgICAgICAgICAgICB2YWwg fD0gYnVmZmVyW2ldIDw8IChpICogOCk7DQo+ICsNCj4gKyAgICAgICByZXR1cm4gdmFsOw0KPiAr fQ0KPiArDQo+ICtzdGF0aWMgdm9pZCBtdGtfaGRtaV92Ml9od193cml0ZV9hdWRpb19pbmZvZnJh bWUoc3RydWN0IG10a19oZG1pICpoZG1pLCBjb25zdCB1OCAqYnVmZmVyKQ0KPiArew0KPiArICAg ICAgIHJlZ21hcF9jbGVhcl9iaXRzKGhkbWktPnJlZ3MsIFRPUF9JTkZPX0VOLCBBVURfRU4gfCBB VURfRU5fV1IpOw0KPiArICAgICAgIHJlZ21hcF9jbGVhcl9iaXRzKGhkbWktPnJlZ3MsIFRPUF9J TkZPX1JQVCwgQVVEX1JQVF9FTik7DQo+ICsNCj4gKyAgICAgICByZWdtYXBfd3JpdGUoaGRtaS0+ cmVncywgVE9QX0FJRl9IRUFERVIsIG10a19oZG1pX3YyX2Zvcm1hdF9od19wYWNrZXQoJmJ1ZmZl clswXSwgMykpOw0KPiArICAgICAgIHJlZ21hcF93cml0ZShoZG1pLT5yZWdzLCBUT1BfQUlGX1BL VDAwLCBtdGtfaGRtaV92Ml9mb3JtYXRfaHdfcGFja2V0KCZidWZmZXJbM10sIDMpKTsNCj4gKyAg ICAgICByZWdtYXBfd3JpdGUoaGRtaS0+cmVncywgVE9QX0FJRl9QS1QwMSwgbXRrX2hkbWlfdjJf Zm9ybWF0X2h3X3BhY2tldCgmYnVmZmVyWzddLCAyKSk7DQo+ICsgICAgICAgcmVnbWFwX3dyaXRl KGhkbWktPnJlZ3MsIFRPUF9BSUZfUEtUMDIsIDApOw0KPiArICAgICAgIHJlZ21hcF93cml0ZSho ZG1pLT5yZWdzLCBUT1BfQUlGX1BLVDAzLCAwKTsNCj4gKw0KPiArICAgICAgIHJlZ21hcF9zZXRf Yml0cyhoZG1pLT5yZWdzLCBUT1BfSU5GT19SUFQsIEFVRF9SUFRfRU4pOw0KPiArICAgICAgIHJl Z21hcF9zZXRfYml0cyhoZG1pLT5yZWdzLCBUT1BfSU5GT19FTiwgQVVEX0VOIHwgQVVEX0VOX1dS KTsNCj4gK30NCj4gKw0KPiArc3RhdGljIHZvaWQgbXRrX2hkbWlfdjJfaHdfd3JpdGVfYXZpX2lu Zm9mcmFtZShzdHJ1Y3QgbXRrX2hkbWkgKmhkbWksIGNvbnN0IHU4ICpidWZmZXIpDQo+ICt7DQo+ ICsgICAgICAgcmVnbWFwX2NsZWFyX2JpdHMoaGRtaS0+cmVncywgVE9QX0lORk9fRU4sIEFWSV9F Tl9XUiB8IEFWSV9FTik7DQo+ICsgICAgICAgcmVnbWFwX2NsZWFyX2JpdHMoaGRtaS0+cmVncywg VE9QX0lORk9fUlBULCBBVklfUlBUX0VOKTsNCj4gKw0KPiArICAgICAgIHJlZ21hcF93cml0ZSho ZG1pLT5yZWdzLCBUT1BfQVZJX0hFQURFUiwgbXRrX2hkbWlfdjJfZm9ybWF0X2h3X3BhY2tldCgm YnVmZmVyWzBdLCAzKSk7DQo+ICsgICAgICAgcmVnbWFwX3dyaXRlKGhkbWktPnJlZ3MsIFRPUF9B VklfUEtUMDAsIG10a19oZG1pX3YyX2Zvcm1hdF9od19wYWNrZXQoJmJ1ZmZlclszXSwgNCkpOw0K PiArICAgICAgIHJlZ21hcF93cml0ZShoZG1pLT5yZWdzLCBUT1BfQVZJX1BLVDAxLCBtdGtfaGRt aV92Ml9mb3JtYXRfaHdfcGFja2V0KCZidWZmZXJbN10sIDMpKTsNCj4gKyAgICAgICByZWdtYXBf d3JpdGUoaGRtaS0+cmVncywgVE9QX0FWSV9QS1QwMiwgbXRrX2hkbWlfdjJfZm9ybWF0X2h3X3Bh Y2tldCgmYnVmZmVyWzEwXSwgNCkpOw0KPiArICAgICAgIHJlZ21hcF93cml0ZShoZG1pLT5yZWdz LCBUT1BfQVZJX1BLVDAzLCBtdGtfaGRtaV92Ml9mb3JtYXRfaHdfcGFja2V0KCZidWZmZXJbMTRd LCAzKSk7DQo+ICsgICAgICAgcmVnbWFwX3dyaXRlKGhkbWktPnJlZ3MsIFRPUF9BVklfUEtUMDQs IDApOw0KPiArICAgICAgIHJlZ21hcF93cml0ZShoZG1pLT5yZWdzLCBUT1BfQVZJX1BLVDA1LCAw KTsNCj4gKw0KPiArICAgICAgIHJlZ21hcF9zZXRfYml0cyhoZG1pLT5yZWdzLCBUT1BfSU5GT19S UFQsIEFWSV9SUFRfRU4pOw0KPiArICAgICAgIHJlZ21hcF9zZXRfYml0cyhoZG1pLT5yZWdzLCBU T1BfSU5GT19FTiwgQVZJX0VOX1dSIHwgQVZJX0VOKTsNCj4gK30NCj4gKw0KPiArc3RhdGljIHZv aWQgbXRrX2hkbWlfdjJfaHdfd3JpdGVfc3BkX2luZm9mcmFtZShzdHJ1Y3QgbXRrX2hkbWkgKmhk bWksIGNvbnN0IHU4ICpidWZmZXIpDQo+ICt7DQo+ICsgICAgICAgcmVnbWFwX2NsZWFyX2JpdHMo aGRtaS0+cmVncywgVE9QX0lORk9fRU4sIFNQRF9FTl9XUiB8IFNQRF9FTik7DQo+ICsgICAgICAg cmVnbWFwX2NsZWFyX2JpdHMoaGRtaS0+cmVncywgVE9QX0lORk9fUlBULCBTUERfUlBUX0VOKTsN Cj4gKw0KPiArICAgICAgIHJlZ21hcF93cml0ZShoZG1pLT5yZWdzLCBUT1BfU1BESUZfSEVBREVS LCBtdGtfaGRtaV92Ml9mb3JtYXRfaHdfcGFja2V0KCZidWZmZXJbMF0sIDMpKTsNCj4gKyAgICAg ICByZWdtYXBfd3JpdGUoaGRtaS0+cmVncywgVE9QX1NQRElGX1BLVDAwLCBtdGtfaGRtaV92Ml9m b3JtYXRfaHdfcGFja2V0KCZidWZmZXJbM10sIDQpKTsNCj4gKyAgICAgICByZWdtYXBfd3JpdGUo aGRtaS0+cmVncywgVE9QX1NQRElGX1BLVDAxLCBtdGtfaGRtaV92Ml9mb3JtYXRfaHdfcGFja2V0 KCZidWZmZXJbN10sIDMpKTsNCj4gKyAgICAgICByZWdtYXBfd3JpdGUoaGRtaS0+cmVncywgVE9Q X1NQRElGX1BLVDAyLCBtdGtfaGRtaV92Ml9mb3JtYXRfaHdfcGFja2V0KCZidWZmZXJbMTBdLCA0 KSk7DQo+ICsgICAgICAgcmVnbWFwX3dyaXRlKGhkbWktPnJlZ3MsIFRPUF9TUERJRl9QS1QwMywg bXRrX2hkbWlfdjJfZm9ybWF0X2h3X3BhY2tldCgmYnVmZmVyWzE0XSwgMykpOw0KPiArICAgICAg IHJlZ21hcF93cml0ZShoZG1pLT5yZWdzLCBUT1BfU1BESUZfUEtUMDQsIG10a19oZG1pX3YyX2Zv cm1hdF9od19wYWNrZXQoJmJ1ZmZlclsxN10sIDQpKTsNCj4gKyAgICAgICByZWdtYXBfd3JpdGUo aGRtaS0+cmVncywgVE9QX1NQRElGX1BLVDA1LCBtdGtfaGRtaV92Ml9mb3JtYXRfaHdfcGFja2V0 KCZidWZmZXJbMjFdLCAzKSk7DQo+ICsgICAgICAgcmVnbWFwX3dyaXRlKGhkbWktPnJlZ3MsIFRP UF9TUERJRl9QS1QwNiwgbXRrX2hkbWlfdjJfZm9ybWF0X2h3X3BhY2tldCgmYnVmZmVyWzI0XSwg NCkpOw0KPiArICAgICAgIHJlZ21hcF93cml0ZShoZG1pLT5yZWdzLCBUT1BfU1BESUZfUEtUMDcs IGJ1ZmZlclsyOF0pOw0KPiArDQo+ICsgICAgICAgcmVnbWFwX3NldF9iaXRzKGhkbWktPnJlZ3Ms IFRPUF9JTkZPX0VOLCBTUERfRU5fV1IgfCBTUERfRU4pOw0KPiArICAgICAgIHJlZ21hcF9zZXRf Yml0cyhoZG1pLT5yZWdzLCBUT1BfSU5GT19SUFQsIFNQRF9SUFRfRU4pOw0KPiArfQ0KPiArDQo+ ICtzdGF0aWMgdm9pZCBtdGtfaGRtaV92Ml9od193cml0ZV92ZW5kb3JfaW5mb2ZyYW1lKHN0cnVj dCBtdGtfaGRtaSAqaGRtaSwgY29uc3QgdTggKmJ1ZmZlcikNCj4gK3sNCj4gKyAgICAgICByZWdt YXBfY2xlYXJfYml0cyhoZG1pLT5yZWdzLCBUT1BfSU5GT19FTiwgVlNJRl9FTl9XUiB8IFZTSUZf RU4pOw0KPiArICAgICAgIHJlZ21hcF9jbGVhcl9iaXRzKGhkbWktPnJlZ3MsIFRPUF9JTkZPX1JQ VCwgVlNJRl9SUFRfRU4pOw0KPiArDQo+ICsgICAgICAgcmVnbWFwX3dyaXRlKGhkbWktPnJlZ3Ms IFRPUF9WU0lGX0hFQURFUiwgbXRrX2hkbWlfdjJfZm9ybWF0X2h3X3BhY2tldCgmYnVmZmVyWzBd LCAzKSk7DQo+ICsgICAgICAgcmVnbWFwX3dyaXRlKGhkbWktPnJlZ3MsIFRPUF9WU0lGX1BLVDAw LCBtdGtfaGRtaV92Ml9mb3JtYXRfaHdfcGFja2V0KCZidWZmZXJbM10sIDQpKTsNCj4gKyAgICAg ICByZWdtYXBfd3JpdGUoaGRtaS0+cmVncywgVE9QX1ZTSUZfUEtUMDEsIG10a19oZG1pX3YyX2Zv cm1hdF9od19wYWNrZXQoJmJ1ZmZlcls3XSwgMikpOw0KPiArICAgICAgIHJlZ21hcF93cml0ZSho ZG1pLT5yZWdzLCBUT1BfVlNJRl9QS1QwMiwgMCk7DQo+ICsgICAgICAgcmVnbWFwX3dyaXRlKGhk bWktPnJlZ3MsIFRPUF9WU0lGX1BLVDAzLCAwKTsNCj4gKyAgICAgICByZWdtYXBfd3JpdGUoaGRt aS0+cmVncywgVE9QX1ZTSUZfUEtUMDQsIDApOw0KPiArICAgICAgIHJlZ21hcF93cml0ZShoZG1p LT5yZWdzLCBUT1BfVlNJRl9QS1QwNSwgMCk7DQo+ICsgICAgICAgcmVnbWFwX3dyaXRlKGhkbWkt PnJlZ3MsIFRPUF9WU0lGX1BLVDA2LCAwKTsNCj4gKyAgICAgICByZWdtYXBfd3JpdGUoaGRtaS0+ cmVncywgVE9QX1ZTSUZfUEtUMDcsIDApOw0KPiArDQo+ICsgICAgICAgcmVnbWFwX3NldF9iaXRz KGhkbWktPnJlZ3MsIFRPUF9JTkZPX0VOLCBWU0lGX0VOX1dSIHwgVlNJRl9FTik7DQo+ICsgICAg ICAgcmVnbWFwX3NldF9iaXRzKGhkbWktPnJlZ3MsIFRPUF9JTkZPX1JQVCwgVlNJRl9SUFRfRU4p Ow0KPiArfQ0KPiArDQo+ICtzdGF0aWMgdm9pZCBtdGtfaGRtaV95dXY0MjBfZG93bnNhbXBsaW5n KHN0cnVjdCBtdGtfaGRtaSAqaGRtaSwgYm9vbCBlbmFibGUpDQoNCmVuYWJsZSBpcyBhbHdheXMg ZmFsc2UsIHNvIGRyb3AgaXQuDQoNCj4gK3sNCj4gKyAgICAgICB1MzIgdmFsOw0KPiArDQo+ICsg ICAgICAgcmVnbWFwX3JlYWQoaGRtaS0+cmVncywgVklEX0RPV05TQU1QTEVfQ09ORklHLCAmdmFs KTsNCj4gKw0KPiArICAgICAgIGlmIChlbmFibGUpIHsNCj4gKyAgICAgICAgICAgICAgIHJlZ21h cF9zZXRfYml0cyhoZG1pLT5yZWdzLCBoZG1pLT5jb25mLT5yZWdfaGRtaV90eF9jZmcsDQo+ICsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSERNSV9ZVVY0MjBfTU9ERSB8IEhETUlUWF9T V19IUEQpOw0KPiArDQo+ICsgICAgICAgICAgICAgICB2YWwgfD0gQzQ0NF9DNDIyX0NPTkZJR19F TkFCTEUgfCBDNDIyX0M0MjBfQ09ORklHX0VOQUJMRTsNCj4gKyAgICAgICAgICAgICAgIHZhbCB8 PSBDNDIyX0M0MjBfQ09ORklHX09VVF9DQl9PUl9DUjsNCj4gKyAgICAgICAgICAgICAgIHZhbCAm PSB+QzQyMl9DNDIwX0NPTkZJR19CWVBBU1M7DQo+ICsgICAgICAgICAgICAgICByZWdtYXBfd3Jp dGUoaGRtaS0+cmVncywgVklEX0RPV05TQU1QTEVfQ09ORklHLCB2YWwpOw0KPiArDQo+ICsgICAg ICAgICAgICAgICByZWdtYXBfc2V0X2JpdHMoaGRtaS0+cmVncywgVklEX09VVF9GT1JNQVQsIE9V VFBVVF9GT1JNQVRfREVNVVhfNDIwX0VOQUJMRSk7DQo+ICsgICAgICAgfSBlbHNlIHsNCj4gKyAg ICAgICAgICAgICAgIHJlZ21hcF91cGRhdGVfYml0cyhoZG1pLT5yZWdzLCBoZG1pLT5jb25mLT5y ZWdfaGRtaV90eF9jZmcsDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSERN SV9ZVVY0MjBfTU9ERSB8IEhETUlUWF9TV19IUEQsIEhETUlUWF9TV19IUEQpOw0KDQpGcm9tIHRo ZSBuYW1pbmcsIEhETUlUWF9TV19IUEQgaGFzIG5vIHJlbGF0aW9uIHdpdGggWVVWNDIwIGRvd25z YW1wbGluZy4NCkFuZCB0aGVyZSBpcyBhbm90aGVyIGZ1bmN0aW9uIHRvIHNldCBIRE1JVFhfU1df SFBELCBpdCdzIG5vdCBuZWNlc3NhcnkgdG8gc2V0IEhETUlUWF9TV19IUEQgaGVyZS4NCg0KPiAr DQo+ICsgICAgICAgICAgICAgICB2YWwgJj0gfihDNDQ0X0M0MjJfQ09ORklHX0VOQUJMRSB8IEM0 MjJfQzQyMF9DT05GSUdfRU5BQkxFKTsNCj4gKyAgICAgICAgICAgICAgIHZhbCAmPSB+QzQyMl9D NDIwX0NPTkZJR19PVVRfQ0JfT1JfQ1I7DQo+ICsgICAgICAgICAgICAgICB2YWwgfD0gQzQyMl9D NDIwX0NPTkZJR19CWVBBU1M7DQo+ICsgICAgICAgICAgICAgICByZWdtYXBfd3JpdGUoaGRtaS0+ cmVncywgVklEX0RPV05TQU1QTEVfQ09ORklHLCB2YWwpOw0KPiArDQo+ICsgICAgICAgICAgICAg ICByZWdtYXBfY2xlYXJfYml0cyhoZG1pLT5yZWdzLCBWSURfT1VUX0ZPUk1BVCwgT1VUUFVUX0ZP Uk1BVF9ERU1VWF80MjBfRU5BQkxFKTsNCj4gKyAgICAgICB9DQo+ICt9DQo+ICsNCj4gK3N0YXRp YyBpbnQgbXRrX2hkbWlfdjJfc2V0dXBfYXVkaW9faW5mb2ZyYW1lKHN0cnVjdCBtdGtfaGRtaSAq aGRtaSkNCj4gK3sNCj4gKyAgICAgICBzdHJ1Y3QgaGRtaV9jb2RlY19wYXJhbXMgKnBhcmFtcyA9 ICZoZG1pLT5hdWRfcGFyYW0uY29kZWNfcGFyYW1zOw0KPiArICAgICAgIHN0cnVjdCBoZG1pX2F1 ZGlvX2luZm9mcmFtZSBmcmFtZTsNCj4gKyAgICAgICB1OCBidWZmZXJbMTRdOw0KPiArICAgICAg IHNzaXplX3QgcmV0Ow0KPiArDQo+ICsgICAgICAgbWVtY3B5KCZmcmFtZSwgJnBhcmFtcy0+Y2Vh LCBzaXplb2YoZnJhbWUpKTsNCj4gKw0KPiArICAgICAgIHJldCA9IGhkbWlfYXVkaW9faW5mb2Zy YW1lX3BhY2soJmZyYW1lLCBidWZmZXIsIHNpemVvZihidWZmZXIpKTsNCj4gKyAgICAgICBpZiAo cmV0IDwgMCkNCj4gKyAgICAgICAgICAgICAgIHJldHVybiByZXQ7DQo+ICsNCj4gKyAgICAgICBt dGtfaGRtaV92Ml9od193cml0ZV9hdWRpb19pbmZvZnJhbWUoaGRtaSwgYnVmZmVyKTsNCj4gKw0K PiArICAgICAgIHJldHVybiAwOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgaW5saW5lIHZvaWQgbXRr X2hkbWlfdjJfaHdfcmVzZXRfYXZfbXV0ZV9yZWdzKHN0cnVjdCBtdGtfaGRtaSAqaGRtaSkNCj4g K3sNCg0KVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgb25seSBieSBtdGtfaGRtaV92Ml9od19hdl9t dXRlKCksIHNvIG1lcmdlIHRoaXMgZnVuY3Rpb24gaW50byBtdGtfaGRtaV92Ml9od19hdl9tdXRl KCkuDQoNCj4gKyAgICAgICAvKiBHQ1AgcGFja2V0ICovDQo+ICsgICAgICAgcmVnbWFwX2NsZWFy X2JpdHMoaGRtaS0+cmVncywgVE9QX0NGRzAxLCBDUF9DTFJfTVVURV9FTiB8IENQX1NFVF9NVVRF X0VOKTsNCj4gKyAgICAgICByZWdtYXBfY2xlYXJfYml0cyhoZG1pLT5yZWdzLCBUT1BfSU5GT19S UFQsIENQX1JQVF9FTik7DQoNClRoaXMgd291bGQgZmluYWxseSBiZSBzZXQsIHdoeSBjbGVhcj8N Cg0KPiArICAgICAgIHJlZ21hcF9jbGVhcl9iaXRzKGhkbWktPnJlZ3MsIFRPUF9JTkZPX0VOLCBD UF9FTiB8IENQX0VOX1dSKTsNCg0KRGl0dG8uDQoNCj4gK30NCj4gKw0KPiArc3RhdGljIGlubGlu ZSB2b2lkIG10a19oZG1pX3YyX2h3X2F2X211dGUoc3RydWN0IG10a19oZG1pICpoZG1pLCBib29s IG11dGUpDQo+ICt7DQo+ICsgICAgICAgbXRrX2hkbWlfdjJfaHdfcmVzZXRfYXZfbXV0ZV9yZWdz KGhkbWkpOw0KPiArDQo+ICsgICAgICAgaWYgKG11dGUpDQo+ICsgICAgICAgICAgICAgICByZWdt YXBfc2V0X2JpdHMoaGRtaS0+cmVncywgVE9QX0NGRzAxLCBDUF9TRVRfTVVURV9FTik7DQo+ICsg ICAgICAgZWxzZQ0KPiArICAgICAgICAgICAgICAgcmVnbWFwX3NldF9iaXRzKGhkbWktPnJlZ3Ms IFRPUF9DRkcwMSwgQ1BfQ0xSX01VVEVfRU4pOw0KPiArDQo+ICsgICAgICAgcmVnbWFwX3NldF9i aXRzKGhkbWktPnJlZ3MsIFRPUF9JTkZPX1JQVCwgQ1BfUlBUX0VOKTsNCj4gKyAgICAgICByZWdt YXBfc2V0X2JpdHMoaGRtaS0+cmVncywgVE9QX0lORk9fRU4sIENQX0VOIHwgQ1BfRU5fV1IpOw0K PiArfQ0KPiArDQo+ICtzdGF0aWMgdm9pZCBtdGtfaGRtaV92Ml9od19uY3RzX2VuYWJsZShzdHJ1 Y3QgbXRrX2hkbWkgKmhkbWksIGJvb2wgZW5hYmxlKQ0KPiArew0KPiArICAgICAgIGlmIChlbmFi bGUpDQo+ICsgICAgICAgICAgICAgICByZWdtYXBfc2V0X2JpdHMoaGRtaS0+cmVncywgQUlQX0NU UkwsIENUU19TV19TRUwpOw0KPiArICAgICAgIGVsc2UNCj4gKyAgICAgICAgICAgICAgIHJlZ21h cF9jbGVhcl9iaXRzKGhkbWktPnJlZ3MsIEFJUF9DVFJMLCBDVFNfU1dfU0VMKTsNCj4gK30NCj4g Kw0KPiArc3RhdGljIHZvaWQgbXRrX2hkbWlfdjJfaHdfYXVkX3NldF9jaGFubmVsX3N0YXR1cyhz dHJ1Y3QgbXRrX2hkbWkgKmhkbWkpDQo+ICt7DQo+ICsgICAgICAgdTggKmNoX3N0YXR1cyA9IGhk bWktPmF1ZF9wYXJhbS5jb2RlY19wYXJhbXMuaWVjLnN0YXR1czsNCj4gKw0KPiArICAgICAgIC8q IE9ubHkgdGhlIGZpcnN0IDUgdG8gNyBieXRlcyBvZiBDaGFubmVsIFN0YXR1cyBjb250YWluIHVz ZWZ1bCBpbmZvcm1hdGlvbiAqLw0KPiArICAgICAgIHJlZ21hcF93cml0ZShoZG1pLT5yZWdzLCBB SVBfSTJTX0NIU1QwLCBtdGtfaGRtaV92Ml9mb3JtYXRfaHdfcGFja2V0KCZjaF9zdGF0dXNbMF0s IDQpKTsNCj4gKyAgICAgICByZWdtYXBfd3JpdGUoaGRtaS0+cmVncywgQUlQX0kyU19DSFNUMSwg bXRrX2hkbWlfdjJfZm9ybWF0X2h3X3BhY2tldCgmY2hfc3RhdHVzWzRdLCAzKSk7DQo+ICt9DQo+ ICsNCj4gK3N0YXRpYyB2b2lkIG10a19oZG1pX3YyX2h3X2F1ZF9zZXRfbmN0cyhzdHJ1Y3QgbXRr X2hkbWkgKmhkbWksDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNp Z25lZCBpbnQgc2FtcGxlX3JhdGUsDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICB1bnNpZ25lZCBpbnQgY2xvY2spDQo+ICt7DQo+ICsgICAgICAgdW5zaWduZWQgaW50IG4s IGN0czsNCj4gKw0KPiArICAgICAgIG10a19oZG1pX2dldF9uY3RzKHNhbXBsZV9yYXRlLCBjbG9j aywgJm4sICZjdHMpOw0KPiArDQo+ICsgICAgICAgcmVnbWFwX3dyaXRlKGhkbWktPnJlZ3MsIEFJ UF9OX1ZBTCwgbik7DQo+ICsgICAgICAgcmVnbWFwX3dyaXRlKGhkbWktPnJlZ3MsIEFJUF9DVFNf U1ZBTCwgY3RzKTsNCj4gK30NCj4gKw0KPiArc3RhdGljIHZvaWQgbXRrX2hkbWlfdjJfaHdfYXVk X2VuYWJsZShzdHJ1Y3QgbXRrX2hkbWkgKmhkbWksIGJvb2wgZW5hYmxlKQ0KPiArew0KPiArICAg ICAgIGlmIChlbmFibGUpDQo+ICsgICAgICAgICAgICAgICByZWdtYXBfY2xlYXJfYml0cyhoZG1p LT5yZWdzLCBBSVBfVFhDVFJMLCBBVURfUEFDS0VUX0RST1ApOw0KPiArICAgICAgIGVsc2UNCj4g KyAgICAgICAgICAgICAgIHJlZ21hcF9zZXRfYml0cyhoZG1pLT5yZWdzLCBBSVBfVFhDVFJMLCBB VURfUEFDS0VUX0RST1ApOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgdTMyIG10a19oZG1pX3YyX2F1 ZF9vdXRwdXRfY2hhbm5lbF9tYXAodTggc2QwLCB1OCBzZDEsIHU4IHNkMiwgdTggc2QzLA0KPiAr ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdTggc2Q0LCB1OCBz ZDUsIHU4IHNkNiwgdTggc2Q3KQ0KPiArew0KPiArICAgICAgIHUzMiB2YWw7DQo+ICsNCj4gKyAg ICAgICAvKg0KPiArICAgICAgICAqIEVhY2ggb2YgdGhlIE91dHB1dCBDaGFubmVscyAoMC03KSBj YW4gYmUgbWFwcGVkIHRvIGdldCB0aGVpciBpbnB1dA0KPiArICAgICAgICAqIGZyb20gYW55IG9m IHRoZSBhdmFpbGFibGUgSW5wdXQgQ2hhbm5lbHMgKDAtNyk6IHRoaXMgZnVuY3Rpb24NCj4gKyAg ICAgICAgKiB0YWtlcyBpbnB1dCBjaGFubmVsIG51bWJlcnMgYW5kIGZvcm1hdHMgYSB2YWx1ZSB0 aGF0IG11c3QgdGhlbg0KPiArICAgICAgICAqIGJlIHdyaXR0ZW4gdG8gdGhlIFRPUF9BVURfTUFQ IGhhcmR3YXJlIHJlZ2lzdGVyIGJ5IHRoZSBjYWxsZXIuDQo+ICsgICAgICAgICovDQo+ICsgICAg ICAgdmFsID0gRklFTERfUFJFUChTRDBfTUFQLCBzZDApIHwgRklFTERfUFJFUChTRDFfTUFQLCBz ZDEpOw0KPiArICAgICAgIHZhbCB8PSBGSUVMRF9QUkVQKFNEMl9NQVAsIHNkMikgfCBGSUVMRF9Q UkVQKFNEM19NQVAsIHNkMyk7DQo+ICsgICAgICAgdmFsIHw9IEZJRUxEX1BSRVAoU0Q0X01BUCwg c2Q0KSB8IEZJRUxEX1BSRVAoU0Q1X01BUCwgc2Q1KTsNCj4gKyAgICAgICB2YWwgfD0gRklFTERf UFJFUChTRDZfTUFQLCBzZDYpIHwgRklFTERfUFJFUChTRDdfTUFQLCBzZDcpOw0KPiArDQo+ICsg ICAgICAgcmV0dXJuIHZhbDsNCj4gK30NCj4gKw0KPiArc3RhdGljIHZvaWQgbXRrX2hkbWlfYXVk aW9fZHNkX2NvbmZpZyhzdHJ1Y3QgbXRrX2hkbWkgKmhkbWksDQo+ICsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciBjaG51bSwgYm9vbCBkc2RfYnlwYXNz KQ0KPiArew0KPiArICAgICAgIHUzMiBjaGFubmVsX21hcDsNCj4gKw0KPiArICAgICAgIHJlZ21h cF91cGRhdGVfYml0cyhoZG1pLT5yZWdzLCBBSVBfQ1RSTCwgU1BESUZfRU4gfCBEU0RfRU4gfCBI QlJBX09OLCBEU0RfRU4pOw0KPiArICAgICAgIHJlZ21hcF9zZXRfYml0cyhoZG1pLT5yZWdzLCBB SVBfVFhDVFJMLCBEU0RfTVVURV9FTik7DQo+ICsNCj4gKyAgICAgICBpZiAoZHNkX2J5cGFzcykN Cj4gKyAgICAgICAgICAgICAgIGNoYW5uZWxfbWFwID0gbXRrX2hkbWlfdjJfYXVkX291dHB1dF9j aGFubmVsX21hcCgwLCAyLCA0LCA2LCAxLCAzLCA1LCA3KTsNCj4gKyAgICAgICBlbHNlDQo+ICsg ICAgICAgICAgICAgICBjaGFubmVsX21hcCA9IG10a19oZG1pX3YyX2F1ZF9vdXRwdXRfY2hhbm5l bF9tYXAoMCwgNSwgMSwgMCwgMywgMiwgNCwgMCk7DQo+ICsNCj4gKyAgICAgICByZWdtYXBfd3Jp dGUoaGRtaS0+cmVncywgVE9QX0FVRF9NQVAsIGNoYW5uZWxfbWFwKTsNCj4gKyAgICAgICByZWdt YXBfY2xlYXJfYml0cyhoZG1pLT5yZWdzLCBBSVBfU1BESUZfQ1RSTCwgSTJTMkRTRF9FTik7DQo+ ICt9DQo+ICsNCj4gK3N0YXRpYyBpbmxpbmUgdm9pZCBtdGtfaGRtaV92Ml9od19pMnNfZmlmb19t YXAoc3RydWN0IG10a19oZG1pICpoZG1pLCB1MzIgZmlmb19tYXBwaW5nKQ0KPiArew0KPiArICAg ICAgIHJlZ21hcF91cGRhdGVfYml0cyhoZG1pLT5yZWdzLCBBSVBfSTJTX0NUUkwsDQo+ICsgICAg ICAgICAgICAgICAgICAgICAgICAgIEZJRk8wX01BUCB8IEZJRk8xX01BUCB8IEZJRk8yX01BUCB8 IEZJRk8zX01BUCwgZmlmb19tYXBwaW5nKTsNCj4gK30NCj4gKw0KPiArc3RhdGljIGlubGluZSB2 b2lkIG10a19oZG1pX3YyX2h3X2kyc19jaF9udW1iZXIoc3RydWN0IG10a19oZG1pICpoZG1pLCB1 OCBjaG51bSkNCj4gK3sNCj4gKyAgICAgICByZWdtYXBfdXBkYXRlX2JpdHMoaGRtaS0+cmVncywg QUlQX0NUUkwsIEkyU19FTiwgRklFTERfUFJFUChJMlNfRU4sIGNobnVtKSk7DQo+ICt9DQo+ICsN Cj4gK3N0YXRpYyB2b2lkIG10a19oZG1pX3YyX2h3X2kyc19jaF9tYXBwaW5nKHN0cnVjdCBtdGtf aGRtaSAqaGRtaSwgdTggY2hudW0sIHU4IG1hcHBpbmcpDQo+ICt7DQo+ICsgICAgICAgdTMyIGZp Zm9fbWFwOw0KPiArICAgICAgIHU4IGJkYXRhOw0KPiArDQo+ICsgICAgICAgc3dpdGNoIChjaG51 bSkgew0KPiArICAgICAgIGRlZmF1bHQ6DQo+ICsgICAgICAgY2FzZSAyOg0KPiArICAgICAgICAg ICAgICAgYmRhdGEgPSAweDE7DQo+ICsgICAgICAgICAgICAgICBicmVhazsNCj4gKyAgICAgICBj YXNlIDM6DQo+ICsgICAgICAgICAgICAgICBiZGF0YSA9IDB4MzsNCj4gKyAgICAgICAgICAgICAg IGJyZWFrOw0KPiArICAgICAgIGNhc2UgNjoNCj4gKyAgICAgICAgICAgICAgIGlmIChtYXBwaW5n ID09IDB4MGUpIHsNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgYmRhdGEgPSAweGY7DQo+ICsg ICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KPiArICAgICAgICAgICAgICAgfQ0KPiArICAg ICAgICAgICAgICAgZmFsbHRocm91Z2g7DQo+ICsgICAgICAgY2FzZSA1Og0KPiArICAgICAgICAg ICAgICAgYmRhdGEgPSAweDc7DQo+ICsgICAgICAgICAgICAgICBicmVhazsNCj4gKyAgICAgICBj YXNlIDc6DQo+ICsgICAgICAgY2FzZSA4Og0KPiArICAgICAgICAgICAgICAgYmRhdGEgPSAweGY7 DQo+ICsgICAgICAgICAgICAgICBicmVhazsNCj4gKyAgICAgICB9DQo+ICsNCj4gKyAgICAgICAv KiBBc3NpZ24gZGVmYXVsdCBGSUZPIG1hcHBpbmc6IFNEMCB0byBGSUZPMCwgU0QxIHRvIEZJRk8x LCBldGMuICovDQo+ICsgICAgICAgZmlmb19tYXAgPSBGSUVMRF9QUkVQKEZJRk8wX01BUCwgMCkg fCBGSUVMRF9QUkVQKEZJRk8xX01BUCwgMSk7DQo+ICsgICAgICAgZmlmb19tYXAgfD0gRklFTERf UFJFUChGSUZPMl9NQVAsIDIpIHwgRklFTERfUFJFUChGSUZPM19NQVAsIDMpOw0KPiArICAgICAg IG10a19oZG1pX3YyX2h3X2kyc19maWZvX21hcChoZG1pLCBmaWZvX21hcCk7DQo+ICsgICAgICAg bXRrX2hkbWlfdjJfaHdfaTJzX2NoX251bWJlcihoZG1pLCBiZGF0YSk7DQo+ICsNCj4gKyAgICAg ICAvKg0KPiArICAgICAgICAqIFNldCBIRE1JIEF1ZGlvIHBhY2tldCBsYXlvdXQgaW5kaWNhdG9y Og0KPiArICAgICAgICAqIExheW91dCAwIGlzIGZvciB0d28gY2hhbm5lbHMNCj4gKyAgICAgICAg KiBMYXlvdXQgMSBpcyBmb3IgdXAgdG8gZWlnaHQgY2hhbm5lbHMNCj4gKyAgICAgICAgKi8NCj4g KyAgICAgICBpZiAoY2hudW0gPT0gMikNCj4gKyAgICAgICAgICAgICAgIHJlZ21hcF9zZXRfYml0 cyhoZG1pLT5yZWdzLCBBSVBfVFhDVFJMLCBBVURfTEFZT1VUXzEpOw0KPiArICAgICAgIGVsc2UN Cj4gKyAgICAgICAgICAgICAgIHJlZ21hcF9jbGVhcl9iaXRzKGhkbWktPnJlZ3MsIEFJUF9UWENU UkwsIEFVRF9MQVlPVVRfMSk7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyB2b2lkIG10a19oZG1pX2ky c19kYXRhX2ZtdChzdHJ1Y3QgbXRrX2hkbWkgKmhkbWksIHVuc2lnbmVkIGNoYXIgZm10KQ0KPiAr ew0KPiArICAgICAgIHUzMiB2YWw7DQo+ICsNCj4gKyAgICAgICByZWdtYXBfcmVhZChoZG1pLT5y ZWdzLCBBSVBfSTJTX0NUUkwsICZ2YWwpOw0KPiArICAgICAgIHZhbCAmPSB+KFdTX0hJR0ggfCBJ MlNfMVNUX0JJVF9OT1NISUZUIHwgSlVTVElGWV9SSUdIVCk7DQo+ICsNCj4gKyAgICAgICBzd2l0 Y2ggKGZtdCkgew0KPiArICAgICAgIGNhc2UgSERNSV9JMlNfTU9ERV9SSlRfMjRCSVQ6DQo+ICsg ICAgICAgY2FzZSBIRE1JX0kyU19NT0RFX1JKVF8xNkJJVDoNCj4gKyAgICAgICAgICAgICAgIHZh bCB8PSAoV1NfSElHSCB8IEkyU18xU1RfQklUX05PU0hJRlQgfCBKVVNUSUZZX1JJR0hUKTsNCj4g KyAgICAgICAgICAgICAgIGJyZWFrOw0KPiArICAgICAgIGNhc2UgSERNSV9JMlNfTU9ERV9MSlRf MjRCSVQ6DQo+ICsgICAgICAgY2FzZSBIRE1JX0kyU19NT0RFX0xKVF8xNkJJVDoNCj4gKyAgICAg ICAgICAgICAgIHZhbCB8PSAoV1NfSElHSCB8IEkyU18xU1RfQklUX05PU0hJRlQpOw0KPiArICAg ICAgICAgICAgICAgYnJlYWs7DQo+ICsgICAgICAgY2FzZSBIRE1JX0kyU19NT0RFX0kyU18yNEJJ VDoNCj4gKyAgICAgICBjYXNlIEhETUlfSTJTX01PREVfSTJTXzE2QklUOg0KPiArICAgICAgIGRl ZmF1bHQ6DQo+ICsgICAgICAgICAgICAgICBicmVhazsNCj4gKyAgICAgICB9DQo+ICsNCj4gKyAg ICAgICByZWdtYXBfd3JpdGUoaGRtaS0+cmVncywgQUlQX0kyU19DVFJMLCB2YWwpOw0KPiArfQ0K PiArDQo+ICtzdGF0aWMgaW5saW5lIHZvaWQgbXRrX2hkbWlfaTJzX3Nja19lZGdlX3Jpc2Uoc3Ry dWN0IG10a19oZG1pICpoZG1pLCBib29sIHJpc2UpDQoNCnJpc2UgaXMgYWx3YXlzIHRydWUsIHNv IGRyb3AgaXQuDQoNCj4gK3sNCj4gKyAgICAgICBpZiAocmlzZSkNCj4gKyAgICAgICAgICAgICAg IHJlZ21hcF9zZXRfYml0cyhoZG1pLT5yZWdzLCBBSVBfSTJTX0NUUkwsIFNDS19FREdFX1JJU0Up Ow0KPiArICAgICAgIGVsc2UNCj4gKyAgICAgICAgICAgICAgIHJlZ21hcF9jbGVhcl9iaXRzKGhk bWktPnJlZ3MsIEFJUF9JMlNfQ1RSTCwgU0NLX0VER0VfUklTRSk7DQo+ICt9DQo+ICsNCj4gK3N0 YXRpYyBpbmxpbmUgdm9pZCBtdGtfaGRtaV9pMnNfY2JpdF9vcmRlcihzdHJ1Y3QgbXRrX2hkbWkg KmhkbWksIHVuc2lnbmVkIGludCBjYml0KQ0KDQpjYml0IGlzIGFsd2F5cyBDQklUX09SREVSX1NB TUUsIHNvIGRyb3AgaXQuDQoNCj4gK3sNCj4gKyAgICAgICByZWdtYXBfdXBkYXRlX2JpdHMoaGRt aS0+cmVncywgQUlQX0kyU19DVFJMLCBDQklUX09SREVSX1NBTUUsIGNiaXQpOw0KPiArfQ0KPiAr DQo+ICtzdGF0aWMgaW5saW5lIHZvaWQgbXRrX2hkbWlfaTJzX3ZiaXQoc3RydWN0IG10a19oZG1p ICpoZG1pLCB1bnNpZ25lZCBpbnQgdmJpdCkNCg0KdmJpdCBpcyBhbHdheXMgMCwgc28gZHJvcCBp dC4NCg0KPiArew0KPiArICAgICAgIC8qIFYgYml0OiAwIGZvciBQQ00sIDEgZm9yIENvbXByZXNz ZWQgZGF0YSAqLw0KPiArICAgICAgIHJlZ21hcF91cGRhdGVfYml0cyhoZG1pLT5yZWdzLCBBSVBf STJTX0NUUkwsIFZCSVRfQ09NUFJFU1NFRCwgdmJpdCk7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyBp bmxpbmUgdm9pZCBtdGtfaGRtaV9pMnNfZGF0YV9kaXJlY3Rpb24oc3RydWN0IG10a19oZG1pICpo ZG1pLCB1bnNpZ25lZCBpbnQgaXNfbHNiKQ0KDQppc19sc2IgaXMgYWx3YXlzIDAsIHNvIGRyb3Ag aXQuDQoNCj4gK3sNCj4gKyAgICAgICByZWdtYXBfdXBkYXRlX2JpdHMoaGRtaS0+cmVncywgQUlQ X0kyU19DVFJMLCBJMlNfREFUQV9ESVJfTFNCLCBpc19sc2IpOw0KPiArfQ0KPiArDQo+ICtzdGF0 aWMgaW5saW5lIHZvaWQgbXRrX2hkbWlfdjJfaHdfYXVkaW9fdHlwZShzdHJ1Y3QgbXRrX2hkbWkg KmhkbWksIHVuc2lnbmVkIGludCBzcGRpZl9pMnMpDQoNCnNwZGlmX2lzMiBpcyBhbHdheXMgSERN SV9BVURfSU5QVVRfSTJTLCBzbyBkcm9wIGl0Lg0KDQo+ICt7DQo+ICsgICAgICAgcmVnbWFwX3Vw ZGF0ZV9iaXRzKGhkbWktPnJlZ3MsIEFJUF9DVFJMLCBTUERJRl9FTiwgRklFTERfUFJFUChTUERJ Rl9FTiwgc3BkaWZfaTJzKSk7DQo+ICt9DQoNClRoZXJlIGlzIHNvIG1hbnkgZnVuY3Rpb24ganVz dCB3cml0ZSBvbmUgcmVnaXN0ZXIsDQphbmQgdGhlc2UgZnVuY3Rpb24gaXMgY2FsbGVkIG9ubHkg d2hlbiBhdWRpbyBpbnB1dCB0eXBlIGlzIGRlZmF1bHQuDQpJIHRoaW5rIGl0J3MgYmV0dGVyIHRv IG1lcmdlIHRoZXNlIGZ1bmN0aW9uIGludG8gb25lIGZ1bmN0aW9uIGZvciBkZWZhdWx0IGF1ZGlv IGlucHV0IHR5cGUuDQoNCj4gKw0KPiArc3RhdGljIHU4IG10a19oZG1pX3YyX2dldF9pMnNfY2hf bWFwcGluZyhzdHJ1Y3QgbXRrX2hkbWkgKmhkbWksIHU4IGNoYW5uZWxfdHlwZSkNCj4gK3sNCj4g KyAgICAgICBzd2l0Y2ggKGNoYW5uZWxfdHlwZSkgew0KPiArICAgICAgIGNhc2UgSERNSV9BVURf Q0hBTl9UWVBFXzFfMToNCj4gKyAgICAgICBjYXNlIEhETUlfQVVEX0NIQU5fVFlQRV8yXzE6DQo+ ICsgICAgICAgICAgICAgICByZXR1cm4gMHgwMTsNCj4gKyAgICAgICBjYXNlIEhETUlfQVVEX0NI QU5fVFlQRV8zXzA6DQo+ICsgICAgICAgICAgICAgICByZXR1cm4gMHgwMjsNCj4gKyAgICAgICBj YXNlIEhETUlfQVVEX0NIQU5fVFlQRV8zXzE6DQo+ICsgICAgICAgICAgICAgICByZXR1cm4gMHgw MzsNCj4gKyAgICAgICBjYXNlIEhETUlfQVVEX0NIQU5fVFlQRV8zXzBfTFJTOg0KPiArICAgICAg IGNhc2UgSERNSV9BVURfQ0hBTl9UWVBFXzRfMDoNCj4gKyAgICAgICAgICAgICAgIHJldHVybiAw eDA4Ow0KPiArICAgICAgIGNhc2UgSERNSV9BVURfQ0hBTl9UWVBFXzVfMToNCj4gKyAgICAgICAg ICAgICAgIHJldHVybiAweDBiOw0KPiArICAgICAgIGNhc2UgSERNSV9BVURfQ0hBTl9UWVBFXzRf MV9DTFJTOg0KPiArICAgICAgIGNhc2UgSERNSV9BVURfQ0hBTl9UWVBFXzZfMDoNCj4gKyAgICAg ICBjYXNlIEhETUlfQVVEX0NIQU5fVFlQRV82XzBfQ1M6DQo+ICsgICAgICAgY2FzZSBIRE1JX0FV RF9DSEFOX1RZUEVfNl8wX0NIOg0KPiArICAgICAgIGNhc2UgSERNSV9BVURfQ0hBTl9UWVBFXzZf MF9PSDoNCj4gKyAgICAgICBjYXNlIEhETUlfQVVEX0NIQU5fVFlQRV82XzBfQ0hSOg0KPiArICAg ICAgICAgICAgICAgcmV0dXJuIDB4MGU7DQo+ICsgICAgICAgY2FzZSBIRE1JX0FVRF9DSEFOX1RZ UEVfMV8wOg0KPiArICAgICAgIGNhc2UgSERNSV9BVURfQ0hBTl9UWVBFXzJfMDoNCj4gKyAgICAg ICBjYXNlIEhETUlfQVVEX0NIQU5fVFlQRV8zXzFfTFJTOg0KPiArICAgICAgIGNhc2UgSERNSV9B VURfQ0hBTl9UWVBFXzRfMToNCj4gKyAgICAgICBjYXNlIEhETUlfQVVEX0NIQU5fVFlQRV81XzA6 DQo+ICsgICAgICAgY2FzZSBIRE1JX0FVRF9DSEFOX1RZUEVfNF8wX0NMUlM6DQo+ICsgICAgICAg Y2FzZSBIRE1JX0FVRF9DSEFOX1RZUEVfNl8xOg0KPiArICAgICAgIGNhc2UgSERNSV9BVURfQ0hB Tl9UWVBFXzZfMV9DUzoNCj4gKyAgICAgICBjYXNlIEhETUlfQVVEX0NIQU5fVFlQRV82XzFfQ0g6 DQo+ICsgICAgICAgY2FzZSBIRE1JX0FVRF9DSEFOX1RZUEVfNl8xX09IOg0KPiArICAgICAgIGNh c2UgSERNSV9BVURfQ0hBTl9UWVBFXzZfMV9DSFI6DQo+ICsgICAgICAgY2FzZSBIRE1JX0FVRF9D SEFOX1RZUEVfN18wOg0KPiArICAgICAgIGNhc2UgSERNSV9BVURfQ0hBTl9UWVBFXzdfMF9MSF9S SDoNCj4gKyAgICAgICBjYXNlIEhETUlfQVVEX0NIQU5fVFlQRV83XzBfTFNSX1JTUjoNCj4gKyAg ICAgICBjYXNlIEhETUlfQVVEX0NIQU5fVFlQRV83XzBfTENfUkM6DQo+ICsgICAgICAgY2FzZSBI RE1JX0FVRF9DSEFOX1RZUEVfN18wX0xXX1JXOg0KPiArICAgICAgIGNhc2UgSERNSV9BVURfQ0hB Tl9UWVBFXzdfMF9MU0RfUlNEOg0KPiArICAgICAgIGNhc2UgSERNSV9BVURfQ0hBTl9UWVBFXzdf MF9MU1NfUlNTOg0KPiArICAgICAgIGNhc2UgSERNSV9BVURfQ0hBTl9UWVBFXzdfMF9MSFNfUkhT Og0KPiArICAgICAgIGNhc2UgSERNSV9BVURfQ0hBTl9UWVBFXzdfMF9DU19DSDoNCj4gKyAgICAg ICBjYXNlIEhETUlfQVVEX0NIQU5fVFlQRV83XzBfQ1NfT0g6DQo+ICsgICAgICAgY2FzZSBIRE1J X0FVRF9DSEFOX1RZUEVfN18wX0NTX0NIUjoNCj4gKyAgICAgICBjYXNlIEhETUlfQVVEX0NIQU5f VFlQRV83XzBfQ0hfT0g6DQo+ICsgICAgICAgY2FzZSBIRE1JX0FVRF9DSEFOX1RZUEVfN18wX0NI X0NIUjoNCj4gKyAgICAgICBjYXNlIEhETUlfQVVEX0NIQU5fVFlQRV83XzBfT0hfQ0hSOg0KPiAr ICAgICAgIGNhc2UgSERNSV9BVURfQ0hBTl9UWVBFXzdfMF9MU1NfUlNTX0xTUl9SU1I6DQo+ICsg ICAgICAgY2FzZSBIRE1JX0FVRF9DSEFOX1RZUEVfOF8wX0xIX1JIX0NTOg0KPiArICAgICAgIGNh c2UgSERNSV9BVURfQ0hBTl9UWVBFXzdfMToNCj4gKyAgICAgICBjYXNlIEhETUlfQVVEX0NIQU5f VFlQRV83XzFfTEhfUkg6DQo+ICsgICAgICAgY2FzZSBIRE1JX0FVRF9DSEFOX1RZUEVfN18xX0xT Ul9SU1I6DQo+ICsgICAgICAgY2FzZSBIRE1JX0FVRF9DSEFOX1RZUEVfN18xX0xDX1JDOg0KPiAr ICAgICAgIGNhc2UgSERNSV9BVURfQ0hBTl9UWVBFXzdfMV9MV19SVzoNCj4gKyAgICAgICBjYXNl IEhETUlfQVVEX0NIQU5fVFlQRV83XzFfTFNEX1JTRDoNCj4gKyAgICAgICBjYXNlIEhETUlfQVVE X0NIQU5fVFlQRV83XzFfTFNTX1JTUzoNCj4gKyAgICAgICBjYXNlIEhETUlfQVVEX0NIQU5fVFlQ RV83XzFfTEhTX1JIUzoNCj4gKyAgICAgICBjYXNlIEhETUlfQVVEX0NIQU5fVFlQRV83XzFfQ1Nf Q0g6DQo+ICsgICAgICAgY2FzZSBIRE1JX0FVRF9DSEFOX1RZUEVfN18xX0NTX09IOg0KPiArICAg ICAgIGNhc2UgSERNSV9BVURfQ0hBTl9UWVBFXzdfMV9DU19DSFI6DQo+ICsgICAgICAgY2FzZSBI RE1JX0FVRF9DSEFOX1RZUEVfN18xX0NIX09IOg0KPiArICAgICAgIGNhc2UgSERNSV9BVURfQ0hB Tl9UWVBFXzdfMV9DSF9DSFI6DQo+ICsgICAgICAgY2FzZSBIRE1JX0FVRF9DSEFOX1RZUEVfN18x X09IX0NIUjoNCj4gKyAgICAgICBjYXNlIEhETUlfQVVEX0NIQU5fVFlQRV83XzFfTFNTX1JTU19M U1JfUlNSOg0KPiArICAgICAgIGRlZmF1bHQ6DQo+ICsgICAgICAgICAgICAgICByZXR1cm4gMDsN Cj4gKyAgICAgICB9DQo+ICsNCj4gKyAgICAgICByZXR1cm4gMDsNCj4gK30NCj4gKw0KPiArc3Rh dGljIGlubGluZSB2b2lkIG10a19oZG1pX3YyX2h3X2kyc19jaF9zd2FwKHN0cnVjdCBtdGtfaGRt aSAqaGRtaSwgdW5zaWduZWQgY2hhciBzd2FwYml0KQ0KPiArew0KDQpzd2FwYml0IGlzIGNvbnN0 YW50LiBTbyBkcm9wIGl0Lg0KDQo+ICsgICAgICAgcmVnbWFwX3VwZGF0ZV9iaXRzKGhkbWktPnJl Z3MsIEFJUF9TUERJRl9DVFJMLCBNQVhfMlVJX0kyU19ISV9XUklURSwNCj4gKyAgICAgICAgICAg ICAgICAgICAgICAgICAgRklFTERfUFJFUChNQVhfMlVJX0kyU19ISV9XUklURSwgc3dhcGJpdCkp Ow0KPiArfQ0KPiArDQo+ICtzdGF0aWMgdm9pZCBtdGtfaGRtaV9oYnJfY29uZmlnKHN0cnVjdCBt dGtfaGRtaSAqaGRtaSwgYm9vbCBkc2RfYnlwYXNzKQ0KPiArew0KPiArICAgICAgIGNvbnN0IHUz MiBoYnJfbWFzayA9IFNQRElGX0VOIHwgRFNEX0VOIHwgSEJSQV9PTjsNCj4gKw0KPiArICAgICAg IGlmIChkc2RfYnlwYXNzKSB7DQo+ICsgICAgICAgICAgICAgICByZWdtYXBfdXBkYXRlX2JpdHMo aGRtaS0+cmVncywgQUlQX0NUUkwsIGhicl9tYXNrLCBIQlJBX09OKTsNCj4gKyAgICAgICAgICAg ICAgIHJlZ21hcF9zZXRfYml0cyhoZG1pLT5yZWdzLCBBSVBfQ1RSTCwgSTJTX0VOKTsNCj4gKyAg ICAgICB9IGVsc2Ugew0KPiArICAgICAgICAgICAgICAgcmVnbWFwX3VwZGF0ZV9iaXRzKGhkbWkt PnJlZ3MsIEFJUF9DVFJMLCBoYnJfbWFzaywgU1BESUZfRU4pOw0KPiArICAgICAgICAgICAgICAg cmVnbWFwX3NldF9iaXRzKGhkbWktPnJlZ3MsIEFJUF9DVFJMLCBTUERJRl9JTlRFUk5BTF9NT0RV TEUpOw0KPiArICAgICAgICAgICAgICAgcmVnbWFwX3NldF9iaXRzKGhkbWktPnJlZ3MsIEFJUF9D VFJMLCBIQlJfRlJPTV9TUERJRik7DQo+ICsgICAgICAgICAgICAgICByZWdtYXBfc2V0X2JpdHMo aGRtaS0+cmVncywgQUlQX0NUUkwsIENUU19DQUxfTjQpOw0KPiArICAgICAgIH0NCj4gK30NCj4g Kw0KPiArc3RhdGljIGlubGluZSB2b2lkIG10a19oZG1pX3YyX2h3X3NwZGlmX2NvbmZpZyhzdHJ1 Y3QgbXRrX2hkbWkgKmhkbWkpDQo+ICt7DQo+ICsgICAgICAgcmVnbWFwX2NsZWFyX2JpdHMoaGRt aS0+cmVncywgQUlQX1NQRElGX0NUUkwsIFdSXzFVSV9MT0NLKTsNCj4gKyAgICAgICByZWdtYXBf Y2xlYXJfYml0cyhoZG1pLT5yZWdzLCBBSVBfU1BESUZfQ1RSTCwgRlNfT1ZFUlJJREVfV1JJVEUp Ow0KPiArICAgICAgIHJlZ21hcF9jbGVhcl9iaXRzKGhkbWktPnJlZ3MsIEFJUF9TUERJRl9DVFJM LCBXUl8yVUlfTE9DSyk7DQo+ICsNCj4gKyAgICAgICByZWdtYXBfdXBkYXRlX2JpdHMoaGRtaS0+ cmVncywgQUlQX1NQRElGX0NUUkwsIE1BWF8xVUlfV1JJVEUsDQo+ICsgICAgICAgICAgICAgICAg ICAgICAgICAgIEZJRUxEX1BSRVAoTUFYXzFVSV9XUklURSwgNCkpOw0KPiArICAgICAgIHJlZ21h cF91cGRhdGVfYml0cyhoZG1pLT5yZWdzLCBBSVBfU1BESUZfQ1RSTCwgTUFYXzJVSV9TUERJRl9X UklURSwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgRklFTERfUFJFUChNQVhfMlVJX1NQ RElGX1dSSVRFLCA5KSk7DQo+ICsgICAgICAgcmVnbWFwX3VwZGF0ZV9iaXRzKGhkbWktPnJlZ3Ms IEFJUF9TUERJRl9DVFJMLCBBVURfRVJSX1RIUkVTSCwNCj4gKyAgICAgICAgICAgICAgICAgICAg ICAgICAgRklFTERfUFJFUChBVURfRVJSX1RIUkVTSCwgNCkpOw0KPiArDQo+ICsgICAgICAgcmVn bWFwX3NldF9iaXRzKGhkbWktPnJlZ3MsIEFJUF9TUERJRl9DVFJMLCBJMlMyRFNEX0VOKTsNCj4g K30NCj4gKw0KPiArc3RhdGljIHZvaWQgbXRrX2hkbWlfdjJfYXVkX3NldF9pbnB1dChzdHJ1Y3Qg bXRrX2hkbWkgKmhkbWkpDQo+ICt7DQo+ICsgICAgICAgc3RydWN0IGhkbWlfYXVkaW9fcGFyYW0g KmF1ZF9wYXJhbSA9ICZoZG1pLT5hdWRfcGFyYW07DQo+ICsgICAgICAgc3RydWN0IGhkbWlfY29k ZWNfcGFyYW1zICpjb2RlY19wYXJhbXMgPSAmYXVkX3BhcmFtLT5jb2RlY19wYXJhbXM7DQo+ICsg ICAgICAgdTggaTJzX2NoX21hcDsNCj4gKyAgICAgICB1MzIgb3V0X2NoX21hcDsNCj4gKw0KPiAr ICAgICAgIC8qIFdyaXRlIHRoZSBkZWZhdWx0IG91dHB1dCBjaGFubmVsIG1hcC4gQ0gwIG1hcHMg dG8gU0QwLCBDSDEgbWFwcyB0byBTRDEsIGV0YyAqLw0KPiArICAgICAgIG91dF9jaF9tYXAgPSBt dGtfaGRtaV92Ml9hdWRfb3V0cHV0X2NoYW5uZWxfbWFwKDAsIDEsIDIsIDMsIDQsIDUsIDYsIDcp Ow0KPiArICAgICAgIHJlZ21hcF93cml0ZShoZG1pLT5yZWdzLCBUT1BfQVVEX01BUCwgb3V0X2No X21hcCk7DQo+ICsNCj4gKyAgICAgICByZWdtYXBfdXBkYXRlX2JpdHMoaGRtaS0+cmVncywgQUlQ X1NQRElGX0NUUkwsIE1BWF8yVUlfSTJTX0hJX1dSSVRFLCAwKTsNCj4gKyAgICAgICByZWdtYXBf Y2xlYXJfYml0cyhoZG1pLT5yZWdzLCBBSVBfQ1RSTCwNCj4gKyAgICAgICAgICAgICAgICAgICAg ICAgICBTUERJRl9FTiB8IERTRF9FTiB8IEhCUkFfT04gfCBDVFNfQ0FMX040IHwNCj4gKyAgICAg ICAgICAgICAgICAgICAgICAgICBIQlJfRlJPTV9TUERJRiB8IFNQRElGX0lOVEVSTkFMX01PRFVM RSk7DQo+ICsgICAgICAgcmVnbWFwX2NsZWFyX2JpdHMoaGRtaS0+cmVncywgQUlQX1RYQ1RSTCwg RFNEX01VVEVfRU4gfCBBVURfTEFZT1VUXzEpOw0KPiArDQo+ICsgICAgICAgaWYgKGF1ZF9wYXJh bS0+YXVkX2lucHV0X3R5cGUgPT0gSERNSV9BVURfSU5QVVRfSTJTKSB7DQo+ICsgICAgICAgICAg ICAgICBzd2l0Y2ggKGF1ZF9wYXJhbS0+YXVkX2NvZGVjKSB7DQo+ICsgICAgICAgICAgICAgICBj YXNlIEhETUlfQVVESU9fQ09ESU5HX1RZUEVfRFRTX0hEOg0KPiArICAgICAgICAgICAgICAgY2Fz ZSBIRE1JX0FVRElPX0NPRElOR19UWVBFX01MUDoNCj4gKyAgICAgICAgICAgICAgICAgICAgICAg bXRrX2hkbWlfaTJzX2RhdGFfZm10KGhkbWksIGF1ZF9wYXJhbS0+YXVkX2kyc19mbXQpOw0KPiAr ICAgICAgICAgICAgICAgICAgICAgICBtdGtfaGRtaV9oYnJfY29uZmlnKGhkbWksIHRydWUpOw0K PiArICAgICAgICAgICAgICAgICAgICAgICBicmVhazsNCj4gKyAgICAgICAgICAgICAgIGNhc2Ug SERNSV9BVURJT19DT0RJTkdfVFlQRV9EU0Q6DQo+ICsgICAgICAgICAgICAgICAgICAgICAgIG10 a19oZG1pX2F1ZGlvX2RzZF9jb25maWcoaGRtaSwgY29kZWNfcGFyYW1zLT5jaGFubmVscywgMCk7 DQo+ICsgICAgICAgICAgICAgICAgICAgICAgIG10a19oZG1pX3YyX2h3X2kyc19jaF9tYXBwaW5n KGhkbWksIGNvZGVjX3BhcmFtcy0+Y2hhbm5lbHMsIDEpOw0KPiArICAgICAgICAgICAgICAgICAg ICAgICBicmVhazsNCj4gKyAgICAgICAgICAgICAgIGRlZmF1bHQ6DQo+ICsgICAgICAgICAgICAg ICAgICAgICAgIG10a19oZG1pX2kyc19kYXRhX2ZtdChoZG1pLCBhdWRfcGFyYW0tPmF1ZF9pMnNf Zm10KTsNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgbXRrX2hkbWlfaTJzX3Nja19lZGdlX3Jp c2UoaGRtaSwgdHJ1ZSk7DQo+ICsgICAgICAgICAgICAgICAgICAgICAgIG10a19oZG1pX2kyc19j Yml0X29yZGVyKGhkbWksIENCSVRfT1JERVJfU0FNRSk7DQo+ICsgICAgICAgICAgICAgICAgICAg ICAgIG10a19oZG1pX2kyc192Yml0KGhkbWksIDApOyAvKiBQQ00gZGF0YSAqLw0KPiArICAgICAg ICAgICAgICAgICAgICAgICBtdGtfaGRtaV9pMnNfZGF0YV9kaXJlY3Rpb24oaGRtaSwgMCk7IC8q IE1TQiBmaXJzdCAqLw0KPiArICAgICAgICAgICAgICAgICAgICAgICBtdGtfaGRtaV92Ml9od19h dWRpb190eXBlKGhkbWksIEhETUlfQVVEX0lOUFVUX0kyUyk7DQo+ICsgICAgICAgICAgICAgICAg ICAgICAgIGkyc19jaF9tYXAgPSBtdGtfaGRtaV92Ml9nZXRfaTJzX2NoX21hcHBpbmcoaGRtaSwN Cj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXVkX3Bh cmFtLT5hdWRfaW5wdXRfY2hhbl90eXBlKTsNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgbXRr X2hkbWlfdjJfaHdfaTJzX2NoX21hcHBpbmcoaGRtaSwgY29kZWNfcGFyYW1zLT5jaGFubmVscywg aTJzX2NoX21hcCk7DQo+ICsgICAgICAgICAgICAgICAgICAgICAgIG10a19oZG1pX3YyX2h3X2ky c19jaF9zd2FwKGhkbWksIE1BWF8yVUlfSTJTX0xGRV9DQ19TV0FQKTsNCj4gKyAgICAgICAgICAg ICAgIH0NCj4gKyAgICAgICB9IGVsc2Ugew0KPiArICAgICAgICAgICAgICAgaWYgKGNvZGVjX3Bh cmFtcy0+c2FtcGxlX3JhdGUgPT0gNzY4MDAwICYmDQo+ICsgICAgICAgICAgICAgICAgICAgKGF1 ZF9wYXJhbS0+YXVkX2NvZGVjID09IEhETUlfQVVESU9fQ09ESU5HX1RZUEVfRFRTX0hEIHx8DQo+ ICsgICAgICAgICAgICAgICAgICAgIGF1ZF9wYXJhbS0+YXVkX2NvZGVjID09IEhETUlfQVVESU9f Q09ESU5HX1RZUEVfTUxQKSkgew0KPiArICAgICAgICAgICAgICAgICAgICAgICBtdGtfaGRtaV9o YnJfY29uZmlnKGhkbWksIGZhbHNlKTsNCj4gKyAgICAgICAgICAgICAgIH0gZWxzZSB7DQo+ICsg ICAgICAgICAgICAgICAgICAgICAgIG10a19oZG1pX3YyX2h3X3NwZGlmX2NvbmZpZyhoZG1pKTsN Cj4gKyAgICAgICAgICAgICAgICAgICAgICAgbXRrX2hkbWlfdjJfaHdfaTJzX2NoX21hcHBpbmco aGRtaSwgMiwgMCk7DQo+ICsgICAgICAgICAgICAgICB9DQo+ICsgICAgICAgfQ0KPiArfQ0KPiAr DQo+ICtzdGF0aWMgdm9pZCBtdGtfaGRtaV92Ml9hdWRfc2V0X3N3X25jdHMoc3RydWN0IG10a19o ZG1pICpoZG1pLA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ry dWN0IGRybV9kaXNwbGF5X21vZGUgKmRpc3BsYXlfbW9kZSkNCj4gK3sNCj4gKyAgICAgICBtdGtf aGRtaV92Ml9od19uY3RzX2VuYWJsZShoZG1pLCBmYWxzZSk7DQoNClRoaXMgZnVuY3Rpb24gaXMg Y2FsbGVkIG9ubHkgYnkgbXRrX2hkbWlfdjJfYXVkX291dHB1dF9jb25maWcoKSwNCmFuZCBtdGtf aGRtaV92Ml9hdWRfb3V0cHV0X2NvbmZpZygpIGNhbGxzIG10a19oZG1pX3YyX2h3X25jdHNfZW5h YmxlKGhkbWksIHRydWUpOw0Kc28gSSB0aGluayB0aGlzIG10a19oZG1pX3YyX2h3X25jdHNfZW5h YmxlKGhkbWksIGZhbHNlKSBzaG91bGQgYWxzbyBwbGFjZSBpbiBtdGtfaGRtaV92Ml9hdWRfb3V0 cHV0X2NvbmZpZygpLg0KQWZ0ZXIgdGhpcywgdGhpcyBmdW5jdGlvbiBzZWVtcyBkb2VzIG9ubHkg b25lIHRoaW5nIGFuZCBtdGtfaGRtaV92Ml9hdWRfb3V0cHV0X2NvbmZpZygpIHNob3VsZCBkaXJl Y3RseSBjYWxsIG10a19oZG1pX3YyX2h3X2F1ZF9zZXRfbmN0cygpIGFuZCBkcm9wIHRoaXMgZnVu Y3Rpb24uDQoNCj4gKyAgICAgICBtdGtfaGRtaV92Ml9od19hdWRfc2V0X25jdHMoaGRtaSwgaGRt aS0+YXVkX3BhcmFtLmNvZGVjX3BhcmFtcy5zYW1wbGVfcmF0ZSwNCj4gKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgZGlzcGxheV9tb2RlLT5jbG9jayk7DQo+ICt9DQo+ICsNCj4gK3N0 YXRpYyBpbmxpbmUgdm9pZCBtdGtfaGRtaV92Ml9od19hdWRpb19pbnB1dF9lbmFibGUoc3RydWN0 IG10a19oZG1pICpoZG1pLCBib29sIGVuYSkNCj4gK3sNCg0KZW5hIGlzIGFsd2F5cyB0cnVlLCBz byBkcm9wIGl0Lg0KDQo+ICsgICAgICAgaWYgKGVuYSkNCj4gKyAgICAgICAgICAgICAgIHJlZ21h cF9zZXRfYml0cyhoZG1pLT5yZWdzLCBBSVBfQ1RSTCwgQVVEX0lOX0VOKTsNCj4gKyAgICAgICBl bHNlDQo+ICsgICAgICAgICAgICAgICByZWdtYXBfY2xlYXJfYml0cyhoZG1pLT5yZWdzLCBBSVBf Q1RSTCwgQVVEX0lOX0VOKTsNCj4gK30NCj4gKw0KPiArc3RhdGljIHZvaWQgbXRrX2hkbWlfdjJf YWlwX2N0cmxfaW5pdChzdHJ1Y3QgbXRrX2hkbWkgKmhkbWkpDQo+ICt7DQo+ICsgICAgICAgcmVn bWFwX3NldF9iaXRzKGhkbWktPnJlZ3MsIEFJUF9DVFJMLA0KPiArICAgICAgICAgICAgICAgICAg ICAgICBBVURfU0VMX09XUlQgfCBOT19NQ0xLX0NUU0dFTl9TRUwgfCBNQ0xLX0VOIHwgQ1RTX1JF UV9FTik7DQo+ICsgICAgICAgcmVnbWFwX2NsZWFyX2JpdHMoaGRtaS0+cmVncywgQUlQX1RQSV9D VFJMLCBUUElfQVVESU9fTE9PS1VQX0VOKTsNCj4gK30NCj4gKw0KPiArc3RhdGljIHZvaWQgbXRr X2hkbWlfdjJfYXVkaW9fcmVzZXQoc3RydWN0IG10a19oZG1pICpoZG1pLCBib29sIHJlc2V0KQ0K PiArew0KPiArICAgICAgIGNvbnN0IHUzMiBhcnN0X2JpdHMgPSBSU1Q0QVVESU8gfCBSU1Q0QVVE SU9fRklGTyB8IFJTVDRBVURJT19BQ1I7DQo+ICsNCj4gKyAgICAgICBpZiAocmVzZXQpDQo+ICsg ICAgICAgICAgICAgICByZWdtYXBfc2V0X2JpdHMoaGRtaS0+cmVncywgQUlQX1RYQ1RSTCwgYXJz dF9iaXRzKTsNCj4gKyAgICAgICBlbHNlDQo+ICsgICAgICAgICAgICAgICByZWdtYXBfY2xlYXJf Yml0cyhoZG1pLT5yZWdzLCBBSVBfVFhDVFJMLCBhcnN0X2JpdHMpOw0KPiArfQ0KPiArDQo+ICtz dGF0aWMgdm9pZCBtdGtfaGRtaV92Ml9hdWRfb3V0cHV0X2NvbmZpZyhzdHJ1Y3QgbXRrX2hkbWkg KmhkbWksDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVj dCBkcm1fZGlzcGxheV9tb2RlICpkaXNwbGF5X21vZGUpDQo+ICt7DQo+ICsgICAgICAgbXRrX2hk bWlfdjJfaHdfYXVkX211dGUoaGRtaSwgdHJ1ZSk7DQo+ICsgICAgICAgbXRrX2hkbWlfdjJfaHdf YXVkX2VuYWJsZShoZG1pLCBmYWxzZSk7DQo+ICsgICAgICAgbXRrX2hkbWlfdjJfYXVkaW9fcmVz ZXQoaGRtaSwgdHJ1ZSk7DQo+ICsgICAgICAgbXRrX2hkbWlfdjJfYWlwX2N0cmxfaW5pdChoZG1p KTsNCj4gKyAgICAgICBtdGtfaGRtaV92Ml9hdWRfc2V0X2lucHV0KGhkbWkpOw0KPiArICAgICAg IG10a19oZG1pX3YyX2h3X2F1ZF9zZXRfY2hhbm5lbF9zdGF0dXMoaGRtaSk7DQo+ICsgICAgICAg bXRrX2hkbWlfdjJfc2V0dXBfYXVkaW9faW5mb2ZyYW1lKGhkbWkpOw0KPiArICAgICAgIG10a19o ZG1pX3YyX2h3X2F1ZGlvX2lucHV0X2VuYWJsZShoZG1pLCB0cnVlKTsNCj4gKyAgICAgICBtdGtf aGRtaV92Ml9hdWRpb19yZXNldChoZG1pLCBmYWxzZSk7DQo+ICsgICAgICAgbXRrX2hkbWlfdjJf YXVkX3NldF9zd19uY3RzKGhkbWksIGRpc3BsYXlfbW9kZSk7DQo+ICsNCj4gKyAgICAgICAvKiBX YWl0IGZvciB0aGUgSFcgdG8gYXBwbHkgc2V0dGluZ3MgKi8NCj4gKyAgICAgICB1c2xlZXBfcmFu Z2UoMjUsIDUwKTsNCj4gKw0KPiArICAgICAgIG10a19oZG1pX3YyX2h3X25jdHNfZW5hYmxlKGhk bWksIHRydWUpOw0KPiArICAgICAgIG10a19oZG1pX3YyX2h3X2F1ZF9lbmFibGUoaGRtaSwgdHJ1 ZSk7DQoNCkluIGF1ZGlvX3N0YXJ0dXAoKSBhbmQgYXVkaW9fc2h1dGRvd24oKSBhbHNvIGNhbGwg bXRrX2hkbWlfdjJfaHdfYXVkX2VuYWJsZSgpLA0KYW5kIHdvdWxkIHRoZW0gY29uZmxpY3Q/DQpJ biB2MSBhdWRpbyBlbmFibGUvZGlzYWJsZSBpcyBkb25lIGluIGF1ZGlvX3N0YXJ0dXAoKSBhbmQg YXVkaW9fc2h1dGRvd24oKS4NCk1heWJlIHJlbW92aW5nIGF1ZGlvIGVuYWJsZS9kaXNhYmxlIGhl cmUgd291bGQgcHJldmVudCBjb25mbGljdC4NCg0KPiArICAgICAgIG10a19oZG1pX3YyX2h3X2F1 ZF9tdXRlKGhkbWksIGZhbHNlKTsNCj4gK30NCj4gKw0KPiArc3RhdGljIHZvaWQgbXRrX2hkbWlf djJfY2hhbmdlX3ZpZGVvX3Jlc29sdXRpb24oc3RydWN0IG10a19oZG1pICpoZG1pKQ0KPiArew0K PiArICAgICAgIG10a19oZG1pX3YyX2h3X3Jlc2V0KGhkbWkpOw0KPiArICAgICAgIG10a19oZG1p X3YyX3NldF9zd19ocGQoaGRtaSwgdHJ1ZSk7DQo+ICsgICAgICAgdWRlbGF5KDIpOw0KPiArDQo+ ICsgICAgICAgcmVnbWFwX3dyaXRlKGhkbWktPnJlZ3MsIEhEQ1BfVE9QX0NUUkwsIDApOw0KPiAr DQo+ICsgICAgICAgLyogRW5hYmxlIEhEQ1AgcmVhdXRoZW50aWNhdGlvbiBpbnRlcnJ1cHQgKi8N Cj4gKyAgICAgICByZWdtYXBfc2V0X2JpdHMoaGRtaS0+cmVncywgVE9QX0lOVF9FTkFCTEUwMCwg SERDUDJYX1JYX1JFQVVUSF9SRVFfRERDTV9JTlQpOw0KDQpJbiBpc3IsIEkgZG9lcyBub3Qgc2Vl IGFueSB0aGluZyBhYm91dCByZWF1dGhlbnRpY2F0aW9uLCBzbyB0aGlzIGlzIG5vdCBuZWNlc3Nh cnkgdG8gZW5hYmxlIHRoaXMgaW50ZXJydXB0Lg0KDQo+ICsNCj4gKyAgICAgICAvKiBFbmFibGUg aG90cGx1ZyBhbmQgcG9yZCBpbnRlcnJ1cHRzICovDQo+ICsgICAgICAgbXRrX2hkbWlfdjJfZW5h YmxlX2hwZF9wb3JkX2lycShoZG1pLCB0cnVlKTsNCj4gKw0KPiArICAgICAgIC8qIEZvcmNlIGVu YWJsaW5nIEhEQ1AgSFBEICovDQo+ICsgICAgICAgcmVnbWFwX3NldF9iaXRzKGhkbWktPnJlZ3Ms IEhEQ1AyWF9DVFJMXzAsIEhEQ1AyWF9IUERfT1ZSKTsNCj4gKyAgICAgICByZWdtYXBfc2V0X2Jp dHMoaGRtaS0+cmVncywgSERDUDJYX0NUUkxfMCwgSERDUDJYX0hQRF9TVyk7DQo+ICsNCj4gKyAg ICAgICAvKiBTZXQgOCBiaXRzIHBlciBwaXhlbCAqLw0KPiArICAgICAgIHJlZ21hcF91cGRhdGVf Yml0cyhoZG1pLT5yZWdzLCBUT1BfQ0ZHMDAsIFRNRFNfUEFDS19NT0RFLA0KPiArICAgICAgICAg ICAgICAgICAgICAgICAgICBGSUVMRF9QUkVQKFRNRFNfUEFDS19NT0RFLCBUTURTX1BBQ0tfTU9E RV84QlBQKSk7DQo+ICsgICAgICAgLyogRGlzYWJsZSBnZW5lcmF0aW5nIGRlZXBjb2xvciBwYWNr ZXRzICovDQo+ICsgICAgICAgcmVnbWFwX2NsZWFyX2JpdHMoaGRtaS0+cmVncywgVE9QX0NGRzAw LCBERUVQQ09MT1JfUEtUX0VOKTsNCj4gKyAgICAgICAvKiBEaXNhYmxlIGFkZGluZyBkZWVwY29s b3IgaW5mb3JtYXRpb24gdG8gdGhlIGdlbmVyYWwgcGFja2V0ICovDQo+ICsgICAgICAgcmVnbWFw X2NsZWFyX2JpdHMoaGRtaS0+cmVncywgVE9QX01JU0NfQ1RMUiwgREVFUF9DT0xPUl9BREQpOw0K PiArDQo+ICsgICAgICAgaWYgKGhkbWktPmN1cnJfY29ubi0+ZGlzcGxheV9pbmZvLmlzX2hkbWkp DQo+ICsgICAgICAgICAgICAgICByZWdtYXBfc2V0X2JpdHMoaGRtaS0+cmVncywgVE9QX0NGRzAw LCBIRE1JX01PREVfSERNSSk7DQo+ICsgICAgICAgZWxzZQ0KPiArICAgICAgICAgICAgICAgcmVn bWFwX2NsZWFyX2JpdHMoaGRtaS0+cmVncywgVE9QX0NGRzAwLCBIRE1JX01PREVfSERNSSk7DQo+ ICsNCj4gKyAgICAgICB1ZGVsYXkoNSk7DQo+ICsgICAgICAgbXRrX2hkbWlfdjJfaHdfdmlkX211 dGUoaGRtaSwgdHJ1ZSk7DQo+ICsgICAgICAgbXRrX2hkbWlfdjJfaHdfYXVkX211dGUoaGRtaSwg dHJ1ZSk7DQo+ICsgICAgICAgbXRrX2hkbWlfdjJfaHdfYXZfbXV0ZShoZG1pLCBmYWxzZSk7DQoN CkknbSBjb25mdXNlZCB3aXRoIHRoZXNlIHRocmVlIHN0YXRlbWVudC4NCm10a19oZG1pX3YyX2h3 X3ZpZF9tdXRlKHRydWUpIHdvdWxkIG11dGUgdmlkZW8uDQptdGtfaGRtaV92Ml9od19hdWRfbXV0 ZShoZG1pLCB0cnVlKSB3b3VsZCBtdXRlIGF1ZGlvLg0KbXRrX2hkbWlfdjJfaHdfYXZfbXV0ZSho ZG1pLCBmYWxzZSkgd291bGQgbGV0IHZpZGVvIGFuZCBhdWRpbyB1bm11dGU/DQpUaGlzIGxvb2tz IHdlaXJkLg0KQWRkIGNvbW1lbnQgdG8gZGVzY3JpYmUgd2h5IGRvaW5nIHRoaXMuDQoNCj4gKw0K PiArICAgICAgIHJlZ21hcF91cGRhdGVfYml0cyhoZG1pLT5yZWdzLCBUT1BfQ0ZHMDEsDQo+ICsg ICAgICAgICAgICAgICAgICAgICAgICAgIE5VTExfUEtUX1ZTWU5DX0hJR0hfRU4gfCBOVUxMX1BL VF9FTiwgTlVMTF9QS1RfVlNZTkNfSElHSF9FTik7DQo+ICsgICAgICAgdXNsZWVwX3JhbmdlKDEw MCwgMTUwKTsNCj4gKw0KPiArICAgICAgIC8qIEVuYWJsZSBzY3JhbWJsaW5nIGlmIHRtZHMgY2xv Y2sgaXMgMzQwTUh6IG9yIG1vcmUgKi8NCj4gKyAgICAgICBtdGtfaGRtaV92Ml9lbmFibGVfc2Ny YW1ibGluZyhoZG1pLCBoZG1pLT5tb2RlLmNsb2NrID49IDM0MCAqIEtJTE8pOw0KPiArDQo+ICsg ICAgICAgLyogRGlzYWJsZSBZVVY0MjAgZG93bnNhbXBsaW5nICovDQo+ICsgICAgICAgbXRrX2hk bWlfeXV2NDIwX2Rvd25zYW1wbGluZyhoZG1pLCBmYWxzZSk7DQo+ICt9DQo+ICsNCj4gK3N0YXRp YyB2b2lkIG10a19oZG1pX3YyX291dHB1dF9zZXRfZGlzcGxheV9tb2RlKHN0cnVjdCBtdGtfaGRt aSAqaGRtaSwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGUpDQo+ICt7DQo+ICsgICAgICAgdW5pb24g cGh5X2NvbmZpZ3VyZV9vcHRzIG9wdHMgPSB7DQo+ICsgICAgICAgICAgICAgICAuZHAgPSB7IC5s aW5rX3JhdGUgPSBoZG1pLT5tb2RlLmNsb2NrICogS0lMTyB9DQo+ICsgICAgICAgfTsNCj4gKyAg ICAgICBpbnQgcmV0Ow0KPiArDQo+ICsgICAgICAgcmV0ID0gcGh5X2NvbmZpZ3VyZShoZG1pLT5w aHksICZvcHRzKTsNCj4gKyAgICAgICBpZiAocmV0KQ0KPiArICAgICAgICAgICAgICAgZGV2X2Vy cihoZG1pLT5kZXYsICJTZXR0aW5nIGNsb2NrPSVkIGZhaWxlZDogJWQiLCBtb2RlLT5jbG9jaywg cmV0KTsNCj4gKw0KPiArICAgICAgIG10a19oZG1pX3YyX2NoYW5nZV92aWRlb19yZXNvbHV0aW9u KGhkbWkpOw0KPiArICAgICAgIG10a19oZG1pX3YyX2F1ZF9vdXRwdXRfY29uZmlnKGhkbWksIG1v ZGUpOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgaW50IG10a19oZG1pX3YyX2Nsa19lbmFibGUoc3Ry dWN0IG10a19oZG1pICpoZG1pKQ0KPiArew0KPiArICAgICAgIGludCByZXQ7DQo+ICsNCj4gKyAg ICAgICByZXQgPSBjbGtfcHJlcGFyZV9lbmFibGUoaGRtaS0+Y2xrW01US19IRE1JX1YyX0NMS19I RENQX1NFTF0pOw0KPiArICAgICAgIGlmIChyZXQpDQo+ICsgICAgICAgICAgICAgICByZXR1cm4g cmV0Ow0KPiArDQo+ICsgICAgICAgcmV0ID0gY2xrX3ByZXBhcmVfZW5hYmxlKGhkbWktPmNsa1tN VEtfSERNSV9WMl9DTEtfSERDUF8yNE1fU0VMXSk7DQo+ICsgICAgICAgaWYgKHJldCkNCj4gKyAg ICAgICAgICAgICAgIGdvdG8gZGlzYWJsZV9oZGNwX2NsazsNCj4gKw0KPiArICAgICAgIHJldCA9 IGNsa19wcmVwYXJlX2VuYWJsZShoZG1pLT5jbGtbTVRLX0hETUlfVjJfQ0xLX0hETUlfQVBCX1NF TF0pOw0KPiArICAgICAgIGlmIChyZXQpDQo+ICsgICAgICAgICAgICAgICBnb3RvIGRpc2FibGVf aGRjcF8yNG1fY2xrOw0KPiArDQo+ICsgICAgICAgcmV0ID0gY2xrX3ByZXBhcmVfZW5hYmxlKGhk bWktPmNsa1tNVEtfSERNSV9WMl9DTEtfVlBQX1NQTElUX0hETUldKTsNCj4gKyAgICAgICBpZiAo cmV0KQ0KPiArICAgICAgICAgICAgICAgZ290byBkaXNhYmxlX2J1c19jbGs7DQo+ICsNCj4gKyAg ICAgICByZXR1cm4gMDsNCj4gKw0KPiArZGlzYWJsZV9idXNfY2xrOg0KPiArICAgICAgIGNsa19k aXNhYmxlX3VucHJlcGFyZShoZG1pLT5jbGtbTVRLX0hETUlfVjJfQ0xLX0hETUlfQVBCX1NFTF0p Ow0KPiArZGlzYWJsZV9oZGNwXzI0bV9jbGs6DQo+ICsgICAgICAgY2xrX2Rpc2FibGVfdW5wcmVw YXJlKGhkbWktPmNsa1tNVEtfSERNSV9WMl9DTEtfSERDUF8yNE1fU0VMXSk7DQo+ICtkaXNhYmxl X2hkY3BfY2xrOg0KPiArICAgICAgIGNsa19kaXNhYmxlX3VucHJlcGFyZShoZG1pLT5jbGtbTVRL X0hETUlfVjJfQ0xLX0hEQ1BfU0VMXSk7DQo+ICsNCj4gKyAgICAgICByZXR1cm4gcmV0Ow0KPiAr fQ0KPiArDQo+ICtzdGF0aWMgdm9pZCBtdGtfaGRtaV92Ml9jbGtfZGlzYWJsZShzdHJ1Y3QgbXRr X2hkbWkgKmhkbWkpDQo+ICt7DQo+ICsgICAgICAgY2xrX2Rpc2FibGVfdW5wcmVwYXJlKGhkbWkt PmNsa1tNVEtfSERNSV9WMl9DTEtfVlBQX1NQTElUX0hETUldKTsNCj4gKyAgICAgICBjbGtfZGlz YWJsZV91bnByZXBhcmUoaGRtaS0+Y2xrW01US19IRE1JX1YyX0NMS19IRE1JX0FQQl9TRUxdKTsN Cj4gKyAgICAgICBjbGtfZGlzYWJsZV91bnByZXBhcmUoaGRtaS0+Y2xrW01US19IRE1JX1YyX0NM S19IRENQXzI0TV9TRUxdKTsNCj4gKyAgICAgICBjbGtfZGlzYWJsZV91bnByZXBhcmUoaGRtaS0+ Y2xrW01US19IRE1JX1YyX0NMS19IRENQX1NFTF0pOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgdm9p ZCBtdGtfaGRtaV9ocGRfZXZlbnQoZW51bSBoZG1pX2hwZF9zdGF0ZSBocGQsIHN0cnVjdCBkZXZp Y2UgKmRldikNCj4gK3sNCj4gKyAgICAgICBzdHJ1Y3QgbXRrX2hkbWkgKmhkbWkgPSBkZXZfZ2V0 X2RydmRhdGEoZGV2KTsNCj4gKw0KPiArICAgICAgIGlmIChoZG1pICYmIGhkbWktPmJyaWRnZS5l bmNvZGVyICYmIGhkbWktPmJyaWRnZS5lbmNvZGVyLT5kZXYpDQo+ICsgICAgICAgICAgICAgICBk cm1faGVscGVyX2hwZF9pcnFfZXZlbnQoaGRtaS0+YnJpZGdlLmVuY29kZXItPmRldik7DQoNClRo aXMgZnVuY3Rpb24ganVzdCBkbyBvbmUgdGhpbmcgYW5kIGlzIGNhbGxlZCBvbmx5IGJ5IGlzciB0 aHJlYWQsIHNvIG1lcmdlIHRoaXMgZnVuY3Rpb24gaW50byBpc3IgdGhyZWFkLg0KDQo+ICt9DQo+ ICsNCj4gK3N0YXRpYyBlbnVtIGhkbWlfaHBkX3N0YXRlIG10a19oZG1pX3YyX2hwZF9wb3JkX3N0 YXR1cyhzdHJ1Y3QgbXRrX2hkbWkgKmhkbWkpDQo+ICt7DQo+ICsgICAgICAgdTggaHBkX3Bpbl9z dGEsIHBvcmRfcGluX3N0YTsNCj4gKyAgICAgICB1MzIgaHBkX3N0YXR1czsNCj4gKw0KPiArICAg ICAgIHJlZ21hcF9yZWFkKGhkbWktPnJlZ3MsIEhQRF9ERENfU1RBVFVTLCAmaHBkX3N0YXR1cyk7 DQo+ICsgICAgICAgaHBkX3Bpbl9zdGEgPSBGSUVMRF9HRVQoSFBEX1BJTl9TVEEsIGhwZF9zdGF0 dXMpOw0KPiArICAgICAgIHBvcmRfcGluX3N0YSA9IEZJRUxEX0dFVChQT1JEX1BJTl9TVEEsIGhw ZF9zdGF0dXMpOw0KPiArDQo+ICsgICAgICAgaWYgKGhwZF9waW5fc3RhICYmIHBvcmRfcGluX3N0 YSkNCj4gKyAgICAgICAgICAgICAgIHJldHVybiBIRE1JX1BMVUdfSU5fQU5EX1NJTktfUE9XRVJf T047DQo+ICsgICAgICAgZWxzZSBpZiAoaHBkX3Bpbl9zdGEpDQo+ICsgICAgICAgICAgICAgICBy ZXR1cm4gSERNSV9QTFVHX0lOX09OTFk7DQoNCkknbSBub3Qgc3VyZSB3aHkgbmVlZCB0aGlzIHN0 YXRlPw0KSERNSV9QTFVHX0lOX09OTFkgaXMgcGx1Z2dlZCBpbiBvciBub3QgcGx1Z2dlZCBpbj8N CkluIGF1ZGlvX2hvb2tfcGx1Z2dlZF9jYiwgSERNSV9QTFVHX0lOX09OTFkgaXMgbm90IHBsdWdn ZWQuDQpJbiBicmlkZ2VfZGV0ZWN0LCBpdCdzIGNvbm5lY3RlZCAocGx1Z2dlZCBpbikNClRoaXMg aXMgcmVhbGx5IGNvbmZ1c2VkLg0KSSB0aGluayB3ZSBqdXN0IG5lZWQgdHdvIHN0YXR1czogb25l IGZvciBwbHVnIGluIGFuZCBvbmUgZm9yIHBsdWcgb3V0Lg0KDQo+ICsgICAgICAgZWxzZQ0KPiAr ICAgICAgICAgICAgICAgcmV0dXJuIEhETUlfUExVR19PVVQ7DQo+ICt9DQo+ICsNCj4gK3N0YXRp YyBpcnFyZXR1cm5fdCBtdGtfaGRtaV92Ml9pc3IoaW50IGlycSwgdm9pZCAqYXJnKQ0KPiArew0K PiArICAgICAgIHN0cnVjdCBtdGtfaGRtaSAqaGRtaSA9IGFyZzsNCj4gKyAgICAgICB1bnNpZ25l ZCBpbnQgaXJxX3N0YTsNCj4gKyAgICAgICBpbnQgcmV0ID0gSVJRX0hBTkRMRUQ7DQo+ICsNCj4g KyAgICAgICByZWdtYXBfcmVhZChoZG1pLT5yZWdzLCBUT1BfSU5UX1NUQTAwLCAmaXJxX3N0YSk7 DQo+ICsNCj4gKyAgICAgICAvKiBIYW5kbGUgSG90cGx1ZyBEZXRlY3Rpb24gaW50ZXJydXB0ICov DQo+ICsgICAgICAgaWYgKGlycV9zdGEgJiAoSFRQTEdfUl9JTlQgfCBIVFBMR19GX0lOVCB8IFBP UkRfRl9JTlQgfCBQT1JEX1JfSU5UKSkgew0KDQppZiAoaXJxX3N0YSAmIEhQRF9QT1JEX0hXX0lS UVMpDQoNCj4gKyAgICAgICAgICAgICAgIG10a19oZG1pX3YyX2VuYWJsZV9ocGRfcG9yZF9pcnEo aGRtaSwgZmFsc2UpOw0KDQpJIHRoaW5rIHlvdSBzaG91bGQgbm90IGR5bmFtaWMgZW5hYmxlL2Rp c2FibGUgaG90cGx1ZyBpbnRlcnJ1cHQuDQpJbiBvbmUgY2FzZSB0aGF0IHVzZXIgcGx1ZyBpbiwg aXNyIGlzIGNhbGxlZCBhbmQgZGlzYWJsZSBpbnRlcnJ1cHQgaGVyZSwNCnRoZW4gaW4gX19tdGtf aGRtaV92Ml9pc3JfdGhyZWFkKCksIGNhbGwgbXRrX2hkbWlfdjJfaHBkX3BvcmRfc3RhdHVzKCkg YW5kIHN0YXR1cyBpcyBwbHVnIGluLA0KYnV0IHRoZW4gdXNlciBwbHVnIG91dCBpbW1lZGlhdGVs eSBiZWZvcmUgdGtfaGRtaV92Ml9lbmFibGVfaHBkX3BvcmRfaXJxKGhkbWksIHRydWUpLA0Kc28g dGhlIHBsdWcgb3V0IGludGVycnVwdCBpcyBtaXNzZWQgYW5kIGRyaXZlciB0aG91Z2h0IGl0J3Mg cGx1ZyBpbi4NCkdlbmVyYWxseSwgaW4gcHJvYmUgZnVuY3Rpb24gZW5hYmxlIHRoZSBpbnRlcnJ1 cHQgYW5kIG5vdCBkeW5hbWljYWxseSBlbmFibGUvZGlzYWJsZSBpdC4NCg0KPiArICAgICAgICAg ICAgICAgcmV0ID0gSVJRX1dBS0VfVEhSRUFEOw0KPiArICAgICAgIH0NCj4gKw0KPiArICAgICAg IC8qDQo+ICsgICAgICAgICogQ2xlYXIgYWxsIDMyICsgMTkgaW50ZXJydXB0cyBpbiBDTFIwMCBh bmQgQ0xSMDE6IHRoaXMgaXMgaW1wb3J0YW50DQo+ICsgICAgICAgICogdG8gYXZvaWQgdW53YW50 ZWQgcmV0cmlnZ2VyaW5nIG9mIGFueSBpbnRlcnJ1cHRzDQo+ICsgICAgICAgICovDQo+ICsgICAg ICAgcmVnbWFwX3dyaXRlKGhkbWktPnJlZ3MsIFRPUF9JTlRfQ0xSMDAsIEdFTk1BU0soMzEsIDAp KTsNCj4gKyAgICAgICByZWdtYXBfd3JpdGUoaGRtaS0+cmVncywgVE9QX0lOVF9DTFIwMSwgR0VO TUFTSygxOCwgMCkpOw0KDQpZb3UgbmV2ZXIgZW5hYmxlIGludGVycnVwdCBpbiBUT1BfSU5UX0VO QUJMRTAxLA0Kc28gaXQncyBub3QgbmVjZXNzYXJ5IHRvIGNsZWFyIFRPUF9JTlRfQ0xSMDEuDQoN Cj4gKw0KPiArICAgICAgIC8qIFJlc3RvcmUgaW50ZXJydXB0IGNsZWFyaW5nIHJlZ2lzdGVycyB0 byB6ZXJvICovDQo+ICsgICAgICAgcmVnbWFwX3dyaXRlKGhkbWktPnJlZ3MsIFRPUF9JTlRfQ0xS MDAsIDApOw0KPiArICAgICAgIHJlZ21hcF93cml0ZShoZG1pLT5yZWdzLCBUT1BfSU5UX0NMUjAx LCAwKTsNCj4gKw0KPiArICAgICAgIHJldHVybiByZXQ7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyBp cnFyZXR1cm5fdCBfX210a19oZG1pX3YyX2lzcl90aHJlYWQoc3RydWN0IG10a19oZG1pICpoZG1p KQ0KPiArew0KPiArICAgICAgIGVudW0gaGRtaV9ocGRfc3RhdGUgaHBkOw0KPiArDQo+ICsgICAg ICAgaHBkID0gbXRrX2hkbWlfdjJfaHBkX3BvcmRfc3RhdHVzKGhkbWkpOw0KPiArICAgICAgIGlm IChocGQgIT0gaGRtaS0+aHBkKSB7DQo+ICsgICAgICAgICAgICAgICBoZG1pLT5ocGQgPSBocGQ7 DQo+ICsgICAgICAgICAgICAgICBtdGtfaGRtaV9ocGRfZXZlbnQoaHBkLCBoZG1pLT5kZXYpOw0K PiArICAgICAgIH0NCj4gKw0KPiArICAgICAgIG10a19oZG1pX3YyX2VuYWJsZV9ocGRfcG9yZF9p cnEoaGRtaSwgdHJ1ZSk7DQo+ICsgICAgICAgcmV0dXJuIElSUV9IQU5ETEVEOw0KPiArfQ0KPiAr DQo+ICtzdGF0aWMgaXJxcmV0dXJuX3QgbXRrX2hkbWlfdjJfaXNyX3RocmVhZChpbnQgaXJxLCB2 b2lkICphcmcpDQo+ICt7DQo+ICsgICAgICAgc3RydWN0IG10a19oZG1pICpoZG1pID0gYXJnOw0K PiArDQo+ICsgICAgICAgLyoNCj4gKyAgICAgICAgKiBEZWJvdW5jZSBIRE1JIG1vbml0b3IgSFBE IHN0YXR1cy4NCj4gKyAgICAgICAgKiBFbXBpcmljYWwgdGVzdGluZyBzaG93cyB0aGF0IDMwbXMg aXMgZW5vdWdoIHdhaXQNCj4gKyAgICAgICAgKi8NCj4gKyAgICAgICBtc2xlZXAoMzApOw0KPiAr DQo+ICsgICAgICAgcmV0dXJuIF9fbXRrX2hkbWlfdjJfaXNyX3RocmVhZChoZG1pKTsNCj4gK30N Cj4gKw0KPiArc3RhdGljIGludCBtdGtfaGRtaV92Ml9lbmFibGUoc3RydWN0IG10a19oZG1pICpo ZG1pKQ0KPiArew0KPiArICAgICAgIGJvb2wgd2FzX2FjdGl2ZSA9IHBtX3J1bnRpbWVfYWN0aXZl KGhkbWktPmRldik7DQoNCldoZW4gd2lsbCBpdCBlbmFibGUgdHdpY2U/DQoNCj4gKyAgICAgICBp bnQgcmV0Ow0KPiArDQo+ICsgICAgICAgcmV0ID0gcG1fcnVudGltZV9yZXN1bWVfYW5kX2dldCho ZG1pLT5kZXYpOw0KPiArICAgICAgIGlmIChyZXQpIHsNCj4gKyAgICAgICAgICAgICAgIGRldl9l cnIoaGRtaS0+ZGV2LCAiQ2Fubm90IHJlc3VtZSBIRE1JXG4iKTsNCj4gKyAgICAgICAgICAgICAg IHJldHVybiByZXQ7DQo+ICsgICAgICAgfQ0KPiArDQo+ICsgICAgICAgbXRrX2hkbWlfdjJfY2xr X2VuYWJsZShoZG1pKTsNCg0KQ2hlY2sgcmV0dXJuIHZhbHVlLg0KDQo+ICsgICAgICAgaWYgKCF3 YXNfYWN0aXZlKSB7DQo+ICsgICAgICAgICAgICAgICBtdGtfaGRtaV92Ml9od19yZXNldChoZG1p KTsNCj4gKyAgICAgICAgICAgICAgIG10a19oZG1pX3YyX3NldF9zd19ocGQoaGRtaSwgdHJ1ZSk7 DQo+ICsgICAgICAgfQ0KPiArDQo+ICsgICAgICAgcmV0dXJuIDA7DQo+ICt9DQo+ICsNCj4gK3N0 YXRpYyB2b2lkIG10a19oZG1pX3YyX2Rpc2FibGUoc3RydWN0IG10a19oZG1pICpoZG1pKQ0KPiAr ew0KPiArICAgICAgIG10a19oZG1pX3YyX2Nsa19kaXNhYmxlKGhkbWkpOw0KPiArICAgICAgIHBt X3J1bnRpbWVfcHV0X3N5bmMoaGRtaS0+ZGV2KTsNCj4gK30NCj4gKw0KPiArLyoNCj4gKyAqIEJy aWRnZSBjYWxsYmFja3MNCj4gKyAqLw0KPiArDQo+ICtzdGF0aWMgaW50IG10a19oZG1pX3YyX2Jy aWRnZV9hdHRhY2goc3RydWN0IGRybV9icmlkZ2UgKmJyaWRnZSwNCj4gKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGVudW0gZHJtX2JyaWRnZV9hdHRhY2hfZmxhZ3MgZmxhZ3Mp DQo+ICt7DQo+ICsgICAgICAgc3RydWN0IG10a19oZG1pICpoZG1pID0gaGRtaV9jdHhfZnJvbV9i cmlkZ2UoYnJpZGdlKTsNCj4gKyAgICAgICBpbnQgcmV0Ow0KPiArDQo+ICsgICAgICAgaWYgKCEo ZmxhZ3MgJiBEUk1fQlJJREdFX0FUVEFDSF9OT19DT05ORUNUT1IpKSB7DQo+ICsgICAgICAgICAg ICAgICBEUk1fRVJST1IoIlRoZSBmbGFnIERSTV9CUklER0VfQVRUQUNIX05PX0NPTk5FQ1RPUiBt dXN0IGJlIHN1cHBsaWVkXG4iKTsNCj4gKyAgICAgICAgICAgICAgIHJldHVybiAtRUlOVkFMOw0K PiArICAgICAgIH0NCj4gKyAgICAgICBpZiAoaGRtaS0+bmV4dF9icmlkZ2UpIHsNCj4gKyAgICAg ICAgICAgICAgIHJldCA9IGRybV9icmlkZ2VfYXR0YWNoKGJyaWRnZS0+ZW5jb2RlciwgaGRtaS0+ bmV4dF9icmlkZ2UsIGJyaWRnZSwgZmxhZ3MpOw0KPiArICAgICAgICAgICAgICAgaWYgKHJldCkN Cj4gKyAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJldDsNCj4gKyAgICAgICB9DQo+ICsN Cj4gKyAgICAgICByZXQgPSBtdGtfaGRtaV92Ml9lbmFibGUoaGRtaSk7DQo+ICsgICAgICAgaWYg KHJldCkNCj4gKyAgICAgICAgICAgICAgIHJldHVybiByZXQ7DQo+ICsNCj4gKyAgICAgICAvKiBF bmFibGUgSG90cGx1ZyBhbmQgUG9yZCBwaW5zIGludGVybmFsIGRlYm91bmNpbmcgKi8NCj4gKyAg ICAgICByZWdtYXBfc2V0X2JpdHMoaGRtaS0+cmVncywgSFBEX0REQ19DVFJMLA0KPiArICAgICAg ICAgICAgICAgICAgICAgICBIUERfRERDX0hQRF9EQk5DX0VOIHwgSFBEX0REQ19QT1JEX0RCTkNf RU4pOw0KPiArDQo+ICsgICAgICAgaXJxX2NsZWFyX3N0YXR1c19mbGFncyhoZG1pLT5pcnEsIElS UV9OT0FVVE9FTik7DQo+ICsgICAgICAgZW5hYmxlX2lycShoZG1pLT5pcnEpOw0KPiArDQo+ICsg ICAgICAgLyoNCj4gKyAgICAgICAgKiBDaGVjayBpZiBhbnkgSERNSSBtb25pdG9yIHdhcyBjb25u ZWN0ZWQgYmVmb3JlIHByb2JpbmcgdGhpcyBkcml2ZXINCj4gKyAgICAgICAgKiBhbmQvb3IgYXR0 YWNoaW5nIHRoZSBicmlkZ2UsIHdpdGhvdXQgZGVib3VuY2luZzogaWYgc28sIHdlIHdhbnQgdG8N Cj4gKyAgICAgICAgKiBub3RpZnkgdGhlIERSTSBzbyB0aGF0IHdlIHN0YXJ0IG91dHB1dHRpbmcg YW4gaW1hZ2UgQVNBUC4NCj4gKyAgICAgICAgKiBOb3RlIHRoYXQgY2FsbGluZyB0aGUgSVNSIHRo cmVhZCBmdW5jdGlvbiB3aWxsIGFsc28gcGVyZm9ybSBhIEhXDQo+ICsgICAgICAgICogcmVnaXN0 ZXJzIHdyaXRlIHRoYXQgZW5hYmxlcyBib3RoIHRoZSBIUEQgYW5kIFBvcmQgaW50ZXJydXB0cy4N Cj4gKyAgICAgICAgKi8NCj4gKyAgICAgICBfX210a19oZG1pX3YyX2lzcl90aHJlYWQoaGRtaSk7 DQo+ICsNCj4gKyAgICAgICBtdGtfaGRtaV92Ml9kaXNhYmxlKGhkbWkpOw0KPiArDQo+ICsgICAg ICAgcmV0dXJuIDA7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyB2b2lkIG10a19oZG1pX3YyX2JyaWRn ZV9kZXRhY2goc3RydWN0IGRybV9icmlkZ2UgKmJyaWRnZSkNCj4gK3sNCj4gKyAgICAgICBzdHJ1 Y3QgbXRrX2hkbWkgKmhkbWkgPSBoZG1pX2N0eF9mcm9tX2JyaWRnZShicmlkZ2UpOw0KPiArDQo+ ICsgICAgICAgV0FSTl9PTihwbV9ydW50aW1lX2FjdGl2ZShoZG1pLT5kZXYpKTsNCj4gKw0KPiAr ICAgICAgIC8qIFRoZSBjb250cm9sbGVyIGlzIGFscmVhZHkgcG93ZXJlZCBvZmYsIGp1c3QgZGlz YWJsZSBpcnEgaGVyZSAqLw0KPiArICAgICAgIGRpc2FibGVfaXJxKGhkbWktPmlycSk7DQo+ICt9 DQo+ICsNCj4gK3N0YXRpYyB2b2lkIG10a19oZG1pX3YyX2hhbmRsZV9wbHVnZ2VkX2NoYW5nZShz dHJ1Y3QgbXRrX2hkbWkgKmhkbWksIGJvb2wgcGx1Z2dlZCkNCj4gK3sNCj4gKyAgICAgICBtdXRl eF9sb2NrKCZoZG1pLT51cGRhdGVfcGx1Z2dlZF9zdGF0dXNfbG9jayk7DQo+ICsgICAgICAgaWYg KGhkbWktPnBsdWdnZWRfY2IgJiYgaGRtaS0+Y29kZWNfZGV2KQ0KPiArICAgICAgICAgICAgICAg aGRtaS0+cGx1Z2dlZF9jYihoZG1pLT5jb2RlY19kZXYsIHBsdWdnZWQpOw0KPiArICAgICAgIG11 dGV4X3VubG9jaygmaGRtaS0+dXBkYXRlX3BsdWdnZWRfc3RhdHVzX2xvY2spOw0KPiArfQ0KPiAr DQo+ICtzdGF0aWMgdm9pZCBtdGtfaGRtaV92Ml9icmlkZ2VfcHJlX2VuYWJsZShzdHJ1Y3QgZHJt X2JyaWRnZSAqYnJpZGdlLA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBzdHJ1Y3QgZHJtX2JyaWRnZV9zdGF0ZSAqb2xkX3N0YXRlKQ0KPiArew0KPiArICAgICAg IHN0cnVjdCBtdGtfaGRtaSAqaGRtaSA9IGhkbWlfY3R4X2Zyb21fYnJpZGdlKGJyaWRnZSk7DQo+ ICsgICAgICAgc3RydWN0IGRybV9hdG9taWNfc3RhdGUgKnN0YXRlID0gb2xkX3N0YXRlLT5iYXNl LnN0YXRlOw0KPiArICAgICAgIHN0cnVjdCBkcm1fY29ubmVjdG9yX3N0YXRlICpjb25uX3N0YXRl Ow0KPiArICAgICAgIHVuaW9uIHBoeV9jb25maWd1cmVfb3B0cyBvcHRzID0gew0KPiArICAgICAg ICAgICAgICAgLmRwID0geyAubGlua19yYXRlID0gaGRtaS0+bW9kZS5jbG9jayAqIEtJTE8gfQ0K PiArICAgICAgIH07DQo+ICsgICAgICAgaW50IHJldDsNCj4gKw0KPiArICAgICAgIC8qIFBvd2Vy IG9uIHRoZSBjb250cm9sbGVyIGJlZm9yZSB0cnlpbmcgdG8gd3JpdGUgdG8gcmVnaXN0ZXJzICov DQo+ICsgICAgICAgcmV0ID0gbXRrX2hkbWlfdjJfZW5hYmxlKGhkbWkpOw0KDQpJbiBicmlkZ2Ug YXR0YWNoLCBpdCBhbHJlYWR5IGNhbGwgbXRrX2hkbWlfdjJfZW5hYmxlKCksIHNvIGl0J3Mgbm90 IG5lY2Vzc2FyeSB0byBjYWxsIGl0IGhlcmUuDQoNCj4gKyAgICAgICBpZiAoV0FSTl9PTihyZXQp KQ0KPiArICAgICAgICAgICAgICAgcmV0dXJuOw0KPiArDQo+ICsgICAgICAgLyogUmV0cmlldmUg dGhlIGNvbm5lY3RvciB0aHJvdWdoIHRoZSBhdG9taWMgc3RhdGUgKi8NCj4gKyAgICAgICBoZG1p LT5jdXJyX2Nvbm4gPSBkcm1fYXRvbWljX2dldF9uZXdfY29ubmVjdG9yX2Zvcl9lbmNvZGVyKHN0 YXRlLCBicmlkZ2UtPmVuY29kZXIpOw0KPiArDQo+ICsgICAgICAgY29ubl9zdGF0ZSA9IGRybV9h dG9taWNfZ2V0X25ld19jb25uZWN0b3Jfc3RhdGUoc3RhdGUsIGhkbWktPmN1cnJfY29ubik7DQo+ ICsgICAgICAgaWYgKFdBUk5fT04oIWNvbm5fc3RhdGUpKQ0KPiArICAgICAgICAgICAgICAgcmV0 dXJuOw0KPiArDQo+ICsgICAgICAgLyoNCj4gKyAgICAgICAgKiBQcmVjb25maWd1cmUgdGhlIEhE TUkgY29udHJvbGxlciBhbmQgdGhlIEhETUkgUEhZIGF0IHByZV9lbmFibGUNCj4gKyAgICAgICAg KiBzdGFnZSB0byBtYWtlIHN1cmUgdGhhdCB0aGlzIElQIGlzIHJlYWR5IGFuZCBjbG9ja2VkIGJl Zm9yZSB0aGUNCj4gKyAgICAgICAgKiBtdGtfZHBpIGdldHMgcG93ZXJlZCBvbiBhbmQgYmVmb3Jl IGl0IGVuYWJsZXMgdGhlIG91dHB1dC4NCj4gKyAgICAgICAgKi8NCj4gKyAgICAgICBtdGtfaGRt aV92Ml9vdXRwdXRfc2V0X2Rpc3BsYXlfbW9kZShoZG1pLCAmaGRtaS0+bW9kZSk7DQo+ICsNCj4g KyAgICAgICAvKiBSZWNvbmZpZ3VyZSBwaHkgY2xvY2sgbGluayB3aXRoIGFwcHJvcHJpYXRlIHJh dGUgKi8NCj4gKyAgICAgICBwaHlfY29uZmlndXJlKGhkbWktPnBoeSwgJm9wdHMpOw0KPiArDQo+ ICsgICAgICAgLyogUG93ZXIgb24gdGhlIFBIWSBoZXJlIHRvIG1ha2Ugc3VyZSB0aGF0IERQSV9I RE1JIGlzIGNsb2NrZWQgKi8NCj4gKyAgICAgICBwaHlfcG93ZXJfb24oaGRtaS0+cGh5KTsNCj4g Kw0KPiArICAgICAgIGhkbWktPnBvd2VyZWQgPSB0cnVlOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMg dm9pZCBtdGtfaGRtaV92Ml9icmlkZ2VfZW5hYmxlKHN0cnVjdCBkcm1fYnJpZGdlICpicmlkZ2Us DQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGRybV9icmlk Z2Vfc3RhdGUgKm9sZF9zdGF0ZSkNCj4gK3sNCj4gKyAgICAgICBzdHJ1Y3QgbXRrX2hkbWkgKmhk bWkgPSBoZG1pX2N0eF9mcm9tX2JyaWRnZShicmlkZ2UpOw0KPiArICAgICAgIHN0cnVjdCBkcm1f YXRvbWljX3N0YXRlICpzdGF0ZSA9IG9sZF9zdGF0ZS0+YmFzZS5zdGF0ZTsNCj4gKyAgICAgICBp bnQgcmV0Ow0KPiArDQo+ICsgICAgICAgaWYgKFdBUk5fT04oIWhkbWktPnBvd2VyZWQpKQ0KPiAr ICAgICAgICAgICAgICAgcmV0dXJuOw0KPiArDQo+ICsgICAgICAgcmV0ID0gZHJtX2F0b21pY19o ZWxwZXJfY29ubmVjdG9yX2hkbWlfdXBkYXRlX2luZm9mcmFtZXMoaGRtaS0+Y3Vycl9jb25uLCBz dGF0ZSk7DQo+ICsgICAgICAgaWYgKHJldCkNCj4gKyAgICAgICAgICAgICAgIGRldl9lcnIoaGRt aS0+ZGV2LCAiQ291bGQgbm90IHVwZGF0ZSBpbmZvZnJhbWVzOiAlZFxuIiwgcmV0KTsNCj4gKw0K PiArICAgICAgIG10a19oZG1pX3YyX2h3X3ZpZF9tdXRlKGhkbWksIGZhbHNlKTsNCj4gKw0KPiAr ICAgICAgIC8qIHNpZ25hbCB0aGUgY29ubmVjdCBldmVudCB0byBhdWRpbyBjb2RlYyAqLw0KPiAr ICAgICAgIG10a19oZG1pX3YyX2hhbmRsZV9wbHVnZ2VkX2NoYW5nZShoZG1pLCB0cnVlKTsNCg0K V2h5IHBsdWdnZWQgcGFyYW1ldGVyIGlzIHRydWU/DQoNCj4gKw0KPiArICAgICAgIGhkbWktPmVu YWJsZWQgPSB0cnVlOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgdm9pZCBtdGtfaGRtaV92Ml9icmlk Z2VfZGlzYWJsZShzdHJ1Y3QgZHJtX2JyaWRnZSAqYnJpZGdlLA0KPiArICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgZHJtX2JyaWRnZV9zdGF0ZSAqb2xkX2JyaWRn ZV9zdGF0ZSkNCj4gK3sNCj4gKyAgICAgICBzdHJ1Y3QgbXRrX2hkbWkgKmhkbWkgPSBoZG1pX2N0 eF9mcm9tX2JyaWRnZShicmlkZ2UpOw0KPiArDQo+ICsgICAgICAgaWYgKCFoZG1pLT5lbmFibGVk KQ0KPiArICAgICAgICAgICAgICAgcmV0dXJuOw0KPiArDQo+ICsgICAgICAgbXRrX2hkbWlfdjJf aHdfYXZfbXV0ZShoZG1pLCB0cnVlKTsNCj4gKyAgICAgICBtc2xlZXAoNTApOw0KPiArICAgICAg IG10a19oZG1pX3YyX2h3X3ZpZF9tdXRlKGhkbWksIHRydWUpOw0KPiArICAgICAgIG10a19oZG1p X3YyX2h3X2F1ZF9tdXRlKGhkbWksIHRydWUpOw0KPiArICAgICAgIG10a19oZG1pX3YyX2Rpc2Fi bGVfaGRjcF9lbmNyeXB0KGhkbWkpOw0KDQpZb3UgbmV2ZXIgZW5hYmxlIGVuY3J5cHQsIHdoeSBk aXNhYmxlIGl0Pw0KU28gZHJvcCB0aGlzLg0KDQo+ICsgICAgICAgbXNsZWVwKDUwKTsNCj4gKw0K PiArICAgICAgIGhkbWktPmVuYWJsZWQgPSBmYWxzZTsNCj4gK30NCj4gKw0KPiArc3RhdGljIHZv aWQgbXRrX2hkbWlfdjJfYnJpZGdlX3Bvc3RfZGlzYWJsZShzdHJ1Y3QgZHJtX2JyaWRnZSAqYnJp ZGdlLA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVj dCBkcm1fYnJpZGdlX3N0YXRlICpvbGRfc3RhdGUpDQo+ICt7DQo+ICsgICAgICAgc3RydWN0IG10 a19oZG1pICpoZG1pID0gaGRtaV9jdHhfZnJvbV9icmlkZ2UoYnJpZGdlKTsNCj4gKw0KPiArICAg ICAgIGlmICghaGRtaS0+cG93ZXJlZCkNCj4gKyAgICAgICAgICAgICAgIHJldHVybjsNCj4gKw0K PiArICAgICAgIC8qIERpc2FibGUgVlN5bmMgaW50ZXJydXB0ICovDQo+ICsgICAgICAgcmVnbWFw X2NsZWFyX2JpdHMoaGRtaS0+cmVncywgVE9QX0lOVF9FTkFCTEUwMCwgSERNSV9WU1lOQ19JTlQp Ow0KDQpZb3UgbmV2ZXIgZW5hYmxlIHZzeW5jIGludGVycnVwdCwgc28gdGhpcyBkaXNhYmxlIGlz IHJlZHVuZGFudC4NCg0KPiArDQo+ICsgICAgICAgcGh5X3Bvd2VyX29mZihoZG1pLT5waHkpOw0K PiArICAgICAgIGhkbWktPnBvd2VyZWQgPSBmYWxzZTsNCj4gKw0KPiArICAgICAgIC8qIHNpZ25h bCB0aGUgZGlzY29ubmVjdCBldmVudCB0byBhdWRpbyBjb2RlYyAqLw0KPiArICAgICAgIG10a19o ZG1pX3YyX2hhbmRsZV9wbHVnZ2VkX2NoYW5nZShoZG1pLCBmYWxzZSk7DQo+ICsNCj4gKyAgICAg ICAvKiBQb3dlciBvZmYgKi8NCj4gKyAgICAgICBtdGtfaGRtaV92Ml9kaXNhYmxlKGhkbWkpOw0K PiArfQ0KPiArDQo+ICtzdGF0aWMgZW51bSBkcm1fY29ubmVjdG9yX3N0YXR1cyBtdGtfaGRtaV92 Ml9icmlkZ2VfZGV0ZWN0KHN0cnVjdCBkcm1fYnJpZGdlICpicmlkZ2UpDQo+ICt7DQo+ICsgICAg ICAgc3RydWN0IG10a19oZG1pICpoZG1pID0gaGRtaV9jdHhfZnJvbV9icmlkZ2UoYnJpZGdlKTsN Cj4gKw0KPiArICAgICAgIHJldHVybiBoZG1pLT5ocGQgIT0gSERNSV9QTFVHX09VVCA/DQo+ICsg ICAgICAgICAgICAgIGNvbm5lY3Rvcl9zdGF0dXNfY29ubmVjdGVkIDogY29ubmVjdG9yX3N0YXR1 c19kaXNjb25uZWN0ZWQ7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZHJtX2Vk aWQgKm10a19oZG1pX3YyX2JyaWRnZV9lZGlkX3JlYWQoc3RydWN0IGRybV9icmlkZ2UgKmJyaWRn ZSwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yKQ0KPiArew0KPiArICAgICAg IHJldHVybiBkcm1fZWRpZF9yZWFkKGNvbm5lY3Rvcik7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyB2 b2lkIG10a19oZG1pX3YyX2hwZF9lbmFibGUoc3RydWN0IGRybV9icmlkZ2UgKmJyaWRnZSkNCj4g K3sNCj4gKyAgICAgICBzdHJ1Y3QgbXRrX2hkbWkgKmhkbWkgPSBoZG1pX2N0eF9mcm9tX2JyaWRn ZShicmlkZ2UpOw0KPiArICAgICAgIGludCByZXQ7DQo+ICsNCj4gKyAgICAgICByZXQgPSBtdGtf aGRtaV92Ml9lbmFibGUoaGRtaSk7DQo+ICsgICAgICAgaWYgKHJldCkgew0KPiArICAgICAgICAg ICAgICAgZGV2X2VycihoZG1pLT5kZXYsICJDYW5ub3QgcG93ZXIgb24gY29udHJvbGxlciBmb3Ig SFBEOiAlZFxuIiwgcmV0KTsNCj4gKyAgICAgICAgICAgICAgIHJldHVybjsNCj4gKyAgICAgICB9 DQo+ICsNCj4gKyAgICAgICBtdGtfaGRtaV92Ml9lbmFibGVfaHBkX3BvcmRfaXJxKGhkbWksIHRy dWUpOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgdm9pZCBtdGtfaGRtaV92Ml9ocGRfZGlzYWJsZShz dHJ1Y3QgZHJtX2JyaWRnZSAqYnJpZGdlKQ0KPiArew0KPiArICAgICAgIHN0cnVjdCBtdGtfaGRt aSAqaGRtaSA9IGhkbWlfY3R4X2Zyb21fYnJpZGdlKGJyaWRnZSk7DQo+ICsNCj4gKyAgICAgICBt dGtfaGRtaV92Ml9lbmFibGVfaHBkX3BvcmRfaXJxKGhkbWksIGZhbHNlKTsNCj4gKyAgICAgICBt dGtfaGRtaV92Ml9kaXNhYmxlKGhkbWkpOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgaW50IG10a19o ZG1pX3YyX2hkbWlfdG1kc19jaGFyX3JhdGVfdmFsaWQoY29uc3Qgc3RydWN0IGRybV9icmlkZ2Ug KmJyaWRnZSwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGNvbnN0IHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICptb2RlLA0KPiArICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBsb25nIHRt ZHNfcmF0ZSkNCj4gK3sNCj4gKyAgICAgICBpZiAobW9kZS0+Y2xvY2sgPCBNVEtfSERNSV9WMl9D TE9DS19NSU4pDQo+ICsgICAgICAgICAgICAgICByZXR1cm4gTU9ERV9DTE9DS19MT1c7DQo+ICsg ICAgICAgZWxzZSBpZiAobW9kZS0+Y2xvY2sgPiBNVEtfSERNSV9WMl9DTE9DS19NQVgpDQo+ICsg ICAgICAgICAgICAgICByZXR1cm4gTU9ERV9DTE9DS19ISUdIOw0KPiArICAgICAgIGVsc2UNCj4g KyAgICAgICAgICAgICAgIHJldHVybiBNT0RFX09LOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgaW50 IG10a19oZG1pX3YyX2hkbWlfY2xlYXJfaW5mb2ZyYW1lKHN0cnVjdCBkcm1fYnJpZGdlICpicmlk Z2UsDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW51bSBo ZG1pX2luZm9mcmFtZV90eXBlIHR5cGUpDQo+ICt7DQo+ICsgICAgICAgc3RydWN0IG10a19oZG1p ICpoZG1pID0gaGRtaV9jdHhfZnJvbV9icmlkZ2UoYnJpZGdlKTsNCj4gKw0KPiArICAgICAgIHN3 aXRjaCAodHlwZSkgew0KPiArICAgICAgIGNhc2UgSERNSV9JTkZPRlJBTUVfVFlQRV9BVURJTzoN Cj4gKyAgICAgICAgICAgICAgIHJlZ21hcF9jbGVhcl9iaXRzKGhkbWktPnJlZ3MsIFRPUF9JTkZP X0VOLCBBVURfRU5fV1IgfCBBVURfRU4pOw0KPiArICAgICAgICAgICAgICAgcmVnbWFwX2NsZWFy X2JpdHMoaGRtaS0+cmVncywgVE9QX0lORk9fUlBULCBBVURfUlBUX0VOKTsNCj4gKyAgICAgICAg ICAgICAgIGJyZWFrOw0KPiArICAgICAgIGNhc2UgSERNSV9JTkZPRlJBTUVfVFlQRV9BVkk6DQo+ ICsgICAgICAgICAgICAgICByZWdtYXBfY2xlYXJfYml0cyhoZG1pLT5yZWdzLCBUT1BfSU5GT19F TiwgQVZJX0VOX1dSIHwgQVZJX0VOKTsNCj4gKyAgICAgICAgICAgICAgIHJlZ21hcF9jbGVhcl9i aXRzKGhkbWktPnJlZ3MsIFRPUF9JTkZPX1JQVCwgQVZJX1JQVF9FTik7DQo+ICsgICAgICAgICAg ICAgICBicmVhazsNCj4gKyAgICAgICBjYXNlIEhETUlfSU5GT0ZSQU1FX1RZUEVfU1BEOg0KPiAr ICAgICAgICAgICAgICAgcmVnbWFwX2NsZWFyX2JpdHMoaGRtaS0+cmVncywgVE9QX0lORk9fRU4s IFNQRF9FTl9XUiB8IFNQRF9FTik7DQo+ICsgICAgICAgICAgICAgICByZWdtYXBfY2xlYXJfYml0 cyhoZG1pLT5yZWdzLCBUT1BfSU5GT19SUFQsIFNQRF9SUFRfRU4pOw0KPiArICAgICAgICAgICAg ICAgYnJlYWs7DQo+ICsgICAgICAgY2FzZSBIRE1JX0lORk9GUkFNRV9UWVBFX1ZFTkRPUjoNCj4g KyAgICAgICAgICAgICAgIHJlZ21hcF9jbGVhcl9iaXRzKGhkbWktPnJlZ3MsIFRPUF9JTkZPX0VO LCBWU0lGX0VOX1dSIHwgVlNJRl9FTik7DQo+ICsgICAgICAgICAgICAgICByZWdtYXBfY2xlYXJf Yml0cyhoZG1pLT5yZWdzLCBUT1BfSU5GT19SUFQsIFZTSUZfUlBUX0VOKTsNCj4gKyAgICAgICAg ICAgICAgIGJyZWFrOw0KPiArICAgICAgIGNhc2UgSERNSV9JTkZPRlJBTUVfVFlQRV9EUk06DQo+ ICsgICAgICAgZGVmYXVsdDoNCj4gKyAgICAgICAgICAgICAgIGJyZWFrOw0KPiArICAgICAgIH07 DQo+ICsNCj4gKyAgICAgICByZXR1cm4gMDsNCj4gK30NCj4gKw0KPiArc3RhdGljIGludCBtdGtf aGRtaV92Ml9oZG1pX3dyaXRlX2luZm9mcmFtZShzdHJ1Y3QgZHJtX2JyaWRnZSAqYnJpZGdlLA0K PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudW0gaGRtaV9p bmZvZnJhbWVfdHlwZSB0eXBlLA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGNvbnN0IHU4ICpidWZmZXIsIHNpemVfdCBsZW4pDQo+ICt7DQo+ICsgICAgICAg c3RydWN0IG10a19oZG1pICpoZG1pID0gaGRtaV9jdHhfZnJvbV9icmlkZ2UoYnJpZGdlKTsNCj4g Kw0KPiArICAgICAgIHN3aXRjaCAodHlwZSkgew0KPiArICAgICAgIGNhc2UgSERNSV9JTkZPRlJB TUVfVFlQRV9BVURJTzoNCj4gKyAgICAgICAgICAgICAgIG10a19oZG1pX3YyX2h3X3dyaXRlX2F1 ZGlvX2luZm9mcmFtZShoZG1pLCBidWZmZXIpOw0KPiArICAgICAgICAgICAgICAgYnJlYWs7DQo+ ICsgICAgICAgY2FzZSBIRE1JX0lORk9GUkFNRV9UWVBFX0FWSToNCj4gKyAgICAgICAgICAgICAg IG10a19oZG1pX3YyX2h3X3dyaXRlX2F2aV9pbmZvZnJhbWUoaGRtaSwgYnVmZmVyKTsNCj4gKyAg ICAgICAgICAgICAgIGJyZWFrOw0KPiArICAgICAgIGNhc2UgSERNSV9JTkZPRlJBTUVfVFlQRV9T UEQ6DQo+ICsgICAgICAgICAgICAgICBtdGtfaGRtaV92Ml9od193cml0ZV9zcGRfaW5mb2ZyYW1l KGhkbWksIGJ1ZmZlcik7DQo+ICsgICAgICAgICAgICAgICBicmVhazsNCj4gKyAgICAgICBjYXNl IEhETUlfSU5GT0ZSQU1FX1RZUEVfVkVORE9SOg0KPiArICAgICAgICAgICAgICAgbXRrX2hkbWlf djJfaHdfd3JpdGVfdmVuZG9yX2luZm9mcmFtZShoZG1pLCBidWZmZXIpOw0KPiArICAgICAgICAg ICAgICAgYnJlYWs7DQo+ICsgICAgICAgY2FzZSBIRE1JX0lORk9GUkFNRV9UWVBFX0RSTToNCj4g KyAgICAgICBkZWZhdWx0Og0KPiArICAgICAgICAgICAgICAgZGV2X2VycihoZG1pLT5kZXYsICJV bnN1cHBvcnRlZCBIRE1JIGluZm9mcmFtZSB0eXBlICV1XG4iLCB0eXBlKTsNCj4gKyAgICAgICAg ICAgICAgIGJyZWFrOw0KPiArICAgICAgIH07DQo+ICsNCj4gKyAgICAgICByZXR1cm4gMDsNCj4g K30NCj4gKw0KPiArc3RhdGljIGNvbnN0IHN0cnVjdCBkcm1fYnJpZGdlX2Z1bmNzIG10a192Ml9o ZG1pX2JyaWRnZV9mdW5jcyA9IHsNCj4gKyAgICAgICAuYXR0YWNoID0gbXRrX2hkbWlfdjJfYnJp ZGdlX2F0dGFjaCwNCj4gKyAgICAgICAuZGV0YWNoID0gbXRrX2hkbWlfdjJfYnJpZGdlX2RldGFj aCwNCj4gKyAgICAgICAubW9kZV9maXh1cCA9IG10a19oZG1pX2JyaWRnZV9tb2RlX2ZpeHVwLA0K PiArICAgICAgIC5tb2RlX3NldCA9IG10a19oZG1pX2JyaWRnZV9tb2RlX3NldCwNCj4gKyAgICAg ICAuYXRvbWljX3ByZV9lbmFibGUgPSBtdGtfaGRtaV92Ml9icmlkZ2VfcHJlX2VuYWJsZSwNCj4g KyAgICAgICAuYXRvbWljX2VuYWJsZSA9IG10a19oZG1pX3YyX2JyaWRnZV9lbmFibGUsDQo+ICsg ICAgICAgLmF0b21pY19kaXNhYmxlID0gbXRrX2hkbWlfdjJfYnJpZGdlX2Rpc2FibGUsDQo+ICsg ICAgICAgLmF0b21pY19wb3N0X2Rpc2FibGUgPSBtdGtfaGRtaV92Ml9icmlkZ2VfcG9zdF9kaXNh YmxlLA0KPiArICAgICAgIC5hdG9taWNfZHVwbGljYXRlX3N0YXRlID0gZHJtX2F0b21pY19oZWxw ZXJfYnJpZGdlX2R1cGxpY2F0ZV9zdGF0ZSwNCj4gKyAgICAgICAuYXRvbWljX2Rlc3Ryb3lfc3Rh dGUgPSBkcm1fYXRvbWljX2hlbHBlcl9icmlkZ2VfZGVzdHJveV9zdGF0ZSwNCj4gKyAgICAgICAu YXRvbWljX3Jlc2V0ID0gZHJtX2F0b21pY19oZWxwZXJfYnJpZGdlX3Jlc2V0LA0KPiArICAgICAg IC5kZXRlY3QgPSBtdGtfaGRtaV92Ml9icmlkZ2VfZGV0ZWN0LA0KPiArICAgICAgIC5lZGlkX3Jl YWQgPSBtdGtfaGRtaV92Ml9icmlkZ2VfZWRpZF9yZWFkLA0KPiArICAgICAgIC5ocGRfZW5hYmxl ID0gbXRrX2hkbWlfdjJfaHBkX2VuYWJsZSwNCj4gKyAgICAgICAuaHBkX2Rpc2FibGUgPSBtdGtf aGRtaV92Ml9ocGRfZGlzYWJsZSwNCj4gKyAgICAgICAuaGRtaV90bWRzX2NoYXJfcmF0ZV92YWxp ZCA9IG10a19oZG1pX3YyX2hkbWlfdG1kc19jaGFyX3JhdGVfdmFsaWQsDQo+ICsgICAgICAgLmhk bWlfY2xlYXJfaW5mb2ZyYW1lID0gbXRrX2hkbWlfdjJfaGRtaV9jbGVhcl9pbmZvZnJhbWUsDQo+ ICsgICAgICAgLmhkbWlfd3JpdGVfaW5mb2ZyYW1lID0gbXRrX2hkbWlfdjJfaGRtaV93cml0ZV9p bmZvZnJhbWUsDQo+ICt9Ow0KPiArDQo+ICsvKg0KPiArICogSERNSSBhdWRpbyBjb2RlYyBjYWxs YmFja3MNCj4gKyAqLw0KPiArc3RhdGljIGludCBtdGtfaGRtaV92Ml9hdWRpb19ob29rX3BsdWdn ZWRfY2Ioc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkYXRhLA0KPiArICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZG1pX2NvZGVjX3BsdWdnZWRfY2IgZm4sDQo+ ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBkZXZp Y2UgKmNvZGVjX2RldikNCj4gK3sNCj4gKyAgICAgICBzdHJ1Y3QgbXRrX2hkbWkgKmhkbWkgPSBk ZXZfZ2V0X2RydmRhdGEoZGV2KTsNCj4gKyAgICAgICBib29sIHBsdWdnZWQ7DQo+ICsNCj4gKyAg ICAgICBpZiAoIWhkbWkpDQo+ICsgICAgICAgICAgICAgICByZXR1cm4gLUVOT0RFVjsNCj4gKw0K PiArICAgICAgIG10a19oZG1pX2F1ZGlvX3NldF9wbHVnZ2VkX2NiKGhkbWksIGZuLCBjb2RlY19k ZXYpOw0KPiArICAgICAgIHBsdWdnZWQgPSAoaGRtaS0+aHBkID09IEhETUlfUExVR19JTl9BTkRf U0lOS19QT1dFUl9PTik7DQo+ICsgICAgICAgbXRrX2hkbWlfdjJfaGFuZGxlX3BsdWdnZWRfY2hh bmdlKGhkbWksIHBsdWdnZWQpOw0KPiArDQo+ICsgICAgICAgcmV0dXJuIDA7DQo+ICt9DQo+ICsN Cj4gK3N0YXRpYyBpbnQgbXRrX2hkbWlfdjJfYXVkaW9faHdfcGFyYW1zKHN0cnVjdCBkZXZpY2Ug KmRldiwgdm9pZCAqZGF0YSwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgc3RydWN0IGhkbWlfY29kZWNfZGFpZm10ICpkYWlmbXQsDQo+ICsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBoZG1pX2NvZGVjX3BhcmFtcyAqcGFyYW1zKQ0K PiArew0KPiArICAgICAgIHN0cnVjdCBtdGtfaGRtaSAqaGRtaSA9IGRldl9nZXRfZHJ2ZGF0YShk ZXYpOw0KPiArDQo+ICsgICAgICAgaWYgKGhkbWktPmF1ZGlvX2VuYWJsZSkgew0KPiArICAgICAg ICAgICAgICAgbXRrX2hkbWlfYXVkaW9fcGFyYW1zKGhkbWksIGRhaWZtdCwgcGFyYW1zKTsNCj4g KyAgICAgICAgICAgICAgIG10a19oZG1pX3YyX2F1ZF9vdXRwdXRfY29uZmlnKGhkbWksICZoZG1p LT5tb2RlKTsNCj4gKyAgICAgICB9DQo+ICsgICAgICAgcmV0dXJuIDA7DQo+ICt9DQo+ICsNCj4g K3N0YXRpYyBpbnQgbXRrX2hkbWlfdjJfYXVkaW9fc3RhcnR1cChzdHJ1Y3QgZGV2aWNlICpkZXYs IHZvaWQgKmRhdGEpDQo+ICt7DQo+ICsgICAgICAgc3RydWN0IG10a19oZG1pICpoZG1pID0gZGV2 X2dldF9kcnZkYXRhKGRldik7DQo+ICsNCj4gKyAgICAgICBtdGtfaGRtaV92Ml9od19hdWRfZW5h YmxlKGhkbWksIHRydWUpOw0KPiArICAgICAgIGhkbWktPmF1ZGlvX2VuYWJsZSA9IHRydWU7DQo+ ICsNCj4gKyAgICAgICByZXR1cm4gMDsNCj4gK30NCj4gKw0KPiArc3RhdGljIHZvaWQgbXRrX2hk bWlfdjJfYXVkaW9fc2h1dGRvd24oc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkYXRhKQ0KPiAr ew0KPiArICAgICAgIHN0cnVjdCBtdGtfaGRtaSAqaGRtaSA9IGRldl9nZXRfZHJ2ZGF0YShkZXYp Ow0KPiArDQo+ICsgICAgICAgaGRtaS0+YXVkaW9fZW5hYmxlID0gZmFsc2U7DQo+ICsgICAgICAg bXRrX2hkbWlfdjJfaHdfYXVkX2VuYWJsZShoZG1pLCBmYWxzZSk7DQo+ICt9DQo+ICsNCj4gK3N0 YXRpYyBpbnQgbXRrX2hkbWlfdjJfYXVkaW9fbXV0ZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQg KmRhdGEsIGJvb2wgZW5hYmxlLCBpbnQgZGlyKQ0KPiArew0KPiArICAgICAgIHN0cnVjdCBtdGtf aGRtaSAqaGRtaSA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOw0KPiArDQo+ICsgICAgICAgbXRrX2hk bWlfdjJfaHdfYXVkX211dGUoaGRtaSwgZW5hYmxlKTsNCj4gKw0KPiArICAgICAgIHJldHVybiAw Ow0KPiArfQ0KPiArDQo+ICtzdGF0aWMgY29uc3Qgc3RydWN0IGhkbWlfY29kZWNfb3BzIG10a19o ZG1pX3YyX2F1ZGlvX2NvZGVjX29wcyA9IHsNCj4gKyAgICAgICAuaHdfcGFyYW1zID0gbXRrX2hk bWlfdjJfYXVkaW9faHdfcGFyYW1zLA0KPiArICAgICAgIC5hdWRpb19zdGFydHVwID0gbXRrX2hk bWlfdjJfYXVkaW9fc3RhcnR1cCwNCj4gKyAgICAgICAuYXVkaW9fc2h1dGRvd24gPSBtdGtfaGRt aV92Ml9hdWRpb19zaHV0ZG93biwNCj4gKyAgICAgICAubXV0ZV9zdHJlYW0gPSBtdGtfaGRtaV92 Ml9hdWRpb19tdXRlLA0KPiArICAgICAgIC5nZXRfZWxkID0gbXRrX2hkbWlfYXVkaW9fZ2V0X2Vs ZCwNCj4gKyAgICAgICAuaG9va19wbHVnZ2VkX2NiID0gbXRrX2hkbWlfdjJfYXVkaW9faG9va19w bHVnZ2VkX2NiLA0KPiArfTsNCj4gKw0KPiArc3RhdGljIF9fbWF5YmVfdW51c2VkIGludCBtdGtf aGRtaV92Ml9zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldikNCj4gK3sNCj4gKyAgICAgICBzdHJ1 Y3QgbXRrX2hkbWkgKmhkbWkgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsNCj4gKw0KPiArICAgICAg IG10a19oZG1pX3YyX2Rpc2FibGUoaGRtaSk7DQo+ICsNCj4gKyAgICAgICByZXR1cm4gMDsNCj4g K30NCj4gKw0KPiArc3RhdGljIF9fbWF5YmVfdW51c2VkIGludCBtdGtfaGRtaV92Ml9yZXN1bWUo c3RydWN0IGRldmljZSAqZGV2KQ0KPiArew0KPiArICAgICAgIHN0cnVjdCBtdGtfaGRtaSAqaGRt aSA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOw0KPiArICAgICAgIGludCByZXQ7DQo+ICsNCj4gKyAg ICAgICBwbV9ydW50aW1lX2dldF9zeW5jKGRldik7DQo+ICsNCj4gKyAgICAgICByZXQgPSBtdGtf aGRtaV92Ml9jbGtfZW5hYmxlKGhkbWkpOw0KPiArICAgICAgIGlmIChyZXQpDQo+ICsgICAgICAg ICAgICAgICByZXR1cm4gcmV0Ow0KPiArDQo+ICsgICAgICAgbXRrX2hkbWlfdjJfZW5hYmxlX2hw ZF9wb3JkX2lycShoZG1pLCB0cnVlKTsNCg0KSSBleHBlY3QgdGhlIHRoaW5ncyBpbiBzdXNwZW5k IGFuZCByZXN1bWUgd291bGQgc3ltbWV0cmljLg0KU3VzcGVuZCBkb2VzIG9ubHkgbXRrX2hkbWlf djJfZGlzYWJsZSgpLCBzbyByZXN1bWUgc2hvdWxkIG9ubHkgbXRrX2hkbWlfdjJfZW5hYmxlKCku DQoNClJlZ2FyZHMsDQpDSw0KDQo+ICsNCj4gKyAgICAgICByZXR1cm4gMDsNCj4gK30NCj4gKw0K PiArc3RhdGljIFNJTVBMRV9ERVZfUE1fT1BTKG10a19oZG1pX3YyX3BtX29wcywgbXRrX2hkbWlf djJfc3VzcGVuZCwgbXRrX2hkbWlfdjJfcmVzdW1lKTsNCj4gKw0KPiArc3RhdGljIGNvbnN0IHN0 cnVjdCBtdGtfaGRtaV92ZXJfY29uZiBtdGtfaGRtaV9jb25mX3YyID0gew0KPiArICAgICAgIC5i cmlkZ2VfZnVuY3MgPSAmbXRrX3YyX2hkbWlfYnJpZGdlX2Z1bmNzLA0KPiArICAgICAgIC5jb2Rl Y19vcHMgPSAmbXRrX2hkbWlfdjJfYXVkaW9fY29kZWNfb3BzLA0KPiArICAgICAgIC5tdGtfaGRt aV9jbG9ja19uYW1lcyA9IG10a19oZG1pX3YyX2Nsa19uYW1lcywNCj4gKyAgICAgICAubnVtX2Ns b2NrcyA9IE1US19IRE1JX1YyX0NMS19DT1VOVCwNCj4gK307DQo+ICsNCj4gK3N0YXRpYyBjb25z dCBzdHJ1Y3QgbXRrX2hkbWlfY29uZiBtdGtfaGRtaV9jb25mX210ODE4OCA9IHsNCj4gKyAgICAg ICAudmVyX2NvbmYgPSAmbXRrX2hkbWlfY29uZl92MiwNCj4gKyAgICAgICAucmVnX2hkbWlfdHhf Y2ZnID0gSERNSVRYX0NPTkZJR19NVDgxODgNCj4gK307DQo+ICsNCj4gK3N0YXRpYyBjb25zdCBz dHJ1Y3QgbXRrX2hkbWlfY29uZiBtdGtfaGRtaV9jb25mX210ODE5NSA9IHsNCj4gKyAgICAgICAu dmVyX2NvbmYgPSAmbXRrX2hkbWlfY29uZl92MiwNCj4gKyAgICAgICAucmVnX2hkbWlfdHhfY2Zn ID0gSERNSVRYX0NPTkZJR19NVDgxOTUNCj4gK307DQo+ICsNCj4gK3N0YXRpYyBpbnQgbXRrX2hk bWlfdjJfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikNCj4gK3sNCj4gKyAgICAg ICBzdHJ1Y3QgbXRrX2hkbWkgKmhkbWk7DQo+ICsgICAgICAgaW50IHJldDsNCj4gKw0KPiArICAg ICAgIGhkbWkgPSBtdGtfaGRtaV9jb21tb25fcHJvYmUocGRldik7DQo+ICsgICAgICAgaWYgKElT X0VSUihoZG1pKSkNCj4gKyAgICAgICAgICAgICAgIHJldHVybiBQVFJfRVJSKGhkbWkpOw0KPiAr DQo+ICsgICAgICAgaGRtaS0+aHBkID0gSERNSV9QTFVHX09VVDsNCj4gKw0KPiArICAgICAgIC8q DQo+ICsgICAgICAgICogRGlzYWJsZSBhbGwgSFcgaW50ZXJydXB0cyBhdCBwcm9iZSBzdGFnZSBh bmQgaW5zdGFsbCB0aGUgSVNSDQo+ICsgICAgICAgICogYnV0IGtlZXAgaXQgZGlzYWJsZWQsIGFz IHRoZSByZXN0IG9mIHRoZSBpbnRlcnJ1cHRzIHNldHVwIGlzDQo+ICsgICAgICAgICogZG9uZSBp biB0aGUgLmJyaWRnZV9hdHRhY2goKSBjYWxsYmFjaywgd2hpY2ggd2lsbCBlbmFibGUgYm90aA0K PiArICAgICAgICAqIHRoZSByaWdodCBIVyBJUlFzIGFuZCB0aGUgSVNSLg0KPiArICAgICAgICAq Lw0KPiArICAgICAgIG10a19oZG1pX3YyX2h3aXJxX2Rpc2FibGUoaGRtaSk7DQo+ICsgICAgICAg aXJxX3NldF9zdGF0dXNfZmxhZ3MoaGRtaS0+aXJxLCBJUlFfTk9BVVRPRU4pOw0KPiArICAgICAg IHJldCA9IGRldm1fcmVxdWVzdF90aHJlYWRlZF9pcnEoJnBkZXYtPmRldiwgaGRtaS0+aXJxLCBt dGtfaGRtaV92Ml9pc3IsDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBtdGtfaGRtaV92Ml9pc3JfdGhyZWFkLA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgSVJRX1RZUEVfTEVWRUxfSElHSCwNCj4gKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGRldl9uYW1lKCZwZGV2LT5kZXYpLCBoZG1pKTsNCj4gKyAgICAg ICBpZiAocmV0KQ0KPiArICAgICAgICAgICAgICAgcmV0dXJuIGRldl9lcnJfcHJvYmUoJnBkZXYt PmRldiwgcmV0LCAiQ2Fubm90IHJlcXVlc3QgSVJRXG4iKTsNCj4gKw0KPiArICAgICAgIHJldCA9 IGRldm1fcG1fcnVudGltZV9lbmFibGUoJnBkZXYtPmRldik7DQo+ICsgICAgICAgaWYgKHJldCkN Cj4gKyAgICAgICAgICAgICAgIHJldHVybiBkZXZfZXJyX3Byb2JlKCZwZGV2LT5kZXYsIHJldCwg IkNhbm5vdCBlbmFibGUgUnVudGltZSBQTVxuIik7DQo+ICsNCj4gKyAgICAgICByZXR1cm4gMDsN Cj4gK30NCj4gKw0KPiArc3RhdGljIHZvaWQgbXRrX2hkbWlfdjJfcmVtb3ZlKHN0cnVjdCBwbGF0 Zm9ybV9kZXZpY2UgKnBkZXYpDQo+ICt7DQo+ICsgICAgICAgc3RydWN0IG10a19oZG1pICpoZG1p ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7DQo+ICsNCj4gKyAgICAgICBpMmNfcHV0X2Fk YXB0ZXIoaGRtaS0+ZGRjX2FkcHQpOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgY29uc3Qgc3RydWN0 IG9mX2RldmljZV9pZCBtdGtfZHJtX2hkbWlfdjJfb2ZfaWRzW10gPSB7DQo+ICsgICAgICAgeyAu Y29tcGF0aWJsZSA9ICJtZWRpYXRlayxtdDgxODgtaGRtaS10eCIsIC5kYXRhID0gJm10a19oZG1p X2NvbmZfbXQ4MTg4IH0sDQo+ICsgICAgICAgeyAuY29tcGF0aWJsZSA9ICJtZWRpYXRlayxtdDgx OTUtaGRtaS10eCIsIC5kYXRhID0gJm10a19oZG1pX2NvbmZfbXQ4MTk1IH0sDQo+ICsgICAgICAg eyAvKiBzZW50aW5lbCAqLyB9DQo+ICt9Ow0KPiArTU9EVUxFX0RFVklDRV9UQUJMRShvZiwgbXRr X2RybV9oZG1pX3YyX29mX2lkcyk7DQo+ICsNCj4gK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJp dmVyIG10a19oZG1pX3YyX2RyaXZlciA9IHsNCj4gKyAgICAgICAucHJvYmUgPSBtdGtfaGRtaV92 Ml9wcm9iZSwNCj4gKyAgICAgICAucmVtb3ZlID0gbXRrX2hkbWlfdjJfcmVtb3ZlLA0KPiArICAg ICAgIC5kcml2ZXIgPSB7DQo+ICsgICAgICAgICAgICAgICAubmFtZSA9ICJtZWRpYXRlay1kcm0t aGRtaS12MiIsDQo+ICsgICAgICAgICAgICAgICAub2ZfbWF0Y2hfdGFibGUgPSBtdGtfZHJtX2hk bWlfdjJfb2ZfaWRzLA0KPiArICAgICAgICAgICAgICAgLnBtID0gJm10a19oZG1pX3YyX3BtX29w cywNCj4gKyAgICAgICB9LA0KPiArfTsNCj4gK21vZHVsZV9wbGF0Zm9ybV9kcml2ZXIobXRrX2hk bWlfdjJfZHJpdmVyKTsNCj4gKw0KPiArTU9EVUxFX0FVVEhPUigiQW5nZWxvR2lvYWNjaGlubyBE ZWwgUmVnbm8gPGFuZ2Vsb2dpb2FjY2hpbm8uZGVscmVnbm9AY29sbGFib3JhLmNvbT4+Iik7DQo+ ICtNT0RVTEVfREVTQ1JJUFRJT04oIk1lZGlhVGVrIEhETUl2MiBEcml2ZXIiKTsNCj4gK01PRFVM RV9MSUNFTlNFKCJHUEwiKTsNCj4gK01PRFVMRV9JTVBPUlRfTlMoIkRSTV9NVEtfSERNSSIpOw0K PiAtLQ0KPiAyLjQ4LjENCj4gDQoNCg==