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 619E4C7115D for ; Fri, 20 Jun 2025 10:32:18 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender:Content-Type: Content-Transfer-Encoding:List-Subscribe:List-Help:List-Post:List-Archive: List-Unsubscribe:List-Id:MIME-Version:In-Reply-To:From:References:Cc:To: Subject:Date:Message-ID:Reply-To:Content-ID:Content-Description:Resent-Date: Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Owner; bh=zmLzV1IRt4UM2GmBVYfqcWmq4sVELBc74ZCXMuJqCIc=; b=UIfpSLT8a8RmtlCbwRrEdrhrcz 02EHEL+ol73sXGV8MlaeT6HdPIbcrFOgUaMfGCvD4S8Q/mo5C0qtsjr8XDKGa8MI4MtQsd+bqZQv0 7srCL1Dya2X1YPGLWd43Ma02piTFXIe1l10+lcvSLKDAiT0exUVrbVI5f9huraZGGIvF4SjQ9dg5g 6oiqePozTD2oiT85saT5x8MsHJuG7G2KgOgvWS3cKbrdtOeZ3IjfGmiQz1IBDlQ3eob+ky6bJvJsX xaTcJyfzn3hWgaDuS9GsF34qDiWVMqknmHo3Hp92oOs3wqSTMZQ6Nhfi3ALHT9QbWtY3+UX260x5u HPlrdZMQ==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.98.2 #2 (Red Hat Linux)) id 1uSZ2a-0000000FLIj-1BoM; Fri, 20 Jun 2025 10:32:12 +0000 Received: from mail-japanwestazlp170120003.outbound.protection.outlook.com ([2a01:111:f403:c406::3] helo=OS8PR02CU002.outbound.protection.outlook.com) by bombadil.infradead.org with esmtps (Exim 4.98.2 #2 (Red Hat Linux)) id 1uSY23-0000000FBSX-0CSi for linux-amlogic@lists.infradead.org; Fri, 20 Jun 2025 09:27:36 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=SRtIQj7sRdh6khpOYdEdBpVKa973MHrlLqmjUU39iuWfzVh0xxy1IH2ovwlABHzdPQRW2WmyUcfzxvls9ZboQai+SWnUw//PaR9x7tMUi+Lv8wpzHALPVopZQxbJPqjn0fgPpdEUmBHgW+VphvsuwOZMcF679pteHgg2fn+P+RtbLb/+IoketI4qQuNEiIU/JtRf485iwbDRva6tCEoTOQ+Unvz1kfDXGYALzShAIlkXprNJnZ9Yim63bZDZhY+1HxwK1Hi+CdkxqsgYE+GzheqbW9BcDyeU9m8yJHSKIGERnWtrwuFqn1b3wkL+C6jWktvUsRRRJ7zWwaL7OFh7fg== 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=K7FxyIb2Eogl4fFB1m+zVZt1lwuLH7FavzwNZyZDZ4A=; b=fdbC81ync+AbtFzjJ2HbnRbc5CDnuQks+BCD8hPumAPuyHDbnNUb/2ABFJvhFSDaE6APtqgxTy/3TB6e3Yr3Qs1fjCEJsfbIKgwKavbO/DkZ/iXQGjb3dZyTI6WvyvBsFRikUTbQMZKgMwR0qtQVeUT53Lue0L+F3cPPhq0PDkJX5TnafeHbWasVMDVgJBrJxyFTQOdzidDb/y1FD7Sr4rDgI2IXnrHos3AcsA6CfucFKMajdyiyuLQjDnlC/EMOrdNKI1zlkQ8pOulqpyoZTVLmanlNMfA/U4sW6NTYfdT+NVhdaNrA5ZrAOFA7ocmaLkX6m0nXDqy27Uf57aWDVw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=amlogic.com; dmarc=pass action=none header.from=amlogic.com; dkim=pass header.d=amlogic.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=amlogic.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=K7FxyIb2Eogl4fFB1m+zVZt1lwuLH7FavzwNZyZDZ4A=; b=O6CtCo2Fs0s/IPBqxeORPIS7Lkj2ar8Th/iAif2SlTy7aeSzTtl5eVfveEBOXJvqfIDi/KmDP15XEf8BegTGbYWNihBDJmUI3SklVwtYQj//EdZZzc/viUiSxLl4+BG40c50BS0tFWdx1d3gsrKDmBfuYN3U9fwoTWGgyCotPauPoAgOjINHrxrL5g1uk2ydUJwIEVlKrDVkTCzFd9kbf9OTFPHjrcxOdv/LNnxQMtf5wq7rnnMBO6eV+4uIva+bf6F2uxILqSKXygMwD/VpRUXldFNFN0Ajkvbs4Dy8Z76d3LfRijX0xTwRw9Ev3M3kuwScuSlUxzhTbeZ1yV1m+Q== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=amlogic.com; Received: from TYZPR03MB6896.apcprd03.prod.outlook.com (2603:1096:400:289::14) by TYSPR03MB8130.apcprd03.prod.outlook.com (2603:1096:400:473::5) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8857.25; Fri, 20 Jun 2025 09:27:27 +0000 Received: from TYZPR03MB6896.apcprd03.prod.outlook.com ([fe80::ac4e:718:3b03:3123]) by TYZPR03MB6896.apcprd03.prod.outlook.com ([fe80::ac4e:718:3b03:3123%2]) with mapi id 15.20.8857.022; Fri, 20 Jun 2025 09:27:27 +0000 Message-ID: <1a8cd442-351d-4ff1-929f-aca61f08261f@amlogic.com> Date: Fri, 20 Jun 2025 17:27:23 +0800 User-Agent: Mozilla Thunderbird Subject: Re: [PATCH v2 2/3] spi: Add Amlogic SPISG driver To: Neil Armstrong , Sunny Luo , Mark Brown , Rob Herring , Krzysztof Kozlowski , Conor Dooley Cc: linux-amlogic@lists.infradead.org, linux-spi@vger.kernel.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org References: <20250617-spisg-v2-0-51a605a84bd5@amlogic.com> <20250617-spisg-v2-2-51a605a84bd5@amlogic.com> Content-Language: en-US From: Xianwei Zhao In-Reply-To: X-ClientProxiedBy: TYWP286CA0016.JPNP286.PROD.OUTLOOK.COM (2603:1096:400:178::21) To TYZPR03MB6896.apcprd03.prod.outlook.com (2603:1096:400:289::14) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: TYZPR03MB6896:EE_|TYSPR03MB8130:EE_ X-MS-Office365-Filtering-Correlation-Id: 36ed7090-833f-4853-7f01-08ddafdcabcf X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|1800799024|366016|376014|7053199007; X-Microsoft-Antispam-Message-Info: =?utf-8?B?QU9jcGZubGp5V0JDWE1sblFMWHYxSy9RbE9kaWJkMW5QZjN6ZW42VENIQzVk?= =?utf-8?B?a3V6amNtdzZSdXdSUjJqdkUramU4d256a1g1Uzc3RmhhOHMwWkIyUTl5TEN0?= =?utf-8?B?TEo2eXFCQ0xsblU0aEx2RG5Ea2ZVd3BpOFkrV1EreFFrcy8xZkUwa2F0Zzg5?= =?utf-8?B?dnRSQTNpVmZwZ29PSTBKeTl4Q3MyQ2J5MTQzZ201ckRmZ0s5akhBUmh6VVNW?= =?utf-8?B?cVdIcGRmdTRjZzZ4OVhLSXNwUHQvNnpISWZ2T2IyenR0U0lqWVhOQ2pjM0Rm?= =?utf-8?B?MWhVd1pRMU5ibjJTWUMyejliVzdoTEZIMkpaVmdkdks3cXYvczJZdUtFZDRH?= =?utf-8?B?N0VrTXl6aGdpbVFlZDBmSUFIZ3BzWGFJUGRFV3R5U1N3RDB1dDNzc2RKd2ZQ?= =?utf-8?B?RFErckpEclpxdmplb0ZxQWVTYnB6SFllNmQ3YytRelNxRzFERVI2N001L1NF?= =?utf-8?B?NnV5SEd1RUVFM25SNkpjbmhDaWJXdTNKamtxQWZqNjJsNVA5RWVxZWdMdElu?= =?utf-8?B?ZUgrZWNFQ0FHa0ZyeXJaZVExSkNrV21sZVI1Q0Yrd1JZZTBEMUM0a2VqSVF3?= =?utf-8?B?bjM5eVZOQXZ5ODRGY2xvKy9MaU9Ea0lDR28wZU91TUpyV25uN0NBZnJSNmNL?= =?utf-8?B?ZnRjSk9wb0hzbXV0bkFjUndVbWZBREVLMVJObTZ2MWVqelgwQi92Y2FVTEVp?= =?utf-8?B?M2JNVzExakJJc09yTThVR0t5Rm1EMHFZZkNRbkQ4LzZEczl3T2orOVdNRlRP?= =?utf-8?B?V2Z4REpHS3M4N3F3YmNLMk54SG9COHhRMmNVLzY0Yit1MGVkK0c1am9QNi9K?= =?utf-8?B?aHVJbE9od1JOWmErZjBkeVBGUDFvZUZGMTNMd3lvSitMUlpsdEZnYlV6TWZX?= =?utf-8?B?VW54aCtwMEh0Z2NXMGR2amRuSkVNUFE4aEpYc3R2UWRFckdXRE1COFpBRXMy?= =?utf-8?B?TWU3ak9zU1RQa0c3cnQ5VUIzb0JqM3QwNjMvQnF6dVpwMU94a3N5cEdZZjRI?= =?utf-8?B?MEZHSkIyS0t0U0xjbUZYbVlGV1VzVzRsS2E3NUFoZmNSMzJyVnJ2RU9VUHpm?= =?utf-8?B?MmNHc2krTFdMSHpPZ2pVdmFLSkdNT2d1NVZXa3h1cUgxV0dYT2VxOXN4c0dH?= =?utf-8?B?QXpleXdSbmx2Y0VZbmFVS0VPWVZ1dWJvZUJHUUZFQlB4Vk9NVUd0a3F6Mzh2?= =?utf-8?B?dWhyUEZnUERwSlpVWVdBcjNNajZMS1BKQmVaWTA5bUY5RkZ1dDc1akp6NDU4?= =?utf-8?B?WUFsOXZ2b1cxYmRkblVCc1RjT3k2b1JEcEg1ZVhTMFBaM3V1a0p6TU9iMU5v?= =?utf-8?B?WTFxNmhkeUliZzMrY1BZd1p5UVJtaTM4a3pDMUVhYWw4cVZVV3R3Q2ZmRDlH?= =?utf-8?B?N3BDSXh5WkoyZGdlWlh2YWZhN3FWdVY3OVNvMW9vWTlmeTl0eWlyTUR1NVVr?= =?utf-8?B?Tk1IVVNOMXpzWWdwbHdhMVY2cllVVi9VdllxMitQUmJEVVo3STdwN3lyOE4v?= =?utf-8?B?WWFXTnhpN2Y0Y1JLZ0FFZG1UYTErQTV6WXBVSU9yZlVXbjg0eStTek1uM3lT?= =?utf-8?B?bVY0NDZvSWhXM1VBU2JwWThXQ3hOa3F5MlhnVWpYYm85aGpiY1JtcVNiNkRN?= =?utf-8?B?S3doRDhPUU1tVzUxK0wvL1hVdGZPalZIZGllMElaeGlpNnVaTWxSTldhbnd6?= =?utf-8?B?Ty9NRjNaYjJucUFwMERMWUFpQkdSRDhxYkN1MEtMRkI0NGUxMjNFT1pwYUdZ?= =?utf-8?B?RnJOSk1zRTlxcktobUw5cGtxS2Fza1ljREdFS1UydmZyN3FUQzJ4Y214S3F0?= =?utf-8?B?VUxFREZzR294eHJCVVEwZ2ZwRnpXNjl5QzRIbXM2WS85NytiR0F1TXBXb0l5?= =?utf-8?B?M0NYSzEzZnBMWGRoeU1ZWWpnNzVnSUlRL2tHU2xkeGxTQWpKcmQ2QjVQdGdh?= =?utf-8?Q?S7go75or5Bw=3D?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:TYZPR03MB6896.apcprd03.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(1800799024)(366016)(376014)(7053199007);DIR:OUT;SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?T0J3WUlidE5qaGhEYVh1QXNNK0pOL3JRTDMwVy9YREZSUldudVcwS1dJT1FM?= =?utf-8?B?WGNxdUtVbEY4VmtaOU8vRnJlekl6Ylp0MjhFNTkyYXhiYkRIMVVWMDV0VkFR?= =?utf-8?B?R2dkMGo5bEhReGsxbThzY01OSEhLSkZib0ZrdEJmcG5VanFQUzc1UWR1QzBP?= =?utf-8?B?L2JrYkxpbEtUREVEVWxxM2pwWmV0NzdQbjBkK0pzM3c0TVB5Zzh4eEcyTlpF?= =?utf-8?B?Q1BteDlOMDZCSzNCQlBYMnpYeHprckZWTU9LbWgrWEJHTU5Na241Z1ZPamNo?= =?utf-8?B?akI2ZGFVTTZrUzZyaVZiQjNwSjlPSkVXcTE1QStHM2NlTTRyWHdiTUxvQ1Y4?= =?utf-8?B?RFBaMHIyVm84MEU4TVlKSEdwVlZuWDRFZThBMkNKa3hSdDVES2xEdEZaOVUz?= =?utf-8?B?bm5ySzQ0cGhOcUg3S1dUT3p1UGdPcSs1OUV0YzFydGxGemR1L2NJVzVoS3Y3?= =?utf-8?B?ZXhGN3Vhemk3SGIxZGo5OEk5RzVFVWRkdXNSY04vL0JNR2RoSHRsdnJTbzRK?= =?utf-8?B?allBbFE2MjRjWjkzOGl5bUd1aGZmR0xYU3lib3J5akcxMDhjb0c4UkUyTjNM?= =?utf-8?B?MHphdE1qNjlDTEFCTVNSYjhmQjlOZ2VrZUpjc2tPQ2hXeUxUZVQ0MDB6Nkl5?= =?utf-8?B?b2UyMldYWjNWYTg4Z2o4MlRlemh0a2ZLRzFCS05uN1JEK3JKTEl1SWxCYWhQ?= =?utf-8?B?M20yMDllWTdtU2ViWDB0RUQ3eW9Ebnp4MEU3L1pwZ0ZJVWZGa1BKc1lmVGhv?= =?utf-8?B?TjZlTElHbmtGdnZZblBBZG95YThtUkN5a1BWV0hzRDA3K3UzdCtLamxwWFB2?= =?utf-8?B?OE9sTk9BVmxKemtOa0g4SmtHUUtVS0RCZzczdDZ6YVZIUWNJRDE0eEZVeHB0?= =?utf-8?B?M0hqMmlydTFaWjhQLzlPWUZmVG5leDBrbm9XL0RwblVXNFoxNFZoaE1ET01t?= =?utf-8?B?eVI4K2YzRFd1QkgxR3IwWWc3N2ExS0lITTMwUVZIWjNLSGpsbXU3bytrVjZY?= =?utf-8?B?ZVpSc3J4UGNwNEt2OFBUNUR1UklnZnZVWnFJWlR3SlRmWS9JbkpvQzF5NFY2?= =?utf-8?B?N2VmTWJaSUJhQURjL0o0a2NjUFVxRVdaWXdlang2WkNoZTBOZWVURmo3K2hv?= =?utf-8?B?TjVYbENBMy91VmRZOEpUbW1vd011MmI0aFlxbWNXd3Q5a0dZOWVnTmFTOWJo?= =?utf-8?B?ZWZRcDlKRmFoRXZDMDdHUEpDVFFoblN3RXJ5bWM2SVI2VXRGRmQwTERMa2R2?= =?utf-8?B?WDd0T1dBNFdlb1VLa05ZbjBRR0JVTEUxeU50dG9NdWsrVjRsUlZMUWZNdVEz?= =?utf-8?B?SEQ4ZW5ndjJpVFFMbEVaLy9uVUJWZzg1aER4ODMxR0xMYW1EOFVtWVo0bWFv?= =?utf-8?B?R0lRYWJmZEd4UUExT1VOdkQ3Ny8xbVJESkZ2c0d2bzVDYkZkZ0FlTTJHbVFt?= =?utf-8?B?Z0tFQVovYXhTWFlmdXlsNU00c2ZXb3FnTlBTb24zcFlkT0xURUVWT1Y1WCtW?= =?utf-8?B?YVA2czl0aXFDMkRhTGNmR2ZMbTF4bjNEZFIzS25lNWZSaE1GNjMycWNhbld0?= =?utf-8?B?amdLeDYyTHVrSkExcjRuSVYxdW5QU1ZraWIvcDJRSVhHVUFmU05UWFZKMFg2?= =?utf-8?B?MFBtSmhsTHIyb1o5TmN2b05TenIvRWRaMXJDWEhtWUcvOUxydW9QQjFQYTFU?= =?utf-8?B?a1luaFBEWXFrNGw0ZkFKMmtBVjEwOEQ5SnExNlFoV3U2c1ZWSVJMMDVONXZL?= =?utf-8?B?VXpKNDR2eCtIdUdXSG9jUUNpR3BNWXRUYjFsLzNXY2ZhWXcweHhRd1RtTlNS?= =?utf-8?B?bVpkdm0zN2xJZHRxUEZINmFtZ1NhOCtxb2lCOE1Qc3BZMnVYQmQrL2lSZnc1?= =?utf-8?B?b1lyalV6ZTdUNmYzR0FOR1duckk5R0wrWm10U3NPUTdnd1Fmb3kyb282d1Fm?= =?utf-8?B?bFprQTNVZE5JVUsyZk9JcnphRnFpT2c1N2kxMmNyRFhWR1pybTFqd2NhRGJM?= =?utf-8?B?QkVJQmtBTDdXeHVHNXY1dmJKck5VOEVBUUZBTGxzOExoQzg5NXlHMGZMVUVS?= =?utf-8?B?S2VXcGRvRjdPWTZVNTROWS85RFA4aklva0F4R21zallqN3dSWWtRQU1VeFdx?= =?utf-8?B?NW9rb0xIVFN2ak1HdmJyR1NEaUMrcDlSaEtDNVR2ZUoyc3ZSZ2hZSzJZbmFo?= =?utf-8?B?Ync9PQ==?= X-OriginatorOrg: amlogic.com X-MS-Exchange-CrossTenant-Network-Message-Id: 36ed7090-833f-4853-7f01-08ddafdcabcf X-MS-Exchange-CrossTenant-AuthSource: TYZPR03MB6896.apcprd03.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 20 Jun 2025 09:27:27.2351 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 0df2add9-25ca-4b3a-acb4-c99ddf0b1114 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: ex0uP1bf6YxuxzMexQTmMFXz+fhexul67EWwG15QqDZWavuLzdPtMiS3D7xduGVfUqahEU/6wiKHPDizRd5qrsHc9nXP0iuizuyQGtxUxSQ= X-MS-Exchange-Transport-CrossTenantHeadersStamped: TYSPR03MB8130 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20250620_022735_335429_07FE2640 X-CRM114-Status: GOOD ( 14.44 ) X-BeenThere: linux-amlogic@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Transfer-Encoding: base64 Content-Type: text/plain; charset="utf-8"; Format="flowed" Sender: "linux-amlogic" Errors-To: linux-amlogic-bounces+linux-amlogic=archiver.kernel.org@lists.infradead.org SGkgTmVpbCwKICAgIFRoYW5rcyBmb3IgeW91ciByZXBseS4KCk9uIDIwMjUvNi8xOCAwMDoyOSwg bmVpbC5hcm1zdHJvbmdAbGluYXJvLm9yZyB3cm90ZToKPiBbIEVYVEVSTkFMIEVNQUlMIF0KPiAK PiBIaSwKPiAKPiBPbiAxNy8wNi8yMDI1IDA0OjQ4LCBYaWFud2VpIFpoYW8gdmlhIEI0IFJlbGF5 IHdyb3RlOgo+PiBGcm9tOiBTdW5ueSBMdW8gPHN1bm55Lmx1b0BhbWxvZ2ljLmNvbT4KPj4KPj4g SW50cm9kdWNlZCBzdXBwb3J0IGZvciB0aGUgbmV3IFNQSSBJUCAoU1BJU0cpIGRyaXZlci4gVGhl IFNQSVNHIGlzCj4+IGEgY29tbXVuaWNhdGlvbi1vcmllbnRlZCBTUEkgY29udHJvbGxlciBmcm9t IEFtbG9naWMsc3VwcG9ydGluZwo+PiB0aHJlZSBvcGVyYXRpb24gbW9kZXM6IFBJTywgYmxvY2sg RE1BLCBhbmQgc2NhdHRlci1nYXRoZXIgRE1BLgo+Pgo+PiBTaWduZWQtb2ZmLWJ5OiBTdW5ueSBM dW8gPHN1bm55Lmx1b0BhbWxvZ2ljLmNvbT4KPj4gU2lnbmVkLW9mZi1ieTogWGlhbndlaSBaaGFv IDx4aWFud2VpLnpoYW9AYW1sb2dpYy5jb20+Cj4+IC0tLQo+PiDCoCBkcml2ZXJzL3NwaS9LY29u ZmlnwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHzCoMKgIDkgKwo+PiDCoCBkcml2ZXJzL3NwaS9N YWtlZmlsZcKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgfMKgwqAgMSArCj4+IMKgIGRyaXZlcnMvc3Bp L3NwaS1hbWxvZ2ljLXNwaXNnLmMgfCA4NzggCj4+ICsrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysKPj4gwqAgMyBmaWxlcyBjaGFuZ2VkLCA4ODggaW5zZXJ0aW9ucygrKQo+ Pgo+PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9zcGkvS2NvbmZpZyBiL2RyaXZlcnMvc3BpL0tjb25m aWcKPj4gaW5kZXggYzUxZGEzZmMzNjA0Li5lMTEzNDFkZjJlY2YgMTAwNjQ0Cj4+IC0tLSBhL2Ry aXZlcnMvc3BpL0tjb25maWcKPj4gKysrIGIvZHJpdmVycy9zcGkvS2NvbmZpZwo+PiBAQCAtOTks NiArOTksMTUgQEAgY29uZmlnIFNQSV9BTUxPR0lDX1NQSUZDX0ExCj4+IMKgwqDCoMKgwqDCoMKg IFRoaXMgZW5hYmxlcyBtYXN0ZXIgbW9kZSBzdXBwb3J0IGZvciB0aGUgU1BJRkMgKFNQSSBmbGFz aAo+PiDCoMKgwqDCoMKgwqDCoCBjb250cm9sbGVyKSBhdmFpbGFibGUgaW4gQW1sb2dpYyBBMSAo QTExM0wgU29DKS4KPj4KPj4gK2NvbmZpZyBTUElfQU1MT0dJQ19TUElTRwo+PiArwqDCoMKgwqAg dHJpc3RhdGUgIkFtbG9naWMgU1BJU0cgY29udHJvbGxlciIKPj4gK8KgwqDCoMKgIGRlcGVuZHMg b24gQ09NTU9OX0NMSwo+PiArwqDCoMKgwqAgZGVwZW5kcyBvbiBBUkNIX01FU09OIHx8IENPTVBJ TEVfVEVTVAo+PiArwqDCoMKgwqAgaGVscAo+PiArwqDCoMKgwqDCoMKgIFRoaXMgZW5hYmxlcyBt YXN0ZXIgbW9kZSBzdXBwb3J0IGZvciB0aGUgU1BJU0cgKFNQSSAKPj4gc2NhdHRlci1nYXRoZXIK Pj4gK8KgwqDCoMKgwqDCoCBjb21tdW5pY2F0aW9uIGNvbnRyb2xsZXIpLCB3aGljaCBpcyBhdmFp bGFibGUgb24gcGxhdGZvcm1zIAo+PiBzdWNoIGFzCj4+ICvCoMKgwqDCoMKgwqAgQW1sb2dpYyBB NCBTb0NzLgo+PiArCj4+IMKgIGNvbmZpZyBTUElfQVBQTEUKPj4gwqDCoMKgwqDCoCB0cmlzdGF0 ZSAiQXBwbGUgU29DIFNQSSBDb250cm9sbGVyIHBsYXRmb3JtIGRyaXZlciIKPj4gwqDCoMKgwqDC oCBkZXBlbmRzIG9uIEFSQ0hfQVBQTEUgfHwgQ09NUElMRV9URVNUCj4+IGRpZmYgLS1naXQgYS9k cml2ZXJzL3NwaS9NYWtlZmlsZSBiL2RyaXZlcnMvc3BpL01ha2VmaWxlCj4+IGluZGV4IDRlYTg5 ZjZmYzUzMS4uYjc0ZTMxMDRkNzFmIDEwMDY0NAo+PiAtLS0gYS9kcml2ZXJzL3NwaS9NYWtlZmls ZQo+PiArKysgYi9kcml2ZXJzL3NwaS9NYWtlZmlsZQo+PiBAQCAtMjAsNiArMjAsNyBAQCBvYmot JChDT05GSUdfU1BJX0FMVEVSQSnCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICs9IAo+PiBzcGktYWx0 ZXJhLXBsYXRmb3JtLm8KPj4gwqAgb2JqLSQoQ09ORklHX1NQSV9BTFRFUkFfQ09SRSnCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgICs9IHNwaS1hbHRlcmEtY29yZS5vCj4+IMKgIG9iai0kKENP TkZJR19TUElfQUxURVJBX0RGTCnCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgKz0gc3Bp LWFsdGVyYS1kZmwubwo+PiDCoCBvYmotJChDT05GSUdfU1BJX0FNTE9HSUNfU1BJRkNfQTEpwqAg Kz0gc3BpLWFtbG9naWMtc3BpZmMtYTEubwo+PiArb2JqLSQoQ09ORklHX1NQSV9BTUxPR0lDX1NQ SVNHKcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICs9IHNwaS1hbWxvZ2ljLXNwaXNnLm8KPj4g wqAgb2JqLSQoQ09ORklHX1NQSV9BUFBMRSnCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgICs9IHNwaS1hcHBsZS5vCj4+IMKgIG9iai0kKENPTkZJR19TUElfQVI5MzRYKcKg wqDCoMKgwqDCoMKgwqDCoMKgwqAgKz0gc3BpLWFyOTM0eC5vCj4+IMKgIG9iai0kKENPTkZJR19T UElfQVJNQURBXzM3MDApwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCArPSBzcGktYXJtYWRh LTM3MDAubwo+PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9zcGkvc3BpLWFtbG9naWMtc3Bpc2cuYyAK Pj4gYi9kcml2ZXJzL3NwaS9zcGktYW1sb2dpYy1zcGlzZy5jCj4+IG5ldyBmaWxlIG1vZGUgMTAw NjQ0Cj4+IGluZGV4IDAwMDAwMDAwMDAwMC4uYmY3ZDlkMGFhZTZjCj4+IC0tLSAvZGV2L251bGwK Pj4gKysrIGIvZHJpdmVycy9zcGkvc3BpLWFtbG9naWMtc3Bpc2cuYwo+PiBAQCAtMCwwICsxLDg3 OCBAQAo+PiArLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjArCj4+ICsvKgo+PiAr ICogRHJpdmVyIGZvciBBbWxvZ2ljIFNQSSBjb21tdW5pY2F0aW9uIFNjYXR0ZXItR2F0aGVyIENv bnRyb2xsZXIKPj4gKyAqCj4+ICsgKiBDb3B5cmlnaHQgKEMpIDIwMjUgQW1sb2dpYywgSW5jLiBB bGwgcmlnaHRzIHJlc2VydmVkCj4+ICsgKgo+PiArICogQXV0aG9yOiBTdW5ueSBMdW8gPHN1bm55 Lmx1b0BhbWxvZ2ljLmNvbT4KPj4gKyAqIEF1dGhvcjogWGlhbndlaSBaaGFvIDx4aWFud2VpLnpo YW9AYW1sb2dpYy5jb20+Cj4+ICsgKi8KPj4gKwo+PiArI2luY2x1ZGUgPGxpbnV4L2JpdGZpZWxk Lmg+Cj4+ICsjaW5jbHVkZSA8bGludXgvY2xrLmg+Cj4+ICsjaW5jbHVkZSA8bGludXgvZGV2aWNl Lmg+Cj4+ICsjaW5jbHVkZSA8bGludXgvaW8uaD4KPj4gKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwu aD4KPj4gKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KPj4gKyNpbmNsdWRlIDxsaW51eC9vZi5o Pgo+PiArI2luY2x1ZGUgPGxpbnV4L2Nsay1wcm92aWRlci5oPgo+PiArI2luY2x1ZGUgPGxpbnV4 L2RtYS1tYXBwaW5nLmg+Cj4+ICsjaW5jbHVkZSA8bGludXgvcG1fcnVudGltZS5oPgo+PiArI2lu Y2x1ZGUgPGxpbnV4L3BtX2RvbWFpbi5oPgo+PiArI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2Rl dmljZS5oPgo+PiArI2luY2x1ZGUgPGxpbnV4L3NwaS9zcGkuaD4KPj4gKyNpbmNsdWRlIDxsaW51 eC90eXBlcy5oPgo+PiArI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgo+PiArI2luY2x1ZGUg PGxpbnV4L3Jlc2V0Lmg+Cj4+ICsjaW5jbHVkZSA8bGludXgvcGluY3RybC9jb25zdW1lci5oPgo+ PiArI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+Cj4+ICsjaW5jbHVkZSA8bGludXgvY2FjaGVmbHVz aC5oPgo+PiArI2luY2x1ZGUgPGxpbnV4L3JlZ21hcC5oPgo+PiArCj4+ICsvKiBSZWdpc3RlciBN YXAgKi8KPj4gKyNkZWZpbmUgU1BJU0dfUkVHX0NGR19SRUFEWcKgwqDCoMKgwqDCoMKgwqDCoCAw eDAwCj4+ICsKPj4gKyNkZWZpbmUgU1BJU0dfUkVHX0NGR19TUEnCoMKgwqDCoMKgwqDCoMKgwqDC oMKgIDB4MDQKPj4gKyNkZWZpbmUgRklFTERfQlVTNjRfRU7CoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgIEJJVCgwKQo+IAo+IFdlaXJkIEZJRUxEXyBkZWZpbmUsIGl0IGNvdWxkIGNvbGxpZGUg d2l0aCBGSUVMRF9QUkVQL0dFVCwgdXN1YWxseQo+IHdlIHByZXBlbnQgdGhlIHJlZ2lzdGVyIG5h bWUgbGlrZToKPiAjZGVmaW5lIENGR19TUElfQlVTNjRfRU7CoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqAgQklUKDApCj4gCgpXaWxsIGRvLgoKPj4gKyNkZWZpbmUgRklFTERfU0xBVkVfRU7C oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIEJJVCgxKQo+PiArI2RlZmluZSBGSUVMRF9TTEFW RV9TRUxFQ1TCoMKgIEdFTk1BU0soMywgMikKPj4gKyNkZWZpbmUgRklFTERfU0ZMQVNIX1dQwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgQklUKDQpCj4+ICsjZGVmaW5lIEZJRUxEX1NGTEFTSF9I RMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIEJJVCg1KQo+PiArLyogc3RhcnQgb24gdnN5bmMg cmlzaW5nICovCj4+ICsjZGVmaW5lIEZJRUxEX0hXX1BPU8KgwqDCoMKgwqDCoMKgwqAgQklUKDYp Cj4+ICsvKiBzdGFydCBvbiB2c3luYyBmYWxsaW5nICovCj4+ICsjZGVmaW5lIEZJRUxEX0hXX05F R8KgwqDCoMKgwqDCoMKgwqAgQklUKDcpCj4+ICsKPj4gKyNkZWZpbmUgU1BJU0dfUkVHX0NGR19T VEFSVMKgwqDCoMKgwqDCoMKgwqDCoCAweDA4Cj4+ICsjZGVmaW5lIEZJRUxEX0JVUzY0X0VOwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBCSVQoMCkKPj4gKyNkZWZpbmUgRklFTERfQkxPQ0tf TlVNwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgR0VOTUFTSygxOSwgMCkKPj4gKyNkZWZpbmUg RklFTERfQkxPQ0tfU0laRcKgwqDCoMKgIEdFTk1BU0soMjIsIDIwKQo+PiArI2RlZmluZSBGSUVM RF9EQVRBX0NPTU1BTkTCoMKgIEJJVCgyMykKPj4gKyNkZWZpbmUgRklFTERfT1BfTU9ERcKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBHRU5NQVNLKDI1LCAyNCkKPj4gKyNkZWZpbmUgRklF TERfUlhEX01PREXCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIEdFTk1BU0soMjcsIDI2KQo+ PiArI2RlZmluZSBGSUVMRF9UWERfTU9ERcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgR0VO TUFTSygyOSwgMjgpCj4+ICsjZGVmaW5lIEZJRUxEX0VPQ8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAg QklUKDMwKQo+PiArI2RlZmluZSBGSUVMRF9QRU5EwqDCoMKgwqDCoMKgwqDCoMKgwqAgQklUKDMx KQo+PiArCj4+ICsjZGVmaW5lIFNQSVNHX1JFR19DRkdfQlVTwqDCoMKgwqDCoMKgwqDCoMKgwqDC oCAweDBDCj4+ICsjZGVmaW5lIEZJRUxEX0NMS19ESVbCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqAgR0VOTUFTSyg3LCAwKQo+PiArI2RlZmluZSBDTEtfRElWX1dJRFRIwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCA4Cj4+ICsjZGVmaW5lIEZJRUxEX1JY X1RVTklOR8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIEdFTk1BU0soMTEsIDgpCj4+ICsjZGVm aW5lIEZJRUxEX1RYX1RVTklOR8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIEdFTk1BU0soMTUs IDEyKQo+PiArI2RlZmluZSBGSUVMRF9DU19TRVRVUMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqAgR0VOTUFTSygxOSwgMTYpCj4+ICsjZGVmaW5lIEZJRUxEX0xBTkXCoMKgwqDCoMKgwqDCoMKg wqDCoCBHRU5NQVNLKDIxLCAyMCkKPj4gKyNkZWZpbmUgRklFTERfSEFMRl9EVVBMRVjCoMKgwqAg QklUKDIyKQo+PiArI2RlZmluZSBGSUVMRF9CX0xfRU5ESUFOwqDCoMKgwqAgQklUKDIzKQo+PiAr I2RlZmluZSBGSUVMRF9EQ19NT0RFwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIEJJVCgy NCkKPj4gKyNkZWZpbmUgRklFTERfTlVMTF9DVEzCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg IEJJVCgyNSkKPj4gKyNkZWZpbmUgRklFTERfRFVNTVlfQ1RMwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqAgQklUKDI2KQo+PiArI2RlZmluZSBGSUVMRF9SRUFEX1RVUk7CoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoCBHRU5NQVNLKDI4LCAyNykKPj4gKyNkZWZpbmUgRklFTERfS0VFUF9TU8KgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBCSVQoMjkpCj4+ICsjZGVmaW5lIEZJRUxEX0NQSEHC oMKgwqDCoMKgwqDCoMKgwqDCoCBCSVQoMzApCj4+ICsjZGVmaW5lIEZJRUxEX0NQT0zCoMKgwqDC oMKgwqDCoMKgwqDCoCBCSVQoMzEpCj4+ICsKPj4gKyNkZWZpbmUgU1BJU0dfUkVHX1BJT19UWF9E QVRBX0zCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAweDEwCj4+ICsjZGVmaW5lIFNQSVNHX1JF R19QSU9fVFhfREFUQV9IwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgMHgxNAo+PiArI2RlZmlu ZSBTUElTR19SRUdfUElPX1JYX0RBVEFfTMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIDB4MTgK Pj4gKyNkZWZpbmUgU1BJU0dfUkVHX1BJT19SWF9EQVRBX0jCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoCAweDFDCj4+ICsjZGVmaW5lIFNQSVNHX1JFR19NRU1fVFhfQUREUl9MwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqAgMHgxMAo+PiArI2RlZmluZSBTUElTR19SRUdfTUVNX1RYX0FERFJfSMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIDB4MTQKPj4gKyNkZWZpbmUgU1BJU0dfUkVHX01FTV9S WF9BRERSX0zCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAweDE4Cj4+ICsjZGVmaW5lIFNQSVNH X1JFR19NRU1fUlhfQUREUl9IwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgMHgxQwo+PiArI2Rl ZmluZSBTUElTR19SRUdfREVTQ19MSVNUX0zCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAg MHgyMAo+PiArI2RlZmluZSBTUElTR19SRUdfREVTQ19MSVNUX0jCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqAgMHgyNAo+PiArI2RlZmluZSBGSUVMRF9ERVNDX1BFTkRJTkfCoMKgwqDCoMKg wqDCoMKgwqDCoCBCSVQoMzEpCj4+ICsjZGVmaW5lIFNQSVNHX1JFR19ERVNDX0NVUlJFTlRfTMKg wqDCoMKgIDB4MjgKPj4gKyNkZWZpbmUgU1BJU0dfUkVHX0RFU0NfQ1VSUkVOVF9IwqDCoMKgwqAg MHgyYwo+PiArI2RlZmluZSBTUElTR19SRUdfSVJRX1NUU8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAg MHgzMAo+PiArI2RlZmluZSBTUElTR19SRUdfSVJRX0VOQUJMRcKgwqDCoMKgwqDCoMKgwqAgMHgz NAo+PiArI2RlZmluZSBGSUVMRF9SQ0hfREVTQ19FT0PCoMKgwqDCoMKgwqDCoMKgwqDCoCBCSVQo MCkKPj4gKyNkZWZpbmUgRklFTERfUkNIX0RFU0NfSU5WQUxJRMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqAgQklUKDEpCj4+ICsjZGVmaW5lIEZJRUxEX1JDSF9ERVNDX1JFU1DCoMKgwqDCoMKg wqDCoMKgwqAgQklUKDIpCj4+ICsjZGVmaW5lIEZJRUxEX1JDSF9EQVRBX1JFU1DCoMKgwqDCoMKg wqDCoMKgwqAgQklUKDMpCj4+ICsjZGVmaW5lIEZJRUxEX1dDSF9ERVNDX0VPQ8KgwqDCoMKgwqDC oMKgwqDCoMKgIEJJVCg0KQo+PiArI2RlZmluZSBGSUVMRF9XQ0hfREVTQ19JTlZBTElEwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBCSVQoNSkKPj4gKyNkZWZpbmUgRklFTERfV0NIX0RFU0Nf UkVTUMKgwqDCoMKgwqDCoMKgwqDCoCBCSVQoNikKPj4gKyNkZWZpbmUgRklFTERfV0NIX0RBVEFf UkVTUMKgwqDCoMKgwqDCoMKgwqDCoCBCSVQoNykKPj4gKyNkZWZpbmUgRklFTERfREVTQ19FUlLC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBCSVQoOCkKPj4gKyNk ZWZpbmUgRklFTERfU1BJX1JFQURZwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgIEJJVCg5KQo+PiArI2RlZmluZSBGSUVMRF9ERVNDX0RPTkXCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgQklUKDEwKQo+PiArI2RlZmluZSBGSUVMRF9ERVND X0NIQUlOX0RPTkXCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgQklUKDExKQo+PiArCj4+ ICsjZGVmaW5lIFNQSVNHX01BWF9SRUfCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgIDB4NDAKPj4gKwo+PiArI2RlZmluZSBTUElTR19CTE9DS19NQVjCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgMHgxMDAwMDAKPj4gKwo+PiArI2Rl ZmluZSBTUElTR19PUF9NT0RFX1dSSVRFX0NNRMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIDAK Pj4gKyNkZWZpbmUgU1BJU0dfT1BfTU9ERV9SRUFEX1NUU8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqAgMQo+PiArI2RlZmluZSBTUElTR19PUF9NT0RFX1dSSVRFwqDCoMKgwqDCoMKgwqDCoMKg IDIKPj4gKyNkZWZpbmUgU1BJU0dfT1BfTU9ERV9SRUFEwqDCoMKgwqDCoMKgwqDCoMKgwqAgMwo+ PiArCj4+ICsjZGVmaW5lIFNQSVNHX0RBVEFfTU9ERV9OT05FwqDCoMKgwqDCoMKgwqDCoCAwCj4+ ICsjZGVmaW5lIFNQSVNHX0RBVEFfTU9ERV9QSU/CoMKgwqDCoMKgwqDCoMKgwqAgMQo+PiArI2Rl ZmluZSBTUElTR19EQVRBX01PREVfTUVNwqDCoMKgwqDCoMKgwqDCoMKgIDIKPj4gKyNkZWZpbmUg U1BJU0dfREFUQV9NT0RFX1NHwqDCoMKgwqDCoMKgwqDCoMKgwqAgMwo+PiArCj4+ICsjZGVmaW5l IFNQSVNHX0NMS19ESVZfTUFYwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAyNTYKPj4gKy8qIHJlY29t bWVuZGVkIGJ5IHNwZWNpZmljYXRpb24gKi8KPj4gKyNkZWZpbmUgU1BJU0dfQ0xLX0RJVl9NSU7C oMKgwqDCoMKgwqDCoMKgwqDCoMKgIDQKPj4gKyNkZWZpbmUgRElWX05VTSAoU1BJU0dfQ0xLX0RJ Vl9NQVggLSBTUElTR19DTEtfRElWX01JTiArIDEpCj4+ICsKPj4gKyNkZWZpbmUgU1BJU0dfUENM S19SQVRFX01JTsKgwqDCoMKgwqDCoMKgwqDCoCAyNDAwMDAwMAo+PiArCj4+ICsjZGVmaW5lIFNQ SVNHX1NJTkdMRV9TUEnCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgMAo+PiArI2RlZmluZSBTUElT R19EVUFMX1NQScKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIDEK Pj4gKyNkZWZpbmUgU1BJU0dfUVVBRF9TUEnCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoCAyCj4+ICsKPj4gK3N0cnVjdCBzcGlzZ19zZ19saW5rIHsKPj4gKyNkZWZp bmUgRklFTERfQUREUl9WQUxJRMKgwqDCoMKgIEJJVCgwKQo+PiArI2RlZmluZSBGSUVMRF9BRERS X0VPQ8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgQklUKDEpCj4+ICsjZGVmaW5lIEZJRUxE X0FERFJfSVJRwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBCSVQoMikKPj4gKyNkZWZpbmUg RklFTERfQUREUl9BQ1TCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIEdFTk1BU0soNSwgMykK Pj4gKyNkZWZpbmUgRklFTERfQUREUl9SSU5HwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgQklU KDYpCj4+ICsjZGVmaW5lIEZJRUxEX0FERFJfTEVOwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oCBHRU5NQVNLKDMxLCA4KQo+PiArwqDCoMKgwqAgdTMywqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoCBhZGRyOwo+PiArwqDCoMKgwqAgdTMywqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBhZGRyMTsKPj4gK307Cj4+ICsKPj4gK3N0cnVjdCBzcGlz Z19kZXNjcmlwdG9yIHsKPj4gK8KgwqDCoMKgIHUzMsKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGNmZ19zdGFydDsKPj4gK8KgwqDCoMKgIHUz MsKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg IGNmZ19idXM7Cj4+ICvCoMKgwqDCoCB1NjTCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB0eF9wYWRkcjsKPj4gK8KgwqDCoMKgIHU2NMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHJ4X3Bh ZGRyOwo+PiArfTsKPj4gKwo+PiArc3RydWN0IHNwaXNnX2Rlc2NyaXB0b3JfZXh0cmEgewo+PiAr wqDCoMKgwqAgc3RydWN0IHNwaXNnX3NnX2xpbmvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICp0eF9j Y3NnOwo+PiArwqDCoMKgwqAgc3RydWN0IHNwaXNnX3NnX2xpbmvCoMKgwqDCoMKgwqDCoMKgwqDC oMKgICpyeF9jY3NnOwo+PiArwqDCoMKgwqAgaW50wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgdHhfY2NzZ19sZW47Cj4+ICvCoMKgwqDCoCBp bnTCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oCByeF9jY3NnX2xlbjsKPj4gK307Cj4+ICsKPj4gK3N0cnVjdCBzcGlzZ19kZXZpY2Ugewo+PiAr wqDCoMKgwqAgc3RydWN0IHNwaV9jb250cm9sbGVywqDCoMKgwqDCoMKgwqDCoMKgwqAgKmNvbnRy b2xsZXI7Cj4+ICvCoMKgwqDCoCBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlwqDCoMKgwqDCoMKgwqDC oMKgICpwZGV2Owo+PiArwqDCoMKgwqAgc3RydWN0IHJlZ21hcMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoCAqbWFwOwo+PiArwqDCoMKgwqAgc3RydWN0IGNsa8KgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAqY29yZTsKPj4gK8KgwqDCoMKgIHN0cnVj dCBjbGvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgKnBjbGs7Cj4+ ICvCoMKgwqDCoCBzdHJ1Y3QgY2xrwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgICpzY2xrOwo+PiArwqDCoMKgwqAgc3RydWN0IGNsa19kaXZfdGFibGXCoMKgwqDCoMKg wqDCoMKgwqDCoMKgICp0Ymw7Cj4+ICvCoMKgwqDCoCBzdHJ1Y3QgY29tcGxldGlvbsKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqAgY29tcGxldGlvbjsKPj4gK8KgwqDCoMKgIHUzMsKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHN0YXR1czsK Pj4gK8KgwqDCoMKgIHUzMsKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgIHNwZWVkX2h6Owo+PiArwqDCoMKgwqAgdTMywqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgZWZmZWN0aXZlX3NwZWVk X2h6Owo+PiArwqDCoMKgwqAgdTMywqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqAgYnl0ZXNfcGVyX3dvcmQ7Cj4+ICvCoMKgwqDCoCB1MzLCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBjZmdf c3BpOwo+PiArwqDCoMKgwqAgdTMywqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqAgY2ZnX3N0YXJ0Owo+PiArwqDCoMKgwqAgdTMywqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgY2ZnX2J1czsK Pj4gK307Cj4+ICsKPj4gK3N0YXRpYyBpbnQgc3BpX2RlbGF5X3RvX3NjbGsodTMyIHNsY2tfc3Bl ZWRfaHosIHN0cnVjdCBzcGlfZGVsYXkgKmRlbGF5KQo+PiArewo+PiArwqDCoMKgwqAgdTMyIG5z Owo+PiArCj4+ICvCoMKgwqDCoCBpZiAoIWRlbGF5KQo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgIHJldHVybiAwOwo+PiArCj4+ICvCoMKgwqDCoCBpZiAoZGVsYXktPnVuaXQgPT0gU1BJX0RF TEFZX1VOSVRfU0NLKQo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHJldHVybiBkZWxheS0+ dmFsdWU7Cj4+ICsKPj4gK8KgwqDCoMKgIG5zID0gc3BpX2RlbGF5X3RvX25zKGRlbGF5LCBOVUxM KTsKPj4gK8KgwqDCoMKgIGlmIChucyA8IDApCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAg cmV0dXJuIDA7Cj4+ICsKPj4gK8KgwqDCoMKgIHJldHVybiBESVZfUk9VTkRfVVBfVUxMKHNsY2tf c3BlZWRfaHogKiBucywgTlNFQ19QRVJfU0VDKTsKPj4gK30KPj4gKwo+PiArc3RhdGljIGlubGlu ZSB1MzIgYW1sX3NwaXNnX3NlbV9kb3duX3JlYWQoc3RydWN0IHNwaXNnX2RldmljZSAqc3Bpc2cp Cj4+ICt7Cj4+ICvCoMKgwqDCoCB1MzIgcmV0Owo+PiArCj4+ICvCoMKgwqDCoCByZWdtYXBfcmVh ZChzcGlzZy0+bWFwLCBTUElTR19SRUdfQ0ZHX1JFQURZLCAmcmV0KTsKPj4gK8KgwqDCoMKgIGlm IChyZXQpCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcmVnbWFwX3dyaXRlKHNwaXNnLT5t YXAsIFNQSVNHX1JFR19DRkdfUkVBRFksIDApOwo+PiArCj4+ICvCoMKgwqDCoCByZXR1cm4gcmV0 Owo+PiArfQo+PiArCj4+ICtzdGF0aWMgaW5saW5lIHZvaWQgYW1sX3NwaXNnX3NlbV91cF93cml0 ZShzdHJ1Y3Qgc3Bpc2dfZGV2aWNlICpzcGlzZykKPj4gK3sKPj4gK8KgwqDCoMKgIHJlZ21hcF93 cml0ZShzcGlzZy0+bWFwLCBTUElTR19SRUdfQ0ZHX1JFQURZLCAxKTsKPj4gK30KPj4gKwo+PiAr c3RhdGljIGludCBhbWxfc3Bpc2dfc2V0X3NwZWVkKHN0cnVjdCBzcGlzZ19kZXZpY2UgKnNwaXNn LCB1aW50IAo+PiBzcGVlZF9oeikKPj4gK3sKPj4gK8KgwqDCoMKgIHUzMiBjZmdfYnVzOwo+PiAr Cj4+ICvCoMKgwqDCoCBpZiAoIXNwZWVkX2h6IHx8IHNwZWVkX2h6ID09IHNwaXNnLT5zcGVlZF9o eikKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCByZXR1cm4gMDsKPj4gKwo+PiArwqDCoMKg wqAgc3Bpc2ctPnNwZWVkX2h6ID0gc3BlZWRfaHo7Cj4+ICvCoMKgwqDCoCBjbGtfc2V0X3JhdGUo c3Bpc2ctPnNjbGssIHNwZWVkX2h6KTsKPiAKPiBZb3Ugc2hvdWxkIGNoZWNrIGNsa19zZXRfcmF0 ZSgpLCBhbmQgaXQgc2VlbXMgeW91IGp1c3QgbmV2ZXIgCj4gcHJlcGFyZV9lbmFibGUgdGhpcyBj bG9jay4uLgo+IAoKSW5kZWVkLCBXaWxsIGZpeCBpdC4KCj4+ICvCoMKgwqDCoCAvKiBTdG9yZSB0 aGUgZGl2IGZvciB0aGUgZGVzY3JpcHRvciBtb2RlICovCj4+ICvCoMKgwqDCoCByZWdtYXBfcmVh ZChzcGlzZy0+bWFwLCBTUElTR19SRUdfQ0ZHX0JVUywgJmNmZ19idXMpOwo+PiArwqDCoMKgwqAg c3Bpc2ctPmNmZ19idXMgJj0gfkZJRUxEX0NMS19ESVY7Cj4+ICvCoMKgwqDCoCBzcGlzZy0+Y2Zn X2J1cyB8PSBjZmdfYnVzICYgRklFTERfQ0xLX0RJVjsKPj4gK8KgwqDCoMKgIHNwaXNnLT5lZmZl Y3RpdmVfc3BlZWRfaHogPSBjbGtfZ2V0X3JhdGUoc3Bpc2ctPnNjbGspOwo+PiArwqDCoMKgwqAg ZGV2X2RiZygmc3Bpc2ctPnBkZXYtPmRldiwKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAi ZGVzaXJlZCBzcGVlZCAlZEh6LCBlZmZlY3RpdmUgc3BlZWQgJWRIelxuIiwKPj4gK8KgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoCBzcGVlZF9oeiwgc3Bpc2ctPmVmZmVjdGl2ZV9zcGVlZF9oeik7Cj4+ ICsKPj4gK8KgwqDCoMKgIHJldHVybiAwOwo+PiArfQo+PiArCj4+ICtzdGF0aWMgaW50IGFtbF9z cGlzZ19zZXR1cF9kZXZpY2Uoc3RydWN0IHNwaXNnX2RldmljZSAqc3Bpc2csCj4+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgc3Ry dWN0IHNwaV9kZXZpY2UgKnNwaSkKPj4gK3sKPj4gK8KgwqDCoMKgIGlmICghc3BpLT5iaXRzX3Bl cl93b3JkIHx8IHNwaS0+Yml0c19wZXJfd29yZCAlIDgpIHsKPj4gK8KgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoCBkZXZfZXJyKCZzcGlzZy0+cGRldi0+ZGV2LCAiaW52YWxpZCB3b3JkbGVuICVkXG4i LCAKPj4gc3BpLT5iaXRzX3Blcl93b3JkKTsKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBy ZXR1cm4gLUVJTlZBTDsKPj4gK8KgwqDCoMKgIH0KPj4gKwo+PiArwqDCoMKgwqAgc3Bpc2ctPmJ5 dGVzX3Blcl93b3JkID0gc3BpLT5iaXRzX3Blcl93b3JkID4+IDM7Cj4+ICsKPj4gK8KgwqDCoMKg IHNwaXNnLT5jZmdfc3BpICY9IH5GSUVMRF9TTEFWRV9TRUxFQ1Q7Cj4+ICvCoMKgwqDCoCBzcGlz Zy0+Y2ZnX3NwaSB8PSBGSUVMRF9QUkVQKEZJRUxEX1NMQVZFX1NFTEVDVCwgCj4+IHNwaV9nZXRf Y2hpcHNlbGVjdChzcGksIDApKTsKPj4gKwo+PiArwqDCoMKgwqAgc3Bpc2ctPmNmZ19idXMgJj0g fihGSUVMRF9DUE9MIHwgRklFTERfQ1BIQSB8IEZJRUxEX0JfTF9FTkRJQU4gfCAKPj4gRklFTERf SEFMRl9EVVBMRVgpOwo+PiArwqDCoMKgwqAgc3Bpc2ctPmNmZ19idXMgfD0gRklFTERfUFJFUChG SUVMRF9DUE9MLCAhIShzcGktPm1vZGUgJiAKPj4gU1BJX0NQT0wpKSB8Cj4+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBGSUVMRF9QUkVQKEZJRUxEX0NQSEEs ICEhKHNwaS0+bW9kZSAmIAo+PiBTUElfQ1BIQSkpIHwKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIEZJRUxEX1BSRVAoRklFTERfQl9MX0VORElBTiwgISEo c3BpLT5tb2RlICYgCj4+IFNQSV9MU0JfRklSU1QpKSB8Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBGSUVMRF9QUkVQKEZJRUxEX0hBTEZfRFVQTEVYLCAh IShzcGktPm1vZGUgJiAKPj4gU1BJXzNXSVJFKSk7Cj4+ICsKPj4gK8KgwqDCoMKgIHJldHVybiAw Owo+PiArfQo+PiArCj4+ICtzdGF0aWMgYm9vbCBhbWxfc3Bpc2dfY2FuX2RtYShzdHJ1Y3Qgc3Bp X2NvbnRyb2xsZXIgKmN0bHIsCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgIHN0cnVjdCBzcGlfZGV2aWNlICpzcGksCj4+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHN0cnVjdCBzcGlfdHJh bnNmZXIgKnhmZXIpCj4+ICt7Cj4+ICvCoMKgwqDCoCByZXR1cm4gdHJ1ZTsKPj4gK30KPj4gKwo+ PiArc3RhdGljIHZvaWQgYW1sX3NwaXNnX3NnX3hsYXRlKHN0cnVjdCBzZ190YWJsZSAqc2d0LCBz dHJ1Y3QgCj4+IHNwaXNnX3NnX2xpbmsgKmNjc2cpCj4+ICt7Cj4+ICvCoMKgwqDCoCBzdHJ1Y3Qg c2NhdHRlcmxpc3QgKnNnOwo+PiArwqDCoMKgwqAgaW50IGk7Cj4+ICsKPj4gK8KgwqDCoMKgIGZv cl9lYWNoX3NnKHNndC0+c2dsLCBzZywgc2d0LT5uZW50cywgaSkgewo+PiArwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgIGNjc2ctPmFkZHIgPSBGSUVMRF9QUkVQKEZJRUxEX0FERFJfVkFMSUQsIDEp IHwKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg IEZJRUxEX1BSRVAoRklFTERfQUREUl9SSU5HLCAwKSB8Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBGSUVMRF9QUkVQKEZJRUxEX0FERFJfRU9D LCBzZ19pc19sYXN0KHNnKSkgfAo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqAgRklFTERfUFJFUChGSUVMRF9BRERSX0xFTiwgc2dfZG1hX2xlbihz ZykpOwo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGNjc2ctPmFkZHIxID0gKHUzMilzZ19k bWFfYWRkcmVzcyhzZyk7Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgY2NzZysrOwo+PiAr wqDCoMKgwqAgfQo+PiArfQo+PiArCj4+ICtzdGF0aWMgaW50IG5iaXRzX3RvX2xhbmVbXSA9IHsK Pj4gK8KgwqDCoMKgIFNQSVNHX1NJTkdMRV9TUEksCj4+ICvCoMKgwqDCoCBTUElTR19TSU5HTEVf U1BJLAo+PiArwqDCoMKgwqAgU1BJU0dfRFVBTF9TUEksCj4+ICvCoMKgwqDCoCAtRUlOVkFMLAo+ PiArwqDCoMKgwqAgU1BJU0dfUVVBRF9TUEkKPj4gK307Cj4+ICsKPj4gK3N0YXRpYyBpbnQgYW1s X3NwaXNnX3NldHVwX3RyYW5zZmVyKHN0cnVjdCBzcGlzZ19kZXZpY2UgKnNwaXNnLAo+PiArwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoCBzdHJ1Y3Qgc3BpX3RyYW5zZmVyICp4ZmVyLAo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBzdHJ1Y3Qgc3Bpc2df ZGVzY3JpcHRvciAqZGVzYywKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgc3RydWN0IHNwaXNnX2Rlc2NyaXB0b3JfZXh0 cmEgKmV4ZGVzYykKPj4gK3sKPj4gK8KgwqDCoMKgIGludCBibG9ja19zaXplLCBibG9ja3M7Cj4+ ICvCoMKgwqDCoCBzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmc3Bpc2ctPnBkZXYtPmRldjsKPj4gK8Kg wqDCoMKgIHN0cnVjdCBzcGlzZ19zZ19saW5rICpjY3NnOwo+PiArwqDCoMKgwqAgaW50IGNjc2df bGVuOwo+PiArwqDCoMKgwqAgZG1hX2FkZHJfdCBwYWRkcjsKPj4gK8KgwqDCoMKgIGludCByZXQ7 Cj4+ICsKPj4gK8KgwqDCoMKgIG1lbXNldChkZXNjLCAwLCBzaXplb2YoKmRlc2MpKTsKPj4gK8Kg wqDCoMKgIGlmIChleGRlc2MpCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgbWVtc2V0KGV4 ZGVzYywgMCwgc2l6ZW9mKCpleGRlc2MpKTsKPj4gK8KgwqDCoMKgIGFtbF9zcGlzZ19zZXRfc3Bl ZWQoc3Bpc2csIHhmZXItPnNwZWVkX2h6KTsKPj4gK8KgwqDCoMKgIHhmZXItPmVmZmVjdGl2ZV9z cGVlZF9oeiA9IHNwaXNnLT5lZmZlY3RpdmVfc3BlZWRfaHo7Cj4+ICsKPj4gK8KgwqDCoMKgIGRl c2MtPmNmZ19zdGFydCA9IHNwaXNnLT5jZmdfc3RhcnQ7Cj4+ICvCoMKgwqDCoCBkZXNjLT5jZmdf YnVzID0gc3Bpc2ctPmNmZ19idXM7Cj4+ICsKPj4gK8KgwqDCoMKgIGJsb2NrX3NpemUgPSB4ZmVy LT5iaXRzX3Blcl93b3JkID4+IDM7Cj4+ICvCoMKgwqDCoCBibG9ja3MgPSB4ZmVyLT5sZW4gLyBi bG9ja19zaXplOwo+PiArCj4+ICvCoMKgwqDCoCBkZXNjLT5jZmdfc3RhcnQgfD0gRklFTERfUFJF UChGSUVMRF9FT0MsIDApOwo+PiArwqDCoMKgwqAgZGVzYy0+Y2ZnX2J1cyB8PSBGSUVMRF9QUkVQ KEZJRUxEX0tFRVBfU1MsICF4ZmVyLT5jc19jaGFuZ2UpOwo+PiArwqDCoMKgwqAgZGVzYy0+Y2Zn X2J1cyB8PSBGSUVMRF9QUkVQKEZJRUxEX05VTExfQ1RMLCAwKTsKPj4gKwo+PiArwqDCoMKgwqAg aWYgKHhmZXItPnR4X2J1ZiB8fCB4ZmVyLT50eF9kbWEpIHsKPj4gK8KgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoCBkZXNjLT5jZmdfYnVzIHw9IEZJRUxEX1BSRVAoRklFTERfTEFORSwgCj4+IG5iaXRz X3RvX2xhbmVbeGZlci0+dHhfbmJpdHNdKTsKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBk ZXNjLT5jZmdfc3RhcnQgfD0gRklFTERfUFJFUChGSUVMRF9PUF9NT0RFLCAKPj4gU1BJU0dfT1Bf TU9ERV9XUklURSk7Cj4+ICvCoMKgwqDCoCB9Cj4+ICvCoMKgwqDCoCBpZiAoeGZlci0+cnhfYnVm IHx8IHhmZXItPnJ4X2RtYSkgewo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGRlc2MtPmNm Z19idXMgfD0gRklFTERfUFJFUChGSUVMRF9MQU5FLCAKPj4gbmJpdHNfdG9fbGFuZVt4ZmVyLT5y eF9uYml0c10pOwo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGRlc2MtPmNmZ19zdGFydCB8 PSBGSUVMRF9QUkVQKEZJRUxEX09QX01PREUsIAo+PiBTUElTR19PUF9NT0RFX1JFQUQpOwo+PiAr wqDCoMKgwqAgfQo+PiArCj4+ICvCoMKgwqDCoCBpZiAoRklFTERfR0VUKEZJRUxEX09QX01PREUs IGRlc2MtPmNmZ19zdGFydCkgPT0gCj4+IFNQSVNHX09QX01PREVfUkVBRF9TVFMpIHsKPj4gK8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBkZXNjLT5jZmdfc3RhcnQgfD0gRklFTERfUFJFUChGSUVM RF9CTE9DS19TSVpFLCBibG9ja3MpIHwKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIEZJRUxEX1BSRVAoRklFTERfQkxPQ0tf TlVNLCAxKTsKPj4gK8KgwqDCoMKgIH0gZWxzZSB7Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqAgYmxvY2tzID0gbWluX3QoaW50LCBibG9ja3MsIFNQSVNHX0JMT0NLX01BWCk7Cj4+ICvCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqAgZGVzYy0+Y2ZnX3N0YXJ0IHw9IEZJRUxEX1BSRVAoRklFTERf QkxPQ0tfU0laRSwgCj4+IGJsb2NrX3NpemUgJiAweDcpIHwKPj4gK8KgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIEZJRUxEX1BSRVAo RklFTERfQkxPQ0tfTlVNLCBibG9ja3MpOwo+PiArwqDCoMKgwqAgfQo+PiArCj4+ICvCoMKgwqDC oCBpZiAoeGZlci0+dHhfc2cubmVudHMgJiYgeGZlci0+dHhfc2cuc2dsKSB7Cj4+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqAgY2NzZ19sZW4gPSB4ZmVyLT50eF9zZy5uZW50cyAqIHNpemVvZihz dHJ1Y3QgCj4+IHNwaXNnX3NnX2xpbmspOwo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGNj c2cgPSBremFsbG9jKGNjc2dfbGVuLCBHRlBfS0VSTkVMIHwgR0ZQX0RNQSk7Cj4+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqAgaWYgKCFjY3NnKSB7Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgIGRldl9lcnIoZGV2LCAiYWxsb2MgdHhfY2NzZyBmYWlsZWRcbiIp Owo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCByZXR1cm4gLUVO T01FTTsKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB9Cj4+ICsKPj4gK8KgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoCBhbWxfc3Bpc2dfc2dfeGxhdGUoJnhmZXItPnR4X3NnLCBjY3NnKTsKPj4g K8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBwYWRkciA9IGRtYV9tYXBfc2luZ2xlKGRldiwgKHZv aWQgKiljY3NnLAo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBjY3NnX2xlbiwgRE1BX1RPX0RFVklDRSk7Cj4+ ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcmV0ID0gZG1hX21hcHBpbmdfZXJyb3IoZGV2LCBw YWRkcik7Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgaWYgKHJldCkgewo+PiArwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBrZnJlZShjY3NnKTsKPj4gK8KgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgZGV2X2VycihkZXYsICJ0eCBjY3Nn IG1hcCBmYWlsZWRcbiIpOwo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoCByZXR1cm4gcmV0Owo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIH0KPj4gKwo+PiAr wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGRlc2MtPnR4X3BhZGRyID0gcGFkZHI7Cj4+ICvCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqAgZGVzYy0+Y2ZnX3N0YXJ0IHw9IEZJRUxEX1BSRVAoRklFTERf VFhEX01PREUsIAo+PiBTUElTR19EQVRBX01PREVfU0cpOwo+PiArwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgIGV4ZGVzYy0+dHhfY2NzZyA9IGNjc2c7Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqAgZXhkZXNjLT50eF9jY3NnX2xlbiA9IGNjc2dfbGVuOwo+PiArICAgICAgICAgICAgIAo+PiBk bWFfc3luY19zZ3RhYmxlX2Zvcl9kZXZpY2Uoc3Bpc2ctPmNvbnRyb2xsZXItPmN1cl90eF9kbWFf ZGV2LAo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgJnhmZXItPnR4X3NnLCBETUFfVE9fREVW SUNFKTsKPj4gK8KgwqDCoMKgIH0gZWxzZSBpZiAoeGZlci0+dHhfYnVmIHx8IHhmZXItPnR4X2Rt YSkgewo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHBhZGRyID0geGZlci0+dHhfZG1hOwo+ PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGlmICghcGFkZHIpIHsKPj4gK8KgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcGFkZHIgPSBkbWFfbWFwX3NpbmdsZShkZXYs ICh2b2lkICopeGZlci0+dHhfYnVmLAo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAg eGZlci0+bGVuLCBETUFfVE9fREVWSUNFKTsKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqAgcmV0ID0gZG1hX21hcHBpbmdfZXJyb3IoZGV2LCBwYWRkcik7Cj4+ICvC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGlmIChyZXQpIHsKPj4gK8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGRl dl9lcnIoZGV2LCAidHggYnVmIG1hcCBmYWlsZWRcbiIpOwo+PiArwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcmV0dXJuIHJldDsKPj4gK8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgfQo+PiArwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgIH0KPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBkZXNjLT50eF9wYWRk ciA9IHBhZGRyOwo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGRlc2MtPmNmZ19zdGFydCB8 PSBGSUVMRF9QUkVQKEZJRUxEX1RYRF9NT0RFLCAKPj4gU1BJU0dfREFUQV9NT0RFX01FTSk7Cj4+ ICvCoMKgwqDCoCB9Cj4+ICsKPj4gK8KgwqDCoMKgIGlmICh4ZmVyLT5yeF9zZy5uZW50cyAmJiB4 ZmVyLT5yeF9zZy5zZ2wpIHsKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBjY3NnX2xlbiA9 IHhmZXItPnJ4X3NnLm5lbnRzICogc2l6ZW9mKHN0cnVjdCAKPj4gc3Bpc2dfc2dfbGluayk7Cj4+ ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgY2NzZyA9IGt6YWxsb2MoY2NzZ19sZW4sIEdGUF9L RVJORUwgfCBHRlBfRE1BKTsKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBpZiAoIWNjc2cp IHsKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgZGV2X2Vycihk ZXYsICJhbGxvYyByeF9jY3NnIGZhaWxlZFxuIik7Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgIHJldHVybiAtRU5PTUVNOwo+PiArwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgIH0KPj4gKwo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGFtbF9zcGlzZ19zZ194 bGF0ZSgmeGZlci0+cnhfc2csIGNjc2cpOwo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHBh ZGRyID0gZG1hX21hcF9zaW5nbGUoZGV2LCAodm9pZCAqKWNjc2csCj4+ICvCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg IGNjc2dfbGVuLCBETUFfVE9fREVWSUNFKTsKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBy ZXQgPSBkbWFfbWFwcGluZ19lcnJvcihkZXYsIHBhZGRyKTsKPj4gK8KgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoCBpZiAocmV0KSB7Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgIGtmcmVlKGNjc2cpOwo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoCBkZXZfZXJyKGRldiwgInJ4IGNjc2cgbWFwIGZhaWxlZFxuIik7Cj4+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHJldHVybiByZXQ7Cj4+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqAgfQo+PiArCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgZGVz Yy0+cnhfcGFkZHIgPSBwYWRkcjsKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBkZXNjLT5j Zmdfc3RhcnQgfD0gRklFTERfUFJFUChGSUVMRF9SWERfTU9ERSwgCj4+IFNQSVNHX0RBVEFfTU9E RV9TRyk7Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgZXhkZXNjLT5yeF9jY3NnID0gY2Nz ZzsKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBleGRlc2MtPnJ4X2Njc2dfbGVuID0gY2Nz Z19sZW47Cj4+ICsgICAgICAgICAgICAgCj4+IGRtYV9zeW5jX3NndGFibGVfZm9yX2RldmljZShz cGlzZy0+Y29udHJvbGxlci0+Y3VyX3J4X2RtYV9kZXYsCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoCAmeGZlci0+cnhfc2csIERNQV9GUk9NX0RFVklDRSk7Cj4+ICvCoMKgwqDCoCB9IGVsc2Ug aWYgKHhmZXItPnJ4X2J1ZiB8fCB4ZmVyLT5yeF9kbWEpIHsKPj4gK8KgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoCBwYWRkciA9IHhmZXItPnJ4X2RtYTsKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oCBpZiAoIXBhZGRyKSB7Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgIHBhZGRyID0gZG1hX21hcF9zaW5nbGUoZGV2LCB4ZmVyLT5yeF9idWYsCj4+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB4ZmVyLT5sZW4sIERNQV9GUk9NX0RFVklDRSk7Cj4+ICvC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHJldCA9IGRtYV9tYXBwaW5n X2Vycm9yKGRldiwgcGFkZHIpOwo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoCBpZiAocmV0KSB7Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBkZXZfZXJyKGRldiwgInJ4IGJ1ZiBtYXAgZmFpbGVkXG4i KTsKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgIHJldHVybiByZXQ7Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgIH0KPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB9Cj4+ICsKPj4gK8KgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoCBkZXNjLT5yeF9wYWRkciA9IHBhZGRyOwo+PiArwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgIGRlc2MtPmNmZ19zdGFydCB8PSBGSUVMRF9QUkVQKEZJRUxEX1JYRF9NT0RF LCAKPj4gU1BJU0dfREFUQV9NT0RFX01FTSk7Cj4+ICvCoMKgwqDCoCB9Cj4+ICsKPj4gK8KgwqDC oMKgIHJldHVybiAwOwo+PiArfQo+PiArCj4+ICtzdGF0aWMgdm9pZCBhbWxfc3Bpc2dfY2xlYW51 cF90cmFuc2ZlcihzdHJ1Y3Qgc3Bpc2dfZGV2aWNlICpzcGlzZywKPj4gK8KgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAg c3RydWN0IHNwaV90cmFuc2ZlciAqeGZlciwKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgc3RydWN0IHNwaXNn X2Rlc2NyaXB0b3IgKmRlc2MsCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHN0cnVjdCBzcGlzZ19kZXNjcmlw dG9yX2V4dHJhIAo+PiAqZXhkZXNjKQo+PiArewo+PiArwqDCoMKgwqAgc3RydWN0IGRldmljZSAq ZGV2ID0gJnNwaXNnLT5wZGV2LT5kZXY7Cj4+ICsKPj4gK8KgwqDCoMKgIGlmIChkZXNjLT50eF9w YWRkcikgewo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGlmIChGSUVMRF9HRVQoRklFTERf VFhEX01PREUsIGRlc2MtPmNmZ19zdGFydCkgPT0gCj4+IFNQSVNHX0RBVEFfTU9ERV9TRykgewo+ PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBkbWFfdW5tYXBfc2lu Z2xlKGRldiwgKGRtYV9hZGRyX3QpZGVzYy0+dHhfcGFkZHIsCj4+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oCBleGRlc2MtPnR4X2Njc2dfbGVuLCAKPj4gRE1BX1RPX0RFVklDRSk7Cj4+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGtmcmVlKGV4ZGVzYy0+dHhfY2NzZyk7Cj4+ ICsgICAgICAgICAgICAgICAgICAgICAKPj4gZG1hX3N5bmNfc2d0YWJsZV9mb3JfY3B1KHNwaXNn LT5jb250cm9sbGVyLT5jdXJfdHhfZG1hX2RldiwKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoCAmeGZlci0+dHhfc2csIAo+PiBETUFfVE9fREVWSUNFKTsKPj4gK8KgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoCB9IGVsc2UgaWYgKCF4ZmVyLT50eF9kbWEpIHsKPj4gK8KgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgZG1hX3VubWFwX3NpbmdsZShkZXYsIChk bWFfYWRkcl90KWRlc2MtPnR4X3BhZGRyLAo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgeGZlci0+bGVu LCBETUFfVE9fREVWSUNFKTsKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB9Cj4+ICvCoMKg wqDCoCB9Cj4+ICsKPj4gK8KgwqDCoMKgIGlmIChkZXNjLT5yeF9wYWRkcikgewo+PiArwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgIGlmIChGSUVMRF9HRVQoRklFTERfUlhEX01PREUsIGRlc2MtPmNm Z19zdGFydCkgPT0gCj4+IFNQSVNHX0RBVEFfTU9ERV9TRykgewo+PiArwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBkbWFfdW5tYXBfc2luZ2xlKGRldiwgKGRtYV9hZGRy X3QpZGVzYy0+cnhfcGFkZHIsCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBleGRlc2MtPnJ4X2Njc2df bGVuLCAKPj4gRE1BX1RPX0RFVklDRSk7Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgIGtmcmVlKGV4ZGVzYy0+cnhfY2NzZyk7Cj4+ICsgICAgICAgICAgICAgICAg ICAgICAKPj4gZG1hX3N5bmNfc2d0YWJsZV9mb3JfY3B1KHNwaXNnLT5jb250cm9sbGVyLT5jdXJf cnhfZG1hX2RldiwKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAmeGZlci0+ cnhfc2csIAo+PiBETUFfRlJPTV9ERVZJQ0UpOwo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg IH0gZWxzZSBpZiAoIXhmZXItPnJ4X2RtYSkgewo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoCBkbWFfdW5tYXBfc2luZ2xlKGRldiwgKGRtYV9hZGRyX3QpZGVzYy0+ cnhfcGFkZHIsCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB4ZmVyLT5sZW4sIERNQV9GUk9NX0RFVklD RSk7Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgfQo+PiArwqDCoMKgwqAgfQo+PiArfQo+ PiArCj4+ICtzdGF0aWMgdm9pZCBhbWxfc3Bpc2dfc2V0dXBfbnVsbF9kZXNjKHN0cnVjdCBzcGlz Z19kZXZpY2UgKnNwaXNnLAo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgc3RydWN0IHNwaXNnX2Rlc2NyaXB0b3Ig KmRlc2MsCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB1MzIgbl9zY2xrKQo+PiArewo+PiArwqDCoMKgwqAgLyog dW5pdCBpcyB0aGUgbGFzdCB4ZmVyIHNjbGsgKi8KPj4gK8KgwqDCoMKgIGRlc2MtPmNmZ19zdGFy dCA9IHNwaXNnLT5jZmdfc3RhcnQ7Cj4+ICvCoMKgwqDCoCBkZXNjLT5jZmdfYnVzID0gc3Bpc2ct PmNmZ19idXM7Cj4+ICsKPj4gK8KgwqDCoMKgIGRlc2MtPmNmZ19zdGFydCB8PSBGSUVMRF9QUkVQ KEZJRUxEX09QX01PREUsIFNQSVNHX09QX01PREVfV1JJVEUpIHwKPj4gK8KgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgRklFTERfUFJFUChGSUVMRF9CTE9DS19T SVpFLCAxKSB8Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgIEZJRUxEX1BSRVAoRklFTERfQkxPQ0tfTlVNLCAKPj4gRElWX1JPVU5EX1VQKG5fc2Nsaywg OCkpOwo+PiArCj4+ICvCoMKgwqDCoCBkZXNjLT5jZmdfYnVzIHw9IEZJRUxEX1BSRVAoRklFTERf TlVMTF9DVEwsIDEpOwo+PiArfQo+PiArCj4+ICtzdGF0aWMgdm9pZCBhbWxfc3Bpc2dfcGVuZGlu ZyhzdHJ1Y3Qgc3Bpc2dfZGV2aWNlICpzcGlzZywKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgZG1hX2FkZHJfdCBkZXNjX3BhZGRyLAo+PiAr wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBib29s IHRyaWcsCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgIGJvb2wgaXJxX2VuKQo+PiArewo+PiArwqDCoMKgwqAgdTMyIGRlc2NfbCwgZGVzY19o LCBjZmdfc3BpOwo+PiArCj4+ICsjaWZkZWbCoMKgwqDCoMKgwqAgQ09ORklHX0FSQ0hfRE1BX0FE RFJfVF82NEJJVAo+PiArwqDCoMKgwqAgZGVzY19sID0gKHU2NClkZXNjX3BhZGRyICYgMHhmZmZm ZmZmZjsKPj4gK8KgwqDCoMKgIGRlc2NfaCA9ICh1NjQpZGVzY19wYWRkciA+PiAzMjsKPj4gKyNl bHNlCj4+ICvCoMKgwqDCoCBkZXNjX2wgPSBkZXNjX3BhZGRyICYgMHhmZmZmZmZmZjsKPj4gK8Kg wqDCoMKgIGRlc2NfaCA9IDA7Cj4+ICsjZW5kaWYKPj4gKwo+PiArwqDCoMKgwqAgY2ZnX3NwaSA9 IHNwaXNnLT5jZmdfc3BpOwo+PiArwqDCoMKgwqAgaWYgKHRyaWcpCj4+ICvCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqAgY2ZnX3NwaSB8PSBGSUVMRF9IV19QT1M7Cj4+ICvCoMKgwqDCoCBlbHNlCj4+ ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgZGVzY19oIHw9IEZJRUxEX0RFU0NfUEVORElORzsK Pj4gKwo+PiArwqDCoMKgwqAgcmVnbWFwX3dyaXRlKHNwaXNnLT5tYXAsIFNQSVNHX1JFR19JUlFf RU5BQkxFLCBpcnFfZW4gPyAKPj4gRklFTERfREVTQ19DSEFJTl9ET05FIDogMCk7Cj4+ICvCoMKg wqDCoCByZWdtYXBfd3JpdGUoc3Bpc2ctPm1hcCwgU1BJU0dfUkVHX0NGR19TUEksIGNmZ19zcGkp Owo+PiArwqDCoMKgwqAgcmVnbWFwX3dyaXRlKHNwaXNnLT5tYXAsIFNQSVNHX1JFR19ERVNDX0xJ U1RfTCwgZGVzY19sKTsKPj4gK8KgwqDCoMKgIHJlZ21hcF93cml0ZShzcGlzZy0+bWFwLCBTUElT R19SRUdfREVTQ19MSVNUX0gsIGRlc2NfaCk7Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyBpcnFyZXR1 cm5fdCBhbWxfc3Bpc2dfaXJxKGludCBpcnEsIHZvaWQgKmRhdGEpCj4+ICt7Cj4+ICvCoMKgwqDC oCBzdHJ1Y3Qgc3Bpc2dfZGV2aWNlICpzcGlzZyA9ICh2b2lkICopZGF0YTsKPj4gK8KgwqDCoMKg IHUzMiBzdHM7Cj4+ICsKPj4gK8KgwqDCoMKgIHNwaXNnLT5zdGF0dXMgPSAwOwo+PiArwqDCoMKg wqAgcmVnbWFwX3JlYWQoc3Bpc2ctPm1hcCwgU1BJU0dfUkVHX0lSUV9TVFMsICZzdHMpOwo+PiAr wqDCoMKgwqAgcmVnbWFwX3dyaXRlKHNwaXNnLT5tYXAsIFNQSVNHX1JFR19JUlFfU1RTLCBzdHMp Owo+PiArwqDCoMKgwqAgaWYgKHN0cyAmIChGSUVMRF9SQ0hfREVTQ19JTlZBTElEIHwKPj4gK8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBGSUVMRF9SQ0hfREVTQ19SRVNQIHwKPj4gK8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBGSUVMRF9SQ0hfREFUQV9SRVNQIHwKPj4gK8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBGSUVMRF9XQ0hfREVTQ19JTlZBTElEIHwKPj4g K8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBGSUVMRF9XQ0hfREVTQ19SRVNQIHwKPj4g K8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBGSUVMRF9XQ0hfREFUQV9SRVNQIHwKPj4g K8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBGSUVMRF9ERVNDX0VSUikpIHsKPj4gK8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBzcGlzZy0+c3RhdHVzID0gc3RzOwo+PiArwqDCoMKgwqAg fQo+IAo+IFlvdSBjYW4gZHJvcCB0aGUge30KPiAKCldpbGwgZG8uCgo+PiArCj4+ICvCoMKgwqDC oCBjb21wbGV0ZSgmc3Bpc2ctPmNvbXBsZXRpb24pOwo+PiArCj4+ICvCoMKgwqDCoCByZXR1cm4g SVJRX0hBTkRMRUQ7Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyBpbnQgYW1sX3NwaXNnX3RyYW5zZmVy X29uZV9tZXNzYWdlKHN0cnVjdCBzcGlfY29udHJvbGxlciAqY3RsciwKPj4gK8KgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqAgc3RydWN0IHNwaV9tZXNzYWdlICptc2cpCj4+ICt7Cj4+ICvCoMKgwqDCoCBzdHJ1 Y3Qgc3Bpc2dfZGV2aWNlICpzcGlzZyA9IHNwaV9jb250cm9sbGVyX2dldF9kZXZkYXRhKGN0bHIp Owo+PiArwqDCoMKgwqAgc3RydWN0IGRldmljZSAqZGV2ID0gJnNwaXNnLT5wZGV2LT5kZXY7Cj4+ ICvCoMKgwqDCoCB1bnNpZ25lZCBsb25nIGxvbmcgbXMgPSAwOwo+PiArwqDCoMKgwqAgc3RydWN0 IHNwaV90cmFuc2ZlciAqeGZlcjsKPj4gK8KgwqDCoMKgIHN0cnVjdCBzcGlzZ19kZXNjcmlwdG9y ICpkZXNjcywgKmRlc2M7Cj4+ICvCoMKgwqDCoCBzdHJ1Y3Qgc3Bpc2dfZGVzY3JpcHRvcl9leHRy YSAqZXhkZXNjcywgKmV4ZGVzYzsKPj4gK8KgwqDCoMKgIGRtYV9hZGRyX3QgZGVzY3NfcGFkZHI7 Cj4+ICvCoMKgwqDCoCBpbnQgZGVzY19udW0gPSAxLCBkZXNjc19sZW47Cj4+ICvCoMKgwqDCoCB1 MzIgY3NfaG9sZF9pbl9zY2xrID0gMDsKPj4gK8KgwqDCoMKgIGludCByZXQgPSAtRUlPOwo+PiAr Cj4+ICvCoMKgwqDCoCBpZiAoIWFtbF9zcGlzZ19zZW1fZG93bl9yZWFkKHNwaXNnKSkgewo+PiAr wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHNwaV9maW5hbGl6ZV9jdXJyZW50X21lc3NhZ2UoY3Rs cik7Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgZGV2X2VycihkZXYsICJjb250cm9sbGVy IGJ1c3lcbiIpOwo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHJldHVybiAtRUJVU1k7Cj4+ ICvCoMKgwqDCoCB9Cj4+ICsKPj4gK8KgwqDCoMKgIC8qIGNhbGN1bGF0ZSB0aGUgZGVzYyBudW0g Zm9yIGFsbCB4ZmVyICovCj4+ICvCoMKgwqDCoCBsaXN0X2Zvcl9lYWNoX2VudHJ5KHhmZXIsICZt c2ctPnRyYW5zZmVycywgdHJhbnNmZXJfbGlzdCkKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oCBkZXNjX251bSsrOwo+PiArCj4+ICvCoMKgwqDCoCAvKiBhbGxvYyBkZXNjcmlwdG9yL2V4dHJh LWRlc2NyaXB0b3IgdGFibGUgKi8KPj4gK8KgwqDCoMKgIGRlc2NzID0ga2NhbGxvYyhkZXNjX251 bSwgc2l6ZW9mKCpkZXNjKSArIHNpemVvZigqZXhkZXNjKSwKPj4gK8KgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgR0ZQX0tFUk5FTCB8IEdGUF9ETUEpOwo+PiArwqDCoMKg wqAgaWYgKCFkZXNjcykgewo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHNwaV9maW5hbGl6 ZV9jdXJyZW50X21lc3NhZ2UoY3Rscik7Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgYW1s X3NwaXNnX3NlbV91cF93cml0ZShzcGlzZyk7Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAg cmV0dXJuIC1FTk9NRU07Cj4+ICvCoMKgwqDCoCB9Cj4+ICvCoMKgwqDCoCBkZXNjc19sZW4gPSBz aXplb2YoKmRlc2MpICogZGVzY19udW07Cj4+ICvCoMKgwqDCoCBleGRlc2NzID0gKHN0cnVjdCBz cGlzZ19kZXNjcmlwdG9yX2V4dHJhICopKGRlc2NzICsgZGVzY19udW0pOwo+PiArCj4+ICvCoMKg wqDCoCAvKiBjb25maWcgZGVzY3JpcHRvciBmb3IgZWFjaCB4ZmVyICovCj4+ICvCoMKgwqDCoCBk ZXNjID0gZGVzY3M7Cj4+ICvCoMKgwqDCoCBleGRlc2MgPSBleGRlc2NzOwo+PiArwqDCoMKgwqAg bGlzdF9mb3JfZWFjaF9lbnRyeSh4ZmVyLCAmbXNnLT50cmFuc2ZlcnMsIHRyYW5zZmVyX2xpc3Qp IHsKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCByZXQgPSBhbWxfc3Bpc2dfc2V0dXBfdHJh bnNmZXIoc3Bpc2csIHhmZXIsIGRlc2MsIGV4ZGVzYyk7Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqAgaWYgKHJldCkgewo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoCBkZXZfZXJyKGRldiwgImNvbmZpZyBkZXNjcmlwdG9yIGZhaWxlZFxuIik7Cj4+ICvCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGdvdG8gZW5kOwo+PiArwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgIH0KPj4gKwo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIC8q IGNhbGN1bGF0ZSBjcy1zZXR1cCBkZWxheSB3aXRoIHRoZSBmaXJzdCB4ZmVyIHNwZWVkICovCj4+ ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgaWYgKGxpc3RfaXNfZmlyc3QoJnhmZXItPnRyYW5z ZmVyX2xpc3QsICZtc2ctPnRyYW5zZmVycykpCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgIGRlc2MtPmNmZ19idXMgfD0gRklFTERfUFJFUChGSUVMRF9DU19TRVRV UCwKPj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCj4+IHNwaV9kZWxheV90b19zY2xr KHhmZXItPmVmZmVjdGl2ZV9zcGVlZF9oeiwgJm1zZy0+c3BpLT5jc19zZXR1cCkpOwo+PiArCj4+ ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgLyogY2FsY3VsYXRlIGNzLWhvbGQgZGVsYXkgd2l0 aCB0aGUgbGFzdCB4ZmVyIHNwZWVkICovCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgaWYg KGxpc3RfaXNfbGFzdCgmeGZlci0+dHJhbnNmZXJfbGlzdCwgJm1zZy0+dHJhbnNmZXJzKSkKPj4g K8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgY3NfaG9sZF9pbl9zY2xr ID0KPj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCj4+IHNwaV9kZWxheV90b19zY2xr KHhmZXItPmVmZmVjdGl2ZV9zcGVlZF9oeiwgJm1zZy0+c3BpLT5jc19ob2xkKTsKPj4gKwo+PiAr wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGRlc2MrKzsKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoCBleGRlc2MrKzsKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBtcyArPSBESVZfUk9V TkRfVVBfVUxMKDhMTCAqIE1TRUNfUEVSX1NFQyAqIHhmZXItPmxlbiwKPj4gK8KgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqAgeGZlci0+ZWZmZWN0aXZlX3NwZWVkX2h6KTsKPj4gK8KgwqDCoMKgIH0KPj4gKwo+PiArwqDC oMKgwqAgaWYgKGNzX2hvbGRfaW5fc2NsaykKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAv KiBhZGRpdGlvbmFsIG51bGwtZGVzY3JpcHRvciB0byBhY2hpZXZlIHRoZSBjcy1ob2xkIAo+PiBk ZWxheSAqLwo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGFtbF9zcGlzZ19zZXR1cF9udWxs X2Rlc2Moc3Bpc2csIGRlc2MsIGNzX2hvbGRfaW5fc2Nsayk7Cj4+ICvCoMKgwqDCoCBlbHNlCj4+ ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgZGVzYy0tOwo+PiArCj4+ICvCoMKgwqDCoCBkZXNj LT5jZmdfYnVzIHw9IEZJRUxEX1BSRVAoRklFTERfS0VFUF9TUywgMCk7Cj4+ICvCoMKgwqDCoCBk ZXNjLT5jZmdfc3RhcnQgfD0gRklFTERfUFJFUChGSUVMRF9FT0MsIDEpOwo+PiArCj4+ICvCoMKg wqDCoCAvKiBzb21lIHRvbGVyYW5jZXMgKi8KPj4gK8KgwqDCoMKgIG1zICs9IG1zICsgMjA7Cj4+ ICvCoMKgwqDCoCBpZiAobXMgPiBVSU5UX01BWCkKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oCBtcyA9IFVJTlRfTUFYOwo+PiArCj4+ICvCoMKgwqDCoCBkZXNjc19wYWRkciA9IGRtYV9tYXBf c2luZ2xlKGRldiwgKHZvaWQgKilkZXNjcywKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBkZXNjc19sZW4sIERNQV9U T19ERVZJQ0UpOwo+PiArwqDCoMKgwqAgcmV0ID0gZG1hX21hcHBpbmdfZXJyb3IoZGV2LCBkZXNj c19wYWRkcik7Cj4+ICvCoMKgwqDCoCBpZiAocmV0KSB7Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqAgZGV2X2VycihkZXYsICJkZXNjIHRhYmxlIG1hcCBmYWlsZWRcbiIpOwo+PiArwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgIGdvdG8gZW5kOwo+PiArwqDCoMKgwqAgfQo+PiArCj4+ICvCoMKg wqDCoCByZWluaXRfY29tcGxldGlvbigmc3Bpc2ctPmNvbXBsZXRpb24pOwo+PiArwqDCoMKgwqAg YW1sX3NwaXNnX3BlbmRpbmcoc3Bpc2csIGRlc2NzX3BhZGRyLCBmYWxzZSwgdHJ1ZSk7Cj4+ICvC oMKgwqDCoCBpZiAod2FpdF9mb3JfY29tcGxldGlvbl90aW1lb3V0KCZzcGlzZy0+Y29tcGxldGlv biwKPj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKPj4gc3BpX2NvbnRy b2xsZXJfaXNfdGFyZ2V0KHNwaXNnLT5jb250cm9sbGVyKSA/Cj4+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAg TUFYX1NDSEVEVUxFX1RJTUVPVVQgOiAKPj4gbXNlY3NfdG9famlmZmllcyhtcykpKQo+PiArwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgIHJldCA9IHNwaXNnLT5zdGF0dXMgPyAtRUlPIDogMDsKPj4g K8KgwqDCoMKgIGVsc2UKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCByZXQgPSAtRVRJTUVE T1VUOwo+PiArCj4+ICvCoMKgwqDCoCBkbWFfdW5tYXBfc2luZ2xlKGRldiwgZGVzY3NfcGFkZHIs IGRlc2NzX2xlbiwgRE1BX1RPX0RFVklDRSk7Cj4+ICtlbmQ6Cj4+ICvCoMKgwqDCoCBkZXNjID0g ZGVzY3M7Cj4+ICvCoMKgwqDCoCBleGRlc2MgPSBleGRlc2NzOwo+PiArwqDCoMKgwqAgbGlzdF9m b3JfZWFjaF9lbnRyeSh4ZmVyLCAmbXNnLT50cmFuc2ZlcnMsIHRyYW5zZmVyX2xpc3QpCj4+ICvC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgYW1sX3NwaXNnX2NsZWFudXBfdHJhbnNmZXIoc3Bpc2cs IHhmZXIsIGRlc2MrKywgZXhkZXNjKyspOwo+PiArwqDCoMKgwqAga2ZyZWUoZGVzY3MpOwo+PiAr Cj4+ICvCoMKgwqDCoCBpZiAoIXJldCkKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBtc2ct PmFjdHVhbF9sZW5ndGggPSBtc2ctPmZyYW1lX2xlbmd0aDsKPj4gK8KgwqDCoMKgIG1zZy0+c3Rh dHVzID0gcmV0Owo+PiArwqDCoMKgwqAgc3BpX2ZpbmFsaXplX2N1cnJlbnRfbWVzc2FnZShjdGxy KTsKPj4gK8KgwqDCoMKgIGFtbF9zcGlzZ19zZW1fdXBfd3JpdGUoc3Bpc2cpOwo+PiArCj4+ICvC oMKgwqDCoCByZXR1cm4gcmV0Owo+PiArfQo+PiArCj4+ICtzdGF0aWMgaW50IGFtbF9zcGlzZ19w cmVwYXJlX21lc3NhZ2Uoc3RydWN0IHNwaV9jb250cm9sbGVyICpjdGxyLAo+PiArwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg IHN0cnVjdCBzcGlfbWVzc2FnZSAqbWVzc2FnZSkKPj4gK3sKPj4gK8KgwqDCoMKgIHN0cnVjdCBz cGlzZ19kZXZpY2UgKnNwaXNnID0gc3BpX2NvbnRyb2xsZXJfZ2V0X2RldmRhdGEoY3Rscik7Cj4+ ICsKPj4gK8KgwqDCoMKgIHJldHVybiBhbWxfc3Bpc2dfc2V0dXBfZGV2aWNlKHNwaXNnLCBtZXNz YWdlLT5zcGkpOwo+IAo+IFdoeSBhZGQgYSBzZXBhcmF0ZSBmdW5jdGlvbiBoZXJlID8ganVzdCBt b3ZlIHRoZSBhbWxfc3Bpc2dfc2V0dXBfZGV2aWNlKCkKPiBjb250ZW50IGhlcmUsIG9yIHJlbmFt ZSBhbWxfc3Bpc2dfc2V0dXBfZGV2aWNlKCkgdG8gCj4gYW1sX3NwaXNnX3ByZXBhcmVfbWVzc2Fn ZSgpCj4gCgpXaWxsIGRvLgoKPj4gK30KPj4gKwo+PiArc3RhdGljIGludCBhbWxfc3Bpc2dfc2V0 dXAoc3RydWN0IHNwaV9kZXZpY2UgKnNwaSkKPj4gK3sKPj4gK8KgwqDCoMKgIGlmICghc3BpLT5j b250cm9sbGVyX3N0YXRlKQo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHNwaS0+Y29udHJv bGxlcl9zdGF0ZSA9IAo+PiBzcGlfY29udHJvbGxlcl9nZXRfZGV2ZGF0YShzcGktPmNvbnRyb2xs ZXIpOwo+PiArCj4+ICvCoMKgwqDCoCByZXR1cm4gMDsKPj4gK30KPj4gKwo+PiArc3RhdGljIHZv aWQgYW1sX3NwaXNnX2NsZWFudXAoc3RydWN0IHNwaV9kZXZpY2UgKnNwaSkKPj4gK3sKPj4gK8Kg wqDCoMKgIHNwaS0+Y29udHJvbGxlcl9zdGF0ZSA9IE5VTEw7Cj4+ICt9Cj4+ICsKPj4gK3N0YXRp YyBpbnQgYW1sX3NwaXNnX3RhcmdldF9hYm9ydChzdHJ1Y3Qgc3BpX2NvbnRyb2xsZXIgKmN0bHIp Cj4+ICt7Cj4+ICvCoMKgwqDCoCBzdHJ1Y3Qgc3Bpc2dfZGV2aWNlICpzcGlzZyA9IHNwaV9jb250 cm9sbGVyX2dldF9kZXZkYXRhKGN0bHIpOwo+PiArCj4+ICvCoMKgwqDCoCBzcGlzZy0+c3RhdHVz ID0gMDsKPj4gK8KgwqDCoMKgIHJlZ21hcF93cml0ZShzcGlzZy0+bWFwLCBTUElTR19SRUdfREVT Q19MSVNUX0gsIDApOwo+PiArwqDCoMKgwqAgY29tcGxldGUoJnNwaXNnLT5jb21wbGV0aW9uKTsK Pj4gKwo+PiArwqDCoMKgwqAgcmV0dXJuIDA7Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyBpbnQgYW1s X3NwaXNnX2Nsa19pbml0KHN0cnVjdCBzcGlzZ19kZXZpY2UgKnNwaXNnLCB2b2lkIAo+PiBfX2lv bWVtICpiYXNlKQo+PiArewo+PiArwqDCoMKgwqAgc3RydWN0IGRldmljZSAqZGV2ID0gJnNwaXNn LT5wZGV2LT5kZXY7Cj4+ICvCoMKgwqDCoCBzdHJ1Y3QgY2xrX2luaXRfZGF0YSBpbml0Owo+PiAr wqDCoMKgwqAgc3RydWN0IGNsa19kaXZpZGVyICpkaXY7Cj4+ICvCoMKgwqDCoCBzdHJ1Y3QgY2xr X2Rpdl90YWJsZSAqdGJsOwo+PiArwqDCoMKgwqAgY29uc3QgY2hhciAqcGFyZW50X25hbWVzWzFd Owo+PiArwqDCoMKgwqAgY2hhciBuYW1lWzMyXTsKPj4gK8KgwqDCoMKgIGludCBpOwo+PiArCj4+ ICvCoMKgwqDCoCBzcGlzZy0+Y29yZSA9IGRldm1fY2xrX2dldF9lbmFibGVkKGRldiwgImNvcmUi KTsKPj4gK8KgwqDCoMKgIGlmIChJU19FUlJfT1JfTlVMTChzcGlzZy0+Y29yZSkpCj4+ICvCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqAgZGV2X3dhcm4oZGV2LCAiY29yZSBjbG9jayByZXF1ZXN0IGZh aWxlZFxuIik7Cj4gCj4gV2FybiA/IGlzbid0IHRoZSBjbG9jayBtYW5kYXRvcnkgPwo+IAoKVGhp cyBjbG9jayBpcyBuZWNlc3NhcnkuIEkgd2lsbCByZXR1cm4gZXJyb3IgaWYgZ2V0IGZhaWxlZC4K Cj4+ICsKPj4gK8KgwqDCoMKgIHNwaXNnLT5wY2xrID0gZGV2bV9jbGtfZ2V0X2VuYWJsZWQoZGV2 LCAicGNsayIpOwo+PiArwqDCoMKgwqAgaWYgKElTX0VSUl9PUl9OVUxMKHNwaXNnLT5wY2xrKSkg ewo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGRldl9lcnIoZGV2LCAicGNsayBjbG9jayBy ZXF1ZXN0IGZhaWxlZFxuIik7Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcmV0dXJuIFBU Ul9FUlIoc3Bpc2ctPnBjbGspOwo+PiArwqDCoMKgwqAgfQo+PiArwqDCoMKgwqAgY2xrX3NldF9t aW5fcmF0ZShzcGlzZy0+cGNsaywgU1BJU0dfUENMS19SQVRFX01JTik7Cj4+ICsKPj4gK8KgwqDC oMKgIHRibCA9IGRldm1fa3phbGxvYyhkZXYsIHNpemVvZihzdHJ1Y3QgY2xrX2Rpdl90YWJsZSkg KiAoRElWX05VTSAKPj4gKyAxKSwgR0ZQX0tFUk5FTCk7Cj4+ICvCoMKgwqDCoCBpZiAoIXRibCkK Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCByZXR1cm4gLUVOT01FTTsKPj4gKwo+PiArwqDC oMKgwqAgZm9yIChpID0gMDsgaSA8IERJVl9OVU07IGkrKykgewo+PiArwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgIHRibFtpXS52YWwgPSBpICsgU1BJU0dfQ0xLX0RJVl9NSU4gLSAxOwo+PiArwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgIHRibFtpXS5kaXYgPSBpICsgU1BJU0dfQ0xLX0RJVl9NSU47 Cj4+ICvCoMKgwqDCoCB9Cj4+ICvCoMKgwqDCoCBzcGlzZy0+dGJsID0gdGJsOwo+PiArCj4+ICvC oMKgwqDCoCBkaXYgPSBkZXZtX2t6YWxsb2MoZGV2LCBzaXplb2YoKmRpdiksIEdGUF9LRVJORUwp Owo+PiArwqDCoMKgwqAgaWYgKCFkaXYpCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcmV0 dXJuIC1FTk9NRU07Cj4+ICsKPj4gK8KgwqDCoMKgIGRpdi0+ZmxhZ3MgPSBDTEtfRElWSURFUl9S T1VORF9DTE9TRVNUOwo+PiArwqDCoMKgwqAgZGl2LT5yZWcgPSBiYXNlICsgU1BJU0dfUkVHX0NG R19CVVM7Cj4+ICvCoMKgwqDCoCBkaXYtPnNoaWZ0ID0gX19iZl9zaGYoRklFTERfQ0xLX0RJVik7 Cj4+ICvCoMKgwqDCoCBkaXYtPndpZHRoID0gQ0xLX0RJVl9XSURUSDsKPj4gK8KgwqDCoMKgIGRp di0+dGFibGUgPSB0Ymw7Cj4+ICsKPj4gK8KgwqDCoMKgIC8qIFJlZ2lzdGVyIHZhbHVlIHNob3Vs ZCBub3QgYmUgb3V0c2lkZSBvZiB0aGUgdGFibGUgKi8KPj4gK8KgwqDCoMKgIHJlZ21hcF91cGRh dGVfYml0cyhzcGlzZy0+bWFwLCBTUElTR19SRUdfQ0ZHX0JVUywgRklFTERfQ0xLX0RJViwKPj4g K8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgRklFTERfUFJF UChGSUVMRF9DTEtfRElWLCBTUElTR19DTEtfRElWX01JTiAtIAo+PiAxKSk7Cj4+ICsKPj4gK8Kg wqDCoMKgIC8qIFJlZ2lzdGVyIGNsay1kaXZpZGVyICovCj4+ICvCoMKgwqDCoCBwYXJlbnRfbmFt ZXNbMF0gPSBfX2Nsa19nZXRfbmFtZShzcGlzZy0+cGNsayk7Cj4+ICvCoMKgwqDCoCBzbnByaW50 ZihuYW1lLCBzaXplb2YobmFtZSksICIlc19kaXYiLCBkZXZfbmFtZShkZXYpKTsKPj4gK8KgwqDC oMKgIGluaXQubmFtZSA9IG5hbWU7Cj4+ICvCoMKgwqDCoCBpbml0Lm9wcyA9ICZjbGtfZGl2aWRl cl9vcHM7Cj4+ICvCoMKgwqDCoCBpbml0LmZsYWdzID0gQ0xLX1NFVF9SQVRFX1BBUkVOVDsKPj4g K8KgwqDCoMKgIGluaXQucGFyZW50X25hbWVzID0gcGFyZW50X25hbWVzOwo+PiArwqDCoMKgwqAg aW5pdC5udW1fcGFyZW50cyA9IDE7Cj4+ICvCoMKgwqDCoCBkaXYtPmh3LmluaXQgPSAmaW5pdDsK Pj4gKwo+PiArwqDCoMKgwqAgc3Bpc2ctPnNjbGsgPSBkZXZtX2Nsa19yZWdpc3RlcihkZXYsICZk aXYtPmh3KTsKPj4gK8KgwqDCoMKgIGlmIChJU19FUlJfT1JfTlVMTChzcGlzZy0+c2NsaykpIHsK Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBkZXZfZXJyKGRldiwgImNsb2NrIHJlZ2lzdHJh dGlvbiBmYWlsZWRcbiIpOwo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHJldHVybiBQVFJf RVJSKHNwaXNnLT5zY2xrKTsKPj4gK8KgwqDCoMKgIH0KPj4gKwo+PiArwqDCoMKgwqAgcmV0dXJu IDA7Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyBpbnQgYW1sX3NwaXNnX3Byb2JlKHN0cnVjdCBwbGF0 Zm9ybV9kZXZpY2UgKnBkZXYpCj4+ICt7Cj4+ICvCoMKgwqDCoCBzdHJ1Y3Qgc3BpX2NvbnRyb2xs ZXIgKmN0bHI7Cj4+ICvCoMKgwqDCoCBzdHJ1Y3Qgc3Bpc2dfZGV2aWNlICpzcGlzZzsKPj4gK8Kg wqDCoMKgIHN0cnVjdCBkZXZpY2UgKmRldiA9ICZwZGV2LT5kZXY7Cj4+ICvCoMKgwqDCoCB2b2lk IF9faW9tZW0gKmJhc2U7Cj4+ICvCoMKgwqDCoCBpbnQgcmV0LCBpcnE7Cj4+ICsKPj4gK8KgwqDC oMKgIGNvbnN0IHN0cnVjdCByZWdtYXBfY29uZmlnIGFtbF9yZWdtYXBfY29uZmlnID0gewo+PiAr wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIC5yZWdfYml0cyA9IDMyLAo+PiArwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgIC52YWxfYml0cyA9IDMyLAo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg IC5yZWdfc3RyaWRlID0gNCwKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAubWF4X3JlZ2lz dGVyID0gU1BJU0dfTUFYX1JFRywKPj4gK8KgwqDCoMKgIH07Cj4+ICsKPj4gK8KgwqDCoMKgIGlm IChvZl9wcm9wZXJ0eV9yZWFkX2Jvb2woZGV2LT5vZl9ub2RlLCAic2xhdmUiKSkKPj4gK8KgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoCBjdGxyID0gc3BpX2FsbG9jX3RhcmdldChkZXYsIHNpemVvZigq c3Bpc2cpKTsKPj4gK8KgwqDCoMKgIGVsc2UKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBj dGxyID0gc3BpX2FsbG9jX2hvc3QoZGV2LCBzaXplb2YoKnNwaXNnKSk7Cj4+ICvCoMKgwqDCoCBp ZiAoIWN0bHIpCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcmV0dXJuIGRldl9lcnJfcHJv YmUoZGV2LCAtRU5PTUVNLCAiY29udHJvbGxlciAKPj4gYWxsb2NhdGlvbiBmYWlsZWRcbiIpOwo+ PiArCj4+ICvCoMKgwqDCoCBzcGlzZyA9IHNwaV9jb250cm9sbGVyX2dldF9kZXZkYXRhKGN0bHIp Owo+PiArwqDCoMKgwqAgc3Bpc2ctPmNvbnRyb2xsZXIgPSBjdGxyOwo+PiArCj4+ICvCoMKgwqDC oCBzcGlzZy0+cGRldiA9IHBkZXY7Cj4+ICvCoMKgwqDCoCBwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShw ZGV2LCBzcGlzZyk7Cj4+ICsKPj4gK8KgwqDCoMKgIGJhc2UgPSBkZXZtX3BsYXRmb3JtX2lvcmVt YXBfcmVzb3VyY2UocGRldiwgMCk7Cj4+ICvCoMKgwqDCoCBpZiAoSVNfRVJSKGJhc2UpKQo+PiAr wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHJldHVybiBkZXZfZXJyX3Byb2JlKGRldiwgUFRSX0VS UihiYXNlKSwgInJlc291cmNlIAo+PiBpb3JlbWFwIGZhaWxlZFxuIik7Cj4+ICsKPj4gK8KgwqDC oMKgIHNwaXNnLT5tYXAgPSBkZXZtX3JlZ21hcF9pbml0X21taW8oZGV2LCBiYXNlLCAmYW1sX3Jl Z21hcF9jb25maWcpOwo+PiArwqDCoMKgwqAgaWYgKElTX0VSUihzcGlzZy0+bWFwKSkKPj4gK8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoCByZXR1cm4gZGV2X2Vycl9wcm9iZShkZXYsIFBUUl9FUlIo c3Bpc2ctPm1hcCksICJyZWdtYXAgCj4+IGluaXQgZmFpbGVkXG4iKTsKPj4gKwo+PiArwqDCoMKg wqAgaXJxID0gcGxhdGZvcm1fZ2V0X2lycShwZGV2LCAwKTsKPj4gK8KgwqDCoMKgIGlmIChpcnEg PCAwKSB7Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcmV0ID0gaXJxOwo+PiArwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgIGdvdG8gb3V0X2NvbnRyb2xsZXI7Cj4+ICvCoMKgwqDCoCB9Cj4+ ICsKPj4gK8KgwqDCoMKgIHJldCA9IGRldm1fcmVxdWVzdF9pcnEoJnBkZXYtPmRldiwgaXJxLCBh bWxfc3Bpc2dfaXJxLAo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgIElSUUZfVFJJR0dFUl9SSVNJTkcsIE5VTEwsIHNwaXNnKTsKPiAKPiBU aGUgcmlzaW5nIGZsYWcgc2hvdWxkIGJlIHRha2VuIGZyb20gRFQsIHBhc3MgdGhlIHJpZ2h0IGZs YXNnIGluIERUIGFuZCAKPiBwYXNzIDAgaGVyZS4KPiAKCldpbGwgZG8uCgo+PiArwqDCoMKgwqAg aWYgKHJldCkgewo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGRldl9lcnIoJnBkZXYtPmRl diwgImlycSByZXF1ZXN0IGZhaWxlZFxuIik7Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAg Z290byBvdXRfY29udHJvbGxlcjsKPj4gK8KgwqDCoMKgIH0KPj4gKwo+PiArwqDCoMKgwqAgcmV0 ID0gYW1sX3NwaXNnX2Nsa19pbml0KHNwaXNnLCBiYXNlKTsKPj4gK8KgwqDCoMKgIGlmIChyZXQp Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgZ290byBvdXRfY29udHJvbGxlcjsKPj4gKwo+ PiArwqDCoMKgwqAgc3Bpc2ctPmNmZ19zcGkgPSAwOwo+PiArwqDCoMKgwqAgc3Bpc2ctPmNmZ19z dGFydCA9IDA7Cj4+ICvCoMKgwqDCoCBzcGlzZy0+Y2ZnX2J1cyA9IDA7Cj4+ICsKPj4gK8KgwqDC oMKgIHNwaXNnLT5jZmdfc3BpID0gRklFTERfUFJFUChGSUVMRF9TRkxBU0hfV1AsIDEpIHwKPj4g K8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBGSUVMRF9QUkVQKEZJ RUxEX1NGTEFTSF9IRCwgMSk7Cj4+ICvCoMKgwqDCoCBpZiAoc3BpX2NvbnRyb2xsZXJfaXNfdGFy Z2V0KGN0bHIpKSB7Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgc3Bpc2ctPmNmZ19zcGkg fD0gRklFTERfUFJFUChGSUVMRF9TTEFWRV9FTiwgMSk7Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqAgc3Bpc2ctPmNmZ19idXMgPSBGSUVMRF9QUkVQKEZJRUxEX1RYX1RVTklORywgMHhmKTsK Pj4gK8KgwqDCoMKgIH0KPj4gK8KgwqDCoMKgIC8qIGRlZmF1bHQgcGVuZGluZyAqLwo+PiArwqDC oMKgwqAgc3Bpc2ctPmNmZ19zdGFydCA9IEZJRUxEX1BSRVAoRklFTERfUEVORCwgMSk7Cj4+ICsK Pj4gK8KgwqDCoMKgIGRldmljZV9yZXNldF9vcHRpb25hbChkZXYpOwo+PiArwqDCoMKgwqAgY3Rs ci0+bnVtX2NoaXBzZWxlY3QgPSA0Owo+PiArwqDCoMKgwqAgY3Rsci0+ZGV2Lm9mX25vZGUgPSBw ZGV2LT5kZXYub2Zfbm9kZTsKPj4gK8KgwqDCoMKgIGN0bHItPm1vZGVfYml0cyA9IFNQSV9DUEhB IHwgU1BJX0NQT0wgfCBTUElfTFNCX0ZJUlNUIHwKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgIFNQSV8zV0lSRSB8IFNQSV9UWF9RVUFEIHwgU1BJX1JYX1FV QUQ7Cj4+ICvCoMKgwqDCoCBjdGxyLT5tYXhfc3BlZWRfaHogPSAxMDAwICogMTAwMCAqIDEwMDsK Pj4gK8KgwqDCoMKgIGN0bHItPm1pbl9zcGVlZF9oeiA9IDEwMDAgKiAxMDsKPj4gK8KgwqDCoMKg IGN0bHItPnNldHVwID0gYW1sX3NwaXNnX3NldHVwOwo+PiArwqDCoMKgwqAgY3Rsci0+Y2xlYW51 cCA9IGFtbF9zcGlzZ19jbGVhbnVwOwo+PiArwqDCoMKgwqAgY3Rsci0+cHJlcGFyZV9tZXNzYWdl ID0gYW1sX3NwaXNnX3ByZXBhcmVfbWVzc2FnZTsKPj4gK8KgwqDCoMKgIGN0bHItPnRyYW5zZmVy X29uZV9tZXNzYWdlID0gYW1sX3NwaXNnX3RyYW5zZmVyX29uZV9tZXNzYWdlOwo+PiArwqDCoMKg wqAgY3Rsci0+dGFyZ2V0X2Fib3J0ID0gYW1sX3NwaXNnX3RhcmdldF9hYm9ydDsKPj4gK8KgwqDC oMKgIGN0bHItPmNhbl9kbWEgPSBhbWxfc3Bpc2dfY2FuX2RtYTsKPj4gK8KgwqDCoMKgIGN0bHIt Pm1heF9kbWFfbGVuID0gU1BJU0dfQkxPQ0tfTUFYOwo+PiArwqDCoMKgwqAgZG1hX3NldF9tYXhf c2VnX3NpemUoJnBkZXYtPmRldiwgU1BJU0dfQkxPQ0tfTUFYKTsKPj4gK8KgwqDCoMKgIHJldCA9 IGRldm1fc3BpX3JlZ2lzdGVyX2NvbnRyb2xsZXIoZGV2LCBjdGxyKTsKPj4gK8KgwqDCoMKgIGlm IChyZXQpIHsKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBkZXZfZXJyKCZwZGV2LT5kZXYs ICJzcGkgY29udHJvbGxlciByZWdpc3RyYXRpb24gCj4+IGZhaWxlZFxuIik7Cj4+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqAgZ290byBvdXRfY2xrOwo+PiArwqDCoMKgwqAgfQo+PiArCj4+ICvC oMKgwqDCoCBpbml0X2NvbXBsZXRpb24oJnNwaXNnLT5jb21wbGV0aW9uKTsKPj4gKwo+PiArwqDC oMKgwqAgcmV0dXJuIDA7Cj4+ICsKPj4gK291dF9jbGs6Cj4+ICvCoMKgwqDCoCBpZiAoc3Bpc2ct PmNvcmUpCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgY2xrX2Rpc2FibGVfdW5wcmVwYXJl KHNwaXNnLT5jb3JlKTsKPj4gK8KgwqDCoMKgIGNsa19kaXNhYmxlX3VucHJlcGFyZShzcGlzZy0+ cGNsayk7Cj4+ICtvdXRfY29udHJvbGxlcjoKPj4gK8KgwqDCoMKgIHNwaV9jb250cm9sbGVyX3B1 dChjdGxyKTsKPj4gKwo+PiArwqDCoMKgwqAgcmV0dXJuIHJldDsKPj4gK30KPj4gKwo+PiArc3Rh dGljIHZvaWQgYW1sX3NwaXNnX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQo+ PiArewo+PiArwqDCoMKgwqAgc3RydWN0IHNwaXNnX2RldmljZSAqc3Bpc2cgPSBwbGF0Zm9ybV9n ZXRfZHJ2ZGF0YShwZGV2KTsKPj4gKwo+PiArwqDCoMKgwqAgaWYgKHNwaXNnLT5jb3JlKQo+PiAr wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGNsa19kaXNhYmxlX3VucHJlcGFyZShzcGlzZy0+Y29y ZSk7Cj4+ICvCoMKgwqDCoCBjbGtfZGlzYWJsZV91bnByZXBhcmUoc3Bpc2ctPnBjbGspOwo+PiAr fQo+PiArCj4+ICtzdGF0aWMgaW50IHNwaXNnX3N1c3BlbmRfcnVudGltZShzdHJ1Y3QgZGV2aWNl ICpkZXYpCj4+ICt7Cj4+ICvCoMKgwqDCoCBzdHJ1Y3Qgc3Bpc2dfZGV2aWNlICpzcGlzZyA9IGRl dl9nZXRfZHJ2ZGF0YShkZXYpOwo+PiArwqDCoMKgwqAgaW50IHJldDsKPj4gKwo+PiArwqDCoMKg wqAgcmV0ID0gc3BpX2NvbnRyb2xsZXJfc3VzcGVuZChzcGlzZy0+Y29udHJvbGxlcik7Cj4+ICvC oMKgwqDCoCBpZiAocmV0KQo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHJldHVybiByZXQ7 Cj4+ICsKPj4gK8KgwqDCoMKgIHBpbmN0cmxfcG1fc2VsZWN0X3NsZWVwX3N0YXRlKCZzcGlzZy0+ cGRldi0+ZGV2KTsKPj4gK8KgwqDCoMKgIGNsa19kaXNhYmxlX3VucHJlcGFyZShzcGlzZy0+cGNs ayk7Cj4+ICvCoMKgwqDCoCBpZiAoc3Bpc2ctPmNvcmUpCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqAgY2xrX2Rpc2FibGVfdW5wcmVwYXJlKHNwaXNnLT5jb3JlKTsKPj4gKwo+PiArwqDCoMKg wqAgcmV0dXJuIHJldDsKPj4gK30KPj4gKwo+PiArc3RhdGljIGludCBzcGlzZ19yZXN1bWVfcnVu dGltZShzdHJ1Y3QgZGV2aWNlICpkZXYpCj4+ICt7Cj4+ICvCoMKgwqDCoCBzdHJ1Y3Qgc3Bpc2df ZGV2aWNlICpzcGlzZyA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwo+PiArwqDCoMKgwqAgaW50IHJl dDsKPj4gKwo+PiArwqDCoMKgwqAgaWYgKHNwaXNnLT5jb3JlKQo+PiArwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgIGNsa19wcmVwYXJlX2VuYWJsZShzcGlzZy0+Y29yZSk7Cj4+ICvCoMKgwqDCoCBj bGtfcHJlcGFyZV9lbmFibGUoc3Bpc2ctPnBjbGspOwo+IAo+IFdoeSA/IFRob3NlIGFyZSBwYXJl bnRzIG9uIHNjbGssIHNvIGRpc2FibGluZyBzY2xrIHdvdWxkIG1lY2hhbmljYWxseQo+IGRpc2Fi bGUgY29yZS9wY2xrLgo+IAoKUGNsayBpcyBwYXJlbnQgb24gc2Nsay4gQnV0IGNvcmUgY2xvY2sg aXMgbmVlZCBlbmFibGUvZGlzYWJsZSBzZXBhcmF0bHkuCldpbGwgZW5hYmxlL2Rpc2FibGUgc2Ns ayBhbmQgY29yZS4KCj4+ICvCoMKgwqDCoCBwaW5jdHJsX3BtX3NlbGVjdF9kZWZhdWx0X3N0YXRl KCZzcGlzZy0+cGRldi0+ZGV2KTsKPj4gKwo+PiArwqDCoMKgwqAgcmV0ID0gc3BpX2NvbnRyb2xs ZXJfcmVzdW1lKHNwaXNnLT5jb250cm9sbGVyKTsKPj4gKwo+PiArwqDCoMKgwqAgcmV0dXJuIHJl dDsKPj4gK30KPiAKPiBSaWdodCwgYnV0IHRob3NlIGFyZSBvYnZpb3VzbHkgdXNlbGVzcyBzaW5j ZSB5b3UgbmVpdGhlciBzZXQgcnVudGltZSBwbSwKPiBub3QgY2FsbCBhbnkgcnVudGltZSBwbSBm dW5jdGlvbnMgdG8gd2FrZSB0aGUgZGV2aWNlIGZvciBhIHRyYW5zYWN0aW9uLgo+IAo+IFNvIEkg ZG9uJ3QgdGhpbmsgeW91IGV2ZW4gdGVzdGVkIHRob3NlLgo+IAoKSSB3aWxsIHRlc3QgcnVudGlt ZSBzdXNwZW5kIGluIG5leHQgdmVyc2lvbi4KCj4gVGhhbmtzLAo+IE5laWwKPiA+PiArCj4+ICtz dGF0aWMgY29uc3Qgc3RydWN0IGRldl9wbV9vcHMgYW1sb2dpY19zcGlzZ19wbV9vcHMgPSB7Cj4+ ICvCoMKgwqDCoCAucnVudGltZV9zdXNwZW5kwqDCoMKgwqDCoMKgwqAgPSBzcGlzZ19zdXNwZW5k X3J1bnRpbWUsCj4+ICvCoMKgwqDCoCAucnVudGltZV9yZXN1bWXCoMKgwqDCoMKgwqDCoMKgID0g c3Bpc2dfcmVzdW1lX3J1bnRpbWUsCj4+ICt9Owo+PiArCj4+ICtzdGF0aWMgY29uc3Qgc3RydWN0 IG9mX2RldmljZV9pZCBhbWxvZ2ljX3NwaXNnX29mX21hdGNoW10gPSB7Cj4+ICvCoMKgwqDCoCB7 Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgLmNvbXBhdGlibGUgPSAiYW1sb2dpYyxhNC1z cGlzZyIsCj4+ICvCoMKgwqDCoCB9LAo+PiArCj4+ICvCoMKgwqDCoCB7IC8qIHNlbnRpbmVsICov IH0KPj4gK307Cj4+ICtNT0RVTEVfREVWSUNFX1RBQkxFKG9mLCBhbWxvZ2ljX3NwaXNnX29mX21h dGNoKTsKPj4gKwo+PiArc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgYW1sb2dpY19zcGlz Z19kcml2ZXIgPSB7Cj4+ICvCoMKgwqDCoCAucHJvYmUgPSBhbWxfc3Bpc2dfcHJvYmUsCj4+ICvC oMKgwqDCoCAucmVtb3ZlID0gYW1sX3NwaXNnX3JlbW92ZSwKPj4gK8KgwqDCoMKgIC5kcml2ZXLC oCA9IHsKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAubmFtZSA9ICJhbWxvZ2ljLXNwaXNn IiwKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAub2ZfbWF0Y2hfdGFibGUgPSBvZl9tYXRj aF9wdHIoYW1sb2dpY19zcGlzZ19vZl9tYXRjaCksCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqAgLnBtID0gJmFtbG9naWNfc3Bpc2dfcG1fb3BzLAo+PiArwqDCoMKgwqAgfSwKPj4gK307Cj4+ ICsKPj4gK21vZHVsZV9wbGF0Zm9ybV9kcml2ZXIoYW1sb2dpY19zcGlzZ19kcml2ZXIpOwo+PiAr Cj4+ICtNT0RVTEVfREVTQ1JJUFRJT04oIkFtbG9naWMgU1BJIFNjYXR0ZXItR2F0aGVyIENvbnRy b2xsZXIgZHJpdmVyIik7Cj4+ICtNT0RVTEVfQVVUSE9SKCJTdW5ueSBMdW8gPHN1bm55Lmx1b0Bh bWxvZ2ljLmNvbT4iKTsKPj4gK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKPj4KPiAKCl9fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmxpbnV4LWFtbG9naWMgbWFp bGluZyBsaXN0CmxpbnV4LWFtbG9naWNAbGlzdHMuaW5mcmFkZWFkLm9yZwpodHRwOi8vbGlzdHMu aW5mcmFkZWFkLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2xpbnV4LWFtbG9naWMK