Received: by 2002:ad5:4acb:0:0:0:0:0 with SMTP id n11csp325553imw; Fri, 8 Jul 2022 03:49:08 -0700 (PDT) X-Google-Smtp-Source: AGRyM1srJ7Mg/2Yq5Jex6R2vbW5PkQcrcoxBNQqhcD4vCJDkMzM0txVvWqowYxFE81V98Lh/DeUS X-Received: by 2002:aa7:cd86:0:b0:43a:26e3:d333 with SMTP id x6-20020aa7cd86000000b0043a26e3d333mr3920957edv.178.1657277348177; Fri, 08 Jul 2022 03:49:08 -0700 (PDT) ARC-Seal: i=2; a=rsa-sha256; t=1657277348; cv=pass; d=google.com; s=arc-20160816; b=teQWZlXtI91r4NEDTNMDNPTnYOx5rI3CqxEddSmm74tHZswoKT5QlNUzjhlABDcOQq pofVgSs9y25ffDDVT3Q02oCEMF6fmeRx21Fjmzw4ygFE24XgaYRLe+CvKPHy2+QDzv16 awwfoRIKeWyFybgM7HmWfySDau5ZdApOSgSq9oKNLEOkhIjPCIlXPi/822X5Y+G/TOvH I8YZBblwxPAmCVNkBStCe69LKKFFcWkCCsudE0CeaGw2oTPpO+rjFYyws8qK6RdM1bVA Uq4ntFntdf1Vz70+swqqQ76EbMqqc7Sf3sSxyVkgQ/Bc0rQxyAS9EE4Xfs/gKgFQWXij 3fvw== ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:mime-version:content-transfer-encoding :content-language:accept-language:in-reply-to:references:message-id :date:thread-index:thread-topic:subject:cc:to:from:dkim-signature; bh=hcuxftJ3kM4vVI98nyFmNj0AgoG5BnSygdmnHN7Rr6I=; b=YXS9XyBcgRRr5QuU2WJO0kJkRw5HZ/AGZXoilLBy649bXubjJogIHyGe9XWKPIv5PK qsn4qpPiNCcMBiv7+GsvoUXg4o+VyNLVlhf8rYSAeVyqSD+xRZL0XN+ug8WSh2LST8M+ et+zHAif4xqurm9FgzJT6CvZctiqggreuO4PjhEwshGnHqiQaC3Vm/YSDfR2+N/KTzwu 44b0wJv78lE2mZa7/FDD2XeX9bJBO5fD+g60VGYGXir/c2rQGV+A61RjcnisyBhk4ak9 tWotn8iZIXBi680aQJ9exyrYRIzf4CnWK2lm/iphhzOzRRnhzBql5s6DYrC/JvdSAv5p Rxnw== ARC-Authentication-Results: i=2; mx.google.com; dkim=pass header.i=@Nvidia.com header.s=selector2 header.b=eFO3Xzs5; arc=pass (i=1 spf=pass spfdomain=nvidia.com dkim=pass dkdomain=nvidia.com dmarc=pass fromdomain=nvidia.com); spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=nvidia.com Return-Path: Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id f20-20020a056402195400b0043a71bf3999si15365039edz.57.2022.07.08.03.48.41; Fri, 08 Jul 2022 03:49:08 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@Nvidia.com header.s=selector2 header.b=eFO3Xzs5; arc=pass (i=1 spf=pass spfdomain=nvidia.com dkim=pass dkdomain=nvidia.com dmarc=pass fromdomain=nvidia.com); spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=nvidia.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S237967AbiGHKqy (ORCPT + 99 others); Fri, 8 Jul 2022 06:46:54 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:52640 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S237778AbiGHKqw (ORCPT ); Fri, 8 Jul 2022 06:46:52 -0400 Received: from NAM11-CO1-obe.outbound.protection.outlook.com (mail-co1nam11on2041.outbound.protection.outlook.com [40.107.220.41]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 3167C84EE7; Fri, 8 Jul 2022 03:46:49 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=ijLtELCcYpIJz/tXWkX8IY3NfXHkW/ZCBX5cAcWfux/AHLX/cYNk3/Gn8momUwedkZwO35RyIH7pSdpOKgPxdFfLC4y9M2S6OreJXlq/X3Aa4oedK360BbDQhtrZ2T6HjvEa+mRHih/drSv4GA0CbQ0lqD33GR8CrrKR1aPIsUOfJI2R/5jSGRfOp2TOO6hNsPcb5nEhzV1nYY9dESJRIwKoTphVQwPBxDOHM2MIVyifsqioRPq5oXvIYMpUguLC3ZJ0PaRosPbkGpxbdMgsVkcLKAPemGFFFVGuiFSOSB6POQm674vQ2vNGf1Nz9XWZpkiUISBxY7WW4gbEj/Tfzg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=hcuxftJ3kM4vVI98nyFmNj0AgoG5BnSygdmnHN7Rr6I=; b=K1ZnU7muPhyzrlJ/Ds5StTPTSOmL0/dpXyMjYVkbY4+g/87OFYmpDLQg5WAUpym63yDH9W6Du7EYISgRKRHEcRX/lH8ntTNqHQgv9BAAOmpQknQpE0hAaxJfdXGH4EiDjLtZzaTMapRVddAOuIFjRAx8AeGi3iQ5uUTQPrW8rEUFNl2KrQSXBV/oXGO8b6cHOyIElhZbyG48e+Wq9t6Sa1nFmzrkDVSuji+Ah+Z2VpnRw375PlTVlu8xznkMLhbrRK8+9/HjFsBvMbrBZbSLG99uLIP09Kx1DhgaDu5weDkrHP0190xKmzrgK67YXF0q5IJWhDqG5J3GN6nrf97VHw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=nvidia.com; dmarc=pass action=none header.from=nvidia.com; dkim=pass header.d=nvidia.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=Nvidia.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=hcuxftJ3kM4vVI98nyFmNj0AgoG5BnSygdmnHN7Rr6I=; b=eFO3Xzs5OFgPnYuRKpdVUd8mzGtUuW1e+3NY/0saawwpuKkj8uHPJREdr9/WZnWcomfItqlGR9GziO7N2sboPzAehorK9fOKl5T7jL5jtRgd6N6diCfDjArs0fUhNpCdicoHS4uxKhn67JoHs5wglVjB/Kdnfx3Ry9gsK3sGVFYGUyE/yCGHwXXGlZcIr68RyoaxGyHJYWL+UDPQqm+ZkmZGRtZw2RX1lN83wF39dIwBJdMHcQ01rYhUEwKUnmxlydT7MzT+OGs10Rfyxfo5IYgks14Q1GDcj3nN+69tJiqkDKiTO1puzvUHPBh74sG+6ocSUuHHvwTFDdPfqQBfrQ== Received: from SJ0PR12MB5676.namprd12.prod.outlook.com (2603:10b6:a03:42e::8) by DM6PR12MB5549.namprd12.prod.outlook.com (2603:10b6:5:209::13) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5395.15; Fri, 8 Jul 2022 10:46:47 +0000 Received: from SJ0PR12MB5676.namprd12.prod.outlook.com ([fe80::6cdd:89c7:38f5:35b3]) by SJ0PR12MB5676.namprd12.prod.outlook.com ([fe80::6cdd:89c7:38f5:35b3%7]) with mapi id 15.20.5417.020; Fri, 8 Jul 2022 10:46:46 +0000 From: Besar Wicaksono To: Suzuki K Poulose , "robin.murphy@arm.com" , "catalin.marinas@arm.com" , "will@kernel.org" , "mark.rutland@arm.com" CC: "linux-arm-kernel@lists.infradead.org" , "linux-kernel@vger.kernel.org" , "linux-tegra@vger.kernel.org" , "sudeep.holla@arm.com" , "thanu.rangarajan@arm.com" , "Michael.Williams@arm.com" , Thierry Reding , Jonathan Hunter , Vikram Sethi , "mathieu.poirier@linaro.org" , "mike.leach@linaro.org" , "leo.yan@linaro.org" Subject: RE: [RESEND PATCH v3 1/2] perf: coresight_pmu: Add support for ARM CoreSight PMU driver Thread-Topic: [RESEND PATCH v3 1/2] perf: coresight_pmu: Add support for ARM CoreSight PMU driver Thread-Index: AQHYhTLreZhiUX+onkijjgrrTcbLR61y2R2AgAGFGbA= Date: Fri, 8 Jul 2022 10:46:46 +0000 Message-ID: References: <20220621055035.31766-1-bwicaksono@nvidia.com> <20220621055035.31766-2-bwicaksono@nvidia.com> <73dafe08-d1f1-90b6-995e-7d38e9e1dce7@arm.com> In-Reply-To: <73dafe08-d1f1-90b6-995e-7d38e9e1dce7@arm.com> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: authentication-results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nvidia.com; x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: 9ebe58e0-4b03-4ab6-f3c5-08da60cf2793 x-ms-traffictypediagnostic: DM6PR12MB5549:EE_ x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: hFjhhzN94BtrdhPaWdvjd6spB2kgwyGMLQNTa3ixQXHQFmAEBPyUaX5i8kxEHuJTpr2iwVyL7fgnmWNRJI72NLLettasZtF/iG+RxD4lOI7Th7iDyrYpLXVQ+/8a/250OtyWot+8+vJe7+Jp+vZdx7MWxr8gm0rqv9eP+CrUgEw2AEAnWIwHBcEA4PrnMua5MJRYgz/viBSAXCm/7GB09F4WFfx9g7c08EnDUXUp6HF80xwE808+8jfX0AsYOgSeplrIBXOpkAPaMuloYE7vNVLssDrGZmhgbwZNKPEaYwuSeoc5K0tmmjd65qLA2NsVR0uo4axkjpu5Xi/WJh1BQr/SFon3Tl1xDikW7vqe825AUjhJiw7qRPZZMigiQoitoeDikQ9ZEB8YcIPMbK+QxiIwQdDqvuu53RA1IM1cjTNv1QFrl6i+KkrmUJvb0wCAuauANOEYNljUh/u7xcHlgY3oUAmHOPJUUXJxbx0w3fcsxM2V8XsL85tZo3obiMh5HRF+1eqCrhGQRML5TwRFLigxAAus6KjpewlDseel+HKGSfCiiR4V+Fi+ZbOhYLLoVjhgF56OkxZzDu6TYOkPA1DQyuyywGPg/lsU+sw6FwL1oVV80M1/hphzWYhRjdLsHv5lYQHcpYNqw25V/XvTeC46vAwAV56MD3i5BO63gKCFMYNU403wc+OVdUMniMq6eswIYygIHbCw8ZiI9WU5SwOzkzk/Aq/t/5ADL1NL8bgBRvuJqq9WkZAokIyzV1LAE+N5YBTz4FdT3q0wEZqMpTmVP/SrfRr7SvDO86w2rR65kLxRIvGZpww24BCG90Y52DDuyR+VTNMKAQv6lm7Yg6ibQ2dtodtxhH10AU9mLOQKGfAyv4eWuzW0UX7JvFbf+Uu4tOGCjn2wLIhTzMerf0/TqXGLC+JsD0yPzO/d0nqF4r5qExs8dJKZidFlLMsH x-forefront-antispam-report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:SJ0PR12MB5676.namprd12.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230016)(4636009)(366004)(136003)(39860400002)(396003)(376002)(346002)(4326008)(71200400001)(66476007)(83380400001)(64756008)(122000001)(478600001)(66946007)(8676002)(5660300002)(86362001)(66446008)(52536014)(110136005)(33656002)(30864003)(186003)(66556008)(26005)(38070700005)(8936002)(966005)(76116006)(9686003)(38100700002)(7416002)(53546011)(41300700001)(6506007)(54906003)(7696005)(2906002)(55016003)(316002)(579004)(559001);DIR:OUT;SFP:1101; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?utf-8?B?RkJzczEvY1N6eGw2Y0RGZXVrSFd2UzVWYlBBekl4cHAxeGxtVHlQNDFCODJJ?= =?utf-8?B?cTZvaXc5V0UwWVdXQWMzT1J2ZWlwWlRXdHpMVXBWbWJKQVc4M0Z5OXoxZ1Zv?= =?utf-8?B?SURsaE05Nm9KSmlnb2d3SjYzSzJ6QjkvcDJoVldpWVdESk84MVRCNTVjVUlw?= =?utf-8?B?M2x6d2lvU0NGMFE5MVQ3MTFsR0V3Y3c0S2IyQlhZMUpSam1Ic2FqRDROUlJ0?= =?utf-8?B?N290T2M0L0ZIUmRQYWlPTFlZd0hIaEYwa1VjM2NoV0JhSnRjOXU4ZEJ0K2s5?= =?utf-8?B?WVU5SWcyQ0ZHcmJJeHpOUUJqWUk2ZmhvNHhXemZRai9idnlJb2pNWWluYUxE?= =?utf-8?B?WEU3WTNsNVd3MUNCdm1hcE9LT1lweUs5bDBENlFhWUFYdjQra3pLMi9xMHdU?= =?utf-8?B?ZGluSFZ0L3F4eStpUDErdzBzTk1jdVM4bDlYNTI2Y3pvRW5BWVI3eGliMWt6?= =?utf-8?B?amFGNG83d09VUWpraFZFZU5MNTViZUpJNmxZTE5mOHRCQmdwVTgyOW1KUk05?= =?utf-8?B?NTlYMzhqMGlyL0FoU1l0YzBoaFNSSURWVUpRL25BV0kyRWVGVUVKbXJrVGVQ?= =?utf-8?B?WUNvQngzNkVaTjB5bzdwdnFEbkhiWnBjSlBYT0tPSlo4WVplSlJZaStLS3Bz?= =?utf-8?B?MVFiQ0xEanIxMlNjeTRCWE9nOHI1Ni9TR1h4N3NGU1BjMkJHYmNsQ0o1VlVr?= =?utf-8?B?eHdiY1dUSmdaZWZhUHBrUkhPclBjb1NTbFIrVDFPbkVqdE9kdWRnUzJzY2RJ?= =?utf-8?B?Y2hFWlNIMk1aSXE3bmFHUWNTSFBLVXVRQ09oTXhVN0FQcVFOaGtReEdNUnln?= =?utf-8?B?RlV3dWhPNExmMTBnT01QOStadGJOZFRaTmhoMGlsU0JPdHRkQlpzbDJ5S0FB?= =?utf-8?B?ODlacGpaWGxrVFIrd2prR2szZmkxc1NqU0FMeDlVMy9BT2gwUVhPSHF0alds?= =?utf-8?B?bXdkcCtkeEg4VmpmWitiOTVVMHU5OVRUQ1h5SXJldlpMc3hwaXhuWHRBMXRC?= =?utf-8?B?L2EzQnBnaXFIMzZ2cVNlWDVpWGZoOXZOMXg2dytnREF5TUJZWTNMQVhZNjdo?= =?utf-8?B?UVpNbzlnOTM0R1czdUhOdXowRzhxM1NqMDBOdlNCNEpWVHR2MGxUdGphZTVC?= =?utf-8?B?SWlsZ1NMZmxjcW1TTWFiOTI3VDYrUTRJS2FsVW1aK0lUOEt1Z2FLY0g4Qngy?= =?utf-8?B?NG90dWFTUjlKZVRoeDBMWUlWaFBja0F1S0FaSlpuWmk1MVY4MFRpTlJZTlk0?= =?utf-8?B?MTJ6SkQ5S1FqQU5FeDFseFNBanMxWnZCbHQ4eGJRdjhUWWhrUlRFNzBObnN2?= =?utf-8?B?aDVpQ0ZPVEJQWmRZanJuZ05aa2ppNUI4NXVSVXVranNmb1R1eU5IUDJQRGRs?= =?utf-8?B?UzA5MjFTbFNRVDNtSVBCeWhJL3d3RWwyZzcvTHJCTmlZUDFQem1QTlR2WUYv?= =?utf-8?B?dHN1NlVFbGMzNXBuYjdXUTJ0cnpSY2gvTVRzaEp2ZFh6NXFYOXoxNnRTMGhm?= =?utf-8?B?NnRxM2Y3N3F4TlEyWWw5NUhlZEVjVUp6MTdnZDZHaWxzemxGQkdIVTRXelJo?= =?utf-8?B?UktIV2svQmFFUGZqbkgycXBReU1UK0o4NDRsS280RlNIMlBoTEJaNTBIU3F5?= =?utf-8?B?YUViQkgrNU1KVExPWVNxclZtRHF3bXJsSWFXNEFHVjAvT1V2czc0YVJ5eldF?= =?utf-8?B?U2V1ZEV0cWMwTkFaWjAzdEdCN2xicTgycnN6V1U4dWxMUXl1YWtZY3BwWHov?= =?utf-8?B?SVJGTTQ0WWJZVmZRN3MyWXpkMkJ2UG1nZnQ1c3k4cE8xUWtFUnA5ci9RbkQv?= =?utf-8?B?eHAwSUJaSDhJSTVIdjRDRS9tSU4xTEpEbHhjU2FDMUlDQlgwNnhvdk5GTWpQ?= =?utf-8?B?aFJXcUVoTWVVQjl5bCtIZUJjakFmTUNaa2xFQ2ZkYXdBUTRSWnU0Mlk2UXRG?= =?utf-8?B?bXRGeEdmWDdnSm13MTNEdDFPQk1zdmJDS0w4Y2dIOWMxWlIvbWhKWjhHQ0dD?= =?utf-8?B?NkI4bGFLbHMvaXQvZTJsalBDcUcrcTRmaFVmSTE4eG9OWkdxTVZVUHdjQTJl?= =?utf-8?B?cXJCa0JveFk4ZmgxNXA3dGM4dWRuLzFwUU1BbVpteGNray82Zms3dGlnVFVh?= =?utf-8?Q?o5SVIc53RyzfPFqDCXKzd+GBq?= Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 MIME-Version: 1.0 X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: SJ0PR12MB5676.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 9ebe58e0-4b03-4ab6-f3c5-08da60cf2793 X-MS-Exchange-CrossTenant-originalarrivaltime: 08 Jul 2022 10:46:46.4538 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 43083d15-7273-40c1-b7db-39efd9ccc17a X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: W83/rDKrIPk9+OjcgHpz4QusY2JEZRLuVU7QfFEl3lRUlYZPgkiLYapDMcdTzUoRlOmBVqYI5o4W24dTykdi5Q== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM6PR12MB5549 X-Spam-Status: No, score=-1.8 required=5.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,FORGED_SPF_HELO, RCVD_IN_DNSWL_NONE,RCVD_IN_MSPIKE_H2,SPF_HELO_PASS,SPF_NONE, T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org SGkgU3V6dWtpLA0KDQpQbGVhc2Ugc2VlIG15IHJlcGxpZXMgaW5saW5lLg0KDQo+IC0tLS0tT3Jp Z2luYWwgTWVzc2FnZS0tLS0tDQo+IEZyb206IFN1enVraSBLIFBvdWxvc2UgPHN1enVraS5wb3Vs b3NlQGFybS5jb20+DQo+IFNlbnQ6IFRodXJzZGF5LCBKdWx5IDcsIDIwMjIgNjowOCBQTQ0KPiBU bzogQmVzYXIgV2ljYWtzb25vIDxid2ljYWtzb25vQG52aWRpYS5jb20+OyByb2Jpbi5tdXJwaHlA YXJtLmNvbTsNCj4gY2F0YWxpbi5tYXJpbmFzQGFybS5jb207IHdpbGxAa2VybmVsLm9yZzsgbWFy ay5ydXRsYW5kQGFybS5jb20NCj4gQ2M6IGxpbnV4LWFybS1rZXJuZWxAbGlzdHMuaW5mcmFkZWFk Lm9yZzsgbGludXgta2VybmVsQHZnZXIua2VybmVsLm9yZzsNCj4gbGludXgtdGVncmFAdmdlci5r ZXJuZWwub3JnOyBzdWRlZXAuaG9sbGFAYXJtLmNvbTsNCj4gdGhhbnUucmFuZ2FyYWphbkBhcm0u Y29tOyBNaWNoYWVsLldpbGxpYW1zQGFybS5jb207IFRoaWVycnkgUmVkaW5nDQo+IDx0cmVkaW5n QG52aWRpYS5jb20+OyBKb25hdGhhbiBIdW50ZXIgPGpvbmF0aGFuaEBudmlkaWEuY29tPjsgVmlr cmFtDQo+IFNldGhpIDx2c2V0aGlAbnZpZGlhLmNvbT47IG1hdGhpZXUucG9pcmllckBsaW5hcm8u b3JnOw0KPiBtaWtlLmxlYWNoQGxpbmFyby5vcmc7IGxlby55YW5AbGluYXJvLm9yZw0KPiBTdWJq ZWN0OiBSZTogW1JFU0VORCBQQVRDSCB2MyAxLzJdIHBlcmY6IGNvcmVzaWdodF9wbXU6IEFkZCBz dXBwb3J0IGZvcg0KPiBBUk0gQ29yZVNpZ2h0IFBNVSBkcml2ZXINCj4gDQo+IEV4dGVybmFsIGVt YWlsOiBVc2UgY2F1dGlvbiBvcGVuaW5nIGxpbmtzIG9yIGF0dGFjaG1lbnRzDQo+IA0KPiANCj4g T24gMjEvMDYvMjAyMiAwNjo1MCwgQmVzYXIgV2ljYWtzb25vIHdyb3RlOg0KPiA+IEFkZCBzdXBw b3J0IGZvciBBUk0gQ29yZVNpZ2h0IFBNVSBkcml2ZXIgZnJhbWV3b3JrIGFuZCBpbnRlcmZhY2Vz Lg0KPiA+IFRoZSBkcml2ZXIgcHJvdmlkZXMgZ2VuZXJpYyBpbXBsZW1lbnRhdGlvbiB0byBvcGVy YXRlIHVuY29yZSBQTVUgYmFzZWQNCj4gPiBvbiBBUk0gQ29yZVNpZ2h0IFBNVSBhcmNoaXRlY3R1 cmUuIFRoZSBkcml2ZXIgYWxzbyBwcm92aWRlcyBpbnRlcmZhY2UNCj4gPiB0byBnZXQgdmVuZG9y L2ltcGxlbWVudGF0aW9uIHNwZWNpZmljIGluZm9ybWF0aW9uLCBmb3IgZXhhbXBsZSBldmVudA0K PiA+IGF0dHJpYnV0ZXMgYW5kIGZvcm1hdGluZy4NCj4gPg0KPiA+IFRoZSBzcGVjaWZpY2F0aW9u IHVzZWQgaW4gdGhpcyBpbXBsZW1lbnRhdGlvbiBjYW4gYmUgZm91bmQgYmVsb3c6DQo+ID4gICAq IEFDUEkgQXJtIFBlcmZvcm1hbmNlIE1vbml0b3JpbmcgVW5pdCB0YWJsZToNCj4gPiAgICAgICAg ICBodHRwczovL2RldmVsb3Blci5hcm0uY29tL2RvY3VtZW50YXRpb24vZGVuMDExNy9sYXRlc3QN Cj4gPiAgICogQVJNIENvcmVzaWdodCBQTVUgYXJjaGl0ZWN0dXJlOg0KPiA+ICAgICAgICAgIGh0 dHBzOi8vZGV2ZWxvcGVyLmFybS5jb20vZG9jdW1lbnRhdGlvbi9paGkwMDkxL2xhdGVzdA0KPiA+ DQo+ID4gU2lnbmVkLW9mZi1ieTogQmVzYXIgV2ljYWtzb25vIDxid2ljYWtzb25vQG52aWRpYS5j b20+DQo+ID4gLS0tDQo+ID4gICBhcmNoL2FybTY0L2NvbmZpZ3MvZGVmY29uZmlnICAgICAgICAg ICAgICAgICAgfCAgICAxICsNCj4gPiAgIGRyaXZlcnMvcGVyZi9LY29uZmlnICAgICAgICAgICAg ICAgICAgICAgICAgICB8ICAgIDIgKw0KPiA+ICAgZHJpdmVycy9wZXJmL01ha2VmaWxlICAgICAg ICAgICAgICAgICAgICAgICAgIHwgICAgMSArDQo+ID4gICBkcml2ZXJzL3BlcmYvY29yZXNpZ2h0 X3BtdS9LY29uZmlnICAgICAgICAgICAgfCAgIDExICsNCj4gPiAgIGRyaXZlcnMvcGVyZi9jb3Jl c2lnaHRfcG11L01ha2VmaWxlICAgICAgICAgICB8ICAgIDYgKw0KPiA+ICAgLi4uL3BlcmYvY29y ZXNpZ2h0X3BtdS9hcm1fY29yZXNpZ2h0X3BtdS5jICAgIHwgMTMxMg0KPiArKysrKysrKysrKysr KysrKw0KPiA+ICAgLi4uL3BlcmYvY29yZXNpZ2h0X3BtdS9hcm1fY29yZXNpZ2h0X3BtdS5oICAg IHwgIDE3NyArKysNCj4gPiAgIDcgZmlsZXMgY2hhbmdlZCwgMTUxMCBpbnNlcnRpb25zKCspDQo+ ID4gICBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9wZXJmL2NvcmVzaWdodF9wbXUvS2NvbmZp Zw0KPiA+ICAgY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvcGVyZi9jb3Jlc2lnaHRfcG11L01h a2VmaWxlDQo+ID4gICBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9wZXJmL2NvcmVzaWdodF9w bXUvYXJtX2NvcmVzaWdodF9wbXUuYw0KPiA+ICAgY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMv cGVyZi9jb3Jlc2lnaHRfcG11L2FybV9jb3Jlc2lnaHRfcG11LmgNCj4gPg0KPiA+IGRpZmYgLS1n aXQgYS9hcmNoL2FybTY0L2NvbmZpZ3MvZGVmY29uZmlnIGIvYXJjaC9hcm02NC9jb25maWdzL2Rl ZmNvbmZpZw0KPiA+IGluZGV4IDdkMTEwNTM0M2JjMi4uMjIxODRmODg4M2RhIDEwMDY0NA0KPiA+ IC0tLSBhL2FyY2gvYXJtNjQvY29uZmlncy9kZWZjb25maWcNCj4gPiArKysgYi9hcmNoL2FybTY0 L2NvbmZpZ3MvZGVmY29uZmlnDQo+ID4gQEAgLTEyMTIsNiArMTIxMiw3IEBAIENPTkZJR19QSFlf VU5JUEhJRVJfVVNCMz15DQo+ID4gICBDT05GSUdfUEhZX1RFR1JBX1hVU0I9eQ0KPiA+ICAgQ09O RklHX1BIWV9BTTY1NF9TRVJERVM9bQ0KPiA+ICAgQ09ORklHX1BIWV9KNzIxRV9XSVo9bQ0KPiA+ ICtDT05GSUdfQVJNX0NPUkVTSUdIVF9QTVU9eQ0KPiA+ICAgQ09ORklHX0FSTV9TTU1VX1YzX1BN VT1tDQo+ID4gICBDT05GSUdfRlNMX0lNWDhfRERSX1BNVT1tDQo+ID4gICBDT05GSUdfUUNPTV9M Ml9QTVU9eQ0KPiA+IGRpZmYgLS1naXQgYS9kcml2ZXJzL3BlcmYvS2NvbmZpZyBiL2RyaXZlcnMv cGVyZi9LY29uZmlnDQo+ID4gaW5kZXggMWUyZDY5NDUzNzcxLi5jNGU3Y2Q1YjQxNjIgMTAwNjQ0 DQo+ID4gLS0tIGEvZHJpdmVycy9wZXJmL0tjb25maWcNCj4gPiArKysgYi9kcml2ZXJzL3BlcmYv S2NvbmZpZw0KPiA+IEBAIC0xOTIsNCArMTkyLDYgQEAgY29uZmlnIE1BUlZFTExfQ04xMEtfRERS X1BNVQ0KPiA+ICAgICAgICAgRW5hYmxlIHBlcmYgc3VwcG9ydCBmb3IgTWFydmVsbCBERFIgUGVy Zm9ybWFuY2UgbW9uaXRvcmluZw0KPiA+ICAgICAgICAgZXZlbnQgb24gQ04xMEsgcGxhdGZvcm0u DQo+ID4NCj4gPiArc291cmNlICJkcml2ZXJzL3BlcmYvY29yZXNpZ2h0X3BtdS9LY29uZmlnIg0K PiA+ICsNCj4gPiAgIGVuZG1lbnUNCj4gPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9wZXJmL01ha2Vm aWxlIGIvZHJpdmVycy9wZXJmL01ha2VmaWxlDQo+ID4gaW5kZXggNTdhMjc5YzYxZGY1Li40MTI2 YTA0YjU1ODMgMTAwNjQ0DQo+ID4gLS0tIGEvZHJpdmVycy9wZXJmL01ha2VmaWxlDQo+ID4gKysr IGIvZHJpdmVycy9wZXJmL01ha2VmaWxlDQo+ID4gQEAgLTIwLDMgKzIwLDQgQEAgb2JqLSQoQ09O RklHX0FSTV9ETUM2MjBfUE1VKSArPQ0KPiBhcm1fZG1jNjIwX3BtdS5vDQo+ID4gICBvYmotJChD T05GSUdfTUFSVkVMTF9DTjEwS19UQURfUE1VKSArPQ0KPiBtYXJ2ZWxsX2NuMTBrX3RhZF9wbXUu bw0KPiA+ICAgb2JqLSQoQ09ORklHX01BUlZFTExfQ04xMEtfRERSX1BNVSkgKz0NCj4gbWFydmVs bF9jbjEwa19kZHJfcG11Lm8NCj4gPiAgIG9iai0kKENPTkZJR19BUFBMRV9NMV9DUFVfUE1VKSAr PSBhcHBsZV9tMV9jcHVfcG11Lm8NCj4gPiArb2JqLSQoQ09ORklHX0FSTV9DT1JFU0lHSFRfUE1V KSArPSBjb3Jlc2lnaHRfcG11Lw0KPiA+IGRpZmYgLS1naXQgYS9kcml2ZXJzL3BlcmYvY29yZXNp Z2h0X3BtdS9LY29uZmlnDQo+IGIvZHJpdmVycy9wZXJmL2NvcmVzaWdodF9wbXUvS2NvbmZpZw0K PiA+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQo+ID4gaW5kZXggMDAwMDAwMDAwMDAwLi44OTE3NGY1 NGM3YmUNCj4gPiAtLS0gL2Rldi9udWxsDQo+ID4gKysrIGIvZHJpdmVycy9wZXJmL2NvcmVzaWdo dF9wbXUvS2NvbmZpZw0KPiA+IEBAIC0wLDAgKzEsMTEgQEANCj4gPiArIyBTUERYLUxpY2Vuc2Ut SWRlbnRpZmllcjogR1BMLTIuMA0KPiA+ICsjDQo+ID4gKyMgQ29weXJpZ2h0IChjKSAyMDIyLCBO VklESUEgQ09SUE9SQVRJT04gJiBBRkZJTElBVEVTLg0KPiA+ICsNCj4gPiArY29uZmlnIEFSTV9D T1JFU0lHSFRfUE1VDQo+ID4gKyAgICAgdHJpc3RhdGUgIkFSTSBDb3Jlc2lnaHQgUE1VIg0KPiA+ ICsgICAgIGRlcGVuZHMgb24gQUNQSQ0KPiA+ICsgICAgIGRlcGVuZHMgb24gQUNQSV9BUE1UIHx8 IENPTVBJTEVfVEVTVA0KPiA+ICsgICAgIGhlbHANCj4gPiArICAgICAgIFByb3ZpZGVzIHN1cHBv cnQgZm9yIFBlcmZvcm1hbmNlIE1vbml0b3JpbmcgVW5pdCAoUE1VKSBldmVudHMNCj4gYmFzZWQg b24NCj4gPiArICAgICAgIEFSTSBDb3JlU2lnaHQgUE1VIGFyY2hpdGVjdHVyZS4NCj4gPiBcIE5v IG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUNCj4gPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9wZXJmL2Nv cmVzaWdodF9wbXUvTWFrZWZpbGUNCj4gYi9kcml2ZXJzL3BlcmYvY29yZXNpZ2h0X3BtdS9NYWtl ZmlsZQ0KPiA+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQo+ID4gaW5kZXggMDAwMDAwMDAwMDAwLi5h MmE3YTVmYmJjMTYNCj4gPiAtLS0gL2Rldi9udWxsDQo+ID4gKysrIGIvZHJpdmVycy9wZXJmL2Nv cmVzaWdodF9wbXUvTWFrZWZpbGUNCj4gPiBAQCAtMCwwICsxLDYgQEANCj4gPiArIyBDb3B5cmln aHQgKGMpIDIwMjIsIE5WSURJQSBDT1JQT1JBVElPTiAmIEFGRklMSUFURVMuDQo+ID4gKyMNCj4g PiArIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMA0KPiA+ICsNCj4gPiArb2JqLSQo Q09ORklHX0FSTV9DT1JFU0lHSFRfUE1VKSArPSBcDQo+ID4gKyAgICAgYXJtX2NvcmVzaWdodF9w bXUubw0KPiA+IGRpZmYgLS1naXQgYS9kcml2ZXJzL3BlcmYvY29yZXNpZ2h0X3BtdS9hcm1fY29y ZXNpZ2h0X3BtdS5jDQo+IGIvZHJpdmVycy9wZXJmL2NvcmVzaWdodF9wbXUvYXJtX2NvcmVzaWdo dF9wbXUuYw0KPiA+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQo+ID4gaW5kZXggMDAwMDAwMDAwMDAw Li5iYTUyY2M1OTJiMmQNCj4gPiAtLS0gL2Rldi9udWxsDQo+ID4gKysrIGIvZHJpdmVycy9wZXJm L2NvcmVzaWdodF9wbXUvYXJtX2NvcmVzaWdodF9wbXUuYw0KPiA+IEBAIC0wLDAgKzEsMTMxMiBA QA0KPiA+ICsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMA0KPiA+ICsvKg0KPiA+ ICsgKiBBUk0gQ29yZVNpZ2h0IFBNVSBkcml2ZXIuDQo+ID4gKyAqDQo+ID4gKyAqIFRoaXMgZHJp dmVyIGFkZHMgc3VwcG9ydCBmb3IgdW5jb3JlIFBNVSBiYXNlZCBvbiBBUk0gQ29yZVNpZ2h0DQo+ IFBlcmZvcm1hbmNlDQo+ID4gKyAqIE1vbml0b3JpbmcgVW5pdCBBcmNoaXRlY3R1cmUuIFRoZSBQ TVUgaXMgYWNjZXNzaWJsZSB2aWEgTU1JTyByZWdpc3RlcnMNCj4gYW5kDQo+ID4gKyAqIGxpa2Ug b3RoZXIgdW5jb3JlIFBNVXMsIGl0IGRvZXMgbm90IHN1cHBvcnQgcHJvY2VzcyBzcGVjaWZpYyBl dmVudHMgYW5kDQo+ID4gKyAqIGNhbm5vdCBiZSB1c2VkIGluIHNhbXBsaW5nIG1vZGUuDQo+ID4g KyAqDQo+ID4gKyAqIFRoaXMgY29kZSBpcyBiYXNlZCBvbiBvdGhlciB1bmNvcmUgUE1VcyBsaWtl IEFSTSBEU1UgUE1VLiBJdA0KPiBwcm92aWRlcyBhDQo+ID4gKyAqIGdlbmVyaWMgaW1wbGVtZW50 YXRpb24gdG8gb3BlcmF0ZSB0aGUgUE1VIGFjY29yZGluZyB0byBDb3JlU2lnaHQNCj4gUE1VDQo+ ID4gKyAqIGFyY2hpdGVjdHVyZSBhbmQgQUNQSSBBUk0gUE1VIHRhYmxlIChBUE1UKSBkb2N1bWVu dHMgYmVsb3c6DQo+ID4gKyAqICAgLSBBUk0gQ29yZVNpZ2h0IFBNVSBhcmNoaXRlY3R1cmUgZG9j dW1lbnQgbnVtYmVyOiBBUk0gSUhJIDAwOTENCj4gQS5hLTAwYmV0MC4NCj4gPiArICogICAtIEFQ TVQgZG9jdW1lbnQgbnVtYmVyOiBBUk0gREVOMDExNy4NCj4gPiArICogVGhlIGRlc2NyaXB0aW9u IG9mIHRoZSBQTVUsIGxpa2UgdGhlIFBNVSBkZXZpY2UgaWRlbnRpZmljYXRpb24sDQo+IGF2YWls YWJsZQ0KPiA+ICsgKiBldmVudHMsIGFuZCBjb25maWd1cmF0aW9uIG9wdGlvbnMsIGlzIHZlbmRv ciBzcGVjaWZpYy4gVGhlIGRyaXZlcg0KPiBwcm92aWRlcw0KPiA+ICsgKiBpbnRlcmZhY2UgZm9y IHZlbmRvciBzcGVjaWZpYyBjb2RlIHRvIGdldCB0aGlzIGluZm9ybWF0aW9uLiBUaGlzIGFsbG93 cw0KPiB0aGUNCj4gPiArICogZHJpdmVyIHRvIGJlIHNoYXJlZCB3aXRoIFBNVSBmcm9tIGRpZmZl cmVudCB2ZW5kb3JzLg0KPiA+ICsgKg0KPiA+ICsgKiBUaGUgQ29yZVNpZ2h0IFBNVSBkZXZpY2Vz IGNhbiBiZSBuYW1lZCB1c2luZyBpbXBsZW1lbnRvciBzcGVjaWZpYw0KPiBmb3JtYXQsIG9yDQo+ ID4gKyAqIHdpdGggZGVmYXVsdCBuYW1pbmcgZm9ybWF0OiBhcm1fPGFwbXQgbm9kZSB0eXBlPl9w bXVfPG51bWVyaWMNCj4gaWQ+Lg0KPiANCj4gLS0tDQo+IA0KPiA+ICsgKiBUaGUgZGVzY3JpcHRp b24gb2YgdGhlIGRldmljZSwgbGlrZSB0aGUgaWRlbnRpZmllciwgc3VwcG9ydGVkIGV2ZW50cywg YW5kDQo+ID4gKyAqIGZvcm1hdHMgY2FuIGJlIGZvdW5kIGluIHN5c2ZzDQo+ID4gKyAqIC9zeXMv YnVzL2V2ZW50X3NvdXJjZS9kZXZpY2VzL2FybV88YXBtdCBub2RlDQo+IHR5cGU+X3BtdV88bnVt ZXJpYyBpZD4NCj4gDQo+IEkgZG9uJ3QgdGhpbmsgdGhlIGFib3ZlIGlzIG5lZWRlZC4gVGhpcyBp cyB0cnVlIGZvciBhbGwgUE1VIGRldmljZXMuDQo+IA0KDQpBY2tlZCwgSSB3aWxsIHJlbW92ZSBp dCBvbiBuZXh0IHZlcnNpb24uDQoNCj4gPiArICoNCj4gPiArICogVGhlIHVzZXIgc2hvdWxkIHJl ZmVyIHRvIHRoZSB2ZW5kb3IgdGVjaG5pY2FsIGRvY3VtZW50YXRpb24gdG8gZ2V0DQo+IGRldGFp bHMNCj4gPiArICogYWJvdXQgdGhlIHN1cHBvcnRlZCBldmVudHMuDQo+ID4gKyAqDQo+ID4gKyAq IENvcHlyaWdodCAoYykgMjAyMiwgTlZJRElBIENPUlBPUkFUSU9OICYgQUZGSUxJQVRFUy4NCj4g PiArICoNCj4gPiArICovDQo+ID4gKw0KPiA+ICsjaW5jbHVkZSA8bGludXgvYWNwaS5oPg0KPiA+ ICsjaW5jbHVkZSA8bGludXgvY2FjaGVpbmZvLmg+DQo+ID4gKyNpbmNsdWRlIDxsaW51eC9jdHlw ZS5oPg0KPiA+ICsjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+DQo+ID4gKyNpbmNsdWRlIDxs aW51eC9pby02NC1ub25hdG9taWMtbG8taGkuaD4NCj4gPiArI2luY2x1ZGUgPGxpbnV4L21vZHVs ZS5oPg0KPiA+ICsjaW5jbHVkZSA8bGludXgvbW9kX2RldmljZXRhYmxlLmg+DQo+ID4gKyNpbmNs dWRlIDxsaW51eC9wZXJmX2V2ZW50Lmg+DQo+ID4gKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9k ZXZpY2UuaD4NCj4gPiArI2luY2x1ZGUgPGFjcGkvcHJvY2Vzc29yLmg+DQo+ID4gKw0KPiA+ICsj aW5jbHVkZSAiYXJtX2NvcmVzaWdodF9wbXUuaCINCj4gPiArDQo+ID4gKyNkZWZpbmUgUE1VTkFN RSAiYXJtX3N5c3RlbV9wbXUiDQo+ID4gKw0KPiANCj4gSWYgd2UgaGF2ZSBkZWNpZWQgdG8gY2Fs bCB0aGlzIGFybV9zeXN0ZW1fcG11LCAod2hpY2ggSSBhbSBwZXJmZWN0bHkNCj4gaGFwcHkgd2l0 aCksIGNvdWxkIHdlIHBsZWFzZSBzdGljayB0byB0aGF0IG5hbWUgZm9yIGZ1bmN0aW9ucyB0aGF0 IHdlDQo+IGV4cG9ydCA/DQo+IA0KPiBlLmcsDQo+IHMvY29yZXNpZ2h0X3BtdV9zeXNmc19ldmVu dF9zaG93L2FybV9zeXN0ZW1fcG11X2V2ZW50X3Nob3coKS8NCj4gDQoNCkp1c3Qgd2FudCB0byBj b25maXJtLCBpcyBpdCBqdXN0IHRoZSBwdWJsaWMgZnVuY3Rpb25zIG9yIGRvIHdlIG5lZWQgdG8g cmVwbGFjZQ0KYWxsIHRoYXQgaGFzICJjb3Jlc2lnaHQiIG5hbWluZyA/IEluY2x1ZGluZyB0aGUg c3RhdGljIGZ1bmN0aW9ucywgc3RydWN0cywgZmlsZW5hbWUuDQoNCj4gPiArI2RlZmluZSBDT1JF U0lHSFRfQ1BVTUFTS19BVFRSKF9uYW1lLCBfY29uZmlnKSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBcDQo+ID4gKyAgICAgQ09SRVNJR0hUX0VYVF9BVFRSKF9uYW1lLCBjb3Jlc2lnaHRf cG11X2NwdW1hc2tfc2hvdywgICAgICAgICAgIFwNCj4gPiArICAgICAgICAgICAgICAgICAgICAg ICAgKHVuc2lnbmVkIGxvbmcpX2NvbmZpZykNCj4gPiArDQo+ID4gKy8qDQo+ID4gKyAqIFJlZ2lz dGVyIG9mZnNldHMgYmFzZWQgb24gQ29yZVNpZ2h0IFBlcmZvcm1hbmNlIE1vbml0b3JpbmcgVW5p dA0KPiBBcmNoaXRlY3R1cmUNCj4gPiArICogRG9jdW1lbnQgbnVtYmVyOiBBUk0tRUNNLTA2NDAx NjkgMDBhbHA2DQo+ID4gKyAqLw0KPiA+ICsjZGVmaW5lIFBNRVZDTlRSX0xPICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIDB4MA0KPiA+ICsjZGVmaW5lIFBNRVZDTlRSX0hJICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NA0KPiA+ICsjZGVmaW5lIFBNRVZUWVBFUiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NDAwDQo+ID4gKyNkZWZpbmUgUE1D Q0ZJTFRSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg0N0MNCj4gPiArI2Rl ZmluZSBQTUVWRklMVFIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweEEwMA0K PiA+ICsjZGVmaW5lIFBNQ05URU5TRVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IDB4QzAwDQo+ID4gKyNkZWZpbmUgUE1DTlRFTkNMUiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgMHhDMjANCj4gPiArI2RlZmluZSBQTUlOVEVOU0VUICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAweEM0MA0KPiA+ICsjZGVmaW5lIFBNSU5URU5DTFIgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIDB4QzYwDQo+ID4gKyNkZWZpbmUgUE1PVlNDTFIgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhDODANCj4gPiArI2RlZmluZSBQTU9W U1NFVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweENDMA0KPiA+ICsjZGVm aW5lIFBNQ0ZHUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg MHhFMDANCj4gPiArI2RlZmluZSBQTUNSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAweEUwNA0KPiA+ICsjZGVmaW5lIFBNSUlEUiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgMHhFMDgNCj4gPiArDQo+ID4gKy8qIFBNQ0ZHUiByZWdp c3RlciBmaWVsZCAqLw0KPiA+ICsjZGVmaW5lIFBNQ0ZHUl9OQ0dfU0hJRlQgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIDI4DQo+ID4gKyNkZWZpbmUgUE1DRkdSX05DR19NQVNLICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweGYNCj4gDQo+IFBsZWFzZSBjb3VsZCB3ZSBp bnN0ZWFkIGRvIDoNCj4gDQo+ICAgICAgICAgUE1DRkdSX05DRyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgR0VOTUFTSygzMSwgMjgpDQo+IGFuZCBzaW1pbGFybHkgZm9yIGFs bCB0aGUgb3RoZXIgZmllbGRzIGFuZCB1c2UgOg0KPiANCj4gICAgICAgICBGSUVMRF9QUkVQKCks IEZJRUxEX0dFVCgpIGhlbHBlcnMgPw0KPiANCg0KU3VyZSB0aGFua3MgZm9yIHBvaW50aW5nIG1l IHRvIHRoZXNlIGhlbHBlcnMuDQoNCj4gPiArI2RlZmluZSBQTUNGR1JfSERCRyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBCSVQoMjQpDQo+ID4gKyNkZWZpbmUgUE1DRkdSX1RSTyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQklUKDIzKQ0KPiA+ICsjZGVmaW5lIFBN Q0ZHUl9TUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJJVCgyMikNCj4gPiAr I2RlZmluZSBQTUNGR1JfRlpPICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCSVQo MjEpDQo+ID4gKyNkZWZpbmUgUE1DRkdSX01TSSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgQklUKDIwKQ0KPiA+ICsjZGVmaW5lIFBNQ0ZHUl9VRU4gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIEJJVCgxOSkNCj4gPiArI2RlZmluZSBQTUNGR1JfTkEgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBCSVQoMTcpDQo+ID4gKyNkZWZpbmUgUE1DRkdSX0VY ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQklUKDE2KQ0KPiA+ICsjZGVmaW5l IFBNQ0ZHUl9DQ0QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJJVCgxNSkNCj4g PiArI2RlZmluZSBQTUNGR1JfQ0MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBC SVQoMTQpDQo+ID4gKyNkZWZpbmUgUE1DRkdSX1NJWkVfU0hJRlQgICAgICAgICAgICAgICAgICAg ICAgICAgICAgOA0KPiA+ICsjZGVmaW5lIFBNQ0ZHUl9TSVpFX01BU0sgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIDB4M2YNCj4gPiArI2RlZmluZSBQTUNGR1JfTl9TSElGVCAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDANCj4gPiArI2RlZmluZSBQTUNGR1JfTl9NQVNL ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ZmYNCj4gPiArDQo+ID4g Ky8qIFBNQ1IgcmVnaXN0ZXIgZmllbGQgKi8NCj4gPiArI2RlZmluZSBQTUNSX1RSTyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCSVQoMTEpDQo+ID4gKyNkZWZpbmUgUE1DUl9I REJHICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQklUKDEwKQ0KPiA+ICsjZGVm aW5lIFBNQ1JfRlpPICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJJVCg5KQ0K PiA+ICsjZGVmaW5lIFBNQ1JfTkEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgQklUKDgpDQo+ID4gKyNkZWZpbmUgUE1DUl9EUCAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBCSVQoNSkNCj4gPiArI2RlZmluZSBQTUNSX1ggICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJJVCg0KQ0KPiA+ICsj ZGVmaW5lIFBNQ1JfRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgQklUKDMpDQo+ID4gKyNkZWZpbmUgUE1DUl9DICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBCSVQoMikNCj4gPiArI2RlZmluZSBQTUNSX1AgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJJVCgxKQ0KPiA+ICsjZGVmaW5l IFBNQ1JfRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQklU KDApDQo+ID4gKw0KPiA+ICsvKiBQTUlJRFIgcmVnaXN0ZXIgZmllbGQgKi8NCj4gPiArI2RlZmlu ZSBQTUlJRFJfSU1QTEVNRU5URVJfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4 RkZGDQo+ID4gKyNkZWZpbmUgUE1JSURSX1BST0RVQ1RJRF9NQVNLICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAweEZGRg0KPiA+ICsjZGVmaW5lIFBNSUlEUl9QUk9EVUNUSURfU0hJRlQg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjANCj4gPiArDQo+ID4gKy8qIEVhY2ggU0VU L0NMUiByZWdpc3RlciBzdXBwb3J0cyB1cCB0byAzMiBjb3VudGVycy4gKi8NCj4gPiArI2RlZmlu ZSBDT1JFU0lHSFRfU0VUX0NMUl9SRUdfQ09VTlRFUl9OVU0gICAgICAgICAgICAzMg0KPiA+ICsj ZGVmaW5lIENPUkVTSUdIVF9TRVRfQ0xSX1JFR19DT1VOVEVSX1NISUZUICAgICAgICAgIDUNCj4g DQo+IG1pbm9yIG5pdHM6DQo+IA0KPiBDb3VsZCB3ZSByZW5hbWUgc3VjaHQgdGhhdCBzL0NPUkVT SUdIVC9QTVUgPyBXaXRob3V0IHRoZSBQTVUsIGl0IGNvdWxkDQo+IGJlIGNvbmZ1c2VkIGFzIGEg Q09SRVNJR0hUIGFyY2hpdGVjdHVyZSBzcGVjaWZpYyB0aGluZy4NCj4gDQo+IEFsc28NCj4gDQo+ ICAgI2RlZmluZSBDT1JFU0lHSFRfU0VUX0NMUl9SRUdfQ09VTlRFUl9OVU0gICAgICgxIDwNCj4g Q09SRVNJR0hUX1NFVF9DTFJfUkVHX0NPVU5URVJfU0hJRlQpDQo+IA0KPiANCg0KQWNrZWQsIEkg d2lsbCBtYWtlIHRoZSBjaGFuZ2Ugb24gdGhlIG5leHQgdmVyc2lvbi4NCg0KPiA+ICsNCj4gPiAr LyogVGhlIG51bWJlciBvZiAzMi1iaXQgU0VUL0NMUiByZWdpc3RlciB0aGF0IGNhbiBiZSBzdXBw b3J0ZWQuICovDQo+ID4gKyNkZWZpbmUgQ09SRVNJR0hUX1NFVF9DTFJfUkVHX01BWF9OVU0gKChQ TUNOVEVOQ0xSIC0NCj4gUE1DTlRFTlNFVCkgLyBzaXplb2YodTMyKSkNCj4gPiArDQo+ID4gK3N0 YXRpY19hc3NlcnQoKENPUkVTSUdIVF9TRVRfQ0xSX1JFR19NQVhfTlVNICoNCj4gPiArICAgICAg ICAgICAgQ09SRVNJR0hUX1NFVF9DTFJfUkVHX0NPVU5URVJfTlVNKSA+PQ0KPiA+ICsgICAgICAg ICAgIENPUkVTSUdIVF9QTVVfTUFYX0hXX0NOVFJTKTsNCj4gPiArDQo+ID4gKy8qIENvbnZlcnQg Y291bnRlciBpZHggaW50byBTRVQvQ0xSIHJlZ2lzdGVyIG51bWJlci4gKi8NCj4gPiArI2RlZmlu ZSBDT1JFU0lHSFRfSURYX1RPX1NFVF9DTFJfUkVHX0lEKGlkeCkgICAgICAgICAgICAgICAgICAg ICAgICAgXA0KPiA+ICsgICAgIChpZHggPj4gQ09SRVNJR0hUX1NFVF9DTFJfUkVHX0NPVU5URVJf U0hJRlQpDQo+ID4gKw0KPiA+ICsvKiBDb252ZXJ0IGNvdW50ZXIgaWR4IGludG8gU0VUL0NMUiBy ZWdpc3RlciBiaXQuICovDQo+ID4gKyNkZWZpbmUgQ09SRVNJR0hUX0lEWF9UT19TRVRfQ0xSX1JF R19CSVQoaWR4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KPiA+ICsgICAgIChp ZHggJiAoQ09SRVNJR0hUX1NFVF9DTFJfUkVHX0NPVU5URVJfTlVNIC0gMSkpDQo+IA0KPiBzdXBl ciBtaW5vciBuaXQ6DQo+IA0KPiAgICAgICAgIENPVU5URVJfVE9fU0VUX0NMUl9SRUdfSURYDQo+ ICAgICAgICAgQ09VTlRFUl9UT19TRVRfQ0xSX1JFR19CSVQgPw0KPiANCj4gSSBkb24ndCBzZWUg YSBuZWVkIGZvciBwcmVmaXhpbmcgdGhlbSB3aXRoIENPUkVTSUdIVCBhbmQgbWFraW5nIHRoZW0N Cj4gdW5uZWNlc3NhcnkgbG9uZ2VyLg0KPiANCg0KQWNrZWQuDQoNCj4gPiArDQo+ID4gKyNkZWZp bmUgQ09SRVNJR0hUX0FDVElWRV9DUFVfTUFTSyAgICAgICAgICAgICAgICAgICAgMHgwDQo+ID4g KyNkZWZpbmUgQ09SRVNJR0hUX0FTU09DSUFURURfQ1BVX01BU0sgICAgICAgICAgICAgICAgICAg ICAgICAweDENCj4gPiArDQo+ID4gKw0KPiA+ICsvKiBDaGVjayBpZiBmaWVsZCBmIGluIGZsYWdz IGlzIHNldCB3aXRoIHZhbHVlIHYgKi8NCj4gPiArI2RlZmluZSBDSEVDS19BUE1UX0ZMQUcoZmxh Z3MsIGYsIHYpIFwNCj4gPiArICAgICAoKGZsYWdzICYgKEFDUElfQVBNVF9GTEFHU18gIyMgZikp ID09IChBQ1BJX0FQTVRfRkxBR1NfICMjIGYgIyMNCj4gXyAjIyB2KSkNCj4gPiArDQo+ID4gK3N0 YXRpYyB1bnNpZ25lZCBsb25nIGNvcmVzaWdodF9wbXVfY3B1aHBfc3RhdGU7DQo+ID4gKw0KPiA+ ICsvKg0KPiA+ICsgKiBJbiBDb3JlU2lnaHQgUE1VIGFyY2hpdGVjdHVyZSwgYWxsIG9mIHRoZSBN TUlPIHJlZ2lzdGVycyBhcmUgMzItYml0DQo+IGV4Y2VwdA0KPiA+ICsgKiBjb3VudGVyIHJlZ2lz dGVyLiBUaGUgY291bnRlciByZWdpc3RlciBjYW4gYmUgaW1wbGVtZW50ZWQgYXMgMzItYml0IG9y DQo+IDY0LWJpdA0KPiA+ICsgKiByZWdpc3RlciBkZXBlbmRpbmcgb24gdGhlIHZhbHVlIG9mIFBN Q0ZHUi5TSVpFIGZpZWxkLiBGb3IgNjQtYml0DQo+IGFjY2VzcywNCj4gPiArICogc2luZ2xlLWNv cHkgNjQtYml0IGF0b21pYyBzdXBwb3J0IGlzIGltcGxlbWVudGF0aW9uIGRlZmluZWQuIEFQTVQN Cj4gbm9kZSBmbGFnDQo+ID4gKyAqIGlzIHVzZWQgdG8gaWRlbnRpZnkgaWYgdGhlIFBNVSBzdXBw b3J0cyA2NC1iaXQgc2luZ2xlIGNvcHkgYXRvbWljLiBJZiA2NC0NCj4gYml0DQo+ID4gKyAqIHNp bmdsZSBjb3B5IGF0b21pYyBpcyBub3Qgc3VwcG9ydGVkLCB0aGUgZHJpdmVyIHRyZWF0cyB0aGUg cmVnaXN0ZXIgYXMgYQ0KPiBwYWlyDQo+ID4gKyAqIG9mIDMyLWJpdCByZWdpc3Rlci4NCj4gPiAr ICovDQo+ID4gKw0KPiA+ICsvKg0KPiA+ICsgKiBSZWFkIDY0LWJpdCByZWdpc3RlciBhcyBhIHBh aXIgb2YgMzItYml0IHJlZ2lzdGVycyB1c2luZyBoaS1sby1oaSBzZXF1ZW5jZS4NCj4gPiArICov DQo+ID4gK3N0YXRpYyB1NjQgcmVhZF9yZWc2NF9oaWxvaGkoY29uc3Qgdm9pZCBfX2lvbWVtICph ZGRyKQ0KPiA+ICt7DQo+ID4gKyAgICAgdTMyIHZhbF9sbywgdmFsX2hpOw0KPiA+ICsgICAgIHU2 NCB2YWw7DQo+ID4gKw0KPiA+ICsgICAgIC8qIFVzZSBoaWdoLWxvdy1oaWdoIHNlcXVlbmNlIHRv IGF2b2lkIHRlYXJpbmcgKi8NCj4gPiArICAgICBkbyB7DQo+ID4gKyAgICAgICAgICAgICB2YWxf aGkgPSByZWFkbChhZGRyICsgNCk7DQo+ID4gKyAgICAgICAgICAgICB2YWxfbG8gPSByZWFkbChh ZGRyKTsNCj4gPiArICAgICB9IHdoaWxlICh2YWxfaGkgIT0gcmVhZGwoYWRkciArIDQpKTsNCj4g PiArDQo+ID4gKyAgICAgdmFsID0gKCgodTY0KXZhbF9oaSA8PCAzMikgfCB2YWxfbG8pOw0KPiA+ ICsNCj4gPiArICAgICByZXR1cm4gdmFsOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICsvKiBDaGVjayBp ZiBQTVUgc3VwcG9ydHMgNjQtYml0IHNpbmdsZSBjb3B5IGF0b21pYy4gKi8NCj4gPiArc3RhdGlj IGlubGluZSBib29sIHN1cHBvcnRfYXRvbWljKGNvbnN0IHN0cnVjdCBjb3Jlc2lnaHRfcG11DQo+ ICpjb3Jlc2lnaHRfcG11KQ0KPiANCj4gbWlub3Igbml0OiBzdXBwb3J0c182NGJpdF9hdG9taWNz KCkgPw0KPiANCg0KQWNrZWQuDQoNCj4gPiArew0KPiA+ICsgICAgIHJldHVybiBDSEVDS19BUE1U X0ZMQUcoY29yZXNpZ2h0X3BtdS0+YXBtdF9ub2RlLT5mbGFncywNCj4gQVRPTUlDLCBTVVBQKTsN Cj4gPiArfQ0KPiA+ICsNCj4gPiArLyogQ2hlY2sgaWYgY3ljbGUgY291bnRlciBpcyBzdXBwb3J0 ZWQuICovDQo+ID4gK3N0YXRpYyBpbmxpbmUgYm9vbCBzdXBwb3J0X2NjKGNvbnN0IHN0cnVjdCBj b3Jlc2lnaHRfcG11ICpjb3Jlc2lnaHRfcG11KQ0KPiANCj4gbWlub3Igbml0OiBzdXBwb3J0c19j eWNsZV9jb3VudGVyKCkgPw0KPiANCg0KQWNrZWQuDQoNCj4gPiArew0KPiA+ICsgICAgIHJldHVy biAoY29yZXNpZ2h0X3BtdS0+cG1jZmdyICYgUE1DRkdSX0NDKTsNCj4gPiArfQ0KPiA+ICsNCj4g PiArLyogR2V0IGNvdW50ZXIgc2l6ZS4gKi8NCj4gPiArc3RhdGljIGlubGluZSB1MzIgcG1jZmdy X3NpemUoY29uc3Qgc3RydWN0IGNvcmVzaWdodF9wbXUgKmNvcmVzaWdodF9wbXUpDQo+IA0KPiAN Cj4gUGxlYXNlIGNvdWxkIHdlIGNoYW5nZSB0aGlzICB0bw0KPiANCj4gICAgICAgICBjb3VudGVy X3NpemUoY29uc3Qgc3RydWN0IGNvcmVzaWdodF9wbXUgKmNvcmVzaWdodF9wbXUpDQo+IHsNCj4g ICAgICAgICAvKiBDb3VudGVyIHNpemUgaXMgUE1DRkdSX1NJWkUgKyAxICovDQo+ICAgICAgICAg cmV0dXJuIEZJRUxEX0dFVChQTUNGR1JfU0laRSwgcG11LT5wbWNmZ3IpICsgMTsNCj4gfQ0KPiAN Cj4gYW5kIGFsc28gYWRkIDoNCj4gDQo+IHU2NCBjb3VudGVyX21hc2soLi4pDQo+IHsNCj4gICAg ICAgICByZXR1cm4gR0VOTUFTS19VTEwoY291bnRlcl9zaXplKHBtdSkgLSAxLCAwKTsNCj4gfQ0K PiANCj4gU2VlIG1vcmUgb24gdGhpcyBiZWxvdy4NCj4gDQoNCkFja2VkLg0KDQo+ID4gK3sNCj4g PiArICAgICByZXR1cm4gKGNvcmVzaWdodF9wbXUtPnBtY2ZnciA+PiBQTUNGR1JfU0laRV9TSElG VCkgJg0KPiBQTUNGR1JfU0laRV9NQVNLOw0KPiA+ICt9DQo+IA0KPiANCj4gDQo+ID4gKy8qIENo ZWNrIGlmIGNvdW50ZXIgaXMgaW1wbGVtZW50ZWQgYXMgNjQtYml0IHJlZ2lzdGVyLiAqLw0KPiA+ ICtzdGF0aWMgaW5saW5lIGJvb2wNCj4gPiArdXNlXzY0Yl9jb3VudGVyX3JlZyhjb25zdCBzdHJ1 Y3QgY29yZXNpZ2h0X3BtdSAqY29yZXNpZ2h0X3BtdSkNCj4gPiArew0KPiA+ICsgICAgIHJldHVy biAocG1jZmdyX3NpemUoY29yZXNpZ2h0X3BtdSkgPiAzMSk7DQo+ID4gK30NCj4gPiArDQo+ID4g Ky8qIEdldCBudW1iZXIgb2YgY291bnRlcnMsIG1pbnVzIG9uZS4gKi8NCj4gPiArc3RhdGljIGlu bGluZSB1MzIgcG1jZmdyX24oY29uc3Qgc3RydWN0IGNvcmVzaWdodF9wbXUgKmNvcmVzaWdodF9w bXUpDQo+ID4gK3sNCj4gPiArICAgICByZXR1cm4gKGNvcmVzaWdodF9wbXUtPnBtY2ZnciA+PiBQ TUNGR1JfTl9TSElGVCkgJg0KPiBQTUNGR1JfTl9NQVNLOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICtz c2l6ZV90IGNvcmVzaWdodF9wbXVfc3lzZnNfZXZlbnRfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYs DQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBkZXZpY2Vf YXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpDQo+ID4gK3sNCj4gPiArICAgICBzdHJ1Y3QgZGV2 X2V4dF9hdHRyaWJ1dGUgKmVhdHRyID0NCj4gPiArICAgICAgICAgICAgIGNvbnRhaW5lcl9vZihh dHRyLCBzdHJ1Y3QgZGV2X2V4dF9hdHRyaWJ1dGUsIGF0dHIpOw0KPiA+ICsgICAgIHJldHVybiBz eXNmc19lbWl0KGJ1ZiwgImV2ZW50PTB4JWxseFxuIiwNCj4gPiArICAgICAgICAgICAgICAgICAg ICAgICAodW5zaWduZWQgbG9uZyBsb25nKWVhdHRyLT52YXIpOw0KPiA+ICt9DQo+ID4gK0VYUE9S VF9TWU1CT0xfR1BMKGNvcmVzaWdodF9wbXVfc3lzZnNfZXZlbnRfc2hvdyk7DQo+IA0KPiANCj4g PiArDQo+ID4gKy8qIERlZmF1bHQgZXZlbnQgbGlzdC4gKi8NCj4gPiArc3RhdGljIHN0cnVjdCBh dHRyaWJ1dGUgKmNvcmVzaWdodF9wbXVfZXZlbnRfYXR0cnNbXSA9IHsNCj4gPiArICAgICBDT1JF U0lHSFRfRVZFTlRfQVRUUihjeWNsZXMsDQo+IENPUkVTSUdIVF9QTVVfRVZUX0NZQ0xFU19ERUZB VUxUKSwNCj4gPiArICAgICBOVUxMLA0KPiA+ICt9Ow0KPiA+ICsNCj4gPiArc3RydWN0IGF0dHJp YnV0ZSAqKg0KPiA+ICtjb3Jlc2lnaHRfcG11X2dldF9ldmVudF9hdHRycyhjb25zdCBzdHJ1Y3Qg Y29yZXNpZ2h0X3BtdQ0KPiAqY29yZXNpZ2h0X3BtdSkNCj4gPiArew0KPiA+ICsgICAgIHJldHVy biBjb3Jlc2lnaHRfcG11X2V2ZW50X2F0dHJzOw0KPiA+ICt9DQo+ID4gK0VYUE9SVF9TWU1CT0xf R1BMKGNvcmVzaWdodF9wbXVfZ2V0X2V2ZW50X2F0dHJzKTsNCj4gPiArDQo+ID4gK3Vtb2RlX3Qg Y29yZXNpZ2h0X3BtdV9ldmVudF9hdHRyX2lzX3Zpc2libGUoc3RydWN0IGtvYmplY3QgKmtvYmos DQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGF0 dHJpYnV0ZSAqYXR0ciwgaW50IHVudXNlZCkNCj4gPiArew0KPiA+ICsgICAgIHN0cnVjdCBkZXZp Y2UgKmRldiA9IGtvYmpfdG9fZGV2KGtvYmopOw0KPiA+ICsgICAgIHN0cnVjdCBjb3Jlc2lnaHRf cG11ICpjb3Jlc2lnaHRfcG11ID0NCj4gPiArICAgICAgICAgICAgIHRvX2NvcmVzaWdodF9wbXUo ZGV2X2dldF9kcnZkYXRhKGRldikpOw0KPiA+ICsgICAgIHN0cnVjdCBwZXJmX3BtdV9ldmVudHNf YXR0ciAqZWF0dHI7DQo+ID4gKw0KPiA+ICsgICAgIGVhdHRyID0gY29udGFpbmVyX29mKGF0dHIs IHR5cGVvZigqZWF0dHIpLCBhdHRyLmF0dHIpOw0KPiA+ICsNCj4gPiArICAgICAvKiBIaWRlIGN5 Y2xlIGV2ZW50IGlmIG5vdCBzdXBwb3J0ZWQgKi8NCj4gPiArICAgICBpZiAoIXN1cHBvcnRfY2Mo Y29yZXNpZ2h0X3BtdSkgJiYNCj4gPiArICAgICAgICAgZWF0dHItPmlkID09IENPUkVTSUdIVF9Q TVVfRVZUX0NZQ0xFU19ERUZBVUxUKSB7DQo+ID4gKyAgICAgICAgICAgICByZXR1cm4gMDsNCj4g PiArICAgICB9DQo+ID4gKw0KPiA+ICsgICAgIHJldHVybiBhdHRyLT5tb2RlOw0KPiA+ICt9DQo+ ID4gK0VYUE9SVF9TWU1CT0xfR1BMKGNvcmVzaWdodF9wbXVfZXZlbnRfYXR0cl9pc192aXNpYmxl KTsNCj4gPiArDQo+ID4gK3NzaXplX3QgY29yZXNpZ2h0X3BtdV9zeXNmc19mb3JtYXRfc2hvdyhz dHJ1Y3QgZGV2aWNlICpkZXYsDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwNCj4gPiArICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKmJ1ZikNCj4gPiArew0KPiA+ICsgICAgIHN0cnVj dCBkZXZfZXh0X2F0dHJpYnV0ZSAqZWF0dHIgPQ0KPiA+ICsgICAgICAgICAgICAgY29udGFpbmVy X29mKGF0dHIsIHN0cnVjdCBkZXZfZXh0X2F0dHJpYnV0ZSwgYXR0cik7DQo+ID4gKyAgICAgcmV0 dXJuIHN5c2ZzX2VtaXQoYnVmLCAiJXNcbiIsIChjaGFyICopZWF0dHItPnZhcik7DQo+ID4gK30N Cj4gPiArRVhQT1JUX1NZTUJPTF9HUEwoY29yZXNpZ2h0X3BtdV9zeXNmc19mb3JtYXRfc2hvdyk7 DQo+ID4gKw0KPiA+ICtzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqY29yZXNpZ2h0X3BtdV9mb3Jt YXRfYXR0cnNbXSA9IHsNCj4gPiArICAgICBDT1JFU0lHSFRfRk9STUFUX0VWRU5UX0FUVFIsDQo+ ID4gKyAgICAgQ09SRVNJR0hUX0ZPUk1BVF9GSUxURVJfQVRUUiwNCj4gPiArICAgICBOVUxMLA0K PiA+ICt9Ow0KPiA+ICsNCj4gPiArc3RydWN0IGF0dHJpYnV0ZSAqKg0KPiA+ICtjb3Jlc2lnaHRf cG11X2dldF9mb3JtYXRfYXR0cnMoY29uc3Qgc3RydWN0IGNvcmVzaWdodF9wbXUNCj4gKmNvcmVz aWdodF9wbXUpDQo+ID4gK3sNCj4gPiArICAgICByZXR1cm4gY29yZXNpZ2h0X3BtdV9mb3JtYXRf YXR0cnM7DQo+ID4gK30NCj4gPiArRVhQT1JUX1NZTUJPTF9HUEwoY29yZXNpZ2h0X3BtdV9nZXRf Zm9ybWF0X2F0dHJzKTsNCj4gPiArDQo+ID4gK3UzMiBjb3Jlc2lnaHRfcG11X2V2ZW50X3R5cGUo Y29uc3Qgc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50KQ0KPiA+ICt7DQo+ID4gKyAgICAgcmV0dXJu IGV2ZW50LT5hdHRyLmNvbmZpZyAmIENPUkVTSUdIVF9FVkVOVF9NQVNLOw0KPiA+ICt9DQo+ID4g K0VYUE9SVF9TWU1CT0xfR1BMKGNvcmVzaWdodF9wbXVfZXZlbnRfdHlwZSk7DQo+IA0KPiBXaHkg ZG8gd2UgbmVlZCB0byBleHBvcnQgdGhlc2UgPw0KPiANCg0KQXMgeW91IGFza2VkIG9uIHRoZSBv dGhlciBxdWVzdGlvbiwgd2UgZG9uJ3QgbmVlZCB0byBleHBvcnQgaXQgaWYgZHJpdmVyIGNhbg0K aW1wbGljaXRseSBmYWxsIGJhY2sgdG8gZGVmYXVsdCByb3V0aW5lIGlmIHZlbmRvciBkb2VzIG5v dCBwcm92aWRlIGEgY2FsbGJhY2suDQpJIHdpbGwgcHJvdmlkZSBhIGNvbW1lbnQgb24gY29yZXNp Z2h0X3BtdV9pbXBsX29wcyBvbiB0aGlzIGV4cGVjdGF0aW9uLg0KDQo+ID4gKw0KPiA+ICt1MzIg Y29yZXNpZ2h0X3BtdV9ldmVudF9maWx0ZXIoY29uc3Qgc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50 KQ0KPiA+ICt7DQo+ID4gKyAgICAgcmV0dXJuIGV2ZW50LT5hdHRyLmNvbmZpZzEgJiBDT1JFU0lH SFRfRklMVEVSX01BU0s7DQo+ID4gK30NCj4gPiArRVhQT1JUX1NZTUJPTF9HUEwoY29yZXNpZ2h0 X3BtdV9ldmVudF9maWx0ZXIpOw0KPiA+ICsNCj4gPiArc3RhdGljIHNzaXplX3QgY29yZXNpZ2h0 X3BtdV9pZGVudGlmaWVyX3Nob3coc3RydWN0IGRldmljZSAqZGV2LA0KPiA+ICsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAq YXR0ciwNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hh ciAqcGFnZSkNCj4gPiArew0KPiA+ICsgICAgIHN0cnVjdCBjb3Jlc2lnaHRfcG11ICpjb3Jlc2ln aHRfcG11ID0NCj4gPiArICAgICAgICAgICAgIHRvX2NvcmVzaWdodF9wbXUoZGV2X2dldF9kcnZk YXRhKGRldikpOw0KPiA+ICsNCj4gPiArICAgICByZXR1cm4gc3lzZnNfZW1pdChwYWdlLCAiJXNc biIsIGNvcmVzaWdodF9wbXUtPmlkZW50aWZpZXIpOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0 aWMgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgY29yZXNpZ2h0X3BtdV9pZGVudGlmaWVyX2F0dHIg PQ0KPiA+ICsgICAgIF9fQVRUUihpZGVudGlmaWVyLCAwNDQ0LCBjb3Jlc2lnaHRfcG11X2lkZW50 aWZpZXJfc2hvdywgTlVMTCk7DQo+ID4gKw0KPiA+ICtzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAq Y29yZXNpZ2h0X3BtdV9pZGVudGlmaWVyX2F0dHJzW10gPSB7DQo+ID4gKyAgICAgJmNvcmVzaWdo dF9wbXVfaWRlbnRpZmllcl9hdHRyLmF0dHIsDQo+ID4gKyAgICAgTlVMTCwNCj4gPiArfTsNCj4g PiArDQo+ID4gK3N0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwIGNvcmVzaWdodF9wbXVfaWRl bnRpZmllcl9hdHRyX2dyb3VwID0gew0KPiA+ICsgICAgIC5hdHRycyA9IGNvcmVzaWdodF9wbXVf aWRlbnRpZmllcl9hdHRycywNCj4gPiArfTsNCj4gPiArDQo+ID4gK2NvbnN0IGNoYXIgKg0KPiA+ ICtjb3Jlc2lnaHRfcG11X2dldF9pZGVudGlmaWVyKGNvbnN0IHN0cnVjdCBjb3Jlc2lnaHRfcG11 DQo+ICpjb3Jlc2lnaHRfcG11KQ0KPiA+ICt7DQo+ID4gKyAgICAgY29uc3QgY2hhciAqaWRlbnRp ZmllciA9DQo+ID4gKyAgICAgICAgICAgICBkZXZtX2thc3ByaW50Zihjb3Jlc2lnaHRfcG11LT5k ZXYsIEdGUF9LRVJORUwsICIleCIsDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBj b3Jlc2lnaHRfcG11LT5pbXBsLnBtaWlkcik7DQo+ID4gKyAgICAgcmV0dXJuIGlkZW50aWZpZXI7 DQo+ID4gK30NCj4gPiArRVhQT1JUX1NZTUJPTF9HUEwoY29yZXNpZ2h0X3BtdV9nZXRfaWRlbnRp Zmllcik7DQo+ID4gKw0KPiA+ICtzdGF0aWMgY29uc3QgY2hhcg0KPiAqY29yZXNpZ2h0X3BtdV90 eXBlX3N0cltBQ1BJX0FQTVRfTk9ERV9UWVBFX0NPVU5UXSA9IHsNCj4gPiArICAgICJtYyIsDQo+ ID4gKyAgICAic21tdSIsDQo+ID4gKyAgICAicGNpZSIsDQo+ID4gKyAgICAiYWNwaSIsDQo+ID4g KyAgICAiY2FjaGUiLA0KPiA+ICt9Ow0KPiA+ICsNCj4gPiArY29uc3QgY2hhciAqY29yZXNpZ2h0 X3BtdV9nZXRfbmFtZShjb25zdCBzdHJ1Y3QgY29yZXNpZ2h0X3BtdQ0KPiAqY29yZXNpZ2h0X3Bt dSkNCj4gPiArew0KPiA+ICsgICAgIHN0cnVjdCBkZXZpY2UgKmRldjsNCj4gPiArICAgICB1OCBw bXVfdHlwZTsNCj4gPiArICAgICBjaGFyICpuYW1lOw0KPiA+ICsgICAgIGNoYXIgYWNwaV9oaWRf c3RyaW5nW0FDUElfSURfTEVOXSA9IHsgMCB9Ow0KPiA+ICsgICAgIHN0YXRpYyBhdG9taWNfdCBw bXVfaWR4W0FDUElfQVBNVF9OT0RFX1RZUEVfQ09VTlRdID0geyAwIH07DQo+ID4gKw0KPiA+ICsg ICAgIGRldiA9IGNvcmVzaWdodF9wbXUtPmRldjsNCj4gPiArICAgICBwbXVfdHlwZSA9IGNvcmVz aWdodF9wbXUtPmFwbXRfbm9kZS0+dHlwZTsNCj4gDQo+IFBsZWFzZSBjb3VsZCB3ZSB1c2UgYSB2 YXJpYWJsZSB0byByZWZlciB0byB0aGUgImNvcmVzaWdodF9wbXUtPmFwbXRfbm9kZSINCj4gPw0K PiBJdCBoZWxwcyB3aXRoIGNvZGUgcmVhZGluZyBiZWxvdyBhbmQgYWxzbyBnaXZlcyB1cyBhIGhp bnQgdG8gdGhlDQo+IHR5cGUgb2YgdGhhdCBmaWVsZCwgd2UgcmVmZXIgbXVsdGlwbGUgdGltZXMg YmVsb3cuDQo+IA0KDQpBY2tlZC4NCg0KPiA+ICsNCj4gPiArICAgICBpZiAocG11X3R5cGUgPj0g QUNQSV9BUE1UX05PREVfVFlQRV9DT1VOVCkgew0KPiA+ICsgICAgICAgICAgICAgZGV2X2Vycihk ZXYsICJ1bnN1cHBvcnRlZCBQTVUgdHlwZS0ldVxuIiwgcG11X3R5cGUpOw0KPiA+ICsgICAgICAg ICAgICAgcmV0dXJuIE5VTEw7DQo+ID4gKyAgICAgfQ0KPiA+ICsNCj4gPiArICAgICBpZiAocG11 X3R5cGUgPT0gQUNQSV9BUE1UX05PREVfVFlQRV9BQ1BJKSB7DQo+ID4gKyAgICAgICAgICAgICBt ZW1jcHkoYWNwaV9oaWRfc3RyaW5nLA0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAmY29yZXNp Z2h0X3BtdS0+YXBtdF9ub2RlLT5pbnN0X3ByaW1hcnksDQo+ID4gKyAgICAgICAgICAgICAgICAg ICAgIHNpemVvZihjb3Jlc2lnaHRfcG11LT5hcG10X25vZGUtPmluc3RfcHJpbWFyeSkpOw0KPiA+ ICsgICAgICAgICAgICAgbmFtZSA9IGRldm1fa2FzcHJpbnRmKGRldiwgR0ZQX0tFUk5FTCwNCj4g ImFybV8lc19wbXVfJXNfJXUiLA0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGNvcmVzaWdodF9wbXVfdHlwZV9zdHJbcG11X3R5cGVdLA0KPiA+ICsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGFjcGlfaGlkX3N0cmluZywNCj4gPiArICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBjb3Jlc2lnaHRfcG11LT5hcG10X25vZGUtPmluc3Rfc2Vj b25kYXJ5KTsNCj4gPiArICAgICB9IGVsc2Ugew0KPiA+ICsgICAgICAgICAgICAgbmFtZSA9IGRl dm1fa2FzcHJpbnRmKGRldiwgR0ZQX0tFUk5FTCwgImFybV8lc19wbXVfJWQiLA0KPiA+ICsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvcmVzaWdodF9wbXVfdHlwZV9zdHJbcG11 X3R5cGVdLA0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF0b21pY19m ZXRjaF9pbmMoJnBtdV9pZHhbcG11X3R5cGVdKSk7DQo+ID4gKyAgICAgfQ0KPiA+ICsNCj4gPiAr ICAgICByZXR1cm4gbmFtZTsNCj4gPiArfQ0KPiA+ICtFWFBPUlRfU1lNQk9MX0dQTChjb3Jlc2ln aHRfcG11X2dldF9uYW1lKTsNCj4gPiArDQo+ID4gK3N0YXRpYyBzc2l6ZV90IGNvcmVzaWdodF9w bXVfY3B1bWFza19zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwNCj4gPiArICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsDQo+ ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKmJ1ZikNCj4g PiArew0KPiA+ICsgICAgIHN0cnVjdCBwbXUgKnBtdSA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOw0K PiA+ICsgICAgIHN0cnVjdCBjb3Jlc2lnaHRfcG11ICpjb3Jlc2lnaHRfcG11ID0gdG9fY29yZXNp Z2h0X3BtdShwbXUpOw0KPiA+ICsgICAgIHN0cnVjdCBkZXZfZXh0X2F0dHJpYnV0ZSAqZWF0dHIg PQ0KPiA+ICsgICAgICAgICAgICAgY29udGFpbmVyX29mKGF0dHIsIHN0cnVjdCBkZXZfZXh0X2F0 dHJpYnV0ZSwgYXR0cik7DQo+ID4gKyAgICAgdW5zaWduZWQgbG9uZyBtYXNrX2lkID0gKHVuc2ln bmVkIGxvbmcpZWF0dHItPnZhcjsNCj4gPiArICAgICBjb25zdCBjcHVtYXNrX3QgKmNwdW1hc2s7 DQo+ID4gKw0KPiA+ICsgICAgIHN3aXRjaCAobWFza19pZCkgew0KPiA+ICsgICAgIGNhc2UgQ09S RVNJR0hUX0FDVElWRV9DUFVfTUFTSzoNCj4gPiArICAgICAgICAgICAgIGNwdW1hc2sgPSAmY29y ZXNpZ2h0X3BtdS0+YWN0aXZlX2NwdTsNCj4gPiArICAgICAgICAgICAgIGJyZWFrOw0KPiA+ICsg ICAgIGNhc2UgQ09SRVNJR0hUX0FTU09DSUFURURfQ1BVX01BU0s6DQo+ID4gKyAgICAgICAgICAg ICBjcHVtYXNrID0gJmNvcmVzaWdodF9wbXUtPmFzc29jaWF0ZWRfY3B1czsNCj4gPiArICAgICAg ICAgICAgIGJyZWFrOw0KPiA+ICsgICAgIGRlZmF1bHQ6DQo+ID4gKyAgICAgICAgICAgICByZXR1 cm4gMDsNCj4gPiArICAgICB9DQo+ID4gKyAgICAgcmV0dXJuIGNwdW1hcF9wcmludF90b19wYWdl YnVmKHRydWUsIGJ1ZiwgY3B1bWFzayk7DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyBzdHJ1 Y3QgYXR0cmlidXRlICpjb3Jlc2lnaHRfcG11X2NwdW1hc2tfYXR0cnNbXSA9IHsNCj4gPiArICAg ICBDT1JFU0lHSFRfQ1BVTUFTS19BVFRSKGNwdW1hc2ssDQo+IENPUkVTSUdIVF9BQ1RJVkVfQ1BV X01BU0spLA0KPiA+ICsgICAgIENPUkVTSUdIVF9DUFVNQVNLX0FUVFIoYXNzb2NpYXRlZF9jcHVz LA0KPiBDT1JFU0lHSFRfQVNTT0NJQVRFRF9DUFVfTUFTSyksDQo+ID4gKyAgICAgTlVMTCwNCj4g PiArfTsNCj4gPiArDQo+ID4gK3N0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwIGNvcmVzaWdo dF9wbXVfY3B1bWFza19hdHRyX2dyb3VwID0gew0KPiA+ICsgICAgIC5hdHRycyA9IGNvcmVzaWdo dF9wbXVfY3B1bWFza19hdHRycywNCj4gPiArfTsNCj4gPiArDQo+ID4gK3N0YXRpYyBjb25zdCBz dHJ1Y3QgY29yZXNpZ2h0X3BtdV9pbXBsX29wcyBkZWZhdWx0X2ltcGxfb3BzID0gew0KPiA+ICsg ICAgIC5nZXRfZXZlbnRfYXR0cnMgICAgICAgID0gY29yZXNpZ2h0X3BtdV9nZXRfZXZlbnRfYXR0 cnMsDQo+ID4gKyAgICAgLmdldF9mb3JtYXRfYXR0cnMgICAgICAgPSBjb3Jlc2lnaHRfcG11X2dl dF9mb3JtYXRfYXR0cnMsDQo+ID4gKyAgICAgLmdldF9pZGVudGlmaWVyICAgICAgICAgPSBjb3Jl c2lnaHRfcG11X2dldF9pZGVudGlmaWVyLA0KPiA+ICsgICAgIC5nZXRfbmFtZSAgICAgICAgICAg ICAgID0gY29yZXNpZ2h0X3BtdV9nZXRfbmFtZSwNCj4gPiArICAgICAuaXNfY2NfZXZlbnQgICAg ICAgICAgICA9IGNvcmVzaWdodF9wbXVfaXNfY2NfZXZlbnQsDQo+ID4gKyAgICAgLmV2ZW50X3R5 cGUgICAgICAgICAgICAgPSBjb3Jlc2lnaHRfcG11X2V2ZW50X3R5cGUsDQo+ID4gKyAgICAgLmV2 ZW50X2ZpbHRlciAgICAgICAgICAgPSBjb3Jlc2lnaHRfcG11X2V2ZW50X2ZpbHRlciwNCj4gPiAr ICAgICAuZXZlbnRfYXR0cl9pc192aXNpYmxlICA9IGNvcmVzaWdodF9wbXVfZXZlbnRfYXR0cl9p c192aXNpYmxlDQo+ID4gK307DQo+ID4gKw0KPiA+ICtzdHJ1Y3QgaW1wbF9tYXRjaCB7DQo+ID4g KyAgICAgdTMyIHBtaWlkcjsNCj4gPiArICAgICB1MzIgbWFzazsNCj4gPiArICAgICBpbnQgKCpp bXBsX2luaXRfb3BzKShzdHJ1Y3QgY29yZXNpZ2h0X3BtdSAqY29yZXNpZ2h0X3BtdSk7ID4gK307 DQo+ID4gKw0KPiA+ICtzdGF0aWMgY29uc3Qgc3RydWN0IGltcGxfbWF0Y2ggaW1wbF9tYXRjaFtd ID0gew0KPiA+ICsgICAgIHt9DQo+ID4gK307DQo+ID4gKw0KPiA+ICtzdGF0aWMgaW50IGNvcmVz aWdodF9wbXVfaW5pdF9pbXBsX29wcyhzdHJ1Y3QgY29yZXNpZ2h0X3BtdQ0KPiAqY29yZXNpZ2h0 X3BtdSkNCj4gPiArew0KPiA+ICsgICAgIGludCBpZHgsIHJldDsNCj4gPiArICAgICBzdHJ1Y3Qg YWNwaV9hcG10X25vZGUgKmFwbXRfbm9kZSA9IGNvcmVzaWdodF9wbXUtPmFwbXRfbm9kZTsNCj4g PiArICAgICBjb25zdCBzdHJ1Y3QgaW1wbF9tYXRjaCAqbWF0Y2ggPSBpbXBsX21hdGNoOw0KPiA+ ICsNCj4gPiArICAgICAvKg0KPiA+ICsgICAgICAqIEdldCBQTVUgaW1wbGVtZW50ZXIgYW5kIHBy b2R1Y3QgaWQgZnJvbSBBUE1UIG5vZGUuDQo+ID4gKyAgICAgICogSWYgQVBNVCBub2RlIGRvZXNu J3QgaGF2ZSBpbXBsZW1lbnRlci9wcm9kdWN0IGlkLCB0cnkgZ2V0IGl0DQo+ID4gKyAgICAgICog ZnJvbSBQTUlJRFIuDQo+ID4gKyAgICAgICovDQo+ID4gKyAgICAgY29yZXNpZ2h0X3BtdS0+aW1w bC5wbWlpZHIgPQ0KPiA+ICsgICAgICAgICAgICAgKGFwbXRfbm9kZS0+aW1wbF9pZCkgPyBhcG10 X25vZGUtPmltcGxfaWQgOg0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICByZWFkbChjb3Jlc2lnaHRfcG11LT5iYXNlMCArIFBNSUlEUik7DQo+ID4gKw0KPiA+ICsgICAg IC8qIEZpbmQgaW1wbGVtZW50ZXIgc3BlY2lmaWMgYXR0cmlidXRlIG9wcy4gKi8NCj4gPiArICAg ICBmb3IgKGlkeCA9IDA7IG1hdGNoLT5wbWlpZHI7IG1hdGNoKyssIGlkeCsrKSB7DQo+IA0KPiBp ZHggaXMgdW51c2VkLCBwbGVhc2UgcmVtb3ZlIGl0Lg0KPiANCg0KQWNrZWQsIHRoYW5rcyBmb3Ig Y2F0Y2hpbmcgdGhpcy4NCg0KPiA+ICsgICAgICAgICAgICAgaWYgKChtYXRjaC0+cG1paWRyICYg bWF0Y2gtPm1hc2spID09DQo+ID4gKyAgICAgICAgICAgICAgICAgKGNvcmVzaWdodF9wbXUtPmlt cGwucG1paWRyICYgbWF0Y2gtPm1hc2spKSB7DQo+ID4gKyAgICAgICAgICAgICAgICAgICAgIHJl dCA9IG1hdGNoLT5pbXBsX2luaXRfb3BzKGNvcmVzaWdodF9wbXUpOw0KPiA+ICsgICAgICAgICAg ICAgICAgICAgICBpZiAocmV0KQ0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJl dHVybiByZXQ7DQo+ID4gKw0KPiA+ICsgICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsNCj4g PiArICAgICAgICAgICAgIH0NCj4gPiArICAgICB9DQo+ID4gKw0KPiA+ICsgICAgIC8qIFdlIGRv bid0IGZpbmQgaW1wbGVtZW50ZXIgc3BlY2lmaWMgYXR0cmlidXRlIG9wcywgdXNlIGRlZmF1bHQu ICovDQo+ID4gKyAgICAgY29yZXNpZ2h0X3BtdS0+aW1wbC5vcHMgPSAmZGVmYXVsdF9pbXBsX29w czsNCj4gPiArICAgICByZXR1cm4gMDsNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIHN0cnVj dCBhdHRyaWJ1dGVfZ3JvdXAgKg0KPiA+ICtjb3Jlc2lnaHRfcG11X2FsbG9jX2V2ZW50X2F0dHJf Z3JvdXAoc3RydWN0IGNvcmVzaWdodF9wbXUNCj4gKmNvcmVzaWdodF9wbXUpDQo+ID4gK3sNCj4g PiArICAgICBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwICpldmVudF9ncm91cDsNCj4gPiArICAgICBz dHJ1Y3QgZGV2aWNlICpkZXYgPSBjb3Jlc2lnaHRfcG11LT5kZXY7DQo+ID4gKw0KPiA+ICsgICAg IGV2ZW50X2dyb3VwID0NCj4gPiArICAgICAgICAgICAgIGRldm1fa3phbGxvYyhkZXYsIHNpemVv ZihzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwKSwgR0ZQX0tFUk5FTCk7DQo+ID4gKyAgICAgaWYgKCFl dmVudF9ncm91cCkNCj4gPiArICAgICAgICAgICAgIHJldHVybiBOVUxMOw0KPiA+ICsNCj4gPiAr ICAgICBldmVudF9ncm91cC0+bmFtZSA9ICJldmVudHMiOw0KPiA+ICsgICAgIGV2ZW50X2dyb3Vw LT5hdHRycyA9DQo+ID4gKyAgICAgICAgICAgICBjb3Jlc2lnaHRfcG11LT5pbXBsLm9wcy0+Z2V0 X2V2ZW50X2F0dHJzKGNvcmVzaWdodF9wbXUpOw0KPiANCj4gDQo+IElzIGl0IG1hbmRhdG9yeSBm b3IgdGhlIFBNVXMgdG8gaW1wbGVtZW50IGdldF9ldmVudF9hdHRycygpIGFuZCBhbGwgdGhlDQo+ IGNhbGwgYmFja3MgPyBEb2VzIGl0IG1ha2VzIHNlbnNlIHRvIGNoZWNrIGFuZCBvcHRpb25hbGx5 IGNhbGwgaXQsIGlmIHRoZQ0KPiBiYWNrZW5kIGRyaXZlciBpbXBsZW1lbnRzIGl0ID8gT3IgYXQg bGVhc3Qgd2Ugc2hvdWxkIG1ha2Ugc3VyZSB0aGUNCj4gcmVxdWlyZWQgb3BlcmF0aW9ucyBhcmUg ZmlsbGVkIGluIGJ5IGJhY2tlbmQuDQo+IA0KPiANCj4gPiArICAgICBldmVudF9ncm91cC0+aXNf dmlzaWJsZSA9DQo+ID4gKyAgICAgICAgICAgICBjb3Jlc2lnaHRfcG11LT5pbXBsLm9wcy0+ZXZl bnRfYXR0cl9pc192aXNpYmxlOw0KPiA+ICsNCj4gPiArICAgICByZXR1cm4gZXZlbnRfZ3JvdXA7 DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwICoNCj4g PiArY29yZXNpZ2h0X3BtdV9hbGxvY19mb3JtYXRfYXR0cl9ncm91cChzdHJ1Y3QgY29yZXNpZ2h0 X3BtdQ0KPiAqY29yZXNpZ2h0X3BtdSkNCj4gPiArew0KPiA+ICsgICAgIHN0cnVjdCBhdHRyaWJ1 dGVfZ3JvdXAgKmZvcm1hdF9ncm91cDsNCj4gPiArICAgICBzdHJ1Y3QgZGV2aWNlICpkZXYgPSBj b3Jlc2lnaHRfcG11LT5kZXY7DQo+ID4gKw0KPiA+ICsgICAgIGZvcm1hdF9ncm91cCA9DQo+ID4g KyAgICAgICAgICAgICBkZXZtX2t6YWxsb2MoZGV2LCBzaXplb2Yoc3RydWN0IGF0dHJpYnV0ZV9n cm91cCksIEdGUF9LRVJORUwpOw0KPiA+ICsgICAgIGlmICghZm9ybWF0X2dyb3VwKQ0KPiA+ICsg ICAgICAgICAgICAgcmV0dXJuIE5VTEw7DQo+ID4gKw0KPiA+ICsgICAgIGZvcm1hdF9ncm91cC0+ bmFtZSA9ICJmb3JtYXQiOw0KPiA+ICsgICAgIGZvcm1hdF9ncm91cC0+YXR0cnMgPQ0KPiA+ICsg ICAgICAgICAgICAgY29yZXNpZ2h0X3BtdS0+aW1wbC5vcHMtPmdldF9mb3JtYXRfYXR0cnMoY29y ZXNpZ2h0X3BtdSk7DQo+IA0KPiBTYW1lIGFzIGFib3ZlLg0KPiANCj4gPiArDQo+ID4gKyAgICAg cmV0dXJuIGZvcm1hdF9ncm91cDsNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIHN0cnVjdCBh dHRyaWJ1dGVfZ3JvdXAgKioNCj4gPiArY29yZXNpZ2h0X3BtdV9hbGxvY19hdHRyX2dyb3VwKHN0 cnVjdCBjb3Jlc2lnaHRfcG11ICpjb3Jlc2lnaHRfcG11KQ0KPiA+ICt7DQo+ID4gKyAgICAgY29u c3Qgc3RydWN0IGNvcmVzaWdodF9wbXVfaW1wbF9vcHMgKmltcGxfb3BzOw0KPiA+ICsgICAgIHN0 cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgKiphdHRyX2dyb3VwcyA9IE5VTEw7DQo+ID4gKyAgICAgc3Ry dWN0IGRldmljZSAqZGV2ID0gY29yZXNpZ2h0X3BtdS0+ZGV2Ow0KPiA+ICsgICAgIGludCByZXQ7 DQo+ID4gKw0KPiA+ICsgICAgIHJldCA9IGNvcmVzaWdodF9wbXVfaW5pdF9pbXBsX29wcyhjb3Jl c2lnaHRfcG11KTsNCj4gPiArICAgICBpZiAocmV0KQ0KPiA+ICsgICAgICAgICAgICAgcmV0dXJu IE5VTEw7DQo+ID4gKw0KPiA+ICsgICAgIGltcGxfb3BzID0gY29yZXNpZ2h0X3BtdS0+aW1wbC5v cHM7DQo+ID4gKw0KPiA+ICsgICAgIGNvcmVzaWdodF9wbXUtPmlkZW50aWZpZXIgPSBpbXBsX29w cy0+Z2V0X2lkZW50aWZpZXIoY29yZXNpZ2h0X3BtdSk7DQo+ID4gKyAgICAgY29yZXNpZ2h0X3Bt dS0+bmFtZSA9IGltcGxfb3BzLT5nZXRfbmFtZShjb3Jlc2lnaHRfcG11KTsNCj4gDQo+IElmIHRo ZSBpbXBsZW1lbnRvciBkb2Vzbid0IGhhdmUgYSBuYW1pbmcgc2NoZW1lLCBjb3VsZCB3ZSBkZWZh dWx0IHRvIHRoZQ0KPiBnZW5lcmljIHNjaGVtZSA/ICBJbiBnZXJuZWFsLCB3ZSBjb3VsZCBmYWxs IGJhY2sgdG8gdGhlICJnZW5lcmljIg0KPiBjYWxsYmFja3MgaGVyZSBpZiB0aGUgaW1wbGVtZW50 b3IgZG9lc24ndCBwcm92aWRlIGEgc3BlY2lmaWMgY2FsbCBiYWNrLg0KPiBUaGF0IHdheSwgd2Ug Y291bGQgc2tpcCB0aGUgZXhwb3J0aW5nIGEgbG90IG9mIHRoZSBjYWxsYmFja3MuDQo+IA0KDQpZ ZWFoLCB3ZSBjb3VsZCBpbXBsaWNpdGx5IGNhbGwgZGVmYXVsdCBjYWxsYmFjayBpZiB2ZW5kb3Ig ZG9lcyBub3QgcHJvdmlkZSBpdC4NClRoaXMgYWxzbyBhcHBsaWVzIHRvIG90aGVyIHZlbmRvciBj YWxsYmFja3MuIEkgd2lsbCBhZGQgbm90ZXMgb24gY29yZXNpZ2h0X3BtdV9pbXBsX29wcy4NCg0K PiA+ICsNCj4gPiArICAgICBpZiAoIWNvcmVzaWdodF9wbXUtPm5hbWUpDQo+ID4gKyAgICAgICAg ICAgICByZXR1cm4gTlVMTDsNCj4gPiArDQo+ID4gKyAgICAgYXR0cl9ncm91cHMgPSBkZXZtX2t6 YWxsb2MoZGV2LCA1ICogc2l6ZW9mKHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgKiksDQo+ID4gKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0ZQX0tFUk5FTCk7DQo+IA0KPiBuaXQ6IGRl dm1fa2NhbGxvYygpID8NCj4gDQoNClN1cmUuDQoNCj4gPiArICAgICBpZiAoIWF0dHJfZ3JvdXBz KQ0KPiA+ICsgICAgICAgICAgICAgcmV0dXJuIE5VTEw7DQo+ID4gKw0KPiA+ICsgICAgIGF0dHJf Z3JvdXBzWzBdID0NCj4gY29yZXNpZ2h0X3BtdV9hbGxvY19ldmVudF9hdHRyX2dyb3VwKGNvcmVz aWdodF9wbXUpOw0KPiA+ICsgICAgIGF0dHJfZ3JvdXBzWzFdID0NCj4gY29yZXNpZ2h0X3BtdV9h bGxvY19mb3JtYXRfYXR0cl9ncm91cChjb3Jlc2lnaHRfcG11KTsNCj4gDQo+IFdoYXQgaWYgb25l IG9mIHRoZSBhYm92ZSByZXR1cm5lZCBOVUxMIGFuZCB5b3Ugd291bGRuJ3QgZ2V0IHRoZQ0KPiBm b2xsb3dpbmcgbGlzdGVkID8NCj4gDQoNClllcywgSSBtaXNzZWQgdGhlIGNoZWNrLiBUaGFua3Mg Zm9yIGNhdGNoaW5nIHRoaXMuDQoNCj4gPiArICAgICBhdHRyX2dyb3Vwc1syXSA9ICZjb3Jlc2ln aHRfcG11X2lkZW50aWZpZXJfYXR0cl9ncm91cDsNCj4gPiArICAgICBhdHRyX2dyb3Vwc1szXSA9 ICZjb3Jlc2lnaHRfcG11X2NwdW1hc2tfYXR0cl9ncm91cDsNCj4gPiArDQo+ID4gKyAgICAgcmV0 dXJuIGF0dHJfZ3JvdXBzOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgaW5saW5lIHZvaWQN Cj4gPiArY29yZXNpZ2h0X3BtdV9yZXNldF9jb3VudGVycyhzdHJ1Y3QgY29yZXNpZ2h0X3BtdSAq Y29yZXNpZ2h0X3BtdSkNCj4gPiArew0KPiA+ICsgICAgIHUzMiBwbWNyID0gMDsNCj4gPiArDQo+ ID4gKyAgICAgcG1jciB8PSBQTUNSX1A7DQo+ID4gKyAgICAgcG1jciB8PSBQTUNSX0M7DQo+ID4g KyAgICAgd3JpdGVsKHBtY3IsIGNvcmVzaWdodF9wbXUtPmJhc2UwICsgUE1DUik7DQo+ID4gK30N Cj4gPiArDQo+ID4gK3N0YXRpYyBpbmxpbmUgdm9pZA0KPiA+ICtjb3Jlc2lnaHRfcG11X3N0YXJ0 X2NvdW50ZXJzKHN0cnVjdCBjb3Jlc2lnaHRfcG11ICpjb3Jlc2lnaHRfcG11KQ0KPiA+ICt7DQo+ ID4gKyAgICAgdTMyIHBtY3I7DQo+ID4gKw0KPiA+ICsgICAgIHBtY3IgPSBQTUNSX0U7DQo+ID4g KyAgICAgd3JpdGVsKHBtY3IsIGNvcmVzaWdodF9wbXUtPmJhc2UwICsgUE1DUik7DQo+IA0KPiBu aXQ6IElzbid0IGl0IGVhc2llciB0byByZWFkIGFzIHA7Og0KPiANCj4gICAgICAgICB3cml0ZWwo UE1DUl9FLCAuLi4pOw0KDQpBY2tlZC4NCg0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgaW5s aW5lIHZvaWQNCj4gPiArY29yZXNpZ2h0X3BtdV9zdG9wX2NvdW50ZXJzKHN0cnVjdCBjb3Jlc2ln aHRfcG11ICpjb3Jlc2lnaHRfcG11KQ0KPiA+ICt7DQo+ID4gKyAgICAgdTMyIHBtY3I7DQo+ID4g Kw0KPiA+ICsgICAgIHBtY3IgPSAwOw0KPiA+ICsgICAgIHdyaXRlbChwbWNyLCBjb3Jlc2lnaHRf cG11LT5iYXNlMCArIFBNQ1IpOw0KPiANCj4gU2ltaWxhciB0byBhYm92ZSwNCj4gICAgICAgICB3 cml0ZWwoMCwgLi4uKTsNCj4gPw0KPiANCg0KQWNrZWQuDQoNCj4gPiArfQ0KPiA+ICsNCj4gPiAr c3RhdGljIHZvaWQgY29yZXNpZ2h0X3BtdV9lbmFibGUoc3RydWN0IHBtdSAqcG11KQ0KPiA+ICt7 DQo+ID4gKyAgICAgYm9vbCBkaXNhYmxlZDsNCj4gPiArICAgICBzdHJ1Y3QgY29yZXNpZ2h0X3Bt dSAqY29yZXNpZ2h0X3BtdSA9IHRvX2NvcmVzaWdodF9wbXUocG11KTsNCj4gPiArDQo+ID4gKyAg ICAgZGlzYWJsZWQgPSBiaXRtYXBfZW1wdHkoY29yZXNpZ2h0X3BtdS0+aHdfZXZlbnRzLnVzZWRf Y3RycywNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3Jlc2lnaHRfcG11LT5u dW1fbG9naWNhbF9jb3VudGVycyk7DQo+ID4gKw0KPiA+ICsgICAgIGlmIChkaXNhYmxlZCkNCj4g PiArICAgICAgICAgICAgIHJldHVybjsNCj4gPiArDQo+ID4gKyAgICAgY29yZXNpZ2h0X3BtdV9z dGFydF9jb3VudGVycyhjb3Jlc2lnaHRfcG11KTsNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGlj IHZvaWQgY29yZXNpZ2h0X3BtdV9kaXNhYmxlKHN0cnVjdCBwbXUgKnBtdSkNCj4gPiArew0KPiA+ ICsgICAgIHN0cnVjdCBjb3Jlc2lnaHRfcG11ICpjb3Jlc2lnaHRfcG11ID0gdG9fY29yZXNpZ2h0 X3BtdShwbXUpOw0KPiA+ICsNCj4gPiArICAgICBjb3Jlc2lnaHRfcG11X3N0b3BfY291bnRlcnMo Y29yZXNpZ2h0X3BtdSk7DQo+ID4gK30NCj4gPiArDQo+ID4gK2Jvb2wgY29yZXNpZ2h0X3BtdV9p c19jY19ldmVudChjb25zdCBzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQpDQo+ID4gK3sNCj4gPiAr ICAgICByZXR1cm4gKGV2ZW50LT5hdHRyLmNvbmZpZyA9PQ0KPiBDT1JFU0lHSFRfUE1VX0VWVF9D WUNMRVNfREVGQVVMVCk7DQo+ID4gK30NCj4gPiArRVhQT1JUX1NZTUJPTF9HUEwoY29yZXNpZ2h0 X3BtdV9pc19jY19ldmVudCk7DQo+ID4gKw0KPiA+ICtzdGF0aWMgaW50DQo+ID4gK2NvcmVzaWdo dF9wbXVfZ2V0X2V2ZW50X2lkeChzdHJ1Y3QgY29yZXNpZ2h0X3BtdV9od19ldmVudHMNCj4gKmh3 X2V2ZW50cywNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBwZXJmX2V2ZW50 ICpldmVudCkNCj4gPiArew0KPiA+ICsgICAgIGludCBpZHg7DQo+ID4gKyAgICAgc3RydWN0IGNv cmVzaWdodF9wbXUgKmNvcmVzaWdodF9wbXUgPSB0b19jb3Jlc2lnaHRfcG11KGV2ZW50LQ0KPiA+ cG11KTsNCj4gPiArDQo+ID4gKyAgICAgaWYgKHN1cHBvcnRfY2MoY29yZXNpZ2h0X3BtdSkpIHsN Cj4gPiArICAgICAgICAgICAgIGlmIChjb3Jlc2lnaHRfcG11LT5pbXBsLm9wcy0+aXNfY2NfZXZl bnQoZXZlbnQpKSB7DQo+ID4gKyAgICAgICAgICAgICAgICAgICAgIC8qIFNlYXJjaCBmb3IgYXZh aWxhYmxlIGN5Y2xlIGNvdW50ZXIuICovDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgIGlmICh0 ZXN0X2FuZF9zZXRfYml0KGNvcmVzaWdodF9wbXUtPmNjX2xvZ2ljYWxfaWR4LA0KPiA+ICsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBod19ldmVudHMtPnVzZWRfY3Ry cykpDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC1FQUdBSU47DQo+ ID4gKw0KPiA+ICsgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY29yZXNpZ2h0X3BtdS0+Y2Nf bG9naWNhbF9pZHg7DQo+ID4gKyAgICAgICAgICAgICB9DQo+ID4gKw0KPiA+ICsgICAgICAgICAg ICAgLyoNCj4gPiArICAgICAgICAgICAgICAqIFNlYXJjaCBhIHJlZ3VsYXIgY291bnRlciBmcm9t IHRoZSB1c2VkIGNvdW50ZXIgYml0bWFwLg0KPiA+ICsgICAgICAgICAgICAgICogVGhlIGN5Y2xl IGNvdW50ZXIgZGl2aWRlcyB0aGUgYml0bWFwIGludG8gdHdvIHBhcnRzLiBTZWFyY2gNCj4gPiAr ICAgICAgICAgICAgICAqIHRoZSBmaXJzdCB0aGVuIHNlY29uZCBoYWxmIHRvIGV4Y2x1ZGUgdGhl IGN5Y2xlIGNvdW50ZXIgYml0Lg0KPiA+ICsgICAgICAgICAgICAgICovDQo+ID4gKyAgICAgICAg ICAgICBpZHggPSBmaW5kX2ZpcnN0X3plcm9fYml0KGh3X2V2ZW50cy0+dXNlZF9jdHJzLA0KPiA+ ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3Jlc2lnaHRfcG11LT5j Y19sb2dpY2FsX2lkeCk7DQo+ID4gKyAgICAgICAgICAgICBpZiAoaWR4ID49IGNvcmVzaWdodF9w bXUtPmNjX2xvZ2ljYWxfaWR4KSB7DQo+ID4gKyAgICAgICAgICAgICAgICAgICAgIGlkeCA9IGZp bmRfbmV4dF96ZXJvX2JpdCgNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICBod19l dmVudHMtPnVzZWRfY3RycywNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3Jl c2lnaHRfcG11LT5udW1fbG9naWNhbF9jb3VudGVycywNCj4gPiArICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBjb3Jlc2lnaHRfcG11LT5jY19sb2dpY2FsX2lkeCArIDEpOw0KPiA+ICsgICAg ICAgICAgICAgfQ0KPiA+ICsgICAgIH0gZWxzZSB7DQo+ID4gKyAgICAgICAgICAgICBpZHggPSBm aW5kX2ZpcnN0X3plcm9fYml0KGh3X2V2ZW50cy0+dXNlZF9jdHJzLA0KPiA+ICsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3Jlc2lnaHRfcG11LT5udW1fbG9naWNhbF9j b3VudGVycyk7DQo+ID4gKyAgICAgfQ0KPiA+ICsNCj4gPiArICAgICBpZiAoaWR4ID49IGNvcmVz aWdodF9wbXUtPm51bV9sb2dpY2FsX2NvdW50ZXJzKQ0KPiA+ICsgICAgICAgICAgICAgcmV0dXJu IC1FQUdBSU47DQo+ID4gKw0KPiA+ICsgICAgIHNldF9iaXQoaWR4LCBod19ldmVudHMtPnVzZWRf Y3Rycyk7DQo+ID4gKw0KPiA+ICsgICAgIHJldHVybiBpZHg7DQo+ID4gK30NCj4gPiArDQo+ID4g K3N0YXRpYyBib29sDQo+ID4gK2NvcmVzaWdodF9wbXVfdmFsaWRhdGVfZXZlbnQoc3RydWN0IHBt dSAqcG11LA0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBjb3Jlc2lnaHRf cG11X2h3X2V2ZW50cyAqaHdfZXZlbnRzLA0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAg IHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCkNCj4gPiArew0KPiA+ICsgICAgIGlmIChpc19zb2Z0 d2FyZV9ldmVudChldmVudCkpDQo+ID4gKyAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsNCj4gPiAr DQo+ID4gKyAgICAgLyogUmVqZWN0IGdyb3VwcyBzcGFubmluZyBtdWx0aXBsZSBIVyBQTVVzLiAq Lw0KPiA+ICsgICAgIGlmIChldmVudC0+cG11ICE9IHBtdSkNCj4gPiArICAgICAgICAgICAgIHJl dHVybiBmYWxzZTsNCj4gPiArDQo+ID4gKyAgICAgcmV0dXJuIChjb3Jlc2lnaHRfcG11X2dldF9l dmVudF9pZHgoaHdfZXZlbnRzLCBldmVudCkgPj0gMCk7DQo+ID4gK30NCj4gPiArDQo+ID4gKy8q DQo+ID4gKyAqIE1ha2Ugc3VyZSB0aGUgZ3JvdXAgb2YgZXZlbnRzIGNhbiBiZSBzY2hlZHVsZWQg YXQgb25jZQ0KPiA+ICsgKiBvbiB0aGUgUE1VLg0KPiA+ICsgKi8NCj4gPiArc3RhdGljIGJvb2wg Y29yZXNpZ2h0X3BtdV92YWxpZGF0ZV9ncm91cChzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQpDQo+ ID4gK3sNCj4gPiArICAgICBzdHJ1Y3QgcGVyZl9ldmVudCAqc2libGluZywgKmxlYWRlciA9IGV2 ZW50LT5ncm91cF9sZWFkZXI7DQo+ID4gKyAgICAgc3RydWN0IGNvcmVzaWdodF9wbXVfaHdfZXZl bnRzIGZha2VfaHdfZXZlbnRzOw0KPiA+ICsNCj4gPiArICAgICBpZiAoZXZlbnQtPmdyb3VwX2xl YWRlciA9PSBldmVudCkNCj4gPiArICAgICAgICAgICAgIHJldHVybiB0cnVlOw0KPiA+ICsNCj4g PiArICAgICBtZW1zZXQoJmZha2VfaHdfZXZlbnRzLCAwLCBzaXplb2YoZmFrZV9od19ldmVudHMp KTsNCj4gPiArDQo+ID4gKyAgICAgaWYgKCFjb3Jlc2lnaHRfcG11X3ZhbGlkYXRlX2V2ZW50KGV2 ZW50LT5wbXUsICZmYWtlX2h3X2V2ZW50cywNCj4gbGVhZGVyKSkNCj4gPiArICAgICAgICAgICAg IHJldHVybiBmYWxzZTsNCj4gPiArDQo+ID4gKyAgICAgZm9yX2VhY2hfc2libGluZ19ldmVudChz aWJsaW5nLCBsZWFkZXIpIHsNCj4gPiArICAgICAgICAgICAgIGlmICghY29yZXNpZ2h0X3BtdV92 YWxpZGF0ZV9ldmVudChldmVudC0+cG11LA0KPiAmZmFrZV9od19ldmVudHMsDQo+ID4gKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2libGluZykpDQo+ID4g KyAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsNCj4gPiArICAgICB9DQo+ID4gKw0K PiA+ICsgICAgIHJldHVybiBjb3Jlc2lnaHRfcG11X3ZhbGlkYXRlX2V2ZW50KGV2ZW50LT5wbXUs DQo+ICZmYWtlX2h3X2V2ZW50cywgZXZlbnQpOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMg aW50IGNvcmVzaWdodF9wbXVfZXZlbnRfaW5pdChzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQpDQo+ ID4gK3sNCj4gPiArICAgICBzdHJ1Y3QgY29yZXNpZ2h0X3BtdSAqY29yZXNpZ2h0X3BtdTsNCj4g PiArICAgICBzdHJ1Y3QgaHdfcGVyZl9ldmVudCAqaHdjID0gJmV2ZW50LT5odzsNCj4gPiArDQo+ ID4gKyAgICAgY29yZXNpZ2h0X3BtdSA9IHRvX2NvcmVzaWdodF9wbXUoZXZlbnQtPnBtdSk7DQo+ ID4gKw0KPiA+ICsgICAgIC8qDQo+ID4gKyAgICAgICogRm9sbG93aW5nIG90aGVyICJ1bmNvcmUi IFBNVXMsIHdlIGRvIG5vdCBzdXBwb3J0IHNhbXBsaW5nIG1vZGUNCj4gb3INCj4gPiArICAgICAg KiBhdHRhY2ggdG8gYSB0YXNrIChwZXItcHJvY2VzcyBtb2RlKS4NCj4gPiArICAgICAgKi8NCj4g PiArICAgICBpZiAoaXNfc2FtcGxpbmdfZXZlbnQoZXZlbnQpKSB7DQo+ID4gKyAgICAgICAgICAg ICBkZXZfZGJnKGNvcmVzaWdodF9wbXUtPnBtdS5kZXYsDQo+ID4gKyAgICAgICAgICAgICAgICAg ICAgICJDYW4ndCBzdXBwb3J0IHNhbXBsaW5nIGV2ZW50c1xuIik7DQo+ID4gKyAgICAgICAgICAg ICByZXR1cm4gLUVPUE5PVFNVUFA7DQo+ID4gKyAgICAgfQ0KPiA+ICsNCj4gPiArICAgICBpZiAo ZXZlbnQtPmNwdSA8IDAgfHwgZXZlbnQtPmF0dGFjaF9zdGF0ZSAmIFBFUkZfQVRUQUNIX1RBU0sp IHsNCj4gPiArICAgICAgICAgICAgIGRldl9kYmcoY29yZXNpZ2h0X3BtdS0+cG11LmRldiwNCj4g PiArICAgICAgICAgICAgICAgICAgICAgIkNhbid0IHN1cHBvcnQgcGVyLXRhc2sgY291bnRlcnNc biIpOw0KPiA+ICsgICAgICAgICAgICAgcmV0dXJuIC1FSU5WQUw7DQo+ID4gKyAgICAgfQ0KPiA+ ICsNCj4gPiArICAgICAvKg0KPiA+ICsgICAgICAqIE1ha2Ugc3VyZSB0aGUgQ1BVIGFzc2lnbm1l bnQgaXMgb24gb25lIG9mIHRoZSBDUFVzIGFzc29jaWF0ZWQgd2l0aA0KPiA+ICsgICAgICAqIHRo aXMgUE1VLg0KPiA+ICsgICAgICAqLw0KPiA+ICsgICAgIGlmICghY3B1bWFza190ZXN0X2NwdShl dmVudC0+Y3B1LCAmY29yZXNpZ2h0X3BtdS0NCj4gPmFzc29jaWF0ZWRfY3B1cykpIHsNCj4gPiAr ICAgICAgICAgICAgIGRldl9kYmcoY29yZXNpZ2h0X3BtdS0+cG11LmRldiwNCj4gPiArICAgICAg ICAgICAgICAgICAgICAgIlJlcXVlc3RlZCBjcHUgaXMgbm90IGFzc29jaWF0ZWQgd2l0aCB0aGUg UE1VXG4iKTsNCj4gPiArICAgICAgICAgICAgIHJldHVybiAtRUlOVkFMOw0KPiA+ICsgICAgIH0N Cj4gPiArDQo+ID4gKyAgICAgLyogRW5mb3JjZSB0aGUgY3VycmVudCBhY3RpdmUgQ1BVIHRvIGhh bmRsZSB0aGUgZXZlbnRzIGluIHRoaXMgUE1VLiAqLw0KPiA+ICsgICAgIGV2ZW50LT5jcHUgPSBj cHVtYXNrX2ZpcnN0KCZjb3Jlc2lnaHRfcG11LT5hY3RpdmVfY3B1KTsNCj4gPiArICAgICBpZiAo ZXZlbnQtPmNwdSA+PSBucl9jcHVfaWRzKQ0KPiA+ICsgICAgICAgICAgICAgcmV0dXJuIC1FSU5W QUw7DQo+ID4gKw0KPiA+ICsgICAgIGlmICghY29yZXNpZ2h0X3BtdV92YWxpZGF0ZV9ncm91cChl dmVudCkpDQo+ID4gKyAgICAgICAgICAgICByZXR1cm4gLUVJTlZBTDsNCj4gPiArDQo+ID4gKyAg ICAgLyoNCj4gPiArICAgICAgKiBUaGUgbG9naWNhbCBjb3VudGVyIGlkIGlzIHRyYWNrZWQgd2l0 aCBod19wZXJmX2V2ZW50LmV4dHJhX3JlZy5pZHguDQo+ID4gKyAgICAgICogVGhlIHBoeXNpY2Fs IGNvdW50ZXIgaWQgaXMgdHJhY2tlZCB3aXRoIGh3X3BlcmZfZXZlbnQuaWR4Lg0KPiA+ICsgICAg ICAqIFdlIGRvbid0IGFzc2lnbiBhbiBpbmRleCB1bnRpbCB3ZSBhY3R1YWxseSBwbGFjZSB0aGUg ZXZlbnQgb250bw0KPiA+ICsgICAgICAqIGhhcmR3YXJlLiBVc2UgLTEgdG8gc2lnbmlmeSB0aGF0 IHdlIGhhdmVuJ3QgZGVjaWRlZCB3aGVyZSB0byBwdXQgaXQNCj4gPiArICAgICAgKiB5ZXQuDQo+ ID4gKyAgICAgICovDQo+ID4gKyAgICAgaHdjLT5pZHggPSAtMTsNCj4gPiArICAgICBod2MtPmV4 dHJhX3JlZy5pZHggPSAtMTsNCj4gPiArICAgICBod2MtPmNvbmZpZ19iYXNlID0gY29yZXNpZ2h0 X3BtdS0+aW1wbC5vcHMtPmV2ZW50X3R5cGUoZXZlbnQpOw0KPiANCj4gbml0OiBUaGlzIGlzIGEg Yml0IGNvbmZ1c2luZyBjb21iaW5lZCB3aXRoIHdpdGggcG11LT5iYXNlMCwgd2hlbiB3ZQ0KPiB3 cml0ZSB0aGUgZXZlbnQgY29uZmlnLg0KPiANCj4gQ291bGQgd2UgdXNlIGh3Yy0+Y29uZmlnIGlu c3RlYWQgPw0KPiANCg0KSSB3YXMgZm9sbG93aW5nIG90aGVyIGRyaXZlcnMuIEkgY2FuIGNoYW5n ZSBpdCB0byBod2MtPmNvbmZpZyBzaW5jZSBpdCBpcyBub3QgdXNlZCBhbnl3aGVyZSBlbHNlLg0K DQo+ID4gKw0KPiA+ICsgICAgIHJldHVybiAwOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMg aW5saW5lIHUzMiBjb3VudGVyX29mZnNldCh1MzIgcmVnX3N6LCB1MzIgY3RyX2lkeCkNCj4gPiAr ew0KPiA+ICsgICAgIHJldHVybiAoUE1FVkNOVFJfTE8gKyAocmVnX3N6ICogY3RyX2lkeCkpOw0K PiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgdm9pZCBjb3Jlc2lnaHRfcG11X3dyaXRlX2NvdW50 ZXIoc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50LCB1NjQNCj4gdmFsKQ0KPiA+ICt7DQo+ID4gKyAg ICAgdTMyIG9mZnNldDsNCj4gPiArICAgICBzdHJ1Y3QgY29yZXNpZ2h0X3BtdSAqY29yZXNpZ2h0 X3BtdSA9IHRvX2NvcmVzaWdodF9wbXUoZXZlbnQtDQo+ID5wbXUpOw0KPiA+ICsNCj4gPiArICAg ICBpZiAodXNlXzY0Yl9jb3VudGVyX3JlZyhjb3Jlc2lnaHRfcG11KSkgew0KPiA+ICsgICAgICAg ICAgICAgb2Zmc2V0ID0gY291bnRlcl9vZmZzZXQoc2l6ZW9mKHU2NCksIGV2ZW50LT5ody5pZHgp Ow0KPiA+ICsNCj4gPiArICAgICAgICAgICAgIHdyaXRlcSh2YWwsIGNvcmVzaWdodF9wbXUtPmJh c2UxICsgb2Zmc2V0KTsNCj4gPiArICAgICB9IGVsc2Ugew0KPiA+ICsgICAgICAgICAgICAgb2Zm c2V0ID0gY291bnRlcl9vZmZzZXQoc2l6ZW9mKHUzMiksIGV2ZW50LT5ody5pZHgpOw0KPiA+ICsN Cj4gPiArICAgICAgICAgICAgIHdyaXRlbChsb3dlcl8zMl9iaXRzKHZhbCksIGNvcmVzaWdodF9w bXUtPmJhc2UxICsgb2Zmc2V0KTsNCj4gPiArICAgICB9DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0 YXRpYyB1NjQgY29yZXNpZ2h0X3BtdV9yZWFkX2NvdW50ZXIoc3RydWN0IHBlcmZfZXZlbnQgKmV2 ZW50KQ0KPiA+ICt7DQo+ID4gKyAgICAgdTMyIG9mZnNldDsNCj4gPiArICAgICBjb25zdCB2b2lk IF9faW9tZW0gKmNvdW50ZXJfYWRkcjsNCj4gPiArICAgICBzdHJ1Y3QgY29yZXNpZ2h0X3BtdSAq Y29yZXNpZ2h0X3BtdSA9IHRvX2NvcmVzaWdodF9wbXUoZXZlbnQtDQo+ID5wbXUpOw0KPiA+ICsN Cj4gPiArICAgICBpZiAodXNlXzY0Yl9jb3VudGVyX3JlZyhjb3Jlc2lnaHRfcG11KSkgew0KPiA+ ICsgICAgICAgICAgICAgb2Zmc2V0ID0gY291bnRlcl9vZmZzZXQoc2l6ZW9mKHU2NCksIGV2ZW50 LT5ody5pZHgpOw0KPiA+ICsgICAgICAgICAgICAgY291bnRlcl9hZGRyID0gY29yZXNpZ2h0X3Bt dS0+YmFzZTEgKyBvZmZzZXQ7DQo+ID4gKw0KPiA+ICsgICAgICAgICAgICAgcmV0dXJuIHN1cHBv cnRfYXRvbWljKGNvcmVzaWdodF9wbXUpID8NCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHJlYWRxKGNvdW50ZXJfYWRkcikgOg0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgcmVhZF9yZWc2NF9oaWxvaGkoY291bnRlcl9hZGRyKTsNCj4gPiArICAgICB9DQo+ID4gKw0K PiA+ICsgICAgIG9mZnNldCA9IGNvdW50ZXJfb2Zmc2V0KHNpemVvZih1MzIpLCBldmVudC0+aHcu aWR4KTsNCj4gPiArICAgICByZXR1cm4gcmVhZGwoY29yZXNpZ2h0X3BtdS0+YmFzZTEgKyBvZmZz ZXQpOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICsvKg0KPiA+ICsgKiBjb3Jlc2lnaHRfcG11X3NldF9l dmVudF9wZXJpb2Q6IFNldCB0aGUgcGVyaW9kIGZvciB0aGUgY291bnRlci4NCj4gPiArICoNCj4g PiArICogVG8gaGFuZGxlIGNhc2VzIG9mIGV4dHJlbWUgaW50ZXJydXB0IGxhdGVuY3ksIHdlIHBy b2dyYW0NCj4gPiArICogdGhlIGNvdW50ZXIgd2l0aCBoYWxmIG9mIHRoZSBtYXggY291bnQgZm9y IHRoZSBjb3VudGVycy4NCj4gPiArICovDQo+ID4gK3N0YXRpYyB2b2lkIGNvcmVzaWdodF9wbXVf c2V0X2V2ZW50X3BlcmlvZChzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQpDQo+ID4gK3sNCj4gPiAr ICAgICBzdHJ1Y3QgY29yZXNpZ2h0X3BtdSAqY29yZXNpZ2h0X3BtdSA9IHRvX2NvcmVzaWdodF9w bXUoZXZlbnQtDQo+ID5wbXUpOw0KPiA+ICsgICAgIHU2NCB2YWwgPSBHRU5NQVNLX1VMTChwbWNm Z3Jfc2l6ZShjb3Jlc2lnaHRfcG11KSwgMCkgPj4gMTsNCj4gDQo+IFBsZWFzZSBjb3VsZCB3ZSBh ZGQgYSBoZWxwZXIgdG8gZ2V0IHRoZSAiY291bnRlciBtYXNrIiA/IE90aGVyd2lzZSB0aGlzDQo+ IGlzIGEgYml0IGNvbmZ1c2luZy4gV2Ugd291bGQgZXhwZWN0DQo+ICAgIHBtY2Zncl9zaXplKCkg PSA2NCBmb3IgNjRiaXQgY291bnRlcnMsIGJ1dCBpdCBpcyByZWFsbHkgNjMgaW5zdGVhZC4NCj4g YW5kIHRoYXQgbWFkZSBtZSBzdGFyZSB0aGUgR0VOTUFTS19VTEwoKSBhbmQgZ28gYmFjayB0cmFj ZSBpdCBkb3duDQo+IHRvIHRoZSBzcGVjLiBQbGVhc2Ugc2VlIG15IHN1Z2dlc3Rpb24gb24gdGhl IHRvcCB0byBhZGQgY291bnRlcl9tYXNrKCkuDQo+IA0KDQpTdXJlIHdpbGwgZG8uIEkgYXBvbG9n aXplIGZvciB0aGUgY29uZnVzaW9uLg0KDQo+ID4gKw0KPiA+ICsgICAgIGxvY2FsNjRfc2V0KCZl dmVudC0+aHcucHJldl9jb3VudCwgdmFsKTsNCj4gPiArICAgICBjb3Jlc2lnaHRfcG11X3dyaXRl X2NvdW50ZXIoZXZlbnQsIHZhbCk7DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyB2b2lkIGNv cmVzaWdodF9wbXVfZW5hYmxlX2NvdW50ZXIoc3RydWN0IGNvcmVzaWdodF9wbXUNCj4gKmNvcmVz aWdodF9wbXUsDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50 IGlkeCkNCj4gPiArew0KPiA+ICsgICAgIHUzMiByZWdfaWQsIHJlZ19iaXQsIGludGVuX29mZiwg Y250ZW5fb2ZmOw0KPiA+ICsNCj4gPiArICAgICByZWdfaWQgPSBDT1JFU0lHSFRfSURYX1RPX1NF VF9DTFJfUkVHX0lEKGlkeCk7DQo+ID4gKyAgICAgcmVnX2JpdCA9IENPUkVTSUdIVF9JRFhfVE9f U0VUX0NMUl9SRUdfQklUKGlkeCk7DQo+ID4gKw0KPiA+ICsgICAgIGludGVuX29mZiA9IFBNSU5U RU5TRVQgKyAoNCAqIHJlZ19pZCk7DQo+ID4gKyAgICAgY250ZW5fb2ZmID0gUE1DTlRFTlNFVCAr ICg0ICogcmVnX2lkKTsNCj4gPiArDQo+ID4gKyAgICAgd3JpdGVsKEJJVChyZWdfYml0KSwgY29y ZXNpZ2h0X3BtdS0+YmFzZTAgKyBpbnRlbl9vZmYpOw0KPiA+ICsgICAgIHdyaXRlbChCSVQocmVn X2JpdCksIGNvcmVzaWdodF9wbXUtPmJhc2UwICsgY250ZW5fb2ZmKTsNCj4gPiArfQ0KPiA+ICsN Cj4gPiArc3RhdGljIHZvaWQgY29yZXNpZ2h0X3BtdV9kaXNhYmxlX2NvdW50ZXIoc3RydWN0IGNv cmVzaWdodF9wbXUNCj4gKmNvcmVzaWdodF9wbXUsDQo+ID4gKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGludCBpZHgpDQo+ID4gK3sNCj4gPiArICAgICB1MzIgcmVnX2lk LCByZWdfYml0LCBpbnRlbl9vZmYsIGNudGVuX29mZjsNCj4gPiArDQo+ID4gKyAgICAgcmVnX2lk ID0gQ09SRVNJR0hUX0lEWF9UT19TRVRfQ0xSX1JFR19JRChpZHgpOw0KPiA+ICsgICAgIHJlZ19i aXQgPSBDT1JFU0lHSFRfSURYX1RPX1NFVF9DTFJfUkVHX0JJVChpZHgpOw0KPiA+ICsNCj4gPiAr ICAgICBpbnRlbl9vZmYgPSBQTUlOVEVOQ0xSICsgKDQgKiByZWdfaWQpOw0KPiA+ICsgICAgIGNu dGVuX29mZiA9IFBNQ05URU5DTFIgKyAoNCAqIHJlZ19pZCk7DQo+ID4gKw0KPiA+ICsgICAgIHdy aXRlbChCSVQocmVnX2JpdCksIGNvcmVzaWdodF9wbXUtPmJhc2UwICsgY250ZW5fb2ZmKTsNCj4g PiArICAgICB3cml0ZWwoQklUKHJlZ19iaXQpLCBjb3Jlc2lnaHRfcG11LT5iYXNlMCArIGludGVu X29mZik7DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyB2b2lkIGNvcmVzaWdodF9wbXVfZXZl bnRfdXBkYXRlKHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCkNCj4gPiArew0KPiA+ICsgICAgIHN0 cnVjdCBjb3Jlc2lnaHRfcG11ICpjb3Jlc2lnaHRfcG11ID0gdG9fY29yZXNpZ2h0X3BtdShldmVu dC0NCj4gPnBtdSk7DQo+ID4gKyAgICAgc3RydWN0IGh3X3BlcmZfZXZlbnQgKmh3YyA9ICZldmVu dC0+aHc7DQo+ID4gKyAgICAgdTY0IGRlbHRhLCBwcmV2LCBub3c7DQo+ID4gKw0KPiA+ICsgICAg IGRvIHsNCj4gPiArICAgICAgICAgICAgIHByZXYgPSBsb2NhbDY0X3JlYWQoJmh3Yy0+cHJldl9j b3VudCk7DQo+ID4gKyAgICAgICAgICAgICBub3cgPSBjb3Jlc2lnaHRfcG11X3JlYWRfY291bnRl cihldmVudCk7DQo+ID4gKyAgICAgfSB3aGlsZSAobG9jYWw2NF9jbXB4Y2hnKCZod2MtPnByZXZf Y291bnQsIHByZXYsIG5vdykgIT0gcHJldik7DQo+ID4gKw0KPiA+ICsgICAgIGRlbHRhID0gKG5v dyAtIHByZXYpICYgR0VOTUFTS19VTEwocG1jZmdyX3NpemUoY29yZXNpZ2h0X3BtdSksIDApOw0K PiA+ICsgICAgIGxvY2FsNjRfYWRkKGRlbHRhLCAmZXZlbnQtPmNvdW50KTsNCj4gPiArfQ0KPiA+ ICsNCj4gPiArc3RhdGljIGlubGluZSB2b2lkIGNvcmVzaWdodF9wbXVfc2V0X2V2ZW50KHN0cnVj dCBjb3Jlc2lnaHRfcG11DQo+ICpjb3Jlc2lnaHRfcG11LA0KPiA+ICsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGh3X3BlcmZfZXZlbnQgKmh3YykNCj4gPiAr ew0KPiA+ICsgICAgIHUzMiBvZmZzZXQgPSBQTUVWVFlQRVIgKyAoNCAqIGh3Yy0+aWR4KTsNCj4g PiArDQo+ID4gKyAgICAgd3JpdGVsKGh3Yy0+Y29uZmlnX2Jhc2UsIGNvcmVzaWdodF9wbXUtPmJh c2UwICsgb2Zmc2V0KTsNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIGlubGluZSB2b2lkDQo+ ID4gK2NvcmVzaWdodF9wbXVfc2V0X2V2X2ZpbHRlcihzdHJ1Y3QgY29yZXNpZ2h0X3BtdSAqY29y ZXNpZ2h0X3BtdSwNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBod19wZXJm X2V2ZW50ICpod2MsIHUzMiBmaWx0ZXIpDQo+ID4gK3sNCj4gPiArICAgICB1MzIgb2Zmc2V0ID0g UE1FVkZJTFRSICsgKDQgKiBod2MtPmlkeCk7DQo+ID4gKw0KPiA+ICsgICAgIHdyaXRlbChmaWx0 ZXIsIGNvcmVzaWdodF9wbXUtPmJhc2UwICsgb2Zmc2V0KTsNCj4gPiArfQ0KPiA+ICsNCj4gPiAr c3RhdGljIGlubGluZSB2b2lkDQo+ID4gK2NvcmVzaWdodF9wbXVfc2V0X2NjX2ZpbHRlcihzdHJ1 Y3QgY29yZXNpZ2h0X3BtdSAqY29yZXNpZ2h0X3BtdSwgdTMyDQo+IGZpbHRlcikNCj4gPiArew0K PiA+ICsgICAgIHUzMiBvZmZzZXQgPSBQTUNDRklMVFI7DQo+ID4gKw0KPiA+ICsgICAgIHdyaXRl bChmaWx0ZXIsIGNvcmVzaWdodF9wbXUtPmJhc2UwICsgb2Zmc2V0KTsNCj4gPiArfQ0KPiA+ICsN Cj4gPiArc3RhdGljIHZvaWQgY29yZXNpZ2h0X3BtdV9zdGFydChzdHJ1Y3QgcGVyZl9ldmVudCAq ZXZlbnQsIGludCBwbXVfZmxhZ3MpDQo+ID4gK3sNCj4gPiArICAgICBzdHJ1Y3QgY29yZXNpZ2h0 X3BtdSAqY29yZXNpZ2h0X3BtdSA9IHRvX2NvcmVzaWdodF9wbXUoZXZlbnQtDQo+ID5wbXUpOw0K PiA+ICsgICAgIHN0cnVjdCBod19wZXJmX2V2ZW50ICpod2MgPSAmZXZlbnQtPmh3Ow0KPiA+ICsg ICAgIHUzMiBmaWx0ZXI7DQo+ID4gKw0KPiA+ICsgICAgIC8qIFdlIGFsd2F5cyByZXByb2dyYW0g dGhlIGNvdW50ZXIgKi8NCj4gPiArICAgICBpZiAocG11X2ZsYWdzICYgUEVSRl9FRl9SRUxPQUQp DQo+ID4gKyAgICAgICAgICAgICBXQVJOX09OKCEoaHdjLT5zdGF0ZSAmIFBFUkZfSEVTX1VQVE9E QVRFKSk7DQo+ID4gKw0KPiA+ICsgICAgIGNvcmVzaWdodF9wbXVfc2V0X2V2ZW50X3BlcmlvZChl dmVudCk7DQo+ID4gKw0KPiA+ICsgICAgIGZpbHRlciA9IGNvcmVzaWdodF9wbXUtPmltcGwub3Bz LT5ldmVudF9maWx0ZXIoZXZlbnQpOw0KPiA+ICsNCj4gPiArICAgICBpZiAoZXZlbnQtPmh3LmV4 dHJhX3JlZy5pZHggPT0gY29yZXNpZ2h0X3BtdS0+Y2NfbG9naWNhbF9pZHgpIHsNCj4gPiArICAg ICAgICAgICAgIGNvcmVzaWdodF9wbXVfc2V0X2NjX2ZpbHRlcihjb3Jlc2lnaHRfcG11LCBmaWx0 ZXIpOw0KPiA+ICsgICAgIH0gZWxzZSB7DQo+ID4gKyAgICAgICAgICAgICBjb3Jlc2lnaHRfcG11 X3NldF9ldmVudChjb3Jlc2lnaHRfcG11LCBod2MpOw0KPiA+ICsgICAgICAgICAgICAgY29yZXNp Z2h0X3BtdV9zZXRfZXZfZmlsdGVyKGNvcmVzaWdodF9wbXUsIGh3YywgZmlsdGVyKTsNCj4gPiAr ICAgICB9DQo+ID4gKw0KPiA+ICsgICAgIGh3Yy0+c3RhdGUgPSAwOw0KPiA+ICsNCj4gPiArICAg ICBjb3Jlc2lnaHRfcG11X2VuYWJsZV9jb3VudGVyKGNvcmVzaWdodF9wbXUsIGh3Yy0+aWR4KTsN Cj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIHZvaWQgY29yZXNpZ2h0X3BtdV9zdG9wKHN0cnVj dCBwZXJmX2V2ZW50ICpldmVudCwgaW50IHBtdV9mbGFncykNCj4gPiArew0KPiA+ICsgICAgIHN0 cnVjdCBjb3Jlc2lnaHRfcG11ICpjb3Jlc2lnaHRfcG11ID0gdG9fY29yZXNpZ2h0X3BtdShldmVu dC0NCj4gPnBtdSk7DQo+ID4gKyAgICAgc3RydWN0IGh3X3BlcmZfZXZlbnQgKmh3YyA9ICZldmVu dC0+aHc7DQo+ID4gKw0KPiA+ICsgICAgIGlmIChod2MtPnN0YXRlICYgUEVSRl9IRVNfU1RPUFBF RCkNCj4gPiArICAgICAgICAgICAgIHJldHVybjsNCj4gPiArDQo+ID4gKyAgICAgY29yZXNpZ2h0 X3BtdV9kaXNhYmxlX2NvdW50ZXIoY29yZXNpZ2h0X3BtdSwgaHdjLT5pZHgpOw0KPiA+ICsgICAg IGNvcmVzaWdodF9wbXVfZXZlbnRfdXBkYXRlKGV2ZW50KTsNCj4gPiArDQo+ID4gKyAgICAgaHdj LT5zdGF0ZSB8PSBQRVJGX0hFU19TVE9QUEVEIHwgUEVSRl9IRVNfVVBUT0RBVEU7DQo+ID4gK30N Cj4gPiArDQo+ID4gK3N0YXRpYyBpbmxpbmUgdTMyIHRvX3BoeXNfaWR4KHN0cnVjdCBjb3Jlc2ln aHRfcG11ICpjb3Jlc2lnaHRfcG11LCB1MzINCj4gaWR4KQ0KPiA+ICt7DQo+ID4gKyAgICAgcmV0 dXJuIChpZHggPT0gY29yZXNpZ2h0X3BtdS0+Y2NfbG9naWNhbF9pZHgpID8NCj4gPiArICAgICAg ICAgICAgICAgICAgICBDT1JFU0lHSFRfUE1VX0lEWF9DQ05UUiA6IGlkeDsNCj4gPiArfQ0KPiA+ ICsNCj4gPiArc3RhdGljIGludCBjb3Jlc2lnaHRfcG11X2FkZChzdHJ1Y3QgcGVyZl9ldmVudCAq ZXZlbnQsIGludCBmbGFncykNCj4gPiArew0KPiA+ICsgICAgIHN0cnVjdCBjb3Jlc2lnaHRfcG11 ICpjb3Jlc2lnaHRfcG11ID0gdG9fY29yZXNpZ2h0X3BtdShldmVudC0NCj4gPnBtdSk7DQo+ID4g KyAgICAgc3RydWN0IGNvcmVzaWdodF9wbXVfaHdfZXZlbnRzICpod19ldmVudHMgPSAmY29yZXNp Z2h0X3BtdS0NCj4gPmh3X2V2ZW50czsNCj4gPiArICAgICBzdHJ1Y3QgaHdfcGVyZl9ldmVudCAq aHdjID0gJmV2ZW50LT5odzsNCj4gPiArICAgICBpbnQgaWR4Ow0KPiA+ICsNCj4gPiArICAgICBp ZiAoV0FSTl9PTl9PTkNFKCFjcHVtYXNrX3Rlc3RfY3B1KHNtcF9wcm9jZXNzb3JfaWQoKSwNCj4g PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZjb3Jlc2lnaHRfcG11 LT5hc3NvY2lhdGVkX2NwdXMpKSkNCj4gPiArICAgICAgICAgICAgIHJldHVybiAtRU5PRU5UOw0K PiA+ICsNCj4gPiArICAgICBpZHggPSBjb3Jlc2lnaHRfcG11X2dldF9ldmVudF9pZHgoaHdfZXZl bnRzLCBldmVudCk7DQo+ID4gKyAgICAgaWYgKGlkeCA8IDApDQo+ID4gKyAgICAgICAgICAgICBy ZXR1cm4gaWR4Ow0KPiA+ICsNCj4gPiArICAgICBod19ldmVudHMtPmV2ZW50c1tpZHhdID0gZXZl bnQ7DQo+ID4gKyAgICAgaHdjLT5pZHggPSB0b19waHlzX2lkeChjb3Jlc2lnaHRfcG11LCBpZHgp Ow0KPiA+ICsgICAgIGh3Yy0+ZXh0cmFfcmVnLmlkeCA9IGlkeDsNCj4gPiArICAgICBod2MtPnN0 YXRlID0gUEVSRl9IRVNfU1RPUFBFRCB8IFBFUkZfSEVTX1VQVE9EQVRFOw0KPiA+ICsNCj4gPiAr ICAgICBpZiAoZmxhZ3MgJiBQRVJGX0VGX1NUQVJUKQ0KPiA+ICsgICAgICAgICAgICAgY29yZXNp Z2h0X3BtdV9zdGFydChldmVudCwgUEVSRl9FRl9SRUxPQUQpOw0KPiA+ICsNCj4gPiArICAgICAv KiBQcm9wYWdhdGUgY2hhbmdlcyB0byB0aGUgdXNlcnNwYWNlIG1hcHBpbmcuICovDQo+ID4gKyAg ICAgcGVyZl9ldmVudF91cGRhdGVfdXNlcnBhZ2UoZXZlbnQpOw0KPiA+ICsNCj4gPiArICAgICBy ZXR1cm4gMDsNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIHZvaWQgY29yZXNpZ2h0X3BtdV9k ZWwoc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50LCBpbnQgZmxhZ3MpDQo+ID4gK3sNCj4gPiArICAg ICBzdHJ1Y3QgY29yZXNpZ2h0X3BtdSAqY29yZXNpZ2h0X3BtdSA9IHRvX2NvcmVzaWdodF9wbXUo ZXZlbnQtDQo+ID5wbXUpOw0KPiA+ICsgICAgIHN0cnVjdCBjb3Jlc2lnaHRfcG11X2h3X2V2ZW50 cyAqaHdfZXZlbnRzID0gJmNvcmVzaWdodF9wbXUtDQo+ID5od19ldmVudHM7DQo+ID4gKyAgICAg c3RydWN0IGh3X3BlcmZfZXZlbnQgKmh3YyA9ICZldmVudC0+aHc7DQo+ID4gKyAgICAgaW50IGlk eCA9IGh3Yy0+ZXh0cmFfcmVnLmlkeDsNCj4gPiArDQo+ID4gKyAgICAgY29yZXNpZ2h0X3BtdV9z dG9wKGV2ZW50LCBQRVJGX0VGX1VQREFURSk7DQo+ID4gKw0KPiA+ICsgICAgIGh3X2V2ZW50cy0+ ZXZlbnRzW2lkeF0gPSBOVUxMOw0KPiA+ICsNCj4gPiArICAgICBjbGVhcl9iaXQoaWR4LCBod19l dmVudHMtPnVzZWRfY3Rycyk7DQo+ID4gKw0KPiA+ICsgICAgIHBlcmZfZXZlbnRfdXBkYXRlX3Vz ZXJwYWdlKGV2ZW50KTsNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIHZvaWQgY29yZXNpZ2h0 X3BtdV9yZWFkKHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCkNCj4gPiArew0KPiA+ICsgICAgIGNv cmVzaWdodF9wbXVfZXZlbnRfdXBkYXRlKGV2ZW50KTsNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3Rh dGljIGludCBjb3Jlc2lnaHRfcG11X2FsbG9jKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYs DQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgY29yZXNpZ2h0X3BtdSAq KmNvcmVzaWdodF9wbXUpDQo+ID4gK3sNCj4gPiArICAgICBzdHJ1Y3QgYWNwaV9hcG10X25vZGUg KmFwbXRfbm9kZTsNCj4gPiArICAgICBzdHJ1Y3QgZGV2aWNlICpkZXY7DQo+ID4gKyAgICAgc3Ry dWN0IGNvcmVzaWdodF9wbXUgKnBtdTsNCj4gPiArDQo+ID4gKyAgICAgZGV2ID0gJnBkZXYtPmRl djsNCj4gPiArICAgICBhcG10X25vZGUgPSAqKHN0cnVjdCBhY3BpX2FwbXRfbm9kZSAqKilkZXZf Z2V0X3BsYXRkYXRhKGRldik7DQo+ID4gKyAgICAgaWYgKCFhcG10X25vZGUpIHsNCj4gPiArICAg ICAgICAgICAgIGRldl9lcnIoZGV2LCAiZmFpbGVkIHRvIGdldCBBUE1UIG5vZGVcbiIpOw0KPiA+ ICsgICAgICAgICAgICAgcmV0dXJuIC1FTk9NRU07DQo+ID4gKyAgICAgfQ0KPiA+ICsNCj4gPiAr ICAgICBwbXUgPSBkZXZtX2t6YWxsb2MoZGV2LCBzaXplb2YoKnBtdSksIEdGUF9LRVJORUwpOw0K PiA+ICsgICAgIGlmICghcG11KQ0KPiA+ICsgICAgICAgICAgICAgcmV0dXJuIC1FTk9NRU07DQo+ ID4gKw0KPiA+ICsgICAgICpjb3Jlc2lnaHRfcG11ID0gcG11Ow0KPiA+ICsNCj4gPiArICAgICBw bXUtPmRldiA9IGRldjsNCj4gPiArICAgICBwbXUtPmFwbXRfbm9kZSA9IGFwbXRfbm9kZTsNCj4g PiArDQo+ID4gKyAgICAgcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgY29yZXNpZ2h0X3BtdSk7 DQo+ID4gKw0KPiA+ICsgICAgIHJldHVybiAwOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMg aW50IGNvcmVzaWdodF9wbXVfaW5pdF9tbWlvKHN0cnVjdCBjb3Jlc2lnaHRfcG11DQo+ICpjb3Jl c2lnaHRfcG11KQ0KPiA+ICt7DQo+ID4gKyAgICAgc3RydWN0IGRldmljZSAqZGV2Ow0KPiA+ICsg ICAgIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXY7DQo+ID4gKyAgICAgc3RydWN0IGFjcGlf YXBtdF9ub2RlICphcG10X25vZGU7DQo+ID4gKw0KPiA+ICsgICAgIGRldiA9IGNvcmVzaWdodF9w bXUtPmRldjsNCj4gPiArICAgICBwZGV2ID0gdG9fcGxhdGZvcm1fZGV2aWNlKGRldik7DQo+ID4g KyAgICAgYXBtdF9ub2RlID0gY29yZXNpZ2h0X3BtdS0+YXBtdF9ub2RlOw0KPiA+ICsNCj4gPiAr ICAgICAvKiBCYXNlIGFkZHJlc3MgZm9yIHBhZ2UgMC4gKi8NCj4gPiArICAgICBjb3Jlc2lnaHRf cG11LT5iYXNlMCA9IGRldm1fcGxhdGZvcm1faW9yZW1hcF9yZXNvdXJjZShwZGV2LCAwKTsNCj4g PiArICAgICBpZiAoSVNfRVJSKGNvcmVzaWdodF9wbXUtPmJhc2UwKSkgew0KPiA+ICsgICAgICAg ICAgICAgZGV2X2VycihkZXYsICJpb3JlbWFwIGZhaWxlZCBmb3IgcGFnZS0wIHJlc291cmNlXG4i KTsNCj4gPiArICAgICAgICAgICAgIHJldHVybiBQVFJfRVJSKGNvcmVzaWdodF9wbXUtPmJhc2Uw KTsNCj4gPiArICAgICB9DQo+ID4gKw0KPiA+ICsgICAgIC8qIEJhc2UgYWRkcmVzcyBmb3IgcGFn ZSAxIGlmIHN1cHBvcnRlZC4gT3RoZXJ3aXNlIHBvaW50IGl0IHRvIHBhZ2UgMC4gKi8NCj4gPiAr ICAgICBjb3Jlc2lnaHRfcG11LT5iYXNlMSA9IGNvcmVzaWdodF9wbXUtPmJhc2UwOw0KPiA+ICsg ICAgIGlmIChDSEVDS19BUE1UX0ZMQUcoYXBtdF9ub2RlLT5mbGFncywgRFVBTF9QQUdFLCBTVVBQ KSkgew0KPiA+ICsgICAgICAgICAgICAgY29yZXNpZ2h0X3BtdS0+YmFzZTEgPSBkZXZtX3BsYXRm b3JtX2lvcmVtYXBfcmVzb3VyY2UocGRldiwNCj4gMSk7DQo+ID4gKyAgICAgICAgICAgICBpZiAo SVNfRVJSKGNvcmVzaWdodF9wbXUtPmJhc2UxKSkgew0KPiA+ICsgICAgICAgICAgICAgICAgICAg ICBkZXZfZXJyKGRldiwgImlvcmVtYXAgZmFpbGVkIGZvciBwYWdlLTEgcmVzb3VyY2VcbiIpOw0K PiA+ICsgICAgICAgICAgICAgICAgICAgICByZXR1cm4gUFRSX0VSUihjb3Jlc2lnaHRfcG11LT5i YXNlMSk7DQo+ID4gKyAgICAgICAgICAgICB9DQo+ID4gKyAgICAgfQ0KPiA+ICsNCj4gPiArICAg ICBjb3Jlc2lnaHRfcG11LT5wbWNmZ3IgPSByZWFkbChjb3Jlc2lnaHRfcG11LT5iYXNlMCArIFBN Q0ZHUik7DQo+ID4gKw0KPiA+ICsgICAgIGNvcmVzaWdodF9wbXUtPm51bV9sb2dpY2FsX2NvdW50 ZXJzID0gcG1jZmdyX24oY29yZXNpZ2h0X3BtdSkgKw0KPiAxOw0KPiA+ICsNCj4gPiArICAgICBj b3Jlc2lnaHRfcG11LT5jY19sb2dpY2FsX2lkeCA9IENPUkVTSUdIVF9QTVVfTUFYX0hXX0NOVFJT Ow0KPiA+ICsNCj4gPiArICAgICBpZiAoc3VwcG9ydF9jYyhjb3Jlc2lnaHRfcG11KSkgew0KPiA+ ICsgICAgICAgICAgICAgLyoNCj4gPiArICAgICAgICAgICAgICAqIFRoZSBsYXN0IGxvZ2ljYWwg Y291bnRlciBpcyBtYXBwZWQgdG8gY3ljbGUgY291bnRlciBpZg0KPiA+ICsgICAgICAgICAgICAg ICogdGhlcmUgaXMgYSBnYXAgYmV0d2VlbiByZWd1bGFyIGFuZCBjeWNsZSBjb3VudGVyLiBPdGhl cndpc2UsDQo+ID4gKyAgICAgICAgICAgICAgKiBsb2dpY2FsIGFuZCBwaHlzaWNhbCBoYXZlIDEt dG8tMSBtYXBwaW5nLg0KPiA+ICsgICAgICAgICAgICAgICovDQo+ID4gKyAgICAgICAgICAgICBj b3Jlc2lnaHRfcG11LT5jY19sb2dpY2FsX2lkeCA9DQo+ID4gKyAgICAgICAgICAgICAgICAgICAg IChjb3Jlc2lnaHRfcG11LT5udW1fbG9naWNhbF9jb3VudGVycyA8PQ0KPiA+ICsgICAgICAgICAg ICAgICAgICAgICAgQ09SRVNJR0hUX1BNVV9JRFhfQ0NOVFIpID8NCj4gPiArICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBjb3Jlc2lnaHRfcG11LT5udW1fbG9naWNhbF9jb3VudGVycyAtIDEg Og0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPUkVTSUdIVF9QTVVfSURYX0ND TlRSOw0KPiA+ICsgICAgIH0NCj4gPiArDQo+ID4gKyAgICAgY29yZXNpZ2h0X3BtdS0+bnVtX3Nl dF9jbHJfcmVnID0NCj4gPiArICAgICAgICAgICAgIERJVl9ST1VORF9VUChjb3Jlc2lnaHRfcG11 LT5udW1fbG9naWNhbF9jb3VudGVycywNCj4gPiArICAgICAgICAgICAgICAgICAgICAgIENPUkVT SUdIVF9TRVRfQ0xSX1JFR19DT1VOVEVSX05VTSk7DQo+ID4gKw0KPiA+ICsgICAgIGNvcmVzaWdo dF9wbXUtPmh3X2V2ZW50cy5ldmVudHMgPQ0KPiA+ICsgICAgICAgICAgICAgZGV2bV9remFsbG9j KGRldiwNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YoKmNvcmVzaWdodF9w bXUtPmh3X2V2ZW50cy5ldmVudHMpICoNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGNvcmVzaWdodF9wbXUtPm51bV9sb2dpY2FsX2NvdW50ZXJzLA0KPiA+ICsgICAgICAg ICAgICAgICAgICAgICAgICAgIEdGUF9LRVJORUwpOw0KPiA+ICsNCj4gPiArICAgICBpZiAoIWNv cmVzaWdodF9wbXUtPmh3X2V2ZW50cy5ldmVudHMpDQo+ID4gKyAgICAgICAgICAgICByZXR1cm4g LUVOT01FTTsNCj4gPiArDQo+ID4gKyAgICAgcmV0dXJuIDA7DQo+ID4gK30NCj4gPiArDQo+ID4g K3N0YXRpYyBpbmxpbmUgaW50DQo+ID4gK2NvcmVzaWdodF9wbXVfZ2V0X3Jlc2V0X292ZXJmbG93 KHN0cnVjdCBjb3Jlc2lnaHRfcG11DQo+ICpjb3Jlc2lnaHRfcG11LA0KPiA+ICsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICB1MzIgKnBtb3ZzKQ0KPiA+ICt7DQo+ID4gKyAgICAgaW50IGk7 DQo+ID4gKyAgICAgdTMyIHBtb3ZjbHJfb2Zmc2V0ID0gUE1PVlNDTFI7DQo+ID4gKyAgICAgdTMy IGhhc19vdmVyZmxvd2VkID0gMDsNCj4gPiArDQo+ID4gKyAgICAgZm9yIChpID0gMDsgaSA8IGNv cmVzaWdodF9wbXUtPm51bV9zZXRfY2xyX3JlZzsgKytpKSB7DQo+ID4gKyAgICAgICAgICAgICBw bW92c1tpXSA9IHJlYWRsKGNvcmVzaWdodF9wbXUtPmJhc2UxICsgcG1vdmNscl9vZmZzZXQpOw0K PiA+ICsgICAgICAgICAgICAgaGFzX292ZXJmbG93ZWQgfD0gcG1vdnNbaV07DQo+ID4gKyAgICAg ICAgICAgICB3cml0ZWwocG1vdnNbaV0sIGNvcmVzaWdodF9wbXUtPmJhc2UxICsgcG1vdmNscl9v ZmZzZXQpOw0KPiA+ICsgICAgICAgICAgICAgcG1vdmNscl9vZmZzZXQgKz0gc2l6ZW9mKHUzMik7 DQo+ID4gKyAgICAgfQ0KPiA+ICsNCj4gPiArICAgICByZXR1cm4gaGFzX292ZXJmbG93ZWQgIT0g MDsNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIGlycXJldHVybl90IGNvcmVzaWdodF9wbXVf aGFuZGxlX2lycShpbnQgaXJxX251bSwgdm9pZCAqZGV2KQ0KPiA+ICt7DQo+ID4gKyAgICAgaW50 IGlkeCwgaGFzX292ZXJmbG93ZWQ7DQo+ID4gKyAgICAgc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50 Ow0KPiA+ICsgICAgIHN0cnVjdCBjb3Jlc2lnaHRfcG11ICpjb3Jlc2lnaHRfcG11ID0gZGV2Ow0K PiA+ICsgICAgIHUzMiBwbW92c1tDT1JFU0lHSFRfU0VUX0NMUl9SRUdfTUFYX05VTV0gPSB7IDAg fTsNCj4gPiArICAgICBib29sIGhhbmRsZWQgPSBmYWxzZTsNCj4gPiArDQo+ID4gKyAgICAgY29y ZXNpZ2h0X3BtdV9zdG9wX2NvdW50ZXJzKGNvcmVzaWdodF9wbXUpOw0KPiA+ICsNCj4gPiArICAg ICBoYXNfb3ZlcmZsb3dlZCA9DQo+IGNvcmVzaWdodF9wbXVfZ2V0X3Jlc2V0X292ZXJmbG93KGNv cmVzaWdodF9wbXUsIHBtb3ZzKTsNCj4gPiArICAgICBpZiAoIWhhc19vdmVyZmxvd2VkKQ0KPiA+ ICsgICAgICAgICAgICAgZ290byBkb25lOw0KPiA+ICsNCj4gPiArICAgICBmb3JfZWFjaF9zZXRf Yml0KGlkeCwgY29yZXNpZ2h0X3BtdS0+aHdfZXZlbnRzLnVzZWRfY3RycywNCj4gPiArICAgICAg ICAgICAgICAgICAgICAgY29yZXNpZ2h0X3BtdS0+bnVtX2xvZ2ljYWxfY291bnRlcnMpIHsNCj4g PiArICAgICAgICAgICAgIGV2ZW50ID0gY29yZXNpZ2h0X3BtdS0+aHdfZXZlbnRzLmV2ZW50c1tp ZHhdOw0KPiA+ICsNCj4gPiArICAgICAgICAgICAgIGlmICghZXZlbnQpDQo+ID4gKyAgICAgICAg ICAgICAgICAgICAgIGNvbnRpbnVlOw0KPiA+ICsNCj4gPiArICAgICAgICAgICAgIGlmICghdGVz dF9iaXQoZXZlbnQtPmh3LmlkeCwgKHVuc2lnbmVkIGxvbmcgKilwbW92cykpDQo+ID4gKyAgICAg ICAgICAgICAgICAgICAgIGNvbnRpbnVlOw0KPiA+ICsNCj4gPiArICAgICAgICAgICAgIGNvcmVz aWdodF9wbXVfZXZlbnRfdXBkYXRlKGV2ZW50KTsNCj4gPiArICAgICAgICAgICAgIGNvcmVzaWdo dF9wbXVfc2V0X2V2ZW50X3BlcmlvZChldmVudCk7DQo+ID4gKw0KPiA+ICsgICAgICAgICAgICAg aGFuZGxlZCA9IHRydWU7DQo+ID4gKyAgICAgfQ0KPiA+ICsNCj4gPiArZG9uZToNCj4gPiArICAg ICBjb3Jlc2lnaHRfcG11X3N0YXJ0X2NvdW50ZXJzKGNvcmVzaWdodF9wbXUpOw0KPiA+ICsgICAg IHJldHVybiBJUlFfUkVUVkFMKGhhbmRsZWQpOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMg aW50IGNvcmVzaWdodF9wbXVfcmVxdWVzdF9pcnEoc3RydWN0IGNvcmVzaWdodF9wbXUNCj4gKmNv cmVzaWdodF9wbXUpDQo+ID4gK3sNCj4gPiArICAgICBpbnQgaXJxLCByZXQ7DQo+ID4gKyAgICAg c3RydWN0IGRldmljZSAqZGV2Ow0KPiA+ICsgICAgIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBk ZXY7DQo+ID4gKyAgICAgc3RydWN0IGFjcGlfYXBtdF9ub2RlICphcG10X25vZGU7DQo+ID4gKw0K PiA+ICsgICAgIGRldiA9IGNvcmVzaWdodF9wbXUtPmRldjsNCj4gPiArICAgICBwZGV2ID0gdG9f cGxhdGZvcm1fZGV2aWNlKGRldik7DQo+ID4gKyAgICAgYXBtdF9ub2RlID0gY29yZXNpZ2h0X3Bt dS0+YXBtdF9ub2RlOw0KPiA+ICsNCj4gPiArICAgICAvKiBTa2lwIElSUSByZXF1ZXN0IGlmIHRo ZSBQTVUgZG9lcyBub3Qgc3VwcG9ydCBvdmVyZmxvdyBpbnRlcnJ1cHQuICovDQo+ID4gKyAgICAg aWYgKGFwbXRfbm9kZS0+b3ZmbHdfaXJxID09IDApDQo+ID4gKyAgICAgICAgICAgICByZXR1cm4g MDsNCj4gPiArDQo+ID4gKyAgICAgaXJxID0gcGxhdGZvcm1fZ2V0X2lycShwZGV2LCAwKTsNCj4g PiArICAgICBpZiAoaXJxIDwgMCkNCj4gPiArICAgICAgICAgICAgIHJldHVybiBpcnE7DQo+ID4g Kw0KPiA+ICsgICAgIHJldCA9IGRldm1fcmVxdWVzdF9pcnEoZGV2LCBpcnEsIGNvcmVzaWdodF9w bXVfaGFuZGxlX2lycSwNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgIElSUUZfTk9C QUxBTkNJTkcgfCBJUlFGX05PX1RIUkVBRCwNCj4gZGV2X25hbWUoZGV2KSwNCj4gPiArICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGNvcmVzaWdodF9wbXUpOw0KPiA+ICsgICAgIGlmIChyZXQp IHsNCj4gPiArICAgICAgICAgICAgIGRldl9lcnIoZGV2LCAiQ291bGQgbm90IHJlcXVlc3QgSVJR ICVkXG4iLCBpcnEpOw0KPiA+ICsgICAgICAgICAgICAgcmV0dXJuIHJldDsNCj4gPiArICAgICB9 DQo+ID4gKw0KPiA+ICsgICAgIGNvcmVzaWdodF9wbXUtPmlycSA9IGlycTsNCj4gPiArDQo+ID4g KyAgICAgcmV0dXJuIDA7DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyBpbmxpbmUgaW50IGNv cmVzaWdodF9wbXVfZmluZF9jcHVfY29udGFpbmVyKGludCBjcHUsIHUzMg0KPiBjb250YWluZXJf dWlkKQ0KPiA+ICt7DQo+ID4gKyAgICAgdTMyIGFjcGlfdWlkOw0KPiA+ICsgICAgIHN0cnVjdCBk ZXZpY2UgKmNwdV9kZXYgPSBnZXRfY3B1X2RldmljZShjcHUpOw0KPiA+ICsgICAgIHN0cnVjdCBh Y3BpX2RldmljZSAqYWNwaV9kZXYgPSBBQ1BJX0NPTVBBTklPTihjcHVfZGV2KTsNCj4gPiArDQo+ ID4gKyAgICAgaWYgKCFjcHVfZGV2KQ0KPiA+ICsgICAgICAgICAgICAgcmV0dXJuIC1FTk9ERVY7 DQo+ID4gKw0KPiA+ICsgICAgIHdoaWxlIChhY3BpX2Rldikgew0KPiA+ICsgICAgICAgICAgICAg aWYgKCFzdHJjbXAoYWNwaV9kZXZpY2VfaGlkKGFjcGlfZGV2KSwNCj4gPiArICAgICAgICAgICAg ICAgICAgICAgICAgIEFDUElfUFJPQ0VTU09SX0NPTlRBSU5FUl9ISUQpICYmDQo+ID4gKyAgICAg ICAgICAgICAgICAgIWtzdHJ0b3VpbnQoYWNwaV9kZXZpY2VfdWlkKGFjcGlfZGV2KSwgMCwgJmFj cGlfdWlkKSAmJg0KPiA+ICsgICAgICAgICAgICAgICAgIGFjcGlfdWlkID09IGNvbnRhaW5lcl91 aWQpDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgIHJldHVybiAwOw0KPiA+ICsNCj4gPiArICAg ICAgICAgICAgIGFjcGlfZGV2ID0gYWNwaV9kZXYtPnBhcmVudDsNCj4gPiArICAgICB9DQo+ID4g Kw0KPiA+ICsgICAgIHJldHVybiAtRU5PREVWOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMg aW50IGNvcmVzaWdodF9wbXVfZ2V0X2NwdXMoc3RydWN0IGNvcmVzaWdodF9wbXUNCj4gKmNvcmVz aWdodF9wbXUpDQo+ID4gK3sNCj4gPiArICAgICBzdHJ1Y3QgYWNwaV9hcG10X25vZGUgKmFwbXRf bm9kZTsNCj4gPiArICAgICBpbnQgYWZmaW5pdHlfZmxhZzsNCj4gPiArICAgICBpbnQgY3B1Ow0K PiA+ICsNCj4gPiArICAgICBhcG10X25vZGUgPSBjb3Jlc2lnaHRfcG11LT5hcG10X25vZGU7DQo+ ID4gKyAgICAgYWZmaW5pdHlfZmxhZyA9IGFwbXRfbm9kZS0+ZmxhZ3MgJiBBQ1BJX0FQTVRfRkxB R1NfQUZGSU5JVFk7DQo+ID4gKw0KPiA+ICsgICAgIGlmIChhZmZpbml0eV9mbGFnID09IEFDUElf QVBNVF9GTEFHU19BRkZJTklUWV9QUk9DKSB7DQo+ID4gKyAgICAgICAgICAgICBmb3JfZWFjaF9w b3NzaWJsZV9jcHUoY3B1KSB7DQo+ID4gKyAgICAgICAgICAgICAgICAgICAgIGlmIChhcG10X25v ZGUtPnByb2NfYWZmaW5pdHkgPT0NCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgIGdldF9h Y3BpX2lkX2Zvcl9jcHUoY3B1KSkgew0KPiANCj4gbWlub3Igbml0Og0KPiANCj4gVGhlcmUgaXMg b25lIGFub3RoZXIgdXNlciBvZiB0aGlzIHJldmVyc2Ugc2VhcmNoIGZvciBDUFUgYnkgYWNwaV9p ZC4NCj4gU2VlIGdldF9jcHVfZm9yX2FjcGlfaWQoKSBpbiBhcmNoL2FybTY0L2tlcm5lbC9hY3Bp X251bWEuYy4NCj4gDQo+IE1heSBiZSB3ZSBzaG91bGQgbWFrZSB0aGF0IGEgZ2VuZXJpYyBoZWxw ZXIgYW5kIG1vdmUgaXQgdG8gY29tbW9uIGNvZGUuDQo+IA0KDQpUaGFua3MgZm9yIHRoZSByZWZl cmVuY2UuIElzIGl0IG9rYXkgdG8gZGVmZXIgdGhpcyB3aXRoIGZvbGxvdyB1cCBwYXRjaCA/DQoN Cj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjcHVtYXNrX3NldF9jcHUoDQo+ID4g KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjcHUsICZjb3Jlc2lnaHRfcG11 LT5hc3NvY2lhdGVkX2NwdXMpOw0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJy ZWFrOw0KPiA+ICsgICAgICAgICAgICAgICAgICAgICB9DQo+ID4gKyAgICAgICAgICAgICB9DQo+ ID4gKyAgICAgfSBlbHNlIHsNCj4gPiArICAgICAgICAgICAgIGZvcl9lYWNoX3Bvc3NpYmxlX2Nw dShjcHUpIHsNCj4gPiArICAgICAgICAgICAgICAgICAgICAgaWYgKGNvcmVzaWdodF9wbXVfZmlu ZF9jcHVfY29udGFpbmVyKA0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj cHUsIGFwbXRfbm9kZS0+cHJvY19hZmZpbml0eSkpDQo+ID4gKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgY29udGludWU7DQo+ID4gKw0KPiA+ICsgICAgICAgICAgICAgICAgICAgICBjcHVt YXNrX3NldF9jcHUoY3B1LCAmY29yZXNpZ2h0X3BtdS0+YXNzb2NpYXRlZF9jcHVzKTsNCj4gPiAr ICAgICAgICAgICAgIH0NCj4gPiArICAgICB9DQo+ID4gKw0KPiA+ICsgICAgIHJldHVybiAwOw0K PiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgaW50IGNvcmVzaWdodF9wbXVfcmVnaXN0ZXJfcG11 KHN0cnVjdCBjb3Jlc2lnaHRfcG11DQo+ICpjb3Jlc2lnaHRfcG11KQ0KPiA+ICt7DQo+ID4gKyAg ICAgaW50IHJldDsNCj4gPiArICAgICBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwICoqYXR0cl9ncm91 cHM7DQo+ID4gKw0KPiA+ICsgICAgIGF0dHJfZ3JvdXBzID0gY29yZXNpZ2h0X3BtdV9hbGxvY19h dHRyX2dyb3VwKGNvcmVzaWdodF9wbXUpOw0KPiA+ICsgICAgIGlmICghYXR0cl9ncm91cHMpIHsN Cj4gPiArICAgICAgICAgICAgIHJldCA9IC1FTk9NRU07DQo+ID4gKyAgICAgICAgICAgICByZXR1 cm4gcmV0Ow0KPiA+ICsgICAgIH0NCj4gPiArDQo+ID4gKyAgICAgcmV0ID0gY3B1aHBfc3RhdGVf YWRkX2luc3RhbmNlKGNvcmVzaWdodF9wbXVfY3B1aHBfc3RhdGUsDQo+ID4gKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICZjb3Jlc2lnaHRfcG11LT5jcHVocF9ub2RlKTsNCj4g PiArICAgICBpZiAocmV0KQ0KPiA+ICsgICAgICAgICAgICAgcmV0dXJuIHJldDsNCj4gPiArDQo+ ID4gKyAgICAgY29yZXNpZ2h0X3BtdS0+cG11ID0gKHN0cnVjdCBwbXUpew0KPiA+ICsgICAgICAg ICAgICAgLnRhc2tfY3R4X25yICAgID0gcGVyZl9pbnZhbGlkX2NvbnRleHQsDQo+ID4gKyAgICAg ICAgICAgICAubW9kdWxlICAgICAgICAgPSBUSElTX01PRFVMRSwNCj4gPiArICAgICAgICAgICAg IC5wbXVfZW5hYmxlICAgICA9IGNvcmVzaWdodF9wbXVfZW5hYmxlLA0KPiA+ICsgICAgICAgICAg ICAgLnBtdV9kaXNhYmxlICAgID0gY29yZXNpZ2h0X3BtdV9kaXNhYmxlLA0KPiA+ICsgICAgICAg ICAgICAgLmV2ZW50X2luaXQgICAgID0gY29yZXNpZ2h0X3BtdV9ldmVudF9pbml0LA0KPiA+ICsg ICAgICAgICAgICAgLmFkZCAgICAgICAgICAgID0gY29yZXNpZ2h0X3BtdV9hZGQsDQo+ID4gKyAg ICAgICAgICAgICAuZGVsICAgICAgICAgICAgPSBjb3Jlc2lnaHRfcG11X2RlbCwNCj4gPiArICAg ICAgICAgICAgIC5zdGFydCAgICAgICAgICA9IGNvcmVzaWdodF9wbXVfc3RhcnQsDQo+ID4gKyAg ICAgICAgICAgICAuc3RvcCAgICAgICAgICAgPSBjb3Jlc2lnaHRfcG11X3N0b3AsDQo+ID4gKyAg ICAgICAgICAgICAucmVhZCAgICAgICAgICAgPSBjb3Jlc2lnaHRfcG11X3JlYWQsDQo+ID4gKyAg ICAgICAgICAgICAuYXR0cl9ncm91cHMgICAgPSAoY29uc3Qgc3RydWN0IGF0dHJpYnV0ZV9ncm91 cCAqKilhdHRyX2dyb3VwcywNCj4gPiArICAgICAgICAgICAgIC5jYXBhYmlsaXRpZXMgICA9IFBF UkZfUE1VX0NBUF9OT19FWENMVURFLA0KPiA+ICsgICAgIH07DQo+ID4gKw0KPiA+ICsgICAgIC8q IEhhcmR3YXJlIGNvdW50ZXIgaW5pdCAqLw0KPiA+ICsgICAgIGNvcmVzaWdodF9wbXVfc3RvcF9j b3VudGVycyhjb3Jlc2lnaHRfcG11KTsNCj4gPiArICAgICBjb3Jlc2lnaHRfcG11X3Jlc2V0X2Nv dW50ZXJzKGNvcmVzaWdodF9wbXUpOw0KPiA+ICsNCj4gPiArICAgICByZXQgPSBwZXJmX3BtdV9y ZWdpc3RlcigmY29yZXNpZ2h0X3BtdS0+cG11LCBjb3Jlc2lnaHRfcG11LQ0KPiA+bmFtZSwgLTEp Ow0KPiA+ICsgICAgIGlmIChyZXQpIHsNCj4gPiArICAgICAgICAgICAgIGNwdWhwX3N0YXRlX3Jl bW92ZV9pbnN0YW5jZShjb3Jlc2lnaHRfcG11X2NwdWhwX3N0YXRlLA0KPiA+ICsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZjb3Jlc2lnaHRfcG11LT5jcHVocF9ub2Rl KTsNCj4gPiArICAgICB9DQo+ID4gKw0KPiA+ICsgICAgIHJldHVybiByZXQ7DQo+ID4gK30NCj4g PiArDQo+ID4gK3N0YXRpYyBpbnQgY29yZXNpZ2h0X3BtdV9kZXZpY2VfcHJvYmUoc3RydWN0IHBs YXRmb3JtX2RldmljZSAqcGRldikNCj4gPiArew0KPiA+ICsgICAgIGludCByZXQ7DQo+ID4gKyAg ICAgc3RydWN0IGNvcmVzaWdodF9wbXUgKmNvcmVzaWdodF9wbXU7DQo+ID4gKw0KPiA+ICsgICAg IHJldCA9IGNvcmVzaWdodF9wbXVfYWxsb2MocGRldiwgJmNvcmVzaWdodF9wbXUpOw0KPiA+ICsg ICAgIGlmIChyZXQpDQo+ID4gKyAgICAgICAgICAgICByZXR1cm4gcmV0Ow0KPiA+ICsNCj4gPiAr ICAgICByZXQgPSBjb3Jlc2lnaHRfcG11X2luaXRfbW1pbyhjb3Jlc2lnaHRfcG11KTsNCj4gPiAr ICAgICBpZiAocmV0KQ0KPiA+ICsgICAgICAgICAgICAgcmV0dXJuIHJldDsNCj4gPiArDQo+ID4g KyAgICAgcmV0ID0gY29yZXNpZ2h0X3BtdV9yZXF1ZXN0X2lycShjb3Jlc2lnaHRfcG11KTsNCj4g PiArICAgICBpZiAocmV0KQ0KPiA+ICsgICAgICAgICAgICAgcmV0dXJuIHJldDsNCj4gPiArDQo+ ID4gKyAgICAgcmV0ID0gY29yZXNpZ2h0X3BtdV9nZXRfY3B1cyhjb3Jlc2lnaHRfcG11KTsNCj4g PiArICAgICBpZiAocmV0KQ0KPiA+ICsgICAgICAgICAgICAgcmV0dXJuIHJldDsNCj4gPiArDQo+ ID4gKyAgICAgcmV0ID0gY29yZXNpZ2h0X3BtdV9yZWdpc3Rlcl9wbXUoY29yZXNpZ2h0X3BtdSk7 DQo+ID4gKyAgICAgaWYgKHJldCkNCj4gPiArICAgICAgICAgICAgIHJldHVybiByZXQ7DQo+ID4g Kw0KPiA+ICsgICAgIHJldHVybiAwOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgaW50IGNv cmVzaWdodF9wbXVfZGV2aWNlX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQ0K PiA+ICt7DQo+ID4gKyAgICAgc3RydWN0IGNvcmVzaWdodF9wbXUgKmNvcmVzaWdodF9wbXUgPSBw bGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsNCj4gPiArDQo+ID4gKyAgICAgcGVyZl9wbXVfdW5y ZWdpc3RlcigmY29yZXNpZ2h0X3BtdS0+cG11KTsNCj4gPiArICAgICBjcHVocF9zdGF0ZV9yZW1v dmVfaW5zdGFuY2UoY29yZXNpZ2h0X3BtdV9jcHVocF9zdGF0ZSwNCj4gPiArICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgJmNvcmVzaWdodF9wbXUtPmNwdWhwX25vZGUpOw0KPiA+ICsN Cj4gPiArICAgICByZXR1cm4gMDsNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIHN0cnVjdCBw bGF0Zm9ybV9kcml2ZXIgY29yZXNpZ2h0X3BtdV9kcml2ZXIgPSB7DQo+ID4gKyAgICAgLmRyaXZl ciA9IHsNCj4gPiArICAgICAgICAgICAgICAgICAgICAgLm5hbWUgPSAiYXJtLXN5c3RlbS1wbXUi LA0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAuc3VwcHJlc3NfYmluZF9hdHRycyA9IHRydWUs DQo+ID4gKyAgICAgICAgICAgICB9LA0KPiA+ICsgICAgIC5wcm9iZSA9IGNvcmVzaWdodF9wbXVf ZGV2aWNlX3Byb2JlLA0KPiA+ICsgICAgIC5yZW1vdmUgPSBjb3Jlc2lnaHRfcG11X2RldmljZV9y ZW1vdmUsDQo+ID4gK307DQo+ID4gKw0KPiA+ICtzdGF0aWMgdm9pZCBjb3Jlc2lnaHRfcG11X3Nl dF9hY3RpdmVfY3B1KGludCBjcHUsDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgc3RydWN0IGNvcmVzaWdodF9wbXUgKmNvcmVzaWdodF9wbXUpDQo+ID4gK3sNCj4g PiArICAgICBjcHVtYXNrX3NldF9jcHUoY3B1LCAmY29yZXNpZ2h0X3BtdS0+YWN0aXZlX2NwdSk7 DQo+ID4gKyAgICAgV0FSTl9PTihpcnFfc2V0X2FmZmluaXR5KGNvcmVzaWdodF9wbXUtPmlycSwN Cj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmNvcmVzaWdodF9wbXUtPmFjdGl2 ZV9jcHUpKTsNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIGludCBjb3Jlc2lnaHRfcG11X2Nw dV9vbmxpbmUodW5zaWduZWQgaW50IGNwdSwgc3RydWN0IGhsaXN0X25vZGUNCj4gKm5vZGUpDQo+ ID4gK3sNCj4gPiArICAgICBzdHJ1Y3QgY29yZXNpZ2h0X3BtdSAqY29yZXNpZ2h0X3BtdSA9DQo+ ID4gKyAgICAgICAgICAgICBobGlzdF9lbnRyeV9zYWZlKG5vZGUsIHN0cnVjdCBjb3Jlc2lnaHRf cG11LCBjcHVocF9ub2RlKTsNCj4gPiArDQo+ID4gKyAgICAgaWYgKCFjcHVtYXNrX3Rlc3RfY3B1 KGNwdSwgJmNvcmVzaWdodF9wbXUtPmFzc29jaWF0ZWRfY3B1cykpDQo+ID4gKyAgICAgICAgICAg ICByZXR1cm4gMDsNCj4gPiArDQo+ID4gKyAgICAgLyogSWYgdGhlIFBNVSBpcyBhbHJlYWR5IG1h bmFnZWQsIHRoZXJlIGlzIG5vdGhpbmcgdG8gZG8gKi8NCj4gPiArICAgICBpZiAoIWNwdW1hc2tf ZW1wdHkoJmNvcmVzaWdodF9wbXUtPmFjdGl2ZV9jcHUpKQ0KPiA+ICsgICAgICAgICAgICAgcmV0 dXJuIDA7DQo+ID4gKw0KPiA+ICsgICAgIC8qIFVzZSB0aGlzIENQVSBmb3IgZXZlbnQgY291bnRp bmcgKi8NCj4gPiArICAgICBjb3Jlc2lnaHRfcG11X3NldF9hY3RpdmVfY3B1KGNwdSwgY29yZXNp Z2h0X3BtdSk7DQo+ID4gKw0KPiA+ICsgICAgIHJldHVybiAwOw0KPiA+ICt9DQo+ID4gKw0KPiA+ ICtzdGF0aWMgaW50IGNvcmVzaWdodF9wbXVfY3B1X3RlYXJkb3duKHVuc2lnbmVkIGludCBjcHUs IHN0cnVjdA0KPiBobGlzdF9ub2RlICpub2RlKQ0KPiA+ICt7DQo+ID4gKyAgICAgaW50IGRzdDsN Cj4gPiArICAgICBzdHJ1Y3QgY3B1bWFzayBvbmxpbmVfc3VwcG9ydGVkOw0KPiA+ICsNCj4gPiAr ICAgICBzdHJ1Y3QgY29yZXNpZ2h0X3BtdSAqY29yZXNpZ2h0X3BtdSA9DQo+ID4gKyAgICAgICAg ICAgICBobGlzdF9lbnRyeV9zYWZlKG5vZGUsIHN0cnVjdCBjb3Jlc2lnaHRfcG11LCBjcHVocF9u b2RlKTsNCj4gPiArDQo+ID4gKyAgICAgLyogTm90aGluZyB0byBkbyBpZiB0aGlzIENQVSBkb2Vz bid0IG93biB0aGUgUE1VICovDQo+ID4gKyAgICAgaWYgKCFjcHVtYXNrX3Rlc3RfYW5kX2NsZWFy X2NwdShjcHUsICZjb3Jlc2lnaHRfcG11LT5hY3RpdmVfY3B1KSkNCj4gPiArICAgICAgICAgICAg IHJldHVybiAwOw0KPiA+ICsNCj4gPiArICAgICAvKiBDaG9vc2UgYSBuZXcgQ1BVIHRvIG1pZ3Jh dGUgb3duZXJzaGlwIG9mIHRoZSBQTVUgdG8gKi8NCj4gPiArICAgICBjcHVtYXNrX2FuZCgmb25s aW5lX3N1cHBvcnRlZCwgJmNvcmVzaWdodF9wbXUtPmFzc29jaWF0ZWRfY3B1cywNCj4gPiArICAg ICAgICAgICAgICAgICBjcHVfb25saW5lX21hc2spOw0KPiA+ICsgICAgIGRzdCA9IGNwdW1hc2tf YW55X2J1dCgmb25saW5lX3N1cHBvcnRlZCwgY3B1KTsNCj4gPiArICAgICBpZiAoZHN0ID49IG5y X2NwdV9pZHMpDQo+ID4gKyAgICAgICAgICAgICByZXR1cm4gMDsNCj4gPiArDQo+ID4gKyAgICAg LyogVXNlIHRoaXMgQ1BVIGZvciBldmVudCBjb3VudGluZyAqLw0KPiA+ICsgICAgIHBlcmZfcG11 X21pZ3JhdGVfY29udGV4dCgmY29yZXNpZ2h0X3BtdS0+cG11LCBjcHUsIGRzdCk7DQo+ID4gKyAg ICAgY29yZXNpZ2h0X3BtdV9zZXRfYWN0aXZlX2NwdShkc3QsIGNvcmVzaWdodF9wbXUpOw0KPiA+ ICsNCj4gPiArICAgICByZXR1cm4gMDsNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIGludCBf X2luaXQgY29yZXNpZ2h0X3BtdV9pbml0KHZvaWQpDQo+ID4gK3sNCj4gPiArICAgICBpbnQgcmV0 Ow0KPiA+ICsNCj4gPiArICAgICByZXQgPSBjcHVocF9zZXR1cF9zdGF0ZV9tdWx0aShDUFVIUF9B UF9PTkxJTkVfRFlOLCBQTVVOQU1FLA0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGNvcmVzaWdodF9wbXVfY3B1X29ubGluZSwNCj4gPiArICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBjb3Jlc2lnaHRfcG11X2NwdV90ZWFyZG93bik7DQo+ID4gKyAgICAg aWYgKHJldCA8IDApDQo+ID4gKyAgICAgICAgICAgICByZXR1cm4gcmV0Ow0KPiA+ICsgICAgIGNv cmVzaWdodF9wbXVfY3B1aHBfc3RhdGUgPSByZXQ7DQo+ID4gKyAgICAgcmV0dXJuIHBsYXRmb3Jt X2RyaXZlcl9yZWdpc3RlcigmY29yZXNpZ2h0X3BtdV9kcml2ZXIpOw0KPiA+ICt9DQo+ID4gKw0K PiA+ICtzdGF0aWMgdm9pZCBfX2V4aXQgY29yZXNpZ2h0X3BtdV9leGl0KHZvaWQpDQo+ID4gK3sN Cj4gPiArICAgICBwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmY29yZXNpZ2h0X3BtdV9kcml2 ZXIpOw0KPiA+ICsgICAgIGNwdWhwX3JlbW92ZV9tdWx0aV9zdGF0ZShjb3Jlc2lnaHRfcG11X2Nw dWhwX3N0YXRlKTsNCj4gPiArfQ0KPiA+ICsNCj4gPiArbW9kdWxlX2luaXQoY29yZXNpZ2h0X3Bt dV9pbml0KTsNCj4gPiArbW9kdWxlX2V4aXQoY29yZXNpZ2h0X3BtdV9leGl0KTsNCj4gPiBkaWZm IC0tZ2l0IGEvZHJpdmVycy9wZXJmL2NvcmVzaWdodF9wbXUvYXJtX2NvcmVzaWdodF9wbXUuaA0K PiBiL2RyaXZlcnMvcGVyZi9jb3Jlc2lnaHRfcG11L2FybV9jb3Jlc2lnaHRfcG11LmgNCj4gPiBu ZXcgZmlsZSBtb2RlIDEwMDY0NA0KPiA+IGluZGV4IDAwMDAwMDAwMDAwMC4uODhmYjRjZDNkYWZh DQo+ID4gLS0tIC9kZXYvbnVsbA0KPiA+ICsrKyBiL2RyaXZlcnMvcGVyZi9jb3Jlc2lnaHRfcG11 L2FybV9jb3Jlc2lnaHRfcG11LmgNCj4gPiBAQCAtMCwwICsxLDE3NyBAQA0KPiA+ICsvKiBTUERY LUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMA0KPiA+ICsgKg0KPiA+ICsgKiBBUk0gQ29yZVNp Z2h0IFBNVSBkcml2ZXIuDQo+ID4gKyAqIENvcHlyaWdodCAoYykgMjAyMiwgTlZJRElBIENPUlBP UkFUSU9OICYgQUZGSUxJQVRFUy4NCj4gPiArICoNCj4gPiArICovDQo+ID4gKw0KPiA+ICsjaWZu ZGVmIF9fQVJNX0NPUkVTSUdIVF9QTVVfSF9fDQo+ID4gKyNkZWZpbmUgX19BUk1fQ09SRVNJR0hU X1BNVV9IX18NCj4gPiArDQo+ID4gKyNpbmNsdWRlIDxsaW51eC9hY3BpLmg+DQo+ID4gKyNpbmNs dWRlIDxsaW51eC9iaXRmaWVsZC5oPg0KPiA+ICsjaW5jbHVkZSA8bGludXgvY3B1bWFzay5oPg0K PiA+ICsjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+DQo+ID4gKyNpbmNsdWRlIDxsaW51eC9rZXJu ZWwuaD4NCj4gPiArI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPg0KPiA+ICsjaW5jbHVkZSA8bGlu dXgvcGVyZl9ldmVudC5oPg0KPiA+ICsjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+ DQo+ID4gKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPg0KPiA+ICsNCj4gPiArI2RlZmluZSB0b19j b3Jlc2lnaHRfcG11KHApIChjb250YWluZXJfb2YocCwgc3RydWN0IGNvcmVzaWdodF9wbXUsDQo+ IHBtdSkpDQo+ID4gKw0KPiA+ICsjZGVmaW5lIENPUkVTSUdIVF9FWFRfQVRUUihfbmFtZSwgX2Z1 bmMsIF9jb25maWcpICAgICAgICAgICAgICAgICAgICBcDQo+ID4gKyAgICAgKCYoKHN0cnVjdCBk ZXZfZXh0X2F0dHJpYnV0ZVtdKXsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCj4g PiArICAgICAgICAgICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgXA0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAuYXR0ciA9IF9fQVRU UihfbmFtZSwgMDQ0NCwgX2Z1bmMsIE5VTEwpLCAgICAgICBcDQo+ID4gKyAgICAgICAgICAgICAg ICAgICAgIC52YXIgPSAodm9pZCAqKV9jb25maWcgICAgICAgICAgICAgICAgICAgICAgICAgIFwN Cj4gPiArICAgICAgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgXA0KPiA+ICsgICAgIH0pWzBdLmF0dHIuYXR0cikNCj4gPiArDQo+ ID4gKyNkZWZpbmUgQ09SRVNJR0hUX0ZPUk1BVF9BVFRSKF9uYW1lLCBfY29uZmlnKSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgXA0KPiA+ICsgICAgIENPUkVTSUdIVF9FWFRfQVRUUihf bmFtZSwgY29yZXNpZ2h0X3BtdV9zeXNmc19mb3JtYXRfc2hvdywNCj4gXA0KPiA+ICsgICAgICAg ICAgICAgICAgICAgICAgICAoY2hhciAqKV9jb25maWcpDQo+ID4gKw0KPiA+ICsjZGVmaW5lIENP UkVTSUdIVF9FVkVOVF9BVFRSKF9uYW1lLCBfY29uZmlnKSAgICAgICAgICAgICAgICAgICAgICAg ICBcDQo+ID4gKyAgICAgUE1VX0VWRU5UX0FUVFJfSUQoX25hbWUsIGNvcmVzaWdodF9wbXVfc3lz ZnNfZXZlbnRfc2hvdywNCj4gX2NvbmZpZykNCj4gPiArDQo+ID4gKw0KPiA+ICsvKiBEZWZhdWx0 IGV2ZW50IGlkIG1hc2sgKi8NCj4gPiArI2RlZmluZSBDT1JFU0lHSFRfRVZFTlRfTUFTSyAgICAg ICAgICAgICAgICAgICAgICAgICAweEZGRkZGRkZGVUxMDQo+IA0KPiBQbGVhc2UgdXNlIEdFTk1B U0tfVUxMKCksIGV2ZXJ5d2hlcmUuDQo+IA0KDQpBY2tlZC4NCg0KVGhhbmtzIGZvciBhbGwgeW91 ciBjb21tZW50cywgSSB3aWxsIGFkZHJlc3MgaXQgb24gdGhlIG5leHQgdmVyc2lvbi4NCg0KUmVn YXJkcywNCkJlc2FyDQoNCg0KPiBUaGFua3MNCj4gU3V6dWtpDQo=